diff --git a/go.mod b/go.mod index 724a44f3f3..4d0d25fdf5 100644 --- a/go.mod +++ b/go.mod @@ -6,20 +6,20 @@ require ( github.com/blang/semver/v4 v4.0.0 github.com/go-bindata/go-bindata/v3 v3.1.3 github.com/go-logr/logr v1.4.3 - github.com/golang/mock v1.6.0 + github.com/golang/mock v1.7.0-rc.1 github.com/googleapis/gnostic v0.5.5 - github.com/grpc-ecosystem/grpc-health-probe v0.4.41 + github.com/grpc-ecosystem/grpc-health-probe v0.4.44 github.com/maxbrunsfeld/counterfeiter/v6 v6.12.1 github.com/mikefarah/yq/v3 v3.0.0-20201202084205-8846255d1c37 github.com/onsi/ginkgo/v2 v2.27.5 github.com/openshift/api v0.0.0-20251111193948-50e2ece149d7 - github.com/operator-framework/api v0.37.0 + github.com/operator-framework/api v0.38.0 github.com/operator-framework/operator-lifecycle-manager v0.0.0-00010101000000-000000000000 - github.com/operator-framework/operator-registry v1.61.0 + github.com/operator-framework/operator-registry v1.62.0 github.com/sirupsen/logrus v1.9.4 github.com/spf13/cobra v1.10.2 github.com/stretchr/testify v1.11.1 - google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 + google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.0 google.golang.org/protobuf v1.36.11 gopkg.in/yaml.v2 v2.4.0 k8s.io/api v0.34.3 @@ -47,12 +47,12 @@ require ( github.com/akrylysov/pogreb v0.10.2 // indirect github.com/antlr4-go/antlr/v4 v4.13.1 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/cenkalti/backoff/v5 v5.0.2 // indirect + github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/clipperhouse/stringish v0.1.1 // indirect github.com/clipperhouse/uax29/v2 v2.3.0 // indirect github.com/containerd/cgroups/v3 v3.0.5 // indirect - github.com/containerd/containerd v1.7.29 // indirect + github.com/containerd/containerd v1.7.30 // indirect github.com/containerd/containerd/api v1.9.0 // indirect github.com/containerd/continuity v0.4.5 // indirect github.com/containerd/errdefs v1.0.0 // indirect @@ -68,7 +68,7 @@ require ( github.com/cyberphone/json-canonicalization v0.0.0-20241213102144-19d51d7fe467 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/distribution/reference v0.6.0 // indirect - github.com/docker/cli v29.0.0+incompatible // indirect + github.com/docker/cli v29.1.5+incompatible // indirect github.com/docker/distribution v2.8.3+incompatible // indirect github.com/docker/docker v28.5.1+incompatible // indirect github.com/docker/docker-credential-helpers v0.9.4 // indirect @@ -95,7 +95,7 @@ require ( github.com/gobuffalo/flect v1.0.3 // indirect github.com/goccy/go-yaml v1.18.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-migrate/migrate/v4 v4.19.0 // indirect + github.com/golang-migrate/migrate/v4 v4.19.1 // indirect github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/btree v1.1.3 // indirect @@ -109,7 +109,7 @@ require ( github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.3 // indirect github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20210315223345-82c243799c99 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect github.com/h2non/filetype v1.1.3 // indirect github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect @@ -123,13 +123,12 @@ require ( github.com/klauspost/compress v1.18.0 // indirect github.com/klauspost/pgzip v1.2.6 // indirect github.com/kylelemons/godebug v1.1.0 // indirect - github.com/letsencrypt/boulder v0.0.0-20250624003606-5ddd5acf990d // indirect github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect github.com/mailru/easyjson v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.19 // indirect - github.com/mattn/go-sqlite3 v1.14.32 // indirect + github.com/mattn/go-sqlite3 v1.14.33 // indirect github.com/miekg/pkcs11 v1.1.1 // indirect github.com/mitchellh/go-wordwrap v1.0.1 // indirect github.com/mitchellh/hashstructure v1.1.0 // indirect @@ -146,6 +145,7 @@ require ( github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect + github.com/nxadm/tail v1.4.11 // indirect github.com/onsi/gomega v1.39.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.1 // indirect @@ -163,16 +163,15 @@ require ( github.com/prometheus/procfs v0.16.1 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/secure-systems-lab/go-securesystemslib v0.9.1 // indirect - github.com/sigstore/fulcio v1.7.1 // indirect - github.com/sigstore/protobuf-specs v0.4.3 // indirect - github.com/sigstore/sigstore v1.9.5 // indirect + github.com/sigstore/fulcio v1.8.3 // indirect + github.com/sigstore/protobuf-specs v0.5.0 // indirect + github.com/sigstore/sigstore v1.10.0 // indirect github.com/smallstep/pkcs7 v0.2.1 // indirect github.com/spf13/pflag v1.0.10 // indirect github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect github.com/stefanberger/go-pkcs11uri v0.0.0-20230803200340-78284954bff6 // indirect github.com/stoewer/go-strcase v1.3.1 // indirect github.com/tidwall/btree v1.8.1 // indirect - github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 // indirect github.com/ulikunitz/xz v0.5.15 // indirect github.com/vbatts/tar-split v0.12.1 // indirect github.com/vbauerster/mpb/v8 v8.10.2 // indirect @@ -183,26 +182,26 @@ require ( go.etcd.io/etcd/client/v3 v3.6.4 // indirect go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 // indirect go.opentelemetry.io/otel v1.38.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.36.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect - go.opentelemetry.io/proto/otlp v1.7.0 // indirect - go.podman.io/common v0.66.0 // indirect + go.opentelemetry.io/proto/otlp v1.7.1 // indirect + go.podman.io/common v0.66.1 // indirect go.podman.io/image/v5 v5.38.0 // indirect go.podman.io/storage v1.61.0 // indirect go.uber.org/multierr v1.11.0 // indirect - go.uber.org/zap v1.27.0 // indirect + go.uber.org/zap v1.27.1 // indirect go.yaml.in/yaml/v2 v2.4.3 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/crypto v0.47.0 // indirect golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b // indirect golang.org/x/lint v0.0.0-20241112194109-818c5a804067 // indirect - golang.org/x/mod v0.31.0 // indirect + golang.org/x/mod v0.32.0 // indirect golang.org/x/net v0.49.0 // indirect golang.org/x/oauth2 v0.34.0 // indirect golang.org/x/sync v0.19.0 // indirect diff --git a/go.sum b/go.sum index 72c2799d8c..30aeae3c75 100644 --- a/go.sum +++ b/go.sum @@ -40,8 +40,8 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= -github.com/cenkalti/backoff/v5 v5.0.2 h1:rIfFVxEf1QsI7E1ZHfp/B4DF/6QBAUhmgkxc0H7Zss8= -github.com/cenkalti/backoff/v5 v5.0.2/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= +github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= +github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= @@ -54,8 +54,8 @@ github.com/clipperhouse/uax29/v2 v2.3.0/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsV github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/containerd/cgroups/v3 v3.0.5 h1:44na7Ud+VwyE7LIoJ8JTNQOa549a8543BmzaJHo6Bzo= github.com/containerd/cgroups/v3 v3.0.5/go.mod h1:SA5DLYnXO8pTGYiAHXz94qvLQTKfVM5GEVisn4jpins= -github.com/containerd/containerd v1.7.29 h1:90fWABQsaN9mJhGkoVnuzEY+o1XDPbg9BTC9QTAHnuE= -github.com/containerd/containerd v1.7.29/go.mod h1:azUkWcOvHrWvaiUjSQH0fjzuHIwSPg1WL5PshGP4Szs= +github.com/containerd/containerd v1.7.30 h1:/2vezDpLDVGGmkUXmlNPLCCNKHJ5BbC5tJB5JNzQhqE= +github.com/containerd/containerd v1.7.30/go.mod h1:fek494vwJClULlTpExsmOyKCMUAbuVjlFsJQc4/j44M= github.com/containerd/containerd/api v1.9.0 h1:HZ/licowTRazus+wt9fM6r/9BQO7S0vD5lMcWspGIg0= github.com/containerd/containerd/api v1.9.0/go.mod h1:GhghKFmTR3hNtyznBoQ0EMWr9ju5AqHjcZPsSpTKutI= github.com/containerd/continuity v0.4.5 h1:ZRoN1sXq9u7V6QoHMcVWGhOwDFqZ4B9i5H6un1Wh0x4= @@ -103,8 +103,8 @@ github.com/distribution/distribution/v3 v3.0.0 h1:q4R8wemdRQDClzoNNStftB2ZAfqOiN github.com/distribution/distribution/v3 v3.0.0/go.mod h1:tRNuFoZsUdyRVegq8xGNeds4KLjwLCRin/tTo6i1DhU= 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 v29.0.0+incompatible h1:KgsN2RUFMNM8wChxryicn4p46BdQWpXOA1XLGBGPGAw= -github.com/docker/cli v29.0.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v29.1.5+incompatible h1:GckbANUt3j+lsnQ6eCcQd70mNSOismSHWt8vk2AX8ao= +github.com/docker/cli v29.1.5+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v28.5.1+incompatible h1:Bm8DchhSD2J6PsFzxC35TZo4TLGR2PdW/E69rU45NhM= @@ -139,6 +139,7 @@ github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/ 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/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM= @@ -185,8 +186,6 @@ github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+ github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= -github.com/go-test/deep v1.1.1 h1:0r/53hagsehfO4bzD2Pgr/+RgHqhmf+k1Bpse2cTu1U= -github.com/go-test/deep v1.1.1/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= github.com/gobuffalo/flect v1.0.3 h1:xeWBM2nui+qnVvNM4S3foBhCAL2XgPU+a7FdpelbTq4= github.com/gobuffalo/flect v1.0.3/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs= github.com/goccy/go-yaml v1.8.1/go.mod h1:wS4gNoLalDSJxo/SpngzPQ2BN4uuZVLCmbM4S3vd4+Y= @@ -198,16 +197,16 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= -github.com/golang-migrate/migrate/v4 v4.19.0 h1:RcjOnCGz3Or6HQYEJ/EEVLfWnmw9KnoigPSjzhCuaSE= -github.com/golang-migrate/migrate/v4 v4.19.0/go.mod h1:9dyEcu+hO+G9hPSw8AIg50yg622pXJsoHItQnDGZkI0= +github.com/golang-migrate/migrate/v4 v4.19.1 h1:OCyb44lFuQfYXYLx1SCxPZQGU7mcaZ7gH9yH4jSFbBA= +github.com/golang-migrate/migrate/v4 v4.19.1/go.mod h1:CTcgfjxhaUtsLipnLoQRWCrjYXycRz/g5+RWDuYgPrE= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/mock v1.7.0-rc.1 h1:YojYx61/OLFsiv6Rw1Z96LpldJIy31o+UHmwAUMJ6/U= +github.com/golang/mock v1.7.0-rc.1/go.mod h1:s42URUywIqd+OcERslBJvOjepvNymP31m3q8d/GkuRs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -260,26 +259,22 @@ github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 h1:JeSE6pjso5T github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674/go.mod h1:r4w70xmWCQKmi1ONH4KIaBptdivuRPyosB9RmPlGEwA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= -github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 h1:qnpSQwGEnkcRpTqNOIR6bJbR0gAorgP9CSALpRcKoAA= -github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1/go.mod h1:lXGCsh6c22WGtjr+qGHj1otzZpV/1kwTMAqkwZsnWRU= +github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.1.0 h1:QGLs/O40yoNK9vmy4rhUGBVyMf1lISBGtXRpsu/Qu/o= +github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.1.0/go.mod h1:hM2alZsMUni80N33RBe6J0e423LB+odMj7d3EMP9l20= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.3 h1:B+8ClL/kCQkRiU82d9xajRPKYMrB7E0MbtzWVi1K4ns= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.3/go.mod h1:NbCUVmiS4foBGBHOYlCT25+YmGpJ32dZPi75pGEUpj4= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20210315223345-82c243799c99 h1:JYghRBlGCZyCF2wNUJ8W0cwaQdtpcssJ4CgC406g+WU= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20210315223345-82c243799c99/go.mod h1:3bDW6wMZJB7tiONtC/1Xpicra6Wp5GgbTbQWCbI5fkc= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.0 h1:+epNPbD5EqgpEMm5wrl4Hqts3jZt8+kYaqUisuuIGTk= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.0/go.mod h1:Zanoh4+gvIgluNqcfMVTJueD4wSS5hT7zTt4Mrutd90= -github.com/grpc-ecosystem/grpc-health-probe v0.4.41 h1:CUEfHjjmS2dqe6y3Ge4UiQTgjQ7f8ol5zbLIpWLE0NU= -github.com/grpc-ecosystem/grpc-health-probe v0.4.41/go.mod h1:zKKD5raX5byCWAdkiLno5gd10RT6q50VtVTuEhe1DiU= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 h1:NmZ1PKzSTQbuGHw9DGPFomqkkLWMC+vZCkfs+FHv1Vg= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3/go.mod h1:zQrxl1YP88HQlA6i9c63DSVPFklWpGX4OWAc9bFuaH4= +github.com/grpc-ecosystem/grpc-health-probe v0.4.44 h1:UL/D651ntWGhnAR8MwhdzPM0tHhWFrXToL+9uX+YXRs= +github.com/grpc-ecosystem/grpc-health-probe v0.4.44/go.mod h1:omGa1rvwXOYzLpaxeOAHruRqdCYGJUSVds++SpkF5iQ= github.com/h2non/filetype v1.1.3 h1:FKkx9QbD7HR/zjK1Ia5XiBsq9zdLi5Kf3zGyFTAFkGg= github.com/h2non/filetype v1.1.3/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY= github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c h1:fEE5/5VNnYUoBOj2I9TP8Jc+a7lge3QWn9DKE7NCwfc= github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c/go.mod h1:ObS/W+h8RYb1Y7fYivughjxojTmIu5iAIjSrSLCLeqE= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru/arc/v2 v2.0.7 h1:QxkVTxwColcduO+LP7eJO56r2hFiG8zEbfAAzRv52KQ= github.com/hashicorp/golang-lru/arc/v2 v2.0.7/go.mod h1:Pe7gBlGdc8clY5LJ0LpJXMt5AmgmWNH1g+oFFVUHOEc= @@ -295,8 +290,6 @@ github.com/itchyny/timefmt-go v0.1.7 h1:xyftit9Tbw+Dc/huSSPJaEmX1TVL8lw5vxjJLK4G github.com/itchyny/timefmt-go v0.1.7/go.mod h1:5E46Q+zj7vbTgWY8o5YkMeYb4I6GeWLFnetPy5oBrAI= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jmhodges/clock v1.2.0 h1:eq4kys+NI0PLngzaHEe7AmPT90XMGIEySD1JfV1PDIs= -github.com/jmhodges/clock v1.2.0/go.mod h1:qKjhA7x7u/lQpPB1XAqX1b1lCI/w3/fNuYpI/ZjLynI= github.com/joelanford/ignore v0.1.1 h1:vKky5RDoPT+WbONrbQBgOn95VV/UPh4ejlyAbbzgnQk= github.com/joelanford/ignore v0.1.1/go.mod h1:8eho/D8fwQ3rIXrLwE23AaeaGDNXqLE9QJ3zJ4LIPCw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= @@ -332,8 +325,6 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/letsencrypt/boulder v0.0.0-20250624003606-5ddd5acf990d h1:fCRb9hXR4QQJpwc7xnGugnva0DD5ollTGkys0n8aXT4= -github.com/letsencrypt/boulder v0.0.0-20250624003606-5ddd5acf990d/go.mod h1:BVoSL2Ed8oCncct0meeBqoTY7b1Mzx7WqEOZ8EisFmY= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= @@ -356,8 +347,8 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw= github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= -github.com/mattn/go-sqlite3 v1.14.32 h1:JD12Ag3oLy1zQA+BNn74xRgaBbdhbNIDYvQUEuuErjs= -github.com/mattn/go-sqlite3 v1.14.32/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/mattn/go-sqlite3 v1.14.33 h1:A5blZ5ulQo2AtayQ9/limgHEkFreKj1Dv226a1K73s0= +github.com/mattn/go-sqlite3 v1.14.33/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/maxbrunsfeld/counterfeiter/v6 v6.12.1 h1:D4O2wLxB384TS3ohBJMfolnxb4qGmoZ1PnWNtit8LYo= github.com/maxbrunsfeld/counterfeiter/v6 v6.12.1/go.mod h1:RuJdxo0oI6dClIaMzdl3hewq3a065RH65dofJP03h8I= @@ -476,12 +467,12 @@ github.com/sclevine/spec v1.4.0/go.mod h1:LvpgJaFyvQzRvc1kaDs0bulYwzC70PbiYjC4Qn github.com/secure-systems-lab/go-securesystemslib v0.9.1 h1:nZZaNz4DiERIQguNy0cL5qTdn9lR8XKHf4RUyG1Sx3g= github.com/secure-systems-lab/go-securesystemslib v0.9.1/go.mod h1:np53YzT0zXGMv6x4iEWc9Z59uR+x+ndLwCLqPYpLXVU= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sigstore/fulcio v1.7.1 h1:RcoW20Nz49IGeZyu3y9QYhyyV3ZKQ85T+FXPKkvE+aQ= -github.com/sigstore/fulcio v1.7.1/go.mod h1:7lYY+hsd8Dt+IvKQRC+KEhWpCZ/GlmNvwIa5JhypMS8= -github.com/sigstore/protobuf-specs v0.4.3 h1:kRgJ+ciznipH9xhrkAbAEHuuxD3GhYnGC873gZpjJT4= -github.com/sigstore/protobuf-specs v0.4.3/go.mod h1:+gXR+38nIa2oEupqDdzg4qSBT0Os+sP7oYv6alWewWc= -github.com/sigstore/sigstore v1.9.5 h1:Wm1LT9yF4LhQdEMy5A2JeGRHTrAWGjT3ubE5JUSrGVU= -github.com/sigstore/sigstore v1.9.5/go.mod h1:VtxgvGqCmEZN9X2zhFSOkfXxvKUjpy8RpUW39oCtoII= +github.com/sigstore/fulcio v1.8.3 h1:zkuAkRHbD53hhYGlBHHeAW4NRDrrTiDHumAbcfSyyFw= +github.com/sigstore/fulcio v1.8.3/go.mod h1:YxP7TTdn9H5Gg+dXOsu61X36LLYxT2ZuvODhWelMNwA= +github.com/sigstore/protobuf-specs v0.5.0 h1:F8YTI65xOHw70NrvPwJ5PhAzsvTnuJMGLkA4FIkofAY= +github.com/sigstore/protobuf-specs v0.5.0/go.mod h1:+gXR+38nIa2oEupqDdzg4qSBT0Os+sP7oYv6alWewWc= +github.com/sigstore/sigstore v1.10.0 h1:lQrmdzqlR8p9SCfWIpFoGUqdXEzJSZT2X+lTXOMPaQI= +github.com/sigstore/sigstore v1.10.0/go.mod h1:Ygq+L/y9Bm3YnjpJTlQrOk/gXyrjkpn3/AEJpmk1n9Y= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= @@ -535,8 +526,6 @@ github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= -github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 h1:e/5i7d4oYZ+C1wj2THlRK+oAhjeS/TRQwMfkIuet3w0= -github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399/go.mod h1:LdwHTNJT99C5fTAzDz0ud328OgXz+gierycbcIx2fRs= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75 h1:6fotK7otjonDflCTK0BCfls4SPy3NcCVb5dqqmbRknE= github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75/go.mod h1:KO6IkyS8Y3j8OdNO85qEYBsRPuteD+YciPomcXdrMnk= @@ -555,7 +544,7 @@ github.com/xiang90/probing v0.0.0-20221125231312-a49e3df8f510/go.mod h1:UETIi67q github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.4.3 h1:dEadXpI6G79deX5prL3QRNP6JB8UxVkqo4UPnHaNXJo= @@ -580,10 +569,10 @@ go.opentelemetry.io/contrib/bridges/prometheus v0.61.0 h1:RyrtJzu5MAmIcbRrwg75b+ go.opentelemetry.io/contrib/bridges/prometheus v0.61.0/go.mod h1:tirr4p9NXbzjlbruiRGp53IzlYrDk5CO2fdHj0sSSaY= go.opentelemetry.io/contrib/exporters/autoexport v0.61.0 h1:XfzKtKSrbtYk9TNCF8dkO0Y9M7IOfb4idCwBOTwGBiI= go.opentelemetry.io/contrib/exporters/autoexport v0.61.0/go.mod h1:N6otC+qXTD5bAnbK2O1f/1SXq3cX+3KYSWrkBUqG0cw= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 h1:q4XOmH/0opmeuJtPsbFNivyl7bCt7yRBbeEm2sC/XtQ= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 h1:YH4g8lQroajqUwWbq/tr2QX1JFmEXaDLgG+ew9bLMWo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 h1:RbKq8BG0FI8OiXhBfcRtqqHcZcka+gU3cskNuf05R18= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0/go.mod h1:h06DGIukJOevXaj/xrNjhi/2098RZzcLTbc0jDAUbsg= go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.12.2 h1:06ZeJRe5BnYXceSM9Vya83XXVaNGe3H1QqsvqRANQq8= @@ -594,10 +583,10 @@ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.36.0 h1:zwd go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.36.0/go.mod h1:rUKCPscaRWWcqGT6HnEmYrK+YNe5+Sw64xgQTOJ5b30= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.36.0 h1:gAU726w9J8fwr4qRDqu1GYMNNs4gXrU+Pv20/N1UpB4= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.36.0/go.mod h1:RboSDkp7N292rgu+T0MgVt2qgFGu6qa1RpZDOtpL76w= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0 h1:dNzwXjZKpMpE2JhmO+9HsPl42NIXFIFSUSSs0fiqra0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0/go.mod h1:90PoxvaEB5n6AOdZvi+yWJQoE95U8Dhhw2bSyRqnTD0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.36.0 h1:JgtbA0xkWHnTmYk7YusopJFX6uleBmAuZ8n05NEh8nQ= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.36.0/go.mod h1:179AK5aar5R3eS9FucPy6rggvU0g52cvKId8pv4+v0c= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 h1:lwI4Dc5leUqENgGuQImwLo4WnuXFPetmPpkLi2IrX54= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0/go.mod h1:Kz/oCE7z5wuyhPxsXDuaPteSWqjSBD5YaSdbxZYGbGk= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.36.0 h1:nRVXXvf78e00EwY6Wp0YII8ww2JVWshZ20HfTlE11AM= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.36.0/go.mod h1:r49hO7CgrxY9Voaj3Xe8pANWtr0Oq916d0XAmOoCZAQ= go.opentelemetry.io/otel/exporters/prometheus v0.58.0 h1:CJAxWKFIqdBennqxJyOgnt5LqkeFRT+Mz3Yjz3hL+h8= @@ -620,10 +609,10 @@ go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6 go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= -go.opentelemetry.io/proto/otlp v1.7.0 h1:jX1VolD6nHuFzOYso2E73H85i92Mv8JQYk0K9vz09os= -go.opentelemetry.io/proto/otlp v1.7.0/go.mod h1:fSKjH6YJ7HDlwzltzyMj036AJ3ejJLCgCSHGj4efDDo= -go.podman.io/common v0.66.0 h1:KElE3HKLFdMdJL+jv5ExBiX2Dh4Qcv8ovmzaBGRsyZM= -go.podman.io/common v0.66.0/go.mod h1:aNd2a0S7pY+fx1X5kpQYuF4hbwLU8ZOccuVrhu7h1Xc= +go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4= +go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE= +go.podman.io/common v0.66.1 h1:zDyd4HhVgQAN8LupBHCnhtM3FEOJ9DwmThjulXZq2qA= +go.podman.io/common v0.66.1/go.mod h1:aNd2a0S7pY+fx1X5kpQYuF4hbwLU8ZOccuVrhu7h1Xc= go.podman.io/image/v5 v5.38.0 h1:aUKrCANkPvze1bnhLJsaubcfz0d9v/bSDLnwsXJm6G4= go.podman.io/image/v5 v5.38.0/go.mod h1:hSIoIUzgBnmc4DjoIdzk63aloqVbD7QXDMkSE/cvG90= go.podman.io/storage v1.61.0 h1:5hD/oyRYt1f1gxgvect+8syZBQhGhV28dCw2+CZpx0Q= @@ -637,8 +626,8 @@ go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= -go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc= +go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= @@ -666,14 +655,14 @@ golang.org/x/lint v0.0.0-20241112194109-818c5a804067/go.mod h1:3xt1FjdF8hUf6vQPI golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= 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/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI= -golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg= +golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c= +golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -688,7 +677,7 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/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-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 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.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= @@ -729,13 +718,14 @@ golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/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-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/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-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -759,6 +749,7 @@ golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/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.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= @@ -784,7 +775,7 @@ golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= 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/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= @@ -824,8 +815,8 @@ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8 google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.78.0 h1:K1XZG/yGDJnzMdd/uZHAkVqJE+xIDOcmdSFZkBUicNc= google.golang.org/grpc v1.78.0/go.mod h1:I47qjTo4OKbMkjA/aOOwxDIiPSBofUtQUI5EfpWvW7U= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 h1:F29+wU6Ee6qgu9TddPgooOdaqsxTMunOoj8KA5yuS5A= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1/go.mod h1:5KF+wpkbTSbGcR9zteSqZV6fqFOWBl4Yde8En8MryZA= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.0 h1:6Al3kEFFP9VJhRz3DID6quisgPnTeZVr4lep9kkxdPA= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.0/go.mod h1:QLvsjh0OIR0TYBeiu2bkWGTJBUNQ64st52iWj/yA93I= 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= diff --git a/staging/api/.github/workflows/go.yaml b/staging/api/.github/workflows/go.yaml index efdbfdd3fe..20fbae3180 100644 --- a/staging/api/.github/workflows/go.yaml +++ b/staging/api/.github/workflows/go.yaml @@ -21,7 +21,7 @@ jobs: go-version-file: go.mod id: go - name: Cache dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | ~/.cache/go-build diff --git a/staging/api/Makefile b/staging/api/Makefile index 9641500dbc..3139545d58 100644 --- a/staging/api/Makefile +++ b/staging/api/Makefile @@ -108,7 +108,7 @@ YQ ?= $(LOCALBIN)/yq KIND ?= $(LOCALBIN)/kind ## Tool Versions -CONTROLLER_TOOLS_VERSION ?= v0.18.0 +CONTROLLER_TOOLS_VERSION ?= v0.20.0 YQ_VERSION ?= v4.45.1 # Not guaranteed to have patch releases available and node image tags are full versions (i.e v1.28.0 - no v1.28, v1.29, etc.) diff --git a/staging/api/crds/operators.coreos.com_catalogsources.yaml b/staging/api/crds/operators.coreos.com_catalogsources.yaml index 2b10463bac..fc3a91e8de 100644 --- a/staging/api/crds/operators.coreos.com_catalogsources.yaml +++ b/staging/api/crds/operators.coreos.com_catalogsources.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: catalogsources.operators.coreos.com spec: group: operators.coreos.com diff --git a/staging/api/crds/operators.coreos.com_clusterserviceversions.yaml b/staging/api/crds/operators.coreos.com_clusterserviceversions.yaml index 1e81a97169..db9138e896 100644 --- a/staging/api/crds/operators.coreos.com_clusterserviceversions.yaml +++ b/staging/api/crds/operators.coreos.com_clusterserviceversions.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: clusterserviceversions.operators.coreos.com spec: group: operators.coreos.com diff --git a/staging/api/crds/operators.coreos.com_installplans.yaml b/staging/api/crds/operators.coreos.com_installplans.yaml index f1a2a93126..9a5691df7f 100644 --- a/staging/api/crds/operators.coreos.com_installplans.yaml +++ b/staging/api/crds/operators.coreos.com_installplans.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: installplans.operators.coreos.com spec: group: operators.coreos.com diff --git a/staging/api/crds/operators.coreos.com_olmconfigs.yaml b/staging/api/crds/operators.coreos.com_olmconfigs.yaml index bbc232b2db..bda9262f36 100644 --- a/staging/api/crds/operators.coreos.com_olmconfigs.yaml +++ b/staging/api/crds/operators.coreos.com_olmconfigs.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: olmconfigs.operators.coreos.com spec: group: operators.coreos.com diff --git a/staging/api/crds/operators.coreos.com_operatorconditions.yaml b/staging/api/crds/operators.coreos.com_operatorconditions.yaml index 9f5bee1690..e724c84ec1 100644 --- a/staging/api/crds/operators.coreos.com_operatorconditions.yaml +++ b/staging/api/crds/operators.coreos.com_operatorconditions.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: operatorconditions.operators.coreos.com spec: group: operators.coreos.com diff --git a/staging/api/crds/operators.coreos.com_operatorgroups.yaml b/staging/api/crds/operators.coreos.com_operatorgroups.yaml index f19b3f8b23..cf9f772222 100644 --- a/staging/api/crds/operators.coreos.com_operatorgroups.yaml +++ b/staging/api/crds/operators.coreos.com_operatorgroups.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: operatorgroups.operators.coreos.com spec: group: operators.coreos.com diff --git a/staging/api/crds/operators.coreos.com_operators.yaml b/staging/api/crds/operators.coreos.com_operators.yaml index b869b63681..f6f9d13dd3 100644 --- a/staging/api/crds/operators.coreos.com_operators.yaml +++ b/staging/api/crds/operators.coreos.com_operators.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: operators.operators.coreos.com spec: group: operators.coreos.com diff --git a/staging/api/crds/operators.coreos.com_subscriptions.yaml b/staging/api/crds/operators.coreos.com_subscriptions.yaml index 10f465665c..6ccca76263 100644 --- a/staging/api/crds/operators.coreos.com_subscriptions.yaml +++ b/staging/api/crds/operators.coreos.com_subscriptions.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: subscriptions.operators.coreos.com spec: group: operators.coreos.com diff --git a/staging/api/crds/zz_defs.go b/staging/api/crds/zz_defs.go index 940c0c799b..377d98e47e 100644 --- a/staging/api/crds/zz_defs.go +++ b/staging/api/crds/zz_defs.go @@ -85,7 +85,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _operatorsCoreosCom_catalogsourcesYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x6b\x73\x1c\xb7\x11\xe0\x77\xfd\x0a\x94\x2e\x55\x22\x95\xdd\xa5\xe4\xa4\x7c\x09\xe3\xd8\xc5\x50\xb2\x8e\x65\x3d\x58\x22\xed\xd4\x45\xd1\x9d\xb0\x33\xbd\xbb\x30\x67\x80\x31\x80\x21\xb9\x8e\xf3\xdf\xaf\xd0\x00\xe6\xb1\xbb\xf3\xe4\x4b\xf2\x01\x1f\x6c\x71\x67\x06\x8f\x46\x77\xa3\xdf\xa0\x19\xfb\x09\xa4\x62\x82\x1f\x12\x9a\x31\xb8\xd6\xc0\xcd\x5f\x6a\x76\xf1\x17\x35\x63\xe2\xe0\xf2\xf9\xa3\x0b\xc6\xe3\x43\x72\x9c\x2b\x2d\xd2\xf7\xa0\x44\x2e\x23\x78\x01\x0b\xc6\x99\x66\x82\x3f\x4a\x41\xd3\x98\x6a\x7a\xf8\x88\x10\xca\xb9\xd0\xd4\xfc\xac\xcc\x9f\x84\x44\x82\x6b\x29\x92\x04\xe4\x74\x09\x7c\x76\x91\xcf\x61\x9e\xb3\x24\x06\x89\x9d\xfb\xa1\x2f\x9f\xcd\x9e\xff\x65\xf6\xec\x11\x21\x9c\xa6\x70\x48\x22\xaa\x69\x22\x96\x76\x2c\x35\x13\x19\x48\xaa\x85\x54\xb3\x48\x48\x10\xe6\x7f\xe9\x23\x95\x41\x64\x06\x59\x4a\x91\x67\x87\x64\xe7\x3b\xb6\x3f\x3f\x17\xaa\x61\x29\x24\xf3\x7f\x13\x32\x25\x22\x49\xf1\xdf\x6e\x8d\x76\xd8\x33\x1c\x16\x7f\x4f\x98\xd2\x3f\x6c\x3f\x7b\xcd\x94\xc6\xe7\x59\x92\x4b\x9a\x6c\x4e\x18\x1f\xa9\x95\x90\xfa\x6d\x39\xbc\x19\x2e\xa2\x5a\xc9\xc8\x3e\x66\x7c\x99\x27\x54\x6e\x7c\xfb\x88\x10\x15\x89\x0c\x0e\x09\x7e\x9a\xd1\x08\xe2\x47\x84\x38\x48\xb9\xae\xa6\x84\xc6\x31\x42\x9f\x26\xa7\x92\x71\x0d\xf2\x58\x24\x79\xca\x8b\xa1\xcc\x3b\x31\xa8\x48\xb2\x4c\x23\x84\xcf\x57\x40\x32\x09\x5a\xaf\x11\x24\x44\x2c\x88\x5e\x81\x1f\xbb\xf8\x8a\x90\x9f\x95\xe0\xa7\x54\xaf\x0e\xc9\xcc\x40\x78\x16\x33\x95\x25\x74\x6d\x66\x53\x79\xcb\x6e\xd3\x0b\xfb\xac\xf2\xbb\x5e\x9b\xa9\x2b\x2d\x19\x5f\xb6\x4d\xc5\xbc\xd7\x7f\x0e\x16\x34\xe7\xeb\x6c\x7b\x0a\x1b\x3f\xf6\x1d\x3f\xcb\xe7\x09\x53\x2b\x90\xfd\x27\x51\x7c\xb2\x35\x87\xd3\x1d\x4f\x1a\x26\x52\xe9\xd4\xd3\xcd\x2c\x92\x80\x24\x73\xce\x52\x50\x9a\xa6\xd9\xd6\x00\x47\xcb\xed\x35\xc6\x54\xfb\x1f\xed\x4b\x97\xcf\x69\x92\xad\xe8\x73\xf7\xa3\x8a\x56\x90\xd2\x12\x1f\x44\x06\xfc\xe8\xf4\xe4\xa7\x3f\x9d\x6d\x3c\x20\x75\xe8\xd4\xf0\x9c\x30\x45\x28\x91\x90\x09\xc5\xb4\x90\x6b\x03\xad\xe3\xb3\x9f\xd4\x84\x1c\xbf\x7f\xa1\x26\x84\xf2\xb8\x20\x3c\x92\xd1\xe8\x82\x2e\x41\xcd\xb6\xe6\x2a\xe6\x3f\x43\xa4\x2b\x3f\x4b\xf8\x25\x67\x12\xe2\xea\x2c\x0c\x78\x3c\x4c\x36\x7e\x36\xf0\xaf\xfc\x94\x49\x33\xa6\xae\x10\xb2\x6d\x15\x66\x56\xfb\x7d\x63\x85\xbf\x4d\x37\x9e\x12\x62\x00\x63\xbf\x24\xb1\xe1\x6c\xa0\x10\x29\x1c\xd5\x41\xec\xa0\x69\x91\x85\x29\x03\x11\x09\x0a\xb8\xe5\x75\xe6\x67\xca\xdd\x2a\x67\x5b\x9d\x9f\x81\x34\x1d\x19\x86\x90\x27\xb1\x61\x89\x97\x20\x35\x91\x10\x89\x25\x67\xbf\x16\xbd\x2b\xa2\x05\x0e\x9b\x50\x0d\x4a\x13\xa4\x6b\x4e\x13\x72\x49\x93\x1c\x10\xd8\x5b\x7d\xa7\x74\x4d\x24\x98\x71\x49\xce\x2b\x3d\xe2\x27\x6a\x7b\x2e\x6f\x84\x04\xc2\xf8\x42\x1c\x92\x95\xd6\x99\x3a\x3c\x38\x58\x32\xed\x99\x7d\x24\xd2\x34\xe7\x4c\xaf\x0f\x90\x6f\xb3\x79\x6e\x18\xea\x41\x0c\x97\x90\x1c\x28\xb6\x9c\x52\x19\xad\x98\x86\x48\xe7\x12\x0e\x68\xc6\xa6\xb8\x18\x8e\x0c\x7f\x96\xc6\xff\x43\x42\x95\x03\x6e\xa2\xc1\x06\x35\x10\xcf\x77\x07\x6e\x96\xe1\xc7\x16\x31\x6d\x87\x76\xb1\xe5\x9e\x98\x9f\x0c\x18\xdf\xbf\x3c\x3b\x27\x7e\x46\x76\xdf\xec\x16\x95\xaf\xee\x80\x90\xdf\x2d\x03\x59\xc6\x17\x20\xed\x97\x0b\x29\x52\xec\x15\x78\x9c\x09\xc6\xb5\xe5\x1a\x09\x03\xae\x89\xca\xe7\x29\xd3\x0a\xd1\x1a\x94\x36\x1b\xb9\xdd\xf1\x31\x1e\x8e\x64\x0e\x24\xcf\x0c\xf1\xc6\xdb\xaf\x9c\x70\x72\x4c\x53\x48\x8e\xa9\x82\x7b\xdf\x3b\xb3\x47\x6a\x6a\x36\xa4\xf7\xee\x55\x8f\xfe\xed\x0f\xb6\xa8\x9e\x10\x7f\x66\xf7\x7a\xb9\x89\x4d\x10\xcb\x13\x76\x9d\x09\xa4\x85\x3b\x98\x46\xe3\x58\x82\xda\xf1\xa0\x1b\xeb\x4c\x3b\xb2\x9f\x5b\xe4\x5b\x09\x65\x90\x80\x6a\xf2\xee\xf5\x1b\x12\x51\x4e\x72\x05\x86\x84\x23\xc1\xb9\xc1\x32\x2d\x08\x35\x67\xee\x14\xae\x99\x42\xac\x94\xb0\x64\x4a\xcb\xf5\xf6\xde\x9a\xf6\xbd\x90\x29\xd5\x87\xe4\x1b\xff\xda\x14\x87\x10\x92\xb0\xec\xdb\xc3\x6f\x32\x21\xf5\xb7\x3b\x3f\x7c\xc7\x93\xb5\x19\x3c\x26\x57\x2b\xe0\xe4\xac\x80\x0c\xf9\x7b\xe5\x8f\x57\x32\x8b\x76\x0f\x7c\xb2\xe4\x42\xfa\xaf\x0d\x5a\x9f\xa4\x74\x09\x64\xc1\x20\x41\x42\x53\xb0\x83\xab\xb5\xa0\x05\xb1\x82\xdf\x82\x2d\xdf\xd0\x6c\x2c\xac\x8f\x7d\x07\x66\x06\x66\x52\x55\xb1\xa5\x7c\xa8\x05\x52\x94\x59\xbc\xf9\x27\x8d\x2e\x08\x75\x83\xa7\x34\x9b\x2a\xa4\xe6\x0e\xc0\xf7\x83\xdf\xb1\xef\xd4\xec\x48\xf9\xf3\x89\xe3\xd2\x83\x21\x54\x05\xc2\xe0\x6f\x4b\xa1\xac\x13\xbe\x6f\x76\x9d\xa9\x3d\xc6\x58\xca\x2c\x3a\x15\xb1\x5d\xf6\xd8\x5d\x7c\x55\xed\x84\xc0\x75\x26\x14\x28\x12\xb3\xc5\x02\xa4\xe1\x9c\xe2\x12\xa4\x64\x31\x28\xb2\x10\x12\xb7\x36\x13\x31\xb2\x89\x62\xab\x6b\xf2\xc8\xa9\xd8\xc1\x36\xc9\x20\x1a\x40\xa1\xc5\x62\x78\x17\x6e\xef\x64\x4a\xa4\x83\xc7\x98\x46\x17\xa8\x1e\xad\x77\x3f\xdd\x00\xdd\x91\x7b\xd9\x23\xba\x13\x45\x1d\x87\x7b\xa2\x0c\x48\x9e\xa8\xa2\xcf\xdd\xeb\xef\x9c\x72\x9f\x69\x9b\xc6\x45\x0c\x47\x1d\xd3\xdf\x5a\xc2\x0b\xfc\x63\x0e\x0a\x3f\x2f\xa6\x8a\x82\x4d\x9c\x27\xc8\xfb\xf2\xa4\xbe\xcb\x4d\xeb\xe8\xb9\x96\xbe\xeb\xb1\xef\xc1\x02\xa4\x84\xf8\x45\x6e\x50\xfd\xac\x98\x95\xe3\x7c\xf6\xe7\x97\xd7\x10\xe5\x4d\xe4\xd8\xb8\xf4\x06\xc4\xaf\x36\xa3\x70\x38\x48\x80\x24\x57\x2c\x49\xdc\x8c\x0c\xcb\xf2\x0f\x0c\x48\x50\x02\x34\x10\x54\xf6\x60\x51\x54\x33\xb5\x58\x77\x0e\x60\x20\x5a\xc0\x1c\xae\x8d\x70\x83\xda\x22\x12\x12\x5b\x30\x88\xc9\x7c\xed\xe4\x18\xc3\xd4\x27\x64\x9e\x6b\xc2\x34\x0a\x39\xd1\x4a\x08\xb5\x79\x88\x6e\x37\x6a\xb7\x16\xe7\x75\xc9\x04\xca\xa8\x44\x70\x30\xdc\x30\x35\x92\x89\xa3\xd7\xca\xf0\x33\x5c\x79\xf9\x19\xdb\x14\x2c\xb6\x5b\x6a\x4e\xbc\x62\xbb\x3c\x45\x98\x61\xae\x98\x5e\xe1\x1f\x4b\xa3\x2e\x19\xf9\x58\xe5\xa9\x19\xf4\x0a\xd8\x72\xa5\xd5\x84\xb0\xd9\x0e\xa1\x69\xb3\x19\x04\x04\x1a\xad\x2a\xd3\x4a\x01\xb4\x22\x34\x49\xfc\x12\xaa\x58\x6b\x25\x90\xd4\xc8\x8a\x64\xcf\x0b\x93\x9d\xa3\x38\x41\x70\x52\x48\x30\x9b\x88\xb7\x73\xbb\x26\x04\x74\x34\xdb\x9f\x74\x76\x1f\x89\x34\xcb\x35\x18\x09\x38\x4f\xcd\xd6\x32\x6d\x74\x30\x2b\xf8\x4a\x91\x2f\x2d\xa4\x20\x71\x13\xf7\x6a\x8b\x3d\xd1\x0d\xff\xa3\x71\xbc\x8b\xe7\x6f\xb6\xc7\x16\xb8\x8f\xbd\x66\x62\x86\x63\x16\x48\x08\xbf\x94\xea\x68\xe5\x94\xa5\x48\x48\x09\x2a\x13\xdc\xf4\x6c\x9f\xbc\x2c\xd7\xf6\x37\xf3\x4e\xe7\x78\xa6\xd3\x3d\xb5\x5f\x6e\xf6\x8a\x2d\x57\x7e\xaf\xa9\x04\xfc\xad\x8e\x23\x5d\x5b\x6e\x59\x09\x95\x92\x76\xd1\x11\xd3\x90\x76\x30\x12\x32\x82\xfa\x09\x39\xe2\x04\xd2\x4c\xaf\x2b\x88\x5d\x41\x31\x0d\x32\x2d\x00\x89\x58\x88\x6c\x4f\x59\x20\xb0\x34\x4b\x58\xc4\xb4\x43\x73\xf2\xac\xc7\x78\x7b\x86\x12\x08\xd3\xe6\xd0\x20\x5c\x4c\x45\xb6\x3f\x23\x47\x84\xe7\x05\xe3\x69\x9b\x02\x17\xc5\x0c\x5c\x47\x66\x5a\x4a\x94\x7d\x75\xf3\xa3\x7e\xec\xdb\xb6\x66\x21\x7f\xbb\x4d\xdd\xfc\x81\xf7\x20\x42\xf3\xba\x85\x5a\xe7\xab\x7d\x0f\x12\xff\xb6\x9f\x43\x9f\xb7\x37\x4f\x7b\x4b\x39\x0a\x12\x88\xb4\x39\x0d\x41\xa6\x13\x42\x95\x12\x11\x33\x5a\x61\x89\xfb\x75\x82\xb2\x2b\xe9\x86\x3d\x19\x0a\x7f\x32\x78\xfd\x04\x0d\x0f\x75\xfa\xee\xfb\xdd\x16\x34\x12\x66\x74\x9c\xc5\x06\x54\x6a\x7c\x77\xbe\xc6\xa7\x4f\x14\x49\xe8\x1c\x92\x1d\x4a\x7b\x53\xeb\x4f\xfc\x65\xeb\xc9\x06\x1a\x16\xd4\x8b\x21\x94\x6d\x13\x1b\x2a\xeb\x76\x26\x8e\x02\x4f\xcc\x51\x65\x54\x7b\xca\xb8\x72\xf6\x9d\x09\xa1\xe4\x02\xd6\xd6\x0e\x47\x79\x61\x8a\x1b\x34\x05\xec\x58\x82\x3d\xd0\x0d\xde\x5d\xc0\x1a\x3b\x6c\xb2\x21\xb5\x74\x35\x14\xef\x6c\x1b\xc2\x01\xca\x36\x35\x13\x1d\xf8\xc5\x08\x00\x0d\x27\x0d\xdb\x2e\xa0\x55\x7c\xde\xd5\xb6\xac\xd4\x88\xee\xb8\x1f\xb8\x49\x78\x02\x7b\x7c\xa0\x59\x96\x30\xd8\x6d\x6a\x6a\x6f\xad\x5a\x5f\x5b\xf3\xd0\xbb\xd1\xba\x06\x12\x88\x69\xef\x0b\x73\x9d\xc5\xf7\x27\xca\xe2\xab\xe1\x3b\x2b\x96\x59\x43\x8b\x02\x64\x23\xc3\x91\xd6\xb6\x9f\x68\xc2\x4a\x5b\xb6\x42\x61\xe3\x84\x4f\xc8\x5b\xa1\xcd\xff\x5e\x5e\x33\x65\x64\xcc\x17\x02\xd4\x5b\xa1\xf1\xcf\x19\x79\xa5\x2d\xe9\xbd\xee\xc9\x97\xcb\x36\x7a\x0f\xec\xfa\xee\x7b\x07\x8e\xb8\x65\xa2\x06\xc2\x55\xa3\xab\x9a\x91\x13\x2b\x0e\x16\x5e\x00\xa6\xc8\x09\x37\x4a\x81\x85\xdc\xe0\xa1\xd0\xee\x8e\x7d\xbb\x21\xd3\x5c\xa1\xd5\x94\x0b\x3e\x45\x31\x6a\xe7\x98\x76\x83\xcc\xb8\xd5\x2d\xba\xc5\xe1\x9b\x87\x7e\x85\x36\xba\xd7\x7a\x52\xf9\x78\xf0\xb8\x95\xc1\x56\xf4\x12\x45\x7b\xc6\x97\x49\x21\xc4\x4f\xc8\xd5\x8a\x45\x2b\xab\x3d\xce\xc1\x3a\x07\x32\x09\x46\x62\xa0\xca\x30\x7f\xf3\xcb\x12\xe4\x70\xd4\x3f\x37\xaa\x81\x1d\xdf\xba\x36\x12\x1a\x41\x4c\x62\x54\x59\xac\x95\x9d\x6a\x58\xb2\x88\xa4\x20\x97\x40\x32\x73\xf4\x8f\x43\xf8\x61\x27\xb1\x6d\x83\xcf\xe3\xea\x80\x23\x28\x8c\x90\xeb\xe9\x45\x3e\x07\xc9\x41\x83\x9a\x1a\xf9\x64\xea\x66\xaf\x45\xca\xa2\xde\x9d\xdd\x4a\x37\x28\x67\x7d\x6f\xf4\xb6\x7b\x12\xb1\x50\x47\x0c\x22\x56\x10\xb1\x82\x88\x15\x44\xac\x20\x62\xf5\x6e\x41\xc4\xba\xf1\xf0\x41\xc4\x0a\x22\xd6\xbd\x8b\x58\xb5\x2e\x52\x9a\x0d\xed\xc1\xda\xe5\x46\x18\x02\xff\x69\x0d\xba\x9b\x96\x3f\x14\xf8\x7c\x08\x4b\xdd\x04\x68\xe4\x98\x33\x77\x38\x9d\xa3\xd9\x90\x59\x7f\xbd\xa4\x7c\x09\xe4\xf9\xf4\xf9\xb3\x67\x43\x0c\x84\x0e\x9d\x7b\x7d\xb1\x70\xc1\x09\x8c\xeb\x3f\x7d\xd5\xf1\xc5\x0d\x76\xa5\xc9\x5f\x72\x3f\x8e\x3a\xc7\x79\x0a\xdf\x4c\x4d\x44\x6e\xf0\xa5\xe1\x31\xc6\x85\x26\x29\x68\x42\xbb\x65\xb2\xaa\xd9\x9d\xa5\x30\x29\x9c\xde\xc8\x76\x5c\x84\x90\x77\x0a\xc6\x44\x70\xe7\x7a\x31\x9b\xdf\xbd\xb9\xa3\x56\x10\x01\xb5\x91\x2b\x73\x30\xab\xe8\x76\x05\x6a\xa2\x44\x6a\x66\xcd\xb8\xf6\x4c\xcc\x2c\x01\xfc\xc6\x90\x3d\x98\x2d\x67\x24\xce\xb1\x5b\xca\x5d\xc8\xd3\xbe\x5d\xad\x5a\x2b\x0d\x69\xb7\x2f\xd0\x1c\x86\x12\xff\x67\xc0\xa2\xe5\xda\x74\x06\x97\xc0\x75\x4e\x93\x64\x4d\xe0\x92\x45\xba\x80\x1f\x46\x68\x31\xad\x7a\x41\x6a\x80\x18\xdd\x5f\x74\x9e\x6e\x51\x68\xd7\x21\x35\x44\xf2\xdd\xea\xbb\x0f\xcf\xa9\x51\xc0\x7b\xb7\x92\x59\xa3\x4e\xa8\x4d\xbf\xd6\x6d\x8b\xff\x44\xe4\x7e\xf7\xbe\xdb\xcb\x46\x06\x9f\x3f\x03\xce\x9c\x71\xa2\x95\x73\x78\x09\xe9\x9c\x6f\xdb\x2b\xdd\xe1\xf2\xb2\x6b\xaf\x51\x8d\x58\xf4\x1c\x50\xaf\xc0\x3a\x29\x8f\xde\xbe\xe8\x07\x31\xe2\x82\x03\xce\x45\x26\x12\xb1\x5c\x57\xb7\xd7\x86\x48\xb3\x34\xf3\x4e\x5c\x4a\x54\x3e\x77\x22\xb8\xc1\xf9\xb7\x1b\xf8\x10\x5c\x43\xc1\x35\x14\xec\x16\xd8\x82\xdd\x22\xd8\x2d\x82\xdd\xa2\x5f\x0b\x76\x8b\x1b\x0f\x1f\xec\x16\xc1\x6e\x11\x5c\x43\xdb\x2d\x88\x58\xdd\x2d\x88\x58\xad\x2d\x88\x58\x45\x0b\x22\x56\x10\xb1\x82\x88\x15\x44\xac\x20\x62\xdd\x57\x37\x37\x75\x0d\xdd\x68\x0a\xe3\x06\xcf\x44\x7c\x83\xe4\xad\x4c\xc4\x2d\xb9\x5b\xd6\xa6\x1f\x89\x69\x22\x22\xaa\x5d\x46\xb5\xf9\xc4\x79\xa1\x14\x4d\xad\x9b\x62\x42\x7e\x15\x1c\x6c\x36\x8b\x21\x0f\x74\x16\x08\xbd\x02\x69\x5e\xdf\x53\xfb\xad\x29\x04\x21\xf7\x2b\xe4\x7e\x85\xdc\xaf\xc6\xf6\xd9\xe4\x7e\xad\xa8\xb2\x78\x6b\x8f\xc6\xe6\x54\xb0\x0a\x4f\x3a\x07\x99\xfe\x4e\x33\xc1\x0c\xba\x3b\x74\xc4\x7a\x20\x25\x4a\x59\xc8\xc4\xce\xe1\x0f\xf1\x69\x1d\x1e\x4e\xad\xc6\x45\xd1\x38\x86\x98\x64\x20\xa7\x16\x45\x05\x59\x30\x1e\xef\x58\xab\x87\x4f\x37\x7b\xb8\xc3\x54\xac\xfa\x3a\x7a\x7d\x73\x37\xf9\x58\xf5\x89\x8c\x70\x2a\x56\x3d\xa3\xb5\x43\xf0\xb3\xc8\xce\x1a\xaa\xa1\x4f\x89\x76\x0e\xc5\x1f\x7a\xea\xe8\xc3\xd5\x6c\x54\x8e\xbd\xfb\x71\xa4\xf9\x69\x90\x2a\x74\xe4\xf4\xf1\x5f\x72\x90\x6b\xac\x1b\x50\xaa\x9d\x45\xd9\x19\x17\x11\xc3\x14\x89\xa8\xb2\xc7\xea\x10\x51\xf9\x64\x61\xb3\x26\x79\x9e\x24\x13\xdb\xcf\x26\xb1\x7a\x36\x87\x78\xc0\x85\x79\x3e\xd8\x22\x36\xd0\x44\x33\xce\x06\x32\xde\x0b\x4b\x36\xf7\x69\xb3\x2b\x6b\x1b\xf3\xa6\x43\xbb\x2d\x3b\x6d\x87\x3b\xbc\xe9\x83\xfd\xe3\xb6\x8d\x55\x60\x46\xa9\x2f\x37\xd6\xd7\x5b\x60\x72\x03\xbb\x22\xbe\x3c\x78\x32\xb7\x63\x5b\x24\xe3\xed\x8b\x64\xb4\x8d\x91\x8c\xb2\x33\x92\xb1\xb6\x46\x72\x03\x7b\x23\x19\x67\x73\x24\x9b\xd8\x66\x76\xc8\x09\xbe\x77\x63\x7e\x24\x37\x53\xce\xc7\x9b\x21\xc9\x2d\x10\x56\x75\xfc\x4a\x11\xaf\xbb\xb3\x4b\x92\xbe\xb6\x49\x24\xab\x9a\x79\xf2\xbe\xf7\x65\x9c\x69\x92\xdc\xd2\xae\x38\xa3\x1d\x43\x5b\xd8\x7d\x19\x2b\xc9\xc3\x1b\x2c\x5b\xa7\xe0\x86\xef\x6d\xe1\x1b\x35\xfa\x0d\xac\x82\xe4\x46\x96\x41\x32\xde\x3a\x48\x6e\x8a\xec\xb7\x66\x25\xbc\xd5\xae\x50\x4e\x7a\x8d\x71\x68\x37\x90\xb6\x06\x53\x60\x65\x58\x2b\x5d\x60\x8d\xb2\x05\xf9\x8f\x11\x22\x10\x31\xff\x4b\x32\xca\xa4\x32\xda\x8d\xb3\x6b\x57\x9f\x39\xf3\x5d\xa5\x9b\xc1\x13\xc0\x22\x6d\xe6\x8c\xbf\xa4\x89\x11\x72\x6c\xd0\xaf\xb3\x41\x98\xb9\x6c\x8a\x90\x13\x72\xb5\x12\xca\x4a\x24\x45\x9d\xb9\xc7\x17\xb0\x7e\x3c\xe9\x65\x1e\xa8\xb7\x2a\x65\x3f\x3e\xe1\x8f\xad\xe8\xb4\x45\x97\x85\x9c\x25\x78\xb2\x26\x8f\xf1\xd9\xe3\xdb\x96\x51\x47\xc8\x47\xd5\x62\xbe\x63\xc5\x8f\x51\xe4\x74\x53\x03\x37\xa9\x61\xdf\x0f\xb0\x1e\x1b\x88\x30\x08\xe7\xdf\xd4\x46\xf4\x02\x35\xa2\x99\xd1\xdd\x0b\xb9\x09\x2d\xaa\x56\x64\x72\x36\x2a\x6b\xae\x62\x49\x32\x60\xb4\x39\x10\x4d\x2f\x00\x3d\x3c\x58\xdb\x51\xb1\x18\x0d\x6e\x82\x5b\xd4\xc1\x91\x0c\xca\xf8\x22\x84\x89\x10\x17\x79\xe6\x51\xcf\x17\x0e\x1d\x30\x24\xe3\x91\x48\x7d\x4c\xbd\x8d\x6b\x35\x54\xe1\xe8\x65\x6a\xcb\x9d\xda\xdf\x71\x60\x3c\x02\x9c\x69\xe2\x53\x4d\x31\xff\x44\xa8\x22\x9f\x50\xa8\xe4\x64\x0f\x3f\xdc\xff\x34\x24\xa4\xa0\x00\xa0\xb5\xbe\x8a\x1c\x39\x4b\x51\xd0\xb2\x62\xff\x2b\x60\xdb\x06\xb1\x01\x43\xfb\x4a\x71\x55\x60\xd8\x5a\x78\x64\x8f\x72\xcd\xf6\xcb\x82\x78\x04\xf1\x00\xa5\xe4\x58\xf0\x27\xda\xce\xcf\xf3\x35\xdf\xc1\x90\xa8\x83\x02\xee\xa5\xc7\xcf\x7a\x0b\xec\x96\xc7\xb0\xa0\x79\xa2\x5d\xe1\x59\xc3\xfa\xf0\xa4\x1f\x30\xc2\xb9\xf7\x97\x38\x81\x7f\x21\xe4\x9c\xc5\x31\x70\x4c\x71\xf0\xd3\x9f\x0b\x9f\x10\x54\xa2\xbb\xe1\x6c\xb5\x3d\x1e\x32\xec\x51\xa2\xc4\x64\xb3\xc7\xa8\x28\x4c\x6b\xa8\x08\xcb\x27\xd6\x06\x20\x4c\x19\xa0\x36\x54\x4a\xdc\xdd\xee\x25\xf4\xe7\xe6\x3c\x6f\x74\xe8\x15\x53\x0f\xc0\xf7\x36\x07\x0d\xac\xaf\x17\xeb\xe3\x42\x07\xee\xf7\xc5\x72\xbf\x2d\xa4\xbf\x0d\x06\xb8\xd5\x69\xe0\x81\x83\x79\x20\xf7\xf7\x53\x3c\xb0\x17\xc0\x1a\xc6\x6c\x14\xab\x9f\x92\x2a\x6d\x66\x98\xe8\x35\xce\x5e\xe6\xd3\xe0\x90\xcf\x62\x0f\xb1\x77\x86\xe6\xdc\xd5\xfd\xf7\x95\xa9\xdd\xb0\x96\x5f\x6c\xfa\xdc\x07\x8c\xe9\x15\x17\xc1\x41\xa1\x89\x1d\x8a\xf8\x8a\xca\x30\xd8\xeb\x90\xa5\x60\x2a\x5c\x69\x3e\xe4\xf1\x66\x72\x5c\xd9\x37\xda\xf5\x53\xa0\x5c\x91\xc7\x3e\xc4\xe3\x89\x2a\xdf\x78\x3c\x88\xde\x7c\xe9\xcb\x62\xec\xbd\xff\xfc\x77\xbf\x56\xee\xb2\x1c\x3a\xf8\x51\x82\x1f\xa5\xda\x82\x1f\x65\x7b\x12\xc1\x8f\xd2\xd4\x82\x1f\x65\xd4\xf8\xc1\x8f\x52\x6f\xc1\x8f\x12\xfc\x28\xc1\x8f\x12\xfc\x28\xc1\x8f\x12\xfc\x28\x7d\x3f\xba\x0d\x3f\x4a\xa9\x06\xdd\x87\x1e\x5d\x55\x59\x5d\x9c\xb8\xbd\x50\x8d\x6a\x16\x95\x59\xa1\xfe\x2d\xfb\xaf\x87\x52\xaa\xab\x6a\xf0\x4d\x55\xea\xaa\x82\xbe\x65\xc1\x18\xac\x51\x37\xea\xcf\x85\x86\xbd\x35\xc6\x2d\xa9\xd6\xbf\x73\xe3\x52\x25\x80\xf5\x3e\xc8\xe1\xdc\xa7\xb2\xb8\x3b\x1a\xe7\x50\xe6\xb9\xc4\x64\xcf\xdb\x5a\xf7\xcd\x86\x73\xa1\xeb\x0f\xb9\x66\xd3\xf2\x8d\x22\x40\x18\x4d\xc2\xbe\x9a\xdb\x10\xa0\x7b\x9d\xa5\xb4\x3d\xba\xfc\x9a\x22\xa1\xa3\xc4\x36\xc3\xff\x41\xd6\x66\xcb\x94\xbb\xc3\x12\x53\xd3\x64\xce\xb9\x11\x8f\x04\x77\x59\x1c\x03\x66\x62\x8f\x16\x6b\xe6\x75\x54\x69\x95\x29\x5c\x23\x6a\x54\xe5\x36\x55\x12\x00\xa8\xb6\x37\x62\xba\x9a\x4b\x82\x3b\x23\xb9\xf9\xc5\xf6\x33\x60\x12\x05\xc1\x22\x3c\x59\xb1\xa2\x21\xb4\xfa\x12\x69\xb4\x3a\x59\xa6\x70\x1f\x69\x92\x88\xab\x21\xe7\xd3\x40\x8a\x18\x5d\x1c\xb0\x37\xf6\x5e\x0d\xae\x22\xb8\x11\x2d\xdf\x57\x56\x0f\xa5\x06\x5b\x5b\x28\x35\xf8\x79\x94\x1a\xac\xf8\x41\xab\x35\x07\xbb\x61\x85\x35\x09\xef\xb4\xe6\x20\x21\xff\x74\x17\x6c\x4a\xb0\xce\xcb\x3c\xd1\x2c\x2b\xb3\x8c\x95\xdd\xa1\xc4\xaa\xd4\x0b\x97\x0d\x58\xa7\x5e\x33\x1b\x1a\xad\x3a\x87\xda\xa0\x72\x1c\x0f\xb3\x96\x15\x72\x53\x9b\x31\x87\xf6\x77\x5b\xe8\xcf\xeb\xda\x36\xed\x90\x3d\x74\x36\x55\x2f\xfe\xf7\xc2\x5d\xd5\x5c\xf5\x81\x2b\xb2\x67\x4e\xc7\x64\xed\xbc\xc6\x35\x46\x58\x3b\x56\x7b\x0c\x60\xed\x60\x97\xe0\x05\xd4\x25\xbb\x04\x5e\x9e\xbe\x7b\x6a\x7f\xdf\xcb\xc4\x9b\xf2\x43\x8f\xde\x6f\x22\x61\xf4\xe1\xda\x43\x25\x83\x8d\xf3\xbe\xc7\x08\x3b\x24\x82\x6f\x2a\xa7\xec\xb7\xdd\x32\x41\x8f\x41\x2c\x49\xfb\xf4\xcc\xca\x46\x97\xb2\x40\x67\x2f\x77\x98\x05\x37\x24\xd5\x6a\x98\x55\x7c\x44\x8a\xd5\xd8\x4a\x99\x77\x9b\x5a\x75\xa7\x69\x55\x5f\x4e\x41\xcb\x07\x76\xff\x7d\x01\xd5\x98\x3e\x13\x77\x5f\x28\xc7\xd4\xd4\x1e\xaa\x1c\xd3\x9d\xbb\xf3\xbe\xb8\xaa\x4c\xf7\xea\xbe\xbb\x1f\xd7\xdd\x17\x56\x95\xe9\x41\x5c\x75\x9f\x79\x7d\xa6\xbb\x73\xd1\x85\xe2\x47\x0f\x53\x5f\x72\xa8\x1b\x6e\x3c\x55\x3d\xa8\xfb\xed\x41\x5d\x6f\x0f\xef\x76\x1b\x25\xab\xdc\xd4\xdd\x36\x98\x4c\x6e\xea\x66\x1b\x13\xb2\x3f\x0e\x9f\xef\x2f\x45\xe9\x9e\x63\xf4\x3f\x8f\xd4\xa4\x07\x0a\xcc\x7f\xa8\xa0\xfc\xbb\x0d\xc8\x7f\x80\x54\xa4\x7b\x49\x43\x1a\x7a\xec\x0f\x3a\xec\x6f\xc6\xbb\xc6\x9c\xc8\x23\x53\x8e\x46\xf2\xaf\xfb\x4c\x35\xfa\x1d\xb0\xb0\x51\x29\x46\x81\x8b\x3d\x10\x17\xbb\xbd\x94\xa2\xfb\x4a\x27\xfa\x9d\xf1\xb2\x91\xa9\x43\xb7\x66\xdd\xbe\x9b\x94\xa1\xfb\x4e\x17\xba\x83\x54\xa1\x87\x48\x13\xba\x83\x14\xa1\xe0\x13\xe8\xd9\x82\x4f\xa0\x6f\x0b\x3e\x81\xa6\x16\x7c\x02\x9b\x2d\xf8\x04\x82\x4f\x20\xf8\x04\x82\x4f\x60\x7b\xc0\xe0\x13\x08\x3e\x81\x7e\x2d\xf8\x04\xee\xc7\x27\x30\x34\xed\x66\x1c\x2e\x3f\x4c\xba\xcd\xfd\xa6\xda\xdc\x7e\x9a\xcd\x03\xa6\xd8\xfc\xce\x0c\x2e\x83\xd3\x69\xc6\xa1\xf9\xe7\x92\x46\xf3\x79\xa4\xd0\x3c\x78\xfa\xcc\x4d\x53\x67\x6e\x27\x6d\x66\x00\xb6\x8f\xc4\xf3\x4c\xc4\x47\x5c\xb3\x9b\x5e\x7c\x54\x45\xc0\xa6\xdb\x8f\xe8\xa5\x60\x31\xc9\x72\xed\x2e\x5c\x09\x37\x20\x75\xe2\xc0\xfd\xdc\x80\x54\xdb\xbc\x70\x0d\x52\x5b\xfb\x6c\xae\x41\x6a\xda\xb3\x7b\xbc\x0b\x49\xe5\x73\x2d\x69\xa4\x07\x5d\x88\xe4\x1d\x8e\xe1\x4a\xa4\xad\x16\xae\x44\x0a\x57\x22\x85\x2b\x91\xc2\x95\x48\xa1\x94\x5f\x28\xe5\x57\x6d\x9f\x8d\x1f\x8f\x84\x52\x7e\x03\x3f\x0d\xa5\xfc\xba\x5a\x28\xe5\x17\x4a\xf9\x35\x8d\x1e\x4a\xf9\x85\x52\x7e\xc3\x06\x0e\xa5\xfc\x48\x28\xe5\x17\x4a\xf9\x7d\xc1\xa5\xfc\xc2\x95\x48\x5f\xc4\xbd\x20\xe1\x52\x90\x01\x63\x7f\x5e\x97\x82\x84\x2b\x91\x5a\x07\x09\x57\x22\x05\xd6\x17\xae\x44\xfa\xdd\x72\xbf\x70\x25\x52\x8f\x41\xc2\x95\x48\xe1\x4a\xa4\xd6\x16\xae\x44\x0a\x7e\x14\x12\xfc\x28\xc1\x8f\x32\xf4\xab\xe0\x47\x69\x6e\xc1\x8f\x32\xa4\x05\x3f\x4a\xef\xd1\x83\x1f\x25\xf8\x51\x86\x0d\x1c\xfc\x28\x24\xf8\x51\x82\x1f\xe5\x0b\xf6\xa3\x84\x2b\x91\xc2\x95\x48\xe1\x4a\xa4\x62\xe4\x70\x25\x52\xb8\x12\x09\x5b\xb8\x12\xa9\xc7\x08\xe1\x4a\xa4\x2f\xf5\x4a\xa4\x5a\x5a\xd0\x97\x7b\x2f\xd2\xf0\x65\x84\xcb\x91\xc2\xe5\x48\x0d\x2d\x5c\x8e\x14\x2e\x47\xda\xd5\xc2\xe5\x48\xe1\x72\xa4\x96\x16\x0a\x21\xf6\x6c\xa1\x10\x62\xdf\x16\x0a\x21\x36\xb5\x50\x08\x71\xb3\x85\x42\x88\xa1\x10\x62\x28\x84\x18\x0a\x21\x6e\x0f\x18\x0a\x21\x86\x42\x88\xfd\xda\xc3\x3b\xe0\xfe\xff\x28\x84\x18\x2e\x47\xfa\x2c\x6f\x16\x09\xd7\x8a\x74\xb4\xcf\xe7\x5a\x91\x70\x39\x52\xad\xf3\x70\x39\x52\x60\x61\xe1\x72\xa4\x2f\x8e\x8b\x85\xcb\x91\x76\x74\x1e\x2e\x47\x0a\x97\x23\x85\xcb\x91\x82\x4f\xa0\xb3\x05\x9f\x40\xf0\x09\x54\x5b\xf0\x09\x6c\xb6\xe0\x13\x08\x3e\x81\xe0\x13\x08\x3e\x81\xed\x01\x83\x4f\x20\xf8\x04\xfa\xb5\xe0\x13\x08\x97\x23\x85\xcb\x91\xc2\xe5\x48\xd8\xc2\xe5\x48\xe1\x72\xa4\x70\x39\xd2\xce\x8f\xe1\x1a\x2f\x37\x39\x16\x5c\x03\x6f\xcc\xb9\xe9\x8b\xce\x2f\x6b\xbd\x99\xd3\x75\xc1\x96\xb9\x74\x7a\xff\xf2\xfd\xe9\x31\x89\xa8\xa6\x89\x58\x92\x53\x11\x5b\xd3\x32\x7e\x51\xfc\x9c\x82\xa6\x31\xd5\xb4\xbc\x41\x25\x93\xe2\x92\xc5\xc8\x54\x63\xb8\x26\x2c\xa5\x4b\x30\xcc\xab\x71\x12\xb9\x02\x42\xc9\x15\x24\xc9\xf4\x82\x8b\x2b\x4e\x2e\x41\xaa\x0a\xbb\xfe\x24\xb2\xf4\x13\x51\x20\x2f\xed\x05\x43\x70\x9d\x19\x44\x63\xda\x9e\xfb\x7e\x26\xd5\xe1\xca\x20\xf5\x63\xfb\xf4\x0c\x83\x7a\xdb\xee\xea\x29\xd6\x8e\xcb\x34\x73\x7a\x6a\x04\xfb\xa7\x86\xa8\x73\xe5\x23\xea\x17\x2c\x81\xe9\x9c\x2a\x88\xfd\xb8\xca\xd0\x9a\x90\xb1\x9d\x5b\xae\x59\xc2\x7e\x05\x77\x9a\x00\xd5\xb9\x6c\xcc\x93\xe8\x21\x70\x74\x1b\x42\xa6\x7e\x1e\x2f\x58\x93\x11\xa3\x8f\xc1\x22\xa2\xd1\x0a\x5e\xb0\x56\x15\xbe\x86\x54\xc7\xee\x03\x6f\x92\xd8\x13\x99\x95\x83\xf6\x49\xcc\x24\x32\xa1\x35\x51\x5a\x48\x0f\xb9\x4c\xc2\x34\xa2\x49\x94\x27\xc8\x72\x8e\x4e\x4f\xec\xa0\xdd\xb7\x66\x75\x90\x52\xb9\xfe\x01\x93\xf7\x9f\xf8\xe9\xef\x9e\xf3\xf6\x6e\xa3\x00\x8a\xf6\xc8\x9b\x4c\x3b\x85\x54\xc8\xf5\x39\x95\x4b\xb8\x31\x09\xbf\xa9\xf4\xb5\x49\xc0\x7f\x78\xf5\xee\xcd\xcb\x37\xaf\x4f\xde\x9c\x9c\x3b\xbe\xec\x9d\x61\x9b\xa4\xed\xd4\x56\x6b\x61\x14\x0b\xed\xa6\x48\x12\x96\x32\x5d\x7c\x65\x69\xb0\x59\x65\xb6\x7c\x1b\x13\xe8\x72\xae\x59\x0a\xd6\xf3\x45\xb5\x36\x22\x8d\xa1\x8f\x14\x40\xe3\x35\x5d\x29\xbd\x00\xc3\x5c\xc9\x32\xa7\x92\x72\x0d\xfe\x28\x60\xda\x7e\x14\x0b\xa2\x84\x53\xe4\x99\x2a\xbd\x64\x0a\xb4\x4d\x1b\x3a\x15\xcd\x2c\x05\x7b\x58\xd1\x4b\x7b\x81\xd2\x42\x18\xfe\x6d\x36\x35\x15\x31\x5b\xb0\xc8\x5a\x86\x48\x4a\xe3\x22\xd5\xc5\x29\x16\x20\x8b\xe3\xaf\x5c\x70\x1b\xf5\x6d\x82\x19\xf8\x25\x93\x82\xa3\xc2\x74\x49\x25\xa3\xf3\x04\x0a\xff\x9f\x02\x6d\xc7\x2b\x17\xc4\xc9\x7c\xad\xa1\x99\x2d\xd9\x11\xdc\x6e\xb8\x0b\xb8\x9a\xfb\x7b\xd4\xd8\xcf\x79\x99\x93\x56\x0a\x2b\xe6\x7b\xe6\x92\x15\x62\x50\xcc\x31\x3f\x09\x71\x1e\x79\xd0\x09\x9d\x49\x66\xb5\x3f\x5a\x60\x8c\x63\xc6\x54\x91\x34\x37\x27\xb5\x91\x82\x94\x62\xf3\x04\x26\x46\xd6\x61\xcd\xc9\x34\x65\x1f\x73\x30\x50\xc6\x9e\x50\x02\xb9\x04\x83\x6f\x06\x8f\xad\xa8\x0b\x60\x04\x21\x81\x97\x60\x51\x2b\xce\x78\x97\xa9\x39\x8f\x23\xe7\x30\x3f\x59\x90\xb5\xc8\x65\x8d\xfd\xaf\xa8\xc1\x63\xa4\xde\xc6\x89\xb8\x04\x38\xe4\x41\x13\x12\x83\x51\x1c\x18\x37\x27\xd1\x52\x88\xd8\xe8\x0f\x52\x5c\xb3\x14\x47\x71\x04\x50\xec\xda\x7c\x4d\x62\x91\xcf\x93\x02\x4d\x0c\xcb\x77\xa7\x55\x46\xa3\x0b\x33\x07\xec\xb8\x2d\x75\xf1\x40\xa7\xd9\x01\xbe\xe5\xfe\xeb\xbe\x54\xb3\x9f\x95\xe0\xa5\xd3\xb9\x58\xd6\xac\xd7\xee\x32\x45\xe6\xa0\xf4\x14\x16\x0b\x21\xf5\xdf\xcc\xfe\xe6\x1c\x89\x86\x8b\x02\x80\x1e\x81\x30\xc0\x00\xa1\x8d\x29\x28\x75\xaa\x17\x72\x07\x03\xa9\xa0\x5e\x13\x0b\xcc\x0c\xbd\x4b\x7e\x48\xfe\xcf\xde\xbf\xff\xf8\xdb\x74\xff\xbb\xbd\xbd\x0f\xcf\xa6\x7f\xfd\xf8\xc7\xbd\x7f\xcf\xf0\x1f\x4f\xf7\xbf\xdb\xff\xcd\xff\xf1\xc7\xfd\xfd\xbd\xbd\x0f\x3f\xbc\x79\x75\x7e\xfa\xf2\x23\xdb\xff\xed\x03\xcf\xd3\x0b\xfb\xd7\x6f\x7b\x1f\xe0\xe5\xc7\x9e\x9d\xec\xef\x7f\xf7\x87\x86\x09\x51\xbe\x7e\xb7\x68\x25\xe2\x5e\xd9\xbb\xd3\x3e\xe7\x51\x4d\xa4\x63\x5c\x4f\x85\x9c\xda\x0f\x0e\x89\x96\xf9\x6e\x51\xd6\xc8\xbd\x5d\xae\xe1\xbe\xe7\xc1\xdb\x4a\x5f\x1b\x1e\x23\x77\x85\x9d\x33\x57\x9a\xd9\x14\x9c\x3d\xb3\xd2\xdd\xc2\x6c\xbb\x17\xfb\x9b\x8f\xb8\xb3\x1d\x3d\xa2\x3c\xef\xbe\x7c\xa2\x7c\xe4\xc3\x46\xff\x1b\x49\xb8\x96\xe3\xb7\x8d\xd5\x43\x46\x1a\x66\x82\xe9\xdc\xc2\x4c\x32\x21\x99\x5e\x1f\x27\x54\xa9\xb7\x34\x85\x9b\x6e\xc8\xc9\xa2\x54\xc3\x26\x86\x9e\xcd\xf9\xe3\x0e\x68\x17\x8a\xe2\x86\x6c\x06\xf8\xc9\x02\xf5\x90\x4a\x3f\x1e\xa8\xfe\xdb\x82\x30\x3d\x89\x0b\x49\x7e\x05\x29\xdc\x65\x86\x12\xac\x2e\xd3\x38\x82\xfb\xac\x7d\x1f\x5a\xc0\xa6\x20\xca\x11\x6c\x46\x3e\xba\x36\x1a\xc5\x82\x2d\x6f\x0a\xba\xb3\x5d\x9d\x92\x88\x72\xb3\x50\xbc\xa5\x73\x41\x3e\x25\xb0\xa4\xd1\xfa\x93\x59\xf0\x27\x09\x66\x8a\x46\x07\xfc\x64\x95\x83\x9a\xf8\xef\xa2\x7e\x98\x22\xc0\xf0\xe2\x56\xc6\x7f\xb6\x0a\xa3\xd7\xbe\x1b\x67\x22\xb1\xfe\x40\x26\xe2\x99\xd9\x83\xd9\xc6\x6a\x91\x85\x16\x0f\x0b\x51\xe2\xc3\xd3\x8f\x5b\x6f\x3a\x6b\xa6\x16\x56\xa9\xac\x12\x87\xcc\x91\xeb\xb7\xc9\x35\x1e\x20\xe4\x28\x4e\x19\x9a\x60\xc9\xde\xe9\xd9\xd1\x7e\x6d\xe5\x46\xca\xb1\xe7\x70\x2c\xc0\xc7\xdd\x98\x81\x54\x69\x4c\xc5\x33\x14\x53\x1c\x2d\x09\x63\x8e\xa3\x9f\x8b\x01\x30\xda\x57\x5b\xd2\x7a\xfd\x64\xcf\x8e\xc8\x27\x23\x21\x27\x8c\x83\xdd\x83\x4c\xb2\x4b\x96\xc0\xd2\xcc\xa4\x12\xc8\xe0\x5d\x32\xbb\xf7\x94\x29\x73\x4a\xd5\xd1\x3b\xc5\x1c\x5d\x8b\xd6\x2d\x78\xeb\x0e\x6e\x17\x53\x52\xb1\xee\x3d\x51\x38\x3d\x2f\x13\x97\xf2\x42\xed\x2d\x44\x07\xbe\x10\x32\x32\xa7\xf9\x0e\x38\x6a\x97\xc4\x6e\x40\xd3\x2e\x70\xa2\xf9\xa7\xd0\x22\xa9\x32\xb4\x57\xeb\xf0\x8a\x56\x2a\x05\xcc\xc8\x3b\x83\x84\x57\x4c\xc1\xa4\x90\x7a\x77\x76\xe1\x31\xfc\x8a\x36\xcb\x89\x95\x6e\xcf\xf0\x9f\x6b\xeb\x6d\x72\xe6\x18\x44\x77\x94\xa3\x9a\xe8\x85\x48\x50\x86\x6f\x30\x6e\xbf\x62\xb1\x15\x7d\x40\x4a\x21\x67\x36\x95\xdf\xea\xc1\x22\x89\x5b\x4e\xc9\x42\x1d\x37\x22\x0b\x1a\x9b\x2c\x7e\x71\xe4\x60\x0e\x6d\x76\x83\xb9\x01\x37\xea\xf2\xaa\x16\xc5\x12\x5a\x04\xa2\x37\x02\xf3\xff\x6d\x91\x0d\xb3\x0c\x3a\x17\xb9\xb6\xf8\x60\xd9\xc7\x42\xe4\x3c\x26\x86\x33\x1e\x92\x95\xd6\x99\x3a\x3c\x38\x28\x8f\xee\x19\x13\x07\xb1\x88\xd4\x41\x24\x78\x04\x99\x56\x07\x9e\x90\x0f\x32\x11\x4f\xfd\x1f\x53\xea\xe9\xf0\x60\x2c\xe3\x24\x04\x78\xde\x72\x9b\xe7\x94\xd8\xd5\xb6\xbc\x50\x02\x73\xe7\x4b\x5a\x24\x2e\x62\xb2\xf1\x5c\xac\xdf\xf1\x5a\xbe\x5f\xdc\x41\x5b\x08\xfe\x15\x46\xfa\x44\x55\xbb\x6e\x3f\x39\xda\x2c\xcb\x1d\xb6\xe4\xfe\xa6\xd9\x73\xcf\x4b\x8d\x34\x5c\xae\x02\xa5\x20\xad\x29\x5e\x4f\x6b\xd4\x25\xfb\xc4\xb0\x41\xbe\x26\x86\x55\x6b\x77\x65\xb2\x35\x49\xb6\x69\xf6\x2b\x23\x37\x61\x0d\x8b\x6f\x0a\xb7\xdb\x04\x16\x0b\x88\xf4\xb7\x15\x33\x51\x51\x85\xa1\x70\x6b\x7d\xe3\xff\xf5\x6d\xf3\x29\xdf\xcb\x03\xd5\x2f\xfc\xc4\x4e\xa9\xdd\xf6\x3d\xcc\xe6\xfd\x12\x7b\xdc\x90\x5f\x2c\xf0\xec\x60\xa8\xde\xa3\x6f\xda\x19\x52\xad\x57\xc2\xc9\x85\x49\x52\x7b\xb9\x33\x00\x03\xf9\x4d\xe5\x40\x70\x26\xd8\xd2\x1b\x08\xe4\xad\x70\xe5\x6c\x60\x42\x4e\xf1\xca\xe0\xf2\x17\x3c\x91\xdf\x0a\x5b\xd8\xa6\xa3\x52\x49\x4f\x83\x6d\x67\xfc\xce\x30\x78\xfe\x50\x86\xf3\x58\xc0\xd4\xc2\x79\x4a\xc2\xaa\xfa\xc1\x5a\x01\x7b\x01\xeb\x4e\xa8\xba\xc3\xcf\x85\x12\xa1\x9f\x69\x52\xe2\xa8\xd7\x0c\x6c\xa4\xc4\xdf\x5c\xf5\x03\x91\xce\x19\xb7\x53\xb1\x03\xfb\x7d\xc6\xb1\xfd\x7e\xf0\x18\xff\xec\x9e\x44\x4f\x68\xf7\x8b\x29\x1a\x06\xf2\x77\x03\xe2\x85\x0a\xcf\x73\x17\x48\x77\xc5\x05\x55\x82\x81\x5e\xfe\x92\xd3\x64\x46\x5e\x58\xf1\x1a\x81\x67\x7f\xea\x22\x37\xdb\xc5\x96\x3f\xfe\x8a\x25\x71\x44\x65\x8c\x9a\x95\x65\x3f\x44\x09\x8b\x38\xd4\x4b\x6f\x1d\x7d\x7b\x06\x58\x22\x8f\xbd\xcc\x9b\x64\x54\x6a\x16\xe5\x09\x95\x86\xe1\xc3\x52\xc8\x8e\x78\xf4\x9e\x9b\x59\x62\xf3\x19\x44\x82\xc7\x1d\x9e\xc3\x61\xbb\x7a\xbe\xd9\x79\x75\x7b\x51\x6e\x03\xc9\x5c\x45\x15\x96\xc2\x26\x79\xed\xd5\xb4\xe2\x8e\xb1\xc4\xc2\x33\xbb\x82\xb7\x4c\xac\x70\x65\xc4\xb8\x6a\xe1\x27\xa6\x7c\xb4\xff\x7e\xe5\xc0\x29\xa8\x7d\x46\xfe\xb1\xf6\x3a\x57\x57\x08\x12\xd3\xde\x0f\x85\x66\x1c\x37\x5f\x47\x8a\x6e\x27\x4b\x36\xb2\x10\x12\x2e\x41\x92\xbd\x58\xe0\x37\x58\xc0\x69\x7f\x46\xfe\x65\x94\xc1\x36\x37\x8c\x6d\x1c\x96\xb6\x04\x90\x23\xec\x22\x09\x43\x02\xda\xed\xa9\x22\xcf\xc8\x9e\xad\x0a\xc5\xd2\x14\x62\x46\x35\x24\xeb\x7d\x2f\x7d\x5b\xb3\x5a\x1f\xac\xe9\x53\x2c\xad\x52\x24\xed\xeb\x3f\xb7\xbc\x89\x93\xbd\x4d\xa4\xfa\xc9\x9b\x9b\x4b\xc0\x5a\x49\x7a\x03\x7b\x0a\x2f\x66\x67\x90\x42\x63\x44\xda\xa4\xe4\x35\x15\x51\xd7\xf3\xe6\x02\xb7\x7e\x36\x08\x4a\x89\x84\x25\xd2\xa7\xa5\xb9\x1b\x50\x27\x8b\x76\x97\x7b\xeb\x10\x42\xda\x3d\x52\x53\x62\x74\xc1\xaf\xff\x1c\x53\x4d\x1b\x5e\xb0\x28\xb3\xce\x76\x91\x5a\x97\x6c\x53\x76\xde\xb4\xd7\x3d\x5c\x2f\x6e\xf8\x51\x3d\xa0\x52\xb3\xeb\xcb\x3e\xd8\x75\x82\xb6\x69\x1b\x2b\xe9\xd1\x60\x2a\x61\xc9\x94\x96\xeb\x8a\x03\xc2\xb9\x30\x05\x61\x5c\x69\xca\x35\x43\x56\x4d\xfc\x9b\x53\x67\x7c\xbf\x62\xba\x21\x0c\xf0\x9d\xd1\xdd\xd1\xb4\x8b\x99\x38\xd6\xf8\x71\xbe\xce\x80\xfc\xbd\xf2\xc7\x2b\x99\x45\xbb\xbf\x3f\x59\x10\xc7\x40\x2d\x6e\xd2\x38\x96\xa0\xb6\x39\xdb\xae\xaf\x5b\xc1\xe7\x8d\x55\x63\x21\x78\xea\x8d\x5d\xae\x46\xa0\x52\x6c\x69\x94\x14\x5f\x1f\xd2\xfb\x72\x6a\xca\x8a\xf9\xd5\x0d\x6c\x3d\xb3\x90\x16\x27\x26\xd3\x5e\x1d\x8c\x04\x57\x79\x5a\x5a\x11\x62\xc8\x80\xc7\xc0\xa3\x35\x96\x84\x4a\x2e\xa1\x21\x8c\xe7\x47\xd5\x80\x12\x84\xfc\x2f\xb6\x34\x6a\xb7\x9b\x5c\x55\x72\xf6\xde\xe9\x8d\x99\x32\x65\x00\xbf\x00\x69\x94\x7f\xcc\xdc\x31\x42\xaf\xef\xa1\xe2\x85\x74\x35\xaa\x7c\x50\xe9\xe6\x64\xb1\x50\xe0\xee\xe9\x9e\x17\xd5\x2d\xbd\xbf\xc2\xc3\xd4\x72\x20\x03\x8e\xa5\xb0\xde\xfc\x4c\x28\xe6\xcb\xc1\x15\xe7\x42\xad\x42\xa6\x58\xd8\xfa\x95\xcd\x63\xd5\xb3\xdc\x30\x10\x7b\x63\xd1\x68\x7b\xcb\xb9\xdd\x4c\xa8\x5a\x34\x3d\x2f\x6c\xa8\xc1\x79\xbe\xbd\xd5\x45\x14\x0d\xa6\xc6\xd5\x97\x56\x9e\x65\x92\xf2\x0b\x88\x49\x02\xd7\x2c\x12\x4b\x49\xb3\x15\x8b\xb0\xd8\xa1\x75\xf5\x1a\x8d\x51\xdb\x10\xaa\x66\x0c\x6f\x3a\xbd\xb2\x7c\x9e\x30\xb5\xda\xed\x34\x6c\x25\x0e\x05\x91\x04\xbd\x93\xf3\xf5\xa1\x8d\x33\xfb\x79\x29\xfc\xf8\x80\x77\xd7\xaf\xcb\x17\xb1\xd8\xee\x13\x4b\x69\x14\x19\xc2\xf6\x0e\x50\x70\x92\x60\x85\x88\x1a\x38\x84\xf6\x7e\x26\xd3\xcb\x05\x40\x66\xf1\x19\x03\xd5\x54\x8a\xb6\x45\xc5\x78\x04\x58\xbc\xd1\x15\xe1\x04\xf0\x3e\x00\x2d\x19\x58\x09\x16\xd0\xeb\xe7\x77\x11\xb8\xde\x2d\x71\xb6\x1b\x11\x5a\x0c\x08\xed\x10\x2f\x78\x61\x27\xd0\x2b\x3c\xd4\x0b\x05\xe6\xdf\x06\xbc\xf8\x64\xe8\x66\xdb\x5a\x9d\x67\x36\x14\x7c\x34\x3f\xfc\xb1\xd6\x8b\x8b\xe1\x52\x64\x25\xae\xdc\x00\x9b\x1c\xc3\x59\xe5\x3c\x1a\xc4\x4c\x45\x86\xcd\x34\x18\x8e\x8e\x05\x57\xbe\x36\x27\xe5\xb6\x9c\xe6\x25\x4d\x5c\x82\xac\x1b\x2c\x13\x09\xfa\x41\xe3\xdc\xeb\xab\x36\xf5\x08\xd2\x39\xc4\x31\xc4\x3e\xde\x7d\x4d\x1a\x0e\xfd\x0e\x81\xa3\x4b\x26\xf0\xc7\xe2\xa9\x48\x92\xf6\x33\xbd\xd5\xb0\xd2\xc7\xac\xe2\x01\xd0\x3b\xce\xa4\x43\xcc\x3c\xf1\x00\x65\xaa\xa0\xc8\xd2\x11\x8d\x48\x66\x14\x96\x02\xee\x73\xd0\x57\x00\x9c\x44\x2b\x88\x2e\x54\x19\x63\xa7\x0d\x1d\x6e\x6c\xb4\x8b\xa1\x6a\x17\x10\xab\x1c\xb4\x10\x4c\xcd\x86\xba\x24\x77\x20\xcc\xa8\x85\x1c\xae\x36\x63\xb2\xb6\x0f\x2e\x7a\x49\x59\x42\xe7\x49\x87\xc2\x7c\xb2\x28\xdf\x9c\x54\xe7\xcf\xbc\x74\x94\xe5\x49\xe2\xbc\xd2\x18\xa5\xa2\x25\x5d\x2c\x58\x84\x41\x8a\x18\xa5\x53\x46\xf5\xee\x5c\xfa\xa8\xc8\x1c\xa5\xa9\xce\xb7\xb6\xbe\x05\x6f\xda\xf0\xc5\x68\xa1\xac\xd1\xde\xda\x07\x43\xde\xd7\x35\x58\x33\x3b\xb0\x2a\x7a\xcd\xa1\x35\x23\x6f\x85\x76\xd1\x6e\x6f\x40\x29\x17\x69\x47\xde\x03\x55\x82\x57\x8e\x02\xd4\x3c\x24\x5b\x32\x4e\x77\x57\x29\xb0\xeb\xaf\x5a\xcc\x0b\x45\x93\xae\xb1\x78\x31\x5b\x4a\xaa\x0b\x0e\x5e\x2e\xd1\x1d\x9a\x4e\x2c\x58\xe4\x18\xf1\x46\x8e\xf8\x1a\xd1\xc6\x85\xc0\xed\xb6\xa9\x32\xae\xa5\x88\xf3\x08\x5c\x99\xe6\x5c\x55\x3b\xbe\xd5\x73\xa0\x1e\xfe\xe5\xc7\x28\xd3\x09\x62\xd0\x94\x39\x7f\xb5\xe0\x40\xa8\xca\x8c\x96\xef\xb1\x3d\x97\x12\x4f\x54\xbf\x0f\x78\xd8\x1d\x9d\x9e\x90\xf7\xd0\x86\x74\x9d\x7c\xa7\x2b\xbe\x6f\x4a\x12\xaa\xf4\xb9\xa4\x5c\xe1\x84\xcf\x59\xda\x64\xa2\x30\x9a\x15\x62\x40\xe3\x73\x89\x58\xd1\xf8\xd8\xa2\x40\xe3\xe3\x06\xee\xdd\x87\x73\x6e\xaf\xe1\x36\xac\xfd\xdb\xbd\x96\xe9\x91\x46\x2e\xf1\xb6\x9e\x02\xa3\x0c\x27\x71\x6f\x83\x2b\x65\x6d\xb6\xda\xa1\x3e\xe6\xba\xa0\xba\xdd\xc6\x40\x30\xd0\xa6\xd4\xd2\xaf\xbc\x6f\x30\xe7\x31\xc8\x04\x7d\x6e\xe5\x78\xd1\xca\x08\xc9\xf1\xcc\x29\xff\xb4\xb0\xe3\x60\x98\xab\xf3\x2c\x96\x4e\x03\x1b\x30\xe7\x7b\x34\xd8\xe5\x6a\x88\xdb\x6e\x90\xc9\x46\x11\x64\xba\x9d\xcb\xf6\xb2\xc9\x79\xc3\x8a\x11\x12\xa6\xba\x19\xab\x1c\x4e\xdd\xc6\x7e\xb9\xae\x6c\x4c\xca\x2a\x4f\xa9\x61\x50\x34\xc6\x00\xb9\xe2\x99\xd5\x91\xac\x4e\x63\x29\xd2\x3a\xee\xac\xe3\xc5\x6f\x5f\xe7\x0e\x39\xa6\x45\x8b\x54\xfb\x0e\x6b\x49\x2f\x98\xa5\xf4\xfa\x35\xf0\xa5\x5e\x1d\x92\x3f\x7d\xf5\x3f\xbf\xfe\x4b\xc3\x8b\x62\x6e\x63\xda\x5e\x01\x77\x56\xa2\xdb\x80\xde\x76\xaf\x9b\x66\xce\x99\x0f\xc5\x9e\x2d\xcb\x77\x0a\x87\x42\x89\x95\xe8\x84\x06\xed\xf8\x76\x9e\xb5\x83\xf3\x7b\x4c\x26\x50\x9a\xf2\x08\x26\x46\x1c\xd8\x39\x8c\x51\x65\x2d\x8f\x4c\xd6\xe4\xf9\x57\x13\x0c\xf1\xc4\x49\x59\xea\x9a\x95\x6c\xfd\xc3\xf5\xc7\xd9\x8e\xc5\x30\x45\xfe\x3a\xd9\x98\x29\x53\xc4\xec\xbd\x58\x20\x9a\xb6\x4c\x12\xd5\x3e\x09\x96\x67\x7b\x23\xc0\x36\xcf\x86\x62\x25\x5d\x98\xd0\x65\x9b\xec\x67\x97\x4c\x19\x67\x69\x9e\x1e\x92\x67\x0d\xaf\x58\x8e\x7c\x1b\xe8\x61\x7b\x2a\xcf\x33\x6a\xd8\xf2\x52\xd2\x34\xc5\x8c\x2b\x16\x03\xd7\x6c\xc1\x30\xe6\xa5\x20\x31\xd4\xe3\xed\x87\x3e\x4e\xab\x00\x3e\x86\x70\x19\x36\xda\x8b\xe8\x4e\xed\x39\x2e\x51\x28\x75\x5e\xbb\xa8\xca\x79\xd7\x19\x58\xaa\xb4\x6a\x03\x81\xeb\xcc\x4a\x72\x15\xff\x51\x0a\x94\x33\xbe\x54\x65\xb4\x25\xf2\xbf\x36\xf3\xb8\xf9\xec\x6a\x05\x2e\xba\x01\xaa\xde\x41\x5f\x2a\xc8\x88\x92\x65\x90\x31\x06\x9e\xb7\xb3\x8f\x6d\x5b\xac\x91\xba\x52\x48\x8e\xa9\x82\x1e\x76\xd7\x4a\x2c\xa6\xbf\x56\xa1\x48\x0e\xbe\x35\x06\xf4\xfc\xd9\x57\xad\x78\x57\xbc\xd7\xf8\x52\x19\xa5\xf9\xe1\x68\xfa\x2f\x3a\xfd\xf5\xe3\x9e\xfb\xc7\xb3\xe9\x5f\xff\xef\xe4\xf0\xe3\xd3\xca\x9f\x1f\x9b\x83\x2b\x77\x4b\xce\x65\xab\xe1\xb0\x3b\x6b\xbd\x58\xe5\xf1\x63\xe2\x83\xb9\xce\x65\x0e\x13\xf2\x3d\x4d\x14\x4c\xc8\x8f\x1c\xcf\xc9\x1b\x02\xad\x3d\xba\xc2\x48\x36\x8f\xcd\xa8\x8f\xdb\x5f\xc1\x29\xb5\xbf\xe3\xa6\xdb\xa6\x82\xf6\x03\x92\xb7\x2c\x54\x18\x21\xaf\x60\xa0\xcd\xee\x5a\x08\x31\x83\x6b\x9a\x66\x09\xcc\x22\x91\x1e\x14\xcf\x6f\xf1\x90\x7b\xfe\x75\x0f\xec\xd9\xfb\x60\x71\xe4\xe3\xde\x87\xa9\xfb\xd7\x53\xff\xd3\xfe\x77\x7b\xff\x9e\xb5\x3e\xdf\x7f\x7a\x80\xa1\xbd\x05\xaa\x7d\xfc\x30\x2d\xd1\x6e\xf6\xf1\xe9\xfe\x77\x95\x67\xfb\xbb\x90\x70\x3b\x89\x2a\xa5\xd9\xf4\xa2\xb1\x62\x5c\xa3\x28\xdb\x94\x8d\x95\xd2\x6c\x97\x8a\xb7\x60\xcb\x37\x34\x7b\x0f\x0b\x90\xc0\xa3\x6e\x13\xd2\xf1\xd6\x27\x64\x2f\x36\x47\x38\xe6\xe0\xed\x7b\xe1\x55\x16\x4f\xdd\x41\x56\x7c\xe7\xb9\x7b\x71\xe1\xd1\x66\x4c\x4e\x2d\xd2\x6d\x52\x8a\x92\x3b\x94\xf5\xb2\xd7\xdb\x77\x01\x71\xda\x20\x4e\x4e\xcb\xa8\xbb\x11\x86\x1e\x73\x1c\x59\x83\x57\x9b\x06\xd1\x03\xc9\xfb\xc9\xbe\xbc\x25\xf4\xb7\x73\x90\x62\x9d\xa3\x7b\xf0\xf7\x50\xfc\x64\xed\x2e\xa3\xfb\xc9\x59\xa3\x72\xd9\x57\xba\xf8\xf1\xe4\x85\xc5\x19\x64\x4c\x28\x51\xae\x44\x12\x2b\x92\x73\xf6\x4b\x0e\xe4\xe4\x45\x51\x7d\x88\xf1\x28\xc9\xf1\xde\x9e\x1f\x7f\x3c\x79\xa1\x66\x84\xfc\x03\x22\x6a\xf4\xfa\xab\x96\x10\x4e\x2c\xb5\xf7\xee\xed\xeb\xff\x8d\x16\x00\xfc\xd2\x5d\x9b\xe1\x0a\x8b\x24\x8c\x5a\x8b\x94\x3d\x7c\x4d\xaf\x36\xba\x11\x67\x14\xd1\xac\xd9\xc6\x40\x9c\xdd\x8e\xdb\x20\xdd\x15\x24\x99\xc2\xe4\x23\xa2\x72\xe9\x56\x63\x06\xb4\x59\x10\x98\x86\xee\x1c\xe7\x3e\x9f\x0a\xf3\xd5\x46\xc5\x45\x47\x82\x73\x88\x30\x32\xc1\x08\xa1\x7d\x38\x44\xf5\xfd\x4d\x01\x7f\xa7\x44\xbb\x19\xe0\x5c\x8e\xe9\xf9\x87\x37\x90\xde\x3e\xa1\x1b\x8a\x7c\xe7\x44\x79\x9c\xf1\x08\xaa\x76\xbe\xc5\xd1\xf8\x6d\xe6\xe0\xe0\x76\xe7\x2c\x61\x6b\xbd\xa3\x46\xb4\x46\x4b\x74\x06\xbf\xef\xb0\x5d\xd7\xc3\x32\xb7\x2c\x1b\x1b\xb9\xad\x68\x40\x2d\xfc\xc9\x2b\xaa\xc8\x1c\x80\xa3\x3d\xd7\xda\xed\x80\x3b\x9c\x87\xd2\xda\x9a\x67\x53\x2d\xa6\x0d\xfa\x55\x07\xe4\xba\xa1\xd6\x62\x3e\xa8\xad\xed\x68\xb0\x41\xe0\x6a\xb5\xde\x05\x03\x55\xde\xda\xe3\xa5\xa7\xc1\x5e\xea\x66\xad\xac\x36\x67\x67\x64\x2d\x8e\x6d\xfc\x6b\x7b\x4a\x46\xdd\xae\x19\x9e\xb4\x40\xf7\x62\x8d\x9a\x47\xcc\xd1\x6e\xf3\x19\xc8\x4b\xd6\x43\xf8\x78\x5f\x7f\xbf\x17\x6b\x79\xf5\xfe\xf4\x18\xf3\xf3\xcc\x07\xde\x3f\x81\xd8\x5f\x95\x2a\x6e\xdf\xa3\x13\xd9\x50\xa3\xa3\xbb\x27\xe8\x4c\xc8\xf1\x83\x64\x52\x68\x11\x89\x0e\xa7\x53\x6b\xca\x0c\x82\xb6\x2d\xc7\x68\x48\x1f\x43\xe5\x0d\xcb\xc7\x6a\x59\x69\x4a\x0b\x69\xc8\xb5\xf6\x5b\x3e\x2f\xee\xc4\x2a\x7b\x77\x5a\x1f\xf9\xcf\x7f\x1f\xfd\xbf\x00\x00\x00\xff\xff\x78\xea\x72\xfc\x70\x56\x01\x00") +var _operatorsCoreosCom_catalogsourcesYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x6b\x73\x1c\xb7\x11\xe0\x77\xfd\x0a\x94\x2e\x55\x22\x95\xdd\xa5\xe4\xa4\x7c\x09\xe3\xd8\xc5\x50\xb2\x8e\x65\x3d\x58\x22\xed\xd4\x45\xd1\x9d\xb0\x33\xbd\xbb\x30\x67\x80\x31\x80\x21\xb9\x8e\xf3\xdf\xaf\xd0\x00\xe6\xb1\xbb\xf3\xe4\x4b\xf2\x01\x1f\x6c\x71\x67\x06\x8f\x46\x77\xa3\xdf\xa0\x19\xfb\x09\xa4\x62\x82\x1f\x12\x9a\x31\xb8\xd6\xc0\xcd\x5f\x6a\x76\xf1\x17\x35\x63\xe2\xe0\xf2\xf9\xa3\x0b\xc6\xe3\x43\x72\x9c\x2b\x2d\xd2\xf7\xa0\x44\x2e\x23\x78\x01\x0b\xc6\x99\x66\x82\x3f\x4a\x41\xd3\x98\x6a\x7a\xf8\x88\x10\xca\xb9\xd0\xd4\xfc\xac\xcc\x9f\x84\x44\x82\x6b\x29\x92\x04\xe4\x74\x09\x7c\x76\x91\xcf\x61\x9e\xb3\x24\x06\x89\x9d\xfb\xa1\x2f\x9f\xcd\xbe\x7a\x36\x7b\xf6\x88\x10\x4e\x53\x38\x24\x11\xd5\x34\x11\x4b\x3b\x96\x9a\x89\x0c\x24\xd5\x42\xaa\x59\x24\x24\x08\xf3\xbf\xf4\x91\xca\x20\x32\x83\x2c\xa5\xc8\xb3\x43\xb2\xf3\x1d\xdb\x9f\x9f\x0b\xd5\xb0\x14\x92\xf9\xbf\x09\x99\x12\x91\xa4\xf8\x6f\xb7\x46\x3b\xec\x19\x0e\x8b\xbf\x27\x4c\xe9\x1f\xb6\x9f\xbd\x66\x4a\xe3\xf3\x2c\xc9\x25\x4d\x36\x27\x8c\x8f\xd4\x4a\x48\xfd\xb6\x1c\xde\x0c\x17\x51\xad\x64\x64\x1f\x33\xbe\xcc\x13\x2a\x37\xbe\x7d\x44\x88\x8a\x44\x06\x87\x04\x3f\xcd\x68\x04\xf1\x23\x42\x1c\xa4\x5c\x57\x53\x42\xe3\x18\xa1\x4f\x93\x53\xc9\xb8\x06\x79\x2c\x92\x3c\xe5\xc5\x50\xe6\x9d\x18\x54\x24\x59\xa6\x11\xc2\xe7\x2b\x20\x99\x04\xad\xd7\x08\x12\x22\x16\x44\xaf\xc0\x8f\x5d\x7c\x45\xc8\xcf\x4a\xf0\x53\xaa\x57\x87\x64\x66\x20\x3c\x8b\x99\xca\x12\xba\x36\xb3\xa9\xbc\x65\xb7\xe9\x85\x7d\x56\xf9\x5d\xaf\xcd\xd4\x95\x96\x8c\x2f\xdb\xa6\x62\xde\xeb\x3f\x07\x0b\x9a\xf3\x75\xb6\x3d\x85\x8d\x1f\xfb\x8e\x9f\xe5\xf3\x84\xa9\x15\xc8\xfe\x93\x28\x3e\xd9\x9a\xc3\xe9\x8e\x27\x0d\x13\xa9\x74\xea\xe9\x66\x16\x49\x40\x92\x39\x67\x29\x28\x4d\xd3\x6c\x6b\x80\xa3\xe5\xf6\x1a\x63\xaa\xfd\x8f\xf6\xa5\xcb\xe7\x34\xc9\x56\xf4\xb9\xfb\x51\x45\x2b\x48\x69\x89\x0f\x22\x03\x7e\x74\x7a\xf2\xd3\x9f\xce\x36\x1e\x90\x3a\x74\x6a\x78\x4e\x98\x22\x94\x48\xc8\x84\x62\x5a\xc8\xb5\x81\xd6\xf1\xd9\x4f\x6a\x42\x8e\xdf\xbf\x50\x13\x42\x79\x5c\x10\x1e\xc9\x68\x74\x41\x97\xa0\x66\x5b\x73\x15\xf3\x9f\x21\xd2\x95\x9f\x25\xfc\x92\x33\x09\x71\x75\x16\x06\x3c\x1e\x26\x1b\x3f\x1b\xf8\x57\x7e\xca\xa4\x19\x53\x57\x08\xd9\xb6\x0a\x33\xab\xfd\xbe\xb1\xc2\xdf\xa6\x1b\x4f\x09\x31\x80\xb1\x5f\x92\xd8\x70\x36\x50\x88\x14\x8e\xea\x20\x76\xd0\xb4\xc8\xc2\x94\x81\x88\x04\x05\xdc\xf2\x3a\xf3\x33\xe5\x6e\x95\xb3\xad\xce\xcf\x40\x9a\x8e\x0c\x43\xc8\x93\xd8\xb0\xc4\x4b\x90\x9a\x48\x88\xc4\x92\xb3\x5f\x8b\xde\x15\xd1\x02\x87\x4d\xa8\x06\xa5\x09\xd2\x35\xa7\x09\xb9\xa4\x49\x0e\x08\xec\xad\xbe\x53\xba\x26\x12\xcc\xb8\x24\xe7\x95\x1e\xf1\x13\xb5\x3d\x97\x37\x42\x02\x61\x7c\x21\x0e\xc9\x4a\xeb\x4c\x1d\x1e\x1c\x2c\x99\xf6\xcc\x3e\x12\x69\x9a\x73\xa6\xd7\x07\xc8\xb7\xd9\x3c\x37\x0c\xf5\x20\x86\x4b\x48\x0e\x14\x5b\x4e\xa9\x8c\x56\x4c\x43\xa4\x73\x09\x07\x34\x63\x53\x5c\x0c\x47\x86\x3f\x4b\xe3\xff\x21\xa1\xca\x01\x37\xd1\x60\x83\x1a\x88\xe7\xbb\x03\x37\xcb\xf0\x63\x8b\x98\xb6\x43\xbb\xd8\x72\x4f\xcc\x4f\x06\x8c\xef\x5f\x9e\x9d\x13\x3f\x23\xbb\x6f\x76\x8b\xca\x57\x77\x40\xc8\xef\x96\x81\x2c\xe3\x0b\x90\xf6\xcb\x85\x14\x29\xf6\x0a\x3c\xce\x04\xe3\xda\x72\x8d\x84\x01\xd7\x44\xe5\xf3\x94\x69\x85\x68\x0d\x4a\x9b\x8d\xdc\xee\xf8\x18\x0f\x47\x32\x07\x92\x67\x86\x78\xe3\xed\x57\x4e\x38\x39\xa6\x29\x24\xc7\x54\xc1\xbd\xef\x9d\xd9\x23\x35\x35\x1b\xd2\x7b\xf7\xaa\x47\xff\xf6\x07\x5b\x54\x4f\x88\x3f\xb3\x7b\xbd\xdc\xc4\x26\x88\xe5\x09\xbb\xce\x04\xd2\xc2\x1d\x4c\xa3\x71\x2c\x41\xed\x78\xd0\x8d\x75\xa6\x1d\xd9\xcf\x2d\xf2\xad\x84\x32\x48\x40\x35\x79\xf7\xfa\x0d\x89\x28\x27\xb9\x02\x43\xc2\x91\xe0\xdc\x60\x99\x16\x84\x9a\x33\x77\x0a\xd7\x4c\x21\x56\x4a\x58\x32\xa5\xe5\x7a\x7b\x6f\x4d\xfb\x5e\xc8\x94\xea\x43\xf2\x8d\x7f\x6d\x8a\x43\x08\x49\x58\xf6\xed\xe1\x37\x99\x90\xfa\xdb\x9d\x1f\xbe\xe3\xc9\xda\x0c\x1e\x93\xab\x15\x70\x72\x56\x40\x86\xfc\xbd\xf2\xc7\x2b\x99\x45\xbb\x07\x3e\x59\x72\x21\xfd\xd7\x06\xad\x4f\x52\xba\x04\xb2\x60\x90\x20\xa1\x29\xd8\xc1\xd5\x5a\xd0\x82\x58\xc1\x6f\xc1\x96\x6f\x68\x36\x16\xd6\xc7\xbe\x03\x33\x03\x33\xa9\xaa\xd8\x52\x3e\xd4\x02\x29\xca\x2c\xde\xfc\x93\x46\x17\x84\xba\xc1\x53\x9a\x4d\x15\x52\x73\x07\xe0\xfb\xc1\xef\xd8\x77\x6a\x76\xa4\xfc\xf9\xc4\x71\xe9\xc1\x10\xaa\x02\x61\xf0\xb7\xa5\x50\xd6\x09\xdf\x37\xbb\xce\xd4\x1e\x63\x2c\x65\x16\x9d\x8a\xd8\x2e\x7b\xec\x2e\xbe\xaa\x76\x42\xe0\x3a\x13\x0a\x14\x89\xd9\x62\x01\xd2\x70\x4e\x71\x09\x52\xb2\x18\x14\x59\x08\x89\x5b\x9b\x89\x18\xd9\x44\xb1\xd5\x35\x79\xe4\x54\xec\x60\x9b\x64\x10\x0d\xa0\xd0\x62\x31\xbc\x0b\xb7\x77\x32\x25\xd2\xc1\x63\x4c\xa3\x0b\x54\x8f\xd6\xbb\x9f\x6e\x80\xee\xc8\xbd\xec\x11\xdd\x89\xa2\x8e\xc3\x3d\x51\x06\x24\x4f\x54\xd1\xe7\xee\xf5\x77\x4e\xb9\xcf\xb4\x4d\xe3\x22\x86\xa3\x8e\xe9\x6f\x2d\xe1\x05\xfe\x31\x07\x85\x9f\x17\x53\x45\xc1\x26\xce\x13\xe4\x7d\x79\x52\xdf\xe5\xa6\x75\xf4\x5c\x4b\xdf\xf5\xd8\xf7\x60\x01\x52\x42\xfc\x22\x37\xa8\x7e\x56\xcc\xca\x71\x3e\xfb\xf3\xcb\x6b\x88\xf2\x26\x72\x6c\x5c\x7a\x03\xe2\x57\x9b\x51\x38\x1c\x24\x40\x92\x2b\x96\x24\x6e\x46\x86\x65\xf9\x07\x06\x24\x28\x01\x1a\x08\x2a\x7b\xb0\x28\xaa\x99\x5a\xac\x3b\x07\x30\x10\x2d\x60\x0e\xd7\x46\xb8\x41\x6d\x11\x09\x89\x2d\x18\xc4\x64\xbe\x76\x72\x8c\x61\xea\x13\x32\xcf\x35\x61\x1a\x85\x9c\x68\x25\x84\xda\x3c\x44\xb7\x1b\xb5\x5b\x8b\xf3\xba\x64\x02\x65\x54\x22\x38\x18\x6e\x98\x1a\xc9\xc4\xd1\x6b\x65\xf8\x19\xae\xbc\xfc\x8c\x6d\x0a\x16\xdb\x2d\x35\x27\x5e\xb1\x5d\x9e\x22\xcc\x30\x57\x4c\xaf\xf0\x8f\xa5\x51\x97\x8c\x7c\xac\xf2\xd4\x0c\x7a\x05\x6c\xb9\xd2\x6a\x42\xd8\x6c\x87\xd0\xb4\xd9\x0c\x02\x02\x8d\x56\x95\x69\xa5\x00\x5a\x11\x9a\x24\x7e\x09\x55\xac\xb5\x12\x48\x6a\x64\x45\xb2\xe7\x85\xc9\xce\x51\x9c\x20\x38\x29\x24\x98\x4d\xc4\xdb\xb9\x5d\x13\x02\x3a\x9a\xed\x4f\x3a\xbb\x8f\x44\x9a\xe5\x1a\x8c\x04\x9c\xa7\x66\x6b\x99\x36\x3a\x98\x15\x7c\xa5\xc8\x97\x16\x52\x90\xb8\x89\x7b\xb5\xc5\x9e\xe8\x86\xff\xd1\x38\xde\xc5\xf3\x37\xdb\x63\x0b\xdc\xc7\x5e\x33\x31\xc3\x31\x0b\x24\x84\x5f\x4a\x75\xb4\x72\xca\x52\x24\xa4\x04\x95\x09\x6e\x7a\xb6\x4f\x5e\x96\x6b\xfb\x9b\x79\xa7\x73\x3c\xd3\xe9\x9e\xda\x2f\x37\x7b\xc5\x96\x2b\xbf\xd7\x54\x02\xfe\x56\xc7\x91\xae\x2d\xb7\xac\x84\x4a\x49\xbb\xe8\x88\x69\x48\x3b\x18\x09\x19\x41\xfd\x84\x1c\x71\x02\x69\xa6\xd7\x15\xc4\xae\xa0\x98\x06\x99\x16\x80\x44\x2c\x44\xb6\xa7\x2c\x10\x58\x9a\x25\x2c\x62\xda\xa1\x39\x79\xd6\x63\xbc\x3d\x43\x09\x84\x69\x73\x68\x10\x2e\xa6\x22\xdb\x9f\x91\x23\xc2\xf3\x82\xf1\xb4\x4d\x81\x8b\x62\x06\xae\x23\x33\x2d\x25\xca\xbe\xba\xf9\x51\x3f\xf6\x6d\x5b\xb3\x90\xbf\xdd\xa6\x6e\xfe\xc0\x7b\x10\xa1\x79\xdd\x42\xad\xf3\xd5\xbe\x07\x89\x7f\xdb\xcf\xa1\xcf\xdb\x9b\xa7\xbd\xa5\x1c\x05\x09\x44\xda\x9c\x86\x20\xd3\x09\xa1\x4a\x89\x88\x19\xad\xb0\xc4\xfd\x3a\x41\xd9\x95\x74\xc3\x9e\x0c\x85\x3f\x19\xbc\x7e\x82\x86\x87\x3a\x7d\xf7\xfd\x6e\x0b\x1a\x09\x33\x3a\xce\x62\x03\x2a\x35\xbe\x3b\x5f\xe3\xd3\x27\x8a\x24\x74\x0e\xc9\x0e\xa5\xbd\xa9\xf5\x27\xfe\xb2\xf5\x64\x03\x0d\x0b\xea\xc5\x10\xca\xb6\x89\x0d\x95\x75\x3b\x13\x47\x81\x27\xe6\xa8\x32\xaa\x3d\x65\x5c\x39\xfb\xce\x84\x50\x72\x01\x6b\x6b\x87\xa3\xbc\x30\xc5\x0d\x9a\x02\x76\x2c\xc1\x1e\xe8\x06\xef\x2e\x60\x8d\x1d\x36\xd9\x90\x5a\xba\x1a\x8a\x77\xb6\x0d\xe1\x00\x65\x9b\x9a\x89\x0e\xfc\x62\x04\x80\x86\x93\x86\x6d\x17\xd0\x2a\x3e\xef\x6a\x5b\x56\x6a\x44\x77\xdc\x0f\xdc\x24\x3c\x81\x3d\x3e\xd0\x2c\x4b\x18\xec\x36\x35\xb5\xb7\x56\xad\xaf\xad\x79\xe8\xdd\x68\x5d\x03\x09\xc4\xb4\xf7\x85\xb9\xce\xe2\xfb\x13\x65\xf1\xd5\xf0\x9d\x15\xcb\xac\xa1\x45\x01\xb2\x91\xe1\x48\x6b\xdb\x4f\x34\x61\xa5\x2d\x5b\xa1\xb0\x71\xc2\x27\xe4\xad\xd0\xe6\x7f\x2f\xaf\x99\x32\x32\xe6\x0b\x01\xea\xad\xd0\xf8\xe7\x8c\xbc\xd2\x96\xf4\x5e\xf7\xe4\xcb\x65\x1b\xbd\x07\x76\x7d\xf7\xbd\x03\x47\xdc\x32\x51\x03\xe1\xaa\xd1\x55\xcd\xc8\x89\x15\x07\x0b\x2f\x00\x53\xe4\x84\x1b\xa5\xc0\x42\x6e\xf0\x50\x68\x77\xc7\xbe\xdd\x90\x69\xae\xd0\x6a\xca\x05\x9f\xa2\x18\xb5\x73\x4c\xbb\x41\x66\xdc\xea\x16\xdd\xe2\xf0\xcd\x43\xbf\x42\x1b\xdd\x6b\x3d\xa9\x7c\x3c\x78\xdc\xca\x60\x2b\x7a\x89\xa2\x3d\xe3\xcb\xa4\x10\xe2\x27\xe4\x6a\xc5\xa2\x95\xd5\x1e\xe7\x60\x9d\x03\x99\x04\x23\x31\x50\x65\x98\xbf\xf9\x65\x09\x72\x38\xea\x9f\x1b\xd5\xc0\x8e\x6f\x5d\x1b\x09\x8d\x20\x26\x31\xaa\x2c\xd6\xca\x4e\x35\x2c\x59\x44\x52\x90\x4b\x20\x99\x39\xfa\xc7\x21\xfc\xb0\x93\xd8\xb6\xc1\xe7\x71\x75\xc0\x11\x14\x46\xc8\xf5\xf4\x22\x9f\x83\xe4\xa0\x41\x4d\x8d\x7c\x32\x75\xb3\xd7\x22\x65\x51\xef\xce\x6e\xa5\x1b\x94\xb3\xbe\x37\x7a\xdb\x3d\x89\x58\xa8\x23\x06\x11\x2b\x88\x58\x41\xc4\x0a\x22\x56\x10\xb1\x7a\xb7\x20\x62\xdd\x78\xf8\x20\x62\x05\x11\xeb\xde\x45\xac\x5a\x17\x29\xcd\x86\xf6\x60\xed\x72\x23\x0c\x81\xff\xb4\x06\xdd\x4d\xcb\x1f\x0a\x7c\x3e\x84\xa5\x6e\x02\x34\x72\xcc\x99\x3b\x9c\xce\xd1\x6c\xc8\xac\xbf\x5e\x52\xbe\x04\xf2\x7c\xfa\xfc\xd9\xb3\x21\x06\x42\x87\xce\xbd\xbe\x58\xb8\xe0\x04\xc6\xf5\x9f\xbe\xea\xf8\xe2\x06\xbb\xd2\xe4\x2f\xb9\x1f\x47\x9d\xe3\x3c\x85\x6f\xa6\x26\x22\x37\xf8\xd2\xf0\x18\xe3\x42\x93\x14\x34\xa1\xdd\x32\x59\xd5\xec\xce\x52\x98\x14\x4e\x6f\x64\x3b\x2e\x42\xc8\x3b\x05\x63\x22\xb8\x73\xbd\x98\xcd\xef\xde\xdc\x51\x2b\x88\x80\xda\xc8\x95\x39\x98\x55\x74\xbb\x02\x35\x51\x22\x35\xb3\x66\x5c\x7b\x26\x66\x96\x00\x7e\x63\xc8\x1e\xcc\x96\x33\x12\xe7\xd8\x2d\xe5\x2e\xe4\x69\xdf\xae\x56\xad\x95\x86\xb4\xdb\x17\x68\x0e\x43\x89\xff\x33\x60\xd1\x72\x6d\x3a\x83\x4b\xe0\x3a\xa7\x49\xb2\x26\x70\xc9\x22\x5d\xc0\x0f\x23\xb4\x98\x56\xbd\x20\x35\x40\x8c\xee\x2f\x3a\x4f\xb7\x28\xb4\xeb\x90\x1a\x22\xf9\x6e\xf5\xdd\x87\xe7\xd4\x28\xe0\xbd\x5b\xc9\xac\x51\x27\xd4\xa6\x5f\xeb\xb6\xc5\x7f\x22\x72\xbf\x7b\xdf\xed\x65\x23\x83\xcf\x9f\x01\x67\xce\x38\xd1\xca\x39\xbc\x84\x74\xce\xb7\xed\x95\xee\x70\x79\xd9\xb5\xd7\xa8\x46\x2c\x7a\x0e\xa8\x57\x60\x9d\x94\x47\x6f\x5f\xf4\x83\x18\x71\xc1\x01\xe7\x22\x13\x89\x58\xae\xab\xdb\x6b\x43\xa4\x59\x9a\x79\x27\x2e\x25\x2a\x9f\x3b\x11\xdc\xe0\xfc\xdb\x0d\x7c\x08\xae\xa1\xe0\x1a\x0a\x76\x0b\x6c\xc1\x6e\x11\xec\x16\xc1\x6e\xd1\xaf\x05\xbb\xc5\x8d\x87\x0f\x76\x8b\x60\xb7\x08\xae\xa1\xed\x16\x44\xac\xee\x16\x44\xac\xd6\x16\x44\xac\xa2\x05\x11\x2b\x88\x58\x41\xc4\x0a\x22\x56\x10\xb1\xee\xab\x9b\x9b\xba\x86\x6e\x34\x85\x71\x83\x67\x22\xbe\x41\xf2\x56\x26\xe2\x96\xdc\x2d\x6b\xd3\x8f\xc4\x34\x11\x11\xd5\x2e\xa3\xda\x7c\xe2\xbc\x50\x8a\xa6\xd6\x4d\x31\x21\xbf\x0a\x0e\x36\x9b\xc5\x90\x07\x3a\x0b\x84\x5e\x81\x34\xaf\xef\xa9\xfd\xd6\x14\x82\x90\xfb\x15\x72\xbf\x42\xee\x57\x63\xfb\x6c\x72\xbf\x56\x54\x59\xbc\xb5\x47\x63\x73\x2a\x58\x85\x27\x9d\x83\x4c\x7f\xa7\x99\x60\x06\xdd\x1d\x3a\x62\x3d\x90\x12\xa5\x2c\x64\x62\xe7\xf0\x87\xf8\xb4\x0e\x0f\xa7\x56\xe3\xa2\x68\x1c\x43\x4c\x32\x90\x53\x8b\xa2\x82\x2c\x18\x8f\x77\xac\xd5\xc3\xa7\x9b\x3d\xdc\x61\x2a\x56\x7d\x1d\xbd\xbe\xb9\x9b\x7c\xac\xfa\x44\x46\x38\x15\xab\x9e\xd1\xda\x21\xf8\x59\x64\x67\x0d\xd5\xd0\xa7\x44\x3b\x87\xe2\x0f\x3d\x75\xf4\xe1\x6a\x36\x2a\xc7\xde\xfd\x38\xd2\xfc\x34\x48\x15\x3a\x72\xfa\xf8\x2f\x39\xc8\x35\xd6\x0d\x28\xd5\xce\xa2\xec\x8c\x8b\x88\x61\x8a\x44\x54\xd9\x63\x75\x88\xa8\x7c\xb2\xb0\x59\x93\x3c\x4f\x92\x89\xed\x67\x93\x58\x3d\x9b\x43\x3c\xe0\xc2\x3c\x1f\x6c\x11\x1b\x68\xa2\x19\x67\x03\x19\xef\x85\x25\x9b\xfb\xb4\xd9\x95\xb5\x8d\x79\xd3\xa1\xdd\x96\x9d\xb6\xc3\x1d\xde\xf4\xc1\xfe\x71\xdb\xc6\x2a\x30\xa3\xd4\x97\x1b\xeb\xeb\x2d\x30\xb9\x81\x5d\x11\x5f\x1e\x3c\x99\xdb\xb1\x2d\x92\xf1\xf6\x45\x32\xda\xc6\x48\x46\xd9\x19\xc9\x58\x5b\x23\xb9\x81\xbd\x91\x8c\xb3\x39\x92\x4d\x6c\x33\x3b\xe4\x04\xdf\xbb\x31\x3f\x92\x9b\x29\xe7\xe3\xcd\x90\xe4\x16\x08\xab\x3a\x7e\xa5\x88\xd7\xdd\xd9\x25\x49\x5f\xdb\x24\x92\x55\xcd\x3c\x79\xdf\xfb\x32\xce\x34\x49\x6e\x69\x57\x9c\xd1\x8e\xa1\x2d\xec\xbe\x8c\x95\xe4\xe1\x0d\x96\xad\x53\x70\xc3\xf7\xb6\xf0\x8d\x1a\xfd\x06\x56\x41\x72\x23\xcb\x20\x19\x6f\x1d\x24\x37\x45\xf6\x5b\xb3\x12\xde\x6a\x57\x28\x27\xbd\xc6\x38\xb4\x1b\x48\x5b\x83\x29\xb0\x32\xac\x95\x2e\xb0\x46\xd9\x82\xfc\xc7\x08\x11\x88\x98\xff\x25\x19\x65\x52\x19\xed\xc6\xd9\xb5\xab\xcf\x9c\xf9\xae\xd2\xcd\xe0\x09\x60\x91\x36\x73\xc6\x5f\xd2\xc4\x08\x39\x36\xe8\xd7\xd9\x20\xcc\x5c\x36\x45\xc8\x09\xb9\x5a\x09\x65\x25\x92\xa2\xce\xdc\xe3\x0b\x58\x3f\x9e\xf4\x32\x0f\xd4\x5b\x95\xb2\x1f\x9f\xf0\xc7\x56\x74\xda\xa2\xcb\x42\xce\x12\x3c\x59\x93\xc7\xf8\xec\xf1\x6d\xcb\xa8\x23\xe4\xa3\x6a\x31\xdf\xb1\xe2\xc7\x28\x72\xba\xa9\x81\x9b\xd4\xb0\xef\x07\x58\x8f\x0d\x44\x18\x84\xf3\x6f\x6a\x23\x7a\x81\x1a\xd1\xcc\xe8\xee\x85\xdc\x84\x16\x55\x2b\x32\x39\x1b\x95\x35\x57\xb1\x24\x19\x30\xda\x1c\x88\xa6\x17\x80\x1e\x1e\xac\xed\xa8\x58\x8c\x06\x37\xc1\x2d\xea\xe0\x48\x06\x65\x7c\x11\xc2\x44\x88\x8b\x3c\xf3\xa8\xe7\x0b\x87\x0e\x18\x92\xf1\x48\xa4\x3e\xa6\xde\xc6\xb5\x1a\xaa\x70\xf4\x32\xb5\xe5\x4e\xed\xef\x38\x30\x1e\x01\xce\x34\xf1\xa9\xa6\x98\x7f\x22\x54\x91\x4f\x28\x54\x72\xb2\x87\x1f\xee\x7f\x1a\x12\x52\x50\x00\xd0\x5a\x5f\x45\x8e\x9c\xa5\x28\x68\x59\xb1\xff\x15\xb0\x6d\x83\xd8\x80\xa1\x7d\xa5\xb8\x2a\x30\x6c\x2d\x3c\xb2\x47\xb9\x66\xfb\x65\x41\x3c\x82\x78\x80\x52\x72\x2c\xf8\x13\x6d\xe7\xe7\xf9\x9a\xef\x60\x48\xd4\x41\x01\xf7\xd2\xe3\x67\xbd\x05\x76\xcb\x63\x58\xd0\x3c\xd1\xae\xf0\xac\x61\x7d\x78\xd2\x0f\x18\xe1\xdc\xfb\x4b\x9c\xc0\xbf\x10\x72\xce\xe2\x18\x38\xa6\x38\xf8\xe9\xcf\x85\x4f\x08\x2a\xd1\xdd\x70\xb6\xda\x1e\x0f\x19\xf6\x28\x51\x62\xb2\xd9\x63\x54\x14\xa6\x35\x54\x84\xe5\x13\x6b\x03\x10\xa6\x0c\x50\x1b\x2a\x25\xee\x6e\xf7\x12\xfa\x73\x73\x9e\x37\x3a\xf4\x8a\xa9\x07\xe0\x7b\x9b\x83\x06\xd6\xd7\x8b\xf5\x71\xa1\x03\xf7\xfb\x62\xb9\xdf\x16\xd2\xdf\x06\x03\xdc\xea\x34\xf0\xc0\xc1\x3c\x90\xfb\xfb\x29\x1e\xd8\x0b\x60\x0d\x63\x36\x8a\xd5\x4f\x49\x95\x36\x33\x4c\xf4\x1a\x67\x2f\xf3\x69\x70\xc8\x67\xb1\x87\xd8\x3b\x43\x73\xee\xea\xfe\xfb\xca\xd4\x6e\x58\xcb\x2f\x36\x7d\xee\x03\xc6\xf4\x8a\x8b\xe0\xa0\xd0\xc4\x0e\x45\x7c\x45\x65\x18\xec\x75\xc8\x52\x30\x15\xae\x34\x1f\xf2\x78\x33\x39\xae\xec\x1b\xed\xfa\x29\x50\xae\xc8\x63\x1f\xe2\xf1\x44\x95\x6f\x3c\x1e\x44\x6f\xbe\xf4\x65\x31\xf6\xde\x7f\xfe\xbb\x5f\x2b\x77\x59\x0e\x1d\xfc\x28\xc1\x8f\x52\x6d\xc1\x8f\xb2\x3d\x89\xe0\x47\x69\x6a\xc1\x8f\x32\x6a\xfc\xe0\x47\xa9\xb7\xe0\x47\x09\x7e\x94\xe0\x47\x09\x7e\x94\xe0\x47\x09\x7e\x94\xbe\x1f\xdd\x86\x1f\xa5\x54\x83\xee\x43\x8f\xae\xaa\xac\x2e\x4e\xdc\x5e\xa8\x46\x35\x8b\xca\xac\x50\xff\x96\xfd\xd7\x43\x29\xd5\x55\x35\xf8\xa6\x2a\x75\x55\x41\xdf\xb2\x60\x0c\xd6\xa8\x1b\xf5\xe7\x42\xc3\xde\x1a\xe3\x96\x54\xeb\xdf\xb9\x71\xa9\x12\xc0\x7a\x1f\xe4\x70\xee\x53\x59\xdc\x1d\x8d\x73\x28\xf3\x5c\x62\xb2\xe7\x6d\xad\xfb\x66\xc3\xb9\xd0\xf5\x87\x5c\xb3\x69\xf9\x46\x11\x20\x8c\x26\x61\x5f\xcd\x6d\x08\xd0\xbd\xce\x52\xda\x1e\x5d\x7e\x4d\x91\xd0\x51\x62\x9b\xe1\xff\x20\x6b\xb3\x65\xca\xdd\x61\x89\xa9\x69\x32\xe7\xdc\x88\x47\x82\xbb\x2c\x8e\x01\x33\xb1\x47\x8b\x35\xf3\x3a\xaa\xb4\xca\x14\xae\x11\x35\xaa\x72\x9b\x2a\x09\x00\x54\xdb\x1b\x31\x5d\xcd\x25\xc1\x9d\x91\xdc\xfc\x62\xfb\x19\x30\x89\x82\x60\x11\x9e\xac\x58\xd1\x10\x5a\x7d\x89\x34\x5a\x9d\x2c\x53\xb8\x8f\x34\x49\xc4\xd5\x90\xf3\x69\x20\x45\x8c\x2e\x0e\xd8\x1b\x7b\xaf\x06\x57\x11\xdc\x88\x96\xef\x2b\xab\x87\x52\x83\xad\x2d\x94\x1a\xfc\x3c\x4a\x0d\x56\xfc\xa0\xd5\x9a\x83\xdd\xb0\xc2\x9a\x84\x77\x5a\x73\x90\x90\x7f\xba\x0b\x36\x25\x58\xe7\x65\x9e\x68\x96\x95\x59\xc6\xca\xee\x50\x62\x55\xea\x85\xcb\x06\xac\x53\xaf\x99\x0d\x8d\x56\x9d\x43\x6d\x50\x39\x8e\x87\x59\xcb\x0a\xb9\xa9\xcd\x98\x43\xfb\xbb\x2d\xf4\xe7\x75\x6d\x9b\x76\xc8\x1e\x3a\x9b\xaa\x17\xff\x7b\xe1\xae\x6a\xae\xfa\xc0\x15\xd9\x33\xa7\x63\xb2\x76\x5e\xe3\x1a\x23\xac\x1d\xab\x3d\x06\xb0\x76\xb0\x4b\xf0\x02\xea\x92\x5d\x02\x2f\x4f\xdf\x3d\xb5\xbf\xef\x65\xe2\x4d\xf9\xa1\x47\xef\x37\x91\x30\xfa\x70\xed\xa1\x92\xc1\xc6\x79\xdf\x63\x84\x1d\x12\xc1\x37\x95\x53\xf6\xdb\x6e\x99\xa0\xc7\x20\x96\xa4\x7d\x7a\x66\x65\xa3\x4b\x59\xa0\xb3\x97\x3b\xcc\x82\x1b\x92\x6a\x35\xcc\x2a\x3e\x22\xc5\x6a\x6c\xa5\xcc\xbb\x4d\xad\xba\xd3\xb4\xaa\x2f\xa7\xa0\xe5\x03\xbb\xff\xbe\x80\x6a\x4c\x9f\x89\xbb\x2f\x94\x63\x6a\x6a\x0f\x55\x8e\xe9\xce\xdd\x79\x5f\x5c\x55\xa6\x7b\x75\xdf\xdd\x8f\xeb\xee\x0b\xab\xca\xf4\x20\xae\xba\xcf\xbc\x3e\xd3\xdd\xb9\xe8\x42\xf1\xa3\x87\xa9\x2f\x39\xd4\x0d\x37\x9e\xaa\x1e\xd4\xfd\xf6\xa0\xae\xb7\x87\x77\xbb\x8d\x92\x55\x6e\xea\x6e\x1b\x4c\x26\x37\x75\xb3\x8d\x09\xd9\x1f\x87\xcf\xf7\x97\xa2\x74\xcf\x31\xfa\x9f\x47\x6a\xd2\x03\x05\xe6\x3f\x54\x50\xfe\xdd\x06\xe4\x3f\x40\x2a\xd2\xbd\xa4\x21\x0d\x3d\xf6\x07\x1d\xf6\x37\xe3\x5d\x63\x4e\xe4\x91\x29\x47\x23\xf9\xd7\x7d\xa6\x1a\xfd\x0e\x58\xd8\xa8\x14\xa3\xc0\xc5\x1e\x88\x8b\xdd\x5e\x4a\xd1\x7d\xa5\x13\xfd\xce\x78\xd9\xc8\xd4\xa1\x5b\xb3\x6e\xdf\x4d\xca\xd0\x7d\xa7\x0b\xdd\x41\xaa\xd0\x43\xa4\x09\xdd\x41\x8a\x50\xf0\x09\xf4\x6c\xc1\x27\xd0\xb7\x05\x9f\x40\x53\x0b\x3e\x81\xcd\x16\x7c\x02\xc1\x27\x10\x7c\x02\xc1\x27\xb0\x3d\x60\xf0\x09\x04\x9f\x40\xbf\x16\x7c\x02\xf7\xe3\x13\x18\x9a\x76\x33\x0e\x97\x1f\x26\xdd\xe6\x7e\x53\x6d\x6e\x3f\xcd\xe6\x01\x53\x6c\x7e\x67\x06\x97\xc1\xe9\x34\xe3\xd0\xfc\x73\x49\xa3\xf9\x3c\x52\x68\x1e\x3c\x7d\xe6\xa6\xa9\x33\xb7\x93\x36\x33\x00\xdb\x47\xe2\x79\x26\xe2\x23\xae\xd9\x4d\x2f\x3e\xaa\x22\x60\xd3\xed\x47\xf4\x52\xb0\x98\x64\xb9\x76\x17\xae\x84\x1b\x90\x3a\x71\xe0\x7e\x6e\x40\xaa\x6d\x5e\xb8\x06\xa9\xad\x7d\x36\xd7\x20\x35\xed\xd9\x3d\xde\x85\xa4\xf2\xb9\x96\x34\xd2\x83\x2e\x44\xf2\x0e\xc7\x70\x25\xd2\x56\x0b\x57\x22\x85\x2b\x91\xc2\x95\x48\xe1\x4a\xa4\x50\xca\x2f\x94\xf2\xab\xb6\xcf\xc6\x8f\x47\x42\x29\xbf\x81\x9f\x86\x52\x7e\x5d\x2d\x94\xf2\x0b\xa5\xfc\x9a\x46\x0f\xa5\xfc\x42\x29\xbf\x61\x03\x87\x52\x7e\x24\x94\xf2\x0b\xa5\xfc\xbe\xe0\x52\x7e\xe1\x4a\xa4\x2f\xe2\x5e\x90\x70\x29\xc8\x80\xb1\x3f\xaf\x4b\x41\xc2\x95\x48\xad\x83\x84\x2b\x91\x02\xeb\x0b\x57\x22\xfd\x6e\xb9\x5f\xb8\x12\xa9\xc7\x20\xe1\x4a\xa4\x70\x25\x52\x6b\x0b\x57\x22\x05\x3f\x0a\x09\x7e\x94\xe0\x47\x19\xfa\x55\xf0\xa3\x34\xb7\xe0\x47\x19\xd2\x82\x1f\xa5\xf7\xe8\xc1\x8f\x12\xfc\x28\xc3\x06\x0e\x7e\x14\x12\xfc\x28\xc1\x8f\xf2\x05\xfb\x51\xc2\x95\x48\xe1\x4a\xa4\x70\x25\x52\x31\x72\xb8\x12\x29\x5c\x89\x84\x2d\x5c\x89\xd4\x63\x84\x70\x25\xd2\x97\x7a\x25\x52\x2d\x2d\xe8\xcb\xbd\x17\x69\xf8\x32\xc2\xe5\x48\xe1\x72\xa4\x86\x16\x2e\x47\x0a\x97\x23\xed\x6a\xe1\x72\xa4\x70\x39\x52\x4b\x0b\x85\x10\x7b\xb6\x50\x08\xb1\x6f\x0b\x85\x10\x9b\x5a\x28\x84\xb8\xd9\x42\x21\xc4\x50\x08\x31\x14\x42\x0c\x85\x10\xb7\x07\x0c\x85\x10\x43\x21\xc4\x7e\xed\xe1\x1d\x70\xff\x7f\x14\x42\x0c\x97\x23\x7d\x96\x37\x8b\x84\x6b\x45\x3a\xda\xe7\x73\xad\x48\xb8\x1c\xa9\xd6\x79\xb8\x1c\x29\xb0\xb0\x70\x39\xd2\x17\xc7\xc5\xc2\xe5\x48\x3b\x3a\x0f\x97\x23\x85\xcb\x91\xc2\xe5\x48\xc1\x27\xd0\xd9\x82\x4f\x20\xf8\x04\xaa\x2d\xf8\x04\x36\x5b\xf0\x09\x04\x9f\x40\xf0\x09\x04\x9f\xc0\xf6\x80\xc1\x27\x10\x7c\x02\xfd\x5a\xf0\x09\x84\xcb\x91\xc2\xe5\x48\xe1\x72\x24\x6c\xe1\x72\xa4\x70\x39\x52\xb8\x1c\x69\xe7\xc7\x70\x8d\x97\x9b\x1c\x0b\xae\x81\x37\xe6\xdc\xf4\x45\xe7\x97\xb5\xde\xcc\xe9\xba\x60\xcb\x5c\x3a\xbd\x7f\xf9\xfe\xf4\x98\x44\x54\xd3\x44\x2c\xc9\xa9\x88\xad\x69\x19\xbf\x28\x7e\x4e\x41\xd3\x98\x6a\x5a\xde\xa0\x92\x49\x71\xc9\x62\x64\xaa\x31\x5c\x13\x96\xd2\x25\x18\xe6\xd5\x38\x89\x5c\x01\xa1\xe4\x0a\x92\x64\x7a\xc1\xc5\x15\x27\x97\x20\x55\x85\x5d\x7f\x12\x59\xfa\x89\x28\x90\x97\xf6\x82\x21\xb8\xce\x0c\xa2\x31\x6d\xcf\x7d\x3f\x93\xea\x70\x65\x90\xfa\xb1\x7d\x7a\x86\x41\xbd\x6d\x77\xf5\x14\x6b\xc7\x65\x9a\x39\x3d\x35\x82\xfd\x53\x43\xd4\xb9\xf2\x11\xf5\x0b\x96\xc0\x74\x4e\x15\xc4\x7e\x5c\x65\x68\x4d\xc8\xd8\xce\x2d\xd7\x2c\x61\xbf\x82\x3b\x4d\x80\xea\x5c\x36\xe6\x49\xf4\x10\x38\xba\x0d\x21\x53\x3f\x8f\x17\xac\xc9\x88\xd1\xc7\x60\x11\xd1\x68\x05\x2f\x58\xab\x0a\x5f\x43\xaa\x63\xf7\x81\x37\x49\xec\x89\xcc\xca\x41\xfb\x24\x66\x12\x99\xd0\x9a\x28\x2d\xa4\x87\x5c\x26\x61\x1a\xd1\x24\xca\x13\x64\x39\x47\xa7\x27\x76\xd0\xee\x5b\xb3\x3a\x48\xa9\x5c\xff\x80\xc9\xfb\x4f\xfc\xf4\x77\xcf\x79\x7b\xb7\x51\x00\x45\x7b\xe4\x4d\xa6\x9d\x42\x2a\xe4\xfa\x9c\xca\x25\xdc\x98\x84\xdf\x54\xfa\xda\x24\xe0\x3f\xbc\x7a\xf7\xe6\xe5\x9b\xd7\x27\x6f\x4e\xce\x1d\x5f\xf6\xce\xb0\x4d\xd2\x76\x6a\xab\xb5\x30\x8a\x85\x76\x53\x24\x09\x4b\x99\x2e\xbe\xb2\x34\xd8\xac\x32\x5b\xbe\x8d\x09\x74\x39\xd7\x2c\x05\xeb\xf9\xa2\x5a\x1b\x91\xc6\xd0\x47\x0a\xa0\xf1\x9a\xae\x94\x5e\x80\x61\xae\x64\x99\x53\x49\xb9\x06\x7f\x14\x30\x6d\x3f\x8a\x05\x51\xc2\x29\xf2\x4c\x95\x5e\x32\x05\xda\xa6\x0d\x9d\x8a\x66\x96\x82\x3d\xac\xe8\xa5\xbd\x40\x69\x21\x0c\xff\x36\x9b\x9a\x8a\x98\x2d\x58\x64\x2d\x43\x24\xa5\x71\x91\xea\xe2\x14\x0b\x90\xc5\xf1\x57\x2e\xb8\x8d\xfa\x36\xc1\x0c\xfc\x92\x49\xc1\x51\x61\xba\xa4\x92\xd1\x79\x02\x85\xff\x4f\x81\xb6\xe3\x95\x0b\xe2\x64\xbe\xd6\xd0\xcc\x96\xec\x08\x6e\x37\xdc\x05\x5c\xcd\xfd\x3d\x6a\xec\xe7\xbc\xcc\x49\x2b\x85\x15\xf3\x3d\x73\xc9\x0a\x31\x28\xe6\x98\x9f\x84\x38\x8f\x3c\xe8\x84\xce\x24\xb3\xda\x1f\x2d\x30\xc6\x31\x63\xaa\x48\x9a\x9b\x93\xda\x48\x41\x4a\xb1\x79\x02\x13\x23\xeb\xb0\xe6\x64\x9a\xb2\x8f\x39\x18\x28\x63\x4f\x28\x81\x5c\x82\xc1\x37\x83\xc7\x56\xd4\x05\x30\x82\x90\xc0\x4b\xb0\xa8\x15\x67\xbc\xcb\xd4\x9c\xc7\x91\x73\x98\x9f\x2c\xc8\x5a\xe4\xb2\xc6\xfe\x57\xd4\xe0\x31\x52\x6f\xe3\x44\x5c\x02\x1c\xf2\xa0\x09\x89\xc1\x28\x0e\x8c\x9b\x93\x68\x29\x44\x6c\xf4\x07\x29\xae\x59\x8a\xa3\x38\x02\x28\x76\x6d\xbe\x26\xb1\xc8\xe7\x49\x81\x26\x86\xe5\xbb\xd3\x2a\xa3\xd1\x85\x99\x03\x76\xdc\x96\xba\x78\xa0\xd3\xec\x00\xdf\x72\xff\x75\x5f\xaa\xd9\xcf\x4a\xf0\xd2\xe9\x5c\x2c\x6b\xd6\x6b\x77\x99\x22\x73\x50\x7a\x0a\x8b\x85\x90\xfa\x6f\x66\x7f\x73\x8e\x44\xc3\x45\x01\x40\x8f\x40\x18\x60\x80\xd0\xc6\x14\x94\x3a\xd5\x0b\xb9\x83\x81\x54\x50\xaf\x89\x05\x66\x86\xde\x25\x3f\x24\xff\x67\xef\xdf\x7f\xfc\x6d\xba\xff\xdd\xde\xde\x87\x67\xd3\xbf\x7e\xfc\xe3\xde\xbf\x67\xf8\x8f\xa7\xfb\xdf\xed\xff\xe6\xff\xf8\xe3\xfe\xfe\xde\xde\x87\x1f\xde\xbc\x3a\x3f\x7d\xf9\x91\xed\xff\xf6\x81\xe7\xe9\x85\xfd\xeb\xb7\xbd\x0f\xf0\xf2\x63\xcf\x4e\xf6\xf7\xbf\xfb\x43\xc3\x84\x28\x5f\xbf\x5b\xb4\x12\x71\xaf\xec\xdd\x69\x9f\xf3\xa8\x26\xd2\x31\xae\xa7\x42\x4e\xed\x07\x87\x44\xcb\x7c\xb7\x28\x6b\xe4\xde\x2e\xd7\x70\xdf\xf3\xe0\x6d\xa5\xaf\x0d\x8f\x91\xbb\xc2\xce\x99\x2b\xcd\x6c\x0a\xce\x9e\x59\xe9\x6e\x61\xb6\xdd\x8b\xfd\xcd\x47\xdc\xd9\x8e\x1e\x51\x9e\x77\x5f\x3e\x51\x3e\xf2\x61\xa3\xff\x8d\x24\x5c\xcb\xf1\xdb\xc6\xea\x21\x23\x0d\x33\xc1\x74\x6e\x61\x26\x99\x90\x4c\xaf\x8f\x13\xaa\xd4\x5b\x9a\xc2\x4d\x37\xe4\x64\x51\xaa\x61\x13\x43\xcf\xe6\xfc\x71\x07\xb4\x0b\x45\x71\x43\x36\x03\xfc\x64\x81\x7a\x48\xa5\x1f\x0f\x54\xff\x6d\x41\x98\x9e\xc4\x85\x24\xbf\x82\x14\xee\x32\x43\x09\x56\x97\x69\x1c\xc1\x7d\xd6\xbe\x0f\x2d\x60\x53\x10\xe5\x08\x36\x23\x1f\x5d\x1b\x8d\x62\xc1\x96\x37\x05\xdd\xd9\xae\x4e\x49\x44\xb9\x59\x28\xde\xd2\xb9\x20\x9f\x12\x58\xd2\x68\xfd\xc9\x2c\xf8\x93\x04\x33\x45\xa3\x03\x7e\xb2\xca\x41\x4d\xfc\x77\x51\x3f\x4c\x11\x60\x78\x71\x2b\xe3\x3f\x5b\x85\xd1\x6b\xdf\x8d\x33\x91\x58\x7f\x20\x13\xf1\xcc\xec\xc1\x6c\x63\xb5\xc8\x42\x8b\x87\x85\x28\xf1\xe1\xe9\xc7\xad\x37\x9d\x35\x53\x0b\xab\x54\x56\x89\x43\xe6\xc8\xf5\xdb\xe4\x1a\x0f\x10\x72\x14\xa7\x0c\x4d\xb0\x64\xef\xf4\xec\x68\xbf\xb6\x72\x23\xe5\xd8\x73\x38\x16\xe0\xe3\x6e\xcc\x40\xaa\x34\xa6\xe2\x19\x8a\x29\x8e\x96\x84\x31\xc7\xd1\xcf\xc5\x00\x18\xed\xab\x2d\x69\xbd\x7e\xb2\x67\x47\xe4\x93\x91\x90\x13\xc6\xc1\xee\x41\x26\xd9\x25\x4b\x60\x69\x66\x52\x09\x64\xf0\x2e\x99\xdd\x7b\xca\x94\x39\xa5\xea\xe8\x9d\x62\x8e\xae\x45\xeb\x16\xbc\x75\x07\xb7\x8b\x29\xa9\x58\xf7\x9e\x28\x9c\x9e\x97\x89\x4b\x79\xa1\xf6\x16\xa2\x03\x5f\x08\x19\x99\xd3\x7c\x07\x1c\xb5\x4b\x62\x37\xa0\x69\x17\x38\xd1\xfc\x53\x68\x91\x54\x19\xda\xab\x75\x78\x45\x2b\x95\x02\x66\xe4\x9d\x41\xc2\x2b\xa6\x60\x52\x48\xbd\x3b\xbb\xf0\x18\x7e\x45\x9b\xe5\xc4\x4a\xb7\x67\xf8\xcf\xb5\xf5\x36\x39\x73\x0c\xa2\x3b\xca\x51\x4d\xf4\x42\x24\x28\xc3\x37\x18\xb7\x5f\xb1\xd8\x8a\x3e\x20\xa5\x90\x33\x9b\xca\x6f\xf5\x60\x91\xc4\x2d\xa7\x64\xa1\x8e\x1b\x91\x05\x8d\x4d\x16\xbf\x38\x72\x30\x87\x36\xbb\xc1\xdc\x80\x1b\x75\x79\x55\x8b\x62\x09\x2d\x02\xd1\x1b\x81\xf9\xff\xb6\xc8\x86\x59\x06\x9d\x8b\x5c\x5b\x7c\xb0\xec\x63\x21\x72\x1e\x13\xc3\x19\x0f\xc9\x4a\xeb\x4c\x1d\x1e\x1c\x94\x47\xf7\x8c\x89\x83\x58\x44\xea\x20\x12\x3c\x82\x4c\xab\x03\x4f\xc8\x07\x99\x88\xa7\xfe\x8f\x29\xf5\x74\x78\x30\x96\x71\x12\x02\x3c\x6f\xb9\xcd\x73\x4a\xec\x6a\x5b\x5e\x28\x81\xb9\xf3\x25\x2d\x12\x17\x31\xd9\x78\x2e\xd6\xef\x78\x2d\xdf\x2f\xee\xa0\x2d\x04\xff\x0a\x23\x7d\xa2\xaa\x5d\xb7\x9f\x1c\x6d\x96\xe5\x0e\x5b\x72\x7f\xd3\xec\xb9\xe7\xa5\x46\x1a\x2e\x57\x81\x52\x90\xd6\x14\xaf\xa7\x35\xea\x92\x7d\x62\xd8\x20\x5f\x13\xc3\xaa\xb5\xbb\x32\xd9\x9a\x24\xdb\x34\xfb\x95\x91\x9b\xb0\x86\xc5\x37\x85\xdb\x6d\x02\x8b\x05\x44\xfa\xdb\x8a\x99\xa8\xa8\xc2\x50\xb8\xb5\xbe\xf1\xff\xfa\xb6\xf9\x94\xef\xe5\x81\xea\x17\x7e\x62\xa7\xd4\x6e\xfb\x1e\x66\xf3\x7e\x89\x3d\x6e\xc8\x2f\x16\x78\x76\x30\x54\xef\xd1\x37\xed\x0c\xa9\xd6\x2b\xe1\xe4\xc2\x24\xa9\xbd\xdc\x19\x80\x81\xfc\xa6\x72\x20\x38\x13\x6c\xe9\x0d\x04\xf2\x56\xb8\x72\x36\x30\x21\xa7\x78\x65\x70\xf9\x0b\x9e\xc8\x6f\x85\x2d\x6c\xd3\x51\xa9\xa4\xa7\xc1\xb6\x33\x7e\x67\x18\x3c\x7f\x28\xc3\x79\x2c\x60\x6a\xe1\x3c\x25\x61\x55\xfd\x60\xad\x80\xbd\x80\x75\x27\x54\xdd\xe1\xe7\x42\x89\xd0\xcf\x34\x29\x71\xd4\x6b\x06\x36\x52\xe2\x6f\xae\xfa\x81\x48\xe7\x8c\xdb\xa9\xd8\x81\xfd\x3e\xe3\xd8\x7e\x3f\x78\x8c\x7f\x76\x4f\xa2\x27\xb4\xfb\xc5\x14\x0d\x03\xf9\xbb\x01\xf1\x42\x85\xe7\xb9\x0b\xa4\xbb\xe2\x82\x2a\xc1\x40\x2f\x7f\xc9\x69\x32\x23\x2f\xac\x78\x8d\xc0\xb3\x3f\x75\x91\x9b\xed\x62\xcb\x1f\x7f\xc5\x92\x38\xa2\x32\x46\xcd\xca\xb2\x1f\xa2\x84\x45\x1c\xea\xa5\xb7\x8e\xbe\x3d\x03\x2c\x91\xc7\x5e\xe6\x4d\x32\x2a\x35\x8b\xf2\x84\x4a\xc3\xf0\x61\x29\x64\x47\x3c\x7a\xcf\xcd\x2c\xb1\xf9\x0c\x22\xc1\xe3\x0e\xcf\xe1\xb0\x5d\x3d\xdf\xec\xbc\xba\xbd\x28\xb7\x81\x64\xae\xa2\x0a\x4b\x61\x93\xbc\xf6\x6a\x5a\x71\xc7\x58\x62\xe1\x99\x5d\xc1\x5b\x26\x56\xb8\x32\x62\x5c\xb5\xf0\x13\x53\x3e\xda\x7f\xbf\x72\xe0\x14\xd4\x3e\x23\xff\x58\x7b\x9d\xab\x2b\x04\x89\x69\xef\x87\x42\x33\x8e\x9b\xaf\x23\x45\xb7\x93\x25\x1b\x59\x08\x09\x97\x20\xc9\x5e\x2c\xf0\x1b\x2c\xe0\xb4\x3f\x23\xff\x32\xca\x60\x9b\x1b\xc6\x36\x0e\x4b\x5b\x02\xc8\x11\x76\x91\x84\x21\x01\xed\xf6\x54\x91\x67\x64\xcf\x56\x85\x62\x69\x0a\x31\xa3\x1a\x92\xf5\xbe\x97\xbe\xad\x59\xad\x0f\xd6\xf4\x29\x96\x56\x29\x92\xf6\xf5\x9f\x5b\xde\xc4\xc9\xde\x26\x52\xfd\xe4\xcd\xcd\x25\x60\xad\x24\xbd\x81\x3d\x85\x17\xb3\x33\x48\xa1\x31\x22\x6d\x52\xf2\x9a\x8a\xa8\xeb\x79\x73\x81\x5b\x3f\x1b\x04\xa5\x44\xc2\x12\xe9\xd3\xd2\xdc\x0d\xa8\x93\x45\xbb\xcb\xbd\x75\x08\x21\xed\x1e\xa9\x29\x31\xba\xe0\xd7\x7f\x8e\xa9\xa6\x0d\x2f\x58\x94\x59\x67\xbb\x48\xad\x4b\xb6\x29\x3b\x6f\xda\xeb\x1e\xae\x17\x37\xfc\xa8\x1e\x50\xa9\xd9\xf5\x65\x1f\xec\x3a\x41\xdb\xb4\x8d\x95\xf4\x68\x30\x95\xb0\x64\x4a\xcb\x75\xc5\x01\xe1\x5c\x98\x82\x30\xae\x34\xe5\x9a\x21\xab\x26\xfe\xcd\xa9\x33\xbe\x5f\x31\xdd\x10\x06\xf8\xce\xe8\xee\x68\xda\xc5\x4c\x1c\x6b\xfc\x38\x5f\x67\x40\xfe\x5e\xf9\xe3\x95\xcc\xa2\xdd\xdf\x9f\x2c\x88\x63\xa0\x16\x37\x69\x1c\x4b\x50\xdb\x9c\x6d\xd7\xd7\xad\xe0\xf3\xc6\xaa\xb1\x10\x3c\xf5\xc6\x2e\x57\x23\x50\x29\xb6\x34\x4a\x8a\xaf\x0f\xe9\x7d\x39\x35\x65\xc5\xfc\xea\x06\xb6\x9e\x59\x48\x8b\x13\x93\x69\xaf\x0e\x46\x82\xab\x3c\x2d\xad\x08\x31\x64\xc0\x63\xe0\xd1\x1a\x4b\x42\x25\x97\xd0\x10\xc6\xf3\xa3\x6a\x40\x09\x42\xfe\x17\x5b\x1a\xb5\xdb\x4d\xae\x2a\x39\x7b\xef\xf4\xc6\x4c\x99\x32\x80\x5f\x80\x34\xca\x3f\x66\xee\x18\xa1\xd7\xf7\x50\xf1\x42\xba\x1a\x55\x3e\xa8\x74\x73\xb2\x58\x28\x70\xf7\x74\xcf\x8b\xea\x96\xde\x5f\xe1\x61\x6a\x39\x90\x01\xc7\x52\x58\x6f\x7e\x26\x14\xf3\xe5\xe0\x8a\x73\xa1\x56\x21\x53\x2c\x6c\xfd\xca\xe6\xb1\xea\x59\x6e\x18\x88\xbd\xb1\x68\xb4\xbd\xe5\xdc\x6e\x26\x54\x2d\x9a\x9e\x17\x36\xd4\xe0\x3c\xdf\xde\xea\x22\x8a\x06\x53\xe3\xea\x4b\x2b\xcf\x32\x49\xf9\x05\xc4\x24\x81\x6b\x16\x89\xa5\xa4\xd9\x8a\x45\x58\xec\xd0\xba\x7a\x8d\xc6\xa8\x6d\x08\x55\x33\x86\x37\x9d\x5e\x59\x3e\x4f\x98\x5a\xed\x76\x1a\xb6\x12\x87\x82\x48\x82\xde\xc9\xf9\xfa\xd0\xc6\x99\xfd\xbc\x14\x7e\x7c\xc0\xbb\xeb\xd7\xe5\x8b\x58\x6c\xf7\x89\xa5\x34\x8a\x0c\x61\x7b\x07\x28\x38\x49\xb0\x42\x44\x0d\x1c\x42\x7b\x3f\x93\xe9\xe5\x02\x20\xb3\xf8\x8c\x81\x6a\x2a\x45\xdb\xa2\x62\x3c\x02\x2c\xde\xe8\x8a\x70\x02\x78\x1f\x80\x96\x0c\xac\x04\x0b\xe8\xf5\xf3\xbb\x08\x5c\xef\x96\x38\xdb\x8d\x08\x2d\x06\x84\x76\x88\x17\xbc\xb0\x13\xe8\x15\x1e\xea\x85\x02\xf3\x6f\x03\x5e\x7c\x32\x74\xb3\x6d\xad\xce\x33\x1b\x0a\x3e\x9a\x1f\xfe\x58\xeb\xc5\xc5\x70\x29\xb2\x12\x57\x6e\x80\x4d\x8e\xe1\xac\x72\x1e\x0d\x62\xa6\x22\xc3\x66\x1a\x0c\x47\xc7\x82\x2b\x5f\x9b\x93\x72\x5b\x4e\xf3\x92\x26\x2e\x41\xd6\x0d\x96\x89\x04\xfd\xa0\x71\xee\xf5\x55\x9b\x7a\x04\xe9\x1c\xe2\x18\x62\x1f\xef\xbe\x26\x0d\x87\x7e\x87\xc0\xd1\x25\x13\xf8\x63\xf1\x54\x24\x49\xfb\x99\xde\x6a\x58\xe9\x63\x56\xf1\x00\xe8\x1d\x67\xd2\x21\x66\x9e\x78\x80\x32\x55\x50\x64\xe9\x88\x46\x24\x33\x0a\x4b\x01\xf7\x39\xe8\x2b\x00\x4e\xa2\x15\x44\x17\xaa\x8c\xb1\xd3\x86\x0e\x37\x36\xda\xc5\x50\xb5\x0b\x88\x55\x0e\x5a\x08\xa6\x66\x43\x5d\x92\x3b\x10\x66\xd4\x42\x0e\x57\x9b\x31\x59\xdb\x07\x17\xbd\xa4\x2c\xa1\xf3\xa4\x43\x61\x3e\x59\x94\x6f\x4e\xaa\xf3\x67\x5e\x3a\xca\xf2\x24\x71\x5e\x69\x8c\x52\xd1\x92\x2e\x16\x2c\xc2\x20\x45\x8c\xd2\x29\xa3\x7a\x77\x2e\x7d\x54\x64\x8e\xd2\x54\xe7\x5b\x5b\xdf\x82\x37\x6d\xf8\x62\xb4\x50\xd6\x68\x6f\xed\x83\x21\xef\xeb\x1a\xac\x99\x1d\x58\x15\xbd\xe6\xd0\x9a\x91\xb7\x42\xbb\x68\xb7\x37\xa0\x94\x8b\xb4\x23\xef\x81\x2a\xc1\x2b\x47\x01\x6a\x1e\x92\x2d\x19\xa7\xbb\xab\x14\xd8\xf5\x57\x2d\xe6\x85\xa2\x49\xd7\x58\xbc\x98\x2d\x25\xd5\x05\x07\x2f\x97\xe8\x0e\x4d\x27\x16\x2c\x72\x8c\x78\x23\x47\x7c\x8d\x68\xe3\x42\xe0\x76\xdb\x54\x19\xd7\x52\xc4\x79\x04\xae\x4c\x73\xae\xaa\x1d\xdf\xea\x39\x50\x0f\xff\xf2\x63\x94\xe9\x04\x31\x68\xca\x9c\xbf\x5a\x70\x20\x54\x65\x46\xcb\xf7\xd8\x9e\x4b\x89\x27\xaa\xdf\x07\x3c\xec\x8e\x4e\x4f\xc8\x7b\x68\x43\xba\x4e\xbe\xd3\x15\xdf\x37\x25\x09\x55\xfa\x5c\x52\xae\x70\xc2\xe7\x2c\x6d\x32\x51\x18\xcd\x0a\x31\xa0\xf1\xb9\x44\xac\x68\x7c\x6c\x51\xa0\xf1\x71\x03\xf7\xee\xc3\x39\xb7\xd7\x70\x1b\xd6\xfe\xed\x5e\xcb\xf4\x48\x23\x97\x78\x5b\x4f\x81\x51\x86\x93\xb8\xb7\xc1\x95\xb2\x36\x5b\xed\x50\x1f\x73\x5d\x50\xdd\x6e\x63\x20\x18\x68\x53\x6a\xe9\x57\xde\x37\x98\xf3\x18\x64\x82\x3e\xb7\x72\xbc\x68\x65\x84\xe4\x78\xe6\x94\x7f\x5a\xd8\x71\x30\xcc\xd5\x79\x16\x4b\xa7\x81\x0d\x98\xf3\x3d\x1a\xec\x72\x35\xc4\x6d\x37\xc8\x64\xa3\x08\x32\xdd\xce\x65\x7b\xd9\xe4\xbc\x61\xc5\x08\x09\x53\xdd\x8c\x55\x0e\xa7\x6e\x63\xbf\x5c\x57\x36\x26\x65\x95\xa7\xd4\x30\x28\x1a\x63\x80\x5c\xf1\xcc\xea\x48\x56\xa7\xb1\x14\x69\x1d\x77\xd6\xf1\xe2\xb7\xaf\x73\x87\x1c\xd3\xa2\x45\xaa\x7d\x87\xb5\xa4\x17\xcc\x52\x7a\xfd\x1a\xf8\x52\xaf\x0e\xc9\x9f\xbe\xfa\x9f\x5f\xff\xa5\xe1\x45\x31\xb7\x31\x6d\xaf\x80\x3b\x2b\xd1\x6d\x40\x6f\xbb\xd7\x4d\x33\xe7\xcc\x87\x62\xcf\x96\xe5\x3b\x85\x43\xa1\xc4\x4a\x74\x42\x83\x76\x7c\x3b\xcf\xda\xc1\xf9\x3d\x26\x13\x28\x4d\x79\x04\x13\x23\x0e\xec\x1c\xc6\xa8\xb2\x96\x47\x26\x6b\xf2\xfc\xab\x09\x86\x78\xe2\xa4\x2c\x75\xcd\x4a\xb6\xfe\xe1\xfa\xe3\x6c\xc7\x62\x98\x22\x7f\x9d\x6c\xcc\x94\x29\x62\xf6\x5e\x2c\x10\x4d\x5b\x26\x89\x6a\x9f\x04\xcb\xb3\xbd\x11\x60\x9b\x67\x43\xb1\x92\x2e\x4c\xe8\xb2\x4d\xf6\xb3\x4b\xa6\x8c\xb3\x34\x4f\x0f\xc9\xb3\x86\x57\x2c\x47\xbe\x0d\xf4\xb0\x3d\x95\xe7\x19\x35\x6c\x79\x29\x69\x9a\x62\xc6\x15\x8b\x81\x6b\xb6\x60\x18\xf3\x52\x90\x18\xea\xf1\xf6\x43\x1f\xa7\x55\x00\x1f\x43\xb8\x0c\x1b\xed\x45\x74\xa7\xf6\x1c\x97\x28\x94\x3a\xaf\x5d\x54\xe5\xbc\xeb\x0c\x2c\x55\x5a\xb5\x81\xc0\x75\x66\x25\xb9\x8a\xff\x28\x05\xca\x19\x5f\xaa\x32\xda\x12\xf9\x5f\x9b\x79\xdc\x7c\x76\xb5\x02\x17\xdd\x00\x55\xef\xa0\x2f\x15\x64\x44\xc9\x32\xc8\x18\x03\xcf\xdb\xd9\xc7\xb6\x2d\xd6\x48\x5d\x29\x24\xc7\x54\x41\x0f\xbb\x6b\x25\x16\xd3\x5f\xab\x50\x24\x07\xdf\x1a\x03\x7a\xfe\xec\xab\x56\xbc\x2b\xde\x6b\x7c\xa9\x8c\xd2\xfc\x70\x34\xfd\x17\x9d\xfe\xfa\x71\xcf\xfd\xe3\xd9\xf4\xaf\xff\x77\x72\xf8\xf1\x69\xe5\xcf\x8f\xcd\xc1\x95\xbb\x25\xe7\xb2\xd5\x70\xd8\x9d\xb5\x5e\xac\xf2\xf8\x31\xf1\xc1\x5c\xe7\x32\x87\x09\xf9\x9e\x26\x0a\x26\xe4\x47\x8e\xe7\xe4\x0d\x81\xd6\x1e\x5d\x61\x24\x9b\xc7\x66\xd4\xc7\xed\xaf\xe0\x94\xda\xdf\x71\xd3\x6d\x53\x41\xfb\x01\xc9\x5b\x16\x2a\x8c\x90\x57\x30\xd0\x66\x77\x2d\x84\x98\xc1\x35\x4d\xb3\x04\x66\x91\x48\x0f\x8a\xe7\xb7\x78\xc8\x3d\xff\xba\x07\xf6\xec\x7d\xb0\x38\xf2\x71\xef\xc3\xd4\xfd\xeb\xa9\xff\x69\xff\xbb\xbd\x7f\xcf\x5a\x9f\xef\x3f\x3d\xc0\xd0\xde\x02\xd5\x3e\x7e\x98\x96\x68\x37\xfb\xf8\x74\xff\xbb\xca\xb3\xfd\x5d\x48\xb8\x9d\x44\x95\xd2\x6c\x7a\xd1\x58\x31\xae\x51\x94\x6d\xca\xc6\x4a\x69\xb6\x4b\xc5\x5b\xb0\xe5\x1b\x9a\xbd\x87\x05\x48\xe0\x51\xb7\x09\xe9\x78\xeb\x13\xb2\x17\x9b\x23\x1c\x73\xf0\xf6\xbd\xf0\x2a\x8b\xa7\xee\x20\x2b\xbe\xf3\xdc\xbd\xb8\xf0\x68\x33\x26\xa7\x16\xe9\x36\x29\x45\xc9\x1d\xca\x7a\xd9\xeb\xed\xbb\x80\x38\x6d\x10\x27\xa7\x65\xd4\xdd\x08\x43\x8f\x39\x8e\xac\xc1\xab\x4d\x83\xe8\x81\xe4\xfd\x64\x5f\xde\x12\xfa\xdb\x39\x48\xb1\xce\xd1\x3d\xf8\x7b\x28\x7e\xb2\x76\x97\xd1\xfd\xe4\xac\x51\xb9\xec\x2b\x5d\xfc\x78\xf2\xc2\xe2\x0c\x32\x26\x94\x28\x57\x22\x89\x15\xc9\x39\xfb\x25\x07\x72\xf2\xa2\xa8\x3e\xc4\x78\x94\xe4\x78\x6f\xcf\x8f\x3f\x9e\xbc\x50\x33\x42\xfe\x01\x11\x35\x7a\xfd\x55\x4b\x08\x27\x96\xda\x7b\xf7\xf6\xf5\xff\x46\x0b\x00\x7e\xe9\xae\xcd\x70\x85\x45\x12\x46\xad\x45\xca\x1e\xbe\xa6\x57\x1b\xdd\x88\x33\x8a\x68\xd6\x6c\x63\x20\xce\x6e\xc7\x6d\x90\xee\x0a\x92\x4c\x61\xf2\x11\x51\xb9\x74\xab\x31\x03\xda\x2c\x08\x4c\x43\x77\x8e\x73\x9f\x4f\x85\xf9\x6a\xa3\xe2\xa2\x23\xc1\x39\x44\x18\x99\x60\x84\xd0\x3e\x1c\xa2\xfa\xfe\xa6\x80\xbf\x53\xa2\xdd\x0c\x70\x2e\xc7\xf4\xfc\xc3\x1b\x48\x6f\x9f\xd0\x0d\x45\xbe\x73\xa2\x3c\xce\x78\x04\x55\x3b\xdf\xe2\x68\xfc\x36\x73\x70\x70\xbb\x73\x96\xb0\xb5\xde\x51\x23\x5a\xa3\x25\x3a\x83\xdf\x77\xd8\xae\xeb\x61\x99\x5b\x96\x8d\x8d\xdc\x56\x34\xa0\x16\xfe\xe4\x15\x55\x64\x0e\xc0\xd1\x9e\x6b\xed\x76\xc0\x1d\xce\x43\x69\x6d\xcd\xb3\xa9\x16\xd3\x06\xfd\xaa\x03\x72\xdd\x50\x6b\x31\x1f\xd4\xd6\x76\x34\xd8\x20\x70\xb5\x5a\xef\x82\x81\x2a\x6f\xed\xf1\xd2\xd3\x60\x2f\x75\xb3\x56\x56\x9b\xb3\x33\xb2\x16\xc7\x36\xfe\xb5\x3d\x25\xa3\x6e\xd7\x0c\x4f\x5a\xa0\x7b\xb1\x46\xcd\x23\xe6\x68\xb7\xf9\x0c\xe4\x25\xeb\x21\x7c\xbc\xaf\xbf\xdf\x8b\xb5\xbc\x7a\x7f\x7a\x8c\xf9\x79\xe6\x03\xef\x9f\x40\xec\xaf\x4a\x15\xb7\xef\xd1\x89\x6c\xa8\xd1\xd1\xdd\x13\x74\x26\xe4\xf8\x41\x32\x29\xb4\x88\x44\x87\xd3\xa9\x35\x65\x06\x41\xdb\x96\x63\x34\xa4\x8f\xa1\xf2\x86\xe5\x63\xb5\xac\x34\xa5\x85\x34\xe4\x5a\xfb\x2d\x9f\x17\x77\x62\x95\xbd\x3b\xad\x8f\xfc\xe7\xbf\x8f\xfe\x5f\x00\x00\x00\xff\xff\xea\x09\x27\x91\x70\x56\x01\x00") func operatorsCoreosCom_catalogsourcesYamlBytes() ([]byte, error) { return bindataRead( @@ -105,7 +105,7 @@ func operatorsCoreosCom_catalogsourcesYaml() (*asset, error) { return a, nil } -var _operatorsCoreosCom_clusterserviceversionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\x23\xb9\x95\x27\x0c\xff\xef\x4f\x81\x90\x7b\x5e\x49\x63\x91\xaa\xb2\xc7\x7e\x3d\xb5\xb3\xe3\xd0\x56\x55\x77\xeb\xe9\x2e\x95\x42\x92\xdb\x8f\xa3\xdd\x6b\x83\x99\x87\x24\x46\x99\x40\x0e\x80\xa4\x8a\xde\xde\xef\xfe\x04\x0e\x80\xbc\xf0\x22\x91\x09\x48\xcc\xaa\x4e\x38\xc2\x5d\x22\x93\xc0\x49\x5c\x0e\xce\xf5\x77\x68\xc1\x7e\x00\xa9\x98\xe0\x6f\x08\x2d\x18\x7c\xd2\xc0\xcd\x5f\x6a\x7c\xff\x47\x35\x66\xe2\x7c\xf1\xfa\x57\xf7\x8c\xa7\x6f\xc8\xdb\x52\x69\x91\xdf\x80\x12\xa5\x4c\xe0\x1d\x4c\x19\x67\x9a\x09\xfe\xab\x1c\x34\x4d\xa9\xa6\x6f\x7e\x45\x08\xe5\x5c\x68\x6a\x3e\x56\xe6\x4f\x42\x12\xc1\xb5\x14\x59\x06\x72\x34\x03\x3e\xbe\x2f\x27\x30\x29\x59\x96\x82\xc4\xce\xfd\xd0\x8b\x57\xe3\xd7\x7f\x1c\xbf\xfa\x15\x21\x9c\xe6\xf0\x86\x24\x59\xa9\x34\x48\x05\x72\xc1\x12\x70\x8f\xa9\xb1\x28\x40\x52\x2d\xa4\x1a\x27\x42\x82\x30\xff\xc9\x7f\xa5\x0a\x48\xcc\x60\x33\x29\xca\xe2\x0d\xd9\xf8\x8c\xed\xd7\xd3\x44\x35\xcc\x84\x64\xfe\x6f\x42\x46\x44\x64\x39\xfe\xdb\xbd\xab\x1d\xfe\xd6\x0e\xef\x26\x08\xbf\xcf\x98\xd2\xdf\x6d\x7f\xe6\x7b\xa6\x34\x3e\x57\x64\xa5\xa4\xd9\xb6\x17\xc1\x47\xd4\x5c\x48\x7d\x55\x93\x65\xc8\x48\xd4\xa2\xf9\x6f\xf7\x20\xe3\xb3\x32\xa3\x72\x4b\x6f\xbf\x22\x44\x25\xa2\x80\x37\x04\x3b\x2b\x68\x02\xe9\xaf\x08\xf1\x63\xd9\xce\x47\x84\xa6\x29\xae\x17\xcd\xae\x25\xe3\x1a\xe4\x5b\x91\x95\x39\xaf\x06\x37\xcf\xa4\xa0\x12\xc9\x0a\x8d\x6b\x72\x37\x07\x9c\x35\x22\xa6\x44\xcf\x81\xbc\xbd\xfd\xa1\x7a\x94\x90\xff\x52\x82\x5f\x53\x3d\x7f\x43\xc6\x66\x01\xc6\x29\x53\x45\x46\x97\x86\x84\xc6\x53\x76\x35\xdf\xd9\xef\x1a\x9f\xeb\xa5\xa1\x57\x69\xc9\xf8\xec\xb1\xf1\xdd\x4b\xec\x46\xc2\xa2\xb1\x4e\xcd\xe1\x7f\x58\xfb\x7c\xd7\xe1\x25\x64\x40\x95\x9b\x01\xa6\xf6\x23\xc7\xfd\x78\x8d\x9c\x9b\xb5\xcf\x77\x25\xc7\xaf\x06\x35\x23\x13\x3d\xa7\xda\x92\x25\xb8\x21\xb5\xc8\x68\x02\xea\x51\x82\xd6\x1e\xf1\x14\xad\x7d\xb1\x85\xa4\x66\x97\x9a\xea\x52\x8d\x8b\xf9\xa6\x77\xbc\x9e\x3f\xf9\x86\xf6\xc1\xc5\x6b\x9a\x15\x73\xfa\xda\x7d\xa8\x92\x39\xe4\xb4\xde\x92\xa2\x00\x7e\x71\x7d\xf9\xc3\xef\x6e\x57\xbe\x20\xed\xd9\xd9\x78\x18\x09\x53\x66\xaa\x90\x6f\x11\xcf\xb8\x70\xed\x96\x05\x90\x7f\x6c\xfc\xcd\x6d\x01\xc9\x3f\xc6\x6b\x94\x8b\xc9\x7f\x41\xa2\x1b\x1f\x4b\xf8\xef\x92\x49\x48\x9b\x14\x99\x09\xf2\xcc\x70\xe5\x63\x33\xff\x8d\x8f\x0a\x69\xb8\x94\x6e\x70\x20\xdb\x1a\xdc\xb8\xf5\xf9\xca\xdb\xfe\x3c\x5a\xf9\x96\x10\x33\x49\xee\xad\x53\xc3\x9a\x41\xe1\x0e\x75\x1b\x16\x52\x37\xb3\xd5\x4e\x96\x50\x48\x50\xc0\x2d\xb3\xc6\x4d\xc5\xdd\x5b\x8e\xd7\x3a\x37\x53\x04\x52\x19\x8e\x55\x66\xa9\xe1\xe9\x0b\x90\x9a\x48\x48\xc4\x8c\xb3\x7f\x56\xbd\x2b\xa2\x05\x0e\x9b\x51\x0d\x4a\x13\x64\x33\x9c\x66\x64\x41\xb3\x12\xce\x08\xe5\xe9\x5a\xdf\x39\x5d\x12\x09\x66\x5c\x52\xf2\x46\x8f\xf8\x13\xb5\x4e\xcb\x07\x21\x81\x30\x3e\x15\x6f\xc8\x5c\xeb\x42\xbd\x39\x3f\x9f\x31\xed\x6f\xab\x44\xe4\x79\xc9\x99\x5e\x9e\xe3\xc5\xc3\x26\xa5\xb9\x09\xce\x53\x58\x40\x76\xae\xd8\x6c\x44\x65\x32\x67\x1a\x12\x5d\x4a\x38\xa7\x05\x1b\xe1\xcb\x70\xbc\xb1\xc6\x79\xfa\x6b\xe9\xb6\x89\x5a\x19\x78\xe3\x79\x20\xfe\xc2\xd8\x73\xb1\xcc\x05\x62\x37\xa7\xed\xd0\xbe\x6c\xbd\x26\xe6\x23\x33\x8d\x37\xef\x6f\xef\x88\xa7\xc8\x1d\x75\x5c\xa2\xfa\xd1\x0d\x33\xe4\x57\xcb\xcc\x2c\xe3\x53\x90\xf6\x97\x53\x29\x72\xec\x15\x78\x5a\x08\xc6\x35\xfe\x91\x64\x0c\xb8\x26\xaa\x9c\xe4\x4c\x2b\xdc\xd6\xa0\xb4\x59\xc8\xf5\x8e\xdf\xe2\xed\x4e\x26\x40\xca\x22\xa5\x1a\xd2\xf5\x47\x2e\x39\x79\x4b\x73\xc8\xde\x52\x05\x2f\xbe\x76\x66\x8d\xd4\xc8\x2c\xc8\xce\xab\xd7\x94\x5d\xd6\x7f\xb0\x76\xea\x09\xf1\xc2\xc6\x3e\xcb\xbd\x95\xd1\x90\x14\x92\x8c\x4a\x2b\x2f\x11\x0d\x59\x46\x3e\x7e\xff\x81\xcc\xc5\x83\x39\x48\x8c\x2b\x4d\xb3\x0c\x0f\xa6\x93\x69\xd6\xba\xc6\x3b\x20\xa1\x9c\xe4\x94\xd3\x19\x10\x5a\x14\x8a\x4c\x85\x24\x94\xcc\xd8\x02\xb8\x67\x00\xab\x6b\xb1\xf5\xfd\xb6\x71\x36\x62\x6f\xa4\x8d\x97\xbc\xff\xd6\x11\xbc\xf2\xcd\x36\x5e\x67\xda\x9a\xb8\xb8\xdf\xc4\x9a\x76\x51\x77\x81\x47\x8a\x93\x92\x2b\x2d\x4b\xdc\x25\x29\xb9\x87\xa5\x3b\x5d\x39\x2d\x88\xd2\xc2\x7c\xf8\xc0\xf4\x9c\xd0\xe6\xc9\xa2\x1a\x8f\xcb\x64\xfd\xb5\x4c\x53\xa0\xc9\x64\x49\x8c\x70\x8c\xec\x4c\x0b\x91\x21\xaf\xc3\xfe\x0c\x5b\x23\x12\xb4\x64\xb0\x00\x42\xe5\x84\x69\x49\xe5\xb2\xda\x5b\xeb\xe7\xe0\xd1\xf9\xc7\x79\x69\xc8\x6a\xdb\x67\x8f\x3c\xb6\xb3\x89\xbd\x4e\x9c\xa8\x98\x56\xe2\x7a\xf7\x89\xbe\xbe\x74\x3b\xb8\x96\xfd\x95\xdb\xc1\xa0\x88\xd9\xa9\x4e\x2c\xaa\x94\x08\x24\xc0\x6d\xcd\x94\x08\x59\xed\x2d\x32\x59\x6e\x1c\xa3\xb1\xd5\xc9\x04\x0c\x1b\x94\x94\x9b\xa9\xdf\x78\x84\x3a\x4c\xec\x63\x9b\xd1\x34\xf1\xc0\x37\xed\xfc\x66\xdf\x54\x4a\xba\x99\x7a\x42\x98\x86\x7c\x4b\xcf\x64\x75\x9a\x9b\xf3\x59\x7d\x6c\x08\x5c\xb0\x14\xcc\xc4\x6a\xca\xec\x2e\x33\x3c\x81\x4e\x44\xa9\xed\x7c\xba\x47\x52\xb2\x60\x94\xd0\xd9\x4c\xc2\x0c\xf7\xff\xd6\x61\x9f\x98\x13\xdb\xb6\x1f\xfb\xba\x8d\xac\x8e\xf5\xe8\x13\x86\xfd\x3e\xfa\x00\xdf\xc4\x3c\x9a\x0f\xac\x8b\xf1\xed\xf6\xd4\x1a\xda\x46\x13\x33\x27\x7e\x6a\x85\x7c\xf4\xe1\x5d\xd6\xd6\xb6\x27\x56\xd8\xb6\xf6\x3a\xaf\x10\xe2\xbe\x9d\x98\x33\x53\x5f\x00\x86\x73\xe0\x83\x35\x4b\x9f\x00\x29\x40\x4e\x85\xcc\xcd\xe1\xe1\x84\x92\xc4\x8a\xb2\x15\xdf\x42\x86\xcb\x93\xc7\xa6\x93\xec\xba\xfe\xb6\xed\xb2\x0b\x6c\x1b\x91\x82\xea\xf9\x13\x8f\xed\xb6\x54\xb6\x35\x27\xed\xc9\x87\x9f\x60\x7c\x6b\x7d\xd7\xf7\x56\xf4\xbe\xcd\x34\x44\xef\x14\xaf\xac\x5d\x7a\xdd\x85\x73\xaf\xb6\x1b\xfa\xf0\x01\x94\x32\xf2\x02\x0a\xa1\x92\x3e\x10\xe0\x89\x30\x3c\xe5\xff\xb9\xfd\x78\x65\x47\xdf\xc4\x5d\xd7\xdb\xa5\x26\x2c\x2f\x32\xc8\x8d\x2c\x4a\x7e\xfc\x40\xa5\x9a\xd3\x0c\xe4\x4f\x78\x2b\xfe\xf8\x67\x9e\xb7\x3f\x49\xe8\xf6\x83\xdd\x6c\x46\xc8\x54\x90\x1a\xf6\x97\x42\x46\x97\x96\xb0\x14\x12\x91\x9a\x6b\x41\x48\x52\x18\x65\x21\x2f\x4a\x0d\x84\xda\x6f\xf1\x1d\x18\x9f\xed\x42\xf9\x5e\xab\x41\x8c\x48\x95\x53\xfd\x86\x4c\x96\xfa\xa9\xd3\x46\xc8\xa7\x51\xba\x2b\xdb\x69\x12\xf3\x34\xf3\xb1\x6d\x27\x16\xd4\xec\xf8\xc9\xb7\x34\xf2\x36\x65\x1c\xe4\xb5\x90\x7a\x17\x3e\x69\x14\xbb\x19\xac\x8b\xa3\xcd\xe6\xa7\x8c\x71\xfd\xbb\xdf\x3e\xf2\x64\x0a\x45\x26\x96\x66\xff\x3c\x7d\x3c\x77\x7c\x9f\x9d\x59\xc9\xae\xfd\xed\xca\x3e\x76\xec\xcf\x5a\x2a\x63\xf4\xb4\x49\xfb\xec\xd4\x11\x8f\xf5\x6e\x95\x02\x7d\xb0\xfb\xf6\xfa\xd2\xdb\x7a\x6e\x60\x0a\x12\x78\xe2\xf9\x5c\xf5\xa7\x16\x84\x92\xef\xca\x09\x48\x0e\x1a\x54\x43\x13\x58\x16\xe0\x0d\x6b\x60\x7f\x20\x41\x92\x52\xb3\x8c\xfd\x73\x93\x39\x62\xd3\x5b\x45\xbf\x69\x9f\x90\xa9\xfc\x63\x4f\x48\x56\xfe\xb1\xa7\xe4\x2b\xdb\xf6\xb9\xba\x9f\xde\x85\xb6\xb5\xd6\x09\x8d\x20\x4e\x63\xa8\x56\x26\x6d\x2f\x45\x74\x4e\xfe\xf4\x36\xdf\x40\xe9\x35\xda\xf2\x5b\xb6\xf0\x6d\x04\x93\x93\x6d\x6e\x92\xb1\x51\xf8\xc7\x68\xa1\xff\xf1\xa7\xb1\xed\xf2\x74\x4c\xde\xe7\x85\x5e\x7a\x33\x10\x7b\xa2\x73\xa6\x08\x17\x7a\x5d\x10\x8c\x3e\x4d\x8b\xcd\x46\xc8\x27\x67\xea\xe2\xfa\xd2\x5b\xdb\x5f\x70\x69\x55\x01\x49\x0f\x04\xfd\xdb\x16\x19\x2d\x31\x7f\xca\x20\x4b\x09\x33\x32\xbc\x21\x96\x4c\x32\x91\xdc\x3b\x4b\xfe\xcd\x3b\xa2\x84\xe5\x39\x46\xd1\x33\x92\x7f\x22\xb8\x2a\x73\x20\xec\x29\x26\x32\x48\xf6\x83\x64\xdf\x6c\x83\x64\x3f\x48\xf6\xad\x66\x9d\x74\x7d\x60\x8e\x2b\x84\x6c\x65\x8f\xf8\xdc\xc0\x20\x1f\x6b\x03\x83\xc4\x36\x30\xc8\x81\x41\x3e\xd5\xf1\x93\x6f\xb9\x93\xa4\xfb\x64\x5f\x4f\xf1\x8e\xc1\x73\x30\x78\x0e\x06\xcf\x81\x6b\xc3\xf5\xe9\xda\x70\x7d\x0e\xd7\x67\xbb\x7d\x76\xd7\xe7\xe0\x39\x18\x3c\x07\x83\xe7\x60\xf0\x1c\x34\xdb\xe0\x39\x18\x3c\x07\x83\xe7\x60\xf0\x1c\x6c\x69\x83\x64\xdf\xb1\xd3\x41\xb2\x1f\x24\xfb\x6d\x6d\xf0\x1c\x0c\x9e\x83\x81\x41\x0e\x0c\x72\x60\x90\x5b\x5a\x1f\x3d\x07\x49\x06\x94\x6f\x56\xe7\x57\x92\x1b\xf1\x39\x14\x00\xd9\x94\xb9\xd4\x3e\xf7\x6b\x32\x81\x39\x5d\x30\x51\x4a\xf2\x30\x07\xee\xf3\x52\xc9\x0c\xb4\x32\xbb\x00\x34\x6c\xd2\x00\x9f\x60\x6f\x8f\xb3\xb4\x11\x01\x4e\x27\xd9\xc6\x8e\x9f\xe2\x5e\xee\x97\x8f\x7b\x4a\x26\x42\x98\xb7\x5b\x9f\x31\xd4\x5e\xbc\x36\x10\x21\xa9\x65\x9b\xce\xb5\x39\xb1\xe5\xed\xcd\xbb\x67\x4d\x67\xd9\xd8\xc9\x65\x35\x36\x41\x17\x0e\xa6\xfd\x99\x2b\xcf\x7c\xfa\xf1\x81\x43\x8a\x49\xe9\x67\x84\x69\xf3\x80\x61\x2c\x2c\x61\x3a\x5b\x56\xe4\x7d\xde\x79\x32\x6f\x6f\xde\xed\xee\xe6\xf2\xab\xb4\xb5\xeb\x88\x1e\xad\xc1\x5f\x35\xf8\xab\xaa\x36\x08\x6d\x1d\x3b\x1d\x84\xb6\x41\x68\xdb\xd6\xe2\x0b\x6d\x7d\xf7\xef\x0c\x5e\x19\x32\x78\x65\xfc\x63\x83\x57\xe6\xc9\xc7\x07\xaf\xcc\xe0\x95\x19\xbc\x32\x8f\xb7\x41\x7e\x75\x6d\x90\x5f\x07\xf9\xb5\xdd\x3e\x3b\xf9\x75\xf0\xca\x0c\x0c\x72\x60\x90\x75\x1b\x18\xe4\xc0\x20\x5b\xed\x73\xcc\xe7\x18\x2c\xdc\x83\x85\x7b\xb0\x70\x0f\x17\xe0\x70\x01\x0e\x17\xe0\x53\x1d\x0f\x16\x6e\xdf\x06\x0b\xf7\x60\xe1\x6e\xb5\xc1\xc2\x3d\x58\xb8\x07\x0b\xf7\x60\xe1\xde\xd2\x06\xf9\xb5\x63\xa7\x83\xfc\x3a\xc8\xaf\xdb\xda\x60\xe1\x1e\x2c\xdc\x03\x83\x1c\x18\xe4\xc0\x20\xb7\xb4\x3e\x5a\xb8\x9f\x38\xbc\xbb\xec\xd2\xa6\xbd\xda\x89\xcd\x3e\xd2\x7d\x4c\xde\x52\x4e\x18\x4f\xb2\x32\x05\xfc\x66\x0a\x54\x97\x12\xd4\x19\xc9\x58\xce\x7c\xb1\x0e\x21\xcd\xa6\x19\x25\x54\x81\x72\x7d\x6c\x1c\xaa\xea\x77\xc3\xb7\x8f\xbf\xe6\xe3\x7c\xe4\xd1\x5a\x67\x55\xd8\x3e\xe3\xbe\x1f\xb7\xad\xf6\x26\x83\x25\x3b\x4c\xb3\x19\xdf\x3c\x88\xb5\x5b\x6c\xa1\x9f\x27\x5f\x7b\xdb\x16\x7c\x64\xcb\x3d\x79\xb9\x3c\x75\xa5\x8c\xc8\x84\x2a\xf8\xc3\xbf\xad\x95\xb8\x6a\x3e\x92\x43\xca\xa8\x19\x6a\xe3\x13\x4f\x5f\x33\xf5\x10\xdb\x37\xf9\x0e\x87\xa5\x22\xa3\x63\x2f\xae\x9c\x4d\xd7\x23\x62\xf6\x5d\x7a\x69\xfb\xb8\xd5\x92\x6a\x98\x2d\x1b\x75\x9b\x70\x9b\xd5\x42\x03\xdf\x52\xc2\xcc\x6b\xa0\x1b\x87\x78\x98\x83\xb4\x47\xcc\xd7\x0a\x52\x7e\x20\xa6\xaa\x74\xa1\x2e\xf9\x1f\x4f\xe5\xff\xf8\x71\x36\x7c\xfd\xd4\xfa\x6e\xaa\xa0\xe4\xdb\xae\x17\xa4\x9f\xcf\x77\xd6\x43\xf6\xae\x02\x82\x59\x9d\xe0\x82\x4a\x73\x31\x79\x4f\x1a\x8a\x67\xf5\xd3\x5b\xfb\x5f\x59\xb6\x6d\x77\xd4\x0e\xb2\xda\xd3\x32\xda\xa8\x81\x63\xb3\xcd\xab\xb7\x8b\x68\xe6\x6a\x43\x5e\x83\xcc\x99\x52\xdb\x92\xa2\xda\xa4\x3f\x75\x8b\xed\x70\x7b\xad\xc8\xcc\x7e\x5d\xfc\x1b\x35\xc8\xa9\x04\x68\x6b\x65\x99\xd0\x84\xc8\x32\x33\xe2\x34\x4f\x89\xab\x53\x44\x68\x92\x88\x92\x6b\xc2\x01\x52\x4c\xac\xda\xb8\xbd\x77\xb8\xfb\x76\x90\xa0\x77\x95\x9f\x47\x96\xce\x27\x9f\x72\xef\x70\x61\x5f\x61\x63\x91\xac\x66\xdb\x5d\xde\xc6\xe1\x9f\x16\x22\xf6\x91\x4c\x76\x96\x4b\xba\xc8\xac\xd7\x22\x63\xc9\xf2\xa6\xcc\x80\xcc\x45\x96\x2a\xac\xf9\x66\x2e\xcf\xca\x27\xda\xd4\xa5\x0a\x7c\x1a\x5f\xf2\x8c\x4c\x4a\x4d\x52\x01\xd6\x6c\xe8\xd0\xa5\x9a\x3f\xdf\x69\x7c\xeb\x29\x7f\x98\xdb\x62\x84\xa6\x63\x42\x8b\x22\xc3\xcc\x49\x61\x04\x8f\x87\x39\x4b\xe6\xb6\x24\x6c\x41\x13\xd8\xf4\xd8\xee\x72\xe9\x4e\xba\x1a\xd9\x4b\x5f\x23\xde\xec\x3d\x79\x6a\xd7\x91\x3d\x15\x37\x62\xcb\x82\x7d\x23\x45\x59\xec\xf8\x78\xb7\x3d\x40\x6c\xc9\x30\x3b\x90\xb9\x8e\xf4\x8a\x88\xe5\xbf\x74\x4e\x72\xbb\xd4\xca\x59\x60\x9d\x47\x66\x8c\xe9\x8f\x79\x99\x69\x56\x64\xf8\x13\x8b\x80\xa5\x08\x95\x50\x5f\x70\x67\x84\xf2\xa5\xf7\xb9\xbb\x12\x86\x90\x12\x3a\x33\x3d\x6a\x2c\x8f\x2a\xa6\x3b\x53\x6d\x6b\x24\x96\xb9\x91\xbf\x1a\x36\x60\x85\xea\x3e\x5f\xd6\x54\x90\x07\x96\x65\x46\xf9\xa1\x59\x26\x1e\x20\x1d\x93\xa3\xa3\xd5\x0b\x28\x11\xb2\x41\x37\xb2\xba\xa3\x7f\x6d\x3d\x65\xf8\x5a\xfd\x62\xbb\x29\x72\xfb\x6a\x21\x64\x3f\x4d\x84\xec\xaf\x73\x11\x54\xa5\xee\x2b\x07\xd5\x28\x63\x4a\x8f\x1c\x95\x5a\xe4\x2c\xd9\xa9\x13\x2e\xb8\x77\x44\xfc\xf9\xe6\xfb\x67\xdf\xa0\x57\xed\xe1\x5c\x4d\x4e\xd0\x66\x8f\x16\x54\x6a\x46\x33\x52\xca\x4c\xd9\x3d\x4a\x8d\xc2\x22\x7d\x15\xd4\x39\xc5\x38\x8f\x04\x14\xb2\x0b\x42\xfe\xd5\xee\x4a\xb7\x19\x2c\x2b\x13\x3c\x5b\x12\x6a\xb7\xc2\xb4\xcc\xb2\x33\x32\x65\x9c\x9a\x8b\x0c\x0a\x9f\xc3\xbb\x83\x69\xa6\x6e\xb7\x8c\x27\x60\xa6\x69\x54\xf9\x26\x90\x72\x33\xb2\x61\x99\x15\x4f\x4b\xcf\x5c\xd9\x4f\x6b\xa9\x52\x8e\x14\xc3\xdf\x12\x3a\xc9\x00\x35\x0d\x27\x73\xde\x88\x0c\x5d\x8a\x95\xdf\x03\x6b\x85\xd2\xe6\xd7\xff\x8b\xf1\x5d\xb5\x75\xdb\x6e\xf0\x6a\x4f\x28\x27\xc0\xf4\x1c\x24\x0e\xbd\x34\xfc\xd7\x6c\xf6\xfa\x50\x9d\xa8\x32\x99\x9b\x29\x3a\x2a\x44\xaa\x8e\x0c\x77\x3e\x52\x90\x48\xd0\xea\xe8\xd4\xfc\xb5\xfa\xae\x38\x5f\xcd\xdf\x9d\xd3\x82\x1d\x9d\x9e\x11\x9c\x70\x2c\x50\x2a\xf4\xfc\x17\x7e\x8e\xfc\x84\xb5\xca\x8b\x3f\xd5\x5a\xa7\xe8\xa6\xd9\x83\xab\xac\x29\x0a\x5b\x94\xd2\xdc\x9f\x1a\x30\xed\xdc\x9c\x14\xdc\x73\x0d\x1f\xf4\xca\x45\x4a\xc8\x05\x27\x60\xbd\x86\xa0\x49\x0e\x94\xbb\xa7\x61\x01\x72\xa9\xe7\xe8\x48\x54\x15\x17\x1d\x56\x6e\x87\x68\x84\xba\x6d\x5c\x35\xc7\xca\xfc\x0a\xd5\xc7\xcd\x16\x7f\x5e\x5d\xa1\xe3\x7f\x3d\x5e\xbd\x92\xea\x3b\xf8\x97\xbd\x1e\x28\x84\x75\x5a\x8b\x1f\xcc\x2f\xdb\xeb\x60\x3f\xb2\x97\x49\xc5\x0e\xbf\xff\xde\x16\x7b\x76\x13\xfe\x1d\xe3\xa9\xaa\x80\x55\x53\x7b\x4b\xb8\x45\xdb\xb8\x52\x48\xe1\x2f\x76\x95\xd6\x95\xae\x5d\x15\xa5\x27\x68\x6c\x68\xe5\x7d\x50\xa4\xb1\x5e\x74\x4b\x4a\x36\x6c\xf7\xcc\x7a\xe7\x8d\x58\x99\xd1\x09\x64\xca\x19\x10\xa1\x41\x3e\xb9\xf8\xfe\x43\x55\xba\x5d\x02\x7d\xc2\x28\xfe\x0c\xea\xf3\x0e\x61\x3e\x6b\x25\xf2\xd7\xdb\xee\x6a\x0e\x4e\xc5\x7e\x4e\x2c\x72\x0b\xda\x9e\xd5\x9c\x16\xe6\xa8\xda\x3e\xac\x73\x65\xc5\x71\xf2\x3d\xce\xf4\xd3\x27\x6e\x2f\xf5\x70\xf7\x92\xcf\x9b\x06\xd9\xe9\xbc\xed\x16\x4a\xb4\x47\x87\x8f\x99\xf2\xea\xd6\x9a\xe6\x95\x0d\xed\xf4\x42\xa7\xc9\x25\xb4\xe9\x50\x48\x41\x59\x70\x1d\x0b\x70\x24\xfd\xe7\x75\x17\x91\x97\x60\x1f\xfd\x7c\x44\x14\x64\x90\x6c\xaa\xc9\xbe\xe9\x61\x0d\x79\x91\x3d\x75\xf2\xc8\xde\xba\x7c\xce\xf8\x0d\xd0\x74\x79\x0b\x89\xe0\xe9\x8e\x5c\xba\x9b\xb2\xf4\x81\x71\x96\x97\x39\xe1\x65\x3e\x01\x5c\x0b\x65\x07\x45\x8e\x63\x0d\x2a\x94\x70\x78\xc8\x96\x8e\xcb\xa4\xa4\x10\xa9\x67\x3c\x13\xa3\xd5\xd3\x74\xd7\x4b\xe7\x81\xe9\x39\x96\xad\xe0\x4b\x33\x14\xd3\xf5\x8d\x28\x49\x22\xa9\x32\x42\xe3\x19\x0e\xcd\xb4\xb9\x45\x27\x80\x2e\x76\x96\x82\xd9\x32\x74\x41\x59\x66\xb4\x9c\x5d\xaf\xc5\x77\x30\xa5\x65\xa6\xd1\x3e\xf4\x8a\x9c\x18\xc2\xbd\x72\xbf\xa9\x5b\xa3\x77\x28\x21\xb8\xf9\xaf\x85\x5d\xc2\x97\x3b\xdd\xc3\xcf\xb7\x0b\x10\xba\x6f\xbb\x02\xa2\xfb\x56\xd0\x52\xed\x6a\x66\x6a\xed\x86\x4b\x9e\x9a\x43\xd8\x94\xe6\x1b\xf7\x08\x53\xae\xe7\xdd\x66\xf5\x71\x28\xaf\x0d\x54\x4b\x31\x93\xa0\xd4\x3b\xa0\x69\xc6\x38\xbc\xc0\xa6\xbe\x9b\x03\xc9\xe9\x27\xdc\xd8\x9a\xe5\x60\x84\xad\xe6\xb6\xa6\xcd\xd7\xd7\x82\xe4\xf4\x1e\x2a\x3a\xc9\x04\xa6\x42\xee\x10\xd2\xe1\x1b\x53\xcd\xcd\x64\x37\xed\x94\xb2\x0c\xd2\x31\x52\xd2\x18\xcb\x6c\x76\x29\xb2\x0c\xa4\xdd\x87\xe6\x6f\xc6\x4b\x20\x5a\xec\x38\x58\x21\x05\x9a\x26\xec\x00\x4d\x69\x06\xa5\x05\x6a\xba\xb4\x37\x0e\x1e\x36\x42\xc9\xf5\xca\xfc\xbf\xff\x94\xa0\x11\x7e\xc7\x01\x25\x50\x85\x9d\xd9\x63\xa3\x4a\x39\xa5\x89\x97\x5f\x5b\x2f\x67\x23\x66\xc6\xe4\x4a\x68\x17\xba\x5c\x4d\xa9\xf9\xf5\x8e\xe3\xa1\xa6\x0f\x04\x94\x66\x39\x72\x9b\xb4\xc4\x90\x54\x33\x18\xae\x25\xdd\xbc\x77\x5b\x67\xfd\x0f\xaf\x5e\xed\x28\x3a\x3f\xff\xa9\x95\x80\xb6\x99\x67\xdd\xf0\x57\x15\xf7\xf6\xb7\x6b\x21\x52\x65\xb6\x1f\x73\xaa\x4a\x21\xcc\x3b\x4a\x8c\xe5\x60\x4a\x33\x3e\x2b\x99\x9a\x93\x09\xe8\x07\x00\x4e\xe0\x93\x85\x97\xdb\x71\xbc\x7f\x82\x14\xb8\xdf\xcc\x6a\xd5\x0e\xc9\xd6\x1a\xbc\xee\xcf\x02\x2c\x98\x62\x82\x7f\xcb\x94\x16\x72\xf9\x3d\xcb\xd9\x13\x35\x2d\x7c\xeb\xce\x7d\xea\xeb\x54\x64\x29\xb9\xb1\x5b\xe0\x16\xec\xcc\x48\x40\xf7\x87\x16\xd6\x36\x42\x0c\x47\x98\xd0\xe4\x7e\xd7\x5b\x6d\xef\x55\xdd\xb6\x5e\x1d\x6e\xd1\xd7\xaf\xfa\xb2\xac\x5e\x50\x7b\xce\xa5\x44\x95\xa0\x1a\x09\xef\x0e\x7b\xb0\xde\x7f\xb2\xd3\xdd\x5a\xda\x87\xb9\x50\x80\x0f\x10\x2a\x9f\x96\x09\x9b\xaf\xe1\x7d\xa2\x4c\x55\x9c\x16\xe3\x55\x38\x28\x42\xa7\xd3\xf6\x13\xe9\x1e\x92\xb2\x6d\x97\x9a\xe4\xa5\xd2\x24\xa7\x3a\x99\x5b\xeb\xb4\x48\x2b\xe9\xf5\x58\x39\x2d\x73\x9f\xa5\xdd\xd9\x3d\xb6\xbf\x23\x8b\x58\x3a\xdf\x7f\x2a\xcc\xe5\xf1\x94\xcb\xbb\xdd\x5a\xeb\xbc\xda\x4d\xdb\x6a\x93\xb5\x17\xd7\xa9\x09\x78\x97\xda\x8b\xbb\xf9\x09\x5a\xe2\x2f\xae\xde\xed\x7e\x6a\xba\x18\x65\xf6\x36\xcb\x74\xf7\x91\x98\x76\xf1\xc8\x1c\x78\xa7\x89\xfb\xa6\xed\xcd\x43\xfd\x59\x9d\x11\x4a\xee\x61\x79\x66\x25\x8f\x06\x28\xaa\x79\x78\x2f\x42\x24\x64\x4e\x3c\x05\xd3\x23\x76\x68\xc7\xd8\x7d\xb6\x3b\x6c\x4c\x3f\xf8\x3e\xfe\x5b\xdf\x46\x86\xd0\x3d\x7f\xe1\x27\x68\x8f\x9f\xed\x7f\x76\x6c\xbb\x87\xe5\x7e\x3f\x58\xd9\x49\x66\x15\x9c\x16\x6f\xf7\x88\xf9\xa0\xd2\x1e\xaa\x6d\xb1\x9f\x63\xbd\xd9\x3a\x18\x14\x6d\xf3\x93\x18\xf4\x7a\x7b\x1e\x94\xe6\xb8\x2d\x3b\xad\x99\x96\x63\x65\xf7\xaf\xe1\x30\x73\x56\xd8\x9c\x3e\xe7\x6d\xdc\x7f\x13\xdb\xf6\x03\xcd\x58\x5a\x0d\x69\xb9\xcf\x25\x3f\x33\xb2\xb5\xf9\x0f\x5e\x3f\x56\xe2\x7f\x27\x40\x5d\x09\x8d\x9f\xbc\xd8\x1a\xd8\xd7\x7a\xe9\x15\xb0\xa3\x3a\xa7\x15\xb2\x55\xb4\x57\xd8\x94\x35\x37\xd3\x1e\x57\xb9\x8e\xf4\x54\xe4\x92\x13\x21\xdd\xd4\xed\x3d\xa8\xe9\xcc\x0d\x6c\x87\xc4\x8b\x74\x62\x9d\xb5\xe8\xfe\xda\x38\xa6\x5b\x21\x21\x5b\x0b\x14\x71\x78\x37\x34\xca\x82\xf6\x1b\x34\x57\x14\x19\x6a\x67\x4e\x69\xa2\x3e\xb4\x6a\x47\xaf\x48\xb3\xe5\x20\x67\xe8\xc5\x4e\x76\xf6\xba\x56\x44\x77\xb8\xf8\x6c\xdb\xfb\xfa\x6b\x0e\xd8\x61\x23\x47\xf1\x25\x45\xeb\x06\xe5\x15\x6b\x86\xee\x28\xf1\xec\x75\xaa\x1a\xc3\xb5\x6c\xe4\xff\xc7\x5c\xea\xb8\xe9\xfe\x2f\x29\x28\x93\x6a\x4c\x2e\x88\x62\x7c\x96\x41\xeb\x3b\x67\x02\x68\x74\xb3\xd7\xe0\x85\x19\xd4\xdc\xbd\x0b\x9a\x39\x43\x0c\xe5\x04\xac\x39\xde\xd0\xb1\x2a\xbe\x9d\x39\x09\xdb\x5c\x45\x55\xfc\xc3\xd1\x3d\x2c\x8f\xce\xb6\x86\x99\x6f\x6e\xcd\x93\x7a\x74\xc9\x8f\xac\x08\xb3\x76\xd6\x2a\x79\x07\x83\x2c\x8e\xf0\xbb\xa3\x98\xb2\xe1\x9e\xb2\x4a\x57\x67\x42\x7b\xd0\x3d\x8e\x49\x6b\x57\xe7\xb4\xd8\x77\x53\xfb\xc0\xce\x0e\x3a\xda\xdd\xaa\x71\xc9\x45\x40\x6b\x41\x4a\x05\x56\x8d\x46\x66\x47\xc0\xeb\x62\xa8\x79\xa1\xd5\x8b\xc3\x03\xea\x4e\xbd\x51\x68\x8c\x8a\xcf\xf8\xec\xcf\x45\x4a\xf5\x4e\x39\x45\xb6\x75\x3f\xdb\x37\x76\x40\x52\xe2\x88\x66\x27\x4f\xd9\x8c\x14\x54\xd2\x5c\x8d\xc9\xb5\x2b\x37\x80\xfb\x9a\x4d\x9b\xee\x1b\x37\xcf\x77\xcb\x02\xc8\xff\xdc\x7f\x40\xfb\x86\xcf\x7c\x0e\xba\x09\xc5\x39\xfd\x74\x5b\xca\xd9\x1e\xd3\x4f\x82\x85\x96\xa6\x25\xba\xb6\x09\xe1\x46\x6d\x82\x08\xa9\x64\x0e\x69\x99\x41\x4a\xe8\x44\x2c\xa0\xe5\x27\xab\x7e\xb6\xe7\xd0\x68\xa8\xd8\xf3\x37\x3f\x18\x0e\xe7\x89\x32\x42\xd6\x44\x89\xac\xd4\x95\x3d\xeb\x04\x3e\xbd\x21\xbf\xc7\xf8\x2d\x4a\x0a\x90\x09\x70\x4d\x67\xb0\x6a\x78\xb4\xcf\xbd\x7e\xf5\x2f\xa7\xfb\x12\x80\xe2\x8c\x19\xdf\x99\x81\x5f\x99\xdd\xf9\x81\x7e\xfa\x33\xaf\x9d\x34\x4c\x91\x1d\x8d\x50\x75\xbb\x58\x79\x11\x1c\x25\x4b\xca\x0c\x4d\xcc\x18\x17\xd7\x78\x9d\xc9\x92\x48\x51\x62\x64\x1c\x29\x8b\x7d\xc7\x6a\x9a\xcb\x7e\xfb\xfb\x7f\xd9\xf7\xe7\xef\x3f\xd1\xbc\xc8\xe0\x8d\xaf\xfb\x62\x6d\x7d\x46\x9f\xd0\x82\xfc\xee\xd5\xbf\x9c\xd9\x28\x01\x78\x68\xd8\x9e\xea\x7d\x44\xcd\x26\x2a\x0b\xc2\x72\x9b\x27\x03\xd9\x12\x3b\xda\x57\x82\x33\x57\x5c\x9b\x85\x28\x4d\xa5\x56\x67\x04\x03\xf4\x2a\x4d\x50\x0b\x4d\xb3\x15\x73\x27\x1a\x1a\xe1\xc1\x6e\x85\x54\xe0\x5a\x02\x7a\x1d\xf6\xa4\xe2\xf5\xef\x5e\xfd\xcb\xba\x51\xfb\x23\x4f\x00\xc7\xc1\xfe\x31\x5e\x73\x02\xc0\xc9\x3d\xcb\x32\x48\xf7\x15\xb1\x9f\x9a\xc8\x69\x29\xf5\x1c\xe4\x19\x01\xae\xbc\x27\xc2\xbc\xfb\xca\x7b\x23\x2d\xb2\xe4\x7c\x7f\x09\x94\x5a\x7f\x28\x3a\x37\x1a\xce\x0e\x37\xed\x46\x30\xd3\x24\x17\x4a\x6f\x9e\x8e\xbd\x06\xa3\x7c\xf9\x71\xba\xaf\x78\x3d\xea\x60\xcc\x5d\xff\x75\x07\xe1\xbc\x25\x7d\x30\xae\x47\x42\x8e\x6c\x37\x6f\x88\x96\xe5\x3e\x02\x5f\xde\x62\x21\x3d\xbc\x01\xca\x06\x83\x5b\xdb\x04\x9f\x1d\x1b\xef\xce\x6e\x53\xf1\xc0\x63\x5d\x1a\x78\xdb\x77\xba\x2e\x5e\x84\x85\xb7\x3d\x43\x2b\x9c\xc7\xcc\x83\x79\xfa\xff\xbf\x7e\xe4\xf7\x55\xa9\x57\x6e\x82\xed\xbc\xdd\xb1\xd6\x8a\x75\x1b\xb5\x06\x03\x20\xce\x56\x68\xdd\x93\x82\x0d\x6f\x56\x71\xd5\xa9\xb0\xe1\xc1\x66\x13\x98\x07\x2c\x51\x1b\xae\xb8\x9a\x01\xef\x7d\x95\x6d\xb9\xaa\xec\x3b\xd6\xb1\x1f\x1a\xc3\x2e\x0d\x1b\x56\xdb\xf8\xf0\x9e\x43\x67\x40\x95\xde\xb4\x84\x03\xd7\x7e\xb2\x3d\x9e\xe1\xbb\xda\xda\xaa\xa3\xd1\x5d\x70\xc6\x2b\x3f\x19\x26\xaf\x4f\x80\x1c\xdd\x80\x8d\x62\xb2\x19\x09\x2d\xa5\xe5\xa8\xf2\x5f\x9b\xc5\x0e\xd2\x67\x76\x9e\x36\xef\x82\x7b\x56\x7f\xb4\x1b\xa3\x91\x9d\xe7\x3c\x80\xee\x0a\xaa\x42\xa2\x6c\x7c\xd7\xee\x6e\x68\x70\xd9\x27\xee\x08\xfb\x97\x19\xab\x02\x92\xb1\x04\xe4\x2a\x36\x69\xd0\xda\x55\xd0\xdc\x72\x91\x3d\xd0\xa5\x3a\xea\x8d\x6a\x9e\x83\xa6\x8f\x27\xa5\xaf\xb6\xee\x02\xc1\xad\xa6\x3c\xa5\x32\x75\x6f\x74\xac\xaa\xd1\xf7\xe1\x08\x1f\x30\x3c\x89\x4f\xc5\x1b\x32\xd7\xba\x50\x6f\xce\xcf\x67\x4c\x8f\xef\xff\xa8\xc6\x4c\x9c\x27\x22\xcf\x4b\xce\xf4\xf2\x1c\xa3\x8d\xd8\xa4\xd4\x42\xaa\xf3\x14\x16\x90\x9d\x2b\x36\x1b\x51\x99\xcc\x99\x86\x44\x97\x12\xce\x69\xc1\x46\x89\xe0\x0b\xe0\xe8\xbf\x18\xe7\xe9\xaf\x3d\x49\xcf\xab\xc3\xb7\xd8\x04\x3a\x54\xe4\x02\x46\x25\xbf\xe7\xe2\x81\x8f\xd0\xbc\xa7\xf6\x62\x18\xbb\x45\xad\xfa\x16\xb0\x86\xfb\x04\xb5\x16\x62\x0f\x9b\xe0\xb3\xaf\xac\x99\xa2\x11\xe5\xe9\xc8\x86\x6a\x3d\xef\x02\x77\x71\xab\x8e\xea\x70\xd0\xdd\xa9\xeb\x66\x0d\xa2\x89\x66\x0b\xe8\x14\x94\xe8\x5b\x98\x62\xf0\xd1\x67\x5d\xa5\xa5\xb4\x7b\xa9\x11\xa5\xe8\x43\x34\x72\xba\x44\x19\x1e\x89\x25\xc2\x0a\x6f\x5c\xa4\xe0\x5c\x8e\x8b\x3d\x42\x07\x7d\xbb\x35\x6c\xf9\xce\x68\x9b\x2e\xd2\x11\x3d\xba\x4b\xa5\x21\xb7\x57\x81\x1d\x2d\x5b\x12\x2d\x97\x36\x3c\x52\xde\x13\xa6\x7d\xcc\xa1\x51\xef\xef\xf1\x39\xa5\x44\xc2\x50\xa4\xaf\x97\xad\x9b\xae\xe2\xbd\x5a\x94\x14\x42\x31\x7c\x2f\x27\xb8\xec\xd7\x5f\x77\x99\xa7\x11\x7e\xf4\x87\x7f\xdb\x67\x1f\x4d\x11\x58\x73\x4f\x6f\x7b\x3b\x3c\x77\xda\xcc\x79\x76\x4b\x7f\xac\xbc\x55\xd0\x08\xa2\x89\xe0\x4a\x4b\xca\xb6\x63\x49\x6c\x6e\x1d\x43\x22\xba\xc7\x1d\x10\xdc\x9d\x17\x9d\x26\x85\xac\x67\x15\x78\x81\x05\xb7\xbc\x9f\xea\xe6\xc4\x58\xa8\x09\x9f\x1d\xb3\x27\xbb\xb5\xad\xf3\x1c\x91\xa0\x79\xb2\xbf\xb6\xc0\xbe\xe9\x3b\xd4\x37\x6e\xab\xf7\xba\x9c\x71\x51\x7d\xfc\xfe\x13\x24\xe5\xae\x98\x6c\xeb\x2d\xd4\xed\x6e\x9b\x91\xf6\xbc\x99\xda\x45\x2f\x5b\xea\x0d\x87\xf0\x5f\x38\xa1\x52\xe0\x7a\x39\xe9\x52\x51\xcd\xd4\x74\x5f\x47\xb0\x6f\x66\x55\xab\x75\x87\x46\x28\x57\x75\x62\xaa\xb0\x38\x94\x19\x6c\x7e\x36\xd3\xc8\x39\x93\xb9\x10\x6a\x1f\x33\x51\xb3\x51\xbb\xe9\xf0\x1d\x16\x4c\xd8\x00\x25\xc4\x1c\x90\x24\x37\x6c\xd3\x5d\xf1\x0d\xa2\xac\x6b\xb0\xfe\x19\xdb\x57\x57\xf7\x0d\xcd\x7d\xd5\xe6\xf0\x81\x38\x66\x70\x74\x6f\x99\x3f\x66\x28\xac\x2b\x4d\x54\x99\x1b\x52\x1e\x80\xcd\xe6\x5a\x9d\x11\x36\xde\xdb\x5e\xe4\x9b\x39\x46\x40\x93\x79\xe3\x15\x72\x00\xdd\x2a\x96\xdd\x3c\x7b\x4d\x1f\xe8\xc9\xa3\x90\x46\x4f\x37\x87\xef\x70\x56\xc9\x0d\xab\x47\x62\xe3\x36\x38\x23\xa0\x93\xf1\xe9\xfe\x71\x15\xb6\xd5\xe0\x75\x66\x16\x27\x4b\xc2\x34\x98\xcb\x18\x55\x7f\x29\xca\x99\x9d\x6b\xf0\x29\x62\x38\x07\x55\xf6\x3d\x86\xbd\xa5\xe9\xfe\x26\x09\xdf\x8e\xec\xa2\x1d\x99\x13\x83\x73\x5b\xe6\x1e\x7a\x19\x57\x00\x1d\xe0\x50\x21\x4e\x48\x50\x85\xb0\x66\xb2\x55\xd7\xf8\xff\xd8\xd3\x01\xde\x6c\x66\xa8\x13\x75\x5a\x6f\xad\x39\x9b\xcd\xfd\xce\xa2\x4e\x3e\x68\xef\xc8\x6e\x1b\xac\x7b\x58\x88\x6d\x1d\x83\x43\x6c\x8b\xc3\x05\x1b\x49\xef\xf5\xf1\x6c\x1c\x09\x0d\x32\xaf\x96\x0d\x4f\x0d\x5e\x2b\xce\x2d\xed\x8b\xb8\xbb\xc3\x4a\x5e\x75\xa6\xe2\xc4\x9c\x72\xc2\x8c\x06\x69\xf8\xd4\x48\x14\xa7\x63\x72\x41\x78\x59\xb1\xe5\xc7\x08\xe3\xa2\xa2\xcb\x75\x64\x88\x55\xa2\xee\xab\x2b\xb7\x0e\xb9\x4a\x6d\xeb\x16\x8d\xd9\x6c\x23\x37\x03\xf0\x74\xd9\x95\xc7\x3a\xb1\x6b\xd4\xb1\x83\x30\xb1\xc0\xf7\xe1\xdf\xa2\x7b\x1f\xab\xb0\xe8\x96\xaf\xd4\x51\xbd\x20\xf3\xb3\xa6\x1c\x5f\xf1\x80\x36\xbb\xb1\x73\xd1\x75\x57\x90\x38\x3b\x83\x44\x9a\x57\x12\x14\x60\xbe\xb9\xad\xcc\x72\x05\xa1\xd1\x9a\xed\xd6\x7d\x39\x59\xe2\xb7\x7b\xc6\xde\x6f\x6f\xa1\xcc\xb5\x6e\x41\x6c\xb6\x6e\xb1\x18\x6e\xdd\x56\x77\x6f\x9c\x68\xf5\x08\x84\xe1\x70\x71\x62\xd8\xb7\x0c\x10\xe7\xf4\xd8\x16\xce\x61\xeb\xb6\x7f\x14\xfc\xb6\x7e\xa2\x2d\x47\x2c\x16\x61\x5b\x87\x38\xfa\xcd\x6d\x2d\xb8\xed\x79\xc2\xea\x37\xb7\x80\xf8\xd8\x4d\xad\x6b\x08\xfe\xe6\x16\x9f\x51\x98\x76\xf3\x02\x51\xfa\x9b\xdb\x4e\xb1\xfb\x67\xed\xc0\x7d\xf2\x8d\xb6\x8c\xe9\xfb\xa0\x5b\xb6\x6e\x91\x57\xbc\x5b\xc0\xff\xe6\xf6\x3c\xeb\x7d\xf1\x72\x29\x01\x9b\xdb\x81\x13\x05\xf6\x24\x6a\x3b\x41\xdf\x68\x43\xcc\xf7\xfa\xac\xf1\xe3\x48\xd4\x34\x48\xb0\x30\x7b\x3e\xaa\xdc\x29\xd8\x67\x0e\x70\xc2\x3b\x24\x31\xb9\xb5\x90\x80\xa8\x8f\x98\xf5\xd1\xc9\x28\xbc\xbd\xed\x9c\x3d\x11\x92\x0d\xb1\xb9\xc5\x93\xd7\x6c\x8b\x24\xb5\xd9\x16\x99\x7b\x44\xcb\xb2\x78\xf1\xce\x51\x4f\xf8\xda\x3a\x23\x0f\xa8\x22\x58\x77\xe8\xa0\x22\x3c\xd9\x06\x15\x61\x50\x11\x9e\x6e\x83\x8a\xb0\xde\x06\x15\x61\x50\x11\x82\xda\xa0\x22\x3c\xd9\x06\x15\xe1\xc9\x36\xa8\x08\x75\x1b\x54\x84\xfe\xab\x08\xa1\x19\xb2\x9b\x9b\xf5\xb7\x44\x73\xfb\xfc\xc5\xba\x1b\x57\xfd\x3c\xa8\xdc\xf8\x30\xf7\xb6\xc3\xc7\x48\xd1\xb7\x4e\xd4\xb8\x43\x27\x91\x4b\xf6\x96\x94\xcf\x80\xbc\x1e\xbd\x7e\xb5\x77\x52\x45\xb3\x85\xc4\xa6\x37\xdb\xbe\xa0\x51\xeb\x2d\xfa\xce\xd8\x16\xbf\xd0\xbf\x90\x1e\xc7\xd9\xab\xb8\x8a\x96\xf2\xb9\x25\xbe\xa6\xaa\x48\x90\x83\xde\x3f\x21\xc2\xb7\xa6\x63\x9a\xe5\x50\x05\xbd\x59\xb6\xee\xd2\x78\xea\xa4\x58\xc1\x5d\x80\x84\xd9\x96\x5d\xb7\x5d\xa7\xb7\x4d\x80\xda\x64\xf3\x09\x98\x37\xee\x1a\x4a\xa4\x89\x12\x39\x58\xb8\x36\x7f\x75\x98\xd7\x05\xbf\x0d\xc8\x09\x8c\x67\x63\x92\x96\xe0\x60\x10\x6c\xd6\xc9\xe9\x59\x23\x38\xb3\x6b\x2c\x91\x11\x78\x24\xfe\xc7\x4c\xac\x8b\xe9\x84\x05\x70\x5d\xd2\x2c\x5b\x12\x58\xb0\x44\x57\x2b\x80\xc9\x59\x4c\xab\x80\xb9\x0e\x56\x45\x43\xd5\xcf\xd1\x1a\xff\xea\x26\x9e\x84\xeb\x89\x6b\x74\x74\xe7\xe9\x2b\x05\x01\xec\x0c\x8d\xb7\x5a\x92\xb4\x19\xcd\x06\xa4\xe1\x3f\xf1\xe0\x7e\xbc\xe9\x1a\xbb\x43\x22\xc9\x23\xc1\x32\x48\x4c\xd5\xc0\x05\xcc\x08\xe9\x42\x7a\xd6\x67\x70\x43\xc8\xcc\x06\xfc\x8f\xbd\x73\xf3\xdb\x4d\xcf\x21\xef\x82\x21\xb2\xa9\x19\xda\xee\x44\x21\x32\x31\x5b\x36\x37\x9e\xab\xdb\x5f\xa3\x9d\x53\xa2\xca\x89\x53\x6e\xcd\xd9\xbf\x5a\xd9\xa9\x43\xb0\xc7\xd6\x36\x04\x7b\xac\xb5\xc1\x92\x3b\x58\x72\xf7\xe8\x67\xb0\xe4\x0e\x96\xdc\xc1\x92\x3b\x58\x72\xbb\xb6\xc1\x92\xbb\x17\x51\x83\x25\x97\x0c\x96\xdc\xad\x6d\xb0\xe4\xba\x36\x04\x7b\x6c\x6c\x83\x8a\xb0\x6f\x1b\x54\x84\xf0\x7e\x06\x15\x61\x50\x11\x06\x15\x61\x50\x11\xba\xb6\x41\x45\xd8\x8b\xa8\x41\x45\x20\x83\x8a\xb0\xb5\x0d\x2a\xc2\x7a\xc7\xd1\x82\x3d\x9e\x81\xdc\x98\x84\x16\x22\x8d\x0e\xe7\x52\x88\xf4\x11\x34\x17\xeb\x0b\x4f\xc4\x28\x13\x09\xc5\x5a\x82\xcc\xfe\xc4\xc5\xa0\x28\x9a\xdb\x50\x80\x33\xf2\x4f\xc1\xc1\x62\x40\xd8\xda\x9d\x39\x10\xa1\xe7\x80\x65\xba\x4e\xd4\x69\x87\x44\xf6\x01\x0d\x66\x97\x36\xa0\xc1\x0c\x68\x30\x03\x1a\xcc\xcb\xa2\xc1\xcc\xa9\x72\x25\x2e\x50\x28\xda\x0e\x0e\xd3\xe0\xd8\x77\x20\xf3\x01\x1b\xe6\xa9\xb6\xa6\x8b\xbb\xe3\x63\x56\xb8\xb1\xd9\xed\x8c\xa7\x2e\x9c\x12\xd2\xeb\xf6\x3c\x3b\xc3\x1d\x4e\x0b\x4d\x53\x48\x49\x01\x72\x64\x0f\x8f\x20\x53\xe6\x2a\xcc\xac\x9c\x66\x37\xc3\x5d\x19\x62\x4f\x00\x57\xda\x33\x11\xd0\xd3\xe1\x51\x57\xda\xaf\x12\x2d\x54\xa9\x19\xb1\xd5\x12\x7f\x3e\x3b\x0c\x96\x38\xf6\xc2\x11\xd1\x2e\x4c\xe9\xbb\x20\x8b\x61\x2c\xf3\x1e\x9a\xdf\x6e\xf7\xaa\x29\xbb\xbd\xc5\x36\x69\xf8\x42\x9d\xff\x5d\x82\x5c\x12\xb1\x00\x59\x1b\xab\xfc\x4d\xab\x5c\x8c\x36\x62\xe1\xbb\x3a\xb4\xe1\xaa\xe9\xe5\xd4\xa2\x4c\xf1\x32\xcb\xce\x6c\xef\xab\x6c\xcf\x5f\x44\xb6\xf2\x92\x30\xdf\x47\xf2\x5e\x44\x31\x70\xc7\xb4\xff\xc6\x8e\x24\x23\x3d\xab\x58\xbb\xbd\xc5\x35\x4f\x44\x34\x4e\x3c\x93\xf5\xb0\x2f\x95\x71\xb7\xb7\xe7\xf4\x2f\x91\xd8\x3e\x26\x12\xd9\xcf\x44\x22\xfa\x9a\x48\x5c\x7f\x13\x89\xee\x73\x22\x31\xfd\x4e\xe4\xc5\x2b\xfd\x6e\x6f\xd1\xcd\x8a\xb1\x5d\x51\xe4\xd9\x18\x0c\x79\xe9\x8a\xc2\xdb\xdb\xcb\xd4\x1a\xde\xde\x9e\x61\x17\xc4\x74\x4f\x91\x67\xdd\x03\x07\xa9\x69\xbc\xbd\xf5\xd2\x69\xf5\x28\x61\xcf\x5e\x07\x79\x7b\x8b\xee\x03\x22\xcf\xe0\x07\x22\xb1\x7d\x41\xe4\x79\x8e\xec\x33\xfb\x84\x5e\x60\x80\x4e\xd5\x9b\xb7\xb7\xe7\xe0\x39\x07\xad\xf8\xfc\x18\x59\x07\xac\x05\xbd\xbd\x1d\xbe\x4a\xf4\xf6\x16\x59\x3a\x0f\xad\x2c\xfd\x14\xa1\x51\x58\xc5\xf3\xb8\x5f\x49\xeb\x5c\x7c\x07\xcb\xb8\xc1\x9f\x11\x4e\xee\x87\x16\x75\x5e\xfd\xd4\xae\x86\x5d\x2d\xb5\xa3\xaf\xcd\x0a\xec\xce\x47\xe0\x2a\x62\x67\x59\x30\x0d\x13\x20\x9a\xde\x03\x46\x5c\x08\x2c\x47\xc2\x52\xb0\x75\x6b\xec\x56\xc7\xf1\xcd\x16\x2f\x15\xa4\x86\x90\x4c\x88\xfb\xb2\xf0\x47\x05\xd3\x8a\x63\x1c\x4c\xc6\x13\x91\xfb\xfc\x69\x9b\x4d\x67\x4e\xbc\xe3\x05\x23\x5b\x67\xcc\x7e\x8e\xe4\xe0\x25\xed\x8c\xaa\xff\x68\x19\xf9\xfe\x41\xa8\x22\xff\x40\xf5\x87\x93\x13\xfc\xe1\xe9\x3f\xc2\x43\x33\xab\x25\xb0\x7e\x39\x51\x22\x87\x5d\x29\x52\xde\x5e\x9d\xc7\x66\x37\x98\x20\x5f\x1b\xa5\x39\x71\xc7\xd6\x9f\x7e\x42\xb9\x66\xa7\x95\x29\x7a\x4c\x70\x7f\xa1\xee\x97\x0a\x7e\xac\x2d\xd5\x9e\xeb\xfb\x0e\xc2\x23\x32\xab\x95\xab\x23\x7b\xac\x87\x7b\xec\xca\xbe\xdb\x2a\x7c\x55\xcd\x38\x2b\xe3\x05\x8f\x7b\xe7\x63\x07\x9c\xca\x3b\x15\x72\xc2\xd2\x14\xb0\xd0\x66\xf5\xaa\x13\xe1\xa1\x31\xea\x23\x67\xf8\x7e\x6b\xef\x84\x13\x73\x91\x29\x71\xb6\x3a\x4e\x42\xb9\x07\x3f\x00\x6d\xab\x75\xb6\x86\x25\x4c\x99\x65\x51\x10\xac\x7e\xf5\x2e\x3c\xfc\xb9\xee\x89\xc8\x29\x02\x4c\xf5\xfc\xae\x58\x25\x70\xb8\x2e\xa2\x5f\x17\x5c\xe8\xe1\xc6\x18\x6e\x8c\x95\x1b\x63\xed\xe0\x3d\xdf\xa5\xb1\x36\xd4\x70\x6f\xf4\xfc\xde\xe0\x34\x07\x55\xd0\x04\x3e\x23\x0f\xb3\x35\xff\xdb\xbc\x35\x4f\xbe\x6a\x94\xd3\x06\x99\x47\xf5\x0a\x78\xa8\x1a\xbc\xb1\xb0\xdf\xd4\x87\x42\x95\xbc\x51\x6b\xb5\x41\x8c\xe5\x9b\xab\x51\x7f\xc1\x94\x78\x35\x5f\x70\x50\xe8\x7c\x85\x2a\xf6\xb4\x31\x38\x8e\x15\xfe\xda\x08\x41\x53\xbb\x59\x78\xba\x0a\x4a\x53\x8f\x88\x7e\xe0\x1c\x28\x57\xe4\xc8\x07\xc5\x1e\xab\xfa\x89\x1d\x8b\x2a\x3f\xd6\xaa\xf2\x56\x15\x45\x27\xff\xe7\xff\x9e\xb6\x4a\x5a\xd5\x04\x0d\x5e\xfe\x9d\xdb\xe0\xe5\x0f\x6a\x83\x97\x7f\xf0\xf2\xc7\xe8\x6b\xf0\xf2\x0f\x5e\xfe\x8d\x6d\xf0\xf2\x0f\x5e\xfe\xc1\xcb\x3f\x78\xf9\xd7\xdb\xe0\xe5\x1f\xbc\xfc\x8d\x36\x78\xf9\xbb\x93\x35\x78\xf9\xf7\x6c\x83\x97\x3f\xa6\x97\xbf\x36\x5c\xf4\xcd\xfa\xd6\x34\x69\xb9\x4c\x56\xd4\x3e\x35\xd5\x2c\xa9\xd1\xa3\xfc\x53\xf6\x5f\xfd\x32\xc5\x35\xcd\x64\xcf\x63\x88\x6b\x1a\xfb\xd6\xec\xa9\x91\xec\x70\x5b\xad\x6e\x95\x5d\x6e\x6d\xe4\x67\x35\xc8\x0d\xe6\xf6\x6e\x54\xd6\xa9\x65\x7d\x3b\xea\x77\x1e\xcc\x40\xcd\x45\x99\xa5\x46\xb8\xad\x90\x0e\x52\x72\xe2\x3d\x6b\xa7\x66\x2b\x72\xa1\xdb\x5f\x72\xcd\x46\xf5\x13\x55\xa2\x20\xba\x05\x7d\x35\x8f\xf0\x25\xf6\x36\x82\xda\x7b\xe4\x70\x17\xaa\x24\xfb\xfa\x74\x98\x1b\x1a\x64\xeb\x1d\x98\x22\x29\x4c\x19\xb7\x20\x2d\xb2\xe4\xdc\x08\xe7\x82\xbb\x1c\xfa\x60\xfa\xac\x48\x60\x5d\x7d\x8e\x0f\x59\x93\x06\xce\x07\xda\x35\xea\xe5\x6f\xa4\x49\x53\x64\xa2\x94\x3b\x9c\x77\xc1\x9d\x53\xd5\x7c\x62\xfb\x09\x26\xad\x62\x51\xb8\x22\xac\x7a\xfb\x70\xee\xf4\x1e\xb9\x52\xf3\xc5\x98\xc2\xfd\x41\xb3\x4c\x3c\x84\x4b\x1b\x51\xce\x75\xe4\xb2\x35\x81\xa7\xed\x61\xef\xaa\x37\x2b\xb9\xbf\x61\x9a\xed\x50\x30\x67\xc7\x36\x14\xcc\x79\xba\x0d\x05\x73\x1e\x2f\x98\xd3\x88\x6c\x6a\x56\xce\xe9\x3a\xdb\x58\x6f\xe7\x00\x95\x73\x08\xf9\xcb\x1c\x90\x6f\x48\xb0\xe1\x48\x65\xa6\x59\x51\x23\xa2\x29\xbb\xf2\x99\x35\xc4\x4d\x1d\xb2\x4e\x9b\x8b\x19\x1a\x69\x32\xef\x48\xc0\x0a\x0f\x44\x2a\x10\x77\x4d\xe1\xcd\x66\x11\x65\xd0\x0f\x6c\xcb\xca\x78\x0b\x9d\x05\xf6\x61\x9f\x3f\xfe\x47\xc0\xad\xf3\x0e\xc5\x9e\x76\xbc\x9d\x22\x27\x46\x5a\xca\x96\x2e\xea\xac\x75\xfd\xb4\xc4\xac\xce\xc3\x5a\x2f\xc2\x02\xbc\x8a\x36\x63\x0b\xe0\xb5\x8c\x76\xa2\x4e\x4f\xbd\xae\xb8\x2a\x7b\x76\x1e\x33\x44\x66\xed\x7e\xaf\xee\x2b\x6b\xae\xc8\x8a\x9d\xc7\xdd\x20\x63\xfe\x47\x43\x16\xfb\xcf\xa7\xa5\xcc\xce\x43\x5b\xd6\xe6\xe1\x96\x1a\xdb\xaa\x96\x2e\x3b\xf6\xdd\x13\xec\x98\x70\x18\x90\x18\x7e\xd8\x68\xf0\x1f\x71\xeb\x53\x1d\x02\xf6\xe3\x00\x90\x1f\xbf\xa4\x82\x51\xbd\x0c\xfe\xe9\x9d\x9d\xe9\x39\xd0\xe2\x7b\x1d\xec\x33\xc0\xc5\x07\xf5\xf3\x8b\x82\x8b\x3f\x50\x30\xcf\x2f\x10\x35\xbe\x07\xc1\x3b\x87\x0c\xdc\xf9\xc5\xa1\xc6\xf7\x28\x50\xa7\x97\x41\x3a\x7d\x0b\xd0\x19\x60\xd8\x83\xda\xe7\x09\xc3\x1e\x35\x08\x27\x36\x1f\xe9\x61\xf0\x4d\x0f\x03\x6f\xfa\x1a\x74\x13\x51\x52\x7e\x9e\x60\x9b\x48\x2c\xe0\x79\x82\x6c\xe2\xa5\x46\xc7\x3c\x95\x87\x86\xcf\xe8\x45\x2e\x74\x9f\x61\x33\x7a\x95\x00\xdd\xaf\xe4\xe7\x43\x24\x3e\xf7\x06\x26\xe3\x80\x10\x19\x71\xc4\xc0\x08\xc2\xdf\x73\xf0\xfb\x78\xb2\x58\x54\x38\x8c\xa8\x3c\xff\xf0\x30\x18\x5f\x2c\xdb\x8f\x08\x7f\x31\x70\xfe\xad\xad\xef\x9c\xff\xb9\xe1\x2e\x0e\x0b\x75\x31\xf0\xff\x9d\x5a\x54\x58\x8b\x67\xf6\x9c\xbe\x24\x9c\x45\x3f\xa0\x2c\x5e\x0c\xc6\xa2\x3f\x10\x16\x2f\x06\x5f\x31\x78\xac\x07\x8f\x75\xbb\x0d\x1e\xeb\xc1\x63\xbd\x4f\x3f\x83\xc7\x7a\xf0\x58\x0f\x1e\xeb\xc1\x63\x1d\xd8\x06\x8f\x75\x47\xa2\x06\x8f\xf5\xe6\x36\x78\xac\x07\x8f\xf5\xe0\xb1\x5e\x6b\x83\xc7\x3a\x88\xc0\x9e\x7a\xac\xe3\x40\x42\xc4\x3c\x91\x7d\x82\x82\xe8\x03\x0c\xc4\x4b\x41\x40\xf4\x0e\xfe\x61\x30\x41\xef\x46\x5d\x1c\xa8\x87\x98\x47\xb8\xdf\x10\x0f\x7d\x86\x77\xe8\x29\xb4\xc3\xf3\xc0\x3a\x3c\x27\xa4\x43\xf0\x99\x8d\x7a\x5a\x0b\x91\x5e\x70\xcd\x7c\x0a\xd9\xfe\xe7\xb4\x75\x3a\xdf\xe1\x1f\x13\xb0\x67\xac\x75\x60\x9a\x79\xf2\xb2\xcc\x40\xb9\x34\x71\xba\x10\x2c\x25\x45\xa9\xb5\xcd\xbc\x75\xe7\xd3\x6f\x7c\x9a\xdb\x4c\xf9\x33\xf2\x4f\xc1\xe1\x8c\x80\x4e\xc6\x66\x73\x63\x0e\xba\xd0\x73\x90\xe6\xf1\x13\x75\x7a\xba\xff\x9a\x04\xc9\x67\x61\xa6\xbd\x42\xc2\x14\xe4\x67\x81\xac\x80\x9e\x67\x07\x5f\x20\xad\xc3\xdb\x52\x8f\x21\x02\xee\x0b\x7b\xfc\xb4\x70\x59\xef\x78\xec\x6d\xda\x79\xd7\x1b\x12\xf1\x0d\x5a\x1b\x08\x1a\x6e\x8e\x2d\x18\x07\x67\x64\x52\x6a\xc2\x34\x02\x03\x24\x73\x21\x54\x57\xee\xe2\x92\x94\xf1\x45\x16\x4c\x58\x73\xba\xe0\x80\xa8\x03\x42\x56\x3c\xb0\x41\x94\x55\x25\xea\x9f\xb1\xae\xca\x56\x2e\x94\xae\x77\x88\x37\xce\x9a\xc1\xab\x3b\x67\x26\xc1\x50\xa4\x89\x2a\x73\x43\x8a\x05\x54\x51\x16\x02\xa0\xe3\xb0\x53\x23\x62\xd1\x64\xde\x78\x85\x1c\x40\x5b\xd7\x9c\xcf\x72\x6e\x1c\xe2\xa6\xce\x74\xe2\x73\x5e\x3b\x8e\x6d\x3a\x03\xa5\xcf\xb6\x22\x8e\x6c\xdf\x0b\x96\x27\x9c\x76\x35\x4a\x25\x22\x2f\x4a\x0d\x46\x8e\x2f\x73\xb3\x9b\x98\xc6\x88\x15\x64\x46\x52\x94\x33\x3b\xe1\x1e\xe4\xc1\x4e\x44\x8d\x20\xc2\x53\xa2\xca\x89\x96\x34\xd1\xdd\x6f\xff\x23\xbb\x7c\x47\x55\x60\x11\xd2\xc2\xa6\x15\x4e\x08\x99\x53\xd5\x8c\xb8\xa9\xaf\xd7\x27\x70\x72\xfe\x47\xc0\x05\x6b\x06\x3e\x51\x0d\x41\x67\xce\x66\x73\xbf\xe7\x8c\x92\x8c\xa6\x85\xd6\x5e\xfd\xdc\x01\x26\xcc\x01\x76\x47\x09\xa5\x96\x7a\xe3\xdb\x19\x4f\xc9\x5f\xf0\x5b\x48\x57\xd3\xae\x71\x3b\x58\xdb\x01\x4d\x53\x23\x8f\x80\x1c\xd9\x83\x24\xc8\x94\x39\x4d\x69\xe5\x64\xbb\x19\xee\xca\x21\xfb\x01\x12\xb0\xb2\xe3\x02\x7a\xb2\x33\xdf\xb1\x83\x18\xae\xb6\x95\x57\x89\xa6\xb4\xdc\xb8\x69\x1e\x93\x0b\x2b\x18\x79\x36\x66\x34\xf8\xb3\x35\x18\xac\xf5\x53\x6d\x67\xa6\x07\x41\x11\x71\xfc\xb5\x31\x90\x25\x48\x44\xf7\x6a\x34\x84\x09\xf2\x32\xe5\x7f\x5e\x00\x69\x82\x1c\x06\x6d\x82\x0c\xa5\x67\xfa\x15\xcb\x43\x86\xd2\x33\x3d\x8b\xed\x21\x43\xe9\x99\xa1\xf4\x4c\xf7\xd6\x87\xd8\x1f\x32\x94\x9e\xe9\x41\x2c\x10\x19\x4a\xcf\xec\xd2\x86\xd2\x33\x43\xe9\x99\xf5\x36\x94\x9e\x19\x4a\xcf\x34\xda\x50\x7a\xa6\x3b\x59\xbd\x8b\x27\x22\x3d\x8e\x29\x22\x43\xe9\x99\xc8\xa5\x67\xe2\x65\x49\x93\x67\x38\xb9\x87\x46\xc8\x20\x7d\x49\x97\x26\x3d\x47\xca\x20\x7d\xcb\x99\x26\xbd\xcb\x9b\x26\x07\xca\x9d\x26\x7d\x42\xce\x20\x87\x45\xcf\x20\x7d\xcc\xcf\xfb\x3c\x2a\x17\x45\x45\xd4\x20\xcf\x71\x57\x1c\x1e\x59\x83\x7c\xe9\xd7\x45\x44\x84\x0d\x32\xdc\x18\xbb\xb4\xcf\xe1\xc6\x78\x6e\xc4\x0d\x72\x70\xd4\x0d\x32\xdc\x1b\x5d\x5b\x54\x24\x0e\xf2\x32\x1e\xe6\x97\x44\xe4\x20\xbd\x41\xe5\x20\x2f\x89\xcc\x41\x7a\x85\xce\x41\x5e\x12\xa1\x83\x0c\x5e\xfe\xc1\xcb\xbf\x73\x1b\xbc\xfc\x83\x97\x3f\x46\x5f\x83\x97\x7f\xf0\xf2\x6f\x6c\x83\x97\x7f\xf0\xf2\x0f\x5e\xfe\xc1\xcb\xbf\xde\x06\x2f\xff\xe0\xe5\x6f\xb4\xc1\xcb\xdf\x9d\xac\xc1\xcb\xbf\x67\x1b\xbc\xfc\x31\xbd\xfc\x71\xd0\x44\xc8\x33\x9c\xda\x3e\xa1\x8a\x90\x9e\x20\x8b\x90\x17\x44\x17\x21\x7d\x44\x18\x21\x83\xb9\xbd\x33\x95\x71\x50\x47\xc8\x33\x1c\xf5\x7e\xa3\x8f\x90\x9e\x23\x90\x90\xfe\xa2\x90\x90\x67\x43\x22\x21\xcf\x8c\x46\x42\x62\x9d\x6b\x9b\xa2\xda\x17\x9c\x1f\x4b\xcd\x5a\x66\x6d\xab\xc2\xff\xa3\x89\xf3\x61\x9a\xad\x3b\x34\x92\xf2\x19\x90\xd7\xa3\xd7\xaf\x5e\x85\xe7\xee\x32\xae\x61\x06\x21\xd6\xcb\xa9\x90\x39\xd5\xd8\xd3\xef\x7e\xdb\xa9\x9f\xe8\x6c\x7b\x1b\xdc\x43\xff\x60\x50\x9c\x4d\xa4\x0d\x43\xd1\x92\xfe\xb7\x60\x92\xa0\x56\x60\x4e\x6b\x0e\x9a\x74\xf6\x0d\x34\x80\x37\x34\xcb\xe1\xcc\xf3\x7e\x1b\x13\xe1\x03\x00\x1c\x1a\x4b\x4a\x04\x77\x22\x9b\x61\x77\x5d\xf7\x5e\xf7\x57\x4e\x80\x2a\x44\x3e\x98\x80\x79\xed\x8e\xe3\x53\x6d\x61\x7e\x0a\xc1\xb8\xf6\x86\x1e\xf3\xce\xe0\x37\x84\xc3\x10\x4a\x4b\xb0\x16\xd4\x3a\xc6\xa9\x2c\x52\xaa\xe1\x34\x44\x55\x54\x4b\xa5\x21\x47\x28\x19\x23\xe9\x51\x0c\xfe\x21\x5a\x2e\x31\x00\x64\x01\x5c\x97\x34\xcb\x96\x04\x16\xcc\xc5\xef\x98\xe1\x31\x7a\x89\x69\x15\x34\xf3\x7f\x99\x03\x72\x10\x09\x36\x30\xa9\xcc\x34\x2b\xb2\x1a\x85\xc4\x2e\x7f\x66\x4d\x72\x53\x07\xba\xd3\xe6\x67\x86\x46\x9a\xcc\x3b\x12\xb0\xc2\x0d\x91\x0a\xc3\x80\xa4\xc2\x3b\xce\xe2\xcc\xa0\x47\xd8\xa8\x0a\xaa\xb2\xd5\x59\xcc\x1f\xf6\xf9\x23\x81\x04\xdc\x3f\xef\x50\x00\x6a\x47\xde\x29\x72\x62\xe4\xa6\x6c\xe9\xe2\xcf\x5a\x17\x51\x4b\xe0\xea\x3c\xac\xf5\x27\x2c\xc0\x2b\x6b\x33\xb6\x00\x5e\x4b\x6b\x27\xea\xf4\xd4\x6b\x8d\xab\x52\x68\xe7\x31\x43\xa4\xd7\xee\x37\xec\xbe\x52\xe7\x8a\xd4\xd8\x79\xdc\x0d\xd2\xe6\x7f\x34\xa4\xb2\xff\x7c\x5a\xde\xec\x3c\xb4\x65\x6d\x1e\x84\xa9\xb1\xad\x6a\x39\xb3\x63\xdf\x3d\x41\x91\x09\x07\x04\x89\xe1\x91\x8d\x06\x04\xf2\xcc\x05\x93\x5e\x00\x00\xe4\x00\xe0\x1f\x43\xe1\x9e\xa1\x70\x4f\xbb\x0d\x85\x7b\x86\xc2\x3d\xfb\xf4\x33\x14\xee\x19\x0a\xf7\x0c\x85\x7b\x86\xc2\x3d\x81\xad\x47\x21\x3b\xbd\x0c\xd7\xe9\x5b\xa8\xce\x50\xb8\x27\xa8\x0d\x85\x7b\x86\xc2\x3d\x43\xe1\x9e\x46\x1b\x0a\xf7\x84\x1c\xcd\x78\x49\xd2\x31\x4f\xe5\xa1\x81\x34\x7a\x91\x15\xdd\x67\x00\x8d\x5e\xa5\x42\xf7\x2b\x0d\xfa\x10\x29\xd0\xbd\x01\xcc\x38\x20\x58\xc6\x50\xe7\x69\xa7\x16\x15\x18\x23\x2a\xcf\x3f\x3c\x20\xc6\x17\xcb\xf6\x23\x02\x61\x0c\x9c\x7f\x6b\xeb\x3b\xe7\x7f\x6e\xe0\x8b\xc3\x82\x5e\x0c\xfc\x7f\xa7\x16\x15\xe0\xe2\x99\x3d\xa7\x2f\x09\x6c\xd1\x0f\x50\x8b\x17\x03\xb4\xe8\x0f\x98\xc5\x8b\x01\x59\x0c\x1e\xeb\xc1\x63\xdd\x6e\x83\xc7\x7a\xf0\x58\xef\xd3\xcf\xe0\xb1\x1e\x3c\xd6\x83\xc7\x7a\xf0\x58\x07\xb6\xc1\x63\xdd\x91\xa8\xc1\x63\xbd\xb9\x0d\x1e\xeb\xc1\x63\x3d\x78\xac\xd7\xda\xe0\xb1\x0e\x22\xb0\xa7\x1e\xeb\x38\xe0\x10\x31\x4f\x64\x9f\x40\x21\xfa\x00\x08\xf1\x52\x60\x10\xbd\x03\x82\x18\x4c\xd0\xbb\x51\x17\x07\xf4\x21\xe6\x11\xee\x37\xd8\x43\x9f\x81\x1e\x7a\x0a\xf2\xf0\x3c\x00\x0f\xcf\x09\xee\x10\x7c\x66\xa3\x9d\x56\x5a\x6a\x91\x8b\x92\xeb\x5b\x90\x0b\x96\xc0\x45\x92\x98\xbf\xee\xc4\x3d\xec\x99\xd5\xdf\x3a\xa2\x17\x8f\x74\x4b\x18\x4f\x59\x82\xb6\xc9\x87\x39\xe8\xb9\x4b\x9b\xc3\xe7\x08\xb5\x0f\x12\x8d\x4f\xd6\x27\x14\xe9\x34\x77\x2c\x66\x76\x63\xd7\xfb\x2e\x81\x9d\xa1\x89\x10\x19\xd0\x7d\x5c\xd1\x4e\x66\x04\xb9\x27\xa3\x0e\xe3\x59\xdf\x3b\x51\xa2\x1e\x9d\x4c\x20\x13\x7c\xe6\x72\xc8\x1d\xd7\xd9\x77\x17\xbe\xad\xbb\x73\xae\xda\xa4\x94\x12\xb8\xce\x96\x38\xcd\x69\x0a\x29\x41\xf3\x54\x2e\x16\xfb\x6f\xf2\x3b\x64\x47\x5e\x87\xa7\x9a\x64\x40\xcd\x7b\x70\xa8\x5f\xc4\x30\x34\x4a\xae\x3b\xd0\x5e\xf9\x96\x2d\x88\x40\xa7\xf5\xdf\xff\xc6\xee\x74\x47\xb7\x4f\x83\xd7\xcb\x50\x4a\x4b\xd0\xc8\xd7\x98\x0f\x64\x90\x4b\x51\x92\x07\x6a\x55\x29\x59\x72\x64\xa9\x38\x51\x1d\x16\x39\x40\xe9\xe8\x6e\x8c\x1f\xe1\xbd\xb4\xe7\xcf\x42\x8c\xe3\x54\xce\x3a\x89\x4e\x31\x64\x89\x0b\x39\x2b\xad\xa6\xe8\x8e\x22\x70\x2d\x97\x88\x87\xd1\xed\x5e\xb8\x9b\xb7\x4e\x48\x4e\x67\x70\xac\xc8\xdb\x0f\xef\xcc\xad\x83\x11\x48\x6c\x6a\x65\x76\x77\x0b\x15\x52\x2c\x58\xda\xf5\x1a\xfa\x81\x4a\x46\x27\x99\xd1\x7a\xa7\x20\x81\x1b\x49\xfa\xab\x93\x1f\x2e\x6e\xfe\x7e\x75\xf1\xe1\xfd\x29\xea\xbf\xf0\xa9\xa0\xdc\xb0\x83\x52\xd5\xc8\x3c\x8e\xc2\x63\x45\x80\x2f\x98\x14\xdc\xcc\x02\xda\x0d\x29\x59\xb8\x4e\x3b\x51\x54\x07\x8e\x48\x50\x22\x5b\x40\x6a\xb1\x34\x2a\x02\xeb\xf0\x9d\xa2\xd4\xde\x82\xea\x63\x6f\x4a\x9e\xcc\x29\x9f\x41\x3a\x26\xef\x44\x69\x5e\xec\xab\xaf\xf0\x25\x24\xa4\x65\x02\xdd\x74\x1c\x6b\x82\xb7\x27\xf7\xab\x33\x2f\xb3\x98\xdb\x1f\x63\x6f\x08\xa8\x84\x16\x7e\x6a\x9a\xb3\xa7\x96\x5c\xd3\x4f\x6f\x2c\x16\xc7\xd1\x57\x8d\xaf\x8e\xba\x07\xae\x15\x52\x98\x57\xb1\xb2\xa0\x7d\xfb\x8c\x69\x90\x34\x23\x47\xcd\x11\xc6\xe4\xbd\xa1\x0b\xd2\xe6\xda\x5a\x30\x1a\x58\x80\x44\xdb\xaa\x5b\xd9\x33\x22\x61\x46\x65\x9a\x81\xea\x66\x14\x12\xd3\xea\x0a\xb7\xa6\x16\xb7\xab\xa0\xb2\x19\x73\xa1\xc7\xa1\x8c\xdb\xb7\x0f\x02\xc1\x4e\xa6\xe2\x0d\x99\x6b\x5d\xa8\x37\xe7\xe7\xb5\x14\x34\x66\xe2\x3c\x15\x89\x3a\xd7\x54\xdd\xab\x73\xc6\x0d\xf3\x1b\xa5\x54\xd3\x51\x83\xeb\x9e\x5b\xd9\x78\x94\x88\x3c\xa7\x3c\x1d\x51\x77\x8e\x47\xd5\xce\x3e\xff\xb5\x93\x1e\x47\xb4\x7a\x8a\xf1\x11\x1d\xa9\x39\x74\x5a\xb9\x30\x45\x31\x40\x41\x0c\x14\x32\x23\x2b\x84\x6e\x2e\x0f\xc5\xb0\xdf\x57\xfc\xd9\x2e\xc5\x98\x5c\x09\xed\xf0\x8a\x5c\x44\x25\xde\xb6\xb8\xca\x31\x59\xf8\xfb\xab\xbb\x9b\xbf\x5e\x7f\xbc\xbc\xba\x1b\x38\xf9\xc0\xc9\xb1\x0d\x9c\x7c\xe0\xe4\x1d\x06\xee\x0b\x27\x07\xbe\x38\x14\x17\xf7\x4a\x71\x83\x63\x55\x5b\xd5\x25\x0a\x54\x61\xde\xd5\x3e\xe8\xb6\x45\xa3\xec\xf4\x83\xed\x98\xd6\x64\xbf\xe7\x8b\x1f\x68\x3b\xe2\x84\x6f\x9c\x42\xe2\x1e\xb0\x1a\xfa\xdb\xb0\x09\x0c\xf6\x7c\x85\xc6\x85\x75\x52\x48\x6d\x0b\x8f\xd9\x32\x43\x77\x37\x78\xc7\x33\x77\x5f\xd1\xbc\xb2\xd5\x6e\x5a\xf2\x10\x2b\xe6\x07\xeb\x50\x55\xee\x50\x52\xbe\x24\x85\x64\x5c\xe3\x56\xba\xb8\x7d\x7b\x79\x49\x92\x39\x95\x34\xd1\x20\x15\x81\x4f\x09\x14\x9a\x1c\xff\xcf\xe3\xee\x63\x46\xf0\x75\xa0\xf5\xba\x0f\x2b\xb3\x8f\xe0\x16\x30\x4c\x2d\xf2\x15\x12\x16\x4c\x94\x2a\x5b\x56\x1e\x82\xcd\x7c\x74\x95\x81\x12\xca\x43\x28\x30\xfb\xc2\x9b\x77\x37\x0e\xb8\x22\x74\x6e\x12\x20\x43\x6c\xed\x87\x15\x3d\x1d\x11\x31\x04\xd0\x80\xf1\x37\x88\xae\xbb\x8b\xa1\x01\xe3\x76\x12\x60\xb7\x09\xa3\x01\x74\xb4\xc5\xd8\x80\x8e\xde\xd9\xbc\x2e\x14\x36\x8e\x02\xa6\x26\x16\x27\xfb\x5a\x8a\x3c\x12\x37\xbb\x45\xc0\xc2\x2a\xcf\x6e\xd3\x51\x3d\x76\xc1\xeb\x2d\x45\xc0\xa9\xb4\x55\xa6\x9b\xf9\x3c\x30\xdb\x2d\x4a\xd4\x4c\x9c\xc0\xeb\x44\xf0\x29\x9b\x7d\xa0\xc5\x77\xb0\xbc\x81\x69\x98\xaf\xbe\x3d\xdf\xe8\xb6\x74\xe1\xbf\x78\x81\x1a\x91\xcb\x0e\x16\xe6\xba\x8c\x16\x74\x14\x2b\x34\x3f\x3c\x2c\x3f\x5e\x14\x7d\x94\x08\xfa\xd6\x42\xba\x6c\xe1\x3a\x5d\x36\x56\x82\x45\x94\xc0\xcc\x30\x49\xd4\xb7\xf8\xd1\xd1\x4d\xc9\xd4\x5d\x0f\x51\x82\xcc\xef\x6a\xb4\x73\xa6\x08\x4c\xa7\x90\x68\xb6\x80\xac\x42\x48\x4f\xcf\xc8\xa4\xd4\x1e\x9b\x7c\x42\x93\xfb\x07\x2a\x53\x45\x12\x91\x17\x54\xb3\x09\xcb\x98\x5e\x12\x16\xa3\xbe\x96\x0b\x15\x70\x80\xeb\x3e\xc6\x9a\x2b\x4d\xf1\x2a\x14\xce\x10\x68\x56\xdb\xc6\x50\x50\x9f\x20\x67\xb9\xa9\x07\x1a\x8f\x42\x4a\x2e\x94\x26\x09\x48\x23\xd4\x65\x4b\xf2\x20\x45\x8c\x1a\x18\xbb\x1a\x73\x12\xc1\x8d\xfc\xaf\xce\xc5\xc2\xc8\x82\xf0\x70\xfe\x20\xe4\x3d\xe3\xb3\x91\x79\xf1\x91\x65\x56\xea\x1c\x63\x5b\xce\x7f\x8d\xff\xe9\xd3\x29\x22\x3e\xa3\xfb\x0d\x39\x3a\x0a\xec\x4b\x14\x36\x8c\x33\xf2\xa9\xbc\xc5\x00\xa1\x65\x4b\x74\xaa\x2e\x14\x23\xfa\x30\xad\x90\x4f\x79\xf7\xbc\xd3\x02\x22\x4d\xf3\xfe\x81\x15\xeb\xed\xb9\xca\x8c\x21\x3b\x88\x7b\x7b\x07\xf3\xc0\xfa\xfa\xb7\xcc\xca\xb1\xc2\x42\xa4\x6f\x88\x2a\x8b\x42\x48\xad\x48\x0e\x9a\xa6\x54\xd3\xb1\x39\x10\x67\xed\x3f\x31\x04\xec\x8c\xfc\xa3\xfa\xd0\xe2\x11\xfc\x78\xfc\x1f\xdf\xbd\xff\xeb\x7f\x1e\xff\xf4\x8f\xe6\x77\x28\xae\xd9\xec\xa2\xc6\x03\x81\xaf\xa0\x0a\x48\xc6\x5c\xa4\x70\x85\xd4\xe1\x9f\xaa\x15\xf0\xe3\xbe\xd0\x54\x97\x6a\x3c\x17\x4a\x5f\x5e\x57\x7f\x16\x22\x5d\xfd\x2b\x30\xc7\xa9\x87\x72\x0f\xae\xed\x35\xd5\xdd\x11\xe6\x49\x54\xe9\x87\x16\xec\x07\x90\xaa\x73\xcd\x96\x66\x6b\x9d\x07\xd7\x6b\x05\x85\x9f\xcc\x21\xa7\xf8\xcf\xaf\xfd\x14\x98\xfb\xf8\x41\x32\xad\x31\x06\xcc\x15\xa8\x10\xd3\x33\xcf\x5a\xad\x52\xb5\x78\x1d\x5c\xa0\x2d\x2a\xe7\xaf\x56\x30\xf2\x84\xe1\x8c\xb8\xd9\xb2\x1c\xa0\x86\x5b\x59\x0b\xf9\xbc\xb8\xbe\x24\x0b\x3b\xc3\x3d\x9a\x9c\xe7\x63\xd7\x19\x44\x57\xb7\x82\x19\xf6\xd7\x15\x55\x6e\x99\x1a\xaa\x9b\x53\x98\x91\xf2\xd0\x05\xba\xb1\xcc\xc7\xa6\xe3\xbe\xe7\x0b\x33\xae\x22\x53\xa0\xba\x94\x40\x66\x54\xfb\x02\x3e\xc0\x8d\x4e\x1e\x98\xa2\xd2\x43\x9e\x19\x9e\xc2\x3d\x22\x45\x28\xcb\x35\x9d\x2c\x44\x56\xe6\x78\xb9\xf5\x84\x7b\xc7\xd7\x5d\xa3\xa8\x72\x5e\x01\x76\x51\x14\xad\xc3\x40\x2e\x0c\xb3\x5f\x60\xce\xb1\x7d\x06\x4d\x8f\x58\xa6\xa9\x5d\x9b\x49\x69\x2a\x75\x94\xba\x7c\xa4\x06\xf0\xf2\x96\xee\x3a\xc0\xc3\x5a\xb9\xf2\x17\xf7\x5d\xd4\xcd\x16\x4f\x23\x17\x59\x31\xc7\xcc\xa1\x59\xa5\x07\x6f\x3c\xed\x67\x15\x84\x83\x62\xff\x44\x0b\x5b\xc6\x72\xa6\xad\x5a\xf9\xfa\xb7\x7f\x6c\x10\xda\xa3\xbb\xe1\xd9\xd4\x9c\x28\x3b\x76\x93\xae\x64\xb6\xeb\x23\x6a\x52\x95\x1c\xed\x9f\x8b\x83\x34\x91\x0a\x70\x26\x53\x4c\xab\x36\x23\xd4\x27\x68\x41\x65\x15\x25\x54\x4e\x32\xa6\xe6\x71\x4a\x58\x5f\x4e\xab\xd5\x31\xfd\x2b\xc0\xb0\x63\x2d\x4b\xa8\x12\xba\x6a\xd9\xc3\xcc\xc5\x0a\x95\x11\x48\xd8\x66\x62\x6e\xd7\xcd\xab\xdd\xf9\xd7\x98\xbb\x55\x47\xc3\x8f\x7f\xf5\x6c\xf3\x30\xa5\x99\x7a\xb9\x89\xa0\x9c\x80\x94\x42\x56\x6e\x28\x09\xba\x94\xbc\x4e\x72\xbf\x16\x29\x49\x24\x58\x68\xc2\x1e\x29\xeb\xa4\x69\x14\xc1\x39\x0b\xec\xae\x88\x2f\x64\x47\xbb\xde\x0c\x6d\xcd\xfb\xcd\x8a\x06\xf6\xe2\xb2\xde\xbc\x36\x58\x62\x0c\x41\xd0\xb4\x0f\x8e\x09\x55\x45\xe4\xcc\xb6\xf4\x25\x0f\xdd\x69\xc0\x01\x8f\xc7\xe3\x63\x4b\xa5\x90\xf6\x2a\xb5\x16\x45\xf3\x79\xaf\xae\x85\x5a\xa8\x7a\x06\x33\x3c\x6f\x18\x95\xdd\x12\x61\xae\x90\x9f\x2a\xef\x62\x8d\x25\xab\x7f\x06\xca\x94\xaf\x44\xf6\x75\xaf\x6d\x60\x9e\x4a\xbf\x78\x15\xa3\x7f\x63\x53\xf5\xab\x7a\x6a\x56\xf8\xb1\xf8\x34\x46\xe5\x00\xa5\x43\x0d\xc5\x27\xb6\xcb\x71\x52\x94\x67\xae\xfb\x71\x0e\xb9\x90\xcb\xea\x4f\x28\xe6\x90\x83\xa4\xd9\x48\x69\x21\xe9\x0c\xce\xaa\xc1\xed\xcf\xaa\xbf\xec\x0f\x5b\xe4\xad\xff\xda\x46\x77\xd4\x99\x57\xce\xde\xf7\x05\xea\x72\x7e\xdd\x7a\xa2\x40\x55\xdb\xea\x19\xf8\xcf\x71\x15\x30\x67\x7d\x6e\xd5\x2c\xa2\x4b\xdd\x72\x23\x75\x56\x0b\x1c\x18\xf7\x61\x85\x3c\x75\xdc\x1f\x3e\x44\x48\xca\x16\x4c\xc5\x80\xd1\xda\xe0\x9e\x60\xce\xae\x21\x4a\x5d\x94\xda\x55\xbe\xae\x2c\x28\x9f\x0a\xa1\x30\x5a\xa4\x2a\x9e\xd8\x32\x0d\xbe\x0e\xf5\xbc\xa0\x8c\xa1\x41\xf2\x37\xe4\x7f\x9f\xfc\xed\x37\x3f\x8f\x4e\xff\x74\x72\xf2\xe3\xab\xd1\xbf\xff\xf4\x9b\x93\xbf\x8d\xf1\x1f\xff\x7a\xfa\xa7\xd3\x9f\xfd\x1f\xbf\x39\x3d\x3d\x39\xf9\xf1\xbb\x0f\xdf\xdc\x5d\xbf\xff\x89\x9d\xfe\xfc\x23\x2f\xf3\x7b\xfb\xd7\xcf\x27\x3f\xc2\xfb\x9f\x76\xec\xe4\xf4\xf4\x4f\x5f\x05\x93\x4e\xf9\xf2\x63\x20\xf7\xb6\x6d\x14\xad\x70\xf9\x6a\x8f\x91\x5c\x6d\xad\xab\x90\x71\x3d\x12\x72\x64\xbb\x7e\x83\x4a\x4a\xe0\x00\x7e\x7b\xc5\x3e\xff\x37\x9e\x6b\xd6\xb7\x59\x25\x14\xf6\xe8\x80\x3f\x97\xa0\xa1\x20\x91\xa0\x5f\x22\x4c\xc6\x8e\xe4\x35\xc3\x15\x54\x8f\x2f\xed\x06\xfd\x25\x44\xce\x54\xf5\x93\x71\x5d\x6b\x4d\xca\xa8\x57\xe3\x5a\x09\xa2\xc4\xda\x11\xdd\x73\xf7\x10\x08\xa8\x4e\x86\x48\x9b\x90\x36\x44\xda\x6c\x21\x65\x88\xb4\x09\x6a\x9f\x65\xa4\xcd\xad\xe5\x49\xbf\xc8\x30\x9b\xf5\x04\x33\xd3\xe9\x7d\xe7\x82\x33\x9d\x33\x77\xb6\x65\xba\xe5\xb4\xd8\xbb\x37\xe0\x8b\xae\xc1\xd5\x31\x53\xdd\xbc\xd9\x43\x0b\x52\x88\xa2\xcc\xa8\xde\x92\x45\x11\x29\xef\xad\x67\x9e\xb3\xbf\xcc\x81\x3b\xd1\xcf\xc5\xf0\x33\x4e\xf2\x32\xd3\xac\xe8\x98\x10\x50\xa9\x96\x15\x38\x24\xa1\x4a\x89\x84\x51\x9f\x08\xee\x80\xad\x94\xf6\xaf\x8c\x96\x79\x4d\xef\x31\x87\x26\x81\x14\x78\xd2\xd1\x72\xf8\x83\x05\xa3\xf4\x73\x3b\x59\x9a\x7b\xe8\x3d\x5f\xb8\x3b\x89\xa4\xa5\x4d\x70\x85\xda\x57\x1a\x65\xdc\x2f\x2b\x9b\xd1\x9c\x4b\x97\xad\xd0\x48\x6a\x44\x09\xb2\x32\x22\x56\xe0\xd9\x55\x08\x24\xa6\x7f\x58\x36\xdd\xed\xc2\x0b\x56\x0e\xc2\x45\xf1\x2a\x1b\x21\x48\xc7\x5a\x93\xc1\xeb\x30\xd1\xb6\xec\xdd\x79\x84\x1e\x25\x70\x84\x4b\xe5\x71\x25\xf2\xe7\x90\xc6\xfb\x22\x89\xf7\x44\x0a\x7f\x1e\x09\xbc\x9f\xd2\x77\x34\xc9\x3b\x8e\xd4\x1d\x47\xe2\xde\x23\xae\x3d\xa6\x94\x1d\x47\xc2\x7e\x0e\xfb\x5a\x21\x61\xca\x3e\xf5\x21\x6d\xf9\xa3\x77\x5f\x68\xf8\x84\xa6\x9a\x42\x42\x01\xbc\x42\x1e\xf6\x1e\x58\xa0\xc9\x7c\xc8\x38\x27\x95\x5d\x34\xee\x85\x7d\xbb\xc9\x52\x36\xdc\xd6\x64\xb8\xad\xf7\x68\xc3\x6d\x3d\xdc\xd6\x2f\x72\x5b\x3b\x6e\xf5\xe5\x5f\xd5\x91\x91\x96\x10\x43\xee\x50\x06\xa8\xb7\x6d\x28\x3b\xe4\xcc\xcf\x89\xf6\x55\x1d\xc5\x3a\xc6\xf3\x1c\x47\xee\x76\xe2\xda\x4c\xb6\x0a\xba\xd0\xc2\xb2\x3d\x32\x67\x33\xb3\x3d\x33\x58\x40\xe6\xd4\x6a\x92\x53\x4e\x67\xb6\x84\x89\x16\x55\x09\x5f\x21\xb1\x42\xa9\x64\x1d\xd1\xd3\x57\x30\x01\xd1\x82\x65\xb8\x4c\x26\x68\x8a\x5f\x4a\x91\x65\x46\x5e\xc9\xd8\x3d\x90\x77\x50\x64\x62\xe9\xaa\x90\xf0\x94\xdc\x6a\xaa\x61\x5a\x66\xb7\xa0\x3b\x85\x77\x07\x71\x1c\x24\xf8\xba\xcc\xb2\x6b\x91\xb1\xa4\x93\xf7\x2f\xc6\x56\xbc\xc4\x0d\x58\x94\x59\x46\x0a\x24\xa4\xdb\x3e\xfc\xc8\xf1\x2a\xbf\xc8\x1e\xe8\x52\x9d\x91\x2b\x58\x80\x3c\x23\x97\xd3\x2b\xa1\xaf\xad\x11\xa9\x5b\xbf\x4d\x4c\x10\xdb\x39\x61\x53\xf2\x06\xcb\x2f\x6a\xa2\xe9\x0c\x63\x8b\x7d\x18\xf1\x99\xd9\x50\xcd\x41\x89\x30\x8c\xf2\x81\xa9\x43\xda\xf6\xc2\x4f\xe9\xaf\x71\x74\x73\x75\x76\x3e\xb5\x41\x7b\x35\x63\x53\x48\x96\x49\x76\x30\x86\x79\x91\x60\x7a\x6d\x5d\xec\xa5\xc1\x4e\xd4\x52\x69\xc8\x3d\x9e\x3d\x9a\x74\x19\x27\x12\x54\x21\xb8\x42\x29\xaf\xe6\x12\xd5\x8b\x10\x4c\x92\xe9\x98\xd4\x11\xd1\xe2\xdb\x59\x31\x08\x55\x09\x0a\xa1\xf4\xad\xa6\x52\x77\x95\x4f\x62\xe9\x02\xd7\x9e\x10\x73\x92\x13\x9a\x65\x90\x12\x96\xe7\x90\x32\xaa\x8d\xdc\x4e\xa7\x1a\xab\x18\x34\x58\xbd\xb2\x31\xfb\x8d\xbc\x91\x39\xe5\x69\x06\x92\x4c\x29\xcb\x54\xf7\xcc\x81\x36\x34\x97\x91\xcf\x41\xe6\x8c\xa3\xf7\xc2\x46\x9d\x62\xf4\xb7\xf9\x2b\x49\x84\x4c\x5d\xbd\x00\xa6\x95\xff\x2a\x88\x89\x9a\xf6\x11\x25\xbb\xc6\xf6\x5e\x0d\xda\x25\x93\x4c\x24\xf7\x8a\x94\x5c\xb3\xcc\xbe\xbc\x10\xf7\xa8\xbf\x64\xc8\x4e\x3a\x0f\xdd\x9d\x4b\x55\xff\x1c\x55\x07\x6c\x64\xa8\x52\xe7\xbf\xae\xbf\xc2\x0f\x3a\x12\x17\x41\x8b\x8e\xa1\x43\xc3\x27\x48\xa2\x95\xda\x79\xff\x09\x92\x56\xa1\x2b\x07\xa4\x6a\x76\x94\x03\x4f\x8e\xe4\x77\xb4\xad\x67\x75\xbb\x03\x40\xab\x9b\x2d\x76\x48\xcf\x5b\xb7\x08\xae\x64\xaf\x5f\x93\x8c\x71\x68\x2f\x8c\x62\x29\xb4\x17\xc7\xba\x3d\x9d\x92\x4b\x52\x26\xb1\xc6\xd0\xd2\xa3\x7e\x05\x93\xe6\x69\xc1\x32\x3c\x42\x68\x72\x72\x7c\x7e\x7c\xba\xb6\x47\x8e\x15\xa6\x5f\xd8\x6b\x71\xec\xa0\xb3\xab\x97\x52\x2c\x2f\xb2\x25\xbe\xc7\x71\x7a\x46\x98\x8e\x11\x23\x64\x6e\x43\x59\x72\x3f\x2b\x0e\xea\xfb\x8c\x28\x41\xb4\xa4\xbe\xb4\x9e\xfd\xd4\x3c\xa4\x65\xe9\x2e\xf4\x93\xe3\x9f\x8f\xcf\x08\xe8\xe4\x94\x3c\x08\x7e\xac\x71\xfa\xc6\xe4\x4e\x90\x32\x38\xe7\x89\xd4\x84\x2c\x45\x49\x38\x80\x3b\x5b\x45\xc6\x12\xa6\xb3\x25\x5e\x37\x44\x94\x36\x43\xcf\x88\x16\x01\x10\xe5\xcd\xf6\xfe\x13\xd3\x0e\x7c\xc3\xf0\xef\x57\xb8\x9b\xec\x95\x45\xa8\x51\x46\x16\x70\x3e\x07\x9a\xe9\xb9\xcd\x66\xe0\x82\x8f\xfe\x09\x52\x20\x8c\x39\x77\xdf\x7c\x71\x65\xe2\x23\x06\x32\x3d\x53\x45\x35\x73\xed\x7d\x03\x9d\x45\x22\xb2\xca\x8f\xbe\xbd\xbb\xbb\xfe\x06\x74\x93\xcb\x73\xfc\x90\x7c\xf3\xfe\xce\xe7\xb0\xa0\xa1\x1f\xe4\x54\xc8\xbc\x07\xec\x3d\x4e\x70\xed\x88\x14\x42\xf6\xe1\x96\x99\x0b\x15\xb4\x9c\xe4\x19\xae\x98\x6f\x85\xd2\xd6\x97\x63\x75\x13\x8e\x89\x8d\xa2\x9d\x90\xe1\xd3\xf7\x2f\xaf\xc7\xe4\xaf\xa2\x34\x13\x32\xa1\x93\x6c\x59\x15\x32\x52\x10\x5a\xf4\x94\x90\x23\x43\xca\x91\xb9\x41\xcc\xce\xff\x16\x68\x0a\x52\x21\x83\x06\x1a\xa9\x3c\x6b\x84\xe3\xde\xa0\x2d\xea\x52\xbe\x2d\x95\x16\x39\x99\xbb\xd7\x6e\x43\x9c\xbb\xc3\x39\xb6\xc7\xd5\xc1\xc9\x4a\x28\x2c\x13\x77\xbf\xf9\xe2\x58\xf4\x1a\xf7\xb2\xf3\xee\x3e\x9f\x58\x31\xb5\x39\x6d\xce\xc1\x61\x81\x4a\x1d\x6f\x33\x5b\x35\x5a\xdc\x6b\x94\xf2\xbe\xf1\x72\x06\x48\x18\xf8\xf9\x6a\x47\xe8\xec\x09\xee\x29\x5e\x1a\x02\x89\x16\x6a\x4f\x9e\xad\xec\xbf\x11\x68\xdd\xe6\xb3\x36\xe8\xee\xd6\xf3\x4d\x9d\x33\x55\xa1\x05\x24\x94\x0b\xce\x12\x9a\xb1\x7f\x42\x4a\xca\x42\x70\x97\x5b\x87\x92\x6d\x42\x15\x8c\xd0\xf3\xce\xb5\xab\x45\x5c\xa3\x5d\x1b\xee\xa0\x85\x40\x71\x0f\x83\xe7\x0c\xbb\xb7\x54\xc7\xac\x7d\x1f\xad\xbc\x7c\x20\x74\x7b\xb3\xad\x39\xd4\x5b\x8b\x15\x67\xc7\x93\xcf\x42\x9c\x24\x91\x80\x17\xd6\xb1\xcd\xb4\x20\x34\x49\x10\xcf\xdb\x5e\x57\xc8\x78\x15\xc8\x45\xf8\xfe\x8a\x36\xaf\x46\x04\xec\x9b\xec\x65\x63\x0e\x24\xe1\x65\x3e\x01\x59\x03\x43\x4a\xbd\x3e\xa7\x51\xac\x2e\x6e\x58\x3b\x9c\xf7\xd2\x7a\x19\x83\xf2\x19\x90\xd7\x66\xe4\x3f\xfc\xfe\xf7\xbf\xfb\x7d\x84\x71\xcc\xeb\x55\x25\x42\x39\xb9\xbc\xb8\xba\xf8\xfb\xed\x0f\x6f\x11\x6e\x3e\xb4\xfb\x48\x49\xb2\xb1\x53\x64\xa3\x26\xc8\x3e\x6b\x7a\x2c\x02\x37\x06\x73\xd9\xd8\x47\xe2\x16\xa9\x32\x9b\xb0\x54\x16\xa2\xde\xe9\x24\x8d\x6a\xb8\x46\x8d\x0a\xdf\x9d\x4d\x67\x9e\x61\x58\xbd\xe0\x54\x2a\x03\x28\xa2\x69\xfc\xb7\xa6\xb7\x56\x39\x20\x92\x96\xd2\x56\xa5\xad\x9c\x57\xb5\x2d\xdf\x39\xad\x90\x86\x2f\x48\xf9\x57\x90\x08\x9e\x86\xa8\x00\xb1\x44\x5a\x47\x49\xd4\x33\x77\x6b\xfb\xf4\x26\xe2\xfa\x2a\x71\x83\xa1\x26\x19\xba\xa2\xa4\x5a\xd5\x38\x7c\xd2\xa2\x41\x60\x6f\x7f\xf8\xb7\xee\x0e\xb2\xa4\xb8\x15\xc9\x7d\x44\x13\x59\x20\x03\x7b\x67\x4e\x5a\x62\x7d\x81\x77\x6f\xaf\x2d\x71\x66\x65\xae\x3e\xde\xd5\xd0\x2f\x46\x0a\xa7\xe4\x7b\xef\x9b\xfa\xd6\x79\x0b\x29\x4f\xc9\x3d\x14\x61\xda\xa5\x61\x98\x3e\x8c\xb0\x1d\x45\x38\x76\x25\xbb\x11\x65\xce\xa6\x57\x5b\x46\xe0\xa3\xff\xac\x44\x1c\x56\x01\xa8\xe1\x9c\x47\x47\xa0\x53\x42\xa6\x94\x65\x84\xa2\x55\x5e\xb3\x1c\xc8\xc3\x1c\xb8\x35\xf6\xd7\xd1\x12\x5f\x10\xc3\xf9\x52\xad\x8d\xc7\x3e\x24\xfc\xcd\xde\x56\xc3\x50\x54\x8c\x2f\x5b\x0d\x70\x3c\x5b\xb6\x50\xcd\x06\x35\x60\x97\x36\xa8\x01\x1d\xd5\x80\x42\xc2\xad\x16\x9d\x65\xcd\x68\x01\x37\x96\x8c\x2d\xe1\x36\x13\x98\x0a\x09\xab\xf1\x36\x8d\x38\x18\x17\x39\x1f\x10\x19\x7c\x71\x7d\x59\xf9\xbe\x44\x2b\xd6\xc5\x22\x17\xab\x32\x99\x7b\x37\x29\x07\xa5\xce\x31\xb2\xa6\x2c\xac\x61\x19\xaf\xb6\x52\x42\xf7\x28\x9f\x42\x02\xe4\x38\x8f\x67\x35\x9a\x90\x79\x5d\xe0\xf6\x43\xd0\x89\xf5\x9b\xfb\xb0\x22\x87\x13\xeb\xa7\x6b\x1a\xe4\xce\xaf\x27\x36\x91\x54\xcd\x01\x73\x67\xe1\x13\xd3\xca\x0e\x6a\xd1\x58\xfd\x8c\x1b\x79\x61\x26\x69\x02\xa4\x00\xc9\x84\x11\x31\x4a\xae\x53\xf1\xc0\xc9\x04\x66\x8c\x2b\xbf\x62\x21\x24\xf9\x2d\x81\x91\x44\x4c\x55\xb5\xbb\xc7\xe4\xa6\x55\x39\xce\xa1\x8b\x25\xa2\xe6\x99\x6e\x8a\xce\x22\x4d\x09\x0a\x2f\xb8\x0d\x4a\x9a\x65\xcb\x7a\xe3\x35\x01\x42\xb7\xcc\x50\xf7\x0d\x61\x67\xf6\xa4\xe4\xf8\xa2\x29\x64\x74\x69\x33\xc8\xa7\x8c\xa3\xf5\x57\xaa\xd3\x71\x78\x68\x56\x67\x02\x85\x6c\xf4\xb9\x75\x67\x30\x45\x24\xd0\x24\x08\xc7\x78\x88\x01\x7b\xaa\x0d\x31\x60\x43\x0c\xd8\x10\x03\xb6\xde\x86\x18\xb0\x76\x1b\x62\xc0\xb6\x13\xd4\x67\xa7\xdd\x10\x03\x36\x58\x65\xd6\xdb\x10\x03\xd6\xa9\x0d\x31\x60\x4f\xb6\xde\xb1\xe8\x21\x06\x6c\x87\x36\xc4\x80\xed\xd8\x86\x18\xb0\x21\x06\x6c\x88\x01\x1b\x62\xc0\x02\xda\x10\x03\xb6\xff\xeb\x0d\xce\x9f\xee\x6d\x88\x01\x1b\x62\xc0\xf6\x6c\x43\x0c\xd8\x4a\x1b\x62\xc0\x86\x18\xb0\xc7\xda\x10\x03\x36\xc4\x80\xb9\x36\x58\x1b\xd7\xda\x10\x03\xb6\xa1\x0d\x31\x60\xfb\x8d\x33\xa8\x01\x61\x9d\x3d\x8b\x1a\xa0\xb4\x28\x6e\xd9\x2c\x00\x17\x32\xd6\x31\xb8\xad\x28\x71\xa0\x91\xca\x15\xdb\x55\xf6\x43\x6f\xc7\x52\x0e\xb2\xaf\x19\x11\xd6\xb8\x49\x26\x60\x54\x04\xf3\x5a\x45\xc8\x6d\x72\x39\x45\x07\x72\x03\xc9\xcd\x9c\x0a\x0f\x13\xc8\x5a\x65\x1d\xda\xe2\xb3\xbf\xdd\x18\x37\xba\x4b\x77\x0a\x1a\xf3\x91\x50\x6e\x2b\xa3\xba\x32\xd9\xe6\x7a\xbf\x16\xa9\xf2\x95\x24\xb8\xe0\x23\x0b\xd6\x3a\x36\x04\x8f\x85\x1a\x07\x58\x83\x03\x91\xd9\x6c\x8c\xdc\xb5\x14\x93\x83\xa1\xb3\x5d\x63\xfc\x11\x4b\x5c\x80\x9e\x98\xb6\x10\xd7\x2c\x81\x1d\x91\xd6\xda\x81\x61\x58\xac\xd9\x43\x70\x31\xc7\xb0\xab\xa0\xc0\x43\xa2\xb9\xed\x1d\x39\xe5\x51\x2a\xd5\x79\x21\xec\xff\xd5\x71\x53\x8d\x80\xa9\xce\x7e\x94\x03\xc3\xcb\x85\x44\x49\x1d\x2c\x42\xaa\x27\x11\x66\x11\xa2\xa2\x62\xca\x4a\x3d\x8d\x86\xea\x67\x24\x54\x1f\xa3\xa0\x0e\x11\x01\x75\xf0\xe8\xa7\x38\x6e\xf5\x08\x2e\xf5\x48\x12\xe9\x33\xb8\xa7\x5c\x20\xfd\xdd\x5c\x82\x9a\x8b\xac\x33\xc3\x89\xc5\x6c\x3e\x30\xce\xf2\x32\xc7\x2a\x14\x86\xa7\xb0\x45\x15\xec\xaf\x3c\xcb\x70\xd7\xbd\x8d\x38\xc0\x72\x15\x29\x60\x19\x70\xca\x32\xb3\xb5\x10\x2c\x74\x4e\x17\x28\x94\x96\x49\x02\x90\x86\x88\xa5\x4d\x6b\xf5\xef\xc6\x15\x85\x16\xa3\x9f\x29\xf2\x3a\xec\xaa\x09\xd3\x7b\x1a\xe6\xbc\xdf\xfd\xb6\x53\x1f\x33\x59\xc4\xb9\xa5\xbf\xb9\xb9\x7e\xdb\xba\xa5\xf1\x83\x6f\xf1\x18\xbf\x9d\x43\x72\x7f\xe3\x42\x69\x0e\x77\x33\x87\x9b\x99\x82\x4c\x4c\x31\x04\x83\x50\x2b\x4a\xdb\x87\x2c\xa4\x5e\x71\x81\xce\x70\x15\x41\x2e\x58\x02\xe3\x17\x30\x54\xc4\x52\xfe\xc3\x0f\x02\x41\x37\x01\xbe\x78\x5f\xc4\xae\x5b\x4b\x4e\xe5\x61\x68\xd8\xa8\x1c\xa5\x18\x34\x9a\xd1\xa4\x5a\x9b\xd9\xe6\x43\x17\x44\xc6\x89\x02\xa8\x14\x9a\x19\xd3\xf3\x72\x32\x4e\x44\x7e\x6e\x58\x87\xfd\xbf\x49\x26\x26\xe7\x39\x55\x1a\xa4\xd1\x71\xdc\xb5\x3e\x4a\x0c\x05\x8c\xcf\xc6\x79\x7a\x3a\xfe\x55\x10\x0d\x97\xce\x56\xee\xd2\xb0\xb6\x18\x09\x26\x60\xf8\xbe\x90\x2b\xd6\x02\x33\x29\xe1\x9b\x34\xf8\xfe\x0e\x2d\x2a\x12\x18\x96\x7c\x90\x90\xe4\x81\x6b\x93\x08\x0e\x81\x98\x4c\xa5\x1f\x61\xc7\xcf\x16\x72\x1c\xe5\xac\x46\x0a\x35\xee\x51\x98\x71\x6f\x74\xa1\xbe\x84\x16\x47\x0b\x2b\x8e\x15\x52\x1c\x25\x9c\x38\x46\x28\x71\xbc\x30\xe2\x38\x21\xc4\xf1\xc3\x87\x9f\x2d\x74\xf8\xb3\x08\x1b\x8e\xe8\x1f\x8b\x14\x2e\xfc\x12\xa1\xc2\xfd\xb5\xc1\x90\x08\xe1\xc1\x2f\x17\x1a\x1c\x65\x1e\xa3\x6a\xb1\x81\x2c\xe1\x00\xa1\xc0\x2f\xe1\xff\x7f\x36\xdf\x7f\x04\xbf\x7f\x4c\x9f\x7f\x34\x7f\xff\xb3\x85\xfc\x86\x87\xfb\x46\xb5\x29\xbc\x48\x98\x6f\xcc\x10\xdf\xe0\xf5\x65\x9c\x69\x46\xb3\x77\x90\xd1\xe5\x6d\x58\x20\x68\xac\x95\xb8\x5a\x0b\x16\xb5\x66\xeb\x76\x5c\xc3\x9c\x2a\xe2\x5d\xdd\x0e\xe2\xc5\xfb\xd2\x9d\x08\x4c\x28\x7a\x9c\xcd\xfb\x75\xf6\x5a\x93\xfe\x79\xae\x49\x6f\xcc\xe3\x16\x57\xa5\x27\xbb\xe6\x5b\xf1\x40\xc4\x54\x03\x27\x27\x8c\xfb\x9d\x73\xda\xb0\xd2\xd4\xee\x91\x60\x7f\x87\xe9\xf5\xf5\x2b\x3f\xc8\x97\xe7\xf7\x40\xcf\x90\x52\xbd\xf6\x7c\x39\x1a\x9f\x76\x7d\xb9\x07\xa7\x65\xd6\x76\x7f\x59\x97\x58\x1c\xdf\xd7\xeb\x31\xf9\xe0\xc4\x89\xd7\x48\x4f\xc5\x8a\x28\x4f\x89\xc3\xe7\xfa\xf2\xf6\x49\x70\xa8\x7b\x5b\xb9\xa9\x62\xd3\xdb\xf1\x2c\xf6\x06\x36\x52\xa6\x20\xd4\x3c\x85\x02\xe8\x60\x74\xed\x8d\xd1\xf5\x40\x11\xd8\x5f\x9e\xb6\xf5\xf2\x11\xd7\x83\xb6\xf5\x4b\xd1\xb6\x1a\xb0\x78\xdf\x48\x9a\xc0\x75\x9f\x84\x37\xcf\x40\xea\x44\xc0\x5a\x86\xab\xd8\x05\x07\xb0\x89\x63\x35\xe8\x21\xe2\xfb\x4d\xcb\x2c\x5b\x5a\x1b\x62\x0b\x01\xb3\xfb\xd6\xba\x9b\xc3\x1a\x74\x20\xba\x52\x37\x50\x57\xeb\x26\x85\x14\x4e\x22\x91\x25\xe7\x46\xc4\x70\xc7\xc9\x10\x6f\x74\x11\x05\xbc\xbb\x39\x9d\xb6\x80\x0d\x5d\x10\x3a\x06\x7a\xce\x81\xd4\xf9\x4b\x6d\x42\xcc\xa8\x53\x21\x13\x36\xc9\x96\x64\x4e\x33\xa3\x2c\xb9\x20\xed\x7b\x96\x65\xae\x9b\x80\xa0\x70\xd0\xd6\xf5\x6c\x25\x9a\x4c\xf0\x19\x4e\x06\xb5\x84\xc0\xa7\x02\x12\x33\x66\x92\x01\xe5\x65\x61\xe9\x34\xf2\xd1\x52\x94\xd2\xd3\x19\x14\x15\xdf\x18\x9d\x29\xc2\x59\x76\xe6\xa7\xbc\x0d\x81\xb9\xbe\xe7\x6b\x93\xb2\x82\xd4\xa1\x57\x3e\x30\x05\x67\xd8\x67\x67\x9a\x2c\x2d\xbe\x6a\xbf\xdd\x37\xf6\xb3\x42\x8a\x05\x4b\xeb\x18\x7d\xb3\x2d\x30\x3e\xbe\xf3\x58\x3f\x60\xbf\x9e\xb5\x72\xc1\x47\x1c\x66\x14\xc5\x63\xc7\xd0\x6c\x44\xa7\x1d\xdf\xc6\x0f\xf2\x94\x25\x54\x83\xc2\x9c\x84\x16\xb4\xed\x82\xd1\xce\x94\x98\xf7\x69\xec\x28\x72\xc2\x05\x11\x98\x59\x58\x72\xa6\x97\xe8\xd1\x9b\x97\x9a\xa4\xe2\x81\x9f\x86\x1c\x4c\x1b\xe6\x40\xc9\x04\x34\xad\x93\x03\xbd\x48\xa6\x08\x70\x3a\xc9\xcc\xd9\xc3\x88\xff\xbb\x8d\x1b\x80\x4c\x81\xea\x52\x02\x99\x51\x1d\xc0\x25\x36\x48\xf3\x76\x3d\x1f\xdf\x76\x4c\x39\x7f\xdd\x94\x94\x5c\x41\xa0\x20\x1b\x4d\x05\xe8\x98\xf1\x6a\x4e\xb4\x28\x75\x4f\xee\x91\x6d\xa6\x23\x9b\xb9\xd3\x50\x12\x59\x0e\x8a\x88\x32\xc0\x92\xd7\x52\xff\xdc\x70\x31\x35\xbc\xc1\xee\xb4\xb1\x75\x75\x9b\xc6\xd8\x61\x57\x0d\xa9\xbc\x81\x4f\xe0\xc3\xad\x6c\x06\xf5\xbb\xab\xdb\xbf\x7f\x7f\xf1\xbf\xde\x7f\xdf\x6d\xe1\xdf\xd3\x64\xde\xc4\x16\xe7\x84\xe2\x45\x81\x4c\x7e\x4e\x17\x40\x28\x29\x39\xfb\xef\xd2\x85\xbc\x9d\x54\xe3\x75\x64\xab\x51\xd2\x7b\x82\x04\x5f\x73\x4b\x74\xe2\x1c\x31\xd6\xf4\x7b\xa6\x10\xa8\x1a\x89\x70\x81\xff\x42\x01\x99\x4a\x91\xaf\x28\x5a\xe4\xaa\x0a\xae\x5b\x9a\x1b\x86\x5a\xd5\x6c\x0e\xb2\x9b\x44\xfe\xee\xe3\xfb\x5b\xcc\xc1\x2f\xa4\x05\x76\xc7\xe4\x02\xec\x13\x47\xb7\xa9\x83\x96\x9e\x74\x4c\x2e\xf8\xd2\x7e\x69\x99\x59\x47\x11\x25\x63\x4a\x03\x0a\xa7\x4e\x91\xf4\xe1\x81\x47\xaf\xc6\xf8\xbf\x23\x42\xd3\x54\x1a\x4d\xb3\xca\xd1\x48\x56\xb3\xcc\x3a\x8d\x6c\xf5\x57\x36\xc9\x1a\x93\xcb\x41\x63\x1a\x47\xa7\x0e\x3f\x88\xd4\xad\x04\x0a\x81\x18\xbf\x63\xa5\x5b\xa5\x25\xd5\x30\x63\x09\xc9\x41\xce\x80\x14\x54\x27\x73\x92\xd3\x25\x49\x84\x94\x65\x61\x21\x46\x52\xaa\x69\xb7\x91\xbf\x16\x92\xe4\x9e\x3b\x1b\x6e\x66\x44\xf2\xdb\xcd\x81\xa0\x35\xcb\x6e\xfe\x93\x29\x55\x82\x3a\x7f\xfd\xea\x8f\xbf\xfd\x7d\x47\xf5\x3a\xe2\xc1\xed\x1a\xfa\x14\x10\xf2\xd4\x0e\xff\xf2\x1b\x0c\x83\xae\x5b\xc8\x30\x6e\x87\xd8\x9d\x8f\xdc\x50\x31\x3e\xcb\x82\x0d\x20\xc1\x66\xc0\x50\x23\xe0\xa8\x7e\x83\xeb\xae\xb6\xc0\x70\x4b\x60\x8b\x86\xee\xa6\x94\x78\x56\xb0\x5a\x82\xf3\x76\x2f\xc7\x90\x05\x6f\x28\x76\x97\xd7\x9e\x4b\x85\xd8\x8f\x50\x9b\xa8\x0c\x53\x16\x7d\xc4\x0e\x6b\xe3\x1d\xce\xc8\x2b\xf2\x1f\xe4\x13\xf9\x0f\xb4\x82\xfd\xa1\xfb\x50\x71\x6c\x4c\x31\xc2\xf8\xe7\x42\xe9\xcb\xeb\x48\x0b\xfd\x17\x73\x5f\x99\x1e\xcd\x7a\x68\x41\x26\xcc\x99\x23\xe0\x93\x06\x69\xd4\x40\xb7\x86\xa1\x33\x17\x64\x51\x33\x04\x7e\x2e\xbb\x3b\x34\xb8\xe0\x72\xda\x8e\xfe\x7f\xa1\xfd\x8d\x03\x7f\x2b\x94\xbe\x72\xdc\xba\x09\xa1\xd3\xa4\x23\xc7\x8b\xb8\xc5\xee\x43\x46\xfd\x60\xf6\x5e\x5d\x63\x83\xa4\x02\x13\x20\x6c\x0e\xe7\x9c\x05\x30\x87\xfe\x9c\xd8\xb0\x38\xd1\x78\x5b\xf7\xb1\xad\xb5\x62\xd3\x47\x8b\x8c\x53\x52\x1a\x65\x69\x0a\x91\x8e\x51\xbf\x09\xa0\xc2\xcc\x46\xda\x10\x06\x1e\x51\x8d\xc6\x56\x5f\xab\xbc\xc3\x78\xe0\x0c\xc7\x4a\x28\xef\x2a\xc3\xda\x26\x61\x0a\x52\xda\x3c\xe1\xc9\xd2\xa7\x1b\x05\xef\xb6\x20\x2e\x57\x48\xa1\x45\x22\x3a\xc3\xa6\xc4\xdc\x2a\xd7\x8e\x16\x9c\x7b\xf4\xd5\x56\xde\xf1\x3f\xbf\xbb\x3e\x23\x77\x6f\xaf\xcf\x88\x90\xe4\xf6\x6d\x58\xf0\x53\xd3\x04\x73\x74\xf7\xf6\xfa\xe8\xa0\x2b\xd0\xc8\x61\xba\x7b\x7b\xdd\xa1\x93\xf5\xf0\xd9\x9c\x16\xa3\x7b\x58\x76\x94\xee\x62\x48\x98\xa3\x6a\x63\x45\x79\x21\x3b\xcd\x39\x2d\xf6\xee\x4d\x02\x4d\x59\xaf\x91\x5c\x7c\xd6\x61\x45\x69\x3c\x48\x97\x5c\x2c\x20\xb5\x5a\xb3\x1f\x05\x78\x5a\x08\x66\x74\xa4\x01\xe7\xe5\xb1\x36\xe0\xbc\xec\xdf\x06\x9c\x97\x4d\x6d\xc0\x79\xd9\xa3\x0d\x38\x2f\xb6\x0d\x38\x2f\x6d\x42\xfa\x98\x63\x34\xe0\xbc\x3c\xd9\x06\x9c\x97\xad\x6d\xc0\x79\xd9\xab\x0d\x38\x2f\xeb\x6d\xc0\x79\x79\xa4\x0d\x38\x2f\x55\x1b\x70\x5e\x06\x9c\x97\xcf\x97\x6b\x0f\x38\x2f\xab\x6d\xc0\x79\x19\x70\x5e\x06\x9c\x97\x66\x1b\x70\x5e\xb6\xb4\x01\xe7\x65\xc0\x79\x19\x70\x5e\x1e\x6f\x03\xce\x4b\xe7\x36\xe0\xbc\xec\xd7\x86\xcc\xc3\x3d\xdb\x80\xf3\x32\xe0\xbc\xac\xb6\x01\xe7\xe5\xc9\xd6\x0f\xf3\xf8\x80\xf3\x32\xe0\xbc\x3c\xda\x06\x9c\x97\x01\xe7\xe5\xd1\x36\xe0\xbc\x74\x68\xbd\x33\xba\x0e\x38\x2f\x03\xce\xcb\x63\x63\x0c\xda\xd6\x7e\x6d\xc0\x79\x19\x70\x5e\xd6\xda\x80\xf3\xb2\xde\x06\x9c\x97\x01\xe7\x65\xc0\x79\x19\x70\x5e\xaa\x36\xe0\xbc\x7c\xe9\x76\x27\x09\x8a\xfd\x13\xae\x45\xc6\x92\x65\x70\xb6\xcf\x0d\x28\x51\xca\xc4\xdc\xd8\xd8\x2d\x29\xb0\xdf\xca\xa2\x10\x24\x64\xf7\x0c\x42\xe1\xa6\x31\x71\x4d\x28\x05\xe9\xe6\xe0\x39\xa6\xa0\x17\x70\x0a\xfe\x05\xaf\xba\x47\x10\x8c\x7c\xf9\x6c\x3b\x7d\xdd\x8c\xa5\xc1\x5a\x7b\xf3\x45\xfa\x90\xce\xd9\x84\x3d\xaa\x76\x91\x16\x15\xb3\x65\x5b\x37\x17\x2d\x8a\x8c\x85\x24\xc6\x12\x72\x5b\xa2\x74\x01\xce\x05\xae\xde\x90\xa4\x28\xcf\x48\x0e\xb9\x90\x01\x89\x11\x11\x34\xb8\xd6\x56\xe9\xc3\x3a\xdd\x58\x82\xfc\xe4\x6b\x81\xf3\xbf\xb4\xfa\x42\x8d\x52\x55\xad\x15\xf3\xec\x30\x28\xd6\xec\x72\xba\x1a\x8c\xca\x74\xcb\x0a\x74\x25\xf4\x8d\x3b\xdc\x07\x5b\xaf\xc8\x11\x0b\x7e\x0a\x0f\x86\x5a\xf5\x56\xe4\x45\xa9\xa1\x75\xb1\xd9\x29\xb6\x4a\x07\x53\xa1\x0c\xfd\x30\xd9\xa0\x89\xe0\x53\x36\x73\xda\xf7\x79\x4e\x39\x9d\xc1\xa8\x9a\xed\x51\x0d\xf5\x70\xde\xf9\xa2\x3e\x58\x2a\x68\x92\x51\xd6\x3d\x70\x30\x16\x9b\x78\x8b\x54\x20\x0c\x58\x1d\x50\x8f\xb9\x69\xd5\x34\x9f\x55\x61\xe3\xcc\xf2\x8d\xb1\xff\xca\xfe\xf8\x2c\x40\x7b\xa4\x1a\x6d\x15\xa8\x18\x6d\xd8\xa9\x61\x0a\xa3\x55\x13\x53\x28\xc0\x68\x04\xd6\x80\xda\x5d\xee\x5f\x72\x9a\xb3\xc4\x9f\xb0\x8b\x2c\x13\x89\xb5\xc9\xb4\xb5\xca\x18\x24\x1b\x65\x37\xcf\x4b\x4d\x27\x19\x8c\xc9\xa5\x85\xa8\x10\x3c\x5b\x9a\xf3\xa7\x40\xfb\x10\x05\xb7\xf9\xc3\x34\xc9\x90\xf8\xd7\xc0\xd8\xd7\x8d\x42\x39\x6e\x2a\x8b\xa9\x01\xdc\xb0\x32\xc1\x81\x00\xd7\x72\x69\xf6\xdf\xb5\x48\x6f\xcd\x16\x6c\x3d\x1d\x0c\xb5\x11\x18\xf2\x1a\x23\xdc\x35\x30\xd4\x35\x4e\x80\x6a\x78\x70\x6a\xdc\xc0\xd4\xda\x85\x60\x91\x82\x9a\x19\x3f\xad\x6d\x51\x88\x74\xbc\x81\x35\x11\x31\x0d\xa4\xc0\x8c\x78\x2d\x52\x23\x34\x49\xb0\xfc\xa9\x3a\xa3\xd6\x80\x78\x69\x88\xbb\x47\x8b\x1f\xd5\xb5\x34\x45\x17\x94\x65\xe6\x00\x07\x12\xb0\x8e\xba\x18\xe6\x95\x89\xe4\xab\x70\xc1\xf9\x7d\xda\x2c\x2e\xad\xab\x95\x19\x96\xcc\x85\x02\x8e\xfc\x92\x56\x19\x3c\x55\x7e\x81\x63\x31\xa9\xbd\x8b\x43\xa3\x88\x2f\xa7\x04\xf2\x42\x2f\xcf\x08\x2c\x40\x2e\xf5\x1c\xa3\x0d\x2a\xdc\x50\x64\x6b\x4c\x91\x9c\xa6\x8d\xdd\x71\x46\x84\x37\x40\x07\x0e\x8f\xf7\x83\xd3\xc9\xca\x4c\x5b\x0d\x8d\xa9\x2a\x8d\xe2\xd0\xbb\x26\x36\x9c\x0d\x09\x65\x9a\x31\xe1\x68\x08\x42\xa9\xe6\xac\x1b\x70\x2d\x89\x78\x16\xbe\x47\x2a\x1a\xa9\x23\x66\x4b\xe4\xf4\x13\x9a\x27\x69\x2e\x4a\xae\x2d\x4e\x8d\xd5\x18\x2a\x29\xcf\x26\xd8\xbc\x60\xbc\xdc\xb3\xca\xf6\x24\xce\xd5\x4e\x53\x0f\x4d\x71\x1d\x23\x4f\x99\x6a\x0d\x92\xbf\x21\xff\xfb\xe4\x6f\xbf\xf9\x79\x74\xfa\xa7\x93\x93\x1f\x5f\x8d\xfe\xfd\xa7\xdf\x9c\xfc\x6d\x8c\xff\xf8\xd7\xd3\x3f\x9d\xfe\xec\xff\xf8\xcd\xe9\xe9\xc9\xc9\x8f\xdf\x7d\xf8\xe6\xee\xfa\xfd\x4f\xec\xf4\xe7\x1f\x79\x99\xdf\xdb\xbf\x7e\x3e\xf9\x11\xde\xff\xb4\x63\x27\xa7\xa7\x7f\xfa\xaa\xbb\xf7\x31\xd4\xd5\x1e\xcf\xd1\x1e\xc9\xcd\xfe\x2c\x4e\x76\xc7\x63\x0f\x7e\xf8\xdd\x15\xb8\x76\xfc\x9d\x77\xe2\xb1\xe3\x2f\x83\x6d\x32\x97\xd3\x7a\x7c\xa6\x88\xc8\x99\xd6\x90\xba\xbb\xb7\x81\x7d\xb3\x62\x0f\x72\x0c\x0b\x61\xab\x28\xde\xde\x0d\x0c\x96\xda\x8c\xd4\x99\xac\xea\x7e\x45\x0b\x18\x27\x2c\x2f\x32\xc8\x81\x6b\x64\x3c\x23\xaf\xdb\xa2\x39\x71\x5c\xbf\x41\x62\x0d\x1e\xf0\x29\x01\x48\x1d\x91\x03\x6f\x6c\xb4\x81\x37\x0e\xbc\xf1\xa9\x16\x6c\x13\x8f\xc1\x18\x6f\x9a\x44\x38\x5b\x96\xf2\x92\x32\x5a\xc8\x2b\x88\x04\x31\xc5\x40\x89\x05\x4b\x4b\x9a\x35\x91\x64\x3d\xb8\x68\x37\x0e\x80\xa6\x9d\x76\x68\x08\xba\x69\x61\x01\x59\x45\x84\x35\xd3\x8f\xc9\x5f\x6c\x38\x4f\x53\xd1\x6c\x1b\xd4\xbb\x39\xe4\x36\xbd\x6e\x1b\x11\xc2\xa9\xba\xc7\x6a\x85\xa4\x2a\xda\xa8\x4e\xc2\x30\xbb\xad\xdb\x54\x5c\x54\x5c\x23\x5b\x9e\x11\x05\xda\xe6\xd8\xcc\x61\x65\x99\xa8\x22\x47\x17\xd9\x03\x5d\xaa\xa3\xca\x27\xc9\x38\xd3\x2b\xc5\x07\x3a\xd1\x80\xd8\xb0\xa6\xc3\xa9\x30\x32\x2f\x56\x55\x98\x4e\x21\xe9\xa8\xcd\x5a\x0c\x8e\x75\xda\x5c\x3c\xba\x66\xbc\x34\x6f\xeb\x67\x15\x52\x22\x78\xa7\x81\xe0\x13\xd3\xa4\xe4\x9a\x65\x46\x58\x27\x12\x66\x65\x46\x9b\x86\x40\xf7\x66\x3e\x4c\x2e\x1d\x93\x8f\x3c\x81\xe6\xc3\xdd\x2c\xd5\x2b\x03\x18\xe1\x21\x03\x0d\xe9\x19\x76\xdd\x7e\x75\x65\x03\xcd\x5a\x27\xbf\x5a\xca\x4e\xc3\xfb\xb9\xac\x02\x89\xc6\xf6\x40\x55\x51\x0e\x24\x65\xd3\xa9\x19\x19\x95\x6d\x2e\x64\x4e\xd7\xa9\xa2\x3c\xed\x34\xba\x39\xb9\x98\x5e\xd2\x44\xf9\xc5\xca\x2e\x47\x8a\xa5\x90\x50\x79\xd4\xac\x09\x72\x91\xe9\xb9\x28\x67\xf3\x7a\x57\x84\x4d\x39\x51\x1a\xc3\xab\xcc\x64\x2a\x6f\xb9\x58\xd9\x6c\xca\xc8\x2c\x3c\x01\x2b\x5a\x09\xb0\x0c\xe3\x81\x76\x1c\x7b\x2d\x04\xc0\xc6\x74\xdb\x35\xf7\x39\x57\x18\xc3\x07\x69\x23\x41\x8e\xc3\x27\x1d\xe1\x85\xc7\xe4\xd2\x02\x5e\x9c\xb5\x7b\x6d\x4d\x89\x9d\x8c\x46\x0c\x9b\x8f\xc6\xec\x18\xc0\xb7\x32\x00\xab\x52\xcc\x10\x97\xd8\x76\x4e\xf9\xd2\x67\x74\x60\x8c\x99\xcd\x44\xab\x92\x4c\xb2\x6e\x36\xf4\xea\x2c\xbd\x78\x99\x9d\xd6\x09\xbd\x29\xb3\xc3\x79\x2f\x6f\x9a\x05\x3e\x32\x57\x80\x47\x1a\x8a\x7c\x56\xcf\x1c\x92\x7b\x7b\xf2\x52\xb0\xec\x0d\x1c\xce\x6d\xe8\xe9\x9a\x8b\x32\x4b\x2d\xaa\x6e\xcd\x9d\x91\xd3\xda\x10\x4a\x4b\x06\x95\x40\xc0\x68\x08\x08\x3d\xc2\xba\xb1\x6f\x21\x53\xb3\xbd\x2d\x4b\xc6\x8e\xad\x55\xdb\xa7\xbb\x38\x92\x90\xcb\x27\x82\xdb\x7b\xf2\xcc\xdd\xdc\x39\x65\xbc\xab\x68\x57\xbf\x03\x9b\x71\x21\xd1\x68\x3d\x25\x5c\xb4\x69\x68\x1f\xf9\x15\x2a\x3a\xcb\x1c\x55\x1c\xd2\x46\x69\xa7\x5e\x4e\x3b\xfe\xc3\x1c\x8c\xb6\xd6\xa6\xa5\x2b\xdb\x6e\xac\xa8\x34\x1c\x71\x6c\x88\x51\x5a\x52\x84\x49\x76\xf9\x14\xb2\xeb\xc6\x37\x42\xf7\x85\x26\xb9\x50\x9a\xfc\xf6\x55\x63\x8e\x83\xec\x68\x23\x82\x27\x11\x1d\x7e\x95\x98\x82\x48\x17\x14\x73\xa1\xba\xf6\x7a\x99\x02\xd7\x2c\xa1\x59\x83\x50\x73\x49\x4c\x85\x9c\xb0\x34\x05\x0c\x6d\xc7\x82\x10\xa8\x72\x76\xd4\x74\x51\x74\xad\x07\x68\xc4\x80\xd4\x1b\xeb\xc3\x9f\x6f\xef\xd0\x87\xd9\x96\xf7\x6a\x9d\xbf\x9b\x68\xb4\x30\xaf\xa0\x0d\x53\x68\xee\x67\x2b\xce\xb6\x46\xfa\x32\x42\xfa\xcc\xfb\x98\x9d\xd2\x30\xf4\xcc\xc5\xc3\x3a\x1f\x61\x46\x64\xe3\x69\xe7\x84\xc7\x1e\xc4\xf1\xd9\x8d\x7f\xa0\xd8\x3b\x3b\x78\x1f\xa2\xb9\x6e\xab\xdc\x48\xb3\xb1\xa9\xcb\x8c\xa4\xf7\xc0\x0d\x2b\x5b\x5f\xf8\x69\x85\xa1\xc5\x24\x9a\xbb\x42\xa0\xa1\xf0\x34\x53\xcd\x94\x39\xcd\xf6\x62\x44\x77\x53\x21\x5c\x05\xb7\x2a\xee\xf9\xc8\x6d\xce\x23\x73\x59\x7b\x66\x1f\x86\x69\x1d\xc1\xf1\x19\xc1\x3a\x62\x66\xf5\xad\x48\x43\x6c\x5c\x2b\xe1\x0e\x95\xd0\x63\x53\x66\xf0\xbe\x4d\xad\xcc\x83\x02\x8f\x59\xd7\xf6\xaa\x7e\x19\x71\x0e\xe6\x4c\x52\x2d\xba\xdb\xbb\xe2\xc4\x3a\x78\x32\xfa\xe5\xc2\x6e\x6d\x0a\x09\x99\xbd\x8e\xe7\xac\x20\x13\xd0\x0f\x00\x7c\xb3\x9c\x96\xc2\x89\x3a\xf5\x86\x9a\x40\x22\xea\xd0\x50\x1b\x62\x3b\x26\xd7\xad\x63\x8e\x97\x7b\x38\xb2\xdb\x25\x7f\xb3\xca\xa2\x50\xf1\xf2\x6c\xc6\xb3\xb0\x0d\xef\x8a\x01\x52\x61\xe1\x5c\xd5\xcb\x02\x6a\x1b\x6b\xef\x1c\xfc\x7a\x57\x42\x87\xbd\x61\xf0\xab\x19\xf9\xce\x19\x0c\x9e\xe5\x2d\x23\x45\x92\xb8\x38\xee\x1e\x9d\xc2\xf6\x55\xeb\xe6\xce\x6d\xfd\x8a\x39\xb7\x42\xf0\x1a\xec\x3b\x74\xe7\x54\x3a\xc5\xef\x7f\x4f\xc0\x3a\xaa\x22\xe8\x15\xbe\xc5\x81\xbc\x8c\x02\x7a\x19\x0f\xe7\x9a\x44\xc3\xba\x26\x8f\x84\x85\x74\x43\x77\x8d\x1c\x69\xae\x20\x29\x25\xd3\x4b\xa3\x0b\xc0\xa7\x4e\x06\xeb\x18\x67\xe5\xb6\x4d\x46\xcb\xa9\xe2\x49\x24\xa2\xb0\x15\x3c\x56\xca\x63\xd7\x16\x97\x92\xa3\xad\xb8\xdb\x8e\xbe\x9c\x9a\x15\xb1\xe6\x11\x74\x94\x60\xd0\xf2\x2a\x61\xde\xe9\x62\x65\xac\xff\x2e\xd9\x82\x66\x86\x0d\xd7\xbf\xb8\xc6\x0c\xcd\xe6\x8f\x9e\x33\xb2\x5d\x53\x75\x5f\xbb\x77\x61\x54\x88\xb4\xf6\xe6\x9e\xfb\xa9\xc3\x8f\xe0\x93\xfe\x0c\xa3\xda\x91\x4b\x5d\x4b\xb6\x60\x19\xcc\xe0\xbd\x4a\xa8\x15\x61\x0e\x1d\x19\x71\xb1\x85\x2e\xdc\x99\x52\x64\xaa\xb2\x3d\x51\x9f\x9f\x8e\x46\x98\x19\x65\x1c\x6b\x3b\x07\x48\xab\x6e\x50\x65\x13\xe4\x99\x56\xa4\xa0\xd2\xec\x42\x9f\x08\x6f\xfd\x19\x13\x21\x32\x57\x0c\x28\x5b\xd6\x74\xb1\xee\x21\xac\x68\x40\x17\x7f\xe7\xf0\xf0\x77\x43\x85\x22\xd3\x8c\xce\x6a\x7f\x8a\xb9\xd8\x56\xe5\xc9\xe0\xdc\xfc\xad\x13\x8d\x95\x6e\x4a\x73\x8f\x3d\xd0\xa5\xaa\x51\x0b\x9a\x66\xf7\xee\x37\xca\xeb\x53\xe4\x27\x54\x91\x6a\xec\x6e\xfe\x1e\xd3\x7e\x7b\x8a\xc6\xfd\xb7\x17\xd7\x7f\xbf\xfd\xeb\xed\xdf\x2f\xde\x7d\xb8\xbc\xea\xdc\xd9\x95\xd0\x60\x43\x5b\x1a\x4e\xdd\xa4\x4a\xa7\x31\xab\x50\x65\x64\x8d\x85\x1a\x63\xdc\x2a\x42\xe6\xf2\x54\x3c\x04\x06\xf7\x9b\x3d\x05\xb4\x9b\xf5\x84\x16\xc5\x85\xcc\x85\xbc\x96\x62\xca\xb2\xce\x12\x7f\xac\x13\xbc\x42\x8e\x0f\xf3\xbd\x70\x1f\xd7\xd7\x8d\x45\x71\x5c\xcf\x26\x69\x5c\x19\x0c\xb1\x02\x4d\x37\xdd\xc3\x8a\x56\xdd\xf9\xc7\x6a\x95\xc4\xee\x87\xe8\xa0\x7b\xe6\xe0\x18\x59\x86\x8c\x8e\x3f\x8f\x61\x1a\xc8\x44\x42\x33\xac\x12\x1d\xb6\xf1\x49\x64\xc5\x64\x95\xae\x06\xa6\x07\xf5\xdb\x99\x64\x82\xa6\xd6\x87\x65\x99\x7f\x0a\xbe\x76\x99\x17\xbb\x30\x6b\x21\x88\x90\x3b\x8b\xa7\x80\xe3\x79\x10\x92\x42\x42\x25\xd5\xac\x0c\x2f\x6c\xc9\xb6\xa0\x21\x3f\xb4\x73\x40\xdc\x5b\xb6\xe0\xb2\x42\xcf\x5c\x35\x8c\x3b\x60\x6c\x8a\xf6\x14\xb4\x73\x1a\x45\x7d\x59\x58\x03\xe7\xf7\x7e\x19\x02\xca\xcb\x46\x52\x9e\xb1\x93\x9e\xec\x4e\x3b\x3f\xd5\x8e\xb4\xc9\xe0\xf7\xcc\xcc\xe0\xb4\x66\xd2\x7e\xdb\x78\x19\xc4\x66\x84\x07\xee\xc7\x1f\xb0\x90\xb9\xe7\xff\x11\x8c\x53\xd5\x12\x93\x51\xe3\x68\x15\x12\x46\xeb\xc7\x2b\x54\xdf\xbf\x29\xb9\x66\x39\x78\x84\xd1\xd1\x8a\x4c\x24\xed\xd7\xc7\xaa\xaa\xe7\x13\x65\xa3\x13\xf2\x67\x8e\xe7\x95\x43\x4a\x46\x84\x8b\x7a\x89\x80\x4f\x85\x4c\xd0\xf0\x70\xd0\x0d\x9e\xd0\x82\x4e\x58\xc6\x42\x98\x79\xac\x0d\x8e\xe5\x31\x1b\xf4\x60\x0c\x50\x9a\x9e\xa7\x52\x14\xf6\x26\xf6\xd0\x5f\xe1\x59\x99\x6d\x88\x99\x66\x25\x27\x67\x89\x6a\x11\x32\x93\x94\xeb\x3a\x7e\x6f\x6d\xe3\xfc\x12\x65\x90\x18\x42\x00\x4d\xe3\x15\x9a\xbd\x48\x0d\xcf\x68\x2e\x5b\xf0\xb9\xea\x5b\xd1\x9a\xb7\xfe\xe5\x1a\x18\x33\xe4\xfa\xe3\xed\xe5\xff\xbb\x72\x6e\xba\x8b\x76\xb6\xf5\xbb\x64\x85\xe1\x07\xd1\xb6\xcd\x8d\xab\xf3\x3d\x6c\x9c\x2f\x7b\xe3\x54\x06\xa2\x83\xe3\x6d\xdf\x94\x4d\x8f\x33\xe3\x0d\xd2\x48\x1e\x24\xeb\x5c\x57\xd0\x94\xed\x5e\x9b\x01\xba\x12\x88\x79\x84\x6b\x86\xe1\xd2\x0d\x6b\xad\x16\xb6\x94\xb5\x13\xbb\xc2\x4a\x31\x34\x6f\xd7\x29\xcd\xd4\xe7\x7a\x45\x86\x98\x76\x0a\x29\x92\x0f\xa2\xe4\x71\x00\xbc\x03\x76\x5c\x45\x08\x49\x81\x0b\xed\xac\x29\xa8\x4b\x88\x29\x7e\x4b\x6c\xce\x5a\xa3\x36\x47\x4b\xce\x09\x10\xb3\xee\x1a\xa2\x55\x15\xbf\xe2\xe5\x70\xab\xbf\x94\x6a\x2d\x30\xd2\xc9\x55\x75\x0a\xdb\x34\x20\x92\x41\x02\x4d\x6d\x20\x0d\xd5\x73\x0b\x1a\x9f\x53\x75\x0f\xa9\xfd\x20\x10\x30\xb3\x02\xc7\xc4\x50\x38\x3f\xd3\x77\x66\x72\x3d\x66\x09\x1a\x84\x6d\x90\x2d\x22\x68\x86\xa8\x62\x07\x3d\x0d\x01\x8c\xdd\x2c\xc2\x47\x9e\x2d\x6f\x84\xd0\x5f\x57\x35\xf1\x0f\x7d\x32\xfe\x52\x85\xc2\x36\x8d\x98\x68\x97\xa6\x48\xf2\x08\x37\x0e\xf2\xc5\x46\x25\xff\x50\xb6\x68\x16\xe4\x97\xca\x15\x65\xc9\x2f\xd4\x37\x52\x94\x9d\x65\xb8\x98\xfa\xe6\x37\x97\xef\xf0\xe2\x2b\x1d\xa6\x32\xd7\x72\x59\x08\xc6\xb5\xb7\x78\x45\x74\xda\xfc\xd9\xa1\x57\x37\x39\x5b\x30\x50\x2d\x21\x1f\xe8\x92\xd0\x4c\x89\xca\xa4\xc6\x37\xb9\x5b\xbd\x2f\xd7\x7c\x3d\x11\x7a\xbe\xe6\xc4\xed\x9a\xba\x63\xda\xfa\x78\x67\x0d\x68\xe6\x3a\x20\x86\xf1\xb5\x61\x35\xa2\xba\x14\x12\x12\x48\x81\x27\x9f\xeb\x89\x38\x34\x52\x30\x9e\xaa\x2b\xc1\x0d\x7b\x3d\xf4\xb9\xba\xac\xec\x93\x6e\x35\x9a\xa7\x08\x4d\xd9\xce\x89\x48\x11\x55\x1b\x99\x6b\xa9\x42\x22\x4f\x2f\xa7\xe8\xf5\xb4\x9b\xee\xbb\x72\x02\x99\x59\x6c\x96\x65\x3e\xda\xde\x86\x26\xb0\x9c\xce\x80\x50\x5d\x1d\x42\x2d\x08\x70\x55\x4a\xb7\x6f\x3a\x66\x55\x99\x56\x25\x84\xb9\x57\xfb\xf3\xe5\x3b\xf2\x8a\x9c\x98\x77\xb3\x11\x83\x53\xca\x32\x04\xea\xf6\xb1\xba\x4d\x1d\x60\xea\x73\xca\x82\xa6\x00\xf9\x08\x11\xd2\x5e\x2d\x67\x84\x0b\xa2\xca\x64\xde\xc8\x38\xa8\x2c\xc2\xae\x6a\x53\x10\x10\xc9\xc0\x76\xe2\xdd\x87\x7f\x56\xd0\x39\x44\x36\xe6\x75\xf8\xe7\x17\xbc\x0e\x9b\x2a\xa2\x39\xfe\xed\x05\xb3\x67\x35\x07\x4d\x53\xaa\xa9\xbb\x26\xfd\x03\xc3\xae\x1d\x2e\xcb\x80\xcb\x52\xc1\xf7\x8c\x97\x9f\x6c\x5d\x94\x5e\xb8\x3d\x6e\xdf\x23\x45\x24\xf1\x0b\x2d\x1a\x7e\x3b\xef\xa1\x88\x90\xa2\x71\xd9\x3a\x46\x67\x5b\xb4\x6e\xbc\x25\xa8\xc5\xde\xc4\x2c\x4a\xca\x53\x91\xaf\x11\x39\x15\x92\x00\x4d\xe6\x9d\xa9\x69\x44\x8d\x0c\x07\xd3\xb5\x5f\xb6\x43\x08\xd3\x57\xa3\xd9\xf6\xbf\xc7\x64\x58\xa6\xaa\x9d\x6b\xb3\x63\x33\x3a\x81\xcc\xc1\xe2\x5a\xac\xf4\x88\x27\x2c\x92\x0d\x5c\x8a\x88\x21\x31\x37\xc2\x46\x72\xd1\x6a\x22\x4c\xf7\x9f\xc5\x3c\x44\x0d\xbe\xb8\x73\xd1\x25\xf5\x3c\xa0\x0d\xf4\x73\x98\x87\x32\x40\x40\x24\xab\xf3\x60\xa4\xcd\xf6\x3c\xa0\xfc\xd5\xf7\x79\x50\x90\x24\x22\x2f\x7a\x12\x29\x79\x67\xa3\xf0\x0d\x45\xbb\x46\x45\xb6\x1f\xa6\x41\xe1\xce\xae\xda\x15\xd5\xf6\x1e\xf4\x25\xaf\xfe\x7f\x8d\xeb\x1c\xb9\xdd\xea\x1d\xef\x46\x0f\x8e\xc8\xac\x46\x74\x1d\xfe\x12\x6f\xbc\x21\x0c\xb3\xd5\x5e\x3c\x0c\xb3\x81\x98\x4f\xd1\x3c\xdf\x0a\x89\xfc\x12\x82\x31\x8d\x12\x80\xf3\x0a\x1c\x51\x80\x0a\xaa\xe7\x67\x2e\x63\x75\x01\x9e\x3d\xdf\x5b\x8b\xd7\x31\x72\x1c\x4f\x90\x67\x37\x75\xcc\xaa\x45\xd2\x8f\x1a\xbb\xb9\x29\x5e\xd3\x3e\x73\xf5\xf1\xae\x89\xa3\x4f\xf9\xd2\x62\x44\x06\xa0\x9a\xd9\xd6\x3f\xb1\xe2\x39\x63\x3a\x57\x57\xf1\xb9\x43\x3a\x83\xfa\xdb\x1c\xd1\xf9\x72\xa7\x74\xb7\x28\xcf\xd5\x18\xcf\xa8\x24\xac\x06\x7c\xae\x8f\x11\x61\xe5\x82\x8f\x80\xbb\x3a\x7b\x64\x00\xf9\x8b\xa5\xc8\x6b\xd9\x89\x07\x2d\x54\x4d\x23\x08\xcd\xb2\x28\x31\x09\x9b\xac\x20\xfe\x14\x54\x50\xf2\xeb\xd6\x80\x76\x4d\xd3\x90\xd1\x9f\xb0\x60\x7c\xde\x96\x88\xcc\x68\x14\x9f\xb9\x1d\x62\x96\x2b\xfa\x56\x42\x6a\xe3\xa4\x6e\x0b\x48\xfa\x72\x5b\x7c\xf3\xe1\xf6\xa2\x4d\x19\xca\xc2\xae\x70\x06\xe0\xf7\x84\xa6\x39\x53\x0a\x1d\x3e\x30\x99\x0b\x71\x1f\x34\xe4\x89\x4f\xb5\x9d\x31\x3d\x2f\x27\xe3\x44\xe4\x8d\xac\xdb\x91\x62\x33\x75\xee\x38\xca\xc8\x4c\xdc\x29\x61\x3c\xab\x32\x95\xd1\x5a\x88\x58\x60\xdd\xa1\xe4\x9a\x2f\x4f\x92\xea\xed\x71\xeb\x61\x7e\x4a\x15\x9a\xbd\x3e\x3d\x58\xdd\x04\x37\xef\xc1\xa5\x8e\xf5\x5d\x15\x56\x6d\x70\x65\x67\x6d\x79\xf7\x66\xa5\x0e\xe7\xc5\xd9\x38\x8f\x56\x79\x3d\xf8\x24\x39\xa1\x3f\x01\x15\x14\x01\x1b\xf3\xcc\x7d\x5b\x93\xd4\xc4\xd2\x63\xd3\x16\x22\x54\x3b\xe7\x1e\xdd\xdb\xc7\xe6\x97\x3e\x2c\xf3\x38\x56\x71\x99\x8b\x2c\x33\x0b\x49\x1d\xf0\x5a\x23\xba\x13\x55\x93\x36\xa2\x9d\xc5\xdc\x35\xca\x42\xf3\x2d\xf0\x22\x09\x63\x0a\x16\xf7\xcc\x5c\x06\x0e\x33\xc3\x6c\x20\x1c\x9b\x92\x9c\x7d\x32\x14\x36\x47\x6c\x83\xc4\xa2\xe3\x7f\xf3\xd7\x01\x05\xac\x09\x06\x1f\x54\x98\xe9\x67\x66\x85\x9a\x83\xf8\xe4\x68\x6d\xae\x2d\xf3\xc5\x15\x68\xa3\xa8\xd9\x79\x6b\x7a\x1f\x8c\x62\x25\xcb\x08\x87\x21\xc4\x33\x4c\x9a\xde\xe1\xa8\x9c\x22\xf0\x3c\xa0\xa7\xd8\xd1\x64\x64\x10\x2f\xbc\xbd\x94\xe7\x98\x6c\x48\xdf\x79\x31\x0f\x32\xd9\xdd\x8b\xfc\x8c\xbe\x2a\xd2\x17\x7f\x55\x20\xd7\x6f\x62\xfd\x1e\x0c\x67\xa5\x89\x37\xcc\xd6\x83\x97\xae\x45\xba\x06\x43\x8c\x60\xc6\x8c\x66\xdd\x0b\xb9\x5e\x4e\x9b\xd0\x9d\x5c\x38\xf3\x88\xad\x20\x6e\xe3\xf4\x3f\x41\x52\x6a\x48\x1d\x1a\xb9\x33\x29\x5b\x24\xe3\x36\x35\x9d\x29\xf0\x49\xfa\x13\xc0\x00\x25\x75\x56\x97\x62\x73\xba\x4e\x85\xef\x7a\x46\xfe\x0b\xb9\xa4\xf2\x80\x5a\x19\x5b\x00\x07\xa5\xae\xab\x9f\x77\x9d\x0a\x8c\xa3\x4e\x28\xf7\xba\x95\x39\xd3\xce\xc2\xed\x50\xc7\x1d\x8e\xc7\x04\x48\x41\x25\xcd\xcd\x1d\xac\x88\x5b\x9e\x09\xcc\x98\x4d\x0b\x6c\x5c\x8a\x15\x6c\x79\x37\x50\x5d\x54\x6c\x98\x26\x39\x9b\xcd\xed\x69\x21\x94\x64\x82\xcf\x88\x8f\x1b\xcb\x04\x4d\x09\x32\x16\x21\xc9\x03\x95\xb9\x91\x05\x68\x32\xc7\x20\x34\xca\x49\x5a\x9a\xf3\x40\x10\x64\x7b\x39\x52\x9a\x6a\x70\x60\x78\x9d\x6d\x70\x7e\x9a\x0e\x50\x22\xf6\xb9\xcb\xdf\x1f\x18\x4f\xc7\x9c\xb4\x28\x56\x90\xf7\x9f\x20\xa9\x8e\xb5\x45\x9c\xce\x73\x04\x0c\x14\xfe\x38\x7b\xb4\xb8\x60\x61\xb0\x27\xaa\xb2\x7b\xc3\xbe\xc8\x26\x6f\xdd\x84\x33\xaf\x7d\xda\x3f\x8d\x3e\xda\x5e\x04\xe5\x9d\x58\x8d\xa2\x49\x88\x8e\x2d\xe4\xbd\x39\xb9\x16\x23\x48\xc8\xaa\x5a\x7f\x10\x59\x9e\x0e\x84\xcc\x16\x42\x93\x93\xe3\xf3\xe3\xd3\xb5\xbd\x70\xac\x9a\x69\x06\x36\x23\xba\x7e\x21\xc5\xf2\x22\x5b\xe2\x3b\x1c\xdb\x92\xdf\x81\x00\x86\x3e\x60\xb5\x2a\x7f\xa9\xe6\x90\x65\x67\x44\x19\xf1\x97\xfa\x1a\x22\xf6\x53\xf3\x90\x96\x65\x62\xcd\x64\x27\xc7\x3f\x1f\x9f\x11\xd0\xc9\x29\x79\x10\xfc\x58\x5b\x87\x07\xb9\x43\x1d\x32\x88\xa6\x8a\x88\xa5\x28\x09\x07\x70\x67\xa7\x2a\x56\x95\x50\xa3\xfe\x94\x56\x46\xb7\xa0\x1b\x90\x65\x61\xf2\xdc\xfb\x4f\x4c\x1b\x51\x44\x97\x68\xa6\x78\x65\x35\x05\x40\x1c\x7a\xaa\xf0\xa6\x3b\x9f\x03\xcd\xf4\x7c\x59\x69\x2f\xff\x04\x29\xb0\x3e\x29\x77\xdf\x84\xcb\x50\x3d\x48\x1b\xed\x6f\x02\xa7\x11\x30\x4a\x09\x77\x73\x09\x6a\x2e\xb2\x83\xa7\x71\x7e\x70\xe5\xde\x12\xc1\x95\xe1\x29\x46\xc5\x76\x34\xaa\x2a\x83\xce\xca\x2c\xae\xbe\x82\xc0\x53\x26\x21\x75\xc2\x92\x2b\x79\x31\xa7\x0b\x94\x14\x8c\x3c\x07\x69\x88\x6a\xd2\xd4\x89\x7e\x37\xae\x28\xac\xd2\xee\x5e\xf7\x24\x6c\xb3\x23\x76\xe4\x4c\x16\x71\x6e\xe9\x6f\x6e\xae\xdf\xb6\x6e\x69\xfc\xe0\x5b\x3c\xc6\x6f\xe7\x90\xdc\xdf\x84\x55\x73\xed\x49\x68\x41\x21\xe4\x21\x05\x03\x33\x7c\x34\xa9\xe0\x5a\x48\x4d\x78\x99\x4f\x40\x7a\x83\xc2\x0c\x57\x11\xe4\x82\x25\x30\x26\x57\xf6\x3b\xef\x9c\xf7\xd5\x87\x29\x9f\x01\x79\x6d\x0e\xc4\x1f\x7e\xff\xfb\xdf\xfd\x3e\x9c\x47\x87\x03\xa9\xc6\x01\x51\x75\x2f\xde\x17\xb1\xeb\xd6\x92\xb3\xc9\xd8\xec\x28\x45\xa5\x2e\xa3\x49\xb5\x36\xb3\xcd\x87\x2e\xcc\x2a\xa9\x00\xc8\x06\x77\x85\x61\x1d\xf6\xff\x26\x99\x98\x9c\xe7\x54\x69\x90\x46\xc7\x71\xd7\xfa\x08\xe1\x86\x19\x9f\x8d\xf3\xf4\x74\x1c\xe6\x05\xf7\x6a\xf5\x5a\x49\xb9\x16\xcc\xcc\x96\xf2\x70\x66\x52\x0e\x6e\x82\x27\x9e\xca\x37\xe4\xa8\x5b\x35\x31\xb3\x04\xdf\x40\x9c\x4c\xb4\x6f\xef\xee\xae\xbf\x01\xdd\x64\xd8\x1c\x3f\x24\xdf\xbc\xbf\xab\xca\x8d\x9b\xdd\x65\x93\x9a\x06\xae\x1d\xc2\xb5\xe7\x22\xac\xde\x7c\x6c\xbf\x8b\x65\x25\x58\x1b\x8d\x73\x48\xcc\x42\x9f\xb5\x2a\xdb\xfa\x38\xc4\xcb\xeb\x31\xf9\xab\x28\x51\xe4\xa2\x93\x6c\x49\x1e\xa8\x45\x34\xe8\x06\x29\x5d\xb7\x23\x43\xc6\x91\xe1\x5a\x66\x57\x7f\x0b\x34\xb5\xb5\x2a\xd1\xb4\x73\xf0\xb3\xda\xa0\x29\xda\xb2\xbd\x2d\x95\x16\x39\x99\xbb\x57\xb5\x73\x58\x17\xf4\xb7\xb2\x91\x3d\x82\xe8\xfb\x51\x44\x42\x61\xb5\x25\xf7\x9b\x2f\x42\x17\x5a\xe3\x42\x76\x9e\x1b\xd5\x80\x28\x49\x9a\x53\xe5\x04\x7d\x34\x61\x32\xc7\xa3\x3a\x9b\xc4\xea\x16\xa5\xaa\x08\x89\x54\x59\x84\x20\x93\x32\x87\x32\xb8\x93\x70\x27\x64\x9c\x1a\x25\xa6\xf1\x40\xf7\x9a\x6d\x71\x2b\x24\x10\xe7\x6a\x73\x9b\xcb\x06\xe0\x18\x42\x43\x51\x09\x89\x37\x26\x57\x05\x54\x29\x17\x9c\x25\xd6\x9d\x41\xca\x42\x70\x22\x4a\x5d\x94\x1a\x4d\x41\x09\x55\x30\x5a\x50\xc9\x0c\x43\x35\xe3\xd7\x3f\x2c\xb9\x39\xed\x5a\x08\xb4\x93\x54\x4e\x67\x4b\x71\x38\x99\x91\xa4\x19\xe2\x0b\x60\x44\x5e\xe1\xb5\xc5\x09\xdf\xd1\xa4\xd7\x36\x18\x62\x6b\x88\xcf\xe3\xa9\x75\x54\xcf\x31\xb2\x0f\x7d\x59\x3e\x30\x14\x19\xa7\x51\x1b\x7a\x90\x78\x13\x55\x8b\x0d\x64\x09\xe8\x6f\x17\x72\x45\x0f\x36\x14\xae\xcf\x61\xa4\x58\x93\xe7\x57\xab\xdd\x6b\xf9\x11\x28\x27\x97\x17\x57\x17\x7f\xbf\xfd\xe1\xed\xdf\xaf\x2e\x3e\xbc\x0f\xe9\x3a\xb8\x76\x7c\xcc\xea\xf1\xd1\xea\xc7\x3f\x43\x05\x79\xdf\x54\x32\x87\xfe\x84\x99\xdc\x22\x35\x4d\x50\x32\xa7\x03\x34\xea\x21\x87\xa1\xd4\x91\x15\xa3\xa9\x61\x3c\x07\xe5\x38\x2e\xaa\xe0\x1d\x64\x74\x79\x0b\x89\xe0\xe9\xc1\xa3\xb3\xaf\x2a\x66\xa3\x2c\x41\x55\x19\x68\x58\x41\xcc\xf2\x85\x60\x5d\xf1\x6a\x1f\x1f\xd0\x0c\x69\xb0\xef\xd7\xd9\x6b\x4d\xfa\xe7\xb9\x26\xbd\x31\x8f\x17\x20\x19\x46\x04\xf5\x61\xd7\x7c\x2b\x1e\x5c\x45\xf7\x13\xc6\xfd\xce\x39\x6d\x58\x69\x6a\xf7\x48\x38\x9a\x9a\x16\xe4\xf5\x2b\x3f\xc8\x97\xe7\xf7\x70\x91\x3e\xbd\xf6\x7c\x39\x1a\x9f\x76\x7d\xd5\x61\x4b\x6d\xf7\x57\x48\xfc\x10\x59\x61\xe3\xaf\xc7\x55\x9e\xda\x6b\xa4\xa7\x62\x45\x94\xa7\x3e\xe4\xec\xcb\xdb\x27\x3a\x29\x6e\x45\x72\x1f\xc9\xec\x7a\xf7\xf6\xda\xf6\xb6\x12\xcf\x62\x6f\x60\x23\x65\x0a\x42\xcd\x53\x28\x80\x0e\x46\xd7\xde\x18\x5d\x8f\x6d\x5a\x17\xcd\xde\xec\x6d\x40\x3d\x1e\xb4\xad\xba\x79\xc1\x47\xb6\x2b\xa0\x0c\xda\xd6\x96\x36\x68\x5b\x7b\x34\x9b\x44\x82\xc1\xa0\xdf\x48\x9a\xc0\x75\x9f\x84\x37\xcf\x40\x48\x5a\x4a\x57\x56\xae\x92\xe1\x2a\x76\xc1\x01\x52\xcb\x3f\xdc\xab\x00\x99\x99\x37\xb1\xe1\xd1\x68\x43\xac\x03\x8b\x4b\x19\x20\xe6\xdd\xcd\x5d\xd7\x4e\xc4\xf5\x4e\xe6\x4d\xd4\xd5\xba\x49\x51\x81\xa1\xfb\xaa\x21\xee\x38\x19\xe2\xb1\xd4\x3a\xf0\xee\xe6\x74\xda\x5c\x41\xa2\xd8\xcc\x4c\x97\xab\x0c\x6d\x63\x84\xab\xd2\x7b\x35\x21\x66\xd4\xa9\x90\x09\x9b\x64\x4b\x32\xa7\x99\x51\x96\x1e\x98\x9e\x13\x4a\xee\x59\x96\xb9\x6e\xba\x4f\xd4\x2d\xb8\x5c\x4d\x2b\xd1\x64\x82\xcf\x70\x32\xa8\xcb\xc9\xf8\x54\x40\x62\xc6\x4c\x32\xa0\xbc\x2c\x2c\x9d\x46\x3e\x5a\x8a\x32\x42\x5a\x86\x77\x7c\x57\xf2\x14\x67\x0e\x7e\xc4\x16\x6e\x7b\x74\xcf\xb7\x93\x6b\xc9\x47\x3d\x07\xf9\xc0\x14\xd8\x42\x72\x9d\x69\xb2\xb4\xb4\xcb\xc8\xd9\xcf\x2a\x08\x15\x97\x39\x68\xb6\x05\xa6\xb2\x76\x1e\xeb\x07\xec\xd7\xb3\x56\x2e\xf8\x88\xc3\xcc\x02\x35\x38\x86\x66\x23\x3a\xed\xf8\x36\x7e\xb0\xca\x36\x50\x5a\x14\x84\xe5\x39\xa4\x46\x3f\xce\x96\x64\xc1\x68\x67\x4a\x10\x14\xa2\xde\x51\xe4\x84\x0b\x22\x0a\x73\x75\x95\x9c\xe9\x25\x7a\xf4\xe6\xa5\x26\xa9\x78\xe0\x01\xf9\x56\x77\x2e\xcc\x81\x92\x09\x68\xea\x6c\xe0\xe6\x10\x54\x98\xe8\x08\x77\x6e\xce\x1e\x26\x09\xdc\x6d\xdc\x00\x15\x4c\xfa\x8c\xea\x00\x2e\xb1\x41\x9a\xb7\xeb\xf9\xf8\xb6\x63\xca\xf9\xeb\x02\x71\x98\xfb\x81\x6c\x68\x4e\xb4\x28\x75\x4f\xee\x91\x6d\xa6\x23\x0b\x71\xd1\x50\x12\x59\x0e\x8a\x88\x32\x52\xbd\x89\xd7\x6e\xb8\x98\x1a\xde\x60\x77\xda\xd8\x94\x4e\x59\xa7\xaa\xc3\x31\xb6\xd8\x16\xf0\x7e\x97\x87\xdb\xc0\xaf\x9c\x94\xd3\x29\x48\xbc\xe9\x90\xe0\xb5\xb0\xfb\xaa\x8e\x97\xbf\xc3\xba\x19\x6f\x5d\xc0\x17\xe8\x33\xac\x1d\xe0\xc0\x24\xb6\x0c\xe9\x40\x36\xb1\x4c\xaf\x04\x85\x58\xf0\x9c\xbc\xff\xf8\x75\xb7\x2d\x1a\xa3\xb2\x40\x58\xca\x2a\xbe\xe7\x47\xde\x2d\x26\x31\xee\x7e\xd8\x84\xfa\xe2\xb6\x45\x92\x09\xe5\xd2\xa3\x71\x5d\x92\x39\xe5\x1c\xbc\x31\x8a\x69\xb4\x64\x4f\x00\x38\x11\x05\xd8\xa0\xbc\x4e\xc4\x50\xa2\x18\x9f\x65\x40\xa8\xd6\x34\x99\x8f\x0d\x75\xdc\xef\x85\x3a\x0f\xd9\x7d\xa2\xb4\x04\x9a\xdb\x3d\x21\x21\xa7\xcc\x0e\x4f\x68\x22\x85\x52\x24\x2f\x33\xcd\x8a\xaa\xb3\x6e\x56\x44\x40\x44\x08\x65\xd3\x52\xfd\x5a\x61\x5a\x49\x9d\xf0\x7c\x56\x53\xe8\x5e\x5f\x34\x8b\x15\xa1\xe9\xec\xcc\x7c\x0b\x79\xa1\x97\x55\x62\x62\x37\x1d\x68\xca\xa4\xd2\x24\xc9\x18\x70\xed\xde\xcc\x42\x0e\x22\x0d\x67\x5e\x9c\xe6\x6e\x46\x94\x9b\x12\x9e\xa2\xf2\x5d\x68\x65\xf3\xef\x2a\x22\x7c\x57\x29\x53\xce\xd6\xa1\xba\x65\xff\x51\x5f\x99\xc6\x6e\x1c\x3f\x23\xb8\x75\xbc\x80\x63\x29\x72\x1f\x35\x48\x68\xd4\xd9\xae\x73\x27\xc3\xf8\x0a\x96\x8f\xf1\xe7\xfa\xac\x85\x39\x50\xeb\x16\x98\x0a\xb3\xc6\x75\x70\x43\x71\x58\x98\x73\x00\x09\x18\x51\x94\x46\x64\x32\x2f\xce\x63\x1a\xb2\xdc\x07\x50\x8a\xce\xe0\xba\x63\x38\x42\x0c\x86\x53\x1b\xda\x30\x8e\xa1\xde\x36\x73\xb0\x40\x57\x5a\x34\x3e\x69\x26\x79\x35\x95\xc7\xdc\xbe\x48\x27\x0a\xbc\xd2\xf4\x20\x99\xd6\x80\xbb\x14\x2b\x39\x61\x00\xda\x2a\x78\x67\x3b\xb9\xac\xd3\x78\x6e\xd2\x9b\xe3\x19\xf1\x83\xa7\x36\x4d\x6b\x02\x64\x22\x19\x4c\xc9\x94\x61\xde\x18\x66\x54\x9d\xd9\x2a\x04\x14\xe3\x76\xa9\x52\x20\xf1\xb5\x9d\x59\xc0\xbf\x7e\x37\x7a\xfe\xe2\xde\x5f\xcb\x92\x27\xb4\x51\xa2\x13\xb1\xc5\xd8\x94\xcc\x30\x8b\xcb\x29\xc1\xff\xf6\xea\xdf\xff\x40\x26\x4b\x23\xaf\xa1\x22\xa6\x85\xa6\x99\x27\x80\x64\xc0\x67\x66\x15\x91\xe5\x76\xe3\x1b\x2d\x7c\xaa\x6a\x71\x32\x96\x33\x6d\x27\xe8\xf5\x6f\xef\x27\x41\x47\x0f\xf9\xe3\x79\x0a\x8b\xf3\xc6\x16\x1a\x65\x62\xd6\xad\xd7\xb7\x31\xb2\x89\x83\xec\x6c\x1b\x4e\xb4\xc8\x58\xb2\x3c\xd4\x99\xf6\xc5\x4b\xc8\x5c\x3c\x58\x63\xce\xfa\x51\x6d\x40\xbd\x14\xa2\x28\x33\x9c\x38\xf2\x75\x85\xcf\x57\x2a\x58\x85\x3e\x0a\x35\x12\x36\xb8\x1d\x3a\x51\xdd\xb0\x2b\x77\x8e\x4b\x61\xf4\x64\x0a\x07\x3c\xe1\x7c\x6e\x55\x1d\x92\xce\xd6\xb8\xaf\x69\x96\x4d\x68\x72\x7f\x27\xbe\x17\x33\xf5\x91\xbf\x97\x52\xc8\xf6\x3b\x67\xd4\xdc\xe9\xf3\x92\xdf\x63\x15\xdd\x1a\x8c\x56\xcc\x5c\x4c\xa1\xc7\x0f\x68\xbc\x5d\x27\x62\xfc\x5b\x5a\x78\x50\x2f\x92\x78\x1b\x5c\x3d\x32\x7c\x62\xb5\xa1\x8d\x13\x30\x34\x77\x4d\xc0\x87\xd6\x7b\xa8\xe6\xd1\xfe\xed\xab\x7f\xfb\xa3\x65\x2e\x44\x48\xf2\xc7\x57\x98\x72\xac\xce\xec\x05\x80\x37\xb0\x11\xb5\x72\x9a\x65\x5d\xbd\x04\x4d\x16\xf0\x75\xe7\xe2\xd4\x3d\x38\xf2\xfa\x60\xa7\x7b\x67\x95\xf1\xee\xee\xaf\xa8\x2f\x32\xad\x20\x9b\x9e\x59\xb4\x97\xca\xac\x75\x8c\xd2\xd5\xb1\xbb\xf2\xba\x23\x05\x1d\x5e\x69\x5b\x88\xac\xcc\xe1\x1d\x2c\x58\xd2\xcd\x81\xd9\x5a\x95\x56\x6f\xde\x4c\x9f\x31\x85\x20\x40\x93\x4c\x24\xf7\x24\x75\x5f\x36\x42\xe5\x57\xab\x6a\x77\x9f\x85\xae\x49\x03\x01\xc9\x02\x5b\xdf\xbf\x95\x26\x90\xd3\xa2\xa8\x10\x4a\x24\x7d\x68\x4d\x06\xb2\x26\x44\x47\x0d\x74\x23\x06\x3b\xd3\x43\x5d\xe9\x23\xf7\x46\xe6\x9a\xea\xdc\x45\xe7\xdc\x82\x70\x4f\x7c\x4d\x7d\x77\x3f\x66\x6b\x43\xd4\x1d\xfa\xd3\x50\xe0\xbf\x2d\xde\xc2\x1a\x32\x56\x05\x39\x54\x6d\x0c\x2b\x41\x9a\xed\x83\xb7\x4c\x77\xf3\x65\x04\x67\x68\x58\x8e\x44\x6b\x5e\x78\xe5\x84\xce\xa9\x76\xfa\x91\xf7\xb2\x53\x52\x80\x54\x4c\x19\xd1\xe9\x07\x3c\x50\x6f\x33\xca\xf2\x86\xfb\xee\x50\x93\xb0\x1e\x51\x9f\xd3\x62\x74\x0f\xcb\x8e\x1b\x2e\xf0\xb8\x6c\x0b\xf0\xcf\x69\xd1\xf1\x1e\xc0\xd2\xb5\xe1\xd7\x40\xc7\xcb\xf9\x5a\xa4\x8e\x0e\xbc\x1e\x6c\x49\xe2\x67\x51\x63\x23\xca\x40\x87\xbe\x72\x7e\xa8\x17\xae\x7d\xe3\x98\x4f\xaa\x2b\xc7\x3e\xf5\x25\x5d\x34\xf8\x7e\x9f\xeb\x3d\x53\x11\x1f\x89\x9d\x06\x45\x3a\xe1\xed\xe4\x76\x46\xfb\x3a\x6a\x19\xb4\xec\xc9\x6c\xa8\xbe\xce\xd0\x34\xb6\x45\x01\x02\x08\x30\x47\xd1\x0d\x4a\x8e\xdf\x1c\x1f\xf4\x8e\xb3\x2b\x23\x45\x41\x67\xa8\x99\xf6\x61\x81\x56\x69\x6a\x62\xd0\xce\xc5\x83\xfd\xde\x46\x97\x14\xee\x29\x48\x6b\x20\xf3\xb9\x08\x5a\x1d\x1b\x39\xe8\x77\x84\xd3\xae\x2d\x56\xe1\x03\x5d\x12\x2a\x45\xc9\x83\xd2\xa0\xd1\x31\x52\x39\xce\x3e\xac\xbc\xec\x95\xe0\xe0\x9d\xf4\x21\xa3\xdc\xd5\x18\xe6\x4c\xd9\x78\x05\xc6\xc9\xeb\xf1\xeb\x57\xc1\xb4\xdf\x40\x52\x4a\xc5\x16\x70\xe3\x6a\x9c\x37\x9c\x2a\x97\xd3\x6b\xa1\x14\x9b\x64\x98\xb8\xa5\x05\x79\x6f\x0b\xc0\xaf\xbf\x68\x15\x38\x82\x6f\x2c\x64\x13\xad\x34\x80\xc2\x13\x7b\x82\x9b\x01\x9f\x66\x80\x80\xa8\x8f\x7e\x49\x92\xb8\xae\x2b\x92\xe4\x55\x25\x49\xda\x7b\xef\xa0\xef\xea\x0b\xdf\xf7\x81\x93\x7c\x70\xbe\x81\xba\xb2\x3d\xf3\x95\x93\xf1\xa3\x07\xc9\xb4\x3b\xdc\x0f\x4c\x01\x39\x41\xab\xc4\xca\x66\x0c\x02\x68\x6e\xda\xb0\x02\x2b\xe0\xc7\x00\x58\x96\xab\x47\xb7\x0f\xab\xb4\xce\x4f\xea\x08\xfc\x07\x67\xc0\xaa\x57\xd0\x71\xff\xfa\x5e\x9e\x53\x9e\x66\x41\x3c\xa3\x9a\x95\x6c\x19\x84\x85\x73\x39\x25\x4d\x96\xe8\xfc\x97\x8d\x6a\x12\x73\xaa\x08\x17\x24\x07\x8a\x01\x9a\xe6\x76\xf1\x5c\xb0\x85\xd5\x1c\x8f\x06\xbb\xd9\xed\x35\xd6\xbc\x10\x1c\xbb\x7e\xc7\x94\x63\xcf\x86\x8f\x38\x0d\xc4\x86\x75\xe4\x34\x0d\x49\xed\x6e\xcc\x69\xbd\x78\xe3\x3a\x68\x72\x95\x92\xfa\xe2\x58\xa1\xe5\x39\xe8\x38\x73\x25\xc8\xcd\xf0\x25\xc6\x09\x6e\x30\xcb\xd5\x41\x32\x41\xde\x6c\xdb\x56\x5f\xb7\xba\x16\xd7\xde\x75\x33\xc5\x15\xc1\x01\x34\x3c\xfd\xaa\x67\x0d\x5e\xe8\x63\x44\xad\x4b\xdd\xd5\x40\x71\x19\x8f\x61\x48\xde\xde\x29\x51\x99\x7b\x66\xc0\x41\x52\xe7\x57\xf0\x21\xa2\x0e\x7c\x85\x2a\xc1\x43\x0f\xc4\x13\x1b\xce\xf0\xfb\xa7\xc5\x14\xfb\xb3\x00\x42\x50\xce\x39\x11\x72\xe5\xb4\x3b\x8f\xc9\x26\x89\x25\xe6\x5b\xaf\x40\x73\xd9\xcd\xdf\xc0\xfc\x34\x8b\xf2\xdf\x25\x5b\xd0\x0c\x2c\x86\xbd\x67\x0d\x07\x15\x26\x54\x39\xe9\xab\xda\xe8\xf4\x43\x54\x3b\x36\x07\x3d\x6c\xd5\x20\x23\xc9\x13\x47\x47\xe4\xc4\x8e\x71\x6c\x41\x76\x0f\x2b\xe4\xba\xb5\x7a\xff\xa9\x08\xa8\xdc\x1a\x6f\xbd\xde\x7f\x2a\x28\xc6\x69\x14\xbd\x58\xb8\xff\x05\x73\xba\x00\xc4\x34\x66\x19\x95\x19\x06\xa5\xdf\xda\x29\x23\x93\x52\x13\xe0\x0b\x26\x05\xcf\xcd\xf1\x43\xf0\x19\xc3\x99\x24\x20\x18\x7c\x02\x8a\x7c\x75\xf2\xc3\xc5\x0d\x26\x2d\x9d\x3a\xb4\x7c\xf7\x7e\xa5\x42\x7c\x80\x95\x77\x68\x74\xd7\xc7\xfd\x46\xfc\xbb\x9b\xed\x82\xf2\x89\x9f\x0b\xf3\x6e\x79\xa9\x4b\x9a\x21\xf4\x73\x92\x95\xe6\x2e\x3c\xd8\xce\x8e\x6f\x03\x0f\xb1\xe4\xc5\x34\x81\x3b\xe0\xef\x77\xac\xd3\x71\x8d\x71\x50\xdf\x36\xf6\xeb\x1a\x0c\x79\xe7\x1a\x0f\x1b\x40\x28\xd7\x04\x9d\x63\x55\x01\x53\x36\xf3\x70\xdc\x5d\xdc\x2d\x3c\x03\x4b\x27\xd8\xe4\x6f\x5f\x93\x74\xcd\xc2\x88\x35\x5a\x0e\x6e\xc3\xef\x70\x18\xe2\x1d\x83\x0e\x86\xe8\x38\xbb\x3e\xe5\xea\x2d\x2e\xcd\x7e\x14\x87\x6d\xf4\xdb\x4a\x93\x35\x1b\xe1\xdd\xd5\x6d\xb3\xa0\x87\x75\xfe\x89\xbd\x57\xf2\xba\xee\xa2\xae\x7a\x83\x15\xf1\x2a\x07\x2a\xc8\x99\x15\xa7\x11\x79\xb6\x92\xaf\xdf\x5d\xdd\xee\x39\x96\xdf\xcd\x56\x18\x9e\x50\x65\x63\xa4\xdf\x5d\xdd\xda\xb8\xb5\xfd\x68\xef\xec\x48\xe9\xee\x83\x40\x00\x37\xc4\xd6\xea\xc0\xb1\xc3\xb9\xdc\x45\x15\x0f\x62\x16\x1f\x7d\xbe\x96\x1a\x72\x79\x4d\x68\x9a\x4a\x0c\x67\xee\x72\x96\x5b\x88\x76\xb4\x28\xaa\xa8\x54\x2c\x12\x43\x15\x34\x5f\xbd\xb1\x07\x50\xf0\xe9\xb8\x7e\xb6\xbd\x2b\x8b\x8c\xd9\xf0\xd3\xe6\x10\x75\x09\x9d\x5c\x2c\xba\xf0\xa7\x10\x0f\x63\x67\xff\x62\x90\x7c\x10\x15\x73\x4e\x74\x2d\x4f\x1b\x7b\x97\x4a\x50\x22\x5b\xd4\xc5\xf3\x83\x77\xa7\x63\x47\x18\x92\x58\xed\x4e\x5f\x81\xf6\x99\x76\x26\x70\x2d\x19\xac\xef\x4a\x72\x63\xde\xae\x44\x76\x56\x91\xc0\x16\x80\x29\x4b\xae\x42\x70\x87\x91\x71\x18\x9f\x77\x4b\xf4\xdc\x66\xdd\x50\x8d\x27\x93\x4a\x2f\x0a\xe0\x9b\x07\xbc\xe2\x41\x8e\xc8\x0a\x32\x7d\xfa\xee\xea\xd6\xde\xa4\x76\xba\x1c\x9e\xb7\xda\xb8\x77\x3a\x5f\x72\xe4\xf0\x65\x92\x42\xdc\x36\xd1\x72\x4a\xab\x92\xa6\x6c\xe3\x04\x1f\xab\x40\x88\xd4\x1b\x17\x9a\x10\x96\x08\x1c\x60\x39\x08\x42\x2a\x6d\xc7\x86\xf8\xb4\xd7\x47\x26\x0b\x47\x3b\xc8\xbb\x46\xbd\x2b\x14\x50\x99\xcc\xbb\x6c\xec\xd8\x97\x85\xa5\x84\xa4\xc2\x66\x88\x4d\x85\x44\x0f\xfc\x08\x45\x9d\x4c\x88\xfb\xb2\x78\x1e\xe9\xc6\x0d\x5c\x50\x3d\x7f\xb6\x4b\xa4\x35\xc6\x20\xdf\x74\xdf\xb3\x29\x57\x5d\xf2\x5c\x02\x95\x2f\xd0\x56\xe5\xc2\x91\x6b\xa4\xb6\xfd\x2f\xa3\x96\x19\xec\x6d\x56\x2a\x0d\xf2\x6b\x26\x95\x3e\xda\xb7\xa7\x1f\x68\xc6\x1c\x70\xb2\x0d\x61\x39\x6e\x76\xf7\x17\xa6\xe7\xae\x50\xef\xf1\x59\xfb\x2b\xf3\xb7\x23\xe3\x98\x08\x49\x8e\xaf\x04\x87\xbd\x83\x87\x56\x34\xd0\x4a\xf0\xa9\xae\xf4\xad\x32\x9b\x9b\x44\x05\x99\x05\x55\xc1\x2f\x3a\x9f\xb3\x3b\x57\x3b\xd9\xd0\xe3\x25\x05\x05\x9a\x50\x2c\x3a\x89\x7d\xcf\xeb\x82\xc5\xb6\x38\x9a\x2d\xf4\x2c\x9c\xce\xbb\x6c\x2c\xed\x9e\x83\x37\xaa\xab\x69\xb1\x7d\x01\xba\xa8\xb6\x7b\x9f\x33\x44\x0c\x01\x57\x4e\xe6\x7b\xc6\xef\xf7\x3c\xe4\x61\x27\xe4\xfd\xda\xe8\x0d\x88\x16\xef\x7b\x67\xdc\x82\x26\x18\x51\x8f\x4e\x44\xa9\x7d\x89\x9b\xa6\x17\x9e\xf1\xff\xb2\xfb\x02\x03\x58\x11\x00\x67\xdf\x55\xd9\x60\x00\x57\x67\x36\xcc\xc5\x5b\xb8\xd5\x92\x6b\x8a\xb5\xb6\xdf\x89\xe4\x1e\x24\xc9\x0c\xcd\xfb\x6e\xbe\x3a\x8f\xb5\x55\x55\x79\xef\xb4\x96\xae\x11\x19\x50\xcc\x21\x07\x49\xb3\xca\x00\xfa\xa2\x8b\xfe\xbd\xbb\xbd\x2b\x32\x9a\x49\x9c\xb6\x3c\xa2\x2b\x94\x2b\xd2\x31\x79\xbf\xe9\xa9\x9c\x2e\x7d\xe1\x77\xc6\xd1\x77\xf8\x89\x29\xbd\xff\x0d\x53\x88\xb4\x89\x91\x5a\x2a\x90\xa3\x0a\x33\x97\x50\x57\x7c\xd1\xe7\xd3\xa6\x30\x29\x67\x33\xc6\x67\x63\x2b\x1e\xa0\x18\x52\x17\x88\xad\x6d\x61\x0f\x73\xd8\x37\x42\x26\x91\x40\x31\x7e\x18\x95\x15\x1b\x32\xc1\x9a\xbd\xe7\x22\xb5\x9d\x4f\x96\xd6\x02\xeb\xf7\x64\x05\xa4\x44\x2e\x39\x11\xd2\xd5\xc5\xa0\x69\x4a\xf6\x0e\xd3\xd9\xb0\x22\xd8\x57\x3d\xbf\x96\xb8\xb2\xf6\xcf\x1f\xab\xfa\x57\x8d\x05\x52\xe5\xc4\xc8\xbe\xa5\xdc\xb7\xd6\x75\x57\x19\xa5\x93\x7c\x12\x2a\x8b\x5e\xf0\x7a\x7b\xbe\x6d\x22\x11\x50\xa2\x21\x2f\x84\xa4\x72\xb9\x9a\x6e\x62\x6e\x12\xb3\x7d\xcd\x02\xad\xcc\xed\xb5\x48\x8d\x90\xb0\x37\x19\x1b\xb6\xed\x82\x19\xb5\x73\xd3\xce\xdd\x78\x9e\xf0\x6a\xe3\x82\xf8\x35\x23\x1d\xa8\x50\xc9\x1c\xd2\x12\xd1\xa7\x66\x25\x95\x94\x6b\x30\xfc\xd3\x85\xb0\x2e\x5b\x81\x1c\x15\x52\x43\x05\xdb\xb6\xc4\xbc\x51\x2c\xee\x6c\x3e\xc1\xba\xd2\x5d\xc2\x4d\x9c\x70\x6c\x3a\x6a\xc0\x41\xdc\xcd\x81\x18\x49\x32\x03\x8d\x93\x0f\x0b\x96\x68\x3f\xc8\x14\x17\x61\xc3\xd6\x4f\x68\x69\xa1\x1e\xf6\x0f\x00\xba\x16\xae\x8e\x6a\x02\xe6\x4e\xd2\xaa\x9e\x5a\x97\xf5\xc8\x3a\xc5\x95\xdc\xf9\x93\xbd\x89\xe0\xfa\x60\x3e\x71\x24\xd1\x28\xd2\x99\x69\xe2\xdb\x3d\xc2\x98\xab\x35\xde\xb0\x12\x7b\x0e\x15\x60\x80\xe9\x9e\xf2\xd0\x29\x55\x21\xc4\xd6\x43\xe5\xec\x60\x49\x40\x17\x72\x56\xe6\x98\x34\xef\x74\x5b\xe0\x5a\x2e\x0b\xc1\xba\xfa\xed\xcd\x51\x43\x37\xe3\xb1\x22\x6f\x3f\xbc\x6b\x02\xbe\x35\xcb\xf4\x79\x38\xc0\x6e\x83\xfc\x10\x37\x40\x81\x5c\x4e\x09\xad\x84\xbe\x4e\x14\xd5\x17\xb5\xb3\xf9\x38\xd7\x6f\x45\xa0\xb7\xc0\x32\x5e\x18\x09\x16\xe5\xf4\x46\x5d\x9f\x64\x4e\xf9\xcc\xb0\xaa\x77\xa2\x34\x2f\xf6\xd5\x57\xf8\x12\x12\xd2\x32\xe9\x18\x5c\x8a\x80\xd1\x0e\x15\xe9\x2b\x1f\xe6\xe5\x0a\x88\x19\x5d\x14\x54\x42\x0b\x3f\x35\xcd\xd9\xb3\x52\xee\x1b\xc2\xc6\x30\x26\x47\x5f\x35\xbe\x3a\x42\x8a\x3b\x51\x53\x48\x61\x5e\xc5\x81\x30\xe1\xdb\x67\x4c\x23\xff\x38\x6a\x8e\x30\x26\xef\x0d\x5d\x18\x35\x5d\xad\x6d\x03\x57\x67\x52\xaf\xec\x19\x91\x30\xa3\x32\xcd\xa0\x23\x80\x88\x98\x56\x4a\x86\x05\xaa\x74\xbb\x0a\x19\x23\xe2\x0a\x70\xa1\xc7\x71\x5c\xdf\xbb\x22\xda\x69\xaa\xee\xd5\xb9\x55\x67\x46\x29\xd5\x74\x44\x0b\x6b\x0f\x62\x82\x9f\x5b\x53\xf7\xc8\x15\x29\x1f\x51\x77\x7a\x47\xd5\xce\x3e\xff\xb5\x83\x5f\x1d\xd1\xea\x29\xc6\x47\x74\x84\x65\xbb\x3b\xdb\x6f\x0e\x90\x76\x17\x3d\x70\x26\xa8\x1c\x53\x40\xd9\xfd\x18\x6c\xfa\x7d\xc5\x95\xed\x52\x8c\xc9\x95\xd0\xbe\xba\x7e\x5a\x27\x1a\x06\x14\x67\x6f\x32\xee\xf7\x57\x77\x37\x7f\xbd\xfe\x78\x79\x75\x37\xf0\xef\x81\x7f\x63\x1b\xf8\xf7\xc0\xbf\x3b\x0c\xdc\x17\xfe\x0d\x7c\x71\x28\xde\x5d\xd9\xbb\x36\x19\x18\x57\xaa\xbd\x06\x26\x8a\x7f\x41\x89\xf6\xef\xf9\xe2\x07\x6a\x54\xc7\x42\x82\x42\x05\xc5\x68\xac\x9b\x82\x94\xdd\x03\x68\x09\xac\x63\x3a\x3f\xdb\x4c\xfb\x03\xe6\xc9\x47\xcc\x13\x0d\x8a\x9d\xbf\x6a\x14\x00\xd9\xb4\xe4\x21\x71\xdf\x1f\xe8\xd2\xd6\x47\xb2\x87\x92\xf2\x25\x29\x24\xe3\x1a\xb7\xd2\xc5\xed\xdb\xcb\x4b\x92\xcc\xa9\xa4\x09\x3a\xa8\xe0\x53\x02\x85\x26\xc7\xff\xf3\xb0\x69\xf2\x81\xd5\x54\xe3\xad\xcc\x3e\x82\x5b\xc0\x30\xb5\xc8\x57\x48\x58\x30\x51\xaa\x6c\x59\x95\xed\xdf\xcc\x47\xd7\xd1\x14\x02\x93\xc4\x96\xde\xcd\xb4\x79\xc0\x15\xa1\x73\x93\x00\x19\x30\xfc\x81\x45\x4f\x47\x44\x0c\x01\x34\x60\xfc\x0d\xa2\xeb\xee\x62\x68\xc0\xb8\x9d\x04\xd8\x6d\xc2\x68\x00\x1d\x6d\x31\x36\xa0\xa3\x76\x16\xcd\xe1\x39\xd9\xd7\x52\xe4\x91\xb8\xd9\xad\x35\x68\xfb\xd8\x8a\x4d\x47\xb5\x8a\xba\x6a\x8a\x47\x4e\xa5\xad\x6b\xa7\x18\x75\x3a\x2f\x74\xc7\xbc\x0f\x12\xab\x6e\x7c\x9c\x12\xeb\x36\x6a\xfe\x03\x2d\xbe\x83\xe5\x0d\x04\x56\x89\x6a\xcf\x37\xc6\x5f\x28\x42\xc9\x3d\x2c\x6d\x70\xe5\x5b\x3f\x58\x58\xa1\xac\x1e\x96\xdd\xbf\x87\x6e\x60\xf4\xbe\xc5\xab\x97\x7f\x0f\x01\x50\x09\xbe\xad\x15\x53\x37\x4b\x88\xfa\x87\x59\xd3\x5e\x95\x8f\x0f\x93\x44\x7d\x8b\x59\x9e\xce\xb6\xa6\x64\xea\xae\x87\x08\x13\xb7\x0a\x97\x03\xd3\x29\x24\xda\xa7\xe0\xdb\xdd\x7c\x86\x59\x9a\x69\x69\x6b\x7c\xd2\xe4\xfe\x81\xca\x54\x91\x44\xe4\x05\xd5\x6c\xc2\x32\xa6\x97\x61\xf9\xf9\xbe\xe1\x0d\x5f\x01\x8c\x5b\xa6\x48\x2e\xb9\xd2\x14\xaf\x42\xe1\x0c\x81\x66\xb5\x6b\x94\x5f\x04\x03\xb6\xdc\x14\x33\x81\xa8\x0c\x2f\xcc\x6f\x48\xc9\x85\xd2\x24\x01\x69\x84\xba\x6c\x49\x1e\xa4\xe0\x1d\xb1\xb7\xdb\x6d\xcf\xf2\x32\x62\x61\x64\x41\x78\x38\x77\x79\x82\x23\xf3\xe2\x23\xcb\xac\xd4\x39\x66\xa1\x9c\xff\x1a\xff\xd3\xa7\x53\x44\x7c\x96\xe1\x1b\x72\x74\x14\xd8\x97\xf0\x41\x4b\x71\x4f\xe5\xad\x0b\xa6\x6b\x8a\x4e\xd5\x85\x42\x2c\x22\x30\xf2\x29\x8f\x83\xe0\xb4\x80\x48\xd3\x1c\x06\x67\x63\x5b\xcb\x52\x95\xd3\x22\xcc\x50\x55\x37\x64\x07\x71\x6f\xef\x60\x1e\x58\x5f\xff\x96\x59\x55\x55\x3a\xd3\x37\x1e\xdf\x43\x91\x1c\x34\x4d\xa9\xa6\x63\x73\x20\xce\xda\x7f\xaa\x82\x26\x70\x46\xfe\x51\x7d\x98\xd1\x09\x64\xea\xc7\xe3\xff\xf8\xee\xfd\x5f\xff\xf3\xf8\xa7\x7f\x34\xbf\x43\x71\x0d\x0d\xa7\xcd\x07\x02\x5f\x01\x63\xa5\xb8\x48\xe1\x0a\xa9\xc3\x3f\x9d\xa6\x77\x91\x24\xa2\xe4\xda\x7d\x81\xe0\xee\xe3\xb9\x50\xfa\xf2\xba\xfa\xb3\x10\xe9\xea\x5f\x01\x25\xfc\x48\x3f\xe5\x1e\x5c\xdb\x00\xb0\x47\xdb\xe2\x49\x3f\xb4\x60\x3f\x80\x54\x41\xf8\x80\xbe\xb5\x33\x36\x6c\xaf\x7e\x1b\xab\x64\x0e\x39\xc5\x7f\x7e\xed\xa7\xc0\xdc\xc7\x55\xf9\x0d\x8e\x28\xfa\xe6\x0e\x6c\xd7\xf4\x3d\x5a\xbc\x0e\xd2\x38\x6d\x8b\xc8\xf9\xab\x15\x8c\x3c\x61\x38\x23\x6e\xb6\x2c\x07\xa8\xe4\x47\x6f\xa5\xa8\xc3\x20\x2f\xae\x2f\xc9\xc2\xce\x70\x8f\x26\xe7\xf9\xd8\x75\x06\xd1\xd5\xad\x60\x86\xfd\x75\x45\x95\x5b\xa6\x86\xea\xe6\x14\x66\xa4\x3c\x74\x81\x6e\x3c\x56\xbf\xe9\xf4\x3d\x5f\x98\x71\x55\xab\xd4\xa4\x97\x27\x79\x20\xac\x0f\xe9\x27\xcf\x0c\xd5\x15\xb1\x2c\x7a\x28\xcb\x35\x9d\x58\x88\x94\xab\xae\x5e\x04\xdf\xfa\xac\xbb\x46\x51\xe5\xbc\x02\xdc\x80\xe6\xa9\x0e\x03\xb9\x30\xcc\x7e\x81\xb9\x32\xf7\x3e\x76\xb5\x90\xb0\x00\xae\xab\xa0\x6b\x57\xf7\x8b\x4a\xcd\xe2\xe8\x24\x8e\x22\x55\x59\xba\xeb\xb0\x0e\x6b\xe5\xca\x5f\xdc\x77\x51\xb7\x77\x25\x1a\x5b\x2f\xb2\x62\x4e\xcd\x5b\xcf\x2a\x3d\x78\xe3\x69\xb7\xd1\x13\x66\xee\x14\xfb\x27\xac\xd4\x6e\x79\xfd\xdb\x3f\x36\x08\xed\xd1\xdd\xf0\x6c\x6a\x4e\x94\x1d\xbb\x49\x57\xc2\x6a\x3c\xdb\xd5\x24\x57\x09\xaf\x7e\x2e\x9c\x4d\xe1\xbb\x09\x70\x26\xd3\x4f\x4c\xe9\x33\x5b\x36\xd0\x9f\xa0\x05\x95\x55\x94\x50\x39\xc9\x98\x9a\x87\xb2\x7b\xdb\x2e\xa7\xd5\xea\xac\x94\x51\xac\x70\x92\x6b\xd9\xc3\xcc\xc5\x0a\x95\x11\x48\xd8\x66\x62\x6e\xa3\x14\xd6\xee\xfc\x6b\x4c\x90\xa8\xe3\xa3\x83\x30\xf5\x1e\x9f\x07\x0b\x1d\xfb\x52\x13\xb1\x86\xa1\x28\x41\x97\xd2\xf0\xac\xd4\xf2\x89\x6b\x91\xba\x9c\x96\x78\xc2\x5f\x0c\x65\x9d\x34\x8d\x22\x5d\x8b\x2a\x36\x5b\x11\x5f\xc8\x8e\x76\xbd\xed\x00\x3d\x57\x49\xef\x9e\x49\x44\x31\xae\x39\x26\x24\x21\xb3\xf5\xd8\x11\x69\xd6\xa5\x06\x78\xe8\x79\x33\xe0\xf1\x78\x7c\x6c\xa9\x14\xae\xda\xa9\xb5\x28\x9a\xcf\x7b\x75\x2d\xd4\x42\xd5\x33\x98\xe1\x79\xc3\xa8\xec\x96\xc8\x42\xb2\xba\xa9\xf2\x2e\xd6\x58\xb2\xfa\x67\xa0\x4c\xf9\x4c\x95\xaf\x7b\x6d\x03\x6b\xe6\xd3\xb4\x82\x0f\xde\x10\x04\xcd\xf5\xdf\x3b\xe1\x47\x55\xc5\xfa\x41\xe9\x50\x43\xf1\x89\xed\x72\x9c\x14\xe5\x99\xeb\x7e\x9c\x43\x2e\xe4\xb2\xfa\xb3\xca\x02\x1a\x29\x2d\x24\x9d\x21\xec\xb8\x1d\xdc\xfe\xac\xfa\xcb\xfe\xb0\x45\xde\xfa\xaf\x6d\x74\x47\x52\x4a\x09\x5c\x67\xcb\x1a\xcf\xf7\x8b\xd3\xe5\xfc\xba\xf5\x44\x81\xaa\xb6\xd5\x33\xf0\x9f\xe3\x3a\x6f\x11\x7d\x6e\xd5\x2c\xa2\x4b\xdd\x95\x07\x3a\xab\x05\x0e\x8c\xfb\xb0\x42\x9e\x3a\xee\x0f\x1f\x22\x24\x65\x0b\xa6\x44\x00\xf4\x6b\xd5\xd1\xba\x7b\xc2\xe3\xe7\xb9\x42\x94\x36\x1d\xbd\xb2\xa0\x7c\x2a\xb0\x28\x75\x75\xd8\x57\x4c\x83\xaf\x43\x3d\x2f\x28\x63\x68\x90\xfc\x0d\xf9\xdf\x27\x7f\xfb\xcd\xcf\xa3\xd3\x3f\x9d\x9c\xfc\xf8\x6a\xf4\xef\x3f\xfd\xe6\xe4\x6f\x63\xfc\xc7\xbf\x9e\xfe\xe9\xf4\x67\xff\xc7\x6f\x4e\x4f\x4f\x4e\x7e\xfc\xee\xc3\x37\x77\xd7\xef\x7f\x62\xa7\x3f\xff\xc8\xcb\xfc\xde\xfe\xf5\xf3\xc9\x8f\xf0\xfe\xa7\x1d\x3b\x39\x3d\xfd\xd3\x57\xc1\xa4\x53\xbe\xfc\x18\xc8\xbd\x6d\x1b\xb9\xcd\xc2\xb8\x86\x19\xec\x9f\x9e\xba\xbd\xc7\x48\xae\xb6\xd6\x55\xc8\xb8\x1e\x09\x39\xb2\x5d\xbf\x41\x25\x25\x70\x00\xbf\xbd\x62\x9f\x7f\x8f\xbf\xf4\xa6\xbe\xcd\x2a\xa1\xb0\x47\x07\xfc\xb9\x04\x0d\x05\x89\x04\xfd\x12\x61\x32\x76\xa4\x46\x59\x3d\x07\x9d\x85\x1e\xb1\x2f\xed\x06\xfd\x25\x44\xce\x78\xa7\x91\x5d\xd7\x5a\x93\x32\xea\xd5\xb8\x56\x82\x28\xb1\x76\x44\xf7\xdc\x3d\x04\x84\x98\xf9\x36\x44\xda\x74\x6e\x43\xa4\xcd\x16\x52\x86\x48\x9b\xa0\xf6\x59\x46\xda\xdc\x5a\x9e\xf4\x8b\x0c\xb3\x89\x8f\xac\xdf\x31\x73\x27\x26\xa8\x3e\xf0\x45\xd7\xe0\xea\x98\xa9\x6e\xde\xec\x81\x50\x5c\x45\x99\x51\xbd\x25\x8b\x22\x52\xde\x5b\xcf\x3c\x67\x7f\xb1\x10\x36\xf7\x16\xd5\x46\x69\x7c\xcd\xbc\xcc\x34\x2b\x3a\x26\x04\x54\xaa\xa5\x4d\x2d\x30\xcc\x9f\x2a\x25\x12\x8b\xf8\x53\x81\xe4\x65\x54\x69\xff\xca\x68\x99\xd7\xf4\x1e\x73\x68\x12\x48\x81\xef\x8b\xc5\xe4\xdb\x0f\x16\x2d\xd0\xcf\xed\x64\x69\xee\xa1\xf7\x7c\xe1\xee\x24\x92\x7a\xc0\xca\xda\x57\x1a\x65\xdc\x2f\x2b\x9b\xd1\x9c\x4b\x97\xad\xd0\x48\x6a\x44\x09\xb2\x06\xe5\x41\x6f\x8e\x98\xd6\x21\x90\x98\xfe\x61\xd9\x74\xb7\x0b\x2f\x58\x39\x08\x17\xc5\xab\x6c\x84\x20\x1d\x6b\x4d\x06\xaf\xc3\x44\xdb\xb2\x77\xe7\x11\x7a\x94\xc0\x11\x2e\x95\xc7\x95\xc8\x9f\x43\x1a\xef\x8b\x24\xde\x13\x29\xfc\x79\x24\xf0\x7e\x4a\xdf\xd1\x24\xef\x38\x52\x77\x1c\x89\x7b\x8f\xb8\xf6\x98\x52\x76\x1c\x09\xfb\x39\xec\x6b\x85\x84\x29\xfb\xd4\x87\xb4\x65\x8f\xb8\x4a\x34\x7c\x42\x53\x4d\x21\xa1\x00\x5e\x01\x7a\x7b\x0f\x2c\xd0\x64\x3e\x64\x9c\x93\xca\x2e\x1a\xf7\xc2\xbe\xdd\x64\x29\x1b\x6e\x6b\x32\xdc\xd6\x7b\xb4\xe1\xb6\x1e\x6e\xeb\x17\xb9\xad\x1d\xb7\xfa\xf2\xaf\xea\xc8\x48\x4b\x88\x21\x77\xf0\x92\x8e\x96\x8c\x80\xda\x34\x7b\x1e\xc5\x3a\xc6\xf3\x1c\x47\xee\x72\xe2\x82\xce\x19\x8e\x7a\x5d\x66\x59\x97\x3a\x17\xb6\xc5\x58\x80\x4b\x9c\xf6\xa2\xcc\x32\x57\x1b\xa1\xdb\xec\x7f\xe4\x78\x81\x5d\x64\x0f\x74\xa9\xce\xc8\x15\x2c\x40\x9e\x91\xcb\xe9\x95\xd0\xd7\xd6\x74\xd2\xad\xdf\x26\x12\x86\xed\x9c\xb0\x29\x79\x93\x51\x0d\x4a\x13\x4d\x67\x18\x51\x5b\x57\xef\x14\xb2\x35\x68\x5d\x9f\xfc\x80\x16\xad\xf0\xbd\xf9\x6b\x0f\x20\x3f\x3a\xcc\x5e\xcd\xd8\x14\x92\x65\x92\x85\xb3\x89\xef\x7d\x4f\x3e\xe2\xdc\x8b\x07\x18\xa7\xb4\x01\xa1\xfa\x33\x2c\x03\x56\x08\xa5\x6f\x35\x95\xfa\xd0\xb5\xc0\xae\x3d\x21\x66\xb2\x13\x9a\x65\x90\x12\x96\xe7\x90\x32\xaa\x8d\x20\x48\xa7\x1a\x24\xa1\xcd\x7a\xb3\xca\x06\x81\x37\x12\x11\xe6\x94\xa7\x19\x48\x32\xa5\x2c\x53\xdd\x43\xd1\x57\xea\xda\x2a\x4c\xcc\x64\xdc\x02\xe0\x63\x18\xa3\x47\x98\xa7\x49\x22\x64\x8a\x31\xb4\xc2\x23\xb1\xe3\x4b\x84\xf0\x27\xd3\x3e\xa2\xa8\x90\x53\x4e\x67\x90\xbb\xaa\xf5\x6d\xb2\x26\x99\x48\xee\x15\x29\xb9\x66\x99\x7d\x79\x21\xee\x51\x20\xce\xf0\xa4\x76\x1e\xba\x3b\x03\xa8\xfe\x39\xaa\x0e\xe1\xc8\x50\xa5\xce\x7f\x5d\x7f\x85\x1f\x74\x24\x2e\x82\x5a\x16\x43\x29\x83\x4f\x90\x84\x08\x88\x6d\xeb\xfd\x27\x48\xaa\x5b\x41\xe1\x0e\x47\x64\x4e\x0b\xf1\x8f\x18\xbc\x91\x1c\x59\xb6\x45\x0a\xe8\x89\x15\x44\x13\x80\x7d\xdc\x6c\xb1\x63\x44\xde\xba\x45\x60\xca\xcd\xbc\xfd\x33\x63\x1c\xda\x0b\xa3\x6c\x49\x4c\x68\x56\x4a\x30\x7f\xae\xd5\xfc\xf6\x30\x52\xc1\xa4\x79\x5a\x0c\x6d\x52\x08\x4d\x4e\x8e\xcf\x8f\xff\x3f\xf6\xde\xbd\xb9\x8d\xdc\xda\x17\xfd\xff\x7c\x0a\x94\x93\x3a\x92\x76\x48\xc9\x9e\x64\x52\xd9\x53\xfb\xde\x94\xb6\xac\xb1\x55\xb1\x65\x5e\x49\x33\x39\xa9\xc9\xec\x09\xd8\x0d\x92\x38\xea\x06\x3a\x00\x5a\x12\x53\xf3\xe1\x6f\x61\xe1\xd1\x68\x92\xb2\x4d\x00\x12\x69\xa7\x3b\x55\x13\x8b\xa2\x1a\xef\x85\xf5\xf8\xad\xdf\x3a\x5a\xdb\x23\x07\x12\xf0\xfc\x72\x29\x15\xa9\x4d\x95\x8a\xa2\x1b\x94\xa4\x75\x03\x35\xe8\x49\x71\x50\x8e\x10\x55\x39\x40\x27\xfa\x8e\x34\x65\x73\x60\x56\x2c\x63\xf4\x08\x49\x8e\x94\xc0\x25\xb5\x7e\x32\xf8\x54\x7f\x49\x89\xd6\x56\xc1\x39\x3c\xf8\xf5\x60\x84\x88\x2a\x8e\xd0\x3d\x67\x07\x0a\xa6\xef\x18\xdd\x70\xd4\x26\x27\xd1\xa0\xae\x23\x4b\xde\x22\x46\x88\x3d\x5b\xbe\x50\x96\xbe\x6e\x10\x6f\x4d\xca\xd7\x02\xab\x14\xa6\xeb\xf0\x39\x7f\xa0\xca\xb2\x39\x68\xf9\xfd\x12\x76\x93\xb9\xb2\x10\x96\xa8\xa2\x77\xe4\x64\x41\x70\xa5\x16\x06\x1e\xcf\x38\x1b\xff\x8b\x08\x0e\xbc\xd8\xcc\xfe\x26\xb5\x1b\x69\x31\xca\xf0\x49\x88\x57\xae\x77\x28\x0b\x32\x26\xb3\x75\xe9\x1e\x7d\xed\xbd\x21\xd1\x2a\x11\x5a\x95\x47\x6f\x6f\x6e\x26\x6f\x88\x0a\xa5\x3c\x83\x0f\xd1\x9b\xf3\x1b\x97\x14\x11\xd4\x8a\xda\x03\xf1\x9e\x07\xad\x39\x46\x0d\x17\xfb\x70\xcb\x2c\xb8\x4c\x5a\x4e\xf4\x04\x57\xcc\x5b\x2e\x95\x09\x0e\x28\xae\xc5\x36\x83\x4c\x39\xde\x47\xf8\xbb\x7c\xf0\x8b\xc9\x31\xfa\x1b\x6f\xf5\x84\x4c\xf1\xb4\x5a\xa2\x7b\xcc\xac\xb7\x3b\x0d\x96\xab\x9f\x17\xba\x2b\x2f\xf4\x0d\xa2\x77\xfe\x5b\x82\x4b\x22\x24\x08\x68\x82\x93\xb3\x6b\xb3\x1d\xf7\xa0\x6f\x59\x97\xf2\xac\x95\x8a\xd7\x68\x61\x87\xdd\xe7\xcc\xb6\x87\xf3\xd8\x1c\x57\xcb\x4f\x2a\x48\x63\x84\xb8\xfd\x9b\xaf\x4e\x44\xaf\x49\x2f\x33\xef\xf6\xf3\xa9\x51\x53\xc3\x69\xb3\x1e\x73\xc3\x7c\x69\x65\x9b\xde\xaa\xd9\x80\x94\x19\x00\xe8\x28\x23\x08\x1d\xa5\xb1\x69\xaf\xbe\x08\xa2\x07\xc9\x6f\xca\x87\x6b\x47\xd9\xb0\xdb\xe8\x49\xf0\xdb\xc8\xc2\xf2\xec\xe6\x33\x91\xa3\xb4\x52\xe1\xab\x2f\x0f\x2a\x34\x17\x98\x71\x46\x0b\x5c\xd1\x7f\x91\x12\xb5\x0d\x67\x36\x59\x0b\x34\xdb\x02\x4b\x32\x86\x50\x2e\x33\xe2\x5c\x06\xf4\xc9\x5a\x3a\x28\xce\x41\xdd\x03\x34\x96\x16\xf7\xa6\xd7\x79\xba\x9a\x15\x66\x9c\xcc\x05\x1e\x3e\x6b\x11\xda\xde\x62\xe5\xd9\xf1\xe8\x8b\x50\x27\x51\xa6\x4c\xfe\x75\xb2\x2c\xc5\x11\x2e\x0a\x20\x88\x36\xd7\x15\x08\x5e\x49\xc4\x5d\xfa\xfe\xca\x36\xaf\x5a\x05\xdc\x37\xdd\xcb\x04\xb1\x05\x62\x6d\x3d\x25\xa2\x63\x1a\x14\x6a\x7d\x4e\xb3\x78\x5d\x6c\xb3\xa6\x39\x17\xf6\x73\x3a\x06\x66\x73\x82\x5e\xe9\x96\xff\xf8\xed\xb7\xbf\xff\x36\x43\x3b\x7a\x78\xae\x15\xcc\xd0\xc5\xe9\xe5\xe9\x2f\xd7\x3f\x9e\x01\x7f\x79\xea\xeb\x33\x65\x5d\xe6\xce\xb9\xcc\x9a\x71\xf9\xa4\xf9\x96\xc0\x04\x98\x2c\x65\x73\x1f\x89\x6b\xe8\x95\xde\x84\xad\x34\x9c\xe7\xd6\x26\xb1\xde\x6d\xe3\x62\x96\x19\xf2\xa4\xc2\x38\x99\x16\x58\x7b\x21\xa9\x64\x45\x48\x93\xcd\xe2\xbf\xd6\x6f\xeb\xd5\x97\x41\x65\x2b\x4c\x99\x71\xf0\x30\xf5\x7d\xf9\xb6\xd4\x38\xf4\xe1\x2b\x32\xfe\x25\x29\x38\x2b\x53\x4c\x80\x5c\x2a\xad\xed\x49\xd6\x33\x77\x6d\xde\xe9\x5c\xc4\xdd\x55\x62\x1b\x03\x4b\x32\x75\x45\x91\x5f\xd5\x3c\x72\xd2\xd0\x0b\xc0\xdb\xfe\xf8\x87\xf8\x00\x59\xd1\x5c\xf3\xe2\x36\xa3\x8b\x2c\x51\x80\xbd\xd6\x27\xad\x30\xb1\xc0\x9b\xb3\x89\xe9\x9c\x5e\x99\xcb\x0f\x37\x1d\x97\x88\xd6\xc2\x71\x17\xd6\x7d\x6b\xa3\x85\x98\x95\xe8\x96\x34\x69\xd6\xa5\x16\x98\x0e\x97\xd6\x87\xa5\x81\xef\x5d\xd8\x20\xb2\xc9\xd7\x35\x82\xc0\xc1\xc9\x8c\x46\x9c\x56\x52\x26\x88\x7b\x43\x20\xd0\x1a\x21\x33\x4c\x2b\x84\xc1\x2b\xaf\x68\x4d\x4c\xfd\x6b\x70\xf6\x77\x40\x84\xaf\x48\xe0\x7c\xad\xde\xc6\x03\x87\x31\xfe\x6e\x6b\xaf\x61\x2a\xcd\xc2\xd7\x6d\x06\x58\x99\x2d\x7a\x34\x59\x83\x19\xf0\x39\xcf\x60\x06\x44\x9a\x01\x8d\x20\xd7\x8a\x47\xeb\x9a\xd9\x00\x37\xa6\x1b\x8f\xc0\x6d\xa6\x64\xc6\x05\x59\xc5\xdb\x04\x38\x18\x0b\xc5\x4e\x80\x9a\x9e\x4e\x2e\x7c\xec\x8b\xf7\xb0\x2e\x86\x0a\x57\xb6\xc5\xc2\x85\x49\x19\x91\xf2\x04\x90\x35\x6d\x63\x1c\xcb\x70\xb5\xb5\x82\xc4\xa3\x7c\x1a\x41\x48\x0d\xf3\x38\xea\xe8\x69\xf4\x70\x09\x33\x1f\x12\x55\x98\xb8\xb9\x83\x15\x59\x18\x98\x9b\xae\x59\x52\x38\xbf\x9b\xd8\x42\x60\xb9\x20\x90\x8c\x49\x1e\xa8\x92\xa6\x51\x43\xef\xe9\x66\x5c\xeb\x0b\x73\x81\x0b\x82\x1a\x22\x28\xd7\x2a\x46\xcb\x54\xc9\xef\x19\x9a\x92\x39\x65\xd2\xad\x58\x4a\x97\xdc\x96\x00\x24\x11\x95\xbe\x04\xf4\x31\xba\xea\x95\x22\xb3\x74\x55\x05\xef\x64\xa6\x9d\xa2\x51\xa6\x29\x01\xe5\x05\xb6\x41\x8b\xab\x6a\xd9\x6d\xbc\x90\x71\xf2\x91\x19\x8a\xdf\x10\x66\x66\x0f\x5b\x06\x03\x2d\x49\x85\x97\x26\x25\x79\x46\x19\x78\x7f\x85\x3c\x3a\x4e\x87\x66\x45\x77\x90\x8b\xe0\x9d\x8f\xee\x0c\x2a\x91\x20\xb8\x48\x22\xc6\x1d\x30\x60\x9f\x7a\x06\x0c\xd8\x80\x01\x1b\x30\x60\xeb\xcf\x80\x01\xeb\x3f\x03\x06\xec\xf1\x0e\xed\x73\xd0\x6e\xc0\x80\x0d\x5e\x99\xf5\x67\xc0\x80\x45\x3d\x03\x06\xec\x93\xcf\xde\x89\xe8\x01\x03\xf6\x19\xcf\x80\x01\xfb\xcc\x67\xc0\x80\x0d\x18\xb0\x01\x03\x36\x60\xc0\x12\x9e\x01\x03\xb6\xfd\xf0\x86\xe0\x4f\xfc\x33\x60\xc0\x06\x0c\xd8\x96\xcf\x80\x01\x5b\x79\x06\x0c\xd8\x80\x01\xfb\xd8\x33\x60\xc0\x06\x0c\x98\x7d\x06\x6f\xe3\xda\x33\x60\xc0\x36\x3c\x03\x06\x6c\xbb\x76\x06\x33\x20\xed\x65\x4f\x62\x06\x48\xc5\x9b\x6b\x3a\x4f\x20\x1a\xcc\x75\x0c\xae\x7d\x4f\x2c\x0b\xa1\xb4\xd5\x5b\xa5\xf9\xd0\xf9\xb1\x80\xa1\x4c\x1f\x88\x10\xa5\xd3\xdd\x24\x53\xa2\x4d\x04\x3d\xac\x26\xe5\x36\xb9\x98\x41\x00\x39\x20\x49\xd3\xa7\xc2\x8a\x35\xdd\x4e\x50\x27\xa0\xaf\x3e\xbb\xdb\x8d\x32\x6d\xbb\xc4\xf7\x20\x98\x8f\x02\x33\x53\x6a\xd3\xd6\x5d\xd6\xd7\xfb\x84\x97\xd2\x95\x26\x60\x9c\x8d\x0d\xfb\xe7\xb1\xee\xf0\x31\x97\xc7\x09\xde\xe0\x44\xd2\x33\x83\x91\x9b\x08\x3e\x4d\x27\x3e\x83\xb7\x48\xa8\xc8\xf9\x95\xd2\x9e\xa5\xa0\x77\x76\x86\xdc\xd9\x13\xe4\x53\x06\xb4\x4e\xce\x3b\x7c\x4f\x51\x3a\xfb\x89\xd0\xd9\x47\x74\xce\x2e\x90\x39\x3b\x47\xe5\xe4\x09\xf7\x66\x08\xf5\x66\xd2\x94\x9e\x20\x6c\x62\x01\xde\x37\x0b\x41\xe4\x82\x57\xd1\x02\x27\x97\xb0\x79\x4f\x19\xad\xdb\x1a\xe8\xf6\xb5\x4c\xa1\x77\x1e\x84\x2e\x9d\xc8\xb0\xd8\x74\x13\x09\x07\x5e\xfe\x92\x40\xbd\x63\x4c\x2b\xbd\xb5\x80\xc4\x72\x81\xef\x40\x59\x6a\x8b\x82\x90\x32\x45\x5d\x0a\xbd\xa8\xbf\x3f\xf6\x3d\x34\x64\xe4\x54\xa2\x57\x69\x57\x4d\x9a\x3e\x1e\xb8\x99\x7e\xff\x4d\xd4\x3b\xe6\xa2\xc9\x73\x4b\xbf\xb9\x9a\x9c\xf5\x6e\x69\xf8\xe0\x2d\x1c\xe3\xb3\x05\x29\x6e\xaf\x2c\xc4\x63\x77\x37\x73\xba\xfb\x23\xc9\xf5\x91\x43\x31\x48\xb5\xee\xfb\x3a\xa8\x36\xc0\xfb\xa1\xb9\x39\xac\x22\x11\x77\xb4\x20\xc7\xcf\x60\x40\xe7\x32\x4a\xd3\x0f\x02\x02\xf7\x35\x0c\x7c\x5f\xd4\xae\x6b\xd3\x1d\xef\xf9\x0e\x7c\x27\xb6\xa7\x00\x66\xac\x70\xe1\xd7\x66\xbe\xf9\xd0\x25\x75\xe3\x50\x12\xe2\x53\x14\xe6\x54\x2d\xda\xe9\x71\xc1\xeb\x13\x2d\x3a\xcc\x7f\xa6\x15\x9f\x9e\xd4\x58\x2a\x22\x4e\x4a\x5e\xd8\x6b\x7d\x5c\xe8\x1e\x50\x36\x3f\xae\xcb\xa3\xe3\xff\x95\xd4\x87\x0b\xeb\xc3\xb5\xe9\x41\x8f\x18\xaf\x53\xa2\xe5\x3e\x17\x2b\x56\xac\x9e\x94\xf4\x4d\x9a\x7c\x7f\xa7\x56\x4f\x48\x84\xcb\xee\x04\x2a\x3b\x48\x6d\x94\xc1\x51\x9d\x53\xa8\xec\x07\x1c\xf6\xc9\xa0\xb0\x59\xce\x6a\x26\x08\xec\x1e\xc1\x5f\xf7\xc6\x16\xda\x17\xc8\xeb\x1e\xd6\xdc\xcf\x00\x73\xcd\x01\x71\xcd\x07\x6f\xdd\xd7\xd2\xf4\x4f\x06\x69\xfd\x22\xe0\xac\x19\xe3\x36\x99\x60\xac\xcf\x01\x61\xdd\x5f\x1f\x0c\xca\x00\x5b\x7d\x3e\xc8\x6a\x96\x79\xcc\x6a\xc5\x26\x8a\x84\x1d\x40\x54\x9f\x23\x2e\xfd\x64\x31\xe9\x0c\xf1\xe8\x9c\xb1\xe8\x6c\x71\xe8\x27\x83\xa2\xa6\xc3\x50\xb3\xfa\x14\x9e\x05\x7e\x9a\x13\x7a\x9a\xbc\xbe\x94\x51\x45\x71\xf5\x9a\x54\x78\x79\x9d\x06\x50\xcc\xb5\x12\x97\x6b\x20\x46\xe3\xb6\xee\xc7\xdb\x17\x58\x22\x57\x05\xc9\x52\x8f\xb8\x20\xb4\x55\x81\x21\x7e\x6c\xc6\x17\x5d\x8c\x0c\x6d\xcf\x45\x71\xcf\xc5\x6d\xc5\x71\x29\x4f\x1a\x6e\xfe\xd3\x31\x51\x04\x14\x14\x49\x6a\xfa\x7e\xb8\xc7\x0d\xdf\xc7\x9e\xec\x9a\xb7\xfc\x1e\xf1\x99\x22\x0c\x1d\x52\xe6\x76\xce\x51\xe0\xa5\xe9\xc2\x23\xc9\xf1\x0e\xfd\xd6\x57\x2f\x5d\x23\x5f\x5f\xdc\x03\x22\x43\x52\xee\x75\xe4\xcb\xf6\xf1\xd3\xa1\x2f\xfb\xc5\x59\x5b\xf5\xc3\x5f\x26\x24\x96\x27\xf6\xf5\xea\x18\xbd\xb7\xea\xc4\x2b\xe8\x8f\x17\x45\x98\x95\xc8\xf2\x46\x7d\x7d\xfb\x24\x19\x82\xdd\x37\x6e\x3c\x66\xba\x8f\x67\x31\x37\xb0\xd6\x32\x39\xc2\xfa\x5b\xa0\x80\x0e\x4e\xd7\xbd\x71\xba\xee\x08\x19\xfc\xf5\x59\x5b\xcf\x8f\x04\x1e\xac\xad\x7f\x17\x6b\x2b\xa0\x6b\x7b\x23\x70\x41\x26\xfb\xa4\xbc\x39\x01\xd2\x25\xa8\x75\x3a\x9c\x17\x17\x8c\x10\x93\xd0\xd4\x91\xf1\x01\xef\xdc\xac\xad\xaa\xa5\xf1\x21\xf6\x98\x19\xe3\xb7\xd6\xcd\x82\xac\x51\xda\x41\x28\x75\x43\xef\x3a\xdb\xa4\x11\xdc\x6a\x24\xa2\x65\x4c\xab\x18\xf6\x38\xe9\xce\x6b\x5b\x44\x12\x16\xef\x4e\xc7\x3d\xc2\x3d\x0b\x8e\x06\xa0\xe7\x82\xa0\x2e\xaf\xa6\xdf\x11\xdd\xea\x8c\x8b\x82\x4e\xab\x25\x5a\xe0\x4a\x1b\x4b\x16\x3c\x7c\x4b\xab\xca\xbe\x26\x01\xac\x4c\x94\x09\x3d\x1b\x8d\xa6\xe2\x6c\x0e\x93\x81\x4d\x47\xc8\x43\x43\x0a\xdd\x66\x51\x11\xcc\xda\xc6\xf4\x53\xeb\x47\x4b\xde\x0a\xd7\xcf\x24\xb4\x76\xd0\x3a\x95\x88\xd1\x6a\xe4\xa6\xbc\x4f\xcd\xb8\xbe\xe7\x3b\x97\xb2\x24\xa5\x65\x55\xbc\xa7\x92\x8c\xe0\x9d\xd1\x7d\x32\x7d\xe1\x77\x44\x08\x5a\x12\xb3\x6f\xcc\x67\x8d\xe0\x77\xb4\xec\xb0\xe3\x7a\x5b\x00\x6e\x3b\xba\xad\x1f\xe1\xbd\x4e\xb4\x32\xce\xc6\x8c\xcc\x31\xa8\xc7\x56\xa0\x19\x44\xa7\x69\xdf\xe0\x07\x59\x49\x0b\xac\x88\x04\xac\x7c\x8f\x72\xf5\x8e\xe2\xe8\x9e\xe8\xf1\x04\x3b\x0a\x1d\x32\x8e\x38\x64\xbc\xb5\x8c\xaa\x25\x44\xf4\x16\xad\x42\x25\xbf\x67\x47\x29\x07\xd3\xc0\x1c\x30\x9a\x12\x85\xbb\xa4\x35\xa7\x92\x49\x44\x18\x9e\x56\xfa\xec\x01\x86\xfc\x66\xe3\x06\x40\x33\x82\x55\x2b\x08\x9a\x63\x95\x20\x25\x36\x68\xf3\x66\x3d\x3f\xbe\xed\xa8\xb4\xf1\xba\x19\x6a\x99\x24\x89\x8a\x6c\x36\x13\x20\x32\x13\x53\x9f\x68\xde\xaa\x3d\xb9\x47\x1e\x73\x1d\x99\x8c\x92\xc0\x48\xa4\x35\x91\x88\xb7\x09\x9e\xbc\x9e\xf9\x67\x9b\xcb\x69\xe1\x0d\x7e\xa7\x8d\x4f\x6c\xd8\x34\xc7\x0e\xbb\x0c\xb4\xf2\x0d\x79\x28\x1d\xf0\xca\xe4\xf8\xbe\xbe\xbc\xfe\xe5\xdd\xe9\x7f\x9f\xbf\x8b\xdb\x02\x20\xeb\x58\xa8\x3b\xb7\x8c\xfe\xb3\x25\x08\xd7\x9c\xcd\x11\xae\xc2\x14\x98\x11\x38\x3a\x83\x0f\x40\x2a\xe6\x4d\x96\x89\xd4\x6b\xf5\x25\x10\x25\x18\xd6\xe0\x98\xcf\x91\x11\x14\x8b\x02\x49\x40\x7f\xf4\x91\x30\x6e\x0c\x80\x3f\xed\x91\x37\x30\xa2\xf4\x19\x37\x06\x21\x65\x08\x23\x49\xd9\xbc\x4a\xb6\x05\x93\x3d\x22\xa9\xfe\x90\x71\x37\x82\x49\xac\x5b\x24\xdd\x29\xd2\xeb\x43\xbc\x55\x99\xcf\x21\xd0\x5d\x66\xce\x05\x40\x1e\x1a\x2e\x89\x73\x01\x18\x1d\xf7\x62\x82\x70\x59\x8a\x24\x3d\xda\x0a\x1b\x6f\xa3\x1b\x82\x00\xd3\xac\x09\xfd\x8e\xd0\x4b\xf4\x5f\xe8\x01\xfd\x17\x38\x04\xfe\x18\xdf\x54\x1e\x73\x3b\x07\xa2\x79\xc1\xa5\xba\x98\x64\x5a\xe8\xbf\x2e\xb0\x82\x37\xea\xf5\x50\x1c\x4d\xa9\xb5\xcc\xc8\x83\x22\x42\x6b\xc4\x76\x0d\x53\x67\x2e\xc9\xb9\xa0\x3b\xf8\xa5\xec\xee\xd4\x38\xeb\xc5\xac\x0f\x84\x7e\xa6\xfd\x0d\x0d\xbf\xe5\x52\x5d\x5a\x69\x1d\xb2\x5c\x84\xfd\xa8\xb1\x2a\x16\x7d\x71\x9f\xd2\xea\x7b\xbd\xf7\x82\xeb\xbf\xe4\x70\x51\x9a\x74\xb6\x05\x4d\x10\x0e\xfb\x73\x62\xd3\x20\x73\xf9\xb6\xee\xc7\xb6\xd6\x8a\x7b\x13\xd4\x30\xab\xb7\x05\x95\x23\x1a\x5e\x1e\xa3\x73\x5c\x2c\x12\x7a\xa1\x67\xa3\x0c\x94\x81\x86\x97\xa6\x1b\x0b\x7c\xa7\xf7\xb8\x6d\x15\xe0\x7b\x46\x75\xf5\x81\x32\x38\x70\x5a\x62\x15\x98\xa1\x69\x0a\x7e\x4c\x90\x19\x11\xc2\xa4\x4c\x4e\x97\x2e\xf3\x22\x79\xb7\x25\x49\xb9\x46\x70\xc5\x0b\x1e\xcd\x6c\x90\x73\xab\x4c\x6c\x5f\x60\xee\x21\x6c\xe5\x03\x85\x3f\xbc\x9e\x8c\xd0\xcd\xd9\x64\x84\xb8\x40\xd7\x67\x69\x38\x90\xd0\x1a\x7d\x71\x73\x36\x79\xb1\xd3\x15\x08\xd2\x39\x6e\xce\x26\x11\x2f\x59\x47\x12\xd6\xb8\x19\xdf\x92\x65\xa4\x76\x97\x43\xc3\x1c\xfb\x8d\x95\x65\x40\x66\x9a\x6b\xdc\x6c\xfd\x36\x41\x70\x49\x07\xb2\x85\xcf\x7f\x06\xb2\x85\x81\x6c\x61\x20\x5b\x18\xc8\x16\x06\xb2\x85\xfd\x05\xfa\x0f\x64\x0b\x9f\x7c\x06\xb2\x85\x47\x9f\x81\x6c\x61\xab\x67\x20\x5b\x58\x7f\x06\xb2\x85\x8f\x3c\x03\xd9\x82\x7f\x06\xb2\x85\x81\x6c\xe1\xcb\x95\xda\x03\xd9\xc2\xea\x33\x90\x2d\x0c\x64\x0b\x03\xd9\x42\xf8\x0c\x64\x0b\x8f\x3c\x03\xd9\xc2\x40\xb6\x30\x90\x2d\x7c\xfc\x19\xc8\x16\xa2\x9f\x81\x6c\x61\xbb\x67\x48\xff\xd9\xf2\x19\xc8\x16\x06\xb2\x85\xd5\x67\x20\x5b\xf8\xe4\xb3\x1f\xee\xf1\x81\x6c\x61\x20\x5b\xf8\xe8\x33\x90\x2d\x0c\x64\x0b\x1f\x7d\x06\xb2\x85\x88\x67\xef\x9c\xae\x03\xd9\xc2\x40\xb6\xf0\xb1\x36\x06\x6b\x6b\xbb\x67\x20\x5b\x18\xc8\x16\xd6\x9e\x81\x6c\x61\xfd\x19\xc8\x16\x06\xb2\x85\x81\x6c\x61\x20\x5b\xf0\xcf\x40\xb6\xf0\xb5\xfb\x9d\x04\x91\xf4\x5f\x64\xc2\x2b\x5a\x2c\x93\xf3\x4c\xae\x88\xe4\xad\x28\xf4\x8d\x0d\xaf\x45\x0d\xbc\xd7\x7b\x14\x92\x94\xec\x3d\x4b\xde\xbf\x0a\x26\x2e\x4c\xe2\x17\x76\x0e\x9e\x62\x0a\xf6\x22\x91\xdf\x0d\xf0\x32\x1e\x41\x00\x2f\x51\x58\x28\x33\x7d\x71\xce\xd2\x64\xab\x3d\x1c\xc8\x3e\x24\x12\x86\xdc\x23\x7e\x17\x29\xee\x85\x2d\x7d\x74\x73\xe1\xa6\xa9\x68\x4a\x4a\x26\x42\xd7\x2d\x68\x17\xc4\x86\xc0\xe5\x77\xa8\x68\xda\x11\xaa\x49\xcd\x45\x42\x62\x44\x06\x0b\xae\xb7\x55\xf6\x61\x9d\xae\x4c\x87\xdc\xe4\x2b\x0e\xf3\xbf\x34\xf6\x42\x47\x10\xe3\xd7\x8a\x3a\x71\x98\x84\x35\x5b\x2f\x5b\x4d\x55\xcf\x0b\x74\xc9\xd5\x95\x3d\xdc\x3b\x5b\xaf\xcc\x88\x05\x37\x85\xe9\xdc\x32\x91\x0b\xde\x5d\x68\x9f\x9d\x3b\x89\xce\x37\x7c\x0a\xf1\x4f\xd9\xe8\x97\xf8\x31\x45\x75\x08\x57\x82\xe0\x72\x09\xdd\x28\x00\xaf\xd7\xf9\xff\xbe\xc0\xb4\xcd\xa2\xc2\x34\x1e\xe4\x97\xeb\x48\x9f\x41\x2f\x90\xde\xaf\x1d\xf8\x1d\xf2\xc8\xfc\x62\x8d\x3c\xc4\x9b\x9a\x33\x7e\xec\x7e\x65\xfe\x78\x94\x60\xe9\x61\x05\xbb\x0b\x8c\x18\x30\x65\xa9\x0c\xd5\x84\x34\xe3\xce\x98\x74\x25\x69\x88\xd6\xde\x8d\xb3\x33\x5e\x47\x5f\x32\x5c\xd3\xc2\x9d\x8a\x53\xb3\x09\x29\x67\x2b\x16\x60\x8e\x2e\x6b\xc3\xb4\xae\x5b\x85\xa7\x15\x39\x46\x17\x6a\x63\xa9\xfc\xb4\x9c\x65\x94\x05\xab\x9a\x88\x53\xdd\xa8\x40\xc3\xa6\x32\xcc\x0b\x84\x69\xf1\xc3\x19\x41\x84\x29\xb1\xd4\xfb\x6f\xc2\xcb\x6b\xbd\x05\x7b\xdf\x4e\x26\x64\x48\x84\xa7\xe6\x80\xa6\x26\xc2\x52\xf3\x80\x49\xd3\x81\xa4\x79\x41\xa4\x9d\xbb\xdf\xf0\xc9\x84\xd9\x39\xbd\x6d\xa1\xaf\x80\x0d\xa2\x09\xf1\x59\x62\x0f\x74\x8b\x13\x5e\x6a\x05\x47\x10\x23\x9f\xfc\x19\x35\xce\xbe\x0b\xdd\xb9\x5b\xf0\xce\x61\xd5\x69\x3e\xf8\x0e\xd3\x4a\x1f\xe0\xc4\x0e\xf8\xec\xe6\x4c\x51\x9a\x4c\x71\x05\x0b\xa4\xdf\xa7\xcd\x62\x53\xb0\x7a\x59\x5c\xc5\x82\x4b\xc2\x40\x5e\x62\x9f\x6d\xe3\x73\x01\xac\x88\x29\xcd\x5d\x9c\x8a\xf8\xbd\x98\x21\x52\x37\x6a\x39\x42\xe4\x8e\x88\xa5\x5a\x00\x32\x40\x70\x83\x16\x81\x26\x74\xdf\x6a\x5c\x06\xbb\x63\x84\xb8\x73\x16\x27\x36\x0f\xf7\x83\xb5\x9f\xda\x4a\x19\x6b\x0a\xf4\xef\xa4\x74\x50\xf3\x64\xd8\x35\xb9\x49\x4f\x50\xaa\xd0\xcc\x49\x5a\xa2\x9f\x8a\xd6\x34\x8e\x0a\x12\x65\x3c\x0b\xef\xa0\x17\x41\x9a\x87\xde\x12\x35\x7e\x00\x57\x22\xae\x79\xcb\x60\x6b\x14\xbc\x6e\x5a\x15\xa8\xe4\x4e\xbb\x7f\x36\x1f\x63\xc1\xd9\x8c\xce\x6d\x14\xec\xa4\xc6\x0c\xcf\xc9\xd8\x77\x67\xdc\xa9\x37\x27\xbb\x43\x67\xe0\xd2\xd1\x48\x4c\x72\xe4\x14\x63\xa5\x88\x60\xdf\xa1\xff\x39\xfc\xfb\xef\x7e\x1d\x1f\xfd\xf9\xf0\xf0\xa7\x97\xe3\xff\xfc\xf9\x77\x87\x7f\x3f\x86\x7f\xfc\xc7\xd1\x9f\x8f\x7e\x75\x3f\xfc\xee\xe8\xe8\xf0\xf0\xa7\xbf\xbc\x7f\x73\x33\x39\xff\x99\x1e\xfd\xfa\x13\x6b\xeb\x5b\xf3\xd3\xaf\x87\x3f\x91\xf3\x9f\x3f\xf3\x25\x47\x47\x7f\xfe\x6d\x7c\xa4\x30\x35\x2c\x9e\x2f\x28\x9e\x29\x24\xfe\x24\x01\x71\x2b\x63\x77\x7e\xf8\xed\x15\xb8\x76\xfc\x6d\x24\xe1\x63\xc7\x5f\x24\xfb\x4f\x2e\x66\x5d\xfb\x54\x22\x5e\x53\xa5\xac\xb7\x00\x87\x3c\x35\x2b\xbe\x1b\x2b\xb0\xe8\xcc\x28\x50\x54\x86\x7c\x29\x9d\xcb\x27\xba\x5b\xfe\x7e\x05\x6f\x15\x43\xb4\x6e\x2a\x52\x13\xa6\x40\xf0\x8c\x9d\x6d\x0b\xae\xbf\xe3\x6e\x04\x05\x66\x8c\x2b\x44\x1e\x0a\x42\x4a\xdb\xc9\x41\x36\x06\xcf\x20\x1b\x07\xd9\xf8\xa9\x27\xd9\x7f\x9d\xc9\x91\x19\xfa\xac\xd7\xa2\x51\x5a\x2e\x98\x23\xe6\xd4\x67\xf8\xba\xe7\x38\xe0\x33\x44\x62\xb9\x2c\xbb\x46\x2c\x3d\x26\x8e\xf5\x56\x22\xc8\x0f\xb7\x52\x49\x3a\xac\x8c\xb1\x45\x39\xdb\x0f\x2e\xf4\xde\x72\x5f\xb5\xd5\x2e\x9d\xd7\x01\xb3\xb8\xd6\xed\xc1\xa3\xa9\x7b\xe4\x40\xdd\x0b\x52\xdc\x1a\x17\x72\x49\x0c\xc8\x82\x98\x3b\x28\x4e\x03\x08\x68\xf2\x17\xbc\xad\x4a\xdd\x86\x9d\x0e\x62\x16\xe8\x81\xaa\xe3\x8f\xae\x61\x54\xbb\x5f\x29\x3d\xbc\x3d\xb3\x7a\x0f\x05\xba\xcc\x82\xdf\x87\xaa\x04\xcc\xa9\x56\x18\x16\x98\x95\xd1\xf8\xfb\x3d\x08\x2b\x63\xc0\xa4\xef\x28\x14\x6c\x1a\xdf\x87\xe0\xe2\xb5\x87\xea\x6b\x39\x8c\x2d\x50\x1f\xdf\x12\xa6\x0f\xd0\xfa\xc2\xcf\x3c\xa5\x03\x15\xa0\xd1\xa5\x30\x15\x00\xa8\x12\x2b\x2a\xb5\xb6\x69\xa0\x6e\xe0\x51\x69\xb8\x94\x74\x5a\x91\x0e\x86\xf3\xc2\x6e\xce\x17\x5a\x78\xb8\xdb\x22\x8d\x62\x31\x83\x6f\x2f\x83\x02\xa0\x67\xf5\x8c\x97\x29\x6a\xdc\x8a\x47\xdf\x0b\x61\x83\xe0\x84\x12\x1e\xa5\x91\xc1\x20\x80\xf5\xba\xf6\x57\xf5\xeb\x70\xe5\xeb\x33\x89\x15\x8f\x57\xe9\xf2\xb8\xf3\x5d\x37\xf6\xcb\x4b\xdb\xdb\x14\x82\x54\x60\xe4\xc8\x05\x6d\xd0\x94\xa8\x7b\x42\x56\x92\x12\xba\x7d\x73\x28\x8f\x1c\x4a\x39\xb1\x13\x1d\x52\xc1\x20\x3e\x8e\xd1\xa4\x77\xcc\x21\xe6\x9d\x4e\x34\x72\xc1\xbe\x5b\x15\x51\xc0\x84\xea\xc4\x8c\x13\x61\x1b\xc6\x0a\x31\xc0\xb4\x88\xa5\x1f\x2c\x01\xed\x67\x6d\xcc\xc9\xc3\xbb\xe4\x2a\x6d\x84\xc9\x43\xd3\x7a\x94\xf5\xe6\x3f\xc9\x28\x33\x05\x4b\x2c\xac\x68\x8f\x4e\x61\xff\xaa\xb5\x73\x67\xb7\xbe\x17\xce\xbd\x28\x73\x20\xbe\x53\x77\xce\xa9\x42\x35\x97\x0a\x7d\xf3\xed\xb7\x88\x18\x5f\x8c\x01\x99\x24\xbb\xa0\x51\x36\x06\xa6\x2c\x1c\x4c\xf9\x68\x17\x51\x36\xea\x45\xf4\x91\xc8\x47\x1c\xd9\x58\x66\xe0\x93\x24\x45\x2b\xa8\x5a\x6a\x5b\x80\x3c\x44\x45\x18\x73\x9c\x95\x2e\x0f\xf1\xba\xdf\x21\x8b\x86\x71\x27\xc7\xfc\x0e\xf1\xc6\x50\x4b\x3f\x5a\x3c\xad\xb3\x0a\x5b\x06\xce\x80\xb8\x5d\x7e\x31\xd3\xab\x64\x12\x53\xc0\x70\x04\xac\xce\x6a\x17\x5d\xca\x88\xe9\xce\x3f\x5b\x7a\x87\x2b\x2d\x9a\xbb\xbf\x98\x40\x12\x41\xf8\x47\x5f\x20\x84\x0a\xe4\xc5\x44\xd0\x3b\x5a\x91\x39\x39\x97\x05\x36\xca\xc4\xae\xdd\xf0\xa7\x8f\xf4\x0b\xf6\x83\xe0\x95\x44\xf7\x0b\xa2\x16\x44\x20\xec\x12\x97\x00\xe2\x33\xc7\x94\xa1\x9a\x8b\x14\x18\x88\x6d\x54\x9a\xcc\x29\xaa\x24\x6a\xb0\xd0\x6b\xef\x32\xa4\x0c\xd0\x68\xca\x79\x65\x59\xe2\xab\x65\xd7\x2f\x1a\x8f\x97\x80\x98\x3b\xff\x85\x91\xfb\x5f\x74\x2f\x24\x9a\x55\x78\xee\x13\xa3\xe0\x8a\x59\xd5\xec\x92\x93\xb6\x1e\x9d\x68\xa0\x40\x6f\xf5\x8d\x72\x8f\x97\xb2\x4b\x67\xeb\xda\xa6\x09\xb2\xfd\xd5\x11\x9c\x62\x2c\x91\x6f\xbb\x8c\x7e\xd9\x37\x47\xc0\x3f\x72\x76\x3a\xf9\xe5\xfa\x6f\xd7\xbf\x9c\xbe\x7e\x7f\x71\x19\xfd\xb2\x4b\xae\x88\x89\xa3\x04\xae\x25\xeb\x70\xb2\xab\xe0\xa1\xba\xc7\x5c\x1e\x03\x48\x02\xb8\xd4\x58\xc9\xef\x13\x91\x64\x7a\x4f\x11\x1c\xe7\xc7\xc0\x4d\x73\x2a\x6a\x2e\x26\x82\xcf\x68\x15\xad\x7b\xe7\x3a\xc1\x2b\xdd\x71\x98\x92\x53\xfb\x71\x27\xee\x0d\xbd\xcf\x3a\x74\x31\x10\xd4\x14\x48\x64\xf4\x6b\xe2\x63\x58\xbd\x14\x40\x93\x90\xb8\xd2\xc5\xf8\x43\xb4\xd3\x3d\xb3\x73\xf2\x04\xdd\x8d\xc8\x3f\xcf\x61\xa4\x57\xbc\xc0\x15\x14\xae\x4b\xdb\xf8\x28\xb3\x89\xb0\xda\xaf\x20\xd9\x13\xbb\xed\x8c\x2a\x8e\x4b\xe3\xdd\x36\xc2\xbf\x24\xae\xa8\x85\x53\x76\x00\x22\x97\xd4\x91\x1b\x93\x68\x07\xed\xb9\xec\xd4\x46\x10\x17\x21\x5d\x6d\x9e\x9b\x5a\x1e\x49\x4d\xbe\xef\x03\x0e\xed\x28\x7b\x3c\x0a\xa9\x67\xce\x37\x63\x0f\x18\x9d\x81\x67\x03\x3c\x8e\xda\x64\x5e\x36\xc6\xd5\xf8\xce\x2d\x43\x42\xc5\xab\x4c\x66\x2c\xbc\x64\x4f\x76\xa7\x99\x1f\xbf\x23\x4d\x96\xd0\x2d\xd5\x33\x38\xeb\x84\xb4\xdb\x36\x4e\x07\x31\xa9\x42\x89\xfb\xf1\x47\xa8\xad\xe8\xe4\x7f\x06\x37\x91\x5f\x62\x34\x0e\x8e\x56\x23\xc8\x78\xfd\x78\xa5\x5a\xde\x57\x2d\x53\xb4\x26\x8e\x7a\x6a\xbc\xa2\x13\x09\xf3\xeb\x03\xe9\x89\xde\xb3\x6c\x74\x84\x7e\x60\x70\x5e\x19\x29\xd1\x18\x31\xde\x2d\x11\x61\x33\x2e\x0a\x70\x01\xec\x74\x83\x17\xb8\xc1\x53\x5a\xd1\x14\x61\x9e\x6b\x83\x43\xdd\xa4\xa0\x3f\x80\x5b\x29\xcb\x93\x52\xf0\xc6\xdc\xc4\x8e\x13\x22\x3d\x05\xa0\x9f\x7b\x1c\x52\xfc\x5b\x9f\x50\xaf\x23\x73\x81\x99\xea\x48\x07\xd6\x36\xce\xbf\xa3\x0e\x92\x43\x09\xc0\x65\xbe\x0a\x64\xa7\xa5\x96\x19\xe1\xb2\x25\x9f\xab\x7d\x63\x33\x3f\x73\x83\x0b\x92\x8f\xd1\xe4\xc3\xf5\xc5\xff\x59\x39\x37\xf1\xaa\x9d\x79\xf6\x9b\xcb\x58\xcb\x83\x6c\xdb\xe6\x8a\xd4\xfc\x6e\xd8\x38\x5f\xfd\xc6\xf1\x0e\xa2\x9d\x13\x31\x5e\xb5\x61\xec\x97\xb2\xa0\x6b\xa8\x4e\xd2\x75\x26\x9e\xb3\xa8\xff\xd6\x20\x27\x15\x0b\x82\xf4\x57\x98\xa2\xb8\xaa\x96\xa1\x8f\x54\x71\x53\xe3\x30\x4b\xa1\xee\xf0\x76\x9d\xe1\x4a\x7e\xa9\x57\x64\x8a\x6b\xa7\x11\xbc\x78\xcf\x5b\x96\x87\xd9\x31\x61\xc7\xf9\x8e\xa0\x92\x30\xae\xac\x37\x05\x6c\x09\x3e\x83\xdf\x22\x03\x90\x0e\x48\x9b\x7b\x7a\x4e\x82\x9a\x75\x13\xa8\x56\x1e\x49\xe2\xf4\x70\x63\xbf\xb4\x92\xc8\xcd\x7a\x55\x87\x97\x9e\x25\x60\x0a\x04\xc1\xa5\x81\xb4\x60\xb5\x30\x6c\xa2\x35\x96\xb7\xa4\x34\x1f\x24\x32\x29\x79\xd6\x24\xc8\x98\x73\x33\x7d\xa3\x27\xd7\x25\xc8\x82\x43\xd8\xc0\xef\x80\x5a\x29\xc5\x14\xdb\xe9\x69\x48\x10\xec\x7a\x11\x3e\xb0\x6a\x79\xc5\xb9\xfa\xde\x17\x4b\xdd\xf5\xc9\xf8\xab\x0d\x47\xf4\x9d\x98\xe0\x97\xc6\xd0\xe5\x31\x6c\x1c\x90\x8b\x41\x89\xd7\x54\xb1\xa8\x17\xe4\xdf\x55\x2a\x8a\x96\x9d\xca\x37\x82\xb7\xd1\x3a\x5c\x4e\x7b\xf3\xcd\xc5\x6b\xb8\xf8\x5a\x4b\xb6\xc7\x94\x58\x36\x9c\x32\xe5\x3c\x5e\x19\x83\x36\x3f\x58\x5a\xc3\x50\xb2\x25\x33\x98\x21\xf4\x1e\x2f\x11\xae\x24\xf7\x2e\x35\xb6\x29\xc8\xe9\x22\xa8\xfa\xd7\x53\xae\x16\x6b\xa1\x53\xcc\xe2\x43\x39\xeb\xed\x8d\x02\xce\xbe\x0e\x9a\x42\xd9\x5a\xb3\x0a\x52\x88\x1b\x41\x0a\x52\x12\x56\x7c\xa9\x27\x62\xd7\x14\x72\x70\xaa\x2e\x39\xd3\xe2\x75\xd7\xe7\xea\xc2\xfb\x27\xed\x6a\x84\xa7\x08\x5c\xd9\x36\x88\x88\x81\x6e\x11\x84\x6b\x2b\x53\x30\xa0\x17\x33\x88\x7a\x9a\x4d\xf7\x97\x76\x4a\x2a\xbd\xd8\xb4\xaa\xf4\x0e\xa4\x25\x56\x06\x10\x40\x6b\x3c\x27\x08\x2b\x7f\x08\x15\x47\x84\xc9\x56\xd8\x7d\x43\xe3\xe1\x93\x25\x27\xd2\x17\xe6\xc6\x12\xfd\x70\xf1\x1a\xbd\x44\x87\x7a\x6c\x06\xbb\x37\xc3\xb4\x02\x06\x47\x87\x9a\x0d\x6d\x80\x19\xe4\x86\xf1\x14\x84\xd1\x85\x95\x23\x88\x0b\x73\xb5\x8c\x10\xe3\x48\xb6\xc5\xc2\xcd\x01\xe5\xcc\x7b\x84\x2d\x9d\x7f\x52\xd6\xeb\x20\x76\xf2\xdd\x87\x3f\x48\x12\x0d\x56\xcd\x79\x1d\xfe\xf0\x8c\xd7\x61\x68\x22\xea\xe3\xdf\x5f\x30\x73\x56\x6b\xa2\x70\x89\x15\xb6\xd7\xa4\xfb\xc2\xb0\x6b\x87\xcb\x32\xe1\xb2\x94\xe4\x1d\x65\xed\x83\x41\xba\xed\x45\xd8\xe3\xfa\x1c\x7a\x04\xc7\x0b\x16\x9a\x07\x71\x3b\x17\xa1\xc8\x90\x2c\x71\xd1\x3b\x46\xa3\x47\xac\x6e\xb8\x25\x1c\xdb\x98\x36\x84\x30\x2b\x79\xbd\xd6\x49\xa0\x43\x8b\x4d\x10\x44\xbd\xec\x8f\xe1\x60\xba\xe7\xdf\x3b\x20\x54\x91\x3b\x52\x65\xf3\xed\xbf\xd3\x6f\xd3\x93\xe3\x76\x2e\xbc\x1e\x55\x78\x4a\x2a\xcb\xc1\x66\x48\x34\x33\x9e\xb0\x4c\x3e\x70\xc1\x33\x42\x62\xae\xb8\x41\x72\x61\x3f\x11\xfa\xf5\x5f\xc4\x3c\x64\x05\x5f\xdc\x58\x74\x49\x37\x0f\xe0\x03\xfd\x12\xe6\xa1\x4d\x50\x10\xd1\xea\x3c\x68\x6d\xb3\x3f\x0f\xa0\x7f\xed\xfb\x3c\x48\x52\x14\xbc\x6e\xf6\x04\x29\x79\x63\x50\xf0\xba\x47\x9f\x8b\x8a\xec\x7f\x19\x27\xc1\x9d\x6d\x19\x04\xac\xcc\x3d\xe8\x6a\x21\xfc\xef\xe0\x3a\x07\x69\xb7\x7a\xc7\xdb\xd6\x93\x11\x99\xbe\x45\xfb\xc2\x7f\xc7\x1b\x6f\x80\x61\xf6\x9e\x67\x87\x61\x06\xf4\xac\x18\xdc\xf3\x3d\x48\xe4\xd7\x00\xc6\xd4\x46\x00\xcc\x2b\x61\x25\x65\x73\x08\x58\x8d\x6c\xee\xe8\x1d\x71\xe2\xf9\xd6\x78\xbc\x0e\x40\xe2\xb8\x0e\x39\x71\xd3\x61\x56\x0d\x6d\x6b\x56\xec\xe6\x26\xbc\xa6\xf9\xce\xe5\x87\x9b\x90\xb4\x15\xb3\xa5\x21\x24\x82\x3f\xd9\xf9\x75\xfa\xc5\x60\x3a\x57\x57\xf1\xa9\x21\x9d\x49\xef\xdb\x8c\xe8\x7c\xbe\x53\xfa\x79\x28\xcf\x55\x8c\x67\xd6\x2e\xac\x02\x3e\xd7\xdb\xc8\xb0\x72\xc9\x47\xc0\x5e\x9d\x7b\xe4\x00\xf9\xab\xe9\x91\xb3\xb2\x0b\x2d\x38\x14\x65\x73\x19\x3a\x41\x70\x95\xca\xf6\x62\x9e\x4d\x5e\x10\x77\x0a\x3c\x6f\xe9\xba\x37\xa0\x5f\xec\x2a\xa5\xf5\x4f\x78\x30\xbe\x6c\x4f\x44\xa5\x2d\x8a\x2f\xdc\x0f\x31\xaf\x25\x3e\x13\x7a\x06\x15\xc5\xd5\x75\x43\x8a\x7d\xb9\x2d\xde\xbc\xbf\x3e\xed\xf7\x0c\x74\x61\xcb\xd2\x4c\xe0\xf7\x08\x97\x35\x95\x12\x02\x3e\x64\xba\xe0\xfc\x36\xa9\xc9\x43\xc7\xdc\x37\xa7\x6a\xd1\x4e\x8f\x0b\x5e\x07\x24\x7e\x63\x49\xe7\xf2\xc4\x4a\x94\xb1\x9e\xb8\x23\x44\x59\xe5\x33\x85\xc1\x5b\xc8\x94\xb4\x11\x84\xe4\xc1\xa3\xc2\x8f\x1e\xb6\x1e\xe4\xa7\x78\x68\xf6\xfa\xf4\x00\x95\x36\x6c\xde\x9d\x6b\x1d\xeb\xbb\x2a\xad\x0c\xcd\xca\xce\x7a\x64\xec\x21\x2d\xb4\x8d\xe2\x6c\x9c\x47\x63\xbc\xee\x7c\x92\xac\xd2\x5f\x10\x99\x84\x80\xcd\x79\xe6\xde\x76\x5d\xea\x48\xd3\x80\xb9\x13\x3f\x9a\xe9\x0e\xe1\xed\x03\x28\xe5\x6b\xff\xf4\x20\x17\x93\xf9\x69\x55\xe9\x85\xc4\xfa\x9a\x38\x90\x21\xba\x13\x4c\x93\x05\xbe\x33\xa2\x40\xea\x15\x27\xb3\x19\x29\xc0\x58\x08\x47\x01\x17\x49\x9a\x50\x30\x0c\x64\x61\x79\x14\xc5\x4d\xdb\x18\xd5\xf4\x41\xf7\x30\x6c\x31\xc4\xa0\xb2\x12\x02\xff\x9b\x7f\x9d\x50\xd9\x10\x01\xf8\xc0\x13\x74\x8e\xf4\x0a\x85\x8d\xb8\xe4\x68\xa5\xaf\x2d\xfd\x8b\x4b\xa2\xb4\xa1\x66\xe6\x2d\x8c\x3e\x68\xc3\x4a\xb4\x19\x0e\x43\x4a\x64\x18\x85\xd1\xe1\xac\x92\x22\xf1\x3c\x40\xa4\xd8\xf6\x49\xeb\x20\x4e\x79\x7b\xae\xc8\x31\xda\x90\xbe\xf3\x6c\x11\x64\xf4\xf9\x51\xe4\x27\x8c\x55\xa1\x7d\x89\x57\x25\x4a\x7d\x5b\xd6\x1f\x0a\x8d\x26\x33\x9e\xc0\x5b\xb6\x28\xdb\x14\xd1\xde\x8e\x89\x3f\xc8\x43\xbc\x26\xda\x9b\xaa\xf3\x07\x52\xf8\x2d\x22\xe1\x1e\xab\x6b\xe0\x18\xe3\xd0\x48\xab\x7c\x21\xf3\xe4\x5b\x6b\x4f\x74\x7a\x3b\xc2\x7d\x11\xa2\x67\x76\xc2\xa9\x53\x93\xcd\x8f\x5a\x71\xee\x2f\x82\x74\xde\xf6\x80\x4a\x5c\xff\xa8\x6f\x2e\xca\xe6\x96\xcc\x84\x0b\xcf\xf0\x9b\xd4\x2d\xd7\x0f\xa8\x60\xc7\xb9\x42\x87\x07\x27\x07\x47\x6b\x7b\xe1\x40\x86\x78\x68\x93\xba\xd9\x0d\x48\xd2\xba\xa9\x96\x30\x86\x03\x53\xb4\x2e\x91\xf3\xcc\x21\xeb\x7c\x51\x18\xb9\x20\x55\x35\x42\x52\xdf\xd3\xd8\xf1\x71\x9b\x4f\xf5\x97\x94\x68\x0b\x63\xcf\x1f\x1e\xfc\x7a\x30\x42\x44\x15\x47\xe8\x9e\xb3\x03\x65\x3c\xb3\xe8\x06\x94\xdd\xa4\x3e\xf9\x4e\x2c\x79\x0b\x75\xd5\xcd\xb2\x79\x0a\xf7\x02\x6b\x3d\xad\x35\xca\x84\x61\x07\x20\x55\x42\x9d\x70\xfd\x9c\x3f\x50\xa5\x65\xa6\x6a\xc1\x9e\x7a\x69\x54\x1a\x02\x45\xe1\xb0\x36\xbd\xef\xc8\xc9\x82\xe0\x4a\x2d\x96\x5e\xcd\x32\x25\xab\x25\x6a\x99\xfd\x4d\xba\xb0\xdf\x83\xfc\xb6\xfd\xcd\x34\xb3\x95\xf3\x6f\x16\x82\xc8\x05\xaf\x76\x9e\x6f\xe6\xca\x29\x17\x9c\x49\x2d\x53\xb4\x2d\x60\xfb\x28\x7d\xaa\x8f\x2d\xe9\x6c\x28\xa2\x39\x9c\x32\x41\x0c\x6a\x55\x6f\x2d\x28\x00\xbd\xc0\x77\x5a\xde\xc8\xb6\x28\x08\x29\x53\x74\xa8\x50\x79\xfb\x7d\xce\x82\xcf\xbb\xaf\xad\xac\x9f\xb9\x68\xf2\xdc\xd2\x6f\xae\x26\x67\xbd\x5b\x1a\x3e\x78\x0b\xc7\xf8\x6c\x41\x8a\xdb\xab\xb4\x1a\x47\x7b\x12\x03\x6d\xb8\xd8\xa5\x62\xa0\x9b\xcf\xa6\x15\x4c\xb8\x50\x88\xf9\x12\xea\xfa\x6c\xcd\x61\x15\x89\xb8\xa3\x05\x39\x76\xe5\xd5\x5d\x14\xd1\xd5\xe4\xc2\x6c\x4e\xd0\x2b\x7d\x20\xfe\xf8\xed\xb7\xbf\xff\x36\x5d\x46\xa7\x73\x2f\xe6\xe1\x5d\xb4\x03\xdf\x17\xb5\xeb\xda\x74\x67\x93\x57\xcc\xf6\x54\xaf\x41\x53\xe1\xc2\xaf\xcd\x7c\xf3\xa1\x4b\x73\x9f\x48\x42\xd0\x06\xbf\xaa\x16\x1d\xe6\x3f\xd3\x8a\x4f\x4f\x6a\x2c\x15\x11\x27\x25\x2f\xec\xb5\x3e\x06\x86\x52\xca\xe6\xc7\x75\x79\x94\x50\x74\x13\xd9\xac\x89\x05\x95\xce\x8d\xb3\x12\x10\x71\x51\x32\x5f\x0e\x82\x4a\x1f\xca\x9b\x2e\x61\x52\x76\xee\x2b\x44\xae\x97\xdf\xa1\x17\x2f\xa2\xde\xa2\x97\xe0\x0d\xc9\x93\x32\xf3\xf6\xe6\x66\xf2\x86\xa8\x50\x60\x33\xf8\x10\xbd\x39\xbf\xf1\x45\xf8\xf4\xee\x32\xd9\x17\x83\xd4\x4e\x91\xda\x0b\x9e\x56\x85\x31\xb7\x83\xd8\x88\x12\xc5\xb5\xfa\xc4\x48\xa1\x17\x7a\xd4\xab\xf7\xe4\x00\x53\x17\x13\x53\x0e\x43\xab\x5c\x78\x5a\x2d\xd1\x3d\x36\xa9\xd7\x71\x2c\xb4\xdd\xf3\x42\x77\xe3\x85\x96\x5a\x7a\x57\xbf\x25\xb8\x24\x42\x82\x35\x44\xf0\xee\x83\x1f\x41\x9f\xb2\x2d\xdb\x59\x2b\x15\xaf\xd1\xc2\x0e\xd5\xcc\x61\x57\xe6\xd2\xe8\x46\xe6\x08\x82\x33\x48\x22\x41\x1a\x63\x2d\xd9\xbf\xf9\x2a\x6c\xa1\x35\x29\x64\xe6\x39\x28\x20\x82\x51\x11\x4e\x95\x55\xf4\xa1\xfa\x34\xb5\x32\x0a\x2c\x80\x34\x2b\x3d\x4b\x21\x02\x94\xa9\x18\x01\x4a\xaf\x2d\xec\x5e\x92\x1e\x2d\xc9\x53\xd6\x00\x65\xa9\x54\x8c\xb2\x93\xaa\x23\x1b\x13\xb0\x9b\xcb\x20\x05\x74\x47\x53\xe9\xd3\x90\x23\x59\x70\xc8\x8b\x02\x33\xce\x68\x81\x2b\xfa\x2f\x52\xa2\xb6\xe1\x0c\xf1\x56\x35\xad\x02\x57\x50\x81\x25\x19\xdf\x61\x41\xb5\x40\x35\xf5\xdc\x3d\x64\x83\xe9\xd3\xae\x38\x07\x3f\x89\x8f\x8e\x99\x1e\xa7\x77\x33\x93\x36\x83\x1c\x67\x7e\xe6\x15\x5e\x5b\x9c\xf4\x1d\x8d\xf6\xda\x07\x83\x4c\x65\xbd\x45\x3e\xb3\x0e\xab\x05\x40\x90\x0a\x88\x24\x5a\x04\x1b\x08\x4e\x6d\x36\xec\x41\x86\x40\x56\x2b\x36\x51\x24\x40\x60\x90\x8b\x15\x3b\x58\xf7\x70\x7d\x0e\x33\x05\xc5\x9f\xde\xac\x0e\xab\xb2\x4f\x89\xd6\xed\x2f\x4e\x2f\x4f\x7f\xb9\xfe\xf1\xec\x97\xcb\xd3\xf7\xe7\x29\xaf\x4e\xae\xa8\x98\xb3\xa6\x62\xb6\xaa\x8a\x4f\x54\x73\x56\x3f\xb2\x58\x90\xfd\x89\x87\x5f\x43\x6f\x42\xf6\x24\x6b\x03\x50\x36\x77\x9a\x7f\x1a\x9d\x16\x5a\x71\x9a\x6a\xc1\xb3\x53\x89\x43\x19\x55\x14\x57\xaf\x49\x85\x97\xd7\xa4\xe0\xac\xdc\x39\x8c\xf4\xd2\x0b\x1b\x69\x3a\x64\xdd\xd6\x7d\xf0\xc1\x02\x4b\xe4\xaa\x13\x4e\xc9\x8c\x0b\x02\x51\x13\xa6\x25\x52\xd3\xc5\x8f\xcd\xf8\xd4\x33\x96\x05\xbf\xe7\xe2\xb6\xe2\xb8\x94\x27\x0d\x37\xff\x19\x57\x74\x46\x8a\x65\x51\x91\xdf\xf8\xfe\x8f\x93\xd4\xf4\xfd\x70\x8f\x37\x44\x50\x80\x2e\xec\xc3\xae\x79\xcb\xef\x11\x9f\x29\xc2\xd0\x21\x65\x6e\xe7\x1c\x05\x5e\x9a\x2e\x3c\x92\x4e\xfb\xa4\x38\x7a\xf5\xd2\x35\xf2\xf5\xc5\x3d\x20\x32\x24\xe5\x5e\x47\xbe\x6c\x1f\x3f\x1d\xfa\xb2\x5f\x9c\xb5\x55\x3f\xfc\x65\x42\x62\x79\x62\x5f\xaf\x8e\x7d\x42\xcd\x2b\xe8\x8f\x17\x45\x98\x95\x0e\x1b\xf3\xf5\xed\x13\x55\x34\xd7\xbc\xb8\xcd\xe4\x76\xbd\x39\x9b\x98\xb7\xad\xe0\x59\xcc\x0d\xac\xb5\x4c\x8e\xb0\xfe\x16\x28\xa0\x83\xd3\x75\x6f\x9c\xae\x07\x5d\xa9\xa9\x6d\x1d\xa8\x07\x83\xb5\xd5\x3d\x4e\xf1\x11\xfd\x52\x0d\x83\xb5\xf5\xc8\x33\x58\x5b\x5b\x3c\x06\xed\x0e\x99\xa3\x6f\x04\x2e\xc8\x64\x9f\x94\x37\x27\x40\x50\xd9\x0a\x5b\xff\xca\xeb\x70\x5e\x5c\x30\x42\x4a\x23\x3f\xec\x50\x08\x9a\xeb\x91\xcc\xda\xaa\x5a\x1a\x1f\xa2\x51\x01\x2c\x28\x26\x8d\xeb\x16\x5e\x6d\x55\x5c\x17\x64\xde\xd4\xbb\xce\x36\x69\x3c\x6b\xb3\x2b\x6f\x60\x8f\x93\xee\x3c\x54\x67\x26\x2c\xde\x9d\x8e\xc3\x15\x44\x92\xce\xf5\x74\xd9\x62\xb2\xc8\xb0\xfd\xb8\x1a\x61\x5d\x47\x74\xab\x33\x2e\x0a\x3a\xad\x96\x68\x81\x2b\x6d\x2c\xdd\x53\xb5\x40\x18\xdd\xd2\xaa\xb2\xaf\x89\x9f\xa8\x6b\x57\x02\xde\x68\x34\x15\x67\x73\x98\x0c\x6c\xc1\xe3\x0f\x0d\x29\x74\x9b\x45\x45\x30\x6b\x1b\xd3\x4f\xad\x1f\x2d\x79\x9b\x01\x3f\xee\x02\xdf\x5e\x9f\x62\xd4\xf2\x24\x98\x0a\x53\x1f\xdd\xf3\xfd\x2c\x40\xf4\x41\x2d\x88\xb8\xa7\x92\x98\x8a\x57\xd1\x7d\x32\x7d\xe9\xd7\xbb\x32\x9f\x79\xae\x07\x9b\xe2\xa4\xb7\x05\xe4\xdc\x45\xb7\xf5\x23\xbc\xd7\x89\x56\xc6\xd9\x98\x91\xb9\xc9\x28\xb7\x02\xcd\x20\x3a\x4d\xfb\x06\x3f\xe8\xf3\x93\xa5\xe2\x0d\xa2\x75\x4d\x4a\x6d\x1f\x57\x4b\x74\x47\x71\x74\x4f\x20\x7b\xbd\xdb\x51\xe8\x90\x71\xc4\x1b\x7d\x75\xb5\x8c\xaa\x25\x44\xf4\x16\xad\x42\x25\xbf\x67\x09\x89\x21\x37\x16\xe6\x80\xd1\x94\x28\x6c\x7d\xe0\xfa\x10\x78\xf2\x66\xe0\x65\xd6\x67\x0f\x30\xe4\x37\x1b\x37\x80\xe7\x73\x9e\x63\x95\x20\x25\x36\x68\xf3\x66\x3d\x3f\xbe\xed\xa8\xb4\xf1\xba\x44\xc2\xd8\xfd\xa0\x60\xd3\x27\x9a\xb7\x6a\x4f\xee\x91\xc7\x5c\x47\x26\x17\x3f\x30\x12\x69\x4d\x24\xe2\x6d\x26\x62\xfc\x57\xb6\xb9\x9c\x16\xde\xe0\x77\xda\xf8\x48\x55\xd2\xa8\xf2\xa8\x39\xb6\xd8\x23\x2c\xe3\x36\x61\x30\x20\xda\x9b\xb6\xb3\x19\x11\x70\xd3\x41\x87\xd7\x60\xf7\xbe\xe0\x90\xbb\xc3\xe2\x9c\xb7\x16\xf0\x45\xd4\x08\x48\xce\x6d\xd6\xfb\x23\x4d\x5a\x36\x40\xa8\x27\x2a\x88\x04\xd2\x6a\x86\xce\x3f\x7c\x1f\xb7\x45\x73\x50\xa0\xa7\xe5\xd6\xc1\x38\x3f\xb0\x38\x4c\x62\xde\xfd\xb0\x89\x9e\xc2\x6e\x8b\xa2\xe2\xd2\xe6\x71\xc2\xba\x14\x0b\xcc\x18\x71\xce\x28\xaa\xc0\x93\x3d\x25\x84\x21\xde\x10\x03\xca\x8b\xea\x0c\x46\x92\xb2\x79\x45\x10\x56\x0a\x17\x8b\x63\xdd\x3b\xe6\xf6\x42\x97\x30\x69\x3f\x91\x4a\x10\x5c\x9b\x3d\x21\x48\x8d\xa9\x69\x1e\xe1\x42\x70\x29\x51\xdd\x56\x8a\x36\xfe\x65\x71\x5e\x44\x02\xa9\xeb\xd2\xe4\xcf\xb9\xb5\x82\xb4\x92\x2e\x33\x73\xd4\xf5\xd0\x0e\x9f\x87\x55\x55\xc0\x75\x36\xd2\xbf\x25\x75\xa3\x96\x48\x4f\x6d\x15\x9d\x1b\x33\xa3\x42\x2a\x54\x54\x94\x30\x65\x47\x66\xb8\xd1\xa0\x0f\x23\xa7\x4e\x33\x3b\x23\xd2\x4e\x09\x2b\xc1\xf8\x6e\x94\x44\x90\x81\xe8\x3b\xe1\x5e\x55\x52\x69\x7d\x1d\x72\x14\xb7\x76\xae\x84\x86\xd9\x38\x6e\x46\x60\xeb\x38\x05\xc7\xf4\xc8\x7e\x14\x74\x21\x28\x08\xac\x8f\xb5\x09\x89\xa4\xc9\x15\xa8\x73\xe1\xce\xf5\xa8\x97\x1c\xdd\xd9\x16\x90\x0a\xb3\x26\x75\x60\x43\x31\x72\xa7\xcf\x01\x29\x88\x56\x45\x71\x46\x21\xf3\xec\x32\x46\x61\x31\x27\xea\xcc\x8d\x3f\x36\x7b\x37\x87\xb4\x09\x2b\xa7\x87\x0e\xa2\x6e\x71\x60\x1d\x26\xbc\x04\x36\x89\x8e\xf1\x63\x53\x39\x77\x33\xae\x48\xdb\xeb\xe6\x91\x1a\xf1\xce\xa2\x32\x19\x5e\xbe\xa3\xb2\xc1\x05\x91\xe8\xf0\x62\x72\x36\x42\x93\x8b\xd7\x36\x8d\x8b\xcf\x56\xd9\xf5\x62\xa7\xc5\x5e\x82\xe6\xec\x3e\x56\xc0\xde\x57\xa7\x09\xba\x14\xd0\x6c\xd9\xfe\x4e\xbc\x51\x16\x3d\x33\xeb\x37\x01\x58\x68\xb4\x6e\x2a\xa8\x13\x89\x64\x0b\x96\x91\x0d\x5c\xe8\xad\x6d\xec\x11\x7b\x68\x49\x47\x70\x64\xc9\xe8\x23\x83\x38\xa6\x15\x3f\x5c\xbb\xe6\x10\xcb\x76\x13\x65\xf5\x00\x50\x98\x95\xfd\x95\xe7\x88\x81\x5c\x33\x0b\x15\x8f\xbf\xdd\x23\xdd\x61\x81\x11\xf5\x9e\x48\x89\xe7\x64\x12\x89\x03\xca\x71\xf6\x3a\x0f\x37\x00\x88\x3a\x79\xbd\x20\x86\x0a\x4b\xf1\xe0\x93\x30\xbb\x32\xf4\xda\xd4\x66\x20\x51\x3d\x70\x67\xeb\x5e\x50\xa5\x08\x5c\x0f\x50\xeb\x09\xb6\xee\x2a\xbd\x67\x3f\xab\x33\xaa\x3d\x3b\xe9\x61\x7b\x5a\xef\x67\xa5\xc9\x8f\x9c\x12\x34\x15\x94\xcc\xd0\x8c\x42\xc2\x26\xa4\x32\x8e\x4c\x9d\x02\x0c\x80\x79\x2c\x25\x11\x30\x6c\xeb\x8f\x73\xc3\x8f\xeb\xcf\x5f\xed\xf8\x95\x68\x59\x81\x83\x22\x9e\xc0\x3e\x46\x67\x68\x0e\xe9\x93\xd6\xfb\xf4\x87\x97\xff\xf9\x47\x34\x5d\x6a\x43\x09\xce\xa4\xe2\x0a\x57\xae\x03\xa8\x22\x6c\xae\x57\x11\x74\x9d\xb8\x0b\xbb\xc7\x60\xe5\x17\xa7\xa2\x35\x55\x66\x82\x5e\x7d\x73\x3b\x4d\xba\xf3\x40\x31\x39\x29\xc9\xdd\x49\xb0\x85\xc6\x15\x9f\xc7\xbd\xf5\xcc\x13\x3e\xb5\x4d\x19\x0b\x88\xc8\x7d\xa2\x79\x45\x8b\xe5\xce\xee\x53\xeb\x0a\x43\x0b\x7e\x6f\xbc\xa8\xeb\x47\x35\x20\x83\x69\x78\xd3\x56\x30\x71\xe8\x7b\xcf\xe0\xd7\x4a\xb2\x4a\x8e\x94\xea\x9d\x0f\xa4\x1d\xa0\x17\x6c\xb3\x2b\x57\xbd\xcd\x1d\x76\xdd\xe4\x96\x9a\xc2\x06\xbb\x7d\xa5\x92\x68\x37\xf8\xf7\xb8\xaa\xa6\xb8\xb8\xbd\xe1\xef\xf8\x5c\x7e\x60\xe7\x42\x70\xd1\x1f\x73\x85\xb5\x32\xbd\x68\xd9\x2d\xd4\xd9\xed\xe8\x6a\xf9\xdc\x82\x79\x81\x59\xb2\x3f\xb1\x51\x9d\x71\xa3\x34\x04\xa2\xce\x16\x70\xce\xef\xae\x65\xf2\x40\x3b\x0f\x37\x43\x44\xf7\x39\x5e\xc3\x09\xc7\x21\xc3\xa3\xfd\xcd\xcb\x3f\xfc\xc9\x08\x17\xc4\x05\xfa\xd3\x4b\xc8\xf5\x97\x23\x73\x01\x80\xea\xab\x6d\x9c\x1a\x57\x55\xac\x4e\x13\x8a\x80\xef\xa3\xcb\x57\xef\xc1\x91\x57\x3b\x3b\xdd\x9f\xed\xab\xb9\xb9\xf9\x1b\x68\x62\x54\x49\x52\xcd\x46\x86\x0f\xc6\xfb\x93\x0f\xc0\xac\x39\xb0\x57\x5e\x3c\x97\xd0\xee\xbd\x25\x77\xbc\x6a\x6b\xf2\x9a\xdc\xd1\x22\x0e\x39\xd0\x5b\x95\xde\xdb\x5c\x7c\xac\xa2\x12\x74\xc9\x69\xc5\x8b\x5b\x54\xda\x5f\x06\x39\x2a\xab\x75\xb7\xe3\x67\x21\x36\x5b\x27\x21\x4b\xe7\xd1\xf1\xf7\xf2\x73\x6a\xdc\x34\x5a\x8f\x06\x62\x2f\x81\xef\x7b\x93\x01\xa2\x09\xf8\x53\x13\x8d\x9e\x64\x14\x4b\x2a\x86\x65\x6c\x47\xa4\xaf\xa9\xe8\x57\x44\x27\xf5\xa4\x43\x60\xba\xde\xc7\x03\x08\x7a\x1b\xa2\x7b\xa1\x3b\x0d\x0d\xfc\xdb\x10\x9d\xac\x99\xea\xbe\xa2\x9a\xdf\x18\x46\x83\xd4\xdb\x07\x6e\x99\xf8\xb8\x41\x06\x14\x42\x5a\x72\x52\x6f\x5e\x98\x47\x7f\xd4\x58\x59\xfb\xc8\x79\x2f\x30\x6a\x88\x90\x54\x6a\xd5\xe9\x47\x38\x50\x67\x15\xa6\x75\x10\x37\xdf\xd5\x24\xac\xa7\xb2\xd4\xb8\x19\xdf\x92\x65\xe4\x86\x4b\x3c\x2e\x8f\x65\xd6\xd4\xb8\x89\xbc\x07\xa0\xb8\x6d\xfa\x35\x10\x79\x39\x4f\x78\x69\xfb\x01\xd7\x83\x29\x5a\xfc\x29\x33\x16\x5d\xb7\x53\x38\x53\xf0\xf5\xa7\xa5\x07\xcb\xaa\x3c\xed\xfa\xae\xfa\xb1\x5b\xf1\xfe\x55\xa5\x3f\xf1\x77\x95\xf9\xd6\xd7\x74\x43\xc1\xf8\xbe\xd4\x0b\xca\x77\x3e\x93\x1c\x4e\xc2\x26\xc2\xb5\x66\x77\x46\xff\x1e\xeb\x79\xc2\xcc\x91\x0e\x6c\x66\xeb\xa1\x3a\x36\xf5\x06\x12\x3a\xa0\x8f\xa2\x6d\x14\x1d\x7c\x77\xb0\xd3\xcb\xd1\xac\x8c\xe0\x0d\x9e\x83\x49\xbb\x0f\x0b\xb4\xda\xa7\x90\xde\x76\xc1\xef\x43\x91\xd9\xd8\x6f\x69\x89\xe9\x38\xd2\x17\x3c\x69\x75\x0c\xd6\xd7\xed\x08\x6b\x96\x9b\x2a\x11\xf7\x78\x89\xb0\xe0\x2d\x4b\x22\x2e\x80\x50\xa6\x0f\x75\xbf\x5f\x19\xec\x25\x67\xc4\xc1\x6a\x52\x5a\xb9\xe9\xb9\xbe\x01\x61\x44\x19\x7a\x75\xfc\xea\x65\x72\xdf\xaf\x48\xd1\x0a\x49\xef\xc8\x95\x2d\x9f\x1e\x84\x41\x2f\x66\x13\x2e\x25\x9d\x56\x90\x6a\xa9\x38\x3a\x37\xb5\xe5\xd7\x07\xea\xa1\x5e\x30\x62\x2e\x42\x22\xd4\x84\x1e\x1e\x9a\x13\x1c\x42\xb4\x75\x03\x09\x38\xad\xfd\x52\x41\x61\x5d\x57\x54\xd0\x4b\xaf\x82\x9a\x7b\x6f\xa7\x63\x75\x35\xf5\xf7\x41\x92\xbc\xb7\x41\x85\xae\x68\x3e\x75\x45\x99\xe1\xa3\x7b\x41\x95\x3d\xdc\xf7\x54\x12\x74\x08\xee\x8c\x95\xcd\x98\xc4\xfd\x1c\x3a\xbf\x12\x8b\xeb\xe7\xe0\x6e\x16\xab\x47\x77\x1f\x56\x69\x5d\x9e\x74\x39\x33\xf7\xd6\xf3\xd5\xad\xa0\x95\xfe\xdd\xbd\xbc\xc0\xac\xac\x92\x64\x86\x9f\x95\x6a\x99\xc4\x5e\x75\x31\x43\xa1\x48\xb4\x88\x83\x20\x08\xb9\xc0\x12\x31\x8e\x6a\x82\x01\x52\xad\x6f\x17\x27\x05\x7b\x34\xd0\xf9\xfa\x60\x36\xbb\xb9\xc6\xc2\x0b\xc1\x8a\xeb\xd7\x54\x5a\xf1\xac\xe5\x88\x35\x5d\x0c\x10\xab\xc6\x65\x0a\x19\x43\x30\xa7\xdd\xe2\x1d\x77\x30\xe7\xd5\x9e\x74\x17\xc7\x4a\x5f\x9e\xa2\x1f\x23\x5b\xdd\x5c\x37\x6f\x22\xcb\x1b\xfc\x79\x1d\xac\x2d\x09\x7f\x62\x9e\xd5\xe1\xfa\x6b\x71\x6d\xac\x9b\x7b\xec\x3b\x9c\xd0\x87\x4f\x0f\x75\x14\xc8\x42\x87\xea\x36\x20\x18\x5b\x5e\xc5\xe6\x28\xa7\x91\x84\xbb\x68\x86\xf7\x13\xcd\x09\x23\x02\xdb\x80\x84\x03\x75\xdb\x90\x3e\x96\x9c\xa5\x1e\x88\x4f\x6c\x38\x2d\xef\x3f\xad\xa6\x98\x3f\x4b\xe8\x08\xe8\x39\x87\x5c\xac\x9c\x76\x1b\x6a\xd9\xa4\xb1\xe4\x1c\xf5\x0a\x99\x9e\xd9\xfc\x01\x4b\xaf\x5e\x94\x7f\xb6\xf4\x0e\x57\xc4\xd0\xe3\x3b\xd1\xb0\x53\x65\x42\xb6\xd3\x7d\x35\x1b\xad\x7d\x08\x66\xc7\x66\xb4\xc4\xa3\x16\x64\x26\x7d\xe2\xc5\x0b\x74\x68\xda\x38\x30\xb4\xd8\xbb\x55\x72\xed\x5a\x9d\x3f\x34\x09\x45\x61\xf3\xad\xd7\xf9\x43\x83\x01\xe0\xd1\xec\xc5\xc2\xfd\x37\x59\xe0\x3b\x02\x2c\xe4\xb4\xc2\xa2\x82\x34\x92\x6b\x33\x65\x68\xda\x2a\x44\xd8\x1d\x15\x9c\x01\xa8\x0a\xe8\xa2\xb4\x64\x12\x64\x46\x04\x61\x05\x91\xe8\xb7\x87\x3f\x9e\x5e\x41\x9a\xe1\x11\x98\xbe\xc4\x8d\xaf\x95\x16\x05\xd5\x1b\x43\xf0\xba\x7d\xdc\x6f\xc8\x8d\x5d\x6f\x17\xd0\x4f\xdc\x5c\xe8\xb1\xd5\xad\x6a\x71\x05\x64\xed\x45\xd5\xea\xbb\x70\x67\x3b\x3b\xbf\xf3\x3c\xc5\x93\x97\xd3\x77\x6e\xa9\xfa\x5f\xd3\xa8\xe3\x9a\xe3\xa0\x9e\x05\xfb\x75\xad\x70\x40\x1a\x80\xb2\x4f\x1b\xbb\xa6\xe8\x1c\x48\x4f\x25\x1b\x66\xce\xd9\xbb\x38\x0e\xd7\x41\xe7\x0b\x65\xe9\x1a\x56\x70\x98\x01\xac\xb9\x8e\xc6\x8c\xed\x16\x00\x91\xef\x18\x44\x38\xa2\xf3\xec\xfa\x05\x97\xea\xb4\xa2\x58\x6e\xeb\xc7\x4e\xdb\xea\x6f\xbb\x66\x21\xdb\x8f\xd9\xaa\x8e\xb8\xf2\x10\x03\xdd\x33\x03\x73\xba\x98\x58\x2c\xba\xdb\x95\x94\xfd\x5f\x93\x75\xea\x03\x4a\x26\x1b\x14\xfe\x64\xcb\x9e\x18\xc4\xd1\x0c\x45\xd6\x1b\x8a\x8d\xff\x44\x45\x7e\x52\xc5\x8b\x9f\x75\xb4\xe0\x95\xcd\xbb\x76\x68\x86\x29\x51\xf7\x84\x30\x74\x31\x81\x39\xd7\x53\x69\x78\x19\x37\xcf\xbc\x55\x8e\x99\x12\x4b\x7b\xa0\xb7\xee\x4d\xb0\x66\xb0\x0a\xdb\x1e\xdd\x84\xf8\x53\x7c\xe4\x69\x8c\xe8\xb6\x97\x4a\x4a\xa4\xc8\x2f\x43\xf2\x6d\xf4\xd6\x2f\xa8\x63\xd3\xc1\x53\x7e\x47\x60\xbd\xcb\x52\x44\x66\x69\xef\x2c\xfc\x99\x5d\x81\x49\x22\xb2\xa4\x4d\xf2\xfa\x74\xeb\xe0\xa0\x24\x50\x9e\x19\xc4\x13\x1c\xb3\x67\x87\xf6\xc5\x53\xb6\xe7\xbc\x17\xb7\x3c\x6e\xf9\x6e\xc5\x8b\xc9\xd9\x73\xde\x88\x3f\x58\xef\x92\x6e\xfa\x40\x22\xda\x14\x5d\x5e\xc7\xb6\x4b\xdf\xe5\x32\x04\x74\x66\x11\x8e\xf6\x58\xe7\xfa\xa2\x2b\xd8\xf8\xdc\x4a\x05\x62\xa6\x5d\x7d\xa5\x59\x5a\x71\x0b\x1c\x01\xcf\x4f\xc3\xcb\xe3\xd5\xa9\xb6\x7f\x11\x3f\xdd\x10\xff\x33\x06\x67\x58\xaa\x72\xc9\x5b\x67\x2d\x1b\xe5\x62\x09\x4c\x3f\x12\x4a\x61\x2d\x08\x30\x63\x96\x6d\x65\xc0\xc4\xf8\x1e\x6f\x0f\xe4\x86\x86\xff\x11\xcc\xf6\x3f\x3a\xef\x76\x57\x54\x10\xbe\x30\xe1\x42\xfd\xc3\x38\xbe\xa4\xbe\xb0\x21\x71\x08\x32\x7f\xa8\xa9\xbe\x15\x44\xcf\xfe\xe1\x55\x73\xf8\xab\x6d\x13\x1e\xb5\xfa\x10\xb8\xf2\x3e\xb3\x7d\x6d\xe1\x5a\x79\x63\x5c\x9e\x1b\xfb\xb2\xed\x0c\xed\x6e\xff\x4f\x2e\x5e\xef\x50\x7c\x34\xb4\xfc\xb2\xc5\xc7\x0f\x72\xeb\xea\x03\x59\x27\x10\x8a\x94\xe6\x9d\xc1\x18\x68\xb9\xad\x4b\x6a\xff\x1a\x88\xc3\xb8\x42\x8d\x20\x92\x30\x35\xea\x87\x23\xfa\x69\x99\xa0\x3d\xf4\x47\x31\xd2\x3f\xcf\xda\x6a\x5b\x0b\x89\x8b\x80\x79\xc8\xd3\x34\x61\x4f\xb2\x02\xa1\x18\x7c\x87\x69\x05\xee\xb9\x80\x46\x77\xad\x03\x36\x7b\x6c\xcb\x1e\x54\x1c\x97\x10\x1a\x44\xb7\xfa\x6a\xaf\x50\xcd\xb5\xe0\x34\x69\x20\x67\xa7\x93\x5f\xae\xff\x76\xfd\xcb\xfb\x0f\xaf\x7f\x78\xb7\x35\xdb\x98\x49\xa1\x27\xdd\x16\x1f\x21\x8c\x18\xb9\x87\x9e\x33\x30\x4e\x0b\x1b\x0f\xf0\x2c\x94\xfa\x0e\xb9\xb6\xc9\x94\x26\x36\x6e\xa0\x29\xb3\xb6\xd2\x5f\xda\xb2\x07\x35\x55\x74\x8e\xe1\x65\x9d\x4b\x64\x2a\x08\xbe\xe5\xad\x42\x77\x6d\xc5\x88\xc0\x53\x5a\x51\x6d\x41\x20\x72\x47\x98\xc1\x43\xea\x3f\xd0\x9d\x0c\x8b\xf9\xd2\x6d\x1b\x0f\x6b\x3d\xdb\x2a\x92\x7a\x52\x75\xcb\xb8\xb0\xee\x46\xcb\xa6\x09\xbf\x6c\x04\xbd\xa3\x15\x99\x13\x4f\x53\x17\xc3\x96\xdc\x87\xe1\xe0\xaa\x59\xe0\x71\x45\xee\x88\xa1\xbb\xa2\xd2\xec\xa8\x05\x67\x5c\x98\xb8\x9c\x21\x6e\xb7\xb6\x28\x10\x00\x99\xc3\xea\x4a\x1b\x9b\x64\xdf\x6b\x97\x75\x6b\x93\x6d\x9f\x4d\x58\x6d\x8f\x64\x49\x93\x55\xd7\x1e\x09\xe0\x56\x20\xcc\x16\x9f\x6c\x0d\xaa\xde\xec\x1f\xec\xec\x73\x78\xbb\x93\x31\xf6\xb0\x60\x64\x40\xbb\x63\x57\x69\x0a\x08\x71\x62\xe6\x7c\x6b\xf3\xc4\x75\xe9\x83\xa5\xe0\x7a\x6e\x1d\x33\x6c\xbb\x5f\x42\xca\xd5\x14\xf5\xec\x60\xa1\xd0\x08\x27\x13\x4b\xd4\x10\x01\xec\x09\x21\x5b\x58\xc2\x41\xe2\x7d\x88\xc8\xa6\x36\x59\xe9\xf3\xcd\x11\x86\x62\xf3\x88\x2a\x89\x5e\x5f\x5e\x23\x41\x0a\x2e\xca\xad\x5d\x00\x7f\x35\xd7\xc2\x86\x40\x32\x06\xb2\x32\x93\xc6\x67\x99\x0d\xb7\x36\xfd\x2e\xd6\xab\x5f\xc3\xc4\x76\x8c\x6b\xd2\x55\x11\xfa\x87\x1b\xe5\x3f\x60\x98\xff\x90\xed\xb4\xe4\x35\xa6\x6c\x6b\x8d\x71\x0c\x99\x81\x93\x8f\xee\xfd\x8e\x92\x6e\xfb\xb7\xff\x43\x12\xe5\x36\xd1\xa9\xfc\xfe\xff\x7b\x7d\xf9\x8f\x8e\xdf\x8d\x56\xfa\x8a\x0f\xaf\xa3\x88\x06\x7a\xf6\x40\x3f\x50\xef\xde\x19\xbf\xcd\x3c\xcb\xa7\x1e\x3f\x2d\x61\xf3\xf8\xc9\xd6\xdb\xda\x89\x03\xca\xd0\xd5\xf7\x67\xe8\xd5\xab\x6f\x7e\x0f\x4b\xe2\xb0\xbd\x58\xa1\x5a\x6b\x06\x7f\xfc\x03\x2a\x16\x58\xe0\x42\x45\x00\xf8\xaf\x5c\xf2\x1e\x94\xf6\x58\x3d\x92\x21\xf9\x9b\xcd\x4d\x33\x77\x46\x94\x6f\x77\x6b\xf1\x04\xe1\x8c\x49\x5b\x55\xd7\xa4\x10\x64\xdb\x14\x8c\x34\xf1\x74\xb1\xd2\xf6\x63\xce\xf5\x20\x84\x0a\xa5\xb8\xec\x97\x59\x57\x6f\x27\x20\x95\xe8\x8a\x25\x34\x6d\x55\x19\x8c\xd6\xd2\xdd\x36\x30\x5a\x19\x24\xff\x51\xe9\x08\x4a\x62\x94\xdd\xde\x15\x24\x89\xef\x9a\x3b\x81\x0d\x96\xb2\x83\xc4\xdc\xd1\xb2\xc5\x15\x74\x0b\xe2\x48\x96\x7f\x03\x1b\x93\xd2\xca\xde\xda\x8e\x60\xdb\xee\x6c\xc9\xce\xd6\xa9\x52\x27\x66\x4e\x7e\x63\xad\x7e\xca\xe6\x63\xf8\x44\x77\xd3\x8e\x67\xcc\xd9\x18\x8f\xb7\x4d\x7f\xfa\xa2\x82\x0d\xef\x78\x81\xab\x0f\xe0\x9d\xbf\x72\xbb\xcd\x49\x01\x89\x08\xe3\xed\x7c\x01\xd3\x2b\x6a\xec\xc8\xbf\x2b\xa2\xc0\x6d\x62\x53\x77\x63\xa2\x0a\x7e\x67\x97\x36\x34\x10\xd6\x65\xef\xef\xec\x67\x0c\x38\xa4\xc4\x00\x62\x71\xd2\x39\x82\xd1\x97\x81\x5e\x69\x67\x36\x12\x39\xd1\xd7\xf9\x09\xa8\x1f\x0e\xce\x67\x82\x31\x23\x40\x7c\x94\xad\x91\xd9\xb8\xb8\xbd\xc7\xa2\x94\xa8\xe0\x75\x83\x15\x05\x0b\x68\x19\x8b\xf5\x73\x19\x64\xf6\x36\xd0\x6a\xc9\x31\xba\x60\x52\x61\x90\x81\x8e\xa8\x48\xaf\x70\x47\x2e\x00\xca\x8b\xe1\x79\x5c\x10\x41\x10\x16\x71\x98\x4b\x5c\xc1\x8d\x57\x10\xa1\xf7\x7e\xb5\x44\xf7\x82\xb3\x48\x92\x8f\x2d\x85\x92\x56\x97\xee\x28\xb9\x3f\xb1\x3e\xd1\xb1\x1e\xdc\xd8\x6c\x61\x79\x02\x27\xe1\xe4\x37\xf0\x7f\x5f\x4e\x74\x61\xc5\xc9\x5f\xe3\x26\x3e\x78\xf3\x15\x44\xf0\x29\xa3\x1d\x7b\xd9\xb3\x2a\x1b\xef\xac\x32\x61\x2b\x0c\xd1\x7f\x19\x39\x1e\xf8\x14\xa6\xa4\xe2\x6c\x1e\xd4\x56\x8a\xb0\x71\x2e\x18\x55\x3d\x3f\x05\xc0\xbc\x48\xd1\x1a\x00\x00\xe2\xa2\x04\xd6\x3a\x6a\x52\x6b\x7a\xad\x43\x11\xfc\x80\x2f\x0f\xb3\x6d\xc3\x94\xb4\xd7\x3a\x30\xae\xc8\xce\xef\x66\x88\x27\x5c\x1d\x12\xc5\xd1\x02\xdb\x92\xfd\x96\xd4\x8f\x4a\x87\xc4\x47\xb8\xd0\x26\xd6\xf6\x47\x45\xab\x3a\xca\x13\xff\x19\x42\x1d\x43\x79\x04\xa6\x89\x56\x72\x30\x5b\xed\x27\x38\x0a\x45\xdd\xa3\x47\xb3\xaa\xfb\x96\xcd\xb7\x8c\xfe\xb3\x25\x08\xd7\x5c\xeb\x7d\x55\x4a\xda\xed\xea\x4a\xd6\x78\x09\xb6\x28\x4c\xda\x3b\xc7\x64\x8b\x30\xd4\x02\x91\x23\x80\xec\xd3\xa0\xdc\xd3\x08\xbd\xeb\xd7\x7f\x1a\xe9\x71\x5e\x9b\xda\x2b\xf6\xa3\xed\x2d\x68\xa0\x48\xe3\xad\x28\x88\xb5\x2a\x6a\x4b\xf3\xb3\x61\x5a\xf5\xde\xd3\x26\x29\x33\xc8\x13\xbd\xa4\x90\x72\xdb\x0a\xd8\x69\x26\xa0\xb3\xfd\x12\x4f\x97\x68\xa6\xd5\x59\x8b\x58\x5c\xd0\xf9\x82\x48\xe5\xe2\x57\x27\x40\x4c\x63\x92\x9f\x71\xb1\xf0\xdd\x05\xf9\x1b\x50\x5a\x76\x90\xc7\x1a\x3f\x6c\x4f\x53\x04\xbe\x35\xcb\x6d\x6e\x4c\x6c\xd9\xd6\xee\xee\x5f\xdd\x4c\xf2\x18\xbd\xd3\xbd\x32\xc7\x11\x37\x4d\x45\x9d\x56\xde\x5b\xe3\xad\x4f\x1b\x90\x9c\x02\x18\x14\xcd\xb0\x5c\x50\xce\x52\x77\x59\x61\x20\x62\x45\x2b\xb4\xf2\x52\x2d\xc1\x7a\x2d\x4b\xad\x1f\x0a\x24\x48\xcd\xef\xb6\x47\x8d\x25\xc3\xce\xd2\x98\x9f\xf5\x24\x8f\x03\x7b\xe3\x0b\x31\x22\x4e\x3d\x7f\xad\xde\x2f\xc5\xca\x6d\x61\x36\xa0\xd6\xfe\x5d\x95\x6d\xd1\xb2\x2e\x59\x3d\xe2\xe6\xd8\x11\x40\x28\x22\xa5\x3c\xc5\x3c\xc0\x62\xbe\x33\x96\x87\x53\x31\x6f\x8d\xb8\xb4\xf7\x3b\x20\x55\x1a\x4e\xe3\xad\x84\x35\x60\xe8\x81\x44\x67\xef\x5f\x87\xa4\xfa\xca\xd6\x08\x30\xa1\x30\x53\x72\x21\xae\xb9\x1f\xf3\x42\xca\x41\xc5\xf0\x38\xf5\xa8\x1e\x15\x5e\xb2\x68\x31\x5f\xdd\x39\x67\xbc\xef\xa0\x73\xd2\x50\xd6\xb4\xca\x2a\xdf\x41\xed\xe4\x62\x81\xd9\x5c\x6b\x3b\xaf\x79\xab\x07\xf6\xdb\xdf\xc2\x20\x04\x29\xdb\x22\x32\x1d\xd0\x38\xfb\xcd\xc9\xfd\xad\x4b\xcc\xb1\x45\xda\xe1\x52\x92\x05\x6e\xdc\xd4\x84\xb3\x27\x97\x4c\xe1\x87\xef\x10\x3d\x26\xc7\xe8\xc5\x6f\x83\x5f\xbd\x80\x1e\x47\xf5\xa6\x11\x5c\x0f\xc5\x12\x5d\xc3\xe8\x2b\xaa\x80\x10\xe4\x45\xd8\xc2\x31\x3a\xd7\xfd\x82\x3c\x57\xbf\xb6\x01\x77\xf1\xb4\x5b\xd9\x11\x12\x64\x8e\x45\x59\x91\x48\xae\x48\x3e\xf3\x29\x99\xc6\x35\x6d\x77\x15\x79\xa0\x52\x49\x1b\xb5\x3d\xce\x03\x56\xfe\xdc\xbb\x43\x61\x79\xab\x6f\x0a\x2d\xfc\xc6\x25\x56\x78\x1c\x48\xdd\x13\xe3\xa5\x1d\x17\xbc\xae\x31\x2b\xc7\xd8\x9e\xe3\xee\x52\x39\xf9\x8d\x2d\x71\x33\xc6\xfe\x5b\x94\x8d\xf1\x58\x2e\x48\xd4\xca\x0d\x48\x41\x78\xec\x5c\xee\x4a\x60\x9f\x7b\xf9\x6c\x96\xe2\x18\x5d\x72\xd5\x99\x53\xfe\xb6\x85\x55\xce\x29\xc2\xcf\x2f\x6f\xae\xfe\x36\xf9\x70\x71\x79\x33\x48\xf2\x41\x92\xc3\x33\x48\xf2\x41\x92\x47\x34\xbc\x2f\x92\x9c\xb0\xbb\x5d\x49\x71\xe7\x78\xdb\x94\x1d\x69\x03\x7a\x6a\x2d\xcd\x6a\xe7\x09\x56\xbb\x26\x49\x3b\x67\x77\x3f\x62\x6d\xf2\x5b\xf8\x9c\xcd\x60\xd9\x90\x60\x6a\xbf\x60\xdc\x11\x67\x5f\x3c\x4b\xda\x0e\x39\xce\x32\x72\xfc\x24\xe5\x3d\x87\x71\xac\x4d\x4b\x9e\x92\xb3\xfb\x1e\x2f\x8d\x17\xd8\x1c\x4a\xcc\x96\xa8\x11\x94\x29\xd8\x4a\xa7\xd7\x67\x17\x17\x01\xd2\x01\x91\x87\x82\x34\x0a\x1d\xfc\x3f\xbb\xa5\x38\x03\x47\xdf\x3e\xac\xcc\x36\x8a\x5b\x42\x33\x9d\xca\xd7\x08\x72\x47\x79\x2b\xab\xa5\xc7\xaa\x6c\x96\xa3\xeb\x4c\x78\x89\x04\x1f\x06\xc7\x48\x8b\xcd\x5b\x50\xae\x28\x9d\x9b\x14\xc8\x84\xe6\x77\xac\x7a\xda\x4e\xe4\x50\x40\x13\xda\xdf\xa0\xba\x7e\xbe\x1a\x9a\xd0\x6e\x94\x02\xfb\x98\x32\x9a\xd0\x8f\xbe\x1a\x9b\xf0\xa2\x3e\x03\xc2\xee\x25\xd9\xf7\x82\xd7\x99\xa4\xd9\xb5\x09\xae\x38\xe0\xe6\xa6\xa3\x7a\xe0\xd0\x7f\xa1\x7a\x64\x4d\xda\xae\x52\xad\x36\xac\x01\x68\x90\x38\x3b\x49\x95\xec\xf3\x14\x93\x47\x36\x7f\xff\x3d\x6e\xfe\x42\x96\x57\x24\xb1\x26\x77\x7f\xbe\x49\x45\x0a\xad\x8c\xa1\x5b\xb2\x34\x84\x7d\x67\xae\xb1\xb4\xb2\xe4\x59\xa6\x0f\x65\x50\xc1\xdc\x33\xd6\x43\x4c\x7a\x47\x9e\xc5\xd4\xcf\x2d\x49\xa0\xb9\x73\xcf\x0a\x09\x23\x81\x25\x04\xfb\x43\xaf\x69\xda\xea\xa1\x3c\xe2\xc1\x3d\x69\x9a\xa8\x7b\xf2\xe9\x3d\xee\xc9\x87\xb0\xea\x3f\xbb\xc5\x5b\xf5\x9f\x9d\xa2\xaf\x56\xbb\x92\x0f\x8b\xd5\x7f\xf6\x09\x99\xd5\x7f\x32\x9e\xa2\x14\xd4\xd6\xea\xe3\x40\xc9\x99\x4f\xe5\xb5\xcd\xb5\x0d\x55\x27\x7f\xa1\x20\x53\x06\x06\xe4\x94\x83\xb2\x5b\x2b\x20\xd3\x34\xa7\x51\x91\x9a\x27\x1f\xbe\xad\xff\x80\x38\xc8\x7b\x7b\x27\xcb\xc0\xee\xfa\xb7\x79\x2c\x33\x87\xae\xfa\xce\x71\x33\x4a\x54\x13\x85\x4b\xac\xf0\xb1\x3e\x10\xa3\xfe\x8f\x36\xb3\xf0\x1f\xfe\xc3\x0a\x4f\x49\x25\x7f\x3a\xf8\xaf\xbf\x9c\xff\xed\xff\x3d\xf8\xf9\x1f\xe1\xef\x40\x5d\x33\xf0\xf0\xe0\x0b\x89\x43\x80\x6a\x92\x8c\x97\xe4\x12\x7a\x07\x3f\x5a\x4b\xef\xd4\x20\x84\xec\x2f\xa0\xa2\xd7\xb1\x21\x17\xf0\x3f\x36\xbc\x5c\xfd\x29\xb2\xa0\x81\x7b\xf6\x50\xef\x81\xb5\x4d\x20\xea\x37\x4f\x3e\xed\x07\x37\xf4\x47\x22\x64\x12\xb7\xbb\x7b\xfa\x95\x18\xcc\x5b\xdd\x36\x96\xc5\x82\xd4\x18\xfe\xf9\xbd\x9b\x02\x7d\x1f\xfb\x9a\x8b\x0c\x4a\xa7\xe9\x3b\x70\xd4\x23\xbb\x7c\x71\xf7\x2a\xc9\xe2\x34\x4f\x46\xc9\xef\x57\x30\xf3\x84\xc1\x8c\xd8\xd9\x32\x12\xc0\xeb\x8f\x3e\x1f\xc5\x53\x09\x9c\x4e\x2e\xd0\x9d\x99\xe1\x3d\x9a\x9c\xa7\x13\xd7\x15\xc9\x6e\x6e\x25\x0b\xec\xef\x7d\xaf\xec\x32\x05\xa6\x9b\x35\x98\xa3\xe8\x9c\x56\x9f\x5e\x8e\xd7\x39\xbb\xd3\xed\xca\x6c\xb9\x5d\xab\xcf\x1e\xca\xcc\x54\x5b\x51\xbf\xa3\x49\x15\xb9\xfa\x25\x86\xde\xf2\x32\x36\x8a\xe0\x9e\x7d\xb6\x5d\xb3\x98\x72\xce\x00\x0e\x68\x55\xfd\x61\x40\xa7\x5a\xd8\x9b\x9c\x49\xf3\x1d\x70\x3d\x92\x3b\xc2\x94\x87\x93\xdb\x2a\xeb\x58\x28\x9a\xc7\x26\xb1\x3d\xea\xb2\x32\x3b\x80\x87\xf1\x72\xd5\xcf\x1e\xbb\xe8\x9e\xd7\x06\x35\x7d\x5a\x35\x0b\xac\x47\x3d\xf7\x76\xf0\xc6\xd3\x6e\xd0\x13\x7a\xee\x24\xfd\x17\x59\x29\xd8\xf9\xea\x9b\x3f\x25\xa4\x93\xae\x3f\x19\x2f\xce\x27\x32\x73\xb2\xec\xd8\x4d\xb6\x12\x30\x8e\x3d\x6e\x26\xf9\x12\xe6\xee\x7b\xe9\x62\x0a\xc6\xe6\x12\xd3\xc1\x45\x3d\x0a\x0a\xbd\xb3\x3b\x74\x87\x85\x47\x09\xb5\xd3\x8a\xca\x45\xaa\xb8\x37\xcf\xc5\xac\xcb\x8c\xed\x52\xd7\x81\x69\xc5\xd5\xb8\xe9\x74\x0f\x3d\x17\x2b\xbd\xcc\xd0\x85\xc7\x5c\xcc\x7d\x86\xf9\x2e\x9c\x6f\x12\xd3\xc3\x1c\x8c\x27\x9b\x07\x43\x6d\xf2\x5c\x13\xb1\xc6\x7f\x2f\x88\x6a\x85\x96\x59\x36\xbb\x62\xc2\x4b\x43\xc5\x92\x51\xf9\xcb\x61\xac\xa3\xd0\x29\x02\x73\x96\xf8\xba\x26\xbf\x92\x9d\xed\x7a\xfb\x0c\xda\x70\xaf\xbd\x3b\x21\x91\xc5\xb9\x66\x85\x90\x20\x15\x56\xf4\xce\x6c\x4b\x97\x3f\xe4\xa8\x05\x74\x83\x07\xc7\xc7\x07\xa6\x97\x5c\x98\xab\xd4\x78\x14\xf5\xe7\x7b\x75\x2d\x74\x4a\xd5\x13\xb8\xe1\x43\x3a\x18\xbb\x44\xa6\x9c\x86\x9d\x2a\x17\x62\xcd\xa5\xab\x7f\x01\xc6\x94\xcb\x9a\xfa\x7e\xaf\x7d\x60\x3e\xb7\x6b\xb5\x9c\xec\x77\x86\xe0\xc5\xfd\xde\x2a\x3f\x86\x1f\xd9\xe6\x89\xa5\x3a\x8a\x0f\xcd\x2b\x8f\x8b\xa6\x1d\xd9\xd7\x1f\xd7\xa4\xe6\x62\xe9\x7f\xf4\xc5\x37\xc7\x52\x71\x81\xe7\x50\x32\xca\x34\x6e\xfe\xcc\xff\x64\xfe\xb0\xd7\xbd\xf5\xbf\x36\xe8\x8e\x2e\x33\xcb\xd7\x62\xf9\xea\x6c\x39\xb7\x6e\x7b\x62\x40\xf9\x6d\xf5\x04\xf2\xe7\xc0\x03\xe6\x4c\xcc\xcd\xcf\x22\x84\xd4\x6d\x4d\xd8\x51\xa7\x70\x00\xee\xc3\x28\x79\xf2\x60\x7f\xe4\x10\x42\x25\xbd\xa3\x92\x27\x94\xed\xf0\x2f\x5a\x0f\x4f\x38\x8a\x26\xde\xaa\xa6\x85\xdc\xce\x1a\x2b\xef\x41\x79\x68\xb8\x04\xb4\x88\x3d\xec\x2b\xae\xc1\x57\xa9\x91\x17\xd0\x31\x14\x11\xec\x3b\xf4\x3f\x87\x7f\xff\xdd\xaf\xe3\xa3\x3f\x1f\x1e\xfe\xf4\x72\xfc\x9f\x3f\xff\xee\xf0\xef\xc7\xf0\x8f\xff\x38\xfa\xf3\xd1\xaf\xee\x87\xdf\x1d\x1d\x1d\x1e\xfe\xf4\x97\xf7\x6f\x6e\x26\xe7\x3f\xd3\xa3\x5f\x7f\x62\x6d\x7d\x6b\x7e\xfa\xf5\xf0\x27\x72\xfe\xf3\x67\xbe\xe4\xe8\xe8\xcf\xbf\x4d\xee\x3a\x66\xcb\x0f\x89\xd2\xdb\x3c\x63\xbb\x59\x28\x53\x64\x4e\xb6\x65\xce\xfb\xd8\x1b\x33\x85\xda\x7a\x57\x21\x65\x6a\xcc\xc5\xd8\x72\x69\x81\x91\x92\xd8\x80\xdb\x5e\xb9\xcf\xff\x95\x93\x9a\x41\xa6\xb2\x53\x0a\xf7\xe8\x80\x3f\x95\xa2\x61\x18\x7e\x9e\x03\x26\x63\x5a\x0a\x6a\xa9\x1f\xc8\x8e\xdc\xe6\x6b\xbb\x41\xff\x1d\x90\x33\x2e\x68\x64\xd6\xb5\xb3\xa4\xb4\x79\x75\xdc\x19\x41\x8e\x7b\xcd\x7e\xef\x96\x24\x40\xcc\xdc\x33\x20\x6d\xa2\x9f\x01\x69\xf3\x48\x57\x06\xa4\x4d\xd2\xf3\x45\x22\x6d\x0c\xef\xe0\xbf\x27\xcc\x26\x7f\x55\xb4\xc8\xcc\x9d\x9c\x05\xd1\x08\xbb\x8b\x05\x57\xe7\x4c\x75\x73\x6e\x0f\xc5\x51\xc3\x9b\xb6\xc2\xea\x91\x2c\x8a\x4c\x79\x6f\x7b\x16\x39\x03\xa2\x5d\xa3\xfa\x59\x0c\x3f\x65\xa8\x6e\x2b\x45\x9b\xc8\x84\x00\x6f\x5a\x7a\x32\x5d\x84\xa5\xe4\x05\xc5\x2e\x11\x1c\x7e\x53\x61\xa9\xdc\x90\xc1\x33\xaf\xf0\x2d\x09\x08\x79\x63\xb3\xb5\x81\xbc\xd7\xcd\xed\x74\xa9\xef\xa1\x73\x76\x67\xef\x24\x54\xb6\x26\xc1\x95\x74\xb1\xd2\x2c\xed\x7e\x5d\xd9\x8c\xfa\x5c\xda\x6c\x85\x20\xa9\x11\x34\x48\xef\x44\xc4\x10\xcd\xe1\xb3\x0e\x02\x09\xe9\x1f\x96\x1e\x36\xaa\x1b\xc9\xc6\x41\xba\x2a\xee\xb3\x11\x92\x6c\xac\x35\x1d\xbc\x83\x89\xf6\x75\xef\xe8\x16\xf6\x28\x81\x23\x5d\x2b\xcf\xab\x91\x3f\x85\x36\xbe\x2f\x9a\xf8\x9e\x68\xe1\x4f\xa3\x81\xef\xa7\xf6\x9d\x4d\xf3\xce\xa3\x75\xe7\xd1\xb8\xb7\xc0\xb5\xe7\xd4\xb2\xf3\x68\xd8\x4f\xe1\x5f\x6b\x04\x99\xd1\x87\x7d\x48\x5b\x76\x15\x7e\x90\x22\x0f\xe0\xaa\x69\x04\x69\x08\x2b\x1d\x11\x9a\x8b\xc0\x02\x63\xe3\x90\x71\xee\xfd\xa2\x79\x2f\xec\xeb\x4d\x9e\xb2\xe1\xb6\x46\xc3\x6d\xbd\xc5\x33\xdc\xd6\xc3\x6d\xfd\x2c\xb7\xb5\x95\x56\x5f\xff\x55\x9d\xbb\xba\x6e\x8d\xe7\x3b\xab\x80\x70\xd6\xa7\xb2\x03\xc9\xfc\x2c\xd4\xfd\x6b\xf5\x44\x22\xfd\x58\xa1\x90\xf5\xa0\x0b\xc5\x8d\xd8\x33\x5c\xd3\x02\x99\xea\x6b\xc6\xac\x46\x35\x66\x78\x0e\x34\xd8\xfa\x7b\xf6\x88\x21\x2e\x7c\x55\xab\xa8\x9e\xac\x70\x02\x82\x07\xcb\xf1\x1a\xc3\x2f\x05\xaf\x2a\xad\xaf\x54\xf4\x96\xa0\xd7\xa4\xa9\xf8\xb2\xb6\x34\x4d\x25\xba\x56\x58\x91\x59\x5b\x5d\x13\x95\x50\xa8\x3a\x52\xe2\xf8\x8a\x3e\x86\x7d\x7d\x57\x5b\x11\x8a\xfb\x40\xb1\x1b\xd4\x18\x1a\xf8\xa8\xd7\x7c\x60\x70\x95\x9f\x56\xf7\x78\x29\x47\xe8\x92\xdc\x11\x31\x42\x17\xb3\x4b\xae\x26\xc6\x89\x14\xf7\xde\x90\x13\xc4\xbc\x1c\xd1\x19\xfa\xae\xc2\x8a\x48\x85\x14\x9e\x03\xb6\xb8\x2b\xf0\xc3\x45\xaf\x51\xc4\xb5\xa0\xbc\xa7\xdb\x17\xea\x31\xcf\xb3\x72\xf2\x7d\xa4\xea\x0f\xb4\xee\x6b\xfe\x3c\x7b\x5d\x8d\xca\xf1\xe8\xef\x8c\x13\xda\xd0\xf7\x1b\x3a\x6f\xc3\x46\xef\xc5\x89\x29\x19\xe8\xaa\x22\x83\x4b\x97\x32\x24\x88\x6c\x38\x93\xa4\x57\xbe\xa1\x1b\x08\xd4\xbc\x8c\x3b\xf5\x59\x3d\xbe\xd1\x86\x41\xaa\x49\xd0\x70\xa9\xa0\xca\x41\xac\x7e\x92\xcb\x16\x98\xb8\x8e\x40\xe1\x0b\x5c\x55\xa4\x44\xb4\xae\x49\x49\xb1\xd2\x7a\x3b\x9e\x29\x22\x10\x0e\x45\xbd\x2f\x9f\xea\xf3\x46\x4c\x3d\x0c\x57\x4a\x23\xde\x58\xeb\xd3\xcc\x4a\xc8\xa3\xa5\x0c\xa2\x17\x06\x75\x6a\x0b\x7f\x74\x85\x37\x56\x4a\x69\x24\x09\x51\xfd\x7c\x00\xcd\x2e\xd8\xde\xab\xa0\x5d\x34\xad\x78\x71\x2b\x51\xcb\x14\xad\x6c\xad\x4e\x7e\x0b\xf6\x4b\x05\xe2\x24\xba\xe9\x78\x29\xe5\xff\x39\xf6\x07\x6c\xac\x7b\x25\x4f\x7e\xd3\xfd\x0a\x3e\x88\xec\x5c\x06\x2b\x3a\x87\x0d\x4d\x1e\x48\x91\xa2\xcf\xf7\x83\x2d\x0f\xa4\x08\x2b\x7d\x3a\x1a\x67\xbd\xa3\x2c\x79\x72\xa6\xb8\xa3\x79\x32\xe1\xaf\x72\x61\x9e\x12\x48\xab\xc3\x27\x37\xa4\xe7\xcc\x2e\x02\x95\x76\xe6\xcd\x8f\x15\x65\xa4\xbf\x30\xbe\xfe\x9b\x5f\x1c\x13\xf6\xb4\x46\x2e\x2a\xa9\x20\x85\xe2\x62\xe9\x58\xbf\x92\xbb\xe6\xfa\xa2\xfb\x06\x85\x93\x0f\x0f\x4e\x0e\x8e\xd6\xf6\xc8\x81\x84\xf4\x0b\x73\x2d\x1e\x5b\xea\x6c\x3f\x28\x49\xeb\xa6\x5a\xc2\x38\x0e\xca\x11\xa2\x2a\x07\x46\x48\xdf\x86\xa6\x4c\x38\xcc\x8a\xa5\xfa\x1e\x21\xc9\x91\x12\xb8\xa4\xd6\x40\x80\x4f\xf5\x97\x94\x68\xed\x85\x7e\x78\xf0\xeb\xc1\x08\x11\x55\x1c\xa1\x7b\xce\x0e\x14\x4c\xdf\x31\xba\x81\xe2\x8a\xe9\xb0\x5e\xd7\x91\x25\x6f\xa1\xc2\xb8\x59\x42\x53\x4f\xb7\x5a\xc2\x75\x83\x78\x6b\xeb\xaf\x62\x95\x42\x51\x1e\x3e\xe7\x0f\x54\x59\xf2\x0d\x2d\xbf\x5f\xc2\x6e\xb2\x15\xbf\xb1\x36\x46\xee\xc8\xc9\x82\xe0\x4a\x2d\x4c\x36\x03\xe3\x6c\xfc\x2f\x22\x38\xd0\x98\x33\xfb\x9b\xd4\x6e\xa4\x85\x94\xc3\x27\x21\xbc\xbc\xde\xa1\x2c\x40\xa6\xcc\xce\x00\xf7\xe8\x6b\xef\x0d\x89\x56\x89\xd0\xaa\x3c\x7a\x7b\x73\x33\x79\x43\x54\xbf\x9e\xb3\xfe\x10\xbd\x39\xbf\x71\x39\x2c\xe0\xe8\x27\x62\xc6\x45\xbd\x07\xe2\x3d\x0f\xb8\x76\x8c\x1a\x2e\xf6\xe1\x96\x59\x70\x99\xb4\x9c\xe8\x09\xae\x98\xb7\x5c\x2a\x13\xcb\x31\xb6\x09\x83\xc4\x46\xde\x4f\xc8\x70\xe9\xfb\x17\x93\x63\xf4\x37\xde\x42\x25\x32\x3c\xad\x96\xbe\x90\x91\x24\x69\x28\x6a\xfd\xbc\xd0\x5d\x79\xa1\x6f\x10\xbd\xf3\xdf\x12\x5c\x12\x21\x41\x40\x13\x9c\x9c\x0c\x9d\xed\xb8\x07\x7d\xcb\xba\x94\x67\xad\x54\xbc\x46\x0b\x3b\xec\x3e\xc5\xb9\x3d\x9c\xc7\xe6\xb8\x5a\x3a\x59\x41\x1a\x23\xc4\xed\xdf\x7c\x75\x22\x7a\x4d\x7a\x99\x79\xb7\x9f\x4f\x8d\x9a\x1a\x4e\x9b\x0d\x70\x18\xa2\x52\x2b\xdb\x4c\xd1\xbc\x4c\xd7\x45\x86\x7c\x01\x94\x31\x67\x00\xa5\x91\x9f\xaf\xbe\x08\x82\x3d\xc9\x6f\xca\x97\x86\x80\xb2\x41\xed\xd1\x93\xc0\xed\x91\x45\x51\xda\xcd\x67\x7c\xd0\xf1\xde\xf3\x4d\x2f\xa7\x5d\x5d\xf0\x02\x33\xce\x68\x81\x2b\xfa\x2f\x52\xa2\xb6\xe1\xcc\xe6\xd6\x81\x66\x5b\x60\x49\xc6\x10\x79\x67\x46\x9c\xcb\x80\xed\x5a\x4b\x07\xc5\x39\xa8\x7b\xbe\x48\xb4\xe9\x75\x9e\xae\x66\x45\x85\x27\x53\xb7\x87\xcf\x5a\x40\xbd\xb7\x58\x79\x76\x3c\xfa\x22\xd4\x49\x94\x89\x78\x61\x9d\xdb\xcc\xd4\x09\x05\x3e\x6f\x73\x5d\x81\xe0\x95\x44\xdc\xa5\xef\xaf\x6c\xf3\xaa\x55\xc0\x7d\xd3\xbd\x0c\xe6\x40\x20\xd6\xd6\x53\x22\x3a\x62\x48\xa1\xd6\xe7\x34\x8b\xd7\xc5\x36\x6b\x9a\x73\x51\x5a\xa7\x63\x60\x36\x27\xe8\x95\x6e\xf9\x8f\xdf\x7e\xfb\xfb\x6f\x33\xb4\xa3\x87\xe7\x5a\xc1\x0c\x5d\x9c\x5e\x9e\xfe\x72\xfd\xe3\x19\xd0\xcd\xa7\xbe\x3e\x53\x92\x6c\xee\x14\xd9\xac\x09\xb2\x4f\x9a\x1e\x0b\xc4\x8d\xc9\x52\x36\xf7\x91\xb8\x86\x5e\xe9\x4d\xd8\x4a\x43\x51\x6f\x6d\x92\xa0\xc4\xb6\x36\xa3\xd2\x77\x67\x18\xcc\xd3\x02\x6b\x2f\x24\x95\xac\x08\x69\xb2\x59\xfc\xd7\xfa\x6d\xbd\x72\x40\xa8\x6c\x85\xa9\x4a\xeb\x83\x57\x9d\x2f\xdf\x06\xad\xa0\x0f\x5f\x91\xf1\x2f\x49\xc1\x59\x99\x62\x02\xe4\x52\x69\x6d\x4f\xb2\x9e\xb9\x6b\xf3\x4e\xe7\x22\xee\xae\x12\xdb\x18\x58\x92\xa9\x2b\x8a\xfc\xaa\xe6\x91\x93\x86\x0d\x02\xde\xf6\xc7\x3f\xc4\x07\xc8\x8a\xe6\x9a\x17\xb7\x19\x5d\x64\x89\x02\xec\xb5\x3e\x69\x85\x89\x05\xde\x9c\x4d\x4c\xe7\xf4\xca\x5c\x7e\xb8\xe9\xa8\x5f\xb4\x16\x8e\xbb\x6a\xf0\x6f\x6d\xb4\x10\xb3\x12\xdd\x92\x26\xcd\xba\xd4\x02\xd3\xc1\x08\xfb\x28\x42\xf0\xbd\x0b\x5b\xb7\xc3\xa4\x57\x1b\x41\xe0\xd0\x7f\x46\x23\x4e\xab\x00\x14\x04\xe7\x21\x10\x68\x8d\x90\x19\xa6\x15\xc2\xe0\x95\x57\xb4\x26\xe8\x7e\x41\x98\x71\xf6\x77\x68\x89\xaf\x48\xe0\x7c\xad\xde\xc6\x03\x07\x09\xff\x6e\x6b\xaf\x61\x2a\x2b\xc6\xd7\x6d\x06\x58\x99\x2d\x7a\xac\x66\x83\x19\xf0\x39\xcf\x60\x06\x44\x9a\x01\x8d\x20\xd7\x8a\x47\xeb\x9a\xd9\x00\x37\xa6\x1b\x8f\xc0\x6d\xa6\x64\xc6\x05\x59\xc5\xdb\x04\x38\x18\x8b\x9c\x4f\x40\x06\x9f\x4e\x2e\x7c\xec\x8b\xf7\xb0\x2e\x86\xb9\x58\xb6\xc5\xc2\x85\x49\x19\x91\xf2\x04\x90\x35\x6d\x63\x1c\xcb\x70\xb5\xb5\x82\xc4\xa3\x7c\x1a\x41\x48\x0d\xf3\x38\xea\xd8\x84\xf4\x70\x09\x33\x1f\x12\x55\x98\xb8\xb9\x83\x15\x59\x9e\x58\x37\x5d\xb3\xa4\x70\x7e\x37\xb1\x85\xc0\x72\x41\x20\x77\x96\x3c\x50\x25\x4d\xa3\x86\x8d\xd5\xcd\xb8\xd6\x17\xe6\x02\x17\x04\x35\x44\x50\xae\x55\x8c\x96\xa9\x92\xdf\x33\x34\x25\x73\xca\xa4\x5b\xb1\x94\x2e\xb9\x2d\x01\x48\x22\x2a\x7d\xed\xee\x63\x74\xd5\xab\x1c\x67\xd9\xc5\x0a\xde\xc9\x4c\x3b\x45\xa3\x4c\x53\x02\xca\x0b\x6c\x83\x16\x57\xd5\xb2\xdb\x78\x21\x41\xe8\x23\x33\x14\xbf\x21\xcc\xcc\x1e\xb6\x0c\x06\x5a\x92\x0a\x2f\x4d\x06\xf9\x8c\x32\xf0\xfe\x0a\x79\x74\x9c\x0e\xcd\x8a\xee\x20\x17\xc1\x3b\x1f\xdd\x19\x54\x22\x41\x70\x91\xc4\x63\x3c\x60\xc0\x3e\xf5\x0c\x18\xb0\x01\x03\x36\x60\xc0\xd6\x9f\x01\x03\xd6\x7f\x06\x0c\xd8\xe3\x1d\xda\xe7\xa0\xdd\x80\x01\x1b\xbc\x32\xeb\xcf\x80\x01\x8b\x7a\x06\x0c\xd8\x27\x9f\xbd\x13\xd1\x03\x06\xec\x33\x9e\x01\x03\xf6\x99\xcf\x80\x01\x1b\x30\x60\x03\x06\x6c\xc0\x80\x25\x3c\x03\x06\x6c\xfb\xe1\x0d\xc1\x9f\xf8\x67\xc0\x80\x0d\x18\xb0\x2d\x9f\x01\x03\xb6\xf2\x0c\x18\xb0\x01\x03\xf6\xb1\x67\xc0\x80\x0d\x18\x30\xfb\x0c\xde\xc6\xb5\x67\xc0\x80\x6d\x78\x06\x0c\xd8\x76\xed\x0c\x66\x40\xda\xcb\x9e\xc4\x0c\x90\x8a\x37\xd7\x74\x9e\xc0\x0b\x99\xeb\x18\x5c\xfb\x9e\x58\xd2\x48\x69\x8b\xed\x4a\xf3\xa1\xf3\x63\x49\x4b\xd9\x17\x22\xc2\x82\x9b\x64\x4a\xb4\x89\xa0\x87\xd5\xa4\xdc\x26\x17\x33\x08\x20\x07\x4c\x6e\xfa\x54\x38\x9a\x40\xda\x2b\xeb\xd0\x57\x9f\xdd\xed\x46\x99\xb6\x5d\xe2\x7b\x10\xcc\x47\x81\x99\xa9\x8c\x6a\xcb\x64\xeb\xeb\x7d\xc2\x4b\xe9\x2a\x49\x30\xce\xc6\x86\xac\xf5\x58\x77\xf8\x98\xcb\xe3\x04\x6f\x70\x22\x33\x9b\xc1\xc8\x4d\x04\x9f\xee\x8c\x9d\x6d\x02\xf8\x23\x5a\x58\x80\x1e\x9f\xf5\x18\xd7\x4c\x07\x23\x99\xd6\xfa\xc0\x30\x28\xd6\xec\x28\xb8\xa8\x15\xd8\x1e\x14\xb8\x4b\x36\xb7\xad\x91\x53\x8e\xa5\x52\x9e\x34\xdc\xfc\xa7\xc3\x4d\x05\x80\xa9\xe8\x38\xca\x8e\xe9\xe5\x52\x50\x52\x3b\x43\x48\xed\x09\xc2\x2c\x03\x2a\x2a\xa7\xae\xb4\xa7\x68\xa8\xfd\x44\x42\xed\x23\x0a\x6a\x17\x08\xa8\x9d\xa3\x9f\xf2\x84\xd5\x33\x84\xd4\x33\x69\xa4\x4f\x10\x9e\xb2\x40\xfa\x9b\x85\x20\x72\xc1\xab\x68\x81\x93\x4b\xd8\xbc\xa7\x8c\xd6\x6d\x0d\x55\x28\xb4\x4c\xa1\x77\x1e\xec\x2f\x9d\xc8\xb0\xd7\xbd\x41\x1c\x40\xb9\x8a\x92\x40\x19\x70\x4c\x2b\xbd\xb5\x80\x2c\x74\x81\xef\x40\x29\x6d\x8b\x82\x90\x32\x45\x2d\x0d\xbd\xd5\xbf\x3f\xf6\x3d\x34\x1c\xfd\x54\xa2\x57\x69\x57\x4d\x9a\xdd\x13\xb8\xf3\x7e\xff\x4d\xd4\x3b\xe6\xa2\xc9\x73\x4b\xbf\xb9\x9a\x9c\xf5\x6e\x69\xf8\xe0\x2d\x1c\xe3\xb3\x05\x29\x6e\xaf\x2c\x94\x66\x77\x37\x73\xba\x9b\x29\xc9\xc5\x94\x43\x31\x48\xf5\xa2\xf4\x63\xc8\x5c\xa8\x95\x10\xe8\x1c\x56\x91\x88\x3b\x5a\x90\xe3\x67\x70\x54\xe4\x32\xfe\xd3\x0f\x02\x82\x30\x01\x0c\x7c\x5f\xd4\xae\x6b\xd3\x1d\x1f\x61\x08\x7c\x54\xb6\xa7\x00\x1a\xad\x70\xe1\xd7\x66\xbe\xf9\xd0\x25\x75\xe3\x50\x12\xe2\x0d\x9a\x39\x55\x8b\x76\x7a\x5c\xf0\xfa\x44\x8b\x0e\xf3\x9f\x69\xc5\xa7\x27\x35\x96\x8a\x08\x6d\xe3\xd8\x6b\x7d\x5c\xe8\x1e\x50\x36\x3f\xae\xcb\xa3\xe3\xff\x95\xd4\x87\x0b\xeb\x2b\xb7\x69\x58\x8f\x38\x09\xa6\x44\xcb\x7d\x2e\x56\xbc\x05\x7a\x52\xd2\x37\x69\xf2\xfd\x9d\x5a\x54\x24\x11\x96\xbc\x13\x48\xf2\x20\xb5\x51\x86\x80\x40\x4e\xa1\xb2\x1f\xb0\xe3\x27\x83\x1c\x67\x39\xab\x99\xa0\xc6\x7b\x04\x33\xde\x1b\x5b\x68\x5f\xa0\xc5\xd9\x60\xc5\xb9\x20\xc5\x59\xe0\xc4\x39\xa0\xc4\xf9\x60\xc4\x79\x20\xc4\xf9\xe1\xc3\x4f\x06\x1d\xfe\x22\x60\xc3\x19\xe3\x63\x99\xe0\xc2\xcf\x01\x15\xde\x5f\x1f\x0c\xca\x00\x0f\x7e\x3e\x68\x70\x96\x79\xcc\x6a\xc5\x26\x8a\x84\x1d\x40\x81\x9f\x23\xfe\xff\x64\xb1\xff\x0c\x71\xff\x9c\x31\xff\x6c\xf1\xfe\x27\x83\xfc\xa6\xc3\x7d\xb3\xfa\x14\x9e\x05\xe6\x9b\x13\xe2\x9b\xbc\xbe\x94\x51\x45\x71\xf5\x9a\x54\x78\x79\x9d\x06\x04\xcd\xb5\x12\x97\x6b\x60\x51\xe3\xb6\xee\xe3\x1a\x16\x58\x22\x17\xea\xb6\x14\x2f\x2e\x96\x6e\x55\x60\x84\x21\xe2\xac\xc7\x17\x1d\xb5\x46\xfb\x17\xb9\x46\x7b\xe3\x1e\x37\xbc\x2a\x7b\xb2\x6b\xde\xf2\x7b\xc4\x67\x8a\x30\x74\x48\x99\xdb\x39\x47\x81\x97\xa6\x0b\x8f\x24\xc7\x3b\xf4\x5b\x5f\xbd\x74\x8d\x7c\x7d\x71\x0f\x88\x0c\x49\xb9\xd7\x91\x2f\xdb\xc7\x4f\x87\xbe\xec\x17\x67\x6d\xd5\x0f\x7f\x99\x90\x58\x9e\xd8\xd7\xab\x63\xf4\xde\xaa\x13\xaf\xa0\x3f\x5e\x14\x61\x56\x22\xcb\xcf\xf5\xf5\xed\x93\x64\xa8\x7b\xdf\xb8\xf1\xd8\xf4\x3e\x9e\xc5\xdc\xc0\x5a\xcb\xe4\x08\xeb\x6f\x81\x02\x3a\x38\x5d\xf7\xc6\xe9\xba\x23\x04\xf6\xd7\x67\x6d\x3d\x3f\xe2\x7a\xb0\xb6\xfe\x5d\xac\xad\x80\x16\xef\x8d\xc0\x05\x99\xec\x93\xf2\xe6\x04\x48\x97\x08\xd8\xe9\x70\x5e\x5c\x30\x42\x4c\xe2\x58\x47\x7a\x08\xfc\x7e\xb3\xb6\xaa\x96\xc6\x87\xd8\x63\xc0\x8c\xdf\x5a\x37\x0b\xb2\x46\x1d\x08\xa1\xd4\x0d\xbd\xeb\x6c\x93\x46\x70\xab\x91\x88\x96\x31\xad\x62\xd8\xe3\xa4\x3b\xaf\x6d\x11\x49\x58\xbc\x3b\x1d\xf7\x88\x0d\x2d\x08\x1d\x80\x9e\x0b\x82\xba\xfc\xa5\x7e\x47\x74\xab\x33\x2e\x0a\x3a\xad\x96\x68\x81\x2b\x6d\x2c\x59\x90\xf6\x2d\xad\x2a\xfb\x9a\x04\x50\x38\x51\x26\xf4\x6c\x34\x9a\x8a\xb3\x39\x4c\x06\x36\x1d\x21\x0f\x0d\x29\x74\x9b\x45\x45\x30\x6b\x1b\xd3\x4f\xad\x1f\x2d\x79\x2b\x5c\x3f\x93\x50\xf1\x41\xeb\x54\x22\x46\xab\x91\x9b\xf2\x3e\x05\xe6\xfa\x9e\xef\x5c\xca\x92\x94\x96\xbd\xf2\x9e\x4a\x32\x82\x77\x46\xf7\xc9\xf4\xc5\x55\xed\x37\xfb\xc6\x7c\xd6\x08\x7e\x47\xcb\x0e\xa3\xaf\xb7\x05\xe0\xe3\xa3\xdb\xfa\x11\xde\xeb\x44\x2b\xe3\x6c\xcc\xc8\x1c\x83\x7a\x6c\x05\x9a\x41\x74\x9a\xf6\x0d\x7e\x90\x95\xb4\xc0\x8a\x48\xc8\x49\xe8\x51\xdb\xde\x51\x1c\xdd\x13\x3d\x9e\x60\x47\xa1\x43\xc6\x11\x87\xcc\xc2\x96\x51\xb5\x84\x88\xde\xa2\x55\xa8\xe4\xf7\xec\x28\xe5\x60\x1a\x98\x03\x46\x53\xa2\x70\x97\x1c\xe8\x54\x32\x89\x08\xc3\xd3\x4a\x9f\x3d\x40\xfc\xdf\x6c\xdc\x00\x68\x46\xb0\x6a\x05\x41\x73\xac\x12\xa4\xc4\x06\x6d\xde\xac\xe7\xc7\xb7\x1d\x95\x36\x5e\x37\x43\x2d\x93\x24\x51\x91\xcd\x66\x02\x44\x66\xbc\xea\x13\xcd\x5b\xb5\x27\xf7\xc8\x63\xae\x23\x93\xb9\x13\x18\x89\xb4\x26\x12\xf1\x36\xc1\x93\xd7\x33\xff\x6c\x73\x39\x2d\xbc\xc1\xef\xb4\xf1\x89\x0d\x9b\xe6\xd8\x61\x97\x81\x56\x1e\xf0\x13\x38\xb8\x95\xc9\xa0\x7e\x7d\x79\xfd\xcb\xbb\xd3\xff\x3e\x7f\x17\xb7\xf0\xe7\xb8\x58\x84\xdc\xe2\x0c\x61\xb8\x28\x40\xc8\x2f\xf0\x1d\x41\x18\xb5\x8c\xfe\xb3\xb5\x90\xb7\x43\xdf\x5e\xa4\x58\xcd\x92\xde\x93\xa4\xf8\xea\x5b\x22\x4a\x72\xe4\x58\xd3\x77\x54\x02\x51\x35\x74\xc2\x02\xff\xb9\x24\x68\x26\x78\xbd\x62\x68\xa1\x4b\x0f\xae\x5b\xea\x1b\x06\x1b\xd3\x6c\x41\x44\x9c\x46\xfe\xfa\xc3\xf9\x35\xe4\xe0\x37\xc2\x10\xbb\x43\x72\x01\xbc\x13\x5a\x37\xa9\x83\xa6\x3f\xe5\x31\x3a\x65\x4b\xf3\x4b\x23\xcc\x22\x55\x94\x8a\x4a\x45\x40\x39\xb5\x86\xa4\x83\x07\xbe\x78\x79\x0c\xff\x7b\x81\x70\x59\x0a\x6d\x69\xfa\x1c\x8d\x62\x35\xcb\x2c\xaa\x65\x63\xbf\xd2\x69\x15\x4c\x2e\x23\x0a\xd2\x38\xa2\x5e\xf8\x9e\x97\x76\x25\x40\x09\x04\xfc\x8e\xd1\x6e\xa5\x12\x58\x91\x39\x2d\x50\x4d\xc4\x9c\xa0\x06\xab\x62\x81\x6a\xbc\x44\x05\x17\xa2\x6d\x0c\xc5\x48\x89\x15\x8e\x6b\xf9\x7b\x2e\x50\xed\xa4\xb3\x96\x66\x5a\x25\xbf\xde\x0c\x04\xed\x44\x76\xf8\x4f\x2a\x65\x4b\xe4\xc9\xab\x97\x7f\xfa\xe6\xdb\x48\xf3\x3a\xe3\xc1\x8d\x85\x3e\x25\x40\x9e\xfa\xf0\x2f\xb7\xc1\x00\x74\xdd\x63\x86\xb1\x3b\xc4\xec\x7c\x90\x86\x92\xb2\x79\x95\xec\x00\x49\x76\x03\xa6\x3a\x01\xc7\xdd\x08\x26\xb1\xbe\xc0\x74\x4f\x60\xaf\x0f\xf1\xae\x94\x7c\x5e\xb0\x4e\x83\x73\x7e\x2f\x2b\x90\x39\x0b\x0c\xbb\x8b\x89\x93\x52\x29\xfe\x23\xb0\x26\xbc\x63\xca\xb0\x8f\x98\x66\x0d\xde\x61\x84\x5e\xa2\xff\x42\x0f\xe8\xbf\xc0\x0b\xf6\xc7\xf8\xa6\xf2\xf8\x98\x72\xc0\xf8\x17\x5c\xaa\x8b\x49\xa6\x85\xfe\xab\xbe\xaf\xf4\x1b\xf5\x7a\x28\x8e\xa6\xd4\xba\x23\xc8\x83\x22\x42\x9b\x81\x76\x0d\x53\x67\x2e\xc9\xa3\xa6\x3b\xf8\xa5\xec\xee\x54\x70\xc1\xc5\xac\x8f\xfe\x7f\xa6\xfd\x0d\x0d\xbf\xe5\x52\x5d\x5a\x69\x1d\x52\xe8\x84\xfd\xa8\xe1\x22\xee\x89\xfb\x94\x56\xdf\xeb\xbd\xd7\xd5\xd8\x40\x25\x87\x04\x08\x93\xc3\xb9\xa0\x09\xc2\x61\x7f\x4e\x6c\x1a\x4e\x34\xdf\xd6\xfd\xd8\xd6\x5a\xf1\xe9\x83\x47\xc6\x1a\x29\x41\x59\x9a\x86\x97\xc7\x60\xdf\x24\xf4\x42\xcf\x46\x19\x28\x03\x1f\x31\x8d\x8e\x8d\xbd\xe6\xa3\xc3\x70\xe0\xb4\xc4\x2a\x30\x8b\xd5\x61\xcd\x23\xc8\x8c\x08\x61\xf2\x84\xa7\x4b\x97\x6e\x94\xbc\xdb\x92\xa4\x5c\x23\xb8\xe2\x05\x8f\xa6\x4d\xc9\xb9\x55\x26\xb6\x2f\x30\xf7\x10\xab\xf5\xd1\xf1\x1f\x5e\x4f\x46\xe8\xe6\x6c\x32\x42\x5c\xa0\xeb\xb3\x34\xf0\x53\xe8\x82\x79\x71\x73\x36\x79\xb1\xd3\x15\x08\x72\x98\x6e\xce\x26\x11\x2f\x59\x87\xcf\xd6\xb8\x19\xdf\x92\x65\xa4\x76\x97\x43\xc3\x1c\xfb\x8d\x95\x65\x40\x66\x9a\x6b\xdc\x6c\xfd\x36\x41\x70\x49\xf7\x9a\xc9\xc5\x65\x1d\xfa\x9e\xe6\xa3\x74\xa9\xf9\x1d\x29\x8d\xd5\xec\x5a\x21\xac\x6c\x38\xd5\x36\xd2\xc0\xf3\xf2\xb1\x67\xe0\x79\xd9\xfe\x19\x78\x5e\x36\x3d\x03\xcf\xcb\x16\xcf\xc0\xf3\x62\x9e\x81\xe7\xa5\xdf\x91\x7d\xcc\x31\x1a\x78\x5e\x3e\xf9\x0c\x3c\x2f\x8f\x3e\x03\xcf\xcb\x56\xcf\xc0\xf3\xb2\xfe\x0c\x3c\x2f\x1f\x79\x06\x9e\x17\xff\x0c\x3c\x2f\x03\xcf\xcb\x97\x2b\xb5\x07\x9e\x97\xd5\x67\xe0\x79\x19\x78\x5e\x06\x9e\x97\xf0\x19\x78\x5e\x1e\x79\x06\x9e\x97\x81\xe7\x65\xe0\x79\xf9\xf8\x33\xf0\xbc\x44\x3f\x03\xcf\xcb\x76\xcf\x90\x79\xb8\xe5\x33\xf0\xbc\x0c\x3c\x2f\xab\xcf\xc0\xf3\xf2\xc9\x67\x3f\xdc\xe3\x03\xcf\xcb\xc0\xf3\xf2\xd1\x67\xe0\x79\x19\x78\x5e\x3e\xfa\x0c\x3c\x2f\x11\xcf\xde\x39\x5d\x07\x9e\x97\x81\xe7\xe5\x63\x6d\x0c\xd6\xd6\x76\xcf\xc0\xf3\x32\xf0\xbc\xac\x3d\x03\xcf\xcb\xfa\x33\xf0\xbc\x0c\x3c\x2f\x03\xcf\xcb\xc0\xf3\xe2\x9f\x81\xe7\xe5\x6b\xf7\x3b\x09\x22\xe9\xbf\xc8\x84\x57\xb4\x58\x26\x67\xfb\x5c\x11\xc9\x5b\x51\xe8\x1b\x1b\x5e\x8b\x1a\x78\xaf\xf7\x28\x24\x29\xd9\x7b\x46\xa1\x70\x15\x4c\x5c\x48\xa5\x20\xec\x1c\x3c\xc5\x14\xec\x05\x9d\x82\x1b\xe0\x65\x3c\x82\x60\xec\xca\x67\x9b\xe9\x8b\x73\x96\x26\x5b\xed\xe1\x40\xf6\x21\x9d\x33\xa4\x3d\xf2\xbb\x48\x71\x2f\x6c\xe9\xa3\x9b\x0b\x37\x4d\x45\x53\x12\x63\x11\xba\x6e\x41\xbb\x20\x36\x04\x2e\xbf\x43\x45\xd3\x8e\x50\x4d\x6a\x2e\x12\x12\x23\x32\x58\x70\xbd\xad\xb2\x0f\xeb\x74\x65\x3a\xe4\x26\x5f\x71\x98\xff\xa5\xb1\x17\x3a\x96\x2a\xbf\x56\xd4\x89\xc3\x24\xac\xd9\xc5\x6c\x15\x8c\x4a\x55\xcf\x0b\x74\xc9\xd5\x95\x3d\xdc\x3b\x5b\xaf\xcc\x88\x05\x37\x85\x3b\x63\xad\x3a\xe3\x75\xd3\x2a\xd2\xbb\xd8\xcc\x14\x1b\xa3\x83\xca\x54\x81\xbe\x9b\x6c\xd0\x82\xb3\x19\x9d\x5b\xeb\xfb\xa4\xc6\x0c\xcf\xc9\xd8\xcf\xf6\xb8\xa3\x7a\x38\x89\xbe\xa8\x77\x96\x0a\x5a\x54\x98\xc6\x03\x07\x73\x89\x89\x33\xe8\x05\xd0\x80\x75\x80\x7a\xc8\x4d\xf3\xd3\x3c\xf2\xb0\x71\x6a\xe4\xc6\xb1\xfb\x95\xf9\xe3\x51\x82\xf5\x88\x15\xf8\x2a\xc0\x30\xda\xb0\x53\xd3\x0c\x46\x63\x26\x96\xa4\x21\xda\x22\x30\x0e\xd4\x78\xbd\x7f\xc9\x70\x4d\x0b\x77\xc2\x4e\xab\x8a\x17\xc6\x27\xd3\xb7\x2a\x73\x74\x59\x1b\xbb\x75\xdd\x2a\x3c\xad\xc8\x31\xba\x30\x14\x15\x9c\x55\x4b\x7d\xfe\x24\x51\x0e\xa2\x60\x37\x7f\x9a\x25\x99\x82\x7f\x4d\xc4\xbe\x6e\x54\xca\x61\x53\x19\x4e\x0d\xc2\xb4\x28\xe3\x8c\x20\xc2\x94\x58\xea\xfd\x37\xe1\xe5\xb5\xde\x82\xbd\x6f\x27\x53\x6d\x24\x42\x5e\x73\xc0\x5d\x13\xa1\xae\x79\x00\xaa\xe9\xe0\xd4\xbc\xc0\xd4\x2e\x84\x60\x98\x82\xc2\x8c\x9f\xde\xb6\x68\x78\x79\xbc\x41\x34\x21\x3e\x4b\xec\x81\x6e\x71\xc2\x4b\xad\x34\x09\x62\xe4\x93\x3f\xa3\xc6\x81\x78\xa1\x3b\x77\x0b\x1e\x3f\xac\x3a\x6d\x0a\xdf\x61\x5a\xe9\x03\x9c\xd8\x81\x75\xd6\xc5\xb4\xa8\x4c\xa6\x58\x85\x05\xe7\xef\xd3\x66\xb1\x69\x5d\xbd\xcc\xb0\x62\xc1\x25\x61\x20\x2f\xb1\xcf\xe0\xf1\xf9\x05\x56\xc4\x94\xe6\x2e\x4e\x45\x11\x5f\xcc\x10\xa9\x1b\xb5\x1c\x21\x72\x47\xc4\x52\x2d\x00\x6d\xe0\x79\x43\x41\xac\x51\x89\x6a\x5c\x06\xbb\x63\x84\xb8\x73\x40\x27\x36\x0f\xf7\x83\xb5\xc9\xda\x4a\x19\x0b\x8d\x4a\x9f\x46\xb1\xeb\x5d\x93\x9b\xce\x06\xa5\x0a\xcd\x9c\x74\x34\x08\xa8\x54\x6b\x1a\x47\x5c\x8b\x32\x9e\x85\x77\xd0\x8b\x20\x75\x44\x6f\x89\x1a\x3f\x80\x7b\x12\xd7\xbc\x65\xca\xf0\xd4\x18\x8b\xc1\x6b\x79\x26\xc1\xe6\x19\xf1\x72\x4f\xaa\xdb\xa3\x3c\x57\x3b\x2e\x1d\x35\xc5\x24\x47\x9e\x32\x56\x8a\x08\xf6\x1d\xfa\x9f\xc3\xbf\xff\xee\xd7\xf1\xd1\x9f\x0f\x0f\x7f\x7a\x39\xfe\xcf\x9f\x7f\x77\xf8\xf7\x63\xf8\xc7\x7f\x1c\xfd\xf9\xe8\x57\xf7\xc3\xef\x8e\x8e\x0e\x0f\x7f\xfa\xcb\xfb\x37\x37\x93\xf3\x9f\xe9\xd1\xaf\x3f\xb1\xb6\xbe\x35\x3f\xfd\x7a\xf8\x13\x39\xff\xf9\x33\x5f\x72\x74\xf4\xe7\xdf\xc6\x47\x1f\x53\x43\xed\xf9\x02\xed\x99\xc2\xec\x4f\x12\x64\xb7\x32\x76\xe7\x87\xdf\x5e\x81\x6b\xc7\xdf\x46\x27\x3e\x76\xfc\x45\xb2\x4f\xe6\x62\xd6\xb5\x4f\x25\xe2\x35\x55\x8a\x94\xf6\xee\x0d\xb8\x6f\x56\xfc\x41\x56\x60\x01\x6d\x15\x86\xdb\x3b\xe0\x60\xe9\xdc\x48\xd1\xdd\xf2\xf7\x2b\x78\xc0\x18\xa2\x75\x53\x91\x9a\x30\x05\x82\x67\xec\x6c\x5b\x70\x27\x1e\x77\x23\x28\x8c\xc3\x83\x3c\x14\x84\x94\xb6\x93\x83\x6c\x0c\x9e\x41\x36\x0e\xb2\xf1\x53\x4f\xb2\x4f\x3c\x87\x60\xbc\x0a\x3b\x61\x7d\x59\xd2\x69\xca\xe0\x21\xf7\x14\x09\x7c\x06\x40\x89\x3b\x5a\xb6\xb8\x0a\x99\x64\x1d\xb9\x68\x9c\x04\x00\xd7\x4e\x1f\x1a\x02\x61\x5a\x72\x47\x2a\xdf\x09\xe3\xa6\x3f\x46\x7f\x35\x70\x9e\xd0\xd0\xec\x3b\xd4\xe3\x02\x72\x9b\x86\xdb\x67\x84\xb0\xa6\xee\x81\x5c\xe9\x92\x47\x1b\x75\x49\x18\x7a\xb7\xc5\x4d\xc5\xa9\x97\x1a\xd5\x72\x84\x24\x51\x26\xc7\x66\x41\x56\x96\x09\x4b\xf4\xe2\xb4\xba\xc7\x4b\xf9\xc2\xc7\x24\x29\xa3\x6a\xa5\xf8\x40\x54\x1f\x80\x1b\x56\xbf\x70\xc6\xb5\xce\x0b\x55\x15\x66\x33\x52\x44\x5a\xb3\x86\x83\x63\xbd\x6f\x16\x8f\xae\x28\x6b\xf5\x68\xdd\xac\x92\x12\x71\x16\xd5\x10\x79\xa0\x0a\xb5\x4c\xd1\x4a\x2b\xeb\x48\x90\x79\x5b\xe1\xd0\x11\x68\x47\xe6\x60\x72\xe5\x31\xfa\xc0\x0a\x12\x7e\x39\xce\x53\xbd\xd2\x80\x56\x1e\x2a\xa2\x48\x39\x82\x57\xf7\x87\x2e\x0d\xd0\xac\x77\xf2\xfd\x52\x46\x35\xef\xe6\xd2\x03\x89\x8e\xcd\x81\xf2\x28\x07\x54\xd2\xd9\x4c\xb7\x0c\xc6\x36\xe3\xa2\xc6\xeb\xbd\xc2\xac\x8c\x6a\x5d\x9f\x5c\x48\x2f\x09\x59\x7e\xa1\xb2\xcb\x0b\x49\x4b\x52\x60\xf1\x22\xac\x09\x72\x5a\xa9\x05\x6f\xe7\x8b\x6e\x57\xa4\x4d\x39\x92\x0a\xe0\x55\x7a\x32\xa5\xf3\x5c\xac\x6c\x36\xa9\x75\x16\x56\x10\xa3\x5a\x71\x62\x04\xc6\x3d\x8e\x6c\x7b\x0d\x02\x60\x30\xdd\x66\xcd\x5d\xce\x15\x60\xf8\x48\x19\x24\xc8\x31\xf2\xa0\x32\x0c\xf8\x18\x5d\x18\xc2\x8b\x51\xff\xad\xbd\x29\x31\x93\x11\x60\xd8\x1c\x1a\x33\x12\xc0\xb7\xd2\x00\xf5\x29\x66\xc0\x4b\x6c\x5e\x8e\xd9\xd2\x65\x74\x00\xc6\xcc\x64\xa2\xf9\x24\x93\x2a\xce\x87\xee\xcf\xd2\xb3\x97\xd9\xe9\x9d\xd0\xab\xb6\xda\x5d\xf4\xf2\x2a\x2c\xf0\x51\xd9\x02\x3c\x42\xf7\xc8\x65\xf5\x2c\x48\x71\x6b\x4e\x5e\x49\x8c\x78\x23\x96\xe7\x36\xf5\x74\x2d\x78\x5b\x95\x86\x55\xb7\x93\xce\x20\x69\x0d\x84\xd2\x74\x03\x0b\x82\x88\xb6\x10\x80\x7a\x84\xc6\x89\x6f\x2e\x4a\xbd\xbd\x8d\x48\x86\x17\x1b\xaf\xb6\x4b\x77\xb1\x5d\x02\x29\x5f\x70\x66\xee\xc9\x91\xbd\xb9\x6b\x4c\x59\xac\x6a\xd7\x8d\x81\xce\x19\x17\xe0\xb4\x9e\x21\xc6\xfb\x7d\xe8\x1f\xf9\x95\x5e\x44\xeb\x1c\x1e\x87\xb4\x51\xdb\xe9\x96\xd3\xb4\x7f\xbf\x20\xda\x5a\xeb\xf7\x25\x56\x6c\x07\x2b\x2a\xb4\x44\x3c\xd6\x9d\x91\x4a\x60\xa0\x49\xb6\xf9\x14\x22\x76\xe3\x6b\xa5\xfb\x54\xa1\x9a\x4b\x85\xbe\x79\x19\xcc\x71\x92\x1f\x6d\x8c\xe0\x24\x42\xc0\xcf\xab\x29\xc0\x74\x81\x21\x17\x2a\xf6\xad\x17\x25\x61\x8a\x16\xb8\x0a\x3a\xaa\x2f\x89\x19\x17\x53\x5a\x96\x04\xa0\xed\x50\x10\x02\x4c\xce\x48\x4b\x17\x54\xd7\xae\x81\x00\x03\xd2\x6d\xac\xf7\x3f\x5c\xdf\x40\x0c\xb3\xaf\xef\x75\x36\x7f\x9c\x6a\x74\xa7\x87\xa0\xb4\x50\x08\xf7\xb3\x51\x67\x7b\x2d\x7d\x1d\x90\x3e\x3d\x1e\xbd\x53\x02\x47\xcf\x82\xdf\xaf\xcb\x11\xaa\x55\x36\x56\x46\x27\x3c\xee\x01\x8e\xcf\x6c\xfc\x1d\x61\xef\x4c\xe3\xfb\x80\xe6\xba\xf6\xb9\x91\x7a\x63\x63\x9b\x19\x89\x6f\x09\xd3\xa2\x6c\x7d\xe1\x67\x9e\x43\x8b\x0a\x70\x77\xa5\x50\x43\xc1\x69\xc6\x8a\x4a\x7d\x9a\xcd\xc5\x08\xe1\xa6\x86\xdb\x0a\x6e\x1e\xf7\xfc\xc2\x6e\xce\x17\xfa\xb2\x76\xc2\x3e\x8d\xd3\x3a\x43\xe0\x33\x83\x77\x44\xcf\xea\x19\x2f\x53\x7c\x5c\x2b\x70\x07\xaf\xf4\x98\x94\x19\xb8\x6f\x4b\xa3\xf3\x80\xc2\xa3\xd7\xb5\xbf\xaa\x5f\x07\xce\x41\x9f\x49\xac\x78\xbc\xbf\x2b\x0f\xd6\xc1\x75\x63\xbf\x42\xd8\xbd\x4d\x21\x48\x65\xae\xe3\x05\x6d\xd0\x94\xa8\x7b\x42\xd8\x66\x3d\xad\x24\x87\xf2\xc8\x39\x6a\x12\x3b\xd1\x41\x43\x0d\xc4\xf6\x18\x4d\x7a\xc7\x1c\x2e\xf7\x74\x66\xb7\x0b\xf6\xdd\xaa\x88\x02\xc3\xcb\x89\x19\x27\xc2\x36\x8c\x15\x00\x52\x69\x70\x2e\x3f\x58\x02\xd6\xc6\xda\x98\x93\x87\x77\xc9\x55\xda\x08\x93\x87\xa6\xf5\x3b\xeb\x30\x78\x92\x51\x66\x42\x92\x58\x1c\xf7\x1e\x9d\xc2\xfe\x55\x6b\xe7\xce\x6e\x7d\x2f\x9c\x7b\x10\xbc\x40\x7c\xa7\xee\x1c\x6f\x53\x7c\xfb\x2d\x22\x26\x50\x95\xc1\xae\x70\x4f\x1e\xca\xcb\x2c\xa4\x97\xf9\x78\xae\x51\x36\xae\x6b\xf4\x11\x58\x48\x1c\xbb\x6b\x66\xa4\xb9\x24\x45\x2b\xa8\x5a\x6a\x5b\x80\x3c\x44\x39\xac\x73\x9c\x95\xeb\x7e\x37\x7a\x41\x15\xd7\x45\xc4\x1b\x53\xc1\x63\xa5\x3c\x76\xe7\x71\x69\x19\xf8\x8a\xe3\x76\xf4\xc5\x4c\xaf\x88\x71\x8f\x40\xa0\x04\x40\xcb\xab\x1d\x73\x41\x17\xa3\x63\xfd\xb3\xa5\x77\xb8\xd2\x62\xb8\xfb\x8b\x09\x64\x68\x86\x7f\xf4\x94\xc8\x76\x85\xe5\x6d\x17\xde\x25\xe3\x86\x97\x5d\x34\xf7\xc4\x4d\x1d\x7c\x44\x1e\xd4\x17\x88\x6a\x07\x29\x35\x11\xf4\x8e\x56\x64\x4e\xce\x65\x81\x8d\x0a\xb3\x6b\x64\xc4\xe9\x23\xfd\x82\x9d\x29\x78\x25\xbd\xef\x09\xbb\xfc\x74\x70\xc2\xcc\x31\x65\x50\xdb\x39\x41\x5b\xb5\x8d\x4a\x93\x20\x4f\x95\x44\x0d\x16\x7a\x17\xba\x44\x78\x13\xcf\x98\x72\x5e\xd9\x62\x40\xd5\xb2\xeb\x17\x8d\x87\xb0\x82\x03\x9d\xff\xc2\xc8\xfd\x2f\xba\x17\x12\xcd\x2a\x3c\xef\xe2\x29\xfa\x62\x5b\xd5\x27\x93\x73\xf3\x1f\x9d\x68\xa8\x74\xd3\xea\x7b\xec\x1e\x2f\x65\xc7\x5a\x10\xba\xdd\xe3\x6f\x94\x57\x47\x20\x4f\xb0\x44\xbe\xed\xb8\x78\x8f\x7e\xbe\x39\x02\xe7\xfe\xd9\xe9\xe4\x97\xeb\xbf\x5d\xff\x72\xfa\xfa\xfd\xc5\x65\xf4\xcb\x2e\xb9\x22\x06\xda\x12\x04\x75\x0b\x9f\x4e\xa3\x57\xc1\x67\x64\x1d\x73\x79\x0c\xb8\x55\xa0\xcc\x65\x25\xbf\x4f\x04\xf7\xeb\x3d\x45\x70\x9c\xf7\x04\x37\xcd\xa9\xa8\xb9\x98\x08\x3e\xa3\x55\xb4\xc6\x9f\xeb\x04\xaf\x74\xc7\xc1\x7c\x4f\xed\xc7\xdd\x75\x63\x58\x1c\xd7\xb3\x49\x82\x2b\x83\x02\x57\xa0\x7e\x4d\x3c\xac\x68\x35\x9c\x7f\x20\x57\xbb\x18\x7f\x88\x76\xba\x67\x76\xce\x91\xa5\xbb\x11\xf9\xe7\x39\x5c\x03\x15\x2f\x70\x05\x55\xa2\xd3\x36\x3e\xca\x6c\x98\xac\xf6\x2b\xe0\xf4\xc0\x6e\x3b\xa3\x8a\xe3\xd2\xc4\xb0\x8c\xf0\x2f\x89\xab\x5d\xe6\xd4\x2e\xc8\x5a\x48\xea\xc8\x8d\xe1\x53\x80\xf6\x1c\x09\x49\x23\x88\xd7\x6a\x56\x9a\xe7\xa6\x64\x5b\x52\x93\xef\xfb\x39\x20\x76\x94\x3d\xba\xac\xd4\x33\xe7\x9b\xb1\x07\x8c\xce\xc0\x9f\x02\x7e\x4e\x6d\xa8\x2f\x1b\xe3\xe0\x7c\xe7\x96\x21\xa1\xbc\x6c\x26\xe3\x19\x5e\xb2\x27\xbb\xd3\xcc\x8f\xdf\x91\x26\x19\xfc\x96\xea\x19\x9c\x75\x42\xda\x6d\x1b\xa7\x83\x98\x8c\xf0\xc4\xfd\xf8\x23\x14\x32\x77\xf2\x3f\x83\x73\xca\x2f\x31\x1a\x07\x47\xab\x11\x64\xbc\x7e\xbc\x52\xed\xfd\xab\x96\x29\x5a\x13\xc7\x30\x3a\x5e\xd1\x89\x84\xf9\xf5\x81\xf4\xf5\x7c\xb2\x6c\x74\x84\x7e\x60\x70\x5e\x19\x29\xd1\x18\x31\xde\x2d\x11\x61\x33\x2e\x0a\x70\x3c\xec\x74\x83\x17\xb8\xc1\x53\x5a\xd1\x14\x61\x9e\x6b\x83\x43\x79\xcc\xa0\x3f\x80\x01\x2a\xcb\x93\x52\xf0\xc6\xdc\xc4\x8e\xfa\x2b\x3d\x2b\xb3\x4f\x31\x13\x56\x72\xb2\x9e\xa8\x5e\x47\xe6\x02\x33\xd5\xe1\xf7\xd6\x36\xce\xbf\xa3\x0e\x92\x43\x09\xc0\x65\xbe\x42\xb3\xa7\xa5\x96\x19\xe1\xb2\x25\x9f\xab\x7d\x2b\x5a\x73\xe6\x06\x17\x70\xcc\xa0\xc9\x87\xeb\x8b\xff\xb3\x72\x6e\xe2\x55\x3b\xf3\xec\x77\xc9\x0a\x2d\x0f\xb2\x6d\x9b\x2b\x5b\xe7\x7b\xd8\x38\x5f\xf7\xc6\xf1\x0e\xa2\x9d\xf3\x6d\x5f\xb5\x61\xc4\x99\xb2\xa0\x6b\xa8\x4e\xd2\x75\x26\x9e\x9a\xb2\xff\xd6\x10\xa0\x2b\x08\xd2\x5f\x61\x8a\x02\x5c\x3a\xf0\xd6\x2a\x6e\x4a\x59\x5b\xb5\x2b\xad\x14\x43\x78\xbb\xce\x70\x25\xbf\xd4\x2b\x32\xc5\xb5\xd3\x08\x5e\xbc\xe7\x2d\xcb\x43\xe0\x9d\xb0\xe3\x7c\x47\x50\x49\x18\x57\xd6\x9b\x02\xb6\x04\x9f\xc1\x6f\x91\xc9\x59\x0b\x6a\x73\xf4\xf4\x9c\x04\x35\xeb\x26\x50\xad\x3c\x7e\xc5\xe9\xe1\xc6\x7e\x69\xe5\x1a\x30\xd2\xea\x55\x5d\x0a\xdb\x2c\x01\xc9\x20\x08\x2e\x0d\x90\x06\xab\x85\x21\x8d\xaf\xb1\xbc\x25\xa5\xf9\x20\x91\x30\xd3\x93\x63\x02\x14\xce\xcd\xf4\x8d\x9e\x5c\xc7\x59\x02\x0e\x61\x03\xb2\x05\x06\xcd\x14\x53\x6c\xa7\xa7\x21\x41\xb0\xeb\x45\xf8\xc0\xaa\xe5\x15\xe7\xea\x7b\x5f\x13\x7f\xd7\x27\xe3\xaf\x1e\x0a\x1b\x3a\x31\xc1\x2f\x8d\xa1\xcb\x63\xd8\x38\x20\x17\x83\x4a\xfe\xa9\x62\x51\x2f\xc8\xbf\xab\x54\x14\x2d\x3b\x95\x6f\x04\x6f\xa3\x75\xb8\x9c\xf6\xe6\x9b\x8b\xd7\x70\xf1\xb5\x96\x53\x99\x29\xb1\x6c\x38\x65\xca\x79\xbc\x32\x06\x6d\x7e\xb0\xec\xd5\xa1\x64\x4b\x26\xaa\x45\xe8\x3d\x5e\x22\x5c\x49\xee\x5d\x6a\x6c\x53\xb8\xd5\xc5\x72\xf5\xaf\xa7\x5c\x2d\xd6\x82\xb8\xb1\xa9\x3b\xfa\x59\x6f\x6f\x14\x50\x33\x77\x80\x18\xca\xd6\x9a\x55\xc0\xea\xd2\x08\x52\x90\x92\xb0\xe2\x4b\x3d\x11\xbb\x66\x0a\x86\x53\x75\xc9\x99\x16\xaf\xbb\x3e\x57\x17\xde\x3f\x69\x57\x23\x3c\x45\xe0\xca\xb6\x41\x44\x0c\xac\xda\x20\x5c\x5b\x99\x82\x3c\xbd\x98\x41\xd4\xd3\x6c\xba\xbf\xb4\x53\x52\xe9\xc5\xa6\x55\xe5\xd0\xf6\x06\x9a\x40\x6b\x3c\x27\x08\x2b\x7f\x08\x15\x47\x84\xc9\x56\xd8\x7d\x13\x99\x55\xa5\x1f\x9f\x10\x66\x87\xf6\xc3\xc5\x6b\xf4\x12\x1d\xea\xb1\x19\xc4\xe0\x0c\xd3\x0a\x88\xba\x1d\x56\x37\xb4\x01\x66\x2e\xa7\x2c\x69\x0a\x40\x8e\x20\x2e\xcc\xd5\x32\x42\x8c\x23\xd9\x16\x8b\x20\xe3\xc0\x7b\x84\x6d\xd5\xa6\x24\x22\x92\x41\xec\xe4\xbb\x0f\x7f\x90\x24\x1a\x22\x9b\xf3\x3a\xfc\xe1\x19\xaf\xc3\xd0\x44\xd4\xc7\xbf\xbf\x60\xe6\xac\xd6\x44\xe1\x12\x2b\x6c\xaf\x49\xf7\x85\x61\xd7\x0e\x97\x65\xc2\x65\x29\xc9\x3b\xca\xda\x07\x53\x17\x65\x2f\xc2\x1e\xd7\xe7\xd0\x23\x54\xb8\x85\xe6\x41\xdc\xce\x45\x28\x32\xa4\x68\x5c\xf4\x8e\xd1\xe8\x11\xab\x1b\x6e\x09\x6c\xb8\x37\x21\x8b\x12\xb3\x92\xd7\x6b\x9d\x9c\x71\x81\x08\x2e\x16\xd1\xbd\x09\x50\x23\xc3\xc1\xb4\xcf\xbf\x77\x40\x08\xd2\x57\xb3\xf9\xf6\xdf\x41\x32\x2c\x95\x7e\xe7\x9a\xec\xd8\x0a\x4f\x49\x65\x69\x71\x0d\x57\x7a\xc6\x13\x96\xc9\x07\x2e\x78\x46\x48\xcc\x15\x37\x48\x2e\xec\x27\x42\xbf\xfe\x8b\x98\x87\xac\xe0\x8b\x1b\x8b\x2e\xe9\xe6\x01\x7c\xa0\x5f\xc2\x3c\xb4\x09\x0a\x22\x5a\x9d\x07\xad\x6d\xf6\xe7\x01\xf4\xaf\x7d\x9f\x07\x49\x8a\x82\xd7\xcd\x9e\x20\x25\x6f\x0c\x0a\x5f\xf7\xe8\x73\x51\x91\xfd\x2f\xe3\x24\xb8\xb3\xad\x76\x85\x95\xb9\x07\x5d\xc9\xab\xff\x1d\x5c\xe7\x20\xed\x56\xef\x78\xdb\x7a\x32\x22\xd3\xb7\x68\x5f\xf8\xef\x78\xe3\x0d\x30\xcc\xde\xf3\xec\x30\xcc\x80\x31\x1f\x83\x7b\xbe\x07\x89\xfc\x1a\xc0\x98\xda\x08\x80\x79\x25\x0c\x58\x80\x1a\xac\x16\x23\x9b\xb1\x7a\x47\x9c\x78\xbe\x35\x1e\xaf\x03\x90\x38\xae\x43\x4e\xdc\x74\x98\x55\xc3\xa4\x9f\x15\xbb\xb9\x09\xaf\x69\xbe\x73\xf9\xe1\x26\xe4\xd1\xc7\x6c\x69\x38\x22\x13\x58\xcd\xcc\xb3\x7f\x6a\xc5\x53\x62\x3a\x57\x57\xf1\xa9\x21\x9d\x49\xef\xdb\x8c\xe8\x7c\xbe\x53\xfa\x79\x28\xcf\x55\x8c\x67\xd6\x2e\xac\x02\x3e\xd7\xdb\xc8\xb0\x72\xc9\x47\xc0\x5e\x9d\x7b\xe4\x00\xf9\xab\xe9\x91\xb3\xb2\x0b\x47\x5a\x28\x43\x27\x08\xae\xaa\x2c\x98\x84\x4d\x5e\x10\x77\x0a\x3c\x95\xfc\xba\x37\xa0\x5f\xd3\x34\xa5\xf5\x4f\x78\x30\xbe\x6c\x4f\x44\xa5\x2d\x8a\x2f\xdc\x0f\x31\xaf\x25\x3e\x13\xa4\x34\x38\xa9\xeb\x86\x14\xfb\x72\x5b\xbc\x79\x7f\x7d\xda\xef\x19\xe8\xc2\xb6\x70\x06\x81\xdf\x23\x5c\xd6\x54\x4a\x08\xf8\x90\xe9\x82\xf3\xdb\xa4\x26\x0f\x5d\xaa\xed\x9c\xaa\x45\x3b\x3d\x2e\x78\x1d\x64\xdd\x8e\x25\x9d\xcb\x13\x2b\x51\xc6\x7a\xe2\x8e\x10\x65\x95\xcf\x54\x06\x6f\x21\x70\x81\xc5\x53\xc9\x85\x83\x47\x85\x1f\x3d\x6c\x3d\xc8\x4f\xf1\xd0\xec\xf5\xe9\x81\xea\x26\xb0\x79\x77\xae\x75\xac\xef\xaa\xb4\x6a\x83\x2b\x3b\xeb\x91\xb1\x87\x95\x3a\x6c\x14\x67\xe3\x3c\x1a\xe3\x75\xe7\x93\x64\x95\xfe\x82\xc8\x24\x04\x6c\xce\x33\xf7\xb6\xeb\x52\xc8\xa5\x47\x67\x3d\x46\xa8\x7e\xce\x3d\x84\xb7\x0f\xf4\x5f\x3a\x58\xe6\x41\xae\xe2\x32\xa7\x55\xa5\x17\x12\x5b\xe2\xb5\x00\xdd\x09\xa6\x49\x9f\xd1\xce\x70\xee\x6a\x63\x21\x1c\x05\x5c\x24\x69\x42\xc1\xf0\x9e\xe9\xcb\xc0\x72\x66\xe8\x0d\x04\x6d\x63\x54\xd3\x07\xdd\xc3\xb0\xc5\x3e\x49\x2c\x04\xfe\x37\xff\x3a\xa1\x80\x35\x02\xf0\x81\xe7\x4c\x1f\xe9\x15\x0a\x1b\x71\xc9\xd1\x4a\x5f\x5b\xfa\x17\x97\x44\x69\x43\xcd\xcc\x5b\x18\x7d\xd0\x86\x95\x68\x33\x1c\x86\x94\xc8\x30\x0a\xa3\xc3\x59\x25\x45\xe2\x79\x80\x48\xb1\xed\x93\xd6\x41\x9c\xf2\xf6\x5c\x91\x63\xb4\x21\x7d\xe7\xd9\x22\xc8\xe8\xf3\xa3\xc8\x4f\x18\xab\x42\xfb\x12\xaf\x4a\x94\xfa\x21\xd7\xef\xce\x78\x56\x42\xbe\x61\xba\x0e\x5e\x9a\xf0\x72\x8d\x86\x18\xc8\x8c\x29\xae\xe2\x0b\xb9\x5e\xcc\x42\xea\x4e\xc6\xad\x7b\xc4\x54\x10\x37\x38\xfd\x07\x52\xb4\x8a\x94\x96\x8d\xdc\xba\x94\x0d\x93\x71\xbf\x37\xd1\x3d\x70\x49\xfa\x53\x02\x00\x25\x39\xea\x4a\xb1\x59\x5b\xc7\xf3\xbb\x8e\xd0\xff\x05\x29\x29\x1d\xa1\x56\x45\xef\x08\x23\x52\x4e\xfc\x9f\xc7\x4e\x05\xe0\xa8\x0b\xcc\x9c\x6d\xa5\xcf\xb4\xf5\x70\x5b\xd6\x71\xcb\xe3\x31\x25\xa8\xc1\x02\xd7\xfa\x0e\x96\xc8\x2e\xcf\x94\xcc\xa9\x49\x0b\x0c\x2e\x45\x4f\x5b\x1e\x47\xaa\x0b\x86\x0d\x55\xa8\xa6\xf3\x85\x39\x2d\x08\xa3\x8a\xb3\x39\x72\xb8\xb1\x8a\xe3\x12\x81\x60\xe1\x02\xdd\x63\x51\x6b\x5d\x00\x17\x0b\x00\xa1\x61\x86\xca\x56\x9f\x07\x04\x24\xdb\xcb\xb1\x54\x58\x11\x4b\x86\x17\xed\x83\x73\xd3\xb4\x83\x12\xb1\x4f\x5d\xfe\x7e\xc7\x7c\x3a\xfa\xa4\x65\xf1\x82\x9c\x3f\x90\xc2\x1f\x6b\xc3\x38\x5d\xd7\x40\x18\xc8\xdd\x71\x76\x6c\x71\xc9\xca\xe0\x9e\x98\xca\x76\x84\xfb\xa2\x9b\x9c\xd9\x09\xa7\xce\xfa\x34\x3f\x6a\x7b\xb4\xbf\x08\xd2\x05\xb1\x82\xa2\x49\xc0\x8e\xcd\xc5\xad\x3e\xb9\x86\x23\x88\x0b\x5f\xad\x3f\xa9\x5b\xae\x1f\x40\x99\xcd\xb9\x42\x87\x07\x27\x07\x47\x6b\x7b\xe1\x40\x86\x69\x06\x26\x23\xba\x1b\x90\xa4\x75\x53\x2d\x61\x0c\x07\xa6\xe4\x77\x22\x81\xa1\x03\xac\xfa\xf2\x97\x72\x41\xaa\x6a\x84\xa4\x56\x7f\xb1\xab\x21\x62\x3e\xd5\x5f\x52\xa2\x2d\x8c\x9b\xec\xf0\xe0\xd7\x83\x11\x22\xaa\x38\x42\xf7\x9c\x1d\x28\x13\xf0\x40\x37\x60\x43\x26\xf5\xc9\x77\x62\xc9\x5b\xc4\x08\xb1\x67\xc7\x17\xab\x2a\xb0\x36\x7f\x5a\xa3\xa3\x1b\xd2\x0d\x52\x55\x69\xfa\xdc\xf9\x03\x55\x5a\x15\x51\x2d\xb8\x29\x5e\x1a\x4b\x81\x00\x0f\x3d\x96\x70\xd3\x9d\x2c\x08\xae\xd4\x62\xe9\xad\x97\x7f\x11\xc1\xa1\x3e\x29\xb3\xbf\x49\xd7\xa1\xf6\x20\x6d\x74\x7f\x13\x38\xb5\x82\xd1\x0a\x72\xb3\x10\x44\x2e\x78\xb5\xf3\x34\xce\xf7\xb6\xdc\x5b\xc1\x99\xd4\x32\x45\x9b\xd8\xb6\x8f\xd2\x67\xd0\x19\x9d\xc5\xd6\x57\xe0\x70\xca\x04\x29\xad\xb2\x64\x4b\x5e\x2c\xf0\x1d\x68\x0a\x5a\x9f\x23\x65\x8a\x69\x12\xda\x44\xbf\x3f\xf6\x3d\xf4\x69\x77\xaf\xf6\x04\xb6\x19\xc9\x1d\x39\x17\x4d\x9e\x5b\xfa\xcd\xd5\xe4\xac\x77\x4b\xc3\x07\x6f\xe1\x18\x9f\x2d\x48\x71\x7b\x95\x56\xcd\x75\x4f\xa0\x05\x0d\x17\xbb\x54\x0c\x74\xf3\xd9\xb4\x82\x09\x17\x0a\xb1\xb6\x9e\x12\xe1\x1c\x0a\x73\x58\x45\x22\xee\x68\x41\x8e\xd1\xa5\xf9\x9d\x0b\xce\xbb\xea\xc3\x98\xcd\x09\x7a\xa5\x0f\xc4\x1f\xbf\xfd\xf6\xf7\xdf\xa6\xcb\xe8\x74\x22\xd5\x3c\x24\xaa\x76\xe0\xfb\xa2\x76\x5d\x9b\xee\x6c\x72\x36\xdb\x9e\x82\x51\x57\xe1\xc2\xaf\xcd\x7c\xf3\xa1\x4b\xf3\x4a\x4a\x42\xd0\x86\x70\x85\x16\x1d\xe6\x3f\xd3\x8a\x4f\x4f\x6a\x2c\x15\x11\xda\xc6\xb1\xd7\xfa\x18\xe8\x86\x29\x9b\x1f\xd7\xe5\xd1\x71\x5a\x14\xdc\x99\xd5\x6b\x25\xe5\x7a\x34\x33\x8f\x94\x87\xd3\x93\xb2\x73\x17\x3c\x72\xbd\xfc\x0e\xbd\x88\xab\x26\xa6\x97\xe0\x0d\xc9\x93\x89\xf6\xf6\xe6\x66\xf2\x86\xa8\x50\x60\x33\xf8\x10\xbd\x39\xbf\xf1\xe5\xc6\xf5\xee\x32\x49\x4d\x83\xd4\x4e\x91\xda\x0b\x9e\x56\x6f\x3e\x77\xdc\xc5\x88\x12\xa8\x8d\xc6\x18\x29\xf4\x42\x8f\x7a\x95\x6d\x1d\x0e\xf1\x62\x72\x8c\xfe\xc6\x5b\x50\xb9\xf0\xb4\x5a\xa2\x7b\x6c\x18\x0d\xe2\x28\xa5\xbb\xe7\x85\xee\xc6\x0b\x2d\xb5\xf4\xae\x7e\x4b\x70\x69\x6a\x55\x82\x6b\x67\xe7\x67\x35\xe8\x53\xb6\x65\x3b\x6b\xa5\xe2\x35\x5a\xd8\xa1\x9a\x39\xec\x0a\xfa\x1b\xdd\xc8\x1c\x41\x88\xfd\x48\x24\x48\x63\xac\x25\xfb\x37\x5f\x85\x2d\xb4\x26\x85\xcc\x3c\x07\xd5\x80\x30\x2a\xc2\xa9\xb2\x8a\x3e\xb8\x30\xa9\x95\x51\xd1\x2e\xb1\xee\xc9\x52\x55\x04\x65\xaa\x2c\x82\x40\x48\xe9\x43\x99\xfc\x92\xf4\x20\x64\x9e\x1a\x25\xfa\x61\x89\xe1\x35\xf3\xe4\xad\x90\x80\x6c\xa8\xcd\x6e\x2e\x03\xc0\xd1\x1d\x4d\x65\x25\x44\xce\x99\xec\x0b\xa8\x62\xc6\x19\x2d\x4c\x38\x03\xb5\x0d\x67\x88\xb7\xaa\x69\x15\xb8\x82\x0a\x2c\xc9\xf8\x0e\x0b\xaa\x05\xaa\x6e\xbf\xfb\xc3\x96\xe9\xd3\xae\x38\x07\x3f\x89\x0f\x3a\x9b\x1e\xa7\x77\x33\x93\x36\x83\x5c\x01\x8c\xcc\x2b\xbc\xb6\x38\xe9\x3b\x1a\xed\xb5\x0f\x06\x99\x1a\xe2\x8b\x7c\x66\x1d\x56\x0b\x40\xf6\x41\x2c\xcb\x01\x43\x41\x70\x6a\xb3\x61\x0f\x12\x6f\xb2\x5a\xb1\x89\x22\x01\xe2\xed\x5c\xac\xd8\xc1\xba\x87\xeb\x73\x98\x09\x6b\xf2\xf4\x66\xb5\x1d\x96\x6b\x01\x33\x74\x71\x7a\x79\xfa\xcb\xf5\x8f\x67\xbf\x5c\x9e\xbe\x3f\x4f\x79\x75\x72\xed\xf8\x9c\xd5\xe3\xb3\xd5\x8f\x7f\x82\x0a\xf2\xee\x91\xc5\x82\xec\x0f\xcc\xe4\x1a\x7a\x13\x92\x92\x59\x1b\x20\xa8\x87\x9c\xc6\x52\x87\x56\x9c\xa6\x5a\xf0\xec\x54\xe2\x58\x54\xc1\x6b\x52\xe1\xe5\x35\x29\x38\x2b\x77\x8e\xce\xbe\xf4\xc2\x46\x9a\x0e\xf9\x32\xd0\x64\x85\x31\xcb\x15\x82\xb5\xc5\xab\x1d\x3e\x20\x84\x34\x98\xf1\x45\x47\xad\xd1\xfe\x45\xae\xd1\xde\xb8\xc7\x1b\x22\x28\x20\x82\xf6\x61\xd7\xbc\xe5\xf7\xb6\xa2\xfb\x21\x65\x6e\xe7\x1c\x05\x5e\x9a\x2e\x3c\x92\xce\xa6\xa6\x38\x7a\xf5\xd2\x35\xf2\xf5\xc5\x3d\x2c\xd2\x67\xaf\x23\x5f\xb6\x8f\x9f\x0e\x7d\x75\xb0\xa5\x7e\xf8\x2b\x05\x3f\x84\x56\xc4\xf8\xab\x63\x9f\xa7\xf6\x0a\xfa\xe3\x45\x11\x66\xa5\x83\x9c\x7d\x7d\xfb\x44\x15\xcd\x35\x2f\x6e\x33\xb9\x5d\x6f\xce\x26\xe6\x6d\x2b\x78\x16\x73\x03\x6b\x2d\x93\x23\xac\xbf\x05\x0a\xe8\xe0\x74\xdd\x1b\xa7\xeb\x81\x49\xeb\xc2\xd5\x77\x5b\x3b\x50\x0f\x06\x6b\xab\x7b\x9c\xe2\x23\xfa\x15\x50\x06\x6b\xeb\x91\x67\xb0\xb6\xb6\x78\x4c\x12\x09\x80\x41\xdf\x08\x5c\x90\xc9\x3e\x29\x6f\x4e\x80\xa0\xb2\x15\xb6\xac\x9c\xd7\xe1\xbc\xb8\x60\x84\x94\x46\x7e\xd8\xa1\x10\x34\xd7\x23\x31\xf0\x68\xf0\x21\x76\xc0\xe2\x56\x24\xa8\x79\x37\x0b\xfb\x6a\xab\xe2\xba\x20\xf3\xa6\xde\x75\xb6\x49\xe3\xc9\xd0\x5d\xd5\x10\x7b\x9c\x74\xe7\xa1\xd4\x3a\x61\xf1\xee\x74\x1c\xae\x20\x92\x74\xae\xa7\xcb\x56\x86\x36\x18\x61\x5f\x7a\xaf\xeb\x88\x6e\x75\xc6\x45\x41\xa7\xd5\x12\x2d\x70\xa5\x8d\xa5\x7b\xaa\x16\x08\xa3\x5b\x5a\x55\xf6\x35\xf1\x13\x75\x4d\x6c\xae\xa6\xd1\x68\x2a\xce\xe6\x30\x19\xd8\xe6\x64\x3c\x34\xa4\xd0\x6d\x16\x15\xc1\xac\x6d\x4c\x3f\xb5\x7e\xb4\xe4\x6d\x86\xb4\x0c\x17\xf8\xf6\xfa\x14\xa3\x96\x7e\xc4\x14\x6e\xfb\xe8\x9e\xef\x27\xd7\xa2\x0f\x6a\x41\xc4\x3d\x95\xc4\x14\x92\x8b\xee\x93\xe9\x4b\xbf\x8c\x9c\xf9\xcc\x53\xa8\xd8\xcc\x41\xbd\x2d\x20\x95\x35\xba\xad\x1f\xe1\xbd\x4e\xb4\x32\xce\xc6\x8c\xcc\x0d\x51\x83\x15\x68\x06\xd1\x69\xda\x37\xf8\x41\x9f\x6d\x20\x15\x6f\x10\xad\x6b\x52\x6a\xfb\xb8\x5a\xa2\x3b\x8a\xa3\x7b\x02\xa4\x10\xdd\x8e\x42\x87\x8c\x23\xde\xe8\xab\xab\x65\x54\x2d\x21\xa2\xb7\x68\x15\x2a\xf9\x3d\x4b\xc8\xb7\xba\xb1\x30\x07\x8c\xa6\x44\x61\xeb\x03\xd7\x87\xc0\x73\xa2\x03\xdd\xb9\x3e\x7b\x90\x24\x70\xb3\x71\x03\x78\x9a\xf4\x39\x56\x09\x52\x62\x83\x36\x6f\xd6\xf3\xe3\xdb\x8e\x4a\x1b\xaf\x4b\xe4\x61\xde\x0f\x66\x43\x7d\xa2\x79\xab\xf6\xe4\x1e\x79\xcc\x75\x64\x28\x2e\x02\x23\x91\xd6\x44\x22\xde\x66\xaa\x37\xf1\xca\x36\x97\xd3\xc2\x1b\xfc\x4e\x1b\x1f\xa9\x4a\x1a\x55\x75\x38\xc7\x16\x7b\x84\xbc\xdf\xe6\xe1\x06\xfc\x95\xd3\x76\x36\x23\x02\x6e\x3a\xe8\xf0\x1a\xec\xde\xd7\xf1\x72\x77\x58\x9c\xf3\xd6\x02\xbe\x88\x1a\x41\xed\x00\x4b\x26\xf1\x48\x93\x96\x64\x13\xca\xf4\x0a\x22\x81\x0b\x9e\xa1\xf3\x0f\xdf\xc7\x6d\xd1\x1c\x95\x05\xd2\x52\x56\x61\x9c\x1f\x58\x1c\x26\x31\xef\x7e\xd8\xc4\xfa\x62\xb7\x45\x51\x71\x69\xd3\xa3\x61\x5d\x8a\x05\x66\x8c\x38\x67\x14\x55\xe0\xc9\x9e\x12\xc2\x10\x6f\x88\x01\xe5\x45\x75\x06\x23\x49\xd9\xbc\x22\x08\x2b\x85\x8b\xc5\xb1\xee\x1d\x73\x7b\xa1\xcb\x43\xb6\x9f\x48\x25\x08\xae\xcd\x9e\x10\xa4\xc6\xd4\x34\x8f\x70\x21\xb8\x94\xa8\x6e\x2b\x45\x1b\xff\xb2\x38\x2f\x22\x01\x46\x08\x69\xd2\x52\xdd\x5a\x41\x5a\x49\x97\xf0\x3c\xea\x7a\x68\x87\xcf\xc3\x62\x45\xe0\x3a\x1b\xe9\xdf\x92\xba\x51\x4b\x9f\x98\x18\x67\x03\xcd\xa8\x90\x0a\x15\x15\x25\x4c\xd9\x91\x19\xca\x41\xe8\xc3\xc8\xa9\xd3\xcc\xce\x88\xb4\x53\xc2\x4a\x30\xbe\x1b\x25\x4d\xfe\x9d\xef\x84\x7b\x55\x49\xa5\xf5\x75\xc8\xb8\xec\x3f\xec\x2a\xd3\x98\x8d\xe3\x66\x04\xb6\x8e\x53\x70\x4c\x8f\xec\x47\x41\x17\x82\x3a\xdb\x5d\xee\x64\x9a\x5c\x81\xf2\x31\xee\x5c\x8f\x7a\x9c\x03\x9d\x6d\x01\xa9\x30\x6b\x52\x07\x36\x14\x23\x77\xfa\x1c\x90\x82\x68\x55\x14\x67\x14\x32\xcf\x2e\x63\x02\x5d\xee\x3d\x91\x12\xcf\xc9\x24\x12\x8e\x90\x43\xe0\x74\x8e\x36\xc0\x31\x74\xdb\x66\x41\x0c\xd1\x95\xe2\xc1\x27\x61\x92\x57\x68\x3c\xd6\x66\x20\x51\x3d\x70\x46\xd3\xbd\xa0\x4a\x11\xd8\xa5\x50\xc9\x09\x00\x68\xab\xe4\x9d\xfd\xe4\xb2\xa8\xf6\xec\xa4\x87\xed\x69\xf5\x83\x95\x26\x4d\x6b\x4a\xd0\x54\x50\x32\x43\x33\x0a\x79\x63\x90\x51\x35\x32\x55\x08\x30\xe0\x76\xb1\x94\x44\xc0\xb0\xad\x5b\xc0\x0d\x3f\xae\x3f\x7f\xb5\xe3\x57\xa2\x65\x05\x0e\x4a\x74\x02\xb7\x18\x9d\xa1\x39\x64\x71\x59\x23\xf8\x0f\x2f\xff\xf3\x8f\x68\xba\xd4\xfa\x1a\x18\x62\x8a\x2b\x5c\xb9\x0e\xa0\x8a\xb0\xb9\x5e\x45\x10\xb9\x71\x72\xa3\xc7\x4f\xe5\x17\xa7\xa2\x35\x55\x66\x82\x5e\x7d\x73\x3b\x4d\x3a\x7a\x20\x1f\x4f\x4a\x72\x77\x12\x6c\xa1\x71\xc5\xe7\x71\x6f\x3d\xcb\x91\x4d\x9c\xe4\x67\xdb\x70\xa2\x79\x45\x8b\xe5\xae\xce\xb4\x2b\x5e\x82\x16\xfc\xde\x38\x73\xd6\x8f\x6a\x40\xf5\xd2\xf0\xa6\xad\x60\xe2\xd0\xf7\x9e\x9f\xaf\x95\x64\x95\xfa\x28\xd5\x49\x18\x48\x3b\x08\xa2\xda\x66\x57\xee\x1c\x9b\xc2\xe8\xba\xc9\x2d\xf1\x84\x8d\xb9\xf9\x3a\x24\xd1\xde\xb8\xef\x71\x55\x4d\x71\x71\x7b\xc3\xdf\xf1\xb9\xfc\xc0\xce\x85\xe0\xa2\x3f\xe6\x0a\xeb\x3b\x7d\xd1\xb2\x5b\xa8\xa2\xdb\x91\xd1\xf2\xb9\xc5\x14\x3a\xfe\x80\x60\x74\x51\x9d\x71\xa3\x34\xf4\xa0\x4e\x25\x71\x3e\xb8\xae\x65\xf2\x40\x3b\x47\x1b\x43\x44\xf7\x39\x36\x01\x9f\xf4\xc6\x21\xc3\xa3\xfd\xcd\xcb\x3f\xfc\xc9\x08\x17\xc4\x05\xfa\xd3\x4b\x48\x39\x96\x23\x73\x01\xc0\x0d\xac\x55\xad\x1a\x57\x55\x6c\x94\x20\x14\x01\xdf\x47\x17\xa7\xde\x83\x23\xaf\x76\x76\xba\x3f\xdb\x64\xbc\xb9\xf9\x1b\xd8\x8b\x54\x49\x52\xcd\x46\x86\xed\xc5\xbb\xb5\x0e\x40\xbb\x3a\xb0\x57\x5e\x3c\x53\xd0\xee\x8d\xb6\x3b\x5e\xb5\x35\x79\x4d\xee\x68\x11\x17\xc0\xec\xad\x4a\xef\x6d\xce\x4d\x5f\x51\x09\x24\x40\xd3\x8a\x17\xb7\xa8\xb4\xbf\x0c\xa0\xf2\xab\x55\xb5\xe3\x67\x21\x36\x69\x20\x21\x59\xe0\xd1\xf1\xf7\xd2\x04\x6a\xdc\x34\x9e\xa1\x44\xe0\xfb\xde\x64\x80\x68\x02\x76\xd4\xc4\x30\x62\x72\x30\x3d\x35\x94\x3e\xb6\x23\xd2\xd7\x54\xf4\x2b\xa2\x73\x0b\xd2\x23\xf1\x5d\xef\xe3\xe3\x98\xbd\x0d\xd1\xbd\xd0\x9d\x86\x06\xfe\x6d\xf8\x16\xd6\x98\xb1\x3c\xe5\x90\xdf\x18\x46\x83\xd4\xdb\x07\x6e\x99\x78\xf7\x65\x86\x60\x68\x5a\x8e\x44\x6f\x5e\x98\x0f\x42\xd7\x58\x59\xfb\xc8\x45\xd9\x31\x6a\x88\x90\x54\x6a\xd5\xe9\x47\x38\x50\x67\x15\xa6\x75\x10\xbe\xdb\xd5\x24\xac\x23\xea\x6b\xdc\x8c\x6f\xc9\x32\x72\xc3\x25\x1e\x97\xc7\x00\xfe\x35\x6e\x22\xef\x01\x28\x5d\x9b\x7e\x0d\x44\x5e\xce\x13\x5e\xda\x7e\xc0\xf5\x60\x4a\x12\x3f\x89\x19\x9b\x51\x07\xda\xf5\x95\xf3\x63\xb7\x70\xfd\x1b\x47\x7f\xe2\xaf\x1c\xf3\xad\xaf\xe9\xa2\x81\xf1\x7d\xa9\xf7\x8c\xef\x7c\x26\x71\x9a\x84\x74\x82\xdb\xc9\xee\x8c\xfe\x75\xd4\x73\x68\x99\x93\x19\x98\xbe\xd6\xd1\x74\x6c\x8a\x02\x24\x74\x40\x1f\x45\xdb\x28\x3a\xf8\xee\x60\xa7\x77\x9c\x59\x19\xc1\x1b\x3c\x07\xcb\x74\x1f\x16\x68\xb5\x4f\x21\x07\xed\x82\xdf\x9b\xdf\x1b\x74\x49\x63\xbf\x45\xca\x8e\xc8\x7c\xc1\x93\x56\xc7\x20\x07\xdd\x8e\xb0\xd6\xb5\xe1\x2a\xbc\xc7\x4b\x84\x05\x6f\x59\x52\x1a\x34\x04\x46\x7c\xe0\xec\xfd\xca\x60\x2f\x39\x23\x2e\x48\x9f\xd2\xca\x4d\xc7\x61\x4e\xa5\xc1\x2b\x50\x86\x5e\x1d\xbf\x7a\x99\xdc\xf7\x2b\x52\xb4\x42\xd2\x3b\x72\x65\x6b\x9c\x07\x41\x95\x8b\xd9\x84\x4b\x49\xa7\x15\x24\x6e\x29\x8e\xce\x4d\x01\xf8\xf5\x81\x7a\xe0\x08\x8c\x98\x8b\x90\xad\x34\xa1\x87\x87\xe6\x04\x87\x80\x4f\xdd\x40\x02\xea\x63\xbf\x34\x49\x58\xd7\x15\x4d\xf2\xd2\x6b\x92\xe6\xde\xdb\xe9\x58\x5d\xe1\xfb\x7d\x90\x24\xef\x6d\x6c\xa0\xab\x6c\x4f\x5d\xe5\x64\xf8\xe8\x5e\x50\x65\x0f\xf7\x3d\x95\x04\x1d\x82\x57\x62\x65\x33\x26\x11\x34\x87\x3e\xac\xc4\x0a\xf8\x39\x08\x96\xc5\xea\xd1\xdd\x87\x55\x5a\x97\x27\x1d\x02\xff\xde\x3a\xb0\xba\x15\xb4\xd2\xbf\xbb\x97\x17\x98\x95\x55\x92\xcc\xf0\xb3\x52\x2d\x93\xb8\x70\x2e\x66\x28\x14\x89\x36\x7e\x19\x54\x93\x58\x60\x89\x18\x47\x35\xc1\x00\xd0\xd4\xb7\x8b\x93\x82\x3d\xae\xe6\x7c\x7d\x30\x9b\xdd\x5c\x63\xe1\x85\x60\xc5\xf5\x6b\x2a\xad\x78\xd6\x72\xc4\x5a\x20\x06\xd6\x51\xe3\x32\x25\xb5\x3b\x98\xd3\x6e\xf1\x8e\x3b\xd0\xe4\x6a\x4f\xba\x8b\x63\xa5\x2f\x4f\xd1\x8f\x91\x2d\x41\xae\x9b\x6f\x01\x27\xb8\xc1\x2d\xd7\x81\x64\x92\xa2\xd9\xe6\x59\x1d\xae\xbf\x16\xd7\xc6\xba\xb9\xc7\xbe\xc3\x09\x7d\xf8\xf4\x50\x47\x81\x2c\x74\x18\x51\x13\x52\xb7\x35\x50\x6c\xc6\x63\x1a\x93\xb7\x0b\x4a\x78\x77\xcf\x9c\x30\x22\xb0\x8d\x2b\x38\x88\xa8\x25\x5f\xc1\x92\xb3\xd4\x03\xf1\x89\x0d\xa7\xe5\xfd\xa7\xd5\x14\xf3\x67\x09\x1d\x01\x3d\xe7\x90\x8b\x95\xd3\x6e\x23\x26\x9b\x34\x96\x9c\xa3\x5e\xa1\xe6\x32\x9b\x3f\xe0\xfc\xd4\x8b\xf2\xcf\x96\xde\xe1\x8a\x18\x0e\x7b\x27\x1a\x76\xaa\x4c\xc8\x76\xba\xaf\x66\xa3\xb5\x0f\xc1\xec\xd8\x0c\x7a\x78\xd4\x82\xcc\xa4\x4f\xbc\x78\x81\x0e\x4d\x1b\x07\x86\x64\x77\xb7\x4a\xae\x5d\xab\xf3\x87\x26\xa1\x72\x6b\xbe\xf5\x3a\x7f\x68\x30\xe0\x34\x9a\xbd\x58\xb8\xff\x26\x0b\x7c\x47\x80\xd3\x98\x56\x58\x54\x00\x4a\xbf\x36\x53\x86\xa6\xad\x42\x84\xdd\x51\xc1\x59\xad\x8f\x1f\x90\xcf\x68\xc9\x24\x08\x90\xc1\x17\x44\xa2\xdf\x1e\xfe\x78\x7a\x05\x49\x4b\x47\x96\x2d\xdf\x8e\xaf\x95\xc0\x0f\xb0\x32\x86\xe0\x75\xfb\xb8\xdf\x90\x1b\xbb\xde\x2e\xa0\x9f\xb8\xb9\xd0\x63\xab\x5b\xd5\xe2\x0a\xa8\x9f\x8b\xaa\xd5\x77\xe1\xce\x76\x76\x7e\x1f\x78\x8a\x27\x2f\xa7\x0b\xdc\x12\x7f\xbf\xa6\x51\xc7\x35\xc7\x41\x3d\x0b\xf6\xeb\x1a\x0d\x79\x74\x8d\x87\x0d\x24\x94\x6b\x8a\xce\x81\xf4\xc4\x94\x61\x1e\x8e\xbd\x8b\xe3\xe0\x19\x50\x3a\xc1\x24\x7f\xbb\x9a\xa4\x6b\x1e\x46\xa8\xd1\xb2\x73\x1f\x7e\xc4\x61\xc8\x77\x0c\x22\x1c\xd1\x79\x76\x3d\xe3\x25\xd9\xbe\xaa\x50\xda\x3e\xbf\xb4\x6d\x06\x89\x4f\x94\xd9\x5b\xc7\x94\xce\x85\x82\x24\x26\xc7\x4f\x16\x0b\x52\xb6\x11\x2a\xd7\xc5\xcc\x80\x81\x46\xbd\xd7\x61\x54\x60\x56\x52\xbd\x57\x4c\x2a\x80\x79\xbd\x3e\x64\x56\xff\x77\x0d\x8a\xb0\x66\xa9\xff\xf0\x32\x82\x79\x0d\x20\xd6\x6b\xea\xf6\x28\xac\xda\x6b\x09\x13\x40\x25\x2d\x09\x9a\x92\x82\xd7\x04\xb0\xc3\x0d\x67\x46\x1f\x77\x94\x0a\x3e\x81\xc4\x44\x8e\xcd\xd0\xb6\xed\x52\xe0\x08\xb5\x17\xba\x3b\x46\xd2\x73\xed\x0b\x40\x8b\xe9\xb5\xa6\xa2\x6b\x5e\xcf\xa3\x81\x6d\xf8\x95\x41\x9c\x21\xdc\x15\xed\xd4\x23\xd8\xb6\x3f\x9f\x93\x4c\xd3\x2d\xd5\x98\xdc\x51\xa0\x1f\x38\xc1\x52\xd2\x39\x1b\x37\xbc\x1c\xeb\x66\x4f\x7e\xa3\xff\xbb\xf5\x51\x8a\x14\x00\xba\xad\x6b\x52\x81\x64\x7e\xee\xf3\xe3\xda\x35\x7b\x5a\xba\x9f\xcc\x21\x72\xd6\x19\xe4\x17\xac\x2c\xdc\x8c\x2a\xb3\x5e\x31\xcb\x74\xbd\xa1\x1d\xe3\x71\x35\xef\x3b\x90\xa8\xc2\x53\x52\xc9\x4f\x6d\x17\xc0\x38\xc4\xf4\x60\xcb\x04\x2c\x77\xed\xe0\x8d\xbb\x25\x62\x93\x44\x84\x3b\x5d\x25\x3a\x5c\x4d\xa2\x63\x86\x79\xae\x28\x7d\x3b\x45\xd2\xff\xf1\x2d\xbb\x9c\xb6\xc3\xaf\xbd\xab\x53\xef\xa1\x0f\xd7\x6b\x20\x19\x19\x00\x41\xb6\xde\xc4\xbc\xb6\xf9\xdf\xac\x0c\xb4\x10\x90\x86\x26\x80\x26\x88\x9e\x69\xc8\x92\xa6\x1d\x8f\x37\xe4\x85\x6e\x7f\x09\xd9\x11\xac\x7a\x5a\xa0\x40\xae\xb9\x03\x66\xbc\xaa\xf8\x3d\xf0\xdf\x98\x3e\x04\xee\xcf\xed\x79\x5c\xc6\x72\xa5\x02\x5d\xbf\xce\x73\xbe\x11\xd8\xf7\x8e\x72\xf7\xdf\x24\xec\x42\x05\xd0\x8b\xd7\xf1\x7f\x7c\x31\x39\x8b\xff\xe3\x1f\x24\x11\xdb\x7a\x15\xed\x9f\x0b\x22\x79\x2b\x8a\xad\xf3\x39\xed\x9f\xaf\xae\x1e\x6e\x9a\x53\x51\x73\x31\x31\x35\xc4\xf3\xbc\x54\x92\x77\x7a\xfb\xb9\x2d\x91\xe9\x9d\x50\xa4\x3e\x6b\x3f\x67\xf2\x8d\xe0\xed\xb6\x56\xdc\xc7\x5f\x76\xb6\xc0\xcc\xe5\x17\x64\x1a\xf9\x52\x16\xaa\x8a\x9d\xc6\x05\x16\xc4\xd6\x26\xd5\xca\xa5\x6c\x70\x91\x69\xf6\x7c\xd9\xd0\x8c\xaf\xcb\xb8\x1e\xb2\x6d\x9a\x8a\xd4\x84\x29\x5c\xc1\x6b\x73\x6d\xc4\xb5\xf7\xa6\x2c\x76\x77\xe5\xfc\xf4\x1f\x3f\x3f\xcd\xe9\xfc\x78\x13\x39\xce\xea\xa7\x5a\x48\x3f\xb9\x1f\x6f\xa1\xc0\x0d\x9e\xd2\x8a\x6a\xd5\xe7\x29\xde\xef\xc2\xeb\x57\x9c\xab\xef\x3d\x2c\xf0\x29\x5a\x6a\x04\xbd\xa3\x15\x99\x6f\x1d\x5a\xfd\xbc\xed\xa4\x2f\xd2\x89\x6b\xe2\x5c\x16\xb8\x8a\x49\x8d\xf9\xcc\x91\xf0\x02\xe2\x3a\x4f\xb2\x20\x69\xa2\xe7\x33\x5e\xbe\xbd\x20\x8a\x56\xe0\x63\x71\x8a\x11\x4e\x9d\x78\x54\x61\x1c\x9a\x26\xdd\x61\xf9\x58\x75\x79\x5b\xe6\x94\xcd\x51\xaf\x8e\x61\x2b\x04\x61\xaa\x5a\x06\x71\x57\xe0\xe5\x30\x8a\x37\x28\xc5\xa0\x97\x5b\xe5\x32\xc6\x9d\x77\xea\xed\x2d\x4b\xf9\x51\xe3\xa5\xd6\x46\x03\x77\xce\xac\x05\xae\x19\x30\x00\x4c\xc5\x59\x80\x5b\x45\x11\x97\x6d\x28\x34\xc4\x1b\xc2\xba\x2d\x7c\x62\xdd\xab\x63\xbd\xb5\x7b\xa5\x87\x8c\x75\x7a\x5c\x97\xbf\x69\x2a\xac\x66\x5c\xd4\x63\xe7\x45\x19\xf7\x2c\xd7\x88\x6e\x9d\x41\x1a\xbc\x87\x84\x18\xda\x27\x53\x9d\x9d\x95\x15\x09\xac\x52\xbf\x00\xac\x34\xb1\x4f\xd4\x32\x41\x0a\x3e\x67\x50\x08\xc0\xfe\x16\xec\x2d\xef\x34\xc2\x52\x5b\x84\x88\xb5\x55\xb5\x75\xdf\x22\x6d\x59\x7e\x47\xc4\x82\xe0\x2d\x4f\x61\xda\x06\xff\x60\xdb\x44\x82\x34\x82\x48\x98\x50\x13\x81\x37\x3a\xbe\xef\x14\xc2\x52\xf2\x02\x48\x8d\x4d\x8e\xa1\xa3\x1b\xc3\x60\x69\xce\xb8\x40\x18\xcd\xe9\x1d\x61\xe8\xca\xec\x86\xb3\x0a\x6f\x4f\xb3\x15\xb8\xed\x9c\x87\x1e\xb7\x8a\xfb\xfc\x53\x84\x15\xc2\x65\x4d\x81\xe4\xc1\x10\x17\x58\xaf\x66\xd8\x6a\xf0\x15\xbd\x4b\x05\x87\x6c\x44\x74\xb1\x6d\x7e\xea\x67\xbd\x17\x92\x32\x1d\x8e\xc0\x4f\x17\x58\x88\x0e\x3f\xe1\x6b\xa7\xa3\x02\x42\xef\xae\xba\x4c\xc4\xf4\x7c\x4e\x87\x2c\xbf\x86\xbe\x06\x36\x35\x6a\x7d\x5b\x0b\x7c\x67\xd0\x16\xdd\x12\x57\x5a\xcd\xd8\x56\x8d\x94\xc4\xd4\x80\xef\xf5\xcb\xe4\x1d\xba\x80\x08\xf0\xd1\x82\x67\xad\x8b\x8e\x4c\x78\x79\xdd\x90\x62\xd4\x6d\x41\xb7\xe0\x8e\xa8\xc3\x71\x88\x6d\xd9\x9f\x40\x0a\x1a\x8f\x8a\x30\x4e\xe6\x52\xef\xd6\xb0\x93\x21\xec\x85\xaa\x1e\x2b\x09\xd8\xf5\x9d\xbc\x30\x58\x89\x7f\x11\xb1\x75\x66\xd2\x06\x6f\xde\x9c\xaa\xe3\xdb\x3f\x81\x2b\x8f\xb0\x05\x66\x05\x68\xf2\xf2\xe4\x96\x34\xf2\x44\xd2\xb9\xf1\xdc\xfd\xf1\x4f\x7f\x02\x37\x9e\x5b\x9c\x93\xab\xf3\xd3\xd7\xef\xcf\x8f\xeb\xed\xd4\xb2\x9d\xfa\xf4\x1a\xac\x14\x11\xec\x3b\xf4\x3f\x87\x7f\xff\xdd\xaf\xe3\xa3\x3f\x1f\x1e\xfe\xf4\x72\xfc\x9f\x3f\xff\xee\xf0\xef\xc7\xf0\x8f\xff\x38\xfa\xf3\xd1\xaf\xee\x87\xdf\x1d\x1d\x1d\x1e\xfe\xf4\x97\xf7\x6f\x6e\x26\xe7\x3f\xd3\xa3\x5f\x7f\x62\x6d\x7d\x6b\x7e\xfa\xf5\xf0\x27\x72\xfe\xf3\x67\xbe\xe4\xe8\xe8\xcf\xbf\xdd\xb2\xa3\x91\x9c\x9e\xa9\x3c\x9e\x49\xdc\x9d\x19\xf9\x3a\x1b\x41\x48\x0d\x37\x48\x0c\x29\x41\xda\x05\x34\x59\x69\xdb\x69\x5a\xf6\x27\x7d\xaf\xb8\xee\xb1\xb9\xbe\x6a\xa4\xb9\x7e\x2a\x7e\x0f\xc4\x30\x94\x6b\xc5\x79\xfb\x80\x15\xa8\x71\x97\xe4\x8e\x88\x91\xeb\xc3\x3b\xfd\xca\x49\xe4\x1b\x43\xc4\xc4\xa6\xf7\x45\x32\xef\x45\x6e\x10\x37\x2f\xcf\xb9\x92\x37\x40\x74\x67\x47\x0b\x82\xfb\x18\xfd\x88\x05\xe5\xad\xb4\x1a\x32\xd2\x46\x38\x67\xa0\x64\x18\x22\x05\x7f\xd9\x43\xdc\xc6\x64\x5d\x6c\x2b\x64\x5c\x93\x9e\xb9\xb8\xb4\x2c\x54\x7e\xea\x4f\xfd\x25\x79\xb6\xf9\xd6\xa6\xdb\x9a\x88\x8d\x20\x77\x6e\x18\xc2\x51\x11\x11\x65\x4a\x76\xf8\x51\x19\x8b\x60\xe3\x15\xed\x14\x9a\x6d\x9d\x05\xc1\x94\x41\xa3\x6e\x8c\x70\xa1\xc5\x84\x6e\xa1\xb8\x13\x9d\x3b\x42\x31\x58\x37\xe3\xb4\x0f\x3e\x8d\x3b\x66\xf1\xc2\x31\x96\xad\xaf\x59\x9d\x8d\xe7\xdc\xff\x17\xb3\x1e\xd2\xd2\x47\xfe\x3b\x66\x58\x3f\x8d\xe8\x85\x39\x10\x70\xd5\x8f\x0b\x41\x15\x2d\x70\xf5\x22\x02\x60\xeb\x5e\x54\x54\xad\x36\xb8\xc2\x77\x09\x82\xd4\x3d\x37\x7d\xc2\x15\xba\x25\xcb\x7b\x2e\x4a\xa7\xfd\x85\x78\xdb\x6d\x43\xd9\x7a\x63\x48\xe5\x86\x03\x78\x7d\x2d\x92\x4d\xa4\x47\xd4\x44\xa0\x29\x71\xe0\xb4\x95\x2f\x2f\x8f\xd1\x29\x5b\x1a\xc5\x2b\xc2\xfe\xf7\x81\x97\xa0\x96\x2c\x68\xb7\xc6\x12\xe9\x9d\x06\xab\xf5\xb8\xbe\x61\x15\x55\x54\x6e\x33\xb2\x48\x9b\x3c\x5e\xf0\x38\xbd\xd5\x41\x8b\xb8\xb0\xac\xb7\x20\x90\x84\xe1\x08\xde\x16\x42\x6c\x5f\xf6\x2c\xb7\x85\xd6\xfa\x29\x23\x52\xbe\xd1\x1b\x76\x77\x67\x06\x83\x02\x6e\xfb\x02\x3c\xb9\x1d\xbb\x14\xd1\x92\xc9\x64\xfc\x69\x95\x80\x97\xdd\x37\xb7\x5d\xd2\x53\x07\x95\x01\x6b\xc7\x30\x58\xeb\xa6\xa9\x92\x61\xfc\xd5\xc4\x49\xf5\x37\x4e\x2f\xb7\x8d\xd2\x59\x8a\x2c\xa3\x42\xcb\x6e\x8c\x5d\x75\xd1\xfe\x28\xc1\x16\xb3\xb4\x46\xe4\x9f\x2d\xae\x00\x78\x79\x23\x5a\xb2\x6d\x61\xe2\x28\x83\x83\xa8\x7b\x2e\x6e\x4f\xbe\xfd\xd3\x4b\xb0\x39\x7c\xef\xc6\xf3\xad\xaf\xa8\xd8\x74\xf1\xa8\x44\xf1\x95\xda\xe9\xe5\x55\xb8\x91\xdd\x5a\x3a\x87\x86\x85\xd4\x9a\x82\x1e\x7a\x07\xf8\x05\x8a\x82\x2a\x44\xa5\x85\xc7\x27\x84\x8f\xbb\xee\xde\x2c\x9b\xed\x95\xa4\xf8\x5c\xee\x5e\xbb\xc9\x98\xd1\xb3\xf0\x6d\x66\x55\xa4\x59\x12\xdf\x4e\x80\x7c\x38\x90\xc1\xc7\xc0\xb0\x03\xd2\x1c\x10\x39\x70\xc3\x2c\x9b\x04\x36\xa1\x2c\x80\xc8\x48\xb8\x89\x73\xb0\x01\xe9\xc7\xb3\xca\xdc\xab\x5e\xcb\xf6\x26\x75\x6a\xc1\xca\x2f\x7d\x01\x0d\x4b\x19\xb5\xad\x7a\x62\x48\x44\xa1\xc6\xa5\x2f\x98\x66\x9d\x3f\x80\xeb\xaa\xb4\x19\x57\x1a\x32\x54\x2c\x94\x51\x98\x63\xf1\x05\x1d\x8d\x4c\x49\x10\xbe\xc3\xb4\x02\x30\x3d\xb8\x92\xb8\xec\x61\x6b\xcc\x60\x0b\xce\x64\x5b\x43\x8f\xb6\x0d\xa5\x4d\x97\x56\x9b\x88\xf1\x6f\x52\xc3\x11\x59\x35\x8b\x8f\xb3\xc9\x6f\xaf\x9a\xbd\x5e\x32\x5c\xd3\xc2\xad\xe2\xa9\x59\x36\xe0\xa1\xec\xb1\xcf\xc7\x7b\x65\x75\xf7\xeb\xba\x55\x7a\x6a\x63\x94\x93\x5d\xdc\x0c\x11\x61\x1f\xb8\x4c\x82\xa3\x10\xa6\x64\x90\x07\x5c\xa8\x6a\x09\x11\x95\xde\x97\x46\x88\x50\x48\x5b\x35\x68\xf6\x6a\x7b\xc2\x14\x2e\xec\xce\x32\xfa\x6c\xef\xed\x37\xa4\x6e\x80\x0c\xd1\x2a\xf0\xd2\xb0\x06\xab\x56\x30\xc7\x83\xba\xf2\x17\x5b\x37\x1f\x60\x1a\x23\xd2\xd0\x2e\x14\xc2\x65\x29\x11\xf6\xb5\x98\xa8\x32\x8a\x77\xcb\xe8\x3f\x5b\x52\x2d\x11\x2d\x09\x53\x1d\xee\xad\x3f\xc5\x96\x2e\xca\xca\x87\xed\xc5\xfa\x59\x77\xbe\x8d\xba\x4f\x48\xe9\x0a\x18\x59\x7f\xf2\x23\x6b\x6a\xdc\xbf\x60\x26\x68\x5d\x3d\xc2\x4c\xd8\x91\x4e\x10\x41\xee\x92\xa2\x0a\xc4\x12\x1a\xe4\xc8\x1a\x81\x30\xec\xe6\x8d\x64\x38\xa8\x4d\xbc\xaa\x58\xdd\x4a\x11\xf8\x49\xf3\x74\x94\x0b\xfa\x02\x44\xaf\x2f\xaf\x7f\x79\x77\xfa\xdf\xe7\xef\x9e\x9d\x48\xb2\xa7\x2a\x6c\xef\xd5\x30\x4f\x8e\x25\xb8\x5a\xed\xc8\x6a\x58\x7c\x45\xfe\x38\x0b\xdc\xea\x73\x32\x96\x89\x88\x39\xd4\x98\xa9\xbe\xee\x12\x02\xa2\xde\x75\x1e\x08\x6f\x3e\xdb\x30\x24\x7d\x15\x6f\x94\xbb\xbe\xa2\x58\x54\xbb\x26\xae\xb5\xdb\xbd\x13\x8e\x64\x2f\xf6\x50\x6f\x6a\x3f\xbe\x97\xdc\x57\xa3\x1a\x5d\xdf\x87\x59\xf7\x14\x90\x6c\xfb\xdb\x39\x48\x2c\x03\x56\x21\x13\x7c\xc5\x88\x91\xfb\x55\x75\xc1\xdc\xe4\xfa\x2f\x62\xf7\xd4\x94\xb7\xac\x34\xb7\x9b\x1d\x82\xf1\x7d\x87\x19\x41\x25\xa9\x88\x72\x9e\xab\x34\x05\x01\x39\x35\x1b\x88\x62\xc1\xe7\x05\xef\x36\x8a\x3b\xd4\x4b\x73\x67\xc8\x4b\x64\xfd\xc9\x08\xe1\x8a\xb3\xb9\x65\x27\x8e\x6a\xb6\x63\x0b\xf0\x51\x84\xd1\xda\x64\x43\xc9\x5d\x6c\xaf\x09\xd3\x17\xab\xd3\xa4\x6f\xd6\x70\xb9\x74\x9b\x82\x14\x5c\x94\xc6\xa7\xa3\x27\xde\xb8\x6f\x8e\x7b\x27\xee\x1a\x3e\x23\x32\x7a\x63\x6d\xd4\xbb\x61\x7e\x19\x87\xa2\x1e\xf3\xc0\x47\x06\x86\x8f\xd1\x74\xa2\x9a\x5b\x09\x95\xf7\x44\x79\xc0\x1d\x21\x78\x85\x9a\x0a\x33\x62\xab\x89\x78\x07\x6c\x96\x69\x1e\xe4\xfa\xa7\x9e\xaf\x20\x29\xd3\x9b\xf8\xbb\x70\x7c\x78\xca\x66\x53\x18\x01\x1b\x1e\x16\x3e\x43\x67\x93\x1f\x60\x9b\xbc\x27\x35\x17\xcb\xae\x93\x5e\x45\xd7\xa7\x00\x6f\x2d\xac\x37\xe7\xf4\x68\x73\xc9\x42\x04\x9d\x83\x78\x69\x8e\x9d\x45\xe9\xe8\x9e\xbc\xa3\x35\x55\x90\x6b\xb6\x6d\x5c\xa8\x68\xda\x17\x23\xf4\xa2\x86\xa1\x40\x64\x09\xbd\x58\xb4\x73\xd2\xe0\x39\x91\xe3\x17\x7d\xf1\x2c\x91\xa1\xe9\x59\xf1\xfe\x60\x41\x4c\xf0\xc3\x21\x19\x53\x1c\x07\x26\xd8\xaa\x7f\x62\x64\x3c\x17\x18\xc2\x37\x4e\x9c\x70\x53\xba\xc5\x76\x09\x07\x6e\x8b\x28\xe9\xad\x6d\x03\x01\xd3\x3c\x32\x3e\x26\x3d\xb1\xfe\xf5\x72\x81\x05\xd8\xd7\xb5\xbe\x92\xfa\xab\x83\xa3\xd4\x80\x6d\xbd\x3a\xda\xbe\x7d\x47\xee\x48\xd5\x6d\x49\xeb\x9f\xd9\xb2\xe1\xed\x6b\x09\x46\x1b\xaa\xf1\x76\x63\x11\xe1\xe2\x44\x59\xd4\x4d\xbb\x8f\xb5\x98\xea\x94\x4b\xa9\x8f\xba\x3f\xdb\xa3\x5e\x12\x74\x98\xde\x64\xfe\x38\xa6\xb4\x12\x78\x1f\xf4\xe1\xe9\x78\xdf\x43\x1e\xfe\xa8\x1b\x2e\x38\x49\x25\x69\x08\x2b\x5d\x51\xe6\x88\x77\x3d\x91\x97\x10\x7d\xc4\x53\xa8\xa5\x5d\x81\x19\xc8\x19\x87\xf1\xd3\x67\xbb\x3b\x7d\xdb\x5f\xa1\x29\xcc\xc4\xd1\xbc\xc4\xbd\x4d\xf9\xa8\x8b\x50\x6b\x21\x84\x29\xb1\xb4\xb8\xcf\x6b\xbd\xb1\xfa\xd2\x35\x5e\x65\x88\x26\x24\x4e\xa3\x23\x8e\xa6\x12\x4e\x25\x12\x4e\xa1\xd1\xcc\x56\xe3\xf3\x23\x4c\xee\xbd\xc5\x06\x4b\x60\x5d\x8c\xc4\xd6\xc6\x41\x16\x85\x3c\xe1\x25\xba\x07\x30\x41\x9f\x66\xc1\x94\x11\xbe\xd0\xdd\xba\xed\xca\xa3\xb9\x7b\xd4\xc5\x40\xa2\x9b\xb6\x7e\xb4\x64\x26\xed\x0c\x4c\x53\x16\xbd\xbc\xeb\x8d\x60\xd5\xb3\x9e\xb7\xa2\x58\x70\x49\x98\xc5\xc0\x0b\xf7\x05\xd6\x8f\x3b\x97\xe6\x1e\x4c\xaa\x3b\x6d\xe9\x3e\xc8\x1d\x11\x4b\x05\x01\x50\x4f\x7f\x6c\xfd\x9e\x72\x25\xfa\x15\x60\x9c\xa3\x1b\x06\x99\x6d\x93\x02\x00\xdf\x32\x73\x3e\x57\x18\xe9\x4e\x76\x44\x5e\x7e\xa6\x48\xd1\x96\x8f\x96\x09\x0a\x2c\xed\x44\x45\xb2\x16\x46\xc7\xa9\x0f\xcc\x94\xf8\x01\x0a\x0a\x77\xa6\x51\xc1\xeb\xa6\x55\x41\x6c\xd6\xc5\x6e\x63\x56\x3f\x89\xe2\xa2\xc6\x0c\xcf\xc9\xd8\x77\x64\x1c\xe4\x21\x45\xaa\x10\x91\x17\x6a\x0e\x88\x3c\xfa\x92\x60\xf2\x28\x1e\x2a\x8f\x32\xc0\xe5\x51\x2a\x64\x1e\xe5\x85\xcd\xa3\xee\x56\xda\xc9\xd1\xf5\x9e\x82\x95\xc3\x6b\xab\x81\x7f\xec\xf0\x3a\x4d\x30\xe6\xf4\x02\xd5\xb0\x6d\x99\x4a\xc4\x6b\xaa\x1c\x2c\x2f\xd0\x13\x80\x6b\x34\x24\x37\xb5\x82\x06\x40\x91\xf8\xff\x67\xef\x6f\xb8\xdb\xb8\xad\x7d\x71\xf8\xab\x60\x29\x77\x2d\x4b\x29\x49\xdb\x49\xfa\x72\x7c\xfb\xb4\x4b\x91\xe4\x56\x37\xb1\xad\x63\x29\xc9\xea\xd3\xf4\x9e\x80\x33\x20\x89\xa3\x19\x60\x02\x60\x24\xb3\xb7\xe7\xbb\xff\x17\xf6\x06\x30\x18\x92\x92\x2d\x0c\x24\x52\xae\xa6\x6b\x35\x16\x39\x1c\xec\x01\x36\x36\xf6\xeb\x6f\xc3\xf9\xc9\x3e\x34\x15\x2f\xb8\x89\x90\x9f\xcb\x14\x73\x2b\x02\xaf\x95\xd6\x04\xe7\xb5\xaf\x8e\x87\xae\x91\xde\xbe\x73\x29\xe9\x81\xf6\x02\x91\xd5\xd8\x87\x82\x31\xef\x69\x79\x92\x66\x4f\xd2\xec\x13\xaf\xcf\x4d\x9a\xb9\x2e\xce\x0f\x5f\x01\xf4\x1e\x07\x26\x4d\x57\xf1\xb3\xd6\x61\x36\xa0\xb8\x26\x44\xf3\x5d\xad\xcf\x21\xf4\xa0\x1f\x91\x77\xe2\x35\xf6\x06\x1d\x61\xf9\xcf\x84\x9c\x0a\xa2\x65\xed\xfa\x98\x7e\x30\x7a\x84\x1a\x2f\x25\xba\x9d\x6a\xe6\xf4\x5d\xa9\x99\x2f\x14\x76\xd5\xd6\x0d\x53\x28\xfa\x12\x4b\x85\xac\xb4\x42\xa2\xee\x19\x22\xec\x5a\xaa\xcb\x4a\xd2\x52\x3f\x6f\x24\xfe\xdf\x38\x40\xec\x3d\xff\xc2\xad\xfb\xb8\xb9\x3b\x84\x48\x6a\xba\x79\x54\x83\xf9\xd0\x45\x1a\xef\x57\xc6\xee\x65\xa0\xf6\x2a\x58\xfb\x31\x63\x40\x72\xc3\x24\x6a\x32\x57\xb2\x6d\x7c\x34\xb0\x43\x0b\xb6\xa6\xf8\x5d\xb3\x86\xa4\x9d\x8c\x28\x76\x8b\xe5\x06\x7d\x42\x82\x39\x0f\x9e\x07\xd6\xd9\x9d\x60\x51\x6a\x3d\xda\x88\xd9\xae\x5a\x91\x50\xea\x80\x75\xaf\x52\x75\xc0\x92\x8c\xec\x55\x6c\x4e\x8b\xe5\x5e\x9f\xaa\x0d\xf8\xa9\xce\x03\x6e\x8f\x5f\x7b\xac\x23\x75\xbe\x21\xed\x5d\x3d\xf8\xd0\xe5\x16\x8e\x6e\x4c\xfe\xc5\x3c\x32\xed\x5e\xdf\x97\x5a\x38\x56\x72\x25\xff\x77\x76\x4e\x24\x57\xe7\xfe\xf6\x0f\xbf\x1d\x7b\xd0\x03\x78\xcd\x87\xd8\x37\x3d\x88\xce\xed\x55\x69\xf4\xb8\x6d\xca\x48\xc9\x75\x03\x9c\x09\xae\xee\xae\xd4\x21\x90\x9b\xaf\xe4\x66\xf3\x90\x9e\x19\x12\x07\x1c\xb6\x1a\x5c\xcc\x1f\xbc\x6a\xe6\xbc\x3f\xb4\xdb\x77\xb2\xa1\xbf\xb6\x5d\x1f\x5a\x77\x58\xa1\xb2\x1d\x2d\xa0\x9b\x44\x68\xcc\x1a\x61\xc3\x26\x1e\xae\x96\x35\xd6\xa9\x01\xbd\xba\x93\x20\x61\xe9\xb4\xa1\x4b\x2f\x51\xfb\x2f\x51\x42\xf5\x0b\xf3\x9d\xb7\xee\x48\x45\x87\x68\x1b\x44\xa0\xd5\x42\xeb\x06\x0e\x59\xff\x6d\x72\x6a\xeb\xea\x7c\xaf\x06\x32\xa8\xc1\x7a\x12\xc8\x83\x70\xb0\x14\xd8\x7d\x05\xd2\x44\x6a\x79\x05\x98\xa0\x56\xa7\x98\x19\xa6\xae\xa9\x2a\xef\x78\xe6\x6f\xb5\xaa\xa6\xff\xfa\xc0\x6d\x1d\x16\x08\x1c\x9c\x67\x88\x81\x3a\x6f\xa9\x2a\xa1\x8c\xaa\xe3\x89\xa7\x44\xda\x4d\xd7\xd6\x13\x69\x5d\xb1\x74\x24\x00\xee\x1e\x4a\xf6\xd7\x09\xb5\x7a\x50\xff\x49\x18\x2b\x81\xb2\xb6\x95\x74\x2c\x28\x8c\x7e\x4a\x97\xb9\x93\x8b\x78\x05\x1f\xec\x41\xcf\x9a\xfe\xd0\x64\x21\xab\x12\x94\xd5\x71\xc5\xae\x58\x15\x48\xb3\x02\x57\xf1\x69\x6b\x1c\xce\x52\x21\xeb\xda\x95\xbc\xbb\xe6\xf3\x58\x1e\x7f\x67\x63\x07\x61\x01\x69\xf5\xaa\x07\xb1\x00\xa7\xcb\xc4\x92\xc7\x80\x33\xe2\xb7\x04\x13\xd2\x2b\x05\xee\x18\x94\x33\xc2\x2c\x9b\x26\xb0\xdf\x16\x32\x26\x56\x40\x17\xb7\xe1\x5c\x5c\x21\xc1\xc7\xbb\x0e\xdd\xc7\x44\x22\x5a\xa3\x5d\x8b\x56\xb3\xb5\xd6\x52\x1d\x9c\x56\x62\xfe\xfd\x5b\x09\xb5\xe9\xd0\x28\x3c\x04\x3c\x8b\xd0\x0c\xc1\x1e\xbb\x50\xb8\x0b\xb1\x56\xa9\x27\xc2\xa5\x10\x27\xc3\xaa\x0d\x72\x9e\x0d\x89\xac\xa3\x13\xe8\xce\x3f\x1c\x16\x55\xaf\x64\x41\x2b\x40\x20\x4e\x65\x31\x92\x2d\xa8\xba\x4a\x4b\x84\x9d\x40\xed\x6b\xc2\x67\x95\xa4\xa5\x47\x56\x67\xbe\x89\x02\x35\x2b\xf6\x77\x6a\x2c\x12\xb1\x4b\x70\x24\x5f\xf2\xd1\x28\x16\x41\x58\xf5\x06\x96\xd0\xb7\x24\x75\xb0\x37\xfd\x34\x02\xf7\x66\x31\xb4\xa0\x23\x65\xd0\x00\x1e\x77\x6c\x06\xe2\x38\x74\xc1\xb4\xb2\x92\x6b\xb2\xf7\xbd\x9f\xf4\xbd\x21\xbd\xb1\x93\x1d\x97\x26\xb1\x96\x38\x17\xcf\xe1\x3c\x04\x3e\x43\xff\xc5\x25\xb7\x33\x35\xeb\x84\x9c\x67\x89\x00\x45\xd7\x34\x15\x4f\xe7\xb2\x1f\x69\xc5\xcb\x20\x39\xa9\x1a\xd0\x1c\x36\x2c\x1f\x19\x47\x9b\xa4\x51\x6c\xbc\xbe\x51\xd2\x53\x0e\x9c\xc7\xc7\x3b\x2c\xc7\x1f\xed\xaa\x33\x90\x71\x09\xf9\x41\xc0\x9e\x13\xac\xb4\xda\x96\xec\x96\x82\x89\x99\x54\xe8\x8c\x79\x70\x86\x75\xb8\xda\xdb\x38\x86\x0f\x03\x7e\x4b\x0c\xfa\x8c\x2e\x48\x97\x67\x08\x3c\x89\x1e\xcc\xbe\xdb\xbc\x4b\x67\xbd\xfb\xb8\xd0\x42\xc0\x35\x44\xb3\x33\xe7\xe2\xfd\xc0\x00\xdf\xb9\x8e\x2e\xc6\x57\x20\x20\x8a\xe0\xb5\x1d\x74\xc1\x1b\x14\x62\xd4\xb8\x9f\xa7\x08\x07\x28\x2d\xb1\x0f\x0c\x3d\x2b\x1b\x59\xbe\x4a\xc9\x47\x7c\x89\x95\x29\xf2\x1a\xb0\x2a\xff\x72\x7a\x1c\xf6\xb2\x7d\xea\xeb\xf3\x14\xb4\x6f\x7b\x7d\x85\xcf\xd5\xcc\xcc\x79\x49\xa6\xae\xa9\x28\x33\x64\x5f\xb0\x6b\x62\xf7\x80\x76\x95\x3f\x01\xf3\xc3\xcd\xa6\x1f\x3f\xbc\x9e\x23\xe2\x20\x81\x8a\xaf\x5d\xdd\x0d\x53\x1e\x62\x6a\xca\x5d\x8b\xf4\x77\xef\x9f\x79\xa0\xce\xeb\xb1\xba\x1e\x8f\xc7\xe3\x94\xf9\xf3\x3e\xe1\x51\x6f\xe5\x83\x97\xa5\x96\x25\x9f\x2d\x57\xd6\xdf\x9e\x37\x1d\x49\xa0\x7b\x53\xb1\x74\xef\xff\x88\x74\xc1\xd4\xc8\x5e\x84\x5e\xf5\xbb\x6f\xd2\x44\x4d\x0c\xe1\xbf\x0d\xb1\xb3\x81\x8c\x00\x14\x31\x65\x0b\x7a\xc5\xad\x09\x30\xc3\xfd\x6f\x77\xd6\x4d\xab\xef\x35\x9a\x64\x59\xe0\x40\x23\x10\x50\x8a\x7d\x68\xa4\x86\x1d\x05\x69\x89\x67\x12\x0a\xcf\xfa\x88\xb1\xe8\x67\x6b\x1a\x68\xb5\x98\x30\x60\x4f\xe8\xb9\x18\x0f\xd6\x3f\xf8\x59\x21\x53\x6a\x89\x08\xaf\xbc\xbf\xc2\xf0\x49\xfd\x11\x4f\xdd\xae\x02\x97\x89\x90\x84\xcd\x66\xac\x80\x46\x46\xac\x59\xb0\x9a\x29\x5a\xf5\x49\xd3\x6d\xb1\x20\x54\xbf\xb2\x16\xb8\xb2\x1b\x14\x95\xd5\x9a\xde\xb9\xcb\x00\x71\x40\x1d\x60\x53\x97\x3c\x29\xc5\x13\x55\x9b\x08\xe8\x7a\xef\x9d\x78\x2f\xa5\x79\xc3\x35\x68\xba\xae\x02\x05\xe3\x9d\x7b\x93\x0d\x3e\x7e\xff\x5d\xc8\x6a\x7d\x3c\x82\x22\x49\xa9\xe8\x30\xde\xb7\xb1\xc1\xed\xb1\x61\x4f\xc3\x10\x81\x74\x29\xcc\x8d\xe4\xc2\xac\x35\x23\xb2\x7a\x5d\x91\x80\xb4\x65\xaf\x1f\x34\xd3\x21\x4e\xe7\xf5\xc4\x34\x30\x4c\xbc\xde\xd0\x65\x28\x3f\x75\xc8\xca\x2b\x4e\x2a\x8c\xa3\xba\xef\xa6\xd2\x2c\xd6\xbc\x58\x69\x9d\xac\xcf\x64\xb9\xf2\xa0\x51\x07\x9a\xd8\x07\xf9\x5a\x1d\xd0\x40\x7a\xb6\x35\x29\x59\xc9\xc4\x9d\xfb\x9f\x90\x00\xce\x41\xcd\xb0\x5c\xec\x7f\xa3\xb3\x14\x76\xd8\x5b\x09\x72\x68\x1b\x7b\xec\x34\x82\x80\x84\xf9\x8e\x77\x14\x78\x19\xec\xd6\xa3\x00\x98\x22\xc5\x58\x49\x09\x11\xee\xa4\x65\x3d\x9d\xb9\x9e\xff\x6b\x6a\xda\x95\x95\xcc\xbe\xb1\x3a\x34\x22\x25\xb4\x0b\x9c\x1b\x49\x98\xd0\xad\x72\x3c\x71\x67\x20\x54\x7b\x95\x92\x61\xc8\xcf\xbd\xce\x0f\xa7\xc7\xe4\x05\xd9\x87\x56\xc1\x20\xf6\x67\x94\x57\x01\xe3\x69\xb5\x35\x2a\x34\xb8\xb7\x8f\x48\x7c\xed\x90\xb2\x30\xa3\x95\x66\x23\x7b\x76\xc2\xd1\xe8\xde\xdb\xea\x20\x5e\xe5\x6e\x98\x02\x7c\xca\xb4\xa4\xe5\xcf\x41\xec\xa4\x6e\xdf\xa9\x94\x15\xbb\x73\x12\x47\xe8\x91\xb2\xad\x13\xee\x87\x07\x39\xe1\xe2\xb8\x84\xdd\xbf\xfd\x25\xc1\x2d\x57\x33\x43\x4b\x6a\xa8\x3b\xf9\xfc\x0d\xff\xb6\x8c\xf8\x74\xfe\x7d\xda\x35\xe4\xfc\x73\x7d\xb5\xb6\x6d\x4b\x6e\x20\x23\xd8\x92\x0b\xe7\x52\x8a\x5b\xd8\x9f\x9f\xc0\xfd\xd8\x67\x15\xb2\x0d\xd0\xeb\xea\x3d\x5c\x68\x05\xe9\xa8\xb8\x36\x11\x2f\x0c\x8c\xae\x05\xd5\x7d\x73\x4b\xc8\xd2\x9f\xd8\xa5\x8c\xcb\xdf\x03\x61\x96\x0f\x65\x20\x23\x9c\x7e\x2b\xb7\xe5\xb1\xa2\xa0\x7f\x15\x86\x40\x9d\x09\xf5\xde\xee\x2c\xcd\xaf\xd8\x5e\x52\x81\x6e\xf4\x7b\x52\x33\x2a\x34\x51\x0c\x66\x1a\xac\xf8\x19\xcc\x30\xba\xaf\x24\xa2\xe2\x9e\xc9\x32\xbc\xeb\x6a\x94\xcf\xab\x11\x29\xef\x8a\xf0\x5a\x98\x4a\xab\x2b\x79\x0d\xfb\xbb\xa2\x6a\xee\x9d\x05\x7a\x44\xa6\xad\x41\xbf\xa3\x26\x35\xff\x00\x0d\x00\x42\x77\x32\x98\x8d\x56\x44\x1f\x9c\xc9\x52\x87\xe2\xfe\x00\xf4\xe3\x8c\x66\x19\x63\xff\x80\x53\x3c\x65\xf2\x7a\xcb\x01\xf5\x15\xe0\x18\x25\xac\xe2\x73\xe8\x61\x1d\xcf\x16\x78\xdf\x7e\x19\x4b\x9f\x58\xfc\x0b\x71\x15\x19\xf0\xfb\xe4\x39\x0b\x88\x02\x6e\x75\xb4\x0f\x84\x51\x07\xae\x19\xbf\xb6\x0b\xcf\x86\x8f\x7b\x9b\x2b\x71\xcb\xb8\x04\xaf\x46\x6a\xec\xdb\x6d\x35\xbb\x8d\x83\x23\xc0\xc2\xc7\x96\x2c\x85\x8a\x13\x3f\xdf\x7e\xae\x29\x24\x72\x8e\x8d\x62\x8c\xbc\xe6\x53\xc5\xac\xb8\x11\xac\x82\x21\xf9\xf9\xd1\xf9\x69\xc7\x55\xf6\x23\x3b\x77\xd1\x87\x09\x24\x5c\x43\x4a\xb8\x7d\x46\xa9\xf8\x15\x53\xc4\x9e\x21\x2d\x54\x7f\xfb\x49\xf6\x12\x61\xba\x0c\xcd\x01\x5c\x3f\x47\xf8\x1e\x98\x09\xf3\xf4\x9d\x8f\x98\xa7\x94\x11\x1c\x9d\x9f\x1e\x23\x05\x5c\x68\x43\xad\x96\x47\xde\x01\x0c\x65\x3c\x39\x14\xbc\x2b\x44\xb1\x31\x2c\x7d\xc5\x4a\xa2\xbc\x24\xa8\xee\xdc\xed\x82\xac\x6d\x06\xd4\x01\x22\x4c\x57\xf0\xc3\xc1\x51\xea\xa6\x03\x6e\xef\x21\x0c\x44\x3d\x18\x92\xb6\xe3\xaa\x13\x09\x56\xf6\x53\x46\x1b\xad\x10\x3f\xc0\xe5\x74\x77\x1a\x4a\xae\x6f\x23\x02\xe4\xe0\x7b\x46\xcb\x9f\x14\x37\xec\x9d\x28\x58\x24\x53\x12\x3d\x7b\xb1\xd0\xf7\xf5\x15\x32\x66\x91\xa1\x58\x0f\x14\x8e\x4f\x84\x91\x89\x64\x12\x38\x33\xfb\xe7\x39\xc4\x12\x1c\x4c\xaa\xc3\x46\x58\x51\x15\xa5\xda\xa4\x40\xba\xa3\x29\xc6\x8b\x48\x09\xa7\xf5\x44\x66\x4f\x32\x3a\x99\xe5\xf2\x09\x7a\x5f\x6d\xd0\x60\xe2\xde\x51\xda\xb5\xdb\xc6\xc4\xd0\x39\x33\x44\x9b\xb6\xb8\xb4\x6f\x11\x20\x49\x8f\x3c\x46\x16\xa4\xb9\x3e\x22\xc5\x35\xc9\xb7\xd9\xef\xe8\xba\x2d\xeb\xcf\x33\x5e\xe1\x6d\x10\x19\xc5\xf0\xd7\xe3\xa5\xe9\xfe\x87\x7e\xa2\xfa\x9a\x76\xe4\x11\xf3\x10\x42\x9b\x50\xa2\xa8\x28\x65\xbd\x46\x9f\xdd\x99\x8c\x16\x8b\x04\x3a\x3a\x93\xe8\xae\xf6\x61\x4a\x48\xe6\x06\x8b\x72\x80\x7d\x98\x12\x24\x5e\xb1\x28\x1f\xb7\x7d\x98\x98\x77\x36\x30\x09\x8c\x5d\xb1\x2a\x43\x16\x0e\x40\x59\xd9\x49\x08\xa2\x1e\x3e\x40\x81\xbf\x9a\xa4\xd0\xdb\x22\x5b\xc9\x3d\x52\x32\x4b\xbe\xdb\x7b\x89\x69\x91\x34\xbc\xb6\x7d\xf0\xce\xbe\x75\xa6\x8c\xab\x0b\x97\x40\xd6\xbd\x35\xa4\x52\xed\xea\x5b\xb7\x49\xde\x47\xb2\xfa\xd6\x3f\x68\xec\x18\xd6\xbd\x35\x38\xfa\x76\xf1\xad\xfb\xbd\xce\xb7\x75\xf6\x3a\x2a\x9e\xd2\x84\x7b\xd7\x53\x9a\xf0\x7d\xa7\x09\x47\x60\x7e\x14\xfc\x58\xbd\xc4\xdd\xc7\x9a\x2c\x0c\x00\xf4\x76\x16\x19\x42\xf3\x36\xd4\x2c\x46\xe0\xb8\x33\xfc\xca\x43\xfe\x92\x4b\x0c\xfb\x3d\xeb\xb5\xde\xf5\x1b\xb1\xcb\xa3\x46\xa8\xbf\x4c\xb9\xc5\x9b\xf2\x89\xf1\x9e\xb7\xef\x2e\x62\xa0\x3f\xea\xbb\xbe\x25\xf7\xec\xd9\x95\x13\xf0\x7e\x72\x8e\x57\xd7\xe9\xfe\x52\x8e\x13\x9f\xb4\x39\xe3\xf8\x21\xf6\xdb\xa7\x65\x21\xaf\xe6\x20\x67\x1a\x7c\x35\x21\x79\xfd\xe9\x83\x56\x68\xc8\x41\x1f\x25\x04\x43\x1e\xd1\x56\x0c\xed\xc3\x50\x70\x0c\x39\xc9\xbd\x68\x0d\x34\x84\xe4\x0a\xba\x3f\x42\x74\x15\x22\xb1\x5c\x60\x29\x56\x0c\x15\x94\x62\x86\x7a\xc0\x9a\x35\x95\x0b\x3b\x6d\xd6\x54\x2d\x21\xc5\x09\x32\x10\x5c\xe6\xde\x7e\x5c\x09\x7d\x00\x76\x70\x8a\x20\x59\x30\x72\xbe\x36\xfb\xbe\x63\xb1\x73\xf7\xc5\xde\xc6\x34\x98\xd6\xf5\x05\xf6\x43\x38\x18\x58\xc3\x54\xed\x7a\x77\x31\xe3\x7a\xb5\x6a\xe6\x7c\xe1\x61\x7e\xd2\x12\xb0\x25\xba\x93\x19\x2d\x7d\xfe\x2e\xe6\x9c\xd7\xac\x9e\x62\xda\xa3\x5e\xef\xb4\x1e\x92\x3a\x6a\x3a\x4f\x92\xf1\xab\xfe\x14\x21\x23\x5c\xa2\xc0\x61\x8a\xd9\x4f\x71\x62\x65\x3b\x5f\xac\x93\x96\x92\xc5\x72\xeb\xcb\x40\xa4\x4a\x9b\x1e\xe8\x05\xe2\xf0\x42\xdc\x2c\x15\x89\xf7\xf6\x25\x7e\x44\x0a\xf1\x03\xa3\xf0\x0e\x85\x5e\x1a\x12\x56\xcf\xd8\x04\x90\xdc\xc2\x02\xdb\x10\xe6\xc7\x51\x58\x7e\xbd\xde\x44\xfb\xac\x19\x94\xe9\x6b\xb9\x33\x2e\xd2\x54\xd0\xaa\x80\xde\xd6\x49\xfc\xbb\x21\x04\xce\xd4\x9c\xb9\xe0\xf7\xb9\x51\xbc\x30\x9b\xf3\x87\xdd\x7d\x03\x62\x39\xfb\x87\x55\xb3\xa0\x07\xe4\x07\xed\x23\xc8\xb8\x7d\x42\xc4\xf5\x93\x04\x3f\xc4\x79\xd0\xd7\xec\x0e\x80\xc4\xa8\xcd\x66\x35\x07\x2c\x8e\x00\x71\xd7\xe5\xa6\x83\xf7\x93\x07\x20\xf9\x47\x24\x3b\xd2\xb4\x9f\xa5\x2e\x4c\xb5\x15\x95\xe7\x1c\x87\x86\x52\x78\x42\x83\xfe\x13\x3a\x0a\x95\x9e\xb8\x2e\x9e\x17\x9a\x3e\x40\xf0\x09\x12\x03\x5a\x11\xda\x2a\xa4\x1c\x1c\x6e\x84\xfd\x9b\x52\x32\x0e\x48\xcd\xe7\x0b\x13\x72\x2f\x2b\xda\x8a\x62\xf1\x88\xb8\x62\x9b\xb8\xee\xb8\xc2\x21\x4b\x89\x92\x4b\x2b\xed\x2b\xd2\x50\x45\x6b\xab\x76\xb9\xfd\xad\x59\x52\xe4\xe2\x51\xa2\xb8\xdb\x9f\x82\x58\x4e\xf8\xed\xce\x20\xc0\xbf\x0d\xcd\xc5\x1c\x49\x4b\xc8\x5e\x49\x5a\x46\x92\x03\xd5\x1c\x66\x34\xcb\xab\xfd\x08\x41\xb6\x5d\x79\xb7\xac\x2a\x92\x93\x24\x5b\x0e\x27\xff\x84\x54\x78\x9d\xa3\x08\x88\x26\xf7\x1f\x52\xf6\xfe\x1b\x07\x84\x49\xfb\xf9\x92\x2b\x91\xd8\x18\x99\x2f\x91\x80\x8f\xa4\x0e\x6f\x37\x23\x3d\xfd\x44\xaa\xd2\xf2\x32\xb7\x18\xa1\x9d\xd7\x9a\x1e\x29\x06\xcd\x4e\x69\x75\xde\xb0\x62\x9b\x0e\xcc\xbf\xbc\x39\x3f\xec\x53\x03\xe7\xbc\x6b\x4b\xc1\xe0\x7b\x42\x4b\x5f\xfa\x79\xcd\xa6\x0b\x29\x2f\x13\x07\xdb\x8f\x10\x19\x17\xed\x74\x52\xc8\x3a\x42\x39\x1d\x6b\x3e\xd7\xcf\x9d\x60\x18\xdb\x69\x3a\x20\x5c\x54\x70\x5c\x7b\x7d\x88\x09\xe3\x4d\x96\x01\x2f\x4c\x8a\xf0\xc6\xc0\x50\x0e\x7a\xd3\xe9\x5d\xeb\x53\xf2\x76\x10\xca\xd5\xe0\x23\x65\x9d\x63\x52\xbb\x7d\xae\x70\xcd\x0d\x6f\xba\xd2\xb5\x33\xb0\xc1\xea\xac\x61\x00\x70\x2b\x53\xe2\x62\x46\xd6\x44\xdd\xe6\xee\xf9\x6b\x47\x46\xec\xbb\xe3\xb3\x58\x9e\x47\x7e\xe5\x50\x1c\xf6\xcc\xfe\x92\xb8\x9f\x3e\x1b\xde\x8a\xe5\xb0\xaa\x50\x4f\x38\x93\xe5\x33\x1d\x07\x63\x3b\xd0\xb6\x90\xfb\x86\x89\xf1\xfc\x8a\xf5\xe8\x4f\x55\x04\xed\xb5\xcf\x43\x0a\x71\xd4\xff\xdf\x41\xc5\xd5\xfc\x83\xa5\x2d\x1e\x2b\xa2\x0f\xfb\x5e\x8a\xf1\xe6\xaf\x93\xea\xae\x09\x14\xea\x05\x2f\xe3\xc8\xae\x47\xfc\x78\xcb\xdf\xaa\x65\xd8\x6b\xdd\x7e\xf1\x96\x99\x6b\xa9\x2e\x71\xae\xe2\x3c\x2b\x23\xe1\xce\x21\x2c\x9e\x56\x66\x45\xe2\x52\xab\x4c\xbb\x3d\x99\xcb\xa1\xec\xca\xd1\x61\xcf\x7f\xaf\x35\xdd\x7f\x19\x16\x59\x29\xc5\xb2\x0f\x7e\x80\x72\x2c\xb2\xb9\x24\x6b\x5d\x45\x9a\xdc\x4f\x51\x16\xd9\x76\x85\x20\x19\x80\xa1\xcb\xd4\x15\x2f\xd8\x61\x51\x40\x2a\xfc\x9d\x86\x1e\xc6\xae\xc7\xcc\xbe\x32\x35\xac\x3c\xef\xd1\x80\x49\x3e\x65\xf8\x96\xd0\x8a\x53\x68\xc0\x49\xfa\x37\x5a\xfe\xbe\x3b\xf0\xbb\x7f\x2c\x64\x14\xad\xbc\xbe\xdb\x31\x10\x73\x79\x18\x04\xe3\xb5\xe1\x1f\x16\x58\x72\xfd\xe5\xd7\x75\x89\x95\xd5\xf1\xe5\x2c\x2b\xb8\xe9\x77\x1c\xfa\xd3\xf0\xf3\x0d\xd5\x97\x5d\xbb\x0e\x36\x6e\x64\xd9\x75\xe7\x88\x3e\x77\xd3\x38\xa6\x48\xe3\xdd\xda\x76\x24\x2f\x9d\xb1\x67\x91\x9d\xa9\x43\xfd\xfa\x3f\x8f\xdf\x3e\x30\x1c\xb8\x3f\x12\xed\xec\x3f\xd3\xa0\x61\xc1\xaa\x79\xdb\x33\x4a\x40\xa1\x3a\xba\xd1\x92\x3a\x22\x8a\xba\x68\x25\xc5\x03\xa1\x62\x14\xdd\xa7\x64\x3f\x02\x77\xbf\xf3\x71\x7e\x2a\x48\x97\x50\x8d\x2a\xc1\x08\x79\x04\x0b\xdd\x7c\x0d\x0e\x20\x3f\xfd\xe7\xf1\x5b\x1f\xea\x0b\xd4\xa3\x21\xe9\x38\xcf\xb9\xfc\xf6\x7d\x32\x43\xff\x0e\x6d\x54\x5b\x18\xd2\x1a\x6d\x3f\x4f\x21\xd5\x1f\x8c\x9f\x40\xac\x62\x73\xae\x8d\x5a\x3a\x79\x2e\x67\x11\xc9\xce\xb9\x1c\x6e\xb9\x64\x4b\xf2\xd7\xef\x4e\xfe\xf6\x5f\xdf\xbf\x3b\x3a\xfc\xfe\xbf\xde\x1c\x1e\xfd\xf5\xf4\xed\xc9\xcf\x3f\x9f\xff\xed\xfc\xe2\xe4\xcd\xcf\x3f\x1f\xb5\x4a\x31\x61\x8e\xb0\xf1\xee\x39\x33\x3f\xff\xec\xf6\x98\xfe\xf9\xe7\x8b\xa2\xe1\xcd\xcf\x3f\x9f\x79\x37\x27\x9c\xa3\x76\xaa\x12\x60\xc1\x01\x7a\xac\xab\x8e\x04\xfd\x0e\x97\x1f\xde\xb2\x57\x77\x39\xa0\x83\x06\x54\xfd\xa7\x88\xcb\xbb\xeb\x5a\x50\xe4\xe6\xf4\xc2\xb7\xde\xd9\xff\xa0\x22\x13\xaa\xec\x28\xd1\x5c\xcc\x01\xed\x0f\x55\xd4\x10\x78\x20\x53\x66\xae\x19\xc3\xba\xcd\x55\xd5\x2a\x1d\x0f\xee\x27\xab\xfa\x1a\xd7\xe2\xd8\x2a\x30\xbd\xd6\x2c\x2e\x4d\xc9\x15\x02\x5e\x71\x76\x0d\x6a\xba\xe6\x73\x41\xab\x28\x34\x08\x9d\x0a\x31\x03\xac\xfb\xfd\x1d\x29\xe1\x51\x11\x27\x36\x77\x76\x61\xb2\x7e\x96\xc9\x5a\x86\x49\xaf\x33\x06\xd5\x96\x36\x56\x92\xb3\xd3\x63\xf2\xf2\xae\x93\x01\xb6\x81\xcb\x2a\x39\xdf\xc4\x10\xc1\x11\x65\x55\xbc\xb4\xee\xf0\x6b\x90\xc7\x0f\xcd\xe8\xed\xb4\x94\x35\xe5\x62\xbb\x4d\x26\x66\x6d\x55\x2d\xc9\xaf\x2d\xad\x50\x7b\x3d\x93\xe5\xfa\x49\xb3\xf7\x47\xff\xd1\x9f\x26\x7f\x0c\x84\xff\x69\xf2\x47\x2b\x7d\xc2\xce\xf8\xd3\x44\x5f\x15\x93\x3f\x16\x55\xab\x0d\x53\xc4\xdd\x74\x67\xe8\xd3\x8f\x74\xa6\x08\x72\x8e\xba\x11\x80\x52\x0a\x76\xee\x83\x68\x74\xe8\x54\x80\xfc\xce\xbf\x28\x5a\xb0\x33\xa6\x38\x98\x06\x52\x94\x0f\xda\xa1\xc2\x73\x30\x29\x5d\xa3\x33\xe8\xae\x8d\x74\x84\x39\x13\x8c\x95\x68\xa9\x39\xb2\x19\x99\x5b\xaa\x61\xdd\x27\x60\x54\x4d\xad\x36\x50\x28\x46\x11\xf5\x8d\x94\xac\x62\xd0\xc8\x2e\xa9\xf3\x28\x86\x48\x7c\xca\xae\x90\x62\x2c\xd8\x1c\x53\x68\x5d\x2a\x09\xe2\x29\xe2\x31\xfb\x4f\xa6\x64\x94\xae\xa9\x8d\x6c\x08\xaf\x6b\x56\x72\x6a\x58\xb5\x24\x57\x9c\xde\x71\x7c\x50\x2b\xa0\x0f\x06\x0a\xc7\x7d\x21\x89\x84\x18\x70\x2b\xb8\x0b\xd7\x2c\x5a\x43\x4a\x79\x2d\xee\xae\x52\xb8\xae\xac\xa1\x10\x57\xf0\x6a\xd4\x6b\x96\x03\x93\x4b\x1a\xe0\x89\x5e\x94\x20\xcd\xea\x40\x5b\xbf\xf7\x50\xa7\xc0\x6f\x5a\x74\xe8\x7c\xe1\xc1\x8d\xdd\x91\xa0\x5a\x01\xb0\x9c\x5d\x6f\x2f\xc8\xf8\xd0\x4c\xdc\xd5\xcf\x4e\x63\xd6\xf7\xd3\xeb\x0f\x07\xac\xc1\xc3\x43\x8c\xad\x24\xab\xcc\xa4\x2a\xf8\xb4\x5a\x92\x05\xad\x0c\x73\x88\x99\x34\x5e\xa5\xbb\x4e\xca\x39\x33\xf1\x42\x54\x52\xcc\x63\x5d\x97\x7d\x68\x58\x61\xa0\x77\x13\xa3\xa2\x6d\x90\x3a\xab\xc6\x2d\x65\x9b\xec\xff\x88\xfd\x1e\x5f\xbf\xf0\x93\x9e\x22\x73\x52\x72\xaa\x52\xb3\xa9\x8c\xac\x18\x72\xca\x10\xe1\xb4\xb1\x3b\xd1\x33\x1d\x3f\xfd\xb1\x34\x5b\x49\xf0\xba\x5d\xb8\x8d\x03\x2c\x77\x11\x5e\x19\xfc\x18\xc6\x50\xe8\x91\x64\x45\x2c\x7e\x03\xcd\x19\x96\xc4\x6a\x45\x06\x23\x68\xae\xa9\xd8\xdd\x83\x62\x76\x63\x29\xde\x54\x8c\xfc\xf1\x92\x2d\x47\xc0\xed\x23\x54\xe7\xff\x44\xda\x90\x41\x05\xcf\x87\x1c\xc9\xc6\x12\x20\x15\xf9\xa3\xff\xd7\x9f\x1e\xb0\x37\xcc\x90\x30\x1c\xbe\xd4\xb6\xda\xb5\x9c\x20\x32\x0d\x8f\xc0\xe4\x98\x5b\x40\x07\x5a\x63\x24\xce\xf2\x84\x9c\x40\xd7\x34\x34\x20\x11\x60\xde\x5a\x02\xf1\xcd\x89\x9e\xd5\x9f\x7c\x38\xd5\xed\x32\xef\xb8\x8f\xf2\xf4\xde\x4a\xd7\x27\x88\x8d\xc8\x19\x74\xd5\xeb\x3e\x01\x51\xfc\x56\x9e\x7c\x60\x45\x9b\x56\xfd\x3e\x28\x04\x74\xc9\x12\xb2\x29\xf3\xac\xde\x77\x6c\xe9\x4f\x45\x5c\x06\x6b\x9f\x07\x38\xc0\x4e\x44\x45\xf5\x83\xb7\x2f\xe3\x25\xbb\x7b\xbf\x48\xbc\x4e\xbd\x5f\x03\x28\x72\xed\xb9\xc2\xae\xf4\x5a\xd1\xc9\x07\xae\x8d\xfe\xdf\x28\x4f\x0a\x59\x4f\xfd\xa1\x8a\xe4\x78\x5e\x43\x24\x26\xb7\xfa\x0e\x4f\x25\x95\xb4\x41\x6b\xeb\x5f\x60\x5b\x0b\xfc\xce\x4f\xa0\x62\x8d\x62\x1a\x62\xce\xd4\x4e\xc5\x33\xed\x0a\xb4\xa4\x00\x5c\x64\x17\x91\xc0\x2e\xc4\x49\x43\xf9\x5a\x1e\x1c\x10\x77\x1d\x2e\x17\x2c\xc1\x89\xb5\x94\x26\x3d\x55\x00\x3f\x4a\x13\x3b\xf8\x60\xcb\x29\xbf\xb6\xfc\x8a\x56\x0c\xdd\xaf\xd7\xbc\x2a\x0b\xaa\x30\xad\x11\x85\x3e\xd1\xd2\xd5\xc0\x62\x1b\xb4\xa4\x00\x56\xd0\x06\x58\xc7\xec\xda\xa5\x33\x51\x65\x78\xd1\x56\x54\x11\x2b\x01\xe7\x52\x25\xe1\xd5\x0c\x62\xb3\x6e\xa7\x26\x59\x53\x78\xe5\xe0\xb7\x8b\x55\x42\x62\xc6\x33\x8b\xa0\x8a\xcb\x19\x6a\x96\x2b\x62\x66\x1f\xab\xce\xdc\x6e\x4f\xa2\x40\xce\xfc\xc1\x13\x24\x7a\x8c\x86\x12\xa5\xe4\x70\x4d\xf8\x5c\x48\xc5\xca\x83\x48\x01\x09\xb2\x70\x42\xbe\x0d\xcd\x1b\x53\xfa\x7e\x5b\x8d\xcb\x47\x92\x01\x56\xc6\xbd\x9b\x13\x54\x8e\x9b\x3a\xd1\x3b\x93\x8a\x5d\x31\x45\xf6\x1d\xae\x1b\xbb\xe2\x85\x39\x98\x90\xff\xbf\x35\xf4\x52\x83\x6f\xc1\x82\x74\xc2\x30\xb4\x17\x70\xe0\xff\x54\x93\x17\x64\x1f\x86\x8a\xad\xc7\x03\x9f\x40\xa2\x97\xda\xb0\x3a\x9d\x9f\xb7\x55\x03\x91\x9c\xb8\x98\x63\x13\xfc\xe8\x6d\xdc\x6e\x71\xd1\xda\x5a\xe1\xf6\xd0\x31\x57\x0e\x3a\x32\xc3\x21\xc9\xb5\x93\x8b\xbd\xf0\x6a\xc8\xd8\xf0\x67\x6a\xd8\x0b\xff\x0d\x39\x02\x44\xb1\x39\x48\x2f\x94\x3d\x5b\x6e\x7e\x97\x98\x87\x69\x64\x23\x2b\x39\x5f\x9e\x37\x8a\xd1\xf2\x48\x0a\x6d\x14\xc8\xe8\x87\x74\x2b\x5d\xdc\x44\x84\x7b\xee\xd4\xd5\xae\x50\x57\x11\x26\x67\x88\xcb\x24\xdb\xf9\x02\x5b\x81\xc2\x0f\x09\x2d\x94\xd4\x3a\xbc\xd3\x5d\x4d\x36\xf0\xed\xe9\x89\xef\x0b\xea\xfd\xcb\xa1\xcf\x28\x8c\x09\xde\xf6\x6b\xba\x74\x52\x89\x4e\x79\xd9\x43\x50\xf4\xa4\xdf\x95\x1d\x0e\xed\xe9\x78\xe3\x3c\x58\x9d\xe0\xf0\xed\xf1\x5d\x53\x19\xb6\x67\xf2\xde\xb4\xa4\xc1\xda\x70\x20\xa1\x61\xed\x82\x41\x09\xb3\x8c\x10\x83\x76\x4a\xe7\xfc\x8a\x89\x30\x33\x8f\xa4\xed\x68\x4d\x3f\x9c\x5f\xb2\xeb\x84\x5f\xfa\x17\xfd\x8e\xdd\xbd\x48\x62\x0c\xde\xb0\x1f\x84\xa6\x86\xeb\x19\xa7\xd3\xea\x21\x7b\x9f\x02\x68\xca\x39\xab\x58\xb1\x45\xb5\xfd\xfb\x98\x88\x00\xbd\x67\x24\x99\x71\xb1\xc2\x63\x69\x47\x47\x87\x32\xe7\x3b\xbd\x71\x1d\x20\xf0\xdc\xb0\x50\x2d\x27\x5b\xe1\xfa\xe8\x86\xa4\x40\xcc\x82\x68\xeb\x29\x53\x5e\x84\xa5\xa9\x47\x0e\x54\x92\x14\x52\x29\xa6\x1b\x89\xd5\xaa\x9e\x75\x9c\x20\x4b\x3f\x8f\x92\x4b\x58\x86\xd6\x83\xc0\x94\x9e\x7c\xb0\x7a\xaf\x4e\x2b\x09\xc0\xab\xc7\x49\xab\x0f\xc5\x54\x20\x5f\xdd\xb5\xb2\x74\x6e\xd3\x43\x6f\x78\x0c\x1a\xc4\x9f\xa4\x8a\xe1\xee\x1a\x52\x03\x85\x57\x72\x25\x14\x5e\x79\xb2\x01\x09\x22\x04\xdc\x38\x77\x38\xc7\xe1\x9b\x18\xbe\xcd\x39\xd0\xf5\x08\xcd\x69\x07\xdb\x2a\x3a\x65\xcc\xde\x3c\x80\x2c\x30\xce\x9d\x39\x72\xc9\x96\xf0\x78\x1c\x31\xbd\x7b\xdd\xc0\x6d\xe1\x09\x1b\x52\xdf\x85\xd7\xd8\xbe\xd2\xa0\xdf\xfb\x69\x4e\x7e\xc8\xd0\x3d\x8e\x57\xa2\xeb\xae\xbb\x7a\x7c\x7c\xd9\x79\xe3\x90\x27\x7b\xde\xb8\x4e\x2e\x77\xbe\xb8\x41\x63\x0f\xae\x0e\xc3\x6b\x88\x8b\xab\xbb\xf2\x6d\xe8\x98\xa6\x4f\x71\x7b\x51\x48\x1a\x91\xb3\xc1\xdb\x0b\xaf\x4d\x6e\xb0\x53\x31\x22\x6f\xa5\xb1\xff\x89\x3c\x62\xc7\x92\xe9\xb7\xd2\xc0\x27\x3b\xb1\x92\x38\x01\xbb\xb4\x8e\xce\x6b\x61\xc5\xb0\xc0\xe3\xc6\x65\xb7\x59\x45\xc1\xad\xd7\x26\x33\xf8\x54\x10\xa9\xdc\x94\x0f\x24\x21\x58\xd2\xda\x11\x10\x07\xe8\x5d\x9f\xef\x1b\x0d\x71\x4b\x45\xbc\xcc\xf7\x46\x8c\x23\x04\x30\x8f\xf1\x1b\x80\x62\x6f\x2a\x28\xf8\x2e\x5b\x98\x30\x6a\x67\x8e\x1a\x36\xbf\x73\x89\xe3\xea\x55\x33\x35\x67\xa4\x81\xb0\x4e\x06\xce\x1d\xa2\x48\xe0\x35\x50\x9d\x88\x89\x19\xbc\x8d\x32\x97\x97\xde\xe3\x43\x41\xa7\x04\x5b\x23\x8f\x8e\x3a\x60\xbf\x47\xa4\xa0\xd6\x55\x53\x70\x90\xfc\xbf\x10\xbd\xfd\x1f\xd2\x50\xae\xf4\x84\x1c\xfa\x0c\xc3\xf8\x3b\x97\xa4\x11\x3d\x66\x00\x29\xcd\x7a\x60\x81\x0a\xc2\x1c\xa6\x85\x9c\xad\x29\xe3\x23\x87\xb7\x6f\x0f\xec\xe0\x5c\xde\xbb\x64\xcb\xbd\x54\x74\x25\xbc\x62\x89\xb2\x77\x2a\xf6\xba\x94\xc2\x9e\x14\x08\x3a\x29\x00\x9c\xef\xc1\x77\x7b\xf7\xa7\xf7\x0f\xd2\x20\x3b\xc0\xa4\xb3\x0c\x2a\xd8\xc0\x2d\xdb\xdb\x53\x35\x6d\x86\x6d\xa9\x8e\xf9\xbe\x63\xcb\xad\x85\x60\xde\xf4\xa8\xf0\x26\x8c\x71\xa6\x7a\xa7\x59\x6a\xac\xbf\xaf\x20\x46\xbf\x70\x6e\x41\x79\xc5\x14\xba\x04\x93\xc6\x46\x27\x98\x3d\x6b\x42\xaa\x7d\x07\xb7\x03\xfc\x08\x03\x5b\x3e\xf4\x1e\x8d\x4a\xca\xcb\xb6\xf1\xfc\x0c\x69\xb8\xa9\x3b\x86\x8b\x42\xd6\xce\x2f\x82\xef\x09\x9e\x70\xb7\x31\xc7\x2e\xe3\x09\x65\x4c\xd8\x0a\x98\x53\xd5\xf3\xfa\x24\xc6\x07\xe3\xc9\x0c\x0e\x5e\x66\x8f\xfd\xe0\x0f\xec\xa6\xf7\xd6\xa9\x4a\x22\xc0\xe7\xda\xc7\xb3\xe0\xda\x40\xd3\x3a\x04\xd6\x67\x52\x4d\x79\x59\x82\x2f\x12\x89\x0b\x05\x5f\x2b\x8c\x63\x25\x4d\xcf\x0f\x95\x26\x34\x56\x9e\xba\xa1\x0e\x7e\xd5\xd9\x25\x9e\x99\x94\xb4\x64\xbc\x60\x10\xd7\x1e\xc9\x3e\x28\xbc\xe2\xea\xd4\x78\x46\xb0\xb3\x9f\x34\xd2\x94\xf9\xf0\xa1\x3d\x92\x44\x5b\x55\x56\xdb\x03\x45\x0c\xdd\x32\x18\xe9\x03\x91\xec\x92\x12\xe6\x56\x48\x9b\x3e\xb3\x25\x35\x8a\x70\xdd\x2d\x60\x6f\x4f\x99\xa1\xbe\xcf\x85\x58\x41\x83\xea\x4f\xfe\xa9\x38\x93\x65\xdf\xa3\x7d\x0b\x2c\x14\xd9\xf7\xff\x98\x2e\x93\x8b\x5e\xc8\x60\x1d\x6f\x80\x66\x97\xf3\x70\x18\xae\x70\x39\x67\xfa\xf6\x8e\x05\x18\x3e\x0a\x45\x61\xf2\xed\x5c\x31\x44\x01\x06\xa9\x04\x52\xca\xb5\xbd\x6a\x05\xbb\x62\x96\x7b\x4b\x6e\xe7\x70\xda\x26\x62\xa6\xb9\xfc\xac\x5f\xd6\xbc\xfa\xff\xbf\x63\xf9\x56\x1a\x1f\xa6\xfa\x65\xe4\x02\xe6\xa8\xc7\x7d\xe0\x75\x5b\x63\xdf\x6a\x63\xac\x0d\xc3\x67\x33\xa6\x12\x9b\xf3\x91\x50\x7b\xd2\xf7\x5d\xf7\xa3\x35\x4e\x4a\x18\xaa\xe6\x50\x30\xed\xfc\xd0\x5e\xe5\x9a\x57\x72\x4a\x2b\x52\x73\x61\x49\x4b\x9b\x89\x8b\xb5\xe7\x84\x37\x76\x7f\xde\x42\x1c\xe8\xa0\xae\xb3\x14\x3a\xc7\xd3\x32\x24\x94\x4b\x1e\x9f\xad\xcc\xc6\xca\xc3\x41\xbe\x54\x4c\x6b\x4c\x0f\x7e\xc3\xc5\xb1\x0b\x2d\x26\x0d\xfb\xda\x4a\xc7\x0f\xb4\x6e\x2a\x36\xc2\xf0\xe3\xd7\xe3\x7f\x4a\xc1\x88\x2b\x7b\x18\x05\x16\x75\x75\x3c\x46\x92\x97\xa8\xf0\x36\x01\x96\xcc\xd7\xd7\x24\x51\xd0\x93\xbb\x21\xd8\xaa\xc9\x57\xcf\xbf\x7a\xfe\x32\x4d\xc4\x9c\xba\xd2\xa3\x82\x6a\xd7\xdd\x76\x7d\x75\xef\x5c\xc4\x83\xd7\xbf\x88\x9d\x9d\x97\xee\xbf\x5f\xb9\xff\x7e\x4d\xfe\x95\xf8\x34\x72\x46\xce\x7a\xff\xb5\xff\x49\x7c\xda\xd8\x32\x4f\xb4\x5c\x2f\x47\xfd\xb3\xb5\xa0\x02\x0f\x3e\x7b\xce\xbb\xfd\x0d\xda\x1e\xbe\x02\x9c\x33\x85\xac\x19\x4c\xfd\x57\xff\x3b\x4d\xd7\xc4\xe7\x42\x86\xbe\x21\x52\xb8\xa7\xbf\xdc\x87\xe9\x3a\x20\xd7\x90\xf7\x50\xd3\x4b\x0c\x58\x1d\x16\xa6\xa5\x95\x25\x78\xff\xeb\xf1\xcb\x03\x22\x45\xef\xf6\x24\x12\xae\xb8\xb4\xfa\x9a\x9f\x89\xfd\x97\x89\x18\x0f\xab\xd3\xf9\xd5\x86\xe9\xec\xcd\x24\xbc\x2d\x15\x4b\x78\x85\xbc\x32\xd9\x8b\xe3\x43\xb1\xbc\xa6\xcb\x20\x94\xbd\xba\x3e\xe7\x57\x8c\x2c\xf8\x7c\x01\x68\x08\x03\xfa\xa5\x12\xcc\xfb\x06\x19\xcb\x7d\x4b\x4b\x24\x64\x49\x78\xa2\xf6\x77\x6a\x9e\x69\xc8\x68\xc1\x18\x85\x03\xba\x09\x75\x6a\xa1\xf8\xe4\x25\x88\x95\x17\x2b\x40\x1f\x5b\x4e\x73\xfa\xfa\xab\xbb\xeb\x14\x41\x26\x6f\x4d\xad\x08\x14\xf4\x1a\x1e\xac\x9f\x66\xab\x87\xcb\x00\xae\xfd\xc8\xa9\x05\x07\x45\x38\x3c\xc3\x31\x7e\xe9\xac\xe1\xee\x44\xeb\x66\x2f\xcd\x2f\x7b\x26\xcb\x90\x20\x42\x9c\x3e\x0d\x89\x75\x9a\xec\xf5\x8f\x81\x3d\x48\xb4\x0b\xde\x1b\x87\xe1\xec\xec\x3d\x2e\x85\x7d\x0f\xbf\xf9\x07\xb5\x01\x27\xe4\x50\x94\x5d\x35\x51\xe2\x2c\xb1\x5f\x5b\x5a\x81\xf3\x7a\x0e\x79\x82\x2a\xcf\x7c\x45\x75\x47\x6b\x7d\x6d\x3b\x69\x9e\xf8\xda\xb8\xef\x75\x5b\x41\xa6\xe5\xc7\xdf\x3f\x2b\x27\xe8\x2e\xd5\x0a\xac\xce\x90\x6b\x55\x4b\xec\x5d\x2f\xbc\xfa\xef\x32\x2f\xa4\xf3\x4b\x0c\xda\x0c\xa7\xb3\x0d\xe5\x74\x5d\xee\x16\x99\xb2\x05\xbd\xb2\xdb\x11\x60\x9c\xe2\x9d\xea\x96\x18\x54\xac\x21\xd9\xde\x51\x81\x85\x13\x81\xba\xcf\x32\x2f\x06\x6c\xf3\xee\xdd\xa4\xc1\xf7\xfb\x69\xf5\xb4\x0a\xf1\x8f\x9e\x25\x91\x68\x52\xa7\x28\xa8\x5f\x8d\x56\xe6\xd5\x7d\xfe\xdb\x87\xd2\x5b\xbf\x4a\xd3\x5b\xef\x5d\xb9\xc4\xff\x26\xdb\x48\xdd\xc6\xdd\xb8\x5f\x7f\xbb\xdf\xcd\xfa\x01\x64\xf8\xaf\x09\x5c\x40\xc6\xea\x92\x9c\x13\x77\x98\x53\xef\x35\x37\x2d\x45\x00\x2e\xc1\xae\x5d\x49\x75\xb4\xac\x2b\x4b\x14\x39\xb9\xbc\xca\x96\x26\x57\xa6\xac\xa0\xad\xb6\x9b\xba\x6e\xac\xf9\x4d\xb4\x65\x3f\xef\x30\xfc\x7a\xff\x6b\x32\x26\x2f\x0e\xec\xee\x16\x28\x5a\x80\x05\x63\x85\x1b\x1a\xdb\xa0\xa1\x67\x16\xd6\xd4\xb7\xeb\x9c\x28\xe5\xb8\x43\xef\x5c\x51\x7b\x1f\x9f\xda\x24\x64\xc9\x0e\x67\x33\x2e\xb8\x59\xa6\xc2\xd9\xe7\x51\x9f\xde\xae\x51\x12\xa9\x51\x0b\x79\x4d\xae\x1d\x96\x00\xf0\xb2\x83\xc4\x8b\xc9\x7f\x6e\xff\x18\xe4\xb8\x86\xc3\x32\xe8\x22\xce\xe2\x08\xfa\x80\x93\x36\x96\xef\x26\xae\x6e\xde\x35\xea\x49\x19\x6b\x4c\xfe\x2a\x85\x54\xaf\xd0\x38\xc4\x5e\xf6\x41\x07\xb9\xf1\xb5\xdc\xf9\x52\x54\x6d\x19\x75\xc0\xe8\xb4\xa7\xc4\xe3\x73\x4c\x4e\xc1\x7f\xfb\xea\x63\x23\x07\x2f\x2f\x80\x28\x94\xe1\xc0\xbb\x8d\xa0\xf4\x84\xfe\x8d\x45\xf2\x70\x94\x73\x0c\x04\xf6\x03\x93\xf6\x5b\x98\x54\xd2\x00\xff\x3c\x78\xed\x91\x9d\x91\x0b\x48\xef\xde\xfe\x56\x8a\xe9\xb8\x75\x23\x61\xef\x33\x4c\x4a\x5f\xdd\x00\x49\xa3\x3f\xc4\xa6\x41\xde\xb3\x07\x8f\x6c\x8d\xa3\x7e\x44\x68\x25\x21\x88\x64\x8f\x23\xfb\x11\x2b\xdd\x8d\x33\xe9\x63\x4d\xab\xb1\x8f\x24\x32\x16\x80\xf6\xd9\x95\xaf\x8c\x7a\xbb\x20\xc7\x16\xf4\x0b\xf2\x09\x9b\xee\x81\x37\x18\x52\xb9\xad\x1d\x16\x25\xd3\x6f\xaf\xae\x2f\x90\xe0\x1d\xd6\x97\x0c\x34\x0b\x58\x38\x8c\xa5\x4d\x60\x0f\xc6\xcd\xd5\xa9\x0b\x37\x3b\x65\x89\xeb\xe4\xc4\x4f\xab\x4e\x73\x80\xec\x2d\x68\x15\xdb\x1d\xd6\xde\xe1\x25\x53\xa8\xee\x4c\x59\x0f\x85\x29\xb5\xde\x02\xaf\x9f\xba\xa7\x23\x62\x13\x40\x09\xe0\xe0\x7f\x42\xf0\xdb\xbd\x69\x5b\x5c\x32\xe3\x13\x33\x14\xa0\xa4\x34\xad\x21\x53\x5a\x51\x51\xd8\xbd\x08\x9a\x6c\x9a\xa3\x7e\xe6\x5d\xff\x46\x22\x01\x38\x5a\xf2\xdb\x60\xc7\x88\x80\xff\x83\xaf\x10\xd5\xaf\x72\xa1\x8d\xa5\x1a\x0b\x5b\x87\x4d\xde\x61\xa5\xe5\xc8\x4a\x5d\x3f\xe8\x5a\xf0\x02\x87\x77\xff\xc6\xfc\x19\xa7\x11\x30\x66\x1c\x6c\x5c\x94\xbc\x22\x53\x7a\xa1\x6d\xd2\xf5\x1c\x4e\x6f\xff\xb4\x48\x7b\x49\x36\x99\x43\xf6\xdf\xca\xf6\xd8\xeb\xe3\x35\x7a\x08\xa8\xbd\x11\xae\xa2\xdd\x25\x0e\xc9\x13\x5f\x1e\x14\x74\x6a\x86\xce\xb8\x28\x01\x1f\x78\x95\x98\xf0\xd4\x3e\x55\xd6\x10\xf0\x14\x81\x99\x9b\x9f\xa2\xcd\xee\xd8\x87\x16\x9f\x6b\x3e\xee\x6d\x09\xd1\x75\xf7\x45\x5f\x45\x81\x22\x1b\x5a\x79\x94\x1f\xab\x52\xf0\x99\xb5\xba\x4a\xc9\x30\x2b\x02\xdd\xe3\x89\xce\x37\xe6\xf5\x92\xce\x45\x94\x7a\x6a\xf7\xdc\x2d\x64\xdf\x67\x07\x10\xc3\xaa\x0a\x4f\x87\xce\x23\x66\x2d\x61\x23\x3b\x97\x58\xaa\x6f\x7f\x4c\xfa\xa1\x89\x8d\x83\xc5\x03\x79\xd0\x26\x88\x9c\x2e\x43\x6b\xd9\xd4\x1c\xdc\x69\x6b\xc8\x9c\x5f\x59\x15\x6a\x2d\xfe\xb1\x29\x96\x81\xf1\xa7\x05\xab\x1a\xa2\x58\xd9\x16\x6c\x40\x26\xa0\x4e\x34\xb3\x09\x39\x8c\x1d\x82\x80\x99\x11\x8e\xcb\xbd\x1e\x2f\xee\xb9\x3e\xb8\xc3\x15\x45\x3e\x03\x09\x0b\x26\x1e\x9f\x11\x76\xc5\xd4\x92\x34\x52\x6b\x90\xfd\xa0\x2f\x20\xc8\x21\x64\x53\xce\x7c\x61\x0d\x38\x55\x60\xce\x9c\x7f\x21\x69\xf0\x3d\xe7\x94\xd8\x03\xa7\xb2\x1c\xac\x03\xec\x6e\xd4\xfa\xeb\xe7\x2f\x53\xa3\xd6\xb9\xbd\x7f\x67\xf0\xbf\x10\x52\x1e\x14\x5a\x3e\x9d\x6d\x92\x93\x61\x6e\x7b\x92\xe7\x53\xa2\xce\xa9\xa1\x49\x98\x19\x08\x0e\x7f\x7d\x10\x05\xac\xbf\x7e\xfe\xd5\xf3\x97\xfb\x76\xee\xbf\x3a\xb0\xab\x10\x85\x95\xbf\x8a\xc2\xca\xe1\x97\xee\x2d\x12\x20\xac\x48\x97\xb4\xb3\xff\xf2\x60\x02\x35\x0d\x80\x4f\x7a\x2d\x55\xe9\x4a\xfc\x3d\x62\xa4\x7d\xf3\xd0\xfe\x93\xd7\x5e\xf9\x1c\x81\xd0\x0a\xd2\x31\xcd\x3d\x04\x01\x0d\x08\xa3\x73\x43\xbe\xac\xa5\x62\x5f\x46\x43\x3c\x56\xc5\x60\x3d\xb9\xab\xa6\xcd\xf8\x32\x21\x6f\x77\x48\xb1\xf3\xd0\x52\xe7\x9b\x52\xd4\x6a\xda\xdc\xe1\x39\x57\xb2\x6a\xeb\xbb\x66\x61\x0f\x53\x88\xbe\x77\x75\xab\x6e\x68\x57\x5a\x89\x69\x0e\xb5\xab\x39\x9e\x2e\x63\x28\xdf\x29\xab\xa4\x98\x63\xac\x32\x34\x2c\xbc\xe3\xa8\x9f\x86\xac\x5e\x48\x51\xb0\xc6\xe8\xe7\xda\x48\x45\xe7\xec\xb9\x23\xf2\x4e\x83\x6d\x0f\xb2\xe0\x47\xa0\xb6\x5f\xf9\x86\x4d\x81\xf0\x3d\x02\xd0\xb2\xaf\xff\x06\x79\x49\x0b\x80\x9d\x84\x59\xb7\xda\x52\xd4\x60\x58\xa4\x4e\xf7\x96\x50\x0b\x12\x3a\x08\x0e\xa9\x06\xa5\xd7\xfa\xa4\xa2\xda\xf0\xe2\xdb\x4a\x16\x97\xe7\x46\xa6\x39\xfa\x72\x58\x18\x9b\x68\xe9\x71\x82\x20\x87\x3f\x9d\x93\x63\xae\x2f\x89\x62\x5a\xb6\xaa\x70\xad\xca\x56\x00\x19\xef\x8a\x1d\x8b\x97\xdd\x4c\x15\x33\x0e\x72\x9f\xd4\xb4\x58\xa0\xe9\xef\xb2\x1e\xd8\x87\x46\xea\xae\xf9\x7a\x02\x4b\xe1\x15\x77\xaa\x38\xfc\xe9\x7c\xfd\x95\xb9\x8e\x9a\x64\xa0\x0f\x11\x4b\x69\xc0\x13\xdb\x65\xca\x8f\x8d\x62\x69\x5a\xd9\xc6\x99\xb6\x0c\x0f\x4e\x29\xc5\x4a\xae\x10\x48\xd5\xbd\x2b\x9b\xea\x49\xa1\xf9\x84\x5e\xeb\x49\x21\x6b\x72\x74\x7e\x4a\x4a\xc5\xaf\x52\xfb\x24\x0d\x13\x65\x5f\xd0\x6b\xcd\x90\xfc\xa9\x25\xdf\x7e\x9d\x32\x0f\x5b\xee\x15\x8a\x6f\x73\x7a\x9c\xf0\xf3\xa1\xf5\xdf\x33\x7d\x61\xdf\x3d\xd1\x9e\xcb\x55\x35\x87\x54\x78\x8f\xec\x8c\x57\x0c\x01\xbb\x90\x13\x5d\xdc\xd7\x89\x7d\xd8\xe6\x4b\xd9\x92\x6b\x8a\x8e\x6d\x38\x67\xd3\xcb\x37\x2f\x78\xf3\x8a\x9c\x08\xdd\x2a\xd6\x15\xa9\xaf\x92\x60\x15\x77\xdf\x47\xd8\xa3\x0b\x81\x6c\x70\xdb\x51\xcc\x07\x40\x8c\xe1\x75\x82\xd6\x99\x7e\x45\xf6\xd8\x07\xf3\xcd\xde\x88\xec\x7d\x98\x69\xfb\x1f\x61\x66\x7a\x6f\x42\x4e\xeb\xa6\xe2\x05\x37\xd6\x1c\x15\x33\xa6\x3a\x57\x31\xfe\x20\x53\x97\xa5\x5d\xd9\x93\x24\x47\x25\x2b\x38\x85\x81\x3d\xb7\xcc\xe1\x81\x10\xcf\xe4\xd1\x07\xe2\x3e\xd9\xfb\x74\x46\x24\x96\x1e\xf4\x61\xca\xb9\x0e\x0f\xb7\x0c\xed\x46\x17\x09\xfd\x96\xba\xab\x63\xe1\xd7\x52\xf9\x47\x3e\x2f\xd9\xd5\x73\x5d\xd2\x97\x23\x78\x2d\xe4\xcf\xe5\xca\x1c\x50\x4d\xf6\x5e\xde\xb9\x51\x40\x77\x9d\xf3\x9a\x57\x54\x55\xcb\x51\x3c\x97\xdd\xf3\xed\x51\xe9\x09\x01\x67\xf2\x8b\x3d\xb2\x8f\x68\xe0\xa0\xae\x57\xcc\xb7\xe3\x0b\x5d\x7d\xa1\x02\x2a\xb9\xd9\xdd\xd0\xc4\x10\x32\x38\x39\x84\xc0\xc1\x44\xcb\x77\xa2\x4a\x06\xf7\xc8\xc5\xfd\x9e\x0e\x8f\x1f\xa8\x5a\x17\xc5\x9e\x49\xd4\xdc\x58\x77\x8b\x6f\xc9\xc3\x85\x33\x01\xde\x58\x1e\x1d\x80\x67\xb1\x6b\xe2\x2c\xbd\xfd\x20\x09\x9a\xc2\xb6\x17\xd4\xd3\x01\x29\xf5\x82\xff\xda\x32\x72\x7a\xec\x0f\xea\x86\x29\xcd\xb5\x61\xc2\x90\xb2\xa7\xa1\x73\x54\xdb\xf7\x0f\x6b\xfa\x4f\x29\xc8\xc9\xb7\xe7\xee\x41\xc9\xdb\x6c\xf7\x56\x37\xf1\xb0\xa2\xff\x6c\x15\xb3\xf6\xcc\xd6\x4c\x2e\x4f\xc0\xaa\x9d\x65\x3f\x27\xc7\xd4\x50\x34\xb7\xf0\xc4\x90\x5d\x4f\x2f\x30\x8b\xa6\x80\xe7\xe6\x9b\xc7\xe5\x33\x8a\x02\x51\x77\xb2\x84\xa2\x97\xb1\x8b\x92\x36\x1f\x1b\xcd\x1f\xcb\xcf\x68\xff\xd8\x11\x32\x58\x40\x5b\xb6\x3c\xec\xfb\xbc\x4d\xf5\xe8\xe3\xcf\x7f\x78\x7f\xba\x05\xbb\xa5\x00\x9b\x7c\xfe\x46\x96\x79\x8c\x97\x67\xd1\x03\xbd\x8a\x06\x0d\x81\x8f\xf0\x73\x52\xdb\x91\xc8\x5b\x29\xd8\x88\xbc\x67\xb4\x24\xf6\xb0\x72\xff\xfc\x49\x71\xc3\x26\xcf\xb6\xa5\xe4\xfa\x45\xcc\x32\x11\xfe\x61\x7e\x12\xde\x46\x6d\x22\xa1\x97\x2b\x88\x74\xa7\xb3\x4e\x2b\x39\x25\x4e\xa4\x6e\xf3\xed\x7f\x78\x7f\x9a\xed\xe5\x7f\x78\x7f\xea\xdf\xdd\xfe\x53\xce\x76\xf3\xb5\x77\xcd\x70\x7f\xbd\x62\x31\x0f\xb7\x5c\xde\xb8\x9a\x08\xba\x66\x8d\xdf\xbf\x29\x3e\xd9\xb2\x11\x9e\x01\xc2\xc9\x19\x7a\xaf\x88\xa5\x2b\xcd\x0d\xca\x45\x32\x3c\x62\x5f\xb8\xda\x27\x75\x3d\x99\xa2\xac\x37\xe8\xed\x57\xbe\x22\x75\x5b\x19\xe8\x72\x03\x5b\xcb\xee\x35\x28\x20\xf3\x9b\x8c\xb8\xae\xaf\x56\x3b\xc0\x4c\x93\xf2\x95\x47\x4f\x0a\xbf\xd8\xfc\x83\x37\x54\xd0\xb9\xbd\x1d\x4e\x6c\x52\xe3\x9f\xd1\x9e\xde\xc7\x00\xbf\x08\x5f\xd1\x2b\xca\x2b\x3a\xe5\x15\x37\x60\x8d\x1c\x4c\xfc\x5c\x22\xd4\x0c\x90\xbc\x35\x61\xbf\x73\x26\x5d\xdc\x09\x03\xba\x27\x92\x7d\xfb\xdd\xf3\x6b\x7b\x28\x1e\x4c\xe0\x84\x84\x1b\x17\x4c\xc5\x56\x5f\xf2\xc8\x76\xc3\xbf\xbf\x27\x6b\x71\xb8\x85\x16\x6d\x3c\x98\x8d\x34\x4b\xc0\x4a\xd3\xad\x5a\x02\x96\x80\x8d\x96\x00\x7c\xe1\x7a\xd9\x6e\xc1\x18\x80\xe1\x13\x8c\x01\xf8\x5d\x66\x63\xc0\x1e\x4b\x9f\x93\x31\xa0\x59\xa1\x98\x19\x60\x0e\x80\x68\x4c\xfc\xfd\x50\x83\x60\xe7\xe4\x62\xf9\x24\x17\xe3\xab\x63\xae\x2c\x2b\xd4\x3d\xce\x2b\xeb\xa1\xa1\x3d\x7e\xb5\x82\x72\x8d\xc2\xeb\xdc\x69\x07\xbe\xd1\x3d\xfc\xde\x8a\xac\x14\x7c\x7f\xbc\x06\x1f\xe8\x61\xd3\xe4\x99\x17\xff\x34\x3f\x2d\xa8\xf6\xc0\xc7\x24\x79\x6b\x0f\x7c\xcd\x82\x35\x8b\xd9\xd6\xa0\x1d\xec\xe8\xaf\xcf\xfb\x89\x24\x47\xac\x59\x90\xd7\xe7\x1b\x0e\x30\xc4\xef\xb0\xd3\xa5\x31\xbd\xe4\x99\x26\x15\x9f\x31\xc3\x53\x23\x23\xf1\x19\x76\x84\xb4\xf4\x0e\xb0\x00\xcc\xe4\x0f\x2c\x9c\xae\x10\x78\x14\xd2\xb7\x37\x0d\x76\xcf\x23\x3c\x5c\x6a\x29\xb8\x91\x77\xee\x45\x4e\x72\xf4\x31\x70\x43\x6f\xfb\x68\xf0\x74\xd8\x45\x7d\xef\xa7\x93\xbc\x89\x3e\xa5\xa4\x90\x55\xc5\x0a\x8f\xa5\x01\x6c\x3a\x60\xe6\xf0\xda\xe0\x22\x77\xa9\xc0\x7a\x72\xf9\x07\x70\x92\x3b\x77\xf8\x73\x64\xbd\xe7\xef\x4f\x0e\x8f\xdf\x9c\x4c\xea\xf2\x8b\x85\xbc\x1e\x1b\x39\x6e\x35\x1b\xf3\x54\xa8\xd4\xad\x77\x59\xc8\x60\x4d\xdf\x03\x6a\x71\x43\xcd\x22\x8f\x79\x6d\x9f\x64\xd9\xa7\xeb\x68\xff\x83\x46\xbc\x00\x40\x64\x73\x79\x88\x4a\x4a\x33\x22\x8a\x42\xf2\x6d\xe8\x94\x3c\x6b\xab\x0a\xf9\xcc\xca\x9e\x51\x1c\x1f\x7e\xfe\x64\xe4\x7a\x75\xaa\x37\xb9\x9f\x95\xc5\xbb\x2b\xe2\x61\xb8\x6e\x99\x6a\x33\x93\x8c\x0c\xd3\x51\xd2\x67\x99\xf3\xde\xe7\x98\xfb\x60\x16\x96\x81\x2e\xd9\x92\x00\xaa\xbd\x35\x5b\x7f\xd0\x4c\xf5\xb7\x20\x33\x05\xcc\xfa\xf3\x56\x33\x35\xc1\xc7\x3f\xf2\x95\x1e\xa2\x2b\xc3\xfb\xbf\x67\xb3\xdd\x58\xe7\xf7\x6c\xb6\x69\x99\xdd\xc7\xd0\x9d\x39\x54\x55\x59\x55\xbc\x35\x0b\xac\xfc\xc5\xfe\xf9\x68\xa7\x6c\x5c\x77\xec\x83\xf0\xc8\x17\x7a\x10\xbe\x7a\x8e\xc6\x36\x62\x80\x55\x45\x32\x37\x01\x89\xe3\x68\x8e\x33\x06\x76\x4b\xb9\xe8\xb5\x80\x45\x08\x32\x7e\xc5\xaa\x65\xd0\xd5\xb1\x6e\xa6\x6c\x11\x11\x99\x16\x97\xd7\x54\x95\xd0\x6f\xba\xa1\x86\x3b\x0f\x37\x4f\x57\x2c\xed\xe5\x7b\x94\x3b\xcc\x65\xd7\x48\xc4\x15\x60\x6b\x7c\x63\xee\x8c\x19\x2c\x08\x15\x0e\x5c\xda\x21\xa8\xd9\x33\x92\x26\x27\x5d\x78\x22\x6a\x6b\xbb\x15\x4c\x59\x6b\xbf\x5a\x92\x6b\x25\x53\x11\xd8\xfc\x75\xc7\xc4\x12\x79\xc5\xd4\x15\x67\xd7\xcf\xaf\xa5\xba\xe4\x62\x3e\xb6\x2f\x3b\xc6\x2d\xa0\x9f\x5b\x4e\xd4\xcf\xbf\x80\xff\x0c\xa0\x2a\x53\x67\x8f\xe0\xa1\xde\xdb\xcb\xa1\x0e\x0f\x6e\x38\x60\x2f\x7b\xbe\x6d\x5b\xaa\x5b\x1a\xec\x5e\x92\xb1\x1e\xad\xfc\x89\xad\x68\x29\x35\xde\x63\xd7\xb1\x27\xaf\x69\x59\x27\xa2\x18\x93\x9d\x11\xd7\xa9\xce\x1d\x2e\xca\xb4\xa5\xcb\xe2\xdc\x81\xd1\xfb\xce\x1d\xf7\x99\x4b\x02\x0d\xe5\x20\xd4\x47\x25\x00\x78\xd6\x17\x79\xf4\x6b\x3c\x32\x78\x78\x70\xf0\xbb\x85\x28\x1c\xc5\x99\xe3\x13\xf8\x54\x88\x50\xc8\x86\x59\x91\x5c\x5c\x4e\xa4\x9a\xdf\x47\xd1\xc6\x2a\xbf\xd6\x4b\xfd\x6b\x35\x46\x0a\xc6\x4d\xd9\x31\xec\xe3\xf3\x5c\x3d\x55\x67\xdc\x5a\x9d\xf1\xb8\x13\x3d\x76\xb8\xe6\xe2\x3e\xb7\x14\xf9\x2c\xbd\x34\x9f\x55\xc8\x6d\x8b\x3c\x31\xdc\x17\xb3\x6b\x26\x7a\xa7\xd1\x35\x12\xb0\xd9\x5c\xc3\x4c\xb0\xc0\xf1\x64\xf1\xb1\x42\x40\x61\xa0\x8a\xd6\xcc\x30\xd5\x01\xc6\x17\x52\x88\x21\xfd\x66\x8d\x24\xef\x1a\x26\xce\xe1\x10\x7e\x32\xab\x9f\xcc\xea\xdb\xaf\x27\xb3\xfa\xc9\xac\xce\x61\x56\xef\x5c\xc1\x90\x97\xa7\x08\x82\xe8\x0a\x01\x3b\x44\x07\x67\xb3\x3c\xbe\x33\x33\xd5\x7a\x96\x62\xc6\xe7\x6f\x68\x33\xd8\x80\x0e\x4f\x5a\x31\x86\xc3\xc7\x2e\xb3\x01\xa0\xa9\x1a\xd9\x40\x8b\x3e\x07\x23\x0a\xd3\xff\xf0\x96\xd9\xd0\xc3\xc8\x6d\xb8\x6c\x45\x20\x03\xf8\x3b\x22\xa5\xaf\x6f\xd4\xf6\x93\x29\x37\x9d\x26\xa1\x99\xc1\x7e\x60\xd8\x73\x95\x48\x41\x0a\x87\xf0\x0e\xf6\x4f\xd4\xa7\x2e\x83\x4d\x25\x88\x2c\x8c\x87\x1a\x0d\xed\xc3\x5e\xbc\x78\xf1\x02\x7b\xc7\xfc\xfe\xf7\xbf\x27\x52\x11\x4a\x4a\x56\xf0\x7a\xfd\x46\xb8\xeb\xb7\x2f\x13\xdb\x2b\xd8\xeb\x6f\x87\x6f\xbe\x07\x5c\x96\xc6\x68\xec\xd0\x88\x14\xd9\x07\xf7\x06\xd5\x23\xf2\x7f\xce\xdf\xbd\xed\x5a\xff\xf5\xbf\x05\xaf\x49\x98\xce\x74\x7a\xe2\xf0\xed\x8b\xdf\x7d\xf3\xcd\x80\x27\x81\xc3\x45\x2a\xee\xe0\x8c\x3d\xc4\x0c\xb5\xe7\xb1\x62\xd8\x93\x07\x14\x08\x6f\xc1\x22\x00\x98\x49\x6e\x0f\x42\xbc\x82\x52\xf3\xf9\xc2\x38\x98\x58\xbb\xc5\x2b\x5e\x18\x54\x04\x10\x5c\x4b\x3a\xb4\x66\xd8\xf4\x48\x43\xb0\xde\x07\x24\xb0\x94\x6c\x44\x2a\x7e\xc9\xc8\x4c\xff\x45\xc9\xb6\xe9\x1a\xf9\x62\xcf\x12\x8f\x7d\x84\x44\x74\xbc\x9f\xdc\x07\x73\x57\x2a\xa9\x07\x65\xa0\xe4\x12\x32\x40\xc4\x8a\xcb\xc1\x21\x9f\x76\x8d\x61\x1b\xca\x03\xd8\x11\x94\x6d\xa2\x2e\xdb\xd7\x91\x8b\x44\x40\x39\x7b\x1d\x85\x13\xc5\x37\x70\x68\x94\xfc\x6f\x64\x72\x80\xf8\x8d\x4e\x74\x80\xc6\xb5\x3c\xe7\x81\x71\xbb\xcc\xc4\xe4\xf1\x2f\x19\x42\xdf\x5a\x7b\x8d\x89\xd0\x6a\x11\xde\x1e\x50\x6c\xa3\xb9\xb1\x5f\x54\x5c\x5b\xd2\xa0\x23\x90\xa3\x38\x79\xec\x0d\x6f\x1a\x46\x83\x7d\xaf\x71\x47\xb4\x62\x6d\x54\xec\xa4\x31\x60\x64\x38\xd2\xe1\x05\xa9\xef\x82\xdb\x8d\x8d\x00\xe9\xae\xc9\x8c\xbb\xd7\x73\x41\x58\xb0\xf4\xb6\xfd\xd1\x92\x6a\x66\x5a\xb7\xf4\x4c\x29\xa9\xec\xbb\x32\xad\x5d\x7f\xb5\x9a\xaa\x4b\x56\x86\xf3\x6f\x42\xce\xec\xa4\xf8\xfe\x36\x03\x5c\x3c\x15\xb5\x56\x18\x3a\xf1\xe9\x12\x5e\xd3\x19\xec\x40\xdc\xb3\xc9\xe4\x19\x0a\x5e\xa9\x88\x36\x54\x39\x69\x68\x3f\x1f\x26\x79\xb6\x98\xb7\xd6\x93\x1b\x6f\x68\x03\x2d\xb0\x41\xcf\x04\x06\x00\x1f\x06\xbc\xb3\x3b\x7c\xa8\x5b\xa3\xf4\xb3\x25\x83\x87\x61\xa8\xc3\x1d\xaf\x71\x32\xc2\xba\xff\xbd\x9d\x98\x21\xfb\x7c\xb0\x9b\x04\x24\xd5\x90\x9f\xaf\x30\xc0\x65\x1f\xb3\xde\x48\x2f\x8d\x86\x19\xe4\x99\x8c\xdf\x7a\x80\x12\x8e\x57\x4e\xb7\x10\xd2\xd3\x4f\xce\xf9\x24\x4d\xdc\xa0\xf7\xa7\x1a\xb0\x87\xf0\xda\x21\x05\x1c\xaf\x5d\x53\xc3\xf1\x3a\x9d\x81\x28\x5f\x39\xb2\xdd\x51\x13\x1b\x55\x5e\xd7\xb0\x6b\x37\x74\xd0\xed\x69\xd0\x78\x6d\x45\x8f\xc6\x2b\x87\x36\x8d\xd7\x70\x9d\x1a\xaf\x21\x69\xd0\x78\xe5\x15\x1c\x3e\x99\x1a\x17\xc3\xa9\x1d\xa8\x59\xcc\x02\x03\x40\xd4\x13\x7c\x2a\x5e\x18\x0f\x96\x17\x4e\xa9\x41\x91\x41\xa7\x5a\x56\xad\xc1\x81\x73\x3d\x3a\xd6\x97\xe0\x85\x58\x05\x3d\x29\x06\x29\x49\xab\x83\x44\xba\x17\x68\xc7\xa8\xae\x0c\x1f\x61\x37\x73\xf8\x87\x84\x42\x72\xb1\x6d\xde\x10\xc8\xf6\xc3\x1f\x5b\x0f\x7d\xe4\x0e\x7b\xec\x5a\xc8\x23\x27\xb8\x44\x62\xa8\x23\xf8\x47\x73\xec\x1d\xff\xb0\x80\x2d\x78\xbd\x60\xae\xc8\x25\x32\x7e\xad\x92\x65\x8f\x50\xb0\xc8\x7d\xbf\x55\x6c\xea\xb3\xad\x68\x79\xde\x70\x4f\xa1\xf9\xf0\x20\x82\xe6\x64\xff\x28\x60\x66\xfb\x7a\xd9\x53\x61\x98\x9a\xd1\x82\x1d\xc4\xc1\x05\xd6\x2c\x58\xcd\x94\x9d\x78\x77\x9f\x87\x60\x5e\x50\x51\x56\x0e\xfa\x1c\x77\x11\x61\x1f\x0c\x53\x76\x91\xba\xe4\xb3\x24\xe5\x71\xdb\x80\x59\x40\xf9\x36\x62\x1d\x30\xf0\xb6\xcf\x1a\xa4\xc2\xab\x47\x22\x3a\x79\xba\x65\xf5\x7d\xd3\x2c\x0b\xe8\x38\xc0\x94\x2e\x41\x8f\xa4\x00\xad\x18\xc4\xfd\x52\xb6\x0a\x13\x6e\x43\x1e\x65\x21\x95\xb2\xfa\x39\x10\x44\x35\x51\x6c\xce\xb5\x81\xee\x30\xbe\xab\x25\x76\x98\xd8\x1a\x1e\xcf\x4e\x65\xf2\x85\x94\xbd\x5b\x90\x8e\x92\xc7\x70\x16\x5d\xa3\xe4\x15\x2f\xbd\x41\x17\x9f\xcf\x5c\x93\x86\xea\x08\x3f\x9d\x6a\x2d\x0b\x0e\x01\xb0\x8e\x8b\x92\xc7\x47\x4f\x28\x98\x8b\x25\x33\xd6\xba\x17\xac\x87\x7c\x1b\x27\x19\x4a\x42\x9b\xa6\x4a\xae\xb4\x19\xcc\x16\x42\x96\xec\xac\x9d\x56\x5c\x2f\xce\x77\x25\x71\x6a\x13\x4d\x58\x9c\xbc\x56\xd1\x74\x53\x02\xd5\x80\xa4\x2d\xa1\x39\x58\x5c\x56\x5f\xb2\x06\x26\x97\x02\x5c\x5d\x54\x6b\x3f\x6a\x2c\x6a\x24\xe8\x9d\x15\x33\xcc\x7f\x95\xae\x47\x77\xef\xed\x7a\x4f\x58\x9b\xdc\x7e\xfa\x83\x68\x7a\x9f\x17\xb4\xaa\x06\x78\x3e\xfa\x2a\xb6\xd7\x5e\xd0\x05\xe0\xfb\x58\xe0\x86\xe1\x76\x2f\xf9\x59\x86\x92\x32\x3c\xbd\x26\xd8\x01\x34\x5d\xc5\xdd\xb8\x70\x3a\x6a\xf3\x2f\x85\x5f\xdd\x91\x55\xc8\xfd\x0f\x02\x07\x20\x7c\x17\xee\xe3\xa7\x74\xb6\xa7\x74\xb6\x8f\x5c\x5b\xb7\xe9\xc8\x53\x3a\xdb\x5d\xaf\x5d\x4c\x67\xdb\xb9\x94\x73\xef\xb8\xc6\xe3\x91\x96\x63\x40\x13\xc4\xa4\xab\x16\xcb\x7d\x82\x96\x3a\x54\x0b\xfe\x08\xee\xc0\xd6\x52\xbe\xf1\xbd\x0e\x8d\x51\x7c\xda\x9a\x74\x51\x9c\x37\xd7\xb0\xa3\x07\xcc\x53\xa6\x9d\xce\x30\x76\x4b\x56\x44\x87\x87\x73\xf2\x87\x13\x2d\xd2\x34\x06\x9a\x4a\x93\x60\xbb\x80\xd9\x82\x1f\x3e\xd3\xa4\x94\x45\x5b\x33\x61\x3a\x0e\xe9\x6a\x5d\x30\xce\xb2\xc5\x53\x95\x96\x25\x47\xa5\xe4\x2c\xc3\xf9\x3a\x48\x1c\x95\xf2\x5a\xd8\xf3\xe8\xf0\x2c\x09\xe1\xb7\x8f\xee\xdb\x3d\x2b\x76\x63\xf8\x8f\x89\xfd\x9c\x4e\xa1\x27\xbd\x6b\xb9\xfa\x94\x32\xb9\xf1\x11\x79\xb6\xe9\xa6\xc8\xac\x91\xa4\xd5\xec\xd6\x94\xc8\x2e\xb2\x9a\x75\xe4\xa7\xec\xcc\xdd\x08\x0b\x3f\x65\x67\xa6\x8e\xfc\x94\x9d\x99\x36\x7c\x4f\x9e\x9d\x62\x8a\xa5\x55\xe7\x2a\xd7\xdb\xb3\x77\x3e\xb8\xcc\x84\x01\x0b\xb5\x5b\x59\x65\xc7\xdd\x99\x88\xce\x8d\x55\xe0\xdf\x15\x3f\x0c\xca\xc2\x2e\x0e\x1e\x15\xcd\xf9\x43\x13\x8c\xcd\xcf\x21\x03\x6d\x07\x32\xc8\x60\x2e\x07\xf8\x04\xf1\xea\xa3\xc5\x75\xd0\x83\xd8\x8d\x1b\x53\x74\xa3\x1c\xe1\x46\x96\xaf\xb0\x01\x35\x15\x42\xa2\x8a\xaa\x47\xd8\xc0\x5b\x8f\x1c\xf8\x05\x18\xa9\x0d\x2d\xd0\x4b\xd6\xf2\x12\x64\x6a\x87\x50\x99\x8a\x1d\x87\x57\x16\x2e\x20\x99\x38\x81\x00\x37\xc0\x14\x9d\x0d\x61\x09\x92\x8d\x2d\xec\x45\x1b\xfe\x23\x53\x7a\x40\x6f\xbb\xee\xea\x37\xde\xc5\xa7\x7a\x6e\xd0\xc5\x82\xd5\x14\xfe\xf9\xda\x4f\x81\x15\x90\xd6\xea\x34\x0c\xdb\xd7\x31\x55\x6b\x22\x67\xa3\x5e\x05\xf6\xde\xd5\x90\x8e\x6e\xfe\xca\xe4\xcc\x20\x7e\x33\x9d\x0d\x4e\x37\x22\xab\x13\x76\xd6\x4b\x0e\xb2\x1b\x09\xf4\x48\xbb\xb7\x7c\xf8\xa9\x4b\xd4\x86\x43\x04\x67\x78\x87\x26\x27\xbf\xa7\x06\xaf\x5d\xcb\x0a\x4d\xcd\x06\x1d\x85\x8c\x81\xbe\xca\x3e\x90\x9c\xa7\x6c\xd0\xfe\xf5\x94\x0d\xfa\x94\x0d\x9a\x35\x1b\x34\x52\x76\xfc\xb9\xb5\x21\xb1\x33\xce\x63\xf0\xd9\x9d\x53\xe6\xed\x7e\xe7\x71\xf0\xc9\x99\x3e\x33\x53\xaa\x7e\x01\xca\xb3\xc9\xe4\x19\x96\xa0\x74\x2e\x8a\xd6\xcc\xc6\x7f\x20\x4c\x14\xb2\xb4\xcf\xb9\x80\xe7\x2b\x6d\x40\x85\xef\xe2\x3c\x31\x2d\xb5\x1f\x2b\x2e\x62\x81\x67\xe7\xd0\xa8\x06\x1f\x15\xbe\x97\xe3\xeb\xfc\x8a\xe9\x60\xe1\xde\xa9\xb3\xa1\xe3\xa4\x9b\xe2\xc2\x67\x34\x39\xbd\xd6\x7f\xaf\x49\xc5\x6b\x0e\xed\x4d\x4a\x90\x70\x4c\x9b\x61\x81\x2e\x42\xf6\xf1\x91\x93\xa2\x69\x47\xee\xf1\x93\x9a\xd5\x52\x2d\x47\x61\x08\xfb\x65\x6f\x4c\x77\xc7\x01\x28\xd1\x45\xab\x14\x13\xa6\x5a\x0e\x03\x7c\xef\xae\x1d\xd4\xa6\xfd\x0a\xec\x88\x32\x1d\x18\x64\x48\x23\x86\xee\xea\xcb\xa0\x2e\x9f\x0e\x42\xcd\x61\x16\xe1\xec\x74\xc0\x7e\xa3\x2e\x8b\xd1\x7e\xca\xc4\x15\xb9\xa2\x4a\x0f\xdb\xf3\x24\xaf\xfe\x5c\xf2\x2b\xae\x65\x72\x0e\x5a\xf4\xa0\x78\x7a\xce\x43\x04\xcd\xee\x54\xd9\x9a\xa6\x35\xee\x38\xf1\xdb\x97\x7d\x68\xa4\x55\xd2\xc2\xb6\x5d\x31\x34\x5e\xa6\x06\x28\xbb\xab\xa1\xc6\x30\x25\x5e\x91\xff\xbb\xff\xf3\x6f\xfe\x35\x3e\xf8\xf3\xfe\xfe\xdf\x5f\x8c\xff\xe3\x1f\xbf\xd9\xff\x79\x02\xff\xf8\xf2\xe0\xcf\x07\xff\xf2\x7f\xfc\xe6\xe0\x60\x7f\xff\xef\xdf\xbd\xf9\xcb\xc5\xd9\xc9\x3f\xf8\xc1\xbf\xfe\x2e\xda\xfa\x12\xff\xfa\xd7\xfe\xdf\xd9\xc9\x3f\x3e\xf1\x21\x07\x07\x7f\xfe\x5f\x83\x49\xa7\x62\xf9\x6e\xa0\x1c\xc6\x6b\x9c\x51\x1f\xe8\x3f\x31\x0b\xfb\xad\x58\x29\x5c\x98\xb1\x54\x63\x7c\xf4\x2b\xe8\x29\x3d\x70\x00\xcf\x5e\xb9\xf7\x7f\xa7\x83\x84\x73\x29\x18\x88\x3b\xb4\xc1\xef\xc3\x06\xcc\x5c\x72\x01\x29\x21\xc7\x7c\x6b\x68\xa3\x7e\xfc\x3e\xc4\x8a\x61\x75\x23\x15\x55\x4b\x52\xba\x90\xc3\xf2\x1e\xda\xc8\x0c\x6c\x74\x0d\xa4\x97\x3c\x65\x57\x6f\x39\x64\x59\xb3\x92\xb7\xf5\xb6\xa3\x95\x48\x45\xbc\xf0\xd7\x76\x89\x21\x63\x49\xce\x42\x06\xbc\xbb\xcd\xc5\x8c\xa7\xb4\xb8\x44\x27\x42\xe0\x8c\x21\x91\x25\x16\x43\x0e\xef\xed\xb9\x54\xd7\x9a\x51\x11\x22\xa7\x90\x96\x2d\x4b\xf6\x4c\x87\x7b\x91\xa4\x2c\xc1\x4a\x4c\xc9\x72\x35\x5d\xfb\x6e\x80\x03\x6b\x0a\xbd\x01\xfd\x75\x6b\x6d\xdc\x07\x70\x37\xc9\xd2\x98\x80\xff\x93\x7d\x6f\x75\xfd\x6d\xb3\x69\x20\xc4\xe7\xe8\x1b\x09\x6e\x1d\xd7\xe8\x6a\x46\x2a\x59\x44\x05\x1b\x3d\x55\x14\x18\xf5\xc4\x8b\xb8\xa1\xd9\x4a\x96\x5d\x2d\x35\x68\x03\x41\x48\xad\xd2\x98\x6f\xcd\x0b\x3a\xad\x18\xba\x8e\x80\x6f\x06\xf3\xa8\x1d\xac\xa6\x1f\x78\xdd\xd6\xa4\xd5\xf6\xcd\xa4\xe8\x3f\xbb\x7b\xb1\x6b\xdc\x9a\xb8\x57\x6a\x2e\xe0\x47\x3d\x37\x5b\x7a\xf0\x6a\xc1\xc8\x79\x58\x81\xce\xe9\x8b\xe9\x8b\xce\xa7\xa3\x5b\x30\xfd\x1d\x75\xce\x00\x95\x33\x48\xb3\x0d\x76\x88\x26\x80\xe7\x90\xdc\x38\x93\xac\x0b\x0c\xc1\xab\xbe\xc4\x00\xf9\xb5\x88\x16\xa8\x15\xae\x1e\xea\xb1\xee\xe3\x47\xa7\xc5\x0f\xd4\xdd\x73\x69\xec\x59\xf4\xf4\xec\xda\x79\xa8\x2f\xdb\x9a\xba\x17\x0a\xdc\x7a\xfa\x9e\xf3\x47\x6f\x28\x76\xa3\xbe\xce\x28\x08\xd8\x21\x30\xeb\x17\xc1\xf7\xed\x94\xc7\x62\x59\xb8\x06\x42\xbc\xcb\x51\x0c\x79\x6a\xb8\x77\x01\x88\x67\x6c\xff\xcf\xfb\xc8\x7d\xfa\xd2\x94\xcd\x30\xbd\x1f\x7f\x03\xfe\x45\x9d\x06\x09\x84\x51\x82\x8a\x19\x40\x1e\x62\x22\x3c\x14\x6a\x14\x6a\x79\x65\x45\x48\xd2\x93\x7f\xd0\x2e\xc1\x8e\x27\x6e\x0b\x7a\xd0\x43\x94\xd4\xe8\xf0\x13\x8c\x95\x88\x92\x54\x75\x33\xa0\x5a\x91\xf8\xfe\xd3\x03\x32\x63\xd4\xb4\x0a\x73\xd7\x85\x54\x10\x11\x41\x21\x86\xae\x7c\xc5\x2c\x0b\x40\x63\x27\x25\x6b\xa2\x05\x6d\xf4\x42\x1a\x70\x1b\xd3\x86\x16\xdc\x24\xc3\xdb\x18\x45\x8b\x4b\xfb\x64\xc8\x62\x82\x37\x4b\x7b\x8d\xe2\xc0\xd5\xe8\xc7\xbc\xda\xc7\x95\x32\x0b\x25\xdb\xf9\x02\x80\x87\xf0\xae\xa2\xa2\x1a\x51\xae\xd2\x12\x10\x37\x8e\xe9\x1c\x9d\x9a\x94\x4b\x41\x6b\x5e\xf8\xf5\x83\x2a\x32\xcd\xa5\x4b\x30\x01\x5a\x52\xa7\x8d\x92\x33\xa6\x34\xd7\x86\x09\x83\xb9\x2e\x47\x15\xe5\x35\xd9\xd7\x8c\x91\x13\xbf\xd5\xf1\x9b\x73\x34\xd3\x31\xb8\x95\x5e\x76\x10\x27\xcf\xb8\x26\xa3\x0e\x47\xda\x7e\xe2\x83\x7a\x51\x42\x69\x7a\x0b\x08\xb7\x2b\x37\xbe\xe2\xc1\x80\xcd\xb8\x79\xce\xa4\x82\x0a\x21\xe7\x9f\xbb\x62\xa2\x94\x5d\x62\x75\xd2\x58\x87\x67\xa7\x3a\x76\x88\xa2\x4c\x6b\x70\x74\xf8\xc2\x35\x41\x0d\x9d\x0b\x83\x44\x4c\x1a\xcf\x2a\x5c\x82\x70\x51\xf2\x2b\x5e\xb6\xb4\x42\x55\x2b\x79\x9a\x8e\xce\x4f\x91\x48\x3e\x5f\x98\xf1\x35\x83\x70\x22\xea\xda\xdd\x29\xe2\x5f\x8d\xaf\x95\xcc\x72\x0d\x4a\x99\x21\x46\xa6\x09\x24\xe6\xc2\xd8\x76\xd2\xae\xe9\x12\xba\x79\xbb\xb2\xc7\x5e\xa6\xb9\x5b\x31\x37\xec\x4c\xa6\xe9\x0c\xb5\xd7\xf2\x1c\x73\x27\x4e\xdc\x21\x88\xe1\x82\x0a\x30\x5d\x21\x0a\x6d\xf9\x1f\x64\xea\xfa\xac\xa5\x4a\x9c\x26\x70\x70\xf7\x28\x54\x7c\x35\xb5\x3b\x2e\xd1\x23\xb3\x65\xaf\xc8\x55\xb7\x1b\x2f\x58\xdd\x54\xd4\x6c\x3d\xa1\xfb\xa7\x28\x28\x1f\xe5\x0a\xda\xa3\x83\x8a\x72\x4c\x2b\x2b\x32\xce\x7e\x3c\x72\xd0\x65\x28\xd8\xb3\x54\xc6\x5c\x78\xf5\x43\x38\x0b\x07\x4d\xd9\x8d\x32\x1d\xba\xeb\x4d\x59\x09\xfa\x80\xa3\x78\x48\x29\xa5\xbc\x16\x4c\xf9\x7d\x75\xf6\xe3\xd1\x88\xf0\x09\x9b\xf8\xbf\xc2\x10\x5e\x5d\x32\x72\x8e\xe0\x14\x1e\x22\x27\x3d\xc3\x50\x96\x13\x7c\xf5\x38\x7e\x1d\x8f\xf9\xcb\x1f\xed\xa4\xd8\x6f\xff\x34\xfe\xa3\x3b\x60\xe0\xaf\x5f\xac\xd6\x36\xa0\x9a\xee\x97\x95\xa7\xc5\x78\x00\xa0\xee\xd8\xbf\x7e\x39\x93\xe5\x79\xc3\x8a\x09\x4e\xbf\xfe\x65\x50\xd2\x2b\x21\x4c\x18\xb5\x9c\x90\x33\x09\x15\x32\xbc\x44\x81\x06\xef\xaa\xd8\x7f\xfb\x84\x0c\x60\x83\x10\xf5\x2d\xa8\x61\x02\xb4\x5f\x91\xde\xfb\x9c\x78\x5c\x4d\x18\x16\xc4\x3c\x85\x79\xde\x87\x50\x1d\xc2\x8b\x8f\x88\x91\xd8\xa8\x3b\xf5\xb4\xb5\xd7\xa1\x20\xec\x03\xd7\xd0\x47\x04\x57\x12\x98\x84\x3a\x68\x03\x6f\x72\x58\x62\x2c\xdf\x85\xbe\x38\x8d\x4c\xcf\xb8\x85\x19\xfc\x52\x48\xf3\x65\xd8\xbc\xbe\x62\x0d\x6c\x0b\x49\xe8\x95\xe4\x25\x69\x35\xe8\x9c\x82\xb4\x02\x52\x16\x06\x40\xc8\x3a\xee\x99\x2e\x49\xcd\xb5\xa1\x97\x6c\x42\xce\xad\x39\x12\xa7\x11\x23\x4f\x09\x32\xad\x64\x71\xc9\x4a\xd2\x0a\xc3\xab\x41\x9e\x99\x40\x37\x4c\x6d\x64\xaa\x00\x68\x6c\x5b\x58\x2d\xb7\x51\x6c\xec\x0d\x26\xbc\x6b\x80\xc7\x18\x0f\xf4\x30\xab\xdd\x5a\x8d\xc2\x56\x5d\x50\x74\xdd\x36\x25\x0c\xe9\x6a\x5f\x07\x0a\xa3\xb5\x3a\x7d\x3b\x9f\x12\xfe\x76\x7f\x00\x93\xe9\x09\x79\x0b\x96\x4b\x95\xbe\x29\xb1\x68\x02\xbd\xdd\x2e\x43\x46\xb0\x82\x69\x4d\xd5\x12\x0b\x8b\xb9\xf1\x35\xed\xad\x66\xb3\xb6\x02\x83\x31\x7d\x52\xa9\x68\x2d\xc1\x44\xb1\x42\x0a\x6d\x54\x5b\x00\xd7\x50\x32\x55\xf2\x92\x89\x0e\xe8\x63\xc0\x61\x12\x57\x4c\x77\x45\x9d\x56\xbd\x16\x92\x14\x0b\x2a\xe6\x2c\x40\x09\x93\x9a\x96\xc0\xc9\xdf\x05\xe7\x47\xfa\x64\xca\xc0\x17\x74\x66\xac\x5a\x68\x80\x41\xa6\xd6\x4a\xf0\xd9\x48\xe9\x2f\xf6\x3e\x14\x7c\xd7\x51\x42\x93\xe0\xd5\x16\x4b\x0d\x87\x67\x94\x8c\xc1\x5a\x4d\x75\x18\x66\xc8\x20\xa9\x99\xa1\x25\x35\x74\x57\x30\x04\xde\xd0\x65\xc8\x4c\xc3\x9c\x7d\x60\xdd\x28\x97\xdf\x99\x09\xde\x3f\x24\x1b\x1e\x03\x5a\x9f\xfd\x78\x34\x68\x7c\x70\x08\x01\xb7\x42\x37\x2c\x63\xa5\x8c\x4b\x5d\x84\x5d\x85\xd0\x11\x1e\x11\xc0\x92\xe6\x29\xc1\x63\x9c\x95\xa4\x6c\x07\x47\xb3\x3b\x15\x61\x48\xee\x54\x96\xcc\x29\xcb\x9f\xbb\xc2\x1c\x17\x5d\x32\x7a\xd1\xaf\x4e\xdf\x68\xe8\x63\xce\x22\x13\x86\x2b\x16\x01\xae\x0f\x22\xc1\xf1\x5b\x2b\x50\x92\xf6\x39\x0f\x59\x73\xce\x8c\xee\xca\x2e\x51\xa1\x1c\x38\xaa\x71\x46\x12\xbe\x11\x58\x7e\x9e\x1b\x5d\xac\x65\xe3\x04\x0c\x1a\x13\xf9\x5c\x4b\xa7\x38\x5a\x95\x7b\xeb\xcc\x98\x2f\x6b\x8e\x16\xf6\x9c\x7f\x23\xcb\xe1\xe9\x77\x79\xf3\x40\x7b\xa4\x75\xe0\x36\x88\x01\xa5\x21\xdc\x89\x37\x40\x2a\xb5\xee\x81\xdb\xa3\x26\xb3\xa0\x57\x83\x01\xa0\x93\x63\x61\x9d\xbf\x62\xec\xc3\x62\x48\xee\x18\xc8\x1d\xbf\x1c\x48\xd8\xf0\x02\x44\x7f\x0d\x2c\x44\xec\x13\x94\x25\x47\xec\x1e\x20\x5e\xfd\x65\x8f\xf8\xf3\x2c\xf9\x61\xb9\xb9\xbd\xa3\xcc\xa9\xad\xae\x5c\x20\x14\xb6\x38\x58\x4c\xc6\xed\x21\x3c\x7c\xbd\xbe\xec\x99\xa9\xce\xb9\x12\xe2\x1b\x08\x29\xb5\xef\x03\x1e\x13\xc7\xd6\xbe\xfb\x56\xff\xf6\x83\xcc\xc4\x80\x55\xbe\xd9\x07\x3e\x78\xa4\x53\x57\x1d\xe9\x3d\x57\x4c\x41\xa5\x4e\x04\x6d\x69\x45\x8d\x92\x55\xc5\x14\x2c\x81\x0b\x6a\xac\x14\x80\xd9\xd5\x22\x98\x06\x98\xde\x8f\xc3\x5f\x3e\xcc\x17\x5c\x6d\x82\x5d\x07\xeb\x9a\x6a\xec\x74\xed\x33\xe0\x21\x7c\xe9\xab\xfa\x36\xd1\x33\x5c\xe4\xfd\xe4\x83\x81\x87\x62\x89\x93\x7f\x1c\x31\x27\x86\xcc\xc8\xdc\x92\xca\x35\x61\x82\x4e\x2b\x6b\x8e\x44\x0c\x1c\xe8\x5c\xd1\x4e\x8d\x8c\xee\x7a\xcf\x66\xc3\xa7\x0e\x62\x98\xf1\x23\x3f\x6d\x6c\x54\x6f\x7b\x3f\x9c\x74\xb5\xb0\xce\x37\x93\xa1\x21\xb0\xbf\x1c\xd7\xf5\x86\xe8\xd7\x47\xad\x50\x13\x77\x9b\xd9\xf8\x06\x43\x69\xca\x56\x4d\x90\xaf\x9e\x00\xfa\x85\xf0\xc4\xf8\x40\xff\x31\x83\xfc\x84\x78\xe5\x2b\x4b\x80\x2a\x5f\x28\x09\xcb\x91\xdf\x9d\xfb\xdc\x21\x18\xb6\x03\xfa\xbc\x0b\x78\x0e\x7f\x78\x9b\x22\xe4\x3b\x4f\x99\x95\xce\x5d\xf3\xa9\xe1\xfb\x82\xe0\xde\x88\xc7\xdf\x50\x3a\xd8\x89\xb9\xef\xb8\x28\x43\x11\xa7\x07\x85\xb5\x0a\xda\xe1\xd9\x29\x52\x9d\x87\xa6\xd7\x70\x26\x2c\x9d\xc1\x6b\x16\x5c\x95\xe3\x86\x2a\xb3\xc4\xd0\xd6\xa8\x47\x71\xc0\x73\xcc\x30\x74\xd6\x4c\x7b\xbb\x99\xb2\xb3\x1c\x2c\x81\x4f\x4b\x74\x79\xb3\x37\x72\xc8\xae\xcd\xc8\x50\x94\x48\x7f\xf5\x66\xe4\x6d\xd7\x0e\x2d\x04\x71\x1e\xc9\x8c\xdc\x57\xc5\x38\xe9\x9f\x66\xbb\xab\x6b\xdb\xa3\x56\xf7\x6b\x97\x50\xf5\x05\x7f\x85\x0b\x43\xca\x18\x36\x2c\x58\x99\xe0\xe5\xb7\x4f\x1a\x11\x3e\xb3\x4a\x9b\x14\x63\xc8\x7c\x1c\x4c\x5e\x97\xf6\xe4\x2c\xdd\x89\x2b\x6f\x46\x0f\x3c\x08\xa6\x88\xca\x68\xe8\x4e\x0e\x92\x7d\x21\xd3\x1d\xf4\xfe\x02\xd9\x8a\x63\x1d\x60\x45\xfb\x0d\x99\x24\xd3\xe1\x2d\xac\x48\xa7\x79\xc6\xae\xfb\xe8\x2c\xf0\x2a\x31\x17\xa5\xdd\x54\xa0\x22\x81\x53\x5f\xb7\x45\xc1\x58\x08\x19\x3a\xb1\x34\xdc\xa4\xed\x9d\x3d\x6e\xca\x6b\x6a\x8a\x05\xd3\x44\x4b\xe8\x75\xac\x0d\xad\x2a\x56\x86\x54\x27\x64\x14\x09\x56\x85\x4b\x83\x1a\x4c\x47\x64\xac\x0c\x9f\xe2\x28\x30\xe2\xa2\xae\x4d\x45\x5d\x50\x69\xd6\x8a\x02\xeb\x17\xb9\x59\x86\x2c\x93\x55\xc3\x14\xfc\xd0\x1a\x62\x6d\xc3\x4d\x9f\x19\x66\x8c\x44\x3e\xe5\xc0\xcc\x70\xf8\x2f\xf1\xb8\x5f\xd0\x2b\xd6\x65\x7b\xb8\x2e\x91\xf6\x94\x0e\x50\xb7\x19\x78\x3d\x82\xca\x1d\xa1\x85\x10\x2b\xec\xe2\x59\x9c\x0c\xce\x45\x6e\x53\x26\x9e\x87\xfd\x68\xd2\xd7\x4c\x9c\x83\x60\xda\x68\x66\x02\x88\xf7\x70\x8d\x97\xb8\xfc\x79\xda\x1a\x59\x53\xc3\x0b\x08\xd1\xf1\x59\x94\x24\x56\x63\xe2\x85\x95\x34\x3e\x11\x1e\x55\x24\x50\xdc\xdc\xba\x65\x12\x03\x9b\x8d\xa5\x7b\x98\xf8\x68\xae\xdd\x2a\xf7\xa7\xd5\x4f\x4b\xa4\x7a\x66\x7a\xcf\x0b\x8f\x88\x4c\xcc\x42\x31\x46\x78\xdd\x48\x65\xa8\x30\xa4\xe4\xb3\x80\xd1\xed\x33\x0c\x6f\xe3\x89\x1c\xfe\xa0\x9f\x20\xaf\x36\x1a\x05\x03\xa6\x55\x25\xaf\x35\x31\xd7\x32\x84\x1c\xba\xfc\x2e\x87\x79\x3c\xea\x13\x93\x41\xc7\x71\xa3\xda\xa3\xce\xf2\x55\x74\x0e\x8d\xac\xec\xb9\x66\x55\x65\xff\x7b\xdb\x69\x34\x18\xc7\x64\xe3\x9c\xf0\xb9\x40\x18\x5a\xae\x7d\xf0\xcb\x61\xa8\xec\x97\x4a\x36\x8d\x4b\x7e\xa8\x0f\xf2\xcf\x09\x24\xaf\xab\x2b\xa6\xa1\xc8\xc4\xe3\xba\x58\x56\x98\x33\xc1\x14\x35\x90\x5e\xe7\xfa\xb9\x82\x4a\xb2\x4a\xe4\xd0\xa0\x0f\x5e\x19\xfd\x22\x1f\x61\x3a\x4c\xbd\xdc\xcc\x64\xfe\x1e\xf7\x6d\x86\xf7\xe2\x02\xf9\xcd\xcb\x9d\x0c\x0c\xb4\xff\x2d\x33\xf4\x80\xfc\xa0\x91\x2d\xc2\xc9\x1b\x70\x78\x3e\xc9\xcb\xe6\xf0\xd6\xd1\xd1\x96\x81\xa8\xc3\xaa\x59\x44\x54\xc5\x7e\xa9\x00\x21\xd7\x9f\xeb\x1e\xbd\x47\x4a\x6a\xfd\xd6\xff\xe4\x01\x49\x7f\xf2\x59\x7d\xe4\x7a\xf2\x59\x3d\xf9\xac\x9e\x7c\x56\x70\x3d\xf9\xac\x56\xaf\xcf\xc5\x67\x45\xba\xe3\x6a\x57\x65\xd3\xdb\xd8\x74\xe9\x1f\xb0\xf7\x3c\xcf\x84\xbc\x95\xc6\xa5\x18\x83\x05\x4b\x6f\x0c\x3a\x51\x38\xa1\xaf\xe9\x72\x22\x98\x71\x9d\x4c\x7c\x7c\xf7\xbd\xa7\xe9\x2f\xca\x5a\x23\xce\xf5\x11\xc9\x0d\x2f\xc8\x7c\x7b\x9b\x68\x14\x23\x51\x35\xeb\x32\x9e\xe1\xf3\x67\xda\xe5\xb5\xda\xef\x01\xb2\x30\x7e\x40\xc1\x26\xe4\xdc\xd5\xba\xac\x0c\xbe\xde\x64\xa1\x64\x86\xf2\x21\xbd\x9b\xe2\xcb\x6b\x43\x17\x37\x68\x67\x5b\xd3\x76\x48\xce\x6d\x13\x40\x97\x76\xcd\x15\xdb\x81\xb8\x45\xd5\xb9\x71\x4d\x7f\x77\xc3\x7d\x65\xf8\x9c\xce\xc8\x7b\x56\xc8\x2b\xa6\x70\x75\x4f\x3e\x34\x54\x68\x2e\xc5\x6b\xca\x2b\xbb\xb6\x7e\x8d\xbb\x68\x37\x69\x35\x53\xfd\x14\xc8\x28\x45\x23\x6c\x70\xc7\x48\x96\x7b\x87\x1b\x28\xa1\xbb\x89\x1d\xcf\x55\xd0\x35\x8a\x5d\x71\xd9\x6a\x8f\x7c\xd0\x1a\xd4\x34\xb4\x71\x1e\xa2\x05\x9f\x2f\xfc\xcd\xbe\x62\x15\xb2\xae\x55\x19\x36\xf1\x60\xca\xb4\xa1\xa6\xd5\x7d\xf8\xe9\x02\x12\x0f\x77\x28\xfb\x2a\xf0\xd1\xee\x18\x21\x39\xd5\x75\x44\xa0\xd8\xd5\x03\xf1\x7b\xc4\xc7\xc0\x47\x4f\xdd\x5e\xf6\x50\x1f\x1d\xac\x49\x21\xeb\xa6\x35\x2c\xda\xf3\x6e\x77\xe5\x11\xf5\x77\x64\xa6\x5e\xff\xa7\xe7\x35\x15\x74\xce\xc6\x81\xb4\x71\x87\xf2\xf1\x3c\x9b\xa4\xcf\xc2\x56\x24\x7b\xf3\x9f\xf8\x7a\x74\xe8\x1c\xfd\x2b\x1b\xce\x1e\xb9\x17\xac\x3d\x92\x1f\x6f\x8f\xdc\x3f\xe6\x1e\x09\x10\xa8\xbb\x2a\x80\xde\x3b\xfa\x56\x45\x90\x53\x32\x6e\x13\x41\x39\x4d\x65\xa7\x6c\x38\x5a\xb8\x26\xb2\xe6\xc6\x30\x5f\x8e\x18\x44\xca\x88\x70\xd3\x43\xc7\x74\x02\x14\x02\x9c\x58\x3d\xc8\x3e\x34\x15\x2f\xb8\x89\xda\xd7\x25\x02\x48\xac\x5e\xe0\x40\xb8\xe6\x1a\x55\x79\x41\x78\xdd\x54\x2c\x68\xe0\x63\x87\x2e\xe4\x83\x70\xe1\x6d\x0a\xa8\x4d\x21\xec\x03\x84\x62\x91\xe0\x27\xb9\x7d\xc7\xeb\x49\x6e\xdf\x70\x3d\xc9\xed\xec\x72\x1b\xb1\x4b\x87\x43\x01\xf7\xe4\xb5\x7f\xa8\xeb\xbe\x44\xa7\xac\x22\xbf\xb6\x4c\x2d\x89\x35\xb0\x3a\x5c\x10\x69\x85\x9d\xe6\x25\xe2\x57\xf8\x9c\x8e\x1d\x8a\x10\xe4\x54\xce\x21\x67\xe4\xe4\x83\xb5\x6f\xa1\x2b\x45\xf6\x53\x72\x75\x80\x7e\xef\x2b\x5c\x85\xb0\x32\xb1\x55\x8a\x85\x54\xf1\x27\x60\x62\x1e\xbe\x3d\xce\xe9\xc0\xc8\x51\xa6\x42\xf2\x95\xaa\x90\x7b\x52\x32\x08\x39\xbc\x65\xae\x71\x4d\xc2\x37\x70\x8e\x87\xb2\xa6\x10\xcd\x25\x97\x6c\x39\x72\xa5\x9e\xc4\x72\x20\xf5\x37\x67\x22\x11\xab\xe7\x51\xfd\xb9\x64\x98\xc7\x31\xac\x57\x69\xff\xca\x7c\x20\xe6\x0c\xd5\xe1\x35\xb6\xaf\x9d\xed\x59\x7e\x89\xf2\x9c\xd1\x99\xcf\x7c\x62\x5f\x35\xd7\xa3\x56\xf6\x8c\xe5\x1d\xe7\xdd\x46\x9e\xb7\x1f\x04\x34\xca\xc0\xe6\x80\x14\x0a\x02\x3f\x0f\x7b\x91\xdc\xc1\x04\xbc\xfc\x32\xde\xd3\x64\x65\x13\x30\x24\xa2\xb5\x8f\x67\x78\xc9\x96\xcf\xb4\x6b\x43\x22\x85\x5e\xf0\x06\xd4\x77\x48\x66\x92\xb3\xac\x5b\x1c\xaf\x1f\xa1\x1c\xd6\x13\x83\xe7\xc6\xa9\x18\x91\xb7\xd2\xd8\xff\x9c\x00\x38\x05\x88\x97\x63\xc9\xf4\x5b\x69\xe0\x93\x9d\xe6\x02\x9c\xa4\xc7\xc0\x03\x2e\xe7\x88\x43\xc6\x0f\x1c\xaf\x88\x5f\x0d\x58\x85\x6e\xad\x7d\xd5\x51\xe0\x17\xae\xc9\xa9\x20\x52\xb9\x25\xca\x48\x0e\xb8\xe6\x91\x24\x24\xc6\xc7\xbb\xbb\xa4\xc0\x4d\xd4\x38\x1e\x91\xaa\xc7\x22\x0f\x42\x98\x23\x0a\xa2\x3e\xf8\x0d\x44\xb7\x20\x17\xd6\x43\x17\x00\xe8\x95\xa2\x86\xcd\x33\x24\xf1\x76\x57\xcd\xd4\x1c\xfa\x04\x15\x8b\xdc\xbb\x21\x97\xa2\x85\x57\x46\x75\x0b\xaf\x7b\xd8\xb2\xf7\x5a\x2d\xfc\x20\x03\x80\xee\xfe\x3d\x40\x7c\xec\xaa\xf7\x2c\x22\x11\xb5\xd8\x9a\x36\x56\xde\xfc\x3f\xab\xac\xc2\xf6\xfa\x1f\xd2\x50\xae\xf4\x84\x1c\x12\xcd\xc5\xbc\x62\xbd\xef\x5c\xb0\x38\x7a\x4c\x26\xb2\x20\x97\xc5\xea\x87\x57\xb4\x62\x88\xd3\x44\x05\x61\xe8\xae\x02\x7c\xee\x15\xc3\x68\x44\xae\x17\x52\xa3\xe6\x1b\x4a\x0c\xf6\x2e\xd9\x72\x6f\x94\x25\x14\x46\xe2\xf3\xd9\x3e\xfa\x54\xec\x75\x8d\xe0\x7a\x92\x28\xe8\xfe\x90\xf1\xb8\x07\xdf\xed\x3d\x8c\x3d\xf6\x08\xdc\x55\x8f\xa2\xc8\xc9\x85\x1b\x8f\x2a\x8a\x29\x02\xbb\x16\x5c\x5f\xa5\x6f\x35\xe3\x07\x90\xee\xa3\x7b\xba\xf4\x0e\x87\x72\xb6\x73\x51\x5c\xc0\x2d\xce\x04\x9e\x91\x81\xb9\x90\xac\x43\x63\x14\x9f\xb6\x86\xe9\x9d\xe5\x84\x1b\x09\x8d\x60\xdd\x42\xff\x54\xbb\xf2\x3f\x6e\xfa\x41\x84\x80\xc7\x75\x2e\xe6\x38\x9d\xad\xe6\x4e\x46\x90\xba\x31\x2e\x82\x54\x0e\x61\x6f\xad\x0a\xcf\xfe\x4d\x03\xa9\x0e\x43\x7d\x78\x3a\x55\x97\xac\xa9\x98\x6e\x24\x56\x9d\x6d\x9c\x18\xa7\x48\x2e\xa8\x86\xac\xfb\x99\x4b\x8a\x6a\x5a\xd5\x48\xc0\x42\xa7\x62\x6d\x33\x66\xc1\x8d\x70\x20\x21\x1e\x84\x09\x01\xe7\xc2\xce\xb5\xfb\x3d\xf4\xbf\x3c\x5c\xe9\xfc\x22\x15\x34\x93\x70\x85\x01\xa2\xe4\x85\xf3\x0b\x51\x43\x44\x1a\x80\x71\x7c\x6d\x66\x20\x5f\xb9\x84\x6e\x81\x00\x7f\x8f\xac\xe4\x4d\x04\xa4\x9d\x09\x03\x39\x36\x82\x9c\x8a\x19\xa3\x9a\x4f\x2b\xe6\x8a\x1b\xb4\xa1\x26\xc3\xfc\x45\x09\xf9\x6e\x1e\xad\x39\x0d\x5a\x04\x37\x7a\x35\xb9\x66\x9f\x8b\xa2\x6a\x81\x07\x04\xaf\x0e\xc0\x85\x4d\x45\xc1\x2a\xd4\x6d\x64\x19\xd0\xb8\xb2\xe1\x45\x44\x89\x44\x33\xa6\x14\xce\xd7\x74\xb9\x79\x37\x93\x52\x32\x4c\x45\x06\x20\x95\x11\xbe\xde\xe6\x0a\x19\xb7\x0c\xc3\x0f\x18\x9c\x2d\x4a\xce\x18\xee\x0e\x5c\x19\x42\xed\x51\x32\xab\x10\x07\xce\x9d\x25\x30\x43\xae\xd2\xe1\x3c\xca\x18\x1a\x21\x28\xa8\xc3\xee\x8c\x1b\x7f\x0e\x26\xcf\x01\x64\x6e\xeb\xfc\xc2\x65\x1a\x77\x92\x69\x0c\xc7\x17\x1b\x1c\x78\xcc\x7c\x7e\xbd\x19\xdc\xdf\xfb\xbe\x0e\x2c\x68\x13\xed\x5b\x62\xf4\x5a\x75\x75\x35\xd2\xf7\xa4\xb3\xfc\x08\x9b\x5e\xce\xc8\x6b\x5e\x31\xbd\xd4\x06\x8b\x1f\x79\x8d\x82\x0b\xcb\x43\xa5\x21\x28\x15\x30\x99\x0e\x05\x97\x3d\xcd\xf2\x04\xb2\xb2\xad\x70\x76\x95\xa4\x7b\xac\xd7\x29\x7d\x55\xf6\x1a\x6c\xed\xaa\x04\x82\x92\xdd\x50\x0f\x95\x65\xb5\x06\xcd\xd6\x2c\x09\xd6\xb1\x37\x1b\xb3\xa2\xef\x8b\x7d\xcd\xa7\x8a\x91\xa3\x05\x15\x82\x55\x51\xbf\x48\x97\xba\x41\x8d\xa1\xc5\x02\xa5\x39\x25\x56\x92\x54\xcc\x3c\xd3\x64\x21\xb5\x21\x35\x2d\x16\x5c\x84\x46\x53\x22\xf4\x4d\xed\x50\x80\x1f\x21\xd0\xfd\x4c\x5f\x58\x02\x12\xd7\x39\x97\x70\x41\x2a\x3c\xc7\xce\xba\x8d\x0d\x52\xc5\x48\x02\x69\x40\x19\x9a\xec\xad\x3d\x3b\xf4\x80\xf6\x52\x0a\xd6\x1a\x3d\x05\x70\x6e\xc2\xbd\xe9\x23\x9f\x7c\x98\x90\x3d\xf6\xc1\x7c\xb3\x37\x22\x7b\x1f\x66\xda\xfe\x47\x98\x99\xde\x9b\x90\xd3\x3a\x24\x0a\x71\x11\xa9\x11\xcc\xfd\x80\xf0\x19\x69\xc5\xe0\xa2\xce\xc1\x12\xab\x6a\x45\x16\xfe\x78\x56\xb5\xc2\x2e\xf1\x3b\xd7\x8a\xf9\x15\x79\x7d\x44\x0c\x55\x73\x66\xec\x18\x44\xb4\xf5\x94\xa9\xd4\x96\xad\x39\x12\x47\x86\xb7\xd9\x57\x8c\x96\xef\x44\x95\x1c\xdb\xcb\xb5\xa1\x3c\x1d\xfd\xf9\x3e\x8e\x12\xd7\x66\xb4\xd2\x8c\xec\xdb\x1b\x9f\x5f\x2b\x6e\xd8\xc1\x84\xbc\xf7\xbf\x82\xf2\x77\xd0\x45\x67\x72\x88\xbe\x87\x55\x23\xee\xa1\x9a\x19\xc4\x2c\x16\xce\x06\x79\x63\x37\x75\xb2\x16\x88\x0b\x3e\x95\xb2\x62\x89\x90\xee\xc8\x7b\x3f\xfd\xf4\x36\xd9\x35\xd6\xe7\xef\xee\x79\x37\xb1\xf9\xb5\x54\x55\x79\xcd\x4b\x57\x78\x44\xf6\xed\xcd\x07\xc3\x58\x7e\x48\x68\x61\x60\x20\x21\x77\x5b\xbb\x3c\x3e\xfc\xeb\x6b\x5e\xe6\x59\xd1\x01\x1b\x10\x88\xe8\xf3\x80\x77\x8c\x58\x1e\x20\xc0\x04\xbc\x64\xc2\x58\xe1\xae\x34\xd9\x87\x5f\xa4\xe3\x68\x9e\x70\xec\x7b\x02\xe3\x4a\x45\x0a\x59\x4f\xb9\xe8\xda\x12\x75\xbc\x69\x15\x18\x2b\x6f\x7d\xc4\x4d\x33\x83\xbd\x04\x00\xd5\x50\x9a\x05\xd1\xbc\x6e\x2b\x43\x05\x93\xad\xae\x92\xe1\x34\x9e\xd8\x73\xed\x9a\x55\xec\x03\xca\xbe\x6d\x35\x5d\xec\x28\xe8\x6b\xc6\x80\x54\xd1\x75\x86\x5b\x55\x8d\x93\xc6\xea\xe0\x91\xca\xe7\x41\xb5\x0e\x7d\x4e\xd8\x07\x56\x38\x14\xd5\xa6\x6a\xe7\x3c\xd1\x3b\x73\x6c\xdf\xa2\xa0\x86\x95\xaf\xc8\xeb\xee\xe5\x00\xa3\xcb\x7f\x33\x21\x47\x3e\xa7\xd1\x0d\x4f\x8e\xce\x4f\x8f\x5d\x73\x30\xa1\x0d\xa3\xdb\xd0\xdd\x87\x25\x50\x8d\x9d\x2b\x76\x0b\x46\x03\x0e\x9c\x45\xc4\x76\x1d\xda\x56\xe3\x1f\xee\x1b\xd7\x79\x3b\x74\x50\x1e\xd6\xcc\x6a\xb0\x48\x78\xb2\x97\xb6\x66\x2f\xc5\x0d\x97\x23\xb2\x4a\xd6\x30\x61\xcf\x3c\x11\xef\x7f\x9c\xe7\xad\xb1\x89\x84\x35\xce\xa4\x57\xba\x87\xf5\x95\xca\xc8\x47\xbe\x90\x55\xa9\x09\xfb\x60\x14\xb5\xc7\x7e\x6d\x0f\xf8\xf0\x9b\x19\xa1\x62\x39\x19\xa6\x62\x0e\x0a\x4b\xe7\x0d\x45\x0f\x5e\x99\xdd\xb6\xd0\xca\x27\x0b\x2d\xbe\x34\x2b\x14\x33\x03\x60\xd4\xb2\x35\xfe\xf7\x84\xf4\x97\xab\xf7\xf1\x9a\x83\x15\xbf\xf5\x20\x0d\x2e\xad\x64\x88\xdf\x58\x33\xa1\xb9\xe1\x57\xbd\xee\xa0\x00\x83\x4a\xb5\x0e\x7e\x48\x50\xa6\x9c\x00\xd4\x3d\x84\xd2\xe4\x81\x31\x3e\xc9\x67\x44\xc8\x95\xb7\x8a\xa1\x2b\x42\x9c\xb0\x77\x4b\xf2\xa0\x21\x0f\xa7\xc6\xc6\xda\x54\x00\xe0\x21\x3e\x7c\x04\x58\x6b\xf8\x6f\x4c\xc5\xb1\x73\x10\x79\x63\x61\x16\xd2\x67\xda\xcd\xde\xf6\xc4\x66\x8e\x94\xf3\xa1\x08\x35\x39\x63\x47\x6f\x23\xd5\xce\x83\x93\x0c\x0b\x2f\xf4\x3b\xc9\xb1\xd9\x8c\x15\x76\x6f\x40\xf7\x3a\xdf\x8a\xcd\x9a\xb5\x65\x8b\x00\x20\x1e\x90\xb4\x0f\x28\x3a\x14\x7a\x2f\x82\x99\xe8\xb2\x57\x4f\x85\x36\x14\x30\x22\xe1\x8d\xad\x9e\x66\x95\x27\xd7\x7f\xd0\x6d\x27\x8c\x5e\x7b\xa4\xc9\x81\x44\xd4\x56\x0d\x2b\x98\xb2\x3b\xa6\x5a\x92\x6b\x25\x87\x16\x6d\xdd\x31\xb6\x2a\xaf\x98\xba\xe2\xec\xfa\xb9\x43\xac\x19\xdb\x97\x1d\x3b\x10\xc0\xe7\xe0\xee\x7a\xfe\x05\xfc\x67\x00\x55\x99\xa2\x6f\xee\x94\x7d\x45\xf6\xf6\x72\xf8\x05\x06\xa7\xae\xcd\xa0\x09\x67\x92\x41\x95\xc7\x27\x00\xc3\xaf\x84\xca\xdc\x87\xce\x21\xf0\x29\xa1\x31\x77\xd6\x44\x0a\xb9\xdd\xec\xfe\x41\xae\x7d\x0b\xd1\x96\x4f\x3a\x90\xa5\x56\x88\xe4\xfa\xc2\xbe\xed\x8f\xc3\xf4\x0c\xff\x90\xe0\xc9\xc5\xd8\x28\xc6\xc2\xab\x1a\x67\x3e\x09\xe9\x1b\x9f\x07\xc3\xe6\x11\x06\xf1\x4a\x6a\xa8\x66\x66\x48\x30\x39\x97\xa8\x8f\x48\xb1\xf3\x1b\x4b\x7d\xf7\x15\xe4\x5b\x31\x40\xaa\xf6\xbd\x1d\xc9\xf8\x4f\xce\xf4\x17\xbd\x3b\xad\xd1\xef\xd6\x35\xfd\x24\x47\x44\x22\xe8\xd6\x82\x3e\x20\x1c\xbb\x63\x92\x6d\xd9\x88\xee\x2d\x7f\xf8\xe1\xf4\x38\x8f\x2b\xa5\x7b\x9e\xf7\x0c\xc0\xbf\xfb\xd3\xef\x36\x29\xd7\xa4\x15\xfc\xd7\x36\x76\x42\x43\xd7\xfe\xb0\x91\xdc\xfd\xdb\x98\x9d\x79\xc1\xba\xe4\x84\x63\xae\x2f\xb7\x25\x19\xd7\x08\xe9\xcb\xc8\xbf\x1c\x9d\x10\xf7\xe9\x6d\x99\x04\x49\x43\x3f\x4c\xf6\x41\x5f\x86\xfe\xe5\xe8\x64\xe5\x75\x57\xdc\xa8\x87\x55\xe5\x7d\x3d\x52\xe8\x00\xea\xe9\xa4\x6b\xa6\x29\x06\xd9\x6c\x35\x7a\xc5\x4a\xae\x30\x55\xcd\xbf\x65\x39\x29\x34\x0f\x4d\xcf\xe6\x97\x6c\xc2\x65\x94\x96\x9a\x36\x05\x83\xb2\xc8\xf4\x17\xf3\x82\x75\x09\xd1\x25\xd7\x97\x8f\xcf\x93\xdc\x94\x6f\xd3\x40\x6e\x3f\xb7\xf4\x93\x55\x77\xa7\x93\x9d\x4e\x09\x82\xdd\xbd\x94\x2d\xb9\x76\xbd\xc7\x07\xba\x59\x2f\x78\xf3\x8a\x9c\x08\xdd\x2a\xd6\x55\xe8\xae\x92\x60\x2d\xec\x7b\x77\xba\x42\x93\x7d\xfd\x6a\xcb\xa9\x2a\x3b\xb1\x15\x49\x8e\xb3\xbd\xa1\xca\x80\xd7\x73\xdb\xac\x1d\x08\xf1\x2a\x41\xf4\x81\xb8\x4f\xde\x3e\x9d\x79\x0c\xa5\x91\xeb\x0d\x8b\x9e\x7b\xae\xc3\xc3\xbb\x8c\x69\xd0\xfe\x72\xf0\xef\x6b\x19\x2c\x96\xe7\x25\xbb\x7a\xae\x4b\xfa\x72\x04\xaf\xe5\x31\x20\xfb\x73\x40\x35\xd9\x7b\xb9\x97\x3e\xf2\x39\xaf\x79\x45\x55\x85\x3d\x51\x42\xb3\x99\xf0\x7c\x7b\x42\x7a\x42\xa0\xec\xec\xc5\x1e\xd9\x97\x0a\x28\x2a\xa8\x20\x15\xf3\xfd\x53\x9c\x24\x5d\xa2\x73\xe0\xe0\x33\xd9\x42\xdb\xce\xc7\xc2\x83\x6d\xeb\x9b\xb0\xf4\xf6\x90\xd3\xb9\xe3\x38\xe7\xd9\x71\xa7\x3e\x72\x61\x75\xb0\x09\xf9\xc1\x69\x76\x4e\x37\x47\xae\x2d\x41\x21\xc3\x3b\x3e\x0f\xee\xf8\x9c\xc2\x38\x2b\x01\x99\x7b\x0d\xac\x90\xf5\x4c\xbe\xcf\x84\x23\x52\x83\x45\x73\x6e\xde\xb3\x46\x6e\xcd\x4e\xc4\xe1\x57\x52\x6a\xb8\xb1\x1f\x48\xcd\x8d\x54\x4b\x42\x0d\xa1\x78\x32\x14\x6d\x45\x15\x51\x0c\x93\x63\x32\x98\x6d\x6e\xf4\x15\x63\xed\x42\x76\x19\x38\x31\x86\xa1\x73\x43\x07\xfa\x46\xee\x34\x4e\x8c\xd1\x9d\xd8\xf3\xea\x98\x2b\x2b\xa5\x25\x56\x85\x71\x73\x14\x06\x43\x38\xa5\x4a\x0a\x07\x6d\x64\x47\x74\x59\x38\x73\x6e\x5c\x8b\x5d\x24\xc0\x7e\xed\x9f\x96\x44\x0a\x50\x00\x32\x55\x96\xcf\x74\xf7\xc6\x8f\x30\xb7\xa7\x63\x9c\x6d\xf8\x13\xc1\xec\x96\x6a\xeb\xd2\x35\x10\x12\x9a\x44\x60\x1e\x6d\xf7\xf9\x30\xc5\x11\xf2\x5c\x84\x0c\xc1\x59\x82\x35\x8c\xca\xe0\x1e\x79\x36\x99\x3c\x9b\x80\x2a\xfb\x6c\xf2\xcc\x1b\x62\x55\x28\x87\x75\xda\x5e\x47\x8c\x2f\xa2\x1c\x02\x58\xd0\x97\x1a\x13\x42\xde\x79\xd4\x4f\x68\x67\xb9\x52\x91\x1b\x8a\x6d\xab\x2a\xbc\x03\x34\x5d\xe9\xcb\x9e\x01\x91\x50\x88\xe7\xb6\xd3\xf8\x25\x5d\x61\xef\x9c\x5f\xb9\x6e\x70\x5b\x4b\xb3\xe9\x5e\x31\x0b\xa7\xc6\x33\xe6\x1c\xa8\xef\xbf\xdf\xde\xbb\xa1\xe8\xce\xf4\x66\xee\x1c\x70\xef\x55\xc8\xba\xe6\x86\x2c\xa8\x5e\x04\x2f\x5e\xd7\x19\x67\xd8\xd1\x34\xd4\xf9\x5b\xb5\xda\x30\x35\x4b\x92\x5d\x59\x0e\x73\x4f\xc0\x8a\xb3\x37\x7c\xec\x30\x89\x45\xe7\x8a\x81\x43\x4e\x2f\xa8\x62\xf6\xce\x06\x4e\x9f\x8a\xcf\x98\xe1\xa9\x9b\xa3\x77\xbe\x87\x91\x6f\x0f\x6e\x75\x84\xef\x56\x78\x6b\xe8\x59\xc8\x44\xd9\x48\x9e\xda\xaa\x61\x4c\x1a\x6a\x52\x1a\xa2\x0e\x3d\x45\x03\xd9\x59\x76\x70\x78\x9a\xdf\xc2\xfe\x03\x34\x26\x81\x03\x5d\xff\x95\x88\x61\x8c\x6c\x64\x25\xe7\x03\x73\xf8\x07\x39\xc2\xcc\x62\xdb\x5a\x84\xa5\xc1\xcf\x5a\x37\x35\xc1\x57\x63\x06\xa0\x7d\x6d\x30\x9e\x98\x73\x46\xf9\x96\x3d\xce\x50\x7a\x1e\x76\xe7\xf3\xf7\x27\x87\xc7\x6f\x4e\x26\x75\xf9\x05\x62\x40\x8c\xe9\xb8\x91\x5b\x0b\x43\x3e\x0a\x4b\x7a\x6d\xd9\xd0\xfb\x0c\x92\x98\x95\xa8\x93\xd8\x07\x8c\x01\xb3\xa9\x61\xaa\xe6\x88\x2b\xb5\xab\x26\xf6\x56\xb8\x24\xd5\xba\xb6\x67\xdc\x59\xe2\x46\xce\xc1\x1e\x7e\xfc\xfe\x81\xdc\x28\x36\x06\x20\x09\x6b\x4b\xce\x78\x05\x40\x34\x9d\x9e\x1a\x9d\xcf\x49\x83\xfa\x88\xab\x0f\xe9\xe2\x93\xab\xe5\x6a\xe4\xb5\xb3\x32\x43\x64\x1d\xdb\xbe\x56\x55\x5a\xdd\x13\x60\xf9\x58\xa5\xcc\x45\x81\xe8\x1c\x5e\x58\x2a\xd7\x41\xb0\x51\xfc\x8a\x57\x6c\x6e\x49\x58\x70\x31\xd7\x5d\x07\x22\x97\x8c\x96\x34\x2c\x60\x0c\xb1\x4e\xa7\x09\x49\x3d\x6f\x20\xb5\x2c\x80\xf3\xe3\xd6\x7c\xfb\xee\x82\x08\x86\x24\x24\x6e\xb2\x81\x8e\x27\x4b\x64\xe2\xc9\xbe\xed\x68\xeb\x76\xf4\x91\x9d\x39\x8a\x7d\x42\xca\xa6\xad\x3a\x28\xe0\x84\xb1\x1d\x3c\xec\x29\xd1\xcb\xba\xe2\xe2\x12\x5a\x76\xb8\xe3\xc4\xb5\xbf\x63\xc4\x7e\xe1\x37\xb0\x62\xb4\xca\xaf\x06\x3c\x10\x2b\x93\x1c\x2a\x80\xd9\x81\x18\x3c\x98\x2c\x56\xea\xfd\xd5\x0b\x7b\xf4\x94\x67\x39\xbf\x93\xf3\x3c\x1f\xf5\xd2\xf2\x9a\xce\xb7\x56\x68\x0a\x83\xf7\x0e\x6c\x41\xde\x1d\x9d\xfa\xba\x81\xfd\xd8\x21\x8d\xf7\x4a\x45\xa8\x32\x7c\x46\x0b\x73\x40\x9a\xb6\xaa\x9c\x89\xeb\x95\x3c\x27\x25\x6e\xc8\x3d\x4d\x22\xf2\xa2\x73\xa1\x41\x01\x87\x96\xd5\x95\x1d\xd5\x58\x1b\x1e\x3d\x81\x6d\xe3\x12\x5a\x01\x9a\x4d\x90\xeb\x05\x2f\x16\xe4\xac\xad\xaa\x33\x59\xf1\x62\x19\x1a\xb8\xa3\xb3\xbd\xb4\xc7\x42\xe2\xb9\x70\x58\x5d\xd3\xa5\x7e\x15\xbf\x25\xa1\xf0\x19\xa1\xc6\xb0\xba\x41\x66\xb6\x53\xb3\xda\xa2\xb3\xf3\xb7\x83\xb2\xc8\x2d\xa1\x20\xf2\x28\xaf\x82\x64\x6c\xdd\x07\x89\xe7\xf5\x98\xbc\x65\x57\x4c\xf5\xe9\x13\xf6\x23\x78\xb4\xee\xd3\x04\x4b\x07\xda\x78\xab\xc1\x2b\x82\x3d\xe3\xd7\x96\xfa\x23\xb4\xf3\xd9\xca\x63\xb9\x16\xcf\x0c\x71\x5c\x95\xfa\x22\xa7\xb3\xb7\xd2\x9c\xe1\x33\xfa\xef\x83\x6f\x72\xc3\xa8\xb4\xb2\x36\xc6\xd2\x8f\x6e\xd9\xa1\xe4\xfa\x72\xd0\x2b\x04\x2f\x4e\xbc\x3c\x43\x99\x79\xce\x8c\x65\xe7\x71\xe0\x68\x47\x83\xe5\x6a\xf8\xae\xb4\x2f\xeb\xf6\x97\x62\x0e\x8a\x70\xe4\x98\xbb\x66\x54\x78\xbc\x41\x76\x4d\x14\xab\xa5\x41\x3d\xd7\xd2\xeb\x9c\xdc\x85\xac\x19\xa1\x57\x94\x57\x74\x5a\x41\xe6\xae\x7d\xb8\x7b\x56\xb2\xef\xf0\x10\x66\x00\xf2\xa1\xa4\xdf\x8f\x96\x5b\x02\xcf\x23\xff\x38\x18\xf0\x78\x93\x22\x59\x95\x2c\x2e\x63\x5d\x75\xa6\x64\x8d\xb7\x60\xd5\x79\x09\x95\x50\xb4\x2c\x89\xe6\x73\x01\xc0\x80\xc2\x90\x8a\x1a\x26\x8a\xe5\x84\xb8\xc6\xa2\x1d\x1c\xa2\x62\x46\xf1\x50\xb5\x2e\xa4\xaa\x69\xe5\x27\x79\x4a\x8b\x4b\x39\x9b\xc1\x53\xbb\xfb\x5d\xa2\x96\x13\x56\x38\x27\x54\x4b\x81\x83\x33\xad\xe9\x7c\x80\xb0\x82\x8e\xe1\x56\x81\x72\x85\x15\xb8\x4a\x0e\x2a\xd4\x0b\x4a\x8f\x03\xea\x53\xf7\x95\x87\x6a\xeb\xa0\xd8\x02\xbf\xaa\x56\x18\x6e\xc5\x5f\xaf\x97\x18\x81\x88\xe1\x5a\xe2\xa9\x1d\xca\x35\x66\x03\xf0\x08\x07\xb1\x06\xa5\x58\x57\xd0\x75\x00\xe9\x5b\xcb\x57\x5b\x15\xf5\x50\xb5\x93\x3e\x0b\xd1\x39\x02\xdc\xec\x5f\x9c\x5b\xaa\x1d\xcc\x75\xa7\x5d\xee\x03\xee\x5b\xc7\x14\x7f\xff\xf2\x1f\x93\xab\x38\x0a\x0f\x3f\xb7\x2a\xc7\x81\xa5\xb7\x66\x6a\x8e\x28\x68\x8c\xd4\x54\xf0\x19\xd3\x96\x43\x96\x96\x9d\x5c\x74\x45\xd3\x9a\x91\x6b\xcb\x48\x98\x03\xbb\xf2\x7a\x89\xf2\xf5\x62\x25\x9e\x13\xad\x68\xe7\xda\xd8\x57\xf2\x00\xd6\x02\x00\xfc\x3f\xb0\xa2\x35\xb0\xff\x20\x6b\x90\xec\x0b\x69\x3f\x4b\xcc\x1e\x3a\x6f\xa7\xa8\x3e\xc3\xb0\x2b\xaf\x86\x45\x76\xd0\x50\x3f\xac\xee\x47\x67\x56\xb7\xd3\x06\xe7\x95\xcd\xac\x1e\xf5\x72\xf2\xf5\xd7\xe9\x93\x83\xb5\x5e\x30\xa6\x66\x45\xab\xb8\x59\x5a\xc1\xcb\x3e\x98\xc9\x4c\x43\x07\xfd\x23\x80\x5b\x75\x07\xf3\x82\x82\x03\x1c\x0b\xc3\x70\x43\x76\x9b\xc2\x32\xea\x23\xac\xf4\x68\x82\xde\xb1\x6d\x7d\xdd\x4d\xf2\xcc\x09\x67\xbb\x63\xba\x6d\xa9\x27\xe4\x4c\x6a\x44\x86\x0d\xd8\xea\x03\x4a\x11\x77\x5c\x33\xb2\xd7\x67\xa2\x1b\x11\xb0\xa4\x77\x5b\x3b\x4a\x7d\xaf\xd8\x22\x44\x8e\xb2\xa3\xbf\x82\xb6\x5b\x86\x18\x3a\x5f\x69\xc4\x2f\x55\x6f\x2a\xba\xfe\x9b\x5b\x8c\x77\xbb\x59\xda\xf6\xee\x7f\xef\x5d\x60\xe4\x74\x95\x69\xfb\x75\xf0\x0e\xc1\x3c\x7d\xd1\xbe\x65\x0b\x7a\xc5\x36\x1e\xbd\x8d\x2c\x27\x1b\x4e\x20\xd8\x46\xe9\x03\x5a\xd3\x2e\x14\x96\x07\x58\x6c\xad\x59\x0d\x0d\xe6\x6f\x50\x01\x36\x69\x39\xd3\x25\xa9\xa4\x04\x48\xd5\xb6\x21\x42\x96\xcc\x6e\x00\x48\xe9\xa4\x95\x1e\x91\xf3\x43\x77\x63\x13\x0d\x89\x4d\x29\x40\xb3\x6d\x58\xb1\xe1\x86\x07\xf3\x52\x45\xfd\x58\x51\xad\x49\xaf\x73\xe8\x55\x6a\x4b\x07\x9f\x00\xb5\x51\xe0\x91\x73\xcd\xf0\x2b\x76\xc5\x20\x8d\x65\xc6\xe7\x04\xdb\xc3\xd6\xae\x79\x88\xcf\x1e\x97\x0a\xda\x55\x2a\x5e\xa6\x3b\x86\x56\xb5\x35\xbb\xa4\xd7\x52\x5d\x56\x92\x96\xbe\x4a\xb5\xb2\x0a\x4f\xc5\x2f\x19\x39\x66\x4d\x25\x97\xae\xe3\x87\x28\xc9\xb9\xa1\x86\xcd\xda\xea\x7c\xc0\x52\x0c\xf3\xea\xe8\x42\xf3\xad\x79\x75\xec\xe0\x2b\x5e\x9d\xd3\xf3\xa3\xf3\xd3\x47\x5f\x07\x37\xcc\xcf\xf7\xfc\x0b\x98\x99\xc7\x17\x8b\xe0\xbf\xa6\xa5\x86\x8d\x49\xd5\xa6\xfe\x12\x93\xf8\xce\xa4\x32\xb4\xda\x82\x0e\x5d\x2c\x68\x73\xd8\x9a\xc5\x31\xd7\x85\x15\x26\x79\x54\xe9\xb5\xa7\x46\xf0\xe8\x0c\xe2\x76\xce\x6e\x22\xdc\xef\x17\x77\xdf\xd1\x5f\x0f\xcf\x08\x6d\x2d\x37\x1b\xd7\xa8\x60\x2b\x51\x5e\x12\xcd\xcd\x39\xb6\x65\xca\x3a\x33\xee\x99\x1f\x99\x17\x7f\xd7\x2e\xcd\xca\xae\x55\x29\x6e\x2a\x13\x7c\xaa\x54\x7c\x54\x95\x8a\xa9\xc7\x05\xc9\x61\x46\x70\xc1\x0d\xa7\x46\xaa\x5d\x28\x8e\xea\x11\x13\xf2\x53\x5b\x6d\x64\xed\x44\xc2\xa9\xbf\x03\xe0\x24\x06\x45\x88\xd7\x06\xeb\x92\x5e\x21\x87\x08\x96\xe5\x54\x18\xa6\x66\xb4\x60\x2b\x40\xb8\x23\x70\x87\x23\x4d\xdc\xdf\x93\x4c\xcd\x1f\x5d\x2e\x7b\x03\xe7\xe0\x9f\x5e\xfd\x31\x2a\x85\xfc\x53\x30\x3c\x9c\x6b\x3e\xb6\x31\x04\x2b\x86\x34\xb3\x19\xce\x3d\xbf\xe6\x39\x17\xf8\xaf\x62\x25\xad\x1f\xa7\xf6\x3f\x5b\x5a\xe1\x92\x0c\x59\xee\xe1\xaf\xd9\x63\x85\xad\xef\x92\x3e\x63\xba\x79\x0b\x5c\x88\x40\x2b\x20\x99\xd1\xa5\x24\xdc\x64\x1a\x45\x85\xb6\x2c\x96\xc7\x6d\xf2\xcc\x19\x62\xcf\xc8\xbe\x29\x9a\xe4\x2a\xd5\x0c\x38\x4e\x01\xc3\xc9\xfd\x23\xe9\x31\xb9\x5a\x1b\x54\xad\x88\x8d\x22\x9c\xfa\x0b\x64\xea\xef\x43\x6b\x83\x61\xb3\xb5\xf5\x52\x5a\x90\x53\x5b\x07\x56\x77\x64\x84\x1d\x10\x4f\x35\x9a\x14\xe4\x7b\xae\x0d\xc2\xc5\xe2\xcd\x00\x0f\x87\xf0\xe8\xd6\x5c\x3d\x23\x52\x11\xde\xfc\x17\x2d\x4b\xf5\x0a\x35\x4f\x1f\x1d\x55\xe9\x68\x85\x5c\xbb\xf4\x3c\x00\x2a\xf4\xfe\x8a\x7d\xb3\x6c\x78\x41\xab\x6a\x49\x2e\x8e\xce\x60\x04\x4d\xfe\xf0\xbb\x17\x60\xbf\x7e\xfd\xd5\xef\x5e\x0c\xdc\x42\x4f\xe8\xea\x2b\xd7\xa3\xc8\x66\x7e\x04\x75\xc1\xbb\x86\xdd\xda\x43\x5a\x85\x5e\x94\xd6\x3e\x3c\x47\xa0\x51\xab\x1c\xb9\xe3\x0e\x05\x81\xdd\x5d\x41\xd5\xcb\x69\x45\x3e\x41\x7a\x46\xd7\x13\xa4\xe7\x13\xa4\xe7\x13\xa4\xe7\xcd\x57\xec\xe7\xdc\xf6\x79\x14\xd3\x02\xed\x12\xd7\xf5\x26\x54\x99\xce\x3e\x77\x95\x29\x91\xd5\x52\x05\x6f\x8e\x05\x8c\xe1\x62\x86\xf4\xbf\xe8\xda\x3a\x1c\xbf\x3d\xff\xaf\xef\x0f\xbf\x3d\xf9\x1e\x66\xd5\xa1\xd2\xd8\xed\xcd\xc5\x83\x86\x51\xee\x55\xc4\x0c\x5b\xef\xed\x15\x20\x8b\x95\xd2\x63\x41\xde\xbe\x3e\xbf\x63\xd5\xf1\x16\x62\x60\x5f\x88\x59\xfa\x2a\x3d\xb6\x62\x1c\xfb\x53\xcd\xd4\x76\xfa\xef\xec\x4c\x25\x8f\x0f\xf3\xb2\x0f\x7d\xaf\xbf\xe5\x57\x9c\x9d\xad\x39\xd8\xd3\x98\x91\xfc\xdb\x54\xd4\xda\x25\xc2\x65\x7b\xf4\xb5\xb4\x0f\xc9\x16\xc3\x2c\x62\x95\xab\x6d\xd6\xa0\x56\x26\x2a\xea\xb8\x65\x0f\x12\x54\x2f\x94\x55\xf3\xac\x82\xc7\xb4\xf6\xca\xc6\xbf\xef\x3e\x6e\x36\xb5\xe7\xdf\x96\x42\xb0\x91\x18\xd7\xb0\x1f\xf3\x6d\x7a\x85\xd1\xbd\x04\xbc\xb4\xac\x9b\xd5\xde\xe0\x30\x62\x2f\xf7\x0d\x94\xb2\x86\x16\xa9\xaa\x68\x1a\x57\x74\x33\x31\xf6\x0c\xd2\x7d\x84\x9f\x40\xe3\xf2\x47\xa8\x88\x00\xdd\x5b\x82\x61\x0e\x63\x6f\x5b\x38\x05\x42\x56\x3b\x02\xd2\xbb\xb0\x24\xa1\x3a\x54\xdf\x60\xe5\x4e\x86\xd6\x81\x3b\xc9\xb3\xe4\xb3\xd4\x57\x7e\x7a\x60\x77\xf9\x36\x5d\xe5\xcd\x42\x1a\x29\x76\xa3\xdd\xc1\x26\x5a\xfa\x47\xcb\x19\xdc\x71\x14\x92\x64\xa3\xa3\x09\xf1\x69\x43\xc2\xe7\x4a\xe5\xae\x4b\xe3\xcc\x51\xb4\x1b\x43\x63\x9d\x6d\xa2\xf8\x76\x94\xac\x8d\x2f\xf9\x79\x01\x66\x35\xe5\xe9\xf1\x16\x4e\x91\xc7\x90\x26\xf7\x99\xf6\x46\x7d\xa0\xb4\xb7\xe1\x70\x60\x65\xa6\x66\x37\xf6\x41\x7e\x8d\x4f\x8f\x9d\x23\xc2\x77\xb2\xd1\x4e\x2e\x90\x9b\x05\xd5\x56\x6c\x0a\xa9\xcc\xb5\x54\x5b\xee\x00\xde\xa7\x62\x05\x52\xc9\x7d\xb7\xd6\xf5\xeb\x81\xa4\x79\x9f\xb4\x3b\x35\x9f\x59\x7d\x2f\xbb\x52\x49\x04\xdd\xd0\x79\xe6\x43\x39\xf1\x23\x4c\x0a\x59\x47\x4d\x67\xc8\xf5\x82\xa1\x16\x7a\x74\x7e\xfa\x86\xcf\x91\x40\xff\x2e\x64\xc6\xa8\x69\x15\x1b\xcf\xa9\x49\x23\x88\x6b\x92\x96\xed\xb7\xe5\x53\x08\x79\xe8\xdf\xf9\x24\x3a\x87\x93\x28\xda\x61\xb7\x9d\x48\x9f\xc3\x81\xf4\x78\x0e\xa2\x9d\xb3\x79\x9e\x3a\x3f\xf7\x2e\x2f\x3c\xb2\xac\x8f\x7f\x98\x0b\x74\x5a\xde\xec\x54\x05\x1a\x8e\x1d\x77\xdf\x56\x54\x03\x25\xff\x1b\xce\x9b\xc1\x5a\x41\x78\x12\xe6\xf7\xc1\x31\x49\xab\xca\xae\xac\x14\x2c\x54\xe8\xe9\xae\xde\x14\x0b\x2e\x6b\xda\xb8\xda\xd3\x52\x5e\x8b\x6b\xaa\x4a\x72\x78\x76\xfa\xf0\xa7\xce\x60\xec\x7a\xdc\x47\x6f\x64\xb9\x75\xf9\x1f\x91\x02\x5a\x05\x20\x8a\xd8\x3f\xa6\xdc\x68\x84\x79\x04\xd0\x45\x13\x07\x59\xac\x7a\x15\x92\xfe\x01\xd4\x63\x1a\x84\x43\x06\xa3\x45\x10\x59\x18\x5a\xb9\x4c\xa5\x29\x33\xd7\x8c\x09\xf2\xe2\xc5\x0b\xcc\xaf\x78\xf1\xfb\xdf\xff\x1e\x8a\xb9\x49\xc9\x0a\x5e\xaf\xdf\x08\x77\xfd\xf6\xe5\xcb\x74\x52\xfe\x76\xf8\xe6\x7b\x42\x0b\xf0\x91\x91\xa9\x34\x0b\x47\x11\xb0\x5e\x3c\xa8\x1e\x91\xff\x73\xfe\xee\xad\xd7\x43\xf4\xca\xb7\xc0\xd9\x61\x3a\x07\xf8\x80\x1c\x50\x0c\x07\xd8\x9f\x2e\x03\x82\x9a\x45\x80\x3c\xa1\x90\x89\x16\x41\xeb\x38\x79\x39\xa0\xa0\x0a\xba\xb2\xf3\xf9\x02\x96\x85\x0b\xd8\x85\x15\x2f\x5c\xe7\x01\xcc\x8b\xc1\x4a\x69\x8f\xef\x89\x38\x26\x5e\x85\x48\x1e\xd9\x4e\xd9\x08\x6b\x9b\x1d\x6a\xca\x28\xf8\x48\x14\xd3\x6d\x65\xa0\x33\xd5\x94\x39\x22\x3a\x8e\xd5\x2c\x99\x03\x77\x23\x85\xdd\x89\xbe\x6d\xcb\x05\x2f\x81\x9d\xf9\x5a\x71\xab\x94\xcd\x02\x20\x35\x0a\x70\x08\xb8\x92\x13\x5a\x2c\x08\x13\x06\x7a\x38\x20\xeb\xd9\xdb\x93\x87\x5e\x50\x51\x5a\x99\x02\x8d\xf4\x81\x8c\x47\x9b\x7f\x9e\x2f\x93\xf5\x2c\xcc\x78\x0f\x4e\xab\x3b\x49\x69\x25\xc5\x3c\xde\x98\x9d\x62\x1d\xc1\x09\x0d\x90\x41\x50\xd8\x08\xe0\xc2\x76\x61\x30\xf8\xaa\x1d\xe0\x91\x46\xac\xad\x29\x1b\xb2\xff\xb2\xe4\x2f\xe7\xc9\x60\x26\xa4\x40\x8c\xeb\x0b\xd5\x6a\xf3\x6d\x6b\x19\x72\xc8\xd3\xf2\xe6\x34\x13\x72\xb4\x46\x1d\x26\x04\xbb\x1c\x2b\x88\xa9\x16\x05\xd3\xb8\x79\x7f\x41\x04\x12\xd3\xdd\xfd\x0b\x2e\xdb\x40\x2a\xe4\x6c\x13\x21\x1e\xf5\x8d\x0b\x7b\x92\xd3\xd6\xc8\x71\xdb\x94\x34\x20\x60\x27\x22\x07\x76\xd7\x61\xd5\x2c\xe8\x88\xcc\x69\x64\x34\xae\xd3\x11\x6d\x18\xe7\xdd\x80\x5f\x0c\x1e\xfd\x96\x37\xb6\x47\x92\x4b\x48\x85\x9d\x50\x85\xf3\x58\xd0\x9a\x01\x56\x0f\x92\x3b\x90\x84\x42\xd6\x53\x2e\x1c\x08\xde\x0c\x50\x02\x99\xc2\x28\x24\x20\xe0\x91\x8a\x4e\x59\xe5\x08\x90\x6a\xf0\x2b\x7f\xe7\x91\x95\x98\xb2\xe7\x9b\x26\x74\x3e\x57\x4c\x6b\x7e\xc5\x1c\xdc\x20\xff\x67\xa0\x06\x5a\x5b\x9d\xbc\xf1\x50\x8c\x9a\x58\xe3\xd0\xb0\xf4\xe6\x3e\x78\x85\xb6\x59\x96\xbd\x3b\x1f\xc2\x84\x90\x13\x2d\x0d\x53\xbc\x80\x51\xdd\x52\x6b\xa2\xdb\x62\x41\xa8\xc6\xea\xc3\x31\x60\x2e\x0e\x9f\xf5\x0e\x61\x05\x41\x1c\x17\x8c\x96\x1e\x75\xce\x1a\x55\x4d\xc3\xca\x09\x21\x47\x56\xfc\xcc\x78\x41\x0d\x62\x8a\x91\x92\x95\x6d\x53\x71\xf4\x11\x0e\x24\xe3\x62\xc1\x88\x54\x25\x03\x70\x49\x39\x83\xe4\xfb\x30\x58\xa4\x1b\x02\xd8\x3c\xb7\xe3\x4f\xb9\x51\x54\x2d\x51\x83\x72\x6b\x39\x90\x08\x7b\xfa\x14\x80\x63\x07\x63\x01\x3d\x00\x7a\x43\xd2\xbb\xc9\xf8\x2b\xcb\x21\x40\x06\xfb\x06\xbb\x6b\x40\xfe\xa5\xbf\xf2\x9c\x49\xf6\x82\xad\x7d\xee\x76\xf6\xd0\x87\xe5\x3e\x96\xec\x85\xb4\x81\x39\xbf\x2e\x2a\x03\x16\xa8\x29\x16\x4e\x53\xec\x8b\x2a\x42\xd0\x7f\x44\x87\x55\xc7\xe0\xe5\x50\x15\xb9\x17\x91\xa1\x9e\x9e\x99\x89\x35\x37\x4d\x4b\xab\x6a\x39\x66\x1f\xec\x61\x6f\x85\x19\x68\x4f\xd0\x2c\x0c\x0a\xf1\x5b\xa1\x99\x19\x65\x20\x04\x84\x50\xa3\x10\xcd\x56\x93\x3d\x7c\x7f\x21\xa1\x35\xc2\x1e\x0e\x66\x4d\xec\x69\x6b\xb0\x48\x67\xb4\xf9\x27\x39\xe6\xe4\x8a\xa9\xa5\x1b\x77\xf0\xe3\xb2\x6d\x55\x92\x75\x8f\x10\x90\x50\xa6\x58\x9c\x7c\x68\x14\x42\xb5\x64\x79\xe6\xca\x76\x59\x1d\x02\x11\xfd\xbd\xa5\xd4\x67\x6c\x2f\x8c\xe0\x04\xc1\x22\x96\xf8\x13\x38\x25\x0e\xdf\x1e\x0f\x3f\x1e\xf0\x1a\x6e\xf8\xf4\xaf\x81\x66\x50\xff\xca\x2f\x73\xf0\x3a\xbc\x65\xce\x5d\xb7\x05\xff\x0d\x36\xfc\x44\x8c\x35\x1d\x3c\x39\x94\x5c\x32\x77\x4c\x52\xe1\x42\x10\xee\xe6\x6c\x44\x2a\x06\x50\x8e\x88\x58\xc9\x96\x30\x18\x8e\x9f\x67\xe5\x33\x6f\x4a\xbc\x72\x9d\xa4\xdd\x35\xb6\x2f\x9f\xf1\x69\x7e\xb1\x32\x3d\x32\xaf\x2c\xc2\xeb\x92\x25\x07\x72\x36\x5d\xbd\x5d\x64\x39\xc9\x7b\x6a\x60\x0f\xd8\x0f\x02\x06\x52\x60\x7b\x0a\x9d\x41\x35\x31\x32\x17\xb3\x91\x7c\xd5\x91\xfd\xcb\x2f\xe8\xbd\x4d\x59\x46\xc1\x43\x22\x7a\xfb\xb9\x0a\x97\x6c\xf9\x4c\xe3\x9e\xb7\x27\xc4\x82\x37\x60\x9a\xc3\x61\x2f\x67\x99\x37\x3e\x5e\x3f\x02\xc6\xb9\x27\x07\x4f\x96\x53\x31\x22\x6f\xa5\xb1\xff\x39\xf9\xc0\xb5\xb3\x61\x8e\x25\xd3\x6f\xa5\x81\x4f\x76\x9e\x1f\x70\xaa\x1e\x0b\x37\x38\xef\x3f\x87\xc2\x38\x38\x86\xc1\x50\x87\x29\xf1\xab\xee\x81\x9d\x03\xe7\x70\x4d\x4e\xa1\xbb\x2f\x2e\x55\x56\x82\xa0\x2a\xd3\x83\x5c\x5b\x72\xbc\xbf\x0e\x20\xda\x5d\xf5\xf8\x3a\x3d\x8e\x5b\xa4\xea\x31\xcb\x03\x91\xe6\xc8\x82\x28\x04\x7e\x03\xfd\x4f\x9a\x8a\x16\xac\xf4\xed\x15\xa8\x9d\x55\x6a\xd8\x3c\xb1\xfe\xf9\xa6\xab\x66\x6a\x0e\x01\x96\x62\x40\xcb\xa5\xf5\x2b\xb7\x62\x86\x57\x56\xf5\x0c\xaf\x7b\xd9\xc4\xf7\x82\xa6\xf2\xe0\x43\x80\xde\xff\xbd\x3d\x66\xef\xc3\xaa\xc8\x26\x89\x22\x32\x51\xfb\xad\x69\x63\xa5\xd0\xff\xb3\x4a\x2e\x6c\xb8\xff\x21\x0d\xe5\x4a\x4f\xc8\xa1\x6f\x48\x11\x7f\xe7\xfc\x48\xd1\x63\xb2\x11\xd6\x40\x3d\xe6\xaf\x2d\xbf\xa2\x95\x03\x4f\xa6\x82\x30\x6c\xee\x61\x69\x5c\x35\xad\x46\xe4\x7a\x21\x35\x6a\xcc\x01\x7a\x63\xef\x92\x2d\xf7\x46\x19\xfc\xa9\xfe\x8a\x25\xdf\xde\xa9\xd8\xeb\x62\x8e\x3d\xf9\x14\xec\x06\xa8\x3d\xdc\x83\xef\xf6\x1e\xca\xa6\xcb\xa8\xd7\xd3\xb2\xe4\x88\x72\x7d\x96\x5d\xdd\xcd\x2a\x3e\xf2\xa3\x5e\x74\xd7\x50\xac\x1a\xbc\xee\xcf\x8d\xe6\x77\xe6\x86\xb0\xc3\x74\xe9\x1b\xcc\x38\x97\xd5\xba\x47\x2b\x03\x21\xe0\x13\x8b\xfc\x67\x76\x4b\xf4\x9c\x90\xb9\xdc\x48\x59\x98\xc5\xe3\xb6\xef\xe2\x92\x5a\xfd\x4a\xb5\x6c\x44\x4a\x29\x9e\x19\x17\x42\x88\xdb\x43\xad\xb6\x99\x28\x37\xac\xfa\xbe\x3e\xc8\x40\x0a\x55\x0c\xba\x61\xf8\xd6\x58\xce\xdf\x89\x0d\xa4\x20\x56\x65\x7c\xbe\xb0\xfd\x73\x13\x21\x43\x01\x8c\x1c\x21\x0e\xc6\x48\x48\x38\x05\xa0\x55\x6e\x4c\x4c\xc7\x78\x11\x49\xfd\xf8\x57\x06\x2a\x6e\x63\x6f\x38\x3b\x3b\xb0\x25\x74\xdd\xfe\x93\x29\x99\x61\xdc\x0d\x0e\xf2\x5c\xbb\x69\x48\x5e\x63\x77\x0d\x01\x71\xe8\xae\xde\x56\x7a\x0f\xc6\xf0\x95\x4b\x5e\x82\xde\x67\x11\x26\xb4\x92\xc8\x08\x90\x51\x0a\x5f\x4c\x61\x5e\x76\x4a\xc8\x74\xec\xb2\x8b\x62\xe6\x8e\x01\x98\x28\x7a\x9c\x43\x4f\xf9\x48\x54\xe5\x62\xc1\xba\xc8\xb0\x9c\x01\x95\x3e\x50\x7e\x3f\x1b\x2a\xa0\x14\xb7\x02\x01\x7b\x31\x87\x2f\x5f\x40\x36\x1b\x6b\x61\x8e\xeb\x1b\xda\x64\xcc\x34\x09\xcf\x84\x9a\x60\x55\xa3\xd0\xa4\x53\xd9\x1a\x0f\xd5\xec\xbe\x2f\xa9\xa1\xd0\x9f\x0a\xf3\x26\x76\x23\x84\x9b\xcf\x0f\x9b\xc9\x44\xce\xbf\x5d\x31\x03\xba\x5f\x71\x30\x22\x8c\x16\x0b\x6b\xed\x8c\x31\xb5\xd5\xda\x69\xde\x20\x3b\xb6\x0b\x85\x46\x90\x5c\x55\x18\x72\x6c\xa1\xc0\x11\x7e\xe3\x44\xd9\xda\x3e\x09\xc3\x97\x5e\x69\x57\xd0\xe1\xcc\x33\xd1\x15\xc5\x67\xa0\xc4\x87\x47\x7c\x53\x4f\xe7\xe0\x86\x19\x01\x6f\x55\x34\x5f\x3e\x47\x91\x95\xf6\x67\x61\xd3\x67\xa0\x62\xc3\xdb\x77\x78\xec\xf6\x0c\x73\x19\xe9\xad\x58\x1b\xdf\x2a\x35\x99\x68\xc0\x6e\x69\xf6\xa5\xa9\x77\xf6\x47\xa8\xf0\xd0\x11\x15\x2a\x83\xbb\xa6\x64\x8e\x5b\xc2\x72\xe6\x70\xda\x45\x4b\xaf\x59\x68\x68\xca\x94\x92\xca\xbe\x3f\xd3\x9a\x70\x58\xa7\x9a\xaa\x4b\x56\x06\x6d\x7c\x42\xce\xec\x44\x79\xcf\x5e\x06\x4a\x94\xd7\x22\x7c\xbb\x54\xfb\xea\xce\x30\x07\x32\x9f\x4d\x26\xcf\x5c\x27\x77\x85\x0a\x36\x9e\x43\xf6\xf3\x5c\x12\x3f\x8f\x1b\x2f\x9b\xf3\xae\x27\x9b\xde\xd0\x46\xa3\x73\xd4\xaa\xd1\x10\x0e\x92\x84\xe2\x8c\xb8\x2c\x21\x3a\x18\x6c\xa2\xbb\x32\x3b\x27\xf2\x06\x1c\xf3\x05\x1b\x33\xa4\x02\xe1\x95\x3b\xc0\x98\x31\xb8\x78\x53\x60\xd1\xf1\x90\x93\x87\x79\xa3\xd5\x19\xfd\xcc\xf5\x80\xa2\x9a\xd5\xeb\xbe\x42\x44\x50\xae\xc0\x35\x79\xe7\xbd\x15\x9f\x56\x72\x63\x10\x79\x38\x87\x35\xe4\xaf\x1d\xaa\xb9\x59\xbd\x76\xad\x06\x67\xf5\x3a\x9d\x61\xa7\xe1\xbe\x12\xe2\x8e\xc7\xb8\xac\x2a\x18\x20\x83\x7a\x4c\xae\x5e\xdb\x2b\xce\x59\xbd\xb6\x52\xac\xb3\x7a\xe5\x28\xde\x59\xbd\x86\x17\xf3\xac\x5e\x79\xfc\x29\x78\xdd\x97\x70\x02\x15\x81\xfb\x6e\xc0\xb1\xb3\xc6\x99\x1b\xa0\xf0\x83\x2b\xac\x89\x0e\x86\x8c\x32\xc9\xa9\x73\x28\x96\xe8\x54\xcb\xaa\x35\x48\x42\xfe\x41\x62\x9d\x11\x5e\xd2\x47\xa1\xf2\x28\x8a\xab\xc3\x45\x9a\x28\x58\x12\xa8\x9e\xe5\x1c\xeb\xfe\x22\x2f\xb9\x63\xa9\xbb\x1a\x7a\xc9\xdf\x32\x00\xaf\xdd\x68\x1c\x80\xd7\x4e\xb4\x0f\xf0\xa4\xe4\x6f\x22\x80\xd7\x2e\xe1\x7c\xf7\xaf\xac\x9b\x74\x78\x5b\x01\x7f\xdd\x53\xf4\x2c\x34\x53\x46\x5d\x69\x19\xba\x6a\xf6\x1c\x14\x00\xdf\x6f\x34\xfa\x4f\x7c\x0e\x10\xf6\xe1\x1c\xee\xd7\xca\x17\x14\xb9\xaf\x60\xb4\x47\x34\x38\x3c\x3b\xcd\xe8\xff\x8d\x9e\x7a\x83\x07\x38\xbe\xe3\xc9\x07\xfc\x29\x57\x6f\x82\x4f\xd1\x7d\x1b\x67\xfe\x1f\x77\x33\xea\x70\x9e\xb2\xa8\xdb\xbb\xef\x73\x5a\x7b\xf1\xd7\x56\x53\x8c\x7b\xce\x45\x1c\x68\xa4\x83\x90\xe8\x74\x4a\xa7\x8b\x21\x16\xaa\xaf\xf4\x1b\x5e\xa6\x4a\x76\xdf\x3f\xb5\xa3\x5e\x25\x98\xfd\x01\xdd\xb1\x56\xaf\x1e\xb7\x3c\x7b\xef\x27\xd1\x85\x2c\x31\x98\x10\xc5\x35\x1a\x59\xbe\xc2\x24\x2b\x2a\x84\x34\x98\x43\x3d\xc2\xf0\xbc\x1e\xb9\x44\x85\x08\x50\x57\x94\xa4\xe5\x25\x56\x63\x06\x64\xcc\x67\xff\x5e\x65\x15\x30\x81\x67\x79\xd8\x89\xdc\x53\x25\x04\x6d\xf8\x8f\x4c\x0d\xe9\xdd\xbd\xe9\xea\x31\x97\x7b\xbe\xe7\x24\x5d\x2c\x58\x4d\xe1\x9f\xaf\xfd\x04\x59\xa1\xed\x6a\x93\x21\x58\xc2\x54\x6d\x15\xdf\x51\x0f\xe5\x6a\xef\xea\x65\x86\x3a\xb9\xee\xba\x97\xb4\xda\xb0\xe6\xf7\x36\x9d\x67\x3d\xf3\xdf\x6e\x51\xf0\x50\x42\xa2\x81\x47\xb7\x0e\xe1\x28\xab\x49\x5c\xe1\xfc\xef\xf8\xd4\xdd\x67\x62\x21\x5e\x8f\xc1\x1b\x9d\xea\x85\x1e\x05\x2d\xbd\xef\x3d\xce\x46\xd8\x93\x17\xfa\xe3\xd7\x93\x17\xda\x5d\x4f\x5e\xe8\x4f\xbe\xee\xcd\x0b\x1d\xa9\x74\xfe\x84\xdd\xe0\x46\x8e\x3b\xc5\x79\x5f\x72\xd7\x45\x7e\x82\x31\x29\xef\x00\xf6\xde\x5f\xa9\xfa\xe1\xfd\x67\x93\xc9\x33\x0c\xf0\x4f\x42\x10\xab\x35\xb3\xf1\x1f\x08\x13\x85\x2c\xed\x73\x2e\xe0\xf9\x4a\x1b\x30\x77\x3a\x8f\x5e\x4c\x4b\xed\xc7\x8a\x53\x04\xe0\xd9\x79\xf5\xc6\x8c\xc7\x96\x47\x47\x7c\x7d\x9f\xca\x79\xc6\xe3\xa5\x53\xee\x3d\xe5\x7e\x29\xdc\x82\x32\xe5\xb4\xfc\x0e\xf7\xb1\xe2\x35\x77\x55\x8a\x56\x9e\x32\x6d\x72\x15\x9f\x10\xb2\x8f\x0f\x9f\x14\x4d\x3b\x72\x03\x4d\x6a\x56\x4b\xb5\x1c\x85\xc1\xec\x97\xbd\xd1\xdd\x1d\x07\x60\x5c\x14\xad\x52\x4c\x98\x6a\x39\x0c\x80\x7f\xd3\xf5\x48\xac\x0c\xbf\x52\x3b\x6c\x64\x04\xe6\xca\x93\xa7\xdb\x5d\x7d\x89\x77\xe4\x87\xc1\x70\x46\x98\x6d\x38\xef\x5d\x2b\x95\x51\xe7\x01\xb5\x9f\x32\x71\x45\xae\xa8\xd2\xb9\x24\x0c\xb9\x2f\xbb\xa2\xe4\x57\x5c\xdf\x63\x09\xf6\xb9\x53\x5a\x30\xd6\x28\x5b\xd3\xb4\xc6\x1d\x77\x5e\x44\xb0\x0f\x8d\xb4\xaa\x68\x10\x0d\x2b\xe6\xd9\xcb\xa1\x2e\xef\xf8\x6a\xa8\x31\x4c\x89\x57\xe4\xff\xee\xff\xfc\x9b\x7f\x8d\x0f\xfe\xbc\xbf\xff\xf7\x17\xe3\xff\xf8\xc7\x6f\xf6\x7f\x9e\xc0\x3f\xbe\x3c\xf8\xf3\xc1\xbf\xfc\x1f\xbf\x39\x38\xd8\xdf\xff\xfb\x77\x6f\xfe\x72\x71\x76\xf2\x0f\x7e\xf0\xaf\xbf\x8b\xb6\xbe\xc4\xbf\xfe\xb5\xff\x77\x76\xf2\x8f\x4f\x7c\xc8\xc1\xc1\x9f\xff\x57\xc6\x97\xa0\x62\xf9\x2e\xdb\x99\x80\xd7\xf8\x5e\xf4\x9a\xfe\xb3\xef\xb7\xd2\x94\x0b\x33\x96\x6a\x8c\x83\xbc\x82\x32\x9c\x6c\x43\x79\xd6\xbc\x3f\x19\xd3\x69\x55\xe1\x04\x0d\xe6\xf7\x8e\x0b\x91\xfb\xb5\xb0\xef\x2d\x3c\xdd\xc8\x32\x02\x71\xdb\x25\xe4\x47\x07\x6b\xa8\x03\xb6\xa2\x02\xc7\xa8\x98\x5b\xfd\x19\x00\xc3\x69\xe5\x6a\x66\xc8\x7e\xa3\xf8\x15\x35\x1d\xd0\x4c\x84\x15\x37\x90\x8c\x62\x41\xb9\x38\xe8\x20\x46\x1a\x59\x82\x79\xd5\x6a\x16\x7a\x72\x5b\x95\xef\xe2\xfb\x73\x52\x54\x1c\xca\x7a\x55\x68\xd3\x38\x70\x70\x8f\x47\x38\x67\x82\x29\x04\xd9\x23\xab\xaf\xda\x6a\x06\xc9\xc8\xb0\x51\x44\x99\xd8\x62\xb0\xbb\xce\x7a\x1c\xf1\x1e\xd5\x42\xdf\x78\x03\x6b\xe4\xb0\x92\x06\x20\xcc\x5c\x53\x30\x57\x5b\x43\x9b\x46\xc9\x2b\x96\x23\x2f\xde\xe9\xa3\xf0\x8a\x5c\x6b\x28\x4a\x8e\x97\x15\x17\x66\x14\xa6\x08\xea\xa8\x7a\x68\x43\x43\x17\x7e\x75\x2c\x72\x13\x2e\xe3\x85\xfb\xb0\x94\x4c\x47\x26\x56\x2b\x0c\xaf\xf2\x11\xa1\xc9\x82\x5e\x31\x32\x65\x4c\xe0\x84\xa0\xe6\x05\xf5\x13\xfd\x5d\x1c\x65\xf2\x0f\xc2\xd0\xf7\x97\x93\xc4\x5c\x40\xd4\x1a\x10\x56\x73\x31\xb6\xf3\xd5\xcc\xed\xec\xaa\x25\xc4\xc3\x24\x81\x8d\x8e\x7c\x15\x2f\x82\xdb\x80\x86\xd7\x96\x96\x12\x6b\x9a\x06\xd2\xe1\x40\x55\x1d\xfb\xfa\xee\x84\x6c\xf3\x26\x98\x9c\x1b\x6a\x5a\x3d\xf9\xd6\xd2\xfb\x9e\xcd\x14\xd3\x8b\xc3\xa1\xc6\x8b\x7d\x1d\x6d\x68\xdd\x64\x9b\x53\x2b\x9d\xb0\xaa\x30\xd4\x54\xa3\x13\x33\x4c\x9a\x7f\xed\x4e\x90\x3a\x24\xd9\xe1\xd1\x14\xf0\x99\x8f\x50\x04\x36\xd4\xca\x2c\xdc\x2b\x1b\x46\xbf\x64\x4b\xf0\x9d\x64\xdd\xaa\x47\x76\xa7\xc2\x63\x11\xae\x79\xf0\xac\x5e\xf4\xe6\xc9\x1f\x38\x08\xb2\xd6\x4d\xae\xdd\x1c\x80\xca\x0a\x3a\xbd\x93\x09\xe8\x92\x39\x3b\x79\x33\x90\x04\x87\x38\xee\xba\x68\x46\xe2\x7f\xdf\x8e\xfa\xdd\xd1\xf9\x17\x7f\x70\x03\x1f\xc4\x9e\xc0\xda\x45\x98\xf3\x10\xc0\x1d\xc2\xeb\xea\xae\x44\xd1\xe8\x04\x52\x7f\x3b\xed\x9b\x65\xc3\x0b\x5a\x55\xcb\xa1\x25\x39\xf8\x40\x57\x6c\xa4\x98\x69\x15\x38\xc7\xb8\xda\x44\x8a\x20\x15\xa3\xb3\x31\x68\x0c\xd2\x20\x64\xeb\xc1\x60\x3e\x38\x83\x04\xb9\x48\x44\xac\x33\x05\xae\xc1\xc8\xf2\x45\xc1\xc8\x52\xb6\x0e\x87\xac\xc0\x3c\x80\x42\x96\x83\x95\x11\x2a\xa0\x47\x8d\x3d\xef\x51\xf5\xb3\xb3\x8b\x65\xe4\x4b\xd9\x82\x52\x12\x6d\xab\x8d\x1b\x63\xe8\x5a\xac\xbd\x17\x78\x16\x6b\x7a\xc9\x88\xb9\x96\xfd\x6d\x0f\xc4\x06\x00\x28\xcd\x48\x21\xb9\x28\xf8\xe0\x79\xc0\x44\xbd\xde\xe2\x2b\x17\x36\x1f\xb9\xc2\xac\x46\x6a\xcd\xa7\x15\x8b\x34\xb7\x15\xc5\xc9\x72\x49\x46\x1d\xc1\xce\x3f\xac\x4d\x57\xa4\xa5\x14\xd3\x8d\x14\x10\x5f\x82\x73\x1a\x1c\xf2\x13\x42\xfe\xb6\x32\x87\x83\xa7\xa3\xaa\x88\x60\x18\xc8\x2a\x16\xac\xb8\x74\xfd\xd8\xb8\x26\x85\x14\x08\x7e\x32\x72\x6e\xbe\x31\x10\x09\xca\x89\x9d\x96\x65\x86\xe4\xc6\x42\x0a\xd7\xcd\x2f\x8b\xb8\x8d\x95\x4c\xf0\x6e\x29\x59\x69\x52\x2c\xa4\xd4\x4e\xc3\xeb\xbb\x4e\xe2\x55\xe0\x43\xcf\x63\xd4\x35\xff\x37\xbc\x53\x5b\x99\x58\x9e\xf1\xba\xc1\x94\x69\x58\xb3\x67\x9a\x94\xb2\x68\xc3\xdf\x76\xee\x2b\x46\x95\x20\x0b\x79\x4d\xcc\x50\xd4\x04\xbb\x95\x57\x5e\xce\xd5\x1c\xea\xc1\x48\x7a\x3b\x08\x3c\x7d\xc9\x96\x17\xa9\x3d\x02\xe3\xe7\x74\x88\x05\x3b\x92\x8a\xb7\x49\x04\xef\x62\x2e\xf8\x4f\x01\x87\x62\xfd\x48\x05\x01\x6a\x65\x2a\x84\xba\x5c\x09\xc1\x8a\x8d\x31\x78\xe7\x13\xc8\x63\xb6\x16\x5f\x27\x17\x35\xd1\x0b\xd9\x56\x60\xe4\x6e\xd4\x56\x27\x84\xfc\xb4\x60\xc2\x1d\xcb\xee\xe8\xcb\x91\xaa\x7d\xd3\xe1\xb9\x7e\xfc\x59\xb9\xab\x3b\xc1\x1b\x8e\x9b\x3c\x95\x98\xfe\xa0\xea\x5b\x42\x8a\x45\x32\x77\x44\xa6\xac\xa0\x76\x86\x56\x4f\x3e\x89\x07\x52\x9e\x22\x75\x6c\x7f\x55\xf3\x72\xec\x8f\xda\x9d\xc1\x93\xb0\xd7\x26\xee\xd8\xf1\x7d\xb6\xa6\x40\x3e\xd8\x3e\xfb\x44\xa3\xa6\x0f\x1e\x5d\xb7\x95\xe1\x4d\x85\x4d\x2f\x00\xd3\x29\x4b\x76\x47\xcf\x52\x72\x58\x51\x40\xc9\xd9\xfb\xd3\x1f\x0f\x2f\x4e\xc8\x77\x27\x7f\xc3\x8f\x47\x71\xde\x2c\xf5\x96\x8f\x53\xeb\x32\x50\x72\xc9\x96\xd9\x66\xb7\x33\xbf\x70\xa6\x60\xcf\x1e\x9d\xbc\xbf\x38\x7d\x7d\x7a\x64\xdf\x0a\x3f\x1e\xad\xa6\x02\xa3\x21\x95\x81\x88\x75\x29\x1e\x10\x88\xbc\x79\x06\x72\x05\x31\xc0\x97\x08\xc3\x5f\xb3\x92\x5b\x45\x63\xb8\xb9\x64\xaf\x1f\x74\xdf\x5b\xdb\x6d\x4c\x02\xed\x8a\x41\x94\x9e\xc9\xf2\x99\x5e\xb3\x93\xd0\x9e\xf0\xdc\x98\x43\x8e\x82\xb5\xe4\xe5\x21\x35\xd6\x8a\x54\x9c\x5d\xa1\x5b\x31\xc8\xd2\x4d\x0e\x64\x9c\xbe\x60\x64\xe5\xc9\x5e\xfe\x6f\x97\x1a\x54\xa3\xdf\xb6\xef\x2a\xd9\x68\x3a\xf6\xb4\xfc\x1c\x33\x12\x40\x11\xab\xe5\xea\xd9\xb5\x76\xe2\x5c\x53\xed\x6d\x7c\xe7\x05\x85\xcd\x32\x94\x86\x8c\xf2\xdf\x9d\xfd\xbb\x2d\xf2\x81\xbb\x9e\x94\xa9\x27\x65\x6a\xc7\x95\x29\x67\x8d\xed\xe2\x66\xb2\x87\x2b\x14\x6b\xca\x99\x25\x13\xf0\xa2\x7a\xd1\x04\x1f\x2b\x0b\x2d\xe9\x1b\x59\x66\xd9\x4f\x88\x37\x1f\x00\x72\x19\xd9\x7b\x7f\x7e\xf8\xf5\x8b\xdf\x7f\xb5\x37\x82\x7f\x7e\xf3\xe2\x3f\x7e\x67\xff\x79\x72\x74\x7c\x7e\x78\xf6\xd5\x6f\xa3\x3f\xbe\xfe\xc3\x37\x7b\x39\x60\x89\xdc\xe3\x7e\xfb\xd5\x4b\x07\xd9\xbb\x77\x72\xfc\xd5\x6f\x7f\xfb\xf2\x3f\xb2\xb5\xb8\xc9\xc2\x3e\x35\xfd\x70\xf2\xa1\xe1\xd8\x7a\xff\x9c\x15\x52\x94\x3b\x89\x48\xb6\x89\x4e\xef\x67\xaf\xe9\x07\x5e\xb7\x35\xa9\xf8\x8c\x41\xc8\x09\x92\xc3\x8d\x71\x61\xb7\x3c\x62\x20\x92\x43\x59\x58\x34\x84\x80\x64\x83\xc9\x46\xdc\xf5\x7c\x21\x57\x4c\x4d\xa9\xe1\x75\x87\xed\xb5\x31\xc4\xa5\x87\x3b\xd0\xec\xd5\xc5\xab\x83\x1f\xb2\x6b\xa4\x9a\xe5\x4d\x4f\x67\x44\xe2\x72\x8c\xc8\x65\x3b\x65\x63\xda\x70\x0c\xba\xa3\x14\xd0\xcc\xb8\xa0\xf8\x1f\x7e\xf7\xcd\x8b\x17\xfb\x5f\x7d\x43\x16\xb2\x55\xfa\x60\xb2\x72\x7b\x06\x5a\x5c\x54\x02\x54\x3a\x27\x1e\xf4\x42\x2a\x03\x75\xbf\x54\x90\xaf\x7f\xf7\xe2\x05\xd9\x7f\x09\x04\x1c\xb8\xd8\x90\x67\x2f\x28\x4f\xa7\xd3\x2c\x3a\x2e\xae\x34\xd7\xe4\xf7\x7f\xf8\xdd\x57\xdf\xd8\x31\xff\xe3\x25\x29\xe9\x32\x93\x3a\x7f\x71\x93\x27\xd4\x6d\x19\x6b\x61\x30\x38\x28\x41\x53\x5c\xf1\xcf\xbb\xda\xfa\x1c\xc7\x78\xd8\x92\x5f\xba\x69\xfe\x12\xe7\xf9\xcd\x86\xed\x8c\x40\x03\x42\xae\xaf\x48\x06\x42\xb4\x13\x19\xbd\xb5\x45\x9f\xbb\x36\x8a\x72\x84\xf2\x63\x62\x26\x55\x81\xd1\xb1\x3e\xef\xe5\x30\x9f\x7f\xe9\x15\xfa\xff\xd2\x0f\x95\x09\x66\x37\x04\x2e\xc7\x5a\xfb\x44\x28\xe4\xc5\x99\xcc\xb1\x28\x52\xcc\xfd\xf4\xfa\xcd\x96\xeb\x50\xca\x95\x8e\x97\xb3\xc0\xe0\xde\xa0\x71\x9d\x0c\x7f\xa6\x83\x14\x2d\xc9\xd1\xf9\xfb\x0e\xde\x95\x96\xa5\x62\x5a\x7b\x53\x2c\x20\xdb\xee\x8c\x0a\xa0\x59\xa1\x98\xc9\x98\x4b\x86\x0f\xbc\xa1\xac\xdf\x7d\xf9\x54\xd1\xff\x29\xd7\xe7\x8f\xea\x7a\x8e\xec\xf0\x04\xe9\x4a\x1e\x3f\xa4\x2b\xae\xe5\x13\x9e\xeb\x13\x9e\xeb\x13\x9e\xeb\xe0\x27\xed\x28\xf2\xc6\x13\x9e\xab\xbf\x1e\x43\x05\xfd\x13\x9e\xeb\x27\x5c\x4f\x95\xf4\xb7\x5e\x4f\x95\xf4\xbd\xeb\xdf\xbc\x92\xfe\x09\xcf\x35\x71\x90\x27\x3c\xd7\xdb\xae\x27\x3c\xd7\x27\x3c\xd7\x27\x3c\xd7\x27\x3c\xd7\x04\x9a\x36\xe1\xb9\x22\xf3\x6f\x42\x75\x75\xfe\xa6\x0e\xd2\xf5\xdf\x10\xd1\x55\x5b\xf6\x2b\xd8\x61\x51\xc8\x56\x98\x0b\x79\xc9\x06\xe2\xdd\xad\x78\x7f\xd7\x9e\x6e\xc5\xd0\x4d\xde\xe0\xf5\x9b\x77\xd2\x35\x9c\x2f\x75\x7e\xb0\x61\x9f\xcf\xa4\xa7\x6d\xc9\x99\xc8\x81\x10\x90\xff\x70\xf4\xb4\x79\x0d\xd1\x6a\xdc\xa2\x64\x65\xf7\x85\x3b\x39\x8d\x65\x9a\x09\x39\x24\x8a\x15\xbc\xe1\xae\x51\x33\xc5\xcf\x73\x64\x1d\x58\xf9\xc0\x21\xfb\x6a\xb6\xb4\x52\x83\x55\xb3\x70\x54\xb9\xcf\x39\x53\x91\x8f\xd4\x69\x79\x2b\x84\xe6\x70\x7e\xd9\x57\x42\x9b\x07\x2c\x9c\x6b\xae\x99\xcf\x12\x73\x01\xed\x68\x46\x2e\x62\x1a\x62\x70\x92\x3c\xc4\x44\xaf\xee\x56\x22\x63\xa0\x34\xe3\xb9\xc5\x1e\x43\x6a\xcb\x1a\x91\x9d\x61\x04\x89\x1e\xac\x24\x65\xab\x7c\x67\x59\xab\x1b\xf1\xd2\xea\x68\x1e\x46\x14\xc5\x68\x8e\x6d\x87\x92\x38\xec\x2a\xdd\x71\x14\xc2\x05\xd0\x62\xc1\x74\x44\x2f\x7a\x23\x2e\x5d\x26\x4b\x96\x02\x76\x7b\x35\x55\x3b\xe7\x02\x5d\x1a\x30\xaa\xd7\x60\xbb\x62\x73\xf7\xd2\xab\x24\x5f\x44\xe4\xd8\x9f\xe7\x48\x1c\x00\x63\x6a\x63\xc5\x3b\xce\x0c\x9f\xc5\x7f\x68\x22\xab\xd2\x07\xd7\xff\xf0\x82\x34\x4c\x15\x28\x96\xb2\x04\xf0\x34\xd6\xd4\x1b\x49\x2a\x6b\x31\x5b\x55\xe6\xe6\xe1\x43\x6c\xff\x38\x12\x00\x98\xff\x90\x29\x43\x33\x60\x6d\x1a\x52\x31\xaa\x0d\x79\xf9\x82\xd4\x5c\xb4\x26\x5f\xcf\xe0\x7b\x48\x28\xf8\xdd\x37\x03\x9f\x76\x0f\x1d\x88\xb3\x48\x92\xd8\xab\x02\xff\x0e\xae\x15\x17\x51\xac\x61\xb3\x34\x92\x0b\xb3\xea\x68\x89\x12\xdd\x73\x9d\x56\x10\xc9\xdc\x89\xf3\x20\xb3\x8b\xe1\xd7\x56\x4e\x97\x69\x10\x3c\x39\x16\xdd\x0d\x1f\x83\xd8\x53\xf2\x9f\xee\x43\x5c\x62\x89\x6a\xc8\xc2\x1a\xbd\xe0\x97\xd5\x0b\xaa\x10\x93\x06\x8a\x38\x7c\x36\x51\xda\xea\x1c\xdb\x81\x01\x20\xe2\x55\x18\x97\x6b\x52\x86\x8f\x83\x6b\x96\x8b\xb1\x51\x8c\x05\x92\xc1\xd6\x87\x08\xb2\xcf\x42\x1a\x84\x56\x38\x50\xc5\x1f\xa6\xd8\x8f\x89\x62\x73\xae\x8d\x4a\x0b\xfb\x8d\xd3\x0f\xcc\xa1\x56\xc0\x5c\xc9\x36\xb9\xa1\x73\x2e\xb1\x05\x44\x78\x17\xaf\x4f\xf4\x28\x0a\xa6\xf5\x90\xa2\x19\x77\xd4\x39\x1e\x83\x31\x12\x9f\x35\x58\xec\x28\x46\xcb\x77\xa2\x4a\x8e\x99\xe6\x9a\x68\x4f\x07\xfa\xd3\x40\xab\x82\x2c\x47\xd8\xa0\x7e\xfb\xba\x05\x40\x57\x1d\xc8\x10\x56\xa2\xa5\x63\x7f\x3e\x06\x28\xd4\x28\x52\x98\x2e\xd5\x63\x5d\x64\x46\x2b\x9d\x1c\x67\x1c\xee\x6b\xf1\xdb\x77\xfb\x0b\x84\x74\xf4\x05\xba\xab\xee\x94\xaa\xab\xe6\xf4\x8b\xf5\xde\xff\xc0\xa9\xc1\xe9\xbe\xc2\xce\x70\xa5\x51\x26\x07\xd5\x70\x72\xbc\xb2\x82\x19\x13\xc2\xf6\x03\x0d\x31\xc0\x8c\x2f\x86\x73\x9c\x52\xc8\xba\xa6\xfa\x20\x99\x18\xcc\x2f\xa2\x00\x24\xa7\x5d\x7d\xbb\x30\x8a\x56\xdd\x0c\x45\x00\xa6\xdb\xda\xd6\x86\x09\x2a\x92\x53\x26\x73\xf1\x0c\x52\x41\xe4\x75\x28\x47\x9d\xf3\x2b\x26\x56\xf7\xb3\x73\x47\x7c\x4b\x8b\x4b\x36\x00\xbb\xe9\x07\xed\xd7\xb8\x5c\x0a\xea\xb0\x6c\xec\x31\x74\xc5\xad\x38\x60\xe5\xca\xb8\x7a\xd4\x65\xb8\x6b\x66\x3c\xd8\x10\x1a\x76\xdb\x5a\xb8\x56\xb3\x64\xd8\xd8\x5c\xcb\x66\x69\xb8\xaf\x33\x4f\x63\x46\x87\xe2\x57\x05\xf3\x76\xb1\x1d\x6f\x5b\xf3\x8d\xef\x97\x65\xc6\x3d\x37\x47\x32\xca\x55\x06\xbb\x74\x54\x84\x9e\xac\xec\x59\xb5\xf4\xa0\xed\xab\x7b\x61\xba\x84\x68\xe0\xb0\xf3\x26\x71\x3e\xd4\x34\x49\xc9\xcc\xc1\x76\x6a\x5a\xf6\x0f\x96\xf7\xb4\x94\x9a\x7c\x0b\xd5\xfb\xc7\x0c\xdc\x28\x0f\x6d\x34\xbc\xff\xf6\xf8\x23\x06\x83\xa5\xfa\xf3\x32\x16\x78\x4d\xe7\x69\xa6\xf5\x98\xd4\x52\x70\x23\x55\xca\x99\x37\xd4\x56\x98\xe9\x21\xe5\xa5\xb9\xe4\x26\x52\xe1\x7d\x1b\x1d\xa4\x67\xa8\x2f\x8d\xd2\xa2\x80\x75\x97\xb2\x25\xd7\x14\x3c\x83\xc8\xdd\xe9\x1a\xeb\x05\x6f\x5e\x91\x13\xa1\x5b\x15\x21\x94\xad\x92\x60\x0f\x3a\xcf\x9c\xfe\xb8\x83\x8d\x64\x67\x1f\xb1\x70\x1d\x08\x69\x32\x1d\x27\x1f\x68\xdd\x54\x4c\xbf\x22\x7b\xec\x83\xf9\x66\x6f\x44\xf6\x3e\xcc\xb4\xfd\x8f\x30\x33\xbd\x37\x21\xa7\x75\x53\xf1\x82\x9b\x6a\x49\xb8\x98\x31\xa5\x42\xec\x1d\x7f\xb0\x92\xfa\x9f\x4e\xc9\x1d\x63\xde\xda\x48\x45\xe7\xec\xb9\xd3\x0d\xbe\x50\xd3\x54\x4d\x64\xf0\x99\x04\x9b\x70\xdb\xcc\x0c\x44\x04\x27\x3f\x48\x63\xfc\x68\xc8\xf1\xb4\x71\x55\x98\x63\x99\xc9\xe5\x1f\x60\x5d\xdc\x0a\x3c\x57\xd3\xf2\xf9\xfb\x93\xc3\xe3\x37\x27\x93\xba\xfc\x62\x21\xaf\xc7\x46\x8e\x5b\xcd\xc6\xc9\x25\xa5\x83\x57\xe6\x92\x2d\x01\x07\x7d\xcb\x6b\xe3\xc8\xe8\x79\x51\x8d\x84\x64\x01\xf8\xdc\x1a\x20\xef\xbf\x3d\xfe\x41\x0f\x89\x74\x45\x4e\x8a\xe7\xcc\x14\xcf\x0b\xd6\x2c\x9e\xbb\x91\xff\x5d\xd7\x3f\x4a\x31\x59\x9b\x93\xa4\x07\xfa\x33\x73\xdb\x1c\xe5\xe9\x40\xed\xb5\x90\x55\x85\xb5\xd5\xf6\xd4\x3a\x62\xcd\x22\xdc\xf0\xa8\x57\x7e\x48\x99\xca\xc0\xe2\x94\xdd\x8b\x0f\x10\x40\xeb\x97\xc9\x29\x4e\xb9\x58\xcf\xd2\xd0\x3f\x67\xe0\x93\x61\xc7\x4c\x24\xbc\xd4\x34\xaf\x12\xf1\x38\xc5\x55\xaa\x3a\xf3\x28\xfc\xc3\xef\xfd\x97\x9a\x19\xd0\x62\xb9\x20\xd8\x47\xf9\x8d\xd5\xaa\x77\xc1\x11\xbc\x13\xac\x34\xc4\x0f\x8d\x65\xd1\x03\xba\xa6\xe5\xe2\x84\x40\x08\x58\xdd\x51\x86\x32\x6d\xcd\x82\x09\xe3\xa1\x9f\x5c\x1d\x77\xac\x0b\x91\xd3\x19\xfa\x03\xcb\x01\x69\x94\xf2\x8a\x29\xc5\x4b\xa6\xc9\x60\x65\x28\x8e\x03\xf1\xea\x51\xb3\xd6\xa0\x0c\xc6\x1c\x09\x83\x43\x73\xe8\x73\x26\x3a\xe4\xcf\x9b\xdf\x8d\x8c\xf9\x9d\xc8\x95\xbf\x8f\x2c\xf9\x5d\xcc\x8f\xcf\x94\x61\x38\x3c\x27\x3e\x7f\x96\xf7\xce\x04\x39\x7a\x6a\x27\x7c\x92\x4d\xed\xa4\x65\xcd\x07\x80\xf0\xed\x80\x48\xcf\xa3\x78\xc2\x3c\xdc\xf9\x21\xba\xa0\x15\x3b\x7d\xb7\xad\x70\x84\x1b\xbe\x1f\x92\x38\x77\x1f\x36\x4c\x79\x74\x57\x1f\x1d\x33\x86\x16\x0b\x17\x20\xf0\x79\x09\x52\x00\xf4\x0e\xee\x1b\x22\x64\x99\x9a\x6e\x18\xc7\x24\x3c\x0d\xb7\xc7\x25\x3c\xf9\x9f\x57\x6c\x62\x4e\x0d\xbb\x4e\xb4\xdf\xc7\x9d\xda\x98\xfa\x7b\x70\x8c\x3f\xc5\x36\x36\x06\x16\x86\xc7\x2f\x42\xf9\xfd\xda\xb3\xef\x3f\x62\x31\xb9\x21\x56\x91\xe3\x18\x80\x27\x6e\x25\x9a\x8b\x57\x90\xc3\x1f\x66\x69\xca\x88\xdb\x75\x59\xf8\xcf\x3d\xcb\x73\x11\x2c\xa4\x43\x1f\xf3\xea\xb2\x17\x70\x87\x67\xa7\xe4\x2f\x78\xfb\xd6\x66\xaf\x51\xd2\xa0\x1b\xf4\x58\xd6\x94\x27\xd7\xa0\xf5\xe6\x60\xf5\xa1\x7e\x32\x62\x4b\xd6\x4f\xc2\x59\xb8\x97\xb8\x9b\x3d\x06\x6d\x21\xc5\x8c\xcf\x5b\xc5\x4a\xe2\x02\x57\x5b\x9b\xa5\x9d\xf3\x10\xad\xf9\x6c\xc8\xbe\xfd\xee\x39\xf4\xb0\x3b\x98\x74\xde\xa2\x15\x57\x52\xba\x6f\xf7\x1e\x5d\x50\x9f\xa5\xe3\x26\xca\x88\xf1\x28\x62\x9d\xb3\xc6\x33\x3f\xa8\xe3\xa1\x92\x6c\xc0\xa8\x42\x73\x28\x2f\x88\x0a\x3c\x5d\x07\x31\xae\x3b\xa0\x30\xf4\x0a\x8d\xc8\xf7\x72\xce\x85\x3f\x5e\xa4\x2b\xf0\x99\xd1\x74\xf7\xcc\x93\x7f\x64\xed\x7a\xf2\x8f\x3c\xf9\x47\x9e\xfc\x23\x37\x5f\x5a\x57\x27\x82\x4e\xab\xf4\x6a\xee\x7e\xc1\x7b\x78\x1c\x79\x5d\xd1\x39\x61\xf0\xc7\xf3\x92\x6b\xfb\x5f\x72\x7e\xfe\x3d\x64\x45\xb7\xc2\xbb\xce\x81\x37\x9d\xf6\x35\xf2\x33\x84\x67\xe9\xf6\x8e\x31\x54\x73\xde\x0c\x00\x35\xcb\x76\x90\x75\xa4\x84\x2e\xb4\xba\x07\xe2\xe0\xee\x80\xf3\x8c\x06\xa0\x48\xac\x83\x9e\x32\x2b\xad\x8a\xcb\xb3\x28\x31\x59\x2a\xfb\x99\x88\x3e\xca\x62\x7c\x64\x7a\x66\x4e\x33\x64\x85\xa4\x21\xac\x70\x96\x2b\x78\x1d\x3d\xcf\x6b\xe3\x5e\x09\x39\x77\x0b\x09\xdf\x51\xad\x65\xc1\xbb\x52\x02\xd7\x69\xc5\xab\xe8\x25\xa8\xe8\x5b\x9b\x64\xb4\x83\xf3\x4c\x08\x9a\xdf\x1b\x2c\x13\xcf\xd8\xee\x0e\xaa\x63\x4b\x84\x0b\x3f\x6f\x5b\x9b\x04\xdc\x6a\x43\x50\xb4\x73\x09\x89\x8e\x92\xd5\x79\x0c\x02\x61\x35\x15\xdc\xa3\xd4\x3a\xde\x4b\xf6\x38\xe1\x05\x59\xa0\x5c\x6f\xe0\x5a\xae\x83\x48\x82\x4e\xec\x5b\x59\xad\x74\x50\xef\x2c\x0e\x5e\xb4\x37\xfa\xb5\x4c\xf8\x99\x4b\x2a\x07\x59\xdd\xc8\xa6\xad\xb0\x92\x3e\x4c\x5a\xda\x6c\x0d\xcc\x46\x45\xda\x1e\xde\x67\x3b\xd4\xf2\x88\xd0\x1f\xb7\xbd\x21\x63\x20\xca\xbb\x23\x8e\xfa\x3d\x8a\x8d\x96\xa6\x4b\xff\xb8\x0c\x1e\xcf\xed\x03\x8e\xe6\x02\x18\x4d\xf7\x2e\xf7\x80\x49\x7b\x1e\x9c\x17\xbf\xfb\xe6\x9b\x01\xca\x10\x57\xac\x30\x12\x8a\x01\x1d\xd8\x73\xc8\x98\xa5\x8a\x81\xed\x8f\x68\xa0\xde\xbf\x8c\xc5\x60\x66\x50\x5e\xc7\xf6\x10\x49\xb7\x82\x40\x9a\x03\x03\x63\x38\xc2\xe8\xa0\x04\xcd\x6c\x59\xf3\xd0\xbd\xe0\x74\xcb\xdd\x0b\xb6\xda\xb3\x60\x9b\x9d\x0a\xb6\xd7\x9f\x60\x8b\x5d\x09\xb6\xdd\x8b\x60\x2b\x1d\x08\xb6\x9e\xd0\xfd\xf0\x3d\x06\xb2\x40\x05\xe6\x80\x09\x1c\xda\x45\x60\x20\xc4\x60\x1e\x78\xc1\xc1\x7d\x02\x1e\xa2\x3b\x40\x26\x1f\xe7\xf0\x4e\x00\x79\x61\xa0\xb6\x8d\xfa\xbf\x43\xaa\x37\x5e\xbb\x89\xf0\xbf\x15\x5c\xff\x6d\xa3\xf9\x6f\x11\xc3\x3f\x1f\x96\x5c\x2e\xbc\xfe\xe1\x18\x72\x79\x05\xc7\x96\x10\xf9\xef\x11\x87\xff\x41\xd0\xf7\xef\x1b\x73\x7f\x37\x8b\xdb\x86\x62\x78\x0f\x46\xee\xd6\x99\xa0\xbb\x73\xe5\x80\xec\x82\x5b\xbc\xa3\x64\x63\x78\xc1\x37\x66\xf4\x8d\xb6\x9f\x61\x89\x8f\x6e\x68\x01\xfb\xba\xcd\x5c\x81\xf5\x20\x3e\x58\x32\xd8\x57\x8e\x94\xc8\x24\x85\x37\x8b\xbb\x1c\x09\x78\x77\xbe\x92\x11\x1d\x3e\x7e\xf8\x44\xe8\x30\xf4\x47\x52\xa1\xfd\xd4\xed\x58\x32\xf4\x53\x56\xf0\xa7\x5c\xbb\x98\x15\xfc\x50\x08\x26\x9f\x5f\x62\x66\xf9\x94\x98\x19\x5f\x3b\x98\x98\xe9\x99\x56\xc7\xa7\x31\x1e\xbb\x60\x5a\xca\xa9\x55\x52\x3d\x98\x5f\x27\x83\x0f\xcf\x4e\x93\x47\x2f\x14\x03\xa0\x7e\x5a\xe9\xc9\x26\x9b\xd3\xa7\x1f\x39\x0b\x37\x74\xad\x36\x86\xd5\x4d\xa2\xf0\x26\x4f\x79\x99\x9b\xae\xa7\xbc\xcc\xa7\xbc\xcc\xa7\xbc\xcc\x9b\xaf\x5d\xce\x2e\x5a\xb4\x35\x15\x63\x7b\x9e\x42\x52\x67\xaf\x9c\x64\x45\x4d\x9f\x10\x77\x02\x0e\x12\x5a\x88\xae\x0b\x98\xcb\xad\xe0\xbf\xb6\xac\x8b\x74\x04\x93\x6d\x07\xf2\xc0\x80\x8e\xdd\x59\x2e\xb4\x64\x57\xce\xd9\x42\xae\xe1\x03\xba\xb9\x0c\x4b\xe7\x8f\xc6\x61\x4b\x06\x83\xf7\x02\x93\x66\xc1\xd0\xd8\x3e\x5b\x31\xb6\x7b\x3e\x5d\x27\xc8\x41\x8e\x0e\x8b\x0e\xc7\x96\xa0\x65\x51\xfb\xee\xae\x69\xc9\x94\x91\x9a\x2b\x25\x95\xcb\x54\x8b\x5f\x1f\x0b\x9f\xf8\x7c\x61\x98\x42\x0f\x29\x96\x67\xa4\x8b\xcf\x73\x66\xdc\x2e\x80\x5d\x64\x24\xa1\x02\xb1\x57\xed\xbf\x3d\xc8\x07\x4c\x8d\xd7\x40\xa6\x6c\x41\xaf\xb8\x6c\x07\x80\xaa\x9d\xa3\x3e\xb5\xe7\x1e\x09\xb6\xc2\x52\xb6\x21\x17\xa5\xd5\x76\x32\xc2\x2a\xe8\x75\x3e\x48\x1e\xfa\x6d\xf7\x50\x70\x9b\x97\xd2\x07\xa3\xc7\xec\x03\xd7\x66\x7d\xce\x3d\x0b\xb8\xdc\xa7\xad\x6c\xe6\x2b\xdd\xd8\xd3\xf7\xc7\x64\x98\xde\x1c\x5b\xb8\x47\x44\xdf\x05\x72\x75\x0e\x5f\x7d\xcc\x01\xe2\xfa\xfd\x20\x64\x39\xa9\x69\xb1\xe0\x22\x03\x44\xed\x8f\x3d\xc2\x7a\x9e\x90\x09\x39\xac\xaa\xae\x8e\x49\x87\xd2\x41\xef\x19\xe9\xbf\x94\x5d\xa4\x24\x72\x2c\xe7\x2a\x56\x42\x9e\x15\xaa\x58\x50\x9f\xa8\xf9\xc4\x0d\x30\xb9\xaa\xaf\xa9\x62\x93\x42\xd6\xe4\xe8\xfc\x94\x94\x8a\x27\x76\xe0\xda\x72\xfd\x39\x2e\xf1\x59\x5a\xe8\xfa\x73\xf3\xf7\x3c\xf9\x7a\x76\xca\xd7\x13\x4a\x18\x2a\x5e\x2c\x4f\x8f\xf3\x96\x45\xe0\x33\xbd\xa2\xa9\x43\x49\x84\xfd\x9c\x7c\x4b\x35\x2b\xc9\x1b\x2a\xe8\x1c\x03\x56\xfb\xe7\x67\xdf\xbe\x39\xb0\x0c\x0f\xc1\xb8\xd3\xe3\x8d\x75\x13\xe7\xf1\xc3\xdf\x6e\x0b\xf1\x9c\xac\x4e\x5d\x36\xdd\x7e\xed\xa9\x89\xd3\xb7\x35\x30\x78\x12\xd4\xd6\xb3\x01\x41\xe0\x0d\x00\xf9\x67\xab\xfd\xbf\xb0\x50\xc1\x37\x6b\xd4\xab\x47\xea\x55\x5d\x5e\x3e\xf4\x04\xac\x47\x23\xad\xfd\x78\xc9\x96\x77\x96\xde\x63\x58\xc1\x81\x83\xe3\x7b\xd4\xf4\xe6\x2e\x41\x51\xa6\xcc\x6d\x14\x7e\x5a\xd6\xdc\x27\x64\xc6\xf5\xd6\xf5\xdc\x28\x6a\xd8\x7c\x79\xcc\x9a\x4a\x2e\x2d\x17\x9f\x45\x89\x3b\x78\xeb\x14\x55\x69\x35\xa5\x05\x51\x6d\x05\xbd\x10\xca\xb5\x0e\x89\x82\xb1\xb2\x13\xf3\x5c\x68\x43\xab\xca\x2e\x20\x3c\xff\x56\x8a\x3e\x59\x39\xf8\x54\x35\x60\x8c\x74\x7e\xf4\xae\x7e\x87\xe0\xb7\x1f\x5b\xed\x4f\x57\x04\x60\xf8\x8f\xf3\xdb\x5d\x32\x21\x3f\x39\xe7\x31\x45\x61\x40\x89\xf6\xbe\xad\xec\x01\x5d\x95\xfd\x8e\xca\x68\x72\x38\x56\xc0\x6e\x0d\x20\xff\xec\x4b\x3a\x17\xa0\x64\xba\x97\x0a\x11\xfd\xfc\x93\xc6\xc7\xa6\xcd\xd7\x0b\xd4\x40\xed\x83\x09\x6d\x9a\x8a\x23\xca\x80\x54\x2e\x09\x37\x8a\x27\xaf\xdf\xf6\x29\xa2\xf6\x8e\x6a\xe8\xdd\xd4\xce\x31\xb9\x62\x6a\xfa\x29\xfe\xb7\xbb\x6a\x94\xb4\xe1\x90\xce\xf4\xc9\x22\x2c\x55\x69\x3c\x3c\x3b\xc5\x81\x36\x45\xf8\xfd\x97\xc8\x10\x6e\xa9\x7d\x42\x0f\x96\xa3\xb9\x30\x40\x68\xe6\x74\x78\x76\x8a\x3d\xd2\x5c\x3f\xa7\x2e\x34\x60\x2d\x76\x8a\xc5\x97\x5d\x1b\x5a\x3a\xb7\x4f\x34\x44\x0a\x76\x97\x86\xa6\x96\x02\x26\xda\x9a\x61\xaf\xa8\x40\x0c\xe1\x02\xc6\x09\x54\x74\x11\x08\xf4\x2a\x4f\xc8\xde\x5e\x6c\x13\x22\x3c\x8b\x8a\xe8\x06\x51\xb7\xf7\x65\xef\x2e\x2b\xd7\xba\x17\xfb\xd4\x13\xfe\xee\x59\xcf\x77\xcc\x72\x4e\x38\x31\x33\x64\xee\x08\x29\xde\xbb\xf9\xfe\xe1\xfd\xf7\xf7\xce\xa0\x6f\xfb\xc3\xb9\x8e\x3d\x0c\xba\x8d\x36\x54\x19\x4e\x2b\xd2\xaa\xca\xa7\x17\x22\x12\x89\xab\x08\x5c\xd0\xab\xa8\x1b\xd2\x84\x90\x2f\x91\x2b\x1d\x33\xa0\x28\x03\xa7\xa8\xeb\x0e\x36\x6b\xab\x6a\x44\x66\x5c\x50\x7b\x90\xb1\x86\x44\x49\x5e\x9f\x4c\xf1\x39\x17\x05\xb3\xd3\x34\xf6\x7c\x49\x80\x72\xef\x36\x0a\x32\x0d\x72\x34\xe3\x90\x0b\x92\x62\xe5\x5b\x01\x7e\xe1\x99\x54\xe4\xa8\x6a\xb5\x61\xea\xbd\xb4\xc7\x70\x57\x6e\x42\x66\x4a\xd6\x84\xc6\x5f\x7f\xcb\x45\x79\xa7\x4a\xa8\xf7\x70\xb4\x17\x54\x10\xc6\x21\x31\xca\x0e\x0d\xf9\xd0\x96\xd9\xbb\x4d\xb5\xaf\xdb\x62\x61\xa7\x68\xaf\x91\xa5\xde\xb3\xd2\x79\x0f\xc3\x8d\x7a\xef\xc0\xfe\xb5\xfa\xae\x58\xbd\x11\xfd\xee\x39\x6d\xf8\xde\xc1\x88\xc0\x84\x43\x72\x9e\xfc\xf4\x6c\xbc\xcf\x74\x1f\xf9\x09\x03\x57\x5f\xd2\x2e\x7a\x1f\x3f\x01\x36\x86\xe8\x52\xdf\xae\x17\xdc\x60\xbd\x8e\xdd\x29\x18\x03\x08\xbd\x66\x56\x0f\x52\x42\x0e\x7d\x10\xcd\x6e\xad\x9a\x51\x9f\xaf\xcb\xae\x98\x5a\x9a\x85\x6b\x60\xe1\xa5\xe8\xd3\xca\xc1\xce\x18\xb4\x6a\x4e\x94\xf9\x15\xea\xb6\x1b\xc8\x84\xb5\x15\x7a\xf6\xe5\xb3\xd5\x23\xa9\x3b\x83\xff\xbd\xd7\x03\x94\xb0\xa4\xb5\xf8\xd1\xfe\xb2\xbf\x0e\xf8\x11\x1e\x26\x41\x1c\x7e\xff\xbd\x4b\x4f\xc1\x09\xff\x8e\x0b\x88\x7a\x83\x3e\xe4\xb1\x00\xdc\xa2\x6d\x5c\x29\xa0\xf0\xdf\x76\x95\xd6\x8d\xae\x4f\x35\x94\x6e\xa1\xd1\xdb\x99\x37\x3d\xea\xd6\x07\x38\x63\xf5\x8d\x2c\x37\x6f\xe2\x1e\x93\x9c\x46\x37\x87\x5c\xe2\xce\xcd\xe9\x9e\xe5\x2c\xa7\x65\xb3\xd1\x0a\xbd\x7d\x4d\x6f\x59\xbf\x9b\x28\xe9\xfc\x74\x20\xf6\xa3\x6f\x2e\xba\xc4\x08\x32\xab\xe8\xbc\xe3\x45\x10\xe2\xa8\xd9\x1f\x9d\xff\xe8\x5f\x41\x93\x1b\xa0\x87\x3f\x6a\x3a\x7d\xcc\x58\x1a\x77\xb3\x74\xe3\x1d\x37\x86\x32\x3e\x6e\x31\x85\x87\xdf\xcc\x4d\x9f\x92\xf7\x65\x6e\x75\xd5\xdf\x34\xff\xde\xb5\x4e\x23\x4e\xf0\x9d\xe3\xbc\x2b\x04\xaa\x4d\x40\x87\x3b\xff\xb1\xc7\x26\x1f\xa1\xf7\x06\xa6\xbd\x64\xcb\x6b\xa9\xca\x8f\x33\xec\x61\x10\x66\xfe\x27\xde\x98\xf7\xc9\x60\xe8\x8e\x97\x1b\x03\x3b\xc9\xac\x7a\x2b\xf1\x15\x9d\xb2\xea\xe3\xa4\xdf\x60\x18\xbc\xa1\x8d\x7d\x9d\xae\x64\x13\x3d\x52\x2e\xcb\x0c\xad\x53\xac\xf3\xf1\x15\x69\x52\xcd\xa9\xe0\xff\xc4\x3a\xd7\xc2\x4a\x0a\xa9\xf8\x3f\x37\xb3\xda\x3e\xc6\xf4\xd1\xc7\x55\xb1\xc2\x1c\x38\xae\xdf\x28\xb2\x3f\xb2\x2d\x68\x59\x72\x54\xc1\xce\x3e\xc2\xc1\xb7\xcf\x17\x17\x97\x77\x59\x69\xb8\x1f\xcb\x6c\xba\xc0\xde\x3d\x2e\xf3\x2d\x62\xe1\xe3\x3b\xf7\xf6\x34\xba\x4f\x38\x9e\x5a\x75\x4b\xa1\xc8\xad\xbf\xaf\x29\xc7\x53\x7b\x73\x1b\xaf\x1b\x66\xd7\x71\x13\x75\xba\xb5\x95\xa5\xf6\xfd\xc2\xd3\x1e\x60\x5f\x0d\x9a\x70\x56\x53\x9e\x3a\x63\x78\x0d\x58\xb2\x9a\x9a\x56\x71\xb3\xf1\xa4\xbe\xfd\x87\x5c\x7c\xd7\x4e\xd9\x8f\x4c\x69\xbb\x1e\x77\xfd\xb9\x80\x8a\xb3\xc3\xb3\xd3\x8d\xd3\x92\xe7\x44\xbe\xd1\x91\x01\x7e\x33\x47\xb9\x55\x17\x49\x2b\x68\x3d\xe5\xf3\x56\xb6\xba\x5a\xc6\x11\x14\x4a\x2e\xb9\x28\x27\x84\x9c\xa2\x5b\x55\x3c\x33\x84\x0a\x29\x96\xb5\xbb\x55\x14\x55\x5b\xb2\xde\x13\x6f\x3a\xca\x24\xa1\x57\x92\x97\x84\xb6\x46\xd6\xd4\xf0\x82\x14\x92\xa9\x02\x40\x54\xe3\xe7\xb7\x9a\x11\xda\x7b\x62\xf7\xdb\xa2\xd5\x46\xd6\xa4\xa6\x4a\x2f\x68\x55\xdd\xc4\x12\x19\xb4\x03\x70\xa7\xdd\xf8\xad\x9d\x95\x1b\xbf\xbc\xba\x65\x1e\x3e\xbe\x1d\x60\xe0\x41\xdb\xc1\x12\x37\xe8\x01\x57\x37\x33\xf5\x27\x3c\xc3\x21\xe0\x6e\xec\xcb\xd1\xe3\xcf\x8b\x05\x23\x4d\x3b\xad\xb8\x06\x13\x1e\x04\xd7\x92\x4c\xd9\x82\xbb\xd2\x9b\x8f\x4b\xac\x1b\x97\xf8\x63\xf3\x7c\x9b\xc8\xf8\xe8\x0c\xdd\x22\xe1\x6f\xfd\xad\x3b\x01\x4f\x6b\x3a\xff\x04\xd5\xfe\x86\xed\xfb\xbd\x15\xfb\x54\x2c\xc3\x79\x0a\xcd\x54\xf5\x88\x48\xe5\x0a\x89\xbd\xed\xa7\xdc\x57\xa1\x45\xb0\x22\xef\xdc\x8c\xba\xba\x68\xb7\x0d\x00\x65\x80\xa9\x99\x54\xb5\x9d\x77\xae\xc8\xac\x15\xe0\x0d\xbf\xc1\x2e\x84\x1c\x3e\x38\x7f\x9c\x33\x93\x56\x5a\x06\x61\x00\xcb\x26\x3c\x61\x84\x6a\x72\xcd\xaa\x0a\xd3\x88\xb0\xf3\x6b\x04\xdb\xdc\x61\x59\x76\xa9\x84\xd3\xcd\xb6\x65\xc9\xe7\x4c\x1b\xb2\x7f\xfe\xd7\xc3\x03\x50\x88\xc0\x59\xb7\x24\x86\xce\x27\x2b\xf9\xe1\x98\x4c\x6a\xd5\xad\xb2\x05\xb5\xac\xa0\x86\x56\x72\x8e\x19\x68\x56\xa4\xd8\xdf\x37\x15\x5d\x42\x19\x57\x43\x15\xd4\x0a\x16\xe8\xb0\x24\xaa\x15\x37\x75\xfe\xbe\xbf\x93\xf2\xe3\x32\xe9\xb6\x9e\xda\xb7\x84\x87\x3f\x2e\x73\x3e\xd2\x27\xf8\x7e\x8f\xe0\xff\x8f\xbd\x6b\xeb\x8d\xdb\xc6\xfe\xef\xfd\x14\xfc\x1b\x05\xc6\x76\x3d\x4e\xfe\x6d\xb3\xc0\xe6\xcd\xb0\x5d\x20\x58\xc7\x09\x6c\xb7\x05\x76\xdb\xa2\xb4\xc4\x99\x21\xac\x21\x55\x52\xf2\x25\x45\xbf\xfb\x82\xe7\x90\x94\x34\x23\x91\xd4\xcc\xd8\x09\x8a\xe5\x4b\x5a\x8f\x78\x27\xcf\xfd\xfc\xa8\x58\xc1\xa8\xee\xad\x9d\x72\x1f\x6c\xf5\x95\x48\xd8\x92\x66\x77\x74\x6e\x76\xde\x12\x33\xe7\x36\x72\x34\xc5\xa7\x83\xd8\x98\x51\x30\x30\x06\x3b\x30\xc7\xca\x1a\x30\xbf\xea\xfd\xf0\xc4\x19\xbc\xaf\xd1\xa6\x60\xb9\xd7\x44\xfb\x26\xfc\xf9\x74\x9a\x40\xce\xb5\x19\x40\xcd\xf5\xc2\x63\x41\xe4\x7c\x86\x09\x13\xe4\xb6\xe6\x45\xee\x1f\x34\xd0\xe0\xfc\x72\x17\x38\xc4\x64\x6e\x2c\x1e\x79\xad\xd9\xac\x2e\x30\xdf\xc6\xd6\xb3\xc4\x40\x30\xec\x7f\x49\xef\x18\xc9\x16\x54\xcc\x1b\x04\x75\xa3\x10\xa2\x83\x33\x97\xc0\xef\x3d\x2a\x42\x8b\x30\xd0\x82\x57\x4f\xfd\x48\x43\xa6\x3b\xfb\xc2\x50\xff\x89\x98\x42\xda\x16\x7f\x24\xd4\x1c\x0c\x69\xfd\x18\x5c\xb5\xb7\x7b\xb8\x22\xcd\xf3\x57\x74\xc9\x44\x4e\xa8\x10\xb2\xb2\x31\x89\x52\x59\x2d\x2e\x50\x11\x2a\xb9\xb7\x8f\x4c\x8d\x5c\x66\xf5\x92\x89\x6a\x58\xef\x9d\x5a\x00\x96\xbc\xce\xd8\xfa\xc6\x98\x99\x36\x7f\x64\xe2\x9e\x2b\x29\x4c\x83\xba\xff\x80\xbc\x03\xf0\xa4\xba\x04\x1d\xd0\x6d\x24\xad\xab\x05\xec\x8b\x24\x39\xab\x98\x5a\x72\xc1\x6c\xd2\xd4\x92\x8a\x8a\x67\x1a\x2d\xb0\x78\x82\xec\xb6\xc3\x21\x07\x0a\x37\xb8\x05\xb8\xa4\x9e\x85\x12\x20\xbf\x6b\xcd\x40\x5e\x79\x26\x05\xd2\x7e\x07\xa1\xbf\xbc\x67\x8a\x94\x8a\xf9\x73\x0b\xee\xf3\x7e\xfd\x34\x97\xd5\x54\xb3\x92\xa2\xb7\xd3\xcb\x8e\xca\xdb\x20\xcd\x05\x43\xe7\x51\x51\x2e\x28\x38\x46\xcd\xa4\x0c\x01\x5e\x3c\x95\x0b\x26\x34\x52\x73\xaa\x18\x29\xf8\x92\x0f\x59\x64\x00\x08\x69\x49\x1f\xf9\xb2\x5e\x92\x82\x89\x39\x82\x35\x7c\xfb\xda\x1c\x60\x45\xb3\x8a\xf5\x3f\x2a\x1c\xa1\x5e\x4b\xfa\x78\x01\x8d\xbd\x25\xdf\xbe\xee\xf9\xbd\x63\x5d\xbc\xa7\x05\xcf\xf1\xc8\x0d\x9d\x6d\x55\x17\xa6\x3b\x56\xcc\x8e\x97\xb4\xca\x16\x4c\xef\x4f\x7e\xfb\xcf\xeb\xe9\x3f\x4f\xa6\xff\xa6\xd3\x4f\xd3\x5f\xbf\xd9\xff\xe5\x97\xe3\xce\x1f\x0e\x0e\xbf\x9e\x1c\x0c\x10\xcf\x25\xd3\xda\x10\xe7\xd5\xad\xf3\x88\x00\x99\x5c\x96\xd2\x90\x13\x39\x23\x3b\xd8\x8b\xe0\xac\x26\xff\x07\xf3\xd2\x65\xc1\xab\xfd\xc9\xe4\x78\x32\x39\x38\x86\x90\x6f\xbd\xff\x78\x44\x1e\x9b\x09\x4f\x7e\x7b\x6d\x66\xf8\xeb\x37\x5f\x4f\x26\x07\x07\x93\xd8\xdc\xec\x40\x3a\x23\xe6\xa2\x7f\xca\x86\xe9\x83\xef\xb4\x60\x34\x37\xf3\xf9\xc4\x94\x5c\x1f\xb6\x62\x65\x41\x07\xdc\x20\x6b\x52\x68\x03\xa8\x6b\x88\x1f\x98\xcb\xa5\x60\xbe\x8d\x63\x72\x8d\x52\x0a\xcc\x0f\xee\xc8\xef\x4b\x56\xd1\x9c\x56\xf4\xf8\x92\x2e\xd9\xef\x5d\xe0\x3d\x59\xe4\xa6\xa1\xd1\x87\x11\x0d\x3c\x32\x2e\x39\x5f\x18\x52\xe7\x3f\x87\xeb\xee\xa4\xc1\xa0\xdf\x65\x4b\xa1\x19\xa6\x7f\xfe\x58\x2a\x16\x0e\x10\xeb\x8c\x75\xb5\x52\xd7\xa3\x51\x74\x67\x62\x65\x20\xa0\xa1\xc7\xb0\x35\xed\xbf\x00\x89\x38\xb9\x3c\x1b\x76\xf2\xc5\xdd\x13\x11\x77\x44\x7a\x24\xc0\x49\x60\xec\x2e\x10\xc0\xfe\xd2\x8d\x50\x71\xf0\x4b\x00\xee\x87\x90\x40\x54\x34\xfc\xc0\x7c\x1c\xe8\x16\xf7\xb9\x01\x08\x6b\x4c\x8d\xc3\x2e\x9c\xa4\x38\xa3\x94\xe8\xa2\x18\x5e\xdb\xd4\x4f\x63\xf0\xa3\xb4\x60\xa3\x28\xa6\xda\x10\x66\x1a\xee\x09\x80\xf5\x38\x7f\xb2\xdf\x86\xd4\xe0\xac\x44\x17\x94\x9b\xea\x88\x81\x46\x43\x4b\xfc\x29\xe8\xa4\x86\xdc\xb1\xa7\x89\xb5\x9f\x9a\x1b\xb4\xe0\x25\x32\x43\x1b\x69\x12\xdb\x7e\x2c\x3f\x19\xd6\xd5\x92\x03\xcd\x5d\x7a\x27\x8e\xc8\xa5\xac\xcc\x3f\xe7\x40\xc6\xe1\x38\x9d\x49\xa6\x2f\x65\x05\x7f\xd9\xc9\x4a\xe1\x00\x77\xb9\x4e\xd6\xb8\x8e\x61\x05\x70\xdd\x5b\x26\x78\xbb\x1e\xf8\x32\x4f\x4b\x64\xe6\x9a\xbc\x13\x46\xee\xc3\x29\x47\xba\xf0\x50\xa3\xda\x76\xe0\x18\xae\x90\x62\xea\x32\x7f\xd7\x7b\xb0\xeb\x28\x55\x67\x19\x37\xee\xcc\x76\x84\x49\x73\xf0\x0b\xd7\x8e\x2f\x79\xe5\x96\x3a\x87\x63\xd4\xdb\xb9\x64\x6a\x0e\x11\x43\x59\x24\xc2\x25\xd5\xcf\x9b\xe4\xdd\x4d\xf6\xe9\x6e\xe4\xc9\xdd\xa0\x12\xf0\xa4\x8b\x41\xaf\x0f\x19\x71\x1e\x5b\x4d\x21\xd5\x5f\xa2\x3b\xe8\x4f\x43\xdc\x61\x4b\xff\x02\x98\x5e\x7d\x4c\x4e\x88\xe6\x62\x5e\xb0\xce\x6f\x36\x88\xab\xd5\x4c\xa0\xab\x12\x72\xdf\xff\xa8\xf9\x3d\x2d\x0c\x9b\x81\x5c\x43\x0f\xf0\x25\x67\x6b\xcc\xf6\xc8\xc2\xf1\x1a\x82\xe8\x95\xcf\xbd\x3b\xf6\xb4\x77\x14\x4c\xbe\x6c\x9f\xe8\xbd\x77\x62\xaf\x41\xae\xeb\x9c\x52\xcf\xd3\x40\xa6\xdc\x83\xdf\xf6\x36\xe7\xdb\x41\x0e\x95\xee\xbb\x22\xf1\x23\x37\x2e\xa3\x5b\xdf\xf1\xfe\x60\xd7\x94\x43\xe2\xe4\xcb\x7d\x7d\x00\xde\x1a\xc1\x08\x40\x2b\x2a\xd0\xb4\xcd\x5f\xdb\xef\x04\xdc\x32\xe8\xad\x6c\x1e\x71\xa8\xcb\xb9\xa2\x39\x23\x73\x45\xcb\x81\x4b\x3b\x4e\x3a\x45\x11\xb7\xaf\xcb\x80\xb1\xef\xcb\xb7\xac\x0d\xec\x75\xc0\x96\x1d\xac\xf7\xc0\x6e\x17\x52\xde\x01\xde\x1a\x1f\x54\xf8\x76\xe3\xa8\xf9\x19\xfb\x3a\x6b\xfe\xe6\x8c\xe8\x9a\xe4\xac\xa2\xbc\x00\xf3\xc0\x87\x8b\xf7\x36\x34\xdd\xc9\x6a\x6e\x94\xfd\x34\x63\x07\x16\x47\x9a\xdb\xec\x8b\x2b\x76\xcf\xd9\x83\xb5\x68\x0d\x91\xa8\x29\x99\x33\x01\x61\xcf\x81\xe4\x85\x29\xd1\x3c\x67\xe7\x60\x54\x1a\x6e\x68\x8b\xd0\x8b\x81\x31\xc7\x68\x45\x98\xd7\x45\xf9\x5c\x02\x8f\xf3\x76\xf9\x8f\x52\x05\xde\x2b\x49\x03\xef\x4c\x03\xe6\xf4\xd8\x17\xdf\x7f\xff\x5d\x80\xaf\x80\x4d\xe5\x2d\xf9\xc7\x9b\x37\xdf\xbd\x19\xfe\x8c\x0b\xfc\xec\xff\x87\xe7\x67\x6f\xdb\xe9\xd5\xd9\x17\xb0\xde\xb9\xcf\x22\x0a\x87\x75\x25\x34\x35\xa3\xbc\xa8\x95\x4d\xc2\x4b\xd4\x1e\x7f\x68\xd7\x81\x90\x9c\xc6\x44\x4d\x5d\x8b\x2e\x7b\xc5\x66\xb5\xcc\xb8\x60\x9a\x2c\xe4\x03\xa9\x85\x62\x99\x9c\x0b\xfe\x89\xe5\x08\xc1\xae\x31\xac\xda\x90\x70\x7f\xc4\x09\x13\x79\x29\xb9\xa8\x80\xc5\x2e\xa8\xc8\x8b\x50\x04\x6c\xc2\x4c\xdb\x37\x78\xab\x25\x03\x6e\x34\x6a\xc1\xde\x37\x35\x56\x96\xcb\xcc\xd9\x05\x30\x21\x97\xc3\x65\xdb\x6a\xa6\x48\x18\xaf\x03\x36\x97\x9e\x31\x8e\x33\x09\xa0\xa9\x03\xfe\xf6\x47\xcd\xd4\x13\xa0\x41\x34\x8a\x5b\x2b\x4f\xe5\xa6\x01\x05\x76\x73\xb4\x42\x25\x1d\xf4\x34\x93\x1e\x93\x4c\x4b\xd4\x6a\xc2\xa6\x57\x46\x65\xad\x74\x10\xfc\xe9\x62\x89\xc8\x09\x11\x75\x51\x04\x7a\x1a\x68\x44\xc8\x50\x3c\x12\x96\x24\xfb\x43\x9a\x61\x20\xd5\x04\x85\xe5\xf3\x19\xa2\xda\x13\xdf\x91\x16\x35\x36\x49\xe5\x33\x19\xa8\xb0\x6c\x62\xa6\xc2\x32\x22\x29\x2e\x3d\x21\x2e\xed\xa1\x81\x04\xf3\x15\x96\x31\x19\x73\x89\xcf\x03\x3c\xa7\x41\x0b\xcb\xa8\xc8\xea\x34\xe3\x56\xcf\xd0\x13\xb3\xa7\x9e\xd1\xd0\x85\xe5\x39\xcc\x5d\x58\x46\xad\x63\x8a\xe9\x0b\xcb\x26\xab\xf8\x02\x66\x30\x3b\xe7\x97\x34\x86\x45\xba\xdc\xb1\x49\x0c\x4b\xb2\x61\xcc\x0e\x6e\x54\x1a\xc4\x88\x14\x88\x91\xe9\x0f\x5b\xa4\x3e\x6c\x5c\x35\xc1\x78\x86\x65\xdc\x89\x7e\x41\x43\x9a\xeb\xf0\xc5\xcc\x69\x58\x5e\xda\xa8\x86\x25\x99\x9f\x8e\x33\xb0\xb5\x1b\x8f\x1c\xd7\x4d\xe0\x13\x15\xe3\xe2\x5e\xe2\x2b\xd2\xa3\x94\x88\xab\xb5\x8a\x2b\xba\xc4\x03\xb0\x51\xab\x4c\x78\xed\xab\xad\x53\x2d\xa4\xbc\x23\xb5\x8e\x7b\xd4\x82\xf3\x8e\x80\x2e\xec\x44\x09\x1e\x73\xc3\xae\xea\x82\xfd\xcc\xab\xc5\x87\x06\xc8\x0b\xae\x59\x55\x97\x05\xac\x45\xeb\x07\x73\x2e\xaf\x1a\xe5\x04\xe3\x56\x8c\x3e\xba\x5c\x32\x91\x37\xa1\x43\xc1\x0e\xb5\x51\x6f\x31\x57\xad\x28\x50\x85\x83\xae\xd8\x63\x49\x45\xa3\xac\x40\x48\x45\xe8\x08\x27\x1e\xe0\x54\x99\x2c\x19\xbd\x60\xb4\xbc\xbd\x8a\x56\xd0\x82\x1b\xe8\xa0\x12\x90\x5b\x56\x48\x88\x3a\xc3\x7c\x3c\xcc\x5d\x4d\x4e\xe0\x7f\x37\x73\xb5\xac\xe4\x64\x5f\xbf\xf3\x11\x31\x20\x23\x16\x3c\x63\x9e\x65\xca\x14\x88\xb8\x2b\x2b\x4d\xa7\x09\xe8\x29\xbc\x2f\x91\xef\x8d\xe0\x79\x5b\xf0\x3b\x5a\xf2\xb8\x29\x10\xcb\x06\x3b\xef\x9a\x6e\xef\x7d\x3b\x56\x2b\xba\xfb\xee\xe3\xff\xed\x7f\xa8\x6c\xb1\xff\x0d\x80\xe1\xae\xb7\xbf\x4b\x51\x1b\x19\xd8\xef\xfd\x0a\x6b\xc9\xa8\x32\xcc\x1e\x2c\xf9\x53\x72\x7a\x75\x7e\x72\x73\x7e\x44\x7e\xfc\x78\x06\xff\x9e\x9d\x5f\x9c\x9b\x7f\x4f\x3f\x5c\x5e\x9e\x9f\xde\x18\xe1\xf9\x30\x3a\x84\x99\xd1\x06\x8b\x02\x77\xdf\x48\x28\xb2\x4b\xcc\xa9\x78\x22\xb3\xba\x32\x14\xb9\x19\x4c\x67\x94\x14\x4d\x88\x34\xcf\x53\x52\xe8\xff\x76\x67\xb0\xb3\xe7\x7e\x43\x57\xad\xb6\xad\x35\xc3\x25\x77\x68\x31\xf1\x99\xbd\xcc\x21\x4f\xce\xfe\x1f\x7b\xc6\x37\x03\x06\xe8\x0f\x83\x6d\x97\x1f\x62\xc1\xc2\xed\x32\x29\x65\xae\x27\x16\x01\xc2\xfc\x77\x7c\xd9\xa1\xca\xab\x42\xce\x27\x1e\x38\x82\x91\x42\xce\x89\xae\x6f\x3d\x2a\x08\x08\x82\x49\xad\x1d\xba\x66\x3a\x10\x07\x47\x1e\x3a\xa4\xd5\x6a\xf2\xe0\x3a\x6d\xb6\x1b\x18\x33\xae\x57\x3a\xa3\x05\xeb\xb4\x64\xfe\x30\x76\x40\x87\xaf\xfa\x67\xe8\x34\x15\xae\x56\x5a\x4c\xa1\x14\x0f\xbc\xc8\x33\xaa\xf2\x35\x72\xd1\x44\xd3\xe2\xc9\xc1\xe7\x66\x05\x08\x8e\x4d\xd7\x08\x2f\x1c\xb7\x58\xdd\x33\x55\xd0\x12\xb3\xcb\xe1\x9d\x64\xc8\x86\x49\x18\xe2\x19\x2b\x19\xa0\xd3\xe0\xd3\x90\x8c\x30\x91\x15\x12\xf0\x93\x51\xea\x3c\xea\x6e\x0b\xe6\xce\xb8\x67\xdc\x52\x51\x47\xfe\xe6\xec\x15\xd2\x94\x77\x4d\x75\x30\xf7\x79\x10\xe3\xdc\xa1\x5a\x44\xdb\x41\x63\xa0\xd7\xb2\x19\xd9\xb3\x99\x1a\x7b\x47\x64\xcf\xc3\x59\xe7\x56\x23\xdf\x3b\x8c\x3f\x14\xe0\x1b\x68\xe3\xd1\x80\xc2\x6e\x23\x1d\xa6\x30\xce\x36\xfc\x17\x9c\x6e\x17\xa3\x91\x3c\xf4\x06\xea\xdd\x88\x94\xd6\xd5\x02\x73\xe8\x76\x14\x6f\xa9\x3d\xd1\xb5\x51\x37\xb8\x4f\x5b\x8f\x78\xef\xb0\xd3\x7c\xe5\xde\xbc\x20\x42\xda\xcd\x53\xcc\x9c\xc6\x50\x82\x59\xbb\x5c\x77\xee\x9e\x8f\x71\x69\x63\xdd\x73\x45\x4a\x0a\x49\x18\xee\xcb\x78\xb3\x67\x16\x8b\x9d\x6b\x33\xe2\xb4\x5b\x19\xbc\x44\xad\xb0\x86\x44\x5b\xc5\xb5\xaf\x71\x5a\x50\xad\x7b\x1c\x9e\xc0\x03\x4c\xc3\xf6\xc5\x13\xc3\x7b\x6d\xcc\x07\x3c\x90\xbd\xa0\xf7\x81\xa9\x26\x0c\xba\xa2\x6a\xce\xaa\x70\x40\x02\x15\x4f\x1f\x82\x4f\x0b\x4d\x93\x1f\x1c\x9d\x6e\x60\x31\xe2\xa2\x9a\x4a\x35\xc5\x2a\x6f\x49\xa5\xea\x21\xbb\x43\xc5\x97\x4c\xd6\xd5\x35\xcb\xa4\xe8\x87\xa2\xb0\xdf\xed\x2c\xc2\x62\x04\x3e\x87\x0d\xf2\x39\x71\xe2\x77\xfb\xbd\x33\x67\x8e\x6a\x64\x73\x17\xd8\xd3\x85\xac\xfe\x70\xf1\x7e\x9b\xcd\x26\x80\x4b\x18\xde\xc9\x9f\x2c\x4f\x16\x73\x3f\x52\x3b\xf2\x60\xb5\xf7\x75\x35\xbe\xd2\xa9\x0f\x18\x09\x7f\x6d\x17\x23\x0c\x1f\x3c\x38\x7f\x5d\xd1\xaa\x5e\x3b\x0d\x31\x56\xd4\x9b\xca\x77\x0d\x4d\xb5\x7d\x56\x6d\x64\x52\xd4\xe8\x10\x9a\x19\xbe\x73\x19\x25\xc7\xc4\x56\x34\x57\xb6\x52\x94\xa3\x39\x8c\x66\x55\x4d\xd7\x5d\xee\xa6\xb2\xcd\x46\xe9\xc7\x23\x0f\x18\xc4\x42\x46\xb0\x8c\xa9\x4a\x5f\x50\x5d\xfd\x58\xe6\x74\x00\x99\x66\x25\xcb\x44\x57\x70\xa7\x50\xa7\x7d\x10\x2c\x37\x4c\xc8\x2e\x09\xb6\x47\x1e\x0c\x75\xaf\xb1\xc5\x9e\x06\x23\xa7\xd2\xdd\x31\x53\x7d\x6a\xba\xea\x1f\xf5\x95\x34\x6b\x72\xd2\x4b\xa3\xba\xc9\x3c\xb1\xd1\x1a\x8e\xa6\xa0\x35\x22\xd8\x63\x9f\x54\xb9\xfd\x88\x0b\x46\x45\x7f\x0a\x7f\x67\xac\xa7\xf8\xdd\xf8\x33\x65\x3b\x20\x0f\x0b\x6e\xd4\x2d\x44\xf0\xd1\xc4\x09\xb1\x39\x2b\xd8\x40\x42\xe3\x96\xf9\x3f\xb6\x87\x33\xdb\xc1\xb6\xa1\xd3\x1f\xbb\xcd\x79\x8f\xb7\xd5\x2d\x2d\xd6\x43\xa3\xa5\x59\xd9\xc7\xdb\x2a\x56\x27\x0c\xc2\xdb\x6d\x21\xb3\x3b\x7c\x2a\x03\xa0\x32\xf9\xa7\x81\xb4\x40\x2c\x98\x2a\x2b\x72\x9e\xf9\x70\x85\x52\xc9\xb9\x62\xba\xb3\xd4\x88\x2c\xae\xb1\x75\xd3\xa7\x59\x73\xdf\x6f\x2b\xbf\x96\xd4\xc2\x82\x29\xbd\x4c\x8a\x92\xd3\xcb\x01\x15\xa0\xe3\x4b\x5f\x57\xd1\x31\xa9\x17\xde\x5a\x6a\x65\x14\x83\xcd\xfa\xd5\xbf\x86\x01\x2d\x76\x9a\x3f\x14\x82\xd5\xc0\x2f\xb8\x7b\x4d\x2d\xf8\x55\x00\x80\x23\xd5\x15\x10\x01\xda\x20\xe9\xaa\x93\x1f\x72\x4a\x6b\x3b\xcd\xa9\xd8\x79\x98\x4c\x02\xc6\xfc\x98\xe0\x97\xd4\x37\x09\x47\xb9\xbd\xc5\x98\xc7\xb8\x3a\xb7\xa5\x51\xa6\x2c\x22\x17\xc6\xc7\xcd\xa4\x1a\x54\xdb\x76\x37\xf8\x30\x2c\x4b\xb4\x21\x23\xd3\x0e\x07\xa2\x77\x19\xb7\xa3\xa0\xbe\xca\x11\xa1\x64\xc1\x75\x25\x95\x8d\x10\x31\x0c\xb0\x52\x54\x68\xfc\x7d\x90\x57\x6c\x1b\xda\x7e\xea\x87\x40\x68\x59\x32\xaa\x9c\x9f\xde\xb2\x33\xaa\xc1\x88\x9a\x49\x95\xf7\x0e\xcc\x99\x64\x7a\xc5\xb1\xde\xee\x77\x80\x48\x55\x50\x5d\xdd\xf8\x31\x18\x99\x22\x91\x1a\x77\x25\x26\x3b\xc5\x66\x36\x0e\x19\x59\x8a\xe6\x47\x49\xa8\xb0\x86\xaa\xa1\x2e\x92\xce\x57\x5c\x2e\x69\xe6\x86\x02\xe0\x46\xf3\x7a\xf0\xc2\x5e\x6b\x8a\x2f\x33\x72\x97\x2d\x9e\x36\xe4\x13\x7c\xc7\x90\xf8\x77\x0c\x6d\x75\xc7\xec\x51\x70\xc0\xdc\x0a\x87\xf7\xff\x34\x7c\xd4\x08\x88\x09\x68\x06\xf1\xd7\x6a\xab\x2d\x2b\x17\x03\xa0\x27\x3d\x93\xf1\xb7\xc8\xe7\xf0\x24\x5f\x87\xc4\xd1\x28\x46\x75\x08\xf1\x69\x4c\x10\xf4\xad\xe2\x6c\x46\x4e\xe9\x92\x15\xa7\x54\xef\x72\xe5\x81\x3c\x84\x4c\x35\xec\x78\x7e\x4c\x26\x57\xad\x30\x99\x4b\x59\xbd\x67\xd5\x10\x02\x41\x14\x18\x32\x85\x10\x3c\x2b\x09\xd8\x5a\x1d\x89\x5f\xf8\x2d\xaf\xfa\xd6\x23\x0c\x5c\xec\x2f\xe2\x4a\x87\xd1\xce\x86\xae\x71\xf7\x02\xd7\x0a\xcc\x93\xd9\xa6\x17\x39\x82\xa0\x34\x74\x79\x53\xae\xed\x67\xba\xb0\x63\xae\x6a\x64\xf6\xbe\x89\xeb\x5e\x53\xcf\xda\x42\xdc\x74\xd4\x69\xf0\x15\xb5\x63\xe3\x11\x3d\x87\x6b\xa3\xe4\xed\x52\x30\xfa\xbc\xa8\x84\x76\x53\x07\x7f\x0f\x48\xfe\xd3\x30\x9f\xdf\x16\xf1\x30\x07\xff\x9b\x39\x01\x2f\x19\x2e\x77\xe6\x7a\xb5\x06\x18\xff\xaa\x1a\xfc\x1f\x7a\xf7\xfd\xc8\x3a\xe7\x63\x1f\x30\xa1\xd8\x3d\xe4\x51\x08\xc8\x0f\x65\x44\x30\x40\xf2\x1a\x82\xf1\x21\xe9\x2a\x5b\x9a\xba\x16\x57\xa5\xa3\x6a\x32\x89\x6f\xad\xfb\x28\xb4\xc1\x58\x52\xb5\xc2\x04\xad\x7b\x84\x3a\x18\xd7\xa9\x46\x34\x16\x15\x30\x47\xb6\xd7\x6f\x78\x5e\x2d\x2b\x0f\xa0\x99\x2a\x57\x40\xcf\x31\xd2\x22\x33\x54\x39\x83\xb7\xfd\x90\xcc\xfb\xe7\x57\xdb\x46\xe6\xab\x55\x1a\x08\x31\xf7\xdd\x13\xbe\xab\x69\xd5\x35\xdf\xdd\x9a\x47\xa1\x46\x93\xdb\xfb\x02\x70\x53\xa3\x07\xe8\x79\x81\x14\xb1\xc4\x4e\xdd\xe7\x3f\x6f\x29\x18\xda\xc1\x33\xf6\x4c\x10\xb6\x9a\xa9\x7b\x96\x77\x3c\x8c\xf6\x8d\xcd\xee\xdf\x5a\xfe\xe8\xa6\x7d\xbb\xec\xe4\xcf\xbf\xbe\xfa\x6f\x00\x00\x00\xff\xff\xa9\xf6\xe1\x13\xcd\x57\x0c\x00") +var _operatorsCoreosCom_clusterserviceversionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\x23\xb9\x95\x27\x0c\xff\xef\x4f\x81\x90\x7b\x5e\x49\x63\x91\xaa\xb2\xc7\x7e\x3d\xb5\xb3\xe3\xd0\x56\x55\x77\xeb\xe9\x2e\x95\x42\x92\xdb\x8f\xa3\xdd\x6b\x83\x99\x87\x24\x46\x99\x40\x0e\x80\xa4\x8a\xde\xde\xef\xfe\x04\x0e\x80\xbc\xf0\x22\x91\x09\x48\xcc\xaa\x4e\x38\xc2\x5d\x22\x93\xc0\x49\x5c\x0e\xce\xf5\x77\x68\xc1\x7e\x00\xa9\x98\xe0\x6f\x08\x2d\x18\x7c\xd2\xc0\xcd\x5f\x6a\x7c\xff\x47\x35\x66\xe2\x7c\xf1\xfa\x57\xf7\x8c\xa7\x6f\xc8\xdb\x52\x69\x91\xdf\x80\x12\xa5\x4c\xe0\x1d\x4c\x19\x67\x9a\x09\xfe\xab\x1c\x34\x4d\xa9\xa6\x6f\x7e\x45\x08\xe5\x5c\x68\x6a\x3e\x56\xe6\x4f\x42\x12\xc1\xb5\x14\x59\x06\x72\x34\x03\x3e\xbe\x2f\x27\x30\x29\x59\x96\x82\xc4\xce\xfd\xd0\x8b\x57\xe3\xdf\xbe\x1a\xbf\xfa\x15\x21\x9c\xe6\xf0\x86\x24\x59\xa9\x34\x48\x05\x72\xc1\x12\x70\x8f\xa9\xb1\x28\x40\x52\x2d\xa4\x1a\x27\x42\x82\x30\xff\xc9\x7f\xa5\x0a\x48\xcc\x60\x33\x29\xca\xe2\x0d\xd9\xf8\x8c\xed\xd7\xd3\x44\x35\xcc\x84\x64\xfe\x6f\x42\x46\x44\x64\x39\xfe\xdb\xbd\xab\x1d\xfe\xd6\x0e\xef\x26\x08\xbf\xcf\x98\xd2\xdf\x6d\x7f\xe6\x7b\xa6\x34\x3e\x57\x64\xa5\xa4\xd9\xb6\x17\xc1\x47\xd4\x5c\x48\x7d\x55\x93\x65\xc8\x48\xd4\xa2\xf9\x6f\xf7\x20\xe3\xb3\x32\xa3\x72\x4b\x6f\xbf\x22\x44\x25\xa2\x80\x37\x04\x3b\x2b\x68\x02\xe9\xaf\x08\xf1\x63\xd9\xce\x47\x84\xa6\x29\xae\x17\xcd\xae\x25\xe3\x1a\xe4\x5b\x91\x95\x39\xaf\x06\x37\xcf\xa4\xa0\x12\xc9\x0a\x8d\x6b\x72\x37\x07\x9c\x35\x22\xa6\x44\xcf\x81\xbc\xbd\xfd\xa1\x7a\x94\x90\xff\x52\x82\x5f\x53\x3d\x7f\x43\xc6\x66\x01\xc6\x29\x53\x45\x46\x97\x86\x84\xc6\x53\x76\x35\xdf\xd9\xef\x1a\x9f\xeb\xa5\xa1\x57\x69\xc9\xf8\xec\xb1\xf1\xdd\x4b\xec\x46\xc2\xa2\xb1\x4e\xcd\xe1\x7f\x58\xfb\x7c\xd7\xe1\x25\x64\x40\x95\x9b\x01\xa6\xf6\x23\xc7\xfd\x78\x8d\x9c\x9b\xb5\xcf\x77\x25\xc7\xaf\x06\x35\x23\x13\x3d\xa7\xda\x92\x25\xb8\x21\xb5\xc8\x68\x02\xea\x51\x82\xd6\x1e\xf1\x14\xad\x7d\xb1\x85\xa4\x66\x97\x9a\xea\x52\x8d\x8b\xf9\xa6\x77\xbc\x9e\x3f\xf9\x86\xf6\xc1\xc5\x6b\x9a\x15\x73\xfa\xda\x7d\xa8\x92\x39\xe4\xb4\xde\x92\xa2\x00\x7e\x71\x7d\xf9\xc3\xef\x6e\x57\xbe\x20\xed\xd9\xd9\x78\x18\x09\x53\x66\xaa\x90\x6f\x11\xcf\xb8\x70\xed\x96\x05\x90\x7f\x6c\xfc\xcd\x6d\x01\xc9\x3f\xc6\x6b\x94\x8b\xc9\x7f\x41\xa2\x1b\x1f\x4b\xf8\xef\x92\x49\x48\x9b\x14\x99\x09\xf2\xcc\x70\xe5\x63\x33\xff\x8d\x8f\x0a\x69\xb8\x94\x6e\x70\x20\xdb\x1a\xdc\xb8\xf5\xf9\xca\xdb\xfe\x3c\x5a\xf9\x96\x10\x33\x49\xee\xad\x53\xc3\x9a\x41\xe1\x0e\x75\x1b\x16\x52\x37\xb3\xd5\x4e\x96\x50\x48\x50\xc0\x2d\xb3\xc6\x4d\xc5\xdd\x5b\x8e\xd7\x3a\x37\x53\x04\x52\x19\x8e\x55\x66\xa9\xe1\xe9\x0b\x90\x9a\x48\x48\xc4\x8c\xb3\x7f\x56\xbd\x2b\xa2\x05\x0e\x9b\x51\x0d\x4a\x13\x64\x33\x9c\x66\x64\x41\xb3\x12\xce\x08\xe5\xe9\x5a\xdf\x39\x5d\x12\x09\x66\x5c\x52\xf2\x46\x8f\xf8\x13\xb5\x4e\xcb\x07\x21\x81\x30\x3e\x15\x6f\xc8\x5c\xeb\x42\xbd\x39\x3f\x9f\x31\xed\x6f\xab\x44\xe4\x79\xc9\x99\x5e\x9e\xe3\xc5\xc3\x26\xa5\xb9\x09\xce\x53\x58\x40\x76\xae\xd8\x6c\x44\x65\x32\x67\x1a\x12\x5d\x4a\x38\xa7\x05\x1b\xe1\xcb\x70\xbc\xb1\xc6\x79\xfa\x6b\xe9\xb6\x89\x5a\x19\x78\xe3\x79\x20\xfe\xc2\xd8\x73\xb1\xcc\x05\x62\x37\xa7\xed\xd0\xbe\x6c\xbd\x26\xe6\x23\x33\x8d\x37\xef\x6f\xef\x88\xa7\xc8\x1d\x75\x5c\xa2\xfa\xd1\x0d\x33\xe4\x57\xcb\xcc\x2c\xe3\x53\x90\xf6\x97\x53\x29\x72\xec\x15\x78\x5a\x08\xc6\x35\xfe\x91\x64\x0c\xb8\x26\xaa\x9c\xe4\x4c\x2b\xdc\xd6\xa0\xb4\x59\xc8\xf5\x8e\xdf\xe2\xed\x4e\x26\x40\xca\x22\xa5\x1a\xd2\xf5\x47\x2e\x39\x79\x4b\x73\xc8\xde\x52\x05\x2f\xbe\x76\x66\x8d\xd4\xc8\x2c\xc8\xce\xab\xd7\x94\x5d\xd6\x7f\xb0\x76\xea\x09\xf1\xc2\xc6\x3e\xcb\xbd\x95\xd1\x90\x14\x92\x8c\x4a\x2b\x2f\x11\x0d\x59\x46\x3e\x7e\xff\x81\xcc\xc5\x83\x39\x48\x8c\x2b\x4d\xb3\x0c\x0f\xa6\x93\x69\xd6\xba\xc6\x3b\x20\xa1\x9c\xe4\x94\xd3\x19\x10\x5a\x14\x8a\x4c\x85\x24\x94\xcc\xd8\x02\xb8\x67\x00\xab\x6b\xb1\xf5\xfd\xb6\x71\x36\x62\x6f\xa4\x8d\x97\xbc\xff\xd6\x11\xbc\xf2\xcd\x36\x5e\x67\xda\x9a\xb8\xb8\xdf\xc4\x9a\x76\x51\x77\x81\x47\x8a\x93\x92\x2b\x2d\x4b\xdc\x25\x29\xb9\x87\xa5\x3b\x5d\x39\x2d\x88\xd2\xc2\x7c\xf8\xc0\xf4\x9c\xd0\xe6\xc9\xa2\x1a\x8f\xcb\x64\xfd\xb5\x4c\x53\xa0\xc9\x64\x49\x8c\x70\x8c\xec\x4c\x0b\x91\x21\xaf\xc3\xfe\x0c\x5b\x23\x12\xb4\x64\xb0\x00\x42\xe5\x84\x69\x49\xe5\xb2\xda\x5b\xeb\xe7\xe0\xd1\xf9\xc7\x79\x69\xc8\x6a\xdb\x67\x8f\x3c\xb6\xb3\x89\xbd\x4e\x9c\xa8\x98\x56\xe2\x7a\xf7\x89\xbe\xbe\x74\x3b\xb8\x96\xfd\x95\xdb\xc1\xa0\x88\xd9\xa9\x4e\x2c\xaa\x94\x08\x24\xc0\x6d\xcd\x94\x08\x59\xed\x2d\x32\x59\x6e\x1c\xa3\xb1\xd5\xc9\x04\x0c\x1b\x94\x94\x9b\xa9\xdf\x78\x84\x3a\x4c\xec\x63\x9b\xd1\x34\xf1\xc0\x37\xed\xfc\x66\xdf\x54\x4a\xba\x99\x7a\x42\x98\x86\x7c\x4b\xcf\x64\x75\x9a\x9b\xf3\x59\x7d\x6c\x08\x5c\xb0\x14\xcc\xc4\x6a\xca\xec\x2e\x33\x3c\x81\x4e\x44\xa9\xed\x7c\xba\x47\x52\xb2\x60\x94\xd0\xd9\x4c\xc2\x0c\xf7\xff\xd6\x61\x9f\x98\x13\xdb\xb6\x1f\xfb\xba\x8d\xac\x8e\xf5\xe8\x13\x86\xfd\x3e\xfa\x00\xdf\xc4\x3c\x9a\x0f\xac\x8b\xf1\xed\xf6\xd4\x1a\xda\x46\x13\x33\x27\x7e\x6a\x85\x7c\xf4\xe1\x5d\xd6\xd6\xb6\x27\x56\xd8\xb6\xf6\x3a\xaf\x10\xe2\xbe\x9d\x98\x33\x53\x5f\x00\x86\x73\xe0\x83\x35\x4b\x9f\x00\x29\x40\x4e\x85\xcc\xcd\xe1\xe1\x84\x92\xc4\x8a\xb2\x15\xdf\x42\x86\xcb\x93\xc7\xa6\x93\xec\xba\xfe\xb6\xed\xb2\x0b\x6c\x1b\x91\x82\xea\xf9\x13\x8f\xed\xb6\x54\xb6\x35\x27\xed\xc9\x87\x9f\x60\x7c\x6b\x7d\xd7\xf7\x56\xf4\xbe\xcd\x34\x44\xef\x14\xaf\xac\x5d\x7a\xdd\x85\x73\xaf\xb6\x1b\xfa\xf0\x01\x94\x32\xf2\x02\x0a\xa1\x92\x3e\x10\xe0\x89\x30\x3c\xe5\xff\xb9\xfd\x78\x65\x47\xdf\xc4\x5d\xd7\xdb\xa5\x26\x2c\x2f\x32\xc8\x8d\x2c\x4a\x7e\xfc\x40\xa5\x9a\xd3\x0c\xe4\x4f\x78\x2b\xfe\xf8\x67\x9e\xb7\x3f\x49\xe8\xf6\x83\xdd\x6c\x46\xc8\x54\x90\x1a\xf6\x97\x42\x46\x97\x96\xb0\x14\x12\x91\x9a\x6b\x41\x48\x52\x18\x65\x21\x2f\x4a\x0d\x84\xda\x6f\xf1\x1d\x18\x9f\xed\x42\xf9\x5e\xab\x41\x8c\x48\x95\x53\xfd\x86\x4c\x96\xfa\xa9\xd3\x46\xc8\xa7\x51\xba\x2b\xdb\x69\x12\xf3\x34\xf3\xb1\x6d\x27\x16\xd4\xec\xf8\xc9\xb7\x34\xf2\x36\x65\x1c\xe4\xb5\x90\x7a\x17\x3e\x69\x14\xbb\x19\xac\x8b\xa3\xcd\xe6\xa7\x8c\x71\xfd\xbb\xdf\x3e\xf2\x64\x0a\x45\x26\x96\x66\xff\x3c\x7d\x3c\x77\x7c\x9f\x9d\x59\xc9\xae\xfd\xed\xca\x3e\x76\xec\xcf\x5a\x2a\x63\xf4\xb4\x49\xfb\xec\xd4\x11\x8f\xf5\x6e\x95\x02\x7d\xb0\xfb\xf6\xfa\xd2\xdb\x7a\x6e\x60\x0a\x12\x78\xe2\xf9\x5c\xf5\xa7\x16\x84\x92\xef\xca\x09\x48\x0e\x1a\x54\x43\x13\x58\x16\xe0\x0d\x6b\x60\x7f\x20\x41\x92\x52\xb3\x8c\xfd\x73\x93\x39\x62\xd3\x5b\x45\xbf\x69\x9f\x90\xa9\xfc\x63\x4f\x48\x56\xfe\xb1\xa7\xe4\x2b\xdb\xf6\xb9\xba\x9f\xde\x85\xb6\xb5\xd6\x09\x8d\x20\x4e\x63\xa8\x56\x26\x6d\x2f\x45\x74\x4e\xfe\xf4\x36\xdf\x40\xe9\x35\xda\xf2\x5b\xb6\xf0\x6d\x04\x93\x93\x6d\x6e\x92\xb1\x51\xf8\xc7\x68\xa1\xff\xf1\xa7\xb1\xed\xf2\x74\x4c\xde\xe7\x85\x5e\x7a\x33\x10\x7b\xa2\x73\xa6\x08\x17\x7a\x5d\x10\x8c\x3e\x4d\x8b\xcd\x46\xc8\x27\x67\xea\xe2\xfa\xd2\x5b\xdb\x5f\x70\x69\x55\x01\x49\x0f\x04\xfd\xdb\x16\x19\x2d\x31\x7f\xca\x20\x4b\x09\x33\x32\xbc\x21\x96\x4c\x32\x91\xdc\x3b\x4b\xfe\xcd\x3b\xa2\x84\xe5\x39\x46\xd1\x33\x92\x7f\x22\xb8\x2a\x73\x20\xec\x29\x26\x32\x48\xf6\x83\x64\xdf\x6c\x83\x64\x3f\x48\xf6\xad\x66\x9d\x74\x7d\x60\x8e\x2b\x84\x6c\x65\x8f\xf8\xdc\xc0\x20\x1f\x6b\x03\x83\xc4\x36\x30\xc8\x81\x41\x3e\xd5\xf1\x93\x6f\xb9\x93\xa4\xfb\x64\x5f\x4f\xf1\x8e\xc1\x73\x30\x78\x0e\x06\xcf\x81\x6b\xc3\xf5\xe9\xda\x70\x7d\x0e\xd7\x67\xbb\x7d\x76\xd7\xe7\xe0\x39\x18\x3c\x07\x83\xe7\x60\xf0\x1c\x34\xdb\xe0\x39\x18\x3c\x07\x83\xe7\x60\xf0\x1c\x6c\x69\x83\x64\xdf\xb1\xd3\x41\xb2\x1f\x24\xfb\x6d\x6d\xf0\x1c\x0c\x9e\x83\x81\x41\x0e\x0c\x72\x60\x90\x5b\x5a\x1f\x3d\x07\x49\x06\x94\x6f\x56\xe7\x57\x92\x1b\xf1\x39\x14\x00\xd9\x94\xb9\xd4\x3e\xf7\x6b\x32\x81\x39\x5d\x30\x51\x4a\xf2\x30\x07\xee\xf3\x52\xc9\x0c\xb4\x32\xbb\x00\x34\x6c\xd2\x00\x9f\x60\x6f\x8f\xb3\xb4\x11\x01\x4e\x27\xd9\xc6\x8e\x9f\xe2\x5e\xee\x97\x8f\x7b\x4a\x26\x42\x98\xb7\x5b\x9f\x31\xd4\x5e\xbc\x36\x10\x21\xa9\x65\x9b\xce\xb5\x39\xb1\xe5\xed\xcd\xbb\x67\x4d\x67\xd9\xd8\xc9\x65\x35\x36\x41\x17\x0e\xa6\xfd\x99\x2b\xcf\x7c\xfa\xf1\x81\x43\x8a\x49\xe9\x67\x84\x69\xf3\x80\x61\x2c\x2c\x61\x3a\x5b\x56\xe4\x7d\xde\x79\x32\x6f\x6f\xde\xed\xee\xe6\xf2\xab\xb4\xb5\xeb\x88\x1e\xad\xc1\x5f\x35\xf8\xab\xaa\x36\x08\x6d\x1d\x3b\x1d\x84\xb6\x41\x68\xdb\xd6\xe2\x0b\x6d\x7d\xf7\xef\x0c\x5e\x19\x32\x78\x65\xfc\x63\x83\x57\xe6\xc9\xc7\x07\xaf\xcc\xe0\x95\x19\xbc\x32\x8f\xb7\x41\x7e\x75\x6d\x90\x5f\x07\xf9\xb5\xdd\x3e\x3b\xf9\x75\xf0\xca\x0c\x0c\x72\x60\x90\x75\x1b\x18\xe4\xc0\x20\x5b\xed\x73\xcc\xe7\x18\x2c\xdc\x83\x85\x7b\xb0\x70\x0f\x17\xe0\x70\x01\x0e\x17\xe0\x53\x1d\x0f\x16\x6e\xdf\x06\x0b\xf7\x60\xe1\x6e\xb5\xc1\xc2\x3d\x58\xb8\x07\x0b\xf7\x60\xe1\xde\xd2\x06\xf9\xb5\x63\xa7\x83\xfc\x3a\xc8\xaf\xdb\xda\x60\xe1\x1e\x2c\xdc\x03\x83\x1c\x18\xe4\xc0\x20\xb7\xb4\x3e\x5a\xb8\x9f\x38\xbc\xbb\xec\xd2\xa6\xbd\xda\x89\xcd\x3e\xd2\x7d\x4c\xde\x52\x4e\x18\x4f\xb2\x32\x05\xfc\x66\x0a\x54\x97\x12\xd4\x19\xc9\x58\xce\x7c\xb1\x0e\x21\xcd\xa6\x19\x25\x54\x81\x72\x7d\x6c\x1c\xaa\xea\x77\xc3\xb7\x8f\xbf\xe6\xe3\x7c\xe4\xd1\x5a\x67\x55\xd8\x3e\xe3\xbe\x1f\xb7\xad\xf6\x26\x83\x25\x3b\x4c\xb3\x19\xdf\x3c\x88\xb5\x5b\x6c\xa1\x9f\x27\x5f\x7b\xdb\x16\x7c\x64\xcb\x3d\x79\xb9\x3c\x75\xa5\x8c\xc8\x84\x2a\xf8\xc3\xbf\xad\x95\xb8\x6a\x3e\x92\x43\xca\xa8\x19\x6a\xe3\x13\x4f\x5f\x33\xf5\x10\xdb\x37\xf9\x0e\x87\xa5\x22\xa3\x63\x2f\xae\x9c\x4d\xd7\x23\x62\xf6\x5d\x7a\x69\xfb\xb8\xd5\x92\x6a\x98\x2d\x1b\x75\x9b\x70\x9b\xd5\x42\x03\xdf\x52\xc2\xcc\x6b\xa0\x1b\x87\x78\x98\x83\xb4\x47\xcc\xd7\x0a\x52\x7e\x20\xa6\xaa\x74\xa1\x2e\xf9\x1f\x4f\xe5\xff\xf8\x71\x36\x7c\xfd\xd4\xfa\x6e\xaa\xa0\xe4\xdb\xae\x17\xa4\x9f\xcf\x77\xd6\x43\xf6\xae\x02\x82\x59\x9d\xe0\x82\x4a\x73\x31\x79\x4f\x1a\x8a\x67\xf5\xd3\x5b\xfb\x5f\x59\xb6\x6d\x77\xd4\x0e\xb2\xda\xd3\x32\xda\xa8\x81\x63\xb3\xcd\xab\xb7\x8b\x68\xe6\x6a\x43\x5e\x83\xcc\x99\x52\xdb\x92\xa2\xda\xa4\x3f\x75\x8b\xed\x70\x7b\xad\xc8\xcc\x7e\x5d\xfc\x1b\x35\xc8\xa9\x04\x68\x6b\x65\x99\xd0\x84\xc8\x32\x33\xe2\x34\x4f\x89\xab\x53\x44\x68\x92\x88\x92\x6b\xc2\x01\x52\x4c\xac\xda\xb8\xbd\x77\xb8\xfb\x76\x90\xa0\x77\x95\x9f\x47\x96\xce\x27\x9f\x72\xef\x70\x61\x5f\x61\x63\x91\xac\x66\xdb\x5d\xde\xc6\xe1\x9f\x16\x22\xf6\x91\x4c\x76\x96\x4b\xba\xc8\xac\xd7\x22\x63\xc9\xf2\xa6\xcc\x80\xcc\x45\x96\x2a\xac\xf9\x66\x2e\xcf\xca\x27\xda\xd4\xa5\x0a\x7c\x1a\x5f\xf2\x8c\x4c\x4a\x4d\x52\x01\xd6\x6c\xe8\xd0\xa5\x9a\x3f\xdf\x69\x7c\xeb\x29\x7f\x98\xdb\x62\x84\xa6\x63\x42\x8b\x22\xc3\xcc\x49\x61\x04\x8f\x87\x39\x4b\xe6\xb6\x24\x6c\x41\x13\xd8\xf4\xd8\xee\x72\xe9\x4e\xba\x1a\xd9\x4b\x5f\x23\xde\xec\x3d\x79\x6a\xd7\x91\x3d\x15\x37\x62\xcb\x82\x7d\x23\x45\x59\xec\xf8\x78\xb7\x3d\x40\x6c\xc9\x30\x3b\x90\xb9\x8e\xf4\x8a\x88\xe5\xbf\x74\x4e\x72\xbb\xd4\xca\x59\x60\x9d\x47\x66\x8c\xe9\x8f\x79\x99\x69\x56\x64\xf8\x13\x8b\x80\xa5\x08\x95\x50\x5f\x70\x67\x84\xf2\xa5\xf7\xb9\xbb\x12\x86\x90\x12\x3a\x33\x3d\x6a\x2c\x8f\x2a\xa6\x3b\x53\x6d\x6b\x24\x96\xb9\x91\xbf\x1a\x36\x60\x85\xea\x3e\x5f\xd6\x54\x90\x07\x96\x65\x46\xf9\xa1\x59\x26\x1e\x20\x1d\x93\xa3\xa3\xd5\x0b\x28\x11\xb2\x41\x37\xb2\xba\xa3\x7f\x6d\x3d\x65\xf8\x5a\xfd\x62\xbb\x29\x72\xfb\x6a\x21\x64\x3f\x4d\x84\xec\xaf\x73\x11\x54\xa5\xee\x2b\x07\xd5\x28\x63\x4a\x8f\x1c\x95\x5a\xe4\x2c\xd9\xa9\x13\x2e\xb8\x77\x44\xfc\xf9\xe6\xfb\x67\xdf\xa0\x57\xed\xe1\x5c\x4d\x4e\xd0\x66\x8f\x16\x54\x6a\x46\x33\x52\xca\x4c\xd9\x3d\x4a\x8d\xc2\x22\x7d\x15\xd4\x39\xc5\x38\x8f\x04\x14\xb2\x0b\x42\xfe\xd5\xee\x4a\xb7\x19\x2c\x2b\x13\x3c\x5b\x12\x6a\xb7\xc2\xb4\xcc\xb2\x33\x32\x65\x9c\x9a\x8b\x0c\x0a\x9f\xc3\xbb\x83\x69\xa6\x6e\xb7\x8c\x27\x60\xa6\x69\x54\xf9\x26\x90\x72\x33\xb2\x61\x99\x15\x4f\x4b\xcf\x5c\xd9\x4f\x6b\xa9\x52\x8e\x14\xc3\xdf\x12\x3a\xc9\x00\x35\x0d\x27\x73\xde\x88\x0c\x5d\x8a\x95\xdf\x03\x6b\x85\xd2\xe6\xd7\xff\x8b\xf1\x5d\xb5\x75\xdb\x6e\xf0\x6a\x4f\x28\x27\xc0\xf4\x1c\x24\x0e\xbd\x34\xfc\xd7\x6c\xf6\xfa\x50\x9d\xa8\x32\x99\x9b\x29\x3a\x2a\x44\xaa\x8e\x0c\x77\x3e\x52\x90\x48\xd0\xea\xe8\xd4\xfc\xb5\xfa\xae\x38\x5f\xcd\xdf\x9d\xd3\x82\x1d\x9d\x9e\x11\x9c\x70\x2c\x50\x2a\xf4\xfc\x17\x7e\x8e\xfc\x84\xb5\xca\x8b\x3f\xd5\x5a\xa7\xe8\xa6\xd9\x83\xab\xac\x29\x0a\x5b\x94\xd2\xdc\x9f\x1a\x30\xed\xdc\x9c\x14\xdc\x73\x0d\x1f\xf4\xca\x45\x4a\xc8\x05\x27\x60\xbd\x86\xa0\x49\x0e\x94\xbb\xa7\x61\x01\x72\xa9\xe7\xe8\x48\x54\x15\x17\x1d\x56\x6e\x87\x68\x84\xba\x6d\x5c\x35\xc7\xca\xfc\x0a\xd5\xc7\xcd\x16\x7f\x5e\x5d\xa1\xe3\x7f\x3d\x5e\xbd\x92\xea\x3b\xf8\x97\xbd\x1e\x28\x84\x75\x5a\x8b\x1f\xcc\x2f\xdb\xeb\x60\x3f\xb2\x97\x49\xc5\x0e\xbf\xff\xde\x16\x7b\x76\x13\xfe\x1d\xe3\xa9\xaa\x80\x55\x53\x7b\x4b\xb8\x45\xdb\xb8\x52\x48\xe1\x2f\x76\x95\xd6\x95\xae\x5d\x15\xa5\x27\x68\x6c\x68\xe5\x7d\x50\xa4\xb1\x5e\x74\x4b\x4a\x36\x6c\xf7\xcc\x7a\xe7\x8d\x58\x99\xd1\x09\x64\xca\x19\x10\xa1\x41\x3e\xb9\xf8\xfe\x43\x55\xba\x5d\x02\x7d\xc2\x28\xfe\x0c\xea\xf3\x0e\x61\x3e\x6b\x25\xf2\xd7\xdb\xee\x6a\x0e\x4e\xc5\x7e\x4e\x2c\x72\x0b\xda\x9e\xd5\x9c\x16\xe6\xa8\xda\x3e\xac\x73\x65\xc5\x71\xf2\x3d\xce\xf4\xd3\x27\x6e\x2f\xf5\x70\xf7\x92\xcf\x9b\x06\xd9\xe9\xbc\xed\x16\x4a\xb4\x47\x87\x8f\x99\xf2\xea\xd6\x9a\xe6\x95\x0d\xed\xf4\x42\xa7\xc9\x25\xb4\xe9\x50\x48\x41\x59\x70\x1d\x0b\x70\x24\xfd\xe7\x75\x17\x91\x97\x60\x1f\xfd\x7c\x44\x14\x64\x90\x6c\xaa\xc9\xbe\xe9\x61\x0d\x79\x91\x3d\x75\xf2\xc8\xde\xba\x7c\xce\xf8\x0d\xd0\x74\x79\x0b\x89\xe0\xe9\x8e\x5c\xba\x9b\xb2\xf4\x81\x71\x96\x97\x39\xe1\x65\x3e\x01\x5c\x0b\x65\x07\x45\x8e\x63\x0d\x2a\x94\x70\x78\xc8\x96\x8e\xcb\xa4\xa4\x10\xa9\x67\x3c\x13\xa3\xd5\xd3\x74\xd7\x4b\xe7\x81\xe9\x39\x96\xad\xe0\x4b\x33\x14\xd3\xf5\x8d\x28\x49\x22\xa9\x32\x42\xe3\x19\x0e\xcd\xb4\xb9\x45\x27\x80\x2e\x76\x96\x82\xd9\x32\x74\x41\x59\x66\xb4\x9c\x5d\xaf\xc5\x77\x30\xa5\x65\xa6\xd1\x3e\xf4\x8a\x9c\x18\xc2\xbd\x72\xbf\xa9\x5b\xa3\x77\x28\x21\xb8\xf9\xaf\x85\x5d\xc2\x97\x3b\xdd\xc3\xcf\xb7\x0b\x10\xba\x6f\xbb\x02\xa2\xfb\x56\xd0\x52\xed\x6a\x66\x6a\xed\x86\x4b\x9e\x9a\x43\xd8\x94\xe6\x1b\xf7\x08\x53\xae\xe7\xdd\x66\xf5\x71\x28\xaf\x0d\x54\x4b\x31\x93\xa0\xd4\x3b\xa0\x69\xc6\x38\xbc\xc0\xa6\xbe\x9b\x03\xc9\xe9\x27\xdc\xd8\x9a\xe5\x60\x84\xad\xe6\xb6\xa6\xcd\xd7\xd7\x82\xe4\xf4\x1e\x2a\x3a\xc9\x04\xa6\x42\xee\x10\xd2\xe1\x1b\x53\xcd\xcd\x64\x37\xed\x94\xb2\x0c\xd2\x31\x52\xd2\x18\xcb\x6c\x76\x29\xb2\x0c\xa4\xdd\x87\xe6\x6f\xc6\x4b\x20\x5a\xec\x38\x58\x21\x05\x9a\x26\xec\x00\x4d\x69\x06\xa5\x05\x6a\xba\xb4\x37\x0e\x1e\x36\x42\xc9\xf5\xca\xfc\xbf\xff\x94\xa0\x11\x7e\xc7\x01\x25\x50\x85\x9d\xd9\x63\xa3\x4a\x39\xa5\x89\x97\x5f\x5b\x2f\x67\x23\x66\xc6\xe4\x4a\x68\x17\xba\x5c\x4d\xa9\xf9\xf5\x8e\xe3\xa1\xa6\x0f\x04\x94\x66\x39\x72\x9b\xb4\xc4\x90\x54\x33\x18\xae\x25\xdd\xbc\x77\x5b\x67\xfd\x0f\xaf\x5e\xed\x28\x3a\x3f\xff\xa9\x95\x80\xb6\x99\x67\xdd\xf0\x57\x15\xf7\xf6\xb7\x6b\x21\x52\x65\xb6\x1f\x73\xaa\x4a\x21\xcc\x3b\x4a\x8c\xe5\x60\x4a\x33\x3e\x2b\x99\x9a\x93\x09\xe8\x07\x00\x4e\xe0\x93\x85\x97\xdb\x71\xbc\x7f\x82\x14\xb8\xdf\xcc\x6a\xd5\x0e\xc9\xd6\x1a\xbc\xee\xcf\x02\x2c\x98\x62\x82\x7f\xcb\x94\x16\x72\xf9\x3d\xcb\xd9\x13\x35\x2d\x7c\xeb\xce\x7d\xea\xeb\x54\x64\x29\xb9\xb1\x5b\xe0\x16\xec\xcc\x48\x40\xf7\x87\x16\xd6\x36\x42\x0c\x47\x98\xd0\xe4\x7e\xd7\x5b\x6d\xef\x55\xdd\xb6\x5e\x1d\x6e\xd1\xd7\xaf\xfa\xb2\xac\x5e\x50\x7b\xce\xa5\x44\x95\xa0\x1a\x09\xef\x0e\x7b\xb0\xde\x7f\xb2\xd3\xdd\x5a\xda\x87\xb9\x50\x80\x0f\x10\x2a\x9f\x96\x09\x9b\xaf\xe1\x7d\xa2\x4c\x55\x9c\x16\xe3\x55\x38\x28\x42\xa7\xd3\xf6\x13\xe9\x1e\x92\xb2\x6d\x97\x9a\xe4\xa5\xd2\x24\xa7\x3a\x99\x5b\xeb\xb4\x48\x2b\xe9\xf5\x58\x39\x2d\x73\x9f\xa5\xdd\xd9\x3d\xb6\xbf\x23\x8b\x58\x3a\xdf\x7f\x2a\xcc\xe5\xf1\x94\xcb\xbb\xdd\x5a\xeb\xbc\xda\x4d\xdb\x6a\x93\xb5\x17\xd7\xa9\x09\x78\x97\xda\x8b\xbb\xf9\x09\x5a\xe2\x2f\xae\xde\xed\x7e\x6a\xba\x18\x65\xf6\x36\xcb\x74\xf7\x91\x98\x76\xf1\xc8\x1c\x78\xa7\x89\xfb\xa6\xed\xcd\x43\xfd\x59\x9d\x11\x4a\xee\x61\x79\x66\x25\x8f\x06\x28\xaa\x79\x78\x2f\x42\x24\x64\x4e\x3c\x05\xd3\x23\x76\x68\xc7\xd8\x7d\xb6\x3b\x6c\x4c\x3f\xf8\x3e\xfe\x5b\xdf\x46\x86\xd0\x3d\x7f\xe1\x27\x68\x8f\x9f\xed\x7f\x76\x6c\xbb\x87\xe5\x7e\x3f\x58\xd9\x49\x66\x15\x9c\x16\x6f\xf7\x88\xf9\xa0\xd2\x1e\xaa\x6d\xb1\x9f\x63\xbd\xd9\x3a\x18\x14\x6d\xf3\x93\x18\xf4\x7a\x7b\x1e\x94\xe6\xb8\x2d\x3b\xad\x99\x96\x63\x65\xf7\xaf\xe1\x30\x73\x56\xd8\x9c\x3e\xe7\x6d\xdc\x7f\x13\xdb\xf6\x03\xcd\x58\x5a\x0d\x69\xb9\xcf\x25\x3f\x33\xb2\xb5\xf9\x0f\x5e\x3f\x56\xe2\x7f\x27\x40\x5d\x09\x8d\x9f\xbc\xd8\x1a\xd8\xd7\x7a\xe9\x15\xb0\xa3\x3a\xa7\x15\xb2\x55\xb4\x57\xd8\x94\x35\x37\xd3\x1e\x57\xb9\x8e\xf4\x54\xe4\x92\x13\x21\xdd\xd4\xed\x3d\xa8\xe9\xcc\x0d\x6c\x87\xc4\x8b\x74\x62\x9d\xb5\xe8\xfe\xda\x38\xa6\x5b\x21\x21\x5b\x0b\x14\x71\x78\x37\x34\xca\x82\xf6\x1b\x34\x57\x14\x19\x6a\x67\x4e\x69\xa2\x3e\xb4\x6a\x47\xaf\x48\xb3\xe5\x20\x67\xe8\xc5\x4e\x76\xf6\xba\x56\x44\x77\xb8\xf8\x6c\xdb\xfb\xfa\x6b\x0e\xd8\x61\x23\x47\xf1\x25\x45\xeb\x06\xe5\x15\x6b\x86\xee\x28\xf1\xec\x75\xaa\x1a\xc3\xb5\x6c\xe4\xff\xc7\x5c\xea\xb8\xe9\xfe\x2f\x29\x28\x93\x6a\x4c\x2e\x88\x62\x7c\x96\x41\xeb\x3b\x67\x02\x68\x74\xb3\xd7\xe0\x85\x19\xd4\xdc\xbd\x0b\x9a\x39\x43\x0c\xe5\x04\xac\x39\xde\xd0\xb1\x2a\xbe\x9d\x39\x09\xdb\x5c\x45\x55\xfc\xc3\xd1\x3d\x2c\x8f\xce\xb6\x86\x99\x6f\x6e\xcd\x93\x7a\x74\xc9\x8f\xac\x08\xb3\x76\xd6\x2a\x79\x07\x83\x2c\x8e\xf0\xbb\xa3\x98\xb2\xe1\x9e\xb2\x4a\x57\x67\x42\x7b\xd0\x3d\x8e\x49\x6b\x57\xe7\xb4\xd8\x77\x53\xfb\xc0\xce\x0e\x3a\xda\xdd\xaa\x71\xc9\x45\x40\x6b\x41\x4a\x05\x56\x8d\x46\x66\x47\xc0\xeb\x62\xa8\x79\xa1\xd5\x8b\xc3\x03\xea\x4e\xbd\x51\x68\x8c\x8a\xcf\xf8\xec\xcf\x45\x4a\xf5\x4e\x39\x45\xb6\x75\x3f\xdb\x37\x76\x40\x52\xe2\x88\x66\x27\x4f\xd9\x8c\x14\x54\xd2\x5c\x8d\xc9\xb5\x2b\x37\x80\xfb\x9a\x4d\x9b\xee\x1b\x37\xcf\x77\xcb\x02\xc8\xff\xdc\x7f\x40\xfb\x86\xcf\x7c\x0e\xba\x09\xc5\x39\xfd\x74\x5b\xca\xd9\x1e\xd3\x4f\x82\x85\x96\xa6\x25\xba\xb6\x09\xe1\x46\x6d\x82\x08\xa9\x64\x0e\x69\x99\x41\x4a\xe8\x44\x2c\xa0\xe5\x27\xab\x7e\xb6\xe7\xd0\x68\xa8\xd8\xf3\x37\x3f\x18\x0e\xe7\x89\x32\x42\xd6\x44\x89\xac\xd4\x95\x3d\xeb\x04\x3e\xbd\x21\xbf\xc7\xf8\x2d\x4a\x0a\x90\x09\x70\x4d\x67\xb0\x6a\x78\xb4\xcf\xbd\x7e\xf5\x2f\xa7\xfb\x12\x80\xe2\x8c\x19\xdf\x99\x81\x5f\x99\xdd\xf9\x81\x7e\xfa\x33\xaf\x9d\x34\x4c\x91\x1d\x8d\x50\x75\xbb\x58\x79\x11\x1c\x25\x4b\xca\x0c\x4d\xcc\x18\x17\xd7\x78\x9d\xc9\x92\x48\x51\x62\x64\x1c\x29\x8b\x7d\xc7\x6a\x9a\xcb\x7e\xfb\xfb\x7f\xd9\xf7\xe7\xef\x3f\xd1\xbc\xc8\xe0\x8d\xaf\xfb\x62\x6d\x7d\x46\x9f\xd0\x82\xfc\xee\xd5\xbf\x9c\xd9\x28\x01\x78\x68\xd8\x9e\xea\x7d\x44\xcd\x26\x2a\x0b\xc2\x72\x9b\x27\x03\xd9\x12\x3b\xda\x57\x82\x33\x57\x5c\x9b\x85\x28\x4d\xa5\x56\x67\x04\x03\xf4\x2a\x4d\x50\x0b\x4d\xb3\x15\x73\x27\x1a\x1a\xe1\xc1\x6e\x85\x54\xe0\x5a\x02\x7a\x1d\xf6\xa4\xe2\xf5\xef\x5e\xfd\xcb\xba\x51\xfb\x23\x4f\x00\xc7\xc1\xfe\x31\x5e\x73\x02\xc0\xc9\x3d\xcb\x32\x48\xf7\x15\xb1\x9f\x9a\xc8\x69\x29\xf5\x1c\xe4\x19\x01\xae\xbc\x27\xc2\xbc\xfb\xca\x7b\x23\x2d\xb2\xe4\x7c\x7f\x09\x94\x5a\x7f\x28\x3a\x37\x1a\xce\x0e\x37\xed\x46\x30\xd3\x24\x17\x4a\x6f\x9e\x8e\xbd\x06\xa3\x7c\xf9\x71\xba\xaf\x78\x3d\xea\x60\xcc\x5d\xff\x75\x07\xe1\xbc\x25\x7d\x30\xae\x47\x42\x8e\x6c\x37\x6f\x88\x96\xe5\x3e\x02\x5f\xde\x62\x21\x3d\xbc\x01\xca\x06\x83\x5b\xdb\x04\x9f\x1d\x1b\xef\xce\x6e\x53\xf1\xc0\x63\x5d\x1a\x78\xdb\x77\xba\x2e\x5e\x84\x85\xb7\x3d\x43\x2b\x9c\xc7\xcc\x83\x79\xfa\xff\xbf\x7e\xe4\xf7\x55\xa9\x57\x6e\x82\xed\xbc\xdd\xb1\xd6\x8a\x75\x1b\xb5\x06\x03\x20\xce\x56\x68\xdd\x93\x82\x0d\x6f\x56\x71\xd5\xa9\xb0\xe1\xc1\x66\x13\x98\x07\x2c\x51\x1b\xae\xb8\x9a\x01\xef\x7d\x95\x6d\xb9\xaa\xec\x3b\xd6\xb1\x1f\x1a\xc3\x2e\x0d\x1b\x56\xdb\xf8\xf0\x9e\x43\x67\x40\x95\xde\xb4\x84\x03\xd7\x7e\xb2\x3d\x9e\xe1\xbb\xda\xda\xaa\xa3\xd1\x5d\x70\xc6\x2b\x3f\x19\x26\xaf\x4f\x80\x1c\xdd\x80\x8d\x62\xb2\x19\x09\x2d\xa5\xe5\xa8\xf2\x5f\x9b\xc5\x0e\xd2\x67\x76\x9e\x36\xef\x82\x7b\x56\x7f\xb4\x1b\xa3\x91\x9d\xe7\x3c\x80\xee\x0a\xaa\x42\xa2\x6c\x7c\xd7\xee\x6e\x68\x70\xd9\x27\xee\x08\xfb\x97\x19\xab\x02\x92\xb1\x04\xe4\x2a\x36\x69\xd0\xda\x55\xd0\xdc\x72\x91\x3d\xd0\xa5\x3a\xea\x8d\x6a\x9e\x83\xa6\x8f\x27\xa5\xaf\xb6\xee\x02\xc1\xad\xa6\x3c\xa5\x32\x75\x6f\x74\xac\xaa\xd1\xf7\xe1\x08\x1f\x30\x3c\x89\x4f\xc5\x1b\x32\xd7\xba\x50\x6f\xce\xcf\x67\x4c\x8f\xef\xff\xa8\xc6\x4c\x9c\x27\x22\xcf\x4b\xce\xf4\xf2\x1c\xa3\x8d\xd8\xa4\xd4\x42\xaa\xf3\x14\x16\x90\x9d\x2b\x36\x1b\x51\x99\xcc\x99\x86\x44\x97\x12\xce\x69\xc1\x46\x89\xe0\x0b\xe0\xe8\xbf\x18\xe7\xe9\xaf\x3d\x49\xcf\xab\xc3\xb7\xd8\x04\x3a\x54\xe4\x02\x46\x25\xbf\xe7\xe2\x81\x8f\xd0\xbc\xa7\xf6\x62\x18\xbb\x45\xad\xfa\x16\xb0\x86\xfb\x04\xb5\x16\x62\x0f\x9b\xe0\xb3\xaf\xac\x99\xa2\x11\xe5\xe9\xc8\x86\x6a\x3d\xef\x02\x77\x71\xab\x8e\xea\x70\xd0\xdd\xa9\xeb\x66\x0d\xa2\x89\x66\x0b\xe8\x14\x94\xe8\x5b\x98\x62\xf0\xd1\x67\x5d\xa5\xa5\xb4\x7b\xa9\x11\xa5\xe8\x43\x34\x72\xba\x44\x19\x1e\x89\x25\xc2\x0a\x6f\x5c\xa4\xe0\x5c\x8e\x8b\x3d\x42\x07\x7d\xbb\x35\x6c\xf9\xce\x68\x9b\x2e\xd2\x11\x3d\xba\x4b\xa5\x21\xb7\x57\x81\x1d\x2d\x5b\x12\x2d\x97\x36\x3c\x52\xde\x13\xa6\x7d\xcc\xa1\x51\xef\xef\xf1\x39\xa5\x44\xc2\x50\xa4\xaf\x97\xad\x9b\xae\xe2\xbd\x5a\x94\x14\x42\x31\x7c\x2f\x27\xb8\xec\xd7\x5f\x77\x99\xa7\x11\x7e\xf4\x87\x7f\xdb\x67\x1f\x4d\x11\x58\x73\x4f\x6f\x7b\x3b\x3c\x77\xda\xcc\x79\x76\x4b\x7f\xac\xbc\x55\xd0\x08\xa2\x89\xe0\x4a\x4b\xca\xb6\x63\x49\x6c\x6e\x1d\x43\x22\xba\xc7\x1d\x10\xdc\x9d\x17\x9d\x26\x85\xac\x67\x15\x78\x81\x05\xb7\xbc\x9f\xea\xe6\xc4\x58\xa8\x09\x9f\x1d\xb3\x27\xbb\xb5\xad\xf3\x1c\x91\xa0\x79\xb2\xbf\xb6\xc0\xbe\xe9\x3b\xd4\x37\x6e\xab\xf7\xba\x9c\x71\x51\x7d\xfc\xfe\x13\x24\xe5\xae\x98\x6c\xeb\x2d\xd4\xed\x6e\x9b\x91\xf6\xbc\x99\xda\x45\x2f\x5b\xea\x0d\x87\xf0\x5f\x38\xa1\x52\xe0\x7a\x39\xe9\x52\x51\xcd\xd4\x74\x5f\x47\xb0\x6f\x66\x55\xab\x75\x87\x46\x28\x57\x75\x62\xaa\xb0\x38\x94\x19\x6c\x7e\x36\xd3\xc8\x39\x93\xb9\x10\x6a\x1f\x33\x51\xb3\x51\xbb\xe9\xf0\x1d\x16\x4c\xd8\x00\x25\xc4\x1c\x90\x24\x37\x6c\xd3\x5d\xf1\x0d\xa2\xac\x6b\xb0\xfe\x19\xdb\x57\x57\xf7\x0d\xcd\x7d\xd5\xe6\xf0\x81\x38\x66\x70\x74\x6f\x99\x3f\x66\x28\xac\x2b\x4d\x54\x99\x1b\x52\x1e\x80\xcd\xe6\x5a\x9d\x11\x36\xde\xdb\x5e\xe4\x9b\x39\x46\x40\x93\x79\xe3\x15\x72\x00\xdd\x2a\x96\xdd\x3c\x7b\x4d\x1f\xe8\xc9\xa3\x90\x46\x4f\x37\x87\xef\x70\x56\xc9\x0d\xab\x47\x62\xe3\x36\x38\x23\xa0\x93\xf1\xe9\xfe\x71\x15\xb6\xd5\xe0\x75\x66\x16\x27\x4b\xc2\x34\x98\xcb\x18\x55\x7f\x29\xca\x99\x9d\x6b\xf0\x29\x62\x38\x07\x55\xf6\x3d\x86\xbd\xa5\xe9\xfe\x26\x09\xdf\x8e\xec\xa2\x1d\x99\x13\x83\x73\x5b\xe6\x1e\x7a\x19\x57\x00\x1d\xe0\x50\x21\x4e\x48\x50\x85\xb0\x66\xb2\x55\xd7\xf8\xff\xd8\xd3\x01\xde\x6c\x66\xa8\x13\x75\x5a\x6f\xad\x39\x9b\xcd\xfd\xce\xa2\x4e\x3e\x68\xef\xc8\x6e\x1b\xac\x7b\x58\x88\x6d\x1d\x83\x43\x6c\x8b\xc3\x05\x1b\x49\xef\xf5\xf1\x6c\x1c\x09\x0d\x32\xaf\x96\x0d\x4f\x0d\x5e\x2b\xce\x2d\xed\x8b\xb8\xbb\xc3\x4a\x5e\x75\xa6\xe2\xc4\x9c\x72\xc2\x8c\x06\x69\xf8\xd4\x48\x14\xa7\x63\x72\x41\x78\x59\xb1\xe5\xc7\x08\xe3\xa2\xa2\xcb\x75\x64\x88\x55\xa2\xee\xab\x2b\xb7\x0e\xb9\x4a\x6d\xeb\x16\x8d\xd9\x6c\x23\x37\x03\xf0\x74\xd9\x95\xc7\x3a\xb1\x6b\xd4\xb1\x83\x30\xb1\xc0\xf7\xe1\xdf\xa2\x7b\x1f\xab\xb0\xe8\x96\xaf\xd4\x51\xbd\x20\xf3\xb3\xa6\x1c\x5f\xf1\x80\x36\xbb\xb1\x73\xd1\x75\x57\x90\x38\x3b\x83\x44\x9a\x57\x12\x14\x60\xbe\xb9\xad\xcc\x72\x05\xa1\xd1\x9a\xed\xd6\x7d\x39\x59\xe2\xb7\x7b\xc6\xde\x6f\x6f\xa1\xcc\xb5\x6e\x41\x6c\xb6\x6e\xb1\x18\x6e\xdd\x56\x77\x6f\x9c\x68\xf5\x08\x84\xe1\x70\x71\x62\xd8\xb7\x0c\x10\xe7\xf4\xd8\x16\xce\x61\xeb\xb6\x7f\x14\xfc\xb6\x7e\xa2\x2d\x47\x2c\x16\x61\x5b\x87\x38\xfa\xcd\x6d\x2d\xb8\xed\x79\xc2\xea\x37\xb7\x80\xf8\xd8\x4d\xad\x6b\x08\xfe\xe6\x16\x9f\x51\x98\x76\xf3\x02\x51\xfa\x9b\xdb\x4e\xb1\xfb\x67\xed\xc0\x7d\xf2\x8d\xb6\x8c\xe9\xfb\xa0\x5b\xb6\x6e\x91\x57\xbc\x5b\xc0\xff\xe6\xf6\x3c\xeb\x7d\xf1\x72\x29\x01\x9b\xdb\x81\x13\x05\xf6\x24\x6a\x3b\x41\xdf\x68\x43\xcc\xf7\xfa\xac\xf1\xe3\x48\xd4\x34\x48\xb0\x30\x7b\x3e\xaa\xdc\x29\xd8\x67\x0e\x70\xc2\x3b\x24\x31\xb9\xb5\x90\x80\xa8\x8f\x98\xf5\xd1\xc9\x28\xbc\xbd\xed\x9c\x3d\x11\x92\x0d\xb1\xb9\xc5\x93\xd7\x6c\x8b\x24\xb5\xd9\x16\x99\x7b\x44\xcb\xb2\x78\xf1\xce\x51\x4f\xf8\xda\x3a\x23\x0f\xa8\x22\x58\x77\xe8\xa0\x22\x3c\xd9\x06\x15\x61\x50\x11\x9e\x6e\x83\x8a\xb0\xde\x06\x15\x61\x50\x11\x82\xda\xa0\x22\x3c\xd9\x06\x15\xe1\xc9\x36\xa8\x08\x75\x1b\x54\x84\xfe\xab\x08\xa1\x19\xb2\x9b\x9b\xf5\xb7\x44\x73\xfb\xfc\xc5\xba\x1b\x57\xfd\x3c\xa8\xdc\xf8\x30\xf7\xb6\xc3\xc7\x48\xd1\xb7\x4e\xd4\xb8\x43\x27\x91\x4b\xf6\x96\x94\xcf\x80\xbc\x1e\xbd\x7e\xb5\x77\x52\x45\xb3\x85\xc4\xa6\x37\xdb\xbe\xa0\x51\xeb\x2d\xfa\xce\xd8\x16\xbf\xd0\xbf\x90\x1e\xc7\xd9\xab\xb8\x8a\x96\xf2\xb9\x25\xbe\xa6\xaa\x48\x90\x83\xde\x3f\x21\xc2\xb7\xa6\x63\x9a\xe5\x50\x05\xbd\x59\xb6\xee\xd2\x78\xea\xa4\x58\xc1\x5d\x80\x84\xd9\x96\x5d\xb7\x5d\xa7\xb7\x4d\x80\xda\x64\xf3\x09\x98\x37\xee\x1a\x4a\xa4\x89\x12\x39\x58\xb8\x36\x7f\x75\x98\xd7\x05\xbf\x0d\xc8\x09\x8c\x67\x63\x92\x96\xe0\x60\x10\x6c\xd6\xc9\xe9\x59\x23\x38\xb3\x6b\x2c\x91\x11\x78\x24\xfe\xc7\x4c\xac\x8b\xe9\x84\x05\x70\x5d\xd2\x2c\x5b\x12\x58\xb0\x44\x57\x2b\x80\xc9\x59\x4c\xab\x80\xb9\x0e\x56\x45\x43\xd5\xcf\xd1\x1a\xff\xea\x26\x9e\x84\xeb\x89\x6b\x74\x74\xe7\xe9\x2b\x05\x01\xec\x0c\x8d\xb7\x5a\x92\xb4\x19\xcd\x06\xa4\xe1\x3f\xf1\xe0\x7e\xbc\xe9\x1a\xbb\x43\x22\xc9\x23\xc1\x32\x48\x4c\xd5\xc0\x05\xcc\x08\xe9\x42\x7a\xd6\x67\x70\x43\xc8\xcc\x06\xfc\x8f\xbd\x73\xf3\xdb\x4d\xcf\x21\xef\x82\x21\xb2\xa9\x19\xda\xee\x44\x21\x32\x31\x5b\x36\x37\x9e\xab\xdb\x5f\xa3\x9d\x53\xa2\xca\x89\x53\x6e\xcd\xd9\xbf\x5a\xd9\xa9\x43\xb0\xc7\xd6\x36\x04\x7b\xac\xb5\xc1\x92\x3b\x58\x72\xf7\xe8\x67\xb0\xe4\x0e\x96\xdc\xc1\x92\x3b\x58\x72\xbb\xb6\xc1\x92\xbb\x17\x51\x83\x25\x97\x0c\x96\xdc\xad\x6d\xb0\xe4\xba\x36\x04\x7b\x6c\x6c\x83\x8a\xb0\x6f\x1b\x54\x84\xf0\x7e\x06\x15\x61\x50\x11\x06\x15\x61\x50\x11\xba\xb6\x41\x45\xd8\x8b\xa8\x41\x45\x20\x83\x8a\xb0\xb5\x0d\x2a\xc2\x7a\xc7\xd1\x82\x3d\x9e\x81\xdc\x98\x84\x16\x22\x8d\x0e\xe7\x52\x88\xf4\x11\x34\x17\xeb\x0b\x4f\xc4\x28\x13\x09\xc5\x5a\x82\xcc\xfe\xc4\xc5\xa0\x28\x9a\xdb\x50\x80\x33\xf2\x4f\xc1\xc1\x62\x40\xd8\xda\x9d\x39\x10\xa1\xe7\x80\x65\xba\x4e\xd4\x69\x87\x44\xf6\x01\x0d\x66\x97\x36\xa0\xc1\x0c\x68\x30\x03\x1a\xcc\xcb\xa2\xc1\xcc\xa9\x72\x25\x2e\x50\x28\xda\x0e\x0e\xd3\xe0\xd8\x77\x20\xf3\x01\x1b\xe6\xa9\xb6\xa6\x8b\xbb\xe3\x63\x56\xb8\xb1\xd9\xed\x8c\xa7\x2e\x9c\x12\xd2\xeb\xf6\x3c\x3b\xc3\x1d\x4e\x0b\x4d\x53\x48\x49\x01\x72\x64\x0f\x8f\x20\x53\xe6\x2a\xcc\xac\x9c\x66\x37\xc3\x5d\x19\x62\x4f\x00\x57\xda\x33\x11\xd0\xd3\xe1\x51\x57\xda\xaf\x12\x2d\x54\xa9\x19\xb1\xd5\x12\x7f\x3e\x3b\x0c\x96\x38\xf6\xc2\x11\xd1\x2e\x4c\xe9\xbb\x20\x8b\x61\x2c\xf3\x1e\x9a\xdf\x6e\xf7\xaa\x29\xbb\xbd\xc5\x36\x69\xf8\x42\x9d\xff\x5d\x82\x5c\x12\xb1\x00\x59\x1b\xab\xfc\x4d\xab\x5c\x8c\x36\x62\xe1\xbb\x3a\xb4\xe1\xaa\xe9\xe5\xd4\xa2\x4c\xf1\x32\xcb\xce\x6c\xef\xab\x6c\xcf\x5f\x44\xb6\xf2\x92\x30\xdf\x47\xf2\x5e\x44\x31\x70\xc7\xb4\xff\xc6\x8e\x24\x23\x3d\xab\x58\xbb\xbd\xc5\x35\x4f\x44\x34\x4e\x3c\x93\xf5\xb0\x2f\x95\x71\xb7\xb7\xe7\xf4\x2f\x91\xd8\x3e\x26\x12\xd9\xcf\x44\x22\xfa\x9a\x48\x5c\x7f\x13\x89\xee\x73\x22\x31\xfd\x4e\xe4\xc5\x2b\xfd\x6e\x6f\xd1\xcd\x8a\xb1\x5d\x51\xe4\xd9\x18\x0c\x79\xe9\x8a\xc2\xdb\xdb\xcb\xd4\x1a\xde\xde\x9e\x61\x17\xc4\x74\x4f\x91\x67\xdd\x03\x07\xa9\x69\xbc\xbd\xf5\xd2\x69\xf5\x28\x61\xcf\x5e\x07\x79\x7b\x8b\xee\x03\x22\xcf\xe0\x07\x22\xb1\x7d\x41\xe4\x79\x8e\xec\x33\xfb\x84\x5e\x60\x80\x4e\xd5\x9b\xb7\xb7\xe7\xe0\x39\x07\xad\xf8\xfc\x18\x59\x07\xac\x05\xbd\xbd\x1d\xbe\x4a\xf4\xf6\x16\x59\x3a\x0f\xad\x2c\xfd\x14\xa1\x51\x58\xc5\xf3\xb8\x5f\x49\xeb\x5c\x7c\x07\xcb\xb8\xc1\x9f\x11\x4e\xee\x87\x16\x75\x5e\xfd\xd4\xae\x86\x5d\x2d\xb5\xa3\xaf\xcd\x0a\xec\xce\x47\xe0\x2a\x62\x67\x59\x30\x0d\x13\x20\x9a\xde\x03\x46\x5c\x08\x2c\x47\xc2\x52\xb0\x75\x6b\xec\x56\xc7\xf1\xcd\x16\x2f\x15\xa4\x86\x90\x4c\x88\xfb\xb2\xf0\x47\x05\xd3\x8a\x63\x1c\x4c\xc6\x13\x91\xfb\xfc\x69\x9b\x4d\x67\x4e\xbc\xe3\x05\x23\x5b\x67\xcc\x7e\x8e\xe4\xe0\x25\xed\x8c\xaa\xff\x68\x19\xf9\xfe\x41\xa8\x22\xff\x40\xf5\x87\x93\x13\xfc\xe1\xe9\x3f\xc2\x43\x33\xab\x25\xb0\x7e\x39\x51\x22\x87\x5d\x29\x52\xde\x5e\x9d\xc7\x66\x37\x98\x20\x5f\x1b\xa5\x39\x71\xc7\xd6\x9f\x7e\x42\xb9\x66\xa7\x95\x29\x7a\x4c\x70\x7f\xa1\xee\x97\x0a\x7e\xac\x2d\xd5\x9e\xeb\xfb\x0e\xc2\x23\x32\xab\x95\xab\x23\x7b\xac\x87\x7b\xec\xca\xbe\xdb\x2a\x7c\x55\xcd\x38\x2b\xe3\x05\x8f\x7b\xe7\x63\x07\x9c\xca\x3b\x15\x72\xc2\xd2\x14\xb0\xd0\x66\xf5\xaa\x13\xe1\xa1\x31\xea\x23\x67\xf8\x7e\x6b\xef\x84\x13\x73\x91\x29\x71\xb6\x3a\x4e\x42\xb9\x07\x3f\x00\x6d\xab\x75\xb6\x86\x25\x4c\x99\x65\x51\x10\xac\x7e\xf5\x2e\x3c\xfc\xb9\xee\x89\xc8\x29\x02\x4c\xf5\xfc\xae\x58\x25\x70\xb8\x2e\xa2\x5f\x17\x5c\xe8\xe1\xc6\x18\x6e\x8c\x95\x1b\x63\xed\xe0\x3d\xdf\xa5\xb1\x36\xd4\x70\x6f\xf4\xfc\xde\xe0\x34\x07\x55\xd0\x04\x3e\x23\x0f\xb3\x35\xff\xdb\xbc\x35\x4f\xbe\x6a\x94\xd3\x06\x99\x47\xf5\x0a\x78\xa8\x1a\xbc\xb1\xb0\xdf\xd4\x87\x42\x95\xbc\x51\x6b\xb5\x41\x8c\xe5\x9b\xab\x51\x7f\xc1\x94\x78\x35\x5f\x70\x50\xe8\x7c\x85\x2a\xf6\xb4\x31\x38\x8e\x15\xfe\xda\x08\x41\x53\xbb\x59\x78\xba\x0a\x4a\x53\x8f\x88\x7e\xe0\x1c\x28\x57\xe4\xc8\x07\xc5\x1e\xab\xfa\x89\x1d\x8b\x2a\x3f\xd6\xaa\xf2\x56\x15\x45\x27\xff\xe7\xff\x9e\xb6\x4a\x5a\xd5\x04\x0d\x5e\xfe\x9d\xdb\xe0\xe5\x0f\x6a\x83\x97\x7f\xf0\xf2\xc7\xe8\x6b\xf0\xf2\x0f\x5e\xfe\x8d\x6d\xf0\xf2\x0f\x5e\xfe\xc1\xcb\x3f\x78\xf9\xd7\xdb\xe0\xe5\x1f\xbc\xfc\x8d\x36\x78\xf9\xbb\x93\x35\x78\xf9\xf7\x6c\x83\x97\x3f\xa6\x97\xbf\x36\x5c\xf4\xcd\xfa\xd6\x34\x69\xb9\x4c\x56\xd4\x3e\x35\xd5\x2c\xa9\xd1\xa3\xfc\x53\xf6\x5f\xfd\x32\xc5\x35\xcd\x64\xcf\x63\x88\x6b\x1a\xfb\xd6\xec\xa9\x91\xec\x70\x5b\xad\x6e\x95\x5d\x6e\x6d\xe4\x67\x35\xc8\x0d\xe6\xf6\x6e\x54\xd6\xa9\x65\x7d\x3b\xea\x77\x1e\xcc\x40\xcd\x45\x99\xa5\x46\xb8\xad\x90\x0e\x52\x72\xe2\x3d\x6b\xa7\x66\x2b\x72\xa1\xdb\x5f\x72\xcd\x46\xf5\x13\x55\xa2\x20\xba\x05\x7d\x35\x8f\xf0\x25\xf6\x36\x82\xda\x7b\xe4\x70\x17\xaa\x24\xfb\xfa\x74\x98\x1b\x1a\x64\xeb\x1d\x98\x22\x29\x4c\x19\xb7\x20\x2d\xb2\xe4\xdc\x08\xe7\x82\xbb\x1c\xfa\x60\xfa\xac\x48\x60\x5d\x7d\x8e\x0f\x59\x93\x06\xce\x07\xda\x35\xea\xe5\x6f\xa4\x49\x53\x64\xa2\x94\x3b\x9c\x77\xc1\x9d\x53\xd5\x7c\x62\xfb\x09\x26\xad\x62\x51\xb8\x22\xac\x7a\xfb\x70\xee\xf4\x1e\xb9\x52\xf3\xc5\x98\xc2\xfd\x41\xb3\x4c\x3c\x84\x4b\x1b\x51\xce\x75\xe4\xb2\x35\x81\xa7\xed\x61\xef\xaa\x37\x2b\xb9\xbf\x61\x9a\xed\x50\x30\x67\xc7\x36\x14\xcc\x79\xba\x0d\x05\x73\x1e\x2f\x98\xd3\x88\x6c\x6a\x56\xce\xe9\x3a\xdb\x58\x6f\xe7\x00\x95\x73\x08\xf9\xcb\x1c\x90\x6f\x48\xb0\xe1\x48\x65\xa6\x59\x51\x23\xa2\x29\xbb\xf2\x99\x35\xc4\x4d\x1d\xb2\x4e\x9b\x8b\x19\x1a\x69\x32\xef\x48\xc0\x0a\x0f\x44\x2a\x10\x77\x4d\xe1\xcd\x66\x11\x65\xd0\x0f\x6c\xcb\xca\x78\x0b\x9d\x05\xf6\x61\x9f\x3f\xfe\x47\xc0\xad\xf3\x0e\xc5\x9e\x76\xbc\x9d\x22\x27\x46\x5a\xca\x96\x2e\xea\xac\x75\xfd\xb4\xc4\xac\xce\xc3\x5a\x2f\xc2\x02\xbc\x8a\x36\x63\x0b\xe0\xb5\x8c\x76\xa2\x4e\x4f\xbd\xae\xb8\x2a\x7b\x76\x1e\x33\x44\x66\xed\x7e\xaf\xee\x2b\x6b\xae\xc8\x8a\x9d\xc7\xdd\x20\x63\xfe\x47\x43\x16\xfb\xcf\xa7\xa5\xcc\xce\x43\x5b\xd6\xe6\xe1\x96\x1a\xdb\xaa\x96\x2e\x3b\xf6\xdd\x13\xec\x98\x70\x18\x90\x18\x7e\xd8\x68\xf0\x1f\x71\xeb\x53\x1d\x02\xf6\xe3\x00\x90\x1f\xbf\xa4\x82\x51\xbd\x0c\xfe\xe9\x9d\x9d\xe9\x39\xd0\xe2\x7b\x1d\xec\x33\xc0\xc5\x07\xf5\xf3\x8b\x82\x8b\x3f\x50\x30\xcf\x2f\x10\x35\xbe\x07\xc1\x3b\x87\x0c\xdc\xf9\xc5\xa1\xc6\xf7\x28\x50\xa7\x97\x41\x3a\x7d\x0b\xd0\x19\x60\xd8\x83\xda\xe7\x09\xc3\x1e\x35\x08\x27\x36\x1f\xe9\x61\xf0\x4d\x0f\x03\x6f\xfa\x1a\x74\x13\x51\x52\x7e\x9e\x60\x9b\x48\x2c\xe0\x79\x82\x6c\xe2\xa5\x46\xc7\x3c\x95\x87\x86\xcf\xe8\x45\x2e\x74\x9f\x61\x33\x7a\x95\x00\xdd\xaf\xe4\xe7\x43\x24\x3e\xf7\x06\x26\xe3\x80\x10\x19\x71\xc4\xc0\x08\xc2\xdf\x73\xf0\xfb\x78\xb2\x58\x54\x38\x8c\xa8\x3c\xff\xf0\x30\x18\x5f\x2c\xdb\x8f\x08\x7f\x31\x70\xfe\xad\xad\xef\x9c\xff\xb9\xe1\x2e\x0e\x0b\x75\x31\xf0\xff\x9d\x5a\x54\x58\x8b\x67\xf6\x9c\xbe\x24\x9c\x45\x3f\xa0\x2c\x5e\x0c\xc6\xa2\x3f\x10\x16\x2f\x06\x5f\x31\x78\xac\x07\x8f\x75\xbb\x0d\x1e\xeb\xc1\x63\xbd\x4f\x3f\x83\xc7\x7a\xf0\x58\x0f\x1e\xeb\xc1\x63\x1d\xd8\x06\x8f\x75\x47\xa2\x06\x8f\xf5\xe6\x36\x78\xac\x07\x8f\xf5\xe0\xb1\x5e\x6b\x83\xc7\x3a\x88\xc0\x9e\x7a\xac\xe3\x40\x42\xc4\x3c\x91\x7d\x82\x82\xe8\x03\x0c\xc4\x4b\x41\x40\xf4\x0e\xfe\x61\x30\x41\xef\x46\x5d\x1c\xa8\x87\x98\x47\xb8\xdf\x10\x0f\x7d\x86\x77\xe8\x29\xb4\xc3\xf3\xc0\x3a\x3c\x27\xa4\x43\xf0\x99\x8d\x7a\x5a\x0b\x91\x5e\x70\xcd\x7c\x0a\xd9\xfe\xe7\xb4\x75\x3a\xdf\xe1\x1f\x13\xb0\x67\xac\x75\x60\x9a\x79\xf2\xb2\xcc\x40\xb9\x34\x71\xba\x10\x2c\x25\x45\xa9\xb5\xcd\xbc\x75\xe7\xd3\x6f\x7c\x9a\xdb\x4c\xf9\x33\xf2\x4f\xc1\xe1\x8c\x80\x4e\xc6\x66\x73\x63\x0e\xba\xd0\x73\x90\xe6\xf1\x13\x75\x7a\xba\xff\x9a\x04\xc9\x67\x61\xa6\xbd\x42\xc2\x14\xe4\x67\x81\xac\x80\x9e\x67\x07\x5f\x20\xad\xc3\xdb\x52\x8f\x21\x02\xee\x0b\x7b\xfc\xb4\x70\x59\xef\x78\xec\x6d\xda\x79\xd7\x1b\x12\xf1\x0d\x5a\x1b\x08\x1a\x6e\x8e\x2d\x18\x07\x67\x64\x52\x6a\xc2\x34\x02\x03\x24\x73\x21\x54\x57\xee\xe2\x92\x94\xf1\x45\x16\x4c\x58\x73\xba\xe0\x80\xa8\x03\x42\x56\x3c\xb0\x41\x94\x55\x25\xea\x9f\xb1\xae\xca\x56\x2e\x94\xae\x77\x88\x37\xce\x9a\xc1\xab\x3b\x67\x26\xc1\x50\xa4\x89\x2a\x73\x43\x8a\x05\x54\x51\x16\x02\xa0\xe3\xb0\x53\x23\x62\xd1\x64\xde\x78\x85\x1c\x40\x5b\xd7\x9c\xcf\x72\x6e\x1c\xe2\xa6\xce\x74\xe2\x73\x5e\x3b\x8e\x6d\x3a\x03\xa5\xcf\xb6\x22\x8e\x6c\xdf\x0b\x96\x27\x9c\x76\x35\x4a\x25\x22\x2f\x4a\x0d\x46\x8e\x2f\x73\xb3\x9b\x98\xc6\x88\x15\x64\x46\x52\x94\x33\x3b\xe1\x1e\xe4\xc1\x4e\x44\x8d\x20\xc2\x53\xa2\xca\x89\x96\x34\xd1\xdd\x6f\xff\x23\xbb\x7c\x47\x55\x60\x11\xd2\xc2\xa6\x15\x4e\x08\x99\x53\xd5\x8c\xb8\xa9\xaf\xd7\x27\x70\x72\xfe\x47\xc0\x05\x6b\x06\x3e\x51\x0d\x41\x67\xce\x66\x73\xbf\xe7\x8c\x92\x8c\xa6\x85\xd6\x5e\xfd\xdc\x01\x26\xcc\x01\x76\x47\x09\xa5\x96\x7a\xe3\xdb\x19\x4f\xc9\x5f\xf0\x5b\x48\x57\xd3\xae\x71\x3b\x58\xdb\x01\x4d\x53\x23\x8f\x80\x1c\xd9\x83\x24\xc8\x94\x39\x4d\x69\xe5\x64\xbb\x19\xee\xca\x21\xfb\x01\x12\xb0\xb2\xe3\x02\x7a\xb2\x33\xdf\xb1\x83\x18\xae\xb6\x95\x57\x89\xa6\xb4\xdc\xb8\x69\x1e\x93\x0b\x2b\x18\x79\x36\x66\x34\xf8\xb3\x35\x18\xac\xf5\x53\x6d\x67\xa6\x07\x41\x11\x71\xfc\xb5\x31\x90\x25\x48\x44\xf7\x6a\x34\x84\x09\xf2\x32\xe5\x7f\x5e\x00\x69\x82\x1c\x06\x6d\x82\x0c\xa5\x67\xfa\x15\xcb\x43\x86\xd2\x33\x3d\x8b\xed\x21\x43\xe9\x99\xa1\xf4\x4c\xf7\xd6\x87\xd8\x1f\x32\x94\x9e\xe9\x41\x2c\x10\x19\x4a\xcf\xec\xd2\x86\xd2\x33\x43\xe9\x99\xf5\x36\x94\x9e\x19\x4a\xcf\x34\xda\x50\x7a\xa6\x3b\x59\xbd\x8b\x27\x22\x3d\x8e\x29\x22\x43\xe9\x99\xc8\xa5\x67\xe2\x65\x49\x93\x67\x38\xb9\x87\x46\xc8\x20\x7d\x49\x97\x26\x3d\x47\xca\x20\x7d\xcb\x99\x26\xbd\xcb\x9b\x26\x07\xca\x9d\x26\x7d\x42\xce\x20\x87\x45\xcf\x20\x7d\xcc\xcf\xfb\x3c\x2a\x17\x45\x45\xd4\x20\xcf\x71\x57\x1c\x1e\x59\x83\x7c\xe9\xd7\x45\x44\x84\x0d\x32\xdc\x18\xbb\xb4\xcf\xe1\xc6\x78\x6e\xc4\x0d\x72\x70\xd4\x0d\x32\xdc\x1b\x5d\x5b\x54\x24\x0e\xf2\x32\x1e\xe6\x97\x44\xe4\x20\xbd\x41\xe5\x20\x2f\x89\xcc\x41\x7a\x85\xce\x41\x5e\x12\xa1\x83\x0c\x5e\xfe\xc1\xcb\xbf\x73\x1b\xbc\xfc\x83\x97\x3f\x46\x5f\x83\x97\x7f\xf0\xf2\x6f\x6c\x83\x97\x7f\xf0\xf2\x0f\x5e\xfe\xc1\xcb\xbf\xde\x06\x2f\xff\xe0\xe5\x6f\xb4\xc1\xcb\xdf\x9d\xac\xc1\xcb\xbf\x67\x1b\xbc\xfc\x31\xbd\xfc\x71\xd0\x44\xc8\x33\x9c\xda\x3e\xa1\x8a\x90\x9e\x20\x8b\x90\x17\x44\x17\x21\x7d\x44\x18\x21\x83\xb9\xbd\x33\x95\x71\x50\x47\xc8\x33\x1c\xf5\x7e\xa3\x8f\x90\x9e\x23\x90\x90\xfe\xa2\x90\x90\x67\x43\x22\x21\xcf\x8c\x46\x42\x62\x9d\x6b\x9b\xa2\xda\x17\x9c\x1f\x4b\xcd\x5a\x66\x6d\xab\xc2\xff\xa3\x89\xf3\x61\x9a\xad\x3b\x34\x92\xf2\x19\x90\xd7\xa3\xd7\xaf\x5e\x85\xe7\xee\x32\xae\x61\x06\x21\xd6\xcb\xa9\x90\x39\xd5\xd8\xd3\xef\x7e\xdb\xa9\x9f\xe8\x6c\x7b\x1b\xdc\x43\xff\x60\x50\x9c\x4d\xa4\x0d\x43\xd1\x92\xfe\xb7\x60\x92\xa0\x56\x60\x4e\x6b\x0e\x9a\x74\xf6\x0d\x34\x80\x37\x34\xcb\xe1\xcc\xf3\x7e\x1b\x13\xe1\x03\x00\x1c\x1a\x4b\x4a\x04\x77\x22\x9b\x61\x77\x5d\xf7\x5e\xf7\x57\x4e\x80\x2a\x44\x3e\x98\x80\x79\xed\x8e\xe3\x53\x6d\x61\x7e\x0a\xc1\xb8\xf6\x86\x1e\xf3\xce\xe0\x37\x84\xc3\x10\x4a\x4b\xb0\x16\xd4\x3a\xc6\xa9\x2c\x52\xaa\xe1\x34\x44\x55\x54\x4b\xa5\x21\x47\x28\x19\x23\xe9\x51\x0c\xfe\x21\x5a\x2e\x31\x00\x64\x01\x5c\x97\x34\xcb\x96\x04\x16\xcc\xc5\xef\x98\xe1\x31\x7a\x89\x69\x15\x34\xf3\x7f\x99\x03\x72\x10\x09\x36\x30\xa9\xcc\x34\x2b\xb2\x1a\x85\xc4\x2e\x7f\x66\x4d\x72\x53\x07\xba\xd3\xe6\x67\x86\x46\x9a\xcc\x3b\x12\xb0\xc2\x0d\x91\x0a\xc3\x80\xa4\xc2\x3b\xce\xe2\xcc\xa0\x47\xd8\xa8\x0a\xaa\xb2\xd5\x59\xcc\x1f\xf6\xf9\x23\x81\x04\xdc\x3f\xef\x50\x00\x6a\x47\xde\x29\x72\x62\xe4\xa6\x6c\xe9\xe2\xcf\x5a\x17\x51\x4b\xe0\xea\x3c\xac\xf5\x27\x2c\xc0\x2b\x6b\x33\xb6\x00\x5e\x4b\x6b\x27\xea\xf4\xd4\x6b\x8d\xab\x52\x68\xe7\x31\x43\xa4\xd7\xee\x37\xec\xbe\x52\xe7\x8a\xd4\xd8\x79\xdc\x0d\xd2\xe6\x7f\x34\xa4\xb2\xff\x7c\x5a\xde\xec\x3c\xb4\x65\x6d\x1e\x84\xa9\xb1\xad\x6a\x39\xb3\x63\xdf\x3d\x41\x91\x09\x07\x04\x89\xe1\x91\x8d\x06\x04\xf2\xcc\x05\x93\x5e\x00\x00\xe4\x00\xe0\x1f\x43\xe1\x9e\xa1\x70\x4f\xbb\x0d\x85\x7b\x86\xc2\x3d\xfb\xf4\x33\x14\xee\x19\x0a\xf7\x0c\x85\x7b\x86\xc2\x3d\x81\xad\x47\x21\x3b\xbd\x0c\xd7\xe9\x5b\xa8\xce\x50\xb8\x27\xa8\x0d\x85\x7b\x86\xc2\x3d\x43\xe1\x9e\x46\x1b\x0a\xf7\x84\x1c\xcd\x78\x49\xd2\x31\x4f\xe5\xa1\x81\x34\x7a\x91\x15\xdd\x67\x00\x8d\x5e\xa5\x42\xf7\x2b\x0d\xfa\x10\x29\xd0\xbd\x01\xcc\x38\x20\x58\xc6\x50\xe7\x69\xa7\x16\x15\x18\x23\x2a\xcf\x3f\x3c\x20\xc6\x17\xcb\xf6\x23\x02\x61\x0c\x9c\x7f\x6b\xeb\x3b\xe7\x7f\x6e\xe0\x8b\xc3\x82\x5e\x0c\xfc\x7f\xa7\x16\x15\xe0\xe2\x99\x3d\xa7\x2f\x09\x6c\xd1\x0f\x50\x8b\x17\x03\xb4\xe8\x0f\x98\xc5\x8b\x01\x59\x0c\x1e\xeb\xc1\x63\xdd\x6e\x83\xc7\x7a\xf0\x58\xef\xd3\xcf\xe0\xb1\x1e\x3c\xd6\x83\xc7\x7a\xf0\x58\x07\xb6\xc1\x63\xdd\x91\xa8\xc1\x63\xbd\xb9\x0d\x1e\xeb\xc1\x63\x3d\x78\xac\xd7\xda\xe0\xb1\x0e\x22\xb0\xa7\x1e\xeb\x38\xe0\x10\x31\x4f\x64\x9f\x40\x21\xfa\x00\x08\xf1\x52\x60\x10\xbd\x03\x82\x18\x4c\xd0\xbb\x51\x17\x07\xf4\x21\xe6\x11\xee\x37\xd8\x43\x9f\x81\x1e\x7a\x0a\xf2\xf0\x3c\x00\x0f\xcf\x09\xee\x10\x7c\x66\xa3\x9d\x56\x5a\x6a\x91\x8b\x92\xeb\x5b\x90\x0b\x96\xc0\x45\x92\x98\xbf\xee\xc4\x3d\xec\x99\xd5\xdf\x3a\xa2\x17\x8f\x74\x4b\x18\x4f\x59\x82\xb6\xc9\x87\x39\xe8\xb9\x4b\x9b\xc3\xe7\x08\xb5\x0f\x12\x8d\x4f\xd6\x27\x14\xe9\x34\x77\x2c\x66\x76\x63\xd7\xfb\x2e\x81\x9d\xa1\x89\x10\x19\xd0\x7d\x5c\xd1\x4e\x66\x04\xb9\x27\xa3\x0e\xe3\x59\xdf\x3b\x51\xa2\x1e\x9d\x4c\x20\x13\x7c\xe6\x72\xc8\x1d\xd7\xd9\x77\x17\xbe\xad\xbb\x73\xae\xda\xa4\x94\x12\xb8\xce\x96\x38\xcd\x69\x0a\x29\x41\xf3\x54\x2e\x16\xfb\x6f\xf2\x3b\x64\x47\x5e\x87\xa7\x9a\x64\x40\xcd\x7b\x70\xa8\x5f\xc4\x30\x34\x4a\xae\x3b\xd0\x5e\xf9\x96\x2d\x88\x40\xa7\xf5\xdf\xff\xc6\xee\x74\x47\xb7\x4f\x83\xd7\xcb\x50\x4a\x4b\xd0\xc8\xd7\x98\x0f\x64\x90\x4b\x51\x92\x07\x6a\x55\x29\x59\x72\x64\xa9\x38\x51\x1d\x16\x39\x40\xe9\xe8\x6e\x8c\x1f\xe1\xbd\xb4\xe7\xcf\x42\x8c\xe3\x54\xce\x3a\x89\x4e\x31\x64\x89\x0b\x39\x2b\xad\xa6\xe8\x8e\x22\x70\x2d\x97\x88\x87\xd1\xed\x5e\xb8\x9b\xb7\x4e\x48\x4e\x67\x70\xac\xc8\xdb\x0f\xef\xcc\xad\x83\x11\x48\x6c\x6a\x65\x76\x77\x0b\x15\x52\x2c\x58\xda\xf5\x1a\xfa\x81\x4a\x46\x27\x99\xd1\x7a\xa7\x20\x81\x1b\x49\xfa\xab\x93\x1f\x2e\x6e\xfe\x7e\x75\xf1\xe1\xfd\x29\xea\xbf\xf0\xa9\xa0\xdc\xb0\x83\x52\xd5\xc8\x3c\x8e\xc2\x63\x45\x80\x2f\x98\x14\xdc\xcc\x02\xda\x0d\x29\x59\xb8\x4e\x3b\x51\x54\x07\x8e\x48\x50\x22\x5b\x40\x6a\xb1\x34\x2a\x02\xeb\xf0\x9d\xa2\xd4\xde\x82\xea\x63\x6f\x4a\x9e\xcc\x29\x9f\x41\x3a\x26\xef\x44\x69\x5e\xec\xab\xaf\xf0\x25\x24\xa4\x65\x02\xdd\x74\x1c\x6b\x82\xb7\x27\xf7\xab\x33\x2f\xb3\x98\xdb\x1f\x63\x6f\x08\xa8\x84\x16\x7e\x6a\x9a\xb3\xa7\x96\x5c\xd3\x4f\x6f\x2c\x16\xc7\xd1\x57\x8d\xaf\x8e\xba\x07\xae\x15\x52\x98\x57\xb1\xb2\xa0\x7d\xfb\x8c\x69\x90\x34\x23\x47\xcd\x11\xc6\xe4\xbd\xa1\x0b\xd2\xe6\xda\x5a\x30\x1a\x58\x80\x44\xdb\xaa\x5b\xd9\x33\x22\x61\x46\x65\x9a\x81\xea\x66\x14\x12\xd3\xea\x0a\xb7\xa6\x16\xb7\xab\xa0\xb2\x19\x73\xa1\xc7\xa1\x8c\xdb\xb7\x0f\x02\xc1\x4e\xa6\xe2\x0d\x99\x6b\x5d\xa8\x37\xe7\xe7\xb5\x14\x34\x66\xe2\x3c\x15\x89\x3a\xd7\x54\xdd\xab\x73\xc6\x0d\xf3\x1b\xa5\x54\xd3\x51\x83\xeb\x9e\x5b\xd9\x78\x94\x88\x3c\xa7\x3c\x1d\x51\x77\x8e\x47\xd5\xce\x3e\xff\xb5\x93\x1e\x47\xb4\x7a\x8a\xf1\x11\x1d\xa9\x39\x74\x5a\xb9\x30\x45\x31\x40\x41\x0c\x14\x32\x23\x2b\x84\x6e\x2e\x0f\xc5\xb0\xdf\x57\xfc\xd9\x2e\xc5\x98\x5c\x09\xed\xf0\x8a\x5c\x44\x25\xde\xb6\xb8\xca\x31\x59\xf8\xfb\xab\xbb\x9b\xbf\x5e\x7f\xbc\xbc\xba\x1b\x38\xf9\xc0\xc9\xb1\x0d\x9c\x7c\xe0\xe4\x1d\x06\xee\x0b\x27\x07\xbe\x38\x14\x17\xf7\x4a\x71\x83\x63\x55\x5b\xd5\x25\x0a\x54\x61\xde\xd5\x3e\xe8\xb6\x45\xa3\xec\xf4\x83\xed\x98\xd6\x64\xbf\xe7\x8b\x1f\x68\x3b\xe2\x84\x6f\x9c\x42\xe2\x1e\xb0\x1a\xfa\xdb\xb0\x09\x0c\xf6\x7c\x85\xc6\x85\x75\x52\x48\x6d\x0b\x8f\xd9\x32\x43\x77\x37\x78\xc7\x33\x77\x5f\xd1\xbc\xb2\xd5\x6e\x5a\xf2\x10\x2b\xe6\x07\xeb\x50\x55\xee\x50\x52\xbe\x24\x85\x64\x5c\xe3\x56\xba\xb8\x7d\x7b\x79\x49\x92\x39\x95\x34\xd1\x20\x15\x81\x4f\x09\x14\x9a\x1c\xff\xcf\xe3\xee\x63\x46\xf0\x75\xa0\xf5\xba\x0f\x2b\xb3\x8f\xe0\x16\x30\x4c\x2d\xf2\x15\x12\x16\x4c\x94\x2a\x5b\x56\x1e\x82\xcd\x7c\x74\x95\x81\x12\xca\x43\x28\x30\xfb\xc2\x9b\x77\x37\x0e\xb8\x22\x74\x6e\x12\x20\x43\x6c\xed\x87\x15\x3d\x1d\x11\x31\x04\xd0\x80\xf1\x37\x88\xae\xbb\x8b\xa1\x01\xe3\x76\x12\x60\xb7\x09\xa3\x01\x74\xb4\xc5\xd8\x80\x8e\xde\xd9\xbc\x2e\x14\x36\x8e\x02\xa6\x26\x16\x27\xfb\x5a\x8a\x3c\x12\x37\xbb\x45\xc0\xc2\x2a\xcf\x6e\xd3\x51\x3d\x76\xc1\xeb\x2d\x45\xc0\xa9\xb4\x55\xa6\x9b\xf9\x3c\x30\xdb\x2d\x4a\xd4\x4c\x9c\xc0\xeb\x44\xf0\x29\x9b\x7d\xa0\xc5\x77\xb0\xbc\x81\x69\x98\xaf\xbe\x3d\xdf\xe8\xb6\x74\xe1\xbf\x78\x81\x1a\x91\xcb\x0e\x16\xe6\xba\x8c\x16\x74\x14\x2b\x34\x3f\x3c\x2c\x3f\x5e\x14\x7d\x94\x08\xfa\xd6\x42\xba\x6c\xe1\x3a\x5d\x36\x56\x82\x45\x94\xc0\xcc\x30\x49\xd4\xb7\xf8\xd1\xd1\x4d\xc9\xd4\x5d\x0f\x51\x82\xcc\xef\x6a\xb4\x73\xa6\x08\x4c\xa7\x90\x68\xb6\x80\xac\x42\x48\x4f\xcf\xc8\xa4\xd4\x1e\x9b\x7c\x42\x93\xfb\x07\x2a\x53\x45\x12\x91\x17\x54\xb3\x09\xcb\x98\x5e\x12\x16\xa3\xbe\x96\x0b\x15\x70\x80\xeb\x3e\xc6\x9a\x2b\x4d\xf1\x2a\x14\xce\x10\x68\x56\xdb\xc6\x50\x50\x9f\x20\x67\xb9\xa9\x07\x1a\x8f\x42\x4a\x2e\x94\x26\x09\x48\x23\xd4\x65\x4b\xf2\x20\x45\x8c\x1a\x18\xbb\x1a\x73\x12\xc1\x8d\xfc\xaf\xce\xc5\xc2\xc8\x82\xf0\x70\xfe\x20\xe4\x3d\xe3\xb3\x91\x79\xf1\x91\x65\x56\xea\x1c\x63\x5b\xce\x7f\x8d\xff\xe9\xd3\x29\x22\x3e\xa3\xfb\x0d\x39\x3a\x0a\xec\x4b\x14\x36\x8c\x33\xf2\xa9\xbc\xc5\x00\xa1\x65\x4b\x74\xaa\x2e\x14\x23\xfa\x30\xad\x90\x4f\x79\xf7\xbc\xd3\x02\x22\x4d\xf3\xfe\x81\x15\xeb\xed\xb9\xca\x8c\x21\x3b\x88\x7b\x7b\x07\xf3\xc0\xfa\xfa\xb7\xcc\xca\xb1\xc2\x42\xa4\x6f\x88\x2a\x8b\x42\x48\xad\x48\x0e\x9a\xa6\x54\xd3\xb1\x39\x10\x67\xed\x3f\x31\x04\xec\x8c\xfc\xa3\xfa\xd0\xe2\x11\xfc\x78\xfc\x1f\xdf\xbd\xff\xeb\x7f\x1e\xff\xf4\x8f\xe6\x77\x28\xae\xd9\xec\xa2\xc6\x03\x81\xaf\xa0\x0a\x48\xc6\x5c\xa4\x70\x85\xd4\xe1\x9f\xaa\x15\xf0\xe3\xbe\xd0\x54\x97\x6a\x3c\x17\x4a\x5f\x5e\x57\x7f\x16\x22\x5d\xfd\x2b\x30\xc7\xa9\x87\x72\x0f\xae\xed\x35\xd5\xdd\x11\xe6\x49\x54\xe9\x87\x16\xec\x07\x90\xaa\x73\xcd\x96\x66\x6b\x9d\x07\xd7\x6b\x05\x85\x9f\xcc\x21\xa7\xf8\xcf\xaf\xfd\x14\x98\xfb\xf8\x41\x32\xad\x31\x06\xcc\x15\xa8\x10\xd3\x33\xcf\x5a\xad\x52\xb5\x78\x1d\x5c\xa0\x2d\x2a\xe7\xaf\x56\x30\xf2\x84\xe1\x8c\xb8\xd9\xb2\x1c\xa0\x86\x5b\x59\x0b\xf9\xbc\xb8\xbe\x24\x0b\x3b\xc3\x3d\x9a\x9c\xe7\x63\xd7\x19\x44\x57\xb7\x82\x19\xf6\xd7\x15\x55\x6e\x99\x1a\xaa\x9b\x53\x98\x91\xf2\xd0\x05\xba\xb1\xcc\xc7\xa6\xe3\xbe\xe7\x0b\x33\xae\x22\x53\xa0\xba\x94\x40\x66\x54\xfb\x02\x3e\xc0\x8d\x4e\x1e\x98\xa2\xd2\x43\x9e\x19\x9e\xc2\x3d\x22\x45\x28\xcb\x35\x9d\x2c\x44\x56\xe6\x78\xb9\xf5\x84\x7b\xc7\xd7\x5d\xa3\xa8\x72\x5e\x01\x76\x51\x14\xad\xc3\x40\x2e\x0c\xb3\x5f\x60\xce\xb1\x7d\x06\x4d\x8f\x58\xa6\xa9\x5d\x9b\x49\x69\x2a\x75\x94\xba\x7c\xa4\x06\xf0\xf2\x96\xee\x3a\xc0\xc3\x5a\xb9\xf2\x17\xf7\x5d\xd4\xcd\x16\x4f\x23\x17\x59\x31\xc7\xcc\xa1\x59\xa5\x07\x6f\x3c\xed\x67\x15\x84\x83\x62\xff\x44\x0b\x5b\xc6\x72\xa6\xad\x5a\xf9\xfa\xb7\x7f\x6c\x10\xda\xa3\xbb\xe1\xd9\xd4\x9c\x28\x3b\x76\x93\xae\x64\xb6\xeb\x23\x6a\x52\x95\x1c\xed\x9f\x8b\x83\x34\x91\x0a\x70\x26\x53\x4c\xab\x36\x23\xd4\x27\x68\x41\x65\x15\x25\x54\x4e\x32\xa6\xe6\x71\x4a\x58\x5f\x4e\xab\xd5\x31\xfd\x2b\xc0\xb0\x63\x2d\x4b\xa8\x12\xba\x6a\xd9\xc3\xcc\xc5\x0a\x95\x11\x48\xd8\x66\x62\x6e\xd7\xcd\xab\xdd\xf9\xd7\x98\xbb\x55\x47\xc3\x8f\x7f\xf5\x6c\xf3\x30\xa5\x99\x7a\xb9\x89\xa0\x9c\x80\x94\x42\x56\x6e\x28\x09\xba\x94\xbc\x4e\x72\xbf\x16\x29\x49\x24\x58\x68\xc2\x1e\x29\xeb\xa4\x69\x14\xc1\x39\x0b\xec\xae\x88\x2f\x64\x47\xbb\xde\x0c\x6d\xcd\xfb\xcd\x8a\x06\xf6\xe2\xb2\xde\xbc\x36\x58\x62\x0c\x41\xd0\xb4\x0f\x8e\x09\x55\x45\xe4\xcc\xb6\xf4\x25\x0f\xdd\x69\xc0\x01\x8f\xc7\xe3\x63\x4b\xa5\x90\xf6\x2a\xb5\x16\x45\xf3\x79\xaf\xae\x85\x5a\xa8\x7a\x06\x33\x3c\x6f\x18\x95\xdd\x12\x61\xae\x90\x9f\x2a\xef\x62\x8d\x25\xab\x7f\x06\xca\x94\xaf\x44\xf6\x75\xaf\x6d\x60\x9e\x4a\xbf\x78\x15\xa3\x7f\x63\x53\xf5\xab\x7a\x6a\x56\xf8\xb1\xf8\x34\x46\xe5\x00\xa5\x43\x0d\xc5\x27\xb6\xcb\x71\x52\x94\x67\xae\xfb\x71\x0e\xb9\x90\xcb\xea\x4f\x28\xe6\x90\x83\xa4\xd9\x48\x69\x21\xe9\x0c\xce\xaa\xc1\xed\xcf\xaa\xbf\xec\x0f\x5b\xe4\xad\xff\xda\x46\x77\xd4\x99\x57\xce\xde\xf7\x05\xea\x72\x7e\xdd\x7a\xa2\x40\x55\xdb\xea\x19\xf8\xcf\x71\x15\x30\x67\x7d\x6e\xd5\x2c\xa2\x4b\xdd\x72\x23\x75\x56\x0b\x1c\x18\xf7\x61\x85\x3c\x75\xdc\x1f\x3e\x44\x48\xca\x16\x4c\xc5\x80\xd1\xda\xe0\x9e\x60\xce\xae\x21\x4a\x5d\x94\xda\x55\xbe\xae\x2c\x28\x9f\x0a\xa1\x30\x5a\xa4\x2a\x9e\xd8\x32\x0d\xbe\x0e\xf5\xbc\xa0\x8c\xa1\x41\xf2\x37\xe4\x7f\x9f\xfc\xed\x37\x3f\x8f\x4e\xff\x74\x72\xf2\xe3\xab\xd1\xbf\xff\xf4\x9b\x93\xbf\x8d\xf1\x1f\xff\x7a\xfa\xa7\xd3\x9f\xfd\x1f\xbf\x39\x3d\x3d\x39\xf9\xf1\xbb\x0f\xdf\xdc\x5d\xbf\xff\x89\x9d\xfe\xfc\x23\x2f\xf3\x7b\xfb\xd7\xcf\x27\x3f\xc2\xfb\x9f\x76\xec\xe4\xf4\xf4\x4f\x5f\x05\x93\x4e\xf9\xf2\x63\x20\xf7\xb6\x6d\x14\xad\x70\xf9\x6a\x8f\x91\x5c\x6d\xad\xab\x90\x71\x3d\x12\x72\x64\xbb\x7e\x83\x4a\x4a\xe0\x00\x7e\x7b\xc5\x3e\xff\x37\x9e\x6b\xd6\xb7\x59\x25\x14\xf6\xe8\x80\x3f\x97\xa0\xa1\x20\x91\xa0\x5f\x22\x4c\xc6\x8e\xe4\x35\xc3\x15\x54\x8f\x2f\xed\x06\xfd\x25\x44\xce\x54\xf5\x93\x71\x5d\x6b\x4d\xca\xa8\x57\xe3\x5a\x09\xa2\xc4\xda\x11\xdd\x73\xf7\x10\x08\xa8\x4e\x86\x48\x9b\x90\x36\x44\xda\x6c\x21\x65\x88\xb4\x09\x6a\x9f\x65\xa4\xcd\xad\xe5\x49\xbf\xc8\x30\x9b\xf5\x04\x33\xd3\xe9\x7d\xe7\x82\x33\x9d\x33\x77\xb6\x65\xba\xe5\xb4\xd8\xbb\x37\xe0\x8b\xae\xc1\xd5\x31\x53\xdd\xbc\xd9\x43\x0b\x52\x88\xa2\xcc\xa8\xde\x92\x45\x11\x29\xef\xad\x67\x9e\xb3\xbf\xcc\x81\x3b\xd1\xcf\xc5\xf0\x33\x4e\xf2\x32\xd3\xac\xe8\x98\x10\x50\xa9\x96\x15\x38\x24\xa1\x4a\x89\x84\x51\x9f\x08\xee\x80\xad\x94\xf6\xaf\x8c\x96\x79\x4d\xef\x31\x87\x26\x81\x14\x78\xd2\xd1\x72\xf8\x83\x05\xa3\xf4\x73\x3b\x59\x9a\x7b\xe8\x3d\x5f\xb8\x3b\x89\xa4\xa5\x4d\x70\x85\xda\x57\x1a\x65\xdc\x2f\x2b\x9b\xd1\x9c\x4b\x97\xad\xd0\x48\x6a\x44\x09\xb2\x32\x22\x56\xe0\xd9\x55\x08\x24\xa6\x7f\x58\x36\xdd\xed\xc2\x0b\x56\x0e\xc2\x45\xf1\x2a\x1b\x21\x48\xc7\x5a\x93\xc1\xeb\x30\xd1\xb6\xec\xdd\x79\x84\x1e\x25\x70\x84\x4b\xe5\x71\x25\xf2\xe7\x90\xc6\xfb\x22\x89\xf7\x44\x0a\x7f\x1e\x09\xbc\x9f\xd2\x77\x34\xc9\x3b\x8e\xd4\x1d\x47\xe2\xde\x23\xae\x3d\xa6\x94\x1d\x47\xc2\x7e\x0e\xfb\x5a\x21\x61\xca\x3e\xf5\x21\x6d\xf9\xa3\x77\x5f\x68\xf8\x84\xa6\x9a\x42\x42\x01\xbc\x42\x1e\xf6\x1e\x58\xa0\xc9\x7c\xc8\x38\x27\x95\x5d\x34\xee\x85\x7d\xbb\xc9\x52\x36\xdc\xd6\x64\xb8\xad\xf7\x68\xc3\x6d\x3d\xdc\xd6\x2f\x72\x5b\x3b\x6e\xf5\xe5\x5f\xd5\x91\x91\x96\x10\x43\xee\x50\x06\xa8\xb7\x6d\x28\x3b\xe4\xcc\xcf\x89\xf6\x55\x1d\xc5\x3a\xc6\xf3\x1c\x47\xee\x76\xe2\xda\x4c\xb6\x0a\xba\xd0\xc2\xb2\x3d\x32\x67\x33\xb3\x3d\x33\x58\x40\xe6\xd4\x6a\x92\x53\x4e\x67\xb6\x84\x89\x16\x55\x09\x5f\x21\xb1\x42\xa9\x64\x1d\xd1\xd3\x57\x30\x01\xd1\x82\x65\xb8\x4c\x26\x68\x8a\x5f\x4a\x91\x65\x46\x5e\xc9\xd8\x3d\x90\x77\x50\x64\x62\xe9\xaa\x90\xf0\x94\xdc\x6a\xaa\x61\x5a\x66\xb7\xa0\x3b\x85\x77\x07\x71\x1c\x24\xf8\xba\xcc\xb2\x6b\x91\xb1\xa4\x93\xf7\x2f\xc6\x56\xbc\xc4\x0d\x58\x94\x59\x46\x0a\x24\xa4\xdb\x3e\xfc\xc8\xf1\x2a\xbf\xc8\x1e\xe8\x52\x9d\x91\x2b\x58\x80\x3c\x23\x97\xd3\x2b\xa1\xaf\xad\x11\xa9\x5b\xbf\x4d\x4c\x10\xdb\x39\x61\x53\xf2\x06\xcb\x2f\x6a\xa2\xe9\x0c\x63\x8b\x7d\x18\xf1\x99\xd9\x50\xcd\x41\x89\x30\x8c\xf2\x81\xa9\x43\xda\xf6\xc2\x4f\xe9\xaf\x71\x74\x73\x75\x76\x3e\xb5\x41\x7b\x35\x63\x53\x48\x96\x49\x76\x30\x86\x79\x91\x60\x7a\x6d\x5d\xec\xa5\xc1\x4e\xd4\x52\x69\xc8\x3d\x9e\x3d\x9a\x74\x19\x27\x12\x54\x21\xb8\x42\x29\xaf\xe6\x12\xd5\x8b\x10\x4c\x92\xe9\x98\xd4\x11\xd1\xe2\xdb\x59\x31\x08\x55\x09\x0a\xa1\xf4\xad\xa6\x52\x77\x95\x4f\x62\xe9\x02\xd7\x9e\x10\x73\x92\x13\x9a\x65\x90\x12\x96\xe7\x90\x32\xaa\x8d\xdc\x4e\xa7\x1a\xab\x18\x34\x58\xbd\xb2\x31\xfb\x8d\xbc\x91\x39\xe5\x69\x06\x92\x4c\x29\xcb\x54\xf7\xcc\x81\x36\x34\x97\x91\xcf\x41\xe6\x8c\xa3\xf7\xc2\x46\x9d\x62\xf4\xb7\xf9\x2b\x49\x84\x4c\x5d\xbd\x00\xa6\x95\xff\x2a\x88\x89\x9a\xf6\x11\x25\xbb\xc6\xf6\x5e\x0d\xda\x25\x93\x4c\x24\xf7\x8a\x94\x5c\xb3\xcc\xbe\xbc\x10\xf7\xa8\xbf\x64\xc8\x4e\x3a\x0f\xdd\x9d\x4b\x55\xff\x1c\x55\x07\x6c\x64\xa8\x52\xe7\xbf\xae\xbf\xc2\x0f\x3a\x12\x17\x41\x8b\x8e\xa1\x43\xc3\x27\x48\xa2\x95\xda\x79\xff\x09\x92\x56\xa1\x2b\x07\xa4\x6a\x76\x94\x03\x4f\x8e\xe4\x77\xb4\xad\x67\x75\xbb\x03\x40\xab\x9b\x2d\x76\x48\xcf\x5b\xb7\x08\xae\x64\xaf\x5f\x93\x8c\x71\x68\x2f\x8c\x62\x29\xb4\x17\xc7\xba\x3d\x9d\x92\x4b\x52\x26\xb1\xc6\xd0\xd2\xa3\x7e\x05\x93\xe6\x69\xc1\x32\x3c\x42\x68\x72\x72\x7c\x7e\x7c\xba\xb6\x47\x8e\x15\xa6\x5f\xd8\x6b\x71\xec\xa0\xb3\xab\x97\x52\x2c\x2f\xb2\x25\xbe\xc7\x71\x7a\x46\x98\x8e\x11\x23\x64\x6e\x43\x59\x72\x3f\x2b\x0e\xea\xfb\x8c\x28\x41\xb4\xa4\xbe\xb4\x9e\xfd\xd4\x3c\xa4\x65\xe9\x2e\xf4\x93\xe3\x9f\x8f\xcf\x08\xe8\xe4\x94\x3c\x08\x7e\xac\x71\xfa\xc6\xe4\x4e\x90\x32\x38\xe7\x89\xd4\x84\x2c\x45\x49\x38\x80\x3b\x5b\x45\xc6\x12\xa6\xb3\x25\x5e\x37\x44\x94\x36\x43\xcf\x88\x16\x01\x10\xe5\xcd\xf6\xfe\x13\xd3\x0e\x7c\xc3\xf0\xef\x57\xb8\x9b\xec\x95\x45\xa8\x51\x46\x16\x70\x3e\x07\x9a\xe9\xb9\xcd\x66\xe0\x82\x8f\xfe\x09\x52\x20\x8c\x39\x77\xdf\x7c\x71\x65\xe2\x23\x06\x32\x3d\x53\x45\x35\x73\xed\x7d\x03\x9d\x45\x22\xb2\xca\x8f\xbe\xbd\xbb\xbb\xfe\x06\x74\x93\xcb\x73\xfc\x90\x7c\xf3\xfe\xce\xe7\xb0\xa0\xa1\x1f\xe4\x54\xc8\xbc\x07\xec\x3d\x4e\x70\xed\x88\x14\x42\xf6\xe1\x96\x99\x0b\x15\xb4\x9c\xe4\x19\xae\x98\x6f\x85\xd2\xd6\x97\x63\x75\x13\x8e\x89\x8d\xa2\x9d\x90\xe1\xd3\xf7\x2f\xaf\xc7\xe4\xaf\xa2\x34\x13\x32\xa1\x93\x6c\x59\x15\x32\x52\x10\x5a\xf4\x94\x90\x23\x43\xca\x91\xb9\x41\xcc\xce\xff\x16\x68\x0a\x52\x21\x83\x06\x1a\xa9\x3c\x6b\x84\xe3\xde\xa0\x2d\xea\x52\xbe\x2d\x95\x16\x39\x99\xbb\xd7\x6e\x43\x9c\xbb\xc3\x39\xb6\xc7\xd5\xc1\xc9\x4a\x28\x2c\x13\x77\xbf\xf9\xe2\x58\xf4\x1a\xf7\xb2\xf3\xee\x3e\x9f\x58\x31\xb5\x39\x6d\xce\xc1\x61\x81\x4a\x1d\x6f\x33\x5b\x35\x5a\xdc\x6b\x94\xf2\xbe\xf1\x72\x06\x48\x18\xf8\xf9\x6a\x47\xe8\xec\x09\xee\x29\x5e\x1a\x02\x89\x16\x6a\x4f\x9e\xad\xec\xbf\x11\x68\xdd\xe6\xb3\x36\xe8\xee\xd6\xf3\x4d\x9d\x33\x55\xa1\x05\x24\x94\x0b\xce\x12\x9a\xb1\x7f\x42\x4a\xca\x42\x70\x97\x5b\x87\x92\x6d\x42\x15\x8c\xd0\xf3\xce\xb5\xab\x45\x5c\xa3\x5d\x1b\xee\xa0\x85\x40\x71\x0f\x83\xe7\x0c\xbb\xb7\x54\xc7\xac\x7d\x1f\xad\xbc\x7c\x20\x74\x7b\xb3\xad\x39\xd4\x5b\x8b\x15\x67\xc7\x93\xcf\x42\x9c\x24\x91\x80\x17\xd6\xb1\xcd\xb4\x20\x34\x49\x10\xcf\xdb\x5e\x57\xc8\x78\x15\xc8\x45\xf8\xfe\x8a\x36\xaf\x46\x04\xec\x9b\xec\x65\x63\x0e\x24\xe1\x65\x3e\x01\x59\x03\x43\x4a\xbd\x3e\xa7\x51\xac\x2e\x6e\x58\x3b\x9c\xf7\xd2\x7a\x19\x83\xf2\x19\x90\xd7\x66\xe4\x3f\xfc\xfe\xf7\xbf\xfb\x7d\x84\x71\xcc\xeb\x55\x25\x42\x39\xb9\xbc\xb8\xba\xf8\xfb\xed\x0f\x6f\x11\x6e\x3e\xb4\xfb\x48\x49\xb2\xb1\x53\x64\xa3\x26\xc8\x3e\x6b\x7a\x2c\x02\x37\x06\x73\xd9\xd8\x47\xe2\x16\xa9\x32\x9b\xb0\x54\x16\xa2\xde\xe9\x24\x8d\x6a\xb8\x46\x8d\x0a\xdf\x9d\x4d\x67\x9e\x61\x58\xbd\xe0\x54\x2a\x03\x28\xa2\x69\xfc\xb7\xa6\xb7\x56\x39\x20\x92\x96\xd2\x56\xa5\xad\x9c\x57\xb5\x2d\xdf\x39\xad\x90\x86\x2f\x48\xf9\x57\x90\x08\x9e\x86\xa8\x00\xb1\x44\x5a\x47\x49\xd4\x33\x77\x6b\xfb\xf4\x26\xe2\xfa\x2a\x71\x83\xa1\x26\x19\xba\xa2\xa4\x5a\xd5\x38\x7c\xd2\xa2\x41\x60\x6f\x7f\xf8\xb7\xee\x0e\xb2\xa4\xb8\x15\xc9\x7d\x44\x13\x59\x20\x03\x7b\x67\x4e\x5a\x62\x7d\x81\x77\x6f\xaf\x2d\x71\x66\x65\xae\x3e\xde\xd5\xd0\x2f\x46\x0a\xa7\xe4\x7b\xef\x9b\xfa\xd6\x79\x0b\x29\x4f\xc9\x3d\x14\x61\xda\xa5\x61\x98\x3e\x8c\xb0\x1d\x45\x38\x76\x25\xbb\x11\x65\xce\xa6\x57\x5b\x46\xe0\xa3\xff\xac\x44\x1c\x56\x01\xa8\xe1\x9c\x47\x47\xa0\x53\x42\xa6\x94\x65\x84\xa2\x55\x5e\xb3\x1c\xc8\xc3\x1c\xb8\x35\xf6\xd7\xd1\x12\x5f\x10\xc3\xf9\x52\xad\x8d\xc7\x3e\x24\xfc\xcd\xde\x56\xc3\x50\x54\x8c\x2f\x5b\x0d\x70\x3c\x5b\xb6\x50\xcd\x06\x35\x60\x97\x36\xa8\x01\x1d\xd5\x80\x42\xc2\xad\x16\x9d\x65\xcd\x68\x01\x37\x96\x8c\x2d\xe1\x36\x13\x98\x0a\x09\xab\xf1\x36\x8d\x38\x18\x17\x39\x1f\x10\x19\x7c\x71\x7d\x59\xf9\xbe\x44\x2b\xd6\xc5\x22\x17\xab\x32\x99\x7b\x37\x29\x07\xa5\xce\x31\xb2\xa6\x2c\xac\x61\x19\xaf\xb6\x52\x42\xf7\x28\x9f\x42\x02\xe4\x38\x8f\x67\x35\x9a\x90\x79\x5d\xe0\xf6\x43\xd0\x89\xf5\x9b\xfb\xb0\x22\x87\x13\xeb\xa7\x6b\x1a\xe4\xce\xaf\x27\x36\x91\x54\xcd\x01\x73\x67\xe1\x13\xd3\xca\x0e\x6a\xd1\x58\xfd\x8c\x1b\x79\x61\x26\x69\x02\xa4\x00\xc9\x84\x11\x31\x4a\xae\x53\xf1\xc0\xc9\x04\x66\x8c\x2b\xbf\x62\x21\x24\xf9\x2d\x81\x91\x44\x4c\x55\xb5\xbb\xc7\xe4\xa6\x55\x39\xce\xa1\x8b\x25\xa2\xe6\x99\x6e\x8a\xce\x22\x4d\x09\x0a\x2f\xb8\x0d\x4a\x9a\x65\xcb\x7a\xe3\x35\x01\x42\xb7\xcc\x50\xf7\x0d\x61\x67\xf6\xa4\xe4\xf8\xa2\x29\x64\x74\x69\x33\xc8\xa7\x8c\xa3\xf5\x57\xaa\xd3\x71\x78\x68\x56\x67\x02\x85\x6c\xf4\xb9\x75\x67\x30\x45\x24\xd0\x24\x08\xc7\x78\x88\x01\x7b\xaa\x0d\x31\x60\x43\x0c\xd8\x10\x03\xb6\xde\x86\x18\xb0\x76\x1b\x62\xc0\xb6\x13\xd4\x67\xa7\xdd\x10\x03\x36\x58\x65\xd6\xdb\x10\x03\xd6\xa9\x0d\x31\x60\x4f\xb6\xde\xb1\xe8\x21\x06\x6c\x87\x36\xc4\x80\xed\xd8\x86\x18\xb0\x21\x06\x6c\x88\x01\x1b\x62\xc0\x02\xda\x10\x03\xb6\xff\xeb\x0d\xce\x9f\xee\x6d\x88\x01\x1b\x62\xc0\xf6\x6c\x43\x0c\xd8\x4a\x1b\x62\xc0\x86\x18\xb0\xc7\xda\x10\x03\x36\xc4\x80\xb9\x36\x58\x1b\xd7\xda\x10\x03\xb6\xa1\x0d\x31\x60\xfb\x8d\x33\xa8\x01\x61\x9d\x3d\x8b\x1a\xa0\xb4\x28\x6e\xd9\x2c\x00\x17\x32\xd6\x31\xb8\xad\x28\x71\xa0\x91\xca\x15\xdb\x55\xf6\x43\x6f\xc7\x52\x0e\xb2\xaf\x19\x11\xd6\xb8\x49\x26\x60\x54\x04\xf3\x5a\x45\xc8\x6d\x72\x39\x45\x07\x72\x03\xc9\xcd\x9c\x0a\x0f\x13\xc8\x5a\x65\x1d\xda\xe2\xb3\xbf\xdd\x18\x37\xba\x4b\x77\x0a\x1a\xf3\x91\x50\x6e\x2b\xa3\xba\x32\xd9\xe6\x7a\xbf\x16\xa9\xf2\x95\x24\xb8\xe0\x23\x0b\xd6\x3a\x36\x04\x8f\x85\x1a\x07\x58\x83\x03\x91\xd9\x6c\x8c\xdc\xb5\x14\x93\x83\xa1\xb3\x5d\x63\xfc\x11\x4b\x5c\x80\x9e\x98\xb6\x10\xd7\x2c\x81\x1d\x91\xd6\xda\x81\x61\x58\xac\xd9\x43\x70\x31\xc7\xb0\xab\xa0\xc0\x43\xa2\xb9\xed\x1d\x39\xe5\x51\x2a\xd5\x79\x21\xec\xff\xd5\x71\x53\x8d\x80\xa9\xce\x7e\x94\x03\xc3\xcb\x85\x44\x49\x1d\x2c\x42\xaa\x27\x11\x66\x11\xa2\xa2\x62\xca\x4a\x3d\x8d\x86\xea\x67\x24\x54\x1f\xa3\xa0\x0e\x11\x01\x75\xf0\xe8\xa7\x38\x6e\xf5\x08\x2e\xf5\x48\x12\xe9\x33\xb8\xa7\x5c\x20\xfd\xdd\x5c\x82\x9a\x8b\xac\x33\xc3\x89\xc5\x6c\x3e\x30\xce\xf2\x32\xc7\x2a\x14\x86\xa7\xb0\x45\x15\xec\xaf\x3c\xcb\x70\xd7\xbd\x8d\x38\xc0\x72\x15\x29\x60\x19\x70\xca\x32\xb3\xb5\x10\x2c\x74\x4e\x17\x28\x94\x96\x49\x02\x90\x86\x88\xa5\x4d\x6b\xf5\xef\xc6\x15\x85\x16\xa3\x9f\x29\xf2\x3a\xec\xaa\x09\xd3\x7b\x1a\xe6\xbc\xdf\xfd\xb6\x53\x1f\x33\x59\xc4\xb9\xa5\xbf\xb9\xb9\x7e\xdb\xba\xa5\xf1\x83\x6f\xf1\x18\xbf\x9d\x43\x72\x7f\xe3\x42\x69\x0e\x77\x33\x87\x9b\x99\x82\x4c\x4c\x31\x04\x83\x50\x2b\x4a\xdb\x87\x2c\xa4\x5e\x71\x81\xce\x70\x15\x41\x2e\x58\x02\xe3\x17\x30\x54\xc4\x52\xfe\xc3\x0f\x02\x41\x37\x01\xbe\x78\x5f\xc4\xae\x5b\x4b\x4e\xe5\x61\x68\xd8\xa8\x1c\xa5\x18\x34\x9a\xd1\xa4\x5a\x9b\xd9\xe6\x43\x17\x44\xc6\x89\x02\xa8\x14\x9a\x19\xd3\xf3\x72\x32\x4e\x44\x7e\x6e\x58\x87\xfd\xbf\x49\x26\x26\xe7\x39\x55\x1a\xa4\xd1\x71\xdc\xb5\x3e\x4a\x0c\x05\x8c\xcf\xc6\x79\x7a\x3a\xfe\x55\x10\x0d\x97\xce\x56\xee\xd2\xb0\xb6\x18\x09\x26\x60\xf8\xbe\x90\x2b\xd6\x02\x33\x29\xe1\x9b\x34\xf8\xfe\x0e\x2d\x2a\x12\x18\x96\x7c\x90\x90\xe4\x81\x6b\x93\x08\x0e\x81\x98\x4c\xa5\x1f\x61\xc7\xcf\x16\x72\x1c\xe5\xac\x46\x0a\x35\xee\x51\x98\x71\x6f\x74\xa1\xbe\x84\x16\x47\x0b\x2b\x8e\x15\x52\x1c\x25\x9c\x38\x46\x28\x71\xbc\x30\xe2\x38\x21\xc4\xf1\xc3\x87\x9f\x2d\x74\xf8\xb3\x08\x1b\x8e\xe8\x1f\x8b\x14\x2e\xfc\x12\xa1\xc2\xfd\xb5\xc1\x90\x08\xe1\xc1\x2f\x17\x1a\x1c\x65\x1e\xa3\x6a\xb1\x81\x2c\xe1\x00\xa1\xc0\x2f\xe1\xff\x7f\x36\xdf\x7f\x04\xbf\x7f\x4c\x9f\x7f\x34\x7f\xff\xb3\x85\xfc\x86\x87\xfb\x46\xb5\x29\xbc\x48\x98\x6f\xcc\x10\xdf\xe0\xf5\x65\x9c\x69\x46\xb3\x77\x90\xd1\xe5\x6d\x58\x20\x68\xac\x95\xb8\x5a\x0b\x16\xb5\x66\xeb\x76\x5c\xc3\x9c\x2a\xe2\x5d\xdd\x0e\xe2\xc5\xfb\xd2\x9d\x08\x4c\x28\x7a\x9c\xcd\xfb\x75\xf6\x5a\x93\xfe\x79\xae\x49\x6f\xcc\xe3\x16\x57\xa5\x27\xbb\xe6\x5b\xf1\x40\xc4\x54\x03\x27\x27\x8c\xfb\x9d\x73\xda\xb0\xd2\xd4\xee\x91\x60\x7f\x87\xe9\xf5\xf5\x2b\x3f\xc8\x97\xe7\xf7\x40\xcf\x90\x52\xbd\xf6\x7c\x39\x1a\x9f\x76\x7d\xb9\x07\xa7\x65\xd6\x76\x7f\x59\x97\x58\x1c\xdf\xd7\xeb\x31\xf9\xe0\xc4\x89\xd7\x48\x4f\xc5\x8a\x28\x4f\x89\xc3\xe7\xfa\xf2\xf6\x49\x70\xa8\x7b\x5b\xb9\xa9\x62\xd3\xdb\xf1\x2c\xf6\x06\x36\x52\xa6\x20\xd4\x3c\x85\x02\xe8\x60\x74\xed\x8d\xd1\xf5\x40\x11\xd8\x5f\x9e\xb6\xf5\xf2\x11\xd7\x83\xb6\xf5\x4b\xd1\xb6\x1a\xb0\x78\xdf\x48\x9a\xc0\x75\x9f\x84\x37\xcf\x40\xea\x44\xc0\x5a\x86\xab\xd8\x05\x07\xb0\x89\x63\x35\xe8\x21\xe2\xfb\x4d\xcb\x2c\x5b\x5a\x1b\x62\x0b\x01\xb3\xfb\xd6\xba\x9b\xc3\x1a\x74\x20\xba\x52\x37\x50\x57\xeb\x26\x85\x14\x4e\x22\x91\x25\xe7\x46\xc4\x70\xc7\xc9\x10\x6f\x74\x11\x05\xbc\xbb\x39\x9d\xb6\x80\x0d\x5d\x10\x3a\x06\x7a\xce\x81\xd4\xf9\x4b\x6d\x42\xcc\xa8\x53\x21\x13\x36\xc9\x96\x64\x4e\x33\xa3\x2c\xb9\x20\xed\x7b\x96\x65\xae\x9b\x80\xa0\x70\xd0\xd6\xf5\x6c\x25\x9a\x4c\xf0\x19\x4e\x06\xb5\x84\xc0\xa7\x02\x12\x33\x66\x92\x01\xe5\x65\x61\xe9\x34\xf2\xd1\x52\x94\xd2\xd3\x19\x14\x15\xdf\x18\x9d\x29\xc2\x59\x76\xe6\xa7\xbc\x0d\x81\xb9\xbe\xe7\x6b\x93\xb2\x82\xd4\xa1\x57\x3e\x30\x05\x67\xd8\x67\x67\x9a\x2c\x2d\xbe\x6a\xbf\xdd\x37\xf6\xb3\x42\x8a\x05\x4b\xeb\x18\x7d\xb3\x2d\x30\x3e\xbe\xf3\x58\x3f\x60\xbf\x9e\xb5\x72\xc1\x47\x1c\x66\x14\xc5\x63\xc7\xd0\x6c\x44\xa7\x1d\xdf\xc6\x0f\xf2\x94\x25\x54\x83\xc2\x9c\x84\x16\xb4\xed\x82\xd1\xce\x94\x98\xf7\x69\xec\x28\x72\xc2\x05\x11\x98\x59\x58\x72\xa6\x97\xe8\xd1\x9b\x97\x9a\xa4\xe2\x81\x9f\x86\x1c\x4c\x1b\xe6\x40\xc9\x04\x34\xad\x93\x03\xbd\x48\xa6\x08\x70\x3a\xc9\xcc\xd9\xc3\x88\xff\xbb\x8d\x1b\x80\x4c\x81\xea\x52\x02\x99\x51\x1d\xc0\x25\x36\x48\xf3\x76\x3d\x1f\xdf\x76\x4c\x39\x7f\xdd\x94\x94\x5c\x41\xa0\x20\x1b\x4d\x05\xe8\x98\xf1\x6a\x4e\xb4\x28\x75\x4f\xee\x91\x6d\xa6\x23\x9b\xb9\xd3\x50\x12\x59\x0e\x8a\x88\x32\xc0\x92\xd7\x52\xff\xdc\x70\x31\x35\xbc\xc1\xee\xb4\xb1\x75\x75\x9b\xc6\xd8\x61\x57\x0d\xa9\xbc\x81\x4f\xe0\xc3\xad\x6c\x06\xf5\xbb\xab\xdb\xbf\x7f\x7f\xf1\xbf\xde\x7f\xdf\x6d\xe1\xdf\xd3\x64\xde\xc4\x16\xe7\x84\xe2\x45\x81\x4c\x7e\x4e\x17\x40\x28\x29\x39\xfb\xef\xd2\x85\xbc\x9d\x54\xe3\x75\x64\xab\x51\xd2\x7b\x82\x04\x5f\x73\x4b\x74\xe2\x1c\x31\xd6\xf4\x7b\xa6\x10\xa8\x1a\x89\x70\x81\xff\x42\x01\x99\x4a\x91\xaf\x28\x5a\xe4\xaa\x0a\xae\x5b\x9a\x1b\x86\x5a\xd5\x6c\x0e\xb2\x9b\x44\xfe\xee\xe3\xfb\x5b\xcc\xc1\x2f\xa4\x05\x76\xc7\xe4\x02\xec\x13\x47\xb7\xa9\x83\x96\x9e\x74\x4c\x2e\xf8\xd2\x7e\x69\x99\x59\x47\x11\x25\x63\x4a\x03\x0a\xa7\x4e\x91\xf4\xe1\x81\x47\xaf\xc6\xf8\xbf\x23\x42\xd3\x54\x1a\x4d\xb3\xca\xd1\x48\x56\xb3\xcc\x3a\x8d\x6c\xf5\x57\x36\xc9\x1a\x93\xcb\x41\x63\x1a\x47\xa7\x0e\x3f\x88\xd4\xad\x04\x0a\x81\x18\xbf\x63\xa5\x5b\xa5\x25\xd5\x30\x63\x09\xc9\x41\xce\x80\x14\x54\x27\x73\x92\xd3\x25\x49\x84\x94\x65\x61\x21\x46\x52\xaa\x69\xb7\x91\xbf\x16\x92\xe4\x9e\x3b\x1b\x6e\x66\x44\xf2\xdb\xcd\x81\xa0\x35\xcb\x6e\xfe\x93\x29\x55\x82\x3a\x7f\xfd\xea\x8f\xbf\xfd\x7d\x47\xf5\x3a\xe2\xc1\xed\x1a\xfa\x14\x10\xf2\xd4\x0e\xff\xf2\x1b\x0c\x83\xae\x5b\xc8\x30\x6e\x87\xd8\x9d\x8f\xdc\x50\x31\x3e\xcb\x82\x0d\x20\xc1\x66\xc0\x50\x23\xe0\xa8\x7e\x83\xeb\xae\xb6\xc0\x70\x4b\x60\x8b\x86\xee\xa6\x94\x78\x56\xb0\x5a\x82\xf3\x76\x2f\xc7\x90\x05\x6f\x28\x76\x97\xd7\x9e\x4b\x85\xd8\x8f\x50\x9b\xa8\x0c\x53\x16\x7d\xc4\x0e\x6b\xe3\x1d\xce\xc8\x2b\xf2\x1f\xe4\x13\xf9\x0f\xb4\x82\xfd\xa1\xfb\x50\x71\x6c\x4c\x31\xc2\xf8\xe7\x42\xe9\xcb\xeb\x48\x0b\xfd\x17\x73\x5f\x99\x1e\xcd\x7a\x68\x41\x26\xcc\x99\x23\xe0\x93\x06\x69\xd4\x40\xb7\x86\xa1\x33\x17\x64\x51\x33\x04\x7e\x2e\xbb\x3b\x34\xb8\xe0\x72\xda\x8e\xfe\x7f\xa1\xfd\x8d\x03\x7f\x2b\x94\xbe\x72\xdc\xba\x09\xa1\xd3\xa4\x23\xc7\x8b\xb8\xc5\xee\x43\x46\xfd\x60\xf6\x5e\x5d\x63\x83\xa4\x02\x13\x20\x6c\x0e\xe7\x9c\x05\x30\x87\xfe\x9c\xd8\xb0\x38\xd1\x78\x5b\xf7\xb1\xad\xb5\x62\xd3\x47\x8b\x8c\x53\x52\x1a\x65\x69\x0a\x91\x8e\x51\xbf\x09\xa0\xc2\xcc\x46\xda\x10\x06\x1e\x51\x8d\xc6\x56\x5f\xab\xbc\xc3\x78\xe0\x0c\xc7\x4a\x28\xef\x2a\xc3\xda\x26\x61\x0a\x52\xda\x3c\xe1\xc9\xd2\xa7\x1b\x05\xef\xb6\x20\x2e\x57\x48\xa1\x45\x22\x3a\xc3\xa6\xc4\xdc\x2a\xd7\x8e\x16\x9c\x7b\xf4\xd5\x56\xde\xf1\x3f\xbf\xbb\x3e\x23\x77\x6f\xaf\xcf\x88\x90\xe4\xf6\x6d\x58\xf0\x53\xd3\x04\x73\x74\xf7\xf6\xfa\xe8\xa0\x2b\xd0\xc8\x61\xba\x7b\x7b\xdd\xa1\x93\xf5\xf0\xd9\x9c\x16\xa3\x7b\x58\x76\x94\xee\x62\x48\x98\xa3\x6a\x63\x45\x79\x21\x3b\xcd\x39\x2d\xf6\xee\x4d\x02\x4d\x59\xaf\x91\x5c\x7c\xd6\x61\x45\x69\x3c\x48\x97\x5c\x2c\x20\xb5\x5a\xb3\x1f\x05\x78\x5a\x08\x66\x74\xa4\x01\xe7\xe5\xb1\x36\xe0\xbc\xec\xdf\x06\x9c\x97\x4d\x6d\xc0\x79\xd9\xa3\x0d\x38\x2f\xb6\x0d\x38\x2f\x6d\x42\xfa\x98\x63\x34\xe0\xbc\x3c\xd9\x06\x9c\x97\xad\x6d\xc0\x79\xd9\xab\x0d\x38\x2f\xeb\x6d\xc0\x79\x79\xa4\x0d\x38\x2f\x55\x1b\x70\x5e\x06\x9c\x97\xcf\x97\x6b\x0f\x38\x2f\xab\x6d\xc0\x79\x19\x70\x5e\x06\x9c\x97\x66\x1b\x70\x5e\xb6\xb4\x01\xe7\x65\xc0\x79\x19\x70\x5e\x1e\x6f\x03\xce\x4b\xe7\x36\xe0\xbc\xec\xd7\x86\xcc\xc3\x3d\xdb\x80\xf3\x32\xe0\xbc\xac\xb6\x01\xe7\xe5\xc9\xd6\x0f\xf3\xf8\x80\xf3\x32\xe0\xbc\x3c\xda\x06\x9c\x97\x01\xe7\xe5\xd1\x36\xe0\xbc\x74\x68\xbd\x33\xba\x0e\x38\x2f\x03\xce\xcb\x63\x63\x0c\xda\xd6\x7e\x6d\xc0\x79\x19\x70\x5e\xd6\xda\x80\xf3\xb2\xde\x06\x9c\x97\x01\xe7\x65\xc0\x79\x19\x70\x5e\xaa\x36\xe0\xbc\x7c\xe9\x76\x27\x09\x8a\xfd\x13\xae\x45\xc6\x92\x65\x70\xb6\xcf\x0d\x28\x51\xca\xc4\xdc\xd8\xd8\x2d\x29\xb0\xdf\xca\xa2\x10\x24\x64\xf7\x0c\x42\xe1\xa6\x31\x71\x4d\x28\x05\xe9\xe6\xe0\x39\xa6\xa0\x17\x70\x0a\xfe\x05\xaf\xba\x47\x10\x8c\x7c\xf9\x6c\x3b\x7d\xdd\x8c\xa5\xc1\x5a\x7b\xf3\x45\xfa\x90\xce\xd9\x84\x3d\xaa\x76\x91\x16\x15\xb3\x65\x5b\x37\x17\x2d\x8a\x8c\x85\x24\xc6\x12\x72\x5b\xa2\x74\x01\xce\x05\xae\xde\x90\xa4\x28\xcf\x48\x0e\xb9\x90\x01\x89\x11\x11\x34\xb8\xd6\x56\xe9\xc3\x3a\xdd\x58\x82\xfc\xe4\x6b\x81\xf3\xbf\xb4\xfa\x42\x8d\x52\x55\xad\x15\xf3\xec\x30\x28\xd6\xec\x72\xba\x1a\x8c\xca\x74\xcb\x0a\x74\x25\xf4\x8d\x3b\xdc\x07\x5b\xaf\xc8\x11\x0b\x7e\x0a\x0f\x86\x5a\xf5\x56\xe4\x45\xa9\xa1\x75\xb1\xd9\x29\xb6\x4a\x07\x53\xa1\x0c\xfd\x30\xd9\xa0\x89\xe0\x53\x36\x73\xda\xf7\x79\x4e\x39\x9d\xc1\xa8\x9a\xed\x51\x0d\xf5\x70\xde\xf9\xa2\x3e\x58\x2a\x68\x92\x51\xd6\x3d\x70\x30\x16\x9b\x78\x8b\x54\x20\x0c\x58\x1d\x50\x8f\xb9\x69\xd5\x34\x9f\x55\x61\xe3\xcc\xf2\x8d\xb1\xff\xca\xfe\xf8\x2c\x40\x7b\xa4\x1a\x6d\x15\xa8\x18\x6d\xd8\xa9\x61\x0a\xa3\x55\x13\x53\x28\xc0\x68\x04\xd6\x80\xda\x5d\xee\x5f\x72\x9a\xb3\xc4\x9f\xb0\x8b\x2c\x13\x89\xb5\xc9\xb4\xb5\xca\x18\x24\x1b\x65\x37\xcf\x4b\x4d\x27\x19\x8c\xc9\xa5\x85\xa8\x10\x3c\x5b\x9a\xf3\xa7\x40\xfb\x10\x05\xb7\xf9\xc3\x34\xc9\x90\xf8\xd7\xc0\xd8\xd7\x8d\x42\x39\x6e\x2a\x8b\xa9\x01\xdc\xb0\x32\xc1\x81\x00\xd7\x72\x69\xf6\xdf\xb5\x48\x6f\xcd\x16\x6c\x3d\x1d\x0c\xb5\x11\x18\xf2\x1a\x23\xdc\x35\x30\xd4\x35\x4e\x80\x6a\x78\x70\x6a\xdc\xc0\xd4\xda\x85\x60\x91\x82\x9a\x19\x3f\xad\x6d\x51\x88\x74\xbc\x81\x35\x11\x31\x0d\xa4\xc0\x8c\x78\x2d\x52\x23\x34\x49\xb0\xfc\xa9\x3a\xa3\xd6\x80\x78\x69\x88\xbb\x47\x8b\x1f\xd5\xb5\x34\x45\x17\x94\x65\xe6\x00\x07\x12\xb0\x8e\xba\x18\xe6\x95\x89\xe4\xab\x70\xc1\xf9\x7d\xda\x2c\x2e\xad\xab\x95\x19\x96\xcc\x85\x02\x8e\xfc\x92\x56\x19\x3c\x55\x7e\x81\x63\x31\xa9\xbd\x8b\x43\xa3\x88\x2f\xa7\x04\xf2\x42\x2f\xcf\x08\x2c\x40\x2e\xf5\x1c\xa3\x0d\x2a\xdc\x50\x64\x6b\x4c\x91\x9c\xa6\x8d\xdd\x71\x46\x84\x37\x40\x07\x0e\x8f\xf7\x83\xd3\xc9\xca\x4c\x5b\x0d\x8d\xa9\x2a\x8d\xe2\xd0\xbb\x26\x36\x9c\x0d\x09\x65\x9a\x31\xe1\x68\x08\x42\xa9\xe6\xac\x1b\x70\x2d\x89\x78\x16\xbe\x47\x2a\x1a\xa9\x23\x66\x4b\xe4\xf4\x13\x9a\x27\x69\x2e\x4a\xae\x2d\x4e\x8d\xd5\x18\x2a\x29\xcf\x26\xd8\xbc\x60\xbc\xdc\xb3\xca\xf6\x24\xce\xd5\x4e\x53\x0f\x4d\x71\x1d\x23\x4f\x99\x6a\x0d\x92\xbf\x21\xff\xfb\xe4\x6f\xbf\xf9\x79\x74\xfa\xa7\x93\x93\x1f\x5f\x8d\xfe\xfd\xa7\xdf\x9c\xfc\x6d\x8c\xff\xf8\xd7\xd3\x3f\x9d\xfe\xec\xff\xf8\xcd\xe9\xe9\xc9\xc9\x8f\xdf\x7d\xf8\xe6\xee\xfa\xfd\x4f\xec\xf4\xe7\x1f\x79\x99\xdf\xdb\xbf\x7e\x3e\xf9\x11\xde\xff\xb4\x63\x27\xa7\xa7\x7f\xfa\xaa\xbb\xf7\x31\xd4\xd5\x1e\xcf\xd1\x1e\xc9\xcd\xfe\x2c\x4e\x76\xc7\x63\x0f\x7e\xf8\xdd\x15\xb8\x76\xfc\x9d\x77\xe2\xb1\xe3\x2f\x83\x6d\x32\x97\xd3\x7a\x7c\xa6\x88\xc8\x99\xd6\x90\xba\xbb\xb7\x81\x7d\xb3\x62\x0f\x72\x0c\x0b\x61\xab\x28\xde\xde\x0d\x0c\x96\xda\x8c\xd4\x99\xac\xea\x7e\x45\x0b\x18\x27\x2c\x2f\x32\xc8\x81\x6b\x64\x3c\x23\xaf\xdb\xa2\x39\x71\x5c\xbf\x41\x62\x0d\x1e\xf0\x29\x01\x48\x1d\x91\x03\x6f\x6c\xb4\x81\x37\x0e\xbc\xf1\xa9\x16\x6c\x13\x8f\xc1\x18\x6f\x9a\x44\x38\x5b\x96\xf2\x92\x32\x5a\xc8\x2b\x88\x04\x31\xc5\x40\x89\x05\x4b\x4b\x9a\x35\x91\x64\x3d\xb8\x68\x37\x0e\x80\xa6\x9d\x76\x68\x08\xba\x69\x61\x01\x59\x45\x84\x35\xd3\x8f\xc9\x5f\x6c\x38\x4f\x53\xd1\x6c\x1b\xd4\xbb\x39\xe4\x36\xbd\x6e\x1b\x11\xc2\xa9\xba\xc7\x6a\x85\xa4\x2a\xda\xa8\x4e\xc2\x30\xbb\xad\xdb\x54\x5c\x54\x5c\x23\x5b\x9e\x11\x05\xda\xe6\xd8\xcc\x61\x65\x99\xa8\x22\x47\x17\xd9\x03\x5d\xaa\xa3\xca\x27\xc9\x38\xd3\x2b\xc5\x07\x3a\xd1\x80\xd8\xb0\xa6\xc3\xa9\x30\x32\x2f\x56\x55\x98\x4e\x21\xe9\xa8\xcd\x5a\x0c\x8e\x75\xda\x5c\x3c\xba\x66\xbc\x34\x6f\xeb\x67\x15\x52\x22\x78\xa7\x81\xe0\x13\xd3\xa4\xe4\x9a\x65\x46\x58\x27\x12\x66\x65\x46\x9b\x86\x40\xf7\x66\x3e\x4c\x2e\x1d\x93\x8f\x3c\x81\xe6\xc3\xdd\x2c\xd5\x2b\x03\x18\xe1\x21\x03\x0d\xe9\x19\x76\xdd\x7e\x75\x65\x03\xcd\x5a\x27\xbf\x5a\xca\x4e\xc3\xfb\xb9\xac\x02\x89\xc6\xf6\x40\x55\x51\x0e\x24\x65\xd3\xa9\x19\x19\x95\x6d\x2e\x64\x4e\xd7\xa9\xa2\x3c\xed\x34\xba\x39\xb9\x98\x5e\xd2\x44\xf9\xc5\xca\x2e\x47\x8a\xa5\x90\x50\x79\xd4\xac\x09\x72\x91\xe9\xb9\x28\x67\xf3\x7a\x57\x84\x4d\x39\x51\x1a\xc3\xab\xcc\x64\x2a\x6f\xb9\x58\xd9\x6c\xca\xc8\x2c\x3c\x01\x2b\x5a\x09\xb0\x0c\xe3\x81\x76\x1c\x7b\x2d\x04\xc0\xc6\x74\xdb\x35\xf7\x39\x57\x18\xc3\x07\x69\x23\x41\x8e\xc3\x27\x1d\xe1\x85\xc7\xe4\xd2\x02\x5e\x9c\xb5\x7b\x6d\x4d\x89\x9d\x8c\x46\x0c\x9b\x8f\xc6\xec\x18\xc0\xb7\x32\x00\xab\x52\xcc\x10\x97\xd8\x76\x4e\xf9\xd2\x67\x74\x60\x8c\x99\xcd\x44\xab\x92\x4c\xb2\x6e\x36\xf4\xea\x2c\xbd\x78\x99\x9d\xd6\x09\xbd\x29\xb3\xc3\x79\x2f\x6f\x9a\x05\x3e\x32\x57\x80\x47\x1a\x8a\x7c\x56\xcf\x1c\x92\x7b\x7b\xf2\x52\xb0\xec\x0d\x1c\xce\x6d\xe8\xe9\x9a\x8b\x32\x4b\x2d\xaa\x6e\xcd\x9d\x91\xd3\xda\x10\x4a\x4b\x06\x95\x40\xc0\x68\x08\x08\x3d\xc2\xba\xb1\x6f\x21\x53\xb3\xbd\x2d\x4b\xc6\x8e\xad\x55\xdb\xa7\xbb\x38\x92\x90\xcb\x27\x82\xdb\x7b\xf2\xcc\xdd\xdc\x39\x65\xbc\xab\x68\x57\xbf\x03\x9b\x71\x21\xd1\x68\x3d\x25\x5c\xb4\x69\x68\x1f\xf9\x15\x2a\x3a\xcb\x1c\x55\x1c\xd2\x46\x69\xa7\x5e\x4e\x3b\xfe\xc3\x1c\x8c\xb6\xd6\xa6\xa5\x2b\xdb\x6e\xac\xa8\x34\x1c\x71\x6c\x88\x51\x5a\x52\x84\x49\x76\xf9\x14\xb2\xeb\xc6\x37\x42\xf7\x85\x26\xb9\x50\x9a\xfc\xf6\x55\x63\x8e\x83\xec\x68\x23\x82\x27\x11\x1d\x7e\x95\x98\x82\x48\x17\x14\x73\xa1\xba\xf6\x7a\x99\x02\xd7\x2c\xa1\x59\x83\x50\x73\x49\x4c\x85\x9c\xb0\x34\x05\x0c\x6d\xc7\x82\x10\xa8\x72\x76\xd4\x74\x51\x74\xad\x07\x68\xc4\x80\xd4\x1b\xeb\xc3\x9f\x6f\xef\xd0\x87\xd9\x96\xf7\x6a\x9d\xbf\x9b\x68\xb4\x30\xaf\xa0\x0d\x53\x68\xee\x67\x2b\xce\xb6\x46\xfa\x32\x42\xfa\xcc\xfb\x98\x9d\xd2\x30\xf4\xcc\xc5\xc3\x3a\x1f\x61\x46\x64\xe3\x69\xe7\x84\xc7\x1e\xc4\xf1\xd9\x8d\x7f\xa0\xd8\x3b\x3b\x78\x1f\xa2\xb9\x6e\xab\xdc\x48\xb3\xb1\xa9\xcb\x8c\xa4\xf7\xc0\x0d\x2b\x5b\x5f\xf8\x69\x85\xa1\xc5\x24\x9a\xbb\x42\xa0\xa1\xf0\x34\x53\xcd\x94\x39\xcd\xf6\x62\x44\x77\x53\x21\x5c\x05\xb7\x2a\xee\xf9\xc8\x6d\xce\x23\x73\x59\x7b\x66\x1f\x86\x69\x1d\xc1\xf1\x19\xc1\x3a\x62\x66\xf5\xad\x48\x43\x6c\x5c\x2b\xe1\x0e\x95\xd0\x63\x53\x66\xf0\xbe\x4d\xad\xcc\x83\x02\x8f\x59\xd7\xf6\xaa\x7e\x19\x71\x0e\xe6\x4c\x52\x2d\xba\xdb\xbb\xe2\xc4\x3a\x78\x32\xfa\xe5\xc2\x6e\x6d\x0a\x09\x99\xbd\x8e\xe7\xac\x20\x13\xd0\x0f\x00\x7c\xb3\x9c\x96\xc2\x89\x3a\xf5\x86\x9a\x40\x22\xea\xd0\x50\x1b\x62\x3b\x26\xd7\xad\x63\x8e\x97\x7b\x38\xb2\xdb\x25\x7f\xb3\xca\xa2\x50\xf1\xf2\x6c\xc6\xb3\xb0\x0d\xef\x8a\x01\x52\x61\xe1\x5c\xd5\xcb\x02\x6a\x1b\x6b\xef\x1c\xfc\x7a\x57\x42\x87\xbd\x61\xf0\xab\x19\xf9\xce\x19\x0c\x9e\xe5\x2d\x23\x45\x92\xb8\x38\xee\x1e\x9d\xc2\xf6\x55\xeb\xe6\xce\x6d\xfd\x8a\x39\xb7\x42\xf0\x1a\xec\x3b\x74\xe7\x54\x3a\xc5\xef\x7f\x4f\xc0\x3a\xaa\x22\xe8\x15\xbe\xc5\x81\xbc\x8c\x02\x7a\x19\x0f\xe7\x9a\x44\xc3\xba\x26\x8f\x84\x85\x74\x43\x77\x8d\x1c\x69\xae\x20\x29\x25\xd3\x4b\xa3\x0b\xc0\xa7\x4e\x06\xeb\x18\x67\xe5\xb6\x4d\x46\xcb\xa9\xe2\x49\x24\xa2\xb0\x15\x3c\x56\xca\x63\xd7\x16\x97\x92\xa3\xad\xb8\xdb\x8e\xbe\x9c\x9a\x15\xb1\xe6\x11\x74\x94\x60\xd0\xf2\x2a\x61\xde\xe9\x62\x65\xac\xff\x2e\xd9\x82\x66\x86\x0d\xd7\xbf\xb8\xc6\x0c\xcd\xe6\x8f\x9e\x33\xb2\x5d\x53\x75\x5f\xbb\x77\x61\x54\x88\xb4\xf6\xe6\x9e\xfb\xa9\xc3\x8f\xe0\x93\xfe\x0c\xa3\xda\x91\x4b\x5d\x4b\xb6\x60\x19\xcc\xe0\xbd\x4a\xa8\x15\x61\x0e\x1d\x19\x71\xb1\x85\x2e\xdc\x99\x52\x64\xaa\xb2\x3d\x51\x9f\x9f\x8e\x46\x98\x19\x65\x1c\x6b\x3b\x07\x48\xab\x6e\x50\x65\x13\xe4\x99\x56\xa4\xa0\xd2\xec\x42\x9f\x08\x6f\xfd\x19\x13\x21\x32\x57\x0c\x28\x5b\xd6\x74\xb1\xee\x21\xac\x68\x40\x17\x7f\xe7\xf0\xf0\x77\x43\x85\x22\xd3\x8c\xce\x6a\x7f\x8a\xb9\xd8\x56\xe5\xc9\xe0\xdc\xfc\xad\x13\x8d\x95\x6e\x4a\x73\x8f\x3d\xd0\xa5\xaa\x51\x0b\x9a\x66\xf7\xee\x37\xca\xeb\x53\xe4\x27\x54\x91\x6a\xec\x6e\xfe\x1e\xd3\x7e\x7b\x8a\xc6\xfd\xb7\x17\xd7\x7f\xbf\xfd\xeb\xed\xdf\x2f\xde\x7d\xb8\xbc\xea\xdc\xd9\x95\xd0\x60\x43\x5b\x1a\x4e\xdd\xa4\x4a\xa7\x31\xab\x50\x65\x64\x8d\x85\x1a\x63\xdc\x2a\x42\xe6\xf2\x54\x3c\x04\x06\xf7\x9b\x3d\x05\xb4\x9b\xf5\x84\x16\xc5\x85\xcc\x85\xbc\x96\x62\xca\xb2\xce\x12\x7f\xac\x13\xbc\x42\x8e\x0f\xf3\xbd\x70\x1f\xd7\xd7\x8d\x45\x71\x5c\xcf\x26\x69\x5c\x19\x0c\xb1\x02\x4d\x37\xdd\xc3\x8a\x56\xdd\xf9\xc7\x6a\x95\xc4\xee\x87\xe8\xa0\x7b\xe6\xe0\x18\x59\x86\x8c\x8e\x3f\x8f\x61\x1a\xc8\x44\x42\x33\xac\x12\x1d\xb6\xf1\x49\x64\xc5\x64\x95\xae\x06\xa6\x07\xf5\xdb\x99\x64\x82\xa6\xd6\x87\x65\x99\x7f\x0a\xbe\x76\x99\x17\xbb\x30\x6b\x21\x88\x90\x3b\x8b\xa7\x80\xe3\x79\x10\x92\x42\x42\x25\xd5\xac\x0c\x2f\x6c\xc9\xb6\xa0\x21\x3f\xb4\x73\x40\xdc\x5b\xb6\xe0\xb2\x42\xcf\x5c\x35\x8c\x3b\x60\x6c\x8a\xf6\x14\xb4\x73\x1a\x45\x7d\x59\x58\x03\xe7\xf7\x7e\x19\x02\xca\xcb\x46\x52\x9e\xb1\x93\x9e\xec\x4e\x3b\x3f\xd5\x8e\xb4\xc9\xe0\xf7\xcc\xcc\xe0\xb4\x66\xd2\x7e\xdb\x78\x19\xc4\x66\x84\x07\xee\xc7\x1f\xb0\x90\xb9\xe7\xff\x11\x8c\x53\xd5\x12\x93\x51\xe3\x68\x15\x12\x46\xeb\xc7\x2b\x54\xdf\xbf\x29\xb9\x66\x39\x78\x84\xd1\xd1\x8a\x4c\x24\xed\xd7\xc7\xaa\xaa\xe7\x13\x65\xa3\x13\xf2\x67\x8e\xe7\x95\x43\x4a\x46\x84\x8b\x7a\x89\x80\x4f\x85\x4c\xd0\xf0\x70\xd0\x0d\x9e\xd0\x82\x4e\x58\xc6\x42\x98\x79\xac\x0d\x8e\xe5\x31\x1b\xf4\x60\x0c\x50\x9a\x9e\xa7\x52\x14\xf6\x26\xf6\xd0\x5f\xe1\x59\x99\x6d\x88\x99\x66\x25\x27\x67\x89\x6a\x11\x32\x93\x94\xeb\x3a\x7e\x6f\x6d\xe3\xfc\x12\x65\x90\x18\x42\x00\x4d\xe3\x15\x9a\xbd\x48\x0d\xcf\x68\x2e\x5b\xf0\xb9\xea\x5b\xd1\x9a\xb7\xfe\xe5\x1a\x18\x33\xe4\xfa\xe3\xed\xe5\xff\xbb\x72\x6e\xba\x8b\x76\xb6\xf5\xbb\x64\x85\xe1\x07\xd1\xb6\xcd\x8d\xab\xf3\x3d\x6c\x9c\x2f\x7b\xe3\x54\x06\xa2\x83\xe3\x6d\xdf\x94\x4d\x8f\x33\xe3\x0d\xd2\x48\x1e\x24\xeb\x5c\x57\xd0\x94\xed\x5e\x9b\x01\xba\x12\x88\x79\x84\x6b\x86\xe1\xd2\x0d\x6b\xad\x16\xb6\x94\xb5\x13\xbb\xc2\x4a\x31\x34\x6f\xd7\x29\xcd\xd4\xe7\x7a\x45\x86\x98\x76\x0a\x29\x92\x0f\xa2\xe4\x71\x00\xbc\x03\x76\x5c\x45\x08\x49\x81\x0b\xed\xac\x29\xa8\x4b\x88\x29\x7e\x4b\x6c\xce\x5a\xa3\x36\x47\x4b\xce\x09\x10\xb3\xee\x1a\xa2\x55\x15\xbf\xe2\xe5\x70\xab\xbf\x94\x6a\x2d\x30\xd2\xc9\x55\x75\x0a\xdb\x34\x20\x92\x41\x02\x4d\x6d\x20\x0d\xd5\x73\x0b\x1a\x9f\x53\x75\x0f\xa9\xfd\x20\x10\x30\xb3\x02\xc7\xc4\x50\x38\x3f\xd3\x77\x66\x72\x3d\x66\x09\x1a\x84\x6d\x90\x2d\x22\x68\x86\xa8\x62\x07\x3d\x0d\x01\x8c\xdd\x2c\xc2\x47\x9e\x2d\x6f\x84\xd0\x5f\x57\x35\xf1\x0f\x7d\x32\xfe\x52\x85\xc2\x36\x8d\x98\x68\x97\xa6\x48\xf2\x08\x37\x0e\xf2\xc5\x46\x25\xff\x50\xb6\x68\x16\xe4\x97\xca\x15\x65\xc9\x2f\xd4\x37\x52\x94\x9d\x65\xb8\x98\xfa\xe6\x37\x97\xef\xf0\xe2\x2b\x1d\xa6\x32\xd7\x72\x59\x08\xc6\xb5\xb7\x78\x45\x74\xda\xfc\xd9\xa1\x57\x37\x39\x5b\x30\x50\x2d\x21\x1f\xe8\x92\xd0\x4c\x89\xca\xa4\xc6\x37\xb9\x5b\xbd\x2f\xd7\x7c\x3d\x11\x7a\xbe\xe6\xc4\xed\x9a\xba\x63\xda\xfa\x78\x67\x0d\x68\xe6\x3a\x20\x86\xf1\xb5\x61\x35\xa2\xba\x14\x12\x12\x48\x81\x27\x9f\xeb\x89\x38\x34\x52\x30\x9e\xaa\x2b\xc1\x0d\x7b\x3d\xf4\xb9\xba\xac\xec\x93\x6e\x35\x9a\xa7\x08\x4d\xd9\xce\x89\x48\x11\x55\x1b\x99\x6b\xa9\x42\x22\x4f\x2f\xa7\xe8\xf5\xb4\x9b\xee\xbb\x72\x02\x99\x59\x6c\x96\x65\x3e\xda\xde\x86\x26\xb0\x9c\xce\x80\x50\x5d\x1d\x42\x2d\x08\x70\x55\x4a\xb7\x6f\x3a\x66\x55\x99\x56\x25\x84\xb9\x57\xfb\xf3\xe5\x3b\xf2\x8a\x9c\x98\x77\xb3\x11\x83\x53\xca\x32\x04\xea\xf6\xb1\xba\x4d\x1d\x60\xea\x73\xca\x82\xa6\x00\xf9\x08\x11\xd2\x5e\x2d\x67\x84\x0b\xa2\xca\x64\xde\xc8\x38\xa8\x2c\xc2\xae\x6a\x53\x10\x10\xc9\xc0\x76\xe2\xdd\x87\x7f\x56\xd0\x39\x44\x36\xe6\x75\xf8\xe7\x17\xbc\x0e\x9b\x2a\xa2\x39\xfe\xed\x05\xb3\x67\x35\x07\x4d\x53\xaa\xa9\xbb\x26\xfd\x03\xc3\xae\x1d\x2e\xcb\x80\xcb\x52\xc1\xf7\x8c\x97\x9f\x6c\x5d\x94\x5e\xb8\x3d\x6e\xdf\x23\x45\x24\xf1\x0b\x2d\x1a\x7e\x3b\xef\xa1\x88\x90\xa2\x71\xd9\x3a\x46\x67\x5b\xb4\x6e\xbc\x25\xa8\xc5\xde\xc4\x2c\x4a\xca\x53\x91\xaf\x11\x39\x15\x92\x00\x4d\xe6\x9d\xa9\x69\x44\x8d\x0c\x07\xd3\xb5\x5f\xb6\x43\x08\xd3\x57\xa3\xd9\xf6\xbf\xc7\x64\x58\xa6\xaa\x9d\x6b\xb3\x63\x33\x3a\x81\xcc\xc1\xe2\x5a\xac\xf4\x88\x27\x2c\x92\x0d\x5c\x8a\x88\x21\x31\x37\xc2\x46\x72\xd1\x6a\x22\x4c\xf7\x9f\xc5\x3c\x44\x0d\xbe\xb8\x73\xd1\x25\xf5\x3c\xa0\x0d\xf4\x73\x98\x87\x32\x40\x40\x24\xab\xf3\x60\xa4\xcd\xf6\x3c\xa0\xfc\xd5\xf7\x79\x50\x90\x24\x22\x2f\x7a\x12\x29\x79\x67\xa3\xf0\x0d\x45\xbb\x46\x45\xb6\x1f\xa6\x41\xe1\xce\xae\xda\x15\xd5\xf6\x1e\xf4\x25\xaf\xfe\x7f\x8d\xeb\x1c\xb9\xdd\xea\x1d\xef\x46\x0f\x8e\xc8\xac\x46\x74\x1d\xfe\x12\x6f\xbc\x21\x0c\xb3\xd5\x5e\x3c\x0c\xb3\x81\x98\x4f\xd1\x3c\xdf\x0a\x89\xfc\x12\x82\x31\x8d\x12\x80\xf3\x0a\x1c\x51\x80\x0a\xaa\xe7\x67\x2e\x63\x75\x01\x9e\x3d\xdf\x5b\x8b\xd7\x31\x72\x1c\x4f\x90\x67\x37\x75\xcc\xaa\x45\xd2\x8f\x1a\xbb\xb9\x29\x5e\xd3\x3e\x73\xf5\xf1\xae\x89\xa3\x4f\xf9\xd2\x62\x44\x06\xa0\x9a\xd9\xd6\x3f\xb1\xe2\x39\x63\x3a\x57\x57\xf1\xb9\x43\x3a\x83\xfa\xdb\x1c\xd1\xf9\x72\xa7\x74\xb7\x28\xcf\xd5\x18\xcf\xa8\x24\xac\x06\x7c\xae\x8f\x11\x61\xe5\x82\x8f\x80\xbb\x3a\x7b\x64\x00\xf9\x8b\xa5\xc8\x6b\xd9\x89\x07\x2d\x54\x4d\x23\x08\xcd\xb2\x28\x31\x09\x9b\xac\x20\xfe\x14\x54\x50\xf2\xeb\xd6\x80\x76\x4d\xd3\x90\xd1\x9f\xb0\x60\x7c\xde\x96\x88\xcc\x68\x14\x9f\xb9\x1d\x62\x96\x2b\xfa\x56\x42\x6a\xe3\xa4\x6e\x0b\x48\xfa\x72\x5b\x7c\xf3\xe1\xf6\xa2\x4d\x19\xca\xc2\xae\x70\x06\xe0\xf7\x84\xa6\x39\x53\x0a\x1d\x3e\x30\x99\x0b\x71\x1f\x34\xe4\x89\x4f\xb5\x9d\x31\x3d\x2f\x27\xe3\x44\xe4\x8d\xac\xdb\x91\x62\x33\x75\xee\x38\xca\xc8\x4c\xdc\x29\x61\x3c\xab\x32\x95\xd1\x5a\x88\x58\x60\xdd\xa1\xe4\x9a\x2f\x4f\x92\xea\xed\x71\xeb\x61\x7e\x4a\x15\x9a\xbd\x3e\x3d\x58\xdd\x04\x37\xef\xc1\xa5\x8e\xf5\x5d\x15\x56\x6d\x70\x65\x67\x6d\x79\xf7\x66\xa5\x0e\xe7\xc5\xd9\x38\x8f\x56\x79\x3d\xf8\x24\x39\xa1\x3f\x01\x15\x14\x01\x1b\xf3\xcc\x7d\x5b\x93\xd4\xc4\xd2\x63\xd3\x16\x22\x54\x3b\xe7\x1e\xdd\xdb\xc7\xe6\x97\x3e\x2c\xf3\x38\x56\x71\x99\x8b\x2c\x33\x0b\x49\x1d\xf0\x5a\x23\xba\x13\x55\x93\x36\xa2\x9d\xc5\xdc\x35\xca\x42\xf3\x2d\xf0\x22\x09\x63\x0a\x16\xf7\xcc\x5c\x06\x0e\x33\xc3\x6c\x20\x1c\x9b\x92\x9c\x7d\x32\x14\x36\x47\x6c\x83\xc4\xa2\xe3\x7f\xf3\xd7\x01\x05\xac\x09\x06\x1f\x54\x98\xe9\x67\x66\x85\x9a\x83\xf8\xe4\x68\x6d\xae\x2d\xf3\xc5\x15\x68\xa3\xa8\xd9\x79\x6b\x7a\x1f\x8c\x62\x25\xcb\x08\x87\x21\xc4\x33\x4c\x9a\xde\xe1\xa8\x9c\x22\xf0\x3c\xa0\xa7\xd8\xd1\x64\x64\x10\x2f\xbc\xbd\x94\xe7\x98\x6c\x48\xdf\x79\x31\x0f\x32\xd9\xdd\x8b\xfc\x8c\xbe\x2a\xd2\x17\x7f\x55\x20\xd7\x6f\x62\xfd\x1e\x0c\x67\xa5\x89\x37\xcc\xd6\x83\x97\xae\x45\xba\x06\x43\x8c\x60\xc6\x8c\x66\xdd\x0b\xb9\x5e\x4e\x9b\xd0\x9d\x5c\x38\xf3\x88\xad\x20\x6e\xe3\xf4\x3f\x41\x52\x6a\x48\x1d\x1a\xb9\x33\x29\x5b\x24\xe3\x36\x35\x9d\x29\xf0\x49\xfa\x13\xc0\x00\x25\x75\x56\x97\x62\x73\xba\x4e\x85\xef\x7a\x46\xfe\x0b\xb9\xa4\xf2\x80\x5a\x19\x5b\x00\x07\xa5\xae\xab\x9f\x77\x9d\x0a\x8c\xa3\x4e\x28\xf7\xba\x95\x39\xd3\xce\xc2\xed\x50\xc7\x1d\x8e\xc7\x04\x48\x41\x25\xcd\xcd\x1d\xac\x88\x5b\x9e\x09\xcc\x98\x4d\x0b\x6c\x5c\x8a\x15\x6c\x79\x37\x50\x5d\x54\x6c\x98\x26\x39\x9b\xcd\xed\x69\x21\x94\x64\x82\xcf\x88\x8f\x1b\xcb\x04\x4d\x09\x32\x16\x21\xc9\x03\x95\xb9\x91\x05\x68\x32\xc7\x20\x34\xca\x49\x5a\x9a\xf3\x40\x10\x64\x7b\x39\x52\x9a\x6a\x70\x60\x78\x9d\x6d\x70\x7e\x9a\x0e\x50\x22\xf6\xb9\xcb\xdf\x1f\x18\x4f\xc7\x9c\xb4\x28\x56\x90\xf7\x9f\x20\xa9\x8e\xb5\x45\x9c\xce\x73\x04\x0c\x14\xfe\x38\x7b\xb4\xb8\x60\x61\xb0\x27\xaa\xb2\x7b\xc3\xbe\xc8\x26\x6f\xdd\x84\x33\xaf\x7d\xda\x3f\x8d\x3e\xda\x5e\x04\xe5\x9d\x58\x8d\xa2\x49\x88\x8e\x2d\xe4\xbd\x39\xb9\x16\x23\x48\xc8\xaa\x5a\x7f\x10\x59\x9e\x0e\x84\xcc\x16\x42\x93\x93\xe3\xf3\xe3\xd3\xb5\xbd\x70\xac\x9a\x69\x06\x36\x23\xba\x7e\x21\xc5\xf2\x22\x5b\xe2\x3b\x1c\xdb\x92\xdf\x81\x00\x86\x3e\x60\xb5\x2a\x7f\xa9\xe6\x90\x65\x67\x44\x19\xf1\x97\xfa\x1a\x22\xf6\x53\xf3\x90\x96\x65\x62\xcd\x64\x27\xc7\x3f\x1f\x9f\x11\xd0\xc9\x29\x79\x10\xfc\x58\x5b\x87\x07\xb9\x43\x1d\x32\x88\xa6\x8a\x88\xa5\x28\x09\x07\x70\x67\xa7\x2a\x56\x95\x50\xa3\xfe\x94\x56\x46\xb7\xa0\x1b\x90\x65\x61\xf2\xdc\xfb\x4f\x4c\x1b\x51\x44\x97\x68\xa6\x78\x65\x35\x05\x40\x1c\x7a\xaa\xf0\xa6\x3b\x9f\x03\xcd\xf4\x7c\x59\x69\x2f\xff\x04\x29\xb0\x3e\x29\x77\xdf\x84\xcb\x50\x3d\x48\x1b\xed\x6f\x02\xa7\x11\x30\x4a\x09\x77\x73\x09\x6a\x2e\xb2\x83\xa7\x71\x7e\x70\xe5\xde\x12\xc1\x95\xe1\x29\x46\xc5\x76\x34\xaa\x2a\x83\xce\xca\x2c\xae\xbe\x82\xc0\x53\x26\x21\x75\xc2\x92\x2b\x79\x31\xa7\x0b\x94\x14\x8c\x3c\x07\x69\x88\x6a\xd2\xd4\x89\x7e\x37\xae\x28\xac\xd2\xee\x5e\xf7\x24\x6c\xb3\x23\x76\xe4\x4c\x16\x71\x6e\xe9\x6f\x6e\xae\xdf\xb6\x6e\x69\xfc\xe0\x5b\x3c\xc6\x6f\xe7\x90\xdc\xdf\x84\x55\x73\xed\x49\x68\x41\x21\xe4\x21\x05\x03\x33\x7c\x34\xa9\xe0\x5a\x48\x4d\x78\x99\x4f\x40\x7a\x83\xc2\x0c\x57\x11\xe4\x82\x25\x30\x26\x57\xf6\x3b\xef\x9c\xf7\xd5\x87\x29\x9f\x01\x79\x6d\x0e\xc4\x1f\x7e\xff\xfb\xdf\xfd\x3e\x9c\x47\x87\x03\xa9\xc6\x01\x51\x75\x2f\xde\x17\xb1\xeb\xd6\x92\xb3\xc9\xd8\xec\x28\x45\xa5\x2e\xa3\x49\xb5\x36\xb3\xcd\x87\x2e\xcc\x2a\xa9\x00\xc8\x06\x77\x85\x61\x1d\xf6\xff\x26\x99\x98\x9c\xe7\x54\x69\x90\x46\xc7\x71\xd7\xfa\x08\xe1\x86\x19\x9f\x8d\xf3\xf4\x74\x1c\xe6\x05\xf7\x6a\xf5\x5a\x49\xb9\x16\xcc\xcc\x96\xf2\x70\x66\x52\x0e\x6e\x82\x27\x9e\xca\x37\xe4\xa8\x5b\x35\x31\xb3\x04\xdf\x40\x9c\x4c\xb4\x6f\xef\xee\xae\xbf\x01\xdd\x64\xd8\x1c\x3f\x24\xdf\xbc\xbf\xab\xca\x8d\x9b\xdd\x65\x93\x9a\x06\xae\x1d\xc2\xb5\xe7\x22\xac\xde\x7c\x6c\xbf\x8b\x65\x25\x58\x1b\x8d\x73\x48\xcc\x42\x9f\xb5\x2a\xdb\xfa\x38\xc4\xcb\xeb\x31\xf9\xab\x28\x51\xe4\xa2\x93\x6c\x49\x1e\xa8\x45\x34\xe8\x06\x29\x5d\xb7\x23\x43\xc6\x91\xe1\x5a\x66\x57\x7f\x0b\x34\xb5\xb5\x2a\xd1\xb4\x73\xf0\xb3\xda\xa0\x29\xda\xb2\xbd\x2d\x95\x16\x39\x99\xbb\x57\xb5\x73\x58\x17\xf4\xb7\xb2\x91\x3d\x82\xe8\xfb\x51\x44\x42\x61\xb5\x25\xf7\x9b\x2f\x42\x17\x5a\xe3\x42\x76\x9e\x1b\xd5\x80\x28\x49\x9a\x53\xe5\x04\x7d\x34\x61\x32\xc7\xa3\x3a\x9b\xc4\xea\x16\xa5\xaa\x08\x89\x54\x59\x84\x20\x93\x32\x87\x32\xb8\x93\x70\x27\x64\x9c\x1a\x25\xa6\xf1\x40\xf7\x9a\x6d\x71\x2b\x24\x10\xe7\x6a\x73\x9b\xcb\x06\xe0\x18\x42\x43\x51\x09\x89\x37\x26\x57\x05\x54\x29\x17\x9c\x25\xd6\x9d\x41\xca\x42\x70\x22\x4a\x5d\x94\x1a\x4d\x41\x09\x55\x30\x5a\x50\xc9\x0c\x43\x35\xe3\xd7\x3f\x2c\xb9\x39\xed\x5a\x08\xb4\x93\x54\x4e\x67\x4b\x71\x38\x99\x91\xa4\x19\xe2\x0b\x60\x44\x5e\xe1\xb5\xc5\x09\xdf\xd1\xa4\xd7\x36\x18\x62\x6b\x88\xcf\xe3\xa9\x75\x54\xcf\x31\xb2\x0f\x7d\x59\x3e\x30\x14\x19\xa7\x51\x1b\x7a\x90\x78\x13\x55\x8b\x0d\x64\x09\xe8\x6f\x17\x72\x45\x0f\x36\x14\xae\xcf\x61\xa4\x58\x93\xe7\x57\xab\xdd\x6b\xf9\x11\x28\x27\x97\x17\x57\x17\x7f\xbf\xfd\xe1\xed\xdf\xaf\x2e\x3e\xbc\x0f\xe9\x3a\xb8\x76\x7c\xcc\xea\xf1\xd1\xea\xc7\x3f\x43\x05\x79\xdf\x54\x32\x87\xfe\x84\x99\xdc\x22\x35\x4d\x50\x32\xa7\x03\x34\xea\x21\x87\xa1\xd4\x91\x15\xa3\xa9\x61\x3c\x07\xe5\x38\x2e\xaa\xe0\x1d\x64\x74\x79\x0b\x89\xe0\xe9\xc1\xa3\xb3\xaf\x2a\x66\xa3\x2c\x41\x55\x19\x68\x58\x41\xcc\xf2\x85\x60\x5d\xf1\x6a\x1f\x1f\xd0\x0c\x69\xb0\xef\xd7\xd9\x6b\x4d\xfa\xe7\xb9\x26\xbd\x31\x8f\x17\x20\x19\x46\x04\xf5\x61\xd7\x7c\x2b\x1e\x5c\x45\xf7\x13\xc6\xfd\xce\x39\x6d\x58\x69\x6a\xf7\x48\x38\x9a\x9a\x16\xe4\xf5\x2b\x3f\xc8\x97\xe7\xf7\x70\x91\x3e\xbd\xf6\x7c\x39\x1a\x9f\x76\x7d\xd5\x61\x4b\x6d\xf7\x57\x48\xfc\x10\x59\x61\xe3\xaf\xc7\x55\x9e\xda\x6b\xa4\xa7\x62\x45\x94\xa7\x3e\xe4\xec\xcb\xdb\x27\x3a\x29\x6e\x45\x72\x1f\xc9\xec\x7a\xf7\xf6\xda\xf6\xb6\x12\xcf\x62\x6f\x60\x23\x65\x0a\x42\xcd\x53\x28\x80\x0e\x46\xd7\xde\x18\x5d\x8f\x6d\x5a\x17\xcd\xde\xec\x6d\x40\x3d\x1e\xb4\xad\xba\x79\xc1\x47\xb6\x2b\xa0\x0c\xda\xd6\x96\x36\x68\x5b\x7b\x34\x9b\x44\x82\xc1\xa0\xdf\x48\x9a\xc0\x75\x9f\x84\x37\xcf\x40\x48\x5a\x4a\x57\x56\xae\x92\xe1\x2a\x76\xc1\x01\x52\xcb\x3f\xdc\xab\x00\x99\x99\x37\xb1\xe1\xd1\x68\x43\xac\x03\x8b\x4b\x19\x20\xe6\xdd\xcd\x5d\xd7\x4e\xc4\xf5\x4e\xe6\x4d\xd4\xd5\xba\x49\x51\x81\xa1\xfb\xaa\x21\xee\x38\x19\xe2\xb1\xd4\x3a\xf0\xee\xe6\x74\xda\x5c\x41\xa2\xd8\xcc\x4c\x97\xab\x0c\x6d\x63\x84\xab\xd2\x7b\x35\x21\x66\xd4\xa9\x90\x09\x9b\x64\x4b\x32\xa7\x99\x51\x96\x1e\x98\x9e\x13\x4a\xee\x59\x96\xb9\x6e\xba\x4f\xd4\x2d\xb8\x5c\x4d\x2b\xd1\x64\x82\xcf\x70\x32\xa8\xcb\xc9\xf8\x54\x40\x62\xc6\x4c\x32\xa0\xbc\x2c\x2c\x9d\x46\x3e\x5a\x8a\x32\x42\x5a\x86\x77\x7c\x57\xf2\x14\x67\x0e\x7e\xc4\x16\x6e\x7b\x74\xcf\xb7\x93\x6b\xc9\x47\x3d\x07\xf9\xc0\x14\xd8\x42\x72\x9d\x69\xb2\xb4\xb4\xcb\xc8\xd9\xcf\x2a\x08\x15\x97\x39\x68\xb6\x05\xa6\xb2\x76\x1e\xeb\x07\xec\xd7\xb3\x56\x2e\xf8\x88\xc3\xcc\x02\x35\x38\x86\x66\x23\x3a\xed\xf8\x36\x7e\xb0\xca\x36\x50\x5a\x14\x84\xe5\x39\xa4\x46\x3f\xce\x96\x64\xc1\x68\x67\x4a\x10\x14\xa2\xde\x51\xe4\x84\x0b\x22\x0a\x73\x75\x95\x9c\xe9\x25\x7a\xf4\xe6\xa5\x26\xa9\x78\xe0\x01\xf9\x56\x77\x2e\xcc\x81\x92\x09\x68\xea\x6c\xe0\xe6\x10\x54\x98\xe8\x08\x77\x6e\xce\x1e\x26\x09\xdc\x6d\xdc\x00\x15\x4c\xfa\x8c\xea\x00\x2e\xb1\x41\x9a\xb7\xeb\xf9\xf8\xb6\x63\xca\xf9\xeb\x02\x71\x98\xfb\x81\x6c\x68\x4e\xb4\x28\x75\x4f\xee\x91\x6d\xa6\x23\x0b\x71\xd1\x50\x12\x59\x0e\x8a\x88\x32\x52\xbd\x89\xd7\x6e\xb8\x98\x1a\xde\x60\x77\xda\xd8\x94\x4e\x59\xa7\xaa\xc3\x31\xb6\xd8\x16\xf0\x7e\x97\x87\xdb\xc0\xaf\x9c\x94\xd3\x29\x48\xbc\xe9\x90\xe0\xb5\xb0\xfb\xaa\x8e\x97\xbf\xc3\xba\x19\x6f\x5d\xc0\x17\xe8\x33\xac\x1d\xe0\xc0\x24\xb6\x0c\xe9\x40\x36\xb1\x4c\xaf\x04\x85\x58\xf0\x9c\xbc\xff\xf8\x75\xb7\x2d\x1a\xa3\xb2\x40\x58\xca\x2a\xbe\xe7\x47\xde\x2d\x26\x31\xee\x7e\xd8\x84\xfa\xe2\xb6\x45\x92\x09\xe5\xd2\xa3\x71\x5d\x92\x39\xe5\x1c\xbc\x31\x8a\x69\xb4\x64\x4f\x00\x38\x11\x05\xd8\xa0\xbc\x4e\xc4\x50\xa2\x18\x9f\x65\x40\xa8\xd6\x34\x99\x8f\x0d\x75\xdc\xef\x85\x3a\x0f\xd9\x7d\xa2\xb4\x04\x9a\xdb\x3d\x21\x21\xa7\xcc\x0e\x4f\x68\x22\x85\x52\x24\x2f\x33\xcd\x8a\xaa\xb3\x6e\x56\x44\x40\x44\x08\x65\xd3\x52\xfd\x5a\x61\x5a\x49\x9d\xf0\x7c\x56\x53\xe8\x5e\x5f\x34\x8b\x15\xa1\xe9\xec\xcc\x7c\x0b\x79\xa1\x97\x55\x62\x62\x37\x1d\x68\xca\xa4\xd2\x24\xc9\x18\x70\xed\xde\xcc\x42\x0e\x22\x0d\x67\x5e\x9c\xe6\x6e\x46\x94\x9b\x12\x9e\xa2\xf2\x5d\x68\x65\xf3\xef\x2a\x22\x7c\x57\x29\x53\xce\xd6\xa1\xba\x65\xff\x51\x5f\x99\xc6\x6e\x1c\x3f\x23\xb8\x75\xbc\x80\x63\x29\x72\x1f\x35\x48\x68\xd4\xd9\xae\x73\x27\xc3\xf8\x0a\x96\x8f\xf1\xe7\xfa\xac\x85\x39\x50\xeb\x16\x98\x0a\xb3\xc6\x75\x70\x43\x71\x58\x98\x73\x00\x09\x18\x51\x94\x46\x64\x32\x2f\xce\x63\x1a\xb2\xdc\x07\x50\x8a\xce\xe0\xba\x63\x38\x42\x0c\x86\x53\x1b\xda\x30\x8e\xa1\xde\x36\x73\xb0\x40\x57\x5a\x34\x3e\x69\x26\x79\x35\x95\xc7\xdc\xbe\x48\x27\x0a\xbc\xd2\xf4\x20\x99\xd6\x80\xbb\x14\x2b\x39\x61\x00\xda\x2a\x78\x67\x3b\xb9\xac\xd3\x78\x6e\xd2\x9b\xe3\x19\xf1\x83\xa7\x36\x4d\x6b\x02\x64\x22\x19\x4c\xc9\x94\x61\xde\x18\x66\x54\x9d\xd9\x2a\x04\x14\xe3\x76\xa9\x52\x20\xf1\xb5\x9d\x59\xc0\xbf\x7e\x37\x7a\xfe\xe2\xde\x5f\xcb\x92\x27\xb4\x51\xa2\x13\xb1\xc5\xd8\x94\xcc\x30\x8b\xcb\x29\xc1\xff\xf6\xea\xdf\xff\x40\x26\x4b\x23\xaf\xa1\x22\xa6\x85\xa6\x99\x27\x80\x64\xc0\x67\x66\x15\x91\xe5\x76\xe3\x1b\x2d\x7c\xaa\x6a\x71\x32\x96\x33\x6d\x27\xe8\xf5\x6f\xef\x27\x41\x47\x0f\xf9\xe3\x79\x0a\x8b\xf3\xc6\x16\x1a\x65\x62\xd6\xad\xd7\xb7\x31\xb2\x89\x83\xec\x6c\x1b\x4e\xb4\xc8\x58\xb2\x3c\xd4\x99\xf6\xc5\x4b\xc8\x5c\x3c\x58\x63\xce\xfa\x51\x6d\x40\xbd\x14\xa2\x28\x33\x9c\x38\xf2\x75\x85\xcf\x57\x2a\x58\x85\x3e\x0a\x35\x12\x36\xb8\x1d\x3a\x51\xdd\xb0\x2b\x77\x8e\x4b\x61\xf4\x64\x0a\x07\x3c\xe1\x7c\x6e\x55\x1d\x92\xce\xd6\xb8\xaf\x69\x96\x4d\x68\x72\x7f\x27\xbe\x17\x33\xf5\x91\xbf\x97\x52\xc8\xf6\x3b\x67\xd4\xdc\xe9\xf3\x92\xdf\x63\x15\xdd\x1a\x8c\x56\xcc\x5c\x4c\xa1\xc7\x0f\x68\xbc\x5d\x27\x62\xfc\x5b\x5a\x78\x50\x2f\x92\x78\x1b\x5c\x3d\x32\x7c\x62\xb5\xa1\x8d\x13\x30\x34\x77\x4d\xc0\x87\xd6\x7b\xa8\xe6\xd1\xfe\xed\xab\x7f\xfb\xa3\x65\x2e\x44\x48\xf2\xc7\x57\x98\x72\xac\xce\xec\x05\x80\x37\xb0\x11\xb5\x72\x9a\x65\x5d\xbd\x04\x4d\x16\xf0\x75\xe7\xe2\xd4\x3d\x38\xf2\xfa\x60\xa7\x7b\x67\x95\xf1\xee\xee\xaf\xa8\x2f\x32\xad\x20\x9b\x9e\x59\xb4\x97\xca\xac\x75\x8c\xd2\xd5\xb1\xbb\xf2\xba\x23\x05\x1d\x5e\x69\x5b\x88\xac\xcc\xe1\x1d\x2c\x58\xd2\xcd\x81\xd9\x5a\x95\x56\x6f\xde\x4c\x9f\x31\x85\x20\x40\x93\x4c\x24\xf7\x24\x75\x5f\x36\x42\xe5\x57\xab\x6a\x77\x9f\x85\xae\x49\x03\x01\xc9\x02\x5b\xdf\xbf\x95\x26\x90\xd3\xa2\xa8\x10\x4a\x24\x7d\x68\x4d\x06\xb2\x26\x44\x47\x0d\x74\x23\x06\x3b\xd3\x43\x5d\xe9\x23\xf7\x46\xe6\x9a\xea\xdc\x45\xe7\xdc\x82\x70\x4f\x7c\x4d\x7d\x77\x3f\x66\x6b\x43\xd4\x1d\xfa\xd3\x50\xe0\xbf\x2d\xde\xc2\x1a\x32\x56\x05\x39\x54\x6d\x0c\x2b\x41\x9a\xed\x83\xb7\x4c\x77\xf3\x65\x04\x67\x68\x58\x8e\x44\x6b\x5e\x78\xe5\x84\xce\xa9\x76\xfa\x91\xf7\xb2\x53\x52\x80\x54\x4c\x19\xd1\xe9\x07\x3c\x50\x6f\x33\xca\xf2\x86\xfb\xee\x50\x93\xb0\x1e\x51\x9f\xd3\x62\x74\x0f\xcb\x8e\x1b\x2e\xf0\xb8\x6c\x0b\xf0\xcf\x69\xd1\xf1\x1e\xc0\xd2\xb5\xe1\xd7\x40\xc7\xcb\xf9\x5a\xa4\x8e\x0e\xbc\x1e\x6c\x49\xe2\x67\x51\x63\x23\xca\x40\x87\xbe\x72\x7e\xa8\x17\xae\x7d\xe3\x98\x4f\xaa\x2b\xc7\x3e\xf5\x25\x5d\x34\xf8\x7e\x9f\xeb\x3d\x53\x11\x1f\x89\x9d\x06\x45\x3a\xe1\xed\xe4\x76\x46\xfb\x3a\x6a\x19\xb4\xec\xc9\x6c\xa8\xbe\xce\xd0\x34\xb6\x45\x01\x02\x08\x30\x47\xd1\x0d\x4a\x8e\xdf\x1c\x1f\xf4\x8e\xb3\x2b\x23\x45\x41\x67\xa8\x99\xf6\x61\x81\x56\x69\x6a\x62\xd0\xce\xc5\x83\xfd\xde\x46\x97\x14\xee\x29\x48\x6b\x20\xf3\xb9\x08\x5a\x1d\x1b\x39\xe8\x77\x84\xd3\xae\x2d\x56\xe1\x03\x5d\x12\x2a\x45\xc9\x83\xd2\xa0\xd1\x31\x52\x39\xce\x3e\xac\xbc\xec\x95\xe0\xe0\x9d\xf4\x21\xa3\xdc\xd5\x18\xe6\x4c\xd9\x78\x05\xc6\xc9\xeb\xf1\xeb\x57\xc1\xb4\xdf\x40\x52\x4a\xc5\x16\x70\xe3\x6a\x9c\x37\x9c\x2a\x97\xd3\x6b\xa1\x14\x9b\x64\x98\xb8\xa5\x05\x79\x6f\x0b\xc0\xaf\xbf\x68\x15\x38\x82\x6f\x2c\x64\x13\xad\x34\x80\xc2\x13\x7b\x82\x9b\x01\x9f\x66\x80\x80\xa8\x8f\x7e\x49\x92\xb8\xae\x2b\x92\xe4\x55\x25\x49\xda\x7b\xef\xa0\xef\xea\x0b\xdf\xf7\x81\x93\x7c\x70\xbe\x81\xba\xb2\x3d\xf3\x95\x93\xf1\xa3\x07\xc9\xb4\x3b\xdc\x0f\x4c\x01\x39\x41\xab\xc4\xca\x66\x0c\x02\x68\x6e\xda\xb0\x02\x2b\xe0\xc7\x00\x58\x96\xab\x47\xb7\x0f\xab\xb4\xce\x4f\xea\x08\xfc\x07\x67\xc0\xaa\x57\xd0\x71\xff\xfa\x5e\x9e\x53\x9e\x66\x41\x3c\xa3\x9a\x95\x6c\x19\x84\x85\x73\x39\x25\x4d\x96\xe8\xfc\x97\x8d\x6a\x12\x73\xaa\x08\x17\x24\x07\x8a\x01\x9a\xe6\x76\xf1\x5c\xb0\x85\xd5\x1c\x8f\x06\xbb\xd9\xed\x35\xd6\xbc\x10\x1c\xbb\x7e\xc7\x94\x63\xcf\x86\x8f\x38\x0d\xc4\x86\x75\xe4\x34\x0d\x49\xed\x6e\xcc\x69\xbd\x78\xe3\x3a\x68\x72\x95\x92\xfa\xe2\x58\xa1\xe5\x39\xe8\x38\x73\x25\xc8\xcd\xf0\x25\xc6\x09\x6e\x30\xcb\xd5\x41\x32\x41\xde\x6c\xdb\x56\x5f\xb7\xba\x16\xd7\xde\x75\x33\xc5\x15\xc1\x01\x34\x3c\xfd\xaa\x67\x0d\x5e\xe8\x63\x44\xad\x4b\xdd\xd5\x40\x71\x19\x8f\x61\x48\xde\xde\x29\x51\x99\x7b\x66\xc0\x41\x52\xe7\x57\xf0\x21\xa2\x0e\x7c\x85\x2a\xc1\x43\x0f\xc4\x13\x1b\xce\xf0\xfb\xa7\xc5\x14\xfb\xb3\x00\x42\x50\xce\x39\x11\x72\xe5\xb4\x3b\x8f\xc9\x26\x89\x25\xe6\x5b\xaf\x40\x73\xd9\xcd\xdf\xc0\xfc\x34\x8b\xf2\xdf\x25\x5b\xd0\x0c\x2c\x86\xbd\x67\x0d\x07\x15\x26\x54\x39\xe9\xab\xda\xe8\xf4\x43\x54\x3b\x36\x07\x3d\x6c\xd5\x20\x23\xc9\x13\x47\x47\xe4\xc4\x8e\x71\x6c\x41\x76\x0f\x2b\xe4\xba\xb5\x7a\xff\xa9\x08\xa8\xdc\x1a\x6f\xbd\xde\x7f\x2a\x28\xc6\x69\x14\xbd\x58\xb8\xff\x05\x73\xba\x00\xc4\x34\x66\x19\x95\x19\x06\xa5\xdf\xda\x29\x23\x93\x52\x13\xe0\x0b\x26\x05\xcf\xcd\xf1\x43\xf0\x19\xc3\x99\x24\x20\x18\x7c\x02\x8a\x7c\x75\xf2\xc3\xc5\x0d\x26\x2d\x9d\x3a\xb4\x7c\xf7\x7e\xa5\x42\x7c\x80\x95\x77\x68\x74\xd7\xc7\xfd\x46\xfc\xbb\x9b\xed\x82\xf2\x89\x9f\x0b\xf3\x6e\x79\xa9\x4b\x9a\x21\xf4\x73\x92\x95\xe6\x2e\x3c\xd8\xce\x8e\x6f\x03\x0f\xb1\xe4\xc5\x34\x81\x3b\xe0\xef\x77\xac\xd3\x71\x8d\x71\x50\xdf\x36\xf6\xeb\x1a\x0c\x79\xe7\x1a\x0f\x1b\x40\x28\xd7\x04\x9d\x63\x55\x01\x53\x36\xf3\x70\xdc\x5d\xdc\x2d\x3c\x03\x4b\x27\xd8\xe4\x6f\x5f\x93\x74\xcd\xc2\x88\x35\x5a\x0e\x6e\xc3\xef\x70\x18\xe2\x1d\x83\x0e\x86\xe8\x38\xbb\x3e\xe5\xea\x2d\x2e\xcd\x7e\x14\x87\x6d\xf4\xdb\x4a\x93\x35\x1b\xe1\xdd\xd5\x6d\xb3\xa0\x87\x75\xfe\x89\xbd\x57\xf2\xba\xee\xa2\xae\x7a\x83\x15\xf1\x2a\x07\x2a\xc8\x99\x15\xa7\x11\x79\xb6\x92\xaf\xdf\x5d\xdd\xee\x39\x96\xdf\xcd\x56\x18\x9e\x50\x65\x63\xa4\xdf\x5d\xdd\xda\xb8\xb5\xfd\x68\xef\xec\x48\xe9\xee\x83\x40\x00\x37\xc4\xd6\xea\xc0\xb1\xc3\xb9\xdc\x45\x15\x0f\x62\x16\x1f\x7d\xbe\x96\x1a\x72\x79\x4d\x68\x9a\x4a\x0c\x67\xee\x72\x96\x5b\x88\x76\xb4\x28\xaa\xa8\x54\x2c\x12\x43\x15\x34\x5f\xbd\xb1\x07\x50\xf0\xe9\xb8\x7e\xb6\xbd\x2b\x8b\x8c\xd9\xf0\xd3\xe6\x10\x75\x09\x9d\x5c\x2c\xba\xf0\xa7\x10\x0f\x63\x67\xff\x62\x90\x7c\x10\x15\x73\x4e\x74\x2d\x4f\x1b\x7b\x97\x4a\x50\x22\x5b\xd4\xc5\xf3\x83\x77\xa7\x63\x47\x18\x92\x58\xed\x4e\x5f\x81\xf6\x99\x76\x26\x70\x2d\x19\xac\xef\x4a\x72\x63\xde\xae\x44\x76\x56\x91\xc0\x16\x80\x29\x4b\xae\x42\x70\x87\x91\x71\x18\x9f\x77\x4b\xf4\xdc\x66\xdd\x50\x8d\x27\x93\x4a\x2f\x0a\xe0\x9b\x07\xbc\xe2\x41\x8e\xc8\x0a\x32\x7d\xfa\xee\xea\xd6\xde\xa4\x76\xba\x1c\x9e\xb7\xda\xb8\x77\x3a\x5f\x72\xe4\xf0\x65\x92\x42\xdc\x36\xd1\x72\x4a\xab\x92\xa6\x6c\xe3\x04\x1f\xab\x40\x88\xd4\x1b\x17\x9a\x10\x96\x08\x1c\x60\x39\x08\x42\x2a\x6d\xc7\x86\xf8\xb4\xd7\x47\x26\x0b\x47\x3b\xc8\xbb\x46\xbd\x2b\x14\x50\x99\xcc\xbb\x6c\xec\xd8\x97\x85\xa5\x84\xa4\xc2\x66\x88\x4d\x85\x44\x0f\xfc\x08\x45\x9d\x4c\x88\xfb\xb2\x78\x1e\xe9\xc6\x0d\x5c\x50\x3d\x7f\xb6\x4b\xa4\x35\xc6\x20\xdf\x74\xdf\xb3\x29\x57\x5d\xf2\x5c\x02\x95\x2f\xd0\x56\xe5\xc2\x91\x6b\xa4\xb6\xfd\x2f\xa3\x96\x19\xec\x6d\x56\x2a\x0d\xf2\x6b\x26\x95\x3e\xda\xb7\xa7\x1f\x68\xc6\x1c\x70\xb2\x0d\x61\x39\x6e\x76\xf7\x17\xa6\xe7\xae\x50\xef\xf1\x59\xfb\x2b\xf3\xb7\x23\xe3\x98\x08\x49\x8e\xaf\x04\x87\xbd\x83\x87\x56\x34\xd0\x4a\xf0\xa9\xae\xf4\xad\x32\x9b\x9b\x44\x05\x99\x05\x55\xc1\x2f\x3a\x9f\xb3\x3b\x57\x3b\xd9\xd0\xe3\x25\x05\x05\x9a\x50\x2c\x3a\x89\x7d\xcf\xeb\x82\xc5\xb6\x38\x9a\x2d\xf4\x2c\x9c\xce\xbb\x6c\x2c\xed\x9e\x83\x37\xaa\xab\x69\xb1\x7d\x01\xba\xa8\xb6\x7b\x9f\x33\x44\x0c\x01\x57\x4e\xe6\x7b\xc6\xef\xf7\x3c\xe4\x61\x27\xe4\xfd\xda\xe8\x0d\x88\x16\xef\x7b\x67\xdc\x82\x26\x18\x51\x8f\x4e\x44\xa9\x7d\x89\x9b\xa6\x17\x9e\xf1\xff\xb2\xfb\x02\x03\x58\x11\x00\x67\xdf\x55\xd9\x60\x00\x57\x67\x36\xcc\xc5\x5b\xb8\xd5\x92\x6b\x8a\xb5\xb6\xdf\x89\xe4\x1e\x24\xc9\x0c\xcd\xfb\x6e\xbe\x3a\x8f\xb5\x55\x55\x79\xef\xb4\x96\xae\x11\x19\x50\xcc\x21\x07\x49\xb3\xca\x00\xfa\xa2\x8b\xfe\xbd\xbb\xbd\x2b\x32\x9a\x49\x9c\xb6\x3c\xa2\x2b\x94\x2b\xd2\x31\x79\xbf\xe9\xa9\x9c\x2e\x7d\xe1\x77\xc6\xd1\x77\xf8\x89\x29\xbd\xff\x0d\x53\x88\xb4\x89\x91\x5a\x2a\x90\xa3\x0a\x33\x97\x50\x57\x7c\xd1\xe7\xd3\xa6\x30\x29\x67\x33\xc6\x67\x63\x2b\x1e\xa0\x18\x52\x17\x88\xad\x6d\x61\x0f\x73\xd8\x37\x42\x26\x91\x40\x31\x7e\x18\x95\x15\x1b\x32\xc1\x9a\xbd\xe7\x22\xb5\x9d\x4f\x96\xd6\x02\xeb\xf7\x64\x05\xa4\x44\x2e\x39\x11\xd2\xd5\xc5\xa0\x69\x4a\xf6\x0e\xd3\xd9\xb0\x22\xd8\x57\x3d\xbf\x96\xb8\xb2\xf6\xcf\x1f\xab\xfa\x57\x8d\x05\x52\xe5\xc4\xc8\xbe\xa5\xdc\xb7\xd6\x75\x57\x19\xa5\x93\x7c\x12\x2a\x8b\x5e\xf0\x7a\x7b\xbe\x6d\x22\x11\x50\xa2\x21\x2f\x84\xa4\x72\xb9\x9a\x6e\x62\x6e\x12\xb3\x7d\xcd\x02\xad\xcc\xed\xb5\x48\x8d\x90\xb0\x37\x19\x1b\xb6\xed\x82\x19\xb5\x73\xd3\xce\xdd\x78\x9e\xf0\x6a\xe3\x82\xf8\x35\x23\x1d\xa8\x50\xc9\x1c\xd2\x12\xd1\xa7\x66\x25\x95\x94\x6b\x30\xfc\xd3\x85\xb0\x2e\x5b\x81\x1c\x15\x52\x43\x05\xdb\xb6\xc4\xbc\x51\x2c\xee\x6c\x3e\xc1\xba\xd2\x5d\xc2\x4d\x9c\x70\x6c\x3a\x6a\xc0\x41\xdc\xcd\x81\x18\x49\x32\x03\x8d\x93\x0f\x0b\x96\x68\x3f\xc8\x14\x17\x61\xc3\xd6\x4f\x68\x69\xa1\x1e\xf6\x0f\x00\xba\x16\xae\x8e\x6a\x02\xe6\x4e\xd2\xaa\x9e\x5a\x97\xf5\xc8\x3a\xc5\x95\xdc\xf9\x93\xbd\x89\xe0\xfa\x60\x3e\x71\x24\xd1\x28\xd2\x99\x69\xe2\xdb\x3d\xc2\x98\xab\x35\xde\xb0\x12\x7b\x0e\x15\x60\x80\xe9\x9e\xf2\xd0\x29\x55\x21\xc4\xd6\x43\xe5\xec\x60\x49\x40\x17\x72\x56\xe6\x98\x34\xef\x74\x5b\xe0\x5a\x2e\x0b\xc1\xba\xfa\xed\xcd\x51\x43\x37\xe3\xb1\x22\x6f\x3f\xbc\x6b\x02\xbe\x35\xcb\xf4\x79\x38\xc0\x6e\x83\xfc\x10\x37\x40\x81\x5c\x4e\x09\xad\x84\xbe\x4e\x14\xd5\x17\xb5\xb3\xf9\x38\xd7\x6f\x45\xa0\xb7\xc0\x32\x5e\x18\x09\x16\xe5\xf4\x46\x5d\x9f\x64\x4e\xf9\xcc\xb0\xaa\x77\xa2\x34\x2f\xf6\xd5\x57\xf8\x12\x12\xd2\x32\xe9\x18\x5c\x8a\x80\xd1\x0e\x15\xe9\x2b\x1f\xe6\xe5\x0a\x88\x19\x5d\x14\x54\x42\x0b\x3f\x35\xcd\xd9\xb3\x52\xee\x1b\xc2\xc6\x30\x26\x47\x5f\x35\xbe\x3a\x42\x8a\x3b\x51\x53\x48\x61\x5e\xc5\x81\x30\xe1\xdb\x67\x4c\x23\xff\x38\x6a\x8e\x30\x26\xef\x0d\x5d\x18\x35\x5d\xad\x6d\x03\x57\x67\x52\xaf\xec\x19\x91\x30\xa3\x32\xcd\xa0\x23\x80\x88\x98\x56\x4a\x86\x05\xaa\x74\xbb\x0a\x19\x23\xe2\x0a\x70\xa1\xc7\x71\x5c\xdf\xbb\x22\xda\x69\xaa\xee\xd5\xb9\x55\x67\x46\x29\xd5\x74\x44\x0b\x6b\x0f\x62\x82\x9f\x5b\x53\xf7\xc8\x15\x29\x1f\x51\x77\x7a\x47\xd5\xce\x3e\xff\xb5\x83\x5f\x1d\xd1\xea\x29\xc6\x47\x74\x84\x65\xbb\x3b\xdb\x6f\x0e\x90\x76\x17\x3d\x70\x26\xa8\x1c\x53\x40\xd9\xfd\x18\x6c\xfa\x7d\xc5\x95\xed\x52\x8c\xc9\x95\xd0\xbe\xba\x7e\x5a\x27\x1a\x06\x14\x67\x6f\x32\xee\xf7\x57\x77\x37\x7f\xbd\xfe\x78\x79\x75\x37\xf0\xef\x81\x7f\x63\x1b\xf8\xf7\xc0\xbf\x3b\x0c\xdc\x17\xfe\x0d\x7c\x71\x28\xde\x5d\xd9\xbb\x36\x19\x18\x57\xaa\xbd\x06\x26\x8a\x7f\x41\x89\xf6\xef\xf9\xe2\x07\x6a\x54\xc7\x42\x82\x42\x05\xc5\x68\xac\x9b\x82\x94\xdd\x03\x68\x09\xac\x63\x3a\x3f\xdb\x4c\xfb\x03\xe6\xc9\x47\xcc\x13\x0d\x8a\x9d\xbf\x6a\x14\x00\xd9\xb4\xe4\x21\x71\xdf\x1f\xe8\xd2\xd6\x47\xb2\x87\x92\xf2\x25\x29\x24\xe3\x1a\xb7\xd2\xc5\xed\xdb\xcb\x4b\x92\xcc\xa9\xa4\x09\x3a\xa8\xe0\x53\x02\x85\x26\xc7\xff\xf3\xb0\x69\xf2\x81\xd5\x54\xe3\xad\xcc\x3e\x82\x5b\xc0\x30\xb5\xc8\x57\x48\x58\x30\x51\xaa\x6c\x59\x95\xed\xdf\xcc\x47\xd7\xd1\x14\x02\x93\xc4\x96\xde\xcd\xb4\x79\xc0\x15\xa1\x73\x93\x00\x19\x30\xfc\x81\x45\x4f\x47\x44\x0c\x01\x34\x60\xfc\x0d\xa2\xeb\xee\x62\x68\xc0\xb8\x9d\x04\xd8\x6d\xc2\x68\x00\x1d\x6d\x31\x36\xa0\xa3\x76\x16\xcd\xe1\x39\xd9\xd7\x52\xe4\x91\xb8\xd9\xad\x35\x68\xfb\xd8\x8a\x4d\x47\xb5\x8a\xba\x6a\x8a\x47\x4e\xa5\xad\x6b\xa7\x18\x75\x3a\x2f\x74\xc7\xbc\x0f\x12\xab\x6e\x7c\x9c\x12\xeb\x36\x6a\xfe\x03\x2d\xbe\x83\xe5\x0d\x04\x56\x89\x6a\xcf\x37\xc6\x5f\x28\x42\xc9\x3d\x2c\x6d\x70\xe5\x5b\x3f\x58\x58\xa1\xac\x1e\x96\xdd\xbf\x87\x6e\x60\xf4\xbe\xc5\xab\x97\x7f\x0f\x01\x50\x09\xbe\xad\x15\x53\x37\x4b\x88\xfa\x87\x59\xd3\x5e\x95\x8f\x0f\x93\x44\x7d\x8b\x59\x9e\xce\xb6\xa6\x64\xea\xae\x87\x08\x13\xb7\x0a\x97\x03\xd3\x29\x24\xda\xa7\xe0\xdb\xdd\x7c\x86\x59\x9a\x69\x69\x6b\x7c\xd2\xe4\xfe\x81\xca\x54\x91\x44\xe4\x05\xd5\x6c\xc2\x32\xa6\x97\x61\xf9\xf9\xbe\xe1\x0d\x5f\x01\x8c\x5b\xa6\x48\x2e\xb9\xd2\x14\xaf\x42\xe1\x0c\x81\x66\xb5\x6b\x94\x5f\x04\x03\xb6\xdc\x14\x33\x81\xa8\x0c\x2f\xcc\x6f\x48\xc9\x85\xd2\x24\x01\x69\x84\xba\x6c\x49\x1e\xa4\xe0\x1d\xb1\xb7\xdb\x6d\xcf\xf2\x32\x62\x61\x64\x41\x78\x38\x77\x79\x82\x23\xf3\xe2\x23\xcb\xac\xd4\x39\x66\xa1\x9c\xff\x1a\xff\xd3\xa7\x53\x44\x7c\x96\xe1\x1b\x72\x74\x14\xd8\x97\xf0\x41\x4b\x71\x4f\xe5\xad\x0b\xa6\x6b\x8a\x4e\xd5\x85\x42\x2c\x22\x30\xf2\x29\x8f\x83\xe0\xb4\x80\x48\xd3\x1c\x06\x67\x63\x5b\xcb\x52\x95\xd3\x22\xcc\x50\x55\x37\x64\x07\x71\x6f\xef\x60\x1e\x58\x5f\xff\x96\x59\x55\x55\x3a\xd3\x37\x1e\xdf\x43\x91\x1c\x34\x4d\xa9\xa6\x63\x73\x20\xce\xda\x7f\xaa\x82\x26\x70\x46\xfe\x51\x7d\x98\xd1\x09\x64\xea\xc7\xe3\xff\xf8\xee\xfd\x5f\xff\xf3\xf8\xa7\x7f\x34\xbf\x43\x71\x0d\x0d\xa7\xcd\x07\x02\x5f\x01\x63\xa5\xb8\x48\xe1\x0a\xa9\xc3\x3f\x9d\xa6\x77\x91\x24\xa2\xe4\xda\x7d\x81\xe0\xee\xe3\xb9\x50\xfa\xf2\xba\xfa\xb3\x10\xe9\xea\x5f\x01\x25\xfc\x48\x3f\xe5\x1e\x5c\xdb\x00\xb0\x47\xdb\xe2\x49\x3f\xb4\x60\x3f\x80\x54\x41\xf8\x80\xbe\xb5\x33\x36\x6c\xaf\x7e\x1b\xab\x64\x0e\x39\xc5\x7f\x7e\xed\xa7\xc0\xdc\xc7\x55\xf9\x0d\x8e\x28\xfa\xe6\x0e\x6c\xd7\xf4\x3d\x5a\xbc\x0e\xd2\x38\x6d\x8b\xc8\xf9\xab\x15\x8c\x3c\x61\x38\x23\x6e\xb6\x2c\x07\xa8\xe4\x47\x6f\xa5\xa8\xc3\x20\x2f\xae\x2f\xc9\xc2\xce\x70\x8f\x26\xe7\xf9\xd8\x75\x06\xd1\xd5\xad\x60\x86\xfd\x75\x45\x95\x5b\xa6\x86\xea\xe6\x14\x66\xa4\x3c\x74\x81\x6e\x3c\x56\xbf\xe9\xf4\x3d\x5f\x98\x71\x55\xab\xd4\xa4\x97\x27\x79\x20\xac\x0f\xe9\x27\xcf\x0c\xd5\x15\xb1\x2c\x7a\x28\xcb\x35\x9d\x58\x88\x94\xab\xae\x5e\x04\xdf\xfa\xac\xbb\x46\x51\xe5\xbc\x02\xdc\x80\xe6\xa9\x0e\x03\xb9\x30\xcc\x7e\x81\xb9\x32\xf7\x3e\x76\xb5\x90\xb0\x00\xae\xab\xa0\x6b\x57\xf7\x8b\x4a\xcd\xe2\xe8\x24\x8e\x22\x55\x59\xba\xeb\xb0\x0e\x6b\xe5\xca\x5f\xdc\x77\x51\xb7\x77\x25\x1a\x5b\x2f\xb2\x62\x4e\xcd\x5b\xcf\x2a\x3d\x78\xe3\x69\xb7\xd1\x13\x66\xee\x14\xfb\x27\xac\xd4\x6e\x79\xfd\xdb\x3f\x36\x08\xed\xd1\xdd\xf0\x6c\x6a\x4e\x94\x1d\xbb\x49\x57\xc2\x6a\x3c\xdb\xd5\x24\x57\x09\xaf\x7e\x2e\x9c\x4d\xe1\xbb\x09\x70\x26\xd3\x4f\x4c\xe9\x33\x5b\x36\xd0\x9f\xa0\x05\x95\x55\x94\x50\x39\xc9\x98\x9a\x87\xb2\x7b\xdb\x2e\xa7\xd5\xea\xac\x94\x51\xac\x70\x92\x6b\xd9\xc3\xcc\xc5\x0a\x95\x11\x48\xd8\x66\x62\x6e\xa3\x14\xd6\xee\xfc\x6b\x4c\x90\xa8\xe3\xa3\x83\x30\xf5\x1e\x9f\x07\x0b\x1d\xfb\x52\x13\xb1\x86\xa1\x28\x41\x97\xd2\xf0\xac\xd4\xf2\x89\x6b\x91\xba\x9c\x96\x78\xc2\x5f\x0c\x65\x9d\x34\x8d\x22\x5d\x8b\x2a\x36\x5b\x11\x5f\xc8\x8e\x76\xbd\xed\x00\x3d\x57\x49\xef\x9e\x49\x44\x31\xae\x39\x26\x24\x21\xb3\xf5\xd8\x11\x69\xd6\xa5\x06\x78\xe8\x79\x33\xe0\xf1\x78\x7c\x6c\xa9\x14\xae\xda\xa9\xb5\x28\x9a\xcf\x7b\x75\x2d\xd4\x42\xd5\x33\x98\xe1\x79\xc3\xa8\xec\x96\xc8\x42\xb2\xba\xa9\xf2\x2e\xd6\x58\xb2\xfa\x67\xa0\x4c\xf9\x4c\x95\xaf\x7b\x6d\x03\x6b\xe6\xd3\xb4\x82\x0f\xde\x10\x04\xcd\xf5\xdf\x3b\xe1\x47\x55\xc5\xfa\x41\xe9\x50\x43\xf1\x89\xed\x72\x9c\x14\xe5\x99\xeb\x7e\x9c\x43\x2e\xe4\xb2\xfa\xb3\xca\x02\x1a\x29\x2d\x24\x9d\x21\xec\xb8\x1d\xdc\xfe\xac\xfa\xcb\xfe\xb0\x45\xde\xfa\xaf\x6d\x74\x47\x52\x4a\x09\x5c\x67\xcb\x1a\xcf\xf7\x8b\xd3\xe5\xfc\xba\xf5\x44\x81\xaa\xb6\xd5\x33\xf0\x9f\xe3\x3a\x6f\x11\x7d\x6e\xd5\x2c\xa2\x4b\xdd\x95\x07\x3a\xab\x05\x0e\x8c\xfb\xb0\x42\x9e\x3a\xee\x0f\x1f\x22\x24\x65\x0b\xa6\x44\x00\xf4\x6b\xd5\xd1\xba\x7b\xc2\xe3\xe7\xb9\x42\x94\x36\x1d\xbd\xb2\xa0\x7c\x2a\xb0\x28\x75\x75\xd8\x57\x4c\x83\xaf\x43\x3d\x2f\x28\x63\x68\x90\xfc\x0d\xf9\xdf\x27\x7f\xfb\xcd\xcf\xa3\xd3\x3f\x9d\x9c\xfc\xf8\x6a\xf4\xef\x3f\xfd\xe6\xe4\x6f\x63\xfc\xc7\xbf\x9e\xfe\xe9\xf4\x67\xff\xc7\x6f\x4e\x4f\x4f\x4e\x7e\xfc\xee\xc3\x37\x77\xd7\xef\x7f\x62\xa7\x3f\xff\xc8\xcb\xfc\xde\xfe\xf5\xf3\xc9\x8f\xf0\xfe\xa7\x1d\x3b\x39\x3d\xfd\xd3\x57\xc1\xa4\x53\xbe\xfc\x18\xc8\xbd\x6d\x1b\xb9\xcd\xc2\xb8\x86\x19\xec\x9f\x9e\xba\xbd\xc7\x48\xae\xb6\xd6\x55\xc8\xb8\x1e\x09\x39\xb2\x5d\xbf\x41\x25\x25\x70\x00\xbf\xbd\x62\x9f\x7f\x8f\xbf\xf4\xa6\xbe\xcd\x2a\xa1\xb0\x47\x07\xfc\xb9\x04\x0d\x05\x89\x04\xfd\x12\x61\x32\x76\xa4\x46\x59\x3d\x07\x9d\x85\x1e\xb1\x2f\xed\x06\xfd\x25\x44\xce\x78\xa7\x91\x5d\xd7\x5a\x93\x32\xea\xd5\xb8\x56\x82\x28\xb1\x76\x44\xf7\xdc\x3d\x04\x84\x98\xf9\x36\x44\xda\x74\x6e\x43\xa4\xcd\x16\x52\x86\x48\x9b\xa0\xf6\x59\x46\xda\xdc\x5a\x9e\xf4\x8b\x0c\xb3\x89\x8f\xac\xdf\x31\x73\x27\x26\xa8\x3e\xf0\x45\xd7\xe0\xea\x98\xa9\x6e\xde\xec\x81\x50\x5c\x45\x99\x51\xbd\x25\x8b\x22\x52\xde\x5b\xcf\x3c\x67\x7f\xb1\x10\x36\xf7\x16\xd5\x46\x69\x7c\xcd\xbc\xcc\x34\x2b\x3a\x26\x04\x54\xaa\xa5\x4d\x2d\x30\xcc\x9f\x2a\x25\x12\x8b\xf8\x53\x81\xe4\x65\x54\x69\xff\xca\x68\x99\xd7\xf4\x1e\x73\x68\x12\x48\x81\xef\x8b\xc5\xe4\xdb\x0f\x16\x2d\xd0\xcf\xed\x64\x69\xee\xa1\xf7\x7c\xe1\xee\x24\x92\x7a\xc0\xca\xda\x57\x1a\x65\xdc\x2f\x2b\x9b\xd1\x9c\x4b\x97\xad\xd0\x48\x6a\x44\x09\xb2\x06\xe5\x41\x6f\x8e\x98\xd6\x21\x90\x98\xfe\x61\xd9\x74\xb7\x0b\x2f\x58\x39\x08\x17\xc5\xab\x6c\x84\x20\x1d\x6b\x4d\x06\xaf\xc3\x44\xdb\xb2\x77\xe7\x11\x7a\x94\xc0\x11\x2e\x95\xc7\x95\xc8\x9f\x43\x1a\xef\x8b\x24\xde\x13\x29\xfc\x79\x24\xf0\x7e\x4a\xdf\xd1\x24\xef\x38\x52\x77\x1c\x89\x7b\x8f\xb8\xf6\x98\x52\x76\x1c\x09\xfb\x39\xec\x6b\x85\x84\x29\xfb\xd4\x87\xb4\x65\x8f\xb8\x4a\x34\x7c\x42\x53\x4d\x21\xa1\x00\x5e\x01\x7a\x7b\x0f\x2c\xd0\x64\x3e\x64\x9c\x93\xca\x2e\x1a\xf7\xc2\xbe\xdd\x64\x29\x1b\x6e\x6b\x32\xdc\xd6\x7b\xb4\xe1\xb6\x1e\x6e\xeb\x17\xb9\xad\x1d\xb7\xfa\xf2\xaf\xea\xc8\x48\x4b\x88\x21\x77\xf0\x92\x8e\x96\x8c\x80\xda\x34\x7b\x1e\xc5\x3a\xc6\xf3\x1c\x47\xee\x72\xe2\x82\xce\x19\x8e\x7a\x5d\x66\x59\x97\x3a\x17\xb6\xc5\x58\x80\x4b\x9c\xf6\xa2\xcc\x32\x57\x1b\xa1\xdb\xec\x7f\xe4\x78\x81\x5d\x64\x0f\x74\xa9\xce\xc8\x15\x2c\x40\x9e\x91\xcb\xe9\x95\xd0\xd7\xd6\x74\xd2\xad\xdf\x26\x12\x86\xed\x9c\xb0\x29\x79\x93\x51\x0d\x4a\x13\x4d\x67\x18\x51\x5b\x57\xef\x14\xb2\x35\x68\x5d\x9f\xfc\x80\x16\xad\xf0\xbd\xf9\x6b\x0f\x20\x3f\x3a\xcc\x5e\xcd\xd8\x14\x92\x65\x92\x85\xb3\x89\xef\x7d\x4f\x3e\xe2\xdc\x8b\x07\x18\xa7\xb4\x01\xa1\xfa\x33\x2c\x03\x56\x08\xa5\x6f\x35\x95\xfa\xd0\xb5\xc0\xae\x3d\x21\x66\xb2\x13\x9a\x65\x90\x12\x96\xe7\x90\x32\xaa\x8d\x20\x48\xa7\x1a\x24\xa1\xcd\x7a\xb3\xca\x06\x81\x37\x12\x11\xe6\x94\xa7\x19\x48\x32\xa5\x2c\x53\xdd\x43\xd1\x57\xea\xda\x2a\x4c\xcc\x64\xdc\x02\xe0\x63\x18\xa3\x47\x98\xa7\x49\x22\x64\x8a\x31\xb4\xc2\x23\xb1\xe3\x4b\x84\xf0\x27\xd3\x3e\xa2\xa8\x90\x53\x4e\x67\x90\xbb\xaa\xf5\x6d\xb2\x26\x99\x48\xee\x15\x29\xb9\x66\x99\x7d\x79\x21\xee\x51\x20\xce\xf0\xa4\x76\x1e\xba\x3b\x03\xa8\xfe\x39\xaa\x0e\xe1\xc8\x50\xa5\xce\x7f\x5d\x7f\x85\x1f\x74\x24\x2e\x82\x5a\x16\x43\x29\x83\x4f\x90\x84\x08\x88\x6d\xeb\xfd\x27\x48\xaa\x5b\x41\xe1\x0e\x47\x64\x4e\x0b\xf1\x8f\x18\xbc\x91\x1c\x59\xb6\x45\x0a\xe8\x89\x15\x44\x13\x80\x7d\xdc\x6c\xb1\x63\x44\xde\xba\x45\x60\xca\xcd\xbc\xfd\x33\x63\x1c\xda\x0b\xa3\x6c\x49\x4c\x68\x56\x4a\x30\x7f\xae\xd5\xfc\xf6\x30\x52\xc1\xa4\x79\x5a\x0c\x6d\x52\x08\x4d\x4e\x8e\xcf\x8f\xff\x3f\xf6\xde\xbd\xb9\x8d\xdc\xda\x17\xfd\xff\x7c\x0a\x94\x93\x3a\x92\x76\x48\xc9\x9e\x64\x52\xd9\x53\xfb\xde\x94\xb6\xac\xb1\x55\xb1\x65\x5e\x49\x33\x39\xa9\xc9\xec\x09\xd8\x0d\x92\x38\xea\x06\x3a\x00\x5a\x12\x53\xf3\xe1\x6f\x61\xe1\xd1\x68\x92\xb2\x4d\x00\x12\x69\xa7\x3b\x55\x13\x8b\xa2\x1a\xef\x85\xf5\xf8\xad\xdf\x3a\x5a\xdb\x23\x07\x12\xf0\xfc\x72\x29\x15\xa9\x4d\x95\x8a\xa2\x1b\x94\xa4\x75\x03\x35\xe8\x49\x71\x50\x8e\x10\x55\x39\x40\x27\xfa\x8e\x34\x65\x73\x60\x56\x2c\x63\xf4\x08\x49\x8e\x94\xc0\x25\xb5\x7e\x32\xf8\x54\x7f\x49\x89\xd6\x56\xc1\x39\x3c\xf8\xf5\x60\x84\x88\x2a\x8e\xd0\x3d\x67\x07\x0a\xa6\xef\x18\xdd\x70\xd4\x26\x27\xd1\xa0\xae\x23\x4b\xde\x22\x46\x88\x3d\x5b\xbe\x50\x96\xbe\x6e\x10\x6f\x4d\xca\xd7\x02\xab\x14\xa6\xeb\xf0\x39\x7f\xa0\xca\xb2\x39\x68\xf9\xfd\x12\x76\x93\xb9\xb2\x10\x96\xa8\xa2\x77\xe4\x64\x41\x70\xa5\x16\x06\x1e\xcf\x38\x1b\xff\x8b\x08\x0e\xbc\xd8\xcc\xfe\x26\xb5\x1b\x69\x31\xca\xf0\x49\x88\x57\xae\x77\x28\x0b\x32\x26\xb3\x75\xe9\x1e\x7d\xed\xbd\x21\xd1\x2a\x11\x5a\x95\x47\x6f\x6f\x6e\x26\x6f\x88\x0a\xa5\x3c\x83\x0f\xd1\x9b\xf3\x1b\x97\x14\x11\xd4\x8a\xda\x03\xf1\x9e\x07\xad\x39\x46\x0d\x17\xfb\x70\xcb\x2c\xb8\x4c\x5a\x4e\xf4\x04\x57\xcc\x5b\x2e\x95\x09\x0e\x28\xae\xc5\x36\x83\x4c\x39\xde\x47\xf8\xbb\x7c\xf0\x8b\xc9\x31\xfa\x1b\x6f\xf5\x84\x4c\xf1\xb4\x5a\xa2\x7b\xcc\xac\xb7\x3b\x0d\x96\xab\x9f\x17\xba\x2b\x2f\xf4\x0d\xa2\x77\xfe\x5b\x82\x4b\x22\x24\x08\x68\x82\x93\xb3\x6b\xb3\x1d\xf7\xa0\x6f\x59\x97\xf2\xac\x95\x8a\xd7\x68\x61\x87\xdd\xe7\xcc\xb6\x87\xf3\xd8\x1c\x57\xcb\x4f\x2a\x48\x63\x84\xb8\xfd\x9b\xaf\x4e\x44\xaf\x49\x2f\x33\xef\xf6\xf3\xa9\x51\x53\xc3\x69\xb3\x1e\x73\xc3\x7c\x69\x65\x9b\xde\xaa\xd9\x80\x94\x19\x00\xe8\x28\x23\x08\x1d\xa5\xb1\x69\xaf\xbe\x08\xa2\x07\xc9\x6f\xca\x87\x6b\x47\xd9\xb0\xdb\xe8\x49\xf0\xdb\xc8\xc2\xf2\xec\xe6\x33\x91\xa3\xb4\x52\xe1\xab\x2f\x0f\x2a\x34\x17\x98\x71\x46\x0b\x5c\xd1\x7f\x91\x12\xb5\x0d\x67\x36\x59\x0b\x34\xdb\x02\x4b\x32\x86\x50\x2e\x33\xe2\x5c\x06\xf4\xc9\x5a\x3a\x28\xce\x41\xdd\x03\x34\x96\x16\xf7\xa6\xd7\x79\xba\x9a\x15\x66\x9c\xcc\x05\x1e\x3e\x6b\x11\xda\xde\x62\xe5\xd9\xf1\xe8\x8b\x50\x27\x51\xa6\x4c\xfe\x75\xb2\x2c\xc5\x11\x2e\x0a\x20\x88\x36\xd7\x15\x08\x5e\x49\xc4\x5d\xfa\xfe\xca\x36\xaf\x5a\x05\xdc\x37\xdd\xcb\x04\xb1\x05\x62\x6d\x3d\x25\xa2\x63\x1a\x14\x6a\x7d\x4e\xb3\x78\x5d\x6c\xb3\xa6\x39\x17\xf6\x73\x3a\x06\x66\x73\x82\x5e\xe9\x96\xff\xf8\xed\xb7\xbf\xff\x36\x43\x3b\x7a\x78\xae\x15\xcc\xd0\xc5\xe9\xe5\xe9\x2f\xd7\x3f\x9e\x01\x7f\x79\xea\xeb\x33\x65\x5d\xe6\xce\xb9\xcc\x9a\x71\xf9\xa4\xf9\x96\xc0\x04\x98\x2c\x65\x73\x1f\x89\x6b\xe8\x95\xde\x84\xad\x34\x9c\xe7\xd6\x26\xb1\xde\x6d\xe3\x62\x96\x19\xf2\xa4\xc2\x38\x99\x16\x58\x7b\x21\xa9\x64\x45\x48\x93\xcd\xe2\xbf\xd6\x6f\xeb\xd5\x97\x41\x65\x2b\x4c\x99\x71\xf0\x30\xf5\x7d\xf9\xb6\xd4\x38\xf4\xe1\x2b\x32\xfe\x25\x29\x38\x2b\x53\x4c\x80\x5c\x2a\xad\xed\x49\xd6\x33\x77\x6d\xde\xe9\x5c\xc4\xdd\x55\x62\x1b\x03\x4b\x32\x75\x45\x91\x5f\xd5\x3c\x72\xd2\xd0\x0b\xc0\xdb\xfe\xf8\x87\xf8\x00\x59\xd1\x5c\xf3\xe2\x36\xa3\x8b\x2c\x51\x80\xbd\xd6\x27\xad\x30\xb1\xc0\x9b\xb3\x89\xe9\x9c\x5e\x99\xcb\x0f\x37\x1d\x97\x88\xd6\xc2\x71\x17\xd6\x7d\x6b\xa3\x85\x98\x95\xe8\x96\x34\x69\xd6\xa5\x16\x98\x0e\x97\xd6\x87\xa5\x81\xef\x5d\xd8\x20\xb2\xc9\xd7\x35\x82\xc0\xc1\xc9\x8c\x46\x9c\x56\x52\x26\x88\x7b\x43\x20\xd0\x1a\x21\x33\x4c\x2b\x84\xc1\x2b\xaf\x68\x4d\x4c\xfd\x6b\x70\xf6\x77\x40\x84\xaf\x48\xe0\x7c\xad\xde\xc6\x03\x87\x31\xfe\x6e\x6b\xaf\x61\x2a\xcd\xc2\xd7\x6d\x06\x58\x99\x2d\x7a\x34\x59\x83\x19\xf0\x39\xcf\x60\x06\x44\x9a\x01\x8d\x20\xd7\x8a\x47\xeb\x9a\xd9\x00\x37\xa6\x1b\x8f\xc0\x6d\xa6\x64\xc6\x05\x59\xc5\xdb\x04\x38\x18\x0b\xc5\x4e\x80\x9a\x9e\x4e\x2e\x7c\xec\x8b\xf7\xb0\x2e\x86\x0a\x57\xb6\xc5\xc2\x85\x49\x19\x91\xf2\x04\x90\x35\x6d\x63\x1c\xcb\x70\xb5\xb5\x82\xc4\xa3\x7c\x1a\x41\x48\x0d\xf3\x38\xea\xe8\x69\xf4\x70\x09\x33\x1f\x12\x55\x98\xb8\xb9\x83\x15\x59\x18\x98\x9b\xae\x59\x52\x38\xbf\x9b\xd8\x42\x60\xb9\x20\x90\x8c\x49\x1e\xa8\x92\xa6\x51\x43\xef\xe9\x66\x5c\xeb\x0b\x73\x81\x0b\x82\x1a\x22\x28\xd7\x2a\x46\xcb\x54\xc9\xef\x19\x9a\x92\x39\x65\xd2\xad\x58\x4a\x97\xdc\x96\x00\x24\x11\x95\xbe\x04\xf4\x31\xba\xea\x95\x22\xb3\x74\x55\x05\xef\x64\xa6\x9d\xa2\x51\xa6\x29\x01\xe5\x05\xb6\x41\x8b\xab\x6a\xd9\x6d\xbc\x90\x71\xf2\x91\x19\x8a\xdf\x10\x66\x66\x0f\x5b\x06\x03\x2d\x49\x85\x97\x26\x25\x79\x46\x19\x78\x7f\x85\x3c\x3a\x4e\x87\x66\x45\x77\x90\x8b\xe0\x9d\x8f\xee\x0c\x2a\x91\x20\xb8\x48\x22\xc6\x1d\x30\x60\x9f\x7a\x06\x0c\xd8\x80\x01\x1b\x30\x60\xeb\xcf\x80\x01\xeb\x3f\x03\x06\xec\xf1\x0e\xed\x73\xd0\x6e\xc0\x80\x0d\x5e\x99\xf5\x67\xc0\x80\x45\x3d\x03\x06\xec\x93\xcf\xde\x89\xe8\x01\x03\xf6\x19\xcf\x80\x01\xfb\xcc\x67\xc0\x80\x0d\x18\xb0\x01\x03\x36\x60\xc0\x12\x9e\x01\x03\xb6\xfd\xf0\x86\xe0\x4f\xfc\x33\x60\xc0\x06\x0c\xd8\x96\xcf\x80\x01\x5b\x79\x06\x0c\xd8\x80\x01\xfb\xd8\x33\x60\xc0\x06\x0c\x98\x7d\x06\x6f\xe3\xda\x33\x60\xc0\x36\x3c\x03\x06\x6c\xbb\x76\x06\x33\x20\xed\x65\x4f\x62\x06\x48\xc5\x9b\x6b\x3a\x4f\x20\x1a\xcc\x75\x0c\xae\x7d\x4f\x2c\x0b\xa1\xb4\xd5\x5b\xa5\xf9\xd0\xf9\xb1\x80\xa1\x4c\x1f\x88\x10\xa5\xd3\xdd\x24\x53\xa2\x4d\x04\x3d\xac\x26\xe5\x36\xb9\x98\x41\x00\x39\x20\x49\xd3\xa7\xc2\x8a\x35\xdd\x4e\x50\x27\xa0\xaf\x3e\xbb\xdb\x8d\x32\x6d\xbb\xc4\xf7\x20\x98\x8f\x02\x33\x53\x6a\xd3\xd6\x5d\xd6\xd7\xfb\x84\x97\xd2\x95\x26\x60\x9c\x8d\x0d\xfb\xe7\xb1\xee\xf0\x31\x97\xc7\x09\xde\xe0\x44\xd2\x33\x83\x91\x9b\x08\x3e\x4d\x27\x3e\x83\xb7\x48\xa8\xc8\xf9\x95\xd2\x9e\xa5\xa0\x77\x76\x86\xdc\xd9\x13\xe4\x53\x06\xb4\x4e\xce\x3b\x7c\x4f\x51\x3a\xfb\x89\xd0\xd9\x47\x74\xce\x2e\x90\x39\x3b\x47\xe5\xe4\x09\xf7\x66\x08\xf5\x66\xd2\x94\x9e\x20\x6c\x62\x01\xde\x37\x0b\x41\xe4\x82\x57\xd1\x02\x27\x97\xb0\x79\x4f\x19\xad\xdb\x1a\xe8\xf6\xb5\x4c\xa1\x77\x1e\x84\x2e\x9d\xc8\xb0\xd8\x74\x13\x09\x07\x5e\xfe\x92\x40\xbd\x63\x4c\x2b\xbd\xb5\x80\xc4\x72\x81\xef\x40\x59\x6a\x8b\x82\x90\x32\x45\x5d\x0a\xbd\xa8\xbf\x3f\xf6\x3d\x34\x64\xe4\x54\xa2\x57\x69\x57\x4d\x9a\x3e\x1e\xb8\x99\x7e\xff\x4d\xd4\x3b\xe6\xa2\xc9\x73\x4b\xbf\xb9\x9a\x9c\xf5\x6e\x69\xf8\xe0\x2d\x1c\xe3\xb3\x05\x29\x6e\xaf\x2c\xc4\x63\x77\x37\x73\xba\xfb\x23\xc9\xf5\x91\x43\x31\x48\xb5\xee\xfb\x3a\xa8\x36\xc0\xfb\xa1\xb9\x39\xac\x22\x11\x77\xb4\x20\xc7\xcf\x60\x40\xe7\x32\x4a\xd3\x0f\x02\x02\xf7\x35\x0c\x7c\x5f\xd4\xae\x6b\xd3\x1d\xef\xf9\x0e\x7c\x27\xb6\xa7\x00\x66\xac\x70\xe1\xd7\x66\xbe\xf9\xd0\x25\x75\xe3\x50\x12\xe2\x53\x14\xe6\x54\x2d\xda\xe9\x71\xc1\xeb\x13\x2d\x3a\xcc\x7f\xa6\x15\x9f\x9e\xd4\x58\x2a\x22\x4e\x4a\x5e\xd8\x6b\x7d\x5c\xe8\x1e\x50\x36\x3f\xae\xcb\xa3\xe3\xff\x95\xd4\x87\x0b\xeb\xc3\xb5\xe9\x41\x8f\x18\xaf\x53\xa2\xe5\x3e\x17\x2b\x56\xac\x9e\x94\xf4\x4d\x9a\x7c\x7f\xa7\x56\x4f\x48\x84\xcb\xee\x04\x2a\x3b\x48\x6d\x94\xc1\x51\x9d\x53\xa8\xec\x07\x1c\xf6\xc9\xa0\xb0\x59\xce\x6a\x26\x08\xec\x1e\xc1\x5f\xf7\xc6\x16\xda\x17\xc8\xeb\x1e\xd6\xdc\xcf\x00\x73\xcd\x01\x71\xcd\x07\x6f\xdd\xd7\xd2\xf4\x4f\x06\x69\xfd\x22\xe0\xac\x19\xe3\x36\x99\x60\xac\xcf\x01\x61\xdd\x5f\x1f\x0c\xca\x00\x5b\x7d\x3e\xc8\x6a\x96\x79\xcc\x6a\xc5\x26\x8a\x84\x1d\x40\x54\x9f\x23\x2e\xfd\x64\x31\xe9\x0c\xf1\xe8\x9c\xb1\xe8\x6c\x71\xe8\x27\x83\xa2\xa6\xc3\x50\xb3\xfa\x14\x9e\x05\x7e\x9a\x13\x7a\x9a\xbc\xbe\x94\x51\x45\x71\xf5\x9a\x54\x78\x79\x9d\x06\x50\xcc\xb5\x12\x97\x6b\x20\x46\xe3\xb6\xee\xc7\xdb\x17\x58\x22\x57\x05\xc9\x52\x8f\xb8\x20\xb4\x55\x81\x21\x7e\x6c\xc6\x17\x5d\x8c\x0c\x6d\xcf\x45\x71\xcf\xc5\x6d\xc5\x71\x29\x4f\x1a\x6e\xfe\xd3\x31\x51\x04\x14\x14\x49\x6a\xfa\x7e\xb8\xc7\x0d\xdf\xc7\x9e\xec\x9a\xb7\xfc\x1e\xf1\x99\x22\x0c\x1d\x52\xe6\x76\xce\x51\xe0\xa5\xe9\xc2\x23\xc9\xf1\x0e\xfd\xd6\x57\x2f\x5d\x23\x5f\x5f\xdc\x03\x22\x43\x52\xee\x75\xe4\xcb\xf6\xf1\xd3\xa1\x2f\xfb\xc5\x59\x5b\xf5\xc3\x5f\x26\x24\x96\x27\xf6\xf5\xea\x18\xbd\xb7\xea\xc4\x2b\xe8\x8f\x17\x45\x98\x95\xc8\xf2\x46\x7d\x7d\xfb\x24\x19\x82\xdd\x37\x6e\x3c\x66\xba\x8f\x67\x31\x37\xb0\xd6\x32\x39\xc2\xfa\x5b\xa0\x80\x0e\x4e\xd7\xbd\x71\xba\xee\x08\x19\xfc\xf5\x59\x5b\xcf\x8f\x04\x1e\xac\xad\x7f\x17\x6b\x2b\xa0\x6b\x7b\x23\x70\x41\x26\xfb\xa4\xbc\x39\x01\xd2\x25\xa8\x75\x3a\x9c\x17\x17\x8c\x10\x93\xd0\xd4\x91\xf1\x01\xef\xdc\xac\xad\xaa\xa5\xf1\x21\xf6\x98\x19\xe3\xb7\xd6\xcd\x82\xac\x51\xda\x41\x28\x75\x43\xef\x3a\xdb\xa4\x11\xdc\x6a\x24\xa2\x65\x4c\xab\x18\xf6\x38\xe9\xce\x6b\x5b\x44\x12\x16\xef\x4e\xc7\x3d\xc2\x3d\x0b\x8e\x06\xa0\xe7\x82\xa0\x2e\xaf\xa6\xdf\x11\xdd\xea\x8c\x8b\x82\x4e\xab\x25\x5a\xe0\x4a\x1b\x4b\x16\x3c\x7c\x4b\xab\xca\xbe\x26\x01\xac\x4c\x94\x09\x3d\x1b\x8d\xa6\xe2\x6c\x0e\x93\x81\x4d\x47\xc8\x43\x43\x0a\xdd\x66\x51\x11\xcc\xda\xc6\xf4\x53\xeb\x47\x4b\xde\x0a\xd7\xcf\x24\xb4\x76\xd0\x3a\x95\x88\xd1\x6a\xe4\xa6\xbc\x4f\xcd\xb8\xbe\xe7\x3b\x97\xb2\x24\xa5\x65\x55\xbc\xa7\x92\x8c\xe0\x9d\xd1\x7d\x32\x7d\xe1\x77\x44\x08\x5a\x12\xb3\x6f\xcc\x67\x8d\xe0\x77\xb4\xec\xb0\xe3\x7a\x5b\x00\x6e\x3b\xba\xad\x1f\xe1\xbd\x4e\xb4\x32\xce\xc6\x8c\xcc\x31\xa8\xc7\x56\xa0\x19\x44\xa7\x69\xdf\xe0\x07\x59\x49\x0b\xac\x88\x04\xac\x7c\x8f\x72\xf5\x8e\xe2\xe8\x9e\xe8\xf1\x04\x3b\x0a\x1d\x32\x8e\x38\x64\xbc\xb5\x8c\xaa\x25\x44\xf4\x16\xad\x42\x25\xbf\x67\x47\x29\x07\xd3\xc0\x1c\x30\x9a\x12\x85\xbb\xa4\x35\xa7\x92\x49\x44\x18\x9e\x56\xfa\xec\x01\x86\xfc\x66\xe3\x06\x40\x33\x82\x55\x2b\x08\x9a\x63\x95\x20\x25\x36\x68\xf3\x66\x3d\x3f\xbe\xed\xa8\xb4\xf1\xba\x19\x6a\x99\x24\x89\x8a\x6c\x36\x13\x20\x32\x13\x53\x9f\x68\xde\xaa\x3d\xb9\x47\x1e\x73\x1d\x99\x8c\x92\xc0\x48\xa4\x35\x91\x88\xb7\x09\x9e\xbc\x9e\xf9\x67\x9b\xcb\x69\xe1\x0d\x7e\xa7\x8d\x4f\x6c\xd8\x34\xc7\x0e\xbb\x0c\xb4\xf2\x0d\x79\x28\x1d\xf0\xca\xe4\xf8\xbe\xbe\xbc\xfe\xe5\xdd\xe9\x7f\x9f\xbf\x8b\xdb\x02\x20\xeb\x58\xa8\x3b\xb7\x8c\xfe\xb3\x25\x08\xd7\x9c\xcd\x11\xae\xc2\x14\x98\x11\x38\x3a\x83\x0f\x40\x2a\xe6\x4d\x96\x89\xd4\x6b\xf5\x25\x10\x25\x18\xd6\xe0\x98\xcf\x91\x11\x14\x8b\x02\x49\x40\x7f\xf4\x91\x30\x6e\x0c\x80\x3f\xed\x91\x37\x30\xa2\xf4\x19\x37\x06\x21\x65\x08\x23\x49\xd9\xbc\x4a\xb6\x05\x93\x3d\x22\xa9\xfe\x90\x71\x37\x82\x49\xac\x5b\x24\xdd\x29\xd2\xeb\x43\xbc\x55\x99\xcf\x21\xd0\x5d\x66\xce\x05\x40\x1e\x1a\x2e\x89\x73\x01\x18\x1d\xf7\x62\x82\x70\x59\x8a\x24\x3d\xda\x0a\x1b\x6f\xa3\x1b\x82\x00\xd3\xac\x09\xfd\x8e\xd0\x4b\xf4\x5f\xe8\x01\xfd\x17\x38\x04\xfe\x18\xdf\x54\x1e\x73\x3b\x07\xa2\x79\xc1\xa5\xba\x98\x64\x5a\xe8\xbf\x2e\xb0\x82\x37\xea\xf5\x50\x1c\x4d\xa9\xb5\xcc\xc8\x83\x22\x42\x6b\xc4\x76\x0d\x53\x67\x2e\xc9\xb9\xa0\x3b\xf8\xa5\xec\xee\xd4\x38\xeb\xc5\xac\x0f\x84\x7e\xa6\xfd\x0d\x0d\xbf\xe5\x52\x5d\x5a\x69\x1d\xb2\x5c\x84\xfd\xa8\xb1\x2a\x16\x7d\x71\x9f\xd2\xea\x7b\xbd\xf7\x82\xeb\xbf\xe4\x70\x51\x9a\x74\xb6\x05\x4d\x10\x0e\xfb\x73\x62\xd3\x20\x73\xf9\xb6\xee\xc7\xb6\xd6\x8a\x7b\x13\xd4\x30\xab\xb7\x05\x95\x23\x1a\x5e\x1e\xa3\x73\x5c\x2c\x12\x7a\xa1\x67\xa3\x0c\x94\x81\x86\x97\xa6\x1b\x0b\x7c\xa7\xf7\xb8\x6d\x15\xe0\x7b\x46\x75\xf5\x81\x32\x38\x70\x5a\x62\x15\x98\xa1\x69\x0a\x7e\x4c\x90\x19\x11\xc2\xa4\x4c\x4e\x97\x2e\xf3\x22\x79\xb7\x25\x49\xb9\x46\x70\xc5\x0b\x1e\xcd\x6c\x90\x73\xab\x4c\x6c\x5f\x60\xee\x21\x6c\xe5\x03\x85\x3f\xbc\x9e\x8c\xd0\xcd\xd9\x64\x84\xb8\x40\xd7\x67\x69\x38\x90\xd0\x1a\x7d\x71\x73\x36\x79\xb1\xd3\x15\x08\xd2\x39\x6e\xce\x26\x11\x2f\x59\x47\x12\xd6\xb8\x19\xdf\x92\x65\xa4\x76\x97\x43\xc3\x1c\xfb\x8d\x95\x65\x40\x66\x9a\x6b\xdc\x6c\xfd\x36\x41\x70\x49\x07\xb2\x85\xcf\x7f\x06\xb2\x85\x81\x6c\x61\x20\x5b\x18\xc8\x16\x06\xb2\x85\xfd\x05\xfa\x0f\x64\x0b\x9f\x7c\x06\xb2\x85\x47\x9f\x81\x6c\x61\xab\x67\x20\x5b\x58\x7f\x06\xb2\x85\x8f\x3c\x03\xd9\x82\x7f\x06\xb2\x85\x81\x6c\xe1\xcb\x95\xda\x03\xd9\xc2\xea\x33\x90\x2d\x0c\x64\x0b\x03\xd9\x42\xf8\x0c\x64\x0b\x8f\x3c\x03\xd9\xc2\x40\xb6\x30\x90\x2d\x7c\xfc\x19\xc8\x16\xa2\x9f\x81\x6c\x61\xbb\x67\x48\xff\xd9\xf2\x19\xc8\x16\x06\xb2\x85\xd5\x67\x20\x5b\xf8\xe4\xb3\x1f\xee\xf1\x81\x6c\x61\x20\x5b\xf8\xe8\x33\x90\x2d\x0c\x64\x0b\x1f\x7d\x06\xb2\x85\x88\x67\xef\x9c\xae\x03\xd9\xc2\x40\xb6\xf0\xb1\x36\x06\x6b\x6b\xbb\x67\x20\x5b\x18\xc8\x16\xd6\x9e\x81\x6c\x61\xfd\x19\xc8\x16\x06\xb2\x85\x81\x6c\x61\x20\x5b\xf0\xcf\x40\xb6\xf0\xb5\xfb\x9d\x04\x91\xf4\x5f\x64\xc2\x2b\x5a\x2c\x93\xf3\x4c\xae\x88\xe4\xad\x28\xf4\x8d\x0d\xaf\x45\x0d\xbc\xd7\x7b\x14\x92\x94\xec\x3d\x4b\xde\xbf\x0a\x26\x2e\x4c\xe2\x17\x76\x0e\x9e\x62\x0a\xf6\x22\x91\xdf\x0d\xf0\x32\x1e\x41\x00\x2f\x51\x58\x28\x33\x7d\x71\xce\xd2\x64\xab\x3d\x1c\xc8\x3e\x24\x12\x86\xdc\x23\x7e\x17\x29\xee\x85\x2d\x7d\x74\x73\xe1\xa6\xa9\x68\x4a\x4a\x26\x42\xd7\x2d\x68\x17\xc4\x86\xc0\xe5\x77\xa8\x68\xda\x11\xaa\x49\xcd\x45\x42\x62\x44\x06\x0b\xae\xb7\x55\xf6\x61\x9d\xae\x4c\x87\xdc\xe4\x2b\x0e\xf3\xbf\x34\xf6\x42\x47\x10\xe3\xd7\x8a\x3a\x71\x98\x84\x35\x5b\x2f\x5b\x4d\x55\xcf\x0b\x74\xc9\xd5\x95\x3d\xdc\x3b\x5b\xaf\xcc\x88\x05\x37\x85\xe9\xdc\x32\x91\x0b\xde\x5d\x68\x9f\x9d\x3b\x89\xce\x37\x7c\x0a\xf1\x4f\xd9\xe8\x97\xf8\x31\x45\x75\x08\x57\x82\xe0\x72\x09\xdd\x28\x00\xaf\xd7\xf9\xff\xbe\xc0\xb4\xcd\xa2\xc2\x34\x1e\xe4\x97\xeb\x48\x9f\x41\x2f\x90\xde\xaf\x1d\xf8\x1d\xf2\xc8\xfc\x62\x8d\x3c\xc4\x9b\x9a\x33\x7e\xec\x7e\x65\xfe\x78\x94\x60\xe9\x61\x05\xbb\x0b\x8c\x18\x30\x65\xa9\x0c\xd5\x84\x34\xe3\xce\x98\x74\x25\x69\x88\xd6\xde\x8d\xb3\x33\x5e\x47\x5f\x32\x5c\xd3\xc2\x9d\x8a\x53\xb3\x09\x29\x67\x2b\x16\x60\x8e\x2e\x6b\xc3\xb4\xae\x5b\x85\xa7\x15\x39\x46\x17\x6a\x63\xa9\xfc\xb4\x9c\x65\x94\x05\xab\x9a\x88\x53\xdd\xa8\x40\xc3\xa6\x32\xcc\x0b\x84\x69\xf1\xc3\x19\x41\x84\x29\xb1\xd4\xfb\x6f\xc2\xcb\x6b\xbd\x05\x7b\xdf\x4e\x26\x64\x48\x84\xa7\xe6\x80\xa6\x26\xc2\x52\xf3\x80\x49\xd3\x81\xa4\x79\x41\xa4\x9d\xbb\xdf\xf0\xc9\x84\xd9\x39\xbd\x6d\xa1\xaf\x80\x0d\xa2\x09\xf1\x59\x62\x0f\x74\x8b\x13\x5e\x6a\x05\x47\x10\x23\x9f\xfc\x19\x35\xce\xbe\x0b\xdd\xb9\x5b\xf0\xce\x61\xd5\x69\x3e\xf8\x0e\xd3\x4a\x1f\xe0\xc4\x0e\xf8\xec\xe6\x4c\x51\x9a\x4c\x71\x05\x0b\xa4\xdf\xa7\xcd\x62\x53\xb0\x7a\x59\x5c\xc5\x82\x4b\xc2\x40\x5e\x62\x9f\x6d\xe3\x73\x01\xac\x88\x29\xcd\x5d\x9c\x8a\xf8\xbd\x98\x21\x52\x37\x6a\x39\x42\xe4\x8e\x88\xa5\x5a\x00\x32\x40\x70\x83\x16\x81\x26\x74\xdf\x6a\x5c\x06\xbb\x63\x84\xb8\x73\x16\x27\x36\x0f\xf7\x83\xb5\x9f\xda\x4a\x19\x6b\x0a\xf4\xef\xa4\x74\x50\xf3\x64\xd8\x35\xb9\x49\x4f\x50\xaa\xd0\xcc\x49\x5a\xa2\x9f\x8a\xd6\x34\x8e\x0a\x12\x65\x3c\x0b\xef\xa0\x17\x41\x9a\x87\xde\x12\x35\x7e\x00\x57\x22\xae\x79\xcb\x60\x6b\x14\xbc\x6e\x5a\x15\xa8\xe4\x4e\xbb\x7f\x36\x1f\x63\xc1\xd9\x8c\xce\x6d\x14\xec\xa4\xc6\x0c\xcf\xc9\xd8\x77\x67\xdc\xa9\x37\x27\xbb\x43\x67\xe0\xd2\xd1\x48\x4c\x72\xe4\x14\x63\xa5\x88\x60\xdf\xa1\xff\x39\xfc\xfb\xef\x7e\x1d\x1f\xfd\xf9\xf0\xf0\xa7\x97\xe3\xff\xfc\xf9\x77\x87\x7f\x3f\x86\x7f\xfc\xc7\xd1\x9f\x8f\x7e\x75\x3f\xfc\xee\xe8\xe8\xf0\xf0\xa7\xbf\xbc\x7f\x73\x33\x39\xff\x99\x1e\xfd\xfa\x13\x6b\xeb\x5b\xf3\xd3\xaf\x87\x3f\x91\xf3\x9f\x3f\xf3\x25\x47\x47\x7f\xfe\x6d\x7c\xa4\x30\x35\x2c\x9e\x2f\x28\x9e\x29\x24\xfe\x24\x01\x71\x2b\x63\x77\x7e\xf8\xed\x15\xb8\x76\xfc\x6d\x24\xe1\x63\xc7\x5f\x24\xfb\x4f\x2e\x66\x5d\xfb\x54\x22\x5e\x53\xa5\xac\xb7\x00\x87\x3c\x35\x2b\xbe\x1b\x2b\xb0\xe8\xcc\x28\x50\x54\x86\x7c\x29\x9d\xcb\x27\xba\x5b\xfe\x7e\x05\x6f\x15\x43\xb4\x6e\x2a\x52\x13\xa6\x40\xf0\x8c\x9d\x6d\x0b\xae\xbf\xe3\x6e\x04\x05\x66\x8c\x2b\x44\x1e\x0a\x42\x4a\xdb\xc9\x41\x36\x06\xcf\x20\x1b\x07\xd9\xf8\xa9\x27\xd9\x7f\x9d\xc9\x91\x19\xfa\xac\xd7\xa2\x51\x5a\x2e\x98\x23\xe6\xd4\x67\xf8\xba\xe7\x38\xe0\x33\x44\x62\xb9\x2c\xbb\x46\x2c\x3d\x26\x8e\xf5\x56\x22\xc8\x0f\xb7\x52\x49\x3a\xac\x8c\xb1\x45\x39\xdb\x0f\x2e\xf4\xde\x72\x5f\xb5\xd5\x2e\x9d\xd7\x01\xb3\xb8\xd6\xed\xc1\xa3\xa9\x7b\xe4\x40\xdd\x0b\x52\xdc\x1a\x17\x72\x49\x0c\xc8\x82\x98\x3b\x28\x4e\x03\x08\x68\xf2\x17\xbc\xad\x4a\xdd\x86\x9d\x0e\x62\x16\xe8\x81\xaa\xe3\x8f\xae\x61\x54\xbb\x5f\x29\x3d\xbc\x3d\xb3\x7a\x0f\x05\xba\xcc\x82\xdf\x87\xaa\x04\xcc\xa9\x56\x18\x16\x98\x95\xd1\xf8\xfb\x3d\x08\x2b\x63\xc0\xa4\xef\x28\x14\x6c\x1a\xdf\x87\xe0\xe2\xb5\x87\xea\x6b\x39\x8c\x2d\x50\x1f\xdf\x12\xa6\x0f\xd0\xfa\xc2\xcf\x3c\xa5\x03\x15\xa0\xd1\xa5\x30\x15\x00\xa8\x12\x2b\x2a\xb5\xb6\x69\xa0\x6e\xe0\x51\x69\xb8\x94\x74\x5a\x91\x0e\x86\xf3\xc2\x6e\xce\x17\x5a\x78\xb8\xdb\x22\x8d\x62\x31\x83\x6f\x2f\x83\x02\xa0\x67\xf5\x8c\x97\x29\x6a\xdc\x8a\x47\xdf\x0b\x61\x83\xe0\x84\x12\x1e\xa5\x91\xc1\x20\x80\xf5\xba\xf6\x57\xf5\xeb\x70\xe5\xeb\x33\x89\x15\x8f\x57\xe9\xf2\xb8\xf3\x5d\x37\xf6\xcb\x4b\xdb\xdb\x14\x82\x54\x60\xe4\xc8\x05\x6d\xd0\x94\xa8\x7b\x42\x56\x92\x12\xba\x7d\x73\x28\x8f\x1c\x4a\x39\xb1\x13\x1d\x52\xc1\x20\x3e\x8e\xd1\xa4\x77\xcc\x21\xe6\x9d\x4e\x34\x72\xc1\xbe\x5b\x15\x51\xc0\x84\xea\xc4\x8c\x13\x61\x1b\xc6\x0a\x31\xc0\xb4\x88\xa5\x1f\x2c\x01\xed\x67\x6d\xcc\xc9\xc3\xbb\xe4\x2a\x6d\x84\xc9\x43\xd3\x7a\x94\xf5\xe6\x3f\xc9\x28\x33\x05\x4b\x2c\xac\x68\x8f\x4e\x61\xff\xaa\xb5\x73\x67\xb7\xbe\x17\xce\xbd\x28\x73\x20\xbe\x53\x77\xce\xa9\x42\x35\x97\x0a\x7d\xf3\xed\xb7\x88\x18\x5f\x8c\x01\x99\x24\xbb\xa0\x51\x36\x06\xa6\x2c\x1c\x4c\xf9\x68\x17\x51\x36\xea\x45\xf4\x91\xc8\x47\x1c\xd9\x58\x66\xe0\x93\x24\x45\x2b\xa8\x5a\x6a\x5b\x80\x3c\x44\x45\x18\x73\x9c\x95\x2e\x0f\xf1\xba\xdf\x21\x8b\x86\x71\x27\xc7\xfc\x0e\xf1\xc6\x50\x4b\x3f\x5a\x3c\xad\xb3\x0a\x5b\x06\xce\x80\xb8\x5d\x7e\x31\xd3\xab\x64\x12\x53\xc0\x70\x04\xac\xce\x6a\x17\x5d\xca\x88\xe9\xce\x3f\x5b\x7a\x87\x2b\x2d\x9a\xbb\xbf\x98\x40\x12\x41\xf8\x47\x5f\x20\x84\x0a\xe4\xc5\x44\xd0\x3b\x5a\x91\x39\x39\x97\x05\x36\xca\xc4\xae\xdd\xf0\xa7\x8f\xf4\x0b\xf6\x83\xe0\x95\x44\xf7\x0b\xa2\x16\x44\x20\xec\x12\x97\x00\xe2\x33\xc7\x94\xa1\x9a\x8b\x14\x18\x88\x6d\x54\x9a\xcc\x29\xaa\x24\x6a\xb0\xd0\x6b\xef\x32\xa4\x0c\xd0\x68\xca\x79\x65\x59\xe2\xab\x65\xd7\x2f\x1a\x8f\x97\x80\x98\x3b\xff\x85\x91\xfb\x5f\x74\x2f\x24\x9a\x55\x78\xee\x13\xa3\xe0\x8a\x59\xd5\xec\x92\x93\xb6\x1e\x9d\x68\xa0\x40\x6f\xf5\x8d\x72\x8f\x97\xb2\x4b\x67\xeb\xda\xa6\x09\xb2\xfd\xd5\x11\x9c\x62\x2c\x91\x6f\xbb\x8c\x7e\xd9\x37\x47\xc0\x3f\x72\x76\x3a\xf9\xe5\xfa\x6f\xd7\xbf\x9c\xbe\x7e\x7f\x71\x19\xfd\xb2\x4b\xae\x88\x89\xa3\x04\xae\x25\xeb\x70\xb2\xab\xe0\xa1\xba\xc7\x5c\x1e\x03\x48\x02\xb8\xd4\x58\xc9\xef\x13\x91\x64\x7a\x4f\x11\x1c\xe7\xc7\xc0\x4d\x73\x2a\x6a\x2e\x26\x82\xcf\x68\x15\xad\x7b\xe7\x3a\xc1\x2b\xdd\x71\x98\x92\x53\xfb\x71\x27\xee\x0d\xbd\xcf\x3a\x74\x31\x10\xd4\x14\x48\x64\xf4\x6b\xe2\x63\x58\xbd\x14\x40\x93\x90\xb8\xd2\xc5\xf8\x43\xb4\xd3\x3d\xb3\x73\xf2\x04\xdd\x8d\xc8\x3f\xcf\x61\xa4\x57\xbc\xc0\x15\x14\xae\x4b\xdb\xf8\x28\xb3\x89\xb0\xda\xaf\x20\xd9\x13\xbb\xed\x8c\x2a\x8e\x4b\xe3\xdd\x36\xc2\xbf\x24\xae\xa8\x85\x53\x76\x00\x22\x97\xd4\x91\x1b\x93\x68\x07\xed\xb9\xec\xd4\x46\x10\x17\x21\x5d\x6d\x9e\x9b\x5a\x1e\x49\x4d\xbe\xef\x03\x0e\xed\x28\x7b\x3c\x0a\xa9\x67\xce\x37\x63\x0f\x18\x9d\x81\x67\x03\x3c\x8e\xda\x64\x5e\x36\xc6\xd5\xf8\xce\x2d\x43\x42\xc5\xab\x4c\x66\x2c\xbc\x64\x4f\x76\xa7\x99\x1f\xbf\x23\x4d\x96\xd0\x2d\xd5\x33\x38\xeb\x84\xb4\xdb\x36\x4e\x07\x31\xa9\x42\x89\xfb\xf1\x47\xa8\xad\xe8\xe4\x7f\x06\x37\x91\x5f\x62\x34\x0e\x8e\x56\x23\xc8\x78\xfd\x78\xa5\x5a\xde\x57\x2d\x53\xb4\x26\x8e\x7a\x6a\xbc\xa2\x13\x09\xf3\xeb\x03\xe9\x89\xde\xb3\x6c\x74\x84\x7e\x60\x70\x5e\x19\x29\xd1\x18\x31\xde\x2d\x11\x61\x33\x2e\x0a\x70\x01\xec\x74\x83\x17\xb8\xc1\x53\x5a\xd1\x14\x61\x9e\x6b\x83\x43\xdd\xa4\xa0\x3f\x80\x5b\x29\xcb\x93\x52\xf0\xc6\xdc\xc4\x8e\x13\x22\x3d\x05\xa0\x9f\x7b\x1c\x52\xfc\x5b\x9f\x50\xaf\x23\x73\x81\x99\xea\x48\x07\xd6\x36\xce\xbf\xa3\x0e\x92\x43\x09\xc0\x65\xbe\x0a\x64\xa7\xa5\x96\x19\xe1\xb2\x25\x9f\xab\x7d\x63\x33\x3f\x73\x83\x0b\x92\x8f\xd1\xe4\xc3\xf5\xc5\xff\x59\x39\x37\xf1\xaa\x9d\x79\xf6\x9b\xcb\x58\xcb\x83\x6c\xdb\xe6\x8a\xd4\xfc\x6e\xd8\x38\x5f\xfd\xc6\xf1\x0e\xa2\x9d\x13\x31\x5e\xb5\x61\xec\x97\xb2\xa0\x6b\xa8\x4e\xd2\x75\x26\x9e\xb3\xa8\xff\xd6\x20\x27\x15\x0b\x82\xf4\x57\x98\xa2\xb8\xaa\x96\xa1\x8f\x54\x71\x53\xe3\x30\x4b\xa1\xee\xf0\x76\x9d\xe1\x4a\x7e\xa9\x57\x64\x8a\x6b\xa7\x11\xbc\x78\xcf\x5b\x96\x87\xd9\x31\x61\xc7\xf9\x8e\xa0\x92\x30\xae\xac\x37\x05\x6c\x09\x3e\x83\xdf\x22\x03\x90\x0e\x48\x9b\x7b\x7a\x4e\x82\x9a\x75\x13\xa8\x56\x1e\x49\xe2\xf4\x70\x63\xbf\xb4\x92\xc8\xcd\x7a\x55\x87\x97\x9e\x25\x60\x0a\x04\xc1\xa5\x81\xb4\x60\xb5\x30\x6c\xa2\x35\x96\xb7\xa4\x34\x1f\x24\x32\x29\x79\xd6\x24\xc8\x98\x73\x33\x7d\xa3\x27\xd7\x25\xc8\x82\x43\xd8\xc0\xef\x80\x5a\x29\xc5\x14\xdb\xe9\x69\x48\x10\xec\x7a\x11\x3e\xb0\x6a\x79\xc5\xb9\xfa\xde\x17\x4b\xdd\xf5\xc9\xf8\xab\x0d\x47\xf4\x9d\x98\xe0\x97\xc6\xd0\xe5\x31\x6c\x1c\x90\x8b\x41\x89\xd7\x54\xb1\xa8\x17\xe4\xdf\x55\x2a\x8a\x96\x9d\xca\x37\x82\xb7\xd1\x3a\x5c\x4e\x7b\xf3\xcd\xc5\x6b\xb8\xf8\x5a\x4b\xb6\xc7\x94\x58\x36\x9c\x32\xe5\x3c\x5e\x19\x83\x36\x3f\x58\x5a\xc3\x50\xb2\x25\x33\x98\x21\xf4\x1e\x2f\x11\xae\x24\xf7\x2e\x35\xb6\x29\xc8\xe9\x22\xa8\xfa\xd7\x53\xae\x16\x6b\xa1\x53\xcc\xe2\x43\x39\xeb\xed\x8d\x02\xce\xbe\x0e\x9a\x42\xd9\x5a\xb3\x0a\x52\x88\x1b\x41\x0a\x52\x12\x56\x7c\xa9\x27\x62\xd7\x14\x72\x70\xaa\x2e\x39\xd3\xe2\x75\xd7\xe7\xea\xc2\xfb\x27\xed\x6a\x84\xa7\x08\x5c\xd9\x36\x88\x88\x81\x6e\x11\x84\x6b\x2b\x53\x30\xa0\x17\x33\x88\x7a\x9a\x4d\xf7\x97\x76\x4a\x2a\xbd\xd8\xb4\xaa\xf4\x0e\xa4\x25\x56\x06\x10\x40\x6b\x3c\x27\x08\x2b\x7f\x08\x15\x47\x84\xc9\x56\xd8\x7d\x43\xe3\xe1\x93\x25\x27\xd2\x17\xe6\xc6\x12\xfd\x70\xf1\x1a\xbd\x44\x87\x7a\x6c\x06\xbb\x37\xc3\xb4\x02\x06\x47\x87\x9a\x0d\x6d\x80\x19\xe4\x86\xf1\x14\x84\xd1\x85\x95\x23\x88\x0b\x73\xb5\x8c\x10\xe3\x48\xb6\xc5\xc2\xcd\x01\xe5\xcc\x7b\x84\x2d\x9d\x7f\x52\xd6\xeb\x20\x76\xf2\xdd\x87\x3f\x48\x12\x0d\x56\xcd\x79\x1d\xfe\xf0\x8c\xd7\x61\x68\x22\xea\xe3\xdf\x5f\x30\x73\x56\x6b\xa2\x70\x89\x15\xb6\xd7\xa4\xfb\xc2\xb0\x6b\x87\xcb\x32\xe1\xb2\x94\xe4\x1d\x65\xed\x83\x41\xba\xed\x45\xd8\xe3\xfa\x1c\x7a\x04\xc7\x0b\x16\x9a\x07\x71\x3b\x17\xa1\xc8\x90\x2c\x71\xd1\x3b\x46\xa3\x47\xac\x6e\xb8\x25\x1c\xdb\x98\x36\x84\x30\x2b\x79\xbd\xd6\x49\xa0\x43\x8b\x4d\x10\x44\xbd\xec\x8f\xe1\x60\xba\xe7\xdf\x3b\x20\x54\x91\x3b\x52\x65\xf3\xed\xbf\xd3\x6f\xd3\x93\xe3\x76\x2e\xbc\x1e\x55\x78\x4a\x2a\xcb\xc1\x66\x48\x34\x33\x9e\xb0\x4c\x3e\x70\xc1\x33\x42\x62\xae\xb8\x41\x72\x61\x3f\x11\xfa\xf5\x5f\xc4\x3c\x64\x05\x5f\xdc\x58\x74\x49\x37\x0f\xe0\x03\xfd\x12\xe6\xa1\x4d\x50\x10\xd1\xea\x3c\x68\x6d\xb3\x3f\x0f\xa0\x7f\xed\xfb\x3c\x48\x52\x14\xbc\x6e\xf6\x04\x29\x79\x63\x50\xf0\xba\x47\x9f\x8b\x8a\xec\x7f\x19\x27\xc1\x9d\x6d\x19\x04\xac\xcc\x3d\xe8\x6a\x21\xfc\xef\xe0\x3a\x07\x69\xb7\x7a\xc7\xdb\xd6\x93\x11\x99\xbe\x45\xfb\xc2\x7f\xc7\x1b\x6f\x80\x61\xf6\x9e\x67\x87\x61\x06\xf4\xac\x18\xdc\xf3\x3d\x48\xe4\xd7\x00\xc6\xd4\x46\x00\xcc\x2b\x61\x25\x65\x73\x08\x58\x8d\x6c\xee\xe8\x1d\x71\xe2\xf9\xd6\x78\xbc\x0e\x40\xe2\xb8\x0e\x39\x71\xd3\x61\x56\x0d\x6d\x6b\x56\xec\xe6\x26\xbc\xa6\xf9\xce\xe5\x87\x9b\x90\xb4\x15\xb3\xa5\x21\x24\x82\x3f\xd9\xf9\x75\xfa\xc5\x60\x3a\x57\x57\xf1\xa9\x21\x9d\x49\xef\xdb\x8c\xe8\x7c\xbe\x53\xfa\x79\x28\xcf\x55\x8c\x67\xd6\x2e\xac\x02\x3e\xd7\xdb\xc8\xb0\x72\xc9\x47\xc0\x5e\x9d\x7b\xe4\x00\xf9\xab\xe9\x91\xb3\xb2\x0b\x2d\x38\x14\x65\x73\x19\x3a\x41\x70\x95\xca\xf6\x62\x9e\x4d\x5e\x10\x77\x0a\x3c\x6f\xe9\xba\x37\xa0\x5f\xec\x2a\xa5\xf5\x4f\x78\x30\xbe\x6c\x4f\x44\xa5\x2d\x8a\x2f\xdc\x0f\x31\xaf\x25\x3e\x13\x7a\x06\x15\xc5\xd5\x75\x43\x8a\x7d\xb9\x2d\xde\xbc\xbf\x3e\xed\xf7\x0c\x74\x61\xcb\xd2\x4c\xe0\xf7\x08\x97\x35\x95\x12\x02\x3e\x64\xba\xe0\xfc\x36\xa9\xc9\x43\xc7\xdc\x37\xa7\x6a\xd1\x4e\x8f\x0b\x5e\x07\x24\x7e\x63\x49\xe7\xf2\xc4\x4a\x94\xb1\x9e\xb8\x23\x44\x59\xe5\x33\x85\xc1\x5b\xc8\x94\xb4\x11\x84\xe4\xc1\xa3\xc2\x8f\x1e\xb6\x1e\xe4\xa7\x78\x68\xf6\xfa\xf4\x00\x95\x36\x6c\xde\x9d\x6b\x1d\xeb\xbb\x2a\xad\x0c\xcd\xca\xce\x7a\x64\xec\x21\x2d\xb4\x8d\xe2\x6c\x9c\x47\x63\xbc\xee\x7c\x92\xac\xd2\x5f\x10\x99\x84\x80\xcd\x79\xe6\xde\x76\x5d\xea\x48\xd3\x80\xb9\x13\x3f\x9a\xe9\x0e\xe1\xed\x03\x28\xe5\x6b\xff\xf4\x20\x17\x93\xf9\x69\x55\xe9\x85\xc4\xfa\x9a\x38\x90\x21\xba\x13\x4c\x93\x05\xbe\x33\xa2\x40\xea\x15\x27\xb3\x19\x29\xc0\x58\x08\x47\x01\x17\x49\x9a\x50\x30\x0c\x64\x61\x79\x14\xc5\x4d\xdb\x18\xd5\xf4\x41\xf7\x30\x6c\x31\xc4\xa0\xb2\x12\x02\xff\x9b\x7f\x9d\x50\xd9\x10\x01\xf8\xc0\x13\x74\x8e\xf4\x0a\x85\x8d\xb8\xe4\x68\xa5\xaf\x2d\xfd\x8b\x4b\xa2\xb4\xa1\x66\xe6\x2d\x8c\x3e\x68\xc3\x4a\xb4\x19\x0e\x43\x4a\x64\x18\x85\xd1\xe1\xac\x92\x22\xf1\x3c\x40\xa4\xd8\xf6\x49\xeb\x20\x4e\x79\x7b\xae\xc8\x31\xda\x90\xbe\xf3\x6c\x11\x64\xf4\xf9\x51\xe4\x27\x8c\x55\xa1\x7d\x89\x57\x25\x4a\x7d\x5b\xd6\x1f\x0a\x8d\x26\x33\x9e\xc0\x5b\xb6\x28\xdb\x14\xd1\xde\x8e\x89\x3f\xc8\x43\xbc\x26\xda\x9b\xaa\xf3\x07\x52\xf8\x2d\x22\xe1\x1e\xab\x6b\xe0\x18\xe3\xd0\x48\xab\x7c\x21\xf3\xe4\x5b\x6b\x4f\x74\x7a\x3b\xc2\x7d\x11\xa2\x67\x76\xc2\xa9\x53\x93\xcd\x8f\x5a\x71\xee\x2f\x82\x74\xde\xf6\x80\x4a\x5c\xff\xa8\x6f\x2e\xca\xe6\x96\xcc\x84\x0b\xcf\xf0\x9b\xd4\x2d\xd7\x0f\xa8\x60\xc7\xb9\x42\x87\x07\x27\x07\x47\x6b\x7b\xe1\x40\x86\x78\x68\x93\xba\xd9\x0d\x48\xd2\xba\xa9\x96\x30\x86\x03\x53\xb4\x2e\x91\xf3\xcc\x21\xeb\x7c\x51\x18\xb9\x20\x55\x35\x42\x52\xdf\xd3\xd8\xf1\x71\x9b\x4f\xf5\x97\x94\x68\x0b\x63\xcf\x1f\x1e\xfc\x7a\x30\x42\x44\x15\x47\xe8\x9e\xb3\x03\x65\x3c\xb3\xe8\x06\x94\xdd\xa4\x3e\xf9\x4e\x2c\x79\x0b\x75\xd5\xcd\xb2\x79\x0a\xf7\x02\x6b\x3d\xad\x35\xca\x84\x61\x07\x20\x55\x42\x9d\x70\xfd\x9c\x3f\x50\xa5\x65\xa6\x6a\xc1\x9e\x7a\x69\x54\x1a\x02\x45\xe1\xb0\x36\xbd\xef\xc8\xc9\x82\xe0\x4a\x2d\x96\x5e\xcd\x32\x25\xab\x25\x6a\x99\xfd\x4d\xba\xb0\xdf\x83\xfc\xb6\xfd\xcd\x34\xb3\x95\xf3\x6f\x16\x82\xc8\x05\xaf\x76\x9e\x6f\xe6\xca\x29\x17\x9c\x49\x2d\x53\xb4\x2d\x60\xfb\x28\x7d\xaa\x8f\x2d\xe9\x6c\x28\xa2\x39\x9c\x32\x41\x0c\x6a\x55\x6f\x2d\x28\x00\xbd\xc0\x77\x5a\xde\xc8\xb6\x28\x08\x29\x53\x74\xa8\x50\x79\xfb\x7d\xce\x82\xcf\xbb\xaf\xad\xac\x9f\xb9\x68\xf2\xdc\xd2\x6f\xae\x26\x67\xbd\x5b\x1a\x3e\x78\x0b\xc7\xf8\x6c\x41\x8a\xdb\xab\xb4\x1a\x47\x7b\x12\x03\x6d\xb8\xd8\xa5\x62\xa0\x9b\xcf\xa6\x15\x4c\xb8\x50\x88\xf9\x12\xea\xfa\x6c\xcd\x61\x15\x89\xb8\xa3\x05\x39\x76\xe5\xd5\x5d\x14\xd1\xd5\xe4\xc2\x6c\x4e\xd0\x2b\x7d\x20\xfe\xf8\xed\xb7\xbf\xff\x36\x5d\x46\xa7\x73\x2f\xe6\xe1\x5d\xb4\x03\xdf\x17\xb5\xeb\xda\x74\x67\x93\x57\xcc\xf6\x54\xaf\x41\x53\xe1\xc2\xaf\xcd\x7c\xf3\xa1\x4b\x73\x9f\x48\x42\xd0\x06\xbf\xaa\x16\x1d\xe6\x3f\xd3\x8a\x4f\x4f\x6a\x2c\x15\x11\x27\x25\x2f\xec\xb5\x3e\x06\x86\x52\xca\xe6\xc7\x75\x79\x94\x50\x74\x13\xd9\xac\x89\x05\x95\xce\x8d\xb3\x12\x10\x71\x51\x32\x5f\x0e\x82\x4a\x1f\xca\x9b\x2e\x61\x52\x76\xee\x2b\x44\xae\x97\xdf\xa1\x17\x2f\xa2\xde\xa2\x97\xe0\x0d\xc9\x93\x32\xf3\xf6\xe6\x66\xf2\x86\xa8\x50\x60\x33\xf8\x10\xbd\x39\xbf\xf1\x45\xf8\xf4\xee\x32\xd9\x17\x83\xd4\x4e\x91\xda\x0b\x9e\x56\x85\x31\xb7\x83\xd8\x88\x12\xc5\xb5\xfa\xc4\x48\xa1\x17\x7a\xd4\xab\xf7\xe4\x00\x53\x17\x13\x53\x0e\x43\xab\x5c\x78\x5a\x2d\xd1\x3d\x36\xa9\xd7\x71\x2c\xb4\xdd\xf3\x42\x77\xe3\x85\x96\x5a\x7a\x57\xbf\x25\xb8\x24\x42\x82\x35\x44\xf0\xee\x83\x1f\x41\x9f\xb2\x2d\xdb\x59\x2b\x15\xaf\xd1\xc2\x0e\xd5\xcc\x61\x57\xe6\xd2\xe8\x46\xe6\x08\x82\x33\x48\x22\x41\x1a\x63\x2d\xd9\xbf\xf9\x2a\x6c\xa1\x35\x29\x64\xe6\x39\x28\x20\x82\x51\x11\x4e\x95\x55\xf4\xa1\xfa\x34\xb5\x32\x0a\x2c\x80\x34\x2b\x3d\x4b\x21\x02\x94\xa9\x18\x01\x4a\xaf\x2d\xec\x5e\x92\x1e\x2d\xc9\x53\xd6\x00\x65\xa9\x54\x8c\xb2\x93\xaa\x23\x1b\x13\xb0\x9b\xcb\x20\x05\x74\x47\x53\xe9\xd3\x90\x23\x59\x70\xc8\x8b\x02\x33\xce\x68\x81\x2b\xfa\x2f\x52\xa2\xb6\xe1\x0c\xf1\x56\x35\xad\x02\x57\x50\x81\x25\x19\xdf\x61\x41\xb5\x40\x35\xf5\xdc\x3d\x64\x83\xe9\xd3\xae\x38\x07\x3f\x89\x8f\x8e\x99\x1e\xa7\x77\x33\x93\x36\x83\x1c\x67\x7e\xe6\x15\x5e\x5b\x9c\xf4\x1d\x8d\xf6\xda\x07\x83\x4c\x65\xbd\x45\x3e\xb3\x0e\xab\x05\x40\x90\x0a\x88\x24\x5a\x04\x1b\x08\x4e\x6d\x36\xec\x41\x86\x40\x56\x2b\x36\x51\x24\x40\x60\x90\x8b\x15\x3b\x58\xf7\x70\x7d\x0e\x33\x05\xc5\x9f\xde\xac\x0e\xab\xb2\x4f\x89\xd6\xed\x2f\x4e\x2f\x4f\x7f\xb9\xfe\xf1\xec\x97\xcb\xd3\xf7\xe7\x29\xaf\x4e\xae\xa8\x98\xb3\xa6\x62\xb6\xaa\x8a\x4f\x54\x73\x56\x3f\xb2\x58\x90\xfd\x89\x87\x5f\x43\x6f\x42\xf6\x24\x6b\x03\x50\x36\x77\x9a\x7f\x1a\x9d\x16\x5a\x71\x9a\x6a\xc1\xb3\x53\x89\x43\x19\x55\x14\x57\xaf\x49\x85\x97\xd7\xa4\xe0\xac\xdc\x39\x8c\xf4\xd2\x0b\x1b\x69\x3a\x64\xdd\xd6\x7d\xf0\xc1\x02\x4b\xe4\xaa\x13\x4e\xc9\x8c\x0b\x02\x51\x13\xa6\x25\x52\xd3\xc5\x8f\xcd\xf8\xd4\x33\x96\x05\xbf\xe7\xe2\xb6\xe2\xb8\x94\x27\x0d\x37\xff\x19\x57\x74\x46\x8a\x65\x51\x91\xdf\xf8\xfe\x8f\x93\xd4\xf4\xfd\x70\x8f\x37\x44\x50\x80\x2e\xec\xc3\xae\x79\xcb\xef\x11\x9f\x29\xc2\xd0\x21\x65\x6e\xe7\x1c\x05\x5e\x9a\x2e\x3c\x92\x4e\xfb\xa4\x38\x7a\xf5\xd2\x35\xf2\xf5\xc5\x3d\x20\x32\x24\xe5\x5e\x47\xbe\x6c\x1f\x3f\x1d\xfa\xb2\x5f\x9c\xb5\x55\x3f\xfc\x65\x42\x62\x79\x62\x5f\xaf\x8e\x7d\x42\xcd\x2b\xe8\x8f\x17\x45\x98\x95\x0e\x1b\xf3\xf5\xed\x13\x55\x34\xd7\xbc\xb8\xcd\xe4\x76\xbd\x39\x9b\x98\xb7\xad\xe0\x59\xcc\x0d\xac\xb5\x4c\x8e\xb0\xfe\x16\x28\xa0\x83\xd3\x75\x6f\x9c\xae\x07\x5d\xa9\xa9\x6d\x1d\xa8\x07\x83\xb5\xd5\x3d\x4e\xf1\x11\xfd\x52\x0d\x83\xb5\xf5\xc8\x33\x58\x5b\x5b\x3c\x06\xed\x0e\x99\xa3\x6f\x04\x2e\xc8\x64\x9f\x94\x37\x27\x40\x50\xd9\x0a\x5b\xff\xca\xeb\x70\x5e\x5c\x30\x42\x4a\x23\x3f\xec\x50\x08\x9a\xeb\x91\xcc\xda\xaa\x5a\x1a\x1f\xa2\x51\x01\x2c\x28\x26\x8d\xeb\x16\x5e\x6d\x55\x5c\x17\x64\xde\xd4\xbb\xce\x36\x69\x3c\x6b\xb3\x2b\x6f\x60\x8f\x93\xee\x3c\x54\x67\x26\x2c\xde\x9d\x8e\xc3\x15\x44\x92\xce\xf5\x74\xd9\x62\xb2\xc8\xb0\xfd\xb8\x1a\x61\x5d\x47\x74\xab\x33\x2e\x0a\x3a\xad\x96\x68\x81\x2b\x6d\x2c\xdd\x53\xb5\x40\x18\xdd\xd2\xaa\xb2\xaf\x89\x9f\xa8\x6b\x57\x02\xde\x68\x34\x15\x67\x73\x98\x0c\x6c\xc1\xe3\x0f\x0d\x29\x74\x9b\x45\x45\x30\x6b\x1b\xd3\x4f\xad\x1f\x2d\x79\x9b\x01\x3f\xee\x02\xdf\x5e\x9f\x62\xd4\xf2\x24\x98\x0a\x53\x1f\xdd\xf3\xfd\x2c\x40\xf4\x41\x2d\x88\xb8\xa7\x92\x98\x8a\x57\xd1\x7d\x32\x7d\xe9\xd7\xbb\x32\x9f\x79\xae\x07\x9b\xe2\xa4\xb7\x05\xe4\xdc\x45\xb7\xf5\x23\xbc\xd7\x89\x56\xc6\xd9\x98\x91\xb9\xc9\x28\xb7\x02\xcd\x20\x3a\x4d\xfb\x06\x3f\xe8\xf3\x93\xa5\xe2\x0d\xa2\x75\x4d\x4a\x6d\x1f\x57\x4b\x74\x47\x71\x74\x4f\x20\x7b\xbd\xdb\x51\xe8\x90\x71\xc4\x1b\x7d\x75\xb5\x8c\xaa\x25\x44\xf4\x16\xad\x42\x25\xbf\x67\x09\x89\x21\x37\x16\xe6\x80\xd1\x94\x28\x6c\x7d\xe0\xfa\x10\x78\xf2\x66\xe0\x65\xd6\x67\x0f\x30\xe4\x37\x1b\x37\x80\xe7\x73\x9e\x63\x95\x20\x25\x36\x68\xf3\x66\x3d\x3f\xbe\xed\xa8\xb4\xf1\xba\x44\xc2\xd8\xfd\xa0\x60\xd3\x27\x9a\xb7\x6a\x4f\xee\x91\xc7\x5c\x47\x26\x17\x3f\x30\x12\x69\x4d\x24\xe2\x6d\x26\x62\xfc\x57\xb6\xb9\x9c\x16\xde\xe0\x77\xda\xf8\x48\x55\xd2\xa8\xf2\xa8\x39\xb6\xd8\x23\x2c\xe3\x36\x61\x30\x20\xda\x9b\xb6\xb3\x19\x11\x70\xd3\x41\x87\xd7\x60\xf7\xbe\xe0\x90\xbb\xc3\xe2\x9c\xb7\x16\xf0\x45\xd4\x08\x48\xce\x6d\xd6\xfb\x23\x4d\x5a\x36\x40\xa8\x27\x2a\x88\x04\xd2\x6a\x86\xce\x3f\x7c\x1f\xb7\x45\x73\x50\xa0\xa7\xe5\xd6\xc1\x38\x3f\xb0\x38\x4c\x62\xde\xfd\xb0\x89\x9e\xc2\x6e\x8b\xa2\xe2\xd2\xe6\x71\xc2\xba\x14\x0b\xcc\x18\x71\xce\x28\xaa\xc0\x93\x3d\x25\x84\x21\xde\x10\x03\xca\x8b\xea\x0c\x46\x92\xb2\x79\x45\x10\x56\x0a\x17\x8b\x63\xdd\x3b\xe6\xf6\x42\x97\x30\x69\x3f\x91\x4a\x10\x5c\x9b\x3d\x21\x48\x8d\xa9\x69\x1e\xe1\x42\x70\x29\x51\xdd\x56\x8a\x36\xfe\x65\x71\x5e\x44\x02\xa9\xeb\xd2\xe4\xcf\xb9\xb5\x82\xb4\x92\x2e\x33\x73\xd4\xf5\xd0\x0e\x9f\x87\x55\x55\xc0\x75\x36\xd2\xbf\x25\x75\xa3\x96\x48\x4f\x6d\x15\x9d\x1b\x33\xa3\x42\x2a\x54\x54\x94\x30\x65\x47\x66\xb8\xd1\xa0\x0f\x23\xa7\x4e\x33\x3b\x23\xd2\x4e\x09\x2b\xc1\xf8\x6e\x94\x44\x90\x81\xe8\x3b\xe1\x5e\x55\x52\x69\x7d\x1d\x72\x14\xb7\x76\xae\x84\x86\xd9\x38\x6e\x46\x60\xeb\x38\x05\xc7\xf4\xc8\x7e\x14\x74\x21\x28\x08\xac\x8f\xb5\x09\x89\xa4\xc9\x15\xa8\x73\xe1\xce\xf5\xa8\x97\x1c\xdd\xd9\x16\x90\x0a\xb3\x26\x75\x60\x43\x31\x72\xa7\xcf\x01\x29\x88\x56\x45\x71\x46\x21\xf3\xec\x32\x46\x61\x31\x27\xea\xcc\x8d\x3f\x36\x7b\x37\x87\xb4\x09\x2b\xa7\x87\x0e\xa2\x6e\x71\x60\x1d\x26\xbc\x04\x36\x89\x8e\xf1\x63\x53\x39\x77\x33\xae\x48\xdb\xeb\xe6\x91\x1a\xf1\xce\xa2\x32\x19\x5e\xbe\xa3\xb2\xc1\x05\x91\xe8\xf0\x62\x72\x36\x42\x93\x8b\xd7\x36\x8d\x8b\xcf\x56\xd9\xf5\x62\xa7\xc5\x5e\x82\xe6\xec\x3e\x56\xc0\xde\x57\xa7\x09\xba\x14\xd0\x6c\xd9\xfe\x4e\xbc\x51\x16\x3d\x33\xeb\x37\x01\x58\x68\xb4\x6e\x2a\xa8\x13\x89\x64\x0b\x96\x91\x0d\x5c\xe8\xad\x6d\xec\x11\x7b\x68\x49\x47\x70\x64\xc9\xe8\x23\x83\x38\xa6\x15\x3f\x5c\xbb\xe6\x10\xcb\x76\x13\x65\xf5\x00\x50\x98\x95\xfd\x95\xe7\x88\x81\x5c\x33\x0b\x15\x8f\xbf\xdd\x23\xdd\x61\x81\x11\xf5\x9e\x48\x89\xe7\x64\x12\x89\x03\xca\x71\xf6\x3a\x0f\x37\x00\x88\x3a\x79\xbd\x20\x86\x0a\x4b\xf1\xe0\x93\x30\xbb\x32\xf4\xda\xd4\x66\x20\x51\x3d\x70\x67\xeb\x5e\x50\xa5\x08\x5c\x0f\x50\xeb\x09\xb6\xee\x2a\xbd\x67\x3f\xab\x33\xaa\x3d\x3b\xe9\x61\x7b\x5a\xef\x67\xa5\xc9\x8f\x9c\x12\x34\x15\x94\xcc\xd0\x8c\x42\xc2\x26\xa4\x32\x8e\x4c\x9d\x02\x0c\x80\x79\x2c\x25\x11\x30\x6c\xeb\x8f\x73\xc3\x8f\xeb\xcf\x5f\xed\xf8\x95\x68\x59\x81\x83\x22\x9e\xc0\x3e\x46\x67\x68\x0e\xe9\x93\xd6\xfb\xf4\x87\x97\xff\xf9\x47\x34\x5d\x6a\x43\x09\xce\xa4\xe2\x0a\x57\xae\x03\xa8\x22\x6c\xae\x57\x11\x74\x9d\xb8\x0b\xbb\xc7\x60\xe5\x17\xa7\xa2\x35\x55\x66\x82\x5e\x7d\x73\x3b\x4d\xba\xf3\x40\x31\x39\x29\xc9\xdd\x49\xb0\x85\xc6\x15\x9f\xc7\xbd\xf5\xcc\x13\x3e\xb5\x4d\x19\x0b\x88\xc8\x7d\xa2\x79\x45\x8b\xe5\xce\xee\x53\xeb\x0a\x43\x0b\x7e\x6f\xbc\xa8\xeb\x47\x35\x20\x83\x69\x78\xd3\x56\x30\x71\xe8\x7b\xcf\xe0\xd7\x4a\xb2\x4a\x8e\x94\xea\x9d\x0f\xa4\x1d\xa0\x17\x6c\xb3\x2b\x57\xbd\xcd\x1d\x76\xdd\xe4\x96\x9a\xc2\x06\xbb\x7d\xa5\x92\x68\x37\xf8\xf7\xb8\xaa\xa6\xb8\xb8\xbd\xe1\xef\xf8\x5c\x7e\x60\xe7\x42\x70\xd1\x1f\x73\x85\xb5\x32\xbd\x68\xd9\x2d\xd4\xd9\xed\xe8\x6a\xf9\xdc\x82\x79\x81\x59\xb2\x3f\xb1\x51\x9d\x71\xa3\x34\x04\xa2\xce\x16\x70\xce\xef\xae\x65\xf2\x40\x3b\x0f\x37\x43\x44\xf7\x39\x5e\xc3\x09\xc7\x21\xc3\xa3\xfd\xcd\xcb\x3f\xfc\xc9\x08\x17\xc4\x05\xfa\xd3\x4b\xc8\xf5\x97\x23\x73\x01\x80\xea\xab\x6d\x9c\x1a\x57\x55\xac\x4e\x13\x8a\x80\xef\xa3\xcb\x57\xef\xc1\x91\x57\x3b\x3b\xdd\x9f\xed\xab\xb9\xb9\xf9\x1b\x68\x62\x54\x49\x52\xcd\x46\x86\x0f\xc6\xfb\x93\x0f\xc0\xac\x39\xb0\x57\x5e\x3c\x97\xd0\xee\xbd\x25\x77\xbc\x6a\x6b\xf2\x9a\xdc\xd1\x22\x0e\x39\xd0\x5b\x95\xde\xdb\x5c\x7c\xac\xa2\x12\x74\xc9\x69\xc5\x8b\x5b\x54\xda\x5f\x06\x39\x2a\xab\x75\xb7\xe3\x67\x21\x36\x5b\x27\x21\x4b\xe7\xd1\xf1\xf7\xf2\x73\x6a\xdc\x34\x5a\x8f\x06\x62\x2f\x81\xef\x7b\x93\x01\xa2\x09\xf8\x53\x13\x8d\x9e\x64\x14\x4b\x2a\x86\x65\x6c\x47\xa4\xaf\xa9\xe8\x57\x44\x27\xf5\xa4\x43\x60\xba\xde\xc7\x03\x08\x7a\x1b\xa2\x7b\xa1\x3b\x0d\x0d\xfc\xdb\x10\x9d\xac\x99\xea\xbe\xa2\x9a\xdf\x18\x46\x83\xd4\xdb\x07\x6e\x99\xf8\xb8\x41\x06\x14\x42\x5a\x72\x52\x6f\x5e\x98\x47\x7f\xd4\x58\x59\xfb\xc8\x79\x2f\x30\x6a\x88\x90\x54\x6a\xd5\xe9\x47\x38\x50\x67\x15\xa6\x75\x10\x37\xdf\xd5\x24\xac\xa7\xb2\xd4\xb8\x19\xdf\x92\x65\xe4\x86\x4b\x3c\x2e\x8f\x65\xd6\xd4\xb8\x89\xbc\x07\xa0\xb8\x6d\xfa\x35\x10\x79\x39\x4f\x78\x69\xfb\x01\xd7\x83\x29\x5a\xfc\x29\x33\x16\x5d\xb7\x53\x38\x53\xf0\xf5\xa7\xa5\x07\xcb\xaa\x3c\xed\xfa\xae\xfa\xb1\x5b\xf1\xfe\x55\xa5\x3f\xf1\x77\x95\xf9\xd6\xd7\x74\x43\xc1\xf8\xbe\xd4\x0b\xca\x77\x3e\x93\x1c\x4e\xc2\x26\xc2\xb5\x66\x77\x46\xff\x1e\xeb\x79\xc2\xcc\x91\x0e\x6c\x66\xeb\xa1\x3a\x36\xf5\x06\x12\x3a\xa0\x8f\xa2\x6d\x14\x1d\x7c\x77\xb0\xd3\xcb\xd1\xac\x8c\xe0\x0d\x9e\x83\x49\xbb\x0f\x0b\xb4\xda\xa7\x90\xde\x76\xc1\xef\x43\x91\xd9\xd8\x6f\x69\x89\xe9\x38\xd2\x17\x3c\x69\x75\x0c\xd6\xd7\xed\x08\x6b\x96\x9b\x2a\x11\xf7\x78\x89\xb0\xe0\x2d\x4b\x22\x2e\x80\x50\xa6\x0f\x75\xbf\x5f\x19\xec\x25\x67\xc4\xc1\x6a\x52\x5a\xb9\xe9\xb9\xbe\x01\x61\x44\x19\x7a\x75\xfc\xea\x65\x72\xdf\xaf\x48\xd1\x0a\x49\xef\xc8\x95\x2d\x9f\x1e\x84\x41\x2f\x66\x13\x2e\x25\x9d\x56\x90\x6a\xa9\x38\x3a\x37\xb5\xe5\xd7\x07\xea\xa1\x5e\x30\x62\x2e\x42\x22\xd4\x84\x1e\x1e\x9a\x13\x1c\x42\xb4\x75\x03\x09\x38\xad\xfd\x52\x41\x61\x5d\x57\x54\xd0\x4b\xaf\x82\x9a\x7b\x6f\xa7\x63\x75\x35\xf5\xf7\x41\x92\xbc\xb7\x41\x85\xae\x68\x3e\x75\x45\x99\xe1\xa3\x7b\x41\x95\x3d\xdc\xf7\x54\x12\x74\x08\xee\x8c\x95\xcd\x98\xc4\xfd\x1c\x3a\xbf\x12\x8b\xeb\xe7\xe0\x6e\x16\xab\x47\x77\x1f\x56\x69\x5d\x9e\x74\x39\x33\xf7\xd6\xf3\xd5\xad\xa0\x95\xfe\xdd\xbd\xbc\xc0\xac\xac\x92\x64\x86\x9f\x95\x6a\x99\xc4\x5e\x75\x31\x43\xa1\x48\xb4\x88\x83\x20\x08\xb9\xc0\x12\x31\x8e\x6a\x82\x01\x52\xad\x6f\x17\x27\x05\x7b\x34\xd0\xf9\xfa\x60\x36\xbb\xb9\xc6\xc2\x0b\xc1\x8a\xeb\xd7\x54\x5a\xf1\xac\xe5\x88\x35\x5d\x0c\x10\xab\xc6\x65\x0a\x19\x43\x30\xa7\xdd\xe2\x1d\x77\x30\xe7\xd5\x9e\x74\x17\xc7\x4a\x5f\x9e\xa2\x1f\x23\x5b\xdd\x5c\x37\x6f\x22\xcb\x1b\xfc\x79\x1d\xac\x2d\x09\x7f\x62\x9e\xd5\xe1\xfa\x6b\x71\x6d\xac\x9b\x7b\xec\x3b\x9c\xd0\x87\x4f\x0f\x75\x14\xc8\x42\x87\xea\x36\x20\x18\x5b\x5e\xc5\xe6\x28\xa7\x91\x84\xbb\x68\x86\xf7\x13\xcd\x09\x23\x02\xdb\x80\x84\x03\x75\xdb\x90\x3e\x96\x9c\xa5\x1e\x88\x4f\x6c\x38\x2d\xef\x3f\xad\xa6\x98\x3f\x4b\xe8\x08\xe8\x39\x87\x5c\xac\x9c\x76\x1b\x6a\xd9\xa4\xb1\xe4\x1c\xf5\x0a\x99\x9e\xd9\xfc\x01\x4b\xaf\x5e\x94\x7f\xb6\xf4\x0e\x57\xc4\xd0\xe3\x3b\xd1\xb0\x53\x65\x42\xb6\xd3\x7d\x35\x1b\xad\x7d\x08\x66\xc7\x66\xb4\xc4\xa3\x16\x64\x26\x7d\xe2\xc5\x0b\x74\x68\xda\x38\x30\xb4\xd8\xbb\x55\x72\xed\x5a\x9d\x3f\x34\x09\x45\x61\xf3\xad\xd7\xf9\x43\x83\x01\xe0\xd1\xec\xc5\xc2\xfd\x37\x59\xe0\x3b\x02\x2c\xe4\xb4\xc2\xa2\x82\x34\x92\x6b\x33\x65\x68\xda\x2a\x44\xd8\x1d\x15\x9c\x01\xa8\x0a\xe8\xa2\xb4\x64\x12\x64\x46\x04\x61\x05\x91\xe8\xb7\x87\x3f\x9e\x5e\x41\x9a\xe1\x11\x98\xbe\xc4\x8d\xaf\x95\x16\x05\xd5\x1b\x43\xf0\xba\x7d\xdc\x6f\xc8\x8d\x5d\x6f\x17\xd0\x4f\xdc\x5c\xe8\xb1\xd5\xad\x6a\x71\x05\x64\xed\x45\xd5\xea\xbb\x70\x67\x3b\x3b\xbf\xf3\x3c\xc5\x93\x97\xd3\x77\x6e\xa9\xfa\x5f\xd3\xa8\xe3\x9a\xe3\xa0\x9e\x05\xfb\x75\xad\x70\x40\x1a\x80\xb2\x4f\x1b\xbb\xa6\xe8\x1c\x48\x4f\x25\x1b\x66\xce\xd9\xbb\x38\x0e\xd7\x41\xe7\x0b\x65\xe9\x1a\x56\x70\x98\x01\xac\xb9\x8e\xc6\x8c\xed\x16\x00\x91\xef\x18\x44\x38\xa2\xf3\xec\xfa\x05\x97\xea\xb4\xa2\x58\x6e\xeb\xc7\x4e\xdb\xea\x6f\xbb\x66\x21\xdb\x8f\xd9\xaa\x8e\xb8\xf2\x10\x03\xdd\x33\x03\x73\xba\x98\x58\x2c\xba\xdb\x95\x94\xfd\x5f\x93\x75\xea\x03\x4a\x26\x1b\x14\xfe\x64\xcb\x9e\x18\xc4\xd1\x0c\x45\xd6\x1b\x8a\x8d\xff\x44\x45\x7e\x52\xc5\x8b\x9f\x75\xb4\xe0\x95\xcd\xbb\x76\x68\x86\x29\x51\xf7\x84\x30\x74\x31\x81\x39\xd7\x53\x69\x78\x19\x37\xcf\xbc\x55\x8e\x99\x12\x4b\x7b\xa0\xb7\xee\x4d\xb0\x66\xb0\x0a\xdb\x1e\xdd\x84\xf8\x53\x7c\xe4\x69\x8c\xe8\xb6\x97\x4a\x4a\xa4\xc8\x2f\x43\xf2\x6d\xf4\xd6\x2f\xa8\x63\xd3\xc1\x53\x7e\x47\x60\xbd\xcb\x52\x44\x66\x69\xef\x2c\xfc\x99\x5d\x81\x49\x22\xb2\xa4\x4d\xf2\xfa\x74\xeb\xe0\xa0\x24\x50\x9e\x19\xc4\x13\x1c\xb3\x67\x87\xf6\xc5\x53\xb6\xe7\xbc\x17\xb7\x3c\x6e\xf9\x6e\xc5\x8b\xc9\xd9\x73\xde\x88\x3f\x58\xef\x92\x6e\xfa\x40\x22\xda\x14\x5d\x5e\xc7\xb6\x4b\xdf\xe5\x32\x04\x74\x66\x11\x8e\xf6\x58\xe7\xfa\xa2\x2b\xd8\xf8\xdc\x4a\x05\x62\xa6\x5d\x7d\xa5\x59\x5a\x71\x0b\x1c\x01\xcf\x4f\xc3\xcb\xe3\xd5\xa9\xb6\x7f\x11\x3f\xdd\x10\xff\x33\x06\x67\x58\xaa\x72\xc9\x5b\x67\x2d\x1b\xe5\x62\x09\x4c\x3f\x12\x4a\x61\x2d\x08\x30\x63\x96\x6d\x65\xc0\xc4\xf8\x1e\x6f\x0f\xe4\x86\x86\xff\x11\xcc\xf6\x3f\x3a\xef\x76\x57\x54\x10\xbe\x30\xe1\x42\xfd\xc3\x38\xbe\xa4\xbe\xb0\x21\x71\x08\x32\x7f\xa8\xa9\xbe\x15\x44\xcf\xfe\xe1\x55\x73\xf8\xab\x6d\x13\x1e\xb5\xfa\x10\xb8\xf2\x3e\xb3\x7d\x6d\xe1\x5a\x79\x63\x5c\x9e\x1b\xfb\xb2\xed\x0c\xed\x6e\xff\x4f\x2e\x5e\xef\x50\x7c\x34\xb4\xfc\xb2\xc5\xc7\x0f\x72\xeb\xea\x03\x59\x27\x10\x8a\x94\xe6\x9d\xc1\x18\x68\xb9\xad\x4b\x6a\xff\x1a\x88\xc3\xb8\x42\x8d\x20\x92\x30\x35\xea\x87\x23\xfa\x69\x99\xa0\x3d\xf4\x47\x31\xd2\x3f\xcf\xda\x6a\x5b\x0b\x89\x8b\x80\x79\xc8\xd3\x34\x61\x4f\xb2\x02\xa1\x18\x7c\x87\x69\x05\xee\xb9\x80\x46\x77\xad\x03\x36\x7b\x6c\xcb\x1e\x54\x1c\x97\x10\x1a\x44\xb7\xfa\x6a\xaf\x50\xcd\xb5\xe0\x34\x69\x20\x67\xa7\x93\x5f\xae\xff\x76\xfd\xcb\xfb\x0f\xaf\x7f\x78\xb7\x35\xdb\x98\x49\xa1\x27\xdd\x16\x1f\x21\x8c\x18\xb9\x87\x9e\x33\x30\x4e\x0b\x1b\x0f\xf0\x2c\x94\xfa\x0e\xb9\xb6\xc9\x94\x26\x36\x6e\xa0\x29\xb3\xb6\xd2\x5f\xda\xb2\x07\x35\x55\x74\x8e\xe1\x65\x9d\x4b\x64\x2a\x08\xbe\xe5\xad\x42\x77\x6d\xc5\x88\xc0\x53\x5a\x51\x6d\x41\x20\x72\x47\x98\xc1\x43\xea\x3f\xd0\x9d\x0c\x8b\xf9\xd2\x6d\x1b\x0f\x6b\x3d\xdb\x2a\x92\x7a\x52\x75\xcb\xb8\xb0\xee\x46\xcb\xa6\x09\xbf\x6c\x04\xbd\xa3\x15\x99\x13\x4f\x53\x17\xc3\x96\xdc\x87\xe1\xe0\xaa\x59\xe0\x71\x45\xee\x88\xa1\xbb\xa2\xd2\xec\xa8\x05\x67\x5c\x98\xb8\x9c\x21\x6e\xb7\xb6\x28\x10\x00\x99\xc3\xea\x4a\x1b\x9b\x64\xdf\x6b\x97\x75\x6b\x93\x6d\x9f\x4d\x58\x6d\x8f\x64\x49\x93\x55\xd7\x1e\x09\xe0\x56\x20\xcc\x16\x9f\x6c\x0d\xaa\xde\xec\x1f\xec\xec\x73\x78\xbb\x93\x31\xf6\xb0\x60\x64\x40\xbb\x63\x57\x69\x0a\x08\x71\x62\xe6\x7c\x6b\xf3\xc4\x75\xe9\x83\xa5\xe0\x7a\x6e\x1d\x33\x6c\xbb\x5f\x42\xca\xd5\x14\xf5\xec\x60\xa1\xd0\x08\x27\x13\x4b\xd4\x10\x01\xec\x09\x21\x5b\x58\xc2\x41\xe2\x7d\x88\xc8\xa6\x36\x59\xe9\xf3\xcd\x11\x86\x62\xf3\x88\x2a\x89\x5e\x5f\x5e\x23\x41\x0a\x2e\xca\xad\x5d\x00\x7f\x35\xd7\xc2\x86\x40\x32\x06\xb2\x32\x93\xc6\x67\x99\x0d\xb7\x36\xfd\x2e\xd6\xab\x5f\xc3\xc4\x76\x8c\x6b\xd2\x55\x11\xfa\x87\x1b\xe5\x3f\x60\x98\xff\x90\xed\xb4\xe4\x35\xa6\x6c\x6b\x8d\x71\x0c\x99\x81\x93\x8f\xee\xfd\x8e\x92\x6e\xfb\xb7\xff\x43\x12\xe5\x36\xd1\xa9\xfc\xfe\xff\x7b\x7d\xf9\x8f\x8e\xdf\x8d\x56\xfa\x8a\x0f\xaf\xa3\x88\x06\x7a\xf6\x40\x3f\x50\xef\xde\x19\xbf\xcd\x3c\xcb\xa7\x1e\x3f\x2d\x61\xf3\xf8\xc9\xd6\xdb\xda\x89\x03\xca\xd0\xd5\xf7\x67\xe8\xd5\xab\x6f\x7e\x0f\x4b\xe2\xb0\xbd\x58\xa1\x5a\x6b\x06\x7f\xfc\x03\x2a\x16\x58\xe0\x42\x45\x00\xf8\xaf\x5c\xf2\x1e\x94\xf6\x58\x3d\x92\x21\xf9\x9b\xcd\x4d\x33\x77\x46\x94\x6f\x77\x6b\xf1\x04\xe1\x8c\x49\x5b\x55\xd7\xa4\x10\x64\xdb\x14\x8c\x34\xf1\x74\xb1\xd2\xf6\x63\xce\xf5\x20\x84\x0a\xa5\xb8\xec\x97\x59\x57\x6f\x27\x20\x95\xe8\x8a\x25\x34\x6d\x55\x19\x8c\xd6\xd2\xdd\x36\x30\x5a\x19\x24\xff\x51\xe9\x08\x4a\x62\x94\xdd\xde\x15\x24\x89\xef\x9a\x3b\x81\x0d\x96\xb2\x83\xc4\xdc\xd1\xb2\xc5\x15\x74\x0b\xe2\x48\x96\x7f\x03\x1b\x93\xd2\xca\xde\xda\x8e\x60\xdb\xee\x6c\xc9\xce\xd6\xa9\x52\x27\x66\x4e\x7e\x63\xad\x7e\xca\xe6\x63\xf8\x44\x77\xd3\x8e\x67\xcc\xd9\x18\x8f\xb7\x4d\x7f\xfa\xa2\x82\x0d\xef\x78\x81\xab\x0f\xe0\x9d\xbf\x72\xbb\xcd\x49\x01\x89\x08\xe3\xed\x7c\x01\xd3\x2b\x6a\xec\xc8\xbf\x2b\xa2\xc0\x6d\x62\x53\x77\x63\xa2\x0a\x7e\x67\x97\x36\x34\x10\xd6\x65\xef\xef\xec\x67\x0c\x38\xa4\xc4\x00\x62\x71\xd2\x39\x82\xd1\x97\x81\x5e\x69\x67\x36\x12\x39\xd1\xd7\xf9\x09\xa8\x1f\x0e\xce\x67\x82\x31\x23\x40\x7c\x94\xad\x91\xd9\xb8\xb8\xbd\xc7\xa2\x94\xa8\xe0\x75\x83\x15\x05\x0b\x68\x19\x8b\xf5\x73\x19\x64\xf6\x36\xd0\x6a\xc9\x31\xba\x60\x52\x61\x90\x81\x8e\xa8\x48\xaf\x70\x47\x2e\x00\xca\x8b\xe1\x79\x5c\x10\x41\x10\x16\x71\x98\x4b\x5c\xc1\x8d\x57\x10\xa1\xf7\x7e\xb5\x44\xf7\x82\xb3\x48\x92\x8f\x2d\x85\x92\x56\x97\xee\x28\xb9\x3f\xb1\x3e\xd1\xb1\x1e\xdc\xd8\x6c\x61\x79\x02\x27\xe1\xe4\x37\xf0\x7f\x5f\x4e\x74\x61\xc5\xc9\x5f\xe3\x26\x3e\x78\xf3\x15\x44\xf0\x29\xa3\x1d\x7b\xd9\xb3\x2a\x1b\xef\xac\x32\x61\x2b\x0c\xd1\x7f\x19\x39\x1e\xf8\x14\xa6\xa4\xe2\x6c\x1e\xd4\x56\x8a\xb0\x71\x2e\x18\x55\x3d\x3f\x05\xc0\xbc\x48\xd1\x1a\x00\x00\xe2\xa2\x04\xd6\x3a\x6a\x52\x6b\x7a\xad\x43\x11\xfc\x80\x2f\x0f\xb3\x6d\xc3\x94\xb4\xd7\x3a\x30\xae\xc8\xce\xef\x66\x88\x27\x5c\x1d\x12\xc5\xd1\x02\xdb\x92\xfd\x96\xd4\x8f\x4a\x87\xc4\x47\xb8\xd0\x26\xd6\xf6\x47\x45\xab\x3a\xca\x13\xff\x19\x42\x1d\x43\x79\x04\xa6\x89\x56\x72\x30\x5b\xed\x27\x38\x0a\x45\xdd\xa3\x47\xb3\xaa\xfb\x96\xcd\xb7\x8c\xfe\xb3\x25\x08\xd7\x5c\xeb\x7d\x55\x4a\xda\xed\xea\x4a\xd6\x78\x09\xb6\x28\x4c\xda\x3b\xc7\x64\x8b\x30\xd4\x02\x91\x23\x80\xec\xd3\xa0\xdc\xd3\x08\xbd\xeb\xd7\x7f\x1a\xe9\x71\x5e\x9b\xda\x2b\xf6\xa3\xed\x2d\x68\xa0\x48\xe3\xad\x28\x88\xb5\x2a\x6a\x4b\xf3\xb3\x61\x5a\xf5\xde\xd3\x26\x29\x33\xc8\x13\xbd\xa4\x90\x72\xdb\x0a\xd8\x69\x26\xa0\xb3\xfd\x12\x4f\x97\x68\xa6\xd5\x59\x8b\x58\x5c\xd0\xf9\x82\x48\xe5\xe2\x57\x27\x40\x4c\x63\x92\x9f\x71\xb1\xf0\xdd\x05\xf9\x1b\x50\x5a\x76\x90\xc7\x1a\x3f\x6c\x4f\x53\x04\xbe\x35\xcb\x6d\x6e\x4c\x6c\xd9\xd6\xee\xee\x5f\xdd\x4c\xf2\x18\xbd\xd3\xbd\x32\xc7\x11\x37\x4d\x45\x9d\x56\xde\x5b\xe3\xad\x4f\x1b\x90\x9c\x02\x18\x14\xcd\xb0\x5c\x50\xce\x52\x77\x59\x61\x20\x62\x45\x2b\xb4\xf2\x52\x2d\xc1\x7a\x2d\x4b\xad\x1f\x0a\x24\x48\xcd\xef\xb6\x47\x8d\x25\xc3\xce\xd2\x98\x9f\xf5\x24\x8f\x03\x7b\xe3\x0b\x31\x22\x4e\x3d\x7f\xad\xde\x2f\xc5\xca\x6d\x61\x36\xa0\xd6\xfe\x5d\x95\x6d\xd1\xb2\x2e\x59\x3d\xe2\xe6\xd8\x11\x40\x28\x22\xa5\x3c\xc5\x3c\xc0\x62\xbe\x33\x96\x87\x53\x31\x6f\x8d\xb8\xb4\xf7\x3b\x20\x55\x1a\x4e\xe3\xad\x84\x35\x60\xe8\x81\x44\x67\xef\x5f\x87\xa4\xfa\xca\xd6\x08\x30\xa1\x30\x53\x72\x21\xae\xb9\x1f\xf3\x42\xca\x41\xc5\xf0\x38\xf5\xa8\x1e\x15\x5e\xb2\x68\x31\x5f\xdd\x39\x67\xbc\xef\xa0\x73\xd2\x50\xd6\xb4\xca\x2a\xdf\x41\xed\xe4\x62\x81\xd9\x5c\x6b\x3b\xaf\x79\xab\x07\xf6\xdb\xdf\xc2\x20\x04\x29\xdb\x22\x32\x1d\xd0\x38\xfb\xcd\xc9\xfd\xad\x4b\xcc\xb1\x45\xda\xe1\x52\x92\x05\x6e\xdc\xd4\x84\xb3\x27\x97\x4c\xe1\x87\xef\x10\x3d\x26\xc7\xe8\xc5\x6f\x83\x5f\xbd\x80\x1e\x47\xf5\xa6\x11\x5c\x0f\xc5\x12\x5d\xc3\xe8\x2b\xaa\x80\x10\xe4\x45\xd8\xc2\x31\x3a\xd7\xfd\x82\x3c\x57\xbf\xb6\x01\x77\xf1\xb4\x5b\xd9\x11\x12\x64\x8e\x45\x59\x91\x48\xae\x48\x3e\xf3\x29\x99\xc6\x35\x6d\x77\x15\x79\xa0\x52\x49\x1b\xb5\x3d\xce\x03\x56\xfe\xdc\xbb\x43\x61\x79\xab\x6f\x0a\x2d\xfc\xc6\x25\x56\x78\x1c\x48\xdd\x13\xe3\xa5\x1d\x17\xbc\xae\x31\x2b\xc7\xd8\x9e\xe3\xee\x52\x39\xf9\x8d\x2d\x71\x33\xc6\xfe\x5b\x94\x8d\xf1\x58\x2e\x48\xd4\xca\x0d\x48\x41\x78\xec\x5c\xee\x4a\x60\x9f\x7b\xf9\x6c\x96\xe2\x18\x5d\x72\xd5\x99\x53\xfe\xb6\x85\x55\xce\x29\xc2\xcf\x2f\x6f\xae\xfe\x36\xf9\x70\x71\x79\x33\x48\xf2\x41\x92\xc3\x33\x48\xf2\x41\x92\x47\x34\xbc\x2f\x92\x9c\xb0\xbb\x5d\x49\x71\xe7\x78\xdb\x94\x1d\x69\x03\x7a\x6a\x2d\xcd\x6a\xe7\x09\x56\xbb\x26\x49\x3b\x67\x77\x3f\x62\x6d\xf2\x5b\xf8\x9c\xcd\x60\xd9\x90\x60\x6a\xbf\x60\xdc\x11\x67\x5f\x3c\x4b\xda\x0e\x39\xce\x32\x72\xfc\x24\xe5\x3d\x87\x71\xac\x4d\x4b\x9e\x92\xb3\xfb\x1e\x2f\x8d\x17\xd8\x1c\x4a\xcc\x96\xa8\x11\x94\x29\xd8\x4a\xa7\xd7\x67\x17\x17\x01\xd2\x01\x91\x87\x82\x34\x0a\x1d\xfc\x3f\xbb\xa5\x38\x03\x47\xdf\x3e\xac\xcc\x36\x8a\x5b\x42\x33\x9d\xca\xd7\x08\x72\x47\x79\x2b\xab\xa5\xc7\xaa\x6c\x96\xa3\xeb\x4c\x78\x89\x04\x1f\x06\xc7\x48\x8b\xcd\x5b\x50\xae\x28\x9d\x9b\x14\xc8\x84\xe6\x77\xac\x7a\xda\x4e\xe4\x50\x40\x13\xda\xdf\xa0\xba\x7e\xbe\x1a\x9a\xd0\x6e\x94\x02\xfb\x98\x32\x9a\xd0\x8f\xbe\x1a\x9b\xf0\xa2\x3e\x03\xc2\xee\x25\xd9\xf7\x82\xd7\x99\xa4\xd9\xb5\x09\xae\x38\xe0\xe6\xa6\xa3\x7a\xe0\xd0\x7f\xa1\x7a\x64\x4d\xda\xae\x52\xad\x36\xac\x01\x68\x90\x38\x3b\x49\x95\xec\xf3\x14\x93\x47\x36\x7f\xff\x3d\x6e\xfe\x42\x96\x57\x24\xb1\x26\x77\x7f\xbe\x49\x45\x0a\xad\x8c\xa1\x5b\xb2\x34\x84\x7d\x67\xae\xb1\xb4\xb2\xe4\x59\xa6\x0f\x65\x50\xc1\xdc\x33\xd6\x43\x4c\x7a\x47\x9e\xc5\xd4\xcf\x2d\x49\xa0\xb9\x73\xcf\x0a\x09\x23\x81\x25\x04\xfb\x43\xaf\x69\xda\xea\xa1\x3c\xe2\xc1\x3d\x69\x9a\xa8\x7b\xf2\xe9\x3d\xee\xc9\x87\xb0\xea\x3f\xbb\xc5\x5b\xf5\x9f\x9d\xa2\xaf\x56\xbb\x92\x0f\x8b\xd5\x7f\xf6\x09\x99\xd5\x7f\x32\x9e\xa2\x14\xd4\xd6\xea\xe3\x40\xc9\x99\x4f\xe5\xb5\xcd\xb5\x0d\x55\x27\x7f\xa1\x20\x53\x06\x06\xe4\x94\x83\xb2\x5b\x2b\x20\xd3\x34\xa7\x51\x91\x9a\x27\x1f\xbe\xad\xff\x80\x38\xc8\x7b\x7b\x27\xcb\xc0\xee\xfa\xb7\x79\x2c\x33\x87\xae\xfa\xce\x71\x33\x4a\x54\x13\x85\x4b\xac\xf0\xb1\x3e\x10\xa3\xfe\x8f\x36\xb3\xf0\x1f\xfe\xc3\x0a\x4f\x49\x25\x7f\x3a\xf8\xaf\xbf\x9c\xff\xed\xff\x3d\xf8\xf9\x1f\xe1\xef\x40\x5d\x33\xf0\xf0\xe0\x0b\x89\x43\x80\x6a\x92\x8c\x97\xe4\x12\x7a\x07\x3f\x5a\x4b\xef\xd4\x20\x84\xec\x2f\xa0\xa2\xd7\xb1\x21\x17\xf0\x3f\x36\xbc\x5c\xfd\x29\xb2\xa0\x81\x7b\xf6\x50\xef\x81\xb5\x4d\x20\xea\x37\x4f\x3e\xed\x07\x37\xf4\x47\x22\x64\x12\xb7\xbb\x7b\xfa\x95\x18\xcc\x5b\xdd\x36\x96\xc5\x82\xd4\x18\xfe\xf9\xbd\x9b\x02\x7d\x1f\xfb\x9a\x8b\x0c\x4a\xa7\xe9\x3b\x70\xd4\x23\xbb\x7c\x71\xf7\x2a\xc9\xe2\x34\x4f\x46\xc9\xef\x57\x30\xf3\x84\xc1\x8c\xd8\xd9\x32\x12\xc0\xeb\x8f\x3e\x1f\xc5\x53\x09\x9c\x4e\x2e\xd0\x9d\x99\xe1\x3d\x9a\x9c\xa7\x13\xd7\x15\xc9\x6e\x6e\x25\x0b\xec\xef\x7d\xaf\xec\x32\x05\xa6\x9b\x35\x98\xa3\xe8\x9c\x56\x9f\x5e\x8e\xd7\x39\xbb\xd3\xed\xca\x6c\xb9\x5d\xab\xcf\x1e\xca\xcc\x54\x5b\x51\xbf\xa3\x49\x15\xb9\xfa\x25\x86\xde\xf2\x32\x36\x8a\xe0\x9e\x7d\xb6\x5d\xb3\x98\x72\xce\x00\x0e\x68\x55\xfd\x61\x40\xa7\x5a\xd8\x9b\x9c\x49\xf3\x1d\x70\x3d\x92\x3b\xc2\x94\x87\x93\xdb\x2a\xeb\x58\x28\x9a\xc7\x26\xb1\x3d\xea\xb2\x32\x3b\x80\x87\xf1\x72\xd5\xcf\x1e\xbb\xe8\x9e\xd7\x06\x35\x7d\x5a\x35\x0b\xac\x47\x3d\xf7\x76\xf0\xc6\xd3\x6e\xd0\x13\x7a\xee\x24\xfd\x17\x59\x29\xd8\xf9\xea\x9b\x3f\x25\xa4\x93\xae\x3f\x19\x2f\xce\x27\x32\x73\xb2\xec\xd8\x4d\xb6\x12\x30\x8e\x3d\x6e\x26\xf9\x12\xe6\xee\x7b\xe9\x62\x0a\xc6\xe6\x12\xd3\xc1\x45\x3d\x0a\x0a\xbd\xb3\x3b\x74\x87\x85\x47\x09\xb5\xd3\x8a\xca\x45\xaa\xb8\x37\xcf\xc5\xac\xcb\x8c\xed\x52\xd7\x81\x69\xc5\xd5\xb8\xe9\x74\x0f\x3d\x17\x2b\xbd\xcc\xd0\x85\xc7\x5c\xcc\x7d\x86\xf9\x2e\x9c\x6f\x12\xd3\xc3\x1c\x8c\x27\x9b\x07\x43\x6d\xf2\x5c\x13\xb1\xc6\x7f\x2f\x88\x6a\x85\x96\x59\x36\xbb\x62\xc2\x4b\x43\xc5\x92\x51\xf9\xcb\x61\xac\xa3\xd0\x29\x02\x73\x96\xf8\xba\x26\xbf\x92\x9d\xed\x7a\xfb\x0c\xda\x70\xaf\xbd\x3b\x21\x91\xc5\xb9\x66\x85\x90\x20\x15\x56\xf4\xce\x6c\x4b\x97\x3f\xe4\xa8\x05\x74\x83\x07\xc7\xc7\x07\xa6\x97\x5c\x98\xab\xd4\x78\x14\xf5\xe7\x7b\x75\x2d\x74\x4a\xd5\x13\xb8\xe1\x43\x3a\x18\xbb\x44\xa6\x9c\x86\x9d\x2a\x17\x62\xcd\xa5\xab\x7f\x01\xc6\x94\xcb\x9a\xfa\x7e\xaf\x7d\x60\x3e\xb7\x6b\xb5\x9c\xec\x77\x86\xe0\xc5\xfd\xde\x2a\x3f\x86\x1f\xd9\xe6\x89\xa5\x3a\x8a\x0f\xcd\x2b\x8f\x8b\xa6\x1d\xd9\xd7\x1f\xd7\xa4\xe6\x62\xe9\x7f\xf4\xc5\x37\xc7\x52\x71\x81\xe7\x50\x32\xca\x34\x6e\xfe\xcc\xff\x64\xfe\xb0\xd7\xbd\xf5\xbf\x36\xe8\x8e\x2e\x33\xcb\xd7\x62\xf9\xea\x6c\x39\xb7\x6e\x7b\x62\x40\xf9\x6d\xf5\x04\xf2\xe7\xc0\x03\xe6\x4c\xcc\xcd\xcf\x22\x84\xd4\x6d\x4d\xd8\x51\xa7\x70\x00\xee\xc3\x28\x79\xf2\x60\x7f\xe4\x10\x42\x25\xbd\xa3\x92\x27\x94\xed\xf0\x2f\x5a\x0f\x4f\x38\x8a\x26\xde\xaa\xa6\x85\xdc\xce\x1a\x2b\xef\x41\x79\x68\xb8\x04\xb4\x88\x3d\xec\x2b\xae\xc1\x57\xa9\x91\x17\xd0\x31\x14\x11\xec\x3b\xf4\x3f\x87\x7f\xff\xdd\xaf\xe3\xa3\x3f\x1f\x1e\xfe\xf4\x72\xfc\x9f\x3f\xff\xee\xf0\xef\xc7\xf0\x8f\xff\x38\xfa\xf3\xd1\xaf\xee\x87\xdf\x1d\x1d\x1d\x1e\xfe\xf4\x97\xf7\x6f\x6e\x26\xe7\x3f\xd3\xa3\x5f\x7f\x62\x6d\x7d\x6b\x7e\xfa\xf5\xf0\x27\x72\xfe\xf3\x67\xbe\xe4\xe8\xe8\xcf\xbf\x4d\xee\x3a\x66\xcb\x0f\x89\xd2\xdb\x3c\x63\xbb\x59\x28\x53\x64\x4e\xb6\x65\xce\xfb\xd8\x1b\x33\x85\xda\x7a\x57\x21\x65\x6a\xcc\xc5\xd8\x72\x69\x81\x91\x92\xd8\x80\xdb\x5e\xb9\xcf\xff\x95\x93\x9a\x41\xa6\xb2\x53\x0a\xf7\xe8\x80\x3f\x95\xa2\x61\x18\x7e\x9e\x03\x26\x63\x5a\x0a\x6a\xa9\x1f\xc8\x8e\xdc\xe6\x6b\xbb\x41\xff\x1d\x90\x33\x2e\x68\x64\xd6\xb5\xb3\xa4\xb4\x79\x75\xdc\x19\x41\x8e\x7b\xcd\x7e\xef\x96\x24\x40\xcc\xdc\x33\x20\x6d\xa2\x9f\x01\x69\xf3\x48\x57\x06\xa4\x4d\xd2\xf3\x45\x22\x6d\x0c\xef\xe0\xbf\x27\xcc\x26\x7f\x55\xb4\xc8\xcc\x9d\x9c\x05\xd1\x08\xbb\x8b\x05\x57\xe7\x4c\x75\x73\x6e\x0f\xc5\x51\xc3\x9b\xb6\xc2\xea\x91\x2c\x8a\x4c\x79\x6f\x7b\x16\x39\x03\xa2\x5d\xa3\xfa\x59\x0c\x3f\x65\xa8\x6e\x2b\x45\x9b\xc8\x84\x00\x6f\x5a\x7a\x32\x5d\x84\xa5\xe4\x05\xc5\x2e\x11\x1c\x7e\x53\x61\xa9\xdc\x90\xc1\x33\xaf\xf0\x2d\x09\x08\x79\x63\xb3\xb5\x81\xbc\xd7\xcd\xed\x74\xa9\xef\xa1\x73\x76\x67\xef\x24\x54\xb6\x26\xc1\x95\x74\xb1\xd2\x2c\xed\x7e\x5d\xd9\x8c\xfa\x5c\xda\x6c\x85\x20\xa9\x11\x34\x48\xef\x44\xc4\x10\xcd\xe1\xb3\x0e\x02\x09\xe9\x1f\x96\x1e\x36\xaa\x1b\xc9\xc6\x41\xba\x2a\xee\xb3\x11\x92\x6c\xac\x35\x1d\xbc\x83\x89\xf6\x75\xef\xe8\x16\xf6\x28\x81\x23\x5d\x2b\xcf\xab\x91\x3f\x85\x36\xbe\x2f\x9a\xf8\x9e\x68\xe1\x4f\xa3\x81\xef\xa7\xf6\x9d\x4d\xf3\xce\xa3\x75\xe7\xd1\xb8\xb7\xc0\xb5\xe7\xd4\xb2\xf3\x68\xd8\x4f\xe1\x5f\x6b\x04\x99\xd1\x87\x7d\x48\x5b\x76\x15\x7e\x90\x22\x0f\xe0\xaa\x69\x04\x69\x08\x2b\x1d\x11\x9a\x8b\xc0\x02\x63\xe3\x90\x71\xee\xfd\xa2\x79\x2f\xec\xeb\x4d\x9e\xb2\xe1\xb6\x46\xc3\x6d\xbd\xc5\x33\xdc\xd6\xc3\x6d\xfd\x2c\xb7\xb5\x95\x56\x5f\xff\x55\x9d\xbb\xba\x6e\x8d\xe7\x3b\xab\x80\x70\xd6\xa7\xb2\x03\xc9\xfc\x2c\xd4\xfd\x6b\xf5\x44\x22\xfd\x58\xa1\x90\xf5\xa0\x0b\xc5\x8d\xd8\x33\x5c\xd3\x02\x99\xea\x6b\xc6\xac\x46\x35\x66\x78\x0e\x34\xd8\xfa\x7b\xf6\x88\x21\x2e\x7c\x55\xab\xa8\x9e\xac\x70\x02\x82\x07\xcb\xf1\x1a\xc3\x2f\x05\xaf\x2a\xad\xaf\x54\xf4\x96\xa0\xd7\xa4\xa9\xf8\xb2\xb6\x34\x4d\x25\xba\x56\x58\x91\x59\x5b\x5d\x13\x95\x50\xa8\x3a\x52\xe2\xf8\x8a\x3e\x86\x7d\x7d\x57\x5b\x11\x8a\xfb\x40\xb1\x1b\xd4\x18\x1a\xf8\xa8\xd7\x7c\x60\x70\x95\x9f\x56\xf7\x78\x29\x47\xe8\x92\xdc\x11\x31\x42\x17\xb3\x4b\xae\x26\xc6\x89\x14\xf7\xde\x90\x13\xc4\xbc\x1c\xd1\x19\xfa\xae\xc2\x8a\x48\x85\x14\x9e\x03\xb6\xb8\x2b\xf0\xc3\x45\xaf\x51\xc4\xb5\xa0\xbc\xa7\xdb\x17\xea\x31\xcf\xb3\x72\xf2\x7d\xa4\xea\x0f\xb4\xee\x6b\xfe\x3c\x7b\x5d\x8d\xca\xf1\xe8\xef\x8c\x13\xda\xd0\xf7\x1b\x3a\x6f\xc3\x46\xef\xc5\x89\x29\x19\xe8\xaa\x22\x83\x4b\x97\x32\x24\x88\x6c\x38\x93\xa4\x57\xbe\xa1\x1b\x08\xd4\xbc\x8c\x3b\xf5\x59\x3d\xbe\xd1\x86\x41\xaa\x49\xd0\x70\xa9\xa0\xca\x41\xac\x7e\x92\xcb\x16\x98\xb8\x8e\x40\xe1\x0b\x5c\x55\xa4\x44\xb4\xae\x49\x49\xb1\xd2\x7a\x3b\x9e\x29\x22\x10\x0e\x45\xbd\x2f\x9f\xea\xf3\x46\x4c\x3d\x0c\x57\x4a\x23\xde\x58\xeb\xd3\xcc\x4a\xc8\xa3\xa5\x0c\xa2\x17\x06\x75\x6a\x0b\x7f\x74\x85\x37\x56\x4a\x69\x24\x09\x51\xfd\x7c\x00\xcd\x2e\xd8\xde\xab\xa0\x5d\x34\xad\x78\x71\x2b\x51\xcb\x14\xad\x6c\xad\x4e\x7e\x0b\xf6\x4b\x05\xe2\x24\xba\xe9\x78\x29\xe5\xff\x39\xf6\x07\x6c\xac\x7b\x25\x4f\x7e\xd3\xfd\x0a\x3e\x88\xec\x5c\x06\x2b\x3a\x87\x0d\x4d\x1e\x48\x91\xa2\xcf\xf7\x83\x2d\x0f\xa4\x08\x2b\x7d\x3a\x1a\x67\xbd\xa3\x2c\x79\x72\xa6\xb8\xa3\x79\x32\xe1\xaf\x72\x61\x9e\x12\x48\xab\xc3\x27\x37\xa4\xe7\xcc\x2e\x02\x95\x76\xe6\xcd\x8f\x15\x65\xa4\xbf\x30\xbe\xfe\x9b\x5f\x1c\x13\xf6\xb4\x46\x2e\x2a\xa9\x20\x85\xe2\x62\xe9\x58\xbf\x92\xbb\xe6\xfa\xa2\xfb\x06\x85\x93\x0f\x0f\x4e\x0e\x8e\xd6\xf6\xc8\x81\x84\xf4\x0b\x73\x2d\x1e\x5b\xea\x6c\x3f\x28\x49\xeb\xa6\x5a\xc2\x38\x0e\xca\x11\xa2\x2a\x07\x46\x48\xdf\x86\xa6\x4c\x38\xcc\x8a\xa5\xfa\x1e\x21\xc9\x91\x12\xb8\xa4\xd6\x40\x80\x4f\xf5\x97\x94\x68\xed\x85\x7e\x78\xf0\xeb\xc1\x08\x11\x55\x1c\xa1\x7b\xce\x0e\x14\x4c\xdf\x31\xba\x81\xe2\x8a\xe9\xb0\x5e\xd7\x91\x25\x6f\xa1\xc2\xb8\x59\x42\x53\x4f\xb7\x5a\xc2\x75\x83\x78\x6b\xeb\xaf\x62\x95\x42\x51\x1e\x3e\xe7\x0f\x54\x59\xf2\x0d\x2d\xbf\x5f\xc2\x6e\xb2\x15\xbf\xb1\x36\x46\xee\xc8\xc9\x82\xe0\x4a\x2d\x4c\x36\x03\xe3\x6c\xfc\x2f\x22\x38\xd0\x98\x33\xfb\x9b\xd4\x6e\xa4\x85\x94\xc3\x27\x21\xbc\xbc\xde\xa1\x2c\x40\xa6\xcc\xce\x00\xf7\xe8\x6b\xef\x0d\x89\x56\x89\xd0\xaa\x3c\x7a\x7b\x73\x33\x79\x43\x54\xbf\x9e\xb3\xfe\x10\xbd\x39\xbf\x71\x39\x2c\xe0\xe8\x27\x62\xc6\x45\xbd\x07\xe2\x3d\x0f\xb8\x76\x8c\x1a\x2e\xf6\xe1\x96\x59\x70\x99\xb4\x9c\xe8\x09\xae\x98\xb7\x5c\x2a\x13\xcb\x31\xb6\x09\x83\xc4\x46\xde\x4f\xc8\x70\xe9\xfb\x17\x93\x63\xf4\x37\xde\x42\x25\x32\x3c\xad\x96\xbe\x90\x91\x24\x69\x28\x6a\xfd\xbc\xd0\x5d\x79\xa1\x6f\x10\xbd\xf3\xdf\x12\x5c\x12\x21\x41\x40\x13\x9c\x9c\x0c\x9d\xed\xb8\x07\x7d\xcb\xba\x94\x67\xad\x54\xbc\x46\x0b\x3b\xec\x3e\xc5\xb9\x3d\x9c\xc7\xe6\xb8\x5a\x3a\x59\x41\x1a\x23\xc4\xed\xdf\x7c\x75\x22\x7a\x4d\x7a\x99\x79\xb7\x9f\x4f\x8d\x9a\x1a\x4e\x9b\x0d\x70\x18\xa2\x52\x2b\xdb\x4c\xd1\xbc\x4c\xd7\x45\x86\x7c\x01\x94\x31\x67\x00\xa5\x91\x9f\xaf\xbe\x08\x82\x3d\xc9\x6f\xca\x97\x86\x80\xb2\x41\xed\xd1\x93\xc0\xed\x91\x45\x51\xda\xcd\x67\x7c\xd0\xf1\xde\xf3\x4d\x2f\xa7\x5d\x5d\xf0\x02\x33\xce\x68\x81\x2b\xfa\x2f\x52\xa2\xb6\xe1\xcc\xe6\xd6\x81\x66\x5b\x60\x49\xc6\x10\x79\x67\x46\x9c\xcb\x80\xed\x5a\x4b\x07\xc5\x39\xa8\x7b\xbe\x48\xb4\xe9\x75\x9e\xae\x66\x45\x85\x27\x53\xb7\x87\xcf\x5a\x40\xbd\xb7\x58\x79\x76\x3c\xfa\x22\xd4\x49\x94\x89\x78\x61\x9d\xdb\xcc\xd4\x09\x05\x3e\x6f\x73\x5d\x81\xe0\x95\x44\xdc\xa5\xef\xaf\x6c\xf3\xaa\x55\xc0\x7d\xd3\xbd\x0c\xe6\x40\x20\xd6\xd6\x53\x22\x3a\x62\x48\xa1\xd6\xe7\x34\x8b\xd7\xc5\x36\x6b\x9a\x73\x51\x5a\xa7\x63\x60\x36\x27\xe8\x95\x6e\xf9\x8f\xdf\x7e\xfb\xfb\x6f\x33\xb4\xa3\x87\xe7\x5a\xc1\x0c\x5d\x9c\x5e\x9e\xfe\x72\xfd\xe3\x19\xd0\xcd\xa7\xbe\x3e\x53\x92\x6c\xee\x14\xd9\xac\x09\xb2\x4f\x9a\x1e\x0b\xc4\x8d\xc9\x52\x36\xf7\x91\xb8\x86\x5e\xe9\x4d\xd8\x4a\x43\x51\x6f\x6d\x92\xa0\xc4\xb6\x36\xa3\xd2\x77\x67\x18\xcc\xd3\x02\x6b\x2f\x24\x95\xac\x08\x69\xb2\x59\xfc\xd7\xfa\x6d\xbd\x72\x40\xa8\x6c\x85\xa9\x4a\xeb\x83\x57\x9d\x2f\xdf\x06\xad\xa0\x0f\x5f\x91\xf1\x2f\x49\xc1\x59\x99\x62\x02\xe4\x52\x69\x6d\x4f\xb2\x9e\xb9\x6b\xf3\x4e\xe7\x22\xee\xae\x12\xdb\x18\x58\x92\xa9\x2b\x8a\xfc\xaa\xe6\x91\x93\x86\x0d\x02\xde\xf6\xc7\x3f\xc4\x07\xc8\x8a\xe6\x9a\x17\xb7\x19\x5d\x64\x89\x02\xec\xb5\x3e\x69\x85\x89\x05\xde\x9c\x4d\x4c\xe7\xf4\xca\x5c\x7e\xb8\xe9\xa8\x5f\xb4\x16\x8e\xbb\x6a\xf0\x6f\x6d\xb4\x10\xb3\x12\xdd\x92\x26\xcd\xba\xd4\x02\xd3\xc1\x08\xfb\x28\x42\xf0\xbd\x0b\x5b\xb7\xc3\xa4\x57\x1b\x41\xe0\xd0\x7f\x46\x23\x4e\xab\x00\x14\x04\xe7\x21\x10\x68\x8d\x90\x19\xa6\x15\xc2\xe0\x95\x57\xb4\x26\xe8\x7e\x41\x98\x71\xf6\x77\x68\x89\xaf\x48\xe0\x7c\xad\xde\xc6\x03\x07\x09\xff\x6e\x6b\xaf\x61\x2a\x2b\xc6\xd7\x6d\x06\x58\x99\x2d\x7a\xac\x66\x83\x19\xf0\x39\xcf\x60\x06\x44\x9a\x01\x8d\x20\xd7\x8a\x47\xeb\x9a\xd9\x00\x37\xa6\x1b\x8f\xc0\x6d\xa6\x64\xc6\x05\x59\xc5\xdb\x04\x38\x18\x8b\x9c\x4f\x40\x06\x9f\x4e\x2e\x7c\xec\x8b\xf7\xb0\x2e\x86\xb9\x58\xb6\xc5\xc2\x85\x49\x19\x91\xf2\x04\x90\x35\x6d\x63\x1c\xcb\x70\xb5\xb5\x82\xc4\xa3\x7c\x1a\x41\x48\x0d\xf3\x38\xea\xd8\x84\xf4\x70\x09\x33\x1f\x12\x55\x98\xb8\xb9\x83\x15\x59\x9e\x58\x37\x5d\xb3\xa4\x70\x7e\x37\xb1\x85\xc0\x72\x41\x20\x77\x96\x3c\x50\x25\x4d\xa3\x86\x8d\xd5\xcd\xb8\xd6\x17\xe6\x02\x17\x04\x35\x44\x50\xae\x55\x8c\x96\xa9\x92\xdf\x33\x34\x25\x73\xca\xa4\x5b\xb1\x94\x2e\xb9\x2d\x01\x48\x22\x2a\x7d\xed\xee\x63\x74\xd5\xab\x1c\x67\xd9\xc5\x0a\xde\xc9\x4c\x3b\x45\xa3\x4c\x53\x02\xca\x0b\x6c\x83\x16\x57\xd5\xb2\xdb\x78\x21\x41\xe8\x23\x33\x14\xbf\x21\xcc\xcc\x1e\xb6\x0c\x06\x5a\x92\x0a\x2f\x4d\x06\xf9\x8c\x32\xf0\xfe\x0a\x79\x74\x9c\x0e\xcd\x8a\xee\x20\x17\xc1\x3b\x1f\xdd\x19\x54\x22\x41\x70\x91\xc4\x63\x3c\x60\xc0\x3e\xf5\x0c\x18\xb0\x01\x03\x36\x60\xc0\xd6\x9f\x01\x03\xd6\x7f\x06\x0c\xd8\xe3\x1d\xda\xe7\xa0\xdd\x80\x01\x1b\xbc\x32\xeb\xcf\x80\x01\x8b\x7a\x06\x0c\xd8\x27\x9f\xbd\x13\xd1\x03\x06\xec\x33\x9e\x01\x03\xf6\x99\xcf\x80\x01\x1b\x30\x60\x03\x06\x6c\xc0\x80\x25\x3c\x03\x06\x6c\xfb\xe1\x0d\xc1\x9f\xf8\x67\xc0\x80\x0d\x18\xb0\x2d\x9f\x01\x03\xb6\xf2\x0c\x18\xb0\x01\x03\xf6\xb1\x67\xc0\x80\x0d\x18\x30\xfb\x0c\xde\xc6\xb5\x67\xc0\x80\x6d\x78\x06\x0c\xd8\x76\xed\x0c\x66\x40\xda\xcb\x9e\xc4\x0c\x90\x8a\x37\xd7\x74\x9e\xc0\x0b\x99\xeb\x18\x5c\xfb\x9e\x58\xd2\x48\x69\x8b\xed\x4a\xf3\xa1\xf3\x63\x49\x4b\xd9\x17\x22\xc2\x82\x9b\x64\x4a\xb4\x89\xa0\x87\xd5\xa4\xdc\x26\x17\x33\x08\x20\x07\x4c\x6e\xfa\x54\x38\x9a\x40\xda\x2b\xeb\xd0\x57\x9f\xdd\xed\x46\x99\xb6\x5d\xe2\x7b\x10\xcc\x47\x81\x99\xa9\x8c\x6a\xcb\x64\xeb\xeb\x7d\xc2\x4b\xe9\x2a\x49\x30\xce\xc6\x86\xac\xf5\x58\x77\xf8\x98\xcb\xe3\x04\x6f\x70\x22\x33\x9b\xc1\xc8\x4d\x04\x9f\xee\x8c\x9d\x6d\x02\xf8\x23\x5a\x58\x80\x1e\x9f\xf5\x18\xd7\x4c\x07\x23\x99\xd6\xfa\xc0\x30\x28\xd6\xec\x28\xb8\xa8\x15\xd8\x1e\x14\xb8\x4b\x36\xb7\xad\x91\x53\x8e\xa5\x52\x9e\x34\xdc\xfc\xa7\xc3\x4d\x05\x80\xa9\xe8\x38\xca\x8e\xe9\xe5\x52\x50\x52\x3b\x43\x48\xed\x09\xc2\x2c\x03\x2a\x2a\xa7\xae\xb4\xa7\x68\xa8\xfd\x44\x42\xed\x23\x0a\x6a\x17\x08\xa8\x9d\xa3\x9f\xf2\x84\xd5\x33\x84\xd4\x33\x69\xa4\x4f\x10\x9e\xb2\x40\xfa\x9b\x85\x20\x72\xc1\xab\x68\x81\x93\x4b\xd8\xbc\xa7\x8c\xd6\x6d\x0d\x55\x28\xb4\x4c\xa1\x77\x1e\xec\x2f\x9d\xc8\xb0\xd7\xbd\x41\x1c\x40\xb9\x8a\x92\x40\x19\x70\x4c\x2b\xbd\xb5\x80\x2c\x74\x81\xef\x40\x29\x6d\x8b\x82\x90\x32\x45\x2d\x0d\xbd\xd5\xbf\x3f\xf6\x3d\x34\x1c\xfd\x54\xa2\x57\x69\x57\x4d\x9a\xdd\x13\xb8\xf3\x7e\xff\x4d\xd4\x3b\xe6\xa2\xc9\x73\x4b\xbf\xb9\x9a\x9c\xf5\x6e\x69\xf8\xe0\x2d\x1c\xe3\xb3\x05\x29\x6e\xaf\x2c\x94\x66\x77\x37\x73\xba\x9b\x29\xc9\xc5\x94\x43\x31\x48\xf5\xa2\xf4\x63\xc8\x5c\xa8\x95\x10\xe8\x1c\x56\x91\x88\x3b\x5a\x90\xe3\x67\x70\x54\xe4\x32\xfe\xd3\x0f\x02\x82\x30\x01\x0c\x7c\x5f\xd4\xae\x6b\xd3\x1d\x1f\x61\x08\x7c\x54\xb6\xa7\x00\x1a\xad\x70\xe1\xd7\x66\xbe\xf9\xd0\x25\x75\xe3\x50\x12\xe2\x0d\x9a\x39\x55\x8b\x76\x7a\x5c\xf0\xfa\x44\x8b\x0e\xf3\x9f\x69\xc5\xa7\x27\x35\x96\x8a\x08\x6d\xe3\xd8\x6b\x7d\x5c\xe8\x1e\x50\x36\x3f\xae\xcb\xa3\xe3\xff\x95\xd4\x87\x0b\xeb\x2b\xb7\x69\x58\x8f\x38\x09\xa6\x44\xcb\x7d\x2e\x56\xbc\x05\x7a\x52\xd2\x37\x69\xf2\xfd\x9d\x5a\x54\x24\x11\x96\xbc\x13\x48\xf2\x20\xb5\x51\x86\x80\x40\x4e\xa1\xb2\x1f\xb0\xe3\x27\x83\x1c\x67\x39\xab\x99\xa0\xc6\x7b\x04\x33\xde\x1b\x5b\x68\x5f\xa0\xc5\xd9\x60\xc5\xb9\x20\xc5\x59\xe0\xc4\x39\xa0\xc4\xf9\x60\xc4\x79\x20\xc4\xf9\xe1\xc3\x4f\x06\x1d\xfe\x22\x60\xc3\x19\xe3\x63\x99\xe0\xc2\xcf\x01\x15\xde\x5f\x1f\x0c\xca\x00\x0f\x7e\x3e\x68\x70\x96\x79\xcc\x6a\xc5\x26\x8a\x84\x1d\x40\x81\x9f\x23\xfe\xff\x64\xb1\xff\x0c\x71\xff\x9c\x31\xff\x6c\xf1\xfe\x27\x83\xfc\xa6\xc3\x7d\xb3\xfa\x14\x9e\x05\xe6\x9b\x13\xe2\x9b\xbc\xbe\x94\x51\x45\x71\xf5\x9a\x54\x78\x79\x9d\x06\x04\xcd\xb5\x12\x97\x6b\x60\x51\xe3\xb6\xee\xe3\x1a\x16\x58\x22\x17\xea\xb6\x14\x2f\x2e\x96\x6e\x55\x60\x84\x21\xe2\xac\xc7\x17\x1d\xb5\x46\xfb\x17\xb9\x46\x7b\xe3\x1e\x37\xbc\x2a\x7b\xb2\x6b\xde\xf2\x7b\xc4\x67\x8a\x30\x74\x48\x99\xdb\x39\x47\x81\x97\xa6\x0b\x8f\x24\xc7\x3b\xf4\x5b\x5f\xbd\x74\x8d\x7c\x7d\x71\x0f\x88\x0c\x49\xb9\xd7\x91\x2f\xdb\xc7\x4f\x87\xbe\xec\x17\x67\x6d\xd5\x0f\x7f\x99\x90\x58\x9e\xd8\xd7\xab\x63\xf4\xde\xaa\x13\xaf\xa0\x3f\x5e\x14\x61\x56\x22\xcb\xcf\xf5\xf5\xed\x93\x64\xa8\x7b\xdf\xb8\xf1\xd8\xf4\x3e\x9e\xc5\xdc\xc0\x5a\xcb\xe4\x08\xeb\x6f\x81\x02\x3a\x38\x5d\xf7\xc6\xe9\xba\x23\x04\xf6\xd7\x67\x6d\x3d\x3f\xe2\x7a\xb0\xb6\xfe\x5d\xac\xad\x80\x16\xef\x8d\xc0\x05\x99\xec\x93\xf2\xe6\x04\x48\x97\x08\xd8\xe9\x70\x5e\x5c\x30\x42\x4c\xe2\x58\x47\x7a\x08\xfc\x7e\xb3\xb6\xaa\x96\xc6\x87\xd8\x63\xc0\x8c\xdf\x5a\x37\x0b\xb2\x46\x1d\x08\xa1\xd4\x0d\xbd\xeb\x6c\x93\x46\x70\xab\x91\x88\x96\x31\xad\x62\xd8\xe3\xa4\x3b\xaf\x6d\x11\x49\x58\xbc\x3b\x1d\xf7\x88\x0d\x2d\x08\x1d\x80\x9e\x0b\x82\xba\xfc\xa5\x7e\x47\x74\xab\x33\x2e\x0a\x3a\xad\x96\x68\x81\x2b\x6d\x2c\x59\x90\xf6\x2d\xad\x2a\xfb\x9a\x04\x50\x38\x51\x26\xf4\x6c\x34\x9a\x8a\xb3\x39\x4c\x06\x36\x1d\x21\x0f\x0d\x29\x74\x9b\x45\x45\x30\x6b\x1b\xd3\x4f\xad\x1f\x2d\x79\x2b\x5c\x3f\x93\x50\xf1\x41\xeb\x54\x22\x46\xab\x91\x9b\xf2\x3e\x05\xe6\xfa\x9e\xef\x5c\xca\x92\x94\x96\xbd\xf2\x9e\x4a\x32\x82\x77\x46\xf7\xc9\xf4\xc5\x55\xed\x37\xfb\xc6\x7c\xd6\x08\x7e\x47\xcb\x0e\xa3\xaf\xb7\x05\xe0\xe3\xa3\xdb\xfa\x11\xde\xeb\x44\x2b\xe3\x6c\xcc\xc8\x1c\x83\x7a\x6c\x05\x9a\x41\x74\x9a\xf6\x0d\x7e\x90\x95\xb4\xc0\x8a\x48\xc8\x49\xe8\x51\xdb\xde\x51\x1c\xdd\x13\x3d\x9e\x60\x47\xa1\x43\xc6\x11\x87\xcc\xc2\x96\x51\xb5\x84\x88\xde\xa2\x55\xa8\xe4\xf7\xec\x28\xe5\x60\x1a\x98\x03\x46\x53\xa2\x70\x97\x1c\xe8\x54\x32\x89\x08\xc3\xd3\x4a\x9f\x3d\x40\xfc\xdf\x6c\xdc\x00\x68\x46\xb0\x6a\x05\x41\x73\xac\x12\xa4\xc4\x06\x6d\xde\xac\xe7\xc7\xb7\x1d\x95\x36\x5e\x37\x43\x2d\x93\x24\x51\x91\xcd\x66\x02\x44\x66\xbc\xea\x13\xcd\x5b\xb5\x27\xf7\xc8\x63\xae\x23\x93\xb9\x13\x18\x89\xb4\x26\x12\xf1\x36\xc1\x93\xd7\x33\xff\x6c\x73\x39\x2d\xbc\xc1\xef\xb4\xf1\x89\x0d\x9b\xe6\xd8\x61\x97\x81\x56\x1e\xf0\x13\x38\xb8\x95\xc9\xa0\x7e\x7d\x79\xfd\xcb\xbb\xd3\xff\x3e\x7f\x17\xb7\xf0\xe7\xb8\x58\x84\xdc\xe2\x0c\x61\xb8\x28\x40\xc8\x2f\xf0\x1d\x41\x18\xb5\x8c\xfe\xb3\xb5\x90\xb7\x43\xdf\x5e\xa4\x58\xcd\x92\xde\x93\xa4\xf8\xea\x5b\x22\x4a\x72\xe4\x58\xd3\x77\x54\x02\x51\x35\x74\xc2\x02\xff\xb9\x24\x68\x26\x78\xbd\x62\x68\xa1\x4b\x0f\xae\x5b\xea\x1b\x06\x1b\xd3\x6c\x41\x44\x9c\x46\xfe\xfa\xc3\xf9\x35\xe4\xe0\x37\xc2\x10\xbb\x43\x72\x01\xbc\x13\x5a\x37\xa9\x83\xa6\x3f\xe5\x31\x3a\x65\x4b\xf3\x4b\x23\xcc\x22\x55\x94\x8a\x4a\x45\x40\x39\xb5\x86\xa4\x83\x07\xbe\x78\x79\x0c\xff\x7b\x81\x70\x59\x0a\x6d\x69\xfa\x1c\x8d\x62\x35\xcb\x2c\xaa\x65\x63\xbf\xd2\x69\x15\x4c\x2e\x23\x0a\xd2\x38\xa2\x5e\xf8\x9e\x97\x76\x25\x40\x09\x04\xfc\x8e\xd1\x6e\xa5\x12\x58\x91\x39\x2d\x50\x4d\xc4\x9c\xa0\x06\xab\x62\x81\x6a\xbc\x44\x05\x17\xa2\x6d\x0c\xc5\x48\x89\x15\x8e\x6b\xf9\x7b\x2e\x50\xed\xa4\xb3\x96\x66\x5a\x25\xbf\xde\x0c\x04\xed\x44\x76\xf8\x4f\x2a\x65\x4b\xe4\xc9\xab\x97\x7f\xfa\xe6\xdb\x48\xf3\x3a\xe3\xc1\x8d\x85\x3e\x25\x40\x9e\xfa\xf0\x2f\xb7\xc1\x00\x74\xdd\x63\x86\xb1\x3b\xc4\xec\x7c\x90\x86\x92\xb2\x79\x95\xec\x00\x49\x76\x03\xa6\x3a\x01\xc7\xdd\x08\x26\xb1\xbe\xc0\x74\x4f\x60\xaf\x0f\xf1\xae\x94\x7c\x5e\xb0\x4e\x83\x73\x7e\x2f\x2b\x90\x39\x0b\x0c\xbb\x8b\x89\x93\x52\x29\xfe\x23\xb0\x26\xbc\x63\xca\xb0\x8f\x98\x66\x0d\xde\x61\x84\x5e\xa2\xff\x42\x0f\xe8\xbf\xc0\x0b\xf6\xc7\xf8\xa6\xf2\xf8\x98\x72\xc0\xf8\x17\x5c\xaa\x8b\x49\xa6\x85\xfe\xab\xbe\xaf\xf4\x1b\xf5\x7a\x28\x8e\xa6\xd4\xba\x23\xc8\x83\x22\x42\x9b\x81\x76\x0d\x53\x67\x2e\xc9\xa3\xa6\x3b\xf8\xa5\xec\xee\x54\x70\xc1\xc5\xac\x8f\xfe\x7f\xa6\xfd\x0d\x0d\xbf\xe5\x52\x5d\x5a\x69\x1d\x52\xe8\x84\xfd\xa8\xe1\x22\xee\x89\xfb\x94\x56\xdf\xeb\xbd\xd7\xd5\xd8\x40\x25\x87\x04\x08\x93\xc3\xb9\xa0\x09\xc2\x61\x7f\x4e\x6c\x1a\x4e\x34\xdf\xd6\xfd\xd8\xd6\x5a\xf1\xe9\x83\x47\xc6\x1a\x29\x41\x59\x9a\x86\x97\xc7\x60\xdf\x24\xf4\x42\xcf\x46\x19\x28\x03\x1f\x31\x8d\x8e\x8d\xbd\xe6\xa3\xc3\x70\xe0\xb4\xc4\x2a\x30\x8b\xd5\x61\xcd\x23\xc8\x8c\x08\x61\xf2\x84\xa7\x4b\x97\x6e\x94\xbc\xdb\x92\xa4\x5c\x23\xb8\xe2\x05\x8f\xa6\x4d\xc9\xb9\x55\x26\xb6\x2f\x30\xf7\x10\xab\xf5\xd1\xf1\x1f\x5e\x4f\x46\xe8\xe6\x6c\x32\x42\x5c\xa0\xeb\xb3\x34\xf0\x53\xe8\x82\x79\x71\x73\x36\x79\xb1\xd3\x15\x08\x72\x98\x6e\xce\x26\x11\x2f\x59\x87\xcf\xd6\xb8\x19\xdf\x92\x65\xa4\x76\x97\x43\xc3\x1c\xfb\x8d\x95\x65\x40\x66\x9a\x6b\xdc\x6c\xfd\x36\x41\x70\x49\xf7\x9a\xc9\xc5\x65\x1d\xfa\x9e\xe6\xa3\x74\xa9\xf9\x1d\x29\x8d\xd5\xec\x5a\x21\xac\x6c\x38\xd5\x36\xd2\xc0\xf3\xf2\xb1\x67\xe0\x79\xd9\xfe\x19\x78\x5e\x36\x3d\x03\xcf\xcb\x16\xcf\xc0\xf3\x62\x9e\x81\xe7\xa5\xdf\x91\x7d\xcc\x31\x1a\x78\x5e\x3e\xf9\x0c\x3c\x2f\x8f\x3e\x03\xcf\xcb\x56\xcf\xc0\xf3\xb2\xfe\x0c\x3c\x2f\x1f\x79\x06\x9e\x17\xff\x0c\x3c\x2f\x03\xcf\xcb\x97\x2b\xb5\x07\x9e\x97\xd5\x67\xe0\x79\x19\x78\x5e\x06\x9e\x97\xf0\x19\x78\x5e\x1e\x79\x06\x9e\x97\x81\xe7\x65\xe0\x79\xf9\xf8\x33\xf0\xbc\x44\x3f\x03\xcf\xcb\x76\xcf\x90\x79\xb8\xe5\x33\xf0\xbc\x0c\x3c\x2f\xab\xcf\xc0\xf3\xf2\xc9\x67\x3f\xdc\xe3\x03\xcf\xcb\xc0\xf3\xf2\xd1\x67\xe0\x79\x19\x78\x5e\x3e\xfa\x0c\x3c\x2f\x11\xcf\xde\x39\x5d\x07\x9e\x97\x81\xe7\xe5\x63\x6d\x0c\xd6\xd6\x76\xcf\xc0\xf3\x32\xf0\xbc\xac\x3d\x03\xcf\xcb\xfa\x33\xf0\xbc\x0c\x3c\x2f\x03\xcf\xcb\xc0\xf3\xe2\x9f\x81\xe7\xe5\x6b\xf7\x3b\x09\x22\xe9\xbf\xc8\x84\x57\xb4\x58\x26\x67\xfb\x5c\x11\xc9\x5b\x51\xe8\x1b\x1b\x5e\x8b\x1a\x78\xaf\xf7\x28\x24\x29\xd9\x7b\x46\xa1\x70\x15\x4c\x5c\x48\xa5\x20\xec\x1c\x3c\xc5\x14\xec\x05\x9d\x82\x1b\xe0\x65\x3c\x82\x60\xec\xca\x67\x9b\xe9\x8b\x73\x96\x26\x5b\xed\xe1\x40\xf6\x21\x9d\x33\xa4\x3d\xf2\xbb\x48\x71\x2f\x6c\xe9\xa3\x9b\x0b\x37\x4d\x45\x53\x12\x63\x11\xba\x6e\x41\xbb\x20\x36\x04\x2e\xbf\x43\x45\xd3\x8e\x50\x4d\x6a\x2e\x12\x12\x23\x32\x58\x70\xbd\xad\xb2\x0f\xeb\x74\x65\x3a\xe4\x26\x5f\x71\x98\xff\xa5\xb1\x17\x3a\x96\x2a\xbf\x56\xd4\x89\xc3\x24\xac\xd9\xc5\x6c\x15\x8c\x4a\x55\xcf\x0b\x74\xc9\xd5\x95\x3d\xdc\x3b\x5b\xaf\xcc\x88\x05\x37\x85\x3b\x63\xad\x3a\xe3\x75\xd3\x2a\xd2\xbb\xd8\xcc\x14\x1b\xa3\x83\xca\x54\x81\xbe\x9b\x6c\xd0\x82\xb3\x19\x9d\x5b\xeb\xfb\xa4\xc6\x0c\xcf\xc9\xd8\xcf\xf6\xb8\xa3\x7a\x38\x89\xbe\xa8\x77\x96\x0a\x5a\x54\x98\xc6\x03\x07\x73\x89\x89\x33\xe8\x05\xd0\x80\x75\x80\x7a\xc8\x4d\xf3\xd3\x3c\xf2\xb0\x71\x6a\xe4\xc6\xb1\xfb\x95\xf9\xe3\x51\x82\xf5\x88\x15\xf8\x2a\xc0\x30\xda\xb0\x53\xd3\x0c\x46\x63\x26\x96\xa4\x21\xda\x22\x30\x0e\xd4\x78\xbd\x7f\xc9\x70\x4d\x0b\x77\xc2\x4e\xab\x8a\x17\xc6\x27\xd3\xb7\x2a\x73\x74\x59\x1b\xbb\x75\xdd\x2a\x3c\xad\xc8\x31\xba\x30\x14\x15\x9c\x55\x4b\x7d\xfe\x24\x51\x0e\xa2\x60\x37\x7f\x9a\x25\x99\x82\x7f\x4d\xc4\xbe\x6e\x54\xca\x61\x53\x19\x4e\x0d\xc2\xb4\x28\xe3\x8c\x20\xc2\x94\x58\xea\xfd\x37\xe1\xe5\xb5\xde\x82\xbd\x6f\x27\x53\x6d\x24\x42\x5e\x73\xc0\x5d\x13\xa1\xae\x79\x00\xaa\xe9\xe0\xd4\xbc\xc0\xd4\x2e\x84\x60\x98\x82\xc2\x8c\x9f\xde\xb6\x68\x78\x79\xbc\x41\x34\x21\x3e\x4b\xec\x81\x6e\x71\xc2\x4b\xad\x34\x09\x62\xe4\x93\x3f\xa3\xc6\x81\x78\xa1\x3b\x77\x0b\x1e\x3f\xac\x3a\x6d\x0a\xdf\x61\x5a\xe9\x03\x9c\xd8\x81\x75\xd6\xc5\xb4\xa8\x4c\xa6\x58\x85\x05\xe7\xef\xd3\x66\xb1\x69\x5d\xbd\xcc\xb0\x62\xc1\x25\x61\x20\x2f\xb1\xcf\xe0\xf1\xf9\x05\x56\xc4\x94\xe6\x2e\x4e\x45\x11\x5f\xcc\x10\xa9\x1b\xb5\x1c\x21\x72\x47\xc4\x52\x2d\x00\x6d\xe0\x79\x43\x41\xac\x51\x89\x6a\x5c\x06\xbb\x63\x84\xb8\x73\x40\x27\x36\x0f\xf7\x83\xb5\xc9\xda\x4a\x19\x0b\x8d\x4a\x9f\x46\xb1\xeb\x5d\x93\x9b\xce\x06\xa5\x0a\xcd\x9c\x74\x34\x08\xa8\x54\x6b\x1a\x47\x5c\x8b\x32\x9e\x85\x77\xd0\x8b\x20\x75\x44\x6f\x89\x1a\x3f\x80\x7b\x12\xd7\xbc\x65\xca\xf0\xd4\x18\x8b\xc1\x6b\x79\x26\xc1\xe6\x19\xf1\x72\x4f\xaa\xdb\xa3\x3c\x57\x3b\x2e\x1d\x35\xc5\x24\x47\x9e\x32\x56\x8a\x08\xf6\x1d\xfa\x9f\xc3\xbf\xff\xee\xd7\xf1\xd1\x9f\x0f\x0f\x7f\x7a\x39\xfe\xcf\x9f\x7f\x77\xf8\xf7\x63\xf8\xc7\x7f\x1c\xfd\xf9\xe8\x57\xf7\xc3\xef\x8e\x8e\x0e\x0f\x7f\xfa\xcb\xfb\x37\x37\x93\xf3\x9f\xe9\xd1\xaf\x3f\xb1\xb6\xbe\x35\x3f\xfd\x7a\xf8\x13\x39\xff\xf9\x33\x5f\x72\x74\xf4\xe7\xdf\xc6\x47\x1f\x53\x43\xed\xf9\x02\xed\x99\xc2\xec\x4f\x12\x64\xb7\x32\x76\xe7\x87\xdf\x5e\x81\x6b\xc7\xdf\x46\x27\x3e\x76\xfc\x45\xb2\x4f\xe6\x62\xd6\xb5\x4f\x25\xe2\x35\x55\x8a\x94\xf6\xee\x0d\xb8\x6f\x56\xfc\x41\x56\x60\x01\x6d\x15\x86\xdb\x3b\xe0\x60\xe9\xdc\x48\xd1\xdd\xf2\xf7\x2b\x78\xc0\x18\xa2\x75\x53\x91\x9a\x30\x05\x82\x67\xec\x6c\x5b\x70\x27\x1e\x77\x23\x28\x8c\xc3\x83\x3c\x14\x84\x94\xb6\x93\x83\x6c\x0c\x9e\x41\x36\x0e\xb2\xf1\x53\x4f\xb2\x4f\x3c\x87\x60\xbc\x0a\x3b\x61\x7d\x59\xd2\x69\xca\xe0\x21\xf7\x14\x09\x7c\x06\x40\x89\x3b\x5a\xb6\xb8\x0a\x99\x64\x1d\xb9\x68\x9c\x04\x00\xd7\x4e\x1f\x1a\x02\x61\x5a\x72\x47\x2a\xdf\x09\xe3\xa6\x3f\x46\x7f\x35\x70\x9e\xd0\xd0\xec\x3b\xd4\xe3\x02\x72\x9b\x86\xdb\x67\x84\xb0\xa6\xee\x81\x5c\xe9\x92\x47\x1b\x75\x49\x18\x7a\xb7\xc5\x4d\xc5\xa9\x97\x1a\xd5\x72\x84\x24\x51\x26\xc7\x66\x41\x56\x96\x09\x4b\xf4\xe2\xb4\xba\xc7\x4b\xf9\xc2\xc7\x24\x29\xa3\x6a\xa5\xf8\x40\x54\x1f\x80\x1b\x56\xbf\x70\xc6\xb5\xce\x0b\x55\x15\x66\x33\x52\x44\x5a\xb3\x86\x83\x63\xbd\x6f\x16\x8f\xae\x28\x6b\xf5\x68\xdd\xac\x92\x12\x71\x16\xd5\x10\x79\xa0\x0a\xb5\x4c\xd1\x4a\x2b\xeb\x48\x90\x79\x5b\xe1\xd0\x11\x68\x47\xe6\x60\x72\xe5\x31\xfa\xc0\x0a\x12\x7e\x39\xce\x53\xbd\xd2\x80\x56\x1e\x2a\xa2\x48\x39\x82\x57\xf7\x87\x2e\x0d\xd0\xac\x77\xf2\xfd\x52\x46\x35\xef\xe6\xd2\x03\x89\x8e\xcd\x81\xf2\x28\x07\x54\xd2\xd9\x4c\xb7\x0c\xc6\x36\xe3\xa2\xc6\xeb\xbd\xc2\xac\x8c\x6a\x5d\x9f\x5c\x48\x2f\x09\x59\x7e\xa1\xb2\xcb\x0b\x49\x4b\x52\x60\xf1\x22\xac\x09\x72\x5a\xa9\x05\x6f\xe7\x8b\x6e\x57\xa4\x4d\x39\x92\x0a\xe0\x55\x7a\x32\xa5\xf3\x5c\xac\x6c\x36\xa9\x75\x16\x56\x10\xa3\x5a\x71\x62\x04\xc6\x3d\x8e\x6c\x7b\x0d\x02\x60\x30\xdd\x66\xcd\x5d\xce\x15\x60\xf8\x48\x19\x24\xc8\x31\xf2\xa0\x32\x0c\xf8\x18\x5d\x18\xc2\x8b\x51\xff\xad\xbd\x29\x31\x93\x11\x60\xd8\x1c\x1a\x33\x12\xc0\xb7\xd2\x00\xf5\x29\x66\xc0\x4b\x6c\x5e\x8e\xd9\xd2\x65\x74\x00\xc6\xcc\x64\xa2\xf9\x24\x93\x2a\xce\x87\xee\xcf\xd2\xb3\x97\xd9\xe9\x9d\xd0\xab\xb6\xda\x5d\xf4\xf2\x2a\x2c\xf0\x51\xd9\x02\x3c\x42\xf7\xc8\x65\xf5\x2c\x48\x71\x6b\x4e\x5e\x49\x8c\x78\x23\x96\xe7\x36\xf5\x74\x2d\x78\x5b\x95\x86\x55\xb7\x93\xce\x20\x69\x0d\x84\xd2\x74\x03\x0b\x82\x88\xb6\x10\x80\x7a\x84\xc6\x89\x6f\x2e\x4a\xbd\xbd\x8d\x48\x86\x17\x1b\xaf\xb6\x4b\x77\xb1\x5d\x02\x29\x5f\x70\x66\xee\xc9\x91\xbd\xb9\x6b\x4c\x59\xac\x6a\xd7\x8d\x81\xce\x19\x17\xe0\xb4\x9e\x21\xc6\xfb\x7d\xe8\x1f\xf9\x95\x5e\x44\xeb\x1c\x1e\x87\xb4\x51\xdb\xe9\x96\xd3\xb4\x7f\xbf\x20\xda\x5a\xeb\xf7\x25\x56\x6c\x07\x2b\x2a\xb4\x44\x3c\xd6\x9d\x91\x4a\x60\xa0\x49\xb6\xf9\x14\x22\x76\xe3\x6b\xa5\xfb\x54\xa1\x9a\x4b\x85\xbe\x79\x19\xcc\x71\x92\x1f\x6d\x8c\xe0\x24\x42\xc0\xcf\xab\x29\xc0\x74\x81\x21\x17\x2a\xf6\xad\x17\x25\x61\x8a\x16\xb8\x0a\x3a\xaa\x2f\x89\x19\x17\x53\x5a\x96\x04\xa0\xed\x50\x10\x02\x4c\xce\x48\x4b\x17\x54\xd7\xae\x81\x00\x03\xd2\x6d\xac\xf7\x3f\x5c\xdf\x40\x0c\xb3\xaf\xef\x75\x36\x7f\x9c\x6a\x74\xa7\x87\xa0\xb4\x50\x08\xf7\xb3\x51\x67\x7b\x2d\x7d\x1d\x90\x3e\x3d\x1e\xbd\x53\x02\x47\xcf\x82\xdf\xaf\xcb\x11\xaa\x55\x36\x56\x46\x27\x3c\xee\x01\x8e\xcf\x6c\xfc\x1d\x61\xef\x4c\xe3\xfb\x80\xe6\xba\xf6\xb9\x91\x7a\x63\x63\x9b\x19\x89\x6f\x09\xd3\xa2\x6c\x7d\xe1\x67\x9e\x43\x8b\x0a\x70\x77\xa5\x50\x43\xc1\x69\xc6\x8a\x4a\x7d\x9a\xcd\xc5\x08\xe1\xa6\x86\xdb\x0a\x6e\x1e\xf7\xfc\xc2\x6e\xce\x17\xfa\xb2\x76\xc2\x3e\x8d\xd3\x3a\x43\xe0\x33\x83\x77\x44\xcf\xea\x19\x2f\x53\x7c\x5c\x2b\x70\x07\xaf\xf4\x98\x94\x19\xb8\x6f\x4b\xa3\xf3\x80\xc2\xa3\xd7\xb5\xbf\xaa\x5f\x07\xce\x41\x9f\x49\xac\x78\xbc\xbf\x2b\x0f\xd6\xc1\x75\x63\xbf\x42\xd8\xbd\x4d\x21\x48\x65\xae\xe3\x05\x6d\xd0\x94\xa8\x7b\x42\xd8\x66\x3d\xad\x24\x87\xf2\xc8\x39\x6a\x12\x3b\xd1\x41\x43\x0d\xc4\xf6\x18\x4d\x7a\xc7\x1c\x2e\xf7\x74\x66\xb7\x0b\xf6\xdd\xaa\x88\x02\xc3\xcb\x89\x19\x27\xc2\x36\x8c\x15\x00\x52\x69\x70\x2e\x3f\x58\x02\xd6\xc6\xda\x98\x93\x87\x77\xc9\x55\xda\x08\x93\x87\xa6\xf5\x3b\xeb\x30\x78\x92\x51\x66\x42\x92\x58\x1c\xf7\x1e\x9d\xc2\xfe\x55\x6b\xe7\xce\x6e\x7d\x2f\x9c\x7b\x10\xbc\x40\x7c\xa7\xee\x1c\x6f\x53\x7c\xfb\x2d\x22\x26\x50\x95\xc1\xae\x70\x4f\x1e\xca\xcb\x2c\xa4\x97\xf9\x78\xae\x51\x36\xae\x6b\xf4\x11\x58\x48\x1c\xbb\x6b\x66\xa4\xb9\x24\x45\x2b\xa8\x5a\x6a\x5b\x80\x3c\x44\x39\xac\x73\x9c\x95\xeb\x7e\x37\x7a\x41\x15\xd7\x45\xc4\x1b\x53\xc1\x63\xa5\x3c\x76\xe7\x71\x69\x19\xf8\x8a\xe3\x76\xf4\xc5\x4c\xaf\x88\x71\x8f\x40\xa0\x04\x40\xcb\xab\x1d\x73\x41\x17\xa3\x63\xfd\xb3\xa5\x77\xb8\xd2\x62\xb8\xfb\x8b\x09\x64\x68\x86\x7f\xf4\x94\xc8\x76\x85\xe5\x6d\x17\xde\x25\xe3\x86\x97\x5d\x34\xf7\xc4\x4d\x1d\x7c\x44\x1e\xd4\x17\x88\x6a\x07\x29\x35\x11\xf4\x8e\x56\x64\x4e\xce\x65\x81\x8d\x0a\xb3\x6b\x64\xc4\xe9\x23\xfd\x82\x9d\x29\x78\x25\xbd\xef\x09\xbb\xfc\x74\x70\xc2\xcc\x31\x65\x50\xdb\x39\x41\x5b\xb5\x8d\x4a\x93\x20\x4f\x95\x44\x0d\x16\x7a\x17\xba\x44\x78\x13\xcf\x98\x72\x5e\xd9\x62\x40\xd5\xb2\xeb\x17\x8d\x87\xb0\x82\x03\x9d\xff\xc2\xc8\xfd\x2f\xba\x17\x12\xcd\x2a\x3c\xef\xe2\x29\xfa\x62\x5b\xd5\x27\x93\x73\xf3\x1f\x9d\x68\xa8\x74\xd3\xea\x7b\xec\x1e\x2f\x65\xc7\x5a\x10\xba\xdd\xe3\x6f\x94\x57\x47\x20\x4f\xb0\x44\xbe\xed\xb8\x78\x8f\x7e\xbe\x39\x02\xe7\xfe\xd9\xe9\xe4\x97\xeb\xbf\x5d\xff\x72\xfa\xfa\xfd\xc5\x65\xf4\xcb\x2e\xb9\x22\x06\xda\x12\x04\x75\x0b\x9f\x4e\xa3\x57\xc1\x67\x64\x1d\x73\x79\x0c\xb8\x55\xa0\xcc\x65\x25\xbf\x4f\x04\xf7\xeb\x3d\x45\x70\x9c\xf7\x04\x37\xcd\xa9\xa8\xb9\x98\x08\x3e\xa3\x55\xb4\xc6\x9f\xeb\x04\xaf\x74\xc7\xc1\x7c\x4f\xed\xc7\xdd\x75\x63\x58\x1c\xd7\xb3\x49\x82\x2b\x83\x02\x57\xa0\x7e\x4d\x3c\xac\x68\x35\x9c\x7f\x20\x57\xbb\x18\x7f\x88\x76\xba\x67\x76\xce\x91\xa5\xbb\x11\xf9\xe7\x39\x5c\x03\x15\x2f\x70\x05\x55\xa2\xd3\x36\x3e\xca\x6c\x98\xac\xf6\x2b\xe0\xf4\xc0\x6e\x3b\xa3\x8a\xe3\xd2\xc4\xb0\x8c\xf0\x2f\x89\xab\x5d\xe6\xd4\x2e\xc8\x5a\x48\xea\xc8\x8d\xe1\x53\x80\xf6\x1c\x09\x49\x23\x88\xd7\x6a\x56\x9a\xe7\xa6\x64\x5b\x52\x93\xef\xfb\x39\x20\x76\x94\x3d\xba\xac\xd4\x33\xe7\x9b\xb1\x07\x8c\xce\xc0\x9f\x02\x7e\x4e\x6d\xa8\x2f\x1b\xe3\xe0\x7c\xe7\x96\x21\xa1\xbc\x6c\x26\xe3\x19\x5e\xb2\x27\xbb\xd3\xcc\x8f\xdf\x91\x26\x19\xfc\x96\xea\x19\x9c\x75\x42\xda\x6d\x1b\xa7\x83\x98\x8c\xf0\xc4\xfd\xf8\x23\x14\x32\x77\xf2\x3f\x83\x73\xca\x2f\x31\x1a\x07\x47\xab\x11\x64\xbc\x7e\xbc\x52\xed\xfd\xab\x96\x29\x5a\x13\xc7\x30\x3a\x5e\xd1\x89\x84\xf9\xf5\x81\xf4\xf5\x7c\xb2\x6c\x74\x84\x7e\x60\x70\x5e\x19\x29\xd1\x18\x31\xde\x2d\x11\x61\x33\x2e\x0a\x70\x3c\xec\x74\x83\x17\xb8\xc1\x53\x5a\xd1\x14\x61\x9e\x6b\x83\x43\x79\xcc\xa0\x3f\x80\x01\x2a\xcb\x93\x52\xf0\xc6\xdc\xc4\x8e\xfa\x2b\x3d\x2b\xb3\x4f\x31\x13\x56\x72\xb2\x9e\xa8\x5e\x47\xe6\x02\x33\xd5\xe1\xf7\xd6\x36\xce\xbf\xa3\x0e\x92\x43\x09\xc0\x65\xbe\x42\xb3\xa7\xa5\x96\x19\xe1\xb2\x25\x9f\xab\x7d\x2b\x5a\x73\xe6\x06\x17\x70\xcc\xa0\xc9\x87\xeb\x8b\xff\xb3\x72\x6e\xe2\x55\x3b\xf3\xec\x77\xc9\x0a\x2d\x0f\xb2\x6d\x9b\x2b\x5b\xe7\x7b\xd8\x38\x5f\xf7\xc6\xf1\x0e\xa2\x9d\xf3\x6d\x5f\xb5\x61\xc4\x99\xb2\xa0\x6b\xa8\x4e\xd2\x75\x26\x9e\x9a\xb2\xff\xd6\x10\xa0\x2b\x08\xd2\x5f\x61\x8a\x02\x5c\x3a\xf0\xd6\x2a\x6e\x4a\x59\x5b\xb5\x2b\xad\x14\x43\x78\xbb\xce\x70\x25\xbf\xd4\x2b\x32\xc5\xb5\xd3\x08\x5e\xbc\xe7\x2d\xcb\x43\xe0\x9d\xb0\xe3\x7c\x47\x50\x49\x18\x57\xd6\x9b\x02\xb6\x04\x9f\xc1\x6f\x91\xc9\x59\x0b\x6a\x73\xf4\xf4\x9c\x04\x35\xeb\x26\x50\xad\x3c\x7e\xc5\xe9\xe1\xc6\x7e\x69\xe5\x1a\x30\xd2\xea\x55\x5d\x0a\xdb\x2c\x01\xc9\x20\x08\x2e\x0d\x90\x06\xab\x85\x21\x8d\xaf\xb1\xbc\x25\xa5\xf9\x20\x91\x30\xd3\x93\x63\x02\x14\xce\xcd\xf4\x8d\x9e\x5c\xc7\x59\x02\x0e\x61\x03\xb2\x05\x06\xcd\x14\x53\x6c\xa7\xa7\x21\x41\xb0\xeb\x45\xf8\xc0\xaa\xe5\x15\xe7\xea\x7b\x5f\x13\x7f\xd7\x27\xe3\xaf\x1e\x0a\x1b\x3a\x31\xc1\x2f\x8d\xa1\xcb\x63\xd8\x38\x20\x17\x83\x4a\xfe\xa9\x62\x51\x2f\xc8\xbf\xab\x54\x14\x2d\x3b\x95\x6f\x04\x6f\xa3\x75\xb8\x9c\xf6\xe6\x9b\x8b\xd7\x70\xf1\xb5\x96\x53\x99\x29\xb1\x6c\x38\x65\xca\x79\xbc\x32\x06\x6d\x7e\xb0\xec\xd5\xa1\x64\x4b\x26\xaa\x45\xe8\x3d\x5e\x22\x5c\x49\xee\x5d\x6a\x6c\x53\xb8\xd5\xc5\x72\xf5\xaf\xa7\x5c\x2d\xd6\x82\xb8\xb1\xa9\x3b\xfa\x59\x6f\x6f\x14\x50\x33\x77\x80\x18\xca\xd6\x9a\x55\xc0\xea\xd2\x08\x52\x90\x92\xb0\xe2\x4b\x3d\x11\xbb\x66\x0a\x86\x53\x75\xc9\x99\x16\xaf\xbb\x3e\x57\x17\xde\x3f\x69\x57\x23\x3c\x45\xe0\xca\xb6\x41\x44\x0c\xac\xda\x20\x5c\x5b\x99\x82\x3c\xbd\x98\x41\xd4\xd3\x6c\xba\xbf\xb4\x53\x52\xe9\xc5\xa6\x55\xe5\xd0\xf6\x06\x9a\x40\x6b\x3c\x27\x08\x2b\x7f\x08\x15\x47\x84\xc9\x56\xd8\x7d\x13\x99\x55\xa5\x1f\x9f\x10\x66\x87\xf6\xc3\xc5\x6b\xf4\x12\x1d\xea\xb1\x19\xc4\xe0\x0c\xd3\x0a\x88\xba\x1d\x56\x37\xb4\x01\x66\x2e\xa7\x2c\x69\x0a\x40\x8e\x20\x2e\xcc\xd5\x32\x42\x8c\x23\xd9\x16\x8b\x20\xe3\xc0\x7b\x84\x6d\xd5\xa6\x24\x22\x92\x41\xec\xe4\xbb\x0f\x7f\x90\x24\x1a\x22\x9b\xf3\x3a\xfc\xe1\x19\xaf\xc3\xd0\x44\xd4\xc7\xbf\xbf\x60\xe6\xac\xd6\x44\xe1\x12\x2b\x6c\xaf\x49\xf7\x85\x61\xd7\x0e\x97\x65\xc2\x65\x29\xc9\x3b\xca\xda\x07\x53\x17\x65\x2f\xc2\x1e\xd7\xe7\xd0\x23\x54\xb8\x85\xe6\x41\xdc\xce\x45\x28\x32\xa4\x68\x5c\xf4\x8e\xd1\xe8\x11\xab\x1b\x6e\x09\x6c\xb8\x37\x21\x8b\x12\xb3\x92\xd7\x6b\x9d\x9c\x71\x81\x08\x2e\x16\xd1\xbd\x09\x50\x23\xc3\xc1\xb4\xcf\xbf\x77\x40\x08\xd2\x57\xb3\xf9\xf6\xdf\x41\x32\x2c\x95\x7e\xe7\x9a\xec\xd8\x0a\x4f\x49\x65\x69\x71\x0d\x57\x7a\xc6\x13\x96\xc9\x07\x2e\x78\x46\x48\xcc\x15\x37\x48\x2e\xec\x27\x42\xbf\xfe\x8b\x98\x87\xac\xe0\x8b\x1b\x8b\x2e\xe9\xe6\x01\x7c\xa0\x5f\xc2\x3c\xb4\x09\x0a\x22\x5a\x9d\x07\xad\x6d\xf6\xe7\x01\xf4\xaf\x7d\x9f\x07\x49\x8a\x82\xd7\xcd\x9e\x20\x25\x6f\x0c\x0a\x5f\xf7\xe8\x73\x51\x91\xfd\x2f\xe3\x24\xb8\xb3\xad\x76\x85\x95\xb9\x07\x5d\xc9\xab\xff\x1d\x5c\xe7\x20\xed\x56\xef\x78\xdb\x7a\x32\x22\xd3\xb7\x68\x5f\xf8\xef\x78\xe3\x0d\x30\xcc\xde\xf3\xec\x30\xcc\x80\x31\x1f\x83\x7b\xbe\x07\x89\xfc\x1a\xc0\x98\xda\x08\x80\x79\x25\x0c\x58\x80\x1a\xac\x16\x23\x9b\xb1\x7a\x47\x9c\x78\xbe\x35\x1e\xaf\x03\x90\x38\xae\x43\x4e\xdc\x74\x98\x55\xc3\xa4\x9f\x15\xbb\xb9\x09\xaf\x69\xbe\x73\xf9\xe1\x26\xe4\xd1\xc7\x6c\x69\x38\x22\x13\x58\xcd\xcc\xb3\x7f\x6a\xc5\x53\x62\x3a\x57\x57\xf1\xa9\x21\x9d\x49\xef\xdb\x8c\xe8\x7c\xbe\x53\xfa\x79\x28\xcf\x55\x8c\x67\xd6\x2e\xac\x02\x3e\xd7\xdb\xc8\xb0\x72\xc9\x47\xc0\x5e\x9d\x7b\xe4\x00\xf9\xab\xe9\x91\xb3\xb2\x0b\x47\x5a\x28\x43\x27\x08\xae\xaa\x2c\x98\x84\x4d\x5e\x10\x77\x0a\x3c\x95\xfc\xba\x37\xa0\x5f\xd3\x34\xa5\xf5\x4f\x78\x30\xbe\x6c\x4f\x44\xa5\x2d\x8a\x2f\xdc\x0f\x31\xaf\x25\x3e\x13\xa4\x34\x38\xa9\xeb\x86\x14\xfb\x72\x5b\xbc\x79\x7f\x7d\xda\xef\x19\xe8\xc2\xb6\x70\x06\x81\xdf\x23\x5c\xd6\x54\x4a\x08\xf8\x90\xe9\x82\xf3\xdb\xa4\x26\x0f\x5d\xaa\xed\x9c\xaa\x45\x3b\x3d\x2e\x78\x1d\x64\xdd\x8e\x25\x9d\xcb\x13\x2b\x51\xc6\x7a\xe2\x8e\x10\x65\x95\xcf\x54\x06\x6f\x21\x70\x81\xc5\x53\xc9\x85\x83\x47\x85\x1f\x3d\x6c\x3d\xc8\x4f\xf1\xd0\xec\xf5\xe9\x81\xea\x26\xb0\x79\x77\xae\x75\xac\xef\xaa\xb4\x6a\x83\x2b\x3b\xeb\x91\xb1\x87\x95\x3a\x6c\x14\x67\xe3\x3c\x1a\xe3\x75\xe7\x93\x64\x95\xfe\x82\xc8\x24\x04\x6c\xce\x33\xf7\xb6\xeb\x52\xc8\xa5\x47\x67\x3d\x46\xa8\x7e\xce\x3d\x84\xb7\x0f\xf4\x5f\x3a\x58\xe6\x41\xae\xe2\x32\xa7\x55\xa5\x17\x12\x5b\xe2\xb5\x00\xdd\x09\xa6\x49\x9f\xd1\xce\x70\xee\x6a\x63\x21\x1c\x05\x5c\x24\x69\x42\xc1\xf0\x9e\xe9\xcb\xc0\x72\x66\xe8\x0d\x04\x6d\x63\x54\xd3\x07\xdd\xc3\xb0\xc5\x3e\x49\x2c\x04\xfe\x37\xff\x3a\xa1\x80\x35\x02\xf0\x81\xe7\x4c\x1f\xe9\x15\x0a\x1b\x71\xc9\xd1\x4a\x5f\x5b\xfa\x17\x97\x44\x69\x43\xcd\xcc\x5b\x18\x7d\xd0\x86\x95\x68\x33\x1c\x86\x94\xc8\x30\x0a\xa3\xc3\x59\x25\x45\xe2\x79\x80\x48\xb1\xed\x93\xd6\x41\x9c\xf2\xf6\x5c\x91\x63\xb4\x21\x7d\xe7\xd9\x22\xc8\xe8\xf3\xa3\xc8\x4f\x18\xab\x42\xfb\x12\xaf\x4a\x94\xfa\x21\xd7\xef\xce\x78\x56\x42\xbe\x61\xba\x0e\x5e\x9a\xf0\x72\x8d\x86\x18\xc8\x8c\x29\xae\xe2\x0b\xb9\x5e\xcc\x42\xea\x4e\xc6\xad\x7b\xc4\x54\x10\x37\x38\xfd\x07\x52\xb4\x8a\x94\x96\x8d\xdc\xba\x94\x0d\x93\x71\xbf\x37\xd1\x3d\x70\x49\xfa\x53\x02\x00\x25\x39\xea\x4a\xb1\x59\x5b\xc7\xf3\xbb\x8e\xd0\xff\x05\x29\x29\x1d\xa1\x56\x45\xef\x08\x23\x52\x4e\xfc\x9f\xc7\x4e\x05\xe0\xa8\x0b\xcc\x9c\x6d\xa5\xcf\xb4\xf5\x70\x5b\xd6\x71\xcb\xe3\x31\x25\xa8\xc1\x02\xd7\xfa\x0e\x96\xc8\x2e\xcf\x94\xcc\xa9\x49\x0b\x0c\x2e\x45\x4f\x5b\x1e\x47\xaa\x0b\x86\x0d\x55\xa8\xa6\xf3\x85\x39\x2d\x08\xa3\x8a\xb3\x39\x72\xb8\xb1\x8a\xe3\x12\x81\x60\xe1\x02\xdd\x63\x51\x6b\x5d\x00\x17\x0b\x00\xa1\x61\x86\xca\x56\x9f\x07\x04\x24\xdb\xcb\xb1\x54\x58\x11\x4b\x86\x17\xed\x83\x73\xd3\xb4\x83\x12\xb1\x4f\x5d\xfe\x7e\xc7\x7c\x3a\xfa\xa4\x65\xf1\x82\x9c\x3f\x90\xc2\x1f\x6b\xc3\x38\x5d\xd7\x40\x18\xc8\xdd\x71\x76\x6c\x71\xc9\xca\xe0\x9e\x98\xca\x76\x84\xfb\xa2\x9b\x9c\xd9\x09\xa7\xce\xfa\x34\x3f\x6a\x7b\xb4\xbf\x08\xd2\x05\xb1\x82\xa2\x49\xc0\x8e\xcd\xc5\xad\x3e\xb9\x86\x23\x88\x0b\x5f\xad\x3f\xa9\x5b\xae\x1f\x40\x99\xcd\xb9\x42\x87\x07\x27\x07\x47\x6b\x7b\xe1\x40\x86\x69\x06\x26\x23\xba\x1b\x90\xa4\x75\x53\x2d\x61\x0c\x07\xa6\xe4\x77\x22\x81\xa1\x03\xac\xfa\xf2\x97\x72\x41\xaa\x6a\x84\xa4\x56\x7f\xb1\xab\x21\x62\x3e\xd5\x5f\x52\xa2\x2d\x8c\x9b\xec\xf0\xe0\xd7\x83\x11\x22\xaa\x38\x42\xf7\x9c\x1d\x28\x13\xf0\x40\x37\x60\x43\x26\xf5\xc9\x77\x62\xc9\x5b\xc4\x08\xb1\x67\xc7\x17\xab\x2a\xb0\x36\x7f\x5a\xa3\xa3\x1b\xd2\x0d\x52\x55\x69\xfa\xdc\xf9\x03\x55\x5a\x15\x51\x2d\xb8\x29\x5e\x1a\x4b\x81\x00\x0f\x3d\x96\x70\xd3\x9d\x2c\x08\xae\xd4\x62\xe9\xad\x97\x7f\x11\xc1\xa1\x3e\x29\xb3\xbf\x49\xd7\xa1\xf6\x20\x6d\x74\x7f\x13\x38\xb5\x82\xd1\x0a\x72\xb3\x10\x44\x2e\x78\xb5\xf3\x34\xce\xf7\xb6\xdc\x5b\xc1\x99\xd4\x32\x45\x9b\xd8\xb6\x8f\xd2\x67\xd0\x19\x9d\xc5\xd6\x57\xe0\x70\xca\x04\x29\xad\xb2\x64\x4b\x5e\x2c\xf0\x1d\x68\x0a\x5a\x9f\x23\x65\x8a\x69\x12\xda\x44\xbf\x3f\xf6\x3d\xf4\x69\x77\xaf\xf6\x04\xb6\x19\xc9\x1d\x39\x17\x4d\x9e\x5b\xfa\xcd\xd5\xe4\xac\x77\x4b\xc3\x07\x6f\xe1\x18\x9f\x2d\x48\x71\x7b\x95\x56\xcd\x75\x4f\xa0\x05\x0d\x17\xbb\x54\x0c\x74\xf3\xd9\xb4\x82\x09\x17\x0a\xb1\xb6\x9e\x12\xe1\x1c\x0a\x73\x58\x45\x22\xee\x68\x41\x8e\xd1\xa5\xf9\x9d\x0b\xce\xbb\xea\xc3\x98\xcd\x09\x7a\xa5\x0f\xc4\x1f\xbf\xfd\xf6\xf7\xdf\xa6\xcb\xe8\x74\x22\xd5\x3c\x24\xaa\x76\xe0\xfb\xa2\x76\x5d\x9b\xee\x6c\x72\x36\xdb\x9e\x82\x51\x57\xe1\xc2\xaf\xcd\x7c\xf3\xa1\x4b\xf3\x4a\x4a\x42\xd0\x86\x70\x85\x16\x1d\xe6\x3f\xd3\x8a\x4f\x4f\x6a\x2c\x15\x11\xda\xc6\xb1\xd7\xfa\x18\xe8\x86\x29\x9b\x1f\xd7\xe5\xd1\x71\x5a\x14\xdc\x99\xd5\x6b\x25\xe5\x7a\x34\x33\x8f\x94\x87\xd3\x93\xb2\x73\x17\x3c\x72\xbd\xfc\x0e\xbd\x88\xab\x26\xa6\x97\xe0\x0d\xc9\x93\x89\xf6\xf6\xe6\x66\xf2\x86\xa8\x50\x60\x33\xf8\x10\xbd\x39\xbf\xf1\xe5\xc6\xf5\xee\x32\x49\x4d\x83\xd4\x4e\x91\xda\x0b\x9e\x56\x6f\x3e\x77\xdc\xc5\x88\x12\xa8\x8d\xc6\x18\x29\xf4\x42\x8f\x7a\x95\x6d\x1d\x0e\xf1\x62\x72\x8c\xfe\xc6\x5b\x50\xb9\xf0\xb4\x5a\xa2\x7b\x6c\x18\x0d\xe2\x28\xa5\xbb\xe7\x85\xee\xc6\x0b\x2d\xb5\xf4\xae\x7e\x4b\x70\x69\x6a\x55\x82\x6b\x67\xe7\x67\x35\xe8\x53\xb6\x65\x3b\x6b\xa5\xe2\x35\x5a\xd8\xa1\x9a\x39\xec\x0a\xfa\x1b\xdd\xc8\x1c\x41\x88\xfd\x48\x24\x48\x63\xac\x25\xfb\x37\x5f\x85\x2d\xb4\x26\x85\xcc\x3c\x07\xd5\x80\x30\x2a\xc2\xa9\xb2\x8a\x3e\xb8\x30\xa9\x95\x51\xd1\x2e\xb1\xee\xc9\x52\x55\x04\x65\xaa\x2c\x82\x40\x48\xe9\x43\x99\xfc\x92\xf4\x20\x64\x9e\x1a\x25\xfa\x61\x89\xe1\x35\xf3\xe4\xad\x90\x80\x6c\xa8\xcd\x6e\x2e\x03\xc0\xd1\x1d\x4d\x65\x25\x44\xce\x99\xec\x0b\xa8\x62\xc6\x19\x2d\x4c\x38\x03\xb5\x0d\x67\x88\xb7\xaa\x69\x15\xb8\x82\x0a\x2c\xc9\xf8\x0e\x0b\xaa\x05\xaa\x6e\xbf\xfb\xc3\x96\xe9\xd3\xae\x38\x07\x3f\x89\x0f\x3a\x9b\x1e\xa7\x77\x33\x93\x36\x83\x5c\x01\x8c\xcc\x2b\xbc\xb6\x38\xe9\x3b\x1a\xed\xb5\x0f\x06\x99\x1a\xe2\x8b\x7c\x66\x1d\x56\x0b\x40\xf6\x41\x2c\xcb\x01\x43\x41\x70\x6a\xb3\x61\x0f\x12\x6f\xb2\x5a\xb1\x89\x22\x01\xe2\xed\x5c\xac\xd8\xc1\xba\x87\xeb\x73\x98\x09\x6b\xf2\xf4\x66\xb5\x1d\x96\x6b\x01\x33\x74\x71\x7a\x79\xfa\xcb\xf5\x8f\x67\xbf\x5c\x9e\xbe\x3f\x4f\x79\x75\x72\xed\xf8\x9c\xd5\xe3\xb3\xd5\x8f\x7f\x82\x0a\xf2\xee\x91\xc5\x82\xec\x0f\xcc\xe4\x1a\x7a\x13\x92\x92\x59\x1b\x20\xa8\x87\x9c\xc6\x52\x87\x56\x9c\xa6\x5a\xf0\xec\x54\xe2\x58\x54\xc1\x6b\x52\xe1\xe5\x35\x29\x38\x2b\x77\x8e\xce\xbe\xf4\xc2\x46\x9a\x0e\xf9\x32\xd0\x64\x85\x31\xcb\x15\x82\xb5\xc5\xab\x1d\x3e\x20\x84\x34\x98\xf1\x45\x47\xad\xd1\xfe\x45\xae\xd1\xde\xb8\xc7\x1b\x22\x28\x20\x82\xf6\x61\xd7\xbc\xe5\xf7\xb6\xa2\xfb\x21\x65\x6e\xe7\x1c\x05\x5e\x9a\x2e\x3c\x92\xce\xa6\xa6\x38\x7a\xf5\xd2\x35\xf2\xf5\xc5\x3d\x2c\xd2\x67\xaf\x23\x5f\xb6\x8f\x9f\x0e\x7d\x75\xb0\xa5\x7e\xf8\x2b\x05\x3f\x84\x56\xc4\xf8\xab\x63\x9f\xa7\xf6\x0a\xfa\xe3\x45\x11\x66\xa5\x83\x9c\x7d\x7d\xfb\x44\x15\xcd\x35\x2f\x6e\x33\xb9\x5d\x6f\xce\x26\xe6\x6d\x2b\x78\x16\x73\x03\x6b\x2d\x93\x23\xac\xbf\x05\x0a\xe8\xe0\x74\xdd\x1b\xa7\xeb\x81\x49\xeb\xc2\xd5\x77\x5b\x3b\x50\x0f\x06\x6b\xab\x7b\x9c\xe2\x23\xfa\x15\x50\x06\x6b\xeb\x91\x67\xb0\xb6\xb6\x78\x4c\x12\x09\x80\x41\xdf\x08\x5c\x90\xc9\x3e\x29\x6f\x4e\x80\xa0\xb2\x15\xb6\xac\x9c\xd7\xe1\xbc\xb8\x60\x84\x94\x46\x7e\xd8\xa1\x10\x34\xd7\x23\x31\xf0\x68\xf0\x21\x76\xc0\xe2\x56\x24\xa8\x79\x37\x0b\xfb\x6a\xab\xe2\xba\x20\xf3\xa6\xde\x75\xb6\x49\xe3\xc9\xd0\x5d\xd5\x10\x7b\x9c\x74\xe7\xa1\xd4\x3a\x61\xf1\xee\x74\x1c\xae\x20\x92\x74\xae\xa7\xcb\x56\x86\x36\x18\x61\x5f\x7a\xaf\xeb\x88\x6e\x75\xc6\x45\x41\xa7\xd5\x12\x2d\x70\xa5\x8d\xa5\x7b\xaa\x16\x08\xa3\x5b\x5a\x55\xf6\x35\xf1\x13\x75\x4d\x6c\xae\xa6\xd1\x68\x2a\xce\xe6\x30\x19\xd8\xe6\x64\x3c\x34\xa4\xd0\x6d\x16\x15\xc1\xac\x6d\x4c\x3f\xb5\x7e\xb4\xe4\x6d\x86\xb4\x0c\x17\xf8\xf6\xfa\x14\xa3\x96\x7e\xc4\x14\x6e\xfb\xe8\x9e\xef\x27\xd7\xa2\x0f\x6a\x41\xc4\x3d\x95\xc4\x14\x92\x8b\xee\x93\xe9\x4b\xbf\x8c\x9c\xf9\xcc\x53\xa8\xd8\xcc\x41\xbd\x2d\x20\x95\x35\xba\xad\x1f\xe1\xbd\x4e\xb4\x32\xce\xc6\x8c\xcc\x0d\x51\x83\x15\x68\x06\xd1\x69\xda\x37\xf8\x41\x9f\x6d\x20\x15\x6f\x10\xad\x6b\x52\x6a\xfb\xb8\x5a\xa2\x3b\x8a\xa3\x7b\x02\xa4\x10\xdd\x8e\x42\x87\x8c\x23\xde\xe8\xab\xab\x65\x54\x2d\x21\xa2\xb7\x68\x15\x2a\xf9\x3d\x4b\xc8\xb7\xba\xb1\x30\x07\x8c\xa6\x44\x61\xeb\x03\xd7\x87\xc0\x73\xa2\x03\xdd\xb9\x3e\x7b\x90\x24\x70\xb3\x71\x03\x78\x9a\xf4\x39\x56\x09\x52\x62\x83\x36\x6f\xd6\xf3\xe3\xdb\x8e\x4a\x1b\xaf\x4b\xe4\x61\xde\x0f\x66\x43\x7d\xa2\x79\xab\xf6\xe4\x1e\x79\xcc\x75\x64\x28\x2e\x02\x23\x91\xd6\x44\x22\xde\x66\xaa\x37\xf1\xca\x36\x97\xd3\xc2\x1b\xfc\x4e\x1b\x1f\xa9\x4a\x1a\x55\x75\x38\xc7\x16\x7b\x84\xbc\xdf\xe6\xe1\x06\xfc\x95\xd3\x76\x36\x23\x02\x6e\x3a\xe8\xf0\x1a\xec\xde\xd7\xf1\x72\x77\x58\x9c\xf3\xd6\x02\xbe\x88\x1a\x41\xed\x00\x4b\x26\xf1\x48\x93\x96\x64\x13\xca\xf4\x0a\x22\x81\x0b\x9e\xa1\xf3\x0f\xdf\xc7\x6d\xd1\x1c\x95\x05\xd2\x52\x56\x61\x9c\x1f\x58\x1c\x26\x31\xef\x7e\xd8\xc4\xfa\x62\xb7\x45\x51\x71\x69\xd3\xa3\x61\x5d\x8a\x05\x66\x8c\x38\x67\x14\x55\xe0\xc9\x9e\x12\xc2\x10\x6f\x88\x01\xe5\x45\x75\x06\x23\x49\xd9\xbc\x22\x08\x2b\x85\x8b\xc5\xb1\xee\x1d\x73\x7b\xa1\xcb\x43\xb6\x9f\x48\x25\x08\xae\xcd\x9e\x10\xa4\xc6\xd4\x34\x8f\x70\x21\xb8\x94\xa8\x6e\x2b\x45\x1b\xff\xb2\x38\x2f\x22\x01\x46\x08\x69\xd2\x52\xdd\x5a\x41\x5a\x49\x97\xf0\x3c\xea\x7a\x68\x87\xcf\xc3\x62\x45\xe0\x3a\x1b\xe9\xdf\x92\xba\x51\x4b\x9f\x98\x18\x67\x03\xcd\xa8\x90\x0a\x15\x15\x25\x4c\xd9\x91\x19\xca\x41\xe8\xc3\xc8\xa9\xd3\xcc\xce\x88\xb4\x53\xc2\x4a\x30\xbe\x1b\x25\x4d\xfe\x9d\xef\x84\x7b\x55\x49\xa5\xf5\x75\xc8\xb8\xec\x3f\xec\x2a\xd3\x98\x8d\xe3\x66\x04\xb6\x8e\x53\x70\x4c\x8f\xec\x47\x41\x17\x82\x3a\xdb\x5d\xee\x64\x9a\x5c\x81\xf2\x31\xee\x5c\x8f\x7a\x9c\x03\x9d\x6d\x01\xa9\x30\x6b\x52\x07\x36\x14\x23\x77\xfa\x1c\x90\x82\x68\x55\x14\x67\x14\x32\xcf\x2e\x63\x02\x5d\xee\x3d\x91\x12\xcf\xc9\x24\x12\x8e\x90\x43\xe0\x74\x8e\x36\xc0\x31\x74\xdb\x66\x41\x0c\xd1\x95\xe2\xc1\x27\x61\x92\x57\x68\x3c\xd6\x66\x20\x51\x3d\x70\x46\xd3\xbd\xa0\x4a\x11\xd8\xa5\x50\xc9\x09\x00\x68\xab\xe4\x9d\xfd\xe4\xb2\xa8\xf6\xec\xa4\x87\xed\x69\xf5\x83\x95\x26\x4d\x6b\x4a\xd0\x54\x50\x32\x43\x33\x0a\x79\x63\x90\x51\x35\x32\x55\x08\x30\xe0\x76\xb1\x94\x44\xc0\xb0\xad\x5b\xc0\x0d\x3f\xae\x3f\x7f\xb5\xe3\x57\xa2\x65\x05\x0e\x4a\x74\x02\xb7\x18\x9d\xa1\x39\x64\x71\x59\x23\xf8\x0f\x2f\xff\xf3\x8f\x68\xba\xd4\xfa\x1a\x18\x62\x8a\x2b\x5c\xb9\x0e\xa0\x8a\xb0\xb9\x5e\x45\x10\xb9\x71\x72\xa3\xc7\x4f\xe5\x17\xa7\xa2\x35\x55\x66\x82\x5e\x7d\x73\x3b\x4d\x3a\x7a\x20\x1f\x4f\x4a\x72\x77\x12\x6c\xa1\x71\xc5\xe7\x71\x6f\x3d\xcb\x91\x4d\x9c\xe4\x67\xdb\x70\xa2\x79\x45\x8b\xe5\xae\xce\xb4\x2b\x5e\x82\x16\xfc\xde\x38\x73\xd6\x8f\x6a\x40\xf5\xd2\xf0\xa6\xad\x60\xe2\xd0\xf7\x9e\x9f\xaf\x95\x64\x95\xfa\x28\xd5\x49\x18\x48\x3b\x08\xa2\xda\x66\x57\xee\x1c\x9b\xc2\xe8\xba\xc9\x2d\xf1\x84\x8d\xb9\xf9\x3a\x24\xd1\xde\xb8\xef\x71\x55\x4d\x71\x71\x7b\xc3\xdf\xf1\xb9\xfc\xc0\xce\x85\xe0\xa2\x3f\xe6\x0a\xeb\x3b\x7d\xd1\xb2\x5b\xa8\xa2\xdb\x91\xd1\xf2\xb9\xc5\x14\x3a\xfe\x80\x60\x74\x51\x9d\x71\xa3\x34\xf4\xa0\x4e\x25\x71\x3e\xb8\xae\x65\xf2\x40\x3b\x47\x1b\x43\x44\xf7\x39\x36\x01\x9f\xf4\xc6\x21\xc3\xa3\xfd\xcd\xcb\x3f\xfc\xc9\x08\x17\xc4\x05\xfa\xd3\x4b\x48\x39\x96\x23\x73\x01\xc0\x0d\xac\x55\xad\x1a\x57\x55\x6c\x94\x20\x14\x01\xdf\x47\x17\xa7\xde\x83\x23\xaf\x76\x76\xba\x3f\xdb\x64\xbc\xb9\xf9\x1b\xd8\x8b\x54\x49\x52\xcd\x46\x86\xed\xc5\xbb\xb5\x0e\x40\xbb\x3a\xb0\x57\x5e\x3c\x53\xd0\xee\x8d\xb6\x3b\x5e\xb5\x35\x79\x4d\xee\x68\x11\x17\xc0\xec\xad\x4a\xef\x6d\xce\x4d\x5f\x51\x09\x24\x40\xd3\x8a\x17\xb7\xa8\xb4\xbf\x0c\xa0\xf2\xab\x55\xb5\xe3\x67\x21\x36\x69\x20\x21\x59\xe0\xd1\xf1\xf7\xd2\x04\x6a\xdc\x34\x9e\xa1\x44\xe0\xfb\xde\x64\x80\x68\x02\x76\xd4\xc4\x30\x62\x72\x30\x3d\x35\x94\x3e\xb6\x23\xd2\xd7\x54\xf4\x2b\xa2\x73\x0b\xd2\x23\xf1\x5d\xef\xe3\xe3\x98\xbd\x0d\xd1\xbd\xd0\x9d\x86\x06\xfe\x6d\xf8\x16\xd6\x98\xb1\x3c\xe5\x90\xdf\x18\x46\x83\xd4\xdb\x07\x6e\x99\x78\xf7\x65\x86\x60\x68\x5a\x8e\x44\x6f\x5e\x98\x0f\x42\xd7\x58\x59\xfb\xc8\x45\xd9\x31\x6a\x88\x90\x54\x6a\xd5\xe9\x47\x38\x50\x67\x15\xa6\x75\x10\xbe\xdb\xd5\x24\xac\x23\xea\x6b\xdc\x8c\x6f\xc9\x32\x72\xc3\x25\x1e\x97\xc7\x00\xfe\x35\x6e\x22\xef\x01\x28\x5d\x9b\x7e\x0d\x44\x5e\xce\x13\x5e\xda\x7e\xc0\xf5\x60\x4a\x12\x3f\x89\x19\x9b\x51\x07\xda\xf5\x95\xf3\x63\xb7\x70\xfd\x1b\x47\x7f\xe2\xaf\x1c\xf3\xad\xaf\xe9\xa2\x81\xf1\x7d\xa9\xf7\x8c\xef\x7c\x26\x71\x9a\x84\x74\x82\xdb\xc9\xee\x8c\xfe\x75\xd4\x73\x68\x99\x93\x19\x98\xbe\xd6\xd1\x74\x6c\x8a\x02\x24\x74\x40\x1f\x45\xdb\x28\x3a\xf8\xee\x60\xa7\x77\x9c\x59\x19\xc1\x1b\x3c\x07\xcb\x74\x1f\x16\x68\xb5\x4f\x21\x07\xed\x82\xdf\x9b\xdf\x1b\x74\x49\x63\xbf\x45\xca\x8e\xc8\x7c\xc1\x93\x56\xc7\x20\x07\xdd\x8e\xb0\xd6\xb5\xe1\x2a\xbc\xc7\x4b\x84\x05\x6f\x59\x52\x1a\x34\x04\x46\x7c\xe0\xec\xfd\xca\x60\x2f\x39\x23\x2e\x48\x9f\xd2\xca\x4d\xc7\x61\x4e\xa5\xc1\x2b\x50\x86\x5e\x1d\xbf\x7a\x99\xdc\xf7\x2b\x52\xb4\x42\xd2\x3b\x72\x65\x6b\x9c\x07\x41\x95\x8b\xd9\x84\x4b\x49\xa7\x15\x24\x6e\x29\x8e\xce\x4d\x01\xf8\xf5\x81\x7a\xe0\x08\x8c\x98\x8b\x90\xad\x34\xa1\x87\x87\xe6\x04\x87\x80\x4f\xdd\x40\x02\xea\x63\xbf\x34\x49\x58\xd7\x15\x4d\xf2\xd2\x6b\x92\xe6\xde\xdb\xe9\x58\x5d\xe1\xfb\x7d\x90\x24\xef\x6d\x6c\xa0\xab\x6c\x4f\x5d\xe5\x64\xf8\xe8\x5e\x50\x65\x0f\xf7\x3d\x95\x04\x1d\x82\x57\x62\x65\x33\x26\x11\x34\x87\x3e\xac\xc4\x0a\xf8\x39\x08\x96\xc5\xea\xd1\xdd\x87\x55\x5a\x97\x27\x1d\x02\xff\xde\x3a\xb0\xba\x15\xb4\xd2\xbf\xbb\x97\x17\x98\x95\x55\x92\xcc\xf0\xb3\x52\x2d\x93\xb8\x70\x2e\x66\x28\x14\x89\x36\x7e\x19\x54\x93\x58\x60\x89\x18\x47\x35\xc1\x00\xd0\xd4\xb7\x8b\x93\x82\x3d\xae\xe6\x7c\x7d\x30\x9b\xdd\x5c\x63\xe1\x85\x60\xc5\xf5\x6b\x2a\xad\x78\xd6\x72\xc4\x5a\x20\x06\xd6\x51\xe3\x32\x25\xb5\x3b\x98\xd3\x6e\xf1\x8e\x3b\xd0\xe4\x6a\x4f\xba\x8b\x63\xa5\x2f\x4f\xd1\x8f\x91\x2d\x41\xae\x9b\x6f\x01\x27\xb8\xc1\x2d\xd7\x81\x64\x92\xa2\xd9\xe6\x59\x1d\xae\xbf\x16\xd7\xc6\xba\xb9\xc7\xbe\xc3\x09\x7d\xf8\xf4\x50\x47\x81\x2c\x74\x18\x51\x13\x52\xb7\x35\x50\x6c\xc6\x63\x1a\x93\xb7\x0b\x4a\x78\x77\xcf\x9c\x30\x22\xb0\x8d\x2b\x38\x88\xa8\x25\x5f\xc1\x92\xb3\xd4\x03\xf1\x89\x0d\xa7\xe5\xfd\xa7\xd5\x14\xf3\x67\x09\x1d\x01\x3d\xe7\x90\x8b\x95\xd3\x6e\x23\x26\x9b\x34\x96\x9c\xa3\x5e\xa1\xe6\x32\x9b\x3f\xe0\xfc\xd4\x8b\xf2\xcf\x96\xde\xe1\x8a\x18\x0e\x7b\x27\x1a\x76\xaa\x4c\xc8\x76\xba\xaf\x66\xa3\xb5\x0f\xc1\xec\xd8\x0c\x7a\x78\xd4\x82\xcc\xa4\x4f\xbc\x78\x81\x0e\x4d\x1b\x07\x86\x64\x77\xb7\x4a\xae\x5d\xab\xf3\x87\x26\xa1\x72\x6b\xbe\xf5\x3a\x7f\x68\x30\xe0\x34\x9a\xbd\x58\xb8\xff\x26\x0b\x7c\x47\x80\xd3\x98\x56\x58\x54\x00\x4a\xbf\x36\x53\x86\xa6\xad\x42\x84\xdd\x51\xc1\x59\xad\x8f\x1f\x90\xcf\x68\xc9\x24\x08\x90\xc1\x17\x44\xa2\xdf\x1e\xfe\x78\x7a\x05\x49\x4b\x47\x96\x2d\xdf\x8e\xaf\x95\xc0\x0f\xb0\x32\x86\xe0\x75\xfb\xb8\xdf\x90\x1b\xbb\xde\x2e\xa0\x9f\xb8\xb9\xd0\x63\xab\x5b\xd5\xe2\x0a\xa8\x9f\x8b\xaa\xd5\x77\xe1\xce\x76\x76\x7e\x1f\x78\x8a\x27\x2f\xa7\x0b\xdc\x12\x7f\xbf\xa6\x51\xc7\x35\xc7\x41\x3d\x0b\xf6\xeb\x1a\x0d\x79\x74\x8d\x87\x0d\x24\x94\x6b\x8a\xce\x81\xf4\xc4\x94\x61\x1e\x8e\xbd\x8b\xe3\xe0\x19\x50\x3a\xc1\x24\x7f\xbb\x9a\xa4\x6b\x1e\x46\xa8\xd1\xb2\x73\x1f\x7e\xc4\x61\xc8\x77\x0c\x22\x1c\xd1\x79\x76\x3d\xe3\x25\xd9\xbe\xaa\x50\xda\x3e\xbf\xb4\x6d\x06\x89\x4f\x94\xd9\x5b\xc7\x94\xce\x85\x82\x24\x26\xc7\x4f\x16\x0b\x52\xb6\x11\x2a\xd7\xc5\xcc\x80\x81\x46\xbd\xd7\x61\x54\x60\x56\x52\xbd\x57\x4c\x2a\x80\x79\xbd\x3e\x64\x56\xff\x77\x0d\x8a\xb0\x66\xa9\xff\xf0\x32\x82\x79\x0d\x20\xd6\x6b\xea\xf6\x28\xac\xda\x6b\x09\x13\x40\x25\x2d\x09\x9a\x92\x82\xd7\x04\xb0\xc3\x0d\x67\x46\x1f\x77\x94\x0a\x3e\x81\xc4\x44\x8e\xcd\xd0\xb6\xed\x52\xe0\x08\xb5\x17\xba\x3b\x46\xd2\x73\xed\x0b\x40\x8b\xe9\xb5\xa6\xa2\x6b\x5e\xcf\xa3\x81\x6d\xf8\x95\x41\x9c\x21\xdc\x15\xed\xd4\x23\xd8\xb6\x3f\x9f\x93\x4c\xd3\x2d\xd5\x98\xdc\x51\xa0\x1f\x38\xc1\x52\xd2\x39\x1b\x37\xbc\x1c\xeb\x66\x4f\x7e\xa3\xff\xbb\xf5\x51\x8a\x14\x00\xba\xad\x6b\x52\x81\x64\x7e\xee\xf3\xe3\xda\x35\x7b\x5a\xba\x9f\xcc\x21\x72\xd6\x19\xe4\x17\xac\x2c\xdc\x8c\x2a\xb3\x5e\x31\xcb\x74\xbd\xa1\x1d\xe3\x71\x35\xef\x3b\x90\xa8\xc2\x53\x52\xc9\x4f\x6d\x17\xc0\x38\xc4\xf4\x60\xcb\x04\x2c\x77\xed\xe0\x8d\xbb\x25\x62\x93\x44\x84\x3b\x5d\x25\x3a\x5c\x4d\xa2\x63\x86\x79\xae\x28\x7d\x3b\x45\xd2\xff\xf1\x2d\xbb\x9c\xb6\xc3\xaf\xbd\xab\x53\xef\xa1\x0f\xd7\x6b\x20\x19\x19\x00\x41\xb6\xde\xc4\xbc\xb6\xf9\xdf\xac\x0c\xb4\x10\x90\x86\x26\x80\x26\x88\x9e\x69\xc8\x92\xa6\x1d\x8f\x37\xe4\x85\x6e\x7f\x09\xd9\x11\xac\x7a\x5a\xa0\x40\xae\xb9\x03\x66\xbc\xaa\xf8\x3d\xf0\xdf\x98\x3e\x04\xee\xcf\xed\x79\x5c\xc6\x72\xa5\x02\x5d\xbf\xce\x73\xbe\x11\xd8\xf7\x8e\x72\xf7\xdf\x24\xec\x42\x05\xd0\x8b\xd7\xf1\x7f\x7c\x31\x39\x8b\xff\xe3\x1f\x24\x11\xdb\x7a\x15\xed\x9f\x0b\x22\x79\x2b\x8a\xad\xf3\x39\xed\x9f\xaf\xae\x1e\x6e\x9a\x53\x51\x73\x31\x31\x35\xc4\xf3\xbc\x54\x92\x77\x7a\xfb\xb9\x2d\x91\xe9\x9d\x50\xa4\x3e\x6b\x3f\x67\xf2\x8d\xe0\xed\xb6\x56\xdc\xc7\x5f\x76\xb6\xc0\xcc\xe5\x17\x64\x1a\xf9\x52\x16\xaa\x8a\x9d\xc6\x05\x16\xc4\xd6\x26\xd5\xca\xa5\x6c\x70\x91\x69\xf6\x7c\xd9\xd0\x8c\xaf\xcb\xb8\x1e\xb2\x6d\x9a\x8a\xd4\x84\x29\x5c\xc1\x6b\x73\x6d\xc4\xb5\xf7\xa6\x2c\x76\x77\xe5\xfc\xf4\x1f\x3f\x3f\xcd\xe9\xfc\x78\x13\x39\xce\xea\xa7\x5a\x48\x3f\xb9\x1f\x6f\xa1\xc0\x0d\x9e\xd2\x8a\x6a\xd5\xe7\x29\xde\xef\xc2\xeb\x57\x9c\xab\xef\x3d\x2c\xf0\x29\x5a\x6a\x04\xbd\xa3\x15\x99\x6f\x1d\x5a\xfd\xbc\xed\xa4\x2f\xd2\x89\x6b\xe2\x5c\x16\xb8\x8a\x49\x8d\xf9\xcc\x91\xf0\x02\xe2\x3a\x4f\xb2\x20\x69\xa2\xe7\x33\x5e\xbe\xbd\x20\x8a\x56\xe0\x63\x71\x8a\x11\x4e\x9d\x78\x54\x61\x1c\x9a\x26\xdd\x61\xf9\x58\x75\x79\x5b\xe6\x94\xcd\x51\xaf\x8e\x61\x2b\x04\x61\xaa\x5a\x06\x71\x57\xe0\xe5\x30\x8a\x37\x28\xc5\xa0\x97\x5b\xe5\x32\xc6\x9d\x77\xea\xed\x2d\x4b\xf9\x51\xe3\xa5\xd6\x46\x03\x77\xce\xac\x05\xae\x19\x30\x00\x4c\xc5\x59\x80\x5b\x45\x11\x97\x6d\x28\x34\xc4\x1b\xc2\xba\x2d\x7c\x62\xdd\xab\x63\xbd\xb5\x7b\xa5\x87\x8c\x75\x7a\x5c\x97\xbf\x69\x2a\xac\x66\x5c\xd4\x63\xe7\x45\x19\xf7\x2c\xd7\x88\x6e\x9d\x41\x1a\xbc\x87\x84\x18\xda\x27\x53\x9d\x9d\x95\x15\x09\xac\x52\xbf\x00\xac\x34\xb1\x4f\xd4\x32\x41\x0a\x3e\x67\x50\x08\xc0\xfe\x16\xec\x2d\xef\x34\xc2\x52\x5b\x84\x88\xb5\x55\xb5\x75\xdf\x22\x6d\x59\x7e\x47\xc4\x82\xe0\x2d\x4f\x61\xda\x06\xff\x60\xdb\x44\x82\x34\x82\x48\x98\x50\x13\x81\x37\x3a\xbe\xef\x14\xc2\x52\xf2\x02\x48\x8d\x4d\x8e\xa1\xa3\x1b\xc3\x60\x69\xce\xb8\x40\x18\xcd\xe9\x1d\x61\xe8\xca\xec\x86\xb3\x0a\x6f\x4f\xb3\x15\xb8\xed\x9c\x87\x1e\xb7\x8a\xfb\xfc\x53\x84\x15\xc2\x65\x4d\x81\xe4\xc1\x10\x17\x58\xaf\x66\xd8\x6a\xf0\x15\xbd\x4b\x05\x87\x6c\x44\x74\xb1\x6d\x7e\xea\x67\xbd\x17\x92\x32\x1d\x8e\xc0\x4f\x17\x58\x88\x0e\x3f\xe1\x6b\xa7\xa3\x02\x42\xef\xae\xba\x4c\xc4\xf4\x7c\x4e\x87\x2c\xbf\x86\xbe\x06\x36\x35\x6a\x7d\x5b\x0b\x7c\x67\xd0\x16\xdd\x12\x57\x5a\xcd\xd8\x56\x8d\x94\xc4\xd4\x80\xef\xf5\xcb\xe4\x1d\xba\x80\x08\xf0\xd1\x82\x67\xad\x8b\x8e\x4c\x78\x79\xdd\x90\x62\xd4\x6d\x41\xb7\xe0\x8e\xa8\xc3\x71\x88\x6d\xd9\x9f\x40\x0a\x1a\x8f\x8a\x30\x4e\xe6\x52\xef\xd6\xb0\x93\x21\xec\x85\xaa\x1e\x2b\x09\xd8\xf5\x9d\xbc\x30\x58\x89\x7f\x11\xb1\x75\x66\xd2\x06\x6f\xde\x9c\xaa\xe3\xdb\x3f\x81\x2b\x8f\xb0\x05\x66\x05\x68\xf2\xf2\xe4\x96\x34\xf2\x44\xd2\xb9\xf1\xdc\xfd\xf1\x4f\x7f\x02\x37\x9e\x5b\x9c\x93\xab\xf3\xd3\xd7\xef\xcf\x8f\xeb\xed\xd4\xb2\x9d\xfa\xf4\x1a\xac\x14\x11\xec\x3b\xf4\x3f\x87\x7f\xff\xdd\xaf\xe3\xa3\x3f\x1f\x1e\xfe\xf4\x72\xfc\x9f\x3f\xff\xee\xf0\xef\xc7\xf0\x8f\xff\x38\xfa\xf3\xd1\xaf\xee\x87\xdf\x1d\x1d\x1d\x1e\xfe\xf4\x97\xf7\x6f\x6e\x26\xe7\x3f\xd3\xa3\x5f\x7f\x62\x6d\x7d\x6b\x7e\xfa\xf5\xf0\x27\x72\xfe\xf3\x67\xbe\xe4\xe8\xe8\xcf\xbf\xdd\xb2\xa3\x91\x9c\x9e\xa9\x3c\x9e\x49\xdc\x9d\x19\xf9\x3a\x1b\x41\x48\x0d\x37\x48\x0c\x29\x41\xda\x05\x34\x59\x69\xdb\x69\x5a\xf6\x27\x7d\xaf\xb8\xee\xb1\xb9\xbe\x6a\xa4\xb9\x7e\x2a\x7e\x0f\xc4\x30\x94\x6b\xc5\x79\xfb\x80\x15\xa8\x71\x97\xe4\x8e\x88\x91\xeb\xc3\x3b\xfd\xca\x49\xe4\x1b\x43\xc4\xc4\xa6\xf7\x45\x32\xef\x45\x6e\x10\x37\x2f\xcf\xb9\x92\x37\x40\x74\x67\x47\x0b\x82\xfb\x18\xfd\x88\x05\xe5\xad\xb4\x1a\x32\xd2\x46\x38\x67\xa0\x64\x18\x22\x05\x7f\xd9\x43\xdc\xc6\x64\x5d\x6c\x2b\x64\x5c\x93\x9e\xb9\xb8\xb4\x2c\x54\x7e\xea\x4f\xfd\x25\x79\xb6\xf9\xd6\xa6\xdb\x9a\x88\x8d\x20\x77\x6e\x18\xc2\x51\x11\x11\x65\x4a\x76\xf8\x51\x19\x8b\x60\xe3\x15\xed\x14\x9a\x6d\x9d\x05\xc1\x94\x41\xa3\x6e\x8c\x70\xa1\xc5\x84\x6e\xa1\xb8\x13\x9d\x3b\x42\x31\x58\x37\xe3\xb4\x0f\x3e\x8d\x3b\x66\xf1\xc2\x31\x96\xad\xaf\x59\x9d\x8d\xe7\xdc\xff\x17\xb3\x1e\xd2\xd2\x47\xfe\x3b\x66\x58\x3f\x8d\xe8\x85\x39\x10\x70\xd5\x8f\x0b\x41\x15\x2d\x70\xf5\x22\x02\x60\xeb\x5e\x54\x54\xad\x36\xb8\xc2\x77\x09\x82\xd4\x3d\x37\x7d\xc2\x15\xba\x25\xcb\x7b\x2e\x4a\xa7\xfd\x85\x78\xdb\x6d\x43\xd9\x7a\x63\x48\xe5\x86\x03\x78\x7d\x2d\x92\x4d\xa4\x47\xd4\x44\xa0\x29\x71\xe0\xb4\x95\x2f\x2f\x8f\xd1\x29\x5b\x1a\xc5\x2b\xc2\xfe\xf7\x81\x97\xa0\x96\x2c\x68\xb7\xc6\x12\xe9\x9d\x06\xab\xf5\xb8\xbe\x61\x15\x55\x54\x6e\x33\xb2\x48\x9b\x3c\x5e\xf0\x38\xbd\xd5\x41\x8b\xb8\xb0\xac\xb7\x20\x90\x84\xe1\x08\xde\x16\x42\x6c\x5f\xf6\x2c\xb7\x85\xd6\xfa\x29\x23\x52\xbe\xd1\x1b\x76\x77\x67\x06\x83\x02\x6e\xfb\x02\x3c\xb9\x1d\xbb\x14\xd1\x92\xc9\x64\xfc\x69\x95\x80\x97\xdd\x37\xb7\x5d\xd2\x53\x07\x95\x01\x6b\xc7\x30\x58\xeb\xa6\xa9\x92\x61\xfc\xd5\xc4\x49\xf5\x37\x4e\x2f\xb7\x8d\xd2\x59\x8a\x2c\xa3\x42\xcb\x6e\x8c\x5d\x75\xd1\xfe\x28\xc1\x16\xb3\xb4\x46\xe4\x9f\x2d\xae\x00\x78\x79\x23\x5a\xb2\x6d\x61\xe2\x28\x83\x83\xa8\x7b\x2e\x6e\x4f\xbe\xfd\xd3\x4b\xb0\x39\x7c\xef\xc6\xf3\xad\xaf\xa8\xd8\x74\xf1\xa8\x44\xf1\x95\xda\xe9\xe5\x55\xb8\x91\xdd\x5a\x3a\x87\x86\x85\xd4\x9a\x82\x1e\x7a\x07\xf8\x05\x8a\x82\x2a\x44\xa5\x85\xc7\x27\x84\x8f\xbb\xee\xde\x2c\x9b\xed\x95\xa4\xf8\x5c\xee\x5e\xbb\xc9\x98\xd1\xb3\xf0\x6d\x66\x55\xa4\x59\x12\xdf\x4e\x80\x7c\x38\x90\xc1\xc7\xc0\xb0\x03\xd2\x1c\x10\x39\x70\xc3\x2c\x9b\x04\x36\xa1\x2c\x80\xc8\x48\xb8\x89\x73\xb0\x01\xe9\xc7\xb3\xca\xdc\xab\x5e\xcb\xf6\x26\x75\x6a\xc1\xca\x2f\x7d\x01\x0d\x4b\x19\xb5\xad\x7a\x62\x48\x44\xa1\xc6\xa5\x2f\x98\x66\x9d\x3f\x80\xeb\xaa\xb4\x19\x57\x1a\x32\x54\x2c\x94\x51\x98\x63\xf1\x05\x1d\x8d\x4c\x49\x10\xbe\xc3\xb4\x02\x30\x3d\xb8\x92\xb8\xec\x61\x6b\xcc\x60\x0b\xce\x64\x5b\x43\x8f\xb6\x0d\xa5\x4d\x97\x56\x9b\x88\xf1\x6f\x52\xc3\x11\x59\x35\x8b\x8f\xb3\xc9\x6f\xaf\x9a\xbd\x5e\x32\x5c\xd3\xc2\xad\xe2\xa9\x59\x36\xe0\xa1\xec\xb1\xcf\xc7\x7b\x65\x75\xf7\xeb\xba\x55\x7a\x6a\x63\x94\x93\x5d\xdc\x0c\x11\x61\x1f\xb8\x4c\x82\xa3\x10\xa6\x64\x90\x07\x5c\xa8\x6a\x09\x11\x95\xde\x97\x46\x88\x50\x48\x5b\x35\x68\xf6\x6a\x7b\xc2\x14\x2e\xec\xce\x32\xfa\x6c\xef\xed\x37\xa4\x6e\x80\x0c\xd1\x2a\xf0\xd2\xb0\x06\xab\x56\x30\xc7\x83\xba\xf2\x17\x5b\x37\x1f\x60\x1a\x23\xd2\xd0\x2e\x14\xc2\x65\x29\x11\xf6\xb5\x98\xa8\x32\x8a\x77\xcb\xe8\x3f\x5b\x52\x2d\x11\x2d\x09\x53\x1d\xee\xad\x3f\xc5\x96\x2e\xca\xca\x87\xed\xc5\xfa\x59\x77\xbe\x8d\xba\x4f\x48\xe9\x0a\x18\x59\x7f\xf2\x23\x6b\x6a\xdc\xbf\x60\x26\x68\x5d\x3d\xc2\x4c\xd8\x91\x4e\x10\x41\xee\x92\xa2\x0a\xc4\x12\x1a\xe4\xc8\x1a\x81\x30\xec\xe6\x8d\x64\x38\xa8\x4d\xbc\xaa\x58\xdd\x4a\x11\xf8\x49\xf3\x74\x94\x0b\xfa\x02\x44\xaf\x2f\xaf\x7f\x79\x77\xfa\xdf\xe7\xef\x9e\x9d\x48\xb2\xa7\x2a\x6c\xef\xd5\x30\x4f\x8e\x25\xb8\x5a\xed\xc8\x6a\x58\x7c\x45\xfe\x38\x0b\xdc\xea\x73\x32\x96\x89\x88\x39\xd4\x98\xa9\xbe\xee\x12\x02\xa2\xde\x75\x1e\x08\x6f\x3e\xdb\x30\x24\x7d\x15\x6f\x94\xbb\xbe\xa2\x58\x54\xbb\x26\xae\xb5\xdb\xbd\x13\x8e\x64\x2f\xf6\x50\x6f\x6a\x3f\xbe\x97\xdc\x57\xa3\x1a\x5d\xdf\x87\x59\xf7\x14\x90\x6c\xfb\xdb\x39\x48\x2c\x03\x56\x21\x13\x7c\xc5\x88\x91\xfb\x55\x75\xc1\xdc\xe4\xfa\x2f\x62\xf7\xd4\x94\xb7\xac\x34\xb7\x9b\x1d\x82\xf1\x7d\x87\x19\x41\x25\xa9\x88\x72\x9e\xab\x34\x05\x01\x39\x35\x1b\x88\x62\xc1\xe7\x05\xef\x36\x8a\x3b\xd4\x4b\x73\x67\xc8\x4b\x64\xfd\xc9\x08\xe1\x8a\xb3\xb9\x65\x27\x8e\x6a\xb6\x63\x0b\xf0\x51\x84\xd1\xda\x64\x43\xc9\x5d\x6c\xaf\x09\xd3\x17\xab\xd3\xa4\x6f\xd6\x70\xb9\x74\x9b\x82\x14\x5c\x94\xc6\xa7\xa3\x27\xde\xb8\x6f\x8e\x7b\x27\xee\x1a\x3e\x23\x32\x7a\x63\x6d\xd4\xbb\x61\x7e\x19\x87\xa2\x1e\xf3\xc0\x47\x06\x86\x8f\xd1\x74\xa2\x9a\x5b\x09\x95\xf7\x44\x79\xc0\x1d\x21\x78\x85\x9a\x0a\x33\x62\xab\x89\x78\x07\x6c\x96\x69\x1e\xe4\xfa\xa7\x9e\xaf\x20\x29\xd3\x9b\xf8\xbb\x70\x7c\x78\xca\x66\x53\x18\x01\x1b\x1e\x16\x3e\x43\x67\x93\x1f\x60\x9b\xbc\x27\x35\x17\xcb\xae\x93\x5e\x45\xd7\xa7\x00\x6f\x2d\xac\x37\xe7\xf4\x68\x73\xc9\x42\x04\x9d\x83\x78\x69\x8e\x9d\x45\xe9\xe8\x9e\xbc\xa3\x35\x55\x90\x6b\xb6\x6d\x5c\xa8\x68\xda\x17\x23\xf4\xa2\x86\xa1\x40\x64\x09\xbd\x58\xb4\x73\xd2\xe0\x39\x91\xe3\x17\x7d\xf1\x2c\x91\xa1\xe9\x59\xf1\xfe\x60\x41\x4c\xf0\xc3\x21\x19\x53\x1c\x07\x26\xd8\xaa\x7f\x62\x64\x3c\x17\x18\xc2\x37\x4e\x9c\x70\x53\xba\xc5\x76\x09\x07\x6e\x8b\x28\xe9\xad\x6d\x03\x01\xd3\x3c\x32\x3e\x26\x3d\xb1\xfe\xf5\x72\x81\x05\xd8\xd7\xb5\xbe\x92\xfa\xab\x83\xa3\xd4\x80\x6d\xbd\x3a\xda\xbe\x7d\x47\xee\x48\xd5\x6d\x49\xeb\x9f\xd9\xb2\xe1\xed\x6b\x09\x46\x1b\xaa\xf1\x76\x63\x11\xe1\xe2\x44\x59\xd4\x4d\xbb\x8f\xb5\x98\xea\x94\x4b\xa9\x8f\xba\x3f\xdb\xa3\x5e\x12\x74\x98\xde\x64\xfe\x38\xa6\xb4\x12\x78\x1f\xf4\xe1\xe9\x78\xdf\x43\x1e\xfe\xa8\x1b\x2e\x38\x49\x25\x69\x08\x2b\x5d\x51\xe6\x88\x77\x3d\x91\x97\x10\x7d\xc4\x53\xa8\xa5\x5d\x81\x19\xc8\x19\x87\xf1\xd3\x67\xbb\x3b\x7d\xdb\x5f\xa1\x29\xcc\xc4\xd1\xbc\xc4\xbd\x4d\xf9\xa8\x8b\x50\x6b\x21\x84\x29\xb1\xb4\xb8\xcf\x6b\xbd\xb1\xfa\xd2\x35\x5e\x65\x88\x26\x24\x4e\xa3\x23\x8e\xa6\x12\x4e\x25\x12\x4e\xa1\xd1\xcc\x56\xe3\xf3\x23\x4c\xee\xbd\xc5\x06\x4b\x60\x5d\x8c\xc4\xd6\xc6\x41\x16\x85\x3c\xe1\x25\xba\x07\x30\x41\x9f\x66\xc1\x94\x11\xbe\xd0\xdd\xba\xed\xca\xa3\xb9\x7b\xd4\xc5\x40\xa2\x9b\xb6\x7e\xb4\x64\x26\xed\x0c\x4c\x53\x16\xbd\xbc\xeb\x8d\x60\xd5\xb3\x9e\xb7\xa2\x58\x70\x49\x98\xc5\xc0\x0b\xf7\x05\xd6\x8f\x3b\x97\xe6\x1e\x4c\xaa\x3b\x6d\xe9\x3e\xc8\x1d\x11\x4b\x05\x01\x50\x4f\x7f\x6c\xfd\x9e\x72\x25\xfa\x15\x60\x9c\xa3\x1b\x06\x99\x6d\x93\x02\x00\xdf\x32\x73\x3e\x57\x18\xe9\x4e\x76\x44\x5e\x7e\xa6\x48\xd1\x96\x8f\x96\x09\x0a\x2c\xed\x44\x45\xb2\x16\x46\xc7\xa9\x0f\xcc\x94\xf8\x01\x0a\x0a\x77\xa6\x51\xc1\xeb\xa6\x55\x41\x6c\xd6\xc5\x6e\x63\x56\x3f\x89\xe2\xa2\xc6\x0c\xcf\xc9\xd8\x77\x64\x1c\xe4\x21\x45\xaa\x10\x91\x17\x6a\x0e\x88\x3c\xfa\x92\x60\xf2\x28\x1e\x2a\x8f\x32\xc0\xe5\x51\x2a\x64\x1e\xe5\x85\xcd\xa3\xee\x56\xda\xc9\xd1\xf5\x9e\x82\x95\xc3\x6b\xab\x81\x7f\xec\xf0\x3a\x4d\x30\xe6\xf4\x02\xd5\xb0\x6d\x99\x4a\xc4\x6b\xaa\x1c\x2c\x2f\xd0\x13\x80\x6b\x34\x24\x37\xb5\x82\x06\x40\x91\xf8\xff\x67\xef\x6f\xb8\xdb\xb8\xad\x7d\x71\xf8\xab\x60\x29\x77\x2d\x4b\x29\x49\xdb\x49\xfa\x72\x7c\xfb\xb4\x4b\x91\xe4\x56\x37\xb1\xad\x63\x29\xc9\xea\xd3\xf4\x9e\x80\x33\x20\x89\xa3\x19\x60\x02\x60\x24\xb3\xb7\xe7\xbb\xff\x17\xf6\x06\x30\x18\x92\x92\x2d\x0c\x24\x52\xae\xa6\x6b\x35\x16\x39\x1c\xec\x01\x36\x36\xf6\xeb\x6f\xc3\xf9\xc9\x3e\x34\x15\x2f\xb8\x89\x90\x9f\xcb\x14\x73\x2b\x02\xaf\x95\xd6\x04\xe7\xb5\xaf\x8e\x87\xae\x91\xde\xbe\x73\x29\xe9\x81\xf6\x02\x91\xd5\xd8\x87\x82\x31\xef\x69\x79\x92\x66\x4f\xd2\xec\x13\xaf\xcf\x4d\x9a\xb9\x2e\xce\x0f\x5f\x01\xf4\x1e\x07\x26\x4d\x57\xf1\xb3\xd6\x61\x36\xa0\xb8\x26\x44\xf3\x5d\xad\xcf\x21\xf4\xa0\x1f\x91\x77\xe2\x35\xf6\x06\x1d\x61\xf9\xcf\x84\x9c\x0a\xa2\x65\xed\xfa\x98\x7e\x30\x7a\x84\x1a\x2f\x25\xba\x9d\x6a\xe6\xf4\x5d\xa9\x99\x2f\x14\x76\xd5\xd6\x0d\x53\x28\xfa\x12\x4b\x85\xac\xb4\x42\xa2\xee\x19\x22\xec\x5a\xaa\xcb\x4a\xd2\x52\x3f\x6f\x24\xfe\xdf\x38\x40\xec\x3d\xff\xc2\xad\xfb\xb8\xb9\x3b\x84\x48\x6a\xba\x79\x54\x83\xf9\xd0\x45\x1a\xef\x57\xc6\xee\x65\xa0\xf6\x2a\x58\xfb\x31\x63\x40\x72\xc3\x24\x6a\x32\x57\xb2\x6d\x7c\x34\xb0\x43\x0b\xb6\xa6\xf8\x5d\xb3\x86\xa4\x9d\x8c\x28\x76\x8b\xe5\x06\x7d\x42\x82\x39\x0f\x9e\x07\xd6\xd9\x9d\x60\x51\x6a\x3d\xda\x88\xd9\xae\x5a\x91\x50\xea\x80\x75\xaf\x52\x75\xc0\x92\x8c\xec\x55\x6c\x4e\x8b\xe5\x5e\x9f\xaa\x0d\xf8\xa9\xce\x03\x6e\x8f\x5f\x7b\xac\x23\x75\xbe\x21\xed\x5d\x3d\xf8\xd0\xe5\x16\x8e\x6e\x4c\xfe\xc5\x3c\x32\xed\x5e\xdf\x97\x5a\x38\x56\x72\x25\xff\x77\x76\x4e\x24\x57\xe7\xfe\xf6\x0f\xbf\x1d\x7b\xd0\x03\x78\xcd\x87\xd8\x37\x3d\x88\xce\xed\x55\x69\xf4\xb8\x6d\xca\x48\xc9\x75\x03\x9c\x09\xae\xee\xae\xd4\x21\x90\x9b\xaf\xe4\x66\xf3\x90\x9e\x19\x12\x07\x1c\xb6\x1a\x5c\xcc\x1f\xbc\x6a\xe6\xbc\x3f\xb4\xdb\x77\xb2\xa1\xbf\xb6\x5d\x1f\x5a\x77\x58\xa1\xb2\x1d\x2d\xa0\x9b\x44\x68\xcc\x1a\x61\xc3\x26\x1e\xae\x96\x35\xd6\xa9\x01\xbd\xba\x93\x20\x61\xe9\xb4\xa1\x4b\x2f\x51\xfb\x2f\x51\x42\xf5\x0b\xf3\x9d\xb7\xee\x48\x45\x87\x68\x1b\x44\xa0\xd5\x42\xeb\x06\x0e\x59\xff\x6d\x72\x6a\xeb\xea\x7c\xaf\x06\x32\xa8\xc1\x7a\x12\xc8\x83\x70\xb0\x14\xd8\x7d\x05\xd2\x44\x6a\x79\x05\x98\xa0\x56\xa7\x98\x19\xa6\xae\xa9\x2a\xef\x78\xe6\x6f\xb5\xaa\xa6\xff\xfa\xc0\x6d\x1d\x16\x08\x1c\x9c\x67\x88\x81\x3a\x6f\xa9\x2a\xa1\x8c\xaa\xe3\x89\xa7\x44\xda\x4d\xd7\xd6\x13\x69\x5d\xb1\x74\x24\x00\xee\x1e\x4a\xf6\xd7\x09\xb5\x7a\x50\xff\x49\x18\x2b\x81\xb2\xb6\x95\x74\x2c\x28\x8c\x7e\x4a\x97\xb9\x93\x8b\x78\x05\x1f\xec\x41\xcf\x9a\xfe\xd0\x64\x21\xab\x12\x94\xd5\x71\xc5\xae\x58\x15\x48\xb3\x02\x57\xf1\x69\x6b\x1c\xce\x52\x21\xeb\xda\x95\xbc\xbb\xe6\xf3\x58\x1e\x7f\x67\x63\x07\x61\x01\x69\xf5\xaa\x07\xb1\x00\xa7\xcb\xc4\x92\xc7\x80\x33\xe2\xb7\x04\x13\xd2\x2b\x05\xee\x18\x94\x33\xc2\x2c\x9b\x26\xb0\xdf\x16\x32\x26\x56\x40\x17\xb7\xe1\x5c\x5c\x21\xc1\xc7\xbb\x0e\xdd\xc7\x44\x22\x5a\xa3\x5d\x8b\x56\xb3\xb5\xd6\x52\x1d\x9c\x56\x62\xfe\xfd\x5b\x09\xb5\xe9\xd0\x28\x3c\x04\x3c\x8b\xd0\x0c\xc1\x1e\xbb\x50\xb8\x0b\xb1\x56\xa9\x27\xc2\xa5\x10\x27\xc3\xaa\x0d\x72\x9e\x0d\x89\xac\xa3\x13\xe8\xce\x3f\x1c\x16\x55\xaf\x64\x41\x2b\x40\x20\x4e\x65\x31\x92\x2d\xa8\xba\x4a\x4b\x84\x9d\x40\xed\x6b\xc2\x67\x95\xa4\xa5\x47\x56\x67\xbe\x89\x02\x35\x2b\xf6\x77\x6a\x2c\x12\xb1\x4b\x70\x24\x5f\xf2\xd1\x28\x16\x41\x58\xf5\x06\x96\xd0\xb7\x24\x75\xb0\x37\xfd\x34\x02\xf7\x66\x31\xb4\xa0\x23\x65\xd0\x00\x1e\x77\x6c\x06\xe2\x38\x74\xc1\xb4\xb2\x92\x6b\xb2\xf7\xbd\x9f\xf4\xbd\x21\xbd\xb1\x93\x1d\x97\x26\xb1\x96\x38\x17\xcf\xe1\x3c\x04\x3e\x43\xff\xc5\x25\xb7\x33\x35\xeb\x84\x9c\x67\x89\x00\x45\xd7\x34\x15\x4f\xe7\xb2\x1f\x69\xc5\xcb\x20\x39\xa9\x1a\xd0\x1c\x36\x2c\x1f\x19\x47\x9b\xa4\x51\x6c\xbc\xbe\x51\xd2\x53\x0e\x9c\xc7\xc7\x3b\x2c\xc7\x1f\xed\xaa\x33\x90\x71\x09\xf9\x41\xc0\x9e\x13\xac\xb4\xda\x96\xec\x96\x82\x89\x99\x54\xe8\x8c\x79\x70\x86\x75\xb8\xda\xdb\x38\x86\x0f\x03\x7e\x4b\x0c\xfa\x8c\x2e\x48\x97\x67\x08\x3c\x89\x1e\xcc\xbe\xdb\xbc\x4b\x67\xbd\xfb\xb8\xd0\x42\xc0\x35\x44\xb3\x33\xe7\xe2\xfd\xc0\x00\xdf\xb9\x8e\x2e\xc6\x57\x20\x20\x8a\xe0\xb5\x1d\x74\xc1\x1b\x14\x62\xd4\xb8\x9f\xa7\x08\x07\x28\x2d\xb1\x0f\x0c\x3d\x2b\x1b\x59\xbe\x4a\xc9\x47\x7c\x89\x95\x29\xf2\x1a\xb0\x2a\xff\x72\x7a\x1c\xf6\xb2\x7d\xea\xeb\xf3\x14\xb4\x6f\x7b\x7d\x85\xcf\xd5\xcc\xcc\x79\x49\xa6\xae\xa9\x28\x33\x64\x5f\xb0\x6b\x62\xf7\x80\x76\x95\x3f\x01\xf3\xc3\xcd\xa6\x1f\x3f\xbc\x9e\x23\xe2\x20\x81\x8a\xaf\x5d\xdd\x0d\x53\x1e\x62\x6a\xca\x5d\x8b\xf4\x77\xef\x9f\x79\xa0\xce\xeb\xb1\xba\x1e\x8f\xc7\xe3\x94\xf9\xf3\x3e\xe1\x51\x6f\xe5\x83\x97\xa5\x96\x25\x9f\x2d\x57\xd6\xdf\x9e\x37\x1d\x49\xa0\x7b\x53\xb1\x74\xef\xff\x88\x74\xc1\xd4\xc8\x5e\x84\x5e\xf5\xbb\x6f\xd2\x44\x4d\x0c\xe1\xbf\x0d\xb1\xb3\x81\x8c\x00\x14\x31\x65\x0b\x7a\xc5\xad\x09\x30\xc3\xfd\x6f\x77\xd6\x4d\xab\xef\x35\x9a\x64\x59\xe0\x40\x23\x10\x50\x8a\x7d\x68\xa4\x86\x1d\x05\x69\x89\x67\x12\x0a\xcf\xfa\x88\xb1\xe8\x67\x6b\x1a\x68\xb5\x98\x30\x60\x4f\xe8\xb9\x18\x0f\xd6\x3f\xf8\x59\x21\x53\x6a\x89\x08\xaf\xbc\xbf\xc2\xf0\x49\xfd\x11\x4f\xdd\xae\x02\x97\x89\x90\x84\xcd\x66\xac\x80\x46\x46\xac\x59\xb0\x9a\x29\x5a\xf5\x49\xd3\x6d\xb1\x20\x54\xbf\xb2\x16\xb8\xb2\x1b\x14\x95\xd5\x9a\xde\xb9\xcb\x00\x71\x40\x1d\x60\x53\x97\x3c\x29\xc5\x13\x55\x9b\x08\xe8\x7a\xef\x9d\x78\x2f\xa5\x79\xc3\x35\x68\xba\xae\x02\x05\xe3\x9d\x7b\x93\x0d\x3e\x7e\xff\x5d\xc8\x6a\x7d\x3c\x82\x22\x49\xa9\xe8\x30\xde\xb7\xb1\xc1\xed\xb1\x61\x4f\xc3\x10\x81\x74\x29\xcc\x8d\xe4\xc2\xac\x35\x23\xb2\x7a\x5d\x91\x80\xb4\x65\xaf\x1f\x34\xd3\x21\x4e\xe7\xf5\xc4\x34\x30\x4c\xbc\xde\xd0\x65\x28\x3f\x75\xc8\xca\x2b\x4e\x2a\x8c\xa3\xba\xef\xa6\xd2\x2c\xd6\xbc\x58\x69\x9d\xac\xcf\x64\xb9\xf2\xa0\x51\x07\x9a\xd8\x07\xf9\x5a\x1d\xd0\x40\x7a\xb6\x35\x29\x59\xc9\xc4\x9d\xfb\x9f\x90\x00\xce\x41\xcd\xb0\x5c\xec\x7f\xa3\xb3\x14\x76\xd8\x5b\x09\x72\x68\x1b\x7b\xec\x34\x82\x80\x84\xf9\x8e\x77\x14\x78\x19\xec\xd6\xa3\x00\x98\x22\xc5\x58\x49\x09\x11\xee\xa4\x65\x3d\x9d\xb9\x9e\xff\x6b\x6a\xda\x95\x95\xcc\xbe\xb1\x3a\x34\x22\x25\xb4\x0b\x9c\x1b\x49\x98\xd0\xad\x72\x3c\x71\x67\x20\x54\x7b\x95\x92\x61\xc8\xcf\xbd\xce\x0f\xa7\xc7\xe4\x05\xd9\x87\x56\xc1\x20\xf6\x67\x94\x57\x01\xe3\x69\xb5\x35\x2a\x34\xb8\xb7\x8f\x48\x7c\xed\x90\xb2\x30\xa3\x95\x66\x23\x7b\x76\xc2\xd1\xe8\xde\xdb\xea\x20\x5e\xe5\x6e\x98\x02\x7c\xca\xb4\xa4\xe5\xcf\x41\xec\xa4\x6e\xdf\xa9\x94\x15\xbb\x73\x12\x47\xe8\x91\xb2\xad\x13\xee\x87\x07\x39\xe1\xe2\xb8\x84\xdd\xbf\xfd\x25\xc1\x2d\x57\x33\x43\x4b\x6a\xa8\x3b\xf9\xfc\x0d\xff\xb6\x8c\xf8\x74\xfe\x7d\xda\x35\xe4\xfc\x73\x7d\xb5\xb6\x6d\x4b\x6e\x20\x23\xd8\x92\x0b\xe7\x52\x8a\x5b\xd8\x9f\x9f\xc0\xfd\xd8\x67\x15\xb2\x0d\xd0\xeb\xea\x3d\x5c\x68\x05\xe9\xa8\xb8\x36\x11\x2f\x0c\x8c\xae\x05\xd5\x7d\x73\x4b\xc8\xd2\x9f\xd8\xa5\x8c\xcb\xdf\x03\x61\x96\x0f\x65\x20\x23\x9c\x7e\x2b\xb7\xe5\xb1\xa2\xa0\x7f\x15\x86\x40\x9d\x09\xf5\xde\xee\x2c\xcd\xaf\xd8\x5e\x52\x81\x6e\xf4\x7b\x52\x33\x2a\x34\x51\x0c\x66\x1a\xac\xf8\x19\xcc\x30\xba\xaf\x24\xa2\xe2\x9e\xc9\x32\xbc\xeb\x6a\x94\xcf\xab\x11\x29\xef\x8a\xf0\x5a\x98\x4a\xab\x2b\x79\x0d\xfb\xbb\xa2\x6a\xee\x9d\x05\x7a\x44\xa6\xad\x41\xbf\xa3\x26\x35\xff\x00\x0d\x00\x42\x77\x32\x98\x8d\x56\x44\x1f\x9c\xc9\x52\x87\xe2\xfe\x00\xf4\xe3\x8c\x66\x19\x63\xff\x80\x53\x3c\x65\xf2\x7a\xcb\x01\xf5\x15\xe0\x18\x25\xac\xe2\x73\xe8\x61\x1d\xcf\x16\x78\xdf\x7e\x19\x4b\x9f\x58\xfc\x0b\x71\x15\x19\xf0\xfb\xe4\x39\x0b\x88\x02\x6e\x75\xb4\x0f\x84\x51\x07\xae\x19\xbf\xb6\x0b\xcf\x86\x8f\x7b\x9b\x2b\x71\xcb\xb8\x04\xaf\x46\x6a\xec\xdb\x6d\x35\xbb\x8d\x83\x23\xc0\xc2\xc7\x96\x2c\x85\x8a\x13\x3f\xdf\x7e\xae\x29\x24\x72\x8e\x8d\x62\x8c\xbc\xe6\x53\xc5\xac\xb8\x11\xac\x82\x21\xf9\xf9\xd1\xf9\x69\xc7\x55\xf6\x23\x3b\x77\xd1\x87\x09\x24\x5c\x43\x4a\xb8\x7d\x46\xa9\xf8\x15\x53\xc4\x9e\x21\x2d\x54\x7f\xfb\x49\xf6\x12\x61\xba\x0c\xcd\x01\x5c\x3f\x47\xf8\x1e\x98\x09\xf3\xf4\x9d\x8f\x98\xa7\x94\x11\x1c\x9d\x9f\x1e\x23\x05\x5c\x68\x43\xad\x96\x47\xde\x01\x0c\x65\x3c\x39\x14\xbc\x2b\x44\xb1\x31\x2c\x7d\xc5\x4a\xa2\xbc\x24\xa8\xee\xdc\xed\x82\xac\x6d\x06\xd4\x01\x22\x4c\x57\xf0\xc3\xc1\x51\xea\xa6\x03\x6e\xef\x21\x0c\x44\x3d\x18\x92\xb6\xe3\xaa\x13\x09\x56\xf6\x53\x46\x1b\xad\x10\x3f\xc0\xe5\x74\x77\x1a\x4a\xae\x6f\x23\x02\xe4\xe0\x7b\x46\xcb\x9f\x14\x37\xec\x9d\x28\x58\x24\x53\x12\x3d\x7b\xb1\xd0\xf7\xf5\x15\x32\x66\x91\xa1\x58\x0f\x14\x8e\x4f\x84\x91\x89\x64\x12\x38\x33\xfb\xe7\x39\xc4\x12\x1c\x4c\xaa\xc3\x46\x58\x51\x15\xa5\xda\xa4\x40\xba\xa3\x29\xc6\x8b\x48\x09\xa7\xf5\x44\x66\x4f\x32\x3a\x99\xe5\xf2\x09\x7a\x5f\x6d\xd0\x60\xe2\xde\x51\xda\xb5\xdb\xc6\xc4\xd0\x39\x33\x44\x9b\xb6\xb8\xb4\x6f\x11\x20\x49\x8f\x3c\x46\x16\xa4\xb9\x3e\x22\xc5\x35\xc9\xb7\xd9\xef\xe8\xba\x2d\xeb\xcf\x33\x5e\xe1\x6d\x10\x19\xc5\xf0\xd7\xe3\xa5\xe9\xfe\x87\x7e\xa2\xfa\x9a\x76\xe4\x11\xf3\x10\x42\x9b\x50\xa2\xa8\x28\x65\xbd\x46\x9f\xdd\x99\x8c\x16\x8b\x04\x3a\x3a\x93\xe8\xae\xf6\x61\x4a\x48\xe6\x06\x8b\x72\x80\x7d\x98\x12\x24\x5e\xb1\x28\x1f\xb7\x7d\x98\x98\x77\x36\x30\x09\x8c\x5d\xb1\x2a\x43\x16\x0e\x40\x59\xd9\x49\x08\xa2\x1e\x3e\x40\x81\xbf\x9a\xa4\xd0\xdb\x22\x5b\xc9\x3d\x52\x32\x4b\xbe\xdb\x7b\x89\x69\x91\x34\xbc\xb6\x7d\xf0\xce\xbe\x75\xa6\x8c\xab\x0b\x97\x40\xd6\xbd\x35\xa4\x52\xed\xea\x5b\xb7\x49\xde\x47\xb2\xfa\xd6\x3f\x68\xec\x18\xd6\xbd\x35\x38\xfa\x76\xf1\xad\xfb\xbd\xce\xb7\x75\xf6\x3a\x2a\x9e\xd2\x84\x7b\xd7\x53\x9a\xf0\x7d\xa7\x09\x47\x60\x7e\x14\xfc\x58\xbd\xc4\xdd\xc7\x9a\x2c\x0c\x00\xf4\x76\x16\x19\x42\xf3\x36\xd4\x2c\x46\xe0\xb8\x33\xfc\xca\x43\xfe\x92\x4b\x0c\xfb\x3d\xeb\xb5\xde\xf5\x1b\xb1\xcb\xa3\x46\xa8\xbf\x4c\xb9\xc5\x9b\xf2\x89\xf1\x9e\xb7\xef\x2e\x62\xa0\x3f\xea\xbb\xbe\x25\xf7\xec\xd9\x95\x13\xf0\x7e\x72\x8e\x57\xd7\xe9\xfe\x52\x8e\x13\x9f\xb4\x39\xe3\xf8\x21\xf6\xdb\xa7\x65\x21\xaf\xe6\x20\x67\x1a\x7c\x35\x21\x79\xfd\xe9\x83\x56\x68\xc8\x41\x1f\x25\x04\x43\x1e\xd1\x56\x0c\xed\xc3\x50\x70\x0c\x39\xc9\xbd\x68\x0d\x34\x84\xe4\x0a\xba\x3f\x42\x74\x15\x22\xb1\x5c\x60\x29\x56\x0c\x15\x94\x62\x86\x7a\xc0\x9a\x35\x95\x0b\x3b\x6d\xd6\x54\x2d\x21\xc5\x09\x32\x10\x5c\xe6\xde\x7e\x5c\x09\x7d\x00\x76\x70\x8a\x20\x59\x30\x72\xbe\x36\xfb\xbe\x63\xb1\x73\xf7\xc5\xde\xc6\x34\x98\xd6\xf5\x05\xf6\x43\x38\x18\x58\xc3\x54\xed\x7a\x77\x31\xe3\x7a\xb5\x6a\xe6\x7c\xe1\x61\x7e\xd2\x12\xb0\x25\xba\x93\x19\x2d\x7d\xfe\x2e\xe6\x9c\xd7\xac\x9e\x62\xda\xa3\x5e\xef\xb4\x1e\x92\x3a\x6a\x3a\x4f\x92\xf1\xab\xfe\x14\x21\x23\x5c\xa2\xc0\x61\x8a\xd9\x4f\x71\x62\x65\x3b\x5f\xac\x93\x96\x92\xc5\x72\xeb\xcb\x40\xa4\x4a\x9b\x1e\xe8\x05\xe2\xf0\x42\xdc\x2c\x15\x89\xf7\xf6\x25\x7e\x44\x0a\xf1\x03\xa3\xf0\x0e\x85\x5e\x1a\x12\x56\xcf\xd8\x04\x90\xdc\xc2\x02\xdb\x10\xe6\xc7\x51\x58\x7e\xbd\xde\x44\xfb\xac\x19\x94\xe9\x6b\xb9\x33\x2e\xd2\x54\xd0\xaa\x80\xde\xd6\x49\xfc\xbb\x21\x04\xce\xd4\x9c\xb9\xe0\xf7\xb9\x51\xbc\x30\x9b\xf3\x87\xdd\x7d\x03\x62\x39\xfb\x87\x55\xb3\xa0\x07\xe4\x07\xed\x23\xc8\xb8\x7d\x42\xc4\xf5\x93\x04\x3f\xc4\x79\xd0\xd7\xec\x0e\x80\xc4\xa8\xcd\x66\x35\x07\x2c\x8e\x00\x71\xd7\xe5\xa6\x83\xf7\x93\x07\x20\xf9\x47\x24\x3b\xd2\xb4\x9f\xa5\x2e\x4c\xb5\x15\x95\xe7\x1c\x87\x86\x52\x78\x42\x83\xfe\x13\x3a\x0a\x95\x9e\xb8\x2e\x9e\x17\x9a\x3e\x40\xf0\x09\x12\x03\x5a\x11\xda\x2a\xa4\x1c\x1c\x6e\x84\xfd\x9b\x52\x32\x0e\x48\xcd\xe7\x0b\x13\x72\x2f\x2b\xda\x8a\x62\xf1\x88\xb8\x62\x9b\xb8\xee\xb8\xc2\x21\x4b\x89\x92\x4b\x2b\xed\x2b\xd2\x50\x45\x6b\xab\x76\xb9\xfd\xad\x59\x52\xe4\xe2\x51\xa2\xb8\xdb\x9f\x82\x58\x4e\xf8\xed\xce\x20\xc0\xbf\x0d\xcd\xc5\x1c\x49\x4b\xc8\x5e\x49\x5a\x46\x92\x03\xd5\x1c\x66\x34\xcb\xab\xfd\x08\x41\xb6\x5d\x79\xb7\xac\x2a\x92\x93\x24\x5b\x0e\x27\xff\x84\x54\x78\x9d\xa3\x08\x88\x26\xf7\x1f\x52\xf6\xfe\x1b\x07\x84\x49\xfb\xf9\x92\x2b\x91\xd8\x18\x99\x2f\x91\x80\x8f\xa4\x0e\x6f\x37\x23\x3d\xfd\x44\xaa\xd2\xf2\x32\xb7\x18\xa1\x9d\xd7\x9a\x1e\x29\x06\xcd\x4e\x69\x75\xde\xb0\x62\x9b\x0e\xcc\xbf\xbc\x39\x3f\xec\x53\x03\xe7\xbc\x6b\x4b\xc1\xe0\x7b\x42\x4b\x5f\xfa\x79\xcd\xa6\x0b\x29\x2f\x13\x07\xdb\x8f\x10\x19\x17\xed\x74\x52\xc8\x3a\x42\x39\x1d\x6b\x3e\xd7\xcf\x9d\x60\x18\xdb\x69\x3a\x20\x5c\x54\x70\x5c\x7b\x7d\x88\x09\xe3\x4d\x96\x01\x2f\x4c\x8a\xf0\xc6\xc0\x50\x0e\x7a\xd3\xe9\x5d\xeb\x53\xf2\x76\x10\xca\xd5\xe0\x23\x65\x9d\x63\x52\xbb\x7d\xae\x70\xcd\x0d\x6f\xba\xd2\xb5\x33\xb0\xc1\xea\xac\x61\x00\x70\x2b\x53\xe2\x62\x46\xd6\x44\xdd\xe6\xee\xf9\x6b\x47\x46\xec\xbb\xe3\xb3\x58\x9e\x47\x7e\xe5\x50\x1c\xf6\xcc\xfe\x92\xb8\x9f\x3e\x1b\xde\x8a\xe5\xb0\xaa\x50\x4f\x38\x93\xe5\x33\x1d\x07\x63\x3b\xd0\xb6\x90\xfb\x86\x89\xf1\xfc\x8a\xf5\xe8\x4f\x55\x04\xed\xb5\xcf\x43\x0a\x71\xd4\xff\xdf\x41\xc5\xd5\xfc\x83\xa5\x2d\x1e\x2b\xa2\x0f\xfb\x5e\x8a\xf1\xe6\xaf\x93\xea\xae\x09\x14\xea\x05\x2f\xe3\xc8\xae\x47\xfc\x78\xcb\xdf\xaa\x65\xd8\x6b\xdd\x7e\xf1\x96\x99\x6b\xa9\x2e\x71\xae\xe2\x3c\x2b\x23\xe1\xce\x21\x2c\x9e\x56\x66\x45\xe2\x52\xab\x4c\xbb\x3d\x99\xcb\xa1\xec\xca\xd1\x61\xcf\x7f\xaf\x35\xdd\x7f\x19\x16\x59\x29\xc5\xb2\x0f\x7e\x80\x72\x2c\xb2\xb9\x24\x6b\x5d\x45\x9a\xdc\x4f\x51\x16\xd9\x76\x85\x20\x19\x80\xa1\xcb\xd4\x15\x2f\xd8\x61\x51\x40\x2a\xfc\x9d\x86\x1e\xc6\xae\xc7\xcc\xbe\x32\x35\xac\x3c\xef\xd1\x80\x49\x3e\x65\xf8\x96\xd0\x8a\x53\x68\xc0\x49\xfa\x37\x5a\xfe\xbe\x3b\xf0\xbb\x7f\x2c\x64\x14\xad\xbc\xbe\xdb\x31\x10\x73\x79\x18\x04\xe3\xb5\xe1\x1f\x16\x58\x72\xfd\xe5\xd7\x75\x89\x95\xd5\xf1\xe5\x2c\x2b\xb8\xe9\x77\x1c\xfa\xd3\xf0\xf3\x0d\xd5\x97\x5d\xbb\x0e\x36\x6e\x64\xd9\x75\xe7\x88\x3e\x77\xd3\x38\xa6\x48\xe3\xdd\xda\x76\x24\x2f\x9d\xb1\x67\x91\x9d\xa9\x43\xfd\xfa\x3f\x8f\xdf\x3e\x30\x1c\xb8\x3f\x12\xed\xec\x3f\xd3\xa0\x61\xc1\xaa\x79\xdb\x33\x4a\x40\xa1\x3a\xba\xd1\x92\x3a\x22\x8a\xba\x68\x25\xc5\x03\xa1\x62\x14\xdd\xa7\x64\x3f\x02\x77\xbf\xf3\x71\x7e\x2a\x48\x97\x50\x8d\x2a\xc1\x08\x79\x04\x0b\xdd\x7c\x0d\x0e\x20\x3f\xfd\xe7\xf1\x5b\x1f\xea\x0b\xd4\xa3\x21\xe9\x38\xcf\xb9\xfc\xf6\x7d\x32\x43\xff\x0e\x6d\x54\x5b\x18\xd2\x1a\x6d\x3f\x4f\x21\xd5\x1f\x8c\x9f\x40\xac\x62\x73\xae\x8d\x5a\x3a\x79\x2e\x67\x11\xc9\xce\xb9\x1c\x6e\xb9\x64\x4b\xf2\xd7\xef\x4e\xfe\xf6\x5f\xdf\xbf\x3b\x3a\xfc\xfe\xbf\xde\x1c\x1e\xfd\xf5\xf4\xed\xc9\xcf\x3f\x9f\xff\xed\xfc\xe2\xe4\xcd\xcf\x3f\x1f\xb5\x4a\x31\x61\x8e\xb0\xf1\xee\x39\x33\x3f\xff\xec\xf6\x98\xfe\xf9\xe7\x8b\xa2\xe1\xcd\xcf\x3f\x9f\x79\x37\x27\x9c\xa3\x76\xaa\x12\x60\xc1\x01\x7a\xac\xab\x8e\x04\xfd\x0e\x97\x1f\xde\xb2\x57\x77\x39\xa0\x83\x06\x54\xfd\xa7\x88\xcb\xbb\xeb\x5a\x50\xe4\xe6\xf4\xc2\xb7\xde\xd9\xff\xa0\x22\x13\xaa\xec\x28\xd1\x5c\xcc\x01\xed\x0f\x55\xd4\x10\x78\x20\x53\x66\xae\x19\xc3\xba\xcd\x55\xd5\x2a\x1d\x0f\xee\x27\xab\xfa\x1a\xd7\xe2\xd8\x2a\x30\xbd\xd6\x2c\x2e\x4d\xc9\x15\x02\x5e\x71\x76\x0d\x6a\xba\xe6\x73\x41\xab\x28\x34\x08\x9d\x0a\x31\x03\xac\xfb\xfd\x1d\x29\xe1\x51\x11\x27\x36\x77\x76\x61\xb2\x7e\x96\xc9\x5a\x86\x49\xaf\x33\x06\xd5\x96\x36\x56\x92\xb3\xd3\x63\xf2\xf2\xae\x93\x01\xb6\x81\xcb\x2a\x39\xdf\xc4\x10\xc1\x11\x65\x55\xbc\xb4\xee\xf0\x6b\x90\xc7\x0f\xcd\xe8\xed\xb4\x94\x35\xe5\x62\xbb\x4d\x26\x66\x6d\x55\x2d\xc9\xaf\x2d\xad\x50\x7b\x3d\x93\xe5\xfa\x49\xb3\xf7\x47\xff\xd1\x9f\x26\x7f\x0c\x84\xff\x69\xf2\x47\x2b\x7d\xc2\xce\xf8\xd3\x44\x5f\x15\x93\x3f\x16\x55\xab\x0d\x53\xc4\xdd\x74\x67\xe8\xd3\x8f\x74\xa6\x08\x72\x8e\xba\x11\x80\x52\x0a\x76\xee\x83\x68\x74\xe8\x54\x80\xfc\xce\xbf\x28\x5a\xb0\x33\xa6\x38\x98\x06\x52\x94\x0f\xda\xa1\xc2\x73\x30\x29\x5d\xa3\x33\xe8\xae\x8d\x74\x84\x39\x13\x8c\x95\x68\xa9\x39\xb2\x19\x99\x5b\xaa\x61\xdd\x27\x60\x54\x4d\xad\x36\x50\x28\x46\x11\xf5\x8d\x94\xac\x62\xd0\xc8\x2e\xa9\xf3\x28\x86\x48\x7c\xca\xae\x90\x62\x2c\xd8\x1c\x53\x68\x5d\x2a\x09\xe2\x29\xe2\x31\xfb\x4f\xa6\x64\x94\xae\xa9\x8d\x6c\x08\xaf\x6b\x56\x72\x6a\x58\xb5\x24\x57\x9c\xde\x71\x7c\x50\x2b\xa0\x0f\x06\x0a\xc7\x7d\x21\x89\x84\x18\x70\x2b\xb8\x0b\xd7\x2c\x5a\x43\x4a\x79\x2d\xee\xae\x52\xb8\xae\xac\xa1\x10\x57\xf0\x6a\xd4\x6b\x96\x03\x93\x4b\x1a\xe0\x89\x5e\x94\x20\xcd\xea\x40\x5b\xbf\xf7\x50\xa7\xc0\x6f\x5a\x74\xe8\x7c\xe1\xc1\x8d\xdd\x91\xa0\x5a\x01\xb0\x9c\x5d\x6f\x2f\xc8\xf8\xd0\x4c\xdc\xd5\xcf\x4e\x63\xd6\xf7\xd3\xeb\x0f\x07\xac\xc1\xc3\x43\x8c\xad\x24\xab\xcc\xa4\x2a\xf8\xb4\x5a\x92\x05\xad\x0c\x73\x88\x99\x34\x5e\xa5\xbb\x4e\xca\x39\x33\xf1\x42\x54\x52\xcc\x63\x5d\x97\x7d\x68\x58\x61\xa0\x77\x13\xa3\xa2\x6d\x90\x3a\xab\xc6\x2d\x65\x9b\xec\xff\x88\xfd\x1e\x5f\xbf\xf0\x93\x9e\x22\x73\x52\x72\xaa\x52\xb3\xa9\x8c\xac\x18\x72\xca\x10\xe1\xb4\xb1\x3b\xd1\x33\x1d\x3f\xfd\xb1\x34\x5b\x49\xf0\xba\x5d\xb8\x8d\x03\x2c\x77\x11\x5e\x19\xfc\x18\xc6\x50\xe8\x91\x64\x45\x2c\x7e\x03\xcd\x19\x96\xc4\x6a\x45\x06\x23\x68\xae\xa9\xd8\xdd\x83\x62\x76\x63\x29\xde\x54\x8c\xfc\xf1\x92\x2d\x47\xc0\xed\x23\x54\xe7\xff\x44\xda\x90\x41\x05\xcf\x87\x1c\xc9\xc6\x12\x20\x15\xf9\xa3\xff\xd7\x9f\x1e\xb0\x37\xcc\x90\x30\x1c\xbe\xd4\xb6\xda\xb5\x9c\x20\x32\x0d\x8f\xc0\xe4\x98\x5b\x40\x07\x5a\x63\x24\xce\xf2\x84\x9c\x40\xd7\x34\x34\x20\x11\x60\xde\x5a\x02\xf1\xcd\x89\x9e\xd5\x9f\x7c\x38\xd5\xed\x32\xef\xb8\x8f\xf2\xf4\xde\x4a\xd7\x27\x88\x8d\xc8\x19\x74\xd5\xeb\x3e\x01\x51\xfc\x56\x9e\x7c\x60\x45\x9b\x56\xfd\x3e\x28\x04\x74\xc9\x12\xb2\x29\xf3\xac\xde\x77\x6c\xe9\x4f\x45\x5c\x06\x6b\x9f\x07\x38\xc0\x4e\x44\x45\xf5\x83\xb7\x2f\xe3\x25\xbb\x7b\xbf\x48\xbc\x4e\xbd\x5f\x03\x28\x72\xed\xb9\xc2\xae\xf4\x5a\xd1\xc9\x07\xae\x8d\xfe\xdf\x28\x4f\x0a\x59\x4f\xfd\xa1\x8a\xe4\x78\x5e\x43\x24\x26\xb7\xfa\x0e\x4f\x25\x95\xb4\x41\x6b\xeb\x5f\x60\x5b\x0b\xfc\xce\x4f\xa0\x62\x8d\x62\x1a\x62\xce\xd4\x4e\xc5\x33\xed\x0a\xb4\xa4\x00\x5c\x64\x17\x91\xc0\x2e\xc4\x49\x43\xf9\x5a\x1e\x1c\x10\x77\x1d\x2e\x17\x2c\xc1\x89\xb5\x94\x26\x3d\x55\x00\x3f\x4a\x13\x3b\xf8\x60\xcb\x29\xbf\xb6\xfc\x8a\x56\x0c\xdd\xaf\xd7\xbc\x2a\x0b\xaa\x30\xad\x11\x85\x3e\xd1\xd2\xd5\xc0\x62\x1b\xb4\xa4\x00\x56\xd0\x06\x58\xc7\xec\xda\xa5\x33\x51\x65\x78\xd1\x56\x54\x11\x2b\x01\xe7\x52\x25\xe1\xd5\x0c\x62\xb3\x6e\xa7\x26\x59\x53\x78\xe5\xe0\xb7\x8b\x55\x42\x62\xc6\x33\x8b\xa0\x8a\xcb\x19\x6a\x96\x2b\x62\x66\x1f\xab\xce\xdc\x6e\x4f\xa2\x40\xce\xfc\xc1\x13\x24\x7a\x8c\x86\x12\xa5\xe4\x70\x4d\xf8\x5c\x48\xc5\xca\x83\x48\x01\x09\xb2\x70\x42\xbe\x0d\xcd\x1b\x53\xfa\x7e\x5b\x8d\xcb\x47\x92\x01\x56\xc6\xbd\x9b\x13\x54\x8e\x9b\x3a\xd1\x3b\x93\x8a\x5d\x31\x45\xf6\x1d\xae\x1b\xbb\xe2\x85\x39\x98\x90\xff\xbf\x35\xf4\x52\x83\x6f\xc1\x82\x74\xc2\x30\xb4\x17\x70\xe0\xff\x54\x93\x17\x64\x1f\x86\x8a\xad\xc7\x03\x9f\x40\xa2\x97\xda\xb0\x3a\x9d\x9f\xb7\x55\x03\x91\x9c\xb8\x98\x63\x13\xfc\xe8\x6d\xdc\x6e\x71\xd1\xda\x5a\xe1\xf6\xd0\x31\x57\x0e\x3a\x32\xc3\x21\xc9\xb5\x93\x8b\xbd\xf0\x6a\xc8\xd8\xf0\x67\x6a\xd8\x0b\xff\x0d\x39\x02\x44\xb1\x39\x48\x2f\x94\x3d\x5b\x6e\x7e\x97\x98\x87\x69\x64\x23\x2b\x39\x5f\x9e\x37\x8a\xd1\xf2\x48\x0a\x6d\x14\xc8\xe8\x87\x74\x2b\x5d\xdc\x44\x84\x7b\xee\xd4\xd5\xae\x50\x57\x11\x26\x67\x88\xcb\x24\xdb\xf9\x02\x5b\x81\xc2\x0f\x09\x2d\x94\xd4\x3a\xbc\xd3\x5d\x4d\x36\xf0\xed\xe9\x89\xef\x0b\xea\xfd\xcb\xa1\xcf\x28\x8c\x09\xde\xf6\x6b\xba\x74\x52\x89\x4e\x79\xd9\x43\x50\xf4\xa4\xdf\x95\x1d\x0e\xed\xe9\x78\xe3\x3c\x58\x9d\xe0\xf0\xed\xf1\x5d\x53\x19\xb6\x67\xf2\xde\xb4\xa4\xc1\xda\x70\x20\xa1\x61\xed\x82\x41\x09\xb3\x8c\x10\x83\x76\x4a\xe7\xfc\x8a\x89\x30\x33\x8f\xa4\xed\x68\x4d\x3f\x9c\x5f\xb2\xeb\x84\x5f\xfa\x17\xfd\x8e\xdd\xbd\x48\x62\x0c\xde\xb0\x1f\x84\xa6\x86\xeb\x19\xa7\xd3\xea\x21\x7b\x9f\x02\x68\xca\x39\xab\x58\xb1\x45\xb5\xfd\xfb\x98\x88\x00\xbd\x67\x24\x99\x71\xb1\xc2\x63\x69\x47\x47\x87\x32\xe7\x3b\xbd\x71\x1d\x20\xf0\xdc\xb0\x50\x2d\x27\x5b\xe1\xfa\xe8\x86\xa4\x40\xcc\x82\x68\xeb\x29\x53\x5e\x84\xa5\xa9\x47\x0e\x54\x92\x14\x52\x29\xa6\x1b\x89\xd5\xaa\x9e\x75\x9c\x20\x4b\x3f\x8f\x92\x4b\x58\x86\xd6\x83\xc0\x94\x9e\x7c\xb0\x7a\xaf\x4e\x2b\x09\xc0\xab\xc7\x49\xab\x0f\xc5\x54\x20\x5f\xdd\xb5\xb2\x74\x6e\xd3\x43\x6f\x78\x0c\x1a\xc4\x9f\xa4\x8a\xe1\xee\x1a\x52\x03\x85\x57\x72\x25\x14\x5e\x79\xb2\x01\x09\x22\x04\xdc\x38\x77\x38\xc7\xe1\x9b\x18\xbe\xcd\x39\xd0\xf5\x08\xcd\x69\x07\xdb\x2a\x3a\x65\xcc\xde\x3c\x80\x2c\x30\xce\x9d\x39\x72\xc9\x96\xf0\x78\x1c\x31\xbd\x7b\xdd\xc0\x6d\xe1\x09\x1b\x52\xdf\x85\xd7\xd8\xbe\xd2\xa0\xdf\xfb\x69\x4e\x7e\xc8\xd0\x3d\x8e\x57\xa2\xeb\xae\xbb\x7a\x7c\x7c\xd9\x79\xe3\x90\x27\x7b\xde\xb8\x4e\x2e\x77\xbe\xb8\x41\x63\x0f\xae\x0e\xc3\x6b\x88\x8b\xab\xbb\xf2\x6d\xe8\x98\xa6\x4f\x71\x7b\x51\x48\x1a\x91\xb3\xc1\xdb\x0b\xaf\x4d\x6e\xb0\x53\x31\x22\x6f\xa5\xb1\xff\x89\x3c\x62\xc7\x92\xe9\xb7\xd2\xc0\x27\x3b\xb1\x92\x38\x01\xbb\xb4\x8e\xce\x6b\x61\xc5\xb0\xc0\xe3\xc6\x65\xb7\x59\x45\xc1\xad\xd7\x26\x33\xf8\x54\x10\xa9\xdc\x94\x0f\x24\x21\x58\xd2\xda\x11\x10\x07\xe8\x5d\x9f\xef\x1b\x0d\x71\x4b\x45\xbc\xcc\xf7\x46\x8c\x23\x04\x30\x8f\xf1\x1b\x80\x62\x6f\x2a\x28\xf8\x2e\x5b\x98\x30\x6a\x67\x8e\x1a\x36\xbf\x73\x89\xe3\xea\x55\x33\x35\x67\xa4\x81\xb0\x4e\x06\xce\x1d\xa2\x48\xe0\x35\x50\x9d\x88\x89\x19\xbc\x8d\x32\x97\x97\xde\xe3\x43\x41\xa7\x04\x5b\x23\x8f\x8e\x3a\x60\xbf\x47\xa4\xa0\xd6\x55\x53\x70\x90\xfc\xbf\x10\xbd\xfd\x1f\xd2\x50\xae\xf4\x84\x1c\xfa\x0c\xc3\xf8\x3b\x97\xa4\x11\x3d\x66\x00\x29\xcd\x7a\x60\x81\x0a\xc2\x1c\xa6\x85\x9c\xad\x29\xe3\x23\x87\xb7\x6f\x0f\xec\xe0\x5c\xde\xbb\x64\xcb\xbd\x54\x74\x25\xbc\x62\x89\xb2\x77\x2a\xf6\xba\x94\xc2\x9e\x14\x08\x3a\x29\x00\x9c\xef\xc1\x77\x7b\xf7\xa7\xf7\x0f\xd2\x20\x3b\xc0\xa4\xb3\x0c\x2a\xd8\xc0\x2d\xdb\xdb\x53\x35\x6d\x86\x6d\xa9\x8e\xf9\xbe\x63\xcb\xad\x85\x60\xde\xf4\xa8\xf0\x26\x8c\x71\xa6\x7a\xa7\x59\x6a\xac\xbf\xaf\x20\x46\xbf\x70\x6e\x41\x79\xc5\x14\xba\x04\x93\xc6\x46\x27\x98\x3d\x6b\x42\xaa\x7d\x07\xb7\x03\xfc\x08\x03\x5b\x3e\xf4\x1e\x8d\x4a\xca\xcb\xb6\xf1\xfc\x0c\x69\xb8\xa9\x3b\x86\x8b\x42\xd6\xce\x2f\x82\xef\x09\x9e\x70\xb7\x31\xc7\x2e\xe3\x09\x65\x4c\xd8\x0a\x98\x53\xd5\xf3\xfa\x24\xc6\x07\xe3\xc9\x0c\x0e\x5e\x66\x8f\xfd\xe0\x0f\xec\xa6\xf7\xd6\xa9\x4a\x22\xc0\xe7\xda\xc7\xb3\xe0\xda\x40\xd3\x3a\x04\xd6\x67\x52\x4d\x79\x59\x82\x2f\x12\x89\x0b\x05\x5f\x2b\x8c\x63\x25\x4d\xcf\x0f\x95\x26\x34\x56\x9e\xba\xa1\x0e\x7e\xd5\xd9\x25\x9e\x99\x94\xb4\x64\xbc\x60\x10\xd7\x1e\xc9\x3e\x28\xbc\xe2\xea\xd4\x78\x46\xb0\xb3\x9f\x34\xd2\x94\xf9\xf0\xa1\x3d\x92\x44\x5b\x55\x56\xdb\x03\x45\x0c\xdd\x32\x18\xe9\x03\x91\xec\x92\x12\xe6\x56\x48\x9b\x3e\xb3\x25\x35\x8a\x70\xdd\x2d\x60\x6f\x4f\x99\xa1\xbe\xcf\x85\x58\x41\x83\xea\x4f\xfe\xa9\x38\x93\x65\xdf\xa3\x7d\x0b\x2c\x14\xd9\xf7\xff\x98\x2e\x93\x8b\x5e\xc8\x60\x1d\x6f\x80\x66\x97\xf3\x70\x18\xae\x70\x39\x67\xfa\xf6\x8e\x05\x18\x3e\x0a\x45\x61\xf2\xed\x5c\x31\x44\x01\x06\xa9\x04\x52\xca\xb5\xbd\x6a\x05\xbb\x62\x96\x7b\x4b\x6e\xe7\x70\xda\x26\x62\xa6\xb9\xfc\xac\x5f\xd6\xbc\xfa\xff\xbf\x63\xf9\x56\x1a\x1f\xa6\xfa\x65\xe4\x02\xe6\xa8\xc7\x7d\xe0\x75\x5b\x63\xdf\x6a\x63\xac\x0d\xc3\x67\x33\xa6\x12\x9b\xf3\x91\x50\x7b\xd2\xf7\x5d\xf7\xa3\x35\x4e\x4a\x18\xaa\xe6\x50\x30\xed\xfc\xd0\x5e\xe5\x9a\x57\x72\x4a\x2b\x52\x73\x61\x49\x4b\x9b\x89\x8b\xb5\xe7\x84\x37\x76\x7f\xde\x42\x1c\xe8\xa0\xae\xb3\x14\x3a\xc7\xd3\x32\x24\x94\x4b\x1e\x9f\xad\xcc\xc6\xca\xc3\x41\xbe\x54\x4c\x6b\x4c\x0f\x7e\xc3\xc5\xb1\x0b\x2d\x26\x0d\xfb\xda\x4a\xc7\x0f\xb4\x6e\x2a\x36\xc2\xf0\xe3\xd7\xe3\x7f\x4a\xc1\x88\x2b\x7b\x18\x05\x16\x75\x75\x3c\x46\x92\x97\xa8\xf0\x36\x01\x96\xcc\xd7\xd7\x24\x51\xd0\x93\xbb\x21\xd8\xaa\xc9\x57\xcf\xbf\x7a\xfe\x32\x4d\xc4\x9c\xba\xd2\xa3\x82\x6a\xd7\xdd\x76\x7d\x75\xef\x5c\xc4\x83\xd7\xbf\x88\x9d\x9d\x97\xee\xbf\x5f\xb9\xff\x7e\x4d\xfe\x95\xf8\x34\x72\x46\xce\x7a\xff\xb5\xff\x49\x7c\xda\xd8\x32\x4f\xb4\x5c\x2f\x47\xfd\xb3\xb5\xa0\x02\x0f\x3e\x7b\xce\xbb\xfd\x0d\xda\x1e\xbe\x02\x9c\x33\x85\xac\x19\x4c\xfd\x57\xff\x3b\x4d\xd7\xc4\xe7\x42\x86\xbe\x21\x52\xb8\xa7\xbf\xdc\x87\xe9\x3a\x20\xd7\x90\xf7\x50\xd3\x4b\x0c\x58\x1d\x16\xa6\xa5\x95\x25\x78\xff\xeb\xf1\xcb\x03\x22\x45\xef\xf6\x24\x12\xae\xb8\xb4\xfa\x9a\x9f\x89\xfd\x97\x89\x18\x0f\xab\xd3\xf9\xd5\x86\xe9\xec\xcd\x24\xbc\x2d\x15\x4b\x78\x85\xbc\x32\xd9\x8b\xe3\x43\xb1\xbc\xa6\xcb\x20\x94\xbd\xba\x3e\xe7\x57\x8c\x2c\xf8\x7c\x01\x68\x08\x03\xfa\xa5\x12\xcc\xfb\x06\x19\xcb\x7d\x4b\x4b\x24\x64\x49\x78\xa2\xf6\x77\x6a\x9e\x69\xc8\x68\xc1\x18\x85\x03\xba\x09\x75\x6a\xa1\xf8\xe4\x25\x88\x95\x17\x2b\x40\x1f\x5b\x4e\x73\xfa\xfa\xab\xbb\xeb\x14\x41\x26\x6f\x4d\xad\x08\x14\xf4\x1a\x1e\xac\x9f\x66\xab\x87\xcb\x00\xae\xfd\xc8\xa9\x05\x07\x45\x38\x3c\xc3\x31\x7e\xe9\xac\xe1\xee\x44\xeb\x66\x2f\xcd\x2f\x7b\x26\xcb\x90\x20\x42\x9c\x3e\x0d\x89\x75\x9a\xec\xf5\x8f\x81\x3d\x48\xb4\x0b\xde\x1b\x87\xe1\xec\xec\x3d\x2e\x85\x7d\x0f\xbf\xf9\x07\xb5\x01\x27\xe4\x50\x94\x5d\x35\x51\xe2\x2c\xb1\x5f\x5b\x5a\x81\xf3\x7a\x0e\x79\x82\x2a\xcf\x7c\x45\x75\x47\x6b\x7d\x6d\x3b\x69\x9e\xf8\xda\xb8\xef\x75\x5b\x41\xa6\xe5\xc7\xdf\x3f\x2b\x27\xe8\x2e\xd5\x0a\xac\xce\x90\x6b\x55\x4b\xec\x5d\x2f\xbc\xfa\xef\x32\x2f\xa4\xf3\x4b\x0c\xda\x0c\xa7\xb3\x0d\xe5\x74\x5d\xee\x16\x99\xb2\x05\xbd\xb2\xdb\x11\x60\x9c\xe2\x9d\xea\x96\x18\x54\xac\x21\xd9\xde\x51\x81\x85\x13\x81\xba\xcf\x32\x2f\x06\x6c\xf3\xee\xdd\xa4\xc1\xf7\xfb\x69\xf5\xb4\x0a\xf1\x8f\x9e\x25\x91\x68\x52\xa7\x28\xa8\x5f\x8d\x56\xe6\xd5\x7d\xfe\xdb\x87\xd2\x5b\xbf\x4a\xd3\x5b\xef\x5d\xb9\xc4\xff\x26\xdb\x48\xdd\xc6\xdd\xb8\x5f\x7f\xbb\xdf\xcd\xfa\x01\x64\xf8\xaf\x09\x5c\x40\xc6\xea\x92\x9c\x13\x77\x98\x53\xef\x35\x37\x2d\x45\x00\x2e\xc1\xae\x5d\x49\x75\xb4\xac\x2b\x4b\x14\x39\xb9\xbc\xca\x96\x26\x57\xa6\xac\xa0\xad\xb6\x9b\xba\x6e\xac\xf9\x4d\xb4\x65\x3f\xef\x30\xfc\x7a\xff\x6b\x32\x26\x2f\x0e\xec\xee\x16\x28\x5a\x80\x05\x63\x85\x1b\x1a\xdb\xa0\xa1\x67\x16\xd6\xd4\xb7\xeb\x9c\x28\xe5\xb8\x43\xef\x5c\x51\x7b\x1f\x9f\xda\x24\x64\xc9\x0e\x67\x33\x2e\xb8\x59\xa6\xc2\xd9\xe7\x51\x9f\xde\xae\x51\x12\xa9\x51\x0b\x79\x4d\xae\x1d\x96\x00\xf0\xb2\x83\xc4\x8b\xc9\x7f\x6e\xff\x18\xe4\xb8\x86\xc3\x32\xe8\x22\xce\xe2\x08\xfa\x80\x93\x36\x96\xef\x26\xae\x6e\xde\x35\xea\x49\x19\x6b\x4c\xfe\x2a\x85\x54\xaf\xd0\x38\xc4\x5e\xf6\x41\x07\xb9\xf1\xb5\xdc\xf9\x52\x54\x6d\x19\x75\xc0\xe8\xb4\xa7\xc4\xe3\x73\x4c\x4e\xc1\x7f\xfb\xea\x63\x23\x07\x2f\x2f\x80\x28\x94\xe1\xc0\xbb\x8d\xa0\xf4\x84\xfe\x8d\x45\xf2\x70\x94\x73\x0c\x04\xf6\x03\x93\xf6\x5b\x98\x54\xd2\x00\xff\x3c\x78\xed\x91\x9d\x91\x0b\x48\xef\xde\xfe\x56\x8a\xe9\xb8\x75\x23\x61\xef\x33\x4c\x4a\x5f\xdd\x00\x49\xa3\x3f\xc4\xa6\x41\xde\xb3\x07\x8f\x6c\x8d\xa3\x7e\x44\x68\x25\x21\x88\x64\x8f\x23\xfb\x11\x2b\xdd\x8d\x33\xe9\x63\x4d\xab\xb1\x8f\x24\x32\x16\x80\xf6\xd9\x95\xaf\x8c\x7a\xbb\x20\xc7\x16\xf4\x0b\xf2\x09\x9b\xee\x81\x37\x18\x52\xb9\xad\x1d\x16\x25\xd3\x6f\xaf\xae\x2f\x90\xe0\x1d\xd6\x97\x0c\x34\x0b\x58\x38\x8c\xa5\x4d\x60\x0f\xc6\xcd\xd5\xa9\x0b\x37\x3b\x65\x89\xeb\xe4\xc4\x4f\xab\x4e\x73\x80\xec\x2d\x68\x15\xdb\x1d\xd6\xde\xe1\x25\x53\xa8\xee\x4c\x59\x0f\x85\x29\xb5\xde\x02\xaf\x9f\xba\xa7\x23\x62\x13\x40\x09\xe0\xe0\x7f\x42\xf0\xdb\xbd\x69\x5b\x5c\x32\xe3\x13\x33\x14\xa0\xa4\x34\xad\x21\x53\x5a\x51\x51\xd8\xbd\x08\x9a\x6c\x9a\xa3\x7e\xe6\x5d\xff\x46\x22\x01\x38\x5a\xf2\xdb\x60\xc7\x88\x80\xff\x83\xaf\x10\xd5\xaf\x72\xa1\x8d\xa5\x1a\x0b\x5b\x87\x4d\xde\x61\xa5\xe5\xc8\x4a\x5d\x3f\xe8\x5a\xf0\x02\x87\x77\xff\xc6\xfc\x19\xa7\x11\x30\x66\x1c\x6c\x5c\x94\xbc\x22\x53\x7a\xa1\x6d\xd2\xf5\x1c\x4e\x6f\xff\xb4\x48\x7b\x49\x36\x99\x43\xf6\xdf\xca\xf6\xd8\xeb\xe3\x35\x7a\x08\xa8\xbd\x11\xae\xa2\xdd\x25\x0e\xc9\x13\x5f\x1e\x14\x74\x6a\x86\xce\xb8\x28\x01\x1f\x78\x95\x98\xf0\xd4\x3e\x55\xd6\x10\xf0\x14\x81\x99\x9b\x9f\xa2\xcd\xee\xd8\x87\x16\x9f\x6b\x3e\xee\x6d\x09\xd1\x75\xf7\x45\x5f\x45\x81\x22\x1b\x5a\x79\x94\x1f\xab\x52\xf0\x99\xb5\xba\x4a\xc9\x30\x2b\x02\xdd\xe3\x89\xce\x37\xe6\xf5\x92\xce\x45\x94\x7a\x6a\xf7\xdc\x2d\x64\xdf\x67\x07\x10\xc3\xaa\x0a\x4f\x87\xce\x23\x66\x2d\x61\x23\x3b\x97\x58\xaa\x6f\x7f\x4c\xfa\xa1\x89\x8d\x83\xc5\x03\x79\xd0\x26\x88\x9c\x2e\x43\x6b\xd9\xd4\x1c\xdc\x69\x6b\xc8\x9c\x5f\x59\x15\x6a\x2d\xfe\xb1\x29\x96\x81\xf1\xa7\x05\xab\x1a\xa2\x58\xd9\x16\x6c\x40\x26\xa0\x4e\x34\xb3\x09\x39\x8c\x1d\x82\x80\x99\x11\x8e\xcb\xbd\x1e\x2f\xee\xb9\x3e\xb8\xc3\x15\x45\x3e\x03\x09\x0b\x26\x1e\x9f\x11\x76\xc5\xd4\x92\x34\x52\x6b\x90\xfd\xa0\x2f\x20\xc8\x21\x64\x53\xce\x7c\x61\x0d\x38\x55\x60\xce\x9c\x7f\x21\x69\xf0\x3d\xe7\x94\xd8\x03\xa7\xb2\x1c\xac\x03\xec\x6e\xd4\xfa\xeb\xe7\x2f\x53\xa3\xd6\xb9\xbd\x7f\x67\xf0\xbf\x10\x52\x1e\x14\x5a\x3e\x9d\x6d\x92\x93\x61\x6e\x7b\x92\xe7\x53\xa2\xce\xa9\xa1\x49\x98\x19\x08\x0e\x7f\x7d\x10\x05\xac\xbf\x7e\xfe\xd5\xf3\x97\xfb\x76\xee\xbf\x3a\xb0\xab\x10\x85\x95\xbf\x8a\xc2\xca\xe1\x97\xee\x2d\x12\x20\xac\x48\x97\xb4\xb3\xff\xf2\x60\x02\x35\x0d\x80\x4f\x7a\x2d\x55\xe9\x4a\xfc\x3d\x62\xa4\x7d\xf3\xd0\xfe\x93\xd7\x5e\xf9\x1c\x81\xd0\x0a\xd2\x31\xcd\x3d\x04\x01\x0d\x08\xa3\x73\x43\xbe\xac\xa5\x62\x5f\x46\x43\x3c\x56\xc5\x60\x3d\xb9\xab\xa6\xcd\xf8\x32\x21\x6f\x77\x48\xb1\xf3\xd0\x52\xe7\x9b\x52\xd4\x6a\xda\xdc\xe1\x39\x57\xb2\x6a\xeb\xbb\x66\x61\x0f\x53\x88\xbe\x77\x75\xab\x6e\x68\x57\x5a\x89\x69\x0e\xb5\xab\x39\x9e\x2e\x63\x28\xdf\x29\xab\xa4\x98\x63\xac\x32\x34\x2c\xbc\xe3\xa8\x9f\x86\xac\x5e\x48\x51\xb0\xc6\xe8\xe7\xda\x48\x45\xe7\xec\xb9\x23\xf2\x4e\x83\x6d\x0f\xb2\xe0\x47\xa0\xb6\x5f\xf9\x86\x4d\x81\xf0\x3d\x02\xd0\xb2\xaf\xff\x06\x79\x49\x0b\x80\x9d\x84\x59\xb7\xda\x52\xd4\x60\x58\xa4\x4e\xf7\x96\x50\x0b\x12\x3a\x08\x0e\xa9\x06\xa5\xd7\xfa\xa4\xa2\xda\xf0\xe2\xdb\x4a\x16\x97\xe7\x46\xa6\x39\xfa\x72\x58\x18\x9b\x68\xe9\x71\x82\x20\x87\x3f\x9d\x93\x63\xae\x2f\x89\x62\x5a\xb6\xaa\x70\xad\xca\x56\x00\x19\xef\x8a\x1d\x8b\x97\xdd\x4c\x15\x33\x0e\x72\x9f\xd4\xb4\x58\xa0\xe9\xef\xb2\x1e\xd8\x87\x46\xea\xae\xf9\x7a\x02\x4b\xe1\x15\x77\xaa\x38\xfc\xe9\x7c\xfd\x95\xb9\x8e\x9a\x64\xa0\x0f\x11\x4b\x69\xc0\x13\xdb\x65\xca\x8f\x8d\x62\x69\x5a\xd9\xc6\x99\xb6\x0c\x0f\x4e\x29\xc5\x4a\xae\x10\x48\xd5\xbd\x2b\x9b\xea\x49\xa1\xf9\x84\x5e\xeb\x49\x21\x6b\x72\x74\x7e\x4a\x4a\xc5\xaf\x52\xfb\x24\x0d\x13\x65\x5f\xd0\x6b\xcd\x90\xfc\xa9\x25\xdf\x7e\x9d\x32\x0f\x5b\xee\x15\x8a\x6f\x73\x7a\x9c\xf0\xf3\xa1\xf5\xdf\x33\x7d\x61\xdf\x3d\xd1\x9e\xcb\x55\x35\x87\x54\x78\x8f\xec\x8c\x57\x0c\x01\xbb\x90\x13\x5d\xdc\xd7\x89\x7d\xd8\xe6\x4b\xd9\x92\x6b\x8a\x8e\x6d\x38\x67\xd3\xcb\x37\x2f\x78\xf3\x8a\x9c\x08\xdd\x2a\xd6\x15\xa9\xaf\x92\x60\x15\x77\xdf\x47\xd8\xa3\x0b\x81\x6c\x70\xdb\x51\xcc\x07\x40\x8c\xe1\x75\x82\xd6\x99\x7e\x45\xf6\xd8\x07\xf3\xcd\xde\x88\xec\x7d\x98\x69\xfb\x1f\x61\x66\x7a\x6f\x42\x4e\xeb\xa6\xe2\x05\x37\xd6\x1c\x15\x33\xa6\x3a\x57\x31\xfe\x20\x53\x97\xa5\x5d\xd9\x93\x24\x47\x25\x2b\x38\x85\x81\x3d\xb7\xcc\xe1\x81\x10\xcf\xe4\xd1\x07\xe2\x3e\xd9\xfb\x74\x46\x24\x96\x1e\xf4\x61\xca\xb9\x0e\x0f\xb7\x0c\xed\x46\x17\x09\xfd\x96\xba\xab\x63\xe1\xd7\x52\xf9\x47\x3e\x2f\xd9\xd5\x73\x5d\xd2\x97\x23\x78\x2d\xe4\xcf\xe5\xca\x1c\x50\x4d\xf6\x5e\xde\xb9\x51\x40\x77\x9d\xf3\x9a\x57\x54\x55\xcb\x51\x3c\x97\xdd\xf3\xed\x51\xe9\x09\x01\x67\xf2\x8b\x3d\xb2\x8f\x68\xe0\xa0\xae\x57\xcc\xb7\xe3\x0b\x5d\x7d\xa1\x02\x2a\xb9\xd9\xdd\xd0\xc4\x10\x32\x38\x39\x84\xc0\xc1\x44\xcb\x77\xa2\x4a\x06\xf7\xc8\xc5\xfd\x9e\x0e\x8f\x1f\xa8\x5a\x17\xc5\x9e\x49\xd4\xdc\x58\x77\x8b\x6f\xc9\xc3\x85\x33\x01\xde\x58\x1e\x1d\x80\x67\xb1\x6b\xe2\x2c\xbd\xfd\x20\x09\x9a\xc2\xb6\x17\xd4\xd3\x01\x29\xf5\x82\xff\xda\x32\x72\x7a\xec\x0f\xea\x86\x29\xcd\xb5\x61\xc2\x90\xb2\xa7\xa1\x73\x54\xdb\xf7\x0f\x6b\xfa\x4f\x29\xc8\xc9\xb7\xe7\xee\x41\xc9\xdb\x6c\xf7\x56\x37\xf1\xb0\xa2\xff\x6c\x15\xb3\xf6\xcc\xd6\x4c\x2e\x4f\xc0\xaa\x9d\x65\x3f\x27\xc7\xd4\x50\x34\xb7\xf0\xc4\x90\x5d\x4f\x2f\x30\x8b\xa6\x80\xe7\xe6\x9b\xc7\xe5\x33\x8a\x02\x51\x77\xb2\x84\xa2\x97\xb1\x8b\x92\x36\x1f\x1b\xcd\x1f\xcb\xcf\x68\xff\xd8\x11\x32\x58\x40\x5b\xb6\x3c\xec\xfb\xbc\x4d\xf5\xe8\xe3\xcf\x7f\x78\x7f\xba\x05\xbb\xa5\x00\x9b\x7c\xfe\x46\x96\x79\x8c\x97\x67\xd1\x03\xbd\x8a\x06\x0d\x81\x8f\xf0\x73\x52\xdb\x91\xc8\x5b\x29\xd8\x88\xbc\x67\xb4\x24\xf6\xb0\x72\xff\xfc\x49\x71\xc3\x26\xcf\xb6\xa5\xe4\xfa\x45\xcc\x32\x11\xfe\x61\x7e\x12\xde\x46\x6d\x22\xa1\x97\x2b\x88\x74\xa7\xb3\x4e\x2b\x39\x25\x4e\xa4\x6e\xf3\xed\x7f\x78\x7f\x9a\xed\xe5\x7f\x78\x7f\xea\xdf\xdd\xfe\x53\xce\x76\xf3\xb5\x77\xcd\x70\x7f\xbd\x62\x31\x0f\xb7\x5c\xde\xb8\x9a\x08\xba\x66\x8d\xdf\xbf\x29\x3e\xd9\xb2\x11\x9e\x01\xc2\xc9\x19\x7a\xaf\x88\xa5\x2b\xcd\x0d\xca\x45\x32\x3c\x62\x5f\xb8\xda\x27\x75\x3d\x99\xa2\xac\x37\xe8\xed\x57\xbe\x22\x75\x5b\x19\xe8\x72\x03\x5b\xcb\xee\x35\x28\x20\xf3\x9b\x8c\xb8\xae\xaf\x56\x3b\xc0\x4c\x93\xf2\x95\x47\x4f\x0a\xbf\xd8\xfc\x83\x37\x54\xd0\xb9\xbd\x1d\x4e\x6c\x52\xe3\x9f\xd1\x9e\xde\xc7\x00\xbf\x08\x5f\xd1\x2b\xca\x2b\x3a\xe5\x15\x37\x60\x8d\x1c\x4c\xfc\x5c\x22\xd4\x0c\x90\xbc\x35\x61\xbf\x73\x26\x5d\xdc\x09\x03\xba\x27\x92\x7d\xfb\xdd\xf3\x6b\x7b\x28\x1e\x4c\xe0\x84\x84\x1b\x17\x4c\xc5\x56\x5f\xf2\xc8\x76\xc3\xbf\xbf\x27\x6b\x71\xb8\x85\x16\x6d\x3c\x98\x8d\x34\x4b\xc0\x4a\xd3\xad\x5a\x02\x96\x80\x8d\x96\x00\x7c\xe1\x7a\xd9\x6e\xc1\x18\x80\xe1\x13\x8c\x01\xf8\x5d\x66\x63\xc0\x1e\x4b\x9f\x93\x31\xa0\x59\xa1\x98\x19\x60\x0e\x80\x68\x4c\xfc\xfd\x50\x83\x60\xe7\xe4\x62\xf9\x24\x17\xe3\xab\x63\xae\x2c\x2b\xd4\x3d\xce\x2b\xeb\xa1\xa1\x3d\x7e\xb5\x82\x72\x8d\xc2\xeb\xdc\x69\x07\xbe\xd1\x3d\xfc\xde\x8a\xac\x14\x7c\x7f\xbc\x06\x1f\xe8\x61\xd3\xe4\x99\x17\xff\x34\x3f\x2d\xa8\xf6\xc0\xc7\x24\x79\x6b\x0f\x7c\xcd\x82\x35\x8b\xd9\xd6\xa0\x1d\xec\xe8\xaf\xcf\xfb\x89\x24\x47\xac\x59\x90\xd7\xe7\x1b\x0e\x30\xc4\xef\xb0\xd3\xa5\x31\xbd\xe4\x99\x26\x15\x9f\x31\xc3\x53\x23\x23\xf1\x19\x76\x84\xb4\xf4\x0e\xb0\x00\xcc\xe4\x0f\x2c\x9c\xae\x10\x78\x14\xd2\xb7\x37\x0d\x76\xcf\x23\x3c\x5c\x6a\x29\xb8\x91\x77\xee\x45\x4e\x72\xf4\x31\x70\x43\x6f\xfb\x68\xf0\x74\xd8\x45\x7d\xef\xa7\x93\xbc\x89\x3e\xa5\xa4\x90\x55\xc5\x0a\x8f\xa5\x01\x6c\x3a\x60\xe6\xf0\xda\xe0\x22\x77\xa9\xc0\x7a\x72\xf9\x07\x70\x92\x3b\x77\xf8\x73\x64\xbd\xe7\xef\x4f\x0e\x8f\xdf\x9c\x4c\xea\xf2\x8b\x85\xbc\x1e\x1b\x39\x6e\x35\x1b\xf3\x54\xa8\xd4\xad\x77\x59\xc8\x60\x4d\xdf\x03\x6a\x71\x43\xcd\x22\x8f\x79\x6d\x9f\x64\xd9\xa7\xeb\x68\xff\x83\x46\xbc\x00\x40\x64\x73\x79\x88\x4a\x4a\x33\x22\x8a\x42\xf2\x6d\xe8\x94\x3c\x6b\xab\x0a\xf9\xcc\xca\x9e\x51\x1c\x1f\x7e\xfe\x64\xe4\x7a\x75\xaa\x37\xb9\x9f\x95\xc5\xbb\x2b\xe2\x61\xb8\x6e\x99\x6a\x33\x93\x8c\x0c\xd3\x51\xd2\x67\x99\xf3\xde\xe7\x98\xfb\x60\x16\x96\x81\x2e\xd9\x92\x00\xaa\xbd\x35\x5b\x7f\xd0\x4c\xf5\xb7\x20\x33\x05\xcc\xfa\xf3\x56\x33\x35\xc1\xc7\x3f\xf2\x95\x1e\xa2\x2b\xc3\xfb\xbf\x67\xb3\xdd\x58\xe7\xf7\x6c\xb6\x69\x99\xdd\xc7\xd0\x9d\x39\x54\x55\x59\x55\xbc\x35\x0b\xac\xfc\xc5\xfe\xf9\x68\xa7\x6c\x5c\x77\xec\x83\xf0\xc8\x17\x7a\x10\xbe\x7a\x8e\xc6\x36\x62\x80\x55\x45\x32\x37\x01\x89\xe3\x68\x8e\x33\x06\x76\x4b\xb9\xe8\xb5\x80\x45\x08\x32\x7e\xc5\xaa\x65\xd0\xd5\xb1\x6e\xa6\x6c\x11\x11\x99\x16\x97\xd7\x54\x95\xd0\x6f\xba\xa1\x86\x3b\x0f\x37\x4f\x57\x2c\xed\xe5\x7b\x94\x3b\xcc\x65\xd7\x48\xc4\x15\x60\x6b\x7c\x63\xee\x8c\x19\x2c\x08\x15\x0e\x5c\xda\x21\xa8\xd9\x33\x92\x26\x27\x5d\x78\x22\x6a\x6b\xbb\x15\x4c\x59\x6b\xbf\x5a\x92\x6b\x25\x53\x11\xd8\xfc\x75\xc7\xc4\x12\x79\xc5\xd4\x15\x67\xd7\xcf\xaf\xa5\xba\xe4\x62\x3e\xb6\x2f\x3b\xc6\x2d\xa0\x9f\x5b\x4e\xd4\xcf\xbf\x80\xff\x0c\xa0\x2a\x53\x67\x8f\xe0\xa1\xde\xdb\xcb\xa1\x0e\x0f\x6e\x38\x60\x2f\x7b\xbe\x6d\x5b\xaa\x5b\x1a\xec\x5e\x92\xb1\x1e\xad\xfc\x89\xad\x68\x29\x35\xde\x63\xd7\xb1\x27\xaf\x69\x59\x27\xa2\x18\x93\x9d\x11\xd7\xa9\xce\x1d\x2e\xca\xb4\xa5\xcb\xe2\xdc\x81\xd1\xfb\xce\x1d\xf7\x99\x4b\x02\x0d\xe5\x20\xd4\x47\x25\x00\x78\xd6\x17\x79\xf4\x6b\x3c\x32\x78\x78\x70\xf0\xbb\x85\x28\x1c\xc5\x99\xe3\x13\xf8\x54\x88\x50\xc8\x86\x59\x91\x5c\x5c\x4e\xa4\x9a\xdf\x47\xd1\xc6\x2a\xbf\xd6\x4b\xfd\x6b\x35\x46\x0a\xc6\x4d\xd9\x31\xec\xe3\xf3\x5c\x3d\x55\x67\xdc\x5a\x9d\xf1\xb8\x13\x3d\x76\xb8\xe6\xe2\x3e\xb7\x14\xf9\x2c\xbd\x34\x9f\x55\xc8\x6d\x8b\x3c\x31\xdc\x17\xb3\x6b\x26\x7a\xa7\xd1\x35\x12\xb0\xd9\x5c\xc3\x4c\xb0\xc0\xf1\x64\xf1\xb1\x42\x40\x61\xa0\x8a\xd6\xcc\x30\xd5\x01\xc6\x17\x52\x88\x21\xfd\x66\x8d\x24\xef\x1a\x26\xce\xe1\x10\x7e\x32\xab\x9f\xcc\xea\xdb\xaf\x27\xb3\xfa\xc9\xac\xce\x61\x56\xef\x5c\xc1\x90\x97\xa7\x08\x82\xe8\x0a\x01\x3b\x44\x07\x67\xb3\x3c\xbe\x33\x33\xd5\x7a\x96\x62\xc6\xe7\x6f\x68\x33\xd8\x80\x0e\x4f\x5a\x31\x86\xc3\xc7\x2e\xb3\x01\xa0\xa9\x1a\xd9\x40\x8b\x3e\x07\x23\x0a\xd3\xff\xf0\x96\xd9\xd0\xc3\xc8\x6d\xb8\x6c\x45\x20\x03\xf8\x3b\x22\xa5\xaf\x6f\xd4\xf6\x93\x29\x37\x9d\x26\xa1\x99\xc1\x7e\x60\xd8\x73\x95\x48\x41\x0a\x87\xf0\x0e\xf6\x4f\xd4\xa7\x2e\x83\x4d\x25\x88\x2c\x8c\x87\x1a\x0d\xed\xc3\x5e\xbc\x78\xf1\x02\x7b\xc7\xfc\xfe\xf7\xbf\x27\x52\x11\x4a\x4a\x56\xf0\x7a\xfd\x46\xb8\xeb\xb7\x2f\x13\xdb\x2b\xd8\xeb\x6f\x87\x6f\xbe\x07\x5c\x96\xc6\x68\xec\xd0\x88\x14\xd9\x07\xf7\x06\xd5\x23\xf2\x7f\xce\xdf\xbd\xed\x5a\xff\xf5\xbf\x05\xaf\x49\x98\xce\x74\x7a\xe2\xf0\xed\x8b\xdf\x7d\xf3\xcd\x80\x27\x81\xc3\x45\x2a\xee\xe0\x8c\x3d\xc4\x0c\xb5\xe7\xb1\x62\xd8\x93\x07\x14\x08\x6f\xc1\x22\x00\x98\x49\x6e\x0f\x42\xbc\x82\x52\xf3\xf9\xc2\x38\x98\x58\xbb\xc5\x2b\x5e\x18\x54\x04\x10\x5c\x4b\x3a\xb4\x66\xd8\xf4\x48\x43\xb0\xde\x07\x24\xb0\x94\x6c\x44\x2a\x7e\xc9\xc8\x4c\xff\x45\xc9\xb6\xe9\x1a\xf9\x62\xcf\x12\x8f\x7d\x84\x44\x74\xbc\x9f\xdc\x07\x73\x57\x2a\xa9\x07\x65\xa0\xe4\x12\x32\x40\xc4\x8a\xcb\xc1\x21\x9f\x76\x8d\x61\x1b\xca\x03\xd8\x11\x94\x6d\xa2\x2e\xdb\xd7\x91\x8b\x44\x40\x39\x7b\x1d\x85\x13\xc5\x37\x70\x68\x94\xfc\x6f\x64\x72\x80\xf8\x8d\x4e\x74\x80\xc6\xb5\x3c\xe7\x81\x71\xbb\xcc\xc4\xe4\xf1\x2f\x19\x42\xdf\x5a\x7b\x8d\x89\xd0\x6a\x11\xde\x1e\x50\x6c\xa3\xb9\xb1\x5f\x54\x5c\x5b\xd2\xa0\x23\x90\xa3\x38\x79\xec\x0d\x6f\x1a\x46\x83\x7d\xaf\x71\x47\xb4\x62\x6d\x54\xec\xa4\x31\x60\x64\x38\xd2\xe1\x05\xa9\xef\x82\xdb\x8d\x8d\x00\xe9\xae\xc9\x8c\xbb\xd7\x73\x41\x58\xb0\xf4\xb6\xfd\xd1\x92\x6a\x66\x5a\xb7\xf4\x4c\x29\xa9\xec\xbb\x32\xad\x5d\x7f\xb5\x9a\xaa\x4b\x56\x86\xf3\x6f\x42\xce\xec\xa4\xf8\xfe\x36\x03\x5c\x3c\x15\xb5\x56\x18\x3a\xf1\xe9\x12\x5e\xd3\x19\xec\x40\xdc\xb3\xc9\xe4\x19\x0a\x5e\xa9\x88\x36\x54\x39\x69\x68\x3f\x1f\x26\x79\xb6\x98\xb7\xd6\x93\x1b\x6f\x68\x03\x2d\xb0\x41\xcf\x04\x06\x00\x1f\x06\xbc\xb3\x3b\x7c\xa8\x5b\xa3\xf4\xb3\x25\x83\x87\x61\xa8\xc3\x1d\xaf\x71\x32\xc2\xba\xff\xbd\x9d\x98\x21\xfb\x7c\xb0\x9b\x04\x24\xd5\x90\x9f\xaf\x30\xc0\x65\x1f\xb3\xde\x48\x2f\x8d\x86\x19\xe4\x99\x8c\xdf\x7a\x80\x12\x8e\x57\x4e\xb7\x10\xd2\xd3\x4f\xce\xf9\x24\x4d\xdc\xa0\xf7\xa7\x1a\xb0\x87\xf0\xda\x21\x05\x1c\xaf\x5d\x53\xc3\xf1\x3a\x9d\x81\x28\x5f\x39\xb2\xdd\x51\x13\x1b\x55\x5e\xd7\xb0\x6b\x37\x74\xd0\xed\x69\xd0\x78\x6d\x45\x8f\xc6\x2b\x87\x36\x8d\xd7\x70\x9d\x1a\xaf\x21\x69\xd0\x78\xe5\x15\x1c\x3e\x99\x1a\x17\xc3\xa9\x1d\xa8\x59\xcc\x02\x03\x40\xd4\x13\x7c\x2a\x5e\x18\x0f\x96\x17\x4e\xa9\x41\x91\x41\xa7\x5a\x56\xad\xc1\x81\x73\x3d\x3a\xd6\x97\xe0\x85\x58\x05\x3d\x29\x06\x29\x49\xab\x83\x44\xba\x17\x68\xc7\xa8\xae\x0c\x1f\x61\x37\x73\xf8\x87\x84\x42\x72\xb1\x6d\xde\x10\xc8\xf6\xc3\x1f\x5b\x0f\x7d\xe4\x0e\x7b\xec\x5a\xc8\x23\x27\xb8\x44\x62\xa8\x23\xf8\x47\x73\xec\x1d\xff\xb0\x80\x2d\x78\xbd\x60\xae\xc8\x25\x32\x7e\xad\x92\x65\x8f\x50\xb0\xc8\x7d\xbf\x55\x6c\xea\xb3\xad\x68\x79\xde\x70\x4f\xa1\xf9\xf0\x20\x82\xe6\x64\xff\x28\x60\x66\xfb\x7a\xd9\x53\x61\x98\x9a\xd1\x82\x1d\xc4\xc1\x05\xd6\x2c\x58\xcd\x94\x9d\x78\x77\x9f\x87\x60\x5e\x50\x51\x56\x0e\xfa\x1c\x77\x11\x61\x1f\x0c\x53\x76\x91\xba\xe4\xb3\x24\xe5\x71\xdb\x80\x59\x40\xf9\x36\x62\x1d\x30\xf0\xb6\xcf\x1a\xa4\xc2\xab\x47\x22\x3a\x79\xba\x65\xf5\x7d\xd3\x2c\x0b\xe8\x38\xc0\x94\x2e\x41\x8f\xa4\x00\xad\x18\xc4\xfd\x52\xb6\x0a\x13\x6e\x43\x1e\x65\x21\x95\xb2\xfa\x39\x10\x44\x35\x51\x6c\xce\xb5\x81\xee\x30\xbe\xab\x25\x76\x98\xd8\x1a\x1e\xcf\x4e\x65\xf2\x85\x94\xbd\x5b\x90\x8e\x92\xc7\x70\x16\x5d\xa3\xe4\x15\x2f\xbd\x41\x17\x9f\xcf\x5c\x93\x86\xea\x08\x3f\x9d\x6a\x2d\x0b\x0e\x01\xb0\x8e\x8b\x92\xc7\x47\x4f\x28\x98\x8b\x25\x33\xd6\xba\x17\xac\x87\x7c\x1b\x27\x19\x4a\x42\x9b\xa6\x4a\xae\xb4\x19\xcc\x16\x42\x96\xec\xac\x9d\x56\x5c\x2f\xce\x77\x25\x71\x6a\x13\x4d\x58\x9c\xbc\x56\xd1\x74\x53\x02\xd5\x80\xa4\x2d\xa1\x39\x58\x5c\x56\x5f\xb2\x06\x26\x97\x02\x5c\x5d\x54\x6b\x3f\x6a\x2c\x6a\x24\xe8\x9d\x15\x33\xcc\x7f\x95\xae\x47\x77\xef\xed\x7a\x4f\x58\x9b\xdc\x7e\xfa\x83\x68\x7a\x9f\x17\xb4\xaa\x06\x78\x3e\xfa\x2a\xb6\xd7\x5e\xd0\x05\xe0\xfb\x58\xe0\x86\xe1\x76\x2f\xf9\x59\x86\x92\x32\x3c\xbd\x26\xd8\x01\x34\x5d\xc5\xdd\xb8\x70\x3a\x6a\xf3\x2f\x85\x5f\xdd\x91\x55\xc8\xfd\x0f\x02\x07\x20\x7c\x17\xee\xe3\xa7\x74\xb6\xa7\x74\xb6\x8f\x5c\x5b\xb7\xe9\xc8\x53\x3a\xdb\x5d\xaf\x5d\x4c\x67\xdb\xb9\x94\x73\xef\xb8\xc6\xe3\x91\x96\x63\x40\x13\xc4\xa4\xab\x16\xcb\x7d\x82\x96\x3a\x54\x0b\xfe\x08\xee\xc0\xd6\x52\xbe\xf1\xbd\x0e\x8d\x51\x7c\xda\x9a\x74\x51\x9c\x37\xd7\xb0\xa3\x07\xcc\x53\xa6\x9d\xce\x30\x76\x4b\x56\x44\x87\x87\x73\xf2\x87\x13\x2d\xd2\x34\x06\x9a\x4a\x93\x60\xbb\x80\xd9\x82\x1f\x3e\xd3\xa4\x94\x45\x5b\x33\x61\x3a\x0e\xe9\x6a\x5d\x30\xce\xb2\xc5\x53\x95\x96\x25\x47\xa5\xe4\x2c\xc3\xf9\x3a\x48\x1c\x95\xf2\x5a\xd8\xf3\xe8\xf0\x2c\x09\xe1\xb7\x8f\xee\xdb\x3d\x2b\x76\x63\xf8\x8f\x89\xfd\x9c\x4e\xa1\x27\xbd\x6b\xb9\xfa\x94\x32\xb9\xf1\x11\x79\xb6\xe9\xa6\xc8\xac\x91\xa4\xd5\xec\xd6\x94\xc8\x2e\xb2\x9a\x75\xe4\xa7\xec\xcc\xdd\x08\x0b\x3f\x65\x67\xa6\x8e\xfc\x94\x9d\x99\x36\x7c\x4f\x9e\x9d\x62\x8a\xa5\x55\xe7\x2a\xd7\xdb\xb3\x77\x3e\xb8\xcc\x84\x01\x0b\xb5\x5b\x59\x65\xc7\xdd\x99\x88\xce\x8d\x55\xe0\xdf\x15\x3f\x0c\xca\xc2\x2e\x0e\x1e\x15\xcd\xf9\x43\x13\x8c\xcd\xcf\x21\x03\x6d\x07\x32\xc8\x60\x2e\x07\xf8\x04\xf1\xea\xa3\xc5\x75\xd0\x83\xd8\x8d\x1b\x53\x74\xa3\x1c\xe1\x46\x96\xaf\xb0\x01\x35\x15\x42\xa2\x8a\xaa\x47\xd8\xc0\x5b\x8f\x1c\xf8\x05\x18\xa9\x0d\x2d\xd0\x4b\xd6\xf2\x12\x64\x6a\x87\x50\x99\x8a\x1d\x87\x57\x16\x2e\x20\x99\x38\x81\x00\x37\xc0\x14\x9d\x0d\x61\x09\x92\x8d\x2d\xec\x45\x1b\xfe\x23\x53\x7a\x40\x6f\xbb\xee\xea\x37\xde\xc5\xa7\x7a\x6e\xd0\xc5\x82\xd5\x14\xfe\xf9\xda\x4f\x81\x15\x90\xd6\xea\x34\x0c\xdb\xd7\x31\x55\x6b\x22\x67\xa3\x5e\x05\xf6\xde\xd5\x90\x8e\x6e\xfe\xca\xe4\xcc\x20\x7e\x33\x9d\x0d\x4e\x37\x22\xab\x13\x76\xd6\x4b\x0e\xb2\x1b\x09\xf4\x48\xbb\xb7\x7c\xf8\xa9\x4b\xd4\x86\x43\x04\x67\x78\x87\x26\x27\xbf\xa7\x06\xaf\x5d\xcb\x0a\x4d\xcd\x06\x1d\x85\x8c\x81\xbe\xca\x3e\x90\x9c\xa7\x6c\xd0\xfe\xf5\x94\x0d\xfa\x94\x0d\x9a\x35\x1b\x34\x52\x76\xfc\xb9\xb5\x21\xb1\x33\xce\x63\xf0\xd9\x9d\x53\xe6\xed\x7e\xe7\x71\xf0\xc9\x99\x3e\x33\x53\xaa\x7e\x01\xca\xb3\xc9\xe4\x19\x96\xa0\x74\x2e\x8a\xd6\xcc\xc6\x7f\x20\x4c\x14\xb2\xb4\xcf\xb9\x80\xe7\x2b\x6d\x40\x85\xef\xe2\x3c\x31\x2d\xb5\x1f\x2b\x2e\x62\x81\x67\xe7\xd0\xa8\x06\x1f\x15\xbe\x97\xe3\xeb\xfc\x8a\xe9\x60\xe1\xde\xa9\xb3\xa1\xe3\xa4\x9b\xe2\xc2\x67\x34\x39\xbd\xd6\x7f\xaf\x49\xc5\x6b\x0e\xed\x4d\x4a\x90\x70\x4c\x9b\x61\x81\x2e\x42\xf6\xf1\x91\x93\xa2\x69\x47\xee\xf1\x93\x9a\xd5\x52\x2d\x47\x61\x08\xfb\x65\x6f\x4c\x77\xc7\x01\x28\xd1\x45\xab\x14\x13\xa6\x5a\x0e\x03\x7c\xef\xae\x1d\xd4\xa6\xfd\x0a\xec\x88\x32\x1d\x18\x64\x48\x23\x86\xee\xea\xcb\xa0\x2e\x9f\x0e\x42\xcd\x61\x16\xe1\xec\x74\xc0\x7e\xa3\x2e\x8b\xd1\x7e\xca\xc4\x15\xb9\xa2\x4a\x0f\xdb\xf3\x24\xaf\xfe\x5c\xf2\x2b\xae\x65\x72\x0e\x5a\xf4\xa0\x78\x7a\xce\x43\x04\xcd\xee\x54\xd9\x9a\xa6\x35\xee\x38\xf1\xdb\x97\x7d\x68\xa4\x55\xd2\xc2\xb6\x5d\x31\x34\x5e\xa6\x06\x28\xbb\xab\xa1\xc6\x30\x25\x5e\x91\xff\xbb\xff\xf3\x6f\xfe\x35\x3e\xf8\xf3\xfe\xfe\xdf\x5f\x8c\xff\xe3\x1f\xbf\xd9\xff\x79\x02\xff\xf8\xf2\xe0\xcf\x07\xff\xf2\x7f\xfc\xe6\xe0\x60\x7f\xff\xef\xdf\xbd\xf9\xcb\xc5\xd9\xc9\x3f\xf8\xc1\xbf\xfe\x2e\xda\xfa\x12\xff\xfa\xd7\xfe\xdf\xd9\xc9\x3f\x3e\xf1\x21\x07\x07\x7f\xfe\x5f\x83\x49\xa7\x62\xf9\x6e\xa0\x1c\xc6\x6b\x9c\x51\x1f\xe8\x3f\x31\x0b\xfb\xad\x58\x29\x5c\x98\xb1\x54\x63\x7c\xf4\x2b\xe8\x29\x3d\x70\x00\xcf\x5e\xb9\xf7\x7f\xa7\x83\x84\x73\x29\x18\x88\x3b\xb4\xc1\xef\xc3\x06\xcc\x5c\x72\x01\x29\x21\xc7\x7c\x6b\x68\xa3\x7e\xfc\x3e\xc4\x8a\x61\x75\x23\x15\x55\x4b\x52\xba\x90\xc3\xf2\x1e\xda\xc8\x0c\x6c\x74\x0d\xa4\x97\x3c\x65\x57\x6f\x39\x64\x59\xb3\x92\xb7\xf5\xb6\xa3\x95\x48\x45\xbc\xf0\xd7\x76\x89\x21\x63\x49\xce\x42\x06\xbc\xbb\xcd\xc5\x8c\xa7\xb4\xb8\x44\x27\x42\xe0\x8c\x21\x91\x25\x16\x43\x0e\xef\xed\xb9\x54\xd7\x9a\x51\x11\x22\xa7\x90\x96\x2d\x4b\xf6\x4c\x87\x7b\x91\xa4\x2c\xc1\x4a\x4c\xc9\x72\x35\x5d\xfb\x6e\x80\x03\x6b\x0a\xbd\x01\xfd\x75\x6b\x6d\xdc\x07\x70\x37\xc9\xd2\x98\x80\xff\x93\x7d\x6f\x75\xfd\x6d\xb3\x69\x20\xc4\xe7\xe8\x1b\x09\x6e\x1d\xd7\xe8\x6a\x46\x2a\x59\x44\x05\x1b\x3d\x55\x14\x18\xf5\xc4\x8b\xb8\xa1\xd9\x4a\x96\x5d\x2d\x35\x68\x03\x41\x48\xad\xd2\x98\x6f\xcd\x0b\x3a\xad\x18\xba\x8e\x80\x6f\x06\xf3\xa8\x1d\xac\xa6\x1f\x78\xdd\xd6\xa4\xd5\xf6\xcd\xa4\xe8\x3f\xbb\x7b\xb1\x6b\xdc\x9a\xb8\x57\x6a\x2e\xe0\x47\x3d\x37\x5b\x7a\xf0\x6a\xc1\xc8\x79\x58\x81\xce\xe9\x8b\xe9\x8b\xce\xa7\xa3\x5b\x30\xfd\x1d\x75\xce\x00\x95\x33\x48\xb3\x0d\x76\x88\x26\x80\xe7\x90\xdc\x38\x93\xac\x0b\x0c\xc1\xab\xbe\xc4\x00\xf9\xb5\x88\x16\xa8\x15\xae\x1e\xea\xb1\xee\xe3\x47\xa7\xc5\x0f\xd4\xdd\x73\x69\xec\x59\xf4\xf4\xec\xda\x79\xa8\x2f\xdb\x9a\xba\x17\x0a\xdc\x7a\xfa\x9e\xf3\x47\x6f\x28\x76\xa3\xbe\xce\x28\x08\xd8\x21\x30\xeb\x17\xc1\xf7\xed\x94\xc7\x62\x59\xb8\x06\x42\xbc\xcb\x51\x0c\x79\x6a\xb8\x77\x01\x88\x67\x6c\xff\xcf\xfb\xc8\x7d\xfa\xd2\x94\xcd\x30\xbd\x1f\x7f\x03\xfe\x45\x9d\x06\x09\x84\x51\x82\x8a\x19\x40\x1e\x62\x22\x3c\x14\x6a\x14\x6a\x79\x65\x45\x48\xd2\x93\x7f\xd0\x2e\xc1\x8e\x27\x6e\x0b\x7a\xd0\x43\x94\xd4\xe8\xf0\x13\x8c\x95\x88\x92\x54\x75\x33\xa0\x5a\x91\xf8\xfe\xd3\x03\x32\x63\xd4\xb4\x0a\x73\xd7\x85\x54\x10\x11\x41\x21\x86\xae\x7c\xc5\x2c\x0b\x40\x63\x27\x25\x6b\xa2\x05\x6d\xf4\x42\x1a\x70\x1b\xd3\x86\x16\xdc\x24\xc3\xdb\x18\x45\x8b\x4b\xfb\x64\xc8\x62\x82\x37\x4b\x7b\x8d\xe2\xc0\xd5\xe8\xc7\xbc\xda\xc7\x95\x32\x0b\x25\xdb\xf9\x02\x80\x87\xf0\xae\xa2\xa2\x1a\x51\xae\xd2\x12\x10\x37\x8e\xe9\x1c\x9d\x9a\x94\x4b\x41\x6b\x5e\xf8\xf5\x83\x2a\x32\xcd\xa5\x4b\x30\x01\x5a\x52\xa7\x8d\x92\x33\xa6\x34\xd7\x86\x09\x83\xb9\x2e\x47\x15\xe5\x35\xd9\xd7\x8c\x91\x13\xbf\xd5\xf1\x9b\x73\x34\xd3\x31\xb8\x95\x5e\x76\x10\x27\xcf\xb8\x26\xa3\x0e\x47\xda\x7e\xe2\x83\x7a\x51\x42\x69\x7a\x0b\x08\xb7\x2b\x37\xbe\xe2\xc1\x80\xcd\xb8\x79\xce\xa4\x82\x0a\x21\xe7\x9f\xbb\x62\xa2\x94\x5d\x62\x75\xd2\x58\x87\x67\xa7\x3a\x76\x88\xa2\x4c\x6b\x70\x74\xf8\xc2\x35\x41\x0d\x9d\x0b\x83\x44\x4c\x1a\xcf\x2a\x5c\x82\x70\x51\xf2\x2b\x5e\xb6\xb4\x42\x55\x2b\x79\x9a\x8e\xce\x4f\x91\x48\x3e\x5f\x98\xf1\x35\x83\x70\x22\xea\xda\xdd\x29\xe2\x5f\x8d\xaf\x95\xcc\x72\x0d\x4a\x99\x21\x46\xa6\x09\x24\xe6\xc2\xd8\x76\xd2\xae\xe9\x12\xba\x79\xbb\xb2\xc7\x5e\xa6\xb9\x5b\x31\x37\xec\x4c\xa6\xe9\x0c\xb5\xd7\xf2\x1c\x73\x27\x4e\xdc\x21\x88\xe1\x82\x0a\x30\x5d\x21\x0a\x6d\xf9\x1f\x64\xea\xfa\xac\xa5\x4a\x9c\x26\x70\x70\xf7\x28\x54\x7c\x35\xb5\x3b\x2e\xd1\x23\xb3\x65\xaf\xc8\x55\xb7\x1b\x2f\x58\xdd\x54\xd4\x6c\x3d\xa1\xfb\xa7\x28\x28\x1f\xe5\x0a\xda\xa3\x83\x8a\x72\x4c\x2b\x2b\x32\xce\x7e\x3c\x72\xd0\x65\x28\xd8\xb3\x54\xc6\x5c\x78\xf5\x43\x38\x0b\x07\x4d\xd9\x8d\x32\x1d\xba\xeb\x4d\x59\x09\xfa\x80\xa3\x78\x48\x29\xa5\xbc\x16\x4c\xf9\x7d\x75\xf6\xe3\xd1\x88\xf0\x09\x9b\xf8\xbf\xc2\x10\x5e\x5d\x32\x72\x8e\xe0\x14\x1e\x22\x27\x3d\xc3\x50\x96\x13\x7c\xf5\x38\x7e\x1d\x8f\xf9\xcb\x1f\xed\xa4\xd8\x6f\xff\x34\xfe\xa3\x3b\x60\xe0\xaf\x5f\xac\xd6\x36\xa0\x9a\xee\x97\x95\xa7\xc5\x78\x00\xa0\xee\xd8\xbf\x7e\x39\x93\xe5\x79\xc3\x8a\x09\x4e\xbf\xfe\x65\x50\xd2\x2b\x21\x4c\x18\xb5\x9c\x90\x33\x09\x15\x32\xbc\x44\x81\x06\xef\xaa\xd8\x7f\xfb\x84\x0c\x60\x83\x10\xf5\x2d\xa8\x61\x02\xb4\x5f\x91\xde\xfb\x9c\x78\x5c\x4d\x18\x16\xc4\x3c\x85\x79\xde\x87\x50\x1d\xc2\x8b\x8f\x88\x91\xd8\xa8\x3b\xf5\xb4\xb5\xd7\xa1\x20\xec\x03\xd7\xd0\x47\x04\x57\x12\x98\x84\x3a\x68\x03\x6f\x72\x58\x62\x2c\xdf\x85\xbe\x38\x8d\x4c\xcf\xb8\x85\x19\xfc\x52\x48\xf3\x65\xd8\xbc\xbe\x62\x0d\x6c\x0b\x49\xe8\x95\xe4\x25\x69\x35\xe8\x9c\x82\xb4\x02\x52\x16\x06\x40\xc8\x3a\xee\x99\x2e\x49\xcd\xb5\xa1\x97\x6c\x42\xce\xad\x39\x12\xa7\x11\x23\x4f\x09\x32\xad\x64\x71\xc9\x4a\xd2\x0a\xc3\xab\x41\x9e\x99\x40\x37\x4c\x6d\x64\xaa\x00\x68\x6c\x5b\x58\x2d\xb7\x51\x6c\xec\x0d\x26\xbc\x6b\x80\xc7\x18\x0f\xf4\x30\xab\xdd\x5a\x8d\xc2\x56\x5d\x50\x74\xdd\x36\x25\x0c\xe9\x6a\x5f\x07\x0a\xa3\xb5\x3a\x7d\x3b\x9f\x12\xfe\x76\x7f\x00\x93\xe9\x09\x79\x0b\x96\x4b\x95\xbe\x29\xb1\x68\x02\xbd\xdd\x2e\x43\x46\xb0\x82\x69\x4d\xd5\x12\x0b\x8b\xb9\xf1\x35\xed\xad\x66\xb3\xb6\x02\x83\x31\x7d\x52\xa9\x68\x2d\xc1\x44\xb1\x42\x0a\x6d\x54\x5b\x00\xd7\x50\x32\x55\xf2\x92\x89\x0e\xe8\x63\xc0\x61\x12\x57\x4c\x77\x45\x9d\x56\xbd\x16\x92\x14\x0b\x2a\xe6\x2c\x40\x09\x93\x9a\x96\xc0\xc9\xdf\x05\xe7\x47\xfa\x64\xca\xc0\x17\x74\x66\xac\x5a\x68\x80\x41\xa6\xd6\x4a\xf0\xd9\x48\xe9\x2f\xf6\x3e\x14\x7c\xd7\x51\x42\x93\xe0\xd5\x16\x4b\x0d\x87\x67\x94\x8c\xc1\x5a\x4d\x75\x18\x66\xc8\x20\xa9\x99\xa1\x25\x35\x74\x57\x30\x04\xde\xd0\x65\xc8\x4c\xc3\x9c\x7d\x60\xdd\x28\x97\xdf\x99\x09\xde\x3f\x24\x1b\x1e\x03\x5a\x9f\xfd\x78\x34\x68\x7c\x70\x08\x01\xb7\x42\x37\x2c\x63\xa5\x8c\x4b\x5d\x84\x5d\x85\xd0\x11\x1e\x11\xc0\x92\xe6\x29\xc1\x63\x9c\x95\xa4\x6c\x07\x47\xb3\x3b\x15\x61\x48\xee\x54\x96\xcc\x29\xcb\x9f\xbb\xc2\x1c\x17\x5d\x32\x7a\xd1\xaf\x4e\xdf\x68\xe8\x63\xce\x22\x13\x86\x2b\x16\x01\xae\x0f\x22\xc1\xf1\x5b\x2b\x50\x92\xf6\x39\x0f\x59\x73\xce\x8c\xee\xca\x2e\x51\xa1\x1c\x38\xaa\x71\x46\x12\xbe\x11\x58\x7e\x9e\x1b\x5d\xac\x65\xe3\x04\x0c\x1a\x13\xf9\x5c\x4b\xa7\x38\x5a\x95\x7b\xeb\xcc\x98\x2f\x6b\x8e\x16\xf6\x9c\x7f\x23\xcb\xe1\xe9\x77\x79\xf3\x40\x7b\xa4\x75\xe0\x36\x88\x01\xa5\x21\xdc\x89\x37\x40\x2a\xb5\xee\x81\xdb\xa3\x26\xb3\xa0\x57\x83\x01\xa0\x93\x63\x61\x9d\xbf\x62\xec\xc3\x62\x48\xee\x18\xc8\x1d\xbf\x1c\x48\xd8\xf0\x02\x44\x7f\x0d\x2c\x44\xec\x13\x94\x25\x47\xec\x1e\x20\x5e\xfd\x65\x8f\xf8\xf3\x2c\xf9\x61\xb9\xb9\xbd\xa3\xcc\xa9\xad\xae\x5c\x20\x14\xb6\x38\x58\x4c\xc6\xed\x21\x3c\x7c\xbd\xbe\xec\x99\xa9\xce\xb9\x12\xe2\x1b\x08\x29\xb5\xef\x03\x1e\x13\xc7\xd6\xbe\xfb\x56\xff\xf6\x83\xcc\xc4\x80\x55\xbe\xd9\x07\x3e\x78\xa4\x53\x57\x1d\xe9\x3d\x57\x4c\x41\xa5\x4e\x04\x6d\x69\x45\x8d\x92\x55\xc5\x14\x2c\x81\x0b\x6a\xac\x14\x80\xd9\xd5\x22\x98\x06\x98\xde\x8f\xc3\x5f\x3e\xcc\x17\x5c\x6d\x82\x5d\x07\xeb\x9a\x6a\xec\x74\xed\x33\xe0\x21\x7c\xe9\xab\xfa\x36\xd1\x33\x5c\xe4\xfd\xe4\x83\x81\x87\x62\x89\x93\x7f\x1c\x31\x27\x86\xcc\xc8\xdc\x92\xca\x35\x61\x82\x4e\x2b\x6b\x8e\x44\x0c\x1c\xe8\x5c\xd1\x4e\x8d\x8c\xee\x7a\xcf\x66\xc3\xa7\x0e\x62\x98\xf1\x23\x3f\x6d\x6c\x54\x6f\x7b\x3f\x9c\x74\xb5\xb0\xce\x37\x93\xa1\x21\xb0\xbf\x1c\xd7\xf5\x86\xe8\xd7\x47\xad\x50\x13\x77\x9b\xd9\xf8\x06\x43\x69\xca\x56\x4d\x90\xaf\x9e\x00\xfa\x85\xf0\xc4\xf8\x40\xff\x31\x83\xfc\x84\x78\xe5\x2b\x4b\x80\x2a\x5f\x28\x09\xcb\x91\xdf\x9d\xfb\xdc\x21\x18\xb6\x03\xfa\xbc\x0b\x78\x0e\x7f\x78\x9b\x22\xe4\x3b\x4f\x99\x95\xce\x5d\xf3\xa9\xe1\xfb\x82\xe0\xde\x88\xc7\xdf\x50\x3a\xd8\x89\xb9\xef\xb8\x28\x43\x11\xa7\x07\x85\xb5\x0a\xda\xe1\xd9\x29\x52\x9d\x87\xa6\xd7\x70\x26\x2c\x9d\xc1\x6b\x16\x5c\x95\xe3\x86\x2a\xb3\xc4\xd0\xd6\xa8\x47\x71\xc0\x73\xcc\x30\x74\xd6\x4c\x7b\xbb\x99\xb2\xb3\x1c\x2c\x81\x4f\x4b\x74\x79\xb3\x37\x72\xc8\xae\xcd\xc8\x50\x94\x48\x7f\xf5\x66\xe4\x6d\xd7\x0e\x2d\x04\x71\x1e\xc9\x8c\xdc\x57\xc5\x38\xe9\x9f\x66\xbb\xab\x6b\xdb\xa3\x56\xf7\x6b\x97\x50\xf5\x05\x7f\x85\x0b\x43\xca\x18\x36\x2c\x58\x99\xe0\xe5\xb7\x4f\x1a\x11\x3e\xb3\x4a\x9b\x14\x63\xc8\x7c\x1c\x4c\x5e\x97\xf6\xe4\x2c\xdd\x89\x2b\x6f\x46\x0f\x3c\x08\xa6\x88\xca\x68\xe8\x4e\x0e\x92\x7d\x21\xd3\x1d\xf4\xfe\x02\xd9\x8a\x63\x1d\x60\x45\xfb\x0d\x99\x24\xd3\xe1\x2d\xac\x48\xa7\x79\xc6\xae\xfb\xe8\x2c\xf0\x2a\x31\x17\xa5\xdd\x54\xa0\x22\x81\x53\x5f\xb7\x45\xc1\x58\x08\x19\x3a\xb1\x34\xdc\xa4\xed\x9d\x3d\x6e\xca\x6b\x6a\x8a\x05\xd3\x44\x4b\xe8\x75\xac\x0d\xad\x2a\x56\x86\x54\x27\x64\x14\x09\x56\x85\x4b\x83\x1a\x4c\x47\x64\xac\x0c\x9f\xe2\x28\x30\xe2\xa2\xae\x4d\x45\x5d\x50\x69\xd6\x8a\x02\xeb\x17\xb9\x59\x86\x2c\x93\x55\xc3\x14\xfc\xd0\x1a\x62\x6d\xc3\x4d\x9f\x19\x66\x8c\x44\x3e\xe5\xc0\xcc\x70\xf8\x2f\xf1\xb8\x5f\xd0\x2b\xd6\x65\x7b\xb8\x2e\x91\xf6\x94\x0e\x50\xb7\x19\x78\x3d\x82\xca\x1d\xa1\x85\x10\x2b\xec\xe2\x59\x9c\x0c\xce\x45\x6e\x53\x26\x9e\x87\xfd\x68\xd2\xd7\x4c\x9c\x83\x60\xda\x68\x66\x02\x88\xf7\x70\x8d\x97\xb8\xfc\x79\xda\x1a\x59\x53\xc3\x0b\x08\xd1\xf1\x59\x94\x24\x56\x63\xe2\x85\x95\x34\x3e\x11\x1e\x55\x24\x50\xdc\xdc\xba\x65\x12\x03\x9b\x8d\xa5\x7b\x98\xf8\x68\xae\xdd\x2a\xf7\xa7\xd5\x4f\x4b\xa4\x7a\x66\x7a\xcf\x0b\x8f\x88\x4c\xcc\x42\x31\x46\x78\xdd\x48\x65\xa8\x30\xa4\xe4\xb3\x80\xd1\xed\x33\x0c\x6f\xe3\x89\x1c\xfe\xa0\x9f\x20\xaf\x36\x1a\x05\x03\xa6\x55\x25\xaf\x35\x31\xd7\x32\x84\x1c\xba\xfc\x2e\x87\x79\x3c\xea\x13\x93\x41\xc7\x71\xa3\xda\xa3\xce\xf2\x55\x74\x0e\x8d\xac\xec\xb9\x66\x55\x65\xff\x7b\xdb\x69\x34\x18\xc7\x64\xe3\x9c\xf0\xb9\x40\x18\x5a\xae\x7d\xf0\xcb\x61\xa8\xec\x97\x4a\x36\x8d\x4b\x7e\xa8\x0f\xf2\xcf\x09\x24\xaf\xab\x2b\xa6\xa1\xc8\xc4\xe3\xba\x58\x56\x98\x33\xc1\x14\x35\x90\x5e\xe7\xfa\xb9\x82\x4a\xb2\x4a\xe4\xd0\xa0\x0f\x5e\x19\xfd\x22\x1f\x61\x3a\x4c\xbd\xdc\xcc\x64\xfe\x1e\xf7\x6d\x86\xf7\xe2\x02\xf9\xcd\xcb\x9d\x0c\x0c\xb4\xff\x2d\x33\xf4\x80\xfc\xa0\x91\x2d\xc2\xc9\x1b\x70\x78\x3e\xc9\xcb\xe6\xf0\xd6\xd1\xd1\x96\x81\xa8\xc3\xaa\x59\x44\x54\xc5\x7e\xa9\x00\x21\xd7\x9f\xeb\x1e\xbd\x47\x4a\x6a\xfd\xd6\xff\xe4\x01\x49\x7f\xf2\x59\x7d\xe4\x7a\xf2\x59\x3d\xf9\xac\x9e\x7c\x56\x70\x3d\xf9\xac\x56\xaf\xcf\xc5\x67\x45\xba\xe3\x6a\x57\x65\xd3\xdb\xd8\x74\xe9\x1f\xb0\xf7\x3c\xcf\x84\xbc\x95\xc6\xa5\x18\x83\x05\x4b\x6f\x0c\x3a\x51\x38\xa1\xaf\xe9\x72\x22\x98\x71\x9d\x4c\x7c\x7c\xf7\xbd\xa7\xe9\x2f\xca\x5a\x23\xce\xf5\x11\xc9\x0d\x2f\xc8\x7c\x7b\x9b\x68\x14\x23\x51\x35\xeb\x32\x9e\xe1\xf3\x67\xda\xe5\xb5\xda\xef\x01\xb2\x30\x7e\x40\xc1\x26\xe4\xdc\xd5\xba\xac\x0c\xbe\xde\x64\xa1\x64\x86\xf2\x21\xbd\x9b\xe2\xcb\x6b\x43\x17\x37\x68\x67\x5b\xd3\x76\x48\xce\x6d\x13\x40\x97\x76\xcd\x15\xdb\x81\xb8\x45\xd5\xb9\x71\x4d\x7f\x77\xc3\x7d\x65\xf8\x9c\xce\xc8\x7b\x56\xc8\x2b\xa6\x70\x75\x4f\x3e\x34\x54\x68\x2e\xc5\x6b\xca\x2b\xbb\xb6\x7e\x8d\xbb\x68\x37\x69\x35\x53\xfd\x14\xc8\x28\x45\x23\x6c\x70\xc7\x48\x96\x7b\x87\x1b\x28\xa1\xbb\x89\x1d\xcf\x55\xd0\x35\x8a\x5d\x71\xd9\x6a\x8f\x7c\xd0\x1a\xd4\x34\xb4\x71\x1e\xa2\x05\x9f\x2f\xfc\xcd\xbe\x62\x15\xb2\xae\x55\x19\x36\xf1\x60\xca\xb4\xa1\xa6\xd5\x7d\xf8\xe9\x02\x12\x0f\x77\x28\xfb\x2a\xf0\xd1\xee\x18\x21\x39\xd5\x75\x44\xa0\xd8\xd5\x03\xf1\x7b\xc4\xc7\xc0\x47\x4f\xdd\x5e\xf6\x50\x1f\x1d\xac\x49\x21\xeb\xa6\x35\x2c\xda\xf3\x6e\x77\xe5\x11\xf5\x77\x64\xa6\x5e\xff\xa7\xe7\x35\x15\x74\xce\xc6\x81\xb4\x71\x87\xf2\xf1\x3c\x9b\xa4\xcf\xc2\x56\x24\x7b\xf3\x9f\xf8\x7a\x74\xe8\x1c\xfd\x2b\x1b\xce\x1e\xb9\x17\xac\x3d\x92\x1f\x6f\x8f\xdc\x3f\xe6\x1e\x09\x10\xa8\xbb\x2a\x80\xde\x3b\xfa\x56\x45\x90\x53\x32\x6e\x13\x41\x39\x4d\x65\xa7\x6c\x38\x5a\xb8\x26\xb2\xe6\xc6\x30\x5f\x8e\x18\x44\xca\x88\x70\xd3\x43\xc7\x74\x02\x14\x02\x9c\x58\x3d\xc8\x3e\x34\x15\x2f\xb8\x89\xda\xd7\x25\x02\x48\xac\x5e\xe0\x40\xb8\xe6\x1a\x55\x79\x41\x78\xdd\x54\x2c\x68\xe0\x63\x87\x2e\xe4\x83\x70\xe1\x6d\x0a\xa8\x4d\x21\xec\x03\x84\x62\x91\xe0\x27\xb9\x7d\xc7\xeb\x49\x6e\xdf\x70\x3d\xc9\xed\xec\x72\x1b\xb1\x4b\x87\x43\x01\xf7\xe4\xb5\x7f\xa8\xeb\xbe\x44\xa7\xac\x22\xbf\xb6\x4c\x2d\x89\x35\xb0\x3a\x5c\x10\x69\x85\x9d\xe6\x25\xe2\x57\xf8\x9c\x8e\x1d\x8a\x10\xe4\x54\xce\x21\x67\xe4\xe4\x83\xb5\x6f\xa1\x2b\x45\xf6\x53\x72\x75\x80\x7e\xef\x2b\x5c\x85\xb0\x32\xb1\x55\x8a\x85\x54\xf1\x27\x60\x62\x1e\xbe\x3d\xce\xe9\xc0\xc8\x51\xa6\x42\xf2\x95\xaa\x90\x7b\x52\x32\x08\x39\xbc\x65\xae\x71\x4d\xc2\x37\x70\x8e\x87\xb2\xa6\x10\xcd\x25\x97\x6c\x39\x72\xa5\x9e\xc4\x72\x20\xf5\x37\x67\x22\x11\xab\xe7\x51\xfd\xb9\x64\x98\xc7\x31\xac\x57\x69\xff\xca\x7c\x20\xe6\x0c\xd5\xe1\x35\xb6\xaf\x9d\xed\x59\x7e\x89\xf2\x9c\xd1\x99\xcf\x7c\x62\x5f\x35\xd7\xa3\x56\xf6\x8c\xe5\x1d\xe7\xdd\x46\x9e\xb7\x1f\x04\x34\xca\xc0\xe6\x80\x14\x0a\x02\x3f\x0f\x7b\x91\xdc\xc1\x04\xbc\xfc\x32\xde\xd3\x64\x65\x13\x30\x24\xa2\xb5\x8f\x67\x78\xc9\x96\xcf\xb4\x6b\x43\x22\x85\x5e\xf0\x06\xd4\x77\x48\x66\x92\xb3\xac\x5b\x1c\xaf\x1f\xa1\x1c\xd6\x13\x83\xe7\xc6\xa9\x18\x91\xb7\xd2\xd8\xff\x9c\x00\x38\x05\x88\x97\x63\xc9\xf4\x5b\x69\xe0\x93\x9d\xe6\x02\x9c\xa4\xc7\xc0\x03\x2e\xe7\x88\x43\xc6\x0f\x1c\xaf\x88\x5f\x0d\x58\x85\x6e\xad\x7d\xd5\x51\xe0\x17\xae\xc9\xa9\x20\x52\xb9\x25\xca\x48\x0e\xb8\xe6\x91\x24\x24\xc6\xc7\xbb\xbb\xa4\xc0\x4d\xd4\x38\x1e\x91\xaa\xc7\x22\x0f\x42\x98\x23\x0a\xa2\x3e\xf8\x0d\x44\xb7\x20\x17\xd6\x43\x17\x00\xe8\x95\xa2\x86\xcd\x33\x24\xf1\x76\x57\xcd\xd4\x1c\xfa\x04\x15\x8b\xdc\xbb\x21\x97\xa2\x85\x57\x46\x75\x0b\xaf\x7b\xd8\xb2\xf7\x5a\x2d\xfc\x20\x03\x80\xee\xfe\x3d\x40\x7c\xec\xaa\xf7\x2c\x22\x11\xb5\xd8\x9a\x36\x56\xde\xfc\x3f\xab\xac\xc2\xf6\xfa\x1f\xd2\x50\xae\xf4\x84\x1c\x12\xcd\xc5\xbc\x62\xbd\xef\x5c\xb0\x38\x7a\x4c\x26\xb2\x20\x97\xc5\xea\x87\x57\xb4\x62\x88\xd3\x44\x05\x61\xe8\xae\x02\x7c\xee\x15\xc3\x68\x44\xae\x17\x52\xa3\xe6\x1b\x4a\x0c\xf6\x2e\xd9\x72\x6f\x94\x25\x14\x46\xe2\xf3\xd9\x3e\xfa\x54\xec\x75\x8d\xe0\x7a\x92\x28\xe8\xfe\x90\xf1\xb8\x07\xdf\xed\x3d\x8c\x3d\xf6\x08\xdc\x55\x8f\xa2\xc8\xc9\x85\x1b\x8f\x2a\x8a\x29\x02\xbb\x16\x5c\x5f\xa5\x6f\x35\xe3\x07\x90\xee\xa3\x7b\xba\xf4\x0e\x87\x72\xb6\x73\x51\x5c\xc0\x2d\xce\x04\x9e\x91\x81\xb9\x90\xac\x43\x63\x14\x9f\xb6\x86\xe9\x9d\xe5\x84\x1b\x09\x8d\x60\xdd\x42\xff\x54\xbb\xf2\x3f\x6e\xfa\x41\x84\x80\xc7\x75\x2e\xe6\x38\x9d\xad\xe6\x4e\x46\x90\xba\x31\x2e\x82\x54\x0e\x61\x6f\xad\x0a\xcf\xfe\x4d\x03\xa9\x0e\x43\x7d\x78\x3a\x55\x97\xac\xa9\x98\x6e\x24\x56\x9d\x6d\x9c\x18\xa7\x48\x2e\xa8\x86\xac\xfb\x99\x4b\x8a\x6a\x5a\xd5\x48\xc0\x42\xa7\x62\x6d\x33\x66\xc1\x8d\x70\x20\x21\x1e\x84\x09\x01\xe7\xc2\xce\xb5\xfb\x3d\xf4\xbf\x3c\x5c\xe9\xfc\x22\x15\x34\x93\x70\x85\x01\xa2\xe4\x85\xf3\x0b\x51\x43\x44\x1a\x80\x71\x7c\x6d\x66\x20\x5f\xb9\x84\x6e\x81\x00\x7f\x8f\xac\xe4\x4d\x04\xa4\x9d\x09\x03\x39\x36\x82\x9c\x8a\x19\xa3\x9a\x4f\x2b\xe6\x8a\x1b\xb4\xa1\x26\xc3\xfc\x45\x09\xf9\x6e\x1e\xad\x39\x0d\x5a\x04\x37\x7a\x35\xb9\x66\x9f\x8b\xa2\x6a\x81\x07\x04\xaf\x0e\xc0\x85\x4d\x45\xc1\x2a\xd4\x6d\x64\x19\xd0\xb8\xb2\xe1\x45\x44\x89\x44\x33\xa6\x14\xce\xd7\x74\xb9\x79\x37\x93\x52\x32\x4c\x45\x06\x20\x95\x11\xbe\xde\xe6\x0a\x19\xb7\x0c\xc3\x0f\x18\x9c\x2d\x4a\xce\x18\xee\x0e\x5c\x19\x42\xed\x51\x32\xab\x10\x07\xce\x9d\x25\x30\x43\xae\xd2\xe1\x3c\xca\x18\x1a\x21\x28\xa8\xc3\xee\x8c\x1b\x7f\x0e\x26\xcf\x01\x64\x6e\xeb\xfc\xc2\x65\x1a\x77\x92\x69\x0c\xc7\x17\x1b\x1c\x78\xcc\x7c\x7e\xbd\x19\xdc\xdf\xfb\xbe\x0e\x2c\x68\x13\xed\x5b\x62\xf4\x5a\x75\x75\x35\xd2\xf7\xa4\xb3\xfc\x08\x9b\x5e\xce\xc8\x6b\x5e\x31\xbd\xd4\x06\x8b\x1f\x79\x8d\x82\x0b\xcb\x43\xa5\x21\x28\x15\x30\x99\x0e\x05\x97\x3d\xcd\xf2\x04\xb2\xb2\xad\x70\x76\x95\xa4\x7b\xac\xd7\x29\x7d\x55\xf6\x1a\x6c\xed\xaa\x04\x82\x92\xdd\x50\x0f\x95\x65\xb5\x06\xcd\xd6\x2c\x09\xd6\xb1\x37\x1b\xb3\xa2\xef\x8b\x7d\xcd\xa7\x8a\x91\xa3\x05\x15\x82\x55\x51\xbf\x48\x97\xba\x41\x8d\xa1\xc5\x02\xa5\x39\x25\x56\x92\x54\xcc\x3c\xd3\x64\x21\xb5\x21\x35\x2d\x16\x5c\x84\x46\x53\x22\xf4\x4d\xed\x50\x80\x1f\x21\xd0\xfd\x4c\x5f\x58\x02\x12\xd7\x39\x97\x70\x41\x2a\x3c\xc7\xce\xba\x8d\x0d\x52\xc5\x48\x02\x69\x40\x19\x9a\xec\xad\x3d\x3b\xf4\x80\xf6\x52\x0a\xd6\x1a\x3d\x05\x70\x6e\xc2\xbd\xe9\x23\x9f\x7c\x98\x90\x3d\xf6\xc1\x7c\xb3\x37\x22\x7b\x1f\x66\xda\xfe\x47\x98\x99\xde\x9b\x90\xd3\x3a\x24\x0a\x71\x11\xa9\x11\xcc\xfd\x80\xf0\x19\x69\xc5\xe0\xa2\xce\xc1\x12\xab\x6a\x45\x16\xfe\x78\x56\xb5\xc2\x2e\xf1\x3b\xd7\x8a\xf9\x15\x79\x7d\x44\x0c\x55\x73\x66\xec\x18\x44\xb4\xf5\x94\xa9\xd4\x96\xad\x39\x12\x47\x86\xb7\xd9\x57\x8c\x96\xef\x44\x95\x1c\xdb\xcb\xb5\xa1\x3c\x1d\xfd\xf9\x3e\x8e\x12\xd7\x66\xb4\xd2\x8c\xec\xdb\x1b\x9f\x5f\x2b\x6e\xd8\xc1\x84\xbc\xf7\xbf\x82\xf2\x77\xd0\x45\x67\x72\x88\xbe\x87\x55\x23\xee\xa1\x9a\x19\xc4\x2c\x16\xce\x06\x79\x63\x37\x75\xb2\x16\x88\x0b\x3e\x95\xb2\x62\x89\x90\xee\xc8\x7b\x3f\xfd\xf4\x36\xd9\x35\xd6\xe7\xef\xee\x79\x37\xb1\xf9\xb5\x54\x55\x79\xcd\x4b\x57\x78\x44\xf6\xed\xcd\x07\xc3\x58\x7e\x48\x68\x61\x60\x20\x21\x77\x5b\xbb\x3c\x3e\xfc\xeb\x6b\x5e\xe6\x59\xd1\x01\x1b\x10\x88\xe8\xf3\x80\x77\x8c\x58\x1e\x20\xc0\x04\xbc\x64\xc2\x58\xe1\xae\x34\xd9\x87\x5f\xa4\xe3\x68\x9e\x70\xec\x7b\x02\xe3\x4a\x45\x0a\x59\x4f\xb9\xe8\xda\x12\x75\xbc\x69\x15\x18\x2b\x6f\x7d\xc4\x4d\x33\x83\xbd\x04\x00\xd5\x50\x9a\x05\xd1\xbc\x6e\x2b\x43\x05\x93\xad\xae\x92\xe1\x34\x9e\xd8\x73\xed\x9a\x55\xec\x03\xca\xbe\x6d\x35\x5d\xec\x28\xe8\x6b\xc6\x80\x54\xd1\x75\x86\x5b\x55\x8d\x93\xc6\xea\xe0\x91\xca\xe7\x41\xb5\x0e\x7d\x4e\xd8\x07\x56\x38\x14\xd5\xa6\x6a\xe7\x3c\xd1\x3b\x73\x6c\xdf\xa2\xa0\x86\x95\xaf\xc8\xeb\xee\xe5\x00\xa3\xcb\x7f\x33\x21\x47\x3e\xa7\xd1\x0d\x4f\x8e\xce\x4f\x8f\x5d\x73\x30\xa1\x0d\xa3\xdb\xd0\xdd\x87\x25\x50\x8d\x9d\x2b\x76\x0b\x46\x03\x0e\x9c\x45\xc4\x76\x1d\xda\x56\xe3\x1f\xee\x1b\xd7\x79\x3b\x74\x50\x1e\xd6\xcc\x6a\xb0\x48\x78\xb2\x97\xb6\x66\x2f\xc5\x0d\x97\x23\xb2\x4a\xd6\x30\x61\xcf\x3c\x11\xef\x7f\x9c\xe7\xad\xb1\x89\x84\x35\xce\xa4\x57\xba\x87\xf5\x95\xca\xc8\x47\xbe\x90\x55\xa9\x09\xfb\x60\x14\xb5\xc7\x7e\x6d\x0f\xf8\xf0\x9b\x19\xa1\x62\x39\x19\xa6\x62\x0e\x0a\x4b\xe7\x0d\x45\x0f\x5e\x99\xdd\xb6\xd0\xca\x27\x0b\x2d\xbe\x34\x2b\x14\x33\x03\x60\xd4\xb2\x35\xfe\xf7\x84\xf4\x97\xab\xf7\xf1\x9a\x83\x15\xbf\xf5\x20\x0d\x2e\xad\x64\x88\xdf\x58\x33\xa1\xb9\xe1\x57\xbd\xee\xa0\x00\x83\x4a\xb5\x0e\x7e\x48\x50\xa6\x9c\x00\xd4\x3d\x84\xd2\xe4\x81\x31\x3e\xc9\x67\x44\xc8\x95\xb7\x8a\xa1\x2b\x42\x9c\xb0\x77\x4b\xf2\xa0\x21\x0f\xa7\xc6\xc6\xda\x54\x00\xe0\x21\x3e\x7c\x04\x58\x6b\xf8\x6f\x4c\xc5\xb1\x73\x10\x79\x63\x61\x16\xd2\x67\xda\xcd\xde\xf6\xc4\x66\x8e\x94\xf3\xa1\x08\x35\x39\x63\x47\x6f\x23\xd5\xce\x83\x93\x0c\x0b\x2f\xf4\x3b\xc9\xb1\xd9\x8c\x15\x76\x6f\x40\xf7\x3a\xdf\x8a\xcd\x9a\xb5\x65\x8b\x00\x20\x1e\x90\xb4\x0f\x28\x3a\x14\x7a\x2f\x82\x99\xe8\xb2\x57\x4f\x85\x36\x14\x30\x22\xe1\x8d\xad\x9e\x66\x95\x27\xd7\x7f\xd0\x6d\x27\x8c\x5e\x7b\xa4\xc9\x81\x44\xd4\x56\x0d\x2b\x98\xb2\x3b\xa6\x5a\x92\x6b\x25\x87\x16\x6d\xdd\x31\xb6\x2a\xaf\x98\xba\xe2\xec\xfa\xb9\x43\xac\x19\xdb\x97\x1d\x3b\x10\xc0\xe7\xe0\xee\x7a\xfe\x05\xfc\x67\x00\x55\x99\xa2\x6f\xee\x94\x7d\x45\xf6\xf6\x72\xf8\x05\x06\xa7\xae\xcd\xa0\x09\x67\x92\x41\x95\xc7\x27\x00\xc3\xaf\x84\xca\xdc\x87\xce\x21\xf0\x29\xa1\x31\x77\xd6\x44\x0a\xb9\xdd\xec\xfe\x41\xae\x7d\x0b\xd1\x96\x4f\x3a\x90\xa5\x56\x88\xe4\xfa\xc2\xbe\xed\x8f\xc3\xf4\x0c\xff\x90\xe0\xc9\xc5\xd8\x28\xc6\xc2\xab\x1a\x67\x3e\x09\xe9\x1b\x9f\x07\xc3\xe6\x11\x06\xf1\x4a\x6a\xa8\x66\x66\x48\x30\x39\x97\xa8\x8f\x48\xb1\xf3\x1b\x4b\x7d\xf7\x15\xe4\x5b\x31\x40\xaa\xf6\xbd\x1d\xc9\xf8\x4f\xce\xf4\x17\xbd\x3b\xad\xd1\xef\xd6\x35\xfd\x24\x47\x44\x22\xe8\xd6\x82\x3e\x20\x1c\xbb\x63\x92\x6d\xd9\x88\xee\x2d\x7f\xf8\xe1\xf4\x38\x8f\x2b\xa5\x7b\x9e\xf7\x0c\xc0\xbf\xfb\xd3\xef\x36\x29\xd7\xa4\x15\xfc\xd7\x36\x76\x42\x43\xd7\xfe\xb0\x91\xdc\xfd\xdb\x98\x9d\x79\xc1\xba\xe4\x84\x63\xae\x2f\xb7\x25\x19\xd7\x08\xe9\xcb\xc8\xbf\x1c\x9d\x10\xf7\xe9\x6d\x99\x04\x49\x43\x3f\x4c\xf6\x41\x5f\x86\xfe\xe5\xe8\x64\xe5\x75\x57\xdc\xa8\x87\x55\xe5\x7d\x3d\x52\xe8\x00\xea\xe9\xa4\x6b\xa6\x29\x06\xd9\x6c\x35\x7a\xc5\x4a\xae\x30\x55\xcd\xbf\x65\x39\x29\x34\x0f\x4d\xcf\xe6\x97\x6c\xc2\x65\x94\x96\x9a\x36\x05\x83\xb2\xc8\xf4\x17\xf3\x82\x75\x09\xd1\x25\xd7\x97\x8f\xcf\x93\xdc\x94\x6f\xd3\x40\x6e\x3f\xb7\xf4\x93\x55\x77\xa7\x93\x9d\x4e\x09\x82\xdd\xbd\x94\x2d\xb9\x76\xbd\xc7\x07\xba\x59\x2f\x78\xf3\x8a\x9c\x08\xdd\x2a\xd6\x55\xe8\xae\x92\x60\x2d\xec\x7b\x77\xba\x42\x93\x7d\xfd\x6a\xcb\xa9\x2a\x3b\xb1\x15\x49\x8e\xb3\xbd\xa1\xca\x80\xd7\x73\xdb\xac\x1d\x08\xf1\x2a\x41\xf4\x81\xb8\x4f\xde\x3e\x9d\x79\x0c\xa5\x91\xeb\x0d\x8b\x9e\x7b\xae\xc3\xc3\xbb\x8c\x69\xd0\xfe\x72\xf0\xef\x6b\x19\x2c\x96\xe7\x25\xbb\x7a\xae\x4b\xfa\x72\x04\xaf\xe5\x31\x20\xfb\x73\x40\x35\xd9\x7b\xb9\x97\x3e\xf2\x39\xaf\x79\x45\x55\x85\x3d\x51\x42\xb3\x99\xf0\x7c\x7b\x42\x7a\x42\xa0\xec\xec\xc5\x1e\xd9\x97\x0a\x28\x2a\xa8\x20\x15\xf3\xfd\x53\x9c\x24\x5d\xa2\x73\xe0\xe0\x33\xd9\x42\xdb\xce\xc7\xc2\x83\x6d\xeb\x9b\xb0\xf4\xf6\x90\xd3\xb9\xe3\x38\xe7\xd9\x71\xa7\x3e\x72\x61\x75\xb0\x09\xf9\xc1\x69\x76\x4e\x37\x47\xae\x2d\x41\x21\xc3\x3b\x3e\x0f\xee\xf8\x9c\xc2\x38\x2b\x01\x99\x7b\x0d\xac\x90\xf5\x4c\xbe\xcf\x84\x23\x52\x83\x45\x73\x6e\xde\xb3\x46\x6e\xcd\x4e\xc4\xe1\x57\x52\x6a\xb8\xb1\x1f\x48\xcd\x8d\x54\x4b\x42\x0d\xa1\x78\x32\x14\x6d\x45\x15\x51\x0c\x93\x63\x32\x98\x6d\x6e\xf4\x15\x63\xed\x42\x76\x19\x38\x31\x86\xa1\x73\x43\x07\xfa\x46\xee\x34\x4e\x8c\xd1\x9d\xd8\xf3\xea\x98\x2b\x2b\xa5\x25\x56\x85\x71\x73\x14\x06\x43\x38\xa5\x4a\x0a\x07\x6d\x64\x47\x74\x59\x38\x73\x6e\x5c\x8b\x5d\x24\xc0\x7e\xed\x9f\x96\x44\x0a\x50\x00\x32\x55\x96\xcf\x74\xf7\xc6\x8f\x30\xb7\xa7\x63\x9c\x6d\xf8\x13\xc1\xec\x96\x6a\xeb\xd2\x35\x10\x12\x9a\x44\x60\x1e\x6d\xf7\xf9\x30\xc5\x11\xf2\x5c\x84\x0c\xc1\x59\x82\x35\x8c\xca\xe0\x1e\x79\x36\x99\x3c\x9b\x80\x2a\xfb\x6c\xf2\xcc\x1b\x62\x55\x28\x87\x75\xda\x5e\x47\x8c\x2f\xa2\x1c\x02\x58\xd0\x97\x1a\x13\x42\xde\x79\xd4\x4f\x68\x67\xb9\x52\x91\x1b\x8a\x6d\xab\x2a\xbc\x03\x34\x5d\xe9\xcb\x9e\x01\x91\x50\x88\xe7\xb6\xd3\xf8\x25\x5d\x61\xef\x9c\x5f\xb9\x6e\x70\x5b\x4b\xb3\xe9\x5e\x31\x0b\xa7\xc6\x33\xe6\x1c\xa8\xef\xbf\xdf\xde\xbb\xa1\xe8\xce\xf4\x66\xee\x1c\x70\xef\x55\xc8\xba\xe6\x86\x2c\xa8\x5e\x04\x2f\x5e\xd7\x19\x67\xd8\xd1\x34\xd4\xf9\x5b\xb5\xda\x30\x35\x4b\x92\x5d\x59\x0e\x73\x4f\xc0\x8a\xb3\x37\x7c\xec\x30\x89\x45\xe7\x8a\x81\x43\x4e\x2f\xa8\x62\xf6\xce\x06\x4e\x9f\x8a\xcf\x98\xe1\xa9\x9b\xa3\x77\xbe\x87\x91\x6f\x0f\x6e\x75\x84\xef\x56\x78\x6b\xe8\x59\xc8\x44\xd9\x48\x9e\xda\xaa\x61\x4c\x1a\x6a\x52\x1a\xa2\x0e\x3d\x45\x03\xd9\x59\x76\x70\x78\x9a\xdf\xc2\xfe\x03\x34\x26\x81\x03\x5d\xff\x95\x88\x61\x8c\x6c\x64\x25\xe7\x03\x73\xf8\x07\x39\xc2\xcc\x62\xdb\x5a\x84\xa5\xc1\xcf\x5a\x37\x35\xc1\x57\x63\x06\xa0\x7d\x6d\x30\x9e\x98\x73\x46\xf9\x96\x3d\xce\x50\x7a\x1e\x76\xe7\xf3\xf7\x27\x87\xc7\x6f\x4e\x26\x75\xf9\x05\x62\x40\x8c\xe9\xb8\x91\x5b\x0b\x43\x3e\x0a\x4b\x7a\x6d\xd9\xd0\xfb\x0c\x92\x98\x95\xa8\x93\xd8\x07\x8c\x01\xb3\xa9\x61\xaa\xe6\x88\x2b\xb5\xab\x26\xf6\x56\xb8\x24\xd5\xba\xb6\x67\xdc\x59\xe2\x46\xce\xc1\x1e\x7e\xfc\xfe\x81\xdc\x28\x36\x06\x20\x09\x6b\x4b\xce\x78\x05\x40\x34\x9d\x9e\x1a\x9d\xcf\x49\x83\xfa\x88\xab\x0f\xe9\xe2\x93\xab\xe5\x6a\xe4\xb5\xb3\x32\x43\x64\x1d\xdb\xbe\x56\x55\x5a\xdd\x13\x60\xf9\x58\xa5\xcc\x45\x81\xe8\x1c\x5e\x58\x2a\xd7\x41\xb0\x51\xfc\x8a\x57\x6c\x6e\x49\x58\x70\x31\xd7\x5d\x07\x22\x97\x8c\x96\x34\x2c\x60\x0c\xb1\x4e\xa7\x09\x49\x3d\x6f\x20\xb5\x2c\x80\xf3\xe3\xd6\x7c\xfb\xee\x82\x08\x86\x24\x24\x6e\xb2\x81\x8e\x27\x4b\x64\xe2\xc9\xbe\xed\x68\xeb\x76\xf4\x91\x9d\x39\x8a\x7d\x42\xca\xa6\xad\x3a\x28\xe0\x84\xb1\x1d\x3c\xec\x29\xd1\xcb\xba\xe2\xe2\x12\x5a\x76\xb8\xe3\xc4\xb5\xbf\x63\xc4\x7e\xe1\x37\xb0\x62\xb4\xca\xaf\x06\x3c\x10\x2b\x93\x1c\x2a\x80\xd9\x81\x18\x3c\x98\x2c\x56\xea\xfd\xd5\x0b\x7b\xf4\x94\x67\x39\xbf\x93\xf3\x3c\x1f\xf5\xd2\xf2\x9a\xce\xb7\x56\x68\x0a\x83\xf7\x0e\x6c\x41\xde\x1d\x9d\xfa\xba\x81\xfd\xd8\x21\x8d\xf7\x4a\x45\xa8\x32\x7c\x46\x0b\x73\x40\x9a\xb6\xaa\x9c\x89\xeb\x95\x3c\x27\x25\x6e\xc8\x3d\x4d\x22\xf2\xa2\x73\xa1\x41\x01\x87\x96\xd5\x95\x1d\xd5\x58\x1b\x1e\x3d\x81\x6d\xe3\x12\x5a\x01\x9a\x4d\x90\xeb\x05\x2f\x16\xe4\xac\xad\xaa\x33\x59\xf1\x62\x19\x1a\xb8\xa3\xb3\xbd\xb4\xc7\x42\xe2\xb9\x70\x58\x5d\xd3\xa5\x7e\x15\xbf\x25\xa1\xf0\x19\xa1\xc6\xb0\xba\x41\x66\xb6\x53\xb3\xda\xa2\xb3\xf3\xb7\x83\xb2\xc8\x2d\xa1\x20\xf2\x28\xaf\x82\x64\x6c\xdd\x07\x89\xe7\xf5\x98\xbc\x65\x57\x4c\xf5\xe9\x13\xf6\x23\x78\xb4\xee\xd3\x04\x4b\x07\xda\x78\xab\xc1\x2b\x82\x3d\xe3\xd7\x96\xfa\x23\xb4\xf3\xd9\xca\x63\xb9\x16\xcf\x0c\x71\x5c\x95\xfa\x22\xa7\xb3\xb7\xd2\x9c\xe1\x33\xfa\xef\x83\x6f\x72\xc3\xa8\xb4\xb2\x36\xc6\xd2\x8f\x6e\xd9\xa1\xe4\xfa\x72\xd0\x2b\x04\x2f\x4e\xbc\x3c\x43\x99\x79\xce\x8c\x65\xe7\x71\xe0\x68\x47\x83\xe5\x6a\xf8\xae\xb4\x2f\xeb\xf6\x97\x62\x0e\x8a\x70\xe4\x98\xbb\x66\x54\x78\xbc\x41\x76\x4d\x14\xab\xa5\x41\x3d\xd7\xd2\xeb\x9c\xdc\x85\xac\x19\xa1\x57\x94\x57\x74\x5a\x41\xe6\xae\x7d\xb8\x7b\x56\xb2\xef\xf0\x10\x66\x00\xf2\xa1\xa4\xdf\x8f\x96\x5b\x02\xcf\x23\xff\x38\x18\xf0\x78\x93\x22\x59\x95\x2c\x2e\x63\x5d\x75\xa6\x64\x8d\xb7\x60\xd5\x79\x09\x95\x50\xb4\x2c\x89\xe6\x73\x01\xc0\x80\xc2\x90\x8a\x1a\x26\x8a\xe5\x84\xb8\xc6\xa2\x1d\x1c\xa2\x62\x46\xf1\x50\xb5\x2e\xa4\xaa\x69\xe5\x27\x79\x4a\x8b\x4b\x39\x9b\xc1\x53\xbb\xfb\x5d\xa2\x96\x13\x56\x38\x27\x54\x4b\x81\x83\x33\xad\xe9\x7c\x80\xb0\x82\x8e\xe1\x56\x81\x72\x85\x15\xb8\x4a\x0e\x2a\xd4\x0b\x4a\x8f\x03\xea\x53\xf7\x95\x87\x6a\xeb\xa0\xd8\x02\xbf\xaa\x56\x18\x6e\xc5\x5f\xaf\x97\x18\x81\x88\xe1\x5a\xe2\xa9\x1d\xca\x35\x66\x03\xf0\x08\x07\xb1\x06\xa5\x58\x57\xd0\x75\x00\xe9\x5b\xcb\x57\x5b\x15\xf5\x50\xb5\x93\x3e\x0b\xd1\x39\x02\xdc\xec\x5f\x9c\x5b\xaa\x1d\xcc\x75\xa7\x5d\xee\x03\xee\x5b\xc7\x14\x7f\xff\xf2\x1f\x93\xab\x38\x0a\x0f\x3f\xb7\x2a\xc7\x81\xa5\xb7\x66\x6a\x8e\x28\x68\x8c\xd4\x54\xf0\x19\xd3\x96\x43\x96\x96\x9d\x5c\x74\x45\xd3\x9a\x91\x6b\xcb\x48\x98\x03\xbb\xf2\x7a\x89\xf2\xf5\x62\x25\x9e\x13\xad\x68\xe7\xda\xd8\x57\xf2\x00\xd6\x02\x00\xfc\x3f\xb0\xa2\x35\xb0\xff\x20\x6b\x90\xec\x0b\x69\x3f\x4b\xcc\x1e\x3a\x6f\xa7\xa8\x3e\xc3\xb0\x2b\xaf\x86\x45\x76\xd0\x50\x3f\xac\xee\x47\x67\x56\xb7\xd3\x06\xe7\x95\xcd\xac\x1e\xf5\x72\xf2\xf5\xd7\xe9\x93\x83\xb5\x5e\x30\xa6\x66\x45\xab\xb8\x59\x5a\xc1\xcb\x3e\x98\xc9\x4c\x43\x07\xfd\x23\x80\x5b\x75\x07\xf3\x82\x82\x03\x1c\x0b\xc3\x70\x43\x76\x9b\xc2\x32\xea\x23\xac\xf4\x68\x82\xde\xb1\x6d\x7d\xdd\x4d\xf2\xcc\x09\x67\xbb\x63\xba\x6d\xa9\x27\xe4\x4c\x6a\x44\x86\x0d\xd8\xea\x03\x4a\x11\x77\x5c\x33\xb2\xd7\x67\xa2\x1b\x11\xb0\xa4\x77\x5b\x3b\x4a\x7d\xaf\xd8\x22\x44\x8e\xb2\xa3\xbf\x82\xb6\x5b\x86\x18\x3a\x5f\x69\xc4\x2f\x55\x6f\x2a\xba\xfe\x9b\x5b\x8c\x77\xbb\x59\xda\xf6\xee\x7f\xef\x5d\x60\xe4\x74\x95\x69\xfb\x75\xf0\x0e\xc1\x3c\x7d\xd1\xbe\x65\x0b\x7a\xc5\x36\x1e\xbd\x8d\x2c\x27\x1b\x4e\x20\xd8\x46\xe9\x03\x5a\xd3\x2e\x14\x96\x07\x58\x6c\xad\x59\x0d\x0d\xe6\x6f\x50\x01\x36\x69\x39\xd3\x25\xa9\xa4\x04\x48\xd5\xb6\x21\x42\x96\xcc\x6e\x00\x48\xe9\xa4\x95\x1e\x91\xf3\x43\x77\x63\x13\x0d\x89\x4d\x29\x40\xb3\x6d\x58\xb1\xe1\x86\x07\xf3\x52\x45\xfd\x58\x51\xad\x49\xaf\x73\xe8\x55\x6a\x4b\x07\x9f\x00\xb5\x51\xe0\x91\x73\xcd\xf0\x2b\x76\xc5\x20\x8d\x65\xc6\xe7\x04\xdb\xc3\xd6\xae\x79\x88\xcf\x1e\x97\x0a\xda\x55\x2a\x5e\xa6\x3b\x86\x56\xb5\x35\xbb\xa4\xd7\x52\x5d\x56\x92\x96\xbe\x4a\xb5\xb2\x0a\x4f\xc5\x2f\x19\x39\x66\x4d\x25\x97\xae\xe3\x87\x28\xc9\xb9\xa1\x86\xcd\xda\xea\x7c\xc0\x52\x0c\xf3\xea\xe8\x42\xf3\xad\x79\x75\xec\xe0\x2b\x5e\x9d\xd3\xf3\xa3\xf3\xd3\x47\x5f\x07\x37\xcc\xcf\xf7\xfc\x0b\x98\x99\xc7\x17\x8b\xe0\xbf\xa6\xa5\x86\x8d\x49\xd5\xa6\xfe\x12\x93\xf8\xce\xa4\x32\xb4\xda\x82\x0e\x5d\x2c\x68\x73\xd8\x9a\xc5\x31\xd7\x85\x15\x26\x79\x54\xe9\xb5\xa7\x46\xf0\xe8\x0c\xe2\x76\xce\x6e\x22\xdc\xef\x17\x77\xdf\xd1\x5f\x0f\xcf\x08\x6d\x2d\x37\x1b\xd7\xa8\x60\x2b\x51\x5e\x12\xcd\xcd\x39\xb6\x65\xca\x3a\x33\xee\x99\x1f\x99\x17\x7f\xd7\x2e\xcd\xca\xae\x55\x29\x6e\x2a\x13\x7c\xaa\x54\x7c\x54\x95\x8a\xa9\xc7\x05\xc9\x61\x46\x70\xc1\x0d\xa7\x46\xaa\x5d\x28\x8e\xea\x11\x13\xf2\x53\x5b\x6d\x64\xed\x44\xc2\xa9\xbf\x03\xe0\x24\x06\x45\x88\xd7\x06\xeb\x92\x5e\x21\x87\x08\x96\xe5\x54\x18\xa6\x66\xb4\x60\x2b\x40\xb8\x23\x70\x87\x23\x4d\xdc\xdf\x93\x4c\xcd\x1f\x5d\x2e\x7b\x03\xe7\xe0\x9f\x5e\xfd\x31\x2a\x85\xfc\x53\x30\x3c\x9c\x6b\x3e\xb6\x31\x04\x2b\x86\x34\xb3\x19\xce\x3d\xbf\xe6\x39\x17\xf8\xaf\x62\x25\xad\x1f\xa7\xf6\x3f\x5b\x5a\xe1\x92\x0c\x59\xee\xe1\xaf\xd9\x63\x85\xad\xef\x92\x3e\x63\xba\x79\x0b\x5c\x88\x40\x2b\x20\x99\xd1\xa5\x24\xdc\x64\x1a\x45\x85\xb6\x2c\x96\xc7\x6d\xf2\xcc\x19\x62\xcf\xc8\xbe\x29\x9a\xe4\x2a\xd5\x0c\x38\x4e\x01\xc3\xc9\xfd\x23\xe9\x31\xb9\x5a\x1b\x54\xad\x88\x8d\x22\x9c\xfa\x0b\x64\xea\xef\x43\x6b\x83\x61\xb3\xb5\xf5\x52\x5a\x90\x53\x5b\x07\x56\x77\x64\x84\x1d\x10\x4f\x35\x9a\x14\xe4\x7b\xae\x0d\xc2\xc5\xe2\xcd\x00\x0f\x87\xf0\xe8\xd6\x5c\x3d\x23\x52\x11\xde\xfc\x17\x2d\x4b\xf5\x0a\x35\x4f\x1f\x1d\x55\xe9\x68\x85\x5c\xbb\xf4\x3c\x00\x2a\xf4\xfe\x8a\x7d\xb3\x6c\x78\x41\xab\x6a\x49\x2e\x8e\xce\x60\x04\x4d\xfe\xf0\xbb\x17\x60\xbf\x7e\xfd\xd5\xef\x5e\x0c\xdc\x42\x4f\xe8\xea\x2b\xd7\xa3\xc8\x66\x7e\x04\x75\xc1\xbb\x86\xdd\xda\x43\x5a\x85\x5e\x94\xd6\x3e\x3c\x47\xa0\x51\xab\x1c\xb9\xe3\x0e\x05\x81\xdd\x5d\x41\xd5\xcb\x69\x45\x3e\x41\x7a\x46\xd7\x13\xa4\xe7\x13\xa4\xe7\x13\xa4\xe7\xcd\x57\xec\xe7\xdc\xf6\x79\x14\xd3\x02\xed\x12\xd7\xf5\x26\x54\x99\xce\x3e\x77\x95\x29\x91\xd5\x52\x05\x6f\x8e\x05\x8c\xe1\x62\x86\xf4\xbf\xe8\xda\x3a\x1c\xbf\x3d\xff\xaf\xef\x0f\xbf\x3d\xf9\x1e\x66\xd5\xa1\xd2\xd8\xed\xcd\xc5\x83\x86\x51\xee\x55\xc4\x0c\x5b\xef\xed\x15\x20\x8b\x95\xd2\x63\x41\xde\xbe\x3e\xbf\x63\xd5\xf1\x16\x62\x60\x5f\x88\x59\xfa\x2a\x3d\xb6\x62\x1c\xfb\x53\xcd\xd4\x76\xfa\xef\xec\x4c\x25\x8f\x0f\xf3\xb2\x0f\x7d\xaf\xbf\xe5\x57\x9c\x9d\xad\x39\xd8\xd3\x98\x91\xfc\xdb\x54\xd4\xda\x25\xc2\x65\x7b\xf4\xb5\xb4\x0f\xc9\x16\xc3\x2c\x62\x95\xab\x6d\xd6\xa0\x56\x26\x2a\xea\xb8\x65\x0f\x12\x54\x2f\x94\x55\xf3\xac\x82\xc7\xb4\xf6\xca\xc6\xbf\xef\x3e\x6e\x36\xb5\xe7\xdf\x96\x42\xb0\x91\x18\xd7\xb0\x1f\xf3\x6d\x7a\x85\xd1\xbd\x04\xbc\xb4\xac\x9b\xd5\xde\xe0\x30\x62\x2f\xf7\x0d\x94\xb2\x86\x16\xa9\xaa\x68\x1a\x57\x74\x33\x31\xf6\x0c\xd2\x7d\x84\x9f\x40\xe3\xf2\x47\xa8\x88\x00\xdd\x5b\x82\x61\x0e\x63\x6f\x5b\x38\x05\x42\x56\x3b\x02\xd2\xbb\xb0\x24\xa1\x3a\x54\xdf\x60\xe5\x4e\x86\xd6\x81\x3b\xc9\xb3\xe4\xb3\xd4\x57\x7e\x7a\x60\x77\xf9\x36\x5d\xe5\xcd\x42\x1a\x29\x76\xa3\xdd\xc1\x26\x5a\xfa\x47\xcb\x19\xdc\x71\x14\x92\x64\xa3\xa3\x09\xf1\x69\x43\xc2\xe7\x4a\xe5\xae\x4b\xe3\xcc\x51\xb4\x1b\x43\x63\x9d\x6d\xa2\xf8\x76\x94\xac\x8d\x2f\xf9\x79\x01\x66\x35\xe5\xe9\xf1\x16\x4e\x91\xc7\x90\x26\xf7\x99\xf6\x46\x7d\xa0\xb4\xb7\xe1\x70\x60\x65\xa6\x66\x37\xf6\x41\x7e\x8d\x4f\x8f\x9d\x23\xc2\x77\xb2\xd1\x4e\x2e\x90\x9b\x05\xd5\x56\x6c\x0a\xa9\xcc\xb5\x54\x5b\xee\x00\xde\xa7\x62\x05\x52\xc9\x7d\xb7\xd6\xf5\xeb\x81\xa4\x79\x9f\xb4\x3b\x35\x9f\x59\x7d\x2f\xbb\x52\x49\x04\xdd\xd0\x79\xe6\x43\x39\xf1\x23\x4c\x0a\x59\x47\x4d\x67\xc8\xf5\x82\xa1\x16\x7a\x74\x7e\xfa\x86\xcf\x91\x40\xff\x2e\x64\xc6\xa8\x69\x15\x1b\xcf\xa9\x49\x23\x88\x6b\x92\x96\xed\xb7\xe5\x53\x08\x79\xe8\xdf\xf9\x24\x3a\x87\x93\x28\xda\x61\xb7\x9d\x48\x9f\xc3\x81\xf4\x78\x0e\xa2\x9d\xb3\x79\x9e\x3a\x3f\xf7\x2e\x2f\x3c\xb2\xac\x8f\x7f\x98\x0b\x74\x5a\xde\xec\x54\x05\x1a\x8e\x1d\x77\xdf\x56\x54\x03\x25\xff\x1b\xce\x9b\xc1\x5a\x41\x78\x12\xe6\xf7\xc1\x31\x49\xab\xca\xae\xac\x14\x2c\x54\xe8\xe9\xae\xde\x14\x0b\x2e\x6b\xda\xb8\xda\xd3\x52\x5e\x8b\x6b\xaa\x4a\x72\x78\x76\xfa\xf0\xa7\xce\x60\xec\x7a\xdc\x47\x6f\x64\xb9\x75\xf9\x1f\x91\x02\x5a\x05\x20\x8a\xd8\x3f\xa6\xdc\x68\x84\x79\x04\xd0\x45\x13\x07\x59\xac\x7a\x15\x92\xfe\x01\xd4\x63\x1a\x84\x43\x06\xa3\x45\x10\x59\x18\x5a\xb9\x4c\xa5\x29\x33\xd7\x8c\x09\xf2\xe2\xc5\x0b\xcc\xaf\x78\xf1\xfb\xdf\xff\x1e\x8a\xb9\x49\xc9\x0a\x5e\xaf\xdf\x08\x77\xfd\xf6\xe5\xcb\x74\x52\xfe\x76\xf8\xe6\x7b\x42\x0b\xf0\x91\x91\xa9\x34\x0b\x47\x11\xb0\x5e\x3c\xa8\x1e\x91\xff\x73\xfe\xee\xad\xd7\x43\xf4\xca\xb7\xc0\xd9\x61\x3a\x07\xf8\x80\x1c\x50\x0c\x07\xd8\x9f\x2e\x03\x82\x9a\x45\x80\x3c\xa1\x90\x89\x16\x41\xeb\x38\x79\x39\xa0\xa0\x0a\xba\xb2\xf3\xf9\x02\x96\x85\x0b\xd8\x85\x15\x2f\x5c\xe7\x01\xcc\x8b\xc1\x4a\x69\x8f\xef\x89\x38\x26\x5e\x85\x48\x1e\xd9\x4e\xd9\x08\x6b\x9b\x1d\x6a\xca\x28\xf8\x48\x14\xd3\x6d\x65\xa0\x33\xd5\x94\x39\x22\x3a\x8e\xd5\x2c\x99\x03\x77\x23\x85\xdd\x89\xbe\x6d\xcb\x05\x2f\x81\x9d\xf9\x5a\x71\xab\x94\xcd\x02\x20\x35\x0a\x70\x08\xb8\x92\x13\x5a\x2c\x08\x13\x06\x7a\x38\x20\xeb\xd9\xdb\x93\x87\x5e\x50\x51\x5a\x99\x02\x8d\xf4\x81\x8c\x47\x9b\x7f\x9e\x2f\x93\xf5\x2c\xcc\x78\x0f\x4e\xab\x3b\x49\x69\x25\xc5\x3c\xde\x98\x9d\x62\x1d\xc1\x09\x0d\x90\x41\x50\xd8\x08\xe0\xc2\x76\x61\x30\xf8\xaa\x1d\xe0\x91\x46\xac\xad\x29\x1b\xb2\xff\xb2\xe4\x2f\xe7\xc9\x60\x26\xa4\x40\x8c\xeb\x0b\xd5\x6a\xf3\x6d\x6b\x19\x72\xc8\xd3\xf2\xe6\x34\x13\x72\xb4\x46\x1d\x26\x04\xbb\x1c\x2b\x88\xa9\x16\x05\xd3\xb8\x79\x7f\x41\x04\x12\xd3\xdd\xfd\x0b\x2e\xdb\x40\x2a\xe4\x6c\x13\x21\x1e\xf5\x8d\x0b\x7b\x92\xd3\xd6\xc8\x71\xdb\x94\x34\x20\x60\x27\x22\x07\x76\xd7\x61\xd5\x2c\xe8\x88\xcc\x69\x64\x34\xae\xd3\x11\x6d\x18\xe7\xdd\x80\x5f\x0c\x1e\xfd\x96\x37\xb6\x47\x92\x4b\x48\x85\x9d\x50\x85\xf3\x58\xd0\x9a\x01\x56\x0f\x92\x3b\x90\x84\x42\xd6\x53\x2e\x1c\x08\xde\x0c\x50\x02\x99\xc2\x28\x24\x20\xe0\x91\x8a\x4e\x59\xe5\x08\x90\x6a\xf0\x2b\x7f\xe7\x91\x95\x98\xb2\xe7\x9b\x26\x74\x3e\x57\x4c\x6b\x7e\xc5\x1c\xdc\x20\xff\x67\xa0\x06\x5a\x5b\x9d\xbc\xf1\x50\x8c\x9a\x58\xe3\xd0\xb0\xf4\xe6\x3e\x78\x85\xb6\x59\x96\xbd\x3b\x1f\xc2\x84\x90\x13\x2d\x0d\x53\xbc\x80\x51\xdd\x52\x6b\xa2\xdb\x62\x41\xa8\xc6\xea\xc3\x31\x60\x2e\x0e\x9f\xf5\x0e\x61\x05\x41\x1c\x17\x8c\x96\x1e\x75\xce\x1a\x55\x4d\xc3\xca\x09\x21\x47\x56\xfc\xcc\x78\x41\x0d\x62\x8a\x91\x92\x95\x6d\x53\x71\xf4\x11\x0e\x24\xe3\x62\xc1\x88\x54\x25\x03\x70\x49\x39\x83\xe4\xfb\x30\x58\xa4\x1b\x02\xd8\x3c\xb7\xe3\x4f\xb9\x51\x54\x2d\x51\x83\x72\x6b\x39\x90\x08\x7b\xfa\x14\x80\x63\x07\x63\x01\x3d\x00\x7a\x43\xd2\xbb\xc9\xf8\x2b\xcb\x21\x40\x06\xfb\x06\xbb\x6b\x40\xfe\xa5\xbf\xf2\x9c\x49\xf6\x82\xad\x7d\xee\x76\xf6\xd0\x87\xe5\x3e\x96\xec\x85\xb4\x81\x39\xbf\x2e\x2a\x03\x16\xa8\x29\x16\x4e\x53\xec\x8b\x2a\x42\xd0\x7f\x44\x87\x55\xc7\xe0\xe5\x50\x15\xb9\x17\x91\xa1\x9e\x9e\x99\x89\x35\x37\x4d\x4b\xab\x6a\x39\x66\x1f\xec\x61\x6f\x85\x19\x68\x4f\xd0\x2c\x0c\x0a\xf1\x5b\xa1\x99\x19\x65\x20\x04\x84\x50\xa3\x10\xcd\x56\x93\x3d\x7c\x7f\x21\xa1\x35\xc2\x1e\x0e\x66\x4d\xec\x69\x6b\xb0\x48\x67\xb4\xf9\x27\x39\xe6\xe4\x8a\xa9\xa5\x1b\x77\xf0\xe3\xb2\x6d\x55\x92\x75\x8f\x10\x90\x50\xa6\x58\x9c\x7c\x68\x14\x42\xb5\x64\x79\xe6\xca\x76\x59\x1d\x02\x11\xfd\xbd\xa5\xd4\x67\x6c\x2f\x8c\xe0\x04\xc1\x22\x96\xf8\x13\x38\x25\x0e\xdf\x1e\x0f\x3f\x1e\xf0\x1a\x6e\xf8\xf4\xaf\x81\x66\x50\xff\xca\x2f\x73\xf0\x3a\xbc\x65\xce\x5d\xb7\x05\xff\x0d\x36\xfc\x44\x8c\x35\x1d\x3c\x39\x94\x5c\x32\x77\x4c\x52\xe1\x42\x10\xee\xe6\x6c\x44\x2a\x06\x50\x8e\x88\x58\xc9\x96\x30\x18\x8e\x9f\x67\xe5\x33\x6f\x4a\xbc\x72\x9d\xa4\xdd\x35\xb6\x2f\x9f\xf1\x69\x7e\xb1\x32\x3d\x32\xaf\x2c\xc2\xeb\x92\x25\x07\x72\x36\x5d\xbd\x5d\x64\x39\xc9\x7b\x6a\x60\x0f\xd8\x0f\x02\x06\x52\x60\x7b\x0a\x9d\x41\x35\x31\x32\x17\xb3\x91\x7c\xd5\x91\xfd\xcb\x2f\xe8\xbd\x4d\x59\x46\xc1\x43\x22\x7a\xfb\xb9\x0a\x97\x6c\xf9\x4c\xe3\x9e\xb7\x27\xc4\x82\x37\x60\x9a\xc3\x61\x2f\x67\x99\x37\x3e\x5e\x3f\x02\xc6\xb9\x27\x07\x4f\x96\x53\x31\x22\x6f\xa5\xb1\xff\x39\xf9\xc0\xb5\xb3\x61\x8e\x25\xd3\x6f\xa5\x81\x4f\x76\x9e\x1f\x70\xaa\x1e\x0b\x37\x38\xef\x3f\x87\xc2\x38\x38\x86\xc1\x50\x87\x29\xf1\xab\xee\x81\x9d\x03\xe7\x70\x4d\x4e\xa1\xbb\x2f\x2e\x55\x56\x82\xa0\x2a\xd3\x83\x5c\x5b\x72\xbc\xbf\x0e\x20\xda\x5d\xf5\xf8\x3a\x3d\x8e\x5b\xa4\xea\x31\xcb\x03\x91\xe6\xc8\x82\x28\x04\x7e\x03\xfd\x4f\x9a\x8a\x16\xac\xf4\xed\x15\xa8\x9d\x55\x6a\xd8\x3c\xb1\xfe\xf9\xa6\xab\x66\x6a\x0e\x01\x96\x62\x40\xcb\xa5\xf5\x2b\xb7\x62\x86\x57\x56\xf5\x0c\xaf\x7b\xd9\xc4\xf7\x82\xa6\xf2\xe0\x43\x80\xde\xff\xbd\x3d\x66\xef\xc3\xaa\xc8\x26\x89\x22\x32\x51\xfb\xad\x69\x63\xa5\xd0\xff\xb3\x4a\x2e\x6c\xb8\xff\x21\x0d\xe5\x4a\x4f\xc8\xa1\x6f\x48\x11\x7f\xe7\xfc\x48\xd1\x63\xb2\x11\xd6\x40\x3d\xe6\xaf\x2d\xbf\xa2\x95\x03\x4f\xa6\x82\x30\x6c\xee\x61\x69\x5c\x35\xad\x46\xe4\x7a\x21\x35\x6a\xcc\x01\x7a\x63\xef\x92\x2d\xf7\x46\x19\xfc\xa9\xfe\x8a\x25\xdf\xde\xa9\xd8\xeb\x62\x8e\x3d\xf9\x14\xec\x06\xa8\x3d\xdc\x83\xef\xf6\x1e\xca\xa6\xcb\xa8\xd7\xd3\xb2\xe4\x88\x72\x7d\x96\x5d\xdd\xcd\x2a\x3e\xf2\xa3\x5e\x74\xd7\x50\xac\x1a\xbc\xee\xcf\x8d\xe6\x77\xe6\x86\xb0\xc3\x74\xe9\x1b\xcc\x38\x97\xd5\xba\x47\x2b\x03\x21\xe0\x13\x8b\xfc\x67\x76\x4b\xf4\x9c\x90\xb9\xdc\x48\x59\x98\xc5\xe3\xb6\xef\xe2\x92\x5a\xfd\x4a\xb5\x6c\x44\x4a\x29\x9e\x19\x17\x42\x88\xdb\x43\xad\xb6\x99\x28\x37\xac\xfa\xbe\x3e\xc8\x40\x0a\x55\x0c\xba\x61\xf8\xd6\x58\xce\xdf\x89\x0d\xa4\x20\x56\x65\x7c\xbe\xb0\xfd\x73\x13\x21\x43\x01\x8c\x1c\x21\x0e\xc6\x48\x48\x38\x05\xa0\x55\x6e\x4c\x4c\xc7\x78\x11\x49\xfd\xf8\x57\x06\x2a\x6e\x63\x6f\x38\x3b\x3b\xb0\x25\x74\xdd\xfe\x93\x29\x99\x61\xdc\x0d\x0e\xf2\x5c\xbb\x69\x48\x5e\x63\x77\x0d\x01\x71\xe8\xae\xde\x56\x7a\x0f\xc6\xf0\x95\x4b\x5e\x82\xde\x67\x11\x26\xb4\x92\xc8\x08\x90\x51\x0a\x5f\x4c\x61\x5e\x76\x4a\xc8\x74\xec\xb2\x8b\x62\xe6\x8e\x01\x98\x28\x7a\x9c\x43\x4f\xf9\x48\x54\xe5\x62\xc1\xba\xc8\xb0\x9c\x01\x95\x3e\x50\x7e\x3f\x1b\x2a\xa0\x14\xb7\x02\x01\x7b\x31\x87\x2f\x5f\x40\x36\x1b\x6b\x61\x8e\xeb\x1b\xda\x64\xcc\x34\x09\xcf\x84\x9a\x60\x55\xa3\xd0\xa4\x53\xd9\x1a\x0f\xd5\xec\xbe\x2f\xa9\xa1\xd0\x9f\x0a\xf3\x26\x76\x23\x84\x9b\xcf\x0f\x9b\xc9\x44\xce\xbf\x5d\x31\x03\xba\x5f\x71\x30\x22\x8c\x16\x0b\x6b\xed\x8c\x31\xb5\xd5\xda\x69\xde\x20\x3b\xb6\x0b\x85\x46\x90\x5c\x55\x18\x72\x6c\xa1\xc0\x11\x7e\xe3\x44\xd9\xda\x3e\x09\xc3\x97\x5e\x69\x57\xd0\xe1\xcc\x33\xd1\x15\xc5\x67\xa0\xc4\x87\x47\x7c\x53\x4f\xe7\xe0\x86\x19\x01\x6f\x55\x34\x5f\x3e\x47\x91\x95\xf6\x67\x61\xd3\x67\xa0\x62\xc3\xdb\x77\x78\xec\xf6\x0c\x73\x19\xe9\xad\x58\x1b\xdf\x2a\x35\x99\x68\xc0\x6e\x69\xf6\xa5\xa9\x77\xf6\x47\xa8\xf0\xd0\x11\x15\x2a\x83\xbb\xa6\x64\x8e\x5b\xc2\x72\xe6\x70\xda\x45\x4b\xaf\x59\x68\x68\xca\x94\x92\xca\xbe\x3f\xd3\x9a\x70\x58\xa7\x9a\xaa\x4b\x56\x06\x6d\x7c\x42\xce\xec\x44\x79\xcf\x5e\x06\x4a\x94\xd7\x22\x7c\xbb\x54\xfb\xea\xce\x30\x07\x32\x9f\x4d\x26\xcf\x5c\x27\x77\x85\x0a\x36\x9e\x43\xf6\xf3\x5c\x12\x3f\x8f\x1b\x2f\x9b\xf3\xae\x27\x9b\xde\xd0\x46\xa3\x73\xd4\xaa\xd1\x10\x0e\x92\x84\xe2\x8c\xb8\x2c\x21\x3a\x18\x6c\xa2\xbb\x32\x3b\x27\xf2\x06\x1c\xf3\x05\x1b\x33\xa4\x02\xe1\x95\x3b\xc0\x98\x31\xb8\x78\x53\x60\xd1\xf1\x90\x93\x87\x79\xa3\xd5\x19\xfd\xcc\xf5\x80\xa2\x9a\xd5\xeb\xbe\x42\x44\x50\xae\xc0\x35\x79\xe7\xbd\x15\x9f\x56\x72\x63\x10\x79\x38\x87\x35\xe4\xaf\x1d\xaa\xb9\x59\xbd\x76\xad\x06\x67\xf5\x3a\x9d\x61\xa7\xe1\xbe\x12\xe2\x8e\xc7\xb8\xac\x2a\x18\x20\x83\x7a\x4c\xae\x5e\xdb\x2b\xce\x59\xbd\xb6\x52\xac\xb3\x7a\xe5\x28\xde\x59\xbd\x86\x17\xf3\xac\x5e\x79\xfc\x29\x78\xdd\x97\x70\x02\x15\x81\xfb\x6e\xc0\xb1\xb3\xc6\x99\x1b\xa0\xf0\x83\x2b\xac\x89\x0e\x86\x8c\x32\xc9\xa9\x73\x28\x96\xe8\x54\xcb\xaa\x35\x48\x42\xfe\x41\x62\x9d\x11\x5e\xd2\x47\xa1\xf2\x28\x8a\xab\xc3\x45\x9a\x28\x58\x12\xa8\x9e\xe5\x1c\xeb\xfe\x22\x2f\xb9\x63\xa9\xbb\x1a\x7a\xc9\xdf\x32\x00\xaf\xdd\x68\x1c\x80\xd7\x4e\xb4\x0f\xf0\xa4\xe4\x6f\x22\x80\xd7\x2e\xe1\x7c\xf7\xaf\xac\x9b\x74\x78\x5b\x01\x7f\xdd\x53\xf4\x2c\x34\x53\x46\x5d\x69\x19\xba\x6a\xf6\x1c\x14\x00\xdf\x6f\x34\xfa\x4f\x7c\x0e\x10\xf6\xe1\x1c\xee\xd7\xca\x17\x14\xb9\xaf\x60\xb4\x47\x34\x38\x3c\x3b\xcd\xe8\xff\x8d\x9e\x7a\x83\x07\x38\xbe\xe3\xc9\x07\xfc\x29\x57\x6f\x82\x4f\xd1\x7d\x1b\x67\xfe\x1f\x77\x33\xea\x70\x9e\xb2\xa8\xdb\xbb\xef\x73\x5a\x7b\xf1\xd7\x56\x53\x8c\x7b\xce\x45\x1c\x68\xa4\x83\x90\xe8\x74\x4a\xa7\x8b\x21\x16\xaa\xaf\xf4\x1b\x5e\xa6\x4a\x76\xdf\x3f\xb5\xa3\x5e\x25\x98\xfd\x01\xdd\xb1\x56\xaf\x1e\xb7\x3c\x7b\xef\x27\xd1\x85\x2c\x31\x98\x10\xc5\x35\x1a\x59\xbe\xc2\x24\x2b\x2a\x84\x34\x98\x43\x3d\xc2\xf0\xbc\x1e\xb9\x44\x85\x08\x50\x57\x94\xa4\xe5\x25\x56\x63\x06\x64\xcc\x67\xff\x5e\x65\x15\x30\x81\x67\x79\xd8\x89\xdc\x53\x25\x04\x6d\xf8\x8f\x4c\x0d\xe9\xdd\xbd\xe9\xea\x31\x97\x7b\xbe\xe7\x24\x5d\x2c\x58\x4d\xe1\x9f\xaf\xfd\x04\x59\xa1\xed\x6a\x93\x21\x58\xc2\x54\x6d\x15\xdf\x51\x0f\xe5\x6a\xef\xea\x65\x86\x3a\xb9\xee\xba\x97\xb4\xda\xb0\xe6\xf7\x36\x9d\x67\x3d\xf3\xdf\x6e\x51\xf0\x50\x42\xa2\x81\x47\xb7\x0e\xe1\x28\xab\x49\x5c\xe1\xfc\xef\xf8\xd4\xdd\x67\x62\x21\x5e\x8f\xc1\x1b\x9d\xea\x85\x1e\x05\x2d\xbd\xef\x3d\xce\x46\xd8\x93\x17\xfa\xe3\xd7\x93\x17\xda\x5d\x4f\x5e\xe8\x4f\xbe\xee\xcd\x0b\x1d\xa9\x74\xfe\x84\xdd\xe0\x46\x8e\x3b\xc5\x79\x5f\x72\xd7\x45\x7e\x82\x31\x29\xef\x00\xf6\xde\x5f\xa9\xfa\xe1\xfd\x67\x93\xc9\x33\x0c\xf0\x4f\x42\x10\xab\x35\xb3\xf1\x1f\x08\x13\x85\x2c\xed\x73\x2e\xe0\xf9\x4a\x1b\x30\x77\x3a\x8f\x5e\x4c\x4b\xed\xc7\x8a\x53\x04\xe0\xd9\x79\xf5\xc6\x8c\xc7\x96\x47\x47\x7c\x7d\x9f\xca\x79\xc6\xe3\xa5\x53\xee\x3d\xe5\x7e\x29\xdc\x82\x32\xe5\xb4\xfc\x0e\xf7\xb1\xe2\x35\x77\x55\x8a\x56\x9e\x32\x6d\x72\x15\x9f\x10\xb2\x8f\x0f\x9f\x14\x4d\x3b\x72\x03\x4d\x6a\x56\x4b\xb5\x1c\x85\xc1\xec\x97\xbd\xd1\xdd\x1d\x07\x60\x5c\x14\xad\x52\x4c\x98\x6a\x39\x0c\x80\x7f\xd3\xf5\x48\xac\x0c\xbf\x52\x3b\x6c\x64\x04\xe6\xca\x93\xa7\xdb\x5d\x7d\x89\x77\xe4\x87\xc1\x70\x46\x98\x6d\x38\xef\x5d\x2b\x95\x51\xe7\x01\xb5\x9f\x32\x71\x45\xae\xa8\xd2\xb9\x24\x0c\xb9\x2f\xbb\xa2\xe4\x57\x5c\xdf\x63\x09\xf6\xb9\x53\x5a\x30\xd6\x28\x5b\xd3\xb4\xc6\x1d\x77\x5e\x44\xb0\x0f\x8d\xb4\xaa\x68\x10\x0d\x2b\xe6\xd9\xcb\xa1\x2e\xef\xf8\x6a\xa8\x31\x4c\x89\x57\xe4\xff\xee\xff\xfc\x9b\x7f\x8d\x0f\xfe\xbc\xbf\xff\xf7\x17\xe3\xff\xf8\xc7\x6f\xf6\x7f\x9e\xc0\x3f\xbe\x3c\xf8\xf3\xc1\xbf\xfc\x1f\xbf\x39\x38\xd8\xdf\xff\xfb\x77\x6f\xfe\x72\x71\x76\xf2\x0f\x7e\xf0\xaf\xbf\x8b\xb6\xbe\xc4\xbf\xfe\xb5\xff\x77\x76\xf2\x8f\x4f\x7c\xc8\xc1\xc1\x9f\xff\x57\xc6\x97\xa0\x62\xf9\x2e\xdb\x99\x80\xd7\xf8\x5e\xf4\x9a\xfe\xb3\xef\xb7\xd2\x94\x0b\x33\x96\x6a\x8c\x83\xbc\x82\x32\x9c\x6c\x43\x79\xd6\xbc\x3f\x19\xd3\x69\x55\xe1\x04\x0d\xe6\xf7\x8e\x0b\x91\xfb\xb5\xb0\xef\x2d\x3c\xdd\xc8\x32\x02\x71\xdb\x25\xe4\x47\x07\x6b\xa8\x03\xb6\xa2\x02\xc7\xa8\x98\x5b\xfd\x19\x00\xc3\x69\xe5\x6a\x66\xc8\x7e\xa3\xf8\x15\x35\x1d\xd0\x4c\x84\x15\x37\x90\x8c\x62\x41\xb9\x38\xe8\x20\x46\x1a\x59\x82\x79\xd5\x6a\x16\x7a\x72\x5b\x95\xef\xe2\xfb\x73\x52\x54\x1c\xca\x7a\x55\x68\xd3\x38\x70\x70\x8f\x47\x38\x67\x82\x29\x04\xd9\x23\xab\xaf\xda\x6a\x06\xc9\xc8\xb0\x51\x44\x99\xd8\x62\xb0\xbb\xce\x7a\x1c\xf1\x1e\xd5\x42\xdf\x78\x03\x6b\xe4\xb0\x92\x06\x20\xcc\x5c\x53\x30\x57\x5b\x43\x9b\x46\xc9\x2b\x96\x23\x2f\xde\xe9\xa3\xf0\x8a\x5c\x6b\x28\x4a\x8e\x97\x15\x17\x66\x14\xa6\x08\xea\xa8\x7a\x68\x43\x43\x17\x7e\x75\x2c\x72\x13\x2e\xe3\x85\xfb\xb0\x94\x4c\x47\x26\x56\x2b\x0c\xaf\xf2\x11\xa1\xc9\x82\x5e\x31\x32\x65\x4c\xe0\x84\xa0\xe6\x05\xf5\x13\xfd\x5d\x1c\x65\xf2\x0f\xc2\xd0\xf7\x97\x93\xc4\x5c\x40\xd4\x1a\x10\x56\x73\x31\xb6\xf3\xd5\xcc\xed\xec\xaa\x25\xc4\xc3\x24\x81\x8d\x8e\x7c\x15\x2f\x82\xdb\x80\x86\xd7\x96\x96\x12\x6b\x9a\x06\xd2\xe1\x40\x55\x1d\xfb\xfa\xee\x84\x6c\xf3\x26\x98\x9c\x1b\x6a\x5a\x3d\xf9\xd6\xd2\xfb\x9e\xcd\x14\xd3\x8b\xc3\xa1\xc6\x8b\x7d\x1d\x6d\x68\xdd\x64\x9b\x53\x2b\x9d\xb0\xaa\x30\xd4\x54\xa3\x13\x33\x4c\x9a\x7f\xed\x4e\x90\x3a\x24\xd9\xe1\xd1\x14\xf0\x99\x8f\x50\x04\x36\xd4\xca\x2c\xdc\x2b\x1b\x46\xbf\x64\x4b\xf0\x9d\x64\xdd\xaa\x47\x76\xa7\xc2\x63\x11\xae\x79\xf0\xac\x5e\xf4\xe6\xc9\x1f\x38\x08\xb2\xd6\x4d\xae\xdd\x1c\x80\xca\x0a\x3a\xbd\x93\x09\xe8\x92\x39\x3b\x79\x33\x90\x04\x87\x38\xee\xba\x68\x46\xe2\x7f\xdf\x8e\xfa\xdd\xd1\xf9\x17\x7f\x70\x03\x1f\xc4\x9e\xc0\xda\x45\x98\xf3\x10\xc0\x1d\xc2\xeb\xea\xae\x44\xd1\xe8\x04\x52\x7f\x3b\xed\x9b\x65\xc3\x0b\x5a\x55\xcb\xa1\x25\x39\xf8\x40\x57\x6c\xa4\x98\x69\x15\x38\xc7\xb8\xda\x44\x8a\x20\x15\xa3\xb3\x31\x68\x0c\xd2\x20\x64\xeb\xc1\x60\x3e\x38\x83\x04\xb9\x48\x44\xac\x33\x05\xae\xc1\xc8\xf2\x45\xc1\xc8\x52\xb6\x0e\x87\xac\xc0\x3c\x80\x42\x96\x83\x95\x11\x2a\xa0\x47\x8d\x3d\xef\x51\xf5\xb3\xb3\x8b\x65\xe4\x4b\xd9\x82\x52\x12\x6d\xab\x8d\x1b\x63\xe8\x5a\xac\xbd\x17\x78\x16\x6b\x7a\xc9\x88\xb9\x96\xfd\x6d\x0f\xc4\x06\x00\x28\xcd\x48\x21\xb9\x28\xf8\xe0\x79\xc0\x44\xbd\xde\xe2\x2b\x17\x36\x1f\xb9\xc2\xac\x46\x6a\xcd\xa7\x15\x8b\x34\xb7\x15\xc5\xc9\x72\x49\x46\x1d\xc1\xce\x3f\xac\x4d\x57\xa4\xa5\x14\xd3\x8d\x14\x10\x5f\x82\x73\x1a\x1c\xf2\x13\x42\xfe\xb6\x32\x87\x83\xa7\xa3\xaa\x88\x60\x18\xc8\x2a\x16\xac\xb8\x74\xfd\xd8\xb8\x26\x85\x14\x08\x7e\x32\x72\x6e\xbe\x31\x10\x09\xca\x89\x9d\x96\x65\x86\xe4\xc6\x42\x0a\xd7\xcd\x2f\x8b\xb8\x8d\x95\x4c\xf0\x6e\x29\x59\x69\x52\x2c\xa4\xd4\x4e\xc3\xeb\xbb\x4e\xe2\x55\xe0\x43\xcf\x63\xd4\x35\xff\x37\xbc\x53\x5b\x99\x58\x9e\xf1\xba\xc1\x94\x69\x58\xb3\x67\x9a\x94\xb2\x68\xc3\xdf\x76\xee\x2b\x46\x95\x20\x0b\x79\x4d\xcc\x50\xd4\x04\xbb\x95\x57\x5e\xce\xd5\x1c\xea\xc1\x48\x7a\x3b\x08\x3c\x7d\xc9\x96\x17\xa9\x3d\x02\xe3\xe7\x74\x88\x05\x3b\x92\x8a\xb7\x49\x04\xef\x62\x2e\xf8\x4f\x01\x87\x62\xfd\x48\x05\x01\x6a\x65\x2a\x84\xba\x5c\x09\xc1\x8a\x8d\x31\x78\xe7\x13\xc8\x63\xb6\x16\x5f\x27\x17\x35\xd1\x0b\xd9\x56\x60\xe4\x6e\xd4\x56\x27\x84\xfc\xb4\x60\xc2\x1d\xcb\xee\xe8\xcb\x91\xaa\x7d\xd3\xe1\xb9\x7e\xfc\x59\xb9\xab\x3b\xc1\x1b\x8e\x9b\x3c\x95\x98\xfe\xa0\xea\x5b\x42\x8a\x45\x32\x77\x44\xa6\xac\xa0\x76\x86\x56\x4f\x3e\x89\x07\x52\x9e\x22\x75\x6c\x7f\x55\xf3\x72\xec\x8f\xda\x9d\xc1\x93\xb0\xd7\x26\xee\xd8\xf1\x7d\xb6\xa6\x40\x3e\xd8\x3e\xfb\x44\xa3\xa6\x0f\x1e\x5d\xb7\x95\xe1\x4d\x85\x4d\x2f\x00\xd3\x29\x4b\x76\x47\xcf\x52\x72\x58\x51\x40\xc9\xd9\xfb\xd3\x1f\x0f\x2f\x4e\xc8\x77\x27\x7f\xc3\x8f\x47\x71\xde\x2c\xf5\x96\x8f\x53\xeb\x32\x50\x72\xc9\x96\xd9\x66\xb7\x33\xbf\x70\xa6\x60\xcf\x1e\x9d\xbc\xbf\x38\x7d\x7d\x7a\x64\xdf\x0a\x3f\x1e\xad\xa6\x02\xa3\x21\x95\x81\x88\x75\x29\x1e\x10\x88\xbc\x79\x06\x72\x05\x31\xc0\x97\x08\xc3\x5f\xb3\x92\x5b\x45\x63\xb8\xb9\x64\xaf\x1f\x74\xdf\x5b\xdb\x6d\x4c\x02\xed\x8a\x41\x94\x9e\xc9\xf2\x99\x5e\xb3\x93\xd0\x9e\xf0\xdc\x98\x43\x8e\x82\xb5\xe4\xe5\x21\x35\xd6\x8a\x54\x9c\x5d\xa1\x5b\x31\xc8\xd2\x4d\x0e\x64\x9c\xbe\x60\x64\xe5\xc9\x5e\xfe\x6f\x97\x1a\x54\xa3\xdf\xb6\xef\x2a\xd9\x68\x3a\xf6\xb4\xfc\x1c\x33\x12\x40\x11\xab\xe5\xea\xd9\xb5\x76\xe2\x5c\x53\xed\x6d\x7c\xe7\x05\x85\xcd\x32\x94\x86\x8c\xf2\xdf\x9d\xfd\xbb\x2d\xf2\x81\xbb\x9e\x94\xa9\x27\x65\x6a\xc7\x95\x29\x67\x8d\xed\xe2\x66\xb2\x87\x2b\x14\x6b\xca\x99\x25\x13\xf0\xa2\x7a\xd1\x04\x1f\x2b\x0b\x2d\xe9\x1b\x59\x66\xd9\x4f\x88\x37\x1f\x00\x72\x19\xd9\x7b\x7f\x7e\xf8\xf5\x8b\xdf\x7f\xb5\x37\x82\x7f\x7e\xf3\xe2\x3f\x7e\x67\xff\x79\x72\x74\x7c\x7e\x78\xf6\xd5\x6f\xa3\x3f\xbe\xfe\xc3\x37\x7b\x39\x60\x89\xdc\xe3\x7e\xfb\xd5\x4b\x07\xd9\xbb\x77\x72\xfc\xd5\x6f\x7f\xfb\xf2\x3f\xb2\xb5\xb8\xc9\xc2\x3e\x35\xfd\x70\xf2\xa1\xe1\xd8\x7a\xff\x9c\x15\x52\x94\x3b\x89\x48\xb6\x89\x4e\xef\x67\xaf\xe9\x07\x5e\xb7\x35\xa9\xf8\x8c\x41\xc8\x09\x92\xc3\x8d\x71\x61\xb7\x3c\x62\x20\x92\x43\x59\x58\x34\x84\x80\x64\x83\xc9\x46\xdc\xf5\x7c\x21\x57\x4c\x4d\xa9\xe1\x75\x87\xed\xb5\x31\xc4\xa5\x87\x3b\xd0\xec\xd5\xc5\xab\x83\x1f\xb2\x6b\xa4\x9a\xe5\x4d\x4f\x67\x44\xe2\x72\x8c\xc8\x65\x3b\x65\x63\xda\x70\x0c\xba\xa3\x14\xd0\xcc\xb8\xa0\xf8\x1f\x7e\xf7\xcd\x8b\x17\xfb\x5f\x7d\x43\x16\xb2\x55\xfa\x60\xb2\x72\x7b\x06\x5a\x5c\x54\x02\x54\x3a\x27\x1e\xf4\x42\x2a\x03\x75\xbf\x54\x90\xaf\x7f\xf7\xe2\x05\xd9\x7f\x09\x04\x1c\xb8\xd8\x90\x67\x2f\x28\x4f\xa7\xd3\x2c\x3a\x2e\xae\x34\xd7\xe4\xf7\x7f\xf8\xdd\x57\xdf\xd8\x31\xff\xe3\x25\x29\xe9\x32\x93\x3a\x7f\x71\x93\x27\xd4\x6d\x19\x6b\x61\x30\x38\x28\x41\x53\x5c\xf1\xcf\xbb\xda\xfa\x1c\xc7\x78\xd8\x92\x5f\xba\x69\xfe\x12\xe7\xf9\xcd\x86\xed\x8c\x40\x03\x42\xae\xaf\x48\x06\x42\xb4\x13\x19\xbd\xb5\x45\x9f\xbb\x36\x8a\x72\x84\xf2\x63\x62\x26\x55\x81\xd1\xb1\x3e\xef\xe5\x30\x9f\x7f\xe9\x15\xfa\xff\xd2\x0f\x95\x09\x66\x37\x04\x2e\xc7\x5a\xfb\x44\x28\xe4\xc5\x99\xcc\xb1\x28\x52\xcc\xfd\xf4\xfa\xcd\x96\xeb\x50\xca\x95\x8e\x97\xb3\xc0\xe0\xde\xa0\x71\x9d\x0c\x7f\xa6\x83\x14\x2d\xc9\xd1\xf9\xfb\x0e\xde\x95\x96\xa5\x62\x5a\x7b\x53\x2c\x20\xdb\xee\x8c\x0a\xa0\x59\xa1\x98\xc9\x98\x4b\x86\x0f\xbc\xa1\xac\xdf\x7d\xf9\x54\xd1\xff\x29\xd7\xe7\x8f\xea\x7a\x8e\xec\xf0\x04\xe9\x4a\x1e\x3f\xa4\x2b\xae\xe5\x13\x9e\xeb\x13\x9e\xeb\x13\x9e\xeb\xe0\x27\xed\x28\xf2\xc6\x13\x9e\xab\xbf\x1e\x43\x05\xfd\x13\x9e\xeb\x27\x5c\x4f\x95\xf4\xb7\x5e\x4f\x95\xf4\xbd\xeb\xdf\xbc\x92\xfe\x09\xcf\x35\x71\x90\x27\x3c\xd7\xdb\xae\x27\x3c\xd7\x27\x3c\xd7\x27\x3c\xd7\x27\x3c\xd7\x04\x9a\x36\xe1\xb9\x22\xf3\x6f\x42\x75\x75\xfe\xa6\x0e\xd2\xf5\xdf\x10\xd1\x55\x5b\xf6\x2b\xd8\x61\x51\xc8\x56\x98\x0b\x79\xc9\x06\xe2\xdd\xad\x78\x7f\xd7\x9e\x6e\xc5\xd0\x4d\xde\xe0\xf5\x9b\x77\xd2\x35\x9c\x2f\x75\x7e\xb0\x61\x9f\xcf\xa4\xa7\x6d\xc9\x99\xc8\x81\x10\x90\xff\x70\xf4\xb4\x79\x0d\xd1\x6a\xdc\xa2\x64\x65\xf7\x85\x3b\x39\x8d\x65\x9a\x09\x39\x24\x8a\x15\xbc\xe1\xae\x51\x33\xc5\xcf\x73\x64\x1d\x58\xf9\xc0\x21\xfb\x6a\xb6\xb4\x52\x83\x55\xb3\x70\x54\xb9\xcf\x39\x53\x91\x8f\xd4\x69\x79\x2b\x84\xe6\x70\x7e\xd9\x57\x42\x9b\x07\x2c\x9c\x6b\xae\x99\xcf\x12\x73\x01\xed\x68\x46\x2e\x62\x1a\x62\x70\x92\x3c\xc4\x44\xaf\xee\x56\x22\x63\xa0\x34\xe3\xb9\xc5\x1e\x43\x6a\xcb\x1a\x91\x9d\x61\x04\x89\x1e\xac\x24\x65\xab\x7c\x67\x59\xab\x1b\xf1\xd2\xea\x68\x1e\x46\x14\xc5\x68\x8e\x6d\x87\x92\x38\xec\x2a\xdd\x71\x14\xc2\x05\xd0\x62\xc1\x74\x44\x2f\x7a\x23\x2e\x5d\x26\x4b\x96\x02\x76\x7b\x35\x55\x3b\xe7\x02\x5d\x1a\x30\xaa\xd7\x60\xbb\x62\x73\xf7\xd2\xab\x24\x5f\x44\xe4\xd8\x9f\xe7\x48\x1c\x00\x63\x6a\x63\xc5\x3b\xce\x0c\x9f\xc5\x7f\x68\x22\xab\xd2\x07\xd7\xff\xf0\x82\x34\x4c\x15\x28\x96\xb2\x04\xf0\x34\xd6\xd4\x1b\x49\x2a\x6b\x31\x5b\x55\xe6\xe6\xe1\x43\x6c\xff\x38\x12\x00\x98\xff\x90\x29\x43\x33\x60\x6d\x1a\x52\x31\xaa\x0d\x79\xf9\x82\xd4\x5c\xb4\x26\x5f\xcf\xe0\x7b\x48\x28\xf8\xdd\x37\x03\x9f\x76\x0f\x1d\x88\xb3\x48\x92\xd8\xab\x02\xff\x0e\xae\x15\x17\x51\xac\x61\xb3\x34\x92\x0b\xb3\xea\x68\x89\x12\xdd\x73\x9d\x56\x10\xc9\xdc\x89\xf3\x20\xb3\x8b\xe1\xd7\x56\x4e\x97\x69\x10\x3c\x39\x16\xdd\x0d\x1f\x83\xd8\x53\xf2\x9f\xee\x43\x5c\x62\x89\x6a\xc8\xc2\x1a\xbd\xe0\x97\xd5\x0b\xaa\x10\x93\x06\x8a\x38\x7c\x36\x51\xda\xea\x1c\xdb\x81\x01\x20\xe2\x55\x18\x97\x6b\x52\x86\x8f\x83\x6b\x96\x8b\xb1\x51\x8c\x05\x92\xc1\xd6\x87\x08\xb2\xcf\x42\x1a\x84\x56\x38\x50\xc5\x1f\xa6\xd8\x8f\x89\x62\x73\xae\x8d\x4a\x0b\xfb\x8d\xd3\x0f\xcc\xa1\x56\xc0\x5c\xc9\x36\xb9\xa1\x73\x2e\xb1\x05\x44\x78\x17\xaf\x4f\xf4\x28\x0a\xa6\xf5\x90\xa2\x19\x77\xd4\x39\x1e\x83\x31\x12\x9f\x35\x58\xec\x28\x46\xcb\x77\xa2\x4a\x8e\x99\xe6\x9a\x68\x4f\x07\xfa\xd3\x40\xab\x82\x2c\x47\xd8\xa0\x7e\xfb\xba\x05\x40\x57\x1d\xc8\x10\x56\xa2\xa5\x63\x7f\x3e\x06\x28\xd4\x28\x52\x98\x2e\xd5\x63\x5d\x64\x46\x2b\x9d\x1c\x67\x1c\xee\x6b\xf1\xdb\x77\xfb\x0b\x84\x74\xf4\x05\xba\xab\xee\x94\xaa\xab\xe6\xf4\x8b\xf5\xde\xff\xc0\xa9\xc1\xe9\xbe\xc2\xce\x70\xa5\x51\x26\x07\xd5\x70\x72\xbc\xb2\x82\x19\x13\xc2\xf6\x03\x0d\x31\xc0\x8c\x2f\x86\x73\x9c\x52\xc8\xba\xa6\xfa\x20\x99\x18\xcc\x2f\xa2\x00\x24\xa7\x5d\x7d\xbb\x30\x8a\x56\xdd\x0c\x45\x00\xa6\xdb\xda\xd6\x86\x09\x2a\x92\x53\x26\x73\xf1\x0c\x52\x41\xe4\x75\x28\x47\x9d\xf3\x2b\x26\x56\xf7\xb3\x73\x47\x7c\x4b\x8b\x4b\x36\x00\xbb\xe9\x07\xed\xd7\xb8\x5c\x0a\xea\xb0\x6c\xec\x31\x74\xc5\xad\x38\x60\xe5\xca\xb8\x7a\xd4\x65\xb8\x6b\x66\x3c\xd8\x10\x1a\x76\xdb\x5a\xb8\x56\xb3\x64\xd8\xd8\x5c\xcb\x66\x69\xb8\xaf\x33\x4f\x63\x46\x87\xe2\x57\x05\xf3\x76\xb1\x1d\x6f\x5b\xf3\x8d\xef\x97\x65\xc6\x3d\x37\x47\x32\xca\x55\x06\xbb\x74\x54\x84\x9e\xac\xec\x59\xb5\xf4\xa0\xed\xab\x7b\x61\xba\x84\x68\xe0\xb0\xf3\x26\x71\x3e\xd4\x34\x49\xc9\xcc\xc1\x76\x6a\x5a\xf6\x0f\x96\xf7\xb4\x94\x9a\x7c\x0b\xd5\xfb\xc7\x0c\xdc\x28\x0f\x6d\x34\xbc\xff\xf6\xf8\x23\x06\x83\xa5\xfa\xf3\x32\x16\x78\x4d\xe7\x69\xa6\xf5\x98\xd4\x52\x70\x23\x55\xca\x99\x37\xd4\x56\x98\xe9\x21\xe5\xa5\xb9\xe4\x26\x52\xe1\x7d\x1b\x1d\xa4\x67\xa8\x2f\x8d\xd2\xa2\x80\x75\x97\xb2\x25\xd7\x14\x3c\x83\xc8\xdd\xe9\x1a\xeb\x05\x6f\x5e\x91\x13\xa1\x5b\x15\x21\x94\xad\x92\x60\x0f\x3a\xcf\x9c\xfe\xb8\x83\x8d\x64\x67\x1f\xb1\x70\x1d\x08\x69\x32\x1d\x27\x1f\x68\xdd\x54\x4c\xbf\x22\x7b\xec\x83\xf9\x66\x6f\x44\xf6\x3e\xcc\xb4\xfd\x8f\x30\x33\xbd\x37\x21\xa7\x75\x53\xf1\x82\x9b\x6a\x49\xb8\x98\x31\xa5\x42\xec\x1d\x7f\xb0\x92\xfa\x9f\x4e\xc9\x1d\x63\xde\xda\x48\x45\xe7\xec\xb9\xd3\x0d\xbe\x50\xd3\x54\x4d\x64\xf0\x99\x04\x9b\x70\xdb\xcc\x0c\x44\x04\x27\x3f\x48\x63\xfc\x68\xc8\xf1\xb4\x71\x55\x98\x63\x99\xc9\xe5\x1f\x60\x5d\xdc\x0a\x3c\x57\xd3\xf2\xf9\xfb\x93\xc3\xe3\x37\x27\x93\xba\xfc\x62\x21\xaf\xc7\x46\x8e\x5b\xcd\xc6\xc9\x25\xa5\x83\x57\xe6\x92\x2d\x01\x07\x7d\xcb\x6b\xe3\xc8\xe8\x79\x51\x8d\x84\x64\x01\xf8\xdc\x1a\x20\xef\xbf\x3d\xfe\x41\x0f\x89\x74\x45\x4e\x8a\xe7\xcc\x14\xcf\x0b\xd6\x2c\x9e\xbb\x91\xff\x5d\xd7\x3f\x4a\x31\x59\x9b\x93\xa4\x07\xfa\x33\x73\xdb\x1c\xe5\xe9\x40\xed\xb5\x90\x55\x85\xb5\xd5\xf6\xd4\x3a\x62\xcd\x22\xdc\xf0\xa8\x57\x7e\x48\x99\xca\xc0\xe2\x94\xdd\x8b\x0f\x10\x40\xeb\x97\xc9\x29\x4e\xb9\x58\xcf\xd2\xd0\x3f\x67\xe0\x93\x61\xc7\x4c\x24\xbc\xd4\x34\xaf\x12\xf1\x38\xc5\x55\xaa\x3a\xf3\x28\xfc\xc3\xef\xfd\x97\x9a\x19\xd0\x62\xb9\x20\xd8\x47\xf9\x8d\xd5\xaa\x77\xc1\x11\xbc\x13\xac\x34\xc4\x0f\x8d\x65\xd1\x03\xba\xa6\xe5\xe2\x84\x40\x08\x58\xdd\x51\x86\x32\x6d\xcd\x82\x09\xe3\xa1\x9f\x5c\x1d\x77\xac\x0b\x91\xd3\x19\xfa\x03\xcb\x01\x69\x94\xf2\x8a\x29\xc5\x4b\xa6\xc9\x60\x65\x28\x8e\x03\xf1\xea\x51\xb3\xd6\xa0\x0c\xc6\x1c\x09\x83\x43\x73\xe8\x73\x26\x3a\xe4\xcf\x9b\xdf\x8d\x8c\xf9\x9d\xc8\x95\xbf\x8f\x2c\xf9\x5d\xcc\x8f\xcf\x94\x61\x38\x3c\x27\x3e\x7f\x96\xf7\xce\x04\x39\x7a\x6a\x27\x7c\x92\x4d\xed\xa4\x65\xcd\x07\x80\xf0\xed\x80\x48\xcf\xa3\x78\xc2\x3c\xdc\xf9\x21\xba\xa0\x15\x3b\x7d\xb7\xad\x70\x84\x1b\xbe\x1f\x92\x38\x77\x1f\x36\x4c\x79\x74\x57\x1f\x1d\x33\x86\x16\x0b\x17\x20\xf0\x79\x09\x52\x00\xf4\x0e\xee\x1b\x22\x64\x99\x9a\x6e\x18\xc7\x24\x3c\x0d\xb7\xc7\x25\x3c\xf9\x9f\x57\x6c\x62\x4e\x0d\xbb\x4e\xb4\xdf\xc7\x9d\xda\x98\xfa\x7b\x70\x8c\x3f\xc5\x36\x36\x06\x16\x86\xc7\x2f\x42\xf9\xfd\xda\xb3\xef\x3f\x62\x31\xb9\x21\x56\x91\xe3\x18\x80\x27\x6e\x25\x9a\x8b\x57\x90\xc3\x1f\x66\x69\xca\x88\xdb\x75\x59\xf8\xcf\x3d\xcb\x73\x11\x2c\xa4\x43\x1f\xf3\xea\xb2\x17\x70\x87\x67\xa7\xe4\x2f\x78\xfb\xd6\x66\xaf\x51\xd2\xa0\x1b\xf4\x58\xd6\x94\x27\xd7\xa0\xf5\xe6\x60\xf5\xa1\x7e\x32\x62\x4b\xd6\x4f\xc2\x59\xb8\x97\xb8\x9b\x3d\x06\x6d\x21\xc5\x8c\xcf\x5b\xc5\x4a\xe2\x02\x57\x5b\x9b\xa5\x9d\xf3\x10\xad\xf9\x6c\xc8\xbe\xfd\xee\x39\xf4\xb0\x3b\x98\x74\xde\xa2\x15\x57\x52\xba\x6f\xf7\x1e\x5d\x50\x9f\xa5\xe3\x26\xca\x88\xf1\x28\x62\x9d\xb3\xc6\x33\x3f\xa8\xe3\xa1\x92\x6c\xc0\xa8\x42\x73\x28\x2f\x88\x0a\x3c\x5d\x07\x31\xae\x3b\xa0\x30\xf4\x0a\x8d\xc8\xf7\x72\xce\x85\x3f\x5e\xa4\x2b\xf0\x99\xd1\x74\xf7\xcc\x93\x7f\x64\xed\x7a\xf2\x8f\x3c\xf9\x47\x9e\xfc\x23\x37\x5f\x5a\x57\x27\x82\x4e\xab\xf4\x6a\xee\x7e\xc1\x7b\x78\x1c\x79\x5d\xd1\x39\x61\xf0\xc7\xf3\x92\x6b\xfb\x5f\x72\x7e\xfe\x3d\x64\x45\xb7\xc2\xbb\xce\x81\x37\x9d\xf6\x35\xf2\x33\x84\x67\xe9\xf6\x8e\x31\x54\x73\xde\x0c\x00\x35\xcb\x76\x90\x75\xa4\x84\x2e\xb4\xba\x07\xe2\xe0\xee\x80\xf3\x8c\x06\xa0\x48\xac\x83\x9e\x32\x2b\xad\x8a\xcb\xb3\x28\x31\x59\x2a\xfb\x99\x88\x3e\xca\x62\x7c\x64\x7a\x66\x4e\x33\x64\x85\xa4\x21\xac\x70\x96\x2b\x78\x1d\x3d\xcf\x6b\xe3\x5e\x09\x39\x77\x0b\x09\xdf\x51\xad\x65\xc1\xbb\x52\x02\xd7\x69\xc5\xab\xe8\x25\xa8\xe8\x5b\x9b\x64\xb4\x83\xf3\x4c\x08\x9a\xdf\x1b\x2c\x13\xcf\xd8\xee\x0e\xaa\x63\x4b\x84\x0b\x3f\x6f\x5b\x9b\x04\xdc\x6a\x43\x50\xb4\x73\x09\x89\x8e\x92\xd5\x79\x0c\x02\x61\x35\x15\xdc\xa3\xd4\x3a\xde\x4b\xf6\x38\xe1\x05\x59\xa0\x5c\x6f\xe0\x5a\xae\x83\x48\x82\x4e\xec\x5b\x59\xad\x74\x50\xef\x2c\x0e\x5e\xb4\x37\xfa\xb5\x4c\xf8\x99\x4b\x2a\x07\x59\xdd\xc8\xa6\xad\xb0\x92\x3e\x4c\x5a\xda\x6c\x0d\xcc\x46\x45\xda\x1e\xde\x67\x3b\xd4\xf2\x88\xd0\x1f\xb7\xbd\x21\x63\x20\xca\xbb\x23\x8e\xfa\x3d\x8a\x8d\x96\xa6\x4b\xff\xb8\x0c\x1e\xcf\xed\x03\x8e\xe6\x02\x18\x4d\xf7\x2e\xf7\x80\x49\x7b\x1e\x9c\x17\xbf\xfb\xe6\x9b\x01\xca\x10\x57\xac\x30\x12\x8a\x01\x1d\xd8\x73\xc8\x98\xa5\x8a\x81\xed\x8f\x68\xa0\xde\xbf\x8c\xc5\x60\x66\x50\x5e\xc7\xf6\x10\x49\xb7\x82\x40\x9a\x03\x03\x63\x38\xc2\xe8\xa0\x04\xcd\x6c\x59\xf3\xd0\xbd\xe0\x74\xcb\xdd\x0b\xb6\xda\xb3\x60\x9b\x9d\x0a\xb6\xd7\x9f\x60\x8b\x5d\x09\xb6\xdd\x8b\x60\x2b\x1d\x08\xb6\x9e\xd0\xfd\xf0\x3d\x06\xb2\x40\x05\xe6\x80\x09\x1c\xda\x45\x60\x20\xc4\x60\x1e\x78\xc1\xc1\x7d\x02\x1e\xa2\x3b\x40\x26\x1f\xe7\xf0\x4e\x00\x79\x61\xa0\xb6\x8d\xfa\xbf\x43\xaa\x37\x5e\xbb\x89\xf0\xbf\x15\x5c\xff\x6d\xa3\xf9\x6f\x11\xc3\x3f\x1f\x96\x5c\x2e\xbc\xfe\xe1\x18\x72\x79\x05\xc7\x96\x10\xf9\xef\x11\x87\xff\x41\xd0\xf7\xef\x1b\x73\x7f\x37\x8b\xdb\x86\x62\x78\x0f\x46\xee\xd6\x99\xa0\xbb\x73\xe5\x80\xec\x82\x5b\xbc\xa3\x64\x63\x78\xc1\x37\x66\xf4\x8d\xb6\x9f\x61\x89\x8f\x6e\x68\x01\xfb\xba\xcd\x5c\x81\xf5\x20\x3e\x58\x32\xd8\x57\x8e\x94\xc8\x24\x85\x37\x8b\xbb\x1c\x09\x78\x77\xbe\x92\x11\x1d\x3e\x7e\xf8\x44\xe8\x30\xf4\x47\x52\xa1\xfd\xd4\xed\x58\x32\xf4\x53\x56\xf0\xa7\x5c\xbb\x98\x15\xfc\x50\x08\x26\x9f\x5f\x62\x66\xf9\x94\x98\x19\x5f\x3b\x98\x98\xe9\x99\x56\xc7\xa7\x31\x1e\xbb\x60\x5a\xca\xa9\x55\x52\x3d\x98\x5f\x27\x83\x0f\xcf\x4e\x93\x47\x2f\x14\x03\xa0\x7e\x5a\xe9\xc9\x26\x9b\xd3\xa7\x1f\x39\x0b\x37\x74\xad\x36\x86\xd5\x4d\xa2\xf0\x26\x4f\x79\x99\x9b\xae\xa7\xbc\xcc\xa7\xbc\xcc\xa7\xbc\xcc\x9b\xaf\x5d\xce\x2e\x5a\xb4\x35\x15\x63\x7b\x9e\x42\x52\x67\xaf\x9c\x64\x45\x4d\x9f\x10\x77\x02\x0e\x12\x5a\x88\xae\x0b\x98\xcb\xad\xe0\xbf\xb6\xac\x8b\x74\x04\x93\x6d\x07\xf2\xc0\x80\x8e\xdd\x59\x2e\xb4\x64\x57\xce\xd9\x42\xae\xe1\x03\xba\xb9\x0c\x4b\xe7\x8f\xc6\x61\x4b\x06\x83\xf7\x02\x93\x66\xc1\xd0\xd8\x3e\x5b\x31\xb6\x7b\x3e\x5d\x27\xc8\x41\x8e\x0e\x8b\x0e\xc7\x96\xa0\x65\x51\xfb\xee\xae\x69\xc9\x94\x91\x9a\x2b\x25\x95\xcb\x54\x8b\x5f\x1f\x0b\x9f\xf8\x7c\x61\x98\x42\x0f\x29\x96\x67\xa4\x8b\xcf\x73\x66\xdc\x2e\x80\x5d\x64\x24\xa1\x02\xb1\x57\xed\xbf\x3d\xc8\x07\x4c\x8d\xd7\x40\xa6\x6c\x41\xaf\xb8\x6c\x07\x80\xaa\x9d\xa3\x3e\xb5\xe7\x1e\x09\xb6\xc2\x52\xb6\x21\x17\xa5\xd5\x76\x32\xc2\x2a\xe8\x75\x3e\x48\x1e\xfa\x6d\xf7\x50\x70\x9b\x97\xd2\x07\xa3\xc7\xec\x03\xd7\x66\x7d\xce\x3d\x0b\xb8\xdc\xa7\xad\x6c\xe6\x2b\xdd\xd8\xd3\xf7\xc7\x64\x98\xde\x1c\x5b\xb8\x47\x44\xdf\x05\x72\x75\x0e\x5f\x7d\xcc\x01\xe2\xfa\xfd\x20\x64\x39\xa9\x69\xb1\xe0\x22\x03\x44\xed\x8f\x3d\xc2\x7a\x9e\x90\x09\x39\xac\xaa\xae\x8e\x49\x87\xd2\x41\xef\x19\xe9\xbf\x94\x5d\xa4\x24\x72\x2c\xe7\x2a\x56\x42\x9e\x15\xaa\x58\x50\x9f\xa8\xf9\xc4\x0d\x30\xb9\xaa\xaf\xa9\x62\x93\x42\xd6\xe4\xe8\xfc\x94\x94\x8a\x27\x76\xe0\xda\x72\xfd\x39\x2e\xf1\x59\x5a\xe8\xfa\x73\xf3\xf7\x3c\xf9\x7a\x76\xca\xd7\x13\x4a\x18\x2a\x5e\x2c\x4f\x8f\xf3\x96\x45\xe0\x33\xbd\xa2\xa9\x43\x49\x84\xfd\x9c\x7c\x4b\x35\x2b\xc9\x1b\x2a\xe8\x1c\x03\x56\xfb\xe7\x67\xdf\xbe\x39\xb0\x0c\x0f\xc1\xb8\xd3\xe3\x8d\x75\x13\xe7\xf1\xc3\xdf\x6e\x0b\xf1\x9c\xac\x4e\x5d\x36\xdd\x7e\xed\xa9\x89\xd3\xb7\x35\x30\x78\x12\xd4\xd6\xb3\x01\x41\xe0\x0d\x00\xf9\x67\xab\xfd\xbf\xb0\x50\xc1\x37\x6b\xd4\xab\x47\xea\x55\x5d\x5e\x3e\xf4\x04\xac\x47\x23\xad\xfd\x78\xc9\x96\x77\x96\xde\x63\x58\xc1\x81\x83\xe3\x7b\xd4\xf4\xe6\x2e\x41\x51\xa6\xcc\x6d\x14\x7e\x5a\xd6\xdc\x27\x64\xc6\xf5\xd6\xf5\xdc\x28\x6a\xd8\x7c\x79\xcc\x9a\x4a\x2e\x2d\x17\x9f\x45\x89\x3b\x78\xeb\x14\x55\x69\x35\xa5\x05\x51\x6d\x05\xbd\x10\xca\xb5\x0e\x89\x82\xb1\xb2\x13\xf3\x5c\x68\x43\xab\xca\x2e\x20\x3c\xff\x56\x8a\x3e\x59\x39\xf8\x54\x35\x60\x8c\x74\x7e\xf4\xae\x7e\x87\xe0\xb7\x1f\x5b\xed\x4f\x57\x04\x60\xf8\x8f\xf3\xdb\x5d\x32\x21\x3f\x39\xe7\x31\x45\x61\x40\x89\xf6\xbe\xad\xec\x01\x5d\x95\xfd\x8e\xca\x68\x72\x38\x56\xc0\x6e\x0d\x20\xff\xec\x4b\x3a\x17\xa0\x64\xba\x97\x0a\x11\xfd\xfc\x93\xc6\xc7\xa6\xcd\xd7\x0b\xd4\x40\xed\x83\x09\x6d\x9a\x8a\x23\xca\x80\x54\x2e\x09\x37\x8a\x27\xaf\xdf\xf6\x29\xa2\xf6\x8e\x6a\xe8\xdd\xd4\xce\x31\xb9\x62\x6a\xfa\x29\xfe\xb7\xbb\x6a\x94\xb4\xe1\x90\xce\xf4\xc9\x22\x2c\x55\x69\x3c\x3c\x3b\xc5\x81\x36\x45\xf8\xfd\x97\xc8\x10\x6e\xa9\x7d\x42\x0f\x96\xa3\xb9\x30\x40\x68\xe6\x74\x78\x76\x8a\x3d\xd2\x5c\x3f\xa7\x2e\x34\x60\x2d\x76\x8a\xc5\x97\x5d\x1b\x5a\x3a\xb7\x4f\x34\x44\x0a\x76\x97\x86\xa6\x96\x02\x26\xda\x9a\x61\xaf\xa8\x40\x0c\xe1\x02\xc6\x09\x54\x74\x11\x08\xf4\x2a\x4f\xc8\xde\x5e\x6c\x13\x22\x3c\x8b\x8a\xe8\x06\x51\xb7\xf7\x65\xef\x2e\x2b\xd7\xba\x17\xfb\xd4\x13\xfe\xee\x59\xcf\x77\xcc\x72\x4e\x38\x31\x33\x64\xee\x08\x29\xde\xbb\xf9\xfe\xe1\xfd\xf7\xf7\xce\xa0\x6f\xfb\xc3\xb9\x8e\x3d\x0c\xba\x8d\x36\x54\x19\x4e\x2b\xd2\xaa\xca\xa7\x17\x22\x12\x89\xab\x08\x5c\xd0\xab\xa8\x1b\xd2\x84\x90\x2f\x91\x2b\x1d\x33\xa0\x28\x03\xa7\xa8\xeb\x0e\x36\x6b\xab\x6a\x44\x66\x5c\x50\x7b\x90\xb1\x86\x44\x49\x5e\x9f\x4c\xf1\x39\x17\x05\xb3\xd3\x34\xf6\x7c\x49\x80\x72\xef\x36\x0a\x32\x0d\x72\x34\xe3\x90\x0b\x92\x62\xe5\x5b\x01\x7e\xe1\x99\x54\xe4\xa8\x6a\xb5\x61\xea\xbd\xb4\xc7\x70\x57\x6e\x42\x66\x4a\xd6\x84\xc6\x5f\x7f\xcb\x45\x79\xa7\x4a\xa8\xf7\x70\xb4\x17\x54\x10\xc6\x21\x31\xca\x0e\x0d\xf9\xd0\x96\xd9\xbb\x4d\xb5\xaf\xdb\x62\x61\xa7\x68\xaf\x91\xa5\xde\xb3\xd2\x79\x0f\xc3\x8d\x7a\xef\xc0\xfe\xb5\xfa\xae\x58\xbd\x11\xfd\xee\x39\x6d\xf8\xde\xc1\x88\xc0\x84\x43\x72\x9e\xfc\xf4\x6c\xbc\xcf\x74\x1f\xf9\x09\x03\x57\x5f\xd2\x2e\x7a\x1f\x3f\x01\x36\x86\xe8\x52\xdf\xae\x17\xdc\x60\xbd\x8e\xdd\x29\x18\x03\x08\xbd\x66\x56\x0f\x52\x42\x0e\x7d\x10\xcd\x6e\xad\x9a\x51\x9f\xaf\xcb\xae\x98\x5a\x9a\x85\x6b\x60\xe1\xa5\xe8\xd3\xca\xc1\xce\x18\xb4\x6a\x4e\x94\xf9\x15\xea\xb6\x1b\xc8\x84\xb5\x15\x7a\xf6\xe5\xb3\xd5\x23\xa9\x3b\x83\xff\xbd\xd7\x03\x94\xb0\xa4\xb5\xf8\xd1\xfe\xb2\xbf\x0e\xf8\x11\x1e\x26\x41\x1c\x7e\xff\xbd\x4b\x4f\xc1\x09\xff\x8e\x0b\x88\x7a\x83\x3e\xe4\xb1\x00\xdc\xa2\x6d\x5c\x29\xa0\xf0\xdf\x76\x95\xd6\x8d\xae\x4f\x35\x94\x6e\xa1\xd1\xdb\x99\x37\x3d\xea\xd6\x07\x38\x63\xf5\x8d\x2c\x37\x6f\xe2\x1e\x93\x9c\x46\x37\x87\x5c\xe2\xce\xcd\xe9\x9e\xe5\x2c\xa7\x65\xb3\xd1\x0a\xbd\x7d\x4d\x6f\x59\xbf\x9b\x28\xe9\xfc\x74\x20\xf6\xa3\x6f\x2e\xba\xc4\x08\x32\xab\xe8\xbc\xe3\x45\x10\xe2\xa8\xd9\x1f\x9d\xff\xe8\x5f\x41\x93\x1b\xa0\x87\x3f\x6a\x3a\x7d\xcc\x58\x1a\x77\xb3\x74\xe3\x1d\x37\x86\x32\x3e\x6e\x31\x85\x87\xdf\xcc\x4d\x9f\x92\xf7\x65\x6e\x75\xd5\xdf\x34\xff\xde\xb5\x4e\x23\x4e\xf0\x9d\xe3\xbc\x2b\x04\xaa\x4d\x40\x87\x3b\xff\xb1\xc7\x26\x1f\xa1\xf7\x06\xa6\xbd\x64\xcb\x6b\xa9\xca\x8f\x33\xec\x61\x10\x66\xfe\x27\xde\x98\xf7\xc9\x60\xe8\x8e\x97\x1b\x03\x3b\xc9\xac\x7a\x2b\xf1\x15\x9d\xb2\xea\xe3\xa4\xdf\x60\x18\xbc\xa1\x8d\x7d\x9d\xae\x64\x13\x3d\x52\x2e\xcb\x0c\xad\x53\xac\xf3\xf1\x15\x69\x52\xcd\xa9\xe0\xff\xc4\x3a\xd7\xc2\x4a\x0a\xa9\xf8\x3f\x37\xb3\xda\x3e\xc6\xf4\xd1\xc7\x55\xb1\xc2\x1c\x38\xae\xdf\x28\xb2\x3f\xb2\x2d\x68\x59\x72\x54\xc1\xce\x3e\xc2\xc1\xb7\xcf\x17\x17\x97\x77\x59\x69\xb8\x1f\xcb\x6c\xba\xc0\xde\x3d\x2e\xf3\x2d\x62\xe1\xe3\x3b\xf7\xf6\x34\xba\x4f\x38\x9e\x5a\x75\x4b\xa1\xc8\xad\xbf\xaf\x29\xc7\x53\x7b\x73\x1b\xaf\x1b\x66\xd7\x71\x13\x75\xba\xb5\x95\xa5\xf6\xfd\xc2\xd3\x1e\x60\x5f\x0d\x9a\x70\x56\x53\x9e\x3a\x63\x78\x0d\x58\xb2\x9a\x9a\x56\x71\xb3\xf1\xa4\xbe\xfd\x87\x5c\x7c\xd7\x4e\xd9\x8f\x4c\x69\xbb\x1e\x77\xfd\xb9\x80\x8a\xb3\xc3\xb3\xd3\x8d\xd3\x92\xe7\x44\xbe\xd1\x91\x01\x7e\x33\x47\xb9\x55\x17\x49\x2b\x68\x3d\xe5\xf3\x56\xb6\xba\x5a\xc6\x11\x14\x4a\x2e\xb9\x28\x27\x84\x9c\xa2\x5b\x55\x3c\x33\x84\x0a\x29\x96\xb5\xbb\x55\x14\x55\x5b\xb2\xde\x13\x6f\x3a\xca\x24\xa1\x57\x92\x97\x84\xb6\x46\xd6\xd4\xf0\x82\x14\x92\xa9\x02\x40\x54\xe3\xe7\xb7\x9a\x11\xda\x7b\x62\xf7\xdb\xa2\xd5\x46\xd6\xa4\xa6\x4a\x2f\x68\x55\xdd\xc4\x12\x19\xb4\x03\x70\xa7\xdd\xf8\xad\x9d\x95\x1b\xbf\xbc\xba\x65\x1e\x3e\xbe\x1d\x60\xe0\x41\xdb\xc1\x12\x37\xe8\x01\x57\x37\x33\xf5\x27\x3c\xc3\x21\xe0\x6e\xec\xcb\xd1\xe3\xcf\x8b\x05\x23\x4d\x3b\xad\xb8\x06\x13\x1e\x04\xd7\x92\x4c\xd9\x82\xbb\xd2\x9b\x8f\x4b\xac\x1b\x97\xf8\x63\xf3\x7c\x9b\xc8\xf8\xe8\x0c\xdd\x22\xe1\x6f\xfd\xad\x3b\x01\x4f\x6b\x3a\xff\x04\xd5\xfe\x86\xed\xfb\xbd\x15\xfb\x54\x2c\xc3\x79\x0a\xcd\x54\xf5\x88\x48\xe5\x0a\x89\xbd\xed\xa7\xdc\x57\xa1\x45\xb0\x22\xef\xdc\x8c\xba\xba\x68\xb7\x0d\x00\x65\x80\xa9\x99\x54\xb5\x9d\x77\xae\xc8\xac\x15\xe0\x0d\xbf\xc1\x2e\x84\x1c\x3e\x38\x7f\x9c\x33\x93\x56\x5a\x06\x61\x00\xcb\x26\x3c\x61\x84\x6a\x72\xcd\xaa\x0a\xd3\x88\xb0\xf3\x6b\x04\xdb\xdc\x61\x59\x76\xa9\x84\xd3\xcd\xb6\x65\xc9\xe7\x4c\x1b\xb2\x7f\xfe\xd7\xc3\x03\x50\x88\xc0\x59\xb7\x24\x86\xce\x27\x2b\xf9\xe1\x98\x4c\x6a\xd5\xad\xb2\x05\xb5\xac\xa0\x86\x56\x72\x8e\x19\x68\x56\xa4\xd8\xdf\x37\x15\x5d\x42\x19\x57\x43\x15\xd4\x0a\x16\xe8\xb0\x24\xaa\x15\x37\x75\xfe\xbe\xbf\x93\xf2\xe3\x32\xe9\xb6\x9e\xda\xb7\x84\x87\x3f\x2e\x73\x3e\xd2\x27\xf8\x7e\x8f\xe0\xff\x8f\xbd\x6b\xeb\x8d\xdb\xc6\xfe\xef\xfd\x14\xfc\x1b\x05\xc6\x76\x3d\x4e\xfe\x6d\xb3\xc0\xe6\xcd\xb0\x5d\x20\x58\xc7\x09\x6c\xb7\x05\x76\xdb\xa2\xb4\xc4\x99\x21\xac\x21\x55\x52\xf2\x25\x45\xbf\xfb\x82\xe7\x90\x94\x34\x23\x91\xd4\xcc\xd8\x09\x8a\xe5\x4b\x5a\x8f\x78\x27\xcf\xfd\xfc\xa8\x58\xc1\xa8\xee\xad\x9d\x72\x1f\x6c\xf5\x95\x48\xd8\x92\x66\x77\x74\x6e\x76\xde\x12\x33\xe7\x36\x72\x34\xc5\xa7\x83\xd8\x98\x51\x30\x30\x06\x3b\x30\xc7\xca\x1a\x30\xbf\xea\xfd\xf0\xc4\x19\xbc\xaf\xd1\xa6\x60\xb9\xd7\x44\xfb\x26\xfc\xf9\x74\x9a\x40\xce\xb5\x19\x40\xcd\xf5\xc2\x63\x41\xe4\x7c\x86\x09\x13\xe4\xb6\xe6\x45\xee\x1f\x34\xd0\xe0\xfc\x72\x17\x38\xc4\x64\x6e\x2c\x1e\x79\xad\xd9\xac\x2e\x30\xdf\xc6\xd6\xb3\xc4\x40\x30\xec\x7f\x49\xef\x18\xc9\x16\x54\xcc\x1b\x04\x75\xa3\x10\xa2\x83\x33\x97\xc0\xef\x3d\x2a\x42\x8b\x30\xd0\x82\x57\x4f\xfd\x48\x43\xa6\x3b\xfb\xc2\x50\xff\x89\x98\x42\xda\x16\x7f\x24\xd4\x1c\x0c\x69\xfd\x18\x5c\xb5\xb7\x7b\xb8\x22\xcd\xf3\x57\x74\xc9\x44\x4e\xa8\x10\xb2\xb2\x31\x89\x52\x59\x2d\x2e\x50\x11\x2a\xb9\xb7\x8f\x4c\x8d\x5c\x66\xf5\x92\x89\x6a\x58\xef\x9d\x5a\x00\x96\xbc\xce\xd8\xfa\xc6\x98\x99\x36\x7f\x64\xe2\x9e\x2b\x29\x4c\x83\xba\xff\x80\xbc\x03\xf0\xa4\xba\x04\x1d\xd0\x6d\x24\xad\xab\x05\xec\x8b\x24\x39\xab\x98\x5a\x72\xc1\x6c\xd2\xd4\x92\x8a\x8a\x67\x1a\x2d\xb0\x78\x82\xec\xb6\xc3\x21\x07\x0a\x37\xb8\x05\xb8\xa4\x9e\x85\x12\x20\xbf\x6b\xcd\x40\x5e\x79\x26\x05\xd2\x7e\x07\xa1\xbf\xbc\x67\x8a\x94\x8a\xf9\x73\x0b\xee\xf3\x7e\xfd\x34\x97\xd5\x54\xb3\x92\xa2\xb7\xd3\xcb\x8e\xca\xdb\x20\xcd\x05\x43\xe7\x51\x51\x2e\x28\x38\x46\xcd\xa4\x0c\x01\x5e\x3c\x95\x0b\x26\x34\x52\x73\xaa\x18\x29\xf8\x92\x0f\x59\x64\x00\x08\x69\x49\x1f\xf9\xb2\x5e\x92\x82\x89\x39\x82\x35\x7c\xfb\xda\x1c\x60\x45\xb3\x8a\xf5\x3f\x2a\x1c\xa1\x5e\x4b\xfa\x78\x01\x8d\xbd\x25\xdf\xbe\xee\xf9\xbd\x63\x5d\xbc\xa7\x05\xcf\xf1\xc8\x0d\x9d\x6d\x55\x17\xa6\x3b\x56\xcc\x8e\x97\xb4\xca\x16\x4c\xef\x4f\x7e\xfb\xcf\xeb\xe9\x3f\x4f\xa6\xff\xa6\xd3\x4f\xd3\x5f\xbf\xd9\xff\xe5\x97\xe3\xce\x1f\x0e\x0e\xbf\x9e\x1c\x0c\x10\xcf\x25\xd3\xda\x10\xe7\xd5\xad\xf3\x88\x00\x99\x5c\x96\xd2\x90\x13\x39\x23\x3b\xd8\x8b\xe0\xac\x26\xff\x07\xf3\xd2\x65\xc1\xab\xfd\xc9\xe4\x78\x32\x39\x38\x86\x90\x6f\xbd\xff\x78\x44\x1e\x9b\x09\x4f\x7e\x7b\x6d\x66\xf8\xeb\x37\x5f\x4f\x26\x07\x07\x93\xd8\xdc\xec\x40\x3a\x23\xe6\xa2\x7f\xca\x86\xe9\x83\xef\xb4\x60\x34\x37\xf3\xf9\xc4\x94\x5c\x1f\xb6\x62\x65\x41\x07\xdc\x20\x6b\x52\x68\x03\xa8\x6b\x88\x1f\x98\xcb\xa5\x60\xbe\x8d\x63\x72\x8d\x52\x0a\xcc\x0f\xee\xc8\xef\x4b\x56\xd1\x9c\x56\xf4\xf8\x92\x2e\xd9\xef\x5d\xe0\x3d\x59\xe4\xa6\xa1\xd1\x87\x11\x0d\x3c\x32\x2e\x39\x5f\x18\x52\xe7\x3f\x87\xeb\xee\xa4\xc1\xa0\xdf\x65\x4b\xa1\x19\xa6\x7f\xfe\x58\x2a\x16\x0e\x10\xeb\x8c\x75\xb5\x52\xd7\xa3\x51\x74\x67\x62\x65\x20\xa0\xa1\xc7\xb0\x35\xed\xbf\x00\x89\x38\xb9\x3c\x1b\x76\xf2\xc5\xdd\x13\x11\x77\x44\x7a\x24\xc0\x49\x60\xec\x2e\x10\xc0\xfe\xd2\x8d\x50\x71\xf0\x4b\x00\xee\x87\x90\x40\x54\x34\xfc\xc0\x7c\x1c\xe8\x16\xf7\xb9\x01\x08\x6b\x4c\x8d\xc3\x2e\x9c\xa4\x38\xa3\x94\xe8\xa2\x18\x5e\xdb\xd4\x4f\x63\xf0\xa3\xb4\x60\xa3\x28\xa6\xda\x10\x66\x1a\xee\x09\x80\xf5\x38\x7f\xb2\xdf\x86\xd4\xe0\xac\x44\x17\x94\x9b\xea\x88\x81\x46\x43\x4b\xfc\x29\xe8\xa4\x86\xdc\xb1\xa7\x89\xb5\x9f\x9a\x1b\xb4\xe0\x25\x32\x43\x1b\x69\x12\xdb\x7e\x2c\x3f\x19\xd6\xd5\x92\x03\xcd\x5d\x7a\x27\x8e\xc8\xa5\xac\xcc\x3f\xe7\x40\xc6\xe1\x38\x9d\x49\xa6\x2f\x65\x05\x7f\xd9\xc9\x4a\xe1\x00\x77\xb9\x4e\xd6\xb8\x8e\x61\x05\x70\xdd\x5b\x26\x78\xbb\x1e\xf8\x32\x4f\x4b\x64\xe6\x9a\xbc\x13\x46\xee\xc3\x29\x47\xba\xf0\x50\xa3\xda\x76\xe0\x18\xae\x90\x62\xea\x32\x7f\xd7\x7b\xb0\xeb\x28\x55\x67\x19\x37\xee\xcc\x76\x84\x49\x73\xf0\x0b\xd7\x8e\x2f\x79\xe5\x96\x3a\x87\x63\xd4\xdb\xb9\x64\x6a\x0e\x11\x43\x59\x24\xc2\x25\xd5\xcf\x9b\xe4\xdd\x4d\xf6\xe9\x6e\xe4\xc9\xdd\xa0\x12\xf0\xa4\x8b\x41\xaf\x0f\x19\x71\x1e\x5b\x4d\x21\xd5\x5f\xa2\x3b\xe8\x4f\x43\xdc\x61\x4b\xff\x02\x98\x5e\x7d\x4c\x4e\x88\xe6\x62\x5e\xb0\xce\x6f\x36\x88\xab\xd5\x4c\xa0\xab\x12\x72\xdf\xff\xa8\xf9\x3d\x2d\x0c\x9b\x81\x5c\x43\x0f\xf0\x25\x67\x6b\xcc\xf6\xc8\xc2\xf1\x1a\x82\xe8\x95\xcf\xbd\x3b\xf6\xb4\x77\x14\x4c\xbe\x6c\x9f\xe8\xbd\x77\x62\xaf\x41\xae\xeb\x9c\x52\xcf\xd3\x40\xa6\xdc\x83\xdf\xf6\x36\xe7\xdb\x41\x0e\x95\xee\xbb\x22\xf1\x23\x37\x2e\xa3\x5b\xdf\xf1\xfe\x60\xd7\x94\x43\xe2\xe4\xcb\x7d\x7d\x00\xde\x1a\xc1\x08\x40\x2b\x2a\xd0\xb4\xcd\x5f\xdb\xef\x04\xdc\x32\xe8\xad\x6c\x1e\x71\xa8\xcb\xb9\xa2\x39\x23\x73\x45\xcb\x81\x4b\x3b\x4e\x3a\x45\x11\xb7\xaf\xcb\x80\xb1\xef\xcb\xb7\xac\x0d\xec\x75\xc0\x96\x1d\xac\xf7\xc0\x6e\x17\x52\xde\x01\xde\x1a\x1f\x54\xf8\x76\xe3\xa8\xf9\x19\xfb\x3a\x6b\xfe\xe6\x8c\xe8\x9a\xe4\xac\xa2\xbc\x00\xf3\xc0\x87\x8b\xf7\x36\x34\xdd\xc9\x6a\x6e\x94\xfd\x34\x63\x07\x16\x47\x9a\xdb\xec\x8b\x2b\x76\xcf\xd9\x83\xb5\x68\x0d\x91\xa8\x29\x99\x33\x01\x61\xcf\x81\xe4\x85\x29\xd1\x3c\x67\xe7\x60\x54\x1a\x6e\x68\x8b\xd0\x8b\x81\x31\xc7\x68\x45\x98\xd7\x45\xf9\x5c\x02\x8f\xf3\x76\xf9\x8f\x52\x05\xde\x2b\x49\x03\xef\x4c\x03\xe6\xf4\xd8\x17\xdf\x7f\xff\x5d\x80\xaf\x80\x4d\xe5\x2d\xf9\xc7\x9b\x37\xdf\xbd\x19\xfe\x8c\x0b\xfc\xec\xff\x87\xe7\x67\x6f\xdb\xe9\xd5\xd9\x17\xb0\xde\xb9\xcf\x22\x0a\x87\x75\x25\x34\x35\xa3\xbc\xa8\x95\x4d\xc2\x4b\xd4\x1e\x7f\x68\xd7\x81\x90\x9c\xc6\x44\x4d\x5d\x8b\x2e\x7b\xc5\x66\xb5\xcc\xb8\x60\x9a\x2c\xe4\x03\xa9\x85\x62\x99\x9c\x0b\xfe\x89\xe5\x08\xc1\xae\x31\xac\xda\x90\x70\x7f\xc4\x09\x13\x79\x29\xb9\xa8\x80\xc5\x2e\xa8\xc8\x8b\x50\x04\x6c\xc2\x4c\xdb\x37\x78\xab\x25\x03\x6e\x34\x6a\xc1\xde\x37\x35\x56\x96\xcb\xcc\xd9\x05\x30\x21\x97\xc3\x65\xdb\x6a\xa6\x48\x18\xaf\x03\x36\x97\x9e\x31\x8e\x33\x09\xa0\xa9\x03\xfe\xf6\x47\xcd\xd4\x13\xa0\x41\x34\x8a\x5b\x2b\x4f\xe5\xa6\x01\x05\x76\x73\xb4\x42\x25\x1d\xf4\x34\x93\x1e\x93\x4c\x4b\xd4\x6a\xc2\xa6\x57\x46\x65\xad\x74\x10\xfc\xe9\x62\x89\xc8\x09\x11\x75\x51\x04\x7a\x1a\x68\x44\xc8\x50\x3c\x12\x96\x24\xfb\x43\x9a\x61\x20\xd5\x04\x85\xe5\xf3\x19\xa2\xda\x13\xdf\x91\x16\x35\x36\x49\xe5\x33\x19\xa8\xb0\x6c\x62\xa6\xc2\x32\x22\x29\x2e\x3d\x21\x2e\xed\xa1\x81\x04\xf3\x15\x96\x31\x19\x73\x89\xcf\x03\x3c\xa7\x41\x0b\xcb\xa8\xc8\xea\x34\xe3\x56\xcf\xd0\x13\xb3\xa7\x9e\xd1\xd0\x85\xe5\x39\xcc\x5d\x58\x46\xad\x63\x8a\xe9\x0b\xcb\x26\xab\xf8\x02\x66\x30\x3b\xe7\x97\x34\x86\x45\xba\xdc\xb1\x49\x0c\x4b\xb2\x61\xcc\x0e\x6e\x54\x1a\xc4\x88\x14\x88\x91\xe9\x0f\x5b\xa4\x3e\x6c\x5c\x35\xc1\x78\x86\x65\xdc\x89\x7e\x41\x43\x9a\xeb\xf0\xc5\xcc\x69\x58\x5e\xda\xa8\x86\x25\x99\x9f\x8e\x33\xb0\xb5\x1b\x8f\x1c\xd7\x4d\xe0\x13\x15\xe3\xe2\x5e\xe2\x2b\xd2\xa3\x94\x88\xab\xb5\x8a\x2b\xba\xc4\x03\xb0\x51\xab\x4c\x78\xed\xab\xad\x53\x2d\xa4\xbc\x23\xb5\x8e\x7b\xd4\x82\xf3\x8e\x80\x2e\xec\x44\x09\x1e\x73\xc3\xae\xea\x82\xfd\xcc\xab\xc5\x87\x06\xc8\x0b\xae\x59\x55\x97\x05\xac\x45\xeb\x07\x73\x2e\xaf\x1a\xe5\x04\xe3\x56\x8c\x3e\xba\x5c\x32\x91\x37\xa1\x43\xc1\x0e\xb5\x51\x6f\x31\x57\xad\x28\x50\x85\x83\xae\xd8\x63\x49\x45\xa3\xac\x40\x48\x45\xe8\x08\x27\x1e\xe0\x54\x99\x2c\x19\xbd\x60\xb4\xbc\xbd\x8a\x56\xd0\x82\x1b\xe8\xa0\x12\x90\x5b\x56\x48\x88\x3a\xc3\x7c\x3c\xcc\x5d\x4d\x4e\xe0\x7f\x37\x73\xb5\xac\xe4\x64\x5f\xbf\xf3\x11\x31\x20\x23\x16\x3c\x63\x9e\x65\xca\x14\x88\xb8\x2b\x2b\x4d\xa7\x09\xe8\x29\xbc\x2f\x91\xef\x8d\xe0\x79\x5b\xf0\x3b\x5a\xf2\xb8\x29\x10\xcb\x06\x3b\xef\x9a\x6e\xef\x7d\x3b\x56\x2b\xba\xfb\xee\xe3\xff\xed\x7f\xa8\x6c\xb1\xff\x0d\x80\xe1\xae\xb7\xbf\x4b\x51\x1b\x19\xd8\xef\xfd\x0a\x6b\xc9\xa8\x32\xcc\x1e\x2c\xf9\x53\x72\x7a\x75\x7e\x72\x73\x7e\x44\x7e\xfc\x78\x06\xff\x9e\x9d\x5f\x9c\x9b\x7f\x4f\x3f\x5c\x5e\x9e\x9f\xde\x18\xe1\xf9\x30\x3a\x84\x99\xd1\x06\x8b\x02\x77\xdf\x48\x28\xb2\x4b\xcc\xa9\x78\x22\xb3\xba\x32\x14\xb9\x19\x4c\x67\x94\x14\x4d\x88\x34\xcf\x53\x52\xe8\xff\x76\x67\xb0\xb3\xe7\x7e\x43\x57\xad\xb6\xad\x35\xc3\x25\x77\x68\x31\xf1\x99\xbd\xcc\x21\x4f\xce\xfe\x1f\x7b\xc6\x37\x03\x06\xe8\x0f\x83\x6d\x97\x1f\x62\xc1\xc2\xed\x32\x29\x65\xae\x27\x16\x01\xc2\xfc\x77\x7c\xd9\xa1\xca\xab\x42\xce\x27\x1e\x38\x82\x91\x42\xce\x89\xae\x6f\x3d\x2a\x08\x08\x82\x49\xad\x1d\xba\x66\x3a\x10\x07\x47\x1e\x3a\xa4\xd5\x6a\xf2\xe0\x3a\x6d\xb6\x1b\x18\x33\xae\x57\x3a\xa3\x05\xeb\xb4\x64\xfe\x30\x76\x40\x87\xaf\xfa\x67\xe8\x34\x15\xae\x56\x5a\x4c\xa1\x14\x0f\xbc\xc8\x33\xaa\xf2\x35\x72\xd1\x44\xd3\xe2\xc9\xc1\xe7\x66\x05\x08\x8e\x4d\xd7\x08\x2f\x1c\xb7\x58\xdd\x33\x55\xd0\x12\xb3\xcb\xe1\x9d\x64\xc8\x86\x49\x18\xe2\x19\x2b\x19\xa0\xd3\xe0\xd3\x90\x8c\x30\x91\x15\x12\xf0\x93\x51\xea\x3c\xea\x6e\x0b\xe6\xce\xb8\x67\xdc\x52\x51\x47\xfe\xe6\xec\x15\xd2\x94\x77\x4d\x75\x30\xf7\x79\x10\xe3\xdc\xa1\x5a\x44\xdb\x41\x63\xa0\xd7\xb2\x19\xd9\xb3\x99\x1a\x7b\x47\x64\xcf\xc3\x59\xe7\x56\x23\xdf\x3b\x8c\x3f\x14\xe0\x1b\x68\xe3\xd1\x80\xc2\x6e\x23\x1d\xa6\x30\xce\x36\xfc\x17\x9c\x6e\x17\xa3\x91\x3c\xf4\x06\xea\xdd\x88\x94\xd6\xd5\x02\x73\xe8\x76\x14\x6f\xa9\x3d\xd1\xb5\x51\x37\xb8\x4f\x5b\x8f\x78\xef\xb0\xd3\x7c\xe5\xde\xbc\x20\x42\xda\xcd\x53\xcc\x9c\xc6\x50\x82\x59\xbb\x5c\x77\xee\x9e\x8f\x71\x69\x63\xdd\x73\x45\x4a\x0a\x49\x18\xee\xcb\x78\xb3\x67\x16\x8b\x9d\x6b\x33\xe2\xb4\x5b\x19\xbc\x44\xad\xb0\x86\x44\x5b\xc5\xb5\xaf\x71\x5a\x50\xad\x7b\x1c\x9e\xc0\x03\x4c\xc3\xf6\xc5\x13\xc3\x7b\x6d\xcc\x07\x3c\x90\xbd\xa0\xf7\x81\xa9\x26\x0c\xba\xa2\x6a\xce\xaa\x70\x40\x02\x15\x4f\x1f\x82\x4f\x0b\x4d\x93\x1f\x1c\x9d\x6e\x60\x31\xe2\xa2\x9a\x4a\x35\xc5\x2a\x6f\x49\xa5\xea\x21\xbb\x43\xc5\x97\x4c\xd6\xd5\x35\xcb\xa4\xe8\x87\xa2\xb0\xdf\xed\x2c\xc2\x62\x04\x3e\x87\x0d\xf2\x39\x71\xe2\x77\xfb\xbd\x33\x67\x8e\x6a\x64\x73\x17\xd8\xd3\x85\xac\xfe\x70\xf1\x7e\x9b\xcd\x26\x80\x4b\x18\xde\xc9\x9f\x2c\x4f\x16\x73\x3f\x52\x3b\xf2\x60\xb5\xf7\x75\x35\xbe\xd2\xa9\x0f\x18\x09\x7f\x6d\x17\x23\x0c\x1f\x3c\x38\x7f\x5d\xd1\xaa\x5e\x3b\x0d\x31\x56\xd4\x9b\xca\x77\x0d\x4d\xb5\x7d\x56\x6d\x64\x52\xd4\xe8\x10\x9a\x19\xbe\x73\x19\x25\xc7\xc4\x56\x34\x57\xb6\x52\x94\xa3\x39\x8c\x66\x55\x4d\xd7\x5d\xee\xa6\xb2\xcd\x46\xe9\xc7\x23\x0f\x18\xc4\x42\x46\xb0\x8c\xa9\x4a\x5f\x50\x5d\xfd\x58\xe6\x74\x00\x99\x66\x25\xcb\x44\x57\x70\xa7\x50\xa7\x7d\x10\x2c\x37\x4c\xc8\x2e\x09\xb6\x47\x1e\x0c\x75\xaf\xb1\xc5\x9e\x06\x23\xa7\xd2\xdd\x31\x53\x7d\x6a\xba\xea\x1f\xf5\x95\x34\x6b\x72\xd2\x4b\xa3\xba\xc9\x3c\xb1\xd1\x1a\x8e\xa6\xa0\x35\x22\xd8\x63\x9f\x54\xb9\xfd\x88\x0b\x46\x45\x7f\x0a\x7f\x67\xac\xa7\xf8\xdd\xf8\x33\x65\x3b\x20\x0f\x0b\x6e\xd4\x2d\x44\xf0\xd1\xc4\x09\xb1\x39\x2b\xd8\x40\x42\xe3\x96\xf9\x3f\xb6\x87\x33\xdb\xc1\xb6\xa1\xd3\x1f\xbb\xcd\x79\x8f\xb7\xd5\x2d\x2d\xd6\x43\xa3\xa5\x59\xd9\xc7\xdb\x2a\x56\x27\x0c\xc2\xdb\x6d\x21\xb3\x3b\x7c\x2a\x03\xa0\x32\xf9\xa7\x81\xb4\x40\x2c\x98\x2a\x2b\x72\x9e\xf9\x70\x85\x52\xc9\xb9\x62\xba\xb3\xd4\x88\x2c\xae\xb1\x75\xd3\xa7\x59\x73\xdf\x6f\x2b\xbf\x96\xd4\xc2\x82\x29\xbd\x4c\x8a\x92\xd3\xcb\x01\x15\xa0\xe3\x4b\x5f\x57\xd1\x31\xa9\x17\xde\x5a\x6a\x65\x14\x83\xcd\xfa\xd5\xbf\x86\x01\x2d\x76\x9a\x3f\x14\x82\xd5\xc0\x2f\xb8\x7b\x4d\x2d\xf8\x55\x00\x80\x23\xd5\x15\x10\x01\xda\x20\xe9\xaa\x93\x1f\x72\x4a\x6b\x3b\xcd\xa9\xd8\x79\x98\x4c\x02\xc6\xfc\x98\xe0\x97\xd4\x37\x09\x47\xb9\xbd\xc5\x98\xc7\xb8\x3a\xb7\xa5\x51\xa6\x2c\x22\x17\xc6\xc7\xcd\xa4\x1a\x54\xdb\x76\x37\xf8\x30\x2c\x4b\xb4\x21\x23\xd3\x0e\x07\xa2\x77\x19\xb7\xa3\xa0\xbe\xca\x11\xa1\x64\xc1\x75\x25\x95\x8d\x10\x31\x0c\xb0\x52\x54\x68\xfc\x7d\x90\x57\x6c\x1b\xda\x7e\xea\x87\x40\x68\x59\x32\xaa\x9c\x9f\xde\xb2\x33\xaa\xc1\x88\x9a\x49\x95\xf7\x0e\xcc\x99\x64\x7a\xc5\xb1\xde\xee\x77\x80\x48\x55\x50\x5d\xdd\xf8\x31\x18\x99\x22\x91\x1a\x77\x25\x26\x3b\xc5\x66\x36\x0e\x19\x59\x8a\xe6\x47\x49\xa8\xb0\x86\xaa\xa1\x2e\x92\xce\x57\x5c\x2e\x69\xe6\x86\x02\xe0\x46\xf3\x7a\xf0\xc2\x5e\x6b\x8a\x2f\x33\x72\x97\x2d\x9e\x36\xe4\x13\x7c\xc7\x90\xf8\x77\x0c\x6d\x75\xc7\xec\x51\x70\xc0\xdc\x0a\x87\xf7\xff\x34\x7c\xd4\x08\x88\x09\x68\x06\xf1\xd7\x6a\xab\x2d\x2b\x17\x03\xa0\x27\x3d\x93\xf1\xb7\xc8\xe7\xf0\x24\x5f\x87\xc4\xd1\x28\x46\x75\x08\xf1\x69\x4c\x10\xf4\xad\xe2\x6c\x46\x4e\xe9\x92\x15\xa7\x54\xef\x72\xe5\x81\x3c\x84\x4c\x35\xec\x78\x7e\x4c\x26\x57\xad\x30\x99\x4b\x59\xbd\x67\xd5\x10\x02\x41\x14\x18\x32\x85\x10\x3c\x2b\x09\xd8\x5a\x1d\x89\x5f\xf8\x2d\xaf\xfa\xd6\x23\x0c\x5c\xec\x2f\xe2\x4a\x87\xd1\xce\x86\xae\x71\xf7\x02\xd7\x0a\xcc\x93\xd9\xa6\x17\x39\x82\xa0\x34\x74\x79\x53\xae\xed\x67\xba\xb0\x63\xae\x6a\x64\xf6\xbe\x89\xeb\x5e\x53\xcf\xda\x42\xdc\x74\xd4\x69\xf0\x15\xb5\x63\xe3\x11\x3d\x87\x6b\xa3\xe4\xed\x52\x30\xfa\xbc\xa8\x84\x76\x53\x07\x7f\x0f\x48\xfe\xd3\x30\x9f\xdf\x16\xf1\x30\x07\xff\x9b\x39\x01\x2f\x19\x2e\x77\xe6\x7a\xb5\x06\x18\xff\xaa\x1a\xfc\x1f\x7a\xf7\xfd\xc8\x3a\xe7\x63\x1f\x30\xa1\xd8\x3d\xe4\x51\x08\xc8\x0f\x65\x44\x30\x40\xf2\x1a\x82\xf1\x21\xe9\x2a\x5b\x9a\xba\x16\x57\xa5\xa3\x6a\x32\x89\x6f\xad\xfb\x28\xb4\xc1\x58\x52\xb5\xc2\x04\xad\x7b\x84\x3a\x18\xd7\xa9\x46\x34\x16\x15\x30\x47\xb6\xd7\x6f\x78\x5e\x2d\x2b\x0f\xa0\x99\x2a\x57\x40\xcf\x31\xd2\x22\x33\x54\x39\x83\xb7\xfd\x90\xcc\xfb\xe7\x57\xdb\x46\xe6\xab\x55\x1a\x08\x31\xf7\xdd\x13\xbe\xab\x69\xd5\x35\xdf\xdd\x9a\x47\xa1\x46\x93\xdb\xfb\x02\x70\x53\xa3\x07\xe8\x79\x81\x14\xb1\xc4\x4e\xdd\xe7\x3f\x6f\x29\x18\xda\xc1\x33\xf6\x4c\x10\xb6\x9a\xa9\x7b\x96\x77\x3c\x8c\xf6\x8d\xcd\xee\xdf\x5a\xfe\xe8\xa6\x7d\xbb\xec\xe4\xcf\xbf\xbe\xfa\x6f\x00\x00\x00\xff\xff\x9d\xd4\xd6\xc1\xcd\x57\x0c\x00") func operatorsCoreosCom_clusterserviceversionsYamlBytes() ([]byte, error) { return bindataRead( @@ -125,7 +125,7 @@ func operatorsCoreosCom_clusterserviceversionsYaml() (*asset, error) { return a, nil } -var _operatorsCoreosCom_installplansYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x5b\x4b\x73\xe3\x36\xf2\xbf\xfb\x53\x74\x39\x87\x24\x55\x96\x94\xc9\xff\x92\xf2\xcd\x7f\x67\xb3\xe5\xdd\x24\xeb\x1a\x4d\xe6\x92\xca\xa1\x45\xb6\x24\xc4\x20\x80\xe0\x21\x59\x9b\xcd\x77\xdf\x6a\x80\xa4\x28\x89\x2f\x69\x3c\xf6\xe2\x62\x8b\x04\x1a\xfd\x40\x77\xff\x1a\x00\xd1\x88\x8f\x64\x9d\xd0\xea\x16\xd0\x08\x7a\xf6\xa4\xf8\x97\x9b\x3e\x7d\xe7\xa6\x42\xcf\x36\xef\xae\x9e\x84\xca\x6f\xe1\x3e\x38\xaf\x8b\xf7\xe4\x74\xb0\x19\x7d\x4f\x4b\xa1\x84\x17\x5a\x5d\x15\xe4\x31\x47\x8f\xb7\x57\x00\xa8\x94\xf6\xc8\x8f\x1d\xff\x04\xc8\xb4\xf2\x56\x4b\x49\x76\xb2\x22\x35\x7d\x0a\x0b\x5a\x04\x21\x73\xb2\x91\x78\x35\xf5\xe6\x9b\xe9\xbb\xef\xa6\xdf\x5c\x01\x28\x2c\xe8\x16\x84\x72\x1e\xa5\x34\x12\x95\x9b\x6a\x43\x16\xbd\xb6\x6e\x9a\x69\x4b\x9a\xff\x14\x57\xce\x50\xc6\x53\xac\xac\x0e\xe6\x16\x5a\xfb\x24\x6a\x15\x27\xe8\x69\xa5\xad\xa8\x7e\x03\x4c\x40\xcb\x22\xfe\x9f\x24\x7c\x48\x93\x3e\x4a\x54\xf1\xa9\x14\xce\xff\xf3\xf8\xcd\x8f\xc2\xf9\xf8\xd6\xc8\x60\x51\x1e\xb2\x1a\x5f\xb8\xb5\xb6\xfe\xe7\xfd\xc4\x3c\x91\x30\xe9\x95\x50\xab\x20\xd1\x1e\x8c\xba\x02\x70\x99\x36\x74\x0b\x71\x90\xc1\x8c\xf2\x2b\x80\x52\x37\x25\x91\x09\x60\x9e\x47\x7d\xa3\x7c\xb4\x42\x79\xb2\xf7\x5a\x86\x42\xd5\x93\x70\x9f\x9c\x5c\x66\x85\xf1\x51\xa7\x1f\xd6\x04\x4b\x61\x9d\x87\xfb\xf9\x47\x10\x0a\xfc\x9a\xa2\x4c\xa0\x97\x90\xc9\xe0\x3c\xd9\x39\xd9\x8d\xc8\xa8\x5c\x02\x71\xfe\x9a\x1c\xc0\xef\x4e\xab\x47\xf4\xeb\x5b\x98\xb2\xba\xa7\xdd\x83\x7e\xfd\xe6\xb7\xc6\xb8\x64\xc3\xfb\xf9\xc7\xc6\x33\xbf\x63\x09\x9d\xb7\x42\xad\xfa\x38\x46\x63\xac\xde\xa0\x84\x42\xe7\xd4\xc3\x4b\xd5\xef\x64\xda\xbb\xd3\x17\x1d\x73\xb7\x93\x8c\xca\x6f\x23\x79\xf0\x22\x91\x5c\x68\x2d\xa9\x5c\x2d\x55\xe7\xcd\x3b\x94\x66\x8d\xef\xca\x87\x2e\x5b\x53\x81\x7b\x23\x69\x43\xea\xee\xf1\xe1\xe3\xff\xcd\x8f\x5e\xc0\xa1\x2e\x1a\x4b\x0e\x72\x76\x36\x72\xd1\x80\xe5\xc2\x89\x3e\xc6\x86\x44\x70\x14\x2d\xba\xf7\x80\x13\x36\xf5\xe2\x77\xca\x7c\xe3\xb1\xa5\x3f\x82\xb0\x94\x37\x67\x67\x8d\x54\xae\x7c\xf4\x98\xb5\xd3\x78\x64\x2c\xcf\xe5\x1b\x9e\x94\x5a\x23\x96\x1c\x3c\x3f\x92\xec\x3f\x93\xa3\xb7\x00\xac\x90\x34\xf2\x40\xd6\xd2\x05\x28\x2f\xb5\xc8\x62\xfa\xb5\x70\x60\xc9\x58\x72\xa4\xfc\x5e\x0d\xaa\x94\x72\x7a\x42\x9c\x97\x2b\x59\xc7\x7e\x19\x64\xce\x11\x69\x43\xd6\x83\xa5\x4c\xaf\x94\xf8\x77\x4d\xdd\x81\xd7\xc9\x47\xd0\x93\xf3\x10\x9d\x4c\xa1\x84\x0d\xca\x40\x37\x80\x2a\x3f\xa1\x5d\xe0\x0e\x2c\xf1\xbc\x10\x54\x83\x62\x1c\xe2\x4e\x79\xf9\x49\x5b\x36\xe1\x52\xdf\xc2\xda\x7b\xe3\x6e\x67\xb3\x95\xf0\x55\xac\xcd\x74\x51\x04\x25\xfc\x6e\x16\xc3\xa6\x58\x04\xb6\xe7\x2c\xa7\x0d\xc9\x99\x13\xab\x09\xda\x6c\x2d\x3c\x65\x3e\x58\x9a\xa1\x11\x93\x28\x8c\x8a\xf1\x76\x5a\xe4\x5f\xd8\x32\x3a\xbb\xa3\x89\x5b\x1d\x00\xaa\xc0\x77\xa6\xb1\x38\x24\x82\x70\xbc\xf2\x22\xc1\x24\xec\xde\x26\xfc\x88\xd5\xf8\xfe\x6f\xf3\x0f\x50\x71\x94\xec\x96\x4c\xb4\xef\xda\xa2\xa1\xca\x5a\xac\x59\xa1\x96\x64\xd3\xc8\xa5\xd5\x45\xa4\x4a\x2a\x37\x5a\x28\x1f\x7f\x64\x52\x90\xf2\xe0\xc2\xa2\x10\xde\xc5\x65\x4d\xce\xb3\x21\x4f\x09\xdf\xc7\xdc\x04\x0b\x82\x60\x72\xf4\x94\x9f\x76\x79\x50\x70\x8f\x05\xc9\x7b\x74\xf4\xea\xb6\x63\x1b\xb9\x09\x1b\x64\xb4\xf5\x9a\x99\xf7\x74\xc0\x89\xd7\x03\x54\x49\xb3\xd3\xdc\x8d\xa8\x33\x37\x94\xd5\xde\x58\x47\x99\x3b\x63\xa4\xc8\x92\xdb\xd5\xab\x8d\x1d\x67\x51\x87\x26\x3a\x76\x93\x4e\x76\xba\x02\x11\xa4\x84\x77\x1a\xc8\x0f\x5f\x9d\x4c\xc4\xaf\x46\x25\x36\xe8\x89\x62\x10\x23\x59\x9a\xfa\xf4\xcd\xb0\x7b\x70\xab\x72\x10\xbb\x09\xaf\xd3\xe0\xc8\xee\x33\x9b\xd1\x52\x64\x3b\x58\x6a\xcb\x61\xab\xa1\xf2\xd3\x35\xc7\xed\xc1\x43\x11\x5c\x5c\xb9\x5a\x11\x1b\xe1\xfa\x2e\x78\x5d\xa0\x17\xd9\x35\x68\x0b\xd7\x3f\xa1\x0a\x28\xaf\xdb\x86\x77\xae\x9d\xbd\x98\x6d\xda\x6f\x4f\x70\xfb\xd6\xad\xe5\x6e\x5a\x68\x2d\xee\x5a\xde\x0a\x4f\x45\xeb\xb0\x01\xee\x57\xa4\x38\xe3\xb5\xa4\x9b\xfd\x50\x8e\xe1\x2b\xb2\x27\xef\xd3\xc2\xed\x1e\xd7\x31\x65\x1a\x56\xc3\xb4\xb3\xc6\x3b\x8f\x3e\x9c\xc8\x39\xb4\x9a\x9a\x0e\x19\x09\x34\x82\x67\x89\x07\x96\xda\x16\xc9\x21\x71\xa1\x43\x0a\x8c\x69\x32\xd0\xcb\x53\x11\x3c\x19\x57\xfb\x1d\x7b\x6e\xa6\x0b\x23\xc9\x1f\x42\x8b\xe9\xd5\x69\x64\x4e\x34\x39\x30\x7b\x8b\x42\xc6\x89\x30\xf3\x01\x65\x9c\x8f\x4a\x38\xb2\x73\x9e\x8a\xe3\xb5\x78\x61\x0c\xc8\xd0\xa3\xd4\xab\x79\x6b\x56\xe3\x0e\x66\x8d\x8e\xce\xf1\x6c\xef\x49\x05\x0e\xff\xe5\xda\xbd\xcb\x32\x1d\x94\x7f\x4f\xcb\x8b\x9d\xbd\x9b\x24\x58\x5a\x92\x25\x95\x95\x80\xc6\xa5\x0e\x80\xa9\x07\xf8\x35\x7a\x8e\x11\xc1\xb5\xc4\xb2\xa8\x36\x0d\xb9\x4e\xe5\x41\x5e\x23\xbc\xca\x50\xdd\xfe\xde\xaa\xe7\x21\xd5\x40\x2f\x84\x6b\xd5\xc8\xdd\xe3\x43\x05\xd2\x12\x36\xa3\x4a\xe2\x16\x1c\xd6\x64\xb0\xc3\xbf\xb8\x2d\x05\xc9\x3c\xc2\xf2\x31\x1c\x74\xd8\x84\xdb\x43\xa9\xfe\x88\x51\xbc\x06\x04\x23\x28\xa3\x03\xb4\x18\x55\x49\x98\x97\x0f\x39\x1d\x5b\x2a\xdf\xdd\x24\xe4\xd1\xc3\x2a\xa4\x6a\xaf\x44\x95\x1e\x85\x02\x64\x34\x24\x72\xf8\xc7\xfc\x5f\x3f\xcf\xfe\xae\x93\x34\x6c\x6f\x72\x2e\x79\x49\x41\xca\xdf\x80\x0b\xd9\x1a\xd0\xb1\x30\xbc\xf6\xd9\xb7\x68\x5a\xa0\x12\x4b\x72\x7e\x5a\x52\x23\xeb\x7e\xfd\xf6\xb7\x2e\x4d\x02\xfc\xa0\x2d\xd0\x33\xb2\xfb\xde\x80\x48\xfa\xaf\x21\x56\xb9\xf0\x62\x0a\x62\xe1\x6b\x9a\xb0\x15\x7e\x1d\x59\x35\x3a\x2f\x85\xdc\x46\x21\x3c\x3e\x71\x8e\x49\x42\x04\x2e\x16\x9f\x5a\x63\x5c\x6a\xd7\xa9\x26\xac\x59\xfd\x93\xeb\x9f\xbf\xae\xe1\xab\xed\x9a\x2c\xc1\x35\xff\xbc\x4e\x8c\xd4\xd0\x9a\x9f\x55\x2b\x65\xcf\x50\x74\x03\x6f\xc5\x6a\x45\xb6\xc3\x11\xb8\x45\xf8\xc7\x90\xe9\x6b\xce\x7a\x62\x09\x4a\x37\x88\x44\xd2\x6c\x2f\x43\x99\x58\x0a\xca\x4f\x18\xfc\xf5\xdb\xdf\xae\xe1\xab\x43\x3d\x74\x4e\x26\x54\x4e\xcf\xf0\x6d\xaa\x9b\x85\x63\x5d\x7d\x3d\x85\x0f\x71\x45\xec\x94\xc7\x67\x9e\x2b\x5b\x6b\x47\x0a\xb4\x92\x3b\x96\x70\x8d\x1b\x02\xa7\x0b\x82\x2d\x49\x39\x49\xe0\x29\x87\x2d\xee\xda\x22\x71\xd5\x2a\x53\xf1\x32\x45\x30\x68\xfd\x40\x41\x53\x6a\x63\xc8\x91\xda\xb0\x7d\xd5\xc6\xfa\x50\xc4\xfa\x23\x3d\xfb\x0d\x11\xf2\x68\x9d\xc4\x12\xfd\x13\x75\xf2\x73\x63\x0d\x5f\xa4\x93\xa7\xb0\x20\xab\xc8\x53\x54\x4b\xae\x33\xc7\x1a\xc9\xc8\x78\x37\xd3\x1b\x4e\x11\xb4\x9d\x6d\xb5\x7d\x12\x6a\x35\xe1\x45\x3a\x49\x2b\xc1\xcd\xe2\x76\xd6\xec\x0b\xd5\x02\x67\xcf\x52\x41\x27\x7a\x39\x57\x0f\x91\xd0\x5b\x2a\x83\xe7\x77\xb3\x4b\x75\x51\x55\x30\xe7\xe4\xbc\x1e\x8d\xcc\x53\xe8\xc9\x8e\xe9\x72\x6c\xd8\xae\x45\xb6\xae\x76\x2f\x1a\xb1\xb9\xc0\x3c\x05\x6f\x54\xbb\x37\xf3\x2c\xd6\x78\xb0\xcc\xd3\x6e\x52\xee\xd8\x4e\x50\xe5\xfc\xbf\x13\xce\xf3\xf3\x4b\x55\x1c\xc4\x27\x07\xa1\x5f\x1e\xbe\x7f\x5b\x7f\x0b\xe2\xd2\x88\xf3\x3c\xd9\x4f\x3e\x29\xd0\x4c\xca\x52\xc8\xeb\x42\x64\x27\xfd\x17\x41\xe5\x92\x7e\xd4\xfa\x29\x98\x56\x80\x76\xa0\xb1\xff\x6f\xf6\xae\x2a\xcd\xb2\x4c\x17\x6a\x62\xac\x5e\x59\x46\x1d\x8d\x5d\x11\x30\x41\x4a\x40\x95\x43\x50\x06\xb3\x27\x5c\x51\x39\x69\x4c\xa4\xc4\x90\x54\x97\x3b\x2b\xb1\xc0\xeb\x86\x98\x17\x54\x73\x9d\xdc\xa7\xdd\xa4\x92\xcf\x0e\x36\x2b\xc4\xc0\x3c\xc6\x3a\xa3\xe4\x7b\x98\xdf\x41\x50\xdc\x57\x82\xa4\x76\x54\x88\xbc\xa7\xae\x6c\x3e\x01\x91\xb3\x5f\x2d\x45\x4b\xd1\x59\x75\x31\xd8\x89\x3b\x26\x5c\xde\x49\x6c\xab\x75\x60\x04\x7c\x87\x13\x3e\xbb\xe1\xdb\x81\x35\xee\x8f\x86\x55\x16\xa9\x02\x55\xa9\xe5\x83\x6e\xf1\x49\x69\x05\x16\x09\xb6\xe8\x62\xe4\x93\x1b\xca\xe3\x86\x5d\xb7\x97\x0e\x5a\x64\x9c\xb4\x30\xaa\x64\x69\x91\xf7\x82\xc2\xa5\xc9\xf8\x40\x4d\x30\xa2\x88\x69\xe1\xa9\x27\x02\xa6\xf6\x3a\x05\x4d\x6a\x6f\x59\xd6\xa4\xf6\xb6\xc5\x4d\x6a\xaf\x5e\xe2\xa4\xf6\xaa\x85\x4e\x6a\xaf\x57\xee\xa4\x76\x61\xd1\x53\xea\x67\x9c\x13\xf6\x15\x40\xa9\x9d\xe7\x7f\xe7\x15\x43\xa9\xbd\x79\x49\x74\x96\xc6\xfa\xca\xa3\x4b\x34\x76\x5e\xa9\xd4\xa9\xb1\xcf\x5a\x30\x9d\xad\xa0\xde\xe2\xe9\x52\x2d\x9d\x59\x48\x7d\x2e\x55\xf5\x96\x53\x67\x69\x6a\x64\x69\x75\x89\xbe\x3e\x5f\x99\xd5\xa9\xd6\xff\x8d\x62\xeb\x2c\x03\xf4\x14\x5e\x97\x28\xfd\xac\x22\xac\x53\x8f\x9f\xb3\x14\x3b\x43\x3b\xe7\x95\x65\xa9\x65\x5a\xa5\x0b\x38\x3d\x68\xf4\x10\x53\xd7\x03\x8e\xcf\x6c\x58\x52\x94\x07\xa7\x26\xcd\x72\x68\x08\x36\x77\x95\x5e\xa9\xf5\x14\x60\x4d\x22\x03\xd8\x7b\xb8\x26\x4a\x6d\x52\x1e\x35\x0d\x74\xe2\x39\x7b\xba\x8c\x43\xfa\x00\x12\x9d\xff\x60\x51\xb9\xa8\xd7\x0f\x62\x28\x5b\x1d\x59\xe4\x47\xe4\xf2\x52\x14\x75\x35\x99\xec\x03\xbe\x26\x59\x16\x2e\xf1\xa0\xb5\x3c\x43\x63\x7c\xa9\xb4\x5f\x77\x15\x97\xfb\x36\xd2\x31\xb9\xa5\x33\xbb\x5b\xc8\xd1\xd3\x84\x39\x1a\x14\xfb\x97\x78\x69\xe1\xc5\x44\xe6\x5a\xcd\x58\xbd\x68\xbb\x06\xf1\x4a\x52\x15\xe4\x1c\xae\xce\x13\xe7\x0e\xd6\xa1\x40\x05\x96\x30\xc7\x85\xa4\x8a\x08\xe3\xd7\x78\x2d\x41\xad\x20\x27\x8f\x42\xba\xc6\x69\xe8\xde\xbe\x2f\x26\xac\x25\x74\x43\x59\x0d\x4e\x6f\xb7\xa5\x61\xf1\xe8\xff\xc0\x1e\x5f\xba\x68\xe4\xcf\xc1\x69\xfb\xb9\x73\x2f\xa7\xf3\xea\xf4\xf8\x90\xc9\x9b\xea\xfe\xc1\x07\x1b\xe8\x06\x7e\x40\xe9\xe8\x06\x7e\x51\x4f\x4a\x6f\x5f\x8e\xdf\xd8\xf1\x2c\xbd\xee\x4c\xe4\xaa\xe6\xf3\x05\x58\xd9\xef\xe2\x8c\x0c\xf6\x0f\xf5\x80\x6a\x27\xae\xdc\x89\x99\x04\x25\xfe\x08\x87\x65\x61\x7d\x90\xfb\xd5\x71\xc1\x78\x3f\xff\x18\x17\x47\xda\x56\x71\xa9\x6c\xac\x8a\xf0\xfb\xf9\x47\xf7\xf5\x40\x6e\xe8\x95\xca\xf4\x6e\x48\x8c\xc7\x03\x8f\xe8\xd7\x47\x55\xaf\xd4\x59\xe3\x4a\xe2\x7e\x6f\xce\x84\xf6\x73\xea\xaa\x3d\xf8\x2f\x1d\xb3\x2e\x32\x94\x72\xc7\x05\xa0\x28\xd8\x9f\x6b\xf0\x36\x94\x0c\xfb\x05\x1e\x91\x57\x4e\x7c\x94\x96\x4b\xca\xbc\xd8\x50\x63\x78\x65\x9f\xb4\x1f\x49\x79\x29\xe1\x27\x31\x57\xed\xf4\x8d\x64\xed\x7d\xd9\xbd\x5a\x5f\xcd\x65\xb3\xd7\x77\x49\x34\x96\xfc\x69\xad\x29\x82\xa5\x0e\x2a\x07\xf4\xd1\x70\x17\xf2\x7c\x78\x13\xe3\xf5\x6e\xf9\xf4\xc3\xae\x97\xd9\x8b\xee\x5c\xec\x8d\xdb\x37\x35\x9a\xeb\x03\x73\xfb\xa0\x49\xcf\x94\x85\xd2\x21\x3a\x88\x8f\xb9\xfb\x35\x88\xd5\x86\x57\xf8\x39\x98\x69\x54\x90\x1e\x9b\xe5\xc7\xa2\x96\x17\x9d\x74\x10\x54\x8c\x72\xcc\xfe\xdc\xde\x8e\xf2\xdf\xa7\xd4\x1e\x37\xce\x33\x2c\x48\x66\xe8\x28\x3f\xce\xf8\x09\xf2\x8f\x49\xf3\x23\x18\x1d\x4a\xed\x23\x48\xf4\x67\xdb\xae\xbb\xa1\xb5\xd0\x31\xf7\xa6\x5e\x8b\xea\x8e\x53\x5d\xd4\x1c\xac\x6f\x0e\x3f\x08\x19\xd9\x98\xca\xd2\x15\x5e\x64\x5d\x6d\xd7\xfa\xe2\x40\xda\x63\xed\x31\x0e\xfe\x53\x05\x1e\x99\x8f\x08\x2c\x27\x27\xc0\xb2\x4c\xbe\x7b\x60\xd9\xb1\x7b\xdb\xbc\x87\x17\xb3\x76\x81\xbb\x78\x29\xb6\x30\xda\x7a\x4c\x27\x6b\x41\xe5\x64\x9d\x47\x95\x33\xbd\xed\x7a\xc7\x1a\x6b\xf7\x6b\x56\xd9\x1a\x1d\x08\xef\x20\x6d\x17\xf8\xd2\xde\x67\x5f\xf3\x8c\x77\xe4\x06\x75\xd4\xb0\xd5\x23\x0f\xa8\x71\xcc\xc1\xe4\x29\xbf\x1f\xd8\xb5\xd7\x88\xfd\x8c\x49\xec\xb9\xbb\xf9\xa9\x51\x7d\xee\xc9\x1c\x07\xeb\x86\x10\x2a\xd6\x0c\x1b\x91\xa7\xfb\x8b\x64\x40\xa8\x97\x89\xc9\xc3\xa7\x89\xe9\x94\xac\xdb\x2b\x27\xf5\xd6\x56\x67\x87\x9e\xb2\x7b\x38\x27\x68\x93\xbe\x24\x1a\x0a\x1d\x5d\xd7\x7f\x53\xab\xa5\xf8\xc4\x68\xdb\x7d\x19\x37\xb5\xf1\xc0\x94\x4d\x5e\x7d\xa1\xd6\x63\xfa\xc6\x57\x09\xf1\xe2\xba\xb7\x25\xa8\x63\x00\xda\x07\x56\x87\x96\x06\x8c\xdd\x5e\x19\xb3\xb9\x32\x49\xdf\xb6\xf5\xf6\x78\x12\x2d\x1f\xa5\x34\x3b\x30\x4a\xec\xed\xb0\xbf\xd2\x3c\xb2\x5b\xdc\x23\xee\xed\x5b\x1e\xac\x76\xf6\x19\xb7\xdb\x93\x3e\xec\x7b\x89\x9d\xd0\xe1\x73\xa0\x91\x84\xaa\x83\xcc\x17\x21\x36\x7c\xd6\x32\x92\xd0\xde\x34\x2f\x4c\x6e\xc4\x41\xc7\x48\x9a\x9b\x31\x87\x00\x2f\x00\x78\xce\x8b\x14\xe5\x36\x47\x4f\x9e\x33\x68\xbd\xc8\x82\x44\xbb\x0f\x19\x31\x71\x8c\x0b\x12\x97\x85\x45\xe7\xd1\xfa\x2e\xc8\x3c\x46\xc2\x79\x45\xa0\x12\x2d\xee\xff\x6d\xd7\xa4\xea\x43\xe9\xf4\x49\x2e\x2c\x68\xc5\x19\xdc\x18\xb9\xeb\x52\x7a\xda\xf0\xaf\x3e\xf4\x91\xc2\x79\xca\xab\x8f\x49\x23\x48\x19\x7b\x61\xa8\xd3\xb0\x5d\xd0\xde\x91\xdd\x50\x7e\x0b\xde\x86\xfa\x91\xd7\x96\xf1\xde\xc1\xb3\xb0\xa8\xf9\xdb\x6b\xac\x5c\x29\xf0\xe7\x5f\x57\xff\x0d\x00\x00\xff\xff\x73\xdc\xf0\xf8\xe3\x3c\x00\x00") +var _operatorsCoreosCom_installplansYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x5b\x4b\x73\x23\xb7\x11\xbe\xeb\x57\x74\xc9\x07\xdb\x55\x22\xb9\xde\x5c\x52\xba\x29\x72\x9c\x52\x62\x3b\xaa\xe5\x7a\x2f\xae\x3d\x34\x67\x9a\x24\x2c\x0c\x00\xe3\x41\x2e\xe3\xf8\xbf\xa7\x1a\x98\x19\x0e\xc9\x79\x91\xab\x95\x82\x8b\xc4\x19\xa0\xd1\x0f\x74\xf7\xd7\x00\x06\x8d\xf8\x40\xd6\x09\xad\x6e\x01\x8d\xa0\x4f\x9e\x14\xff\x72\xd3\xa7\xbf\xba\xa9\xd0\xb3\xcd\x77\x57\x4f\x42\xe5\xb7\x70\x1f\x9c\xd7\xc5\x3b\x72\x3a\xd8\x8c\xbe\xa7\xa5\x50\xc2\x0b\xad\xae\x0a\xf2\x98\xa3\xc7\xdb\x2b\x00\x54\x4a\x7b\xe4\xc7\x8e\x7f\x02\x64\x5a\x79\xab\xa5\x24\x3b\x59\x91\x9a\x3e\x85\x05\x2d\x82\x90\x39\xd9\x48\xbc\x9a\x7a\xf3\x66\xfa\xf6\xcd\xf4\xcd\x15\x80\xc2\x82\x6e\x41\x28\xe7\x51\x4a\x23\x51\xb9\xa9\x36\x64\xd1\x6b\xeb\xa6\x99\xb6\xa4\xf9\x4f\x71\xe5\x0c\x65\x3c\xc5\xca\xea\x60\x6e\xa1\xb5\x4f\xa2\x56\x71\x82\x9e\x56\xda\x8a\xea\x37\xc0\x04\xb4\x2c\xe2\xff\x49\xc2\x87\x34\xe9\xa3\x44\x15\x9f\x4a\xe1\xfc\xbf\x8e\xdf\xfc\x28\x9c\x8f\x6f\x8d\x0c\x16\xe5\x21\xab\xf1\x85\x5b\x6b\xeb\x7f\xde\x4f\xcc\x13\x09\x93\x5e\x09\xb5\x0a\x12\xed\xc1\xa8\x2b\x00\x97\x69\x43\xb7\x10\x07\x19\xcc\x28\xbf\x02\x28\x75\x53\x12\x99\x00\xe6\x79\xd4\x37\xca\x47\x2b\x94\x27\x7b\xaf\x65\x28\x54\x3d\x09\xf7\xc9\xc9\x65\x56\x18\x1f\x75\xfa\x7e\x4d\xb0\x14\xd6\x79\xb8\x9f\x7f\x00\xa1\xc0\xaf\x29\xca\x04\x7a\x09\x99\x0c\xce\x93\x9d\x93\xdd\x88\x8c\xca\x25\x10\xe7\xaf\xc9\x01\xfc\xe6\xb4\x7a\x44\xbf\xbe\x85\x29\xab\x7b\xda\x3d\xe8\xd7\x37\x1f\x1b\xe3\x92\x0d\xef\xe7\x1f\x1a\xcf\xfc\x8e\x25\x74\xde\x0a\xb5\xea\xe3\x18\x8d\xb1\x7a\x83\x12\x0a\x9d\x53\x0f\x2f\x55\xbf\x93\x69\xef\x4e\x5f\x74\xcc\xdd\x4e\x32\x2a\xbf\x8d\xe4\xc1\x8b\x44\x72\xa1\xb5\xa4\x72\xb5\x54\x9d\x37\xdf\xa1\x34\x6b\xfc\xae\x7c\xe8\xb2\x35\x15\xb8\x37\x92\x36\xa4\xee\x1e\x1f\x3e\xfc\x65\x7e\xf4\x02\x0e\x75\xd1\x58\x72\x90\xb3\xb3\x91\x8b\x06\x2c\x17\x4e\xf4\x31\x36\x24\x82\xa3\x68\xd1\xbd\x07\x9c\xb0\xa9\x17\xbf\x51\xe6\x1b\x8f\x2d\xfd\x1e\x84\xa5\xbc\x39\x3b\x6b\xa4\x72\xe5\xa3\xc7\xac\x9d\xc6\x23\x63\x79\x2e\xdf\xf0\xa4\xd4\x1a\xb1\xe4\xe0\xf9\x91\x64\xff\x9d\x1c\xbd\x05\x60\x85\xa4\x91\x07\xb2\x96\x2e\x40\x79\xa9\x45\x16\xd3\xaf\x85\x03\x4b\xc6\x92\x23\xe5\xf7\x6a\x50\xa5\x94\xd3\x13\xe2\xbc\x5c\xc9\x3a\xf6\xcb\x20\x73\x8e\x48\x1b\xb2\x1e\x2c\x65\x7a\xa5\xc4\x7f\x6a\xea\x0e\xbc\x4e\x3e\x82\x9e\x9c\x87\xe8\x64\x0a\x25\x6c\x50\x06\xba\x01\x54\xf9\x09\xed\x02\x77\x60\x89\xe7\x85\xa0\x1a\x14\xe3\x10\x77\xca\xcb\x4f\xda\xb2\x09\x97\xfa\x16\xd6\xde\x1b\x77\x3b\x9b\xad\x84\xaf\x62\x6d\xa6\x8b\x22\x28\xe1\x77\xb3\x18\x36\xc5\x22\xb0\x3d\x67\x39\x6d\x48\xce\x9c\x58\x4d\xd0\x66\x6b\xe1\x29\xf3\xc1\xd2\x0c\x8d\x98\x44\x61\x54\x8c\xb7\xd3\x22\xff\xca\x96\xd1\xd9\x1d\x4d\xdc\xea\x00\x50\x05\xbe\x33\x8d\xc5\x21\x11\x84\xe3\x95\x17\x09\x26\x61\xf7\x36\xe1\x47\xac\xc6\x77\x7f\x9f\xbf\x87\x8a\xa3\x64\xb7\x64\xa2\x7d\xd7\x16\x0d\x55\xd6\x62\xcd\x0a\xb5\x24\x9b\x46\x2e\xad\x2e\x22\x55\x52\xb9\xd1\x42\xf9\xf8\x23\x93\x82\x94\x07\x17\x16\x85\xf0\x2e\x2e\x6b\x72\x9e\x0d\x79\x4a\xf8\x3e\xe6\x26\x58\x10\x04\x93\xa3\xa7\xfc\xb4\xcb\x83\x82\x7b\x2c\x48\xde\xa3\xa3\x17\xb7\x1d\xdb\xc8\x4d\xd8\x20\xa3\xad\xd7\xcc\xbc\xa7\x03\x4e\xbc\x1e\xa0\x4a\x9a\x9d\xe6\x6e\x44\x9d\xb9\xa1\xac\xf6\xc6\x3a\xca\xdc\x19\x23\x45\x96\xdc\xae\x5e\x6d\xec\x38\x8b\x3a\x34\xd1\xb1\x9b\x74\xb2\xd3\x15\x88\x20\x25\xbc\xd3\x40\x7e\xf8\xea\x64\x22\x7e\x35\x2a\xb1\x41\x4f\x14\x83\x18\xc9\xd2\xd4\xa7\x6f\x86\xdd\x83\x5b\x95\x83\xd8\x4d\x78\x9d\x06\x47\x76\x9f\xd9\x8c\x96\x22\xdb\xc1\x52\x5b\x0e\x5b\x0d\x95\x9f\xae\x39\x6e\x0f\x1e\x8a\xe0\xe2\xca\xd5\x8a\xd8\x08\xd7\x77\xc1\xeb\x02\xbd\xc8\xae\x41\x5b\xb8\xfe\x09\x55\x40\x79\xdd\x36\xbc\x73\xed\xec\xc5\x6c\xd3\x7e\x7b\x82\xdb\xb7\x6e\x2d\x77\xd3\x42\x6b\x71\xd7\xf2\x56\x78\x2a\x5a\x87\x0d\x70\xbf\x22\xc5\x19\xaf\x25\xdd\xec\x87\x72\x0c\x5f\x91\x3d\x79\x9f\x16\x6e\xf7\xb8\x8e\x29\xd3\xb0\x1a\xa6\x9d\x35\xde\x79\xf4\xe1\x44\xce\xa1\xd5\xd4\x74\xc8\x48\xa0\x11\x3c\x4b\x3c\xb0\xd4\xb6\x48\x0e\x89\x0b\x1d\x52\x60\x4c\x93\x81\x5e\x9e\x8a\xe0\xc9\xb8\xda\xef\xd8\x73\x33\x5d\x18\x49\xfe\x10\x5a\x4c\xaf\x4e\x23\x73\xa2\xc9\x81\xd9\x5b\x14\x32\x4e\x84\x99\x0f\x28\xe3\x7c\x54\xc2\x91\x9d\xf3\x54\x1c\xaf\xc5\x0b\x63\x40\x86\x1e\xa5\x5e\xcd\x5b\xb3\x1a\x77\x30\x6b\x74\x74\x8e\x67\x7b\x4f\x2a\x70\xf8\x2f\xd7\xee\x5d\x96\xe9\xa0\xfc\x3b\x5a\x5e\xec\xec\xdd\x24\xc1\xd2\x92\x2c\xa9\xac\x04\x34\x2e\x75\x00\x4c\x3d\xc0\xaf\xd1\x73\x8c\x08\xae\x25\x96\x45\xb5\x69\xc8\x75\x2a\x0f\xf2\x1a\xe1\x55\x86\xea\xf6\xf7\x56\x3d\x0f\xa9\x06\x7a\x21\x5c\xab\x46\xee\x1e\x1f\x2a\x90\x96\xb0\x19\x55\x12\xb7\xe0\xb0\x26\x83\x1d\xfe\xc5\x6d\x29\x48\xe6\x11\x96\x8f\xe1\xa0\xc3\x26\xdc\x1e\x4a\xf5\x47\x8c\xe2\x35\x20\x18\x41\x19\x1d\xa0\xc5\xa8\x4a\xc2\xbc\x7c\xc8\xe9\xd8\x52\xf9\xee\x26\x21\x8f\x1e\x56\x21\x55\x7b\x25\xaa\xf4\x28\x14\x20\xa3\x21\x91\xc3\x3f\xe7\xff\xfe\x79\xf6\x0f\x9d\xa4\x61\x7b\x93\x73\xc9\x4b\x0a\x52\xfe\x06\x5c\xc8\xd6\x80\x8e\x85\xe1\xb5\xcf\xbe\x45\xd3\x02\x95\x58\x92\xf3\xd3\x92\x1a\x59\xf7\xeb\xdb\x8f\x5d\x9a\x04\xf8\x41\x5b\xa0\x4f\xc8\xee\x7b\x03\x22\xe9\xbf\x86\x58\xe5\xc2\x8b\x29\x88\x85\xaf\x69\xc2\x56\xf8\x75\x64\xd5\xe8\xbc\x14\x72\x1b\x85\xf0\xf8\xc4\x39\x26\x09\x11\xb8\x58\x7c\x6a\x8d\x71\xa9\x5d\xa7\x9a\xb0\x66\xf5\x0f\xae\x7f\xfe\xbc\x86\x6f\xb6\x6b\xb2\x04\xd7\xfc\xf3\x3a\x31\x52\x43\x6b\x7e\x56\xad\x94\x3d\x43\xd1\x0d\xbc\x15\xab\x15\xd9\x0e\x47\xe0\x16\xe1\x1f\x43\xa6\x6f\x39\xeb\x89\x25\x28\xdd\x20\x12\x49\xb3\xbd\x0c\x65\x62\x29\x28\x3f\x61\xf0\xd7\xb7\x1f\xaf\xe1\x9b\x43\x3d\x74\x4e\x26\x54\x4e\x9f\xe0\x6d\xaa\x9b\x85\x63\x5d\x7d\x3b\x85\xf7\x71\x45\xec\x94\xc7\x4f\x3c\x57\xb6\xd6\x8e\x14\x68\x25\x77\x2c\xe1\x1a\x37\x04\x4e\x17\x04\x5b\x92\x72\x92\xc0\x53\x0e\x5b\xdc\xb5\x45\xe2\xaa\x55\xa6\xe2\x65\x8a\x60\xd0\xfa\x81\x82\xa6\xd4\xc6\x90\x23\xb5\x61\xfb\xaa\x8d\xf5\xa1\x88\xf5\x47\x7a\xf6\x2b\x22\xe4\xd1\x3a\x89\x25\xfa\x67\xea\xe4\xe7\xc6\x1a\xbe\x48\x27\x4f\x61\x41\x56\x91\xa7\xa8\x96\x5c\x67\x8e\x35\x92\x91\xf1\x6e\xa6\x37\x9c\x22\x68\x3b\xdb\x6a\xfb\x24\xd4\x6a\xc2\x8b\x74\x92\x56\x82\x9b\xc5\xed\xac\xd9\x57\xaa\x05\xce\x9e\xa5\x82\x4e\xf4\x72\xae\x1e\x22\xa1\xd7\x54\x06\xcf\xef\x66\x97\xea\xa2\xaa\x60\xce\xc9\x79\x3d\x1a\x99\xa7\xd0\x93\x1d\xd3\xe5\xd8\xb0\x5d\x8b\x6c\x5d\xed\x5e\x34\x62\x73\x81\x79\x0a\xde\xa8\x76\xaf\xe6\x59\xac\xf1\x60\x99\xa7\xdd\xa4\xdc\xb1\x9d\xa0\xca\xf9\x7f\x27\x9c\xe7\xe7\x97\xaa\x38\x88\xcf\x0e\x42\xbf\x3c\x7c\xff\xba\xfe\x16\xc4\xa5\x11\xe7\xd3\x64\x3f\xf9\xa4\x40\x33\x29\x4b\x21\xaf\x0b\x91\x9d\xf4\x5f\x04\x95\x4b\xfa\x51\xeb\xa7\x60\x5a\x01\xda\x81\xc6\xfe\xd6\xec\x5d\x55\x9a\x65\x99\x2e\xd4\xc4\x58\xbd\xb2\x8c\x3a\x1a\xbb\x22\x60\x82\x94\x80\x2a\x87\xa0\x0c\x66\x4f\xb8\xa2\x72\xd2\x98\x48\x89\x21\xa9\x2e\x77\x56\x62\x81\xd7\x0d\x31\x2f\xa8\xe6\x3a\xb9\x4f\xbb\x49\x25\x9f\x1d\x6c\x56\x88\x81\x79\x8c\x75\x46\xc9\xf7\x30\xbf\x83\xa0\xb8\xaf\x04\x49\xed\xa8\x10\x79\x47\x5d\xd9\x7c\x02\x22\x67\xbf\x5a\x8a\x96\xa2\xb3\xea\x62\xb0\x13\x77\x4c\xb8\xbc\x93\xd8\x56\xeb\xc0\x08\xf8\x0e\x27\x7c\x76\xc3\xb7\x03\x6b\xdc\x1f\x0d\xab\x2c\x52\x05\xaa\x52\xcb\x07\xdd\xe2\x93\xd2\x0a\x2c\x12\x6c\xd1\xc5\xc8\x27\x37\x94\xc7\x0d\xbb\x6e\x2f\x1d\xb4\xc8\x38\x69\x61\x54\xc9\xd2\x22\xef\x05\x85\x4b\x93\xf1\x81\x9a\x60\x44\x11\xd3\xc2\x53\x4f\x04\x4c\xed\x65\x0a\x9a\xd4\x5e\xb3\xac\x49\xed\x75\x8b\x9b\xd4\x5e\xbc\xc4\x49\xed\x45\x0b\x9d\xd4\x5e\xae\xdc\x49\xed\xc2\xa2\xa7\xd4\xcf\x38\x27\xec\x2b\x80\x52\x3b\xcf\xff\xce\x2b\x86\x52\x7b\xf5\x92\xe8\x2c\x8d\xf5\x95\x47\x97\x68\xec\xbc\x52\xa9\x53\x63\x5f\xb4\x60\x3a\x5b\x41\xbd\xc5\xd3\xa5\x5a\x3a\xb3\x90\xfa\x52\xaa\xea\x2d\xa7\xce\xd2\xd4\xc8\xd2\xea\x12\x7d\x7d\xb9\x32\xab\x53\xad\xff\x1f\xc5\xd6\x59\x06\xe8\x29\xbc\x2e\x51\xfa\x59\x45\x58\xa7\x1e\xbf\x64\x29\x76\x86\x76\xce\x2b\xcb\x52\xcb\xb4\x4a\x17\x70\x7a\xd0\xe8\x21\xa6\xae\x07\x1c\x9f\xd9\xb0\xa4\x28\x0f\x4e\x4d\x9a\xe5\xd0\x10\x6c\xee\x2a\xbd\x52\xeb\x29\xc0\x9a\x44\x06\xb0\xf7\x70\x4d\x94\xda\xa4\x3c\x6a\x1a\xe8\xc4\x73\xf6\x74\x19\x87\xf4\x01\x24\x3a\xff\xde\xa2\x72\x51\xaf\xef\xc5\x50\xb6\x3a\xb2\xc8\x8f\xc8\xe5\xa5\x28\xea\x6a\x32\xd9\x07\x7c\x4d\xb2\x2c\x5c\xe2\x41\x6b\x79\x86\xc6\xf8\x52\x69\xbf\xee\x2a\x2e\xf7\x6d\xa4\x63\x72\x4b\x67\x76\xb7\x90\xa3\xa7\x09\x73\x34\x28\xf6\x2f\xf1\xd2\xc2\xb3\x89\xcc\xb5\x9a\xb1\x7a\xd1\x76\x0d\xe2\x85\xa4\x2a\xc8\x39\x5c\x9d\x27\xce\x1d\xac\x43\x81\x0a\x2c\x61\x8e\x0b\x49\x15\x11\xc6\xaf\xf1\x5a\x82\x5a\x41\x4e\x1e\x85\x74\x8d\xd3\xd0\xbd\x7d\x9f\x4d\x58\x4b\xe8\x86\xb2\x1a\x9c\xde\x6e\x4b\xc3\xe2\xd1\xff\x81\x3d\xbe\x76\xd1\xc8\x5f\x82\xd3\xf6\x73\xe7\x5e\x4e\xe7\xd5\xe9\xf1\x21\x93\x37\xd5\xfd\x83\xf7\x36\xd0\x0d\xfc\x80\xd2\xd1\x0d\xfc\xa2\x9e\x94\xde\x3e\x1f\xbf\xb1\xe3\x59\x7a\xdd\x99\xc8\x55\xcd\xe7\x33\xb0\xb2\xdf\xc5\x19\x19\xec\x1f\xea\x01\xd5\x4e\x5c\xb9\x13\x33\x09\x4a\xfc\x1e\x0e\xcb\xc2\xfa\x20\xf7\x9b\xe3\x82\xf1\x7e\xfe\x21\x2e\x8e\xb4\xad\xe2\x52\xd9\x58\x15\xe1\xf7\xf3\x0f\xee\xdb\x81\xdc\xd0\x2b\x95\xe9\xdd\x90\x18\x8f\x07\x1e\xd1\xaf\x8f\xaa\x5e\xa9\xb3\xc6\x95\xc4\xfd\xde\x9c\x09\xed\xe7\xd4\x55\x7b\xf0\x5f\x3b\x66\x5d\x64\x28\xe5\x8e\x0b\x40\x51\xb0\x3f\xd7\xe0\x6d\x28\x19\xf6\x0b\x3c\x22\xaf\x9c\xf8\x28\x2d\x97\x94\x79\xb1\xa1\xc6\xf0\xca\x3e\x69\x3f\x92\xf2\x52\xc2\xcf\x62\xae\xda\xe9\x1b\xc9\xda\xbb\xb2\x7b\xb5\xbe\x9a\xcb\x66\xaf\xef\x92\x68\x2c\xf9\xd3\x5a\x53\x04\x4b\x1d\x54\x0e\xe8\xa3\xe1\x2e\xe4\xf9\xf0\x26\xc6\xcb\xdd\xf2\xe9\x87\x5d\xcf\xb3\x17\xdd\xb9\xd8\x1b\xb7\x6f\x6a\x34\xd7\x07\xe6\xf6\x41\x93\x3e\x51\x16\x4a\x87\xe8\x20\x3e\xe6\xee\xd7\x20\x56\x1b\x5e\xe1\xe7\x60\xa6\x51\x41\x7a\x6c\x96\x1f\x8b\x5a\x9e\x75\xd2\x41\x50\x31\xca\x31\xfb\x73\x7b\x3b\xca\x7f\x97\x52\x7b\xdc\x38\xcf\xb0\x20\x99\xa1\xa3\xfc\x38\xe3\x27\xc8\x3f\x26\xcd\x8f\x60\x74\x28\xb5\x8f\x20\xd1\x9f\x6d\xbb\xee\x86\xd6\x42\xc7\xdc\x9b\x7a\x2d\xaa\x3b\x4e\x75\x51\x73\xb0\xbe\x39\xfc\x20\x64\x64\x63\x2a\x4b\x57\x78\x91\x75\xb5\x5d\xeb\x8b\x03\x69\x8f\xb5\xc7\x38\xf8\x4f\x15\x78\x64\x3e\x22\xb0\x9c\x9c\x00\xcb\x32\xf9\xee\x81\x65\xc7\xee\x6d\xf3\x1e\x5e\xcc\xda\x05\xee\xe2\xa5\xd8\xc2\x68\xeb\x31\x9d\xac\x05\x95\x93\x75\x1e\x55\xce\xf4\xb6\xeb\x1d\x6b\xac\xdd\xaf\x59\x65\x6b\x74\x20\xbc\x83\xb4\x5d\xe0\x4b\x7b\x9f\x7d\xcd\x33\xde\x91\x1b\xd4\x51\xc3\x56\x8f\x3c\xa0\xc6\x31\x07\x93\xa7\xfc\x7e\x60\xd7\x5e\x23\xf6\x33\x26\xb1\xe7\xee\xe6\xe7\x46\xf5\xb9\x27\x73\x1c\xac\x1b\x42\xa8\x58\x33\x6c\x44\x9e\xee\x2f\x92\x01\xa1\x9e\x27\x26\x0f\x9f\x26\xa6\x53\xb2\x6e\xaf\x9c\xd4\x5b\x5b\x9d\x1d\x7a\xca\xee\xe1\x9c\xa0\x4d\xfa\x92\x68\x28\x74\x74\x5d\xff\x4d\xad\x96\xe2\x33\xa3\x6d\xf7\x65\xdc\xd4\xc6\x03\x53\x36\x79\xf5\x85\x5a\x8f\xe9\x1b\x5f\x25\xc4\x8b\xeb\xde\x96\xa0\x8e\x01\x68\x1f\x58\x1d\x5a\x1a\x30\x76\x7b\x65\xcc\xe6\xca\x24\x7d\xdb\xd6\xdb\xe3\x49\xb4\x7c\x94\xd2\xec\xc0\x28\xb1\xb7\xc3\xfe\x4a\xf3\xc8\x6e\x71\x8f\xb8\xb7\x6f\x79\xb0\xda\xd9\x67\xdc\x6e\x4f\xfa\xb0\xef\x39\x76\x42\x87\xcf\x81\x46\x12\xaa\x0e\x32\x9f\x85\xd8\xf0\x59\xcb\x48\x42\x7b\xd3\x3c\x33\xb9\x11\x07\x1d\x23\x69\x6e\xc6\x1c\x02\x3c\x03\xe0\x39\x2f\x52\x94\xdb\x1c\x3d\x79\xce\xa0\xf5\x22\x0b\x12\xed\x3e\x64\xc4\xc4\x31\x2e\x48\x5c\x16\x16\x9d\x47\xeb\xbb\x20\xf3\x18\x09\xe7\x15\x81\x4a\xb4\xb8\xff\xb7\x5d\x93\xaa\x0f\xa5\xd3\x27\xb9\xb0\xa0\x15\x67\x70\x63\xe4\xae\x4b\xe9\x69\xc3\xbf\xfa\xd0\x47\x0a\xe7\x29\xaf\x3e\x26\x8d\x20\x65\xec\x85\xa1\x4e\xc3\x76\x41\x7b\x47\x76\x43\xf9\x2d\x78\x1b\xea\x47\x5e\x5b\xc6\x7b\x07\xcf\xc2\xa2\xe6\x6f\xaf\xb1\x72\xa5\xc0\x1f\x7f\x5e\xfd\x2f\x00\x00\xff\xff\x6a\x72\xd4\xdc\xe3\x3c\x00\x00") func operatorsCoreosCom_installplansYamlBytes() ([]byte, error) { return bindataRead( @@ -145,7 +145,7 @@ func operatorsCoreosCom_installplansYaml() (*asset, error) { return a, nil } -var _operatorsCoreosCom_olmconfigsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x58\x6d\x6f\xdb\xc8\x11\xfe\xee\x5f\x31\x50\x0f\x38\x29\x27\x51\x76\xae\x48\x13\xf5\x43\x10\xe8\x9a\x83\xd1\x04\x09\x62\x37\x05\xea\xba\xc5\x88\x1c\x92\x5b\x2f\x77\xd9\x7d\xb1\xad\x6b\xfa\xdf\x8b\xd9\xe5\x9b\x2c\x51\xf6\x21\xe9\xf1\x8b\xc4\x7d\x99\x9d\x99\x67\xe6\x99\x59\x62\x2d\x3e\x93\xb1\x42\xab\x15\x60\x2d\xe8\xde\x91\xe2\x37\x9b\xdc\xbc\xb4\x89\xd0\xcb\xdb\xb3\x93\x1b\xa1\xb2\x15\xac\xbd\x75\xba\xfa\x44\x56\x7b\x93\xd2\x4f\x94\x0b\x25\x9c\xd0\xea\xa4\x22\x87\x19\x3a\x5c\x9d\x00\xa0\x52\xda\x21\x0f\x5b\x7e\x05\x48\xb5\x72\x46\x4b\x49\x66\x51\x90\x4a\x6e\xfc\x86\x36\x5e\xc8\x8c\x4c\x10\xde\x1e\x7d\x7b\x9a\x9c\xbd\x4c\x4e\x4f\x00\x14\x56\xb4\x02\x2d\xab\x54\xab\x5c\x14\x36\xd1\x35\x19\x74\xda\xd8\x24\xd5\x86\x34\xff\x54\x27\xb6\xa6\x94\x0f\x28\x8c\xf6\xf5\x0a\x0e\xae\x89\xb2\x5a\x3d\xd0\x51\xa1\x8d\x68\xdf\x01\x16\x7c\x48\xf8\x1f\xed\xfb\xf0\xee\xfd\x3a\x1c\x19\xc6\xa4\xb0\xee\xcf\xbb\xe3\xef\x84\x75\x61\xae\x96\xde\xa0\x1c\x2a\x19\x86\xad\x50\x85\x97\x68\x06\x13\x27\x00\x36\xd5\x35\xad\x60\x2d\xbd\x75\x64\x4e\x00\x1a\x9b\x1b\x3d\x16\x8d\xc1\xb7\x67\x8d\x5a\x36\x2d\xa9\xc2\x56\x49\x60\xd3\xd4\x9b\x8f\xe7\x9f\x7f\xbc\x78\x30\x01\x90\x91\x4d\x8d\xa8\x5d\xf0\x60\xa7\x26\x08\x0b\x08\xa6\xc1\x89\xff\xd4\x5a\x59\xb1\x91\x04\xb9\x36\x10\x15\xf3\x46\xa8\x82\xf7\x24\x03\x79\x6e\xcb\x9a\xea\xcd\xbf\x28\x75\x83\x61\x43\xff\xf6\xc2\x50\x36\x3c\x9a\x15\x6f\x71\x1f\x0c\xd7\x86\x91\x70\x03\x2f\xc7\x67\x10\x65\x3b\xe3\x0f\x6c\xf8\xb2\x78\x30\x0b\xc0\xa6\xc7\x9d\x90\x71\xc8\x91\x05\x57\x52\xeb\x44\xca\x1a\x7f\x81\xce\xc1\x95\xc2\x82\xa1\xda\x90\x25\x15\x83\x90\x87\x51\x35\x26\x25\x7b\xc2\x2f\xc8\xb0\x20\xb0\xa5\xf6\x32\x63\xd7\xdc\x92\x71\x60\x28\xd5\x85\x12\xbf\x74\xd2\x2d\x38\x1d\x8e\x95\xe8\xc8\x3a\x10\xca\x91\x51\x28\xe1\x16\xa5\xa7\x39\xa0\xca\xf6\x64\x57\xb8\x05\x43\x7c\x2e\x78\x35\x90\x18\xb6\xd8\x7d\x5d\xde\x6b\x43\x20\x54\xae\x57\x50\x3a\x57\xdb\xd5\x72\x59\x08\xd7\x66\x61\xaa\xab\xca\x2b\xe1\xb6\xcb\x90\x50\x62\xe3\x39\xda\x97\x19\xdd\x92\x5c\x5a\x51\x2c\xd0\xa4\xa5\x70\x94\x3a\x6f\x68\x89\xb5\x58\x04\x63\x54\xc8\xc4\xa4\xca\x7e\xd7\xc6\x83\x7d\x70\x70\xc4\xdc\x3a\x8e\x87\x9d\xa9\x90\x14\xbf\x12\x2c\x4e\x98\x18\x7e\x51\x60\x34\xb6\xc7\x84\x87\xd8\x8d\x9f\xfe\x74\x71\xd9\x47\x68\xc0\x2d\x42\xd4\x2f\x3d\xe0\xa1\x16\x2d\xf6\xac\x50\x39\x99\xb8\x33\x37\xba\x0a\x52\x49\x65\xb5\x16\xca\x85\x97\x54\x0a\x52\x0e\xac\xdf\x54\xc2\xd9\x10\xc3\x64\x1d\x03\xb9\x2f\x78\x1d\x58\x0b\x36\x04\xbe\xce\xd0\x51\xb6\xbf\xe4\x5c\xc1\x1a\x2b\x92\x6b\xb4\xf4\x9b\x63\xc7\x18\xd9\x05\x03\xf2\x64\xf4\x86\x9c\xbc\xbf\x61\x2f\xc5\x01\x5a\x42\x1d\x85\xbb\xe3\x97\x8b\x9a\x52\x06\x99\xbd\xcc\xbb\x02\xab\xa0\x1a\x10\x50\x8b\xec\x43\x47\x8d\x1e\x3e\x4e\x1c\xfc\xe4\x84\xec\x99\x03\x33\x0f\x54\x7c\xdb\x2c\x0c\x45\x07\x85\x8a\x3a\x32\x93\x33\x0f\xb4\xc4\x87\xcc\x84\x1f\xde\xbd\xef\xe4\xee\xe3\x79\x54\xd5\xc7\xd4\x0d\x6a\x09\xcb\xc7\xac\x75\x2d\x28\x5b\x5f\x7c\x1e\x59\xf6\x78\x46\xb5\xcf\x4f\x0f\x05\x32\x02\xde\x52\xc6\xcc\xd4\x9c\xc6\x46\x7d\x6f\x61\x12\x17\xc1\xfa\xe2\xf3\xa4\xb5\x71\x54\x2e\x63\xd7\x15\x4f\x10\xca\x3a\x94\x92\x32\xc0\x36\x8b\x42\xd5\x8a\x45\x6c\x0e\x77\x25\x19\x02\x6c\x87\x47\xa5\x86\xe5\x59\x27\x98\x75\xd5\x8a\x13\x1d\x1d\x94\x68\x61\x43\xa4\x06\x87\x09\x05\xa8\x46\x85\x7d\x68\xa4\xfc\xcc\xa5\x3e\xca\x70\x68\x0a\x72\x16\x50\xca\x58\xe3\x6b\x4c\x0f\xe3\x18\x9f\xbf\x96\xa4\xc0\x10\x29\x76\x53\x36\x0f\xe8\xdf\x09\x29\x99\xe9\x0d\xa1\xa3\x60\xec\xc0\x71\x76\x12\x3c\x43\x98\x96\xa3\x42\x77\x7c\xd3\x1b\x3b\xa6\x45\x8c\xa8\x8d\xd6\x92\x46\x8c\xad\x31\xbd\xc1\x82\x22\xcd\x5d\x6c\x55\x7a\xce\x65\xe6\x16\xe5\xd7\x06\xcf\xc7\x31\xc1\x3b\x41\x14\xaa\x6b\xcc\xea\xad\x4a\x63\x8d\xe3\x35\xb9\x1e\x07\xba\x51\xd9\xd8\x20\x1a\x6a\x9d\xd9\xa4\x3d\x6e\x30\x06\x35\x19\xa1\x33\x91\xa2\x94\x5b\x48\x4b\x4a\x6f\xf8\xa0\xf1\xf8\x71\xe8\xbc\xe5\xa4\x5d\xa3\x43\xa9\x8b\x8b\x58\xbb\xfe\x18\x19\x9f\x59\x47\xe4\xa2\x69\x05\xa2\x6c\xf0\xdc\x7e\x41\xe6\x4d\x28\xfc\xc7\x02\xbe\x42\x07\x53\x4a\x8a\x04\x26\x2f\x4e\xab\xc9\x2c\x81\xb7\xba\xa9\x25\x35\x1a\xac\xc8\x91\x99\x83\x56\x72\x0b\xa5\xf6\xc6\xc2\x74\x52\x4e\x66\x73\xa8\x84\xf2\x6e\xaf\x80\xf6\xcf\x74\x52\xf1\x32\x54\x19\x58\x4a\xb5\xca\x78\xa7\x9d\xcc\x42\xc1\xda\x50\xa7\x76\x96\xc4\x80\xe4\x9a\xd3\x8d\xcd\x8f\x3a\xa4\xb1\x31\xa3\x1c\xbd\x74\x5d\x3b\x12\xcb\x6b\x27\x03\xee\x84\x2b\x85\x8a\x5e\x19\x82\x70\x3c\x26\x0f\x94\x8f\x21\xc2\x8e\x7b\x9d\x15\xfc\x63\x7a\x75\xba\x78\x75\xfd\xc3\xf4\xef\x49\xfc\x33\x7b\x3d\xb5\x5f\xaa\x2f\xe5\x6c\xf6\xc3\x77\x27\xfb\xe8\x3d\xb1\x98\x44\xa4\xdb\x72\x12\xdf\xfe\xdf\x05\x85\xb1\x11\x83\x3b\xca\x21\xa1\x68\x0c\x6e\x0f\xcc\x0a\x47\xd5\x18\xe9\x0f\x2d\x5c\xb7\x67\xf4\xc5\x28\x23\x87\x42\x46\xf3\x98\x0e\x91\x81\x73\xb1\x73\x25\x48\xbd\x31\xa1\x63\x71\xcc\x47\x6d\x3b\xfb\xe6\xe3\x39\x7c\x1a\xb1\xfe\x51\x1f\xc4\xe7\x70\xfb\xde\x3f\x0b\x90\x68\xdd\xa5\x41\x65\x83\xc2\x97\xa2\x1a\x0b\x44\xee\xf9\xad\xc5\x62\x7c\xde\x10\xda\xd1\xec\x5b\x34\x00\x8f\x4e\xb3\x2d\x87\xa9\xf1\x91\x7a\x0b\x07\x6c\x18\x5b\xf9\x74\xde\x3c\x24\xb5\x0d\x55\x9e\x01\xc7\x03\x01\xbc\x0e\x6d\xd7\xad\xa6\x2c\xb6\xa6\x0c\x75\x13\xd8\x4e\x03\x2a\xed\xca\xf1\x8c\xe4\xe7\x32\x70\x5c\xbc\x92\x6c\x88\x8b\x6e\x4c\x69\xaf\x32\x32\x72\xcb\x34\xd7\x9f\x97\x96\xa8\x0a\xa6\x14\x38\xcf\x63\x71\x14\x36\x30\xcb\x8d\xd2\x77\x2a\xb0\x8a\x6a\xb8\x91\x65\x04\x8d\x3b\x89\x1c\x5d\xb9\x20\xbe\xfa\x44\x31\xa1\x79\x4f\x53\xaa\x1d\x57\xca\x71\x25\x9f\x40\x1c\x2d\xd5\xae\x80\x5b\xea\x85\x1b\x8f\xaa\x26\xa6\xbe\x05\x5e\x8d\xa8\x78\x07\x29\x7d\x85\x5c\xf6\x31\x0b\xdd\x51\x37\xa7\xb8\x10\x85\xbb\x48\x9b\x91\xb8\xd1\x3e\x36\x3c\x3d\x7c\x8f\x22\xd4\xb0\x3a\x2a\xa0\xaa\x76\xdb\xc6\x1b\x5f\xe9\xb3\x0a\xef\xdf\x91\x2a\x5c\xb9\x82\x1f\x9f\xff\xe1\xc5\xcb\x91\x85\x7a\x13\x88\x3d\xfb\x99\x14\xc5\x82\xf7\x2d\xbc\xb7\x2f\x75\x70\x1f\x0b\xee\x49\xda\x7b\x45\x52\xf4\x6b\x62\x4b\xb6\x93\x05\x77\x68\xc1\x92\x83\x0d\x72\x77\xe1\xeb\xe3\xee\xe4\xf2\x1b\xba\x41\x95\xd2\x1c\x44\x7e\xf8\x18\x61\x5b\x8e\x94\x5b\x38\x7b\x3e\x87\x4d\x83\x59\x12\xb3\x2b\xe9\x69\xfd\xea\xfe\x3a\x39\x60\x8c\xb0\xf0\x6a\xfe\x40\x53\x6e\x4d\x7d\x20\x61\x0e\xd3\x23\x4a\x72\x6d\x0d\x1f\x53\x98\xb3\x9b\xfa\x7b\x80\xb3\xa9\xb3\xe4\xb1\x48\xe0\x06\xab\x38\xd2\x44\xb7\xe9\x23\x94\x7b\xf1\xfb\xf1\x80\x11\x4a\x54\xbe\x5a\xc1\xe9\xc8\x92\xc8\xc8\xdf\x22\x3c\xa2\xa4\xbe\x9e\x21\xd3\x72\x61\xb0\xaa\xd0\x89\x14\x44\xc6\x57\xd6\x5c\x90\x19\xa6\x18\x7b\xa4\xd9\x98\x87\x2e\x6b\xe0\xfc\xef\x6d\x43\xa3\x4f\x4a\xba\x8f\x46\x67\x3e\x25\x13\xfa\xc2\xa6\xe7\x49\x87\xcc\xcb\xb7\xe4\x90\x95\x4d\x2b\x4b\xf7\x8c\x55\xf7\xc9\x25\x34\x66\x15\xa1\x12\xaa\xb0\x8d\x32\xc2\x46\xfe\x9b\x1f\x39\x97\xb7\xdd\x95\xc4\xac\xdd\x37\x5d\x16\xd0\x04\x4b\xac\xc8\xc8\xf0\x85\x09\x0a\x8f\x06\x95\x23\xca\x98\x57\x8f\xd3\x47\xd7\xba\x75\x2c\x8f\xfd\xf7\x85\x47\x99\xa4\x21\xa0\xc8\xdc\x6c\x70\xf3\xf5\x22\xf0\xd0\xb7\x23\xa0\xb3\xd3\xe7\x47\xe3\xae\x5b\x77\xe4\x7a\xd0\x36\x8f\x57\x6f\x16\x7f\xc3\xc5\x2f\xd7\xd3\xe6\xcf\xe9\xe2\xd5\x3f\xe7\xab\xeb\x67\x83\xd7\xeb\xd9\xeb\xef\x46\x24\x1d\xee\x28\xfb\x67\x27\x86\xfb\xcb\xc3\x4e\xb0\xcd\x43\x21\xd6\x39\x5c\x1a\x4f\x73\x78\x8b\xd2\xd2\x1c\xfe\xa2\x42\x9d\xfc\x4a\xa7\x91\xf2\xd5\xb8\x76\xdc\xd9\x4c\xf8\xd4\xc9\xf1\x25\x41\xa5\xe3\x6b\x1a\x75\x8f\xb5\xf3\x4f\x73\x12\x2f\x6d\x3e\x8a\xb4\x44\x38\xf8\xc2\x05\x81\x90\x21\xd7\x3a\xa1\x7b\xac\x6a\x49\x49\xaa\xab\xe5\x91\x2f\x60\x3b\x2a\xfc\x9a\x22\x77\xf6\xe2\x09\xd1\x33\xbd\x8a\x31\x72\x3d\xbd\x5a\x34\xff\x9e\xb5\x43\xb3\xd7\x7c\x23\x39\x36\x3f\x7b\xb6\x9c\xbd\x9e\x0e\x22\xef\xfa\x6a\xd1\x87\x5d\x72\xfd\x6c\xf6\x7a\x30\x37\x6b\x83\x30\x96\x8f\x15\x38\xe3\xdb\xba\x60\x9d\x36\xdc\xa9\xec\x8c\xf9\x4d\xf7\x6d\xb5\x77\x7e\x13\xb1\xf0\x9f\xff\x9e\xfc\x2f\x00\x00\xff\xff\xf7\x33\xa2\x7e\x62\x19\x00\x00") +var _operatorsCoreosCom_olmconfigsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x58\x6d\x6f\xdb\xc8\xf1\x7f\xef\x4f\x31\xd0\xff\x80\x93\x72\x12\x65\xe7\xfe\x48\x2f\xea\x0b\x23\xd0\x35\x07\xa3\x09\x12\xc4\x6e\x0a\xd4\x75\x8b\x11\x39\x24\xb7\x5e\xee\xb2\xfb\x60\x5b\xd7\xf4\xbb\x17\xb3\xcb\x27\x59\xa2\xec\x43\xd2\xf2\x8d\xc4\x7d\x98\x9d\x99\xdf\xcc\x6f\x66\x89\xb5\xf8\x4c\xc6\x0a\xad\x56\x80\xb5\xa0\x07\x47\x8a\xdf\x6c\x72\xfb\x93\x4d\x84\x5e\xde\x9d\x9d\xdc\x0a\x95\xad\x60\xed\xad\xd3\xd5\x27\xb2\xda\x9b\x94\x7e\xa6\x5c\x28\xe1\x84\x56\x27\x15\x39\xcc\xd0\xe1\xea\x04\x00\x95\xd2\x0e\x79\xd8\xf2\x2b\x40\xaa\x95\x33\x5a\x4a\x32\x8b\x82\x54\x72\xeb\x37\xb4\xf1\x42\x66\x64\x82\xf0\xf6\xe8\xbb\xd3\xe4\xe5\x69\x72\x7a\x02\xa0\xb0\xa2\x15\x68\x59\xa5\x5a\xe5\xa2\xb0\x89\xae\xc9\xa0\xd3\xc6\x26\xa9\x36\xa4\xf9\xa7\x3a\xb1\x35\xa5\x7c\x40\x61\xb4\xaf\x57\x70\x70\x4d\x94\xd5\xea\x81\x8e\x0a\x6d\x44\xfb\x0e\xb0\xe0\x43\xc2\xff\x68\xdf\x87\x77\xef\xd7\xe1\xc8\x30\x26\x85\x75\x7f\xdc\x1d\x7f\x27\xac\x0b\x73\xb5\xf4\x06\xe5\x50\xc9\x30\x6c\x85\x2a\xbc\x44\x33\x98\x38\x01\xb0\xa9\xae\x69\x05\x6b\xe9\xad\x23\x73\x02\xd0\xd8\xdc\xe8\xb1\x68\x0c\xbe\x3b\x6b\xd4\xb2\x69\x49\x15\xb6\x4a\x02\x9b\xa6\xde\x7c\xbc\xf8\xfc\xe3\xe5\xa3\x09\x80\x8c\x6c\x6a\x44\xed\x82\x07\x3b\x35\x41\x58\x40\x30\x0d\x4e\xfc\xa7\xd6\xca\x8a\x8d\x24\xc8\xb5\x81\xa8\x98\x37\x42\x15\xbc\x27\x19\xc8\x73\x5b\xd6\x54\x6f\xfe\x41\xa9\x1b\x0c\x1b\xfa\xa7\x17\x86\xb2\xe1\xd1\xac\x78\x8b\xfb\x60\xb8\x36\x8c\x84\x1b\x78\x39\x3e\x83\x28\xdb\x19\x7f\x64\xc3\x97\xc5\xa3\x59\x00\x36\x3d\xee\x84\x8c\x43\x8e\x2c\xb8\x92\x5a\x27\x52\xd6\xf8\x0b\x74\x0e\xae\x14\x16\x0c\xd5\x86\x2c\xa9\x18\x84\x3c\x8c\xaa\x31\x29\xd9\x13\x7e\x49\x86\x05\x81\x2d\xb5\x97\x19\xbb\xe6\x8e\x8c\x03\x43\xa9\x2e\x94\xf8\xb5\x93\x6e\xc1\xe9\x70\xac\x44\x47\xd6\x81\x50\x8e\x8c\x42\x09\x77\x28\x3d\xcd\x01\x55\xb6\x27\xbb\xc2\x2d\x18\xe2\x73\xc1\xab\x81\xc4\xb0\xc5\xee\xeb\xf2\x5e\x1b\x02\xa1\x72\xbd\x82\xd2\xb9\xda\xae\x96\xcb\x42\xb8\x36\x0b\x53\x5d\x55\x5e\x09\xb7\x5d\x86\x84\x12\x1b\xcf\xd1\xbe\xcc\xe8\x8e\xe4\xd2\x8a\x62\x81\x26\x2d\x85\xa3\xd4\x79\x43\x4b\xac\xc5\x22\x18\xa3\x42\x26\x26\x55\xf6\x7f\x6d\x3c\xd8\x47\x07\x47\xcc\xad\xe3\x78\xd8\x99\x0a\x49\xf1\x1b\xc1\xe2\x84\x89\xe1\x17\x05\x46\x63\x7b\x4c\x78\x88\xdd\xf8\xe9\x0f\x97\x57\x7d\x84\x06\xdc\x22\x44\xfd\xd2\x03\x1e\x6a\xd1\x62\xcf\x0a\x95\x93\x89\x3b\x73\xa3\xab\x20\x95\x54\x56\x6b\xa1\x5c\x78\x49\xa5\x20\xe5\xc0\xfa\x4d\x25\x9c\x0d\x31\x4c\xd6\x31\x90\xfb\x82\xd7\x81\xb5\x60\x43\xe0\xeb\x0c\x1d\x65\xfb\x4b\x2e\x14\xac\xb1\x22\xb9\x46\x4b\xff\x73\xec\x18\x23\xbb\x60\x40\x9e\x8d\xde\x90\x93\xf7\x37\xec\xa5\x38\x40\x4b\xa8\xa3\x70\x77\xfc\x72\x59\x53\xca\x20\xb3\x97\x79\x57\x60\x15\x54\x03\x02\x6a\x91\x7d\xec\xa8\xd1\xc3\xc7\x89\x83\x9f\x9c\x90\x3d\x73\x60\xe6\x91\x8a\x6f\x9b\x85\xa1\xe8\xa0\x50\x51\x47\x66\x72\xe6\x81\x96\xf8\x90\x99\xf0\xc3\xbb\xf7\x9d\xdc\x7d\x3c\x8f\xaa\xfa\x94\xba\x41\x2d\x61\xf9\x98\xb5\xae\x05\x65\xeb\xcb\xcf\x23\xcb\x9e\xce\xa8\xf6\xf9\xf9\xb1\x40\x46\xc0\x5b\xca\x98\x99\x9a\xd3\xd8\xa8\xef\x2d\x4c\xe2\x22\x58\x5f\x7e\x9e\xb4\x36\x8e\xca\x65\xec\xba\xe2\x09\x42\x59\x87\x52\x52\x06\xd8\x66\x51\xa8\x5a\xb1\x88\xcd\xe1\xbe\x24\x43\x80\xed\xf0\xa8\xd4\xb0\x3c\xeb\x04\xb3\xae\x5a\x71\xa2\xa3\x83\x12\x2d\x6c\x88\xd4\xe0\x30\xa1\x00\xd5\xa8\xb0\x0f\x8d\x94\x5f\xb8\xd4\x47\x19\x0e\x4d\x41\xce\x02\x4a\x19\x6b\x7c\x8d\xe9\x61\x1c\xe3\xf3\xe7\x92\x14\x18\x22\xc5\x6e\xca\xe6\x01\xfd\x7b\x21\x25\x33\xbd\x21\x74\x14\x8c\x1d\x38\xce\x4e\x82\x67\x08\xd3\x72\x54\xe8\x8e\x6f\x7a\x63\xc7\xb4\x88\x11\xb5\xd1\x5a\xd2\x88\xb1\x35\xa6\xb7\x58\x50\xa4\xb9\xcb\xad\x4a\x2f\xb8\xcc\xdc\xa1\xfc\xda\xe0\xf9\x38\x26\x78\x27\x88\x42\x75\x8d\x59\xbd\x55\x69\xac\x71\xbc\x26\xd7\xe3\x40\x37\x2a\x1b\x1b\x44\x43\xad\x33\x9b\xb4\xc7\x0d\xc6\xa0\x26\x23\x74\x26\x52\x94\x72\x0b\x69\x49\xe9\x2d\x1f\x34\x1e\x3f\x0e\x9d\xb7\x9c\xb4\x6b\x74\x28\x75\x71\x19\x6b\xd7\xef\x23\xe3\x33\xeb\x88\x5c\x34\xad\x40\x94\x0d\x9e\xdb\x2f\xc8\xbc\x09\x85\xff\x58\xc0\x57\xe8\x60\x4a\x49\x91\xc0\xe4\xd5\x69\x35\x99\x25\xf0\x56\x37\xb5\xa4\x46\x83\x15\x39\x32\x73\xd0\x4a\x6e\xa1\xd4\xde\x58\x98\x4e\xca\xc9\x6c\x0e\x95\x50\xde\xed\x15\xd0\xfe\x99\x4e\x2a\x5e\x86\x2a\x03\x4b\xa9\x56\x19\xef\xb4\x93\x59\x28\x58\x1b\xea\xd4\xce\x92\x18\x90\x5c\x73\xba\xb1\xf9\x51\x87\x34\x36\x66\x94\xa3\x97\xae\x6b\x47\x62\x79\xed\x64\xc0\xbd\x70\xa5\x50\xd1\x2b\x43\x10\x8e\xc7\xe4\x81\xf2\x31\x44\xd8\x71\xaf\xb3\x82\xbf\x4d\xaf\x4f\x17\xaf\x6f\x7e\x98\xfe\x35\x89\x7f\x66\xe7\x53\xfb\xa5\xfa\x52\xce\x66\x3f\x7c\x77\xb2\x8f\xde\x33\x8b\x49\x44\xba\x2d\x27\xf1\xed\xbf\x5d\x50\x18\x1b\x31\xb8\xa3\x1c\x12\x8a\xc6\xe0\xf6\xc0\xac\x70\x54\x8d\x91\xfe\xd0\xc2\x75\x7b\x46\x5f\x8c\x32\x72\x28\x64\x34\x8f\xe9\x10\x19\x38\x17\x3b\x57\x82\xd4\x1b\x13\x3a\x16\xc7\x7c\xd4\xb6\xb3\x6f\x3e\x5e\xc0\xa7\x11\xeb\x9f\xf4\x41\x7c\x0e\xb7\xef\xfd\xb3\x00\x89\xd6\x5d\x19\x54\x36\x28\x7c\x25\xaa\xb1\x40\xe4\x9e\xdf\x5a\x2c\xc6\xe7\x0d\xa1\x1d\xcd\xbe\x45\x03\xf0\xe8\x34\xdb\x72\x98\x1a\x9f\xa8\xb7\x70\xc0\x86\xb1\x95\xcf\xe7\xcd\x43\x52\xdb\x50\xe5\x19\x70\x3c\x10\xc0\xeb\xd0\x76\xdd\x6a\xca\x62\x6b\xca\x50\x37\x81\xed\x34\xa0\xd2\xae\x1c\xcf\x48\x7e\xae\x02\xc7\xc5\x2b\xc9\x86\xb8\xe8\xc6\x94\xf6\x2a\x23\x23\xb7\x4c\x73\xfd\x79\x69\x89\xaa\x60\x4a\x81\x8b\x3c\x16\x47\x61\x03\xb3\xdc\x2a\x7d\xaf\x02\xab\xa8\x86\x1b\x59\x46\xd0\xb8\x93\xc8\xd1\x95\x0b\xe2\xab\x4f\x14\x13\x9a\xf7\x34\xa5\xda\x71\xa5\x1c\x57\xf2\x19\xc4\xd1\x52\xed\x0a\xb8\xa5\x5e\xb8\xf1\xa8\x6a\x62\xea\x5b\xe0\xd5\x88\x8a\x77\x90\xd2\x57\xc8\x65\x1f\xb3\xd0\x1d\x75\x73\x8a\x0b\x51\xb8\x8b\xb4\x19\x89\x1b\xed\x63\xc3\xd3\xc3\xf7\x24\x42\x0d\xab\xa3\x02\xaa\x6a\xb7\x6d\xbc\xf1\x95\x3e\xab\xf0\xe1\x1d\xa9\xc2\x95\x2b\xf8\xf1\xe5\xef\x5e\xfd\x34\xb2\x50\x6f\x02\xb1\x67\xbf\x90\xa2\x58\xf0\xbe\x85\xf7\xf6\xa5\x0e\xee\x63\xc1\x3d\x49\x7b\xaf\x48\x8a\x7e\x4d\x6c\xc9\x76\xb2\xe0\x1e\x2d\x58\x72\xb0\x41\xee\x2e\x7c\x7d\xdc\x9d\x5c\x7e\x43\x37\xa8\x52\x9a\x83\xc8\x0f\x1f\x23\x6c\xcb\x91\x72\x0b\x67\x2f\xe7\xb0\x69\x30\x4b\x62\x76\x25\x3d\xad\x5f\x3f\xdc\x24\x07\x8c\x11\x16\x5e\xcf\x1f\x69\xca\xad\xa9\x0f\x24\xcc\x61\x7a\x44\x49\xae\xad\xe1\x63\x0a\x73\x76\x53\x7f\x0f\x70\x36\x75\x96\x3c\x15\x09\xdc\x60\x15\x47\x9a\xe8\x36\x7d\x84\x72\xaf\xfe\x7f\x3c\x60\x84\x12\x95\xaf\x56\x70\x3a\xb2\x24\x32\xf2\xb7\x08\x8f\x28\xa9\xaf\x67\xc8\xb4\x5c\x18\xac\x2a\x74\x22\x05\x91\xf1\x95\x35\x17\x64\x86\x29\xc6\x1e\x69\x36\xe6\xa1\xcb\x1a\x38\xff\x7b\xdb\xd0\xe8\xb3\x92\xee\xa3\xd1\x99\x4f\xc9\x84\xbe\xb0\xe9\x79\xd2\x21\xf3\xf2\x2d\x39\x64\x65\xd3\xca\xd2\x03\x63\xd5\x7d\x72\x09\x8d\x59\x45\xa8\x84\x2a\x6c\xa3\x8c\xb0\x91\xff\xe6\x47\xce\xe5\x6d\xf7\x25\x31\x6b\xf7\x4d\x97\x05\x34\xc1\x12\x2b\x32\x32\x7c\x61\x82\xc2\xa3\x41\xe5\x88\x32\xe6\xd5\xe3\xf4\xd1\xb5\x6e\x1d\xcb\x63\xff\x7d\xe1\x49\x26\x69\x08\x28\x32\x37\x1b\xdc\x7c\xbd\x08\x3c\xf4\xed\x08\xe8\xec\xf4\xe5\xd1\xb8\xeb\xd6\x1d\xb9\x1e\xb4\xcd\xe3\xf5\x9b\xc5\x5f\x70\xf1\xeb\xcd\xb4\xf9\x73\xba\x78\xfd\xf7\xf9\xea\xe6\xc5\xe0\xf5\x66\x76\xfe\xdd\x88\xa4\xc3\x1d\x65\xff\xec\xc4\x70\x7f\x79\xd8\x09\xb6\x79\x28\xc4\x3a\x87\x2b\xe3\x69\x0e\x6f\x51\x5a\x9a\xc3\x9f\x54\xa8\x93\x5f\xe9\x34\x52\xbe\x1a\xd7\x8e\x3b\x9b\x09\x9f\x3a\x39\xbe\x24\xa8\x74\x7c\x4d\xa3\xee\xb1\x76\xfe\x79\x4e\xe2\xa5\xcd\x47\x91\x96\x08\x07\x5f\xb8\x20\x10\x32\xe4\x5a\x27\xf4\x80\x55\x2d\x29\x49\x75\xb5\x3c\xf2\x05\x6c\x47\x85\xdf\x52\xe4\xce\x5e\x3d\x23\x7a\xa6\xd7\x31\x46\x6e\xa6\xd7\x8b\xe6\xdf\x8b\x76\x68\x76\xce\x37\x92\x63\xf3\xb3\x17\xcb\xd9\xf9\x74\x10\x79\x37\xd7\x8b\x3e\xec\x92\x9b\x17\xb3\xf3\xc1\xdc\xac\x0d\xc2\x58\x3e\x56\xe0\x8c\x6f\xeb\x82\x75\xda\x70\xa7\xb2\x33\xe6\x37\xdd\xb7\xd5\xde\xf9\x4d\xc4\xc2\xbf\xfe\x7d\xf2\x9f\x00\x00\x00\xff\xff\x07\xce\xfe\x5c\x62\x19\x00\x00") func operatorsCoreosCom_olmconfigsYamlBytes() ([]byte, error) { return bindataRead( @@ -165,7 +165,7 @@ func operatorsCoreosCom_olmconfigsYaml() (*asset, error) { return a, nil } -var _operatorsCoreosCom_operatorconditionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5a\x5f\x73\xdb\xb8\x11\x7f\xd7\xa7\xd8\xb9\x76\xa6\x76\x46\xa2\xec\x5c\x27\xcd\xe9\x25\x93\x71\x7b\x9d\x4c\x93\x26\x73\x71\xef\xa1\xae\xdb\x5b\x92\x2b\x09\x0d\x09\xb0\xf8\x23\x5b\xd7\xf6\xbb\x77\x16\x20\x45\x4a\x24\x25\xa7\xf1\xa4\x1d\x0f\xf8\x62\x8b\x00\x16\x8b\xfd\xf3\x5b\xfc\x40\x60\x25\x7e\x24\x6d\x84\x92\x0b\xc0\x4a\xd0\xbd\x25\xc9\xbf\x4c\xf2\xe9\xa5\x49\x84\x9a\x6f\x2e\x27\x9f\x84\xcc\x17\x70\xe5\x8c\x55\xe5\x0f\x64\x94\xd3\x19\xfd\x96\x96\x42\x0a\x2b\x94\x9c\x94\x64\x31\x47\x8b\x8b\x09\x00\x4a\xa9\x2c\xf2\x6b\xc3\x3f\x01\x32\x25\xad\x56\x45\x41\x7a\xb6\x22\x99\x7c\x72\x29\xa5\x4e\x14\x39\x69\x2f\xbc\x99\x7a\x73\x91\x5c\xbe\x4c\x2e\x26\x00\x12\x4b\x5a\x80\xaa\x48\xa3\x55\x3a\x53\x32\xf7\xb3\x98\xa4\x79\x65\x92\x4c\x69\x52\xfc\xa7\x9c\x98\x8a\x32\x9e\x68\xa5\x95\xab\xda\x61\x7b\x7d\x82\xcc\x46\x1f\xb4\xb4\x52\x5a\x34\xbf\x01\x66\xa0\x8a\xd2\xff\x1f\xd6\xf9\xbe\x96\x71\xd5\x4c\xed\xdb\x0a\x61\xec\x1f\x86\xdb\xdf\x0a\x63\x7d\x9f\xaa\x70\x1a\x8b\x21\xe5\x7d\xb3\x59\x2b\x6d\xff\xd8\xaa\xc2\x53\x67\x7b\x93\x18\x21\x57\xae\x40\x3d\x20\x62\x02\x60\x32\x55\xd1\x02\xbc\x84\x0a\x33\xca\x27\x00\xb5\x01\x6b\x89\xb3\xda\x7a\x9b\xcb\x7a\x02\x93\xad\xa9\xc4\x66\x3a\x60\xb1\xf2\xf5\x87\x37\x3f\x7e\xfb\xf1\xa0\x01\x20\x27\x93\x69\x51\x59\xef\x8e\xde\x1a\x41\x18\xc0\x3a\x04\xa0\x89\x01\x50\x4b\xb0\xdb\x8a\xe0\xa7\x5e\xff\x9f\xe0\x6e\x2d\xb2\x35\x0f\x73\x86\x72\xb0\x8a\x97\xba\xa1\x2d\x08\xb9\x54\xba\xf4\x21\xc2\x6f\xdf\xbf\x7d\x07\x98\x2a\x67\xc1\xae\x09\x8c\x45\xeb\xc5\xa2\xdc\x99\x20\xe9\x28\xc9\xb3\x2d\x40\xa5\x7f\xa7\xcc\x76\x5e\x6b\xfa\x87\x13\x9a\xf2\xee\x7a\xd8\x1a\x4d\x64\x76\x5e\x57\x9a\xe5\xda\x8e\xff\xc3\xd3\xc9\x83\xbd\xf7\x07\x86\xf9\xd7\xec\xa0\x15\x80\xed\x19\x46\x42\xce\x49\x41\xc6\x2f\xa5\xf6\x0c\xe5\xb5\x13\xbc\xb1\xd6\xc2\x80\xa6\x4a\x93\x21\x19\xd2\xa4\x59\xac\x5f\x52\xd2\x13\xfe\x91\x34\x0b\xe2\xd8\x71\x45\x1e\x6c\xa8\x2d\x68\xca\xd4\x4a\x8a\x9f\x77\xd2\x0d\xdb\x92\xa7\x2d\xd0\x92\xb1\x20\xa4\x25\x2d\xb1\x80\x0d\x16\x8e\xa6\x80\x32\xef\xc9\x2e\x71\x0b\x9a\x78\x5e\x70\xb2\x23\xd1\x0f\x31\x7d\x5d\xde\x29\x4d\xde\x7d\x0b\x58\x5b\x5b\x99\xc5\x7c\xbe\x12\xb6\xc1\x89\x4c\x95\xa5\x93\xc2\x6e\xe7\x3e\xe5\x45\xea\x38\x0f\xe7\x39\x6d\xa8\x98\x1b\xb1\x9a\xa1\xce\xd6\xc2\x52\x66\x9d\xa6\x39\x56\x62\xe6\x17\x23\x43\x72\x97\xf9\x2f\x74\x1d\x55\xe6\x60\xe2\xe0\x73\x63\xb5\x90\xab\xbd\x26\x9f\xae\x9f\xe9\x2c\x4e\xe1\x10\xcb\x41\x60\x58\x6c\xeb\x13\x7e\xc5\x66\xfc\xe1\x77\x1f\xaf\xa1\xd1\x28\xf8\x2d\xb8\xa8\xed\x3a\x60\xa1\xc6\x5b\x6c\x59\x21\x97\xa4\xc3\xc8\xa5\x56\xa5\x97\x4a\x32\xaf\x94\x90\x21\xd6\xb3\x42\x90\xb4\x60\x5c\x5a\x0a\x6b\x7c\x0c\x93\xb1\xec\xc8\xbe\xe0\x2b\x8f\xab\x90\x12\xb8\x2a\x47\x4b\x79\xbf\xcb\x1b\x09\x57\x58\x52\x71\x85\x86\xbe\xba\xef\xd8\x47\x66\xc6\x0e\x79\xb0\xf7\xba\x55\xa3\x3f\xa0\x97\xe2\x00\x0d\xd4\x8f\xba\xbb\x07\x42\x1f\x2b\xca\x00\x8b\x42\xdd\xb1\xc3\xb3\xc2\x19\x4b\x1a\x30\x2f\x85\x1c\x01\xa4\xe3\x48\x54\xe3\xd5\x14\x2a\x65\x79\xf1\x58\x14\x5b\x50\x1b\xd2\x5a\xe4\x1c\x38\x61\x8c\xa6\x4a\x69\x4b\x39\xa4\x5b\x2f\x69\x08\xc7\x8e\x2e\x74\x1c\xa4\xc2\x92\xab\x42\x6d\x4b\x0e\xc0\x7e\x63\x23\x15\xb5\xc6\xed\x40\xab\xb0\x54\x0e\x0e\x3b\xe2\x28\x7e\xea\x45\x0e\xe9\xf3\x05\x53\xee\x79\xaf\x2d\x35\x1c\x83\x28\xa4\x81\x9c\x2c\x8a\xc2\xc0\x52\x69\x50\x92\x00\x39\x04\x6c\x00\x52\x82\xcc\x69\xed\x13\xa8\xf1\x94\xcf\xb5\xd7\x1f\xde\xec\xea\x53\x3f\x0d\xe0\xb8\xdd\xc3\x33\x5c\x4d\xda\x87\xeb\x8a\x31\xb8\xa2\xd1\x76\x4d\x68\xea\x92\x3e\xd4\xcc\x1a\xbb\xc3\x44\x69\x9b\x59\xc1\xc1\xc6\x63\x61\x11\x9e\x02\x8d\xbd\xd6\x28\x8d\xb7\xe4\xb5\x28\x69\xac\xe7\x69\xa8\x3c\x26\x95\x21\x34\x54\x1b\x63\xc1\xf2\x0b\xef\x91\x9d\x0b\xed\xae\x37\xe5\x01\xfe\xd8\x7f\x61\xdd\x9c\x45\x28\x95\x5d\x53\x2f\x25\xba\xcf\x35\x7b\xb3\x2e\x7b\x29\xc1\xdd\x9a\xa4\x9f\xc4\xc9\x9c\x74\xb1\xe5\x7c\x6b\xe7\xcb\xd6\x28\x57\x94\x27\x00\x6f\x38\x0e\xd0\xb2\x82\x8c\x98\x9f\xa4\xba\x93\x53\x1e\x28\xc1\x99\x06\xdd\xbd\xc6\x3b\x89\x1c\x32\x4b\x41\x5c\x5e\x83\x18\x5f\x20\xb2\x8c\x2a\x8b\x69\x31\x12\x45\x70\x2a\x65\x9a\x27\x80\xcb\x02\x18\xb6\x67\x3c\xf1\x48\xcf\x3a\xa6\x1e\xc3\x5f\xb5\xa8\x50\xe7\xd6\xae\x44\xc9\x11\x99\xf3\x62\xda\x36\x99\x8b\x0c\x7d\xbd\x6b\xd2\xac\x05\xbf\xd6\x7d\x27\x3d\xc4\xa5\x2e\x25\x46\x49\x2a\x2b\xbb\xad\xad\xf1\x85\x36\x2b\xf1\xfe\x2d\xc9\x95\x5d\x2f\xe0\xdb\xe7\xbf\x79\xf1\x72\xa4\xa3\x4a\x0d\x17\xdc\xfc\xf7\x24\x19\x62\x07\xf6\x6e\xff\x8d\xf5\xfa\x52\x3b\x35\xdf\x9b\x27\x69\x6a\x57\xb2\x6a\xfb\xf8\xa8\xdb\xcf\x82\x3b\x34\x60\xc8\x42\x8a\xbc\x05\x76\xd5\x71\x73\x7e\xaf\x34\x08\x69\x2c\xca\x8c\xa6\x20\x96\xc3\xd3\x08\xd3\x00\x5f\xb1\x85\xcb\xe7\x53\x48\x6b\x9f\x25\x21\xbb\x92\x96\x74\xdc\xdc\xdf\x26\x03\x8b\x11\x06\xbe\x9b\x1e\x68\xca\xdb\x1b\xe7\x91\x95\xc3\xf4\x88\x92\x77\xc2\xae\x79\x5f\xe4\x81\xb8\xde\x72\x0e\x00\x31\xed\x56\x72\x2a\x12\x78\xa3\xba\x22\x7d\x32\x7d\x84\xb4\x2f\x7e\x3d\x1e\x30\x42\x8a\xd2\x95\x0b\xb8\x18\xe9\x12\x10\xf9\x31\xc2\x23\x48\x6a\x8b\x14\x32\x2c\xaf\x34\x96\xbc\x85\xc8\x40\xe4\xbc\x33\x58\x0a\xd2\xdd\x14\x63\x8b\xd4\x03\xb9\x98\xed\x19\xff\x57\xa6\x86\xd1\x07\x25\xdd\x07\xad\x72\x97\xf1\x26\x53\x2d\xfd\x96\x48\x2c\x45\xd6\x45\x5e\xde\x89\xf9\xac\x0c\x64\x04\xe8\x9e\x7d\xb5\xdb\xd6\x33\x13\x80\x92\x50\x0a\xb9\x32\xb5\x32\xbc\x45\x65\xfc\x9b\x1e\x99\x97\x87\xdd\xad\x89\x51\x3b\xd0\x9b\x5a\x9a\xf6\x2b\x31\x22\x27\x4d\x39\x20\xac\x1c\x6a\x94\x96\x28\x67\x5c\x3d\x0e\x1f\xb5\x94\x0e\xca\x63\xbb\x87\x3d\x89\x24\x35\x00\x05\xe4\xe6\x05\xd7\x3b\x64\x8f\x43\x8f\x07\x40\x97\x17\xcf\x8f\xc6\xdd\xae\xdf\x68\xa7\x0a\x2d\x93\xb1\x05\xfc\xf5\xe6\xf5\xec\xcf\x38\xfb\xf9\xf6\xac\xfe\xe7\x62\xf6\xdd\xdf\xa6\x8b\xdb\x67\x9d\x9f\xb7\xe7\xaf\x7e\x39\x22\x29\x24\xf8\x03\x63\xb8\xae\xb5\xcd\x5e\xa9\x89\x8f\xa9\x2f\xc4\x6a\x09\xd7\x9a\x69\xe1\xf7\x58\x18\x9a\xc2\x9f\xa4\xaf\x93\x5f\x68\x34\x92\xae\x1c\xd7\x8e\x77\x36\xdf\xf0\xac\xdf\x1c\xef\xe2\x55\x3a\xde\xa7\x56\x77\xa4\x8f\xd7\xf5\x61\x46\xf2\x87\x17\x6a\xd9\x05\xc2\x0e\x8b\x02\x0f\xc8\xb0\x54\x2a\xa1\x7b\x2c\xab\x82\x92\x4c\x95\xf3\x23\x2c\x6b\x4f\x85\xcf\x29\x72\x97\x2f\x1e\x10\x3d\x67\x37\x21\x46\x6e\xcf\x6e\x66\xf5\x7f\xcf\x9a\x57\xe7\xaf\xce\xfe\x92\x1c\x6d\x3f\x7f\x36\x3f\x7f\x75\xd6\x89\xbc\xdb\x9b\x59\x1b\x76\xc9\xed\xb3\xf3\x57\x9d\xb6\xf3\x7e\x10\x72\x21\x11\x19\xbd\xce\x32\xe5\xbe\x1a\xf9\x18\x8e\xf9\x53\x68\xdd\x67\x82\x21\x1b\x1a\x2e\xb8\x4f\xe9\x06\x78\x20\x13\xf2\x50\xce\x02\xe5\x4b\x3c\x5a\xd5\x39\xc5\x58\x63\x35\x8a\xc2\xa7\x16\x66\xd6\x61\xd1\xb7\xd6\x8e\x3f\x82\xd9\x1a\x4b\xe5\x23\xd1\xbf\xb6\xbc\x47\x2a\xc6\x58\xd0\xe7\x26\x91\xb5\x8d\x49\x8d\xac\x0d\x22\x6b\x8b\xac\x2d\xb2\xb6\xc8\xda\x22\x6b\x8b\xac\x2d\xb2\x36\x88\xac\xed\x50\x85\xa7\xc1\xda\x42\xf9\x58\x80\xd5\xae\xa9\x0b\xc6\x2a\xcd\x3b\x15\x58\xb2\xab\x9a\x97\x2e\xdd\x7d\x76\x6d\xad\x5f\x87\x2c\xfc\xf3\xdf\x13\xe8\xde\x2a\x78\xde\x8c\x8a\xb7\x0a\xe2\xad\x82\x78\xab\xa0\x7d\xe2\xad\x82\xa7\x7b\xab\xe0\x41\xc7\x4b\xdd\x8b\x06\xfb\x87\x4b\xe1\x36\xc0\xde\x61\x92\xdf\x95\x55\x5a\x6d\x44\xde\x0b\x4b\x38\xb8\xa6\xe0\x77\xee\xfe\x98\x29\x15\x85\xb0\x5b\x16\x51\xa2\x74\xdd\xab\x07\xf4\x75\x2e\x1e\xc4\x93\xa7\xee\x13\x4f\x9e\xc6\xfa\xc5\x93\xa7\x31\x15\xe3\xc9\x53\x3c\x79\x8a\x27\x4f\xf1\xe4\x29\x9e\x3c\xc5\x93\xa7\x78\xf2\x14\x4f\x9e\xf6\x55\x78\x1a\x27\x4f\x5d\xcb\xc5\x8b\xca\xff\x6b\x8e\x12\x89\x47\x24\x1e\x91\x78\x44\xe2\x11\x89\x47\x24\x1e\x91\x78\x44\xe2\x11\x89\x07\x44\xe2\x71\xa8\xc2\x53\x23\x1e\xff\xaf\x17\x95\x4f\xdc\x4a\x7e\xff\xf6\x5d\xe7\x83\x76\xf8\xd0\xdd\xd6\x48\x58\xe3\x86\x20\x25\x92\xbb\xba\x1f\xbf\xeb\x8c\xa9\x1b\xbf\xeb\x44\x7a\x15\xe9\x55\xa4\x57\x5f\x64\xbd\x48\xaf\x22\xbd\x8a\xf4\xea\xf0\x89\xf4\x6a\xb0\x5f\xa4\x57\xed\x13\xe9\xd5\x9e\x0a\x4f\x83\x5e\x1d\xbb\x51\xdc\x7d\x77\xea\x42\xf1\x7f\x02\x00\x00\xff\xff\x37\xf9\x98\x13\x70\x4e\x00\x00") +var _operatorsCoreosCom_operatorconditionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5a\x5f\x6f\xe3\xb8\x11\x7f\xf7\xa7\x18\x5c\x0b\x34\x59\xd8\x72\x92\x2b\xb6\x77\x7e\x59\x2c\xd2\x5e\xb1\xe8\x6e\x77\x71\x9b\xde\x43\xd3\xb4\x37\x92\xc6\x36\xbb\x12\xa9\xf2\x8f\x13\x5f\xdb\xef\x5e\x0c\x29\x59\xb2\x25\xd9\xb9\x6e\xb0\x2d\x02\xea\x25\xb1\x48\x0e\x87\xf3\xe7\x37\xfc\x51\xc4\x4a\xfc\x40\xda\x08\x25\x17\x80\x95\xa0\x07\x4b\x92\x7f\x99\xe4\xd3\x37\x26\x11\x6a\xbe\xb9\x9c\x7c\x12\x32\x5f\xc0\xb5\x33\x56\x95\xdf\x93\x51\x4e\x67\xf4\x5b\x5a\x0a\x29\xac\x50\x72\x52\x92\xc5\x1c\x2d\x2e\x26\x00\x28\xa5\xb2\xc8\xaf\x0d\xff\x04\xc8\x94\xb4\x5a\x15\x05\xe9\xd9\x8a\x64\xf2\xc9\xa5\x94\x3a\x51\xe4\xa4\xbd\xf0\x66\xea\xcd\x45\x72\x75\x91\x5c\x4c\x00\x24\x96\xb4\x00\x55\x91\x46\xab\x74\xa6\x64\xee\x67\x31\x49\xf3\xca\x24\x99\xd2\xa4\xf8\x4f\x39\x31\x15\x65\x3c\xd1\x4a\x2b\x57\xb5\xc3\xf6\xfa\x04\x99\x8d\x3e\x68\x69\xa5\xb4\x68\x7e\x03\xcc\x40\x15\xa5\xff\x3f\xac\xf3\x7d\x2d\xe3\xba\x99\xda\xb7\x15\xc2\xd8\x3f\x0c\xb7\xbf\x15\xc6\xfa\x3e\x55\xe1\x34\x16\x43\xca\xfb\x66\xb3\x56\xda\xfe\xb1\x55\x85\xa7\xce\xf6\x26\x31\x42\xae\x5c\x81\x7a\x40\xc4\x04\xc0\x64\xaa\xa2\x05\x78\x09\x15\x66\x94\x4f\x00\x6a\x03\xd6\x12\x67\xb5\xf5\x36\x97\xf5\x04\x26\x5b\x53\x89\xcd\x74\xc0\x62\xe5\xeb\x0f\x6f\x7e\xf8\xfa\xe3\x41\x03\x40\x4e\x26\xd3\xa2\xb2\xde\x1d\xbd\x35\x82\x30\x80\x75\x08\x40\x13\x03\xa0\x96\x60\xb7\x15\xc1\x8f\xbd\xfe\x3f\xc2\xfd\x5a\x64\x6b\x1e\xe6\x0c\xe5\x60\x15\x2f\x75\x43\x5b\x10\x72\xa9\x74\xe9\x43\x84\xdf\xbe\x7f\xfb\x0e\x30\x55\xce\x82\x5d\x13\x18\x8b\xd6\x8b\x45\xb9\x33\x41\xd2\x51\x92\x67\x5b\x80\x4a\xff\x4e\x99\xed\xbc\xd6\xf4\x0f\x27\x34\xe5\xdd\xf5\xb0\x35\x9a\xc8\xec\xbc\xae\x34\xcb\xb5\x1d\xff\x87\xa7\x93\x07\x7b\xef\x0f\x0c\xf3\xaf\xd9\x41\x2b\x00\xdb\x33\x8c\x84\x9c\x93\x82\x8c\x5f\x4a\xed\x19\xca\x6b\x27\x78\x63\xad\x85\x01\x4d\x95\x26\x43\x32\xa4\x49\xb3\x58\xbf\xa4\xa4\x27\xfc\x23\x69\x16\xc4\xb1\xe3\x8a\x3c\xd8\x50\x5b\xd0\x94\xa9\x95\x14\x3f\xed\xa4\x1b\xb6\x25\x4f\x5b\xa0\x25\x63\x41\x48\x4b\x5a\x62\x01\x1b\x2c\x1c\x4d\x01\x65\xde\x93\x5d\xe2\x16\x34\xf1\xbc\xe0\x64\x47\xa2\x1f\x62\xfa\xba\xbc\x53\x9a\xbc\xfb\x16\xb0\xb6\xb6\x32\x8b\xf9\x7c\x25\x6c\x83\x13\x99\x2a\x4b\x27\x85\xdd\xce\x7d\xca\x8b\xd4\x71\x1e\xce\x73\xda\x50\x31\x37\x62\x35\x43\x9d\xad\x85\xa5\xcc\x3a\x4d\x73\xac\xc4\xcc\x2f\x46\x86\xe4\x2e\xf3\x5f\xe8\x3a\xaa\xcc\xc1\xc4\xc1\xe7\xc6\x6a\x21\x57\x7b\x4d\x3e\x5d\x7f\xa6\xb3\x38\x85\x43\x2c\x07\x81\x61\xb1\xad\x4f\xf8\x15\x9b\xf1\xfb\xdf\x7d\xbc\x81\x46\xa3\xe0\xb7\xe0\xa2\xb6\xeb\x80\x85\x1a\x6f\xb1\x65\x85\x5c\x92\x0e\x23\x97\x5a\x95\x5e\x2a\xc9\xbc\x52\x42\x86\x58\xcf\x0a\x41\xd2\x82\x71\x69\x29\xac\xf1\x31\x4c\xc6\xb2\x23\xfb\x82\xaf\x3d\xae\x42\x4a\xe0\xaa\x1c\x2d\xe5\xfd\x2e\x6f\x24\x5c\x63\x49\xc5\x35\x1a\xfa\xe2\xbe\x63\x1f\x99\x19\x3b\xe4\xd1\xde\xeb\x56\x8d\xfe\x80\x5e\x8a\x03\x34\x50\x3f\xea\xee\x1e\x08\x7d\xac\x28\x03\x2c\x0a\x75\xcf\x0e\xcf\x0a\x67\x2c\x69\xc0\xbc\x14\x72\x04\x90\x8e\x23\x51\x8d\x57\x53\xa8\x94\xe5\xc5\x63\x51\x6c\x41\x6d\x48\x6b\x91\x73\xe0\x84\x31\x9a\x2a\xa5\x2d\xe5\x90\x6e\xbd\xa4\x21\x1c\x3b\xba\xd0\x71\x90\x0a\x4b\xae\x0a\xb5\x2d\x39\x00\xfb\x8d\x8d\x54\xd4\x1a\xb7\x03\xad\xc2\x52\x39\x38\xec\x88\xa3\xf8\xa9\x17\x39\xa4\xcf\x67\x4c\xb9\xe7\xbd\xb6\xd4\x70\x0c\xa2\x90\x06\x72\xb2\x28\x0a\x03\x4b\xa5\x41\x49\x02\xe4\x10\xb0\x01\x48\x09\x32\xa7\xb5\x4f\xa0\xc6\x53\x3e\xd7\x5e\x7f\x78\xb3\xab\x4f\xfd\x34\x80\xe3\x76\x0f\xcf\x70\x35\x69\x1f\xae\x2b\xc6\xe0\x8a\x46\xdb\x35\xa1\xa9\x4b\xfa\x50\x33\x6b\xec\x0e\x13\xa5\x6d\x66\x05\x07\x1b\x8f\x85\x45\x78\x0a\x34\xf6\x46\xa3\x34\xde\x92\x37\xa2\xa4\xb1\x9e\xa7\xa1\xf2\x98\x54\x86\xd0\x50\x6d\x8c\x05\xcb\x2f\xbc\x47\x76\x2e\xb4\xbb\xde\x94\x07\xf8\x63\xff\x85\x75\x73\x16\xa1\x54\x76\x4d\xbd\x94\xe8\x3e\x37\xec\xcd\xba\xec\xa5\x04\xf7\x6b\x92\x7e\x12\x27\x73\xd2\xc5\x96\xf3\xad\x9d\x2f\x5b\xa3\x5c\x51\x9e\x00\xbc\xe1\x38\x40\xcb\x0a\x32\x62\x7e\x92\xea\x5e\x4e\x79\xa0\x04\x67\x1a\x74\xf7\x1a\xef\x24\x72\xc8\x2c\x05\x71\x79\x0d\x62\x7c\x81\xc8\x32\xaa\x2c\xa6\xc5\x48\x14\xc1\xa9\x94\x69\x9e\x00\x2e\x0b\x60\xd8\x9e\xf1\xc4\x23\x3d\xeb\x98\x7a\x0a\x7f\xd5\xa2\x42\x9d\x5b\xbb\x12\x25\x47\x64\xce\x8b\x69\xdb\x64\x2e\x32\xf4\xf5\xae\x49\xb3\x16\xfc\x5a\xf7\x9d\xf4\x10\x97\xba\x94\x18\x25\xa9\xac\xec\xb6\xb6\xc6\x67\xda\xac\xc4\x87\xb7\x24\x57\x76\xbd\x80\xaf\xaf\x7e\xf3\xf2\x9b\x91\x8e\x2a\x35\x5c\x70\xf3\xdf\x93\x64\x88\x1d\xd8\xbb\xfd\x37\xd6\xeb\x4b\xed\xd4\x7c\x6f\x9e\xa4\xa9\x5d\xc9\xaa\xed\xe3\xa3\x6e\x3f\x0b\xee\xd1\x80\x21\x0b\x29\xf2\x16\xd8\x55\xc7\xcd\xf9\x9d\xd2\x20\xa4\xb1\x28\x33\x9a\x82\x58\x0e\x4f\x23\x4c\x03\x7c\xc5\x16\x2e\xaf\xa6\x90\xd6\x3e\x4b\x42\x76\x25\x2d\xe9\xb8\x7d\xb8\x4b\x06\x16\x23\x0c\x7c\x3b\x3d\xd0\x94\xb7\x37\xce\x23\x2b\x87\xe9\x11\x25\xef\x85\x5d\xf3\xbe\xc8\x03\x71\xbd\xe5\x1c\x00\x62\xda\xad\xe4\x54\x24\xf0\x46\x75\x45\xfa\x64\xfa\x08\x69\x5f\xfe\x7a\x3c\x60\x84\x14\xa5\x2b\x17\x70\x31\xd2\x25\x20\xf2\x53\x84\x47\x90\xd4\x16\x29\x64\x58\x5e\x69\x2c\x79\x0b\x91\x81\xc8\x79\x67\xb0\x14\xa4\xbb\x29\xc6\x16\xa9\x07\x72\x31\xdb\x33\xfe\xaf\x4c\x0d\xa3\x8f\x4a\xba\x0f\x5a\xe5\x2e\xe3\x4d\xa6\x5a\xfa\x2d\x91\x58\x8a\xac\x8b\xbc\xbc\x13\xf3\x59\x19\xc8\x08\xd0\x03\xfb\x6a\xb7\xad\x67\x26\x00\x25\xa1\x14\x72\x65\x6a\x65\x78\x8b\xca\xf8\x37\x3d\x32\x2f\x0f\xbb\x5f\x13\xa3\x76\xa0\x37\xb5\x34\xed\x57\x62\x44\x4e\x9a\x72\x40\x58\x39\xd4\x28\x2d\x51\xce\xb8\x7a\x1c\x3e\x6a\x29\x1d\x94\xc7\x76\x0f\x7b\x12\x49\x6a\x00\x0a\xc8\xcd\x0b\xae\x77\xc8\x1e\x87\x9e\x0e\x80\x2e\x2f\xae\x8e\xc6\xdd\xae\xdf\x68\xa7\x0a\x2d\x93\xb1\x05\xfc\xf5\xf6\xf5\xec\xcf\x38\xfb\xe9\xee\xac\xfe\xe7\x62\xf6\xed\xdf\xa6\x8b\xbb\x17\x9d\x9f\x77\xe7\xaf\x7e\x39\x22\x29\x24\xf8\x23\x63\xb8\xae\xb5\xcd\x5e\xa9\x89\x8f\xa9\x2f\xc4\x6a\x09\x37\x9a\x69\xe1\x77\x58\x18\x9a\xc2\x9f\xa4\xaf\x93\x9f\x69\x34\x92\xae\x1c\xd7\x8e\x77\x36\x5f\xf1\xac\x5f\x1d\xef\xe2\x55\x3a\xde\xa7\x56\x77\xa4\x8f\xd7\xf5\x71\x46\xf2\x87\x17\x6a\xd9\x05\xc2\x0e\x8b\x02\x0f\xc8\xb0\x54\x2a\xa1\x07\x2c\xab\x82\x92\x4c\x95\xf3\x23\x2c\x6b\x4f\x85\x9f\x53\xe4\x2e\x5f\x3e\x22\x7a\xce\x6e\x43\x8c\xdc\x9d\xdd\xce\xea\xff\x5e\x34\xaf\xce\x5f\x9d\xfd\x25\x39\xda\x7e\xfe\x62\x7e\xfe\xea\xac\x13\x79\x77\xb7\xb3\x36\xec\x92\xbb\x17\xe7\xaf\x3a\x6d\xe7\xfd\x20\xe4\x42\x22\x32\x7a\x9d\x65\xca\x7d\x31\xf2\x31\x1c\xf3\xa7\xd0\xba\xcf\x04\x43\x36\x34\x5c\x70\x9f\xd2\x0d\xf0\x40\x26\xe4\xa1\x9c\x05\xca\x97\x78\xb4\xaa\x73\x8a\xb1\xc6\x6a\x14\x85\x4f\x2d\xcc\xac\xc3\xa2\x6f\xad\x1d\x7f\x04\xb3\x35\x96\xca\x27\xa2\x7f\x6d\x79\x8f\x54\x8c\xb1\xa0\xcf\x4d\x22\x6b\x1b\x93\x1a\x59\x1b\x44\xd6\x16\x59\x5b\x64\x6d\x91\xb5\x45\xd6\x16\x59\x5b\x64\x6d\x10\x59\xdb\xa1\x0a\xcf\x83\xb5\x85\xf2\xb1\x00\xab\x5d\x53\x17\x8c\x55\x9a\x77\x2a\xb0\x64\x57\x35\x2f\x5d\xba\xfb\xec\xda\x5a\xbf\x0e\x59\xf8\xe7\xbf\x27\xd0\xbd\x55\x70\xd5\x8c\x8a\xb7\x0a\xe2\xad\x82\x78\xab\xa0\x7d\xe2\xad\x82\xe7\x7b\xab\xe0\x51\xc7\x4b\xdd\x8b\x06\xfb\x87\x4b\xe1\x36\xc0\xde\x61\x92\xdf\x95\x55\x5a\x6d\x44\xde\x0b\x4b\x38\xb8\xa6\xe0\x77\xee\xfe\x98\x29\x15\x85\xb0\x5b\x16\x51\xa2\x74\xdd\xab\x07\xf4\x65\x2e\x1e\xc4\x93\xa7\xee\x13\x4f\x9e\xc6\xfa\xc5\x93\xa7\x31\x15\xe3\xc9\x53\x3c\x79\x8a\x27\x4f\xf1\xe4\x29\x9e\x3c\xc5\x93\xa7\x78\xf2\x14\x4f\x9e\xf6\x55\x78\x1e\x27\x4f\x5d\xcb\xc5\x8b\xca\xff\x6b\x8e\x12\x89\x47\x24\x1e\x91\x78\x44\xe2\x11\x89\x47\x24\x1e\x91\x78\x44\xe2\x11\x89\x07\x44\xe2\x71\xa8\xc2\x73\x23\x1e\xff\xaf\x17\x95\x4f\xdc\x4a\x7e\xff\xf6\x5d\xe7\x83\x76\xf8\xd0\xdd\xd6\x48\x58\xe3\x86\x20\x25\x92\xbb\xba\x1f\xbf\xeb\x8c\xa9\x1b\xbf\xeb\x44\x7a\x15\xe9\x55\xa4\x57\x9f\x65\xbd\x48\xaf\x22\xbd\x8a\xf4\xea\xf0\x89\xf4\x6a\xb0\x5f\xa4\x57\xed\x13\xe9\xd5\x9e\x0a\xcf\x83\x5e\x1d\xbb\x51\xdc\x7d\x77\xea\x42\xf1\x7f\x02\x00\x00\xff\xff\xe9\x64\x2d\xe1\x70\x4e\x00\x00") func operatorsCoreosCom_operatorconditionsYamlBytes() ([]byte, error) { return bindataRead( @@ -185,7 +185,7 @@ func operatorsCoreosCom_operatorconditionsYaml() (*asset, error) { return a, nil } -var _operatorsCoreosCom_operatorgroupsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3b\x5d\x73\x1b\x37\x92\xef\xfe\x15\x5d\xca\x55\x45\x72\xf1\xc3\x76\xae\x72\x09\x5f\x5c\x2a\x3b\x76\xe9\xce\x51\x54\x96\x9c\xab\x3a\x9f\xee\x0a\x9c\x69\x72\xb0\x9a\x01\x66\x01\x0c\x29\x26\x9b\xff\xbe\xd5\x0d\xcc\x70\x86\x9c\x0f\x4a\x56\x92\xdd\x2d\xe2\x45\xe2\x00\x68\x34\xfa\xbb\x1b\x80\xc8\xe5\xcf\x68\xac\xd4\x6a\x06\x22\x97\x78\xef\x50\xd1\x2f\x3b\xb9\xfb\xce\x4e\xa4\x9e\xae\x5e\x3e\xbb\x93\x2a\x9e\xc1\x9b\xc2\x3a\x9d\x7d\x44\xab\x0b\x13\xe1\x5b\x5c\x48\x25\x9d\xd4\xea\x59\x86\x4e\xc4\xc2\x89\xd9\x33\x00\xa1\x94\x76\x82\x3e\x5b\xfa\x09\x10\x69\xe5\x8c\x4e\x53\x34\xe3\x25\xaa\xc9\x5d\x31\xc7\x79\x21\xd3\x18\x0d\x03\x2f\x97\x5e\xbd\x98\xbc\xfc\x6e\xf2\xe2\x19\x80\x12\x19\xce\x40\xe7\x68\x84\xd3\x66\x69\x74\x91\xdb\x49\xf9\xd3\x4e\x22\x6d\x50\xd3\x9f\xec\x99\xcd\x31\xa2\x45\x78\xcc\x76\x4a\x63\x8c\x87\x57\xe2\x22\x1c\x2e\xb5\x91\xe5\x6f\x80\x31\xe8\x34\xe3\xff\xfd\x1e\x7f\x0a\x30\xde\x13\x48\xfe\x9e\x4a\xeb\xfe\x6b\xbf\xef\x83\xb4\x8e\xfb\xf3\xb4\x30\x22\xdd\x45\x98\xbb\x6c\xa2\x8d\xbb\xdc\x2e\xcf\xcb\x2d\x7d\x97\x54\xcb\x22\x15\x66\x67\xde\x33\x00\x1b\xe9\x1c\x67\xc0\xd3\x72\x11\x61\xfc\x0c\x20\x50\x29\x80\x19\x07\x12\xad\x5e\x06\xa8\x36\x4a\x30\x13\xe5\x1a\x40\x20\xd5\xf9\xd5\xc5\xcf\xdf\x5c\xef\x74\x00\xc4\x68\x23\x23\x73\xc7\x34\xff\xdb\xb8\xd6\x03\xcd\xfd\x81\xb4\xe0\x12\x84\x42\x49\x07\x7a\x01\x59\x91\x3a\xe9\x50\x09\x15\x6d\x60\xa1\x0d\xfc\xf4\xe1\x47\xc8\x84\x12\x4b\x8c\x6b\x94\x6f\x00\xbc\x70\xc4\x7d\xeb\x8c\x90\xca\x43\x93\xca\x3a\x91\xa6\x2c\x1f\x04\xb5\x9a\x08\x52\x81\x74\xd6\x33\x8b\xb6\x0d\x4e\x83\x00\xe2\xb0\x5c\x48\x8c\xc1\x22\xa3\xe1\x84\x59\xa2\xdb\x0e\x6b\xac\xe8\x36\x44\x39\x3d\xff\x0b\x46\xae\xf6\xd9\xe0\x5f\x0b\x69\x30\x9e\x35\x90\x1b\x43\x29\xb6\xb5\xcf\xb9\x21\x8c\x5c\x4d\x40\x7c\xab\x29\x49\xe3\x7b\x3f\x41\xa9\x11\x1f\xfc\x4c\x88\x49\x63\xd0\x13\x22\x70\x94\x36\xc6\x3c\xe2\xbd\x25\xd2\x82\xc1\xdc\xa0\x45\xe5\x2a\x1a\x09\x15\xb6\x34\xd9\x03\x7e\x8d\x86\x00\x91\xa0\x15\x69\x4c\xc4\x5e\xa1\x71\x60\x30\xd2\x4b\x25\x7f\xa9\xa0\x5b\xa2\x26\x2d\x9b\x0a\x87\xd6\x81\x54\x0e\x8d\x12\x29\xac\x44\x5a\xe0\x08\x84\x8a\xf7\x60\x67\x62\x03\x06\x69\x5d\x28\x54\x0d\x22\x4f\xb1\xfb\xb8\xfc\xa8\x0d\xf1\x77\xa1\x67\x90\x38\x97\xdb\xd9\x74\xba\x94\xae\x34\x22\x91\xce\x32\x12\xa5\xcd\x94\xed\x81\x9c\x17\xc4\xf5\x69\x8c\x2b\x4c\xa7\x56\x2e\xc7\xc2\x44\x89\x74\x18\xb9\xc2\xe0\x54\xe4\x72\xcc\x9b\x51\x6c\x48\x26\x59\xfc\x95\x09\x66\xc7\xee\x2c\xec\x79\x6e\x9d\x91\x6a\xd9\xe8\x62\x7d\x7e\x20\xb3\x48\xcf\x49\xf0\x45\x00\xe8\x37\xbb\xe5\x09\x7d\x22\x32\x7e\xfc\xe1\xfa\x06\x4a\x8c\x3c\xdf\x3c\x8b\xb6\x43\x5b\x28\x54\x72\x8b\x28\x2b\xd5\x02\x8d\x9f\xb9\x30\x3a\x63\xa8\xa8\xe2\x5c\x4b\xe5\xf8\x47\x94\x4a\x54\x0e\x6c\x31\xcf\x48\x2f\x48\x86\xd1\x3a\x62\xe4\x3e\xe0\x37\x6c\x74\x61\x8e\x50\xe4\xb1\x70\x18\xef\x0f\xb9\x50\xf0\x46\x64\x98\xbe\x11\x16\xff\x70\xde\x11\x8f\xec\x98\x18\x72\x30\xf7\xea\x2e\x65\x7f\xc2\x9e\x8a\x03\x94\xbe\xa0\x93\xdd\x0d\xeb\x76\x9d\x63\x54\x5a\x38\x9a\xc9\x16\x4d\xa8\x1d\x13\x58\x72\x78\x97\x60\x9d\x48\xd0\x92\x0b\x51\xa4\x6e\x17\x13\x80\x22\x5f\x1a\x11\xe3\xb5\x33\xe4\x83\x36\x33\x78\xeb\x47\xee\x0c\xec\x32\x40\xbc\x45\x4c\x31\x72\xda\xec\xf7\xec\x6c\xf5\x3a\x0c\x0c\x33\xfc\x36\x1b\x5b\xfb\xda\xf6\x5b\xd2\x03\x76\x3a\x84\x2d\xb0\x0d\x71\x51\xf2\xc3\x3d\xa9\x44\xcd\x7f\x0d\x60\xbf\x3b\xc9\x2b\x24\xb9\x61\xb2\x86\xa9\x98\x63\x5a\x91\xa2\xb4\xed\x19\x6b\x1c\xdc\x24\xd8\xf8\x02\xc2\x20\x9c\x5f\xbe\x6d\xd3\x88\xfa\x06\x85\x31\x62\xd3\x31\x42\x3a\xcc\x3a\x11\x1f\x36\x29\xdb\x76\xde\x83\x7b\x30\x3a\x65\x8f\x4b\x04\xbb\x4e\xc7\x8e\xd3\x5b\xdc\x11\x08\xb8\xc3\x0d\x1b\x6b\xf6\x09\x81\x9f\x3c\xb8\x67\x59\x83\x6c\xf4\x59\x06\xee\x70\xc3\xd3\xbb\x6c\x78\x93\x2a\x9d\x6c\x2f\x01\xb7\xb9\xd5\x66\x1b\xd3\x92\xbd\xfd\xe5\x36\x3a\x07\x0d\xc9\x98\x6f\x77\xb8\xe9\xeb\xde\xe1\x13\xd1\x21\x68\xbf\xe7\x09\x7d\x60\xa2\xb3\x41\x28\xd9\x20\xf2\x3c\x95\xd8\x6e\x73\xeb\xad\xd3\x8a\x35\x5b\xb9\xd5\x07\x20\xda\x2b\x50\x75\x98\x35\xc7\xe3\xe5\xe4\x6b\xeb\x39\x4f\x1a\x94\xc8\x3c\x84\x53\x3e\x88\x1a\x62\xbf\x6f\x3f\x8b\x54\xd6\x42\x3b\xd6\xa5\x0b\x35\x82\x4b\xed\xe8\xcf\x0f\xf7\x92\xfc\x11\x89\xd3\x5b\x8d\xf6\x52\x3b\xfe\xf2\x24\x94\xf2\x08\x3e\x25\x9d\x3c\x44\x56\x33\xe5\xd5\x9d\x08\x51\xf7\xf2\x76\x02\x17\x0b\xe6\x7f\x45\x53\x69\xc9\x6f\x6a\x13\xb6\x3c\xb0\x04\x87\x75\x7e\x19\xbf\x40\x56\x58\x76\xca\x4a\xab\x31\x66\xb9\xdb\xb4\xae\x10\xe8\xa8\x4d\x83\x8c\x8f\x5e\x2c\x2c\x74\x43\x91\x85\xef\xf1\x41\x65\x4a\xa9\x04\xc4\x05\x6f\x98\xe3\x1b\xf2\x43\x32\x1a\x58\x27\x43\xb3\x44\xc8\xc9\x24\x1f\xc2\xd9\x3e\x43\xea\xdb\x80\x39\xad\x03\x1b\x14\x13\x80\xfb\x31\xe5\x93\x46\xa1\x43\x3b\x26\x17\x31\x0e\x78\x38\x9d\x75\xee\xed\x11\x93\xd8\x27\x7d\x20\x53\x71\x98\x0f\xeb\x91\xc7\x1a\x28\x6f\xf5\x33\x91\x93\x2c\xfe\x4a\xc6\x9d\x59\xfa\x1b\xe4\x42\x1a\x3b\x81\x73\x4e\x13\x53\x6c\xf4\x49\xc5\xcc\xaf\x81\xe9\x59\x8a\xd3\x38\xb2\xd3\x2b\x91\x92\x9b\x21\x2b\xa0\x00\x53\xef\x74\x28\xad\xdb\x71\xb6\x23\x58\x27\xda\x7a\x4f\xb1\x90\x98\x72\x38\x7c\x72\x87\x9b\x93\x11\x2d\xdb\xb9\x54\x5d\xa2\x4f\x2e\xd4\x89\x77\x53\x7b\x52\x5a\xf9\x34\xad\xd2\x0d\x9c\x70\xdf\xc9\xe3\xfd\x76\xaf\x87\x12\x71\xcc\xe5\x09\x91\x5e\x1d\xe0\x42\x06\x44\xae\x21\x33\x99\xc8\xfb\x45\xc6\xa2\x59\xc9\x08\xcf\xa3\x48\x17\x8a\x2b\x00\x83\x31\x5b\x87\xc4\x5c\xef\x41\x2a\x1d\x97\x88\x33\xa9\x1a\x09\x32\x8f\x04\xe1\x87\xc2\x3a\x91\x51\x02\x6b\x99\xa6\x30\x6f\xe7\x5b\x61\x31\x26\x89\x88\x31\x4f\xf5\xa6\x62\xe1\xa9\x3d\xf3\x42\x46\x59\x4d\xc9\x56\xae\x4e\x74\x47\x88\x1d\x74\xb3\x94\xc5\x46\x57\x46\xaf\x64\x8c\xf1\xf9\xd5\x45\x2b\x03\x9a\xb1\x2b\x4f\x01\x87\x69\x6a\xb9\xc6\x40\x99\x8d\xd3\x21\xb3\x69\x8d\x64\xf3\x1a\xfc\x5a\xfd\xa9\x13\xd9\xb9\xd6\x29\x8a\xfd\x7e\x1f\x11\x57\x85\x97\x61\x5c\x3b\x78\x76\xb3\x03\x27\x78\x1d\xbc\xcf\x53\x19\x49\x57\x7a\xe1\x6d\xe4\xcd\xd9\x39\x4f\x6a\x17\xf7\x8b\x05\x48\x0e\x11\x2d\xba\xd1\x36\xba\x97\x16\xe4\x52\x69\xd3\xae\x25\xfd\x06\xb9\xc7\x0c\x3f\x44\x13\x6a\xd6\xd3\xe2\xbe\x22\xee\x26\x3d\x8f\x24\xe8\xa7\x26\x98\x46\x21\x25\x2c\x51\x3a\x34\x5f\x9b\x6a\x94\x95\x68\x54\x45\xeb\x76\x02\xdf\x24\x68\x90\x8d\x4e\x54\x18\x83\xca\xa5\x1b\x70\x6b\x0d\xb6\xc8\x73\x6d\x1c\xc6\xbb\xcb\xb0\x29\x69\x05\x15\xd2\xba\x19\xcb\x2e\x6b\x1f\x9b\x3a\x91\xa6\x7a\x0d\x51\x5a\x58\x87\x26\x28\x75\xa8\x0b\x31\xfb\x33\xbd\xc2\xb2\x48\xe3\xbd\x75\x97\xeb\xcb\x13\x61\x71\x5b\x34\xb0\x45\x14\x21\xc6\x18\xfb\x8e\xe0\xf9\x71\xb1\xc0\xc8\xc9\x15\xa6\x1b\xc8\x50\x70\xf5\x4d\xb8\x2d\x4e\x4a\xb7\x5b\x4d\x8f\xe6\x96\x7c\x3b\x98\x29\xbc\x77\x65\xe9\x0a\x24\x97\xa6\x9a\x15\x3d\x53\x12\xaa\x15\x7a\x22\x2c\x2c\x84\x4c\x49\x60\xdb\xf9\x80\x51\x72\x65\x70\x25\x71\xfd\x49\x59\xb1\xc0\x77\x42\xa6\xef\xb4\x59\x0b\x13\xd7\x28\xfa\x00\x62\xb6\x2e\x53\x11\x78\x80\x98\xb4\x9f\xaa\xcf\x23\x1e\xa8\xdc\x0a\xf6\xbc\x72\x38\xe9\x66\xb4\xc5\x76\x89\x8a\xc8\x49\xd4\x5b\x97\xe4\xba\x4a\x89\x27\xeb\x04\x15\xc5\x62\xc5\xbc\xd2\x01\x30\xb8\x40\x83\x6a\xbf\xd0\x15\x18\x54\xe2\x51\x03\x54\xb9\xda\x48\x38\x91\xea\x25\xd3\x79\x8e\xa8\xca\x72\x10\xac\xa5\x4b\x40\x30\x02\xa5\x20\x2f\x3a\x52\x2e\x2e\x44\x51\x04\x4a\xe4\x09\x96\xaa\x56\xde\x6d\x9d\xf3\xdf\xe7\x1f\x2f\x2f\x2e\xdf\xcf\xd8\x8f\xf7\xf1\x70\x5f\x5b\xa5\x85\x82\x47\xf1\x26\x7c\xcd\xd1\xee\x97\x45\x7c\x93\x0a\x0a\x85\xf7\x39\x46\xb4\xa9\x39\x26\x62\x25\x49\xdb\x4d\xa8\x50\xae\xd0\x88\x79\x8a\x10\x0b\x27\x20\xd5\x96\x60\xa7\x68\x2d\x6c\x74\x01\x89\x58\x21\xc4\x88\x79\xbb\x2f\x54\x31\x1a\xeb\x84\x8a\x69\xdf\x7a\x11\x12\xc1\xe6\xf6\x61\x8e\xd4\x5b\x56\xbd\x0f\xb1\x2d\x03\xc6\xb4\x2c\x17\x75\x54\x83\xa8\xa1\x2a\xb2\x76\x43\x3d\xee\x99\x45\xbd\x7d\x9c\x68\xd6\xce\x9c\x70\xc5\x9e\x37\xe8\xa9\x9e\xf1\xf8\xaa\x7e\xe6\x7f\xb5\x55\xd0\x3e\x3e\xbc\x80\xd6\x5d\x55\x18\x43\x2a\xac\xfb\xe4\x45\xfa\x01\x65\xb3\x48\x2b\xaf\x97\xc3\x0e\xfd\x4d\x35\x74\x37\x53\x6c\x8b\x3b\xb6\x80\x9f\xd4\xff\xb6\x63\xb4\x0d\x9d\x63\x74\x42\xa6\x9e\xe0\x5a\x21\x08\x8a\x01\x5d\x89\x64\x70\x60\xcc\x15\xac\x4e\x15\xce\xaf\x2e\xa0\x8b\x19\x83\x2c\xf1\x6d\xa8\xdc\xe3\xd9\x73\x63\x84\xb2\x8c\xf0\x8d\xcc\xba\xd2\x85\x31\x64\x68\xad\x58\x76\xf7\x1b\x14\xb6\x35\x82\xf3\xdd\x5e\xe4\x3a\xbb\x69\x2f\xed\xbe\x73\x30\x11\xd8\xdf\xc3\x53\x94\xfe\xf6\xa1\x6e\xcb\x4f\xd6\x81\xa3\x0f\xcc\xbc\x8a\xdb\xae\x1a\x8d\xb1\xf7\x41\xc4\xea\xa0\x6a\x9c\xc5\x69\x97\xa0\xe9\xcb\xc9\x39\x10\x08\x27\x43\x73\xf4\xce\xc6\x9f\xe8\xc5\x68\xd2\x0d\x59\xb2\xed\x7a\x51\x22\xd4\x12\xe3\x09\xf8\x12\x85\xe0\x70\x93\x42\xef\x3b\xa5\xd7\x8a\x73\x3f\x05\x85\x2d\x0f\x40\x18\xe3\x0a\x22\x49\x97\x4f\x16\x03\x18\xd6\x9e\x28\xc2\xdc\x91\x3d\x1e\xaa\x33\x0e\xe4\xf9\x0b\x6d\x32\xe1\x66\x64\xd5\x71\xec\xba\xa5\x2a\xc8\xd4\x53\xf0\x2b\x80\xf2\xf9\x79\x52\x64\x82\xfc\xb2\x88\xd9\xb9\x54\x7d\x2a\x96\x91\x60\x37\x59\x6a\xa4\x98\xeb\xc2\x97\x10\xb7\xec\x1b\xe4\x10\xf9\xbc\x39\x72\x82\x90\xe5\x6e\x13\xa8\xf1\x85\x34\xcb\xc4\xfd\x07\x54\x4b\x97\xcc\xe0\x9b\x57\xff\xf1\xed\x77\x1d\x03\xf5\x9c\xb2\x46\x8c\xdf\xfb\x10\xa5\xe5\x78\xf3\x31\xd4\xdb\x87\x5a\xaf\x4e\x12\x79\x26\xe5\xf1\xce\x64\xb9\x1d\x53\xd5\x5f\xb7\x52\xb9\x16\x9c\xf3\xc0\x5c\x58\x8e\xc1\xfb\xc9\xf9\x8e\x72\x22\x0a\x8b\x54\x84\x23\x0a\x4f\x5b\x97\x91\xb6\x16\xe4\xbf\x7c\x35\x82\x79\xe0\xd9\xc4\x6b\xd7\x64\x6b\xd6\x3f\xdf\xdf\x4e\x5a\x36\x23\x2d\x7c\x3f\xda\xc1\x94\x72\xe5\x82\x8d\x30\x89\x69\x0f\x92\x1c\x8a\x19\xf4\x36\x3b\x84\xd5\x2d\x36\x1b\xab\x9d\x0c\x49\x82\x54\x0e\x97\xd8\x5d\x3f\x2f\xd5\x47\x2a\xf7\xed\xbf\x77\x0b\x8c\x54\x32\x2b\xb2\x19\xbc\xe8\x18\xe2\x2d\xf2\x53\x88\x87\x87\xb4\xf5\x67\x82\xcc\xf2\xd2\x88\x2c\xe3\xcc\x5f\xc6\xa8\x9c\x5c\x48\x34\x75\x15\xf3\x79\x11\x4f\x5c\xf0\x99\x47\x8d\xf8\x5f\xdb\x60\x46\x0f\x52\xba\x2b\xa3\xe3\x22\x42\x63\xb9\x00\xec\xcb\x27\x51\xdd\xf2\x6e\x72\xf4\x5a\xe9\xd3\x4c\xa8\x02\xce\xb2\x92\x45\x81\x2a\x0a\x25\xd5\xd2\x06\x64\xa4\xf5\xf6\xaf\xaf\x6a\x4b\xd3\xd6\x09\x92\xd5\x6e\xd6\xc5\x78\x27\x56\xc6\x68\x30\x06\x01\xcb\x42\x18\xa1\x1c\x62\x4c\x76\xb5\xdf\x7c\x04\x28\x35\x2b\x2f\xb6\xc7\xbc\x83\x96\x24\x18\x20\x6f\xb9\x69\xc3\xe1\x10\xd9\x97\x90\x9f\xcc\x00\xbd\x7c\xf1\xaa\x57\xee\xaa\x71\xdd\x47\x40\xc2\x39\x34\x6a\x06\xff\xf7\xf9\x7c\xfc\x3f\x62\xfc\xcb\xed\x69\xf8\xe7\xc5\xf8\xfb\xff\x1f\xcd\x6e\x9f\xd7\x7e\xde\x9e\xbd\xfe\xb7\x0e\x48\xed\x71\xee\xb6\x35\x64\x38\xf8\xda\x32\xac\x2a\xe5\x63\xc4\x8e\x58\x2f\xe0\xc6\x14\x38\x82\x77\x22\xb5\x38\x82\x4f\x8a\xfd\xe4\x17\x12\xad\x3b\xd4\xf7\x6d\x0c\x27\xb4\xea\x49\xff\x10\x46\xa9\x7f\x4c\x40\xb7\xaf\xb6\x7a\x18\x91\x68\x28\x11\xa3\x66\x08\x6b\x17\x0d\x80\x0d\x32\x2c\xb4\x9e\xe0\xbd\xc8\xf2\x14\x27\x91\xce\xa6\x3d\x17\x11\x1a\x28\x3c\xc4\xc9\xbd\xfc\xf6\x00\xe9\x39\xfd\xec\x65\xe4\xf6\xf4\xf3\x38\xfc\xf7\xbc\xfc\x74\xf6\xfa\xf4\x7f\x27\xbd\xfd\x67\xcf\xa7\x67\xaf\x4f\x6b\x92\x77\xfb\x79\xbc\x15\xbb\xc9\xed\xf3\xb3\xd7\xb5\xbe\xb3\x7d\x21\xac\xa5\x2f\x83\x99\xc8\x87\xed\x58\x1f\x85\x50\xe0\x63\x9d\xc8\xf2\x52\x22\x9b\x91\xe3\x6e\x6e\x12\xa4\x97\x1c\xe8\xa7\xae\x3b\x21\x83\x64\x1e\x8e\xbc\xd4\xe1\xc5\xd2\x66\x3d\xb4\x96\x5e\xef\x5d\x44\xa8\x2c\x7c\x63\x53\xff\xa8\x35\xce\x66\xad\xff\x23\x2e\x0e\xb8\x9e\xb1\x33\xa3\x56\xf4\x09\x84\x69\x96\xf2\xc3\xdd\xa2\xaa\xd6\xff\x3b\xdc\xd4\xe8\xbe\xe0\xd6\xba\x05\x8a\xf8\xcb\x3a\x60\x90\xc7\xb0\x87\xce\x03\xe0\x41\x95\x66\x3f\x74\x25\x5c\xf2\xa5\x27\x6c\x17\x81\xa0\x7c\xd4\xc9\xe7\xde\xb9\xc4\x08\x1b\x77\xe9\x38\xbc\x42\x11\x87\x8f\x14\x72\x18\x0c\x7d\x23\xef\xd1\x07\xac\xcf\xf6\xce\x1d\x85\x31\x20\xc8\x15\xcb\x18\xfe\xf3\xfa\xa7\xcb\xe9\x7b\x1d\xbc\x2a\x25\x41\xd6\x6b\x23\x9f\x6c\x8d\xc0\x16\x51\x02\x82\xb2\x78\x4b\xd9\xf4\x35\xf5\x4c\x32\xa1\xe4\x02\xad\x9b\x04\x68\x68\xec\xe7\x57\xb7\xdd\xe6\x91\x22\xdd\x60\x51\x39\xd0\xe5\x33\xe5\xf2\x02\x5a\x10\x25\xd6\x32\xda\x7c\x05\x93\x63\x4f\x46\x35\xd7\x71\xd8\xe4\x9a\x37\xe1\xc4\x1d\x82\x0e\x9b\x28\x10\x52\x79\xd7\xe3\x01\x4e\x48\x10\x6b\xa8\xfe\x4a\xaa\xfb\xdb\x09\x9c\xae\xb9\x8c\x7e\x42\x3f\x4f\x3c\x22\xd5\xc5\x43\xfa\x56\xf3\xa5\x01\x21\x1f\xf2\x1b\xb9\x5c\x52\xf0\xd3\xed\x0d\x12\x04\x5c\xa1\x72\x67\xec\x51\x16\xa0\x74\x0d\x88\x0a\x87\x62\xdb\xa3\xb0\x5d\x04\x3f\xbf\xba\x3d\x81\xd3\x26\x1d\x3a\x17\x93\x2a\xc6\x7b\x78\x55\x1d\x81\xe5\x3a\x3e\x0b\x55\x75\xbb\x51\x4e\xdc\x73\x06\x91\x68\x8b\xca\x97\xf6\x9d\xf6\xb5\x45\xab\x29\x27\xc6\x34\x1d\xfb\xc0\x31\x86\x35\xd7\x8e\x3a\x57\x2a\x59\xe5\x4f\xe4\x73\x61\xdc\xc0\x75\xcf\x40\x8d\x21\x45\x6a\xbb\xf9\x58\xb6\x43\x75\x88\x6f\x42\x1e\xa8\xd9\x7f\xe2\xfd\xc1\x83\x69\xa2\x3a\xce\x60\x1f\x42\x93\xcb\x9a\x0c\x3f\x8a\x26\x5b\xa7\x42\x64\x89\x75\x64\x89\x22\x11\xe6\xce\x4e\xf5\x8a\x8c\x3e\xae\xa7\x6b\x6d\xee\xa4\x5a\x8e\x49\x48\xc7\x5e\x12\xec\x94\x9d\xe3\xf4\x2b\xfe\xf3\x25\x24\x60\x07\xfb\x14\x74\xf0\x77\xb4\xff\x44\x62\x70\xa4\x30\x7d\x2c\x2d\xca\x9b\x9d\x0f\xf1\x79\x3d\x14\xb9\x2e\xd3\xc8\x1d\xb8\x64\x1b\xfc\x39\x7c\xb8\xdb\x5d\xb3\xcd\x99\x88\xbd\xf1\x16\xaa\x27\xd9\xfa\x9d\x35\x8b\x28\xce\xc5\x87\x68\x33\x0e\x0f\x35\xc6\x42\xc5\x63\xce\x48\xad\xa3\xef\x8f\x25\x71\x21\xbf\xd8\x08\x7d\xba\x78\xfb\xe7\xea\x5b\x21\x1f\x6b\x71\x0e\xb9\x2f\xe2\x0b\x4b\x33\x70\xa6\x28\x23\x6b\xeb\xb4\x11\x4b\x6c\x7e\x2b\xe6\xd5\xe5\xf7\x2d\x45\x43\x2e\x0b\xbf\xfe\xc6\x9f\xb6\x6f\x42\x44\x9a\x27\xe2\x55\x39\xf7\xf8\x32\xa4\xc6\xad\xe3\xcb\x90\xe3\xcb\x90\xe3\xcb\x90\x9d\x76\x7c\x19\xf2\xc7\xbc\x0c\x39\xbe\xec\x38\xbe\xec\x38\xbe\xec\xa8\xb7\xe3\xcb\x8e\xbe\x76\x7c\xd9\x71\x7c\xd9\x71\x7c\xd9\x71\x7c\xd9\xd1\xb1\xd4\xf1\x65\xc7\xf1\x65\xc7\xf1\x65\xc7\x0e\xb2\xc7\x97\x1d\x8f\x3b\xf5\xfc\xd7\xbe\x00\x7c\x3c\x77\xff\xe7\x38\x77\x3f\x9e\xa4\x1f\x4f\xd2\x8f\x27\xe9\xc7\x93\xf4\xe3\x49\xfa\xf1\x24\x7d\x80\x26\xc7\x93\xf4\xe3\x49\xfa\xf1\x24\xfd\x78\x92\x1e\xc6\xf7\x9d\xa4\x2f\x44\x6a\x0f\x3e\x4a\xff\x7b\x00\x00\x00\xff\xff\x96\xf8\x2f\x2d\x0d\x53\x00\x00") +var _operatorsCoreosCom_operatorgroupsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3b\x6d\x73\x1b\xb7\xd1\xdf\xfd\x2b\x76\x94\x67\x26\x92\x87\xa4\x6c\xe5\x99\x34\xe1\x17\x8f\xc6\x8e\x3d\x6a\x1d\x45\x63\xc9\xe9\x4c\x5d\xb5\x03\xde\x2d\x79\xa8\xee\x80\x2b\x80\x23\xc5\xa4\xf9\xef\x9d\x5d\xe0\x8e\x77\xe4\xbd\x50\xb2\x92\xb4\x1d\xe2\x8b\xc4\x03\xb0\x58\xec\xfb\x2e\x00\x91\xcb\x1f\xd1\x58\xa9\xd5\x14\x44\x2e\xf1\xde\xa1\xa2\x5f\x76\x72\xf7\x8d\x9d\x48\x7d\xba\x7c\xf9\xec\x4e\xaa\x78\x0a\xaf\x0b\xeb\x74\xf6\x01\xad\x2e\x4c\x84\x6f\x70\x2e\x95\x74\x52\xab\x67\x19\x3a\x11\x0b\x27\xa6\xcf\x00\x84\x52\xda\x09\xfa\x6c\xe9\x27\x40\xa4\x95\x33\x3a\x4d\xd1\x8c\x17\xa8\x26\x77\xc5\x0c\x67\x85\x4c\x63\x34\x0c\xbc\x5c\x7a\xf9\x62\x72\xf6\x62\xf2\xe2\x19\x80\x12\x19\x4e\x41\xe7\x68\x84\xd3\x66\x61\x74\x91\xdb\x49\xf9\xd3\x4e\x22\x6d\x50\xd3\x9f\xec\x99\xcd\x31\xa2\x45\x78\xcc\x66\x4a\x63\x8c\x87\x57\xe2\x22\x1c\x2e\xb4\x91\xe5\x6f\x80\x31\xe8\x34\xe3\xff\xfd\x1e\x7f\x08\x30\xde\x11\x48\xfe\x9e\x4a\xeb\xfe\xb4\xdb\xf7\x5e\x5a\xc7\xfd\x79\x5a\x18\x91\x6e\x23\xcc\x5d\x36\xd1\xc6\x5d\x6e\x96\xe7\xe5\x16\xbe\x4b\xaa\x45\x91\x0a\xb3\x35\xef\x19\x80\x8d\x74\x8e\x53\xe0\x69\xb9\x88\x30\x7e\x06\x10\xa8\x14\xc0\x8c\x03\x89\x96\x2f\x03\x54\x1b\x25\x98\x89\x72\x0d\x20\x90\xea\xfc\xea\xe2\xc7\xaf\xae\xb7\x3a\x00\x62\xb4\x91\x91\xb9\x63\x9a\xff\x6b\x5c\xeb\x81\xe6\xfe\x40\x5a\x70\x09\x42\xa1\xa4\x03\x3d\x87\xac\x48\x9d\x74\xa8\x84\x8a\xd6\x30\xd7\x06\x7e\x78\xff\x3d\x64\x42\x89\x05\xc6\x35\xca\x37\x00\x5e\x38\xe2\xbe\x75\x46\x48\xe5\xa1\x49\x65\x9d\x48\x53\x96\x0f\x82\x5a\x4d\x04\xa9\x40\x3a\xeb\x99\x45\xdb\x06\xa7\x41\x00\x71\x58\xce\x25\xc6\x60\x91\xd1\x70\xc2\x2c\xd0\x6d\x86\x35\x56\x74\x6b\xa2\x9c\x9e\xfd\x03\x23\x57\xfb\x6c\xf0\x9f\x85\x34\x18\x4f\x1b\xc8\x8d\xa1\x14\xdb\xda\xe7\xdc\x10\x46\xae\x26\x20\xbe\xd5\x94\xa4\xf1\xbd\x9f\xa0\xd4\x88\x0f\x7e\x26\xc4\xa4\x31\xe8\x09\x11\x38\x4a\x1b\x63\x1e\xf1\xde\x12\x69\xc1\x60\x6e\xd0\xa2\x72\x15\x8d\x84\x0a\x5b\x9a\xec\x00\xbf\x46\x43\x80\x48\xd0\x8a\x34\x26\x62\x2f\xd1\x38\x30\x18\xe9\x85\x92\x3f\x55\xd0\x2d\x51\x93\x96\x4d\x85\x43\xeb\x40\x2a\x87\x46\x89\x14\x96\x22\x2d\x70\x04\x42\xc5\x3b\xb0\x33\xb1\x06\x83\xb4\x2e\x14\xaa\x06\x91\xa7\xd8\x5d\x5c\xbe\xd7\x86\xf8\x3b\xd7\x53\x48\x9c\xcb\xed\xf4\xf4\x74\x21\x5d\x69\x44\x22\x9d\x65\x24\x4a\xeb\x53\xb6\x07\x72\x56\x10\xd7\x4f\x63\x5c\x62\x7a\x6a\xe5\x62\x2c\x4c\x94\x48\x87\x91\x2b\x0c\x9e\x8a\x5c\x8e\x79\x33\x8a\x0d\xc9\x24\x8b\xbf\x30\xc1\xec\xd8\xad\x85\x3d\xcf\xad\x33\x52\x2d\x1a\x5d\xac\xcf\x0f\x64\x16\xe9\x39\x09\xbe\x08\x00\xfd\x66\x37\x3c\xa1\x4f\x44\xc6\x0f\xdf\x5d\xdf\x40\x89\x91\xe7\x9b\x67\xd1\x66\x68\x0b\x85\x4a\x6e\x11\x65\xa5\x9a\xa3\xf1\x33\xe7\x46\x67\x0c\x15\x55\x9c\x6b\xa9\x1c\xff\x88\x52\x89\xca\x81\x2d\x66\x19\xe9\x05\xc9\x30\x5a\x47\x8c\xdc\x05\xfc\x9a\x8d\x2e\xcc\x10\x8a\x3c\x16\x0e\xe3\xdd\x21\x17\x0a\x5e\x8b\x0c\xd3\xd7\xc2\xe2\x6f\xce\x3b\xe2\x91\x1d\x13\x43\xf6\xe6\x5e\xdd\xa5\xec\x4e\xd8\x51\x71\x80\xd2\x17\x74\xb2\xbb\x61\xdd\xae\x73\x8c\x4a\x0b\x47\x33\xd9\xa2\x09\xb5\x65\x02\x4b\x0e\x6f\x13\xac\x13\x09\x5a\x72\x2e\x8a\xd4\x6d\x63\x02\x50\xe4\x0b\x23\x62\xbc\x76\x86\x7c\xd0\x7a\x0a\x6f\xfc\xc8\xad\x81\x5d\x06\x88\xb7\x88\x29\x46\x4e\x9b\xdd\x9e\xad\xad\x5e\x87\x81\x61\x86\xdf\x66\x63\x6b\x5f\xda\x7e\x4b\xba\xc7\x4e\x87\xb0\x05\xb6\x21\x2e\x4a\xbe\xbb\x27\x95\xa8\xf9\xaf\x01\xec\xb7\x27\x79\x85\x24\x37\x4c\xd6\x30\x15\x33\x4c\x2b\x52\x94\xb6\x3d\x63\x8d\x83\x9b\x04\x1b\x5f\x40\x18\x84\xf3\xcb\x37\x6d\x1a\x51\xdf\xa0\x30\x46\xac\x3b\x46\x48\x87\x59\x27\xe2\xc3\x26\x65\xd3\xce\x7b\x70\x0f\x46\xa7\xec\x71\x89\x60\xd7\xe9\xd8\x71\x7a\x8b\x3b\x02\x01\x77\xb8\x66\x63\xcd\x3e\x21\xf0\x93\x07\xf7\x2c\x6b\x90\x8d\x3e\xcb\xc0\x1d\xae\x79\x7a\x97\x0d\x6f\x52\xa5\x93\xed\x25\xe0\x36\xb7\xda\x6c\x63\x5a\xb2\xb7\xbf\xdc\x46\xe7\xa0\x21\x19\xf3\xed\x0e\xd7\x7d\xdd\x5b\x7c\x22\x3a\x04\xed\xf7\x3c\xa1\x0f\x4c\x74\x36\x08\x25\x1b\x44\x9e\xa7\x12\xdb\x6d\x6e\xbd\x75\x5a\xb1\x66\x2b\xb7\xfa\x00\x44\x7b\x05\xaa\x0e\xb3\xe6\x78\xbc\x9c\x7c\x69\x3d\xe7\x49\x83\x12\x99\x87\x70\xca\x07\x51\x43\xec\xf7\xed\x47\x91\xca\x5a\x68\xc7\xba\x74\xa1\x46\x70\xa9\x1d\xfd\xf9\xee\x5e\x92\x3f\x22\x71\x7a\xa3\xd1\x5e\x6a\xc7\x5f\x9e\x84\x52\x1e\xc1\xa7\xa4\x93\x87\xc8\x6a\xa6\xbc\xba\x13\x21\xea\x5e\xde\x4e\xe0\x62\xce\xfc\xaf\x68\x2a\x2d\xf9\x4d\x6d\xc2\x96\x07\x96\xe0\xb0\xce\x2f\xe3\x17\xc8\x0a\xcb\x4e\x59\x69\x35\xc6\x2c\x77\xeb\xd6\x15\x02\x1d\xb5\x69\x90\xf1\xd1\x8b\x85\x85\x6e\x28\xb2\xf0\x3d\x3e\xa8\x4c\x29\x95\x80\xb8\xe0\x0d\x73\x7c\x43\x7e\x48\x46\x03\xeb\x64\x68\x16\x08\x39\x99\xe4\x7d\x38\xdb\x67\x48\x7d\x1b\x30\xa7\x75\x60\x83\x62\x02\x70\x3f\xa6\x7c\xd2\x28\x74\x68\xc7\xe4\x22\xc6\x01\x0f\xa7\xb3\xce\xbd\x3d\x62\x12\xfb\xa4\xf7\x64\x2a\xf6\xf3\x61\x3d\xf2\x58\x03\xe5\xad\x7e\x26\x72\x92\xc5\x9f\xc9\xb8\x33\x4b\x7f\x81\x5c\x48\x63\x27\x70\xce\x69\x62\x8a\x8d\x3e\xa9\x98\xf9\x35\x30\x3d\x4b\x71\x1a\x47\x76\x7a\x29\x52\x72\x33\x64\x05\x14\x60\xea\x9d\x0e\xa5\x75\x5b\xce\x76\x04\xab\x44\x5b\xef\x29\xe6\x12\x53\x0e\x87\x8f\xee\x70\x7d\x34\xa2\x65\x3b\x97\xaa\x4b\xf4\xd1\x85\x3a\xf2\x6e\x6a\x47\x4a\x2b\x9f\xa6\x55\xba\x86\x23\xee\x3b\x7a\xbc\xdf\xee\xf5\x50\x22\x8e\xb9\x3c\x21\xd2\xab\x3d\x5c\xc8\x80\xc8\x35\x64\x26\x13\x79\xbf\xc8\x58\x34\x4b\x19\xe1\x79\x14\xe9\x42\x71\x05\x60\x30\x66\xeb\x90\x98\xeb\x1d\x48\xa5\xe3\x12\x71\x26\x55\x23\x41\xe6\x91\x20\xfc\x50\x58\x25\x32\x4a\x60\x25\xd3\x14\x66\xed\x7c\x2b\x2c\xc6\x24\x11\x31\xe6\xa9\x5e\x57\x2c\x3c\xb6\x27\x5e\xc8\x28\xab\x29\xd9\xca\xd5\x89\xee\x08\xb1\x83\x6e\x96\xb2\xd8\xe8\xca\xe8\xa5\x8c\x31\x3e\xbf\xba\x68\x65\x40\x33\x76\xe5\x29\xe0\x30\x4d\x2d\xd7\x18\x28\xb3\x71\x3a\x64\x36\xad\x91\x6c\x5e\x83\x5f\xab\x3f\x75\x22\x3b\xd3\x3a\x45\xb1\xdb\xef\x23\xe2\xaa\xf0\x32\x8c\x6b\x07\xcf\x6e\xb6\xe0\x04\xaf\x83\xf7\x79\x2a\x23\xe9\x4a\x2f\xbc\x89\xbc\x39\x3b\xe7\x49\xed\xe2\x7e\x31\x07\xc9\x21\xa2\x45\x37\xda\x44\xf7\xd2\x82\x5c\x28\x6d\xda\xb5\xa4\xdf\x20\xf7\x98\xe1\x87\x68\x42\xcd\x7a\x5a\xdc\x55\xc4\xed\xa4\xe7\x91\x04\xfd\xd8\x04\xd3\x28\xa4\x84\x25\x4a\x87\xe6\x6b\x53\x8d\xb2\x12\x8d\xaa\x68\xdd\x4e\xe0\x9b\x04\x0d\xb2\xd1\x89\x0a\x63\x50\xb9\x74\x0d\x6e\xa5\xc1\x16\x79\xae\x8d\xc3\x78\x7b\x19\x36\x25\xad\xa0\x42\x5a\x37\x65\xd9\x65\xed\x63\x53\x27\xd2\x54\xaf\x20\x4a\x0b\xeb\xd0\x04\xa5\x0e\x75\x21\x66\x7f\xa6\x97\x58\x16\x69\xbc\xb7\xee\x72\x7d\x79\x22\x2c\x6e\x8a\x06\xb6\x88\x22\xc4\x18\x63\xdf\x11\x3c\x3f\xce\xe7\x18\x39\xb9\xc4\x74\x0d\x19\x0a\xae\xbe\x09\xb7\xc1\x49\xe9\x76\xab\xe9\xd1\xdc\x90\x6f\x0b\x33\x85\xf7\xae\x2c\x5d\x81\xe4\xd2\x54\xb3\xa2\x67\x4a\x42\xb5\x42\x4f\x84\x85\xb9\x90\x29\x09\x6c\x3b\x1f\x30\x4a\xae\x0c\x2e\x25\xae\x3e\x2a\x2b\xe6\xf8\x56\xc8\xf4\xad\x36\x2b\x61\xe2\x1a\x45\x1f\x40\xcc\xd6\x65\x2a\x02\x0f\x10\x93\xf6\x53\xf5\x79\xc4\x03\x95\x5b\xc1\x9e\x57\x0e\x27\x5d\x8f\x36\xd8\x2e\x50\x11\x39\x89\x7a\xab\x92\x5c\x57\x29\xf1\x64\x95\xa0\xa2\x58\xac\x98\x55\x3a\x00\x06\xe7\x68\x50\xed\x16\xba\x02\x83\x4a\x3c\x6a\x80\x2a\x57\x1b\x09\x27\x52\xbd\x60\x3a\xcf\x10\x55\x59\x0e\x82\x95\x74\x09\x08\x46\xa0\x14\xe4\x79\x47\xca\xc5\x85\x28\x8a\x40\x89\x3c\xc1\x52\xd5\xca\xbb\xad\x73\xfe\x7c\xfe\xe1\xf2\xe2\xf2\xdd\x94\xfd\x78\x1f\x0f\x77\xb5\x55\x5a\x28\x78\x14\x6f\xc2\xd7\x1c\xed\x6e\x59\xc4\x37\xa9\xa0\x50\x78\x9f\x63\x44\x9b\x9a\x61\x22\x96\x92\xb4\xdd\x84\x0a\xe5\x12\x8d\x98\xa5\x08\xb1\x70\x02\x52\x6d\x09\x76\x8a\xd6\xc2\x5a\x17\x90\x88\x25\x42\x8c\x98\xb7\xfb\x42\x15\xa3\xb1\x4e\xa8\x98\xf6\xad\xe7\x21\x11\x6c\x6e\x1f\x66\x48\xbd\x65\xd5\x7b\x1f\xdb\x32\x60\x4c\xcb\x72\x51\x47\x35\x88\x1a\xaa\x22\x6b\x37\xd4\xe3\x9e\x59\xd4\xdb\xc7\x89\x66\xed\xcc\x09\x57\xec\x78\x83\x9e\xea\x19\x8f\xaf\xea\x67\xfe\x57\x5b\x05\xed\xc3\xc3\x0b\x68\xdd\x55\x85\x31\xa4\xc2\xba\x8f\x5e\xa4\x1f\x50\x36\x8b\xb4\xf2\x7a\x39\xec\xd0\x5f\x57\x43\xb7\x33\xc5\xb6\xb8\x63\x03\xf8\x49\xfd\x6f\x3b\x46\x9b\xd0\x39\x46\x27\x64\xea\x09\xae\x15\x82\xa0\x18\xd0\x95\x48\x06\x07\xc6\x5c\xc1\xea\x54\xe1\xfc\xea\x02\xba\x98\x31\xc8\x12\xdf\x86\xca\x3d\x9e\x3d\x37\x46\x28\xcb\x08\xdf\xc8\xac\x2b\x5d\x18\x43\x86\xd6\x8a\x45\x77\xbf\x41\x61\x5b\x23\x38\xdf\xed\x45\xae\xb3\x9b\xf6\xd2\xee\x3b\x07\x13\x81\xdd\x3d\x3c\x45\xe9\x6f\x17\xea\xa6\xfc\x64\x1d\x38\xfa\xc0\xcc\xab\xb8\xed\xaa\xd1\x18\x7b\x1f\x44\xac\x0e\xaa\xc6\x59\x9c\x76\x09\x9a\xbe\x9c\x9c\x03\x81\x70\x32\x34\x43\xef\x6c\xfc\x89\x5e\x8c\x26\x5d\x93\x25\xdb\xac\x17\x25\x42\x2d\x30\x9e\x80\x2f\x51\x08\x0e\x37\x29\xf4\xbe\x53\x7a\xa5\x38\xf7\x53\x50\xd8\xf2\x00\x84\x31\xae\x20\x92\x74\xf9\x64\x31\x80\x61\xed\x89\x22\xcc\x1d\xd9\xe3\xa1\x3a\xe3\x40\x9e\x3f\xd7\x26\x13\x6e\x4a\x56\x1d\xc7\xae\x5b\xaa\x82\x4c\x3d\x05\xbf\x02\x28\x9f\x9f\x27\x45\x26\xc8\x2f\x8b\x98\x9d\x4b\xd5\xa7\x62\x19\x09\x76\x93\xa5\x46\x8a\x99\x2e\x7c\x09\x71\xc3\xbe\x41\x0e\x91\xcf\x9b\x21\x27\x08\x59\xee\xd6\x81\x1a\x9f\x49\xb3\x4c\xdc\xbf\x47\xb5\x70\xc9\x14\xbe\x3a\xfb\xc3\xd7\xdf\x74\x0c\xd4\x33\xca\x1a\x31\x7e\xe7\x43\x94\x96\xe3\xcd\xc7\x50\x6f\x17\x6a\xbd\x3a\x49\xe4\x99\x94\xc7\x3b\x93\xc5\x66\x4c\x55\x7f\xdd\x48\xe5\x4a\x70\xce\x03\x33\x61\x39\x06\xef\x27\xe7\x5b\xca\x89\x28\x2c\x52\x11\x8e\x28\x3c\x6d\x5d\x46\xda\x5a\x90\xff\xf2\x6c\x04\xb3\xc0\xb3\x89\xd7\xae\xc9\xc6\xac\x7f\xba\xbf\x9d\xb4\x6c\x46\x5a\xf8\x76\xb4\x85\x29\xe5\xca\x05\x1b\x61\x12\xd3\x1e\x24\x39\x14\x33\xe8\x6d\x76\x08\xab\x5b\x6c\x36\x56\x3b\x19\x92\x04\xa9\x1c\x2e\xb0\xbb\x7e\x5e\xaa\x8f\x54\xee\xeb\xff\xef\x16\x18\xa9\x64\x56\x64\x53\x78\xd1\x31\xc4\x5b\xe4\xa7\x10\x0f\x0f\x69\xe3\xcf\x04\x99\xe5\x85\x11\x59\xc6\x99\xbf\x8c\x51\x39\x39\x97\x68\xea\x2a\xe6\xf3\x22\x9e\x38\xe7\x33\x8f\x1a\xf1\xbf\xb4\xc1\x8c\xee\xa5\x74\x57\x46\xc7\x45\x84\xc6\x72\x01\xd8\x97\x4f\xa2\xba\xe5\x5d\xe7\xe8\xb5\xd2\xa7\x99\x50\x05\x9c\x65\x25\x8b\x02\x55\x14\x4a\xaa\x85\x0d\xc8\x48\xeb\xed\x5f\x5f\xd5\x96\xa6\xad\x12\x24\xab\xdd\xac\x8b\xf1\x4e\xac\x8c\xd1\x60\x0c\x02\x16\x85\x30\x42\x39\xc4\x98\xec\x6a\xbf\xf9\x08\x50\x6a\x56\x5e\x6c\x8e\x79\x07\x2d\x49\x30\x40\xde\x72\xd3\x86\xc3\x21\xb2\x2f\x21\x3f\x99\x01\x7a\xf9\xe2\xac\x57\xee\xaa\x71\xdd\x47\x40\xc2\x39\x34\x6a\x0a\x7f\xfb\x74\x3e\xfe\x8b\x18\xff\x74\x7b\x1c\xfe\x79\x31\xfe\xf6\xef\xa3\xe9\xed\xf3\xda\xcf\xdb\x93\x57\xff\xd7\x01\xa9\x3d\xce\xdd\xb4\x86\x0c\x07\x5f\x5b\x86\x55\xa5\x7c\x8c\xd8\x11\xeb\x39\xdc\x98\x02\x47\xf0\x56\xa4\x16\x47\xf0\x51\xb1\x9f\xfc\x4c\xa2\x75\x87\xfa\xbe\x8d\xe1\x88\x56\x3d\xea\x1f\xc2\x28\xf5\x8f\x09\xe8\xf6\xd5\x56\xf7\x23\x12\x0d\x25\x62\xd4\x0c\x61\xed\xa2\x01\xb0\x41\x86\xb9\xd6\x13\xbc\x17\x59\x9e\xe2\x24\xd2\xd9\x69\xcf\x45\x84\x06\x0a\x0f\x71\x72\x2f\xbf\xde\x43\x7a\x8e\x3f\x79\x19\xb9\x3d\xfe\x34\x0e\xff\x3d\x2f\x3f\x9d\xbc\x3a\xfe\xeb\xa4\xb7\xff\xe4\xf9\xe9\xc9\xab\xe3\x9a\xe4\xdd\x7e\x1a\x6f\xc4\x6e\x72\xfb\xfc\xe4\x55\xad\xef\x64\x57\x08\x6b\xe9\xcb\x60\x26\xf2\x7e\x33\xd6\x47\x21\x14\xf8\x58\x27\xb2\xbc\x94\xc8\x66\xe4\xb8\x9d\x9b\x04\xe9\x25\x07\xfa\xb1\xeb\x4e\xc8\x20\x99\x87\x23\x2f\xb5\x7f\xb1\xb4\x59\x0f\xad\xa5\xd7\x3b\x17\x11\x2a\x0b\xdf\xd8\xd4\x7f\x6a\x8d\xb3\x59\xeb\xff\x80\xf3\x3d\xae\x67\x6c\xcd\xa8\x15\x7d\x02\x61\x9a\xa5\xfc\x70\xb7\xa8\xaa\xf5\xff\x0a\x37\x35\xba\x2f\xb8\xb5\x6e\x81\x22\xfe\xb2\x0e\x18\xe4\x31\xec\xa1\xf3\x00\x78\x50\xa5\xd9\x0f\x5d\x09\x97\x7c\xee\x09\xdb\x45\x20\x28\x1f\x75\xf2\xb9\x77\x2e\x31\xc2\xc6\x5d\x3a\x0e\xaf\x50\xc4\xe1\x23\x85\x1c\x06\x43\xdf\xc8\x7b\xf4\x01\xeb\xb3\xb9\x73\x47\x61\x0c\x08\x72\xc5\x32\x86\x3f\x5e\xff\x70\x79\xfa\x4e\x07\xaf\x4a\x49\x90\xf5\xda\xc8\x27\x5b\x23\xb0\x45\x94\x80\xa0\x2c\xde\x52\x36\x7d\x4d\x3d\x93\x4c\x28\x39\x47\xeb\x26\x01\x1a\x1a\xfb\xe9\xec\xb6\xdb\x3c\x52\xa4\x1b\x2c\x2a\x07\xba\x7c\xa6\x5c\x5e\x40\x0b\xa2\xc4\x5a\x46\x9b\xaf\x60\x72\xec\xc9\xa8\xe6\x3a\x0e\x9b\x5c\xf1\x26\x9c\xb8\x43\xd0\x61\x13\x05\x42\x2a\xef\x7a\x3c\xc0\x11\x09\x62\x0d\xd5\x9f\x49\x75\x7f\x39\x82\xe3\x15\x97\xd1\x8f\xe8\xe7\x91\x47\xa4\xba\x78\x48\xdf\x6a\xbe\x34\x20\xe4\x43\x7e\x23\x17\x0b\x0a\x7e\xba\xbd\x41\x82\x80\x4b\x54\xee\x84\x3d\xca\x1c\x94\xae\x01\x51\xe1\x50\x6c\x73\x14\xb6\x8d\xe0\xa7\xb3\xdb\x23\x38\x6e\xd2\xa1\x73\x31\xa9\x62\xbc\x87\xb3\xea\x08\x2c\xd7\xf1\x49\xa8\xaa\xdb\xb5\x72\xe2\x9e\x33\x88\x44\x5b\x54\xbe\xb4\xef\xb4\xaf\x2d\x5a\x4d\x39\x31\xa6\xe9\xd8\x07\x8e\x31\xac\xb8\x76\xd4\xb9\x52\xc9\x2a\x7f\x22\x9f\x0b\xe3\x06\xae\x7b\x06\x6a\x0c\x29\x52\xdb\xcd\xc7\xb2\xed\xab\x43\x7c\x13\x72\x4f\xcd\xfe\x1d\xef\x0f\xee\x4d\x13\xd5\x71\x06\xfb\x10\x9a\x5c\xd6\x64\xf8\x51\x34\xd9\x38\x15\x22\x4b\xac\x23\x4b\x14\x89\x30\x77\xf6\x54\x2f\xc9\xe8\xe3\xea\x74\xa5\xcd\x9d\x54\x8b\x31\x09\xe9\xd8\x4b\x82\x3d\x65\xe7\x78\xfa\x05\xff\xf9\x1c\x12\xb0\x83\x7d\x0a\x3a\xf8\x3b\xda\xbf\x23\x31\x38\x52\x38\x7d\x2c\x2d\xca\x9b\x9d\x0f\xf1\x79\x3d\x14\xb9\x2e\xd3\xc8\x2d\xb8\x64\x1b\xfc\x39\x7c\xb8\xdb\x5d\xb3\xcd\x99\x88\xbd\xf1\x16\xaa\x27\xd9\xfa\x95\x35\x8b\x28\xce\xc5\x87\x68\x3d\x0e\x0f\x35\xc6\x42\xc5\x63\xce\x48\xad\xa3\xef\x8f\x25\x71\x21\x3f\xdb\x08\x7d\xbc\x78\xf3\xfb\xea\x5b\x21\x1f\x6b\x71\xf6\xb9\x2f\xe2\x0b\x4b\x53\x70\xa6\x28\x23\x6b\xeb\xb4\x11\x0b\x6c\x7e\x2b\x66\xd5\xe5\xf7\x0d\x45\x43\x2e\x0b\x3f\xff\xc2\x9f\x36\x6f\x42\x44\x9a\x27\xe2\xac\x9c\x7b\x78\x19\x52\xe3\xd6\xe1\x65\xc8\xe1\x65\xc8\xe1\x65\xc8\x56\x3b\xbc\x0c\xf9\x6d\x5e\x86\x1c\x5e\x76\x1c\x5e\x76\x1c\x5e\x76\xd4\xdb\xe1\x65\x47\x5f\x3b\xbc\xec\x38\xbc\xec\x38\xbc\xec\x38\xbc\xec\xe8\x58\xea\xf0\xb2\xe3\xf0\xb2\xe3\xf0\xb2\x63\x0b\xd9\xc3\xcb\x8e\xc7\x9d\x7a\xfe\x6f\x5f\x00\x3e\x9c\xbb\xff\x77\x9c\xbb\x1f\x4e\xd2\x0f\x27\xe9\x87\x93\xf4\xc3\x49\xfa\xe1\x24\xfd\x70\x92\x3e\x40\x93\xc3\x49\xfa\xe1\x24\xfd\x70\x92\x7e\x38\x49\x0f\xe3\xfb\x4e\xd2\xe7\x22\xb5\x7b\x1f\xa5\xff\x3b\x00\x00\xff\xff\x33\x8d\x09\x7c\x0d\x53\x00\x00") func operatorsCoreosCom_operatorgroupsYamlBytes() ([]byte, error) { return bindataRead( @@ -205,7 +205,7 @@ func operatorsCoreosCom_operatorgroupsYaml() (*asset, error) { return a, nil } -var _operatorsCoreosCom_operatorsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x1a\xcb\x92\xdb\x36\xf2\x3e\x5f\xd1\x25\x1f\x9c\x54\x89\x52\xec\xbd\xa4\xe6\x36\x35\x76\xb6\x66\x37\x3b\x71\x79\xc6\xbe\xa4\x72\x68\x91\x2d\x11\x2b\x12\x60\xd0\xa0\x34\x5a\xaf\xff\x7d\xab\x01\x50\x22\xf5\x22\x27\x96\x77\x70\x91\x84\x47\xbf\x9f\x80\xb0\x52\x9f\xc9\xb2\x32\xfa\x1a\xb0\x52\xf4\xe4\x48\xcb\x2f\x9e\x2c\x7f\xe6\x89\x32\xd3\xd5\x9b\xab\xa5\xd2\xd9\x35\xdc\xd6\xec\x4c\xf9\x91\xd8\xd4\x36\xa5\x77\x34\x57\x5a\x39\x65\xf4\x55\x49\x0e\x33\x74\x78\x7d\x05\x80\x5a\x1b\x87\x32\xcd\xf2\x13\x20\x35\xda\x59\x53\x14\x64\x93\x05\xe9\xc9\xb2\x9e\xd1\xac\x56\x45\x46\xd6\x03\x6f\x50\xaf\x7e\x9a\xbc\xf9\x79\xf2\xd3\x15\x80\xc6\x92\xae\xc1\x54\x64\xd1\x19\xcb\x93\xdd\xb7\xd4\x58\x32\xf2\x51\x5e\x71\x45\xa9\xc0\x5f\x58\x53\x57\xed\xdd\xad\x3d\x01\x54\x43\x06\x3a\x5a\x18\xab\x9a\xdf\x00\x09\x98\xa2\xf4\xdf\x03\x7b\xbf\x45\x18\x7e\xaa\x50\xec\xfe\xd9\x99\xfe\x55\xb1\xf3\x4b\x55\x51\x5b\x2c\x5a\x38\xfd\x2c\x2b\xbd\xa8\x0b\xb4\xbb\xf9\x2b\x00\x4e\x4d\x45\xd7\x70\x5b\xd4\xec\x48\x26\x22\xbb\x91\x86\x24\xf2\xba\x7a\x13\x49\xe2\x34\xa7\x12\x1b\x02\x41\x40\xe9\x9b\x0f\x77\x9f\xff\xf6\xb0\xb7\x00\x90\x11\xa7\x56\x55\xce\x0b\xaf\xa1\x11\x2c\x55\x96\x98\xb4\x63\x40\x48\x03\xda\x2d\x41\x93\xd6\x71\xb7\x11\xc2\xcc\xec\xdf\x94\xba\xd6\x74\x65\x65\xb3\x6b\x49\x29\x8c\x96\x91\x74\xe6\xf7\xe8\xf8\x6f\xb2\xb7\x0a\x20\xe4\x87\x93\x90\x89\xc5\x10\x83\xcb\xa9\x11\x04\x65\x91\x67\x30\x73\x70\xb9\xe2\x1d\x07\xde\x86\x64\x1a\x75\xa4\x73\x72\x00\xfc\x81\xac\x00\x02\xce\x4d\x5d\x64\x62\x6a\x2b\xb2\x0e\x2c\xa5\x66\xa1\xd5\x7f\xb6\xd0\x19\x9c\xf1\x68\x0b\x74\xc4\x0e\x94\x76\x64\x35\x16\xb0\xc2\xa2\xa6\x31\xa0\xce\x0e\x60\x97\xb8\x01\x4b\x82\x17\x6a\xdd\x82\xe8\x8f\xf0\x21\x2d\xff\x32\x96\x40\xe9\xb9\xb9\x86\xdc\xb9\x8a\xaf\xa7\xd3\x85\x72\x8d\x13\xa5\xa6\x2c\x6b\xad\xdc\x66\xea\xfd\x41\xcd\x6a\xb1\x9c\x69\x46\x2b\x2a\xa6\xac\x16\x09\xda\x34\x57\x8e\x52\x57\x5b\x9a\x62\xa5\x12\xcf\x8c\xf6\x8e\x34\x29\xb3\x57\x36\xba\x1d\xef\x21\x0e\x8a\x64\x67\x95\x5e\x74\x96\xbc\x51\x3f\x53\x59\x62\xf1\xa0\xc4\x76\x02\xc0\xc0\xec\x4e\x27\x32\x25\x62\xfc\xf8\xfe\xe1\x11\x1a\x8a\x82\xde\x82\x8a\x5a\x06\x78\x5a\x5b\x22\x59\xa5\xe7\x64\xc3\xc9\xb9\x35\xa5\x87\x4a\x3a\xab\x8c\xd2\xce\xff\x48\x0b\x45\xda\x01\xd7\xb3\x52\x39\x31\x8b\x3f\x6b\x62\x27\x8a\x3c\x04\x7c\xeb\x83\x0e\xcc\x08\xea\x2a\x43\x47\xd9\xe1\x96\x3b\x0d\xb7\x58\x52\x71\x8b\x4c\xff\x77\xdd\x89\x8e\x38\x11\x85\x0c\xd6\x5e\x3b\xa4\x1e\x1e\x38\xf0\x5b\x80\x26\x20\x9e\x54\x77\x13\x23\x1e\x2a\x4a\x3b\xae\x98\x11\x2b\x2b\xae\xe2\xd0\x91\x38\x5c\x27\x10\x0e\x41\xed\xd0\xd5\x3c\x0c\xb9\xdf\xda\x41\x6f\x66\x2c\x76\xd1\xc2\x8f\x7a\x17\xd0\x50\x0c\xd2\x31\xa4\xa6\xac\x8c\x16\xbb\x1a\x4a\xd5\xe9\x60\x06\x3e\x2b\x35\xf0\x0e\xd7\xf6\x68\xbf\xdd\x6e\x8d\xf3\x33\xe2\xad\xf1\x0b\x0f\xe8\x02\x38\xa6\xc0\xd0\x91\x70\x3b\x80\x5a\x19\x62\xe5\xa2\x8b\x63\x34\x49\xba\x28\x70\x46\xc5\x03\x15\x94\x1e\xaa\xa7\x8f\x63\x19\x9d\xf3\xc7\xb7\xec\x31\xff\x6b\xfb\x44\x08\x0d\x1e\x08\xfc\x59\x93\xdd\x80\x59\x91\x95\x68\x41\x4e\x14\xb7\x13\x4a\xcd\x94\x49\xcc\x65\x7f\xb2\x23\x96\xd7\x67\x94\x39\x50\x4c\x43\x58\x05\x1f\xc2\x5d\x9a\xbf\x7f\x92\x88\xd4\xca\xba\x03\xb8\xde\x3f\x18\x19\x57\xec\xd9\x0c\x02\xe0\x46\x28\x51\x69\xa5\x0f\x7a\xf0\x98\x53\x67\x06\xd0\x12\xdc\xdc\xbf\x3b\x16\x94\xf6\x19\x46\x6b\x71\x73\x66\x97\x72\x54\x9e\x65\xa2\x3f\xc2\x77\xc7\xcd\x19\x5e\x62\x1e\x68\x56\xa2\x99\x6b\x87\x4a\x73\x4c\x82\x63\x40\x58\xd2\xc6\xe7\x4f\x9f\xa6\x1b\xaf\x95\xcd\x3d\xa8\x2d\xf9\x5c\xec\x4d\x63\x49\x1b\x0f\xe2\x54\x6a\x3d\x94\xd4\x59\xd3\x68\x10\x9c\xf3\xa5\xdd\x48\x04\x7d\xef\x1e\x73\x3c\x26\x76\xc7\x10\x9b\x0c\x63\x49\x9b\xbe\x2d\x7b\xba\x14\x19\x29\x8e\x45\x8c\xe8\x4c\x26\xbc\x52\x64\x6a\xab\x26\xac\xaa\x42\xd1\xf1\x34\xb9\x3f\x4e\x26\x9f\xc3\xd1\xb0\xff\x4c\xa2\x7b\x0d\xb0\x0d\xbb\x5b\xbc\x2e\x69\xf3\x9a\x83\x95\x88\x07\xe6\xaa\x92\x78\xb2\x0d\x35\x43\x4c\x25\x8c\xcf\x58\xa8\x6c\x57\xac\x7b\x7f\xbc\xd3\x63\xb8\x37\x4e\x3e\xde\x3f\x29\x29\x2b\xc4\xfc\xde\x19\xe2\x7b\xe3\xfc\xcc\x45\xa5\x17\x88\xfd\x1e\xb2\x0b\x90\xbd\xab\xea\x10\x3e\x44\x38\xed\xe2\x8d\x27\x70\x37\xef\x04\x60\xd9\x7d\xa7\xc1\xd8\x28\x82\x01\x68\x7c\xc5\x1e\x50\x05\x24\x65\xcd\xbe\xde\xd2\x46\x27\x54\x56\x6e\x73\x14\x4b\x94\xad\xb1\x1d\xd1\x7e\x13\xc2\x88\xec\x51\x0a\xc7\xb0\x12\x7a\x86\x02\x53\xca\x20\xab\x3d\xe3\xbe\x7c\x95\x7e\x4f\xa5\x03\x70\x95\x64\x17\x04\x95\x84\xfc\xa1\x5a\xef\x0b\xd4\x61\x0c\x08\xd7\x6d\xa0\x83\x4c\x09\xe0\x29\x91\x16\xda\x6a\x72\xc4\x89\xa4\xa4\x24\xd2\xe4\x4c\x79\x96\xdf\xbf\x78\xd0\xe7\x42\x5f\x06\x0c\xcf\x9f\x3d\xb6\xdb\x02\x19\xb2\x4c\x89\x95\xd8\xed\x17\x49\x26\x5e\xed\x5f\xa1\x42\x65\x79\x02\x37\xbe\xb1\x2e\xa8\xb3\xa6\xb4\x37\x90\x16\x98\x1e\x74\x95\xa0\x91\x7c\xb0\xc2\x42\x52\x9b\x44\x12\x0d\x54\x84\x44\x67\xe6\x07\x09\x7f\x0c\xeb\x5c\xea\x39\x09\xb2\x73\x45\x85\xef\x8a\x46\x4b\xda\x8c\xc6\x82\xfa\x2c\xba\xb6\x07\x8c\xee\xf4\x28\xa4\xc7\x03\x8b\xde\xe6\x52\xa3\x8b\x0d\x8c\xfc\xda\xe8\xdb\xea\x87\xde\xac\x88\x59\xe6\x6f\x6c\xb0\xf8\x30\x30\x55\x0d\x30\xcd\x8e\x5d\x95\x58\xf5\x9b\x95\xa5\xf9\x49\xb4\x1d\x3b\xfa\x48\xf3\x20\x80\x56\x89\x39\x27\x4b\xda\x17\xde\xe6\x64\x5d\xb9\xab\x44\xc7\x31\x35\x52\x06\x6b\xe5\xf2\x6e\x3d\x7b\x4a\xa2\xfd\x4e\xde\xe3\xda\x5d\x26\x54\x9a\x7f\x6c\xc8\x0e\xf6\xbe\xe5\x22\xe4\xb4\x86\xda\x31\x90\xb6\x2a\xcd\x1b\x62\xa5\xf1\x09\xcd\x95\x58\x4b\x50\xdd\x99\x9c\x37\xc8\x08\x86\xd5\x28\xa7\xef\x7b\xce\x30\x7a\xf3\xe1\xae\xb9\xd7\x09\xd7\x39\xd4\x30\xda\x93\x4e\x07\xc6\xbf\x9d\x0c\x9e\x41\xd4\xed\xf6\x50\xbb\xbe\x68\xdd\x05\x6d\xdb\x4e\x7f\xeb\xd0\x58\xd0\x10\x82\xfb\xb3\xc0\xa0\x0c\x70\x9c\xdc\x1d\xb5\x6d\x62\x71\x85\xaa\xc0\x59\xd1\xb4\xcd\xa1\x38\x8a\x4d\xf3\x96\xf8\xd7\xc1\x6c\x8e\x5c\x74\x1c\x63\x63\x40\x2d\x3d\xbc\x9a\x96\x5a\x39\x98\xec\x80\x8d\x82\xbf\x67\xdb\xf0\x92\x5a\xba\x5b\x76\x8f\x16\x35\x7b\x01\x3e\xaa\x92\x86\x24\xdf\xbd\x76\x97\x1d\x38\x55\x52\xb4\x86\x46\x19\x6e\x0b\x96\xb2\x70\x61\x65\x34\x35\xbe\xe9\xb3\x89\x71\x39\x9d\x0c\x28\xed\xf1\xac\x64\x0f\x30\x37\xb6\x44\x77\x0d\x19\x3a\x4a\x84\xb2\x41\x62\xf8\xe4\xef\xc1\x2e\x2a\x82\x35\xb2\x68\x63\x46\x87\x57\xa5\x2f\xc0\x64\x49\xcc\xb8\x78\x3e\x77\x37\x90\xd7\x25\x8a\x77\x61\xe6\xfd\x28\x02\x02\xa5\x33\x95\xa2\xbf\xe1\xcc\xc8\xa1\x2a\x18\x70\x66\xea\xe0\x7d\x3b\xf5\x5f\x5c\xc3\x96\x90\xfb\xa2\xec\x11\x3e\x42\x99\x20\x47\x45\x78\x5d\x55\xbd\x66\x6f\x03\xdf\x93\xea\xe3\x57\x7e\xbd\x54\xc7\xeb\xbf\x6d\xb0\x8d\x04\x8f\xbd\x37\x99\x39\x3c\xda\x9a\xc6\xf0\x0b\x16\x4c\x63\xf8\xa4\x97\xda\xac\x2f\x4f\xbb\xdf\xfc\x6c\x79\x6f\x2a\x4f\xe1\x96\xe6\x0b\x92\xe5\x0b\xcc\x0f\xe8\xf2\x4b\x5e\xed\xdc\xc5\x5a\xc9\x37\x44\xbe\xca\xa8\x14\xa5\xd4\x79\x50\x01\xa5\xd9\x11\x66\x71\x92\xb4\x53\x96\xe2\xda\x38\x5c\xce\x0f\x92\xe9\xee\xf9\x45\x2a\x5a\x40\x29\x74\x55\x06\xff\x78\xf8\xed\x7e\xfa\x77\x13\x0b\x68\x4c\x53\xe2\x98\x98\xa4\xb2\x1d\x03\xd7\x69\x0e\xc8\xcd\x05\xf4\x83\x4f\x59\x25\x6a\x35\x27\x76\x93\x08\x8d\x2c\xff\xfe\xf6\x8f\x3e\x69\xff\x62\x2c\xd0\x13\x96\x55\x41\x63\x50\xb1\x13\x6d\x5e\x24\x5a\xa5\x97\x17\xc4\x16\xb2\xaf\xb2\x3c\xc1\x95\xc9\x22\xc3\x6b\xcf\x8a\xc3\x25\x81\x89\xac\xd4\x04\x85\x5a\xf6\xda\xcc\x88\x2b\x4a\x5b\x64\x7f\xd1\x58\xd2\xd7\x11\xfc\xb0\xce\xc9\x12\x8c\xe4\xe7\x28\x90\xb3\x2d\x5e\x65\xae\xe5\x0e\x91\xac\x70\xad\x63\xd5\x62\x41\xb6\x37\xdc\xfa\x97\x93\x15\x69\xf7\xa3\x34\xda\x6a\x0e\xda\xb4\x40\x79\x04\xa2\xc7\x8a\x52\x35\x57\x94\x1d\x90\xf9\xfb\xdb\x3f\x46\xf0\x43\x57\x26\x3d\x28\x95\xce\xe8\x09\xde\x86\x3e\x4c\xb1\x48\xef\xc7\xd8\x93\xf3\x46\x3b\x7c\x12\x8c\xa9\x34\x50\x3a\x74\x37\xce\x40\x8e\x2b\x02\x36\x25\xc1\x9a\x8a\x22\x09\x2f\x00\x19\xac\xfd\x8d\x45\x6f\xf1\x11\x54\x18\x7a\xfb\x0a\xad\xeb\x79\x17\xec\xc8\x67\x98\x13\x1e\x7b\x2e\xeb\x8e\xe7\xf9\x9f\x7f\x4a\x7b\x56\x15\xfc\x82\xcf\x50\x7f\x49\x62\xfe\xed\xfa\x82\x12\xbb\x6f\xf9\xc2\x37\x48\x6c\xd7\x8c\x8a\xd0\x32\x93\xb2\xc8\x2b\xa5\xca\xf1\xd4\xac\xc8\xae\x14\xad\xa7\x6b\x63\x97\x4a\x2f\x12\x31\xf6\x24\x58\x11\x4f\xfd\xbf\x05\xa6\xaf\xfc\xc7\xa5\x04\xc4\x15\xa6\x17\x97\x92\x07\xfa\xf2\xa2\x12\x2a\x78\x7a\x09\x49\x35\x0d\xf0\xf3\x7b\xce\x5e\x79\x3d\x84\xc0\x97\xee\xe3\x90\x98\xb4\xce\x55\x9a\x37\x7f\x3b\x68\x65\x89\x12\xb3\x90\x46\x50\x6f\x5e\xd8\x67\x45\x1f\xb5\x15\xca\x36\x49\xfc\x27\x4d\x82\x3a\x93\xef\xac\xd8\xc9\xfc\x25\x14\x50\xab\x8b\x06\xbf\x4f\x77\xef\x5e\xde\x3c\xa7\xaf\x6a\x75\x89\x48\x37\xe4\x7e\x2b\x3c\x61\x5f\x83\xb3\x75\xd3\xbb\xb0\x33\x56\x3a\x94\xce\x5c\x3d\xdb\xde\x4c\xed\xe4\x1d\x8b\x69\xf8\xf2\xf5\xea\x7f\x01\x00\x00\xff\xff\xbc\x5e\x93\xfd\x8d\x25\x00\x00") +var _operatorsCoreosCom_operatorsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x1a\xcb\x92\xdb\x36\xf2\x3e\x5f\xd1\x25\x1f\x9c\x54\x89\x92\xe3\xbd\x6c\xcd\x6d\x6a\xec\x6c\xcd\x6e\x76\xe2\xf2\x8c\x7d\x49\xe5\xd0\x22\x5b\x22\x56\x24\xc0\xa0\x41\x69\xb4\x5e\xff\xfb\x56\x03\xa0\x44\xea\x45\x4e\x2c\x67\x70\x91\x84\x47\xbf\x9f\x80\xb0\x52\x9f\xc9\xb2\x32\xfa\x1a\xb0\x52\xf4\xe4\x48\xcb\x2f\x9e\x2c\xff\xce\x13\x65\xa6\xab\x9f\xae\x96\x4a\x67\xd7\x70\x5b\xb3\x33\xe5\x47\x62\x53\xdb\x94\xde\xd1\x5c\x69\xe5\x94\xd1\x57\x25\x39\xcc\xd0\xe1\xf5\x15\x00\x6a\x6d\x1c\xca\x34\xcb\x4f\x80\xd4\x68\x67\x4d\x51\x90\x4d\x16\xa4\x27\xcb\x7a\x46\xb3\x5a\x15\x19\x59\x0f\xbc\x41\xbd\x7a\x33\x79\xfb\x66\xf2\xe6\x0a\x40\x63\x49\xd7\x60\x2a\xb2\xe8\x8c\xe5\xc9\xee\x5b\x6a\x2c\x19\xf9\x28\xaf\xb8\xa2\x54\xe0\x2f\xac\xa9\xab\xf6\xee\xd6\x9e\x00\xaa\x21\x03\x1d\x2d\x8c\x55\xcd\x6f\x80\x04\x4c\x51\xfa\xef\x81\xbd\x5f\x23\x0c\x3f\x55\x28\x76\xff\xea\x4c\xff\xa2\xd8\xf9\xa5\xaa\xa8\x2d\x16\x2d\x9c\x7e\x96\x95\x5e\xd4\x05\xda\xdd\xfc\x15\x00\xa7\xa6\xa2\x6b\xb8\x2d\x6a\x76\x24\x13\x91\xdd\x48\x43\x12\x79\x5d\xfd\x14\x49\xe2\x34\xa7\x12\x1b\x02\x41\x40\xe9\x9b\x0f\x77\x9f\xff\xf6\xb0\xb7\x00\x90\x11\xa7\x56\x55\xce\x0b\xaf\xa1\x11\x2c\x55\x96\x98\xb4\x63\x40\x48\x03\xda\x2d\x41\x93\xd6\x71\xb7\x11\xc2\xcc\xec\x3f\x94\xba\xd6\x74\x65\x65\xb3\x6b\x49\x29\x8c\x96\x91\x74\xe6\xf7\xe8\xf8\x5f\xb2\xb7\x0a\x20\xe4\x87\x93\x90\x89\xc5\x10\x83\xcb\xa9\x11\x04\x65\x91\x67\x30\x73\x70\xb9\xe2\x1d\x07\xde\x86\x64\x1a\x75\xa4\x73\x72\x00\xfc\x81\xac\x00\x02\xce\x4d\x5d\x64\x62\x6a\x2b\xb2\x0e\x2c\xa5\x66\xa1\xd5\x7f\xb7\xd0\x19\x9c\xf1\x68\x0b\x74\xc4\x0e\x94\x76\x64\x35\x16\xb0\xc2\xa2\xa6\x31\xa0\xce\x0e\x60\x97\xb8\x01\x4b\x82\x17\x6a\xdd\x82\xe8\x8f\xf0\x21\x2d\xff\x36\x96\x40\xe9\xb9\xb9\x86\xdc\xb9\x8a\xaf\xa7\xd3\x85\x72\x8d\x13\xa5\xa6\x2c\x6b\xad\xdc\x66\xea\xfd\x41\xcd\x6a\xb1\x9c\x69\x46\x2b\x2a\xa6\xac\x16\x09\xda\x34\x57\x8e\x52\x57\x5b\x9a\x62\xa5\x12\xcf\x8c\xf6\x8e\x34\x29\xb3\x57\x36\xba\x1d\xef\x21\x0e\x8a\x64\x67\x95\x5e\x74\x96\xbc\x51\x3f\x53\x59\x62\xf1\xa0\xc4\x76\x02\xc0\xc0\xec\x4e\x27\x32\x25\x62\xfc\xf8\xfe\xe1\x11\x1a\x8a\x82\xde\x82\x8a\x5a\x06\x78\x5a\x5b\x22\x59\xa5\xe7\x64\xc3\xc9\xb9\x35\xa5\x87\x4a\x3a\xab\x8c\xd2\xce\xff\x48\x0b\x45\xda\x01\xd7\xb3\x52\x39\x31\x8b\x3f\x6a\x62\x27\x8a\x3c\x04\x7c\xeb\x83\x0e\xcc\x08\xea\x2a\x43\x47\xd9\xe1\x96\x3b\x0d\xb7\x58\x52\x71\x8b\x4c\x7f\xb9\xee\x44\x47\x9c\x88\x42\x06\x6b\xaf\x1d\x52\x0f\x0f\x1c\xf8\x2d\x40\x13\x10\x4f\xaa\xbb\x89\x11\x0f\x15\xa5\x1d\x57\xcc\x88\x95\x15\x57\x71\xe8\x48\x1c\xae\x13\x08\x87\xa0\x76\xe8\x6a\x1e\x86\xdc\x6f\xed\xa0\x37\x33\x16\xbb\x68\xe1\x47\xbd\x0b\x68\x28\x06\xe9\x18\x52\x53\x56\x46\x8b\x5d\x0d\xa5\xea\x74\x30\x03\x9f\x95\x1a\x78\x87\x6b\x7b\xb4\xdf\x6e\xb7\xc6\xf9\x19\xf1\xd6\xf8\x85\x07\x74\x01\x1c\x53\x60\xe8\x48\xb8\x1d\x40\xad\x0c\xb1\x72\xd1\xc5\x31\x9a\x24\x5d\x14\x38\xa3\xe2\x81\x0a\x4a\x0f\xd5\xd3\xc7\xb1\x8c\xce\xf9\xe3\x5b\xf6\x98\xff\xa5\x7d\x22\x84\x06\x0f\x04\xfe\xa8\xc9\x6e\xc0\xac\xc8\x4a\xb4\x20\x27\x8a\xdb\x09\xa5\x66\xca\x24\xe6\xb2\x3f\xd9\x11\xcb\xeb\x33\xca\x1c\x28\xa6\x21\xac\x82\x0f\xe1\x2e\xcd\xdf\x3f\x49\x44\x6a\x65\xdd\x01\x5c\xef\x1f\x8c\x8c\x2b\xf6\x6c\x06\x01\x70\x23\x94\xa8\xb4\xd2\x07\x3d\x78\xcc\xa9\x33\x03\x68\x09\x6e\xee\xdf\x1d\x0b\x4a\xfb\x0c\xa3\xb5\xb8\x39\xb3\x4b\x39\x2a\xcf\x32\xd1\x1f\xe1\xbb\xe3\xe6\x0c\x2f\x31\x0f\x34\x2b\xd1\xcc\xb5\x43\xa5\x39\x26\xc1\x31\x20\x2c\x69\xe3\xf3\xa7\x4f\xd3\x8d\xd7\xca\xe6\x1e\xd4\x96\x7c\x2e\xf6\xa6\xb1\xa4\x8d\x07\x71\x2a\xb5\x1e\x4a\xea\xac\x69\x34\x08\xce\xf9\xd2\x6e\x24\x82\xbe\x77\x8f\x39\x1e\x13\xbb\x63\x88\x4d\x86\xb1\xa4\x4d\xdf\x96\x3d\x5d\x8a\x8c\x14\xc7\x22\x46\x74\x26\x13\x5e\x29\x32\xb5\x55\x13\x56\x55\xa1\xe8\x78\x9a\xdc\x1f\x27\x93\xcf\xe1\x68\xd8\x7f\x26\xd1\xbd\x06\xd8\x86\xdd\x2d\x5e\x97\xb4\x79\xcd\xc1\x4a\xc4\x03\x73\x55\x49\x3c\xd9\x86\x9a\x21\xa6\x12\xc6\x67\x2c\x54\xb6\x2b\xd6\xbd\x3f\xde\xe9\x31\xdc\x1b\x27\x1f\xef\x9f\x94\x94\x15\x62\x7e\xef\x0c\xf1\xbd\x71\x7e\xe6\xa2\xd2\x0b\xc4\x7e\x0f\xd9\x05\xc8\xde\x55\x75\x08\x1f\x22\x9c\x76\xf1\xc6\x13\xb8\x9b\x77\x02\xb0\xec\xbe\xd3\x60\x6c\x14\xc1\x00\x34\xbe\x62\x0f\xa8\x02\x92\xb2\x66\x5f\x6f\x69\xa3\x13\x2a\x2b\xb7\x39\x8a\x25\xca\xd6\xd8\x8e\x68\xbf\x09\x61\x44\xf6\x28\x85\x63\x58\x09\x3d\x43\x81\x29\x65\x90\xd5\x9e\x71\x5f\xbe\x4a\xbf\xa7\xd2\x01\xb8\x4a\xb2\x0b\x82\x4a\x42\xfe\x50\xad\xf7\x05\xea\x30\x06\x84\xeb\x36\xd0\x41\xa6\x04\xf0\x94\x48\x0b\x6d\x35\x39\xe2\x44\x52\x52\x12\x69\x72\xa6\x3c\xcb\xef\x9f\x3c\xe8\x73\xa1\x2f\x03\x86\xe7\xcf\x1e\xdb\x6d\x81\x0c\x59\xa6\xc4\x4a\xec\xf6\x8b\x24\x13\xaf\xf6\xaf\x50\xa1\xb2\x3c\x81\x1b\xdf\x58\x17\xd4\x59\x53\xda\x1b\x48\x0b\x4c\x0f\xba\x4a\xd0\x48\x3e\x58\x61\x21\xa9\x4d\x22\x89\x06\x2a\x42\xa2\x33\xf3\x83\x84\x3f\x86\x75\x2e\xf5\x9c\x04\xd9\xb9\xa2\xc2\x77\x45\xa3\x25\x6d\x46\x63\x41\x7d\x16\x5d\xdb\x03\x46\x77\x7a\x14\xd2\xe3\x81\x45\x6f\x73\xa9\xd1\xc5\x06\x46\x7e\x6d\xf4\x6d\xf5\x43\x6f\x56\xc4\x2c\xf3\x37\x36\x58\x7c\x18\x98\xaa\x06\x98\x66\xc7\xae\x4a\xac\xfa\xcd\xca\xd2\xfc\x24\xda\x8e\x1d\x7d\xa4\x79\x10\x40\xab\xc4\x9c\x93\x25\xed\x0b\x6f\x73\xb2\xae\xdc\x55\xa2\xe3\x98\x1a\x29\x83\xb5\x72\x79\xb7\x9e\x3d\x25\xd1\x7e\x27\xef\x71\xed\x2e\x13\x2a\xcd\x3f\x36\x64\x07\x7b\xdf\x72\x11\x72\x5a\x43\xed\x18\x48\x5b\x95\xe6\x0d\xb1\xd2\xf8\x84\xe6\x4a\xac\x25\xa8\xee\x4c\xce\x1b\x64\x04\xc3\x6a\x94\xd3\xf7\x3d\x67\x18\xbd\xf9\x70\xd7\xdc\xeb\x84\xeb\x1c\x6a\x18\xed\x49\xa7\x03\xe3\xdf\x4e\x06\xcf\x20\xea\x76\x7b\xa8\x5d\x5f\xb4\xee\x82\xb6\x6d\xa7\xbf\x75\x68\x2c\x68\x08\xc1\xfd\x59\x60\x50\x06\x38\x4e\xee\x8e\xda\x36\xb1\xb8\x42\x55\xe0\xac\x68\xda\xe6\x50\x1c\xc5\xa6\x79\x4b\xfc\xeb\x60\x36\x47\x2e\x3a\x8e\xb1\x31\xa0\x96\x1e\x5e\x4d\x4b\xad\x1c\x4c\x76\xc0\x46\xc1\xdf\xb3\x6d\x78\x49\x2d\xdd\x2d\xbb\x47\x8b\x9a\xbd\x00\x1f\x55\x49\x43\x92\xef\x5e\xbb\xcb\x0e\x9c\x2a\x29\x5a\x43\xa3\x0c\xb7\x05\x4b\x59\xb8\xb0\x32\x9a\x1a\xdf\xf4\xd9\xc4\xb8\x9c\x4e\x06\x94\xf6\x78\x56\xb2\x07\x98\x1b\x5b\xa2\xbb\x86\x0c\x1d\x25\x42\xd9\x20\x31\x7c\xf2\xf7\x60\x17\x15\xc1\x1a\x59\xb4\x31\xa3\xc3\xab\xd2\x17\x60\xb2\x24\x66\x5c\x3c\x9f\xbb\x1b\xc8\xeb\x12\xc5\xbb\x30\xf3\x7e\x14\x01\x81\xd2\x99\x4a\xd1\xdf\x70\x66\xe4\x50\x15\x0c\x38\x33\x75\xf0\xbe\x9d\xfa\x2f\xae\x61\x4b\xc8\x7d\x51\xf6\x08\x1f\xa1\x4c\x90\xa3\x22\xbc\xae\xaa\x5e\xb3\xb7\x81\xef\x49\xf5\xf1\x2b\xbf\x5e\xaa\xe3\xf5\xdf\x36\xd8\x46\x82\xc7\xde\x9b\xcc\x1c\x1e\x6d\x4d\x63\xf8\x19\x0b\xa6\x31\x7c\xd2\x4b\x6d\xd6\x97\xa7\xdd\x6f\x7e\xb6\xbc\x37\x95\xa7\x70\x4b\xf3\x05\xc9\xf2\x05\xe6\x07\x74\xf9\x25\xaf\x76\xee\x62\xad\xe4\x1b\x22\x5f\x65\x54\x8a\x52\xea\x3c\xa8\x80\xd2\xec\x08\xb3\x38\x49\xda\x29\x4b\x71\x6d\x1c\x2e\xe7\x07\xc9\x74\xf7\xfc\x22\x15\x2d\xa0\x14\xba\x2a\x83\x7f\x3e\xfc\x7a\x3f\xfd\x87\x89\x05\x34\xa6\x29\x71\x4c\x4c\x52\xd9\x8e\x81\xeb\x34\x07\xe4\xe6\x02\xfa\xc1\xa7\xac\x12\xb5\x9a\x13\xbb\x49\x84\x46\x96\x7f\x7b\xfb\x7b\x9f\xb4\x7f\x36\x16\xe8\x09\xcb\xaa\xa0\x31\xa8\xd8\x89\x36\x2f\x12\xad\xd2\xcb\x0b\x62\x0b\xd9\x57\x59\x9e\xe0\xca\x64\x91\xe1\xb5\x67\xc5\xe1\x92\xc0\x44\x56\x6a\x82\x42\x2d\x7b\x6d\x66\xc4\x15\xa5\x2d\xb2\xbf\x68\x2c\xe9\xeb\x08\x7e\x58\xe7\x64\x09\x46\xf2\x73\x14\xc8\xd9\x16\xaf\x32\xd7\x72\x87\x48\x56\xb8\xd6\xb1\x6a\xb1\x20\xdb\x1b\x6e\xfd\xcb\xc9\x8a\xb4\xfb\x51\x1a\x6d\x35\x07\x6d\x5a\xa0\x3c\x02\xd1\x63\x45\xa9\x9a\x2b\xca\x0e\xc8\xfc\xed\xed\xef\x23\xf8\xa1\x2b\x93\x1e\x94\x4a\x67\xf4\x04\x6f\x43\x1f\xa6\x58\xa4\xf7\x63\xec\xc9\x79\xa3\x1d\x3e\x09\xc6\x54\x1a\x28\x1d\xba\x1b\x67\x20\xc7\x15\x01\x9b\x92\x60\x4d\x45\x91\x84\x17\x80\x0c\xd6\xfe\xc6\xa2\xb7\xf8\x08\x2a\x0c\xbd\x7d\x85\xd6\xf5\xbc\x0b\x76\xe4\x33\xcc\x09\x8f\x3d\x97\x75\xc7\xf3\xfc\xcf\x3f\xa5\x3d\xab\x0a\x7e\xc1\x67\xa8\x3f\x25\x31\xff\x76\x7d\x41\x89\xdd\xb7\x7c\xe1\x1b\x24\xb6\x6b\x46\x45\x68\x99\x49\x59\xe4\x95\x52\xe5\x78\x6a\x56\x64\x57\x8a\xd6\xd3\xb5\xb1\x4b\xa5\x17\x89\x18\x7b\x12\xac\x88\xa7\xfe\xdf\x02\xd3\x57\xfe\xe3\x52\x02\xe2\x0a\xd3\x8b\x4b\xc9\x03\x7d\x79\x51\x09\x15\x3c\xbd\x84\xa4\x9a\x06\xf8\xf9\x3d\x67\xaf\xbc\x1e\x42\xe0\x4b\xf7\x71\x48\x4c\x5a\xe7\x2a\xcd\x9b\xbf\x1d\xb4\xb2\x44\x89\x59\x48\x23\xa8\x37\x2f\xec\xb3\xa2\x8f\xda\x0a\x65\x9b\x24\xfe\x93\x26\x41\x9d\xc9\x77\x56\xec\x64\xfe\x12\x0a\xa8\xd5\x45\x83\xdf\xa7\xbb\x77\x2f\x6f\x9e\xd3\x57\xb5\xba\x44\xa4\x1b\x72\xbf\x15\x9e\xb0\xaf\xc1\xd9\xba\xe9\x5d\xd8\x19\x2b\x1d\x4a\x67\xae\x9e\x6d\x6f\xa6\x76\xf2\x8e\xc5\x34\x7c\xf9\x7a\xf5\xff\x00\x00\x00\xff\xff\x14\x46\x6c\x9d\x8d\x25\x00\x00") func operatorsCoreosCom_operatorsYamlBytes() ([]byte, error) { return bindataRead( @@ -225,7 +225,7 @@ func operatorsCoreosCom_operatorsYaml() (*asset, error) { return a, nil } -var _operatorsCoreosCom_subscriptionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\xfd\x77\xe3\xb6\x95\x30\x8e\xff\xde\xbf\x02\xc7\xed\x39\xb6\x5b\x49\x33\xd3\x76\xdb\xee\x3c\xfd\xb6\xc7\xf1\x78\xba\x7e\x92\x99\xf8\x19\x4f\xd2\xb3\xdf\x6c\x76\x03\x93\x90\x84\x9a\x04\x18\x02\x94\x47\xdd\xec\xff\xfe\x39\xb8\x17\x00\x41\x49\x36\x01\x59\x92\x3d\x59\xe2\x87\x64\x4c\x91\x78\xbd\xb8\xef\x2f\xb4\xe2\xdf\xb2\x5a\x71\x29\x5e\x13\x5a\x71\xf6\x49\x33\x61\xfe\x52\x93\xdb\x3f\xa9\x09\x97\x2f\x16\xaf\x7e\x71\xcb\x45\xfe\x9a\x9c\x37\x4a\xcb\xf2\x03\x53\xb2\xa9\x33\xf6\x86\x4d\xb9\xe0\x9a\x4b\xf1\x8b\x92\x69\x9a\x53\x4d\x5f\xff\x82\x10\x2a\x84\xd4\xd4\x3c\x56\xe6\x4f\x42\x32\x29\x74\x2d\x8b\x82\xd5\xe3\x19\x13\x93\xdb\xe6\x86\xdd\x34\xbc\xc8\x59\x0d\x9d\xbb\xa1\x17\x2f\x27\xaf\xfe\x34\x79\xf9\x0b\x42\x04\x2d\xd9\x6b\xa2\x9a\x1b\x95\xd5\xbc\x82\x9e\x26\xb2\x62\x35\xd5\xb2\x56\x93\x4c\xd6\x4c\x9a\xff\x95\xbf\x50\x15\xcb\xcc\x18\xb3\x5a\x36\xd5\x6b\xb2\xf1\x1d\xec\xce\x4d\x85\x6a\x36\x93\x35\x77\x7f\x13\x32\x26\xb2\x28\xe1\xdf\xb8\xc4\xeb\x60\x54\x78\x5c\x70\xa5\xbf\x5c\xfb\xe9\x2b\xae\x34\xfc\x5c\x15\x4d\x4d\x8b\x95\xd9\xc2\x2f\x6a\x2e\x6b\xfd\xbe\x1d\xdb\x8c\xa5\x9a\x9b\xf0\xdf\xf6\x45\x2e\x66\x4d\x41\xeb\x6e\x27\xbf\x20\x44\x65\xb2\x62\xaf\x09\xf4\x51\xd1\x8c\xe5\xbf\x20\xc4\x6e\x97\xed\x73\x4c\x68\x9e\xc3\x11\xd0\xe2\xaa\xe6\x42\xb3\xfa\x5c\x16\x4d\x29\xfc\x98\xe6\x9d\x9c\xf9\x5e\x5f\x93\x8f\x73\x46\x2a\x9a\xdd\xd2\x19\x73\xe3\xdd\xb0\x9c\x68\xe9\x3f\x20\xe4\x1f\x4a\x8a\x2b\xaa\xe7\xaf\xc9\xc4\x6c\xf1\xc4\xec\x60\xf0\x33\x9e\xcf\x15\x76\x12\x3c\xd7\x4b\x33\x5d\xa5\x6b\x2e\x66\x0f\x0d\x9f\x51\x4d\x0b\x39\x23\x08\x46\x64\x2a\x6b\xa2\xe7\x8c\x98\xa1\xf8\x94\xb3\xdc\xcd\xef\x81\x19\xe1\xa7\x6b\x73\xba\x5e\x7d\x1c\x3d\xa5\x39\x15\x82\x15\x44\x4e\x49\x53\xe5\x54\x33\x45\xb4\x6c\xf7\xe7\xe1\xed\xb1\x1f\xaf\xcd\xe6\x7c\xed\xf9\x86\xe9\xe0\xab\x8b\x57\xb4\xa8\xe6\xf4\x95\x7d\xa8\xb2\x39\x2b\x69\x7b\x86\xb2\x62\xe2\xec\xea\xf2\xdb\xdf\x5d\xaf\xfc\x40\xba\x4b\x09\x41\x94\xdc\x32\x56\xa9\xf6\x52\x90\xa6\x32\x6b\x32\x8b\x23\x37\x4b\xa2\x6b\x9a\xdd\x72\x31\x83\xa5\xcf\x70\xbd\xe7\x78\x30\x6a\xb2\x36\x65\x79\xf3\x0f\x96\xe9\xe0\x71\xcd\x7e\x6c\x78\xcd\xf2\x70\x2a\x66\x67\x1d\x26\x58\x79\x6c\xf6\x29\x78\x54\xd5\x66\x5a\x3a\xb8\x87\xd8\x02\x54\xd4\x79\xbe\xb2\xcc\x9f\xc6\x2b\xbf\x12\x62\x76\x07\xbf\x24\xb9\xc1\x4b\x66\x41\x73\xe6\xae\x0b\xcb\xed\x96\x9a\x03\xd6\x73\xae\x48\xcd\xaa\x9a\x29\x26\x10\x53\x99\xc7\x54\xd8\x55\x4e\xd6\x3a\xbf\x66\xb5\xe9\xc8\x5c\xe9\xa6\xc8\x0d\x42\x5b\xb0\x5a\x93\x9a\x65\x72\x26\xf8\x3f\x7d\xef\xb0\x89\x66\xd8\xc2\x40\x90\x26\x70\x21\x05\x2d\xc8\x82\x16\x0d\x1b\x11\x2a\xf2\xb5\xbe\x4b\xba\x24\x35\x33\xe3\x92\x46\x04\x3d\xc2\x27\x6a\x7d\x2e\xef\x64\xcd\x08\x17\x53\xf9\x9a\xcc\xb5\xae\xd4\xeb\x17\x2f\x66\x5c\x3b\x54\x9d\xc9\xb2\x6c\x04\xd7\xcb\x17\x80\x75\xf9\x4d\x63\x8e\xfe\x45\xce\x16\xac\x78\xa1\xf8\x6c\x4c\xeb\x6c\xce\x35\xcb\x74\x53\xb3\x17\xb4\xe2\x63\x58\x8c\x40\x24\x5b\xe6\xbf\xac\x2d\x72\x57\x2b\x03\x6f\xbc\x48\xc4\xa1\xcd\xc4\xc3\x32\xf8\x94\x70\x45\xa8\xed\x10\x17\xdb\x9e\x89\x79\x64\xb6\xf1\xc3\xc5\xf5\x47\xe2\x66\x84\xe7\x86\x47\xd4\xbe\xba\x61\x87\xdc\x69\x99\x9d\xe5\x62\xca\x6a\xfc\x72\x5a\xcb\x12\x7a\x65\x22\xaf\x24\x17\x1a\xfe\xc8\x0a\xce\x84\x36\x37\xbd\xe4\x5a\x01\x58\x33\xa5\xcd\x41\xae\x77\x7c\x0e\xa4\x8d\xdc\x30\x8b\x23\xf2\xf5\x57\x2e\x05\x39\xa7\x25\x2b\xce\xa9\x62\x07\x3f\x3b\x73\x46\x6a\x6c\x0e\x24\xfa\xf4\x42\xc2\xbd\xfe\xc1\xda\xad\x27\xc4\x91\xdc\x7b\x8f\x3b\x44\x41\xd7\x15\xcb\xfc\x75\xa4\x82\x9c\x55\x55\xc1\x33\xbc\x71\x7a\x4e\x35\xc9\xa8\x30\xdb\xc9\x85\xd2\xb4\x28\xd8\xea\xed\xb8\x77\x16\xf7\xe1\x1f\x02\xc8\x66\x85\x5c\xb9\xc7\x6b\x34\xa3\xfb\x83\x27\xb3\x2b\x6f\xdc\x87\xab\x4c\xb3\x98\x7f\xfd\x87\x07\xb6\x9c\x20\x4b\x34\xe5\xb3\x4d\x9f\xdd\xbb\x97\xe7\xf0\x09\x30\x53\x94\x0b\x65\xbb\x68\x6a\xdc\xcd\x96\x76\x1a\x6a\x4a\x3b\x9c\xc4\x3a\x1c\x3e\xb8\xb3\x7d\x6b\x36\x8d\x4e\x81\xf5\x5b\x6e\xfe\xb5\x1f\x01\xb8\x76\x39\x6d\x67\x3e\x22\x72\xc1\xea\x9a\xe7\x16\x75\x57\x32\x3f\x56\x80\x58\xf3\xa6\x00\x42\x25\x85\xd2\x35\xe5\x1b\x2f\xbd\x6b\x82\x17\x66\xf1\x63\xaa\xf1\x06\x31\x45\xee\x78\x51\x90\x5f\x0b\xa9\x7f\xed\x47\x80\x01\x64\xcd\x67\xdc\x63\x67\x45\xb8\x70\xe3\x02\x59\xb7\x7c\x89\x54\x6c\xa5\xc3\xfb\x07\xff\x46\x31\xc2\xca\x4a\x2f\x1d\x9a\x3a\xf9\xef\xff\x39\x35\x34\x81\xd5\x54\x05\x03\x76\xfa\xbb\x17\xd3\x63\xeb\x39\x29\x12\x71\x5a\xb0\x2f\x32\x67\x67\x3d\xa7\x46\x56\x4f\xee\x0d\x43\xf6\x47\xc1\xe7\xfe\xd4\xc3\x43\xa9\x9b\x82\x29\xcf\xc2\x99\xbd\x7b\xa0\xf3\x88\xb5\xc4\xae\x07\xdf\x63\x53\x56\xd7\x2c\x7f\xd3\x98\x5b\x76\xed\x67\x75\x39\x13\xd2\x3f\xbe\xf8\xc4\xb2\x46\x6f\x60\x29\x1e\x5c\xfa\x03\x40\xeb\x9a\xe1\x1b\xed\x4e\xb0\x1a\xa1\x0c\x67\x04\xac\xa3\xfd\xc1\x6c\x09\xb0\x05\x66\x07\x15\x62\x3d\x45\x35\x57\xd3\x65\xef\x00\x66\x47\xfd\x9e\xb3\x4f\x86\xe2\x01\xef\x1f\xdc\x76\xc3\xc8\x01\x71\xe3\xac\xc8\x47\xe4\xa6\xd1\x84\x6b\xa0\x7c\xd9\x5c\x4a\xb5\x8e\xed\x56\x1b\xc5\xa3\x85\x79\x2d\xb8\x04\xc6\x85\x48\x61\x80\x95\x94\x86\x5c\x01\xc3\xc4\xc2\xe1\x27\xb0\xf2\xf6\x33\xbe\x4a\x6d\xd6\x5b\x29\x95\x6e\x8f\xcb\x90\x7e\xb8\x80\x82\x91\x3b\xae\xe7\xf0\xc7\xac\x66\xc8\x34\xa9\xa6\x34\x83\xde\x31\x3e\x9b\x6b\x35\x22\x7c\xb2\x81\x92\xae\x36\x03\x80\x8c\x66\xf3\x60\x5a\x25\x63\x5a\x11\x5a\x14\x6e\x09\x21\xd4\x22\xf5\x28\x0d\x03\x41\x4e\x1c\x87\xd1\x3b\x8a\xe5\x0e\x46\x9e\xfa\xac\x02\xde\xc6\xe3\x1a\x11\xa6\xb3\xc9\xe9\xa8\xb7\xfb\x4c\x96\x95\x41\x08\x14\xf6\xe0\x66\x49\xb8\x36\xbc\x3b\x72\x43\xb5\x6c\x66\xb8\x53\xac\xb0\x13\x77\xbc\x2c\x1c\xbe\x61\x2e\x41\x1a\xdc\x40\x6e\x56\xdb\x11\x6e\xee\x91\x63\x57\xcd\x70\x1c\x37\x09\xf6\xaf\xa4\x3a\x9b\x5b\x34\x9c\xc9\xba\x66\xaa\x92\xc2\xf4\x8c\xbf\x5c\xb4\x6b\xfb\x3f\xe6\x9d\xde\xf1\x4c\xa7\x27\xea\xb4\x3d\xec\x39\x9f\xcd\xdd\x59\xd3\x1a\xd1\x71\x17\x46\xfa\x8e\x1c\x51\x09\xad\x6b\xda\x77\x8f\xb8\x66\x65\x0f\x22\x21\x5b\xdc\x7e\x42\xce\x84\x45\xf6\x2d\x60\x07\x20\xa6\x59\x5d\xfa\x8d\x04\x28\x04\xb4\xa7\x70\x13\x78\x69\x38\x21\xae\x2d\x98\x93\x97\x11\xe3\x9d\x98\x9b\x40\xb8\x3e\x56\x70\x6b\xc7\xb2\x3a\x9d\x90\x33\x22\x1a\x8f\x78\x1e\x9a\x82\x90\x7e\x06\xb6\x23\x33\x2d\x25\xdb\xbe\xfa\xf1\x51\x1c\xfa\xc6\x76\x3f\x83\xb6\xde\xc6\x76\xfe\x4c\x44\x5c\x42\xf3\x3a\xee\x5a\xef\xab\xb1\x84\xc4\xbd\xed\xe6\x10\xf3\xf6\x0a\xc4\x9c\xe1\xcd\x51\xac\x60\x99\x36\xd4\x90\xd5\xe5\x88\x50\xa5\x64\xc6\x8d\xa8\xd0\xc2\x7e\xf7\x42\xe1\x4a\xfa\xf7\x9e\xa4\xee\x3f\x49\x5e\x3f\x01\x69\xb4\x7b\xbf\x63\xbf\x5b\xdb\x8d\x82\x2b\x6d\x10\x54\x77\x57\x3a\x78\xf7\x66\x09\xbf\x1e\x2b\x52\xd0\x1b\x56\x3c\xc0\x57\xad\xb6\xf8\xcb\xdf\xb6\x48\x34\x70\xcf\x82\xa2\x10\x42\xdb\x56\xa1\x21\x58\xb7\x95\x7b\x3d\x9c\x80\x18\xe4\x98\x7a\x64\x05\x47\x84\x92\x5b\xb6\x1c\x21\x4a\x17\x5e\x85\x93\x34\x05\xe8\xb8\x66\x48\xd0\x0d\xdc\xdd\xb2\x25\x74\xf8\x30\xbb\xb9\xb1\xab\x54\xb8\xc3\x96\x82\x01\xda\x36\x36\x13\x4d\xfc\x62\x8b\x0d\x4a\xbf\x1a\xd8\x6e\xd9\x83\xec\xf3\xa6\xb6\xa6\x6c\x04\x70\x87\xf3\x80\x43\x02\x0a\xec\xe0\x81\x1a\x11\x99\x6d\xd6\x3f\x3c\xdc\x1e\x14\x38\x1f\x6a\x6e\xf7\x1e\xb5\xae\xc4\x0b\x62\xda\x07\xaf\xc3\x41\x78\x3f\x56\x08\xaf\x06\xef\xcc\x39\x28\x2b\xcd\x45\x01\x34\x92\x0e\xb4\xd8\xbe\xa5\x05\xcf\x03\x1d\xa8\x61\x36\x2e\xc5\x88\xbc\x97\xda\xfc\xef\xe2\x13\x57\x86\xc7\x7c\x23\x99\x7a\x2f\x35\xfc\x39\x21\x7f\xd3\x78\xf5\xbe\x8a\xc4\xcb\x6d\xdb\xfa\x0c\x70\x7d\x87\x3e\x81\x33\x81\x48\xd4\xec\x70\xa8\x89\x53\x13\x23\x99\x03\x8b\x6e\x77\xce\x60\xad\x4b\x61\x84\x02\xdc\xb9\xe4\xa1\x40\x19\x8b\x72\x36\x0e\x59\x36\x0a\x54\x69\x42\x8a\x31\xb0\x51\x1b\xc7\xc4\x03\x32\xe3\x86\x47\xb4\xc3\xe1\xef\x1f\xfa\x6f\xda\x0c\xfb\x95\x1e\x05\x1f\x27\x8f\x1b\x0c\x36\xa7\x0b\x60\xed\xb9\x98\x15\x9e\x89\x1f\x91\xbb\x39\xcf\xe6\x28\x3d\x82\x26\x4c\xb3\xba\xaa\x99\xe1\x18\x28\xe8\xcc\xcc\x93\x19\xab\xd3\x41\xff\xa3\x11\x0d\x70\x7c\xd4\x77\x17\x34\x63\x39\xc9\x41\x64\x41\xd5\x2b\xd5\x6c\xc6\x33\x52\xb2\x7a\xc6\x48\x65\x48\xff\x76\x00\x9f\x46\x89\xb1\x25\xd3\xe3\x70\xc0\x2d\x6e\x18\x21\x9f\xc6\xb7\xcd\x0d\xab\x05\xd3\x4c\x8d\x0d\x7f\x32\xb6\xb3\xd7\xb2\xe4\x59\x74\x67\x3b\xe9\x06\xf8\xac\xb7\x46\x6e\x3b\x10\x8b\x05\x32\xe2\xc0\x62\x0d\x2c\xd6\xc0\x62\x0d\x2c\xd6\xc0\x62\x45\xb7\x81\xc5\x7a\xf4\xf0\x03\x8b\x35\xb0\x58\x07\x67\xb1\x3a\x5d\x94\xb4\x4a\xed\x01\xf5\x72\x5b\x28\x02\xff\x8e\x0a\xdd\x55\xcd\x1f\x30\x7c\xce\xaf\xa1\xab\x02\x34\x7c\xcc\xb5\x25\x4e\x1f\x41\x6d\x68\x2d\x91\x35\x15\x33\x46\x5e\x8d\x5f\xbd\x7c\x99\xa2\x20\xb4\xe0\x1c\xf5\xc5\x54\xd6\x25\xd5\xf0\xcd\xef\x7e\xdb\xf3\xc5\x23\x4e\xe5\x3e\x7b\xc9\x61\x0c\x75\x16\xf3\x78\xdb\x4c\x87\x45\xbe\xc7\x96\x06\x64\x4c\x48\x4d\x4a\xa6\x09\xed\xe7\xc9\x42\xb5\x3b\x2f\xd9\xc8\x99\x43\x11\xed\x58\xb7\x11\x67\x14\xcc\x89\x14\xd6\xf4\x62\x0e\xbf\xff\x70\xb7\x5a\x41\xc6\xa8\x62\x86\xc4\xdf\x30\xb3\x8a\x7e\x53\xa0\x26\x4a\x96\x66\xd6\x5c\x68\x87\xc4\xcc\x12\x98\x3b\x18\x72\xc2\x26\xb3\x09\xc9\x1b\xe8\x96\x0a\xeb\x07\x73\x8a\xab\x55\x4b\xa5\x59\xd9\x6f\x0b\x34\xc4\xb0\x86\xff\x99\x6d\xd1\xf5\x12\x2c\xe4\x0b\x26\x74\x43\x8b\x62\x49\xd8\x82\x67\xda\xef\x1f\xb8\xed\x70\xad\xa2\x76\x2a\x81\x8d\x8e\x67\x9d\xc7\x6b\x37\xb4\x8f\x48\xa5\x70\xbe\x6b\x7d\xc7\xe0\x9c\xce\x0d\xf8\x60\x57\x32\xb9\x57\x26\xd4\xa6\x5f\x34\xdb\xc2\x3f\x01\xb8\xbf\xfe\xd0\x6f\x65\x23\xc9\xf4\x27\x81\xe6\x6c\xc7\x5a\x59\x83\x97\xac\xad\xf1\x6d\x7d\xa5\x1b\x4c\x5e\xb8\xf6\xce\xad\x91\xd3\xc8\x01\xf5\x9c\xa1\x91\xf2\xec\xfd\x9b\xb8\x1d\x23\xd6\x39\xe0\xa3\xac\x64\x21\x67\xcb\xf0\x78\x61\x3b\xc1\xfc\x67\xe7\x81\xbe\x3a\xc8\x82\x1b\x98\x7f\xbf\x02\x0f\x83\x69\x68\x30\x0d\x0d\x7a\x0b\x68\x83\xde\x62\xd0\x5b\x0c\x7a\x8b\xb8\x36\xe8\x2d\x1e\x3d\xfc\xa0\xb7\x18\xf4\x16\x83\x69\x68\xbd\x0d\x2c\x56\x7f\x1b\x58\xac\x07\xdb\xc0\x62\xf9\x36\xb0\x58\x03\x8b\x35\xb0\x58\x03\x8b\x35\xb0\x58\x87\xea\xe6\xb1\xa6\xa1\x47\x4d\x61\xbb\xc1\x2b\x99\x3f\x22\x78\xab\x92\xf9\x03\xb1\x5b\xa8\xd3\xcf\xe4\xb8\x90\x19\xd5\x36\xcc\xd6\x7c\x62\xad\x50\x8a\x96\x68\xa6\x18\x91\x7f\x4a\xc1\x30\x9a\xc5\x5c\x0f\x30\x16\x48\x3d\x67\xb5\x79\xfd\x44\x9d\x3e\x18\x42\x30\xc4\x7e\x0d\xb1\x5f\x43\xec\xd7\xbd\xed\xd9\xc4\x7e\xcd\xa9\x42\xb8\x45\xd2\x78\x7f\x28\x58\x80\x93\x3e\xb2\xba\xfc\x99\x46\x82\x19\x70\xb7\xe0\x08\x49\x22\x5a\x90\xc2\x9d\xc9\xad\xc1\x9f\xe5\x57\xdd\xfd\xb0\x62\x35\x2c\x8a\xe6\x39\xcb\x49\xc5\xea\x31\x82\xa8\x24\x53\x2e\xf2\x0d\x6b\x75\xfb\xd3\x8f\x1e\xf6\x18\x8a\xd5\x5d\x47\xd4\x37\xfb\x89\xc7\xea\x4e\x64\x0b\xa3\x62\x68\x19\xed\x10\xc1\x67\x11\x9d\x95\x2a\xa1\x8f\x89\xb6\x06\xc5\x2f\x23\x65\xf4\x74\x31\x1b\x84\x63\x67\x7e\xdc\x52\xfd\x94\x24\x0a\x9d\x59\x79\xfc\xc7\x86\xd5\x4b\x88\xcf\x6f\xc5\x4e\x9f\x8b\xc4\x7a\xc4\x70\x45\x32\xaa\x90\xac\xa6\xb0\xca\x97\x53\x8c\x9a\x14\x4d\x51\x8c\xb0\x9f\xd5\xcb\xea\xd0\x1c\xc0\x81\x90\xe6\xf7\x64\x8d\x58\xa2\x8a\x66\x3b\x1d\xc8\xf6\x56\x58\xb2\x7a\x4e\xab\x5d\xa1\x6e\xcc\xa9\x0e\xf1\x58\x36\xea\x0e\x37\x58\xd3\x93\xed\xe3\xd8\xb6\x15\x60\xb6\x12\x5f\x1e\x2d\xaf\x3f\xb0\x27\x8f\xd0\x2b\xc2\xcb\xc9\x93\xd9\x8d\x6e\x91\x6c\xaf\x5f\x24\x5b\xeb\x18\xc9\x56\x7a\x46\xb2\xad\xae\x91\x3c\x42\xdf\x48\xb6\xd3\x39\x92\x55\x68\x33\x27\x64\x19\xdf\xfd\xa8\x1f\xc9\xe3\x84\xf3\xed\xd5\x90\x64\x07\x17\x2b\x1c\x3f\xc8\xec\xb4\x3f\xbd\x24\x89\xd5\x4d\xc2\xb5\xea\xa8\x27\x0f\x7d\x2e\xdb\xa9\x26\xc9\x8e\x4e\xc5\x65\xc6\x01\x5d\xd8\xa1\x94\x95\xe4\xe9\x15\x96\x0f\x4e\xc1\x0e\x1f\xad\xe1\xdb\x6a\xf4\x47\x68\x05\xc9\xa3\x34\x83\x64\x7b\xed\x20\x79\x2c\xb0\xef\x4c\x4b\xb8\xd3\xae\x80\x4f\xfa\x0a\xfc\xd0\x1e\xc1\x6d\x25\xdf\xc0\x60\x58\xe4\x2e\x4a\x5a\x99\xdb\xf7\xdf\x86\x89\x00\xc0\xfc\x1f\x52\x51\x5e\x2b\x23\xdd\x58\xbd\x76\xf8\x9b\x55\xdf\x05\xdd\x24\x4f\xa0\x32\x03\x1b\x1a\xbf\xa0\x85\x61\x72\xd0\xe9\xd7\xea\x20\xcc\x5c\x56\x59\xc8\x11\xb9\x83\x84\x59\x86\xbc\xa1\x66\x82\x2b\x72\x74\xcb\x96\x47\xa3\x28\xf5\x40\xb7\x85\x37\xfb\xe8\x52\x1c\x21\xeb\xb4\x76\x2f\x3d\x9f\x25\x45\xb1\x24\x47\xf0\xdb\xd1\xae\x79\xd4\x2d\xf8\xa3\x30\x35\xeb\xb6\xec\xc7\x56\xd7\xe9\xb1\x0a\x6e\xd2\x81\xbe\x2f\xd9\x72\x5b\x47\x84\x24\x98\x7f\xd7\x19\xd1\x31\xd4\x00\x66\x46\x76\xf7\x7c\x13\x66\x66\x05\x96\xc9\xea\xa8\x50\x5d\xc5\x8b\x22\x61\xb4\x1b\x46\x34\xbd\x65\x60\xe1\x91\x90\x5a\x8e\xe7\x0c\x93\xe9\x21\xe8\xc0\x48\x06\x64\x1a\x05\xe9\x71\x49\x21\xe5\x6d\x53\x39\xd0\x73\xd9\x24\x13\x86\xe4\x22\x93\xa5\xf3\xa9\x47\xbf\xd6\x91\x4d\x30\x77\xcb\x96\x63\xcc\x81\x89\xcf\x61\x60\x20\x01\x56\x35\xf1\x43\x47\x30\xff\x81\x50\x45\x7e\x00\xa6\x52\x90\x13\xf8\xf0\xf4\x87\x14\x97\x02\xbf\x81\xa8\x7d\x95\x0d\x60\x16\x66\x88\xa5\x9d\xa0\x5a\xdd\xdb\x87\x76\x2c\x61\x68\x97\x29\x2e\xdc\x8c\x63\xb4\x37\x9c\x50\xa1\xf9\xa9\x57\xd2\x4c\x08\xc0\x01\x70\xc9\xb9\x14\xc7\x1a\xe7\xe7\xf0\x9a\xeb\x20\xc5\xeb\xc0\xef\x7b\x6b\xf1\x43\x6b\x01\x1e\x79\xce\xa6\xb4\x29\xb4\xcd\x46\x6a\x50\x1f\x50\xfa\x84\x11\x3e\x3a\x7b\x89\x65\xf8\xa7\xb2\xbe\xe1\x79\xce\x04\x84\x38\xb8\xe9\xdf\x48\x17\x10\xd4\x82\xbb\xc1\x6c\x9d\x33\x4e\x19\xf6\xac\x50\x72\xb4\xda\x63\xe6\xb3\x95\x9a\x5b\x74\x37\x67\xa2\x3b\x00\xe1\xca\x6c\xaa\x62\x09\x4c\xed\x41\x5c\x7f\x1e\x8f\xf3\xb6\x76\xbd\xe2\xea\x09\xf0\xde\xea\xa0\x03\xea\x8b\x42\x7d\x42\xea\x01\xfb\x7d\xb6\xd8\x6f\x0d\xe8\x77\x81\x00\xd7\x3a\x1d\x70\x60\x32\x0e\x14\x2e\x0d\xf2\x13\x5b\x01\x50\x31\x86\x5e\xac\x6e\x4a\xaa\xd5\x99\x41\xa0\xd7\x76\xfa\x32\x17\x06\x07\x78\x16\x7a\xc8\x9d\x31\xb4\x11\x36\x19\x3c\x98\x43\xdb\x61\x11\x5f\xac\xda\xdc\x13\xc6\x74\x82\x8b\x14\x4c\x81\x8a\x9d\x79\xff\x8a\x60\x18\xe8\x35\x65\x29\x10\x0a\xd7\xaa\x0f\x45\xbe\x1a\x1c\xd7\xf6\x0d\x7a\xfd\x92\x51\xa1\xc8\x91\x73\xf1\x38\x56\xed\x1b\x47\x49\xf7\xcd\xa5\xbe\xf4\x63\x43\xa6\xe3\x30\xdd\x65\x3b\xf4\x60\x47\x19\xec\x28\x61\x1b\xec\x28\xeb\x93\x18\xec\x28\xf7\xb5\xc1\x8e\xb2\xd5\xf8\x83\x1d\xa5\xdb\x06\x3b\xca\x60\x47\x19\xec\x28\x83\x1d\x65\xb0\xa3\x0c\x76\x94\xd8\x8f\x76\x61\x47\x69\xc5\xa0\x43\xc8\xd1\xa1\xc8\x6a\xfd\xc4\xb1\xca\x16\xd5\x3c\x6b\xa3\x42\xdd\x5b\xf8\xaf\xa7\x12\xaa\x43\x31\xf8\xb1\x22\x75\x28\xa0\xaf\x69\x30\x92\x25\xea\x7b\xe5\x67\x2f\x61\xaf\x8d\xb1\x23\xd1\xfa\x67\xae\x5c\x0a\x1c\x58\x0f\x71\x1d\x3e\xba\x50\x16\x5b\xb8\xef\x86\xb5\x71\x2e\x39\x39\x71\xba\xd6\x53\x73\xe0\x42\xea\xee\x8f\x42\xf3\x71\xfb\x86\x77\x10\x06\x95\xb0\xcb\xe6\x96\xb2\xe9\x4e\x66\x69\x75\x8f\x62\xa5\xec\x65\x0b\x6d\x06\xff\xb3\xba\x33\x5b\xae\x6c\x25\x35\x08\x4d\xab\x1b\x21\x0c\x7b\x24\x85\x8d\xe2\x48\x98\x09\x92\x16\x54\xf3\xda\x5b\x89\xc2\x14\xac\x11\x24\xaa\xf6\x98\x82\x00\x00\xaa\xb1\x4c\xa2\xcd\xb9\x24\x85\x55\x92\x9b\x27\xd8\x4f\xc2\x24\xfc\x85\x85\xfd\xe4\x7e\x45\x29\x77\xf5\x02\xee\x68\x38\x59\xae\xe0\x1c\x69\x51\xc8\xbb\x14\xfa\x94\x78\x23\xb6\x4e\x0e\x18\x0d\xbd\x77\xc9\x59\x04\x57\xbc\xe5\x63\x79\xf5\x21\xd5\xe0\x83\x6d\x48\x35\xf8\x3c\x52\x0d\x06\x76\xd0\x30\xe7\x60\xff\x5e\x41\x4e\xc2\xbd\xe6\x1c\x24\xe4\xef\x73\x06\xb7\xa8\x66\x68\xbc\x6c\x0a\xcd\xab\x36\xca\x58\xe1\x09\x15\x28\x52\x4f\x6d\x34\x60\xf7\xf6\x9a\xd9\xd0\x6c\xde\x3b\xd4\xca\x2d\x87\xf1\x20\x6a\x59\x01\x36\xc5\x88\x39\xd0\xbf\x63\xa2\x3f\x27\x6b\x63\xd8\x21\x7f\xea\x68\xaa\x28\xfc\xf7\xc6\x15\x0c\x0d\x6c\xe0\x8a\x9c\x18\xea\x58\x2c\xad\xd5\xb8\x83\x08\x3b\x64\x35\x62\x00\xd4\x83\x2d\x98\x63\x50\x67\x7c\xc1\x44\x4b\x7d\x4f\xd4\xe9\xa9\xe3\x89\x57\xf9\x87\x88\xde\x1f\xc3\x61\xc4\x60\xed\x54\xce\x60\x85\xde\x47\x8c\xb0\x81\x23\xf8\x73\x40\x65\xff\xd2\xcf\x13\x44\x0c\x82\x57\xda\x85\x67\x06\x07\xdd\xf2\x02\xbd\xbd\xec\x31\x0a\x2e\x25\xd4\x2a\x4d\x2b\xbe\x45\x88\xd5\xb6\x99\x32\xf7\x1b\x5a\xb5\xd7\xb0\xaa\xcf\x27\xa1\xe5\x13\x9b\xff\x3e\x83\x6c\x4c\xcf\xc4\xdc\x37\xa4\x63\xba\xaf\x3d\x55\x3a\xa6\xbd\x9b\xf3\x3e\xbb\xac\x4c\x07\x35\xdf\x1d\xc6\x74\xf7\x99\x65\x65\x7a\x12\x53\xdd\x33\xcf\xcf\xb4\x3f\x13\xdd\x90\xfc\xe8\x69\xf2\x4b\xa6\x9a\xe1\xb6\xbf\x55\x4f\x6a\x7e\x7b\x52\xd3\xdb\xd3\x9b\xdd\xb6\xe2\x55\x1e\x6b\x6e\x4b\xbe\x26\x8f\x35\xb3\x6d\xe3\xb2\xbf\x1d\x3c\x1f\x2e\x44\xe9\xc0\x3e\xfa\xcf\x23\x34\xe9\x89\x1c\xf3\x9f\xca\x29\x7f\xbf\x0e\xf9\x4f\x10\x8a\x74\x90\x30\xa4\x54\xb2\x9f\x44\xec\x1f\x87\xbb\xb6\xa1\xc8\x5b\x86\x1c\x6d\x89\xbf\x0e\x19\x6a\xf4\x33\x40\x61\x5b\x85\x18\x0d\x58\xec\x89\xb0\xd8\xee\x42\x8a\x0e\x15\x4e\xf4\x33\xc3\x65\x5b\x86\x0e\xed\x4c\xbb\xbd\x9f\x90\xa1\x43\x87\x0b\xed\x21\x54\xe8\x29\xc2\x84\xf6\x10\x22\x34\xd8\x04\x22\xdb\x60\x13\x88\x6d\x83\x4d\xe0\xbe\x36\xd8\x04\x56\xdb\x60\x13\x18\x6c\x02\x83\x4d\x60\xb0\x09\xac\x0f\x38\xd8\x04\x06\x9b\x40\x5c\x1b\x6c\x02\x87\xb1\x09\xa4\x86\xdd\x6c\x07\xcb\x4f\x13\x6e\x73\xd8\x50\x9b\xdd\x87\xd9\x3c\x61\x88\xcd\xcf\x4c\xe1\x92\x1c\x4e\xb3\x1d\x98\x3f\x97\x30\x9a\xe7\x11\x42\xf3\xe4\xe1\x33\x8f\x0d\x9d\xd9\x4d\xd8\x4c\x02\xb4\x6f\x09\xe7\x95\xcc\xcf\x84\xe6\x8f\x2d\x7c\x14\x02\xe0\x7d\xd5\x8f\xe8\x42\xf2\x9c\x54\x8d\xb6\x05\x57\x86\x0a\x48\xbd\x30\x70\x98\x0a\x48\x9d\xc3\x1b\xca\x20\x3d\xd4\x9e\x4d\x19\xa4\xfb\xce\xec\x80\xb5\x90\x54\x73\xa3\x6b\x9a\xe9\xa4\x82\x48\xce\xe0\x38\x94\x44\x5a\x6b\x43\x49\xa4\xa1\x24\xd2\x50\x12\x69\x28\x89\x34\xa4\xf2\x1b\x52\xf9\x85\xed\xd9\xd8\xf1\xc8\x90\xca\x2f\xf1\xd3\x21\x95\x5f\x5f\x1b\x52\xf9\x0d\xa9\xfc\xee\x1b\x7d\x48\xe5\x37\xa4\xf2\x4b\x1b\x78\x48\xe5\x47\x86\x54\x7e\x43\x2a\xbf\xcf\x38\x95\xdf\x50\x12\xe9\xb3\xa8\x0b\x32\x14\x05\x49\x18\xfb\x79\x15\x05\x19\x4a\x22\x3d\x38\xc8\x50\x12\x69\x40\x7d\x43\x49\xa4\x9f\x2d\xf6\x1b\x4a\x22\x45\x0c\x32\x94\x44\x1a\x4a\x22\x3d\xd8\x86\x92\x48\x83\x1d\x85\x0c\x76\x94\xc1\x8e\x92\xfa\xd5\x60\x47\xb9\xbf\x0d\x76\x94\x94\x36\xd8\x51\xa2\x47\x1f\xec\x28\x83\x1d\x25\x6d\xe0\xc1\x8e\x42\x06\x3b\xca\x60\x47\xf9\x8c\xed\x28\x43\x49\xa4\xa1\x24\xd2\x50\x12\xc9\x8f\x3c\x94\x44\x1a\x4a\x22\x41\x1b\x4a\x22\x45\x8c\x30\x94\x44\xfa\x5c\x4b\x22\x75\xc2\x82\x3e\xdf\xba\x48\xe9\xcb\x18\x8a\x23\x0d\xc5\x91\xee\x69\x43\x71\xa4\xa1\x38\xd2\xa6\x36\x14\x47\x1a\x8a\x23\x3d\xd0\x86\x44\x88\x91\x6d\x48\x84\x18\xdb\x86\x44\x88\xf7\xb5\x21\x11\xe2\x6a\x1b\x12\x21\x0e\x89\x10\x87\x44\x88\x43\x22\xc4\xf5\x01\x87\x44\x88\x43\x22\xc4\xb8\xf6\xf4\x06\xb8\xff\x1d\x89\x10\x87\xe2\x48\xcf\xb2\xb2\xc8\x50\x56\xa4\xa7\x3d\x9f\xb2\x22\x43\x71\xa4\x4e\xe7\x43\x71\xa4\x01\x85\x0d\xc5\x91\x3e\x3b\x2c\x36\x14\x47\xda\xd0\xf9\x50\x1c\x69\x28\x8e\x34\x14\x47\x1a\x6c\x02\xbd\x6d\xb0\x09\x0c\x36\x81\xb0\x0d\x36\x81\xd5\x36\xd8\x04\x06\x9b\xc0\x60\x13\x18\x6c\x02\xeb\x03\x0e\x36\x81\xc1\x26\x10\xd7\x06\x9b\xc0\x50\x1c\x69\x28\x8e\x34\x14\x47\x82\x36\x14\x47\x1a\x8a\x23\x0d\xc5\x91\x36\x7e\x0c\x8a\x56\x94\x6c\xee\x83\xec\x58\x58\x3e\x6b\xbb\xb2\x1c\x7c\x23\x94\xae\x9b\x4c\x37\x35\xcb\xe1\xc0\xf0\x30\x0d\x63\xa0\xb4\xac\x9d\x55\x00\x2a\xcd\xbc\x61\x55\x21\x97\x86\xda\x8e\xc8\x95\xcc\x47\xe4\xec\xea\xf2\x9a\xd5\x0b\x9e\x31\x07\x7d\x5f\x5b\x9a\x7e\xff\xbe\x7d\x5c\x56\x3c\xa3\x45\x01\x1a\x8b\x76\x36\x25\x5d\x3a\x5d\xf2\xcd\x92\xb0\x4f\x9a\xd5\x82\x16\x44\x4b\x59\xa0\xf9\xc5\x4c\x06\x10\x62\xcd\x74\xcd\xd9\x82\x11\x5a\xdf\x70\x5d\xd3\x7a\x49\x4a\xa6\x69\x4e\x35\xbd\x7f\xd4\x6f\x14\x0b\x63\x34\xb4\x24\x55\xcd\xc6\x78\x03\x3a\xf3\x00\xd8\xfc\xfa\xab\x77\xee\x7e\xd3\x3c\x77\x01\x09\x0e\xc2\xaf\x9b\x1b\xbf\xdb\xc7\xf7\x73\x5b\xb9\xdf\x2d\x35\x02\xf0\xb4\x2a\x9a\x8a\x2b\xdc\xb3\x7b\x25\xd2\x08\xb6\x24\x8d\x09\xe9\x85\x4f\x26\x16\x8f\x05\xad\x0b\xb1\xe8\x6a\xf6\x98\x58\xf0\x5a\x0a\xe0\x23\x17\xb4\xe6\xf4\xa6\x60\xd6\x92\xe6\xed\x2b\x96\xb7\x63\x0f\xc0\xcb\xb9\xb7\x33\x60\xb0\xcb\xbd\x57\xb2\x9f\x9e\xf5\x50\xb0\xce\x4a\x2f\xc4\xe2\x5b\xda\x55\x33\x88\x8d\x4b\x22\xf6\x05\xb3\x24\x4a\xce\xfb\x17\x14\xc5\x74\xc6\xa8\xc3\xc6\x80\xe1\xef\x7d\x21\x4e\x69\x65\xba\x78\x98\x5e\xa6\xd1\xc9\xf7\xb4\x6c\x2b\x68\x6d\xd8\xae\x3e\x84\xfa\x0e\x39\x7e\x65\x81\xc8\x10\x84\xaa\xe6\x42\xc3\x56\x9f\x5d\x9f\x5f\x5e\x92\x6c\x4e\x6b\x9a\x69\x56\x2b\xc2\x3e\x65\xac\xd2\xe4\xf8\xff\x77\xfc\x70\xbf\x91\x08\x1a\x70\xdf\x2e\x77\xe3\x5b\x07\x24\x50\xde\x88\x09\xc3\xd9\xfd\xea\xe4\xdb\xb3\x0f\xff\xf5\xfe\xec\xdd\xc5\x29\xc8\x2c\xec\x53\x45\x45\xce\xfa\x78\xd0\x46\xb9\x10\x9f\xaa\x66\x0b\x2e\x1b\x55\x2c\x3d\x09\xdf\x7c\xd7\x56\x2f\x99\xc1\x3f\x3d\xa3\x98\xfd\xb6\xe8\x69\x73\xa7\xa0\x67\xa1\x2d\xf4\xb7\x66\xc0\x9a\x29\x59\x2c\x58\xde\xa7\x5e\x81\x60\x4b\xb7\x1d\xad\xa1\xb5\x6a\xb4\xd3\x22\x39\xdb\x69\x23\xb2\x39\x15\x33\x96\x4f\xc8\x1b\xd9\x98\xd1\x7e\xf5\x2b\xd8\xb2\x9a\xe5\x4d\xd6\xbb\x63\xa8\x02\x44\x89\xf9\x57\x23\xc7\x61\x18\xba\xae\xb0\x7a\x9a\xca\x68\xe5\x36\x35\x3c\x15\xb5\x14\x9a\x7e\x7a\x1d\x53\x87\xed\xe8\x57\xc1\x87\x47\xae\x2e\x9e\x34\xd3\x43\x6e\x0c\x57\x54\x40\x49\xb3\x82\x1c\x85\x6f\xf7\xf5\x7d\x61\xe6\xc7\xf2\x10\x76\x30\xb4\x91\x2d\x58\x0d\xda\x27\x0b\x39\x23\x52\xb3\x19\xad\xf3\x82\x29\x08\xaa\xbb\x9b\x33\x28\x52\x88\xa2\x34\x1e\x54\xcf\x58\xcc\x6b\xca\x84\xec\xd5\x60\xbe\x41\x33\x36\x20\xf3\xa3\x9e\x65\xa4\xdc\xbc\xb7\xb5\xec\xa9\x71\xd5\xb9\x7d\xd7\x10\xb5\xe3\x8d\xfd\x9b\xc0\xf5\xd8\x5a\x49\x26\x21\x19\x51\x86\xfd\x9d\xb6\x46\x78\xf3\x3c\xc2\x10\x1f\xad\x2c\x88\xb7\x16\x64\x52\x4c\xf9\xec\x1d\xad\xbe\x64\xcb\x0f\x6c\x9a\x18\x40\x88\x9c\xbf\xd5\x7f\x03\xb2\x34\xe4\x07\x3b\xec\xe7\x5b\xf7\x18\x2f\x16\x63\x93\x49\x33\xa9\x44\x1b\x52\xd6\x2a\xd7\xa1\x0c\x62\xe5\x84\x9d\x73\xf3\x24\x8a\x82\x6e\x9c\x5c\xb4\xc4\x19\x52\x54\x8b\x0a\xa2\x6d\x0c\x1f\x5b\x96\x97\x2b\xc2\xa6\x53\x96\x69\xbe\x60\x85\x0f\x65\xb6\x15\x34\x6d\x68\xf1\x0d\xcd\x6e\xef\x68\x9d\x2b\xa8\xc9\x48\x35\xbf\xe1\x05\xd7\xcb\x98\x7a\x97\xd8\xac\xd4\x64\xa3\x9f\x9d\x62\x5e\x28\x4d\x01\x7d\xb9\xca\x8d\x66\x87\x51\xae\xa0\xce\x32\x8e\xb7\xd1\xc5\x0d\x47\x0f\x07\xc5\x03\x33\x56\x1b\x02\x57\x2c\xc9\x5d\x2d\xe3\x65\xbf\x77\x12\x02\x86\xa7\xf2\x35\x99\x6b\x5d\xa9\xd7\x2f\x5e\xb4\xb2\xd9\x84\xcb\x17\xb9\xcc\xd4\x8b\x4c\x0a\xc3\x63\xa8\x17\x72\x61\xe8\x22\xbb\x7b\x71\x27\xeb\x5b\x2e\x66\x63\xb3\x80\x31\x5e\x20\xf5\x02\x84\xed\x17\xbf\x84\xff\xed\x03\xca\x88\x73\x1e\x7a\x4d\x8e\x8e\x22\xde\x97\x15\x8a\x07\x5b\x40\xe6\x35\x68\x10\x96\x1d\x32\xe2\x11\x8b\x21\x11\x5c\x2b\xb8\x57\xce\x0a\x62\xb9\x90\x84\x65\xdf\x48\x59\x30\xda\xef\xce\xf5\x18\xd5\x27\x80\x7d\x3a\x56\x8d\xba\x97\x2d\xea\xc5\xcb\x65\xaf\x67\x25\xf3\xd7\x44\x35\x55\x25\x6b\xad\x5a\xa9\xd4\x00\xc5\xa8\xfb\x27\xe8\x65\x46\xe4\x07\xff\x10\xdd\xc6\xbe\x3b\xfe\xf3\x97\x17\xff\xfe\x97\xe3\xef\x7f\x08\x7f\x0b\xe4\xd3\xe0\x85\x88\x69\xaa\x8a\x65\x13\x21\x73\xf6\x1e\x66\x00\x7f\x5a\xee\xee\x2c\xcb\x64\x23\xb4\xfd\x41\x53\xdd\xa8\xc9\x5c\x2a\x7d\x79\xe5\xff\xac\x64\xbe\xfa\x57\x84\x11\x75\x8f\x74\x05\xf6\xfa\x8a\xea\x88\xd4\x00\x49\xd4\x85\x56\xfc\x5b\x56\xab\x88\x64\x18\xd8\x3a\xf0\x62\xbf\x0c\x4b\xee\x96\x14\xfe\xf9\xd6\x4d\xd7\xe0\xde\xbb\x9a\x6b\x0d\x3e\x8d\x36\x1b\x81\x9c\x8e\xdc\x95\x46\x46\x6a\xf1\x2a\x49\x71\x1b\x8d\x39\xfc\xae\x6d\xb1\x38\x98\xbd\x5d\x99\xd7\x9c\x58\x8f\xce\x35\x7d\xe3\xd9\xd5\x25\x59\xe0\x6e\xec\x61\x21\x8f\x43\x05\x05\xdb\x8a\xc5\x8a\x42\x06\x6f\x7d\xef\x76\x6b\x02\x96\xcc\x32\xa6\x30\x83\x98\x4d\xb1\xf5\x5a\xd1\xe7\xe3\x42\x2c\x4c\xdf\x8a\x4c\x19\xd5\x4d\xcd\xc8\x8c\x6a\x97\x59\x84\x09\xc3\xdf\x46\xe8\x27\x9f\x98\xcf\x83\x7a\xba\x31\x57\xd6\xbc\xb8\x90\x45\x53\x02\xb2\x7a\x16\xfc\x63\x82\x51\x00\x19\x4d\xc3\x11\xd8\x6b\xe1\x0f\x9d\x9c\x99\x4b\xbf\x00\x57\x12\x7c\x07\x4b\xa7\x2f\xc0\xda\x1a\x26\x59\x51\x9a\xd6\x3a\x41\x77\xed\xfd\xc6\x9d\x16\xc0\x0e\x4f\x09\xe6\x33\xc0\xa2\xe8\x3b\xd7\xa5\xb4\x0d\x33\x09\x91\xb3\xa2\x9a\x83\xa1\x6f\xe6\xf9\xd4\x8d\x90\x3b\xf2\x9e\x65\x8a\xff\x13\x24\xaf\x82\x97\x5c\x23\xbb\xf8\xea\xb7\x7f\x0a\x26\xb3\x17\x44\xf8\x08\x96\x28\x1a\x12\x36\xf1\x4e\x06\x0c\x1e\x60\x9b\xbc\xe7\x8a\x7b\x2f\xde\xa5\x2d\x97\xcc\x8a\xaf\xe0\xd7\x62\x7a\x69\xa1\x6f\x41\x6b\x27\xdd\x56\xcd\x4d\xc1\xd5\x3c\xde\x34\x7e\x39\xf5\xbb\x65\xfa\x50\x0c\x1c\x03\x74\xdd\x30\x6f\x03\x6d\xf1\xbe\x59\xd3\xca\x4c\x12\x8c\x58\x1b\x75\xaa\x9d\x14\x4e\xad\xba\xf8\x0a\x0c\x9d\x5e\x9f\xa5\x26\xbf\x78\xd4\x7a\xa6\xb4\x50\xbb\x5d\x90\x11\x67\xea\x5a\xd6\x5e\x85\x55\x33\xdd\xd4\xa2\xf5\x05\xba\x92\x39\xc9\x6a\x86\x91\x1f\x7b\x60\x98\x49\x28\x28\xc0\xfa\x22\x3e\xa9\xb6\x63\x0e\x92\xd0\xa3\x19\x23\xc4\x8f\x88\xea\x11\xf1\xa1\x66\xae\x1b\x2b\x12\x4b\x30\x4d\x7b\x67\x2f\x94\xcf\x65\x64\x8e\xd4\xe5\xb7\xb2\xd0\x02\x9d\x1e\x4f\x26\xc7\x38\x13\x59\x23\xba\x45\x29\xd4\x3c\xdf\x0b\xca\x69\x09\xda\x96\xea\x0b\x11\x08\xff\x76\xcb\x4a\xc3\xb7\xbb\x65\x39\xf5\x65\x0a\x8f\x71\x40\xc6\xcb\xa5\xd6\x79\x7b\x10\x59\xcc\x8d\xe6\x36\xcc\x23\x8a\xd7\xe8\x3b\xe4\x13\xfd\x20\xe1\x51\xd6\x9c\xf8\x63\xc3\x94\x8e\x11\xda\x4f\xf0\xb3\x49\x56\x35\x23\xdb\xc5\xa4\x64\xa5\xac\x97\xfe\x4f\x56\xcd\x59\xc9\x6a\x5a\x8c\x95\x96\x35\x9d\xb1\x91\x1f\x00\x3f\xf3\x7f\xe1\x87\x9d\x29\xac\x7f\x8d\x16\x82\xac\xa9\x6b\x26\x74\xb1\x74\xb2\xe5\x13\xf3\x7d\x6e\x1f\x77\xcc\xa4\xf9\xe3\xda\xf2\xbe\x1c\x7b\xe3\x1b\xea\xe4\xfc\xaa\x40\x45\x8c\xb7\x47\x8d\x5a\x42\x00\x36\x00\x24\x94\xea\x78\x1f\xb7\x3f\xe7\x0b\xae\xb6\x8a\xfc\xb9\xf6\x1e\x54\xe0\x6e\xd4\xe8\xaa\xd1\x36\x7d\xa4\x97\x2a\x3e\x55\x52\x81\x75\xc0\x67\xaf\xea\x88\x93\xaf\x62\xb4\x44\x80\xfb\x35\xab\xc5\x6b\xf2\x9f\x27\xff\xf1\x9b\x9f\xc6\xa7\x7f\x3d\x39\xf9\xee\xe5\xf8\x5f\xbf\xff\xcd\xc9\x7f\x4c\xe0\x1f\xbf\x3e\xfd\xeb\xe9\x4f\xee\x8f\xdf\x9c\x9e\x9e\x9c\x7c\xf7\xe5\xbb\xbf\x7d\xbc\xba\xf8\x9e\x9f\xfe\xf4\x9d\x68\xca\x5b\xfc\xeb\xa7\x93\xef\xd8\xc5\xf7\x91\x9d\x9c\x9e\xfe\xf5\x57\x51\xd3\xa3\x62\xf9\x75\x04\xd6\xc0\x36\xde\x22\x27\x67\xfb\xd5\xb6\xce\x4a\x5c\xe8\xb1\xac\xc7\xf8\xf9\x6b\x60\x92\x22\x3a\x71\xc7\xb6\x0d\x9c\x7f\x70\xb7\xb5\xc5\x78\x9e\x78\xee\x01\x90\x1f\x43\x00\x14\xcb\x6a\xa6\x77\x65\xde\xc0\xde\x1c\x37\xb8\xe2\xf6\xf6\xdc\x25\xe1\x43\x5a\x3c\x7c\x2a\x41\xd8\xaf\x96\xb3\x32\xec\xd6\xa4\x65\x98\x28\x41\xb9\xd4\xbe\x77\xcb\x22\x63\x51\x07\x0b\xc9\x60\x21\x19\x2c\x24\x5d\x29\xff\x1a\xef\xd0\x33\x37\x8f\x30\xb1\x78\xc8\xca\x9e\xe0\xec\xf5\x16\xf2\x02\x87\x0e\x5f\x8e\xb9\xd6\x92\x54\xb2\x6a\x0a\xaa\xef\xf1\x21\x49\xf0\xfe\xea\xd7\x71\x79\x54\x76\xfe\x5f\x97\x6f\x2e\xde\x7f\xbc\x7c\x7b\x79\xf1\x61\x42\xce\x8a\x22\x54\xbb\xdd\x0f\x71\xad\xa4\x8e\x9c\x35\xa1\xe8\xea\x05\xfa\xb9\x3b\xa7\x50\x69\x7d\x68\xb8\x6a\x15\x75\x98\xed\x18\x09\x94\xf5\xa0\xe0\xc2\xe7\x3c\xbe\x77\x48\xcf\xb0\xf9\x58\x87\xb5\x34\xe7\xe8\x49\xab\xb4\x5b\x26\xcc\x52\xd3\x5b\xf0\xfe\xc9\x58\xce\x44\xf6\x80\xac\xf7\x2d\xc6\x4f\xb8\x3d\xbb\x31\x62\x06\x38\xe8\x21\x46\x21\x79\x53\x15\x3c\x33\xe7\xe3\x35\x92\xd1\x7d\x5f\x96\x65\xa3\x1f\xf2\xe4\xda\xb9\x1f\x9e\x81\x34\xeb\xeb\x11\xb8\xe3\x01\x7d\xf3\xe2\x9e\x8f\xf5\xf3\x86\x4a\x70\x66\xc1\x4b\x79\xff\xe1\x47\xb1\x04\x71\x84\xdb\xfb\x72\xf4\x72\x3a\x6b\x14\xbb\x35\xae\x76\x29\xf5\x83\xbd\xec\xc1\x1d\x25\x8e\x4e\xa7\xd3\xe8\x6d\xe9\xf3\x21\x69\xf3\x01\xe9\xf2\xf6\x34\xf9\xe9\xe8\x71\x12\x2d\x8e\xa7\xc3\xf1\x34\x38\xc1\x43\x21\x95\xee\xc6\xd3\xdc\x6d\x25\xa1\xaa\x66\x53\xfe\x69\x97\x8e\xa5\x5f\x3b\x25\x86\x66\x9f\xb4\x75\x67\xaf\x98\xf0\xc1\x4f\x4e\x6f\x08\x7e\xeb\x9f\x9d\x1f\x2e\xca\x23\xe9\x88\xf4\x7a\x93\xbc\x33\x60\xd1\x01\x8b\x76\xda\x80\x45\x7b\xa5\x98\xe7\x84\x42\x85\xcc\x7b\x93\x28\xc5\xde\xa6\xf7\x41\x5f\x2b\xb9\x55\xd0\x08\xe5\x16\x0e\xa6\x4e\xe7\x59\x5c\x49\x80\xe8\x29\xd7\x6d\x80\xdc\xfd\x80\x76\xbd\xa1\x47\x88\x7c\xb3\x5f\x1e\x2b\x97\x23\x6c\xa5\xff\x95\x72\x35\x18\x8a\xf4\xf0\x58\x89\xa0\x8c\x3c\x6a\x83\xb9\xd4\x5e\x50\xa5\xf8\x4c\x8c\x2b\x99\x8f\xcd\x28\x2f\x1e\xe4\xe7\x0f\x19\x8d\xe4\x55\xda\x8f\x3d\xee\x0f\xde\xe0\x13\x08\x0e\x06\xad\x35\x9a\x05\xd6\x20\x6f\x27\x70\x29\xaa\x22\x04\xd3\x5e\x31\xe8\x91\x87\x53\x52\x41\x67\x6c\x6c\x27\x3b\xf6\x93\x1d\xfb\xb9\x3d\xe2\xbc\x62\x88\x59\x56\x50\xfe\x70\xbc\x6f\x0a\x09\x3b\x87\xde\x6c\xdd\x1f\x1f\x90\xbd\x52\x7d\xc3\xc9\xab\x5c\xa0\xab\xa2\xfb\x09\x3f\x7e\xd8\x06\x0f\x97\xc5\x27\x50\xdc\x70\x90\x0f\x7e\x1d\xd0\xc8\x1c\xf8\x28\x85\x17\xf0\x61\x42\xf4\x66\x29\x68\xc9\x33\x07\x65\x67\x05\x04\xd7\x72\x29\x3a\x6e\x2f\xf1\x43\x73\x45\xb8\x07\x2b\x72\xa9\x49\x46\x05\x5a\x2e\xad\x1b\x84\x41\x18\xa1\xf7\xc3\x03\xdb\x11\x15\xdc\x1d\x11\xd2\xdd\x39\xe4\x0f\xe1\x81\x84\x71\x29\x52\x30\xc2\x84\xae\x21\xd3\xed\x95\xcc\x0d\x69\x99\x74\xde\xee\x71\xe9\x89\xe6\xc3\x62\xf5\xf2\x3d\xc1\x71\xe4\xf9\xb0\x74\x01\x81\x08\x39\xf7\xce\x96\x56\x32\x9f\x6c\xb8\x12\xf1\x25\x8c\xae\x64\x6e\x63\xc0\x75\x07\xde\xcc\x6d\x01\x50\x2b\xe9\xad\x8b\xcc\xf6\x46\x25\xba\xa0\xbc\x88\x08\x1e\x22\x90\x72\x54\xf1\x9c\x11\x1a\x83\x3b\xfd\xc4\xe2\xd9\x21\x6b\x22\xdf\xc7\x21\x7c\xc0\xae\x5d\xa2\x2d\xd8\xff\x6c\x2e\x15\x13\x70\xdf\xa8\x1b\xdb\x17\x0a\x74\x60\x9f\x23\x8e\x8c\x61\x39\x2f\xa7\xc8\xe6\x8e\x08\x5b\xb0\x7a\xa9\xa1\x5c\x97\x4b\xea\x8a\xdd\x98\xf1\x4b\x9a\x07\xbb\x3e\x22\xd2\xf0\x65\x77\x3c\xca\x89\x07\xf0\x04\xce\x4f\x35\x85\xf6\xbc\xb6\x9d\xfd\xce\x4e\x63\x3d\x80\xdd\x70\x71\xb7\xbd\xd9\x7a\x7b\x2f\xe4\x7d\x91\xf1\x25\xad\xee\xfd\x0a\xbd\x2e\x76\x45\xa4\xbe\x42\xaf\x10\xfc\xe4\xc6\x1a\xdf\x4b\xfa\x89\x97\x4d\x49\x28\xfa\xdd\xc8\xe9\x06\x06\x22\x2a\x59\xc0\x2e\xd8\x81\x0d\x6c\x80\xba\x8f\x0f\x20\xf1\x68\x35\x3d\xa5\xcd\x33\x75\x1b\x88\x72\x17\x48\x73\x13\x48\x70\x0f\xd8\xda\x2d\xc0\x39\x00\xed\x0a\x90\x2d\x4a\x5b\x03\x65\x2e\x7a\x41\xd9\xd1\xd7\x87\x61\xf9\x72\xda\x8e\xc1\x15\x91\x25\xd7\xda\xfa\xd9\x04\x14\x60\x44\xb8\xee\x38\xa5\xd8\x0b\xc6\xa7\x48\x68\xb8\x22\xec\x53\x55\xf0\x8c\x83\x6f\x93\xf3\xbf\x7c\x98\xd1\xf3\x38\xd1\xa6\xaa\xe2\x65\x85\xc9\xaa\xe0\xa2\x8c\x1d\x0f\x69\xc3\x3e\xfd\x2c\x6d\x9c\x32\xfb\x94\x31\x96\xdb\x89\x0c\xf7\x75\xb8\xaf\xc9\xf7\x55\xed\x48\x15\x11\xaa\x21\xda\xbc\x39\x5e\x1d\x61\xae\x12\xe4\xb4\x41\xc5\x80\x83\xae\x87\x2e\xe6\x85\xcb\xaa\xfe\x81\x81\x79\xef\x9a\x69\x65\x33\xf4\x40\x4f\x0f\xe9\xd5\xd6\xb2\x34\xfb\x4c\xec\x2e\xdd\x15\x05\xc5\x61\xf0\x46\x9b\xdf\xe4\x01\x29\x59\xaf\xb2\xb7\xa0\xeb\x60\x65\x55\x50\xdd\x6a\x42\x1e\x91\x08\x25\x86\x89\x4f\x49\x64\xfc\xb4\xa9\x8b\xf7\x23\xb6\xf5\xb2\xc1\x4f\x98\x82\x78\xdb\xa4\xc3\x7b\x10\x18\xfb\x9d\xb8\x22\x93\x07\xc7\x0b\x96\x51\x5e\x5e\xfb\x4e\x09\x9c\x20\x86\xc5\xa7\xfd\x4d\x97\xc3\xf6\x9c\xda\x77\x5f\xc9\x7c\x13\x76\x2f\x36\x61\x6f\xfa\xde\x1d\x28\x29\xef\xc1\xd3\xf0\x1e\x32\xf1\x6e\x52\xaa\xdd\x94\xe4\x89\xd1\x89\x13\xb7\xf7\xca\x4d\x49\x98\xb8\xe5\x87\x91\x69\x71\x53\x60\xf7\xc0\xa9\x6f\x0f\x9c\xec\xf6\x29\xd2\xdb\xee\x4d\x7e\x88\x00\xcd\x74\xcb\x9e\x96\x85\xad\xeb\x13\x67\xe9\xf9\xd8\xbe\x0f\xdb\xd1\x3a\x81\x07\x3d\x1d\xc6\x2d\xed\x41\xc8\xfe\xe8\xf8\x5c\x83\x9d\xda\x49\x03\x8c\x6b\x4d\xb3\xb9\x4d\x52\x8b\xbf\x18\x48\x10\x4b\x62\x80\x40\x23\x25\xb7\x79\x32\x1f\x3a\xe7\x39\x23\xba\xe6\x55\xc1\xc8\x9f\xfd\x85\x18\xa1\x6d\xff\x2f\x41\xaa\x30\x97\x54\xb4\x05\xc6\x3f\xbb\x7f\xfd\xe5\x91\x19\xea\xe2\x98\x1c\x9c\xd2\x2e\x79\xd5\x0b\xe8\x91\x70\x91\x83\x07\x23\xb2\x42\xb8\x79\x38\x98\xd9\x5a\x58\xf7\xc4\x66\xf7\xc4\x54\xb9\xd6\x04\x0b\xae\x8e\xed\xcb\xbd\xac\x03\x78\x78\xb6\xaa\x09\xef\xe1\xe0\xef\x30\x23\xef\xe5\xb5\x35\xdb\x8e\xc8\x15\x68\x87\xdb\x27\x70\xe7\xdf\xcb\x8b\x4f\x2c\x6b\x74\x8f\xd3\x4d\x24\xfa\xef\xe5\x19\xd3\xf6\xf3\xcb\x96\xa1\xc4\x8d\xe9\x30\x94\xed\xc5\x0a\x59\xca\x07\x37\xf6\x96\x2d\x7b\x77\xd5\x32\x09\x96\x99\xb5\xaa\x71\x0f\xa3\x8e\xc8\x23\xdf\xf0\x7f\x9c\x29\xaf\xbc\xe1\x02\xa7\x82\x03\xbb\x73\x86\xb1\xdd\x79\x18\x09\xa4\x28\x22\x26\x11\xb9\xdb\x71\x1c\x6f\xaa\xf3\x56\x3c\xa7\xeb\xe9\x45\xdf\x96\x6e\xe2\x6f\x03\xa6\xf6\xe2\xc7\x86\x16\x93\x4e\xea\x36\x7c\xd4\x77\xdd\xac\x5b\xf3\x2a\xdd\xbc\xe3\x45\x9e\xd1\xda\xc6\xd6\x01\xfa\x21\x4a\x5a\x33\x2c\x60\xbf\xac\xd7\x81\xdd\x21\xc0\x16\x78\x14\xfa\xf2\x56\xb4\xd6\x3c\x6b\x0a\x5a\x13\x73\xc7\x67\xb2\x8e\xca\xcd\xd6\x7b\x98\x2d\x34\x5f\xb3\x4c\x8a\x7c\xa7\x42\xf4\xc7\xd5\xce\x57\xbd\x95\x2b\x56\x73\x89\xb9\x82\x78\xc9\x56\xaf\xd7\x49\xc7\x01\xa5\x4f\x0e\x9b\x3a\x64\xe7\x71\xcb\x28\xd4\x8c\x76\x6d\xca\x58\x82\xee\x34\x20\x38\xfe\xb6\x4f\xc8\x17\x4b\xa7\xa2\xed\x63\xc8\xb9\x76\xf9\x04\x14\xd3\x2e\x9f\xa2\xbb\x8a\xf6\x24\x5b\x34\x32\x95\x35\xe4\x29\x3c\xc9\x25\xc6\xd1\x2f\x78\xa6\x4f\x27\xe4\xff\xcf\x6a\x19\x91\x88\x52\xb0\x19\xc6\x72\xdb\x8b\xed\xf5\x51\x35\xa3\xd6\x4b\xff\x25\x39\x81\x4e\x09\x2f\x4b\x96\x73\xaa\x59\xb1\x3c\x45\xf5\x14\x23\x6a\xa9\x34\xeb\xb1\xcd\xc5\xab\x15\x31\xf4\x12\xde\xfd\xc3\xef\x1f\x78\x73\x0f\x09\x44\x6d\x92\xc2\x76\x63\xd1\x53\x6e\x05\x7a\x7c\x6a\xed\x5e\x79\xff\x5e\xf9\x2c\x0c\x47\x68\x93\x9b\x3b\xdc\xec\x61\xeb\x1f\x06\x40\x29\xa9\xd9\x0c\xee\x27\xde\xb9\x47\xde\x4e\x8c\xcd\x7d\x27\x1b\x71\xbf\x0d\xa4\xb3\x6f\x5f\x59\x15\xdc\xb7\xc1\x87\xa9\xa9\x85\x77\xcb\x10\x06\x33\x09\xac\x2e\x14\xa3\xf5\x81\x03\x33\x88\x0d\xdf\x6a\x83\x58\x22\x8c\xe5\x3b\x4c\x17\x0c\x73\xe9\xc9\x9f\xb5\x93\xa4\xc2\x7e\xa0\x5d\x5e\x85\xab\x95\x0c\x12\x41\x5a\x5b\x57\x96\x35\xc8\x92\xd0\x42\x30\x4c\x86\xe5\x36\xec\xb1\x0f\xed\x04\x19\x23\x8e\x5f\xef\xc6\x9b\x19\x77\xa3\x96\x15\x9d\xc1\x65\xdd\xe5\xa6\xac\xf6\x4d\x72\xa6\x59\x5d\x72\xc1\x14\x99\xcb\x3b\xfc\x1d\x99\x81\xca\xbe\xc5\xf2\xd6\xf3\x60\x2e\x7b\x77\x04\x4b\xb0\xb6\x09\x84\x11\x7b\x80\xc3\xe8\x1d\x5d\x12\x5a\xcb\x46\xf4\xa6\x23\x00\x2e\xda\x53\x8e\x77\x2b\x93\x7e\x2f\x05\xf3\xce\x28\x7d\x54\xb6\x43\xda\x6e\x98\xa6\xe6\xc2\xbf\x9a\xbc\x7a\x19\x35\x87\x0f\x2c\x6b\x6a\xc5\x17\xec\x03\xa3\xf9\xd7\x46\xe2\x6e\xd3\xc1\x5c\x4e\xaf\xa4\x52\xfc\x06\xb3\xf0\x18\x06\x09\x73\x6c\xad\x4f\xd8\x73\xa8\x30\x73\x59\x93\x46\x78\x11\xa1\x67\x16\x96\xcc\x87\x56\x51\xd3\xc9\xe9\x4e\x20\x2d\x31\x99\x37\xec\xe5\x8a\x7d\xc6\x79\x99\x3b\x5c\xb5\x93\x79\xd5\x76\xb3\x77\x09\xf9\xef\xf0\x5a\x43\xdf\x63\xd0\x9d\xf0\x29\x58\xed\x46\xf8\xe8\xae\xe6\x9a\x05\x74\xeb\x04\xb3\xfd\x74\x0f\xab\x67\xdb\xbb\xa9\x8e\xa1\x83\x98\xfd\xe8\xf7\x83\xae\x57\xc1\x70\x97\x3b\xb3\x0e\xe3\x6d\x41\x1e\xe7\xeb\xdd\xee\x9a\xc5\x10\x2d\xbe\x9c\x53\x91\x17\xbd\x70\xec\x57\x50\x2c\x7b\xb3\x30\x81\xb7\x40\x7b\xdd\x60\x1f\x47\x21\x93\x3a\xa7\x86\xaf\x04\x5e\x12\xf4\xb6\x22\xf7\x37\x2c\x38\xac\xd4\x71\x10\x18\x10\x65\x85\x48\xc3\x5e\xf7\x37\x5c\xd9\xeb\x0d\x9a\x12\xa0\xdc\x96\xbf\x2d\x69\x6f\x05\x94\x60\xfd\xed\x66\x4e\x2c\x7b\xb5\x61\xb4\x16\xb9\xac\x8c\xb7\xed\x58\x23\x03\xef\xc8\x92\xfb\xac\x30\x8e\xf9\x6d\x11\x76\x6d\xb8\x8f\x92\xb5\x13\xeb\x19\x6a\x75\xda\x1e\x05\xae\xcd\x79\xf3\xac\xfc\xa4\x7a\xc6\xe9\x9f\x72\x57\x9e\x41\x85\x5a\x27\x2d\x98\xa6\x18\xae\x1b\x91\xd3\x7e\x25\x29\xd7\x8c\x09\x90\x56\x40\x0b\xe7\x14\x49\xd6\x77\x8e\x2a\x29\x62\x00\xad\xe7\x90\x0d\x9e\xe9\x27\x1f\xf8\x59\xcf\x60\x40\x63\x4e\x64\xbd\x72\x1b\x9c\x00\xb6\x81\x92\xa4\xce\x1e\x08\x73\xdb\x2f\x02\x55\x20\x68\x99\x0d\x6c\x85\x7f\x39\xf5\x57\x67\x37\xc1\x5e\xcd\xcd\xbe\x59\xc5\x0d\xc9\xc6\x42\x90\x3b\x56\xf7\x73\x8d\x09\xf4\xe1\xe8\x88\x9c\x60\x3f\xc7\x8a\xd4\x52\xea\xdd\x10\x75\xbb\x3f\x17\x9f\xaa\x9d\x2a\xa1\x2e\x6c\xf1\x80\x98\xcc\x6c\x3b\xda\xac\x2f\xd8\x9c\x2e\x98\x22\x8a\x97\xbc\xa0\x75\x01\x99\xd9\xaf\x71\x79\x10\x82\xb6\x31\x17\x60\x44\xe9\x8c\x40\xe3\x1d\xce\x33\xe8\x6e\x9f\xe7\x48\xdc\x1a\xcc\x11\x01\xbd\x71\x6b\x32\x73\x2c\x1b\xdd\xd0\xa2\x58\x12\xf6\x29\x2b\x1a\x83\x2f\x77\x22\x2c\x6f\x23\x27\xaf\x8a\xc8\x95\x75\xd4\x3f\xa0\x80\xdc\x55\x79\x1a\x7e\x35\x77\xe0\x04\x02\x31\x9a\x4d\xc0\x06\x02\x51\x0f\x34\xcb\x98\x52\x2e\x87\xc1\x32\xcc\xc3\xe0\xd7\xf0\xb9\x94\xda\xa1\x77\xea\xa2\xa0\x4a\xf3\xec\x8b\x42\x66\xb7\xd7\x5a\xd6\x3b\xd5\x15\x6d\xea\x7f\xa5\x80\xd1\xd9\xdf\xaf\x0d\xf2\xbe\x0d\x12\x47\x59\x47\xcc\xd0\x30\x45\x7b\x06\xba\x6d\x6e\x58\xc1\xf4\xb1\x02\xf9\x91\x94\x34\x9b\x63\x19\xad\x1c\x33\x90\xba\xd4\x64\x56\x7d\xfd\xe0\x11\x61\x7b\x63\x66\x09\x85\xe9\x5e\x9b\x39\xae\x2f\x03\xfd\xcd\xec\x3b\x98\xdd\x03\x35\x58\x60\x0c\x74\x81\x74\x5c\x8c\x75\xcd\xfa\xd8\xa9\x8d\xfb\x04\x21\xa9\xb6\xb6\x0c\xaf\xd1\xd3\xcd\xce\x9f\xdd\xa8\x49\xa6\xf8\x84\xde\xa9\x49\x26\x4b\x72\x7e\x7d\x49\xf2\x9a\x2f\xfa\x43\x1c\x12\x5d\x48\x6d\xd2\xbf\x17\xf6\x86\xff\x92\xde\x29\x86\x13\xbd\x31\x13\x85\x12\x68\x11\xb8\x63\xa7\x4e\x51\x38\x97\xcb\x37\x0f\xbe\x18\xef\xf0\x34\x55\x1f\xcd\x1c\x7b\xde\xda\xc6\x05\x06\x7b\x76\xaa\xd2\x29\x2f\x18\xaa\x80\xf1\x64\xbb\x29\x34\x01\xe8\x97\xb2\x21\x77\x14\xad\x19\x40\xc0\xa2\x82\xa9\x79\xf5\x9a\x5c\x08\xd5\xd4\xac\x35\x92\xad\x0e\xb6\x89\x25\x87\x9b\x62\x41\x56\xcc\xa2\xd4\xd3\xd8\x2e\x3e\xd1\xb2\x2a\x98\x7a\x4d\x8e\xd8\x27\xfd\xfb\xa3\x11\x39\xfa\x34\x55\xe6\x7f\x42\x4f\xd5\xd1\x84\x5c\x96\xde\x85\x9a\x8b\x29\xab\x6b\x1f\x7f\x8d\x1f\x18\x96\xbc\x23\x45\xf5\x8f\x79\x68\xb8\x25\x69\xce\x2f\x60\x1e\xea\xd7\xa4\x91\xad\xe0\xc8\x77\xee\x40\x29\x78\x20\x76\x03\x44\x97\x53\xe7\x31\x8f\x72\x95\x65\xe1\x61\x40\xdb\x8d\x01\x1b\x3b\x8e\xa1\x3c\x69\x80\xf2\xd6\xa7\xbb\x24\x2f\x72\xb6\x78\xa1\x72\xfa\x6a\x04\x53\x55\x36\xe4\xbb\xbb\x2e\xaa\xc8\x51\x5c\xf1\x81\x6b\xc7\xb9\x8d\xc2\x9d\x68\x7b\x32\x88\xd8\x0d\x09\x7e\x2f\x2f\x8f\x40\x74\x31\x63\x67\x54\x90\x82\xd1\x85\x15\xe7\x10\x65\x2c\xd1\xc0\xd0\xcb\x61\xa5\x18\x6b\x48\xd7\x60\xf3\xbb\xdf\xf6\x8a\xd7\x31\x3a\x18\xb2\x15\x34\xb9\xbe\x9d\xd5\xa6\x6e\x6c\x2e\xa7\xa9\xac\x33\x2f\x73\x5a\x2d\x0d\xd3\x80\x1b\xb8\xe8\xd8\x35\x9e\xf7\x85\x8d\x4b\x55\xe6\xa8\xc8\x5e\x7c\x1f\x6d\xdf\xa0\x41\x16\xfc\xc7\x86\x91\xcb\x37\xbe\x22\x0b\xab\x15\x57\xda\x08\x14\x79\x87\xef\xe1\xc8\x0c\x9d\x9c\x95\xf4\x9f\x52\x90\x8b\x2f\xae\x6d\x47\x11\xa0\xf8\xac\x11\x24\xfd\x67\x53\x33\xc3\xe3\xed\x94\xb5\x74\x9d\xae\xf2\x93\xe6\x39\x79\x43\x35\x45\xb6\xd2\x06\x16\x89\x96\xe4\x19\xa6\xf0\x86\x8b\xdc\xfe\xb4\x25\x4b\xe8\x87\x4f\xe2\x03\x83\x69\x9b\xcd\xeb\x5b\xe3\x46\xe6\xcf\x40\x0d\x72\x7f\xa6\xaf\x24\xfe\x6f\x0f\xdc\x98\x99\x4d\x44\x79\x0c\x7c\xf1\x9b\x0f\x97\x3b\xe2\xda\x32\xe0\xf0\x67\xef\x64\x9e\xca\xba\x1d\x07\x9f\x3a\x82\xfa\x6f\x06\x2e\xce\xf1\x39\x29\x4d\x9f\xa0\xb8\x1a\x81\xf2\x96\x7c\x0d\xba\x4d\xf8\xe7\xdf\x6b\xae\xd9\xa4\x3f\xa3\x6d\x02\xeb\xe0\x36\x30\x71\x19\xee\x33\xb7\x84\x30\x17\x4f\x6e\xa0\x1f\x90\x8b\xe5\x0f\x6e\x0a\x79\x43\xec\x95\xdf\xf5\xdc\xbf\xf9\x70\xb9\xc5\xd4\xbf\xf9\x70\xe9\x66\x6e\xfe\x29\xa7\x87\x9b\xf4\x21\x18\xfe\xb7\x2b\xfc\x77\x0a\x2f\xd6\xa6\xc2\x5d\xe5\xe2\x77\xc9\xc2\x4f\x0e\xc6\xbc\x6f\x97\x62\xc8\x8c\xd5\x27\xf4\x73\x11\x91\x0c\xb9\x7b\xf9\xcd\x37\x84\x7d\xaa\x10\xa3\x06\x2e\x93\xd7\x73\x0a\xf9\xab\x5d\xaa\x4c\x04\x3f\x03\x8f\xca\x90\x6c\x07\x88\x84\x62\x95\x32\x43\x0d\x50\x4b\x9f\xbf\x76\x8e\xe0\xfe\x8b\xcd\x1f\xbc\x83\x00\xcc\xfc\x35\xd2\x00\x82\xf1\x98\x79\x00\xf7\x27\x68\xae\x10\xfe\x27\x1b\x77\x8f\xd9\xae\x14\xd3\xa7\x93\x8e\x6e\x5d\xc1\x94\x77\x8a\x8c\x0e\xc2\x78\xae\x59\x30\xc9\x89\xf9\xed\x05\xd8\x47\x4f\x27\xad\xc5\x0c\xb2\x43\xb4\xbc\x69\xc4\x18\xe6\x52\x7c\x78\x34\xf7\x9a\x96\xf2\x36\xba\xb8\x09\x9c\xbb\xc1\x0c\x3b\xe7\x83\x4c\xa7\x1b\xf9\x20\xf8\xc1\x15\xc4\xdf\x27\x2b\x04\x03\x6d\xc1\x0a\xc1\x77\x5b\xb3\x42\x50\x5f\xe4\xd9\xb0\x42\x98\x23\x30\x8a\x19\x82\xab\xdb\xfb\x66\x3c\x3b\x74\x90\x7b\x9b\xff\x9c\xee\x6d\x7b\x58\x89\x7b\xd6\x7e\xe8\x18\x18\x9f\x20\xc7\x25\xb7\xef\x04\xa4\xe2\x45\xbc\xb6\xd4\xc0\x16\xb9\x44\x76\xcd\x5c\xbf\x2f\x23\xf2\xf4\x27\x20\x70\x0f\x58\xa9\xab\x72\xdf\xb9\x45\x21\x91\x82\xc7\x24\xaa\xfc\x5d\xe4\x24\x33\x56\xcd\xa7\x3b\xf5\x72\x36\x3d\xbe\xbd\xee\x9a\x71\xce\x59\x35\x27\x6f\xaf\x37\xa0\x3c\x38\x1c\x58\x96\x42\xe3\xce\xb1\x22\x05\x9f\x32\xf0\x49\x48\xc0\x7a\xe7\x38\x6a\x07\xe5\x79\x67\x34\x87\xe2\x70\xb1\x5e\x05\x2b\x24\x29\xa4\x98\x19\xe6\x20\xae\x6a\xce\x1e\x90\x54\x29\x05\xd7\xb2\x7e\xd8\x1b\x22\x1e\xf1\xb8\xee\xf6\x81\x78\x5c\xdf\x66\xeb\xda\x02\x23\xef\x82\xa7\x94\x64\xb2\x28\x58\xa6\x6d\xb9\x53\x38\xf6\xa8\x15\x62\xdb\xa0\x34\x61\x56\x67\x39\xb9\xfd\x13\xa8\x4d\xac\x82\xe4\x05\x1e\xe5\x8b\x0f\x17\x67\x6f\xde\x5d\x4c\xca\xfc\x97\x73\x79\x37\xd6\x72\xdc\x28\x36\xe6\xfd\xc5\x3b\x3e\xe3\xe8\x4c\x12\x5d\x8f\xad\xcb\x6a\x57\xb6\xce\xac\x4b\x0c\xfc\x9a\x7c\xa3\xd0\x7b\xc3\x7b\xee\xb0\x1c\xac\xd9\x23\x52\x53\x9b\xef\x93\xe2\x55\x9d\x36\x45\x81\xa7\x69\xee\xd1\x28\xd4\x47\xbf\xf8\xfc\x18\xde\xce\x26\x3c\x7b\xee\xf7\xf0\xd7\x22\x85\x62\xf7\xf3\xcf\x64\xab\xc3\x6a\x7b\xef\x1e\xd7\x75\xe7\xb9\x76\x75\x03\xb5\x84\x50\x31\x08\xea\x36\x8c\xed\x37\x8a\xd5\x5d\x30\x65\x3a\x83\xdd\x79\xd1\x28\x56\x4f\xb0\xfb\x67\xb8\xf7\x71\x5c\x45\x5c\xf6\x6b\xf2\x88\x9d\xff\xc0\xa6\x9b\x36\xde\x3e\xf6\x1e\x37\x8e\xf3\xa7\x8d\x9e\x33\xa1\xb9\xcd\x6e\x69\x39\xaf\x8d\x27\x81\x81\xf9\xcf\x70\xeb\x23\xeb\x3e\xa5\x55\x69\x1a\x2a\x1b\xb5\x6d\xa8\x6c\xf4\x3c\x2a\x1b\x3d\xa6\x5c\x9b\xc1\x9e\xfb\xc0\x3a\xa6\x5f\x48\x14\x17\x72\x27\x3e\xf5\x55\x4d\x73\xa9\xf0\x1d\xb3\x87\x1d\x7c\x42\xf3\x92\xc7\x94\xbd\x7d\x76\x98\x3c\xe3\x22\xef\xdb\xcc\x44\xd1\x0b\x7a\xec\x8a\x5e\xf6\x99\x35\xc4\x7b\x27\x2e\xea\xb4\x4c\x98\x49\xdc\x3a\x6c\x75\xfd\xb5\x92\xe4\x2f\x1c\x26\x4d\xe5\x64\xe7\xb6\xb5\xbe\x09\xbf\x07\x8d\x93\xac\x98\x41\x24\xd9\xed\x44\xd6\xb3\xc7\x39\x60\xad\x42\x45\xb9\x54\x3f\x16\x63\x1c\x6b\x5c\xe5\x2d\x58\x1c\x5a\x56\xfc\x99\x78\x5a\x3d\x3f\xe3\xcb\xb3\xf0\x9f\xda\x0d\xd8\x91\x67\x28\x6f\x3d\x7b\x45\xe5\x41\xce\x23\x45\xaa\x3a\x04\x6b\xdf\x52\xda\x4a\x72\x1b\x1d\xed\x0b\xa8\x22\xde\x0a\x6b\x88\x57\xb4\xa6\x25\x83\x5a\x3e\x8d\x75\xdd\xcd\xa4\x10\x31\x1c\x33\x84\x88\x7e\x5d\x31\x71\x0d\x08\x7a\x60\xc7\x37\xb7\x81\x1d\x7f\xa0\x0d\xec\xf8\xc6\x76\x10\xb7\x39\x77\xdf\x79\x6e\x44\x7c\xeb\x1c\xda\xc6\x64\x58\x2e\xec\x79\x60\xd9\x7e\xae\xdb\x55\x81\x4b\x60\xbc\xfd\x37\x2b\xac\x75\x5b\x95\x11\xad\x18\x10\xed\xe4\x2b\x9b\xc2\xed\xc1\x6d\xda\x0d\xa7\x18\x8f\xea\x2c\xf8\x6d\xe1\x8e\x15\x05\x19\x41\xf7\x5d\x4a\x52\x9a\x27\x37\x5c\xb7\x34\x42\x31\x4d\x2a\x56\x97\xdc\xe6\xc7\x95\x82\x64\x36\x6e\x10\x38\x3a\xc3\xbd\xd9\xee\x92\xf8\x41\x41\x64\xa6\xa9\xcd\xea\x44\x6e\x98\xbe\x63\x4c\x90\x97\x2f\x5f\xbe\x04\xd1\xe6\xe5\x1f\xff\xf8\x47\x02\xb9\xc6\x73\x96\xf1\x72\xfd\x45\x78\xeb\x5f\x5e\xbd\x8a\x19\xf4\xdf\xcf\xde\x7d\x05\x71\x46\x95\x56\xe4\x46\xea\xb9\x1d\xdb\x74\xd1\xe9\x5e\x8d\xc8\xff\xbd\xfe\xfa\xbd\xc3\xd7\x6a\xe5\x57\x90\x7f\xfc\x16\xc5\x8c\x1c\x2a\xa7\x5f\xfe\xe1\xf7\xbf\x8f\xfa\x06\x84\x24\x59\x43\x30\x77\x1b\xb4\x57\xb9\x70\x33\x21\xf5\x7a\xaa\x66\xcb\x3a\x45\x57\x8b\x2b\xf9\x6c\x0e\x07\x61\xee\xbf\x14\xd3\x82\x67\x1a\x89\x04\x26\x7e\x40\x90\xb0\xe5\x42\xa8\xcd\xba\x66\x65\x81\x28\x53\x53\xce\x46\xa4\xe0\xb7\x8c\x4c\xd5\xdf\x6a\xd9\x54\x6d\x6e\x44\x5b\xbd\x22\xa3\xc2\x8c\x8f\xc3\xb5\x70\xa7\x58\x74\x46\xd6\x7d\x78\x8a\x47\xda\x8a\xd2\xaf\x1c\x74\xbc\x22\x68\x8c\xb0\x78\xe3\x2d\x5b\x8e\x11\xba\x2b\xca\x7d\xd8\x1b\xb8\xdc\x22\x37\xd1\xe5\x47\xb2\xa8\x42\xd3\x6d\xb1\x4c\x17\x13\x5d\xd5\xf2\x1f\x08\x34\x5c\xb8\xb4\x63\x56\xa9\xa0\xac\x7c\x66\x73\x61\x8a\xd6\x6e\x1d\x31\x92\xcb\xe9\x6c\x78\x4d\x9b\x4d\xba\x4d\x69\x46\x2e\xa7\x61\xe0\x31\x24\x35\xe6\xca\x4c\x02\x6a\x3e\xdb\xb9\x45\x8c\xb2\x61\xf6\xbe\x5f\xb8\x1b\x0a\x21\xac\x11\x6b\xfd\x63\x38\x79\xd4\x18\x40\x1a\x60\xd2\xd4\xa5\xae\x6b\x47\xc1\x50\x59\x1b\x4d\x6d\xdf\x75\xa7\xe5\xb7\x3b\x3a\xe7\xad\x8d\xb0\x65\xba\xb1\x47\x84\x11\xec\x8d\x28\x98\x52\x36\x42\xbb\xa4\xf5\x2d\xcb\x3d\x7e\x9e\x40\xd8\xb3\x8a\xcc\x20\x46\x5c\xee\x6d\xbe\x40\xd7\x88\x92\x2e\x3b\xd9\x6f\xcc\x34\x8e\x27\x93\x63\x44\x2d\xb2\xc6\x80\x7b\xc4\x02\xe6\xf9\x13\xe5\xc8\xed\xdc\x2d\x28\xf3\x4c\x5d\x9e\x63\x48\x5c\x28\x21\x7d\x5c\x1b\xd1\x4c\xed\x5e\xc6\xe0\xbe\x24\xc9\x24\x5e\xb5\x83\x2d\x26\xbf\xb8\x7b\xb3\x7a\x38\x47\x93\x6b\x69\xc2\x51\x64\xb6\x71\x6c\xf7\xe5\x1c\xb7\x7b\x6c\xef\x5b\x2c\x7b\x9f\xcc\x60\x97\x51\xac\xcd\x86\xa9\x46\x8b\x72\x38\x46\xd7\x08\x16\xc5\xdf\xd8\xd4\x09\xfd\x15\x74\xdb\xf6\x24\x6c\x0d\xb6\xa7\x63\x6e\xb0\x5d\x4e\x57\xb3\x4b\x04\xe8\x2d\x64\x34\x1d\x1d\x8a\xc9\x01\xd5\xb6\x43\x70\x2b\xd8\xf6\xcc\xb3\x60\x4b\xe3\x5c\xb0\xa5\xf0\x2f\xd8\xe2\xdc\x4b\xb0\x6d\x7b\xb9\x9c\x3b\x0a\x6e\x8f\x25\x33\x48\x49\xa6\x7e\xf3\x31\x83\x6b\x15\x20\x96\x84\x3b\x65\xc9\x15\x5e\x2b\x7a\xa3\x64\xd1\x68\x1c\x22\xbd\x93\x90\xe6\xc1\x24\x5d\x4a\xf0\x38\x42\xb7\xda\x5d\x40\x29\x81\x13\x41\xf2\x94\xd2\xd7\xe1\x7c\x8d\x86\x6a\xd5\x43\xb5\xea\x7b\xda\xf3\xaa\x56\xed\x3e\xf3\x31\xcc\x9b\x8b\xff\xcb\x9a\x18\xa4\x0b\xfc\xfd\x73\xaa\x62\x8d\x2d\x53\x3c\x45\x31\xa5\x38\x39\x39\xf7\x19\x4f\x9c\x57\xf3\xa5\xd0\xac\x9e\xd2\x8c\x9d\x86\x0a\x2b\x56\xcd\x59\xc9\x6a\xb3\x41\xf6\x3d\x97\xda\xc3\x26\x74\x23\x37\x4b\x07\x7f\x84\x7d\xd2\xac\x36\x9b\xd9\x9a\x52\x0f\x5f\x6f\x07\xc7\xdd\x95\x4e\x0c\x3a\xdb\x8b\x3a\x0c\x7a\xee\x94\x07\xb5\x78\xad\xdd\x3c\xdc\x6b\xdc\x68\x15\xaa\x06\x63\x6e\xf8\xb9\x14\xc0\x3f\x00\x8a\x59\xca\xa6\x46\xa7\x07\x6f\x4f\xcf\x64\x5d\x1b\x9e\x05\x86\xa6\x8a\xd4\x6c\x66\x84\xd8\x1a\x2b\x25\xc3\x1b\x45\x63\x1e\xec\x34\x3a\x6c\xef\xf6\x63\x6f\x28\x7e\x20\x3e\x2e\xa2\x37\xcb\x61\x56\xb5\x5c\xf0\xdc\x31\x98\x21\x96\xe6\x8a\x54\x54\x05\xf9\x68\xa8\x52\x32\xe3\xa0\xa4\x6c\x4f\x30\x62\x24\x94\xf0\x81\x51\xf5\x59\x56\x3b\xf9\x1b\x42\x23\xb6\x84\x7c\xf9\x11\x9e\x70\x09\x47\x22\x64\xce\xae\x9a\x9b\x82\xab\xf9\xf5\x3e\x0d\x89\x9b\xc6\x41\x07\xf0\x35\xcf\xc0\xfb\x0c\x8a\x51\xe6\x4a\xa1\x38\xf0\x85\x86\xba\x19\x26\x96\x1b\xf1\x4a\xc2\x69\xb9\xfe\xc3\x2b\x26\x81\xc6\x17\xcc\xe6\xea\x3b\xbf\x7e\x38\xbc\x19\xdb\xfb\x76\x2d\x36\x03\x15\x56\x64\xc8\xd9\x37\xa2\xea\x3c\xcf\x68\x71\x7f\x25\xba\xb0\x75\x59\x14\x47\x97\x50\x1c\x70\x79\xab\x10\x00\xb9\x81\x4d\xb7\x47\x3c\x28\xae\x69\xb3\x70\x47\x1b\x75\x57\x36\x58\x91\x52\x62\x02\x1a\x01\x75\xa2\xf1\x25\x28\x4e\xe1\x3e\x08\xb2\xa6\x41\xf2\x5f\xb8\x01\x83\x71\xf6\x9e\x36\x18\x67\x1f\x68\x83\x71\x76\x63\x3b\x88\x73\x4d\x9b\xb9\x97\x06\x49\x56\x3b\xb5\x66\x3d\x9f\x10\xcf\x71\xf4\x44\x45\xec\xd4\xe5\x05\x67\x75\xa6\x75\xcd\x6f\x1a\xbd\xa7\xf2\x77\x2b\x63\x00\x0b\xcc\x94\xa5\x1c\x63\xbb\x89\x59\x80\xb0\xac\x32\xc8\x63\xc6\x80\xde\x44\xb3\x84\x13\xcf\xb9\x01\xd3\x86\x0f\x8f\x15\xc9\x65\xd6\xf8\x82\xc4\x70\x3a\xad\x37\x5b\x6c\xbd\xc2\x24\x3c\x9c\x5e\xce\x2b\x1c\xa4\xf7\x6a\xe5\xf2\x4e\x18\x6c\x77\x76\xd5\x93\x7b\xa2\x9b\x77\xa2\xfd\x2a\x14\x53\xdc\x63\x62\x9e\xd3\x1b\xd9\x68\x9f\xdd\xf7\x7f\x99\x99\x7d\x93\xde\x59\x4b\xd2\x28\xf6\xa0\x19\xbd\xd5\x26\x6f\x39\xc6\x60\xbb\x1f\x6c\xf7\x83\xed\xfe\xbe\xd6\xb9\xc7\x97\x68\x96\x0f\x8b\x3e\x77\xf0\x97\x4b\x95\x1c\xb3\x75\xfb\xb7\x86\xbe\x69\x31\x2e\x8a\x34\xab\x89\x2a\x56\xe4\x2c\xbc\xed\xad\x36\x3e\x70\x07\x75\x28\x19\x58\xe2\xa7\xb7\x9c\xee\xc9\x1e\x0a\xab\x8b\x92\xa1\xb1\x75\x23\x6e\xdb\x20\x69\x2c\xe5\x8e\x6e\x12\x81\x47\x46\x25\xf3\xd7\x58\xd5\x93\x0a\x21\x91\x1d\x50\x23\x5b\xf2\x7c\x64\x43\x5d\x80\x11\xae\x68\x86\x72\x69\xc3\x73\xc0\x04\x6d\xc4\x7a\x7f\xfc\x2d\xb6\xc4\x13\x20\xc9\xa7\x40\xe0\x24\x60\x81\x3d\x25\x84\xc2\x96\x7a\x24\xa6\xd1\x8a\x7f\xcb\x6a\x15\x95\xdf\xb3\x6d\xdd\x64\xd3\xf8\xbd\x3b\x09\x95\xcd\x59\x49\xe1\x9f\x6f\xdd\x02\xcc\xb5\x36\xfc\xae\x66\x98\xd8\x93\xd5\xa5\x11\xbc\x46\x1d\x7f\xf6\xa3\x45\x5c\x5e\x4c\xd7\x92\x85\x15\xe2\xc0\xb0\x3f\x05\xfe\x03\xcb\xbd\xea\x18\xd6\x0c\x08\x02\x7d\x2f\xb0\x50\xe6\x8a\x3b\x0c\x20\x2e\xdc\x9f\x3d\x2f\xed\x31\xd2\x15\xb6\x43\xf8\x01\x6c\x6b\xff\x1f\x79\xfb\x42\x97\xe5\x89\x1e\x78\xb0\xff\x0f\xf6\xff\x6e\x7b\xe6\xf6\xff\x80\xe4\x39\x0c\xba\xc1\xc0\x1f\x5a\x48\x9c\x95\xff\x86\x39\xd9\xc2\xca\x2f\xce\x74\xef\xec\xf6\xb2\xee\x3a\x9e\x1d\x4f\x26\xc7\xe8\x7a\xd6\x0a\x3c\x8d\x9e\x8e\xff\x44\x98\xc8\x64\x6e\xfa\xf9\x08\xfd\xd7\x4a\x03\xbb\xd4\x6a\xfe\xc2\xb9\x94\x6e\xac\xd0\x79\x0d\xfa\x4e\xa3\xab\x09\x68\xcf\x65\x98\x7d\xfb\x18\xe6\x22\x01\x7d\xb5\xcc\x87\xcf\x6d\x6b\xb7\xc2\xd7\x4a\xb0\x5c\x88\xfb\x5d\x91\x82\x97\xdc\xd6\x85\x35\xf7\x9d\x29\x1d\xab\xb8\x24\xe4\x04\x3f\x9e\x64\x55\x33\xb2\x1d\x4d\x4a\x56\xca\x7a\x39\xf2\x9d\x99\x1f\x3b\xbd\xdb\x37\xb0\x6a\x47\xd6\xd4\x35\x13\xba\x58\xc6\x26\xe6\x69\xdb\x81\xb8\x1c\xb7\x53\x7b\x64\x72\xfc\xe1\xc4\xa5\x8f\x6a\x5b\xf7\x46\xb6\xd6\x61\x50\xaf\xfb\xd5\x62\x59\x5e\x0c\x78\x1e\xb5\xb6\x73\xf3\x94\x89\x05\x59\xd0\x5a\xc5\xde\x00\xb2\x2d\x5f\x93\xf3\x05\x57\x7d\x95\x93\x1f\x58\xdc\xb5\xd7\x7d\x42\xc9\xc1\x46\x57\x8d\xb6\xe8\xce\x81\xb8\xab\x34\xe1\x41\x7b\x85\x7d\x7b\xd5\xaf\x02\x6e\x5b\x45\xb5\x66\xb5\x78\x4d\xfe\xf3\xe4\x3f\x7e\xf3\xd3\xf8\xf4\xaf\x27\x27\xdf\xbd\x1c\xff\xeb\xf7\xbf\x39\xf9\x8f\x09\xfc\xe3\xd7\xa7\x7f\x3d\xfd\xc9\xfd\xf1\x9b\xd3\xd3\x93\x93\xef\xbe\x7c\xf7\xb7\x8f\x57\x17\xdf\xf3\xd3\x9f\xbe\x13\x4d\x79\x8b\x7f\xfd\x74\xf2\x1d\xbb\xf8\x3e\xb2\x93\xd3\xd3\xbf\xfe\x2a\x61\x92\x54\x2c\xbf\x8e\xc6\x29\xd8\xc6\x5b\xd1\x95\xee\xb7\x89\x47\xbf\xc2\xfb\x71\xa1\xc7\xb2\x1e\x63\x27\xaf\x21\x0b\x7a\x74\x57\xee\x68\xb7\xbf\x23\x2d\xd5\x6a\xab\x9e\x38\xf6\x78\xcf\x97\xe0\x71\x1c\xf0\xd6\x8e\x5d\x60\x2a\x7a\xc3\x77\x9a\x7d\xc0\xf5\xd9\x0d\x92\xd2\xac\xac\x64\x4d\xeb\x25\xc9\xad\x72\x6b\xf9\xa8\xa4\x6f\x8f\x4c\xac\x0e\x93\xcc\xf9\xc3\x30\xbe\x07\x55\x71\xc9\x72\xde\x94\x7b\x49\xcb\x06\x3d\x87\x9b\x7e\x07\x65\x47\x6c\x51\x13\xe7\xeb\x63\x5f\x73\x25\xb9\x68\x76\x8b\x82\x8a\x3f\x95\x38\xfd\x61\xa7\x16\xc5\xd1\xd1\x4a\x8d\x6f\xd0\x4d\x83\x13\x8c\xcc\xd9\xb1\xf2\xef\xe2\xe0\x89\x4a\x62\x34\x67\x5a\xdf\xc8\x13\xdb\xd5\xa9\x61\x04\xdf\x01\xaf\x70\x80\x34\xfc\x51\xd0\x42\x12\x93\x37\xf1\x7f\xb2\xaf\x0c\x57\xb4\x97\x08\x6f\xd7\xb9\xaf\x08\x2e\x41\x98\xb3\x89\x17\xa7\xa4\x90\x59\xe0\x00\xd6\x61\x06\x00\x1c\x2e\xdc\x25\x8e\xb7\x15\x1a\xa0\x30\xe3\x22\xaf\x07\xca\xd0\x42\xa1\x77\x0b\xcf\xa0\x40\x1b\x88\x86\x70\x66\x09\x90\x60\xba\x2d\xe9\x27\x5e\x36\x25\x69\x94\x99\xad\x14\xdd\x5e\xda\xc9\xde\xb9\x3a\x73\x90\xca\x8e\x0b\xf8\xa8\x23\x1a\xc7\xa8\x28\xe7\x8c\x5c\xfb\xfd\x6b\xd5\x21\x68\x4a\xb7\x92\x9c\x6a\x40\x90\xb0\xf3\xb0\x6c\xb2\x9c\x82\x63\x85\xe7\xd8\x94\x2f\x55\xb6\xc5\xa5\x12\xbc\xe8\xde\x2a\x57\x44\xc8\x6f\x6f\x23\xac\xbf\xe2\x73\xba\x01\xcf\x98\x37\x8a\xe6\x88\xd2\xf9\xa0\x44\xee\xe7\x11\x3c\x8f\xf7\xde\xdc\x29\xc9\xf6\x2e\xa1\x1d\x9a\x1d\xd6\x2f\xea\xba\x87\x52\xe7\x49\xe8\x51\x48\x5c\x9a\x9d\x8f\x5e\xa7\x63\x49\x7d\xb6\xcc\x6c\x0a\x3f\xde\xa9\x03\x87\x83\x22\x7c\x43\x18\xdb\xd8\xfc\xc7\xe9\x7e\x9c\xf9\xf1\x86\x4d\xd1\xbd\x09\xbf\x01\xd9\x5d\xf5\x85\xce\xa1\x46\xab\x60\x1a\x62\xf1\x98\xaf\x0e\x88\x7e\x57\xa5\x5c\x44\x14\x10\xfe\x46\x59\x83\x33\xef\x05\x28\x7a\xda\x89\x93\x57\x28\x62\x0b\xc6\x72\x8c\x05\x2c\xda\xf9\xd7\x8d\xe8\x9d\xfd\xcd\x29\x99\x32\xaa\x9b\x1a\xbd\x7f\x84\x91\x72\x0a\x27\xc0\xa1\xda\xa9\x66\xe6\x50\x20\x05\x62\x2d\x4b\xa2\x04\xad\xd4\x5c\x6a\x50\x9d\xd0\x8a\x66\x5c\x47\x84\x97\xe9\x9a\x66\xb7\x50\x63\xb9\x66\x76\xb6\x7d\x53\xcb\x4e\x6d\x14\x43\x08\x11\xdd\xd8\x47\x3d\xaf\x65\x33\x9b\x43\x28\x1e\xbe\x95\x15\x54\x61\xcc\x65\x9f\x91\x7d\x63\xef\x56\x31\xa0\x48\xbe\x14\xb4\xe4\x99\xaf\x34\x55\xcb\x05\x57\x5c\x5a\x23\x15\x8c\xda\xbf\x68\x4a\xae\x7c\x19\x20\xb4\x8c\x9d\x17\x94\x97\xe4\x44\x31\x46\x2e\xdc\x25\xc1\x5f\xae\x51\x40\x40\x75\x67\x8c\x83\x55\x68\x54\xb3\xa9\x8f\x6d\xe6\x14\xf3\xc4\xa9\x6e\x03\x37\x86\x98\x84\x58\x16\x9e\x37\x4e\xbb\xbf\xc0\xaf\x01\xe3\xcd\x2b\x96\x35\xf8\x0b\xba\x6a\x78\x4c\xe4\xb2\x75\x8f\xe9\xe9\xf5\xec\xea\x52\x85\x6a\x05\xbc\xcb\xb6\xc0\x12\xfc\x60\xd3\x2d\xfb\xbc\xb2\x1e\x13\xf4\xf4\x6c\x08\xac\x80\x42\xcc\x0b\x9e\x37\xb4\x40\xd2\x1a\xb1\xc8\xf3\xeb\x4b\x1c\x98\xcf\xe6\x7a\x7c\xc7\x40\x11\x8c\x3c\x50\x8b\xfb\xdc\x74\xf9\x9a\xd3\x36\x57\x40\x84\x23\x6a\x30\x5b\xc5\x34\x2e\xf9\x8e\x2e\x21\xff\xbc\x75\xfe\xed\x78\xfb\xb8\x9a\x30\x38\xc0\x54\xf6\x51\x99\xd2\xd1\x6f\x0b\x42\xbd\xcb\x3e\x03\x94\x92\x51\x01\xcc\x38\x68\xf4\x0d\x3c\x01\xd6\x58\x5f\x73\xff\xfd\x0b\x0a\x64\xf9\x8f\x90\x21\x51\xd4\xc0\x6a\xaf\xcc\xb6\x07\x69\x6a\xd1\x42\xec\x47\x56\x56\x05\xd5\x7b\x71\xc0\xf9\x7b\x60\x72\x08\xec\xe1\x06\x89\x51\x91\x8f\x69\x61\xae\xca\xd5\xb7\xe7\x36\xe0\x15\x11\x4f\xa2\xa7\xdd\x47\x47\x84\x84\xaf\xa5\x6c\xd8\xf0\x8d\x38\x07\xb2\xa7\xde\xb0\x1c\x28\x88\x9d\x5b\x9c\x93\xb0\xbc\x13\xac\x76\xb0\x77\xf5\xed\xf9\x88\xf0\x09\x9b\xb8\xbf\x7c\x67\x8e\x3c\x6a\x39\xc3\xd0\x19\x17\xa2\x16\x63\x5b\x97\xf9\x04\x97\x13\xea\xf7\xc3\xde\x7f\xf8\xb3\x59\xa8\xf9\xf5\x2f\xe3\x3f\x07\xb5\x0b\xff\xf2\x83\xa1\xc7\x51\xbe\xaa\x3f\xac\x7c\x17\xc6\x5c\x00\xd1\x33\x7f\xfd\x70\x65\xcb\x16\xdb\xa2\xc6\x3f\x44\x3a\x55\x10\xc2\x84\xae\x97\x13\x72\x25\xc1\x0f\x8f\xe7\x78\x65\x61\xfe\x35\xfb\x87\x33\x0b\xc1\x71\x79\x0d\x7a\x46\x35\x13\xc0\x95\x3c\x58\x01\xb8\x6d\x36\x03\x00\x0c\x00\xc8\x89\xc2\x2e\x9d\x80\xea\x15\xd3\xe1\x8c\x88\x96\x98\x9c\xbe\x1f\x97\x9b\x76\x26\x08\xfb\xc4\x15\x64\x3f\xc3\x1d\x87\x63\xa3\x36\x24\xc4\x31\x72\x66\x58\x03\x09\x3e\x67\x5e\x25\x63\x7c\x37\x60\xfd\xbf\x16\x52\xff\xda\x5f\x06\xe7\x51\x0a\x1c\x9b\x24\x74\x21\xb9\xab\xb1\x6d\x10\x8f\x00\x23\x4b\x54\xa2\x09\x7b\x9e\x37\x4b\x52\x72\xa5\xe9\x2d\x9b\x90\x6b\xc3\xce\x85\x4e\x26\x78\xca\x82\x40\x2d\x3c\x96\x93\x46\x68\x5e\x44\x4a\x74\x7e\x2e\xb0\x31\x01\xab\x07\xa9\x25\x9a\xcc\xf0\x24\x55\xcd\xc6\x8e\xb5\xc4\xb7\xa2\xf4\x2e\xb6\xaa\xa7\xdb\x93\x76\x4f\x47\x1e\xf4\xe7\x14\xd5\x22\x55\x0e\x9d\x5b\x4f\xed\xe8\x0b\xbb\x16\x4d\x61\x76\x43\x8a\xac\x65\x1d\xe1\xd8\xd5\x84\xbc\x07\x7e\xb0\x88\x01\x72\x74\x1a\x43\x3d\x90\xb5\xb2\x09\x96\x31\xa5\x68\xbd\x44\x27\x76\xee\xab\x6b\x37\x8a\x4d\x9b\x02\xd8\xe5\x98\x2d\xa1\x02\x2b\x99\xd7\x2c\x93\x42\xe9\xba\xc9\xe0\x1c\x29\xb9\xa9\xe5\x2d\x13\x6d\x18\x52\x14\x62\x0c\x3d\xee\x5b\xd7\x66\xc3\xf6\x08\x49\xb2\x39\x15\x33\xe6\x53\x80\x90\x92\xe6\x00\x45\x5f\x7a\x01\x2b\x66\x2b\xa4\x3f\x29\x3a\x35\x52\x0d\xd7\x70\x64\x37\x86\x23\x73\xf6\xc8\x98\xc9\x7e\xf0\x41\x00\x65\x60\xbc\x14\xbc\xd8\xb1\x23\x6f\x8a\xad\x6a\x0c\xfc\x77\xbf\xe0\x9e\x64\x9b\x2a\x99\xa6\x39\xd5\x74\x9f\x71\x1a\xef\xa8\x2f\xe3\x6e\x7d\xa1\xe0\xd0\x03\x1f\x29\xcb\x66\x39\xa9\x50\x56\x3c\x4c\xec\x72\xf5\xed\x79\xe4\x48\x20\x06\xc2\x39\x43\xde\x48\x6d\xee\x91\x35\xcf\x03\xe4\x61\x68\x8c\x8b\xc5\x30\x93\x70\x63\x22\x39\x60\x39\xc9\x9b\x04\x6d\x7f\x4b\x54\xe2\xec\x99\x89\xd6\x4c\x73\xde\xfb\x3c\x98\x8f\xad\x9b\x50\xd6\x8d\x2c\xd8\x28\x4c\xa0\x05\x9e\x09\xcd\x6b\x16\xa4\xf7\x89\x1c\xcc\x9e\x6a\x23\xf0\xa6\x77\xcf\x17\x01\x60\xc6\xb4\x6a\x5d\x92\x91\xfc\x47\xf7\xaf\x2d\xe3\x88\xb3\x04\x5e\xd6\x9d\xb9\xd5\xdf\x6d\x5c\x54\x64\xef\x08\x37\x4a\x5a\x32\x6f\xd8\x9b\xbd\x1c\xf9\x36\xb6\x65\x9a\x19\x6c\xff\x4e\xe6\x29\xe6\xe8\x6d\xbd\x0f\x3a\xc3\xb5\xe1\x69\x18\x15\xa9\x40\xf9\x8c\x2f\x80\x43\x8c\xea\x24\x37\x42\x1a\x35\xa7\x8b\x84\x54\x2a\x5b\x6b\x3c\x5b\x39\x67\xec\xab\xf0\xc2\xc4\xc6\x30\xb1\xf1\xab\xe8\x29\xa4\x38\xf2\xba\x16\xed\xd0\xdb\x1d\x24\xd1\xea\xfa\xa8\x44\x10\xae\x19\xf4\x7f\x9d\x68\x71\xdd\x1e\x7a\xda\xd1\x2c\x33\x60\x9d\xa8\xbc\x03\x9e\x0d\xf6\x67\xdc\xa0\xed\x94\x1d\xfc\x75\x87\x6d\xb6\x82\x96\xd7\x99\x61\x38\xe5\x89\x53\xa2\x4d\x2c\x98\xb8\x3c\x95\xdd\xd7\x4f\xb7\x1e\x16\x38\xff\xcd\x5a\x9c\x84\x3e\x2f\xad\x3f\xb1\x93\x41\x8d\xac\x57\x83\x0d\xcd\x85\xf1\x9b\x8b\x57\xcb\xa2\x60\x35\x6c\xa0\x55\x9f\xad\x38\x7e\x42\xed\x4b\x34\x80\xc7\xe4\x21\x73\xcd\x29\x68\xbd\x78\x2c\xd8\x9d\xe7\xeb\xa9\xc2\x0c\xf3\xce\xdf\x08\x54\xcc\xce\xeb\x76\xd3\xc8\x29\x57\xfd\xef\x4e\x8d\x7b\x26\x96\xb8\x75\x6f\x02\x70\x41\x75\x29\x99\x99\x49\x19\xd1\x59\xd0\x9b\xc2\xb0\x68\x01\x48\xf9\x19\xad\xf0\x12\x5a\x06\x6f\x7d\x60\xd3\x94\xed\x00\x3d\x73\xf8\x71\xdc\x28\xc8\x8c\x74\x3e\x9c\xb4\xbe\xdf\x56\x7a\x4b\x4a\x32\xee\x9a\x85\x8e\x4e\x67\x5d\x7f\xcb\x95\x71\xc3\xbc\x77\x1b\xe7\x1a\x3f\xfa\x16\xfe\x58\xdb\x78\x64\x41\xf6\x34\xde\xab\xcb\xea\x7e\x10\x29\xaf\x63\xdb\xc6\x85\x0b\x3c\xd5\xc1\x15\x34\xcd\x1f\x67\x7b\x6c\x49\x50\x0d\x0b\x63\x3a\xe5\xc8\x0c\xfe\x70\x9c\x9a\xf7\x70\xb9\x61\x06\xff\xb4\x49\x21\x53\x20\x8a\x20\x54\x85\x23\x6d\x70\xe2\x6d\xaf\xf7\x97\x50\xd4\xd4\x9a\xf6\x5d\x4a\x0a\x43\xa6\xcf\xae\x2e\x71\x7e\xa9\xa3\xbf\x05\xfc\xb6\xb4\xcc\xba\x9e\xf3\x3a\x1f\x57\xb4\xd6\x4b\x54\x76\x8e\x3a\x73\xf3\x51\xf5\x49\x83\x6c\xe9\xd7\x14\x57\x06\x39\x6c\x9d\xe3\x86\xad\x72\xc6\x7b\xeb\xc3\x71\xef\x99\x1d\x62\x3d\xf1\x51\xf9\x1b\xd7\x13\x16\xb1\x74\x8a\xc1\x27\x5c\xcf\xe3\x23\x0e\x48\x17\x57\x1e\x96\x07\x32\xc8\x59\x75\xbd\x1e\x91\x51\x01\xe9\xc7\x2a\x90\x65\x18\x1c\xeb\xb9\x69\xd0\x3d\x99\x9e\x46\x84\x4f\x0d\x91\x96\x62\x0c\xd6\xfd\x84\x89\xb4\xc6\x4c\xcb\xbb\x4f\xac\x83\x3d\x6a\x8b\xe0\x42\x06\xf3\x09\x06\x69\x6f\x3a\x39\x11\x32\x46\x99\xe4\x1a\xe0\x09\xec\xf5\x14\x63\x1f\xee\xb1\x5c\xdd\xa4\x24\x9c\x24\x2d\xf7\x10\xaa\x99\x02\x0c\xe6\x18\x18\x2e\x72\x03\xa4\x40\x12\x41\x01\xa5\x9a\x2c\x63\xcc\xab\x80\xed\x25\x4d\x61\xdd\x3b\xb8\xd1\x6e\x58\x49\x75\x36\x67\x8a\x28\x09\x59\xd5\x95\xa6\x45\xc1\x72\x6f\xd6\xc4\x03\x95\xc0\xd7\x59\x93\x67\xc2\x88\x01\x63\x98\xb2\x41\x81\x0a\xce\xea\xc0\xab\x82\x5a\xe5\xe3\xb4\x11\x19\xfa\x0c\x73\xbd\xf4\x56\xad\x55\x66\x1d\xf4\x36\x0a\xf4\xac\x29\x0c\xe5\x14\xed\x56\x81\x0e\xc6\x03\x12\x90\x96\x25\x12\x13\x23\x19\xb6\x96\x28\x9b\x31\xd8\x50\x06\x9f\x7e\x23\x09\xce\x82\x44\x1d\x23\xe4\xc6\x42\x96\x49\x1c\x87\x4e\x41\x5c\x6c\xcf\x20\x86\x6b\x3b\x09\xb6\x6c\x8d\x71\x3c\xf5\x0c\xa3\x62\xbe\x1c\xb8\x4a\xe1\x5a\x88\xf5\x82\xa2\x8d\x96\x25\xd5\x3c\x03\xf5\x2c\x9f\x06\x46\xde\xd2\x17\xe5\xf3\x4e\x4e\x48\x54\x81\xa8\xdb\x5d\x4f\xbe\x56\x9b\x99\xcd\x47\x6d\x5b\xb0\x53\xf6\x34\xba\x9b\xe2\x96\x1a\xb0\x1a\xc9\x73\xff\xe8\xf2\xa6\x10\x3d\xaf\x19\x23\xbc\x34\x62\x12\x15\x9a\xe4\x7c\xea\xf3\xe5\x38\x9b\xfd\x43\x67\x97\x26\x89\xfe\x1d\xfc\x41\x82\xfe\x50\xd5\x5d\x14\xf2\x4e\x11\x7d\x27\xbd\xda\xad\xb5\xe5\xda\x7c\x29\xa3\xee\xb0\x49\x14\xd4\xf6\x6f\xd0\xb6\x39\xe9\x00\xd3\x8e\xcc\xad\xbd\x63\x45\x61\xfe\xff\x10\xbe\x4d\x88\xf4\xda\xb8\x4e\x3e\x13\x98\x88\x83\x2b\xa7\x66\xb5\xf1\x64\x27\x79\x2d\xab\xca\x9a\x81\xca\xd3\xc7\xac\x13\x5c\x9b\xea\x05\x53\xe0\xa6\xe7\xa2\xd9\xcc\x91\xcd\x98\x60\x35\xd5\x60\x08\xb7\x19\xb4\x81\x38\xae\x4e\x27\x5e\x6d\x89\x6d\x2b\x39\xad\x07\x0c\xd0\x6d\x61\xf3\xb1\xbb\x77\xec\xaf\x49\x73\xe5\x02\x21\xc0\xdd\xd8\xa4\x23\x3d\xf9\x82\x69\x7a\x4a\xbe\x51\x78\x50\x9e\x5e\xf8\x28\xc1\x28\xe9\xdc\x66\x39\x42\x01\x3d\x69\xf8\xb3\xa2\x9a\x07\xe3\x87\x52\xae\x0f\xb5\xee\xee\x54\x67\x66\xe7\xb5\x54\xea\xbd\xfb\x64\x2f\x93\x1c\x24\xe0\x41\x02\x1e\x24\xe0\x87\xdb\x20\x01\x1f\x7a\x3d\x80\xef\x0e\x79\x27\xdf\x87\x0c\x61\x17\x51\xef\x6c\x3f\x08\x79\x2f\xb5\x75\x77\x01\xfe\x9d\xde\xab\xf4\xa4\x80\xd3\xef\xe8\x72\x22\x98\xb6\x79\xe8\x9c\x6e\xff\x83\x1b\xfd\x6f\xb5\xe1\xfc\xac\x80\x16\xdc\x22\x77\x81\x5d\x12\xc1\x60\x14\x2d\x91\x14\xb7\xde\x37\xf0\xfc\x58\x59\x8f\x0e\xf3\x3b\x04\xdb\x93\x4e\x49\x96\x09\xb9\xb6\xde\x82\x2b\x83\xaf\xa7\x0a\xcb\x99\xa6\x3c\x2e\x0f\x65\xd8\x1c\xa5\xfc\x78\x0f\x8d\x3e\x00\x25\x24\xdb\x81\xac\x0f\xdd\x3c\x84\xaa\xa5\x0d\x81\x0e\x3c\xe2\xc3\xa8\x92\xf6\x85\xc7\x5b\x2a\x2f\xa7\xe4\x03\xcb\xe4\x82\xd5\xb8\xdf\x17\x9f\x2a\x2a\x8c\x98\xfe\x96\xf2\xc2\xec\xb6\xdb\xf5\xd6\x7a\x01\x45\x90\xbb\x6e\x09\x81\x11\xcc\x5f\x23\x7b\xb4\x06\x72\x52\x98\x41\x9f\xf3\xce\xf4\x6c\xfd\x74\xab\x9a\x2d\xb8\x6c\x94\x8b\xa7\x69\x34\xd2\x31\xa5\xad\x6c\x3a\xe7\xb3\xb9\x7b\xd9\xf9\x99\x83\x07\x50\x9d\xfb\xab\x92\x30\x07\xa5\xa9\x6e\x54\x37\x51\x4e\x06\xee\x04\x4f\x62\x03\xf6\xe7\xbd\x5f\x86\x6f\x3b\xe6\x0a\xe3\x8f\x0e\x89\xc6\xbf\xc2\x88\x27\xec\xe4\xc6\xde\x02\x17\xa6\xd5\x86\x99\x65\xb2\xac\x1a\xcd\x82\xdb\x62\xa1\x35\x15\x6d\x25\x1e\x64\x27\xef\xe5\x8b\x92\x0a\x3a\x63\x63\x3f\x89\x71\x1b\xa1\xf5\x62\x0b\xac\x95\x78\xa4\xe4\x11\x89\x17\xc3\xf6\x8c\x23\xab\x56\x16\x9b\x1e\x79\x4e\x1e\x19\x7d\x4e\x1e\x13\x81\x4e\x76\x19\x85\x4e\x7c\x2a\x8b\x43\x5e\xc7\x0f\x76\xcc\xd5\x0b\x69\x89\xd5\x43\x17\x72\x3b\x91\xc0\x12\x2d\x3b\x2a\x57\x44\x96\x5c\x6b\xe6\x1c\x99\xfd\x05\x1b\x11\xae\x3b\x99\x16\x2c\xe2\x00\xa5\x39\x7a\x23\xb3\x4f\xbe\xac\x76\xcb\x98\x25\x4e\x06\x84\x9f\x3b\xae\x90\xf1\x12\x84\x97\x15\x16\x66\x01\x04\x30\xb6\x71\x92\x4e\x35\xec\xe7\x9d\x81\x2f\x21\x61\x9f\x40\x91\x8f\x53\x1b\x30\xd3\x80\x99\x56\xda\xcf\x01\x33\x61\x16\x8b\x94\x24\x2b\x1d\x8c\xe4\x3e\xb7\x39\x2e\xe9\x0d\x2b\xc8\x8f\x0d\xab\x97\xc4\xb0\xad\x6d\xa4\x17\x54\x03\x57\x3c\xc7\x98\x26\x67\x35\xdb\xb3\x96\x6c\x3b\xa6\x09\x2c\x6d\x17\x9f\x0c\x77\x0f\x39\xdb\x1e\x81\xaf\x57\xbb\xea\x66\x02\xc5\xdd\xf2\x3b\x18\xf2\xe4\xe8\x74\x1a\x3e\x01\xb6\xfb\xec\xfd\x9b\xed\x04\xaa\x34\x67\x43\xb2\x8d\xc3\xe1\xda\xe2\x93\x89\x15\x21\x67\x0f\xec\x09\xee\x9d\xff\x05\xa8\x84\x77\x17\xf5\x3a\x7b\x72\xcb\x96\x23\xeb\x0e\x4e\xcc\xe9\x53\xf7\x72\xf2\x64\x30\x2e\xa4\xad\x5a\x68\x3a\x8d\xcd\xbe\xdd\x6d\x5b\x23\xe1\xed\x14\xbd\xd8\xe2\xcb\x45\x76\xbf\x72\x9b\x96\x8a\xeb\xb7\xa6\x12\x49\x65\x25\xc3\x76\x5f\x89\x49\x84\x21\xa8\x07\xe7\x72\x23\x78\xb0\x81\xac\x13\x80\x90\x52\x0f\x91\x6c\xaf\x50\xc3\xe6\x36\xf6\xd1\x4b\xdd\xe2\x62\x85\xe3\x77\x63\xf9\x6f\xd9\xf2\x58\xd9\xa4\x77\x52\xa8\x39\xaf\xb0\x04\xaa\x62\x80\xa3\xb6\x03\x78\x6c\xdf\x82\x6b\xbb\x1b\x16\x31\xd8\xa5\x18\x91\xf7\x52\x9b\xff\x5d\x40\x68\x12\x5c\xab\x37\x92\xa9\xf7\x52\xc3\x93\x83\x9f\x0b\x2e\xf1\xa9\x4e\xc5\x5a\x33\x39\x58\x18\x01\x4d\x63\x56\x1e\x88\xd3\xb7\xbb\xef\x3c\x34\xfd\x09\x72\x45\x2e\x05\x91\xb5\xdd\xca\xad\x06\xd6\xae\x88\xb2\xb2\xc3\x3a\xeb\x43\x6b\xd4\xdf\x34\xae\x3d\x35\x59\x77\x0e\x6d\xc7\x53\xb0\xc3\x83\x2e\x12\x7f\x01\xed\x2a\x78\x97\xb8\x90\x1a\x2c\xdb\x4b\x35\x9b\x25\xb9\xba\xb4\xad\x64\xf5\x0c\xb2\x3c\x66\x09\x05\x1f\x83\xc9\x6f\x49\x58\xb1\x6d\x45\x5e\xc3\x81\xb7\x04\xf6\x1d\xf9\xf8\xef\xb8\x2b\xe0\x93\xbe\x82\x50\xae\x43\x4a\xc7\xc1\xb0\xc8\x5d\x94\xb4\x32\xb7\xef\xbf\x0d\x13\x01\x80\xf9\x3f\x50\x33\x5d\x4d\xc8\x19\x51\x5c\xcc\x0a\xd6\xf9\xcd\xaa\xf9\x83\x6e\x92\x27\x00\xd6\x37\x43\xe3\x17\xb4\x60\x18\x2f\x4a\x85\xaf\x1e\x2a\xa7\x6b\x2c\xe4\xc8\x16\x51\x37\xe4\xcd\xbb\xa5\x1d\xdd\xb2\xe5\xd1\x28\x51\x91\x4a\x42\x9a\x60\x3a\xb9\x14\x47\x6d\x4a\xda\xce\xbd\xf4\x7c\x16\xf8\x1b\x1c\xc1\x6f\x47\xbb\xe6\x51\x9f\x48\x48\x7d\x32\x37\x51\xab\x54\x3e\x2f\x28\x1a\x56\x0e\x61\xbe\x58\x1d\x73\x53\x51\xc2\xeb\xe0\x9d\xd6\xa4\x65\xa3\x97\x9f\x50\xd3\x0e\x19\x61\x92\xc3\xac\x92\x0e\x76\xb5\x0c\xd0\x41\xcf\xe6\xde\xc1\x83\x60\x6b\x9f\x53\xdc\x9c\xc5\xb7\x9b\x3e\x08\x62\xcd\xb9\x4a\x3f\xae\xcb\xe9\xaa\x8f\x42\x90\xee\x24\x8c\xe2\x91\xb5\x8d\x5a\x5f\xf3\x21\x86\x0a\x89\x6d\x25\xa5\xd8\xda\xa9\x6d\x6b\xdd\x1f\x6a\xa6\x2a\x89\xfe\xb5\x1b\x17\x6b\x59\x84\x39\x55\xe0\x93\x35\xb5\xe6\xd6\xaa\xa9\x2b\xa9\x6c\x79\xbb\x55\x90\x4f\x8c\x5c\xb2\xe1\x64\x2e\xc8\x14\xc3\xc0\xfd\x4d\x30\xf7\xc7\xe7\xa5\x3e\x5b\xc9\x49\x28\x6b\x48\xd6\x66\x1d\xc4\x44\xce\x33\x2b\x4f\x52\x4d\x44\x5f\xc2\x98\xb0\x6d\x3e\x68\xe7\xfb\x89\x22\x8d\x4f\x92\x85\x47\xee\x58\x37\x9c\x25\x13\x1a\xac\x82\x82\x5c\x8a\x29\xa3\x8a\xdf\x14\xcc\xba\xb3\x29\x4d\x75\xd2\x9e\x04\x4e\x5c\x76\x6f\x8c\x30\x01\x94\x8b\x6b\xb5\x6a\x0e\x3c\xe1\x22\x2b\x1a\x38\x41\xc1\x8b\x53\x50\x04\x51\x91\xb1\x02\x29\xa7\xcc\x7d\xac\xf0\x16\x11\x4b\x81\x39\x73\xca\xea\xda\x96\xc3\x5b\x6e\xbe\x49\x24\x97\x0c\x9d\x70\x20\xb8\x6e\x84\x0b\xd9\xec\xbb\x68\xb7\x36\x05\xb1\xe2\x0e\x50\x72\xc5\x10\x5e\x71\x5f\xb1\xda\xea\xb4\x08\x2a\xf2\xd8\x55\x5b\x8f\xb7\xeb\xc0\x9a\x39\xc2\xc4\x15\x36\xeb\x44\x98\x90\x3b\x61\x22\x36\xe1\xc3\xfe\x31\x34\x6e\xf2\xb8\xbd\xe9\x63\x40\xd0\x2c\x41\x41\xbd\x35\x86\x8e\xab\xa8\xe5\xda\x63\x51\x32\x94\x17\x70\x29\xe7\x3a\xc9\x53\xdb\x78\x87\x47\xd3\xc9\x6f\xe1\xba\xc8\x29\x79\xdb\xd6\x80\xe5\x0a\x0c\x16\xdc\x25\xa4\x33\xc0\x8b\xf7\x09\x0d\xe7\x78\xb9\x0d\xbe\x4e\x55\xa4\x6e\xb1\xe7\x8f\x20\x83\x6d\x07\x8e\xdf\x70\x51\x13\x6b\x09\x4c\x56\xef\x23\xb8\xea\x7b\xdf\xd1\xc4\x5d\x8d\x5c\xeb\xb4\x27\x29\x42\x67\x2d\xd3\xac\xab\x3f\x79\xcb\x6f\x6a\x46\xce\xe7\x54\x08\x56\x04\xf9\xa1\xad\x11\x8b\x6a\x4d\xb3\x39\x62\x26\x4a\xcc\xbd\x2a\x98\x3e\x56\x64\x2e\x95\x26\x25\xcd\xe6\x5c\xf8\xe4\xa1\xc2\x67\x23\x6f\xb3\xb9\x1c\x3c\x75\xd6\xde\xab\x36\x5b\x08\x08\x4b\x1d\x77\x8a\x39\x47\xf4\xe4\x93\x00\xaf\xf5\xd2\xd6\x49\xb4\xf7\x10\xf6\x19\xa5\x1c\xc0\xca\xf0\x6e\xcc\x18\xf7\x97\x94\x26\x97\xa5\x37\x4c\x72\x11\x10\x1e\x66\x3f\x20\x7c\x4a\x1a\x91\xe0\xe2\x9d\x70\x27\x8b\x26\xa2\xa6\x51\x37\x7b\x79\xd1\x08\xb3\xe9\x6d\x95\x9a\xb7\xe7\x44\xd3\x7a\xc6\xb4\xe9\x8d\x88\xa6\xbc\x61\x75\x7f\x1a\xf3\xfd\x15\x56\x3b\x48\x1d\xd4\xce\x0e\xf4\x94\x2f\x25\x1f\xdc\x57\x10\xee\x01\xdc\xc0\x54\xc6\xd1\x61\xf4\xd1\x73\xc5\x57\xb1\xf4\x9e\xc1\xd5\xdf\x5a\x52\xd2\x88\x18\xea\x9c\x52\x1f\x15\xcf\xf2\xef\x7f\x7f\x9f\x5a\x9c\xee\xb8\xfd\xf2\x3e\x00\xb9\x93\x75\x91\xdf\xf1\xdc\xba\x63\x92\x13\xf3\xf2\x69\x2c\xb0\xec\xb8\x56\xdd\xf6\xa9\x74\x53\x75\x53\x77\x77\x3c\xdf\x4b\x9d\x59\xe8\xb8\xbb\xd3\x4e\x74\x32\x3b\x4d\x60\xab\x79\xce\x84\x36\xa8\xa3\x56\xe4\x04\xbe\x88\xc9\xf5\x70\xc1\x31\x23\x1f\x8c\x00\xd5\x70\xca\x1b\x2e\xda\xa4\x92\xed\x59\x1b\x72\x63\x6e\xbe\xd3\xb6\x2a\xa6\x31\xaf\x17\x44\xf4\x4b\x3d\x27\x8a\x97\x4d\xa1\xa9\x60\xb2\x51\xf1\x25\xe8\x3f\xcb\xe3\x9e\x16\xec\x13\xde\xcd\x5d\x26\x4e\x6e\x7b\xed\x72\x0b\x10\x4f\xd4\x66\xa3\x5d\x65\x17\x7a\x7a\x6d\xc3\x34\xf3\x17\x9e\xb1\xf0\x59\xf5\xd8\x27\x96\xd9\x7c\x1a\x55\xd1\xcc\x78\xaf\x44\xf5\xc6\xcc\xcc\xc8\xa4\xf9\x6b\xf2\xb6\x9d\x30\x44\xef\xba\x5f\xb0\x44\x31\xd8\xed\xed\x40\xe4\xfc\xfa\xf2\x8d\x4d\x7f\x2a\x94\x66\x74\x57\x3c\x4a\xac\xa9\x73\x6c\xd5\x11\x3b\x62\x78\xb0\xb3\xc4\xcb\xde\xe6\x7f\x5d\xd5\x9e\xd9\x5f\x6c\xad\x03\x9f\x37\x3f\x36\xe1\x67\x02\xd0\x0f\x9c\x1a\xb6\x07\x38\xb5\x30\x75\x7e\x30\x81\x9c\x55\x4c\xe4\x50\x8c\x2f\x80\x7b\xdc\xa5\x9d\x1e\x91\x2d\x1c\x97\x4a\x97\x5d\xbd\xb9\x0e\x51\x0e\xf4\x2e\x73\x59\xe4\x8a\xb0\x4f\xba\xa6\x06\xcd\x97\x06\xa1\xfb\x6f\xa6\x84\x8a\x65\x44\xd5\xcf\xe7\x54\x20\x9c\x3c\x09\x17\x98\xff\x9c\xb8\x40\xc5\xb2\x9a\xe9\xa8\xc0\xe2\x2d\xca\x86\xb8\xce\xbb\x1b\xd8\x79\xbc\x26\xca\xe3\xaf\x2e\x3c\xa6\xad\x0d\x1c\x35\x9e\x50\x1c\x8a\xf0\xad\x54\x1c\xae\xa8\x52\x5e\x3a\x06\x22\x67\xaf\xad\xea\x64\x9a\x88\x18\x02\x35\xb5\x7c\x4a\x84\x5c\x99\x69\x18\x08\xe4\xf5\xa8\x9d\x57\x22\xba\xf7\x16\xb3\x12\x0b\x11\x50\x01\x21\xf5\xd8\xcd\x08\xe2\x8c\xf1\xdf\x68\x34\x33\xeb\x0a\xe4\x7e\x58\x59\xcc\x3e\xd9\xb5\xef\xf6\xb2\xa7\xb9\xf2\xc4\x47\xbf\x6d\xa7\x87\x7b\x1f\x10\x57\x17\x50\x15\xab\x02\xea\xe6\x88\x65\x50\xb9\x93\x2f\x18\x64\xa0\x75\x09\x59\x0d\xe3\x9b\x37\x18\xb4\xe4\xd2\x42\x74\x93\x3d\xc4\x07\x77\x07\x21\x37\xad\x17\xc3\xa5\x50\x9a\x42\x5e\x00\x58\x85\xa1\xaa\x86\x00\xda\x5c\xbf\x16\x10\x51\x5b\xee\xb2\x0b\x44\x0f\x57\x1a\xa2\x99\xb1\xda\xc0\x5a\xb1\x24\x77\xb5\x8c\x77\xaa\x4c\xd4\xfb\xca\x05\xab\x17\x9c\xdd\xbd\xb0\xd1\x70\x63\xb3\x80\xb1\x0d\x28\x7f\x01\xe2\xe1\x8b\x5f\xc2\xff\xa2\xc6\x4f\xd6\x43\x5a\x6c\xfd\x9a\x1c\xf5\x97\xe4\xdb\xd6\x3c\x3b\x85\x04\xd2\x3b\xad\x7a\x66\xbb\x5c\x51\x1a\xda\x87\x56\x0c\x88\x51\x12\x5a\xfc\x16\xb0\x2e\xe6\x42\xb8\x8e\x6c\xfa\x3e\xa2\xcc\x19\xb5\x61\x92\x8d\x10\x11\x5e\xb6\x5d\x39\x00\x3b\xec\x08\x01\xde\x29\x80\x8b\xb1\xae\x19\xf3\x8b\xd2\x96\x4d\x14\xd2\x95\x6e\x88\x2c\xc8\xb9\x07\xc5\x65\x4e\x35\x55\x4c\xc7\xa9\xa9\xd3\x51\x51\xd0\xbd\x59\x71\x88\x95\xec\x4f\x60\x69\x64\x90\xcf\xc6\x65\x41\x26\xe3\xbf\x58\xe1\x40\x74\xde\x34\x62\x81\xdd\xe9\x18\x2c\x3f\x77\xe5\xab\x9c\x0f\x35\x8e\xd2\x1e\xd0\x2e\x79\x56\x3b\xc7\x6f\xbe\xb9\x7c\x93\x2a\x14\xb5\x5f\x3a\xd9\x01\xfe\xdd\xdd\x26\x0b\xc8\x50\xa7\x8a\xff\xd8\x84\xea\x0e\xa8\xe3\xe1\x41\xd0\xbe\xbf\xab\xb5\xcd\x32\xd6\x1a\x17\xde\x70\x75\xbb\xcb\x5b\xbe\xd6\x79\xf7\xbe\xff\xed\xfc\x82\xd8\xa7\x0f\xd9\x07\x7a\x06\xd9\xb5\xf5\xa0\x7b\xf3\xff\x76\x7e\xb1\xb2\x84\x15\x45\xc0\x59\x51\x38\xf9\xcc\x08\x1a\x2e\x5d\x82\xc5\x09\xc9\x1b\x04\xb8\xc3\xf0\x3e\x35\xc3\x1a\x83\xc1\xcc\xf3\x49\xa6\xb8\x4f\xa9\x3a\xbb\x65\x13\x2e\x03\x47\x84\x3d\xd7\x80\x9c\x65\xac\x75\x3f\xc9\xb9\xba\x3d\xb4\x7e\xa3\xca\xdf\xf7\x25\xde\x78\x5e\x06\x9d\x55\xe1\xde\x95\x07\x0a\xea\x84\x2d\x65\x43\xee\x6c\x45\x84\x68\xf5\xc1\x47\x5e\xbd\x26\x17\x42\x35\x35\x6b\x7d\xb9\x57\x07\x33\xfc\xfa\x0e\x95\x09\x50\x60\x43\xbd\x3e\x98\xf1\xe7\xc0\xe0\x4a\xd2\xa8\x41\x45\x6b\x0d\x92\xff\x3e\x00\xc8\x77\xee\xc8\x45\xf0\x40\xec\x06\x82\x2e\xa7\x2e\x02\x71\x64\x73\x8a\xfb\x42\x8a\xae\x9b\xd6\x63\x04\x68\x75\x1a\x94\xbc\xf5\xe5\xac\xc8\x8b\x9c\x2d\x5e\xa8\x9c\xbe\x1a\xc1\x54\x5d\xcc\x7d\x77\x5d\x54\x91\xa3\x57\x47\x31\x63\x5c\xf3\x92\x17\xb4\x2e\x30\xa3\x9d\x4f\xf4\xe7\x7b\x32\xf8\xd7\x0d\x09\xee\x9b\x2f\x8f\xc8\x89\xac\x61\xec\x8c\x0a\x52\x30\x97\xfd\xce\xe2\x8a\x25\x8a\x1a\xa7\xcf\x18\x24\xf7\x61\x5d\x44\x64\xba\x17\xf0\xcd\x1d\x37\x68\x39\x99\x4e\x61\xa3\x37\x2d\xb1\xe7\xc2\x50\xd7\x09\xf9\xc6\x52\x67\xcb\xf1\x20\x6c\xe4\x40\x6a\xf1\x8d\xe7\x7b\x32\xcf\x47\x85\xb7\xa2\x8c\xdb\x91\xaa\x8d\xac\xdb\x84\x9f\xf1\x69\xf4\xab\x04\x67\x5c\x7f\x60\x95\xdc\x29\x8f\x8b\x5d\xae\x18\xb4\xb8\x36\x0f\xa4\xe2\x50\xb9\x9b\x6a\x42\x11\x47\x65\x4d\x41\x8d\xd4\x8b\x06\xab\x24\x46\xd4\x8e\xb3\xc2\x7e\x7e\x0c\x6b\xa8\x05\x91\xe4\x56\x91\xe2\x67\x32\xb2\x58\xbd\x57\x63\xea\xab\x03\x43\xe1\x10\xf0\x8d\xe4\xfa\xdc\x77\x8b\x01\x86\x85\x14\x36\x04\xd0\xf4\x6d\x6d\x60\x33\xae\x6d\x5a\x74\x1c\xca\xfc\xec\x7a\xeb\x19\xb4\x2d\x52\x02\x55\xcd\xfd\x2a\x0e\x6e\x43\x6b\x0f\x6d\x57\xf2\xb7\x2b\x14\xbe\x17\xe9\xdb\xd7\x86\x77\x89\xbf\xd0\x3f\xa1\x7d\x1e\x4b\xba\xdf\xb9\xfa\x4b\xae\x82\x10\xfa\xc0\xd6\x1a\xe1\xe8\x78\x32\x39\x9e\x00\xdb\x70\x3c\x39\x76\xac\x65\xe1\x9d\xa1\x2d\x15\x6e\x87\x4d\x2b\xb3\xd7\xbd\x2d\x13\x42\xbe\x76\xf9\x09\x20\xe9\xf2\x8a\xe7\xb5\x77\xaa\x6e\x6b\x47\x63\xba\xba\xee\x9d\x8b\xd2\x14\x83\x0e\xbb\xb9\x09\x27\x6e\x5d\xb5\x67\x7c\x61\xf3\xb1\xee\xd4\xf4\xd5\x4e\x30\x11\x1e\xc2\x95\x59\x25\xc2\x87\xaf\x76\x3b\x33\x44\x22\xc9\xf3\xb2\xb8\xc7\xce\x2a\x93\x65\x89\xe5\xc0\xe6\x5e\x16\x6e\xf3\xf9\xc5\x22\xbe\x78\xf5\x05\x96\x46\x9b\xf6\xdc\xc3\x44\x94\xee\x3a\x5d\x51\x57\xf8\xc7\x36\x3f\x88\x68\x85\x2a\x40\x8b\x6a\x4e\x6b\xa6\xb0\x84\xb9\x2d\xd8\xdc\x5f\xe7\x73\x05\xcb\xfb\x31\x1e\x56\x35\xb6\x53\xdc\xbf\xb2\x31\x1e\x7b\x32\x91\x57\x92\xf7\x27\xcf\x1a\x93\x8a\xea\x87\x53\x5b\xc7\x63\x58\x3f\x68\x22\xe4\xfa\xef\x1c\xe8\xba\x07\x41\xf5\x47\x9b\x35\x2e\x38\x16\x2d\x2b\x59\xc8\x59\xb4\xf7\x4f\xa4\x38\xa9\xe7\xfb\x91\x24\xf5\xdc\xad\xae\x5d\x82\x97\x99\x74\x54\x84\xe7\x06\x66\xce\xd6\xdb\x54\x2e\xf5\x9f\x65\xdc\x5e\x78\xa8\x7c\xf1\xe1\xe2\xec\xcd\xbb\x8b\x49\x99\xff\x12\xe3\x40\xc6\x74\x1c\x53\x35\xf3\x73\xe0\xaa\xd7\x36\x12\xf5\x1c\x80\x13\x5c\xb1\xca\xb6\xee\x62\xc5\xea\x92\x63\x8c\xe2\x21\xd9\xed\x3d\x9f\x50\x3f\xa7\x6d\xb0\xe2\x55\x2f\x58\xa7\x1d\x8d\xeb\xb3\x8b\x96\xab\x9a\x8d\x7d\x61\xa8\x29\x2f\x20\x08\xab\xa5\xe8\x01\x96\xee\xe9\xde\x69\x8e\x9d\x12\x1a\xfb\x28\x96\xab\x1a\xe4\x96\x3b\xf5\x3a\x7b\x4c\x88\xdd\x5f\x48\xd4\x57\x81\xb5\x9a\x3a\x3a\xc3\xc2\x4e\xb5\xcd\x47\x5b\xd5\x7c\xc1\x0b\x36\x83\x92\xd8\x5c\xcc\x54\x9b\x5b\xd0\x1a\x51\x7b\x06\x80\x38\x38\xd6\xd2\x25\x6f\x26\x7b\x07\x26\x51\x9f\x2e\x09\x81\xfa\xfd\xd7\x1f\xa1\x58\x3d\xd8\x5f\xf7\xac\x3e\x36\xd3\xe9\xc5\xfa\xfb\xd0\x1a\xef\x8e\xd2\xec\x15\x4d\x3b\x73\xd0\x26\xc0\x8d\x54\xe9\xa1\x4e\x0d\x51\x3e\x25\x6a\x59\x16\x5c\xdc\x8e\x7c\xa1\xb1\xa9\xb4\x29\x56\x19\x31\x3f\x38\x70\xae\x19\x2d\x1e\x43\x0c\x76\x0e\x04\x24\x8d\x10\xe8\x3d\xe9\xf1\x81\xb1\x32\x77\xf5\xdf\x1c\xda\x41\xdd\x49\x22\x16\x8f\xb0\xcb\x3f\xbb\x6d\xe5\x25\x9d\xed\xd4\xf1\x17\x3a\xec\xa0\x6d\x41\xbe\x3e\xbf\xf4\xf5\x02\x43\xc5\x05\xbe\x2b\x6b\x42\x6b\xcd\xa7\x34\xd3\xa7\xa4\x6a\xa0\xaa\x0b\xd4\xa8\xb0\x64\xd6\xde\x8e\x7b\xbc\x02\x7a\xa6\xf3\xb1\x15\x23\xc1\x45\x4b\xc9\x62\x61\xfa\xd7\x50\x1c\x1a\xe4\xde\xa6\xb2\x4e\x05\x10\xb2\xea\xaa\xcc\x5f\x35\x45\x71\x25\x0b\x9e\x2d\x7d\x81\x03\x54\xbf\xe4\x06\x15\xf5\xe2\xa2\xb3\xe2\x8e\x2e\xd5\xeb\x70\xe6\x84\xc2\x33\x42\xb5\x66\x65\x85\x20\x63\x96\xbb\x9a\xe8\xb8\xd5\xc0\x60\xe1\x5d\x57\x60\x7d\x4a\x79\xe1\xef\x7e\x63\x1f\xf4\xe2\xf2\x31\x79\xcf\x16\xac\xee\xce\x44\x98\x47\xd0\x89\xea\x8e\x0e\x1b\x0f\xdc\x4c\xa3\x40\xbe\xc1\x9a\x0a\x6b\x07\xd5\x33\x4b\x3e\x5d\xe9\x16\xeb\x91\x58\x98\xe8\x9f\xf2\xe5\xf4\xbd\xd4\x57\xf8\x76\x77\xe6\x38\xe7\x7b\xfa\xa7\x85\xe1\xc6\x96\x6e\x1c\x73\x98\x39\x57\xb7\x8f\x9a\xac\x97\xc7\xc2\x2d\x8f\x07\x3a\xa8\xc0\x5b\x63\x22\x43\x80\x3c\x3b\x9a\x81\x3e\xf8\x2d\x37\xcb\xb2\x10\x5f\x33\x1b\x4a\x3d\xb2\x40\x58\x32\xea\x6a\x39\x0b\x76\x07\x95\xd9\x75\x5b\x29\xd8\xaa\x5e\x32\x59\x32\x42\x17\x94\x17\xf4\xa6\x00\x4f\x0b\xd3\xb9\xed\x2b\x42\x02\x3f\x83\x55\x81\x85\x51\xba\x1b\x62\xce\xda\xc3\x26\x9e\xbe\x4d\x3a\x13\x5e\x1b\x9c\x40\x21\xb3\xdb\x90\xdf\x80\xca\x56\xca\x95\xa8\x87\x9b\x4c\x97\x84\xe6\x39\x51\x7c\x26\x20\xdc\x59\x68\x52\x50\xcd\x44\xb6\x9c\x10\x9b\xca\x59\x05\x95\xa3\x75\xcd\xbd\x5f\xbf\x80\xba\xed\x6d\xb5\xcc\xec\x56\x4e\xa7\x2b\x95\xa6\xad\xe9\xd3\x22\x0a\x5c\x3d\x55\x52\xe0\xe0\x4c\x29\x3a\x8b\x42\x14\xab\xa5\x63\x70\xe7\x6d\xf2\x01\x87\x8e\x5c\x66\x01\xe7\xba\x54\xbb\xd0\xd8\x36\xf4\xd5\x43\x5b\xdd\x08\xcd\x4b\xb6\x92\x75\x93\x80\xfe\x76\xcd\x85\xc1\x0c\x65\xd3\x92\x42\x60\x8a\x0d\x74\x75\x25\x59\x78\x6e\xe7\xb7\x66\xeb\x5d\x45\xa8\xe0\xef\x17\xb3\xde\x00\x2f\x03\x2c\xba\x25\x42\x71\x67\x9b\xee\xa5\xe5\x52\x4e\x20\xce\xb6\x3d\xe8\xef\x7e\xfd\xfd\x64\x11\xda\x18\xe0\x73\x43\x3e\x4f\xcd\xcc\x4a\x56\xcf\x5c\xcd\x91\x92\x0a\x3e\x65\xca\x9c\xfa\xd2\x80\x88\xd5\xe3\x41\x51\xa2\x3b\x03\x1c\xe8\x4d\xb1\xb2\x90\x5e\xdc\xf6\x71\x45\x47\x18\x9c\x52\x2b\x96\x9d\xd4\xf2\xd4\xd6\xc4\x17\x63\xf6\x89\x65\x8d\x86\x7b\x02\x56\x74\x72\x22\xa4\x79\xd6\x6b\x13\xbc\x6e\x6e\x90\xe1\x82\x01\x56\xa6\xeb\x2a\x70\xe9\xe0\x6c\x7a\x77\x4b\x35\x37\x15\xee\x15\x9b\x1a\x9e\xe0\xd5\xe4\x77\xbf\x8b\x59\x30\x7a\x73\x42\xef\x8a\x65\x4d\xcd\xf5\xd2\xa0\x37\xf6\x49\x4f\xa6\x0a\xea\x59\x9c\x43\xaa\x06\x4b\xbc\xe6\x14\x14\x46\xe8\xfa\x89\x57\xa4\x05\x5e\x03\x50\x07\xf7\x53\xab\x3c\x65\xdd\x07\x2f\x67\x97\x3d\xb5\x08\xcc\x40\x60\x0b\xe6\x6a\x42\xae\xa4\xc2\xec\x0f\x3e\xbf\x4f\x94\xf3\xee\xb3\xa1\xe7\xa6\x7d\x76\x14\x9d\x80\xd4\xf2\xbc\x69\x7a\xff\x0a\x42\x5e\x1f\xe1\xc1\x8c\xf3\x1a\x92\x64\x6a\xa2\xe9\x6c\xa5\x84\x86\xac\x3b\x8b\x6e\x73\x31\xef\xd8\xce\x60\xd7\xb8\x8f\xdb\xf4\xc1\x09\xdf\xe4\x72\x15\x60\xba\xf1\x0e\x36\x3b\x4f\xcc\x36\x7e\xc1\xe6\x74\xc1\x36\x12\x81\x4a\xe6\x93\x0d\x78\x13\x80\x35\xa6\x6b\xc3\xb4\xfb\xb0\x02\x9f\x1e\x46\x29\x56\x42\x69\x88\x7b\xc8\xce\x26\x1a\x7a\xb3\x24\x85\x94\x90\x78\xa1\xa9\x88\x90\x39\x33\x60\x06\x6e\x0b\xb4\x50\x23\x72\x7d\x66\x5f\xac\x82\x21\x31\x79\x18\x70\x48\x15\xcb\x36\xbc\xb0\x07\xb9\x3b\xc8\x8b\x8d\x44\x33\xc6\xab\xac\x13\x15\x20\x6d\x38\x4b\x5b\x9a\xc5\x16\xac\x28\xd8\x82\x81\xe1\x6d\xca\x67\x04\x13\x72\x97\x36\x45\x9b\xf3\x22\x92\x35\xa4\x39\xae\x79\x1e\x23\x2c\xaf\xd2\x77\x73\x20\x77\xb2\xbe\x2d\x24\xcd\x83\x02\xec\x8a\x14\xfc\x96\x91\x37\xac\x2a\xe4\xd2\xe6\x55\x13\x39\xb9\xd6\x54\xb3\x69\x53\x5c\x47\x6d\x64\xac\xfc\xab\x32\xc5\x77\x2a\xff\x9a\x0e\x57\xe4\xdf\xcb\xeb\xf3\xeb\xcb\x67\xe9\xff\xfa\x38\x6d\xc4\x8b\x5f\xc2\x6a\x0f\xad\xe7\xe3\x3f\xf6\x19\x7c\xc7\xa4\x68\xfa\xdf\x41\x13\xfa\x95\xac\x35\x2d\x76\xc4\xdb\x64\x73\x5a\x9d\x35\x7a\xfe\x86\x2b\x28\x5b\x93\xca\xe2\xac\x7d\x1f\xa4\xdd\x61\xa0\x37\xb6\x1c\x26\xe1\x0e\xa6\xec\x7b\xe7\xff\x76\x76\x45\x68\x63\xe0\x40\xdb\x84\x52\x3b\xd3\xf0\x87\x2b\xbb\xc6\x34\x8c\x5b\xae\xcb\x7e\xdd\xb3\x2a\xf7\xd6\xbe\xd7\xf4\x54\x01\xc4\x83\x77\xf0\x01\xbd\x83\xfb\x51\x14\x49\x63\xb8\xb8\xe0\x9a\x53\x2d\xeb\x7d\xb9\x55\x76\x06\xf0\xde\x16\x8d\xd2\xb2\xb4\x17\xe4\xd2\xbd\x01\x61\x38\x91\x36\x83\xb5\x6e\x5b\x67\x0d\xb0\x64\xc2\x46\x5d\x0a\xcd\xea\x29\xcd\xd8\x4a\x0a\x8c\x11\x28\xa0\x70\x74\xee\xde\x89\x18\xf7\xcf\xd6\x4f\x09\xaa\x04\x17\x7f\x79\xfd\xe7\xc0\xd1\xf8\x2f\x9e\x45\xb3\x6a\xaf\x90\x1b\x13\x2c\x8b\x4b\x8a\x97\x72\x72\x3f\xa6\xe2\x2d\xfe\xa3\x58\x71\xb8\xc2\x2d\xf8\x7f\x0d\x2d\x70\xeb\xe2\x0e\x20\x65\x92\x9d\x63\xd8\x0b\x7c\x75\x0f\xda\xae\xcf\x9f\x2a\x86\x76\x01\x3e\x41\x91\x51\xd8\x45\xeb\x9a\x0a\x65\x0e\x32\x55\x58\x3a\xb6\xec\xe2\x31\x39\xd1\x59\x15\xe1\x7f\x9d\x14\x1b\xe9\xe3\x22\xed\x3f\x7a\x3e\x48\x4f\x20\x55\x34\x22\x64\xe8\x70\x33\x3e\x22\x38\x7c\xe5\x13\x48\xc5\xae\x6a\x2f\x2e\xde\x70\xbb\xf6\x92\xb0\xc7\x76\xed\xa1\x24\x5c\x3c\xb2\x4e\xe4\x2b\xae\x34\xa6\x9a\xc0\x97\x21\xd4\x18\x93\xf1\x18\xe6\xf7\xca\x48\x09\xbc\xfa\x2f\x9a\xe7\xf5\x6b\xa4\xf2\x4e\x07\x5e\xc7\x44\x92\x1b\x11\x45\xfb\x02\x7a\x4e\xf2\x38\xd1\xcb\xca\x56\x6b\xff\x78\x7e\x05\x7d\x29\xf2\xa7\x3f\xbc\x04\x6e\xf8\x77\xbf\xfd\xc3\xcb\x68\x30\xfb\x2c\xb3\xf6\x90\xff\x85\xde\xe6\x87\xc8\x06\xd1\xc9\xe8\x00\xd9\x7f\x0d\x0f\x7a\x8d\xc9\x0f\x0c\x79\xb2\xa8\x10\x2f\x80\x81\x35\x4f\x56\xb7\xe3\x54\x87\x94\x04\x43\x4a\x82\xb6\x0d\x29\x09\x36\x4f\x2c\x90\xd4\xf7\xe2\x00\x12\xf4\x0f\x49\x67\xd7\xa9\x1c\x12\xb8\xab\xcf\x91\xc0\xf5\x1e\x68\x3f\xba\x48\xdb\xd2\x30\x0c\x2c\x2e\xef\x57\x9b\x26\xeb\xcd\xfb\xeb\xff\xfa\xea\xec\x8b\x8b\xaf\x60\x9d\x36\xae\xcc\x80\x35\x17\x7b\x52\x6a\xed\xe8\x12\xc5\xee\xf5\x6e\x1d\xd8\xc5\x8a\xeb\xba\x20\xef\xdf\x5e\x27\x7a\xad\xef\x55\x47\xf8\x4b\x31\x8d\xd9\xb7\xc3\x3a\x02\x9a\x97\x14\xab\x77\x97\x43\x6f\xaf\xfe\x82\x41\x3d\xd0\x8e\x16\xc7\x9c\x34\xae\xe2\x00\x6a\x94\xbe\x63\x24\x9f\x89\x4f\xb7\xd9\x34\xdc\xc8\x67\xe9\xcd\xbd\x9f\x23\x89\xe5\x99\xeb\xf4\x44\x90\x91\xe9\xd3\xea\x20\x5b\xa4\x41\x48\x48\x22\x6a\x43\x3c\x0d\xd9\x64\x4a\x39\x82\xf1\xb9\x42\x75\xb5\xa9\x90\xc2\x2e\x51\xfd\xc6\x01\x6c\x11\x05\x57\x05\x22\x70\x96\xef\x98\x67\xfb\x2c\x4b\x9b\xab\x40\x84\xf6\x52\x20\x80\x15\xcd\xfa\x49\xf9\xce\xea\xdd\xb4\x8f\xf0\x09\x24\xbf\x3f\x38\x31\x81\x51\x77\x98\x8e\xc4\xf7\xb7\x8f\x8b\xe6\x3b\x5f\xcd\xcc\x4a\x53\x8e\x98\x50\xe5\x3d\xe9\xd0\x0b\x2f\x29\x85\xeb\x13\xc3\x00\x79\x86\x94\xe8\xef\x7b\x53\xa0\xec\x5a\x79\x52\xcd\xa5\x96\x62\x7f\x89\xa2\x36\xf5\xdf\x45\x5c\x57\xf0\xc6\xb9\x77\x07\x08\x10\x1f\xe6\x8a\xf0\x26\xf3\x15\x2f\x71\x6b\x1e\x4f\x73\x10\x0f\x43\x32\xaf\x36\xcd\xed\xe1\xe8\xcc\x8d\xcb\x79\x4e\x81\x9a\x55\x7e\xf9\x66\x47\x98\x6b\xc8\xb7\x8c\xed\x99\x56\xc6\x30\x27\x9d\x78\x38\xe6\x13\xb7\xeb\x97\x6f\xac\xa0\xe1\xb2\xd1\x29\x7b\x1f\xc8\xfd\x57\x71\x67\xbc\x93\xac\xf5\x9d\xac\xf7\x90\x87\xbe\xdb\xf3\x4a\x38\xa1\xfd\x6d\x2d\x0b\xe5\xce\xf1\x4a\x77\x12\x49\x69\xe5\x56\x57\x60\x76\xb4\x67\xe8\x7b\x72\xca\x7d\xca\x27\xae\xaf\x49\x26\xcb\x4e\x5d\xbb\x39\x43\x3e\xe0\xfc\xfa\xf2\x1d\x9f\xe1\x54\xdc\xac\xc9\x94\x51\xdd\xd4\x6c\x3c\xa3\xba\x6f\x68\xae\x48\x9f\xcd\x76\x0f\x38\x0e\xcf\xef\x73\xc0\x73\xd7\x80\xe7\x02\x28\x7c\x08\xdf\x3d\x57\x74\xf7\xb4\x68\xee\x20\xfc\xda\xcf\x2a\x33\xba\xbb\x1e\x89\x3b\xe6\x3e\xb3\x4a\x58\x73\xd6\x2d\x69\xa0\x1e\xa9\xd9\xf7\x76\x46\x0a\x6a\xf9\x0f\xc0\x5b\x09\x54\xc0\x7f\x83\x56\x5a\x40\xa1\xb4\x28\xcc\xae\x4a\xd1\x16\x19\x51\xad\x9f\x2e\x3a\xb5\x96\xb4\xb2\x3e\xbb\xb9\xbc\x13\x77\xb4\xce\xc9\xd9\xd5\xe5\x6e\xb0\x57\x42\xde\x20\x84\xb5\xb8\x92\x7e\x5b\x64\x0e\x6a\xbb\x07\xca\xa0\xb1\x00\x23\x23\x37\x5c\xab\x4e\x49\xd5\x40\xe5\x65\xc8\x9e\x77\xca\x81\x40\x99\x1b\x7f\x29\x92\xd8\x30\x41\x64\xa6\xa9\xab\x01\x7a\xc3\xf4\x1d\x63\x82\xbc\x7c\xf9\x12\xed\x18\x2f\xff\xf8\xc7\x3f\x82\x53\x39\xc9\x59\xc6\xcb\xf5\x17\xe1\xad\x7f\x79\xf5\x2a\x66\xd0\x7f\x3f\x7b\xf7\x15\xa1\x19\xc8\x94\x58\xc6\x07\xc7\x86\x03\x0e\xbb\x57\x23\xf2\x7f\xaf\xbf\x7e\xef\x28\x8c\x5a\xf9\x15\xe0\xc7\x6f\x51\x94\x2c\x66\x83\xa4\x38\x84\xb1\xb5\xb6\x0a\xaa\xe7\x3e\x34\x88\x82\xa5\x33\x08\x20\xb3\x77\x3f\xca\xd1\x0f\x32\xfb\xf3\xd9\x1c\x36\x95\x0b\x80\xdf\x82\x67\x36\x67\x13\x5a\x8f\x5c\x01\x0c\xcc\x23\x80\xf1\x3e\x8e\xbc\x44\x8c\x61\x16\x3c\x42\xcf\x6b\x1b\x47\xd4\xd6\xc2\xae\x99\x32\xa2\xa6\x2d\x77\x8a\xc3\xb5\x30\xa4\x58\x74\xd1\x90\x7d\x38\xbf\xd8\xcb\xbd\x17\xbd\xa5\xc5\x1b\x96\x45\x2e\xb8\xd2\x41\xd5\x4b\x8b\x76\x40\x45\x4c\x2e\x68\x36\x27\x4c\x68\xc8\x47\x85\x07\x6c\x5e\x8f\x18\x64\x4e\x45\x6e\x6e\x18\x94\x47\x80\x01\x9f\xc8\x73\x65\x1b\x5f\x80\x2b\xbf\x07\x9d\x60\xc9\x16\x23\x53\x23\x01\x87\x60\xda\x32\x26\x41\x10\x5a\x64\xbd\xd6\x8b\x4f\x14\xd2\x74\x98\xad\x42\x75\xb1\xb2\x01\x71\x2a\x2c\xe6\x15\xd3\x59\x62\xc9\xf5\x34\xff\x0b\x42\x32\xcc\xbe\xf2\xb1\x6e\x94\xfe\xa2\x31\x07\x1c\x5b\x3a\x74\xdb\x62\xad\xe7\x6b\x23\xa2\xeb\x83\xb5\xf7\x81\x16\x38\xcb\x98\x42\x50\xfe\x01\xe3\x6c\x74\xfb\xf6\x0f\xb8\x91\xd1\xe3\xc9\xe9\xa6\x21\x5d\xe4\x2c\x17\x06\xf7\xd3\x46\xcb\x31\x54\xc9\x76\x19\x5b\x7a\x63\xa7\xdb\x76\x56\x54\x73\x3a\x22\x33\x1a\x30\xb1\xeb\x23\x06\x00\x68\xe5\x14\xf8\x22\x61\x9c\x07\x56\x61\x10\x9e\x35\xf4\x03\x64\xb5\x65\x8c\x05\x2d\x19\x44\x78\xe1\xc4\xa2\x07\x5b\x29\x4a\xa7\xf8\x4c\xb0\x1a\xb5\xb4\x10\x03\x4c\x0a\x7a\xc3\x0a\x3b\x94\xac\x13\x96\xf1\xa5\x8b\xa6\x63\xb5\xc1\x9e\x8a\xd0\xd9\xac\x66\x4a\xf1\x05\xb3\x41\xd4\xfc\x9f\x6d\x31\xbc\x39\x23\x57\x17\xef\x5c\x28\xb9\x22\x86\xb1\xd5\x2c\x26\x91\x1e\x36\x9f\xc6\xd1\x80\x56\x2b\x7b\x4c\x08\xb9\x50\x52\x43\x89\x37\xd3\xbf\x3d\x12\xe5\x4b\x3a\x83\x97\xe9\x18\x62\xc6\x53\xf6\xac\x8d\x02\xc2\x70\xf3\x39\xa3\xb9\x8b\xbb\x35\x2c\x65\x55\x19\x49\x9a\x9c\x9b\x2b\x3a\xb5\x65\xc6\x31\x32\x3b\x6f\x8c\xa8\x42\x7b\x55\x6f\x61\xfb\x38\x67\x44\xd6\x39\xc3\x22\xe6\x53\x70\xe6\xf1\xdd\x06\xf4\x1d\x52\x10\x71\x33\xd2\x0d\xd7\x35\xad\x97\x48\x31\xed\x49\x44\x0f\x67\x70\x26\x96\x57\x87\x5e\x61\x64\x08\xab\x22\x31\x39\xe5\x5c\x4b\x44\x68\x24\x41\xc2\x6e\x5b\x94\x6d\xdd\xb5\x54\x9c\x69\x1a\x80\xff\xb5\x85\xfe\xf8\xcf\x1e\x53\xe3\x9a\x10\x1c\x0f\x44\x86\x75\x64\xe0\xb3\x00\xe8\x6c\x6e\xe9\x7a\xf7\x8a\x12\x82\x92\x20\x8d\xf5\x48\xc3\x66\x23\xb2\xb9\x43\x02\xde\x2b\x9f\xe9\x89\x61\xa0\x75\x43\x8b\x62\x39\x66\x9f\x0c\x29\x31\x97\x18\x68\x28\xa4\xa9\x04\x77\xfe\x46\x28\xa6\x53\xea\xd6\x13\xbc\x7c\x55\x8d\xf9\x26\x14\x39\xc2\x35\x09\x09\x09\xa8\x8e\xb0\x5b\x23\x08\xdc\x34\x1a\x5d\xe0\x46\x9b\x3f\x49\x5b\xe7\x82\xd5\x4b\x3b\x42\xc2\x87\x5b\x80\x33\xd9\x12\xe6\x08\xdc\x41\x9d\xcd\x2f\x3e\x55\x35\x86\x1e\x25\x7e\xbd\x02\x7e\xab\x9d\x61\x96\x26\xc7\x3d\x76\xc1\xc7\x5d\x42\xc0\x70\xe8\x64\x16\x3e\x01\x2c\x76\xf6\xfe\x4d\x0a\xfa\xc2\x96\xc2\x22\x76\x5b\x34\xc3\xd8\x6d\x8f\xb9\x81\xd8\xce\x1e\xd8\x1b\x9b\xe9\xca\xfd\x82\xc9\x89\x5d\x8d\x31\x27\xd5\x51\x72\xcb\x2c\x12\x36\x92\x27\x28\xbb\xec\xcb\x5b\x4c\xa7\x66\x10\xda\x8d\xb1\xea\x6c\x09\xdd\xe2\x48\xa9\x67\xb1\x35\x38\xbb\x89\xa4\xe2\xe9\xb6\x8d\xcd\xd4\xb7\xfa\xce\x6d\x5f\xf2\xc7\xdb\xde\x41\x6c\xb7\x2c\x42\xb5\xb7\xa9\x75\xe0\xcf\x9c\x97\x93\xda\x00\xa6\xcc\x03\x1f\x23\xe7\xc1\x88\x42\x6e\x63\x45\xb4\x4c\x3f\x52\xb2\x8d\xc7\x6c\xb7\xb9\x2d\xde\xc1\x82\xb7\xba\x70\xe1\x1c\xba\xb6\x91\x5b\xb6\x3c\x56\x78\x03\x0c\x06\x9b\xf3\x0a\x6b\x73\x19\xf2\x60\x24\xe0\x2d\xaf\x01\xb6\x6f\x21\x9b\x8d\x1b\x18\x71\xdc\xa5\x18\x91\xf7\x52\x9b\xff\x5d\x7c\xe2\xca\x72\x7b\x6f\x24\x53\xef\xa5\x86\x27\x4f\x72\x42\xb8\xd0\xa7\x3c\x1f\xab\x93\xe2\xe0\xdc\x09\xe8\x1c\x04\x07\x58\x90\x3b\x07\x97\x46\xc4\x9f\x25\x57\xe4\x12\x32\x7b\xe3\x96\x6e\x39\x34\xf8\xef\xba\x34\x29\x66\x60\x27\x63\x43\x2a\x1d\xeb\x49\xbf\x3e\xb2\x3d\x3f\x59\x77\x8e\x6f\xe7\x93\xb0\x13\x00\xdd\x18\xfe\x02\x19\xde\xaa\x82\x66\x2c\x77\xe9\xaa\xa8\xd9\x29\xaa\xd9\xac\xd7\xc7\xfc\xbe\x56\xb2\x7a\x06\xaa\xbc\x2c\x2a\x6d\xe2\x86\x05\x6c\x4d\x88\xb1\x6d\x49\x8e\xc3\xc1\xb7\x06\xff\x47\x46\x28\xed\xb1\x33\xe0\xb1\xbe\x32\xa8\xfd\x71\xbc\xda\x16\xf7\x32\x18\x1a\xb9\x92\x92\x56\xe6\x4e\xfe\xb7\x61\x3e\x00\x54\xff\x87\x54\x94\xd7\x6a\x42\xce\x5c\x1a\xad\xf0\x37\x2b\x3d\x06\xdd\x6c\x31\x85\x0a\x3c\x82\x7f\x6c\xf8\x82\x16\x36\x29\x07\x15\x84\x61\x9a\x31\x33\x9b\x55\x26\x74\x44\xee\xe6\x52\x21\x27\xe3\xc3\x6f\x8e\x6e\xd9\xf2\x68\x94\xa4\xc1\x70\x2d\xbc\xf1\x47\x97\xe2\xa8\xd5\x16\x77\x6e\xab\xe7\xd1\xc0\xab\xf6\x08\x7e\x3b\xda\x3d\x9f\xbb\x15\x67\xb5\x6d\x51\xe7\x4d\x13\x48\xbe\x62\x8f\x89\x87\x69\x5b\x7c\xa4\x17\xb6\x5d\x88\xc9\x0e\xa6\x37\x28\xce\x6e\x96\x2e\xa1\x9c\x15\x54\xd7\xe5\xd8\xa4\x21\x41\xe6\x0d\xe4\x63\x03\x62\x1d\x15\x41\xba\x48\x99\x78\x50\x2e\x3b\xce\xa1\x36\xd9\xd0\xd3\xba\x61\x23\x92\x4b\x71\xac\xad\xba\x2b\x4c\xba\xb8\x9a\xda\x2a\xdf\x70\x0e\x27\xea\x34\x69\x50\x5a\x33\xc8\xb5\xe5\x92\x48\x5a\x0d\x03\x26\x60\x04\x4d\xa7\x76\x1e\x22\xe6\xcf\x4d\x43\xc6\x07\xe4\xd9\x21\x6d\x58\x9e\x90\x80\xbb\x20\xad\x77\x38\x6c\x7b\xe8\xc1\xe0\x5d\xed\x69\xd2\x78\x0f\x01\x11\x60\xf1\x36\x4c\x10\xd5\x22\xff\x64\xb5\x4c\x1a\x61\x83\xea\x28\x1d\x3a\xe3\x2c\xfa\x6d\x8b\x0b\x3c\x69\x5b\x07\x34\x3f\x00\x7b\xbf\xb0\x86\x4a\xc8\xdb\x19\xe4\x25\xa9\x25\x1e\x0d\xf8\x3c\xc0\x0f\x37\xb0\xaa\xbd\x5f\xb9\xf6\xa8\x9e\xa9\x02\x30\xd0\xda\xa7\x51\xab\x1e\xad\xde\xc7\x39\x6b\x35\xf2\x72\x6a\x8b\xa4\xa3\xd1\xe1\xb1\xa0\xe8\x73\x6d\x34\x02\x13\x57\xa0\x55\x7c\x1b\xf5\xf8\x16\xc7\x8a\xfe\x16\xef\x68\xb5\x95\x15\xcc\x7f\xdd\xa9\x86\x4f\x6f\x64\xa3\x5d\xba\x10\xfb\x3b\xd4\x1c\xd6\xd2\xd9\x1f\xf7\xa7\x3a\xdf\x46\xc7\x91\xcc\xc8\x3f\x06\xa4\xd1\x13\xa6\xeb\x87\x35\x22\x8c\x66\x73\xc3\x01\x8e\xd1\xcd\xc2\x70\xa9\x8e\x1d\x7d\x63\xb6\x0e\x19\x43\xb9\x4a\x62\xd2\x80\xcf\x9f\x86\x03\xb9\xc0\x3f\xc7\x99\x8d\x9c\xcb\xa5\xb2\xae\x6b\x96\x39\x15\x6d\xe8\x42\xd2\x98\x4e\x3d\xe7\x52\x23\x5b\xd5\x0f\xac\x12\x64\xd4\x95\xca\x52\x46\xf6\x60\xb9\xf9\xcc\x5f\x8c\xa4\xf1\x36\xac\xa8\xcd\xa6\x63\xb0\xa9\xf5\x2b\x6a\xc4\xda\x48\x86\xe0\x25\x8f\x86\x59\x36\xcd\x42\xa8\x53\x6d\x05\xd9\x7b\x20\x57\x34\xf8\x9b\xb7\x29\x2e\xed\xa9\xfa\xc3\x48\x13\xbf\x83\x23\x52\xcc\xa7\x7a\x66\x75\x2d\x6b\xb3\x26\xa6\x14\xe1\xb0\xcb\x25\xad\x6f\x59\xee\xb9\xa4\x09\xb9\x32\x8b\x77\x32\x7a\xd2\x98\xb5\xa3\x46\x2e\x65\x74\x58\xa4\xcc\x4c\xe8\x78\x32\x39\xb6\x15\x14\xd6\x4b\x96\x25\x63\xaf\x54\x81\x7c\x0b\x31\xbc\x73\x7f\xdf\xd1\x4a\xa1\x3a\xc2\xb0\x37\xa0\x8e\x94\x50\x2b\x50\xcf\x9d\x4d\x91\x26\x84\xd8\xac\x2e\x67\x0b\x01\x68\x5b\xb5\xf2\x36\x2a\xe5\x24\xc3\x21\xb6\xed\xd5\xc8\x5b\xa9\x90\xef\x53\x1f\xdb\x93\xb2\x37\x7e\x5b\xcd\xff\x56\x1a\x98\x32\xca\x25\x70\xb5\x3d\x5e\xed\x08\xae\x5d\x5c\x91\xaf\x9d\xec\x13\xe7\x30\xa8\xe7\xb6\x12\xf6\x36\x7a\xb2\x27\xf1\x18\x5c\x6d\x4f\xe7\x41\xb8\xda\x2e\xa7\x98\x4f\x7c\x63\x41\xc4\xd0\xa5\xd3\xb3\x75\x91\xd9\x77\x57\xdb\x21\x5c\x0b\x57\xdb\x9e\x5d\x0d\x57\x5b\x9a\xeb\xe1\x6a\x4b\x71\x45\x5c\x6d\xa9\xd2\x19\xb6\xc7\x5f\xe0\xb0\x1a\x5c\xdd\x11\xf2\x2c\x6b\x07\x2c\x17\x88\xba\x55\x80\xe4\xb6\xba\xb7\x96\x50\xe3\xd5\xa5\x37\x4a\x16\x8d\x8e\x2f\x39\x77\x5f\x77\x21\xdd\x87\x89\x3b\xcd\x66\x2a\xb1\x5f\xed\x38\xe0\x1b\x80\x6b\x43\x72\xbc\x5d\xaf\xbb\xd0\xfc\x6d\xaf\x05\x3f\xa4\xea\xef\x31\x09\x9f\xb0\x1d\x3a\xed\x13\xb6\x03\x27\x7f\x72\x83\x3e\x26\x05\x14\xb6\xa7\x4d\x04\x85\x6d\x4b\xf0\x4e\x49\x0a\xe5\xda\xa3\xb5\xac\x3e\x89\x39\x52\xcc\xa5\xcf\x2c\xdc\x11\x82\x20\x51\x93\x56\x28\x8d\x39\x3b\xa2\xad\xde\xb2\x67\x55\xdd\xe3\xd5\xfd\x2e\x46\xe5\xec\xea\x72\x2b\x2d\x4a\xf0\xfd\x3d\x7a\x94\xf0\x8d\x9f\xb1\x26\xe5\x12\x55\x23\xa1\x4f\xd6\x9b\x76\xe5\x36\xce\x32\x91\xb5\x79\x1a\x99\x72\x6d\xda\x6f\x0d\x5d\x0f\x73\x95\x06\xe7\xac\xa5\x0d\xe9\x69\x39\x00\x4b\x65\x5d\x99\x1e\xf4\xe5\x4d\x71\x02\x27\x4f\x23\x7f\x1e\x50\x96\x84\xfd\x88\xca\x23\xb9\xda\x3a\x27\x75\xdc\x56\xd2\x40\x65\x33\x2a\xbe\x02\x6d\x5b\x25\xf3\xd7\x68\x24\xa5\x42\x48\xac\x14\xa5\x46\x68\xa8\x50\x23\x6b\x86\x09\x52\x74\x88\x9c\x34\x3c\x47\x0f\x68\x9f\x5d\xe0\xf8\x73\x72\x4c\x83\xe5\x5f\xa5\x1e\x25\x79\xb4\x87\x19\xad\xf8\xb7\xac\x8e\xcb\x62\xbf\xa9\x75\x0e\xd6\xf6\xe4\x4e\x51\x65\x73\x56\x52\xf8\xe7\x5b\xb7\x3c\x83\x6a\xac\x7f\x3d\xa8\xe5\x58\x5d\x1a\xd6\x63\xd4\x89\x32\x3d\x5a\xbc\x4a\xf2\x8f\x6d\xdb\x23\x5d\x3c\xfc\x29\xec\x60\x33\xae\x3a\x22\x86\x01\x6e\xd0\x14\x80\x71\xc5\x65\x9a\xf1\x6a\x4b\x43\x65\x16\xb8\x7b\x4f\xb0\xf0\xdd\x98\xdf\xb1\x3d\x95\x9e\x66\x5b\xfd\xcc\xc8\xf3\x3e\x5d\x6d\xcb\x16\x53\x18\xf4\x33\x83\x7e\xe6\x7f\xb5\x7e\x26\x20\xec\x0e\xd7\x6f\x50\xbb\x84\x19\x51\x9d\xee\xa5\xad\x7b\x30\x41\xed\xa7\x53\xa3\x38\x1d\x4a\x5b\x62\x10\xcd\x1f\xc7\x93\xc9\x31\x1a\x40\x26\x5e\x5d\xda\xe8\xe9\xf8\x4f\x84\x89\x4c\xe6\xa6\x1f\x2c\x10\x58\x2b\x0d\xac\x65\x2b\xb1\x87\x73\x29\xdd\x58\xa1\x09\x05\xfa\xde\x96\x7b\xd8\x0a\x05\xbb\xa8\xfc\xb7\xbb\x61\xb0\xb6\x42\xa0\x2d\x2b\xe6\xeb\x32\xd9\x2d\xf3\xa5\xaa\x2c\x4f\xd6\xe6\x10\x28\x78\xc9\xad\x77\xb2\xc1\x2e\x4c\xe9\x74\xf7\x3d\x42\x4e\xb0\x9b\x49\x56\x35\x23\xdb\xe5\xa4\x64\xa5\xac\x97\x23\xdf\xad\xf9\xb1\x33\x8e\x7d\xe3\x14\x98\xbe\xac\xa9\x6b\x26\x74\xb1\x8c\x4d\x2e\xb5\xa9\x3d\x21\xf7\xe7\x76\xf4\xc0\xcc\x9f\x3f\xd8\x54\xff\x92\xb6\x75\xef\x7f\x5b\x87\x10\x14\x72\x7e\x57\x80\xc6\xd8\x34\x76\xa3\x56\x3f\x61\x9e\x32\xb1\x20\x0b\x5a\xab\xf4\xfb\x46\x1e\xcf\xef\xe5\x7c\xc1\xd5\x4e\x42\x0e\xae\x2d\xf1\x43\x3d\xb3\x6c\x74\xd5\x68\x8b\x8e\xdd\x35\x72\x15\xc9\xfc\xf5\x59\x61\x7a\x5f\xc5\xab\x88\xc2\x56\x51\xad\x59\x2d\x5e\x93\xff\x3c\xf9\x8f\xdf\xfc\x34\x3e\xfd\xeb\xc9\xc9\x77\x2f\xc7\xff\xfa\xfd\x6f\x4e\xfe\x63\x02\xff\xf8\xf5\xe9\x5f\x4f\x7f\x72\x7f\xfc\xe6\xf4\xf4\xe4\xe4\xbb\x2f\xdf\xfd\xed\xe3\xd5\xc5\xf7\xfc\xf4\xa7\xef\x44\x53\xde\xe2\x5f\x3f\x9d\x7c\xc7\x2e\xbe\x8f\xec\xe4\xf4\xf4\xaf\xbf\xda\x6a\xba\x54\x2c\xbf\xde\x02\xbf\x61\x1b\x3f\x92\x3e\x76\x7b\xd9\x95\x27\x38\x17\x7a\x2c\xeb\x31\x76\xf7\x1a\x5c\x16\xb7\xe8\xd4\x81\xc5\x2e\xee\x61\x4b\x87\xdb\x1a\x7b\x4e\xf8\x78\x82\x8b\xb6\x2b\xf9\x62\x07\xc6\x82\x4a\xe6\x41\x60\xf4\xbe\xf3\x10\xd8\x80\x7c\xe5\xe3\xff\x6b\x50\x66\x88\x59\x50\x40\xd3\x7a\x12\x92\x93\xaa\xe6\x0b\xaa\xdb\xf0\xba\x20\xd2\x3a\x7a\xc0\x6c\x4e\xb9\x38\x6d\x83\xbb\x2a\x99\x03\x7b\xda\x28\xe6\xb3\xf4\x1b\x12\xff\xf1\xab\x6b\x92\x15\x1c\xdc\xe3\x6b\x9f\x62\x38\x7a\x18\x17\x5f\x3f\x63\x82\xd5\x18\x60\x4e\x56\xa7\x0f\xf5\x92\xb8\x46\xc0\x13\x79\x6f\xda\xdd\x60\xd7\x3a\x67\xf4\x01\x09\xbe\x4b\xdd\x86\x3e\xb7\xe8\x75\x08\xe1\xc6\x36\x8d\xa8\xf5\x43\xa4\x55\x55\xcb\x05\x4b\xf3\x9a\xb2\x3c\x05\x96\x30\x51\x0a\x1c\xf6\xc3\xed\xc7\x6d\x1d\xf9\x65\x83\x17\x68\x27\x16\x32\xfe\x80\x56\x7b\x25\xf7\xe5\x0e\xf8\x68\x1f\xe6\x92\xa9\x80\x45\x6d\x84\xe6\x0f\x57\x68\xbc\x67\x38\x45\xe6\x74\x61\x64\x4f\x26\x70\x91\x48\x95\xc1\x0b\xae\x7b\x2b\x02\x8f\xae\xc8\x7c\x56\xae\x59\x5c\xc3\x05\x58\x16\x20\xab\x46\x3a\x50\x59\x29\x71\x66\xf6\xa6\x5e\x82\x3e\x56\x12\xb8\x38\x78\xd2\xe1\x16\x5a\x30\xc7\xc2\xf2\x22\x47\xef\xcd\xe8\x11\x6d\x22\x0d\x0b\x3a\x2e\xbb\x2f\xdb\x0c\x80\x93\x6b\x4d\x75\xa3\x26\x5f\x98\x99\x7d\x60\xd3\x9a\xa9\xf9\x59\x3c\xa3\x68\xa6\xa8\x34\x2d\xab\x2d\x76\xc4\xdc\x60\xf4\x3c\xf6\xf1\x06\xa8\xba\xf0\x4b\xf6\xe5\xef\x3d\x5a\xb1\x19\x41\x52\x34\x8a\xa0\xa5\x1a\x21\x42\xa8\xa8\xb9\xd7\x08\x91\x1b\xc6\xb9\x65\x4b\x90\xf0\xb6\x04\xfd\x73\x03\xf9\xd0\x01\x26\xac\x49\xd8\x93\x8f\x9d\x55\x3a\xe4\x89\x01\xd1\xed\xd6\x18\x10\x84\x9c\x1b\xc0\x81\x4d\x48\x20\x0c\x5e\x5d\xbc\x8b\x1e\xcc\xe6\x30\xb2\x19\xa0\x03\x04\x77\x62\xfa\xff\xf2\xfc\xfa\x97\x7f\xb2\x43\x9c\x86\x5a\x81\xd2\xda\x11\x52\x87\xe2\x36\x53\xc7\x2a\x94\x23\xa2\xb0\x97\xb6\x0b\xb4\x6d\x65\x94\x78\xa7\x46\xfc\xd4\xba\x60\xd6\x4c\x37\x35\x08\xd5\xbc\xde\x34\xa8\x20\x05\xa3\xd3\x31\xd0\x2e\xa9\x31\x21\xc7\x69\xc2\x79\x5d\x81\x89\x3c\xb8\x5c\xeb\x87\x87\x3b\x38\x32\xe7\x97\x31\xb2\x94\x8d\x8d\x45\xc6\xda\x51\xc4\x88\xf3\xf1\x40\x46\x05\x64\x2e\x34\x94\x07\xd9\x02\xb3\x37\x18\x4c\xb1\x94\x0d\x10\xc2\x00\x78\x37\x02\x65\xfc\x4e\xae\xcd\x15\xf4\x09\x25\xbd\x65\x44\xdf\xc9\xee\x35\x82\x69\xf9\xf0\x54\x65\xc4\x6a\x2e\xb2\xb8\x62\xd1\xd8\xd0\x28\xdf\x39\xa4\xda\x1a\x47\x46\xd6\x05\xb5\x72\x15\xfd\x5b\x0e\x60\x85\x2c\x9b\xd3\xdc\x8a\x5a\x99\xdd\x83\x9d\x6d\xdd\x51\xeb\x9a\xa9\x4a\x0a\xd0\xb1\x02\x1d\x01\x15\xd8\x84\x90\x7f\x5f\xd9\x97\x84\x25\x16\x05\x11\x0c\xd5\xb6\xd9\x9c\x65\xb7\x36\x07\x2c\x57\x46\x5a\xc5\x10\xb5\x91\x55\x04\x8c\x61\x3a\x40\x10\xcd\x52\x97\x49\xce\x09\x99\x14\x36\x7b\x6f\x22\xf2\x09\x19\x10\x57\xa8\x5b\x91\x6c\x2e\xa5\xb2\x3c\x41\x57\xec\x0b\xf7\x90\xc7\xd3\x0b\xe4\x43\xfe\x0f\xcc\xb3\x29\x74\x78\xe7\x79\x59\xa1\x03\x10\xec\xed\xb1\x22\xb9\xcc\x1a\xff\xb7\xd9\xb9\x82\xd1\x5a\x90\xb9\xbc\x23\x3a\x3e\x6e\xc7\x5c\x8d\x95\x09\x5b\xcf\x66\x95\x10\xdf\x7e\xa0\xd4\x3b\xb7\x6c\xf9\xb1\x3f\xfb\x6f\xf8\x45\x1b\x49\xb3\x47\x63\xfc\x26\x74\x72\x28\xbf\xa4\xbf\xfb\xd8\xa4\x75\x34\x0e\xc8\xc0\xe0\x07\x50\xcb\x5a\x57\xb2\x15\x2e\x2f\xe1\x1e\x10\xf0\xca\x31\x1c\x73\x7b\xc7\x15\x51\x73\xd9\x14\xc0\xf8\x6f\xe4\x43\x26\x84\xfc\x7d\xce\x84\x25\x05\x16\x09\xa7\x39\x13\xdd\x87\xb0\xd7\x11\xb1\xc1\x21\xaa\x45\x22\x1e\x1d\xa6\x7a\x6b\x3b\x94\xd9\xe5\x3a\x6b\x16\xe0\x8f\x11\xb9\x61\x19\x35\xab\x5e\xc5\xc1\x12\x11\x66\x6a\x00\x07\x26\x19\x2d\x79\x3e\x76\xe8\x7d\xef\x61\x66\x9b\xce\xeb\x09\xe0\x76\x8d\x35\xd8\x03\xdc\x46\x32\x90\xdd\xa4\x3a\x65\x53\x68\x5e\x15\x98\x28\x0e\xe2\x50\x13\x2d\x65\x1d\xfe\xd3\x46\xb2\xc2\x98\x57\x1f\x2e\xbf\x3d\xfb\x78\x41\xbe\xbc\xf8\x77\x7c\x3c\x0a\x3d\x51\xa8\xe3\x32\x2d\x19\x4f\x1a\xf3\x96\x2d\xb7\xd8\x9b\x96\x7d\xc5\x75\x02\xb4\x9f\x5f\x7c\xf8\x78\xf9\xf6\xf2\xdc\xcc\x14\x1f\x8f\x56\x1d\x66\x90\x3d\x4d\x1a\x6e\x1d\x4f\xf9\xb8\x4b\xc7\xde\xc2\xdd\xc3\x1c\x46\x4b\x4c\xc0\x55\xb2\x9c\x1b\xd2\x94\xc2\x84\x9a\xf6\x8d\xea\xea\x5d\x5a\x40\x27\x90\xd0\x1e\x50\xc8\x15\x14\x83\x5b\xe5\x3e\x91\xa3\x73\xf0\x91\x86\x3f\x80\x07\x75\x78\x80\x6a\xc3\x6f\xd7\x9c\x2d\x50\xc5\xe0\x71\xc8\x26\xa5\x0f\x6e\x89\x67\x5d\x53\x7d\x7c\xfe\x61\x0d\x9f\x25\x6a\x60\xba\x02\xdd\x46\x26\xbb\xc3\x7d\xa5\xad\xd2\x27\x0f\x28\x96\xab\x18\x77\x0d\x7b\xde\x51\xe5\x64\x19\xab\xfb\x00\x40\x8d\x1f\x6d\x2b\x0c\x67\xe9\xcd\xe1\x91\x1a\x9c\xec\x40\x7e\x07\xf2\xfb\x40\xb3\xdc\xec\xa1\x80\xd3\xa0\x79\x70\xf3\x96\x53\x33\x34\x44\xbe\x76\xb4\x6f\x4e\xaf\xeb\x0b\x70\x40\xa5\xd1\xa4\x31\x30\xaf\x95\x4f\x7f\xc2\xc8\xd1\x87\xeb\xb3\xdf\xbd\xfc\xe3\x6f\x8f\x46\xf0\xcf\xdf\xbf\xfc\xd7\x3f\x98\x7f\x5e\x9c\xbf\xb9\x3e\xbb\xfa\xed\xbf\x04\x7f\xfc\xee\x4f\xbf\x3f\x4a\x0b\xd1\xb4\x1f\xfe\xcb\x6f\x5f\xd9\xd4\x2b\x47\x17\x6f\x7e\xfb\x2f\xff\xf2\xea\x5f\xb7\x48\xb3\x98\x78\x74\x25\xfd\x74\xf1\xa9\xe2\x58\x26\xe4\x9a\x19\x21\xf5\x60\x71\xcd\x9b\xc6\x76\xda\xaa\x92\x7e\xe2\x65\x53\xfa\xc2\xa6\xe8\x00\xa5\xb5\x55\xfb\xa6\x5e\x8a\xe0\xfe\x25\x02\x82\x57\x62\xca\x0a\xcd\xa3\xdc\xe6\x28\x24\x0b\x56\xdf\x50\x0d\x85\xd7\x2c\x21\xd8\xa8\x78\x55\x29\x62\xb3\x69\xad\x55\xc2\xeb\x0e\xda\xf4\xe4\x89\xb3\xbf\x9c\x12\x89\xdb\x36\x82\xda\x37\x63\x5a\x71\x5b\xc1\x11\x6e\x8a\x62\xda\x1a\x39\xfe\xf4\x87\xdf\xbf\x7c\x79\xf2\xdb\xdf\x93\xb9\x6c\x6a\x75\x3a\x59\x79\x3d\x69\x54\xab\x99\x03\x12\x6e\xaf\x90\x9a\xcb\x5a\xbb\xba\xc8\xbf\xfb\xc3\xcb\x97\xe4\xe4\x15\x0c\x75\x6a\xb5\x9b\xee\xc0\x21\xcc\x83\xde\x24\xf2\x29\x78\x22\x5c\x91\x3f\xfe\xe9\x0f\xbf\xfd\xbd\xe9\xfd\x5f\x5f\x91\x9c\x2e\x93\xd9\xac\x8f\xf7\xe9\x29\x2c\x60\x1a\x1e\x8f\x01\x72\x06\x1e\x60\x45\x9f\x65\xe3\x4e\xd2\x88\x84\x07\xf1\x5f\xdb\x4d\xfa\x35\xee\xd2\xbb\x0d\xd7\x03\x03\x6b\x84\x5c\xdf\xcf\xa4\x21\x95\xbd\x6c\x9d\x33\x40\x1d\x95\xd2\x35\xe5\x18\x76\xcf\x04\x14\x42\x01\x9d\x6d\x17\x1a\xd2\x84\x87\x1f\x3a\xe1\x2e\x3f\x74\x15\xb8\x82\x61\x39\x51\xb3\x99\x6b\xc9\x99\xc1\xad\x3f\xaa\xb2\xf1\xca\x96\x62\xa9\x36\xd8\x1c\x07\xd2\xe9\xa8\x34\xdd\x4c\xbf\x9d\x03\xdb\x0e\x92\xa4\x58\x2c\x75\xac\x3c\xf6\xc8\xc9\xf9\xf5\x87\x36\x55\x88\xad\xcc\xea\x98\x56\x9f\xf9\x64\xaf\x04\x06\x6b\xb4\x6c\x65\xa5\xc6\x4f\xef\x09\x6e\xb1\x3f\xfe\x8c\xe3\x5a\x3e\x9b\x0c\x21\xd7\x78\x14\x43\x7a\x90\x27\x4f\x0f\x82\x27\x31\xe4\x06\x69\x17\x37\xe4\x06\x81\x36\xe4\x06\x09\xdb\x90\x1b\xa4\x33\xee\x90\x1b\x64\x88\x3d\x19\x62\x4f\x9e\x3e\xf6\x64\xc8\x0d\x32\xe4\x06\xd9\xdc\x86\xdc\x20\xfd\x6d\xc8\x0d\xf2\xbf\x2d\x37\x08\x82\xd8\xa6\x0c\x21\x56\x22\x6d\xd3\x83\x7c\x76\xd9\x41\x94\x39\xe4\x8c\x9d\x65\x99\x6c\x84\xfe\x28\x6f\x59\x74\x74\xfb\x8a\x0e\x65\xad\x1f\x73\x29\xef\xd3\xa9\xac\xbf\x7c\x30\x05\xcb\x33\xac\x5e\x46\x9b\x9c\x33\x91\x16\xcf\xf2\x18\xd4\xeb\xc6\x73\xf4\xdc\xf0\x31\x22\x67\x79\xfb\x83\xc5\xcb\xda\x1c\xcd\x84\x9c\x91\x9a\x65\xbc\xe2\xb6\x44\x00\xc5\xe7\x69\xf6\x17\x73\x2f\x6c\x21\xe8\xa5\xb9\x2d\xac\x98\x7a\xf4\xe8\x0b\x44\xd7\x81\xfe\xc1\x52\xea\x95\x29\xa5\x89\xb1\x66\x9a\xc8\x07\x02\xd7\x77\xc7\x15\x73\xb6\x5f\x6b\x32\x08\x56\xf9\x31\x1c\x2d\x0c\x37\x4b\x1d\x36\x58\x8e\xdd\xc7\xad\x94\xd9\x5b\xe1\x4a\xf6\x54\x06\xb6\xb5\x81\x5b\x66\x11\x4c\x53\x58\x5b\xc5\x57\x92\x5c\xd0\x82\xe7\x86\xfa\xba\x04\x18\x88\x12\xd2\xc0\x18\xf1\x87\x87\x52\xd5\x9e\x26\x06\xb7\xd0\x6c\xce\x54\x30\x33\x94\x78\x6e\xad\x95\x2d\x31\x60\xc3\xb4\xaa\x68\x66\x5c\xa0\x80\x04\xfd\x3b\x7e\xa3\x0d\xb9\xb0\x0b\x59\x9d\xdc\xc7\x60\x60\xf3\x79\x9a\x09\x05\x18\xcc\x8d\x11\x1e\xb8\x5a\x3e\x0d\xff\x50\x44\x16\xb9\x33\x49\xfc\xe9\xa5\x91\xa9\x33\xbc\xba\x89\x8a\x5e\x85\xd1\x22\x5a\x92\xc2\x70\xfb\x86\xcc\xdd\x3f\x90\xb7\x7d\xbc\x09\xae\x0e\xda\x7c\x92\xfd\x18\x7c\x9e\x09\x4d\x0a\x46\x95\x26\xaf\x5e\x92\x92\x8b\x46\x6f\x93\x1b\xff\x51\xa6\x95\x3f\xfc\x3e\xfa\xbb\x47\xe5\xd4\x4f\xbc\x6d\xa1\x34\x06\xff\xf6\x22\x99\xd5\x1b\x97\x00\x7c\x95\xe4\x42\xaf\x0a\x68\x81\xc3\x53\x3a\x36\x05\xcd\xf4\xde\xb0\xd8\xd6\x62\xcc\x8f\x8d\xbc\x59\xf6\x05\x29\xa6\x6d\xb8\xed\xb2\x5b\xdf\xec\xff\xd9\x87\xb8\xbd\x12\x49\xd4\xdc\xb0\xe6\xa0\xc7\x50\x73\x5a\x33\x5b\x39\xf9\x58\x79\x7b\x62\xdf\x7e\xbd\x31\x43\x40\xd0\xd0\x6b\x3f\x02\x57\x24\xf7\x8f\xbd\x2a\x83\x8b\xb1\xae\x19\xf3\x93\x03\x29\x03\x74\xf4\xce\x0e\x19\x19\xd5\x1f\xcd\x38\xc5\xb2\x4b\x63\x52\xb3\x19\x57\xba\xee\x53\xe3\x8e\x63\x10\x6f\x3c\x17\x35\xab\x65\x13\x51\x1e\x20\xfd\xb2\x41\xc7\x4e\xa1\xe1\x0c\x4b\xb6\x12\x76\x8c\xcb\x9f\x45\x83\xf6\x74\xa0\xb7\xde\xaf\x12\x2e\x4b\xcd\x68\xfe\xb5\x28\x22\xb4\xd2\xe9\x4b\x77\x7d\xa3\xac\x0a\xd4\x0e\xac\xf3\x00\x82\x0e\x40\x5d\x19\x76\x10\x83\xe1\x3e\xb0\x1c\x39\x3a\xf3\xf9\x18\xd2\x5f\x04\xda\xdc\x18\x9c\x11\x52\x8e\x29\x2d\x54\x74\x45\xfb\x38\xa9\xc9\x01\xe8\x7e\xb6\x0c\xfb\xee\xa2\x0b\xeb\x25\x2d\xeb\xd6\x2b\xda\x6d\xdf\x07\xf7\x81\x65\x18\x62\xa4\xe8\x96\x39\xa6\x81\xdd\x87\x2a\xc0\x40\xaf\xcd\xb5\x47\xc3\xeb\x89\x1f\x2d\x0c\x95\x73\x8e\xad\xf6\x94\x32\x59\x96\x34\xaa\xe0\x0f\x5a\x02\x29\x04\x67\x2b\x1b\x35\x21\x74\x4d\x8b\x76\xd5\x41\xd2\x8a\x5d\x02\xb9\x66\x82\x8a\x08\xa3\x7e\xfa\x79\x61\xcf\x44\xde\x79\xa7\xec\x19\x5f\x30\xb1\x0a\xdd\x56\x08\xf9\x82\x66\xb7\x2c\x2a\x7e\xf3\x1b\xe5\xf6\x37\x5f\x0a\x6a\x63\xea\x0c\x3a\x5b\x70\x73\x0d\x58\xbe\x32\x82\x1a\xb5\xfe\x44\x50\x43\x19\x43\x16\x91\xd1\xdc\xe5\x56\x36\x8a\x45\x24\xef\x48\xdf\x48\xd3\xef\xe3\xb1\xa4\x42\xfb\x4f\xcd\x17\x19\x73\x9c\xb3\xe9\x79\x97\x3b\x80\xb3\x4b\xdc\x03\x07\x07\xc1\x7d\xb3\xbe\xe9\xd6\x85\x01\x13\x16\x14\x06\xe7\x2d\x5d\x62\xa6\x55\x28\xb2\x85\xff\x63\xb1\x59\xef\x6a\xea\x9b\x1e\x72\x9c\x76\x8c\xf5\x4d\xde\x45\x5b\x1f\x68\x2e\x15\xf9\x02\x22\x2f\xde\x30\x10\x67\xf6\xc7\xf0\x7c\xf8\xe2\x4d\x0f\xb3\x63\xe6\xf7\x9c\x18\x1d\x5e\xd2\x59\x1f\xeb\x3c\x26\xa5\x14\x5c\xcb\xfa\x61\x7c\x18\xcf\xe7\x4c\x55\x9c\xdb\x73\xfa\x0d\xc6\x9e\x9d\x34\xd1\x26\x56\xf0\x7e\xcf\x81\x99\x10\x0e\x7d\x29\x1b\x72\x47\xb1\x78\x24\xc0\x45\x0c\x6d\xff\xc8\xab\xd7\xe4\x42\xa8\xa6\x0e\x22\x6e\x57\x07\x33\x48\xd0\x1d\xab\x43\x85\x00\x6c\x58\x35\x12\x0a\xbc\x61\xd2\x87\x88\x11\x2f\x3e\xd1\xb2\x2a\x98\x7a\x4d\x8e\xd8\x27\xfd\xfb\xa3\x11\x39\xfa\x34\x55\xe6\x7f\x42\x4f\xd5\xd1\x84\x5c\x96\x55\xc1\x33\xae\x8b\x25\xe1\x62\xca\xea\xda\x6b\xf5\xf1\x83\x15\x27\xa7\x98\x31\x13\x75\xec\x4a\xcb\x9a\xce\xd8\x0b\x4b\x0b\x7e\x59\xdf\xf4\xd3\x98\x04\x8c\x07\x80\xba\x0f\x90\x81\x8e\xbd\x82\x07\xb0\x05\x3e\x8a\xad\x6d\xb6\x61\x9f\x98\x3d\xae\xc9\xed\x9f\x60\xa7\xec\x9e\xbc\xa8\x6f\xf2\x17\x1f\x2e\xce\xde\xbc\xbb\x98\x94\xf9\x2f\xe7\xf2\x6e\xac\xe5\xb8\x51\x6c\x1c\xe1\xea\x9c\xb0\x57\xb7\x6c\x09\x39\x89\xf6\xb0\x5b\xb6\xeb\x8e\xbc\xae\x25\x98\x0b\xe0\xb9\x61\x9e\x3e\x7c\xf1\xe6\x1b\x15\xa7\x1f\x0c\x04\x8b\x17\x4c\x67\x2f\x32\x56\xcd\x5f\xd8\x31\x3e\xcf\xbd\x0f\x0c\x3c\x6b\x2b\xea\xf9\xd4\x61\xd9\x7d\x9c\x9b\xeb\x1b\xa9\x7f\x26\x8b\x02\xfd\xe2\x0d\x4e\x3c\x67\xd5\xdc\xbf\xf0\xec\x76\x3d\xce\x11\x2d\xda\xfd\xec\x30\x3a\x1c\x02\x39\xa7\x64\x84\xc1\x2e\xfd\x28\x4d\xbf\x5d\x7c\x05\x4f\x62\xd1\x55\x70\xe5\xea\x9b\x6d\x09\xc1\xf3\xb9\x64\xfd\x64\xe6\xc9\xb4\x0b\x1f\xdc\x8f\x8a\x69\xa0\xf7\x5c\x10\xcc\x51\xff\xce\x70\x1a\xfb\x52\x23\x1c\xf8\xc0\xe2\xf4\x15\xe8\x7a\x1e\x95\xe3\x34\xfd\x14\x7c\xe7\xc0\x55\x07\xbe\x18\xb4\xd1\x73\x26\xb4\x0b\x4f\xb4\xfe\xef\x21\x8d\x22\x97\x53\x94\x68\xf3\x28\x03\xb7\x5c\xb0\xba\xe6\x39\x53\x24\x81\x48\x85\xda\x33\x5e\x3c\xbb\x03\x8c\xb4\x38\xa7\x19\x83\xe3\xbd\x6f\xb6\x33\x1d\x3c\xc6\xe3\xe6\xd0\xbe\x36\x07\xf6\xb2\x79\x9c\x7f\xcd\xd3\x7a\xd6\x24\xdb\x89\x53\xbc\x69\x1e\xe3\x61\xb2\x57\x95\x53\x87\x98\xc3\x93\x2d\x88\x39\xcd\x4b\x1e\x15\xb2\xfc\xac\xc9\x39\xac\xe2\x81\xd7\x55\x46\x0b\x76\xf9\xf5\x2e\x55\x46\xb6\xcb\xae\xda\xe8\xda\x3e\xac\x58\xed\x72\x35\x38\x8d\xa0\xd6\x34\x9b\x5b\xd5\x8e\xb3\x15\x48\x01\xa1\x64\x08\x5b\x44\xc8\xbc\xdf\xb8\x1b\xea\x8d\xdc\x68\x0f\xeb\x8e\xdc\x44\x9f\x93\xfe\x68\x46\x35\xbb\xeb\xe5\xcf\xc7\x2d\x89\xee\x7f\x13\x94\x22\x9f\xb9\xa6\x29\x45\x9b\xe4\x5d\xfb\xd7\x7a\xd9\xa5\xfe\x68\x72\x8f\xe6\x28\x0d\xc9\xc0\xb7\x3b\xd3\xfd\x62\xf3\x77\xff\xd3\xb4\x8f\x48\x58\x68\x4b\x3c\x4f\xfb\x95\x3b\x2b\xd8\x44\x1b\xd7\xe9\x58\x08\x77\x01\xcf\xae\x2e\xc9\xdf\xf0\xf5\x9d\xae\xb2\xaa\xa5\x46\x81\xfb\x8d\x2c\x29\x8f\xf0\x4b\xec\xac\x60\xf5\x73\xb7\x94\x90\xd7\x75\x4b\xb8\xf2\xef\x12\xfb\xb2\xcb\xe6\x80\x35\xe2\x9b\x9a\xe5\xc4\x2a\xeb\x76\xba\xc6\x83\xc8\x59\x6b\xf2\x10\x39\x31\xbf\xbd\x80\x3c\xa9\xa7\x93\x56\xe6\x5a\x11\xc8\x62\x34\x03\x3b\x11\xd9\x9e\xa1\x50\x14\xd8\x77\x5c\x24\x66\x2b\x08\x39\xb0\x01\xb6\xc3\x7b\x17\x46\xf5\x2f\x14\x07\x37\x9d\xc0\x31\xd6\xe6\xb9\xe4\xaa\x0d\xb6\x44\xd9\x6a\x44\xbe\x92\x33\x2e\x1c\xf2\x92\xd6\xf1\x6c\x4a\x63\x04\xa2\x41\x4e\x19\xe4\x94\xd5\x36\xc8\x29\x1b\x9b\x52\xc5\x85\xa0\x37\x45\x8c\x4f\x78\xd7\xe9\xdd\x7f\x48\xde\x16\x74\x46\x18\xfc\xf1\x22\xe7\xca\xfc\x9f\x5c\x5f\x7f\x05\x5e\x16\x8d\x70\xca\x14\x80\x00\x4b\x2b\x7d\x49\x0b\xc4\xc9\xbb\x45\x92\x48\xaa\xde\x45\x05\x7b\x6e\x81\x26\xdb\xee\x7d\xbe\x6b\xd5\x09\x8c\xb0\x6f\x00\xb6\xa4\x3e\xec\x1b\x3d\xaf\x6f\x98\xb9\xa5\xd9\xed\x55\xe0\x14\x21\x6b\xf3\x4c\x04\x8f\x12\x99\xac\xe4\xaf\xb7\x63\xb7\x56\x86\x89\x3b\x86\xab\x74\xa5\x76\xf0\xa5\xe3\x5b\x1c\xd1\xb9\xb6\x5b\x0b\xbf\x51\xa5\x64\xc6\x5b\xa7\x1e\x9b\x2d\xcd\x31\x33\x39\x30\x33\x3b\xdd\x0c\xe4\x9f\x53\x97\x83\x0c\xfa\x06\x0e\xcc\x01\x8a\x7d\x83\xaa\x90\xe3\xe2\xc2\xad\x7a\xa7\x4b\x40\x70\x8c\xcb\x81\x92\x7e\x39\xda\xde\x57\xd7\xeb\x2f\xc2\xaa\xbb\x88\xcb\xaa\x60\x4f\x38\x42\x9a\xb3\x6b\x9e\x53\x54\x63\xac\x41\x01\x57\xfe\xd2\x41\x9d\x81\x9d\xed\x5f\x4c\x9a\x95\x44\x55\x02\xf2\x55\x5d\xbf\x39\x7c\x66\x5d\x4c\x00\x6b\x54\xb2\x6a\x0a\xf4\x7a\xf7\x8b\xeb\x5b\xd5\x23\xad\xf1\x38\x8b\xdd\x68\x07\xe2\x39\xac\x20\x12\x7b\x1f\xe0\x19\x06\x7a\xa7\xc7\xe3\x3b\x88\xc5\xc4\x7f\x37\x4b\xd7\x5d\x92\xcc\x7e\xc8\x70\xfc\x5d\x85\xdf\xc7\x68\x37\x3a\x01\xfa\x1d\xa9\xeb\xe5\x1f\x7e\xff\xfb\x28\x82\xc6\x6b\x96\x69\x09\x2e\x9b\x36\x81\x87\xf7\x18\xa0\x35\x03\xe9\x00\x63\xe5\x9d\x7e\x03\xdd\x06\x75\xa4\x55\xe5\x10\x91\xf9\x7b\x8e\xc4\x4f\x8b\xe9\x48\x89\xb4\x8f\x34\x87\x6f\xe1\x2d\x03\x19\x93\x2e\x0f\x96\x31\xe9\x40\x79\x92\x0e\x93\x1d\xe9\x10\x39\x91\x0e\x92\x09\xe9\x70\xf9\x8f\xf6\x9c\xf5\x68\x2f\x2e\x26\xfb\xcc\x6b\x94\x18\x24\x9c\x16\x20\x1c\x9f\xb9\x28\x3a\x8c\x38\x35\x84\x38\x21\x37\xd1\x6e\x33\x12\x25\x4b\xf4\x29\xd9\x87\xb6\x0d\x8f\x3b\x5c\xa6\xa1\x27\xcc\x2f\xf4\xd4\x59\x85\xf6\x9c\x4b\xe8\x70\x19\x84\x0e\x92\x37\x68\x9b\x38\xd4\xf4\x1c\x41\x29\xf1\xa7\xdb\x5e\xae\xbd\x67\x01\xda\x49\xee\x9f\x1d\x67\xfc\xd9\x5d\x9e\x9f\xc3\x39\x52\xc6\x67\x3f\x79\x74\xce\x13\x95\x9c\xf4\x24\xdd\xde\xb3\x2f\x65\x4d\xdb\xfb\x46\xe5\x94\x4b\x0c\xeb\x12\xbb\x1f\xa3\xab\x9c\xaa\x28\x96\x89\x6d\xb6\xf6\x2d\xdc\xb1\x1e\x82\x24\x68\x70\xb0\x77\xd9\xc3\x5c\x24\x2a\x71\xb0\xd3\xaf\xaf\x57\x3c\x42\xfc\xe3\x7d\x3a\x82\xf8\x41\x7a\x5c\x41\xdc\xc2\x0f\xe0\x0c\x32\x78\x5b\xec\xce\xdb\x62\xf7\x71\x3a\xcf\xcd\x40\x9f\x0f\x06\xfa\x64\x03\xbd\xea\x54\x91\x77\x0a\x63\x40\xc9\xc0\xd4\xca\x9b\xb0\xe2\x52\x8b\x23\xce\xae\x2e\x23\xc6\x69\xab\xc2\xa8\xc9\x26\x6e\xd7\x99\xee\x2c\x17\xed\x33\x9f\x6b\xcd\xca\xaa\x17\x8d\x90\xc1\x3e\x3f\xd8\xe7\x37\xb4\xc1\x3e\xbf\xb1\x1d\xda\x5e\x37\x6f\x4a\x2a\xa0\x62\x2a\x98\xf1\x3b\x0e\x63\x2b\x0c\xcd\x84\x58\x4c\x1a\x79\x2d\x31\x13\x03\xe4\xc6\x68\x04\xff\xb1\x61\xad\x3e\xcb\x33\x96\x7b\xb2\x75\x42\xdf\xfb\xdd\x40\xe4\x8b\x57\x30\x73\x26\xd7\xa2\x88\xed\x9a\xfd\x66\x3a\x14\x1b\xbb\x89\x30\x4c\x47\x45\x0b\xd5\x52\x6c\x59\x9c\x0e\x93\xde\xd1\x3f\x58\xf4\x03\x38\x21\x56\xcb\x1d\x72\xa6\x06\x10\xcc\x7a\x6c\x1a\xae\x1b\x46\x4a\x5e\xd7\xb2\xb6\x76\xd7\x70\x49\xe8\x40\xc8\x67\x73\xcd\x6a\x94\xfc\xeb\xe8\xfa\x58\xd7\x4c\x5b\xa8\x02\xa8\xd4\x12\x2a\xfa\x09\xfb\x6f\x17\x4e\x03\xcb\x75\x74\xe8\x86\xcd\xe9\x82\xcb\x26\x2a\x80\xf4\x1a\x29\xe5\x91\xfd\x18\xf8\xa7\xa5\x6c\xbc\x85\x09\xcb\x9e\xf9\x3d\x54\xeb\xe7\x15\x31\xc8\xfb\xf6\x73\x50\xd0\xe4\xd2\xa9\xcf\xc7\xec\x13\x57\x7a\x7d\xc7\xdc\x51\x59\x1b\xe3\xce\xae\xc1\x42\x55\x06\x8b\x7f\x1b\x91\xfe\x21\x0d\xf8\x3b\x1d\x77\x05\x9f\xc5\x35\xfc\xd4\x27\xf6\xd8\x8c\x70\x98\xc0\x85\x94\x34\x9b\x73\x91\x94\x3c\xe1\xdb\xce\x14\x3a\xf2\xcf\x84\x9c\x15\x45\xeb\x3b\xa8\xbc\x4b\xab\x93\x87\xba\xd3\xd7\xfd\x25\x82\x0d\x7c\xd4\x2c\x07\x1b\x65\x5b\x91\x30\x53\x7c\x62\xbb\x9a\x2c\xca\x3b\x5a\xb3\x49\x26\x4b\x72\x7e\x7d\x49\xf2\x9a\xf7\xe6\x3c\xdc\x83\x7f\x3d\x6e\x7a\x6f\xcd\xbe\xe7\x25\xa3\x0d\xf2\x59\xdb\x52\xdc\x91\x9c\xa3\x54\xc1\xb3\xe5\xe5\x9b\x6d\xdd\xac\xf0\x6b\xc7\x00\x28\xef\x62\x65\x9e\x93\x2f\xa8\x62\x39\x79\x47\x05\x9d\xa1\xfa\xf0\xe4\xfa\xea\x8b\x77\xa7\x06\x80\x40\xdd\x79\xf9\x66\xa3\x1f\xd6\x75\xd8\xf9\xfb\x5d\xe6\x7f\x59\x5b\xf8\x16\xbc\xd1\xda\xf7\x5b\x2e\x7e\xa7\x89\x6d\x88\x67\x27\xe2\x0a\x90\x6e\x48\xd5\x73\xb5\x9a\x19\x11\x9d\xa4\x5c\x4a\x56\xb5\x8a\x9a\x17\x65\x7e\xfb\xb8\xe9\x73\x23\x4d\x14\xc5\x55\x41\xc5\x59\x55\xd5\x72\xb1\x59\xeb\x1a\x83\x1c\xdc\xf7\x6e\x01\xe8\x60\xee\x1e\x56\x78\x22\xe0\x53\x29\x50\x88\xc1\x61\x37\xef\xff\xa5\xf6\x8a\x59\x29\x80\x05\x3b\x3a\x6b\xb4\x2c\xa9\xe6\xd9\x11\x91\x35\x39\x7a\x47\x45\x43\x8b\x8d\xb1\x29\x0f\xae\xf8\x3e\x01\xf3\xc1\x8f\xd0\x11\x6d\xcb\xcf\x1e\x64\x60\x1f\xfe\x5e\xd3\xda\xa0\xba\xf3\xeb\x6f\x93\xbe\x55\x9a\xea\x66\x8d\x32\x3c\x40\xad\xee\xa7\x4f\x63\x52\x50\xa5\xbf\xa9\x72\x83\x1f\x56\x7e\x7d\x88\x08\x65\x54\xd3\x42\xce\xfe\x8d\xd1\x62\xf3\x65\x88\x01\xa9\xf3\xb0\x93\xb6\x4a\x37\x20\xa8\xe6\xc6\x7f\x7f\xac\x88\x11\x25\x0d\x94\x70\xad\x48\xcd\x0a\xb6\xa0\x42\xbb\xcf\xaf\xe1\x14\xd4\xb1\xdd\x96\x7b\x01\x8e\xb7\x36\xd6\x9c\x69\x56\x97\x5c\x74\xc7\xb9\x86\xef\xcf\xa5\xc0\x2a\xc8\x0a\xad\x48\xf8\x45\x77\xac\xfb\xa1\xf2\x3e\xd7\x83\x07\x9c\x0d\x3a\x3b\x15\xce\xa7\xbb\x3d\xf8\xda\x8d\x15\x5d\xe6\xf8\x10\x3c\x37\x3b\x73\x5b\xdb\x3d\x72\x2b\x8c\x44\x01\x19\xce\x37\xef\x4d\x2f\x9b\xd3\xc7\xde\x8c\x1d\x38\xe0\x14\xee\x8f\x0a\x1c\xdb\x79\xdf\xe7\x94\xf0\x10\x34\x62\xeb\x67\x8c\x56\xa7\x72\x3f\xa6\xee\x6c\xfc\xf9\xca\x67\x98\x58\xc5\xfb\x36\xa1\x97\x47\xe7\xa5\xfb\x29\x4b\x14\xdf\x18\xc7\xe2\xd1\x8a\x7f\xcb\x6a\x65\xa6\x18\x2f\x1d\x9c\x5d\x5d\x92\x05\x7e\x95\xa6\x0b\x8b\x24\x85\xa0\x23\xeb\xa7\x82\x69\x2c\xe7\xa5\x0d\x6c\xaa\xad\x04\x4b\x49\xc5\x19\xe6\x56\xa7\xc2\x6e\x26\xd0\x33\x46\x73\xfb\xd0\xd0\xcd\x9a\xd9\xdf\x46\xd6\xe3\x30\x8a\x41\x41\xbf\x5d\x67\x83\xa5\x98\xf2\x1b\xbc\x11\x5e\xfc\x4d\x5a\x1d\xa0\x4d\x15\x68\xb0\x0a\x70\x17\x23\xa2\x9a\x6c\x4e\xa8\x11\x64\x94\xb9\x0e\x06\x5f\xb0\x49\x49\x05\x9f\x32\xa5\x27\xb6\x37\x56\xab\xef\x7e\xfb\x7d\x1f\xdb\xf1\x56\xd6\xc4\x46\x69\x8f\x5c\xe6\x6a\xbb\xc6\x16\xe6\xb8\xc2\x8d\xf0\x3d\xb7\x1a\x99\x4a\xe6\x76\xc1\x77\xb0\x14\x4d\x6f\x0d\x29\xc5\xa5\x34\x0c\xbc\x06\xfa\x78\x94\x23\xc3\xf6\x06\xd3\xfe\x6f\x43\x3b\xff\xe7\x88\x9c\xdc\x01\x13\x72\x64\xfe\x3c\xc2\xe9\xf8\x48\xb3\x50\xe1\xd4\x4e\x0b\x93\xa6\xd5\x7c\x36\x63\x75\xaf\x8d\xd5\x7c\xca\x16\x4c\xe8\x53\x9b\xb5\x5b\xc8\xa0\x2b\xe7\xe7\xd7\xea\x4f\x56\xa7\xf9\xdd\x6f\xbf\x3f\x22\x27\xdd\x3d\xe9\x19\x92\x8b\x9c\x7d\x22\xbf\x45\x6b\x29\x14\x17\xcf\x4f\x27\xa8\x70\x51\x4b\xa1\xe9\x27\x33\x62\x36\x97\x8a\x09\x54\x80\x69\x49\xe6\x74\xc1\x88\x92\x25\x23\x77\xac\x28\xc6\xd6\x7e\x4c\xee\xe8\xb2\x3f\x59\xb9\x3b\x42\x48\x81\x4a\x2a\x5a\xeb\x0e\x18\xef\xe4\x12\xde\x72\xb1\xd3\x4c\x8b\x5f\x72\xb1\xea\xd2\xd9\x2b\xe0\x6d\x50\x0a\xcf\xb8\x76\x59\x07\x6c\x7c\x91\x5e\xbe\x30\x87\x55\xf3\x9b\x46\xcb\x5a\xbd\xc8\xd9\x82\x15\x2f\x14\x9f\x8d\x69\x9d\xcd\xb9\x66\x99\x6e\x6a\xf6\xe2\xff\x63\xee\x7c\x7e\xdb\x06\xa1\x38\x7e\xdf\x5f\x81\xd4\x43\x2f\xf1\x7a\xdf\x4e\x5b\xd2\x6d\x91\xaa\x6d\x6a\x93\x49\x3b\x52\x9b\xa5\xa8\x8e\x1d\x81\xdd\x68\x9a\xf6\xbf\x4f\xf0\xc0\x86\xc4\xfc\x4a\x5c\x67\xb7\x36\xb6\x93\xc7\x03\xc3\xf7\x7d\x78\x00\xde\xd1\x2c\xaf\x2b\xd1\x30\xe4\x9e\xbc\xdb\xe2\x4a\x78\x82\x67\xa2\xa0\x7e\x4a\x1c\xe9\xb1\xf0\xdc\x43\x9a\xc7\x4e\x99\x6b\xb8\x0c\x46\x4f\x70\x50\x04\x8a\x4d\xf7\x12\xf0\xce\x8b\xbb\x4a\x22\xbf\x9b\x31\x3c\xc5\x08\x68\xff\xf4\xb1\x39\xe8\xaf\x07\xe8\xf8\xf2\xc3\xdf\x10\x7d\x12\x64\xfb\xca\x2e\xcc\x1a\x25\xb6\xb8\x80\x61\x04\x57\xc1\x75\xee\xaf\xfc\xce\x8a\xfa\x68\x99\xb0\xec\x77\x26\xbf\xa2\x2e\x33\x5c\x15\xe2\x6f\xd8\x78\x23\xf7\x67\xa4\x46\x56\x40\x4b\x47\xed\xfc\xd6\xcb\xc5\xe5\x9b\xe7\xcd\x55\x4b\xc7\xe8\xe9\x4e\x99\xcf\x52\xba\x3c\x52\x2c\x43\x48\x02\x19\xba\xac\x25\x5a\xc0\xd8\x81\x08\xe5\xfa\x5b\xdf\xab\xcc\x81\xee\xa0\x9b\x90\x74\xf6\xcf\xe6\x1b\x31\x42\xa4\xbd\x77\xfd\x13\x26\x0b\x97\x99\xff\x98\x37\xea\x28\x11\xbd\xf3\xab\x55\x0c\x1d\x9c\x3e\xe1\x6a\xe3\x91\x36\x51\x15\xa3\xf3\x26\x85\x21\xd9\xe0\x61\xee\x79\x17\x7c\x06\x63\x6a\x23\x4e\x95\xa1\x4a\x49\x79\x77\x9c\x86\x08\x5b\x79\x83\xf0\x0b\xa6\xa5\x9c\x27\xac\x1f\x39\x61\x2f\x0a\xb6\xc3\x61\x57\xf8\x30\xc6\x86\xd7\xb6\x01\xc1\x3b\x51\x84\xab\xcb\x70\x5c\x2b\xbe\x02\xc8\xa8\xf7\xc0\x7a\xa7\xd5\xa3\xc4\xb7\x80\x16\x9c\x97\x9d\x13\x14\xe1\x20\x4f\xb4\xbf\x2f\x04\xb3\xe6\x91\xe0\x66\x45\x7d\x0a\xe5\xa8\x49\x5b\xcf\x69\x2e\xd7\x37\xe8\x3d\x41\x9b\xba\x11\xb2\xb3\x95\x6d\x1f\xe2\x03\xd8\x4b\xbe\x6b\x68\xaf\xdd\xa2\xfb\x52\xae\x18\x96\x3b\x4c\xd4\x55\x62\x31\xed\x07\x8f\xcb\xa9\x62\x11\xd5\x92\x1a\xb8\x1b\xfd\x62\xf5\x56\xc2\x45\xa8\x3b\x98\xaa\xf4\x6f\x86\x31\x6a\x91\xb7\x84\x73\xef\x16\xc7\xf6\xb2\x12\xb8\x1b\x5e\xe5\x83\x49\xfe\xad\xbe\x06\xcb\xd9\x45\x50\x51\x90\x06\xd3\x52\xbf\xca\xe0\x8a\xce\x4b\xa1\xde\xd5\x5b\x40\x46\x30\xf7\x09\x1a\xcb\xea\x7b\x79\x33\x18\x5d\x57\x24\xdb\xd7\xac\x40\x73\xbc\x25\xe5\x1c\x73\xa2\xbe\xcb\xdc\xaf\x06\xea\xe8\x9a\x8f\x6a\xf2\x30\x0e\x75\x98\x0c\x90\xaf\x9f\x50\x90\xff\xf5\x01\x2d\x18\x38\xd3\x54\x7a\xc5\x5a\x32\x43\x9f\xc4\xe8\x35\x43\xeb\xea\xb9\xaa\xf7\xe7\xd9\xda\x78\x27\xeb\x2c\x4b\xcd\x0c\x49\xbd\xdd\xb9\x05\xf6\x3a\x73\x4f\xb4\x48\x75\xf8\x0e\xfa\x6c\x0f\x36\xdd\xad\xda\x22\xf1\xe7\x11\x6a\x14\xa1\x35\xab\x37\x8c\x70\x0e\x14\x27\x19\xdf\x1b\x13\x16\x9f\x49\xa5\xe6\x87\x83\xe6\x2d\x87\x9e\xd2\x96\xea\x71\x6d\xd3\x5f\x51\xf5\xad\x7e\x6c\x57\x0e\x4a\x0d\xff\xca\x08\xc3\x50\x07\x64\x74\x59\x38\x0c\x17\x8d\x51\xcf\xb8\x17\x44\x89\x8f\x8c\xeb\xd2\xcd\x1f\x7e\xb8\x9d\xed\x1c\xfb\x42\xe3\x53\x18\x3f\x9e\x0b\x1e\x83\xef\x4c\x10\x36\xc6\x2a\xfd\x69\x00\xe3\x25\xd1\xe2\x65\xa1\xe2\xe4\x38\x71\x52\x90\x38\x1d\x42\x3c\x11\x1e\x06\x5f\x24\x1f\x30\x8c\x7d\x87\xd2\x20\xe1\xc5\xf1\x60\xd0\x27\x3e\x24\x18\xeb\x93\x34\x0c\x38\x35\x00\x8c\x72\x81\x17\xfa\xa5\xf8\x21\x11\xf4\x4d\x8c\xf8\x82\xbe\x88\xc4\x7a\xb1\x1e\x79\x3d\x94\xf7\xdf\x42\xbc\xa0\x8b\x3d\xe0\x2e\xd6\xad\x49\xb0\x6e\x62\x4c\x17\x28\x7f\x1a\x9a\x53\x1a\x93\x14\x31\x12\x7d\x69\xdc\x6c\x8a\x74\x25\x10\x65\x02\x9c\xba\x43\x27\xdc\x99\x52\xf2\x54\xa5\x2e\xc4\xf3\xa9\xf9\x1f\xca\xe4\x78\x35\xac\x24\x3c\x29\xba\x98\x32\x54\x04\x84\x16\xb7\xdf\xef\x6f\xe7\x1f\x56\xb7\x8b\x43\x15\x9e\x2e\x97\xfd\xa0\x28\x33\xe4\xb2\xe3\x06\x31\x58\x39\x2e\x89\xb6\xe5\xb8\xd4\xb6\x74\xe8\xa9\xf3\xc5\xfb\x59\x9a\xe1\xac\xc1\x35\xdc\x4f\x8c\xd4\x51\xc8\xb6\x05\x59\xab\x42\x55\x3e\xd5\x65\xc1\xf5\xfa\x86\xe5\xa2\xdb\x88\x80\x56\x79\xd9\x16\x42\x72\xad\xd7\xcb\x05\x7f\x8b\xd0\x47\x92\xe3\x96\x0b\xe9\xe6\x0e\xd7\xeb\xea\xba\x41\xdf\xbe\xde\xfd\x94\x4b\xbb\xe4\x93\xb3\x6e\xbb\x54\x79\xf6\x1e\xc5\x70\x7c\xa0\x2c\xa8\xfc\x56\x90\x75\xd2\xa2\x1c\xef\x44\x0f\xec\x46\xfe\x14\x76\xaf\xc1\x55\x81\x9e\x48\xb9\x13\xa3\xc3\x33\x41\xfd\x39\x65\xe2\x07\xe5\x55\x58\xbf\xa1\xf2\xd8\x37\xa4\x81\x4d\x09\x7c\xa9\xea\xde\x0a\x08\x10\xf6\x33\xd8\xba\x85\x0b\x14\x7d\xd9\x63\xae\x08\xe5\xa0\xb5\x81\xa6\x12\xe6\x71\x6e\xa4\xe5\x80\x59\x30\xb2\xc8\xff\x8e\x6c\x16\xc6\xf6\xdc\x0a\x92\xc3\x68\x13\x4d\xcf\xdd\x99\x80\xc3\x27\x44\x1f\xb1\x2b\x72\xe8\x64\xeb\x87\xbb\xb5\x40\x86\xc9\x71\xb6\x70\xc2\x5e\x48\xf1\x4e\xce\xe7\xe8\x8f\x20\xdb\xd6\xfe\xac\x7d\xd4\x62\xc6\xe8\x75\x14\x81\x43\x7f\xfe\xbe\xf9\x17\x00\x00\xff\xff\xc4\xc9\x92\x01\x49\xa6\x03\x00") +var _operatorsCoreosCom_subscriptionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\xfd\x77\xe3\xb6\x95\x30\x8e\xff\xde\xbf\x02\xc7\xed\x39\xb6\x5b\x49\x33\x93\x76\xdb\xee\x3c\xfd\xb6\xc7\xf1\x78\xba\x7e\x92\x99\xf8\x19\x4f\xd2\xb3\xdf\x6c\x77\x03\x93\x90\x84\x9a\x04\x18\x02\x94\x47\xdd\xec\xff\xfe\x39\xb8\x17\x00\x41\x49\x36\x01\x59\x92\x3d\x59\xe2\x87\x64\x4c\x91\x78\xbd\xb8\xef\x2f\xb4\xe2\xdf\xb1\x5a\x71\x29\x5e\x13\x5a\x71\xf6\x49\x33\x61\xfe\x52\x93\xdb\x3f\xaa\x09\x97\x2f\x16\xaf\x7e\x71\xcb\x45\xfe\x9a\x9c\x37\x4a\xcb\xf2\x03\x53\xb2\xa9\x33\xf6\x86\x4d\xb9\xe0\x9a\x4b\xf1\x8b\x92\x69\x9a\x53\x4d\x5f\xff\x82\x10\x2a\x84\xd4\xd4\x3c\x56\xe6\x4f\x42\x32\x29\x74\x2d\x8b\x82\xd5\xe3\x19\x13\x93\xdb\xe6\x86\xdd\x34\xbc\xc8\x59\x0d\x9d\xbb\xa1\x17\x2f\x27\x5f\xbc\x9c\xbc\xfc\x05\x21\x82\x96\xec\x35\x51\xcd\x8d\xca\x6a\x5e\x41\x4f\x13\x59\xb1\x9a\x6a\x59\xab\x49\x26\x6b\x26\xcd\xff\xca\x5f\xa8\x8a\x65\x66\x8c\x59\x2d\x9b\xea\x35\xd9\xf8\x0e\x76\xe7\xa6\x42\x35\x9b\xc9\x9a\xbb\xbf\x09\x19\x13\x59\x94\xf0\x6f\x5c\xe2\x75\x30\x2a\x3c\x2e\xb8\xd2\x5f\xad\xfd\xf4\x35\x57\x1a\x7e\xae\x8a\xa6\xa6\xc5\xca\x6c\xe1\x17\x35\x97\xb5\x7e\xdf\x8e\x6d\xc6\x52\xcd\x4d\xf8\x6f\xfb\x22\x17\xb3\xa6\xa0\x75\xb7\x93\x5f\x10\xa2\x32\x59\xb1\xd7\x04\xfa\xa8\x68\xc6\xf2\x5f\x10\x62\xb7\xcb\xf6\x39\x26\x34\xcf\xe1\x08\x68\x71\x55\x73\xa1\x59\x7d\x2e\x8b\xa6\x14\x7e\x4c\xf3\x4e\xce\x7c\xaf\xaf\xc9\xc7\x39\x23\x15\xcd\x6e\xe9\x8c\xb9\xf1\x6e\x58\x4e\xb4\xf4\x1f\x10\xf2\x0f\x25\xc5\x15\xd5\xf3\xd7\x64\x62\xb6\x78\x62\x76\x30\xf8\x19\xcf\xe7\x0a\x3b\x09\x9e\xeb\xa5\x99\xae\xd2\x35\x17\xb3\x87\x86\xcf\xa8\xa6\x85\x9c\x11\x04\x23\x32\x95\x35\xd1\x73\x46\xcc\x50\x7c\xca\x59\xee\xe6\xf7\xc0\x8c\xf0\xd3\xb5\x39\x5d\xaf\x3e\x8e\x9e\xd2\x9c\x0a\xc1\x0a\x22\xa7\xa4\xa9\x72\xaa\x99\x22\x5a\xb6\xfb\xf3\xf0\xf6\xd8\x8f\xd7\x66\x73\xbe\xf6\x7c\xc3\x74\xf0\xd5\xc5\x2b\x5a\x54\x73\xfa\xca\x3e\x54\xd9\x9c\x95\xb4\x3d\x43\x59\x31\x71\x76\x75\xf9\xdd\x6f\xaf\x57\x7e\x20\xdd\xa5\x84\x20\x4a\x6e\x19\xab\x54\x7b\x29\x48\x53\x99\x35\x99\xc5\x91\x9b\x25\xd1\x35\xcd\x6e\xb9\x98\xc1\xd2\x67\xb8\xde\x73\x3c\x18\x35\x59\x9b\xb2\xbc\xf9\x07\xcb\x74\xf0\xb8\x66\x3f\x36\xbc\x66\x79\x38\x15\xb3\xb3\x0e\x13\xac\x3c\x36\xfb\x14\x3c\xaa\x6a\x33\x2d\x1d\xdc\x43\x6c\x01\x2a\xea\x3c\x5f\x59\xe6\x4f\xe3\x95\x5f\x09\x31\xbb\x83\x5f\x92\xdc\xe0\x25\xb3\xa0\x39\x73\xd7\x85\xe5\x76\x4b\xcd\x01\xeb\x39\x57\xa4\x66\x55\xcd\x14\x13\x88\xa9\xcc\x63\x2a\xec\x2a\x27\x6b\x9d\x5f\xb3\xda\x74\x64\xae\x74\x53\xe4\x06\xa1\x2d\x58\xad\x49\xcd\x32\x39\x13\xfc\x9f\xbe\x77\xd8\x44\x33\x6c\x61\x20\x48\x13\xb8\x90\x82\x16\x64\x41\x8b\x86\x8d\x08\x15\xf9\x5a\xdf\x25\x5d\x92\x9a\x99\x71\x49\x23\x82\x1e\xe1\x13\xb5\x3e\x97\x77\xb2\x66\x84\x8b\xa9\x7c\x4d\xe6\x5a\x57\xea\xf5\x8b\x17\x33\xae\x1d\xaa\xce\x64\x59\x36\x82\xeb\xe5\x0b\xc0\xba\xfc\xa6\x31\x47\xff\x22\x67\x0b\x56\xbc\x50\x7c\x36\xa6\x75\x36\xe7\x9a\x65\xba\xa9\xd9\x0b\x5a\xf1\x31\x2c\x46\x20\x92\x2d\xf3\x5f\xd6\x16\xb9\xab\x95\x81\x37\x5e\x24\xe2\xd0\x66\xe2\x61\x19\x7c\x4a\xb8\x22\xd4\x76\x88\x8b\x6d\xcf\xc4\x3c\x32\xdb\xf8\xe1\xe2\xfa\x23\x71\x33\xc2\x73\xc3\x23\x6a\x5f\xdd\xb0\x43\xee\xb4\xcc\xce\x72\x31\x65\x35\x7e\x39\xad\x65\x09\xbd\x32\x91\x57\x92\x0b\x0d\x7f\x64\x05\x67\x42\x9b\x9b\x5e\x72\xad\x00\xac\x99\xd2\xe6\x20\xd7\x3b\x3e\x07\xd2\x46\x6e\x98\xc5\x11\xf9\xfa\x2b\x97\x82\x9c\xd3\x92\x15\xe7\x54\xb1\x83\x9f\x9d\x39\x23\x35\x36\x07\x12\x7d\x7a\x21\xe1\x5e\xff\x60\xed\xd6\x13\xe2\x48\xee\xbd\xc7\x1d\xa2\xa0\xeb\x8a\x65\xfe\x3a\x52\x41\xce\xaa\xaa\xe0\x19\xde\x38\x3d\xa7\x9a\x64\x54\x98\xed\xe4\x42\x69\x5a\x14\x6c\xf5\x76\xdc\x3b\x8b\xfb\xf0\x0f\x01\x64\xb3\x42\xae\xdc\xe3\x35\x9a\xd1\xfd\xc1\x93\xd9\x95\x37\xee\xc3\x55\xa6\x59\xcc\xbf\xfe\xc3\x03\x5b\x4e\x90\x25\x9a\xf2\xd9\xa6\xcf\xee\xdd\xcb\x73\xf8\x04\x98\x29\xca\x85\xb2\x5d\x34\x35\xee\x66\x4b\x3b\x0d\x35\xa5\x1d\x4e\x62\x1d\x0e\x1f\xdc\xd9\xbe\x35\x9b\x46\xa7\xc0\xfa\x2d\x37\xff\xda\x8f\x00\x5c\xbb\x9c\xb6\x33\x1f\x11\xb9\x60\x75\xcd\x73\x8b\xba\x2b\x99\x1f\x2b\x40\xac\x79\x53\x00\xa1\x92\x42\xe9\x9a\xf2\x8d\x97\xde\x35\xc1\x0b\xb3\xf8\x31\xd5\x78\x83\x98\x22\x77\xbc\x28\xc8\xaf\x85\xd4\xbf\xf6\x23\xc0\x00\xb2\xe6\x33\xee\xb1\xb3\x22\x5c\xb8\x71\x81\xac\x5b\xbe\x44\x2a\xb6\xd2\xe1\xfd\x83\x7f\xab\x18\x61\x65\xa5\x97\x0e\x4d\x9d\xfc\xf7\xff\x9c\x1a\x9a\xc0\x6a\xaa\x82\x01\x3b\xfd\xdd\x8b\xe9\xb1\xf5\x9c\x14\x89\x38\x2d\xd8\x17\x99\xb3\xb3\x9e\x53\x23\xab\x27\xf7\x86\x21\xfb\xa3\xe0\x73\x7f\xea\xe1\xa1\xd4\x4d\xc1\x94\x67\xe1\xcc\xde\x3d\xd0\x79\xc4\x5a\x62\xd7\x83\xef\xb1\x29\xab\x6b\x96\xbf\x69\xcc\x2d\xbb\xf6\xb3\xba\x9c\x09\xe9\x1f\x5f\x7c\x62\x59\xa3\x37\xb0\x14\x0f\x2e\xfd\x01\xa0\x75\xcd\xf0\x8d\x76\x27\x58\x8d\x50\x86\x33\x02\xd6\xd1\xfe\x60\xb6\x04\xd8\x02\xb3\x83\x0a\xb1\x9e\xa2\x9a\xab\xe9\xb2\x77\x00\xb3\xa3\x7e\xcf\xd9\x27\x43\xf1\x80\xf7\x0f\x6e\xbb\x61\xe4\x80\xb8\x71\x56\xe4\x23\x72\xd3\x68\xc2\x35\x50\xbe\x6c\x2e\xa5\x5a\xc7\x76\xab\x8d\xe2\xd1\xc2\xbc\x16\x5c\x02\xe3\x42\xa4\x30\xc0\x4a\x4a\x43\xae\x80\x61\x62\xe1\xf0\x13\x58\x79\xfb\x19\x5f\xa5\x36\xeb\xad\x94\x4a\xb7\xc7\x65\x48\x3f\x5c\x40\xc1\xc8\x1d\xd7\x73\xf8\x63\x56\x33\x64\x9a\x54\x53\x9a\x41\xef\x18\x9f\xcd\xb5\x1a\x11\x3e\xd9\x40\x49\x57\x9b\x01\x40\x46\xb3\x79\x30\xad\x92\x31\xad\x08\x2d\x0a\xb7\x84\x10\x6a\x91\x7a\x94\x86\x81\x20\x27\x8e\xc3\xe8\x1d\xc5\x72\x07\x23\x4f\x7d\x56\x01\x6f\xe3\x71\x8d\x08\xd3\xd9\xe4\x74\xd4\xdb\x7d\x26\xcb\xca\x20\x04\x0a\x7b\x70\xb3\x24\x5c\x1b\xde\x1d\xb9\xa1\x5a\x36\x33\xdc\x29\x56\xd8\x89\x3b\x5e\x16\x0e\xdf\x30\x97\x20\x0d\x6e\x20\x37\xab\xed\x08\x37\xf7\xc8\xb1\xab\x66\x38\x8e\x9b\x04\xfb\x57\x52\x9d\xcd\x2d\x1a\xce\x64\x5d\x33\x55\x49\x61\x7a\xc6\x5f\x2e\xda\xb5\xfd\x1f\xf3\x4e\xef\x78\xa6\xd3\x13\x75\xda\x1e\xf6\x9c\xcf\xe6\xee\xac\x69\x8d\xe8\xb8\x0b\x23\x7d\x47\x8e\xa8\x84\xd6\x35\xed\xbb\x47\x5c\xb3\xb2\x07\x91\x90\x2d\x6e\x3f\x21\x67\xc2\x22\xfb\x16\xb0\x03\x10\xd3\xac\x2e\xfd\x46\x02\x14\x02\xda\x53\xb8\x09\xbc\x34\x9c\x10\xd7\x16\xcc\xc9\xcb\x88\xf1\x4e\xcc\x4d\x20\x5c\x1f\x2b\xb8\xb5\x63\x59\x9d\x4e\xc8\x19\x11\x8d\x47\x3c\x0f\x4d\x41\x48\x3f\x03\xdb\x91\x99\x96\x92\x6d\x5f\xfd\xf8\x28\x0e\x7d\x63\xbb\x9f\x41\x5b\x6f\x63\x3b\x7f\x26\x22\x2e\xa1\x79\x1d\x77\xad\xf7\xd5\x58\x42\xe2\xde\x76\x73\x88\x79\x7b\x05\x62\xce\xf0\xe6\x28\x56\xb0\x4c\x1b\x6a\xc8\xea\x72\x44\xa8\x52\x32\xe3\x46\x54\x68\x61\xbf\x7b\xa1\x70\x25\xfd\x7b\x4f\x52\xf7\x9f\x24\xaf\x9f\x80\x34\xda\xbd\xdf\xb1\xdf\xad\xed\x46\xc1\x95\x36\x08\xaa\xbb\x2b\x1d\xbc\x7b\xb3\x84\x5f\x8f\x15\x29\xe8\x0d\x2b\x1e\xe0\xab\x56\x5b\xfc\xe5\x6f\x5b\x24\x1a\xb8\x67\x41\x51\x08\xa1\x6d\xab\xd0\x10\xac\xdb\xca\xbd\x1e\x4e\x40\x0c\x72\x4c\x3d\xb2\x82\x23\x42\xc9\x2d\x5b\x8e\x10\xa5\x0b\xaf\xc2\x49\x9a\x02\x74\x5c\x33\x24\xe8\x06\xee\x6e\xd9\x12\x3a\x7c\x98\xdd\xdc\xd8\x55\x2a\xdc\x61\x4b\xc1\x00\x6d\x1b\x9b\x89\x26\x7e\xb1\xc5\x06\xa5\x5f\x0d\x6c\xb7\xec\x41\xf6\x79\x53\x5b\x53\x36\x02\xb8\xc3\x79\xc0\x21\x01\x05\x76\xf0\x40\x8d\x88\xcc\x36\xeb\x1f\x1e\x6e\x0f\x0a\x9c\x0f\x35\xb7\x7b\x8f\x5a\x57\xe2\x05\x31\xed\x83\xd7\xe1\x20\xbc\x1f\x2b\x84\x57\x83\x77\xe6\x1c\x94\x95\xe6\xa2\x00\x1a\x49\x07\x5a\x6c\xdf\xd1\x82\xe7\x81\x0e\xd4\x30\x1b\x97\x62\x44\xde\x4b\x6d\xfe\x77\xf1\x89\x2b\xc3\x63\xbe\x91\x4c\xbd\x97\x1a\xfe\x9c\x90\xbf\x6a\xbc\x7a\x5f\x47\xe2\xe5\xb6\x6d\x7d\x06\xb8\xbe\x43\x9f\xc0\x99\x40\x24\x6a\x76\x38\xd4\xc4\xa9\x89\x91\xcc\x81\x45\xb7\x3b\x67\xb0\xd6\xa5\x30\x42\x01\xee\x5c\xf2\x50\xa0\x8c\x45\x39\x1b\x87\x2c\x1b\x05\xaa\x34\x21\xc5\x18\xd8\xa8\x8d\x63\xe2\x01\x99\x71\xc3\x23\xda\xe1\xf0\xf7\x0f\xfd\x57\x6d\x86\xfd\x5a\x8f\x82\x8f\x93\xc7\x0d\x06\x9b\xd3\x05\xb0\xf6\x5c\xcc\x0a\xcf\xc4\x8f\xc8\xdd\x9c\x67\x73\x94\x1e\x41\x13\xa6\x59\x5d\xd5\xcc\x70\x0c\x14\x74\x66\xe6\xc9\x8c\xd5\xe9\xa0\xff\xd1\x88\x06\x38\x3e\xea\xbb\x0b\x9a\xb1\x9c\xe4\x20\xb2\xa0\xea\x95\x6a\x36\xe3\x19\x29\x59\x3d\x63\xa4\x32\xa4\x7f\x3b\x80\x4f\xa3\xc4\xd8\x92\xe9\x71\x38\xe0\x16\x37\x8c\x90\x4f\xe3\xdb\xe6\x86\xd5\x82\x69\xa6\xc6\x86\x3f\x19\xdb\xd9\x6b\x59\xf2\x2c\xba\xb3\x9d\x74\x03\x7c\xd6\x5b\x23\xb7\x1d\x88\xc5\x02\x19\x71\x60\xb1\x06\x16\x6b\x60\xb1\x06\x16\x6b\x60\xb1\xa2\xdb\xc0\x62\x3d\x7a\xf8\x81\xc5\x1a\x58\xac\x83\xb3\x58\x9d\x2e\x4a\x5a\xa5\xf6\x80\x7a\xb9\x2d\x14\x81\x7f\x43\x85\xee\xaa\xe6\x0f\x18\x3e\xe7\xd7\xd0\x55\x01\x1a\x3e\xe6\xda\x12\xa7\x8f\xa0\x36\xb4\x96\xc8\x9a\x8a\x19\x23\xaf\xc6\xaf\x5e\xbe\x4c\x51\x10\x5a\x70\x8e\xfa\x62\x2a\xeb\x92\x6a\xf8\xe6\xb7\x5f\xf4\x7c\xf1\x88\x53\xb9\xcf\x5e\x72\x18\x43\x9d\xc5\x3c\xde\x36\xd3\x61\x91\xef\xb1\xa5\x01\x19\x13\x52\x93\x92\x69\x42\xfb\x79\xb2\x50\xed\xce\x4b\x36\x72\xe6\x50\x44\x3b\xd6\x6d\xc4\x19\x05\x73\x22\x85\x35\xbd\x98\xc3\xef\x3f\xdc\xad\x56\x90\x31\xaa\x98\x21\xf1\x37\xcc\xac\xa2\xdf\x14\xa8\x89\x92\xa5\x99\x35\x17\xda\x21\x31\xb3\x04\xe6\x0e\x86\x9c\xb0\xc9\x6c\x42\xf2\x06\xba\xa5\xc2\xfa\xc1\x9c\xe2\x6a\xd5\x52\x69\x56\xf6\xdb\x02\x0d\x31\xac\xe1\x7f\x66\x5b\x74\xbd\x04\x0b\xf9\x82\x09\xdd\xd0\xa2\x58\x12\xb6\xe0\x99\xf6\xfb\x07\x6e\x3b\x5c\xab\xa8\x9d\x4a\x60\xa3\xe3\x59\xe7\xf1\xda\x0d\xed\x23\x52\x29\x9c\xef\x5a\xdf\x31\x38\xa7\x73\x03\x3e\xd8\x95\x4c\xee\x95\x09\xb5\xe9\x17\xcd\xb6\xf0\x4f\x00\xee\x6f\x3e\xf4\x5b\xd9\x48\x32\xfd\x49\xa0\x39\xdb\xb1\x56\xd6\xe0\x25\x6b\x6b\x7c\x5b\x5f\xe9\x06\x93\x17\xae\xbd\x73\x6b\xe4\x34\x72\x40\x3d\x67\x68\xa4\x3c\x7b\xff\x26\x6e\xc7\x88\x75\x0e\xf8\x28\x2b\x59\xc8\xd9\x32\x3c\x5e\xd8\x4e\x30\xff\xd9\x79\xa0\xaf\x0e\xb2\xe0\x06\xe6\xdf\xaf\xc0\xc3\x60\x1a\x1a\x4c\x43\x83\xde\x02\xda\xa0\xb7\x18\xf4\x16\x83\xde\x22\xae\x0d\x7a\x8b\x47\x0f\x3f\xe8\x2d\x06\xbd\xc5\x60\x1a\x5a\x6f\x03\x8b\xd5\xdf\x06\x16\xeb\xc1\x36\xb0\x58\xbe\x0d\x2c\xd6\xc0\x62\x0d\x2c\xd6\xc0\x62\x0d\x2c\xd6\xa1\xba\x79\xac\x69\xe8\x51\x53\xd8\x6e\xf0\x4a\xe6\x8f\x08\xde\xaa\x64\xfe\x40\xec\x16\xea\xf4\x33\x39\x2e\x64\x46\xb5\x0d\xb3\x35\x9f\x58\x2b\x94\xa2\x25\x9a\x29\x46\xe4\x9f\x52\x30\x8c\x66\x31\xd7\x03\x8c\x05\x52\xcf\x59\x6d\x5e\x3f\x51\xa7\x0f\x86\x10\x0c\xb1\x5f\x43\xec\xd7\x10\xfb\x75\x6f\x7b\x36\xb1\x5f\x73\xaa\x10\x6e\x91\x34\xde\x1f\x0a\x16\xe0\xa4\x8f\xac\x2e\x7f\xa6\x91\x60\x06\xdc\x2d\x38\x42\x92\x88\x16\xa4\x70\x67\x72\x6b\xf0\x67\xf9\x55\x77\x3f\xac\x58\x0d\x8b\xa2\x79\xce\x72\x52\xb1\x7a\x8c\x20\x2a\xc9\x94\x8b\x7c\xc3\x5a\xdd\xfe\xf4\xa3\x87\x3d\x86\x62\x75\xd7\x11\xf5\xcd\x7e\xe2\xb1\xba\x13\xd9\xc2\xa8\x18\x5a\x46\x3b\x44\xf0\x59\x44\x67\xa5\x4a\xe8\x63\xa2\xad\x41\xf1\xab\x48\x19\x3d\x5d\xcc\x06\xe1\xd8\x99\x1f\xb7\x54\x3f\x25\x89\x42\x67\x56\x1e\xff\xb1\x61\xf5\x12\xe2\xf3\x5b\xb1\xd3\xe7\x22\xb1\x1e\x31\x5c\x91\x8c\x2a\x24\xab\x29\xac\xf2\xe5\x14\xa3\x26\x45\x53\x14\x23\xec\x67\xf5\xb2\x3a\x34\x07\x70\x20\xa4\xf9\x3d\x59\x23\x96\xa8\xa2\xd9\x4e\x07\xb2\xbd\x15\x96\xac\x9e\xd3\x6a\x57\xa8\x1b\x73\xaa\x43\x3c\x96\x8d\xba\xc3\x0d\xd6\xf4\x64\xfb\x38\xb6\x6d\x05\x98\xad\xc4\x97\x47\xcb\xeb\x0f\xec\xc9\x23\xf4\x8a\xf0\x72\xf2\x64\x76\xa3\x5b\x24\xdb\xeb\x17\xc9\xd6\x3a\x46\xb2\x95\x9e\x91\x6c\xab\x6b\x24\x8f\xd0\x37\x92\xed\x74\x8e\x64\x15\xda\xcc\x09\x59\xc6\x77\x3f\xea\x47\xf2\x38\xe1\x7c\x7b\x35\x24\xd9\xc1\xc5\x0a\xc7\x0f\x32\x3b\xed\x4f\x2f\x49\x62\x75\x93\x70\xad\x3a\xea\xc9\x43\x9f\xcb\x76\xaa\x49\xb2\xa3\x53\x71\x99\x71\x40\x17\x76\x28\x65\x25\x79\x7a\x85\xe5\x83\x53\xb0\xc3\x47\x6b\xf8\xb6\x1a\xfd\x11\x5a\x41\xf2\x28\xcd\x20\xd9\x5e\x3b\x48\x1e\x0b\xec\x3b\xd3\x12\xee\xb4\x2b\xe0\x93\xbe\x06\x3f\xb4\x47\x70\x5b\xc9\x37\x30\x18\x16\xb9\x8b\x92\x56\xe6\xf6\xfd\xb7\x61\x22\x00\x30\xff\x87\x54\x94\xd7\xca\x48\x37\x56\xaf\x1d\xfe\x66\xd5\x77\x41\x37\xc9\x13\xa8\xcc\xc0\x86\xc6\x2f\x68\x61\x98\x1c\x74\xfa\xb5\x3a\x08\x33\x97\x55\x16\x72\x44\xee\x20\x61\x96\x21\x6f\xa8\x99\xe0\x8a\x1c\xdd\xb2\xe5\xd1\x28\x4a\x3d\xd0\x6d\xe1\xcd\x3e\xba\x14\x47\xc8\x3a\xad\xdd\x4b\xcf\x67\x49\x51\x2c\xc9\x11\xfc\x76\xb4\x6b\x1e\x75\x0b\xfe\x28\x4c\xcd\xba\x2d\xfb\xb1\xd5\x75\x7a\xac\x82\x9b\x74\xa0\xef\x2b\xb6\xdc\xd6\x11\x21\x09\xe6\xdf\x75\x46\x74\x0c\x35\x80\x99\x91\xdd\x3d\xdf\x84\x99\x59\x81\x65\xb2\x3a\x2a\x54\x57\xf1\xa2\x48\x18\xed\x86\x11\x4d\x6f\x19\x58\x78\x24\xa4\x96\xe3\x39\xc3\x64\x7a\x08\x3a\x30\x92\x01\x99\x46\x41\x7a\x5c\x52\x48\x79\xdb\x54\x0e\xf4\x5c\x36\xc9\x84\x21\xb9\xc8\x64\xe9\x7c\xea\xd1\xaf\x75\x64\x13\xcc\xdd\xb2\xe5\x18\x73\x60\xe2\x73\x18\x18\x48\x80\x55\x4d\xfc\xd0\x11\xcc\x7f\x20\x54\x91\x1f\x80\xa9\x14\xe4\x04\x3e\x3c\xfd\x21\xc5\xa5\xc0\x6f\x20\x6a\x5f\x65\x03\x98\x85\x19\x62\x69\x27\xa8\x56\xf7\xf6\xa1\x1d\x4b\x18\xda\x65\x8a\x0b\x37\xe3\x18\xed\x0d\x27\x54\x68\x7e\xea\x95\x34\x13\x02\x70\x00\x5c\x72\x2e\xc5\xb1\xc6\xf9\x39\xbc\xe6\x3a\x48\xf1\x3a\xf0\xfb\xde\x5a\xfc\xd0\x5a\x80\x47\x9e\xb3\x29\x6d\x0a\x6d\xb3\x91\x1a\xd4\x07\x94\x3e\x61\x84\x8f\xce\x5e\x62\x19\xfe\xa9\xac\x6f\x78\x9e\x33\x01\x21\x0e\x6e\xfa\x37\xd2\x05\x04\xb5\xe0\x6e\x30\x5b\xe7\x8c\x53\x86\x3d\x2b\x94\x1c\xad\xf6\x98\xf9\x6c\xa5\xe6\x16\xdd\xcd\x99\xe8\x0e\x40\xb8\x32\x9b\xaa\x58\x02\x53\x7b\x10\xd7\x9f\xc7\xe3\xbc\xad\x5d\xaf\xb8\x7a\x02\xbc\xb7\x3a\xe8\x80\xfa\xa2\x50\x9f\x90\x7a\xc0\x7e\x9f\x2d\xf6\x5b\x03\xfa\x5d\x20\xc0\xb5\x4e\x07\x1c\x98\x8c\x03\x85\x4b\x83\xfc\xc4\x56\x00\x54\x8c\xa1\x17\xab\x9b\x92\x6a\x75\x66\x10\xe8\xb5\x9d\xbe\xcc\x85\xc1\x01\x9e\x85\x1e\x72\x67\x0c\x6d\x84\x4d\x06\x0f\xe6\xd0\x76\x58\xc4\x17\xab\x36\xf7\x84\x31\x9d\xe0\x22\x05\x53\xa0\x62\x67\xde\xbf\x22\x18\x06\x7a\x4d\x59\x0a\x84\xc2\xb5\xea\x43\x91\xaf\x06\xc7\xb5\x7d\x83\x5e\xbf\x64\x54\x28\x72\xe4\x5c\x3c\x8e\x55\xfb\xc6\x51\xd2\x7d\x73\xa9\x2f\xfd\xd8\x90\xe9\x38\x4c\x77\xd9\x0e\x3d\xd8\x51\x06\x3b\x4a\xd8\x06\x3b\xca\xfa\x24\x06\x3b\xca\x7d\x6d\xb0\xa3\x6c\x35\xfe\x60\x47\xe9\xb6\xc1\x8e\x32\xd8\x51\x06\x3b\xca\x60\x47\x19\xec\x28\x83\x1d\x25\xf6\xa3\x5d\xd8\x51\x5a\x31\xe8\x10\x72\x74\x28\xb2\x5a\x3f\x71\xac\xb2\x45\x35\xcf\xda\xa8\x50\xf7\x16\xfe\xeb\xa9\x84\xea\x50\x0c\x7e\xac\x48\x1d\x0a\xe8\x6b\x1a\x8c\x64\x89\xfa\x5e\xf9\xd9\x4b\xd8\x6b\x63\xec\x48\xb4\xfe\x99\x2b\x97\x02\x07\xd6\x43\x5c\x87\x8f\x2e\x94\xc5\x16\xee\xbb\x61\x6d\x9c\x4b\x4e\x4e\x9c\xae\xf5\xd4\x1c\xb8\x90\xba\xfb\xa3\xd0\x7c\xdc\xbe\xe1\x1d\x84\x41\x25\xec\xb2\xb9\xa5\x6c\xba\x93\x59\x5a\xdd\xa3\x58\x29\x7b\xd9\x42\x9b\xc1\xff\xac\xee\xcc\x96\x2b\x5b\x49\x0d\x42\xd3\xea\x46\x08\xc3\x1e\x49\x61\xa3\x38\x12\x66\x82\xa4\x05\xd5\xbc\xf6\x56\xa2\x30\x05\x6b\x04\x89\xaa\x3d\xa6\x20\x00\x80\x6a\x2c\x93\x68\x73\x2e\x49\x61\x95\xe4\xe6\x09\xf6\x93\x30\x09\x7f\x61\x61\x3f\xb9\x5f\x51\xca\x5d\xbd\x80\x3b\x1a\x4e\x96\x2b\x38\x47\x5a\x14\xf2\x2e\x85\x3e\x25\xde\x88\xad\x93\x03\x46\x43\xef\x5d\x72\x16\xc1\x15\x6f\xf9\x58\x5e\x7d\x48\x35\xf8\x60\x1b\x52\x0d\x3e\x8f\x54\x83\x81\x1d\x34\xcc\x39\xd8\xbf\x57\x90\x93\x70\xaf\x39\x07\x09\xf9\xdb\x9c\xc1\x2d\xaa\x19\x1a\x2f\x9b\x42\xf3\xaa\x8d\x32\x56\x78\x42\x05\x8a\xd4\x53\x1b\x0d\xd8\xbd\xbd\x66\x36\x34\x9b\xf7\x0e\xb5\x72\xcb\x61\x3c\x88\x5a\x56\x80\x4d\x31\x62\x0e\xf4\xef\x98\xe8\xcf\xc9\xda\x18\x76\xc8\x9f\x3a\x9a\x2a\x0a\xff\xbd\x71\x05\x43\x03\x1b\xb8\x22\x27\x86\x3a\x16\x4b\x6b\x35\xee\x20\xc2\x0e\x59\x8d\x18\x00\xf5\x60\x0b\xe6\x18\xd4\x19\x5f\x30\xd1\x52\xdf\x13\x75\x7a\xea\x78\xe2\x55\xfe\x21\xa2\xf7\xc7\x70\x18\x31\x58\x3b\x95\x33\x58\xa1\xf7\x11\x23\x6c\xe0\x08\xfe\x14\x50\xd9\x3f\xf7\xf3\x04\x11\x83\xe0\x95\x76\xe1\x99\xc1\x41\xb7\xbc\x40\x6f\x2f\x7b\x8c\x82\x4b\x09\xb5\x4a\xd3\x8a\x6f\x11\x62\xb5\x6d\xa6\xcc\xfd\x86\x56\xed\x35\xac\xea\xf3\x49\x68\xf9\xc4\xe6\xbf\xcf\x20\x1b\xd3\x33\x31\xf7\x0d\xe9\x98\xee\x6b\x4f\x95\x8e\x69\xef\xe6\xbc\xcf\x2e\x2b\xd3\x41\xcd\x77\x87\x31\xdd\x7d\x66\x59\x99\x9e\xc4\x54\xf7\xcc\xf3\x33\xed\xcf\x44\x37\x24\x3f\x7a\x9a\xfc\x92\xa9\x66\xb8\xed\x6f\xd5\x93\x9a\xdf\x9e\xd4\xf4\xf6\xf4\x66\xb7\xad\x78\x95\xc7\x9a\xdb\x92\xaf\xc9\x63\xcd\x6c\xdb\xb8\xec\x6f\x07\xcf\x87\x0b\x51\x3a\xb0\x8f\xfe\xf3\x08\x4d\x7a\x22\xc7\xfc\xa7\x72\xca\xdf\xaf\x43\xfe\x13\x84\x22\x1d\x24\x0c\x29\x95\xec\x27\x11\xfb\xc7\xe1\xae\x6d\x28\xf2\x96\x21\x47\x5b\xe2\xaf\x43\x86\x1a\xfd\x0c\x50\xd8\x56\x21\x46\x03\x16\x7b\x22\x2c\xb6\xbb\x90\xa2\x43\x85\x13\xfd\xcc\x70\xd9\x96\xa1\x43\x3b\xd3\x6e\xef\x27\x64\xe8\xd0\xe1\x42\x7b\x08\x15\x7a\x8a\x30\xa1\x3d\x84\x08\x0d\x36\x81\xc8\x36\xd8\x04\x62\xdb\x60\x13\xb8\xaf\x0d\x36\x81\xd5\x36\xd8\x04\x06\x9b\xc0\x60\x13\x18\x6c\x02\xeb\x03\x0e\x36\x81\xc1\x26\x10\xd7\x06\x9b\xc0\x61\x6c\x02\xa9\x61\x37\xdb\xc1\xf2\xd3\x84\xdb\x1c\x36\xd4\x66\xf7\x61\x36\x4f\x18\x62\xf3\x33\x53\xb8\x24\x87\xd3\x6c\x07\xe6\xcf\x25\x8c\xe6\x79\x84\xd0\x3c\x79\xf8\xcc\x63\x43\x67\x76\x13\x36\x93\x00\xed\x5b\xc2\x79\x25\xf3\x33\xa1\xf9\x63\x0b\x1f\x85\x00\x78\x5f\xf5\x23\xba\x90\x3c\x27\x55\xa3\x6d\xc1\x95\xa1\x02\x52\x2f\x0c\x1c\xa6\x02\x52\xe7\xf0\x86\x32\x48\x0f\xb5\x67\x53\x06\xe9\xbe\x33\x3b\x60\x2d\x24\xd5\xdc\xe8\x9a\x66\x3a\xa9\x20\x92\x33\x38\x0e\x25\x91\xd6\xda\x50\x12\x69\x28\x89\x34\x94\x44\x1a\x4a\x22\x0d\xa9\xfc\x86\x54\x7e\x61\x7b\x36\x76\x3c\x32\xa4\xf2\x4b\xfc\x74\x48\xe5\xd7\xd7\x86\x54\x7e\x43\x2a\xbf\xfb\x46\x1f\x52\xf9\x0d\xa9\xfc\xd2\x06\x1e\x52\xf9\x91\x21\x95\xdf\x90\xca\xef\x33\x4e\xe5\x37\x94\x44\xfa\x2c\xea\x82\x0c\x45\x41\x12\xc6\x7e\x5e\x45\x41\x86\x92\x48\x0f\x0e\x32\x94\x44\x1a\x50\xdf\x50\x12\xe9\x67\x8b\xfd\x86\x92\x48\x11\x83\x0c\x25\x91\x86\x92\x48\x0f\xb6\xa1\x24\xd2\x60\x47\x21\x83\x1d\x65\xb0\xa3\xa4\x7e\x35\xd8\x51\xee\x6f\x83\x1d\x25\xa5\x0d\x76\x94\xe8\xd1\x07\x3b\xca\x60\x47\x49\x1b\x78\xb0\xa3\x90\xc1\x8e\x32\xd8\x51\x3e\x63\x3b\xca\x50\x12\x69\x28\x89\x34\x94\x44\xf2\x23\x0f\x25\x91\x86\x92\x48\xd0\x86\x92\x48\x11\x23\x0c\x25\x91\x3e\xd7\x92\x48\x9d\xb0\xa0\xcf\xb7\x2e\x52\xfa\x32\x86\xe2\x48\x43\x71\xa4\x7b\xda\x50\x1c\x69\x28\x8e\xb4\xa9\x0d\xc5\x91\x86\xe2\x48\x0f\xb4\x21\x11\x62\x64\x1b\x12\x21\xc6\xb6\x21\x11\xe2\x7d\x6d\x48\x84\xb8\xda\x86\x44\x88\x43\x22\xc4\x21\x11\xe2\x90\x08\x71\x7d\xc0\x21\x11\xe2\x90\x08\x31\xae\x3d\xbd\x01\xee\x7f\x47\x22\xc4\xa1\x38\xd2\xb3\xac\x2c\x32\x94\x15\xe9\x69\xcf\xa7\xac\xc8\x50\x1c\xa9\xd3\xf9\x50\x1c\x69\x40\x61\x43\x71\xa4\xcf\x0e\x8b\x0d\xc5\x91\x36\x74\x3e\x14\x47\x1a\x8a\x23\x0d\xc5\x91\x06\x9b\x40\x6f\x1b\x6c\x02\x83\x4d\x20\x6c\x83\x4d\x60\xb5\x0d\x36\x81\xc1\x26\x30\xd8\x04\x06\x9b\xc0\xfa\x80\x83\x4d\x60\xb0\x09\xc4\xb5\xc1\x26\x30\x14\x47\x1a\x8a\x23\x0d\xc5\x91\xa0\x0d\xc5\x91\x86\xe2\x48\x43\x71\xa4\x8d\x1f\x83\xa2\x15\x25\x9b\xfb\x20\x3b\x16\x96\xcf\xda\xae\x2c\x07\xdf\x08\xa5\xeb\x26\xd3\x4d\xcd\x72\x38\x30\x3c\x4c\xc3\x18\x28\x2d\x6b\x67\x15\x80\x4a\x33\x6f\x58\x55\xc8\xa5\xa1\xb6\x23\x72\x25\xf3\x11\x39\xbb\xba\xbc\x66\xf5\x82\x67\xcc\x41\xdf\x37\x96\xa6\xdf\xbf\x6f\x1f\x97\x15\xcf\x68\x51\x80\xc6\xa2\x9d\x4d\x49\x97\x4e\x97\x7c\xb3\x24\xec\x93\x66\xb5\xa0\x05\xd1\x52\x16\x68\x7e\x31\x93\x01\x84\x58\x33\x5d\x73\xb6\x60\x84\xd6\x37\x5c\xd7\xb4\x5e\x92\x92\x69\x9a\x53\x4d\xef\x1f\xf5\x5b\xc5\xc2\x18\x0d\x2d\x49\x55\xb3\x31\xde\x80\xce\x3c\x00\x36\xbf\xf9\xfa\x9d\xbb\xdf\x34\xcf\x5d\x40\x82\x83\xf0\xeb\xe6\xc6\xef\xf6\xf1\xfd\xdc\x56\xee\x77\x4b\x8d\x00\x3c\xad\x8a\xa6\xe2\x0a\xf7\xec\x5e\x89\x34\x82\x2d\x49\x63\x42\x7a\xe1\x93\x89\xc5\x63\x41\xeb\x42\x2c\xba\x9a\x3d\x26\x16\xbc\x96\x02\xf8\xc8\x05\xad\x39\xbd\x29\x98\xb5\xa4\x79\xfb\x8a\xe5\xed\xd8\x03\xf0\x72\xee\xed\x0c\x18\xec\x72\xef\x95\xec\xa7\x67\x3d\x14\xac\xb3\xd2\x0b\xb1\xf8\x8e\x76\xd5\x0c\x62\xe3\x92\x88\x7d\xc1\x2c\x89\x92\xf3\xfe\x05\x45\x31\x9d\x31\xea\xb0\x31\x60\xf8\x7b\x5f\x88\x53\x5a\x99\x2e\x1e\xa6\x97\x69\x74\xf2\x3d\x2d\xdb\x0a\x5a\x1b\xb6\xab\x0f\xa1\xbe\x43\x8e\x5f\x59\x20\x32\x04\xa1\xaa\xb9\xd0\xb0\xd5\x67\xd7\xe7\x97\x97\x24\x9b\xd3\x9a\x66\x9a\xd5\x8a\xb0\x4f\x19\xab\x34\x39\xfe\xff\x1d\x3f\xdc\x6f\x24\x82\x06\xdc\xb7\xcb\xdd\xf8\xce\x01\x09\x94\x37\x62\xc2\x70\x76\xbf\x3a\xf9\xee\xec\xc3\x7f\xbd\x3f\x7b\x77\x71\x0a\x32\x0b\xfb\x54\x51\x91\xb3\x3e\x1e\xb4\x51\x2e\xc4\xa7\xaa\xd9\x82\xcb\x46\x15\x4b\x4f\xc2\x37\xdf\xb5\xd5\x4b\x66\xf0\x4f\xcf\x28\x66\xbf\x2d\x7a\xda\xdc\x29\xe8\x59\x68\x0b\xfd\xad\x19\xb0\x66\x4a\x16\x0b\x96\xf7\xa9\x57\x20\xd8\xd2\x6d\x47\x6b\x68\xad\x1a\xed\xb4\x48\xce\x76\xda\x88\x6c\x4e\xc5\x8c\xe5\x13\xf2\x46\x36\x66\xb4\x5f\xfd\x0a\xb6\xac\x66\x79\x93\xf5\xee\x18\xaa\x00\x51\x62\xfe\xd5\xc8\x71\x18\x86\xae\x2b\xac\x9e\xa6\x32\x5a\xb9\x4d\x0d\x4f\x45\x2d\x85\xa6\x9f\x5e\xc7\xd4\x61\x3b\xfa\x55\xf0\xe1\x91\xab\x8b\x27\xcd\xf4\x90\x1b\xc3\x15\x15\x50\xd2\xac\x20\x47\xe1\xdb\x7d\x7d\x5f\x98\xf9\xb1\x3c\x84\x1d\x0c\x6d\x64\x0b\x56\x83\xf6\xc9\x42\xce\x88\xd4\x6c\x46\xeb\xbc\x60\x0a\x82\xea\xee\xe6\x0c\x8a\x14\xa2\x28\x8d\x07\xd5\x33\x16\xf3\x9a\x32\x21\x7b\x35\x98\x6f\xd0\x8c\x0d\xc8\xfc\xa8\x67\x19\x29\x37\xef\x6d\x2d\x7b\x6a\x5c\x75\x6e\xdf\x35\x44\xed\x78\x63\xff\x26\x70\x3d\xb6\x56\x92\x49\x48\x46\x94\x61\x7f\xa7\xad\x11\xde\x3c\x8f\x30\xc4\x47\x2b\x0b\xe2\xad\x05\x99\x14\x53\x3e\x7b\x47\xab\xaf\xd8\xf2\x03\x9b\x26\x06\x10\x22\xe7\x6f\xf5\xdf\x80\x2c\x0d\xf9\xc1\x0e\xfb\xf9\xd6\x3d\xc6\x8b\xc5\xd8\x64\xd2\x4c\x2a\xd1\x86\x94\xb5\xca\x75\x28\x83\x58\x39\x61\xe7\xdc\x3c\x89\xa2\xa0\x1b\x27\x17\x2d\x71\x86\x14\xd5\xa2\x82\x68\x1b\xc3\xc7\x96\xe5\xe5\x8a\xb0\xe9\x94\x65\x9a\x2f\x58\xe1\x43\x99\x6d\x05\x4d\x1b\x5a\x7c\x43\xb3\xdb\x3b\x5a\xe7\x0a\x6a\x32\x52\xcd\x6f\x78\xc1\xf5\x32\xa6\xde\x25\x36\x2b\x35\xd9\xe8\x67\xa7\x98\x17\x4a\x53\x40\x5f\xae\x72\xa3\xd9\x61\x94\x2b\xa8\xb3\x8c\xe3\x6d\x74\x71\xc3\xd1\xc3\x41\xf1\xc0\x8c\xd5\x86\xc0\x15\x4b\x72\x57\xcb\x78\xd9\xef\x9d\x84\x80\xe1\xa9\x7c\x4d\xe6\x5a\x57\xea\xf5\x8b\x17\xad\x6c\x36\xe1\xf2\x45\x2e\x33\xf5\x22\x93\xc2\xf0\x18\xea\x85\x5c\x18\xba\xc8\xee\x5e\xdc\xc9\xfa\x96\x8b\xd9\xd8\x2c\x60\x8c\x17\x48\xbd\x00\x61\xfb\xc5\x2f\xe1\x7f\xfb\x80\x32\xe2\x9c\x87\x5e\x93\xa3\xa3\x88\xf7\x65\x85\xe2\xc1\x16\x90\x79\x0d\x1a\x84\x65\x87\x8c\x78\xc4\x62\x48\x04\xd7\x0a\xee\x95\xb3\x82\x58\x2e\x24\x61\xd9\x37\x52\x16\x8c\xf6\xbb\x73\x3d\x46\xf5\x09\x60\x9f\x8e\x55\xa3\xee\x65\x8b\x7a\xf1\x72\xd9\xeb\x59\xc9\xfc\x35\x51\x4d\x55\xc9\x5a\xab\x56\x2a\x35\x40\x31\xea\xfe\x09\x7a\x99\x11\xf9\xc1\x3f\x44\xb7\xb1\xef\x8f\xff\xf4\xd5\xc5\xbf\xff\xf9\xf8\xef\x3f\x84\xbf\x05\xf2\x69\xf0\x42\xc4\x34\x55\xc5\xb2\x89\x90\x39\x7b\x0f\x33\x80\x3f\x2d\x77\x77\x96\x65\xb2\x11\xda\xfe\xa0\xa9\x6e\xd4\x64\x2e\x95\xbe\xbc\xf2\x7f\x56\x32\x5f\xfd\x2b\xc2\x88\xba\x47\xba\x02\x7b\x7d\x45\x75\x44\x6a\x80\x24\xea\x42\x2b\xfe\x1d\xab\x55\x44\x32\x0c\x6c\x1d\x78\xb1\x5f\x86\x25\x77\x4b\x0a\xff\x7c\xeb\xa6\x6b\x70\xef\x5d\xcd\xb5\x06\x9f\x46\x9b\x8d\x40\x4e\x47\xee\x4a\x23\x23\xb5\x78\x95\xa4\xb8\x8d\xc6\x1c\x7e\xd7\xb6\x58\x1c\xcc\xde\xae\xcc\x6b\x4e\xac\x47\xe7\x9a\xbe\xf1\xec\xea\x92\x2c\x70\x37\xf6\xb0\x90\xc7\xa1\x82\x82\x6d\xc5\x62\x45\x21\x83\xb7\xbe\x77\xbb\x35\x01\x4b\x66\x19\x53\x98\x41\xcc\xa6\xd8\x7a\xad\xe8\xf3\x71\x21\x16\xa6\x6f\x45\xa6\x8c\xea\xa6\x66\x64\x46\xb5\xcb\x2c\xc2\x84\xe1\x6f\x23\xf4\x93\x4f\xcc\xe7\x41\x3d\xdd\x98\x2b\x6b\x5e\x5c\xc8\xa2\x29\x01\x59\x3d\x0b\xfe\x31\xc1\x28\x80\x8c\xa6\xe1\x08\xec\xb5\xf0\x87\x4e\xce\xcc\xa5\x5f\x80\x2b\x09\xbe\x83\xa5\xd3\x17\x60\x6d\x0d\x93\xac\x28\x4d\x6b\x9d\xa0\xbb\xf6\x7e\xe3\x4e\x0b\x60\x87\xa7\x04\xf3\x19\x60\x51\xf4\x9d\xeb\x52\xda\x86\x99\x84\xc8\x59\x51\xcd\xc1\xd0\x37\xf3\x7c\xea\x46\xc8\x1d\x79\xcf\x32\xc5\xff\x09\x92\x57\xc1\x4b\xae\x91\x5d\x7c\xf5\xc5\x1f\x83\xc9\xec\x05\x11\x3e\x82\x25\x8a\x86\x84\x4d\xbc\x93\x01\x83\x07\xd8\x26\xef\xb9\xe2\xde\x8b\x77\x69\xcb\x25\xb3\xe2\x2b\xf8\xb5\x98\x5e\x5a\xe8\x5b\xd0\xda\x49\xb7\x55\x73\x53\x70\x35\x8f\x37\x8d\x5f\x4e\xfd\x6e\x99\x3e\x14\x03\xc7\x00\x5d\x37\xcc\xdb\x40\x5b\xbc\x6f\xd6\xb4\x32\x93\x04\x23\xd6\x46\x9d\x6a\x27\x85\x53\xab\x2e\xbe\x02\x43\xa7\xd7\x67\xa9\xc9\x2f\x1e\xb5\x9e\x29\x2d\xd4\x6e\x17\x64\xc4\x99\xba\x96\xb5\x57\x61\xd5\x4c\x37\xb5\x68\x7d\x81\xae\x64\x4e\xb2\x9a\x61\xe4\xc7\x1e\x18\x66\x12\x0a\x0a\xb0\xbe\x88\x4f\xaa\xed\x98\x83\x24\xf4\x68\xc6\x08\xf1\x23\xa2\x7a\x44\x7c\xa8\x99\xeb\xc6\x8a\xc4\x12\x4c\xd3\xde\xd9\x0b\xe5\x73\x19\x99\x23\x75\xf9\xad\x2c\xb4\x40\xa7\xc7\x93\xc9\x31\xce\x44\xd6\x88\x6e\x51\x0a\x35\xcf\xf7\x82\x72\x5a\x82\xb6\xa5\xfa\x42\x04\xc2\xbf\xdd\xb2\xd2\xf0\xed\x6e\x59\x4e\x7d\x99\xc2\x63\x1c\x90\xf1\x72\xa9\x75\xde\x1e\x44\x16\x73\xa3\xb9\x0d\xf3\x88\xe2\x35\xfa\x0e\xf9\x44\x3f\x48\x78\x94\x35\x27\xfe\xd8\x30\xa5\x63\x84\xf6\x13\xfc\x6c\x92\x55\xcd\xc8\x76\x31\x29\x59\x29\xeb\xa5\xff\x93\x55\x73\x56\xb2\x9a\x16\x63\xa5\x65\x4d\x67\x6c\xe4\x07\xc0\xcf\xfc\x5f\xf8\x61\x67\x0a\xeb\x5f\xa3\x85\x20\x6b\xea\x9a\x09\x5d\x2c\x9d\x6c\xf9\xc4\x7c\x9f\xdb\xc7\x1d\x33\x69\xfe\xb8\xb6\xbc\x2f\xc7\xde\xf8\x86\x3a\x39\xbf\x2a\x50\x11\xe3\xed\x51\xa3\x96\x10\x80\x0d\x00\x09\xa5\x3a\xde\xc7\xed\xcf\xf9\x82\xab\xad\x22\x7f\xae\xbd\x07\x15\xb8\x1b\x35\xba\x6a\xb4\x4d\x1f\xe9\xa5\x8a\x4f\x95\x54\x60\x1d\xf0\xd9\xab\x3a\xe2\xe4\xab\x18\x2d\x11\xe0\x7e\xcd\x6a\xf1\x9a\xfc\xe7\xc9\x7f\xfc\xe6\xa7\xf1\xe9\x5f\x4e\x4e\xbe\x7f\x39\xfe\xd7\xbf\xff\xe6\xe4\x3f\x26\xf0\x8f\x5f\x9f\xfe\xe5\xf4\x27\xf7\xc7\x6f\x4e\x4f\x4f\x4e\xbe\xff\xea\xdd\x5f\x3f\x5e\x5d\xfc\x9d\x9f\xfe\xf4\xbd\x68\xca\x5b\xfc\xeb\xa7\x93\xef\xd9\xc5\xdf\x23\x3b\x39\x3d\xfd\xcb\xaf\xa2\xa6\x47\xc5\xf2\x9b\x08\xac\x81\x6d\xbc\x45\x4e\xce\xf6\xab\x6d\x9d\x95\xb8\xd0\x63\x59\x8f\xf1\xf3\xd7\xc0\x24\x45\x74\xe2\x8e\x6d\x1b\x38\xff\xe0\x6e\x6b\x8b\xf1\x3c\xf1\xdc\x03\x20\x3f\x86\x00\x28\x96\xd5\x4c\xef\xca\xbc\x81\xbd\x39\x6e\x70\xc5\xed\xed\xb9\x4b\xc2\x87\xb4\x78\xf8\x54\x82\xb0\x5f\x2d\x67\x65\xd8\xad\x49\xcb\x30\x51\x82\x72\xa9\x7d\xef\x96\x45\xc6\xa2\x0e\x16\x92\xc1\x42\x32\x58\x48\xba\x52\xfe\x35\xde\xa1\x67\x6e\x1e\x61\x62\xf1\x90\x95\x3d\xc1\xd9\xeb\x2d\xe4\x05\x0e\x1d\xbe\x1c\x73\xad\x25\xa9\x64\xd5\x14\x54\xdf\xe3\x43\x92\xe0\xfd\xd5\xaf\xe3\xf2\xa8\xec\xfc\xbf\x2e\xdf\x5c\xbc\xff\x78\xf9\xf6\xf2\xe2\xc3\x84\x9c\x15\x45\xa8\x76\xbb\x1f\xe2\x5a\x49\x1d\x39\x6b\x42\xd1\xd5\x0b\xf4\x73\x77\x4e\xa1\xd2\xfa\xd0\x70\xd5\x2a\xea\x30\xdb\x31\x12\x28\xeb\x41\xc1\x85\xcf\x79\x7c\xef\x90\x9e\x61\xf3\xb1\x0e\x6b\x69\xce\xd1\x93\x56\x69\xb7\x4c\x98\xa5\xa6\xb7\xe0\xfd\x93\xb1\x9c\x89\xec\x01\x59\xef\x3b\x8c\x9f\x70\x7b\x76\x63\xc4\x0c\x70\xd0\x43\x8c\x42\xf2\xa6\x2a\x78\x66\xce\xc7\x6b\x24\xa3\xfb\xbe\x2c\xcb\x46\x3f\xe4\xc9\xb5\x73\x3f\x3c\x03\x69\xd6\xd7\x23\x70\xc7\x03\xfa\xe6\xc5\x3d\x1f\xeb\xe7\x0d\x95\xe0\xcc\x82\x97\xf2\xfe\xc3\x8f\x62\x09\xe2\x08\xb7\xf7\xe5\xe8\xe5\x74\xd6\x28\x76\x6b\x5c\xed\x52\xea\x07\x7b\xd9\x83\x3b\x4a\x1c\x9d\x4e\xa7\xd1\xdb\xd2\xe7\x43\xd2\xe6\x03\xd2\xe5\xed\x69\xf2\xd3\xd1\xe3\x24\x5a\x1c\x4f\x87\xe3\x69\x70\x82\x87\x42\x2a\xdd\x8d\xa7\xb9\xdb\x4a\x42\x55\xcd\xa6\xfc\xd3\x2e\x1d\x4b\xbf\x71\x4a\x0c\xcd\x3e\x69\xeb\xce\x5e\x31\xe1\x83\x9f\x9c\xde\x10\xfc\xd6\x3f\x3b\x3f\x5c\x94\x47\xd2\x11\xe9\xf5\x26\x79\x67\xc0\xa2\x03\x16\xed\xb4\x01\x8b\xf6\x4a\x31\xcf\x09\x85\x0a\x99\xf7\x26\x51\x8a\xbd\x4d\xef\x83\xbe\x56\x72\xab\xa0\x11\xca\x2d\x1c\x4c\x9d\xce\xb3\xb8\x92\x00\xd1\x53\xae\xdb\x00\xb9\xfb\x01\xed\x7a\x43\x8f\x10\xf9\x66\xbf\x3c\x56\x2e\x47\xd8\x4a\xff\x2b\xe5\x6a\x30\x14\xe9\xe1\xb1\x12\x41\x19\x79\xd4\x06\x73\xa9\xbd\xa0\x4a\xf1\x99\x18\x57\x32\x1f\x9b\x51\x5e\x3c\xc8\xcf\x1f\x32\x1a\xc9\xab\xb4\x1f\x7b\xdc\x1f\xbc\xc1\x27\x10\x1c\x0c\x5a\x6b\x34\x0b\xac\x41\xde\x4e\xe0\x52\x54\x45\x08\xa6\xbd\x62\xd0\x23\x0f\xa7\xa4\x82\xce\xd8\xd8\x4e\x76\xec\x27\x3b\xf6\x73\x7b\xc4\x79\xc5\x10\xb3\xac\xa0\xfc\xe1\x78\xdf\x14\x12\x76\x0e\xbd\xd9\xba\x3f\x3e\x20\x7b\xa5\xfa\x86\x93\x57\xb9\x40\x57\x45\xf7\x13\x7e\xfc\xb0\x0d\x1e\x2e\x8b\x4f\xa0\xb8\xe1\x20\x1f\xfc\x3a\xa0\x91\x39\xf0\x51\x0a\x2f\xe0\xc3\x84\xe8\xcd\x52\xd0\x92\x67\x0e\xca\xce\x0a\x08\xae\xe5\x52\x74\xdc\x5e\xe2\x87\xe6\x8a\x70\x0f\x56\xe4\x52\x93\x8c\x0a\xb4\x5c\x5a\x37\x08\x83\x30\x42\xef\x87\x07\xb6\x23\x2a\xb8\x3b\x22\xa4\xbb\x73\xc8\x1f\xc2\x03\x09\xe3\x52\xa4\x60\x84\x09\x5d\x43\xa6\xdb\x2b\x99\x1b\xd2\x32\xe9\xbc\xdd\xe3\xd2\x13\xcd\x87\xc5\xea\xe5\x7b\x82\xe3\xc8\xf3\x61\xe9\x02\x02\x11\x72\xee\x9d\x2d\xad\x64\x3e\xd9\x70\x25\xe2\x4b\x18\x5d\xc9\xdc\xc6\x80\xeb\x0e\xbc\x99\xdb\x02\xa0\x56\xd2\x5b\x17\x99\xed\x8d\x4a\x74\x41\x79\x11\x11\x3c\x44\x20\xe5\xa8\xe2\x39\x23\x34\x06\x77\xfa\x89\xc5\xb3\x43\xd6\x44\xbe\x8f\x43\xf8\x80\x5d\xbb\x44\x5b\xb0\xff\xd9\x5c\x2a\x26\xe0\xbe\x51\x37\xb6\x2f\x14\xe8\xc0\x3e\x47\x1c\x19\xc3\x72\x5e\x4e\x91\xcd\x1d\x11\xb6\x60\xf5\x52\x43\xb9\x2e\x97\xd4\x15\xbb\x31\xe3\x97\x34\x0f\x76\x7d\x44\xa4\xe1\xcb\xee\x78\x94\x13\x0f\xe0\x09\x9c\x9f\x6a\x0a\xed\x79\x6d\x3b\xfb\x9d\x9d\xc6\x7a\x00\xbb\xe1\xe2\x6e\x7b\xb3\xf5\xf6\x5e\xc8\xfb\x22\xe3\x4b\x5a\xdd\xfb\x15\x7a\x5d\xec\x8a\x48\x7d\x8d\x5e\x21\xf8\xc9\x8d\x35\xbe\x97\xf4\x13\x2f\x9b\x92\x50\xf4\xbb\x91\xd3\x0d\x0c\x44\x54\xb2\x80\x5d\xb0\x03\x1b\xd8\x00\x75\x1f\x1f\x40\xe2\xd1\x6a\x7a\x4a\x9b\x67\xea\x36\x10\xe5\x2e\x90\xe6\x26\x90\xe0\x1e\xb0\xb5\x5b\x80\x73\x00\xda\x15\x20\x5b\x94\xb6\x06\xca\x5c\xf4\x82\xb2\xa3\xaf\x0f\xc3\xf2\xe5\xb4\x1d\x83\x2b\x22\x4b\xae\xb5\xf5\xb3\x09\x28\xc0\x88\x70\xdd\x71\x4a\xb1\x17\x8c\x4f\x91\xd0\x70\x45\xd8\xa7\xaa\xe0\x19\x07\xdf\x26\xe7\x7f\xf9\x30\xa3\xe7\x71\xa2\x4d\x55\xc5\xcb\x0a\x93\x55\xc1\x45\x19\x3b\x1e\xd2\x86\x7d\xfa\x59\xda\x38\x65\xf6\x29\x63\x2c\xb7\x13\x19\xee\xeb\x70\x5f\x93\xef\xab\xda\x91\x2a\x22\x54\x43\xb4\x79\x73\xbc\x3a\xc2\x5c\x25\xc8\x69\x83\x8a\x01\x07\x5d\x0f\x5d\xcc\x0b\x97\x55\xfd\x03\x03\xf3\xde\x35\xd3\xca\x66\xe8\x81\x9e\x1e\xd2\xab\xad\x65\x69\xf6\x99\xd8\x5d\xba\x2b\x0a\x8a\xc3\xe0\x8d\x36\xbf\xc9\x03\x52\xb2\x5e\x65\x6f\x41\xd7\xc1\xca\xaa\xa0\xba\xd5\x84\x3c\x22\x11\x4a\x0c\x13\x9f\x92\xc8\xf8\x69\x53\x17\xef\x47\x6c\xeb\x65\x83\x9f\x30\x05\xf1\xb6\x49\x87\xf7\x20\x30\xf6\x3b\x71\x45\x26\x0f\x8e\x17\x2c\xa3\xbc\xbc\xf6\x9d\x12\x38\x41\x0c\x8b\x4f\xfb\x9b\x2e\x87\xed\x39\xb5\xef\xbe\x92\xf9\x26\xec\x5e\x6c\xc2\xde\xf4\xbd\x3b\x50\x52\xde\x83\xa7\xe1\x3d\x64\xe2\xdd\xa4\x54\xbb\x29\xc9\x13\xa3\x13\x27\x6e\xef\x95\x9b\x92\x30\x71\xcb\x0f\x23\xd3\xe2\xa6\xc0\xee\x81\x53\xdf\x1e\x38\xd9\xed\x53\xa4\xb7\xdd\x9b\xfc\x10\x01\x9a\xe9\x96\x3d\x2d\x0b\x5b\xd7\x27\xce\xd2\xf3\xb1\x7d\x1f\xb6\xa3\x75\x02\x0f\x7a\x3a\x8c\x5b\xda\x83\x90\xfd\xd1\xf1\xb9\x06\x3b\xb5\x93\x06\x18\xd7\x9a\x66\x73\x9b\xa4\x16\x7f\x31\x90\x20\x96\xc4\x00\x81\x46\x4a\x6e\xf3\x64\x3e\x74\xce\x73\x46\x74\xcd\xab\x82\x91\x3f\xf9\x0b\x31\x42\xdb\xfe\x9f\x83\x54\x61\x2e\xa9\x68\x0b\x8c\x7f\x72\xff\xfa\xf3\x23\x33\xd4\xc5\x31\x39\x38\xa5\x5d\xf2\xaa\x17\xd0\x23\xe1\x22\x07\x0f\x46\x64\x85\x70\xf3\x70\x30\xb3\xb5\xb0\xee\x89\xcd\xee\x89\xa9\x72\xad\x09\x16\x5c\x1d\xdb\x97\x7b\x59\x07\xf0\xf0\x6c\x55\x13\xde\xc3\xc1\xdf\x61\x46\xde\xcb\x6b\x6b\xb6\x1d\x91\x2b\xd0\x0e\xb7\x4f\xe0\xce\xbf\x97\x17\x9f\x58\xd6\xe8\x1e\xa7\x9b\x48\xf4\xdf\xcb\x33\xa6\xed\xe7\x57\x2d\x43\x89\x1b\xd3\x61\x28\xdb\x8b\x15\xb2\x94\x0f\x6e\xec\x2d\x5b\xf6\xee\xaa\x65\x12\x2c\x33\x6b\x55\xe3\x1e\x46\x1d\x91\x47\xbe\xe1\xff\x38\x53\x5e\x79\xc3\x05\x4e\x05\x07\x76\xe7\x0c\x63\xbb\xf3\x30\x12\x48\x51\x44\x4c\x22\x72\xb7\xe3\x38\xde\x54\xe7\xad\x78\x4e\xd7\xd3\x8b\xbe\x2d\xdd\xc4\xdf\x06\x4c\xed\xc5\x8f\x0d\x2d\x26\x9d\xd4\x6d\xf8\xa8\xef\xba\x59\xb7\xe6\x55\xba\x79\xc7\x8b\x3c\xa3\xb5\x8d\xad\x03\xf4\x43\x94\xb4\x66\x58\xc0\x7e\x59\xaf\x03\xbb\x43\x80\x2d\xf0\x28\xf4\xe5\xad\x68\xad\x79\xd6\x14\xb4\x26\xe6\x8e\xcf\x64\x1d\x95\x9b\xad\xf7\x30\x5b\x68\xbe\x66\x99\x14\xf9\x4e\x85\xe8\x8f\xab\x9d\xaf\x7a\x2b\x57\xac\xe6\x12\x73\x05\xf1\x92\xad\x5e\xaf\x93\x8e\x03\x4a\x9f\x1c\x36\x75\xc8\xce\xe3\x96\x51\xa8\x19\xed\xda\x94\xb1\x04\xdd\x69\x40\x70\xfc\x6d\x9f\x90\x2f\x97\x4e\x45\xdb\xc7\x90\x73\xed\xf2\x09\x28\xa6\x5d\x3e\x45\x77\x15\xed\x49\xb6\x68\x64\x2a\x6b\xc8\x53\x78\x92\x4b\x8c\xa3\x5f\xf0\x4c\x9f\x4e\xc8\xff\x9f\xd5\x32\x22\x11\xa5\x60\x33\x8c\xe5\xb6\x17\xdb\xeb\xa3\x6a\x46\xad\x97\xfe\x4b\x72\x02\x9d\x12\x5e\x96\x2c\xe7\x54\xb3\x62\x79\x8a\xea\x29\x46\xd4\x52\x69\xd6\x63\x9b\x8b\x57\x2b\x62\xe8\x25\xbc\xfb\xfb\xdf\x3d\xf0\xe6\x1e\x12\x88\xda\x24\x85\xed\xc6\xa2\xa7\xdc\x0a\xf4\xf8\xd4\xda\xbd\xf2\xfe\xbd\xf2\x59\x18\x8e\xd0\x26\x37\x77\xb8\xd9\xc3\xd6\x3f\x0c\x80\x52\x52\xb3\x19\xdc\x4f\xbc\x73\x8f\xbc\x9d\x18\x9b\xfb\x4e\x36\xe2\x7e\x1b\x48\x67\xdf\xbe\xb6\x2a\xb8\xef\x82\x0f\x53\x53\x0b\xef\x96\x21\x0c\x66\x12\x58\x5d\x28\x46\xeb\x03\x07\x66\x10\x1b\xbe\xd5\x06\xb1\x44\x18\xcb\x77\x98\x2e\x18\xe6\xd2\x93\x3f\x6b\x27\x49\x85\xfd\x40\xbb\xbc\x0a\x57\x2b\x19\x24\x82\xb4\xb6\xae\x2c\x6b\x90\x25\xa1\x85\x60\x98\x0c\xcb\x6d\xd8\x63\x1f\xda\x09\x32\x46\x1c\xbf\xde\x8d\x37\x33\xee\x46\x2d\x2b\x3a\x83\xcb\xba\xcb\x4d\x59\xed\x9b\xe4\x4c\xb3\xba\xe4\x82\x29\x32\x97\x77\xf8\x3b\x32\x03\x95\x7d\x8b\xe5\xad\xe7\xc1\x5c\xf6\xee\x08\x96\x60\x6d\x13\x08\x23\xf6\x00\x87\xd1\x3b\xba\x24\xb4\x96\x8d\xe8\x4d\x47\x00\x5c\xb4\xa7\x1c\xef\x56\x26\xfd\x5e\x0a\xe6\x9d\x51\xfa\xa8\x6c\x87\xb4\xdd\x30\x4d\xcd\x85\x7f\x35\x79\xf5\x32\x6a\x0e\x1f\x58\xd6\xd4\x8a\x2f\xd8\x07\x46\xf3\x6f\x8c\xc4\xdd\xa6\x83\xb9\x9c\x5e\x49\xa5\xf8\x0d\x66\xe1\x31\x0c\x12\xe6\xd8\x5a\x9f\xb0\xe7\x50\x61\xe6\xb2\x26\x8d\xf0\x22\x42\xcf\x2c\x2c\x99\x0f\xad\xa2\xa6\x93\xd3\x9d\x40\x5a\x62\x32\x6f\xd8\xcb\x15\xfb\x8c\xf3\x32\x77\xb8\x6a\x27\xf3\xaa\xed\x66\xef\x12\xf2\xdf\xe1\xb5\x86\xbe\xc7\xa0\x3b\xe1\x53\xb0\xda\x8d\xf0\xd1\x5d\xcd\x35\x0b\xe8\xd6\x09\x66\xfb\xe9\x1e\x56\xcf\xb6\x77\x53\x1d\x43\x07\x31\xfb\xd1\xef\x07\x5d\xaf\x82\xe1\x2e\x77\x66\x1d\xc6\xdb\x82\x3c\xce\xd7\xbb\xdd\x35\x8b\x21\x5a\x7c\x39\xa7\x22\x2f\x7a\xe1\xd8\xaf\xa0\x58\xf6\x66\x61\x02\x6f\x81\xf6\xba\xc1\x3e\x8e\x42\x26\x75\x4e\x0d\x5f\x09\xbc\x24\xe8\x6d\x45\xee\x6f\x58\x70\x58\xa9\xe3\x20\x30\x20\xca\x0a\x91\x86\xbd\xee\x6f\xb8\xb2\xd7\x1b\x34\x25\x40\xb9\x2d\x7f\x5b\xd2\xde\x0a\x28\xc1\xfa\xdb\xcd\x9c\x58\xf6\x6a\xc3\x68\x2d\x72\x59\x19\x6f\xdb\xb1\x46\x06\xde\x91\x25\xf7\x59\x61\x1c\xf3\xdb\x22\xec\xda\x70\x1f\x25\x6b\x27\xd6\x33\xd4\xea\xb4\x3d\x0a\x5c\x9b\xf3\xe6\x59\xf9\x49\xf5\x8c\xd3\x3f\xe5\xae\x3c\x83\x0a\xb5\x4e\x5a\x30\x4d\x31\x5c\x37\x22\xa7\xfd\x4a\x52\xae\x19\x13\x20\xad\x80\x16\xce\x29\x92\xac\xef\x1c\x55\x52\xc4\x00\x5a\xcf\x21\x1b\x3c\xd3\x4f\x3e\xf0\xb3\x9e\xc1\x80\xc6\x9c\xc8\x7a\xe5\x36\x38\x01\x6c\x03\x25\x49\x9d\x3d\x10\xe6\xb6\x5f\x04\xaa\x40\xd0\x32\x1b\xd8\x0a\xff\x72\xea\xaf\xce\x6e\x82\xbd\x9a\x9b\x7d\xb3\x8a\x1b\x92\x8d\x85\x20\x77\xac\xee\xe7\x1a\x13\xe8\xc3\xd1\x11\x39\xc1\x7e\x8e\x15\xa9\xa5\xd4\xbb\x21\xea\x76\x7f\x2e\x3e\x55\x3b\x55\x42\x5d\xd8\xe2\x01\x31\x99\xd9\x76\xb4\x59\x5f\xb2\x39\x5d\x30\x45\x14\x2f\x79\x41\xeb\x02\x32\xb3\x5f\xe3\xf2\x20\x04\x6d\x63\x2e\xc0\x88\xd2\x19\x81\xc6\x3b\x9c\x67\xd0\xdd\x3e\xcf\x91\xb8\x35\x98\x23\x02\x7a\xe3\xd6\x64\xe6\x58\x36\xba\xa1\x45\xb1\x24\xec\x53\x56\x34\x06\x5f\xee\x44\x58\xde\x46\x4e\x5e\x15\x91\x2b\xeb\xa8\x7f\x40\x01\xb9\xab\xf2\x34\xfc\x6a\xee\xc0\x09\x04\x62\x34\x9b\x80\x0d\x04\xa2\x1e\x68\x96\x31\xa5\x5c\x0e\x83\x65\x98\x87\xc1\xaf\xe1\x73\x29\xb5\x43\xef\xd4\x45\x41\x95\xe6\xd9\x97\x85\xcc\x6e\xaf\xb5\xac\x77\xaa\x2b\xda\xd4\xff\x4a\x01\xa3\xb3\xbf\x5d\x1b\xe4\x7d\x1b\x24\x8e\xb2\x8e\x98\xa1\x61\x8a\xf6\x0c\x74\xdb\xdc\xb0\x82\xe9\x63\x05\xf2\x23\x29\x69\x36\xc7\x32\x5a\x39\x66\x20\x75\xa9\xc9\xac\xfa\xfa\xc1\x23\xc2\xf6\xc6\xcc\x12\x0a\xd3\xbd\x36\x73\x5c\x5f\x06\xfa\x9b\xd9\x77\x30\xbb\x07\x6a\xb0\xc0\x18\xe8\x02\xe9\xb8\x18\xeb\x9a\xf5\xb1\x53\x1b\xf7\x09\x42\x52\x6d\x6d\x19\x5e\xa3\xa7\x9b\x9d\x3f\xbb\x51\x93\x4c\xf1\x09\xbd\x53\x93\x4c\x96\xe4\xfc\xfa\x92\xe4\x35\x5f\xf4\x87\x38\x24\xba\x90\xda\xa4\x7f\x2f\xec\x0d\xff\x25\xbd\x53\x0c\x27\x7a\x63\x26\x0a\x25\xd0\x22\x70\xc7\x4e\x9d\xa2\x70\x2e\x97\x6f\x1e\x7c\x31\xde\xe1\x69\xaa\x3e\x9a\x39\xf6\xbc\xb5\x8d\x0b\x0c\xf6\xec\x54\xa5\x53\x5e\x30\x54\x01\xe3\xc9\x76\x53\x68\x02\xd0\x2f\x65\x43\xee\x28\x5a\x33\x80\x80\x45\x05\x53\xf3\xea\x35\xb9\x10\xaa\xa9\x59\x6b\x24\x5b\x1d\x6c\x13\x4b\x0e\x37\xc5\x82\xac\x98\x45\xa9\xa7\xb1\x5d\x7c\xa2\x65\x55\x30\xf5\x9a\x1c\xb1\x4f\xfa\x77\x47\x23\x72\xf4\x69\xaa\xcc\xff\x84\x9e\xaa\xa3\x09\xb9\x2c\xbd\x0b\x35\x17\x53\x56\xd7\x3e\xfe\x1a\x3f\x30\x2c\x79\x47\x8a\xea\x1f\xf3\xd0\x70\x4b\xd2\x9c\x5f\xc0\x3c\xd4\xaf\x49\x23\x5b\xc1\x91\xef\xdc\x81\x52\xf0\x40\xec\x06\x88\x2e\xa7\xce\x63\x1e\xe5\x2a\xcb\xc2\xc3\x80\xb6\x1b\x03\x36\x76\x1c\x43\x79\xd2\x00\xe5\xad\x4f\x77\x49\x5e\xe4\x6c\xf1\x42\xe5\xf4\xd5\x08\xa6\xaa\x6c\xc8\x77\x77\x5d\x54\x91\xa3\xb8\xe2\x03\xd7\x8e\x73\x1b\x85\x3b\xd1\xf6\x64\x10\xb1\x1b\x12\xfc\x5e\x5e\x1e\x81\xe8\x62\xc6\xce\xa8\x20\x05\xa3\x0b\x2b\xce\x21\xca\x58\xa2\x81\xa1\x97\xc3\x4a\x31\xd6\x90\xae\xc1\xe6\xb7\x5f\xf4\x8a\xd7\x31\x3a\x18\xb2\x15\x34\xb9\xbe\x9d\xd5\xa6\x6e\x6c\x2e\xa7\xa9\xac\x33\x2f\x73\x5a\x2d\x0d\xd3\x80\x1b\xb8\xe8\xd8\x35\x9e\xf7\x85\x8d\x4b\x55\xe6\xa8\xc8\x5e\x7c\x1f\x6d\xdf\xa0\x41\x16\xfc\xc7\x86\x91\xcb\x37\xbe\x22\x0b\xab\x15\x57\xda\x08\x14\x79\x87\xef\xe1\xc8\x0c\x9d\x9c\x95\xf4\x9f\x52\x90\x8b\x2f\xaf\x6d\x47\x11\xa0\xf8\xac\x11\x24\xfd\x67\x53\x33\xc3\xe3\xed\x94\xb5\x74\x9d\xae\xf2\x93\xe6\x39\x79\x43\x35\x45\xb6\xd2\x06\x16\x89\x96\xe4\x19\xa6\xf0\x86\x8b\xdc\xfe\xb4\x25\x4b\xe8\x87\x4f\xe2\x03\x83\x69\x9b\xcd\xeb\x5b\xe3\x46\xe6\xcf\x40\x0d\x72\x7f\xa6\xaf\x24\xfe\x6f\x0f\xdc\x98\x99\x4d\x44\x79\x0c\x7c\xf1\xdb\x0f\x97\x3b\xe2\xda\x32\xe0\xf0\x67\xef\x64\x9e\xca\xba\x1d\x07\x9f\x3a\x82\xfa\x6f\x06\x2e\xce\xf1\x39\x29\x4d\x9f\xa0\xb8\x1a\x81\xf2\x96\x7c\x03\xba\x4d\xf8\xe7\xdf\x6a\xae\xd9\xa4\x3f\xa3\x6d\x02\xeb\xe0\x36\x30\x71\x19\xee\x33\xb7\x84\x30\x17\x4f\x6e\xa0\x1f\x90\x8b\xe5\x0f\x6e\x0a\x79\x43\xec\x95\xdf\xf5\xdc\xbf\xfd\x70\xb9\xc5\xd4\xbf\xfd\x70\xe9\x66\x6e\xfe\x29\xa7\x87\x9b\xf4\x21\x18\xfe\xb7\x2b\xfc\x77\x0a\x2f\xd6\xa6\xc2\x5d\xe5\xe2\x77\xc9\xc2\x4f\x0e\xc6\xbc\x6f\x97\x62\xc8\x8c\xd5\x27\xf4\x73\x11\x91\x0c\xb9\x7b\xf9\xcd\x37\x84\x7d\xaa\x10\xa3\x06\x2e\x93\xd7\x73\x0a\xf9\xab\x5d\xaa\x4c\x04\x3f\x03\x8f\xca\x90\x6c\x07\x88\x84\x62\x95\x32\x43\x0d\x50\x4b\x9f\xbf\x76\x8e\xe0\xfe\x8b\xcd\x1f\xbc\x83\x00\xcc\xfc\x35\xd2\x00\x82\xf1\x98\x79\x00\xf7\x27\x68\xae\x10\xfe\x27\x1b\x77\x8f\xd9\xae\x14\xd3\xa7\x93\x8e\x6e\x5d\xc1\x94\x77\x8a\x8c\x0e\xc2\x78\xae\x59\x30\xc9\x89\xf9\xed\x05\xd8\x47\x4f\x27\xad\xc5\x0c\xb2\x43\xb4\xbc\x69\xc4\x18\xe6\x52\x7c\x78\x34\xf7\x9a\x96\xf2\x36\xba\xb8\x09\x9c\xbb\xc1\x0c\x3b\xe7\x83\x4c\xa7\x1b\xf9\x20\xf8\xc1\x15\xc4\xdf\x27\x2b\x04\x03\x6d\xc1\x0a\xc1\x77\x5b\xb3\x42\x50\x5f\xe4\xd9\xb0\x42\x98\x23\x30\x8a\x19\x82\xab\xdb\xfb\x66\x3c\x3b\x74\x90\x7b\x9b\xff\x9c\xee\x6d\x7b\x58\x89\x7b\xd6\x7e\xe8\x18\x18\x9f\x20\xc7\x25\xb7\xef\x04\xa4\xe2\x45\xbc\xb6\xd4\xc0\x16\xb9\x44\x76\xcd\x5c\xbf\xaf\x22\xf2\xf4\x27\x20\x70\x0f\x58\xa9\xab\x72\xdf\xb9\x45\x21\x91\x82\xc7\x24\xaa\xfc\x5d\xe4\x24\x33\x56\xcd\xa7\x3b\xf5\x72\x36\x3d\xbe\xbd\xee\x9a\x71\xce\x59\x35\x27\x6f\xaf\x37\xa0\x3c\x38\x1c\x58\x96\x42\xe3\xce\xb1\x22\x05\x9f\x32\xf0\x49\x48\xc0\x7a\xe7\x38\x6a\x07\xe5\x79\x67\x34\x87\xe2\x70\xb1\x5e\x05\x2b\x24\x29\xa4\x98\x19\xe6\x20\xae\x6a\xce\x1e\x90\x54\x29\x05\xd7\xb2\x7e\xd8\x1b\x22\x1e\xf1\xb8\xee\xf6\x81\x78\x5c\xdf\x66\xeb\xda\x02\x23\xef\x82\xa7\x94\x64\xb2\x28\x58\xa6\x6d\xb9\x53\x38\xf6\xa8\x15\x62\xdb\xa0\x34\x61\x56\x67\x39\xb9\xfd\x23\xa8\x4d\xac\x82\xe4\x05\x1e\xe5\x8b\x0f\x17\x67\x6f\xde\x5d\x4c\xca\xfc\x97\x73\x79\x37\xd6\x72\xdc\x28\x36\xe6\xfd\xc5\x3b\x3e\xe3\xe8\x4c\x12\x5d\x8f\xad\xcb\x6a\x57\xb6\xce\xac\x4b\x0c\xfc\x9a\x7c\xab\xd0\x7b\xc3\x7b\xee\xb0\x1c\xac\xd9\x23\x52\x53\x9b\xef\x93\xe2\x55\x9d\x36\x45\x81\xa7\x69\xee\xd1\x28\xd4\x47\xbf\xf8\xfc\x18\xde\xce\x26\x3c\x7b\xee\xf7\xf0\xd7\x22\x85\x62\xf7\xf3\xcf\x64\xab\xc3\x6a\x7b\xef\x1e\xd7\x75\xe7\xb9\x76\x75\x03\xb5\x84\x50\x31\x08\xea\x36\x8c\xed\xb7\x8a\xd5\x5d\x30\x65\x3a\x83\xdd\x79\xd1\x28\x56\x4f\xb0\xfb\x67\xb8\xf7\x71\x5c\x45\x5c\xf6\x6b\xf2\x88\x9d\xff\xc0\xa6\x9b\x36\xde\x3e\xf6\x1e\x37\x8e\xf3\xa7\x8d\x9e\x33\xa1\xb9\xcd\x6e\x69\x39\xaf\x8d\x27\x81\x81\xf9\xcf\x70\xeb\x23\xeb\x3e\xa5\x55\x69\x1a\x2a\x1b\xb5\x6d\xa8\x6c\xf4\x3c\x2a\x1b\x3d\xa6\x5c\x9b\xc1\x9e\xfb\xc0\x3a\xa6\x5f\x48\x14\x17\x72\x27\x3e\xf5\x55\x4d\x73\xa9\xf0\x1d\xb3\x87\x1d\x7c\x42\xf3\x92\xc7\x94\xbd\x7d\x76\x98\x3c\xe3\x22\xef\xdb\xcc\x44\xd1\x0b\x7a\xec\x8a\x5e\xf6\x99\x35\xc4\x7b\x27\x2e\xea\xb4\x4c\x98\x49\xdc\x3a\x6c\x75\xfd\xb5\x92\xe4\x2f\x1c\x26\x4d\xe5\x64\xe7\xb6\xb5\xbe\x09\xbf\x07\x8d\x93\xac\x98\x41\x24\xd9\xed\x44\xd6\xb3\xc7\x39\x60\xad\x42\x45\xb9\x54\x3f\x16\x63\x1c\x6b\x5c\xe5\x2d\x58\x1c\x5a\x56\xfc\x99\x78\x5a\x3d\x3f\xe3\xcb\xb3\xf0\x9f\xda\x0d\xd8\x91\x67\x28\x6f\x3d\x7b\x45\xe5\x41\xce\x23\x45\xaa\x3a\x04\x6b\xdf\x52\xda\x4a\x72\x1b\x1d\xed\x0b\xa8\x22\xde\x0a\x6b\x88\x57\xb4\xa6\x25\x83\x5a\x3e\x8d\x75\xdd\xcd\xa4\x10\x31\x1c\x33\x84\x88\x7e\x53\x31\x71\x0d\x08\x7a\x60\xc7\x37\xb7\x81\x1d\x7f\xa0\x0d\xec\xf8\xc6\x76\x10\xb7\x39\x77\xdf\x79\x6e\x44\x7c\xeb\x1c\xda\xc6\x64\x58\x2e\xec\x79\x60\xd9\x7e\xae\xdb\x55\x81\x4b\x60\xbc\xfd\x37\x2b\xac\x75\x5b\x95\x11\xad\x18\x10\xed\xe4\x2b\x9b\xc2\xed\xc1\x6d\xda\x0d\xa7\x18\x8f\xea\x2c\xf8\x6d\xe1\x8e\x15\x05\x19\x41\xf7\x5d\x4a\x52\x9a\x27\x37\x5c\xb7\x34\x42\x31\x4d\x2a\x56\x97\xdc\xe6\xc7\x95\x82\x64\x36\x6e\x10\x38\x3a\xc3\xbd\xd9\xee\x92\xf8\x41\x41\x64\xa6\xa9\xcd\xea\x44\x6e\x98\xbe\x63\x4c\x90\x97\x2f\x5f\xbe\x04\xd1\xe6\xe5\x1f\xfe\xf0\x07\x02\xb9\xc6\x73\x96\xf1\x72\xfd\x45\x78\xeb\x5f\x5e\xbd\x8a\x19\xf4\xdf\xcf\xde\x7d\x0d\x71\x46\x95\x56\xe4\x46\xea\xb9\x1d\xdb\x74\xd1\xe9\x5e\x8d\xc8\xff\xbd\xfe\xe6\xbd\xc3\xd7\x6a\xe5\x57\x90\x7f\xfc\x16\xc5\x8c\x1c\x2a\xa7\x5f\xfe\xfe\x77\xbf\x8b\xfa\x06\x84\x24\x59\x43\x30\x77\x1b\xb4\x57\xb9\x70\x33\x21\xf5\x7a\xaa\x66\xcb\x3a\x45\x57\x8b\x2b\xf9\x6c\x0e\x07\x61\xee\xbf\x14\xd3\x82\x67\x1a\x89\x04\x26\x7e\x40\x90\xb0\xe5\x42\xa8\xcd\xba\x66\x65\x81\x28\x53\x53\xce\x46\xa4\xe0\xb7\x8c\x4c\xd5\x5f\x6b\xd9\x54\x6d\x6e\x44\x5b\xbd\x22\xa3\xc2\x8c\x8f\xc3\xb5\x70\xa7\x58\x74\x46\xd6\x7d\x78\x8a\x47\xda\x8a\xd2\xaf\x1c\x74\xbc\x22\x68\x8c\xb0\x78\xe3\x2d\x5b\x8e\x11\xba\x2b\xca\x7d\xd8\x1b\xb8\xdc\x22\x37\xd1\xe5\x47\xb2\xa8\x42\xd3\x6d\xb1\x4c\x17\x13\x5d\xd5\xf2\x1f\x08\x34\x5c\xb8\xb4\x63\x56\xa9\xa0\xac\x7c\x66\x73\x61\x8a\xd6\x6e\x1d\x31\x92\xcb\xe9\x6c\x78\x4d\x9b\x4d\xba\x4d\x69\x46\x2e\xa7\x61\xe0\x31\x24\x35\xe6\xca\x4c\x02\x6a\x3e\xdb\xb9\x45\x8c\xb2\x61\xf6\xbe\x5f\xb8\x1b\x0a\x21\xac\x11\x6b\xfd\x63\x38\x79\xd4\x18\x40\x1a\x60\xd2\xd4\xa5\xae\x6b\x47\xc1\x50\x59\x1b\x4d\x6d\xdf\x75\xa7\xe5\xb7\x3b\x3a\xe7\xad\x8d\xb0\x65\xba\xb1\x47\x84\x11\xec\x8d\x28\x98\x52\x36\x42\xbb\xa4\xf5\x2d\xcb\x3d\x7e\x9e\x40\xd8\xb3\x8a\xcc\x20\x46\x5c\xee\x6d\xbe\x40\xd7\x88\x92\x2e\x3b\xd9\x6f\xcc\x34\x8e\x27\x93\x63\x44\x2d\xb2\xc6\x80\x7b\xc4\x02\xe6\xf9\x13\xe5\xc8\xed\xdc\x2d\x28\xf3\x4c\x5d\x9e\x63\x48\x5c\x28\x21\x7d\x5c\x1b\xd1\x4c\xed\x5e\xc6\xe0\xbe\x24\xc9\x24\x5e\xb5\x83\x2d\x26\xbf\xb8\x7b\xb3\x7a\x38\x47\x93\x6b\x69\xc2\x51\x64\xb6\x71\x6c\xf7\xe5\x1c\xb7\x7b\x6c\xef\x5b\x2c\x7b\x9f\xcc\x60\x97\x51\xac\xcd\x86\xa9\x46\x8b\x72\x38\x46\xd7\x08\x16\xc5\xdf\xd8\xd4\x09\xfd\x15\x74\xdb\xf6\x24\x6c\x0d\xb6\xa7\x63\x6e\xb0\x5d\x4e\x57\xb3\x4b\x04\xe8\x2d\x64\x34\x1d\x1d\x8a\xc9\x01\xd5\xb6\x43\x70\x2b\xd8\xf6\xcc\xb3\x60\x4b\xe3\x5c\xb0\xa5\xf0\x2f\xd8\xe2\xdc\x4b\xb0\x6d\x7b\xb9\x9c\x3b\x0a\x6e\x8f\x25\x33\x48\x49\xa6\x7e\xf3\x31\x83\x6b\x15\x20\x96\x84\x3b\x65\xc9\x15\x5e\x2b\x7a\xa3\x64\xd1\x68\x1c\x22\xbd\x93\x90\xe6\xc1\x24\x5d\x4a\xf0\x38\x42\xb7\xda\x5d\x40\x29\x81\x13\x41\xf2\x94\xd2\xd7\xe1\x7c\x8d\x86\x6a\xd5\x43\xb5\xea\x7b\xda\xf3\xaa\x56\xed\x3e\xf3\x31\xcc\x9b\x8b\xff\xcb\x9a\x18\xa4\x0b\xfc\xfd\x73\xaa\x62\x8d\x2d\x53\x3c\x45\x31\xa5\x38\x39\x39\xf7\x19\x4f\x9c\x57\xf3\xa5\xd0\xac\x9e\xd2\x8c\x9d\x86\x0a\x2b\x56\xcd\x59\xc9\x6a\xb3\x41\xf6\x3d\x97\xda\xc3\x26\x74\x23\x37\x4b\x07\x7f\x84\x7d\xd2\xac\x36\x9b\xd9\x9a\x52\x0f\x5f\x6f\x07\xc7\xdd\x95\x4e\x0c\x3a\xdb\x8b\x3a\x0c\x7a\xee\x94\x07\xb5\x78\xad\xdd\x3c\xdc\x6b\xdc\x68\x15\xaa\x06\x63\x6e\xf8\xb9\x14\xc0\x3f\x00\x8a\x59\xca\xa6\x46\xa7\x07\x6f\x4f\xcf\x64\x5d\x1b\x9e\x05\x86\xa6\x8a\xd4\x6c\x66\x84\xd8\x1a\x2b\x25\xc3\x1b\x45\x63\x1e\xec\x34\x3a\x6c\xef\xf6\x63\x6f\x28\x7e\x20\x3e\x2e\xa2\x37\xcb\x61\x56\xb5\x5c\xf0\xdc\x31\x98\x21\x96\xe6\x8a\x54\x54\x05\xf9\x68\xa8\x52\x32\xe3\xa0\xa4\x6c\x4f\x30\x62\x24\x94\xf0\x81\x51\xf5\x59\x56\x3b\xf9\x1b\x42\x23\xb6\x84\x7c\xf9\x11\x9e\x70\x09\x47\x22\x64\xce\xae\x9a\x9b\x82\xab\xf9\xf5\x3e\x0d\x89\x9b\xc6\x41\x07\xf0\x35\xcf\xc0\xfb\x0c\x8a\x51\xe6\x4a\xa1\x38\xf0\x85\x86\xba\x19\x26\x96\x1b\xf1\x4a\xc2\x69\xb9\xfe\xc3\x2b\x26\x81\xc6\x17\xcc\xe6\xea\x3b\xbf\x7e\x38\xbc\x19\xdb\xfb\x76\x2d\x36\x03\x15\x56\x64\xc8\xd9\xb7\xa2\xea\x3c\xcf\x68\x71\x7f\x25\xba\xb0\x75\x59\x14\x47\x97\x50\x1c\x70\x79\xab\x10\x00\xb9\x81\x4d\xb7\x47\x3c\x28\xae\x69\xb3\x70\x47\x1b\x75\x57\x36\x58\x91\x52\x62\x02\x1a\x01\x75\xa2\xf1\x25\x28\x4e\xe1\x3e\x08\xb2\xa6\x41\xf2\x5f\xb8\x01\x83\x71\xf6\x9e\x36\x18\x67\x1f\x68\x83\x71\x76\x63\x3b\x88\x73\x4d\x9b\xb9\x97\x06\x49\x56\x3b\xb5\x66\x3d\x9f\x10\xcf\x71\xf4\x44\x45\xec\xd4\xe5\x05\x67\x75\xa6\x75\xcd\x6f\x1a\xbd\xa7\xf2\x77\x2b\x63\x00\x0b\xcc\x94\xa5\x1c\x63\xbb\x89\x59\x80\xb0\xac\x32\xc8\x63\xc6\x80\xde\x44\xb3\x84\x13\xcf\xb9\x01\xd3\x86\x0f\x8f\x15\xc9\x65\xd6\xf8\x82\xc4\x70\x3a\xad\x37\x5b\x6c\xbd\xc2\x24\x3c\x9c\x5e\xce\x2b\x1c\xa4\xf7\x6a\xe5\xf2\x4e\x18\x6c\x77\x76\xd5\x93\x7b\xa2\x9b\x77\xa2\xfd\x2a\x14\x53\xdc\x63\x62\x9e\xd3\x1b\xd9\x68\x9f\xdd\xf7\x7f\x99\x99\x7d\x93\xde\x59\x4b\xd2\x28\xf6\xa0\x19\xbd\xd5\x26\x6f\x39\xc6\x60\xbb\x1f\x6c\xf7\x83\xed\xfe\xbe\xd6\xb9\xc7\x97\x68\x96\x0f\x8b\x3e\x77\xf0\x97\x4b\x95\x1c\xb3\x75\xfb\xb7\x86\xbe\x69\x31\x2e\x8a\x34\xab\x89\x2a\x56\xe4\x2c\xbc\xed\xad\x36\x3e\x70\x07\x75\x28\x19\x58\xe2\xa7\xb7\x9c\xee\xc9\x1e\x0a\xab\x8b\x92\xa1\xb1\x75\x23\x6e\xdb\x20\x69\x2c\xe5\x8e\x6e\x12\x81\x47\x46\x25\xf3\xd7\x58\xd5\x93\x0a\x21\x91\x1d\x50\x23\x5b\xf2\x7c\x64\x43\x5d\x80\x11\xae\x68\x86\x72\x69\xc3\x73\xc0\x04\x6d\xc4\x7a\x7f\xfc\x2d\xb6\xc4\x13\x20\xc9\xa7\x40\xe0\x24\x60\x81\x3d\x25\x84\xc2\x96\x7a\x24\xa6\xd1\x8a\x7f\xc7\x6a\x15\x95\xdf\xb3\x6d\xdd\x64\xd3\xf8\xbd\x3b\x09\x95\xcd\x59\x49\xe1\x9f\x6f\xdd\x02\xcc\xb5\x36\xfc\xae\x66\x98\xd8\x93\xd5\xa5\x11\xbc\x46\x1d\x7f\xf6\xa3\x45\x5c\x5e\x4c\xd7\x92\x85\x15\xe2\xc0\xb0\x3f\x05\xfe\x03\xcb\xbd\xea\x18\xd6\x0c\x08\x02\x7d\x2f\xb0\x50\xe6\x8a\x3b\x0c\x20\x2e\xdc\x9f\x3d\x2f\xed\x31\xd2\x15\xb6\x43\xf8\x01\x6c\x6b\xff\x1f\x79\xfb\x42\x97\xe5\x89\x1e\x78\xb0\xff\x0f\xf6\xff\x6e\x7b\xe6\xf6\xff\x80\xe4\x39\x0c\xba\xc1\xc0\x1f\x5a\x48\x9c\x95\xff\x86\x39\xd9\xc2\xca\x2f\xce\x74\xef\xec\xf6\xb2\xee\x3a\x9e\x1d\x4f\x26\xc7\xe8\x7a\xd6\x0a\x3c\x8d\x9e\x8e\xff\x48\x98\xc8\x64\x6e\xfa\xf9\x08\xfd\xd7\x4a\x03\xbb\xd4\x6a\xfe\xc2\xb9\x94\x6e\xac\xd0\x79\x0d\xfa\x4e\xa3\xab\x09\x68\xcf\x65\x98\x7d\xfb\x18\xe6\x22\x01\x7d\xb5\xcc\x87\xcf\x6d\x6b\xb7\xc2\xd7\x4a\xb0\x5c\x88\xfb\x5d\x91\x82\x97\xdc\xd6\x85\x35\xf7\x9d\x29\x1d\xab\xb8\x24\xe4\x04\x3f\x9e\x64\x55\x33\xb2\x1d\x4d\x4a\x56\xca\x7a\x39\xf2\x9d\x99\x1f\x3b\xbd\xdb\x37\xb0\x6a\x47\xd6\xd4\x35\x13\xba\x58\xc6\x26\xe6\x69\xdb\x81\xb8\x1c\xb7\x53\x7b\x64\x72\xfc\xe1\xc4\xa5\x8f\x6a\x5b\xf7\x46\xb6\xd6\x61\x50\xaf\xfb\xd5\x62\x59\x5e\x0c\x78\x1e\xb5\xb6\x73\xf3\x94\x89\x05\x59\xd0\x5a\xc5\xde\x00\xb2\x2d\x5f\x93\xf3\x05\x57\x7d\x95\x93\x1f\x58\xdc\xb5\xd7\x7d\x42\xc9\xc1\x46\x57\x8d\xb6\xe8\xce\x81\xb8\xab\x34\xe1\x41\x7b\x85\x7d\x7b\xd5\xaf\x02\x6e\x5b\x45\xb5\x66\xb5\x78\x4d\xfe\xf3\xe4\x3f\x7e\xf3\xd3\xf8\xf4\x2f\x27\x27\xdf\xbf\x1c\xff\xeb\xdf\x7f\x73\xf2\x1f\x13\xf8\xc7\xaf\x4f\xff\x72\xfa\x93\xfb\xe3\x37\xa7\xa7\x27\x27\xdf\x7f\xf5\xee\xaf\x1f\xaf\x2e\xfe\xce\x4f\x7f\xfa\x5e\x34\xe5\x2d\xfe\xf5\xd3\xc9\xf7\xec\xe2\xef\x91\x9d\x9c\x9e\xfe\xe5\x57\x09\x93\xa4\x62\xf9\x4d\x34\x4e\xc1\x36\xde\x8a\xae\x74\xbf\x4d\x3c\xfa\x15\xde\x8f\x0b\x3d\x96\xf5\x18\x3b\x79\x0d\x59\xd0\xa3\xbb\x72\x47\xbb\xfd\x1d\x69\xa9\x56\x5b\xf5\xc4\xb1\xc7\x7b\xbe\x04\x8f\xe3\x80\xb7\x76\xec\x02\x53\xd1\x1b\xbe\xd3\xec\x03\xae\xcf\x6e\x90\x94\x66\x65\x25\x6b\x5a\x2f\x49\x6e\x95\x5b\xcb\x47\x25\x7d\x7b\x64\x62\x75\x98\x64\xce\x1f\x86\xf1\x3d\xa8\x8a\x4b\x96\xf3\xa6\xdc\x4b\x5a\x36\xe8\x39\xdc\xf4\x3b\x28\x3b\x62\x8b\x9a\x38\x5f\x1f\xfb\x9a\x2b\xc9\x45\xb3\x5b\x14\x54\xfc\xa9\xc4\xe9\x0f\x3b\xb5\x28\x8e\x8e\x56\x6a\x7c\x83\x6e\x1a\x9c\x60\x64\xce\x8e\x95\x7f\x17\x07\x4f\x54\x12\xa3\x39\xd3\xfa\x46\x9e\xd8\xae\x4e\x0d\x23\xf8\x0e\x78\x85\x03\xa4\xe1\x8f\x82\x16\x92\x98\xbc\x89\xff\x93\x7d\x6d\xb8\xa2\xbd\x44\x78\xbb\xce\x7d\x45\x70\x09\xc2\x9c\x4d\xbc\x38\x25\x85\xcc\x02\x07\xb0\x0e\x33\x00\xe0\x70\xe1\x2e\x71\xbc\xad\xd0\x00\x85\x19\x17\x79\x3d\x50\x86\x16\x0a\xbd\x5b\x78\x06\x05\xda\x40\x34\x84\x33\x4b\x80\x04\xd3\x6d\x49\x3f\xf1\xb2\x29\x49\xa3\xcc\x6c\xa5\xe8\xf6\xd2\x4e\xf6\xce\xd5\x99\x83\x54\x76\x5c\xc0\x47\x1d\xd1\x38\x46\x45\x39\x67\xe4\xda\xef\x5f\xab\x0e\x41\x53\xba\x95\xe4\x54\x03\x82\x84\x9d\x87\x65\x93\xe5\x14\x1c\x2b\x3c\xc7\xa6\x7c\xa9\xb2\x2d\x2e\x95\xe0\x45\xf7\x56\xb9\x22\x42\x7e\x7b\x1b\x61\xfd\x15\x9f\xd3\x0d\x78\xc6\xbc\x51\x34\x47\x94\xce\x07\x25\x72\x3f\x8f\xe0\x79\xbc\xf7\xe6\x4e\x49\xb6\x77\x09\xed\xd0\xec\xb0\x7e\x51\xd7\x3d\x94\x3a\x4f\x42\x8f\x42\xe2\xd2\xec\x7c\xf4\x3a\x1d\x4b\xea\xb3\x65\x66\x53\xf8\xf1\x4e\x1d\x38\x1c\x14\xe1\x1b\xc2\xd8\xc6\xe6\x3f\x4e\xf7\xe3\xcc\x8f\x37\x6c\x8a\xee\x4d\xf8\x0d\xc8\xee\xaa\x2f\x74\x0e\x35\x5a\x05\xd3\x10\x8b\xc7\x7c\x75\x40\xf4\xbb\x2a\xe5\x22\xa2\x80\xf0\xb7\xca\x1a\x9c\x79\x2f\x40\xd1\xd3\x4e\x9c\xbc\x42\x11\x5b\x30\x96\x63\x2c\x60\xd1\xce\xbf\x6e\x44\xef\xec\x6f\x4e\xc9\x94\x51\xdd\xd4\xe8\xfd\x23\x8c\x94\x53\x38\x01\x0e\xd5\x4e\x35\x33\x87\x02\x29\x10\x6b\x59\x12\x25\x68\xa5\xe6\x52\x83\xea\x84\x56\x34\xe3\x3a\x22\xbc\x4c\xd7\x34\xbb\x85\x1a\xcb\x35\xb3\xb3\xed\x9b\x5a\x76\x6a\xa3\x18\x42\x88\xe8\xc6\x3e\xea\x79\x2d\x9b\xd9\x1c\x42\xf1\xf0\xad\xac\xa0\x0a\x63\x2e\xfb\x8c\xec\x1b\x7b\xb7\x8a\x01\x45\xf2\xa5\xa0\x25\xcf\x7c\xa5\xa9\x5a\x2e\xb8\xe2\xd2\x1a\xa9\x60\xd4\xfe\x45\x53\x72\xe5\xcb\x00\xa1\x65\xec\xbc\xa0\xbc\x24\x27\x8a\x31\x72\xe1\x2e\x09\xfe\x72\x8d\x02\x02\xaa\x3b\x63\x1c\xac\x42\xa3\x9a\x4d\x7d\x6c\x33\xa7\x98\x27\x4e\x75\x1b\xb8\x31\xc4\x24\xc4\xb2\xf0\xbc\x71\xda\xfd\x05\x7e\x0d\x18\x6f\x5e\xb1\xac\xc1\x5f\xd0\x55\xc3\x63\x22\x97\xad\x7b\x4c\x4f\xaf\x67\x57\x97\x2a\x54\x2b\xe0\x5d\xb6\x05\x96\xe0\x07\x9b\x6e\xd9\xe7\x95\xf5\x98\xa0\xa7\x67\x43\x60\x05\x14\x62\x5e\xf0\xbc\xa1\x05\x92\xd6\x88\x45\x9e\x5f\x5f\xe2\xc0\x7c\x36\xd7\xe3\x3b\x06\x8a\x60\xe4\x81\x5a\xdc\xe7\xa6\xcb\xd7\x9c\xb6\xb9\x02\x22\x1c\x51\x83\xd9\x2a\xa6\x71\xc9\x77\x74\x09\xf9\xe7\xad\xf3\x6f\xc7\xdb\xc7\xd5\x84\xc1\x01\xa6\xb2\x8f\xca\x94\x8e\x7e\x5b\x10\xea\x5d\xf6\x19\xa0\x94\x8c\x0a\x60\xc6\x41\xa3\x6f\xe0\x09\xb0\xc6\xfa\x9a\xfb\xef\x5f\x50\x20\xcb\x7f\x84\x0c\x89\xa2\x06\x56\x7b\x65\xb6\x3d\x48\x53\x8b\x16\x62\x3f\xb2\xb2\x2a\xa8\xde\x8b\x03\xce\xdf\x02\x93\x43\x60\x0f\x37\x48\x8c\x8a\x7c\x4c\x0b\x73\x55\xae\xbe\x3b\xb7\x01\xaf\x88\x78\x12\x3d\xed\x3e\x3a\x22\x24\x7c\x2d\x65\xc3\x86\x6f\xc4\x39\x90\x3d\xf5\x86\xe5\x40\x41\xec\xdc\xe2\x9c\x84\xe5\x9d\x60\xb5\x83\xbd\xab\xef\xce\x47\x84\x4f\xd8\xc4\xfd\xe5\x3b\x73\xe4\x51\xcb\x19\x86\xce\xb8\x10\xb5\x18\xdb\xba\xcc\x27\xb8\x9c\x50\xbf\x1f\xf6\xfe\xc3\x9f\xcc\x42\xcd\xaf\x7f\x1e\xff\x29\xa8\x5d\xf8\xe7\x1f\x0c\x3d\x8e\xf2\x55\xfd\x61\xe5\xbb\x30\xe6\x02\x88\x9e\xf9\xeb\x87\x2b\x5b\xb6\xd8\x16\x35\xfe\x21\xd2\xa9\x82\x10\x26\x74\xbd\x9c\x90\x2b\x09\x7e\x78\x3c\xc7\x2b\x0b\xf3\xaf\xd9\x3f\x9c\x59\x08\x8e\xcb\x6b\xd0\x33\xaa\x99\x00\xae\xe4\xc1\x0a\xc0\x6d\xb3\x19\x00\x60\x00\x40\x4e\x14\x76\xe9\x04\x54\xaf\x98\x0e\x67\x44\xb4\xc4\xe4\xf4\xfd\xb8\xdc\xb4\x33\x41\xd8\x27\xae\x20\xfb\x19\xee\x38\x1c\x1b\xb5\x21\x21\x8e\x91\x33\xc3\x1a\x48\xf0\x39\xf3\x2a\x19\xe3\xbb\x01\xeb\xff\xb5\x90\xfa\xd7\xfe\x32\x38\x8f\x52\xe0\xd8\x24\xa1\x0b\xc9\x5d\x8d\x6d\x83\x78\x04\x18\x59\xa2\x12\x4d\xd8\xf3\xbc\x59\x92\x92\x2b\x4d\x6f\xd9\x84\x5c\x1b\x76\x2e\x74\x32\xc1\x53\x16\x04\x6a\xe1\xb1\x9c\x34\x42\xf3\x22\x52\xa2\xf3\x73\x81\x8d\x09\x58\x3d\x48\x2d\xd1\x64\x86\x27\xa9\x6a\x36\x76\xac\x25\xbe\x15\xa5\x77\xb1\x55\x3d\xdd\x9e\xb4\x7b\x3a\xf2\xa0\x3f\xa7\xa8\x16\xa9\x72\xe8\xdc\x7a\x6a\x47\x5f\xd8\xb5\x68\x0a\xb3\x1b\x52\x64\x2d\xeb\x08\xc7\xae\x26\xe4\x3d\xf0\x83\x45\x0c\x90\xa3\xd3\x18\xea\x81\xac\x95\x4d\xb0\x8c\x29\x45\xeb\x25\x3a\xb1\x73\x5f\x5d\xbb\x51\x6c\xda\x14\xc0\x2e\xc7\x6c\x09\x15\x58\xc9\xbc\x66\x99\x14\x4a\xd7\x4d\x06\xe7\x48\xc9\x4d\x2d\x6f\x99\x68\xc3\x90\xa2\x10\x63\xe8\x71\xdf\xba\x36\x1b\xb6\x47\x48\x92\xcd\xa9\x98\x31\x9f\x02\x84\x94\x34\x07\x28\xfa\xca\x0b\x58\x31\x5b\x21\xfd\x49\xd1\xa9\x91\x6a\xb8\x86\x23\xbb\x31\x1c\x99\xb3\x47\xc6\x4c\xf6\x83\x0f\x02\x28\x03\xe3\xa5\xe0\xc5\x8e\x1d\x79\x53\x6c\x55\x63\xe0\xbf\xfb\x05\xf7\x24\xdb\x54\xc9\x34\xcd\xa9\xa6\xfb\x8c\xd3\x78\x47\x7d\x19\x77\xeb\x0b\x05\x87\x1e\xf8\x48\x59\x36\xcb\x49\x85\xb2\xe2\x61\x62\x97\xab\xef\xce\x23\x47\x02\x31\x10\xce\x19\xf2\x46\x6a\x73\x8f\xac\x79\x1e\x20\x0f\x43\x63\x5c\x2c\x86\x99\x84\x1b\x13\xc9\x01\xcb\x49\xde\x24\x68\xfb\x5b\xa2\x12\x67\xcf\x4c\xb4\x66\x9a\xf3\xde\xe7\xc1\x7c\x6c\xdd\x84\xb2\x6e\x64\xc1\x46\x61\x02\x2d\xf0\x4c\x68\x5e\xb3\x20\xbd\x4f\xe4\x60\xf6\x54\x1b\x81\x37\xbd\x7b\xbe\x08\x00\x33\xa6\x55\xeb\x92\x8c\xe4\x3f\xba\x7f\x6d\x19\x47\x9c\x25\xf0\xb2\xee\xcc\xad\xfe\x6e\xe3\xa2\x22\x7b\x47\xb8\x51\xd2\x92\x79\xc3\xde\xec\xe5\xc8\xb7\xb1\x2d\xd3\xcc\x60\xfb\x77\x32\x4f\x31\x47\x6f\xeb\x7d\xd0\x19\xae\x0d\x4f\xc3\xa8\x48\x05\xca\x67\x7c\x01\x1c\x62\x54\x27\xb9\x11\xd2\xa8\x39\x5d\x24\xa4\x52\xd9\x5a\xe3\xd9\xca\x39\x63\x5f\x85\x17\x26\x36\x86\x89\x8d\x5f\x45\x4f\x21\xc5\x91\xd7\xb5\x68\x87\xde\xee\x20\x89\x56\xd7\x47\x25\x82\x70\xcd\xa0\xff\xeb\x44\x8b\xeb\xf6\xd0\xd3\x8e\x66\x99\x01\xeb\x44\xe5\x1d\xf0\x6c\xb0\x3f\xe3\x06\x6d\xa7\xec\xe0\xaf\x3b\x6c\xb3\x15\xb4\xbc\xce\x0c\xc3\x29\x4f\x9c\x12\x6d\x62\xc1\xc4\xe5\xa9\xec\xbe\x7e\xba\xf5\xb0\xc0\xf9\x6f\xd6\xe2\x24\xf4\x79\x69\xfd\x89\x9d\x0c\x6a\x64\xbd\x1a\x6c\x68\x2e\x8c\xdf\x5c\xbc\x5a\x16\x05\xab\x61\x03\xad\xfa\x6c\xc5\xf1\x13\x6a\x5f\xa2\x01\x3c\x26\x0f\x99\x6b\x4e\x41\xeb\xc5\x63\xc1\xee\x3c\x5f\x4f\x15\x66\x98\x77\xfe\x46\xa0\x62\x76\x5e\xb7\x9b\x46\x4e\xb9\xea\x7f\x73\x6a\xdc\x33\xb1\xc4\xad\x7b\x13\x80\x0b\xaa\x4b\xc9\xcc\x4c\xca\x88\xce\x82\xde\x14\x86\x45\x0b\x40\xca\xcf\x68\x85\x97\xd0\x32\x78\xeb\x03\x9b\xa6\x6c\x07\xe8\x99\xc3\x8f\xe3\x46\x41\x66\xa4\xf3\xe1\xa4\xf5\xfd\xb6\xd2\x5b\x52\x92\x71\xd7\x2c\x74\x74\x3a\xeb\xfa\x5b\xae\x8c\x1b\xe6\xbd\xdb\x38\xd7\xf8\xd1\xb7\xf0\xc7\xda\xc6\x23\x0b\xb2\xa7\xf1\x5e\x5d\x56\xf7\x83\x48\x79\x1d\xdb\x36\x2e\x5c\xe0\xa9\x0e\xae\xa0\x69\xfe\x38\xdb\x63\x4b\x82\x6a\x58\x18\xd3\x29\x47\x66\xf0\x87\xe3\xd4\xbc\x87\xcb\x0d\x33\xf8\xa7\x4d\x0a\x99\x02\x51\x04\xa1\x2a\x1c\x69\x83\x13\x6f\x7b\xbd\xbf\x82\xa2\xa6\xd6\xb4\xef\x52\x52\x18\x32\x7d\x76\x75\x89\xf3\x4b\x1d\xfd\x2d\xe0\xb7\xa5\x65\xd6\xf5\x9c\xd7\xf9\xb8\xa2\xb5\x5e\xa2\xb2\x73\xd4\x99\x9b\x8f\xaa\x4f\x1a\x64\x4b\xbf\xa6\xb8\x32\xc8\x61\xeb\x1c\x37\x6c\x95\x33\xde\x5b\x1f\x8e\x7b\xcf\xec\x10\xeb\x89\x8f\xca\xdf\xb8\x9e\xb0\x88\xa5\x53\x0c\x3e\xe1\x7a\x1e\x1f\x71\x40\xba\xb8\xf2\xb0\x3c\x90\x41\xce\xaa\xeb\xf5\x88\x8c\x0a\x48\x3f\x56\x81\x2c\xc3\xe0\x58\xcf\x4d\x83\xee\xc9\xf4\x34\x22\x7c\x6a\x88\xb4\x14\x63\xb0\xee\x27\x4c\xa4\x35\x66\x5a\xde\x7d\x62\x1d\xec\x51\x5b\x04\x17\x32\x98\x4f\x30\x48\x7b\xd3\xc9\x89\x90\x31\xca\x24\xd7\x00\x4f\x60\xaf\xa7\x18\xfb\x70\x8f\xe5\xea\x26\x25\xe1\x24\x69\xb9\x87\x50\xcd\x14\x60\x30\xc7\xc0\x70\x91\x1b\x20\x05\x92\x08\x0a\x28\xd5\x64\x19\x63\x5e\x05\x6c\x2f\x69\x0a\xeb\xde\xc1\x8d\x76\xc3\x4a\xaa\xb3\x39\x53\x44\x49\xc8\xaa\xae\x34\x2d\x0a\x96\x7b\xb3\x26\x1e\xa8\x04\xbe\xce\x9a\x3c\x13\x46\x0c\x18\xc3\x94\x0d\x0a\x54\x70\x56\x07\x5e\x15\xd4\x2a\x1f\xa7\x8d\xc8\xd0\x67\x98\xeb\xa5\xb7\x6a\xad\x32\xeb\xa0\xb7\x51\xa0\x67\x4d\x61\x28\xa7\x68\xb7\x0a\x74\x30\x1e\x90\x80\xb4\x2c\x91\x98\x18\xc9\xb0\xb5\x44\xd9\x8c\xc1\x86\x32\xf8\xf4\x1b\x49\x70\x16\x24\xea\x18\x21\x37\x16\xb2\x4c\xe2\x38\x74\x0a\xe2\x62\x7b\x06\x31\x5c\xdb\x49\xb0\x65\x6b\x8c\xe3\xa9\x67\x18\x15\xf3\xe5\xc0\x55\x0a\xd7\x42\xac\x17\x14\x6d\xb4\x2c\xa9\xe6\x19\xa8\x67\xf9\x34\x30\xf2\x96\xbe\x28\x9f\x77\x72\x42\xa2\x0a\x44\xdd\xee\x7a\xf2\xb5\xda\xcc\x6c\x3e\x6a\xdb\x82\x9d\xb2\xa7\xd1\xdd\x14\xb7\xd4\x80\xd5\x48\x9e\xfb\x47\x97\x37\x85\xe8\x79\xcd\x18\xe1\xa5\x11\x93\xa8\xd0\x24\xe7\x53\x9f\x2f\xc7\xd9\xec\x1f\x3a\xbb\x34\x49\xf4\x6f\xe0\x0f\x12\xf4\x87\xaa\xee\xa2\x90\x77\x8a\xe8\x3b\xe9\xd5\x6e\xad\x2d\xd7\xe6\x4b\x19\x75\x87\x4d\xa2\xa0\xb6\x7f\x83\xb6\xcd\x49\x07\x98\x76\x64\x6e\xed\x1d\x2b\x0a\xf3\xff\x87\xf0\x6d\x42\xa4\xd7\xc6\x75\xf2\x99\xc0\x44\x1c\x5c\x39\x35\xab\x8d\x27\x3b\xc9\x6b\x59\x55\xd6\x0c\x54\x9e\x3e\x66\x9d\xe0\xda\x54\x2f\x98\x02\x37\x3d\x17\xcd\x66\x8e\x6c\xc6\x04\xab\xa9\x06\x43\xb8\xcd\xa0\x0d\xc4\x71\x75\x3a\xf1\x6a\x4b\x6c\x5b\xc9\x69\x3d\x60\x80\x6e\x0b\x9b\x8f\xdd\xbd\x63\x7f\x4d\x9a\x2b\x17\x08\x01\xee\xc6\x26\x1d\xe9\xc9\x97\x4c\xd3\x53\xf2\xad\xc2\x83\xf2\xf4\xc2\x47\x09\x46\x49\xe7\x36\xcb\x11\x0a\xe8\x49\xc3\x9f\x15\xd5\x3c\x18\x3f\x94\x72\x7d\xa8\x75\x77\xa7\x3a\x33\x3b\xaf\xa5\x52\xef\xdd\x27\x7b\x99\xe4\x20\x01\x0f\x12\xf0\x20\x01\x3f\xdc\x06\x09\xf8\xd0\xeb\x01\x7c\x77\xc8\x3b\xf9\x3e\x64\x08\xbb\x88\x7a\x67\xfb\x41\xc8\x7b\xa9\xad\xbb\x0b\xf0\xef\xf4\x5e\xa5\x27\x05\x9c\x7e\x47\x97\x13\xc1\xb4\xcd\x43\xe7\x74\xfb\x1f\xdc\xe8\x7f\xad\x0d\xe7\x67\x05\xb4\xe0\x16\xb9\x0b\xec\x92\x08\x06\xa3\x68\x89\xa4\xb8\xf5\xbe\x81\xe7\xc7\xca\x7a\x74\x98\xdf\x21\xd8\x9e\x74\x4a\xb2\x4c\xc8\xb5\xf5\x16\x5c\x19\x7c\x3d\x55\x58\xce\x34\xe5\x71\x79\x28\xc3\xe6\x28\xe5\xc7\x7b\x68\xf4\x01\x28\x21\xd9\x0e\x64\x7d\xe8\xe6\x21\x54\x2d\x6d\x08\x74\xe0\x11\x1f\x46\x95\xb4\x2f\x3c\xde\x52\x79\x39\x25\x1f\x58\x26\x17\xac\xc6\xfd\xbe\xf8\x54\x51\x61\xc4\xf4\xb7\x94\x17\x66\xb7\xdd\xae\xb7\xd6\x0b\x28\x82\xdc\x75\x4b\x08\x8c\x60\xfe\x1a\xd9\xa3\x35\x90\x93\xc2\x0c\xfa\x9c\x77\xa6\x67\xeb\xa7\x5b\xd5\x6c\xc1\x65\xa3\x5c\x3c\x4d\xa3\x91\x8e\x29\x6d\x65\xd3\x39\x9f\xcd\xdd\xcb\xce\xcf\x1c\x3c\x80\xea\xdc\x5f\x95\x84\x39\x28\x4d\x75\xa3\xba\x89\x72\x32\x70\x27\x78\x12\x1b\xb0\x3f\xef\xfd\x32\x7c\xdb\x31\x57\x18\x7f\x74\x48\x34\xfe\x35\x46\x3c\x61\x27\x37\xf6\x16\xb8\x30\xad\x36\xcc\x2c\x93\x65\xd5\x68\x16\xdc\x16\x0b\xad\xa9\x68\x2b\xf1\x20\x3b\x79\x2f\x5f\x94\x54\xd0\x19\x1b\xfb\x49\x8c\xdb\x08\xad\x17\x5b\x60\xad\xc4\x23\x25\x8f\x48\xbc\x18\xb6\x67\x1c\x59\xb5\xb2\xd8\xf4\xc8\x73\xf2\xc8\xe8\x73\xf2\x98\x08\x74\xb2\xcb\x28\x74\xe2\x53\x59\x1c\xf2\x3a\x7e\xb0\x63\xae\x5e\x48\x4b\xac\x1e\xba\x90\xdb\x89\x04\x96\x68\xd9\x51\xb9\x22\xb2\xe4\x5a\x33\xe7\xc8\xec\x2f\xd8\x88\x70\xdd\xc9\xb4\x60\x11\x07\x28\xcd\xd1\x1b\x99\x7d\xf2\x65\xb5\x5b\xc6\x2c\x71\x32\x20\xfc\xdc\x71\x85\x8c\x97\x20\xbc\xac\xb0\x30\x0b\x20\x80\xb1\x8d\x93\x74\xaa\x61\x3f\xef\x0c\x7c\x09\x09\xfb\x04\x8a\x7c\x9c\xda\x80\x99\x06\xcc\xb4\xd2\x7e\x0e\x98\x09\xb3\x58\xa4\x24\x59\xe9\x60\x24\xf7\xb9\xcd\x71\x49\x6f\x58\x41\x7e\x6c\x58\xbd\x24\x86\x6d\x6d\x23\xbd\xa0\x1a\xb8\xe2\x39\xc6\x34\x39\xab\xd9\x9e\xb5\x64\xdb\x31\x4d\x60\x69\xbb\xf8\x64\xb8\x7b\xc8\xd9\xf6\x08\x7c\xbd\xda\x55\x37\x13\x28\xee\x96\xdf\xc1\x90\x27\x47\xa7\xd3\xf0\x09\xb0\xdd\x67\xef\xdf\x6c\x27\x50\xa5\x39\x1b\x92\x6d\x1c\x0e\xd7\x16\x9f\x4c\xac\x08\x39\x7b\x60\x4f\x70\xef\xfc\x2f\x40\x25\xbc\xbb\xa8\xd7\xd9\x93\x5b\xb6\x1c\x59\x77\x70\x62\x4e\x9f\xba\x97\x93\x27\x83\x71\x21\x6d\xd5\x42\xd3\x69\x6c\xf6\xed\x6e\xdb\x1a\x09\x6f\xa7\xe8\xc5\x16\x5f\x2e\xb2\xfb\x95\xdb\xb4\x54\x5c\xbf\x35\x95\x48\x2a\x2b\x19\xb6\xfb\x4a\x4c\x22\x0c\x41\x3d\x38\x97\x1b\xc1\x83\x0d\x64\x9d\x00\x84\x94\x7a\x88\x64\x7b\x85\x1a\x36\xb7\xb1\x8f\x5e\xea\x16\x17\x2b\x1c\xbf\x1b\xcb\x7f\xcb\x96\xc7\xca\x26\xbd\x93\x42\xcd\x79\x85\x25\x50\x15\x03\x1c\xb5\x1d\xc0\x63\xfb\x0e\x5c\xdb\xdd\xb0\x88\xc1\x2e\xc5\x88\xbc\x97\xda\xfc\xef\x02\x42\x93\xe0\x5a\xbd\x91\x4c\xbd\x97\x1a\x9e\x1c\xfc\x5c\x70\x89\x4f\x75\x2a\xd6\x9a\xc9\xc1\xc2\x08\x68\x1a\xb3\xf2\x40\x9c\xbe\xdd\x7d\xe7\xa1\xe9\x4f\x90\x2b\x72\x29\x88\xac\xed\x56\x6e\x35\xb0\x76\x45\x94\x95\x1d\xd6\x59\x1f\x5a\xa3\xfe\xa6\x71\xed\xa9\xc9\xba\x73\x68\x3b\x9e\x82\x1d\x1e\x74\x91\xf8\x0b\x68\x57\xc1\xbb\xc4\x85\xd4\x60\xd9\x5e\xaa\xd9\x2c\xc9\xd5\xa5\x6d\x25\xab\x67\x90\xe5\x31\x4b\x28\xf8\x18\x4c\x7e\x4b\xc2\x8a\x6d\x2b\xf2\x1a\x0e\xbc\x25\xb0\xef\xc8\xc7\x7f\xc7\x5d\x01\x9f\xf4\x35\x84\x72\x1d\x52\x3a\x0e\x86\x45\xee\xa2\xa4\x95\xb9\x7d\xff\x6d\x98\x08\x00\xcc\xff\x81\x9a\xe9\x6a\x42\xce\x88\xe2\x62\x56\xb0\xce\x6f\x56\xcd\x1f\x74\x93\x3c\x01\xb0\xbe\x19\x1a\xbf\xa0\x05\xc3\x78\x51\x2a\x7c\xf5\x50\x39\x5d\x63\x21\x47\xb6\x88\xba\x21\x6f\xde\x2d\xed\xe8\x96\x2d\x8f\x46\x89\x8a\x54\x12\xd2\x04\xd3\xc9\xa5\x38\x6a\x53\xd2\x76\xee\xa5\xe7\xb3\xc0\xdf\xe0\x08\x7e\x3b\xda\x35\x8f\xfa\x44\x42\xea\x93\xb9\x89\x5a\xa5\xf2\x79\x41\xd1\xb0\x72\x08\xf3\xc5\xea\x98\x9b\x8a\x12\x5e\x07\xef\xb4\x26\x2d\x1b\xbd\xfc\x84\x9a\x76\xc8\x08\x93\x1c\x66\x95\x74\xb0\xab\x65\x80\x0e\x7a\x36\xf7\x0e\x1e\x04\x5b\xfb\x9c\xe2\xe6\x2c\xbe\xdb\xf4\x41\x10\x6b\xce\x55\xfa\x71\x5d\x4e\x57\x7d\x14\x82\x74\x27\x61\x14\x8f\xac\x6d\xd4\xfa\x9a\x0f\x31\x54\x48\x6c\x2b\x29\xc5\xd6\x4e\x6d\x5b\xeb\xfe\x50\x33\x55\x49\xf4\xaf\xdd\xb8\x58\xcb\x22\xcc\xa9\x02\x9f\xac\xa9\x35\xb7\x56\x4d\x5d\x49\x65\xcb\xdb\xad\x82\x7c\x62\xe4\x92\x0d\x27\x73\x41\xa6\x18\x06\xee\x6f\x82\xb9\x3f\x3e\x2f\xf5\xd9\x4a\x4e\x42\x59\x43\xb2\x36\xeb\x20\x26\x72\x9e\x59\x79\x92\x6a\x22\xfa\x12\xc6\x84\x6d\xf3\x41\x3b\xdf\x4f\x14\x69\x7c\x92\x2c\x3c\x72\xc7\xba\xe1\x2c\x99\xd0\x60\x15\x14\xe4\x52\x4c\x19\x55\xfc\xa6\x60\xd6\x9d\x4d\x69\xaa\x93\xf6\x24\x70\xe2\xb2\x7b\x63\x84\x09\xa0\x5c\x5c\xab\x55\x73\xe0\x09\x17\x59\xd1\xc0\x09\x0a\x5e\x9c\x82\x22\x88\x8a\x8c\x15\x48\x39\x65\xee\x63\x85\xb7\x88\x58\x0a\xcc\x99\x53\x56\xd7\xb6\x1c\xde\x72\xf3\x4d\x22\xb9\x64\xe8\x84\x03\xc1\x75\x23\x5c\xc8\x66\xdf\x45\xbb\xb5\x29\x88\x15\x77\x80\x92\x2b\x86\xf0\x8a\xfb\x8a\xd5\x56\xa7\x45\x50\x91\xc7\xae\xda\x7a\xbc\x5d\x07\xd6\xcc\x11\x26\xae\xb0\x59\x27\xc2\x84\xdc\x09\x13\xb1\x09\x1f\xf6\x8f\xa1\x71\x93\xc7\xed\x4d\x1f\x03\x82\x66\x09\x0a\xea\xad\x31\x74\x5c\x45\x2d\xd7\x1e\x8b\x92\xa1\xbc\x80\x4b\x39\xd7\x49\x9e\xda\xc6\x3b\x3c\x9a\x4e\x7e\x07\xd7\x45\x4e\xc9\xdb\xb6\x06\x2c\x57\x60\xb0\xe0\x2e\x21\x9d\x01\x5e\xbc\x4f\x68\x38\xc7\xcb\x6d\xf0\x75\xaa\x22\x75\x8b\x3d\x7f\x04\x19\x6c\x3b\x70\xfc\x86\x8b\x9a\x58\x4b\x60\xb2\x7a\x1f\xc1\x55\xdf\xfb\x8e\x26\xee\x6a\xe4\x5a\xa7\x3d\x49\x11\x3a\x6b\x99\x66\x5d\xfd\xc9\x5b\x7e\x53\x33\x72\x3e\xa7\x42\xb0\x22\xc8\x0f\x6d\x8d\x58\x54\x6b\x9a\xcd\x11\x33\x51\x62\xee\x55\xc1\xf4\xb1\x22\x73\xa9\x34\x29\x69\x36\xe7\xc2\x27\x0f\x15\x3e\x1b\x79\x9b\xcd\xe5\xe0\xa9\xb3\xf6\x5e\xb5\xd9\x42\x40\x58\xea\xb8\x53\xcc\x39\xa2\x27\x9f\x04\x78\xad\x97\xb6\x4e\xa2\xbd\x87\xb0\xcf\x28\xe5\x00\x56\x86\x77\x63\xc6\xb8\xbf\xa4\x34\xb9\x2c\xbd\x61\x92\x8b\x80\xf0\x30\xfb\x01\xe1\x53\xd2\x88\x04\x17\xef\x84\x3b\x59\x34\x11\x35\x8d\xba\xd9\xcb\x8b\x46\x98\x4d\x6f\xab\xd4\xbc\x3d\x27\x9a\xd6\x33\xa6\x4d\x6f\x44\x34\xe5\x0d\xab\xfb\xd3\x98\xef\xaf\xb0\xda\x41\xea\xa0\x76\x76\xa0\xa7\x7c\x29\xf9\xe0\xbe\x82\x70\x0f\xe0\x06\xa6\x32\x8e\x0e\xa3\x8f\x9e\x2b\xbe\x8a\xa5\xf7\x0c\xae\xfe\xce\x92\x92\x46\xc4\x50\xe7\x94\xfa\xa8\x78\x96\x7f\xfb\xdb\xfb\xd4\xe2\x74\xc7\xed\x97\xf7\x01\xc8\x9d\xac\x8b\xfc\x8e\xe7\xd6\x1d\x93\x9c\x98\x97\x4f\x63\x81\x65\xc7\xb5\xea\xb6\x4f\xa5\x9b\xaa\x9b\xba\xbb\xe3\xf9\x5e\xea\xcc\x42\xc7\xdd\x9d\x76\xa2\x93\xd9\x69\x02\x5b\xcd\x73\x26\xb4\x41\x1d\xb5\x22\x27\xf0\x45\x4c\xae\x87\x0b\x8e\x19\xf9\x60\x04\xa8\x86\x53\xde\x70\xd1\x26\x95\x6c\xcf\xda\x90\x1b\x73\xf3\x9d\xb6\x55\x31\x8d\x79\xbd\x20\xa2\x5f\xea\x39\x51\xbc\x6c\x0a\x4d\x05\x93\x8d\x8a\x2f\x41\xff\x59\x1e\xf7\xb4\x60\x9f\xf0\x6e\xee\x32\x71\x72\xdb\x6b\x97\x5b\x80\x78\xa2\x36\x1b\xed\x2a\xbb\xd0\xd3\x6b\x1b\xa6\x99\xbf\xf0\x8c\x85\xcf\xaa\xc7\x3e\xb1\xcc\xe6\xd3\xa8\x8a\x66\xc6\x7b\x25\xaa\x37\x66\x66\x46\x26\xcd\x5f\x93\xb7\xed\x84\x21\x7a\xd7\xfd\x82\x25\x8a\xc1\x6e\x6f\x07\x22\xe7\xd7\x97\x6f\x6c\xfa\x53\xa1\x34\xa3\xbb\xe2\x51\x62\x4d\x9d\x63\xab\x8e\xd8\x11\xc3\x83\x9d\x25\x5e\xf6\x36\xff\xeb\xaa\xf6\xcc\xfe\x62\x6b\x1d\xf8\xbc\xf9\xb1\x09\x3f\x13\x80\x7e\xe0\xd4\xb0\x3d\xc0\xa9\x85\xa9\xf3\x83\x09\xe4\xac\x62\x22\x87\x62\x7c\x01\xdc\xe3\x2e\xed\xf4\x88\x6c\xe1\xb8\x54\xba\xec\xea\xcd\x75\x88\x72\xa0\x77\x99\xcb\x22\x57\x84\x7d\xd2\x35\x35\x68\xbe\x34\x08\xdd\x7f\x33\x25\x54\x2c\x23\xaa\x7e\x3e\xa7\x02\xe1\xe4\x49\xb8\xc0\xfc\xe7\xc4\x05\x2a\x96\xd5\x4c\x47\x05\x16\x6f\x51\x36\xc4\x75\xde\xdd\xc0\xce\xe3\x35\x51\x1e\x7f\x75\xe1\x31\x6d\x6d\xe0\xa8\xf1\x84\xe2\x50\x84\x6f\xa5\xe2\x70\x45\x95\xf2\xd2\x31\x10\x39\x7b\x6d\x55\x27\xd3\x44\xc4\x10\xa8\xa9\xe5\x53\x22\xe4\xca\x4c\xc3\x40\x20\xaf\x47\xed\xbc\x12\xd1\xbd\xb7\x98\x95\x58\x88\x80\x0a\x08\xa9\xc7\x6e\x46\x10\x67\x8c\xff\x46\xa3\x99\x59\x57\x20\xf7\xc3\xca\x62\xf6\xc9\xae\x7d\xb7\x97\x3d\xcd\x95\x27\x3e\xfa\x6d\x3b\x3d\xdc\xfb\x80\xb8\xba\x80\xaa\x58\x15\x50\x37\x47\x2c\x83\xca\x9d\x7c\xc1\x20\x03\xad\x4b\xc8\x6a\x18\xdf\xbc\xc1\xa0\x25\x97\x16\xa2\x9b\xec\x21\x3e\xb8\x3b\x08\xb9\x69\xbd\x18\x2e\x85\xd2\x14\xf2\x02\xc0\x2a\x0c\x55\x35\x04\xd0\xe6\xfa\xb5\x80\x88\xda\x72\x97\x5d\x20\x7a\xb8\xd2\x10\xcd\x8c\xd5\x06\xd6\x8a\x25\xb9\xab\x65\xbc\x53\x65\xa2\xde\x57\x2e\x58\xbd\xe0\xec\xee\x85\x8d\x86\x1b\x9b\x05\x8c\x6d\x40\xf9\x0b\x10\x0f\x5f\xfc\x12\xfe\x17\x35\x7e\xb2\x1e\xd2\x62\xeb\xd7\xe4\xa8\xbf\x24\xdf\xb6\xe6\xd9\x29\x24\x90\xde\x69\xd5\x33\xdb\xe5\x8a\xd2\xd0\x3e\xb4\x62\x40\x8c\x92\xd0\xe2\xb7\x80\x75\x31\x17\xc2\x75\x64\xd3\xf7\x11\x65\xce\xa8\x0d\x93\x6c\x84\x88\xf0\xb2\xed\xca\x01\xd8\x61\x47\x08\xf0\x4e\x01\x5c\x8c\x75\xcd\x98\x5f\x94\xb6\x6c\xa2\x90\xae\x74\x43\x64\x41\xce\x3d\x28\x2e\x73\xaa\xa9\x62\x3a\x4e\x4d\x9d\x8e\x8a\x82\xee\xcd\x8a\x43\xac\x64\x7f\x02\x4b\x23\x83\x7c\x36\x2e\x0b\x32\x19\xff\xd9\x0a\x07\xa2\xf3\xa6\x11\x0b\xec\x4e\xc7\x60\xf9\xb9\x2b\x5f\xe5\x7c\xa8\x71\x94\xf6\x80\x76\xc9\xb3\xda\x39\x7e\xfb\xed\xe5\x9b\x54\xa1\xa8\xfd\xd2\xc9\x0e\xf0\xef\xee\x36\x59\x40\x86\x3a\x55\xfc\xc7\x26\x54\x77\x40\x1d\x0f\x0f\x82\xf6\xfd\x5d\xad\x6d\x96\xb1\xd6\xb8\xf0\x86\xab\xdb\x5d\xde\xf2\xb5\xce\xbb\xf7\xfd\xaf\xe7\x17\xc4\x3e\x7d\xc8\x3e\xd0\x33\xc8\xae\xad\x07\xdd\x9b\xff\xd7\xf3\x8b\x95\x25\xac\x28\x02\xce\x8a\xc2\xc9\x67\x46\xd0\x70\xe9\x12\x2c\x4e\x48\xde\x20\xc0\x1d\x86\xf7\xa9\x19\xd6\x18\x0c\x66\x9e\x4f\x32\xc5\x7d\x4a\xd5\xd9\x2d\x9b\x70\x19\x38\x22\xec\xb9\x06\xe4\x2c\x63\xad\xfb\x49\xce\xd5\xed\xa1\xf5\x1b\x55\xfe\xbe\x2f\xf1\xc6\xf3\x32\xe8\xac\x0a\xf7\xae\x3c\x50\x50\x27\x6c\x29\x1b\x72\x67\x2b\x22\x44\xab\x0f\x3e\xf2\xea\x35\xb9\x10\xaa\xa9\x59\xeb\xcb\xbd\x3a\x98\xe1\xd7\x77\xa8\x4c\x80\x02\x1b\xea\xf5\xc1\x8c\x3f\x07\x06\x57\x92\x46\x0d\x2a\x5a\x6b\x90\xfc\xf7\x01\x40\xbe\x73\x47\x2e\x82\x07\x62\x37\x10\x74\x39\x75\x11\x88\x23\x9b\x53\xdc\x17\x52\x74\xdd\xb4\x1e\x23\x40\xab\xd3\xa0\xe4\xad\x2f\x67\x45\x5e\xe4\x6c\xf1\x42\xe5\xf4\xd5\x08\xa6\xea\x62\xee\xbb\xeb\xa2\x8a\x1c\xbd\x3a\x8a\x19\xe3\x9a\x97\xbc\xa0\x75\x81\x19\xed\x7c\xa2\x3f\xdf\x93\xc1\xbf\x6e\x48\x70\xdf\x7c\x79\x44\x4e\x64\x0d\x63\x67\x54\x90\x82\xb9\xec\x77\x16\x57\x2c\x51\xd4\x38\x7d\xc6\x20\xb9\x0f\xeb\x22\x22\xd3\xbd\x80\x6f\xee\xb8\x41\xcb\xc9\x74\x0a\x1b\xbd\x69\x89\x3d\x17\x86\xba\x4e\xc8\xb7\x96\x3a\x5b\x8e\x07\x61\x23\x07\x52\x8b\x6f\x3c\xdf\x93\x79\x3e\x2a\xbc\x15\x65\xdc\x8e\x54\x6d\x64\xdd\x26\xfc\x8c\x4f\xa3\x5f\x25\x38\xe3\xfa\x03\xab\xe4\x4e\x79\x5c\xec\x72\xc5\xa0\xc5\xb5\x79\x20\x15\x87\xca\xdd\x54\x13\x8a\x38\x2a\x6b\x0a\x6a\xa4\x5e\x34\x58\x25\x31\xa2\x76\x9c\x15\xf6\xf3\x63\x58\x43\x2d\x88\x24\xb7\x8a\x14\x3f\x93\x91\xc5\xea\xbd\x1a\x53\x5f\x1d\x18\x0a\x87\x80\x6f\x24\xd7\xe7\xbe\x5b\x0c\x30\x2c\xa4\xb0\x21\x80\xa6\x6f\x6b\x03\x9b\x71\x6d\xd3\xa2\xe3\x50\xe6\x67\xd7\x5b\xcf\xa0\x6d\x91\x12\xa8\x6a\xee\x57\x71\x70\x1b\x5a\x7b\x68\xbb\x92\xbf\x5d\xa1\xf0\xbd\x48\xdf\xbe\x36\xbc\x4b\xfc\x85\xfe\x09\xed\xf3\x58\xd2\xfd\xce\xd5\x5f\x72\x15\x84\xd0\x07\xb6\xd6\x08\x47\xc7\x93\xc9\xf1\x04\xd8\x86\xe3\xc9\xb1\x63\x2d\x0b\xef\x0c\x6d\xa9\x70\x3b\x6c\x5a\x99\xbd\xee\x6d\x99\x10\xf2\x8d\xcb\x4f\x00\x49\x97\x57\x3c\xaf\xbd\x53\x75\x5b\x3b\x1a\xd3\xd5\x75\xef\x5c\x94\xa6\x18\x74\xd8\xcd\x4d\x38\x71\xeb\xaa\x3d\xe3\x0b\x9b\x8f\x75\xa7\xa6\xaf\x76\x82\x89\xf0\x10\xae\xcc\x2a\x11\x3e\x7c\xbd\xdb\x99\x21\x12\x49\x9e\x97\xc5\x3d\x76\x56\x99\x2c\x4b\x2c\x07\x36\xf7\xb2\x70\x9b\xcf\x2f\x16\xf1\xc5\xab\x2f\xb0\x34\xda\xb4\xe7\x1e\x26\xa2\x74\xd7\xe9\x8a\xba\xc2\x3f\xb6\xf9\x41\x44\x2b\x54\x01\x5a\x54\x73\x5a\x33\x85\x25\xcc\x6d\xc1\xe6\xfe\x3a\x9f\x2b\x58\xde\x8f\xf1\xb0\xaa\xb1\x9d\xe2\xfe\x95\x8d\xf1\xd8\x93\x89\xbc\x92\xbc\x3f\x79\xd6\x98\x54\x54\x3f\x9c\xda\x3a\x1e\xc3\xfa\x41\x13\x21\xd7\x7f\xe7\x40\xd7\x3d\x08\xaa\x3f\xda\xac\x71\xc1\xb1\x68\x59\xc9\x42\xce\xa2\xbd\x7f\x22\xc5\x49\x3d\xdf\x8f\x24\xa9\xe7\x6e\x75\xed\x12\xbc\xcc\xa4\xa3\x22\x3c\x37\x30\x73\xb6\xde\xa6\x72\xa9\xff\x2c\xe3\xf6\xc2\x43\xe5\x8b\x0f\x17\x67\x6f\xde\x5d\x4c\xca\xfc\x97\x18\x07\x32\xa6\xe3\x98\xaa\x99\x9f\x03\x57\xbd\xb6\x91\xa8\xe7\x00\x9c\xe0\x8a\x55\xb6\x75\x17\x2b\x56\x97\x1c\x63\x14\x0f\xc9\x6e\xef\xf9\x84\xfa\x39\x6d\x83\x15\xaf\x7a\xc1\x3a\xed\x68\x5c\x9f\x5d\xb4\x5c\xd5\x6c\xec\x0b\x43\x4d\x79\x01\x41\x58\x2d\x45\x0f\xb0\x74\x4f\xf7\x4e\x73\xec\x94\xd0\xd8\x47\xb1\x5c\xd5\x20\xb7\xdc\xa9\xd7\xd9\x63\x42\xec\xfe\x42\xa2\xbe\x0a\xac\xd5\xd4\xd1\x19\x16\x76\xaa\x6d\x3e\xda\xaa\xe6\x0b\x5e\xb0\x19\x94\xc4\xe6\x62\xa6\xda\xdc\x82\xd6\x88\xda\x33\x00\xc4\xc1\xb1\x96\x2e\x79\x33\xd9\x3b\x30\x89\xfa\x74\x49\x08\xd4\xef\xbf\xf9\x08\xc5\xea\xc1\xfe\xba\x67\xf5\xb1\x99\x4e\x2f\xd6\xdf\x87\xd6\x78\x77\x94\x66\xaf\x68\xda\x99\x83\x36\x01\x6e\xa4\x4a\x0f\x75\x6a\x88\xf2\x29\x51\xcb\xb2\xe0\xe2\x76\xe4\x0b\x8d\x4d\xa5\x4d\xb1\xca\x88\xf9\xc1\x81\x73\xcd\x68\xf1\x18\x62\xb0\x73\x20\x20\x69\x84\x40\xef\x49\x8f\x0f\x8c\x95\xb9\xab\xff\xe6\xd0\x0e\xea\x4e\x12\xb1\x78\x84\x5d\xfe\xd9\x6d\x2b\x2f\xe9\x6c\xa7\x8e\xbf\xd0\x61\x07\x6d\x0b\xf2\xcd\xf9\xa5\xaf\x17\x18\x2a\x2e\xf0\x5d\x59\x13\x5a\x6b\x3e\xa5\x99\x3e\x25\x55\x03\x55\x5d\xa0\x46\x85\x25\xb3\xf6\x76\xdc\xe3\x15\xd0\x33\x9d\x8f\xad\x18\x09\x2e\x5a\x4a\x16\x0b\xd3\xbf\x86\xe2\xd0\x20\xf7\x36\x95\x75\x2a\x80\x90\x55\x57\x65\xfe\xaa\x29\x8a\x2b\x59\xf0\x6c\xe9\x0b\x1c\xa0\xfa\x25\x37\xa8\xa8\x17\x17\x9d\x15\x77\x74\xa9\x5e\x87\x33\x27\x14\x9e\x11\xaa\x35\x2b\x2b\x04\x19\xb3\xdc\xd5\x44\xc7\xad\x06\x06\x0b\xef\xba\x02\xeb\x53\xca\x0b\x7f\xf7\x1b\xfb\xa0\x17\x97\x8f\xc9\x7b\xb6\x60\x75\x77\x26\xc2\x3c\x82\x4e\x54\x77\x74\xd8\x78\xe0\x66\x1a\x05\xf2\x0d\xd6\x54\x58\x3b\xa8\x9e\x59\xf2\xe9\x4a\xb7\x58\x8f\xc4\xc2\x44\xff\x94\x2f\xa7\xef\xa5\xbe\xc2\xb7\xbb\x33\xc7\x39\xdf\xd3\x3f\x2d\x0c\x37\xb6\x74\xe3\x98\xc3\xcc\xb9\xba\x7d\xd4\x64\xbd\x3c\x16\x6e\x79\x3c\xd0\x41\x05\xde\x1a\x13\x19\x02\xe4\xd9\xd1\x0c\xf4\xc1\x6f\xb9\x59\x96\x85\xf8\x9a\xd9\x50\xea\x91\x05\xc2\x92\x51\x57\xcb\x59\xb0\x3b\xa8\xcc\xae\xdb\x4a\xc1\x56\xf5\x92\xc9\x92\x11\xba\xa0\xbc\xa0\x37\x05\x78\x5a\x98\xce\x6d\x5f\x11\x12\xf8\x19\xac\x0a\x2c\x8c\xd2\xdd\x10\x73\xd6\x1e\x36\xf1\xf4\x6d\xd2\x99\xf0\xda\xe0\x04\x0a\x99\xdd\x86\xfc\x06\x54\xb6\x52\xae\x44\x3d\xdc\x64\xba\x24\x34\xcf\x89\xe2\x33\x01\xe1\xce\x42\x93\x82\x6a\x26\xb2\xe5\x84\xd8\x54\xce\x2a\xa8\x1c\xad\x6b\xee\xfd\xfa\x05\xd4\x6d\x6f\xab\x65\x66\xb7\x72\x3a\x5d\xa9\x34\x6d\x4d\x9f\x16\x51\xe0\xea\xa9\x92\x02\x07\x67\x4a\xd1\x59\x14\xa2\x58\x2d\x1d\x83\x3b\x6f\x93\x0f\x38\x74\xe4\x32\x0b\x38\xd7\xa5\xda\x85\xc6\xb6\xa1\xaf\x1e\xda\xea\x46\x68\x5e\xb2\x95\xac\x9b\x04\xf4\xb7\x6b\x2e\x0c\x66\x28\x9b\x96\x14\x02\x53\x6c\xa0\xab\x2b\xc9\xc2\x73\x3b\xbf\x35\x5b\xef\x2a\x42\x05\x7f\xbf\x98\xf5\x06\x78\x19\x60\xd1\x2d\x11\x8a\x3b\xdb\x74\x2f\x2d\x97\x72\x02\x71\xb6\xed\x41\x7f\xff\xeb\xbf\x4f\x16\xa1\x8d\x01\x3e\x37\xe4\xf3\xd4\xcc\xac\x64\xf5\xcc\xd5\x1c\x29\xa9\xe0\x53\xa6\xcc\xa9\x2f\x0d\x88\x58\x3d\x1e\x14\x25\xba\x33\xc0\x81\xde\x14\x2b\x0b\xe9\xc5\x6d\x1f\x57\x74\x84\xc1\x29\xb5\x62\xd9\x49\x2d\x4f\x6d\x4d\x7c\x31\x66\x9f\x58\xd6\x68\xb8\x27\x60\x45\x27\x27\x42\x9a\x67\xbd\x36\xc1\xeb\xe6\x06\x19\x2e\x18\x60\x65\xba\xae\x02\x97\x0e\xce\xa6\x77\xb7\x54\x73\x53\xe1\x5e\xb1\xa9\xe1\x09\x5e\x4d\x7e\xfb\xdb\x98\x05\xa3\x37\x27\xf4\xae\x58\xd6\xd4\x5c\x2f\x0d\x7a\x63\x9f\xf4\x64\xaa\xa0\x9e\xc5\x39\xa4\x6a\xb0\xc4\x6b\x4e\x41\x61\x84\xae\x9f\x78\x45\x5a\xe0\x35\x00\x75\x70\x3f\xb5\xca\x53\xd6\x7d\xf0\x72\x76\xd9\x53\x8b\xc0\x0c\x04\xb6\x60\xae\x26\xe4\x4a\x2a\xcc\xfe\xe0\xf3\xfb\x44\x39\xef\x3e\x1b\x7a\x6e\xda\x67\x47\xd1\x09\x48\x2d\xcf\x9b\xa6\xf7\xaf\x20\xe4\xf5\x11\x1e\xcc\x38\xaf\x21\x49\xa6\x26\x9a\xce\x56\x4a\x68\xc8\xba\xb3\xe8\x36\x17\xf3\x8e\xed\x0c\x76\x8d\xfb\xb8\x4d\x1f\x9c\xf0\x4d\x2e\x57\x01\xa6\x1b\xef\x60\xb3\xf3\xc4\x6c\xe3\x97\x6c\x4e\x17\x6c\x23\x11\xa8\x64\x3e\xd9\x80\x37\x01\x58\x63\xba\x36\x4c\xbb\x0f\x2b\xf0\xe9\x61\x94\x62\x25\x94\x86\xb8\x87\xec\x6c\xa2\xa1\x37\x4b\x52\x48\x09\x89\x17\x9a\x8a\x08\x99\x33\x03\x66\xe0\xb6\x40\x0b\x35\x22\xd7\x67\xf6\xc5\x2a\x18\x12\x93\x87\x01\x87\x54\xb1\x6c\xc3\x0b\x7b\x90\xbb\x83\xbc\xd8\x48\x34\x63\xbc\xca\x3a\x51\x01\xd2\x86\xb3\xb4\xa5\x59\x6c\xc1\x8a\x82\x2d\x18\x18\xde\xa6\x7c\x46\x30\x21\x77\x69\x53\xb4\x39\x2f\x22\x59\x43\x9a\xe3\x9a\xe7\x31\xc2\xf2\x2a\x7d\x37\x07\x72\x27\xeb\xdb\x42\xd2\x3c\x28\xc0\xae\x48\xc1\x6f\x19\x79\xc3\xaa\x42\x2e\x6d\x5e\x35\x91\x93\x6b\x4d\x35\x9b\x36\xc5\x75\xd4\x46\xc6\xca\xbf\x2a\x53\x7c\xa7\xf2\xaf\xe9\x70\x45\xfe\xbd\xbc\x3e\xbf\xbe\x7c\x96\xfe\xaf\x8f\xd3\x46\xbc\xf8\x25\xac\xf6\xd0\x7a\x3e\xfe\x63\x9f\xc1\x77\x4c\x8a\xa6\xff\x1d\x34\xa1\x5f\xc9\x5a\xd3\x62\x47\xbc\x4d\x36\xa7\xd5\x59\xa3\xe7\x6f\xb8\x82\xb2\x35\xa9\x2c\xce\xda\xf7\x41\xda\x1d\x06\x7a\x63\xcb\x61\x12\xee\x60\xca\xbe\x77\xfe\x6f\x67\x57\x84\x36\x06\x0e\xb4\x4d\x28\xb5\x33\x0d\x7f\xb8\xb2\x6b\x4c\xc3\xb8\xe5\xba\xec\xd7\x3d\xab\x72\x6f\xed\x7b\x4d\x4f\x15\x40\x3c\x78\x07\x1f\xd0\x3b\xb8\x1f\x45\x91\x34\x86\x8b\x0b\xae\x39\xd5\xb2\xde\x97\x5b\x65\x67\x00\xef\x6d\xd1\x28\x2d\x4b\x7b\x41\x2e\xdd\x1b\x10\x86\x13\x69\x33\x58\xeb\xb6\x75\xd6\x00\x4b\x26\x6c\xd4\xa5\xd0\xac\x9e\xd2\x8c\xad\xa4\xc0\x18\x81\x02\x0a\x47\xe7\xee\x9d\x88\x71\xff\x64\xfd\x94\xa0\x4a\x70\xf1\xe7\xd7\x7f\x0a\x1c\x8d\xff\xec\x59\x34\xab\xf6\x0a\xb9\x31\xc1\xb2\xb8\xa4\x78\x29\x27\xf7\x63\x2a\xde\xe2\x3f\x8a\x15\x87\x2b\xdc\x82\xff\xd7\xd0\x02\xb7\x2e\xee\x00\x52\x26\xd9\x39\x86\xbd\xc0\x57\xf7\xa0\xed\xfa\xfc\xa9\x62\x68\x17\xe0\x13\x14\x19\x85\x5d\xb4\xae\xa9\x50\xe6\x20\x53\x85\xa5\x63\xcb\x2e\x1e\x93\x13\x9d\x55\x11\xfe\xd7\x49\xb1\x91\x3e\x2e\xd2\xfe\xa3\xe7\x83\xf4\x04\x52\x45\x23\x42\x86\x0e\x37\xe3\x23\x82\xc3\xd7\x3e\x81\x54\xec\xaa\xf6\xe2\xe2\x0d\xb7\x6b\x2f\x09\x7b\x6c\xd7\x1e\x4a\xc2\xc5\x23\xeb\x44\xbe\xe6\x4a\x63\xaa\x09\x7c\x19\x42\x8d\x31\x19\x8f\x61\x7e\xaf\x8c\x94\xc0\xab\xff\xa2\x79\x5e\xbf\x46\x2a\xef\x74\xe0\x75\x4c\x24\xb9\x11\x51\xb4\x2f\xa0\xe7\x24\x8f\x13\xbd\xac\x6c\xb5\xf6\x8f\xe7\x57\xd0\x97\x22\x7f\xfc\xfd\x4b\xe0\x86\x7f\xfb\xc5\xef\x5f\x46\x83\xd9\x67\x99\xb5\x87\xfc\x2f\xf4\x36\x3f\x44\x36\x88\x4e\x46\x07\xc8\xfe\x6b\x78\xd0\x6b\x4c\x7e\x60\xc8\x93\x45\x85\x78\x01\x0c\xac\x79\xb2\xba\x1d\xa7\x3a\xa4\x24\x18\x52\x12\xb4\x6d\x48\x49\xb0\x79\x62\x81\xa4\xbe\x17\x07\x90\xa0\x7f\x48\x3a\xbb\x4e\xe5\x90\xc0\x5d\x7d\x8e\x04\xae\xf7\x40\xfb\xd1\x45\xda\x96\x86\x61\x60\x71\x79\xbf\xda\x34\x59\x6f\xde\x5f\xff\xd7\xd7\x67\x5f\x5e\x7c\x0d\xeb\xb4\x71\x65\x06\xac\xb9\xd8\x93\x52\x6b\x47\x97\x28\x76\xaf\x77\xeb\xc0\x2e\x56\x5c\xd7\x05\x79\xff\xf6\x3a\xd1\x6b\x7d\xaf\x3a\xc2\x5f\x8a\x69\xcc\xbe\x1d\xd6\x11\xd0\xbc\xa4\x58\xbd\xbb\x1c\x7a\x7b\xf5\x17\x0c\xea\x81\x76\xb4\x38\xe6\xa4\x71\x15\x07\x50\xa3\xf4\x1d\x23\xf9\x4c\x7c\xba\xcd\xa6\xe1\x46\x3e\x4b\x6f\xee\xfd\x1c\x49\x2c\xcf\x5c\xa7\x27\x82\x8c\x4c\x9f\x56\x07\xd9\x22\x0d\x42\x42\x12\x51\x1b\xe2\x69\xc8\x26\x53\xca\x11\x8c\xcf\x15\xaa\xab\x4d\x85\x14\x76\x89\xea\x37\x0e\x60\x8b\x28\xb8\x2a\x10\x81\xb3\x7c\xc7\x3c\xdb\x67\x59\xda\x5c\x05\x22\xb4\x97\x02\x01\xac\x68\xd6\x4f\xca\x77\x56\xef\xa6\x7d\x84\x4f\x20\xf9\xfd\xc1\x89\x09\x8c\xba\xc3\x74\x24\xbe\xbf\x7d\x5c\x34\xdf\xf9\x6a\x66\x56\x9a\x72\xc4\x84\x2a\xef\x49\x87\x5e\x78\x49\x29\x5c\x9f\x18\x06\xc8\x33\xa4\x44\x7f\xdb\x9b\x02\x65\xd7\xca\x93\x6a\x2e\xb5\x14\xfb\x4b\x14\xb5\xa9\xff\x2e\xe2\xba\x82\x37\xce\xbd\x3b\x40\x80\xf8\x30\x57\x84\x37\x99\xaf\x78\x89\x5b\xf3\x78\x9a\x83\x78\x18\x92\x79\xb5\x69\x6e\x0f\x47\x67\x6e\x5c\xce\x73\x0a\xd4\xac\xf2\xcb\x37\x3b\xc2\x5c\x43\xbe\x65\x6c\xcf\xb4\x32\x86\x39\xe9\xc4\xc3\x31\x9f\xb8\x5d\xbf\x7c\x63\x05\x0d\x97\x8d\x4e\xd9\xfb\x40\xee\xbf\x8a\x3b\xe3\x9d\x64\xad\xef\x64\xbd\x87\x3c\xf4\xdd\x9e\x57\xc2\x09\xed\x6f\x6b\x59\x28\x77\x8e\x57\xba\x93\x48\x4a\x2b\xb7\xba\x02\xb3\xa3\x3d\x43\xdf\x93\x53\xee\x53\x3e\x71\x7d\x4d\x32\x59\x76\xea\xda\xcd\x19\xf2\x01\xe7\xd7\x97\xef\xf8\x0c\xa7\xe2\x66\x4d\xa6\x8c\xea\xa6\x66\xe3\x19\xd5\x7d\x43\x73\x45\xfa\x6c\xb6\x7b\xc0\x71\x78\x7e\x9f\x03\x9e\xbb\x06\x3c\x17\x40\xe1\x43\xf8\xee\xb9\xa2\xbb\xa7\x45\x73\x07\xe1\xd7\x7e\x56\x99\xd1\xdd\xf5\x48\xdc\x31\xf7\x99\x55\xc2\x9a\xb3\x6e\x49\x03\xf5\x48\xcd\xbe\xb7\x33\x52\x50\xcb\x7f\x00\xde\x4a\xa0\x02\xfe\x1b\xb4\xd2\x02\x0a\xa5\x45\x61\x76\x55\x8a\xb6\xc8\x88\x6a\xfd\x74\xd1\xa9\xb5\xa4\x95\xf5\xd9\xcd\xe5\x9d\xb8\xa3\x75\x4e\xce\xae\x2e\x77\x83\xbd\x12\xf2\x06\x21\xac\xc5\x95\xf4\xdb\x22\x73\x50\xdb\x3d\x50\x06\x8d\x05\x18\x19\xb9\xe1\x5a\x75\x4a\xaa\x06\x2a\x2f\x43\xf6\xbc\x53\x0e\x04\xca\xdc\xf8\x4b\x91\xc4\x86\x09\x22\x33\x4d\x5d\x0d\xd0\x1b\xa6\xef\x18\x13\xe4\xe5\xcb\x97\x68\xc7\x78\xf9\x87\x3f\xfc\x01\x9c\xca\x49\xce\x32\x5e\xae\xbf\x08\x6f\xfd\xcb\xab\x57\x31\x83\xfe\xfb\xd9\xbb\xaf\x09\xcd\x40\xa6\xc4\x32\x3e\x38\x36\x1c\x70\xd8\xbd\x1a\x91\xff\x7b\xfd\xcd\x7b\x47\x61\xd4\xca\xaf\x00\x3f\x7e\x8b\xa2\x64\x31\x1b\x24\xc5\x21\x8c\xad\xb5\x55\x50\x3d\xf7\xa1\x41\x14\x2c\x9d\x41\x00\x99\xbd\xfb\x51\x8e\x7e\x90\xd9\x9f\xcf\xe6\xb0\xa9\x5c\x00\xfc\x16\x3c\xb3\x39\x9b\xd0\x7a\xe4\x0a\x60\x60\x1e\x01\x8c\xf7\x71\xe4\x25\x62\x0c\xb3\xe0\x11\x7a\x5e\xdb\x38\xa2\xb6\x16\x76\xcd\x94\x11\x35\x6d\xb9\x53\x1c\xae\x85\x21\xc5\xa2\x8b\x86\xec\xc3\xf9\xc5\x5e\xee\xbd\xe8\x2d\x2d\xde\xb0\x2c\x72\xc1\x95\x0e\xaa\x5e\x5a\xb4\x03\x2a\x62\x72\x41\xb3\x39\x61\x42\x43\x3e\x2a\x3c\x60\xf3\x7a\xc4\x20\x73\x2a\x72\x73\xc3\xa0\x3c\x02\x0c\xf8\x44\x9e\x2b\xdb\xf8\x02\x5c\xf9\x3d\xe8\x04\x4b\xb6\x18\x99\x1a\x09\x38\x04\xd3\x96\x31\x09\x82\xd0\x22\xeb\xb5\x5e\x7c\xa2\x90\xa6\xc3\x6c\x15\xaa\x8b\x95\x0d\x88\x53\x61\x31\xaf\x98\xce\x12\x4b\xae\xa7\xf9\x5f\x10\x92\x61\xf6\x95\x8f\x75\xa3\xf4\x97\x8d\x39\xe0\xd8\xd2\xa1\xdb\x16\x6b\x3d\x5f\x1b\x11\x5d\x1f\xac\xbd\x0f\xb4\xc0\x59\xc6\x14\x82\xf2\x0f\x18\x67\xa3\xdb\xb7\x7f\xc0\x8d\x8c\x1e\x4f\x4e\x37\x0d\xe9\x22\x67\xb9\x30\xb8\x9f\x36\x5a\x8e\xa1\x4a\xb6\xcb\xd8\xd2\x1b\x3b\xdd\xb6\xb3\xa2\x9a\xd3\x11\x99\xd1\x80\x89\x5d\x1f\x31\x00\x40\x2b\xa7\xc0\x17\x09\xe3\x3c\xb0\x0a\x83\xf0\xac\xa1\x1f\x20\xab\x2d\x63\x2c\x68\xc9\x20\xc2\x0b\x27\x16\x3d\xd8\x4a\x51\x3a\xc5\x67\x82\xd5\xa8\xa5\x85\x18\x60\x52\xd0\x1b\x56\xd8\xa1\x64\x9d\xb0\x8c\xaf\x5c\x34\x1d\xab\x0d\xf6\x54\x84\xce\x66\x35\x53\x8a\x2f\x98\x0d\xa2\xe6\xff\x6c\x8b\xe1\xcd\x19\xb9\xba\x78\xe7\x42\xc9\x15\x31\x8c\xad\x66\x31\x89\xf4\xb0\xf9\x34\x8e\x06\xb4\x5a\xd9\x63\x42\xc8\x85\x92\x1a\x4a\xbc\x99\xfe\xed\x91\x28\x5f\xd2\x19\xbc\x4c\xc7\x10\x33\x9e\xb2\x67\x6d\x14\x10\x86\x9b\xcf\x19\xcd\x5d\xdc\xad\x61\x29\xab\xca\x48\xd2\xe4\xdc\x5c\xd1\xa9\x2d\x33\x8e\x91\xd9\x79\x63\x44\x15\xda\xab\x7a\x0b\xdb\xc7\x39\x23\xb2\xce\x19\x16\x31\x9f\x82\x33\x8f\xef\x36\xa0\xef\x90\x82\x88\x9b\x91\x6e\xb8\xae\x69\xbd\x44\x8a\x69\x4f\x22\x7a\x38\x83\x33\xb1\xbc\x3a\xf4\x0a\x23\x43\x58\x15\x89\xc9\x29\xe7\x5a\x22\x42\x23\x09\x12\x76\xdb\xa2\x6c\xeb\xae\xa5\xe2\x4c\xd3\x00\xfc\xaf\x2d\xf4\xc7\x7f\xf6\x98\x1a\xd7\x84\xe0\x78\x20\x32\xac\x23\x03\x9f\x05\x40\x67\x73\x4b\xd7\xbb\x57\x94\x10\x94\x04\x69\xac\x47\x1a\x36\x1b\x91\xcd\x1d\x12\xf0\x5e\xf9\x4c\x4f\x0c\x03\xad\x1b\x5a\x14\xcb\x31\xfb\x64\x48\x89\xb9\xc4\x40\x43\x21\x4d\x25\xb8\xf3\x37\x42\x31\x9d\x52\xb7\x9e\xe0\xe5\xab\x6a\xcc\x37\xa1\xc8\x11\xae\x49\x48\x48\x40\x75\x84\xdd\x1a\x41\xe0\xa6\xd1\xe8\x02\x37\xda\xfc\x49\xda\x3a\x17\xac\x5e\xda\x11\x12\x3e\xdc\x02\x9c\xc9\x96\x30\x47\xe0\x0e\xea\x6c\x7e\xf1\xa9\xaa\x31\xf4\x28\xf1\xeb\x15\xf0\x5b\xed\x0c\xb3\x34\x39\xee\xb1\x0b\x3e\xee\x12\x02\x86\x43\x27\xb3\xf0\x09\x60\xb1\xb3\xf7\x6f\x52\xd0\x17\xb6\x14\x16\xb1\xdb\xa2\x19\xc6\x6e\x7b\xcc\x0d\xc4\x76\xf6\xc0\xde\xd8\x4c\x57\xee\x17\x4c\x4e\xec\x6a\x8c\x39\xa9\x8e\x92\x5b\x66\x91\xb0\x91\x3c\x41\xd9\x65\x5f\xde\x62\x3a\x35\x83\xd0\x6e\x8c\x55\x67\x4b\xe8\x16\x47\x4a\x3d\x8b\xad\xc1\xd9\x4d\x24\x15\x4f\xb7\x6d\x6c\xa6\xbe\xd5\x77\x6e\xfb\x92\x3f\xde\xf6\x0e\x62\xbb\x65\x11\xaa\xbd\x4d\xad\x03\x7f\xe6\xbc\x9c\xd4\x06\x30\x65\x1e\xf8\x18\x39\x0f\x46\x14\x72\x1b\x2b\xa2\x65\xfa\x91\x92\x6d\x3c\x66\xbb\xcd\x6d\xf1\x0e\x16\xbc\xd5\x85\x0b\xe7\xd0\xb5\x8d\xdc\xb2\xe5\xb1\xc2\x1b\x60\x30\xd8\x9c\x57\x58\x9b\xcb\x90\x07\x23\x01\x6f\x79\x0d\xb0\x7d\x07\xd9\x6c\xdc\xc0\x88\xe3\x2e\xc5\x88\xbc\x97\xda\xfc\xef\xe2\x13\x57\x96\xdb\x7b\x23\x99\x7a\x2f\x35\x3c\x79\x92\x13\xc2\x85\x3e\xe5\xf9\x58\x9d\x14\x07\xe7\x4e\x40\xe7\x20\x38\xc0\x82\xdc\x39\xb8\x34\x22\xfe\x2c\xb9\x22\x97\x90\xd9\x1b\xb7\x74\xcb\xa1\xc1\x7f\xd7\xa5\x49\x31\x03\x3b\x19\x1b\x52\xe9\x58\x4f\xfa\xf5\x91\xed\xf9\xc9\xba\x73\x7c\x3b\x9f\x84\x9d\x00\xe8\xc6\xf0\x17\xc8\xf0\x56\x15\x34\x63\xb9\x4b\x57\x45\xcd\x4e\x51\xcd\x66\xbd\x3e\xe6\xf7\xb5\x92\xd5\x33\x50\xe5\x65\x51\x69\x13\x37\x2c\x60\x6b\x42\x8c\x6d\x4b\x72\x1c\x0e\xbe\x35\xf8\x3f\x32\x42\x69\x8f\x9d\x01\x8f\xf5\xb5\x41\xed\x8f\xe3\xd5\xb6\xb8\x97\xc1\xd0\xc8\x95\x94\xb4\x32\x77\xf2\xbf\x0d\xf3\x01\xa0\xfa\x3f\xa4\xa2\xbc\x56\x13\x72\xe6\xd2\x68\x85\xbf\x59\xe9\x31\xe8\x66\x8b\x29\x54\xe0\x11\xfc\x63\xc3\x17\xb4\xb0\x49\x39\xa8\x20\x0c\xd3\x8c\x99\xd9\xac\x32\xa1\x23\x72\x37\x97\x0a\x39\x19\x1f\x7e\x73\x74\xcb\x96\x47\xa3\x24\x0d\x86\x6b\xe1\x8d\x3f\xba\x14\x47\xad\xb6\xb8\x73\x5b\x3d\x8f\x06\x5e\xb5\x47\xf0\xdb\xd1\xee\xf9\xdc\xad\x38\xab\x6d\x8b\x3a\x6f\x9a\x40\xf2\x15\x7b\x4c\x3c\x4c\xdb\xe2\x23\xbd\xb0\xed\x42\x4c\x76\x30\xbd\x41\x71\x76\xb3\x74\x09\xe5\xac\xa0\xba\x2e\xc7\x26\x0d\x09\x32\x6f\x20\x1f\x1b\x10\xeb\xa8\x08\xd2\x45\xca\xc4\x83\x72\xd9\x71\x0e\xb5\xc9\x86\x9e\xd6\x0d\x1b\x91\x5c\x8a\x63\x6d\xd5\x5d\x61\xd2\xc5\xd5\xd4\x56\xf9\x86\x73\x38\x51\xa7\x49\x83\xd2\x9a\x41\xae\x2d\x97\x44\xd2\x6a\x18\x30\x01\x23\x68\x3a\xb5\xf3\x10\x31\x7f\x6e\x1a\x32\x3e\x20\xcf\x0e\x69\xc3\xf2\x84\x04\xdc\x05\x69\xbd\xc3\x61\xdb\x43\x0f\x06\xef\x6a\x4f\x93\xc6\x7b\x08\x88\x00\x8b\xb7\x61\x82\xa8\x16\xf9\x27\xab\x65\xd2\x08\x1b\x54\x47\xe9\xd0\x19\x67\xd1\x6f\x5b\x5c\xe0\x49\xdb\x3a\xa0\xf9\x01\xd8\xfb\x85\x35\x54\x42\xde\xce\x20\x2f\x49\x2d\xf1\x68\xc0\xe7\x01\x7e\xb8\x81\x55\xed\xfd\xca\xb5\x47\xf5\x4c\x15\x80\x81\xd6\x3e\x8d\x5a\xf5\x68\xf5\x3e\xce\x59\xab\x91\x97\x53\x5b\x24\x1d\x8d\x0e\x8f\x05\x45\x9f\x6b\xa3\x11\x98\xb8\x02\xad\xe2\xdb\xa8\xc7\xb7\x38\x56\xf4\xb7\x78\x47\xab\xad\xac\x60\xfe\xeb\x4e\x35\x7c\x7a\x23\x1b\xed\xd2\x85\xd8\xdf\xa1\xe6\xb0\x96\xce\xfe\xb8\x3f\xd5\xf9\x36\x3a\x8e\x64\x46\xfe\x31\x20\x8d\x9e\x30\x5d\x3f\xac\x11\x61\x34\x9b\x1b\x0e\x70\x8c\x6e\x16\x86\x4b\x75\xec\xe8\x1b\xb3\x75\xc8\x18\xca\x55\x12\x93\x06\x7c\xfe\x34\x1c\xc8\x05\xfe\x39\xce\x6c\xe4\x5c\x2e\x95\x75\x5d\xb3\xcc\xa9\x68\x43\x17\x92\xc6\x74\xea\x39\x97\x1a\xd9\xaa\x7e\x60\x95\x20\xa3\xae\x54\x96\x32\xb2\x07\xcb\xcd\x67\xfe\x62\x24\x8d\xb7\x61\x45\x6d\x36\x1d\x83\x4d\xad\x5f\x51\x23\xd6\x46\x32\x04\x2f\x79\x34\xcc\xb2\x69\x16\x42\x9d\x6a\x2b\xc8\xde\x03\xb9\xa2\xc1\xdf\xbc\x4d\x71\x69\x4f\xd5\x1f\x46\x9a\xf8\x1d\x1c\x91\x62\x3e\xd5\x33\xab\x6b\x59\x9b\x35\x31\xa5\x08\x87\x5d\x2e\x69\x7d\xcb\x72\xcf\x25\x4d\xc8\x95\x59\xbc\x93\xd1\x93\xc6\xac\x1d\x35\x72\x29\xa3\xc3\x22\x65\x66\x42\xc7\x93\xc9\xb1\xad\xa0\xb0\x5e\xb2\x2c\x19\x7b\xa5\x0a\xe4\x5b\x88\xe1\x9d\xfb\xfb\x8e\x56\x0a\xd5\x11\x86\xbd\x01\x75\xa4\x84\x5a\x81\x7a\xee\x6c\x8a\x34\x21\xc4\x66\x75\x39\x5b\x08\x40\xdb\xaa\x95\xb7\x51\x29\x27\x19\x0e\xb1\x6d\xaf\x46\xde\x4a\x85\x7c\x9f\xfa\xd8\x9e\x94\xbd\xf1\xdb\x6a\xfe\xb7\xd2\xc0\x94\x51\x2e\x81\xab\xed\xf1\x6a\x47\x70\xed\xe2\x8a\x7c\xe3\x64\x9f\x38\x87\x41\x3d\xb7\x95\xb0\xb7\xd1\x93\x3d\x89\xc7\xe0\x6a\x7b\x3a\x0f\xc2\xd5\x76\x39\xc5\x7c\xe2\x1b\x0b\x22\x86\x2e\x9d\x9e\xad\x8b\xcc\xbe\xbb\xda\x0e\xe1\x5a\xb8\xda\xf6\xec\x6a\xb8\xda\xd2\x5c\x0f\x57\x5b\x8a\x2b\xe2\x6a\x4b\x95\xce\xb0\x3d\xfe\x02\x87\xd5\xe0\xea\x8e\x90\x67\x59\x3b\x60\xb9\x40\xd4\xad\x02\x24\xb7\xd5\xbd\xb5\x84\x1a\xaf\x2e\xbd\x51\xb2\x68\x74\x7c\xc9\xb9\xfb\xba\x0b\xe9\x3e\x4c\xdc\x69\x36\x53\x89\xfd\x6a\xc7\x01\xdf\x00\x5c\x1b\x92\xe3\xed\x7a\xdd\x85\xe6\x6f\x7b\x2d\xf8\x21\x55\x7f\x8f\x49\xf8\x84\xed\xd0\x69\x9f\xb0\x1d\x38\xf9\x93\x1b\xf4\x31\x29\xa0\xb0\x3d\x6d\x22\x28\x6c\x5b\x82\x77\x4a\x52\x28\xd7\x1e\xad\x65\xf5\x49\xcc\x91\x62\x2e\x7d\x66\xe1\x8e\x10\x04\x89\x9a\xb4\x42\x69\xcc\xd9\x11\x6d\xf5\x96\x3d\xab\xea\x1e\xaf\xee\x77\x31\x2a\x67\x57\x97\x5b\x69\x51\x82\xef\xef\xd1\xa3\x84\x6f\xfc\x8c\x35\x29\x97\xa8\x1a\x09\x7d\xb2\xde\xb4\x2b\xb7\x71\x96\x89\xac\xcd\xd3\xc8\x94\x6b\xd3\x7e\x6b\xe8\x7a\x98\xab\x34\x38\x67\x2d\x6d\x48\x4f\xcb\x01\x58\x2a\xeb\xca\xf4\xa0\x2f\x6f\x8a\x13\x38\x79\x1a\xf9\xf3\x80\xb2\x24\xec\x47\x54\x1e\xc9\xd5\xd6\x39\xa9\xe3\xb6\x92\x06\x2a\x9b\x51\xf1\x15\x68\xdb\x2a\x99\xbf\x46\x23\x29\x15\x42\x62\xa5\x28\x35\x42\x43\x85\x1a\x59\x33\x4c\x90\xa2\x43\xe4\xa4\xe1\x39\x7a\x40\xfb\xec\x02\xc7\x9f\x93\x63\x1a\x2c\xff\x2a\xf5\x28\xc9\xa3\x3d\xcc\x68\xc5\xbf\x63\x75\x5c\x16\xfb\x4d\xad\x73\xb0\xb6\x27\x77\x8a\x2a\x9b\xb3\x92\xc2\x3f\xdf\xba\xe5\x19\x54\x63\xfd\xeb\x41\x2d\xc7\xea\xd2\xb0\x1e\xa3\x4e\x94\xe9\xd1\xe2\x55\x92\x7f\x6c\xdb\x1e\xe9\xe2\xe1\x4f\x61\x07\x9b\x71\xd5\x11\x31\x0c\x70\x83\xa6\x00\x8c\x2b\x2e\xd3\x8c\x57\x5b\x1a\x2a\xb3\xc0\xdd\x7b\x82\x85\xef\xc6\xfc\x8e\xed\xa9\xf4\x34\xdb\xea\x67\x46\x9e\xf7\xe9\x6a\x5b\xb6\x98\xc2\xa0\x9f\x19\xf4\x33\xff\xab\xf5\x33\x01\x61\x77\xb8\x7e\x83\xda\x25\xcc\x88\xea\x74\x2f\x6d\xdd\x83\x09\x6a\x3f\x9d\x1a\xc5\xe9\x50\xda\x12\x83\x68\xfe\x38\x9e\x4c\x8e\xd1\x00\x32\xf1\xea\xd2\x46\x4f\xc7\x7f\x24\x4c\x64\x32\x37\xfd\x60\x81\xc0\x5a\x69\x60\x2d\x5b\x89\x3d\x9c\x4b\xe9\xc6\x0a\x4d\x28\xd0\xf7\xb6\xdc\xc3\x56\x28\xd8\x45\xe5\xbf\xdd\x0d\x83\xb5\x15\x02\x6d\x59\x31\x5f\x97\xc9\x6e\x99\x2f\x55\x65\x79\xb2\x36\x87\x40\xc1\x4b\x6e\xbd\x93\x0d\x76\x61\x4a\xa7\xbb\xef\x11\x72\x82\xdd\x4c\xb2\xaa\x19\xd9\x2e\x27\x25\x2b\x65\xbd\x1c\xf9\x6e\xcd\x8f\x9d\x71\xec\x1b\xa7\xc0\xf4\x65\x4d\x5d\x33\xa1\x8b\x65\x6c\x72\xa9\x4d\xed\x09\xb9\x3f\xb7\xa3\x07\x66\xfe\xfc\xc1\xa6\xfa\x97\xb4\xad\x7b\xff\xdb\x3a\x84\xa0\x90\xf3\xbb\x02\x34\xc6\xa6\xb1\x1b\xb5\xfa\x09\xf3\x94\x89\x05\x59\xd0\x5a\xa5\xdf\x37\xf2\x78\x7e\x2f\xe7\x0b\xae\x76\x12\x72\x70\x6d\x89\x1f\xea\x99\x65\xa3\xab\x46\x5b\x74\xec\xae\x91\xab\x48\xe6\xaf\xcf\x0a\xd3\xfb\x2a\x5e\x45\x14\xb6\x8a\x6a\xcd\x6a\xf1\x9a\xfc\xe7\xc9\x7f\xfc\xe6\xa7\xf1\xe9\x5f\x4e\x4e\xbe\x7f\x39\xfe\xd7\xbf\xff\xe6\xe4\x3f\x26\xf0\x8f\x5f\x9f\xfe\xe5\xf4\x27\xf7\xc7\x6f\x4e\x4f\x4f\x4e\xbe\xff\xea\xdd\x5f\x3f\x5e\x5d\xfc\x9d\x9f\xfe\xf4\xbd\x68\xca\x5b\xfc\xeb\xa7\x93\xef\xd9\xc5\xdf\x23\x3b\x39\x3d\xfd\xcb\xaf\xb6\x9a\x2e\x15\xcb\x6f\xb6\xc0\x6f\xd8\xc6\x8f\xa4\x8f\xdd\x5e\x76\xe5\x09\xce\x85\x1e\xcb\x7a\x8c\xdd\xbd\x06\x97\xc5\x2d\x3a\x75\x60\xb1\x8b\x7b\xd8\xd2\xe1\xb6\xc6\x9e\x13\x3e\x9e\xe0\xa2\xed\x4a\xbe\xd8\x81\xb1\xa0\x92\x79\x10\x18\xbd\xef\x3c\x04\x36\x20\x5f\xf9\xf8\xff\x1a\x94\x19\x62\x16\x14\xd0\xb4\x9e\x84\xe4\xa4\xaa\xf9\x82\xea\x36\xbc\x2e\x88\xb4\x8e\x1e\x30\x9b\x53\x2e\x4e\xdb\xe0\xae\x4a\xe6\xc0\x9e\x36\x8a\xf9\x2c\xfd\x86\xc4\x7f\xfc\xfa\x9a\x64\x05\x07\xf7\xf8\xda\xa7\x18\x8e\x1e\xc6\xc5\xd7\xcf\x98\x60\x35\x06\x98\x93\xd5\xe9\x43\xbd\x24\xae\x11\xf0\x44\xde\x9b\x76\x37\xd8\xb5\xce\x19\x7d\x40\x82\xef\x52\xb7\xa1\xcf\x2d\x7a\x1d\x42\xb8\xb1\x4d\x23\x6a\xfd\x10\x69\x55\xd5\x72\xc1\xd2\xbc\xa6\x2c\x4f\x81\x25\x4c\x94\x02\x87\xfd\x70\xfb\x71\x5b\x47\x7e\xd9\xe0\x05\xda\x89\x85\x8c\x3f\xa0\xd5\x5e\xc9\x7d\xb9\x03\x3e\xda\x87\xb9\x64\x2a\x60\x51\x1b\xa1\xf9\xc3\x15\x1a\xef\x19\x4e\x91\x39\x5d\x18\xd9\x93\x09\x5c\x24\x52\x65\xf0\x82\xeb\xde\x8a\xc0\xa3\x2b\x32\x9f\x95\x6b\x16\xd7\x70\x01\x96\x05\xc8\xaa\x91\x0e\x54\x56\x4a\x9c\x99\xbd\xa9\x97\xa0\x8f\x95\x04\x2e\x0e\x9e\x74\xb8\x85\x16\xcc\xb1\xb0\xbc\xc8\xd1\x7b\x33\x7a\x44\x9b\x48\xc3\x82\x8e\xcb\xee\xcb\x36\x03\xe0\xe4\x5a\x53\xdd\xa8\xc9\x97\x66\x66\x1f\xd8\xb4\x66\x6a\x7e\x16\xcf\x28\x9a\x29\x2a\x4d\xcb\x6a\x8b\x1d\x31\x37\x18\x3d\x8f\x7d\xbc\x01\xaa\x2e\xfc\x92\x7d\xf9\x7b\x8f\x56\x6c\x46\x90\x14\x8d\x22\x68\xa9\x46\x88\x10\x2a\x6a\xee\x35\x42\xe4\x86\x71\x6e\xd9\x12\x24\xbc\x2d\x41\xff\xdc\x40\x3e\x74\x80\x09\x6b\x12\xf6\xe4\x63\x67\x95\x0e\x79\x62\x40\x74\xbb\x35\x06\x04\x21\xe7\x06\x70\x60\x13\x12\x08\x83\x57\x17\xef\xa2\x07\xb3\x39\x8c\x6c\x06\xe8\x00\xc1\x9d\x98\xfe\xbf\x3a\xbf\xfe\xe5\x1f\xed\x10\xa7\xa1\x56\xa0\xb4\x76\x84\xd4\xa1\xb8\xcd\xd4\xb1\x0a\xe5\x88\x28\xec\xa5\xed\x02\x6d\x5b\x19\x25\xde\xa9\x11\x3f\xb5\x2e\x98\x35\xd3\x4d\x0d\x42\x35\xaf\x37\x0d\x2a\x48\xc1\xe8\x74\x0c\xb4\x4b\x6a\x4c\xc8\x71\x9a\x70\x5e\x57\x60\x22\x0f\x2e\xd7\xfa\xe1\xe1\x0e\x8e\xcc\xf9\x65\x8c\x2c\x65\x63\x63\x91\xb1\x76\x14\x31\xe2\x7c\x3c\x90\x51\x01\x99\x0b\x0d\xe5\x41\xb6\xc0\xec\x0d\x06\x53\x2c\x65\x03\x84\x30\x00\xde\x8d\x40\x19\xbf\x93\x6b\x73\x05\x7d\x42\x49\x6f\x19\xd1\x77\xb2\x7b\x8d\x60\x5a\x3e\x3c\x55\x19\xb1\x9a\x8b\x2c\xae\x58\x34\x36\x34\xca\x77\x0e\xa9\xb6\xc6\x91\x91\x75\x41\xad\x5c\x45\xff\x96\x03\x58\x21\xcb\xe6\x34\xb7\xa2\x56\x66\xf7\x60\x67\x5b\x77\xd4\xba\x66\xaa\x92\x02\x74\xac\x40\x47\x40\x05\x36\x21\xe4\xdf\x57\xf6\x25\x61\x89\x45\x41\x04\x43\xb5\x6d\x36\x67\xd9\xad\xcd\x01\xcb\x95\x91\x56\x31\x44\x6d\x64\x15\x01\x63\x98\x0e\x10\x44\xb3\xd4\x65\x92\x73\x42\x26\x85\xcd\xde\x9b\x88\x7c\x42\x06\xc4\x15\xea\x56\x24\x9b\x4b\xa9\x2c\x4f\xd0\x15\xfb\xc2\x3d\xe4\xf1\xf4\x02\xf9\x90\xff\x03\xf3\x6c\x0a\x1d\xde\x79\x5e\x56\xe8\x00\x04\x7b\x7b\xac\x48\x2e\xb3\xc6\xff\x6d\x76\xae\x60\xb4\x16\x64\x2e\xef\x88\x8e\x8f\xdb\x31\x57\x63\x65\xc2\xd6\xb3\x59\x25\xc4\xb7\x1f\x28\xf5\xce\x2d\x5b\x7e\xec\xcf\xfe\x1b\x7e\xd1\x46\xd2\xec\xd1\x18\xbf\x09\x9d\x1c\xca\x2f\xe9\x6f\x3e\x36\x69\x1d\x8d\x03\x32\x30\xf8\x01\xd4\xb2\xd6\x95\x6c\x85\xcb\x4b\xb8\x07\x04\xbc\x72\x0c\xc7\xdc\xde\x71\x45\xd4\x5c\x36\x05\x30\xfe\x1b\xf9\x90\x09\x21\x7f\x9b\x33\x61\x49\x81\x45\xc2\x69\xce\x44\xf7\x21\xec\x75\x44\x6c\x70\x88\x6a\x91\x88\x47\x87\xa9\xde\xda\x0e\x65\x76\xb9\xce\x9a\x05\xf8\x63\x44\x6e\x58\x46\xcd\xaa\x57\x71\xb0\x44\x84\x99\x1a\xc0\x81\x49\x46\x4b\x9e\x8f\x1d\x7a\xdf\x7b\x98\xd9\xa6\xf3\x7a\x02\xb8\x5d\x63\x0d\xf6\x00\xb7\x91\x0c\x64\x37\xa9\x4e\xd9\x14\x9a\x57\x05\x26\x8a\x83\x38\xd4\x44\x4b\x59\x87\xff\xb4\x91\xac\x30\xe6\xd5\x87\xcb\xef\xce\x3e\x5e\x90\xaf\x2e\xfe\x1d\x1f\x8f\x42\x4f\x14\xea\xb8\x4c\x4b\xc6\x93\xc6\xbc\x65\xcb\x2d\xf6\xa6\x65\x5f\x71\x9d\x00\xed\xe7\x17\x1f\x3e\x5e\xbe\xbd\x3c\x37\x33\xc5\xc7\xa3\x55\x87\x19\x64\x4f\x93\x86\x5b\xc7\x53\x3e\xee\xd2\xb1\xb7\x70\xf7\x30\x87\xd1\x12\x13\x70\x95\x2c\xe7\x86\x34\xa5\x30\xa1\xa6\x7d\xab\xba\x7a\x97\x16\xd0\x09\x24\xb4\x07\x14\x72\x05\xc5\xe0\x56\xb9\x4f\xe4\xe8\x1c\x7c\xa4\xe1\x0f\xe0\x41\x1d\x1e\xa0\xda\xf0\xdb\x35\x67\x0b\x54\x31\x78\x1c\xb2\x49\xe9\x83\x5b\xe2\x59\xd7\x54\x1f\x9f\x7f\x58\xc3\x67\x89\x1a\x98\xae\x40\xb7\x91\xc9\xee\x70\x5f\x69\xab\xf4\xc9\x03\x8a\xe5\x2a\xc6\x5d\xc3\x9e\x77\x54\x39\x59\xc6\xea\x3e\x00\x50\xe3\x47\xdb\x0a\xc3\x59\x7a\x73\x78\xa4\x06\x27\x3b\x90\xdf\x81\xfc\x3e\xd0\x2c\x37\x7b\x28\xe0\x34\x68\x1e\xdc\xbc\xe5\xd4\x0c\x0d\x91\xaf\x1d\xed\x9b\xd3\xeb\xfa\x02\x1c\x50\x69\x34\x69\x0c\xcc\x6b\xe5\xd3\x9f\x30\x72\xf4\xe1\xfa\xec\xb7\x2f\xff\xf0\xc5\xd1\x08\xfe\xf9\xbb\x97\xff\xfa\x7b\xf3\xcf\x8b\xf3\x37\xd7\x67\x57\x5f\xfc\x4b\xf0\xc7\x6f\xff\xf8\xbb\xa3\xb4\x10\x4d\xfb\xe1\xbf\x7c\xf1\xca\xa6\x5e\x39\xba\x78\xf3\xc5\xbf\xfc\xcb\xab\x7f\xdd\x22\xcd\x62\xe2\xd1\x95\xf4\xd3\xc5\xa7\x8a\x63\x99\x90\x6b\x66\x84\xd4\x83\xc5\x35\x6f\x1a\xdb\x69\xab\x4a\xfa\x89\x97\x4d\xe9\x0b\x9b\xa2\x03\x94\xd6\x56\xed\x9b\x7a\x29\x82\xfb\x97\x08\x08\x5e\x89\x29\x2b\x34\x8f\x72\x9b\xa3\x90\x2c\x58\x7d\x43\x35\x14\x5e\xb3\x84\x60\xa3\xe2\x55\xa5\x88\xcd\xa6\xb5\x56\x09\xaf\x3b\x68\xd3\x93\x27\xce\xfe\x72\x4a\x24\x6e\xdb\x08\x6a\xdf\x8c\x69\xc5\x6d\x05\x47\xb8\x29\x8a\x69\x6b\xe4\xf8\xe3\xef\x7f\xf7\xf2\xe5\xc9\x17\xbf\x23\x73\xd9\xd4\xea\x74\xb2\xf2\x7a\xd2\xa8\x56\x33\x07\x24\xdc\x5e\x21\x35\x97\xb5\x76\x75\x91\x7f\xfb\xfb\x97\x2f\xc9\xc9\x2b\x18\xea\xd4\x6a\x37\xdd\x81\x43\x98\x07\xbd\x49\xe4\x53\xf0\x44\xb8\x22\x7f\xf8\xe3\xef\xbf\xf8\x9d\xe9\xfd\x5f\x5f\x91\x9c\x2e\x93\xd9\xac\x8f\xf7\xe9\x29\x2c\x60\x1a\x1e\x8f\x01\x72\x06\x1e\x60\x45\x9f\x65\xe3\x4e\xd2\x88\x84\x07\xf1\x5f\xdb\x4d\xfa\x35\xee\xd2\xbb\x0d\xd7\x03\x03\x6b\x84\x5c\xdf\xcf\xa4\x21\x95\xbd\x6c\x9d\x33\x40\x1d\x95\xd2\x35\xe5\x18\x76\xcf\x04\x14\x42\x01\x9d\x6d\x17\x1a\xd2\x84\x87\x1f\x3a\xe1\x2e\x3f\x74\x15\xb8\x82\x61\x39\x51\xb3\x99\x6b\xc9\x99\xc1\xad\x3f\xaa\xb2\xf1\xca\x96\x62\xa9\x36\xd8\x1c\x07\xd2\xe9\xa8\x34\xdd\x4c\xbf\x9d\x03\xdb\x0e\x92\xa4\x58\x2c\x75\xac\x3c\xf6\xc8\xc9\xf9\xf5\x87\x36\x55\x88\xad\xcc\xea\x98\x56\x9f\xf9\x64\xaf\x04\x06\x6b\xb4\x6c\x65\xa5\xc6\x4f\xef\x09\x6e\xb1\x3f\xfe\x8c\xe3\x5a\x3e\x9b\x0c\x21\xd7\x78\x14\x43\x7a\x90\x27\x4f\x0f\x82\x27\x31\xe4\x06\x69\x17\x37\xe4\x06\x81\x36\xe4\x06\x09\xdb\x90\x1b\xa4\x33\xee\x90\x1b\x64\x88\x3d\x19\x62\x4f\x9e\x3e\xf6\x64\xc8\x0d\x32\xe4\x06\xd9\xdc\x86\xdc\x20\xfd\x6d\xc8\x0d\xf2\xbf\x2d\x37\x08\x82\xd8\xa6\x0c\x21\x56\x22\x6d\xd3\x83\x7c\x76\xd9\x41\x94\x39\xe4\x8c\x9d\x65\x99\x6c\x84\xfe\x28\x6f\x59\x74\x74\xfb\x8a\x0e\x65\xad\x1f\x73\x29\xef\xd3\xa9\xac\xbf\x7c\x30\x05\xcb\x33\xac\x5e\x46\x9b\x9c\x33\x91\x16\xcf\xf2\x18\xd4\xeb\xc6\x73\xf4\xdc\xf0\x31\x22\x67\x79\xfb\x83\xc5\xcb\xda\x1c\xcd\x84\x9c\x91\x9a\x65\xbc\xe2\xb6\x44\x00\xc5\xe7\x69\xf6\x17\x73\x2f\x6c\x21\xe8\xa5\xb9\x2d\xac\x98\x7a\xf4\xe8\x0b\x44\xd7\x81\xfe\xc1\x52\xea\x95\x29\xa5\x89\xb1\x66\x9a\xc8\x07\x02\xd7\x77\xc7\x15\x73\xb6\x5f\x6b\x32\x08\x56\xf9\x31\x1c\x2d\x0c\x37\x4b\x1d\x36\x58\x8e\xdd\xc7\xad\x94\xd9\x5b\xe1\x4a\xf6\x54\x06\xb6\xb5\x81\x5b\x66\x11\x4c\x53\x58\x5b\xc5\x57\x92\x5c\xd0\x82\xe7\x86\xfa\xba\x04\x18\x88\x12\xd2\xc0\x18\xf1\x87\x87\x52\xd5\x9e\x26\x06\xb7\xd0\x6c\xce\x54\x30\x33\x94\x78\x6e\xad\x95\x2d\x31\x60\xc3\xb4\xaa\x68\x66\x5c\xa0\x80\x04\xfd\x3b\x7e\xa3\x0d\xb9\xb0\x0b\x59\x9d\xdc\xc7\x60\x60\xf3\x79\x9a\x09\x05\x18\xcc\x8d\x11\x1e\xb8\x5a\x3e\x0d\xff\x50\x44\x16\xb9\x33\x49\xfc\xf1\xa5\x91\xa9\x33\xbc\xba\x89\x8a\x5e\x85\xd1\x22\x5a\x92\xc2\x70\xfb\x86\xcc\xdd\x3f\x90\xb7\x7d\xbc\x09\xae\x0e\xda\x7c\x92\xfd\x18\x7c\x9e\x09\x4d\x0a\x46\x95\x26\xaf\x5e\x92\x92\x8b\x46\x6f\x93\x1b\xff\x51\xa6\x95\xdf\xff\x2e\xfa\xbb\x47\xe5\xd4\x4f\xbc\x6d\xa1\x34\x06\xff\xf6\x22\x99\xd5\x1b\x97\x00\x7c\x95\xe4\x42\xaf\x0a\x68\x81\xc3\x53\x3a\x36\x05\xcd\xf4\xde\xb0\xd8\xd6\x62\xcc\x8f\x8d\xbc\x59\xf6\x05\x29\xa6\x6d\xb8\xed\xb2\x5b\xdf\xec\xff\xd9\x87\xb8\xbd\x12\x49\xd4\xdc\xb0\xe6\xa0\xc7\x50\x73\x5a\x33\x5b\x39\xf9\x58\x79\x7b\x62\xdf\x7e\xbd\x31\x43\x40\xd0\xd0\x6b\x3f\x02\x57\x24\xf7\x8f\xbd\x2a\x83\x8b\xb1\xae\x19\xf3\x93\x03\x29\x03\x74\xf4\xce\x0e\x19\x19\xd5\x1f\xcd\x38\xc5\xb2\x4b\x63\x52\xb3\x19\x57\xba\xee\x53\xe3\x8e\x63\x10\x6f\x3c\x17\x35\xab\x65\x13\x51\x1e\x20\xfd\xb2\x41\xc7\x4e\xa1\xe1\x0c\x4b\xb6\x12\x76\x8c\xcb\x9f\x45\x83\xf6\x74\xa0\xb7\xde\xaf\x12\x2e\x4b\xcd\x68\xfe\x8d\x28\x22\xb4\xd2\xe9\x4b\x77\x7d\xa3\xac\x0a\xd4\x0e\xac\xf3\x00\x82\x0e\x40\x5d\x19\x76\x10\x83\xe1\x3e\xb0\x1c\x39\x3a\xf3\xf9\x18\xd2\x5f\x04\xda\xdc\x18\x9c\x11\x52\x8e\x29\x2d\x54\x74\x45\xfb\x38\xa9\xc9\x01\xe8\x7e\xb6\x0c\xfb\xee\xa2\x0b\xeb\x25\x2d\xeb\xd6\x2b\xda\x6d\xdf\x07\xf7\x81\x65\x18\x62\xa4\xe8\x96\x39\xa6\x81\xdd\x87\x2a\xc0\x40\xaf\xcd\xb5\x47\xc3\xeb\x89\x1f\x2d\x0c\x95\x73\x8e\xad\xf6\x94\x32\x59\x96\x34\xaa\xe0\x0f\x5a\x02\x29\x04\x67\x2b\x1b\x35\x21\x74\x4d\x8b\x76\xd5\x41\xd2\x8a\x5d\x02\xb9\x66\x82\x8a\x08\xa3\x7e\xfa\x79\x61\xcf\x44\xde\x79\xa7\xec\x19\x5f\x30\xb1\x0a\xdd\x56\x08\xf9\x92\x66\xb7\x2c\x2a\x7e\xf3\x5b\xe5\xf6\x37\x5f\x0a\x6a\x63\xea\x0c\x3a\x5b\x70\x73\x0d\x58\xbe\x32\x82\x1a\xb5\xfe\x44\x50\x43\x19\x43\x16\x91\xd1\xdc\xe5\x56\x36\x8a\x45\x24\xef\x48\xdf\x48\xd3\xef\xe3\xb1\xa4\x42\xfb\x4f\xcd\x17\x19\x73\x9c\xb3\xe9\x79\x97\x3b\x80\xb3\x4b\xdc\x03\x07\x07\xc1\x7d\xb3\xbe\xe9\xd6\x85\x01\x13\x16\x14\x06\xe7\x2d\x5d\x62\xa6\x55\x28\xb2\x85\xff\x63\xb1\x59\xef\x6a\xea\x9b\x1e\x72\x9c\x76\x8c\xf5\x4d\xde\x45\x5b\x1f\x68\x2e\x15\xf9\x12\x22\x2f\xde\x30\x10\x67\xf6\xc7\xf0\x7c\xf8\xf2\x4d\x0f\xb3\x63\xe6\xf7\x9c\x18\x1d\x5e\xd2\x59\x1f\xeb\x3c\x26\xa5\x14\x5c\xcb\xfa\x61\x7c\x18\xcf\xe7\x4c\x55\x9c\xdb\x73\xfa\x0d\xc6\x9e\x9d\x34\xd1\x26\x56\xf0\x7e\xcf\x81\x99\x10\x0e\x7d\x29\x1b\x72\x47\xb1\x78\x24\xc0\x45\x0c\x6d\xff\xc8\xab\xd7\xe4\x42\xa8\xa6\x0e\x22\x6e\x57\x07\x33\x48\xd0\x1d\xab\x43\x85\x00\x6c\x58\x35\x12\x0a\xbc\x61\xd2\x87\x88\x11\x2f\x3e\xd1\xb2\x2a\x98\x7a\x4d\x8e\xd8\x27\xfd\xbb\xa3\x11\x39\xfa\x34\x55\xe6\x7f\x42\x4f\xd5\xd1\x84\x5c\x96\x55\xc1\x33\xae\x8b\x25\xe1\x62\xca\xea\xda\x6b\xf5\xf1\x83\x15\x27\xa7\x98\x31\x13\x75\xec\x4a\xcb\x9a\xce\xd8\x0b\x4b\x0b\x7e\x59\xdf\xf4\xd3\x98\x04\x8c\x07\x80\xba\x0f\x90\x81\x8e\xbd\x82\x07\xb0\x05\x3e\x8a\xad\x6d\xb6\x61\x9f\x98\x3d\xae\xc9\xed\x1f\x61\xa7\xec\x9e\xbc\xa8\x6f\xf2\x17\x1f\x2e\xce\xde\xbc\xbb\x98\x94\xf9\x2f\xe7\xf2\x6e\xac\xe5\xb8\x51\x6c\x1c\xe1\xea\x9c\xb0\x57\xb7\x6c\x09\x39\x89\xf6\xb0\x5b\xb6\xeb\x8e\xbc\xae\x25\x98\x0b\xe0\xb9\x61\x9e\x3e\x7c\xf9\xe6\x5b\x15\xa7\x1f\x0c\x04\x8b\x17\x4c\x67\x2f\x32\x56\xcd\x5f\xd8\x31\x3e\xcf\xbd\x0f\x0c\x3c\x6b\x2b\xea\xf9\xd4\x61\xd9\x7d\x9c\x9b\xeb\x1b\xa9\x7f\x26\x8b\x02\xfd\xe2\x0d\x4e\x3c\x67\xd5\xdc\xbf\xf0\xec\x76\x3d\xce\x11\x2d\xda\xfd\xec\x30\x3a\x1c\x02\x39\xa7\x64\x84\xc1\x2e\xfd\x28\x4d\xbf\x5d\x7c\x05\x4f\x62\xd1\x55\x70\xe5\xea\x9b\x6d\x09\xc1\xf3\xb9\x64\xfd\x64\xe6\xc9\xb4\x0b\x1f\xdc\x8f\x8a\x69\xa0\xf7\x5c\x10\xcc\x51\xff\xce\x70\x1a\xfb\x52\x23\x1c\xf8\xc0\xe2\xf4\x15\xe8\x7a\x1e\x95\xe3\x34\xfd\x14\x7c\xe7\xc0\x55\x07\xbe\x18\xb4\xd1\x73\x26\xb4\x0b\x4f\xb4\xfe\xef\x21\x8d\x22\x97\x53\x94\x68\xf3\x28\x03\xb7\x5c\xb0\xba\xe6\x39\x53\x24\x81\x48\x85\xda\x33\x5e\x3c\xbb\x03\x8c\xb4\x38\xa7\x19\x83\xe3\xbd\x6f\xb6\x33\x1d\x3c\xc6\xe3\xe6\xd0\xbe\x36\x07\xf6\xb2\x79\x9c\x7f\xcd\xd3\x7a\xd6\x24\xdb\x89\x53\xbc\x69\x1e\xe3\x61\xb2\x57\x95\x53\x87\x98\xc3\x93\x2d\x88\x39\xcd\x4b\x1e\x15\xb2\xfc\xac\xc9\x39\xac\xe2\x81\xd7\x55\x46\x0b\x76\xf9\xcd\x2e\x55\x46\xb6\xcb\xae\xda\xe8\xda\x3e\xac\x58\xed\x72\x35\x38\x8d\xa0\xd6\x34\x9b\x5b\xd5\x8e\xb3\x15\x48\x01\xa1\x64\x08\x5b\x44\xc8\xbc\xdf\xb8\x1b\xea\x8d\xdc\x68\x0f\xeb\x8e\xdc\x44\x9f\x93\xfe\x68\x46\x35\xbb\xeb\xe5\xcf\xc7\x2d\x89\xee\x7f\x13\x94\x22\x9f\xb9\xa6\x29\x45\x9b\xe4\x5d\xfb\xd7\x7a\xd9\xa5\xfe\x68\x72\x8f\xe6\x28\x0d\xc9\xc0\xb7\x3b\xd3\xfd\x62\xf3\x77\xff\xd3\xb4\x8f\x48\x58\x68\x4b\x3c\x4f\xfb\x95\x3b\x2b\xd8\x44\x1b\xd7\xe9\x58\x08\x77\x01\xcf\xae\x2e\xc9\x5f\xf1\xf5\x9d\xae\xb2\xaa\xa5\x46\x81\xfb\x8d\x2c\x29\x8f\xf0\x4b\xec\xac\x60\xf5\x73\xb7\x94\x90\xd7\x75\x4b\xb8\xf2\xef\x12\xfb\xb2\xcb\xe6\x80\x35\xe2\x9b\x9a\xe5\xc4\x2a\xeb\x76\xba\xc6\x83\xc8\x59\x6b\xf2\x10\x39\x31\xbf\xbd\x80\x3c\xa9\xa7\x93\x56\xe6\x5a\x11\xc8\x62\x34\x03\x3b\x11\xd9\x9e\xa1\x50\x14\xd8\x77\x5c\x24\x66\x2b\x08\x39\xb0\x01\xb6\xc3\x7b\x17\x46\xf5\x2f\x14\x07\x37\x9d\xc0\x31\xd6\xe6\xb9\xe4\xaa\x0d\xb6\x44\xd9\x6a\x44\xbe\x96\x33\x2e\x1c\xf2\x92\xd6\xf1\x6c\x4a\x63\x04\xa2\x41\x4e\x19\xe4\x94\xd5\x36\xc8\x29\x1b\x9b\x52\xc5\x85\xa0\x37\x45\x8c\x4f\x78\xd7\xe9\xdd\x7f\x48\xde\x16\x74\x46\x18\xfc\xf1\x22\xe7\xca\xfc\x9f\x5c\x5f\x7f\x0d\x5e\x16\x8d\x70\xca\x14\x80\x00\x4b\x2b\x7d\x49\x0b\xc4\xc9\xbb\x45\x92\x48\xaa\xde\x45\x05\x7b\x6e\x81\x26\xdb\xee\x7d\xbe\x6b\xd5\x09\x8c\xb0\x6f\x00\xb6\xa4\x3e\xec\x1b\x3d\xaf\x6f\x98\xb9\xa5\xd9\xed\x55\xe0\x14\x21\x6b\xf3\x4c\x04\x8f\x12\x99\xac\xe4\xaf\xb7\x63\xb7\x56\x86\x89\x3b\x86\xab\x74\xa5\x76\xf0\xa5\xe3\x5b\x1c\xd1\xb9\xb6\x5b\x0b\xbf\x51\xa5\x64\xc6\x5b\xa7\x1e\x9b\x2d\xcd\x31\x33\x39\x30\x33\x3b\xdd\x0c\xe4\x9f\x53\x97\x83\x0c\xfa\x06\x0e\xcc\x01\x8a\x7d\x83\xaa\x90\xe3\xe2\xc2\xad\x7a\xa7\x4b\x40\x70\x8c\xcb\x81\x92\x7e\x39\xda\xde\x57\xd7\xeb\x2f\xc2\xaa\xbb\x88\xcb\xaa\x60\x4f\x38\x42\x9a\xb3\x6b\x9e\x53\x54\x63\xac\x41\x01\x57\xfe\xd2\x41\x9d\x81\x9d\xed\x5f\x4c\x9a\x95\x44\x55\x02\xf2\x55\x5d\xbf\x39\x7c\x66\x5d\x4c\x00\x6b\x54\xb2\x6a\x0a\xf4\x7a\xf7\x8b\xeb\x5b\xd5\x23\xad\xf1\x38\x8b\xdd\x68\x07\xe2\x39\xac\x20\x12\x7b\x1f\xe0\x19\x06\x7a\xa7\xc7\xe3\x3b\x88\xc5\xc4\x7f\x37\x4b\xd7\x5d\x92\xcc\x7e\xc8\x70\xfc\x5d\x85\xdf\xc7\x68\x37\x3a\x01\xfa\x1d\xa9\xeb\xe5\xef\x7f\xf7\xbb\x28\x82\xc6\x6b\x96\x69\x09\x2e\x9b\x36\x81\x87\xf7\x18\xa0\x35\x03\xe9\x00\x63\xe5\x9d\x7e\x03\xdd\x06\x75\xa4\x55\xe5\x10\x91\xf9\x7b\x8e\xc4\x4f\x8b\xe9\x48\x89\xb4\x8f\x34\x87\x6f\xe1\x2d\x03\x19\x93\x2e\x0f\x96\x31\xe9\x40\x79\x92\x0e\x93\x1d\xe9\x10\x39\x91\x0e\x92\x09\xe9\x70\xf9\x8f\xf6\x9c\xf5\x68\x2f\x2e\x26\xfb\xcc\x6b\x94\x18\x24\x9c\x16\x20\x1c\x9f\xb9\x28\x3a\x8c\x38\x35\x84\x38\x21\x37\xd1\x6e\x33\x12\x25\x4b\xf4\x29\xd9\x87\xb6\x0d\x8f\x3b\x5c\xa6\xa1\x27\xcc\x2f\xf4\xd4\x59\x85\xf6\x9c\x4b\xe8\x70\x19\x84\x0e\x92\x37\x68\x9b\x38\xd4\xf4\x1c\x41\x29\xf1\xa7\xdb\x5e\xae\xbd\x67\x01\xda\x49\xee\x9f\x1d\x67\xfc\xd9\x5d\x9e\x9f\xc3\x39\x52\xc6\x67\x3f\x79\x74\xce\x13\x95\x9c\xf4\x24\xdd\xde\xb3\x2f\x65\x4d\xdb\xfb\x46\xe5\x94\x4b\x0c\xeb\x12\xbb\x1f\xa3\xab\x9c\xaa\x28\x96\x89\x6d\xb6\xf6\x2d\xdc\xb1\x1e\x82\x24\x68\x70\xb0\x77\xd9\xc3\x5c\x24\x2a\x71\xb0\xd3\x6f\xae\x57\x3c\x42\xfc\xe3\x7d\x3a\x82\xf8\x41\x7a\x5c\x41\xdc\xc2\x0f\xe0\x0c\x32\x78\x5b\xec\xce\xdb\x62\xf7\x71\x3a\xcf\xcd\x40\x9f\x0f\x06\xfa\x64\x03\xbd\xea\x54\x91\x77\x0a\x63\x40\xc9\xc0\xd4\xca\x9b\xb0\xe2\x52\x8b\x23\xce\xae\x2e\x23\xc6\x69\xab\xc2\xa8\xc9\x26\x6e\xd7\x99\xee\x2c\x17\xed\x33\x9f\x6b\xcd\xca\xaa\x17\x8d\x90\xc1\x3e\x3f\xd8\xe7\x37\xb4\xc1\x3e\xbf\xb1\x1d\xda\x5e\x37\x6f\x4a\x2a\xa0\x62\x2a\x98\xf1\x3b\x0e\x63\x2b\x0c\xcd\x84\x58\x4c\x1a\x79\x2d\x31\x13\x03\xe4\xc6\x68\x04\xff\xb1\x61\xad\x3e\xcb\x33\x96\x7b\xb2\x75\x42\xdf\xfb\xdd\x40\xe4\x8b\x57\x30\x73\x26\xd7\xa2\x88\xed\x9a\xfd\x66\x3a\x14\x1b\xbb\x89\x30\x4c\x47\x45\x0b\xd5\x52\x6c\x59\x9c\x0e\x93\xde\xd1\x3f\x58\xf4\x03\x38\x21\x56\xcb\x1d\x72\xa6\x06\x10\xcc\x7a\x6c\x1a\xae\x1b\x46\x4a\x5e\xd7\xb2\xb6\x76\xd7\x70\x49\xe8\x40\xc8\x67\x73\xcd\x6a\x94\xfc\xeb\xe8\xfa\x58\xd7\x4c\x5b\xa8\x02\xa8\xd4\x12\x2a\xfa\x09\xfb\x6f\x17\x4e\x03\xcb\x75\x74\xe8\x86\xcd\xe9\x82\xcb\x26\x2a\x80\xf4\x1a\x29\xe5\x91\xfd\x18\xf8\xa7\xa5\x6c\xbc\x85\x09\xcb\x9e\xf9\x3d\x54\xeb\xe7\x15\x31\xc8\xfb\xf6\x73\x50\xd0\xe4\xd2\xa9\xcf\xc7\xec\x13\x57\x7a\x7d\xc7\xdc\x51\x59\x1b\xe3\xce\xae\xc1\x42\x55\x06\x8b\x7f\x17\x91\xfe\x21\x0d\xf8\x3b\x1d\x77\x05\x9f\xc5\x35\xfc\xd4\x27\xf6\xd8\x8c\x70\x98\xc0\x85\x94\x34\x9b\x73\x91\x94\x3c\xe1\xbb\xce\x14\x3a\xf2\xcf\x84\x9c\x15\x45\xeb\x3b\xa8\xbc\x4b\xab\x93\x87\xba\xd3\xd7\xfd\x25\x82\x0d\x7c\xd4\x2c\x07\x1b\x65\x5b\x91\x30\x53\x7c\x62\xbb\x9a\x2c\xca\x3b\x5a\xb3\x49\x26\x4b\x72\x7e\x7d\x49\xf2\x9a\xf7\xe6\x3c\xdc\x83\x7f\x3d\x6e\x7a\x6f\xcd\xbe\xe7\x25\xa3\x0d\xf2\x59\xdb\x52\xdc\x91\x9c\xa3\x54\xc1\xb3\xe5\xe5\x9b\x6d\xdd\xac\xf0\x6b\xc7\x00\x28\xef\x62\x65\x9e\x93\x2f\xa9\x62\x39\x79\x47\x05\x9d\xa1\xfa\xf0\xe4\xfa\xea\xcb\x77\xa7\x06\x80\x40\xdd\x79\xf9\x66\xa3\x1f\xd6\x75\xd8\xf9\xfb\x5d\xe6\x7f\x59\x5b\xf8\x16\xbc\xd1\xda\xf7\x5b\x2e\x7e\xa7\x89\x6d\x88\x67\x27\xe2\x0a\x90\x6e\x48\xd5\x73\xb5\x9a\x19\x11\x9d\xa4\x5c\x4a\x56\xb5\x8a\x9a\x17\x65\x7e\xfb\xb8\xe9\x73\x23\x4d\x14\xc5\x55\x41\xc5\x59\x55\xd5\x72\xb1\x59\xeb\x1a\x83\x1c\xdc\xf7\x6e\x01\xe8\x60\xee\x1e\x56\x78\x22\xe0\x53\x29\x50\x88\xc1\x61\x37\xef\xff\xa5\xf6\x8a\x59\x29\x80\x05\x3b\x3a\x6b\xb4\x2c\xa9\xe6\xd9\x11\x91\x35\x39\x7a\x47\x45\x43\x8b\x8d\xb1\x29\x0f\xae\xf8\x3e\x01\xf3\xc1\x8f\xd0\x11\x6d\xcb\xcf\x1e\x64\x60\x1f\xfe\x5e\xd3\xda\xa0\xba\xf3\xeb\xef\x92\xbe\x55\x9a\xea\x66\x8d\x32\x3c\x40\xad\xee\xa7\x4f\x63\x52\x50\xa5\xbf\xad\x72\x83\x1f\x56\x7e\x7d\x88\x08\x65\x54\xd3\x42\xce\xfe\x8d\xd1\x62\xf3\x65\x88\x01\xa9\xf3\xb0\x93\xb6\x4a\x37\x20\xa8\xe6\xc6\x7f\x7f\xac\x88\x11\x25\x0d\x94\x70\xad\x48\xcd\x0a\xb6\xa0\x42\xbb\xcf\xaf\xe1\x14\xd4\xb1\xdd\x96\x7b\x01\x8e\xb7\x36\xd6\x9c\x69\x56\x97\x5c\x74\xc7\xb9\x86\xef\xcf\xa5\xc0\x2a\xc8\x0a\xad\x48\xf8\x45\x77\xac\xfb\xa1\xf2\x3e\xd7\x83\x07\x9c\x0d\x3a\x3b\x15\xce\xa7\xbb\x3d\xf8\xda\x8d\x15\x5d\xe6\xf8\x10\x3c\x37\x3b\x73\x5b\xdb\x3d\x72\x2b\x8c\x44\x01\x19\xce\x37\xef\x4d\x2f\x9b\xd3\xc7\xde\x8c\x1d\x38\xe0\x14\xee\x8f\x0a\x1c\xdb\x79\xdf\xe7\x94\xf0\x10\x34\x62\xeb\x67\x8c\x56\xa7\x72\x3f\xa6\xee\x6c\xfc\xf9\xca\x67\x98\x58\xc5\xfb\x36\xa1\x97\x47\xe7\xa5\xfb\x29\x4b\x14\xdf\x18\xc7\xe2\xd1\x8a\x7f\xc7\x6a\x65\xa6\x18\x2f\x1d\x9c\x5d\x5d\x92\x05\x7e\x95\xa6\x0b\x8b\x24\x85\xa0\x23\xeb\xa7\x82\x69\x2c\xe7\xa5\x0d\x6c\xaa\xad\x04\x4b\x49\xc5\x19\xe6\x56\xa7\xc2\x6e\x26\xd0\x33\x46\x73\xfb\xd0\xd0\xcd\x9a\xd9\xdf\x46\xd6\xe3\x30\x8a\x41\x41\xbf\x5d\x67\x83\xa5\x98\xf2\x1b\xbc\x11\x5e\xfc\x55\x5a\x1d\xa0\x4d\x15\x68\xb0\x0a\x70\x17\x23\xa2\x9a\x6c\x4e\xa8\x11\x64\x94\xb9\x0e\x06\x5f\xb0\x49\x49\x05\x9f\x32\xa5\x27\xb6\x37\x56\xab\xef\xbf\xf8\x7b\x1f\xdb\xf1\x56\xd6\xc4\x46\x69\x8f\x5c\xe6\x6a\xbb\xc6\x16\xe6\xb8\xc2\x8d\xf0\x3d\xb7\x1a\x99\x4a\xe6\x76\xc1\x77\xb0\x14\x4d\x6f\x0d\x29\xc5\xa5\x34\x0c\xbc\x06\xfa\x78\x94\x23\xc3\xf6\x06\xd3\xfe\x6f\x43\x3b\xff\xe7\x88\x9c\xdc\x01\x13\x72\x64\xfe\x3c\xc2\xe9\xf8\x48\xb3\x50\xe1\xd4\x4e\x0b\x93\xa6\xd5\x7c\x36\x63\x75\xaf\x8d\xd5\x7c\xca\x16\x4c\xe8\x53\x9b\xb5\x5b\xc8\xa0\x2b\xe7\xe7\xd7\xea\x4f\x56\xa7\xf9\xfd\x17\x7f\x3f\x22\x27\xdd\x3d\xe9\x19\x92\x8b\x9c\x7d\x22\x5f\xa0\xb5\x14\x8a\x8b\xe7\xa7\x13\x54\xb8\xa8\xa5\xd0\xf4\x93\x19\x31\x9b\x4b\xc5\x04\x2a\xc0\xb4\x24\x73\xba\x60\x44\xc9\x92\x91\x3b\x56\x14\x63\x6b\x3f\x26\x77\x74\xd9\x9f\xac\xdc\x1d\x21\xa4\x40\x25\x15\xad\x75\x07\x8c\x77\x72\x09\x6f\xb9\xd8\x69\xa6\xc5\xaf\xb8\x58\x75\xe9\xec\x15\xf0\x36\x28\x85\x67\x5c\xbb\xac\x03\x36\xbe\x48\x2f\x5f\x98\xc3\xaa\xf9\x4d\xa3\x65\xad\x5e\xe4\x6c\xc1\x8a\x17\x8a\xcf\xc6\xb4\xce\xe6\x5c\xb3\x4c\x37\x35\x7b\xf1\xff\x31\x77\x3e\xbf\x6d\x83\x50\x1c\xbf\xef\xaf\x40\xea\xa1\x97\x78\xbd\x6f\xa7\x2d\xe9\xb6\x48\xd5\x36\xb5\xc9\xa4\x1d\xa9\xcd\x52\x54\xc7\x8e\xc0\x6e\x34\x4d\xfb\xdf\x27\x78\x60\x43\x62\x7e\x25\xae\xb3\x5b\x1b\xdb\xc9\xe3\x81\xe1\xfb\x3e\x3c\x00\xef\x68\x96\xd7\x95\x68\x18\x72\x4f\xde\x6d\x71\x25\x3c\xc1\x33\x51\x50\x3f\x25\x8e\xf4\x58\x78\xee\x21\xcd\x63\xa7\xcc\x35\x5c\x06\xa3\x27\x38\x28\x02\xc5\xa6\x7b\x09\x78\xe7\xc5\x5d\x25\x91\xdf\xcd\x18\x9e\x62\x04\xb4\x7f\xfa\xd8\x1c\xf4\xd7\x03\x74\x7c\xf9\xe1\x6f\x88\x3e\x09\xb2\x7d\x65\x17\x66\x8d\x12\x5b\x5c\xc0\x30\x82\xab\xe0\x3a\xf7\x57\x7e\x67\x45\x7d\xb4\x4c\x58\xf6\x3b\x93\x5f\x51\x97\x19\xae\x0a\xf1\x37\x6c\xbc\x91\xfb\x33\x52\x23\x2b\xa0\xa5\xa3\x76\x7e\xeb\xe5\xe2\xf2\xcd\xf3\xe6\xaa\xa5\x63\xf4\x74\xa7\xcc\x67\x29\x5d\x1e\x29\x96\x21\x24\x81\x0c\x5d\xd6\x12\x2d\x60\xec\x40\x84\x72\xfd\xad\xef\x55\xe6\x40\x77\xd0\x4d\x48\x3a\xfb\x67\xf3\x8d\x18\x21\xd2\xde\xbb\xfe\x09\x93\x85\xcb\xcc\x7f\xcc\x1b\x75\x94\x88\xde\xf9\xd5\x2a\x86\x0e\x4e\x9f\x70\xb5\xf1\x48\x9b\xa8\x8a\xd1\x79\x93\xc2\x90\x6c\xf0\x30\xf7\xbc\x0b\x3e\x83\x31\xb5\x11\xa7\xca\x50\xa5\xa4\xbc\x3b\x4e\x43\x84\xad\xbc\x41\xf8\x05\xd3\x52\xce\x13\xd6\x8f\x9c\xb0\x17\x05\xdb\xe1\xb0\x2b\x7c\x18\x63\xc3\x6b\xdb\x80\xe0\x9d\x28\xc2\xd5\x65\x38\xae\x15\x5f\x01\x64\xd4\x7b\x60\xbd\xd3\xea\x51\xe2\x5b\x40\x0b\xce\xcb\xce\x09\x8a\x70\x90\x27\xda\xdf\x17\x82\x59\xf3\x48\x70\xb3\xa2\x3e\x85\x72\xd4\xa4\xad\xe7\x34\x97\xeb\x1b\xf4\x9e\xa0\x4d\xdd\x08\xd9\xd9\xca\xb6\x0f\xf1\x01\xec\x25\xdf\x35\xb4\xd7\x6e\xd1\x7d\x29\x57\x0c\xcb\x1d\x26\xea\x2a\xb1\x98\xf6\x83\xc7\xe5\x54\xb1\x88\x6a\x49\x0d\xdc\x8d\x7e\xb1\x7a\x2b\xe1\x22\xd4\x1d\x4c\x55\xfa\x37\xc3\x18\xb5\xc8\x5b\xc2\xb9\x77\x8b\x63\x7b\x59\x09\xdc\x0d\xaf\xf2\xc1\x24\xff\x56\x5f\x83\xe5\xec\x22\xa8\x28\x48\x83\x69\xa9\x5f\x65\x70\x45\xe7\xa5\x50\xef\xea\x2d\x20\x23\x98\xfb\x04\x8d\x65\xf5\xbd\xbc\x19\x8c\xae\x2b\x92\xed\x6b\x56\xa0\x39\xde\x92\x72\x8e\x39\x51\xdf\x65\xee\x57\x03\x75\x74\xcd\x47\x35\x79\x18\x87\x3a\x4c\x06\xc8\xd7\x4f\x28\xc8\xff\xfa\x80\x16\x0c\x9c\x69\x2a\xbd\x62\x2d\x99\xa1\x4f\x62\xf4\x9a\xa1\x75\xf5\x5c\xd5\xfb\xf3\x6c\x6d\xbc\x93\x75\x96\xa5\x66\x86\xa4\xde\xee\xdc\x02\x7b\x9d\xb9\x27\x5a\xa4\x3a\x7c\x07\x7d\xb6\x07\x9b\xee\x56\x6d\x91\xf8\xf3\x08\x35\x8a\xd0\x9a\xd5\x1b\x46\x38\x07\x8a\x93\x8c\xef\x8d\x09\x8b\xcf\xa4\x52\xf3\xc3\x41\xf3\x96\x43\x4f\x69\x4b\xf5\xb8\xb6\xe9\xaf\xa8\xfa\x56\x3f\xb6\x2b\x07\xa5\x86\x7f\x65\x84\x61\xa8\x03\x32\xba\x2c\x1c\x86\x8b\xc6\xa8\x67\xdc\x0b\xa2\xc4\x47\xc6\x75\xe9\xe6\x0f\x3f\xdc\xce\x76\x8e\x7d\xa1\xf1\x29\x8c\x1f\xcf\x05\x8f\xc1\x77\x26\x08\x1b\x63\x95\xfe\x34\x80\xf1\x92\x68\xf1\xb2\x50\x71\x72\x9c\x38\x29\x48\x9c\x0e\x21\x9e\x08\x0f\x83\x2f\x92\x0f\x18\xc6\xbe\x43\x69\x90\xf0\xe2\x78\x30\xe8\x13\x1f\x12\x8c\xf5\x49\x1a\x06\x9c\x1a\x00\x46\xb9\xc0\x0b\xfd\x52\xfc\x90\x08\xfa\x26\x46\x7c\x41\x5f\x44\x62\xbd\x58\x8f\xbc\x1e\xca\xfb\x6f\x21\x5e\xd0\xc5\x1e\x70\x17\xeb\xd6\x24\x58\x37\x31\xa6\x0b\x94\x3f\x0d\xcd\x29\x8d\x49\x8a\x18\x89\xbe\x34\x6e\x36\x45\xba\x12\x88\x32\x01\x4e\xdd\xa1\x13\xee\x4c\x29\x79\xaa\x52\x17\xe2\xf9\xd4\xfc\x0f\x65\x72\xbc\x1a\x56\x12\x9e\x14\x5d\x4c\x19\x2a\x02\x42\x8b\xdb\xef\xf7\xb7\xf3\x0f\xab\xdb\xc5\xa1\x0a\x4f\x97\xcb\x7e\x50\x94\x19\x72\xd9\x71\x83\x18\xac\x1c\x97\x44\xdb\x72\x5c\x6a\x5b\x3a\xf4\xd4\xf9\xe2\xfd\x2c\xcd\x70\xd6\xe0\x1a\xee\x27\x46\xea\x28\x64\xdb\x82\xac\x55\xa1\x2a\x9f\xea\xb2\xe0\x7a\x7d\xc3\x72\xd1\x6d\x44\x40\xab\xbc\x6c\x0b\x21\xb9\xd6\xeb\xe5\x82\xbf\x45\xe8\x23\xc9\x71\xcb\x85\x74\x73\x87\xeb\x75\x75\xdd\xa0\x6f\x5f\xef\x7e\xca\xa5\x5d\xf2\xc9\x59\xb7\x5d\xaa\x3c\x7b\x8f\x62\x38\x3e\x50\x16\x54\x7e\x2b\xc8\x3a\x69\x51\x8e\x77\xa2\x07\x76\x23\x7f\x0a\xbb\xd7\xe0\xaa\x40\x4f\xa4\xdc\x89\xd1\xe1\x99\xa0\xfe\x9c\x32\xf1\x83\xf2\x2a\xac\xdf\x50\x79\xec\x1b\xd2\xc0\xa6\x04\xbe\x54\x75\x6f\x05\x04\x08\xfb\x19\x6c\xdd\xc2\x05\x8a\xbe\xec\x31\x57\x84\x72\xd0\xda\x40\x53\x09\xf3\x38\x37\xd2\x72\xc0\x2c\x18\x59\xe4\x7f\x47\x36\x0b\x63\x7b\x6e\x05\xc9\x61\xb4\x89\xa6\xe7\xee\x4c\xc0\xe1\x13\xa2\x8f\xd8\x15\x39\x74\xb2\xf5\xc3\xdd\x5a\x20\xc3\xe4\x38\x5b\x38\x61\x2f\xa4\x78\x27\xe7\x73\xf4\x47\x90\x6d\x6b\x7f\xd6\x3e\x6a\x31\x63\xf4\x3a\x8a\xc0\xa1\x3f\x7f\xdf\xfc\x0b\x00\x00\xff\xff\x4a\x92\x72\xa4\x49\xa6\x03\x00") func operatorsCoreosCom_subscriptionsYamlBytes() ([]byte, error) { return bindataRead( diff --git a/staging/api/go.mod b/staging/api/go.mod index e58e9683b8..c85758c1ad 100644 --- a/staging/api/go.mod +++ b/staging/api/go.mod @@ -1,19 +1,19 @@ module github.com/operator-framework/api -go 1.24.6 +go 1.25.3 require ( github.com/blang/semver/v4 v4.0.0 github.com/go-bindata/go-bindata/v3 v3.1.3 github.com/google/cel-go v0.26.1 - github.com/sirupsen/logrus v1.9.3 + github.com/sirupsen/logrus v1.9.4 github.com/spf13/cobra v1.10.2 github.com/stretchr/testify v1.11.1 google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 - k8s.io/api v0.34.2 - k8s.io/apiextensions-apiserver v0.34.2 - k8s.io/apimachinery v0.34.2 - k8s.io/client-go v0.34.2 + k8s.io/api v0.34.3 + k8s.io/apiextensions-apiserver v0.34.3 + k8s.io/apimachinery v0.34.3 + k8s.io/client-go v0.34.3 sigs.k8s.io/controller-runtime v0.22.4 sigs.k8s.io/yaml v1.6.0 ) @@ -79,8 +79,8 @@ require ( google.golang.org/protobuf v1.36.6 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiserver v0.34.2 // indirect - k8s.io/component-base v0.34.2 // indirect + k8s.io/apiserver v0.34.3 // indirect + k8s.io/component-base v0.34.3 // indirect k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b // indirect k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 // indirect diff --git a/staging/api/go.sum b/staging/api/go.sum index 925ed53591..9b48850a3b 100644 --- a/staging/api/go.sum +++ b/staging/api/go.sum @@ -110,8 +110,8 @@ github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlT github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= -github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= +github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY= @@ -124,7 +124,6 @@ github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpE 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.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= @@ -201,7 +200,6 @@ golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= 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-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg= @@ -243,18 +241,18 @@ gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= 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= -k8s.io/api v0.34.2 h1:fsSUNZhV+bnL6Aqrp6O7lMTy6o5x2C4XLjnh//8SLYY= -k8s.io/api v0.34.2/go.mod h1:MMBPaWlED2a8w4RSeanD76f7opUoypY8TFYkSM+3XHw= -k8s.io/apiextensions-apiserver v0.34.2 h1:WStKftnGeoKP4AZRz/BaAAEJvYp4mlZGN0UCv+uvsqo= -k8s.io/apiextensions-apiserver v0.34.2/go.mod h1:398CJrsgXF1wytdaanynDpJ67zG4Xq7yj91GrmYN2SE= -k8s.io/apimachinery v0.34.2 h1:zQ12Uk3eMHPxrsbUJgNF8bTauTVR2WgqJsTmwTE/NW4= -k8s.io/apimachinery v0.34.2/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw= -k8s.io/apiserver v0.34.2 h1:2/yu8suwkmES7IzwlehAovo8dDE07cFRC7KMDb1+MAE= -k8s.io/apiserver v0.34.2/go.mod h1:gqJQy2yDOB50R3JUReHSFr+cwJnL8G1dzTA0YLEqAPI= -k8s.io/client-go v0.34.2 h1:Co6XiknN+uUZqiddlfAjT68184/37PS4QAzYvQvDR8M= -k8s.io/client-go v0.34.2/go.mod h1:2VYDl1XXJsdcAxw7BenFslRQX28Dxz91U9MWKjX97fE= -k8s.io/component-base v0.34.2 h1:HQRqK9x2sSAsd8+R4xxRirlTjowsg6fWCPwWYeSvogQ= -k8s.io/component-base v0.34.2/go.mod h1:9xw2FHJavUHBFpiGkZoKuYZ5pdtLKe97DEByaA+hHbM= +k8s.io/api v0.34.3 h1:D12sTP257/jSH2vHV2EDYrb16bS7ULlHpdNdNhEw2S4= +k8s.io/api v0.34.3/go.mod h1:PyVQBF886Q5RSQZOim7DybQjAbVs8g7gwJNhGtY5MBk= +k8s.io/apiextensions-apiserver v0.34.3 h1:p10fGlkDY09eWKOTeUSioxwLukJnm+KuDZdrW71y40g= +k8s.io/apiextensions-apiserver v0.34.3/go.mod h1:aujxvqGFRdb/cmXYfcRTeppN7S2XV/t7WMEc64zB5A0= +k8s.io/apimachinery v0.34.3 h1:/TB+SFEiQvN9HPldtlWOTp0hWbJ+fjU+wkxysf/aQnE= +k8s.io/apimachinery v0.34.3/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw= +k8s.io/apiserver v0.34.3 h1:uGH1qpDvSiYG4HVFqc6A3L4CKiX+aBWDrrsxHYK0Bdo= +k8s.io/apiserver v0.34.3/go.mod h1:QPnnahMO5C2m3lm6fPW3+JmyQbvHZQ8uudAu/493P2w= +k8s.io/client-go v0.34.3 h1:wtYtpzy/OPNYf7WyNBTj3iUA0XaBHVqhv4Iv3tbrF5A= +k8s.io/client-go v0.34.3/go.mod h1:OxxeYagaP9Kdf78UrKLa3YZixMCfP6bgPwPwNBQBzpM= +k8s.io/component-base v0.34.3 h1:zsEgw6ELqK0XncCQomgO9DpUIzlrYuZYA0Cgo+JWpVk= +k8s.io/component-base v0.34.3/go.mod h1:5iIlD8wPfWE/xSHTRfbjuvUul2WZbI2nOUK65XL0E/c= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b h1:MloQ9/bdJyIu9lb1PzujOPolHyvO06MXG5TUIj2mNAA= diff --git a/staging/api/pkg/manifests/bundleloader.go b/staging/api/pkg/manifests/bundleloader.go index 6ed1e4ddf6..f557c4f354 100644 --- a/staging/api/pkg/manifests/bundleloader.go +++ b/staging/api/pkg/manifests/bundleloader.go @@ -2,7 +2,6 @@ package manifests import ( "fmt" - "io/ioutil" "os" "path/filepath" "strings" @@ -189,7 +188,7 @@ func (b *bundleLoader) LoadBundleWalkFunc(path string, f os.FileInfo, err error) // loadBundle takes the directory that a CSV is in and assumes the rest of the objects in that directory // are part of the bundle. func loadBundle(csvName string, dir string) (*Bundle, error) { - files, err := ioutil.ReadDir(dir) + files, err := os.ReadDir(dir) if err != nil { return nil, err } diff --git a/staging/api/pkg/validation/internal/community.go b/staging/api/pkg/validation/internal/community.go index debaae2bab..37473fd311 100644 --- a/staging/api/pkg/validation/internal/community.go +++ b/staging/api/pkg/validation/internal/community.go @@ -3,7 +3,6 @@ package internal import ( "encoding/json" "fmt" - "io/ioutil" "os" "strings" @@ -225,7 +224,7 @@ func validateImageFile(checks CommunityOperatorChecks, deprecatedAPImsg string) return checks } - b, err := ioutil.ReadFile(checks.indexImagePath) + b, err := os.ReadFile(checks.indexImagePath) if err != nil { checks.errs = append(checks.errs, fmt.Errorf("unable to read the index image in the path "+ "(%s). Error : %s", checks.indexImagePath, err)) diff --git a/staging/api/pkg/validation/internal/crd_test.go b/staging/api/pkg/validation/internal/crd_test.go index f28804fcfa..19f1255376 100644 --- a/staging/api/pkg/validation/internal/crd_test.go +++ b/staging/api/pkg/validation/internal/crd_test.go @@ -1,7 +1,7 @@ package internal import ( - "io/ioutil" + "os" "testing" "github.com/operator-framework/api/pkg/validation/errors" @@ -57,7 +57,7 @@ func TestValidateCRD(t *testing.T) { }, } for _, tt := range table { - b, err := ioutil.ReadFile(tt.filePath) + b, err := os.ReadFile(tt.filePath) if err != nil { t.Fatalf("Error reading CRD path %s: %v", tt.filePath, err) } diff --git a/staging/api/pkg/validation/internal/csv_test.go b/staging/api/pkg/validation/internal/csv_test.go index 440cbcf3c7..dd80f318a3 100644 --- a/staging/api/pkg/validation/internal/csv_test.go +++ b/staging/api/pkg/validation/internal/csv_test.go @@ -2,7 +2,7 @@ package internal import ( "fmt" - "io/ioutil" + "os" "path/filepath" "testing" @@ -121,7 +121,7 @@ func TestValidateCSV(t *testing.T) { } for _, c := range cases { - b, err := ioutil.ReadFile(c.csvPath) + b, err := os.ReadFile(c.csvPath) if err != nil { t.Fatalf("Error reading CSV path %s: %v", c.csvPath, err) } diff --git a/staging/api/pkg/validation/internal/object_test.go b/staging/api/pkg/validation/internal/object_test.go index 573497c6ad..7f93be1522 100644 --- a/staging/api/pkg/validation/internal/object_test.go +++ b/staging/api/pkg/validation/internal/object_test.go @@ -1,7 +1,7 @@ package internal import ( - "io/ioutil" + "os" "testing" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -66,7 +66,7 @@ func TestValidateObject(t *testing.T) { for _, tt := range table { u := unstructured.Unstructured{} - o, err := ioutil.ReadFile(tt.path) + o, err := os.ReadFile(tt.path) if err != nil { t.Fatalf("reading yaml object file: %s", err) } diff --git a/staging/api/pkg/validation/internal/operatorgroup_test.go b/staging/api/pkg/validation/internal/operatorgroup_test.go index b6eddac53e..ee4d2ea8c8 100644 --- a/staging/api/pkg/validation/internal/operatorgroup_test.go +++ b/staging/api/pkg/validation/internal/operatorgroup_test.go @@ -1,7 +1,7 @@ package internal import ( - "io/ioutil" + "os" "path/filepath" "testing" @@ -33,7 +33,7 @@ func TestValidateOperatorGroup(t *testing.T) { }, } for _, c := range cases { - b, err := ioutil.ReadFile(c.operatorGroupPath) + b, err := os.ReadFile(c.operatorGroupPath) if err != nil { t.Fatalf("Error reading OperatorGroup path %s: %v", c.operatorGroupPath, err) } diff --git a/staging/api/pkg/validation/internal/operatorhub.go b/staging/api/pkg/validation/internal/operatorhub.go index 2f5926cb95..fe0edee3ae 100644 --- a/staging/api/pkg/validation/internal/operatorhub.go +++ b/staging/api/pkg/validation/internal/operatorhub.go @@ -3,9 +3,9 @@ package internal import ( "encoding/json" "fmt" - "io/ioutil" "net/mail" "net/url" + "os" "path/filepath" "strings" @@ -313,7 +313,7 @@ func extractCategories(path string) (map[string]struct{}, error) { return nil, fmt.Errorf("finding category file: %w", err) } - data, err := ioutil.ReadFile(path) + data, err := os.ReadFile(path) if err != nil { return nil, fmt.Errorf("reading category file: %w", err) } diff --git a/staging/operator-lifecycle-manager/cmd/catalog/main.go b/staging/operator-lifecycle-manager/cmd/catalog/main.go index 4092bf8922..bef693e2b1 100644 --- a/staging/operator-lifecycle-manager/cmd/catalog/main.go +++ b/staging/operator-lifecycle-manager/cmd/catalog/main.go @@ -19,6 +19,7 @@ import ( "github.com/operator-framework/operator-lifecycle-manager/pkg/api/client" "github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/catalog" "github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/catalogtemplate" + "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/apiserver" "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorclient" "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorstatus" "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/server" @@ -63,10 +64,28 @@ func (o *options) run(ctx context.Context, logger *logrus.Logger) error { return fmt.Errorf("error configuring client: %s", err.Error()) } + configClient, err := configv1client.NewForConfig(config) + if err != nil { + return fmt.Errorf("error configuring client: %s", err.Error()) + } + opClient := operatorclient.NewClientFromConfig(o.kubeconfig, logger) + crClient, err := client.NewClient(o.kubeconfig) + if err != nil { + return fmt.Errorf("error configuring client: %s", err.Error()) + } + + // Setup APIServer TLS configuration for HTTPS servers + apiServerTLSQuerier, apiServerFactory, err := apiserver.SetupAPIServerTLSConfig(logger, config) + if err != nil { + return fmt.Errorf("error setting up APIServer TLS configuration: %w", err) + } + + // Setup metrics/health server with TLS configuration listenAndServe, err := server.GetListenAndServeFunc( server.WithLogger(logger), server.WithTLS(&o.tlsCertPath, &o.tlsKeyPath, &o.clientCAPath), server.WithKubeConfig(config), + server.WithAPIServerTLSQuerier(apiServerTLSQuerier), server.WithDebug(o.debug), ) if err != nil { @@ -79,16 +98,6 @@ func (o *options) run(ctx context.Context, logger *logrus.Logger) error { } }() - configClient, err := configv1client.NewForConfig(config) - if err != nil { - return fmt.Errorf("error configuring client: %s", err.Error()) - } - opClient := operatorclient.NewClientFromConfig(o.kubeconfig, logger) - crClient, err := client.NewClient(o.kubeconfig) - if err != nil { - return fmt.Errorf("error configuring client: %s", err.Error()) - } - workloadUserID := int64(-1) if o.setWorkloadUserID { workloadUserID = defaultWorkLoadUserID @@ -139,6 +148,11 @@ func (o *options) run(ctx context.Context, logger *logrus.Logger) error { opCatalogTemplate.Run(ctx) <-opCatalogTemplate.Ready() + // Start APIServer TLS informer factory if on OpenShift + if apiServerFactory != nil { + apiServerFactory.Start(ctx.Done()) + } + if o.writeStatusName != "" { operatorstatus.MonitorClusterStatus(o.writeStatusName, op.AtLevel(), op.Done(), opClient, configClient, crClient, logger) } diff --git a/staging/operator-lifecycle-manager/cmd/olm/main.go b/staging/operator-lifecycle-manager/cmd/olm/main.go index a5ea596910..763d71fefe 100644 --- a/staging/operator-lifecycle-manager/cmd/olm/main.go +++ b/staging/operator-lifecycle-manager/cmd/olm/main.go @@ -23,6 +23,7 @@ import ( "github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/olm" "github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/openshift" "github.com/operator-framework/operator-lifecycle-manager/pkg/feature" + "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/apiserver" "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorclient" "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorstatus" "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/queueinformer" @@ -129,22 +130,6 @@ func main() { } config := mgr.GetConfig() - listenAndServe, err := server.GetListenAndServeFunc( - server.WithLogger(logger), - server.WithTLS(tlsCertPath, tlsKeyPath, clientCAPath), - server.WithKubeConfig(config), - server.WithDebug(*debug), - ) - if err != nil { - logger.Fatalf("Error setting up health/metric/pprof service: %v", err) - } - - go func() { - if err := listenAndServe(); err != nil && err != http.ErrServerClosed { - logger.Error(err) - } - }() - // create a config that validates we're creating objects with labels validatingConfig := validatingroundtripper.Wrap(config, mgr.GetScheme()) @@ -169,6 +154,31 @@ func main() { logger.WithError(err).Fatal("error configuring metadata client") } + // Setup APIServer TLS configuration for HTTPS servers + apiServerTLSQuerier, apiServerFactory, err := apiserver.SetupAPIServerTLSConfig(logger, config) + if err != nil { + logger.WithError(err).Fatal("error setting up APIServer TLS configuration") + } + openshiftConfigAPIExists := apiServerFactory != nil + + // Setup metrics/health server with TLS configuration + listenAndServe, err := server.GetListenAndServeFunc( + server.WithLogger(logger), + server.WithTLS(tlsCertPath, tlsKeyPath, clientCAPath), + server.WithKubeConfig(config), + server.WithAPIServerTLSQuerier(apiServerTLSQuerier), + server.WithDebug(*debug), + ) + if err != nil { + logger.Fatalf("Error setting up health/metric/pprof service: %v", err) + } + + go func() { + if err := listenAndServe(); err != nil && err != http.ErrServerClosed { + logger.Error(err) + } + }() + // Create a new instance of the operator. op, err := olm.NewOperator( ctx, @@ -181,6 +191,7 @@ func main() { olm.WithRestConfig(validatingConfig), olm.WithConfigClient(versionedConfigClient), olm.WithProtectedCopiedCSVNamespaces(*protectedCopiedCSVNamespaces), + olm.WithOpenshiftConfigAPIExists(openshiftConfigAPIExists), ) if err != nil { logger.WithError(err).Fatal("error configuring operator") @@ -190,6 +201,11 @@ func main() { op.Run(ctx) <-op.Ready() + // Start APIServer TLS informer factory if on OpenShift + if apiServerFactory != nil { + apiServerFactory.Start(ctx.Done()) + } + // Emit CSV metric if err = op.EnsureCSVMetric(); err != nil { logger.WithError(err).Fatal("error emitting metrics for existing CSV") diff --git a/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-catalogsources.crd.yaml b/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-catalogsources.crd.yaml index 391b04ea4a..a30b9f232c 100644 --- a/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-catalogsources.crd.yaml +++ b/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-catalogsources.crd.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: catalogsources.operators.coreos.com spec: group: operators.coreos.com diff --git a/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-clusterserviceversions.crd.yaml b/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-clusterserviceversions.crd.yaml index 1e81a97169..db9138e896 100644 --- a/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-clusterserviceversions.crd.yaml +++ b/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-clusterserviceversions.crd.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: clusterserviceversions.operators.coreos.com spec: group: operators.coreos.com diff --git a/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-installplans.crd.yaml b/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-installplans.crd.yaml index f1a2a93126..9a5691df7f 100644 --- a/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-installplans.crd.yaml +++ b/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-installplans.crd.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: installplans.operators.coreos.com spec: group: operators.coreos.com diff --git a/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-olmconfigs.crd.yaml b/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-olmconfigs.crd.yaml index bbc232b2db..bda9262f36 100644 --- a/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-olmconfigs.crd.yaml +++ b/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-olmconfigs.crd.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: olmconfigs.operators.coreos.com spec: group: operators.coreos.com diff --git a/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-operatorconditions.crd.yaml b/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-operatorconditions.crd.yaml index 9f5bee1690..e724c84ec1 100644 --- a/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-operatorconditions.crd.yaml +++ b/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-operatorconditions.crd.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: operatorconditions.operators.coreos.com spec: group: operators.coreos.com diff --git a/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-operatorgroups.crd.yaml b/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-operatorgroups.crd.yaml index f19b3f8b23..cf9f772222 100644 --- a/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-operatorgroups.crd.yaml +++ b/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-operatorgroups.crd.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: operatorgroups.operators.coreos.com spec: group: operators.coreos.com diff --git a/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-operators.crd.yaml b/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-operators.crd.yaml index b869b63681..f6f9d13dd3 100644 --- a/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-operators.crd.yaml +++ b/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-operators.crd.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: operators.operators.coreos.com spec: group: operators.coreos.com diff --git a/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-subscriptions.crd.yaml b/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-subscriptions.crd.yaml index 10f465665c..6ccca76263 100644 --- a/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-subscriptions.crd.yaml +++ b/staging/operator-lifecycle-manager/deploy/chart/crds/0000_50_olm_00-subscriptions.crd.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: subscriptions.operators.coreos.com spec: group: operators.coreos.com diff --git a/staging/operator-lifecycle-manager/go.mod b/staging/operator-lifecycle-manager/go.mod index 3256e28e06..f1c6a659b0 100644 --- a/staging/operator-lifecycle-manager/go.mod +++ b/staging/operator-lifecycle-manager/go.mod @@ -21,8 +21,8 @@ require ( github.com/openshift/api v0.0.0-20251111193948-50e2ece149d7 github.com/openshift/client-go v0.0.0-20251015124057-db0dee36e235 github.com/openshift/library-go v0.0.0-20260108135436-db8dbd64c462 - github.com/operator-framework/api v0.37.0 - github.com/operator-framework/operator-registry v1.61.0 + github.com/operator-framework/api v0.38.0 + github.com/operator-framework/operator-registry v1.62.0 github.com/otiai10/copy v1.14.1 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.23.2 @@ -65,10 +65,10 @@ require ( github.com/NYTimes/gziphandler v1.1.1 // indirect github.com/antlr4-go/antlr/v4 v4.13.1 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/cenkalti/backoff/v5 v5.0.2 // indirect + github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/containerd/cgroups/v3 v3.0.5 // indirect - github.com/containerd/containerd v1.7.29 // indirect + github.com/containerd/containerd v1.7.30 // indirect github.com/containerd/containerd/api v1.9.0 // indirect github.com/containerd/continuity v0.4.5 // indirect github.com/containerd/errdefs v1.0.0 // indirect @@ -81,7 +81,7 @@ require ( github.com/containers/ocicrypt v1.2.1 // indirect github.com/coreos/go-systemd/v22 v22.6.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/docker/cli v29.0.0+incompatible // indirect + github.com/docker/cli v29.1.5+incompatible // indirect github.com/docker/distribution v2.8.3+incompatible // indirect github.com/docker/docker v28.5.1+incompatible // indirect github.com/docker/docker-credential-helpers v0.9.4 // indirect @@ -100,7 +100,7 @@ require ( github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/gobuffalo/flect v1.0.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-migrate/migrate/v4 v4.19.0 // indirect + github.com/golang-migrate/migrate/v4 v4.19.1 // indirect github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/btree v1.1.3 // indirect @@ -110,7 +110,7 @@ require ( github.com/google/uuid v1.6.0 // indirect github.com/gorilla/mux v1.8.1 // indirect github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect github.com/h2non/filetype v1.1.3 // indirect github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect @@ -122,7 +122,7 @@ require ( github.com/mailru/easyjson v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-sqlite3 v1.14.32 // indirect + github.com/mattn/go-sqlite3 v1.14.33 // indirect github.com/moby/locker v1.0.1 // indirect github.com/moby/sys/capability v0.4.0 // indirect github.com/moby/sys/mountinfo v0.7.2 // indirect @@ -146,16 +146,16 @@ require ( go.etcd.io/etcd/client/v3 v3.6.4 // indirect go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 // indirect go.opentelemetry.io/otel v1.38.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.36.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect - go.opentelemetry.io/proto/otlp v1.7.0 // indirect - go.podman.io/common v0.66.0 // indirect + go.opentelemetry.io/proto/otlp v1.7.1 // indirect + go.podman.io/common v0.66.1 // indirect go.podman.io/storage v1.61.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect @@ -163,7 +163,7 @@ require ( go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/crypto v0.47.0 // indirect golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b // indirect - golang.org/x/mod v0.31.0 // indirect + golang.org/x/mod v0.32.0 // indirect golang.org/x/oauth2 v0.34.0 // indirect golang.org/x/sys v0.40.0 // indirect golang.org/x/term v0.39.0 // indirect @@ -172,7 +172,7 @@ require ( gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect google.golang.org/genproto v0.0.0-20250603155806-513f23925822 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20251029180050-ab9386a59fda // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251103181224-f26f9409b101 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect diff --git a/staging/operator-lifecycle-manager/go.sum b/staging/operator-lifecycle-manager/go.sum index c60ba85135..b01a1ec128 100644 --- a/staging/operator-lifecycle-manager/go.sum +++ b/staging/operator-lifecycle-manager/go.sum @@ -26,8 +26,8 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= -github.com/cenkalti/backoff/v5 v5.0.2 h1:rIfFVxEf1QsI7E1ZHfp/B4DF/6QBAUhmgkxc0H7Zss8= -github.com/cenkalti/backoff/v5 v5.0.2/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= +github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= +github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -39,8 +39,8 @@ github.com/clipperhouse/uax29/v2 v2.3.0/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsV github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/containerd/cgroups/v3 v3.0.5 h1:44na7Ud+VwyE7LIoJ8JTNQOa549a8543BmzaJHo6Bzo= github.com/containerd/cgroups/v3 v3.0.5/go.mod h1:SA5DLYnXO8pTGYiAHXz94qvLQTKfVM5GEVisn4jpins= -github.com/containerd/containerd v1.7.29 h1:90fWABQsaN9mJhGkoVnuzEY+o1XDPbg9BTC9QTAHnuE= -github.com/containerd/containerd v1.7.29/go.mod h1:azUkWcOvHrWvaiUjSQH0fjzuHIwSPg1WL5PshGP4Szs= +github.com/containerd/containerd v1.7.30 h1:/2vezDpLDVGGmkUXmlNPLCCNKHJ5BbC5tJB5JNzQhqE= +github.com/containerd/containerd v1.7.30/go.mod h1:fek494vwJClULlTpExsmOyKCMUAbuVjlFsJQc4/j44M= github.com/containerd/containerd/api v1.9.0 h1:HZ/licowTRazus+wt9fM6r/9BQO7S0vD5lMcWspGIg0= github.com/containerd/containerd/api v1.9.0/go.mod h1:GhghKFmTR3hNtyznBoQ0EMWr9ju5AqHjcZPsSpTKutI= github.com/containerd/continuity v0.4.5 h1:ZRoN1sXq9u7V6QoHMcVWGhOwDFqZ4B9i5H6un1Wh0x4= @@ -78,8 +78,8 @@ github.com/distribution/distribution/v3 v3.0.0 h1:q4R8wemdRQDClzoNNStftB2ZAfqOiN github.com/distribution/distribution/v3 v3.0.0/go.mod h1:tRNuFoZsUdyRVegq8xGNeds4KLjwLCRin/tTo6i1DhU= 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 v29.0.0+incompatible h1:KgsN2RUFMNM8wChxryicn4p46BdQWpXOA1XLGBGPGAw= -github.com/docker/cli v29.0.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v29.1.5+incompatible h1:GckbANUt3j+lsnQ6eCcQd70mNSOismSHWt8vk2AX8ao= +github.com/docker/cli v29.1.5+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v28.5.1+incompatible h1:Bm8DchhSD2J6PsFzxC35TZo4TLGR2PdW/E69rU45NhM= @@ -156,15 +156,15 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= -github.com/golang-migrate/migrate/v4 v4.19.0 h1:RcjOnCGz3Or6HQYEJ/EEVLfWnmw9KnoigPSjzhCuaSE= -github.com/golang-migrate/migrate/v4 v4.19.0/go.mod h1:9dyEcu+hO+G9hPSw8AIg50yg622pXJsoHItQnDGZkI0= +github.com/golang-migrate/migrate/v4 v4.19.1 h1:OCyb44lFuQfYXYLx1SCxPZQGU7mcaZ7gH9yH4jSFbBA= +github.com/golang-migrate/migrate/v4 v4.19.1/go.mod h1:CTcgfjxhaUtsLipnLoQRWCrjYXycRz/g5+RWDuYgPrE= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/mock v1.7.0-rc.1 h1:YojYx61/OLFsiv6Rw1Z96LpldJIy31o+UHmwAUMJ6/U= +github.com/golang/mock v1.7.0-rc.1/go.mod h1:s42URUywIqd+OcERslBJvOjepvNymP31m3q8d/GkuRs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= @@ -213,16 +213,12 @@ github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.3 h1:B+8ClL/kCQkRiU82d9xajR github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.3/go.mod h1:NbCUVmiS4foBGBHOYlCT25+YmGpJ32dZPi75pGEUpj4= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.0 h1:+epNPbD5EqgpEMm5wrl4Hqts3jZt8+kYaqUisuuIGTk= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.0/go.mod h1:Zanoh4+gvIgluNqcfMVTJueD4wSS5hT7zTt4Mrutd90= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 h1:NmZ1PKzSTQbuGHw9DGPFomqkkLWMC+vZCkfs+FHv1Vg= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3/go.mod h1:zQrxl1YP88HQlA6i9c63DSVPFklWpGX4OWAc9bFuaH4= github.com/h2non/filetype v1.1.3 h1:FKkx9QbD7HR/zjK1Ia5XiBsq9zdLi5Kf3zGyFTAFkGg= github.com/h2non/filetype v1.1.3/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY= github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c h1:fEE5/5VNnYUoBOj2I9TP8Jc+a7lge3QWn9DKE7NCwfc= github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c/go.mod h1:ObS/W+h8RYb1Y7fYivughjxojTmIu5iAIjSrSLCLeqE= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru/arc/v2 v2.0.7 h1:QxkVTxwColcduO+LP7eJO56r2hFiG8zEbfAAzRv52KQ= github.com/hashicorp/golang-lru/arc/v2 v2.0.7/go.mod h1:Pe7gBlGdc8clY5LJ0LpJXMt5AmgmWNH1g+oFFVUHOEc= @@ -258,8 +254,6 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/letsencrypt/boulder v0.0.0-20250624003606-5ddd5acf990d h1:fCRb9hXR4QQJpwc7xnGugnva0DD5ollTGkys0n8aXT4= -github.com/letsencrypt/boulder v0.0.0-20250624003606-5ddd5acf990d/go.mod h1:BVoSL2Ed8oCncct0meeBqoTY7b1Mzx7WqEOZ8EisFmY= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4= @@ -273,8 +267,8 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw= github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= -github.com/mattn/go-sqlite3 v1.14.32 h1:JD12Ag3oLy1zQA+BNn74xRgaBbdhbNIDYvQUEuuErjs= -github.com/mattn/go-sqlite3 v1.14.32/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/mattn/go-sqlite3 v1.14.33 h1:A5blZ5ulQo2AtayQ9/limgHEkFreKj1Dv226a1K73s0= +github.com/mattn/go-sqlite3 v1.14.33/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/maxbrunsfeld/counterfeiter/v6 v6.12.1 h1:D4O2wLxB384TS3ohBJMfolnxb4qGmoZ1PnWNtit8LYo= github.com/maxbrunsfeld/counterfeiter/v6 v6.12.1/go.mod h1:RuJdxo0oI6dClIaMzdl3hewq3a065RH65dofJP03h8I= github.com/mfridman/tparse v0.18.0 h1:wh6dzOKaIwkUGyKgOntDW4liXSo37qg5AXbIhkMV3vE= @@ -325,10 +319,10 @@ github.com/openshift/client-go v0.0.0-20251015124057-db0dee36e235 h1:9JBeIXmnHlp github.com/openshift/client-go v0.0.0-20251015124057-db0dee36e235/go.mod h1:L49W6pfrZkfOE5iC1PqEkuLkXG4W0BX4w8b+L2Bv7fM= github.com/openshift/library-go v0.0.0-20260108135436-db8dbd64c462 h1:zX9Od4Jg8sVmwQLwk6Vd+BX7tcyC/462FVvDdzHEPPk= github.com/openshift/library-go v0.0.0-20260108135436-db8dbd64c462/go.mod h1:nIzWQQE49XbiKizVnVOip9CEB7HJ0hoJwNi3g3YKnKc= -github.com/operator-framework/api v0.37.0 h1:2XCMWitBnumtJTqzip6LQKUwpM2pXVlt3gkpdlkbaCE= -github.com/operator-framework/api v0.37.0/go.mod h1:NZs4vB+Jiamyv3pdPDjZtuC4U7KX0eq4z2r5hKY5fUA= -github.com/operator-framework/operator-registry v1.61.0 h1:LgX6lP5hUHfpMTMygsnySc7PKxibzqIoqWUm6NPWl2M= -github.com/operator-framework/operator-registry v1.61.0/go.mod h1:KkZG1G7O/qz0J7d9Z0ukV9sgag7aRQ5xwcFRHUyn8Uc= +github.com/operator-framework/api v0.38.0 h1:RbIhBH7pot/tlVPkEppXOh2zT7GpSUjPJoC8pRnNnBo= +github.com/operator-framework/api v0.38.0/go.mod h1:6UCZhZPh9zAZZq1D9B2+IO0ibVwHdTiNYLYRr8ZT8Mk= +github.com/operator-framework/operator-registry v1.62.0 h1:9BwFNU/NWfFAr8nZ0Lmcvmztnd4XXbQLdzrvLqrv+M0= +github.com/operator-framework/operator-registry v1.62.0/go.mod h1:NsgBzgp1nuM1lZ7IyEe2FsJYadY6EHj5pL3SxLokvbQ= github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8= github.com/otiai10/copy v1.14.1/go.mod h1:oQwrEDDOci3IM8dJF0d8+jnbfPDllW6vUjNc3DoZm9I= github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs= @@ -362,12 +356,12 @@ github.com/sclevine/spec v1.4.0 h1:z/Q9idDcay5m5irkZ28M7PtQM4aOISzOpj4bUPkDee8= github.com/sclevine/spec v1.4.0/go.mod h1:LvpgJaFyvQzRvc1kaDs0bulYwzC70PbiYjC4QnFHkOM= github.com/secure-systems-lab/go-securesystemslib v0.9.1 h1:nZZaNz4DiERIQguNy0cL5qTdn9lR8XKHf4RUyG1Sx3g= github.com/secure-systems-lab/go-securesystemslib v0.9.1/go.mod h1:np53YzT0zXGMv6x4iEWc9Z59uR+x+ndLwCLqPYpLXVU= -github.com/sigstore/fulcio v1.7.1 h1:RcoW20Nz49IGeZyu3y9QYhyyV3ZKQ85T+FXPKkvE+aQ= -github.com/sigstore/fulcio v1.7.1/go.mod h1:7lYY+hsd8Dt+IvKQRC+KEhWpCZ/GlmNvwIa5JhypMS8= -github.com/sigstore/protobuf-specs v0.4.3 h1:kRgJ+ciznipH9xhrkAbAEHuuxD3GhYnGC873gZpjJT4= -github.com/sigstore/protobuf-specs v0.4.3/go.mod h1:+gXR+38nIa2oEupqDdzg4qSBT0Os+sP7oYv6alWewWc= -github.com/sigstore/sigstore v1.9.5 h1:Wm1LT9yF4LhQdEMy5A2JeGRHTrAWGjT3ubE5JUSrGVU= -github.com/sigstore/sigstore v1.9.5/go.mod h1:VtxgvGqCmEZN9X2zhFSOkfXxvKUjpy8RpUW39oCtoII= +github.com/sigstore/fulcio v1.8.3 h1:zkuAkRHbD53hhYGlBHHeAW4NRDrrTiDHumAbcfSyyFw= +github.com/sigstore/fulcio v1.8.3/go.mod h1:YxP7TTdn9H5Gg+dXOsu61X36LLYxT2ZuvODhWelMNwA= +github.com/sigstore/protobuf-specs v0.5.0 h1:F8YTI65xOHw70NrvPwJ5PhAzsvTnuJMGLkA4FIkofAY= +github.com/sigstore/protobuf-specs v0.5.0/go.mod h1:+gXR+38nIa2oEupqDdzg4qSBT0Os+sP7oYv6alWewWc= +github.com/sigstore/sigstore v1.10.0 h1:lQrmdzqlR8p9SCfWIpFoGUqdXEzJSZT2X+lTXOMPaQI= +github.com/sigstore/sigstore v1.10.0/go.mod h1:Ygq+L/y9Bm3YnjpJTlQrOk/gXyrjkpn3/AEJpmk1n9Y= github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= github.com/smallstep/pkcs7 v0.2.1 h1:6Kfzr/QizdIuB6LSv8y1LJdZ3aPSfTNhTLqAx9CTLfA= @@ -404,8 +398,6 @@ github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= -github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 h1:e/5i7d4oYZ+C1wj2THlRK+oAhjeS/TRQwMfkIuet3w0= -github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399/go.mod h1:LdwHTNJT99C5fTAzDz0ud328OgXz+gierycbcIx2fRs= github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75 h1:6fotK7otjonDflCTK0BCfls4SPy3NcCVb5dqqmbRknE= github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75/go.mod h1:KO6IkyS8Y3j8OdNO85qEYBsRPuteD+YciPomcXdrMnk= github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY= @@ -442,10 +434,10 @@ go.opentelemetry.io/contrib/bridges/prometheus v0.61.0 h1:RyrtJzu5MAmIcbRrwg75b+ go.opentelemetry.io/contrib/bridges/prometheus v0.61.0/go.mod h1:tirr4p9NXbzjlbruiRGp53IzlYrDk5CO2fdHj0sSSaY= go.opentelemetry.io/contrib/exporters/autoexport v0.61.0 h1:XfzKtKSrbtYk9TNCF8dkO0Y9M7IOfb4idCwBOTwGBiI= go.opentelemetry.io/contrib/exporters/autoexport v0.61.0/go.mod h1:N6otC+qXTD5bAnbK2O1f/1SXq3cX+3KYSWrkBUqG0cw= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 h1:x7wzEgXfnzJcHDwStJT+mxOz4etr2EcexjqhBvmoakw= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 h1:q4XOmH/0opmeuJtPsbFNivyl7bCt7yRBbeEm2sC/XtQ= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 h1:RbKq8BG0FI8OiXhBfcRtqqHcZcka+gU3cskNuf05R18= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0/go.mod h1:h06DGIukJOevXaj/xrNjhi/2098RZzcLTbc0jDAUbsg= go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.12.2 h1:06ZeJRe5BnYXceSM9Vya83XXVaNGe3H1QqsvqRANQq8= @@ -456,10 +448,10 @@ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.36.0 h1:zwd go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.36.0/go.mod h1:rUKCPscaRWWcqGT6HnEmYrK+YNe5+Sw64xgQTOJ5b30= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.36.0 h1:gAU726w9J8fwr4qRDqu1GYMNNs4gXrU+Pv20/N1UpB4= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.36.0/go.mod h1:RboSDkp7N292rgu+T0MgVt2qgFGu6qa1RpZDOtpL76w= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0 h1:dNzwXjZKpMpE2JhmO+9HsPl42NIXFIFSUSSs0fiqra0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0/go.mod h1:90PoxvaEB5n6AOdZvi+yWJQoE95U8Dhhw2bSyRqnTD0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.36.0 h1:JgtbA0xkWHnTmYk7YusopJFX6uleBmAuZ8n05NEh8nQ= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.36.0/go.mod h1:179AK5aar5R3eS9FucPy6rggvU0g52cvKId8pv4+v0c= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 h1:lwI4Dc5leUqENgGuQImwLo4WnuXFPetmPpkLi2IrX54= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0/go.mod h1:Kz/oCE7z5wuyhPxsXDuaPteSWqjSBD5YaSdbxZYGbGk= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.36.0 h1:nRVXXvf78e00EwY6Wp0YII8ww2JVWshZ20HfTlE11AM= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.36.0/go.mod h1:r49hO7CgrxY9Voaj3Xe8pANWtr0Oq916d0XAmOoCZAQ= go.opentelemetry.io/otel/exporters/prometheus v0.58.0 h1:CJAxWKFIqdBennqxJyOgnt5LqkeFRT+Mz3Yjz3hL+h8= @@ -482,10 +474,10 @@ go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6 go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= -go.opentelemetry.io/proto/otlp v1.7.0 h1:jX1VolD6nHuFzOYso2E73H85i92Mv8JQYk0K9vz09os= -go.opentelemetry.io/proto/otlp v1.7.0/go.mod h1:fSKjH6YJ7HDlwzltzyMj036AJ3ejJLCgCSHGj4efDDo= -go.podman.io/common v0.66.0 h1:KElE3HKLFdMdJL+jv5ExBiX2Dh4Qcv8ovmzaBGRsyZM= -go.podman.io/common v0.66.0/go.mod h1:aNd2a0S7pY+fx1X5kpQYuF4hbwLU8ZOccuVrhu7h1Xc= +go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4= +go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE= +go.podman.io/common v0.66.1 h1:zDyd4HhVgQAN8LupBHCnhtM3FEOJ9DwmThjulXZq2qA= +go.podman.io/common v0.66.1/go.mod h1:aNd2a0S7pY+fx1X5kpQYuF4hbwLU8ZOccuVrhu7h1Xc= go.podman.io/image/v5 v5.38.0 h1:aUKrCANkPvze1bnhLJsaubcfz0d9v/bSDLnwsXJm6G4= go.podman.io/image/v5 v5.38.0/go.mod h1:hSIoIUzgBnmc4DjoIdzk63aloqVbD7QXDMkSE/cvG90= go.podman.io/storage v1.61.0 h1:5hD/oyRYt1f1gxgvect+8syZBQhGhV28dCw2+CZpx0Q= @@ -515,8 +507,8 @@ golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvx golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI= -golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg= +golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c= +golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -585,8 +577,8 @@ google.golang.org/genproto v0.0.0-20250603155806-513f23925822 h1:rHWScKit0gvAPuO google.golang.org/genproto v0.0.0-20250603155806-513f23925822/go.mod h1:HubltRL7rMh0LfnQPkMH4NPDFEWp0jw3vixw7jEM53s= google.golang.org/genproto/googleapis/api v0.0.0-20251029180050-ab9386a59fda h1:+2XxjfsAu6vqFxwGBRcHiMaDCuZiqXGDUDVWVtrFAnE= google.golang.org/genproto/googleapis/api v0.0.0-20251029180050-ab9386a59fda/go.mod h1:fDMmzKV90WSg1NbozdqrE64fkuTv6mlq2zxo9ad+3yo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda h1:i/Q+bfisr7gq6feoJnS/DlpdwEL4ihp41fvRiM3Ork0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251103181224-f26f9409b101 h1:tRPGkdGHuewF4UisLzzHHr1spKw92qLM98nIzxbC0wY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251103181224-f26f9409b101/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= diff --git a/staging/operator-lifecycle-manager/pkg/controller/operators/olm/config.go b/staging/operator-lifecycle-manager/pkg/controller/operators/olm/config.go index fa472c7130..4a9c3ca870 100644 --- a/staging/operator-lifecycle-manager/pkg/controller/operators/olm/config.go +++ b/staging/operator-lifecycle-manager/pkg/controller/operators/olm/config.go @@ -37,6 +37,7 @@ type operatorConfig struct { apiLabeler labeler.Labeler restConfig *rest.Config configClient configv1client.Interface + openshiftConfigAPIExists bool } func (o *operatorConfig) OperatorClient() operatorclient.ClientInterface { @@ -202,3 +203,9 @@ func WithConfigClient(configClient configv1client.Interface) OperatorOption { config.configClient = configClient } } + +func WithOpenshiftConfigAPIExists(exists bool) OperatorOption { + return func(config *operatorConfig) { + config.openshiftConfigAPIExists = exists + } +} diff --git a/staging/operator-lifecycle-manager/pkg/controller/operators/olm/operator.go b/staging/operator-lifecycle-manager/pkg/controller/operators/olm/operator.go index cd9bb45e9c..5b54dbe246 100644 --- a/staging/operator-lifecycle-manager/pkg/controller/operators/olm/operator.go +++ b/staging/operator-lifecycle-manager/pkg/controller/operators/olm/operator.go @@ -57,7 +57,6 @@ import ( "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/event" index "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/index" "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/labeler" - "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/openshiftconfig" "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorclient" "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorlister" "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/ownerutil" @@ -853,18 +852,10 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat return nil, err } - // Check if OpenShift config API is available (used by proxy and apiserver controllers) - discovery := config.operatorClient.KubernetesInterface().Discovery() - openshiftConfigAPIExists, err := openshiftconfig.IsAPIAvailable(discovery) - if err != nil { - op.logger.Errorf("error happened while probing for OpenShift config API support - %v", err) - return nil, err - } - // setup proxy env var injection policies proxyQuerierInUse := proxy.NoopQuerier() - if openshiftConfigAPIExists { - op.logger.Info("OpenShift Proxy API available - setting up watch for Proxy type") + if config.openshiftConfigAPIExists { + op.logger.Info("OpenShift Proxy API available - setting up watch for Proxy type") proxyInformer, proxySyncer, proxyQuerier, err := proxy.NewSyncer(op.logger, config.configClient) if err != nil { diff --git a/staging/operator-lifecycle-manager/pkg/lib/apiserver/syncer.go b/staging/operator-lifecycle-manager/pkg/lib/apiserver/syncer.go index 4b3793cd62..0d9e68a5d1 100644 --- a/staging/operator-lifecycle-manager/pkg/lib/apiserver/syncer.go +++ b/staging/operator-lifecycle-manager/pkg/lib/apiserver/syncer.go @@ -11,7 +11,10 @@ import ( apiconfigv1 "github.com/openshift/api/config/v1" configv1client "github.com/openshift/client-go/config/clientset/versioned" configv1 "github.com/openshift/client-go/config/informers/externalversions/config/v1" + "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/openshiftconfig" "github.com/sirupsen/logrus" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" "k8s.io/client-go/tools/cache" ) @@ -58,6 +61,53 @@ func RegisterEventHandlers(informer configv1.APIServerInformer, syncer *Syncer) }) } +// SetupAPIServerTLSConfig sets up the APIServer TLS configuration for HTTPS servers. +// It checks if OpenShift config API is available and if so, creates the necessary +// syncer and informer infrastructure to watch for cluster-wide TLS configuration changes. +// +// Returns: +// - querier: A Querier that can be used to get TLS configuration (NoopQuerier if OpenShift API not available) +// - factory: A SharedInformerFactory that must be started after operators are ready (nil if OpenShift API not available) +// - error: Any error encountered during setup +func SetupAPIServerTLSConfig(logger *logrus.Logger, config *rest.Config) (Querier, interface{ Start(<-chan struct{}) }, error) { + // Create Kubernetes client for discovery + clientset, err := kubernetes.NewForConfig(config) + if err != nil { + return nil, nil, fmt.Errorf("error creating kubernetes client: %w", err) + } + + // Check if OpenShift config API is available + openshiftConfigAPIExists, err := openshiftconfig.IsAPIAvailable(clientset.Discovery()) + if err != nil { + return nil, nil, fmt.Errorf("error checking for OpenShift config API support: %w", err) + } + + if !openshiftConfigAPIExists { + return NoopQuerier(), nil, nil + } + + logger.Info("OpenShift APIServer API available - setting up watch for APIServer TLS configuration") + + // Create versioned config client + versionedConfigClient, err := configv1client.NewForConfig(config) + if err != nil { + return nil, nil, fmt.Errorf("error configuring openshift config client: %w", err) + } + + // Create syncer and informer + apiServerInformer, apiServerSyncer, apiServerQuerier, apiServerFactory, err := NewSyncer(logger, versionedConfigClient) + if err != nil { + return nil, nil, fmt.Errorf("error initializing APIServer TLS syncer: %w", err) + } + + logger.Info("APIServer TLS configuration will be applied to HTTPS servers") + + // Register event handlers for APIServer resource changes + RegisterEventHandlers(apiServerInformer, apiServerSyncer) + + return apiServerQuerier, apiServerFactory, nil +} + // Syncer deals with watching APIServer type(s) on the cluster and let the caller // query for cluster scoped APIServer TLS configuration. type Syncer struct { diff --git a/staging/operator-lifecycle-manager/scripts/package_release.sh b/staging/operator-lifecycle-manager/scripts/package_release.sh index 881ff79146..05a413f53f 100755 --- a/staging/operator-lifecycle-manager/scripts/package_release.sh +++ b/staging/operator-lifecycle-manager/scripts/package_release.sh @@ -24,10 +24,10 @@ OPM_IMAGE_REF=$(go run util/image-canonical-ref/main.go ${OPERATOR_REGISTRY_IMAG echo "Using OPM image ${OPM_IMAGE_REF}" echo "Using OLM image ${OLM_RELEASE_IMG_REF}" -$YQ w -i $values olm.image.ref ${OLM_RELEASE_IMG_REF} -$YQ w -i $values catalog.image.ref ${OLM_RELEASE_IMG_REF} -$YQ w -i $values package.image.ref ${OLM_RELEASE_IMG_REF} -$YQ w -i $values -- catalog.opmImageArgs "--opmImage=${OPM_IMAGE_REF}" +$YQ -i '.olm.image.ref = "'"${OLM_RELEASE_IMG_REF}"'"' $values +$YQ -i '.catalog.image.ref = "'"${OLM_RELEASE_IMG_REF}"'"' $values +$YQ -i '.package.image.ref = "'"${OLM_RELEASE_IMG_REF}"'"' $values +$YQ -i '.catalog.opmImageArgs = "--opmImage='"${OPM_IMAGE_REF}"'"' $values charttmpdir=$(mktemp -d 2>/dev/null || mktemp -d -t charttmpdir) diff --git a/staging/operator-registry/.bingo/Variables.mk b/staging/operator-registry/.bingo/Variables.mk index af6c6c4394..623d5d44e3 100644 --- a/staging/operator-registry/.bingo/Variables.mk +++ b/staging/operator-registry/.bingo/Variables.mk @@ -29,17 +29,17 @@ $(GINKGO): $(BINGO_DIR)/ginkgo.mod @echo "(re)installing $(GOBIN)/ginkgo-v2.23.4" @cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=ginkgo.mod -o=$(GOBIN)/ginkgo-v2.23.4 "github.com/onsi/ginkgo/v2/ginkgo" -GOLANGCI_LINT := $(GOBIN)/golangci-lint-v1.64.8 +GOLANGCI_LINT := $(GOBIN)/golangci-lint-v2.7.2 $(GOLANGCI_LINT): $(BINGO_DIR)/golangci-lint.mod @# Install binary/ries using Go 1.14+ build command. This is using bwplotka/bingo-controlled, separate go module with pinned dependencies. - @echo "(re)installing $(GOBIN)/golangci-lint-v1.64.8" - @cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=golangci-lint.mod -o=$(GOBIN)/golangci-lint-v1.64.8 "github.com/golangci/golangci-lint/cmd/golangci-lint" + @echo "(re)installing $(GOBIN)/golangci-lint-v2.7.2" + @cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=golangci-lint.mod -o=$(GOBIN)/golangci-lint-v2.7.2 "github.com/golangci/golangci-lint/v2/cmd/golangci-lint" -GORELEASER := $(GOBIN)/goreleaser-v1.26.2 +GORELEASER := $(GOBIN)/goreleaser-v2.12.7 $(GORELEASER): $(BINGO_DIR)/goreleaser.mod @# Install binary/ries using Go 1.14+ build command. This is using bwplotka/bingo-controlled, separate go module with pinned dependencies. - @echo "(re)installing $(GOBIN)/goreleaser-v1.26.2" - @cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=goreleaser.mod -o=$(GOBIN)/goreleaser-v1.26.2 "github.com/goreleaser/goreleaser" + @echo "(re)installing $(GOBIN)/goreleaser-v2.12.7" + @cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=goreleaser.mod -o=$(GOBIN)/goreleaser-v2.12.7 "github.com/goreleaser/goreleaser/v2" PROTOC_GEN_GO_GRPC := $(GOBIN)/protoc-gen-go-grpc-v1.3.0 $(PROTOC_GEN_GO_GRPC): $(BINGO_DIR)/protoc-gen-go-grpc.mod diff --git a/staging/operator-registry/.bingo/golangci-lint.mod b/staging/operator-registry/.bingo/golangci-lint.mod index 00b7415724..eaee3369b9 100644 --- a/staging/operator-registry/.bingo/golangci-lint.mod +++ b/staging/operator-registry/.bingo/golangci-lint.mod @@ -1,7 +1,5 @@ module _ // Auto generated by https://github.com/bwplotka/bingo. DO NOT EDIT -go 1.23.0 +go 1.25.3 -toolchain go1.24.3 - -require github.com/golangci/golangci-lint v1.64.8 // cmd/golangci-lint +require github.com/golangci/golangci-lint/v2 v2.7.2 // cmd/golangci-lint diff --git a/staging/operator-registry/.bingo/golangci-lint.sum b/staging/operator-registry/.bingo/golangci-lint.sum index b6a0ef4284..e07a97b920 100644 --- a/staging/operator-registry/.bingo/golangci-lint.sum +++ b/staging/operator-registry/.bingo/golangci-lint.sum @@ -1,9 +1,5 @@ -4d63.com/gocheckcompilerdirectives v1.2.1 h1:AHcMYuw56NPjq/2y615IGg2kYkBdTvOaojYCBcRE7MA= -4d63.com/gocheckcompilerdirectives v1.2.1/go.mod h1:yjDJSxmDTtIHHCqX0ufRYZDL6vQtMG7tJdKVeWwsqvs= 4d63.com/gocheckcompilerdirectives v1.3.0 h1:Ew5y5CtcAAQeTVKUVFrE7EwHMrTO6BggtEj8BZSjZ3A= 4d63.com/gocheckcompilerdirectives v1.3.0/go.mod h1:ofsJ4zx2QAuIP/NO/NAh1ig6R1Fb18/GI7RVMwz7kAY= -4d63.com/gochecknoglobals v0.2.1 h1:1eiorGsgHOFOuoOiJDy2psSrQbRdIHrlge0IJIkUgDc= -4d63.com/gochecknoglobals v0.2.1/go.mod h1:KRE8wtJB3CXCsb1xy421JfTHIIbmT3U5ruxw2Qu8fSU= 4d63.com/gochecknoglobals v0.2.2 h1:H1vdnwnMaZdQW/N+NrkT1SZMTBmcwHe9Vq8lJcYYTtU= 4d63.com/gochecknoglobals v0.2.2/go.mod h1:lLxwTQjL5eIesRbvnzIP3jZtG140FnTdz+AlMa+ogt0= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= @@ -38,53 +34,41 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +codeberg.org/chavacava/garif v0.2.0 h1:F0tVjhYbuOCnvNcU3YSpO6b3Waw6Bimy4K0mM8y6MfY= +codeberg.org/chavacava/garif v0.2.0/go.mod h1:P2BPbVbT4QcvLZrORc2T29szK3xEOlnl0GiPTJmEqBQ= +dev.gaijin.team/go/exhaustruct/v4 v4.0.0 h1:873r7aNneqoBB3IaFIzhvt2RFYTuHgmMjoKfwODoI1Y= +dev.gaijin.team/go/exhaustruct/v4 v4.0.0/go.mod h1:aZ/k2o4Y05aMJtiux15x8iXaumE88YdiB0Ai4fXOzPI= +dev.gaijin.team/go/golib v0.6.0 h1:v6nnznFTs4bppib/NyU1PQxobwDHwCXXl15P7DV5Zgo= +dev.gaijin.team/go/golib v0.6.0/go.mod h1:uY1mShx8Z/aNHWDyAkZTkX+uCi5PdX7KsG1eDQa2AVE= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/4meepo/tagalign v1.3.4 h1:P51VcvBnf04YkHzjfclN6BbsopfJR5rxs1n+5zHt+w8= -github.com/4meepo/tagalign v1.3.4/go.mod h1:M+pnkHH2vG8+qhE5bVc/zeP7HS/j910Fwa9TUSyZVI0= -github.com/4meepo/tagalign v1.4.1 h1:GYTu2FaPGOGb/xJalcqHeD4il5BiCywyEYZOA55P6J4= -github.com/4meepo/tagalign v1.4.1/go.mod h1:2H9Yu6sZ67hmuraFgfZkNcg5Py9Ch/Om9l2K/2W1qS4= -github.com/4meepo/tagalign v1.4.2 h1:0hcLHPGMjDyM1gHG58cS73aQF8J4TdVR96TZViorO9E= -github.com/4meepo/tagalign v1.4.2/go.mod h1:+p4aMyFM+ra7nb41CnFG6aSDXqRxU/w1VQqScKqDARI= -github.com/Abirdcfly/dupword v0.1.1 h1:Bsxe0fIw6OwBtXMIncaTxCLHYO5BB+3mcsR5E8VXloY= -github.com/Abirdcfly/dupword v0.1.1/go.mod h1:B49AcJdTYYkpd4HjgAcutNGG9HZ2JWwKunH9Y2BA6sM= -github.com/Abirdcfly/dupword v0.1.3 h1:9Pa1NuAsZvpFPi9Pqkd93I7LIYRURj+A//dFd5tgBeE= -github.com/Abirdcfly/dupword v0.1.3/go.mod h1:8VbB2t7e10KRNdwTVoxdBaxla6avbhGzb8sCTygUMhw= -github.com/Antonboom/errname v0.1.13 h1:JHICqsewj/fNckzrfVSe+T33svwQxmjC+1ntDsHOVvM= -github.com/Antonboom/errname v0.1.13/go.mod h1:uWyefRYRN54lBg6HseYCFhs6Qjcy41Y3Jl/dVhA87Ns= -github.com/Antonboom/errname v1.0.0 h1:oJOOWR07vS1kRusl6YRSlat7HFnb3mSfMl6sDMRoTBA= -github.com/Antonboom/errname v1.0.0/go.mod h1:gMOBFzK/vrTiXN9Oh+HFs+e6Ndl0eTFbtsRTSRdXyGI= -github.com/Antonboom/nilnil v0.1.9 h1:eKFMejSxPSA9eLSensFmjW2XTgTwJMjZ8hUHtV4s/SQ= -github.com/Antonboom/nilnil v0.1.9/go.mod h1:iGe2rYwCq5/Me1khrysB4nwI7swQvjclR8/YRPl5ihQ= -github.com/Antonboom/nilnil v1.0.1 h1:C3Tkm0KUxgfO4Duk3PM+ztPncTFlOf0b2qadmS0s4xs= -github.com/Antonboom/nilnil v1.0.1/go.mod h1:CH7pW2JsRNFgEh8B2UaPZTEPhCMuFowP/e8Udp9Nnb0= -github.com/Antonboom/testifylint v1.4.3 h1:ohMt6AHuHgttaQ1xb6SSnxCeK4/rnK7KKzbvs7DmEck= -github.com/Antonboom/testifylint v1.4.3/go.mod h1:+8Q9+AOLsz5ZiQiiYujJKs9mNz398+M6UgslP4qgJLA= -github.com/Antonboom/testifylint v1.5.2 h1:4s3Xhuv5AvdIgbd8wOOEeo0uZG7PbDKQyKY5lGoQazk= -github.com/Antonboom/testifylint v1.5.2/go.mod h1:vxy8VJ0bc6NavlYqjZfmp6EfqXMtBgQ4+mhCojwC1P8= +github.com/4meepo/tagalign v1.4.3 h1:Bnu7jGWwbfpAie2vyl63Zup5KuRv21olsPIha53BJr8= +github.com/4meepo/tagalign v1.4.3/go.mod h1:00WwRjiuSbrRJnSVeGWPLp2epS5Q/l4UEy0apLLS37c= +github.com/Abirdcfly/dupword v0.1.7 h1:2j8sInznrje4I0CMisSL6ipEBkeJUJAmK1/lfoNGWrQ= +github.com/Abirdcfly/dupword v0.1.7/go.mod h1:K0DkBeOebJ4VyOICFdppB23Q0YMOgVafM0zYW0n9lF4= +github.com/AdminBenni/iota-mixing v1.0.0 h1:Os6lpjG2dp/AE5fYBPAA1zfa2qMdCAWwPMCgpwKq7wo= +github.com/AdminBenni/iota-mixing v1.0.0/go.mod h1:i4+tpAaB+qMVIV9OK3m4/DAynOd5bQFaOu+2AhtBCNY= +github.com/AlwxSin/noinlineerr v1.0.5 h1:RUjt63wk1AYWTXtVXbSqemlbVTb23JOSRiNsshj7TbY= +github.com/AlwxSin/noinlineerr v1.0.5/go.mod h1:+QgkkoYrMH7RHvcdxdlI7vYYEdgeoFOVjU9sUhw/rQc= +github.com/Antonboom/errname v1.1.1 h1:bllB7mlIbTVzO9jmSWVWLjxTEbGBVQ1Ff/ClQgtPw9Q= +github.com/Antonboom/errname v1.1.1/go.mod h1:gjhe24xoxXp0ScLtHzjiXp0Exi1RFLKJb0bVBtWKCWQ= +github.com/Antonboom/nilnil v1.1.1 h1:9Mdr6BYd8WHCDngQnNVV0b554xyisFioEKi30sksufQ= +github.com/Antonboom/nilnil v1.1.1/go.mod h1:yCyAmSw3doopbOWhJlVci+HuyNRuHJKIv6V2oYQa8II= +github.com/Antonboom/testifylint v1.6.4 h1:gs9fUEy+egzxkEbq9P4cpcMB6/G0DYdMeiFS87UiqmQ= +github.com/Antonboom/testifylint v1.6.4/go.mod h1:YO33FROXX2OoUfwjz8g+gUxQXio5i9qpVy7nXGbxDD4= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c h1:pxW6RcqyfI9/kWtOwnv/G+AzdKuy2ZrqINhenH4HyNs= -github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= +github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/Crocmagnon/fatcontext v0.5.2 h1:vhSEg8Gqng8awhPju2w7MKHqMlg4/NI+gSDHtR3xgwA= -github.com/Crocmagnon/fatcontext v0.5.2/go.mod h1:87XhRMaInHP44Q7Tlc7jkgKKB7kZAOPiDkFMdKCC+74= -github.com/Crocmagnon/fatcontext v0.5.3 h1:zCh/wjc9oyeF+Gmp+V60wetm8ph2tlsxocgg/J0hOps= -github.com/Crocmagnon/fatcontext v0.5.3/go.mod h1:XoCQYY1J+XTfyv74qLXvNw4xFunr3L1wkopIIKG7wGM= -github.com/Crocmagnon/fatcontext v0.7.1 h1:SC/VIbRRZQeQWj/TcQBS6JmrXcfA+BU4OGSVUt54PjM= -github.com/Crocmagnon/fatcontext v0.7.1/go.mod h1:1wMvv3NXEBJucFGfwOJBxSVWcoIO6emV215SMkW9MFU= -github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM= -github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= -github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.0 h1:/fTUt5vmbkAcMBt4YQiuC23cV0kEsN1MVMNqeOW43cU= -github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.0/go.mod h1:ONJg5sxcbsdQQ4pOW8TGdTidT2TMAUy/2Xhr8mrYaao= -github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.1 h1:Sz1JIXEcSfhz7fUi7xHnhpIE0thVASYjvosApmHuD2k= -github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.1/go.mod h1:n/LSCXNuIYqVfBlVXyHfMQkZDdp1/mmxfSjADd3z1Zg= -github.com/Masterminds/semver/v3 v3.3.0 h1:B8LGeaivUe71a5qox1ICM/JLl0NqZSW5CHyL+hmvYS0= -github.com/Masterminds/semver/v3 v3.3.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= -github.com/OpenPeeDeeP/depguard/v2 v2.2.0 h1:vDfG60vDtIuf0MEOhmLlLLSzqaRM8EMcgJPdp74zmpA= -github.com/OpenPeeDeeP/depguard/v2 v2.2.0/go.mod h1:CIzddKRvLBC4Au5aYP/i3nyaWQ+ClszLIuVocRiCYFQ= +github.com/Djarvur/go-err113 v0.1.1 h1:eHfopDqXRwAi+YmCUas75ZE0+hoBHJ2GQNLYRSxao4g= +github.com/Djarvur/go-err113 v0.1.1/go.mod h1:IaWJdYFLg76t2ihfflPZnM1LIQszWOsFDh2hhhAVF6k= +github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0= +github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= +github.com/MirrexOne/unqueryvet v1.3.0 h1:5slWSomgqpYU4zFuZ3NNOfOUxVPlXFDBPAVasZOGlAY= +github.com/MirrexOne/unqueryvet v1.3.0/go.mod h1:IWwCwMQlSWjAIteW0t+28Q5vouyktfujzYznSIWiuOg= github.com/OpenPeeDeeP/depguard/v2 v2.2.1 h1:vckeWVESWp6Qog7UZSARNqfu/cZqvki8zsuj3piCMx4= github.com/OpenPeeDeeP/depguard/v2 v2.2.1/go.mod h1:q4DKzC4UcVaAvcfd41CZh0PWpGgzrVxUYBlgKNGquUo= -github.com/alecthomas/go-check-sumtype v0.1.4 h1:WCvlB3l5Vq5dZQTFmodqL2g68uHiSwwlWcT5a2FGK0c= -github.com/alecthomas/go-check-sumtype v0.1.4/go.mod h1:WyYPfhfkdhyrdaligV6svFopZV8Lqdzn5pyVBaV6jhQ= +github.com/alecthomas/chroma/v2 v2.20.0 h1:sfIHpxPyR07/Oylvmcai3X/exDlE8+FA820NTz+9sGw= +github.com/alecthomas/chroma/v2 v2.20.0/go.mod h1:e7tViK0xh/Nf4BYHl00ycY6rV7b8iXBksI9E359yNmA= github.com/alecthomas/go-check-sumtype v0.3.1 h1:u9aUvbGINJxLVXiFvHUlPEaD7VDULsrxJb4Aq31NLkU= github.com/alecthomas/go-check-sumtype v0.3.1/go.mod h1:A8TSiN3UPRw3laIgWEUOHHLPa6/r9MtoigdlP5h3K/E= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -92,122 +76,104 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alexkohler/nakedret/v2 v2.0.4 h1:yZuKmjqGi0pSmjGpOC016LtPJysIL0WEUiaXW5SUnNg= -github.com/alexkohler/nakedret/v2 v2.0.4/go.mod h1:bF5i0zF2Wo2o4X4USt9ntUWve6JbFv02Ff4vlkmS/VU= -github.com/alexkohler/nakedret/v2 v2.0.5 h1:fP5qLgtwbx9EJE8dGEERT02YwS8En4r9nnZ71RK+EVU= -github.com/alexkohler/nakedret/v2 v2.0.5/go.mod h1:bF5i0zF2Wo2o4X4USt9ntUWve6JbFv02Ff4vlkmS/VU= +github.com/alexkohler/nakedret/v2 v2.0.6 h1:ME3Qef1/KIKr3kWX3nti3hhgNxw6aqN5pZmQiFSsuzQ= +github.com/alexkohler/nakedret/v2 v2.0.6/go.mod h1:l3RKju/IzOMQHmsEvXwkqMDzHHvurNQfAgE1eVmT40Q= github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw= github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= +github.com/alfatraining/structtag v1.0.0 h1:2qmcUqNcCoyVJ0up879K614L9PazjBSFruTB0GOFjCc= +github.com/alfatraining/structtag v1.0.0/go.mod h1:p3Xi5SwzTi+Ryj64DqjLWz7XurHxbGsq6y3ubePJPus= github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw= github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= -github.com/alingse/nilnesserr v0.1.1 h1:7cYuJewpy9jFNMEA72Q1+3Nm3zKHzg+Q28D5f2bBFUA= -github.com/alingse/nilnesserr v0.1.1/go.mod h1:1xJPrXonEtX7wyTq8Dytns5P2hNzoWymVUIaKm4HNFg= -github.com/alingse/nilnesserr v0.1.2 h1:Yf8Iwm3z2hUUrP4muWfW83DF4nE3r1xZ26fGWUKCZlo= -github.com/alingse/nilnesserr v0.1.2/go.mod h1:1xJPrXonEtX7wyTq8Dytns5P2hNzoWymVUIaKm4HNFg= -github.com/ashanbrown/forbidigo v1.6.0 h1:D3aewfM37Yb3pxHujIPSpTf6oQk9sc9WZi8gerOIVIY= -github.com/ashanbrown/forbidigo v1.6.0/go.mod h1:Y8j9jy9ZYAEHXdu723cUlraTqbzjKF1MUyfOKL+AjcU= -github.com/ashanbrown/makezero v1.1.1 h1:iCQ87C0V0vSyO+M9E/FZYbu65auqH0lnsOkf5FcB28s= -github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= -github.com/ashanbrown/makezero v1.2.0 h1:/2Lp1bypdmK9wDIq7uWBlDF1iMUpIIS4A+pF6C9IEUU= -github.com/ashanbrown/makezero v1.2.0/go.mod h1:dxlPhHbDMC6N6xICzFBSK+4njQDdK8euNO0qjQMtGY4= +github.com/alingse/nilnesserr v0.2.0 h1:raLem5KG7EFVb4UIDAXgrv3N2JIaffeKNtcEXkEWd/w= +github.com/alingse/nilnesserr v0.2.0/go.mod h1:1xJPrXonEtX7wyTq8Dytns5P2hNzoWymVUIaKm4HNFg= +github.com/ashanbrown/forbidigo/v2 v2.3.0 h1:OZZDOchCgsX5gvToVtEBoV2UWbFfI6RKQTir2UZzSxo= +github.com/ashanbrown/forbidigo/v2 v2.3.0/go.mod h1:5p6VmsG5/1xx3E785W9fouMxIOkvY2rRV9nMdWadd6c= +github.com/ashanbrown/makezero/v2 v2.1.0 h1:snuKYMbqosNokUKm+R6/+vOPs8yVAi46La7Ck6QYSaE= +github.com/ashanbrown/makezero/v2 v2.1.0/go.mod h1:aEGT/9q3S8DHeE57C88z2a6xydvgx8J5hgXIGWgo0MY= +github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= +github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bkielbasa/cyclop v1.2.1 h1:AeF71HZDob1P2/pRm1so9cd1alZnrpyc4q2uP2l0gJY= -github.com/bkielbasa/cyclop v1.2.1/go.mod h1:K/dT/M0FPAiYjBgQGau7tz+3TMh4FWAEqlMhzFWCrgM= github.com/bkielbasa/cyclop v1.2.3 h1:faIVMIGDIANuGPWH031CZJTi2ymOQBULs9H21HSMa5w= github.com/bkielbasa/cyclop v1.2.3/go.mod h1:kHTwA9Q0uZqOADdupvcFJQtp/ksSnytRMe8ztxG8Fuo= github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ089M= github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= -github.com/bombsimon/wsl/v4 v4.4.1 h1:jfUaCkN+aUpobrMO24zwyAMwMAV5eSziCkOKEauOLdw= -github.com/bombsimon/wsl/v4 v4.4.1/go.mod h1:Xu/kDxGZTofQcDGCtQe9KCzhHphIe0fDuyWTxER9Feo= -github.com/bombsimon/wsl/v4 v4.5.0 h1:iZRsEvDdyhd2La0FVi5k6tYehpOR/R7qIUjmKk7N74A= -github.com/bombsimon/wsl/v4 v4.5.0/go.mod h1:NOQ3aLF4nD7N5YPXMruR6ZXDOAqLoM0GEpLwTdvmOSc= -github.com/breml/bidichk v0.2.7 h1:dAkKQPLl/Qrk7hnP6P+E0xOodrq8Us7+U0o4UBOAlQY= -github.com/breml/bidichk v0.2.7/go.mod h1:YodjipAGI9fGcYM7II6wFvGhdMYsC5pHDlGzqvEW3tQ= -github.com/breml/bidichk v0.3.2 h1:xV4flJ9V5xWTqxL+/PMFF6dtJPvZLPsyixAoPe8BGJs= -github.com/breml/bidichk v0.3.2/go.mod h1:VzFLBxuYtT23z5+iVkamXO386OB+/sVwZOpIj6zXGos= -github.com/breml/errchkjson v0.3.6 h1:VLhVkqSBH96AvXEyclMR37rZslRrY2kcyq+31HCsVrA= -github.com/breml/errchkjson v0.3.6/go.mod h1:jhSDoFheAF2RSDOlCfhHO9KqhZgAYLyvHe7bRCX8f/U= -github.com/breml/errchkjson v0.4.0 h1:gftf6uWZMtIa/Is3XJgibewBm2ksAQSY/kABDNFTAdk= -github.com/breml/errchkjson v0.4.0/go.mod h1:AuBOSTHyLSaaAFlWsRSuRBIroCh3eh7ZHh5YeelDIk8= -github.com/butuzov/ireturn v0.3.0 h1:hTjMqWw3y5JC3kpnC5vXmFJAWI/m31jaCYQqzkS6PL0= -github.com/butuzov/ireturn v0.3.0/go.mod h1:A09nIiwiqzN/IoVo9ogpa0Hzi9fex1kd9PSD6edP5ZA= -github.com/butuzov/ireturn v0.3.1 h1:mFgbEI6m+9W8oP/oDdfA34dLisRFCj2G6o/yiI1yZrY= -github.com/butuzov/ireturn v0.3.1/go.mod h1:ZfRp+E7eJLC0NQmk1Nrm1LOrn/gQlOykv+cVPdiXH5M= -github.com/butuzov/mirror v1.2.0 h1:9YVK1qIjNspaqWutSv8gsge2e/Xpq1eqEkslEUHy5cs= -github.com/butuzov/mirror v1.2.0/go.mod h1:DqZZDtzm42wIAIyHXeN8W/qb1EPlb9Qn/if9icBOpdQ= +github.com/bombsimon/wsl/v4 v4.7.0 h1:1Ilm9JBPRczjyUs6hvOPKvd7VL1Q++PL8M0SXBDf+jQ= +github.com/bombsimon/wsl/v4 v4.7.0/go.mod h1:uV/+6BkffuzSAVYD+yGyld1AChO7/EuLrCF/8xTiapg= +github.com/bombsimon/wsl/v5 v5.3.0 h1:nZWREJFL6U3vgW/B1lfDOigl+tEF6qgs6dGGbFeR0UM= +github.com/bombsimon/wsl/v5 v5.3.0/go.mod h1:Gp8lD04z27wm3FANIUPZycXp+8huVsn0oxc+n4qfV9I= +github.com/breml/bidichk v0.3.3 h1:WSM67ztRusf1sMoqH6/c4OBCUlRVTKq+CbSeo0R17sE= +github.com/breml/bidichk v0.3.3/go.mod h1:ISbsut8OnjB367j5NseXEGGgO/th206dVa427kR8YTE= +github.com/breml/errchkjson v0.4.1 h1:keFSS8D7A2T0haP9kzZTi7o26r7kE3vymjZNeNDRDwg= +github.com/breml/errchkjson v0.4.1/go.mod h1:a23OvR6Qvcl7DG/Z4o0el6BRAjKnaReoPQFciAl9U3s= +github.com/butuzov/ireturn v0.4.0 h1:+s76bF/PfeKEdbG8b54aCocxXmi0wvYdOVsWxVO7n8E= +github.com/butuzov/ireturn v0.4.0/go.mod h1:ghI0FrCmap8pDWZwfPisFD1vEc56VKH4NpQUxDHta70= github.com/butuzov/mirror v1.3.0 h1:HdWCXzmwlQHdVhwvsfBb2Au0r3HyINry3bDWLYXiKoc= github.com/butuzov/mirror v1.3.0/go.mod h1:AEij0Z8YMALaq4yQj9CPPVYOyJQyiexpQEQgihajRfI= -github.com/catenacyber/perfsprint v0.7.1 h1:PGW5G/Kxn+YrN04cRAZKC+ZuvlVwolYMrIyyTJ/rMmc= -github.com/catenacyber/perfsprint v0.7.1/go.mod h1:/wclWYompEyjUD2FuIIDVKNkqz7IgBIWXIH3V0Zol50= -github.com/catenacyber/perfsprint v0.8.2 h1:+o9zVmCSVa7M4MvabsWvESEhpsMkhfE7k0sHNGL95yw= -github.com/catenacyber/perfsprint v0.8.2/go.mod h1:q//VWC2fWbcdSLEY1R3l8n0zQCDPdE4IjZwyY1HMunM= -github.com/ccojocar/zxcvbn-go v1.0.2 h1:na/czXU8RrhXO4EZme6eQJLR4PzcGsahsBOAwU6I3Vg= -github.com/ccojocar/zxcvbn-go v1.0.2/go.mod h1:g1qkXtUSvHP8lhHp5GrSmTz6uWALGRMQdw6Qnz/hi60= +github.com/catenacyber/perfsprint v0.10.1 h1:u7Riei30bk46XsG8nknMhKLXG9BcXz3+3tl/WpKm0PQ= +github.com/catenacyber/perfsprint v0.10.1/go.mod h1:DJTGsi/Zufpuus6XPGJyKOTMELe347o6akPvWG9Zcsc= +github.com/ccojocar/zxcvbn-go v1.0.4 h1:FWnCIRMXPj43ukfX000kvBZvV6raSxakYr1nzyNrUcc= +github.com/ccojocar/zxcvbn-go v1.0.4/go.mod h1:3GxGX+rHmueTUMvm5ium7irpyjmm7ikxYFOSJB21Das= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/charithe/durationcheck v0.0.10 h1:wgw73BiocdBDQPik+zcEoBG/ob8uyBHf2iyoHGPf5w4= -github.com/charithe/durationcheck v0.0.10/go.mod h1:bCWXb7gYRysD1CU3C+u4ceO49LoGOY1C1L6uouGNreQ= -github.com/chavacava/garif v0.1.0 h1:2JHa3hbYf5D9dsgseMKAmc/MZ109otzgNFk5s87H9Pc= -github.com/chavacava/garif v0.1.0/go.mod h1:XMyYCkEL58DF0oyW4qDjjnPWONs2HBqYKI+UIPD+Gww= +github.com/charithe/durationcheck v0.0.11 h1:g1/EX1eIiKS57NTWsYtHDZ/APfeXKhye1DidBcABctk= +github.com/charithe/durationcheck v0.0.11/go.mod h1:x5iZaixRNl8ctbM+3B2RrPG5t856TxRyVQEnbIEM2X4= +github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc h1:4pZI35227imm7yK2bGPcfpFEmuY1gc2YSTShr4iJBfs= +github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc/go.mod h1:X4/0JoqgTIPSFcRA/P6INZzIuyqdFY5rm8tb41s9okk= +github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY= +github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30= +github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE= +github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q= +github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd h1:vy0GVL4jeHEwG5YOXDmi86oYw2yuYUGqz6a8sLwg0X8= +github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs= +github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ= +github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/ckaznocha/intrange v0.2.0 h1:FykcZuJ8BD7oX93YbO1UY9oZtkRbp+1/kJcDjkefYLs= -github.com/ckaznocha/intrange v0.2.0/go.mod h1:r5I7nUlAAG56xmkOpw4XVr16BXhwYTUdcuRFeevn1oE= -github.com/ckaznocha/intrange v0.3.0 h1:VqnxtK32pxgkhJgYQEeOArVidIPg+ahLP7WBOXZd5ZY= -github.com/ckaznocha/intrange v0.3.0/go.mod h1:+I/o2d2A1FBHgGELbGxzIcyd3/9l9DuwjM8FsbSS3Lo= +github.com/ckaznocha/intrange v0.3.1 h1:j1onQyXvHUsPWujDH6WIjhyH26gkRt/txNlV7LspvJs= +github.com/ckaznocha/intrange v0.3.1/go.mod h1:QVepyz1AkUoFQkpEqksSYpNpUo3c5W7nWh/s6SHIJJk= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= -github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo= -github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= github.com/curioswitch/go-reassign v0.3.0 h1:dh3kpQHuADL3cobV/sSGETA8DOv457dwl+fbBAhrQPs= github.com/curioswitch/go-reassign v0.3.0/go.mod h1:nApPCCTtqLJN/s8HfItCcKV0jIPwluBOvZP+dsJGA88= -github.com/daixiang0/gci v0.13.5 h1:kThgmH1yBmZSBCh1EJVxQ7JsHpm5Oms0AMed/0LaH4c= -github.com/daixiang0/gci v0.13.5/go.mod h1:12etP2OniiIdP4q+kjUGrC/rUagga7ODbqsom5Eo5Yk= +github.com/daixiang0/gci v0.13.7 h1:+0bG5eK9vlI08J+J/NWGbWPTNiXPG4WhNLJOkSxWITQ= +github.com/daixiang0/gci v0.13.7/go.mod h1:812WVN6JLFY9S6Tv76twqmNqevN0pa3SX3nih0brVzQ= +github.com/dave/dst v0.27.3 h1:P1HPoMza3cMEquVf9kKy8yXsFirry4zEnWOdYPOoIzY= +github.com/dave/dst v0.27.3/go.mod h1:jHh6EOibnHgcUW3WjKHisiooEkYwqpHLBSX1iOBhEyc= 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/denis-tingaikin/go-header v0.5.0 h1:SRdnP5ZKvcO9KKRP1KJrhFR3RrlGuD+42t4429eC9k8= github.com/denis-tingaikin/go-header v0.5.0/go.mod h1:mMenU5bWrok6Wl2UsZjy+1okegmwQ3UgWl4V1D8gjlY= +github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ= +github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ettle/strcase v0.2.0 h1:fGNiVF21fHXpX1niBgk0aROov1LagYsOwV/xqKDKR/Q= github.com/ettle/strcase v0.2.0/go.mod h1:DajmHElDSaX76ITe3/VHVyMin4LWSJN5Z909Wp+ED1A= -github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= -github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= -github.com/firefart/nonamedreturns v1.0.5 h1:tM+Me2ZaXs8tfdDw3X6DOX++wMCOqzYUho6tUTYIdRA= -github.com/firefart/nonamedreturns v1.0.5/go.mod h1:gHJjDqhGM4WyPt639SOZs+G89Ko7QKH5R5BhnO6xJhw= +github.com/firefart/nonamedreturns v1.0.6 h1:vmiBcKV/3EqKY3ZiPxCINmpS431OcE1S47AQUwhrg8E= +github.com/firefart/nonamedreturns v1.0.6/go.mod h1:R8NisJnSIpvPWheCq0mNRXJok6D8h7fagJTF8EMEwCo= github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= -github.com/ghostiam/protogetter v0.3.6 h1:R7qEWaSgFCsy20yYHNIJsU9ZOb8TziSRRxuAOTVKeOk= -github.com/ghostiam/protogetter v0.3.6/go.mod h1:7lpeDnEJ1ZjL/YtyoN99ljO4z0pd3H0d18/t2dPBxHw= -github.com/ghostiam/protogetter v0.3.8 h1:LYcXbYvybUyTIxN2Mj9h6rHrDZBDwZloPoKctWrFyJY= -github.com/ghostiam/protogetter v0.3.8/go.mod h1:WZ0nw9pfzsgxuRsPOFQomgDVSWtDLJRfQJEhsGbmQMA= -github.com/ghostiam/protogetter v0.3.9 h1:j+zlLLWzqLay22Cz/aYwTHKQ88GE2DQ6GkWSYFOI4lQ= -github.com/ghostiam/protogetter v0.3.9/go.mod h1:WZ0nw9pfzsgxuRsPOFQomgDVSWtDLJRfQJEhsGbmQMA= -github.com/go-critic/go-critic v0.11.4 h1:O7kGOCx0NDIni4czrkRIXTnit0mkyKOCePh3My6OyEU= -github.com/go-critic/go-critic v0.11.4/go.mod h1:2QAdo4iuLik5S9YG0rT4wcZ8QxwHYkrr6/2MWAiv/vc= -github.com/go-critic/go-critic v0.11.5 h1:TkDTOn5v7EEngMxu8KbuFqFR43USaaH8XRJLz1jhVYA= -github.com/go-critic/go-critic v0.11.5/go.mod h1:wu6U7ny9PiaHaZHcvMDmdysMqvDem162Rh3zWTrqk8M= -github.com/go-critic/go-critic v0.12.0 h1:iLosHZuye812wnkEz1Xu3aBwn5ocCPfc9yqmFG9pa6w= -github.com/go-critic/go-critic v0.12.0/go.mod h1:DpE0P6OVc6JzVYzmM5gq5jMU31zLr4am5mB/VfFK64w= +github.com/ghostiam/protogetter v0.3.17 h1:sjGPErP9o7i2Ym+z3LsQzBdLCNaqbYy2iJQPxGXg04Q= +github.com/ghostiam/protogetter v0.3.17/go.mod h1:AivIX1eKA/TcUmzZdzbl+Tb8tjIe8FcyG6JFyemQAH4= +github.com/go-critic/go-critic v0.14.2 h1:PMvP5f+LdR8p6B29npvChUXbD1vrNlKDf60NJtgMBOo= +github.com/go-critic/go-critic v0.14.2/go.mod h1:xwntfW6SYAd7h1OqDzmN6hBX/JxsEKl5up/Y2bsxgVQ= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -235,18 +201,16 @@ github.com/go-toolsmith/strparse v1.1.0 h1:GAioeZUK9TGxnLS+qfdqNbA4z0SSm5zVNtCQi github.com/go-toolsmith/strparse v1.1.0/go.mod h1:7ksGy58fsaQkGQlY8WVoBFNyEPMGuJin1rfoPS4lBSQ= github.com/go-toolsmith/typep v1.1.0 h1:fIRYDyF+JywLfqzyhdiHzRop/GQDxxNhLGQ6gFUNHus= github.com/go-toolsmith/typep v1.1.0/go.mod h1:fVIw+7zjdsMxDA3ITWnH1yOiw1rnTQKCsF/sk2H/qig= -github.com/go-viper/mapstructure/v2 v2.1.0 h1:gHnMa2Y/pIxElCH2GlZZ1lZSsn6XMtufpGyP1XxdC/w= -github.com/go-viper/mapstructure/v2 v2.1.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= -github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss= -github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= -github.com/go-xmlfmt/xmlfmt v1.1.2 h1:Nea7b4icn8s57fTx1M5AI4qQT5HEM3rVUO8MuE6g80U= -github.com/go-xmlfmt/xmlfmt v1.1.2/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= +github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= +github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/go-xmlfmt/xmlfmt v1.1.3 h1:t8Ey3Uy7jDSEisW2K3somuMKIpzktkWptA0iFCnRUWY= github.com/go-xmlfmt/xmlfmt v1.1.3/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E= -github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0= +github.com/godoc-lint/godoc-lint v0.10.2 h1:dksNgK+zebnVlj4Fx83CRnCmPO0qRat/9xfFsir1nfg= +github.com/godoc-lint/godoc-lint v0.10.2/go.mod h1:KleLcHu/CGSvkjUH2RvZyoK1MBC7pDQg4NxMYLcBBsw= +github.com/gofrs/flock v0.13.0 h1:95JolYOvGMqeH31+FC7D2+uULf6mG61mEZ/A8dRYMzw= +github.com/gofrs/flock v0.13.0/go.mod h1:jxeyy9R1auM5S6JYDBhDt+E2TCo7DkratH4Pgi8P+Z0= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -277,36 +241,28 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= -github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/asciicheck v0.5.0 h1:jczN/BorERZwK8oiFBOGvlGPknhvq0bjnysTj4nUfo0= +github.com/golangci/asciicheck v0.5.0/go.mod h1:5RMNAInbNFw2krqN6ibBxN/zfRFa9S6tA1nPdM0l8qQ= github.com/golangci/dupl v0.0.0-20250308024227-f665c8d69b32 h1:WUvBfQL6EW/40l6OmeSBYQJNSif4O11+bmWEz+C7FYw= github.com/golangci/dupl v0.0.0-20250308024227-f665c8d69b32/go.mod h1:NUw9Zr2Sy7+HxzdjIULge71wI6yEg1lWQr7Evcu8K0E= -github.com/golangci/go-printf-func-name v0.1.0 h1:dVokQP+NMTO7jwO4bwsRwLWeudOVUPPyAKJuzv8pEJU= -github.com/golangci/go-printf-func-name v0.1.0/go.mod h1:wqhWFH5mUdJQhweRnldEywnR5021wTdZSNgwYceV14s= -github.com/golangci/gofmt v0.0.0-20240816233607-d8596aa466a9 h1:/1322Qns6BtQxUZDTAT4SdcoxknUki7IAoK4SAXr8ME= -github.com/golangci/gofmt v0.0.0-20240816233607-d8596aa466a9/go.mod h1:Oesb/0uFAyWoaw1U1qS5zyjCg5NP9C9iwjnI4tIsXEE= -github.com/golangci/gofmt v0.0.0-20241223200906-057b0627d9b9 h1:t5wybL6RtO83VwoMOb7U/Peqe3gGKQlPIC66wXmnkvM= -github.com/golangci/gofmt v0.0.0-20241223200906-057b0627d9b9/go.mod h1:Ag3L7sh7E28qAp/5xnpMMTuGYqxLZoSaEHZDkZB1RgU= +github.com/golangci/go-printf-func-name v0.1.1 h1:hIYTFJqAGp1iwoIfsNTpoq1xZAarogrvjO9AfiW3B4U= +github.com/golangci/go-printf-func-name v0.1.1/go.mod h1:Es64MpWEZbh0UBtTAICOZiB+miW53w/K9Or/4QogJss= github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d h1:viFft9sS/dxoYY0aiOTsLKO2aZQAPT4nlQCsimGcSGE= github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d/go.mod h1:ivJ9QDg0XucIkmwhzCDsqcnxxlDStoTl89jDMIoNxKY= -github.com/golangci/golangci-lint v1.61.0 h1:VvbOLaRVWmyxCnUIMTbf1kDsaJbTzH20FAMXTAlQGu8= -github.com/golangci/golangci-lint v1.61.0/go.mod h1:e4lztIrJJgLPhWvFPDkhiMwEFRrWlmFbrZea3FsJyN8= -github.com/golangci/golangci-lint v1.63.4 h1:bJQFQ3hSfUto597dkL7ipDzOxsGEpiWdLiZ359OWOBI= -github.com/golangci/golangci-lint v1.63.4/go.mod h1:Hx0B7Lg5/NXbaOHem8+KU+ZUIzMI6zNj/7tFwdnn10I= -github.com/golangci/golangci-lint v1.64.8 h1:y5TdeVidMtBGG32zgSC7ZXTFNHrsJkDnpO4ItB3Am+I= -github.com/golangci/golangci-lint v1.64.8/go.mod h1:5cEsUQBSr6zi8XI8OjmcY2Xmliqc4iYL7YoPrL+zLJ4= -github.com/golangci/misspell v0.6.0 h1:JCle2HUTNWirNlDIAUO44hUsKhOFqGPoC4LZxlaSXDs= -github.com/golangci/misspell v0.6.0/go.mod h1:keMNyY6R9isGaSAu+4Q8NMBwMPkh15Gtc8UCVoDtAWo= -github.com/golangci/modinfo v0.3.4 h1:oU5huX3fbxqQXdfspamej74DFX0kyGLkw1ppvXoJ8GA= -github.com/golangci/modinfo v0.3.4/go.mod h1:wytF1M5xl9u0ij8YSvhkEVPP3M5Mc7XLl1pxH3B2aUM= -github.com/golangci/plugin-module-register v0.1.1 h1:TCmesur25LnyJkpsVrupv1Cdzo+2f7zX0H6Jkw1Ol6c= -github.com/golangci/plugin-module-register v0.1.1/go.mod h1:TTpqoB6KkwOJMV8u7+NyXMrkwwESJLOkfl9TxR1DGFc= -github.com/golangci/revgrep v0.5.3 h1:3tL7c1XBMtWHHqVpS5ChmiAAoe4PF/d5+ULzV9sLAzs= -github.com/golangci/revgrep v0.5.3/go.mod h1:U4R/s9dlXZsg8uJmaR1GrloUr14D7qDl8gi2iPXJH8k= +github.com/golangci/golangci-lint/v2 v2.7.2 h1:AhBC+YeEueec4AGlIbvPym5C70Thx0JykIqXbdIXWx0= +github.com/golangci/golangci-lint/v2 v2.7.2/go.mod h1:pDijleoBu7e8sejMqyZ3L5n6geqe+cVvOAz2QImqqVc= +github.com/golangci/golines v0.0.0-20250217134842-442fd0091d95 h1:AkK+w9FZBXlU/xUmBtSJN1+tAI4FIvy5WtnUnY8e4p8= +github.com/golangci/golines v0.0.0-20250217134842-442fd0091d95/go.mod h1:k9mmcyWKSTMcPPvQUCfRWWQ9VHJ1U9Dc0R7kaXAgtnQ= +github.com/golangci/misspell v0.7.0 h1:4GOHr/T1lTW0hhR4tgaaV1WS/lJ+ncvYCoFKmqJsj0c= +github.com/golangci/misspell v0.7.0/go.mod h1:WZyyI2P3hxPY2UVHs3cS8YcllAeyfquQcKfdeE9AFVg= +github.com/golangci/plugin-module-register v0.1.2 h1:e5WM6PO6NIAEcij3B053CohVp3HIYbzSuP53UAYgOpg= +github.com/golangci/plugin-module-register v0.1.2/go.mod h1:1+QGTsKBvAIvPvoY/os+G5eoqxWn70HYDm2uvUyGuVw= github.com/golangci/revgrep v0.8.0 h1:EZBctwbVd0aMeRnNUsFogoyayvKHyxlV3CdUA46FX2s= github.com/golangci/revgrep v0.8.0/go.mod h1:U4R/s9dlXZsg8uJmaR1GrloUr14D7qDl8gi2iPXJH8k= -github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed h1:IURFTjxeTfNFP0hTEi1YKjB/ub8zkpaOqFFMApi2EAs= -github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed/go.mod h1:XLXN8bNw4CGRPaqgl3bv/lhz7bsGPh4/xSaMTbo2vkQ= +github.com/golangci/swaggoswag v0.0.0-20250504205917-77f2aca3143e h1:ai0EfmVYE2bRA5htgAG9r7s3tHsfjIhN98WshBTJ9jM= +github.com/golangci/swaggoswag v0.0.0-20250504205917-77f2aca3143e/go.mod h1:Vrn4B5oR9qRwM+f54koyeH3yzphlecwERs0el27Fr/s= +github.com/golangci/unconvert v0.0.0-20250410112200-a129a6e6413e h1:gD6P7NEo7Eqtt0ssnqSJNNndxe69DOQ24A5h7+i3KpM= +github.com/golangci/unconvert v0.0.0-20250410112200-a129a6e6413e/go.mod h1:h+wZwLjUTJnm/P2rwlbJdRPZXOzaT36/FwnPnY2inzc= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -319,10 +275,7 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -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/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -338,27 +291,23 @@ github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hf github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/gordonklaus/ineffassign v0.1.0 h1:y2Gd/9I7MdY1oEIt+n+rowjBNDcLQq3RsH5hwJd0f9s= -github.com/gordonklaus/ineffassign v0.1.0/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= +github.com/gordonklaus/ineffassign v0.2.0 h1:Uths4KnmwxNJNzq87fwQQDDnbNb7De00VOk9Nu0TySs= +github.com/gordonklaus/ineffassign v0.2.0/go.mod h1:TIpymnagPSexySzs7F9FnO1XFTy8IT3a59vmZp5Y9Lw= github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk= github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= -github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= -github.com/gostaticanalysis/comment v1.4.2 h1:hlnx5+S2fY9Zo9ePo4AhgYsYHbM2+eAv8m/s1JiCd6Q= github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= github.com/gostaticanalysis/comment v1.5.0 h1:X82FLl+TswsUMpMh17srGRuKaaXprTaytmEpgnKIDu8= github.com/gostaticanalysis/comment v1.5.0/go.mod h1:V6eb3gpCv9GNVqb6amXzEUX3jXLVK/AdA+IrAMSqvEc= -github.com/gostaticanalysis/forcetypeassert v0.1.0 h1:6eUflI3DiGusXGK6X7cCcIgVCpZ2CiZ1Q7jl6ZxNV70= -github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= github.com/gostaticanalysis/forcetypeassert v0.2.0 h1:uSnWrrUEYDr86OCxWa4/Tp2jeYDlogZiZHzGkWFefTk= github.com/gostaticanalysis/forcetypeassert v0.2.0/go.mod h1:M5iPavzE9pPqWyeiVXSFghQjljW1+l/Uke3PXHS6ILY= -github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3Uqrmrcpk= -github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= +github.com/gostaticanalysis/nilerr v0.1.2 h1:S6nk8a9N8g062nsx63kUkF6AzbHGw7zzyHMcpu52xQU= +github.com/gostaticanalysis/nilerr v0.1.2/go.mod h1:A19UHhoY3y8ahoL7YKz6sdjDtduwTSI4CsymaC2htPA= github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= github.com/hashicorp/go-immutable-radix/v2 v2.1.0 h1:CUW5RYIcysz+D3B+l1mDeXrQ7fUvGGCwJfdASSzbrfo= github.com/hashicorp/go-immutable-radix/v2 v2.1.0/go.mod h1:hgdqLXA4f6NIjRVisM1TJ9aOJVNRqKZj+xDGF6m7PBw= github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= -github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.8.0 h1:KAkNb1HAiZd1ukkxDFGmokVZe1Xy9HG6NUp+bPle2i4= +github.com/hashicorp/go-version v1.8.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= @@ -370,16 +319,12 @@ github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSo github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/jgautheron/goconst v1.7.1 h1:VpdAG7Ca7yvvJk5n8dMwQhfEZJh95kl/Hl9S1OI5Jkk= -github.com/jgautheron/goconst v1.7.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= +github.com/jgautheron/goconst v1.8.2 h1:y0XF7X8CikZ93fSNT6WBTb/NElBu9IjaY7CCYQrCMX4= +github.com/jgautheron/goconst v1.8.2/go.mod h1:A0oxgBCHy55NQn6sYpO7UdnA9p+h7cPtoOZUmvNIako= github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= -github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48= -github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= -github.com/jjti/go-spancheck v0.6.2 h1:iYtoxqPMzHUPp7St+5yA8+cONdyXD3ug6KK15n7Pklk= -github.com/jjti/go-spancheck v0.6.2/go.mod h1:+X7lvIrR5ZdUTkxFYqzJ0abr8Sb5LOo80uOhWNqIrYA= -github.com/jjti/go-spancheck v0.6.4 h1:Tl7gQpYf4/TMU7AT84MN83/6PutY21Nb9fuQjFTpRRc= -github.com/jjti/go-spancheck v0.6.4/go.mod h1:yAEYdKJ2lRkDA8g7X+oKUHXOWVAXSBJRv04OhF+QUjk= +github.com/jjti/go-spancheck v0.6.5 h1:lmi7pKxa37oKYIMScialXUK6hP3iY5F1gu+mLBPgYB8= +github.com/jjti/go-spancheck v0.6.5/go.mod h1:aEogkeatBrbYsyW6y5TgDfihCulDYciL1B7rG2vSsrU= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -389,23 +334,13 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/julz/importas v0.1.0 h1:F78HnrsjY3cR7j0etXy5+TU1Zuy7Xt08X/1aJnH5xXY= -github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= github.com/julz/importas v0.2.0 h1:y+MJN/UdL63QbFJHws9BVC5RpA2iq0kpjrFajTGivjQ= github.com/julz/importas v0.2.0/go.mod h1:pThlt589EnCYtMnmhmRYY/qn9lCf/frPOK+WMx3xiJY= -github.com/karamaru-alpha/copyloopvar v1.1.0 h1:x7gNyKcC2vRBO1H2Mks5u1VxQtYvFiym7fCjIP8RPos= -github.com/karamaru-alpha/copyloopvar v1.1.0/go.mod h1:u7CIfztblY0jZLOQZgH3oYsJzpC2A7S6u/lfgSXHy0k= -github.com/karamaru-alpha/copyloopvar v1.2.1 h1:wmZaZYIjnJ0b5UoKDjUHrikcV0zuPyyxI4SVplLd2CI= -github.com/karamaru-alpha/copyloopvar v1.2.1/go.mod h1:nFmMlFNlClC2BPvNaHMdkirmTJxVCY0lhxBtlfOypMM= -github.com/kisielk/errcheck v1.7.0 h1:+SbscKmWJ5mOK/bO1zS60F5I9WwZDWOfRsC4RwfwRV0= -github.com/kisielk/errcheck v1.7.0/go.mod h1:1kLL+jV4e+CFfueBmI1dSK2ADDyQnlrnrY/FqKluHJQ= -github.com/kisielk/errcheck v1.8.0 h1:ZX/URYa7ilESY19ik/vBmCn6zdGQLxACwjAcWbHlYlg= -github.com/kisielk/errcheck v1.8.0/go.mod h1:1kLL+jV4e+CFfueBmI1dSK2ADDyQnlrnrY/FqKluHJQ= +github.com/karamaru-alpha/copyloopvar v1.2.2 h1:yfNQvP9YaGQR7VaWLYcfZUlRP2eo2vhExWKxD/fP6q0= +github.com/karamaru-alpha/copyloopvar v1.2.2/go.mod h1:oY4rGZqZ879JkJMtX3RRkcXRkmUvH0x35ykgaKgsgJY= github.com/kisielk/errcheck v1.9.0 h1:9xt1zI9EBfcYBvdU1nVrzMzzUPUtPKs9bVSIM3TAb3M= github.com/kisielk/errcheck v1.9.0/go.mod h1:kQxWMMVZgIkDq7U8xtG/n2juOjbLgZtedi0D+/VL/i8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkHAIKE/contextcheck v1.1.5 h1:CdnJh63tcDe53vG+RebdpdXJTc9atMgGqdx8LXxiilg= -github.com/kkHAIKE/contextcheck v1.1.5/go.mod h1:O930cpht4xb1YQpK+1+AgoM3mFsvxr7uyFptcnWTYUA= github.com/kkHAIKE/contextcheck v1.1.6 h1:7HIyRcnyzxL9Lz06NGhiKvenXq7Zw6Q0UQu/ttjfJCE= github.com/kkHAIKE/contextcheck v1.1.6/go.mod h1:3dDbMRNBFaq8HFXWC1JyvDSPm43CmE6IuHam8Wr0rkg= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -414,72 +349,51 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kulti/thelper v0.6.3 h1:ElhKf+AlItIu+xGnI990no4cE2+XaSu1ULymV2Yulxs= -github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= -github.com/kunwardeep/paralleltest v1.0.10 h1:wrodoaKYzS2mdNVnc4/w31YaXFtsc21PCTdvWJ/lDDs= -github.com/kunwardeep/paralleltest v1.0.10/go.mod h1:2C7s65hONVqY7Q5Efj5aLzRCNLjw2h4eMc9EcypGjcY= -github.com/kyoh86/exportloopref v0.1.11 h1:1Z0bcmTypkL3Q4k+IDHMWTcnCliEZcaPiIe0/ymEyhQ= -github.com/kyoh86/exportloopref v0.1.11/go.mod h1:qkV4UF1zGl6EkF1ox8L5t9SwyeBAZ3qLMd6up458uqA= -github.com/lasiar/canonicalheader v1.1.1 h1:wC+dY9ZfiqiPwAexUApFush/csSPXeIi4QqyxXmng8I= -github.com/lasiar/canonicalheader v1.1.1/go.mod h1:cXkb3Dlk6XXy+8MVQnF23CYKWlyA7kfQhSw2CcZtZb0= +github.com/kulti/thelper v0.7.1 h1:fI8QITAoFVLx+y+vSyuLBP+rcVIB8jKooNSCT2EiI98= +github.com/kulti/thelper v0.7.1/go.mod h1:NsMjfQEy6sd+9Kfw8kCP61W1I0nerGSYSFnGaxQkcbs= +github.com/kunwardeep/paralleltest v1.0.15 h1:ZMk4Qt306tHIgKISHWFJAO1IDQJLc6uDyJMLyncOb6w= +github.com/kunwardeep/paralleltest v1.0.15/go.mod h1:di4moFqtfz3ToSKxhNjhOZL+696QtJGCFe132CbBLGk= github.com/lasiar/canonicalheader v1.1.2 h1:vZ5uqwvDbyJCnMhmFYimgMZnJMjwljN5VGY0VKbMXb4= github.com/lasiar/canonicalheader v1.1.2/go.mod h1:qJCeLFS0G/QlLQ506T+Fk/fWMa2VmBUiEI2cuMK4djI= -github.com/ldez/exptostd v0.3.1 h1:90yWWoAKMFHeovTK8uzBms9Ppp8Du/xQ20DRO26Ymrw= -github.com/ldez/exptostd v0.3.1/go.mod h1:iZBRYaUmcW5jwCR3KROEZ1KivQQp6PHXbDPk9hqJKCQ= -github.com/ldez/exptostd v0.4.2 h1:l5pOzHBz8mFOlbcifTxzfyYbgEmoUqjxLFHZkjlbHXs= -github.com/ldez/exptostd v0.4.2/go.mod h1:iZBRYaUmcW5jwCR3KROEZ1KivQQp6PHXbDPk9hqJKCQ= -github.com/ldez/gomoddirectives v0.2.4 h1:j3YjBIjEBbqZ0NKtBNzr8rtMHTOrLPeiwTkfUJZ3alg= -github.com/ldez/gomoddirectives v0.2.4/go.mod h1:oWu9i62VcQDYp9EQ0ONTfqLNh+mDLWWDO+SO0qSQw5g= -github.com/ldez/gomoddirectives v0.6.0 h1:Jyf1ZdTeiIB4dd+2n4qw+g4aI9IJ6JyfOZ8BityWvnA= -github.com/ldez/gomoddirectives v0.6.0/go.mod h1:TuwOGYoPAoENDWQpe8DMqEm5nIfjrxZXmxX/CExWyZ4= -github.com/ldez/gomoddirectives v0.6.1 h1:Z+PxGAY+217f/bSGjNZr/b2KTXcyYLgiWI6geMBN2Qc= -github.com/ldez/gomoddirectives v0.6.1/go.mod h1:cVBiu3AHR9V31em9u2kwfMKD43ayN5/XDgr+cdaFaKs= -github.com/ldez/grignotin v0.7.0 h1:vh0dI32WhHaq6LLPZ38g7WxXuZ1+RzyrJ7iPG9JMa8c= -github.com/ldez/grignotin v0.7.0/go.mod h1:uaVTr0SoZ1KBii33c47O1M8Jp3OP3YDwhZCmzT9GHEk= -github.com/ldez/grignotin v0.9.0 h1:MgOEmjZIVNn6p5wPaGp/0OKWyvq42KnzAt/DAb8O4Ow= -github.com/ldez/grignotin v0.9.0/go.mod h1:uaVTr0SoZ1KBii33c47O1M8Jp3OP3YDwhZCmzT9GHEk= -github.com/ldez/tagliatelle v0.5.0 h1:epgfuYt9v0CG3fms0pEgIMNPuFf/LpPIfjk4kyqSioo= -github.com/ldez/tagliatelle v0.5.0/go.mod h1:rj1HmWiL1MiKQuOONhd09iySTEkUuE/8+5jtPYz9xa4= -github.com/ldez/tagliatelle v0.7.1 h1:bTgKjjc2sQcsgPiT902+aadvMjCeMHrY7ly2XKFORIk= -github.com/ldez/tagliatelle v0.7.1/go.mod h1:3zjxUpsNB2aEZScWiZTHrAXOl1x25t3cRmzfK1mlo2I= -github.com/ldez/usetesting v0.4.2 h1:J2WwbrFGk3wx4cZwSMiCQQ00kjGR0+tuuyW0Lqm4lwA= -github.com/ldez/usetesting v0.4.2/go.mod h1:eEs46T3PpQ+9RgN9VjpY6qWdiw2/QmfiDeWmdZdrjIQ= +github.com/ldez/exptostd v0.4.5 h1:kv2ZGUVI6VwRfp/+bcQ6Nbx0ghFWcGIKInkG/oFn1aQ= +github.com/ldez/exptostd v0.4.5/go.mod h1:QRjHRMXJrCTIm9WxVNH6VW7oN7KrGSht69bIRwvdFsM= +github.com/ldez/gomoddirectives v0.7.1 h1:FaULkvUIG36hj6chpwa+FdCNGZBsD7/fO+p7CCsM6pE= +github.com/ldez/gomoddirectives v0.7.1/go.mod h1:auDNtakWJR1rC+YX7ar+HmveqXATBAyEK1KYpsIRW/8= +github.com/ldez/grignotin v0.10.1 h1:keYi9rYsgbvqAZGI1liek5c+jv9UUjbvdj3Tbn5fn4o= +github.com/ldez/grignotin v0.10.1/go.mod h1:UlDbXFCARrXbWGNGP3S5vsysNXAPhnSuBufpTEbwOas= +github.com/ldez/tagliatelle v0.7.2 h1:KuOlL70/fu9paxuxbeqlicJnCspCRjH0x8FW+NfgYUk= +github.com/ldez/tagliatelle v0.7.2/go.mod h1:PtGgm163ZplJfZMZ2sf5nhUT170rSuPgBimoyYtdaSI= +github.com/ldez/usetesting v0.5.0 h1:3/QtzZObBKLy1F4F8jLuKJiKBjjVFi1IavpoWbmqLwc= +github.com/ldez/usetesting v0.5.0/go.mod h1:Spnb4Qppf8JTuRgblLrEWb7IE6rDmUpGvxY3iRrzvDQ= github.com/leonklingele/grouper v1.1.2 h1:o1ARBDLOmmasUaNDesWqWCIFH3u7hoFlM84YrjT3mIY= github.com/leonklingele/grouper v1.1.2/go.mod h1:6D0M/HVkhs2yRKRFZUoGjeDy7EZTfFBE9gl4kjmIGkA= -github.com/lufeee/execinquery v1.2.1 h1:hf0Ems4SHcUGBxpGN7Jz78z1ppVkP/837ZlETPCEtOM= -github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= -github.com/macabu/inamedparam v0.1.3 h1:2tk/phHkMlEL/1GNe/Yf6kkR/hkcUdAEY3L0hjYV1Mk= -github.com/macabu/inamedparam v0.1.3/go.mod h1:93FLICAIk/quk7eaPPQvbzihUdn/QkGDwIZEoLtpH6I= +github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= +github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/macabu/inamedparam v0.2.0 h1:VyPYpOc10nkhI2qeNUdh3Zket4fcZjEWe35poddBCpE= +github.com/macabu/inamedparam v0.2.0/go.mod h1:+Pee9/YfGe5LJ62pYXqB89lJ+0k5bsR8Wgz/C0Zlq3U= github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI= -github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE= -github.com/maratori/testpackage v1.1.1 h1:S58XVV5AD7HADMmD0fNnziNHqKvSdDuEKdPD1rNTU04= -github.com/maratori/testpackage v1.1.1/go.mod h1:s4gRK/ym6AMrqpOa/kEbQTV4Q4jb7WeLZzVhVVVOQMc= -github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26 h1:gWg6ZQ4JhDfJPqlo2srm/LN17lpybq15AryXIRcWYLE= -github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= +github.com/manuelarte/embeddedstructfieldcheck v0.4.0 h1:3mAIyaGRtjK6EO9E73JlXLtiy7ha80b2ZVGyacxgfww= +github.com/manuelarte/embeddedstructfieldcheck v0.4.0/go.mod h1:z8dFSyXqp+fC6NLDSljRJeNQJJDWnY7RoWFzV3PC6UM= +github.com/manuelarte/funcorder v0.5.0 h1:llMuHXXbg7tD0i/LNw8vGnkDTHFpTnWqKPI85Rknc+8= +github.com/manuelarte/funcorder v0.5.0/go.mod h1:Yt3CiUQthSBMBxjShjdXMexmzpP8YGvGLjrxJNkO2hA= +github.com/maratori/testableexamples v1.0.1 h1:HfOQXs+XgfeRBJ+Wz0XfH+FHnoY9TVqL6Fcevpzy4q8= +github.com/maratori/testableexamples v1.0.1/go.mod h1:XE2F/nQs7B9N08JgyRmdGjYVGqxWwClLPCGSQhXQSrQ= +github.com/maratori/testpackage v1.1.2 h1:ffDSh+AgqluCLMXhM19f/cpvQAKygKAJXFl9aUjmbqs= +github.com/maratori/testpackage v1.1.2/go.mod h1:8F24GdVDFW5Ew43Et02jamrVMNXLUNaOynhDssITGfc= github.com/matoous/godox v1.1.0 h1:W5mqwbyWrwZv6OQ5Z1a/DHGMOvXYCBP3+Ht7KMoJhq4= github.com/matoous/godox v1.1.0/go.mod h1:jgE/3fUXiTurkdHOLT5WEkThTSuE7yxHv5iWPa80afs= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mgechev/revive v1.3.9 h1:18Y3R4a2USSBF+QZKFQwVkBROUda7uoBlkEuBD+YD1A= -github.com/mgechev/revive v1.3.9/go.mod h1:+uxEIr5UH0TjXWHTno3xh4u7eg6jDpXKzQccA9UGhHU= -github.com/mgechev/revive v1.5.1 h1:hE+QPeq0/wIzJwOphdVyUJ82njdd8Khp4fUIHGZHW3M= -github.com/mgechev/revive v1.5.1/go.mod h1:lC9AhkJIBs5zwx8wkudyHrU+IJkrEKmpCmGMnIJPk4o= -github.com/mgechev/revive v1.7.0 h1:JyeQ4yO5K8aZhIKf5rec56u0376h8AlKNQEmjfkjKlY= -github.com/mgechev/revive v1.7.0/go.mod h1:qZnwcNhoguE58dfi96IJeSTPeZQejNeoMQLUZGi4SW4= +github.com/mgechev/revive v1.13.0 h1:yFbEVliCVKRXY8UgwEO7EOYNopvjb1BFbmYqm9hZjBM= +github.com/mgechev/revive v1.13.0/go.mod h1:efJfeBVCX2JUumNQ7dtOLDja+QKj9mYGgEZA7rt5u+0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -491,6 +405,8 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/moricho/tparallel v0.3.2 h1:odr8aZVFA3NZrNybggMkYO3rgPRcqjeQUlBBFVxKHTI= github.com/moricho/tparallel v0.3.2/go.mod h1:OQ+K3b4Ln3l2TZveGCywybl68glfLEwFGqvnjok8b+U= +github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc= +github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/nakabonne/nestif v0.3.1 h1:wm28nZjhQY5HyYPx+weN3Q65k6ilSBxDb8v5S81B81U= @@ -499,14 +415,8 @@ github.com/nishanths/exhaustive v0.12.0 h1:vIY9sALmw6T/yxiASewa4TQcFsVYZQQRUQJhK github.com/nishanths/exhaustive v0.12.0/go.mod h1:mEZ95wPIZW+x8kC4TgC+9YCUgiST7ecevsVDTgc2obs= github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk= github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= -github.com/nunnatsa/ginkgolinter v0.16.2 h1:8iLqHIZvN4fTLDC0Ke9tbSZVcyVHoBs0HIbnVSxfHJk= -github.com/nunnatsa/ginkgolinter v0.16.2/go.mod h1:4tWRinDN1FeJgU+iJANW/kz7xKN5nYRAOfJDQUS9dOQ= -github.com/nunnatsa/ginkgolinter v0.18.4 h1:zmX4KUR+6fk/vhUFt8DOP6KwznekhkmVSzzVJve2vyM= -github.com/nunnatsa/ginkgolinter v0.18.4/go.mod h1:AMEane4QQ6JwFz5GgjI5xLUM9S/CylO+UyM97fN2iBI= -github.com/nunnatsa/ginkgolinter v0.19.1 h1:mjwbOlDQxZi9Cal+KfbEJTCz327OLNfwNvoZ70NJ+c4= -github.com/nunnatsa/ginkgolinter v0.19.1/go.mod h1:jkQ3naZDmxaZMXPWaS9rblH+i+GWXQCaS/JFIWcOH2s= -github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/nunnatsa/ginkgolinter v0.21.2 h1:khzWfm2/Br8ZemX8QM1pl72LwM+rMeW6VUbQ4rzh0Po= +github.com/nunnatsa/ginkgolinter v0.21.2/go.mod h1:GItSI5fw7mCGLPmkvGYrr1kEetZe7B593jcyOpyabsY= github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= @@ -514,19 +424,15 @@ github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT9 github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= -github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= +github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= +github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 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/polyfloyd/go-errorlint v1.6.0 h1:tftWV9DE7txiFzPpztTAwyoRLKNj9gpVm2cg8/OwcYY= -github.com/polyfloyd/go-errorlint v1.6.0/go.mod h1:HR7u8wuP1kb1NeN1zqTd1ZMlqUKPPHF+Id4vIPvDqVw= -github.com/polyfloyd/go-errorlint v1.7.0 h1:Zp6lzCK4hpBDj8y8a237YK4EPrMXQWvOe3nGoH4pFrU= -github.com/polyfloyd/go-errorlint v1.7.0/go.mod h1:dGWKu85mGHnegQ2SWpEybFityCg3j7ZbwsVUxAOk9gY= -github.com/polyfloyd/go-errorlint v1.7.1 h1:RyLVXIbosq1gBdk/pChWA8zWYLsq9UEw7a1L5TVMCnA= -github.com/polyfloyd/go-errorlint v1.7.1/go.mod h1:aXjNb1x2TNhoLsk26iv1yl7a+zTnXPhwEMtEXukiLR8= +github.com/polyfloyd/go-errorlint v1.8.0 h1:DL4RestQqRLr8U4LygLw8g2DX6RN1eBJOpa2mzsrl1Q= +github.com/polyfloyd/go-errorlint v1.8.0/go.mod h1:G2W0Q5roxbLCt0ZQbdoxQxXktTjwNyDbEaj3n7jvl4s= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= @@ -549,10 +455,10 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/quasilyte/go-ruleguard v0.4.3-0.20240823090925-0fe6f58b47b1 h1:+Wl/0aFp0hpuHM3H//KMft64WQ1yX9LdJY64Qm/gFCo= -github.com/quasilyte/go-ruleguard v0.4.3-0.20240823090925-0fe6f58b47b1/go.mod h1:GJLgqsLeo4qgavUoL8JeGFNS7qcisx3awV/w9eWTmNI= -github.com/quasilyte/go-ruleguard/dsl v0.3.22 h1:wd8zkOhSNr+I+8Qeciml08ivDt1pSXe60+5DqOpCjPE= -github.com/quasilyte/go-ruleguard/dsl v0.3.22/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard v0.4.5 h1:AGY0tiOT5hJX9BTdx/xBdoCubQUAE2grkqY2lSwvZcA= +github.com/quasilyte/go-ruleguard v0.4.5/go.mod h1:Vl05zJ538vcEEwu16V/Hdu7IYZWyKSwIy4c88Ro1kRE= +github.com/quasilyte/go-ruleguard/dsl v0.3.23 h1:lxjt5B6ZCiBeeNO8/oQsegE6fLeCzuMRoVWSkXC4uvY= +github.com/quasilyte/go-ruleguard/dsl v0.3.23/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= github.com/quasilyte/gogrep v0.5.0 h1:eTKODPXbI8ffJMN+W2aE0+oL0z/nh8/5eNdiO34SOAo= github.com/quasilyte/gogrep v0.5.0/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 h1:TCg2WBOl980XxGFEZSS6KlBGIV0diGdySzxATTWoqaU= @@ -565,37 +471,23 @@ github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= -github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryancurrah/gomodguard v1.3.5 h1:cShyguSwUEeC0jS7ylOiG/idnd1TpJ1LfHGpV3oJmPU= -github.com/ryancurrah/gomodguard v1.3.5/go.mod h1:MXlEPQRxgfPQa62O8wzK3Ozbkv9Rkqr+wKjSxTdsNJE= +github.com/ryancurrah/gomodguard v1.4.1 h1:eWC8eUMNZ/wM/PWuZBv7JxxqT5fiIKSIyTvjb7Elr+g= +github.com/ryancurrah/gomodguard v1.4.1/go.mod h1:qnMJwV1hX9m+YJseXEBhd2s90+1Xn6x9dLz11ualI1I= github.com/ryanrolds/sqlclosecheck v0.5.1 h1:dibWW826u0P8jNLsLN+En7+RqWWTYrjCB9fJfSfdyCU= github.com/ryanrolds/sqlclosecheck v0.5.1/go.mod h1:2g3dUjoS6AL4huFdv6wn55WpLIDjY7ZgUR4J8HOO/XQ= -github.com/sanposhiho/wastedassign/v2 v2.0.7 h1:J+6nrY4VW+gC9xFzUc+XjPD3g3wF3je/NsJFwFK7Uxc= -github.com/sanposhiho/wastedassign/v2 v2.0.7/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= github.com/sanposhiho/wastedassign/v2 v2.1.0 h1:crurBF7fJKIORrV85u9UUpePDYGWnwvv3+A96WvwXT0= github.com/sanposhiho/wastedassign/v2 v2.1.0/go.mod h1:+oSmSC+9bQ+VUAxA66nBb0Z7N8CK7mscKTDYC6aIek4= -github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4= -github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY= -github.com/santhosh-tekuri/jsonschema/v6 v6.0.1 h1:PKK9DyHxif4LZo+uQSgXNqs0jj5+xZwwfKHgph2lxBw= -github.com/santhosh-tekuri/jsonschema/v6 v6.0.1/go.mod h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU= +github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 h1:KRzFb2m7YtdldCEkzs6KqmJw4nqEVZGK7IN2kJkjTuQ= +github.com/santhosh-tekuri/jsonschema/v6 v6.0.2/go.mod h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU= github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw= github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ= -github.com/sashamelentyev/usestdlibvars v1.27.0 h1:t/3jZpSXtRPRf2xr0m63i32ZrusyurIGT9E5wAvXQnI= -github.com/sashamelentyev/usestdlibvars v1.27.0/go.mod h1:9nl0jgOfHKWNFS43Ojw0i7aRoS4j6EBye3YBhmAIRF8= -github.com/sashamelentyev/usestdlibvars v1.28.0 h1:jZnudE2zKCtYlGzLVreNp5pmCdOxXUzwsMDBkR21cyQ= -github.com/sashamelentyev/usestdlibvars v1.28.0/go.mod h1:9nl0jgOfHKWNFS43Ojw0i7aRoS4j6EBye3YBhmAIRF8= -github.com/securego/gosec/v2 v2.21.2 h1:deZp5zmYf3TWwU7A7cR2+SolbTpZ3HQiwFqnzQyEl3M= -github.com/securego/gosec/v2 v2.21.2/go.mod h1:au33kg78rNseF5PwPnTWhuYBFf534bvJRvOrgZ/bFzU= -github.com/securego/gosec/v2 v2.21.4 h1:Le8MSj0PDmOnHJgUATjD96PaXRvCpKC+DGJvwyy0Mlk= -github.com/securego/gosec/v2 v2.21.4/go.mod h1:Jtb/MwRQfRxCXyCm1rfM1BEiiiTfUOdyzzAhlr6lUTA= -github.com/securego/gosec/v2 v2.22.2 h1:IXbuI7cJninj0nRpZSLCUlotsj8jGusohfONMrHoF6g= -github.com/securego/gosec/v2 v2.22.2/go.mod h1:UEBGA+dSKb+VqM6TdehR7lnQtIIMorYJ4/9CW1KVQBE= -github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU= -github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= +github.com/sashamelentyev/usestdlibvars v1.29.0 h1:8J0MoRrw4/NAXtjQqTHrbW9NN+3iMf7Knkq057v4XOQ= +github.com/sashamelentyev/usestdlibvars v1.29.0/go.mod h1:8PpnjHMk5VdeWlVb4wCdrB8PNbLqZ3wBZTZWkrpZZL8= +github.com/securego/gosec/v2 v2.22.11-0.20251204091113-daccba6b93d7 h1:rZg6IGn0ySYZwCX8LHwZoYm03JhG/cVAJJ3O+u3Vclo= +github.com/securego/gosec/v2 v2.22.11-0.20251204091113-daccba6b93d7/go.mod h1:9sr22NZO5Kfh7unW/xZxkGYTmj2484/fCiE54gw7UTY= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -605,106 +497,64 @@ github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sivchari/containedctx v1.0.3 h1:x+etemjbsh2fB5ewm5FeLNi5bUjK0V8n0RB+Wwfd0XE= github.com/sivchari/containedctx v1.0.3/go.mod h1:c1RDvCbnJLtH4lLcYD/GqwiBSSf4F5Qk0xld2rBqzJ4= -github.com/sivchari/tenv v1.10.0 h1:g/hzMA+dBCKqGXgW8AV/1xIWhAvDrx0zFKNR48NFMg0= -github.com/sivchari/tenv v1.10.0/go.mod h1:tdY24masnVoZFxYrHv/nD6Tc8FbkEtAQEEziXpyMgqY= -github.com/sivchari/tenv v1.12.1 h1:+E0QzjktdnExv/wwsnnyk4oqZBUfuh89YMQT1cyuvSY= -github.com/sivchari/tenv v1.12.1/go.mod h1:1LjSOUCc25snIr5n3DtGGrENhX3LuWefcplwVGC24mw= -github.com/sonatard/noctx v0.0.2 h1:L7Dz4De2zDQhW8S0t+KUjY0MAQJd6SgVwhzNIc4ok00= -github.com/sonatard/noctx v0.0.2/go.mod h1:kzFz+CzWSjQ2OzIm46uJZoXuBpa2+0y3T36U18dWqIo= -github.com/sonatard/noctx v0.1.0 h1:JjqOc2WN16ISWAjAk8M5ej0RfExEXtkEyExl2hLW+OM= -github.com/sonatard/noctx v0.1.0/go.mod h1:0RvBxqY8D4j9cTTTWE8ylt2vqj2EPI8fHmrxHdsaZ2c= +github.com/sonatard/noctx v0.4.0 h1:7MC/5Gg4SQ4lhLYR6mvOP6mQVSxCrdyiExo7atBs27o= +github.com/sonatard/noctx v0.4.0/go.mod h1:64XdbzFb18XL4LporKXp8poqZtPKbCrqQ402CV+kJas= github.com/sourcegraph/go-diff v0.7.0 h1:9uLlrd5T46OXs5qpp8L/MTltk0zikUGi0sNNyCpA8G0= github.com/sourcegraph/go-diff v0.7.0/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= -github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= -github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= -github.com/spf13/afero v1.12.0 h1:UcOPyRBYczmFn6yvphxkn9ZEOY65cpwGKb5mL36mrqs= -github.com/spf13/afero v1.12.0/go.mod h1:ZTlWwG4/ahT8W7T0WQ5uYmjI9duaLQGy3Q2OAl4sk/4= +github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= +github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= -github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= -github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= -github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= -github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= +github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= +github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= -github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= +github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ= github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0= github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= -github.com/stbenjam/no-sprintf-host-port v0.1.1 h1:tYugd/yrm1O0dV+ThCbaKZh195Dfm07ysF0U6JQXczc= -github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= -github.com/stbenjam/no-sprintf-host-port v0.2.0 h1:i8pxvGrt1+4G0czLr/WnmyH7zbZ8Bg8etvARQ1rpyl4= -github.com/stbenjam/no-sprintf-host-port v0.2.0/go.mod h1:eL0bQ9PasS0hsyTyfTjjG+E80QIyPnBVQbYZyv20Jfk= +github.com/stbenjam/no-sprintf-host-port v0.3.1 h1:AyX7+dxI4IdLBPtDbsGAyqiTSLpCP9hWRrXQDU4Cm/g= +github.com/stbenjam/no-sprintf-host-port v0.3.1/go.mod h1:ODbZesTCHMVKthBHskvUUexdcNHAQRXk9NpSsL8p/HQ= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= 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.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -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.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -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= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs= github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/tdakkota/asciicheck v0.2.0 h1:o8jvnUANo0qXtnslk2d3nMKTFNlOnJjRrNcj0j9qkHM= -github.com/tdakkota/asciicheck v0.2.0/go.mod h1:Qb7Y9EgjCLJGup51gDHFzbI08/gbGhL/UVhYIPWG2rg= -github.com/tdakkota/asciicheck v0.3.0 h1:LqDGgZdholxZMaJgpM6b0U9CFIjDCbFdUF00bDnBKOQ= -github.com/tdakkota/asciicheck v0.3.0/go.mod h1:KoJKXuX/Z/lt6XzLo8WMBfQGzak0SrAKZlvRr4tg8Ac= -github.com/tdakkota/asciicheck v0.4.1 h1:bm0tbcmi0jezRA2b5kg4ozmMuGAFotKI3RZfrhfovg8= -github.com/tdakkota/asciicheck v0.4.1/go.mod h1:0k7M3rCfRXb0Z6bwgvkEIMleKH3kXNz9UqJ9Xuqopr8= github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= -github.com/tetafro/godot v1.4.17 h1:pGzu+Ye7ZUEFx7LHU0dAKmCOXWsPjl7qA6iMGndsjPs= -github.com/tetafro/godot v1.4.17/go.mod h1:2oVxTBSftRTh4+MVfUaUXR6bn2GDXCaMcOG4Dk3rfio= -github.com/tetafro/godot v1.4.20 h1:z/p8Ek55UdNvzt4TFn2zx2KscpW4rWqcnUrdmvWJj7E= -github.com/tetafro/godot v1.4.20/go.mod h1:2oVxTBSftRTh4+MVfUaUXR6bn2GDXCaMcOG4Dk3rfio= -github.com/tetafro/godot v1.5.0 h1:aNwfVI4I3+gdxjMgYPus9eHmoBeJIbnajOyqZYStzuw= -github.com/tetafro/godot v1.5.0/go.mod h1:2oVxTBSftRTh4+MVfUaUXR6bn2GDXCaMcOG4Dk3rfio= -github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966 h1:quvGphlmUVU+nhpFa4gg4yJyTRJ13reZMDHrKwYw53M= -github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966/go.mod h1:27bSVNWSBOHm+qRp1T9qzaIpsWEP6TbUnei/43HK+PQ= -github.com/timakin/bodyclose v0.0.0-20241017074812-ed6a65f985e3 h1:y4mJRFlM6fUyPhoXuFg/Yu02fg/nIPFMOY8tOqppoFg= -github.com/timakin/bodyclose v0.0.0-20241017074812-ed6a65f985e3/go.mod h1:mkjARE7Yr8qU23YcGMSALbIxTQ9r9QBVahQOBRfU460= -github.com/timonwong/loggercheck v0.9.4 h1:HKKhqrjcVj8sxL7K77beXh0adEm6DLjV/QOGeMXEVi4= -github.com/timonwong/loggercheck v0.9.4/go.mod h1:caz4zlPcgvpEkXgVnAJGowHAMW2NwHaNlpS8xDbVhTg= -github.com/timonwong/loggercheck v0.10.1 h1:uVZYClxQFpw55eh+PIoqM7uAOHMrhVcDoWDery9R8Lg= -github.com/timonwong/loggercheck v0.10.1/go.mod h1:HEAWU8djynujaAVX7QI65Myb8qgfcZ1uKbdpg3ZzKl8= -github.com/tomarrell/wrapcheck/v2 v2.9.0 h1:801U2YCAjLhdN8zhZ/7tdjB3EnAoRlJHt/s+9hijLQ4= -github.com/tomarrell/wrapcheck/v2 v2.9.0/go.mod h1:g9vNIyhb5/9TQgumxQyOEqDHsmGYcGsVMOx/xGkqdMo= -github.com/tomarrell/wrapcheck/v2 v2.10.0 h1:SzRCryzy4IrAH7bVGG4cK40tNUhmVmMDuJujy4XwYDg= -github.com/tomarrell/wrapcheck/v2 v2.10.0/go.mod h1:g9vNIyhb5/9TQgumxQyOEqDHsmGYcGsVMOx/xGkqdMo= +github.com/tetafro/godot v1.5.4 h1:u1ww+gqpRLiIA16yF2PV1CV1n/X3zhyezbNXC3E14Sg= +github.com/tetafro/godot v1.5.4/go.mod h1:eOkMrVQurDui411nBY2FA05EYH01r14LuWY/NrVDVcU= +github.com/timakin/bodyclose v0.0.0-20241222091800-1db5c5ca4d67 h1:9LPGD+jzxMlnk5r6+hJnar67cgpDIz/iyD+rfl5r2Vk= +github.com/timakin/bodyclose v0.0.0-20241222091800-1db5c5ca4d67/go.mod h1:mkjARE7Yr8qU23YcGMSALbIxTQ9r9QBVahQOBRfU460= +github.com/timonwong/loggercheck v0.11.0 h1:jdaMpYBl+Uq9mWPXv1r8jc5fC3gyXx4/WGwTnnNKn4M= +github.com/timonwong/loggercheck v0.11.0/go.mod h1:HEAWU8djynujaAVX7QI65Myb8qgfcZ1uKbdpg3ZzKl8= +github.com/tomarrell/wrapcheck/v2 v2.12.0 h1:H/qQ1aNWz/eeIhxKAFvkfIA+N7YDvq6TWVFL27Of9is= +github.com/tomarrell/wrapcheck/v2 v2.12.0/go.mod h1:AQhQuZd0p7b6rfW+vUwHm5OMCGgp63moQ9Qr/0BpIWo= github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= -github.com/ultraware/funlen v0.1.0 h1:BuqclbkY6pO+cvxoq7OsktIXZpgBSkYTQtmwhAK81vI= -github.com/ultraware/funlen v0.1.0/go.mod h1:XJqmOQja6DpxarLj6Jj1U7JuoS8PvL4nEqDaQhy22p4= github.com/ultraware/funlen v0.2.0 h1:gCHmCn+d2/1SemTdYMiKLAHFYxTYz7z9VIDRaTGyLkI= github.com/ultraware/funlen v0.2.0/go.mod h1:ZE0q4TsJ8T1SQcjmkhN/w+MceuatI6pBFSxxyteHIJA= -github.com/ultraware/whitespace v0.1.1 h1:bTPOGejYFulW3PkcrqkeQwOd6NKOOXvmGD9bo/Gk8VQ= -github.com/ultraware/whitespace v0.1.1/go.mod h1:XcP1RLD81eV4BW8UhQlpaR+SDc2givTvyI8a586WjW8= github.com/ultraware/whitespace v0.2.0 h1:TYowo2m9Nfj1baEQBjuHzvMRbp19i+RCcRYrSWoFa+g= github.com/ultraware/whitespace v0.2.0/go.mod h1:XcP1RLD81eV4BW8UhQlpaR+SDc2givTvyI8a586WjW8= -github.com/uudashr/gocognit v1.1.3 h1:l+a111VcDbKfynh+airAy/DJQKaXh2m9vkoysMPSZyM= -github.com/uudashr/gocognit v1.1.3/go.mod h1:aKH8/e8xbTRBwjbCkwZ8qt4l2EpKXl31KMHgSS+lZ2U= github.com/uudashr/gocognit v1.2.0 h1:3BU9aMr1xbhPlvJLSydKwdLN3tEUUrzPSSM8S4hDYRA= github.com/uudashr/gocognit v1.2.0/go.mod h1:k/DdKPI6XBZO1q7HgoV2juESI2/Ofj9AcHPZhBBdrTU= -github.com/uudashr/iface v1.3.0 h1:zwPch0fs9tdh9BmL5kcgSpvnObV+yHjO4JjVBl8IA10= -github.com/uudashr/iface v1.3.0/go.mod h1:4QvspiRd3JLPAEXBQ9AiZpLbJlrWWgRChOKDJEuQTdg= -github.com/uudashr/iface v1.3.1 h1:bA51vmVx1UIhiIsQFSNq6GZ6VPTk3WNMZgRiCe9R29U= -github.com/uudashr/iface v1.3.1/go.mod h1:4QvspiRd3JLPAEXBQ9AiZpLbJlrWWgRChOKDJEuQTdg= -github.com/xen0n/gosmopolitan v1.2.2 h1:/p2KTnMzwRexIW8GlKawsTWOxn7UHA+jCMF/V8HHtvU= -github.com/xen0n/gosmopolitan v1.2.2/go.mod h1:7XX7Mj61uLYrj0qmeN0zi7XDon9JRAEhYQqAPLVNTeg= +github.com/uudashr/iface v1.4.1 h1:J16Xl1wyNX9ofhpHmQ9h9gk5rnv2A6lX/2+APLTo0zU= +github.com/uudashr/iface v1.4.1/go.mod h1:pbeBPlbuU2qkNDn0mmfrxP2X+wjPMIQAy+r1MBXSXtg= +github.com/xen0n/gosmopolitan v1.3.0 h1:zAZI1zefvo7gcpbCOrPSHJZJYA9ZgLfJqtKzZ5pHqQM= +github.com/xen0n/gosmopolitan v1.3.0/go.mod h1:rckfr5T6o4lBtM1ga7mLGKZmLxswUoH1zxHgNXOsEt4= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM= github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= github.com/yeya24/promlinter v0.3.0 h1:JVDbMp08lVCP7Y6NP3qHroGAO6z2yGKQtS5JsjqtoFs= @@ -720,29 +570,27 @@ github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= gitlab.com/bosi/decorder v0.4.2 h1:qbQaV3zgwnBZ4zPMhGLW4KZe7A7NwxEhJx39R3shffo= gitlab.com/bosi/decorder v0.4.2/go.mod h1:muuhHoaJkA9QLcYHq4Mj8FJUwDZ+EirSHRiaTcTf6T8= -go-simpler.org/musttag v0.12.2 h1:J7lRc2ysXOq7eM8rwaTYnNrHd5JwjppzB6mScysB2Cs= -go-simpler.org/musttag v0.12.2/go.mod h1:uN1DVIasMTQKk6XSik7yrJoEysGtR2GRqvWnI9S7TYM= -go-simpler.org/musttag v0.13.0 h1:Q/YAW0AHvaoaIbsPj3bvEI5/QFP7w696IMUpnKXQfCE= -go-simpler.org/musttag v0.13.0/go.mod h1:FTzIGeK6OkKlUDVpj0iQUXZLUO1Js9+mvykDQy9C5yM= -go-simpler.org/sloglint v0.7.2 h1:Wc9Em/Zeuu7JYpl+oKoYOsQSy2X560aVueCW/m6IijY= -go-simpler.org/sloglint v0.7.2/go.mod h1:US+9C80ppl7VsThQclkM7BkCHQAzuz8kHLsW3ppuluo= -go-simpler.org/sloglint v0.9.0 h1:/40NQtjRx9txvsB/RN022KsUJU+zaaSb/9q9BSefSrE= -go-simpler.org/sloglint v0.9.0/go.mod h1:G/OrAF6uxj48sHahCzrbarVMptL2kjWTaUeC8+fOGww= +go-simpler.org/musttag v0.14.0 h1:XGySZATqQYSEV3/YTy+iX+aofbZZllJaqwFWs+RTtSo= +go-simpler.org/musttag v0.14.0/go.mod h1:uP8EymctQjJ4Z1kUnjX0u2l60WfUdQxCwSNKzE1JEOE= +go-simpler.org/sloglint v0.11.1 h1:xRbPepLT/MHPTCA6TS/wNfZrDzkGvCCqUv4Bdwc3H7s= +go-simpler.org/sloglint v0.11.1/go.mod h1:2PowwiCOK8mjiF+0KGifVOT8ZsCNiFzvfyJeJOIt8MQ= +go.augendre.info/arangolint v0.3.1 h1:n2E6p8f+zfXSFLa2e2WqFPp4bfvcuRdd50y6cT65pSo= +go.augendre.info/arangolint v0.3.1/go.mod h1:6ZKzEzIZuBQwoSvlKT+qpUfIbBfFCE5gbAoTg0/117g= +go.augendre.info/fatcontext v0.9.0 h1:Gt5jGD4Zcj8CDMVzjOJITlSb9cEch54hjRRlN3qDojE= +go.augendre.info/fatcontext v0.9.0/go.mod h1:L94brOAT1OOUNue6ph/2HnwxoNlds9aXDF2FcUntbNw= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/automaxprocs v1.5.3 h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8= -go.uber.org/automaxprocs v1.5.3/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0= go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= -go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= +go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +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-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -750,7 +598,6 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U 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.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -763,18 +610,11 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e h1:I88y4caeGeuDQxgdoFPUq097j7kNfw6uvuiNxUBfcBk= -golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk= -golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY= golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f h1:phY1HzDcf18Aq9A8KkmRtY9WvOFIxN8wgfvy6Zm1DV8= -golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/exp/typeparams v0.0.0-20241108190413-2d47ceb2692f h1:WTyX8eCCyfdqiPYkRGm0MqElSfYFH3yR1+rl/mct9sA= -golang.org/x/exp/typeparams v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/exp/typeparams v0.0.0-20250210185358-939b2ce775ac h1:TSSpLIG4v+p0rPv1pNOQtl1I8knsO4S9trOxNMOLVP4= -golang.org/x/exp/typeparams v0.0.0-20250210185358-939b2ce775ac/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp/typeparams v0.0.0-20251023183803-a4bb9ffd2546 h1:HDjDiATsGqvuqvkDvgJjD1IgPrVekcSXVVE21JwvzGE= +golang.org/x/exp/typeparams v0.0.0-20251023183803-a4bb9ffd2546/go.mod h1:4Mzdyp/6jzw9auFDJ3OMF5qksa7UvPnzKqTVGcb04ms= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -797,21 +637,13 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= -golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= -golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= -golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= -golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= -golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= -golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= +golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk= +golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -846,11 +678,7 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= @@ -875,12 +703,8 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= -golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= +golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -914,7 +738,6 @@ golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/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-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -928,28 +751,16 @@ golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= -golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= -golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= +golang.org/x/sys v0.38.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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= @@ -960,18 +771,11 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= -golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= -golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= -golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= +golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= +golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -981,7 +785,6 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -989,10 +792,8 @@ golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1010,7 +811,6 @@ golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -1020,30 +820,17 @@ golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= -golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= -golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= -golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= -golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= -golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= -golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= -golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= -golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= +golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ= +golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ= 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= @@ -1123,10 +910,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -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 v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= -google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc= +google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1151,14 +936,12 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.5.1 h1:4bH5o3b5ZULQ4UrBmP+63W9r7qIkqJClEA9ko5YKx+I= -honnef.co/go/tools v0.5.1/go.mod h1:e9irvo83WDG9/irijV44wr3tbhcFeRnfpVlRqVwpzMs= honnef.co/go/tools v0.6.1 h1:R094WgE8K4JirYjBaOpz/AvTyUu/3wbmAoskKN/pxTI= honnef.co/go/tools v0.6.1/go.mod h1:3puzxxljPCe8RGJX7BIy1plGbxEOZni5mR2aXe3/uk4= -mvdan.cc/gofumpt v0.7.0 h1:bg91ttqXmi9y2xawvkuMXyvAA/1ZGJqYAEGjXuP0JXU= -mvdan.cc/gofumpt v0.7.0/go.mod h1:txVFJy/Sc/mvaycET54pV8SW8gWxTlUuGHVEcncmNUo= -mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f h1:lMpcwN6GxNbWtbpI1+xzFLSW8XzX0u72NttUGVFjO3U= -mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f/go.mod h1:RSLa7mKKCNeTTMHBw5Hsy2rfJmd6O2ivt9Dw9ZqCQpQ= +mvdan.cc/gofumpt v0.9.2 h1:zsEMWL8SVKGHNztrx6uZrXdp7AX8r421Vvp23sz7ik4= +mvdan.cc/gofumpt v0.9.2/go.mod h1:iB7Hn+ai8lPvofHd9ZFGVg2GOr8sBUw1QUWjNbmIL/s= +mvdan.cc/unparam v0.0.0-20251027182757-5beb8c8f8f15 h1:ssMzja7PDPJV8FStj7hq9IKiuiKhgz9ErWw+m68e7DI= +mvdan.cc/unparam v0.0.0-20251027182757-5beb8c8f8f15/go.mod h1:4M5MMXl2kW6fivUT6yRGpLLPNfuGtU2Z0cPvFquGDYU= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/staging/operator-registry/.bingo/goreleaser.mod b/staging/operator-registry/.bingo/goreleaser.mod index f9b0b721b2..ca3d05efec 100644 --- a/staging/operator-registry/.bingo/goreleaser.mod +++ b/staging/operator-registry/.bingo/goreleaser.mod @@ -1,5 +1,5 @@ module _ // Auto generated by https://github.com/bwplotka/bingo. DO NOT EDIT -go 1.22.2 +go 1.25.3 -require github.com/goreleaser/goreleaser v1.26.2 +require github.com/goreleaser/goreleaser/v2 v2.12.7 diff --git a/staging/operator-registry/.bingo/goreleaser.sum b/staging/operator-registry/.bingo/goreleaser.sum index 0034e54526..3f65ae4fda 100644 --- a/staging/operator-registry/.bingo/goreleaser.sum +++ b/staging/operator-registry/.bingo/goreleaser.sum @@ -1,510 +1,444 @@ -bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= +al.essio.dev/pkg/shellescape v1.6.0 h1:NxFcEqzFSEVCGN2yq7Huv/9hyCEGVa/TncnOOBBeXHA= +al.essio.dev/pkg/shellescape v1.6.0/go.mod h1:6sIqp7X2P6mThCQ7twERpZTuigpr6KbZWtls1U8I890= +cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY= +cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.82.0/go.mod h1:vlKccHJGuFBFufnAnuB08dfEH9Y3H7dzDzRECFdC2TA= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.88.0/go.mod h1:dnKwfYbP9hQhefiUvpbcAyoGSHUrOxR20JVElLiUvEY= -cloud.google.com/go v0.89.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.92.2/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.92.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.0 h1:QDB2MZHqjTt0hGKnoEWyG/iWykue/lvkLdogLgrg10U= -cloud.google.com/go v0.94.0/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.112.1 h1:uJSeirPke5UNZHIb4SxfZklVSiWWVqW4oXlETwZziwM= -cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc= -cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/firestore v1.5.0/go.mod h1:c4nNYR1qdq7eaZ+jSc5fonrQN2k3M7sWATcYTiakjEo= -cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc= -cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI= -cloud.google.com/go/kms v0.1.0 h1:VXAb5OzejDcyhFzIDeZ5n5AUdlsFnCyexuascIwWMj0= -cloud.google.com/go/kms v0.1.0/go.mod h1:8Qp8PCAypHg4FdmlyW1QRAv09BGQ9Uzh7JnmIZxPk+c= -cloud.google.com/go/kms v1.15.8 h1:szIeDCowID8th2i8XE4uRev5PMxQFqW+JjwYxL9h6xs= -cloud.google.com/go/kms v1.15.8/go.mod h1:WoUHcDjD9pluCg7pNds131awnH429QGvRM3N/4MyoVs= -cloud.google.com/go/monitoring v0.1.0/go.mod h1:Hpm3XfzJv+UTiXzCG5Ffp0wijzHTC7Cv4eR7o3x/fEE= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/pubsub v1.16.0/go.mod h1:6A8EfoWZ/lUvCWStKGwAWauJZSiuV0Mkmu6WilK/TxQ= -cloud.google.com/go/secretmanager v0.1.0/go.mod h1:3nGKHvnzDUVit7U0S9KAKJ4aOsO1xtwRG+7ey5LK1bM= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.16.1 h1:sMEIc4wxvoY3NXG7Rn9iP7jb/2buJgWR1vNXCR/UPfs= -cloud.google.com/go/storage v1.16.1/go.mod h1:LaNorbty3ehnU3rEjXSNV/NRgQA0O8Y+uh6bPe5UOk4= -cloud.google.com/go/storage v1.39.1 h1:MvraqHKhogCOTXTlct/9C3K3+Uy2jBmFYb3/Sp6dVtY= -cloud.google.com/go/storage v1.39.1/go.mod h1:xK6xZmxZmo+fyP7+DEF6FhNc24/JAe95OLyOHCXFH1o= -cloud.google.com/go/trace v0.1.0/go.mod h1:wxEwsoeRVPbeSkt7ZC9nWCgmoKQRAoySN7XHW2AmI7g= -code.gitea.io/gitea-vet v0.2.1/go.mod h1:zcNbT/aJEmivCAhfmkHOlT645KNOf9W2KnkLgFjGGfE= -code.gitea.io/sdk/gitea v0.15.1 h1:WJreC7YYuxbn0UDaPuWIe/mtiNKTvLN8MLkaw71yx/M= -code.gitea.io/sdk/gitea v0.15.1/go.mod h1:klY2LVI3s3NChzIk/MzMn7G1FHrfU7qd63iSMVoHRBA= -code.gitea.io/sdk/gitea v0.18.0 h1:+zZrwVmujIrgobt6wVBWCqITz6bn1aBjnCUHmpZrerI= -code.gitea.io/sdk/gitea v0.18.0/go.mod h1:IG9xZJoltDNeDSW0qiF2Vqx5orMWa7OhVWrjvrd5NpI= -contrib.go.opencensus.io/exporter/aws v0.0.0-20200617204711-c478e41e60e9/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA= -contrib.go.opencensus.io/exporter/stackdriver v0.13.8/go.mod h1:huNtlWx75MwO7qMs0KrMxPZXzNNWebav1Sq/pm02JdQ= -contrib.go.opencensus.io/integrations/ocsql v0.1.7/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= -dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= -dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +cloud.google.com/go v0.121.1 h1:S3kTQSydxmu1JfLRLpKtxRPA7rSrYPRPEUmL/PavVUw= +cloud.google.com/go v0.121.1/go.mod h1:nRFlrHq39MNVWu+zESP2PosMWA0ryJw8KUBZ2iZpxbw= +cloud.google.com/go v0.121.4 h1:cVvUiY0sX0xwyxPwdSU2KsF9knOVmtRyAMt8xou0iTs= +cloud.google.com/go v0.121.4/go.mod h1:XEBchUiHFJbz4lKBZwYBDHV/rSyfFktk737TLDU089s= +cloud.google.com/go/auth v0.16.1 h1:XrXauHMd30LhQYVRHLGvJiYeczweKQXZxsTbV9TiguU= +cloud.google.com/go/auth v0.16.1/go.mod h1:1howDHJ5IETh/LwYs3ZxvlkXF48aSqqJUM+5o02dNOI= +cloud.google.com/go/auth v0.16.3 h1:kabzoQ9/bobUmnseYnBO6qQG7q4a/CffFRlJSxv2wCc= +cloud.google.com/go/auth v0.16.3/go.mod h1:NucRGjaXfzP1ltpcQ7On/VTZ0H4kWB5Jy+Y9Dnm76fA= +cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= +cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= +cloud.google.com/go/compute/metadata v0.7.0 h1:PBWF+iiAerVNe8UCHxdOt6eHLVc3ydFeOCw78U8ytSU= +cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo= +cloud.google.com/go/compute/metadata v0.8.0 h1:HxMRIbao8w17ZX6wBnjhcDkW6lTFpgcaobyVfZWqRLA= +cloud.google.com/go/compute/metadata v0.8.0/go.mod h1:sYOGTp851OV9bOFJ9CH7elVvyzopvWQFNNghtDQ/Biw= +cloud.google.com/go/iam v1.5.2 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8= +cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE= +cloud.google.com/go/kms v1.22.0 h1:dBRIj7+GDeeEvatJeTB19oYZNV0aj6wEqSIT/7gLqtk= +cloud.google.com/go/kms v1.22.0/go.mod h1:U7mf8Sva5jpOb4bxYZdtw/9zsbIjrklYwPcvMk34AL8= +cloud.google.com/go/longrunning v0.6.7 h1:IGtfDWHhQCgCjwQjV9iiLnUta9LBCo8R9QmAFsS/PrE= +cloud.google.com/go/longrunning v0.6.7/go.mod h1:EAFV3IZAKmM56TyiE6VAP3VoTzhZzySwI/YI1s/nRsY= +cloud.google.com/go/monitoring v1.24.2 h1:5OTsoJ1dXYIiMiuL+sYscLc9BumrL3CarVLL7dd7lHM= +cloud.google.com/go/monitoring v1.24.2/go.mod h1:x7yzPWcgDRnPEv3sI+jJGBkwl5qINf+6qY4eq0I9B4U= +cloud.google.com/go/storage v1.55.0 h1:NESjdAToN9u1tmhVqhXCaCwYBuvEhZLLv0gBr+2znf0= +cloud.google.com/go/storage v1.55.0/go.mod h1:ztSmTTwzsdXe5syLVS0YsbFxXuvEmEyZj7v7zChEmuY= +code.gitea.io/sdk/gitea v0.21.0 h1:69n6oz6kEVHRo1+APQQyizkhrZrLsTLXey9142pfkD4= +code.gitea.io/sdk/gitea v0.21.0/go.mod h1:tnBjVhuKJCn8ibdyyhvUyxrR1Ca2KHEoTWoukNhXQPA= +code.gitea.io/sdk/gitea v0.22.0 h1:HCKq7bX/HQ85Nw7c/HAhWgRye+vBp5nQOE8Md1+9Ef0= +code.gitea.io/sdk/gitea v0.22.0/go.mod h1:yyF5+GhljqvA30sRDreoyHILruNiy4ASufugzYg0VHM= +code.gitea.io/sdk/gitea v0.22.1 h1:7K05KjRORyTcTYULQ/AwvlVS6pawLcWyXZcTr7gHFyA= +code.gitea.io/sdk/gitea v0.22.1/go.mod h1:yyF5+GhljqvA30sRDreoyHILruNiy4ASufugzYg0VHM= +dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= +dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= +github.com/42wim/httpsig v1.2.2 h1:ofAYoHUNs/MJOLqQ8hIxeyz2QxOz8qdSVvp3PX/oPgA= +github.com/42wim/httpsig v1.2.2/go.mod h1:P/UYo7ytNBFwc+dg35IubuAUIs8zj5zzFIgUCEl55WY= +github.com/42wim/httpsig v1.2.3 h1:xb0YyWhkYj57SPtfSttIobJUPJZB9as1nsfo7KWVcEs= +github.com/42wim/httpsig v1.2.3/go.mod h1:nZq9OlYKDrUBhptd77IHx4/sZZD+IxTBADvAPI9G/EM= github.com/AlekSi/pointer v1.2.0 h1:glcy/gc4h8HnG2Z3ZECSzZ1IX1x2JxRVuDzaJwQE0+w= github.com/AlekSi/pointer v1.2.0/go.mod h1:gZGfd3dpW4vEc/UlyfKKi1roIqcCgwOIvb0tSNSBle0= -github.com/Azure/azure-amqp-common-go/v3 v3.1.0/go.mod h1:PBIGdzcO1teYoufTKMcGibdKaYZv4avS+O6LNIp8bq0= -github.com/Azure/azure-amqp-common-go/v3 v3.1.1/go.mod h1:YsDaPfaO9Ub2XeSKdIy2DfwuiQlHQCauHJwSqtrkECI= -github.com/Azure/azure-pipeline-go v0.2.3 h1:7U9HBg1JFK3jHl5qmo4CTZKFTVgMwdFHMVtCdfBE21U= -github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k= -github.com/Azure/azure-sdk-for-go v51.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v57.0.0+incompatible h1:isVki3PbIFrwKvKdVP1byxo73/pt+Nn174YxW1k4PNw= -github.com/Azure/azure-sdk-for-go v57.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU= github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0 h1:n1DH8TPV4qqPTje2RcUBYwtrTWlabVp4n46+74X2pn4= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0/go.mod h1:HDcZnuGbiyppErN6lB+idp4CKhjbc8gwjto6OPpyggM= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 h1:sO0/P7g68FrryJzljemN+6GTssUXdANk6aJ7T1ZxnsQ= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1/go.mod h1:h8hyGFDsU5HMivxiS2iYFZsgDbU9OnnJ163x5UGVKYo= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 h1:LqbJ/WzJUwBf8UiaSzgX7aMclParm9/5Vgp+TY51uBQ= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2/go.mod h1:yInRyqWXAuaPrgI7p70+lDDgh3mlBohis29jGMISnmc= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1 h1:DSDNVxqkoXJiko6x8a90zidoYqnYYa6c1MTzDKzKkTo= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1/go.mod h1:zGqV2R4Cr/k8Uye5w+dgQ06WJtEcbQG/8J7BB6hnCr4= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.2 h1:Hr5FTipp7SL07o2FvoVOX9HRiRH3CR3Mj8pxqCcdD5A= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.2/go.mod h1:QyVsSSN64v5TGltphKLQ2sQxe4OBQg0J1eKRcVBnfgE= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 h1:F0gBpfdPLGsw+nsgk6aqqkZS1jiixa5WwFe3fk/T3Ys= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2/go.mod h1:SqINnQ9lVVdRlyC8cd1lCI0SdX4n2paeABd2K8ggfnE= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.10.1 h1:B+blDbyVIG3WaikNxPnhPiJ1MThR03b3vKGtER95TP4= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.10.1/go.mod h1:JdM5psgjfBf5fo2uWOZhflPWyDBZ/O/CNAH9CtsuZE4= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 h1:9iefClla7iYpfYWdzPCRDozdmndjTm8DXdpCzPajMgA= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2/go.mod h1:XtLgD3ZD34DAaVIIAyG3objl5DynM3CQ/vMcbBNJZGI= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 h1:m/sWOGCREuSBqg2htVQTBY8nOZpyajYztF0vUvSZTuM= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0/go.mod h1:Pu5Zksi2KrU7LPbZbNINx6fuVrUp/ffvpxdDj+i8LeE= github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 h1:FbH3BbSb4bvGluTesZZ+ttN/MDsnMmQP36OSnDuSXqw= github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1/go.mod h1:9V2j0jn9jDEkCkv8w/bKTNppX/d0FVA1ud77xCIP4KA= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.3.1 h1:fXPMAmuh0gDuRDey0atC8cXBuKIlqCzCkL8sm1n9Ov0= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.3.1/go.mod h1:SUZc9YRRHfx2+FAQKNDGrssXehqLpxmwRv2mC/5ntj4= -github.com/Azure/azure-service-bus-go v0.10.16/go.mod h1:MlkLwGGf1ewcx5jZadn0gUEty+tTg0RaElr6bPf+QhI= -github.com/Azure/azure-storage-blob-go v0.14.0 h1:1BCg74AmVdYwO3dlKwtFU1V0wU2PZdREkXvAmZJRUlM= -github.com/Azure/azure-storage-blob-go v0.14.0/go.mod h1:SMqIBi+SuiQH32bvyjngEewEeXoPfKMgWlBDaYf6fck= -github.com/Azure/go-amqp v0.13.0/go.mod h1:qj+o8xPCz9tMSbQ83Vp8boHahuRDl5mkNHyt1xlxUTs= -github.com/Azure/go-amqp v0.13.11/go.mod h1:D5ZrjQqB1dyp1A+G73xeL/kNn7D5qHJIIsNNps7YNmk= -github.com/Azure/go-amqp v0.13.12/go.mod h1:D5ZrjQqB1dyp1A+G73xeL/kNn7D5qHJIIsNNps7YNmk= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.0 h1:UXT0o77lXQrikd1kgwIPQOUect7EoR/+sbP4wQKdzxM= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.0/go.mod h1:cTvi54pg19DoT07ekoeMgE/taAwNtCShVeZqA+Iv2xI= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.1 h1:lhZdRq7TIx0GJQvSyX2Si406vrYsov2FXGp/RnSEtcs= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.1/go.mod h1:8cl44BDmi+effbARHMQjgOKA2AYvcohNm7KEt42mSV8= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.11.3/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= -github.com/Azure/go-autorest/autorest v0.11.17/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw= -github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= -github.com/Azure/go-autorest/autorest v0.11.20 h1:s8H1PbCZSqg/DH7JMlOz6YMig6htWLNPsjDdlLqCx3M= -github.com/Azure/go-autorest/autorest v0.11.20/go.mod h1:o3tqFY+QR40VOlk+pV4d77mORO64jOXSgEnPQgLK6JY= -github.com/Azure/go-autorest/autorest v0.11.24/go.mod h1:G6kyRlFnTuSbEYkQGawPfsCswgme4iYf6rfSKUDzbCc= -github.com/Azure/go-autorest/autorest v0.11.29 h1:I4+HL/JDvErx2LjyzaVxllw2lRDB5/BT2Bm4g20iqYw= -github.com/Azure/go-autorest/autorest v0.11.29/go.mod h1:ZtEzC4Jy2JDrZLxvWs8LrBWEBycl1hbT1eknI8MtfAs= -github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= -github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= -github.com/Azure/go-autorest/autorest/adal v0.9.11/go.mod h1:nBKAnTomx8gDtl+3ZCJv2v0KACFHWTB2drffI1B68Pk= -github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= -github.com/Azure/go-autorest/autorest/adal v0.9.14/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= -github.com/Azure/go-autorest/autorest/adal v0.9.15 h1:X+p2GF0GWyOiSmqohIaEeuNFNDY4I4EOlVuUQvFdWMk= -github.com/Azure/go-autorest/autorest/adal v0.9.15/go.mod h1:tGMin8I49Yij6AQ+rvV+Xa/zwxYQB5hmsd6DkfAx2+A= +github.com/Azure/go-autorest/autorest v0.11.28/go.mod h1:MrkzG3Y3AH668QyF9KRk5neJnGgmhQ6krbhR8Q5eMvA= +github.com/Azure/go-autorest/autorest v0.11.30 h1:iaZ1RGz/ALZtN5eq4Nr1SOFSlf2E4pDI3Tcsl+dZPVE= +github.com/Azure/go-autorest/autorest v0.11.30/go.mod h1:t1kpPIOpIVX7annvothKvb0stsrXa37i7b+xpmBW8Fs= github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= github.com/Azure/go-autorest/autorest/adal v0.9.22/go.mod h1:XuAbAEUv2Tta//+voMI038TrJBqjKam0me7qR+L8Cmk= -github.com/Azure/go-autorest/autorest/adal v0.9.23 h1:Yepx8CvFxwNKpH6ja7RZ+sKX+DWYNldbLiALMC3BTz8= -github.com/Azure/go-autorest/autorest/adal v0.9.23/go.mod h1:5pcMqFkdPhviJdlEy3kC/v1ZLnQl0MH6XA5YCcMhy4c= -github.com/Azure/go-autorest/autorest/azure/auth v0.5.8 h1:TzPg6B6fTZ0G1zBf3T54aI7p3cAT6u//TOXGPmFMOXg= -github.com/Azure/go-autorest/autorest/azure/auth v0.5.8/go.mod h1:kxyKZTSfKh8OVFWPAgOgQ/frrJgeYQJPyR5fLFmXko4= -github.com/Azure/go-autorest/autorest/azure/auth v0.5.12 h1:wkAZRgT/pn8HhFyzfe9UnqOjJYqlembgCTi72Bm/xKk= -github.com/Azure/go-autorest/autorest/azure/auth v0.5.12/go.mod h1:84w/uV8E37feW2NCJ08uT9VBfjfUHpgLVnG2InYD6cg= -github.com/Azure/go-autorest/autorest/azure/cli v0.4.2/go.mod h1:7qkJkT+j6b+hIpzMOwPChJhTqS8VbsqqgULzMNRugoM= -github.com/Azure/go-autorest/autorest/azure/cli v0.4.3 h1:DOhB+nXkF7LN0JfBGB5YtCF6QLK8mLe4psaHF7ZQEKM= -github.com/Azure/go-autorest/autorest/azure/cli v0.4.3/go.mod h1:yAQ2b6eP/CmLPnmLvxtT1ALIY3OR1oFcCqVBi8vHiTc= -github.com/Azure/go-autorest/autorest/azure/cli v0.4.5/go.mod h1:ADQAXrkgm7acgWVUNamOgh8YNrv4p27l3Wc55oVfpzg= -github.com/Azure/go-autorest/autorest/azure/cli v0.4.6 h1:w77/uPk80ZET2F+AfQExZyEWtn+0Rk/uw17m9fv5Ajc= +github.com/Azure/go-autorest/autorest/adal v0.9.24 h1:BHZfgGsGwdkHDyZdtQRQk1WeUdW0m2WPAwuHZwUi5i4= +github.com/Azure/go-autorest/autorest/adal v0.9.24/go.mod h1:7T1+g0PYFmACYW5LlG2fcoPiPlFHjClyRGL7dRlP5c8= +github.com/Azure/go-autorest/autorest/azure/auth v0.5.13 h1:Ov8avRZi2vmrE2JcXw+tu5K/yB41r7xK9GZDiBF7NdM= +github.com/Azure/go-autorest/autorest/azure/auth v0.5.13/go.mod h1:5BAVfWLWXihP47vYrPuBKKf4cS0bXI+KM9Qx6ETDJYo= github.com/Azure/go-autorest/autorest/azure/cli v0.4.6/go.mod h1:piCfgPho7BiIDdEQ1+g4VmKyD5y+p/XtSNqE6Hc4QD0= -github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= +github.com/Azure/go-autorest/autorest/azure/cli v0.4.7 h1:Q9R3utmFg9K1B4OYtAZ7ZUUvIUdzQt7G2MN5Hi/d670= +github.com/Azure/go-autorest/autorest/azure/cli v0.4.7/go.mod h1:bVrAueELJ0CKLBpUHDIvD516TwmHmzqwCpvONWRsw3s= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= -github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/date v0.3.1 h1:o9Z8Jyt+VJJTCZ/UORishuHOusBwolhjokt9s5k8I4w= +github.com/Azure/go-autorest/autorest/date v0.3.1/go.mod h1:Dz/RDmXlfiFFS/eW+b/xMUSFs1tboPVy6UjgADToWDM= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= -github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk= -github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE= -github.com/Azure/go-autorest/autorest/validation v0.3.1 h1:AgyqjAd94fwNAoTjl/WQXg4VvFeRFpO+UhNyRXqF1ac= -github.com/Azure/go-autorest/autorest/validation v0.3.1/go.mod h1:yhLgjC0Wda5DYXl6JAsWyUe4KVNffhoDhG0zVzUMo3E= -github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= -github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= +github.com/Azure/go-autorest/autorest/to v0.4.1 h1:CxNHBqdzTr7rLtdrtb5CMjJcDut+WNGCVv7OmS5+lTc= +github.com/Azure/go-autorest/autorest/to v0.4.1/go.mod h1:EtaofgU4zmtvn1zT2ARsjRFdq9vXx0YWtmElwL+GZ9M= github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= -github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= +github.com/Azure/go-autorest/logger v0.2.2 h1:hYqBsEBywrrOSW24kkOCXRcKfKhK76OzLTfF+MYDE2o= +github.com/Azure/go-autorest/logger v0.2.2/go.mod h1:I5fg9K52o+iuydlWfa9T5K6WFos9XYr9dYTFzpqgibw= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= -github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 h1:XHOnouVk1mxXfQidrMEnLlPk9UMeRtyBTnEFtxkV0kU= -github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= +github.com/Azure/go-autorest/tracing v0.6.1 h1:YUMSrC/CeD1ZnnXcNYU4a/fzsO35u2Fsful9L/2nyR0= +github.com/Azure/go-autorest/tracing v0.6.1/go.mod h1:/3EgjbsjraOqiicERAeu3m7/z0x1TzjQGAwDrJrXGkc= +github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 h1:oygO0locgZJe7PpYPXT5A29ZkwJaPqcva7BVeemZOZs= +github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= -github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DisgoOrg/disgohook v1.4.4 h1:6xU+nRtyCYX7RyKvRnroJE8JMv+YIrQEMBDGUjBGDlQ= -github.com/DisgoOrg/disgohook v1.4.4/go.mod h1:l7r9dZgfkA3KiV+ErxqweKaknnskmzZO+SRTNHvJTUU= -github.com/DisgoOrg/log v1.1.0 h1:a6hLfVSDuTFJc5AKQ8FDYQ5TASnwk3tciUyXThm1CR4= -github.com/DisgoOrg/log v1.1.0/go.mod h1:Qihgz6fax3JCfuO7vxVavL0LyHS0sUdQ9OmykQ2fiQs= -github.com/DisgoOrg/restclient v1.2.8 h1:0Kv2g2bNYUvAAeIpJ1oNHorRcj5z6qkO2kOlm4R7cAs= -github.com/DisgoOrg/restclient v1.2.8/go.mod h1:2pc/htya/5kjxvWNYya98sb8B4mexobxmWvhTiWPt94= -github.com/GoogleCloudPlatform/cloudsql-proxy v1.24.0/go.mod h1:3tx938GhY4FC+E1KT/jNjDw7Z5qxAEtIiERJ2sXjnII= -github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= +github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0 h1:ErKg/3iS1AKcTkf3yixlZ54f9U1rljCkQyEXWUnIUxc= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0/go.mod h1:yAZHSGnqScoU556rBOVkwLze6WP5N+U11RHuWaGVxwY= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0 h1:UQUsRi8WTzhZntp5313l+CHIAT95ojUI2lpP/ExlZa4= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.51.0 h1:fYE9p3esPxA/C0rQ0AHhP0drtPXDRhaWiwg1DPqO7IU= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.51.0/go.mod h1:BnBReJLvVYx2CS/UHOgVz2BXKXD9wsQPxZug20nZhd0= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0 h1:owcC2UnmsZycprQ5RfRgjydWhuoxg71LUfyiQdijZuM= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0/go.mod h1:ZPpqegjbE99EPKsu3iUWV22A04wzGPcAY/ziSIQEEgs= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.51.0 h1:6/0iUd0xrnX7qt+mLNRwg5c0PGv8wpE8K90ryANQwMI= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.51.0/go.mod h1:otE2jQekW/PqXk1Awf5lmfokJx4uwuqcj1ab5SpGeW0= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.53.0 h1:Ron4zCA/yk6U7WOBXhTJcDpsUBG9npumK6xw2auFltQ= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.53.0/go.mod h1:cSgYe11MCNYunTnRXrKiR/tHc0eoKjICUuWpNZoVCOo= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver/v3 v3.1.0/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= -github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= -github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= -github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= -github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60= -github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= -github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA= -github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.4.15/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.5.0 h1:Elr9Wn+sGKPlkaBvwu4mTrxtmOp3F3yV9qhaHbXGjwU= -github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0= +github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= +github.com/Masterminds/sprig/v3 v3.3.0 h1:mQh0Yrg1XPo6vjYXgtf5OtijNAKJRNcTdOOGZe3tPhs= +github.com/Masterminds/sprig/v3 v3.3.0/go.mod h1:Zy1iXRYNqNLUolqCpL4uhk6SHUMAOSCzdgBfDb35Lz0= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/ProtonMail/go-crypto v0.0.0-20210512092938-c05353c2d58c h1:bNpaLLv2Y4kslsdkdCwAYu8Bak1aGVtxwi8Z/wy4Yuo= -github.com/ProtonMail/go-crypto v0.0.0-20210512092938-c05353c2d58c/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/ProtonMail/go-crypto v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78= -github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= -github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= -github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= -github.com/alecthomas/jsonschema v0.0.0-20211209230136-e2b41affa5c1 h1:6mZ7MG/flSahicBVy4GKlWI+dzoR5rgnm7H8e17TAio= -github.com/alecthomas/jsonschema v0.0.0-20211209230136-e2b41affa5c1/go.mod h1:/n6+1/DWPltRLWL/VKyUxg6tzsl5kHUCcraimt4vr60= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alessio/shellescape v1.4.1 h1:V7yhSDDn8LP4lc4jS8pFkt0zCnzVJlG5JXy9BVKJUX0= -github.com/alessio/shellescape v1.4.1/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30= -github.com/anchore/bubbly v0.0.0-20230518153401-87b6af8ccf22 h1:5NFK6VGgqBUOAX2SYyzFYvNdOiYDxzim8jga386FlZY= -github.com/anchore/bubbly v0.0.0-20230518153401-87b6af8ccf22/go.mod h1:Kv+Mm9CdtnV8iem48iEPIwy7/N4Wmk0hpxYNH5gTwKQ= -github.com/anchore/go-logger v0.0.0-20230725134548-c21dafa1ec5a h1:nJ2G8zWKASyVClGVgG7sfM5mwoZlZ2zYpIzN2OhjWkw= -github.com/anchore/go-logger v0.0.0-20230725134548-c21dafa1ec5a/go.mod h1:ubLFmlsv8/DFUQrZwY5syT5/8Er3ugSr4rDFwHsE3hg= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/ProtonMail/go-crypto v1.3.0 h1:ILq8+Sf5If5DCpHQp4PbZdS1J7HDFRXz/+xKBiRGFrw= +github.com/ProtonMail/go-crypto v1.3.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR2e7GWU1R+/PE= +github.com/agnivade/levenshtein v1.2.1 h1:EHBY3UOn1gwdy/VbFwgo4cxecRznFk7fKWN1KOX7eoM= +github.com/agnivade/levenshtein v1.2.1/go.mod h1:QVVI16kDrtSuwcpd0p1+xMC6Z/VfhtCyDIjcwga4/DU= +github.com/anchore/bubbly v0.0.0-20241107060245-f2a5536f366a h1:smr1CcMkgeMd6G75N+2OVNk/uHbX/WLR0bk+kMWEyr8= +github.com/anchore/bubbly v0.0.0-20241107060245-f2a5536f366a/go.mod h1:P5IrP8AhuzApVKa5H7k2hHX5pZA1uhyi+Z1VjK1EtA4= +github.com/anchore/go-logger v0.0.0-20241005132348-65b4486fbb28 h1:TKlTOayTJKpoLPJbeMykEwxCn0enACf06u0RSIdFG5w= +github.com/anchore/go-logger v0.0.0-20241005132348-65b4486fbb28/go.mod h1:5iJIa34inbIEFRwoWxNBTnjzIcl4G3le1LppPDmpg/4= github.com/anchore/go-macholibre v0.0.0-20220308212642-53e6d0aaf6fb h1:iDMnx6LIjtjZ46C0akqveX83WFzhpTD3eqOthawb5vU= github.com/anchore/go-macholibre v0.0.0-20220308212642-53e6d0aaf6fb/go.mod h1:DmTY2Mfcv38hsHbG78xMiTDdxFtkHpgYNVDPsF2TgHk= -github.com/anchore/quill v0.4.1 h1:mffDnvnER3ZgPjN5hexc3nr/4Y1dtKdDB6td5K8uInk= -github.com/anchore/quill v0.4.1/go.mod h1:t6hOPYDohN8wn2SRWQdNkJBkhmK8s3gzuHzzgcEvzQU= +github.com/anchore/quill v0.5.1 h1:+TAJroWuMC0AofI4gD9V9v65zR8EfKZg8u+ZD+dKZS4= +github.com/anchore/quill v0.5.1/go.mod h1:tAzfFxVluL2P1cT+xEy+RgQX1hpNuliUC5dTYSsnCLQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apex/log v1.9.0 h1:FHtw/xuaM8AgmvDDTI9fiwoAL25Sq2cxojnZICUU8l0= -github.com/apex/log v1.9.0/go.mod h1:m82fZlWIuiWzWP04XCTXmnX0xRkYYbCdYn8jbJeLBEA= -github.com/apex/logs v1.0.0/go.mod h1:XzxuLZ5myVHDy9SAmYpamKKRNApGj54PfYLcFrXqDwo= -github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a/go.mod h1:3NqKYiepwy8kCu4PNA+aP7WUV72eXWJeP9/r3/K9aLE= -github.com/aphistic/sweet v0.2.0/go.mod h1:fWDlIh/isSE9n6EPsRmC0det+whmX6dJid3stzu0Xys= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= -github.com/atc0005/go-teams-notify/v2 v2.6.1 h1:t22ybzQuaQs4UJe4ceF5VYGsPhs6ir3nZOId/FBy6Go= -github.com/atc0005/go-teams-notify/v2 v2.6.1/go.mod h1:xo6GejLDHn3tWBA181F8LrllIL0xC1uRsRxq7YNXaaY= -github.com/atc0005/go-teams-notify/v2 v2.10.0 h1:eQvRIkyESQgBvlUdQ/iPol/lj3QcRyrdEQM3+c/nXhM= -github.com/atc0005/go-teams-notify/v2 v2.10.0/go.mod h1:SIeE1UfCcVRYMqP5b+r1ZteHyA/2UAjzWF5COnZ8q0w= -github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= -github.com/aws/aws-sdk-go v1.20.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.37.0/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= -github.com/aws/aws-sdk-go v1.40.34 h1:SBYmodndE2d4AYucuuJnOXk4MD1SFbucoIdpwKVKeSA= -github.com/aws/aws-sdk-go v1.40.34/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= -github.com/aws/aws-sdk-go v1.53.0 h1:MMo1x1ggPPxDfHMXJnQudTbGXYlD4UigUAud1DJxPVo= -github.com/aws/aws-sdk-go v1.53.0/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= -github.com/aws/aws-sdk-go-v2 v1.9.0 h1:+S+dSqQCN3MSU5vJRu1HqHrq00cJn6heIMU7X9hcsoo= -github.com/aws/aws-sdk-go-v2 v1.9.0/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= -github.com/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA= -github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.1 h1:gTK2uhtAPtFcdRRJilZPx8uJLL2J85xK11nKtWL0wfU= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.1/go.mod h1:sxpLb+nZk7tIfCWChfd+h4QwHNUR57d8hA1cleTkjJo= -github.com/aws/aws-sdk-go-v2/config v1.7.0 h1:J2cZ7qe+3IpqBEXnHUrFrOjoB9BlsXg7j53vxcl5IVg= -github.com/aws/aws-sdk-go-v2/config v1.7.0/go.mod h1:w9+nMZ7soXCe5nT46Ri354SNhXDQ6v+V5wqDjnZE+GY= -github.com/aws/aws-sdk-go-v2/config v1.27.13 h1:WbKW8hOzrWoOA/+35S5okqO/2Ap8hkkFUzoW8Hzq24A= -github.com/aws/aws-sdk-go-v2/config v1.27.13/go.mod h1:XLiyiTMnguytjRER7u5RIkhIqS8Nyz41SwAWb4xEjxs= -github.com/aws/aws-sdk-go-v2/credentials v1.4.0 h1:kmvesfjY861FzlCU9mvAfe01D9aeXcG2ZuC+k9F2YLM= -github.com/aws/aws-sdk-go-v2/credentials v1.4.0/go.mod h1:dgGR+Qq7Wjcd4AOAW5Rf5Tnv3+x7ed6kETXyS9WCuAY= -github.com/aws/aws-sdk-go-v2/credentials v1.17.13 h1:XDCJDzk/u5cN7Aple7D/MiAhx1Rjo/0nueJ0La8mRuE= -github.com/aws/aws-sdk-go-v2/credentials v1.17.13/go.mod h1:FMNcjQrmuBYvOTZDtOLCIu0esmxjF7RuA/89iSXWzQI= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.5.0 h1:OxTAgH8Y4BXHD6PGCJ8DHx2kaZPCQfSTqmDsdRZFezE= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.5.0/go.mod h1:CpNzHK9VEFUCknu50kkB8z58AH2B5DvPP7ea1LHve/Y= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 h1:FVJ0r5XTHSmIHJV6KuDmdYhEpvlHpiSd38RQWhut5J4= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1/go.mod h1:zusuAeqezXzAB24LGuzuekqMAEgWkVYukBec3kr3jUg= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.16.9 h1:vXY/Hq1XdxHBIYgBUmug/AbMyIe1AKulPYS2/VE1X70= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.16.9/go.mod h1:GyJJTZoHVuENM4TeJEl5Ffs4W9m19u+4wKJcDi/GZ4A= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 h1:aw39xVGeRWlWx9EzGVnhOR4yOjQDHPQ6o6NmBlscyQg= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5/go.mod h1:FSaRudD0dXiMPK2UjknVwwTYyZMRsHv3TtkabsZih5I= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 h1:PG1F3OD1szkuQPzDw3CIQsRIrtTlUC3lP84taWzHlq0= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5/go.mod h1:jU1li6RFryMz+so64PpKtudI+QzbKoIEivqdf6LNpOc= -github.com/aws/aws-sdk-go-v2/internal/ini v1.2.2 h1:d95cddM3yTm4qffj3P6EnP+TzX1SSkWaQypXSgT/hpA= -github.com/aws/aws-sdk-go-v2/internal/ini v1.2.2/go.mod h1:BQV0agm+JEhqR+2RT5e1XTFIDcAAV0eW6z2trp+iduw= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.3 h1:mDnFOE2sVkyphMWtTH+stv0eW3k0OTx94K63xpxHty4= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.3/go.mod h1:V8MuRVcCRt5h1S+Fwu8KbC7l/gBGo3yBAyUbJM2IJOk= -github.com/aws/aws-sdk-go-v2/service/ecr v1.28.0 h1:rdPrcOZmqT2F+yzmKEImrx5XUs7Hpf4V9Rp6E8mhsxQ= -github.com/aws/aws-sdk-go-v2/service/ecr v1.28.0/go.mod h1:if7ybzzjOmDB8pat9FE35AHTY6ZxlYSy3YviSmFZv8c= -github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.23.5 h1:452e/nFuqPvwPg+1OD2CG/v29R9MH8egJSJKh2Qduv8= -github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.23.5/go.mod h1:8pvvNAklmq+hKmqyvFoMRg0bwg9sdGOvdwximmKiKP0= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1xUsUr3I8cHps0G+XM3WWU16lP6yG8qu1GAZAs= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.5 h1:mbWNpfRUTT6bnacmvOTKXZjR/HycibdWzNpfbrbLDIs= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.5/go.mod h1:FCOPWGjsshkkICJIn9hq9xr6dLKtyaWpuUojiN3W1/8= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.3.0 h1:VNJ5NLBteVXEwE2F1zEXVmyIH58mZ6kIQGJoC7C+vkg= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.3.0/go.mod h1:R1KK+vY8AfalhG1AOu5e35pOD2SdoPKQCFLTvnxiohk= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 h1:ogRAwT1/gxJBcSWDMZlgyFUM962F51A5CRhDLbxLdmo= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7/go.mod h1:YCsIZhXfRPLFFCl5xxY+1T9RKzOKjCut+28JSX2DnAk= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.3 h1:4t+QEX7BsXz98W8W1lNvMAG+NX8qHz2CjLBxQKku40g= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.3/go.mod h1:oFcjjUq5Hm09N9rpxTdeMeLeQcxS7mIkBkL8qUKng+A= -github.com/aws/aws-sdk-go-v2/service/kms v1.5.0 h1:10e9mzaaYIIePEuxUzW5YJ8LKHNG/NX63evcvS3ux9U= -github.com/aws/aws-sdk-go-v2/service/kms v1.5.0/go.mod h1:w7JuP9Oq1IKMFQPkNe3V6s9rOssXzOVEMNEqK1L1bao= -github.com/aws/aws-sdk-go-v2/service/kms v1.30.0 h1:yS0JkEdV6h9JOo8sy2JSpjX+i7vsKifU8SIeHrqiDhU= -github.com/aws/aws-sdk-go-v2/service/kms v1.30.0/go.mod h1:+I8VUUSVD4p5ISQtzpgSva4I8cJ4SQ4b1dcBcof7O+g= -github.com/aws/aws-sdk-go-v2/service/s3 v1.51.4 h1:lW5xUzOPGAMY7HPuNF4FdyBwRc3UJ/e8KsapbesVeNU= -github.com/aws/aws-sdk-go-v2/service/s3 v1.51.4/go.mod h1:MGTaf3x/+z7ZGugCGvepnx2DS6+caCYYqKhzVoLNYPk= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.6.0/go.mod h1:B+7C5UKdVq1ylkI/A6O8wcurFtaux0R1njePNPtKwoA= -github.com/aws/aws-sdk-go-v2/service/ssm v1.10.0/go.mod h1:4dXS5YNqI3SNbetQ7X7vfsMlX6ZnboJA2dulBwJx7+g= -github.com/aws/aws-sdk-go-v2/service/sso v1.4.0 h1:sHXMIKYS6YiLPzmKSvDpPmOpJDHxmAUgbiF49YNVztg= -github.com/aws/aws-sdk-go-v2/service/sso v1.4.0/go.mod h1:+1fpWnL96DL23aXPpMGbsmKe8jLTEfbjuQoA4WS1VaA= -github.com/aws/aws-sdk-go-v2/service/sso v1.20.6 h1:o5cTaeunSpfXiLTIBx5xo2enQmiChtu1IBbzXnfU9Hs= -github.com/aws/aws-sdk-go-v2/service/sso v1.20.6/go.mod h1:qGzynb/msuZIE8I75DVRCUXw3o3ZyBmUvMwQ2t/BrGM= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.24.0 h1:Qe0r0lVURDDeBQJ4yP+BOrJkvkiCo/3FH/t+wY11dmw= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.24.0/go.mod h1:mUYPBhaF2lGiukDEjJX2BLRRKTmoUSitGDUgM4tRxak= -github.com/aws/aws-sdk-go-v2/service/sts v1.7.0 h1:1at4e5P+lvHNl2nUktdM2/v+rpICg/QSEr9TO/uW9vU= -github.com/aws/aws-sdk-go-v2/service/sts v1.7.0/go.mod h1:0qcSMCyASQPN2sk/1KQLQ2Fh6yq8wm0HSDAimPhzCoM= -github.com/aws/aws-sdk-go-v2/service/sts v1.28.7 h1:et3Ta53gotFR4ERLXXHIHl/Uuk1qYpP5uU7cvNql8ns= -github.com/aws/aws-sdk-go-v2/service/sts v1.28.7/go.mod h1:FZf1/nKNEkHdGGJP/cI2MoIMquumuRK6ol3QQJNDxmw= -github.com/aws/smithy-go v1.8.0 h1:AEwwwXQZtUwP5Mz506FeXXrKBe0jA8gVM+1gEcSRooc= -github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= -github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q= -github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= -github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20240514230400-03fa26f5508f h1:Z0kS9pJDQgCg3u2lH6+CdYaFbyQtyukVTiUCG6re0E4= -github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20240514230400-03fa26f5508f/go.mod h1:rAE739ssmE5O5fLuQ2y8uHdmOJaelE5I0Es3SxV0y1A= -github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= +github.com/atc0005/go-teams-notify/v2 v2.13.0 h1:nbDeHy89NjYlF/PEfLVF6lsserY9O5SnN1iOIw3AxXw= +github.com/atc0005/go-teams-notify/v2 v2.13.0/go.mod h1:WSv9moolRsBcpZbwEf6gZxj7h0uJlJskJq5zkEWKO8Y= +github.com/avast/retry-go/v4 v4.6.1 h1:VkOLRubHdisGrHnTu89g08aQEWEgRU7LVEop3GbIcMk= +github.com/avast/retry-go/v4 v4.6.1/go.mod h1:V6oF8njAwxJ5gRo1Q7Cxab24xs5NCWZBeaHHBklR8mA= +github.com/avast/retry-go/v4 v4.7.0 h1:yjDs35SlGvKwRNSykujfjdMxMhMQQM0TnIjJaHB+Zio= +github.com/avast/retry-go/v4 v4.7.0/go.mod h1:ZMPDa3sY2bKgpLtap9JRUgk2yTAba7cgiFhqxY2Sg6Q= +github.com/aws/aws-sdk-go v1.55.6 h1:cSg4pvZ3m8dgYcgqB97MrcdjUmZ1BeMYKUxMMB89IPk= +github.com/aws/aws-sdk-go v1.55.6/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= +github.com/aws/aws-sdk-go v1.55.7 h1:UJrkFq7es5CShfBwlWAC8DA077vp8PyVbQd3lqLiztE= +github.com/aws/aws-sdk-go v1.55.7/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= +github.com/aws/aws-sdk-go-v2 v1.37.1 h1:SMUxeNz3Z6nqGsXv0JuJXc8w5YMtrQMuIBmDx//bBDY= +github.com/aws/aws-sdk-go-v2 v1.37.1/go.mod h1:9Q0OoGQoboYIAJyslFyF1f5K1Ryddop8gqMhWx/n4Wg= +github.com/aws/aws-sdk-go-v2 v1.38.3 h1:B6cV4oxnMs45fql4yRH+/Po/YU+597zgWqvDpYMturk= +github.com/aws/aws-sdk-go-v2 v1.38.3/go.mod h1:sDioUELIUO9Znk23YVmIk86/9DOpkbyyVb1i/gUNFXY= +github.com/aws/aws-sdk-go-v2 v1.39.4 h1:qTsQKcdQPHnfGYBBs+Btl8QwxJeoWcOcPcixK90mRhg= +github.com/aws/aws-sdk-go-v2 v1.39.4/go.mod h1:yWSxrnioGUZ4WVv9TgMrNUeLV3PFESn/v+6T/Su8gnM= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.0 h1:6GMWV6CNpA/6fbFHnoAjrv4+LGfyTqZz2LtCHnspgDg= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.0/go.mod h1:/mXlTIVG9jbxkqDnr5UQNQxW1HRYxeGklkM9vAFeabg= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.1 h1:i8p8P4diljCr60PpJp6qZXNlgX4m2yQFpYk+9ZT+J4E= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.1/go.mod h1:ddqbooRZYNoJ2dsTwOty16rM+/Aqmk/GOXrK8cg7V00= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.2 h1:t9yYsydLYNBk9cJ73rgPhPWqOh/52fcWDQB5b1JsKSY= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.2/go.mod h1:IusfVNTmiSN3t4rhxWFaBAqn+mcNdwKtPcV16eYdgko= +github.com/aws/aws-sdk-go-v2/config v1.29.17 h1:jSuiQ5jEe4SAMH6lLRMY9OVC+TqJLP5655pBGjmnjr0= +github.com/aws/aws-sdk-go-v2/config v1.29.17/go.mod h1:9P4wwACpbeXs9Pm9w1QTh6BwWwJjwYvJ1iCt5QbCXh8= +github.com/aws/aws-sdk-go-v2/config v1.30.3 h1:utupeVnE3bmB221W08P0Moz1lDI3OwYa2fBtUhl7TCc= +github.com/aws/aws-sdk-go-v2/config v1.30.3/go.mod h1:NDGwOEBdpyZwLPlQkpKIO7frf18BW8PaCmAM9iUxQmI= +github.com/aws/aws-sdk-go-v2/credentials v1.17.70 h1:ONnH5CM16RTXRkS8Z1qg7/s2eDOhHhaXVd72mmyv4/0= +github.com/aws/aws-sdk-go-v2/credentials v1.17.70/go.mod h1:M+lWhhmomVGgtuPOhO85u4pEa3SmssPTdcYpP/5J/xc= +github.com/aws/aws-sdk-go-v2/credentials v1.18.3 h1:ptfyXmv+ooxzFwyuBth0yqABcjVIkjDL0iTYZBSbum8= +github.com/aws/aws-sdk-go-v2/credentials v1.18.3/go.mod h1:Q43Nci++Wohb0qUh4m54sNln0dbxJw8PvQWkrwOkGOI= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.32 h1:KAXP9JSHO1vKGCr5f4O6WmlVKLFFXgWYAGoJosorxzU= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.32/go.mod h1:h4Sg6FQdexC1yYG9RDnOvLbW1a/P986++/Y/a+GyEM8= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.2 h1:nRniHAvjFJGUCl04F3WaAj7qp/rcz5Gi1OVoj5ErBkc= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.2/go.mod h1:eJDFKAMHHUvv4a0Zfa7bQb//wFNUXGrbFpYRCHe2kD0= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.69 h1:6VFPH/Zi9xYFMJKPQOX5URYkQoXRWeJ7V/7Y6ZDYoms= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.69/go.mod h1:GJj8mmO6YT6EqgduWocwhMoxTLFitkhIrK+owzrYL2I= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.84 h1:cTXRdLkpBanlDwISl+5chq5ui1d1YWg4PWMR9c3kXyw= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.84/go.mod h1:kwSy5X7tfIHN39uucmjQVs2LvDdXEjQucgQQEqCggEo= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.1 h1:ksZXBYv80EFTcgc8OJO48aQ8XDWXIQL7gGasPeCoTzI= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.1/go.mod h1:HSksQyyJETVZS7uM54cir0IgxttTD+8aEoJMPGepHBI= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.6 h1:uF68eJA6+S9iVr9WgX1NaRGyQ/6MdIyc4JNUo6TN1FA= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.6/go.mod h1:qlPeVZCGPiobx8wb1ft0GHT5l+dc6ldnwInDFaMvC7Y= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.11 h1:7AANQZkF3ihM8fbdftpjhken0TP9sBzFbV/Ze/Y4HXA= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.11/go.mod h1:NTF4QCGkm6fzVwncpkFQqoquQyOolcyXfbpC98urj+c= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.1 h1:+dn/xF/05utS7tUhjIcndbuaPjfll2LhbH1cCDGLYUQ= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.1/go.mod h1:hyAGz30LHdm5KBZDI58MXx5lDVZ5CUfvfTZvMu4HCZo= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.6 h1:pa1DEC6JoI0zduhZePp3zmhWvk/xxm4NB8Hy/Tlsgos= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.6/go.mod h1:gxEjPebnhWGJoaDdtDkA0JX46VRg1wcTHYe63OfX5pE= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.11 h1:ShdtWUZT37LCAA4Mw2kJAJtzaszfSHFb5n25sdcv4YE= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.11/go.mod h1:7bUb2sSr2MZ3M/N+VyETLTQtInemHXb/Fl3s8CLzm0Y= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.1 h1:4HbnOGE9491a9zYJ9VpPh1ApgEq6ZlD4Kuv1PJenFpc= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.1/go.mod h1:Z6QnHC6TmpJWUxAy8FI4JzA7rTwl6EIANkyK9OR5z5w= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.6 h1:R0tNFJqfjHL3900cqhXuwQ+1K4G0xc9Yf8EDbFXCKEw= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.6/go.mod h1:y/7sDdu+aJvPtGXr4xYosdpq9a6T9Z0jkXfugmti0rI= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.11 h1:bKgSxk1TW//00PGQqYmrq83c+2myGidEclp+t9pPqVI= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.11/go.mod h1:vrPYCQ6rFHL8jzQA8ppu3gWX18zxjLIDGTeqDxkBmSI= +github.com/aws/aws-sdk-go-v2/service/ecr v1.45.1 h1:Bwzh202Aq7/MYnAjXA9VawCf6u+hjwMdoYmZ4HYsdf8= +github.com/aws/aws-sdk-go-v2/service/ecr v1.45.1/go.mod h1:xZzWl9AXYa6zsLLH41HBFW8KRKJRIzlGmvSM0mVMIX4= +github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.33.2 h1:XJ/AEFYj9VFPJdF+VFi4SUPEDfz1akHwxxm07JfZJcs= +github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.33.2/go.mod h1:JUBHdhvKbbKmhaHjLsKJAWnQL80T6nURmhB/LEprV+4= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.0 h1:6+lZi2JeGKtCraAj1rpoZfKqnQ9SptseRZioejfUOLM= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.0/go.mod h1:eb3gfbVIxIoGgJsi9pGne19dhCBpK6opTYpQqAmdy44= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.1 h1:oegbebPEMA/1Jny7kvwejowCaHz1FWZAQ94WXFNCyTM= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.1/go.mod h1:kemo5Myr9ac0U9JfSjMo9yHLtw+pECEHsFtJ9tqCEI8= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.2 h1:xtuxji5CS0JknaXoACOunXOYOQzgfTvGAc9s2QdCJA4= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.2/go.mod h1:zxwi0DIR0rcRcgdbl7E2MSOvxDyyXGBlScvBkARFaLQ= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.8.1 h1:ps3nrmBWdWwakZBydGX1CxeYFK80HsQ79JLMwm7Y4/c= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.8.1/go.mod h1:bAdfrfxENre68Hh2swNaGEVuFYE74o0SaSCAlaG9E74= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.8.6 h1:hncKj/4gR+TPauZgTAsxOxNcvBayhUlYZ6LO/BYiQ30= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.8.6/go.mod h1:OiIh45tp6HdJDDJGnja0mw8ihQGz3VGrUflLqSL0SmM= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.2 h1:DGFpGybmutVsCuF6vSuLZ25Vh55E3VmsnJmFfjeBx4M= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.2/go.mod h1:hm/wU1HDvXCFEDzOLorQnZZ/CVvPXvWEmHMSmqgQRuA= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.1 h1:ky79ysLMxhwk5rxJtS+ILd3Mc8kC5fhsLBrP27r6h4I= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.1/go.mod h1:+2MmkvFvPYM1vsozBWduoLJUi5maxFk5B7KJFECujhY= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.6 h1:LHS1YAIJXJ4K9zS+1d/xa9JAA9sL2QyXIQCQFQW/X08= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.6/go.mod h1:c9PCiTEuh0wQID5/KqA32J+HAgZxN9tOGXKCiYJjTZI= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.11 h1:GpMf3z2KJa4RnJ0ew3Hac+hRFYLZ9DDjfgXjuW+pB54= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.11/go.mod h1:6MZP3ZI4QQsgUCFTwMZA2V0sEriNQ8k2hmoHF3qjimQ= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.1 h1:MdVYlN5pcQu1t1OYx4Ajo3fKl1IEhzgdPQbYFCRjYS8= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.1/go.mod h1:iikmNLrvHm2p4a3/4BPeix2S9P+nW8yM1IZW73x8bFA= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.6 h1:nEXUSAwyUfLTgnc9cxlDWy637qsq4UWwp3sNAfl0Z3Y= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.6/go.mod h1:HGzIULx4Ge3Do2V0FaiYKcyKzOqwrhUZgCI77NisswQ= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.11 h1:weapBOuuFIBEQ9OX/NVW3tFQCvSutyjZYk/ga5jDLPo= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.11/go.mod h1:3C1gN4FmIVLwYSh8etngUS+f1viY6nLCDVtZmrFbDy0= +github.com/aws/aws-sdk-go-v2/service/kms v1.38.1 h1:tecq7+mAav5byF+Mr+iONJnCBf4B4gon8RSp4BrweSc= +github.com/aws/aws-sdk-go-v2/service/kms v1.38.1/go.mod h1:cQn6tAF77Di6m4huxovNM7NVAozWTZLsDRp9t8Z/WYk= +github.com/aws/aws-sdk-go-v2/service/kms v1.43.0 h1:mdbWU38ipmDapPcsD6F7ObjjxMLrWUK0jI2NcC7zAcI= +github.com/aws/aws-sdk-go-v2/service/kms v1.43.0/go.mod h1:6FWXdzVbnG8ExnBQLHGIo/ilb1K7Ek1u6dcllumBe1s= +github.com/aws/aws-sdk-go-v2/service/s3 v1.85.1 h1:Hsqo8+dFxSdDvv9B2PgIx1AJAnDpqgS0znVI+R+MoGY= +github.com/aws/aws-sdk-go-v2/service/s3 v1.85.1/go.mod h1:8Q0TAPXD68Z8YqlcIGHs/UNIDHsxErV9H4dl4vJEpgw= +github.com/aws/aws-sdk-go-v2/service/s3 v1.87.3 h1:ETkfWcXP2KNPLecaDa++5bsQhCRa5M5sLUJa5DWYIIg= +github.com/aws/aws-sdk-go-v2/service/s3 v1.87.3/go.mod h1:+/3ZTqoYb3Ur7DObD00tarKMLMuKg8iqz5CHEanqTnw= +github.com/aws/aws-sdk-go-v2/service/s3 v1.88.7 h1:Wer3W0GuaedWT7dv/PiWNZGSQFSTcBY2rZpbiUp5xcA= +github.com/aws/aws-sdk-go-v2/service/s3 v1.88.7/go.mod h1:UHKgcRSx8PVtvsc1Poxb/Co3PD3wL7P+f49P0+cWtuY= +github.com/aws/aws-sdk-go-v2/service/sso v1.25.5 h1:AIRJ3lfb2w/1/8wOOSqYb9fUKGwQbtysJ2H1MofRUPg= +github.com/aws/aws-sdk-go-v2/service/sso v1.25.5/go.mod h1:b7SiVprpU+iGazDUqvRSLf5XmCdn+JtT1on7uNL6Ipc= +github.com/aws/aws-sdk-go-v2/service/sso v1.27.0 h1:j7/jTOjWeJDolPwZ/J4yZ7dUsxsWZEsxNwH5O7F8eEA= +github.com/aws/aws-sdk-go-v2/service/sso v1.27.0/go.mod h1:M0xdEPQtgpNT7kdAX4/vOAPkFj60hSQRb7TvW9B0iug= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.3 h1:BpOxT3yhLwSJ77qIY3DoHAQjZsc4HEGfMCE4NGy3uFg= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.3/go.mod h1:vq/GQR1gOFLquZMSrxUK/cpvKCNVYibNyJ1m7JrU88E= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.32.0 h1:ywQF2N4VjqX+Psw+jLjMmUL2g1RDHlvri3NxHA08MGI= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.32.0/go.mod h1:Z+qv5Q6b7sWiclvbJyPSOT1BRVU9wfSUPaqQzZ1Xg3E= +github.com/aws/aws-sdk-go-v2/service/sts v1.34.0 h1:NFOJ/NXEGV4Rq//71Hs1jC/NvPs1ezajK+yQmkwnPV0= +github.com/aws/aws-sdk-go-v2/service/sts v1.34.0/go.mod h1:7ph2tGpfQvwzgistp2+zga9f+bCjlQJPkPUmMgDSD7w= +github.com/aws/aws-sdk-go-v2/service/sts v1.36.0 h1:bRP/a9llXSSgDPk7Rqn5GD/DQCGo6uk95plBFKoXt2M= +github.com/aws/aws-sdk-go-v2/service/sts v1.36.0/go.mod h1:tgBsFzxwl65BWkuJ/x2EUs59bD4SfYKgikvFDJi1S58= +github.com/aws/smithy-go v1.22.5 h1:P9ATCXPMb2mPjYBgueqJNCA5S9UfktsW0tTxi+a7eqw= +github.com/aws/smithy-go v1.22.5/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI= +github.com/aws/smithy-go v1.23.0 h1:8n6I3gXzWJB2DxBDnfxgBaSX6oe0d/t10qGz7OKqMCE= +github.com/aws/smithy-go v1.23.0/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI= +github.com/aws/smithy-go v1.23.1 h1:sLvcH6dfAFwGkHLZ7dGiYF7aK6mg4CgKA/iDKjLDt9M= +github.com/aws/smithy-go v1.23.1/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0= +github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.10.1 h1:6lMw4/QGLFPvbKQ0eri/9Oh3YX5Nm6BPrUlZR8yuJHg= +github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.10.1/go.mod h1:EVJOSYOVeoD3VFFZ/dWCAzWJp5wZr9lTOCjW8ejAmO0= github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk= github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/blacktop/go-dwarf v1.0.9 h1:eT/L7gt0gllvvgnRXY0MFKjNB6+jtOY5DTm2ynVX2dY= -github.com/blacktop/go-dwarf v1.0.9/go.mod h1:4W2FKgSFYcZLDwnR7k+apv5i3nrau4NGl9N6VQ9DSTo= -github.com/blacktop/go-macho v1.1.162 h1:FjM3XAsJTAOGZ1eppRSX9ZBX3Bk11JMTC1amsZAOA5I= -github.com/blacktop/go-macho v1.1.162/go.mod h1:f2X4noFBob4G5bWUrzvPBKDVcFWZgDCM7rIn7ygTID0= +github.com/blacktop/go-dwarf v1.0.10 h1:i9zYgcIROETsNZ6V+zZn3uDH21FCG5BLLZ837GitxS0= +github.com/blacktop/go-dwarf v1.0.10/go.mod h1:4W2FKgSFYcZLDwnR7k+apv5i3nrau4NGl9N6VQ9DSTo= +github.com/blacktop/go-macho v1.1.238 h1:OFfT6NB/SWxkoky7L/ytuY8QekgFpa9pmz/GHUQLsmM= +github.com/blacktop/go-macho v1.1.238/go.mod h1:dtlW2AJKQpFzImBVPWiUKZ6OxrQ2MLfWi/BPPe0EONE= github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb h1:m935MPodAbYS46DG4pJSv7WO+VECIWUQ7OJYSoTrMh4= github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI= -github.com/bluesky-social/indigo v0.0.0-20240411170459-440932307e0d h1:xxPhzCOpmOntzVe8S6tqsMdFgaB8B4NXSV54lG4B1qk= -github.com/bluesky-social/indigo v0.0.0-20240411170459-440932307e0d/go.mod h1:ysMQ0a4RYWjgyvKrl5ME352oHA6QgK900g5sB9XXgPE= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/bluesky-social/indigo v0.0.0-20240813042137-4006c0eca043 h1:927VIkxPFKpfJKVDtCNgSQtlhksARaLvsLxppR2FukM= +github.com/bluesky-social/indigo v0.0.0-20240813042137-4006c0eca043/go.mod h1:dXjdzg6bhg1JKnKuf6EBJTtcxtfHYBFEe9btxX5YeAE= github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= -github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/caarlos0/ctrlc v1.0.0 h1:2DtF8GSIcajgffDFJzyG15vO+1PuBWOMUdFut7NnXhw= -github.com/caarlos0/ctrlc v1.0.0/go.mod h1:CdXpj4rmq0q/1Eb44M9zi2nKB0QraNKuRGYGrrHhcQw= -github.com/caarlos0/ctrlc v1.2.0 h1:AtbThhmbeYx1WW3WXdWrd94EHKi+0NPRGS4/4pzrjwk= -github.com/caarlos0/ctrlc v1.2.0/go.mod h1:n3gDlSjsXZ7rbD9/RprIR040b7oaLfNStikPd4gFago= -github.com/caarlos0/env/v11 v11.0.1 h1:A8dDt9Ub9ybqRSUF3fQc/TA/gTam2bKT4Pit+cwrsPs= -github.com/caarlos0/env/v11 v11.0.1/go.mod h1:2RC3HQu8BQqtEK3V4iHPxj0jOdWdbPpWJ6pOueeU1xM= -github.com/caarlos0/env/v6 v6.9.1 h1:zOkkjM0F6ltnQ5eBX6IPI41UP/KDGEK7rRPwGCNos8k= -github.com/caarlos0/env/v6 v6.9.1/go.mod h1:hvp/ryKXKipEkcuYjs9mI4bBCg+UI0Yhgm5Zu0ddvwc= +github.com/caarlos0/env/v11 v11.3.1 h1:cArPWC15hWmEt+gWk7YBi7lEXTXCvpaSdCiZE2X5mCA= +github.com/caarlos0/env/v11 v11.3.1/go.mod h1:qupehSf/Y0TUTsxKywqRt/vJjN5nz6vauiYEUUr8P4U= github.com/caarlos0/go-reddit/v3 v3.0.1 h1:w8ugvsrHhaE/m4ez0BO/sTBOBWI9WZTjG7VTecHnql4= github.com/caarlos0/go-reddit/v3 v3.0.1/go.mod h1:QlwgmG5SAqxMeQvg/A2dD1x9cIZCO56BMnMdjXLoisI= github.com/caarlos0/go-shellwords v1.0.12 h1:HWrUnu6lGbWfrDcFiHcZiwOLzHWjjrPVehULaTFgPp8= github.com/caarlos0/go-shellwords v1.0.12/go.mod h1:bYeeX1GrTLPl5cAMYEzdm272qdsQAZiaHgeF0KTk1Gw= -github.com/caarlos0/go-version v0.1.1 h1:1bikKHkGGVIIxqCmufhSSs3hpBScgHGacrvsi8FuIfc= -github.com/caarlos0/go-version v0.1.1/go.mod h1:Ze5Qx4TsBBi5FyrSKVg1Ibc44KGV/llAaKGp86oTwZ0= -github.com/caarlos0/log v0.4.4 h1:LnvgBz/ofsJ00AupP/cEfksJSZglb1L69g4Obk/sdAc= -github.com/caarlos0/log v0.4.4/go.mod h1:+AmCI9Liv5LKXmzFmFI1htuHdTTj/0R3KuoP9DMY7Mo= +github.com/caarlos0/go-version v0.2.1 h1:bJY5WRvs2RXErLKBELd1WR0U72whX8ELbKg0WtQ9/7A= +github.com/caarlos0/go-version v0.2.1/go.mod h1:X+rI5VAtJDpcjCjeEIXpxGa5+rTcgur1FK66wS0/944= +github.com/caarlos0/go-version v0.2.2 h1:5r+nlrg4H2wOVwWjqRqRRIRbZ7ytRmjC9xoMIP0a5kQ= +github.com/caarlos0/go-version v0.2.2/go.mod h1:X+rI5VAtJDpcjCjeEIXpxGa5+rTcgur1FK66wS0/944= +github.com/caarlos0/log v0.5.1 h1:uB1jhC/+HimtyyL7pxidkUWO4raKmidVuXifC4uqMf8= +github.com/caarlos0/log v0.5.1/go.mod h1:37k7VCogxsMsgpIQaca5g9eXFFrLJ5LGgA4Ng/xN85o= +github.com/caarlos0/log v0.5.2 h1:BCqfJDVfWUvilGWHdgNitoZrhbKfm6PMoxy8FvQrj/A= +github.com/caarlos0/log v0.5.2/go.mod h1:6iuOv6W/WJY0pgwt9jUw1lAkjg1RldhibmIF9fSRdGw= github.com/caarlos0/testfs v0.4.4/go.mod h1:bRN55zgG4XCUVVHZCeU+/Tz1Q6AxEJOEJTliBy+1DMk= github.com/carlmjohnson/versioninfo v0.22.5 h1:O00sjOLUAFxYQjlN/bzYTuZiS0y6fWDQjMRvwtKgwwc= github.com/carlmjohnson/versioninfo v0.22.5/go.mod h1:QT9mph3wcVfISUKd0i9sZfVrPviHuSF+cUtLjm2WSf8= github.com/cavaliergopher/cpio v1.0.1 h1:KQFSeKmZhv0cr+kawA3a0xTQCU4QxXF1vhU7P7av2KM= github.com/cavaliergopher/cpio v1.0.1/go.mod h1:pBdaqQjnvXxdS/6CvNDwIANIFSP0xRKI16PX4xejRQc= -github.com/cenkalti/backoff/v4 v4.1.2 h1:6Yo7N8UP2K6LWZnW94DLVSSrbobcWdVzAYOisuDPIFo= github.com/cenkalti/backoff/v4 v4.1.2/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= -github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +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/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20180118203423-deb3ae2ef261/go.mod h1:GJKEexRPVJrBSOjoqN5VNOIKJ5Q3RViH6eu3puDRwx4= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/charmbracelet/bubbletea v0.22.1 h1:z66q0LWdJNOWEH9zadiAIXp2GN1AWrwNXU8obVY9X24= -github.com/charmbracelet/bubbletea v0.22.1/go.mod h1:8/7hVvbPN6ZZPkczLiB8YpLkLJ0n7DMho5Wvfd2X1C0= -github.com/charmbracelet/lipgloss v0.10.0 h1:KWeXFSexGcfahHX+54URiZGkBFazf70JNMtwg/AFW3s= -github.com/charmbracelet/lipgloss v0.10.0/go.mod h1:Wig9DSfvANsxqkRsqj6x87irdy123SR4dOXlKa91ciE= -github.com/charmbracelet/x/exp/ordered v0.0.0-20231010190216-1cb11efc897d h1:+o+e/8hf7cG0SbAzEAm/usJ8qoZPgFXhudLjop+TM0g= -github.com/charmbracelet/x/exp/ordered v0.0.0-20231010190216-1cb11efc897d/go.mod h1:aoG4bThKYIOnyB55r202eHqo6TkN7ZXV+cu4Do3eoBQ= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/charmbracelet/bubbletea v1.3.0 h1:fPMyirm0u3Fou+flch7hlJN9krlnVURrkUVDwqXjoAc= +github.com/charmbracelet/bubbletea v1.3.0/go.mod h1:eTaHfqbIwvBhFQM/nlT1NsGc4kp8jhF8LfUK67XiTDM= +github.com/charmbracelet/colorprofile v0.3.1 h1:k8dTHMd7fgw4bnFd7jXTLZrSU/CQrKnL3m+AxCzDz40= +github.com/charmbracelet/colorprofile v0.3.1/go.mod h1:/GkGusxNs8VB/RSOh3fu0TJmQ4ICMMPApIIVn0KszZ0= +github.com/charmbracelet/colorprofile v0.3.2 h1:9J27WdztfJQVAQKX2WOlSSRB+5gaKqqITmrvb1uTIiI= +github.com/charmbracelet/colorprofile v0.3.2/go.mod h1:mTD5XzNeWHj8oqHb+S1bssQb7vIHbepiebQ2kPKVKbI= +github.com/charmbracelet/fang v0.3.0 h1:Be6TB+ExS8VWizTQRJgjqbJBudKrmVUet65xmFPGhaA= +github.com/charmbracelet/fang v0.3.0/go.mod h1:b0ZfEXZeBds0I27/wnTfnv2UVigFDXHhrFNwQztfA0M= +github.com/charmbracelet/fang v0.4.0 h1:boBxmdcFghTeotqkD2itXi7SMBozdIlcslRqjboSJDg= +github.com/charmbracelet/fang v0.4.0/go.mod h1:9gCUAHmVx5BwSafeyNr3GI0GgvlB1WYjL21SkPp1jyU= +github.com/charmbracelet/fang v0.4.3 h1:qXeMxnL4H6mSKBUhDefHu8NfikFbP/MBNTfqTrXvzmY= +github.com/charmbracelet/fang v0.4.3/go.mod h1:wHJKQYO5ReYsxx+yZl+skDtrlKO/4LLEQ6EXsdHhRhg= +github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY= +github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30= +github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.3 h1:W6DpZX6zSkZr0iFq6JVh1vItLoxfYtNlaxOJtWp8Kis= +github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.3/go.mod h1:65HTtKURcv/ict9ZQhr6zT84JqIjMcJbyrZYHHKNfKA= +github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.3.0.20250917201909-41ff0bf215ea h1:g1HfUgSMvye8mgecMD1mPscpt+pzJoDEiSA+p2QXzdQ= +github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.3.0.20250917201909-41ff0bf215ea/go.mod h1:ngHerf1JLJXBrDXdphn5gFrBPriCL437uwukd5c93pM= +github.com/charmbracelet/lipgloss/v2 v2.0.0-beta1 h1:SOylT6+BQzPHEjn15TIzawBPVD0QmhKXbcb3jY0ZIKU= +github.com/charmbracelet/lipgloss/v2 v2.0.0-beta1/go.mod h1:tRlx/Hu0lo/j9viunCN2H+Ze6JrmdjQlXUQvvArgaOc= +github.com/charmbracelet/ultraviolet v0.0.0-20250915111650-81d4262876ef h1:VrWaUi2LXYLjfjCHowdSOEc6dQ9Ro14KY7Bw4IWd19M= +github.com/charmbracelet/ultraviolet v0.0.0-20250915111650-81d4262876ef/go.mod h1:AThRsQH1t+dfyOKIwXRoJBniYFQUkUpQq4paheHMc2o= +github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE= +github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q= +github.com/charmbracelet/x/ansi v0.10.1 h1:rL3Koar5XvX0pHGfovN03f5cxLbCF2YvLeyz7D2jVDQ= +github.com/charmbracelet/x/ansi v0.10.1/go.mod h1:3RQDQ6lDnROptfpWuUVIUG64bD2g2BgntdxH0Ya5TeE= +github.com/charmbracelet/x/cellbuf v0.0.13 h1:/KBBKHuVRbq1lYx5BzEHBAFBP8VcQzJejZ/IA3iR28k= +github.com/charmbracelet/x/cellbuf v0.0.13/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs= +github.com/charmbracelet/x/exp/charmtone v0.0.0-20250603201427-c31516f43444 h1:IJDiTgVE56gkAGfq0lBEloWgkXMk4hl/bmuPoicI4R0= +github.com/charmbracelet/x/exp/charmtone v0.0.0-20250603201427-c31516f43444/go.mod h1:T9jr8CzFpjhFVHjNjKwbAD7KwBNyFnj2pntAO7F2zw0= +github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ= +github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg= +github.com/charmbracelet/x/termios v0.1.1 h1:o3Q2bT8eqzGnGPOYheoYS8eEleT5ZVNYNy8JawjaNZY= +github.com/charmbracelet/x/termios v0.1.1/go.mod h1:rB7fnv1TgOPOyyKRJ9o+AsTU/vK5WHJ2ivHeut/Pcwo= +github.com/charmbracelet/x/windows v0.2.2 h1:IofanmuvaxnKHuV04sC0eBy/smG6kIKrWG2/jYn2GuM= +github.com/charmbracelet/x/windows v0.2.2/go.mod h1:/8XtdKZzedat74NQFn0NGlGL4soHB0YQZrETF96h75k= github.com/chrismellard/docker-credential-acr-env v0.0.0-20230304212654-82a0ddb27589 h1:krfRl01rzPzxSxyLyrChD+U+MzsBXbm0OwYYB67uF+4= github.com/chrismellard/docker-credential-acr-env v0.0.0-20230304212654-82a0ddb27589/go.mod h1:OuDyvmLnMCwa2ep4Jkm6nyA0ocJuZlGyk2gGseVzERM= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= -github.com/cloudflare/circl v1.3.8 h1:j+V8jJt09PoeMFIu2uh5JUyEaIHTXVOHslFoLNAKqwI= -github.com/cloudflare/circl v1.3.8/go.mod h1:PDRU+oXvdD7KCtgKxW95M5Z8BpSCJXQORiZFnBQS5QU= +github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0= +github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= -github.com/containerd/console v1.0.4 h1:F2g4+oChYvBTsASRTz8NP6iIAi97J3TtSAsLbIFn4ro= -github.com/containerd/console v1.0.4/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk= -github.com/containerd/stargz-snapshotter/estargz v0.14.3 h1:OqlDCK3ZVUO6C3B/5FSkDwbkEETK84kQgEeFwDC+62k= -github.com/containerd/stargz-snapshotter/estargz v0.14.3/go.mod h1:KY//uOCIkSuNAHhJogcZtrNHdKrA99/FCCRjE3HD36o= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cncf/xds/go v0.0.0-20250326154945-ae57f3c0d45f h1:C5bqEmzEPLsHm9Mv73lSE9e9bKV23aB1vxOsmZrkl3k= +github.com/cncf/xds/go v0.0.0-20250326154945-ae57f3c0d45f/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 h1:aQ3y1lwWyqYPiWZThqv1aFbZMiM9vblcSArJRf2Irls= +github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +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/stargz-snapshotter/estargz v0.16.3 h1:7evrXtoh1mSbGj/pfRccTampEyKpjpOnS3CyiV1Ebr8= +github.com/containerd/stargz-snapshotter/estargz v0.16.3/go.mod h1:uyr4BfYfOj3G9WBVE8cOlQmXAbPN9VEQpBBeJIuOipU= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.1 h1:r/myEWzV9lfsM1tFLgDyu0atFtJ1fXn261LKYj/3DxU= -github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= -github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= -github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo= +github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/cyberphone/json-canonicalization v0.0.0-20241213102144-19d51d7fe467 h1:uX1JmpONuD549D73r6cgnxyUu18Zb7yHAy5AYU0Pm4Q= +github.com/cyberphone/json-canonicalization v0.0.0-20241213102144-19d51d7fe467/go.mod h1:uzvlm1mxhHkdfqitSA92i7Se+S9ksOn3a3qmv/kyOCw= +github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s= +github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davidmz/go-pageant v1.0.2 h1:bPblRCh5jGU+Uptpz6LgMZGD5hJoOt7otgT454WvHn0= github.com/davidmz/go-pageant v1.0.2/go.mod h1:P2EDDnMqIwG5Rrp05dTRITj9z2zpGcD9efWSkTNKLIE= -github.com/denisenkom/go-mssqldb v0.9.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= -github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= github.com/dghubble/go-twitter v0.0.0-20211115160449-93a8679adecb h1:7ENzkH+O3juL+yj2undESLTaAeRllHwCs/b8z6aWSfc= github.com/dghubble/go-twitter v0.0.0-20211115160449-93a8679adecb/go.mod h1:qhZBgV9e4WyB1JNjHpcXVkUe3knWUwYuAPB1hITdm50= -github.com/dghubble/oauth1 v0.7.1 h1:JjbOVSVVkms9A4h/sTQy5Jb2nFuAAVb2qVYgenJPyrE= -github.com/dghubble/oauth1 v0.7.1/go.mod h1:0eEzON0UY/OLACQrmnjgJjmvCGXzjBCsZqL1kWDXtF0= github.com/dghubble/oauth1 v0.7.3 h1:EkEM/zMDMp3zOsX2DC/ZQ2vnEX3ELK0/l9kb+vs4ptE= github.com/dghubble/oauth1 v0.7.3/go.mod h1:oxTe+az9NSMIucDPDCCtzJGsPhciJV33xocHfcR2sVY= github.com/dghubble/sling v1.4.0 h1:/n8MRosVTthvMbwlNZgLx579OGVjUOy3GNEv5BIqAWY= github.com/dghubble/sling v1.4.0/go.mod h1:0r40aNsU9EdDUVBNhfCstAtFgutjgJGYbO1oNzkMoM8= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= +github.com/digitorus/pkcs7 v0.0.0-20230713084857-e76b763bdc49/go.mod h1:SKVExuS+vpu2l9IoOc0RwqE7NYnb0JlcFHFnEJkVDzc= +github.com/digitorus/pkcs7 v0.0.0-20230818184609-3a137a874352 h1:ge14PCmCvPjpMQMIAH7uKg0lrtNSOdpYsRXlwk3QbaE= +github.com/digitorus/pkcs7 v0.0.0-20230818184609-3a137a874352/go.mod h1:SKVExuS+vpu2l9IoOc0RwqE7NYnb0JlcFHFnEJkVDzc= +github.com/digitorus/timestamp v0.0.0-20231217203849-220c5c2851b7 h1:lxmTCgmHE1GUYL7P0MlNa00M67axePTq+9nBSGddR8I= +github.com/digitorus/timestamp v0.0.0-20231217203849-220c5c2851b7/go.mod h1:GvWntX9qiTlOud0WkQ6ewFm0LPy5JUR1Xo0Ngbd1w6Y= github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U= github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= -github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= -github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/cli v25.0.4+incompatible h1:DatRkJ+nrFoYL2HZUzjM5Z5sAmcA5XGp+AW0oEw2+cA= -github.com/docker/cli v25.0.4+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +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 v28.2.2+incompatible h1:qzx5BNUDFqlvyq4AHzdNB7gSyVTmU4cgsyN9SdInc1A= +github.com/docker/cli v28.2.2+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v26.1.3+incompatible h1:lLCzRbrVZrljpVNobJu1J2FHk8V0s4BawoZippkc+xo= -github.com/docker/docker v26.1.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker-credential-helpers v0.8.1 h1:j/eKUktUltBtMzKqmfLB0PAgqYyMHOp5vfsD1807oKo= -github.com/docker/docker-credential-helpers v0.8.1/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= -github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/docker v28.3.3+incompatible h1:Dypm25kh4rmk49v1eiVbsAtpAsYURjYkaKubwuBdxEI= +github.com/docker/docker v28.3.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v28.5.1+incompatible h1:Bm8DchhSD2J6PsFzxC35TZo4TLGR2PdW/E69rU45NhM= +github.com/docker/docker v28.5.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.9.3 h1:gAm/VtF9wgqJMoxzT3Gj5p4AqIjCBS4wrsOh9yRqcz8= +github.com/docker/docker-credential-helpers v0.9.3/go.mod h1:x+4Gbw9aGmChi3qTLZj8Dfn0TD20M/fuWy0E5+WDeCo= +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/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/elliotchance/orderedmap/v2 v2.2.0 h1:7/2iwO98kYT4XkOjA9mBEIwvi4KpGB4cyHeOFOnj4Vk= -github.com/elliotchance/orderedmap/v2 v2.2.0/go.mod h1:85lZyVbpGaGvHvnKa7Qhx7zncAdBIBq6u56Hb1PRU5Q= -github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane/envoy v1.32.4 h1:jb83lalDRZSpPWW2Z7Mck/8kXZ5CQAFYVjQcdVIr83A= +github.com/envoyproxy/go-control-plane/envoy v1.32.4/go.mod h1:Gzjc5k8JcJswLjAx1Zm+wSYE20UrLtt7JZMWiWQXQEw= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= -github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= -github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= +github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= +github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4= +github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM= +github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU= +github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM= github.com/fatih/set v0.2.1/go.mod h1:+RKtMCH+favT2+3YecHGxcc0b4KyVWA1QWWJUs4E0CI= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= -github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= -github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= -github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= -github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= +github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM= +github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8= github.com/github/smimesign v0.2.0 h1:Hho4YcX5N1I9XNqhq0fNx0Sts8MhLonHd+HRXVGNjvk= github.com/github/smimesign v0.2.0/go.mod h1:iZiiwNT4HbtGRVqCQu7uJPEZCuEE5sfSSttcnePkDl4= -github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/go-chi/chi v4.1.2+incompatible h1:fGFk2Gmi/YKXk0OmGfBh0WgmN3XB8lVnEyNz34tQRec= +github.com/go-chi/chi v4.1.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= +github.com/go-chi/chi/v5 v5.2.2 h1:CMwsvRVTbXVytCk1Wd72Zy1LAsAh9GxMmSNWLHCG618= +github.com/go-chi/chi/v5 v5.2.2/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops= github.com/go-fed/httpsig v1.1.0 h1:9M+hb0jkEICD8/cAiNqEB66R87tTINszBRTjwjQzWcI= github.com/go-fed/httpsig v1.1.0/go.mod h1:RCMrTZvN1bJYtofsG4rd5NaO5obxQ5xBkdiS7xsT7bM= -github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= -github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= -github.com/go-git/go-billy/v5 v5.0.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-billy/v5 v5.3.1 h1:CPiOUAzKtMRvolEKw+bG1PLRpT7D3LIs3/3ey4Aiu34= -github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= -github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= -github.com/go-git/go-git-fixtures/v4 v4.0.2-0.20200613231340-f56387b50c12/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= -github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= -github.com/go-git/go-git/v5 v5.2.0/go.mod h1:kh02eMX+wdqqxgNMEyq8YgwlIOsDOa9homkUq1PoTMs= -github.com/go-git/go-git/v5 v5.4.2 h1:BXyZu9t0VkbiHtqrsvdq39UDhGJTl1h55VW6CSC4aY4= -github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= -github.com/go-git/go-git/v5 v5.12.0 h1:7Md+ndsjrzZxbddRDZjF14qK+NN56sy6wkqaVrjZtys= -github.com/go-git/go-git/v5 v5.12.0/go.mod h1:FTM9VKtnI2m65hNI/TenDDDnUf2Q9FHnXYjuz9i5OEY= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM= +github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU= +github.com/go-git/go-git/v5 v5.14.0 h1:/MD3lCrGjCen5WfEAzKg00MJJffKhC8gzS80ycmCi60= +github.com/go-git/go-git/v5 v5.14.0/go.mod h1:Z5Xhoia5PcWA3NF8vRLURn9E5FRhSl7dGj9ItW3Wk5k= +github.com/go-git/go-git/v5 v5.16.1 h1:TuxMBWNL7R05tXsUGi0kh1vi4tq0WfXNLlIrAkXG1k8= +github.com/go-git/go-git/v5 v5.16.1/go.mod h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8= +github.com/go-jose/go-jose/v4 v4.1.0 h1:cYSYxd3pw5zd2FSXk2vGdn9igQU2PS8MuxrCOCl0FdY= +github.com/go-jose/go-jose/v4 v4.1.0/go.mod h1:GG/vqmYm3Von2nYiB2vGTXzdoNKE5tix5tuc6iAd+sw= +github.com/go-jose/go-jose/v4 v4.1.1 h1:JYhSgy4mXXzAdF3nUx3ygx347LRXJRrpgyU3adRmkAI= +github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/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-openapi/analysis v0.23.0 h1:aGday7OWupfMs+LbmLZG4k0MYXIANxcuBTYUC03zFCU= github.com/go-openapi/analysis v0.23.0/go.mod h1:9mz9ZWaSlV8TvjQHLl2mUW2PbZtemkE8yA5v22ohupo= -github.com/go-openapi/errors v0.22.0 h1:c4xY/OLxUBSTiepAg3j/MHuAv5mJhnf53LLMWFB+u/w= -github.com/go-openapi/errors v0.22.0/go.mod h1:J3DmZScxCDufmIMsdOuDHxJbdOGC0xtUynjIx092vXE= -github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= -github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/errors v0.22.1 h1:kslMRRnK7NCb/CvR1q1VWuEQCEIsBGn5GgKD9e+HYhU= +github.com/go-openapi/errors v0.22.1/go.mod h1:+n/5UdIqdVnLIJ6Q9Se8HNGUXYaY6CN8ImWzfi/Gzp0= +github.com/go-openapi/errors v0.22.2 h1:rdxhzcBUazEcGccKqbY1Y7NS8FDcMyIRr0934jrYnZg= +github.com/go-openapi/errors v0.22.2/go.mod h1:+n/5UdIqdVnLIJ6Q9Se8HNGUXYaY6CN8ImWzfi/Gzp0= +github.com/go-openapi/jsonpointer v0.21.1 h1:whnzv/pNXtK2FbX/W9yJfRmE2gsmkfahjMKB0fZvcic= +github.com/go-openapi/jsonpointer v0.21.1/go.mod h1:50I1STOfbY1ycR8jGz8DaMeLCdXiI6aDteEdRNNzpdk= github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= github.com/go-openapi/loads v0.22.0 h1:ECPGd4jX1U6NApCGG1We+uEozOAvXvJSF4nnwHZ8Aco= @@ -515,249 +449,136 @@ github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9Z github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk= github.com/go-openapi/strfmt v0.23.0 h1:nlUS6BCqcnAk0pyhi9Y+kdDVZdZMHfEKQiS4HaMgO/c= github.com/go-openapi/strfmt v0.23.0/go.mod h1:NrtIpfKtWIygRkKVsxh7XQMDQW5HKQl6S5ik2elW+K4= -github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= -github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= +github.com/go-openapi/swag v0.23.1 h1:lpsStH0n2ittzTnbaSloVZLuB5+fvSY/+hnagBjSNZU= +github.com/go-openapi/swag v0.23.1/go.mod h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDqQnDHMef0= github.com/go-openapi/validate v0.24.0 h1:LdfDKwNbpB6Vn40xhTdNZAnfLECL81w+VX3BumrGD58= github.com/go-openapi/validate v0.24.0/go.mod h1:iyeX1sEufmv3nPbBdX3ieNviWnOZaJ1+zquzJEf2BAQ= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-restruct/restruct v1.2.0-alpha h1:2Lp474S/9660+SJjpVxoKuWX09JsXHSrdV7Nv3/gkvc= github.com/go-restruct/restruct v1.2.0-alpha/go.mod h1:KqrpKpn4M8OLznErihXTGLlsXFGeLxHUrLRRI/1YjGk= -github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-telegram-bot-api/telegram-bot-api v4.6.4+incompatible h1:2cauKuaELYAEARXRkq2LrJ0yDDv1rW7+wrTEdVL3uaU= -github.com/go-telegram-bot-api/telegram-bot-api v4.6.4+incompatible/go.mod h1:qf9acutJ8cwBUhm1bqgz6Bei9/C/c93FPDljKWwsOgM= github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1 h1:wG8n/XJQ07TmjbITcGiUaOtXxdrINDz1b0J1w0SzqDc= github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1/go.mod h1:A2S0CWkNylc2phvKXWBBdD3K0iGnDBGbzRpISP2zBl8= -github.com/go-test/deep v1.0.4/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= +github.com/go-viper/mapstructure/v2 v2.3.0 h1:27XbWsHIqhbdR5TIC911OfYvgSaW93HM+dX7970Q7jk= +github.com/go-viper/mapstructure/v2 v2.3.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= +github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= -github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v4 v4.0.0 h1:RAqyYixv1p7uEnocuy8P1nru5wprCh/MH2BIlW5z5/o= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= -github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= -github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI= +github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= +github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang-jwt/jwt/v5 v5.2.3 h1:kkGXqQOBSDDWRhWNXTFpqGSCMyh/PLnqUvMGJPDJDs0= +github.com/golang-jwt/jwt/v5 v5.2.3/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= 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.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/certificate-transparency-go v1.3.1 h1:akbcTfQg0iZlANZLn0L9xOeWtyCIdeoYhKrqi5iH3Go= +github.com/google/certificate-transparency-go v1.3.1/go.mod h1:gg+UQlx6caKEDQ9EElFOujyxEQEfOiQzAt6782Bvi8k= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= 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.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.19.1 h1:yMQ62Al6/V0Z7CqIrrS1iYoA5/oQCm88DeNujc7C1KY= -github.com/google/go-containerregistry v0.19.1/go.mod h1:YCMFNQeeXeLF+dnhhWkqDItx/JSkH01j1Kis4PsjzFI= -github.com/google/go-github/v43 v43.0.0 h1:y+GL7LIsAIF2NZlJ46ZoC/D1W1ivZasT0lnWHMYPZ+U= -github.com/google/go-github/v43 v43.0.0/go.mod h1:ZkTvvmCXBvsfPpTHXnH/d2hP9Y0cTbvN9kr5xqyXOIc= -github.com/google/go-github/v62 v62.0.0 h1:/6mGCaRywZz9MuHyw9gD1CwsbmBX8GWsbFkwMmHdhl4= -github.com/google/go-github/v62 v62.0.0/go.mod h1:EMxeUqGJq2xRu9DYBMwel/mr7kZrzUOfQmmpYrZn2a4= +github.com/google/go-containerregistry v0.20.6 h1:cvWX87UxxLgaH76b4hIvya6Dzz9qHB31qAwjAohdSTU= +github.com/google/go-containerregistry v0.20.6/go.mod h1:T0x8MuoAoKX/873bkeSfLD2FAkwCDf9/HZgsFJ02E2Y= +github.com/google/go-github/v74 v74.0.0 h1:yZcddTUn8DPbj11GxnMrNiAnXH14gNs559AsUpNpPgM= +github.com/google/go-github/v74 v74.0.0/go.mod h1:ubn/YdyftV80VPSI26nSJvaEsTOnsjrxG3o9kJhcyak= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= -github.com/google/go-replayers/grpcreplay v1.1.0/go.mod h1:qzAvJ8/wi57zq7gWqaE6AwLM6miiXUQwP1S+I9icmhk= -github.com/google/go-replayers/httpreplay v1.0.0/go.mod h1:LJhKoTwS5Wy5Ld/peq8dFFG5OfJyHEz7ft+DsTUv25M= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/ko v0.15.4 h1:0blRbIdPmSy6v4LvedGxbI/8krdJYQgbSih3v6Y8V1c= -github.com/google/ko v0.15.4/go.mod h1:ZkcmfV91Xt6ZzOBHc/cXXGYnqWdNWDVy/gHoUU9sjag= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210506205249-923b5ab0fc1a/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210715191844-86eeefc3e471/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/jsonschema-go v0.3.0 h1:6AH2TxVNtk3IlvkkhjrtbUc4S8AvO0Xii0DxIygDg+Q= +github.com/google/jsonschema-go v0.3.0/go.mod h1:r5quNTdLOYEz95Ru18zA0ydNbBuYoo9tgaYcxEYhJVE= +github.com/google/ko v0.18.0 h1:jkF5Fkvm+SMtqTt/SMzsCJO+6hz7FSDE6GRldGn0VVI= +github.com/google/ko v0.18.0/go.mod h1:iR0zT5aR4pINW9tk2Ujj99dBJ7cVy4to9ZirAkGKb9g= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/rpmpack v0.0.0-20220314092521-38642b5e571e h1:6Jn9JtfCn20uycra92LxTkq5yfBKNSFlRJPBk8/Cxhg= -github.com/google/rpmpack v0.0.0-20220314092521-38642b5e571e/go.mod h1:83rLnx5vhPyN/mDzBYJWtiPf+9xnSVQynTpqZWe7OnY= -github.com/google/rpmpack v0.6.1-0.20240329070804-c2247cbb881a h1:JJBdjSfqSy3mnDT0940ASQFghwcZ4y4cb6ttjAoXqwE= -github.com/google/rpmpack v0.6.1-0.20240329070804-c2247cbb881a/go.mod h1:uqVAUVQLq8UY2hCDfmJ/+rtO3aw7qyhc90rCVEabEfI= -github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= -github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= -github.com/google/safetext v0.0.0-20220905092116-b49f7bc46da2 h1:SJ+NtwL6QaZ21U+IrK7d0gGgpjGGvd2kz+FzTHVzdqI= -github.com/google/safetext v0.0.0-20220905092116-b49f7bc46da2/go.mod h1:Tv1PlzqC9t8wNnpPdctvtSUOPUUg4SHeE6vR1Ir2hmg= -github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= +github.com/google/rpmpack v0.7.0 h1:mA2Yd3/dOmao1ype0DJA8DFquEpslaleywOuglVCrUs= +github.com/google/rpmpack v0.7.0/go.mod h1:uqVAUVQLq8UY2hCDfmJ/+rtO3aw7qyhc90rCVEabEfI= +github.com/google/rpmpack v0.7.1 h1:YdWh1IpzOjBz60Wvdw0TU0A5NWP+JTVHA5poDqwMO2o= +github.com/google/rpmpack v0.7.1/go.mod h1:h1JL16sUTWCLI/c39ox1rDaTBo3BXUQGjczVJyK4toU= +github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= +github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= +github.com/google/safetext v0.0.0-20240722112252-5a72de7e7962 h1:+9C/TgFfcCmZBV7Fjb3kQCGlkpFrhtvFDgbdQHB9RaA= +github.com/google/safetext v0.0.0-20240722112252-5a72de7e7962/go.mod h1:H3K1Iu/utuCfa10JO+GsmKUYSWi7ug57Rk6GaDRHaaQ= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 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/google/wire v0.5.0 h1:I7ELFeVBr3yfPIcc8+MWvrjk+3VjbcSzoXm3JVa+jD8= -github.com/google/wire v0.5.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= github.com/google/wire v0.6.0 h1:HBkoIh4BdSxoyo9PveV8giw7ZsaBOvzWKfcg/6MrVwI= github.com/google/wire v0.6.0/go.mod h1:F4QhpQ9EDIdJ1Mbop/NZBRB+5yrR6qg3BnctaoUk6NA= -github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= -github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.1.0 h1:6DWmvNpomjL1+3liNSZbVns3zsYzzCjm6pRBO1tLeso= -github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.12.3 h1:5/zPPDvw8Q1SuXjrqrZslrqT7dL/uJT2CQii/cLCKqA= -github.com/googleapis/gax-go/v2 v2.12.3/go.mod h1:AKloxT6GtNbaLm8QTNSidHUVsHYcBHwWRvkNFJUQcS4= +github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU9uHLo7OnF5tL52HFAgMmyrf4= +github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= +github.com/googleapis/gax-go/v2 v2.14.2 h1:eBLnkZ9635krYIPD+ag1USrOAI0Nr0QYF3+/3GqO0k0= +github.com/googleapis/gax-go/v2 v2.14.2/go.mod h1:ON64QhlJkhVtSqp4v1uaK92VyZ2gmvDQsweuyLV+8+w= +github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo= +github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc= github.com/gookit/color v1.2.5/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/goreleaser/chglog v0.1.2 h1:tdzAb/ILeMnphzI9zQ7Nkq+T8R9qyXli8GydD8plFRY= -github.com/goreleaser/chglog v0.1.2/go.mod h1:tTZsFuSZK4epDXfjMkxzcGbrIOXprf0JFp47BjIr3B8= -github.com/goreleaser/chglog v0.6.1 h1:NZKiX8l0FTQPRzBgKST7knvNZmZ04f7PEGkN2wInfhE= -github.com/goreleaser/chglog v0.6.1/go.mod h1:Bnnfo07jMZkaAb0uRNASMZyOsX6ROW6X1qbXqN3guUo= +github.com/goreleaser/chglog v0.7.0 h1:/KzXWAeg4DrEz4r3OI6K2Yb8RAsVGeInCUfLWFXL9C0= +github.com/goreleaser/chglog v0.7.0/go.mod h1:2h/yyq9xvTUeM9tOoucBP+jri8Dj28splx+SjlYkklc= +github.com/goreleaser/chglog v0.7.3 h1:eCKJrvsDgG+F1F2fhwM6qX+S5yMiZgsQ4VNTPFl9qEM= +github.com/goreleaser/chglog v0.7.3/go.mod h1:HXPf4avc1kTD00a46LuTEH0i1dZctLq8Xs2BxUfROnY= github.com/goreleaser/fileglob v1.3.0 h1:/X6J7U8lbDpQtBvGcwwPS6OpzkNVlVEsFUVRx9+k+7I= github.com/goreleaser/fileglob v1.3.0/go.mod h1:Jx6BoXv3mbYkEzwm9THo7xbr5egkAraxkGorbJb4RxU= -github.com/goreleaser/goreleaser v1.8.3 h1:4vP28LV1VOL+mtEVvejCkN6KD1OU++7YNCh9dojxcO0= -github.com/goreleaser/goreleaser v1.8.3/go.mod h1:DpiLDZkJQ1bbKW0ipWPJApOp8T4naqqk9nxyldGRy4k= -github.com/goreleaser/goreleaser v1.26.2 h1:1iY1HaXtRiMTrwy6KE1sNjkRjsjMi+9l0k6WUX8GpWw= -github.com/goreleaser/goreleaser v1.26.2/go.mod h1:mHi6zr6fuuOh5eHdWWgyo/N8BWED5WEVtb/4GETc9jQ= -github.com/goreleaser/nfpm/v2 v2.15.1 h1:OdscWscGNR4aBepj2S5p6JUHWFd3CJdTJlSq7UqMMTY= -github.com/goreleaser/nfpm/v2 v2.15.1/go.mod h1:fpR40o+Wq6aeE5xoSZY3E23r06aLntuYIr2zBCJ1x1o= -github.com/goreleaser/nfpm/v2 v2.37.1 h1:RUmeEt8OlEVeSzKRrO5Vl5qVWCtUwx4j9uivGuRo5fw= -github.com/goreleaser/nfpm/v2 v2.37.1/go.mod h1:q8+sZXFqn106/eGw+9V+I8+izFxZ/sJjrhwmEUxXhUg= -github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= -github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/goreleaser/fileglob v1.4.0 h1:Y7zcUnzQjT1gbntacGAkIIfLv+OwojxTXBFxjSFoBBs= +github.com/goreleaser/fileglob v1.4.0/go.mod h1:1pbHx7hhmJIxNZvm6fi6WVrnP0tndq6p3ayWdLn1Yf8= +github.com/goreleaser/goreleaser/v2 v2.11.2 h1:Od6dcPI5r8IWVPnJYz6wYe3rML1qf80fLzXB1Ix6ZnY= +github.com/goreleaser/goreleaser/v2 v2.11.2/go.mod h1:NSsia+m49thkd/pX9Rz7Cq1KE8HDGrLJVoPLjFeAV/4= +github.com/goreleaser/goreleaser/v2 v2.12.0 h1:UVy62eUC6UiSEoDl4HS2l53pFl1w37cBhIOWRBUgdMY= +github.com/goreleaser/goreleaser/v2 v2.12.0/go.mod h1:h04Jk7YH6U1gwVmVu/bl+GfbsTjITi4eTHVfapwcVPw= +github.com/goreleaser/goreleaser/v2 v2.12.7 h1:C2EgMDSQQvFpaZwA4L7JuopZzrvvNuVvdHA52AyCT0M= +github.com/goreleaser/goreleaser/v2 v2.12.7/go.mod h1:T1KgP62trtw9PeXcVHD2FxOvquzVABSpmViioSD4SQA= +github.com/goreleaser/nfpm/v2 v2.43.0 h1:o5oureuZkhu55RK0M9WSN8JLW7hu6MymtMh7LypInlk= +github.com/goreleaser/nfpm/v2 v2.43.0/go.mod h1:f//PE8PjNHjaPCbd7Jkok+aPKdLTrzM+fuIWg3PfVRg= +github.com/goreleaser/nfpm/v2 v2.43.1 h1:y7i+5wlAuBqUEsTL4cZp0FjnNStoA/to9Yuju+MqZpc= +github.com/goreleaser/nfpm/v2 v2.43.1/go.mod h1:3sDxZIYoMCd3FPa44PuxWnhMtOUHEDBhsmddHAcfySw= +github.com/goreleaser/nfpm/v2 v2.43.4 h1:1gJ+V2CA21YxvJd+SSE+E0C5g8wuGHimkYK1txC5hKQ= +github.com/goreleaser/nfpm/v2 v2.43.4/go.mod h1:gj1p1m05X1WZ/6tjngIaEPGa5H+kmhkpSId2Tz9lX3g= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-retryablehttp v0.6.8 h1:92lWxgpa+fF3FozM4B3UZtHZMJX8T5XT+TFdCxsPyWs= -github.com/hashicorp/go-retryablehttp v0.6.8/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= -github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M= -github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.1 h1:zEfKbn2+PDgroKdiOzqiE8rsmLqU2uwi5PB5pBJ3TkI= -github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= -github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/go-retryablehttp v0.7.8 h1:ylXZWnqa7Lhqpk0L1P1LzDtGcCR0rPVUrx/c8Unxc48= +github.com/hashicorp/go-retryablehttp v0.7.8/go.mod h1:rjiScheydd+CxvumBsIrFKlx3iS0jrZ7LvzFGFmuKbw= +github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= +github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= -github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw= -github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/huandu/xstrings v1.3.3 h1:/Gcsuc1x8JVbJ9/rlye4xZnVAbEkGauT8lbebqcQws4= -github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= -github.com/iancoleman/orderedmap v0.2.0 h1:sq1N/TFpYH++aViPcaKjys3bDClUEU7s5B+z6jq8pNA= -github.com/iancoleman/orderedmap v0.2.0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -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/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI= +github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/in-toto/attestation v1.1.1 h1:QD3d+oATQ0dFsWoNh5oT0udQ3tUrOsZZ0Fc3tSgWbzI= +github.com/in-toto/attestation v1.1.1/go.mod h1:Dcq1zVwA2V7Qin8I7rgOi+i837wEf/mOZwRm047Sjys= +github.com/in-toto/in-toto-golang v0.9.0 h1:tHny7ac4KgtsfrG6ybU8gVOZux2H8jN05AXJ9EBM1XU= +github.com/in-toto/in-toto-golang v0.9.0/go.mod h1:xsBVrVsHNsB61++S6Dy2vWosKhuA3lUTQd+eF9HdeMo= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/invopop/jsonschema v0.12.0 h1:6ovsNSuvn9wEQVOyc72aycBMVQFKz7cPdMJn10CvzRI= -github.com/invopop/jsonschema v0.12.0/go.mod h1:ffZ5Km5SWWRAIN6wbDXItl95euhFz2uON45H2qjYt+0= +github.com/invopop/jsonschema v0.13.0 h1:KvpoAJWEjR3uD9Kbm2HWJmqsEaHt8lBUpd0qHcIi21E= +github.com/invopop/jsonschema v0.13.0/go.mod h1:ffZ5Km5SWWRAIN6wbDXItl95euhFz2uON45H2qjYt+0= github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs= github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0= github.com/ipfs/go-block-format v0.2.0 h1:ZqrkxBA2ICbDRbK8KJs/u0O3dlp6gmAuuXUJNiW1Ycs= @@ -788,149 +609,87 @@ github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOl github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= -github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jedisct1/go-minisign v0.0.0-20241212093149-d2f9f49435c7 h1:FWpSWRD8FbVkKQu8M1DM9jF5oXFLyE+XpisIYfdzbic= +github.com/jedisct1/go-minisign v0.0.0-20241212093149-d2f9f49435c7/go.mod h1:BMxO138bOokdgt4UaxZiEfypcSHX0t6SIFimVP1oRfk= +github.com/jmespath/go-jmespath v0.4.1-0.20220621161143-b0104c826a24 h1:liMMTbpW34dhU4az1GN0pTPADwNmvoRSeoZ6PItiqnY= +github.com/jmespath/go-jmespath v0.4.1-0.20220621161143-b0104c826a24/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kevinburke/ssh_config v1.1.0 h1:pH/t1WS9NzT8go394IqZeJTMHVm6Cr6ZJ6AQ+mdNo/o= -github.com/kevinburke/ssh_config v1.1.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= -github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= -github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= +github.com/klauspost/compress v1.18.1 h1:bcSGx7UbpBqMChDtsF28Lw6v/G94LPrrbMbdC3JH2co= +github.com/klauspost/compress v1.18.1/go.mod h1:ZQFFVG+MdnR0P+l6wpXgIL4NTtwiKIdBnrBd8Nrxr+0= github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= -github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= -github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/letsencrypt/boulder v0.0.0-20231026200631-000cd05d5491 h1:WGrKdjHtWC67RX96eTkYD2f53NDHhrq/7robWTAfk4s= -github.com/letsencrypt/boulder v0.0.0-20231026200631-000cd05d5491/go.mod h1:o158RFmdEbYyIZmXAbrvmJWesbyxlLKee6X64VPVuOc= -github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/letsencrypt/boulder v0.0.0-20250411005613-d800055fe666 h1:ndfLOJNaxu0fX358UKxtq2bU8IMASWi87Hn0Nv/TIoY= +github.com/letsencrypt/boulder v0.0.0-20250411005613-d800055fe666/go.mod h1:WGXwLq/jKt0kng727wv6a0h0q7TVC+MwS2S75rcqL+4= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.4/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= -github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= -github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= +github.com/lucasb-eyer/go-colorful v1.3.0 h1:2/yBRLdWBZKrf7gB40FoiKfAWYQ0lqNcbuQwVHXptag= +github.com/lucasb-eyer/go-colorful v1.3.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4= +github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= +github.com/mark3labs/mcp-go v0.36.0 h1:rIZaijrRYPeSbJG8/qNDe0hWlGrCJ7FWHNMz2SQpTis= +github.com/mark3labs/mcp-go v0.36.0/go.mod h1:T7tUa2jO6MavG+3P25Oy/jR7iCeJPHImCZHRymCn39g= +github.com/mark3labs/mcp-go v0.38.0 h1:E5tmJiIXkhwlV0pLAwAT0O5ZjUZSISE/2Jxg+6vpq4I= +github.com/mark3labs/mcp-go v0.38.0/go.mod h1:T7tUa2jO6MavG+3P25Oy/jR7iCeJPHImCZHRymCn39g= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.9 h1:sqDoxXbdeALODt0DAeJCVp38ps9ZogZEAXjus69YV3U= -github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI= -github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= -github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= -github.com/mattn/go-mastodon v0.0.8 h1:UgKs4SmQ5JeawxMIPP7NQ9xncmOXA+5q6jYk4erR7vk= -github.com/mattn/go-mastodon v0.0.8/go.mod h1:8YkqetHoAVEktRkK15qeiv/aaIMfJ/Gc89etisPZtHU= -github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= -github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= -github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mattn/go-localereader v0.0.2-0.20220822084749-2491eb6c1c75 h1:P8UmIzZMYDR+NGImiFvErt6VWfIRPuGM+vyjiEdkmIw= +github.com/mattn/go-localereader v0.0.2-0.20220822084749-2491eb6c1c75/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= +github.com/mattn/go-mastodon v0.0.10 h1:wz1d/aCkJOIkz46iv4eAqXHVreUMxydY1xBWrPBdDeE= +github.com/mattn/go-mastodon v0.0.10/go.mod h1:YBofeqh7G6s787787NQR8erBYz6fKDu+KNMrn5RuD6Y= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= -github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c h1:cqn374mizHuIWj+OSJCajGr/phAmuMug9qIX3l9CflE= +github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= 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/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modelcontextprotocol/go-sdk v1.0.0 h1:Z4MSjLi38bTgLrd/LjSmofqRqyBiVKRyQSJgw8q8V74= +github.com/modelcontextprotocol/go-sdk v1.0.0/go.mod h1:nYtYQroQ2KQiM0/SbyEPUWQ6xs4B95gJjEalc9AQyOs= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b/go.mod h1:fQuZ0gauxyBcmsdE3ZT4NasjaRdxmbCS0jRHsrWu3Ho= -github.com/muesli/ansi v0.0.0-20211031195517-c9f0611b6c70 h1:kMlmsLSbjkikxQJ1IPwaM+7LJ9ltFu/fi8CRzvSnQmA= -github.com/muesli/ansi v0.0.0-20211031195517-c9f0611b6c70/go.mod h1:fQuZ0gauxyBcmsdE3ZT4NasjaRdxmbCS0jRHsrWu3Ho= +github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI= +github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo= github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= -github.com/muesli/coral v1.0.0 h1:odyqkoEg4aJAINOzvnjN4tUsdp+Zleccs7tRIAkkYzU= -github.com/muesli/coral v1.0.0/go.mod h1:bf91M/dkp7iHQw73HOoR9PekdTJMTD6ihJgWoDitde8= github.com/muesli/mango v0.1.0 h1:DZQK45d2gGbql1arsYA4vfg4d7I9Hfx5rX/GCmzsAvI= github.com/muesli/mango v0.1.0/go.mod h1:5XFpbC8jY5UUv89YQciiXNlbi+iJgt29VDC5xbzrLL4= +github.com/muesli/mango v0.2.0 h1:iNNc0c5VLQ6fsMgAqGQofByNUBH2Q2nEbD6TaI+5yyQ= +github.com/muesli/mango v0.2.0/go.mod h1:5XFpbC8jY5UUv89YQciiXNlbi+iJgt29VDC5xbzrLL4= github.com/muesli/mango-cobra v1.2.0 h1:DQvjzAM0PMZr85Iv9LIMaYISpTOliMEg+uMFtNbYvWg= github.com/muesli/mango-cobra v1.2.0/go.mod h1:vMJL54QytZAJhCT13LPVDfkvCUJ5/4jNUKF/8NC2UjA= -github.com/muesli/mango-coral v1.0.1 h1:W3nGbUC/q5vLscQ6GPzteHZrJI1Msjw5Hns82o0xRkI= -github.com/muesli/mango-coral v1.0.1/go.mod h1:EPSlYH67AtcxQrxssNw6r/lMFxHTjuDoGfq9Uxxevhg= +github.com/muesli/mango-cobra v1.3.0 h1:vQy5GvPg3ndOSpduxutqFoINhWk3vD5K2dXo5E8pqec= +github.com/muesli/mango-cobra v1.3.0/go.mod h1:Cj1ZrBu3806Qw7UjxnAUgE+7tllUBj1NCLQDwwGx19E= github.com/muesli/mango-pflag v0.1.0 h1:UADqbYgpUyRoBja3g6LUL+3LErjpsOwaC9ywvBWe7Sg= github.com/muesli/mango-pflag v0.1.0/go.mod h1:YEQomTxaCUp8PrbhFh10UfbhbQrM/xJ4i2PB8VTLLW0= -github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= -github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= github.com/muesli/roff v0.1.0 h1:YD0lalCotmYuF5HhZliKWlIx7IEhiXeSfq7hNjFqGF8= github.com/muesli/roff v0.1.0/go.mod h1:pjAHQM9hdUUwm/krAfrLGgJkXJ+YuhtsfZ42kieB2Ig= -github.com/muesli/termenv v0.11.1-0.20220212125758-44cd13922739/go.mod h1:Bd5NYQ7pd+SrtBSrSNoBBmXlcY8+Xj4BMJgh8qcZrvs= -github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo= -github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8= +github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc= +github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk= github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE= github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI= github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0= @@ -941,759 +700,440 @@ github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7B github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM= github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -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/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= +github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pborman/getopt v0.0.0-20180811024354-2b5b3bfb099b/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= +github.com/pborman/uuid v1.2.1 h1:+ZZIw58t/ozdjRaXh/3awHfmWRbzYxJoAdNJxe/3pvw= +github.com/pborman/uuid v1.2.1/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= -github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= -github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= -github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= +github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= +github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= +github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4= +github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/polydawn/refmt v0.89.1-0.20221221234430-40501e09de1f h1:VXTQfuJj9vKR4TCkEuWIckKvdHFeJH/huIFJ9/cXOB0= github.com/polydawn/refmt v0.89.1-0.20221221234430-40501e09de1f/go.mod h1:/zvteZs/GwLtCgZ4BL6CBsk9IKIlexP43ObX9AxTqTw= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= -github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= -github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= -github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= +github.com/sagikazarmark/locafero v0.9.0 h1:GbgQGNtTrEmddYDSAH9QLRyfAHY12md+8YFTqyMTC9k= +github.com/sagikazarmark/locafero v0.9.0/go.mod h1:UBUyz37V+EdMS3hDF3QWIiVr/2dPrx49OMO0Bn0hJqk= +github.com/sassoftware/relic v7.2.1+incompatible h1:Pwyh1F3I0r4clFJXkSI8bOyJINGqpgjJU3DYAZeI05A= +github.com/sassoftware/relic v7.2.1+incompatible/go.mod h1:CWfAxv73/iLZ17rbyhIEq3K9hs5w6FpNMdUT//qR+zk= github.com/scylladb/go-set v1.0.3-0.20200225121959-cc7b2070d91e h1:7q6NSFZDeGfvvtIRwBrU/aegEYJYmvev0cHAwo17zZQ= github.com/scylladb/go-set v1.0.3-0.20200225121959-cc7b2070d91e/go.mod h1:DkpGd78rljTxKAnTDPFqXSGxvETQnJyuSOQwsHycqfs= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/secure-systems-lab/go-securesystemslib v0.8.0 h1:mr5An6X45Kb2nddcFlbmfHkLguCE9laoZCUzEEpIZXA= -github.com/secure-systems-lab/go-securesystemslib v0.8.0/go.mod h1:UH2VZVuJfCYR8WgMlCU1uFsOUU+KeyrTWcSS73NBOzU= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/secure-systems-lab/go-securesystemslib v0.9.0 h1:rf1HIbL64nUpEIZnjLZ3mcNEL9NBPB0iuVjyxvq3LZc= +github.com/secure-systems-lab/go-securesystemslib v0.9.0/go.mod h1:DVHKMcZ+V4/woA/peqr+L0joiRXbPpQ042GgJckkFgw= +github.com/secure-systems-lab/go-securesystemslib v0.9.1 h1:nZZaNz4DiERIQguNy0cL5qTdn9lR8XKHf4RUyG1Sx3g= +github.com/secure-systems-lab/go-securesystemslib v0.9.1/go.mod h1:np53YzT0zXGMv6x4iEWc9Z59uR+x+ndLwCLqPYpLXVU= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= -github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= -github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= -github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/shibumi/go-pathspec v1.3.0 h1:QUyMZhFo0Md5B8zV8x2tesohbb5kfbpTi9rBnKh5dkI= +github.com/shibumi/go-pathspec v1.3.0/go.mod h1:Xutfslp817l2I1cZvgcfeMQJG5QnU2lh5tVaaMCl3jE= +github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= +github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sigstore/cosign/v2 v2.2.4 h1:iY4vtEacmu2hkNj1Fh+8EBqBwKs2DHM27/lbNWDFJro= -github.com/sigstore/cosign/v2 v2.2.4/go.mod h1:JZlRD2uaEjVAvZ1XJ3QkkZJhTqSDVtLaet+C/TMR81Y= -github.com/sigstore/rekor v1.3.6 h1:QvpMMJVWAp69a3CHzdrLelqEqpTM3ByQRt5B5Kspbi8= -github.com/sigstore/rekor v1.3.6/go.mod h1:JDTSNNMdQ/PxdsS49DJkJ+pRJCO/83nbR5p3aZQteXc= -github.com/sigstore/sigstore v1.8.3 h1:G7LVXqL+ekgYtYdksBks9B38dPoIsbscjQJX/MGWkA4= -github.com/sigstore/sigstore v1.8.3/go.mod h1:mqbTEariiGA94cn6G3xnDiV6BD8eSLdL/eA7bvJ0fVs= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sigstore/cosign/v2 v2.5.0 h1:1aRfPgRQHHlODI3Mvs/JkPBS9dJT9bRLCuHZgnHxFt8= +github.com/sigstore/cosign/v2 v2.5.0/go.mod h1:2V2hmo+jjFNnDb5Q5VL6PXvLU9Vujio7T5yldrpNTRw= +github.com/sigstore/protobuf-specs v0.4.1 h1:5SsMqZbdkcO/DNHudaxuCUEjj6x29tS2Xby1BxGU7Zc= +github.com/sigstore/protobuf-specs v0.4.1/go.mod h1:+gXR+38nIa2oEupqDdzg4qSBT0Os+sP7oYv6alWewWc= +github.com/sigstore/protobuf-specs v0.5.0 h1:F8YTI65xOHw70NrvPwJ5PhAzsvTnuJMGLkA4FIkofAY= +github.com/sigstore/protobuf-specs v0.5.0/go.mod h1:+gXR+38nIa2oEupqDdzg4qSBT0Os+sP7oYv6alWewWc= +github.com/sigstore/rekor v1.3.9 h1:sUjRpKVh/hhgqGMs0t+TubgYsksArZ6poLEC3MsGAzU= +github.com/sigstore/rekor v1.3.9/go.mod h1:xThNUhm6eNEmkJ/SiU/FVU7pLY2f380fSDZFsdDWlcM= +github.com/sigstore/rekor v1.4.1-0.20250814000724-cdd95725eb11 h1:IIi+uX7tOiFbmN0R6rp20UKA2A6+k2dvn2cGwOrAcgc= +github.com/sigstore/rekor v1.4.1-0.20250814000724-cdd95725eb11/go.mod h1:Ed+zP1YbreHsejbcTaLyAhdav3zsfj5qd8eOzf/TYDY= +github.com/sigstore/sigstore v1.9.3 h1:y2qlTj+vh+Or3ictKuR3JUFawZPdDxAjrWkeFhon0OQ= +github.com/sigstore/sigstore v1.9.3/go.mod h1:VwYkiw0G0dRtwL25KSs04hCyVFF6CYMd/qvNeYrl7EQ= +github.com/sigstore/sigstore v1.9.5 h1:Wm1LT9yF4LhQdEMy5A2JeGRHTrAWGjT3ubE5JUSrGVU= +github.com/sigstore/sigstore v1.9.5/go.mod h1:VtxgvGqCmEZN9X2zhFSOkfXxvKUjpy8RpUW39oCtoII= +github.com/sigstore/sigstore-go v0.7.1 h1:lyzi3AjO6+BHc5zCf9fniycqPYOt3RaC08M/FRmQhVY= +github.com/sigstore/sigstore-go v0.7.1/go.mod h1:AIRj4I3LC82qd07VFm3T2zXYiddxeBV1k/eoS8nTz0E= +github.com/sigstore/timestamp-authority v1.2.5 h1:W22JmwRv1Salr/NFFuP7iJuhytcZszQjldoB8GiEdnw= +github.com/sigstore/timestamp-authority v1.2.5/go.mod h1:gWPKWq4HMWgPCETre0AakgBzcr9DRqHrsgbrRqsigOs= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/skeema/knownhosts v1.2.2 h1:Iug2P4fLmDw9f41PB6thxUkNUkJzB5i+1/exaj40L3A= -github.com/skeema/knownhosts v1.2.2/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= -github.com/slack-go/slack v0.10.2 h1:KMN/h2sgUninHXvQI8PrR/PHBUuWp2NPvz2Kr66tki4= -github.com/slack-go/slack v0.10.2/go.mod h1:5FLdBRv7VW/d9EBxx/eEktOptWygbA9K2QK/KW7ds1s= -github.com/slack-go/slack v0.13.0 h1:7my/pR2ubZJ9912p9FtvALYpbt0cQPAqkRy2jaSI1PQ= -github.com/slack-go/slack v0.13.0/go.mod h1:hlGi5oXA+Gt+yWTPP0plCdRKmjsDxecdHxYQdlMQKOw= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= +github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8= +github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY= +github.com/slack-go/slack v0.17.3 h1:zV5qO3Q+WJAQ/XwbGfNFrRMaJ5T/naqaonyPV/1TP4g= +github.com/slack-go/slack v0.17.3/go.mod h1:X+UqOufi3LYQHDnMG1vxf0J8asC6+WllXrVrhl8/Prk= github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= -github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.7.2/go.mod h1:Vw0tHAZW6lzCRk3xgdin6fKYcG+G3Pg9vgXWeJpQFMM= -github.com/smartystreets/gunit v1.0.0/go.mod h1:qwPWnhz6pn0NnRBP++URONOVyNkPyr4SauJk4cUOwJs= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.4.1/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= -github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= -github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= -github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= -github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= -github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= -github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= +github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA= +github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo= +github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= +github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= +github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= +github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s= +github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0= +github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= +github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.7 h1:vN6T9TfwStFPFM5XzjsvmzZkLuaLX+HS+0SeFLRgU6M= +github.com/spf13/pflag v1.0.7/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY= +github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.20.1 h1:ZMi+z/lvLyPSCoNtFCpqjy0S4kPbirhpTMwl8BkW9X4= +github.com/spf13/viper v1.20.1/go.mod h1:P9Mdzt1zoHIG8m2eZQinpiBjo6kCmZSKBClNNqjJvu4= +github.com/spiffe/go-spiffe/v2 v2.5.0 h1:N2I01KCUkv1FAjZXJMwh95KK1ZIQLYbPfhaxw8WS0hE= +github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +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.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.3.1-0.20190311161405-34c6fa2dc709/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= -github.com/technoweenie/multipartstreamer v1.0.1 h1:XRztA5MXiR1TIRHxH2uNxXxaIkKQDeX7m2XsSOlQEnM= -github.com/technoweenie/multipartstreamer v1.0.1/go.mod h1:jNVxdtShOxzAsukZwTSw6MDx5eUJoiEBsSvzDU9uzog= +github.com/theupdateframework/go-tuf v0.7.0 h1:CqbQFrWo1ae3/I0UCblSbczevCCbS31Qvs5LdxRWqRI= +github.com/theupdateframework/go-tuf v0.7.0/go.mod h1:uEB7WSY+7ZIugK6R1hiBMBjQftaFzn7ZCDJcp1tCUug= +github.com/theupdateframework/go-tuf/v2 v2.0.2 h1:PyNnjV9BJNzN1ZE6BcWK+5JbF+if370jjzO84SS+Ebo= +github.com/theupdateframework/go-tuf/v2 v2.0.2/go.mod h1:baB22nBHeHBCeuGZcIlctNq4P61PcOdyARlplg5xmLA= github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 h1:e/5i7d4oYZ+C1wj2THlRK+oAhjeS/TRQwMfkIuet3w0= github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399/go.mod h1:LdwHTNJT99C5fTAzDz0ud328OgXz+gierycbcIx2fRs= -github.com/tj/assert v0.0.0-20171129193455-018094318fb0/go.mod h1:mZ9/Rh9oLWpLLDRpvE+3b7gP/C2YyLFYxNmcLnPTMe0= -github.com/tj/assert v0.0.3/go.mod h1:Ne6X72Q+TB1AteidzQncjw9PabbMp4PBMZ1k+vd1Pvk= -github.com/tj/go-buffer v1.1.0/go.mod h1:iyiJpfFcR2B9sXu7KvjbT9fpM4mOelRSDTbntVj52Uc= -github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0= -github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao= -github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tomnomnom/linkheader v0.0.0-20180905144013-02ca5825eb80 h1:nrZ3ySNYwJbSpD6ce9duiP+QkD3JuLCcWkdaehUS/3Y= github.com/tomnomnom/linkheader v0.0.0-20180905144013-02ca5825eb80/go.mod h1:iFyPdL66DjUD96XmzVL3ZntbzcflLnznH0fr99w5VqE= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/ulikunitz/xz v0.5.10 h1:t92gobL9l3HE202wg3rlk19F6X+JOxl9BBrCCMYEYd8= -github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/transparency-dev/merkle v0.0.2 h1:Q9nBoQcZcgPamMkGn7ghV8XiTZ/kRxn1yCG81+twTK4= +github.com/transparency-dev/merkle v0.0.2/go.mod h1:pqSy+OXefQ1EDUVmAJ8MUhHB9TXGuzVAT58PqBoHz1A= github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc= github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY= +github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/urfave/cli v1.22.10/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/vbatts/tar-split v0.11.5 h1:3bHCTIheBm1qFTcgh9oPu+nNBtX+XJIupG/vacinCts= -github.com/vbatts/tar-split v0.11.5/go.mod h1:yZbwRsSeGjusneWgA781EKej9HF8vme8okylkAeNKLk= +github.com/vbatts/tar-split v0.12.1 h1:CqKoORW7BUWBe7UL/iqTVvkTBOF8UvOMKOIZykxnnbo= +github.com/vbatts/tar-split v0.12.1/go.mod h1:eF6B6i6ftWQcDqEn3/iGFRFRo8cBIMSJVOpnNdfTMFA= github.com/wagoodman/go-partybus v0.0.0-20230516145632-8ccac152c651 h1:jIVmlAFIqV3d+DOxazTR9v+zgj8+VYuQBzPgBZvWBHA= github.com/wagoodman/go-partybus v0.0.0-20230516145632-8ccac152c651/go.mod h1:b26F2tHLqaoRQf8DywqzVaV1MQ9yvjb0OMcNl7Nxu20= github.com/wagoodman/go-progress v0.0.0-20220614130704-4b1c25a33c7c h1:gFwUKtkv6QzQsFdIjvPqd0Qdw42DHUEbbUdiUTI1uco= github.com/wagoodman/go-progress v0.0.0-20220614130704-4b1c25a33c7c/go.mod h1:jLXFoL31zFaHKAAyZUh+sxiTDFe1L1ZHrcK2T1itVKA= github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= -github.com/whyrusleeping/cbor-gen v0.1.1-0.20240311221002-68b9f235c302 h1:MhInbXe4SzcImAKktUvWBCWZgcw6MYf5NfumTj1BhAw= -github.com/whyrusleeping/cbor-gen v0.1.1-0.20240311221002-68b9f235c302/go.mod h1:pM99HXyEbSQHcosHc0iW7YFmwnscr+t9Te4ibko05so= +github.com/whyrusleeping/cbor-gen v0.1.3-0.20240731173018-74d74643234c h1:Jmc9fHbd0LKFmS5CkLgczNUyW36UbiyvbHCG9xCTyiw= +github.com/whyrusleeping/cbor-gen v0.1.3-0.20240731173018-74d74643234c/go.mod h1:pM99HXyEbSQHcosHc0iW7YFmwnscr+t9Te4ibko05so= github.com/wk8/go-ordered-map/v2 v2.1.8 h1:5h/BUHu93oj4gIdvHHHGsScSTMijfx5PeYkE/fJgbpc= github.com/wk8/go-ordered-map/v2 v2.1.8/go.mod h1:5nJHM5DyteebpVlHnWMV0rPz6Zp7+xBAnxjb1X5vnTw= -github.com/xanzy/go-gitlab v0.63.0 h1:a9fXpKWykUS6dowapFej/2Wjf4aOAEFC1q2ZIcz4IpI= -github.com/xanzy/go-gitlab v0.63.0/go.mod h1:F0QEXwmqiBUxCgJm8fE9S+1veX4XC9Z4cfaAbqwk4YM= -github.com/xanzy/go-gitlab v0.105.0 h1:3nyLq0ESez0crcaM19o5S//SvezOQguuIHZ3wgX64hM= -github.com/xanzy/go-gitlab v0.105.0/go.mod h1:ETg8tcj4OhrB84UEgeE8dSuV/0h4BBL1uOV/qK0vlyI= -github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= -github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= -github.com/xanzy/ssh-agent v0.3.1 h1:AmzO1SSWxw73zxFZPRwaMN1MohDw8UyHnmuxyceTEGo= -github.com/xanzy/ssh-agent v0.3.1/go.mod h1:QIE4lCeL7nkC25x+yA3LBIYfwCc1TFziCtG7cBAac6w= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= +github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4= +github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zeebo/errs v1.4.0 h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM= +github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= gitlab.com/digitalxero/go-conventional-commit v1.0.7 h1:8/dO6WWG+98PMhlZowt/YjuiKhqhGlOCwlIV8SqqGh8= gitlab.com/digitalxero/go-conventional-commit v1.0.7/go.mod h1:05Xc2BFsSyC5tKhK0y+P3bs0AwUtNuTp+mTpbCU/DZ0= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80= -go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= -go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.22.6/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +gitlab.com/gitlab-org/api/client-go v0.137.0 h1:H26yL44qnb38Czl20pEINCJrcj63W6/BX8iKPVUKQP0= +gitlab.com/gitlab-org/api/client-go v0.137.0/go.mod h1:AcAYES3lfkIS4zhso04S/wyUaWQmDYve2Fd9AF7C6qc= +gitlab.com/gitlab-org/api/client-go v0.142.5 h1:zvengEU958Fjwasi1V+9QNRw0viqNKkqUwvFD15XDZI= +gitlab.com/gitlab-org/api/client-go v0.142.5/go.mod h1:Ru5IRauphXt9qwmTzJD7ou1dH7Gc6pnsdFWEiMMpmB0= +gitlab.com/gitlab-org/api/client-go v0.157.0 h1:B+/Ku1ek3V/MInR/SmvL4FOqE0YYx51u7lBVYIHC2ic= +gitlab.com/gitlab-org/api/client-go v0.157.0/go.mod h1:CQVoxjEswJZeXft4Mi+H+OF1MVrpNVF6m4xvlPTQ2J4= +go.mongodb.org/mongo-driver v1.17.3 h1:TQyXhnsWfWtgAhMtOgtYHMTkZIfBTpMTsMnd9ZBeHxQ= +go.mongodb.org/mongo-driver v1.17.3/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= -go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= -go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= -go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= -go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= -go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= -go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= +go.opentelemetry.io/contrib/detectors/gcp v1.36.0 h1:F7q2tNlCaHY9nMKHR6XH9/qkp8FktLnIcy6jJNyOCQw= +go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k= +go.opentelemetry.io/contrib/detectors/gcp v1.38.0 h1:ZoYbqX7OaA/TAikspPl3ozPI6iY6LiIY9I8cUfm+pJs= +go.opentelemetry.io/contrib/detectors/gcp v1.38.0/go.mod h1:SU+iU7nu5ud4oCb3LQOhIZ3nRLj6FNVrKgtflbaf2ts= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 h1:x7wzEgXfnzJcHDwStJT+mxOz4etr2EcexjqhBvmoakw= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 h1:q4XOmH/0opmeuJtPsbFNivyl7bCt7yRBbeEm2sC/XtQ= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.62.0 h1:rbRJ8BBoVMsQShESYZ0FkvcITu8X8QNwJogcLUmDNNw= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.62.0/go.mod h1:ru6KHrNtNHxM4nD/vd6QrLVWgKhxPYgblq4VAtNawTQ= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 h1:Hf9xI/XLML9ElpiHVDNwvqI0hIFlzV8dgIr35kV1kRU= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0/go.mod h1:NfchwuyNoMcZ5MLHwPrODwUF1HWCXWrL31s8gSAdIKY= +go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg= +go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E= +go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= +go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= +go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE= +go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs= +go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= +go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= +go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs= +go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY= +go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= +go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= +go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis= +go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4= +go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= +go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= +go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w= +go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA= +go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= +go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/automaxprocs v1.5.3 h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8= -go.uber.org/automaxprocs v1.5.3/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= +go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= -go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -gocloud.dev v0.24.0 h1:cNtHD07zQQiv02OiwwDyVMuHmR7iQt2RLkzoAgz7wBs= -gocloud.dev v0.24.0/go.mod h1:uA+als++iBX5ShuG4upQo/3Zoz49iIPlYUWHV5mM8w8= -gocloud.dev v0.37.0 h1:XF1rN6R0qZI/9DYjN16Uy0durAmSlf58DHOcb28GPro= -gocloud.dev v0.37.0/go.mod h1:7/O4kqdInCNsc6LqgmuFnS0GRew4XNNYWpA44yQnwco= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI= +go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU= +gocloud.dev v0.42.0 h1:qzG+9ItUL3RPB62/Amugws28n+4vGZXEoJEAMfjutzw= +gocloud.dev v0.42.0/go.mod h1:zkaYAapZfQisXOA4bzhsbA4ckiStGQ3Psvs9/OQ5dPM= +gocloud.dev v0.43.0 h1:aW3eq4RMyehbJ54PMsh4hsp7iX8cO/98ZRzJJOzN/5M= +gocloud.dev v0.43.0/go.mod h1:eD8rkg7LhKUHrzkEdLTZ+Ty/vgPHPCd+yMQdfelQVu4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220307211146-efcb8507fb70 h1:syTAU9FwmvzEoIYMqcPHOcVm4H3U5u90WsvuYgwpETU= -golang.org/x/crypto v0.0.0-20220307211146-efcb8507fb70/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= -golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM= +golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY= +golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= +golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= +golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04= +golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb h1:c0vyKkb6yr3KR7jEfJaOSv4lG7xPkbN6r52aJz1d8a8= -golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM= +golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0/go.mod h1:S9Xr4PYopiDyqSyp5NjCrhFrqg6A5zA2E/iPHPhqnS8= +golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b h1:M2rDM6z3Fhozi9O7NWsxAkg/yqS/lQJ6PmkyIV3YP+o= +golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b/go.mod h1:3//PLf8L/X+8b4vuAfHzxeRUl04Adcb341+IGKfnqS8= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= 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/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= -golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= +golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= +golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ= +golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= +golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= +golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= -golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs= +golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= +golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4= +golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210126194326-f9ce19ea3013/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.20.0 h1:4mQdhULixXKP1rwYBW0vAijoXnkTG0BLCDRzfe1idMo= -golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= +golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= +golang.org/x/oauth2 v0.32.0 h1:jsCblLleRMDrxMN29H3z/k1KliIvpLgCkE6R8FXXNgY= +golang.org/x/oauth2 v0.32.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/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-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/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-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/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/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= +golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/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-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200828194041-157a740278f4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201109165425-215b40eba54c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210223095934-7937bea0104d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210503080704-8803ae5d1324/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= +golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= +golang.org/x/sys v0.37.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.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= -golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= -golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/term v0.33.0 h1:NuFncQrRcaRvVmgRkvM3j/F00gWIAlcmlB8ACEKmGIg= +golang.org/x/term v0.33.0/go.mod h1:s18+ql9tYWp1IfpV9DmCtQDDSRBUjKaw9M1eAv5UeF0= +golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4= +golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= +golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q= +golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs= -golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -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/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4= +golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= +golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k= +golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM= +golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= +golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 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/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= -golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw= -golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= +golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= +golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg= +golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s= +golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= +golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= 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= -golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= -golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.37.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.46.0/go.mod h1:ceL4oozhkAiTID8XMmJBsIxID/9wMXJVVFXPg4ylg3I= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.52.0/go.mod h1:Him/adpjt0sxtkWViy0b6xyKW/SD71CwdJ7HqJo7SrU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0 h1:08F9XVYTLOGeSQb3xI9C0gXMuQanhdGed0cWFhDozbI= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.172.0 h1:/1OcMZGPmW1rX2LCu2CmGUD1KXK1+pfzxotxyRUCCdk= -google.golang.org/api v0.172.0/go.mod h1:+fJZq6QXWfa9pXhnIzsjx4yI22d4aI9ZpLb58gvXjis= +golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY= +golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= +google.golang.org/api v0.235.0 h1:C3MkpQSRxS1Jy6AkzTGKKrpSCOd2WOGrezZ+icKSkKo= +google.golang.org/api v0.235.0/go.mod h1:QpeJkemzkFKe5VCE/PMv7GsUfn9ZF+u+q1Q7w6ckxTg= +google.golang.org/api v0.246.0 h1:H0ODDs5PnMZVZAEtdLMn2Ul2eQi7QNjqM2DIFp8TlTM= +google.golang.org/api v0.246.0/go.mod h1:dMVhVcylamkirHdzEBAIQWUCgqY885ivNeZYd7VAVr8= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210429181445-86c259c2b4ab/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210517163617-5e0236093d7a/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210721163202-f1cecdd8b78a/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210722135532-667f2b7c528f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210825212027-de86158e7fda/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2 h1:NHN4wOCScVzKhPenJ2dt+BTs3X/XkBVI/Rh4iDt55T8= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20240311173647-c811ad7063a7 h1:ImUcDPHjTrAqNhlOkSocDLfG9rrNHH7w7uoKWPaWZ8s= -google.golang.org/genproto v0.0.0-20240311173647-c811ad7063a7/go.mod h1:/3XmxOjePkvmKrHuBy4zNFw7IzxJXtAgdpXi8Ll990U= -google.golang.org/genproto/googleapis/api v0.0.0-20240311173647-c811ad7063a7 h1:oqta3O3AnlWbmIE3bFnWbu4bRxZjfbWCp0cKSuZh01E= -google.golang.org/genproto/googleapis/api v0.0.0-20240311173647-c811ad7063a7/go.mod h1:VQW3tUculP/D4B+xVCo+VgSq8As6wA9ZjHl//pmk+6s= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 h1:NnYq6UN9ReLM9/Y01KWNOWyI5xQ9kbIms5GGJVwS/Yc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/genproto v0.0.0-20250603155806-513f23925822 h1:rHWScKit0gvAPuOnu87KpaYtjK5zBMLcULh7gxkCXu4= +google.golang.org/genproto v0.0.0-20250603155806-513f23925822/go.mod h1:HubltRL7rMh0LfnQPkMH4NPDFEWp0jw3vixw7jEM53s= +google.golang.org/genproto v0.0.0-20250715232539-7130f93afb79 h1:Nt6z9UHqSlIdIGJdz6KhTIs2VRx/iOsA5iE8bmQNcxs= +google.golang.org/genproto v0.0.0-20250715232539-7130f93afb79/go.mod h1:kTmlBHMPqR5uCZPBvwa2B18mvubkjyY3CRLI0c6fj0s= +google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 h1:oWVWY3NzT7KJppx2UKhKmzPq4SRe0LdCijVRwvGeikY= +google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822/go.mod h1:h3c4v36UTKzUiuaOKQ6gr3S+0hovBtUrXzTG/i3+XEc= +google.golang.org/genproto/googleapis/api v0.0.0-20250721164621-a45f3dfb1074 h1:mVXdvnmR3S3BQOqHECm9NGMjYiRtEvDYcqAqedTXY6s= +google.golang.org/genproto/googleapis/api v0.0.0-20250721164621-a45f3dfb1074/go.mod h1:vYFwMYFbmA8vl6Z/krj/h7+U/AqpHknwJX4Uqgfyc7I= +google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 h1:BIRfGDEjiHRrk0QKZe3Xv2ieMhtgRGeLcZQ0mIVn4EY= +google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5/go.mod h1:j3QtIyytwqGr1JUDtYXwtMXWPKsEa5LtzIFN1Wn5WvE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 h1:fc6jSaCT0vBduLYZHYrBBNY4dsWuvgyff9noRNDdBeE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250728155136-f173205681a0 h1:MAKi5q709QWfnkkpNQ0M12hYJ1+e8qYVDyowc4U1XZM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250728155136-f173205681a0/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk= -google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +google.golang.org/grpc v1.73.0 h1:VIWSmpI2MegBtTuFt5/JWy2oXxtjJ/e89Z70ImfD2ok= +google.golang.org/grpc v1.73.0/go.mod h1:50sbHOUqWoCQGI8V2HQLJM0B+LMlIUjNSZmow7EVBQc= +google.golang.org/grpc v1.74.2 h1:WoosgB65DlWVC9FqI82dGsZhWFNBSLjQ84bjROOpMu4= +google.golang.org/grpc v1.74.2/go.mod h1:CtQ+BGjaAIXHs/5YS3i473GqwBBa1zGQNevxdeBEXrM= +google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4= +google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= 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= @@ -1702,68 +1142,43 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= +google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= +google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc= +google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= +google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= +google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/go-jose/go-jose.v2 v2.6.3 h1:nt80fvSDlhKWQgSWyHyy5CfmlQr+asih51R8PTWNKKs= -gopkg.in/go-jose/go-jose.v2 v2.6.3/go.mod h1:zzZDPkNNw/c9IE7Z9jr11mBZQhKQTMzoEEIoEdZlFBI= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= -gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/mail.v2 v2.3.1 h1:WYFn/oANrAGP2C0dcV6/pbkPzv8yGzqTjPmTeO7qoXk= gopkg.in/mail.v2 v2.3.1/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -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.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/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= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= +k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= lukechampine.com/blake3 v1.2.1 h1:YuqqRuaqsGV71BV/nm9xlI0MKUv4QC54jQnBChWbGnI= lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k= -nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/kind v0.23.0 h1:8fyDGWbWTeCcCTwA04v4Nfr45KKxbSPH1WO9K+jVrBg= -sigs.k8s.io/kind v0.23.0/go.mod h1:ZQ1iZuJLh3T+O8fzhdi3VWcFTzsdXtNv2ppsHc8JQ7s= +sigs.k8s.io/kind v0.27.0 h1:PQ3f0iAWNIj66LYkZ1ivhEg/+Zb6UPMbO+qVei/INZA= +sigs.k8s.io/kind v0.27.0/go.mod h1:RZVFmy6qcwlSWwp6xeIUv7kXCPF3i8MXsEXxW/J+gJY= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= -software.sslmate.com/src/go-pkcs12 v0.4.0 h1:H2g08FrTvSFKUj+D309j1DPfk5APnIdAQAB8aEykJ5k= -software.sslmate.com/src/go-pkcs12 v0.4.0/go.mod h1:Qiz0EyvDRJjjxGyUQa2cCNZn/wMyzrRJ/qcDXOQazLI= +sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs= +sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4= +software.sslmate.com/src/go-pkcs12 v0.5.0 h1:EC6R394xgENTpZ4RltKydeDUjtlM5drOYIG9c6TVj2M= +software.sslmate.com/src/go-pkcs12 v0.5.0/go.mod h1:Qiz0EyvDRJjjxGyUQa2cCNZn/wMyzrRJ/qcDXOQazLI= diff --git a/staging/operator-registry/.bingo/variables.env b/staging/operator-registry/.bingo/variables.env index 3f9670643a..e913cd9e6d 100644 --- a/staging/operator-registry/.bingo/variables.env +++ b/staging/operator-registry/.bingo/variables.env @@ -12,9 +12,9 @@ BINGO="${GOBIN}/bingo-v0.9.0" GINKGO="${GOBIN}/ginkgo-v2.23.4" -GOLANGCI_LINT="${GOBIN}/golangci-lint-v1.64.8" +GOLANGCI_LINT="${GOBIN}/golangci-lint-v2.7.2" -GORELEASER="${GOBIN}/goreleaser-v1.26.2" +GORELEASER="${GOBIN}/goreleaser-v2.12.7" PROTOC_GEN_GO_GRPC="${GOBIN}/protoc-gen-go-grpc-v1.3.0" diff --git a/staging/operator-registry/.github/workflows/build.yaml b/staging/operator-registry/.github/workflows/build.yaml index 1ae9c2c3e7..f2f275a3f4 100644 --- a/staging/operator-registry/.github/workflows/build.yaml +++ b/staging/operator-registry/.github/workflows/build.yaml @@ -12,7 +12,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-go@v6 with: go-version-file: "go.mod" diff --git a/staging/operator-registry/.github/workflows/go-apidiff.yaml b/staging/operator-registry/.github/workflows/go-apidiff.yaml index 8d0a1a576f..5461c02312 100644 --- a/staging/operator-registry/.github/workflows/go-apidiff.yaml +++ b/staging/operator-registry/.github/workflows/go-apidiff.yaml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out code into the Go module directory - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: fetch-depth: 0 - name: Set up Go @@ -25,4 +25,22 @@ jobs: go-version-file: 'go.mod' id: go - name: Run go-apidiff + id: check-api + continue-on-error: true uses: joelanford/go-apidiff@main + - name: Check for override label + if: ${{ steps.check-api.outcome == 'failure' }} + run: | + if gh api repos/$OWNER/$REPO/pulls/$PR --jq '.labels.[].name' | grep -q "${OVERRIDE_LABEL}"; then + echo "Found ${OVERRIDE_LABEL} label, overriding failed results." + exit 0 + else + echo "No ${OVERRIDE_LABEL} label found, failing the job." + exit 1 + fi + env: + GH_TOKEN: ${{ github.token }} + OWNER: ${{ github.repository_owner }} + REPO: ${{ github.event.repository.name }} + PR: ${{ github.event.pull_request.number }} + OVERRIDE_LABEL: "go-apidiff-override" diff --git a/staging/operator-registry/.github/workflows/go-verdiff.yaml b/staging/operator-registry/.github/workflows/go-verdiff.yaml index 921110b3b7..581ccc1ee6 100644 --- a/staging/operator-registry/.github/workflows/go-verdiff.yaml +++ b/staging/operator-registry/.github/workflows/go-verdiff.yaml @@ -2,21 +2,33 @@ name: go-verdiff on: pull_request: branches: - - master + - master jobs: go-verdiff: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: fetch-depth: 0 - name: Check golang version + id: check-version + continue-on-error: true run: | - export LABELS="$(gh api repos/$OWNER/$REPO/pulls/$PR --jq '.labels.[].name')" hack/tools/check-go-version.sh -b "${{ github.event.pull_request.base.sha }}" shell: bash + - name: Check for override label + if: ${{ steps.check-version.outcome == 'failure' }} + run: | + if gh api repos/$OWNER/$REPO/pulls/$PR --jq '.labels.[].name' | grep -q "${OVERRIDE_LABEL}"; then + echo "Found ${OVERRIDE_LABEL} label, overriding failed results." + exit 0 + else + echo "No ${OVERRIDE_LABEL} label found, failing the job." + exit 1 + fi env: GH_TOKEN: ${{ github.token }} OWNER: ${{ github.repository_owner }} REPO: ${{ github.event.repository.name }} PR: ${{ github.event.pull_request.number }} + OVERRIDE_LABEL: "go-verdiff-override" diff --git a/staging/operator-registry/.github/workflows/goreleaser.yaml b/staging/operator-registry/.github/workflows/goreleaser.yaml index b2545945c7..85703681d1 100644 --- a/staging/operator-registry/.github/workflows/goreleaser.yaml +++ b/staging/operator-registry/.github/workflows/goreleaser.yaml @@ -19,8 +19,8 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 - - uses: actions/download-artifact@v6 + - uses: actions/checkout@v6 + - uses: actions/download-artifact@v7 - run: | for dist in dist-*; do @@ -49,7 +49,7 @@ jobs: build-windows: runs-on: windows-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: # GoReleaser requires fetch-depth: 0 to correctly # run git describe @@ -64,7 +64,7 @@ jobs: RELEASE_ARGS: release --verbose --skip=validate --clean -f release/goreleaser.windows.yaml ${{ github.event_name == 'pull_request' && '--snapshot' || '' }} - run: tar -cvf dist-windows.tar dist - - uses: actions/upload-artifact@v5 + - uses: actions/upload-artifact@v6 with: name: dist-windows path: dist-windows.tar @@ -72,7 +72,7 @@ jobs: build-darwin: runs-on: macos-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: # GoReleaser requires fetch-depth: 0 to correctly # run git describe @@ -88,7 +88,7 @@ jobs: RELEASE_ARGS: release --verbose --clean -f release/goreleaser.darwin.yaml --skip=validate ${{ github.event_name == 'pull_request' && '--snapshot' || '' }} - run: gtar -cvf dist-darwin.tar dist - - uses: actions/upload-artifact@v5 + - uses: actions/upload-artifact@v6 with: name: dist-darwin path: dist-darwin.tar @@ -96,7 +96,7 @@ jobs: build-linux: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: # GoReleaser requires fetch-depth: 0 to correctly # run git describe @@ -136,6 +136,9 @@ jobs: - name: Set up QEMU uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: "Run GoReleaser" run: make release env: @@ -143,7 +146,7 @@ jobs: RELEASE_ARGS: release --verbose --clean -f release/goreleaser.linux.yaml --skip=validate ${{ github.event_name == 'pull_request' && '--snapshot' || '' }} - run: tar -cvf dist-linux.tar dist - - uses: actions/upload-artifact@v5 + - uses: actions/upload-artifact@v6 with: name: dist-linux path: dist-linux.tar diff --git a/staging/operator-registry/.github/workflows/sanity.yaml b/staging/operator-registry/.github/workflows/sanity.yaml index c25b2c3ccf..1bc4783076 100644 --- a/staging/operator-registry/.github/workflows/sanity.yaml +++ b/staging/operator-registry/.github/workflows/sanity.yaml @@ -14,7 +14,7 @@ jobs: sanity: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-go@v6 with: go-version-file: "go.mod" diff --git a/staging/operator-registry/.github/workflows/test.yml b/staging/operator-registry/.github/workflows/test.yml index 3835b58824..4dba22fc50 100644 --- a/staging/operator-registry/.github/workflows/test.yml +++ b/staging/operator-registry/.github/workflows/test.yml @@ -13,7 +13,7 @@ jobs: e2e: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-go@v6 with: go-version-file: 'go.mod' diff --git a/staging/operator-registry/.github/workflows/unit.yaml b/staging/operator-registry/.github/workflows/unit.yaml index e6ed44d752..b46230b45b 100644 --- a/staging/operator-registry/.github/workflows/unit.yaml +++ b/staging/operator-registry/.github/workflows/unit.yaml @@ -14,7 +14,7 @@ jobs: unit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-go@v6 with: go-version-file: "go.mod" diff --git a/staging/operator-registry/.golangci.yaml b/staging/operator-registry/.golangci.yaml index 0bc5d1097f..583c7406fe 100644 --- a/staging/operator-registry/.golangci.yaml +++ b/staging/operator-registry/.golangci.yaml @@ -3,7 +3,6 @@ # # This file is duplicated in the following repos: # - operator-framework/kubectl-operator -# - operator-framework/catalogd # - operator-framework/operator-controller # - operator-framework/operator-registry # @@ -12,72 +11,80 @@ # # TODO: Find a way to have a shared golangci config. ######## - -run: - # Default timeout is 1m, up to give more room - timeout: 4m - -linters: - enable: - - asciicheck - - bodyclose - - errorlint - - gci - - gofmt - - govet - - gosec - - importas - - misspell - - nestif - - nonamedreturns - - prealloc - - stylecheck - - testifylint - - tparallel - - unconvert - - unparam - - unused - - whitespace - -linters-settings: - gci: - sections: - - standard - - dot - - default - - prefix(github.com/operator-framework) - - localmodule - custom-order: true - - errorlint: - errorf: false - - importas: - alias: - - pkg: k8s.io/apimachinery/pkg/apis/meta/v1 - alias: metav1 - - pkg: k8s.io/apimachinery/pkg/api/errors - alias: apierrors - - pkg: k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1 - alias: apiextensionsv1 - - pkg: k8s.io/apimachinery/pkg/util/runtime - alias: utilruntime - - pkg: "^k8s\\.io/api/([^/]+)/(v[^/]+)$" - alias: $1$2 - - pkg: sigs.k8s.io/controller-runtime - alias: ctrl - - pkg: github.com/blang/semver/v4 - alias: bsemver - -issues: - # exclusion rules, mostly to avoid functionally complete areas and reduce unit test noise - exclude-rules: - - path: _test\.go - linters: - - unused - - govet - - +version: "2" output: formats: - - format: tab + tab: + path: stdout + colors: false +linters: + enable: + - asciicheck + - bodyclose + - errorlint + - gosec + - importas + - misspell + - nestif + - nonamedreturns + - prealloc + - staticcheck + - testifylint + - tparallel + - unconvert + - unparam + - whitespace + settings: + errorlint: + errorf: false + importas: + alias: + - pkg: k8s.io/apimachinery/pkg/apis/meta/v1 + alias: metav1 + - pkg: k8s.io/apimachinery/pkg/api/errors + alias: apierrors + - pkg: k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1 + alias: apiextensionsv1 + - pkg: k8s.io/apimachinery/pkg/util/runtime + alias: utilruntime + - pkg: ^k8s\.io/api/([^/]+)/(v[^/]+)$ + alias: $1$2 + - pkg: sigs.k8s.io/controller-runtime + alias: ctrl + - pkg: github.com/blang/semver/v4 + alias: bsemver + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + rules: + - linters: + - govet + - unused + path: _test\.go + paths: + - third_party$ + - builtin$ + - examples$ +formatters: + enable: + - gci + - gofmt + settings: + gci: + sections: + - standard + - dot + - default + - prefix(github.com/operator-framework) + - localmodule + custom-order: true + exclusions: + generated: lax + paths: + - third_party$ + - builtin$ + - examples$ diff --git a/staging/operator-registry/Makefile b/staging/operator-registry/Makefile index 51fd6ebfde..a6e6bd6be2 100644 --- a/staging/operator-registry/Makefile +++ b/staging/operator-registry/Makefile @@ -62,7 +62,7 @@ build: clean $(CMDS) $(OPM) cross: opm_version_flags=-ldflags "-X '$(PKG)/cmd/opm/version.gitCommit=$(GIT_COMMIT)' -X '$(PKG)/cmd/opm/version.opmVersion=$(OPM_VERSION)' -X '$(PKG)/cmd/opm/version.buildDate=$(BUILD_DATE)'" cross: ifeq ($(shell go env GOARCH),amd64) - GOOS=darwin CC=o64-clang CXX=o64-clang++ CGO_ENABLED=1 $(GO) build $(opm_version_flags) -tags=$(TAGS) -o "bin/darwin-amd64-opm" --ldflags "-extld=o64-clang" ./cmd/opm + GOOS=darwin CC=o64-clang CXX=o64-clang++ CGO_ENABLED=1 CGO_LDFLAGS='-Wl,-undefined,dynamic_lookup' $(GO) build $(opm_version_flags) -tags=$(TAGS) -o "bin/darwin-amd64-opm" --ldflags "-extld=o64-clang -extldflags=-Wl,-undefined,dynamic_lookup" ./cmd/opm GOOS=windows CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ CGO_ENABLED=1 $(GO) build $(opm_version_flags) -tags=$(TAGS) -o "bin/windows-amd64-opm" --ldflags "-extld=x86_64-w64-mingw32-gcc" -buildmode=exe ./cmd/opm endif @@ -163,7 +163,7 @@ windows-goreleaser-install: # This is done to ensure the same version of goreleaser is used across all platforms mkdir -p $(dir $(GORELEASER)) @echo "(re)installing $(GORELEASER)" - GOWORK=off $(GO) build -mod=mod -modfile=.bingo/goreleaser.mod -o=$(GORELEASER) "github.com/goreleaser/goreleaser" + GOWORK=off $(GO) build -mod=mod -modfile=.bingo/goreleaser.mod -o=$(GORELEASER) "github.com/goreleaser/goreleaser/v2" # tagged-or-empty returns $(OPM_IMAGE_REPO):$(1) when HEAD is assigned a non-prerelease semver tag, # otherwise the empty string. An empty string causes goreleaser to skip building diff --git a/staging/operator-registry/OWNERS b/staging/operator-registry/OWNERS index 19f56d940f..b6e9920a0d 100644 --- a/staging/operator-registry/OWNERS +++ b/staging/operator-registry/OWNERS @@ -12,8 +12,6 @@ reviewers: - anik120 - ankitathomas - camilamacedo86 - - everettraven - - exdx - grokspawn - joelanford - kevinrizza diff --git a/staging/operator-registry/alpha/action/render_test.go b/staging/operator-registry/alpha/action/render_test.go index 72fdd8a4e7..59929f053e 100644 --- a/staging/operator-registry/alpha/action/render_test.go +++ b/staging/operator-registry/alpha/action/render_test.go @@ -1202,16 +1202,16 @@ func TestRender(t *testing.T) { t.Run(s.name, func(t *testing.T) { actualCfg, actualErr := s.render.Run(context.Background()) s.assertion(t, actualErr) - require.Equal(t, len(s.expectCfg.Packages), len(actualCfg.Packages)) + require.Len(t, actualCfg.Packages, len(s.expectCfg.Packages)) require.Equal(t, s.expectCfg.Packages, actualCfg.Packages) - require.Equal(t, len(s.expectCfg.Channels), len(actualCfg.Channels)) + require.Len(t, actualCfg.Channels, len(s.expectCfg.Channels)) require.Equal(t, s.expectCfg.Channels, actualCfg.Channels) - require.Equal(t, len(s.expectCfg.Bundles), len(actualCfg.Bundles)) + require.Len(t, actualCfg.Bundles, len(s.expectCfg.Bundles)) for i := range s.expectCfg.Bundles { actual, expected := actualCfg.Bundles[i], s.expectCfg.Bundles[i] require.Equal(t, expected, actual, "bundle %d", i) } - require.Equal(t, len(s.expectCfg.Others), len(actualCfg.Others)) + require.Len(t, actualCfg.Others, len(s.expectCfg.Others)) require.Equal(t, s.expectCfg.Others, actualCfg.Others) }) } diff --git a/staging/operator-registry/alpha/declcfg/declcfg.go b/staging/operator-registry/alpha/declcfg/declcfg.go index 9e4f752ee0..bacf4e0aa6 100644 --- a/staging/operator-registry/alpha/declcfg/declcfg.go +++ b/staging/operator-registry/alpha/declcfg/declcfg.go @@ -6,6 +6,7 @@ import ( "errors" "fmt" + "github.com/blang/semver/v4" "golang.org/x/text/cases" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/sets" @@ -206,3 +207,71 @@ func (destination *DeclarativeConfig) Merge(src *DeclarativeConfig) { destination.Others = append(destination.Others, src.Others...) destination.Deprecations = append(destination.Deprecations, src.Deprecations...) } + +type CompositeVersion struct { + Version semver.Version + Release semver.Version +} + +func (cv *CompositeVersion) Compare(other *CompositeVersion) int { + if cv.Version.NE(other.Version) { + return cv.Version.Compare(other.Version) + } + hasrelease := len(cv.Release.Pre) > 0 + otherhasrelease := len(other.Release.Pre) > 0 + if hasrelease && !otherhasrelease { + return 1 + } + if !hasrelease && otherhasrelease { + return -1 + } + return cv.Release.Compare(other.Release) +} + +// order by version, then +// release, if present +func (b *Bundle) Compare(other *Bundle) int { + if b.Name == other.Name { + return 0 + } + acv, err := b.CompositeVersion() + if err != nil { + return 0 + } + otherCv, err := other.CompositeVersion() + if err != nil { + return 0 + } + return acv.Compare(otherCv) +} + +func (b *Bundle) CompositeVersion() (*CompositeVersion, error) { + props, err := property.Parse(b.Properties) + if err != nil { + return nil, fmt.Errorf("parse properties for bundle %q: %v", b.Name, err) + } + if len(props.Packages) != 1 { + return nil, fmt.Errorf("bundle %q must have exactly 1 \"olm.package\" property, found %v", b.Name, len(props.Packages)) + } + v, err := semver.Parse(props.Packages[0].Version) + if err != nil { + return nil, fmt.Errorf("bundle %q has invalid version %q: %v", b.Name, props.Packages[0].Version, err) + } + + var r semver.Version + if props.Packages[0].Release != "" { + r, err = semver.Parse(fmt.Sprintf("0.0.0-%s", props.Packages[0].Release)) + if err != nil { + return nil, fmt.Errorf("error parsing bundle %q release version %q: %v", b.Name, props.Packages[0].Release, err) + } + // only need to check for build metadata since we are using explicit zero major, minor, and patch versions above + if len(r.Build) != 0 { + return nil, fmt.Errorf("bundle %q release version %q cannot contain build metadata", b.Name, props.Packages[0].Release) + } + } + + return &CompositeVersion{ + Version: v, + Release: r, + }, nil +} diff --git a/staging/operator-registry/alpha/declcfg/declcfg_to_model.go b/staging/operator-registry/alpha/declcfg/declcfg_to_model.go index 342cab4036..62dfd13ca7 100644 --- a/staging/operator-registry/alpha/declcfg/declcfg_to_model.go +++ b/staging/operator-registry/alpha/declcfg/declcfg_to_model.go @@ -135,6 +135,19 @@ func ConvertToModel(cfg DeclarativeConfig) (model.Model, error) { return nil, fmt.Errorf("error parsing bundle %q version %q: %v", b.Name, rawVersion, err) } + // Parse release version from the package property. + var relver semver.Version + if props.Packages[0].Release != "" { + relver, err = semver.Parse(fmt.Sprintf("0.0.0-%s", props.Packages[0].Release)) + if err != nil { + return nil, fmt.Errorf("error parsing bundle %q release version %q: %v", b.Name, props.Packages[0].Release, err) + } + // only need to check for build metadata since we are using explicit zero major, minor, and patch versions above + if len(relver.Build) != 0 { + return nil, fmt.Errorf("bundle %q release version %q cannot contain build metadata", b.Name, props.Packages[0].Release) + } + } + channelDefinedEntries[b.Package] = channelDefinedEntries[b.Package].Delete(b.Name) found := false for _, mch := range mpkg.Channels { @@ -147,6 +160,7 @@ func ConvertToModel(cfg DeclarativeConfig) (model.Model, error) { mb.Objects = b.Objects mb.PropertiesP = props mb.Version = ver + mb.Release = relver } } if !found { diff --git a/staging/operator-registry/alpha/declcfg/declcfg_to_model_test.go b/staging/operator-registry/alpha/declcfg/declcfg_to_model_test.go index de8639c1bf..7a5b363774 100644 --- a/staging/operator-registry/alpha/declcfg/declcfg_to_model_test.go +++ b/staging/operator-registry/alpha/declcfg/declcfg_to_model_test.go @@ -442,6 +442,70 @@ func TestConvertToModel(t *testing.T) { }, }, }, + { + name: "Error/InvalidReleaseVersion", + assertion: hasError(`error parsing bundle "foo.v0.1.0" release version "!!!": Invalid character(s) found in prerelease "!!!"`), + cfg: DeclarativeConfig{ + Packages: []Package{newTestPackage("foo", "alpha", svgSmallCircle)}, + Channels: []Channel{newTestChannel("foo", "alpha", ChannelEntry{Name: testBundleName("foo", "0.1.0")})}, + Bundles: []Bundle{newTestBundle("foo", "0.1.0", func(b *Bundle) { + b.Properties = []property.Property{ + property.MustBuildPackageRelease("foo", "0.1.0", "!!!"), + } + })}, + }, + }, + { + name: "Error/InvalidBundleNormalizedName", + assertion: hasError(`invalid index: +└── invalid package "foo": + └── invalid channel "alpha": + └── invalid bundle "foo.v0.1.0-alpha.1.0.0": + └── name "foo.v0.1.0-alpha.1.0.0" does not match normalized name "foo-v0.1.0-alpha.1.0.0"`), + cfg: DeclarativeConfig{ + Packages: []Package{newTestPackage("foo", "alpha", svgSmallCircle)}, + Channels: []Channel{newTestChannel("foo", "alpha", ChannelEntry{Name: "foo.v0.1.0-alpha.1.0.0"})}, + Bundles: []Bundle{newTestBundle("foo", "0.1.0", func(b *Bundle) { + b.Properties = []property.Property{ + property.MustBuildPackageRelease("foo", "0.1.0", "alpha.1.0.0"), + } + b.Name = "foo.v0.1.0-alpha.1.0.0" + })}, + }, + }, + { + name: "Success/ValidBundleReleaseVersion", + assertion: require.NoError, + cfg: DeclarativeConfig{ + Packages: []Package{newTestPackage("foo", "alpha", svgSmallCircle)}, + Channels: []Channel{newTestChannel("foo", "alpha", ChannelEntry{Name: "foo-v0.1.0-alpha.1.0.0"})}, + Bundles: []Bundle{newTestBundle("foo", "0.1.0", func(b *Bundle) { + b.Properties = []property.Property{ + property.MustBuildPackageRelease("foo", "0.1.0", "alpha.1.0.0"), + } + b.Name = "foo-v0.1.0-alpha.1.0.0" + })}, + }, + }, + { + name: "Error/BundleReleaseWithBuildMetadata", + assertion: hasError(`invalid index: +└── invalid package "foo": + └── invalid channel "alpha": + └── invalid bundle "foo.v0.1.0+alpha.1.0.0-0.0.1": + ├── name "foo.v0.1.0+alpha.1.0.0-0.0.1" does not match normalized name "foo-v0.1.0+alpha.1.0.0-0.0.1" + └── cannot use build metadata in version with a release version`), + cfg: DeclarativeConfig{ + Packages: []Package{newTestPackage("foo", "alpha", svgSmallCircle)}, + Channels: []Channel{newTestChannel("foo", "alpha", ChannelEntry{Name: "foo.v0.1.0+alpha.1.0.0-0.0.1"})}, + Bundles: []Bundle{newTestBundle("foo", "0.1.0", func(b *Bundle) { + b.Properties = []property.Property{ + property.MustBuildPackageRelease("foo", "0.1.0+alpha.1.0.0", "0.0.1"), + } + b.Name = "foo.v0.1.0+alpha.1.0.0-0.0.1" + })}, + }, + }, } for _, s := range specs { @@ -472,9 +536,9 @@ func TestConvertToModelBundle(t *testing.T) { assert.Equal(t, ch, b.Channel) assert.Equal(t, "foo.v0.1.0", b.Name) assert.Equal(t, "foo-bundle:v0.1.0", b.Image) - assert.Equal(t, "", b.Replaces) + assert.Empty(t, b.Replaces) assert.Nil(t, b.Skips) - assert.Equal(t, "", b.SkipRange) + assert.Empty(t, b.SkipRange) assert.Len(t, b.Properties, 3) assert.Equal(t, []model.RelatedImage{{Name: "bundle", Image: "foo-bundle:v0.1.0"}}, b.RelatedImages) assert.Nil(t, b.Deprecation) diff --git a/staging/operator-registry/alpha/declcfg/helpers_test.go b/staging/operator-registry/alpha/declcfg/helpers_test.go index 1d55f9e2af..9df5beebbb 100644 --- a/staging/operator-registry/alpha/declcfg/helpers_test.go +++ b/staging/operator-registry/alpha/declcfg/helpers_test.go @@ -342,7 +342,7 @@ func equalsDeclarativeConfig(t *testing.T, expected, actual DeclarativeConfig) { // root elements, so we need to manually sort bundles and use // assert.ElementsMatch on the properties fields between // expected and actual. - require.Equal(t, len(expected.Bundles), len(actual.Bundles)) + require.Len(t, actual.Bundles, len(expected.Bundles)) sort.SliceStable(expected.Bundles, func(i, j int) bool { return expected.Bundles[i].Name < expected.Bundles[j].Name }) diff --git a/staging/operator-registry/alpha/model/error.go b/staging/operator-registry/alpha/model/error.go index e99cb2ca8c..e175b3d408 100644 --- a/staging/operator-registry/alpha/model/error.go +++ b/staging/operator-registry/alpha/model/error.go @@ -62,7 +62,7 @@ func (v *validationError) errorPrefix(prefix []rune, last bool, seen []error) st if errors.As(serr, &verr) { errMsg.WriteString(verr.errorPrefix(subPrefix, subLast, seen)) } else { - errMsg.WriteString(fmt.Sprintf("%s%s\n", string(subPrefix), serr)) + fmt.Fprintf(errMsg, "%s%s\n", string(subPrefix), serr) } } return errMsg.String() diff --git a/staging/operator-registry/alpha/model/model.go b/staging/operator-registry/alpha/model/model.go index af6c391e6a..3149ae5031 100644 --- a/staging/operator-registry/alpha/model/model.go +++ b/staging/operator-registry/alpha/model/model.go @@ -3,6 +3,7 @@ package model import ( "errors" "fmt" + "slices" "sort" "strings" @@ -52,75 +53,75 @@ type Package struct { Deprecation *Deprecation } -func (m *Package) Validate() error { - result := newValidationError(fmt.Sprintf("invalid package %q", m.Name)) +func (p *Package) Validate() error { + result := newValidationError(fmt.Sprintf("invalid package %q", p.Name)) - if m.Name == "" { + if p.Name == "" { result.subErrors = append(result.subErrors, errors.New("package name must not be empty")) } - if err := m.Icon.Validate(); err != nil { + if err := p.Icon.Validate(); err != nil { result.subErrors = append(result.subErrors, err) } - if m.DefaultChannel == nil { + if p.DefaultChannel == nil { result.subErrors = append(result.subErrors, fmt.Errorf("default channel must be set")) } - if len(m.Channels) == 0 { + if len(p.Channels) == 0 { result.subErrors = append(result.subErrors, fmt.Errorf("package must contain at least one channel")) } foundDefault := false - for name, ch := range m.Channels { + for name, ch := range p.Channels { if name != ch.Name { result.subErrors = append(result.subErrors, fmt.Errorf("channel key %q does not match channel name %q", name, ch.Name)) } if err := ch.Validate(); err != nil { result.subErrors = append(result.subErrors, err) } - if ch == m.DefaultChannel { + if ch == p.DefaultChannel { foundDefault = true } - if ch.Package != m { + if ch.Package != p { result.subErrors = append(result.subErrors, fmt.Errorf("channel %q not correctly linked to parent package", ch.Name)) } } - if err := m.validateUniqueBundleVersions(); err != nil { + if err := p.validateUniqueBundleVersions(); err != nil { result.subErrors = append(result.subErrors, err) } - if m.DefaultChannel != nil && !foundDefault { - result.subErrors = append(result.subErrors, fmt.Errorf("default channel %q not found in channels list", m.DefaultChannel.Name)) + if p.DefaultChannel != nil && !foundDefault { + result.subErrors = append(result.subErrors, fmt.Errorf("default channel %q not found in channels list", p.DefaultChannel.Name)) } - if err := m.Deprecation.Validate(); err != nil { + if err := p.Deprecation.Validate(); err != nil { result.subErrors = append(result.subErrors, fmt.Errorf("invalid deprecation: %v", err)) } return result.orNil() } -func (m *Package) validateUniqueBundleVersions() error { - versionsMap := map[string]semver.Version{} +func (p *Package) validateUniqueBundleVersions() error { + versionsMap := map[string]string{} bundlesWithVersion := map[string]sets.Set[string]{} - for _, ch := range m.Channels { + for _, ch := range p.Channels { for _, b := range ch.Bundles { - versionsMap[b.Version.String()] = b.Version - if bundlesWithVersion[b.Version.String()] == nil { - bundlesWithVersion[b.Version.String()] = sets.New[string]() + versionsMap[b.VersionString()] = b.VersionString() + if bundlesWithVersion[b.VersionString()] == nil { + bundlesWithVersion[b.VersionString()] = sets.New[string]() } - bundlesWithVersion[b.Version.String()].Insert(b.Name) + bundlesWithVersion[b.VersionString()].Insert(b.Name) } } versionsSlice := maps.Values(versionsMap) - semver.Sort(versionsSlice) + slices.Sort(versionsSlice) var errs []error for _, v := range versionsSlice { - bundles := sets.List(bundlesWithVersion[v.String()]) + bundles := sets.List(bundlesWithVersion[v]) if len(bundles) > 1 { errs = append(errs, fmt.Errorf("{%s: [%s]}", v, strings.Join(bundles, ", "))) } @@ -331,6 +332,49 @@ type Bundle struct { // These fields are used to compare bundles in a diff. PropertiesP *property.Properties Version semver.Version + Release semver.Version +} + +func (b *Bundle) VersionString() string { + if len(b.Release.Pre) > 0 { + pres := []string{} + for _, pre := range b.Release.Pre { + pres = append(pres, pre.String()) + } + relString := strings.Join(pres, ".") + return strings.Join([]string{b.Version.String(), relString}, "-") + } + return b.Version.String() +} + +func (b *Bundle) normalizeName() string { + // if the bundle has release versioning, then the name must include this in standard form: + // -v- + // if no release versioning exists, then just return the bundle name + if len(b.Release.Pre) > 0 { + return strings.Join([]string{b.Package.Name, "v" + b.VersionString()}, "-") + } + return b.Name +} + +// order by version, then +// release, if present +func (b *Bundle) Compare(other *Bundle) int { + if b.Name == other.Name { + return 0 + } + if b.Version.NE(other.Version) { + return b.Version.Compare(other.Version) + } + bhasrelease := len(b.Release.Pre) > 0 + otherhasrelease := len(other.Release.Pre) > 0 + if bhasrelease && !otherhasrelease { + return 1 + } + if !bhasrelease && otherhasrelease { + return -1 + } + return b.Release.Compare(other.Release) } func (b *Bundle) Validate() error { @@ -339,6 +383,9 @@ func (b *Bundle) Validate() error { if b.Name == "" { result.subErrors = append(result.subErrors, errors.New("name must be set")) } + if b.Name != b.normalizeName() { + result.subErrors = append(result.subErrors, fmt.Errorf("name %q does not match normalized name %q", b.Name, b.normalizeName())) + } if b.Channel == nil { result.subErrors = append(result.subErrors, errors.New("channel must be set")) } @@ -379,6 +426,10 @@ func (b *Bundle) Validate() error { result.subErrors = append(result.subErrors, fmt.Errorf("invalid deprecation: %v", err)) } + if len(b.Version.Build) > 0 && len(b.Release.Pre) > 0 { + result.subErrors = append(result.subErrors, fmt.Errorf("cannot use build metadata in version with a release version")) + } + return result.orNil() } diff --git a/staging/operator-registry/alpha/model/model_test.go b/staging/operator-registry/alpha/model/model_test.go index 248de9c85a..898ec3c492 100644 --- a/staging/operator-registry/alpha/model/model_test.go +++ b/staging/operator-registry/alpha/model/model_test.go @@ -4,6 +4,7 @@ import ( "encoding/base64" "encoding/json" "errors" + "fmt" "testing" "github.com/blang/semver/v4" @@ -288,6 +289,41 @@ func TestValidators(t *testing.T) { }, assertion: hasError(`duplicate versions found in bundles: [{0.0.1: [anakin.v0.0.1, anakin.v0.0.2]} {1.0.1: [anakin.v1.0.1, anakin.v1.0.2]}]`), }, + { + name: "Package/Error/DuplicateBundleVersionsReleases", + v: &Package{ + Name: "anakin", + Channels: map[string]*Channel{ + "light": { + Package: pkg, + Name: "light", + Bundles: map[string]*Bundle{ + "anakin.v0.0.1": {Name: "anakin.v0.0.1", Version: semver.MustParse("0.0.1")}, + "anakin.v0.0.2": {Name: "anakin.v0.0.2", Version: semver.MustParse("0.0.1")}, + "anakin-v0.0.1-100": {Name: "anakin.v0.0.1", Version: semver.MustParse("0.0.1"), Release: semver.MustParse(fmt.Sprintf("0.0.0-%s", "100")), Package: pkg}, + "anakin-v0.0.2-100": {Name: "anakin.v0.0.2", Version: semver.MustParse("0.0.1"), Release: semver.MustParse(fmt.Sprintf("0.0.0-%s", "100")), Package: pkg}, + }, + }, + }, + }, + assertion: hasError(`duplicate versions found in bundles: [{0.0.1: [anakin.v0.0.1, anakin.v0.0.2]} {0.0.1-100: [anakin.v0.0.1, anakin.v0.0.2]}]`), + }, + { + name: "Package/Error/BundleReleaseNormalizedName", + v: &Package{ + Name: "anakin", + Channels: map[string]*Channel{ + "light": { + Package: pkg, + Name: "light", + Bundles: map[string]*Bundle{ + "anakin.v0.0.1.alpha1": {Name: "anakin.v0.0.1.alpha1", Version: semver.MustParse("0.0.1"), Release: semver.MustParse(fmt.Sprintf("0.0.0-%s", "alpha1")), Package: pkg}, + }, + }, + }, + }, + assertion: hasError(`name "anakin.v0.0.1.alpha1" does not match normalized name "anakin-v0.0.1-alpha1"`), + }, { name: "Package/Error/NoDefaultChannel", v: &Package{ diff --git a/staging/operator-registry/alpha/property/property.go b/staging/operator-registry/alpha/property/property.go index 6fb792dda2..dcca33ce5f 100644 --- a/staging/operator-registry/alpha/property/property.go +++ b/staging/operator-registry/alpha/property/property.go @@ -38,6 +38,7 @@ func (p Property) String() string { type Package struct { PackageName string `json:"packageName"` Version string `json:"version"` + Release string `json:"release,omitzero"` } // NOTICE: The Channel properties are for internal use only. @@ -247,6 +248,9 @@ func jsonMarshal(p interface{}) ([]byte, error) { func MustBuildPackage(name, version string) Property { return MustBuild(&Package{PackageName: name, Version: version}) } +func MustBuildPackageRelease(name, version, relVersion string) Property { + return MustBuild(&Package{PackageName: name, Version: version, Release: relVersion}) +} func MustBuildPackageRequired(name, versionRange string) Property { return MustBuild(&PackageRequired{name, versionRange}) } diff --git a/staging/operator-registry/alpha/property/property_test.go b/staging/operator-registry/alpha/property/property_test.go index 171cec7a0c..bb67d5264c 100644 --- a/staging/operator-registry/alpha/property/property_test.go +++ b/staging/operator-registry/alpha/property/property_test.go @@ -132,12 +132,12 @@ func TestParse(t *testing.T) { }, expectProps: &Properties{ Packages: []Package{ - {"package1", "0.1.0"}, - {"package2", "0.2.0"}, + {PackageName: "package1", Version: "0.1.0"}, + {PackageName: "package2", Version: "0.2.0"}, }, PackagesRequired: []PackageRequired{ - {"package3", ">=1.0.0 <2.0.0-0"}, - {"package4", ">=2.0.0 <3.0.0-0"}, + {PackageName: "package3", VersionRange: ">=1.0.0 <2.0.0-0"}, + {PackageName: "package4", VersionRange: ">=2.0.0 <3.0.0-0"}, }, GVKs: []GVK{ {"group", "Kind1", "v1"}, @@ -206,10 +206,28 @@ func TestBuild(t *testing.T) { specs := []spec{ { name: "Success/Package", - input: &Package{"name", "0.1.0"}, + input: &Package{PackageName: "name", Version: "0.1.0"}, assertion: require.NoError, expectedProperty: propPtr(MustBuildPackage("name", "0.1.0")), }, + { + name: "Success/Package-ReleaseVersionNumber", + input: &Package{PackageName: "name", Version: "0.1.0", Release: "1"}, + assertion: require.NoError, + expectedProperty: propPtr(MustBuildPackageRelease("name", "0.1.0", "1")), + }, + { + name: "Success/Package-ReleaseVersionAlpha", + input: &Package{PackageName: "name", Version: "0.1.0", Release: "gamma"}, + assertion: require.NoError, + expectedProperty: propPtr(MustBuildPackageRelease("name", "0.1.0", "gamma")), + }, + { + name: "Success/Package-ReleaseVersionMixed", + input: &Package{PackageName: "name", Version: "0.1.0", Release: "gamma1"}, + assertion: require.NoError, + expectedProperty: propPtr(MustBuildPackageRelease("name", "0.1.0", "gamma1")), + }, { name: "Success/PackageRequired", input: &PackageRequired{"name", ">=0.1.0"}, diff --git a/staging/operator-registry/alpha/template/api/api.go b/staging/operator-registry/alpha/template/api/api.go new file mode 100644 index 0000000000..3db9a95f9b --- /dev/null +++ b/staging/operator-registry/alpha/template/api/api.go @@ -0,0 +1,36 @@ +package api + +import ( + "context" + "io" + + "github.com/operator-framework/operator-registry/alpha/declcfg" +) + +// BundleRenderer defines the function signature for rendering a string containing a bundle image/path/file into a DeclarativeConfig fragment +// It's provided as a discrete type to allow for easy mocking in tests as well as facilitating variable +// restrictions on reference types +type BundleRenderer func(context.Context, string) (*declcfg.DeclarativeConfig, error) + +// Template defines the common interface for all template types +type Template interface { + // RenderBundle renders a bundle image reference into a DeclarativeConfig fragment. + // This function is used to render a single bundle image reference by a template instance, + // and is provided to the template on construction. + // This is typically used in the call to Render the template to DeclarativeConfig, and + // needs to be configurable to handle different bundle image formats and configurations. + RenderBundle(ctx context.Context, imageRef string) (*declcfg.DeclarativeConfig, error) + // Render processes the raw template yaml/json input and returns an expanded DeclarativeConfig + // in the case where expansion fails, it returns an error + Render(ctx context.Context, reader io.Reader) (*declcfg.DeclarativeConfig, error) + // Schema returns the schema identifier for this template type + Schema() string +} + +// Factory creates template instances based on schema +type Factory interface { + // CreateTemplate creates a new template instance with the given RenderBundle function + CreateTemplate(renderBundle BundleRenderer) Template + // Schema returns the schema identifier this factory handles + Schema() string +} diff --git a/staging/operator-registry/alpha/template/basic/basic.go b/staging/operator-registry/alpha/template/basic/basic.go index a34d7541d7..7bb97955bb 100644 --- a/staging/operator-registry/alpha/template/basic/basic.go +++ b/staging/operator-registry/alpha/template/basic/basic.go @@ -9,40 +9,40 @@ import ( "k8s.io/apimachinery/pkg/util/yaml" "github.com/operator-framework/operator-registry/alpha/declcfg" + "github.com/operator-framework/operator-registry/alpha/template/api" ) +// Schema const schema string = "olm.template.basic" -type Template struct { - RenderBundle func(context.Context, string) (*declcfg.DeclarativeConfig, error) -} +// Template types -type BasicTemplate struct { +type BasicTemplateData struct { Schema string `json:"schema"` Entries []*declcfg.Meta `json:"entries"` } -func parseSpec(reader io.Reader) (*BasicTemplate, error) { - bt := &BasicTemplate{} - btDoc := json.RawMessage{} - btDecoder := yaml.NewYAMLOrJSONDecoder(reader, 4096) - err := btDecoder.Decode(&btDoc) - if err != nil { - return nil, fmt.Errorf("decoding template schema: %v", err) - } - err = json.Unmarshal(btDoc, bt) - if err != nil { - return nil, fmt.Errorf("unmarshalling template: %v", err) - } +type basicTemplate struct { + renderBundle api.BundleRenderer +} - if bt.Schema != schema { - return nil, fmt.Errorf("template has unknown schema (%q), should be %q", bt.Schema, schema) +// new creates a new basic template instance +func new(renderBundle api.BundleRenderer) api.Template { + return &basicTemplate{ + renderBundle: renderBundle, } +} - return bt, nil +// Template functions + +// RenderBundle expands the bundle image reference into a DeclarativeConfig fragment. +func (t *basicTemplate) RenderBundle(ctx context.Context, image string) (*declcfg.DeclarativeConfig, error) { + return t.renderBundle(ctx, image) } -func (t Template) Render(ctx context.Context, reader io.Reader) (*declcfg.DeclarativeConfig, error) { +// Render extracts the spec from the reader and converts it to a standalone DeclarativeConfig, +// expanding any bundle image references into full olm.bundle DeclarativeConfig +func (t *basicTemplate) Render(ctx context.Context, reader io.Reader) (*declcfg.DeclarativeConfig, error) { bt, err := parseSpec(reader) if err != nil { return nil, err @@ -68,14 +68,41 @@ func (t Template) Render(ctx context.Context, reader io.Reader) (*declcfg.Declar return cfg, nil } +// Schema returns the schema identifier for this template type +func (t *basicTemplate) Schema() string { + return schema +} + +// Helper functions + +func parseSpec(reader io.Reader) (*BasicTemplateData, error) { + bt := &BasicTemplateData{} + btDoc := json.RawMessage{} + btDecoder := yaml.NewYAMLOrJSONDecoder(reader, 4096) + err := btDecoder.Decode(&btDoc) + if err != nil { + return nil, fmt.Errorf("decoding template schema: %v", err) + } + err = json.Unmarshal(btDoc, bt) + if err != nil { + return nil, fmt.Errorf("unmarshalling template: %v", err) + } + + if bt.Schema != schema { + return nil, fmt.Errorf("template has unknown schema (%q), should be %q", bt.Schema, schema) + } + + return bt, nil +} + // isBundleTemplate identifies a Bundle template source as having a Schema and Image defined // but no Properties, RelatedImages or Package defined func isBundleTemplate(b *declcfg.Bundle) bool { return b.Schema != "" && b.Image != "" && b.Package == "" && len(b.Properties) == 0 && len(b.RelatedImages) == 0 } -// FromReader reads FBC from a reader and generates a BasicTemplate from it -func FromReader(r io.Reader) (*BasicTemplate, error) { +// FromReader reads FBC from a reader and generates a BasicTemplateData from it +func FromReader(r io.Reader) (*BasicTemplateData, error) { var entries []*declcfg.Meta if err := declcfg.WalkMetasReader(r, func(meta *declcfg.Meta, err error) error { if err != nil { @@ -101,10 +128,27 @@ func FromReader(r io.Reader) (*BasicTemplate, error) { return nil, err } - bt := &BasicTemplate{ + bt := &BasicTemplateData{ Schema: schema, Entries: entries, } return bt, nil } + +// Factory types + +// Factory represents the basic template factory +type Factory struct{} + +// Factory functions + +// CreateTemplate creates a new template instance with the given RenderBundle function +func (f *Factory) CreateTemplate(renderBundle api.BundleRenderer) api.Template { + return new(renderBundle) +} + +// Schema returns the schema supported by this factory +func (f *Factory) Schema() string { + return schema +} diff --git a/staging/operator-registry/alpha/template/converter/converter.go b/staging/operator-registry/alpha/template/converter/converter.go index 03e3e0a979..8a5de92e18 100644 --- a/staging/operator-registry/alpha/template/converter/converter.go +++ b/staging/operator-registry/alpha/template/converter/converter.go @@ -9,22 +9,46 @@ import ( "sigs.k8s.io/yaml" "github.com/operator-framework/operator-registry/alpha/template/basic" + "github.com/operator-framework/operator-registry/alpha/template/substitutes" "github.com/operator-framework/operator-registry/pkg/image" ) type Converter struct { - FbcReader io.Reader - OutputFormat string - Registry image.Registry + FbcReader io.Reader + OutputFormat string + Registry image.Registry + DestinationTemplateType string // TODO: when we have a template factory, we can pass it here } func (c *Converter) Convert() error { - bt, err := basic.FromReader(c.FbcReader) - if err != nil { - return err + var b []byte + var err error + switch c.DestinationTemplateType { + case "basic": + var bt *basic.BasicTemplateData + bt, err = basic.FromReader(c.FbcReader) + if err != nil { + return err + } + b, err = json.MarshalIndent(bt, "", " ") + if err != nil { + return err + } + case "substitutes": + var st *substitutes.SubstitutesTemplateData + st, err = substitutes.FromReader(c.FbcReader) + if err != nil { + return err + } + b, err = json.MarshalIndent(st, "", " ") + if err != nil { + return err + } + default: + // usage pattern prevents us from getting here, so if we do it's a programmer failure and we should panic + panic(fmt.Sprintf("unknown template type %q", c.DestinationTemplateType)) } - b, _ := json.MarshalIndent(bt, "", " ") if c.OutputFormat == "json" { fmt.Fprintln(os.Stdout, string(b)) } else { diff --git a/staging/operator-registry/alpha/template/registry.go b/staging/operator-registry/alpha/template/registry.go new file mode 100644 index 0000000000..1ece2e4a6c --- /dev/null +++ b/staging/operator-registry/alpha/template/registry.go @@ -0,0 +1,146 @@ +package template + +import ( + "fmt" + "io" + "slices" + "strings" + "sync" + "text/tabwriter" + + "github.com/operator-framework/operator-registry/alpha/template/api" + "github.com/operator-framework/operator-registry/alpha/template/basic" + "github.com/operator-framework/operator-registry/alpha/template/semver" + "github.com/operator-framework/operator-registry/alpha/template/substitutes" +) + +// Re-export api types for backward compatibility +type ( + BundleRenderer = api.BundleRenderer + Template = api.Template + Factory = api.Factory +) + +type Registry interface { + Register(factory Factory) + GetSupportedTypes() []string + HasType(templateType string) bool + HasSchema(schema string) bool + CreateTemplateBySchema(reader io.Reader, renderBundle BundleRenderer) (Template, io.Reader, error) + CreateTemplateByType(templateType string, renderBundle BundleRenderer) (Template, error) + GetSupportedSchemas() []string + HelpText() string +} + +// registry maintains a mapping of schema identifiers to template factories +type registry struct { + mu sync.RWMutex + factories map[string]Factory +} + +// NewRegistry creates a new registry and registers all built-in template factories. +func NewRegistry() Registry { + r := ®istry{ + factories: make(map[string]Factory), + } + r.Register(&basic.Factory{}) + r.Register(&semver.Factory{}) + r.Register(&substitutes.Factory{}) + return r +} + +func (r *registry) HelpText() string { + var help strings.Builder + supportedTypes := r.GetSupportedTypes() + help.WriteString("\n") + tabber := tabwriter.NewWriter(&help, 0, 0, 1, ' ', 0) + for _, item := range supportedTypes { + fmt.Fprintf(tabber, " - %s\n", item) + } + tabber.Flush() + return help.String() +} + +// Register adds a template factory to the registry +func (r *registry) Register(factory Factory) { + r.mu.Lock() + defer r.mu.Unlock() + r.factories[factory.Schema()] = factory +} + +// CreateTemplateBySchema creates a template instance based on the schema found in the input +// and returns a reader that can be used to render the template. The returned reader includes +// both the data consumed during schema detection and the remaining unconsumed data. +func (r *registry) CreateTemplateBySchema(reader io.Reader, renderBundle BundleRenderer) (Template, io.Reader, error) { + schema, replayReader, err := detectSchema(reader) + if err != nil { + return nil, nil, err + } + + r.mu.RLock() + factory, exists := r.factories[schema] + defer r.mu.RUnlock() + if !exists { + return nil, nil, &UnknownSchemaError{Schema: schema} + } + + return factory.CreateTemplate(renderBundle), replayReader, nil +} + +func (r *registry) CreateTemplateByType(templateType string, renderBundle BundleRenderer) (Template, error) { + r.mu.RLock() + factory, exists := r.factories[templateType] + defer r.mu.RUnlock() + if !exists { + return nil, &UnknownSchemaError{Schema: templateType} + } + + return factory.CreateTemplate(renderBundle), nil +} + +// GetSupportedSchemas returns all supported schema identifiers +func (r *registry) GetSupportedSchemas() []string { + r.mu.RLock() + defer r.mu.RUnlock() + schemas := make([]string, 0, len(r.factories)) + for schema := range r.factories { + schemas = append(schemas, schema) + } + slices.Sort(schemas) + return schemas +} + +// GetSupportedTypes returns all supported template types +// TODO: in future, might store the type separately from the schema +// right now it's just the last part of the schema string +func (r *registry) GetSupportedTypes() []string { + r.mu.RLock() + defer r.mu.RUnlock() + types := make([]string, 0, len(r.factories)) + for schema := range r.factories { + types = append(types, schema[strings.LastIndex(schema, ".")+1:]) + } + slices.Sort(types) + return types +} + +func (r *registry) HasSchema(schema string) bool { + r.mu.RLock() + defer r.mu.RUnlock() + _, exists := r.factories[schema] + return exists +} + +func (r *registry) HasType(templateType string) bool { + types := r.GetSupportedTypes() + return slices.Contains(types, templateType) +} + +// UnknownSchemaError is returned when a schema is not recognized +type UnknownSchemaError struct { + Schema string +} + +func (e *UnknownSchemaError) Error() string { + return "unknown template schema: " + e.Schema +} diff --git a/staging/operator-registry/alpha/template/registry_test.go b/staging/operator-registry/alpha/template/registry_test.go new file mode 100644 index 0000000000..85d90ce6a7 --- /dev/null +++ b/staging/operator-registry/alpha/template/registry_test.go @@ -0,0 +1,482 @@ +package template + +import ( + "context" + "io" + "strings" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/operator-framework/operator-registry/alpha/declcfg" +) + +// mockTemplate is a test implementation of the Template interface +type mockTemplate struct { + schema string + renderBundle BundleRenderer +} + +func (m *mockTemplate) RenderBundle(ctx context.Context, image string) (*declcfg.DeclarativeConfig, error) { + if m.renderBundle != nil { + return m.renderBundle(ctx, image) + } + return &declcfg.DeclarativeConfig{}, nil +} + +func (m *mockTemplate) Render(ctx context.Context, reader io.Reader) (*declcfg.DeclarativeConfig, error) { + return &declcfg.DeclarativeConfig{}, nil +} + +func (m *mockTemplate) Schema() string { + return m.schema +} + +// mockFactory is a test implementation of the TemplateFactory interface +type mockFactory struct { + schema string +} + +func (f *mockFactory) CreateTemplate(renderBundle BundleRenderer) Template { + return &mockTemplate{ + schema: f.schema, + renderBundle: renderBundle, + } +} + +func (f *mockFactory) Schema() string { + return f.schema +} + +// newEmptyTemplateRegistry creates an empty template registry for testing purposes. +// Unlike newEmptyTemplateRegistry(), this does not register any built-in factories. +func newEmptyTemplateRegistry() *registry { + return ®istry{ + factories: make(map[string]Factory), + } +} + +func TestNewTemplateRegistry(t *testing.T) { + registry := newEmptyTemplateRegistry() + + require.NotNil(t, registry) + require.NotNil(t, registry.factories) + require.Empty(t, registry.factories) +} + +func TestTemplateRegistry_Register(t *testing.T) { + tests := []struct { + name string + factories []Factory + expected []string + }{ + { + name: "register single factory", + factories: []Factory{&mockFactory{schema: "olm.semver"}}, + expected: []string{"olm.semver"}, + }, + { + name: "register multiple factories", + factories: []Factory{ + &mockFactory{schema: "olm.semver"}, + &mockFactory{schema: "olm.basic"}, + &mockFactory{schema: "olm.composite"}, + }, + expected: []string{"olm.basic", "olm.composite", "olm.semver"}, + }, + { + name: "register duplicate schema overwrites", + factories: []Factory{ + &mockFactory{schema: "olm.semver"}, + &mockFactory{schema: "olm.semver"}, + }, + expected: []string{"olm.semver"}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + registry := newEmptyTemplateRegistry() + for _, factory := range tt.factories { + registry.Register(factory) + } + + schemas := registry.GetSupportedSchemas() + require.Equal(t, tt.expected, schemas) + }) + } +} + +func TestTemplateRegistry_CreateTemplateByType(t *testing.T) { + tests := []struct { + name string + setupSchemas []string + requestType string + expectError bool + expectedErr string + }{ + { + name: "create template for registered type", + setupSchemas: []string{"olm.semver"}, + requestType: "olm.semver", + expectError: false, + }, + { + name: "create template for multiple registered types", + setupSchemas: []string{"olm.semver", "olm.basic", "olm.composite"}, + requestType: "olm.basic", + expectError: false, + }, + { + name: "error on unregistered type", + setupSchemas: []string{"olm.semver"}, + requestType: "olm.unknown", + expectError: true, + expectedErr: "unknown template schema: olm.unknown", + }, + { + name: "error on empty registry", + setupSchemas: []string{}, + requestType: "olm.semver", + expectError: true, + expectedErr: "unknown template schema: olm.semver", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + registry := newEmptyTemplateRegistry() + for _, schema := range tt.setupSchemas { + registry.Register(&mockFactory{schema: schema}) + } + + template, err := registry.CreateTemplateByType(tt.requestType, nil) + + if tt.expectError { + require.Error(t, err) + require.Nil(t, template) + require.Contains(t, err.Error(), tt.expectedErr) + + var unknownSchemaErr *UnknownSchemaError + require.ErrorAs(t, err, &unknownSchemaErr) + require.Equal(t, tt.requestType, unknownSchemaErr.Schema) + } else { + require.NoError(t, err) + require.NotNil(t, template) + require.Equal(t, tt.requestType, template.Schema()) + } + }) + } +} + +func TestTemplateRegistry_CreateTemplateBySchema(t *testing.T) { + tests := []struct { + name string + setupSchemas []string + input string + expectError bool + expectedErr string + expectedSchema string + }{ + { + name: "create template from valid YAML input", + setupSchemas: []string{"olm.semver"}, + input: `schema: olm.semver +bundles: + - image: example.com/bundle:v1.0.0`, + expectError: false, + expectedSchema: "olm.semver", + }, + { + name: "create template from valid JSON input", + setupSchemas: []string{"olm.semver"}, + input: `{"schema": "olm.semver", "bundles": [{"image": "example.com/bundle:v1.0.0"}]}`, + expectError: false, + expectedSchema: "olm.semver", + }, + { + name: "error on unregistered schema", + setupSchemas: []string{"olm.semver"}, + input: `schema: olm.unknown`, + expectError: true, + expectedErr: "unknown template schema: olm.unknown", + }, + { + name: "error on missing schema field", + setupSchemas: []string{"olm.semver"}, + input: `bundles: []`, + expectError: true, + expectedErr: "missing required 'schema' field", + }, + { + name: "error on invalid YAML", + setupSchemas: []string{"olm.semver"}, + input: `schema: olm.semver\n\tinvalid: [unclosed`, + expectError: true, + expectedErr: "decoding template input", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + registry := newEmptyTemplateRegistry() + for _, schema := range tt.setupSchemas { + registry.Register(&mockFactory{schema: schema}) + } + + reader := strings.NewReader(tt.input) + template, replayReader, err := registry.CreateTemplateBySchema(reader, nil) + + if tt.expectError { + require.Error(t, err) + require.Nil(t, template) + require.Contains(t, err.Error(), tt.expectedErr) + } else { + require.NoError(t, err) + require.NotNil(t, template) + require.NotNil(t, replayReader) + require.Equal(t, tt.expectedSchema, template.Schema()) + + // Verify replay reader contains original input + replayedData, err := io.ReadAll(replayReader) + require.NoError(t, err) + require.Equal(t, tt.input, string(replayedData)) + } + }) + } +} + +func TestTemplateRegistry_GetSupportedSchemas(t *testing.T) { + tests := []struct { + name string + schemas []string + expected []string + }{ + { + name: "empty registry", + schemas: []string{}, + expected: []string{}, + }, + { + name: "single schema", + schemas: []string{"olm.semver"}, + expected: []string{"olm.semver"}, + }, + { + name: "multiple schemas sorted alphabetically", + schemas: []string{"olm.semver", "olm.basic", "olm.composite"}, + expected: []string{"olm.basic", "olm.composite", "olm.semver"}, + }, + { + name: "schemas with different formats", + schemas: []string{"olm.template.semver", "olm.template.basic", "custom.schema"}, + expected: []string{"custom.schema", "olm.template.basic", "olm.template.semver"}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + registry := newEmptyTemplateRegistry() + for _, schema := range tt.schemas { + registry.Register(&mockFactory{schema: schema}) + } + + schemas := registry.GetSupportedSchemas() + require.Equal(t, tt.expected, schemas) + }) + } +} + +func TestTemplateRegistry_GetSupportedTypes(t *testing.T) { + tests := []struct { + name string + schemas []string + expected []string + }{ + { + name: "empty registry", + schemas: []string{}, + expected: []string{}, + }, + { + name: "single schema extracts type", + schemas: []string{"olm.semver"}, + expected: []string{"semver"}, + }, + { + name: "multiple schemas extract types sorted", + schemas: []string{"olm.semver", "olm.basic", "olm.composite"}, + expected: []string{"basic", "composite", "semver"}, + }, + { + name: "schema without dots returns entire string", + schemas: []string{"simple"}, + expected: []string{"simple"}, + }, + { + name: "nested schema extracts last part", + schemas: []string{"olm.template.semver", "olm.template.basic"}, + expected: []string{"basic", "semver"}, + }, + { + name: "duplicate types from different schemas", + schemas: []string{"olm.semver", "custom.semver"}, + expected: []string{"semver", "semver"}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + registry := newEmptyTemplateRegistry() + for _, schema := range tt.schemas { + registry.Register(&mockFactory{schema: schema}) + } + + types := registry.GetSupportedTypes() + require.Equal(t, tt.expected, types) + }) + } +} + +func TestTemplateRegistry_HasSchema(t *testing.T) { + tests := []struct { + name string + registeredSchemas []string + checkSchema string + expected bool + }{ + { + name: "schema exists", + registeredSchemas: []string{"olm.semver"}, + checkSchema: "olm.semver", + expected: true, + }, + { + name: "schema does not exist", + registeredSchemas: []string{"olm.semver"}, + checkSchema: "olm.basic", + expected: false, + }, + { + name: "empty registry", + registeredSchemas: []string{}, + checkSchema: "olm.semver", + expected: false, + }, + { + name: "multiple schemas, check existing", + registeredSchemas: []string{"olm.semver", "olm.basic", "olm.composite"}, + checkSchema: "olm.basic", + expected: true, + }, + { + name: "multiple schemas, check non-existing", + registeredSchemas: []string{"olm.semver", "olm.basic"}, + checkSchema: "olm.unknown", + expected: false, + }, + { + name: "case sensitive check", + registeredSchemas: []string{"olm.semver"}, + checkSchema: "olm.Semver", + expected: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + registry := newEmptyTemplateRegistry() + for _, schema := range tt.registeredSchemas { + registry.Register(&mockFactory{schema: schema}) + } + + result := registry.HasSchema(tt.checkSchema) + require.Equal(t, tt.expected, result) + }) + } +} + +func TestUnknownSchemaError_Error(t *testing.T) { + tests := []struct { + name string + schema string + expected string + }{ + { + name: "simple schema name", + schema: "olm.semver", + expected: "unknown template schema: olm.semver", + }, + { + name: "complex schema name", + schema: "custom.template.v1.0", + expected: "unknown template schema: custom.template.v1.0", + }, + { + name: "empty schema name", + schema: "", + expected: "unknown template schema: ", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := &UnknownSchemaError{Schema: tt.schema} + require.Equal(t, tt.expected, err.Error()) + }) + } +} + +// capturingRenderBundle creates a BundleRenderer that captures the image parameter +func capturingRenderBundle(captured *string) BundleRenderer { + return func(_ context.Context, image string) (*declcfg.DeclarativeConfig, error) { + *captured = image + return &declcfg.DeclarativeConfig{}, nil + } +} + +func TestTemplateRegistry_RenderBundlePropagation(t *testing.T) { + expectedImage := "example.com/bundle:v1.0.0" + var capturedImage string + + mockRenderBundle := capturingRenderBundle(&capturedImage) + + tests := []struct { + name string + method string + }{ + { + name: "CreateTemplateByType propagates RenderBundle", + method: "byType", + }, + { + name: "CreateTemplateBySchema propagates RenderBundle", + method: "bySchema", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + registry := newEmptyTemplateRegistry() + registry.Register(&mockFactory{schema: "olm.semver"}) + + var template Template + var err error + + if tt.method == "byType" { + template, err = registry.CreateTemplateByType("olm.semver", mockRenderBundle) + require.NoError(t, err) + } else { + input := `schema: olm.semver` + reader := strings.NewReader(input) + template, _, err = registry.CreateTemplateBySchema(reader, mockRenderBundle) + require.NoError(t, err) + } + + ctx := context.Background() + _, err = template.RenderBundle(ctx, expectedImage) + require.NoError(t, err) + require.Equal(t, expectedImage, capturedImage) + }) + } +} diff --git a/staging/operator-registry/alpha/template/schema.go b/staging/operator-registry/alpha/template/schema.go new file mode 100644 index 0000000000..d96b346da3 --- /dev/null +++ b/staging/operator-registry/alpha/template/schema.go @@ -0,0 +1,47 @@ +package template + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + + "k8s.io/apimachinery/pkg/util/yaml" +) + +// detectSchema reads the input, extracts the schema field, and returns a reader +// that includes the consumed data followed by the remaining stream data. +// This works when the input is stdin or a file (since stdin cannot be closed and reopened) +// and complies with the requirement that each supplied schema has a defined "schema" field, +// without attempting to load all input into memory. +func detectSchema(reader io.Reader) (string, io.Reader, error) { + // Capture what's read during schema detection + var capturedData bytes.Buffer + teeReader := io.TeeReader(reader, &capturedData) + + // Read the input into a raw message + rawDoc := json.RawMessage{} + decoder := yaml.NewYAMLOrJSONDecoder(teeReader, 4096) + err := decoder.Decode(&rawDoc) + if err != nil { + return "", nil, fmt.Errorf("decoding template input: %v", err) + } + + // Parse the raw message to extract schema + var schemaDoc struct { + Schema string `json:"schema"` + } + err = json.Unmarshal(rawDoc, &schemaDoc) + if err != nil { + return "", nil, fmt.Errorf("unmarshalling template schema: %v", err) + } + + if schemaDoc.Schema == "" { + return "", nil, fmt.Errorf("template input missing required 'schema' field") + } + + // Create a reader that combines the captured data with the remaining stream + replayReader := io.MultiReader(&capturedData, reader) + + return schemaDoc.Schema, replayReader, nil +} diff --git a/staging/operator-registry/alpha/template/semver/semver.go b/staging/operator-registry/alpha/template/semver/semver.go index 8a4b837b41..22ca94e8d3 100644 --- a/staging/operator-registry/alpha/template/semver/semver.go +++ b/staging/operator-registry/alpha/template/semver/semver.go @@ -15,12 +15,72 @@ import ( "github.com/operator-framework/operator-registry/alpha/declcfg" "github.com/operator-framework/operator-registry/alpha/property" + "github.com/operator-framework/operator-registry/alpha/template/api" ) -func (t Template) Render(ctx context.Context) (*declcfg.DeclarativeConfig, error) { +// Schema +const schema string = "olm.semver" + +// Template types + +// StreamType represents the type of version stream for channel generation +type StreamType string + +const ( + // DefaultStreamType represents an unspecified stream type + DefaultStreamType StreamType = "" + // MinorStreamType represents minor version channels (e.g., stable-v1.2) + MinorStreamType StreamType = "minor" + // MajorStreamType represents major version channels (e.g., stable-v1) + MajorStreamType StreamType = "major" +) + +type bundleEntry struct { + Image string `json:"image,omitempty"` +} + +type channelBundles struct { + Bundles []bundleEntry `json:"bundles,omitempty"` +} + +type SemverTemplateData struct { + Schema string `json:"schema"` + GenerateMajorChannels bool `json:"generateMajorChannels,omitempty"` + GenerateMinorChannels bool `json:"generateMinorChannels,omitempty"` + DefaultChannelTypePreference StreamType `json:"defaultChannelTypePreference,omitempty"` + Candidate channelBundles `json:"candidate,omitempty"` + Fast channelBundles `json:"fast,omitempty"` + Stable channelBundles `json:"stable,omitempty"` + + pkg string `json:"-"` // the derived package name + defaultChannel string `json:"-"` // detected "most stable" channel head +} + +// semverTemplate implements the common template interface +type semverTemplate struct { + renderBundle api.BundleRenderer +} + +// new creates a new semver template instance +func new(renderBundle api.BundleRenderer) api.Template { + return &semverTemplate{ + renderBundle: renderBundle, + } +} + +// Template functions + +// RenderBundle expands the bundle image reference into a DeclarativeConfig fragment. +func (t *semverTemplate) RenderBundle(ctx context.Context, image string) (*declcfg.DeclarativeConfig, error) { + return t.renderBundle(ctx, image) +} + +// Render takes all provided entries and converts them to a standalone DeclarativeConfig, +// generating channels based on the bundles listed in the template and expanding any bundle image references into full olm.bundle DeclarativeConfig +func (t *semverTemplate) Render(ctx context.Context, reader io.Reader) (*declcfg.DeclarativeConfig, error) { var out declcfg.DeclarativeConfig - sv, err := readFile(t.Data) + sv, err := readFile(reader) if err != nil { return nil, fmt.Errorf("render: unable to read file: %v", err) } @@ -58,9 +118,86 @@ func (t Template) Render(ctx context.Context) (*declcfg.DeclarativeConfig, error return &out, nil } -func buildBundleList(t semverTemplate) map[string]string { +// Schema returns the schema identifier for this template type +func (t *semverTemplate) Schema() string { + return schema +} + +// Helper functions + +// channel "archetypes", restricted in this iteration to just these +type channelArchetype string + +const ( + candidateChannelArchetype channelArchetype = "candidate" + fastChannelArchetype channelArchetype = "fast" + stableChannelArchetype channelArchetype = "stable" +) + +// mapping channel name --> stability, where higher values indicate greater stability +var channelPriorities = map[channelArchetype]int{candidateChannelArchetype: 0, fastChannelArchetype: 1, stableChannelArchetype: 2} + +// sorting capability for a slice according to the assigned channelPriorities +type byChannelPriority []channelArchetype + +func (b byChannelPriority) Len() int { return len(b) } +func (b byChannelPriority) Less(i, j int) bool { + return channelPriorities[b[i]] < channelPriorities[b[j]] +} +func (b byChannelPriority) Swap(i, j int) { b[i], b[j] = b[j], b[i] } + +// general preference for minor channels +var streamTypePriorities = map[StreamType]int{MinorStreamType: 2, MajorStreamType: 1, DefaultStreamType: 0} + +// map of archetypes --> bundles --> bundle-version from the input file +type bundleVersions map[channelArchetype]map[string]semver.Version // e.g. srcv["stable"]["example-operator.v1.0.0"] = 1.0.0 + +// the "high-water channel" struct functions as a freely-rising indicator of the "most stable" channel head, so we can use that +// later as the package's defaultChannel attribute +type highwaterChannel struct { + archetype channelArchetype + kind StreamType + version semver.Version + name string +} + +// prefer (in descending order of preference): +// - higher-rank archetype, +// - semver version, +// - a channel type matching the set preference, or +// - a 'better' (higher value) channel type +func (h *highwaterChannel) gt(ih *highwaterChannel, pref StreamType) bool { + if channelPriorities[h.archetype] != channelPriorities[ih.archetype] { + return channelPriorities[h.archetype] > channelPriorities[ih.archetype] + } + if h.version.NE(ih.version) { + return h.version.GT(ih.version) + } + if h.kind != ih.kind { + if h.kind == pref { + return true + } + if ih.kind == pref { + return false + } + return h.kind.gt((*ih).kind) + } + return false +} + +// entryTuple represents a channel entry with its associated metadata +type entryTuple struct { + arch channelArchetype + kind StreamType + parent string + name string + version semver.Version + index int +} + +func buildBundleList(t SemverTemplateData) map[string]string { dict := make(map[string]string) - for _, bl := range []semverTemplateChannelBundles{t.Candidate, t.Fast, t.Stable} { + for _, bl := range []channelBundles{t.Candidate, t.Fast, t.Stable} { for _, b := range bl.Bundles { if _, ok := dict[b.Image]; !ok { dict[b.Image] = b.Image @@ -70,13 +207,13 @@ func buildBundleList(t semverTemplate) map[string]string { return dict } -func readFile(reader io.Reader) (*semverTemplate, error) { +func readFile(reader io.Reader) (*SemverTemplateData, error) { data, err := io.ReadAll(reader) if err != nil { return nil, err } - sv := semverTemplate{} + sv := SemverTemplateData{} if err := yaml.UnmarshalStrict(data, &sv); err != nil { return nil, err } @@ -94,17 +231,17 @@ func readFile(reader io.Reader) (*semverTemplate, error) { // if un-set, default to align to the selected generate option // if set, error out if we mismatch the two switch sv.DefaultChannelTypePreference { - case defaultStreamType: + case DefaultStreamType: if sv.GenerateMinorChannels { - sv.DefaultChannelTypePreference = minorStreamType + sv.DefaultChannelTypePreference = MinorStreamType } else if sv.GenerateMajorChannels { - sv.DefaultChannelTypePreference = majorStreamType + sv.DefaultChannelTypePreference = MajorStreamType } - case minorStreamType: + case MinorStreamType: if !sv.GenerateMinorChannels { return nil, fmt.Errorf("schema attribute mismatch: DefaultChannelTypePreference set to 'minor' doesn't make sense if not generating minor-version channels") } - case majorStreamType: + case MajorStreamType: if !sv.GenerateMajorChannels { return nil, fmt.Errorf("schema attribute mismatch: DefaultChannelTypePreference set to 'major' doesn't make sense if not generating major-version channels") } @@ -115,7 +252,7 @@ func readFile(reader io.Reader) (*semverTemplate, error) { return &sv, nil } -func (sv *semverTemplate) getVersionsFromStandardChannels(cfg *declcfg.DeclarativeConfig, bundleDict map[string]string) (*bundleVersions, error) { +func (sv *SemverTemplateData) getVersionsFromStandardChannels(cfg *declcfg.DeclarativeConfig, bundleDict map[string]string) (*bundleVersions, error) { versions := bundleVersions{} bdm, err := sv.getVersionsFromChannel(sv.Candidate.Bundles, bundleDict, cfg) @@ -148,7 +285,7 @@ func (sv *semverTemplate) getVersionsFromStandardChannels(cfg *declcfg.Declarati return &versions, nil } -func (sv *semverTemplate) getVersionsFromChannel(semverBundles []semverTemplateBundleEntry, bundleDict map[string]string, cfg *declcfg.DeclarativeConfig) (map[string]semver.Version, error) { +func (sv *SemverTemplateData) getVersionsFromChannel(semverBundles []bundleEntry, bundleDict map[string]string, cfg *declcfg.DeclarativeConfig) (map[string]semver.Version, error) { entries := make(map[string]semver.Version) // we iterate over the channel bundles from the template, to: @@ -204,13 +341,12 @@ func (sv *semverTemplate) getVersionsFromChannel(semverBundles []semverTemplateB return entries, nil } -// generates an unlinked channel for each channel as per the input template config (major || minor), then link up the edges of the set of channels so that: +// generateChannels generates an unlinked channel for each channel as per the input template config (major || minor), then link up the edges of the set of channels so that: // - for minor version increase, the new edge replaces the previous // - (for major channels) iterating to a new minor version channel (traversing between Y-streams) creates a 'replaces' edge between the predecessor and successor bundles // - within the same minor version (Y-stream), the head of the channel should have a 'skips' encompassing all lesser Y.Z versions of the bundle enumerated in the template. // along the way, uses a highwaterChannel marker to identify the "most stable" channel head to be used as the default channel for the generated package - -func (sv *semverTemplate) generateChannels(semverChannels *bundleVersions) []declcfg.Channel { +func (sv *SemverTemplateData) generateChannels(semverChannels *bundleVersions) []declcfg.Channel { outChannels := []declcfg.Channel{} // sort the channel archetypes in ascending order so we can traverse the bundles in order of @@ -253,12 +389,12 @@ func (sv *semverTemplate) generateChannels(semverChannels *bundleVersions) []dec for _, bundleName := range bundleNamesByVersion { // a dodge to avoid duplicating channel processing body; accumulate a map of the channels which need creating from the bundle // we need to associate by kind so we can partition the resulting entries - channelNameKeys := make(map[streamType]string) + channelNameKeys := make(map[StreamType]string) if sv.GenerateMajorChannels { - channelNameKeys[majorStreamType] = channelNameFromMajor(archetype, bundles[bundleName]) + channelNameKeys[MajorStreamType] = channelNameFromMajor(archetype, bundles[bundleName]) } if sv.GenerateMinorChannels { - channelNameKeys[minorStreamType] = channelNameFromMinor(archetype, bundles[bundleName]) + channelNameKeys[MinorStreamType] = channelNameFromMinor(archetype, bundles[bundleName]) } for cKey, cName := range channelNameKeys { @@ -287,7 +423,7 @@ func (sv *semverTemplate) generateChannels(semverChannels *bundleVersions) []dec return outChannels } -func (sv *semverTemplate) linkChannels(unlinkedChannels map[string]*declcfg.Channel, entries []entryTuple) []declcfg.Channel { +func (sv *SemverTemplateData) linkChannels(unlinkedChannels map[string]*declcfg.Channel, entries []entryTuple) []declcfg.Channel { channels := []declcfg.Channel{} // sort to force partitioning by archetype --> kind --> semver @@ -465,30 +601,23 @@ func stripBuildMetadata(v semver.Version) string { return v.String() } -// prefer (in descending order of preference): -// - higher-rank archetype, -// - semver version, -// - a channel type matching the set preference, or -// - a 'better' (higher value) channel type -func (h *highwaterChannel) gt(ih *highwaterChannel, pref streamType) bool { - if channelPriorities[h.archetype] != channelPriorities[ih.archetype] { - return channelPriorities[h.archetype] > channelPriorities[ih.archetype] - } - if h.version.NE(ih.version) { - return h.version.GT(ih.version) - } - if h.kind != ih.kind { - if h.kind == pref { - return true - } - if ih.kind == pref { - return false - } - return h.kind.gt((*ih).kind) - } - return false +func (t StreamType) gt(in StreamType) bool { + return streamTypePriorities[t] > streamTypePriorities[in] } -func (t streamType) gt(in streamType) bool { - return streamTypePriorities[t] > streamTypePriorities[in] +// Factory types + +// Factory represents the semver template factory +type Factory struct{} + +// Factory functions + +// CreateTemplate creates a new template instance with the given RenderBundle function +func (f *Factory) CreateTemplate(renderBundle api.BundleRenderer) api.Template { + return new(renderBundle) +} + +// Schema returns the schema supported by this factory +func (f *Factory) Schema() string { + return schema } diff --git a/staging/operator-registry/alpha/template/semver/semver_test.go b/staging/operator-registry/alpha/template/semver/semver_test.go index d85522ba4f..79b17196bd 100644 --- a/staging/operator-registry/alpha/template/semver/semver_test.go +++ b/staging/operator-registry/alpha/template/semver/semver_test.go @@ -26,38 +26,38 @@ func TestLinkChannels(t *testing.T) { // } minimumChannelEntries := []entryTuple{ - {arch: stableChannelArchetype, kind: majorStreamType, name: "a-v0.1.0", parent: "stable-v0.1", index: 0, version: semver.MustParse("0.1.0")}, + {arch: stableChannelArchetype, kind: MajorStreamType, name: "a-v0.1.0", parent: "stable-v0.1", index: 0, version: semver.MustParse("0.1.0")}, } majorChannelEntries := []entryTuple{ - {arch: stableChannelArchetype, kind: majorStreamType, name: "a-v0.1.0", parent: "stable-v0", index: 0, version: semver.MustParse("0.1.0")}, - {arch: stableChannelArchetype, kind: majorStreamType, name: "a-v0.1.1", parent: "stable-v0", index: 1, version: semver.MustParse("0.1.1")}, - {arch: stableChannelArchetype, kind: majorStreamType, name: "a-v1.1.0", parent: "stable-v1", index: 0, version: semver.MustParse("1.1.0")}, - {arch: stableChannelArchetype, kind: majorStreamType, name: "a-v1.2.1", parent: "stable-v1", index: 1, version: semver.MustParse("1.2.1")}, - {arch: stableChannelArchetype, kind: majorStreamType, name: "a-v1.3.1", parent: "stable-v1", index: 2, version: semver.MustParse("1.3.1")}, - {arch: stableChannelArchetype, kind: majorStreamType, name: "a-v2.1.0", parent: "stable-v2", index: 0, version: semver.MustParse("2.1.0")}, - {arch: stableChannelArchetype, kind: majorStreamType, name: "a-v2.1.1", parent: "stable-v2", index: 1, version: semver.MustParse("2.1.1")}, - {arch: stableChannelArchetype, kind: majorStreamType, name: "a-v2.3.1", parent: "stable-v2", index: 2, version: semver.MustParse("2.3.1")}, - {arch: stableChannelArchetype, kind: majorStreamType, name: "a-v2.3.2", parent: "stable-v2", index: 3, version: semver.MustParse("2.3.2")}, + {arch: stableChannelArchetype, kind: MajorStreamType, name: "a-v0.1.0", parent: "stable-v0", index: 0, version: semver.MustParse("0.1.0")}, + {arch: stableChannelArchetype, kind: MajorStreamType, name: "a-v0.1.1", parent: "stable-v0", index: 1, version: semver.MustParse("0.1.1")}, + {arch: stableChannelArchetype, kind: MajorStreamType, name: "a-v1.1.0", parent: "stable-v1", index: 0, version: semver.MustParse("1.1.0")}, + {arch: stableChannelArchetype, kind: MajorStreamType, name: "a-v1.2.1", parent: "stable-v1", index: 1, version: semver.MustParse("1.2.1")}, + {arch: stableChannelArchetype, kind: MajorStreamType, name: "a-v1.3.1", parent: "stable-v1", index: 2, version: semver.MustParse("1.3.1")}, + {arch: stableChannelArchetype, kind: MajorStreamType, name: "a-v2.1.0", parent: "stable-v2", index: 0, version: semver.MustParse("2.1.0")}, + {arch: stableChannelArchetype, kind: MajorStreamType, name: "a-v2.1.1", parent: "stable-v2", index: 1, version: semver.MustParse("2.1.1")}, + {arch: stableChannelArchetype, kind: MajorStreamType, name: "a-v2.3.1", parent: "stable-v2", index: 2, version: semver.MustParse("2.3.1")}, + {arch: stableChannelArchetype, kind: MajorStreamType, name: "a-v2.3.2", parent: "stable-v2", index: 3, version: semver.MustParse("2.3.2")}, } majorChannelEntriesLastXChange := []entryTuple{ - {arch: stableChannelArchetype, kind: majorStreamType, name: "a-v0.1.0", parent: "stable-v0", index: 0, version: semver.MustParse("0.1.0")}, - {arch: stableChannelArchetype, kind: majorStreamType, name: "a-v0.1.1", parent: "stable-v0", index: 1, version: semver.MustParse("0.1.1")}, - {arch: stableChannelArchetype, kind: majorStreamType, name: "a-v1.1.0", parent: "stable-v1", index: 0, version: semver.MustParse("1.1.0")}, - {arch: stableChannelArchetype, kind: majorStreamType, name: "a-v1.2.1", parent: "stable-v1", index: 1, version: semver.MustParse("1.2.1")}, - {arch: stableChannelArchetype, kind: majorStreamType, name: "a-v1.3.1", parent: "stable-v1", index: 2, version: semver.MustParse("1.3.1")}, - {arch: stableChannelArchetype, kind: majorStreamType, name: "a-v2.1.0", parent: "stable-v2", index: 0, version: semver.MustParse("2.1.0")}, + {arch: stableChannelArchetype, kind: MajorStreamType, name: "a-v0.1.0", parent: "stable-v0", index: 0, version: semver.MustParse("0.1.0")}, + {arch: stableChannelArchetype, kind: MajorStreamType, name: "a-v0.1.1", parent: "stable-v0", index: 1, version: semver.MustParse("0.1.1")}, + {arch: stableChannelArchetype, kind: MajorStreamType, name: "a-v1.1.0", parent: "stable-v1", index: 0, version: semver.MustParse("1.1.0")}, + {arch: stableChannelArchetype, kind: MajorStreamType, name: "a-v1.2.1", parent: "stable-v1", index: 1, version: semver.MustParse("1.2.1")}, + {arch: stableChannelArchetype, kind: MajorStreamType, name: "a-v1.3.1", parent: "stable-v1", index: 2, version: semver.MustParse("1.3.1")}, + {arch: stableChannelArchetype, kind: MajorStreamType, name: "a-v2.1.0", parent: "stable-v2", index: 0, version: semver.MustParse("2.1.0")}, } majorChannelEntriesLastArchChange := []entryTuple{ - {arch: stableChannelArchetype, kind: majorStreamType, name: "a-v1.1.0", parent: "stable-v1", index: 0, version: semver.MustParse("1.1.0")}, - {arch: stableChannelArchetype, kind: majorStreamType, name: "a-v1.2.1", parent: "stable-v1", index: 1, version: semver.MustParse("1.2.1")}, - {arch: stableChannelArchetype, kind: majorStreamType, name: "a-v1.3.1", parent: "stable-v1", index: 2, version: semver.MustParse("1.3.1")}, - {arch: stableChannelArchetype, kind: majorStreamType, name: "a-v2.1.0", parent: "stable-v2", index: 0, version: semver.MustParse("2.1.0")}, - {arch: stableChannelArchetype, kind: majorStreamType, name: "a-v2.1.1", parent: "stable-v2", index: 1, version: semver.MustParse("2.1.1")}, - {arch: stableChannelArchetype, kind: majorStreamType, name: "a-v2.3.1", parent: "stable-v2", index: 2, version: semver.MustParse("2.3.1")}, - {arch: candidateChannelArchetype, kind: majorStreamType, name: "a-v2.3.2", parent: "candidate-v2", index: 0, version: semver.MustParse("2.3.2")}, + {arch: stableChannelArchetype, kind: MajorStreamType, name: "a-v1.1.0", parent: "stable-v1", index: 0, version: semver.MustParse("1.1.0")}, + {arch: stableChannelArchetype, kind: MajorStreamType, name: "a-v1.2.1", parent: "stable-v1", index: 1, version: semver.MustParse("1.2.1")}, + {arch: stableChannelArchetype, kind: MajorStreamType, name: "a-v1.3.1", parent: "stable-v1", index: 2, version: semver.MustParse("1.3.1")}, + {arch: stableChannelArchetype, kind: MajorStreamType, name: "a-v2.1.0", parent: "stable-v2", index: 0, version: semver.MustParse("2.1.0")}, + {arch: stableChannelArchetype, kind: MajorStreamType, name: "a-v2.1.1", parent: "stable-v2", index: 1, version: semver.MustParse("2.1.1")}, + {arch: stableChannelArchetype, kind: MajorStreamType, name: "a-v2.3.1", parent: "stable-v2", index: 2, version: semver.MustParse("2.3.1")}, + {arch: candidateChannelArchetype, kind: MajorStreamType, name: "a-v2.3.2", parent: "candidate-v2", index: 0, version: semver.MustParse("2.3.2")}, } majorGeneratedUnlinkedChannels := map[string]*declcfg.Channel{ @@ -306,7 +306,7 @@ func TestLinkChannels(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - sv := &semverTemplate{pkg: "a", GenerateMajorChannels: tt.generateMajorChannels, GenerateMinorChannels: tt.generateMinorChannels} + sv := &SemverTemplateData{pkg: "a", GenerateMajorChannels: tt.generateMajorChannels, GenerateMinorChannels: tt.generateMinorChannels} diff := gocmp.Diff(tt.out, sv.linkChannels(tt.unlinkedChannels, tt.channelEntries)) if diff != "" { t.Errorf("unexpected channel diff (-expected +received):\n%s", diff) @@ -472,7 +472,7 @@ func TestGenerateChannels(t *testing.T) { generateMinorChannels bool generateMajorChannels bool defaultChannel string - channelTypePreference streamType + channelTypePreference StreamType out []declcfg.Channel }{ { @@ -480,7 +480,7 @@ func TestGenerateChannels(t *testing.T) { generateMinorChannels: true, generateMajorChannels: false, defaultChannel: "stable-v3.1", - channelTypePreference: minorStreamType, + channelTypePreference: MinorStreamType, out: minorLinkedChannels, }, { @@ -488,7 +488,7 @@ func TestGenerateChannels(t *testing.T) { generateMinorChannels: false, generateMajorChannels: true, defaultChannel: "stable-v3", - channelTypePreference: majorStreamType, + channelTypePreference: MajorStreamType, out: majorLinkedChannels, }, { @@ -496,7 +496,7 @@ func TestGenerateChannels(t *testing.T) { generateMinorChannels: true, generateMajorChannels: true, defaultChannel: "stable-v3.1", - channelTypePreference: minorStreamType, + channelTypePreference: MinorStreamType, out: combinedLinkedChannels, }, { @@ -504,7 +504,7 @@ func TestGenerateChannels(t *testing.T) { generateMinorChannels: true, generateMajorChannels: true, defaultChannel: "stable-v3", - channelTypePreference: majorStreamType, + channelTypePreference: MajorStreamType, out: combinedLinkedChannels, }, { @@ -512,7 +512,7 @@ func TestGenerateChannels(t *testing.T) { generateMinorChannels: true, generateMajorChannels: false, defaultChannel: "stable-v3.1", - channelTypePreference: majorStreamType, + channelTypePreference: MajorStreamType, out: minorLinkedChannels, }, { @@ -520,17 +520,17 @@ func TestGenerateChannels(t *testing.T) { generateMinorChannels: false, generateMajorChannels: true, defaultChannel: "stable-v3", - channelTypePreference: minorStreamType, + channelTypePreference: MinorStreamType, out: majorLinkedChannels, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - sv := &semverTemplate{GenerateMajorChannels: tt.generateMajorChannels, GenerateMinorChannels: tt.generateMinorChannels, pkg: "a", DefaultChannelTypePreference: tt.channelTypePreference} - diff := gocmp.Diff(tt.out, sv.generateChannels(&channelOperatorVersions)) - if diff != "" { - t.Errorf("unexpected channel diff (-expected +received):\n%s", diff) + sv := &SemverTemplateData{GenerateMajorChannels: tt.generateMajorChannels, GenerateMinorChannels: tt.generateMinorChannels, pkg: "a", DefaultChannelTypePreference: tt.channelTypePreference} + out := sv.generateChannels(&channelOperatorVersions) + if diff := gocmp.Diff(tt.out, out); diff != "" { + t.Errorf("unexpected generated channels (-expected +received):\n%s", diff) } require.Equal(t, tt.defaultChannel, sv.defaultChannel) }) @@ -540,15 +540,15 @@ func TestGenerateChannels(t *testing.T) { func TestGetVersionsFromStandardChannel(t *testing.T) { tests := []struct { name string - sv semverTemplate + sv SemverTemplateData outVersions bundleVersions dc declcfg.DeclarativeConfig }{ { name: "sunny day case", - sv: semverTemplate{ - Stable: semverTemplateChannelBundles{ - []semverTemplateBundleEntry{ + sv: SemverTemplateData{ + Stable: channelBundles{ + []bundleEntry{ {Image: "repo/origin/a-v0.1.0"}, {Image: "repo/origin/a-v0.1.1"}, {Image: "repo/origin/a-v1.1.0"}, @@ -605,16 +605,16 @@ func TestGetVersionsFromStandardChannel(t *testing.T) { iosv := tt.sv versions, err := iosv.getVersionsFromStandardChannels(&tt.dc, buildBundleList(tt.sv)) require.NoError(t, err) - require.EqualValues(t, tt.outVersions, *versions) - require.EqualValues(t, "a", iosv.pkg) // verify that we learned the package name and stashed it in the receiver + require.Equal(t, tt.outVersions, *versions) + require.Equal(t, "a", iosv.pkg) // verify that we learned the package name and stashed it in the receiver }) } } func TestBailOnVersionBuildMetadata(t *testing.T) { - sv := semverTemplate{ - Stable: semverTemplateChannelBundles{ - []semverTemplateBundleEntry{ + sv := SemverTemplateData{ + Stable: channelBundles{ + []bundleEntry{ {Image: "repo/origin/a-v0.1.0"}, {Image: "repo/origin/a-v0.1.1"}, {Image: "repo/origin/a-v1.1.0"}, @@ -694,13 +694,13 @@ stable: type testCase struct { name string input string - assertions func(*testing.T, *semverTemplate, error) + assertions func(*testing.T, *SemverTemplateData, error) } testCases := []testCase{ { name: "valid", input: fmt.Sprintf(templateFstr, "true", "true", "minor"), - assertions: func(t *testing.T, template *semverTemplate, err error) { + assertions: func(t *testing.T, template *SemverTemplateData, err error) { require.NotNil(t, template) require.NoError(t, err) }, @@ -738,7 +738,7 @@ invalid: bundles: - image: quay.io/foo/olm:testoperator.v1.0.1 `, - assertions: func(t *testing.T, template *semverTemplate, err error) { + assertions: func(t *testing.T, template *SemverTemplateData, err error) { require.Nil(t, template) require.EqualError(t, err, `error unmarshaling JSON: while decoding JSON: json: unknown field "invalid"`) }, @@ -746,7 +746,7 @@ invalid: { name: "generate/default mismatch, minor/major", input: fmt.Sprintf(templateFstr, "true", "false", "minor"), - assertions: func(t *testing.T, template *semverTemplate, err error) { + assertions: func(t *testing.T, template *SemverTemplateData, err error) { require.Nil(t, template) require.ErrorContains(t, err, "schema attribute mismatch") }, @@ -754,7 +754,7 @@ invalid: { name: "generate/default mismatch, major/minor", input: fmt.Sprintf(templateFstr, "false", "true", "major"), - assertions: func(t *testing.T, template *semverTemplate, err error) { + assertions: func(t *testing.T, template *SemverTemplateData, err error) { require.Nil(t, template) require.ErrorContains(t, err, "schema attribute mismatch") }, @@ -762,7 +762,7 @@ invalid: { name: "unknown defaultchanneltypepreference", input: fmt.Sprintf(templateFstr, "false", "true", "foo"), - assertions: func(t *testing.T, template *semverTemplate, err error) { + assertions: func(t *testing.T, template *SemverTemplateData, err error) { require.Nil(t, template) require.ErrorContains(t, err, "unknown DefaultChannelTypePreference") }, diff --git a/staging/operator-registry/alpha/template/semver/types.go b/staging/operator-registry/alpha/template/semver/types.go deleted file mode 100644 index fda01139a3..0000000000 --- a/staging/operator-registry/alpha/template/semver/types.go +++ /dev/null @@ -1,93 +0,0 @@ -package semver - -import ( - "context" - "io" - - "github.com/blang/semver/v4" - - "github.com/operator-framework/operator-registry/alpha/declcfg" -) - -// data passed into this module externally -type Template struct { - Data io.Reader - RenderBundle func(context.Context, string) (*declcfg.DeclarativeConfig, error) -} - -// IO structs -- BEGIN -type semverTemplateBundleEntry struct { - Image string `json:"image,omitempty"` -} - -type semverTemplateChannelBundles struct { - Bundles []semverTemplateBundleEntry `json:"bundles,omitempty"` -} - -type semverTemplate struct { - Schema string `json:"schema"` - GenerateMajorChannels bool `json:"generateMajorChannels,omitempty"` - GenerateMinorChannels bool `json:"generateMinorChannels,omitempty"` - DefaultChannelTypePreference streamType `json:"defaultChannelTypePreference,omitempty"` - Candidate semverTemplateChannelBundles `json:"candidate,omitempty"` - Fast semverTemplateChannelBundles `json:"fast,omitempty"` - Stable semverTemplateChannelBundles `json:"stable,omitempty"` - - pkg string `json:"-"` // the derived package name - defaultChannel string `json:"-"` // detected "most stable" channel head -} - -// IO structs -- END - -const schema string = "olm.semver" - -// channel "archetypes", restricted in this iteration to just these -type channelArchetype string - -const ( - candidateChannelArchetype channelArchetype = "candidate" - fastChannelArchetype channelArchetype = "fast" - stableChannelArchetype channelArchetype = "stable" -) - -// mapping channel name --> stability, where higher values indicate greater stability -var channelPriorities = map[channelArchetype]int{candidateChannelArchetype: 0, fastChannelArchetype: 1, stableChannelArchetype: 2} - -// sorting capability for a slice according to the assigned channelPriorities -type byChannelPriority []channelArchetype - -func (b byChannelPriority) Len() int { return len(b) } -func (b byChannelPriority) Less(i, j int) bool { - return channelPriorities[b[i]] < channelPriorities[b[j]] -} -func (b byChannelPriority) Swap(i, j int) { b[i], b[j] = b[j], b[i] } - -type streamType string - -const defaultStreamType streamType = "" -const minorStreamType streamType = "minor" -const majorStreamType streamType = "major" - -// general preference for minor channels -var streamTypePriorities = map[streamType]int{minorStreamType: 2, majorStreamType: 1, defaultStreamType: 0} - -// map of archetypes --> bundles --> bundle-version from the input file -type bundleVersions map[channelArchetype]map[string]semver.Version // e.g. srcv["stable"]["example-operator.v1.0.0"] = 1.0.0 - -// the "high-water channel" struct functions as a freely-rising indicator of the "most stable" channel head, so we can use that -// later as the package's defaultChannel attribute -type highwaterChannel struct { - archetype channelArchetype - kind streamType - version semver.Version - name string -} - -type entryTuple struct { - arch channelArchetype - kind streamType - name string - parent string - index int - version semver.Version -} diff --git a/staging/operator-registry/alpha/template/substitutes/substitutes.go b/staging/operator-registry/alpha/template/substitutes/substitutes.go new file mode 100644 index 0000000000..d2ed36e967 --- /dev/null +++ b/staging/operator-registry/alpha/template/substitutes/substitutes.go @@ -0,0 +1,287 @@ +package substitutes + +import ( + "context" + "encoding/json" + "fmt" + "io" + "slices" + + "k8s.io/apimachinery/pkg/util/yaml" + + "github.com/operator-framework/operator-registry/alpha/declcfg" + "github.com/operator-framework/operator-registry/alpha/template/api" +) + +// Schema +const schema string = "olm.template.substitutes" + +// Template types + +// Substitute defines a replacement relationship between an existing bundle name and a superceding bundle image pullspec. +// Since registry+v0 graphs are bundle name based, this uses the name instead of a version. +type Substitute struct { + Name string `json:"name"` // the bundle image pullspec to substitute + Base string `json:"base"` // the bundle name to substitute for +} + +// SubstitutesTemplateData represents a template for bundle substitutions. +// It contains the schema identifier, an input declarative config, and substitution mappings +// that define how bundles should be replaced in upgrade graphs. +type SubstitutesTemplateData struct { + Schema string `json:"schema"` + Entries []*declcfg.Meta `json:"entries"` + Substitutions []Substitute `json:"substitutions"` +} + +// template implements a catalog template to make the substitutesFor mechanics less error prone. +// It provides a customizable RenderBundle function that is used to produce declarative config for a supplied bundle. +type template struct { + renderBundle api.BundleRenderer +} + +func new(renderBundle api.BundleRenderer) api.Template { + return &template{ + renderBundle: renderBundle, + } +} + +// Template functions + +func (t *template) Schema() string { + return schema +} + +func (t *template) RenderBundle(ctx context.Context, bundleRef string) (*declcfg.DeclarativeConfig, error) { + return t.renderBundle(ctx, bundleRef) +} + +func (t *template) Render(ctx context.Context, reader io.Reader) (*declcfg.DeclarativeConfig, error) { + st, err := parseSpec(reader) + if err != nil { + return nil, fmt.Errorf("render: unable to parse template: %v", err) + } + + // Create DeclarativeConfig from template entries + cfg, err := declcfg.LoadSlice(st.Entries) + if err != nil { + return nil, fmt.Errorf("render: unable to create declarative config from entries: %v", err) + } + + _, err = declcfg.ConvertToModel(*cfg) + if err != nil { + return nil, fmt.Errorf("render: entries are not valid FBC: %v", err) + } + + // Process each substitution + for _, substitution := range st.Substitutions { + err := t.processSubstitution(ctx, cfg, substitution) + if err != nil { + return nil, fmt.Errorf("render: error processing substitution %s->%s: %v", substitution.Base, substitution.Name, err) + } + } + + return cfg, nil +} + +// Helper functions + +func parseSpec(reader io.Reader) (*SubstitutesTemplateData, error) { + st := &SubstitutesTemplateData{} + stDoc := json.RawMessage{} + stDecoder := yaml.NewYAMLOrJSONDecoder(reader, 4096) + err := stDecoder.Decode(&stDoc) + if err != nil { + return nil, fmt.Errorf("decoding template schema: %v", err) + } + err = json.Unmarshal(stDoc, st) + if err != nil { + return nil, fmt.Errorf("unmarshalling template: %v", err) + } + + if st.Schema != schema { + return nil, fmt.Errorf("template has unknown schema (%q), should be %q", st.Schema, schema) + } + + return st, nil +} + +// validateSubstitution validates the substitution references +func (t *template) validateSubstitution(ctx context.Context, cfg *declcfg.DeclarativeConfig, substitution Substitute) error { + // Validate substitution fields - all are required + if substitution.Name == "" { + return fmt.Errorf("substitution name cannot be empty") + } + if substitution.Base == "" { + return fmt.Errorf("substitution base cannot be empty") + } + if substitution.Name == substitution.Base { + return fmt.Errorf("substitution name and base cannot be the same") + } + + // determine the versions of the base and substitute bundles and ensure that + // the composite version of the substitute bundle is greater than the composite version of the base bundle + + // 1. Render the pullspec represented by substitution.Name + substituteCfg, err := t.renderBundle(ctx, substitution.Name) + if err != nil { + return fmt.Errorf("failed to render bundle image reference %q: %v", substitution.Name, err) + } + if substituteCfg == nil || len(substituteCfg.Bundles) == 0 { + return fmt.Errorf("rendered bundle image reference %q contains no bundles", substitution.Name) + } + substituteBundle := &substituteCfg.Bundles[0] + substituteCv, err := substituteBundle.CompositeVersion() + if err != nil { + return fmt.Errorf("failed to get composite version for substitute bundle %q: %v", substitution.Name, err) + } + + // 2. Examine cfg to find the bundle which has matching name to substitution.Base + var baseBundle *declcfg.Bundle + for i := range cfg.Bundles { + if cfg.Bundles[i].Name == substitution.Base { + baseBundle = &cfg.Bundles[i] + break + } + } + if baseBundle == nil { + return fmt.Errorf("base bundle %q does not exist in catalog", substitution.Base) + } + baseCv, err := baseBundle.CompositeVersion() + if err != nil { + return fmt.Errorf("failed to get composite version for base bundle %q: %v", substitution.Base, err) + } + + // 3. Ensure that the base bundle composite version is less than the substitute bundle composite version + if baseCv.Compare(substituteCv) >= 0 { + return fmt.Errorf("base bundle %q is not less than substitute bundle %q", substitution.Base, substitution.Name) + } + + return nil +} + +// processSubstitution handles the complex logic for processing a single substitution +func (t *template) processSubstitution(ctx context.Context, cfg *declcfg.DeclarativeConfig, substitution Substitute) error { + if err := t.validateSubstitution(ctx, cfg, substitution); err != nil { + return err + } + + substituteCfg, err := t.RenderBundle(ctx, substitution.Name) + if err != nil { + return fmt.Errorf("failed to render bundle image reference %q: %v", substitution.Name, err) + } + + // normally, we'd rely RenderBundle to represent any failure via err, but since this is comes from input, + // we need to perform more validation of the results here before processing them + if substituteCfg == nil || len(substituteCfg.Bundles) == 0 { + return fmt.Errorf("rendered bundle image reference %q contains no bundles", substitution.Name) + } + + substituteBundle := &substituteCfg.Bundles[0] + + // Iterate over all channels + for i := range cfg.Channels { + channel := &cfg.Channels[i] + + // First pass: find entries that have substitution.base as their name + // Only process original entries, not substitution entries (they have empty replaces after clearing) + var entriesToSubstitute []int + for j := range channel.Entries { + entry := &channel.Entries[j] + if entry.Name == substitution.Base { + entriesToSubstitute = append(entriesToSubstitute, j) + } + } + + // Create new entries for each substitution (process in reverse order to avoid index issues) + for i := len(entriesToSubstitute) - 1; i >= 0; i-- { + entryIndex := entriesToSubstitute[i] + // Create a new channel entry for substitution.name + newEntry := declcfg.ChannelEntry{ + Name: substituteBundle.Name, + Replaces: channel.Entries[entryIndex].Replaces, + Skips: channel.Entries[entryIndex].Skips, + SkipRange: channel.Entries[entryIndex].SkipRange, + } + + // Add skip relationship to substitution.base + newEntry.Skips = append(newEntry.Skips, substitution.Base) + + // Add the new entry to the channel + channel.Entries = append(channel.Entries, newEntry) + + // Clear the original entry's replaces/skips/skipRange since they moved to the new entry + channel.Entries[entryIndex].Replaces = "" + channel.Entries[entryIndex].Skips = nil + channel.Entries[entryIndex].SkipRange = "" + } + + // Second pass: update all references to substitution.base to point to substitution.name + // Skip the newly created substitution entries (they are at the end) + originalEntryCount := len(channel.Entries) - len(entriesToSubstitute) + for j := 0; j < originalEntryCount; j++ { + entry := &channel.Entries[j] + + // If this entry replaces substitution.base, update it to replace substitution.name + if entry.Replaces == substitution.Base { + entry.Replaces = substituteBundle.Name + entry.Skips = append(entry.Skips, substitution.Base) + } else if entry.Skips != nil && slices.Contains(entry.Skips, substitution.Base) { + // If this entry skips substitution.base, update it to skip substitution.name + // and remove substitution.base from the skips list + entry.Skips = append(entry.Skips, substituteBundle.Name) + entry.Skips = slices.DeleteFunc(entry.Skips, func(skip string) bool { + return skip == substitution.Base + }) + } + } + } + + // Add the substitute bundle to the config (only once) + cfg.Bundles = append(cfg.Bundles, *substituteBundle) + + // now validate the resulting config + _, err = declcfg.ConvertToModel(*cfg) + if err != nil { + return fmt.Errorf("resulting config is not valid FBC: %v", err) + } + + return nil +} + +// FromReader reads FBC from a reader and generates a SubstitutesForTemplate from it +func FromReader(r io.Reader) (*SubstitutesTemplateData, error) { + var entries []*declcfg.Meta + if err := declcfg.WalkMetasReader(r, func(meta *declcfg.Meta, err error) error { + if err != nil { + return err + } + + entries = append(entries, meta) + return nil + }); err != nil { + return nil, err + } + + bt := &SubstitutesTemplateData{ + Schema: schema, + Entries: entries, + Substitutions: []Substitute{}, + } + + return bt, nil +} + +// Factory types + +type Factory struct{} + +// Factory functions + +func (f *Factory) CreateTemplate(renderBundle api.BundleRenderer) api.Template { + return new(renderBundle) +} + +func (f *Factory) Schema() string { + return schema +} diff --git a/staging/operator-registry/alpha/template/substitutes/substitutes_test.go b/staging/operator-registry/alpha/template/substitutes/substitutes_test.go new file mode 100644 index 0000000000..41a018bca4 --- /dev/null +++ b/staging/operator-registry/alpha/template/substitutes/substitutes_test.go @@ -0,0 +1,1388 @@ +package substitutes + +import ( + "context" + "encoding/json" + "fmt" + "strings" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/operator-framework/operator-registry/alpha/declcfg" + "github.com/operator-framework/operator-registry/alpha/property" +) + +// Helper function to create a mock template for testing +func createMockTemplate() template { + return template{ + renderBundle: func(ctx context.Context, imageRef string) (*declcfg.DeclarativeConfig, error) { + // Extract package name from image reference + packageName := "testoperator" + if strings.Contains(imageRef, "test-bundle") { + packageName = "test" + } + + // Extract version from image reference if it contains a version tag + version := "1.0.0" + release := "" + if strings.Contains(imageRef, ":v") { + parts := strings.Split(imageRef, ":v") + if len(parts) == 2 { + versionTag := parts[1] + // Check if version has a prerelease/build metadata (e.g., "1.2.0-alpha") + if strings.Contains(versionTag, "-") { + versionParts := strings.SplitN(versionTag, "-", 2) + version = versionParts[0] + release = versionParts[1] + } else { + version = versionTag + } + } + } + + // Create bundle name based on whether it has a release version + var bundleName string + var properties []property.Property + + if release != "" { + // substitutesFor bundle: package-vversion-release + bundleName = fmt.Sprintf("%s-v%s-%s", packageName, version, release) + properties = []property.Property{ + property.MustBuildPackageRelease(packageName, version, release), + property.MustBuildBundleObject([]byte(fmt.Sprintf(`{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":%q}}`, imageRef))), + property.MustBuildBundleObject([]byte(`{"kind": "CustomResourceDefinition", "apiVersion": "apiextensions.k8s.io/v1"}`)), + } + } else { + // normal bundle: package.vversion + bundleName = fmt.Sprintf("%s.v%s", packageName, version) + properties = []property.Property{ + property.MustBuildPackage(packageName, version), + property.MustBuildBundleObject([]byte(fmt.Sprintf(`{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":%q}}`, imageRef))), + property.MustBuildBundleObject([]byte(`{"kind": "CustomResourceDefinition", "apiVersion": "apiextensions.k8s.io/v1"}`)), + } + } + + return &declcfg.DeclarativeConfig{ + Packages: []declcfg.Package{ + { + Schema: "olm.package", + Name: packageName, + DefaultChannel: "stable", + }, + }, + Bundles: []declcfg.Bundle{ + { + Schema: "olm.bundle", + Name: bundleName, + Package: packageName, + Image: imageRef, + Properties: properties, + RelatedImages: []declcfg.RelatedImage{ + {Name: "bundle", Image: imageRef}, + }, + CsvJSON: fmt.Sprintf(`{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":%q}}`, imageRef), + Objects: []string{ + fmt.Sprintf(`{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":%q}}`, imageRef), + `{"kind": "CustomResourceDefinition", "apiVersion": "apiextensions.k8s.io/v1"}`, + }, + }, + }, + }, nil + }, + } +} + +// Helper function to create a test DeclarativeConfig +func createTestDeclarativeConfig() *declcfg.DeclarativeConfig { + return &declcfg.DeclarativeConfig{ + Packages: []declcfg.Package{ + { + Schema: "olm.package", + Name: "testoperator", + DefaultChannel: "stable", + }, + }, + Channels: []declcfg.Channel{ + { + Schema: "olm.channel", + Name: "stable", + Package: "testoperator", + Entries: []declcfg.ChannelEntry{ + {Name: "testoperator.v1.0.0"}, + {Name: "testoperator.v1.1.0", Replaces: "testoperator.v1.0.0"}, + {Name: "testoperator.v1.2.0", Replaces: "testoperator.v1.1.0", Skips: []string{"testoperator.v1.0.0"}}, + }, + }, + }, + Bundles: []declcfg.Bundle{ + { + Schema: "olm.bundle", + Name: "testoperator.v1.0.0", + Package: "testoperator", + Image: "quay.io/test/testoperator-bundle:v1.0.0", + Properties: []property.Property{ + property.MustBuildPackage("testoperator", "1.0.0"), + }, + }, + { + Schema: "olm.bundle", + Name: "testoperator.v1.1.0", + Package: "testoperator", + Image: "quay.io/test/testoperator-bundle:v1.1.0", + Properties: []property.Property{ + property.MustBuildPackage("testoperator", "1.1.0"), + }, + }, + { + Schema: "olm.bundle", + Name: "testoperator.v1.2.0", + Package: "testoperator", + Image: "quay.io/test/testoperator-bundle:v1.2.0", + Properties: []property.Property{ + property.MustBuildPackage("testoperator", "1.2.0"), + }, + }, + }, + } +} + +// Helper function to create a valid test package Meta entry +// nolint: unparam +func createValidTestPackageMeta(name, defaultChannel string) *declcfg.Meta { + pkg := declcfg.Package{ + Schema: "olm.package", + Name: name, + DefaultChannel: defaultChannel, + Description: fmt.Sprintf("%s operator", name), + } + + blob, err := json.Marshal(pkg) + if err != nil { + panic(err) + } + + return &declcfg.Meta{ + Schema: "olm.package", + Name: name, + Package: name, + Blob: json.RawMessage(blob), + } +} + +// Helper function to create a valid test bundle Meta entry with proper naming convention +// nolint: unparam +func createValidTestBundleMeta(name, packageName, version, release string) *declcfg.Meta { + var bundleName string + var properties []property.Property + + if release != "" { + // Create bundle name following the normalizeName convention: package-vversion-release + bundleName = fmt.Sprintf("%s-v%s-%s", packageName, version, release) + properties = []property.Property{ + property.MustBuildPackageRelease(packageName, version, release), + property.MustBuildBundleObject([]byte(fmt.Sprintf(`{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":%q}}`, bundleName))), + property.MustBuildBundleObject([]byte(`{"kind": "CustomResourceDefinition", "apiVersion": "apiextensions.k8s.io/v1"}`)), + } + } else { + // Use simple naming convention for bundles without release version + bundleName = name + properties = []property.Property{ + property.MustBuildPackage(packageName, version), + property.MustBuildBundleObject([]byte(fmt.Sprintf(`{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":%q}}`, bundleName))), + property.MustBuildBundleObject([]byte(`{"kind": "CustomResourceDefinition", "apiVersion": "apiextensions.k8s.io/v1"}`)), + } + } + + bundle := declcfg.Bundle{ + Schema: "olm.bundle", + Name: bundleName, + Package: packageName, + Image: fmt.Sprintf("quay.io/test/%s-bundle:v%s", packageName, version), + Properties: properties, + RelatedImages: []declcfg.RelatedImage{ + { + Name: "bundle", + Image: fmt.Sprintf("quay.io/test/%s-bundle:v%s", packageName, version), + }, + }, + CsvJSON: fmt.Sprintf(`{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":%q}}`, bundleName), + Objects: []string{ + fmt.Sprintf(`{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":%q}}`, bundleName), + `{"kind": "CustomResourceDefinition", "apiVersion": "apiextensions.k8s.io/v1"}`, + }, + } + + blob, err := json.Marshal(bundle) + if err != nil { + panic(err) + } + + return &declcfg.Meta{ + Schema: "olm.bundle", + Name: bundleName, + Package: packageName, + Blob: json.RawMessage(blob), + } +} + +// Helper function to create a valid test channel Meta entry with proper bundle names +// nolint: unparam +func createValidTestChannelMeta(name, packageName string, entries []declcfg.ChannelEntry) *declcfg.Meta { + channel := declcfg.Channel{ + Schema: "olm.channel", + Name: name, + Package: packageName, + Entries: entries, + } + + blob, err := json.Marshal(channel) + if err != nil { + panic(err) + } + + return &declcfg.Meta{ + Schema: "olm.channel", + Name: name, + Package: packageName, + Blob: json.RawMessage(blob), + } +} + +func TestParseSpec(t *testing.T) { + tests := []struct { + name string + input string + expected *SubstitutesTemplateData + expectError bool + errorMsg string + }{ + { + name: "Success/valid template with substitutions", + input: ` +schema: olm.template.substitutes +entries: + - schema: olm.channel + name: stable + package: testoperator + blob: '{"schema":"olm.channel","name":"stable","package":"testoperator","entries":[{"name":"testoperator.v1.0.0"}]}' +substitutions: + - name: testoperator.v1.1.0 + base: testoperator.v1.0.0 +`, + expected: &SubstitutesTemplateData{ + Schema: "olm.template.substitutes", + Entries: []*declcfg.Meta{ + { + Schema: "olm.channel", + Name: "stable", + Package: "testoperator", + Blob: json.RawMessage(`{"schema":"olm.channel","name":"stable","package":"testoperator","entries":[{"name":"testoperator.v1.0.0"}]}`), + }, + }, + Substitutions: []Substitute{ + {Name: "testoperator.v1.1.0", Base: "testoperator.v1.0.0"}, + }, + }, + expectError: false, + }, + { + name: "Error/invalid schema", + input: ` +schema: olm.template.invalid +entries: [] +substitutions: [] +`, + expectError: true, + errorMsg: "template has unknown schema", + }, + { + name: "Error/missing schema", + input: ` +entries: [] +substitutions: [] +`, + expectError: true, + errorMsg: "template has unknown schema", + }, + { + name: "Error/invalid YAML", + input: ` +schema: olm.template.substitutes +entries: [ +substitutions: [] +`, + expectError: true, + errorMsg: "decoding template schema", + }, + { + name: "Success/empty template", + input: ` +schema: olm.template.substitutes +entries: [] +substitutions: [] +`, + expected: &SubstitutesTemplateData{ + Schema: "olm.template.substitutes", + Entries: []*declcfg.Meta{}, + Substitutions: []Substitute{}, + }, + expectError: false, + }, + { + name: "Success/multiple substitutions", + input: ` +schema: olm.template.substitutes +entries: + - schema: olm.channel + name: stable + package: testoperator + blob: '{"schema":"olm.channel","name":"stable","package":"testoperator","entries":[{"name":"testoperator.v1.0.0"}]}' +substitutions: + - name: testoperator.v1.1.0 + base: testoperator.v1.0.0 + - name: testoperator.v1.2.0 + base: testoperator.v1.1.0 +`, + expected: &SubstitutesTemplateData{ + Schema: "olm.template.substitutes", + Entries: []*declcfg.Meta{ + { + Schema: "olm.channel", + Name: "stable", + Package: "testoperator", + Blob: json.RawMessage(`{"schema":"olm.channel","name":"stable","package":"testoperator","entries":[{"name":"testoperator.v1.0.0"}]}`), + }, + }, + Substitutions: []Substitute{ + {Name: "testoperator.v1.1.0", Base: "testoperator.v1.0.0"}, + {Name: "testoperator.v1.2.0", Base: "testoperator.v1.1.0"}, + }, + }, + expectError: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + reader := strings.NewReader(tt.input) + result, err := parseSpec(reader) + + if tt.expectError { + require.Error(t, err) + require.Contains(t, err.Error(), tt.errorMsg) + require.Nil(t, result) + } else { + require.NoError(t, err) + require.Equal(t, tt.expected.Schema, result.Schema) + require.Len(t, result.Entries, len(tt.expected.Entries)) + require.Len(t, result.Substitutions, len(tt.expected.Substitutions)) + + // Check substitutions + for i, expectedSub := range tt.expected.Substitutions { + require.Equal(t, expectedSub.Name, result.Substitutions[i].Name) + require.Equal(t, expectedSub.Base, result.Substitutions[i].Base) + } + } + }) + } +} + +func TestRender(t *testing.T) { + tests := []struct { + name string + entries []*declcfg.Meta + substitutions []Substitute + expectError bool + errorContains string + validate func(t *testing.T, cfg *declcfg.DeclarativeConfig) + }{ + { + name: "Success/render with single substitution", + entries: []*declcfg.Meta{ + createValidTestPackageMeta("testoperator", "stable"), + createValidTestChannelMeta("stable", "testoperator", []declcfg.ChannelEntry{ + {Name: "testoperator.v1.0.0"}, + {Name: "testoperator.v1.1.0", Replaces: "testoperator.v1.0.0"}, // Base bundle must be in channel entries + }), + createValidTestBundleMeta("testoperator.v1.0.0", "testoperator", "1.0.0", ""), + createValidTestBundleMeta("testoperator.v1.1.0", "testoperator", "1.1.0", ""), + // Substitute.name bundle (rendered from image ref) must NOT be in template entries + }, + substitutions: []Substitute{ + {Name: "quay.io/test/testoperator-bundle:v1.1.0-alpha", Base: "testoperator.v1.1.0"}, // Use bundle image reference + }, + expectError: false, + validate: func(t *testing.T, cfg *declcfg.DeclarativeConfig) { + require.Len(t, cfg.Channels, 1) + channel := cfg.Channels[0] + require.Len(t, channel.Entries, 3) // Original 2 + 1 new substitution + + // Find the new substitution entry + var substituteEntry *declcfg.ChannelEntry + for i := range channel.Entries { + if channel.Entries[i].Name == "testoperator-v1.1.0-alpha" { + substituteEntry = &channel.Entries[i] + break + } + } + require.NotNil(t, substituteEntry) + require.Equal(t, "testoperator.v1.0.0", substituteEntry.Replaces) + require.Contains(t, substituteEntry.Skips, "testoperator.v1.1.0") + }, + }, + { + name: "Success/render with multiple substitutions", + entries: []*declcfg.Meta{ + createValidTestPackageMeta("testoperator", "stable"), + createValidTestChannelMeta("stable", "testoperator", []declcfg.ChannelEntry{ + {Name: "testoperator.v1.0.0"}, + {Name: "testoperator.v1.1.0", Replaces: "testoperator.v1.0.0"}, + // Don't include substitution bundles in channel entries initially - they will be added by the substitution process + }), + createValidTestBundleMeta("testoperator.v1.0.0", "testoperator", "1.0.0", ""), + createValidTestBundleMeta("testoperator.v1.1.0", "testoperator", "1.1.0", ""), + // Don't include substitution bundles in entries - they will be added by the substitution process + }, + substitutions: []Substitute{ + {Name: "quay.io/test/testoperator-bundle:v1.2.0-alpha", Base: "testoperator.v1.1.0"}, + {Name: "quay.io/test/testoperator-bundle:v1.3.0-alpha", Base: "testoperator-v1.2.0-alpha"}, + }, + expectError: false, + validate: func(t *testing.T, cfg *declcfg.DeclarativeConfig) { + require.Len(t, cfg.Channels, 1) + channel := cfg.Channels[0] + require.Len(t, channel.Entries, 4) // Original 2 + 2 new substitutions + + // Check first substitution (it gets cleared by the second substitution) + var firstSub *declcfg.ChannelEntry + for i := range channel.Entries { + if channel.Entries[i].Name == "testoperator-v1.2.0-alpha" { + firstSub = &channel.Entries[i] + break + } + } + require.NotNil(t, firstSub) + require.Empty(t, firstSub.Replaces) // Cleared by second substitution + require.Nil(t, firstSub.Skips) // Cleared by second substitution + + // Check second substitution + var secondSub *declcfg.ChannelEntry + for i := range channel.Entries { + if channel.Entries[i].Name == "testoperator-v1.3.0-alpha" { + secondSub = &channel.Entries[i] + break + } + } + require.NotNil(t, secondSub) + require.Equal(t, "testoperator.v1.0.0", secondSub.Replaces) + require.Contains(t, secondSub.Skips, "testoperator-v1.2.0-alpha") + }, + }, + { + name: "Success/render with no substitutions", + entries: []*declcfg.Meta{ + createValidTestPackageMeta("testoperator", "stable"), + createValidTestChannelMeta("stable", "testoperator", []declcfg.ChannelEntry{ + {Name: "testoperator.v1.0.0"}, + }), + createValidTestBundleMeta("testoperator.v1.0.0", "testoperator", "1.0.0", ""), + }, + substitutions: []Substitute{}, + expectError: false, + validate: func(t *testing.T, cfg *declcfg.DeclarativeConfig) { + require.Len(t, cfg.Channels, 1) + channel := cfg.Channels[0] + require.Len(t, channel.Entries, 1) + require.Equal(t, "testoperator.v1.0.0", channel.Entries[0].Name) + }, + }, + { + name: "Error/render with substitution that has no matching base", + entries: []*declcfg.Meta{ + createValidTestPackageMeta("testoperator", "stable"), + createValidTestChannelMeta("stable", "testoperator", []declcfg.ChannelEntry{ + {Name: "testoperator.v1.0.0"}, + }), + createValidTestBundleMeta("testoperator.v1.0.0", "testoperator", "1.0.0", ""), + }, + substitutions: []Substitute{ + {Name: "quay.io/test/testoperator-bundle:v1.2.0-alpha", Base: "nonexistent.v1.0.0"}, + }, + expectError: true, + validate: func(t *testing.T, cfg *declcfg.DeclarativeConfig) { + require.Len(t, cfg.Channels, 1) + channel := cfg.Channels[0] + require.Len(t, channel.Entries, 1) // No new entries added + require.Equal(t, "testoperator.v1.0.0", channel.Entries[0].Name) + }, + }, + { + name: "Error/render with invalid substitution (empty name)", + entries: []*declcfg.Meta{ + createValidTestPackageMeta("testoperator", "stable"), + createValidTestChannelMeta("stable", "testoperator", []declcfg.ChannelEntry{ + {Name: "testoperator.v1.0.0"}, + {Name: "testoperator.v1.1.0", Replaces: "testoperator.v1.0.0"}, + }), + createValidTestBundleMeta("testoperator.v1.0.0", "testoperator", "1.0.0", ""), + createValidTestBundleMeta("testoperator.v1.1.0", "testoperator", "1.1.0", ""), + }, + substitutions: []Substitute{ + {Name: "", Base: "testoperator.v1.1.0"}, // Invalid: empty name + }, + expectError: true, + errorContains: "substitution name cannot be empty", + }, + { + name: "Error/render with invalid substitution (empty base)", + entries: []*declcfg.Meta{ + createValidTestPackageMeta("testoperator", "stable"), + createValidTestChannelMeta("stable", "testoperator", []declcfg.ChannelEntry{ + {Name: "testoperator.v1.0.0"}, + {Name: "testoperator.v1.1.0", Replaces: "testoperator.v1.0.0"}, + }), + createValidTestBundleMeta("testoperator.v1.0.0", "testoperator", "1.0.0", ""), + createValidTestBundleMeta("testoperator.v1.1.0", "testoperator", "1.1.0", ""), + }, + substitutions: []Substitute{ + {Name: "quay.io/test/testoperator-bundle:v1.2.0-alpha", Base: ""}, // Invalid: empty base + }, + expectError: true, + errorContains: "substitution base cannot be empty", + }, + { + name: "Error/render with invalid substitution (same name and base)", + entries: []*declcfg.Meta{ + createValidTestPackageMeta("testoperator", "stable"), + createValidTestChannelMeta("stable", "testoperator", []declcfg.ChannelEntry{ + {Name: "testoperator.v1.0.0"}, + {Name: "testoperator.v1.1.0", Replaces: "testoperator.v1.0.0"}, + }), + createValidTestBundleMeta("testoperator.v1.0.0", "testoperator", "1.0.0", ""), + createValidTestBundleMeta("testoperator.v1.1.0", "testoperator", "1.1.0", ""), + }, + substitutions: []Substitute{ + {Name: "testoperator.v1.1.0", Base: "testoperator.v1.1.0"}, // Invalid: same name and base + }, + expectError: true, + errorContains: "substitution name and base cannot be the same", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // Create template with test data + templateData := SubstitutesTemplateData{ + Schema: "olm.template.substitutes", + Entries: tt.entries, + Substitutions: tt.substitutions, + } + + // Convert to JSON and create reader + templateJSON, err := json.Marshal(templateData) + require.NoError(t, err) + + reader := strings.NewReader(string(templateJSON)) + templateInstance := template{ + renderBundle: func(ctx context.Context, imageRef string) (*declcfg.DeclarativeConfig, error) { + // Mock implementation that creates a bundle from the image reference + packageName := "testoperator" + version := "1.0.0" + release := "" + + // Extract version from image reference if it contains a version tag + if strings.Contains(imageRef, ":v") { + parts := strings.Split(imageRef, ":v") + if len(parts) == 2 { + versionTag := parts[1] + // Check if version has a prerelease/build metadata (e.g., "1.2.0-alpha") + if strings.Contains(versionTag, "-") { + versionParts := strings.SplitN(versionTag, "-", 2) + version = versionParts[0] + release = versionParts[1] + } else { + version = versionTag + } + } + } + + // Create bundle name based on whether it has a release version + var bundleName string + var properties []property.Property + + if release != "" { + // substitutesFor bundle: package-vversion-release + bundleName = fmt.Sprintf("%s-v%s-%s", packageName, version, release) + properties = []property.Property{ + property.MustBuildPackageRelease(packageName, version, release), + property.MustBuildBundleObject([]byte(fmt.Sprintf(`{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":%q}}`, imageRef))), + property.MustBuildBundleObject([]byte(`{"kind": "CustomResourceDefinition", "apiVersion": "apiextensions.k8s.io/v1"}`)), + } + } else { + // normal bundle: package.vversion + bundleName = fmt.Sprintf("%s.v%s", packageName, version) + properties = []property.Property{ + property.MustBuildPackage(packageName, version), + property.MustBuildBundleObject([]byte(fmt.Sprintf(`{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":%q}}`, imageRef))), + property.MustBuildBundleObject([]byte(`{"kind": "CustomResourceDefinition", "apiVersion": "apiextensions.k8s.io/v1"}`)), + } + } + + return &declcfg.DeclarativeConfig{ + Bundles: []declcfg.Bundle{ + { + Schema: "olm.bundle", + Name: bundleName, + Package: packageName, + Image: imageRef, + Properties: properties, + RelatedImages: []declcfg.RelatedImage{ + {Name: "bundle", Image: imageRef}, + }, + CsvJSON: fmt.Sprintf(`{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":%q}}`, imageRef), + Objects: []string{ + fmt.Sprintf(`{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":%q}}`, imageRef), + `{"kind": "CustomResourceDefinition", "apiVersion": "apiextensions.k8s.io/v1"}`, + }, + }, + }, + }, nil + }, + } + ctx := context.Background() + + result, err := templateInstance.Render(ctx, reader) + + if tt.expectError { + require.Error(t, err) + if tt.errorContains != "" { + require.Contains(t, err.Error(), tt.errorContains) + } + require.Nil(t, result) + } else { + require.NoError(t, err) + require.NotNil(t, result) + if tt.validate != nil { + tt.validate(t, result) + } + } + }) + } +} + +func TestProcessSubstitution(t *testing.T) { + tests := []struct { + name string + cfg *declcfg.DeclarativeConfig + substitution Substitute + validate func(t *testing.T, cfg *declcfg.DeclarativeConfig) + }{ + { + name: "Success/substitution with replaces relationship", + cfg: &declcfg.DeclarativeConfig{ + Packages: []declcfg.Package{ + { + Schema: "olm.package", + Name: "testoperator", + DefaultChannel: "stable", + Description: "testoperator operator", + }, + }, + Channels: []declcfg.Channel{ + { + Schema: "olm.channel", + Name: "stable", + Package: "testoperator", + Entries: []declcfg.ChannelEntry{ + {Name: "testoperator-v1.0.0-alpha"}, + {Name: "testoperator-v1.1.0-alpha", Replaces: "testoperator-v1.0.0-alpha"}, + }, + }, + }, + Bundles: []declcfg.Bundle{ + { + Schema: "olm.bundle", + Name: "testoperator-v1.0.0-alpha", + Package: "testoperator", + Image: "quay.io/test/testoperator-bundle:v1.0.0", + Properties: []property.Property{ + property.MustBuildPackageRelease("testoperator", "1.0.0", "alpha"), + property.MustBuildBundleObject([]byte(`{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":"testoperator-v1.0.0-alpha"}}`)), + property.MustBuildBundleObject([]byte(`{"kind": "CustomResourceDefinition", "apiVersion": "apiextensions.k8s.io/v1"}`)), + }, + RelatedImages: []declcfg.RelatedImage{ + {Name: "bundle", Image: "quay.io/test/testoperator-bundle:v1.0.0"}, + }, + CsvJSON: `{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":"testoperator-v1.0.0-alpha"}}`, + Objects: []string{ + `{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":"testoperator-v1.0.0-alpha"}}`, + `{"kind": "CustomResourceDefinition", "apiVersion": "apiextensions.k8s.io/v1"}`, + }, + }, + { + Schema: "olm.bundle", + Name: "testoperator-v1.1.0-alpha", + Package: "testoperator", + Image: "quay.io/test/testoperator-bundle:v1.1.0-alpha", + Properties: []property.Property{ + property.MustBuildPackageRelease("testoperator", "1.1.0", "alpha"), + property.MustBuildBundleObject([]byte(`{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":"testoperator-v1.1.0-alpha"}}`)), + property.MustBuildBundleObject([]byte(`{"kind": "CustomResourceDefinition", "apiVersion": "apiextensions.k8s.io/v1"}`)), + }, + RelatedImages: []declcfg.RelatedImage{ + {Name: "bundle", Image: "quay.io/test/testoperator-bundle:v1.1.0-alpha"}, + }, + CsvJSON: `{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":"testoperator-v1.1.0-alpha"}}`, + Objects: []string{ + `{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":"testoperator-v1.1.0-alpha"}}`, + `{"kind": "CustomResourceDefinition", "apiVersion": "apiextensions.k8s.io/v1"}`, + }, + }, + }, + }, + substitution: Substitute{Name: "quay.io/test/testoperator-bundle:v1.2.0-alpha", Base: "testoperator-v1.1.0-alpha"}, + validate: func(t *testing.T, cfg *declcfg.DeclarativeConfig) { + channel := cfg.Channels[0] + require.Len(t, channel.Entries, 3) + + // Find the new substitution entry + var substituteEntry *declcfg.ChannelEntry + for i := range channel.Entries { + if channel.Entries[i].Name == "testoperator-v1.2.0-alpha" { + substituteEntry = &channel.Entries[i] + break + } + } + require.NotNil(t, substituteEntry) + require.Equal(t, "testoperator-v1.0.0-alpha", substituteEntry.Replaces) + require.Contains(t, substituteEntry.Skips, "testoperator-v1.1.0-alpha") + + // Check that original entry was cleared + var originalEntry *declcfg.ChannelEntry + for i := range channel.Entries { + if channel.Entries[i].Name == "testoperator-v1.1.0-alpha" { + originalEntry = &channel.Entries[i] + break + } + } + require.NotNil(t, originalEntry) + require.Empty(t, originalEntry.Replaces) + require.Empty(t, originalEntry.Skips) + require.Empty(t, originalEntry.SkipRange) + }, + }, + { + name: "Success/substitution with skips and skipRange", + cfg: &declcfg.DeclarativeConfig{ + Packages: []declcfg.Package{ + { + Schema: "olm.package", + Name: "testoperator", + DefaultChannel: "stable", + Description: "testoperator operator", + }, + }, + Channels: []declcfg.Channel{ + { + Schema: "olm.channel", + Name: "stable", + Package: "testoperator", + Entries: []declcfg.ChannelEntry{ + {Name: "testoperator-v1.0.0-alpha"}, + {Name: "testoperator-v1.1.0-alpha", Replaces: "testoperator-v1.0.0-alpha", Skips: []string{"testoperator-v0.9.0-alpha"}, SkipRange: ">=0.9.0 <1.1.0"}, + }, + }, + }, + Bundles: []declcfg.Bundle{ + { + Schema: "olm.bundle", + Name: "testoperator-v1.0.0-alpha", + Package: "testoperator", + Image: "quay.io/test/testoperator-bundle:v1.0.0", + Properties: []property.Property{ + property.MustBuildPackageRelease("testoperator", "1.0.0", "alpha"), + property.MustBuildBundleObject([]byte(`{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":"testoperator-v1.0.0-alpha"}}`)), + property.MustBuildBundleObject([]byte(`{"kind": "CustomResourceDefinition", "apiVersion": "apiextensions.k8s.io/v1"}`)), + }, + RelatedImages: []declcfg.RelatedImage{ + {Name: "bundle", Image: "quay.io/test/testoperator-bundle:v1.0.0"}, + }, + CsvJSON: `{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":"testoperator-v1.0.0-alpha"}}`, + Objects: []string{ + `{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":"testoperator-v1.0.0-alpha"}}`, + `{"kind": "CustomResourceDefinition", "apiVersion": "apiextensions.k8s.io/v1"}`, + }, + }, + { + Schema: "olm.bundle", + Name: "testoperator-v1.1.0-alpha", + Package: "testoperator", + Image: "quay.io/test/testoperator-bundle:v1.1.0-alpha", + Properties: []property.Property{ + property.MustBuildPackageRelease("testoperator", "1.1.0", "alpha"), + property.MustBuildBundleObject([]byte(`{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":"testoperator-v1.1.0-alpha"}}`)), + property.MustBuildBundleObject([]byte(`{"kind": "CustomResourceDefinition", "apiVersion": "apiextensions.k8s.io/v1"}`)), + }, + RelatedImages: []declcfg.RelatedImage{ + {Name: "bundle", Image: "quay.io/test/testoperator-bundle:v1.1.0-alpha"}, + }, + CsvJSON: `{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":"testoperator-v1.1.0-alpha"}}`, + Objects: []string{ + `{"kind": "ClusterServiceVersion", "apiVersion": "operators.coreos.com/v1alpha1", "metadata":{"name":"testoperator-v1.1.0-alpha"}}`, + `{"kind": "CustomResourceDefinition", "apiVersion": "apiextensions.k8s.io/v1"}`, + }, + }, + }, + }, + substitution: Substitute{Name: "quay.io/test/testoperator-bundle:v1.2.0-alpha", Base: "testoperator-v1.1.0-alpha"}, + validate: func(t *testing.T, cfg *declcfg.DeclarativeConfig) { + channel := cfg.Channels[0] + require.Len(t, channel.Entries, 3) + + // Find the new substitution entry + var substituteEntry *declcfg.ChannelEntry + for i := range channel.Entries { + if channel.Entries[i].Name == "testoperator-v1.2.0-alpha" { + substituteEntry = &channel.Entries[i] + break + } + } + require.NotNil(t, substituteEntry) + require.Equal(t, "testoperator-v1.0.0-alpha", substituteEntry.Replaces) + require.Contains(t, substituteEntry.Skips, "testoperator-v0.9.0-alpha") + require.Contains(t, substituteEntry.Skips, "testoperator-v1.1.0-alpha") + require.Equal(t, ">=0.9.0 <1.1.0", substituteEntry.SkipRange) + }, + }, + { + name: "Error/substitution with no matching base", + cfg: &declcfg.DeclarativeConfig{ + Packages: []declcfg.Package{ + { + Schema: "olm.package", + Name: "testoperator", + DefaultChannel: "stable", + }, + }, + Channels: []declcfg.Channel{ + { + Schema: "olm.channel", + Name: "stable", + Package: "testoperator", + Entries: []declcfg.ChannelEntry{ + {Name: "testoperator.v1.0.0"}, + }, + }, + }, + Bundles: []declcfg.Bundle{ + { + Schema: "olm.bundle", + Name: "testoperator.v1.0.0", + Package: "testoperator", + Image: "quay.io/test/testoperator-bundle:v1.0.0", + Properties: []property.Property{ + property.MustBuildPackage("testoperator", "1.0.0"), + }, + }, + }, + }, + substitution: Substitute{Name: "quay.io/test/testoperator-bundle:v1.2.0-alpha", Base: "nonexistent.v1.0.0"}, + validate: func(t *testing.T, cfg *declcfg.DeclarativeConfig) { + // This test should fail, so this validation should not be called + t.Fatal("This test should have failed") + }, + }, + { + name: "Success/substitution with multiple channels", + cfg: &declcfg.DeclarativeConfig{ + Packages: []declcfg.Package{ + { + Schema: "olm.package", + Name: "testoperator", + DefaultChannel: "stable", + }, + }, + Channels: []declcfg.Channel{ + { + Schema: "olm.channel", + Name: "stable", + Package: "testoperator", + Entries: []declcfg.ChannelEntry{ + {Name: "testoperator-v1.0.0-alpha"}, + {Name: "testoperator-v1.1.0-alpha", Replaces: "testoperator-v1.0.0-alpha"}, + }, + }, + { + Schema: "olm.channel", + Name: "beta", + Package: "testoperator", + Entries: []declcfg.ChannelEntry{ + {Name: "testoperator-v1.0.0-alpha"}, + {Name: "testoperator-v1.1.0-alpha", Replaces: "testoperator-v1.0.0-alpha"}, + }, + }, + }, + Bundles: []declcfg.Bundle{ + { + Schema: "olm.bundle", + Name: "testoperator-v1.0.0-alpha", + Package: "testoperator", + Image: "quay.io/test/testoperator-bundle:v1.0.0", + Properties: []property.Property{ + property.MustBuildPackageRelease("testoperator", "1.0.0", "alpha"), + }, + }, + { + Schema: "olm.bundle", + Name: "testoperator-v1.1.0-alpha", + Package: "testoperator", + Image: "quay.io/test/testoperator-bundle:v1.1.0-alpha", + Properties: []property.Property{ + property.MustBuildPackageRelease("testoperator", "1.1.0", "alpha"), + }, + }, + }, + }, + substitution: Substitute{Name: "quay.io/test/testoperator-bundle:v1.2.0-alpha", Base: "testoperator-v1.1.0-alpha"}, + validate: func(t *testing.T, cfg *declcfg.DeclarativeConfig) { + require.Len(t, cfg.Channels, 2) + + // Check stable channel + stableChannel := cfg.Channels[0] + require.Len(t, stableChannel.Entries, 3) + + // Check beta channel + betaChannel := cfg.Channels[1] + require.Len(t, betaChannel.Entries, 3) + + // Both channels should have the substitution + for _, channel := range cfg.Channels { + var substituteEntry *declcfg.ChannelEntry + for i := range channel.Entries { + if channel.Entries[i].Name == "testoperator-v1.2.0-alpha" { + substituteEntry = &channel.Entries[i] + break + } + } + require.NotNil(t, substituteEntry) + require.Equal(t, "testoperator-v1.0.0-alpha", substituteEntry.Replaces) + require.Contains(t, substituteEntry.Skips, "testoperator-v1.1.0-alpha") + } + }, + }, + { + name: "Success/substitution updates existing references", + cfg: &declcfg.DeclarativeConfig{ + Packages: []declcfg.Package{ + { + Schema: "olm.package", + Name: "testoperator", + DefaultChannel: "stable", + }, + }, + Channels: []declcfg.Channel{ + { + Schema: "olm.channel", + Name: "stable", + Package: "testoperator", + Entries: []declcfg.ChannelEntry{ + {Name: "testoperator.v1.0.0"}, + {Name: "testoperator.v1.1.0", Replaces: "testoperator.v1.0.0"}, + {Name: "testoperator.v1.2.0", Replaces: "testoperator.v1.1.0"}, + }, + }, + }, + Bundles: []declcfg.Bundle{ + { + Schema: "olm.bundle", + Name: "testoperator.v1.0.0", + Package: "testoperator", + Image: "quay.io/test/testoperator-bundle:v1.0.0", + Properties: []property.Property{ + property.MustBuildPackage("testoperator", "1.0.0"), + }, + }, + { + Schema: "olm.bundle", + Name: "testoperator.v1.1.0", + Package: "testoperator", + Image: "quay.io/test/testoperator-bundle:v1.1.0", + Properties: []property.Property{ + property.MustBuildPackage("testoperator", "1.1.0"), + }, + }, + { + Schema: "olm.bundle", + Name: "testoperator.v1.2.0", + Package: "testoperator", + Image: "quay.io/test/testoperator-bundle:v1.2.0", + Properties: []property.Property{ + property.MustBuildPackage("testoperator", "1.2.0"), + }, + }, + }, + }, + substitution: Substitute{Name: "quay.io/test/testoperator-bundle:v1.1.0-alpha", Base: "testoperator.v1.1.0"}, + validate: func(t *testing.T, cfg *declcfg.DeclarativeConfig) { + channel := cfg.Channels[0] + require.Len(t, channel.Entries, 4) // Original 3 + 1 new substitution + + // Find the entry that originally replaced testoperator.v1.1.0 + var updatedEntry *declcfg.ChannelEntry + for i := range channel.Entries { + if channel.Entries[i].Name == "testoperator.v1.2.0" { + updatedEntry = &channel.Entries[i] + break + } + } + require.NotNil(t, updatedEntry) + require.Equal(t, "testoperator-v1.1.0-alpha", updatedEntry.Replaces) // Should now reference the substitute + require.Contains(t, updatedEntry.Skips, "testoperator.v1.1.0") // Should skip the original base + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + template := createMockTemplate() + ctx := context.Background() + err := template.processSubstitution(ctx, tt.cfg, tt.substitution) + if strings.Contains(tt.name, "Error/") { + require.Error(t, err) + } else { + require.NoError(t, err) + tt.validate(t, tt.cfg) + } + }) + } +} + +func TestBoundaryCases(t *testing.T) { + tests := []struct { + name string + testFunc func(t *testing.T) + }{ + { + name: "Error/empty DeclarativeConfig", + testFunc: func(t *testing.T) { + cfg := &declcfg.DeclarativeConfig{ + Bundles: []declcfg.Bundle{ + { + Schema: "olm.bundle", + Name: "test.v0.9.0", + Package: "test", + Image: "quay.io/test/test-bundle:v0.9.0", + Properties: []property.Property{ + property.MustBuildPackage("test", "0.9.0"), + }, + }, + }, + } + substitution := Substitute{Name: "quay.io/test/test-bundle:v1.0.0-alpha", Base: "test.v0.9.0"} + template := createMockTemplate() + ctx := context.Background() + err := template.processSubstitution(ctx, cfg, substitution) + require.Error(t, err) + require.Contains(t, err.Error(), "unknown package") + }, + }, + { + name: "Error/DeclarativeConfig with empty channels", + testFunc: func(t *testing.T) { + cfg := &declcfg.DeclarativeConfig{ + Channels: []declcfg.Channel{}, + Bundles: []declcfg.Bundle{ + { + Schema: "olm.bundle", + Name: "test.v0.9.0", + Package: "test", + Image: "quay.io/test/test-bundle:v0.9.0", + Properties: []property.Property{ + property.MustBuildPackage("test", "0.9.0"), + }, + }, + }, + } + substitution := Substitute{Name: "quay.io/test/test-bundle:v1.0.0-alpha", Base: "test.v0.9.0"} + template := createMockTemplate() + ctx := context.Background() + err := template.processSubstitution(ctx, cfg, substitution) + require.Error(t, err) + require.Contains(t, err.Error(), "unknown package") + }, + }, + { + name: "Error/channel with empty entries", + testFunc: func(t *testing.T) { + cfg := &declcfg.DeclarativeConfig{ + Packages: []declcfg.Package{ + { + Schema: "olm.package", + Name: "testoperator", + DefaultChannel: "stable", + }, + }, + Channels: []declcfg.Channel{ + { + Schema: "olm.channel", + Name: "stable", + Package: "testoperator", + Entries: []declcfg.ChannelEntry{}, + }, + }, + Bundles: []declcfg.Bundle{ + { + Schema: "olm.bundle", + Name: "test.v0.9.0", + Package: "test", + Image: "quay.io/test/test-bundle:v0.9.0", + Properties: []property.Property{ + property.MustBuildPackage("test", "0.9.0"), + }, + }, + }, + } + substitution := Substitute{Name: "quay.io/test/test-bundle:v1.0.0-alpha", Base: "test.v0.9.0"} + template := createMockTemplate() + ctx := context.Background() + err := template.processSubstitution(ctx, cfg, substitution) + require.Error(t, err) + require.Contains(t, err.Error(), "unknown package") + }, + }, + { + name: "Error/substitution with empty name", + testFunc: func(t *testing.T) { + cfg := createTestDeclarativeConfig() + substitution := Substitute{Name: "", Base: "testoperator.v1.1.0"} + template := createMockTemplate() + ctx := context.Background() + err := template.processSubstitution(ctx, cfg, substitution) + require.Error(t, err) + require.Contains(t, err.Error(), "substitution name cannot be empty") + // Should not create any new entries with empty name + require.Len(t, cfg.Channels[0].Entries, 3) // Original entries unchanged + }, + }, + { + name: "Error/substitution with empty base", + testFunc: func(t *testing.T) { + cfg := createTestDeclarativeConfig() + substitution := Substitute{Name: "quay.io/test/testoperator-bundle:v1.2.0-alpha", Base: ""} + template := createMockTemplate() + ctx := context.Background() + err := template.processSubstitution(ctx, cfg, substitution) + require.Error(t, err) + require.Contains(t, err.Error(), "substitution base cannot be empty") + // Should not create any new entries with empty base + require.Len(t, cfg.Channels[0].Entries, 3) // Original entries unchanged + }, + }, + { + name: "Error/substitution with same name and base", + testFunc: func(t *testing.T) { + cfg := createTestDeclarativeConfig() + substitution := Substitute{Name: "quay.io/test/testoperator-bundle:v1.1.0-alpha", Base: "quay.io/test/testoperator-bundle:v1.1.0-alpha"} + template := createMockTemplate() + ctx := context.Background() + err := template.processSubstitution(ctx, cfg, substitution) + require.Error(t, err) + require.Contains(t, err.Error(), "substitution name and base cannot be the same") + // Should not create any new entries when name equals base + require.Len(t, cfg.Channels[0].Entries, 3) // Original entries unchanged + }, + }, + { + name: "Error/template with malformed JSON in blob", + testFunc: func(t *testing.T) { + // Create a template with invalid JSON in the blob + invalidMeta := &declcfg.Meta{ + Schema: "olm.channel", + Name: "stable", + Package: "testoperator", + Blob: json.RawMessage(`{"invalid": json, "missing": quote}`), + } + + template := SubstitutesTemplateData{ + Schema: "olm.template.substitutes", + Entries: []*declcfg.Meta{invalidMeta}, + Substitutions: []Substitute{}, + } + + _, err := json.Marshal(template) + // The malformed JSON should cause an error during marshaling + require.Error(t, err) + require.Contains(t, err.Error(), "invalid character") + }, + }, + { + name: "Success/template with nil context", + testFunc: func(t *testing.T) { + entries := []*declcfg.Meta{ + createValidTestPackageMeta("testoperator", "stable"), + createValidTestChannelMeta("stable", "testoperator", []declcfg.ChannelEntry{ + {Name: "testoperator-v1.0.0-alpha"}, + }), + createValidTestBundleMeta("testoperator-v1.0.0-alpha", "testoperator", "1.0.0", "alpha"), + } + + templateData := SubstitutesTemplateData{ + Schema: "olm.template.substitutes", + Entries: entries, + Substitutions: []Substitute{}, + } + + templateJSON, err := json.Marshal(templateData) + require.NoError(t, err) + + reader := strings.NewReader(string(templateJSON)) + templateInstance := template{} + + result, err := templateInstance.Render(context.TODO(), reader) + require.NoError(t, err) // Context is not used in current implementation + require.NotNil(t, result) + }, + }, + { + name: "Error/substitution with invalid declarative config - missing package", + testFunc: func(t *testing.T) { + // Create a config with a bundle in the catalog that is not referenced in any channels + cfg := &declcfg.DeclarativeConfig{ + Packages: []declcfg.Package{ + { + Schema: "olm.package", + Name: "testoperator", + DefaultChannel: "stable", + }, + }, + Channels: []declcfg.Channel{ + { + Schema: "olm.channel", + Name: "stable", + Package: "testoperator", + Entries: []declcfg.ChannelEntry{ + {Name: "testoperator.v1.0.0"}, + }, + }, + }, + Bundles: []declcfg.Bundle{ + { + Name: "testoperator.v1.0.0", // Base bundle for substitution + Package: "testoperator", + Properties: []property.Property{ + property.MustBuildPackage("testoperator", "1.0.0"), + }, + }, + { + Name: "testoperator.v1.1.0", // Extra bundle not in any channel + Package: "testoperator", + Properties: []property.Property{ + property.MustBuildPackage("testoperator", "1.1.0"), + }, + }, + }, + } + substitution := Substitute{Name: "quay.io/test/testoperator-bundle:v1.1.0-alpha", Base: "testoperator.v1.0.0"} + template := createMockTemplate() + ctx := context.Background() + err := template.processSubstitution(ctx, cfg, substitution) + require.Error(t, err) + require.Contains(t, err.Error(), "not found in any channel entries") + }, + }, + { + name: "Error/substitution with invalid declarative config - bundle missing olm.package property", + testFunc: func(t *testing.T) { + // Create a config where the base bundle has no olm.package property + cfg := &declcfg.DeclarativeConfig{ + Packages: []declcfg.Package{ + { + Schema: "olm.package", + Name: "testoperator", + DefaultChannel: "stable", + }, + }, + Bundles: []declcfg.Bundle{ + { + Name: "testoperator.v1.0.0", // Base bundle for substitution, missing olm.package property + Package: "testoperator", + Properties: []property.Property{}, // No olm.package property + }, + }, + } + substitution := Substitute{Name: "quay.io/test/testoperator-bundle:v1.1.0-alpha", Base: "testoperator.v1.0.0"} + template := createMockTemplate() + ctx := context.Background() + err := template.processSubstitution(ctx, cfg, substitution) + require.Error(t, err) + require.Contains(t, err.Error(), "must have exactly 1 \"olm.package\" property") + }, + }, + { + name: "Error/base bundle does not exist in catalog", + testFunc: func(t *testing.T) { + cfg := &declcfg.DeclarativeConfig{ + Packages: []declcfg.Package{ + { + Schema: "olm.package", + Name: "testoperator", + DefaultChannel: "stable", + }, + }, + Bundles: []declcfg.Bundle{ + { + Name: "testoperator.v1.1.0", + Package: "testoperator", + Properties: []property.Property{ + property.MustBuildPackage("testoperator", "1.1.0"), + }, + }, + }, + } + substitution := Substitute{Name: "quay.io/test/testoperator-bundle:v1.2.0-alpha", Base: "testoperator.v1.0.0"} + template := createMockTemplate() + ctx := context.Background() + err := template.processSubstitution(ctx, cfg, substitution) + require.Error(t, err) + require.Contains(t, err.Error(), "does not exist in catalog") + }, + }, + { + name: "Error/substitute bundle version not greater than base bundle", + testFunc: func(t *testing.T) { + cfg := &declcfg.DeclarativeConfig{ + Packages: []declcfg.Package{ + { + Schema: "olm.package", + Name: "testoperator", + DefaultChannel: "stable", + }, + }, + Bundles: []declcfg.Bundle{ + { + Name: "testoperator-v1.2.0-beta", + Package: "testoperator", + Properties: []property.Property{ + property.MustBuildPackageRelease("testoperator", "1.2.0", "beta"), + }, + }, + }, + } + // Trying to substitute with an alpha release (lower than beta) + substitution := Substitute{Name: "quay.io/test/testoperator-bundle:v1.2.0-alpha", Base: "testoperator-v1.2.0-beta"} + template := createMockTemplate() + ctx := context.Background() + err := template.processSubstitution(ctx, cfg, substitution) + require.Error(t, err) + require.Contains(t, err.Error(), "is not less than") + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + tt.testFunc(t) + }) + } +} diff --git a/staging/operator-registry/cmd/opm/alpha/convert-template/convert.go b/staging/operator-registry/cmd/opm/alpha/convert-template/convert.go index a5587c004b..4b5567e9ce 100644 --- a/staging/operator-registry/cmd/opm/alpha/convert-template/convert.go +++ b/staging/operator-registry/cmd/opm/alpha/convert-template/convert.go @@ -17,6 +17,7 @@ func NewCmd() *cobra.Command { } cmd.AddCommand( newBasicConvertCmd(), + newSubstitutesConvertCmd(), ) return cmd } @@ -49,6 +50,49 @@ If no argument is specified or is '-' input is assumed from STDIN. } converter.FbcReader = reader + converter.DestinationTemplateType = "basic" + err = converter.Convert() + if err != nil { + return fmt.Errorf("converting: %v", err) + } + + return nil + }, + } + cmd.Flags().StringVarP(&output, "output", "o", "json", "Output format (json|yaml)") + + return cmd +} + +func newSubstitutesConvertCmd() *cobra.Command { + var ( + converter converter.Converter + output string + ) + cmd := &cobra.Command{ + Use: "substitutes [ | -]", + Args: cobra.MaximumNArgs(1), + Short: "Generate a substitutes template from existing FBC", + Long: `Generate a substitutes template from existing FBC. + +This command outputs a substitutes catalog template to STDOUT from input FBC. +If no argument is specified or is '-' input is assumed from STDIN. +`, + RunE: func(c *cobra.Command, args []string) error { + switch output { + case "yaml", "json": + converter.OutputFormat = output + default: + log.Fatalf("invalid --output value %q, expected (json|yaml)", output) + } + + reader, name, err := util.OpenFileOrStdin(c, args) + if err != nil { + return fmt.Errorf("unable to open input: %q", name) + } + + converter.FbcReader = reader + converter.DestinationTemplateType = "substitutes" err = converter.Convert() if err != nil { return fmt.Errorf("converting: %v", err) diff --git a/staging/operator-registry/cmd/opm/alpha/template/basic.go b/staging/operator-registry/cmd/opm/alpha/template/basic.go deleted file mode 100644 index de6aed367c..0000000000 --- a/staging/operator-registry/cmd/opm/alpha/template/basic.go +++ /dev/null @@ -1,103 +0,0 @@ -package template - -import ( - "context" - "io" - "log" - "os" - - "github.com/sirupsen/logrus" - "github.com/spf13/cobra" - - "github.com/operator-framework/operator-registry/alpha/action" - "github.com/operator-framework/operator-registry/alpha/action/migrations" - "github.com/operator-framework/operator-registry/alpha/declcfg" - "github.com/operator-framework/operator-registry/alpha/template/basic" - "github.com/operator-framework/operator-registry/cmd/opm/internal/util" -) - -func newBasicTemplateCmd() *cobra.Command { - var ( - template basic.Template - migrateLevel string - ) - cmd := &cobra.Command{ - Use: "basic basic-template-file", - Short: `Generate a file-based catalog from a single 'basic template' file -When FILE is '-' or not provided, the template is read from standard input`, - Long: `Generate a file-based catalog from a single 'basic template' file -When FILE is '-' or not provided, the template is read from standard input`, - Args: cobra.MaximumNArgs(1), - Run: func(cmd *cobra.Command, args []string) { - // Handle different input argument types - // When no arguments or "-" is passed to the command, - // assume input is coming from stdin - // Otherwise open the file passed to the command - data, source, err := util.OpenFileOrStdin(cmd, args) - if err != nil { - log.Fatalf("unable to open %q: %v", source, err) - } - defer data.Close() - - var write func(declcfg.DeclarativeConfig, io.Writer) error - output, err := cmd.Flags().GetString("output") - if err != nil { - log.Fatalf("unable to determine output format") - } - switch output { - case "yaml": - write = declcfg.WriteYAML - case "json": - write = declcfg.WriteJSON - default: - log.Fatalf("invalid --output value %q, expected (json|yaml)", output) - } - - // The bundle loading impl is somewhat verbose, even on the happy path, - // so discard all logrus default logger logs. Any important failures will be - // returned from template.Render and logged as fatal errors. - logrus.SetOutput(io.Discard) - - reg, err := util.CreateCLIRegistry(cmd) - if err != nil { - log.Fatalf("creating containerd registry: %v", err) - } - defer func() { - _ = reg.Destroy() - }() - - var m *migrations.Migrations - if migrateLevel != "" { - m, err = migrations.NewMigrations(migrateLevel) - if err != nil { - log.Fatal(err) - } - } - - template.RenderBundle = func(ctx context.Context, image string) (*declcfg.DeclarativeConfig, error) { - // populate registry, incl any flags from CLI, and enforce only rendering bundle images - r := action.Render{ - Refs: []string{image}, - Registry: reg, - AllowedRefMask: action.RefBundleImage, - Migrations: m, - } - return r.Run(ctx) - } - - // only taking first file argument - cfg, err := template.Render(cmd.Context(), data) - if err != nil { - log.Fatal(err) - } - - if err := write(*cfg, os.Stdout); err != nil { - log.Fatal(err) - } - }, - } - - cmd.Flags().StringVar(&migrateLevel, "migrate-level", "", "Name of the last migration to run (default: none)\n"+migrations.HelpText()) - - return cmd -} diff --git a/staging/operator-registry/cmd/opm/alpha/template/cmd.go b/staging/operator-registry/cmd/opm/alpha/template/cmd.go index 55ac55187b..710368cf9b 100644 --- a/staging/operator-registry/cmd/opm/alpha/template/cmd.go +++ b/staging/operator-registry/cmd/opm/alpha/template/cmd.go @@ -2,26 +2,39 @@ package template import ( "github.com/spf13/cobra" + + "github.com/operator-framework/operator-registry/alpha/action/migrations" + alphatemplate "github.com/operator-framework/operator-registry/alpha/template" ) func NewCmd() *cobra.Command { - var output string + var output, migrateLevel string + tr := alphatemplate.NewRegistry() runCmd := &cobra.Command{ - Use: "render-template", - Short: "Render a catalog template type", - Args: cobra.NoArgs, - } + Use: "render-template [TYPE] [FILE]", + Short: "Render a catalog template (auto-detects type from schema if TYPE not specified)", + Long: `Render a catalog template with optional type specification. - bc := newBasicTemplateCmd() - // bc.Hidden = true - runCmd.AddCommand(bc) +If TYPE is specified, it must be one of: ` + tr.HelpText() + ` +If TYPE is not specified, the template type will be auto-detected from the schema field in the input file. - sc := newSemverTemplateCmd() - // sc.Hidden = true - runCmd.AddCommand(sc) +When FILE is '-' or not provided, the template is read from standard input. +FILE must not match a supported TYPE name when TYPE is not provided, to avoid ambiguity. + +Examples: + opm alpha render-template basic template.yaml + opm alpha render-template semver template.yaml + opm alpha render-template template.yaml # auto-detect type + opm alpha render-template < template.yaml # auto-detect from stdin`, + Args: cobra.RangeArgs(0, 2), + RunE: func(cmd *cobra.Command, args []string) error { + return runRenderTemplate(cmd, args, tr) + }, + } - runCmd.PersistentFlags().StringVarP(&output, "output", "o", "json", "Output format (json|yaml)") + runCmd.PersistentFlags().StringVarP(&output, "output", "o", "json", "Output format (json|yaml|mermaid)") + runCmd.PersistentFlags().StringVar(&migrateLevel, "migrate-level", "", "Name of the last migration to run (default: none)\n"+migrations.HelpText()) return runCmd } diff --git a/staging/operator-registry/cmd/opm/alpha/template/render.go b/staging/operator-registry/cmd/opm/alpha/template/render.go new file mode 100644 index 0000000000..e7234e76bc --- /dev/null +++ b/staging/operator-registry/cmd/opm/alpha/template/render.go @@ -0,0 +1,141 @@ +package template + +import ( + "context" + "fmt" + "io" + "os" + + "github.com/sirupsen/logrus" + "github.com/spf13/cobra" + + "github.com/operator-framework/operator-registry/alpha/action" + "github.com/operator-framework/operator-registry/alpha/action/migrations" + "github.com/operator-framework/operator-registry/alpha/declcfg" + alphatemplate "github.com/operator-framework/operator-registry/alpha/template" + "github.com/operator-framework/operator-registry/cmd/opm/internal/util" +) + +// runRenderTemplate handles the unified template rendering logic +func runRenderTemplate(cmd *cobra.Command, args []string, tr alphatemplate.Registry) error { + var templateType, filePath string + + // Parse arguments based on number provided + switch len(args) { + case 0: + // No arguments - read from stdin, auto-detect type + filePath = "-" + case 1: + // One argument - could be type or file + if tr.HasType(args[0]) { + // It's a template type, read from stdin + templateType = args[0] + filePath = "-" + } else { + // It's a file path, auto-detect type + filePath = args[0] + } + case 2: + // Two arguments - type and file + templateType = args[0] + filePath = args[1] + if !tr.HasType(templateType) { + return fmt.Errorf("invalid template type %q, must be one of: %s", templateType, tr.GetSupportedTypes()) + } + } + + // Handle different input argument types + data, source, err := util.OpenFileOrStdin(cmd, []string{filePath}) + if err != nil { + return fmt.Errorf("unable to open %q: %v", source, err) + } + defer data.Close() + + // Determine output format + var write func(declcfg.DeclarativeConfig, io.Writer) error + output, err := cmd.Flags().GetString("output") + if err != nil { + return fmt.Errorf("unable to determine output format") + } + switch output { + case "yaml": + write = declcfg.WriteYAML + case "json": + write = declcfg.WriteJSON + case "mermaid": + write = func(cfg declcfg.DeclarativeConfig, writer io.Writer) error { + mermaidWriter := declcfg.NewMermaidWriter() + return mermaidWriter.WriteChannels(cfg, writer) + } + default: + return fmt.Errorf("invalid --output value %q, expected (json|yaml|mermaid)", output) + } + + // The bundle loading impl is somewhat verbose, even on the happy path, + // so discard all logrus default logger logs. + logrus.SetOutput(io.Discard) + + // Create registry and registry client + reg, err := util.CreateCLIRegistry(cmd) + if err != nil { + return fmt.Errorf("creating containerd registry: %v", err) + } + defer func() { + _ = reg.Destroy() + }() + + // Handle migrations + var m *migrations.Migrations + migrateLevel, err := cmd.Flags().GetString("migrate-level") + if err == nil && migrateLevel != "" { + m, err = migrations.NewMigrations(migrateLevel) + if err != nil { + return err + } + } + + // Create render bundle function + renderBundle := alphatemplate.BundleRenderer(func(ctx context.Context, image string) (*declcfg.DeclarativeConfig, error) { + renderer := action.Render{ + Refs: []string{image}, + Registry: reg, + AllowedRefMask: action.RefBundleImage, + Migrations: m, + } + return renderer.Run(ctx) + }) + + var tmpl alphatemplate.Template + // a reader for the schema data. in the simple case, this is just 'data'. + // in the case where we auto-detect the schema, this is a reader that + // includes the consumed schema data plus any remainder. + var renderReader io.Reader + + if templateType != "" { + // Use specified template type + tmpl, err = tr.CreateTemplateByType(templateType, renderBundle) + if err != nil { + return fmt.Errorf("creating template by type: %v", err) + } + renderReader = data + } else { + // Auto-detect template type from schema + tmpl, renderReader, err = tr.CreateTemplateBySchema(data, renderBundle) + if err != nil { + return fmt.Errorf("auto-detecting template type: %v", err) + } + } + + // Render the template + cfg, err := tmpl.Render(cmd.Context(), renderReader) + if err != nil { + return fmt.Errorf("rendering template: %v", err) + } + + // Write output + if err := write(*cfg, os.Stdout); err != nil { + return fmt.Errorf("writing output: %v", err) + } + + return nil +} diff --git a/staging/operator-registry/cmd/opm/alpha/template/semver.go b/staging/operator-registry/cmd/opm/alpha/template/semver.go deleted file mode 100644 index eb07ab5684..0000000000 --- a/staging/operator-registry/cmd/opm/alpha/template/semver.go +++ /dev/null @@ -1,114 +0,0 @@ -package template - -import ( - "context" - "fmt" - "io" - "log" - "os" - - "github.com/sirupsen/logrus" - "github.com/spf13/cobra" - - "github.com/operator-framework/operator-registry/alpha/action" - "github.com/operator-framework/operator-registry/alpha/action/migrations" - "github.com/operator-framework/operator-registry/alpha/declcfg" - "github.com/operator-framework/operator-registry/alpha/template/semver" - "github.com/operator-framework/operator-registry/cmd/opm/internal/util" -) - -func newSemverTemplateCmd() *cobra.Command { - var ( - migrateLevel string - ) - - cmd := &cobra.Command{ - Use: "semver [FILE]", - Short: `Generate a file-based catalog from a single 'semver template' file -When FILE is '-' or not provided, the template is read from standard input`, - Long: `Generate a file-based catalog from a single 'semver template' file -When FILE is '-' or not provided, the template is read from standard input`, - Args: cobra.MaximumNArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - // Handle different input argument types - // When no arguments or "-" is passed to the command, - // assume input is coming from stdin - // Otherwise open the file passed to the command - data, source, err := util.OpenFileOrStdin(cmd, args) - if err != nil { - return err - } - defer data.Close() - - var write func(declcfg.DeclarativeConfig, io.Writer) error - output, err := cmd.Flags().GetString("output") - if err != nil { - log.Fatalf("unable to determine output format") - } - switch output { - case "json": - write = declcfg.WriteJSON - case "yaml": - write = declcfg.WriteYAML - case "mermaid": - write = func(cfg declcfg.DeclarativeConfig, writer io.Writer) error { - mermaidWriter := declcfg.NewMermaidWriter() - return mermaidWriter.WriteChannels(cfg, writer) - } - default: - return fmt.Errorf("invalid output format %q", output) - } - - // The bundle loading impl is somewhat verbose, even on the happy path, - // so discard all logrus default logger logs. Any important failures will be - // returned from template.Render and logged as fatal errors. - logrus.SetOutput(io.Discard) - - reg, err := util.CreateCLIRegistry(cmd) - if err != nil { - log.Fatalf("creating containerd registry: %v", err) - } - defer func() { - _ = reg.Destroy() - }() - - var m *migrations.Migrations - if migrateLevel != "" { - m, err = migrations.NewMigrations(migrateLevel) - if err != nil { - log.Fatal(err) - } - } - - template := semver.Template{ - Data: data, - RenderBundle: func(ctx context.Context, ref string) (*declcfg.DeclarativeConfig, error) { - renderer := action.Render{ - Refs: []string{ref}, - Registry: reg, - AllowedRefMask: action.RefBundleImage, - Migrations: m, - } - return renderer.Run(ctx) - }, - } - - out, err := template.Render(cmd.Context()) - if err != nil { - log.Fatalf("semver %q: %v", source, err) - } - - if out != nil { - if err := write(*out, os.Stdout); err != nil { - log.Fatal(err) - } - } - - return nil - }, - } - - cmd.Flags().StringVar(&migrateLevel, "migrate-level", "", "Name of the last migration to run (default: none)\n"+migrations.HelpText()) - - return cmd -} diff --git a/staging/operator-registry/go.mod b/staging/operator-registry/go.mod index 12446d5a4d..73184e2e43 100644 --- a/staging/operator-registry/go.mod +++ b/staging/operator-registry/go.mod @@ -1,54 +1,53 @@ module github.com/operator-framework/operator-registry -go 1.24.6 +go 1.25.3 require ( github.com/akrylysov/pogreb v0.10.2 github.com/blang/semver/v4 v4.0.0 - github.com/containerd/containerd v1.7.29 + github.com/containerd/containerd v1.7.30 github.com/containerd/errdefs v1.0.0 github.com/distribution/distribution/v3 v3.0.0 github.com/distribution/reference v0.6.0 - github.com/docker/cli v29.0.0+incompatible - github.com/golang-migrate/migrate/v4 v4.19.0 - github.com/golang/mock v1.6.0 + github.com/docker/cli v29.1.5+incompatible + github.com/golang-migrate/migrate/v4 v4.19.1 + github.com/golang/mock v1.7.0-rc.1 github.com/google/go-cmp v0.7.0 github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.3 - github.com/grpc-ecosystem/grpc-health-probe v0.4.41 + github.com/grpc-ecosystem/grpc-health-probe v0.4.44 github.com/h2non/filetype v1.1.3 github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c github.com/joelanford/ignore v0.1.1 - github.com/mattn/go-sqlite3 v1.14.32 - github.com/maxbrunsfeld/counterfeiter/v6 v6.12.0 - github.com/onsi/ginkgo/v2 v2.27.2 - github.com/onsi/gomega v1.38.2 + github.com/mattn/go-sqlite3 v1.14.33 + github.com/maxbrunsfeld/counterfeiter/v6 v6.12.1 + github.com/onsi/ginkgo/v2 v2.27.5 + github.com/onsi/gomega v1.39.0 github.com/opencontainers/go-digest v1.0.0 github.com/opencontainers/image-spec v1.1.1 - github.com/operator-framework/api v0.36.0 + github.com/operator-framework/api v0.38.0 github.com/otiai10/copy v1.14.1 github.com/pkg/errors v0.9.1 - github.com/sirupsen/logrus v1.9.3 - github.com/spf13/cobra v1.10.1 + github.com/sirupsen/logrus v1.9.4 + github.com/spf13/cobra v1.10.2 github.com/spf13/pflag v1.0.10 github.com/stretchr/testify v1.11.1 github.com/tidwall/btree v1.8.1 go.etcd.io/bbolt v1.4.3 - go.podman.io/common v0.66.0 + go.podman.io/common v0.66.1 go.podman.io/image/v5 v5.38.0 golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b - golang.org/x/mod v0.29.0 - golang.org/x/net v0.46.0 - golang.org/x/sync v0.18.0 - golang.org/x/sys v0.38.0 - golang.org/x/text v0.30.0 - google.golang.org/grpc v1.76.0 - google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 - google.golang.org/protobuf v1.36.10 + golang.org/x/mod v0.32.0 + golang.org/x/sync v0.19.0 + golang.org/x/sys v0.40.0 + golang.org/x/text v0.33.0 + google.golang.org/grpc v1.78.0 + google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.0 + google.golang.org/protobuf v1.36.11 gopkg.in/yaml.v2 v2.4.0 - k8s.io/api v0.34.1 - k8s.io/apiextensions-apiserver v0.34.1 - k8s.io/apimachinery v0.34.1 - k8s.io/client-go v0.34.1 + k8s.io/api v0.34.3 + k8s.io/apiextensions-apiserver v0.34.3 + k8s.io/apimachinery v0.34.3 + k8s.io/client-go v0.34.3 k8s.io/kubectl v0.33.2 oras.land/oras-go/v2 v2.6.0 sigs.k8s.io/controller-runtime v0.22.4 @@ -70,7 +69,7 @@ require ( github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d // indirect github.com/antlr4-go/antlr/v4 v4.13.1 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/cenkalti/backoff/v5 v5.0.2 // indirect + github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/containerd/cgroups/v3 v3.0.5 // indirect github.com/containerd/containerd/api v1.9.0 // indirect @@ -99,7 +98,7 @@ require ( github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.6.2 // indirect github.com/go-git/go-git/v5 v5.16.2 // indirect - github.com/go-jose/go-jose/v4 v4.1.2 // indirect + github.com/go-jose/go-jose/v4 v4.1.3 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-openapi/jsonpointer v0.21.1 // indirect @@ -117,7 +116,7 @@ require ( github.com/gorilla/handlers v1.5.2 // indirect github.com/gorilla/mux v1.8.1 // indirect github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect github.com/hashicorp/golang-lru/arc/v2 v2.0.7 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect @@ -126,7 +125,6 @@ require ( github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/compress v1.18.0 // indirect github.com/klauspost/pgzip v1.2.6 // indirect - github.com/letsencrypt/boulder v0.0.0-20250624003606-5ddd5acf990d // indirect github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect github.com/mailru/easyjson v0.9.0 // indirect github.com/mattn/go-isatty v0.0.20 // indirect @@ -150,9 +148,9 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/proglottis/gpgme v0.1.5 // indirect - github.com/prometheus/client_golang v1.22.0 // indirect + github.com/prometheus/client_golang v1.23.2 // indirect github.com/prometheus/client_model v0.6.2 // indirect - github.com/prometheus/common v0.65.0 // indirect + github.com/prometheus/common v0.67.4 // indirect github.com/prometheus/procfs v0.16.1 // indirect github.com/redis/go-redis/extra/rediscmd/v9 v9.10.0 // indirect github.com/redis/go-redis/extra/redisotel/v9 v9.10.0 // indirect @@ -160,63 +158,63 @@ require ( github.com/rivo/uniseg v0.4.7 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/secure-systems-lab/go-securesystemslib v0.9.1 // indirect - github.com/sigstore/fulcio v1.7.1 // indirect - github.com/sigstore/protobuf-specs v0.4.3 // indirect - github.com/sigstore/sigstore v1.9.5 // indirect + github.com/sigstore/fulcio v1.8.3 // indirect + github.com/sigstore/protobuf-specs v0.5.0 // indirect + github.com/sigstore/sigstore v1.10.0 // indirect github.com/smallstep/pkcs7 v0.2.1 // indirect github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect github.com/stefanberger/go-pkcs11uri v0.0.0-20230803200340-78284954bff6 // indirect github.com/stoewer/go-strcase v1.3.1 // indirect - github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 // indirect github.com/ulikunitz/xz v0.5.15 // indirect github.com/vbatts/tar-split v0.12.1 // indirect github.com/vbauerster/mpb/v8 v8.10.2 // indirect github.com/x448/float16 v0.8.4 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/contrib/bridges/prometheus v0.61.0 // indirect go.opentelemetry.io/contrib/exporters/autoexport v0.61.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect - go.opentelemetry.io/otel v1.37.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 // indirect + go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.12.2 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.12.2 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.36.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.36.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.36.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.36.0 // indirect go.opentelemetry.io/otel/exporters/prometheus v0.58.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.12.2 // indirect go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.36.0 // indirect go.opentelemetry.io/otel/log v0.12.2 // indirect - go.opentelemetry.io/otel/metric v1.37.0 // indirect - go.opentelemetry.io/otel/sdk v1.37.0 // indirect + go.opentelemetry.io/otel/metric v1.38.0 // indirect + go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/sdk/log v0.12.2 // indirect - go.opentelemetry.io/otel/sdk/metric v1.37.0 // indirect - go.opentelemetry.io/otel/trace v1.37.0 // indirect - go.opentelemetry.io/proto/otlp v1.7.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect + go.opentelemetry.io/otel/trace v1.38.0 // indirect + go.opentelemetry.io/proto/otlp v1.7.1 // indirect go.podman.io/storage v1.61.0 // indirect - go.yaml.in/yaml/v2 v2.4.2 // indirect + go.yaml.in/yaml/v2 v2.4.3 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/crypto v0.43.0 // indirect - golang.org/x/oauth2 v0.32.0 // indirect - golang.org/x/term v0.36.0 // indirect - golang.org/x/time v0.12.0 // indirect - golang.org/x/tools v0.37.0 // indirect + golang.org/x/crypto v0.46.0 // indirect + golang.org/x/net v0.48.0 // indirect + golang.org/x/oauth2 v0.33.0 // indirect + golang.org/x/term v0.38.0 // indirect + golang.org/x/time v0.14.0 // indirect + golang.org/x/tools v0.40.0 // indirect google.golang.org/genproto v0.0.0-20250603155806-513f23925822 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250804133106-a7a43d27e69b // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250804133106-a7a43d27e69b // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20251029180050-ab9386a59fda // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251103181224-f26f9409b101 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiserver v0.34.1 // indirect + k8s.io/apiserver v0.34.3 // indirect k8s.io/cli-runtime v0.33.2 // indirect - k8s.io/component-base v0.34.1 // indirect + k8s.io/component-base v0.34.3 // indirect k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b // indirect - k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 // indirect + k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d // indirect sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.33.0 // indirect sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect sigs.k8s.io/randfill v1.0.0 // indirect diff --git a/staging/operator-registry/go.sum b/staging/operator-registry/go.sum index 03423f0fa0..311956af97 100644 --- a/staging/operator-registry/go.sum +++ b/staging/operator-registry/go.sum @@ -42,8 +42,8 @@ github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= -github.com/cenkalti/backoff/v5 v5.0.2 h1:rIfFVxEf1QsI7E1ZHfp/B4DF/6QBAUhmgkxc0H7Zss8= -github.com/cenkalti/backoff/v5 v5.0.2/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= +github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= +github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -51,8 +51,8 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/containerd/cgroups/v3 v3.0.5 h1:44na7Ud+VwyE7LIoJ8JTNQOa549a8543BmzaJHo6Bzo= github.com/containerd/cgroups/v3 v3.0.5/go.mod h1:SA5DLYnXO8pTGYiAHXz94qvLQTKfVM5GEVisn4jpins= -github.com/containerd/containerd v1.7.29 h1:90fWABQsaN9mJhGkoVnuzEY+o1XDPbg9BTC9QTAHnuE= -github.com/containerd/containerd v1.7.29/go.mod h1:azUkWcOvHrWvaiUjSQH0fjzuHIwSPg1WL5PshGP4Szs= +github.com/containerd/containerd v1.7.30 h1:/2vezDpLDVGGmkUXmlNPLCCNKHJ5BbC5tJB5JNzQhqE= +github.com/containerd/containerd v1.7.30/go.mod h1:fek494vwJClULlTpExsmOyKCMUAbuVjlFsJQc4/j44M= github.com/containerd/containerd/api v1.9.0 h1:HZ/licowTRazus+wt9fM6r/9BQO7S0vD5lMcWspGIg0= github.com/containerd/containerd/api v1.9.0/go.mod h1:GhghKFmTR3hNtyznBoQ0EMWr9ju5AqHjcZPsSpTKutI= github.com/containerd/continuity v0.4.5 h1:ZRoN1sXq9u7V6QoHMcVWGhOwDFqZ4B9i5H6un1Wh0x4= @@ -92,8 +92,8 @@ github.com/distribution/distribution/v3 v3.0.0 h1:q4R8wemdRQDClzoNNStftB2ZAfqOiN github.com/distribution/distribution/v3 v3.0.0/go.mod h1:tRNuFoZsUdyRVegq8xGNeds4KLjwLCRin/tTo6i1DhU= 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 v29.0.0+incompatible h1:KgsN2RUFMNM8wChxryicn4p46BdQWpXOA1XLGBGPGAw= -github.com/docker/cli v29.0.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v29.1.5+incompatible h1:GckbANUt3j+lsnQ6eCcQd70mNSOismSHWt8vk2AX8ao= +github.com/docker/cli v29.1.5+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v28.5.1+incompatible h1:Bm8DchhSD2J6PsFzxC35TZo4TLGR2PdW/E69rU45NhM= @@ -132,8 +132,8 @@ github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UN github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU= github.com/go-git/go-git/v5 v5.16.2 h1:fT6ZIOjE5iEnkzKyxTHK1W4HGAsPhqEqiSAssSO77hM= github.com/go-git/go-git/v5 v5.16.2/go.mod h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8= -github.com/go-jose/go-jose/v4 v4.1.2 h1:TK/7NqRQZfgAh+Td8AlsrvtPoUyiHh0LqVvokh+1vHI= -github.com/go-jose/go-jose/v4 v4.1.2/go.mod h1:22cg9HWM1pOlnRiY+9cQYJ9XHmya1bYW8OeDM6Ku6Oo= +github.com/go-jose/go-jose/v4 v4.1.3 h1:CVLmWDhDVRa6Mi/IgCgaopNosCaHz7zrMeF9MlZRkrs= +github.com/go-jose/go-jose/v4 v4.1.3/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= @@ -153,22 +153,20 @@ github.com/go-openapi/swag v0.23.1/go.mod h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDq github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= -github.com/go-test/deep v1.1.1 h1:0r/53hagsehfO4bzD2Pgr/+RgHqhmf+k1Bpse2cTu1U= -github.com/go-test/deep v1.1.1/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= github.com/goccy/go-yaml v1.18.0 h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw= github.com/goccy/go-yaml v1.18.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-migrate/migrate/v4 v4.19.0 h1:RcjOnCGz3Or6HQYEJ/EEVLfWnmw9KnoigPSjzhCuaSE= -github.com/golang-migrate/migrate/v4 v4.19.0/go.mod h1:9dyEcu+hO+G9hPSw8AIg50yg622pXJsoHItQnDGZkI0= +github.com/golang-migrate/migrate/v4 v4.19.1 h1:OCyb44lFuQfYXYLx1SCxPZQGU7mcaZ7gH9yH4jSFbBA= +github.com/golang-migrate/migrate/v4 v4.19.1/go.mod h1:CTcgfjxhaUtsLipnLoQRWCrjYXycRz/g5+RWDuYgPrE= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/mock v1.7.0-rc.1 h1:YojYx61/OLFsiv6Rw1Z96LpldJIy31o+UHmwAUMJ6/U= +github.com/golang/mock v1.7.0-rc.1/go.mod h1:s42URUywIqd+OcERslBJvOjepvNymP31m3q8d/GkuRs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -216,18 +214,14 @@ github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.3 h1:B+8ClL/kCQkRiU82d9xajR github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.3/go.mod h1:NbCUVmiS4foBGBHOYlCT25+YmGpJ32dZPi75pGEUpj4= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20210315223345-82c243799c99 h1:JYghRBlGCZyCF2wNUJ8W0cwaQdtpcssJ4CgC406g+WU= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20210315223345-82c243799c99/go.mod h1:3bDW6wMZJB7tiONtC/1Xpicra6Wp5GgbTbQWCbI5fkc= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.0 h1:+epNPbD5EqgpEMm5wrl4Hqts3jZt8+kYaqUisuuIGTk= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.0/go.mod h1:Zanoh4+gvIgluNqcfMVTJueD4wSS5hT7zTt4Mrutd90= -github.com/grpc-ecosystem/grpc-health-probe v0.4.41 h1:CUEfHjjmS2dqe6y3Ge4UiQTgjQ7f8ol5zbLIpWLE0NU= -github.com/grpc-ecosystem/grpc-health-probe v0.4.41/go.mod h1:zKKD5raX5byCWAdkiLno5gd10RT6q50VtVTuEhe1DiU= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 h1:NmZ1PKzSTQbuGHw9DGPFomqkkLWMC+vZCkfs+FHv1Vg= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3/go.mod h1:zQrxl1YP88HQlA6i9c63DSVPFklWpGX4OWAc9bFuaH4= +github.com/grpc-ecosystem/grpc-health-probe v0.4.44 h1:UL/D651ntWGhnAR8MwhdzPM0tHhWFrXToL+9uX+YXRs= +github.com/grpc-ecosystem/grpc-health-probe v0.4.44/go.mod h1:omGa1rvwXOYzLpaxeOAHruRqdCYGJUSVds++SpkF5iQ= github.com/h2non/filetype v1.1.3 h1:FKkx9QbD7HR/zjK1Ia5XiBsq9zdLi5Kf3zGyFTAFkGg= github.com/h2non/filetype v1.1.3/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY= github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c h1:fEE5/5VNnYUoBOj2I9TP8Jc+a7lge3QWn9DKE7NCwfc= github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c/go.mod h1:ObS/W+h8RYb1Y7fYivughjxojTmIu5iAIjSrSLCLeqE= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/golang-lru/arc/v2 v2.0.7 h1:QxkVTxwColcduO+LP7eJO56r2hFiG8zEbfAAzRv52KQ= github.com/hashicorp/golang-lru/arc/v2 v2.0.7/go.mod h1:Pe7gBlGdc8clY5LJ0LpJXMt5AmgmWNH1g+oFFVUHOEc= github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= @@ -236,8 +230,6 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jmhodges/clock v1.2.0 h1:eq4kys+NI0PLngzaHEe7AmPT90XMGIEySD1JfV1PDIs= -github.com/jmhodges/clock v1.2.0/go.mod h1:qKjhA7x7u/lQpPB1XAqX1b1lCI/w3/fNuYpI/ZjLynI= github.com/joelanford/ignore v0.1.1 h1:vKky5RDoPT+WbONrbQBgOn95VV/UPh4ejlyAbbzgnQk= github.com/joelanford/ignore v0.1.1/go.mod h1:8eho/D8fwQ3rIXrLwE23AaeaGDNXqLE9QJ3zJ4LIPCw= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= @@ -263,8 +255,6 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/letsencrypt/boulder v0.0.0-20250624003606-5ddd5acf990d h1:fCRb9hXR4QQJpwc7xnGugnva0DD5ollTGkys0n8aXT4= -github.com/letsencrypt/boulder v0.0.0-20250624003606-5ddd5acf990d/go.mod h1:BVoSL2Ed8oCncct0meeBqoTY7b1Mzx7WqEOZ8EisFmY= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= @@ -277,11 +267,11 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-sqlite3 v1.14.32 h1:JD12Ag3oLy1zQA+BNn74xRgaBbdhbNIDYvQUEuuErjs= -github.com/mattn/go-sqlite3 v1.14.32/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/mattn/go-sqlite3 v1.14.33 h1:A5blZ5ulQo2AtayQ9/limgHEkFreKj1Dv226a1K73s0= +github.com/mattn/go-sqlite3 v1.14.33/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/maxbrunsfeld/counterfeiter/v6 v6.12.0 h1:aOeI7xAOVdK+R6xbVsZuU9HmCZYmQVmZgPf9xJUd2Sg= -github.com/maxbrunsfeld/counterfeiter/v6 v6.12.0/go.mod h1:0hZWbtfeCYUQeAQdPLUzETiBhUSns7O6LDj9vH88xKA= +github.com/maxbrunsfeld/counterfeiter/v6 v6.12.1 h1:D4O2wLxB384TS3ohBJMfolnxb4qGmoZ1PnWNtit8LYo= +github.com/maxbrunsfeld/counterfeiter/v6 v6.12.1/go.mod h1:RuJdxo0oI6dClIaMzdl3hewq3a065RH65dofJP03h8I= github.com/mfridman/tparse v0.18.0 h1:wh6dzOKaIwkUGyKgOntDW4liXSo37qg5AXbIhkMV3vE= github.com/mfridman/tparse v0.18.0/go.mod h1:gEvqZTuCgEhPbYk/2lS3Kcxg1GmTxxU7kTC8DvP0i/A= github.com/miekg/pkcs11 v1.1.1 h1:Ugu9pdy6vAYku5DEpVWVFPYnzV+bxB+iRdbuFSu7TvU= @@ -317,18 +307,18 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/onsi/ginkgo/v2 v2.27.2 h1:LzwLj0b89qtIy6SSASkzlNvX6WktqurSHwkk2ipF/Ns= -github.com/onsi/ginkgo/v2 v2.27.2/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zwn/ykDRo= -github.com/onsi/gomega v1.38.2 h1:eZCjf2xjZAqe+LeWvKb5weQ+NcPwX84kqJ0cZNxok2A= -github.com/onsi/gomega v1.38.2/go.mod h1:W2MJcYxRGV63b418Ai34Ud0hEdTVXq9NW9+Sx6uXf3k= +github.com/onsi/ginkgo/v2 v2.27.5 h1:ZeVgZMx2PDMdJm/+w5fE/OyG6ILo1Y3e+QX4zSR0zTE= +github.com/onsi/ginkgo/v2 v2.27.5/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zwn/ykDRo= +github.com/onsi/gomega v1.39.0 h1:y2ROC3hKFmQZJNFeGAMeHZKkjBL65mIZcvrLQBF9k6Q= +github.com/onsi/gomega v1.39.0/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4= 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.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= github.com/opencontainers/runtime-spec v1.2.1 h1:S4k4ryNgEpxW1dzyqffOmhI1BHYcjzU8lpJfSlR0xww= github.com/opencontainers/runtime-spec v1.2.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/operator-framework/api v0.36.0 h1:6+duRhamCvB540JbvNp/1+Pot7luff7HqdAOm9bAntg= -github.com/operator-framework/api v0.36.0/go.mod h1:QSmHMx8XpGsNWvjU5CUelVZC916VLp/TZhfYvGKpghM= +github.com/operator-framework/api v0.38.0 h1:RbIhBH7pot/tlVPkEppXOh2zT7GpSUjPJoC8pRnNnBo= +github.com/operator-framework/api v0.38.0/go.mod h1:6UCZhZPh9zAZZq1D9B2+IO0ibVwHdTiNYLYRr8ZT8Mk= github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8= github.com/otiai10/copy v1.14.1/go.mod h1:oQwrEDDOci3IM8dJF0d8+jnbfPDllW6vUjNc3DoZm9I= github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs= @@ -346,8 +336,8 @@ github.com/proglottis/gpgme v0.1.5/go.mod h1:5LoXMgpE4bttgwwdv9bLs/vwqv3qV7F4glE github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= -github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= -github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= +github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= +github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -355,8 +345,8 @@ github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNw github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= -github.com/prometheus/common v0.65.0 h1:QDwzd+G1twt//Kwj/Ww6E9FQq1iVMmODnILtW1t2VzE= -github.com/prometheus/common v0.65.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8= +github.com/prometheus/common v0.67.4 h1:yR3NqWO1/UyO1w2PhUvXlGQs/PtFmoveVO0KZ4+Lvsc= +github.com/prometheus/common v0.67.4/go.mod h1:gP0fq6YjjNCLssJCQp0yk4M8W6ikLURwkdd/YKtTbyI= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= @@ -381,19 +371,19 @@ github.com/sclevine/spec v1.4.0 h1:z/Q9idDcay5m5irkZ28M7PtQM4aOISzOpj4bUPkDee8= github.com/sclevine/spec v1.4.0/go.mod h1:LvpgJaFyvQzRvc1kaDs0bulYwzC70PbiYjC4QnFHkOM= github.com/secure-systems-lab/go-securesystemslib v0.9.1 h1:nZZaNz4DiERIQguNy0cL5qTdn9lR8XKHf4RUyG1Sx3g= github.com/secure-systems-lab/go-securesystemslib v0.9.1/go.mod h1:np53YzT0zXGMv6x4iEWc9Z59uR+x+ndLwCLqPYpLXVU= -github.com/sigstore/fulcio v1.7.1 h1:RcoW20Nz49IGeZyu3y9QYhyyV3ZKQ85T+FXPKkvE+aQ= -github.com/sigstore/fulcio v1.7.1/go.mod h1:7lYY+hsd8Dt+IvKQRC+KEhWpCZ/GlmNvwIa5JhypMS8= -github.com/sigstore/protobuf-specs v0.4.3 h1:kRgJ+ciznipH9xhrkAbAEHuuxD3GhYnGC873gZpjJT4= -github.com/sigstore/protobuf-specs v0.4.3/go.mod h1:+gXR+38nIa2oEupqDdzg4qSBT0Os+sP7oYv6alWewWc= -github.com/sigstore/sigstore v1.9.5 h1:Wm1LT9yF4LhQdEMy5A2JeGRHTrAWGjT3ubE5JUSrGVU= -github.com/sigstore/sigstore v1.9.5/go.mod h1:VtxgvGqCmEZN9X2zhFSOkfXxvKUjpy8RpUW39oCtoII= +github.com/sigstore/fulcio v1.8.3 h1:zkuAkRHbD53hhYGlBHHeAW4NRDrrTiDHumAbcfSyyFw= +github.com/sigstore/fulcio v1.8.3/go.mod h1:YxP7TTdn9H5Gg+dXOsu61X36LLYxT2ZuvODhWelMNwA= +github.com/sigstore/protobuf-specs v0.5.0 h1:F8YTI65xOHw70NrvPwJ5PhAzsvTnuJMGLkA4FIkofAY= +github.com/sigstore/protobuf-specs v0.5.0/go.mod h1:+gXR+38nIa2oEupqDdzg4qSBT0Os+sP7oYv6alWewWc= +github.com/sigstore/sigstore v1.10.0 h1:lQrmdzqlR8p9SCfWIpFoGUqdXEzJSZT2X+lTXOMPaQI= +github.com/sigstore/sigstore v1.10.0/go.mod h1:Ygq+L/y9Bm3YnjpJTlQrOk/gXyrjkpn3/AEJpmk1n9Y= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= -github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= +github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= github.com/smallstep/pkcs7 v0.2.1 h1:6Kfzr/QizdIuB6LSv8y1LJdZ3aPSfTNhTLqAx9CTLfA= github.com/smallstep/pkcs7 v0.2.1/go.mod h1:RcXHsMfL+BzH8tRhmrF1NkkpebKpq3JEM66cOFxanf0= -github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s= -github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0= +github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= +github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= @@ -411,7 +401,6 @@ 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.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= @@ -427,8 +416,6 @@ github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= -github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 h1:e/5i7d4oYZ+C1wj2THlRK+oAhjeS/TRQwMfkIuet3w0= -github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399/go.mod h1:LdwHTNJT99C5fTAzDz0ud328OgXz+gierycbcIx2fRs= github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY= github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/vbatts/tar-split v0.12.1 h1:CqKoORW7BUWBe7UL/iqTVvkTBOF8UvOMKOIZykxnnbo= @@ -439,7 +426,7 @@ github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.etcd.io/bbolt v1.4.3 h1:dEadXpI6G79deX5prL3QRNP6JB8UxVkqo4UPnHaNXJo= go.etcd.io/bbolt v1.4.3/go.mod h1:tKQlpPaYCVFctUIgFKFnAlvbmB3tpy1vkTnDWohtc0E= @@ -451,18 +438,18 @@ go.etcd.io/etcd/client/v3 v3.6.4 h1:YOMrCfMhRzY8NgtzUsHl8hC2EBSnuqbR3dh84Uryl7A= go.etcd.io/etcd/client/v3 v3.6.4/go.mod h1:jaNNHCyg2FdALyKWnd7hxZXZxZANb0+KGY+YQaEMISo= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= -go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= go.opentelemetry.io/contrib/bridges/prometheus v0.61.0 h1:RyrtJzu5MAmIcbRrwg75b+w3RlZCP0vJByDVzcpAe3M= go.opentelemetry.io/contrib/bridges/prometheus v0.61.0/go.mod h1:tirr4p9NXbzjlbruiRGp53IzlYrDk5CO2fdHj0sSSaY= go.opentelemetry.io/contrib/exporters/autoexport v0.61.0 h1:XfzKtKSrbtYk9TNCF8dkO0Y9M7IOfb4idCwBOTwGBiI= go.opentelemetry.io/contrib/exporters/autoexport v0.61.0/go.mod h1:N6otC+qXTD5bAnbK2O1f/1SXq3cX+3KYSWrkBUqG0cw= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 h1:q4XOmH/0opmeuJtPsbFNivyl7bCt7yRBbeEm2sC/XtQ= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= -go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= -go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 h1:YH4g8lQroajqUwWbq/tr2QX1JFmEXaDLgG+ew9bLMWo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 h1:RbKq8BG0FI8OiXhBfcRtqqHcZcka+gU3cskNuf05R18= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0/go.mod h1:h06DGIukJOevXaj/xrNjhi/2098RZzcLTbc0jDAUbsg= +go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= +go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.12.2 h1:06ZeJRe5BnYXceSM9Vya83XXVaNGe3H1QqsvqRANQq8= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.12.2/go.mod h1:DvPtKE63knkDVP88qpatBj81JxN+w1bqfVbsbCbj1WY= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.12.2 h1:tPLwQlXbJ8NSOfZc4OkgU5h2A38M4c9kfHSVc4PFQGs= @@ -471,10 +458,10 @@ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.36.0 h1:zwd go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.36.0/go.mod h1:rUKCPscaRWWcqGT6HnEmYrK+YNe5+Sw64xgQTOJ5b30= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.36.0 h1:gAU726w9J8fwr4qRDqu1GYMNNs4gXrU+Pv20/N1UpB4= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.36.0/go.mod h1:RboSDkp7N292rgu+T0MgVt2qgFGu6qa1RpZDOtpL76w= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0 h1:dNzwXjZKpMpE2JhmO+9HsPl42NIXFIFSUSSs0fiqra0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0/go.mod h1:90PoxvaEB5n6AOdZvi+yWJQoE95U8Dhhw2bSyRqnTD0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.36.0 h1:JgtbA0xkWHnTmYk7YusopJFX6uleBmAuZ8n05NEh8nQ= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.36.0/go.mod h1:179AK5aar5R3eS9FucPy6rggvU0g52cvKId8pv4+v0c= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 h1:lwI4Dc5leUqENgGuQImwLo4WnuXFPetmPpkLi2IrX54= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0/go.mod h1:Kz/oCE7z5wuyhPxsXDuaPteSWqjSBD5YaSdbxZYGbGk= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.36.0 h1:nRVXXvf78e00EwY6Wp0YII8ww2JVWshZ20HfTlE11AM= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.36.0/go.mod h1:r49hO7CgrxY9Voaj3Xe8pANWtr0Oq916d0XAmOoCZAQ= go.opentelemetry.io/otel/exporters/prometheus v0.58.0 h1:CJAxWKFIqdBennqxJyOgnt5LqkeFRT+Mz3Yjz3hL+h8= @@ -487,22 +474,22 @@ go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.36.0 h1:G8Xec/SgZQricwW go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.36.0/go.mod h1:PD57idA/AiFD5aqoxGxCvT/ILJPeHy3MjqU/NS7KogY= go.opentelemetry.io/otel/log v0.12.2 h1:yob9JVHn2ZY24byZeaXpTVoPS6l+UrrxmxmPKohXTwc= go.opentelemetry.io/otel/log v0.12.2/go.mod h1:ShIItIxSYxufUMt+1H5a2wbckGli3/iCfuEbVZi/98E= -go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= -go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= -go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI= -go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg= +go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= +go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= +go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= +go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= go.opentelemetry.io/otel/sdk/log v0.12.2 h1:yNoETvTByVKi7wHvYS6HMcZrN5hFLD7I++1xIZ/k6W0= go.opentelemetry.io/otel/sdk/log v0.12.2/go.mod h1:DcpdmUXHJgSqN/dh+XMWa7Vf89u9ap0/AAk/XGLnEzY= go.opentelemetry.io/otel/sdk/log/logtest v0.0.0-20250521073539-a85ae98dcedc h1:uqxdywfHqqCl6LmZzI3pUnXT1RGFYyUgxj0AkWPFxi0= go.opentelemetry.io/otel/sdk/log/logtest v0.0.0-20250521073539-a85ae98dcedc/go.mod h1:TY/N/FT7dmFrP/r5ym3g0yysP1DefqGpAZr4f82P0dE= -go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc= -go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps= -go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= -go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= -go.opentelemetry.io/proto/otlp v1.7.0 h1:jX1VolD6nHuFzOYso2E73H85i92Mv8JQYk0K9vz09os= -go.opentelemetry.io/proto/otlp v1.7.0/go.mod h1:fSKjH6YJ7HDlwzltzyMj036AJ3ejJLCgCSHGj4efDDo= -go.podman.io/common v0.66.0 h1:KElE3HKLFdMdJL+jv5ExBiX2Dh4Qcv8ovmzaBGRsyZM= -go.podman.io/common v0.66.0/go.mod h1:aNd2a0S7pY+fx1X5kpQYuF4hbwLU8ZOccuVrhu7h1Xc= +go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= +go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= +go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= +go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= +go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4= +go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE= +go.podman.io/common v0.66.1 h1:zDyd4HhVgQAN8LupBHCnhtM3FEOJ9DwmThjulXZq2qA= +go.podman.io/common v0.66.1/go.mod h1:aNd2a0S7pY+fx1X5kpQYuF4hbwLU8ZOccuVrhu7h1Xc= go.podman.io/image/v5 v5.38.0 h1:aUKrCANkPvze1bnhLJsaubcfz0d9v/bSDLnwsXJm6G4= go.podman.io/image/v5 v5.38.0/go.mod h1:hSIoIUzgBnmc4DjoIdzk63aloqVbD7QXDMkSE/cvG90= go.podman.io/storage v1.61.0 h1:5hD/oyRYt1f1gxgvect+8syZBQhGhV28dCw2+CZpx0Q= @@ -511,10 +498,10 @@ go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= -go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI= -go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU= +go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc= +go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= +go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= 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-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -526,8 +513,8 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= -golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04= -golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0= +golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU= +golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b h1:M2rDM6z3Fhozi9O7NWsxAkg/yqS/lQJ6PmkyIV3YP+o= golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b/go.mod h1:3//PLf8L/X+8b4vuAfHzxeRUl04Adcb341+IGKfnqS8= @@ -536,14 +523,14 @@ golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvx golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= 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/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= -golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= +golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c= +golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -556,18 +543,18 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/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-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 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.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= -golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4= -golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210= +golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= +golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.32.0 h1:jsCblLleRMDrxMN29H3z/k1KliIvpLgCkE6R8FXXNgY= -golang.org/x/oauth2 v0.32.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= +golang.org/x/oauth2 v0.33.0 h1:4Q+qn+E5z8gPRJfmRy7C2gGG3T4jIprK6aSYgTXGRpo= +golang.org/x/oauth2 v0.33.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -581,8 +568,8 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= -golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -591,12 +578,11 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/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-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/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-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -605,8 +591,8 @@ golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= -golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= +golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= 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= @@ -616,10 +602,11 @@ golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= -golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q= -golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss= +golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q= +golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/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.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= @@ -627,10 +614,10 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= -golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k= -golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM= -golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= -golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= +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/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= +golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -639,13 +626,13 @@ golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= 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/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= -golang.org/x/tools v0.37.0 h1:DVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE= -golang.org/x/tools v0.37.0/go.mod h1:MBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w= +golang.org/x/tools v0.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA= +golang.org/x/tools v0.40.0/go.mod h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc= 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= @@ -659,19 +646,19 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20250603155806-513f23925822 h1:rHWScKit0gvAPuOnu87KpaYtjK5zBMLcULh7gxkCXu4= google.golang.org/genproto v0.0.0-20250603155806-513f23925822/go.mod h1:HubltRL7rMh0LfnQPkMH4NPDFEWp0jw3vixw7jEM53s= -google.golang.org/genproto/googleapis/api v0.0.0-20250804133106-a7a43d27e69b h1:ULiyYQ0FdsJhwwZUwbaXpZF5yUE3h+RA+gxvBu37ucc= -google.golang.org/genproto/googleapis/api v0.0.0-20250804133106-a7a43d27e69b/go.mod h1:oDOGiMSXHL4sDTJvFvIB9nRQCGdLP1o/iVaqQK8zB+M= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250804133106-a7a43d27e69b h1:zPKJod4w6F1+nRGDI9ubnXYhU9NSWoFAijkHkUXeTK8= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250804133106-a7a43d27e69b/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +google.golang.org/genproto/googleapis/api v0.0.0-20251029180050-ab9386a59fda h1:+2XxjfsAu6vqFxwGBRcHiMaDCuZiqXGDUDVWVtrFAnE= +google.golang.org/genproto/googleapis/api v0.0.0-20251029180050-ab9386a59fda/go.mod h1:fDMmzKV90WSg1NbozdqrE64fkuTv6mlq2zxo9ad+3yo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251103181224-f26f9409b101 h1:tRPGkdGHuewF4UisLzzHHr1spKw92qLM98nIzxbC0wY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251103181224-f26f9409b101/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A= -google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 h1:F29+wU6Ee6qgu9TddPgooOdaqsxTMunOoj8KA5yuS5A= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1/go.mod h1:5KF+wpkbTSbGcR9zteSqZV6fqFOWBl4Yde8En8MryZA= +google.golang.org/grpc v1.78.0 h1:K1XZG/yGDJnzMdd/uZHAkVqJE+xIDOcmdSFZkBUicNc= +google.golang.org/grpc v1.78.0/go.mod h1:I47qjTo4OKbMkjA/aOOwxDIiPSBofUtQUI5EfpWvW7U= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.0 h1:6Al3kEFFP9VJhRz3DID6quisgPnTeZVr4lep9kkxdPA= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.0/go.mod h1:QLvsjh0OIR0TYBeiu2bkWGTJBUNQ64st52iWj/yA93I= 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= @@ -681,8 +668,8 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= -google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= @@ -703,28 +690,28 @@ gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q= gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/api v0.34.1 h1:jC+153630BMdlFukegoEL8E/yT7aLyQkIVuwhmwDgJM= -k8s.io/api v0.34.1/go.mod h1:SB80FxFtXn5/gwzCoN6QCtPD7Vbu5w2n1S0J5gFfTYk= -k8s.io/apiextensions-apiserver v0.34.1 h1:NNPBva8FNAPt1iSVwIE0FsdrVriRXMsaWFMqJbII2CI= -k8s.io/apiextensions-apiserver v0.34.1/go.mod h1:hP9Rld3zF5Ay2Of3BeEpLAToP+l4s5UlxiHfqRaRcMc= -k8s.io/apimachinery v0.34.1 h1:dTlxFls/eikpJxmAC7MVE8oOeP1zryV7iRyIjB0gky4= -k8s.io/apimachinery v0.34.1/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw= -k8s.io/apiserver v0.34.1 h1:U3JBGdgANK3dfFcyknWde1G6X1F4bg7PXuvlqt8lITA= -k8s.io/apiserver v0.34.1/go.mod h1:eOOc9nrVqlBI1AFCvVzsob0OxtPZUCPiUJL45JOTBG0= +k8s.io/api v0.34.3 h1:D12sTP257/jSH2vHV2EDYrb16bS7ULlHpdNdNhEw2S4= +k8s.io/api v0.34.3/go.mod h1:PyVQBF886Q5RSQZOim7DybQjAbVs8g7gwJNhGtY5MBk= +k8s.io/apiextensions-apiserver v0.34.3 h1:p10fGlkDY09eWKOTeUSioxwLukJnm+KuDZdrW71y40g= +k8s.io/apiextensions-apiserver v0.34.3/go.mod h1:aujxvqGFRdb/cmXYfcRTeppN7S2XV/t7WMEc64zB5A0= +k8s.io/apimachinery v0.34.3 h1:/TB+SFEiQvN9HPldtlWOTp0hWbJ+fjU+wkxysf/aQnE= +k8s.io/apimachinery v0.34.3/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw= +k8s.io/apiserver v0.34.3 h1:uGH1qpDvSiYG4HVFqc6A3L4CKiX+aBWDrrsxHYK0Bdo= +k8s.io/apiserver v0.34.3/go.mod h1:QPnnahMO5C2m3lm6fPW3+JmyQbvHZQ8uudAu/493P2w= k8s.io/cli-runtime v0.33.2 h1:koNYQKSDdq5AExa/RDudXMhhtFasEg48KLS2KSAU74Y= k8s.io/cli-runtime v0.33.2/go.mod h1:gnhsAWpovqf1Zj5YRRBBU7PFsRc6NkEkwYNQE+mXL88= -k8s.io/client-go v0.34.1 h1:ZUPJKgXsnKwVwmKKdPfw4tB58+7/Ik3CrjOEhsiZ7mY= -k8s.io/client-go v0.34.1/go.mod h1:kA8v0FP+tk6sZA0yKLRG67LWjqufAoSHA2xVGKw9Of8= -k8s.io/component-base v0.34.1 h1:v7xFgG+ONhytZNFpIz5/kecwD+sUhVE6HU7qQUiRM4A= -k8s.io/component-base v0.34.1/go.mod h1:mknCpLlTSKHzAQJJnnHVKqjxR7gBeHRv0rPXA7gdtQ0= +k8s.io/client-go v0.34.3 h1:wtYtpzy/OPNYf7WyNBTj3iUA0XaBHVqhv4Iv3tbrF5A= +k8s.io/client-go v0.34.3/go.mod h1:OxxeYagaP9Kdf78UrKLa3YZixMCfP6bgPwPwNBQBzpM= +k8s.io/component-base v0.34.3 h1:zsEgw6ELqK0XncCQomgO9DpUIzlrYuZYA0Cgo+JWpVk= +k8s.io/component-base v0.34.3/go.mod h1:5iIlD8wPfWE/xSHTRfbjuvUul2WZbI2nOUK65XL0E/c= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b h1:MloQ9/bdJyIu9lb1PzujOPolHyvO06MXG5TUIj2mNAA= k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b/go.mod h1:UZ2yyWbFTpuhSbFhv24aGNOdoRdJZgsIObGBUaYVsts= k8s.io/kubectl v0.33.2 h1:7XKZ6DYCklu5MZQzJe+CkCjoGZwD1wWl7t/FxzhMz7Y= k8s.io/kubectl v0.33.2/go.mod h1:8rC67FB8tVTYraovAGNi/idWIK90z2CHFNMmGJZJ3KI= -k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y= -k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d h1:wAhiDyZ4Tdtt7e46e9M5ZSAJ/MnPGPs+Ki1gHw4w1R0= +k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= oras.land/oras-go/v2 v2.6.0 h1:X4ELRsiGkrbeox69+9tzTu492FMUu7zJQW6eJU+I2oc= oras.land/oras-go/v2 v2.6.0/go.mod h1:magiQDfG6H1O9APp+rOsvCPcW1GD2MM7vgnKY0Y+u1o= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.33.0 h1:qPrZsv1cwQiFeieFlRqT627fVZ+tyfou/+S5S0H5ua0= diff --git a/staging/operator-registry/hack/tools/check-go-version.sh b/staging/operator-registry/hack/tools/check-go-version.sh index 73787ddf35..de1a66ccbd 100755 --- a/staging/operator-registry/hack/tools/check-go-version.sh +++ b/staging/operator-registry/hack/tools/check-go-version.sh @@ -63,7 +63,6 @@ fi GO_MAJOR=${MAX_VER[0]} GO_MINOR=${MAX_VER[1]} GO_PATCH=${MAX_VER[2]} -OVERRIDE_LABEL="override-go-verdiff" RETCODE=0 @@ -135,19 +134,4 @@ for f in $(find . -name "*.mod"); do fi done -for l in ${LABELS}; do - if [ "$l" == "${OVERRIDE_LABEL}" ]; then - if [ ${RETCODE} -eq 1 ]; then - echo "" - echo "Found ${OVERRIDE_LABEL} label, overriding failed results." - RETCODE=0 - fi - fi -done - -if [ ${RETCODE} -eq 1 ]; then - echo "" - echo "This test result may be overridden by applying the (${OVERRIDE_LABEL}) label to this PR and re-running the CI job." -fi - exit ${RETCODE} diff --git a/staging/operator-registry/pkg/cache/cache_test.go b/staging/operator-registry/pkg/cache/cache_test.go index dacf75ea4f..8c35a58f90 100644 --- a/staging/operator-registry/pkg/cache/cache_test.go +++ b/staging/operator-registry/pkg/cache/cache_test.go @@ -201,8 +201,8 @@ func TestCache_ListBundles(t *testing.T) { require.NotNil(t, bundles) require.Len(t, bundles, 12) for _, b := range bundles { - require.Zero(t, b.CsvJson) - require.Zero(t, b.Object) + require.Empty(t, b.CsvJson) + require.Empty(t, b.Object) } }) } diff --git a/staging/operator-registry/pkg/client/kubeclient.go b/staging/operator-registry/pkg/client/kubeclient.go index 7b63e1c55d..c3f9df5f9e 100644 --- a/staging/operator-registry/pkg/client/kubeclient.go +++ b/staging/operator-registry/pkg/client/kubeclient.go @@ -27,7 +27,7 @@ func NewKubeClient(kubeconfig string, logger *logrus.Logger) (*kubernetes.Client } if err != nil { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized err = fmt.Errorf("Cannot load config for REST client: %v", err) return nil, err } diff --git a/staging/operator-registry/pkg/containertools/dockerfilegenerator.go b/staging/operator-registry/pkg/containertools/dockerfilegenerator.go index dd46ce22f5..79059b9ee7 100644 --- a/staging/operator-registry/pkg/containertools/dockerfilegenerator.go +++ b/staging/operator-registry/pkg/containertools/dockerfilegenerator.go @@ -9,11 +9,9 @@ import ( const ( DefaultBinarySourceImage = "quay.io/operator-framework/opm:latest" - // nolint:stylecheck - DefaultDbLocation = "/database/index.db" - // nolint:stylecheck - DbLocationLabel = "operators.operatorframework.io.index.database.v1" - ConfigsLocationLabel = "operators.operatorframework.io.index.configs.v1" + DefaultDbLocation = "/database/index.db" + DbLocationLabel = "operators.operatorframework.io.index.database.v1" + ConfigsLocationLabel = "operators.operatorframework.io.index.configs.v1" ) // DockerfileGenerator defines functions to generate index dockerfiles diff --git a/staging/operator-registry/pkg/containertools/labelreader.go b/staging/operator-registry/pkg/containertools/labelreader.go index 18ad46d981..6364f7a5b3 100644 --- a/staging/operator-registry/pkg/containertools/labelreader.go +++ b/staging/operator-registry/pkg/containertools/labelreader.go @@ -71,6 +71,6 @@ func (r ImageLabelReader) GetLabelsFromImage(image string) (map[string]string, e return data[0].Labels, nil } - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return nil, fmt.Errorf("Unable to parse label data from container") } diff --git a/staging/operator-registry/pkg/image/buildahregistry/_options.go b/staging/operator-registry/pkg/image/buildahregistry/_options.go index 1061dea08a..f6510564fe 100644 --- a/staging/operator-registry/pkg/image/buildahregistry/_options.go +++ b/staging/operator-registry/pkg/image/buildahregistry/_options.go @@ -4,7 +4,6 @@ package buildahregistry import ( - "io/ioutil" "os" "path" "path/filepath" @@ -95,7 +94,7 @@ func NewRegistry(options ...RegistryOption) (registry *Registry, destroy func() } // TODO: probably don't want the signature policy to be here - ioutil.WriteFile(path.Join(config.CacheDir, "policy.json"), []byte(` + os.WriteFile(path.Join(config.CacheDir, "policy.json"), []byte(` { "default": [ { diff --git a/staging/operator-registry/pkg/lib/bundle/build.go b/staging/operator-registry/pkg/lib/bundle/build.go index 5bfb517fc5..d7902b178c 100644 --- a/staging/operator-registry/pkg/lib/bundle/build.go +++ b/staging/operator-registry/pkg/lib/bundle/build.go @@ -31,7 +31,7 @@ func ExecuteCommand(cmd *exec.Cmd) error { log.Debugf("Running %#v", cmd.Args) if err := cmd.Run(); err != nil { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return fmt.Errorf("Failed to exec %#v: %v", cmd.Args, err) } diff --git a/staging/operator-registry/pkg/lib/bundle/generate.go b/staging/operator-registry/pkg/lib/bundle/generate.go index 72e781e0b1..7895126b6f 100644 --- a/staging/operator-registry/pkg/lib/bundle/generate.go +++ b/staging/operator-registry/pkg/lib/bundle/generate.go @@ -222,7 +222,7 @@ func GetMediaType(directory string) (string, error) { fileWithPath := filepath.Join(directory, item.Name()) fileBlob, err := os.ReadFile(fileWithPath) if err != nil { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return "", fmt.Errorf("Unable to read file %s in bundle", fileWithPath) } @@ -234,7 +234,7 @@ func GetMediaType(directory string) (string, error) { } if len(files) == 0 { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return "", fmt.Errorf("The directory %s contains no yaml files", directory) } @@ -281,13 +281,13 @@ func ValidateAnnotations(existing, expected []byte) error { for label, item := range expectedAnnotations.Annotations { value, hasAnnotation := fileAnnotations.Annotations[label] if !hasAnnotation { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized errs = append(errs, fmt.Errorf("Missing field: %s", label)) continue } if item != value { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized errs = append(errs, fmt.Errorf("Expect field %q to have value %q instead of %q", label, item, value)) } diff --git a/staging/operator-registry/pkg/lib/bundle/generate_test.go b/staging/operator-registry/pkg/lib/bundle/generate_test.go index 45cf621f55..3280d6e0a6 100644 --- a/staging/operator-registry/pkg/lib/bundle/generate_test.go +++ b/staging/operator-registry/pkg/lib/bundle/generate_test.go @@ -273,5 +273,5 @@ func TestGenerateFunc(t *testing.T) { outputAnnotationsFile := filepath.Join(outputPath, "metadata/", "annotations.yaml") annotationsBlob, err := os.ReadFile(outputAnnotationsFile) require.NoError(t, err) - require.EqualValues(t, output, string(annotationsBlob)) + require.Equal(t, output, string(annotationsBlob)) } diff --git a/staging/operator-registry/pkg/lib/bundle/interpreter_test.go b/staging/operator-registry/pkg/lib/bundle/interpreter_test.go index 620ba3ff59..4ae4cbebf5 100644 --- a/staging/operator-registry/pkg/lib/bundle/interpreter_test.go +++ b/staging/operator-registry/pkg/lib/bundle/interpreter_test.go @@ -58,11 +58,11 @@ func TestBundleDirectoryInterpreter(t *testing.T) { } require.NoError(t, err) - assert.EqualValues(t, tt.bundleChannels, bundle.GetBundleChannels()) + assert.Equal(t, tt.bundleChannels, bundle.GetBundleChannels()) - assert.EqualValues(t, tt.defaultChannel, bundle.GetDefaultChannel()) + assert.Equal(t, tt.defaultChannel, bundle.GetDefaultChannel()) - assert.EqualValues(t, tt.PackageName, bundle.GetPackageName()) + assert.Equal(t, tt.PackageName, bundle.GetPackageName()) }) } } diff --git a/staging/operator-registry/pkg/lib/bundle/validate.go b/staging/operator-registry/pkg/lib/bundle/validate.go index 2ed9266039..4ec65d2382 100644 --- a/staging/operator-registry/pkg/lib/bundle/validate.go +++ b/staging/operator-registry/pkg/lib/bundle/validate.go @@ -101,11 +101,11 @@ func (i imageValidator) ValidateBundleFormat(directory string) error { } if !manifestsFound { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized validationErrors = append(validationErrors, fmt.Errorf("Unable to locate manifests directory")) } if !metadataFound { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized validationErrors = append(validationErrors, fmt.Errorf("Unable to locate metadata directory")) } @@ -147,7 +147,7 @@ func (i imageValidator) ValidateBundleFormat(directory string) error { } if !annotationsFound { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized validationErrors = append(validationErrors, fmt.Errorf("Could not find annotations file")) } else { i.logger.Debug("Found annotations file") @@ -189,7 +189,7 @@ func validateAnnotations(mediaType string, fileAnnotations *AnnotationMetadata) for label, item := range annotations { val, ok := fileAnnotations.Annotations[label] if !ok && label != ChannelDefaultLabel { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized aErr := fmt.Errorf("Missing annotation %q", label) validationErrors = append(validationErrors, aErr) } @@ -197,31 +197,31 @@ func validateAnnotations(mediaType string, fileAnnotations *AnnotationMetadata) switch label { case MediatypeLabel: if item != val { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized aErr := fmt.Errorf("Expecting annotation %q to have value %q instead of %q", label, item, val) validationErrors = append(validationErrors, aErr) } case ManifestsLabel: if item != ManifestsDir { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized aErr := fmt.Errorf("Expecting annotation %q to have value %q instead of %q", label, ManifestsDir, val) validationErrors = append(validationErrors, aErr) } case MetadataDir: if item != MetadataLabel { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized aErr := fmt.Errorf("Expecting annotation %q to have value %q instead of %q", label, MetadataDir, val) validationErrors = append(validationErrors, aErr) } case ChannelsLabel: if val == "" { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized aErr := fmt.Errorf("Expecting annotation %q to have non-empty value", label) validationErrors = append(validationErrors, aErr) } case ChannelDefaultLabel: if ok && val == "" { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized aErr := fmt.Errorf("Expecting annotation %q to have non-empty value", label) validationErrors = append(validationErrors, aErr) } @@ -301,7 +301,7 @@ func (i imageValidator) ValidateBundleContent(manifestDir string) error { fileWithPath := filepath.Join(manifestDir, item.Name()) data, err := os.ReadFile(fileWithPath) if err != nil { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized validationErrors = append(validationErrors, fmt.Errorf("Unable to read file %s in supported types", fileWithPath)) continue } @@ -373,7 +373,7 @@ func (i imageValidator) ValidateBundleContent(manifestDir string) error { } } default: - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized validationErrors = append(validationErrors, fmt.Errorf("Unsupported api version of CRD: %s", gv)) } } else { diff --git a/staging/operator-registry/pkg/lib/indexer/indexer.go b/staging/operator-registry/pkg/lib/indexer/indexer.go index e91aba091b..dd24289f23 100644 --- a/staging/operator-registry/pkg/lib/indexer/indexer.go +++ b/staging/operator-registry/pkg/lib/indexer/indexer.go @@ -37,7 +37,7 @@ const ( concurrencyLimitForExport = 10 ) -// nolint:stylecheck +//nolint:staticcheck // ST1005: error message intentionally ends with punctuation (URL) var ErrFileBasedCatalogPrune = errors.New("`opm index prune` only supports sqlite-based catalogs. See https://github.com/redhat-openshift-ecosystem/community-operators-prod/issues/793 for instructions on pruning a plaintext files backed catalog.") // ImageIndexer is a struct implementation of the Indexer interface diff --git a/staging/operator-registry/pkg/lib/registry/registry_test.go b/staging/operator-registry/pkg/lib/registry/registry_test.go index aa40125275..a107793255 100644 --- a/staging/operator-registry/pkg/lib/registry/registry_test.go +++ b/staging/operator-registry/pkg/lib/registry/registry_test.go @@ -223,8 +223,8 @@ func TestCheckForBundlePaths(t *testing.T) { } require.NoError(t, err) - require.EqualValues(t, tt.expected.found, found) - require.EqualValues(t, tt.expected.missing, missing) + require.Equal(t, tt.expected.found, found) + require.Equal(t, tt.expected.missing, missing) }) } } diff --git a/staging/operator-registry/pkg/lib/semver/semver.go b/staging/operator-registry/pkg/lib/semver/semver.go index 60721cdaf6..037dab7bb4 100644 --- a/staging/operator-registry/pkg/lib/semver/semver.go +++ b/staging/operator-registry/pkg/lib/semver/semver.go @@ -8,7 +8,6 @@ import ( // BuildIdCompare compares two versions and returns negative one if the first arg is less than the second arg, positive one if it is larger, and zero if they are equal. // This comparison follows typical semver precedence rules, with one addition: whenever two versions are equal with the exception of their build-ids, the build-ids are compared using prerelease precedence rules. Further, versions with no build-id are always less than versions with build-ids; e.g. 1.0.0 < 1.0.0+1. -// nolint:stylecheck func BuildIdCompare(b semver.Version, v semver.Version) (int, error) { if c := b.Compare(v); c != 0 { return c, nil diff --git a/staging/operator-registry/pkg/lib/validation/bundle.go b/staging/operator-registry/pkg/lib/validation/bundle.go index a88b7b6302..ce990cd56c 100644 --- a/staging/operator-registry/pkg/lib/validation/bundle.go +++ b/staging/operator-registry/pkg/lib/validation/bundle.go @@ -39,6 +39,18 @@ func validateBundle(bundle *registry.Bundle) errors.ManifestResult { result.Add(errors.ErrInvalidParse("error getting bundle CSV version", err)) return result } + release, err := csv.GetRelease() + if err != nil { + result.Add(errors.ErrInvalidParse("error getting bundle CSV release version", err)) + return result + } + substitutesFor := csv.GetSubstitutesFor() + if release != "" && substitutesFor != "" { + result.Add(errors.ErrInvalidBundle( + fmt.Sprintf("bundle %q cannot have both a release version (%q) and olm.substitutesFor annotation (%q)", bundle.Name, release, substitutesFor), + registry.DefinitionKey{}, + )) + } return result } diff --git a/staging/operator-registry/pkg/registry/bundle.go b/staging/operator-registry/pkg/registry/bundle.go index 8b3be74b0e..792f9f0ddf 100644 --- a/staging/operator-registry/pkg/registry/bundle.go +++ b/staging/operator-registry/pkg/registry/bundle.go @@ -42,6 +42,7 @@ type Bundle struct { Channels []string BundleImage string version string + release string csv *ClusterServiceVersion v1beta1crds []*apiextensionsv1beta1.CustomResourceDefinition v1crds []*apiextensionsv1.CustomResourceDefinition @@ -130,6 +131,23 @@ func (b *Bundle) Version() (string, error) { return b.version, err } +func (b *Bundle) Release() (string, error) { + if b.release != "" { + return b.release, nil + } + + var err error + if err = b.cache(); err != nil { + return "", err + } + + if b.csv != nil { + b.release, err = b.csv.GetRelease() + } + + return b.release, err +} + func (b *Bundle) SkipRange() (string, error) { if err := b.cache(); err != nil { return "", err diff --git a/staging/operator-registry/pkg/registry/bundlegraphloader.go b/staging/operator-registry/pkg/registry/bundlegraphloader.go index 2854003a26..8003184ca6 100644 --- a/staging/operator-registry/pkg/registry/bundlegraphloader.go +++ b/staging/operator-registry/pkg/registry/bundlegraphloader.go @@ -16,7 +16,7 @@ type BundleGraphLoader struct { func (g *BundleGraphLoader) AddBundleToGraph(bundle *Bundle, graph *Package, annotations *AnnotationsFile, skippatch bool) (*Package, error) { bundleVersion, err := bundle.Version() if err != nil { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return nil, fmt.Errorf("Unable to extract bundle version from bundle %s, can't insert in semver mode", bundle.BundleImage) } @@ -44,7 +44,7 @@ func (g *BundleGraphLoader) AddBundleToGraph(bundle *Bundle, graph *Package, ann if graph.DefaultChannel == "" { // Infer default channel from channel list if annotations.SelectDefaultChannel() == "" { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return nil, fmt.Errorf("Default channel is missing and can't be inferred") } graph.DefaultChannel = annotations.SelectDefaultChannel() @@ -85,7 +85,7 @@ func (g *BundleGraphLoader) AddBundleToGraph(bundle *Bundle, graph *Package, ann for node := range channelGraph.Nodes { nodeVersion, err := semver.Make(node.Version) if err != nil { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return nil, fmt.Errorf("Unable to parse existing bundle version stored in index %s %s %s", node.CsvName, node.Version, node.BundlePath) } diff --git a/staging/operator-registry/pkg/registry/bundlegraphloader_test.go b/staging/operator-registry/pkg/registry/bundlegraphloader_test.go index 783b9b6da3..ec3ebee960 100644 --- a/staging/operator-registry/pkg/registry/bundlegraphloader_test.go +++ b/staging/operator-registry/pkg/registry/bundlegraphloader_test.go @@ -308,8 +308,8 @@ func TestBundleGraphLoader(t *testing.T) { return } require.NoError(t, err) - assert.EqualValues(t, tt.expectedGraph.Name, newGraph.Name) - assert.EqualValues(t, tt.expectedGraph, newGraph) + assert.Equal(t, tt.expectedGraph.Name, newGraph.Name) + assert.Equal(t, tt.expectedGraph, newGraph) }) } } diff --git a/staging/operator-registry/pkg/registry/channelupdateoptions.go b/staging/operator-registry/pkg/registry/channelupdateoptions.go index d45bd414e1..48ba90f71b 100644 --- a/staging/operator-registry/pkg/registry/channelupdateoptions.go +++ b/staging/operator-registry/pkg/registry/channelupdateoptions.go @@ -22,7 +22,7 @@ func GetModeFromString(mode string) (Mode, error) { case "semver-skippatch": return SkipPatchMode, nil default: - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return -1, fmt.Errorf("Invalid channel update mode %s specified", mode) } } diff --git a/staging/operator-registry/pkg/registry/csv.go b/staging/operator-registry/pkg/registry/csv.go index 4a3d8ceaf7..fec3d2907b 100644 --- a/staging/operator-registry/pkg/registry/csv.go +++ b/staging/operator-registry/pkg/registry/csv.go @@ -58,6 +58,9 @@ const ( // expected to be semver and parseable by blang/semver/v4 version = "version" + // The yaml attribute that specifies the release version of the ClusterServiceVersion + release = "release" + // The yaml attribute that specifies the related images of the ClusterServiceVersion relatedImages = "relatedImages" @@ -181,6 +184,28 @@ func (csv *ClusterServiceVersion) GetVersion() (string, error) { return v, nil } +// GetRelease returns the release of the CSV +// +// If not defined, the function returns an empty string. +func (csv *ClusterServiceVersion) GetRelease() (string, error) { + var objmap map[string]*json.RawMessage + if err := json.Unmarshal(csv.Spec, &objmap); err != nil { + return "", err + } + + rawValue, ok := objmap[release] + if !ok || rawValue == nil { + return "", nil + } + + var r string + if err := json.Unmarshal(*rawValue, &r); err != nil { + return "", err + } + + return r, nil +} + // GetSkipRange returns the skiprange of the CSV // // If not defined, the function returns an empty string. @@ -261,7 +286,6 @@ func (csv *ClusterServiceVersion) GetCustomResourceDefintions() ([]*DefinitionKe // // If owned or required is not defined in the spec then an empty list is // returned respectively. -// nolint:stylecheck func (csv *ClusterServiceVersion) GetApiServiceDefinitions() ([]*DefinitionKey, []*DefinitionKey, error) { var objmap map[string]*json.RawMessage diff --git a/staging/operator-registry/pkg/registry/csv_test.go b/staging/operator-registry/pkg/registry/csv_test.go index 8f23f0478a..59a64cc8a7 100644 --- a/staging/operator-registry/pkg/registry/csv_test.go +++ b/staging/operator-registry/pkg/registry/csv_test.go @@ -817,21 +817,21 @@ func TestLoadingCsvFromBundleDirectory(t *testing.T) { } require.NoError(t, err) - assert.EqualValues(t, tt.name, csv.GetName()) + assert.Equal(t, tt.name, csv.GetName()) csvVersion, err := csv.GetVersion() require.NoError(t, err) - assert.EqualValues(t, tt.version, csvVersion) + assert.Equal(t, tt.version, csvVersion) - assert.EqualValues(t, tt.skipRange, csv.GetSkipRange()) + assert.Equal(t, tt.skipRange, csv.GetSkipRange()) csvReplace, err := csv.GetReplaces() require.NoError(t, err) - assert.EqualValues(t, tt.replace, csvReplace) + assert.Equal(t, tt.replace, csvReplace) csvSkips, err := csv.GetSkips() require.NoError(t, err) - assert.EqualValues(t, tt.skips, csvSkips) + assert.Equal(t, tt.skips, csvSkips) }) } } diff --git a/staging/operator-registry/pkg/registry/directoryGraphLoader_test.go b/staging/operator-registry/pkg/registry/directoryGraphLoader_test.go index 3658b8041b..7a8475b866 100644 --- a/staging/operator-registry/pkg/registry/directoryGraphLoader_test.go +++ b/staging/operator-registry/pkg/registry/directoryGraphLoader_test.go @@ -96,9 +96,9 @@ func TestPackageGraphLoader(t *testing.T) { return } require.NoError(t, err) - assert.EqualValues(t, tt.packageName, p.Name) - assert.EqualValues(t, tt.defaultChannel, p.DefaultChannel) - assert.EqualValues(t, tt.channel, p.Channels) + assert.Equal(t, tt.packageName, p.Name) + assert.Equal(t, tt.defaultChannel, p.DefaultChannel) + assert.Equal(t, tt.channel, p.Channels) }) } } diff --git a/staging/operator-registry/pkg/registry/empty.go b/staging/operator-registry/pkg/registry/empty.go index dc34f06dc7..7b0d780468 100644 --- a/staging/operator-registry/pkg/registry/empty.go +++ b/staging/operator-registry/pkg/registry/empty.go @@ -68,7 +68,6 @@ func (EmptyQuery) GetImagesForBundle(ctx context.Context, bundleName string) ([] return nil, errors.New("empty querier: cannot get image list") } -// nolint:stylecheck func (EmptyQuery) GetApisForEntry(ctx context.Context, entryId int64) ([]*api.GroupVersionKind, []*api.GroupVersionKind, error) { return nil, nil, errors.New("empty querier: cannot apis") } diff --git a/staging/operator-registry/pkg/registry/parse.go b/staging/operator-registry/pkg/registry/parse.go index 24445ffe08..2f5a913553 100644 --- a/staging/operator-registry/pkg/registry/parse.go +++ b/staging/operator-registry/pkg/registry/parse.go @@ -157,7 +157,7 @@ func (b *bundleParser) addMetadata(metadata fs.FS, bundle *Bundle) error { bundle.Package = af.Annotations.PackageName bundle.Channels = af.GetChannels() } else { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return fmt.Errorf("Could not find annotations file") } @@ -197,22 +197,35 @@ func (b *bundleParser) derivedProperties(bundle *Bundle) ([]Property, error) { } } + // nolint:nestif + // existing code triggering nested complexity, but at least will not make worse with release processing if bundle.Annotations != nil && bundle.Annotations.PackageName != "" { pkg := bundle.Annotations.PackageName version, err := bundle.Version() if err != nil { return nil, err } + release, err := bundle.Release() + if err != nil { + return nil, err + } + if release == "" && csv.GetSubstitutesFor() != "" { + version, release, err = extractReleaseVersionFromBuildMetadata(version) + if err != nil { + return nil, fmt.Errorf("bundle %q error: %v", bundle.Name, err) + } + } value, err := json.Marshal(PackageProperty{ PackageName: pkg, Version: version, + Release: release, }) if err != nil { return nil, fmt.Errorf("failed to marshal package property: %s", err) } - // Annotations file takes precedent over CSV annotations + // Annotations file takes precedence over CSV annotations derived = append([]Property{{Type: PackageType, Value: value}}, derived...) } @@ -253,3 +266,21 @@ func propertySet(properties []Property) []Property { return set } + +func extractReleaseVersionFromBuildMetadata(substitutesFor string) (string, string, error) { + var version, release string + // if the bundle expresses no release version, but + // includes the substitutesFor annotation, then we + // interpret any build metadata in the version as + // the release version. + // failure to parse build metadata under these conditions is fatal, + // though validation is later + parts := strings.SplitN(substitutesFor, "+", 2) + if len(parts) == 2 { + version = parts[0] + release = parts[1] + } else { + return "", "", fmt.Errorf("no release version expressed as build metadata: %q", substitutesFor) + } + return version, release, nil +} diff --git a/staging/operator-registry/pkg/registry/populator.go b/staging/operator-registry/pkg/registry/populator.go index ea86a163e5..f2ab730f82 100644 --- a/staging/operator-registry/pkg/registry/populator.go +++ b/staging/operator-registry/pkg/registry/populator.go @@ -181,7 +181,7 @@ func (i *DirectoryPopulator) loadManifests(imagesToAdd []*ImageInput, mode Mode) } } default: - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return fmt.Errorf("Unsupported update mode") } diff --git a/staging/operator-registry/pkg/registry/populator_test.go b/staging/operator-registry/pkg/registry/populator_test.go index 561e718fb9..d747c18af9 100644 --- a/staging/operator-registry/pkg/registry/populator_test.go +++ b/staging/operator-registry/pkg/registry/populator_test.go @@ -112,7 +112,7 @@ func TestQuerierForImage(t *testing.T) { etcdPackage, err := store.GetPackage(context.TODO(), "etcd") require.NoError(t, err) - require.EqualValues(t, ®istry.PackageManifest{ + require.Equal(t, ®istry.PackageManifest{ PackageName: "etcd", DefaultChannelName: "alpha", Channels: []registry.PackageChannel{ @@ -675,7 +675,7 @@ func EqualBundles(t *testing.T, expected, actual api.Bundle) { require.ElementsMatch(t, expected.Properties, actual.Properties, "properties don't match %#v\n%#v", expected.Properties, actual.Properties) expected.RequiredApis, expected.ProvidedApis, actual.RequiredApis, actual.ProvidedApis = nil, nil, nil, nil expected.Dependencies, expected.Properties, actual.Dependencies, actual.Properties = nil, nil, nil, nil - require.EqualValues(t, expected, actual) + require.Equal(t, expected, actual) } func CheckInvariants(t *testing.T, db *sql.DB) { @@ -2920,7 +2920,7 @@ func TestSubstitutesFor(t *testing.T) { if bundleThatReplaces != nil { require.Equal(t, tt.expected.whatReplaces[bundle.CsvName][bundle.ChannelName], bundleThatReplaces.CsvName) } else { - require.Equal(t, "", tt.expected.whatReplaces[bundle.CsvName][bundle.ChannelName]) + require.Empty(t, tt.expected.whatReplaces[bundle.CsvName][bundle.ChannelName]) } substitution, err := getBundleSubstitution(context.Background(), db, bundle.CsvName) require.NoError(t, err) diff --git a/staging/operator-registry/pkg/registry/registry_to_model.go b/staging/operator-registry/pkg/registry/registry_to_model.go index 947814751d..d0491f6df7 100644 --- a/staging/operator-registry/pkg/registry/registry_to_model.go +++ b/staging/operator-registry/pkg/registry/registry_to_model.go @@ -29,7 +29,7 @@ func ObjectsAndPropertiesFromBundle(b *Bundle) ([]string, []property.Property, e if err := json.Unmarshal(p.Value, &v); err != nil { return nil, nil, property.ParseError{Idx: i, Typ: p.Type, Err: err} } - p := property.MustBuildPackage(v.PackageName, v.Version) + p := property.MustBuildPackageRelease(v.PackageName, v.Version, v.Release) packageProvidedProperty = &p default: otherProps = append(otherProps, property.Property{ @@ -68,6 +68,11 @@ func ObjectsAndPropertiesFromBundle(b *Bundle) ([]string, []property.Property, e return nil, nil, fmt.Errorf("get version: %v", err) } + release, err := b.Release() + if err != nil { + return nil, nil, fmt.Errorf("get release: %v", err) + } + providedApis, err := b.ProvidedAPIs() if err != nil { return nil, nil, fmt.Errorf("get provided apis: %v", err) @@ -105,7 +110,7 @@ func ObjectsAndPropertiesFromBundle(b *Bundle) ([]string, []property.Property, e } if packageProvidedProperty == nil { - p := property.MustBuildPackage(b.Package, version) + p := property.MustBuildPackageRelease(b.Package, version, release) packageProvidedProperty = &p } props = append(props, *packageProvidedProperty) diff --git a/staging/operator-registry/pkg/registry/types.go b/staging/operator-registry/pkg/registry/types.go index 4105aaa3d6..66dc242e6a 100644 --- a/staging/operator-registry/pkg/registry/types.go +++ b/staging/operator-registry/pkg/registry/types.go @@ -256,6 +256,9 @@ type PackageProperty struct { // The version of package in semver format Version string `json:"version" yaml:"version"` + + // The release version of the package in semver pre-release format + Release string `json:"release,omitzero" yaml:"release,omitzero"` } type DeprecatedProperty struct { @@ -286,7 +289,7 @@ func (gd *GVKDependency) Validate() []error { func (ld *LabelDependency) Validate() []error { errs := []error{} if *ld == (LabelDependency{}) { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized errs = append(errs, fmt.Errorf("Label information is missing")) } return errs @@ -296,16 +299,14 @@ func (ld *LabelDependency) Validate() []error { func (pd *PackageDependency) Validate() []error { errs := []error{} if pd.PackageName == "" { - // nolint:stylecheck errs = append(errs, fmt.Errorf("Package name is empty")) } if pd.Version == "" { - // nolint:stylecheck errs = append(errs, fmt.Errorf("Package version is empty")) } else { _, err := semver.ParseRange(pd.Version) if err != nil { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized errs = append(errs, fmt.Errorf("Invalid semver format version")) } } @@ -316,18 +317,18 @@ func (pd *PackageDependency) Validate() []error { func (cc *CelConstraint) Validate() []error { errs := []error{} if cc.Cel == nil { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized errs = append(errs, fmt.Errorf("The CEL field is missing")) } else { if cc.Cel.Rule == "" { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized errs = append(errs, fmt.Errorf("The CEL expression is missing")) return errs } validator := constraints.NewCelEnvironment() _, err := validator.Validate(cc.Cel.Rule) if err != nil { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized errs = append(errs, fmt.Errorf("Invalid CEL expression: %s", err.Error())) } } diff --git a/staging/operator-registry/pkg/server/server.go b/staging/operator-registry/pkg/server/server.go index 64b87ce70e..56b09e2258 100644 --- a/staging/operator-registry/pkg/server/server.go +++ b/staging/operator-registry/pkg/server/server.go @@ -1,7 +1,7 @@ package server import ( - "golang.org/x/net/context" + "context" "github.com/operator-framework/operator-registry/pkg/api" "github.com/operator-framework/operator-registry/pkg/registry" diff --git a/staging/operator-registry/pkg/server/server_test.go b/staging/operator-registry/pkg/server/server_test.go index 73f355b1d1..e74b941f97 100644 --- a/staging/operator-registry/pkg/server/server_test.go +++ b/staging/operator-registry/pkg/server/server_test.go @@ -1,6 +1,7 @@ package server import ( + "context" "errors" "fmt" "io" @@ -17,7 +18,6 @@ import ( "github.com/google/go-cmp/cmp/cmpopts" "github.com/sirupsen/logrus" "github.com/stretchr/testify/require" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/connectivity" diff --git a/staging/operator-registry/pkg/sqlite/configmap_test.go b/staging/operator-registry/pkg/sqlite/configmap_test.go index b6c3485382..75fee43b8e 100644 --- a/staging/operator-registry/pkg/sqlite/configmap_test.go +++ b/staging/operator-registry/pkg/sqlite/configmap_test.go @@ -119,7 +119,7 @@ func TestQuerierForConfigmap(t *testing.T) { etcdPackage, err := store.GetPackage(context.TODO(), "etcd") require.NoError(t, err) - require.EqualValues(t, ®istry.PackageManifest{ + require.Equal(t, ®istry.PackageManifest{ PackageName: "etcd", DefaultChannelName: "alpha", Channels: []registry.PackageChannel{ diff --git a/staging/operator-registry/pkg/sqlite/db_options.go b/staging/operator-registry/pkg/sqlite/db_options.go index 5d43615f1d..e09bfbc036 100644 --- a/staging/operator-registry/pkg/sqlite/db_options.go +++ b/staging/operator-registry/pkg/sqlite/db_options.go @@ -4,14 +4,12 @@ import ( "database/sql" ) -// nolint:stylecheck type DbOptions struct { // MigratorBuilder is a function that returns a migrator instance MigratorBuilder func(*sql.DB) (Migrator, error) EnableAlpha bool } -// nolint:stylecheck type DbOption func(*DbOptions) func defaultDBOptions() *DbOptions { diff --git a/staging/operator-registry/pkg/sqlite/directory_test.go b/staging/operator-registry/pkg/sqlite/directory_test.go index e2320fdc73..767d743343 100644 --- a/staging/operator-registry/pkg/sqlite/directory_test.go +++ b/staging/operator-registry/pkg/sqlite/directory_test.go @@ -93,7 +93,7 @@ func TestQuerierForDirectory(t *testing.T) { etcdPackage, err := store.GetPackage(context.TODO(), "etcd") require.NoError(t, err) - require.EqualValues(t, ®istry.PackageManifest{ + require.Equal(t, ®istry.PackageManifest{ PackageName: "etcd", DefaultChannelName: "alpha", Channels: []registry.PackageChannel{ @@ -277,5 +277,5 @@ func EqualBundles(t *testing.T, expected, actual api.Bundle) { require.ElementsMatch(t, expected.Properties, actual.Properties) expected.RequiredApis, expected.ProvidedApis, actual.RequiredApis, actual.ProvidedApis = nil, nil, nil, nil expected.Dependencies, expected.Properties, actual.Dependencies, actual.Properties = nil, nil, nil, nil - require.EqualValues(t, expected, actual) + require.Equal(t, expected, actual) } diff --git a/staging/operator-registry/pkg/sqlite/graphloader_test.go b/staging/operator-registry/pkg/sqlite/graphloader_test.go index 0292a44c87..b6f4cdac78 100644 --- a/staging/operator-registry/pkg/sqlite/graphloader_test.go +++ b/staging/operator-registry/pkg/sqlite/graphloader_test.go @@ -80,7 +80,7 @@ func TestLoadPackageGraph_Etcd(t *testing.T) { for channelName, channel := range result.Channels { expectedChannel := expectedGraph.Channels[channelName] require.Equal(t, expectedChannel.Head, channel.Head) - require.EqualValues(t, expectedChannel.Nodes, channel.Nodes) + require.Equal(t, expectedChannel.Nodes, channel.Nodes) } } diff --git a/staging/operator-registry/pkg/sqlite/load.go b/staging/operator-registry/pkg/sqlite/load.go index 9592b5f54b..190144eaf2 100644 --- a/staging/operator-registry/pkg/sqlite/load.go +++ b/staging/operator-registry/pkg/sqlite/load.go @@ -123,7 +123,7 @@ func (s *sqlLoader) addOperatorBundle(tx *sql.Tx, bundle *registry.Bundle) error } if substitutesFor != "" && !s.enableAlpha { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message intentionally ends with punctuation return fmt.Errorf("SubstitutesFor is an alpha-only feature. You must enable alpha features with the flag --enable-alpha in order to use this feature.") } @@ -508,7 +508,7 @@ func (s *sqlLoader) AddPackageChannelsFromGraph(graph *registry.Package) error { // If the number of nodes is 5 and the startDepth is 3, the expected depth is 7 (3, 4, 5, 6, 7) expectedDepth := len(channel.Nodes) + startDepth - 1 if expectedDepth != depth { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized err := fmt.Errorf("Invalid graph: some (non-bottom) nodes defined in the graph were not mentioned as replacements of any node (%d != %d)", expectedDepth, depth) errs = append(errs, err) } @@ -720,7 +720,7 @@ func (s *sqlLoader) addPackageChannels(tx *sql.Tx, manifest registry.PackageMani // If we find 'replaces' in the circuit list then we've seen it already, break out if _, ok := replaceCycle[replaces]; ok { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized errs = append(errs, fmt.Errorf("Cycle detected, %s replaces %s", channelEntryCSVName, replaces)) break } @@ -736,7 +736,7 @@ func (s *sqlLoader) addPackageChannels(tx *sql.Tx, manifest registry.PackageMani break } if _, _, _, err := s.getBundleSkipsReplacesVersion(tx, replaces); err != nil { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized errs = append(errs, fmt.Errorf("Invalid bundle %s, replaces nonexistent bundle %s", c.CurrentCSVName, replaces)) break } diff --git a/staging/operator-registry/pkg/sqlite/load_test.go b/staging/operator-registry/pkg/sqlite/load_test.go index 27c17c53f6..1c31090c2c 100644 --- a/staging/operator-registry/pkg/sqlite/load_test.go +++ b/staging/operator-registry/pkg/sqlite/load_test.go @@ -280,7 +280,7 @@ func TestClearNonHeadBundles(t *testing.T) { func newUnstructuredCSV(t *testing.T, name, replaces string) *unstructured.Unstructured { csv := ®istry.ClusterServiceVersion{} - csv.TypeMeta.Kind = "ClusterServiceVersion" + csv.Kind = "ClusterServiceVersion" csv.SetName(name) csv.Spec = json.RawMessage(fmt.Sprintf(`{"replaces": "%s"}`, replaces)) @@ -291,7 +291,7 @@ func newUnstructuredCSV(t *testing.T, name, replaces string) *unstructured.Unstr func newUnstructuredCSVWithSkips(t *testing.T, name, replaces string, skips ...string) *unstructured.Unstructured { csv := ®istry.ClusterServiceVersion{} - csv.TypeMeta.Kind = "ClusterServiceVersion" + csv.Kind = "ClusterServiceVersion" csv.SetName(name) allSkips, err := json.Marshal(skips) require.NoError(t, err) @@ -305,7 +305,7 @@ func newUnstructuredCSVWithSkips(t *testing.T, name, replaces string, skips ...s func newUnstructuredCSVWithVersion(t *testing.T, name, version string) *unstructured.Unstructured { csv := ®istry.ClusterServiceVersion{} - csv.TypeMeta.Kind = "ClusterServiceVersion" + csv.Kind = "ClusterServiceVersion" csv.SetName(name) versionJSON := fmt.Sprintf(`{"version": "%s"}`, version) csv.Spec = json.RawMessage(versionJSON) @@ -887,7 +887,7 @@ func TestGetTailFromBundle(t *testing.T) { tail, err := getTailFromBundle(tx, tt.args.bundle) require.Equal(t, tt.expected.err, err) - require.EqualValues(t, tt.expected.tail, tail) + require.Equal(t, tt.expected.tail, tail) }) } } diff --git a/staging/operator-registry/pkg/sqlite/migrations/002_bundle_path_test.go b/staging/operator-registry/pkg/sqlite/migrations/002_bundle_path_test.go index cf081a86a3..8b13f7f180 100644 --- a/staging/operator-registry/pkg/sqlite/migrations/002_bundle_path_test.go +++ b/staging/operator-registry/pkg/sqlite/migrations/002_bundle_path_test.go @@ -43,5 +43,5 @@ func TestBundlePathDown(t *testing.T) { require.NoError(t, err) // Migrating down entails sensitive operations. Ensure data is preserved across down migration - require.Equal(t, len(imagesBeforeMigration), len(imagesAfterMigration)) + require.Len(t, imagesAfterMigration, len(imagesBeforeMigration)) } diff --git a/staging/operator-registry/pkg/sqlite/migrations/003_required_apis.go b/staging/operator-registry/pkg/sqlite/migrations/003_required_apis.go index f25d285ab7..114e755a37 100644 --- a/staging/operator-registry/pkg/sqlite/migrations/003_required_apis.go +++ b/staging/operator-registry/pkg/sqlite/migrations/003_required_apis.go @@ -9,7 +9,6 @@ import ( "github.com/sirupsen/logrus" ) -// nolint:stylecheck const RequiredApiMigrationKey = 3 // Register this migration diff --git a/staging/operator-registry/pkg/sqlite/migrations/004_cascade_delete_test.go b/staging/operator-registry/pkg/sqlite/migrations/004_cascade_delete_test.go index bc2bb7398b..5659f671ee 100644 --- a/staging/operator-registry/pkg/sqlite/migrations/004_cascade_delete_test.go +++ b/staging/operator-registry/pkg/sqlite/migrations/004_cascade_delete_test.go @@ -64,7 +64,7 @@ func TestAferCascadeDeleteDown(t *testing.T) { func removeWhiteSpaces(s string) string { unwanted := []string{" ", "\n", "\t"} for _, char := range unwanted { - s = strings.Replace(s, char, "", -1) + s = strings.ReplaceAll(s, char, "") } return s } diff --git a/staging/operator-registry/pkg/sqlite/migrations/006_associate_apis_with_bundle_test.go b/staging/operator-registry/pkg/sqlite/migrations/006_associate_apis_with_bundle_test.go index bd815ad1a6..de2d37069f 100644 --- a/staging/operator-registry/pkg/sqlite/migrations/006_associate_apis_with_bundle_test.go +++ b/staging/operator-registry/pkg/sqlite/migrations/006_associate_apis_with_bundle_test.go @@ -66,7 +66,7 @@ func TestAssociateApisWithBundleUp(t *testing.T) { require.Len(t, entries, 1) require.Equal(t, "etcdoperator.v0.6.1", entries[0].BundleName) - require.EqualValues(t, oldEntries, entries) + require.Equal(t, oldEntries, entries) } func TestAssociateApisWithBundleDown(t *testing.T) { @@ -115,7 +115,7 @@ func TestAssociateApisWithBundleDown(t *testing.T) { require.NoError(t, err) // Migrating down entails sensitive operations. Ensure data is preserved across down migration - require.EqualValues(t, entriesBeforeMigration, entriesAfterMigration) + require.Equal(t, entriesBeforeMigration, entriesAfterMigration) } func oldGetChannelEntriesThatProvide(db *sql.DB, group, version, kind string) ([]*registry.ChannelEntry, error) { diff --git a/staging/operator-registry/pkg/sqlite/migrations/009_properties_test.go b/staging/operator-registry/pkg/sqlite/migrations/009_properties_test.go index b47cad5a04..7c17866a61 100644 --- a/staging/operator-registry/pkg/sqlite/migrations/009_properties_test.go +++ b/staging/operator-registry/pkg/sqlite/migrations/009_properties_test.go @@ -71,7 +71,7 @@ func TestPropertiesUp(t *testing.T) { value: `{"group":"test.coreos.com","kind":"testapi","version":"v1"}`, }, } - require.EqualValues(t, expectedProperties, properties) + require.Equal(t, expectedProperties, properties) }) t.Run("verify dependencies", func(t *testing.T) { @@ -100,7 +100,7 @@ func TestPropertiesUp(t *testing.T) { value: `{"packageName":"etcd","version":">0.6.0"}`, }, } - require.EqualValues(t, expectedDeps, deps) + require.Equal(t, expectedDeps, deps) }) } diff --git a/staging/operator-registry/pkg/sqlite/migrations/011_substitutes_for_test.go b/staging/operator-registry/pkg/sqlite/migrations/011_substitutes_for_test.go index 555894a45c..84e125ba9e 100644 --- a/staging/operator-registry/pkg/sqlite/migrations/011_substitutes_for_test.go +++ b/staging/operator-registry/pkg/sqlite/migrations/011_substitutes_for_test.go @@ -40,7 +40,7 @@ func TestSubstitutesForUp(t *testing.T) { if rows.Next() { require.NoError(t, rows.Scan(&substitutesFor)) } - require.Equal(t, "", substitutesFor.String) + require.Empty(t, substitutesFor.String) } func TestSubstitutesForDown(t *testing.T) { diff --git a/staging/operator-registry/pkg/sqlite/migrations/migrations.go b/staging/operator-registry/pkg/sqlite/migrations/migrations.go index 475bb7cd69..b9bb60fbaf 100644 --- a/staging/operator-registry/pkg/sqlite/migrations/migrations.go +++ b/staging/operator-registry/pkg/sqlite/migrations/migrations.go @@ -8,7 +8,6 @@ import ( ) type Migration struct { - // nolint:stylecheck Id int Up func(context.Context, *sql.Tx) error Down func(context.Context, *sql.Tx) error diff --git a/staging/operator-registry/pkg/sqlite/query.go b/staging/operator-registry/pkg/sqlite/query.go index 7a42981f45..47c4fe7742 100644 --- a/staging/operator-registry/pkg/sqlite/query.go +++ b/staging/operator-registry/pkg/sqlite/query.go @@ -63,7 +63,6 @@ func NewSQLLiteQuerier(dbFilename string, opts ...SQLiteQuerierOption) (*SQLQuer return NewSQLLiteQuerierFromDb(db, opts...), nil } -// nolint:stylecheck func NewSQLLiteQuerierFromDb(db *sql.DB, opts ...SQLiteQuerierOption) *SQLQuerier { return NewSQLLiteQuerierFromDBQuerier(dbQuerierAdapter{db}, opts...) } @@ -810,7 +809,7 @@ func (s *SQLQuerier) GetBundlePathsForPackage(ctx context.Context, pkgName strin return nil, err } if imgName.Valid && imgName.String == "" { - // nolint: stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return nil, fmt.Errorf("Index malformed: cannot find paths to bundle images") } images = append(images, imgName.String) @@ -846,7 +845,7 @@ func (s *SQLQuerier) GetBundlesForPackage(ctx context.Context, pkgName string) ( key.Version = version.String } if key.IsEmpty() { - // nolint: stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return nil, fmt.Errorf("Index malformed: cannot find identifier for bundle in package %s", pkgName) } bundles[key] = struct{}{} diff --git a/staging/operator-registry/release/goreleaser.darwin.yaml b/staging/operator-registry/release/goreleaser.darwin.yaml index d0d47ff79b..a1607c3d74 100644 --- a/staging/operator-registry/release/goreleaser.darwin.yaml +++ b/staging/operator-registry/release/goreleaser.darwin.yaml @@ -1,3 +1,4 @@ +version: 2 builds: - id: darwin-amd64 main: ./cmd/opm @@ -36,14 +37,15 @@ builds: ldflags: *build-ldflags archives: - id: opm - builds: + ids: - darwin-amd64 - darwin-arm64 - format: binary + formats: + - binary name_template: "{{ .Os }}-{{ .Arch }}-{{ .Binary }}" checksum: name_template: 'checksums.txt' snapshot: - name_template: "{{ .Env.OPM_VERSION }}" + version_template: "{{ .Env.OPM_VERSION }}" release: disable: true diff --git a/staging/operator-registry/release/goreleaser.linux.yaml b/staging/operator-registry/release/goreleaser.linux.yaml index 2d74ea71d3..35ad8afbb3 100644 --- a/staging/operator-registry/release/goreleaser.linux.yaml +++ b/staging/operator-registry/release/goreleaser.linux.yaml @@ -1,3 +1,4 @@ +version: 2 builds: - id: linux-amd64 main: ./cmd/opm @@ -69,90 +70,40 @@ builds: ldflags: *build-ldflags archives: - id: opm - builds: + ids: - linux-amd64 - linux-arm64 - linux-ppc64le - linux-s390x - format: binary + formats: + - binary name_template: "{{ .Os }}-{{ .Arch }}-{{ .Binary }}" -dockers: - - image_templates: - - "{{ .Env.OPM_IMAGE_REPO }}:{{ .Env.IMAGE_TAG }}-amd64" - ids: ["linux-amd64"] - goos: linux - goarch: amd64 - dockerfile: release/goreleaser.opm.Dockerfile - extra_files: ["nsswitch.conf"] - use: buildx - build_flag_templates: - - --platform=linux/amd64 - - --build-arg=GRPC_HEALTH_PROBE_VERSION={{ .Env.GRPC_HEALTH_PROBE_VERSION }} - - image_templates: - - "{{ .Env.OPM_IMAGE_REPO }}:{{ .Env.IMAGE_TAG }}-arm64" - ids: ["linux-arm64"] - goos: linux - goarch: arm64 - dockerfile: release/goreleaser.opm.Dockerfile - extra_files: ["nsswitch.conf"] - use: buildx - build_flag_templates: - - --platform=linux/arm64 - - --build-arg=GRPC_HEALTH_PROBE_VERSION={{ .Env.GRPC_HEALTH_PROBE_VERSION }} - - image_templates: - - "{{ .Env.OPM_IMAGE_REPO }}:{{ .Env.IMAGE_TAG }}-ppc64le" - ids: ["linux-ppc64le"] - goos: linux - goarch: ppc64le - dockerfile: release/goreleaser.opm.Dockerfile - extra_files: ["nsswitch.conf"] - use: buildx - build_flag_templates: - - --platform=linux/ppc64le - - --build-arg=GRPC_HEALTH_PROBE_VERSION={{ .Env.GRPC_HEALTH_PROBE_VERSION }} - - image_templates: - - "{{ .Env.OPM_IMAGE_REPO }}:{{ .Env.IMAGE_TAG }}-s390x" - ids: ["linux-s390x"] - goos: linux - goarch: s390x - dockerfile: release/goreleaser.opm.Dockerfile - extra_files: ["nsswitch.conf"] - use: buildx - build_flag_templates: - - --platform=linux/s390x - - --build-arg=GRPC_HEALTH_PROBE_VERSION={{ .Env.GRPC_HEALTH_PROBE_VERSION }} -docker_manifests: +dockers_v2: # IMAGE_TAG is either set by the Makefile or the goreleaser action workflow, # This image is intended to be tagged/pushed on all trunk (master, release branch) commits and tags. - - name_template: "{{ .Env.OPM_IMAGE_REPO }}:{{ .Env.IMAGE_TAG }}" - image_templates: - - "{{ .Env.OPM_IMAGE_REPO }}:{{ .Env.IMAGE_TAG }}-amd64" - - "{{ .Env.OPM_IMAGE_REPO }}:{{ .Env.IMAGE_TAG }}-arm64" - - "{{ .Env.OPM_IMAGE_REPO }}:{{ .Env.IMAGE_TAG }}-ppc64le" - - "{{ .Env.OPM_IMAGE_REPO }}:{{ .Env.IMAGE_TAG }}-s390x" - # Release image builds will be skipped if *_IMAGE_OR_EMPTY variables are empty. - # https://github.com/goreleaser/goreleaser/blob/9ed3c0c/internal/pipe/docker/manifest.go#L105 - - name_template: "{{ .Env.MAJ_MIN_IMAGE_OR_EMPTY }}" - image_templates: - - "{{ .Env.OPM_IMAGE_REPO }}:{{ .Env.IMAGE_TAG }}-amd64" - - "{{ .Env.OPM_IMAGE_REPO }}:{{ .Env.IMAGE_TAG }}-arm64" - - "{{ .Env.OPM_IMAGE_REPO }}:{{ .Env.IMAGE_TAG }}-ppc64le" - - "{{ .Env.OPM_IMAGE_REPO }}:{{ .Env.IMAGE_TAG }}-s390x" - - name_template: "{{ .Env.MAJ_IMAGE_OR_EMPTY }}" - image_templates: - - "{{ .Env.OPM_IMAGE_REPO }}:{{ .Env.IMAGE_TAG }}-amd64" - - "{{ .Env.OPM_IMAGE_REPO }}:{{ .Env.IMAGE_TAG }}-arm64" - - "{{ .Env.OPM_IMAGE_REPO }}:{{ .Env.IMAGE_TAG }}-ppc64le" - - "{{ .Env.OPM_IMAGE_REPO }}:{{ .Env.IMAGE_TAG }}-s390x" - - name_template: "{{ .Env.LATEST_IMAGE_OR_EMPTY }}" - image_templates: - - "{{ .Env.OPM_IMAGE_REPO }}:{{ .Env.IMAGE_TAG }}-amd64" - - "{{ .Env.OPM_IMAGE_REPO }}:{{ .Env.IMAGE_TAG }}-arm64" - - "{{ .Env.OPM_IMAGE_REPO }}:{{ .Env.IMAGE_TAG }}-ppc64le" - - "{{ .Env.OPM_IMAGE_REPO }}:{{ .Env.IMAGE_TAG }}-s390x" + - id: opm-multi-arch + ids: + - linux-amd64 + - linux-arm64 + - linux-ppc64le + - linux-s390x + dockerfile: release/goreleaser.opm.Dockerfile + extra_files: + - nsswitch.conf + platforms: + - linux/amd64 + - linux/arm64 + - linux/ppc64le + - linux/s390x + build_args: + GRPC_HEALTH_PROBE_VERSION: "{{ .Env.GRPC_HEALTH_PROBE_VERSION }}" + images: + - "{{ .Env.OPM_IMAGE_REPO }}" + tags: + - "{{ .Env.IMAGE_TAG }}" checksum: name_template: 'checksums.txt' snapshot: - name_template: "{{ .Env.OPM_VERSION }}" + version_template: "{{ .Env.OPM_VERSION }}" release: disable: true diff --git a/staging/operator-registry/release/goreleaser.opm.Dockerfile b/staging/operator-registry/release/goreleaser.opm.Dockerfile index 5c668c9b41..fdca894480 100644 --- a/staging/operator-registry/release/goreleaser.opm.Dockerfile +++ b/staging/operator-registry/release/goreleaser.opm.Dockerfile @@ -6,11 +6,13 @@ # by GoReleaser from the GRPC_HEALTH_PROBE_VERSION environment variable, # which is set in the Makefile from go.mod. -ARG GRPC_HEALTH_PROBE_VERSION +ARG GRPC_HEALTH_PROBE_VERSION=v0.4.43 FROM ghcr.io/grpc-ecosystem/grpc-health-probe:${GRPC_HEALTH_PROBE_VERSION} AS grpc_health_probe FROM gcr.io/distroless/static:debug +ARG TARGETOS +ARG TARGETARCH COPY --from=grpc_health_probe /ko-app/grpc-health-probe /bin/grpc_health_probe COPY ["nsswitch.conf", "/etc/nsswitch.conf"] -COPY opm /bin/opm +COPY ${TARGETOS}/${TARGETARCH}/opm /bin/opm USER 1001 ENTRYPOINT ["/bin/opm"] diff --git a/staging/operator-registry/release/goreleaser.windows.yaml b/staging/operator-registry/release/goreleaser.windows.yaml index b35be4c7aa..2acb446af9 100644 --- a/staging/operator-registry/release/goreleaser.windows.yaml +++ b/staging/operator-registry/release/goreleaser.windows.yaml @@ -1,3 +1,4 @@ +version: 2 builds: - id: windows-amd64 main: ./cmd/opm @@ -23,13 +24,14 @@ builds: - -X {{ .Env.PKG }}/cmd/opm/version.buildDate={{ .Env.BUILD_DATE }} archives: - id: opm - builds: + ids: - windows-amd64 - format: binary + formats: + - binary name_template: "{{ .Os }}-{{ .Arch }}-{{ .Binary }}" checksum: name_template: 'checksums.txt' snapshot: - name_template: "{{ .Env.OPM_VERSION }}" + version_template: "{{ .Env.OPM_VERSION }}" release: disable: true diff --git a/staging/operator-registry/test/e2e/ctx/ctx.go b/staging/operator-registry/test/e2e/ctx/ctx.go index ca54c7426e..9a80a83fa2 100644 --- a/staging/operator-registry/test/e2e/ctx/ctx.go +++ b/staging/operator-registry/test/e2e/ctx/ctx.go @@ -4,9 +4,7 @@ import ( "fmt" "strings" - // nolint: stylecheck - . "github.com/onsi/ginkgo/v2" - + ginkgo "github.com/onsi/ginkgo/v2" apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apimachinery/pkg/runtime" kscheme "k8s.io/client-go/kubernetes/scheme" @@ -42,7 +40,7 @@ func (ctx TestContext) Logf(f string, v ...interface{}) { if !strings.HasSuffix(f, "\n") { f += "\n" } - _, _ = fmt.Fprintf(GinkgoWriter, f, v...) + _, _ = fmt.Fprintf(ginkgo.GinkgoWriter, f, v...) } func (ctx TestContext) Scheme() *runtime.Scheme { diff --git a/staging/operator-registry/test/e2e/ctx/provisioner_kind.go b/staging/operator-registry/test/e2e/ctx/provisioner_kind.go index c50c69d2d5..23f7883c76 100644 --- a/staging/operator-registry/test/e2e/ctx/provisioner_kind.go +++ b/staging/operator-registry/test/e2e/ctx/provisioner_kind.go @@ -8,7 +8,6 @@ import ( "encoding/csv" "flag" "fmt" - "io/ioutil" "os" "os/exec" "path/filepath" @@ -69,7 +68,7 @@ func (kl kindLogAdapter) V(log.Level) log.InfoLogger { } func Provision(ctx *TestContext) (func(), error) { - dir, err := ioutil.TempDir("", "kind.") + dir, err := os.MkdirTemp("", "kind.") if err != nil { return nil, fmt.Errorf("failed to create temporary directory: %s", err.Error()) } diff --git a/vendor/github.com/cenkalti/backoff/v5/exponential.go b/vendor/github.com/cenkalti/backoff/v5/exponential.go index c1f3e442d3..79d425e874 100644 --- a/vendor/github.com/cenkalti/backoff/v5/exponential.go +++ b/vendor/github.com/cenkalti/backoff/v5/exponential.go @@ -1,7 +1,7 @@ package backoff import ( - "math/rand" + "math/rand/v2" "time" ) @@ -28,13 +28,7 @@ multiplied by the exponential, that is, between 2 and 6 seconds. Note: MaxInterval caps the RetryInterval and not the randomized interval. -If the time elapsed since an ExponentialBackOff instance is created goes past the -MaxElapsedTime, then the method NextBackOff() starts returning backoff.Stop. - -The elapsed time can be reset by calling Reset(). - -Example: Given the following default arguments, for 10 tries the sequence will be, -and assuming we go over the MaxElapsedTime on the 10th try: +Example: Given the following default arguments, for 9 tries the sequence will be: Request # RetryInterval (seconds) Randomized Interval (seconds) @@ -47,7 +41,6 @@ and assuming we go over the MaxElapsedTime on the 10th try: 7 5.692 [2.846, 8.538] 8 8.538 [4.269, 12.807] 9 12.807 [6.403, 19.210] - 10 19.210 backoff.Stop Note: Implementation is not thread-safe. */ diff --git a/vendor/github.com/cenkalti/backoff/v5/retry.go b/vendor/github.com/cenkalti/backoff/v5/retry.go index e43f47fb8a..32a7f98834 100644 --- a/vendor/github.com/cenkalti/backoff/v5/retry.go +++ b/vendor/github.com/cenkalti/backoff/v5/retry.go @@ -47,7 +47,7 @@ func WithNotify(n Notify) RetryOption { } } -// WithMaxTries limits the number of retry attempts. +// WithMaxTries limits the number of all attempts. func WithMaxTries(n uint) RetryOption { return func(args *retryOptions) { args.MaxTries = n @@ -97,7 +97,7 @@ func Retry[T any](ctx context.Context, operation Operation[T], opts ...RetryOpti // Handle permanent errors without retrying. var permanent *PermanentError if errors.As(err, &permanent) { - return res, err + return res, permanent.Unwrap() } // Stop retrying if context is cancelled. diff --git a/vendor/github.com/containerd/containerd/version/version.go b/vendor/github.com/containerd/containerd/version/version.go index 9075534661..f20a57a35f 100644 --- a/vendor/github.com/containerd/containerd/version/version.go +++ b/vendor/github.com/containerd/containerd/version/version.go @@ -23,7 +23,7 @@ var ( Package = "github.com/containerd/containerd" // Version holds the complete version number. Filled in at linking time. - Version = "1.7.29+unknown" + Version = "1.7.30+unknown" // Revision is filled with the VCS (e.g. git) revision being used to build // the program at linking time. diff --git a/vendor/github.com/golang/mock/mockgen/generic_go118.go b/vendor/github.com/golang/mock/mockgen/generic_go118.go new file mode 100644 index 0000000000..b29db9a85c --- /dev/null +++ b/vendor/github.com/golang/mock/mockgen/generic_go118.go @@ -0,0 +1,88 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build go1.18 +// +build go1.18 + +package main + +import ( + "go/ast" + "strings" + + "github.com/golang/mock/mockgen/model" +) + +func getTypeSpecTypeParams(ts *ast.TypeSpec) []*ast.Field { + if ts == nil || ts.TypeParams == nil { + return nil + } + return ts.TypeParams.List +} + +func (p *fileParser) parseGenericType(pkg string, typ ast.Expr, tps map[string]bool) (model.Type, error) { + switch v := typ.(type) { + case *ast.IndexExpr: + m, err := p.parseType(pkg, v.X, tps) + if err != nil { + return nil, err + } + nm, ok := m.(*model.NamedType) + if !ok { + return m, nil + } + t, err := p.parseType(pkg, v.Index, tps) + if err != nil { + return nil, err + } + nm.TypeParams = &model.TypeParametersType{TypeParameters: []model.Type{t}} + return m, nil + case *ast.IndexListExpr: + m, err := p.parseType(pkg, v.X, tps) + if err != nil { + return nil, err + } + nm, ok := m.(*model.NamedType) + if !ok { + return m, nil + } + var ts []model.Type + for _, expr := range v.Indices { + t, err := p.parseType(pkg, expr, tps) + if err != nil { + return nil, err + } + ts = append(ts, t) + } + nm.TypeParams = &model.TypeParametersType{TypeParameters: ts} + return m, nil + } + return nil, nil +} + +func getIdentTypeParams(decl interface{}) string { + if decl == nil { + return "" + } + ts, ok := decl.(*ast.TypeSpec) + if !ok { + return "" + } + if ts.TypeParams == nil || len(ts.TypeParams.List) == 0 { + return "" + } + var sb strings.Builder + sb.WriteString("[") + for i, v := range ts.TypeParams.List { + if i != 0 { + sb.WriteString(", ") + } + sb.WriteString(v.Names[0].Name) + } + sb.WriteString("]") + return sb.String() +} diff --git a/vendor/github.com/golang/mock/mockgen/version.1.11.go b/vendor/github.com/golang/mock/mockgen/generic_notgo118.go similarity index 60% rename from vendor/github.com/golang/mock/mockgen/version.1.11.go rename to vendor/github.com/golang/mock/mockgen/generic_notgo118.go index e6b25db238..8fe48c175e 100644 --- a/vendor/github.com/golang/mock/mockgen/version.1.11.go +++ b/vendor/github.com/golang/mock/mockgen/generic_notgo118.go @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2022 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,15 +12,25 @@ // See the License for the specific language governing permissions and // limitations under the License. -// +build !go1.12 +//go:build !go1.18 +// +build !go1.18 package main import ( - "log" + "go/ast" + + "github.com/golang/mock/mockgen/model" ) -func printModuleVersion() { - log.Printf("No version information is available for Mockgen compiled with " + - "version 1.11") +func getTypeSpecTypeParams(ts *ast.TypeSpec) []*ast.Field { + return nil +} + +func (p *fileParser) parseGenericType(pkg string, typ ast.Expr, tps map[string]bool) (model.Type, error) { + return nil, nil +} + +func getIdentTypeParams(decl interface{}) string { + return "" } diff --git a/vendor/github.com/golang/mock/mockgen/mockgen.go b/vendor/github.com/golang/mock/mockgen/mockgen.go index 50487070e3..72a1c96035 100644 --- a/vendor/github.com/golang/mock/mockgen/mockgen.go +++ b/vendor/github.com/golang/mock/mockgen/mockgen.go @@ -371,32 +371,58 @@ func (g *generator) mockName(typeName string) string { return "Mock" + typeName } +// formattedTypeParams returns a long and short form of type param info used for +// printing. If analyzing a interface with type param [I any, O any] the result +// will be: +// "[I any, O any]", "[I, O]" +func (g *generator) formattedTypeParams(it *model.Interface, pkgOverride string) (string, string) { + if len(it.TypeParams) == 0 { + return "", "" + } + var long, short strings.Builder + long.WriteString("[") + short.WriteString("[") + for i, v := range it.TypeParams { + if i != 0 { + long.WriteString(", ") + short.WriteString(", ") + } + long.WriteString(v.Name) + short.WriteString(v.Name) + long.WriteString(fmt.Sprintf(" %s", v.Type.String(g.packageMap, pkgOverride))) + } + long.WriteString("]") + short.WriteString("]") + return long.String(), short.String() +} + func (g *generator) GenerateMockInterface(intf *model.Interface, outputPackagePath string) error { mockType := g.mockName(intf.Name) + longTp, shortTp := g.formattedTypeParams(intf, outputPackagePath) g.p("") g.p("// %v is a mock of %v interface.", mockType, intf.Name) - g.p("type %v struct {", mockType) + g.p("type %v%v struct {", mockType, longTp) g.in() g.p("ctrl *gomock.Controller") - g.p("recorder *%vMockRecorder", mockType) + g.p("recorder *%vMockRecorder%v", mockType, shortTp) g.out() g.p("}") g.p("") g.p("// %vMockRecorder is the mock recorder for %v.", mockType, mockType) - g.p("type %vMockRecorder struct {", mockType) + g.p("type %vMockRecorder%v struct {", mockType, longTp) g.in() - g.p("mock *%v", mockType) + g.p("mock *%v%v", mockType, shortTp) g.out() g.p("}") g.p("") g.p("// New%v creates a new mock instance.", mockType) - g.p("func New%v(ctrl *gomock.Controller) *%v {", mockType, mockType) + g.p("func New%v%v(ctrl *gomock.Controller) *%v%v {", mockType, longTp, mockType, shortTp) g.in() - g.p("mock := &%v{ctrl: ctrl}", mockType) - g.p("mock.recorder = &%vMockRecorder{mock}", mockType) + g.p("mock := &%v%v{ctrl: ctrl}", mockType, shortTp) + g.p("mock.recorder = &%vMockRecorder%v{mock}", mockType, shortTp) g.p("return mock") g.out() g.p("}") @@ -404,13 +430,13 @@ func (g *generator) GenerateMockInterface(intf *model.Interface, outputPackagePa // XXX: possible name collision here if someone has EXPECT in their interface. g.p("// EXPECT returns an object that allows the caller to indicate expected use.") - g.p("func (m *%v) EXPECT() *%vMockRecorder {", mockType, mockType) + g.p("func (m *%v%v) EXPECT() *%vMockRecorder%v {", mockType, shortTp, mockType, shortTp) g.in() g.p("return m.recorder") g.out() g.p("}") - g.GenerateMockMethods(mockType, intf, outputPackagePath) + g.GenerateMockMethods(mockType, intf, outputPackagePath, shortTp) return nil } @@ -421,13 +447,13 @@ func (b byMethodName) Len() int { return len(b) } func (b byMethodName) Swap(i, j int) { b[i], b[j] = b[j], b[i] } func (b byMethodName) Less(i, j int) bool { return b[i].Name < b[j].Name } -func (g *generator) GenerateMockMethods(mockType string, intf *model.Interface, pkgOverride string) { +func (g *generator) GenerateMockMethods(mockType string, intf *model.Interface, pkgOverride, shortTp string) { sort.Sort(byMethodName(intf.Methods)) for _, m := range intf.Methods { g.p("") - _ = g.GenerateMockMethod(mockType, m, pkgOverride) + _ = g.GenerateMockMethod(mockType, m, pkgOverride, shortTp) g.p("") - _ = g.GenerateMockRecorderMethod(mockType, m) + _ = g.GenerateMockRecorderMethod(mockType, m, shortTp) } } @@ -446,7 +472,7 @@ func makeArgString(argNames, argTypes []string) string { // GenerateMockMethod generates a mock method implementation. // If non-empty, pkgOverride is the package in which unqualified types reside. -func (g *generator) GenerateMockMethod(mockType string, m *model.Method, pkgOverride string) error { +func (g *generator) GenerateMockMethod(mockType string, m *model.Method, pkgOverride, shortTp string) error { argNames := g.getArgNames(m) argTypes := g.getArgTypes(m, pkgOverride) argString := makeArgString(argNames, argTypes) @@ -467,7 +493,7 @@ func (g *generator) GenerateMockMethod(mockType string, m *model.Method, pkgOver idRecv := ia.allocateIdentifier("m") g.p("// %v mocks base method.", m.Name) - g.p("func (%v *%v) %v(%v)%v {", idRecv, mockType, m.Name, argString, retString) + g.p("func (%v *%v%v) %v(%v)%v {", idRecv, mockType, shortTp, m.Name, argString, retString) g.in() g.p("%s.ctrl.T.Helper()", idRecv) @@ -511,7 +537,7 @@ func (g *generator) GenerateMockMethod(mockType string, m *model.Method, pkgOver return nil } -func (g *generator) GenerateMockRecorderMethod(mockType string, m *model.Method) error { +func (g *generator) GenerateMockRecorderMethod(mockType string, m *model.Method, shortTp string) error { argNames := g.getArgNames(m) var argString string @@ -535,7 +561,7 @@ func (g *generator) GenerateMockRecorderMethod(mockType string, m *model.Method) idRecv := ia.allocateIdentifier("mr") g.p("// %v indicates an expected call of %v.", m.Name, m.Name) - g.p("func (%s *%vMockRecorder) %v(%v) *gomock.Call {", idRecv, mockType, m.Name, argString) + g.p("func (%s *%vMockRecorder%v) %v(%v) *gomock.Call {", idRecv, mockType, shortTp, m.Name, argString) g.in() g.p("%s.mock.ctrl.T.Helper()", idRecv) @@ -558,7 +584,7 @@ func (g *generator) GenerateMockRecorderMethod(mockType string, m *model.Method) callArgs = ", " + idVarArgs + "..." } } - g.p(`return %s.mock.ctrl.RecordCallWithMethodType(%s.mock, "%s", reflect.TypeOf((*%s)(nil).%s)%s)`, idRecv, idRecv, m.Name, mockType, m.Name, callArgs) + g.p(`return %s.mock.ctrl.RecordCallWithMethodType(%s.mock, "%s", reflect.TypeOf((*%s%s)(nil).%s)%s)`, idRecv, idRecv, m.Name, mockType, shortTp, m.Name, callArgs) g.out() g.p("}") diff --git a/vendor/github.com/golang/mock/mockgen/model/model.go b/vendor/github.com/golang/mock/mockgen/model/model.go index 2c6a62ceb2..94d7f4ba14 100644 --- a/vendor/github.com/golang/mock/mockgen/model/model.go +++ b/vendor/github.com/golang/mock/mockgen/model/model.go @@ -47,14 +47,18 @@ func (pkg *Package) Imports() map[string]bool { im := make(map[string]bool) for _, intf := range pkg.Interfaces { intf.addImports(im) + for _, tp := range intf.TypeParams { + tp.Type.addImports(im) + } } return im } // Interface is a Go interface. type Interface struct { - Name string - Methods []*Method + Name string + Methods []*Method + TypeParams []*Parameter } // Print writes the interface name and its methods. @@ -259,26 +263,28 @@ func (mt *MapType) addImports(im map[string]bool) { // NamedType is an exported type in a package. type NamedType struct { - Package string // may be empty - Type string + Package string // may be empty + Type string + TypeParams *TypeParametersType } func (nt *NamedType) String(pm map[string]string, pkgOverride string) string { if pkgOverride == nt.Package { - return nt.Type + return nt.Type + nt.TypeParams.String(pm, pkgOverride) } prefix := pm[nt.Package] if prefix != "" { - return prefix + "." + nt.Type + return prefix + "." + nt.Type + nt.TypeParams.String(pm, pkgOverride) } - return nt.Type + return nt.Type + nt.TypeParams.String(pm, pkgOverride) } func (nt *NamedType) addImports(im map[string]bool) { if nt.Package != "" { im[nt.Package] = true } + nt.TypeParams.addImports(im) } // PointerType is a pointer to another type. @@ -297,6 +303,36 @@ type PredeclaredType string func (pt PredeclaredType) String(map[string]string, string) string { return string(pt) } func (pt PredeclaredType) addImports(map[string]bool) {} +// TypeParametersType contains type paramters for a NamedType. +type TypeParametersType struct { + TypeParameters []Type +} + +func (tp *TypeParametersType) String(pm map[string]string, pkgOverride string) string { + if tp == nil || len(tp.TypeParameters) == 0 { + return "" + } + var sb strings.Builder + sb.WriteString("[") + for i, v := range tp.TypeParameters { + if i != 0 { + sb.WriteString(", ") + } + sb.WriteString(v.String(pm, pkgOverride)) + } + sb.WriteString("]") + return sb.String() +} + +func (tp *TypeParametersType) addImports(im map[string]bool) { + if tp == nil { + return + } + for _, v := range tp.TypeParameters { + v.addImports(im) + } +} + // The following code is intended to be called by the program generated by ../reflect.go. // InterfaceFromInterfaceType returns a pointer to an interface for the diff --git a/vendor/github.com/golang/mock/mockgen/parse.go b/vendor/github.com/golang/mock/mockgen/parse.go index bf6902cd5b..21c0d70a30 100644 --- a/vendor/github.com/golang/mock/mockgen/parse.go +++ b/vendor/github.com/golang/mock/mockgen/parse.go @@ -62,8 +62,8 @@ func sourceMode(source string) (*model.Package, error) { p := &fileParser{ fileSet: fs, imports: make(map[string]importedPackage), - importedInterfaces: make(map[string]map[string]*ast.InterfaceType), - auxInterfaces: make(map[string]map[string]*ast.InterfaceType), + importedInterfaces: newInterfaceCache(), + auxInterfaces: newInterfaceCache(), srcDir: srcDir, } @@ -127,15 +127,48 @@ func (d duplicateImport) Error() string { func (d duplicateImport) Path() string { log.Fatal(d.Error()); return "" } func (d duplicateImport) Parser() *fileParser { log.Fatal(d.Error()); return nil } -type fileParser struct { - fileSet *token.FileSet - imports map[string]importedPackage // package name => imported package - importedInterfaces map[string]map[string]*ast.InterfaceType // package (or "") => name => interface +type interfaceCache struct { + m map[string]map[string]*namedInterface +} + +func newInterfaceCache() *interfaceCache { + return &interfaceCache{ + m: make(map[string]map[string]*namedInterface), + } +} - auxFiles []*ast.File - auxInterfaces map[string]map[string]*ast.InterfaceType // package (or "") => name => interface +func (i *interfaceCache) Set(pkg, name string, it *namedInterface) { + if _, ok := i.m[pkg]; !ok { + i.m[pkg] = make(map[string]*namedInterface) + } + i.m[pkg][name] = it +} + +func (i *interfaceCache) Get(pkg, name string) *namedInterface { + if _, ok := i.m[pkg]; !ok { + return nil + } + return i.m[pkg][name] +} + +func (i *interfaceCache) GetASTIface(pkg, name string) *ast.InterfaceType { + if _, ok := i.m[pkg]; !ok { + return nil + } + it, ok := i.m[pkg][name] + if !ok { + return nil + } + return it.it +} - srcDir string +type fileParser struct { + fileSet *token.FileSet + imports map[string]importedPackage // package name => imported package + importedInterfaces *interfaceCache + auxFiles []*ast.File + auxInterfaces *interfaceCache + srcDir string } func (p *fileParser) errorf(pos token.Pos, format string, args ...interface{}) error { @@ -168,11 +201,8 @@ func (p *fileParser) parseAuxFiles(auxFiles string) error { } func (p *fileParser) addAuxInterfacesFromFile(pkg string, file *ast.File) { - if _, ok := p.auxInterfaces[pkg]; !ok { - p.auxInterfaces[pkg] = make(map[string]*ast.InterfaceType) - } for ni := range iterInterfaces(file) { - p.auxInterfaces[pkg][ni.name.Name] = ni.it + p.auxInterfaces.Set(pkg, ni.name.Name, ni) } } @@ -199,7 +229,7 @@ func (p *fileParser) parseFile(importPath string, file *ast.File) (*model.Packag var is []*model.Interface for ni := range iterInterfaces(file) { - i, err := p.parseInterface(ni.name.String(), importPath, ni.it) + i, err := p.parseInterface(ni.name.String(), importPath, ni) if err != nil { return nil, err } @@ -219,8 +249,8 @@ func (p *fileParser) parsePackage(path string) (*fileParser, error) { newP := &fileParser{ fileSet: token.NewFileSet(), imports: make(map[string]importedPackage), - importedInterfaces: make(map[string]map[string]*ast.InterfaceType), - auxInterfaces: make(map[string]map[string]*ast.InterfaceType), + importedInterfaces: newInterfaceCache(), + auxInterfaces: newInterfaceCache(), srcDir: p.srcDir, } @@ -233,11 +263,8 @@ func (p *fileParser) parsePackage(path string) (*fileParser, error) { for _, pkg := range pkgs { file := ast.MergePackageFiles(pkg, ast.FilterFuncDuplicates|ast.FilterUnassociatedComments|ast.FilterImportDuplicates) - if _, ok := newP.importedInterfaces[path]; !ok { - newP.importedInterfaces[path] = make(map[string]*ast.InterfaceType) - } for ni := range iterInterfaces(file) { - newP.importedInterfaces[path][ni.name.Name] = ni.it + newP.importedInterfaces.Set(path, ni.name.Name, ni) } imports, _ := importsOfFile(file) for pkgName, pkgI := range imports { @@ -247,9 +274,20 @@ func (p *fileParser) parsePackage(path string) (*fileParser, error) { return newP, nil } -func (p *fileParser) parseInterface(name, pkg string, it *ast.InterfaceType) (*model.Interface, error) { +func (p *fileParser) parseInterface(name, pkg string, it *namedInterface) (*model.Interface, error) { iface := &model.Interface{Name: name} - for _, field := range it.Methods.List { + tps := make(map[string]bool) + + tp, err := p.parseFieldList(pkg, it.typeParams, tps) + if err != nil { + return nil, fmt.Errorf("unable to parse interface type parameters: %v", name) + } + iface.TypeParams = tp + for _, v := range tp { + tps[v.Name] = true + } + + for _, field := range it.it.Methods.List { switch v := field.Type.(type) { case *ast.FuncType: if nn := len(field.Names); nn != 1 { @@ -259,16 +297,16 @@ func (p *fileParser) parseInterface(name, pkg string, it *ast.InterfaceType) (*m Name: field.Names[0].String(), } var err error - m.In, m.Variadic, m.Out, err = p.parseFunc(pkg, v) + m.In, m.Variadic, m.Out, err = p.parseFunc(pkg, v, tps) if err != nil { return nil, err } iface.AddMethod(m) case *ast.Ident: // Embedded interface in this package. - embeddedIfaceType := p.auxInterfaces[pkg][v.String()] + embeddedIfaceType := p.auxInterfaces.Get(pkg, v.String()) if embeddedIfaceType == nil { - embeddedIfaceType = p.importedInterfaces[pkg][v.String()] + embeddedIfaceType = p.importedInterfaces.Get(pkg, v.String()) } var embeddedIface *model.Interface @@ -283,7 +321,19 @@ func (p *fileParser) parseInterface(name, pkg string, it *ast.InterfaceType) (*m if v.String() == model.ErrorInterface.Name { embeddedIface = &model.ErrorInterface } else { - return nil, p.errorf(v.Pos(), "unknown embedded interface %s", v.String()) + ip, err := p.parsePackage(pkg) + if err != nil { + return nil, p.errorf(v.Pos(), "could not parse package %s: %v", pkg, err) + } + + if embeddedIfaceType = ip.importedInterfaces.Get(pkg, v.String()); embeddedIfaceType == nil { + return nil, p.errorf(v.Pos(), "unknown embedded interface %s.%s", pkg, v.String()) + } + + embeddedIface, err = ip.parseInterface(v.String(), pkg, embeddedIfaceType) + if err != nil { + return nil, err + } } } // Copy the methods. @@ -300,7 +350,7 @@ func (p *fileParser) parseInterface(name, pkg string, it *ast.InterfaceType) (*m var embeddedIface *model.Interface var err error - embeddedIfaceType := p.auxInterfaces[filePkg][sel] + embeddedIfaceType := p.auxInterfaces.Get(filePkg, sel) if embeddedIfaceType != nil { embeddedIface, err = p.parseInterface(sel, filePkg, embeddedIfaceType) if err != nil { @@ -320,7 +370,7 @@ func (p *fileParser) parseInterface(name, pkg string, it *ast.InterfaceType) (*m parser: parser, } } - if embeddedIfaceType = parser.importedInterfaces[path][sel]; embeddedIfaceType == nil { + if embeddedIfaceType = parser.importedInterfaces.Get(path, sel); embeddedIfaceType == nil { return nil, p.errorf(v.Pos(), "unknown embedded interface %s.%s", path, sel) } embeddedIface, err = parser.parseInterface(sel, path, embeddedIfaceType) @@ -340,26 +390,26 @@ func (p *fileParser) parseInterface(name, pkg string, it *ast.InterfaceType) (*m return iface, nil } -func (p *fileParser) parseFunc(pkg string, f *ast.FuncType) (inParam []*model.Parameter, variadic *model.Parameter, outParam []*model.Parameter, err error) { +func (p *fileParser) parseFunc(pkg string, f *ast.FuncType, tps map[string]bool) (inParam []*model.Parameter, variadic *model.Parameter, outParam []*model.Parameter, err error) { if f.Params != nil { regParams := f.Params.List if isVariadic(f) { n := len(regParams) varParams := regParams[n-1:] regParams = regParams[:n-1] - vp, err := p.parseFieldList(pkg, varParams) + vp, err := p.parseFieldList(pkg, varParams, tps) if err != nil { return nil, nil, nil, p.errorf(varParams[0].Pos(), "failed parsing variadic argument: %v", err) } variadic = vp[0] } - inParam, err = p.parseFieldList(pkg, regParams) + inParam, err = p.parseFieldList(pkg, regParams, tps) if err != nil { return nil, nil, nil, p.errorf(f.Pos(), "failed parsing arguments: %v", err) } } if f.Results != nil { - outParam, err = p.parseFieldList(pkg, f.Results.List) + outParam, err = p.parseFieldList(pkg, f.Results.List, tps) if err != nil { return nil, nil, nil, p.errorf(f.Pos(), "failed parsing returns: %v", err) } @@ -367,7 +417,7 @@ func (p *fileParser) parseFunc(pkg string, f *ast.FuncType) (inParam []*model.Pa return } -func (p *fileParser) parseFieldList(pkg string, fields []*ast.Field) ([]*model.Parameter, error) { +func (p *fileParser) parseFieldList(pkg string, fields []*ast.Field, tps map[string]bool) ([]*model.Parameter, error) { nf := 0 for _, f := range fields { nn := len(f.Names) @@ -382,7 +432,7 @@ func (p *fileParser) parseFieldList(pkg string, fields []*ast.Field) ([]*model.P ps := make([]*model.Parameter, nf) i := 0 // destination index for _, f := range fields { - t, err := p.parseType(pkg, f.Type) + t, err := p.parseType(pkg, f.Type, tps) if err != nil { return nil, err } @@ -401,44 +451,27 @@ func (p *fileParser) parseFieldList(pkg string, fields []*ast.Field) ([]*model.P return ps, nil } -func (p *fileParser) parseType(pkg string, typ ast.Expr) (model.Type, error) { +func (p *fileParser) parseType(pkg string, typ ast.Expr, tps map[string]bool) (model.Type, error) { switch v := typ.(type) { case *ast.ArrayType: ln := -1 if v.Len != nil { - var value string - switch val := v.Len.(type) { - case (*ast.BasicLit): - value = val.Value - case (*ast.Ident): - // when the length is a const defined locally - value = val.Obj.Decl.(*ast.ValueSpec).Values[0].(*ast.BasicLit).Value - case (*ast.SelectorExpr): - // when the length is a const defined in an external package - usedPkg, err := importer.Default().Import(fmt.Sprintf("%s", val.X)) - if err != nil { - return nil, p.errorf(v.Len.Pos(), "unknown package in array length: %v", err) - } - ev, err := types.Eval(token.NewFileSet(), usedPkg, token.NoPos, val.Sel.Name) - if err != nil { - return nil, p.errorf(v.Len.Pos(), "unknown constant in array length: %v", err) - } - value = ev.Value.String() + value, err := p.parseArrayLength(v.Len) + if err != nil { + return nil, err } - - x, err := strconv.Atoi(value) + ln, err = strconv.Atoi(value) if err != nil { return nil, p.errorf(v.Len.Pos(), "bad array size: %v", err) } - ln = x } - t, err := p.parseType(pkg, v.Elt) + t, err := p.parseType(pkg, v.Elt, tps) if err != nil { return nil, err } return &model.ArrayType{Len: ln, Type: t}, nil case *ast.ChanType: - t, err := p.parseType(pkg, v.Value) + t, err := p.parseType(pkg, v.Value, tps) if err != nil { return nil, err } @@ -452,15 +485,15 @@ func (p *fileParser) parseType(pkg string, typ ast.Expr) (model.Type, error) { return &model.ChanType{Dir: dir, Type: t}, nil case *ast.Ellipsis: // assume we're parsing a variadic argument - return p.parseType(pkg, v.Elt) + return p.parseType(pkg, v.Elt, tps) case *ast.FuncType: - in, variadic, out, err := p.parseFunc(pkg, v) + in, variadic, out, err := p.parseFunc(pkg, v, tps) if err != nil { return nil, err } return &model.FuncType{In: in, Out: out, Variadic: variadic}, nil case *ast.Ident: - if v.IsExported() { + if v.IsExported() && !tps[v.Name] { // `pkg` may be an aliased imported pkg // if so, patch the import w/ the fully qualified import maybeImportedPkg, ok := p.imports[pkg] @@ -479,11 +512,11 @@ func (p *fileParser) parseType(pkg string, typ ast.Expr) (model.Type, error) { } return model.PredeclaredType("interface{}"), nil case *ast.MapType: - key, err := p.parseType(pkg, v.Key) + key, err := p.parseType(pkg, v.Key, tps) if err != nil { return nil, err } - value, err := p.parseType(pkg, v.Value) + value, err := p.parseType(pkg, v.Value, tps) if err != nil { return nil, err } @@ -496,7 +529,7 @@ func (p *fileParser) parseType(pkg string, typ ast.Expr) (model.Type, error) { } return &model.NamedType{Package: pkg.Path(), Type: v.Sel.String()}, nil case *ast.StarExpr: - t, err := p.parseType(pkg, v.X) + t, err := p.parseType(pkg, v.X, tps) if err != nil { return nil, err } @@ -507,12 +540,61 @@ func (p *fileParser) parseType(pkg string, typ ast.Expr) (model.Type, error) { } return model.PredeclaredType("struct{}"), nil case *ast.ParenExpr: - return p.parseType(pkg, v.X) + return p.parseType(pkg, v.X, tps) + default: + mt, err := p.parseGenericType(pkg, typ, tps) + if err != nil { + return nil, err + } + if mt == nil { + break + } + return mt, nil } return nil, fmt.Errorf("don't know how to parse type %T", typ) } +func (p *fileParser) parseArrayLength(expr ast.Expr) (string, error) { + switch val := expr.(type) { + case (*ast.BasicLit): + return val.Value, nil + case (*ast.Ident): + // when the length is a const defined locally + return val.Obj.Decl.(*ast.ValueSpec).Values[0].(*ast.BasicLit).Value, nil + case (*ast.SelectorExpr): + // when the length is a const defined in an external package + usedPkg, err := importer.Default().Import(fmt.Sprintf("%s", val.X)) + if err != nil { + return "", p.errorf(expr.Pos(), "unknown package in array length: %v", err) + } + ev, err := types.Eval(token.NewFileSet(), usedPkg, token.NoPos, val.Sel.Name) + if err != nil { + return "", p.errorf(expr.Pos(), "unknown constant in array length: %v", err) + } + return ev.Value.String(), nil + case (*ast.ParenExpr): + return p.parseArrayLength(val.X) + case (*ast.BinaryExpr): + x, err := p.parseArrayLength(val.X) + if err != nil { + return "", err + } + y, err := p.parseArrayLength(val.Y) + if err != nil { + return "", err + } + biExpr := fmt.Sprintf("%s%v%s", x, val.Op, y) + tv, err := types.Eval(token.NewFileSet(), nil, token.NoPos, biExpr) + if err != nil { + return "", p.errorf(expr.Pos(), "invalid expression in array length: %v", err) + } + return tv.Value.String(), nil + default: + return "", p.errorf(expr.Pos(), "invalid expression in array length: %v", val) + } +} + // importsOfFile returns a map of package name to import path // of the imports in file. func importsOfFile(file *ast.File) (normalImports map[string]importedPackage, dotImports []string) { @@ -575,13 +657,14 @@ func importsOfFile(file *ast.File) (normalImports map[string]importedPackage, do } type namedInterface struct { - name *ast.Ident - it *ast.InterfaceType + name *ast.Ident + it *ast.InterfaceType + typeParams []*ast.Field } // Create an iterator over all interfaces in file. -func iterInterfaces(file *ast.File) <-chan namedInterface { - ch := make(chan namedInterface) +func iterInterfaces(file *ast.File) <-chan *namedInterface { + ch := make(chan *namedInterface) go func() { for _, decl := range file.Decls { gd, ok := decl.(*ast.GenDecl) @@ -598,7 +681,7 @@ func iterInterfaces(file *ast.File) <-chan namedInterface { continue } - ch <- namedInterface{ts.Name, it} + ch <- &namedInterface{ts.Name, it, getTypeSpecTypeParams(ts)} } } close(ch) diff --git a/vendor/github.com/golang/mock/mockgen/reflect.go b/vendor/github.com/golang/mock/mockgen/reflect.go index e24efce0ba..4f86a15115 100644 --- a/vendor/github.com/golang/mock/mockgen/reflect.go +++ b/vendor/github.com/golang/mock/mockgen/reflect.go @@ -170,7 +170,7 @@ func runInDir(program []byte, dir string) (*model.Package, error) { sErr := buf.String() if strings.Contains(sErr, `cannot find package "."`) && strings.Contains(sErr, "github.com/golang/mock/mockgen/model") { - fmt.Fprint(os.Stderr, "Please reference the steps in the README to fix this error:\n\thttps://github.com/golang/mock#reflect-vendoring-error.") + fmt.Fprint(os.Stderr, "Please reference the steps in the README to fix this error:\n\thttps://github.com/golang/mock#reflect-vendoring-error.\n") return nil, err } return nil, err diff --git a/vendor/github.com/golang/mock/mockgen/version.1.12.go b/vendor/github.com/golang/mock/mockgen/version.go similarity index 94% rename from vendor/github.com/golang/mock/mockgen/version.1.12.go rename to vendor/github.com/golang/mock/mockgen/version.go index ad121ae63c..6db160ac28 100644 --- a/vendor/github.com/golang/mock/mockgen/version.1.12.go +++ b/vendor/github.com/golang/mock/mockgen/version.go @@ -1,4 +1,4 @@ -// Copyright 2019 Google LLC +// Copyright 2022 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -11,9 +11,6 @@ // 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. -// - -// +build go1.12 package main @@ -31,5 +28,4 @@ func printModuleVersion() { "GO111MODULE=on when running 'go get' in order to use specific " + "version of the binary.") } - } diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/BUILD.bazel b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/BUILD.bazel index a65d88eb86..04b4bebf3d 100644 --- a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/BUILD.bazel +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/BUILD.bazel @@ -27,6 +27,7 @@ go_library( "//internal/httprule", "//utilities", "@org_golang_google_genproto_googleapis_api//httpbody", + "@org_golang_google_grpc//:grpc", "@org_golang_google_grpc//codes", "@org_golang_google_grpc//grpclog", "@org_golang_google_grpc//health/grpc_health_v1", diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/context.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/context.go index 2f2b342431..00b2228a1d 100644 --- a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/context.go +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/context.go @@ -201,13 +201,13 @@ func annotateContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcM if timeout != 0 { ctx, _ = context.WithTimeout(ctx, timeout) } - if len(pairs) == 0 { - return ctx, nil, nil - } md := metadata.Pairs(pairs...) for _, mda := range mux.metadataAnnotators { md = metadata.Join(md, mda(ctx, req)) } + if len(md) == 0 { + return ctx, nil, nil + } return ctx, md, nil } diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/marshal_jsonpb.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/marshal_jsonpb.go index 8376d1e0ef..3d07063007 100644 --- a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/marshal_jsonpb.go +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/marshal_jsonpb.go @@ -66,7 +66,7 @@ func (j *JSONPb) marshalTo(w io.Writer, v interface{}) error { var ( // protoMessageType is stored to prevent constant lookup of the same type at runtime. - protoMessageType = reflect.TypeOf((*proto.Message)(nil)).Elem() + protoMessageType = reflect.TypeFor[proto.Message]() ) // marshalNonProto marshals a non-message field of a protobuf message. @@ -325,9 +325,9 @@ type protoEnum interface { EnumDescriptor() ([]byte, []int) } -var typeProtoEnum = reflect.TypeOf((*protoEnum)(nil)).Elem() +var typeProtoEnum = reflect.TypeFor[protoEnum]() -var typeProtoMessage = reflect.TypeOf((*proto.Message)(nil)).Elem() +var typeProtoMessage = reflect.TypeFor[proto.Message]() // Delimiter for newline encoded JSON streams. func (j *JSONPb) Delimiter() []byte { diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/mux.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/mux.go index 19255ec441..3eb1616717 100644 --- a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/mux.go +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/mux.go @@ -10,6 +10,7 @@ import ( "strings" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule" + "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/health/grpc_health_v1" @@ -281,12 +282,19 @@ func WithHealthEndpointAt(healthCheckClient grpc_health_v1.HealthClient, endpoin http.MethodGet, endpointPath, func(w http.ResponseWriter, r *http.Request, _ map[string]string, ) { _, outboundMarshaler := MarshalerForRequest(s, r) + annotatedContext, err := AnnotateContext(r.Context(), s, r, grpc_health_v1.Health_Check_FullMethodName, WithHTTPPathPattern(endpointPath)) + if err != nil { + s.errorHandler(r.Context(), s, outboundMarshaler, w, r, err) + return + } - resp, err := healthCheckClient.Check(r.Context(), &grpc_health_v1.HealthCheckRequest{ + var md ServerMetadata + resp, err := healthCheckClient.Check(annotatedContext, &grpc_health_v1.HealthCheckRequest{ Service: r.URL.Query().Get("service"), - }) + }, grpc.Header(&md.HeaderMD), grpc.Trailer(&md.TrailerMD)) + annotatedContext = NewServerMetadataContext(annotatedContext, md) if err != nil { - s.errorHandler(r.Context(), s, outboundMarshaler, w, r, err) + s.errorHandler(annotatedContext, s, outboundMarshaler, w, r, err) return } @@ -300,7 +308,7 @@ func WithHealthEndpointAt(healthCheckClient grpc_health_v1.HealthClient, endpoin err = status.Error(codes.NotFound, resp.String()) } - s.errorHandler(r.Context(), s, outboundMarshaler, w, r, err) + s.errorHandler(annotatedContext, s, outboundMarshaler, w, r, err) return } diff --git a/vendor/github.com/grpc-ecosystem/grpc-health-probe/README.md b/vendor/github.com/grpc-ecosystem/grpc-health-probe/README.md index 04000f0470..fc659ebb56 100644 --- a/vendor/github.com/grpc-ecosystem/grpc-health-probe/README.md +++ b/vendor/github.com/grpc-ecosystem/grpc-health-probe/README.md @@ -48,20 +48,20 @@ Installing from source (not recommended): ## Using the gRPC Health Checking Protocol To make use of the `grpc_health_probe`, your application must implement the -[gRPC Health Checking Protocol v1][hc]. This means you must to register the +[gRPC Health Checking Protocol v1][hc]. This means you must register the `Health` service and implement the `rpc Check` that returns a `SERVING` status. Since the Health Checking protocol is part of the gRPC core, it has packages/libraries available for the languages supported by gRPC: [[health.proto](https://github.com/grpc/grpc/blob/master/src/proto/grpc/health/v1/health.proto)] -[[Go](https://godoc.org/google.golang.org/grpc/health/grpc_health_v1)] +[[Go](https://pkg.go.dev/google.golang.org/grpc/health/grpc_health_v1)] [[Java](https://github.com/grpc/grpc-java/blob/master/services/src/generated/main/grpc/io/grpc/health/v1/HealthGrpc.java)] [[Python](https://github.com/grpc/grpc/tree/master/src/python/grpcio_health_checking)] [[C#](https://github.com/grpc/grpc/tree/master/src/csharp/Grpc.HealthCheck)/[NuGet](https://www.nuget.org/packages/Grpc.HealthCheck/)] [[Ruby](https://www.rubydoc.info/gems/grpc/Grpc/Health/Checker)] ... -Most of the languages listed above provide helper functions that hides +Most of the languages listed above provide helper functions that hide implementation details. This eliminates the need for you to implement the `Check` rpc yourself. @@ -69,7 +69,7 @@ implementation details. This eliminates the need for you to implement the Kubernetes now supports [gRPC health checking][k8s]. If your cluster is running a version that supports gRPC health checking, you can define a gRPC liveness probe in your Pod specification. For more information on how to define a gRPC liveness probe in Kubernetes, see the [Kubernetes documentation][k8s-new]. -However, if your Kubernetes version does not support gRPC health checking or if you want to use some advanced features that Kubernetes does not support, you can use `grpc_health_probe` to health-check your gRPC server. As a solution, +However, if your Kubernetes version does not support gRPC health checking or if you want to use some advanced features that Kubernetes does not support, you can use `grpc_health_probe` to health-check your gRPC server. As a solution, `grpc_health_probe` [can be used for Kubernetes][k8s] to health-check gRPC servers running in the Pod. @@ -112,7 +112,7 @@ spec: initialDelaySeconds: 10 ``` -This approach provide proper readiness/liveness checking to your applications +This approach provides proper readiness/liveness checking to your applications that implement the [gRPC Health Checking Protocol][hc]. ## Health Checking TLS Servers @@ -132,7 +132,7 @@ with command-line options: ## Health checking TLS Servers with SPIFFE issued credentials -If your gRPC server requires authentication, you can use the following command line options and set the +If your gRPC server requires authentication, you can use the following command line options and set the [SPIFFE_ENDPOINT_SOCKET][spiffe-socket] environment variable. diff --git a/vendor/github.com/grpc-ecosystem/grpc-health-probe/main.go b/vendor/github.com/grpc-ecosystem/grpc-health-probe/main.go index 7a30f72cb3..512cb8ed66 100644 --- a/vendor/github.com/grpc-ecosystem/grpc-health-probe/main.go +++ b/vendor/github.com/grpc-ecosystem/grpc-health-probe/main.go @@ -19,7 +19,6 @@ import ( "crypto/x509" "flag" "fmt" - "io/ioutil" "log" "os" "os/signal" @@ -199,7 +198,7 @@ func buildCredentials(skipVerify bool, caCerts, clientCert, clientKey, serverNam } else if caCerts != "" { // override system roots rootCAs := x509.NewCertPool() - pem, err := ioutil.ReadFile(caCerts) + pem, err := os.ReadFile(caCerts) if err != nil { return nil, fmt.Errorf("failed to load root CA certificates from file (%s) error=%v", caCerts, err) } diff --git a/vendor/github.com/letsencrypt/boulder/LICENSE.txt b/vendor/github.com/letsencrypt/boulder/LICENSE.txt deleted file mode 100644 index fa274d92d7..0000000000 --- a/vendor/github.com/letsencrypt/boulder/LICENSE.txt +++ /dev/null @@ -1,375 +0,0 @@ -Copyright 2016 ISRG. All rights reserved. - -Mozilla Public License Version 2.0 -================================== - -1. Definitions --------------- - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. diff --git a/vendor/github.com/letsencrypt/boulder/core/challenges.go b/vendor/github.com/letsencrypt/boulder/core/challenges.go deleted file mode 100644 index d5e7a87295..0000000000 --- a/vendor/github.com/letsencrypt/boulder/core/challenges.go +++ /dev/null @@ -1,41 +0,0 @@ -package core - -import "fmt" - -func newChallenge(challengeType AcmeChallenge, token string) Challenge { - return Challenge{ - Type: challengeType, - Status: StatusPending, - Token: token, - } -} - -// HTTPChallenge01 constructs a http-01 challenge. -func HTTPChallenge01(token string) Challenge { - return newChallenge(ChallengeTypeHTTP01, token) -} - -// DNSChallenge01 constructs a dns-01 challenge. -func DNSChallenge01(token string) Challenge { - return newChallenge(ChallengeTypeDNS01, token) -} - -// TLSALPNChallenge01 constructs a tls-alpn-01 challenge. -func TLSALPNChallenge01(token string) Challenge { - return newChallenge(ChallengeTypeTLSALPN01, token) -} - -// NewChallenge constructs a challenge of the given kind. It returns an -// error if the challenge type is unrecognized. -func NewChallenge(kind AcmeChallenge, token string) (Challenge, error) { - switch kind { - case ChallengeTypeHTTP01: - return HTTPChallenge01(token), nil - case ChallengeTypeDNS01: - return DNSChallenge01(token), nil - case ChallengeTypeTLSALPN01: - return TLSALPNChallenge01(token), nil - default: - return Challenge{}, fmt.Errorf("unrecognized challenge type %q", kind) - } -} diff --git a/vendor/github.com/letsencrypt/boulder/core/interfaces.go b/vendor/github.com/letsencrypt/boulder/core/interfaces.go deleted file mode 100644 index 1b3a1eedd2..0000000000 --- a/vendor/github.com/letsencrypt/boulder/core/interfaces.go +++ /dev/null @@ -1,14 +0,0 @@ -package core - -import ( - "github.com/letsencrypt/boulder/identifier" -) - -// PolicyAuthority defines the public interface for the Boulder PA -// TODO(#5891): Move this interface to a more appropriate location. -type PolicyAuthority interface { - WillingToIssue(identifier.ACMEIdentifiers) error - ChallengeTypesFor(identifier.ACMEIdentifier) ([]AcmeChallenge, error) - ChallengeTypeEnabled(AcmeChallenge) bool - CheckAuthzChallenges(*Authorization) error -} diff --git a/vendor/github.com/letsencrypt/boulder/core/objects.go b/vendor/github.com/letsencrypt/boulder/core/objects.go deleted file mode 100644 index 474d0bcba5..0000000000 --- a/vendor/github.com/letsencrypt/boulder/core/objects.go +++ /dev/null @@ -1,504 +0,0 @@ -package core - -import ( - "crypto" - "encoding/base64" - "encoding/json" - "fmt" - "hash/fnv" - "net/netip" - "strings" - "time" - - "github.com/go-jose/go-jose/v4" - "golang.org/x/crypto/ocsp" - - "github.com/letsencrypt/boulder/identifier" - "github.com/letsencrypt/boulder/probs" - "github.com/letsencrypt/boulder/revocation" -) - -// AcmeStatus defines the state of a given authorization -type AcmeStatus string - -// These statuses are the states of authorizations, challenges, and registrations -const ( - StatusUnknown = AcmeStatus("unknown") // Unknown status; the default - StatusPending = AcmeStatus("pending") // In process; client has next action - StatusProcessing = AcmeStatus("processing") // In process; server has next action - StatusReady = AcmeStatus("ready") // Order is ready for finalization - StatusValid = AcmeStatus("valid") // Object is valid - StatusInvalid = AcmeStatus("invalid") // Validation failed - StatusRevoked = AcmeStatus("revoked") // Object no longer valid - StatusDeactivated = AcmeStatus("deactivated") // Object has been deactivated -) - -// AcmeResource values identify different types of ACME resources -type AcmeResource string - -// The types of ACME resources -const ( - ResourceNewReg = AcmeResource("new-reg") - ResourceNewAuthz = AcmeResource("new-authz") - ResourceNewCert = AcmeResource("new-cert") - ResourceRevokeCert = AcmeResource("revoke-cert") - ResourceRegistration = AcmeResource("reg") - ResourceChallenge = AcmeResource("challenge") - ResourceAuthz = AcmeResource("authz") - ResourceKeyChange = AcmeResource("key-change") -) - -// AcmeChallenge values identify different types of ACME challenges -type AcmeChallenge string - -// These types are the available challenges -const ( - ChallengeTypeHTTP01 = AcmeChallenge("http-01") - ChallengeTypeDNS01 = AcmeChallenge("dns-01") - ChallengeTypeTLSALPN01 = AcmeChallenge("tls-alpn-01") -) - -// IsValid tests whether the challenge is a known challenge -func (c AcmeChallenge) IsValid() bool { - switch c { - case ChallengeTypeHTTP01, ChallengeTypeDNS01, ChallengeTypeTLSALPN01: - return true - default: - return false - } -} - -// OCSPStatus defines the state of OCSP for a certificate -type OCSPStatus string - -// These status are the states of OCSP -const ( - OCSPStatusGood = OCSPStatus("good") - OCSPStatusRevoked = OCSPStatus("revoked") - // Not a real OCSP status. This is a placeholder we write before the - // actual precertificate is issued, to ensure we never return "good" before - // issuance succeeds, for BR compliance reasons. - OCSPStatusNotReady = OCSPStatus("wait") -) - -var OCSPStatusToInt = map[OCSPStatus]int{ - OCSPStatusGood: ocsp.Good, - OCSPStatusRevoked: ocsp.Revoked, - OCSPStatusNotReady: -1, -} - -// DNSPrefix is attached to DNS names in DNS challenges -const DNSPrefix = "_acme-challenge" - -type RawCertificateRequest struct { - CSR JSONBuffer `json:"csr"` // The encoded CSR -} - -// Registration objects represent non-public metadata attached -// to account keys. -type Registration struct { - // Unique identifier - ID int64 `json:"id,omitempty"` - - // Account key to which the details are attached - Key *jose.JSONWebKey `json:"key"` - - // Contact URIs - Contact *[]string `json:"contact,omitempty"` - - // Agreement with terms of service - Agreement string `json:"agreement,omitempty"` - - // CreatedAt is the time the registration was created. - CreatedAt *time.Time `json:"createdAt,omitempty"` - - Status AcmeStatus `json:"status"` -} - -// ValidationRecord represents a validation attempt against a specific URL/hostname -// and the IP addresses that were resolved and used. -type ValidationRecord struct { - // SimpleHTTP only - URL string `json:"url,omitempty"` - - // Shared - // - // Hostname can hold either a DNS name or an IP address. - Hostname string `json:"hostname,omitempty"` - Port string `json:"port,omitempty"` - AddressesResolved []netip.Addr `json:"addressesResolved,omitempty"` - AddressUsed netip.Addr `json:"addressUsed,omitempty"` - - // AddressesTried contains a list of addresses tried before the `AddressUsed`. - // Presently this will only ever be one IP from `AddressesResolved` since the - // only retry is in the case of a v6 failure with one v4 fallback. E.g. if - // a record with `AddressesResolved: { 127.0.0.1, ::1 }` were processed for - // a challenge validation with the IPv6 first flag on and the ::1 address - // failed but the 127.0.0.1 retry succeeded then the record would end up - // being: - // { - // ... - // AddressesResolved: [ 127.0.0.1, ::1 ], - // AddressUsed: 127.0.0.1 - // AddressesTried: [ ::1 ], - // ... - // } - AddressesTried []netip.Addr `json:"addressesTried,omitempty"` - - // ResolverAddrs is the host:port of the DNS resolver(s) that fulfilled the - // lookup for AddressUsed. During recursive A and AAAA lookups, a record may - // instead look like A:host:port or AAAA:host:port - ResolverAddrs []string `json:"resolverAddrs,omitempty"` -} - -// Challenge is an aggregate of all data needed for any challenges. -// -// Rather than define individual types for different types of -// challenge, we just throw all the elements into one bucket, -// together with the common metadata elements. -type Challenge struct { - // Type is the type of challenge encoded in this object. - Type AcmeChallenge `json:"type"` - - // URL is the URL to which a response can be posted. Required for all types. - URL string `json:"url,omitempty"` - - // Status is the status of this challenge. Required for all types. - Status AcmeStatus `json:"status,omitempty"` - - // Validated is the time at which the server validated the challenge. Required - // if status is valid. - Validated *time.Time `json:"validated,omitempty"` - - // Error contains the error that occurred during challenge validation, if any. - // If set, the Status must be "invalid". - Error *probs.ProblemDetails `json:"error,omitempty"` - - // Token is a random value that uniquely identifies the challenge. It is used - // by all current challenges (http-01, tls-alpn-01, and dns-01). - Token string `json:"token,omitempty"` - - // Contains information about URLs used or redirected to and IPs resolved and - // used - ValidationRecord []ValidationRecord `json:"validationRecord,omitempty"` -} - -// ExpectedKeyAuthorization computes the expected KeyAuthorization value for -// the challenge. -func (ch Challenge) ExpectedKeyAuthorization(key *jose.JSONWebKey) (string, error) { - if key == nil { - return "", fmt.Errorf("Cannot authorize a nil key") - } - - thumbprint, err := key.Thumbprint(crypto.SHA256) - if err != nil { - return "", err - } - - return ch.Token + "." + base64.RawURLEncoding.EncodeToString(thumbprint), nil -} - -// RecordsSane checks the sanity of a ValidationRecord object before sending it -// back to the RA to be stored. -func (ch Challenge) RecordsSane() bool { - if len(ch.ValidationRecord) == 0 { - return false - } - - switch ch.Type { - case ChallengeTypeHTTP01: - for _, rec := range ch.ValidationRecord { - // TODO(#7140): Add a check for ResolverAddress == "" only after the - // core.proto change has been deployed. - if rec.URL == "" || rec.Hostname == "" || rec.Port == "" || (rec.AddressUsed == netip.Addr{}) || - len(rec.AddressesResolved) == 0 { - return false - } - } - case ChallengeTypeTLSALPN01: - if len(ch.ValidationRecord) > 1 { - return false - } - if ch.ValidationRecord[0].URL != "" { - return false - } - // TODO(#7140): Add a check for ResolverAddress == "" only after the - // core.proto change has been deployed. - if ch.ValidationRecord[0].Hostname == "" || ch.ValidationRecord[0].Port == "" || - (ch.ValidationRecord[0].AddressUsed == netip.Addr{}) || len(ch.ValidationRecord[0].AddressesResolved) == 0 { - return false - } - case ChallengeTypeDNS01: - if len(ch.ValidationRecord) > 1 { - return false - } - // TODO(#7140): Add a check for ResolverAddress == "" only after the - // core.proto change has been deployed. - if ch.ValidationRecord[0].Hostname == "" { - return false - } - return true - default: // Unsupported challenge type - return false - } - - return true -} - -// CheckPending ensures that a challenge object is pending and has a token. -// This is used before offering the challenge to the client, and before actually -// validating a challenge. -func (ch Challenge) CheckPending() error { - if ch.Status != StatusPending { - return fmt.Errorf("challenge is not pending") - } - - if !looksLikeAToken(ch.Token) { - return fmt.Errorf("token is missing or malformed") - } - - return nil -} - -// StringID is used to generate a ID for challenges associated with new style authorizations. -// This is necessary as these challenges no longer have a unique non-sequential identifier -// in the new storage scheme. This identifier is generated by constructing a fnv hash over the -// challenge token and type and encoding the first 4 bytes of it using the base64 URL encoding. -func (ch Challenge) StringID() string { - h := fnv.New128a() - h.Write([]byte(ch.Token)) - h.Write([]byte(ch.Type)) - return base64.RawURLEncoding.EncodeToString(h.Sum(nil)[0:4]) -} - -// Authorization represents the authorization of an account key holder to act on -// behalf of an identifier. This struct is intended to be used both internally -// and for JSON marshaling on the wire. Any fields that should be suppressed on -// the wire (e.g., ID, regID) must be made empty before marshaling. -type Authorization struct { - // An identifier for this authorization, unique across - // authorizations and certificates within this instance. - ID string `json:"-"` - - // The identifier for which authorization is being given - Identifier identifier.ACMEIdentifier `json:"identifier,omitempty"` - - // The registration ID associated with the authorization - RegistrationID int64 `json:"-"` - - // The status of the validation of this authorization - Status AcmeStatus `json:"status,omitempty"` - - // The date after which this authorization will be no - // longer be considered valid. Note: a certificate may be issued even on the - // last day of an authorization's lifetime. The last day for which someone can - // hold a valid certificate based on an authorization is authorization - // lifetime + certificate lifetime. - Expires *time.Time `json:"expires,omitempty"` - - // An array of challenges objects used to validate the - // applicant's control of the identifier. For authorizations - // in process, these are challenges to be fulfilled; for - // final authorizations, they describe the evidence that - // the server used in support of granting the authorization. - // - // There should only ever be one challenge of each type in this - // slice and the order of these challenges may not be predictable. - Challenges []Challenge `json:"challenges,omitempty"` - - // https://datatracker.ietf.org/doc/html/rfc8555#page-29 - // - // wildcard (optional, boolean): This field MUST be present and true - // for authorizations created as a result of a newOrder request - // containing a DNS identifier with a value that was a wildcard - // domain name. For other authorizations, it MUST be absent. - // Wildcard domain names are described in Section 7.1.3. - // - // This is not represented in the database because we calculate it from - // the identifier stored in the database. Unlike the identifier returned - // as part of the authorization, the identifier we store in the database - // can contain an asterisk. - Wildcard bool `json:"wildcard,omitempty"` - - // CertificateProfileName is the name of the profile associated with the - // order that first resulted in the creation of this authorization. Omitted - // from API responses. - CertificateProfileName string `json:"-"` -} - -// FindChallengeByStringID will look for a challenge matching the given ID inside -// this authorization. If found, it will return the index of that challenge within -// the Authorization's Challenges array. Otherwise it will return -1. -func (authz *Authorization) FindChallengeByStringID(id string) int { - for i, c := range authz.Challenges { - if c.StringID() == id { - return i - } - } - return -1 -} - -// SolvedBy will look through the Authorizations challenges, returning the type -// of the *first* challenge it finds with Status: valid, or an error if no -// challenge is valid. -func (authz *Authorization) SolvedBy() (AcmeChallenge, error) { - if len(authz.Challenges) == 0 { - return "", fmt.Errorf("authorization has no challenges") - } - for _, chal := range authz.Challenges { - if chal.Status == StatusValid { - return chal.Type, nil - } - } - return "", fmt.Errorf("authorization not solved by any challenge") -} - -// JSONBuffer fields get encoded and decoded JOSE-style, in base64url encoding -// with stripped padding. -type JSONBuffer []byte - -// MarshalJSON encodes a JSONBuffer for transmission. -func (jb JSONBuffer) MarshalJSON() (result []byte, err error) { - return json.Marshal(base64.RawURLEncoding.EncodeToString(jb)) -} - -// UnmarshalJSON decodes a JSONBuffer to an object. -func (jb *JSONBuffer) UnmarshalJSON(data []byte) (err error) { - var str string - err = json.Unmarshal(data, &str) - if err != nil { - return err - } - *jb, err = base64.RawURLEncoding.DecodeString(strings.TrimRight(str, "=")) - return -} - -// Certificate objects are entirely internal to the server. The only -// thing exposed on the wire is the certificate itself. -type Certificate struct { - ID int64 `db:"id"` - RegistrationID int64 `db:"registrationID"` - - Serial string `db:"serial"` - Digest string `db:"digest"` - DER []byte `db:"der"` - Issued time.Time `db:"issued"` - Expires time.Time `db:"expires"` -} - -// CertificateStatus structs are internal to the server. They represent the -// latest data about the status of the certificate, required for generating new -// OCSP responses and determining if a certificate has been revoked. -type CertificateStatus struct { - ID int64 `db:"id"` - - Serial string `db:"serial"` - - // status: 'good' or 'revoked'. Note that good, expired certificates remain - // with status 'good' but don't necessarily get fresh OCSP responses. - Status OCSPStatus `db:"status"` - - // ocspLastUpdated: The date and time of the last time we generated an OCSP - // response. If we have never generated one, this has the zero value of - // time.Time, i.e. Jan 1 1970. - OCSPLastUpdated time.Time `db:"ocspLastUpdated"` - - // revokedDate: If status is 'revoked', this is the date and time it was - // revoked. Otherwise it has the zero value of time.Time, i.e. Jan 1 1970. - RevokedDate time.Time `db:"revokedDate"` - - // revokedReason: If status is 'revoked', this is the reason code for the - // revocation. Otherwise it is zero (which happens to be the reason - // code for 'unspecified'). - RevokedReason revocation.Reason `db:"revokedReason"` - - LastExpirationNagSent time.Time `db:"lastExpirationNagSent"` - - // NotAfter and IsExpired are convenience columns which allow expensive - // queries to quickly filter out certificates that we don't need to care about - // anymore. These are particularly useful for the expiration mailer and CRL - // updater. See https://github.com/letsencrypt/boulder/issues/1864. - NotAfter time.Time `db:"notAfter"` - IsExpired bool `db:"isExpired"` - - // Note: this is not an issuance.IssuerNameID because that would create an - // import cycle between core and issuance. - // Note2: This field used to be called `issuerID`. We keep the old name in - // the DB, but update the Go field name to be clear which type of ID this - // is. - IssuerNameID int64 `db:"issuerID"` -} - -// FQDNSet contains the SHA256 hash of the lowercased, comma joined dNSNames -// contained in a certificate. -type FQDNSet struct { - ID int64 - SetHash []byte - Serial string - Issued time.Time - Expires time.Time -} - -// SCTDERs is a convenience type -type SCTDERs [][]byte - -// CertDER is a convenience type that helps differentiate what the -// underlying byte slice contains -type CertDER []byte - -// SuggestedWindow is a type exposed inside the RenewalInfo resource. -type SuggestedWindow struct { - Start time.Time `json:"start"` - End time.Time `json:"end"` -} - -// IsWithin returns true if the given time is within the suggested window, -// inclusive of the start time and exclusive of the end time. -func (window SuggestedWindow) IsWithin(now time.Time) bool { - return !now.Before(window.Start) && now.Before(window.End) -} - -// RenewalInfo is a type which is exposed to clients which query the renewalInfo -// endpoint specified in draft-aaron-ari. -type RenewalInfo struct { - SuggestedWindow SuggestedWindow `json:"suggestedWindow"` - ExplanationURL string `json:"explanationURL,omitempty"` -} - -// RenewalInfoSimple constructs a `RenewalInfo` object and suggested window -// using a very simple renewal calculation: calculate a point 2/3rds of the way -// through the validity period (or halfway through, for short-lived certs), then -// give a 2%-of-validity wide window around that. Both the `issued` and -// `expires` timestamps are expected to be UTC. -func RenewalInfoSimple(issued time.Time, expires time.Time) RenewalInfo { - validity := expires.Add(time.Second).Sub(issued) - renewalOffset := validity / time.Duration(3) - if validity < 10*24*time.Hour { - renewalOffset = validity / time.Duration(2) - } - idealRenewal := expires.Add(-renewalOffset) - margin := validity / time.Duration(100) - return RenewalInfo{ - SuggestedWindow: SuggestedWindow{ - Start: idealRenewal.Add(-1 * margin).Truncate(time.Second), - End: idealRenewal.Add(margin).Truncate(time.Second), - }, - } -} - -// RenewalInfoImmediate constructs a `RenewalInfo` object with a suggested -// window in the past. Per the draft-ietf-acme-ari-01 spec, clients should -// attempt to renew immediately if the suggested window is in the past. The -// passed `now` is assumed to be a timestamp representing the current moment in -// time. The `explanationURL` is an optional URL that the subscriber can use to -// learn more about why the renewal is suggested. -func RenewalInfoImmediate(now time.Time, explanationURL string) RenewalInfo { - oneHourAgo := now.Add(-1 * time.Hour) - return RenewalInfo{ - SuggestedWindow: SuggestedWindow{ - Start: oneHourAgo.Truncate(time.Second), - End: oneHourAgo.Add(time.Minute * 30).Truncate(time.Second), - }, - ExplanationURL: explanationURL, - } -} diff --git a/vendor/github.com/letsencrypt/boulder/core/proto/core.pb.go b/vendor/github.com/letsencrypt/boulder/core/proto/core.pb.go deleted file mode 100644 index f19e6df930..0000000000 --- a/vendor/github.com/letsencrypt/boulder/core/proto/core.pb.go +++ /dev/null @@ -1,1164 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.36.5 -// protoc v3.20.1 -// source: core.proto - -package proto - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" - unsafe "unsafe" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type Identifier struct { - state protoimpl.MessageState `protogen:"open.v1"` - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *Identifier) Reset() { - *x = Identifier{} - mi := &file_core_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Identifier) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Identifier) ProtoMessage() {} - -func (x *Identifier) ProtoReflect() protoreflect.Message { - mi := &file_core_proto_msgTypes[0] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Identifier.ProtoReflect.Descriptor instead. -func (*Identifier) Descriptor() ([]byte, []int) { - return file_core_proto_rawDescGZIP(), []int{0} -} - -func (x *Identifier) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -func (x *Identifier) GetValue() string { - if x != nil { - return x.Value - } - return "" -} - -type Challenge struct { - state protoimpl.MessageState `protogen:"open.v1"` - Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - // Fields specified by RFC 8555, Section 8. - Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` - Url string `protobuf:"bytes,9,opt,name=url,proto3" json:"url,omitempty"` - Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` - Validated *timestamppb.Timestamp `protobuf:"bytes,12,opt,name=validated,proto3" json:"validated,omitempty"` - Error *ProblemDetails `protobuf:"bytes,7,opt,name=error,proto3" json:"error,omitempty"` - // Fields specified by individual validation methods. - Token string `protobuf:"bytes,3,opt,name=token,proto3" json:"token,omitempty"` - // Additional fields for our own record keeping. - Validationrecords []*ValidationRecord `protobuf:"bytes,10,rep,name=validationrecords,proto3" json:"validationrecords,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *Challenge) Reset() { - *x = Challenge{} - mi := &file_core_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Challenge) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Challenge) ProtoMessage() {} - -func (x *Challenge) ProtoReflect() protoreflect.Message { - mi := &file_core_proto_msgTypes[1] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Challenge.ProtoReflect.Descriptor instead. -func (*Challenge) Descriptor() ([]byte, []int) { - return file_core_proto_rawDescGZIP(), []int{1} -} - -func (x *Challenge) GetId() int64 { - if x != nil { - return x.Id - } - return 0 -} - -func (x *Challenge) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -func (x *Challenge) GetUrl() string { - if x != nil { - return x.Url - } - return "" -} - -func (x *Challenge) GetStatus() string { - if x != nil { - return x.Status - } - return "" -} - -func (x *Challenge) GetValidated() *timestamppb.Timestamp { - if x != nil { - return x.Validated - } - return nil -} - -func (x *Challenge) GetError() *ProblemDetails { - if x != nil { - return x.Error - } - return nil -} - -func (x *Challenge) GetToken() string { - if x != nil { - return x.Token - } - return "" -} - -func (x *Challenge) GetValidationrecords() []*ValidationRecord { - if x != nil { - return x.Validationrecords - } - return nil -} - -type ValidationRecord struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Next unused field number: 9 - Hostname string `protobuf:"bytes,1,opt,name=hostname,proto3" json:"hostname,omitempty"` - Port string `protobuf:"bytes,2,opt,name=port,proto3" json:"port,omitempty"` - AddressesResolved [][]byte `protobuf:"bytes,3,rep,name=addressesResolved,proto3" json:"addressesResolved,omitempty"` // netip.Addr.MarshalText() - AddressUsed []byte `protobuf:"bytes,4,opt,name=addressUsed,proto3" json:"addressUsed,omitempty"` // netip.Addr.MarshalText() - Authorities []string `protobuf:"bytes,5,rep,name=authorities,proto3" json:"authorities,omitempty"` - Url string `protobuf:"bytes,6,opt,name=url,proto3" json:"url,omitempty"` - // A list of addresses tried before the address used (see - // core/objects.go and the comment on the ValidationRecord structure - // definition for more information. - AddressesTried [][]byte `protobuf:"bytes,7,rep,name=addressesTried,proto3" json:"addressesTried,omitempty"` // netip.Addr.MarshalText() - ResolverAddrs []string `protobuf:"bytes,8,rep,name=resolverAddrs,proto3" json:"resolverAddrs,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ValidationRecord) Reset() { - *x = ValidationRecord{} - mi := &file_core_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ValidationRecord) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ValidationRecord) ProtoMessage() {} - -func (x *ValidationRecord) ProtoReflect() protoreflect.Message { - mi := &file_core_proto_msgTypes[2] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ValidationRecord.ProtoReflect.Descriptor instead. -func (*ValidationRecord) Descriptor() ([]byte, []int) { - return file_core_proto_rawDescGZIP(), []int{2} -} - -func (x *ValidationRecord) GetHostname() string { - if x != nil { - return x.Hostname - } - return "" -} - -func (x *ValidationRecord) GetPort() string { - if x != nil { - return x.Port - } - return "" -} - -func (x *ValidationRecord) GetAddressesResolved() [][]byte { - if x != nil { - return x.AddressesResolved - } - return nil -} - -func (x *ValidationRecord) GetAddressUsed() []byte { - if x != nil { - return x.AddressUsed - } - return nil -} - -func (x *ValidationRecord) GetAuthorities() []string { - if x != nil { - return x.Authorities - } - return nil -} - -func (x *ValidationRecord) GetUrl() string { - if x != nil { - return x.Url - } - return "" -} - -func (x *ValidationRecord) GetAddressesTried() [][]byte { - if x != nil { - return x.AddressesTried - } - return nil -} - -func (x *ValidationRecord) GetResolverAddrs() []string { - if x != nil { - return x.ResolverAddrs - } - return nil -} - -type ProblemDetails struct { - state protoimpl.MessageState `protogen:"open.v1"` - ProblemType string `protobuf:"bytes,1,opt,name=problemType,proto3" json:"problemType,omitempty"` - Detail string `protobuf:"bytes,2,opt,name=detail,proto3" json:"detail,omitempty"` - HttpStatus int32 `protobuf:"varint,3,opt,name=httpStatus,proto3" json:"httpStatus,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ProblemDetails) Reset() { - *x = ProblemDetails{} - mi := &file_core_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProblemDetails) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProblemDetails) ProtoMessage() {} - -func (x *ProblemDetails) ProtoReflect() protoreflect.Message { - mi := &file_core_proto_msgTypes[3] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProblemDetails.ProtoReflect.Descriptor instead. -func (*ProblemDetails) Descriptor() ([]byte, []int) { - return file_core_proto_rawDescGZIP(), []int{3} -} - -func (x *ProblemDetails) GetProblemType() string { - if x != nil { - return x.ProblemType - } - return "" -} - -func (x *ProblemDetails) GetDetail() string { - if x != nil { - return x.Detail - } - return "" -} - -func (x *ProblemDetails) GetHttpStatus() int32 { - if x != nil { - return x.HttpStatus - } - return 0 -} - -type Certificate struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Next unused field number: 9 - RegistrationID int64 `protobuf:"varint,1,opt,name=registrationID,proto3" json:"registrationID,omitempty"` - Serial string `protobuf:"bytes,2,opt,name=serial,proto3" json:"serial,omitempty"` - Digest string `protobuf:"bytes,3,opt,name=digest,proto3" json:"digest,omitempty"` - Der []byte `protobuf:"bytes,4,opt,name=der,proto3" json:"der,omitempty"` - Issued *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=issued,proto3" json:"issued,omitempty"` - Expires *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=expires,proto3" json:"expires,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *Certificate) Reset() { - *x = Certificate{} - mi := &file_core_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Certificate) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Certificate) ProtoMessage() {} - -func (x *Certificate) ProtoReflect() protoreflect.Message { - mi := &file_core_proto_msgTypes[4] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Certificate.ProtoReflect.Descriptor instead. -func (*Certificate) Descriptor() ([]byte, []int) { - return file_core_proto_rawDescGZIP(), []int{4} -} - -func (x *Certificate) GetRegistrationID() int64 { - if x != nil { - return x.RegistrationID - } - return 0 -} - -func (x *Certificate) GetSerial() string { - if x != nil { - return x.Serial - } - return "" -} - -func (x *Certificate) GetDigest() string { - if x != nil { - return x.Digest - } - return "" -} - -func (x *Certificate) GetDer() []byte { - if x != nil { - return x.Der - } - return nil -} - -func (x *Certificate) GetIssued() *timestamppb.Timestamp { - if x != nil { - return x.Issued - } - return nil -} - -func (x *Certificate) GetExpires() *timestamppb.Timestamp { - if x != nil { - return x.Expires - } - return nil -} - -type CertificateStatus struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Next unused field number: 16 - Serial string `protobuf:"bytes,1,opt,name=serial,proto3" json:"serial,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - OcspLastUpdated *timestamppb.Timestamp `protobuf:"bytes,15,opt,name=ocspLastUpdated,proto3" json:"ocspLastUpdated,omitempty"` - RevokedDate *timestamppb.Timestamp `protobuf:"bytes,12,opt,name=revokedDate,proto3" json:"revokedDate,omitempty"` - RevokedReason int64 `protobuf:"varint,6,opt,name=revokedReason,proto3" json:"revokedReason,omitempty"` - LastExpirationNagSent *timestamppb.Timestamp `protobuf:"bytes,13,opt,name=lastExpirationNagSent,proto3" json:"lastExpirationNagSent,omitempty"` - NotAfter *timestamppb.Timestamp `protobuf:"bytes,14,opt,name=notAfter,proto3" json:"notAfter,omitempty"` - IsExpired bool `protobuf:"varint,10,opt,name=isExpired,proto3" json:"isExpired,omitempty"` - IssuerID int64 `protobuf:"varint,11,opt,name=issuerID,proto3" json:"issuerID,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *CertificateStatus) Reset() { - *x = CertificateStatus{} - mi := &file_core_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *CertificateStatus) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CertificateStatus) ProtoMessage() {} - -func (x *CertificateStatus) ProtoReflect() protoreflect.Message { - mi := &file_core_proto_msgTypes[5] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CertificateStatus.ProtoReflect.Descriptor instead. -func (*CertificateStatus) Descriptor() ([]byte, []int) { - return file_core_proto_rawDescGZIP(), []int{5} -} - -func (x *CertificateStatus) GetSerial() string { - if x != nil { - return x.Serial - } - return "" -} - -func (x *CertificateStatus) GetStatus() string { - if x != nil { - return x.Status - } - return "" -} - -func (x *CertificateStatus) GetOcspLastUpdated() *timestamppb.Timestamp { - if x != nil { - return x.OcspLastUpdated - } - return nil -} - -func (x *CertificateStatus) GetRevokedDate() *timestamppb.Timestamp { - if x != nil { - return x.RevokedDate - } - return nil -} - -func (x *CertificateStatus) GetRevokedReason() int64 { - if x != nil { - return x.RevokedReason - } - return 0 -} - -func (x *CertificateStatus) GetLastExpirationNagSent() *timestamppb.Timestamp { - if x != nil { - return x.LastExpirationNagSent - } - return nil -} - -func (x *CertificateStatus) GetNotAfter() *timestamppb.Timestamp { - if x != nil { - return x.NotAfter - } - return nil -} - -func (x *CertificateStatus) GetIsExpired() bool { - if x != nil { - return x.IsExpired - } - return false -} - -func (x *CertificateStatus) GetIssuerID() int64 { - if x != nil { - return x.IssuerID - } - return 0 -} - -type Registration struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Next unused field number: 10 - Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - Key []byte `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` - Contact []string `protobuf:"bytes,3,rep,name=contact,proto3" json:"contact,omitempty"` - Agreement string `protobuf:"bytes,5,opt,name=agreement,proto3" json:"agreement,omitempty"` - CreatedAt *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=createdAt,proto3" json:"createdAt,omitempty"` - Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *Registration) Reset() { - *x = Registration{} - mi := &file_core_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Registration) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Registration) ProtoMessage() {} - -func (x *Registration) ProtoReflect() protoreflect.Message { - mi := &file_core_proto_msgTypes[6] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Registration.ProtoReflect.Descriptor instead. -func (*Registration) Descriptor() ([]byte, []int) { - return file_core_proto_rawDescGZIP(), []int{6} -} - -func (x *Registration) GetId() int64 { - if x != nil { - return x.Id - } - return 0 -} - -func (x *Registration) GetKey() []byte { - if x != nil { - return x.Key - } - return nil -} - -func (x *Registration) GetContact() []string { - if x != nil { - return x.Contact - } - return nil -} - -func (x *Registration) GetAgreement() string { - if x != nil { - return x.Agreement - } - return "" -} - -func (x *Registration) GetCreatedAt() *timestamppb.Timestamp { - if x != nil { - return x.CreatedAt - } - return nil -} - -func (x *Registration) GetStatus() string { - if x != nil { - return x.Status - } - return "" -} - -type Authorization struct { - state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - RegistrationID int64 `protobuf:"varint,3,opt,name=registrationID,proto3" json:"registrationID,omitempty"` - Identifier *Identifier `protobuf:"bytes,11,opt,name=identifier,proto3" json:"identifier,omitempty"` - Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` - Expires *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=expires,proto3" json:"expires,omitempty"` - Challenges []*Challenge `protobuf:"bytes,6,rep,name=challenges,proto3" json:"challenges,omitempty"` - CertificateProfileName string `protobuf:"bytes,10,opt,name=certificateProfileName,proto3" json:"certificateProfileName,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *Authorization) Reset() { - *x = Authorization{} - mi := &file_core_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Authorization) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Authorization) ProtoMessage() {} - -func (x *Authorization) ProtoReflect() protoreflect.Message { - mi := &file_core_proto_msgTypes[7] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Authorization.ProtoReflect.Descriptor instead. -func (*Authorization) Descriptor() ([]byte, []int) { - return file_core_proto_rawDescGZIP(), []int{7} -} - -func (x *Authorization) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Authorization) GetRegistrationID() int64 { - if x != nil { - return x.RegistrationID - } - return 0 -} - -func (x *Authorization) GetIdentifier() *Identifier { - if x != nil { - return x.Identifier - } - return nil -} - -func (x *Authorization) GetStatus() string { - if x != nil { - return x.Status - } - return "" -} - -func (x *Authorization) GetExpires() *timestamppb.Timestamp { - if x != nil { - return x.Expires - } - return nil -} - -func (x *Authorization) GetChallenges() []*Challenge { - if x != nil { - return x.Challenges - } - return nil -} - -func (x *Authorization) GetCertificateProfileName() string { - if x != nil { - return x.CertificateProfileName - } - return "" -} - -type Order struct { - state protoimpl.MessageState `protogen:"open.v1"` - Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - RegistrationID int64 `protobuf:"varint,2,opt,name=registrationID,proto3" json:"registrationID,omitempty"` - // Fields specified by RFC 8555, Section 7.1.3 - // Note that we do not respect notBefore and notAfter, and we infer the - // finalize and certificate URLs from the id and certificateSerial fields. - Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` - Expires *timestamppb.Timestamp `protobuf:"bytes,12,opt,name=expires,proto3" json:"expires,omitempty"` - Identifiers []*Identifier `protobuf:"bytes,16,rep,name=identifiers,proto3" json:"identifiers,omitempty"` - Error *ProblemDetails `protobuf:"bytes,4,opt,name=error,proto3" json:"error,omitempty"` - V2Authorizations []int64 `protobuf:"varint,11,rep,packed,name=v2Authorizations,proto3" json:"v2Authorizations,omitempty"` - CertificateSerial string `protobuf:"bytes,5,opt,name=certificateSerial,proto3" json:"certificateSerial,omitempty"` - // Additional fields for our own record-keeping. - Created *timestamppb.Timestamp `protobuf:"bytes,13,opt,name=created,proto3" json:"created,omitempty"` - CertificateProfileName string `protobuf:"bytes,14,opt,name=certificateProfileName,proto3" json:"certificateProfileName,omitempty"` - Replaces string `protobuf:"bytes,15,opt,name=replaces,proto3" json:"replaces,omitempty"` - BeganProcessing bool `protobuf:"varint,9,opt,name=beganProcessing,proto3" json:"beganProcessing,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *Order) Reset() { - *x = Order{} - mi := &file_core_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Order) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Order) ProtoMessage() {} - -func (x *Order) ProtoReflect() protoreflect.Message { - mi := &file_core_proto_msgTypes[8] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Order.ProtoReflect.Descriptor instead. -func (*Order) Descriptor() ([]byte, []int) { - return file_core_proto_rawDescGZIP(), []int{8} -} - -func (x *Order) GetId() int64 { - if x != nil { - return x.Id - } - return 0 -} - -func (x *Order) GetRegistrationID() int64 { - if x != nil { - return x.RegistrationID - } - return 0 -} - -func (x *Order) GetStatus() string { - if x != nil { - return x.Status - } - return "" -} - -func (x *Order) GetExpires() *timestamppb.Timestamp { - if x != nil { - return x.Expires - } - return nil -} - -func (x *Order) GetIdentifiers() []*Identifier { - if x != nil { - return x.Identifiers - } - return nil -} - -func (x *Order) GetError() *ProblemDetails { - if x != nil { - return x.Error - } - return nil -} - -func (x *Order) GetV2Authorizations() []int64 { - if x != nil { - return x.V2Authorizations - } - return nil -} - -func (x *Order) GetCertificateSerial() string { - if x != nil { - return x.CertificateSerial - } - return "" -} - -func (x *Order) GetCreated() *timestamppb.Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *Order) GetCertificateProfileName() string { - if x != nil { - return x.CertificateProfileName - } - return "" -} - -func (x *Order) GetReplaces() string { - if x != nil { - return x.Replaces - } - return "" -} - -func (x *Order) GetBeganProcessing() bool { - if x != nil { - return x.BeganProcessing - } - return false -} - -type CRLEntry struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Next unused field number: 5 - Serial string `protobuf:"bytes,1,opt,name=serial,proto3" json:"serial,omitempty"` - Reason int32 `protobuf:"varint,2,opt,name=reason,proto3" json:"reason,omitempty"` - RevokedAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=revokedAt,proto3" json:"revokedAt,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *CRLEntry) Reset() { - *x = CRLEntry{} - mi := &file_core_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *CRLEntry) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CRLEntry) ProtoMessage() {} - -func (x *CRLEntry) ProtoReflect() protoreflect.Message { - mi := &file_core_proto_msgTypes[9] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CRLEntry.ProtoReflect.Descriptor instead. -func (*CRLEntry) Descriptor() ([]byte, []int) { - return file_core_proto_rawDescGZIP(), []int{9} -} - -func (x *CRLEntry) GetSerial() string { - if x != nil { - return x.Serial - } - return "" -} - -func (x *CRLEntry) GetReason() int32 { - if x != nil { - return x.Reason - } - return 0 -} - -func (x *CRLEntry) GetRevokedAt() *timestamppb.Timestamp { - if x != nil { - return x.RevokedAt - } - return nil -} - -var File_core_proto protoreflect.FileDescriptor - -var file_core_proto_rawDesc = string([]byte{ - 0x0a, 0x0a, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x63, 0x6f, - 0x72, 0x65, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0x36, 0x0a, 0x0a, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb3, 0x02, 0x0a, 0x09, - 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, - 0x03, 0x75, 0x72, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x38, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x14, 0x0a, - 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x12, 0x44, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, - 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x0b, 0x10, - 0x0c, 0x22, 0x94, 0x02, 0x0a, 0x10, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0c, 0x52, 0x11, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x55, - 0x73, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x55, 0x73, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x72, 0x69, 0x65, 0x64, 0x18, 0x07, 0x20, 0x03, - 0x28, 0x0c, 0x52, 0x0e, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x54, 0x72, 0x69, - 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x41, 0x64, - 0x64, 0x72, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x73, 0x22, 0x6a, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x62, - 0x6c, 0x65, 0x6d, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, - 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x22, 0xed, 0x01, 0x0a, 0x0b, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, - 0x72, 0x69, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, - 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x64, 0x65, 0x72, 0x12, 0x32, - 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, - 0x65, 0x64, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, - 0x08, 0x06, 0x10, 0x07, 0x22, 0xd5, 0x03, 0x0a, 0x11, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, - 0x72, 0x69, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x72, 0x69, - 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x44, 0x0a, 0x0f, 0x6f, 0x63, - 0x73, 0x70, 0x4c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x0f, 0x6f, 0x63, 0x73, 0x70, 0x4c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x12, 0x3c, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x44, 0x61, 0x74, 0x65, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x0b, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x44, 0x61, 0x74, 0x65, 0x12, 0x24, - 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x52, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x15, 0x6c, 0x61, 0x73, 0x74, 0x45, 0x78, 0x70, 0x69, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x67, 0x53, 0x65, 0x6e, 0x74, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x15, 0x6c, 0x61, 0x73, 0x74, 0x45, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, - 0x61, 0x67, 0x53, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x08, 0x6e, 0x6f, 0x74, 0x41, 0x66, 0x74, - 0x65, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6e, 0x6f, 0x74, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x1c, - 0x0a, 0x09, 0x69, 0x73, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x09, 0x69, 0x73, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x49, 0x44, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, - 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x49, 0x44, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, - 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, - 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x22, 0xcc, 0x01, 0x0a, - 0x0c, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x67, 0x72, - 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x67, - 0x72, 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, - 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x22, 0xc8, 0x02, 0x0a, 0x0d, - 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x26, 0x0a, - 0x0e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x30, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0a, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x34, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, 0x78, - 0x70, 0x69, 0x72, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, - 0x67, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6c, - 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x36, 0x0a, 0x16, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x4a, 0x04, - 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, - 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, 0x93, 0x04, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x34, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, - 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0b, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x50, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x10, 0x76, 0x32, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x03, - 0x52, 0x10, 0x76, 0x32, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x12, 0x34, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x16, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x62, 0x65, - 0x67, 0x61, 0x6e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0f, 0x62, 0x65, 0x67, 0x61, 0x6e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, - 0x73, 0x69, 0x6e, 0x67, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, - 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x22, 0x7a, 0x0a, 0x08, - 0x43, 0x52, 0x4c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x69, - 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x09, 0x72, 0x65, 0x76, 0x6f, - 0x6b, 0x65, 0x64, 0x41, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, - 0x41, 0x74, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x42, 0x2b, 0x5a, 0x29, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x65, 0x74, 0x73, 0x65, 0x6e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x2f, 0x62, 0x6f, 0x75, 0x6c, 0x64, 0x65, 0x72, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) - -var ( - file_core_proto_rawDescOnce sync.Once - file_core_proto_rawDescData []byte -) - -func file_core_proto_rawDescGZIP() []byte { - file_core_proto_rawDescOnce.Do(func() { - file_core_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_core_proto_rawDesc), len(file_core_proto_rawDesc))) - }) - return file_core_proto_rawDescData -} - -var file_core_proto_msgTypes = make([]protoimpl.MessageInfo, 10) -var file_core_proto_goTypes = []any{ - (*Identifier)(nil), // 0: core.Identifier - (*Challenge)(nil), // 1: core.Challenge - (*ValidationRecord)(nil), // 2: core.ValidationRecord - (*ProblemDetails)(nil), // 3: core.ProblemDetails - (*Certificate)(nil), // 4: core.Certificate - (*CertificateStatus)(nil), // 5: core.CertificateStatus - (*Registration)(nil), // 6: core.Registration - (*Authorization)(nil), // 7: core.Authorization - (*Order)(nil), // 8: core.Order - (*CRLEntry)(nil), // 9: core.CRLEntry - (*timestamppb.Timestamp)(nil), // 10: google.protobuf.Timestamp -} -var file_core_proto_depIdxs = []int32{ - 10, // 0: core.Challenge.validated:type_name -> google.protobuf.Timestamp - 3, // 1: core.Challenge.error:type_name -> core.ProblemDetails - 2, // 2: core.Challenge.validationrecords:type_name -> core.ValidationRecord - 10, // 3: core.Certificate.issued:type_name -> google.protobuf.Timestamp - 10, // 4: core.Certificate.expires:type_name -> google.protobuf.Timestamp - 10, // 5: core.CertificateStatus.ocspLastUpdated:type_name -> google.protobuf.Timestamp - 10, // 6: core.CertificateStatus.revokedDate:type_name -> google.protobuf.Timestamp - 10, // 7: core.CertificateStatus.lastExpirationNagSent:type_name -> google.protobuf.Timestamp - 10, // 8: core.CertificateStatus.notAfter:type_name -> google.protobuf.Timestamp - 10, // 9: core.Registration.createdAt:type_name -> google.protobuf.Timestamp - 0, // 10: core.Authorization.identifier:type_name -> core.Identifier - 10, // 11: core.Authorization.expires:type_name -> google.protobuf.Timestamp - 1, // 12: core.Authorization.challenges:type_name -> core.Challenge - 10, // 13: core.Order.expires:type_name -> google.protobuf.Timestamp - 0, // 14: core.Order.identifiers:type_name -> core.Identifier - 3, // 15: core.Order.error:type_name -> core.ProblemDetails - 10, // 16: core.Order.created:type_name -> google.protobuf.Timestamp - 10, // 17: core.CRLEntry.revokedAt:type_name -> google.protobuf.Timestamp - 18, // [18:18] is the sub-list for method output_type - 18, // [18:18] is the sub-list for method input_type - 18, // [18:18] is the sub-list for extension type_name - 18, // [18:18] is the sub-list for extension extendee - 0, // [0:18] is the sub-list for field type_name -} - -func init() { file_core_proto_init() } -func file_core_proto_init() { - if File_core_proto != nil { - return - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: unsafe.Slice(unsafe.StringData(file_core_proto_rawDesc), len(file_core_proto_rawDesc)), - NumEnums: 0, - NumMessages: 10, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_core_proto_goTypes, - DependencyIndexes: file_core_proto_depIdxs, - MessageInfos: file_core_proto_msgTypes, - }.Build() - File_core_proto = out.File - file_core_proto_goTypes = nil - file_core_proto_depIdxs = nil -} diff --git a/vendor/github.com/letsencrypt/boulder/core/proto/core.proto b/vendor/github.com/letsencrypt/boulder/core/proto/core.proto deleted file mode 100644 index 22cbfa43a7..0000000000 --- a/vendor/github.com/letsencrypt/boulder/core/proto/core.proto +++ /dev/null @@ -1,139 +0,0 @@ -syntax = "proto3"; - -package core; -option go_package = "github.com/letsencrypt/boulder/core/proto"; - -import "google/protobuf/timestamp.proto"; - -message Identifier { - string type = 1; - string value = 2; -} - -message Challenge { - // Next unused field number: 13 - reserved 4, 5, 8, 11; - int64 id = 1; - // Fields specified by RFC 8555, Section 8. - string type = 2; - string url = 9; - string status = 6; - google.protobuf.Timestamp validated = 12; - ProblemDetails error = 7; - // Fields specified by individual validation methods. - string token = 3; - // Additional fields for our own record keeping. - repeated ValidationRecord validationrecords = 10; -} - -message ValidationRecord { - // Next unused field number: 9 - string hostname = 1; - string port = 2; - repeated bytes addressesResolved = 3; // netip.Addr.MarshalText() - bytes addressUsed = 4; // netip.Addr.MarshalText() - - repeated string authorities = 5; - string url = 6; - // A list of addresses tried before the address used (see - // core/objects.go and the comment on the ValidationRecord structure - // definition for more information. - repeated bytes addressesTried = 7; // netip.Addr.MarshalText() - repeated string resolverAddrs = 8; -} - -message ProblemDetails { - string problemType = 1; - string detail = 2; - int32 httpStatus = 3; -} - -message Certificate { - // Next unused field number: 9 - int64 registrationID = 1; - string serial = 2; - string digest = 3; - bytes der = 4; - reserved 5; // Previously issuedNS - google.protobuf.Timestamp issued = 7; - reserved 6; // Previously expiresNS - google.protobuf.Timestamp expires = 8; -} - -message CertificateStatus { - // Next unused field number: 16 - string serial = 1; - reserved 2; // previously subscriberApproved - string status = 3; - reserved 4; // Previously ocspLastUpdatedNS - google.protobuf.Timestamp ocspLastUpdated = 15; - reserved 5; // Previously revokedDateNS - google.protobuf.Timestamp revokedDate = 12; - int64 revokedReason = 6; - reserved 7; // Previously lastExpirationNagSentNS - reserved 8; // previously ocspResponse - google.protobuf.Timestamp lastExpirationNagSent = 13; - reserved 9; // Previously notAfterNS - google.protobuf.Timestamp notAfter = 14; - bool isExpired = 10; - int64 issuerID = 11; -} - -message Registration { - // Next unused field number: 10 - int64 id = 1; - bytes key = 2; - repeated string contact = 3; - reserved 4; // Previously contactsPresent - string agreement = 5; - reserved 6; // Previously initialIP - reserved 7; // Previously createdAtNS - google.protobuf.Timestamp createdAt = 9; - string status = 8; -} - -message Authorization { - // Next unused field number: 12 - reserved 5, 7, 8; - string id = 1; - int64 registrationID = 3; - // Fields specified by RFC 8555, Section 7.1.4 - reserved 2; // Previously dnsName - Identifier identifier = 11; - string status = 4; - google.protobuf.Timestamp expires = 9; - repeated core.Challenge challenges = 6; - string certificateProfileName = 10; - // We do not directly represent the "wildcard" field, instead inferring it - // from the identifier value. -} - -message Order { - // Next unused field number: 17 - reserved 3, 6, 10; - int64 id = 1; - int64 registrationID = 2; - // Fields specified by RFC 8555, Section 7.1.3 - // Note that we do not respect notBefore and notAfter, and we infer the - // finalize and certificate URLs from the id and certificateSerial fields. - string status = 7; - google.protobuf.Timestamp expires = 12; - reserved 8; // Previously dnsNames - repeated Identifier identifiers = 16; - ProblemDetails error = 4; - repeated int64 v2Authorizations = 11; - string certificateSerial = 5; - // Additional fields for our own record-keeping. - google.protobuf.Timestamp created = 13; - string certificateProfileName = 14; - string replaces = 15; - bool beganProcessing = 9; -} - -message CRLEntry { - // Next unused field number: 5 - string serial = 1; - int32 reason = 2; - reserved 3; // Previously revokedAtNS - google.protobuf.Timestamp revokedAt = 4; -} diff --git a/vendor/github.com/letsencrypt/boulder/core/util.go b/vendor/github.com/letsencrypt/boulder/core/util.go deleted file mode 100644 index 6be6e143a5..0000000000 --- a/vendor/github.com/letsencrypt/boulder/core/util.go +++ /dev/null @@ -1,400 +0,0 @@ -package core - -import ( - "context" - "crypto" - "crypto/ecdsa" - "crypto/rand" - "crypto/rsa" - "crypto/sha256" - "crypto/x509" - "encoding/base64" - "encoding/hex" - "encoding/pem" - "errors" - "expvar" - "fmt" - "io" - "math/big" - mrand "math/rand/v2" - "os" - "path" - "reflect" - "regexp" - "sort" - "strings" - "time" - "unicode" - - "github.com/go-jose/go-jose/v4" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/types/known/durationpb" - "google.golang.org/protobuf/types/known/timestamppb" - - "github.com/letsencrypt/boulder/identifier" -) - -const Unspecified = "Unspecified" - -// Package Variables Variables - -// BuildID is set by the compiler (using -ldflags "-X core.BuildID $(git rev-parse --short HEAD)") -// and is used by GetBuildID -var BuildID string - -// BuildHost is set by the compiler and is used by GetBuildHost -var BuildHost string - -// BuildTime is set by the compiler and is used by GetBuildTime -var BuildTime string - -func init() { - expvar.NewString("BuildID").Set(BuildID) - expvar.NewString("BuildTime").Set(BuildTime) -} - -// Random stuff - -type randSource interface { - Read(p []byte) (n int, err error) -} - -// RandReader is used so that it can be replaced in tests that require -// deterministic output -var RandReader randSource = rand.Reader - -// RandomString returns a randomly generated string of the requested length. -func RandomString(byteLength int) string { - b := make([]byte, byteLength) - _, err := io.ReadFull(RandReader, b) - if err != nil { - panic(fmt.Sprintf("Error reading random bytes: %s", err)) - } - return base64.RawURLEncoding.EncodeToString(b) -} - -// NewToken produces a random string for Challenges, etc. -func NewToken() string { - return RandomString(32) -} - -var tokenFormat = regexp.MustCompile(`^[\w-]{43}$`) - -// looksLikeAToken checks whether a string represents a 32-octet value in -// the URL-safe base64 alphabet. -func looksLikeAToken(token string) bool { - return tokenFormat.MatchString(token) -} - -// Fingerprints - -// Fingerprint256 produces an unpadded, URL-safe Base64-encoded SHA256 digest -// of the data. -func Fingerprint256(data []byte) string { - d := sha256.New() - _, _ = d.Write(data) // Never returns an error - return base64.RawURLEncoding.EncodeToString(d.Sum(nil)) -} - -type Sha256Digest [sha256.Size]byte - -// KeyDigest produces the SHA256 digest of a provided public key. -func KeyDigest(key crypto.PublicKey) (Sha256Digest, error) { - switch t := key.(type) { - case *jose.JSONWebKey: - if t == nil { - return Sha256Digest{}, errors.New("cannot compute digest of nil key") - } - return KeyDigest(t.Key) - case jose.JSONWebKey: - return KeyDigest(t.Key) - default: - keyDER, err := x509.MarshalPKIXPublicKey(key) - if err != nil { - return Sha256Digest{}, err - } - return sha256.Sum256(keyDER), nil - } -} - -// KeyDigestB64 produces a padded, standard Base64-encoded SHA256 digest of a -// provided public key. -func KeyDigestB64(key crypto.PublicKey) (string, error) { - digest, err := KeyDigest(key) - if err != nil { - return "", err - } - return base64.StdEncoding.EncodeToString(digest[:]), nil -} - -// KeyDigestEquals determines whether two public keys have the same digest. -func KeyDigestEquals(j, k crypto.PublicKey) bool { - digestJ, errJ := KeyDigestB64(j) - digestK, errK := KeyDigestB64(k) - // Keys that don't have a valid digest (due to marshalling problems) - // are never equal. So, e.g. nil keys are not equal. - if errJ != nil || errK != nil { - return false - } - return digestJ == digestK -} - -// PublicKeysEqual determines whether two public keys are identical. -func PublicKeysEqual(a, b crypto.PublicKey) (bool, error) { - switch ak := a.(type) { - case *rsa.PublicKey: - return ak.Equal(b), nil - case *ecdsa.PublicKey: - return ak.Equal(b), nil - default: - return false, fmt.Errorf("unsupported public key type %T", ak) - } -} - -// SerialToString converts a certificate serial number (big.Int) to a String -// consistently. -func SerialToString(serial *big.Int) string { - return fmt.Sprintf("%036x", serial) -} - -// StringToSerial converts a string into a certificate serial number (big.Int) -// consistently. -func StringToSerial(serial string) (*big.Int, error) { - var serialNum big.Int - if !ValidSerial(serial) { - return &serialNum, fmt.Errorf("invalid serial number %q", serial) - } - _, err := fmt.Sscanf(serial, "%036x", &serialNum) - return &serialNum, err -} - -// ValidSerial tests whether the input string represents a syntactically -// valid serial number, i.e., that it is a valid hex string between 32 -// and 36 characters long. -func ValidSerial(serial string) bool { - // Originally, serial numbers were 32 hex characters long. We later increased - // them to 36, but we allow the shorter ones because they exist in some - // production databases. - if len(serial) != 32 && len(serial) != 36 { - return false - } - _, err := hex.DecodeString(serial) - return err == nil -} - -// GetBuildID identifies what build is running. -func GetBuildID() (retID string) { - retID = BuildID - if retID == "" { - retID = Unspecified - } - return -} - -// GetBuildTime identifies when this build was made -func GetBuildTime() (retID string) { - retID = BuildTime - if retID == "" { - retID = Unspecified - } - return -} - -// GetBuildHost identifies the building host -func GetBuildHost() (retID string) { - retID = BuildHost - if retID == "" { - retID = Unspecified - } - return -} - -// IsAnyNilOrZero returns whether any of the supplied values are nil, or (if not) -// if any of them is its type's zero-value. This is useful for validating that -// all required fields on a proto message are present. -func IsAnyNilOrZero(vals ...interface{}) bool { - for _, val := range vals { - switch v := val.(type) { - case nil: - return true - case bool: - if !v { - return true - } - case string: - if v == "" { - return true - } - case []string: - if len(v) == 0 { - return true - } - case byte: - // Byte is an alias for uint8 and will cover that case. - if v == 0 { - return true - } - case []byte: - if len(v) == 0 { - return true - } - case int: - if v == 0 { - return true - } - case int8: - if v == 0 { - return true - } - case int16: - if v == 0 { - return true - } - case int32: - if v == 0 { - return true - } - case int64: - if v == 0 { - return true - } - case uint: - if v == 0 { - return true - } - case uint16: - if v == 0 { - return true - } - case uint32: - if v == 0 { - return true - } - case uint64: - if v == 0 { - return true - } - case float32: - if v == 0 { - return true - } - case float64: - if v == 0 { - return true - } - case time.Time: - if v.IsZero() { - return true - } - case *timestamppb.Timestamp: - if v == nil || v.AsTime().IsZero() { - return true - } - case *durationpb.Duration: - if v == nil || v.AsDuration() == time.Duration(0) { - return true - } - default: - if reflect.ValueOf(v).IsZero() { - return true - } - } - } - return false -} - -// UniqueLowerNames returns the set of all unique names in the input after all -// of them are lowercased. The returned names will be in their lowercased form -// and sorted alphabetically. -func UniqueLowerNames(names []string) (unique []string) { - nameMap := make(map[string]int, len(names)) - for _, name := range names { - nameMap[strings.ToLower(name)] = 1 - } - - unique = make([]string, 0, len(nameMap)) - for name := range nameMap { - unique = append(unique, name) - } - sort.Strings(unique) - return -} - -// HashIdentifiers returns a hash of the identifiers requested. This is intended -// for use when interacting with the orderFqdnSets table and rate limiting. -func HashIdentifiers(idents identifier.ACMEIdentifiers) []byte { - var values []string - for _, ident := range identifier.Normalize(idents) { - values = append(values, ident.Value) - } - - hash := sha256.Sum256([]byte(strings.Join(values, ","))) - return hash[:] -} - -// LoadCert loads a PEM certificate specified by filename or returns an error -func LoadCert(filename string) (*x509.Certificate, error) { - certPEM, err := os.ReadFile(filename) - if err != nil { - return nil, err - } - block, _ := pem.Decode(certPEM) - if block == nil { - return nil, fmt.Errorf("no data in cert PEM file %q", filename) - } - cert, err := x509.ParseCertificate(block.Bytes) - if err != nil { - return nil, err - } - return cert, nil -} - -// retryJitter is used to prevent bunched retried queries from falling into lockstep -const retryJitter = 0.2 - -// RetryBackoff calculates a backoff time based on number of retries, will always -// add jitter so requests that start in unison won't fall into lockstep. Because of -// this the returned duration can always be larger than the maximum by a factor of -// retryJitter. Adapted from -// https://github.com/grpc/grpc-go/blob/v1.11.3/backoff.go#L77-L96 -func RetryBackoff(retries int, base, max time.Duration, factor float64) time.Duration { - if retries == 0 { - return 0 - } - backoff, fMax := float64(base), float64(max) - for backoff < fMax && retries > 1 { - backoff *= factor - retries-- - } - if backoff > fMax { - backoff = fMax - } - // Randomize backoff delays so that if a cluster of requests start at - // the same time, they won't operate in lockstep. - backoff *= (1 - retryJitter) + 2*retryJitter*mrand.Float64() - return time.Duration(backoff) -} - -// IsASCII determines if every character in a string is encoded in -// the ASCII character set. -func IsASCII(str string) bool { - for _, r := range str { - if r > unicode.MaxASCII { - return false - } - } - return true -} - -// IsCanceled returns true if err is non-nil and is either context.Canceled, or -// has a grpc code of Canceled. This is useful because cancellations propagate -// through gRPC boundaries, and if we choose to treat in-process cancellations a -// certain way, we usually want to treat cross-process cancellations the same way. -func IsCanceled(err error) bool { - return errors.Is(err, context.Canceled) || status.Code(err) == codes.Canceled -} - -func Command() string { - return path.Base(os.Args[0]) -} diff --git a/vendor/github.com/letsencrypt/boulder/goodkey/good_key.go b/vendor/github.com/letsencrypt/boulder/goodkey/good_key.go deleted file mode 100644 index 6f479fc186..0000000000 --- a/vendor/github.com/letsencrypt/boulder/goodkey/good_key.go +++ /dev/null @@ -1,425 +0,0 @@ -package goodkey - -import ( - "context" - "crypto" - "crypto/ecdsa" - "crypto/elliptic" - "crypto/rsa" - "errors" - "fmt" - "math/big" - "sync" - - "github.com/letsencrypt/boulder/core" - - "github.com/titanous/rocacheck" -) - -// To generate, run: primes 2 752 | tr '\n' , -var smallPrimeInts = []int64{ - 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, - 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, - 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, - 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, - 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, - 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, - 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, - 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, - 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, - 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, - 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, - 719, 727, 733, 739, 743, 751, -} - -// singleton defines the object of a Singleton pattern -var ( - smallPrimesSingleton sync.Once - smallPrimesProduct *big.Int -) - -type Config struct { - // AllowedKeys enables or disables specific key algorithms and sizes. If - // nil, defaults to just those keys allowed by the Let's Encrypt CPS. - AllowedKeys *AllowedKeys - // FermatRounds is an integer number of rounds of Fermat's factorization - // method that should be performed to attempt to detect keys whose modulus can - // be trivially factored because the two factors are very close to each other. - // If this config value is empty or 0, it will default to 110 rounds. - FermatRounds int -} - -// AllowedKeys is a map of six specific key algorithm and size combinations to -// booleans indicating whether keys of that type are considered good. -type AllowedKeys struct { - // Baseline Requirements, Section 6.1.5 requires key size >= 2048 and a multiple - // of 8 bits: https://github.com/cabforum/servercert/blob/main/docs/BR.md#615-key-sizes - // Baseline Requirements, Section 6.1.1.3 requires that we reject any keys which - // have a known method to easily compute their private key, such as Debian Weak - // Keys. Our enforcement mechanism relies on enumerating all Debian Weak Keys at - // common key sizes, so we restrict all issuance to those common key sizes. - RSA2048 bool - RSA3072 bool - RSA4096 bool - // Baseline Requirements, Section 6.1.5 requires that ECDSA keys be valid - // points on the NIST P-256, P-384, or P-521 elliptic curves. - ECDSAP256 bool - ECDSAP384 bool - ECDSAP521 bool -} - -// LetsEncryptCPS encodes the five key algorithms and sizes allowed by the Let's -// Encrypt CPS CV-SSL Subscriber Certificate Profile: RSA 2048, RSA 3076, RSA -// 4096, ECDSA 256 and ECDSA P384. -// https://github.com/letsencrypt/cp-cps/blob/main/CP-CPS.md#dv-ssl-subscriber-certificate -// If this is ever changed, the CP/CPS MUST be changed first. -func LetsEncryptCPS() AllowedKeys { - return AllowedKeys{ - RSA2048: true, - RSA3072: true, - RSA4096: true, - ECDSAP256: true, - ECDSAP384: true, - } -} - -// ErrBadKey represents an error with a key. It is distinct from the various -// ways in which an ACME request can have an erroneous key (BadPublicKeyError, -// BadCSRError) because this library is used to check both JWS signing keys and -// keys in CSRs. -var ErrBadKey = errors.New("") - -func badKey(msg string, args ...interface{}) error { - return fmt.Errorf("%w%s", ErrBadKey, fmt.Errorf(msg, args...)) -} - -// BlockedKeyCheckFunc is used to pass in the sa.BlockedKey functionality to KeyPolicy, -// rather than storing a full sa.SQLStorageAuthority. This allows external -// users who don’t want to import all of boulder/sa, and makes testing -// significantly simpler. -// On success, the function returns a boolean which is true if the key is blocked. -type BlockedKeyCheckFunc func(ctx context.Context, keyHash []byte) (bool, error) - -// KeyPolicy determines which types of key may be used with various boulder -// operations. -type KeyPolicy struct { - allowedKeys AllowedKeys - fermatRounds int - blockedCheck BlockedKeyCheckFunc -} - -// NewPolicy returns a key policy based on the given configuration, with sane -// defaults. If the config's AllowedKeys is nil, the LetsEncryptCPS AllowedKeys -// is used. If the configured FermatRounds is 0, Fermat Factorization defaults to -// attempting 110 rounds. -func NewPolicy(config *Config, bkc BlockedKeyCheckFunc) (KeyPolicy, error) { - if config == nil { - config = &Config{} - } - kp := KeyPolicy{ - blockedCheck: bkc, - } - if config.AllowedKeys == nil { - kp.allowedKeys = LetsEncryptCPS() - } else { - kp.allowedKeys = *config.AllowedKeys - } - if config.FermatRounds == 0 { - // The BRs require 100 rounds, so give ourselves a margin above that. - kp.fermatRounds = 110 - } else if config.FermatRounds < 100 { - return KeyPolicy{}, fmt.Errorf("Fermat factorization rounds must be at least 100: %d", config.FermatRounds) - } else { - kp.fermatRounds = config.FermatRounds - } - return kp, nil -} - -// GoodKey returns true if the key is acceptable for both TLS use and account -// key use (our requirements are the same for either one), according to basic -// strength and algorithm checking. GoodKey only supports pointers: *rsa.PublicKey -// and *ecdsa.PublicKey. It will reject non-pointer types. -// TODO: Support JSONWebKeys once go-jose migration is done. -func (policy *KeyPolicy) GoodKey(ctx context.Context, key crypto.PublicKey) error { - // Early rejection of unacceptable key types to guard subsequent checks. - switch t := key.(type) { - case *rsa.PublicKey, *ecdsa.PublicKey: - break - default: - return badKey("unsupported key type %T", t) - } - if policy.blockedCheck != nil { - digest, err := core.KeyDigest(key) - if err != nil { - return badKey("%w", err) - } - exists, err := policy.blockedCheck(ctx, digest[:]) - if err != nil { - return err - } else if exists { - return badKey("public key is forbidden") - } - } - switch t := key.(type) { - case *rsa.PublicKey: - return policy.goodKeyRSA(t) - case *ecdsa.PublicKey: - return policy.goodKeyECDSA(t) - default: - return badKey("unsupported key type %T", key) - } -} - -// GoodKeyECDSA determines if an ECDSA pubkey meets our requirements -func (policy *KeyPolicy) goodKeyECDSA(key *ecdsa.PublicKey) (err error) { - // Check the curve. - // - // The validity of the curve is an assumption for all following tests. - err = policy.goodCurve(key.Curve) - if err != nil { - return err - } - - // Key validation routine adapted from NIST SP800-56A § 5.6.2.3.2. - // - // - // Assuming a prime field since a) we are only allowing such curves and b) - // crypto/elliptic only supports prime curves. Where this assumption - // simplifies the code below, it is explicitly stated and explained. If ever - // adapting this code to support non-prime curves, refer to NIST SP800-56A § - // 5.6.2.3.2 and adapt this code appropriately. - params := key.Params() - - // SP800-56A § 5.6.2.3.2 Step 1. - // Partial check of the public key for an invalid range in the EC group: - // Verify that key is not the point at infinity O. - // This code assumes that the point at infinity is (0,0), which is the - // case for all supported curves. - if isPointAtInfinityNISTP(key.X, key.Y) { - return badKey("key x, y must not be the point at infinity") - } - - // SP800-56A § 5.6.2.3.2 Step 2. - // "Verify that x_Q and y_Q are integers in the interval [0,p-1] in the - // case that q is an odd prime p, or that x_Q and y_Q are bit strings - // of length m bits in the case that q = 2**m." - // - // Prove prime field: ASSUMED. - // Prove q != 2: ASSUMED. (Curve parameter. No supported curve has q == 2.) - // Prime field && q != 2 => q is an odd prime p - // Therefore "verify that x, y are in [0, p-1]" satisfies step 2. - // - // Therefore verify that both x and y of the public key point have the unique - // correct representation of an element in the underlying field by verifying - // that x and y are integers in [0, p-1]. - if key.X.Sign() < 0 || key.Y.Sign() < 0 { - return badKey("key x, y must not be negative") - } - - if key.X.Cmp(params.P) >= 0 || key.Y.Cmp(params.P) >= 0 { - return badKey("key x, y must not exceed P-1") - } - - // SP800-56A § 5.6.2.3.2 Step 3. - // "If q is an odd prime p, verify that (y_Q)**2 === (x_Q)***3 + a*x_Q + b (mod p). - // If q = 2**m, verify that (y_Q)**2 + (x_Q)*(y_Q) == (x_Q)**3 + a*(x_Q)*2 + b in - // the finite field of size 2**m. - // (Ensures that the public key is on the correct elliptic curve.)" - // - // q is an odd prime p: proven/assumed above. - // a = -3 for all supported curves. - // - // Therefore step 3 is satisfied simply by showing that - // y**2 === x**3 - 3*x + B (mod P). - // - // This proves that the public key is on the correct elliptic curve. - // But in practice, this test is provided by crypto/elliptic, so use that. - if !key.Curve.IsOnCurve(key.X, key.Y) { - return badKey("key point is not on the curve") - } - - // SP800-56A § 5.6.2.3.2 Step 4. - // "Verify that n*Q == Ø. - // (Ensures that the public key has the correct order. Along with check 1, - // ensures that the public key is in the correct range in the correct EC - // subgroup, that is, it is in the correct EC subgroup and is not the - // identity element.)" - // - // Ensure that public key has the correct order: - // verify that n*Q = Ø. - // - // n*Q = Ø iff n*Q is the point at infinity (see step 1). - ox, oy := key.Curve.ScalarMult(key.X, key.Y, params.N.Bytes()) - if !isPointAtInfinityNISTP(ox, oy) { - return badKey("public key does not have correct order") - } - - // End of SP800-56A § 5.6.2.3.2 Public Key Validation Routine. - // Key is valid. - return nil -} - -// Returns true iff the point (x,y) on NIST P-256, NIST P-384 or NIST P-521 is -// the point at infinity. These curves all have the same point at infinity -// (0,0). This function must ONLY be used on points on curves verified to have -// (0,0) as their point at infinity. -func isPointAtInfinityNISTP(x, y *big.Int) bool { - return x.Sign() == 0 && y.Sign() == 0 -} - -// GoodCurve determines if an elliptic curve meets our requirements. -func (policy *KeyPolicy) goodCurve(c elliptic.Curve) (err error) { - // Simply use a whitelist for now. - params := c.Params() - switch { - case policy.allowedKeys.ECDSAP256 && params == elliptic.P256().Params(): - return nil - case policy.allowedKeys.ECDSAP384 && params == elliptic.P384().Params(): - return nil - case policy.allowedKeys.ECDSAP521 && params == elliptic.P521().Params(): - return nil - default: - return badKey("ECDSA curve %v not allowed", params.Name) - } -} - -// GoodKeyRSA determines if a RSA pubkey meets our requirements -func (policy *KeyPolicy) goodKeyRSA(key *rsa.PublicKey) error { - modulus := key.N - - err := policy.goodRSABitLen(key) - if err != nil { - return err - } - - // Rather than support arbitrary exponents, which significantly increases - // the size of the key space we allow, we restrict E to the defacto standard - // RSA exponent 65537. There is no specific standards document that specifies - // 65537 as the 'best' exponent, but ITU X.509 Annex C suggests there are - // notable merits for using it if using a fixed exponent. - // - // The CABF Baseline Requirements state: - // The CA SHALL confirm that the value of the public exponent is an - // odd number equal to 3 or more. Additionally, the public exponent - // SHOULD be in the range between 2^16 + 1 and 2^256-1. - // - // By only allowing one exponent, which fits these constraints, we satisfy - // these requirements. - if key.E != 65537 { - return badKey("key exponent must be 65537") - } - - // The modulus SHOULD also have the following characteristics: an odd - // number, not the power of a prime, and have no factors smaller than 752. - // TODO: We don't yet check for "power of a prime." - if checkSmallPrimes(modulus) { - return badKey("key divisible by small prime") - } - // Check for weak keys generated by Infineon hardware - // (see https://crocs.fi.muni.cz/public/papers/rsa_ccs17) - if rocacheck.IsWeak(key) { - return badKey("key generated by vulnerable Infineon-based hardware") - } - - // Check if the key can be easily factored via Fermat's factorization method. - err = checkPrimeFactorsTooClose(modulus, policy.fermatRounds) - if err != nil { - return badKey("key generated with factors too close together: %w", err) - } - - return nil -} - -func (policy *KeyPolicy) goodRSABitLen(key *rsa.PublicKey) error { - // See comment on AllowedKeys above. - modulusBitLen := key.N.BitLen() - switch { - case modulusBitLen == 2048 && policy.allowedKeys.RSA2048: - return nil - case modulusBitLen == 3072 && policy.allowedKeys.RSA3072: - return nil - case modulusBitLen == 4096 && policy.allowedKeys.RSA4096: - return nil - default: - return badKey("key size not supported: %d", modulusBitLen) - } -} - -// Returns true iff integer i is divisible by any of the primes in smallPrimes. -// -// Short circuits; execution time is dependent on i. Do not use this on secret -// values. -// -// Rather than checking each prime individually (invoking Mod on each), -// multiply the primes together and let GCD do our work for us: if the -// GCD between and is not one, we know we have -// a bad key. This is substantially faster than checking each prime -// individually. -func checkSmallPrimes(i *big.Int) bool { - smallPrimesSingleton.Do(func() { - smallPrimesProduct = big.NewInt(1) - for _, prime := range smallPrimeInts { - smallPrimesProduct.Mul(smallPrimesProduct, big.NewInt(prime)) - } - }) - - // When the GCD is 1, i and smallPrimesProduct are coprime, meaning they - // share no common factors. When the GCD is not one, it is the product of - // all common factors, meaning we've identified at least one small prime - // which invalidates i as a valid key. - - var result big.Int - result.GCD(nil, nil, i, smallPrimesProduct) - return result.Cmp(big.NewInt(1)) != 0 -} - -// Returns an error if the modulus n is able to be factored into primes p and q -// via Fermat's factorization method. This method relies on the two primes being -// very close together, which means that they were almost certainly not picked -// independently from a uniform random distribution. Basically, if we can factor -// the key this easily, so can anyone else. -func checkPrimeFactorsTooClose(n *big.Int, rounds int) error { - // Pre-allocate some big numbers that we'll use a lot down below. - one := big.NewInt(1) - bb := new(big.Int) - - // Any odd integer is equal to a difference of squares of integers: - // n = a^2 - b^2 = (a + b)(a - b) - // Any RSA public key modulus is equal to a product of two primes: - // n = pq - // Here we try to find values for a and b, since doing so also gives us the - // prime factors p = (a + b) and q = (a - b). - - // We start with a close to the square root of the modulus n, to start with - // two candidate prime factors that are as close together as possible and - // work our way out from there. Specifically, we set a = ceil(sqrt(n)), the - // first integer greater than the square root of n. Unfortunately, big.Int's - // built-in square root function takes the floor, so we have to add one to get - // the ceil. - a := new(big.Int) - a.Sqrt(n).Add(a, one) - - // We calculate b2 to see if it is a perfect square (i.e. b^2), and therefore - // b is an integer. Specifically, b2 = a^2 - n. - b2 := new(big.Int) - b2.Mul(a, a).Sub(b2, n) - - for round := range rounds { - // To see if b2 is a perfect square, we take its square root, square that, - // and check to see if we got the same result back. - bb.Sqrt(b2).Mul(bb, bb) - if b2.Cmp(bb) == 0 { - // b2 is a perfect square, so we've found integer values of a and b, - // and can easily compute p and q as their sum and difference. - bb.Sqrt(bb) - p := new(big.Int).Add(a, bb) - q := new(big.Int).Sub(a, bb) - return fmt.Errorf("public modulus n = pq factored in %d rounds into p: %s and q: %s", round+1, p, q) - } - - // Set up the next iteration by incrementing a by one and recalculating b2. - a.Add(a, one) - b2.Mul(a, a).Sub(b2, n) - } - return nil -} diff --git a/vendor/github.com/letsencrypt/boulder/identifier/identifier.go b/vendor/github.com/letsencrypt/boulder/identifier/identifier.go deleted file mode 100644 index 9054ea273a..0000000000 --- a/vendor/github.com/letsencrypt/boulder/identifier/identifier.go +++ /dev/null @@ -1,214 +0,0 @@ -// The identifier package defines types for RFC 8555 ACME identifiers. -// -// It exists as a separate package to prevent an import loop between the core -// and probs packages. -// -// Function naming conventions: -// - "New" creates a new instance from one or more simple base type inputs. -// - "From" and "To" extract information from, or compose, a more complex object. -package identifier - -import ( - "crypto/x509" - "fmt" - "net" - "net/netip" - "slices" - "strings" - - corepb "github.com/letsencrypt/boulder/core/proto" -) - -// IdentifierType is a named string type for registered ACME identifier types. -// See https://tools.ietf.org/html/rfc8555#section-9.7.7 -type IdentifierType string - -const ( - // TypeDNS is specified in RFC 8555 for TypeDNS type identifiers. - TypeDNS = IdentifierType("dns") - // TypeIP is specified in RFC 8738 - TypeIP = IdentifierType("ip") -) - -// IsValid tests whether the identifier type is known -func (i IdentifierType) IsValid() bool { - switch i { - case TypeDNS, TypeIP: - return true - default: - return false - } -} - -// ACMEIdentifier is a struct encoding an identifier that can be validated. The -// protocol allows for different types of identifier to be supported (DNS -// names, IP addresses, etc.), but currently we only support RFC 8555 DNS type -// identifiers for domain names. -type ACMEIdentifier struct { - // Type is the registered IdentifierType of the identifier. - Type IdentifierType `json:"type"` - // Value is the value of the identifier. For a DNS type identifier it is - // a domain name. - Value string `json:"value"` -} - -// ACMEIdentifiers is a named type for a slice of ACME identifiers, so that -// methods can be applied to these slices. -type ACMEIdentifiers []ACMEIdentifier - -func (i ACMEIdentifier) ToProto() *corepb.Identifier { - return &corepb.Identifier{ - Type: string(i.Type), - Value: i.Value, - } -} - -func FromProto(ident *corepb.Identifier) ACMEIdentifier { - return ACMEIdentifier{ - Type: IdentifierType(ident.Type), - Value: ident.Value, - } -} - -// ToProtoSlice is a convenience function for converting a slice of -// ACMEIdentifier into a slice of *corepb.Identifier, to use for RPCs. -func (idents ACMEIdentifiers) ToProtoSlice() []*corepb.Identifier { - var pbIdents []*corepb.Identifier - for _, ident := range idents { - pbIdents = append(pbIdents, ident.ToProto()) - } - return pbIdents -} - -// FromProtoSlice is a convenience function for converting a slice of -// *corepb.Identifier from RPCs into a slice of ACMEIdentifier. -func FromProtoSlice(pbIdents []*corepb.Identifier) ACMEIdentifiers { - var idents ACMEIdentifiers - - for _, pbIdent := range pbIdents { - idents = append(idents, FromProto(pbIdent)) - } - return idents -} - -// NewDNS is a convenience function for creating an ACMEIdentifier with Type -// "dns" for a given domain name. -func NewDNS(domain string) ACMEIdentifier { - return ACMEIdentifier{ - Type: TypeDNS, - Value: domain, - } -} - -// NewDNSSlice is a convenience function for creating a slice of ACMEIdentifier -// with Type "dns" for a given slice of domain names. -func NewDNSSlice(input []string) ACMEIdentifiers { - var out ACMEIdentifiers - for _, in := range input { - out = append(out, NewDNS(in)) - } - return out -} - -// NewIP is a convenience function for creating an ACMEIdentifier with Type "ip" -// for a given IP address. -func NewIP(ip netip.Addr) ACMEIdentifier { - return ACMEIdentifier{ - Type: TypeIP, - // RFC 8738, Sec. 3: The identifier value MUST contain the textual form - // of the address as defined in RFC 1123, Sec. 2.1 for IPv4 and in RFC - // 5952, Sec. 4 for IPv6. - Value: ip.String(), - } -} - -// fromX509 extracts the Subject Alternative Names from a certificate or CSR's fields, and -// returns a slice of ACMEIdentifiers. -func fromX509(commonName string, dnsNames []string, ipAddresses []net.IP) ACMEIdentifiers { - var sans ACMEIdentifiers - for _, name := range dnsNames { - sans = append(sans, NewDNS(name)) - } - if commonName != "" { - // Boulder won't generate certificates with a CN that's not also present - // in the SANs, but such a certificate is possible. If appended, this is - // deduplicated later with Normalize(). We assume the CN is a DNSName, - // because CNs are untyped strings without metadata, and we will never - // configure a Boulder profile to issue a certificate that contains both - // an IP address identifier and a CN. - sans = append(sans, NewDNS(commonName)) - } - - for _, ip := range ipAddresses { - sans = append(sans, ACMEIdentifier{ - Type: TypeIP, - Value: ip.String(), - }) - } - - return Normalize(sans) -} - -// FromCert extracts the Subject Common Name and Subject Alternative Names from -// a certificate, and returns a slice of ACMEIdentifiers. -func FromCert(cert *x509.Certificate) ACMEIdentifiers { - return fromX509(cert.Subject.CommonName, cert.DNSNames, cert.IPAddresses) -} - -// FromCSR extracts the Subject Common Name and Subject Alternative Names from a -// CSR, and returns a slice of ACMEIdentifiers. -func FromCSR(csr *x509.CertificateRequest) ACMEIdentifiers { - return fromX509(csr.Subject.CommonName, csr.DNSNames, csr.IPAddresses) -} - -// Normalize returns the set of all unique ACME identifiers in the input after -// all of them are lowercased. The returned identifier values will be in their -// lowercased form and sorted alphabetically by value. DNS identifiers will -// precede IP address identifiers. -func Normalize(idents ACMEIdentifiers) ACMEIdentifiers { - for i := range idents { - idents[i].Value = strings.ToLower(idents[i].Value) - } - - slices.SortFunc(idents, func(a, b ACMEIdentifier) int { - if a.Type == b.Type { - if a.Value == b.Value { - return 0 - } - if a.Value < b.Value { - return -1 - } - return 1 - } - if a.Type == "dns" && b.Type == "ip" { - return -1 - } - return 1 - }) - - return slices.Compact(idents) -} - -// ToValues returns a slice of DNS names and a slice of IP addresses in the -// input. If an identifier type or IP address is invalid, it returns an error. -func (idents ACMEIdentifiers) ToValues() ([]string, []net.IP, error) { - var dnsNames []string - var ipAddresses []net.IP - - for _, ident := range idents { - switch ident.Type { - case TypeDNS: - dnsNames = append(dnsNames, ident.Value) - case TypeIP: - ip := net.ParseIP(ident.Value) - if ip == nil { - return nil, nil, fmt.Errorf("parsing IP address: %s", ident.Value) - } - ipAddresses = append(ipAddresses, ip) - default: - return nil, nil, fmt.Errorf("evaluating identifier type: %s for %s", ident.Type, ident.Value) - } - } - - return dnsNames, ipAddresses, nil -} diff --git a/vendor/github.com/letsencrypt/boulder/probs/probs.go b/vendor/github.com/letsencrypt/boulder/probs/probs.go deleted file mode 100644 index 7ff35ca61f..0000000000 --- a/vendor/github.com/letsencrypt/boulder/probs/probs.go +++ /dev/null @@ -1,366 +0,0 @@ -package probs - -import ( - "fmt" - "net/http" - - "github.com/go-jose/go-jose/v4" - - "github.com/letsencrypt/boulder/identifier" -) - -const ( - // Error types that can be used in ACME payloads. These are sorted in the - // same order as they are defined in RFC8555 Section 6.7. We do not implement - // the `compound`, `externalAccountRequired`, or `userActionRequired` errors, - // because we have no path that would return them. - AccountDoesNotExistProblem = ProblemType("accountDoesNotExist") - // AlreadyReplacedProblem is a problem type that is defined in Section 7.4 - // of draft-ietf-acme-ari-08, for more information see: - // https://datatracker.ietf.org/doc/html/draft-ietf-acme-ari-08#section-7.4 - AlreadyReplacedProblem = ProblemType("alreadyReplaced") - AlreadyRevokedProblem = ProblemType("alreadyRevoked") - BadCSRProblem = ProblemType("badCSR") - BadNonceProblem = ProblemType("badNonce") - BadPublicKeyProblem = ProblemType("badPublicKey") - BadRevocationReasonProblem = ProblemType("badRevocationReason") - BadSignatureAlgorithmProblem = ProblemType("badSignatureAlgorithm") - CAAProblem = ProblemType("caa") - // ConflictProblem is a problem type that is not defined in RFC8555. - ConflictProblem = ProblemType("conflict") - ConnectionProblem = ProblemType("connection") - DNSProblem = ProblemType("dns") - InvalidContactProblem = ProblemType("invalidContact") - MalformedProblem = ProblemType("malformed") - OrderNotReadyProblem = ProblemType("orderNotReady") - PausedProblem = ProblemType("rateLimited") - RateLimitedProblem = ProblemType("rateLimited") - RejectedIdentifierProblem = ProblemType("rejectedIdentifier") - ServerInternalProblem = ProblemType("serverInternal") - TLSProblem = ProblemType("tls") - UnauthorizedProblem = ProblemType("unauthorized") - UnsupportedContactProblem = ProblemType("unsupportedContact") - UnsupportedIdentifierProblem = ProblemType("unsupportedIdentifier") - - // Defined in https://datatracker.ietf.org/doc/draft-aaron-acme-profiles/ - InvalidProfileProblem = ProblemType("invalidProfile") - - ErrorNS = "urn:ietf:params:acme:error:" -) - -// ProblemType defines the error types in the ACME protocol -type ProblemType string - -// ProblemDetails objects represent problem documents -// https://tools.ietf.org/html/draft-ietf-appsawg-http-problem-00 -type ProblemDetails struct { - Type ProblemType `json:"type,omitempty"` - Detail string `json:"detail,omitempty"` - // HTTPStatus is the HTTP status code the ProblemDetails should probably be sent - // as. - HTTPStatus int `json:"status,omitempty"` - // SubProblems are optional additional per-identifier problems. See - // RFC 8555 Section 6.7.1: https://tools.ietf.org/html/rfc8555#section-6.7.1 - SubProblems []SubProblemDetails `json:"subproblems,omitempty"` - // Algorithms is an extension field defined only for problem documents of type - // badSignatureAlgorithm. See RFC 8555, Section 6.2: - // https://datatracker.ietf.org/doc/html/rfc8555#section-6.2 - Algorithms []jose.SignatureAlgorithm `json:"algorithms,omitempty"` -} - -// SubProblemDetails represents sub-problems specific to an identifier that are -// related to a top-level ProblemDetails. -// See RFC 8555 Section 6.7.1: https://tools.ietf.org/html/rfc8555#section-6.7.1 -type SubProblemDetails struct { - ProblemDetails - Identifier identifier.ACMEIdentifier `json:"identifier"` -} - -func (pd *ProblemDetails) String() string { - return fmt.Sprintf("%s :: %s", pd.Type, pd.Detail) -} - -// WithSubProblems returns a new ProblemsDetails instance created by adding the -// provided subProbs to the existing ProblemsDetail. -func (pd *ProblemDetails) WithSubProblems(subProbs []SubProblemDetails) *ProblemDetails { - return &ProblemDetails{ - Type: pd.Type, - Detail: pd.Detail, - HTTPStatus: pd.HTTPStatus, - SubProblems: append(pd.SubProblems, subProbs...), - } -} - -// Helper functions which construct the basic RFC8555 Problem Documents, with -// the Type already set and the Details supplied by the caller. - -// AccountDoesNotExist returns a ProblemDetails representing an -// AccountDoesNotExistProblem error -func AccountDoesNotExist(detail string) *ProblemDetails { - return &ProblemDetails{ - Type: AccountDoesNotExistProblem, - Detail: detail, - HTTPStatus: http.StatusBadRequest, - } -} - -// AlreadyReplaced returns a ProblemDetails with a AlreadyReplacedProblem and a -// 409 Conflict status code. -func AlreadyReplaced(detail string) *ProblemDetails { - return &ProblemDetails{ - Type: AlreadyReplacedProblem, - Detail: detail, - HTTPStatus: http.StatusConflict, - } -} - -// AlreadyRevoked returns a ProblemDetails with a AlreadyRevokedProblem and a 400 Bad -// Request status code. -func AlreadyRevoked(detail string) *ProblemDetails { - return &ProblemDetails{ - Type: AlreadyRevokedProblem, - Detail: detail, - HTTPStatus: http.StatusBadRequest, - } -} - -// BadCSR returns a ProblemDetails representing a BadCSRProblem. -func BadCSR(detail string) *ProblemDetails { - return &ProblemDetails{ - Type: BadCSRProblem, - Detail: detail, - HTTPStatus: http.StatusBadRequest, - } -} - -// BadNonce returns a ProblemDetails with a BadNonceProblem and a 400 Bad -// Request status code. -func BadNonce(detail string) *ProblemDetails { - return &ProblemDetails{ - Type: BadNonceProblem, - Detail: detail, - HTTPStatus: http.StatusBadRequest, - } -} - -// BadPublicKey returns a ProblemDetails with a BadPublicKeyProblem and a 400 Bad -// Request status code. -func BadPublicKey(detail string) *ProblemDetails { - return &ProblemDetails{ - Type: BadPublicKeyProblem, - Detail: detail, - HTTPStatus: http.StatusBadRequest, - } -} - -// BadRevocationReason returns a ProblemDetails representing -// a BadRevocationReasonProblem -func BadRevocationReason(detail string) *ProblemDetails { - return &ProblemDetails{ - Type: BadRevocationReasonProblem, - Detail: detail, - HTTPStatus: http.StatusBadRequest, - } -} - -// BadSignatureAlgorithm returns a ProblemDetails with a BadSignatureAlgorithmProblem -// and a 400 Bad Request status code. -func BadSignatureAlgorithm(detail string) *ProblemDetails { - return &ProblemDetails{ - Type: BadSignatureAlgorithmProblem, - Detail: detail, - HTTPStatus: http.StatusBadRequest, - } -} - -// CAA returns a ProblemDetails representing a CAAProblem -func CAA(detail string) *ProblemDetails { - return &ProblemDetails{ - Type: CAAProblem, - Detail: detail, - HTTPStatus: http.StatusForbidden, - } -} - -// Connection returns a ProblemDetails representing a ConnectionProblem -// error -func Connection(detail string) *ProblemDetails { - return &ProblemDetails{ - Type: ConnectionProblem, - Detail: detail, - HTTPStatus: http.StatusBadRequest, - } -} - -// DNS returns a ProblemDetails representing a DNSProblem -func DNS(detail string) *ProblemDetails { - return &ProblemDetails{ - Type: DNSProblem, - Detail: detail, - HTTPStatus: http.StatusBadRequest, - } -} - -// InvalidContact returns a ProblemDetails representing an InvalidContactProblem. -func InvalidContact(detail string) *ProblemDetails { - return &ProblemDetails{ - Type: InvalidContactProblem, - Detail: detail, - HTTPStatus: http.StatusBadRequest, - } -} - -// Malformed returns a ProblemDetails with a MalformedProblem and a 400 Bad -// Request status code. -func Malformed(detail string, a ...any) *ProblemDetails { - if len(a) > 0 { - detail = fmt.Sprintf(detail, a...) - } - return &ProblemDetails{ - Type: MalformedProblem, - Detail: detail, - HTTPStatus: http.StatusBadRequest, - } -} - -// OrderNotReady returns a ProblemDetails representing a OrderNotReadyProblem -func OrderNotReady(detail string) *ProblemDetails { - return &ProblemDetails{ - Type: OrderNotReadyProblem, - Detail: detail, - HTTPStatus: http.StatusForbidden, - } -} - -// RateLimited returns a ProblemDetails representing a RateLimitedProblem error -func RateLimited(detail string) *ProblemDetails { - return &ProblemDetails{ - Type: RateLimitedProblem, - Detail: detail, - HTTPStatus: http.StatusTooManyRequests, - } -} - -// Paused returns a ProblemDetails representing a RateLimitedProblem error -func Paused(detail string) *ProblemDetails { - return &ProblemDetails{ - Type: PausedProblem, - Detail: detail, - HTTPStatus: http.StatusTooManyRequests, - } -} - -// RejectedIdentifier returns a ProblemDetails with a RejectedIdentifierProblem and a 400 Bad -// Request status code. -func RejectedIdentifier(detail string) *ProblemDetails { - return &ProblemDetails{ - Type: RejectedIdentifierProblem, - Detail: detail, - HTTPStatus: http.StatusBadRequest, - } -} - -// ServerInternal returns a ProblemDetails with a ServerInternalProblem and a -// 500 Internal Server Failure status code. -func ServerInternal(detail string) *ProblemDetails { - return &ProblemDetails{ - Type: ServerInternalProblem, - Detail: detail, - HTTPStatus: http.StatusInternalServerError, - } -} - -// TLS returns a ProblemDetails representing a TLSProblem error -func TLS(detail string) *ProblemDetails { - return &ProblemDetails{ - Type: TLSProblem, - Detail: detail, - HTTPStatus: http.StatusBadRequest, - } -} - -// Unauthorized returns a ProblemDetails with an UnauthorizedProblem and a 403 -// Forbidden status code. -func Unauthorized(detail string) *ProblemDetails { - return &ProblemDetails{ - Type: UnauthorizedProblem, - Detail: detail, - HTTPStatus: http.StatusForbidden, - } -} - -// UnsupportedContact returns a ProblemDetails representing an -// UnsupportedContactProblem -func UnsupportedContact(detail string) *ProblemDetails { - return &ProblemDetails{ - Type: UnsupportedContactProblem, - Detail: detail, - HTTPStatus: http.StatusBadRequest, - } -} - -// UnsupportedIdentifier returns a ProblemDetails representing an -// UnsupportedIdentifierProblem -func UnsupportedIdentifier(detail string, a ...any) *ProblemDetails { - return &ProblemDetails{ - Type: UnsupportedIdentifierProblem, - Detail: fmt.Sprintf(detail, a...), - HTTPStatus: http.StatusBadRequest, - } -} - -// Additional helper functions that return variations on MalformedProblem with -// different HTTP status codes set. - -// Canceled returns a ProblemDetails with a MalformedProblem and a 408 Request -// Timeout status code. -func Canceled(detail string, a ...any) *ProblemDetails { - if len(a) > 0 { - detail = fmt.Sprintf(detail, a...) - } - return &ProblemDetails{ - Type: MalformedProblem, - Detail: detail, - HTTPStatus: http.StatusRequestTimeout, - } -} - -// Conflict returns a ProblemDetails with a ConflictProblem and a 409 Conflict -// status code. -func Conflict(detail string) *ProblemDetails { - return &ProblemDetails{ - Type: ConflictProblem, - Detail: detail, - HTTPStatus: http.StatusConflict, - } -} - -// MethodNotAllowed returns a ProblemDetails representing a disallowed HTTP -// method error. -func MethodNotAllowed() *ProblemDetails { - return &ProblemDetails{ - Type: MalformedProblem, - Detail: "Method not allowed", - HTTPStatus: http.StatusMethodNotAllowed, - } -} - -// NotFound returns a ProblemDetails with a MalformedProblem and a 404 Not Found -// status code. -func NotFound(detail string) *ProblemDetails { - return &ProblemDetails{ - Type: MalformedProblem, - Detail: detail, - HTTPStatus: http.StatusNotFound, - } -} - -// InvalidProfile returns a ProblemDetails with type InvalidProfile, specified -// in https://datatracker.ietf.org/doc/draft-aaron-acme-profiles/. -func InvalidProfile(detail string) *ProblemDetails { - return &ProblemDetails{ - Type: InvalidProfileProblem, - Detail: detail, - HTTPStatus: http.StatusBadRequest, - } -} diff --git a/vendor/github.com/letsencrypt/boulder/revocation/reasons.go b/vendor/github.com/letsencrypt/boulder/revocation/reasons.go deleted file mode 100644 index 50f556be01..0000000000 --- a/vendor/github.com/letsencrypt/boulder/revocation/reasons.go +++ /dev/null @@ -1,72 +0,0 @@ -package revocation - -import ( - "fmt" - "sort" - "strings" - - "golang.org/x/crypto/ocsp" -) - -// Reason is used to specify a certificate revocation reason -type Reason int - -// ReasonToString provides a map from reason code to string -var ReasonToString = map[Reason]string{ - ocsp.Unspecified: "unspecified", - ocsp.KeyCompromise: "keyCompromise", - ocsp.CACompromise: "cACompromise", - ocsp.AffiliationChanged: "affiliationChanged", - ocsp.Superseded: "superseded", - ocsp.CessationOfOperation: "cessationOfOperation", - ocsp.CertificateHold: "certificateHold", - // 7 is unused - ocsp.RemoveFromCRL: "removeFromCRL", - ocsp.PrivilegeWithdrawn: "privilegeWithdrawn", - ocsp.AACompromise: "aAcompromise", -} - -// UserAllowedReasons contains the subset of Reasons which users are -// allowed to use -var UserAllowedReasons = map[Reason]struct{}{ - ocsp.Unspecified: {}, - ocsp.KeyCompromise: {}, - ocsp.Superseded: {}, - ocsp.CessationOfOperation: {}, -} - -// AdminAllowedReasons contains the subset of Reasons which admins are allowed -// to use. Reasons not found here will soon be forbidden from appearing in CRLs -// or OCSP responses by root programs. -var AdminAllowedReasons = map[Reason]struct{}{ - ocsp.Unspecified: {}, - ocsp.KeyCompromise: {}, - ocsp.Superseded: {}, - ocsp.CessationOfOperation: {}, - ocsp.PrivilegeWithdrawn: {}, -} - -// UserAllowedReasonsMessage contains a string describing a list of user allowed -// revocation reasons. This is useful when a revocation is rejected because it -// is not a valid user supplied reason and the allowed values must be -// communicated. This variable is populated during package initialization. -var UserAllowedReasonsMessage = "" - -func init() { - // Build a slice of ints from the allowed reason codes. - // We want a slice because iterating `UserAllowedReasons` will change order - // and make the message unpredictable and cumbersome for unit testing. - // We use []ints instead of []Reason to use `sort.Ints` without fuss. - var allowed []int - for reason := range UserAllowedReasons { - allowed = append(allowed, int(reason)) - } - sort.Ints(allowed) - - var reasonStrings []string - for _, reason := range allowed { - reasonStrings = append(reasonStrings, fmt.Sprintf("%s (%d)", - ReasonToString[Reason(reason)], reason)) - } - UserAllowedReasonsMessage = strings.Join(reasonStrings, ", ") -} diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.c b/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.c index 78b6f5b8a8..387a5e9655 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.c +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.c @@ -1,7 +1,7 @@ #ifndef USE_LIBSQLITE3 /****************************************************************************** ** This file is an amalgamation of many separate C source files from SQLite -** version 3.50.4. By combining all the individual C code files into this +** version 3.51.1. By combining all the individual C code files into this ** single large file, the entire code can be compiled as a single translation ** unit. This allows many compilers to do optimizations that would not be ** possible if the files were compiled separately. Performance improvements @@ -19,7 +19,7 @@ ** separate file. This file contains only code for the core SQLite library. ** ** The content in this amalgamation comes from Fossil check-in -** 4d8adfb30e03f9cf27f800a2c1ba3c48fb4c with changes in files: +** 281fc0e9afc38674b9b0991943b9e9d1e64c with changes in files: ** ** */ @@ -171,7 +171,9 @@ #define HAVE_UTIME 1 #else /* This is not VxWorks. */ -#define OS_VXWORKS 0 +#ifndef OS_VXWORKS +# define OS_VXWORKS 0 +#endif #define HAVE_FCHOWN 1 #define HAVE_READLINK 1 #define HAVE_LSTAT 1 @@ -466,9 +468,12 @@ extern "C" { ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.50.4" -#define SQLITE_VERSION_NUMBER 3050004 -#define SQLITE_SOURCE_ID "2025-07-30 19:33:53 4d8adfb30e03f9cf27f800a2c1ba3c48fb4ca1b08b0f5ed59a4d5ecbf45e20a3" +#define SQLITE_VERSION "3.51.1" +#define SQLITE_VERSION_NUMBER 3051001 +#define SQLITE_SOURCE_ID "2025-11-28 17:28:25 281fc0e9afc38674b9b0991943b9e9d1e64c6cbdb133d35f6f5c87ff6af38a88" +#define SQLITE_SCM_BRANCH "branch-3.51" +#define SQLITE_SCM_TAGS "release version-3.51.1" +#define SQLITE_SCM_DATETIME "2025-11-28T17:28:25.933Z" /* ** CAPI3REF: Run-Time Library Version Numbers @@ -488,9 +493,9 @@ extern "C" { ** assert( strcmp(sqlite3_libversion(),SQLITE_VERSION)==0 ); ** )^ ** -** ^The sqlite3_version[] string constant contains the text of [SQLITE_VERSION] -** macro. ^The sqlite3_libversion() function returns a pointer to the -** to the sqlite3_version[] string constant. The sqlite3_libversion() +** ^The sqlite3_version[] string constant contains the text of the +** [SQLITE_VERSION] macro. ^The sqlite3_libversion() function returns a +** pointer to the sqlite3_version[] string constant. The sqlite3_libversion() ** function is provided for use in DLLs since DLL users usually do not have ** direct access to string constants within the DLL. ^The ** sqlite3_libversion_number() function returns an integer equal to @@ -690,7 +695,7 @@ typedef int (*sqlite3_callback)(void*,int,char**, char**); ** without having to use a lot of C code. ** ** ^The sqlite3_exec() interface runs zero or more UTF-8 encoded, -** semicolon-separate SQL statements passed into its 2nd argument, +** semicolon-separated SQL statements passed into its 2nd argument, ** in the context of the [database connection] passed in as its 1st ** argument. ^If the callback function of the 3rd argument to ** sqlite3_exec() is not NULL, then it is invoked for each result row @@ -723,7 +728,7 @@ typedef int (*sqlite3_callback)(void*,int,char**, char**); ** result row is NULL then the corresponding string pointer for the ** sqlite3_exec() callback is a NULL pointer. ^The 4th argument to the ** sqlite3_exec() callback is an array of pointers to strings where each -** entry represents the name of corresponding result column as obtained +** entry represents the name of a corresponding result column as obtained ** from [sqlite3_column_name()]. ** ** ^If the 2nd parameter to sqlite3_exec() is a NULL pointer, a pointer @@ -817,6 +822,9 @@ SQLITE_API int sqlite3_exec( #define SQLITE_ERROR_MISSING_COLLSEQ (SQLITE_ERROR | (1<<8)) #define SQLITE_ERROR_RETRY (SQLITE_ERROR | (2<<8)) #define SQLITE_ERROR_SNAPSHOT (SQLITE_ERROR | (3<<8)) +#define SQLITE_ERROR_RESERVESIZE (SQLITE_ERROR | (4<<8)) +#define SQLITE_ERROR_KEY (SQLITE_ERROR | (5<<8)) +#define SQLITE_ERROR_UNABLE (SQLITE_ERROR | (6<<8)) #define SQLITE_IOERR_READ (SQLITE_IOERR | (1<<8)) #define SQLITE_IOERR_SHORT_READ (SQLITE_IOERR | (2<<8)) #define SQLITE_IOERR_WRITE (SQLITE_IOERR | (3<<8)) @@ -851,6 +859,8 @@ SQLITE_API int sqlite3_exec( #define SQLITE_IOERR_DATA (SQLITE_IOERR | (32<<8)) #define SQLITE_IOERR_CORRUPTFS (SQLITE_IOERR | (33<<8)) #define SQLITE_IOERR_IN_PAGE (SQLITE_IOERR | (34<<8)) +#define SQLITE_IOERR_BADKEY (SQLITE_IOERR | (35<<8)) +#define SQLITE_IOERR_CODEC (SQLITE_IOERR | (36<<8)) #define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8)) #define SQLITE_LOCKED_VTAB (SQLITE_LOCKED | (2<<8)) #define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8)) @@ -909,7 +919,7 @@ SQLITE_API int sqlite3_exec( ** Note in particular that passing the SQLITE_OPEN_EXCLUSIVE flag into ** [sqlite3_open_v2()] does *not* cause the underlying database file ** to be opened using O_EXCL. Passing SQLITE_OPEN_EXCLUSIVE into -** [sqlite3_open_v2()] has historically be a no-op and might become an +** [sqlite3_open_v2()] has historically been a no-op and might become an ** error in future versions of SQLite. */ #define SQLITE_OPEN_READONLY 0x00000001 /* Ok for sqlite3_open_v2() */ @@ -1003,7 +1013,7 @@ SQLITE_API int sqlite3_exec( ** SQLite uses one of these integer values as the second ** argument to calls it makes to the xLock() and xUnlock() methods ** of an [sqlite3_io_methods] object. These values are ordered from -** lest restrictive to most restrictive. +** least restrictive to most restrictive. ** ** The argument to xLock() is always SHARED or higher. The argument to ** xUnlock is either SHARED or NONE. @@ -1244,7 +1254,7 @@ struct sqlite3_io_methods { ** connection. See also [SQLITE_FCNTL_FILE_POINTER]. ** **
  • [[SQLITE_FCNTL_SYNC_OMITTED]] -** No longer in use. +** The SQLITE_FCNTL_SYNC_OMITTED file-control is no longer used. ** **
  • [[SQLITE_FCNTL_SYNC]] ** The [SQLITE_FCNTL_SYNC] opcode is generated internally by SQLite and @@ -1319,7 +1329,7 @@ struct sqlite3_io_methods { ** **
  • [[SQLITE_FCNTL_VFSNAME]] ** ^The [SQLITE_FCNTL_VFSNAME] opcode can be used to obtain the names of -** all [VFSes] in the VFS stack. The names are of all VFS shims and the +** all [VFSes] in the VFS stack. The names of all VFS shims and the ** final bottom-level VFS are written into memory obtained from ** [sqlite3_malloc()] and the result is stored in the char* variable ** that the fourth parameter of [sqlite3_file_control()] points to. @@ -1333,7 +1343,7 @@ struct sqlite3_io_methods { ** ^The [SQLITE_FCNTL_VFS_POINTER] opcode finds a pointer to the top-level ** [VFSes] currently in use. ^(The argument X in ** sqlite3_file_control(db,SQLITE_FCNTL_VFS_POINTER,X) must be -** of type "[sqlite3_vfs] **". This opcodes will set *X +** of type "[sqlite3_vfs] **". This opcode will set *X ** to a pointer to the top-level VFS.)^ ** ^When there are multiple VFS shims in the stack, this opcode finds the ** upper-most shim only. @@ -1523,7 +1533,7 @@ struct sqlite3_io_methods { **
  • [[SQLITE_FCNTL_EXTERNAL_READER]] ** The EXPERIMENTAL [SQLITE_FCNTL_EXTERNAL_READER] opcode is used to detect ** whether or not there is a database client in another process with a wal-mode -** transaction open on the database or not. It is only available on unix.The +** transaction open on the database or not. It is only available on unix. The ** (void*) argument passed with this file-control should be a pointer to a ** value of type (int). The integer value is set to 1 if the database is a wal ** mode database and there exists at least one client in another process that @@ -1541,6 +1551,15 @@ struct sqlite3_io_methods { ** database is not a temp db, then the [SQLITE_FCNTL_RESET_CACHE] file-control ** purges the contents of the in-memory page cache. If there is an open ** transaction, or if the db is a temp-db, this opcode is a no-op, not an error. +** +**
  • [[SQLITE_FCNTL_FILESTAT]] +** The [SQLITE_FCNTL_FILESTAT] opcode returns low-level diagnostic information +** about the [sqlite3_file] objects used access the database and journal files +** for the given schema. The fourth parameter to [sqlite3_file_control()] +** should be an initialized [sqlite3_str] pointer. JSON text describing +** various aspects of the sqlite3_file object is appended to the sqlite3_str. +** The SQLITE_FCNTL_FILESTAT opcode is usually a no-op, unless compile-time +** options are used to enable it. ** */ #define SQLITE_FCNTL_LOCKSTATE 1 @@ -1586,6 +1605,7 @@ struct sqlite3_io_methods { #define SQLITE_FCNTL_RESET_CACHE 42 #define SQLITE_FCNTL_NULL_IO 43 #define SQLITE_FCNTL_BLOCK_ON_CONNECT 44 +#define SQLITE_FCNTL_FILESTAT 45 /* deprecated names */ #define SQLITE_GET_LOCKPROXYFILE SQLITE_FCNTL_GET_LOCKPROXYFILE @@ -1948,7 +1968,7 @@ struct sqlite3_vfs { ** SQLite interfaces so that an application usually does not need to ** invoke sqlite3_initialize() directly. For example, [sqlite3_open()] ** calls sqlite3_initialize() so the SQLite library will be automatically -** initialized when [sqlite3_open()] is called if it has not be initialized +** initialized when [sqlite3_open()] is called if it has not been initialized ** already. ^However, if SQLite is compiled with the [SQLITE_OMIT_AUTOINIT] ** compile-time option, then the automatic calls to sqlite3_initialize() ** are omitted and the application must call sqlite3_initialize() directly @@ -2205,21 +2225,21 @@ struct sqlite3_mem_methods { ** The [sqlite3_mem_methods] ** structure is filled with the currently defined memory allocation routines.)^ ** This option can be used to overload the default memory allocation -** routines with a wrapper that simulations memory allocation failure or +** routines with a wrapper that simulates memory allocation failure or ** tracks memory usage, for example. ** ** [[SQLITE_CONFIG_SMALL_MALLOC]]
    SQLITE_CONFIG_SMALL_MALLOC
    -**
    ^The SQLITE_CONFIG_SMALL_MALLOC option takes single argument of +**
    ^The SQLITE_CONFIG_SMALL_MALLOC option takes a single argument of ** type int, interpreted as a boolean, which if true provides a hint to ** SQLite that it should avoid large memory allocations if possible. ** SQLite will run faster if it is free to make large memory allocations, -** but some application might prefer to run slower in exchange for +** but some applications might prefer to run slower in exchange for ** guarantees about memory fragmentation that are possible if large ** allocations are avoided. This hint is normally off. **
    ** ** [[SQLITE_CONFIG_MEMSTATUS]]
    SQLITE_CONFIG_MEMSTATUS
    -**
    ^The SQLITE_CONFIG_MEMSTATUS option takes single argument of type int, +**
    ^The SQLITE_CONFIG_MEMSTATUS option takes a single argument of type int, ** interpreted as a boolean, which enables or disables the collection of ** memory allocation statistics. ^(When memory allocation statistics are ** disabled, the following SQLite interfaces become non-operational: @@ -2264,7 +2284,7 @@ struct sqlite3_mem_methods { ** ^If pMem is NULL and N is non-zero, then each database connection ** does an initial bulk allocation for page cache memory ** from [sqlite3_malloc()] sufficient for N cache lines if N is positive or -** of -1024*N bytes if N is negative, . ^If additional +** of -1024*N bytes if N is negative. ^If additional ** page cache memory is needed beyond what is provided by the initial ** allocation, then SQLite goes to [sqlite3_malloc()] separately for each ** additional cache line.
    @@ -2293,7 +2313,7 @@ struct sqlite3_mem_methods { **
    ^(The SQLITE_CONFIG_MUTEX option takes a single argument which is a ** pointer to an instance of the [sqlite3_mutex_methods] structure. ** The argument specifies alternative low-level mutex routines to be used -** in place the mutex routines built into SQLite.)^ ^SQLite makes a copy of +** in place of the mutex routines built into SQLite.)^ ^SQLite makes a copy of ** the content of the [sqlite3_mutex_methods] structure before the call to ** [sqlite3_config()] returns. ^If SQLite is compiled with ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then @@ -2335,7 +2355,7 @@ struct sqlite3_mem_methods { ** ** [[SQLITE_CONFIG_GETPCACHE2]]
    SQLITE_CONFIG_GETPCACHE2
    **
    ^(The SQLITE_CONFIG_GETPCACHE2 option takes a single argument which -** is a pointer to an [sqlite3_pcache_methods2] object. SQLite copies of +** is a pointer to an [sqlite3_pcache_methods2] object. SQLite copies off ** the current page cache implementation into that object.)^
    ** ** [[SQLITE_CONFIG_LOG]]
    SQLITE_CONFIG_LOG
    @@ -2352,7 +2372,7 @@ struct sqlite3_mem_methods { ** the logger function is a copy of the first parameter to the corresponding ** [sqlite3_log()] call and is intended to be a [result code] or an ** [extended result code]. ^The third parameter passed to the logger is -** log message after formatting via [sqlite3_snprintf()]. +** a log message after formatting via [sqlite3_snprintf()]. ** The SQLite logging interface is not reentrant; the logger function ** supplied by the application must not invoke any SQLite interface. ** In a multi-threaded application, the application-defined logger @@ -2543,7 +2563,7 @@ struct sqlite3_mem_methods { ** These constants are the available integer configuration options that ** can be passed as the second parameter to the [sqlite3_db_config()] interface. ** -** The [sqlite3_db_config()] interface is a var-args functions. It takes a +** The [sqlite3_db_config()] interface is a var-args function. It takes a ** variable number of parameters, though always at least two. The number of ** parameters passed into sqlite3_db_config() depends on which of these ** constants is given as the second parameter. This documentation page @@ -2655,17 +2675,20 @@ struct sqlite3_mem_methods { ** ** [[SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER]] **
    SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER
    -**
    ^This option is used to enable or disable the -** [fts3_tokenizer()] function which is part of the -** [FTS3] full-text search engine extension. -** There must be two additional arguments. -** The first argument is an integer which is 0 to disable fts3_tokenizer() or -** positive to enable fts3_tokenizer() or negative to leave the setting -** unchanged. -** The second parameter is a pointer to an integer into which -** is written 0 or 1 to indicate whether fts3_tokenizer is disabled or enabled -** following this call. The second parameter may be a NULL pointer, in -** which case the new setting is not reported back.
    +**
    ^This option is used to enable or disable using the +** [fts3_tokenizer()] function - part of the [FTS3] full-text search engine +** extension - without using bound parameters as the parameters. Doing so +** is disabled by default. There must be two additional arguments. The first +** argument is an integer. If it is passed 0, then using fts3_tokenizer() +** without bound parameters is disabled. If it is passed a positive value, +** then calling fts3_tokenizer without bound parameters is enabled. If it +** is passed a negative value, this setting is not modified - this can be +** used to query for the current setting. The second parameter is a pointer +** to an integer into which is written 0 or 1 to indicate the current value +** of this setting (after it is modified, if applicable). The second +** parameter may be a NULL pointer, in which case the value of the setting +** is not reported back. Refer to [FTS3] documentation for further details. +**
    ** ** [[SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION]] **
    SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION
    @@ -2677,8 +2700,8 @@ struct sqlite3_mem_methods { ** When the first argument to this interface is 1, then only the C-API is ** enabled and the SQL function remains disabled. If the first argument to ** this interface is 0, then both the C-API and the SQL function are disabled. -** If the first argument is -1, then no changes are made to state of either the -** C-API or the SQL function. +** If the first argument is -1, then no changes are made to the state of either +** the C-API or the SQL function. ** The second parameter is a pointer to an integer into which ** is written 0 or 1 to indicate whether [sqlite3_load_extension()] interface ** is disabled or enabled following this call. The second parameter may @@ -2796,7 +2819,7 @@ struct sqlite3_mem_methods { ** [[SQLITE_DBCONFIG_LEGACY_ALTER_TABLE]] **
    SQLITE_DBCONFIG_LEGACY_ALTER_TABLE
    **
    The SQLITE_DBCONFIG_LEGACY_ALTER_TABLE option activates or deactivates -** the legacy behavior of the [ALTER TABLE RENAME] command such it +** the legacy behavior of the [ALTER TABLE RENAME] command such that it ** behaves as it did prior to [version 3.24.0] (2018-06-04). See the ** "Compatibility Notice" on the [ALTER TABLE RENAME documentation] for ** additional information. This feature can also be turned on and off @@ -2845,7 +2868,7 @@ struct sqlite3_mem_methods { **
    SQLITE_DBCONFIG_LEGACY_FILE_FORMAT
    **
    The SQLITE_DBCONFIG_LEGACY_FILE_FORMAT option activates or deactivates ** the legacy file format flag. When activated, this flag causes all newly -** created database file to have a schema format version number (the 4-byte +** created database files to have a schema format version number (the 4-byte ** integer found at offset 44 into the database header) of 1. This in turn ** means that the resulting database file will be readable and writable by ** any SQLite version back to 3.0.0 ([dateof:3.0.0]). Without this setting, @@ -2872,7 +2895,7 @@ struct sqlite3_mem_methods { ** the database handle both when the SQL statement is prepared and when it ** is stepped. The flag is set (collection of statistics is enabled) ** by default.

    This option takes two arguments: an integer and a pointer to -** an integer.. The first argument is 1, 0, or -1 to enable, disable, or +** an integer. The first argument is 1, 0, or -1 to enable, disable, or ** leave unchanged the statement scanstatus option. If the second argument ** is not NULL, then the value of the statement scanstatus setting after ** processing the first argument is written into the integer that the second @@ -2915,8 +2938,8 @@ struct sqlite3_mem_methods { **

    The SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE option enables or disables the ** ability of the [ATTACH DATABASE] SQL command to open a database for writing. ** This capability is enabled by default. Applications can disable or -** reenable this capability using the current DBCONFIG option. If the -** the this capability is disabled, the [ATTACH] command will still work, +** reenable this capability using the current DBCONFIG option. If +** this capability is disabled, the [ATTACH] command will still work, ** but the database will be opened read-only. If this option is disabled, ** then the ability to create a new database using [ATTACH] is also disabled, ** regardless of the value of the [SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE] @@ -2950,7 +2973,7 @@ struct sqlite3_mem_methods { ** **

    Most of the SQLITE_DBCONFIG options take two arguments, so that the ** overall call to [sqlite3_db_config()] has a total of four parameters. -** The first argument (the third parameter to sqlite3_db_config()) is a integer. +** The first argument (the third parameter to sqlite3_db_config()) is an integer. ** The second argument is a pointer to an integer. If the first argument is 1, ** then the option becomes enabled. If the first integer argument is 0, then the ** option is disabled. If the first argument is -1, then the option setting @@ -3240,7 +3263,7 @@ SQLITE_API int sqlite3_is_interrupted(sqlite3*); ** ^These routines return 0 if the statement is incomplete. ^If a ** memory allocation fails, then SQLITE_NOMEM is returned. ** -** ^These routines do not parse the SQL statements thus +** ^These routines do not parse the SQL statements and thus ** will not detect syntactically incorrect SQL. ** ** ^(If SQLite has not been initialized using [sqlite3_initialize()] prior @@ -3357,7 +3380,7 @@ SQLITE_API int sqlite3_busy_timeout(sqlite3*, int ms); ** indefinitely if possible. The results of passing any other negative value ** are undefined. ** -** Internally, each SQLite database handle store two timeout values - the +** Internally, each SQLite database handle stores two timeout values - the ** busy-timeout (used for rollback mode databases, or if the VFS does not ** support blocking locks) and the setlk-timeout (used for blocking locks ** on wal-mode databases). The sqlite3_busy_timeout() method sets both @@ -3387,7 +3410,7 @@ SQLITE_API int sqlite3_setlk_timeout(sqlite3*, int ms, int flags); ** This is a legacy interface that is preserved for backwards compatibility. ** Use of this interface is not recommended. ** -** Definition: A result table is memory data structure created by the +** Definition: A result table is a memory data structure created by the ** [sqlite3_get_table()] interface. A result table records the ** complete query results from one or more queries. ** @@ -3530,7 +3553,7 @@ SQLITE_API char *sqlite3_vsnprintf(int,char*,const char*, va_list); ** ^Calling sqlite3_free() with a pointer previously returned ** by sqlite3_malloc() or sqlite3_realloc() releases that memory so ** that it might be reused. ^The sqlite3_free() routine is -** a no-op if is called with a NULL pointer. Passing a NULL pointer +** a no-op if it is called with a NULL pointer. Passing a NULL pointer ** to sqlite3_free() is harmless. After being freed, memory ** should neither be read nor written. Even reading previously freed ** memory might result in a segmentation fault or other severe error. @@ -3548,13 +3571,13 @@ SQLITE_API char *sqlite3_vsnprintf(int,char*,const char*, va_list); ** sqlite3_free(X). ** ^sqlite3_realloc(X,N) returns a pointer to a memory allocation ** of at least N bytes in size or NULL if insufficient memory is available. -** ^If M is the size of the prior allocation, then min(N,M) bytes -** of the prior allocation are copied into the beginning of buffer returned +** ^If M is the size of the prior allocation, then min(N,M) bytes of the +** prior allocation are copied into the beginning of the buffer returned ** by sqlite3_realloc(X,N) and the prior allocation is freed. ** ^If sqlite3_realloc(X,N) returns NULL and N is positive, then the ** prior allocation is not freed. ** -** ^The sqlite3_realloc64(X,N) interfaces works the same as +** ^The sqlite3_realloc64(X,N) interface works the same as ** sqlite3_realloc(X,N) except that N is a 64-bit unsigned integer instead ** of a 32-bit signed integer. ** @@ -3604,7 +3627,7 @@ SQLITE_API sqlite3_uint64 sqlite3_msize(void*); ** was last reset. ^The values returned by [sqlite3_memory_used()] and ** [sqlite3_memory_highwater()] include any overhead ** added by SQLite in its implementation of [sqlite3_malloc()], -** but not overhead added by the any underlying system library +** but not overhead added by any underlying system library ** routines that [sqlite3_malloc()] may call. ** ** ^The memory high-water mark is reset to the current value of @@ -4056,7 +4079,7 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*); ** there is no harm in trying.) ** ** ^(

    [SQLITE_OPEN_SHAREDCACHE]
    -**
    The database is opened [shared cache] enabled, overriding +**
    The database is opened with [shared cache] enabled, overriding ** the default shared cache setting provided by ** [sqlite3_enable_shared_cache()].)^ ** The [use of shared cache mode is discouraged] and hence shared cache @@ -4064,7 +4087,7 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*); ** this option is a no-op. ** ** ^(
    [SQLITE_OPEN_PRIVATECACHE]
    -**
    The database is opened [shared cache] disabled, overriding +**
    The database is opened with [shared cache] disabled, overriding ** the default shared cache setting provided by ** [sqlite3_enable_shared_cache()].)^ ** @@ -4482,7 +4505,7 @@ SQLITE_API void sqlite3_free_filename(sqlite3_filename); ** subsequent calls to other SQLite interface functions.)^ ** ** ^The sqlite3_errstr(E) interface returns the English-language text -** that describes the [result code] E, as UTF-8, or NULL if E is not an +** that describes the [result code] E, as UTF-8, or NULL if E is not a ** result code for which a text error message is available. ** ^(Memory to hold the error message string is managed internally ** and must not be freed by the application)^. @@ -4490,7 +4513,7 @@ SQLITE_API void sqlite3_free_filename(sqlite3_filename); ** ^If the most recent error references a specific token in the input ** SQL, the sqlite3_error_offset() interface returns the byte offset ** of the start of that token. ^The byte offset returned by -** sqlite3_error_offset() assumes that the input SQL is UTF8. +** sqlite3_error_offset() assumes that the input SQL is UTF-8. ** ^If the most recent error does not reference a specific token in the input ** SQL, then the sqlite3_error_offset() function returns -1. ** @@ -4515,6 +4538,34 @@ SQLITE_API const void *sqlite3_errmsg16(sqlite3*); SQLITE_API const char *sqlite3_errstr(int); SQLITE_API int sqlite3_error_offset(sqlite3 *db); +/* +** CAPI3REF: Set Error Codes And Message +** METHOD: sqlite3 +** +** Set the error code of the database handle passed as the first argument +** to errcode, and the error message to a copy of nul-terminated string +** zErrMsg. If zErrMsg is passed NULL, then the error message is set to +** the default message associated with the supplied error code. Subsequent +** calls to [sqlite3_errcode()] and [sqlite3_errmsg()] and similar will +** return the values set by this routine in place of what was previously +** set by SQLite itself. +** +** This function returns SQLITE_OK if the error code and error message are +** successfully set, SQLITE_NOMEM if an OOM occurs, and SQLITE_MISUSE if +** the database handle is NULL or invalid. +** +** The error code and message set by this routine remains in effect until +** they are changed, either by another call to this routine or until they are +** changed to by SQLite itself to reflect the result of some subsquent +** API call. +** +** This function is intended for use by SQLite extensions or wrappers. The +** idea is that an extension or wrapper can use this routine to set error +** messages and error codes and thus behave more like a core SQLite +** feature from the point of view of an application. +*/ +SQLITE_API int sqlite3_set_errmsg(sqlite3 *db, int errcode, const char *zErrMsg); + /* ** CAPI3REF: Prepared Statement Object ** KEYWORDS: {prepared statement} {prepared statements} @@ -4589,8 +4640,8 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); ** ** These constants define various performance limits ** that can be lowered at run-time using [sqlite3_limit()]. -** The synopsis of the meanings of the various limits is shown below. -** Additional information is available at [limits | Limits in SQLite]. +** A concise description of these limits follows, and additional information +** is available at [limits | Limits in SQLite]. ** **
    ** [[SQLITE_LIMIT_LENGTH]] ^(
    SQLITE_LIMIT_LENGTH
    @@ -4655,7 +4706,7 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); /* ** CAPI3REF: Prepare Flags ** -** These constants define various flags that can be passed into +** These constants define various flags that can be passed into the ** "prepFlags" parameter of the [sqlite3_prepare_v3()] and ** [sqlite3_prepare16_v3()] interfaces. ** @@ -4742,7 +4793,7 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); ** there is a small performance advantage to passing an nByte parameter that ** is the number of bytes in the input string including ** the nul-terminator. -** Note that nByte measure the length of the input in bytes, not +** Note that nByte measures the length of the input in bytes, not ** characters, even for the UTF-16 interfaces. ** ** ^If pzTail is not NULL then *pzTail is made to point to the first byte @@ -4876,7 +4927,7 @@ SQLITE_API int sqlite3_prepare16_v3( ** ** ^The sqlite3_expanded_sql() interface returns NULL if insufficient memory ** is available to hold the result, or if the result would exceed the -** the maximum string length determined by the [SQLITE_LIMIT_LENGTH]. +** maximum string length determined by the [SQLITE_LIMIT_LENGTH]. ** ** ^The [SQLITE_TRACE_SIZE_LIMIT] compile-time option limits the size of ** bound parameter expansions. ^The [SQLITE_OMIT_TRACE] compile-time @@ -5064,7 +5115,7 @@ typedef struct sqlite3_value sqlite3_value; ** ** The context in which an SQL function executes is stored in an ** sqlite3_context object. ^A pointer to an sqlite3_context object -** is always first parameter to [application-defined SQL functions]. +** is always the first parameter to [application-defined SQL functions]. ** The application-defined SQL function implementation will pass this ** pointer through into calls to [sqlite3_result_int | sqlite3_result()], ** [sqlite3_aggregate_context()], [sqlite3_user_data()], @@ -5188,9 +5239,11 @@ typedef struct sqlite3_context sqlite3_context; ** associated with the pointer P of type T. ^D is either a NULL pointer or ** a pointer to a destructor function for P. ^SQLite will invoke the ** destructor D with a single argument of P when it is finished using -** P. The T parameter should be a static string, preferably a string -** literal. The sqlite3_bind_pointer() routine is part of the -** [pointer passing interface] added for SQLite 3.20.0. +** P, even if the call to sqlite3_bind_pointer() fails. Due to a +** historical design quirk, results are undefined if D is +** SQLITE_TRANSIENT. The T parameter should be a static string, +** preferably a string literal. The sqlite3_bind_pointer() routine is +** part of the [pointer passing interface] added for SQLite 3.20.0. ** ** ^If any of the sqlite3_bind_*() routines are called with a NULL pointer ** for the [prepared statement] or with a prepared statement for which @@ -5801,7 +5854,7 @@ SQLITE_API int sqlite3_column_type(sqlite3_stmt*, int iCol); ** ** ^The sqlite3_finalize() function is called to delete a [prepared statement]. ** ^If the most recent evaluation of the statement encountered no errors -** or if the statement is never been evaluated, then sqlite3_finalize() returns +** or if the statement has never been evaluated, then sqlite3_finalize() returns ** SQLITE_OK. ^If the most recent evaluation of statement S failed, then ** sqlite3_finalize(S) returns the appropriate [error code] or ** [extended error code]. @@ -6033,7 +6086,7 @@ SQLITE_API int sqlite3_create_window_function( /* ** CAPI3REF: Text Encodings ** -** These constant define integer codes that represent the various +** These constants define integer codes that represent the various ** text encodings supported by SQLite. */ #define SQLITE_UTF8 1 /* IMP: R-37514-35566 */ @@ -6125,7 +6178,7 @@ SQLITE_API int sqlite3_create_window_function( ** result. ** Every function that invokes [sqlite3_result_subtype()] should have this ** property. If it does not, then the call to [sqlite3_result_subtype()] -** might become a no-op if the function is used as term in an +** might become a no-op if the function is used as a term in an ** [expression index]. On the other hand, SQL functions that never invoke ** [sqlite3_result_subtype()] should avoid setting this property, as the ** purpose of this property is to disable certain optimizations that are @@ -6252,7 +6305,7 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6 ** sqlite3_value_nochange(X) interface returns true if and only if ** the column corresponding to X is unchanged by the UPDATE operation ** that the xUpdate method call was invoked to implement and if -** and the prior [xColumn] method call that was invoked to extracted +** the prior [xColumn] method call that was invoked to extract ** the value for that column returned without setting a result (probably ** because it queried [sqlite3_vtab_nochange()] and found that the column ** was unchanging). ^Within an [xUpdate] method, any value for which @@ -6525,6 +6578,7 @@ SQLITE_API void sqlite3_set_auxdata(sqlite3_context*, int N, void*, void (*)(voi ** or a NULL pointer if there were no prior calls to ** sqlite3_set_clientdata() with the same values of D and N. ** Names are compared using strcmp() and are thus case sensitive. +** It returns 0 on success and SQLITE_NOMEM on allocation failure. ** ** If P and X are both non-NULL, then the destructor X is invoked with ** argument P on the first of the following occurrences: @@ -9201,9 +9255,18 @@ SQLITE_API int sqlite3_status64( ** ^The sqlite3_db_status() routine returns SQLITE_OK on success and a ** non-zero [error code] on failure. ** +** ^The sqlite3_db_status64(D,O,C,H,R) routine works exactly the same +** way as sqlite3_db_status(D,O,C,H,R) routine except that the C and H +** parameters are pointer to 64-bit integers (type: sqlite3_int64) instead +** of pointers to 32-bit integers, which allows larger status values +** to be returned. If a status value exceeds 2,147,483,647 then +** sqlite3_db_status() will truncate the value whereas sqlite3_db_status64() +** will return the full value. +** ** See also: [sqlite3_status()] and [sqlite3_stmt_status()]. */ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg); +SQLITE_API int sqlite3_db_status64(sqlite3*,int,sqlite3_int64*,sqlite3_int64*,int); /* ** CAPI3REF: Status Parameters for database connections @@ -9300,6 +9363,10 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r ** If an IO or other error occurs while writing a page to disk, the effect ** on subsequent SQLITE_DBSTATUS_CACHE_WRITE requests is undefined.)^ ^The ** highwater mark associated with SQLITE_DBSTATUS_CACHE_WRITE is always 0. +**

    +** ^(There is overlap between the quantities measured by this parameter +** (SQLITE_DBSTATUS_CACHE_WRITE) and SQLITE_DBSTATUS_TEMPBUF_SPILL. +** Resetting one will reduce the other.)^ **

    ** ** [[SQLITE_DBSTATUS_CACHE_SPILL]] ^(
    SQLITE_DBSTATUS_CACHE_SPILL
    @@ -9315,6 +9382,18 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r **
    This parameter returns zero for the current value if and only if ** all foreign key constraints (deferred or immediate) have been ** resolved.)^ ^The highwater mark is always 0. +** +** [[SQLITE_DBSTATUS_TEMPBUF_SPILL] ^(
    SQLITE_DBSTATUS_TEMPBUF_SPILL
    +**
    ^(This parameter returns the number of bytes written to temporary +** files on disk that could have been kept in memory had sufficient memory +** been available. This value includes writes to intermediate tables that +** are part of complex queries, external sorts that spill to disk, and +** writes to TEMP tables.)^ +** ^The highwater mark is always 0. +**

    +** ^(There is overlap between the quantities measured by this parameter +** (SQLITE_DBSTATUS_TEMPBUF_SPILL) and SQLITE_DBSTATUS_CACHE_WRITE. +** Resetting one will reduce the other.)^ **

    ** */ @@ -9331,7 +9410,8 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r #define SQLITE_DBSTATUS_DEFERRED_FKS 10 #define SQLITE_DBSTATUS_CACHE_USED_SHARED 11 #define SQLITE_DBSTATUS_CACHE_SPILL 12 -#define SQLITE_DBSTATUS_MAX 12 /* Largest defined DBSTATUS */ +#define SQLITE_DBSTATUS_TEMPBUF_SPILL 13 +#define SQLITE_DBSTATUS_MAX 13 /* Largest defined DBSTATUS */ /* @@ -10096,7 +10176,7 @@ SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...); ** is the number of pages currently in the write-ahead log file, ** including those that were just committed. ** -** The callback function should normally return [SQLITE_OK]. ^If an error +** ^The callback function should normally return [SQLITE_OK]. ^If an error ** code is returned, that error will propagate back up through the ** SQLite code base to cause the statement that provoked the callback ** to report an error, though the commit will have still occurred. If the @@ -10104,13 +10184,26 @@ SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...); ** that does not correspond to any valid SQLite error code, the results ** are undefined. ** -** A single database handle may have at most a single write-ahead log callback -** registered at one time. ^Calling [sqlite3_wal_hook()] replaces any -** previously registered write-ahead log callback. ^The return value is -** a copy of the third parameter from the previous call, if any, or 0. -** ^Note that the [sqlite3_wal_autocheckpoint()] interface and the -** [wal_autocheckpoint pragma] both invoke [sqlite3_wal_hook()] and will -** overwrite any prior [sqlite3_wal_hook()] settings. +** ^A single database handle may have at most a single write-ahead log +** callback registered at one time. ^Calling [sqlite3_wal_hook()] +** replaces the default behavior or previously registered write-ahead +** log callback. +** +** ^The return value is a copy of the third parameter from the +** previous call, if any, or 0. +** +** ^The [sqlite3_wal_autocheckpoint()] interface and the +** [wal_autocheckpoint pragma] both invoke [sqlite3_wal_hook()] and +** will overwrite any prior [sqlite3_wal_hook()] settings. +** +** ^If a write-ahead log callback is set using this function then +** [sqlite3_wal_checkpoint_v2()] or [PRAGMA wal_checkpoint] +** should be invoked periodically to keep the write-ahead log file +** from growing without bound. +** +** ^Passing a NULL pointer for the callback disables automatic +** checkpointing entirely. To re-enable the default behavior, call +** sqlite3_wal_autocheckpoint(db,1000) or use [PRAGMA wal_checkpoint]. */ SQLITE_API void *sqlite3_wal_hook( sqlite3*, @@ -10127,7 +10220,7 @@ SQLITE_API void *sqlite3_wal_hook( ** to automatically [checkpoint] ** after committing a transaction if there are N or ** more frames in the [write-ahead log] file. ^Passing zero or -** a negative value as the nFrame parameter disables automatic +** a negative value as the N parameter disables automatic ** checkpoints entirely. ** ** ^The callback registered by this function replaces any existing callback @@ -10143,9 +10236,10 @@ SQLITE_API void *sqlite3_wal_hook( ** ** ^Every new [database connection] defaults to having the auto-checkpoint ** enabled with a threshold of 1000 or [SQLITE_DEFAULT_WAL_AUTOCHECKPOINT] -** pages. The use of this interface -** is only necessary if the default setting is found to be suboptimal -** for a particular application. +** pages. +** +** ^The use of this interface is only necessary if the default setting +** is found to be suboptimal for a particular application. */ SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int N); @@ -10210,6 +10304,11 @@ SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb); ** ^This mode works the same way as SQLITE_CHECKPOINT_RESTART with the ** addition that it also truncates the log file to zero bytes just prior ** to a successful return. +** +**
    SQLITE_CHECKPOINT_NOOP
    +** ^This mode always checkpoints zero frames. The only reason to invoke +** a NOOP checkpoint is to access the values returned by +** sqlite3_wal_checkpoint_v2() via output parameters *pnLog and *pnCkpt. ** ** ** ^If pnLog is not NULL, then *pnLog is set to the total number of frames in @@ -10280,6 +10379,7 @@ SQLITE_API int sqlite3_wal_checkpoint_v2( ** See the [sqlite3_wal_checkpoint_v2()] documentation for details on the ** meaning of each of these checkpoint modes. */ +#define SQLITE_CHECKPOINT_NOOP -1 /* Do no work at all */ #define SQLITE_CHECKPOINT_PASSIVE 0 /* Do as much as possible w/o blocking */ #define SQLITE_CHECKPOINT_FULL 1 /* Wait for writers, then checkpoint */ #define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for readers */ @@ -10648,7 +10748,7 @@ SQLITE_API int sqlite3_vtab_in(sqlite3_index_info*, int iCons, int bHandle); **   ){ **   // do something with pVal **   } -**   if( rc!=SQLITE_OK ){ +**   if( rc!=SQLITE_DONE ){ **   // an error has occurred **   } ** )^ @@ -11107,7 +11207,7 @@ typedef struct sqlite3_snapshot { ** The [sqlite3_snapshot_get()] interface is only available when the ** [SQLITE_ENABLE_SNAPSHOT] compile-time option is used. */ -SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_get( +SQLITE_API int sqlite3_snapshot_get( sqlite3 *db, const char *zSchema, sqlite3_snapshot **ppSnapshot @@ -11156,7 +11256,7 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_get( ** The [sqlite3_snapshot_open()] interface is only available when the ** [SQLITE_ENABLE_SNAPSHOT] compile-time option is used. */ -SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_open( +SQLITE_API int sqlite3_snapshot_open( sqlite3 *db, const char *zSchema, sqlite3_snapshot *pSnapshot @@ -11173,7 +11273,7 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_open( ** The [sqlite3_snapshot_free()] interface is only available when the ** [SQLITE_ENABLE_SNAPSHOT] compile-time option is used. */ -SQLITE_API SQLITE_EXPERIMENTAL void sqlite3_snapshot_free(sqlite3_snapshot*); +SQLITE_API void sqlite3_snapshot_free(sqlite3_snapshot*); /* ** CAPI3REF: Compare the ages of two snapshot handles. @@ -11200,7 +11300,7 @@ SQLITE_API SQLITE_EXPERIMENTAL void sqlite3_snapshot_free(sqlite3_snapshot*); ** This interface is only available if SQLite is compiled with the ** [SQLITE_ENABLE_SNAPSHOT] option. */ -SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_cmp( +SQLITE_API int sqlite3_snapshot_cmp( sqlite3_snapshot *p1, sqlite3_snapshot *p2 ); @@ -11228,7 +11328,7 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_cmp( ** This interface is only available if SQLite is compiled with the ** [SQLITE_ENABLE_SNAPSHOT] option. */ -SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_recover(sqlite3 *db, const char *zDb); +SQLITE_API int sqlite3_snapshot_recover(sqlite3 *db, const char *zDb); /* ** CAPI3REF: Serialize a database @@ -11302,12 +11402,13 @@ SQLITE_API unsigned char *sqlite3_serialize( ** ** The sqlite3_deserialize(D,S,P,N,M,F) interface causes the ** [database connection] D to disconnect from database S and then -** reopen S as an in-memory database based on the serialization contained -** in P. The serialized database P is N bytes in size. M is the size of -** the buffer P, which might be larger than N. If M is larger than N, and -** the SQLITE_DESERIALIZE_READONLY bit is not set in F, then SQLite is -** permitted to add content to the in-memory database as long as the total -** size does not exceed M bytes. +** reopen S as an in-memory database based on the serialization +** contained in P. If S is a NULL pointer, the main database is +** used. The serialized database P is N bytes in size. M is the size +** of the buffer P, which might be larger than N. If M is larger than +** N, and the SQLITE_DESERIALIZE_READONLY bit is not set in F, then +** SQLite is permitted to add content to the in-memory database as +** long as the total size does not exceed M bytes. ** ** If the SQLITE_DESERIALIZE_FREEONCLOSE bit is set in F, then SQLite will ** invoke sqlite3_free() on the serialization buffer when the database @@ -11374,6 +11475,54 @@ SQLITE_API int sqlite3_deserialize( #define SQLITE_DESERIALIZE_RESIZEABLE 2 /* Resize using sqlite3_realloc64() */ #define SQLITE_DESERIALIZE_READONLY 4 /* Database is read-only */ +/* +** CAPI3REF: Bind array values to the CARRAY table-valued function +** +** The sqlite3_carray_bind(S,I,P,N,F,X) interface binds an array value to +** one of the first argument of the [carray() table-valued function]. The +** S parameter is a pointer to the [prepared statement] that uses the carray() +** functions. I is the parameter index to be bound. P is a pointer to the +** array to be bound, and N is the number of eements in the array. The +** F argument is one of constants [SQLITE_CARRAY_INT32], [SQLITE_CARRAY_INT64], +** [SQLITE_CARRAY_DOUBLE], [SQLITE_CARRAY_TEXT], or [SQLITE_CARRAY_BLOB] to +** indicate the datatype of the array being bound. The X argument is not a +** NULL pointer, then SQLite will invoke the function X on the P parameter +** after it has finished using P, even if the call to +** sqlite3_carray_bind() fails. The special-case finalizer +** SQLITE_TRANSIENT has no effect here. +*/ +SQLITE_API int sqlite3_carray_bind( + sqlite3_stmt *pStmt, /* Statement to be bound */ + int i, /* Parameter index */ + void *aData, /* Pointer to array data */ + int nData, /* Number of data elements */ + int mFlags, /* CARRAY flags */ + void (*xDel)(void*) /* Destructor for aData */ +); + +/* +** CAPI3REF: Datatypes for the CARRAY table-valued function +** +** The fifth argument to the [sqlite3_carray_bind()] interface musts be +** one of the following constants, to specify the datatype of the array +** that is being bound into the [carray table-valued function]. +*/ +#define SQLITE_CARRAY_INT32 0 /* Data is 32-bit signed integers */ +#define SQLITE_CARRAY_INT64 1 /* Data is 64-bit signed integers */ +#define SQLITE_CARRAY_DOUBLE 2 /* Data is doubles */ +#define SQLITE_CARRAY_TEXT 3 /* Data is char* */ +#define SQLITE_CARRAY_BLOB 4 /* Data is struct iovec */ + +/* +** Versions of the above #defines that omit the initial SQLITE_, for +** legacy compatibility. +*/ +#define CARRAY_INT32 0 /* Data is 32-bit signed integers */ +#define CARRAY_INT64 1 /* Data is 64-bit signed integers */ +#define CARRAY_DOUBLE 2 /* Data is doubles */ +#define CARRAY_TEXT 3 /* Data is char* */ +#define CARRAY_BLOB 4 /* Data is struct iovec */ + /* ** Undo the hack that converts floating point types to integer for ** builds on processors without floating point support. @@ -12633,14 +12782,32 @@ SQLITE_API void sqlite3changegroup_delete(sqlite3_changegroup*); ** update the "main" database attached to handle db with the changes found in ** the changeset passed via the second and third arguments. ** +** All changes made by these functions are enclosed in a savepoint transaction. +** If any other error (aside from a constraint failure when attempting to +** write to the target database) occurs, then the savepoint transaction is +** rolled back, restoring the target database to its original state, and an +** SQLite error code returned. Additionally, starting with version 3.51.0, +** an error code and error message that may be accessed using the +** [sqlite3_errcode()] and [sqlite3_errmsg()] APIs are left in the database +** handle. +** ** The fourth argument (xFilter) passed to these functions is the "filter -** callback". If it is not NULL, then for each table affected by at least one -** change in the changeset, the filter callback is invoked with -** the table name as the second argument, and a copy of the context pointer -** passed as the sixth argument as the first. If the "filter callback" -** returns zero, then no attempt is made to apply any changes to the table. -** Otherwise, if the return value is non-zero or the xFilter argument to -** is NULL, all changes related to the table are attempted. +** callback". This may be passed NULL, in which case all changes in the +** changeset are applied to the database. For sqlite3changeset_apply() and +** sqlite3_changeset_apply_v2(), if it is not NULL, then it is invoked once +** for each table affected by at least one change in the changeset. In this +** case the table name is passed as the second argument, and a copy of +** the context pointer passed as the sixth argument to apply() or apply_v2() +** as the first. If the "filter callback" returns zero, then no attempt is +** made to apply any changes to the table. Otherwise, if the return value is +** non-zero, all changes related to the table are attempted. +** +** For sqlite3_changeset_apply_v3(), the xFilter callback is invoked once +** per change. The second argument in this case is an sqlite3_changeset_iter +** that may be queried using the usual APIs for the details of the current +** change. If the "filter callback" returns zero in this case, then no attempt +** is made to apply the current change. If it returns non-zero, the change +** is applied. ** ** For each table that is not excluded by the filter callback, this function ** tests that the target database contains a compatible table. A table is @@ -12661,11 +12828,11 @@ SQLITE_API void sqlite3changegroup_delete(sqlite3_changegroup*); ** one such warning is issued for each table in the changeset. ** ** For each change for which there is a compatible table, an attempt is made -** to modify the table contents according to the UPDATE, INSERT or DELETE -** change. If a change cannot be applied cleanly, the conflict handler -** function passed as the fifth argument to sqlite3changeset_apply() may be -** invoked. A description of exactly when the conflict handler is invoked for -** each type of change is below. +** to modify the table contents according to each UPDATE, INSERT or DELETE +** change that is not excluded by a filter callback. If a change cannot be +** applied cleanly, the conflict handler function passed as the fifth argument +** to sqlite3changeset_apply() may be invoked. A description of exactly when +** the conflict handler is invoked for each type of change is below. ** ** Unlike the xFilter argument, xConflict may not be passed NULL. The results ** of passing anything other than a valid function pointer as the xConflict @@ -12761,12 +12928,6 @@ SQLITE_API void sqlite3changegroup_delete(sqlite3_changegroup*); ** This can be used to further customize the application's conflict ** resolution strategy. ** -** All changes made by these functions are enclosed in a savepoint transaction. -** If any other error (aside from a constraint failure when attempting to -** write to the target database) occurs, then the savepoint transaction is -** rolled back, restoring the target database to its original state, and an -** SQLite error code returned. -** ** If the output parameters (ppRebase) and (pnRebase) are non-NULL and ** the input is a changeset (not a patchset), then sqlite3changeset_apply_v2() ** may set (*ppRebase) to point to a "rebase" that may be used with the @@ -12816,6 +12977,23 @@ SQLITE_API int sqlite3changeset_apply_v2( void **ppRebase, int *pnRebase, /* OUT: Rebase data */ int flags /* SESSION_CHANGESETAPPLY_* flags */ ); +SQLITE_API int sqlite3changeset_apply_v3( + sqlite3 *db, /* Apply change to "main" db of this handle */ + int nChangeset, /* Size of changeset in bytes */ + void *pChangeset, /* Changeset blob */ + int(*xFilter)( + void *pCtx, /* Copy of sixth arg to _apply() */ + sqlite3_changeset_iter *p /* Handle describing change */ + ), + int(*xConflict)( + void *pCtx, /* Copy of sixth arg to _apply() */ + int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ + sqlite3_changeset_iter *p /* Handle describing change and conflict */ + ), + void *pCtx, /* First argument passed to xConflict */ + void **ppRebase, int *pnRebase, /* OUT: Rebase data */ + int flags /* SESSION_CHANGESETAPPLY_* flags */ +); /* ** CAPI3REF: Flags for sqlite3changeset_apply_v2 @@ -13235,6 +13413,23 @@ SQLITE_API int sqlite3changeset_apply_v2_strm( void **ppRebase, int *pnRebase, int flags ); +SQLITE_API int sqlite3changeset_apply_v3_strm( + sqlite3 *db, /* Apply change to "main" db of this handle */ + int (*xInput)(void *pIn, void *pData, int *pnData), /* Input function */ + void *pIn, /* First arg for xInput */ + int(*xFilter)( + void *pCtx, /* Copy of sixth arg to _apply() */ + sqlite3_changeset_iter *p + ), + int(*xConflict)( + void *pCtx, /* Copy of sixth arg to _apply() */ + int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ + sqlite3_changeset_iter *p /* Handle describing change and conflict */ + ), + void *pCtx, /* First argument passed to xConflict */ + void **ppRebase, int *pnRebase, + int flags +); SQLITE_API int sqlite3changeset_concat_strm( int (*xInputA)(void *pIn, void *pData, int *pnData), void *pInA, @@ -14311,7 +14506,7 @@ struct fts5_api { ** Maximum number of pages in one database file. ** ** This is really just the default value for the max_page_count pragma. -** This value can be lowered (or raised) at run-time using that the +** This value can be lowered (or raised) at run-time using the ** max_page_count macro. */ #ifndef SQLITE_MAX_PAGE_COUNT @@ -15179,7 +15374,7 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*); ** ourselves. */ #ifndef offsetof -#define offsetof(STRUCTURE,FIELD) ((size_t)((char*)&((STRUCTURE*)0)->FIELD)) +# define offsetof(ST,M) ((size_t)((char*)&((ST*)0)->M - (char*)0)) #endif /* @@ -15567,6 +15762,8 @@ SQLITE_PRIVATE u32 sqlite3TreeTrace; ** 0x00020000 Transform DISTINCT into GROUP BY ** 0x00040000 SELECT tree dump after all code has been generated ** 0x00080000 NOT NULL strength reduction +** 0x00100000 Pointers are all shown as zero +** 0x00200000 EXISTS-to-JOIN optimization */ /* @@ -15611,6 +15808,7 @@ SQLITE_PRIVATE u32 sqlite3WhereTrace; ** 0x00020000 Show WHERE terms returned from whereScanNext() ** 0x00040000 Solver overview messages ** 0x00080000 Star-query heuristic +** 0x00100000 Pointers are all shown as zero */ @@ -15683,7 +15881,7 @@ struct BusyHandler { ** pointer will work here as long as it is distinct from SQLITE_STATIC ** and SQLITE_TRANSIENT. */ -#define SQLITE_DYNAMIC ((sqlite3_destructor_type)sqlite3OomClear) +#define SQLITE_DYNAMIC ((sqlite3_destructor_type)sqlite3RowSetClear) /* ** When SQLITE_OMIT_WSD is defined, it means that the target platform does @@ -15904,8 +16102,8 @@ typedef int VList; ** must provide its own VFS implementation together with sqlite3_os_init() ** and sqlite3_os_end() routines. */ -#if !defined(SQLITE_OS_KV) && !defined(SQLITE_OS_OTHER) && \ - !defined(SQLITE_OS_UNIX) && !defined(SQLITE_OS_WIN) +#if SQLITE_OS_KV+1<=1 && SQLITE_OS_OTHER+1<=1 && \ + SQLITE_OS_WIN+1<=1 && SQLITE_OS_UNIX+1<=1 # if defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__) || \ defined(__MINGW32__) || defined(__BORLANDC__) # define SQLITE_OS_WIN 1 @@ -16751,6 +16949,7 @@ struct BtreePayload { SQLITE_PRIVATE int sqlite3BtreeInsert(BtCursor*, const BtreePayload *pPayload, int flags, int seekResult); SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor*, int *pRes); +SQLITE_PRIVATE int sqlite3BtreeIsEmpty(BtCursor *pCur, int *pRes); SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor*, int *pRes); SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor*, int flags); SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor*); @@ -17084,20 +17283,20 @@ typedef struct VdbeOpList VdbeOpList; #define OP_SorterSort 34 /* jump */ #define OP_Sort 35 /* jump */ #define OP_Rewind 36 /* jump0 */ -#define OP_SorterNext 37 /* jump */ -#define OP_Prev 38 /* jump */ -#define OP_Next 39 /* jump */ -#define OP_IdxLE 40 /* jump, synopsis: key=r[P3@P4] */ -#define OP_IdxGT 41 /* jump, synopsis: key=r[P3@P4] */ -#define OP_IdxLT 42 /* jump, synopsis: key=r[P3@P4] */ +#define OP_IfEmpty 37 /* jump, synopsis: if( empty(P1) ) goto P2 */ +#define OP_SorterNext 38 /* jump */ +#define OP_Prev 39 /* jump */ +#define OP_Next 40 /* jump */ +#define OP_IdxLE 41 /* jump, synopsis: key=r[P3@P4] */ +#define OP_IdxGT 42 /* jump, synopsis: key=r[P3@P4] */ #define OP_Or 43 /* same as TK_OR, synopsis: r[P3]=(r[P1] || r[P2]) */ #define OP_And 44 /* same as TK_AND, synopsis: r[P3]=(r[P1] && r[P2]) */ -#define OP_IdxGE 45 /* jump, synopsis: key=r[P3@P4] */ -#define OP_RowSetRead 46 /* jump, synopsis: r[P3]=rowset(P1) */ -#define OP_RowSetTest 47 /* jump, synopsis: if r[P3] in rowset(P1) goto P2 */ -#define OP_Program 48 /* jump0 */ -#define OP_FkIfZero 49 /* jump, synopsis: if fkctr[P1]==0 goto P2 */ -#define OP_IfPos 50 /* jump, synopsis: if r[P1]>0 then r[P1]-=P3, goto P2 */ +#define OP_IdxLT 45 /* jump, synopsis: key=r[P3@P4] */ +#define OP_IdxGE 46 /* jump, synopsis: key=r[P3@P4] */ +#define OP_RowSetRead 47 /* jump, synopsis: r[P3]=rowset(P1) */ +#define OP_RowSetTest 48 /* jump, synopsis: if r[P3] in rowset(P1) goto P2 */ +#define OP_Program 49 /* jump0 */ +#define OP_FkIfZero 50 /* jump, synopsis: if fkctr[P1]==0 goto P2 */ #define OP_IsNull 51 /* jump, same as TK_ISNULL, synopsis: if r[P1]==NULL goto P2 */ #define OP_NotNull 52 /* jump, same as TK_NOTNULL, synopsis: if r[P1]!=NULL goto P2 */ #define OP_Ne 53 /* jump, same as TK_NE, synopsis: IF r[P3]!=r[P1] */ @@ -17107,49 +17306,49 @@ typedef struct VdbeOpList VdbeOpList; #define OP_Lt 57 /* jump, same as TK_LT, synopsis: IF r[P3]=r[P1] */ #define OP_ElseEq 59 /* jump, same as TK_ESCAPE */ -#define OP_IfNotZero 60 /* jump, synopsis: if r[P1]!=0 then r[P1]--, goto P2 */ -#define OP_DecrJumpZero 61 /* jump, synopsis: if (--r[P1])==0 goto P2 */ -#define OP_IncrVacuum 62 /* jump */ -#define OP_VNext 63 /* jump */ -#define OP_Filter 64 /* jump, synopsis: if key(P3@P4) not in filter(P1) goto P2 */ -#define OP_PureFunc 65 /* synopsis: r[P3]=func(r[P2@NP]) */ -#define OP_Function 66 /* synopsis: r[P3]=func(r[P2@NP]) */ -#define OP_Return 67 -#define OP_EndCoroutine 68 -#define OP_HaltIfNull 69 /* synopsis: if r[P3]=null halt */ -#define OP_Halt 70 -#define OP_Integer 71 /* synopsis: r[P2]=P1 */ -#define OP_Int64 72 /* synopsis: r[P2]=P4 */ -#define OP_String 73 /* synopsis: r[P2]='P4' (len=P1) */ -#define OP_BeginSubrtn 74 /* synopsis: r[P2]=NULL */ -#define OP_Null 75 /* synopsis: r[P2..P3]=NULL */ -#define OP_SoftNull 76 /* synopsis: r[P1]=NULL */ -#define OP_Blob 77 /* synopsis: r[P2]=P4 (len=P1) */ -#define OP_Variable 78 /* synopsis: r[P2]=parameter(P1) */ -#define OP_Move 79 /* synopsis: r[P2@P3]=r[P1@P3] */ -#define OP_Copy 80 /* synopsis: r[P2@P3+1]=r[P1@P3+1] */ -#define OP_SCopy 81 /* synopsis: r[P2]=r[P1] */ -#define OP_IntCopy 82 /* synopsis: r[P2]=r[P1] */ -#define OP_FkCheck 83 -#define OP_ResultRow 84 /* synopsis: output=r[P1@P2] */ -#define OP_CollSeq 85 -#define OP_AddImm 86 /* synopsis: r[P1]=r[P1]+P2 */ -#define OP_RealAffinity 87 -#define OP_Cast 88 /* synopsis: affinity(r[P1]) */ -#define OP_Permutation 89 -#define OP_Compare 90 /* synopsis: r[P1@P3] <-> r[P2@P3] */ -#define OP_IsTrue 91 /* synopsis: r[P2] = coalesce(r[P1]==TRUE,P3) ^ P4 */ -#define OP_ZeroOrNull 92 /* synopsis: r[P2] = 0 OR NULL */ -#define OP_Offset 93 /* synopsis: r[P3] = sqlite_offset(P1) */ -#define OP_Column 94 /* synopsis: r[P3]=PX cursor P1 column P2 */ -#define OP_TypeCheck 95 /* synopsis: typecheck(r[P1@P2]) */ -#define OP_Affinity 96 /* synopsis: affinity(r[P1@P2]) */ -#define OP_MakeRecord 97 /* synopsis: r[P3]=mkrec(r[P1@P2]) */ -#define OP_Count 98 /* synopsis: r[P2]=count() */ -#define OP_ReadCookie 99 -#define OP_SetCookie 100 -#define OP_ReopenIdx 101 /* synopsis: root=P2 iDb=P3 */ -#define OP_OpenRead 102 /* synopsis: root=P2 iDb=P3 */ +#define OP_IfPos 60 /* jump, synopsis: if r[P1]>0 then r[P1]-=P3, goto P2 */ +#define OP_IfNotZero 61 /* jump, synopsis: if r[P1]!=0 then r[P1]--, goto P2 */ +#define OP_DecrJumpZero 62 /* jump, synopsis: if (--r[P1])==0 goto P2 */ +#define OP_IncrVacuum 63 /* jump */ +#define OP_VNext 64 /* jump */ +#define OP_Filter 65 /* jump, synopsis: if key(P3@P4) not in filter(P1) goto P2 */ +#define OP_PureFunc 66 /* synopsis: r[P3]=func(r[P2@NP]) */ +#define OP_Function 67 /* synopsis: r[P3]=func(r[P2@NP]) */ +#define OP_Return 68 +#define OP_EndCoroutine 69 +#define OP_HaltIfNull 70 /* synopsis: if r[P3]=null halt */ +#define OP_Halt 71 +#define OP_Integer 72 /* synopsis: r[P2]=P1 */ +#define OP_Int64 73 /* synopsis: r[P2]=P4 */ +#define OP_String 74 /* synopsis: r[P2]='P4' (len=P1) */ +#define OP_BeginSubrtn 75 /* synopsis: r[P2]=NULL */ +#define OP_Null 76 /* synopsis: r[P2..P3]=NULL */ +#define OP_SoftNull 77 /* synopsis: r[P1]=NULL */ +#define OP_Blob 78 /* synopsis: r[P2]=P4 (len=P1) */ +#define OP_Variable 79 /* synopsis: r[P2]=parameter(P1) */ +#define OP_Move 80 /* synopsis: r[P2@P3]=r[P1@P3] */ +#define OP_Copy 81 /* synopsis: r[P2@P3+1]=r[P1@P3+1] */ +#define OP_SCopy 82 /* synopsis: r[P2]=r[P1] */ +#define OP_IntCopy 83 /* synopsis: r[P2]=r[P1] */ +#define OP_FkCheck 84 +#define OP_ResultRow 85 /* synopsis: output=r[P1@P2] */ +#define OP_CollSeq 86 +#define OP_AddImm 87 /* synopsis: r[P1]=r[P1]+P2 */ +#define OP_RealAffinity 88 +#define OP_Cast 89 /* synopsis: affinity(r[P1]) */ +#define OP_Permutation 90 +#define OP_Compare 91 /* synopsis: r[P1@P3] <-> r[P2@P3] */ +#define OP_IsTrue 92 /* synopsis: r[P2] = coalesce(r[P1]==TRUE,P3) ^ P4 */ +#define OP_ZeroOrNull 93 /* synopsis: r[P2] = 0 OR NULL */ +#define OP_Offset 94 /* synopsis: r[P3] = sqlite_offset(P1) */ +#define OP_Column 95 /* synopsis: r[P3]=PX cursor P1 column P2 */ +#define OP_TypeCheck 96 /* synopsis: typecheck(r[P1@P2]) */ +#define OP_Affinity 97 /* synopsis: affinity(r[P1@P2]) */ +#define OP_MakeRecord 98 /* synopsis: r[P3]=mkrec(r[P1@P2]) */ +#define OP_Count 99 /* synopsis: r[P2]=count() */ +#define OP_ReadCookie 100 +#define OP_SetCookie 101 +#define OP_ReopenIdx 102 /* synopsis: root=P2 iDb=P3 */ #define OP_BitAnd 103 /* same as TK_BITAND, synopsis: r[P3]=r[P1]&r[P2] */ #define OP_BitOr 104 /* same as TK_BITOR, synopsis: r[P3]=r[P1]|r[P2] */ #define OP_ShiftLeft 105 /* same as TK_LSHIFT, synopsis: r[P3]=r[P2]<0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1) */ -#define OP_AggInverse 161 /* synopsis: accum=r[P3] inverse(r[P2@P5]) */ -#define OP_AggStep 162 /* synopsis: accum=r[P3] step(r[P2@P5]) */ -#define OP_AggStep1 163 /* synopsis: accum=r[P3] step(r[P2@P5]) */ -#define OP_AggValue 164 /* synopsis: r[P3]=value N=P2 */ -#define OP_AggFinal 165 /* synopsis: accum=r[P1] N=P2 */ -#define OP_Expire 166 -#define OP_CursorLock 167 -#define OP_CursorUnlock 168 -#define OP_TableLock 169 /* synopsis: iDb=P1 root=P2 write=P3 */ -#define OP_VBegin 170 -#define OP_VCreate 171 -#define OP_VDestroy 172 -#define OP_VOpen 173 -#define OP_VCheck 174 -#define OP_VInitIn 175 /* synopsis: r[P2]=ValueList(P1,P3) */ -#define OP_VColumn 176 /* synopsis: r[P3]=vcolumn(P2) */ -#define OP_VRename 177 -#define OP_Pagecount 178 -#define OP_MaxPgcnt 179 -#define OP_ClrSubtype 180 /* synopsis: r[P1].subtype = 0 */ -#define OP_GetSubtype 181 /* synopsis: r[P2] = r[P1].subtype */ -#define OP_SetSubtype 182 /* synopsis: r[P2].subtype = r[P1] */ -#define OP_FilterAdd 183 /* synopsis: filter(P1) += key(P3@P4) */ -#define OP_Trace 184 -#define OP_CursorHint 185 -#define OP_ReleaseReg 186 /* synopsis: release r[P1@P2] mask P3 */ -#define OP_Noop 187 -#define OP_Explain 188 -#define OP_Abortable 189 +#define OP_DropTrigger 155 +#define OP_IntegrityCk 156 +#define OP_RowSetAdd 157 /* synopsis: rowset(P1)=r[P2] */ +#define OP_Param 158 +#define OP_FkCounter 159 /* synopsis: fkctr[P1]+=P2 */ +#define OP_MemMax 160 /* synopsis: r[P1]=max(r[P1],r[P2]) */ +#define OP_OffsetLimit 161 /* synopsis: if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1) */ +#define OP_AggInverse 162 /* synopsis: accum=r[P3] inverse(r[P2@P5]) */ +#define OP_AggStep 163 /* synopsis: accum=r[P3] step(r[P2@P5]) */ +#define OP_AggStep1 164 /* synopsis: accum=r[P3] step(r[P2@P5]) */ +#define OP_AggValue 165 /* synopsis: r[P3]=value N=P2 */ +#define OP_AggFinal 166 /* synopsis: accum=r[P1] N=P2 */ +#define OP_Expire 167 +#define OP_CursorLock 168 +#define OP_CursorUnlock 169 +#define OP_TableLock 170 /* synopsis: iDb=P1 root=P2 write=P3 */ +#define OP_VBegin 171 +#define OP_VCreate 172 +#define OP_VDestroy 173 +#define OP_VOpen 174 +#define OP_VCheck 175 +#define OP_VInitIn 176 /* synopsis: r[P2]=ValueList(P1,P3) */ +#define OP_VColumn 177 /* synopsis: r[P3]=vcolumn(P2) */ +#define OP_VRename 178 +#define OP_Pagecount 179 +#define OP_MaxPgcnt 180 +#define OP_ClrSubtype 181 /* synopsis: r[P1].subtype = 0 */ +#define OP_GetSubtype 182 /* synopsis: r[P2] = r[P1].subtype */ +#define OP_SetSubtype 183 /* synopsis: r[P2].subtype = r[P1] */ +#define OP_FilterAdd 184 /* synopsis: filter(P1) += key(P3@P4) */ +#define OP_Trace 185 +#define OP_CursorHint 186 +#define OP_ReleaseReg 187 /* synopsis: release r[P1@P2] mask P3 */ +#define OP_Noop 188 +#define OP_Explain 189 +#define OP_Abortable 190 /* Properties such as "out2" or "jump" that are specified in ** comments following the "case" for each opcode in the vdbe.c @@ -17255,26 +17455,26 @@ typedef struct VdbeOpList VdbeOpList; /* 8 */ 0x81, 0x01, 0x01, 0x81, 0x83, 0x83, 0x01, 0x01,\ /* 16 */ 0x03, 0x03, 0x01, 0x12, 0x01, 0xc9, 0xc9, 0xc9,\ /* 24 */ 0xc9, 0x01, 0x49, 0x49, 0x49, 0x49, 0xc9, 0x49,\ -/* 32 */ 0xc1, 0x01, 0x41, 0x41, 0xc1, 0x01, 0x41, 0x41,\ -/* 40 */ 0x41, 0x41, 0x41, 0x26, 0x26, 0x41, 0x23, 0x0b,\ -/* 48 */ 0x81, 0x01, 0x03, 0x03, 0x03, 0x0b, 0x0b, 0x0b,\ -/* 56 */ 0x0b, 0x0b, 0x0b, 0x01, 0x03, 0x03, 0x01, 0x41,\ -/* 64 */ 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x00, 0x10,\ -/* 72 */ 0x10, 0x10, 0x00, 0x10, 0x00, 0x10, 0x10, 0x00,\ -/* 80 */ 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x02, 0x02,\ -/* 88 */ 0x02, 0x00, 0x00, 0x12, 0x1e, 0x20, 0x40, 0x00,\ -/* 96 */ 0x00, 0x00, 0x10, 0x10, 0x00, 0x40, 0x40, 0x26,\ +/* 32 */ 0xc1, 0x01, 0x41, 0x41, 0xc1, 0x01, 0x01, 0x41,\ +/* 40 */ 0x41, 0x41, 0x41, 0x26, 0x26, 0x41, 0x41, 0x23,\ +/* 48 */ 0x0b, 0x81, 0x01, 0x03, 0x03, 0x0b, 0x0b, 0x0b,\ +/* 56 */ 0x0b, 0x0b, 0x0b, 0x01, 0x03, 0x03, 0x03, 0x01,\ +/* 64 */ 0x41, 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x00,\ +/* 72 */ 0x10, 0x10, 0x10, 0x00, 0x10, 0x00, 0x10, 0x10,\ +/* 80 */ 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x02,\ +/* 88 */ 0x02, 0x02, 0x00, 0x00, 0x12, 0x1e, 0x20, 0x40,\ +/* 96 */ 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x40, 0x26,\ /* 104 */ 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26,\ -/* 112 */ 0x26, 0x00, 0x40, 0x12, 0x40, 0x40, 0x10, 0x00,\ -/* 120 */ 0x00, 0x00, 0x40, 0x00, 0x40, 0x40, 0x10, 0x10,\ -/* 128 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x50,\ -/* 136 */ 0x00, 0x40, 0x04, 0x04, 0x00, 0x40, 0x50, 0x40,\ -/* 144 */ 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,\ -/* 152 */ 0x00, 0x00, 0x10, 0x00, 0x06, 0x10, 0x00, 0x04,\ -/* 160 */ 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ -/* 168 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x10, 0x50,\ -/* 176 */ 0x40, 0x00, 0x10, 0x10, 0x02, 0x12, 0x12, 0x00,\ -/* 184 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,} +/* 112 */ 0x26, 0x40, 0x00, 0x12, 0x40, 0x40, 0x10, 0x40,\ +/* 120 */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x40, 0x10,\ +/* 128 */ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,\ +/* 136 */ 0x50, 0x00, 0x40, 0x04, 0x04, 0x00, 0x40, 0x50,\ +/* 144 */ 0x40, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,\ +/* 152 */ 0x00, 0x00, 0x10, 0x00, 0x00, 0x06, 0x10, 0x00,\ +/* 160 */ 0x04, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ +/* 168 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x10,\ +/* 176 */ 0x50, 0x40, 0x00, 0x10, 0x10, 0x02, 0x12, 0x12,\ +/* 184 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,} /* The resolve3P2Values() routine is able to run faster if it knows ** the value of the largest JUMP opcode. The smaller the maximum @@ -17282,7 +17482,7 @@ typedef struct VdbeOpList VdbeOpList; ** generated this include file strives to group all JUMP opcodes ** together near the beginning of the list. */ -#define SQLITE_MX_JUMP_OPCODE 64 /* Maximum JUMP opcode */ +#define SQLITE_MX_JUMP_OPCODE 65 /* Maximum JUMP opcode */ /************** End of opcodes.h *********************************************/ /************** Continuing where we left off in vdbe.h ***********************/ @@ -17405,8 +17605,11 @@ SQLITE_PRIVATE char *sqlite3VdbeExpandSql(Vdbe*, const char*); #endif SQLITE_PRIVATE int sqlite3MemCompare(const Mem*, const Mem*, const CollSeq*); SQLITE_PRIVATE int sqlite3BlobCompare(const Mem*, const Mem*); +#ifdef SQLITE_ENABLE_PERCENTILE +SQLITE_PRIVATE const char *sqlite3VdbeFuncName(const sqlite3_context*); +#endif -SQLITE_PRIVATE void sqlite3VdbeRecordUnpack(KeyInfo*,int,const void*,UnpackedRecord*); +SQLITE_PRIVATE void sqlite3VdbeRecordUnpack(int,const void*,UnpackedRecord*); SQLITE_PRIVATE int sqlite3VdbeRecordCompare(int,const void*,UnpackedRecord*); SQLITE_PRIVATE int sqlite3VdbeRecordCompareWithSkip(int, const void *, UnpackedRecord *, int); SQLITE_PRIVATE UnpackedRecord *sqlite3VdbeAllocUnpackedRecord(KeyInfo*); @@ -17419,7 +17622,9 @@ SQLITE_PRIVATE int sqlite3VdbeHasSubProgram(Vdbe*); SQLITE_PRIVATE void sqlite3MemSetArrayInt64(sqlite3_value *aMem, int iIdx, i64 val); +#ifndef SQLITE_OMIT_DATETIME_FUNCS SQLITE_PRIVATE int sqlite3NotPureFunc(sqlite3_context*); +#endif #ifdef SQLITE_ENABLE_BYTECODE_VTAB SQLITE_PRIVATE int sqlite3VdbeBytecodeVtabInit(sqlite3*); #endif @@ -18075,7 +18280,7 @@ struct sqlite3 { u8 iDb; /* Which db file is being initialized */ u8 busy; /* TRUE if currently initializing */ unsigned orphanTrigger : 1; /* Last statement is orphaned TEMP trigger */ - unsigned imposterTable : 1; /* Building an imposter table */ + unsigned imposterTable : 2; /* Building an imposter table */ unsigned reopenMemdb : 1; /* ATTACH is really a reopen using MemDB */ const char **azInit; /* "type", "name", and "tbl_name" columns */ } init; @@ -18158,6 +18363,7 @@ struct sqlite3 { i64 nDeferredImmCons; /* Net deferred immediate constraints */ int *pnBytesFreed; /* If not NULL, increment this in DbFree() */ DbClientData *pDbData; /* sqlite3_set_clientdata() content */ + u64 nSpill; /* TEMP content spilled to disk */ #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY /* The following variables are all protected by the STATIC_MAIN ** mutex, not by sqlite3.mutex. They are used by code in notify.c. @@ -18301,6 +18507,7 @@ struct sqlite3 { #define SQLITE_OnePass 0x08000000 /* Single-pass DELETE and UPDATE */ #define SQLITE_OrderBySubq 0x10000000 /* ORDER BY in subquery helps outer */ #define SQLITE_StarQuery 0x20000000 /* Heurists for star queries */ +#define SQLITE_ExistsToJoin 0x40000000 /* The EXISTS-to-JOIN optimization */ #define SQLITE_AllOpts 0xffffffff /* All optimizations */ /* @@ -18539,7 +18746,7 @@ struct FuncDestructor { #define STR_FUNCTION(zName, nArg, pArg, bNC, xFunc) \ {nArg, SQLITE_FUNC_BUILTIN|\ SQLITE_FUNC_SLOCHNG|SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL), \ - pArg, 0, xFunc, 0, 0, 0, #zName, } + pArg, 0, xFunc, 0, 0, 0, #zName, {0} } #define LIKEFUNC(zName, nArg, arg, flags) \ {nArg, SQLITE_FUNC_BUILTIN|SQLITE_FUNC_CONSTANT|SQLITE_UTF8|flags, \ (void *)arg, 0, likeFunc, 0, 0, 0, #zName, {0} } @@ -18867,6 +19074,7 @@ struct Table { #define TF_Ephemeral 0x00004000 /* An ephemeral table */ #define TF_Eponymous 0x00008000 /* An eponymous virtual table */ #define TF_Strict 0x00010000 /* STRICT mode */ +#define TF_Imposter 0x00020000 /* An imposter table */ /* ** Allowed values for Table.eTabType @@ -19022,9 +19230,15 @@ struct FKey { ** argument to sqlite3VdbeKeyCompare and is used to control the ** comparison of the two index keys. ** -** Note that aSortOrder[] and aColl[] have nField+1 slots. There -** are nField slots for the columns of an index then one extra slot -** for the rowid at the end. +** The aSortOrder[] and aColl[] arrays have nAllField slots each. There +** are nKeyField slots for the columns of an index then extra slots +** for the rowid or key at the end. The aSortOrder array is located after +** the aColl[] array. +** +** If SQLITE_ENABLE_PREUPDATE_HOOK is defined, then aSortFlags might be NULL +** to indicate that this object is for use by a preupdate hook. When aSortFlags +** is NULL, then nAllField is uninitialized and no space is allocated for +** aColl[], so those fields may not be used. */ struct KeyInfo { u32 nRef; /* Number of references to this KeyInfo object */ @@ -19036,9 +19250,18 @@ struct KeyInfo { CollSeq *aColl[FLEXARRAY]; /* Collating sequence for each term of the key */ }; -/* The size (in bytes) of a KeyInfo object with up to N fields */ +/* The size (in bytes) of a KeyInfo object with up to N fields. This includes +** the main body of the KeyInfo object and the aColl[] array of N elements, +** but does not count the memory used to hold aSortFlags[]. */ #define SZ_KEYINFO(N) (offsetof(KeyInfo,aColl) + (N)*sizeof(CollSeq*)) +/* The size of a bare KeyInfo with no aColl[] entries */ +#if FLEXARRAY+1 > 1 +# define SZ_KEYINFO_0 offsetof(KeyInfo,aColl) +#else +# define SZ_KEYINFO_0 sizeof(KeyInfo) +#endif + /* ** Allowed bit values for entries in the KeyInfo.aSortFlags[] array. */ @@ -19057,9 +19280,8 @@ struct KeyInfo { ** ** An instance of this object serves as a "key" for doing a search on ** an index b+tree. The goal of the search is to find the entry that -** is closed to the key described by this object. This object might hold -** just a prefix of the key. The number of fields is given by -** pKeyInfo->nField. +** is closest to the key described by this object. This object might hold +** just a prefix of the key. The number of fields is given by nField. ** ** The r1 and r2 fields are the values to return if this key is less than ** or greater than a key in the btree, respectively. These are normally @@ -19069,7 +19291,7 @@ struct KeyInfo { ** The key comparison functions actually return default_rc when they find ** an equals comparison. default_rc can be -1, 0, or +1. If there are ** multiple entries in the b-tree with the same key (when only looking -** at the first pKeyInfo->nFields,) then default_rc can be set to -1 to +** at the first nField elements) then default_rc can be set to -1 to ** cause the search to find the last match, or +1 to cause the search to ** find the first match. ** @@ -19081,8 +19303,8 @@ struct KeyInfo { ** b-tree. */ struct UnpackedRecord { - KeyInfo *pKeyInfo; /* Collation and sort-order information */ - Mem *aMem; /* Values */ + KeyInfo *pKeyInfo; /* Comparison info for the index that is unpacked */ + Mem *aMem; /* Values for columns of the index */ union { char *z; /* Cache of aMem[0].z for vdbeRecordCompareString() */ i64 i; /* Cache of aMem[0].u.i for vdbeRecordCompareInt() */ @@ -19731,6 +19953,7 @@ struct SrcItem { unsigned rowidUsed :1; /* The ROWID of this table is referenced */ unsigned fixedSchema :1; /* Uses u4.pSchema, not u4.zDatabase */ unsigned hadSchema :1; /* Had u4.zDatabase before u4.pSchema */ + unsigned fromExists :1; /* Comes from WHERE EXISTS(...) */ } fg; int iCursor; /* The VDBE cursor number used to access this table */ Bitmask colUsed; /* Bit N set if column N used. Details above for N>62 */ @@ -20018,6 +20241,7 @@ struct Select { #define SF_OrderByReqd 0x8000000 /* The ORDER BY clause may not be omitted */ #define SF_UpdateFrom 0x10000000 /* Query originates with UPDATE FROM */ #define SF_Correlated 0x20000000 /* True if references the outer context */ +#define SF_OnToWhere 0x40000000 /* One or more ON clauses moved to WHERE */ /* True if SrcItem X is a subquery that has SF_NestedFrom */ #define IsNestedFrom(X) \ @@ -20261,6 +20485,7 @@ struct Parse { u8 disableLookaside; /* Number of times lookaside has been disabled */ u8 prepFlags; /* SQLITE_PREPARE_* flags */ u8 withinRJSubrtn; /* Nesting level for RIGHT JOIN body subroutines */ + u8 bHasExists; /* Has a correlated "EXISTS (SELECT ....)" expression */ u8 mSubrtnSig; /* mini Bloom filter on available SubrtnSig.selId */ u8 eTriggerOp; /* TK_UPDATE, TK_INSERT or TK_DELETE */ u8 bReturning; /* Coding a RETURNING trigger */ @@ -20770,6 +20995,7 @@ struct Walker { SrcItem *pSrcItem; /* A single FROM clause item */ DbFixer *pFix; /* See sqlite3FixSelect() */ Mem *aMem; /* See sqlite3BtreeCursorHint() */ + struct CheckOnCtx *pCheckOnCtx; /* See selectCheckOnClauses() */ } u; }; @@ -21257,6 +21483,7 @@ SQLITE_PRIVATE void sqlite3ShowTriggerList(const Trigger*); SQLITE_PRIVATE void sqlite3ShowWindow(const Window*); SQLITE_PRIVATE void sqlite3ShowWinFunc(const Window*); #endif +SQLITE_PRIVATE void sqlite3ShowBitvec(Bitvec*); #endif SQLITE_PRIVATE void sqlite3SetString(char **, sqlite3*, const char*); @@ -21573,13 +21800,17 @@ SQLITE_PRIVATE void sqlite3RegisterDateTimeFunctions(void); SQLITE_PRIVATE void sqlite3RegisterJsonFunctions(void); SQLITE_PRIVATE void sqlite3RegisterPerConnectionBuiltinFunctions(sqlite3*); #if !defined(SQLITE_OMIT_VIRTUALTABLE) && !defined(SQLITE_OMIT_JSON) -SQLITE_PRIVATE int sqlite3JsonTableFunctions(sqlite3*); +SQLITE_PRIVATE Module *sqlite3JsonVtabRegister(sqlite3*,const char*); #endif SQLITE_PRIVATE int sqlite3SafetyCheckOk(sqlite3*); SQLITE_PRIVATE int sqlite3SafetyCheckSickOrOk(sqlite3*); SQLITE_PRIVATE void sqlite3ChangeCookie(Parse*, int); SQLITE_PRIVATE With *sqlite3WithDup(sqlite3 *db, With *p); +#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_CARRAY) +SQLITE_PRIVATE Module *sqlite3CarrayRegister(sqlite3*); +#endif + #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) SQLITE_PRIVATE void sqlite3MaterializeView(Parse*, Table*, Expr*, ExprList*,Expr*,int); #endif @@ -21800,7 +22031,7 @@ SQLITE_PRIVATE void sqlite3Reindex(Parse*, Token*, Token*); SQLITE_PRIVATE void sqlite3AlterFunctions(void); SQLITE_PRIVATE void sqlite3AlterRenameTable(Parse*, SrcList*, Token*); SQLITE_PRIVATE void sqlite3AlterRenameColumn(Parse*, SrcList*, Token*, Token*); -SQLITE_PRIVATE int sqlite3GetToken(const unsigned char *, int *); +SQLITE_PRIVATE i64 sqlite3GetToken(const unsigned char *, int *); SQLITE_PRIVATE void sqlite3NestedParse(Parse*, const char*, ...); SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3*, int); SQLITE_PRIVATE void sqlite3CodeRhsOfIN(Parse*, Expr*, int); @@ -22566,6 +22797,9 @@ static const char * const sqlite3azCompileOpt[] = { #ifdef SQLITE_ENABLE_BYTECODE_VTAB "ENABLE_BYTECODE_VTAB", #endif +#ifdef SQLITE_ENABLE_CARRAY + "ENABLE_CARRAY", +#endif #ifdef SQLITE_ENABLE_CEROD "ENABLE_CEROD=" CTIMEOPT_VAL(SQLITE_ENABLE_CEROD), #endif @@ -22656,6 +22890,9 @@ static const char * const sqlite3azCompileOpt[] = { #ifdef SQLITE_ENABLE_OVERSIZE_CELL_CHECK "ENABLE_OVERSIZE_CELL_CHECK", #endif +#ifdef SQLITE_ENABLE_PERCENTILE + "ENABLE_PERCENTILE", +#endif #ifdef SQLITE_ENABLE_PREUPDATE_HOOK "ENABLE_PREUPDATE_HOOK", #endif @@ -23870,7 +24107,7 @@ struct sqlite3_value { ** MEM_Int, MEM_Real, and MEM_IntReal. ** ** * MEM_Blob|MEM_Zero A blob in Mem.z of length Mem.n plus -** MEM.u.i extra 0x00 bytes at the end. +** Mem.u.nZero extra 0x00 bytes at the end. ** ** * MEM_Int Integer stored in Mem.u.i. ** @@ -24139,7 +24376,9 @@ struct PreUpdate { Table *pTab; /* Schema object being updated */ Index *pPk; /* PK index if pTab is WITHOUT ROWID */ sqlite3_value **apDflt; /* Array of default values, if required */ - u8 keyinfoSpace[SZ_KEYINFO(0)]; /* Space to hold pKeyinfo[0] content */ + struct { + u8 keyinfoSpace[SZ_KEYINFO_0]; /* Space to hold pKeyinfo[0] content */ + } uKey; }; /* @@ -24303,9 +24542,11 @@ SQLITE_PRIVATE int sqlite3VdbeCheckMemInvariants(Mem*); #endif #ifndef SQLITE_OMIT_FOREIGN_KEY -SQLITE_PRIVATE int sqlite3VdbeCheckFk(Vdbe *, int); +SQLITE_PRIVATE int sqlite3VdbeCheckFkImmediate(Vdbe*); +SQLITE_PRIVATE int sqlite3VdbeCheckFkDeferred(Vdbe*); #else -# define sqlite3VdbeCheckFk(p,i) 0 +# define sqlite3VdbeCheckFkImmediate(p) 0 +# define sqlite3VdbeCheckFkDeferred(p) 0 #endif #ifdef SQLITE_DEBUG @@ -24514,23 +24755,25 @@ SQLITE_PRIVATE int sqlite3LookasideUsed(sqlite3 *db, int *pHighwater){ /* ** Query status information for a single database connection */ -SQLITE_API int sqlite3_db_status( - sqlite3 *db, /* The database connection whose status is desired */ - int op, /* Status verb */ - int *pCurrent, /* Write current value here */ - int *pHighwater, /* Write high-water mark here */ - int resetFlag /* Reset high-water mark if true */ +SQLITE_API int sqlite3_db_status64( + sqlite3 *db, /* The database connection whose status is desired */ + int op, /* Status verb */ + sqlite3_int64 *pCurrent, /* Write current value here */ + sqlite3_int64 *pHighwtr, /* Write high-water mark here */ + int resetFlag /* Reset high-water mark if true */ ){ int rc = SQLITE_OK; /* Return code */ #ifdef SQLITE_ENABLE_API_ARMOR - if( !sqlite3SafetyCheckOk(db) || pCurrent==0|| pHighwater==0 ){ + if( !sqlite3SafetyCheckOk(db) || pCurrent==0|| pHighwtr==0 ){ return SQLITE_MISUSE_BKPT; } #endif sqlite3_mutex_enter(db->mutex); switch( op ){ case SQLITE_DBSTATUS_LOOKASIDE_USED: { - *pCurrent = sqlite3LookasideUsed(db, pHighwater); + int H = 0; + *pCurrent = sqlite3LookasideUsed(db, &H); + *pHighwtr = H; if( resetFlag ){ LookasideSlot *p = db->lookaside.pFree; if( p ){ @@ -24561,7 +24804,7 @@ SQLITE_API int sqlite3_db_status( assert( (op-SQLITE_DBSTATUS_LOOKASIDE_HIT)>=0 ); assert( (op-SQLITE_DBSTATUS_LOOKASIDE_HIT)<3 ); *pCurrent = 0; - *pHighwater = (int)db->lookaside.anStat[op-SQLITE_DBSTATUS_LOOKASIDE_HIT]; + *pHighwtr = db->lookaside.anStat[op-SQLITE_DBSTATUS_LOOKASIDE_HIT]; if( resetFlag ){ db->lookaside.anStat[op - SQLITE_DBSTATUS_LOOKASIDE_HIT] = 0; } @@ -24575,7 +24818,7 @@ SQLITE_API int sqlite3_db_status( */ case SQLITE_DBSTATUS_CACHE_USED_SHARED: case SQLITE_DBSTATUS_CACHE_USED: { - int totalUsed = 0; + sqlite3_int64 totalUsed = 0; int i; sqlite3BtreeEnterAll(db); for(i=0; inDb; i++){ @@ -24591,18 +24834,18 @@ SQLITE_API int sqlite3_db_status( } sqlite3BtreeLeaveAll(db); *pCurrent = totalUsed; - *pHighwater = 0; + *pHighwtr = 0; break; } /* ** *pCurrent gets an accurate estimate of the amount of memory used ** to store the schema for all databases (main, temp, and any ATTACHed - ** databases. *pHighwater is set to zero. + ** databases. *pHighwtr is set to zero. */ case SQLITE_DBSTATUS_SCHEMA_USED: { - int i; /* Used to iterate through schemas */ - int nByte = 0; /* Used to accumulate return value */ + int i; /* Used to iterate through schemas */ + int nByte = 0; /* Used to accumulate return value */ sqlite3BtreeEnterAll(db); db->pnBytesFreed = &nByte; @@ -24636,7 +24879,7 @@ SQLITE_API int sqlite3_db_status( db->lookaside.pEnd = db->lookaside.pTrueEnd; sqlite3BtreeLeaveAll(db); - *pHighwater = 0; + *pHighwtr = 0; *pCurrent = nByte; break; } @@ -24644,7 +24887,7 @@ SQLITE_API int sqlite3_db_status( /* ** *pCurrent gets an accurate estimate of the amount of memory used ** to store all prepared statements. - ** *pHighwater is set to zero. + ** *pHighwtr is set to zero. */ case SQLITE_DBSTATUS_STMT_USED: { struct Vdbe *pVdbe; /* Used to iterate through VMs */ @@ -24659,7 +24902,7 @@ SQLITE_API int sqlite3_db_status( db->lookaside.pEnd = db->lookaside.pTrueEnd; db->pnBytesFreed = 0; - *pHighwater = 0; /* IMP: R-64479-57858 */ + *pHighwtr = 0; /* IMP: R-64479-57858 */ *pCurrent = nByte; break; @@ -24667,7 +24910,7 @@ SQLITE_API int sqlite3_db_status( /* ** Set *pCurrent to the total cache hits or misses encountered by all - ** pagers the database handle is connected to. *pHighwater is always set + ** pagers the database handle is connected to. *pHighwtr is always set ** to zero. */ case SQLITE_DBSTATUS_CACHE_SPILL: @@ -24687,19 +24930,39 @@ SQLITE_API int sqlite3_db_status( sqlite3PagerCacheStat(pPager, op, resetFlag, &nRet); } } - *pHighwater = 0; /* IMP: R-42420-56072 */ + *pHighwtr = 0; /* IMP: R-42420-56072 */ /* IMP: R-54100-20147 */ /* IMP: R-29431-39229 */ - *pCurrent = (int)nRet & 0x7fffffff; + *pCurrent = nRet; + break; + } + + /* Set *pCurrent to the number of bytes that the db database connection + ** has spilled to the filesystem in temporary files that could have been + ** stored in memory, had sufficient memory been available. + ** The *pHighwater is always set to zero. + */ + case SQLITE_DBSTATUS_TEMPBUF_SPILL: { + u64 nRet = 0; + if( db->aDb[1].pBt ){ + Pager *pPager = sqlite3BtreePager(db->aDb[1].pBt); + sqlite3PagerCacheStat(pPager, SQLITE_DBSTATUS_CACHE_WRITE, + resetFlag, &nRet); + nRet *= sqlite3BtreeGetPageSize(db->aDb[1].pBt); + } + nRet += db->nSpill; + if( resetFlag ) db->nSpill = 0; + *pHighwtr = 0; + *pCurrent = nRet; break; } /* Set *pCurrent to non-zero if there are unresolved deferred foreign ** key constraints. Set *pCurrent to zero if all foreign key constraints - ** have been satisfied. The *pHighwater is always set to zero. + ** have been satisfied. The *pHighwtr is always set to zero. */ case SQLITE_DBSTATUS_DEFERRED_FKS: { - *pHighwater = 0; /* IMP: R-11967-56545 */ + *pHighwtr = 0; /* IMP: R-11967-56545 */ *pCurrent = db->nDeferredImmCons>0 || db->nDeferredCons>0; break; } @@ -24712,6 +24975,31 @@ SQLITE_API int sqlite3_db_status( return rc; } +/* +** 32-bit variant of sqlite3_db_status64() +*/ +SQLITE_API int sqlite3_db_status( + sqlite3 *db, /* The database connection whose status is desired */ + int op, /* Status verb */ + int *pCurrent, /* Write current value here */ + int *pHighwtr, /* Write high-water mark here */ + int resetFlag /* Reset high-water mark if true */ +){ + sqlite3_int64 C = 0, H = 0; + int rc; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) || pCurrent==0|| pHighwtr==0 ){ + return SQLITE_MISUSE_BKPT; + } +#endif + rc = sqlite3_db_status64(db, op, &C, &H, resetFlag); + if( rc==0 ){ + *pCurrent = C & 0x7fffffff; + *pHighwtr = H & 0x7fffffff; + } + return rc; +} + /************** End of status.c **********************************************/ /************** Begin file date.c ********************************************/ /* @@ -24904,6 +25192,10 @@ static int parseTimezone(const char *zDate, DateTime *p){ } zDate += 5; p->tz = sgn*(nMn + nHr*60); + if( p->tz==0 ){ /* Forum post 2025-09-17T10:12:14z */ + p->isLocal = 0; + p->isUtc = 1; + } zulu_time: while( sqlite3Isspace(*zDate) ){ zDate++; } return *zDate!=0; @@ -26099,8 +26391,8 @@ static int daysAfterSunday(DateTime *pDate){ ** %l hour 1-12 (leading zero converted to space) ** %m month 01-12 ** %M minute 00-59 -** %p "am" or "pm" -** %P "AM" or "PM" +** %p "AM" or "PM" +** %P "am" or "pm" ** %R time as HH:MM ** %s seconds since 1970-01-01 ** %S seconds 00-59 @@ -31707,6 +31999,7 @@ typedef struct et_info { /* Information about each format field */ etByte type; /* Conversion paradigm */ etByte charset; /* Offset into aDigits[] of the digits string */ etByte prefix; /* Offset into aPrefix[] of the prefix string */ + char iNxt; /* Next with same hash, or 0 for end of chain */ } et_info; /* @@ -31715,44 +32008,61 @@ typedef struct et_info { /* Information about each format field */ #define FLAG_SIGNED 1 /* True if the value to convert is signed */ #define FLAG_STRING 4 /* Allow infinite precision */ - /* -** The following table is searched linearly, so it is good to put the -** most frequently used conversion types first. +** The table is searched by hash. In the case of %C where C is the character +** and that character has ASCII value j, then the hash is j%23. +** +** The order of the entries in fmtinfo[] and the hash chain was entered +** manually, but based on the output of the following TCL script: */ +#if 0 /***** Beginning of script ******/ +foreach c {d s g z q Q w c o u x X f e E G i n % p T S r} { + scan $c %c x + set n($c) $x +} +set mx [llength [array names n]] +puts "count: $mx" + +set mx 27 +puts "*********** mx=$mx ************" +for {set r 0} {$r<$mx} {incr r} { + puts -nonewline [format %2d: $r] + foreach c [array names n] { + if {($n($c))%$mx==$r} {puts -nonewline " $c"} + } + puts "" +} +#endif /***** End of script ********/ + static const char aDigits[] = "0123456789ABCDEF0123456789abcdef"; static const char aPrefix[] = "-x0\000X0"; -static const et_info fmtinfo[] = { - { 'd', 10, 1, etDECIMAL, 0, 0 }, - { 's', 0, 4, etSTRING, 0, 0 }, - { 'g', 0, 1, etGENERIC, 30, 0 }, - { 'z', 0, 4, etDYNSTRING, 0, 0 }, - { 'q', 0, 4, etESCAPE_q, 0, 0 }, - { 'Q', 0, 4, etESCAPE_Q, 0, 0 }, - { 'w', 0, 4, etESCAPE_w, 0, 0 }, - { 'c', 0, 0, etCHARX, 0, 0 }, - { 'o', 8, 0, etRADIX, 0, 2 }, - { 'u', 10, 0, etDECIMAL, 0, 0 }, - { 'x', 16, 0, etRADIX, 16, 1 }, - { 'X', 16, 0, etRADIX, 0, 4 }, -#ifndef SQLITE_OMIT_FLOATING_POINT - { 'f', 0, 1, etFLOAT, 0, 0 }, - { 'e', 0, 1, etEXP, 30, 0 }, - { 'E', 0, 1, etEXP, 14, 0 }, - { 'G', 0, 1, etGENERIC, 14, 0 }, -#endif - { 'i', 10, 1, etDECIMAL, 0, 0 }, - { 'n', 0, 0, etSIZE, 0, 0 }, - { '%', 0, 0, etPERCENT, 0, 0 }, - { 'p', 16, 0, etPOINTER, 0, 1 }, - - /* All the rest are undocumented and are for internal use only */ - { 'T', 0, 0, etTOKEN, 0, 0 }, - { 'S', 0, 0, etSRCITEM, 0, 0 }, - { 'r', 10, 1, etORDINAL, 0, 0 }, +static const et_info fmtinfo[23] = { + /* 0 */ { 's', 0, 4, etSTRING, 0, 0, 1 }, + /* 1 */ { 'E', 0, 1, etEXP, 14, 0, 0 }, /* Hash: 0 */ + /* 2 */ { 'u', 10, 0, etDECIMAL, 0, 0, 3 }, + /* 3 */ { 'G', 0, 1, etGENERIC, 14, 0, 0 }, /* Hash: 2 */ + /* 4 */ { 'w', 0, 4, etESCAPE_w, 0, 0, 0 }, + /* 5 */ { 'x', 16, 0, etRADIX, 16, 1, 0 }, + /* 6 */ { 'c', 0, 0, etCHARX, 0, 0, 0 }, /* Hash: 7 */ + /* 7 */ { 'z', 0, 4, etDYNSTRING, 0, 0, 6 }, + /* 8 */ { 'd', 10, 1, etDECIMAL, 0, 0, 0 }, + /* 9 */ { 'e', 0, 1, etEXP, 30, 0, 0 }, + /* 10 */ { 'f', 0, 1, etFLOAT, 0, 0, 0 }, + /* 11 */ { 'g', 0, 1, etGENERIC, 30, 0, 0 }, + /* 12 */ { 'Q', 0, 4, etESCAPE_Q, 0, 0, 0 }, + /* 13 */ { 'i', 10, 1, etDECIMAL, 0, 0, 0 }, + /* 14 */ { '%', 0, 0, etPERCENT, 0, 0, 16 }, + /* 15 */ { 'T', 0, 0, etTOKEN, 0, 0, 0 }, + /* 16 */ { 'S', 0, 0, etSRCITEM, 0, 0, 0 }, /* Hash: 14 */ + /* 17 */ { 'X', 16, 0, etRADIX, 0, 4, 0 }, /* Hash: 19 */ + /* 18 */ { 'n', 0, 0, etSIZE, 0, 0, 0 }, + /* 19 */ { 'o', 8, 0, etRADIX, 0, 2, 17 }, + /* 20 */ { 'p', 16, 0, etPOINTER, 0, 1, 0 }, + /* 21 */ { 'q', 0, 4, etESCAPE_q, 0, 0, 0 }, + /* 22 */ { 'r', 10, 1, etORDINAL, 0, 0, 0 } }; -/* Notes: +/* Additional Notes: ** ** %S Takes a pointer to SrcItem. Shows name or database.name ** %!S Like %S but prefer the zName over the zAlias @@ -31879,7 +32189,10 @@ SQLITE_API void sqlite3_str_vappendf( #if HAVE_STRCHRNUL fmt = strchrnul(fmt, '%'); #else - do{ fmt++; }while( *fmt && *fmt != '%' ); + fmt = strchr(fmt, '%'); + if( fmt==0 ){ + fmt = bufpt + strlen(bufpt); + } #endif sqlite3_str_append(pAccum, bufpt, (int)(fmt - bufpt)); if( *fmt==0 ) break; @@ -31993,6 +32306,9 @@ SQLITE_API void sqlite3_str_vappendf( }while( !done && (c=(*++fmt))!=0 ); /* Fetch the info entry for the field */ +#ifdef SQLITE_EBCDIC + /* The hash table only works for ASCII. For EBCDIC, we need to do + ** a linear search of the table */ infop = &fmtinfo[0]; xtype = etINVALID; for(idx=0; idxtype; + }else{ + infop = &fmtinfo[0]; + xtype = etINVALID; + } +#endif /* ** At this point, variables are initialized as follows: @@ -32069,6 +32399,14 @@ SQLITE_API void sqlite3_str_vappendf( } prefix = 0; } + +#if WHERETRACE_ENABLED + if( xtype==etPOINTER && sqlite3WhereTrace & 0x100000 ) longvalue = 0; +#endif +#if TREETRACE_ENABLED + if( xtype==etPOINTER && sqlite3TreeTrace & 0x100000 ) longvalue = 0; +#endif + if( longvalue==0 ) flag_alternateform = 0; if( flag_zeropad && precisionfg.isSubquery ) n++; if( pItem->fg.isTabFunc ) n++; - if( pItem->fg.isUsing ) n++; + if( pItem->fg.isUsing || pItem->u3.pOn!=0 ) n++; if( pItem->fg.isUsing ){ sqlite3TreeViewIdList(pView, pItem->u3.pUsing, (--n)>0, "USING"); + }else if( pItem->u3.pOn!=0 ){ + sqlite3TreeViewItem(pView, "ON", (--n)>0); + sqlite3TreeViewExpr(pView, pItem->u3.pOn, 0); + sqlite3TreeViewPop(&pView); } if( pItem->fg.isSubquery ){ assert( n==1 ); @@ -37649,6 +38005,7 @@ SQLITE_PRIVATE void *sqlite3HashInsert(Hash *pH, const char *pKey, void *data){ return 0; } + /************** End of hash.c ************************************************/ /************** Begin file opcodes.c *****************************************/ /* Automatically generated. Do not edit */ @@ -37700,20 +38057,20 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){ /* 34 */ "SorterSort" OpHelp(""), /* 35 */ "Sort" OpHelp(""), /* 36 */ "Rewind" OpHelp(""), - /* 37 */ "SorterNext" OpHelp(""), - /* 38 */ "Prev" OpHelp(""), - /* 39 */ "Next" OpHelp(""), - /* 40 */ "IdxLE" OpHelp("key=r[P3@P4]"), - /* 41 */ "IdxGT" OpHelp("key=r[P3@P4]"), - /* 42 */ "IdxLT" OpHelp("key=r[P3@P4]"), + /* 37 */ "IfEmpty" OpHelp("if( empty(P1) ) goto P2"), + /* 38 */ "SorterNext" OpHelp(""), + /* 39 */ "Prev" OpHelp(""), + /* 40 */ "Next" OpHelp(""), + /* 41 */ "IdxLE" OpHelp("key=r[P3@P4]"), + /* 42 */ "IdxGT" OpHelp("key=r[P3@P4]"), /* 43 */ "Or" OpHelp("r[P3]=(r[P1] || r[P2])"), /* 44 */ "And" OpHelp("r[P3]=(r[P1] && r[P2])"), - /* 45 */ "IdxGE" OpHelp("key=r[P3@P4]"), - /* 46 */ "RowSetRead" OpHelp("r[P3]=rowset(P1)"), - /* 47 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"), - /* 48 */ "Program" OpHelp(""), - /* 49 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"), - /* 50 */ "IfPos" OpHelp("if r[P1]>0 then r[P1]-=P3, goto P2"), + /* 45 */ "IdxLT" OpHelp("key=r[P3@P4]"), + /* 46 */ "IdxGE" OpHelp("key=r[P3@P4]"), + /* 47 */ "RowSetRead" OpHelp("r[P3]=rowset(P1)"), + /* 48 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"), + /* 49 */ "Program" OpHelp(""), + /* 50 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"), /* 51 */ "IsNull" OpHelp("if r[P1]==NULL goto P2"), /* 52 */ "NotNull" OpHelp("if r[P1]!=NULL goto P2"), /* 53 */ "Ne" OpHelp("IF r[P3]!=r[P1]"), @@ -37723,49 +38080,49 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){ /* 57 */ "Lt" OpHelp("IF r[P3]=r[P1]"), /* 59 */ "ElseEq" OpHelp(""), - /* 60 */ "IfNotZero" OpHelp("if r[P1]!=0 then r[P1]--, goto P2"), - /* 61 */ "DecrJumpZero" OpHelp("if (--r[P1])==0 goto P2"), - /* 62 */ "IncrVacuum" OpHelp(""), - /* 63 */ "VNext" OpHelp(""), - /* 64 */ "Filter" OpHelp("if key(P3@P4) not in filter(P1) goto P2"), - /* 65 */ "PureFunc" OpHelp("r[P3]=func(r[P2@NP])"), - /* 66 */ "Function" OpHelp("r[P3]=func(r[P2@NP])"), - /* 67 */ "Return" OpHelp(""), - /* 68 */ "EndCoroutine" OpHelp(""), - /* 69 */ "HaltIfNull" OpHelp("if r[P3]=null halt"), - /* 70 */ "Halt" OpHelp(""), - /* 71 */ "Integer" OpHelp("r[P2]=P1"), - /* 72 */ "Int64" OpHelp("r[P2]=P4"), - /* 73 */ "String" OpHelp("r[P2]='P4' (len=P1)"), - /* 74 */ "BeginSubrtn" OpHelp("r[P2]=NULL"), - /* 75 */ "Null" OpHelp("r[P2..P3]=NULL"), - /* 76 */ "SoftNull" OpHelp("r[P1]=NULL"), - /* 77 */ "Blob" OpHelp("r[P2]=P4 (len=P1)"), - /* 78 */ "Variable" OpHelp("r[P2]=parameter(P1)"), - /* 79 */ "Move" OpHelp("r[P2@P3]=r[P1@P3]"), - /* 80 */ "Copy" OpHelp("r[P2@P3+1]=r[P1@P3+1]"), - /* 81 */ "SCopy" OpHelp("r[P2]=r[P1]"), - /* 82 */ "IntCopy" OpHelp("r[P2]=r[P1]"), - /* 83 */ "FkCheck" OpHelp(""), - /* 84 */ "ResultRow" OpHelp("output=r[P1@P2]"), - /* 85 */ "CollSeq" OpHelp(""), - /* 86 */ "AddImm" OpHelp("r[P1]=r[P1]+P2"), - /* 87 */ "RealAffinity" OpHelp(""), - /* 88 */ "Cast" OpHelp("affinity(r[P1])"), - /* 89 */ "Permutation" OpHelp(""), - /* 90 */ "Compare" OpHelp("r[P1@P3] <-> r[P2@P3]"), - /* 91 */ "IsTrue" OpHelp("r[P2] = coalesce(r[P1]==TRUE,P3) ^ P4"), - /* 92 */ "ZeroOrNull" OpHelp("r[P2] = 0 OR NULL"), - /* 93 */ "Offset" OpHelp("r[P3] = sqlite_offset(P1)"), - /* 94 */ "Column" OpHelp("r[P3]=PX cursor P1 column P2"), - /* 95 */ "TypeCheck" OpHelp("typecheck(r[P1@P2])"), - /* 96 */ "Affinity" OpHelp("affinity(r[P1@P2])"), - /* 97 */ "MakeRecord" OpHelp("r[P3]=mkrec(r[P1@P2])"), - /* 98 */ "Count" OpHelp("r[P2]=count()"), - /* 99 */ "ReadCookie" OpHelp(""), - /* 100 */ "SetCookie" OpHelp(""), - /* 101 */ "ReopenIdx" OpHelp("root=P2 iDb=P3"), - /* 102 */ "OpenRead" OpHelp("root=P2 iDb=P3"), + /* 60 */ "IfPos" OpHelp("if r[P1]>0 then r[P1]-=P3, goto P2"), + /* 61 */ "IfNotZero" OpHelp("if r[P1]!=0 then r[P1]--, goto P2"), + /* 62 */ "DecrJumpZero" OpHelp("if (--r[P1])==0 goto P2"), + /* 63 */ "IncrVacuum" OpHelp(""), + /* 64 */ "VNext" OpHelp(""), + /* 65 */ "Filter" OpHelp("if key(P3@P4) not in filter(P1) goto P2"), + /* 66 */ "PureFunc" OpHelp("r[P3]=func(r[P2@NP])"), + /* 67 */ "Function" OpHelp("r[P3]=func(r[P2@NP])"), + /* 68 */ "Return" OpHelp(""), + /* 69 */ "EndCoroutine" OpHelp(""), + /* 70 */ "HaltIfNull" OpHelp("if r[P3]=null halt"), + /* 71 */ "Halt" OpHelp(""), + /* 72 */ "Integer" OpHelp("r[P2]=P1"), + /* 73 */ "Int64" OpHelp("r[P2]=P4"), + /* 74 */ "String" OpHelp("r[P2]='P4' (len=P1)"), + /* 75 */ "BeginSubrtn" OpHelp("r[P2]=NULL"), + /* 76 */ "Null" OpHelp("r[P2..P3]=NULL"), + /* 77 */ "SoftNull" OpHelp("r[P1]=NULL"), + /* 78 */ "Blob" OpHelp("r[P2]=P4 (len=P1)"), + /* 79 */ "Variable" OpHelp("r[P2]=parameter(P1)"), + /* 80 */ "Move" OpHelp("r[P2@P3]=r[P1@P3]"), + /* 81 */ "Copy" OpHelp("r[P2@P3+1]=r[P1@P3+1]"), + /* 82 */ "SCopy" OpHelp("r[P2]=r[P1]"), + /* 83 */ "IntCopy" OpHelp("r[P2]=r[P1]"), + /* 84 */ "FkCheck" OpHelp(""), + /* 85 */ "ResultRow" OpHelp("output=r[P1@P2]"), + /* 86 */ "CollSeq" OpHelp(""), + /* 87 */ "AddImm" OpHelp("r[P1]=r[P1]+P2"), + /* 88 */ "RealAffinity" OpHelp(""), + /* 89 */ "Cast" OpHelp("affinity(r[P1])"), + /* 90 */ "Permutation" OpHelp(""), + /* 91 */ "Compare" OpHelp("r[P1@P3] <-> r[P2@P3]"), + /* 92 */ "IsTrue" OpHelp("r[P2] = coalesce(r[P1]==TRUE,P3) ^ P4"), + /* 93 */ "ZeroOrNull" OpHelp("r[P2] = 0 OR NULL"), + /* 94 */ "Offset" OpHelp("r[P3] = sqlite_offset(P1)"), + /* 95 */ "Column" OpHelp("r[P3]=PX cursor P1 column P2"), + /* 96 */ "TypeCheck" OpHelp("typecheck(r[P1@P2])"), + /* 97 */ "Affinity" OpHelp("affinity(r[P1@P2])"), + /* 98 */ "MakeRecord" OpHelp("r[P3]=mkrec(r[P1@P2])"), + /* 99 */ "Count" OpHelp("r[P2]=count()"), + /* 100 */ "ReadCookie" OpHelp(""), + /* 101 */ "SetCookie" OpHelp(""), + /* 102 */ "ReopenIdx" OpHelp("root=P2 iDb=P3"), /* 103 */ "BitAnd" OpHelp("r[P3]=r[P1]&r[P2]"), /* 104 */ "BitOr" OpHelp("r[P3]=r[P1]|r[P2]"), /* 105 */ "ShiftLeft" OpHelp("r[P3]=r[P2]<0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1)"), - /* 161 */ "AggInverse" OpHelp("accum=r[P3] inverse(r[P2@P5])"), - /* 162 */ "AggStep" OpHelp("accum=r[P3] step(r[P2@P5])"), - /* 163 */ "AggStep1" OpHelp("accum=r[P3] step(r[P2@P5])"), - /* 164 */ "AggValue" OpHelp("r[P3]=value N=P2"), - /* 165 */ "AggFinal" OpHelp("accum=r[P1] N=P2"), - /* 166 */ "Expire" OpHelp(""), - /* 167 */ "CursorLock" OpHelp(""), - /* 168 */ "CursorUnlock" OpHelp(""), - /* 169 */ "TableLock" OpHelp("iDb=P1 root=P2 write=P3"), - /* 170 */ "VBegin" OpHelp(""), - /* 171 */ "VCreate" OpHelp(""), - /* 172 */ "VDestroy" OpHelp(""), - /* 173 */ "VOpen" OpHelp(""), - /* 174 */ "VCheck" OpHelp(""), - /* 175 */ "VInitIn" OpHelp("r[P2]=ValueList(P1,P3)"), - /* 176 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"), - /* 177 */ "VRename" OpHelp(""), - /* 178 */ "Pagecount" OpHelp(""), - /* 179 */ "MaxPgcnt" OpHelp(""), - /* 180 */ "ClrSubtype" OpHelp("r[P1].subtype = 0"), - /* 181 */ "GetSubtype" OpHelp("r[P2] = r[P1].subtype"), - /* 182 */ "SetSubtype" OpHelp("r[P2].subtype = r[P1]"), - /* 183 */ "FilterAdd" OpHelp("filter(P1) += key(P3@P4)"), - /* 184 */ "Trace" OpHelp(""), - /* 185 */ "CursorHint" OpHelp(""), - /* 186 */ "ReleaseReg" OpHelp("release r[P1@P2] mask P3"), - /* 187 */ "Noop" OpHelp(""), - /* 188 */ "Explain" OpHelp(""), - /* 189 */ "Abortable" OpHelp(""), + /* 155 */ "DropTrigger" OpHelp(""), + /* 156 */ "IntegrityCk" OpHelp(""), + /* 157 */ "RowSetAdd" OpHelp("rowset(P1)=r[P2]"), + /* 158 */ "Param" OpHelp(""), + /* 159 */ "FkCounter" OpHelp("fkctr[P1]+=P2"), + /* 160 */ "MemMax" OpHelp("r[P1]=max(r[P1],r[P2])"), + /* 161 */ "OffsetLimit" OpHelp("if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1)"), + /* 162 */ "AggInverse" OpHelp("accum=r[P3] inverse(r[P2@P5])"), + /* 163 */ "AggStep" OpHelp("accum=r[P3] step(r[P2@P5])"), + /* 164 */ "AggStep1" OpHelp("accum=r[P3] step(r[P2@P5])"), + /* 165 */ "AggValue" OpHelp("r[P3]=value N=P2"), + /* 166 */ "AggFinal" OpHelp("accum=r[P1] N=P2"), + /* 167 */ "Expire" OpHelp(""), + /* 168 */ "CursorLock" OpHelp(""), + /* 169 */ "CursorUnlock" OpHelp(""), + /* 170 */ "TableLock" OpHelp("iDb=P1 root=P2 write=P3"), + /* 171 */ "VBegin" OpHelp(""), + /* 172 */ "VCreate" OpHelp(""), + /* 173 */ "VDestroy" OpHelp(""), + /* 174 */ "VOpen" OpHelp(""), + /* 175 */ "VCheck" OpHelp(""), + /* 176 */ "VInitIn" OpHelp("r[P2]=ValueList(P1,P3)"), + /* 177 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"), + /* 178 */ "VRename" OpHelp(""), + /* 179 */ "Pagecount" OpHelp(""), + /* 180 */ "MaxPgcnt" OpHelp(""), + /* 181 */ "ClrSubtype" OpHelp("r[P1].subtype = 0"), + /* 182 */ "GetSubtype" OpHelp("r[P2] = r[P1].subtype"), + /* 183 */ "SetSubtype" OpHelp("r[P2].subtype = r[P1]"), + /* 184 */ "FilterAdd" OpHelp("filter(P1) += key(P3@P4)"), + /* 185 */ "Trace" OpHelp(""), + /* 186 */ "CursorHint" OpHelp(""), + /* 187 */ "ReleaseReg" OpHelp("release r[P1@P2] mask P3"), + /* 188 */ "Noop" OpHelp(""), + /* 189 */ "Explain" OpHelp(""), + /* 190 */ "Abortable" OpHelp(""), }; return azName[i]; } @@ -38036,7 +38394,7 @@ static int kvstorageRead(const char*, const char *zKey, char *zBuf, int nBuf); #define KVSTORAGE_KEY_SZ 32 /* Expand the key name with an appropriate prefix and put the result -** zKeyOut[]. The zKeyOut[] buffer is assumed to hold at least +** in zKeyOut[]. The zKeyOut[] buffer is assumed to hold at least ** KVSTORAGE_KEY_SZ bytes. */ static void kvstorageMakeKey( @@ -38095,10 +38453,12 @@ static int kvstorageDelete(const char *zClass, const char *zKey){ ** ** Return the total number of bytes in the data, without truncation, and ** not counting the final zero terminator. Return -1 if the key does -** not exist. +** not exist or its key cannot be read. ** -** If nBuf<=0 then this routine simply returns the size of the data without -** actually reading it. +** If nBuf<=0 then this routine simply returns the size of the data +** without actually reading it. Similarly, if nBuf==1 then it +** zero-terminates zBuf at zBuf[0] and returns the size of the data +** without reading it. */ static int kvstorageRead( const char *zClass, @@ -38147,11 +38507,9 @@ static int kvstorageRead( ** kvvfs i/o methods with JavaScript implementations in WASM builds. ** Maintenance reminder: if this struct changes in any way, the JSON ** rendering of its structure must be updated in -** sqlite3_wasm_enum_json(). There are no binary compatibility -** concerns, so it does not need an iVersion member. This file is -** necessarily always compiled together with sqlite3_wasm_enum_json(), -** and JS code dynamically creates the mapping of members based on -** that JSON description. +** sqlite3-wasm.c:sqlite3__wasm_enum_json(). There are no binary +** compatibility concerns, so it does not need an iVersion +** member. */ typedef struct sqlite3_kvvfs_methods sqlite3_kvvfs_methods; struct sqlite3_kvvfs_methods { @@ -38168,8 +38526,8 @@ struct sqlite3_kvvfs_methods { ** the compiler can hopefully optimize this level of indirection out. ** That said, kvvfs is intended primarily for use in WASM builds. ** -** Note that this is not explicitly flagged as static because the -** amalgamation build will tag it with SQLITE_PRIVATE. +** This is not explicitly flagged as static because the amalgamation +** build will tag it with SQLITE_PRIVATE. */ #ifndef SQLITE_WASM const @@ -39342,10 +39700,11 @@ static struct unix_syscall { #if defined(HAVE_FCHMOD) { "fchmod", (sqlite3_syscall_ptr)fchmod, 0 }, +#define osFchmod ((int(*)(int,mode_t))aSyscall[14].pCurrent) #else { "fchmod", (sqlite3_syscall_ptr)0, 0 }, +#define osFchmod(FID,MODE) 0 #endif -#define osFchmod ((int(*)(int,mode_t))aSyscall[14].pCurrent) #if defined(HAVE_POSIX_FALLOCATE) && HAVE_POSIX_FALLOCATE { "fallocate", (sqlite3_syscall_ptr)posix_fallocate, 0 }, @@ -39439,6 +39798,119 @@ static struct unix_syscall { }; /* End of the overrideable system calls */ +#if defined(SQLITE_DEBUG) || defined(SQLITE_ENABLE_FILESTAT) +/* +** Extract Posix Advisory Locking information about file description fd +** from the /proc/PID/fdinfo/FD pseudo-file. Fill the string buffer a[16] +** with characters to indicate which SQLite-relevant locks are held. +** a[16] will be a 15-character zero-terminated string with the following +** schema: +** +** AAA/B.DDD.DDDDD +** +** Each of character A-D will be "w" or "r" or "-" to indicate either a +** write-lock, a read-lock, or no-lock, respectively. The "." and "/" +** characters are delimiters intended to make the string more easily +** readable by humans. Here are the meaning of the specific letters: +** +** AAA -> The main database locks. PENDING_BYTE, RESERVED_BYTE, +** and SHARED_FIRST, respectively. +** +** B -> The deadman switch lock. Offset 128 of the -shm file. +** +** CCC -> WAL locks: WRITE, CKPT, RECOVER +** +** DDDDD -> WAL read-locks 0 through 5 +** +** Note that elements before the "/" apply to the main database file and +** elements after the "/" apply to the -shm file in WAL mode. +** +** Here is another way of thinking about the meaning of the result string: +** +** AAA/B.CCC.DDDDD +** ||| | ||| \___/ +** PENDING--'|| | ||| `----- READ 0-5 +** RESERVED--'| | ||`---- RECOVER +** SHARED ----' | |`----- CKPT +** DMS ------' `------ WRITE +** +** Return SQLITE_OK on success and SQLITE_ERROR_UNABLE if the /proc +** pseudo-filesystem is unavailable. +*/ +static int unixPosixAdvisoryLocks( + int fd, /* The file descriptor to analyze */ + char a[16] /* Write a text description of PALs here */ +){ + int in; + ssize_t n; + char *p, *pNext, *x; + char z[2000]; + + /* 1 */ + /* 012 4 678 01234 */ + memcpy(a, "---/-.---.-----", 16); + sqlite3_snprintf(sizeof(z), z, "/proc/%d/fdinfo/%d", getpid(), fd); + in = osOpen(z, O_RDONLY, 0); + if( in<0 ){ + return SQLITE_ERROR_UNABLE; + } + n = osRead(in, z, sizeof(z)-1); + osClose(in); + if( n<=0 ) return SQLITE_ERROR_UNABLE; + z[n] = 0; + + /* We are looking for lines that begin with "lock:\t". Examples: + ** + ** lock: 1: POSIX ADVISORY READ 494716 08:02:5277597 1073741826 1073742335 + ** lock: 1: POSIX ADVISORY WRITE 494716 08:02:5282282 120 120 + ** lock: 2: POSIX ADVISORY READ 494716 08:02:5282282 123 123 + ** lock: 3: POSIX ADVISORY READ 494716 08:02:5282282 128 128 + */ + pNext = strstr(z, "lock:\t"); + while( pNext ){ + char cType = 0; + sqlite3_int64 iFirst, iLast; + p = pNext+6; + pNext = strstr(p, "lock:\t"); + if( pNext ) pNext[-1] = 0; + if( (x = strstr(p, " READ "))!=0 ){ + cType = 'r'; + x += 6; + }else if( (x = strstr(p, " WRITE "))!=0 ){ + cType = 'w'; + x += 7; + }else{ + continue; + } + x = strrchr(x, ' '); + if( x==0 ) continue; + iLast = strtoll(x+1, 0, 10); + *x = 0; + x = strrchr(p, ' '); + if( x==0 ) continue; + iFirst = strtoll(x+1, 0, 10); + if( iLast>=PENDING_BYTE ){ + if( iFirst<=PENDING_BYTE && iLast>=PENDING_BYTE ) a[0] = cType; + if( iFirst<=PENDING_BYTE+1 && iLast>=PENDING_BYTE+1 ) a[1] = cType; + if( iFirst<=PENDING_BYTE+2 && iLast>=PENDING_BYTE+510 ) a[2] = cType; + }else if( iLast<=128 ){ + if( iFirst<=128 && iLast>=128 ) a[4] = cType; + if( iFirst<=120 && iLast>=120 ) a[6] = cType; + if( iFirst<=121 && iLast>=121 ) a[7] = cType; + if( iFirst<=122 && iLast>=122 ) a[8] = cType; + if( iFirst<=123 && iLast>=123 ) a[10] = cType; + if( iFirst<=124 && iLast>=124 ) a[11] = cType; + if( iFirst<=125 && iLast>=125 ) a[12] = cType; + if( iFirst<=126 && iLast>=126 ) a[13] = cType; + if( iFirst<=127 && iLast>=127 ) a[14] = cType; + } + } + return SQLITE_OK; +} +#else +# define unixPosixAdvisoryLocks(A,B) SQLITE_ERROR_UNABLE +#endif /* SQLITE_DEBUG || SQLITE_ENABLE_FILESTAT */ + /* ** On some systems, calls to fchown() will trigger a message in a security ** log if they come from non-root processes. So avoid calling fchown() if @@ -39603,9 +40075,8 @@ static int robust_open(const char *z, int f, mode_t m){ /* ** Helper functions to obtain and relinquish the global mutex. The -** global mutex is used to protect the unixInodeInfo and -** vxworksFileId objects used by this file, all of which may be -** shared by multiple threads. +** global mutex is used to protect the unixInodeInfo objects used by +** this file, all of which may be shared by multiple threads. ** ** Function unixMutexHeld() is used to assert() that the global mutex ** is held when required. This function is only used as part of assert() @@ -39807,6 +40278,7 @@ struct vxworksFileId { ** variable: */ static struct vxworksFileId *vxworksFileList = 0; +static sqlite3_mutex *vxworksMutex = 0; /* ** Simplify a filename into its canonical form @@ -39872,14 +40344,14 @@ static struct vxworksFileId *vxworksFindFileId(const char *zAbsoluteName){ ** If found, increment the reference count and return a pointer to ** the existing file ID. */ - unixEnterMutex(); + sqlite3_mutex_enter(vxworksMutex); for(pCandidate=vxworksFileList; pCandidate; pCandidate=pCandidate->pNext){ if( pCandidate->nName==n && memcmp(pCandidate->zCanonicalName, pNew->zCanonicalName, n)==0 ){ sqlite3_free(pNew); pCandidate->nRef++; - unixLeaveMutex(); + sqlite3_mutex_leave(vxworksMutex); return pCandidate; } } @@ -39889,7 +40361,7 @@ static struct vxworksFileId *vxworksFindFileId(const char *zAbsoluteName){ pNew->nName = n; pNew->pNext = vxworksFileList; vxworksFileList = pNew; - unixLeaveMutex(); + sqlite3_mutex_leave(vxworksMutex); return pNew; } @@ -39898,7 +40370,7 @@ static struct vxworksFileId *vxworksFindFileId(const char *zAbsoluteName){ ** the object when the reference count reaches zero. */ static void vxworksReleaseFileId(struct vxworksFileId *pId){ - unixEnterMutex(); + sqlite3_mutex_enter(vxworksMutex); assert( pId->nRef>0 ); pId->nRef--; if( pId->nRef==0 ){ @@ -39908,7 +40380,7 @@ static void vxworksReleaseFileId(struct vxworksFileId *pId){ *pp = pId->pNext; sqlite3_free(pId); } - unixLeaveMutex(); + sqlite3_mutex_leave(vxworksMutex); } #endif /* OS_VXWORKS */ /*************** End of Unique File ID Utility Used By VxWorks **************** @@ -40296,6 +40768,10 @@ static int findInodeInfo( storeLastErrno(pFile, errno); return SQLITE_IOERR; } + if( fsync(fd) ){ + storeLastErrno(pFile, errno); + return SQLITE_IOERR_FSYNC; + } rc = osFstat(fd, &statbuf); if( rc!=0 ){ storeLastErrno(pFile, errno); @@ -40465,18 +40941,42 @@ static int osSetPosixAdvisoryLock( struct flock *pLock, /* The description of the lock */ unixFile *pFile /* Structure holding timeout value */ ){ - int tm = pFile->iBusyTimeout; - int rc = osFcntl(h,F_SETLK,pLock); - while( rc<0 && tm>0 ){ - /* On systems that support some kind of blocking file lock with a timeout, - ** make appropriate changes here to invoke that blocking file lock. On - ** generic posix, however, there is no such API. So we simply try the - ** lock once every millisecond until either the timeout expires, or until - ** the lock is obtained. */ - unixSleep(0,1000); + int rc = 0; + + if( pFile->iBusyTimeout==0 ){ + /* unixFile->iBusyTimeout is set to 0. In this case, attempt a + ** non-blocking lock. */ rc = osFcntl(h,F_SETLK,pLock); - tm--; + }else{ + /* unixFile->iBusyTimeout is set to greater than zero. In this case, + ** attempt a blocking-lock with a unixFile->iBusyTimeout ms timeout. + ** + ** On systems that support some kind of blocking file lock operation, + ** this block should be replaced by code to attempt a blocking lock + ** with a timeout of unixFile->iBusyTimeout ms. The code below is + ** placeholder code. If SQLITE_TEST is defined, the placeholder code + ** retries the lock once every 1ms until it succeeds or the timeout + ** is reached. Or, if SQLITE_TEST is not defined, the placeholder + ** code attempts a non-blocking lock and sets unixFile->iBusyTimeout + ** to 0. This causes the caller to return SQLITE_BUSY, instead of + ** SQLITE_BUSY_TIMEOUT to SQLite - as required by a VFS that does not + ** support blocking locks. + */ +#ifdef SQLITE_TEST + int tm = pFile->iBusyTimeout; + while( tm>0 ){ + rc = osFcntl(h,F_SETLK,pLock); + if( rc==0 ) break; + unixSleep(0,1000); + tm--; + } +#else + rc = osFcntl(h,F_SETLK,pLock); + pFile->iBusyTimeout = 0; +#endif + /* End of code to replace with real blocking-locks code. */ } + return rc; } #endif /* SQLITE_ENABLE_SETLK_TIMEOUT */ @@ -40534,6 +41034,13 @@ static int unixFileLock(unixFile *pFile, struct flock *pLock){ return rc; } +#if !defined(SQLITE_WASI) && !defined(SQLITE_OMIT_WAL) +/* Forward reference */ +static int unixIsSharingShmNode(unixFile*); +#else +#define unixIsSharingShmNode(pFile) (0) +#endif + /* ** Lock the file with the lock specified by parameter eFileLock - one ** of the following: @@ -40722,7 +41229,9 @@ static int unixLock(sqlite3_file *id, int eFileLock){ pInode->nLock++; pInode->nShared = 1; } - }else if( eFileLock==EXCLUSIVE_LOCK && pInode->nShared>1 ){ + }else if( (eFileLock==EXCLUSIVE_LOCK && pInode->nShared>1) + || unixIsSharingShmNode(pFile) + ){ /* We are trying for an exclusive lock but another thread in this ** same process is still holding a shared lock. */ rc = SQLITE_BUSY; @@ -42817,6 +43326,10 @@ static int unixGetTempname(int nBuf, char *zBuf); #if !defined(SQLITE_WASI) && !defined(SQLITE_OMIT_WAL) static int unixFcntlExternalReader(unixFile*, int*); #endif +#if defined(SQLITE_DEBUG) || defined(SQLITE_ENABLE_FILESTAT) + static void unixDescribeShm(sqlite3_str*,unixShm*); +#endif + /* ** Information and control of an open file handle. @@ -42959,6 +43472,66 @@ static int unixFileControl(sqlite3_file *id, int op, void *pArg){ return SQLITE_OK; #endif } + +#if defined(SQLITE_DEBUG) || defined(SQLITE_ENABLE_FILESTAT) + case SQLITE_FCNTL_FILESTAT: { + sqlite3_str *pStr = (sqlite3_str*)pArg; + char aLck[16]; + unixInodeInfo *pInode; + static const char *azLock[] = { "SHARED", "RESERVED", + "PENDING", "EXCLUSIVE" }; + sqlite3_str_appendf(pStr, "{\"h\":%d", pFile->h); + sqlite3_str_appendf(pStr, ",\"vfs\":\"%s\"", pFile->pVfs->zName); + if( pFile->eFileLock ){ + sqlite3_str_appendf(pStr, ",\"eFileLock\":\"%s\"", + azLock[pFile->eFileLock-1]); + if( unixPosixAdvisoryLocks(pFile->h, aLck)==SQLITE_OK ){ + sqlite3_str_appendf(pStr, ",\"pal\":\"%s\"", aLck); + } + } + unixEnterMutex(); + if( pFile->pShm ){ + sqlite3_str_appendall(pStr, ",\"shm\":"); + unixDescribeShm(pStr, pFile->pShm); + } +#if SQLITE_MAX_MMAP_SIZE>0 + if( pFile->mmapSize ){ + sqlite3_str_appendf(pStr, ",\"mmapSize\":%lld", pFile->mmapSize); + sqlite3_str_appendf(pStr, ",\"nFetchOut\":%d", pFile->nFetchOut); + } +#endif + if( (pInode = pFile->pInode)!=0 ){ + sqlite3_str_appendf(pStr, ",\"inode\":{\"nRef\":%d",pInode->nRef); + sqlite3_mutex_enter(pInode->pLockMutex); + sqlite3_str_appendf(pStr, ",\"nShared\":%d", pInode->nShared); + if( pInode->eFileLock ){ + sqlite3_str_appendf(pStr, ",\"eFileLock\":\"%s\"", + azLock[pInode->eFileLock-1]); + } + if( pInode->pUnused ){ + char cSep = '['; + UnixUnusedFd *pUFd = pFile->pInode->pUnused; + sqlite3_str_appendall(pStr, ",\"unusedFd\":"); + while( pUFd ){ + sqlite3_str_appendf(pStr, "%c{\"fd\":%d,\"flags\":%d", + cSep, pUFd->fd, pUFd->flags); + cSep = ','; + if( unixPosixAdvisoryLocks(pUFd->fd, aLck)==SQLITE_OK ){ + sqlite3_str_appendf(pStr, ",\"pal\":\"%s\"", aLck); + } + sqlite3_str_append(pStr, "}", 1); + pUFd = pUFd->pNext; + } + sqlite3_str_append(pStr, "]", 1); + } + sqlite3_mutex_leave(pInode->pLockMutex); + sqlite3_str_append(pStr, "}", 1); + } + unixLeaveMutex(); + sqlite3_str_append(pStr, "}", 1); + return SQLITE_OK; + } +#endif /* SQLITE_DEBUG || SQLITE_ENABLE_FILESTAT */ } return SQLITE_NOTFOUND; } @@ -43225,6 +43798,26 @@ struct unixShm { #define UNIX_SHM_BASE ((22+SQLITE_SHM_NLOCK)*4) /* first lock byte */ #define UNIX_SHM_DMS (UNIX_SHM_BASE+SQLITE_SHM_NLOCK) /* deadman switch */ +#if defined(SQLITE_DEBUG) || defined(SQLITE_ENABLE_FILESTAT) +/* +** Describe the pShm object using JSON. Used for diagnostics only. +*/ +static void unixDescribeShm(sqlite3_str *pStr, unixShm *pShm){ + unixShmNode *pNode = pShm->pShmNode; + char aLck[16]; + sqlite3_str_appendf(pStr, "{\"h\":%d", pNode->hShm); + assert( unixMutexHeld() ); + sqlite3_str_appendf(pStr, ",\"nRef\":%d", pNode->nRef); + sqlite3_str_appendf(pStr, ",\"id\":%d", pShm->id); + sqlite3_str_appendf(pStr, ",\"sharedMask\":%d", pShm->sharedMask); + sqlite3_str_appendf(pStr, ",\"exclMask\":%d", pShm->exclMask); + if( unixPosixAdvisoryLocks(pNode->hShm, aLck)==SQLITE_OK ){ + sqlite3_str_appendf(pStr, ",\"pal\":\"%s\"", aLck); + } + sqlite3_str_append(pStr, "}", 1); +} +#endif /* SQLITE_DEBUG || SQLITE_ENABLE_FILESTAT */ + /* ** Use F_GETLK to check whether or not there are any readers with open ** wal-mode transactions in other processes on database file pFile. If @@ -43258,6 +43851,49 @@ static int unixFcntlExternalReader(unixFile *pFile, int *piOut){ return rc; } +/* +** If pFile has a -shm file open and it is sharing that file with some +** other connection, either in the same process or in a separate process, +** then return true. Return false if either pFile does not have a -shm +** file open or if it is the only connection to that -shm file across the +** entire system. +** +** This routine is not required for correct operation. It can always return +** false and SQLite will continue to operate according to spec. However, +** when this routine does its job, it adds extra robustness in cases +** where database file locks have been erroneously deleted in a WAL-mode +** database by doing close(open(DATABASE_PATHNAME)) or similar. +** +** With false negatives, SQLite still operates to spec, though with less +** robustness. With false positives, the last database connection on a +** WAL-mode database will fail to unlink the -wal and -shm files, which +** is annoying but harmless. False positives will also prevent a database +** connection from running "PRAGMA journal_mode=DELETE" in order to take +** the database out of WAL mode, which is perhaps more serious, but is +** still not a disaster. +*/ +static int unixIsSharingShmNode(unixFile *pFile){ + int rc; + unixShmNode *pShmNode; + if( pFile->pShm==0 ) return 0; + if( pFile->ctrlFlags & UNIXFILE_EXCL ) return 0; + pShmNode = pFile->pShm->pShmNode; + rc = 1; + unixEnterMutex(); + if( ALWAYS(pShmNode->nRef==1) ){ + struct flock lock; + lock.l_whence = SEEK_SET; + lock.l_start = UNIX_SHM_DMS; + lock.l_len = 1; + lock.l_type = F_WRLCK; + osFcntl(pShmNode->hShm, F_GETLK, &lock); + if( lock.l_type==F_UNLCK ){ + rc = 0; + } + } + unixLeaveMutex(); + return rc; +} /* ** Apply posix advisory locks for all bytes from ofst through ofst+n-1. @@ -43303,7 +43939,8 @@ static int unixShmSystemLock( /* Locks are within range */ assert( n>=1 && n<=SQLITE_SHM_NLOCK ); - assert( ofst>=UNIX_SHM_BASE && ofst<=(UNIX_SHM_DMS+SQLITE_SHM_NLOCK) ); + assert( ofst>=UNIX_SHM_BASE && ofst<=UNIX_SHM_DMS ); + assert( ofst+n-1<=UNIX_SHM_DMS ); if( pShmNode->hShm>=0 ){ int res; @@ -43835,7 +44472,7 @@ static int assertLockingArrayOk(unixShmNode *pShmNode){ return (memcmp(pShmNode->aLock, aLock, sizeof(aLock))==0); #endif } -#endif +#endif /* !defined(SQLITE_WASI) && !defined(SQLITE_OMIT_WAL) */ /* ** Change the lock state for a shared-memory segment. @@ -44797,10 +45434,17 @@ static int fillInUnixFile( storeLastErrno(pNew, 0); #if OS_VXWORKS if( rc!=SQLITE_OK ){ - if( h>=0 ) robust_close(pNew, h, __LINE__); - h = -1; - osUnlink(zFilename); - pNew->ctrlFlags |= UNIXFILE_DELETE; + if( h>=0 ){ + robust_close(pNew, h, __LINE__); + h = -1; + } + if( pNew->ctrlFlags & UNIXFILE_DELETE ){ + osUnlink(zFilename); + } + if( pNew->pId ){ + vxworksReleaseFileId(pNew->pId); + pNew->pId = 0; + } } #endif if( rc!=SQLITE_OK ){ @@ -44844,6 +45488,9 @@ static const char *unixTempFileDir(void){ while(1){ if( zDir!=0 +#if OS_VXWORKS + && zDir[0]=='/' +#endif && osStat(zDir, &buf)==0 && S_ISDIR(buf.st_mode) && osAccess(zDir, 03)==0 @@ -45158,6 +45805,12 @@ static int unixOpen( || eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL ); +#if OS_VXWORKS + /* The file-ID mechanism used in Vxworks requires that all pathnames + ** provided to unixOpen must be absolute pathnames. */ + if( zPath!=0 && zPath[0]!='/' ){ return SQLITE_CANTOPEN; } +#endif + /* Detect a pid change and reset the PRNG. There is a race condition ** here such that two or more threads all trying to open databases at ** the same instant might all reset the PRNG. But multiple resets @@ -45358,8 +46011,11 @@ static int unixOpen( } #endif - assert( zPath==0 || zPath[0]=='/' - || eType==SQLITE_OPEN_SUPER_JOURNAL || eType==SQLITE_OPEN_MAIN_JOURNAL + assert( zPath==0 + || zPath[0]=='/' + || eType==SQLITE_OPEN_SUPER_JOURNAL + || eType==SQLITE_OPEN_MAIN_JOURNAL + || eType==SQLITE_OPEN_TEMP_JOURNAL ); rc = fillInUnixFile(pVfs, fd, pFile, zPath, ctrlFlags); @@ -47088,6 +47744,9 @@ SQLITE_API int sqlite3_os_init(void){ sqlite3KvvfsInit(); #endif unixBigLock = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1); +#if OS_VXWORKS + vxworksMutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS2); +#endif #ifndef SQLITE_OMIT_WAL /* Validate lock assumptions */ @@ -47122,6 +47781,9 @@ SQLITE_API int sqlite3_os_init(void){ */ SQLITE_API int sqlite3_os_end(void){ unixBigLock = 0; +#if OS_VXWORKS + vxworksMutex = 0; +#endif return SQLITE_OK; } @@ -49794,6 +50456,7 @@ static BOOL winLockFile( #endif } +#ifndef SQLITE_OMIT_WAL /* ** Lock a region of nByte bytes starting at offset offset of file hFile. ** Take an EXCLUSIVE lock if parameter bExclusive is true, or a SHARED lock @@ -49876,6 +50539,7 @@ static int winHandleLockTimeout( } return rc; } +#endif /* #ifndef SQLITE_OMIT_WAL */ /* ** Unlock a file region. @@ -49910,6 +50574,7 @@ static BOOL winUnlockFile( #endif } +#ifndef SQLITE_OMIT_WAL /* ** Remove an nByte lock starting at offset iOff from HANDLE h. */ @@ -49917,6 +50582,7 @@ static int winHandleUnlock(HANDLE h, int iOff, int nByte){ BOOL ret = winUnlockFile(&h, iOff, 0, nByte, 0); return (ret ? SQLITE_OK : SQLITE_IOERR_UNLOCK); } +#endif /***************************************************************************** ** The next group of routines implement the I/O methods specified @@ -50254,6 +50920,7 @@ static int winWrite( return SQLITE_OK; } +#ifndef SQLITE_OMIT_WAL /* ** Truncate the file opened by handle h to nByte bytes in size. */ @@ -50307,6 +50974,7 @@ static void winHandleClose(HANDLE h){ osCloseHandle(h); } } +#endif /* #ifndef SQLITE_OMIT_WAL */ /* ** Truncate an open file to a specified size @@ -51084,6 +51752,28 @@ static int winFileControl(sqlite3_file *id, int op, void *pArg){ } #endif /* SQLITE_ENABLE_SETLK_TIMEOUT */ +#if defined(SQLITE_DEBUG) || defined(SQLITE_ENABLE_FILESTAT) + case SQLITE_FCNTL_FILESTAT: { + sqlite3_str *pStr = (sqlite3_str*)pArg; + sqlite3_str_appendf(pStr, "{\"h\":%llu", (sqlite3_uint64)pFile->h); + sqlite3_str_appendf(pStr, ",\"vfs\":\"%s\"", pFile->pVfs->zName); + if( pFile->locktype ){ + static const char *azLock[] = { "SHARED", "RESERVED", + "PENDING", "EXCLUSIVE" }; + sqlite3_str_appendf(pStr, ",\"locktype\":\"%s\"", + azLock[pFile->locktype-1]); + } +#if SQLITE_MAX_MMAP_SIZE>0 + if( pFile->mmapSize ){ + sqlite3_str_appendf(pStr, ",\"mmapSize\":%lld", pFile->mmapSize); + sqlite3_str_appendf(pStr, ",\"nFetchOut\":%d", pFile->nFetchOut); + } +#endif + sqlite3_str_append(pStr, "}", 1); + return SQLITE_OK; + } +#endif /* SQLITE_DEBUG || SQLITE_ENABLE_FILESTAT */ + } OSTRACE(("FCNTL file=%p, rc=SQLITE_NOTFOUND\n", pFile->h)); return SQLITE_NOTFOUND; @@ -51121,6 +51811,103 @@ static int winDeviceCharacteristics(sqlite3_file *id){ */ static SYSTEM_INFO winSysInfo; +/* +** Convert a UTF-8 filename into whatever form the underlying +** operating system wants filenames in. Space to hold the result +** is obtained from malloc and must be freed by the calling +** function +** +** On Cygwin, 3 possible input forms are accepted: +** - If the filename starts with ":/" or ":\", +** it is converted to UTF-16 as-is. +** - If the filename contains '/', it is assumed to be a +** Cygwin absolute path, it is converted to a win32 +** absolute path in UTF-16. +** - Otherwise it must be a filename only, the win32 filename +** is returned in UTF-16. +** Note: If the function cygwin_conv_path() fails, only +** UTF-8 -> UTF-16 conversion will be done. This can only +** happen when the file path >32k, in which case winUtf8ToUnicode() +** will fail too. +*/ +static void *winConvertFromUtf8Filename(const char *zFilename){ + void *zConverted = 0; + if( osIsNT() ){ +#ifdef __CYGWIN__ + int nChar; + LPWSTR zWideFilename; + + if( osCygwin_conv_path && !(winIsDriveLetterAndColon(zFilename) + && winIsDirSep(zFilename[2])) ){ + i64 nByte; + int convertflag = CCP_POSIX_TO_WIN_W; + if( !strchr(zFilename, '/') ) convertflag |= CCP_RELATIVE; + nByte = (i64)osCygwin_conv_path(convertflag, + zFilename, 0, 0); + if( nByte>0 ){ + zConverted = sqlite3MallocZero(12+(u64)nByte); + if ( zConverted==0 ){ + return zConverted; + } + zWideFilename = zConverted; + /* Filenames should be prefixed, except when converted + * full path already starts with "\\?\". */ + if( osCygwin_conv_path(convertflag, zFilename, + zWideFilename+4, nByte)==0 ){ + if( (convertflag&CCP_RELATIVE) ){ + memmove(zWideFilename, zWideFilename+4, nByte); + }else if( memcmp(zWideFilename+4, L"\\\\", 4) ){ + memcpy(zWideFilename, L"\\\\?\\", 8); + }else if( zWideFilename[6]!='?' ){ + memmove(zWideFilename+6, zWideFilename+4, nByte); + memcpy(zWideFilename, L"\\\\?\\UNC", 14); + }else{ + memmove(zWideFilename, zWideFilename+4, nByte); + } + return zConverted; + } + sqlite3_free(zConverted); + } + } + nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, NULL, 0); + if( nChar==0 ){ + return 0; + } + zWideFilename = sqlite3MallocZero( nChar*sizeof(WCHAR)+12 ); + if( zWideFilename==0 ){ + return 0; + } + nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, + zWideFilename, nChar); + if( nChar==0 ){ + sqlite3_free(zWideFilename); + zWideFilename = 0; + }else if( nChar>MAX_PATH + && winIsDriveLetterAndColon(zFilename) + && winIsDirSep(zFilename[2]) ){ + memmove(zWideFilename+4, zWideFilename, nChar*sizeof(WCHAR)); + zWideFilename[2] = '\\'; + memcpy(zWideFilename, L"\\\\?\\", 8); + }else if( nChar>MAX_PATH + && winIsDirSep(zFilename[0]) && winIsDirSep(zFilename[1]) + && zFilename[2] != '?' ){ + memmove(zWideFilename+6, zWideFilename, nChar*sizeof(WCHAR)); + memcpy(zWideFilename, L"\\\\?\\UNC", 14); + } + zConverted = zWideFilename; +#else + zConverted = winUtf8ToUnicode(zFilename); +#endif /* __CYGWIN__ */ + } +#if defined(SQLITE_WIN32_HAS_ANSI) && defined(_WIN32) + else{ + zConverted = winUtf8ToMbcs(zFilename, osAreFileApisANSI()); + } +#endif + /* caller will handle out of memory */ + return zConverted; +} + #ifndef SQLITE_OMIT_WAL /* @@ -51157,29 +51944,35 @@ static int winShmMutexHeld(void) { ** log-summary is opened only once per process. ** ** winShmMutexHeld() must be true when creating or destroying -** this object or while reading or writing the following fields: +** this object, or while editing the global linked list that starts +** at winShmNodeList. ** -** nRef -** pNext +** When reading or writing the linked list starting at winShmNode.pWinShmList, +** pShmNode->mutex must be held. ** -** The following fields are read-only after the object is created: +** The following fields are constant after the object is created: ** ** zFilename +** hSharedShm +** mutex +** bUseSharedLockHandle ** -** Either winShmNode.mutex must be held or winShmNode.nRef==0 and +** Either winShmNode.mutex must be held or winShmNode.pWinShmList==0 and ** winShmMutexHeld() is true when reading or writing any other field ** in this structure. ** -** File-handle hSharedShm is used to (a) take the DMS lock, (b) truncate -** the *-shm file if the DMS-locking protocol demands it, and (c) map -** regions of the *-shm file into memory using MapViewOfFile() or -** similar. Other locks are taken by individual clients using the -** winShm.hShm handles. +** File-handle hSharedShm is always used to (a) take the DMS lock, (b) +** truncate the *-shm file if the DMS-locking protocol demands it, and +** (c) map regions of the *-shm file into memory using MapViewOfFile() +** or similar. If bUseSharedLockHandle is true, then other locks are also +** taken on hSharedShm. Or, if bUseSharedLockHandle is false, then other +** locks are taken using each connection's winShm.hShm handles. */ struct winShmNode { sqlite3_mutex *mutex; /* Mutex to access this object */ char *zFilename; /* Name of the file */ HANDLE hSharedShm; /* File handle open on zFilename */ + int bUseSharedLockHandle; /* True to use hSharedShm for everything */ int isUnlocked; /* DMS lock has not yet been obtained */ int isReadonly; /* True if read-only */ @@ -51192,7 +51985,8 @@ struct winShmNode { } *aRegion; DWORD lastErrno; /* The Windows errno from the last I/O error */ - int nRef; /* Number of winShm objects pointing to this */ + winShm *pWinShmList; /* List of winShm objects with ptrs to this */ + winShmNode *pNext; /* Next in list of all winShmNode objects */ #if defined(SQLITE_DEBUG) || defined(SQLITE_HAVE_OS_TRACE) u8 nextShmId; /* Next available winShm.id value */ @@ -51220,6 +52014,7 @@ struct winShm { #if defined(SQLITE_DEBUG) || defined(SQLITE_HAVE_OS_TRACE) u8 id; /* Id of this connection with its winShmNode */ #endif + winShm *pWinShmNext; /* Next winShm object on same winShmNode */ }; /* @@ -51233,7 +52028,7 @@ static int winOpen(sqlite3_vfs*,const char*,sqlite3_file*,int,int*); static int winDelete(sqlite3_vfs *,const char*,int); /* -** Purge the winShmNodeList list of all entries with winShmNode.nRef==0. +** Purge the winShmNodeList list of all entries with winShmNode.pWinShmList==0. ** ** This is not a VFS shared-memory method; it is a utility function called ** by VFS shared-memory methods. @@ -51246,7 +52041,7 @@ static void winShmPurge(sqlite3_vfs *pVfs, int deleteFlag){ osGetCurrentProcessId(), deleteFlag)); pp = &winShmNodeList; while( (p = *pp)!=0 ){ - if( p->nRef==0 ){ + if( p->pWinShmList==0 ){ int i; if( p->mutex ){ sqlite3_mutex_free(p->mutex); } for(i=0; inRegion; i++){ @@ -51315,103 +52110,6 @@ static int winLockSharedMemory(winShmNode *pShmNode, DWORD nMs){ } -/* -** Convert a UTF-8 filename into whatever form the underlying -** operating system wants filenames in. Space to hold the result -** is obtained from malloc and must be freed by the calling -** function -** -** On Cygwin, 3 possible input forms are accepted: -** - If the filename starts with ":/" or ":\", -** it is converted to UTF-16 as-is. -** - If the filename contains '/', it is assumed to be a -** Cygwin absolute path, it is converted to a win32 -** absolute path in UTF-16. -** - Otherwise it must be a filename only, the win32 filename -** is returned in UTF-16. -** Note: If the function cygwin_conv_path() fails, only -** UTF-8 -> UTF-16 conversion will be done. This can only -** happen when the file path >32k, in which case winUtf8ToUnicode() -** will fail too. -*/ -static void *winConvertFromUtf8Filename(const char *zFilename){ - void *zConverted = 0; - if( osIsNT() ){ -#ifdef __CYGWIN__ - int nChar; - LPWSTR zWideFilename; - - if( osCygwin_conv_path && !(winIsDriveLetterAndColon(zFilename) - && winIsDirSep(zFilename[2])) ){ - i64 nByte; - int convertflag = CCP_POSIX_TO_WIN_W; - if( !strchr(zFilename, '/') ) convertflag |= CCP_RELATIVE; - nByte = (i64)osCygwin_conv_path(convertflag, - zFilename, 0, 0); - if( nByte>0 ){ - zConverted = sqlite3MallocZero(12+(u64)nByte); - if ( zConverted==0 ){ - return zConverted; - } - zWideFilename = zConverted; - /* Filenames should be prefixed, except when converted - * full path already starts with "\\?\". */ - if( osCygwin_conv_path(convertflag, zFilename, - zWideFilename+4, nByte)==0 ){ - if( (convertflag&CCP_RELATIVE) ){ - memmove(zWideFilename, zWideFilename+4, nByte); - }else if( memcmp(zWideFilename+4, L"\\\\", 4) ){ - memcpy(zWideFilename, L"\\\\?\\", 8); - }else if( zWideFilename[6]!='?' ){ - memmove(zWideFilename+6, zWideFilename+4, nByte); - memcpy(zWideFilename, L"\\\\?\\UNC", 14); - }else{ - memmove(zWideFilename, zWideFilename+4, nByte); - } - return zConverted; - } - sqlite3_free(zConverted); - } - } - nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, NULL, 0); - if( nChar==0 ){ - return 0; - } - zWideFilename = sqlite3MallocZero( nChar*sizeof(WCHAR)+12 ); - if( zWideFilename==0 ){ - return 0; - } - nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, - zWideFilename, nChar); - if( nChar==0 ){ - sqlite3_free(zWideFilename); - zWideFilename = 0; - }else if( nChar>MAX_PATH - && winIsDriveLetterAndColon(zFilename) - && winIsDirSep(zFilename[2]) ){ - memmove(zWideFilename+4, zWideFilename, nChar*sizeof(WCHAR)); - zWideFilename[2] = '\\'; - memcpy(zWideFilename, L"\\\\?\\", 8); - }else if( nChar>MAX_PATH - && winIsDirSep(zFilename[0]) && winIsDirSep(zFilename[1]) - && zFilename[2] != '?' ){ - memmove(zWideFilename+6, zWideFilename, nChar*sizeof(WCHAR)); - memcpy(zWideFilename, L"\\\\?\\UNC", 14); - } - zConverted = zWideFilename; -#else - zConverted = winUtf8ToUnicode(zFilename); -#endif /* __CYGWIN__ */ - } -#if defined(SQLITE_WIN32_HAS_ANSI) && defined(_WIN32) - else{ - zConverted = winUtf8ToMbcs(zFilename, osAreFileApisANSI()); - } -#endif - /* caller will handle out of memory */ - return zConverted; -} - /* ** This function is used to open a handle on a *-shm file. ** @@ -51507,6 +52205,60 @@ static int winHandleOpen( return rc; } +/* +** Close pDbFd's connection to shared-memory. Delete the underlying +** *-shm file if deleteFlag is true. +*/ +static int winCloseSharedMemory(winFile *pDbFd, int deleteFlag){ + winShm *p; /* The connection to be closed */ + winShm **pp; /* Iterator for pShmNode->pWinShmList */ + winShmNode *pShmNode; /* The underlying shared-memory file */ + + p = pDbFd->pShm; + if( p==0 ) return SQLITE_OK; + if( p->hShm!=INVALID_HANDLE_VALUE ){ + osCloseHandle(p->hShm); + } + + winShmEnterMutex(); + pShmNode = p->pShmNode; + + /* Remove this connection from the winShmNode.pWinShmList list */ + sqlite3_mutex_enter(pShmNode->mutex); + for(pp=&pShmNode->pWinShmList; *pp!=p; pp=&(*pp)->pWinShmNext){} + *pp = p->pWinShmNext; + sqlite3_mutex_leave(pShmNode->mutex); + + winShmPurge(pDbFd->pVfs, deleteFlag); + winShmLeaveMutex(); + + /* Free the connection p */ + sqlite3_free(p); + pDbFd->pShm = 0; + return SQLITE_OK; +} + +/* +** testfixture builds may set this global variable to true via a +** Tcl interface. This forces the VFS to use the locking normally +** only used for UNC paths for all files. +*/ +#ifdef SQLITE_TEST +SQLITE_API int sqlite3_win_test_unc_locking = 0; +#else +# define sqlite3_win_test_unc_locking 0 +#endif + +/* +** Return true if the string passed as the only argument is likely +** to be a UNC path. In other words, if it starts with "\\". +*/ +static int winIsUNCPath(const char *zFile){ + if( zFile[0]=='\\' && zFile[1]=='\\' ){ + return 1; + } + return sqlite3_win_test_unc_locking; +} /* ** Open the shared-memory area associated with database file pDbFd. @@ -51533,15 +52285,10 @@ static int winOpenSharedMemory(winFile *pDbFd){ pNew->zFilename = (char*)&pNew[1]; pNew->hSharedShm = INVALID_HANDLE_VALUE; pNew->isUnlocked = 1; + pNew->bUseSharedLockHandle = winIsUNCPath(pDbFd->zPath); sqlite3_snprintf(nName+15, pNew->zFilename, "%s-shm", pDbFd->zPath); sqlite3FileSuffix3(pDbFd->zPath, pNew->zFilename); - /* Open a file-handle on the *-shm file for this connection. This file-handle - ** is only used for locking. The mapping of the *-shm file is created using - ** the shared file handle in winShmNode.hSharedShm. */ - p->bReadonly = sqlite3_uri_boolean(pDbFd->zPath, "readonly_shm", 0); - rc = winHandleOpen(pNew->zFilename, &p->bReadonly, &p->hShm); - /* Look to see if there is an existing winShmNode that can be used. ** If no matching winShmNode currently exists, then create a new one. */ winShmEnterMutex(); @@ -51562,7 +52309,7 @@ static int winOpenSharedMemory(winFile *pDbFd){ /* Open a file-handle to use for mappings, and for the DMS lock. */ if( rc==SQLITE_OK ){ HANDLE h = INVALID_HANDLE_VALUE; - pShmNode->isReadonly = p->bReadonly; + pShmNode->isReadonly = sqlite3_uri_boolean(pDbFd->zPath,"readonly_shm",0); rc = winHandleOpen(pNew->zFilename, &pShmNode->isReadonly, &h); pShmNode->hSharedShm = h; } @@ -51584,20 +52331,35 @@ static int winOpenSharedMemory(winFile *pDbFd){ /* If no error has occurred, link the winShm object to the winShmNode and ** the winShm to pDbFd. */ if( rc==SQLITE_OK ){ + sqlite3_mutex_enter(pShmNode->mutex); p->pShmNode = pShmNode; - pShmNode->nRef++; + p->pWinShmNext = pShmNode->pWinShmList; + pShmNode->pWinShmList = p; #if defined(SQLITE_DEBUG) || defined(SQLITE_HAVE_OS_TRACE) p->id = pShmNode->nextShmId++; #endif pDbFd->pShm = p; + sqlite3_mutex_leave(pShmNode->mutex); }else if( p ){ - winHandleClose(p->hShm); sqlite3_free(p); } assert( rc!=SQLITE_OK || pShmNode->isUnlocked==0 || pShmNode->nRegion==0 ); winShmLeaveMutex(); sqlite3_free(pNew); + + /* Open a file-handle on the *-shm file for this connection. This file-handle + ** is only used for locking. The mapping of the *-shm file is created using + ** the shared file handle in winShmNode.hSharedShm. */ + if( rc==SQLITE_OK && pShmNode->bUseSharedLockHandle==0 ){ + p->bReadonly = sqlite3_uri_boolean(pDbFd->zPath, "readonly_shm", 0); + rc = winHandleOpen(pShmNode->zFilename, &p->bReadonly, &p->hShm); + if( rc!=SQLITE_OK ){ + assert( p->hShm==INVALID_HANDLE_VALUE ); + winCloseSharedMemory(pDbFd, 0); + } + } + return rc; } @@ -51609,33 +52371,7 @@ static int winShmUnmap( sqlite3_file *fd, /* Database holding shared memory */ int deleteFlag /* Delete after closing if true */ ){ - winFile *pDbFd; /* Database holding shared-memory */ - winShm *p; /* The connection to be closed */ - winShmNode *pShmNode; /* The underlying shared-memory file */ - - pDbFd = (winFile*)fd; - p = pDbFd->pShm; - if( p==0 ) return SQLITE_OK; - if( p->hShm!=INVALID_HANDLE_VALUE ){ - osCloseHandle(p->hShm); - } - - pShmNode = p->pShmNode; - winShmEnterMutex(); - - /* If pShmNode->nRef has reached 0, then close the underlying - ** shared-memory file, too. */ - assert( pShmNode->nRef>0 ); - pShmNode->nRef--; - if( pShmNode->nRef==0 ){ - winShmPurge(pDbFd->pVfs, deleteFlag); - } - winShmLeaveMutex(); - - /* Free the connection p */ - sqlite3_free(p); - pDbFd->pShm = 0; - return SQLITE_OK; + return winCloseSharedMemory((winFile*)fd, deleteFlag); } /* @@ -51704,6 +52440,7 @@ static int winShmLock( || (flags==(SQLITE_SHM_SHARED|SQLITE_SHM_LOCK) && 0==(p->sharedMask & mask)) || (flags==(SQLITE_SHM_EXCLUSIVE|SQLITE_SHM_LOCK)) ){ + HANDLE h = p->hShm; if( flags & SQLITE_SHM_UNLOCK ){ /* Case (a) - unlock. */ @@ -51712,7 +52449,27 @@ static int winShmLock( assert( !(flags & SQLITE_SHM_EXCLUSIVE) || (p->exclMask & mask)==mask ); assert( !(flags & SQLITE_SHM_SHARED) || (p->sharedMask & mask)==mask ); - rc = winHandleUnlock(p->hShm, ofst+WIN_SHM_BASE, n); + assert( !(flags & SQLITE_SHM_SHARED) || n==1 ); + if( pShmNode->bUseSharedLockHandle ){ + h = pShmNode->hSharedShm; + if( flags & SQLITE_SHM_SHARED ){ + winShm *pShm; + sqlite3_mutex_enter(pShmNode->mutex); + for(pShm=pShmNode->pWinShmList; pShm; pShm=pShm->pWinShmNext){ + if( pShm!=p && (pShm->sharedMask & mask) ){ + /* Another connection within this process is also holding this + ** SHARED lock. So do not actually release the OS lock. */ + h = INVALID_HANDLE_VALUE; + break; + } + } + sqlite3_mutex_leave(pShmNode->mutex); + } + } + + if( h!=INVALID_HANDLE_VALUE ){ + rc = winHandleUnlock(h, ofst+WIN_SHM_BASE, n); + } /* If successful, also clear the bits in sharedMask/exclMask */ if( rc==SQLITE_OK ){ @@ -51722,7 +52479,32 @@ static int winShmLock( }else{ int bExcl = ((flags & SQLITE_SHM_EXCLUSIVE) ? 1 : 0); DWORD nMs = winFileBusyTimeout(pDbFd); - rc = winHandleLockTimeout(p->hShm, ofst+WIN_SHM_BASE, n, bExcl, nMs); + + if( pShmNode->bUseSharedLockHandle ){ + winShm *pShm; + h = pShmNode->hSharedShm; + sqlite3_mutex_enter(pShmNode->mutex); + for(pShm=pShmNode->pWinShmList; pShm; pShm=pShm->pWinShmNext){ + if( bExcl ){ + if( (pShm->sharedMask|pShm->exclMask) & mask ){ + rc = SQLITE_BUSY; + h = INVALID_HANDLE_VALUE; + } + }else{ + if( pShm->sharedMask & mask ){ + h = INVALID_HANDLE_VALUE; + }else if( pShm->exclMask & mask ){ + rc = SQLITE_BUSY; + h = INVALID_HANDLE_VALUE; + } + } + } + sqlite3_mutex_leave(pShmNode->mutex); + } + + if( h!=INVALID_HANDLE_VALUE ){ + rc = winHandleLockTimeout(h, ofst+WIN_SHM_BASE, n, bExcl, nMs); + } if( rc==SQLITE_OK ){ if( bExcl ){ p->exclMask = (p->exclMask | mask); @@ -54861,6 +55643,7 @@ struct Bitvec { } u; }; + /* ** Create a new bitmap object able to handle bits between 0 and iSize, ** inclusive. Return a pointer to the new object. Return NULL if @@ -55049,6 +55832,52 @@ SQLITE_PRIVATE u32 sqlite3BitvecSize(Bitvec *p){ return p->iSize; } +#ifdef SQLITE_DEBUG +/* +** Show the content of a Bitvec option and its children. Indent +** everything by n spaces. Add x to each bitvec value. +** +** From a debugger such as gdb, one can type: +** +** call sqlite3ShowBitvec(p) +** +** For some Bitvec p and see a recursive view of the Bitvec's content. +*/ +static void showBitvec(Bitvec *p, int n, unsigned x){ + int i; + if( p==0 ){ + printf("NULL\n"); + return; + } + printf("Bitvec 0x%p iSize=%u", p, p->iSize); + if( p->iSize<=BITVEC_NBIT ){ + printf(" bitmap\n"); + printf("%*s bits:", n, ""); + for(i=1; i<=BITVEC_NBIT; i++){ + if( sqlite3BitvecTest(p,i) ) printf(" %u", x+(unsigned)i); + } + printf("\n"); + }else if( p->iDivisor==0 ){ + printf(" hash with %u entries\n", p->nSet); + printf("%*s bits:", n, ""); + for(i=0; iu.aHash[i] ) printf(" %u", x+(unsigned)p->u.aHash[i]); + } + printf("\n"); + }else{ + printf(" sub-bitvec with iDivisor=%u\n", p->iDivisor); + for(i=0; iu.apSub[i]==0 ) continue; + printf("%*s apSub[%d]=", n, "", i); + showBitvec(p->u.apSub[i], n+4, i*p->iDivisor); + } + } +} +SQLITE_PRIVATE void sqlite3ShowBitvec(Bitvec *p){ + showBitvec(p, 0, 0); +} +#endif + #ifndef SQLITE_UNTESTABLE /* ** Let V[] be an array of unsigned characters sufficient to hold @@ -55060,6 +55889,7 @@ SQLITE_PRIVATE u32 sqlite3BitvecSize(Bitvec *p){ #define CLEARBIT(V,I) V[I>>3] &= ~(BITVEC_TELEM)(1<<(I&7)) #define TESTBIT(V,I) (V[I>>3]&(1<<(I&7)))!=0 + /* ** This routine runs an extensive test of the Bitvec code. ** @@ -55068,7 +55898,7 @@ SQLITE_PRIVATE u32 sqlite3BitvecSize(Bitvec *p){ ** by 0, 1, or 3 operands, depending on the opcode. Another ** opcode follows immediately after the last operand. ** -** There are 6 opcodes numbered from 0 through 5. 0 is the +** There are opcodes numbered starting with 0. 0 is the ** "halt" opcode and causes the test to end. ** ** 0 Halt and return the number of errors @@ -55077,18 +55907,25 @@ SQLITE_PRIVATE u32 sqlite3BitvecSize(Bitvec *p){ ** 3 N Set N randomly chosen bits ** 4 N Clear N randomly chosen bits ** 5 N S X Set N bits from S increment X in array only, not in bitvec +** 6 Invoice sqlite3ShowBitvec() on the Bitvec object so far +** 7 X Show compile-time parameters and the hash of X ** ** The opcodes 1 through 4 perform set and clear operations are performed ** on both a Bitvec object and on a linear array of bits obtained from malloc. ** Opcode 5 works on the linear array only, not on the Bitvec. ** Opcode 5 is used to deliberately induce a fault in order to -** confirm that error detection works. +** confirm that error detection works. Opcodes 6 and greater are +** state output opcodes. Opcodes 6 and greater are no-ops unless +** SQLite has been compiled with SQLITE_DEBUG. ** ** At the conclusion of the test the linear array is compared ** against the Bitvec object. If there are any differences, ** an error is returned. If they are the same, zero is returned. ** ** If a memory allocation error occurs, return -1. +** +** sz is the size of the Bitvec. Or if sz is negative, make the size +** 2*(unsigned)(-sz) and disabled the linear vector check. */ SQLITE_PRIVATE int sqlite3BitvecBuiltinTest(int sz, int *aOp){ Bitvec *pBitvec = 0; @@ -55099,10 +55936,15 @@ SQLITE_PRIVATE int sqlite3BitvecBuiltinTest(int sz, int *aOp){ /* Allocate the Bitvec to be tested and a linear array of ** bits to act as the reference */ - pBitvec = sqlite3BitvecCreate( sz ); - pV = sqlite3MallocZero( (7+(i64)sz)/8 + 1 ); + if( sz<=0 ){ + pBitvec = sqlite3BitvecCreate( 2*(unsigned)(-sz) ); + pV = 0; + }else{ + pBitvec = sqlite3BitvecCreate( sz ); + pV = sqlite3MallocZero( (7+(i64)sz)/8 + 1 ); + } pTmpSpace = sqlite3_malloc64(BITVEC_SZ); - if( pBitvec==0 || pV==0 || pTmpSpace==0 ) goto bitvec_end; + if( pBitvec==0 || pTmpSpace==0 || (pV==0 && sz>0) ) goto bitvec_end; /* NULL pBitvec tests */ sqlite3BitvecSet(0, 1); @@ -55111,6 +55953,24 @@ SQLITE_PRIVATE int sqlite3BitvecBuiltinTest(int sz, int *aOp){ /* Run the program */ pc = i = 0; while( (op = aOp[pc])!=0 ){ + if( op>=6 ){ +#ifdef SQLITE_DEBUG + if( op==6 ){ + sqlite3ShowBitvec(pBitvec); + }else if( op==7 ){ + printf("BITVEC_SZ = %d (%d by sizeof)\n", + BITVEC_SZ, (int)sizeof(Bitvec)); + printf("BITVEC_USIZE = %d\n", (int)BITVEC_USIZE); + printf("BITVEC_NELEM = %d\n", (int)BITVEC_NELEM); + printf("BITVEC_NBIT = %d\n", (int)BITVEC_NBIT); + printf("BITVEC_NINT = %d\n", (int)BITVEC_NINT); + printf("BITVEC_MXHASH = %d\n", (int)BITVEC_MXHASH); + printf("BITVEC_NPTR = %d\n", (int)BITVEC_NPTR); + } +#endif + pc++; + continue; + } switch( op ){ case 1: case 2: @@ -55132,12 +55992,12 @@ SQLITE_PRIVATE int sqlite3BitvecBuiltinTest(int sz, int *aOp){ pc += nx; i = (i & 0x7fffffff)%sz; if( (op & 1)!=0 ){ - SETBIT(pV, (i+1)); + if( pV ) SETBIT(pV, (i+1)); if( op!=5 ){ if( sqlite3BitvecSet(pBitvec, i+1) ) goto bitvec_end; } }else{ - CLEARBIT(pV, (i+1)); + if( pV ) CLEARBIT(pV, (i+1)); sqlite3BitvecClear(pBitvec, i+1, pTmpSpace); } } @@ -55147,14 +56007,18 @@ SQLITE_PRIVATE int sqlite3BitvecBuiltinTest(int sz, int *aOp){ ** match (rc==0). Change rc to non-zero if a discrepancy ** is found. */ - rc = sqlite3BitvecTest(0,0) + sqlite3BitvecTest(pBitvec, sz+1) - + sqlite3BitvecTest(pBitvec, 0) - + (sqlite3BitvecSize(pBitvec) - sz); - for(i=1; i<=sz; i++){ - if( (TESTBIT(pV,i))!=sqlite3BitvecTest(pBitvec,i) ){ - rc = i; - break; + if( pV ){ + rc = sqlite3BitvecTest(0,0) + sqlite3BitvecTest(pBitvec, sz+1) + + sqlite3BitvecTest(pBitvec, 0) + + (sqlite3BitvecSize(pBitvec) - sz); + for(i=1; i<=sz; i++){ + if( (TESTBIT(pV,i))!=sqlite3BitvecTest(pBitvec,i) ){ + rc = i; + break; + } } + }else{ + rc = 0; } /* Free allocated structure */ @@ -59915,7 +60779,7 @@ static void pager_unlock(Pager *pPager){ ** have sqlite3WalEndReadTransaction() drop the write-lock, as it once ** did, because this would break "BEGIN EXCLUSIVE" handling for ** SQLITE_ENABLE_SETLK_TIMEOUT builds. */ - sqlite3WalEndWriteTransaction(pPager->pWal); + (void)sqlite3WalEndWriteTransaction(pPager->pWal); } sqlite3WalEndReadTransaction(pPager->pWal); pPager->eState = PAGER_OPEN; @@ -61671,14 +62535,27 @@ SQLITE_PRIVATE void sqlite3PagerSetFlags( unsigned pgFlags /* Various flags */ ){ unsigned level = pgFlags & PAGER_SYNCHRONOUS_MASK; - if( pPager->tempFile ){ + if( pPager->tempFile || level==PAGER_SYNCHRONOUS_OFF ){ pPager->noSync = 1; pPager->fullSync = 0; pPager->extraSync = 0; }else{ - pPager->noSync = level==PAGER_SYNCHRONOUS_OFF ?1:0; + pPager->noSync = 0; pPager->fullSync = level>=PAGER_SYNCHRONOUS_FULL ?1:0; - pPager->extraSync = level==PAGER_SYNCHRONOUS_EXTRA ?1:0; + + /* Set Pager.extraSync if "PRAGMA synchronous=EXTRA" is requested, or + ** if the file-system supports F2FS style atomic writes. If this flag + ** is set, SQLite syncs the directory to disk immediately after deleting + ** a journal file in "PRAGMA journal_mode=DELETE" mode. */ + if( level==PAGER_SYNCHRONOUS_EXTRA +#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE + || (sqlite3OsDeviceCharacteristics(pPager->fd) & SQLITE_IOCAP_BATCH_ATOMIC) +#endif + ){ + pPager->extraSync = 1; + }else{ + pPager->extraSync = 0; + } } if( pPager->noSync ){ pPager->syncFlags = 0; @@ -65571,7 +66448,7 @@ SQLITE_PRIVATE int sqlite3PagerCheckpoint( } if( pPager->pWal ){ rc = sqlite3WalCheckpoint(pPager->pWal, db, eMode, - (eMode==SQLITE_CHECKPOINT_PASSIVE ? 0 : pPager->xBusyHandler), + (eMode<=SQLITE_CHECKPOINT_PASSIVE ? 0 : pPager->xBusyHandler), pPager->pBusyHandlerArg, pPager->walSyncFlags, pPager->pageSize, (u8 *)pPager->pTmpSpace, pnLog, pnCkpt @@ -66481,7 +67358,7 @@ struct WalIterator { /* Size (in bytes) of a WalIterator object suitable for N or fewer segments */ #define SZ_WALITERATOR(N) \ - (offsetof(WalIterator,aSegment)*(N)*sizeof(struct WalSegment)) + (offsetof(WalIterator,aSegment)+(N)*sizeof(struct WalSegment)) /* ** Define the parameters of the hash tables in the wal-index file. There @@ -69367,7 +70244,7 @@ SQLITE_PRIVATE void sqlite3WalEndReadTransaction(Wal *pWal){ assert( pWal->writeLock==0 || pWal->readLock<0 ); #endif if( pWal->readLock>=0 ){ - sqlite3WalEndWriteTransaction(pWal); + (void)sqlite3WalEndWriteTransaction(pWal); walUnlockShared(pWal, WAL_READ_LOCK(pWal->readLock)); pWal->readLock = -1; } @@ -70176,7 +71053,8 @@ SQLITE_PRIVATE int sqlite3WalCheckpoint( /* EVIDENCE-OF: R-62920-47450 The busy-handler callback is never invoked ** in the SQLITE_CHECKPOINT_PASSIVE mode. */ - assert( eMode!=SQLITE_CHECKPOINT_PASSIVE || xBusy==0 ); + assert( SQLITE_CHECKPOINT_NOOPSQLITE_CHECKPOINT_PASSIVE || xBusy==0 ); if( pWal->readOnly ) return SQLITE_READONLY; WALTRACE(("WAL%p: checkpoint begins\n", pWal)); @@ -70193,31 +71071,35 @@ SQLITE_PRIVATE int sqlite3WalCheckpoint( ** EVIDENCE-OF: R-53820-33897 Even if there is a busy-handler configured, ** it will not be invoked in this case. */ - rc = walLockExclusive(pWal, WAL_CKPT_LOCK, 1); - testcase( rc==SQLITE_BUSY ); - testcase( rc!=SQLITE_OK && xBusy2!=0 ); - if( rc==SQLITE_OK ){ - pWal->ckptLock = 1; + if( eMode!=SQLITE_CHECKPOINT_NOOP ){ + rc = walLockExclusive(pWal, WAL_CKPT_LOCK, 1); + testcase( rc==SQLITE_BUSY ); + testcase( rc!=SQLITE_OK && xBusy2!=0 ); + if( rc==SQLITE_OK ){ + pWal->ckptLock = 1; - /* IMPLEMENTATION-OF: R-59782-36818 The SQLITE_CHECKPOINT_FULL, RESTART and - ** TRUNCATE modes also obtain the exclusive "writer" lock on the database - ** file. - ** - ** EVIDENCE-OF: R-60642-04082 If the writer lock cannot be obtained - ** immediately, and a busy-handler is configured, it is invoked and the - ** writer lock retried until either the busy-handler returns 0 or the - ** lock is successfully obtained. - */ - if( eMode!=SQLITE_CHECKPOINT_PASSIVE ){ - rc = walBusyLock(pWal, xBusy2, pBusyArg, WAL_WRITE_LOCK, 1); - if( rc==SQLITE_OK ){ - pWal->writeLock = 1; - }else if( rc==SQLITE_BUSY ){ - eMode2 = SQLITE_CHECKPOINT_PASSIVE; - xBusy2 = 0; - rc = SQLITE_OK; + /* IMPLEMENTATION-OF: R-59782-36818 The SQLITE_CHECKPOINT_FULL, RESTART + ** and TRUNCATE modes also obtain the exclusive "writer" lock on the + ** database file. + ** + ** EVIDENCE-OF: R-60642-04082 If the writer lock cannot be obtained + ** immediately, and a busy-handler is configured, it is invoked and the + ** writer lock retried until either the busy-handler returns 0 or the + ** lock is successfully obtained. + */ + if( eMode!=SQLITE_CHECKPOINT_PASSIVE ){ + rc = walBusyLock(pWal, xBusy2, pBusyArg, WAL_WRITE_LOCK, 1); + if( rc==SQLITE_OK ){ + pWal->writeLock = 1; + }else if( rc==SQLITE_BUSY ){ + eMode2 = SQLITE_CHECKPOINT_PASSIVE; + xBusy2 = 0; + rc = SQLITE_OK; + } } } + }else{ + rc = SQLITE_OK; } @@ -70231,7 +71113,7 @@ SQLITE_PRIVATE int sqlite3WalCheckpoint( ** immediately and do a partial checkpoint if it cannot obtain it. */ walDisableBlocking(pWal); rc = walIndexReadHdr(pWal, &isChanged); - if( eMode2!=SQLITE_CHECKPOINT_PASSIVE ) (void)walEnableBlocking(pWal); + if( eMode2>SQLITE_CHECKPOINT_PASSIVE ) (void)walEnableBlocking(pWal); if( isChanged && pWal->pDbFd->pMethods->iVersion>=3 ){ sqlite3OsUnfetch(pWal->pDbFd, 0, 0); } @@ -70241,7 +71123,7 @@ SQLITE_PRIVATE int sqlite3WalCheckpoint( if( rc==SQLITE_OK ){ if( pWal->hdr.mxFrame && walPagesize(pWal)!=nBuf ){ rc = SQLITE_CORRUPT_BKPT; - }else{ + }else if( eMode2!=SQLITE_CHECKPOINT_NOOP ){ rc = walCheckpoint(pWal, db, eMode2, xBusy2, pBusyArg, sync_flags,zBuf); } @@ -70269,7 +71151,7 @@ SQLITE_PRIVATE int sqlite3WalCheckpoint( sqlite3WalDb(pWal, 0); /* Release the locks. */ - sqlite3WalEndWriteTransaction(pWal); + (void)sqlite3WalEndWriteTransaction(pWal); if( pWal->ckptLock ){ walUnlockExclusive(pWal, WAL_CKPT_LOCK, 1); pWal->ckptLock = 0; @@ -72426,7 +73308,7 @@ static int btreeMoveto( assert( nKey==(i64)(int)nKey ); pIdxKey = sqlite3VdbeAllocUnpackedRecord(pKeyInfo); if( pIdxKey==0 ) return SQLITE_NOMEM_BKPT; - sqlite3VdbeRecordUnpack(pKeyInfo, (int)nKey, pKey, pIdxKey); + sqlite3VdbeRecordUnpack((int)nKey, pKey, pIdxKey); if( pIdxKey->nField==0 || pIdxKey->nField>pKeyInfo->nAllField ){ rc = SQLITE_CORRUPT_BKPT; }else{ @@ -73483,10 +74365,10 @@ static int freeSpace(MemPage *pPage, int iStart, int iSize){ assert( pPage->pBt!=0 ); assert( sqlite3PagerIswriteable(pPage->pDbPage) ); assert( CORRUPT_DB || iStart>=pPage->hdrOffset+6+pPage->childPtrSize ); - assert( CORRUPT_DB || iEnd <= pPage->pBt->usableSize ); + assert( CORRUPT_DB || iEnd <= (int)pPage->pBt->usableSize ); assert( sqlite3_mutex_held(pPage->pBt->mutex) ); assert( iSize>=4 ); /* Minimum cell size is 4 */ - assert( CORRUPT_DB || iStart<=pPage->pBt->usableSize-4 ); + assert( CORRUPT_DB || iStart<=(int)pPage->pBt->usableSize-4 ); /* The list of freeblocks must be in ascending order. Find the ** spot on the list where iStart should be inserted. @@ -74410,6 +75292,7 @@ static int removeFromSharingList(BtShared *pBt){ sqlite3_mutex_leave(pMainMtx); return removed; #else + UNUSED_PARAMETER( pBt ); return 1; #endif } @@ -74627,6 +75510,10 @@ SQLITE_PRIVATE int sqlite3BtreeSetPageSize(Btree *p, int pageSize, int nReserve, sqlite3BtreeEnter(p); pBt->nReserveWanted = (u8)nReserve; x = pBt->pageSize - pBt->usableSize; + if( x==nReserve && (pageSize==0 || (u32)pageSize==pBt->pageSize) ){ + sqlite3BtreeLeave(p); + return SQLITE_OK; + } if( nReservebtsFlags & BTS_PAGESIZE_FIXED ){ sqlite3BtreeLeave(p); @@ -77216,6 +78103,30 @@ SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor *pCur, int *pRes){ return rc; } +/* Set *pRes to 1 (true) if the BTree pointed to by cursor pCur contains zero +** rows of content. Set *pRes to 0 (false) if the table contains content. +** Return SQLITE_OK on success or some error code (ex: SQLITE_NOMEM) if +** something goes wrong. +*/ +SQLITE_PRIVATE int sqlite3BtreeIsEmpty(BtCursor *pCur, int *pRes){ + int rc; + + assert( cursorOwnsBtShared(pCur) ); + assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); + if( pCur->eState==CURSOR_VALID ){ + *pRes = 0; + return SQLITE_OK; + } + rc = moveToRoot(pCur); + if( rc==SQLITE_EMPTY ){ + *pRes = 1; + rc = SQLITE_OK; + }else{ + *pRes = 0; + } + return rc; +} + #ifdef SQLITE_DEBUG /* The cursors is CURSOR_VALID and has BTCF_AtLast set. Verify that ** this flags are true for a consistent database. @@ -77435,8 +78346,8 @@ SQLITE_PRIVATE int sqlite3BtreeTableMoveto( } /* -** Compare the "idx"-th cell on the page the cursor pCur is currently -** pointing to to pIdxKey using xRecordCompare. Return negative or +** Compare the "idx"-th cell on the page pPage against the key +** pointing to by pIdxKey using xRecordCompare. Return negative or ** zero if the cell is less than or equal pIdxKey. Return positive ** if unknown. ** @@ -77451,12 +78362,11 @@ SQLITE_PRIVATE int sqlite3BtreeTableMoveto( ** a positive value as that will cause the optimization to be skipped. */ static int indexCellCompare( - BtCursor *pCur, + MemPage *pPage, int idx, UnpackedRecord *pIdxKey, RecordCompare xRecordCompare ){ - MemPage *pPage = pCur->pPage; int c; int nCell; /* Size of the pCell cell in bytes */ u8 *pCell = findCellPastPtr(pPage, idx); @@ -77565,14 +78475,14 @@ SQLITE_PRIVATE int sqlite3BtreeIndexMoveto( ){ int c; if( pCur->ix==pCur->pPage->nCell-1 - && (c = indexCellCompare(pCur, pCur->ix, pIdxKey, xRecordCompare))<=0 + && (c = indexCellCompare(pCur->pPage,pCur->ix,pIdxKey,xRecordCompare))<=0 && pIdxKey->errCode==SQLITE_OK ){ *pRes = c; return SQLITE_OK; /* Cursor already pointing at the correct spot */ } if( pCur->iPage>0 - && indexCellCompare(pCur, 0, pIdxKey, xRecordCompare)<=0 + && indexCellCompare(pCur->pPage, 0, pIdxKey, xRecordCompare)<=0 && pIdxKey->errCode==SQLITE_OK ){ pCur->curFlags &= ~(BTCF_ValidOvfl|BTCF_AtLast); @@ -77789,7 +78699,7 @@ SQLITE_PRIVATE i64 sqlite3BtreeRowCountEst(BtCursor *pCur){ n = pCur->pPage->nCell; for(i=0; iiPage; i++){ - n *= pCur->apPage[i]->nCell; + n *= pCur->apPage[i]->nCell+1; } return n; } @@ -80246,7 +81156,12 @@ static int balance_nonroot( ** of the right-most new sibling page is set to the value that was ** originally in the same field of the right-most old sibling page. */ if( (pageFlags & PTF_LEAF)==0 && nOld!=nNew ){ - MemPage *pOld = (nNew>nOld ? apNew : apOld)[nOld-1]; + MemPage *pOld; + if( nNew>nOld ){ + pOld = apNew[nOld-1]; + }else{ + pOld = apOld[nOld-1]; + } memcpy(&apNew[nNew-1]->aData[8], &pOld->aData[8], 4); } @@ -82878,6 +83793,7 @@ SQLITE_PRIVATE void *sqlite3BtreeSchema(Btree *p, int nBytes, void(*xFree)(void */ SQLITE_PRIVATE int sqlite3BtreeSchemaLocked(Btree *p){ int rc; + UNUSED_PARAMETER(p); /* only used in DEBUG builds */ assert( sqlite3_mutex_held(p->db->mutex) ); sqlite3BtreeEnter(p); rc = querySharedCacheTableLock(p, SCHEMA_ROOT, READ_LOCK); @@ -85063,6 +85979,7 @@ SQLITE_PRIVATE int sqlite3VdbeMemSetStr( if( sqlite3VdbeMemClearAndResize(pMem, (int)MAX(nAlloc,32)) ){ return SQLITE_NOMEM_BKPT; } + assert( pMem->z!=0 ); memcpy(pMem->z, z, nAlloc); }else{ sqlite3VdbeMemRelease(pMem); @@ -88890,10 +89807,12 @@ static int vdbeCommit(sqlite3 *db, Vdbe *p){ if( 0==sqlite3Strlen30(sqlite3BtreeGetFilename(db->aDb[0].pBt)) || nTrans<=1 ){ - for(i=0; rc==SQLITE_OK && inDb; i++){ - Btree *pBt = db->aDb[i].pBt; - if( pBt ){ - rc = sqlite3BtreeCommitPhaseOne(pBt, 0); + if( needXcommit ){ + for(i=0; rc==SQLITE_OK && inDb; i++){ + Btree *pBt = db->aDb[i].pBt; + if( sqlite3BtreeTxnState(pBt)>=SQLITE_TXN_WRITE ){ + rc = sqlite3BtreeCommitPhaseOne(pBt, 0); + } } } @@ -88904,7 +89823,9 @@ static int vdbeCommit(sqlite3 *db, Vdbe *p){ */ for(i=0; rc==SQLITE_OK && inDb; i++){ Btree *pBt = db->aDb[i].pBt; - if( pBt ){ + int txn = sqlite3BtreeTxnState(pBt); + if( txn!=SQLITE_TXN_NONE ){ + assert( needXcommit || txn==SQLITE_TXN_READ ); rc = sqlite3BtreeCommitPhaseTwo(pBt, 0); } } @@ -89159,28 +90080,31 @@ SQLITE_PRIVATE int sqlite3VdbeCloseStatement(Vdbe *p, int eOp){ /* -** This function is called when a transaction opened by the database +** These functions are called when a transaction opened by the database ** handle associated with the VM passed as an argument is about to be -** committed. If there are outstanding deferred foreign key constraint -** violations, return SQLITE_ERROR. Otherwise, SQLITE_OK. +** committed. If there are outstanding foreign key constraint violations +** return an error code. Otherwise, SQLITE_OK. ** ** If there are outstanding FK violations and this function returns -** SQLITE_ERROR, set the result of the VM to SQLITE_CONSTRAINT_FOREIGNKEY -** and write an error message to it. Then return SQLITE_ERROR. +** non-zero, set the result of the VM to SQLITE_CONSTRAINT_FOREIGNKEY +** and write an error message to it. */ #ifndef SQLITE_OMIT_FOREIGN_KEY -SQLITE_PRIVATE int sqlite3VdbeCheckFk(Vdbe *p, int deferred){ +static SQLITE_NOINLINE int vdbeFkError(Vdbe *p){ + p->rc = SQLITE_CONSTRAINT_FOREIGNKEY; + p->errorAction = OE_Abort; + sqlite3VdbeError(p, "FOREIGN KEY constraint failed"); + if( (p->prepFlags & SQLITE_PREPARE_SAVESQL)==0 ) return SQLITE_ERROR; + return SQLITE_CONSTRAINT_FOREIGNKEY; +} +SQLITE_PRIVATE int sqlite3VdbeCheckFkImmediate(Vdbe *p){ + if( p->nFkConstraint==0 ) return SQLITE_OK; + return vdbeFkError(p); +} +SQLITE_PRIVATE int sqlite3VdbeCheckFkDeferred(Vdbe *p){ sqlite3 *db = p->db; - if( (deferred && (db->nDeferredCons+db->nDeferredImmCons)>0) - || (!deferred && p->nFkConstraint>0) - ){ - p->rc = SQLITE_CONSTRAINT_FOREIGNKEY; - p->errorAction = OE_Abort; - sqlite3VdbeError(p, "FOREIGN KEY constraint failed"); - if( (p->prepFlags & SQLITE_PREPARE_SAVESQL)==0 ) return SQLITE_ERROR; - return SQLITE_CONSTRAINT_FOREIGNKEY; - } - return SQLITE_OK; + if( (db->nDeferredCons+db->nDeferredImmCons)==0 ) return SQLITE_OK; + return vdbeFkError(p); } #endif @@ -89274,7 +90198,7 @@ SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){ /* Check for immediate foreign key violations. */ if( p->rc==SQLITE_OK || (p->errorAction==OE_Fail && !isSpecialError) ){ - (void)sqlite3VdbeCheckFk(p, 0); + (void)sqlite3VdbeCheckFkImmediate(p); } /* If the auto-commit flag is set and this is the only active writer @@ -89288,7 +90212,7 @@ SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){ && db->nVdbeWrite==(p->readOnly==0) ){ if( p->rc==SQLITE_OK || (p->errorAction==OE_Fail && !isSpecialError) ){ - rc = sqlite3VdbeCheckFk(p, 1); + rc = sqlite3VdbeCheckFkDeferred(p); if( rc!=SQLITE_OK ){ if( NEVER(p->readOnly) ){ sqlite3VdbeLeave(p); @@ -90098,30 +91022,22 @@ SQLITE_PRIVATE void sqlite3VdbeSerialGet( return; } /* -** This routine is used to allocate sufficient space for an UnpackedRecord -** structure large enough to be used with sqlite3VdbeRecordUnpack() if -** the first argument is a pointer to KeyInfo structure pKeyInfo. -** -** The space is either allocated using sqlite3DbMallocRaw() or from within -** the unaligned buffer passed via the second and third arguments (presumably -** stack space). If the former, then *ppFree is set to a pointer that should -** be eventually freed by the caller using sqlite3DbFree(). Or, if the -** allocation comes from the pSpace/szSpace buffer, *ppFree is set to NULL -** before returning. +** Allocate sufficient space for an UnpackedRecord structure large enough +** to hold a decoded index record for pKeyInfo. ** -** If an OOM error occurs, NULL is returned. +** The space is allocated using sqlite3DbMallocRaw(). If an OOM error +** occurs, NULL is returned. */ SQLITE_PRIVATE UnpackedRecord *sqlite3VdbeAllocUnpackedRecord( KeyInfo *pKeyInfo /* Description of the record */ ){ UnpackedRecord *p; /* Unpacked record to return */ - int nByte; /* Number of bytes required for *p */ + u64 nByte; /* Number of bytes required for *p */ assert( sizeof(UnpackedRecord) + sizeof(Mem)*65536 < 0x7fffffff ); nByte = ROUND8P(sizeof(UnpackedRecord)) + sizeof(Mem)*(pKeyInfo->nKeyField+1); p = (UnpackedRecord *)sqlite3DbMallocRaw(pKeyInfo->db, nByte); if( !p ) return 0; p->aMem = (Mem*)&((char*)p)[ROUND8P(sizeof(UnpackedRecord))]; - assert( pKeyInfo->aSortFlags!=0 ); p->pKeyInfo = pKeyInfo; p->nField = pKeyInfo->nKeyField + 1; return p; @@ -90133,7 +91049,6 @@ SQLITE_PRIVATE UnpackedRecord *sqlite3VdbeAllocUnpackedRecord( ** contents of the decoded record. */ SQLITE_PRIVATE void sqlite3VdbeRecordUnpack( - KeyInfo *pKeyInfo, /* Information about the record format */ int nKey, /* Size of the binary record */ const void *pKey, /* The binary record */ UnpackedRecord *p /* Populate this structure before returning. */ @@ -90144,6 +91059,7 @@ SQLITE_PRIVATE void sqlite3VdbeRecordUnpack( u16 u; /* Unsigned loop counter */ u32 szHdr; Mem *pMem = p->aMem; + KeyInfo *pKeyInfo = p->pKeyInfo; p->default_rc = 0; assert( EIGHT_BYTE_ALIGNMENT(pMem) ); @@ -90161,16 +91077,18 @@ SQLITE_PRIVATE void sqlite3VdbeRecordUnpack( pMem->z = 0; sqlite3VdbeSerialGet(&aKey[d], serial_type, pMem); d += sqlite3VdbeSerialTypeLen(serial_type); - pMem++; if( (++u)>=p->nField ) break; + pMem++; } if( d>(u32)nKey && u ){ assert( CORRUPT_DB ); /* In a corrupt record entry, the last pMem might have been set up using ** uninitialized memory. Overwrite its value with NULL, to prevent ** warnings from MSAN. */ - sqlite3VdbeMemSetNull(pMem-1); + sqlite3VdbeMemSetNull(pMem-(unField)); } + testcase( u == pKeyInfo->nKeyField + 1 ); + testcase( u < pKeyInfo->nKeyField + 1 ); assert( u<=pKeyInfo->nKeyField + 1 ); p->nField = u; } @@ -90338,6 +91256,32 @@ static void vdbeAssertFieldCountWithinLimits( ** or positive value if *pMem1 is less than, equal to or greater than ** *pMem2, respectively. Similar in spirit to "rc = (*pMem1) - (*pMem2);". */ +static SQLITE_NOINLINE int vdbeCompareMemStringWithEncodingChange( + const Mem *pMem1, + const Mem *pMem2, + const CollSeq *pColl, + u8 *prcErr /* If an OOM occurs, set to SQLITE_NOMEM */ +){ + int rc; + const void *v1, *v2; + Mem c1; + Mem c2; + sqlite3VdbeMemInit(&c1, pMem1->db, MEM_Null); + sqlite3VdbeMemInit(&c2, pMem1->db, MEM_Null); + sqlite3VdbeMemShallowCopy(&c1, pMem1, MEM_Ephem); + sqlite3VdbeMemShallowCopy(&c2, pMem2, MEM_Ephem); + v1 = sqlite3ValueText((sqlite3_value*)&c1, pColl->enc); + v2 = sqlite3ValueText((sqlite3_value*)&c2, pColl->enc); + if( (v1==0 || v2==0) ){ + if( prcErr ) *prcErr = SQLITE_NOMEM_BKPT; + rc = 0; + }else{ + rc = pColl->xCmp(pColl->pUser, c1.n, v1, c2.n, v2); + } + sqlite3VdbeMemReleaseMalloc(&c1); + sqlite3VdbeMemReleaseMalloc(&c2); + return rc; +} static int vdbeCompareMemString( const Mem *pMem1, const Mem *pMem2, @@ -90349,25 +91293,7 @@ static int vdbeCompareMemString( ** comparison function directly */ return pColl->xCmp(pColl->pUser,pMem1->n,pMem1->z,pMem2->n,pMem2->z); }else{ - int rc; - const void *v1, *v2; - Mem c1; - Mem c2; - sqlite3VdbeMemInit(&c1, pMem1->db, MEM_Null); - sqlite3VdbeMemInit(&c2, pMem1->db, MEM_Null); - sqlite3VdbeMemShallowCopy(&c1, pMem1, MEM_Ephem); - sqlite3VdbeMemShallowCopy(&c2, pMem2, MEM_Ephem); - v1 = sqlite3ValueText((sqlite3_value*)&c1, pColl->enc); - v2 = sqlite3ValueText((sqlite3_value*)&c2, pColl->enc); - if( (v1==0 || v2==0) ){ - if( prcErr ) *prcErr = SQLITE_NOMEM_BKPT; - rc = 0; - }else{ - rc = pColl->xCmp(pColl->pUser, c1.n, v1, c2.n, v2); - } - sqlite3VdbeMemReleaseMalloc(&c1); - sqlite3VdbeMemReleaseMalloc(&c2); - return rc; + return vdbeCompareMemStringWithEncodingChange(pMem1,pMem2,pColl,prcErr); } } @@ -91030,6 +91956,7 @@ SQLITE_PRIVATE RecordCompare sqlite3VdbeFindCompare(UnpackedRecord *p){ ** The easiest way to enforce this limit is to consider only records with ** 13 fields or less. If the first field is an integer, the maximum legal ** header size is (12*5 + 1 + 1) bytes. */ + assert( p->pKeyInfo->aSortFlags!=0 ); if( p->pKeyInfo->nAllField<=13 ){ int flags = p->aMem[0].flags; if( p->pKeyInfo->aSortFlags[0] ){ @@ -91279,6 +92206,7 @@ SQLITE_PRIVATE void sqlite3VdbeSetVarmask(Vdbe *v, int iVar){ } } +#ifndef SQLITE_OMIT_DATETIME_FUNCS /* ** Cause a function to throw an error if it was call from OP_PureFunc ** rather than OP_Function. @@ -91312,6 +92240,7 @@ SQLITE_PRIVATE int sqlite3NotPureFunc(sqlite3_context *pCtx){ } return 1; } +#endif /* SQLITE_OMIT_DATETIME_FUNCS */ #if defined(SQLITE_ENABLE_CURSOR_HINTS) && defined(SQLITE_DEBUG) /* @@ -91388,7 +92317,6 @@ SQLITE_PRIVATE void sqlite3VdbePreUpdateHook( i64 iKey2; PreUpdate preupdate; const char *zTbl = pTab->zName; - static const u8 fakeSortOrder = 0; #ifdef SQLITE_DEBUG int nRealCol; if( pTab->tabFlags & TF_WithoutRowid ){ @@ -91423,11 +92351,11 @@ SQLITE_PRIVATE void sqlite3VdbePreUpdateHook( preupdate.pCsr = pCsr; preupdate.op = op; preupdate.iNewReg = iReg; - preupdate.pKeyinfo = (KeyInfo*)&preupdate.keyinfoSpace; + preupdate.pKeyinfo = (KeyInfo*)&preupdate.uKey; preupdate.pKeyinfo->db = db; preupdate.pKeyinfo->enc = ENC(db); preupdate.pKeyinfo->nKeyField = pTab->nCol; - preupdate.pKeyinfo->aSortFlags = (u8*)&fakeSortOrder; + preupdate.pKeyinfo->aSortFlags = 0; /* Indicate .aColl, .nAllField uninit */ preupdate.iKey1 = iKey1; preupdate.iKey2 = iKey2; preupdate.pTab = pTab; @@ -91457,6 +92385,17 @@ SQLITE_PRIVATE void sqlite3VdbePreUpdateHook( } #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */ +#ifdef SQLITE_ENABLE_PERCENTILE +/* +** Return the name of an SQL function associated with the sqlite3_context. +*/ +SQLITE_PRIVATE const char *sqlite3VdbeFuncName(const sqlite3_context *pCtx){ + assert( pCtx!=0 ); + assert( pCtx->pFunc!=0 ); + return pCtx->pFunc->zName; +} +#endif /* SQLITE_ENABLE_PERCENTILE */ + /************** End of vdbeaux.c *********************************************/ /************** Begin file vdbeapi.c *****************************************/ /* @@ -93154,8 +94093,12 @@ static int bindText( if( zData!=0 ){ pVar = &p->aVar[i-1]; rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel); - if( rc==SQLITE_OK && encoding!=0 ){ - rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db)); + if( rc==SQLITE_OK ){ + if( encoding==0 ){ + pVar->enc = ENC(p->db); + }else{ + rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db)); + } } if( rc ){ sqlite3Error(p->db, rc); @@ -93624,7 +94567,7 @@ static UnpackedRecord *vdbeUnpackRecord( pRet = sqlite3VdbeAllocUnpackedRecord(pKeyInfo); if( pRet ){ memset(pRet->aMem, 0, sizeof(Mem)*(pKeyInfo->nKeyField+1)); - sqlite3VdbeRecordUnpack(pKeyInfo, nKey, pKey, pRet); + sqlite3VdbeRecordUnpack(nKey, pKey, pRet); } return pRet; } @@ -93653,6 +94596,9 @@ SQLITE_API int sqlite3_preupdate_old(sqlite3 *db, int iIdx, sqlite3_value **ppVa } if( p->pPk ){ iStore = sqlite3TableColumnToIndex(p->pPk, iIdx); + }else if( iIdx >= p->pTab->nCol ){ + rc = SQLITE_MISUSE_BKPT; + goto preupdate_old_out; }else{ iStore = sqlite3TableColumnToStorage(p->pTab, iIdx); } @@ -93808,6 +94754,8 @@ SQLITE_API int sqlite3_preupdate_new(sqlite3 *db, int iIdx, sqlite3_value **ppVa } if( p->pPk && p->op!=SQLITE_UPDATE ){ iStore = sqlite3TableColumnToIndex(p->pPk, iIdx); + }else if( iIdx >= p->pTab->nCol ){ + return SQLITE_MISUSE_BKPT; }else{ iStore = sqlite3TableColumnToStorage(p->pTab, iIdx); } @@ -94083,10 +95031,10 @@ SQLITE_API void sqlite3_stmt_scanstatus_reset(sqlite3_stmt *pStmt){ ** a host parameter. If the text contains no host parameters, return ** the total number of bytes in the text. */ -static int findNextHostParameter(const char *zSql, int *pnToken){ +static i64 findNextHostParameter(const char *zSql, i64 *pnToken){ int tokenType; - int nTotal = 0; - int n; + i64 nTotal = 0; + i64 n; *pnToken = 0; while( zSql[0] ){ @@ -94133,8 +95081,8 @@ SQLITE_PRIVATE char *sqlite3VdbeExpandSql( sqlite3 *db; /* The database connection */ int idx = 0; /* Index of a host parameter */ int nextIndex = 1; /* Index of next ? host parameter */ - int n; /* Length of a token prefix */ - int nToken; /* Length of the parameter token */ + i64 n; /* Length of a token prefix */ + i64 nToken; /* Length of the parameter token */ int i; /* Loop counter */ Mem *pVar; /* Value of a host parameter */ StrAccum out; /* Accumulate the output here */ @@ -95058,7 +96006,7 @@ static u64 filterHash(const Mem *aMem, const Op *pOp){ static SQLITE_NOINLINE int vdbeColumnFromOverflow( VdbeCursor *pC, /* The BTree cursor from which we are reading */ int iCol, /* The column to read */ - int t, /* The serial-type code for the column value */ + u32 t, /* The serial-type code for the column value */ i64 iOffset, /* Offset to the start of the content value */ u32 cacheStatus, /* Current Vdbe.cacheCtr value */ u32 colCacheCtr, /* Current value of the column cache counter */ @@ -95133,6 +96081,36 @@ static SQLITE_NOINLINE int vdbeColumnFromOverflow( return rc; } +/* +** Send a "statement aborts" message to the error log. +*/ +static SQLITE_NOINLINE void sqlite3VdbeLogAbort( + Vdbe *p, /* The statement that is running at the time of failure */ + int rc, /* Error code */ + Op *pOp, /* Opcode that filed */ + Op *aOp /* All opcodes */ +){ + const char *zSql = p->zSql; /* Original SQL text */ + const char *zPrefix = ""; /* Prefix added to SQL text */ + int pc; /* Opcode address */ + char zXtra[100]; /* Buffer space to store zPrefix */ + + if( p->pFrame ){ + assert( aOp[0].opcode==OP_Init ); + if( aOp[0].p4.z!=0 ){ + assert( aOp[0].p4.z[0]=='-' + && aOp[0].p4.z[1]=='-' + && aOp[0].p4.z[2]==' ' ); + sqlite3_snprintf(sizeof(zXtra), zXtra,"/* %s */ ",aOp[0].p4.z+3); + zPrefix = zXtra; + }else{ + zPrefix = "/* unknown trigger */ "; + } + } + pc = (int)(pOp - aOp); + sqlite3_log(rc, "statement aborts at %d: %s; [%s%s]", + pc, p->zErrMsg, zPrefix, zSql); +} /* ** Return the symbolic name for the data type of a pMem @@ -95658,8 +96636,7 @@ case OP_Halt: { }else{ sqlite3VdbeError(p, "%s", pOp->p4.z); } - pcx = (int)(pOp - aOp); - sqlite3_log(pOp->p1, "abort at %d: %s; [%s]", pcx, p->zErrMsg, p->zSql); + sqlite3VdbeLogAbort(p, pOp->p1, pOp, aOp); } rc = sqlite3VdbeHalt(p); assert( rc==SQLITE_BUSY || rc==SQLITE_OK || rc==SQLITE_ERROR ); @@ -96038,7 +97015,7 @@ case OP_IntCopy: { /* out2 */ ** RETURNING clause. */ case OP_FkCheck: { - if( (rc = sqlite3VdbeCheckFk(p,0))!=SQLITE_OK ){ + if( (rc = sqlite3VdbeCheckFkImmediate(p))!=SQLITE_OK ){ goto abort_due_to_error; } break; @@ -96130,10 +97107,14 @@ case OP_Concat: { /* same as TK_CONCAT, in1, in2, out3 */ if( sqlite3VdbeMemExpandBlob(pIn2) ) goto no_mem; flags2 = pIn2->flags & ~MEM_Str; } - nByte = pIn1->n + pIn2->n; + nByte = pIn1->n; + nByte += pIn2->n; if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){ goto too_big; } +#if SQLITE_MAX_LENGTH>2147483645 + if( nByte>2147483645 ){ goto too_big; } +#endif if( sqlite3VdbeMemGrow(pOut, (int)nByte+2, pOut==pIn2) ){ goto no_mem; } @@ -96817,6 +97798,7 @@ case OP_Compare: { pKeyInfo = pOp->p4.pKeyInfo; assert( n>0 ); assert( pKeyInfo!=0 ); + assert( pKeyInfo->aSortFlags!=0 ); p1 = pOp->p1; p2 = pOp->p2; #ifdef SQLITE_DEBUG @@ -97579,6 +98561,15 @@ case OP_Column: { /* ncycle */ ** Take the affinities from the Table object in P4. If any value ** cannot be coerced into the correct type, then raise an error. ** +** If P3==0, then omit checking of VIRTUAL columns. +** +** If P3==1, then omit checking of all generated column, both VIRTUAL +** and STORED. +** +** If P3>=2, then only check column number P3-2 in the table (which will +** be a VIRTUAL column) against the value in reg[P1]. In this case, +** P2 will be 1. +** ** This opcode is similar to OP_Affinity except that this opcode ** forces the register type to the Table column type. This is used ** to implement "strict affinity". @@ -97592,8 +98583,8 @@ case OP_Column: { /* ncycle */ ** **
      **
    • P2 should be the number of non-virtual columns in the -** table of P4. -**
    • Table P4 should be a STRICT table. +** table of P4 unless P3>1, in which case P2 will be 1. +**
    • Table P4 is a STRICT table. **
    ** ** If any precondition is false, an assertion fault occurs. @@ -97602,16 +98593,28 @@ case OP_TypeCheck: { Table *pTab; Column *aCol; int i; + int nCol; assert( pOp->p4type==P4_TABLE ); pTab = pOp->p4.pTab; assert( pTab->tabFlags & TF_Strict ); - assert( pTab->nNVCol==pOp->p2 ); + assert( pOp->p3>=0 && pOp->p3nCol+2 ); aCol = pTab->aCol; pIn1 = &aMem[pOp->p1]; - for(i=0; inCol; i++){ - if( aCol[i].colFlags & COLFLAG_GENERATED ){ - if( aCol[i].colFlags & COLFLAG_VIRTUAL ) continue; + if( pOp->p3<2 ){ + assert( pTab->nNVCol==pOp->p2 ); + i = 0; + nCol = pTab->nCol; + }else{ + i = pOp->p3-2; + nCol = i+1; + assert( inCol ); + assert( aCol[i].colFlags & COLFLAG_VIRTUAL ); + assert( pOp->p2==1 ); + } + for(; ip3<2 ){ + if( (aCol[i].colFlags & COLFLAG_VIRTUAL)!=0 ) continue; if( pOp->p3 ){ pIn1++; continue; } } assert( pIn1 < &aMem[pOp->p1+pOp->p2] ); @@ -97933,7 +98936,7 @@ case OP_MakeRecord: { len = (u32)pRec->n; serial_type = (len*2) + 12 + ((pRec->flags & MEM_Str)!=0); if( pRec->flags & MEM_Zero ){ - serial_type += pRec->u.nZero*2; + serial_type += (u32)pRec->u.nZero*2; if( nData ){ if( sqlite3VdbeMemExpandBlob(pRec) ) goto no_mem; len += pRec->u.nZero; @@ -98200,7 +99203,7 @@ case OP_Savepoint: { */ int isTransaction = pSavepoint->pNext==0 && db->isTransactionSavepoint; if( isTransaction && p1==SAVEPOINT_RELEASE ){ - if( (rc = sqlite3VdbeCheckFk(p, 1))!=SQLITE_OK ){ + if( (rc = sqlite3VdbeCheckFkDeferred(p))!=SQLITE_OK ){ goto vdbe_return; } db->autoCommit = 1; @@ -98318,7 +99321,7 @@ case OP_AutoCommit: { "SQL statements in progress"); rc = SQLITE_BUSY; goto abort_due_to_error; - }else if( (rc = sqlite3VdbeCheckFk(p, 1))!=SQLITE_OK ){ + }else if( (rc = sqlite3VdbeCheckFkDeferred(p))!=SQLITE_OK ){ goto vdbe_return; }else{ db->autoCommit = (u8)desiredAutoCommit; @@ -99690,7 +100693,7 @@ case OP_Found: { /* jump, in3, ncycle */ if( rc ) goto no_mem; pIdxKey = sqlite3VdbeAllocUnpackedRecord(pC->pKeyInfo); if( pIdxKey==0 ) goto no_mem; - sqlite3VdbeRecordUnpack(pC->pKeyInfo, r.aMem->n, r.aMem->z, pIdxKey); + sqlite3VdbeRecordUnpack(r.aMem->n, r.aMem->z, pIdxKey); pIdxKey->default_rc = 0; rc = sqlite3BtreeIndexMoveto(pC->uc.pCursor, pIdxKey, &pC->seekResult); sqlite3DbFreeNN(db, pIdxKey); @@ -100688,6 +101691,32 @@ case OP_Rewind: { /* jump0, ncycle */ break; } +/* Opcode: IfEmpty P1 P2 * * * +** Synopsis: if( empty(P1) ) goto P2 +** +** Check to see if the b-tree table that cursor P1 references is empty +** and jump to P2 if it is. +*/ +case OP_IfEmpty: { /* jump */ + VdbeCursor *pC; + BtCursor *pCrsr; + int res; + + assert( pOp->p1>=0 && pOp->p1nCursor ); + assert( pOp->p2>=0 && pOp->p2nOp ); + + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->eCurType==CURTYPE_BTREE ); + pCrsr = pC->uc.pCursor; + assert( pCrsr ); + rc = sqlite3BtreeIsEmpty(pCrsr, &res); + if( rc ) goto abort_due_to_error; + VdbeBranchTaken(res!=0,2); + if( res ) goto jump_to_p2; + break; +} + /* Opcode: Next P1 P2 P3 * P5 ** ** Advance cursor P1 so that it points to the next key/data pair in its @@ -102224,6 +103253,7 @@ case OP_Checkpoint: { || pOp->p2==SQLITE_CHECKPOINT_FULL || pOp->p2==SQLITE_CHECKPOINT_RESTART || pOp->p2==SQLITE_CHECKPOINT_TRUNCATE + || pOp->p2==SQLITE_CHECKPOINT_NOOP ); rc = sqlite3Checkpoint(db, pOp->p1, pOp->p2, &aRes[1], &aRes[2]); if( rc ){ @@ -102559,7 +103589,14 @@ case OP_VOpen: { /* ncycle */ const sqlite3_module *pModule; assert( p->bIsReader ); - pCur = 0; + pCur = p->apCsr[pOp->p1]; + if( pCur!=0 + && ALWAYS( pCur->eCurType==CURTYPE_VTAB ) + && ALWAYS( pCur->uc.pVCur->pVtab==pOp->p4.pVtab->pVtab ) + ){ + /* This opcode is a no-op if the cursor is already open */ + break; + } pVCur = 0; pVtab = pOp->p4.pVtab->pVtab; if( pVtab==0 || NEVER(pVtab->pModule==0) ){ @@ -103501,8 +104538,7 @@ default: { /* This is really OP_Noop, OP_Explain */ p->rc = rc; sqlite3SystemError(db, rc); testcase( sqlite3GlobalConfig.xLog!=0 ); - sqlite3_log(rc, "statement aborts at %d: %s; [%s]", - (int)(pOp - aOp), p->zErrMsg, p->zSql); + sqlite3VdbeLogAbort(p, rc, pOp, aOp); if( p->eVdbeState==VDBE_RUN_STATE ) sqlite3VdbeHalt(p); if( rc==SQLITE_IOERR_NOMEM ) sqlite3OomFault(db); if( rc==SQLITE_CORRUPT && db->autoCommit==0 ){ @@ -103963,7 +104999,7 @@ static int blobReadWrite( int iOffset, int (*xCall)(BtCursor*, u32, u32, void*) ){ - int rc; + int rc = SQLITE_OK; Incrblob *p = (Incrblob *)pBlob; Vdbe *v; sqlite3 *db; @@ -104003,17 +105039,32 @@ static int blobReadWrite( ** using the incremental-blob API, this works. For the sessions module ** anyhow. */ - sqlite3_int64 iKey; - iKey = sqlite3BtreeIntegerKey(p->pCsr); - assert( v->apCsr[0]!=0 ); - assert( v->apCsr[0]->eCurType==CURTYPE_BTREE ); - sqlite3VdbePreUpdateHook( - v, v->apCsr[0], SQLITE_DELETE, p->zDb, p->pTab, iKey, -1, p->iCol - ); + if( sqlite3BtreeCursorIsValidNN(p->pCsr)==0 ){ + /* If the cursor is not currently valid, try to reseek it. This + ** always either fails or finds the correct row - the cursor will + ** have been marked permanently CURSOR_INVALID if the open row has + ** been deleted. */ + int bDiff = 0; + rc = sqlite3BtreeCursorRestore(p->pCsr, &bDiff); + assert( bDiff==0 || sqlite3BtreeCursorIsValidNN(p->pCsr)==0 ); + } + if( sqlite3BtreeCursorIsValidNN(p->pCsr) ){ + sqlite3_int64 iKey; + iKey = sqlite3BtreeIntegerKey(p->pCsr); + assert( v->apCsr[0]!=0 ); + assert( v->apCsr[0]->eCurType==CURTYPE_BTREE ); + sqlite3VdbePreUpdateHook( + v, v->apCsr[0], SQLITE_DELETE, p->zDb, p->pTab, iKey, -1, p->iCol + ); + } + } + if( rc==SQLITE_OK ){ + rc = xCall(p->pCsr, iOffset+p->iOffset, n, z); } +#else + rc = xCall(p->pCsr, iOffset+p->iOffset, n, z); #endif - rc = xCall(p->pCsr, iOffset+p->iOffset, n, z); sqlite3BtreeLeaveCursor(p->pCsr); if( rc==SQLITE_ABORT ){ sqlite3VdbeFinalize(v); @@ -104402,6 +105453,7 @@ struct SortSubtask { SorterCompare xCompare; /* Compare function to use */ SorterFile file; /* Temp file for level-0 PMAs */ SorterFile file2; /* Space for other PMAs */ + u64 nSpill; /* Total bytes written by this task */ }; @@ -104522,6 +105574,7 @@ struct PmaWriter { int iBufEnd; /* Last byte of buffer to write */ i64 iWriteOff; /* Offset of start of buffer in file */ sqlite3_file *pFd; /* File handle to write to */ + u64 nPmaSpill; /* Total number of bytes written */ }; /* @@ -104866,7 +105919,7 @@ static int vdbeSorterCompareTail( ){ UnpackedRecord *r2 = pTask->pUnpacked; if( *pbKey2Cached==0 ){ - sqlite3VdbeRecordUnpack(pTask->pSorter->pKeyInfo, nKey2, pKey2, r2); + sqlite3VdbeRecordUnpack(nKey2, pKey2, r2); *pbKey2Cached = 1; } return sqlite3VdbeRecordCompareWithSkip(nKey1, pKey1, r2, 1); @@ -104893,7 +105946,7 @@ static int vdbeSorterCompare( ){ UnpackedRecord *r2 = pTask->pUnpacked; if( !*pbKey2Cached ){ - sqlite3VdbeRecordUnpack(pTask->pSorter->pKeyInfo, nKey2, pKey2, r2); + sqlite3VdbeRecordUnpack(nKey2, pKey2, r2); *pbKey2Cached = 1; } return sqlite3VdbeRecordCompare(nKey1, pKey1, r2); @@ -104933,6 +105986,7 @@ static int vdbeSorterCompareText( ); } }else{ + assert( pTask->pSorter->pKeyInfo->aSortFlags!=0 ); assert( !(pTask->pSorter->pKeyInfo->aSortFlags[0]&KEYINFO_ORDER_BIGNULL) ); if( pTask->pSorter->pKeyInfo->aSortFlags[0] ){ res = res * -1; @@ -104996,6 +106050,7 @@ static int vdbeSorterCompareInt( } } + assert( pTask->pSorter->pKeyInfo->aSortFlags!=0 ); if( res==0 ){ if( pTask->pSorter->pKeyInfo->nKeyField>1 ){ res = vdbeSorterCompareTail( @@ -105069,7 +106124,8 @@ SQLITE_PRIVATE int sqlite3VdbeSorterInit( assert( pCsr->eCurType==CURTYPE_SORTER ); assert( sizeof(KeyInfo) + UMXV(pCsr->pKeyInfo->nKeyField)*sizeof(CollSeq*) < 0x7fffffff ); - szKeyInfo = SZ_KEYINFO(pCsr->pKeyInfo->nKeyField); + assert( pCsr->pKeyInfo->nKeyField<=pCsr->pKeyInfo->nAllField ); + szKeyInfo = SZ_KEYINFO(pCsr->pKeyInfo->nAllField); sz = SZ_VDBESORTER(nWorker+1); pSorter = (VdbeSorter*)sqlite3DbMallocZero(db, sz + szKeyInfo); @@ -105083,7 +106139,12 @@ SQLITE_PRIVATE int sqlite3VdbeSorterInit( pKeyInfo->db = 0; if( nField && nWorker==0 ){ pKeyInfo->nKeyField = nField; + assert( nField<=pCsr->pKeyInfo->nAllField ); } + /* It is OK that pKeyInfo reuses the aSortFlags field from pCsr->pKeyInfo, + ** since the pCsr->pKeyInfo->aSortFlags[] array is invariant and lives + ** longer that pSorter. */ + assert( pKeyInfo->aSortFlags==pCsr->pKeyInfo->aSortFlags ); sqlite3BtreeEnter(pBt); pSorter->pgsz = pgsz = sqlite3BtreeGetPageSize(pBt); sqlite3BtreeLeave(pBt); @@ -105372,6 +106433,12 @@ SQLITE_PRIVATE void sqlite3VdbeSorterClose(sqlite3 *db, VdbeCursor *pCsr){ assert( pCsr->eCurType==CURTYPE_SORTER ); pSorter = pCsr->uc.pSorter; if( pSorter ){ + /* Increment db->nSpill by the total number of bytes of data written + ** to temp files by this sort operation. */ + int ii; + for(ii=0; iinTask; ii++){ + db->nSpill += pSorter->aTask[ii].nSpill; + } sqlite3VdbeSorterReset(db, pSorter); sqlite3_free(pSorter->list.aMemory); sqlite3DbFree(db, pSorter); @@ -105597,6 +106664,7 @@ static void vdbePmaWriteBlob(PmaWriter *p, u8 *pData, int nData){ &p->aBuffer[p->iBufStart], p->iBufEnd - p->iBufStart, p->iWriteOff + p->iBufStart ); + p->nPmaSpill += (p->iBufEnd - p->iBufStart); p->iBufStart = p->iBufEnd = 0; p->iWriteOff += p->nBuffer; } @@ -105613,17 +106681,20 @@ static void vdbePmaWriteBlob(PmaWriter *p, u8 *pData, int nData){ ** required. Otherwise, return an SQLite error code. ** ** Before returning, set *piEof to the offset immediately following the -** last byte written to the file. +** last byte written to the file. Also, increment (*pnSpill) by the total +** number of bytes written to the file. */ -static int vdbePmaWriterFinish(PmaWriter *p, i64 *piEof){ +static int vdbePmaWriterFinish(PmaWriter *p, i64 *piEof, u64 *pnSpill){ int rc; if( p->eFWErr==0 && ALWAYS(p->aBuffer) && p->iBufEnd>p->iBufStart ){ p->eFWErr = sqlite3OsWrite(p->pFd, &p->aBuffer[p->iBufStart], p->iBufEnd - p->iBufStart, p->iWriteOff + p->iBufStart ); + p->nPmaSpill += (p->iBufEnd - p->iBufStart); } *piEof = (p->iWriteOff + p->iBufEnd); + *pnSpill += p->nPmaSpill; sqlite3_free(p->aBuffer); rc = p->eFWErr; memset(p, 0, sizeof(PmaWriter)); @@ -105703,7 +106774,7 @@ static int vdbeSorterListToPMA(SortSubtask *pTask, SorterList *pList){ if( pList->aMemory==0 ) sqlite3_free(p); } pList->pList = p; - rc = vdbePmaWriterFinish(&writer, &pTask->file.iEof); + rc = vdbePmaWriterFinish(&writer, &pTask->file.iEof, &pTask->nSpill); } vdbeSorterWorkDebug(pTask, "exit"); @@ -106017,7 +107088,7 @@ static int vdbeIncrPopulate(IncrMerger *pIncr){ rc = vdbeMergeEngineStep(pIncr->pMerger, &dummy); } - rc2 = vdbePmaWriterFinish(&writer, &pOut->iEof); + rc2 = vdbePmaWriterFinish(&writer, &pOut->iEof, &pTask->nSpill); if( rc==SQLITE_OK ) rc = rc2; vdbeSorterPopulateDebug(pTask, "exit"); return rc; @@ -106863,7 +107934,7 @@ SQLITE_PRIVATE int sqlite3VdbeSorterCompare( assert( r2->nField==nKeyCol ); pKey = vdbeSorterRowkey(pSorter, &nKey); - sqlite3VdbeRecordUnpack(pKeyInfo, nKey, pKey, r2); + sqlite3VdbeRecordUnpack(nKey, pKey, r2); for(i=0; iaMem[i].flags & MEM_Null ){ *pRes = -1; @@ -108408,10 +109479,13 @@ static int lookupName( if( cnt>0 ){ if( pItem->fg.isUsing==0 || sqlite3IdListIndex(pItem->u3.pUsing, zCol)<0 + || pMatch==pItem ){ /* Two or more tables have the same column name which is - ** not joined by USING. This is an error. Signal as much - ** by clearing pFJMatch and letting cnt go above 1. */ + ** not joined by USING. Or, a single table has two columns + ** that match a USING term (if pMatch==pItem). These are both + ** "ambiguous column name" errors. Signal as much by clearing + ** pFJMatch and letting cnt go above 1. */ sqlite3ExprListDelete(db, pFJMatch); pFJMatch = 0; }else @@ -108961,8 +110035,8 @@ static void notValidImpl( /* ** Expression p should encode a floating point value between 1.0 and 0.0. -** Return 1024 times this value. Or return -1 if p is not a floating point -** value between 1.0 and 0.0. +** Return 134,217,728 (2^27) times this value. Or return -1 if p is not +** a floating point value between 1.0 and 0.0. */ static int exprProbability(Expr *p){ double r = -1.0; @@ -109393,11 +110467,13 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ return WRC_Prune; } #ifndef SQLITE_OMIT_SUBQUERY + case TK_EXISTS: case TK_SELECT: - case TK_EXISTS: testcase( pExpr->op==TK_EXISTS ); #endif case TK_IN: { testcase( pExpr->op==TK_IN ); + testcase( pExpr->op==TK_EXISTS ); + testcase( pExpr->op==TK_SELECT ); if( ExprUseXSelect(pExpr) ){ int nRef = pNC->nRef; testcase( pNC->ncFlags & NC_IsCheck ); @@ -109405,6 +110481,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ testcase( pNC->ncFlags & NC_IdxExpr ); testcase( pNC->ncFlags & NC_GenCol ); assert( pExpr->x.pSelect ); + if( pExpr->op==TK_EXISTS ) pParse->bHasExists = 1; if( pNC->ncFlags & NC_SelfRef ){ notValidImpl(pParse, pNC, "subqueries", pExpr, pExpr); }else{ @@ -110315,14 +111392,17 @@ SQLITE_PRIVATE int sqlite3ResolveSelfReference( SrcList *pSrc; /* Fake SrcList for pParse->pNewTable */ NameContext sNC; /* Name context for pParse->pNewTable */ int rc; - u8 srcSpace[SZ_SRCLIST_1]; /* Memory space for the fake SrcList */ + union { + SrcList sSrc; + u8 srcSpace[SZ_SRCLIST_1]; /* Memory space for the fake SrcList */ + } uSrc; assert( type==0 || pTab!=0 ); assert( type==NC_IsCheck || type==NC_PartIdx || type==NC_IdxExpr || type==NC_GenCol || pTab==0 ); memset(&sNC, 0, sizeof(sNC)); - pSrc = (SrcList*)srcSpace; - memset(pSrc, 0, SZ_SRCLIST_1); + memset(&uSrc, 0, sizeof(uSrc)); + pSrc = &uSrc.sSrc; if( pTab ){ pSrc->nSrc = 1; pSrc->a[0].zName = pTab->zName; @@ -111585,6 +112665,11 @@ SQLITE_PRIVATE void sqlite3ExprAddFunctionOrderBy( sqlite3ExprListDelete(db, pOrderBy); return; } + if( pOrderBy->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){ + sqlite3ErrorMsg(pParse, "too many terms in ORDER BY clause"); + sqlite3ExprListDelete(db, pOrderBy); + return; + } pOB = sqlite3ExprAlloc(db, TK_ORDER, 0, 0); if( pOB==0 ){ @@ -112719,6 +113804,85 @@ SQLITE_PRIVATE Expr *sqlite3ExprSimplifiedAndOr(Expr *pExpr){ return pExpr; } +/* +** Return true if it might be advantageous to compute the right operand +** of expression pExpr first, before the left operand. +** +** Normally the left operand is computed before the right operand. But if +** the left operand contains a subquery and the right does not, then it +** might be more efficient to compute the right operand first. +*/ +static int exprEvalRhsFirst(Expr *pExpr){ + if( ExprHasProperty(pExpr->pLeft, EP_Subquery) + && !ExprHasProperty(pExpr->pRight, EP_Subquery) + ){ + return 1; + }else{ + return 0; + } +} + +/* +** Compute the two operands of a binary operator. +** +** If either operand contains a subquery, then the code strives to +** compute the operand containing the subquery second. If the other +** operand evalutes to NULL, then a jump is made. The address of the +** IsNull operand that does this jump is returned. The caller can use +** this to optimize the computation so as to avoid doing the potentially +** expensive subquery. +** +** If no optimization opportunities exist, return 0. +*/ +static int exprComputeOperands( + Parse *pParse, /* Parsing context */ + Expr *pExpr, /* The comparison expression */ + int *pR1, /* OUT: Register holding the left operand */ + int *pR2, /* OUT: Register holding the right operand */ + int *pFree1, /* OUT: Temp register to free if not zero */ + int *pFree2 /* OUT: Another temp register to free if not zero */ +){ + int addrIsNull; + int r1, r2; + Vdbe *v = pParse->pVdbe; + + assert( v!=0 ); + /* + ** If the left operand contains a (possibly expensive) subquery and the + ** right operand does not and the right operation might be NULL, + ** then compute the right operand first and do an IsNull jump if the + ** right operand evalutes to NULL. + */ + if( exprEvalRhsFirst(pExpr) && sqlite3ExprCanBeNull(pExpr->pRight) ){ + r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, pFree2); + addrIsNull = sqlite3VdbeAddOp1(v, OP_IsNull, r2); + VdbeComment((v, "skip left operand")); + VdbeCoverage(v); + }else{ + r2 = 0; /* Silence a false-positive uninit-var warning in MSVC */ + addrIsNull = 0; + } + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, pFree1); + if( addrIsNull==0 ){ + /* + ** If the right operand contains a subquery and the left operand does not + ** and the left operand might be NULL, then do an IsNull check + ** check on the left operand before computing the right operand. + */ + if( ExprHasProperty(pExpr->pRight, EP_Subquery) + && sqlite3ExprCanBeNull(pExpr->pLeft) + ){ + addrIsNull = sqlite3VdbeAddOp1(v, OP_IsNull, r1); + VdbeComment((v, "skip right operand")); + VdbeCoverage(v); + } + r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, pFree2); + } + *pR1 = r1; + *pR2 = r2; + return addrIsNull; +} + /* ** pExpr is a TK_FUNCTION node. Try to determine whether or not the ** function is a constant function. A function is constant if all of @@ -114163,17 +115327,23 @@ SQLITE_PRIVATE int sqlite3CodeSubselect(Parse *pParse, Expr *pExpr){ VdbeComment((v, "Init EXISTS result")); } if( pSel->pLimit ){ - /* The subquery already has a limit. If the pre-existing limit is X - ** then make the new limit X<>0 so that the new limit is either 1 or 0 */ - sqlite3 *db = pParse->db; - pLimit = sqlite3Expr(db, TK_INTEGER, "0"); - if( pLimit ){ - pLimit->affExpr = SQLITE_AFF_NUMERIC; - pLimit = sqlite3PExpr(pParse, TK_NE, - sqlite3ExprDup(db, pSel->pLimit->pLeft, 0), pLimit); + /* The subquery already has a limit. If the pre-existing limit X is + ** not already integer value 1 or 0, then make the new limit X<>0 so that + ** the new limit is either 1 or 0 */ + Expr *pLeft = pSel->pLimit->pLeft; + if( ExprHasProperty(pLeft, EP_IntValue)==0 + || (pLeft->u.iValue!=1 && pLeft->u.iValue!=0) + ){ + sqlite3 *db = pParse->db; + pLimit = sqlite3Expr(db, TK_INTEGER, "0"); + if( pLimit ){ + pLimit->affExpr = SQLITE_AFF_NUMERIC; + pLimit = sqlite3PExpr(pParse, TK_NE, + sqlite3ExprDup(db, pLeft, 0), pLimit); + } + sqlite3ExprDeferredDelete(pParse, pLeft); + pSel->pLimit->pLeft = pLimit; } - sqlite3ExprDeferredDelete(pParse, pSel->pLimit->pLeft); - pSel->pLimit->pLeft = pLimit; }else{ /* If there is no pre-existing limit add a limit of 1 */ pLimit = sqlite3Expr(pParse->db, TK_INTEGER, "1"); @@ -114261,7 +115431,6 @@ static void sqlite3ExprCodeIN( int rRhsHasNull = 0; /* Register that is true if RHS contains NULL values */ int eType; /* Type of the RHS */ int rLhs; /* Register(s) holding the LHS values */ - int rLhsOrig; /* LHS values prior to reordering by aiMap[] */ Vdbe *v; /* Statement under construction */ int *aiMap = 0; /* Map from vector field to index column */ char *zAff = 0; /* Affinity string for comparisons */ @@ -114324,19 +115493,8 @@ static void sqlite3ExprCodeIN( ** by code generated below. */ assert( pParse->okConstFactor==okConstFactor ); pParse->okConstFactor = 0; - rLhsOrig = exprCodeVector(pParse, pLeft, &iDummy); + rLhs = exprCodeVector(pParse, pLeft, &iDummy); pParse->okConstFactor = okConstFactor; - for(i=0; ix.pList; pColl = sqlite3ExprCollSeq(pParse, pExpr->pLeft); @@ -114392,6 +115551,26 @@ static void sqlite3ExprCodeIN( goto sqlite3ExprCodeIN_finished; } + if( eType!=IN_INDEX_ROWID ){ + /* If this IN operator will use an index, then the order of columns in the + ** vector might be different from the order in the index. In that case, + ** we need to reorder the LHS values to be in index order. Run Affinity + ** before reordering the columns, so that the affinity is correct. + */ + sqlite3VdbeAddOp4(v, OP_Affinity, rLhs, nVector, 0, zAff, nVector); + for(i=0; idb, aiMap); @@ -114615,7 +115793,12 @@ SQLITE_PRIVATE void sqlite3ExprCodeGeneratedColumn( iAddr = 0; } sqlite3ExprCodeCopy(pParse, sqlite3ColumnExpr(pTab,pCol), regOut); - if( pCol->affinity>=SQLITE_AFF_TEXT ){ + if( (pCol->colFlags & COLFLAG_VIRTUAL)!=0 + && (pTab->tabFlags & TF_Strict)!=0 + ){ + int p3 = 2+(int)(pCol - pTab->aCol); + sqlite3VdbeAddOp4(v, OP_TypeCheck, regOut, 1, p3, (char*)pTab, P4_TABLE); + }else if( pCol->affinity>=SQLITE_AFF_TEXT ){ sqlite3VdbeAddOp4(v, OP_Affinity, regOut, 1, 0, &pCol->affinity, 1); } if( iAddr ) sqlite3VdbeJumpHere(v, iAddr); @@ -115053,6 +116236,80 @@ static int exprPartidxExprLookup(Parse *pParse, Expr *pExpr, int iTarget){ return 0; } +/* +** Generate code that evaluates an AND or OR operator leaving a +** boolean result in a register. pExpr is the AND/OR expression. +** Store the result in the "target" register. Use short-circuit +** evaluation to avoid computing both operands, if possible. +** +** The code generated might require the use of a temporary register. +** If it does, then write the number of that temporary register +** into *pTmpReg. If not, leave *pTmpReg unchanged. +*/ +static SQLITE_NOINLINE int exprCodeTargetAndOr( + Parse *pParse, /* Parsing context */ + Expr *pExpr, /* AND or OR expression to be coded */ + int target, /* Put result in this register, guaranteed */ + int *pTmpReg /* Write a temporary register here */ +){ + int op; /* The opcode. TK_AND or TK_OR */ + int skipOp; /* Opcode for the branch that skips one operand */ + int addrSkip; /* Branch instruction that skips one of the operands */ + int regSS = 0; /* Register holding computed operand when other omitted */ + int r1, r2; /* Registers for left and right operands, respectively */ + Expr *pAlt; /* Alternative, simplified expression */ + Vdbe *v; /* statement being coded */ + + assert( pExpr!=0 ); + op = pExpr->op; + assert( op==TK_AND || op==TK_OR ); + assert( TK_AND==OP_And ); testcase( op==TK_AND ); + assert( TK_OR==OP_Or ); testcase( op==TK_OR ); + assert( pParse->pVdbe!=0 ); + v = pParse->pVdbe; + pAlt = sqlite3ExprSimplifiedAndOr(pExpr); + if( pAlt!=pExpr ){ + r1 = sqlite3ExprCodeTarget(pParse, pAlt, target); + sqlite3VdbeAddOp3(v, OP_And, r1, r1, target); + return target; + } + skipOp = op==TK_AND ? OP_IfNot : OP_If; + if( exprEvalRhsFirst(pExpr) ){ + /* Compute the right operand first. Skip the computation of the left + ** operand if the right operand fully determines the result */ + r2 = regSS = sqlite3ExprCodeTarget(pParse, pExpr->pRight, target); + addrSkip = sqlite3VdbeAddOp1(v, skipOp, r2); + VdbeComment((v, "skip left operand")); + VdbeCoverage(v); + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, pTmpReg); + }else{ + /* Compute the left operand first */ + r1 = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target); + if( ExprHasProperty(pExpr->pRight, EP_Subquery) ){ + /* Skip over the computation of the right operand if the right + ** operand is a subquery and the left operand completely determines + ** the result */ + regSS = r1; + addrSkip = sqlite3VdbeAddOp1(v, skipOp, r1); + VdbeComment((v, "skip right operand")); + VdbeCoverage(v); + }else{ + addrSkip = regSS = 0; + } + r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, pTmpReg); + } + sqlite3VdbeAddOp3(v, op, r2, r1, target); + testcase( (*pTmpReg)==0 ); + if( addrSkip ){ + sqlite3VdbeAddOp2(v, OP_Goto, 0, sqlite3VdbeCurrentAddr(v)+2); + sqlite3VdbeJumpHere(v, addrSkip); + sqlite3VdbeAddOp3(v, OP_Or, regSS, regSS, target); + VdbeComment((v, "short-circut value")); + } + return target; +} + + /* ** Generate code into the current Vdbe to evaluate the given @@ -115308,11 +116565,17 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) case TK_NE: case TK_EQ: { Expr *pLeft = pExpr->pLeft; + int addrIsNull = 0; if( sqlite3ExprIsVector(pLeft) ){ codeVectorCompare(pParse, pExpr, target, op, p5); }else{ - r1 = sqlite3ExprCodeTemp(pParse, pLeft, ®Free1); - r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, ®Free2); + if( ExprHasProperty(pExpr, EP_Subquery) && p5!=SQLITE_NULLEQ ){ + addrIsNull = exprComputeOperands(pParse, pExpr, + &r1, &r2, ®Free1, ®Free2); + }else{ + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, ®Free2); + } sqlite3VdbeAddOp2(v, OP_Integer, 1, inReg); codeCompare(pParse, pLeft, pExpr->pRight, op, r1, r2, sqlite3VdbeCurrentAddr(v)+2, p5, @@ -115327,6 +116590,11 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) sqlite3VdbeAddOp2(v, OP_Integer, 0, inReg); }else{ sqlite3VdbeAddOp3(v, OP_ZeroOrNull, r1, inReg, r2); + if( addrIsNull ){ + sqlite3VdbeAddOp2(v, OP_Goto, 0, sqlite3VdbeCurrentAddr(v)+2); + sqlite3VdbeJumpHere(v, addrIsNull); + sqlite3VdbeAddOp2(v, OP_Null, 0, inReg); + } } testcase( regFree1==0 ); testcase( regFree2==0 ); @@ -115334,7 +116602,10 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) break; } case TK_AND: - case TK_OR: + case TK_OR: { + inReg = exprCodeTargetAndOr(pParse, pExpr, target, ®Free1); + break; + } case TK_PLUS: case TK_STAR: case TK_MINUS: @@ -115345,8 +116616,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) case TK_LSHIFT: case TK_RSHIFT: case TK_CONCAT: { - assert( TK_AND==OP_And ); testcase( op==TK_AND ); - assert( TK_OR==OP_Or ); testcase( op==TK_OR ); + int addrIsNull; assert( TK_PLUS==OP_Add ); testcase( op==TK_PLUS ); assert( TK_MINUS==OP_Subtract ); testcase( op==TK_MINUS ); assert( TK_REM==OP_Remainder ); testcase( op==TK_REM ); @@ -115356,11 +116626,23 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) assert( TK_LSHIFT==OP_ShiftLeft ); testcase( op==TK_LSHIFT ); assert( TK_RSHIFT==OP_ShiftRight ); testcase( op==TK_RSHIFT ); assert( TK_CONCAT==OP_Concat ); testcase( op==TK_CONCAT ); - r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); - r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, ®Free2); + if( ExprHasProperty(pExpr, EP_Subquery) ){ + addrIsNull = exprComputeOperands(pParse, pExpr, + &r1, &r2, ®Free1, ®Free2); + }else{ + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, ®Free2); + addrIsNull = 0; + } sqlite3VdbeAddOp3(v, op, r2, r1, target); testcase( regFree1==0 ); testcase( regFree2==0 ); + if( addrIsNull ){ + sqlite3VdbeAddOp2(v, OP_Goto, 0, sqlite3VdbeCurrentAddr(v)+2); + sqlite3VdbeJumpHere(v, addrIsNull); + sqlite3VdbeAddOp2(v, OP_Null, 0, target); + VdbeComment((v, "short-circut value")); + } break; } case TK_UMINUS: { @@ -116228,17 +117510,27 @@ SQLITE_PRIVATE void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int Expr *pAlt = sqlite3ExprSimplifiedAndOr(pExpr); if( pAlt!=pExpr ){ sqlite3ExprIfTrue(pParse, pAlt, dest, jumpIfNull); - }else if( op==TK_AND ){ - int d2 = sqlite3VdbeMakeLabel(pParse); - testcase( jumpIfNull==0 ); - sqlite3ExprIfFalse(pParse, pExpr->pLeft, d2, - jumpIfNull^SQLITE_JUMPIFNULL); - sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull); - sqlite3VdbeResolveLabel(v, d2); }else{ - testcase( jumpIfNull==0 ); - sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull); - sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull); + Expr *pFirst, *pSecond; + if( exprEvalRhsFirst(pExpr) ){ + pFirst = pExpr->pRight; + pSecond = pExpr->pLeft; + }else{ + pFirst = pExpr->pLeft; + pSecond = pExpr->pRight; + } + if( op==TK_AND ){ + int d2 = sqlite3VdbeMakeLabel(pParse); + testcase( jumpIfNull==0 ); + sqlite3ExprIfFalse(pParse, pFirst, d2, + jumpIfNull^SQLITE_JUMPIFNULL); + sqlite3ExprIfTrue(pParse, pSecond, dest, jumpIfNull); + sqlite3VdbeResolveLabel(v, d2); + }else{ + testcase( jumpIfNull==0 ); + sqlite3ExprIfTrue(pParse, pFirst, dest, jumpIfNull); + sqlite3ExprIfTrue(pParse, pSecond, dest, jumpIfNull); + } } break; } @@ -116277,10 +117569,16 @@ SQLITE_PRIVATE void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int case TK_GE: case TK_NE: case TK_EQ: { + int addrIsNull; if( sqlite3ExprIsVector(pExpr->pLeft) ) goto default_expr; - testcase( jumpIfNull==0 ); - r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); - r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, ®Free2); + if( ExprHasProperty(pExpr, EP_Subquery) && jumpIfNull!=SQLITE_NULLEQ ){ + addrIsNull = exprComputeOperands(pParse, pExpr, + &r1, &r2, ®Free1, ®Free2); + }else{ + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, ®Free2); + addrIsNull = 0; + } codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op, r1, r2, dest, jumpIfNull, ExprHasProperty(pExpr,EP_Commuted)); assert(TK_LT==OP_Lt); testcase(op==OP_Lt); VdbeCoverageIf(v,op==OP_Lt); @@ -116295,6 +117593,13 @@ SQLITE_PRIVATE void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int VdbeCoverageIf(v, op==OP_Ne && jumpIfNull!=SQLITE_NULLEQ); testcase( regFree1==0 ); testcase( regFree2==0 ); + if( addrIsNull ){ + if( jumpIfNull ){ + sqlite3VdbeChangeP2(v, addrIsNull, dest); + }else{ + sqlite3VdbeJumpHere(v, addrIsNull); + } + } break; } case TK_ISNULL: @@ -116402,17 +117707,27 @@ SQLITE_PRIVATE void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int Expr *pAlt = sqlite3ExprSimplifiedAndOr(pExpr); if( pAlt!=pExpr ){ sqlite3ExprIfFalse(pParse, pAlt, dest, jumpIfNull); - }else if( pExpr->op==TK_AND ){ - testcase( jumpIfNull==0 ); - sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull); - sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull); }else{ - int d2 = sqlite3VdbeMakeLabel(pParse); - testcase( jumpIfNull==0 ); - sqlite3ExprIfTrue(pParse, pExpr->pLeft, d2, - jumpIfNull^SQLITE_JUMPIFNULL); - sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull); - sqlite3VdbeResolveLabel(v, d2); + Expr *pFirst, *pSecond; + if( exprEvalRhsFirst(pExpr) ){ + pFirst = pExpr->pRight; + pSecond = pExpr->pLeft; + }else{ + pFirst = pExpr->pLeft; + pSecond = pExpr->pRight; + } + if( pExpr->op==TK_AND ){ + testcase( jumpIfNull==0 ); + sqlite3ExprIfFalse(pParse, pFirst, dest, jumpIfNull); + sqlite3ExprIfFalse(pParse, pSecond, dest, jumpIfNull); + }else{ + int d2 = sqlite3VdbeMakeLabel(pParse); + testcase( jumpIfNull==0 ); + sqlite3ExprIfTrue(pParse, pFirst, d2, + jumpIfNull^SQLITE_JUMPIFNULL); + sqlite3ExprIfFalse(pParse, pSecond, dest, jumpIfNull); + sqlite3VdbeResolveLabel(v, d2); + } } break; } @@ -116454,10 +117769,16 @@ SQLITE_PRIVATE void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int case TK_GE: case TK_NE: case TK_EQ: { + int addrIsNull; if( sqlite3ExprIsVector(pExpr->pLeft) ) goto default_expr; - testcase( jumpIfNull==0 ); - r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); - r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, ®Free2); + if( ExprHasProperty(pExpr, EP_Subquery) && jumpIfNull!=SQLITE_NULLEQ ){ + addrIsNull = exprComputeOperands(pParse, pExpr, + &r1, &r2, ®Free1, ®Free2); + }else{ + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, ®Free2); + addrIsNull = 0; + } codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op, r1, r2, dest, jumpIfNull,ExprHasProperty(pExpr,EP_Commuted)); assert(TK_LT==OP_Lt); testcase(op==OP_Lt); VdbeCoverageIf(v,op==OP_Lt); @@ -116472,6 +117793,13 @@ SQLITE_PRIVATE void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int VdbeCoverageIf(v, op==OP_Ne && jumpIfNull==SQLITE_NULLEQ); testcase( regFree1==0 ); testcase( regFree2==0 ); + if( addrIsNull ){ + if( jumpIfNull ){ + sqlite3VdbeChangeP2(v, addrIsNull, dest); + }else{ + sqlite3VdbeJumpHere(v, addrIsNull); + } + } break; } case TK_ISNULL: @@ -123437,6 +124765,16 @@ SQLITE_PRIVATE Table *sqlite3LocateTable( if( pMod==0 && sqlite3_strnicmp(zName, "pragma_", 7)==0 ){ pMod = sqlite3PragmaVtabRegister(db, zName); } +#ifndef SQLITE_OMIT_JSON + if( pMod==0 && sqlite3_strnicmp(zName, "json", 4)==0 ){ + pMod = sqlite3JsonVtabRegister(db, zName); + } +#endif +#ifdef SQLITE_ENABLE_CARRAY + if( pMod==0 && sqlite3_stricmp(zName, "carray")==0 ){ + pMod = sqlite3CarrayRegister(db); + } +#endif if( pMod && sqlite3VtabEponymousTableInit(pParse, pMod) ){ testcase( pMod->pEpoTab==0 ); return pMod->pEpoTab; @@ -124075,7 +125413,7 @@ SQLITE_PRIVATE int sqlite3TableColumnToIndex(Index *pIdx, int iCol){ int i; i16 iCol16; assert( iCol>=(-1) && iCol<=SQLITE_MAX_COLUMN ); - assert( pIdx->nColumn<=SQLITE_MAX_COLUMN+1 ); + assert( pIdx->nColumn<=SQLITE_MAX_COLUMN*2 ); iCol16 = iCol; for(i=0; inColumn; i++){ if( iCol16==pIdx->aiColumn[i] ){ @@ -124372,6 +125710,9 @@ SQLITE_PRIVATE void sqlite3StartTable( sqlite3VdbeAddOp3(v, OP_Insert, 0, reg3, reg1); sqlite3VdbeChangeP5(v, OPFLAG_APPEND); sqlite3VdbeAddOp0(v, OP_Close); + }else if( db->init.imposterTable ){ + pTable->tabFlags |= TF_Imposter; + if( db->init.imposterTable>=2 ) pTable->tabFlags |= TF_Readonly; } /* Normal (non-error) return. */ @@ -128141,16 +129482,22 @@ SQLITE_PRIVATE void sqlite3SrcListIndexedBy(Parse *pParse, SrcList *p, Token *pI ** are deleted by this function. */ SQLITE_PRIVATE SrcList *sqlite3SrcListAppendList(Parse *pParse, SrcList *p1, SrcList *p2){ - assert( p1 && p1->nSrc==1 ); + assert( p1 ); + assert( p2 || pParse->nErr ); + assert( p2==0 || p2->nSrc>=1 ); + testcase( p1->nSrc==0 ); if( p2 ){ - SrcList *pNew = sqlite3SrcListEnlarge(pParse, p1, p2->nSrc, 1); + int nOld = p1->nSrc; + SrcList *pNew = sqlite3SrcListEnlarge(pParse, p1, p2->nSrc, nOld); if( pNew==0 ){ sqlite3SrcListDelete(pParse->db, p2); }else{ p1 = pNew; - memcpy(&p1->a[1], p2->a, p2->nSrc*sizeof(SrcItem)); + memcpy(&p1->a[nOld], p2->a, p2->nSrc*sizeof(SrcItem)); + assert( nOld==1 || (p2->a[0].fg.jointype & JT_LTORJ)==0 ); + assert( p1->nSrc>=1 ); + p1->a[0].fg.jointype |= (JT_LTORJ & p2->a[0].fg.jointype); sqlite3DbFree(pParse->db, p2); - p1->a[0].fg.jointype |= (JT_LTORJ & p1->a[1].fg.jointype); } } return p1; @@ -128661,14 +130008,19 @@ SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoOfIndex(Parse *pParse, Index *pIdx){ } if( pParse->nErr ){ assert( pParse->rc==SQLITE_ERROR_MISSING_COLLSEQ ); - if( pIdx->bNoQuery==0 ){ + if( pIdx->bNoQuery==0 + && sqlite3HashFind(&pIdx->pSchema->idxHash, pIdx->zName) + ){ /* Deactivate the index because it contains an unknown collating ** sequence. The only way to reactive the index is to reload the ** schema. Adding the missing collating sequence later does not ** reactive the index. The application had the chance to register ** the missing index using the collation-needed callback. For ** simplicity, SQLite will not give the application a second chance. - */ + ** + ** Except, do not do this if the index is not in the schema hash + ** table. In this case the index is currently being constructed + ** by a CREATE INDEX statement, and retrying will not help. */ pIdx->bNoQuery = 1; pParse->rc = SQLITE_ERROR_RETRY; } @@ -129305,6 +130657,7 @@ SQLITE_PRIVATE void sqlite3SchemaClear(void *p){ for(pElem=sqliteHashFirst(&temp2); pElem; pElem=sqliteHashNext(pElem)){ sqlite3DeleteTrigger(&xdb, (Trigger*)sqliteHashData(pElem)); } + sqlite3HashClear(&temp2); sqlite3HashInit(&pSchema->tblHash); for(pElem=sqliteHashFirst(&temp1); pElem; pElem=sqliteHashNext(pElem)){ @@ -130865,7 +132218,7 @@ static void *contextMalloc(sqlite3_context *context, i64 nByte){ sqlite3 *db = sqlite3_context_db_handle(context); assert( nByte>0 ); testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] ); - testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 ); + testcase( nByte==(i64)db->aLimit[SQLITE_LIMIT_LENGTH]+1 ); if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){ sqlite3_result_error_toobig(context); z = 0; @@ -131536,7 +132889,7 @@ SQLITE_PRIVATE void sqlite3QuoteValue(StrAccum *pStr, sqlite3_value *pValue, int */ static int isNHex(const char *z, int N, u32 *pVal){ int i; - int v = 0; + u32 v = 0; for(i=0; i0 && nSep>0 ){ + if( bNotNull && nSep>0 ){ memcpy(&z[j], zSep, nSep); j += nSep; } memcpy(&z[j], v, k); j += k; + bNotNull = 1; } } } @@ -133016,6 +134371,502 @@ static void signFunc( sqlite3_result_int(context, x<0.0 ? -1 : x>0.0 ? +1 : 0); } +#if defined(SQLITE_ENABLE_PERCENTILE) +/*********************************************************************** +** This section implements the percentile(Y,P) SQL function and similar. +** Requirements: +** +** (1) The percentile(Y,P) function is an aggregate function taking +** exactly two arguments. +** +** (2) If the P argument to percentile(Y,P) is not the same for every +** row in the aggregate then an error is thrown. The word "same" +** in the previous sentence means that the value differ by less +** than 0.001. +** +** (3) If the P argument to percentile(Y,P) evaluates to anything other +** than a number in the range of 0.0 to 100.0 inclusive then an +** error is thrown. +** +** (4) If any Y argument to percentile(Y,P) evaluates to a value that +** is not NULL and is not numeric then an error is thrown. +** +** (5) If any Y argument to percentile(Y,P) evaluates to plus or minus +** infinity then an error is thrown. (SQLite always interprets NaN +** values as NULL.) +** +** (6) Both Y and P in percentile(Y,P) can be arbitrary expressions, +** including CASE WHEN expressions. +** +** (7) The percentile(Y,P) aggregate is able to handle inputs of at least +** one million (1,000,000) rows. +** +** (8) If there are no non-NULL values for Y, then percentile(Y,P) +** returns NULL. +** +** (9) If there is exactly one non-NULL value for Y, the percentile(Y,P) +** returns the one Y value. +** +** (10) If there N non-NULL values of Y where N is two or more and +** the Y values are ordered from least to greatest and a graph is +** drawn from 0 to N-1 such that the height of the graph at J is +** the J-th Y value and such that straight lines are drawn between +** adjacent Y values, then the percentile(Y,P) function returns +** the height of the graph at P*(N-1)/100. +** +** (11) The percentile(Y,P) function always returns either a floating +** point number or NULL. +** +** (12) The percentile(Y,P) is implemented as a single C99 source-code +** file that compiles into a shared-library or DLL that can be loaded +** into SQLite using the sqlite3_load_extension() interface. +** +** (13) A separate median(Y) function is the equivalent percentile(Y,50). +** +** (14) A separate percentile_cont(Y,P) function is equivalent to +** percentile(Y,P/100.0). In other words, the fraction value in +** the second argument is in the range of 0 to 1 instead of 0 to 100. +** +** (15) A separate percentile_disc(Y,P) function is like +** percentile_cont(Y,P) except that instead of returning the weighted +** average of the nearest two input values, it returns the next lower +** value. So the percentile_disc(Y,P) will always return a value +** that was one of the inputs. +** +** (16) All of median(), percentile(Y,P), percentile_cont(Y,P) and +** percentile_disc(Y,P) can be used as window functions. +** +** Differences from standard SQL: +** +** * The percentile_cont(X,P) function is equivalent to the following in +** standard SQL: +** +** (percentile_cont(P) WITHIN GROUP (ORDER BY X)) +** +** The SQLite syntax is much more compact. The standard SQL syntax +** is also supported if SQLite is compiled with the +** -DSQLITE_ENABLE_ORDERED_SET_AGGREGATES option. +** +** * No median(X) function exists in the SQL standard. App developers +** are expected to write "percentile_cont(0.5)WITHIN GROUP(ORDER BY X)". +** +** * No percentile(Y,P) function exists in the SQL standard. Instead of +** percential(Y,P), developers must write this: +** "percentile_cont(P/100.0) WITHIN GROUP (ORDER BY Y)". Note that +** the fraction parameter to percentile() goes from 0 to 100 whereas +** the fraction parameter in SQL standard percentile_cont() goes from +** 0 to 1. +** +** Implementation notes as of 2024-08-31: +** +** * The regular aggregate-function versions of these routines work +** by accumulating all values in an array of doubles, then sorting +** that array using quicksort before computing the answer. Thus +** the runtime is O(NlogN) where N is the number of rows of input. +** +** * For the window-function versions of these routines, the array of +** inputs is sorted as soon as the first value is computed. Thereafter, +** the array is kept in sorted order using an insert-sort. This +** results in O(N*K) performance where K is the size of the window. +** One can imagine alternative implementations that give O(N*logN*logK) +** performance, but they require more complex logic and data structures. +** The developers have elected to keep the asymptotically slower +** algorithm for now, for simplicity, under the theory that window +** functions are seldom used and when they are, the window size K is +** often small. The developers might revisit that decision later, +** should the need arise. +*/ + +/* The following object is the group context for a single percentile() +** aggregate. Remember all input Y values until the very end. +** Those values are accumulated in the Percentile.a[] array. +*/ +typedef struct Percentile Percentile; +struct Percentile { + u64 nAlloc; /* Number of slots allocated for a[] */ + u64 nUsed; /* Number of slots actually used in a[] */ + char bSorted; /* True if a[] is already in sorted order */ + char bKeepSorted; /* True if advantageous to keep a[] sorted */ + char bPctValid; /* True if rPct is valid */ + double rPct; /* Fraction. 0.0 to 1.0 */ + double *a; /* Array of Y values */ +}; + +/* +** Return TRUE if the input floating-point number is an infinity. +*/ +static int percentIsInfinity(double r){ + sqlite3_uint64 u; + assert( sizeof(u)==sizeof(r) ); + memcpy(&u, &r, sizeof(u)); + return ((u>>52)&0x7ff)==0x7ff; +} + +/* +** Return TRUE if two doubles differ by 0.001 or less. +*/ +static int percentSameValue(double a, double b){ + a -= b; + return a>=-0.001 && a<=0.001; +} + +/* +** Search p (which must have p->bSorted) looking for an entry with +** value y. Return the index of that entry. +** +** If bExact is true, return -1 if the entry is not found. +** +** If bExact is false, return the index at which a new entry with +** value y should be insert in order to keep the values in sorted +** order. The smallest return value in this case will be 0, and +** the largest return value will be p->nUsed. +*/ +static i64 percentBinarySearch(Percentile *p, double y, int bExact){ + i64 iFirst = 0; /* First element of search range */ + i64 iLast = (i64)p->nUsed - 1; /* Last element of search range */ + while( iLast>=iFirst ){ + i64 iMid = (iFirst+iLast)/2; + double x = p->a[iMid]; + if( xy ){ + iLast = iMid - 1; + }else{ + return iMid; + } + } + if( bExact ) return -1; + return iFirst; +} + +/* +** Generate an error for a percentile function. +** +** The error format string must have exactly one occurrence of "%%s()" +** (with two '%' characters). That substring will be replaced by the name +** of the function. +*/ +static void percentError(sqlite3_context *pCtx, const char *zFormat, ...){ + char *zMsg1; + char *zMsg2; + va_list ap; + + va_start(ap, zFormat); + zMsg1 = sqlite3_vmprintf(zFormat, ap); + va_end(ap); + zMsg2 = zMsg1 ? sqlite3_mprintf(zMsg1, sqlite3VdbeFuncName(pCtx)) : 0; + sqlite3_result_error(pCtx, zMsg2, -1); + sqlite3_free(zMsg1); + sqlite3_free(zMsg2); +} + +/* +** The "step" function for percentile(Y,P) is called once for each +** input row. +*/ +static void percentStep(sqlite3_context *pCtx, int argc, sqlite3_value **argv){ + Percentile *p; + double rPct; + int eType; + double y; + assert( argc==2 || argc==1 ); + + if( argc==1 ){ + /* Requirement 13: median(Y) is the same as percentile(Y,50). */ + rPct = 0.5; + }else{ + /* P must be a number between 0 and 100 for percentile() or between + ** 0.0 and 1.0 for percentile_cont() and percentile_disc(). + ** + ** The user-data is an integer which is 10 times the upper bound. + */ + double mxFrac = (SQLITE_PTR_TO_INT(sqlite3_user_data(pCtx))&2)? 100.0 : 1.0; + eType = sqlite3_value_numeric_type(argv[1]); + rPct = sqlite3_value_double(argv[1])/mxFrac; + if( (eType!=SQLITE_INTEGER && eType!=SQLITE_FLOAT) + || rPct<0.0 || rPct>1.0 + ){ + percentError(pCtx, "the fraction argument to %%s()" + " is not between 0.0 and %.1f", + (double)mxFrac); + return; + } + } + + /* Allocate the session context. */ + p = (Percentile*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p==0 ) return; + + /* Remember the P value. Throw an error if the P value is different + ** from any prior row, per Requirement (2). */ + if( !p->bPctValid ){ + p->rPct = rPct; + p->bPctValid = 1; + }else if( !percentSameValue(p->rPct,rPct) ){ + percentError(pCtx, "the fraction argument to %%s()" + " is not the same for all input rows"); + return; + } + + /* Ignore rows for which Y is NULL */ + eType = sqlite3_value_type(argv[0]); + if( eType==SQLITE_NULL ) return; + + /* If not NULL, then Y must be numeric. Otherwise throw an error. + ** Requirement 4 */ + if( eType!=SQLITE_INTEGER && eType!=SQLITE_FLOAT ){ + percentError(pCtx, "input to %%s() is not numeric"); + return; + } + + /* Throw an error if the Y value is infinity or NaN */ + y = sqlite3_value_double(argv[0]); + if( percentIsInfinity(y) ){ + percentError(pCtx, "Inf input to %%s()"); + return; + } + + /* Allocate and store the Y */ + if( p->nUsed>=p->nAlloc ){ + u64 n = p->nAlloc*2 + 250; + double *a = sqlite3_realloc64(p->a, sizeof(double)*n); + if( a==0 ){ + sqlite3_free(p->a); + memset(p, 0, sizeof(*p)); + sqlite3_result_error_nomem(pCtx); + return; + } + p->nAlloc = n; + p->a = a; + } + if( p->nUsed==0 ){ + p->a[p->nUsed++] = y; + p->bSorted = 1; + }else if( !p->bSorted || y>=p->a[p->nUsed-1] ){ + p->a[p->nUsed++] = y; + }else if( p->bKeepSorted ){ + i64 i; + i = percentBinarySearch(p, y, 0); + if( i<(int)p->nUsed ){ + memmove(&p->a[i+1], &p->a[i], (p->nUsed-i)*sizeof(p->a[0])); + } + p->a[i] = y; + p->nUsed++; + }else{ + p->a[p->nUsed++] = y; + p->bSorted = 0; + } +} + +/* +** Interchange two doubles. +*/ +#define SWAP_DOUBLE(X,Y) {double ttt=(X);(X)=(Y);(Y)=ttt;} + +/* +** Sort an array of doubles. +** +** Algorithm: quicksort +** +** This is implemented separately rather than using the qsort() routine +** from the standard library because: +** +** (1) To avoid a dependency on qsort() +** (2) To avoid the function call to the comparison routine for each +** comparison. +*/ +static void percentSort(double *a, unsigned int n){ + int iLt; /* Entries before a[iLt] are less than rPivot */ + int iGt; /* Entries at or after a[iGt] are greater than rPivot */ + int i; /* Loop counter */ + double rPivot; /* The pivot value */ + + assert( n>=2 ); + if( a[0]>a[n-1] ){ + SWAP_DOUBLE(a[0],a[n-1]) + } + if( n==2 ) return; + iGt = n-1; + i = n/2; + if( a[0]>a[i] ){ + SWAP_DOUBLE(a[0],a[i]) + }else if( a[i]>a[iGt] ){ + SWAP_DOUBLE(a[i],a[iGt]) + } + if( n==3 ) return; + rPivot = a[i]; + iLt = i = 1; + do{ + if( a[i]iLt ) SWAP_DOUBLE(a[i],a[iLt]) + iLt++; + i++; + }else if( a[i]>rPivot ){ + do{ + iGt--; + }while( iGt>i && a[iGt]>rPivot ); + SWAP_DOUBLE(a[i],a[iGt]) + }else{ + i++; + } + }while( i=2 ) percentSort(a, iLt); + if( n-iGt>=2 ) percentSort(a+iGt, n-iGt); + +/* Uncomment for testing */ +#if 0 + for(i=0; ibSorted==0 ){ + assert( p->nUsed>1 ); + percentSort(p->a, p->nUsed); + p->bSorted = 1; + } + p->bKeepSorted = 1; + + /* Find and remove the row */ + i = percentBinarySearch(p, y, 1); + if( i>=0 ){ + p->nUsed--; + if( i<(int)p->nUsed ){ + memmove(&p->a[i], &p->a[i+1], (p->nUsed - i)*sizeof(p->a[0])); + } + } +} + +/* +** Compute the final output of percentile(). Clean up all allocated +** memory if and only if bIsFinal is true. +*/ +static void percentCompute(sqlite3_context *pCtx, int bIsFinal){ + Percentile *p; + int settings = SQLITE_PTR_TO_INT(sqlite3_user_data(pCtx))&1; /* Discrete? */ + unsigned i1, i2; + double v1, v2; + double ix, vx; + p = (Percentile*)sqlite3_aggregate_context(pCtx, 0); + if( p==0 ) return; + if( p->a==0 ) return; + if( p->nUsed ){ + if( p->bSorted==0 ){ + assert( p->nUsed>1 ); + percentSort(p->a, p->nUsed); + p->bSorted = 1; + } + ix = p->rPct*(p->nUsed-1); + i1 = (unsigned)ix; + if( settings & 1 ){ + vx = p->a[i1]; + }else{ + i2 = ix==(double)i1 || i1==p->nUsed-1 ? i1 : i1+1; + v1 = p->a[i1]; + v2 = p->a[i2]; + vx = v1 + (v2-v1)*(ix-i1); + } + sqlite3_result_double(pCtx, vx); + } + if( bIsFinal ){ + sqlite3_free(p->a); + memset(p, 0, sizeof(*p)); + }else{ + p->bKeepSorted = 1; + } +} +static void percentFinal(sqlite3_context *pCtx){ + percentCompute(pCtx, 1); +} +static void percentValue(sqlite3_context *pCtx){ + percentCompute(pCtx, 0); +} +/****** End of percentile family of functions ******/ +#endif /* SQLITE_ENABLE_PERCENTILE */ + +#if defined(SQLITE_DEBUG) || defined(SQLITE_ENABLE_FILESTAT) +/* +** Implementation of sqlite_filestat(SCHEMA). +** +** Return JSON text that describes low-level debug/diagnostic information +** about the sqlite3_file object associated with SCHEMA. +*/ +static void filestatFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + sqlite3 *db = sqlite3_context_db_handle(context); + const char *zDbName; + sqlite3_str *pStr; + Btree *pBtree; + + zDbName = (const char*)sqlite3_value_text(argv[0]); + pBtree = sqlite3DbNameToBtree(db, zDbName); + if( pBtree ){ + Pager *pPager; + sqlite3_file *fd; + int rc; + sqlite3BtreeEnter(pBtree); + pPager = sqlite3BtreePager(pBtree); + assert( pPager!=0 ); + fd = sqlite3PagerFile(pPager); + pStr = sqlite3_str_new(db); + if( pStr==0 ){ + sqlite3_result_error_nomem(context); + }else{ + sqlite3_str_append(pStr, "{\"db\":", 6); + rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_FILESTAT, pStr); + if( rc ) sqlite3_str_append(pStr, "null", 4); + fd = sqlite3PagerJrnlFile(pPager); + if( fd && fd->pMethods!=0 ){ + sqlite3_str_appendall(pStr, ",\"journal\":"); + rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_FILESTAT, pStr); + if( rc ) sqlite3_str_append(pStr, "null", 4); + } + sqlite3_str_append(pStr, "}", 1); + sqlite3_result_text(context, sqlite3_str_finish(pStr), -1, + sqlite3_free); + } + sqlite3BtreeLeave(pBtree); + }else{ + sqlite3_result_text(context, "{}", 2, SQLITE_STATIC); + } +} +#endif /* SQLITE_DEBUG || SQLITE_ENABLE_FILESTAT */ + #ifdef SQLITE_DEBUG /* ** Implementation of fpdecode(x,y,z) function. @@ -133173,6 +135024,9 @@ SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(void){ INLINE_FUNC(likely, 1, INLINEFUNC_unlikely, SQLITE_FUNC_UNLIKELY), #ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC INLINE_FUNC(sqlite_offset, 1, INLINEFUNC_sqlite_offset, 0 ), +#endif +#if defined(SQLITE_DEBUG) || defined(SQLITE_ENABLE_FILESTAT) + FUNCTION(sqlite_filestat, 1, 0, 0, filestatFunc ), #endif FUNCTION(ltrim, 1, 1, 0, trimFunc ), FUNCTION(ltrim, 2, 1, 0, trimFunc ), @@ -133246,6 +135100,21 @@ SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(void){ WAGGREGATE(string_agg, 2, 0, 0, groupConcatStep, groupConcatFinalize, groupConcatValue, groupConcatInverse, 0), +#ifdef SQLITE_ENABLE_PERCENTILE + WAGGREGATE(median, 1, 0,0, percentStep, + percentFinal, percentValue, percentInverse, + SQLITE_INNOCUOUS|SQLITE_SELFORDER1), + WAGGREGATE(percentile, 2, 0x2,0, percentStep, + percentFinal, percentValue, percentInverse, + SQLITE_INNOCUOUS|SQLITE_SELFORDER1), + WAGGREGATE(percentile_cont, 2, 0,0, percentStep, + percentFinal, percentValue, percentInverse, + SQLITE_INNOCUOUS|SQLITE_SELFORDER1), + WAGGREGATE(percentile_disc, 2, 0x1,0, percentStep, + percentFinal, percentValue, percentInverse, + SQLITE_INNOCUOUS|SQLITE_SELFORDER1), +#endif /* SQLITE_ENABLE_PERCENTILE */ + LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE), #ifdef SQLITE_CASE_SENSITIVE_LIKE LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE), @@ -135000,12 +136869,15 @@ SQLITE_PRIVATE void sqlite3TableAffinity(Vdbe *v, Table *pTab, int iReg){ ** by one slot and insert a new OP_TypeCheck where the current ** OP_MakeRecord is found */ VdbeOp *pPrev; + int p3; sqlite3VdbeAppendP4(v, pTab, P4_TABLE); pPrev = sqlite3VdbeGetLastOp(v); assert( pPrev!=0 ); assert( pPrev->opcode==OP_MakeRecord || sqlite3VdbeDb(v)->mallocFailed ); pPrev->opcode = OP_TypeCheck; - sqlite3VdbeAddOp3(v, OP_MakeRecord, pPrev->p1, pPrev->p2, pPrev->p3); + p3 = pPrev->p3; + pPrev->p3 = 0; + sqlite3VdbeAddOp3(v, OP_MakeRecord, pPrev->p1, pPrev->p2, p3); }else{ /* Insert an isolated OP_Typecheck */ sqlite3VdbeAddOp2(v, OP_TypeCheck, iReg, pTab->nNVCol); @@ -138740,6 +140612,10 @@ struct sqlite3_api_routines { int (*set_clientdata)(sqlite3*, const char*, void*, void(*)(void*)); /* Version 3.50.0 and later */ int (*setlk_timeout)(sqlite3*,int,int); + /* Version 3.51.0 and later */ + int (*set_errmsg)(sqlite3*,int,const char*); + int (*db_status64)(sqlite3*,int,sqlite3_int64*,sqlite3_int64*,int); + }; /* @@ -139075,6 +140951,9 @@ typedef int (*sqlite3_loadext_entry)( #define sqlite3_set_clientdata sqlite3_api->set_clientdata /* Version 3.50.0 and later */ #define sqlite3_setlk_timeout sqlite3_api->setlk_timeout +/* Version 3.51.0 and later */ +#define sqlite3_set_errmsg sqlite3_api->set_errmsg +#define sqlite3_db_status64 sqlite3_api->db_status64 #endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */ #if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) @@ -139598,7 +141477,10 @@ static const sqlite3_api_routines sqlite3Apis = { sqlite3_get_clientdata, sqlite3_set_clientdata, /* Version 3.50.0 and later */ - sqlite3_setlk_timeout + sqlite3_setlk_timeout, + /* Version 3.51.0 and later */ + sqlite3_set_errmsg, + sqlite3_db_status64 }; /* True if x is the directory separator character @@ -141060,6 +142942,22 @@ static int integrityCheckResultRow(Vdbe *v){ return addr; } +/* +** Should table pTab be skipped when doing an integrity_check? +** Return true or false. +** +** If pObjTab is not null, the return true if pTab matches pObjTab. +** +** If pObjTab is null, then return true only if pTab is an imposter table. +*/ +static int tableSkipIntegrityCheck(const Table *pTab, const Table *pObjTab){ + if( pObjTab ){ + return pTab!=pObjTab; + }else{ + return (pTab->tabFlags & TF_Imposter)!=0; + } +} + /* ** Process a pragma statement. ** @@ -142405,7 +144303,7 @@ SQLITE_PRIVATE void sqlite3Pragma( Table *pTab = sqliteHashData(x); /* Current table */ Index *pIdx; /* An index on pTab */ int nIdx; /* Number of indexes on pTab */ - if( pObjTab && pObjTab!=pTab ) continue; + if( tableSkipIntegrityCheck(pTab,pObjTab) ) continue; if( HasRowid(pTab) ) cnt++; for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){ cnt++; } } @@ -142418,7 +144316,7 @@ SQLITE_PRIVATE void sqlite3Pragma( for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){ Table *pTab = sqliteHashData(x); Index *pIdx; - if( pObjTab && pObjTab!=pTab ) continue; + if( tableSkipIntegrityCheck(pTab,pObjTab) ) continue; if( HasRowid(pTab) ) aRoot[++cnt] = pTab->tnum; for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ aRoot[++cnt] = pIdx->tnum; @@ -142449,7 +144347,7 @@ SQLITE_PRIVATE void sqlite3Pragma( int iTab = 0; Table *pTab = sqliteHashData(x); Index *pIdx; - if( pObjTab && pObjTab!=pTab ) continue; + if( tableSkipIntegrityCheck(pTab,pObjTab) ) continue; if( HasRowid(pTab) ){ iTab = cnt++; }else{ @@ -142485,7 +144383,7 @@ SQLITE_PRIVATE void sqlite3Pragma( int r2; /* Previous key for WITHOUT ROWID tables */ int mxCol; /* Maximum non-virtual column number */ - if( pObjTab && pObjTab!=pTab ) continue; + if( tableSkipIntegrityCheck(pTab,pObjTab) ) continue; if( !IsOrdinaryTable(pTab) ) continue; if( isQuick || HasRowid(pTab) ){ pPk = 0; @@ -142809,7 +144707,7 @@ SQLITE_PRIVATE void sqlite3Pragma( Table *pTab = sqliteHashData(x); sqlite3_vtab *pVTab; int a1; - if( pObjTab && pObjTab!=pTab ) continue; + if( tableSkipIntegrityCheck(pTab,pObjTab) ) continue; if( IsOrdinaryTable(pTab) ) continue; if( !IsVirtual(pTab) ) continue; if( pTab->nCol<=0 ){ @@ -143041,6 +144939,8 @@ SQLITE_PRIVATE void sqlite3Pragma( eMode = SQLITE_CHECKPOINT_RESTART; }else if( sqlite3StrICmp(zRight, "truncate")==0 ){ eMode = SQLITE_CHECKPOINT_TRUNCATE; + }else if( sqlite3StrICmp(zRight, "noop")==0 ){ + eMode = SQLITE_CHECKPOINT_NOOP; } } pParse->nMem = 3; @@ -144607,9 +146507,11 @@ static int sqlite3LockAndPrepare( rc = sqlite3Prepare(db, zSql, nBytes, prepFlags, pOld, ppStmt, pzTail); assert( rc==SQLITE_OK || *ppStmt==0 ); if( rc==SQLITE_OK || db->mallocFailed ) break; - }while( (rc==SQLITE_ERROR_RETRY && (cnt++)errMask)==rc ); db->busyHandler.nBusy = 0; @@ -145224,7 +147126,7 @@ static int tableAndColumnIndex( int iEnd, /* Last member of pSrc->a[] to check */ const char *zCol, /* Name of the column we are looking for */ int *piTab, /* Write index of pSrc->a[] here */ - int *piCol, /* Write index of pSrc->a[*piTab].pTab->aCol[] here */ + int *piCol, /* Write index of pSrc->a[*piTab].pSTab->aCol[] here */ int bIgnoreHidden /* Ignore hidden columns */ ){ int i; /* For looping over tables in pSrc */ @@ -145283,8 +147185,7 @@ SQLITE_PRIVATE void sqlite3SetJoinExpr(Expr *p, int iTable, u32 joinFlag){ assert( !ExprHasProperty(p, EP_TokenOnly|EP_Reduced) ); ExprSetVVAProperty(p, EP_NoReduce); p->w.iJoin = iTable; - if( p->op==TK_FUNCTION ){ - assert( ExprUseXList(p) ); + if( ExprUseXList(p) ){ if( p->x.pList ){ int i; for(i=0; ix.pList->nExpr; i++){ @@ -145500,6 +147401,7 @@ static int sqlite3ProcessJoin(Parse *pParse, Select *p){ p->pWhere = sqlite3ExprAnd(pParse, p->pWhere, pRight->u3.pOn); pRight->u3.pOn = 0; pRight->fg.isOn = 1; + p->selFlags |= SF_OnToWhere; } } return 0; @@ -146386,7 +148288,10 @@ static void selectInnerLoop( */ SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoAlloc(sqlite3 *db, int N, int X){ int nExtra = (N+X)*(sizeof(CollSeq*)+1); - KeyInfo *p = sqlite3DbMallocRawNN(db, SZ_KEYINFO(0) + nExtra); + KeyInfo *p; + assert( X>=0 ); + if( NEVER(N+X>0xffff) ) return (KeyInfo*)sqlite3OomFault(db); + p = sqlite3DbMallocRawNN(db, SZ_KEYINFO(0) + nExtra); if( p ){ p->aSortFlags = (u8*)&p->aColl[N+X]; p->nKeyField = (u16)N; @@ -146953,6 +148858,10 @@ static void generateColumnTypes( #endif sqlite3VdbeSetColName(v, i, COLNAME_DECLTYPE, zType, SQLITE_TRANSIENT); } +#else + UNUSED_PARAMETER(pParse); + UNUSED_PARAMETER(pTabList); + UNUSED_PARAMETER(pEList); #endif /* !defined(SQLITE_OMIT_DECLTYPE) */ } @@ -147872,8 +149781,10 @@ static int multiSelect( int priorOp; /* The SRT_ operation to apply to prior selects */ Expr *pLimit; /* Saved values of p->nLimit */ int addr; + int emptyBypass = 0; /* IfEmpty opcode to bypass RHS */ SelectDest uniondest; + testcase( p->op==TK_EXCEPT ); testcase( p->op==TK_UNION ); priorOp = SRT_Union; @@ -147911,6 +149822,8 @@ static int multiSelect( */ if( p->op==TK_EXCEPT ){ op = SRT_Except; + emptyBypass = sqlite3VdbeAddOp1(v, OP_IfEmpty, unionTab); + VdbeCoverage(v); }else{ assert( p->op==TK_UNION ); op = SRT_Union; @@ -147931,6 +149844,7 @@ static int multiSelect( if( p->op==TK_UNION ){ p->nSelectRow = sqlite3LogEstAdd(p->nSelectRow, pPrior->nSelectRow); } + if( emptyBypass ) sqlite3VdbeJumpHere(v, emptyBypass); sqlite3ExprDelete(db, p->pLimit); p->pLimit = pLimit; p->iLimit = 0; @@ -147961,9 +149875,10 @@ static int multiSelect( int tab1, tab2; int iCont, iBreak, iStart; Expr *pLimit; - int addr; + int addr, iLimit, iOffset; SelectDest intersectdest; int r1; + int emptyBypass; /* INTERSECT is different from the others since it requires ** two temporary tables. Hence it has its own case. Begin @@ -147988,14 +149903,28 @@ static int multiSelect( goto multi_select_end; } + /* Initialize LIMIT counters before checking to see if the LHS + ** is empty, in case the jump is taken */ + iBreak = sqlite3VdbeMakeLabel(pParse); + computeLimitRegisters(pParse, p, iBreak); + emptyBypass = sqlite3VdbeAddOp1(v, OP_IfEmpty, tab1); VdbeCoverage(v); + /* Code the current SELECT into temporary table "tab2" */ addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab2, 0); assert( p->addrOpenEphm[1] == -1 ); p->addrOpenEphm[1] = addr; - p->pPrior = 0; + + /* Disable prior SELECTs and the LIMIT counters during the computation + ** of the RHS select */ pLimit = p->pLimit; + iLimit = p->iLimit; + iOffset = p->iOffset; + p->pPrior = 0; p->pLimit = 0; + p->iLimit = 0; + p->iOffset = 0; + intersectdest.iSDParm = tab2; ExplainQueryPlan((pParse, 1, "%s USING TEMP B-TREE", sqlite3SelectOpName(p->op))); @@ -148008,19 +149937,21 @@ static int multiSelect( p->nSelectRow = pPrior->nSelectRow; } sqlite3ExprDelete(db, p->pLimit); + + /* Reinstate the LIMIT counters prior to running the final intersect */ p->pLimit = pLimit; + p->iLimit = iLimit; + p->iOffset = iOffset; /* Generate code to take the intersection of the two temporary ** tables. */ if( rc ) break; assert( p->pEList ); - iBreak = sqlite3VdbeMakeLabel(pParse); - iCont = sqlite3VdbeMakeLabel(pParse); - computeLimitRegisters(pParse, p, iBreak); - sqlite3VdbeAddOp2(v, OP_Rewind, tab1, iBreak); VdbeCoverage(v); + sqlite3VdbeAddOp1(v, OP_Rewind, tab1); r1 = sqlite3GetTempReg(pParse); iStart = sqlite3VdbeAddOp2(v, OP_RowData, tab1, r1); + iCont = sqlite3VdbeMakeLabel(pParse); sqlite3VdbeAddOp4Int(v, OP_NotFound, tab2, iCont, r1, 0); VdbeCoverage(v); sqlite3ReleaseTempReg(pParse, r1); @@ -148030,6 +149961,7 @@ static int multiSelect( sqlite3VdbeAddOp2(v, OP_Next, tab1, iStart); VdbeCoverage(v); sqlite3VdbeResolveLabel(v, iBreak); sqlite3VdbeAddOp2(v, OP_Close, tab2, 0); + sqlite3VdbeJumpHere(v, emptyBypass); sqlite3VdbeAddOp2(v, OP_Close, tab1, 0); break; } @@ -148678,7 +150610,7 @@ static int multiSelectOrderBy( ** ## About "isOuterJoin": ** ** The isOuterJoin column indicates that the replacement will occur into a -** position in the parent that NULL-able due to an OUTER JOIN. Either the +** position in the parent that is NULL-able due to an OUTER JOIN. Either the ** target slot in the parent is the right operand of a LEFT JOIN, or one of ** the left operands of a RIGHT JOIN. In either case, we need to potentially ** bypass the substituted expression with OP_IfNullRow. @@ -148708,6 +150640,7 @@ typedef struct SubstContext { int iTable; /* Replace references to this table */ int iNewTable; /* New table number */ int isOuterJoin; /* Add TK_IF_NULL_ROW opcodes on each replacement */ + int nSelDepth; /* Depth of sub-query recursion. Top==1 */ ExprList *pEList; /* Replacement expressions */ ExprList *pCList; /* Collation sequences for replacement expr */ } SubstContext; @@ -148815,6 +150748,9 @@ static Expr *substExpr( if( pExpr->op==TK_IF_NULL_ROW && pExpr->iTable==pSubst->iTable ){ pExpr->iTable = pSubst->iNewTable; } + if( pExpr->op==TK_AGG_FUNCTION && pExpr->op2>=pSubst->nSelDepth ){ + pExpr->op2--; + } pExpr->pLeft = substExpr(pSubst, pExpr->pLeft); pExpr->pRight = substExpr(pSubst, pExpr->pRight); if( ExprUseXSelect(pExpr) ){ @@ -148852,6 +150788,7 @@ static void substSelect( SrcItem *pItem; int i; if( !p ) return; + pSubst->nSelDepth++; do{ substExprList(pSubst, p->pEList); substExprList(pSubst, p->pGroupBy); @@ -148869,6 +150806,7 @@ static void substSelect( } } }while( doPrior && (p = p->pPrior)!=0 ); + pSubst->nSelDepth--; } #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */ @@ -149480,7 +151418,7 @@ static int flattenSubquery( ** complete, since there may still exist Expr.pTab entries that ** refer to the subquery even after flattening. Ticket #3346. ** - ** pSubitem->pTab is always non-NULL by test restrictions and tests above. + ** pSubitem->pSTab is always non-NULL by test restrictions and tests above. */ if( ALWAYS(pSubitem->pSTab!=0) ){ Table *pTabToDel = pSubitem->pSTab; @@ -149510,17 +151448,12 @@ static int flattenSubquery( pSub = pSub1; for(pParent=p; pParent; pParent=pParent->pPrior, pSub=pSub->pPrior){ int nSubSrc; - u8 jointype = 0; - u8 ltorj = pSrc->a[iFrom].fg.jointype & JT_LTORJ; + u8 jointype = pSubitem->fg.jointype; assert( pSub!=0 ); pSubSrc = pSub->pSrc; /* FROM clause of subquery */ nSubSrc = pSubSrc->nSrc; /* Number of terms in subquery FROM clause */ pSrc = pParent->pSrc; /* FROM clause of the outer query */ - if( pParent==p ){ - jointype = pSubitem->fg.jointype; /* First time through the loop */ - } - /* The subquery uses a single slot of the FROM clause of the outer ** query. If the subquery has more than one element in its FROM clause, ** then expand the outer query to make space for it to hold all elements @@ -149540,6 +151473,7 @@ static int flattenSubquery( pSrc = sqlite3SrcListEnlarge(pParse, pSrc, nSubSrc-1,iFrom+1); if( pSrc==0 ) break; pParent->pSrc = pSrc; + pSubitem = &pSrc->a[iFrom]; } /* Transfer the FROM clause terms from the subquery into the @@ -149554,11 +151488,10 @@ static int flattenSubquery( || pItem->u4.zDatabase==0 ); if( pItem->fg.isUsing ) sqlite3IdListDelete(db, pItem->u3.pUsing); *pItem = pSubSrc->a[i]; - pItem->fg.jointype |= ltorj; + pItem->fg.jointype |= (jointype & JT_LTORJ); memset(&pSubSrc->a[i], 0, sizeof(pSubSrc->a[i])); } - pSrc->a[iFrom].fg.jointype &= JT_LTORJ; - pSrc->a[iFrom].fg.jointype |= jointype | ltorj; + pSubitem->fg.jointype |= jointype; /* Now begin substituting subquery result set expressions for ** references to the iParent in the outer query. @@ -149610,6 +151543,7 @@ static int flattenSubquery( x.iTable = iParent; x.iNewTable = iNewParent; x.isOuterJoin = isOuterJoin; + x.nSelDepth = 0; x.pEList = pSub->pEList; x.pCList = findLeftmostExprlist(pSub); substSelect(&x, pParent, 0); @@ -150195,6 +152129,7 @@ static int pushDownWhereTerms( x.iTable = pSrc->iCursor; x.iNewTable = pSrc->iCursor; x.isOuterJoin = 0; + x.nSelDepth = 0; x.pEList = pSubq->pEList; x.pCList = findLeftmostExprlist(pSubq); pNew = substExpr(&x, pNew); @@ -150592,7 +152527,7 @@ SQLITE_PRIVATE With *sqlite3WithPush(Parse *pParse, With *pWith, u8 bFree){ ** CTE expression, through routine checks to see if the reference is ** a recursive reference to the CTE. ** -** If pFrom matches a CTE according to either of these two above, pFrom->pTab +** If pFrom matches a CTE according to either of these two above, pFrom->pSTab ** and other fields are populated accordingly. ** ** Return 0 if no match is found. @@ -151630,6 +153565,7 @@ static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){ if( pFunc->bOBPayload ){ /* extra columns for the function arguments */ assert( ExprUseXList(pFunc->pFExpr) ); + assert( pFunc->pFExpr->x.pList!=0 ); nExtra += pFunc->pFExpr->x.pList->nExpr; } if( pFunc->bUseSubtype ){ @@ -152219,6 +154155,193 @@ static int fromClauseTermCanBeCoroutine( return 1; } +/* +** Argument pWhere is the WHERE clause belonging to SELECT statement p. This +** function attempts to transform expressions of the form: +** +** EXISTS (SELECT ...) +** +** into joins. For example, given +** +** CREATE TABLE sailors(sid INTEGER PRIMARY KEY, name TEXT); +** CREATE TABLE reserves(sid INT, day DATE, PRIMARY KEY(sid, day)); +** +** SELECT name FROM sailors AS S WHERE EXISTS ( +** SELECT * FROM reserves AS R WHERE S.sid = R.sid AND R.day = '2022-10-25' +** ); +** +** the SELECT statement may be transformed as follows: +** +** SELECT name FROM sailors AS S, reserves AS R +** WHERE S.sid = R.sid AND R.day = '2022-10-25'; +** +** **Approximately**. Really, we have to ensure that the FROM-clause term +** that was formerly inside the EXISTS is only executed once. This is handled +** by setting the SrcItem.fg.fromExists flag, which then causes code in +** the where.c file to exit the corresponding loop after the first successful +** match (if any). +*/ +static SQLITE_NOINLINE void existsToJoin( + Parse *pParse, /* Parsing context */ + Select *p, /* The SELECT statement being optimized */ + Expr *pWhere /* part of the WHERE clause currently being examined */ +){ + if( pParse->nErr==0 + && pWhere!=0 + && !ExprHasProperty(pWhere, EP_OuterON|EP_InnerON) + && ALWAYS(p->pSrc!=0) + && p->pSrc->nSrcop==TK_AND ){ + Expr *pRight = pWhere->pRight; + existsToJoin(pParse, p, pWhere->pLeft); + existsToJoin(pParse, p, pRight); + } + else if( pWhere->op==TK_EXISTS ){ + Select *pSub = pWhere->x.pSelect; + Expr *pSubWhere = pSub->pWhere; + if( pSub->pSrc->nSrc==1 + && (pSub->selFlags & SF_Aggregate)==0 + && !pSub->pSrc->a[0].fg.isSubquery + && pSub->pLimit==0 + ){ + memset(pWhere, 0, sizeof(*pWhere)); + pWhere->op = TK_INTEGER; + pWhere->u.iValue = 1; + ExprSetProperty(pWhere, EP_IntValue); + + assert( p->pWhere!=0 ); + pSub->pSrc->a[0].fg.fromExists = 1; + pSub->pSrc->a[0].fg.jointype |= JT_CROSS; + p->pSrc = sqlite3SrcListAppendList(pParse, p->pSrc, pSub->pSrc); + if( pSubWhere ){ + p->pWhere = sqlite3PExpr(pParse, TK_AND, p->pWhere, pSubWhere); + pSub->pWhere = 0; + } + pSub->pSrc = 0; + sqlite3ParserAddCleanup(pParse, sqlite3SelectDeleteGeneric, pSub); +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x100000 ){ + TREETRACE(0x100000,pParse,p, + ("After EXISTS-to-JOIN optimization:\n")); + sqlite3TreeViewSelect(0, p, 0); + } +#endif + existsToJoin(pParse, p, pSubWhere); + } + } + } +} + +/* +** Type used for Walker callbacks by selectCheckOnClauses(). +*/ +typedef struct CheckOnCtx CheckOnCtx; +struct CheckOnCtx { + SrcList *pSrc; /* SrcList for this context */ + int iJoin; /* Cursor numbers must be =< than this */ + CheckOnCtx *pParent; /* Parent context */ +}; + +/* +** True if the SrcList passed as the only argument contains at least +** one RIGHT or FULL JOIN. False otherwise. +*/ +#define hasRightJoin(pSrc) (((pSrc)->a[0].fg.jointype & JT_LTORJ)!=0) + +/* +** The xExpr callback for the search of invalid ON clause terms. +*/ +static int selectCheckOnClausesExpr(Walker *pWalker, Expr *pExpr){ + CheckOnCtx *pCtx = pWalker->u.pCheckOnCtx; + + /* Check if pExpr is root or near-root of an ON clause constraint that needs + ** to be checked to ensure that it does not refer to tables in its FROM + ** clause to the right of itself. i.e. it is either: + ** + ** + an ON clause on an OUTER join, or + ** + an ON clause on an INNER join within a FROM that features at + ** least one RIGHT or FULL join. + */ + if( (ExprHasProperty(pExpr, EP_OuterON)) + || (ExprHasProperty(pExpr, EP_InnerON) && hasRightJoin(pCtx->pSrc)) + ){ + /* If CheckOnCtx.iJoin is already set, then fall through and process + ** this expression node as normal. Or, if CheckOnCtx.iJoin is still 0, + ** set it to the cursor number of the RHS of the join to which this + ** ON expression was attached and then iterate through the entire + ** expression. */ + assert( pCtx->iJoin==0 || pCtx->iJoin==pExpr->w.iJoin ); + if( pCtx->iJoin==0 ){ + pCtx->iJoin = pExpr->w.iJoin; + sqlite3WalkExprNN(pWalker, pExpr); + pCtx->iJoin = 0; + return WRC_Prune; + } + } + + if( pExpr->op==TK_COLUMN ){ + /* A column expression. Find the SrcList (if any) to which it refers. + ** Then, if CheckOnCtx.iJoin indicates that this expression is part of an + ** ON clause from that SrcList (i.e. if iJoin is non-zero), check that it + ** does not refer to a table to the right of CheckOnCtx.iJoin. */ + do { + SrcList *pSrc = pCtx->pSrc; + int iTab = pExpr->iTable; + if( iTab>=pSrc->a[0].iCursor && iTab<=pSrc->a[pSrc->nSrc-1].iCursor ){ + if( pCtx->iJoin && iTab>pCtx->iJoin ){ + sqlite3ErrorMsg(pWalker->pParse, + "ON clause references tables to its right"); + return WRC_Abort; + } + break; + } + pCtx = pCtx->pParent; + }while( pCtx ); + } + return WRC_Continue; +} + +/* +** The xSelect callback for the search of invalid ON clause terms. +*/ +static int selectCheckOnClausesSelect(Walker *pWalker, Select *pSelect){ + CheckOnCtx *pCtx = pWalker->u.pCheckOnCtx; + if( pSelect->pSrc==pCtx->pSrc || pSelect->pSrc->nSrc==0 ){ + return WRC_Continue; + }else{ + CheckOnCtx sCtx; + memset(&sCtx, 0, sizeof(sCtx)); + sCtx.pSrc = pSelect->pSrc; + sCtx.pParent = pCtx; + pWalker->u.pCheckOnCtx = &sCtx; + sqlite3WalkSelect(pWalker, pSelect); + pWalker->u.pCheckOnCtx = pCtx; + pSelect->selFlags &= ~SF_OnToWhere; + return WRC_Prune; + } +} + +/* +** Check all ON clauses in pSelect to verify that they do not reference +** columns to the right. +*/ +static void selectCheckOnClauses(Parse *pParse, Select *pSelect){ + Walker w; + CheckOnCtx sCtx; + assert( pSelect->selFlags & SF_OnToWhere ); + assert( pSelect->pSrc!=0 && pSelect->pSrc->nSrc>=2 ); + memset(&w, 0, sizeof(w)); + w.pParse = pParse; + w.xExprCallback = selectCheckOnClausesExpr; + w.xSelectCallback = selectCheckOnClausesSelect; + w.u.pCheckOnCtx = &sCtx; + memset(&sCtx, 0, sizeof(sCtx)); + sCtx.pSrc = pSelect->pSrc; + sqlite3WalkExprNN(&w, pSelect->pWhere); + pSelect->selFlags &= ~SF_OnToWhere; +} + /* ** Generate byte-code for the SELECT statement given in the p argument. ** @@ -152346,6 +154469,18 @@ SQLITE_PRIVATE int sqlite3Select( } #endif + /* If the SELECT statement contains ON clauses that were moved into + ** the WHERE clause, go through and verify that none of the terms + ** in the ON clauses reference tables to the right of the ON clause. + ** Do this now, after name resolution, but before query flattening + */ + if( p->selFlags & SF_OnToWhere ){ + selectCheckOnClauses(pParse, p); + if( pParse->nErr ){ + goto select_end; + } + } + /* If the SF_UFSrcCheck flag is set, then this function is being called ** as part of populating the temp table for an UPDATE...FROM statement. ** In this case, it is an error if the target object (pSrc->a[0]) name @@ -152587,6 +154722,13 @@ SQLITE_PRIVATE int sqlite3Select( } #endif + /* If there may be an "EXISTS (SELECT ...)" in the WHERE clause, attempt + ** to change it into a join. */ + if( pParse->bHasExists && OptimizationEnabled(db,SQLITE_ExistsToJoin) ){ + existsToJoin(pParse, p, p->pWhere); + pTabList = p->pSrc; + } + /* Do the WHERE-clause constant propagation optimization if this is ** a join. No need to spend time on this operation for non-join queries ** as the equivalent optimization will be handled by query planner in @@ -153374,12 +155516,12 @@ SQLITE_PRIVATE int sqlite3Select( ** for the next GROUP BY batch. */ sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow); - VdbeComment((v, "output one row")); + VdbeComment((v, "output one row of %d", p->selId)); sqlite3ExprCodeMove(pParse, iBMem, iAMem, pGroupBy->nExpr); sqlite3VdbeAddOp2(v, OP_IfPos, iAbortFlag, addrEnd); VdbeCoverage(v); VdbeComment((v, "check abort flag")); sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset); - VdbeComment((v, "reset accumulator")); + VdbeComment((v, "reset accumulator %d", p->selId)); /* Update the aggregate accumulators based on the content of ** the current row @@ -153387,7 +155529,7 @@ SQLITE_PRIVATE int sqlite3Select( sqlite3VdbeJumpHere(v, addr1); updateAccumulator(pParse, iUseFlag, pAggInfo, eDist); sqlite3VdbeAddOp2(v, OP_Integer, 1, iUseFlag); - VdbeComment((v, "indicate data in accumulator")); + VdbeComment((v, "indicate data in accumulator %d", p->selId)); /* End of the loop */ @@ -153404,7 +155546,7 @@ SQLITE_PRIVATE int sqlite3Select( /* Output the final row of result */ sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow); - VdbeComment((v, "output final row")); + VdbeComment((v, "output final row of %d", p->selId)); /* Jump over the subroutines */ @@ -153425,7 +155567,7 @@ SQLITE_PRIVATE int sqlite3Select( addrOutputRow = sqlite3VdbeCurrentAddr(v); sqlite3VdbeAddOp2(v, OP_IfPos, iUseFlag, addrOutputRow+2); VdbeCoverage(v); - VdbeComment((v, "Groupby result generator entry point")); + VdbeComment((v, "Groupby result generator entry point %d", p->selId)); sqlite3VdbeAddOp1(v, OP_Return, regOutputRow); finalizeAggFunctions(pParse, pAggInfo); sqlite3ExprIfFalse(pParse, pHaving, addrOutputRow+1, SQLITE_JUMPIFNULL); @@ -153433,14 +155575,14 @@ SQLITE_PRIVATE int sqlite3Select( &sDistinct, pDest, addrOutputRow+1, addrSetAbort); sqlite3VdbeAddOp1(v, OP_Return, regOutputRow); - VdbeComment((v, "end groupby result generator")); + VdbeComment((v, "end groupby result generator %d", p->selId)); /* Generate a subroutine that will reset the group-by accumulator */ sqlite3VdbeResolveLabel(v, addrReset); resetAccumulator(pParse, pAggInfo); sqlite3VdbeAddOp2(v, OP_Integer, 0, iUseFlag); - VdbeComment((v, "indicate accumulator empty")); + VdbeComment((v, "indicate accumulator %d empty", p->selId)); sqlite3VdbeAddOp1(v, OP_Return, regReset); if( distFlag!=0 && eDist!=WHERE_DISTINCT_NOOP ){ @@ -154904,7 +157046,10 @@ static void codeReturningTrigger( Returning *pReturning; Select sSelect; SrcList *pFrom; - u8 fromSpace[SZ_SRCLIST_1]; + union { + SrcList sSrc; + u8 fromSpace[SZ_SRCLIST_1]; + } uSrc; assert( v!=0 ); if( !pParse->bReturning ){ @@ -154920,8 +157065,8 @@ static void codeReturningTrigger( return; } memset(&sSelect, 0, sizeof(sSelect)); - pFrom = (SrcList*)fromSpace; - memset(pFrom, 0, SZ_SRCLIST_1); + memset(&uSrc, 0, sizeof(uSrc)); + pFrom = &uSrc.sSrc; sSelect.pEList = sqlite3ExprListDup(db, pReturning->pReturnEL, 0); sSelect.pSrc = pFrom; pFrom->nSrc = 1; @@ -157328,7 +159473,8 @@ SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3RunVacuum( saved_nChange = db->nChange; saved_nTotalChange = db->nTotalChange; saved_mTrace = db->mTrace; - db->flags |= SQLITE_WriteSchema | SQLITE_IgnoreChecks | SQLITE_Comments; + db->flags |= SQLITE_WriteSchema | SQLITE_IgnoreChecks | SQLITE_Comments + | SQLITE_AttachCreate | SQLITE_AttachWrite; db->mDbFlags |= DBFLAG_PreferBuiltin | DBFLAG_Vacuum; db->flags &= ~(u64)(SQLITE_ForeignKeys | SQLITE_ReverseOrder | SQLITE_Defensive | SQLITE_CountRows); @@ -158833,9 +160979,12 @@ SQLITE_PRIVATE int sqlite3VtabEponymousTableInit(Parse *pParse, Module *pMod){ addModuleArgument(pParse, pTab, sqlite3DbStrDup(db, pTab->zName)); addModuleArgument(pParse, pTab, 0); addModuleArgument(pParse, pTab, sqlite3DbStrDup(db, pTab->zName)); + db->nSchemaLock++; rc = vtabCallConstructor(db, pTab, pMod, pModule->xConnect, &zErr); + db->nSchemaLock--; if( rc ){ sqlite3ErrorMsg(pParse, "%s", zErr); + pParse->rc = rc; sqlite3DbFree(db, zErr); sqlite3VtabEponymousTableClear(db, pMod); } @@ -159031,6 +161180,7 @@ struct WhereLevel { int iTabCur; /* The VDBE cursor used to access the table */ int iIdxCur; /* The VDBE cursor used to access pIdx */ int addrBrk; /* Jump here to break out of the loop */ + int addrHalt; /* Abort the query due to empty table or similar */ int addrNxt; /* Jump here to start the next IN combination */ int addrSkip; /* Jump here for next iteration of skip-scan */ int addrCont; /* Jump here to continue with the next loop cycle */ @@ -159236,6 +161386,9 @@ struct WhereTerm { u8 eMatchOp; /* Op for vtab MATCH/LIKE/GLOB/REGEXP terms */ int iParent; /* Disable pWC->a[iParent] when this term disabled */ int leftCursor; /* Cursor number of X in "X " */ +#ifdef SQLITE_DEBUG + int iTerm; /* Which WhereTerm is this, for debug purposes */ +#endif union { struct { int leftColumn; /* Column number of X in "X " */ @@ -159728,7 +161881,6 @@ SQLITE_PRIVATE void sqlite3WhereAddExplainText( #endif { VdbeOp *pOp = sqlite3VdbeGetOp(pParse->pVdbe, addr); - SrcItem *pItem = &pTabList->a[pLevel->iFrom]; sqlite3 *db = pParse->db; /* Database handle */ int isSearch; /* True for a SEARCH. False for SCAN. */ @@ -159751,7 +161903,10 @@ SQLITE_PRIVATE void sqlite3WhereAddExplainText( sqlite3StrAccumInit(&str, db, zBuf, sizeof(zBuf), SQLITE_MAX_LENGTH); str.printfFlags = SQLITE_PRINTF_INTERNAL; - sqlite3_str_appendf(&str, "%s %S", isSearch ? "SEARCH" : "SCAN", pItem); + sqlite3_str_appendf(&str, "%s %S%s", + isSearch ? "SEARCH" : "SCAN", + pItem, + pItem->fg.fromExists ? " EXISTS" : ""); if( (flags & (WHERE_IPK|WHERE_VIRTUALTABLE))==0 ){ const char *zFmt = 0; Index *pIdx; @@ -160995,6 +163150,7 @@ static SQLITE_NOINLINE void filterPullDown( int addrNxt, /* Jump here to bypass inner loops */ Bitmask notReady /* Loops that are not ready */ ){ + int saved_addrBrk; while( ++iLevel < pWInfo->nLevel ){ WhereLevel *pLevel = &pWInfo->a[iLevel]; WhereLoop *pLoop = pLevel->pWLoop; @@ -161003,7 +163159,7 @@ static SQLITE_NOINLINE void filterPullDown( /* ,--- Because sqlite3ConstructBloomFilter() has will not have set ** vvvvv--' pLevel->regFilter if this were true. */ if( NEVER(pLoop->prereq & notReady) ) continue; - assert( pLevel->addrBrk==0 ); + saved_addrBrk = pLevel->addrBrk; pLevel->addrBrk = addrNxt; if( pLoop->wsFlags & WHERE_IPK ){ WhereTerm *pTerm = pLoop->aLTerm[0]; @@ -161033,7 +163189,7 @@ static SQLITE_NOINLINE void filterPullDown( VdbeCoverage(pParse->pVdbe); } pLevel->regFilter = 0; - pLevel->addrBrk = 0; + pLevel->addrBrk = saved_addrBrk; } } @@ -161080,7 +163236,6 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( sqlite3 *db; /* Database connection */ SrcItem *pTabItem; /* FROM clause term being coded */ int addrBrk; /* Jump here to break out of the loop */ - int addrHalt; /* addrBrk for the outermost loop */ int addrCont; /* Jump here to continue with next cycle */ int iRowidReg = 0; /* Rowid is stored in this register, if not zero */ int iReleaseReg = 0; /* Temp register to free before returning */ @@ -161124,7 +163279,7 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( ** there are no IN operators in the constraints, the "addrNxt" label ** is the same as "addrBrk". */ - addrBrk = pLevel->addrBrk = pLevel->addrNxt = sqlite3VdbeMakeLabel(pParse); + addrBrk = pLevel->addrNxt = pLevel->addrBrk; addrCont = pLevel->addrCont = sqlite3VdbeMakeLabel(pParse); /* If this is the right table of a LEFT OUTER JOIN, allocate and @@ -161140,14 +163295,6 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( VdbeComment((v, "init LEFT JOIN match flag")); } - /* Compute a safe address to jump to if we discover that the table for - ** this loop is empty and can never contribute content. */ - for(j=iLevel; j>0; j--){ - if( pWInfo->a[j].iLeftJoin ) break; - if( pWInfo->a[j].pRJ ) break; - } - addrHalt = pWInfo->a[j].addrBrk; - /* Special case of a FROM clause subquery implemented as a co-routine */ if( pTabItem->fg.viaCoroutine ){ int regYield; @@ -161386,7 +163533,7 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( VdbeCoverageIf(v, pX->op==TK_GE); sqlite3ReleaseTempReg(pParse, rTemp); }else{ - sqlite3VdbeAddOp2(v, bRev ? OP_Last : OP_Rewind, iCur, addrHalt); + sqlite3VdbeAddOp2(v, bRev ? OP_Last : OP_Rewind, iCur, pLevel->addrHalt); VdbeCoverageIf(v, bRev==0); VdbeCoverageIf(v, bRev!=0); } @@ -161426,36 +163573,36 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( sqlite3VdbeChangeP5(v, SQLITE_AFF_NUMERIC | SQLITE_JUMPIFNULL); } }else if( pLoop->wsFlags & WHERE_INDEXED ){ - /* Case 4: A scan using an index. + /* Case 4: Search using an index. ** - ** The WHERE clause may contain zero or more equality - ** terms ("==" or "IN" operators) that refer to the N - ** left-most columns of the index. It may also contain - ** inequality constraints (>, <, >= or <=) on the indexed - ** column that immediately follows the N equalities. Only - ** the right-most column can be an inequality - the rest must - ** use the "==" and "IN" operators. For example, if the - ** index is on (x,y,z), then the following clauses are all - ** optimized: + ** The WHERE clause may contain zero or more equality + ** terms ("==" or "IN" or "IS" operators) that refer to the N + ** left-most columns of the index. It may also contain + ** inequality constraints (>, <, >= or <=) on the indexed + ** column that immediately follows the N equalities. Only + ** the right-most column can be an inequality - the rest must + ** use the "==", "IN", or "IS" operators. For example, if the + ** index is on (x,y,z), then the following clauses are all + ** optimized: ** - ** x=5 - ** x=5 AND y=10 - ** x=5 AND y<10 - ** x=5 AND y>5 AND y<10 - ** x=5 AND y=5 AND z<=10 + ** x=5 + ** x=5 AND y=10 + ** x=5 AND y<10 + ** x=5 AND y>5 AND y<10 + ** x=5 AND y=5 AND z<=10 ** - ** The z<10 term of the following cannot be used, only - ** the x=5 term: + ** The z<10 term of the following cannot be used, only + ** the x=5 term: ** - ** x=5 AND z<10 + ** x=5 AND z<10 ** - ** N may be zero if there are inequality constraints. - ** If there are no inequality constraints, then N is at - ** least one. + ** N may be zero if there are inequality constraints. + ** If there are no inequality constraints, then N is at + ** least one. ** - ** This case is also used when there are no WHERE clause - ** constraints but an index is selected anyway, in order - ** to force the output order to conform to an ORDER BY. + ** This case is also used when there are no WHERE clause + ** constraints but an index is selected anyway, in order + ** to force the output order to conform to an ORDER BY. */ static const u8 aStartOp[] = { 0, @@ -162181,7 +164328,7 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( codeCursorHint(pTabItem, pWInfo, pLevel, 0); pLevel->op = aStep[bRev]; pLevel->p1 = iCur; - pLevel->p2 = 1 + sqlite3VdbeAddOp2(v, aStart[bRev], iCur, addrHalt); + pLevel->p2 = 1 + sqlite3VdbeAddOp2(v, aStart[bRev],iCur,pLevel->addrHalt); VdbeCoverageIf(v, bRev==0); VdbeCoverageIf(v, bRev!=0); pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP; @@ -162453,7 +164600,10 @@ SQLITE_PRIVATE SQLITE_NOINLINE void sqlite3WhereRightJoinLoop( WhereLoop *pLoop = pLevel->pWLoop; SrcItem *pTabItem = &pWInfo->pTabList->a[pLevel->iFrom]; SrcList *pFrom; - u8 fromSpace[SZ_SRCLIST_1]; + union { + SrcList sSrc; + u8 fromSpace[SZ_SRCLIST_1]; + } uSrc; Bitmask mAll = 0; int k; @@ -162497,7 +164647,7 @@ SQLITE_PRIVATE SQLITE_NOINLINE void sqlite3WhereRightJoinLoop( sqlite3ExprDup(pParse->db, pTerm->pExpr, 0)); } } - pFrom = (SrcList*)fromSpace; + pFrom = &uSrc.sSrc; pFrom->nSrc = 1; pFrom->nAlloc = 1; memcpy(&pFrom->a[0], pTabItem, sizeof(SrcItem)); @@ -163492,7 +165642,7 @@ static int termIsEquivalence(Parse *pParse, Expr *pExpr, SrcList *pSrc){ if( ExprHasProperty(pExpr, EP_OuterON) ) return 0; /* (3) */ assert( pSrc!=0 ); if( pExpr->op==TK_IS - && pSrc->nSrc + && pSrc->nSrc>=2 && (pSrc->a[0].fg.jointype & JT_LTORJ)!=0 ){ return 0; /* (4) */ @@ -163668,6 +165818,9 @@ static void exprAnalyze( } assert( pWC->nTerm > idxTerm ); pTerm = &pWC->a[idxTerm]; +#ifdef SQLITE_DEBUG + pTerm->iTerm = idxTerm; +#endif pMaskSet = &pWInfo->sMaskSet; pExpr = pTerm->pExpr; assert( pExpr!=0 ); /* Because malloc() has not failed */ @@ -163711,21 +165864,7 @@ static void exprAnalyze( prereqAll |= x; extraRight = x-1; /* ON clause terms may not be used with an index ** on left table of a LEFT JOIN. Ticket #3015 */ - if( (prereqAll>>1)>=x ){ - sqlite3ErrorMsg(pParse, "ON clause references tables to its right"); - return; - } }else if( (prereqAll>>1)>=x ){ - /* The ON clause of an INNER JOIN references a table to its right. - ** Most other SQL database engines raise an error. But SQLite versions - ** 3.0 through 3.38 just put the ON clause constraint into the WHERE - ** clause and carried on. Beginning with 3.39, raise an error only - ** if there is a RIGHT or FULL JOIN in the query. This makes SQLite - ** more like other systems, and also preserves legacy. */ - if( ALWAYS(pSrc->nSrc>0) && (pSrc->a[0].fg.jointype & JT_LTORJ)!=0 ){ - sqlite3ErrorMsg(pParse, "ON clause references tables to its right"); - return; - } ExprClearProperty(pExpr, EP_InnerON); } } @@ -164082,7 +166221,7 @@ static void exprAnalyze( idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC); testcase( idxNew==0 ); pNewTerm = &pWC->a[idxNew]; - pNewTerm->prereqRight = prereqExpr; + pNewTerm->prereqRight = prereqExpr | extraRight; pNewTerm->leftCursor = pLeft->iTable; pNewTerm->u.x.leftColumn = pLeft->iColumn; pNewTerm->eOperator = WO_AUX; @@ -164193,7 +166332,7 @@ static void whereAddLimitExpr( ** ** 1. The SELECT statement has a LIMIT clause, and ** 2. The SELECT statement is not an aggregate or DISTINCT query, and -** 3. The SELECT statement has exactly one object in its from clause, and +** 3. The SELECT statement has exactly one object in its FROM clause, and ** that object is a virtual table, and ** 4. There are no terms in the WHERE clause that will not be passed ** to the virtual table xBestIndex method. @@ -164230,8 +166369,22 @@ SQLITE_PRIVATE void SQLITE_NOINLINE sqlite3WhereAddLimit(WhereClause *pWC, Selec ** (leftCursor==iCsr) test below. */ continue; } - if( pWC->a[ii].leftCursor!=iCsr ) return; - if( pWC->a[ii].prereqRight!=0 ) return; + if( pWC->a[ii].leftCursor==iCsr && pWC->a[ii].prereqRight==0 ) continue; + + /* If this term has a parent with exactly one child, and the parent will + ** be passed through to xBestIndex, then this term can be ignored. */ + if( pWC->a[ii].iParent>=0 ){ + WhereTerm *pParent = &pWC->a[ pWC->a[ii].iParent ]; + if( pParent->leftCursor==iCsr + && pParent->prereqRight==0 + && pParent->nChild==1 + ){ + continue; + } + } + + /* This term will not be passed through. Do not add a LIMIT clause. */ + return; } /* Check condition (5). Return early if it is not met. */ @@ -164895,11 +167048,11 @@ static WhereTerm *whereScanNext(WhereScan *pScan){ pScan->pWC = pWC; pScan->k = k+1; #ifdef WHERETRACE_ENABLED - if( sqlite3WhereTrace & 0x20000 ){ + if( (sqlite3WhereTrace & 0x20000)!=0 && pScan->nEquiv>1 ){ int ii; - sqlite3DebugPrintf("SCAN-TERM %p: nEquiv=%d", - pTerm, pScan->nEquiv); - for(ii=0; iinEquiv; ii++){ + sqlite3DebugPrintf("EQUIVALENT TO {%d:%d} (due to TERM-%d):", + pScan->aiCur[0], pScan->aiColumn[0], pTerm->iTerm); + for(ii=1; iinEquiv; ii++){ sqlite3DebugPrintf(" {%d:%d}", pScan->aiCur[ii], pScan->aiColumn[ii]); } @@ -165670,7 +167823,9 @@ static SQLITE_NOINLINE void constructAutomaticIndex( VdbeCoverage(v); VdbeComment((v, "next row of %s", pSrc->pSTab->zName)); }else{ - addrTop = sqlite3VdbeAddOp1(v, OP_Rewind, pLevel->iTabCur); VdbeCoverage(v); + assert( pLevel->addrHalt ); + addrTop = sqlite3VdbeAddOp2(v, OP_Rewind,pLevel->iTabCur,pLevel->addrHalt); + VdbeCoverage(v); } if( pPartial ){ iContinue = sqlite3VdbeMakeLabel(pParse); @@ -165698,11 +167853,14 @@ static SQLITE_NOINLINE void constructAutomaticIndex( pSrc->u4.pSubq->regResult, pLevel->iIdxCur); sqlite3VdbeGoto(v, addrTop); pSrc->fg.viaCoroutine = 0; + sqlite3VdbeJumpHere(v, addrTop); }else{ sqlite3VdbeAddOp2(v, OP_Next, pLevel->iTabCur, addrTop+1); VdbeCoverage(v); sqlite3VdbeChangeP5(v, SQLITE_STMTSTATUS_AUTOINDEX); + if( (pSrc->fg.jointype & JT_LEFT)!=0 ){ + sqlite3VdbeJumpHere(v, addrTop); + } } - sqlite3VdbeJumpHere(v, addrTop); sqlite3ReleaseTempReg(pParse, regRecord); /* Jump here when skipping the initialization */ @@ -166854,6 +169012,7 @@ SQLITE_PRIVATE void sqlite3WhereTermPrint(WhereTerm *pTerm, int iTerm){ }else{ sqlite3_snprintf(sizeof(zLeft),zLeft,"left=%d", pTerm->leftCursor); } + iTerm = pTerm->iTerm = MAX(iTerm,pTerm->iTerm); sqlite3DebugPrintf( "TERM-%-3d %p %s %-12s op=%03x wtFlags=%04x", iTerm, pTerm, zType, zLeft, pTerm->eOperator, pTerm->wtFlags); @@ -167995,6 +170154,7 @@ static int whereLoopAddBtreeIndex( && pProbe->hasStat1!=0 && OptimizationEnabled(db, SQLITE_SkipScan) && pProbe->aiRowLogEst[saved_nEq+1]>=42 /* TUNING: Minimum for skip-scan */ + && pSrc->fg.fromExists==0 && (rc = whereLoopResize(db, pNew, pNew->nLTerm+1))==SQLITE_OK ){ LogEst nIter; @@ -169566,6 +171726,10 @@ static i8 wherePathSatisfiesOrderBy( && ((wctrlFlags&(WHERE_DISTINCTBY|WHERE_SORTBYGROUP))!=WHERE_DISTINCTBY) ){ obSat = obDone; + }else{ + /* No further ORDER BY terms may be matched. So this call should + ** return >=0, not -1. Clear isOrderDistinct to ensure it does so. */ + isOrderDistinct = 0; } break; } @@ -170311,8 +172475,15 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ ** mxChoice best-so-far paths. ** ** First look for an existing path among best-so-far paths - ** that covers the same set of loops and has the same isOrdered - ** setting as the current path candidate. + ** that: + ** (1) covers the same set of loops, and + ** (2) has a compatible isOrdered value. + ** + ** "Compatible isOrdered value" means either + ** (A) both have isOrdered==-1, or + ** (B) both have isOrder>=0, or + ** (C) ordering does not matter because this is the last round + ** of the solver. ** ** The term "((pTo->isOrdered^isOrdered)&0x80)==0" is equivalent ** to (pTo->isOrdered==(-1))==(isOrdered==(-1))" for the range @@ -170321,7 +172492,7 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ testcase( nTo==0 ); for(jj=0, pTo=aTo; jjmaskLoop==maskNew - && ((pTo->isOrdered^isOrdered)&0x80)==0 + && ( ((pTo->isOrdered^isOrdered)&0x80)==0 || iLoop==nLoop-1 ) ){ testcase( jj==nTo-1 ); break; @@ -170476,11 +172647,10 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ return SQLITE_ERROR; } - /* Find the lowest cost path. pFrom will be left pointing to that path */ + /* Only one path is available, which is the best path */ + assert( nFrom==1 ); pFrom = aFrom; - for(ii=1; iirCost>aFrom[ii].rCost ) pFrom = &aFrom[ii]; - } + assert( pWInfo->nLevel==nLoop ); /* Load the lowest cost path into pWInfo */ for(iLoop=0; iLoopnLevel; i++){ WhereLoop *p = pWInfo->a[i].pWLoop; if( p==0 ) break; - if( (p->wsFlags & WHERE_VIRTUALTABLE)!=0 ) continue; + if( (p->wsFlags & WHERE_VIRTUALTABLE)!=0 ){ + /* Treat a vtab scan as similar to a full-table scan */ + break; + } if( (p->wsFlags & (WHERE_COLUMN_EQ|WHERE_COLUMN_NULL|WHERE_COLUMN_IN))!=0 ){ u8 iTab = p->iTab; WhereLoop *pLoop; @@ -171551,6 +173724,14 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( pTab = pTabItem->pSTab; iDb = sqlite3SchemaToIndex(db, pTab->pSchema); pLoop = pLevel->pWLoop; + pLevel->addrBrk = sqlite3VdbeMakeLabel(pParse); + if( ii==0 || (pTabItem[0].fg.jointype & JT_LEFT)!=0 ){ + pLevel->addrHalt = pLevel->addrBrk; + }else if( pWInfo->a[ii-1].pRJ ){ + pLevel->addrHalt = pWInfo->a[ii-1].addrBrk; + }else{ + pLevel->addrHalt = pWInfo->a[ii-1].addrHalt; + } if( (pTab->tabFlags & TF_Ephemeral)!=0 || IsView(pTab) ){ /* Do nothing */ }else @@ -171602,6 +173783,13 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( sqlite3VdbeAddOp4Dup8(v, OP_ColumnsUsed, pTabItem->iCursor, 0, 0, (const u8*)&pTabItem->colUsed, P4_INT64); #endif + if( ii>=2 + && (pTabItem[0].fg.jointype & (JT_LTORJ|JT_LEFT))==0 + && pLevel->addrHalt==pWInfo->a[0].addrHalt + ){ + sqlite3VdbeAddOp2(v, OP_IfEmpty, pTabItem->iCursor, pWInfo->iBreak); + VdbeCoverage(v); + } }else{ sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName); } @@ -171858,6 +174046,23 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ sqlite3VdbeAddOp2(v, OP_Goto, 1, pLevel->p2); } #endif /* SQLITE_DISABLE_SKIPAHEAD_DISTINCT */ + if( pTabList->a[pLevel->iFrom].fg.fromExists && i==pWInfo->nLevel-1 ){ + /* If the EXISTS-to-JOIN optimization was applied, then the EXISTS + ** loop(s) will be the inner-most loops of the join. There might be + ** multiple EXISTS loops, but they will all be nested, and the join + ** order will not have been changed by the query planner. If the + ** inner-most EXISTS loop sees a single successful row, it should + ** break out of *all* EXISTS loops. But only the inner-most of the + ** nested EXISTS loops should do this breakout. */ + int nOuter = 0; /* Nr of outer EXISTS that this one is nested within */ + while( nOutera[pLevel[-nOuter-1].iFrom].fg.fromExists ) break; + nOuter++; + } + testcase( nOuter>0 ); + sqlite3VdbeAddOp2(v, OP_Goto, 0, pLevel[-nOuter].addrBrk); + VdbeComment((v, "EXISTS break")); + } /* The common case: Advance to the next row */ if( pLevel->addrCont ) sqlite3VdbeResolveLabel(v, pLevel->addrCont); sqlite3VdbeAddOp3(v, pLevel->op, pLevel->p1, pLevel->p2, pLevel->p3); @@ -174708,7 +176913,7 @@ static int windowExprGtZero(Parse *pParse, Expr *pExpr){ ** ** ROWS BETWEEN FOLLOWING AND FOLLOWING ** -** ... loop started by sqlite3WhereBegin() ... +** ... loop started by sqlite3WhereBegin() ... ** if( new partition ){ ** Gosub flush ** } @@ -175226,6 +177431,12 @@ SQLITE_PRIVATE void sqlite3WindowCodeStep( addrBreak2 = windowCodeOp(&s, WINDOW_AGGINVERSE, 0, 1); }else{ assert( pMWin->eEnd==TK_FOLLOWING ); + /* assert( regStart>=0 ); + ** regEnd = regEnd - regStart; + ** regStart = 0; */ + sqlite3VdbeAddOp3(v, OP_Subtract, regStart, regEnd, regEnd); + sqlite3VdbeAddOp2(v, OP_Integer, 0, regStart); + addrStart = sqlite3VdbeCurrentAddr(v); addrBreak1 = windowCodeOp(&s, WINDOW_RETURN_ROW, regEnd, 1); addrBreak2 = windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 1); @@ -181621,8 +183832,9 @@ static int analyzeFilterKeyword(const unsigned char *z, int lastToken){ ** Return the length (in bytes) of the token that begins at z[0]. ** Store the token type in *tokenType before returning. */ -SQLITE_PRIVATE int sqlite3GetToken(const unsigned char *z, int *tokenType){ - int i, c; +SQLITE_PRIVATE i64 sqlite3GetToken(const unsigned char *z, int *tokenType){ + i64 i; + int c; switch( aiClass[*z] ){ /* Switch on the character-class of the first byte ** of the token. See the comment on the CC_ defines ** above. */ @@ -181950,7 +184162,7 @@ SQLITE_PRIVATE int sqlite3GetToken(const unsigned char *z, int *tokenType){ SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql){ int nErr = 0; /* Number of errors encountered */ void *pEngine; /* The LEMON-generated LALR(1) parser */ - int n = 0; /* Length of the next token token */ + i64 n = 0; /* Length of the next token token */ int tokenType; /* type of the next token */ int lastTokenParsed = -1; /* type of the previous token */ sqlite3 *db = pParse->db; /* The database connection */ @@ -182053,13 +184265,13 @@ SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql){ }else if( tokenType!=TK_QNUMBER ){ Token x; x.z = zSql; - x.n = n; + x.n = (u32)n; sqlite3ErrorMsg(pParse, "unrecognized token: \"%T\"", &x); break; } } pParse->sLastToken.z = zSql; - pParse->sLastToken.n = n; + pParse->sLastToken.n = (u32)n; sqlite3Parser(pEngine, tokenType, pParse->sLastToken); lastTokenParsed = tokenType; zSql += n; @@ -182135,7 +184347,7 @@ SQLITE_PRIVATE char *sqlite3Normalize( ){ sqlite3 *db; /* The database connection */ int i; /* Next unread byte of zSql[] */ - int n; /* length of current token */ + i64 n; /* length of current token */ int tokenType; /* type of current token */ int prevType = 0; /* Previous non-whitespace token */ int nParen; /* Number of nested levels of parentheses */ @@ -182713,9 +184925,6 @@ static int (*const sqlite3BuiltinExtensions[])(sqlite3*) = { sqlite3DbstatRegister, #endif sqlite3TestExtInit, -#if !defined(SQLITE_OMIT_VIRTUALTABLE) && !defined(SQLITE_OMIT_JSON) - sqlite3JsonTableFunctions, -#endif #ifdef SQLITE_ENABLE_STMTVTAB sqlite3StmtVtabInit, #endif @@ -184036,6 +186245,7 @@ SQLITE_PRIVATE void sqlite3LeaveMutexAndCloseZombie(sqlite3 *db){ /* Clear the TEMP schema separately and last */ if( db->aDb[1].pSchema ){ sqlite3SchemaClear(db->aDb[1].pSchema); + assert( db->aDb[1].pSchema->trigHash.count==0 ); } sqlite3VtabUnlockList(db); @@ -184171,6 +186381,9 @@ SQLITE_PRIVATE const char *sqlite3ErrName(int rc){ case SQLITE_OK: zName = "SQLITE_OK"; break; case SQLITE_ERROR: zName = "SQLITE_ERROR"; break; case SQLITE_ERROR_SNAPSHOT: zName = "SQLITE_ERROR_SNAPSHOT"; break; + case SQLITE_ERROR_RETRY: zName = "SQLITE_ERROR_RETRY"; break; + case SQLITE_ERROR_MISSING_COLLSEQ: + zName = "SQLITE_ERROR_MISSING_COLLSEQ"; break; case SQLITE_INTERNAL: zName = "SQLITE_INTERNAL"; break; case SQLITE_PERM: zName = "SQLITE_PERM"; break; case SQLITE_ABORT: zName = "SQLITE_ABORT"; break; @@ -185352,6 +187565,29 @@ SQLITE_API const char *sqlite3_errmsg(sqlite3 *db){ return z; } +/* +** Set the error code and error message associated with the database handle. +** +** This routine is intended to be called by outside extensions (ex: the +** Session extension). Internal logic should invoke sqlite3Error() or +** sqlite3ErrorWithMsg() directly. +*/ +SQLITE_API int sqlite3_set_errmsg(sqlite3 *db, int errcode, const char *zMsg){ + int rc = SQLITE_OK; + if( !sqlite3SafetyCheckOk(db) ){ + return SQLITE_MISUSE_BKPT; + } + sqlite3_mutex_enter(db->mutex); + if( zMsg ){ + sqlite3ErrorWithMsg(db, errcode, "%s", zMsg); + }else{ + sqlite3Error(db, errcode); + } + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; +} + /* ** Return the byte offset of the most recent error */ @@ -187176,13 +189412,15 @@ SQLITE_API int sqlite3_test_control(int op, ...){ break; } - /* sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, db, dbName, onOff, tnum); + /* sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, db, dbName, mode, tnum); ** ** This test control is used to create imposter tables. "db" is a pointer ** to the database connection. dbName is the database name (ex: "main" or - ** "temp") which will receive the imposter. "onOff" turns imposter mode on - ** or off. "tnum" is the root page of the b-tree to which the imposter - ** table should connect. + ** "temp") which will receive the imposter. "mode" turns imposter mode on + ** or off. mode==0 means imposter mode is off. mode==1 means imposter mode + ** is on. mode==2 means imposter mode is on but results in an imposter + ** table that is read-only unless writable_schema is on. "tnum" is the + ** root page of the b-tree to which the imposter table should connect. ** ** Enable imposter mode only when the schema has already been parsed. Then ** run a single CREATE TABLE statement to construct the imposter table in @@ -188419,6 +190657,13 @@ SQLITE_PRIVATE void sqlite3ConnectionClosed(sqlite3 *db){ #ifndef _FTSINT_H #define _FTSINT_H +/* +** Activate assert() only if SQLITE_TEST is enabled. +*/ +#if !defined(NDEBUG) && !defined(SQLITE_DEBUG) +# define NDEBUG 1 +#endif + /* #include */ /* #include */ /* #include */ @@ -188426,10 +190671,6 @@ SQLITE_PRIVATE void sqlite3ConnectionClosed(sqlite3 *db){ /* #include */ /* #include */ -#if !defined(NDEBUG) && !defined(SQLITE_DEBUG) -# define NDEBUG 1 -#endif - /* FTS3/FTS4 require virtual tables */ #ifdef SQLITE_OMIT_VIRTUALTABLE # undef SQLITE_ENABLE_FTS3 @@ -188872,13 +191113,6 @@ typedef sqlite3_int64 i64; /* 8-byte signed integer */ */ #define UNUSED_PARAMETER(x) (void)(x) -/* -** Activate assert() only if SQLITE_TEST is enabled. -*/ -#if !defined(NDEBUG) && !defined(SQLITE_DEBUG) -# define NDEBUG 1 -#endif - /* ** The TESTONLY macro is used to enclose variable declarations or ** other bits of code that are needed to support the arguments @@ -188899,7 +191133,7 @@ typedef sqlite3_int64 i64; /* 8-byte signed integer */ ** Macros needed to provide flexible arrays in a portable way */ #ifndef offsetof -# define offsetof(STRUCTURE,FIELD) ((size_t)((char*)&((STRUCTURE*)0)->FIELD)) +# define offsetof(ST,M) ((size_t)((char*)&((ST*)0)->M - (char*)0)) #endif #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) # define FLEXARRAY @@ -203153,8 +205387,8 @@ struct NodeWriter { ** to an appendable b-tree segment. */ struct IncrmergeWriter { - int nLeafEst; /* Space allocated for leaf blocks */ - int nWork; /* Number of leaf pages flushed */ + i64 nLeafEst; /* Space allocated for leaf blocks */ + i64 nWork; /* Number of leaf pages flushed */ sqlite3_int64 iAbsLevel; /* Absolute level of input segments */ int iIdx; /* Index of *output* segment in iAbsLevel+1 */ sqlite3_int64 iStart; /* Block number of first allocated block */ @@ -203900,7 +206134,7 @@ static int fts3IncrmergeWriter( ){ int rc; /* Return Code */ int i; /* Iterator variable */ - int nLeafEst = 0; /* Blocks allocated for leaf nodes */ + i64 nLeafEst = 0; /* Blocks allocated for leaf nodes */ sqlite3_stmt *pLeafEst = 0; /* SQL used to determine nLeafEst */ sqlite3_stmt *pFirstBlock = 0; /* SQL used to determine first block */ @@ -203910,7 +206144,7 @@ static int fts3IncrmergeWriter( sqlite3_bind_int64(pLeafEst, 1, iAbsLevel); sqlite3_bind_int64(pLeafEst, 2, pCsr->nSegment); if( SQLITE_ROW==sqlite3_step(pLeafEst) ){ - nLeafEst = sqlite3_column_int(pLeafEst, 0); + nLeafEst = sqlite3_column_int64(pLeafEst, 0); } rc = sqlite3_reset(pLeafEst); } @@ -205293,10 +207527,6 @@ SQLITE_PRIVATE int sqlite3Fts3Optimize(Fts3Table *p){ /* #include */ /* #include */ -#ifndef SQLITE_AMALGAMATION -typedef sqlite3_int64 i64; -#endif - /* ** Characters that may appear in the second argument to matchinfo(). */ @@ -210150,7 +212380,7 @@ static u32 jsonTranslateBlobToText( jsonAppendChar(pOut, '\''); break; case 'v': - jsonAppendRawNZ(pOut, "\\u0009", 6); + jsonAppendRawNZ(pOut, "\\u000b", 6); break; case 'x': if( sz2<4 ){ @@ -211000,19 +213230,27 @@ static void jsonReturnTextJsonFromBlob( ** ** If the value is a primitive, return it as an SQL value. ** If the value is an array or object, return it as either -** JSON text or the BLOB encoding, depending on the JSON_B flag -** on the userdata. +** JSON text or the BLOB encoding, depending on the eMode flag +** as follows: +** +** eMode==0 JSONB if the JSON_B flag is set in userdata or +** text if the JSON_B flag is omitted from userdata. +** +** eMode==1 Text +** +** eMode==2 JSONB */ static void jsonReturnFromBlob( JsonParse *pParse, /* Complete JSON parse tree */ u32 i, /* Index of the node */ sqlite3_context *pCtx, /* Return value for this function */ - int textOnly /* return text JSON. Disregard user-data */ + int eMode /* Format of return: text of JSONB */ ){ u32 n, sz; int rc; sqlite3 *db = sqlite3_context_db_handle(pCtx); + assert( eMode>=0 && eMode<=2 ); n = jsonbPayloadSize(pParse, i, &sz); if( n==0 ){ sqlite3_result_error(pCtx, "malformed JSON", -1); @@ -211053,7 +213291,19 @@ static void jsonReturnFromBlob( rc = sqlite3DecOrHexToI64(z, &iRes); sqlite3DbFree(db, z); if( rc==0 ){ - sqlite3_result_int64(pCtx, bNeg ? -iRes : iRes); + if( iRes<0 ){ + /* A hexadecimal literal with 16 significant digits and with the + ** high-order bit set is a negative integer in SQLite (and hence + ** iRes comes back as negative) but should be interpreted as a + ** positive value if it occurs within JSON. The value is too + ** large to appear as an SQLite integer so it must be converted + ** into floating point. */ + double r; + r = (double)*(sqlite3_uint64*)&iRes; + sqlite3_result_double(pCtx, bNeg ? -r : r); + }else{ + sqlite3_result_int64(pCtx, bNeg ? -iRes : iRes); + } }else if( rc==3 && bNeg ){ sqlite3_result_int64(pCtx, SMALLEST_INT64); }else if( rc==1 ){ @@ -211131,8 +213381,14 @@ static void jsonReturnFromBlob( } case JSONB_ARRAY: case JSONB_OBJECT: { - int flags = textOnly ? 0 : SQLITE_PTR_TO_INT(sqlite3_user_data(pCtx)); - if( flags & JSON_BLOB ){ + if( eMode==0 ){ + if( (SQLITE_PTR_TO_INT(sqlite3_user_data(pCtx)) & JSON_BLOB)!=0 ){ + eMode = 2; + }else{ + eMode = 1; + } + } + if( eMode==2 ){ sqlite3_result_blob(pCtx, &pParse->aBlob[i], sz+n, SQLITE_TRANSIENT); }else{ jsonReturnTextJsonFromBlob(pCtx, &pParse->aBlob[i], sz+n); @@ -212779,6 +215035,7 @@ struct JsonEachCursor { u32 nRoot; /* Size of the root path in bytes */ u8 eType; /* Type of the container for element i */ u8 bRecursive; /* True for json_tree(). False for json_each() */ + u8 eMode; /* 1 for json_each(). 2 for jsonb_each() */ u32 nParent; /* Current nesting depth */ u32 nParentAlloc; /* Space allocated for aParent[] */ JsonParent *aParent; /* Parent elements of i */ @@ -212790,6 +215047,8 @@ typedef struct JsonEachConnection JsonEachConnection; struct JsonEachConnection { sqlite3_vtab base; /* Base class - must be first */ sqlite3 *db; /* Database connection */ + u8 eMode; /* 1 for json_each(). 2 for jsonb_each() */ + u8 bRecursive; /* True for json_tree(). False for json_each() */ }; @@ -212832,6 +215091,8 @@ static int jsonEachConnect( if( pNew==0 ) return SQLITE_NOMEM; sqlite3_vtab_config(db, SQLITE_VTAB_INNOCUOUS); pNew->db = db; + pNew->eMode = argv[0][4]=='b' ? 2 : 1; + pNew->bRecursive = argv[0][4+pNew->eMode]=='t'; } return rc; } @@ -212843,8 +215104,8 @@ static int jsonEachDisconnect(sqlite3_vtab *pVtab){ return SQLITE_OK; } -/* constructor for a JsonEachCursor object for json_each(). */ -static int jsonEachOpenEach(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){ +/* constructor for a JsonEachCursor object for json_each()/json_tree(). */ +static int jsonEachOpen(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){ JsonEachConnection *pVtab = (JsonEachConnection*)p; JsonEachCursor *pCur; @@ -212852,21 +215113,13 @@ static int jsonEachOpenEach(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){ pCur = sqlite3DbMallocZero(pVtab->db, sizeof(*pCur)); if( pCur==0 ) return SQLITE_NOMEM; pCur->db = pVtab->db; + pCur->eMode = pVtab->eMode; + pCur->bRecursive = pVtab->bRecursive; jsonStringZero(&pCur->path); *ppCursor = &pCur->base; return SQLITE_OK; } -/* constructor for a JsonEachCursor object for json_tree(). */ -static int jsonEachOpenTree(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){ - int rc = jsonEachOpenEach(p, ppCursor); - if( rc==SQLITE_OK ){ - JsonEachCursor *pCur = (JsonEachCursor*)*ppCursor; - pCur->bRecursive = 1; - } - return rc; -} - /* Reset a JsonEachCursor back to its original state. Free any memory ** held. */ static void jsonEachCursorReset(JsonEachCursor *p){ @@ -213071,7 +215324,7 @@ static int jsonEachColumn( } case JEACH_VALUE: { u32 i = jsonSkipLabel(p); - jsonReturnFromBlob(&p->sParse, i, ctx, 1); + jsonReturnFromBlob(&p->sParse, i, ctx, p->eMode); if( (p->sParse.aBlob[i] & 0x0f)>=JSONB_ARRAY ){ sqlite3_result_subtype(ctx, JSON_SUBTYPE); } @@ -213315,36 +215568,7 @@ static sqlite3_module jsonEachModule = { jsonEachBestIndex, /* xBestIndex */ jsonEachDisconnect, /* xDisconnect */ 0, /* xDestroy */ - jsonEachOpenEach, /* xOpen - open a cursor */ - jsonEachClose, /* xClose - close a cursor */ - jsonEachFilter, /* xFilter - configure scan constraints */ - jsonEachNext, /* xNext - advance a cursor */ - jsonEachEof, /* xEof - check for end of scan */ - jsonEachColumn, /* xColumn - read data */ - jsonEachRowid, /* xRowid - read data */ - 0, /* xUpdate */ - 0, /* xBegin */ - 0, /* xSync */ - 0, /* xCommit */ - 0, /* xRollback */ - 0, /* xFindMethod */ - 0, /* xRename */ - 0, /* xSavepoint */ - 0, /* xRelease */ - 0, /* xRollbackTo */ - 0, /* xShadowName */ - 0 /* xIntegrity */ -}; - -/* The methods of the json_tree virtual table. */ -static sqlite3_module jsonTreeModule = { - 0, /* iVersion */ - 0, /* xCreate */ - jsonEachConnect, /* xConnect */ - jsonEachBestIndex, /* xBestIndex */ - jsonEachDisconnect, /* xDisconnect */ - 0, /* xDestroy */ - jsonEachOpenTree, /* xOpen - open a cursor */ + jsonEachOpen, /* xOpen - open a cursor */ jsonEachClose, /* xClose - close a cursor */ jsonEachFilter, /* xFilter - configure scan constraints */ jsonEachNext, /* xNext - advance a cursor */ @@ -213433,22 +215657,21 @@ SQLITE_PRIVATE void sqlite3RegisterJsonFunctions(void){ #if !defined(SQLITE_OMIT_VIRTUALTABLE) && !defined(SQLITE_OMIT_JSON) /* -** Register the JSON table-valued functions +** Register the JSON table-valued function named zName and return a +** pointer to its Module object. Return NULL if something goes wrong. */ -SQLITE_PRIVATE int sqlite3JsonTableFunctions(sqlite3 *db){ - int rc = SQLITE_OK; - static const struct { - const char *zName; - sqlite3_module *pModule; - } aMod[] = { - { "json_each", &jsonEachModule }, - { "json_tree", &jsonTreeModule }, - }; +SQLITE_PRIVATE Module *sqlite3JsonVtabRegister(sqlite3 *db, const char *zName){ unsigned int i; - for(i=0; iaModule, zName)==0 ); + for(i=0; i */ @@ -213553,7 +215776,7 @@ typedef unsigned int u32; # define NEVER(X) (X) #endif #ifndef offsetof -#define offsetof(STRUCTURE,FIELD) ((size_t)((char*)&((STRUCTURE*)0)->FIELD)) +# define offsetof(ST,M) ((size_t)((char*)&((ST*)0)->M - (char*)0)) #endif #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) # define FLEXARRAY @@ -214591,6 +216814,12 @@ static void resetCursor(RtreeCursor *pCsr){ pCsr->base.pVtab = (sqlite3_vtab*)pRtree; pCsr->pReadAux = pStmt; + /* The following will only fail if the previous sqlite3_step() call failed, + ** in which case the error has already been caught. This statement never + ** encounters an error within an sqlite3_column_xxx() function, as it + ** calls sqlite3_column_value(), which does not use malloc(). So it is safe + ** to ignore the error code here. */ + sqlite3_reset(pStmt); } /* @@ -227679,8 +229908,8 @@ typedef struct DbpageCursor DbpageCursor; struct DbpageCursor { sqlite3_vtab_cursor base; /* Base class. Must be first */ - int pgno; /* Current page number */ - int mxPgno; /* Last page to visit on this scan */ + Pgno pgno; /* Current page number */ + Pgno mxPgno; /* Last page to visit on this scan */ Pager *pPager; /* Pager being read/written */ DbPage *pPage1; /* Page 1 of the database */ int iDb; /* Index of database to analyze */ @@ -227817,7 +230046,7 @@ static int dbpageOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){ }else{ memset(pCsr, 0, sizeof(DbpageCursor)); pCsr->base.pVtab = pVTab; - pCsr->pgno = -1; + pCsr->pgno = 0; } *ppCursor = (sqlite3_vtab_cursor *)pCsr; @@ -227870,7 +230099,8 @@ static int dbpageFilter( sqlite3 *db = pTab->db; Btree *pBt; - (void)idxStr; + UNUSED_PARAMETER(idxStr); + UNUSED_PARAMETER(argc); /* Default setting is no rows of result */ pCsr->pgno = 1; @@ -227916,12 +230146,12 @@ static int dbpageColumn( int rc = SQLITE_OK; switch( i ){ case 0: { /* pgno */ - sqlite3_result_int(ctx, pCsr->pgno); + sqlite3_result_int64(ctx, (sqlite3_int64)pCsr->pgno); break; } case 1: { /* data */ DbPage *pDbPage = 0; - if( pCsr->pgno==((PENDING_BYTE/pCsr->szPage)+1) ){ + if( pCsr->pgno==(Pgno)((PENDING_BYTE/pCsr->szPage)+1) ){ /* The pending byte page. Assume it is zeroed out. Attempting to ** request this page from the page is an SQLITE_CORRUPT error. */ sqlite3_result_zeroblob(ctx, pCsr->szPage); @@ -227995,10 +230225,10 @@ static int dbpageUpdate( goto update_fail; } if( sqlite3_value_type(argv[0])==SQLITE_NULL ){ - pgno = (Pgno)sqlite3_value_int(argv[2]); + pgno = (Pgno)sqlite3_value_int64(argv[2]); isInsert = 1; }else{ - pgno = sqlite3_value_int(argv[0]); + pgno = (Pgno)sqlite3_value_int64(argv[0]); if( (Pgno)sqlite3_value_int(argv[1])!=pgno ){ zErr = "cannot insert"; goto update_fail; @@ -228050,7 +230280,8 @@ static int dbpageUpdate( memcpy(aPage, pData, szPage); pTab->pgnoTrunc = 0; } - }else{ + } + if( rc!=SQLITE_OK ){ pTab->pgnoTrunc = 0; } sqlite3PagerUnref(pDbPage); @@ -228133,6 +230364,536 @@ SQLITE_PRIVATE int sqlite3DbpageRegister(sqlite3 *db){ return SQLITE_OK; } #endif /* SQLITE_ENABLE_DBSTAT_VTAB */ /************** End of dbpage.c **********************************************/ +/************** Begin file carray.c ******************************************/ +/* +** 2016-06-29 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This file implements a table-valued-function that +** returns the values in a C-language array. +** Examples: +** +** SELECT * FROM carray($ptr,5) +** +** The query above returns 5 integers contained in a C-language array +** at the address $ptr. $ptr is a pointer to the array of integers. +** The pointer value must be assigned to $ptr using the +** sqlite3_bind_pointer() interface with a pointer type of "carray". +** For example: +** +** static int aX[] = { 53, 9, 17, 2231, 4, 99 }; +** int i = sqlite3_bind_parameter_index(pStmt, "$ptr"); +** sqlite3_bind_pointer(pStmt, i, aX, "carray", 0); +** +** There is an optional third parameter to determine the datatype of +** the C-language array. Allowed values of the third parameter are +** 'int32', 'int64', 'double', 'char*', 'struct iovec'. Example: +** +** SELECT * FROM carray($ptr,10,'char*'); +** +** The default value of the third parameter is 'int32'. +** +** HOW IT WORKS +** +** The carray "function" is really a virtual table with the +** following schema: +** +** CREATE TABLE carray( +** value, +** pointer HIDDEN, +** count HIDDEN, +** ctype TEXT HIDDEN +** ); +** +** If the hidden columns "pointer" and "count" are unconstrained, then +** the virtual table has no rows. Otherwise, the virtual table interprets +** the integer value of "pointer" as a pointer to the array and "count" +** as the number of elements in the array. The virtual table steps through +** the array, element by element. +*/ +#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_CARRAY) +/* #include "sqliteInt.h" */ +#if defined(_WIN32) || defined(__RTP__) || defined(_WRS_KERNEL) + struct iovec { + void *iov_base; + size_t iov_len; + }; +#else +# include +#endif + +/* +** Names of allowed datatypes +*/ +static const char *azCarrayType[] = { + "int32", "int64", "double", "char*", "struct iovec" +}; + +/* +** Structure used to hold the sqlite3_carray_bind() information +*/ +typedef struct carray_bind carray_bind; +struct carray_bind { + void *aData; /* The data */ + int nData; /* Number of elements */ + int mFlags; /* Control flags */ + void (*xDel)(void*); /* Destructor for aData */ +}; + + +/* carray_cursor is a subclass of sqlite3_vtab_cursor which will +** serve as the underlying representation of a cursor that scans +** over rows of the result +*/ +typedef struct carray_cursor carray_cursor; +struct carray_cursor { + sqlite3_vtab_cursor base; /* Base class - must be first */ + sqlite3_int64 iRowid; /* The rowid */ + void *pPtr; /* Pointer to the array of values */ + sqlite3_int64 iCnt; /* Number of integers in the array */ + unsigned char eType; /* One of the CARRAY_type values */ +}; + +/* +** The carrayConnect() method is invoked to create a new +** carray_vtab that describes the carray virtual table. +** +** Think of this routine as the constructor for carray_vtab objects. +** +** All this routine needs to do is: +** +** (1) Allocate the carray_vtab object and initialize all fields. +** +** (2) Tell SQLite (via the sqlite3_declare_vtab() interface) what the +** result set of queries against carray will look like. +*/ +static int carrayConnect( + sqlite3 *db, + void *pAux, + int argc, const char *const*argv, + sqlite3_vtab **ppVtab, + char **pzErr +){ + sqlite3_vtab *pNew; + int rc; + +/* Column numbers */ +#define CARRAY_COLUMN_VALUE 0 +#define CARRAY_COLUMN_POINTER 1 +#define CARRAY_COLUMN_COUNT 2 +#define CARRAY_COLUMN_CTYPE 3 + + rc = sqlite3_declare_vtab(db, + "CREATE TABLE x(value,pointer hidden,count hidden,ctype hidden)"); + if( rc==SQLITE_OK ){ + pNew = *ppVtab = sqlite3_malloc( sizeof(*pNew) ); + if( pNew==0 ) return SQLITE_NOMEM; + memset(pNew, 0, sizeof(*pNew)); + } + return rc; +} + +/* +** This method is the destructor for carray_cursor objects. +*/ +static int carrayDisconnect(sqlite3_vtab *pVtab){ + sqlite3_free(pVtab); + return SQLITE_OK; +} + +/* +** Constructor for a new carray_cursor object. +*/ +static int carrayOpen(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){ + carray_cursor *pCur; + pCur = sqlite3_malloc( sizeof(*pCur) ); + if( pCur==0 ) return SQLITE_NOMEM; + memset(pCur, 0, sizeof(*pCur)); + *ppCursor = &pCur->base; + return SQLITE_OK; +} + +/* +** Destructor for a carray_cursor. +*/ +static int carrayClose(sqlite3_vtab_cursor *cur){ + sqlite3_free(cur); + return SQLITE_OK; +} + + +/* +** Advance a carray_cursor to its next row of output. +*/ +static int carrayNext(sqlite3_vtab_cursor *cur){ + carray_cursor *pCur = (carray_cursor*)cur; + pCur->iRowid++; + return SQLITE_OK; +} + +/* +** Return values of columns for the row at which the carray_cursor +** is currently pointing. +*/ +static int carrayColumn( + sqlite3_vtab_cursor *cur, /* The cursor */ + sqlite3_context *ctx, /* First argument to sqlite3_result_...() */ + int i /* Which column to return */ +){ + carray_cursor *pCur = (carray_cursor*)cur; + sqlite3_int64 x = 0; + switch( i ){ + case CARRAY_COLUMN_POINTER: return SQLITE_OK; + case CARRAY_COLUMN_COUNT: x = pCur->iCnt; break; + case CARRAY_COLUMN_CTYPE: { + sqlite3_result_text(ctx, azCarrayType[pCur->eType], -1, SQLITE_STATIC); + return SQLITE_OK; + } + default: { + switch( pCur->eType ){ + case CARRAY_INT32: { + int *p = (int*)pCur->pPtr; + sqlite3_result_int(ctx, p[pCur->iRowid-1]); + return SQLITE_OK; + } + case CARRAY_INT64: { + sqlite3_int64 *p = (sqlite3_int64*)pCur->pPtr; + sqlite3_result_int64(ctx, p[pCur->iRowid-1]); + return SQLITE_OK; + } + case CARRAY_DOUBLE: { + double *p = (double*)pCur->pPtr; + sqlite3_result_double(ctx, p[pCur->iRowid-1]); + return SQLITE_OK; + } + case CARRAY_TEXT: { + const char **p = (const char**)pCur->pPtr; + sqlite3_result_text(ctx, p[pCur->iRowid-1], -1, SQLITE_TRANSIENT); + return SQLITE_OK; + } + default: { + const struct iovec *p = (struct iovec*)pCur->pPtr; + assert( pCur->eType==CARRAY_BLOB ); + sqlite3_result_blob(ctx, p[pCur->iRowid-1].iov_base, + (int)p[pCur->iRowid-1].iov_len, SQLITE_TRANSIENT); + return SQLITE_OK; + } + } + } + } + sqlite3_result_int64(ctx, x); + return SQLITE_OK; +} + +/* +** Return the rowid for the current row. In this implementation, the +** rowid is the same as the output value. +*/ +static int carrayRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){ + carray_cursor *pCur = (carray_cursor*)cur; + *pRowid = pCur->iRowid; + return SQLITE_OK; +} + +/* +** Return TRUE if the cursor has been moved off of the last +** row of output. +*/ +static int carrayEof(sqlite3_vtab_cursor *cur){ + carray_cursor *pCur = (carray_cursor*)cur; + return pCur->iRowid>pCur->iCnt; +} + +/* +** This method is called to "rewind" the carray_cursor object back +** to the first row of output. +*/ +static int carrayFilter( + sqlite3_vtab_cursor *pVtabCursor, + int idxNum, const char *idxStr, + int argc, sqlite3_value **argv +){ + carray_cursor *pCur = (carray_cursor *)pVtabCursor; + pCur->pPtr = 0; + pCur->iCnt = 0; + switch( idxNum ){ + case 1: { + carray_bind *pBind = sqlite3_value_pointer(argv[0], "carray-bind"); + if( pBind==0 ) break; + pCur->pPtr = pBind->aData; + pCur->iCnt = pBind->nData; + pCur->eType = pBind->mFlags & 0x07; + break; + } + case 2: + case 3: { + pCur->pPtr = sqlite3_value_pointer(argv[0], "carray"); + pCur->iCnt = pCur->pPtr ? sqlite3_value_int64(argv[1]) : 0; + if( idxNum<3 ){ + pCur->eType = CARRAY_INT32; + }else{ + unsigned char i; + const char *zType = (const char*)sqlite3_value_text(argv[2]); + for(i=0; i=sizeof(azCarrayType)/sizeof(azCarrayType[0]) ){ + pVtabCursor->pVtab->zErrMsg = sqlite3_mprintf( + "unknown datatype: %Q", zType); + return SQLITE_ERROR; + }else{ + pCur->eType = i; + } + } + break; + } + } + pCur->iRowid = 1; + return SQLITE_OK; +} + +/* +** SQLite will invoke this method one or more times while planning a query +** that uses the carray virtual table. This routine needs to create +** a query plan for each invocation and compute an estimated cost for that +** plan. +** +** In this implementation idxNum is used to represent the +** query plan. idxStr is unused. +** +** idxNum is: +** +** 1 If only the pointer= constraint exists. In this case, the +** parameter must be bound using sqlite3_carray_bind(). +** +** 2 if the pointer= and count= constraints exist. +** +** 3 if the ctype= constraint also exists. +** +** idxNum is 0 otherwise and carray becomes an empty table. +*/ +static int carrayBestIndex( + sqlite3_vtab *tab, + sqlite3_index_info *pIdxInfo +){ + int i; /* Loop over constraints */ + int ptrIdx = -1; /* Index of the pointer= constraint, or -1 if none */ + int cntIdx = -1; /* Index of the count= constraint, or -1 if none */ + int ctypeIdx = -1; /* Index of the ctype= constraint, or -1 if none */ + unsigned seen = 0; /* Bitmask of == constrainted columns */ + + const struct sqlite3_index_constraint *pConstraint; + pConstraint = pIdxInfo->aConstraint; + for(i=0; inConstraint; i++, pConstraint++){ + if( pConstraint->op!=SQLITE_INDEX_CONSTRAINT_EQ ) continue; + if( pConstraint->iColumn>=0 ) seen |= 1 << pConstraint->iColumn; + if( pConstraint->usable==0 ) continue; + switch( pConstraint->iColumn ){ + case CARRAY_COLUMN_POINTER: + ptrIdx = i; + break; + case CARRAY_COLUMN_COUNT: + cntIdx = i; + break; + case CARRAY_COLUMN_CTYPE: + ctypeIdx = i; + break; + } + } + if( ptrIdx>=0 ){ + pIdxInfo->aConstraintUsage[ptrIdx].argvIndex = 1; + pIdxInfo->aConstraintUsage[ptrIdx].omit = 1; + pIdxInfo->estimatedCost = (double)1; + pIdxInfo->estimatedRows = 100; + pIdxInfo->idxNum = 1; + if( cntIdx>=0 ){ + pIdxInfo->aConstraintUsage[cntIdx].argvIndex = 2; + pIdxInfo->aConstraintUsage[cntIdx].omit = 1; + pIdxInfo->idxNum = 2; + if( ctypeIdx>=0 ){ + pIdxInfo->aConstraintUsage[ctypeIdx].argvIndex = 3; + pIdxInfo->aConstraintUsage[ctypeIdx].omit = 1; + pIdxInfo->idxNum = 3; + }else if( seen & (1<estimatedCost = (double)2147483647; + pIdxInfo->estimatedRows = 2147483647; + pIdxInfo->idxNum = 0; + } + return SQLITE_OK; +} + +/* +** This following structure defines all the methods for the +** carray virtual table. +*/ +static sqlite3_module carrayModule = { + 0, /* iVersion */ + 0, /* xCreate */ + carrayConnect, /* xConnect */ + carrayBestIndex, /* xBestIndex */ + carrayDisconnect, /* xDisconnect */ + 0, /* xDestroy */ + carrayOpen, /* xOpen - open a cursor */ + carrayClose, /* xClose - close a cursor */ + carrayFilter, /* xFilter - configure scan constraints */ + carrayNext, /* xNext - advance a cursor */ + carrayEof, /* xEof - check for end of scan */ + carrayColumn, /* xColumn - read data */ + carrayRowid, /* xRowid - read data */ + 0, /* xUpdate */ + 0, /* xBegin */ + 0, /* xSync */ + 0, /* xCommit */ + 0, /* xRollback */ + 0, /* xFindMethod */ + 0, /* xRename */ + 0, /* xSavepoint */ + 0, /* xRelease */ + 0, /* xRollbackTo */ + 0, /* xShadow */ + 0 /* xIntegrity */ +}; + +/* +** Destructor for the carray_bind object +*/ +static void carrayBindDel(void *pPtr){ + carray_bind *p = (carray_bind*)pPtr; + if( p->xDel!=SQLITE_STATIC ){ + p->xDel(p->aData); + } + sqlite3_free(p); +} + +/* +** Invoke this interface in order to bind to the single-argument +** version of CARRAY(). +*/ +SQLITE_API int sqlite3_carray_bind( + sqlite3_stmt *pStmt, + int idx, + void *aData, + int nData, + int mFlags, + void (*xDestroy)(void*) +){ + carray_bind *pNew = 0; + int i; + int rc = SQLITE_OK; + + /* Ensure that the mFlags value is acceptable. */ + assert( CARRAY_INT32==0 && CARRAY_INT64==1 && CARRAY_DOUBLE==2 ); + assert( CARRAY_TEXT==3 && CARRAY_BLOB==4 ); + if( mFlagsCARRAY_BLOB ){ + rc = SQLITE_ERROR; + goto carray_bind_error; + } + + pNew = sqlite3_malloc64(sizeof(*pNew)); + if( pNew==0 ){ + rc = SQLITE_NOMEM; + goto carray_bind_error; + } + + pNew->nData = nData; + pNew->mFlags = mFlags; + if( xDestroy==SQLITE_TRANSIENT ){ + sqlite3_int64 sz = nData; + switch( mFlags ){ + case CARRAY_INT32: sz *= 4; break; + case CARRAY_INT64: sz *= 8; break; + case CARRAY_DOUBLE: sz *= 8; break; + case CARRAY_TEXT: sz *= sizeof(char*); break; + default: sz *= sizeof(struct iovec); break; + } + if( mFlags==CARRAY_TEXT ){ + for(i=0; iaData = sqlite3_malloc64( sz ); + if( pNew->aData==0 ){ + rc = SQLITE_NOMEM; + goto carray_bind_error; + } + + if( mFlags==CARRAY_TEXT ){ + char **az = (char**)pNew->aData; + char *z = (char*)&az[nData]; + for(i=0; iaData; + unsigned char *z = (unsigned char*)&p[nData]; + for(i=0; iaData, aData, sz); + } + pNew->xDel = sqlite3_free; + }else{ + pNew->aData = aData; + pNew->xDel = xDestroy; + } + return sqlite3_bind_pointer(pStmt, idx, pNew, "carray-bind", carrayBindDel); + + carray_bind_error: + if( xDestroy!=SQLITE_STATIC && xDestroy!=SQLITE_TRANSIENT ){ + xDestroy(aData); + } + sqlite3_free(pNew); + return rc; +} + +/* +** Invoke this routine to register the carray() function. +*/ +SQLITE_PRIVATE Module *sqlite3CarrayRegister(sqlite3 *db){ + return sqlite3VtabCreateModule(db, "carray", &carrayModule, 0, 0); +} + +#endif /* !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_CARRAY) */ + +/************** End of carray.c **********************************************/ /************** Begin file sqlite3session.c **********************************/ #if defined(SQLITE_ENABLE_SESSION) && defined(SQLITE_ENABLE_PREUPDATE_HOOK) @@ -230951,6 +233712,19 @@ static int sessionAppendDelete( return rc; } +static int sessionPrepare( + sqlite3 *db, + sqlite3_stmt **pp, + char **pzErrmsg, + const char *zSql +){ + int rc = sqlite3_prepare_v2(db, zSql, -1, pp, 0); + if( pzErrmsg && rc!=SQLITE_OK ){ + *pzErrmsg = sqlite3_mprintf("%s", sqlite3_errmsg(db)); + } + return rc; +} + /* ** Formulate and prepare a SELECT statement to retrieve a row from table ** zTab in database zDb based on its primary key. i.e. @@ -230972,12 +233746,12 @@ static int sessionSelectStmt( int nCol, /* Number of columns in table */ const char **azCol, /* Names of table columns */ u8 *abPK, /* PRIMARY KEY array */ - sqlite3_stmt **ppStmt /* OUT: Prepared SELECT statement */ + sqlite3_stmt **ppStmt, /* OUT: Prepared SELECT statement */ + char **pzErrmsg /* OUT: Error message */ ){ int rc = SQLITE_OK; char *zSql = 0; const char *zSep = ""; - int nSql = -1; int i; SessionBuffer cols = {0, 0, 0}; @@ -231057,7 +233831,7 @@ static int sessionSelectStmt( #endif if( rc==SQLITE_OK ){ - rc = sqlite3_prepare_v2(db, zSql, nSql, ppStmt, 0); + rc = sessionPrepare(db, ppStmt, pzErrmsg, zSql); } sqlite3_free(zSql); sqlite3_free(nooptest.aBuf); @@ -231221,7 +233995,7 @@ static int sessionGenerateChangeset( /* Build and compile a statement to execute: */ if( rc==SQLITE_OK ){ rc = sessionSelectStmt(db, 0, pSession->zDb, - zName, pTab->bRowid, pTab->nCol, pTab->azCol, pTab->abPK, &pSel + zName, pTab->bRowid, pTab->nCol, pTab->azCol, pTab->abPK, &pSel, 0 ); } @@ -232430,6 +235204,7 @@ struct SessionApplyCtx { u8 bRebase; /* True to collect rebase information */ u8 bIgnoreNoop; /* True to ignore no-op conflicts */ int bRowid; + char *zErr; /* Error message, if any */ }; /* Number of prepared UPDATE statements to cache. */ @@ -232655,7 +235430,7 @@ static int sessionDeleteRow( } if( rc==SQLITE_OK ){ - rc = sqlite3_prepare_v2(db, (char *)buf.aBuf, buf.nBuf, &p->pDelete, 0); + rc = sessionPrepare(db, &p->pDelete, &p->zErr, (char*)buf.aBuf); } sqlite3_free(buf.aBuf); @@ -232682,7 +235457,7 @@ static int sessionSelectRow( ){ /* TODO */ return sessionSelectStmt(db, p->bIgnoreNoop, - "main", zTab, p->bRowid, p->nCol, p->azCol, p->abPK, &p->pSelect + "main", zTab, p->bRowid, p->nCol, p->azCol, p->abPK, &p->pSelect, &p->zErr ); } @@ -232719,16 +235494,12 @@ static int sessionInsertRow( sessionAppendStr(&buf, ")", &rc); if( rc==SQLITE_OK ){ - rc = sqlite3_prepare_v2(db, (char *)buf.aBuf, buf.nBuf, &p->pInsert, 0); + rc = sessionPrepare(db, &p->pInsert, &p->zErr, (char*)buf.aBuf); } sqlite3_free(buf.aBuf); return rc; } -static int sessionPrepare(sqlite3 *db, sqlite3_stmt **pp, const char *zSql){ - return sqlite3_prepare_v2(db, zSql, -1, pp, 0); -} - /* ** Prepare statements for applying changes to the sqlite_stat1 table. ** These are similar to those created by sessionSelectRow(), @@ -232738,14 +235509,14 @@ static int sessionPrepare(sqlite3 *db, sqlite3_stmt **pp, const char *zSql){ static int sessionStat1Sql(sqlite3 *db, SessionApplyCtx *p){ int rc = sessionSelectRow(db, "sqlite_stat1", p); if( rc==SQLITE_OK ){ - rc = sessionPrepare(db, &p->pInsert, + rc = sessionPrepare(db, &p->pInsert, 0, "INSERT INTO main.sqlite_stat1 VALUES(?1, " "CASE WHEN length(?2)=0 AND typeof(?2)='blob' THEN NULL ELSE ?2 END, " "?3)" ); } if( rc==SQLITE_OK ){ - rc = sessionPrepare(db, &p->pDelete, + rc = sessionPrepare(db, &p->pDelete, 0, "DELETE FROM main.sqlite_stat1 WHERE tbl=?1 AND idx IS " "CASE WHEN length(?2)=0 AND typeof(?2)='blob' THEN NULL ELSE ?2 END " "AND (?4 OR stat IS ?3)" @@ -232969,7 +235740,7 @@ static int sessionConflictHandler( void *pCtx, /* First argument for conflict handler */ int *pbReplace /* OUT: Set to true if PK row is found */ ){ - int res = 0; /* Value returned by conflict handler */ + int res = SQLITE_CHANGESET_OMIT;/* Value returned by conflict handler */ int rc; int nCol; int op; @@ -232990,11 +235761,9 @@ static int sessionConflictHandler( if( rc==SQLITE_ROW ){ /* There exists another row with the new.* primary key. */ - if( p->bIgnoreNoop - && sqlite3_column_int(p->pSelect, sqlite3_column_count(p->pSelect)-1) + if( 0==p->bIgnoreNoop + || 0==sqlite3_column_int(p->pSelect, sqlite3_column_count(p->pSelect)-1) ){ - res = SQLITE_CHANGESET_OMIT; - }else{ pIter->pConflict = p->pSelect; res = xConflict(pCtx, eType, pIter); pIter->pConflict = 0; @@ -233008,7 +235777,9 @@ static int sessionConflictHandler( int nBlob = pIter->in.iNext - pIter->in.iCurrent; sessionAppendBlob(&p->constraints, aBlob, nBlob, &rc); return SQLITE_OK; - }else{ + }else if( p->bIgnoreNoop==0 || op!=SQLITE_DELETE + || eType==SQLITE_CHANGESET_CONFLICT + ){ /* No other row with the new.* primary key. */ res = xConflict(pCtx, eType+1, pIter); if( res==SQLITE_CHANGESET_REPLACE ) rc = SQLITE_MISUSE; @@ -233106,7 +235877,7 @@ static int sessionApplyOneOp( sqlite3_step(p->pDelete); rc = sqlite3_reset(p->pDelete); - if( rc==SQLITE_OK && sqlite3_changes(p->db)==0 && p->bIgnoreNoop==0 ){ + if( rc==SQLITE_OK && sqlite3_changes(p->db)==0 ){ rc = sessionConflictHandler( SQLITE_CHANGESET_DATA, p, pIter, xConflict, pCtx, pbRetry ); @@ -233318,6 +236089,10 @@ static int sessionChangesetApply( void *pCtx, /* Copy of sixth arg to _apply() */ const char *zTab /* Table name */ ), + int(*xFilterIter)( + void *pCtx, /* Copy of sixth arg to _apply() */ + sqlite3_changeset_iter *p + ), int(*xConflict)( void *pCtx, /* Copy of fifth arg to _apply() */ int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ @@ -233458,6 +236233,9 @@ static int sessionChangesetApply( ** next change. A log message has already been issued. */ if( schemaMismatch ) continue; + /* If this is a call to apply_v3(), invoke xFilterIter here. */ + if( xFilterIter && 0==xFilterIter(pCtx, pIter) ) continue; + rc = sessionApplyOneWithRetry(db, pIter, &sApply, xConflict, pCtx); } @@ -233504,6 +236282,7 @@ static int sessionChangesetApply( assert( sApply.bRebase || sApply.rebase.nBuf==0 ); if( rc==SQLITE_OK && bPatchset==0 && sApply.bRebase ){ + assert( ppRebase!=0 && pnRebase!=0 ); *ppRebase = (void*)sApply.rebase.aBuf; *pnRebase = sApply.rebase.nBuf; sApply.rebase.aBuf = 0; @@ -233521,22 +236300,74 @@ static int sessionChangesetApply( db->flags &= ~((u64)SQLITE_FkNoAction); db->aDb[0].pSchema->schema_cookie -= 32; } + + assert( rc!=SQLITE_OK || sApply.zErr==0 ); + sqlite3_set_errmsg(db, rc, sApply.zErr); + sqlite3_free(sApply.zErr); + sqlite3_mutex_leave(sqlite3_db_mutex(db)); return rc; } /* -** Apply the changeset passed via pChangeset/nChangeset to the main -** database attached to handle "db". +** This function is called by all six sqlite3changeset_apply() variants: +** +** + sqlite3changeset_apply() +** + sqlite3changeset_apply_v2() +** + sqlite3changeset_apply_v3() +** + sqlite3changeset_apply_strm() +** + sqlite3changeset_apply_strm_v2() +** + sqlite3changeset_apply_strm_v3() +** +** Arguments passed to this function are as follows: +** +** db: +** Database handle to apply changeset to main database of. +** +** nChangeset/pChangeset: +** These are both passed zero for the streaming variants. For the normal +** apply() functions, these are passed the size of and the buffer containing +** the changeset, respectively. +** +** xInput/pIn: +** These are both passed zero for the normal variants. For the streaming +** apply() functions, these are passed the input callback and context +** pointer, respectively. +** +** xFilter: +** The filter function as passed to apply() or apply_v2() (to filter by +** table name), if any. This is always NULL for apply_v3() calls. +** +** xFilterIter: +** The filter function as passed to apply_v3(), if any. +** +** xConflict: +** The conflict handler callback (must not be NULL). +** +** pCtx: +** The context pointer passed to the xFilter and xConflict handler callbacks. +** +** ppRebase, pnRebase: +** Zero for apply(). The rebase changeset output pointers, if any, for +** apply_v2() and apply_v3(). +** +** flags: +** Zero for apply(). The flags parameter for apply_v2() and apply_v3(). */ -SQLITE_API int sqlite3changeset_apply_v2( +static int sessionChangesetApplyV23( sqlite3 *db, /* Apply change to "main" db of this handle */ int nChangeset, /* Size of changeset in bytes */ void *pChangeset, /* Changeset blob */ + int (*xInput)(void *pIn, void *pData, int *pnData), /* Input function */ + void *pIn, /* First arg for xInput */ int(*xFilter)( void *pCtx, /* Copy of sixth arg to _apply() */ const char *zTab /* Table name */ ), + int(*xFilterIter)( + void *pCtx, /* Copy of sixth arg to _apply() */ + sqlite3_changeset_iter *p /* Handle describing current change */ + ), int(*xConflict)( void *pCtx, /* Copy of sixth arg to _apply() */ int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ @@ -233547,18 +236378,74 @@ SQLITE_API int sqlite3changeset_apply_v2( int flags ){ sqlite3_changeset_iter *pIter; /* Iterator to skip through changeset */ - int bInv = !!(flags & SQLITE_CHANGESETAPPLY_INVERT); - int rc = sessionChangesetStart(&pIter, 0, 0, nChangeset, pChangeset, bInv, 1); - + int bInverse = !!(flags & SQLITE_CHANGESETAPPLY_INVERT); + int rc = sessionChangesetStart( + &pIter, xInput, pIn, nChangeset, pChangeset, bInverse, 1 + ); if( rc==SQLITE_OK ){ - rc = sessionChangesetApply( - db, pIter, xFilter, xConflict, pCtx, ppRebase, pnRebase, flags + rc = sessionChangesetApply(db, pIter, + xFilter, xFilterIter, xConflict, pCtx, ppRebase, pnRebase, flags ); } - return rc; } +/* +** Apply the changeset passed via pChangeset/nChangeset to the main +** database attached to handle "db". +*/ +SQLITE_API int sqlite3changeset_apply_v2( + sqlite3 *db, /* Apply change to "main" db of this handle */ + int nChangeset, /* Size of changeset in bytes */ + void *pChangeset, /* Changeset blob */ + int(*xFilter)( + void *pCtx, /* Copy of sixth arg to _apply() */ + const char *zTab /* Table name */ + ), + int(*xConflict)( + void *pCtx, /* Copy of sixth arg to _apply() */ + int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ + sqlite3_changeset_iter *p /* Handle describing change and conflict */ + ), + void *pCtx, /* First argument passed to xConflict */ + void **ppRebase, int *pnRebase, + int flags +){ + return sessionChangesetApplyV23(db, + nChangeset, pChangeset, 0, 0, + xFilter, 0, xConflict, pCtx, + ppRebase, pnRebase, flags + ); +} + +/* +** Apply the changeset passed via pChangeset/nChangeset to the main +** database attached to handle "db". +*/ +SQLITE_API int sqlite3changeset_apply_v3( + sqlite3 *db, /* Apply change to "main" db of this handle */ + int nChangeset, /* Size of changeset in bytes */ + void *pChangeset, /* Changeset blob */ + int(*xFilter)( + void *pCtx, /* Copy of sixth arg to _apply() */ + sqlite3_changeset_iter *p /* Handle describing current change */ + ), + int(*xConflict)( + void *pCtx, /* Copy of sixth arg to _apply() */ + int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ + sqlite3_changeset_iter *p /* Handle describing change and conflict */ + ), + void *pCtx, /* First argument passed to xConflict */ + void **ppRebase, int *pnRebase, + int flags +){ + return sessionChangesetApplyV23(db, + nChangeset, pChangeset, 0, 0, + 0, xFilter, xConflict, pCtx, + ppRebase, pnRebase, flags + ); +} + /* ** Apply the changeset passed via pChangeset/nChangeset to the main database ** attached to handle "db". Invoke the supplied conflict handler callback @@ -233579,8 +236466,10 @@ SQLITE_API int sqlite3changeset_apply( ), void *pCtx /* First argument passed to xConflict */ ){ - return sqlite3changeset_apply_v2( - db, nChangeset, pChangeset, xFilter, xConflict, pCtx, 0, 0, 0 + return sessionChangesetApplyV23(db, + nChangeset, pChangeset, 0, 0, + xFilter, 0, xConflict, pCtx, + 0, 0, 0 ); } @@ -233589,6 +236478,29 @@ SQLITE_API int sqlite3changeset_apply( ** attached to handle "db". Invoke the supplied conflict handler callback ** to resolve any conflicts encountered while applying the change. */ +SQLITE_API int sqlite3changeset_apply_v3_strm( + sqlite3 *db, /* Apply change to "main" db of this handle */ + int (*xInput)(void *pIn, void *pData, int *pnData), /* Input function */ + void *pIn, /* First arg for xInput */ + int(*xFilter)( + void *pCtx, /* Copy of sixth arg to _apply() */ + sqlite3_changeset_iter *p + ), + int(*xConflict)( + void *pCtx, /* Copy of sixth arg to _apply() */ + int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ + sqlite3_changeset_iter *p /* Handle describing change and conflict */ + ), + void *pCtx, /* First argument passed to xConflict */ + void **ppRebase, int *pnRebase, + int flags +){ + return sessionChangesetApplyV23(db, + 0, 0, xInput, pIn, + 0, xFilter, xConflict, pCtx, + ppRebase, pnRebase, flags + ); +} SQLITE_API int sqlite3changeset_apply_v2_strm( sqlite3 *db, /* Apply change to "main" db of this handle */ int (*xInput)(void *pIn, void *pData, int *pnData), /* Input function */ @@ -233606,15 +236518,11 @@ SQLITE_API int sqlite3changeset_apply_v2_strm( void **ppRebase, int *pnRebase, int flags ){ - sqlite3_changeset_iter *pIter; /* Iterator to skip through changeset */ - int bInverse = !!(flags & SQLITE_CHANGESETAPPLY_INVERT); - int rc = sessionChangesetStart(&pIter, xInput, pIn, 0, 0, bInverse, 1); - if( rc==SQLITE_OK ){ - rc = sessionChangesetApply( - db, pIter, xFilter, xConflict, pCtx, ppRebase, pnRebase, flags - ); - } - return rc; + return sessionChangesetApplyV23(db, + 0, 0, xInput, pIn, + xFilter, 0, xConflict, pCtx, + ppRebase, pnRebase, flags + ); } SQLITE_API int sqlite3changeset_apply_strm( sqlite3 *db, /* Apply change to "main" db of this handle */ @@ -233631,8 +236539,10 @@ SQLITE_API int sqlite3changeset_apply_strm( ), void *pCtx /* First argument passed to xConflict */ ){ - return sqlite3changeset_apply_v2_strm( - db, xInput, pIn, xFilter, xConflict, pCtx, 0, 0, 0 + return sessionChangesetApplyV23(db, + 0, 0, xInput, pIn, + xFilter, 0, xConflict, pCtx, + 0, 0, 0 ); } @@ -235604,27 +238514,20 @@ typedef sqlite3_uint64 u64; # define LARGEST_INT64 (0xffffffff|(((i64)0x7fffffff)<<32)) # define SMALLEST_INT64 (((i64)-1) - LARGEST_INT64) -/* The uptr type is an unsigned integer large enough to hold a pointer +/* +** This macro is used in a single assert() within fts5 to check that an +** allocation is aligned to an 8-byte boundary. But it is a complicated +** macro to get right for multiple platforms without generating warnings. +** So instead of reproducing the entire definition from sqliteInt.h, we +** just do without this assert() for the rare non-amalgamation builds. */ -#if defined(HAVE_STDINT_H) - typedef uintptr_t uptr; -#elif SQLITE_PTRSIZE==4 - typedef u32 uptr; -#else - typedef u64 uptr; -#endif - -#ifdef SQLITE_4_BYTE_ALIGNED_MALLOC -# define EIGHT_BYTE_ALIGNMENT(X) ((((uptr)(X) - (uptr)0)&3)==0) -#else -# define EIGHT_BYTE_ALIGNMENT(X) ((((uptr)(X) - (uptr)0)&7)==0) -#endif +#define EIGHT_BYTE_ALIGNMENT(x) 1 /* ** Macros needed to provide flexible arrays in a portable way */ #ifndef offsetof -# define offsetof(STRUCTURE,FIELD) ((size_t)((char*)&((STRUCTURE*)0)->FIELD)) +# define offsetof(ST,M) ((size_t)((char*)&((ST*)0)->M - (char*)0)) #endif #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) # define FLEXARRAY @@ -236366,7 +239269,7 @@ static int sqlite3Fts5ExprPattern( ** i64 iRowid = sqlite3Fts5ExprRowid(pExpr); ** } */ -static int sqlite3Fts5ExprFirst(Fts5Expr*, Fts5Index *pIdx, i64 iMin, int bDesc); +static int sqlite3Fts5ExprFirst(Fts5Expr*, Fts5Index *pIdx, i64 iMin, i64, int bDesc); static int sqlite3Fts5ExprNext(Fts5Expr*, i64 iMax); static int sqlite3Fts5ExprEof(Fts5Expr*); static i64 sqlite3Fts5ExprRowid(Fts5Expr*); @@ -241935,7 +244838,13 @@ static int fts5ExprNodeFirst(Fts5Expr *pExpr, Fts5ExprNode *pNode){ ** Return SQLITE_OK if successful, or an SQLite error code otherwise. It ** is not considered an error if the query does not match any documents. */ -static int sqlite3Fts5ExprFirst(Fts5Expr *p, Fts5Index *pIdx, i64 iFirst, int bDesc){ +static int sqlite3Fts5ExprFirst( + Fts5Expr *p, + Fts5Index *pIdx, + i64 iFirst, + i64 iLast, + int bDesc +){ Fts5ExprNode *pRoot = p->pRoot; int rc; /* Return code */ @@ -241957,6 +244866,9 @@ static int sqlite3Fts5ExprFirst(Fts5Expr *p, Fts5Index *pIdx, i64 iFirst, int bD assert( pRoot->bEof==0 ); rc = fts5ExprNodeNext(p, pRoot, 0, 0); } + if( fts5RowidCmp(p, pRoot->iRowid, iLast)>0 ){ + pRoot->bEof = 1; + } return rc; } @@ -244809,6 +247721,36 @@ struct Fts5SegIter { u8 bDel; /* True if the delete flag is set */ }; +static int fts5IndexCorruptRowid(Fts5Index *pIdx, i64 iRowid){ + pIdx->rc = FTS5_CORRUPT; + sqlite3Fts5ConfigErrmsg(pIdx->pConfig, + "fts5: corruption found reading blob %lld from table \"%s\"", + iRowid, pIdx->pConfig->zName + ); + return SQLITE_CORRUPT_VTAB; +} +#define FTS5_CORRUPT_ROWID(pIdx, iRowid) fts5IndexCorruptRowid(pIdx, iRowid) + +static int fts5IndexCorruptIter(Fts5Index *pIdx, Fts5SegIter *pIter){ + pIdx->rc = FTS5_CORRUPT; + sqlite3Fts5ConfigErrmsg(pIdx->pConfig, + "fts5: corruption on page %d, segment %d, table \"%s\"", + pIter->iLeafPgno, pIter->pSeg->iSegid, pIdx->pConfig->zName + ); + return SQLITE_CORRUPT_VTAB; +} +#define FTS5_CORRUPT_ITER(pIdx, pIter) fts5IndexCorruptIter(pIdx, pIter) + +static int fts5IndexCorruptIdx(Fts5Index *pIdx){ + pIdx->rc = FTS5_CORRUPT; + sqlite3Fts5ConfigErrmsg(pIdx->pConfig, + "fts5: corruption in table \"%s\"", pIdx->pConfig->zName + ); + return SQLITE_CORRUPT_VTAB; +} +#define FTS5_CORRUPT_IDX(pIdx) fts5IndexCorruptIdx(pIdx) + + /* ** Array of tombstone pages. Reference counted. */ @@ -245098,13 +248040,13 @@ static Fts5Data *fts5DataRead(Fts5Index *p, i64 iRowid){ ** All the reasons those functions might return SQLITE_ERROR - missing ** table, missing row, non-blob/text in block column - indicate ** backing store corruption. */ - if( rc==SQLITE_ERROR ) rc = FTS5_CORRUPT; + if( rc==SQLITE_ERROR ) rc = FTS5_CORRUPT_ROWID(p, iRowid); if( rc==SQLITE_OK ){ u8 *aOut = 0; /* Read blob data into this buffer */ - int nByte = sqlite3_blob_bytes(p->pReader); - int szData = (sizeof(Fts5Data) + 7) & ~7; - sqlite3_int64 nAlloc = szData + nByte + FTS5_DATA_PADDING; + i64 nByte = sqlite3_blob_bytes(p->pReader); + i64 szData = (sizeof(Fts5Data) + 7) & ~7; + i64 nAlloc = szData + nByte + FTS5_DATA_PADDING; pRet = (Fts5Data*)sqlite3_malloc64(nAlloc); if( pRet ){ pRet->nn = nByte; @@ -245148,7 +248090,7 @@ static Fts5Data *fts5LeafRead(Fts5Index *p, i64 iRowid){ Fts5Data *pRet = fts5DataRead(p, iRowid); if( pRet ){ if( pRet->nn<4 || pRet->szLeaf>pRet->nn ){ - p->rc = FTS5_CORRUPT; + FTS5_CORRUPT_ROWID(p, iRowid); fts5DataRelease(pRet); pRet = 0; } @@ -245507,8 +248449,14 @@ static Fts5Structure *fts5StructureReadUncached(Fts5Index *p){ /* TODO: Do we need this if the leaf-index is appended? Probably... */ memset(&pData->p[pData->nn], 0, FTS5_DATA_PADDING); p->rc = fts5StructureDecode(pData->p, pData->nn, &iCookie, &pRet); - if( p->rc==SQLITE_OK && (pConfig->pgsz==0 || pConfig->iCookie!=iCookie) ){ - p->rc = sqlite3Fts5ConfigLoad(pConfig, iCookie); + if( p->rc==SQLITE_OK ){ + if( (pConfig->pgsz==0 || pConfig->iCookie!=iCookie) ){ + p->rc = sqlite3Fts5ConfigLoad(pConfig, iCookie); + } + }else if( p->rc==SQLITE_CORRUPT_VTAB ){ + sqlite3Fts5ConfigErrmsg(p->pConfig, + "fts5: corrupt structure record for table \"%s\"", p->pConfig->zName + ); } fts5DataRelease(pData); if( p->rc!=SQLITE_OK ){ @@ -246131,7 +249079,7 @@ static void fts5SegIterLoadRowid(Fts5Index *p, Fts5SegIter *pIter){ while( iOff>=pIter->pLeaf->szLeaf ){ fts5SegIterNextPage(p, pIter); if( pIter->pLeaf==0 ){ - if( p->rc==SQLITE_OK ) p->rc = FTS5_CORRUPT; + if( p->rc==SQLITE_OK ) FTS5_CORRUPT_ITER(p, pIter); return; } iOff = 4; @@ -246163,7 +249111,7 @@ static void fts5SegIterLoadTerm(Fts5Index *p, Fts5SegIter *pIter, int nKeep){ iOff += fts5GetVarint32(&a[iOff], nNew); if( iOff+nNew>pIter->pLeaf->szLeaf || nKeep>pIter->term.n || nNew==0 ){ - p->rc = FTS5_CORRUPT; + FTS5_CORRUPT_ITER(p, pIter); return; } pIter->term.n = nKeep; @@ -246293,6 +249241,7 @@ static void fts5SegIterReverseInitPage(Fts5Index *p, Fts5SegIter *pIter){ while( 1 ){ u64 iDelta = 0; + if( i>=n ) break; if( eDetail==FTS5_DETAIL_NONE ){ /* todo */ if( i=pNew->szLeaf ){ - p->rc = FTS5_CORRUPT; + FTS5_CORRUPT_ITER(p, pIter); }else{ pIter->pLeaf = pNew; pIter->iLeafOffset = iRowidOff; @@ -246592,7 +249541,7 @@ static void fts5SegIterNext( } assert_nc( iOffszLeaf ); if( iOff>pLeaf->szLeaf ){ - p->rc = FTS5_CORRUPT; + FTS5_CORRUPT_ITER(p, pIter); return; } } @@ -246700,18 +249649,20 @@ static void fts5SegIterReverse(Fts5Index *p, Fts5SegIter *pIter){ fts5DataRelease(pIter->pLeaf); pIter->pLeaf = pLast; pIter->iLeafPgno = pgnoLast; - iOff = fts5LeafFirstRowidOff(pLast); - if( iOff>pLast->szLeaf ){ - p->rc = FTS5_CORRUPT; - return; - } - iOff += fts5GetVarint(&pLast->p[iOff], (u64*)&pIter->iRowid); - pIter->iLeafOffset = iOff; + if( p->rc==SQLITE_OK ){ + iOff = fts5LeafFirstRowidOff(pLast); + if( iOff>pLast->szLeaf ){ + FTS5_CORRUPT_ITER(p, pIter); + return; + } + iOff += fts5GetVarint(&pLast->p[iOff], (u64*)&pIter->iRowid); + pIter->iLeafOffset = iOff; - if( fts5LeafIsTermless(pLast) ){ - pIter->iEndofDoclist = pLast->nn+1; - }else{ - pIter->iEndofDoclist = fts5LeafFirstTermOff(pLast); + if( fts5LeafIsTermless(pLast) ){ + pIter->iEndofDoclist = pLast->nn+1; + }else{ + pIter->iEndofDoclist = fts5LeafFirstTermOff(pLast); + } } } @@ -246781,7 +249732,7 @@ static void fts5LeafSeek( iPgidx += fts5GetVarint32(&a[iPgidx], iTermOff); iOff = iTermOff; if( iOff>n ){ - p->rc = FTS5_CORRUPT; + FTS5_CORRUPT_ITER(p, pIter); return; } @@ -246824,7 +249775,7 @@ static void fts5LeafSeek( iOff = iTermOff; if( iOff>=n ){ - p->rc = FTS5_CORRUPT; + FTS5_CORRUPT_ITER(p, pIter); return; } @@ -246846,7 +249797,7 @@ static void fts5LeafSeek( iPgidx = (u32)pIter->pLeaf->szLeaf; iPgidx += fts5GetVarint32(&pIter->pLeaf->p[iPgidx], iOff); if( iOff<4 || (i64)iOff>=pIter->pLeaf->szLeaf ){ - p->rc = FTS5_CORRUPT; + FTS5_CORRUPT_ITER(p, pIter); return; }else{ nKeep = 0; @@ -246861,7 +249812,7 @@ static void fts5LeafSeek( search_success: if( (i64)iOff+nNew>n || nNew<1 ){ - p->rc = FTS5_CORRUPT; + FTS5_CORRUPT_ITER(p, pIter); return; } pIter->iLeafOffset = iOff + nNew; @@ -247326,7 +250277,7 @@ static void fts5SegIterGotoPage( assert( iLeafPgno>pIter->iLeafPgno ); if( iLeafPgno>pIter->pSeg->pgnoLast ){ - p->rc = FTS5_CORRUPT; + FTS5_CORRUPT_IDX(p); }else{ fts5DataRelease(pIter->pNextLeaf); pIter->pNextLeaf = 0; @@ -247341,7 +250292,7 @@ static void fts5SegIterGotoPage( u8 *a = pIter->pLeaf->p; int n = pIter->pLeaf->szLeaf; if( iOff<4 || iOff>=n ){ - p->rc = FTS5_CORRUPT; + FTS5_CORRUPT_IDX(p); }else{ iOff += fts5GetVarint(&a[iOff], (u64*)&pIter->iRowid); pIter->iLeafOffset = iOff; @@ -247820,7 +250771,7 @@ static void fts5ChunkIterate( if( nRem<=0 ){ break; }else if( pSeg->pSeg==0 ){ - p->rc = FTS5_CORRUPT; + FTS5_CORRUPT_IDX(p); return; }else{ pgno++; @@ -248923,7 +251874,7 @@ static void fts5TrimSegments(Fts5Index *p, Fts5Iter *pIter){ ** a single page has been assigned to more than one segment. In ** this case a prior iteration of this loop may have corrupted the ** segment currently being trimmed. */ - p->rc = FTS5_CORRUPT; + FTS5_CORRUPT_ROWID(p, iLeafRowid); }else{ fts5BufferZero(&buf); fts5BufferGrow(&p->rc, &buf, pData->nn); @@ -249390,7 +252341,7 @@ static void fts5SecureDeleteOverflow( }else if( bDetailNone ){ break; }else if( iNext>=pLeaf->szLeaf || pLeaf->nnszLeaf || iNext<4 ){ - p->rc = FTS5_CORRUPT; + FTS5_CORRUPT_ROWID(p, iRowid); break; }else{ int nShift = iNext - 4; @@ -249410,7 +252361,7 @@ static void fts5SecureDeleteOverflow( i1 += fts5GetVarint32(&aPg[i1], iFirst); if( iFirstrc = FTS5_CORRUPT; + FTS5_CORRUPT_ROWID(p, iRowid); break; } aIdx = sqlite3Fts5MallocZero(&p->rc, (pLeaf->nn-pLeaf->szLeaf)+2); @@ -249633,14 +252584,14 @@ static void fts5DoSecureDelete( nSuffix = (nPrefix2 + nSuffix2) - nPrefix; if( (iKeyOff+nSuffix)>iPgIdx || (iNextOff+nSuffix2)>iPgIdx ){ - p->rc = FTS5_CORRUPT; + FTS5_CORRUPT_IDX(p); }else{ if( iKey!=1 ){ iOff += sqlite3Fts5PutVarint(&aPg[iOff], nPrefix); } iOff += sqlite3Fts5PutVarint(&aPg[iOff], nSuffix); if( nPrefix2>pSeg->term.n ){ - p->rc = FTS5_CORRUPT; + FTS5_CORRUPT_IDX(p); }else if( nPrefix2>nPrefix ){ memcpy(&aPg[iOff], &pSeg->term.p[nPrefix], nPrefix2-nPrefix); iOff += (nPrefix2-nPrefix); @@ -250064,7 +253015,7 @@ static Fts5Structure *fts5IndexOptimizeStruct( } nByte += (((i64)pStruct->nLevel)+1) * sizeof(Fts5StructureLevel); - assert( nByte==SZ_FTS5STRUCTURE(pStruct->nLevel+2) ); + assert( nByte==(i64)SZ_FTS5STRUCTURE(pStruct->nLevel+2) ); pNew = (Fts5Structure*)sqlite3Fts5MallocZero(&p->rc, nByte); if( pNew ){ @@ -250433,7 +253384,7 @@ static void fts5MergePrefixLists( } if( pHead==0 || pHead->pNext==0 ){ - p->rc = FTS5_CORRUPT; + FTS5_CORRUPT_IDX(p); break; } @@ -250470,7 +253421,7 @@ static void fts5MergePrefixLists( assert_nc( tmp.n+nTail<=nTmp ); assert( tmp.n+nTail<=nTmp+nMerge*10 ); if( tmp.n+nTail>nTmp-FTS5_DATA_ZERO_PADDING ){ - if( p->rc==SQLITE_OK ) p->rc = FTS5_CORRUPT; + if( p->rc==SQLITE_OK ) FTS5_CORRUPT_IDX(p); break; } fts5BufferSafeAppendVarint(&out, (tmp.n+nTail) * 2); @@ -251039,11 +253990,14 @@ static int sqlite3Fts5IndexRollback(Fts5Index *p){ */ static int sqlite3Fts5IndexReinit(Fts5Index *p){ Fts5Structure *pTmp; - u8 tmpSpace[SZ_FTS5STRUCTURE(1)]; + union { + Fts5Structure sFts; + u8 tmpSpace[SZ_FTS5STRUCTURE(1)]; + } uFts; fts5StructureInvalidate(p); fts5IndexDiscardData(p); - pTmp = (Fts5Structure*)tmpSpace; - memset(pTmp, 0, SZ_FTS5STRUCTURE(1)); + pTmp = &uFts.sFts; + memset(uFts.tmpSpace, 0, sizeof(uFts.tmpSpace)); if( p->pConfig->bContentlessDelete ){ pTmp->nOriginCntr = 1; } @@ -252503,19 +255457,27 @@ static int fts5TestUtf8(const char *z, int n){ /* ** This function is also purely an internal test. It does not contribute to ** FTS functionality, or even the integrity-check, in any way. +** +** This function sets output variable (*pbFail) to true if the test fails. Or +** leaves it unchanged if the test succeeds. */ static void fts5TestTerm( Fts5Index *p, Fts5Buffer *pPrev, /* Previous term */ const char *z, int n, /* Possibly new term to test */ u64 expected, - u64 *pCksum + u64 *pCksum, + int *pbFail ){ int rc = p->rc; if( pPrev->n==0 ){ fts5BufferSet(&rc, pPrev, n, (const u8*)z); }else - if( rc==SQLITE_OK && (pPrev->n!=n || memcmp(pPrev->p, z, n)) ){ + if( *pbFail==0 + && rc==SQLITE_OK + && (pPrev->n!=n || memcmp(pPrev->p, z, n)) + && (p->pHash==0 || p->pHash->nEntry==0) + ){ u64 cksum3 = *pCksum; const char *zTerm = (const char*)&pPrev->p[1]; /* term sans prefix-byte */ int nTerm = pPrev->n-1; /* Size of zTerm in bytes */ @@ -252565,7 +255527,7 @@ static void fts5TestTerm( fts5BufferSet(&rc, pPrev, n, (const u8*)z); if( rc==SQLITE_OK && cksum3!=expected ){ - rc = FTS5_CORRUPT; + *pbFail = 1; } *pCksum = cksum3; } @@ -252574,7 +255536,7 @@ static void fts5TestTerm( #else # define fts5TestDlidxReverse(x,y,z) -# define fts5TestTerm(u,v,w,x,y,z) +# define fts5TestTerm(t,u,v,w,x,y,z) #endif /* @@ -252599,14 +255561,17 @@ static void fts5IndexIntegrityCheckEmpty( for(i=iFirst; p->rc==SQLITE_OK && i<=iLast; i++){ Fts5Data *pLeaf = fts5DataRead(p, FTS5_SEGMENT_ROWID(pSeg->iSegid, i)); if( pLeaf ){ - if( !fts5LeafIsTermless(pLeaf) ) p->rc = FTS5_CORRUPT; - if( i>=iNoRowid && 0!=fts5LeafFirstRowidOff(pLeaf) ) p->rc = FTS5_CORRUPT; + if( !fts5LeafIsTermless(pLeaf) + || (i>=iNoRowid && 0!=fts5LeafFirstRowidOff(pLeaf)) + ){ + FTS5_CORRUPT_ROWID(p, FTS5_SEGMENT_ROWID(pSeg->iSegid, i)); + } } fts5DataRelease(pLeaf); } } -static void fts5IntegrityCheckPgidx(Fts5Index *p, Fts5Data *pLeaf){ +static void fts5IntegrityCheckPgidx(Fts5Index *p, i64 iRowid, Fts5Data *pLeaf){ i64 iTermOff = 0; int ii; @@ -252624,12 +255589,12 @@ static void fts5IntegrityCheckPgidx(Fts5Index *p, Fts5Data *pLeaf){ iOff = iTermOff; if( iOff>=pLeaf->szLeaf ){ - p->rc = FTS5_CORRUPT; + FTS5_CORRUPT_ROWID(p, iRowid); }else if( iTermOff==nIncr ){ int nByte; iOff += fts5GetVarint32(&pLeaf->p[iOff], nByte); if( (iOff+nByte)>pLeaf->szLeaf ){ - p->rc = FTS5_CORRUPT; + FTS5_CORRUPT_ROWID(p, iRowid); }else{ fts5BufferSet(&p->rc, &buf1, nByte, &pLeaf->p[iOff]); } @@ -252638,7 +255603,7 @@ static void fts5IntegrityCheckPgidx(Fts5Index *p, Fts5Data *pLeaf){ iOff += fts5GetVarint32(&pLeaf->p[iOff], nKeep); iOff += fts5GetVarint32(&pLeaf->p[iOff], nByte); if( nKeep>buf1.n || (iOff+nByte)>pLeaf->szLeaf ){ - p->rc = FTS5_CORRUPT; + FTS5_CORRUPT_ROWID(p, iRowid); }else{ buf1.n = nKeep; fts5BufferAppendBlob(&p->rc, &buf1, nByte, &pLeaf->p[iOff]); @@ -252646,7 +255611,7 @@ static void fts5IntegrityCheckPgidx(Fts5Index *p, Fts5Data *pLeaf){ if( p->rc==SQLITE_OK ){ res = fts5BufferCompare(&buf1, &buf2); - if( res<=0 ) p->rc = FTS5_CORRUPT; + if( res<=0 ) FTS5_CORRUPT_ROWID(p, iRowid); } } fts5BufferSet(&p->rc, &buf2, buf1.n, buf1.p); @@ -252707,7 +255672,7 @@ static void fts5IndexIntegrityCheckSegment( ** entry even if all the terms are removed from it by secure-delete ** operations. */ }else{ - p->rc = FTS5_CORRUPT; + FTS5_CORRUPT_ROWID(p, iRow); } }else{ @@ -252719,15 +255684,15 @@ static void fts5IndexIntegrityCheckSegment( iOff = fts5LeafFirstTermOff(pLeaf); iRowidOff = fts5LeafFirstRowidOff(pLeaf); if( iRowidOff>=iOff || iOff>=pLeaf->szLeaf ){ - p->rc = FTS5_CORRUPT; + FTS5_CORRUPT_ROWID(p, iRow); }else{ iOff += fts5GetVarint32(&pLeaf->p[iOff], nTerm); res = fts5Memcmp(&pLeaf->p[iOff], zIdxTerm, MIN(nTerm, nIdxTerm)); if( res==0 ) res = nTerm - nIdxTerm; - if( res<0 ) p->rc = FTS5_CORRUPT; + if( res<0 ) FTS5_CORRUPT_ROWID(p, iRow); } - fts5IntegrityCheckPgidx(p, pLeaf); + fts5IntegrityCheckPgidx(p, iRow, pLeaf); } fts5DataRelease(pLeaf); if( p->rc ) break; @@ -252757,7 +255722,7 @@ static void fts5IndexIntegrityCheckSegment( iKey = FTS5_SEGMENT_ROWID(iSegid, iPg); pLeaf = fts5DataRead(p, iKey); if( pLeaf ){ - if( fts5LeafFirstRowidOff(pLeaf)!=0 ) p->rc = FTS5_CORRUPT; + if( fts5LeafFirstRowidOff(pLeaf)!=0 ) FTS5_CORRUPT_ROWID(p, iKey); fts5DataRelease(pLeaf); } } @@ -252772,12 +255737,12 @@ static void fts5IndexIntegrityCheckSegment( int iRowidOff = fts5LeafFirstRowidOff(pLeaf); ASSERT_SZLEAF_OK(pLeaf); if( iRowidOff>=pLeaf->szLeaf ){ - p->rc = FTS5_CORRUPT; + FTS5_CORRUPT_ROWID(p, iKey); }else if( bSecureDelete==0 || iRowidOff>0 ){ i64 iDlRowid = fts5DlidxIterRowid(pDlidx); fts5GetVarint(&pLeaf->p[iRowidOff], (u64*)&iRowid); if( iRowidrc = FTS5_CORRUPT; + FTS5_CORRUPT_ROWID(p, iKey); } } fts5DataRelease(pLeaf); @@ -252829,6 +255794,7 @@ static int sqlite3Fts5IndexIntegrityCheck(Fts5Index *p, u64 cksum, int bUseCksum /* Used by extra internal tests only run if NDEBUG is not defined */ u64 cksum3 = 0; /* Checksum based on contents of indexes */ Fts5Buffer term = {0,0,0}; /* Buffer used to hold most recent term */ + int bTestFail = 0; #endif const int flags = FTS5INDEX_QUERY_NOOUTPUT; @@ -252871,7 +255837,7 @@ static int sqlite3Fts5IndexIntegrityCheck(Fts5Index *p, u64 cksum, int bUseCksum char *z = (char*)fts5MultiIterTerm(pIter, &n); /* If this is a new term, query for it. Update cksum3 with the results. */ - fts5TestTerm(p, &term, z, n, cksum2, &cksum3); + fts5TestTerm(p, &term, z, n, cksum2, &cksum3, &bTestFail); if( p->rc ) break; if( eDetail==FTS5_DETAIL_NONE ){ @@ -252889,15 +255855,26 @@ static int sqlite3Fts5IndexIntegrityCheck(Fts5Index *p, u64 cksum, int bUseCksum } } } - fts5TestTerm(p, &term, 0, 0, cksum2, &cksum3); + fts5TestTerm(p, &term, 0, 0, cksum2, &cksum3, &bTestFail); fts5MultiIterFree(pIter); - if( p->rc==SQLITE_OK && bUseCksum && cksum!=cksum2 ) p->rc = FTS5_CORRUPT; - - fts5StructureRelease(pStruct); + if( p->rc==SQLITE_OK && bUseCksum && cksum!=cksum2 ){ + p->rc = FTS5_CORRUPT; + sqlite3Fts5ConfigErrmsg(p->pConfig, + "fts5: checksum mismatch for table \"%s\"", p->pConfig->zName + ); + } #ifdef SQLITE_DEBUG + /* In SQLITE_DEBUG builds, expensive extra checks were run as part of + ** the integrity-check above. If no other errors were detected, but one + ** of these tests failed, set the result to SQLITE_CORRUPT_VTAB here. */ + if( p->rc==SQLITE_OK && bTestFail ){ + p->rc = FTS5_CORRUPT; + } fts5BufferFree(&term); #endif + + fts5StructureRelease(pStruct); fts5BufferFree(&poslist); return fts5IndexReturn(p); } @@ -254241,6 +257218,17 @@ static void fts5SetUniqueFlag(sqlite3_index_info *pIdxInfo){ #endif } +static void fts5SetEstimatedRows(sqlite3_index_info *pIdxInfo, i64 nRow){ +#if SQLITE_VERSION_NUMBER>=3008002 +#ifndef SQLITE_CORE + if( sqlite3_libversion_number()>=3008002 ) +#endif + { + pIdxInfo->estimatedRows = nRow; + } +#endif +} + static int fts5UsePatternMatch( Fts5Config *pConfig, struct sqlite3_index_constraint *p @@ -254376,7 +257364,7 @@ static int fts5BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){ nSeenMatch++; idxStr[iIdxStr++] = 'M'; sqlite3_snprintf(6, &idxStr[iIdxStr], "%d", iCol); - idxStr += strlen(&idxStr[iIdxStr]); + iIdxStr += (int)strlen(&idxStr[iIdxStr]); assert( idxStr[iIdxStr]=='\0' ); } pInfo->aConstraintUsage[i].argvIndex = ++iCons; @@ -254395,6 +257383,7 @@ static int fts5BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){ idxStr[iIdxStr++] = '='; bSeenEq = 1; pInfo->aConstraintUsage[i].argvIndex = ++iCons; + pInfo->aConstraintUsage[i].omit = 1; } } } @@ -254442,17 +257431,21 @@ static int fts5BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){ /* Calculate the estimated cost based on the flags set in idxFlags. */ if( bSeenEq ){ - pInfo->estimatedCost = nSeenMatch ? 1000.0 : 10.0; - if( nSeenMatch==0 ) fts5SetUniqueFlag(pInfo); - }else if( bSeenLt && bSeenGt ){ - pInfo->estimatedCost = nSeenMatch ? 5000.0 : 250000.0; - }else if( bSeenLt || bSeenGt ){ - pInfo->estimatedCost = nSeenMatch ? 7500.0 : 750000.0; - }else{ - pInfo->estimatedCost = nSeenMatch ? 10000.0 : 1000000.0; - } - for(i=1; iestimatedCost *= 0.4; + pInfo->estimatedCost = nSeenMatch ? 1000.0 : 25.0; + fts5SetUniqueFlag(pInfo); + fts5SetEstimatedRows(pInfo, 1); + }else{ + if( bSeenLt && bSeenGt ){ + pInfo->estimatedCost = nSeenMatch ? 5000.0 : 750000.0; + }else if( bSeenLt || bSeenGt ){ + pInfo->estimatedCost = nSeenMatch ? 7500.0 : 2250000.0; + }else{ + pInfo->estimatedCost = nSeenMatch ? 10000.0 : 3000000.0; + } + for(i=1; iestimatedCost *= 0.4; + } + fts5SetEstimatedRows(pInfo, (i64)(pInfo->estimatedCost / 4.0)); } pInfo->idxNum = idxFlags; @@ -254651,7 +257644,9 @@ static int fts5CursorReseek(Fts5Cursor *pCsr, int *pbSkip){ int bDesc = pCsr->bDesc; i64 iRowid = sqlite3Fts5ExprRowid(pCsr->pExpr); - rc = sqlite3Fts5ExprFirst(pCsr->pExpr, pTab->p.pIndex, iRowid, bDesc); + rc = sqlite3Fts5ExprFirst( + pCsr->pExpr, pTab->p.pIndex, iRowid, pCsr->iLastRowid, bDesc + ); if( rc==SQLITE_OK && iRowid!=sqlite3Fts5ExprRowid(pCsr->pExpr) ){ *pbSkip = 1; } @@ -254823,7 +257818,9 @@ static int fts5CursorFirstSorted( static int fts5CursorFirst(Fts5FullTable *pTab, Fts5Cursor *pCsr, int bDesc){ int rc; Fts5Expr *pExpr = pCsr->pExpr; - rc = sqlite3Fts5ExprFirst(pExpr, pTab->p.pIndex, pCsr->iFirstRowid, bDesc); + rc = sqlite3Fts5ExprFirst( + pExpr, pTab->p.pIndex, pCsr->iFirstRowid, pCsr->iLastRowid, bDesc + ); if( sqlite3Fts5ExprEof(pExpr) ){ CsrFlagSet(pCsr, FTS5CSR_EOF); } @@ -257308,7 +260305,7 @@ static void fts5SourceIdFunc( ){ assert( nArg==0 ); UNUSED_PARAM2(nArg, apUnused); - sqlite3_result_text(pCtx, "fts5: 2025-07-30 19:33:53 4d8adfb30e03f9cf27f800a2c1ba3c48fb4ca1b08b0f5ed59a4d5ecbf45e20a3", -1, SQLITE_TRANSIENT); + sqlite3_result_text(pCtx, "fts5: 2025-11-28 17:28:25 281fc0e9afc38674b9b0991943b9e9d1e64c6cbdb133d35f6f5c87ff6af38a88", -1, SQLITE_TRANSIENT); } /* @@ -257331,9 +260328,9 @@ static void fts5LocaleFunc( sqlite3_value **apArg /* Function arguments */ ){ const char *zLocale = 0; - int nLocale = 0; + i64 nLocale = 0; const char *zText = 0; - int nText = 0; + i64 nText = 0; assert( nArg==2 ); UNUSED_PARAM(nArg); @@ -257350,10 +260347,10 @@ static void fts5LocaleFunc( Fts5Global *p = (Fts5Global*)sqlite3_user_data(pCtx); u8 *pBlob = 0; u8 *pCsr = 0; - int nBlob = 0; + i64 nBlob = 0; nBlob = FTS5_LOCALE_HDR_SIZE + nLocale + 1 + nText; - pBlob = (u8*)sqlite3_malloc(nBlob); + pBlob = (u8*)sqlite3_malloc64(nBlob); if( pBlob==0 ){ sqlite3_result_error_nomem(pCtx); return; @@ -257431,8 +260428,9 @@ static int fts5IntegrityMethod( " FTS5 table %s.%s: %s", zSchema, zTabname, sqlite3_errstr(rc)); } + }else if( (rc&0xff)==SQLITE_CORRUPT ){ + rc = SQLITE_OK; } - sqlite3Fts5IndexCloseReader(pTab->p.pIndex); pTab->p.pConfig->pzErrmsg = 0; @@ -262128,7 +265126,12 @@ static int fts5VocabOpenMethod( return rc; } +/* +** Restore cursor pCsr to the state it was in immediately after being +** created by the xOpen() method. +*/ static void fts5VocabResetCursor(Fts5VocabCursor *pCsr){ + int nCol = pCsr->pFts5->pConfig->nCol; pCsr->rowid = 0; sqlite3Fts5IterClose(pCsr->pIter); sqlite3Fts5StructureRelease(pCsr->pStruct); @@ -262138,6 +265141,12 @@ static void fts5VocabResetCursor(Fts5VocabCursor *pCsr){ pCsr->nLeTerm = -1; pCsr->zLeTerm = 0; pCsr->bEof = 0; + pCsr->iCol = 0; + pCsr->iInstPos = 0; + pCsr->iInstOff = 0; + pCsr->colUsed = 0; + memset(pCsr->aCnt, 0, sizeof(i64)*nCol); + memset(pCsr->aDoc, 0, sizeof(i64)*nCol); } /* diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.h b/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.h index c34235d84d..fcb9c45394 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.h +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.h @@ -147,9 +147,12 @@ extern "C" { ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.50.4" -#define SQLITE_VERSION_NUMBER 3050004 -#define SQLITE_SOURCE_ID "2025-07-30 19:33:53 4d8adfb30e03f9cf27f800a2c1ba3c48fb4ca1b08b0f5ed59a4d5ecbf45e20a3" +#define SQLITE_VERSION "3.51.1" +#define SQLITE_VERSION_NUMBER 3051001 +#define SQLITE_SOURCE_ID "2025-11-28 17:28:25 281fc0e9afc38674b9b0991943b9e9d1e64c6cbdb133d35f6f5c87ff6af38a88" +#define SQLITE_SCM_BRANCH "branch-3.51" +#define SQLITE_SCM_TAGS "release version-3.51.1" +#define SQLITE_SCM_DATETIME "2025-11-28T17:28:25.933Z" /* ** CAPI3REF: Run-Time Library Version Numbers @@ -169,9 +172,9 @@ extern "C" { ** assert( strcmp(sqlite3_libversion(),SQLITE_VERSION)==0 ); ** )^ ** -** ^The sqlite3_version[] string constant contains the text of [SQLITE_VERSION] -** macro. ^The sqlite3_libversion() function returns a pointer to the -** to the sqlite3_version[] string constant. The sqlite3_libversion() +** ^The sqlite3_version[] string constant contains the text of the +** [SQLITE_VERSION] macro. ^The sqlite3_libversion() function returns a +** pointer to the sqlite3_version[] string constant. The sqlite3_libversion() ** function is provided for use in DLLs since DLL users usually do not have ** direct access to string constants within the DLL. ^The ** sqlite3_libversion_number() function returns an integer equal to @@ -371,7 +374,7 @@ typedef int (*sqlite3_callback)(void*,int,char**, char**); ** without having to use a lot of C code. ** ** ^The sqlite3_exec() interface runs zero or more UTF-8 encoded, -** semicolon-separate SQL statements passed into its 2nd argument, +** semicolon-separated SQL statements passed into its 2nd argument, ** in the context of the [database connection] passed in as its 1st ** argument. ^If the callback function of the 3rd argument to ** sqlite3_exec() is not NULL, then it is invoked for each result row @@ -404,7 +407,7 @@ typedef int (*sqlite3_callback)(void*,int,char**, char**); ** result row is NULL then the corresponding string pointer for the ** sqlite3_exec() callback is a NULL pointer. ^The 4th argument to the ** sqlite3_exec() callback is an array of pointers to strings where each -** entry represents the name of corresponding result column as obtained +** entry represents the name of a corresponding result column as obtained ** from [sqlite3_column_name()]. ** ** ^If the 2nd parameter to sqlite3_exec() is a NULL pointer, a pointer @@ -498,6 +501,9 @@ SQLITE_API int sqlite3_exec( #define SQLITE_ERROR_MISSING_COLLSEQ (SQLITE_ERROR | (1<<8)) #define SQLITE_ERROR_RETRY (SQLITE_ERROR | (2<<8)) #define SQLITE_ERROR_SNAPSHOT (SQLITE_ERROR | (3<<8)) +#define SQLITE_ERROR_RESERVESIZE (SQLITE_ERROR | (4<<8)) +#define SQLITE_ERROR_KEY (SQLITE_ERROR | (5<<8)) +#define SQLITE_ERROR_UNABLE (SQLITE_ERROR | (6<<8)) #define SQLITE_IOERR_READ (SQLITE_IOERR | (1<<8)) #define SQLITE_IOERR_SHORT_READ (SQLITE_IOERR | (2<<8)) #define SQLITE_IOERR_WRITE (SQLITE_IOERR | (3<<8)) @@ -532,6 +538,8 @@ SQLITE_API int sqlite3_exec( #define SQLITE_IOERR_DATA (SQLITE_IOERR | (32<<8)) #define SQLITE_IOERR_CORRUPTFS (SQLITE_IOERR | (33<<8)) #define SQLITE_IOERR_IN_PAGE (SQLITE_IOERR | (34<<8)) +#define SQLITE_IOERR_BADKEY (SQLITE_IOERR | (35<<8)) +#define SQLITE_IOERR_CODEC (SQLITE_IOERR | (36<<8)) #define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8)) #define SQLITE_LOCKED_VTAB (SQLITE_LOCKED | (2<<8)) #define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8)) @@ -590,7 +598,7 @@ SQLITE_API int sqlite3_exec( ** Note in particular that passing the SQLITE_OPEN_EXCLUSIVE flag into ** [sqlite3_open_v2()] does *not* cause the underlying database file ** to be opened using O_EXCL. Passing SQLITE_OPEN_EXCLUSIVE into -** [sqlite3_open_v2()] has historically be a no-op and might become an +** [sqlite3_open_v2()] has historically been a no-op and might become an ** error in future versions of SQLite. */ #define SQLITE_OPEN_READONLY 0x00000001 /* Ok for sqlite3_open_v2() */ @@ -684,7 +692,7 @@ SQLITE_API int sqlite3_exec( ** SQLite uses one of these integer values as the second ** argument to calls it makes to the xLock() and xUnlock() methods ** of an [sqlite3_io_methods] object. These values are ordered from -** lest restrictive to most restrictive. +** least restrictive to most restrictive. ** ** The argument to xLock() is always SHARED or higher. The argument to ** xUnlock is either SHARED or NONE. @@ -925,7 +933,7 @@ struct sqlite3_io_methods { ** connection. See also [SQLITE_FCNTL_FILE_POINTER]. ** **
  • [[SQLITE_FCNTL_SYNC_OMITTED]] -** No longer in use. +** The SQLITE_FCNTL_SYNC_OMITTED file-control is no longer used. ** **
  • [[SQLITE_FCNTL_SYNC]] ** The [SQLITE_FCNTL_SYNC] opcode is generated internally by SQLite and @@ -1000,7 +1008,7 @@ struct sqlite3_io_methods { ** **
  • [[SQLITE_FCNTL_VFSNAME]] ** ^The [SQLITE_FCNTL_VFSNAME] opcode can be used to obtain the names of -** all [VFSes] in the VFS stack. The names are of all VFS shims and the +** all [VFSes] in the VFS stack. The names of all VFS shims and the ** final bottom-level VFS are written into memory obtained from ** [sqlite3_malloc()] and the result is stored in the char* variable ** that the fourth parameter of [sqlite3_file_control()] points to. @@ -1014,7 +1022,7 @@ struct sqlite3_io_methods { ** ^The [SQLITE_FCNTL_VFS_POINTER] opcode finds a pointer to the top-level ** [VFSes] currently in use. ^(The argument X in ** sqlite3_file_control(db,SQLITE_FCNTL_VFS_POINTER,X) must be -** of type "[sqlite3_vfs] **". This opcodes will set *X +** of type "[sqlite3_vfs] **". This opcode will set *X ** to a pointer to the top-level VFS.)^ ** ^When there are multiple VFS shims in the stack, this opcode finds the ** upper-most shim only. @@ -1204,7 +1212,7 @@ struct sqlite3_io_methods { **
  • [[SQLITE_FCNTL_EXTERNAL_READER]] ** The EXPERIMENTAL [SQLITE_FCNTL_EXTERNAL_READER] opcode is used to detect ** whether or not there is a database client in another process with a wal-mode -** transaction open on the database or not. It is only available on unix.The +** transaction open on the database or not. It is only available on unix. The ** (void*) argument passed with this file-control should be a pointer to a ** value of type (int). The integer value is set to 1 if the database is a wal ** mode database and there exists at least one client in another process that @@ -1222,6 +1230,15 @@ struct sqlite3_io_methods { ** database is not a temp db, then the [SQLITE_FCNTL_RESET_CACHE] file-control ** purges the contents of the in-memory page cache. If there is an open ** transaction, or if the db is a temp-db, this opcode is a no-op, not an error. +** +**
  • [[SQLITE_FCNTL_FILESTAT]] +** The [SQLITE_FCNTL_FILESTAT] opcode returns low-level diagnostic information +** about the [sqlite3_file] objects used access the database and journal files +** for the given schema. The fourth parameter to [sqlite3_file_control()] +** should be an initialized [sqlite3_str] pointer. JSON text describing +** various aspects of the sqlite3_file object is appended to the sqlite3_str. +** The SQLITE_FCNTL_FILESTAT opcode is usually a no-op, unless compile-time +** options are used to enable it. ** */ #define SQLITE_FCNTL_LOCKSTATE 1 @@ -1267,6 +1284,7 @@ struct sqlite3_io_methods { #define SQLITE_FCNTL_RESET_CACHE 42 #define SQLITE_FCNTL_NULL_IO 43 #define SQLITE_FCNTL_BLOCK_ON_CONNECT 44 +#define SQLITE_FCNTL_FILESTAT 45 /* deprecated names */ #define SQLITE_GET_LOCKPROXYFILE SQLITE_FCNTL_GET_LOCKPROXYFILE @@ -1629,7 +1647,7 @@ struct sqlite3_vfs { ** SQLite interfaces so that an application usually does not need to ** invoke sqlite3_initialize() directly. For example, [sqlite3_open()] ** calls sqlite3_initialize() so the SQLite library will be automatically -** initialized when [sqlite3_open()] is called if it has not be initialized +** initialized when [sqlite3_open()] is called if it has not been initialized ** already. ^However, if SQLite is compiled with the [SQLITE_OMIT_AUTOINIT] ** compile-time option, then the automatic calls to sqlite3_initialize() ** are omitted and the application must call sqlite3_initialize() directly @@ -1886,21 +1904,21 @@ struct sqlite3_mem_methods { ** The [sqlite3_mem_methods] ** structure is filled with the currently defined memory allocation routines.)^ ** This option can be used to overload the default memory allocation -** routines with a wrapper that simulations memory allocation failure or +** routines with a wrapper that simulates memory allocation failure or ** tracks memory usage, for example.
  • ** ** [[SQLITE_CONFIG_SMALL_MALLOC]]
    SQLITE_CONFIG_SMALL_MALLOC
    -**
    ^The SQLITE_CONFIG_SMALL_MALLOC option takes single argument of +**
    ^The SQLITE_CONFIG_SMALL_MALLOC option takes a single argument of ** type int, interpreted as a boolean, which if true provides a hint to ** SQLite that it should avoid large memory allocations if possible. ** SQLite will run faster if it is free to make large memory allocations, -** but some application might prefer to run slower in exchange for +** but some applications might prefer to run slower in exchange for ** guarantees about memory fragmentation that are possible if large ** allocations are avoided. This hint is normally off. **
    ** ** [[SQLITE_CONFIG_MEMSTATUS]]
    SQLITE_CONFIG_MEMSTATUS
    -**
    ^The SQLITE_CONFIG_MEMSTATUS option takes single argument of type int, +**
    ^The SQLITE_CONFIG_MEMSTATUS option takes a single argument of type int, ** interpreted as a boolean, which enables or disables the collection of ** memory allocation statistics. ^(When memory allocation statistics are ** disabled, the following SQLite interfaces become non-operational: @@ -1945,7 +1963,7 @@ struct sqlite3_mem_methods { ** ^If pMem is NULL and N is non-zero, then each database connection ** does an initial bulk allocation for page cache memory ** from [sqlite3_malloc()] sufficient for N cache lines if N is positive or -** of -1024*N bytes if N is negative, . ^If additional +** of -1024*N bytes if N is negative. ^If additional ** page cache memory is needed beyond what is provided by the initial ** allocation, then SQLite goes to [sqlite3_malloc()] separately for each ** additional cache line.
    @@ -1974,7 +1992,7 @@ struct sqlite3_mem_methods { **
    ^(The SQLITE_CONFIG_MUTEX option takes a single argument which is a ** pointer to an instance of the [sqlite3_mutex_methods] structure. ** The argument specifies alternative low-level mutex routines to be used -** in place the mutex routines built into SQLite.)^ ^SQLite makes a copy of +** in place of the mutex routines built into SQLite.)^ ^SQLite makes a copy of ** the content of the [sqlite3_mutex_methods] structure before the call to ** [sqlite3_config()] returns. ^If SQLite is compiled with ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then @@ -2016,7 +2034,7 @@ struct sqlite3_mem_methods { ** ** [[SQLITE_CONFIG_GETPCACHE2]]
    SQLITE_CONFIG_GETPCACHE2
    **
    ^(The SQLITE_CONFIG_GETPCACHE2 option takes a single argument which -** is a pointer to an [sqlite3_pcache_methods2] object. SQLite copies of +** is a pointer to an [sqlite3_pcache_methods2] object. SQLite copies off ** the current page cache implementation into that object.)^
    ** ** [[SQLITE_CONFIG_LOG]]
    SQLITE_CONFIG_LOG
    @@ -2033,7 +2051,7 @@ struct sqlite3_mem_methods { ** the logger function is a copy of the first parameter to the corresponding ** [sqlite3_log()] call and is intended to be a [result code] or an ** [extended result code]. ^The third parameter passed to the logger is -** log message after formatting via [sqlite3_snprintf()]. +** a log message after formatting via [sqlite3_snprintf()]. ** The SQLite logging interface is not reentrant; the logger function ** supplied by the application must not invoke any SQLite interface. ** In a multi-threaded application, the application-defined logger @@ -2224,7 +2242,7 @@ struct sqlite3_mem_methods { ** These constants are the available integer configuration options that ** can be passed as the second parameter to the [sqlite3_db_config()] interface. ** -** The [sqlite3_db_config()] interface is a var-args functions. It takes a +** The [sqlite3_db_config()] interface is a var-args function. It takes a ** variable number of parameters, though always at least two. The number of ** parameters passed into sqlite3_db_config() depends on which of these ** constants is given as the second parameter. This documentation page @@ -2336,17 +2354,20 @@ struct sqlite3_mem_methods { ** ** [[SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER]] **
    SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER
    -**
    ^This option is used to enable or disable the -** [fts3_tokenizer()] function which is part of the -** [FTS3] full-text search engine extension. -** There must be two additional arguments. -** The first argument is an integer which is 0 to disable fts3_tokenizer() or -** positive to enable fts3_tokenizer() or negative to leave the setting -** unchanged. -** The second parameter is a pointer to an integer into which -** is written 0 or 1 to indicate whether fts3_tokenizer is disabled or enabled -** following this call. The second parameter may be a NULL pointer, in -** which case the new setting is not reported back.
    +**
    ^This option is used to enable or disable using the +** [fts3_tokenizer()] function - part of the [FTS3] full-text search engine +** extension - without using bound parameters as the parameters. Doing so +** is disabled by default. There must be two additional arguments. The first +** argument is an integer. If it is passed 0, then using fts3_tokenizer() +** without bound parameters is disabled. If it is passed a positive value, +** then calling fts3_tokenizer without bound parameters is enabled. If it +** is passed a negative value, this setting is not modified - this can be +** used to query for the current setting. The second parameter is a pointer +** to an integer into which is written 0 or 1 to indicate the current value +** of this setting (after it is modified, if applicable). The second +** parameter may be a NULL pointer, in which case the value of the setting +** is not reported back. Refer to [FTS3] documentation for further details. +**
    ** ** [[SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION]] **
    SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION
    @@ -2358,8 +2379,8 @@ struct sqlite3_mem_methods { ** When the first argument to this interface is 1, then only the C-API is ** enabled and the SQL function remains disabled. If the first argument to ** this interface is 0, then both the C-API and the SQL function are disabled. -** If the first argument is -1, then no changes are made to state of either the -** C-API or the SQL function. +** If the first argument is -1, then no changes are made to the state of either +** the C-API or the SQL function. ** The second parameter is a pointer to an integer into which ** is written 0 or 1 to indicate whether [sqlite3_load_extension()] interface ** is disabled or enabled following this call. The second parameter may @@ -2477,7 +2498,7 @@ struct sqlite3_mem_methods { ** [[SQLITE_DBCONFIG_LEGACY_ALTER_TABLE]] **
    SQLITE_DBCONFIG_LEGACY_ALTER_TABLE
    **
    The SQLITE_DBCONFIG_LEGACY_ALTER_TABLE option activates or deactivates -** the legacy behavior of the [ALTER TABLE RENAME] command such it +** the legacy behavior of the [ALTER TABLE RENAME] command such that it ** behaves as it did prior to [version 3.24.0] (2018-06-04). See the ** "Compatibility Notice" on the [ALTER TABLE RENAME documentation] for ** additional information. This feature can also be turned on and off @@ -2526,7 +2547,7 @@ struct sqlite3_mem_methods { **
    SQLITE_DBCONFIG_LEGACY_FILE_FORMAT
    **
    The SQLITE_DBCONFIG_LEGACY_FILE_FORMAT option activates or deactivates ** the legacy file format flag. When activated, this flag causes all newly -** created database file to have a schema format version number (the 4-byte +** created database files to have a schema format version number (the 4-byte ** integer found at offset 44 into the database header) of 1. This in turn ** means that the resulting database file will be readable and writable by ** any SQLite version back to 3.0.0 ([dateof:3.0.0]). Without this setting, @@ -2553,7 +2574,7 @@ struct sqlite3_mem_methods { ** the database handle both when the SQL statement is prepared and when it ** is stepped. The flag is set (collection of statistics is enabled) ** by default.

    This option takes two arguments: an integer and a pointer to -** an integer.. The first argument is 1, 0, or -1 to enable, disable, or +** an integer. The first argument is 1, 0, or -1 to enable, disable, or ** leave unchanged the statement scanstatus option. If the second argument ** is not NULL, then the value of the statement scanstatus setting after ** processing the first argument is written into the integer that the second @@ -2596,8 +2617,8 @@ struct sqlite3_mem_methods { **

    The SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE option enables or disables the ** ability of the [ATTACH DATABASE] SQL command to open a database for writing. ** This capability is enabled by default. Applications can disable or -** reenable this capability using the current DBCONFIG option. If the -** the this capability is disabled, the [ATTACH] command will still work, +** reenable this capability using the current DBCONFIG option. If +** this capability is disabled, the [ATTACH] command will still work, ** but the database will be opened read-only. If this option is disabled, ** then the ability to create a new database using [ATTACH] is also disabled, ** regardless of the value of the [SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE] @@ -2631,7 +2652,7 @@ struct sqlite3_mem_methods { ** **

    Most of the SQLITE_DBCONFIG options take two arguments, so that the ** overall call to [sqlite3_db_config()] has a total of four parameters. -** The first argument (the third parameter to sqlite3_db_config()) is a integer. +** The first argument (the third parameter to sqlite3_db_config()) is an integer. ** The second argument is a pointer to an integer. If the first argument is 1, ** then the option becomes enabled. If the first integer argument is 0, then the ** option is disabled. If the first argument is -1, then the option setting @@ -2921,7 +2942,7 @@ SQLITE_API int sqlite3_is_interrupted(sqlite3*); ** ^These routines return 0 if the statement is incomplete. ^If a ** memory allocation fails, then SQLITE_NOMEM is returned. ** -** ^These routines do not parse the SQL statements thus +** ^These routines do not parse the SQL statements and thus ** will not detect syntactically incorrect SQL. ** ** ^(If SQLite has not been initialized using [sqlite3_initialize()] prior @@ -3038,7 +3059,7 @@ SQLITE_API int sqlite3_busy_timeout(sqlite3*, int ms); ** indefinitely if possible. The results of passing any other negative value ** are undefined. ** -** Internally, each SQLite database handle store two timeout values - the +** Internally, each SQLite database handle stores two timeout values - the ** busy-timeout (used for rollback mode databases, or if the VFS does not ** support blocking locks) and the setlk-timeout (used for blocking locks ** on wal-mode databases). The sqlite3_busy_timeout() method sets both @@ -3068,7 +3089,7 @@ SQLITE_API int sqlite3_setlk_timeout(sqlite3*, int ms, int flags); ** This is a legacy interface that is preserved for backwards compatibility. ** Use of this interface is not recommended. ** -** Definition: A result table is memory data structure created by the +** Definition: A result table is a memory data structure created by the ** [sqlite3_get_table()] interface. A result table records the ** complete query results from one or more queries. ** @@ -3211,7 +3232,7 @@ SQLITE_API char *sqlite3_vsnprintf(int,char*,const char*, va_list); ** ^Calling sqlite3_free() with a pointer previously returned ** by sqlite3_malloc() or sqlite3_realloc() releases that memory so ** that it might be reused. ^The sqlite3_free() routine is -** a no-op if is called with a NULL pointer. Passing a NULL pointer +** a no-op if it is called with a NULL pointer. Passing a NULL pointer ** to sqlite3_free() is harmless. After being freed, memory ** should neither be read nor written. Even reading previously freed ** memory might result in a segmentation fault or other severe error. @@ -3229,13 +3250,13 @@ SQLITE_API char *sqlite3_vsnprintf(int,char*,const char*, va_list); ** sqlite3_free(X). ** ^sqlite3_realloc(X,N) returns a pointer to a memory allocation ** of at least N bytes in size or NULL if insufficient memory is available. -** ^If M is the size of the prior allocation, then min(N,M) bytes -** of the prior allocation are copied into the beginning of buffer returned +** ^If M is the size of the prior allocation, then min(N,M) bytes of the +** prior allocation are copied into the beginning of the buffer returned ** by sqlite3_realloc(X,N) and the prior allocation is freed. ** ^If sqlite3_realloc(X,N) returns NULL and N is positive, then the ** prior allocation is not freed. ** -** ^The sqlite3_realloc64(X,N) interfaces works the same as +** ^The sqlite3_realloc64(X,N) interface works the same as ** sqlite3_realloc(X,N) except that N is a 64-bit unsigned integer instead ** of a 32-bit signed integer. ** @@ -3285,7 +3306,7 @@ SQLITE_API sqlite3_uint64 sqlite3_msize(void*); ** was last reset. ^The values returned by [sqlite3_memory_used()] and ** [sqlite3_memory_highwater()] include any overhead ** added by SQLite in its implementation of [sqlite3_malloc()], -** but not overhead added by the any underlying system library +** but not overhead added by any underlying system library ** routines that [sqlite3_malloc()] may call. ** ** ^The memory high-water mark is reset to the current value of @@ -3737,7 +3758,7 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*); ** there is no harm in trying.) ** ** ^(

    [SQLITE_OPEN_SHAREDCACHE]
    -**
    The database is opened [shared cache] enabled, overriding +**
    The database is opened with [shared cache] enabled, overriding ** the default shared cache setting provided by ** [sqlite3_enable_shared_cache()].)^ ** The [use of shared cache mode is discouraged] and hence shared cache @@ -3745,7 +3766,7 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*); ** this option is a no-op. ** ** ^(
    [SQLITE_OPEN_PRIVATECACHE]
    -**
    The database is opened [shared cache] disabled, overriding +**
    The database is opened with [shared cache] disabled, overriding ** the default shared cache setting provided by ** [sqlite3_enable_shared_cache()].)^ ** @@ -4163,7 +4184,7 @@ SQLITE_API void sqlite3_free_filename(sqlite3_filename); ** subsequent calls to other SQLite interface functions.)^ ** ** ^The sqlite3_errstr(E) interface returns the English-language text -** that describes the [result code] E, as UTF-8, or NULL if E is not an +** that describes the [result code] E, as UTF-8, or NULL if E is not a ** result code for which a text error message is available. ** ^(Memory to hold the error message string is managed internally ** and must not be freed by the application)^. @@ -4171,7 +4192,7 @@ SQLITE_API void sqlite3_free_filename(sqlite3_filename); ** ^If the most recent error references a specific token in the input ** SQL, the sqlite3_error_offset() interface returns the byte offset ** of the start of that token. ^The byte offset returned by -** sqlite3_error_offset() assumes that the input SQL is UTF8. +** sqlite3_error_offset() assumes that the input SQL is UTF-8. ** ^If the most recent error does not reference a specific token in the input ** SQL, then the sqlite3_error_offset() function returns -1. ** @@ -4196,6 +4217,34 @@ SQLITE_API const void *sqlite3_errmsg16(sqlite3*); SQLITE_API const char *sqlite3_errstr(int); SQLITE_API int sqlite3_error_offset(sqlite3 *db); +/* +** CAPI3REF: Set Error Codes And Message +** METHOD: sqlite3 +** +** Set the error code of the database handle passed as the first argument +** to errcode, and the error message to a copy of nul-terminated string +** zErrMsg. If zErrMsg is passed NULL, then the error message is set to +** the default message associated with the supplied error code. Subsequent +** calls to [sqlite3_errcode()] and [sqlite3_errmsg()] and similar will +** return the values set by this routine in place of what was previously +** set by SQLite itself. +** +** This function returns SQLITE_OK if the error code and error message are +** successfully set, SQLITE_NOMEM if an OOM occurs, and SQLITE_MISUSE if +** the database handle is NULL or invalid. +** +** The error code and message set by this routine remains in effect until +** they are changed, either by another call to this routine or until they are +** changed to by SQLite itself to reflect the result of some subsquent +** API call. +** +** This function is intended for use by SQLite extensions or wrappers. The +** idea is that an extension or wrapper can use this routine to set error +** messages and error codes and thus behave more like a core SQLite +** feature from the point of view of an application. +*/ +SQLITE_API int sqlite3_set_errmsg(sqlite3 *db, int errcode, const char *zErrMsg); + /* ** CAPI3REF: Prepared Statement Object ** KEYWORDS: {prepared statement} {prepared statements} @@ -4270,8 +4319,8 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); ** ** These constants define various performance limits ** that can be lowered at run-time using [sqlite3_limit()]. -** The synopsis of the meanings of the various limits is shown below. -** Additional information is available at [limits | Limits in SQLite]. +** A concise description of these limits follows, and additional information +** is available at [limits | Limits in SQLite]. ** **
    ** [[SQLITE_LIMIT_LENGTH]] ^(
    SQLITE_LIMIT_LENGTH
    @@ -4336,7 +4385,7 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); /* ** CAPI3REF: Prepare Flags ** -** These constants define various flags that can be passed into +** These constants define various flags that can be passed into the ** "prepFlags" parameter of the [sqlite3_prepare_v3()] and ** [sqlite3_prepare16_v3()] interfaces. ** @@ -4423,7 +4472,7 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); ** there is a small performance advantage to passing an nByte parameter that ** is the number of bytes in the input string including ** the nul-terminator. -** Note that nByte measure the length of the input in bytes, not +** Note that nByte measures the length of the input in bytes, not ** characters, even for the UTF-16 interfaces. ** ** ^If pzTail is not NULL then *pzTail is made to point to the first byte @@ -4557,7 +4606,7 @@ SQLITE_API int sqlite3_prepare16_v3( ** ** ^The sqlite3_expanded_sql() interface returns NULL if insufficient memory ** is available to hold the result, or if the result would exceed the -** the maximum string length determined by the [SQLITE_LIMIT_LENGTH]. +** maximum string length determined by the [SQLITE_LIMIT_LENGTH]. ** ** ^The [SQLITE_TRACE_SIZE_LIMIT] compile-time option limits the size of ** bound parameter expansions. ^The [SQLITE_OMIT_TRACE] compile-time @@ -4745,7 +4794,7 @@ typedef struct sqlite3_value sqlite3_value; ** ** The context in which an SQL function executes is stored in an ** sqlite3_context object. ^A pointer to an sqlite3_context object -** is always first parameter to [application-defined SQL functions]. +** is always the first parameter to [application-defined SQL functions]. ** The application-defined SQL function implementation will pass this ** pointer through into calls to [sqlite3_result_int | sqlite3_result()], ** [sqlite3_aggregate_context()], [sqlite3_user_data()], @@ -4869,9 +4918,11 @@ typedef struct sqlite3_context sqlite3_context; ** associated with the pointer P of type T. ^D is either a NULL pointer or ** a pointer to a destructor function for P. ^SQLite will invoke the ** destructor D with a single argument of P when it is finished using -** P. The T parameter should be a static string, preferably a string -** literal. The sqlite3_bind_pointer() routine is part of the -** [pointer passing interface] added for SQLite 3.20.0. +** P, even if the call to sqlite3_bind_pointer() fails. Due to a +** historical design quirk, results are undefined if D is +** SQLITE_TRANSIENT. The T parameter should be a static string, +** preferably a string literal. The sqlite3_bind_pointer() routine is +** part of the [pointer passing interface] added for SQLite 3.20.0. ** ** ^If any of the sqlite3_bind_*() routines are called with a NULL pointer ** for the [prepared statement] or with a prepared statement for which @@ -5482,7 +5533,7 @@ SQLITE_API int sqlite3_column_type(sqlite3_stmt*, int iCol); ** ** ^The sqlite3_finalize() function is called to delete a [prepared statement]. ** ^If the most recent evaluation of the statement encountered no errors -** or if the statement is never been evaluated, then sqlite3_finalize() returns +** or if the statement has never been evaluated, then sqlite3_finalize() returns ** SQLITE_OK. ^If the most recent evaluation of statement S failed, then ** sqlite3_finalize(S) returns the appropriate [error code] or ** [extended error code]. @@ -5714,7 +5765,7 @@ SQLITE_API int sqlite3_create_window_function( /* ** CAPI3REF: Text Encodings ** -** These constant define integer codes that represent the various +** These constants define integer codes that represent the various ** text encodings supported by SQLite. */ #define SQLITE_UTF8 1 /* IMP: R-37514-35566 */ @@ -5806,7 +5857,7 @@ SQLITE_API int sqlite3_create_window_function( ** result. ** Every function that invokes [sqlite3_result_subtype()] should have this ** property. If it does not, then the call to [sqlite3_result_subtype()] -** might become a no-op if the function is used as term in an +** might become a no-op if the function is used as a term in an ** [expression index]. On the other hand, SQL functions that never invoke ** [sqlite3_result_subtype()] should avoid setting this property, as the ** purpose of this property is to disable certain optimizations that are @@ -5933,7 +5984,7 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6 ** sqlite3_value_nochange(X) interface returns true if and only if ** the column corresponding to X is unchanged by the UPDATE operation ** that the xUpdate method call was invoked to implement and if -** and the prior [xColumn] method call that was invoked to extracted +** the prior [xColumn] method call that was invoked to extract ** the value for that column returned without setting a result (probably ** because it queried [sqlite3_vtab_nochange()] and found that the column ** was unchanging). ^Within an [xUpdate] method, any value for which @@ -6206,6 +6257,7 @@ SQLITE_API void sqlite3_set_auxdata(sqlite3_context*, int N, void*, void (*)(voi ** or a NULL pointer if there were no prior calls to ** sqlite3_set_clientdata() with the same values of D and N. ** Names are compared using strcmp() and are thus case sensitive. +** It returns 0 on success and SQLITE_NOMEM on allocation failure. ** ** If P and X are both non-NULL, then the destructor X is invoked with ** argument P on the first of the following occurrences: @@ -8882,9 +8934,18 @@ SQLITE_API int sqlite3_status64( ** ^The sqlite3_db_status() routine returns SQLITE_OK on success and a ** non-zero [error code] on failure. ** +** ^The sqlite3_db_status64(D,O,C,H,R) routine works exactly the same +** way as sqlite3_db_status(D,O,C,H,R) routine except that the C and H +** parameters are pointer to 64-bit integers (type: sqlite3_int64) instead +** of pointers to 32-bit integers, which allows larger status values +** to be returned. If a status value exceeds 2,147,483,647 then +** sqlite3_db_status() will truncate the value whereas sqlite3_db_status64() +** will return the full value. +** ** See also: [sqlite3_status()] and [sqlite3_stmt_status()]. */ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg); +SQLITE_API int sqlite3_db_status64(sqlite3*,int,sqlite3_int64*,sqlite3_int64*,int); /* ** CAPI3REF: Status Parameters for database connections @@ -8981,6 +9042,10 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r ** If an IO or other error occurs while writing a page to disk, the effect ** on subsequent SQLITE_DBSTATUS_CACHE_WRITE requests is undefined.)^ ^The ** highwater mark associated with SQLITE_DBSTATUS_CACHE_WRITE is always 0. +**

    +** ^(There is overlap between the quantities measured by this parameter +** (SQLITE_DBSTATUS_CACHE_WRITE) and SQLITE_DBSTATUS_TEMPBUF_SPILL. +** Resetting one will reduce the other.)^ **

    ** ** [[SQLITE_DBSTATUS_CACHE_SPILL]] ^(
    SQLITE_DBSTATUS_CACHE_SPILL
    @@ -8996,6 +9061,18 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r **
    This parameter returns zero for the current value if and only if ** all foreign key constraints (deferred or immediate) have been ** resolved.)^ ^The highwater mark is always 0. +** +** [[SQLITE_DBSTATUS_TEMPBUF_SPILL] ^(
    SQLITE_DBSTATUS_TEMPBUF_SPILL
    +**
    ^(This parameter returns the number of bytes written to temporary +** files on disk that could have been kept in memory had sufficient memory +** been available. This value includes writes to intermediate tables that +** are part of complex queries, external sorts that spill to disk, and +** writes to TEMP tables.)^ +** ^The highwater mark is always 0. +**

    +** ^(There is overlap between the quantities measured by this parameter +** (SQLITE_DBSTATUS_TEMPBUF_SPILL) and SQLITE_DBSTATUS_CACHE_WRITE. +** Resetting one will reduce the other.)^ **

    ** */ @@ -9012,7 +9089,8 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r #define SQLITE_DBSTATUS_DEFERRED_FKS 10 #define SQLITE_DBSTATUS_CACHE_USED_SHARED 11 #define SQLITE_DBSTATUS_CACHE_SPILL 12 -#define SQLITE_DBSTATUS_MAX 12 /* Largest defined DBSTATUS */ +#define SQLITE_DBSTATUS_TEMPBUF_SPILL 13 +#define SQLITE_DBSTATUS_MAX 13 /* Largest defined DBSTATUS */ /* @@ -9777,7 +9855,7 @@ SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...); ** is the number of pages currently in the write-ahead log file, ** including those that were just committed. ** -** The callback function should normally return [SQLITE_OK]. ^If an error +** ^The callback function should normally return [SQLITE_OK]. ^If an error ** code is returned, that error will propagate back up through the ** SQLite code base to cause the statement that provoked the callback ** to report an error, though the commit will have still occurred. If the @@ -9785,13 +9863,26 @@ SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...); ** that does not correspond to any valid SQLite error code, the results ** are undefined. ** -** A single database handle may have at most a single write-ahead log callback -** registered at one time. ^Calling [sqlite3_wal_hook()] replaces any -** previously registered write-ahead log callback. ^The return value is -** a copy of the third parameter from the previous call, if any, or 0. -** ^Note that the [sqlite3_wal_autocheckpoint()] interface and the -** [wal_autocheckpoint pragma] both invoke [sqlite3_wal_hook()] and will -** overwrite any prior [sqlite3_wal_hook()] settings. +** ^A single database handle may have at most a single write-ahead log +** callback registered at one time. ^Calling [sqlite3_wal_hook()] +** replaces the default behavior or previously registered write-ahead +** log callback. +** +** ^The return value is a copy of the third parameter from the +** previous call, if any, or 0. +** +** ^The [sqlite3_wal_autocheckpoint()] interface and the +** [wal_autocheckpoint pragma] both invoke [sqlite3_wal_hook()] and +** will overwrite any prior [sqlite3_wal_hook()] settings. +** +** ^If a write-ahead log callback is set using this function then +** [sqlite3_wal_checkpoint_v2()] or [PRAGMA wal_checkpoint] +** should be invoked periodically to keep the write-ahead log file +** from growing without bound. +** +** ^Passing a NULL pointer for the callback disables automatic +** checkpointing entirely. To re-enable the default behavior, call +** sqlite3_wal_autocheckpoint(db,1000) or use [PRAGMA wal_checkpoint]. */ SQLITE_API void *sqlite3_wal_hook( sqlite3*, @@ -9808,7 +9899,7 @@ SQLITE_API void *sqlite3_wal_hook( ** to automatically [checkpoint] ** after committing a transaction if there are N or ** more frames in the [write-ahead log] file. ^Passing zero or -** a negative value as the nFrame parameter disables automatic +** a negative value as the N parameter disables automatic ** checkpoints entirely. ** ** ^The callback registered by this function replaces any existing callback @@ -9824,9 +9915,10 @@ SQLITE_API void *sqlite3_wal_hook( ** ** ^Every new [database connection] defaults to having the auto-checkpoint ** enabled with a threshold of 1000 or [SQLITE_DEFAULT_WAL_AUTOCHECKPOINT] -** pages. The use of this interface -** is only necessary if the default setting is found to be suboptimal -** for a particular application. +** pages. +** +** ^The use of this interface is only necessary if the default setting +** is found to be suboptimal for a particular application. */ SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int N); @@ -9891,6 +9983,11 @@ SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb); ** ^This mode works the same way as SQLITE_CHECKPOINT_RESTART with the ** addition that it also truncates the log file to zero bytes just prior ** to a successful return. +** +**
    SQLITE_CHECKPOINT_NOOP
    +** ^This mode always checkpoints zero frames. The only reason to invoke +** a NOOP checkpoint is to access the values returned by +** sqlite3_wal_checkpoint_v2() via output parameters *pnLog and *pnCkpt. ** ** ** ^If pnLog is not NULL, then *pnLog is set to the total number of frames in @@ -9961,6 +10058,7 @@ SQLITE_API int sqlite3_wal_checkpoint_v2( ** See the [sqlite3_wal_checkpoint_v2()] documentation for details on the ** meaning of each of these checkpoint modes. */ +#define SQLITE_CHECKPOINT_NOOP -1 /* Do no work at all */ #define SQLITE_CHECKPOINT_PASSIVE 0 /* Do as much as possible w/o blocking */ #define SQLITE_CHECKPOINT_FULL 1 /* Wait for writers, then checkpoint */ #define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for readers */ @@ -10329,7 +10427,7 @@ SQLITE_API int sqlite3_vtab_in(sqlite3_index_info*, int iCons, int bHandle); **   ){ **   // do something with pVal **   } -**   if( rc!=SQLITE_OK ){ +**   if( rc!=SQLITE_DONE ){ **   // an error has occurred **   } ** )^ @@ -10788,7 +10886,7 @@ typedef struct sqlite3_snapshot { ** The [sqlite3_snapshot_get()] interface is only available when the ** [SQLITE_ENABLE_SNAPSHOT] compile-time option is used. */ -SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_get( +SQLITE_API int sqlite3_snapshot_get( sqlite3 *db, const char *zSchema, sqlite3_snapshot **ppSnapshot @@ -10837,7 +10935,7 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_get( ** The [sqlite3_snapshot_open()] interface is only available when the ** [SQLITE_ENABLE_SNAPSHOT] compile-time option is used. */ -SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_open( +SQLITE_API int sqlite3_snapshot_open( sqlite3 *db, const char *zSchema, sqlite3_snapshot *pSnapshot @@ -10854,7 +10952,7 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_open( ** The [sqlite3_snapshot_free()] interface is only available when the ** [SQLITE_ENABLE_SNAPSHOT] compile-time option is used. */ -SQLITE_API SQLITE_EXPERIMENTAL void sqlite3_snapshot_free(sqlite3_snapshot*); +SQLITE_API void sqlite3_snapshot_free(sqlite3_snapshot*); /* ** CAPI3REF: Compare the ages of two snapshot handles. @@ -10881,7 +10979,7 @@ SQLITE_API SQLITE_EXPERIMENTAL void sqlite3_snapshot_free(sqlite3_snapshot*); ** This interface is only available if SQLite is compiled with the ** [SQLITE_ENABLE_SNAPSHOT] option. */ -SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_cmp( +SQLITE_API int sqlite3_snapshot_cmp( sqlite3_snapshot *p1, sqlite3_snapshot *p2 ); @@ -10909,7 +11007,7 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_cmp( ** This interface is only available if SQLite is compiled with the ** [SQLITE_ENABLE_SNAPSHOT] option. */ -SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_recover(sqlite3 *db, const char *zDb); +SQLITE_API int sqlite3_snapshot_recover(sqlite3 *db, const char *zDb); /* ** CAPI3REF: Serialize a database @@ -10983,12 +11081,13 @@ SQLITE_API unsigned char *sqlite3_serialize( ** ** The sqlite3_deserialize(D,S,P,N,M,F) interface causes the ** [database connection] D to disconnect from database S and then -** reopen S as an in-memory database based on the serialization contained -** in P. The serialized database P is N bytes in size. M is the size of -** the buffer P, which might be larger than N. If M is larger than N, and -** the SQLITE_DESERIALIZE_READONLY bit is not set in F, then SQLite is -** permitted to add content to the in-memory database as long as the total -** size does not exceed M bytes. +** reopen S as an in-memory database based on the serialization +** contained in P. If S is a NULL pointer, the main database is +** used. The serialized database P is N bytes in size. M is the size +** of the buffer P, which might be larger than N. If M is larger than +** N, and the SQLITE_DESERIALIZE_READONLY bit is not set in F, then +** SQLite is permitted to add content to the in-memory database as +** long as the total size does not exceed M bytes. ** ** If the SQLITE_DESERIALIZE_FREEONCLOSE bit is set in F, then SQLite will ** invoke sqlite3_free() on the serialization buffer when the database @@ -11055,6 +11154,54 @@ SQLITE_API int sqlite3_deserialize( #define SQLITE_DESERIALIZE_RESIZEABLE 2 /* Resize using sqlite3_realloc64() */ #define SQLITE_DESERIALIZE_READONLY 4 /* Database is read-only */ +/* +** CAPI3REF: Bind array values to the CARRAY table-valued function +** +** The sqlite3_carray_bind(S,I,P,N,F,X) interface binds an array value to +** one of the first argument of the [carray() table-valued function]. The +** S parameter is a pointer to the [prepared statement] that uses the carray() +** functions. I is the parameter index to be bound. P is a pointer to the +** array to be bound, and N is the number of eements in the array. The +** F argument is one of constants [SQLITE_CARRAY_INT32], [SQLITE_CARRAY_INT64], +** [SQLITE_CARRAY_DOUBLE], [SQLITE_CARRAY_TEXT], or [SQLITE_CARRAY_BLOB] to +** indicate the datatype of the array being bound. The X argument is not a +** NULL pointer, then SQLite will invoke the function X on the P parameter +** after it has finished using P, even if the call to +** sqlite3_carray_bind() fails. The special-case finalizer +** SQLITE_TRANSIENT has no effect here. +*/ +SQLITE_API int sqlite3_carray_bind( + sqlite3_stmt *pStmt, /* Statement to be bound */ + int i, /* Parameter index */ + void *aData, /* Pointer to array data */ + int nData, /* Number of data elements */ + int mFlags, /* CARRAY flags */ + void (*xDel)(void*) /* Destructor for aData */ +); + +/* +** CAPI3REF: Datatypes for the CARRAY table-valued function +** +** The fifth argument to the [sqlite3_carray_bind()] interface musts be +** one of the following constants, to specify the datatype of the array +** that is being bound into the [carray table-valued function]. +*/ +#define SQLITE_CARRAY_INT32 0 /* Data is 32-bit signed integers */ +#define SQLITE_CARRAY_INT64 1 /* Data is 64-bit signed integers */ +#define SQLITE_CARRAY_DOUBLE 2 /* Data is doubles */ +#define SQLITE_CARRAY_TEXT 3 /* Data is char* */ +#define SQLITE_CARRAY_BLOB 4 /* Data is struct iovec */ + +/* +** Versions of the above #defines that omit the initial SQLITE_, for +** legacy compatibility. +*/ +#define CARRAY_INT32 0 /* Data is 32-bit signed integers */ +#define CARRAY_INT64 1 /* Data is 64-bit signed integers */ +#define CARRAY_DOUBLE 2 /* Data is doubles */ +#define CARRAY_TEXT 3 /* Data is char* */ +#define CARRAY_BLOB 4 /* Data is struct iovec */ + /* ** Undo the hack that converts floating point types to integer for ** builds on processors without floating point support. @@ -12314,14 +12461,32 @@ SQLITE_API void sqlite3changegroup_delete(sqlite3_changegroup*); ** update the "main" database attached to handle db with the changes found in ** the changeset passed via the second and third arguments. ** +** All changes made by these functions are enclosed in a savepoint transaction. +** If any other error (aside from a constraint failure when attempting to +** write to the target database) occurs, then the savepoint transaction is +** rolled back, restoring the target database to its original state, and an +** SQLite error code returned. Additionally, starting with version 3.51.0, +** an error code and error message that may be accessed using the +** [sqlite3_errcode()] and [sqlite3_errmsg()] APIs are left in the database +** handle. +** ** The fourth argument (xFilter) passed to these functions is the "filter -** callback". If it is not NULL, then for each table affected by at least one -** change in the changeset, the filter callback is invoked with -** the table name as the second argument, and a copy of the context pointer -** passed as the sixth argument as the first. If the "filter callback" -** returns zero, then no attempt is made to apply any changes to the table. -** Otherwise, if the return value is non-zero or the xFilter argument to -** is NULL, all changes related to the table are attempted. +** callback". This may be passed NULL, in which case all changes in the +** changeset are applied to the database. For sqlite3changeset_apply() and +** sqlite3_changeset_apply_v2(), if it is not NULL, then it is invoked once +** for each table affected by at least one change in the changeset. In this +** case the table name is passed as the second argument, and a copy of +** the context pointer passed as the sixth argument to apply() or apply_v2() +** as the first. If the "filter callback" returns zero, then no attempt is +** made to apply any changes to the table. Otherwise, if the return value is +** non-zero, all changes related to the table are attempted. +** +** For sqlite3_changeset_apply_v3(), the xFilter callback is invoked once +** per change. The second argument in this case is an sqlite3_changeset_iter +** that may be queried using the usual APIs for the details of the current +** change. If the "filter callback" returns zero in this case, then no attempt +** is made to apply the current change. If it returns non-zero, the change +** is applied. ** ** For each table that is not excluded by the filter callback, this function ** tests that the target database contains a compatible table. A table is @@ -12342,11 +12507,11 @@ SQLITE_API void sqlite3changegroup_delete(sqlite3_changegroup*); ** one such warning is issued for each table in the changeset. ** ** For each change for which there is a compatible table, an attempt is made -** to modify the table contents according to the UPDATE, INSERT or DELETE -** change. If a change cannot be applied cleanly, the conflict handler -** function passed as the fifth argument to sqlite3changeset_apply() may be -** invoked. A description of exactly when the conflict handler is invoked for -** each type of change is below. +** to modify the table contents according to each UPDATE, INSERT or DELETE +** change that is not excluded by a filter callback. If a change cannot be +** applied cleanly, the conflict handler function passed as the fifth argument +** to sqlite3changeset_apply() may be invoked. A description of exactly when +** the conflict handler is invoked for each type of change is below. ** ** Unlike the xFilter argument, xConflict may not be passed NULL. The results ** of passing anything other than a valid function pointer as the xConflict @@ -12442,12 +12607,6 @@ SQLITE_API void sqlite3changegroup_delete(sqlite3_changegroup*); ** This can be used to further customize the application's conflict ** resolution strategy. ** -** All changes made by these functions are enclosed in a savepoint transaction. -** If any other error (aside from a constraint failure when attempting to -** write to the target database) occurs, then the savepoint transaction is -** rolled back, restoring the target database to its original state, and an -** SQLite error code returned. -** ** If the output parameters (ppRebase) and (pnRebase) are non-NULL and ** the input is a changeset (not a patchset), then sqlite3changeset_apply_v2() ** may set (*ppRebase) to point to a "rebase" that may be used with the @@ -12497,6 +12656,23 @@ SQLITE_API int sqlite3changeset_apply_v2( void **ppRebase, int *pnRebase, /* OUT: Rebase data */ int flags /* SESSION_CHANGESETAPPLY_* flags */ ); +SQLITE_API int sqlite3changeset_apply_v3( + sqlite3 *db, /* Apply change to "main" db of this handle */ + int nChangeset, /* Size of changeset in bytes */ + void *pChangeset, /* Changeset blob */ + int(*xFilter)( + void *pCtx, /* Copy of sixth arg to _apply() */ + sqlite3_changeset_iter *p /* Handle describing change */ + ), + int(*xConflict)( + void *pCtx, /* Copy of sixth arg to _apply() */ + int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ + sqlite3_changeset_iter *p /* Handle describing change and conflict */ + ), + void *pCtx, /* First argument passed to xConflict */ + void **ppRebase, int *pnRebase, /* OUT: Rebase data */ + int flags /* SESSION_CHANGESETAPPLY_* flags */ +); /* ** CAPI3REF: Flags for sqlite3changeset_apply_v2 @@ -12916,6 +13092,23 @@ SQLITE_API int sqlite3changeset_apply_v2_strm( void **ppRebase, int *pnRebase, int flags ); +SQLITE_API int sqlite3changeset_apply_v3_strm( + sqlite3 *db, /* Apply change to "main" db of this handle */ + int (*xInput)(void *pIn, void *pData, int *pnData), /* Input function */ + void *pIn, /* First arg for xInput */ + int(*xFilter)( + void *pCtx, /* Copy of sixth arg to _apply() */ + sqlite3_changeset_iter *p + ), + int(*xConflict)( + void *pCtx, /* Copy of sixth arg to _apply() */ + int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ + sqlite3_changeset_iter *p /* Handle describing change and conflict */ + ), + void *pCtx, /* First argument passed to xConflict */ + void **ppRebase, int *pnRebase, + int flags +); SQLITE_API int sqlite3changeset_concat_strm( int (*xInputA)(void *pIn, void *pData, int *pnData), void *pInA, diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_column_metadata.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_column_metadata.go index 63659b46b6..9aff0b1bf3 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_column_metadata.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_column_metadata.go @@ -6,7 +6,7 @@ package sqlite3 /* #ifndef USE_LIBSQLITE3 #cgo CFLAGS: -DSQLITE_ENABLE_COLUMN_METADATA -#include +#include "sqlite3-binding.h" #else #include #endif diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_serialize.go b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_serialize.go index f1710c1c32..2d7fc0d7eb 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_serialize.go +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_serialize.go @@ -5,7 +5,7 @@ package sqlite3 /* #ifndef USE_LIBSQLITE3 -#include +#include "sqlite3-binding.h" #else #include #endif diff --git a/vendor/github.com/mattn/go-sqlite3/sqlite3ext.h b/vendor/github.com/mattn/go-sqlite3/sqlite3ext.h index 3a5e0a4edb..33eef8af62 100644 --- a/vendor/github.com/mattn/go-sqlite3/sqlite3ext.h +++ b/vendor/github.com/mattn/go-sqlite3/sqlite3ext.h @@ -373,6 +373,10 @@ struct sqlite3_api_routines { int (*set_clientdata)(sqlite3*, const char*, void*, void(*)(void*)); /* Version 3.50.0 and later */ int (*setlk_timeout)(sqlite3*,int,int); + /* Version 3.51.0 and later */ + int (*set_errmsg)(sqlite3*,int,const char*); + int (*db_status64)(sqlite3*,int,sqlite3_int64*,sqlite3_int64*,int); + }; /* @@ -708,6 +712,9 @@ typedef int (*sqlite3_loadext_entry)( #define sqlite3_set_clientdata sqlite3_api->set_clientdata /* Version 3.50.0 and later */ #define sqlite3_setlk_timeout sqlite3_api->setlk_timeout +/* Version 3.51.0 and later */ +#define sqlite3_set_errmsg sqlite3_api->set_errmsg +#define sqlite3_db_status64 sqlite3_api->db_status64 #endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */ #if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) diff --git a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_catalogsources.yaml b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_catalogsources.yaml index 2b10463bac..fc3a91e8de 100644 --- a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_catalogsources.yaml +++ b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_catalogsources.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: catalogsources.operators.coreos.com spec: group: operators.coreos.com diff --git a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_clusterserviceversions.yaml b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_clusterserviceversions.yaml index 1e81a97169..db9138e896 100644 --- a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_clusterserviceversions.yaml +++ b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_clusterserviceversions.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: clusterserviceversions.operators.coreos.com spec: group: operators.coreos.com diff --git a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_installplans.yaml b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_installplans.yaml index f1a2a93126..9a5691df7f 100644 --- a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_installplans.yaml +++ b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_installplans.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: installplans.operators.coreos.com spec: group: operators.coreos.com diff --git a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_olmconfigs.yaml b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_olmconfigs.yaml index bbc232b2db..bda9262f36 100644 --- a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_olmconfigs.yaml +++ b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_olmconfigs.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: olmconfigs.operators.coreos.com spec: group: operators.coreos.com diff --git a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operatorconditions.yaml b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operatorconditions.yaml index 9f5bee1690..e724c84ec1 100644 --- a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operatorconditions.yaml +++ b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operatorconditions.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: operatorconditions.operators.coreos.com spec: group: operators.coreos.com diff --git a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operatorgroups.yaml b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operatorgroups.yaml index f19b3f8b23..cf9f772222 100644 --- a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operatorgroups.yaml +++ b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operatorgroups.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: operatorgroups.operators.coreos.com spec: group: operators.coreos.com diff --git a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operators.yaml b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operators.yaml index b869b63681..f6f9d13dd3 100644 --- a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operators.yaml +++ b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_operators.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: operators.operators.coreos.com spec: group: operators.coreos.com diff --git a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_subscriptions.yaml b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_subscriptions.yaml index 10f465665c..6ccca76263 100644 --- a/vendor/github.com/operator-framework/api/crds/operators.coreos.com_subscriptions.yaml +++ b/vendor/github.com/operator-framework/api/crds/operators.coreos.com_subscriptions.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.18.0 + controller-gen.kubebuilder.io/version: v0.20.0 name: subscriptions.operators.coreos.com spec: group: operators.coreos.com diff --git a/vendor/github.com/operator-framework/api/crds/zz_defs.go b/vendor/github.com/operator-framework/api/crds/zz_defs.go index 940c0c799b..377d98e47e 100644 --- a/vendor/github.com/operator-framework/api/crds/zz_defs.go +++ b/vendor/github.com/operator-framework/api/crds/zz_defs.go @@ -85,7 +85,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _operatorsCoreosCom_catalogsourcesYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x6b\x73\x1c\xb7\x11\xe0\x77\xfd\x0a\x94\x2e\x55\x22\x95\xdd\xa5\xe4\xa4\x7c\x09\xe3\xd8\xc5\x50\xb2\x8e\x65\x3d\x58\x22\xed\xd4\x45\xd1\x9d\xb0\x33\xbd\xbb\x30\x67\x80\x31\x80\x21\xb9\x8e\xf3\xdf\xaf\xd0\x00\xe6\xb1\xbb\xf3\xe4\x4b\xf2\x01\x1f\x6c\x71\x67\x06\x8f\x46\x77\xa3\xdf\xa0\x19\xfb\x09\xa4\x62\x82\x1f\x12\x9a\x31\xb8\xd6\xc0\xcd\x5f\x6a\x76\xf1\x17\x35\x63\xe2\xe0\xf2\xf9\xa3\x0b\xc6\xe3\x43\x72\x9c\x2b\x2d\xd2\xf7\xa0\x44\x2e\x23\x78\x01\x0b\xc6\x99\x66\x82\x3f\x4a\x41\xd3\x98\x6a\x7a\xf8\x88\x10\xca\xb9\xd0\xd4\xfc\xac\xcc\x9f\x84\x44\x82\x6b\x29\x92\x04\xe4\x74\x09\x7c\x76\x91\xcf\x61\x9e\xb3\x24\x06\x89\x9d\xfb\xa1\x2f\x9f\xcd\x9e\xff\x65\xf6\xec\x11\x21\x9c\xa6\x70\x48\x22\xaa\x69\x22\x96\x76\x2c\x35\x13\x19\x48\xaa\x85\x54\xb3\x48\x48\x10\xe6\x7f\xe9\x23\x95\x41\x64\x06\x59\x4a\x91\x67\x87\x64\xe7\x3b\xb6\x3f\x3f\x17\xaa\x61\x29\x24\xf3\x7f\x13\x32\x25\x22\x49\xf1\xdf\x6e\x8d\x76\xd8\x33\x1c\x16\x7f\x4f\x98\xd2\x3f\x6c\x3f\x7b\xcd\x94\xc6\xe7\x59\x92\x4b\x9a\x6c\x4e\x18\x1f\xa9\x95\x90\xfa\x6d\x39\xbc\x19\x2e\xa2\x5a\xc9\xc8\x3e\x66\x7c\x99\x27\x54\x6e\x7c\xfb\x88\x10\x15\x89\x0c\x0e\x09\x7e\x9a\xd1\x08\xe2\x47\x84\x38\x48\xb9\xae\xa6\x84\xc6\x31\x42\x9f\x26\xa7\x92\x71\x0d\xf2\x58\x24\x79\xca\x8b\xa1\xcc\x3b\x31\xa8\x48\xb2\x4c\x23\x84\xcf\x57\x40\x32\x09\x5a\xaf\x11\x24\x44\x2c\x88\x5e\x81\x1f\xbb\xf8\x8a\x90\x9f\x95\xe0\xa7\x54\xaf\x0e\xc9\xcc\x40\x78\x16\x33\x95\x25\x74\x6d\x66\x53\x79\xcb\x6e\xd3\x0b\xfb\xac\xf2\xbb\x5e\x9b\xa9\x2b\x2d\x19\x5f\xb6\x4d\xc5\xbc\xd7\x7f\x0e\x16\x34\xe7\xeb\x6c\x7b\x0a\x1b\x3f\xf6\x1d\x3f\xcb\xe7\x09\x53\x2b\x90\xfd\x27\x51\x7c\xb2\x35\x87\xd3\x1d\x4f\x1a\x26\x52\xe9\xd4\xd3\xcd\x2c\x92\x80\x24\x73\xce\x52\x50\x9a\xa6\xd9\xd6\x00\x47\xcb\xed\x35\xc6\x54\xfb\x1f\xed\x4b\x97\xcf\x69\x92\xad\xe8\x73\xf7\xa3\x8a\x56\x90\xd2\x12\x1f\x44\x06\xfc\xe8\xf4\xe4\xa7\x3f\x9d\x6d\x3c\x20\x75\xe8\xd4\xf0\x9c\x30\x45\x28\x91\x90\x09\xc5\xb4\x90\x6b\x03\xad\xe3\xb3\x9f\xd4\x84\x1c\xbf\x7f\xa1\x26\x84\xf2\xb8\x20\x3c\x92\xd1\xe8\x82\x2e\x41\xcd\xb6\xe6\x2a\xe6\x3f\x43\xa4\x2b\x3f\x4b\xf8\x25\x67\x12\xe2\xea\x2c\x0c\x78\x3c\x4c\x36\x7e\x36\xf0\xaf\xfc\x94\x49\x33\xa6\xae\x10\xb2\x6d\x15\x66\x56\xfb\x7d\x63\x85\xbf\x4d\x37\x9e\x12\x62\x00\x63\xbf\x24\xb1\xe1\x6c\xa0\x10\x29\x1c\xd5\x41\xec\xa0\x69\x91\x85\x29\x03\x11\x09\x0a\xb8\xe5\x75\xe6\x67\xca\xdd\x2a\x67\x5b\x9d\x9f\x81\x34\x1d\x19\x86\x90\x27\xb1\x61\x89\x97\x20\x35\x91\x10\x89\x25\x67\xbf\x16\xbd\x2b\xa2\x05\x0e\x9b\x50\x0d\x4a\x13\xa4\x6b\x4e\x13\x72\x49\x93\x1c\x10\xd8\x5b\x7d\xa7\x74\x4d\x24\x98\x71\x49\xce\x2b\x3d\xe2\x27\x6a\x7b\x2e\x6f\x84\x04\xc2\xf8\x42\x1c\x92\x95\xd6\x99\x3a\x3c\x38\x58\x32\xed\x99\x7d\x24\xd2\x34\xe7\x4c\xaf\x0f\x90\x6f\xb3\x79\x6e\x18\xea\x41\x0c\x97\x90\x1c\x28\xb6\x9c\x52\x19\xad\x98\x86\x48\xe7\x12\x0e\x68\xc6\xa6\xb8\x18\x8e\x0c\x7f\x96\xc6\xff\x43\x42\x95\x03\x6e\xa2\xc1\x06\x35\x10\xcf\x77\x07\x6e\x96\xe1\xc7\x16\x31\x6d\x87\x76\xb1\xe5\x9e\x98\x9f\x0c\x18\xdf\xbf\x3c\x3b\x27\x7e\x46\x76\xdf\xec\x16\x95\xaf\xee\x80\x90\xdf\x2d\x03\x59\xc6\x17\x20\xed\x97\x0b\x29\x52\xec\x15\x78\x9c\x09\xc6\xb5\xe5\x1a\x09\x03\xae\x89\xca\xe7\x29\xd3\x0a\xd1\x1a\x94\x36\x1b\xb9\xdd\xf1\x31\x1e\x8e\x64\x0e\x24\xcf\x0c\xf1\xc6\xdb\xaf\x9c\x70\x72\x4c\x53\x48\x8e\xa9\x82\x7b\xdf\x3b\xb3\x47\x6a\x6a\x36\xa4\xf7\xee\x55\x8f\xfe\xed\x0f\xb6\xa8\x9e\x10\x7f\x66\xf7\x7a\xb9\x89\x4d\x10\xcb\x13\x76\x9d\x09\xa4\x85\x3b\x98\x46\xe3\x58\x82\xda\xf1\xa0\x1b\xeb\x4c\x3b\xb2\x9f\x5b\xe4\x5b\x09\x65\x90\x80\x6a\xf2\xee\xf5\x1b\x12\x51\x4e\x72\x05\x86\x84\x23\xc1\xb9\xc1\x32\x2d\x08\x35\x67\xee\x14\xae\x99\x42\xac\x94\xb0\x64\x4a\xcb\xf5\xf6\xde\x9a\xf6\xbd\x90\x29\xd5\x87\xe4\x1b\xff\xda\x14\x87\x10\x92\xb0\xec\xdb\xc3\x6f\x32\x21\xf5\xb7\x3b\x3f\x7c\xc7\x93\xb5\x19\x3c\x26\x57\x2b\xe0\xe4\xac\x80\x0c\xf9\x7b\xe5\x8f\x57\x32\x8b\x76\x0f\x7c\xb2\xe4\x42\xfa\xaf\x0d\x5a\x9f\xa4\x74\x09\x64\xc1\x20\x41\x42\x53\xb0\x83\xab\xb5\xa0\x05\xb1\x82\xdf\x82\x2d\xdf\xd0\x6c\x2c\xac\x8f\x7d\x07\x66\x06\x66\x52\x55\xb1\xa5\x7c\xa8\x05\x52\x94\x59\xbc\xf9\x27\x8d\x2e\x08\x75\x83\xa7\x34\x9b\x2a\xa4\xe6\x0e\xc0\xf7\x83\xdf\xb1\xef\xd4\xec\x48\xf9\xf3\x89\xe3\xd2\x83\x21\x54\x05\xc2\xe0\x6f\x4b\xa1\xac\x13\xbe\x6f\x76\x9d\xa9\x3d\xc6\x58\xca\x2c\x3a\x15\xb1\x5d\xf6\xd8\x5d\x7c\x55\xed\x84\xc0\x75\x26\x14\x28\x12\xb3\xc5\x02\xa4\xe1\x9c\xe2\x12\xa4\x64\x31\x28\xb2\x10\x12\xb7\x36\x13\x31\xb2\x89\x62\xab\x6b\xf2\xc8\xa9\xd8\xc1\x36\xc9\x20\x1a\x40\xa1\xc5\x62\x78\x17\x6e\xef\x64\x4a\xa4\x83\xc7\x98\x46\x17\xa8\x1e\xad\x77\x3f\xdd\x00\xdd\x91\x7b\xd9\x23\xba\x13\x45\x1d\x87\x7b\xa2\x0c\x48\x9e\xa8\xa2\xcf\xdd\xeb\xef\x9c\x72\x9f\x69\x9b\xc6\x45\x0c\x47\x1d\xd3\xdf\x5a\xc2\x0b\xfc\x63\x0e\x0a\x3f\x2f\xa6\x8a\x82\x4d\x9c\x27\xc8\xfb\xf2\xa4\xbe\xcb\x4d\xeb\xe8\xb9\x96\xbe\xeb\xb1\xef\xc1\x02\xa4\x84\xf8\x45\x6e\x50\xfd\xac\x98\x95\xe3\x7c\xf6\xe7\x97\xd7\x10\xe5\x4d\xe4\xd8\xb8\xf4\x06\xc4\xaf\x36\xa3\x70\x38\x48\x80\x24\x57\x2c\x49\xdc\x8c\x0c\xcb\xf2\x0f\x0c\x48\x50\x02\x34\x10\x54\xf6\x60\x51\x54\x33\xb5\x58\x77\x0e\x60\x20\x5a\xc0\x1c\xae\x8d\x70\x83\xda\x22\x12\x12\x5b\x30\x88\xc9\x7c\xed\xe4\x18\xc3\xd4\x27\x64\x9e\x6b\xc2\x34\x0a\x39\xd1\x4a\x08\xb5\x79\x88\x6e\x37\x6a\xb7\x16\xe7\x75\xc9\x04\xca\xa8\x44\x70\x30\xdc\x30\x35\x92\x89\xa3\xd7\xca\xf0\x33\x5c\x79\xf9\x19\xdb\x14\x2c\xb6\x5b\x6a\x4e\xbc\x62\xbb\x3c\x45\x98\x61\xae\x98\x5e\xe1\x1f\x4b\xa3\x2e\x19\xf9\x58\xe5\xa9\x19\xf4\x0a\xd8\x72\xa5\xd5\x84\xb0\xd9\x0e\xa1\x69\xb3\x19\x04\x04\x1a\xad\x2a\xd3\x4a\x01\xb4\x22\x34\x49\xfc\x12\xaa\x58\x6b\x25\x90\xd4\xc8\x8a\x64\xcf\x0b\x93\x9d\xa3\x38\x41\x70\x52\x48\x30\x9b\x88\xb7\x73\xbb\x26\x04\x74\x34\xdb\x9f\x74\x76\x1f\x89\x34\xcb\x35\x18\x09\x38\x4f\xcd\xd6\x32\x6d\x74\x30\x2b\xf8\x4a\x91\x2f\x2d\xa4\x20\x71\x13\xf7\x6a\x8b\x3d\xd1\x0d\xff\xa3\x71\xbc\x8b\xe7\x6f\xb6\xc7\x16\xb8\x8f\xbd\x66\x62\x86\x63\x16\x48\x08\xbf\x94\xea\x68\xe5\x94\xa5\x48\x48\x09\x2a\x13\xdc\xf4\x6c\x9f\xbc\x2c\xd7\xf6\x37\xf3\x4e\xe7\x78\xa6\xd3\x3d\xb5\x5f\x6e\xf6\x8a\x2d\x57\x7e\xaf\xa9\x04\xfc\xad\x8e\x23\x5d\x5b\x6e\x59\x09\x95\x92\x76\xd1\x11\xd3\x90\x76\x30\x12\x32\x82\xfa\x09\x39\xe2\x04\xd2\x4c\xaf\x2b\x88\x5d\x41\x31\x0d\x32\x2d\x00\x89\x58\x88\x6c\x4f\x59\x20\xb0\x34\x4b\x58\xc4\xb4\x43\x73\xf2\xac\xc7\x78\x7b\x86\x12\x08\xd3\xe6\xd0\x20\x5c\x4c\x45\xb6\x3f\x23\x47\x84\xe7\x05\xe3\x69\x9b\x02\x17\xc5\x0c\x5c\x47\x66\x5a\x4a\x94\x7d\x75\xf3\xa3\x7e\xec\xdb\xb6\x66\x21\x7f\xbb\x4d\xdd\xfc\x81\xf7\x20\x42\xf3\xba\x85\x5a\xe7\xab\x7d\x0f\x12\xff\xb6\x9f\x43\x9f\xb7\x37\x4f\x7b\x4b\x39\x0a\x12\x88\xb4\x39\x0d\x41\xa6\x13\x42\x95\x12\x11\x33\x5a\x61\x89\xfb\x75\x82\xb2\x2b\xe9\x86\x3d\x19\x0a\x7f\x32\x78\xfd\x04\x0d\x0f\x75\xfa\xee\xfb\xdd\x16\x34\x12\x66\x74\x9c\xc5\x06\x54\x6a\x7c\x77\xbe\xc6\xa7\x4f\x14\x49\xe8\x1c\x92\x1d\x4a\x7b\x53\xeb\x4f\xfc\x65\xeb\xc9\x06\x1a\x16\xd4\x8b\x21\x94\x6d\x13\x1b\x2a\xeb\x76\x26\x8e\x02\x4f\xcc\x51\x65\x54\x7b\xca\xb8\x72\xf6\x9d\x09\xa1\xe4\x02\xd6\xd6\x0e\x47\x79\x61\x8a\x1b\x34\x05\xec\x58\x82\x3d\xd0\x0d\xde\x5d\xc0\x1a\x3b\x6c\xb2\x21\xb5\x74\x35\x14\xef\x6c\x1b\xc2\x01\xca\x36\x35\x13\x1d\xf8\xc5\x08\x00\x0d\x27\x0d\xdb\x2e\xa0\x55\x7c\xde\xd5\xb6\xac\xd4\x88\xee\xb8\x1f\xb8\x49\x78\x02\x7b\x7c\xa0\x59\x96\x30\xd8\x6d\x6a\x6a\x6f\xad\x5a\x5f\x5b\xf3\xd0\xbb\xd1\xba\x06\x12\x88\x69\xef\x0b\x73\x9d\xc5\xf7\x27\xca\xe2\xab\xe1\x3b\x2b\x96\x59\x43\x8b\x02\x64\x23\xc3\x91\xd6\xb6\x9f\x68\xc2\x4a\x5b\xb6\x42\x61\xe3\x84\x4f\xc8\x5b\xa1\xcd\xff\x5e\x5e\x33\x65\x64\xcc\x17\x02\xd4\x5b\xa1\xf1\xcf\x19\x79\xa5\x2d\xe9\xbd\xee\xc9\x97\xcb\x36\x7a\x0f\xec\xfa\xee\x7b\x07\x8e\xb8\x65\xa2\x06\xc2\x55\xa3\xab\x9a\x91\x13\x2b\x0e\x16\x5e\x00\xa6\xc8\x09\x37\x4a\x81\x85\xdc\xe0\xa1\xd0\xee\x8e\x7d\xbb\x21\xd3\x5c\xa1\xd5\x94\x0b\x3e\x45\x31\x6a\xe7\x98\x76\x83\xcc\xb8\xd5\x2d\xba\xc5\xe1\x9b\x87\x7e\x85\x36\xba\xd7\x7a\x52\xf9\x78\xf0\xb8\x95\xc1\x56\xf4\x12\x45\x7b\xc6\x97\x49\x21\xc4\x4f\xc8\xd5\x8a\x45\x2b\xab\x3d\xce\xc1\x3a\x07\x32\x09\x46\x62\xa0\xca\x30\x7f\xf3\xcb\x12\xe4\x70\xd4\x3f\x37\xaa\x81\x1d\xdf\xba\x36\x12\x1a\x41\x4c\x62\x54\x59\xac\x95\x9d\x6a\x58\xb2\x88\xa4\x20\x97\x40\x32\x73\xf4\x8f\x43\xf8\x61\x27\xb1\x6d\x83\xcf\xe3\xea\x80\x23\x28\x8c\x90\xeb\xe9\x45\x3e\x07\xc9\x41\x83\x9a\x1a\xf9\x64\xea\x66\xaf\x45\xca\xa2\xde\x9d\xdd\x4a\x37\x28\x67\x7d\x6f\xf4\xb6\x7b\x12\xb1\x50\x47\x0c\x22\x56\x10\xb1\x82\x88\x15\x44\xac\x20\x62\xf5\x6e\x41\xc4\xba\xf1\xf0\x41\xc4\x0a\x22\xd6\xbd\x8b\x58\xb5\x2e\x52\x9a\x0d\xed\xc1\xda\xe5\x46\x18\x02\xff\x69\x0d\xba\x9b\x96\x3f\x14\xf8\x7c\x08\x4b\xdd\x04\x68\xe4\x98\x33\x77\x38\x9d\xa3\xd9\x90\x59\x7f\xbd\xa4\x7c\x09\xe4\xf9\xf4\xf9\xb3\x67\x43\x0c\x84\x0e\x9d\x7b\x7d\xb1\x70\xc1\x09\x8c\xeb\x3f\x7d\xd5\xf1\xc5\x0d\x76\xa5\xc9\x5f\x72\x3f\x8e\x3a\xc7\x79\x0a\xdf\x4c\x4d\x44\x6e\xf0\xa5\xe1\x31\xc6\x85\x26\x29\x68\x42\xbb\x65\xb2\xaa\xd9\x9d\xa5\x30\x29\x9c\xde\xc8\x76\x5c\x84\x90\x77\x0a\xc6\x44\x70\xe7\x7a\x31\x9b\xdf\xbd\xb9\xa3\x56\x10\x01\xb5\x91\x2b\x73\x30\xab\xe8\x76\x05\x6a\xa2\x44\x6a\x66\xcd\xb8\xf6\x4c\xcc\x2c\x01\xfc\xc6\x90\x3d\x98\x2d\x67\x24\xce\xb1\x5b\xca\x5d\xc8\xd3\xbe\x5d\xad\x5a\x2b\x0d\x69\xb7\x2f\xd0\x1c\x86\x12\xff\x67\xc0\xa2\xe5\xda\x74\x06\x97\xc0\x75\x4e\x93\x64\x4d\xe0\x92\x45\xba\x80\x1f\x46\x68\x31\xad\x7a\x41\x6a\x80\x18\xdd\x5f\x74\x9e\x6e\x51\x68\xd7\x21\x35\x44\xf2\xdd\xea\xbb\x0f\xcf\xa9\x51\xc0\x7b\xb7\x92\x59\xa3\x4e\xa8\x4d\xbf\xd6\x6d\x8b\xff\x44\xe4\x7e\xf7\xbe\xdb\xcb\x46\x06\x9f\x3f\x03\xce\x9c\x71\xa2\x95\x73\x78\x09\xe9\x9c\x6f\xdb\x2b\xdd\xe1\xf2\xb2\x6b\xaf\x51\x8d\x58\xf4\x1c\x50\xaf\xc0\x3a\x29\x8f\xde\xbe\xe8\x07\x31\xe2\x82\x03\xce\x45\x26\x12\xb1\x5c\x57\xb7\xd7\x86\x48\xb3\x34\xf3\x4e\x5c\x4a\x54\x3e\x77\x22\xb8\xc1\xf9\xb7\x1b\xf8\x10\x5c\x43\xc1\x35\x14\xec\x16\xd8\x82\xdd\x22\xd8\x2d\x82\xdd\xa2\x5f\x0b\x76\x8b\x1b\x0f\x1f\xec\x16\xc1\x6e\x11\x5c\x43\xdb\x2d\x88\x58\xdd\x2d\x88\x58\xad\x2d\x88\x58\x45\x0b\x22\x56\x10\xb1\x82\x88\x15\x44\xac\x20\x62\xdd\x57\x37\x37\x75\x0d\xdd\x68\x0a\xe3\x06\xcf\x44\x7c\x83\xe4\xad\x4c\xc4\x2d\xb9\x5b\xd6\xa6\x1f\x89\x69\x22\x22\xaa\x5d\x46\xb5\xf9\xc4\x79\xa1\x14\x4d\xad\x9b\x62\x42\x7e\x15\x1c\x6c\x36\x8b\x21\x0f\x74\x16\x08\xbd\x02\x69\x5e\xdf\x53\xfb\xad\x29\x04\x21\xf7\x2b\xe4\x7e\x85\xdc\xaf\xc6\xf6\xd9\xe4\x7e\xad\xa8\xb2\x78\x6b\x8f\xc6\xe6\x54\xb0\x0a\x4f\x3a\x07\x99\xfe\x4e\x33\xc1\x0c\xba\x3b\x74\xc4\x7a\x20\x25\x4a\x59\xc8\xc4\xce\xe1\x0f\xf1\x69\x1d\x1e\x4e\xad\xc6\x45\xd1\x38\x86\x98\x64\x20\xa7\x16\x45\x05\x59\x30\x1e\xef\x58\xab\x87\x4f\x37\x7b\xb8\xc3\x54\xac\xfa\x3a\x7a\x7d\x73\x37\xf9\x58\xf5\x89\x8c\x70\x2a\x56\x3d\xa3\xb5\x43\xf0\xb3\xc8\xce\x1a\xaa\xa1\x4f\x89\x76\x0e\xc5\x1f\x7a\xea\xe8\xc3\xd5\x6c\x54\x8e\xbd\xfb\x71\xa4\xf9\x69\x90\x2a\x74\xe4\xf4\xf1\x5f\x72\x90\x6b\xac\x1b\x50\xaa\x9d\x45\xd9\x19\x17\x11\xc3\x14\x89\xa8\xb2\xc7\xea\x10\x51\xf9\x64\x61\xb3\x26\x79\x9e\x24\x13\xdb\xcf\x26\xb1\x7a\x36\x87\x78\xc0\x85\x79\x3e\xd8\x22\x36\xd0\x44\x33\xce\x06\x32\xde\x0b\x4b\x36\xf7\x69\xb3\x2b\x6b\x1b\xf3\xa6\x43\xbb\x2d\x3b\x6d\x87\x3b\xbc\xe9\x83\xfd\xe3\xb6\x8d\x55\x60\x46\xa9\x2f\x37\xd6\xd7\x5b\x60\x72\x03\xbb\x22\xbe\x3c\x78\x32\xb7\x63\x5b\x24\xe3\xed\x8b\x64\xb4\x8d\x91\x8c\xb2\x33\x92\xb1\xb6\x46\x72\x03\x7b\x23\x19\x67\x73\x24\x9b\xd8\x66\x76\xc8\x09\xbe\x77\x63\x7e\x24\x37\x53\xce\xc7\x9b\x21\xc9\x2d\x10\x56\x75\xfc\x4a\x11\xaf\xbb\xb3\x4b\x92\xbe\xb6\x49\x24\xab\x9a\x79\xf2\xbe\xf7\x65\x9c\x69\x92\xdc\xd2\xae\x38\xa3\x1d\x43\x5b\xd8\x7d\x19\x2b\xc9\xc3\x1b\x2c\x5b\xa7\xe0\x86\xef\x6d\xe1\x1b\x35\xfa\x0d\xac\x82\xe4\x46\x96\x41\x32\xde\x3a\x48\x6e\x8a\xec\xb7\x66\x25\xbc\xd5\xae\x50\x4e\x7a\x8d\x71\x68\x37\x90\xb6\x06\x53\x60\x65\x58\x2b\x5d\x60\x8d\xb2\x05\xf9\x8f\x11\x22\x10\x31\xff\x4b\x32\xca\xa4\x32\xda\x8d\xb3\x6b\x57\x9f\x39\xf3\x5d\xa5\x9b\xc1\x13\xc0\x22\x6d\xe6\x8c\xbf\xa4\x89\x11\x72\x6c\xd0\xaf\xb3\x41\x98\xb9\x6c\x8a\x90\x13\x72\xb5\x12\xca\x4a\x24\x45\x9d\xb9\xc7\x17\xb0\x7e\x3c\xe9\x65\x1e\xa8\xb7\x2a\x65\x3f\x3e\xe1\x8f\xad\xe8\xb4\x45\x97\x85\x9c\x25\x78\xb2\x26\x8f\xf1\xd9\xe3\xdb\x96\x51\x47\xc8\x47\xd5\x62\xbe\x63\xc5\x8f\x51\xe4\x74\x53\x03\x37\xa9\x61\xdf\x0f\xb0\x1e\x1b\x88\x30\x08\xe7\xdf\xd4\x46\xf4\x02\x35\xa2\x99\xd1\xdd\x0b\xb9\x09\x2d\xaa\x56\x64\x72\x36\x2a\x6b\xae\x62\x49\x32\x60\xb4\x39\x10\x4d\x2f\x00\x3d\x3c\x58\xdb\x51\xb1\x18\x0d\x6e\x82\x5b\xd4\xc1\x91\x0c\xca\xf8\x22\x84\x89\x10\x17\x79\xe6\x51\xcf\x17\x0e\x1d\x30\x24\xe3\x91\x48\x7d\x4c\xbd\x8d\x6b\x35\x54\xe1\xe8\x65\x6a\xcb\x9d\xda\xdf\x71\x60\x3c\x02\x9c\x69\xe2\x53\x4d\x31\xff\x44\xa8\x22\x9f\x50\xa8\xe4\x64\x0f\x3f\xdc\xff\x34\x24\xa4\xa0\x00\xa0\xb5\xbe\x8a\x1c\x39\x4b\x51\xd0\xb2\x62\xff\x2b\x60\xdb\x06\xb1\x01\x43\xfb\x4a\x71\x55\x60\xd8\x5a\x78\x64\x8f\x72\xcd\xf6\xcb\x82\x78\x04\xf1\x00\xa5\xe4\x58\xf0\x27\xda\xce\xcf\xf3\x35\xdf\xc1\x90\xa8\x83\x02\xee\xa5\xc7\xcf\x7a\x0b\xec\x96\xc7\xb0\xa0\x79\xa2\x5d\xe1\x59\xc3\xfa\xf0\xa4\x1f\x30\xc2\xb9\xf7\x97\x38\x81\x7f\x21\xe4\x9c\xc5\x31\x70\x4c\x71\xf0\xd3\x9f\x0b\x9f\x10\x54\xa2\xbb\xe1\x6c\xb5\x3d\x1e\x32\xec\x51\xa2\xc4\x64\xb3\xc7\xa8\x28\x4c\x6b\xa8\x08\xcb\x27\xd6\x06\x20\x4c\x19\xa0\x36\x54\x4a\xdc\xdd\xee\x25\xf4\xe7\xe6\x3c\x6f\x74\xe8\x15\x53\x0f\xc0\xf7\x36\x07\x0d\xac\xaf\x17\xeb\xe3\x42\x07\xee\xf7\xc5\x72\xbf\x2d\xa4\xbf\x0d\x06\xb8\xd5\x69\xe0\x81\x83\x79\x20\xf7\xf7\x53\x3c\xb0\x17\xc0\x1a\xc6\x6c\x14\xab\x9f\x92\x2a\x6d\x66\x98\xe8\x35\xce\x5e\xe6\xd3\xe0\x90\xcf\x62\x0f\xb1\x77\x86\xe6\xdc\xd5\xfd\xf7\x95\xa9\xdd\xb0\x96\x5f\x6c\xfa\xdc\x07\x8c\xe9\x15\x17\xc1\x41\xa1\x89\x1d\x8a\xf8\x8a\xca\x30\xd8\xeb\x90\xa5\x60\x2a\x5c\x69\x3e\xe4\xf1\x66\x72\x5c\xd9\x37\xda\xf5\x53\xa0\x5c\x91\xc7\x3e\xc4\xe3\x89\x2a\xdf\x78\x3c\x88\xde\x7c\xe9\xcb\x62\xec\xbd\xff\xfc\x77\xbf\x56\xee\xb2\x1c\x3a\xf8\x51\x82\x1f\xa5\xda\x82\x1f\x65\x7b\x12\xc1\x8f\xd2\xd4\x82\x1f\x65\xd4\xf8\xc1\x8f\x52\x6f\xc1\x8f\x12\xfc\x28\xc1\x8f\x12\xfc\x28\xc1\x8f\x12\xfc\x28\x7d\x3f\xba\x0d\x3f\x4a\xa9\x06\xdd\x87\x1e\x5d\x55\x59\x5d\x9c\xb8\xbd\x50\x8d\x6a\x16\x95\x59\xa1\xfe\x2d\xfb\xaf\x87\x52\xaa\xab\x6a\xf0\x4d\x55\xea\xaa\x82\xbe\x65\xc1\x18\xac\x51\x37\xea\xcf\x85\x86\xbd\x35\xc6\x2d\xa9\xd6\xbf\x73\xe3\x52\x25\x80\xf5\x3e\xc8\xe1\xdc\xa7\xb2\xb8\x3b\x1a\xe7\x50\xe6\xb9\xc4\x64\xcf\xdb\x5a\xf7\xcd\x86\x73\xa1\xeb\x0f\xb9\x66\xd3\xf2\x8d\x22\x40\x18\x4d\xc2\xbe\x9a\xdb\x10\xa0\x7b\x9d\xa5\xb4\x3d\xba\xfc\x9a\x22\xa1\xa3\xc4\x36\xc3\xff\x41\xd6\x66\xcb\x94\xbb\xc3\x12\x53\xd3\x64\xce\xb9\x11\x8f\x04\x77\x59\x1c\x03\x66\x62\x8f\x16\x6b\xe6\x75\x54\x69\x95\x29\x5c\x23\x6a\x54\xe5\x36\x55\x12\x00\xa8\xb6\x37\x62\xba\x9a\x4b\x82\x3b\x23\xb9\xf9\xc5\xf6\x33\x60\x12\x05\xc1\x22\x3c\x59\xb1\xa2\x21\xb4\xfa\x12\x69\xb4\x3a\x59\xa6\x70\x1f\x69\x92\x88\xab\x21\xe7\xd3\x40\x8a\x18\x5d\x1c\xb0\x37\xf6\x5e\x0d\xae\x22\xb8\x11\x2d\xdf\x57\x56\x0f\xa5\x06\x5b\x5b\x28\x35\xf8\x79\x94\x1a\xac\xf8\x41\xab\x35\x07\xbb\x61\x85\x35\x09\xef\xb4\xe6\x20\x21\xff\x74\x17\x6c\x4a\xb0\xce\xcb\x3c\xd1\x2c\x2b\xb3\x8c\x95\xdd\xa1\xc4\xaa\xd4\x0b\x97\x0d\x58\xa7\x5e\x33\x1b\x1a\xad\x3a\x87\xda\xa0\x72\x1c\x0f\xb3\x96\x15\x72\x53\x9b\x31\x87\xf6\x77\x5b\xe8\xcf\xeb\xda\x36\xed\x90\x3d\x74\x36\x55\x2f\xfe\xf7\xc2\x5d\xd5\x5c\xf5\x81\x2b\xb2\x67\x4e\xc7\x64\xed\xbc\xc6\x35\x46\x58\x3b\x56\x7b\x0c\x60\xed\x60\x97\xe0\x05\xd4\x25\xbb\x04\x5e\x9e\xbe\x7b\x6a\x7f\xdf\xcb\xc4\x9b\xf2\x43\x8f\xde\x6f\x22\x61\xf4\xe1\xda\x43\x25\x83\x8d\xf3\xbe\xc7\x08\x3b\x24\x82\x6f\x2a\xa7\xec\xb7\xdd\x32\x41\x8f\x41\x2c\x49\xfb\xf4\xcc\xca\x46\x97\xb2\x40\x67\x2f\x77\x98\x05\x37\x24\xd5\x6a\x98\x55\x7c\x44\x8a\xd5\xd8\x4a\x99\x77\x9b\x5a\x75\xa7\x69\x55\x5f\x4e\x41\xcb\x07\x76\xff\x7d\x01\xd5\x98\x3e\x13\x77\x5f\x28\xc7\xd4\xd4\x1e\xaa\x1c\xd3\x9d\xbb\xf3\xbe\xb8\xaa\x4c\xf7\xea\xbe\xbb\x1f\xd7\xdd\x17\x56\x95\xe9\x41\x5c\x75\x9f\x79\x7d\xa6\xbb\x73\xd1\x85\xe2\x47\x0f\x53\x5f\x72\xa8\x1b\x6e\x3c\x55\x3d\xa8\xfb\xed\x41\x5d\x6f\x0f\xef\x76\x1b\x25\xab\xdc\xd4\xdd\x36\x98\x4c\x6e\xea\x66\x1b\x13\xb2\x3f\x0e\x9f\xef\x2f\x45\xe9\x9e\x63\xf4\x3f\x8f\xd4\xa4\x07\x0a\xcc\x7f\xa8\xa0\xfc\xbb\x0d\xc8\x7f\x80\x54\xa4\x7b\x49\x43\x1a\x7a\xec\x0f\x3a\xec\x6f\xc6\xbb\xc6\x9c\xc8\x23\x53\x8e\x46\xf2\xaf\xfb\x4c\x35\xfa\x1d\xb0\xb0\x51\x29\x46\x81\x8b\x3d\x10\x17\xbb\xbd\x94\xa2\xfb\x4a\x27\xfa\x9d\xf1\xb2\x91\xa9\x43\xb7\x66\xdd\xbe\x9b\x94\xa1\xfb\x4e\x17\xba\x83\x54\xa1\x87\x48\x13\xba\x83\x14\xa1\xe0\x13\xe8\xd9\x82\x4f\xa0\x6f\x0b\x3e\x81\xa6\x16\x7c\x02\x9b\x2d\xf8\x04\x82\x4f\x20\xf8\x04\x82\x4f\x60\x7b\xc0\xe0\x13\x08\x3e\x81\x7e\x2d\xf8\x04\xee\xc7\x27\x30\x34\xed\x66\x1c\x2e\x3f\x4c\xba\xcd\xfd\xa6\xda\xdc\x7e\x9a\xcd\x03\xa6\xd8\xfc\xce\x0c\x2e\x83\xd3\x69\xc6\xa1\xf9\xe7\x92\x46\xf3\x79\xa4\xd0\x3c\x78\xfa\xcc\x4d\x53\x67\x6e\x27\x6d\x66\x00\xb6\x8f\xc4\xf3\x4c\xc4\x47\x5c\xb3\x9b\x5e\x7c\x54\x45\xc0\xa6\xdb\x8f\xe8\xa5\x60\x31\xc9\x72\xed\x2e\x5c\x09\x37\x20\x75\xe2\xc0\xfd\xdc\x80\x54\xdb\xbc\x70\x0d\x52\x5b\xfb\x6c\xae\x41\x6a\xda\xb3\x7b\xbc\x0b\x49\xe5\x73\x2d\x69\xa4\x07\x5d\x88\xe4\x1d\x8e\xe1\x4a\xa4\xad\x16\xae\x44\x0a\x57\x22\x85\x2b\x91\xc2\x95\x48\xa1\x94\x5f\x28\xe5\x57\x6d\x9f\x8d\x1f\x8f\x84\x52\x7e\x03\x3f\x0d\xa5\xfc\xba\x5a\x28\xe5\x17\x4a\xf9\x35\x8d\x1e\x4a\xf9\x85\x52\x7e\xc3\x06\x0e\xa5\xfc\x48\x28\xe5\x17\x4a\xf9\x7d\xc1\xa5\xfc\xc2\x95\x48\x5f\xc4\xbd\x20\xe1\x52\x90\x01\x63\x7f\x5e\x97\x82\x84\x2b\x91\x5a\x07\x09\x57\x22\x05\xd6\x17\xae\x44\xfa\xdd\x72\xbf\x70\x25\x52\x8f\x41\xc2\x95\x48\xe1\x4a\xa4\xd6\x16\xae\x44\x0a\x7e\x14\x12\xfc\x28\xc1\x8f\x32\xf4\xab\xe0\x47\x69\x6e\xc1\x8f\x32\xa4\x05\x3f\x4a\xef\xd1\x83\x1f\x25\xf8\x51\x86\x0d\x1c\xfc\x28\x24\xf8\x51\x82\x1f\xe5\x0b\xf6\xa3\x84\x2b\x91\xc2\x95\x48\xe1\x4a\xa4\x62\xe4\x70\x25\x52\xb8\x12\x09\x5b\xb8\x12\xa9\xc7\x08\xe1\x4a\xa4\x2f\xf5\x4a\xa4\x5a\x5a\xd0\x97\x7b\x2f\xd2\xf0\x65\x84\xcb\x91\xc2\xe5\x48\x0d\x2d\x5c\x8e\x14\x2e\x47\xda\xd5\xc2\xe5\x48\xe1\x72\xa4\x96\x16\x0a\x21\xf6\x6c\xa1\x10\x62\xdf\x16\x0a\x21\x36\xb5\x50\x08\x71\xb3\x85\x42\x88\xa1\x10\x62\x28\x84\x18\x0a\x21\x6e\x0f\x18\x0a\x21\x86\x42\x88\xfd\xda\xc3\x3b\xe0\xfe\xff\x28\x84\x18\x2e\x47\xfa\x2c\x6f\x16\x09\xd7\x8a\x74\xb4\xcf\xe7\x5a\x91\x70\x39\x52\xad\xf3\x70\x39\x52\x60\x61\xe1\x72\xa4\x2f\x8e\x8b\x85\xcb\x91\x76\x74\x1e\x2e\x47\x0a\x97\x23\x85\xcb\x91\x82\x4f\xa0\xb3\x05\x9f\x40\xf0\x09\x54\x5b\xf0\x09\x6c\xb6\xe0\x13\x08\x3e\x81\xe0\x13\x08\x3e\x81\xed\x01\x83\x4f\x20\xf8\x04\xfa\xb5\xe0\x13\x08\x97\x23\x85\xcb\x91\xc2\xe5\x48\xd8\xc2\xe5\x48\xe1\x72\xa4\x70\x39\xd2\xce\x8f\xe1\x1a\x2f\x37\x39\x16\x5c\x03\x6f\xcc\xb9\xe9\x8b\xce\x2f\x6b\xbd\x99\xd3\x75\xc1\x96\xb9\x74\x7a\xff\xf2\xfd\xe9\x31\x89\xa8\xa6\x89\x58\x92\x53\x11\x5b\xd3\x32\x7e\x51\xfc\x9c\x82\xa6\x31\xd5\xb4\xbc\x41\x25\x93\xe2\x92\xc5\xc8\x54\x63\xb8\x26\x2c\xa5\x4b\x30\xcc\xab\x71\x12\xb9\x02\x42\xc9\x15\x24\xc9\xf4\x82\x8b\x2b\x4e\x2e\x41\xaa\x0a\xbb\xfe\x24\xb2\xf4\x13\x51\x20\x2f\xed\x05\x43\x70\x9d\x19\x44\x63\xda\x9e\xfb\x7e\x26\xd5\xe1\xca\x20\xf5\x63\xfb\xf4\x0c\x83\x7a\xdb\xee\xea\x29\xd6\x8e\xcb\x34\x73\x7a\x6a\x04\xfb\xa7\x86\xa8\x73\xe5\x23\xea\x17\x2c\x81\xe9\x9c\x2a\x88\xfd\xb8\xca\xd0\x9a\x90\xb1\x9d\x5b\xae\x59\xc2\x7e\x05\x77\x9a\x00\xd5\xb9\x6c\xcc\x93\xe8\x21\x70\x74\x1b\x42\xa6\x7e\x1e\x2f\x58\x93\x11\xa3\x8f\xc1\x22\xa2\xd1\x0a\x5e\xb0\x56\x15\xbe\x86\x54\xc7\xee\x03\x6f\x92\xd8\x13\x99\x95\x83\xf6\x49\xcc\x24\x32\xa1\x35\x51\x5a\x48\x0f\xb9\x4c\xc2\x34\xa2\x49\x94\x27\xc8\x72\x8e\x4e\x4f\xec\xa0\xdd\xb7\x66\x75\x90\x52\xb9\xfe\x01\x93\xf7\x9f\xf8\xe9\xef\x9e\xf3\xf6\x6e\xa3\x00\x8a\xf6\xc8\x9b\x4c\x3b\x85\x54\xc8\xf5\x39\x95\x4b\xb8\x31\x09\xbf\xa9\xf4\xb5\x49\xc0\x7f\x78\xf5\xee\xcd\xcb\x37\xaf\x4f\xde\x9c\x9c\x3b\xbe\xec\x9d\x61\x9b\xa4\xed\xd4\x56\x6b\x61\x14\x0b\xed\xa6\x48\x12\x96\x32\x5d\x7c\x65\x69\xb0\x59\x65\xb6\x7c\x1b\x13\xe8\x72\xae\x59\x0a\xd6\xf3\x45\xb5\x36\x22\x8d\xa1\x8f\x14\x40\xe3\x35\x5d\x29\xbd\x00\xc3\x5c\xc9\x32\xa7\x92\x72\x0d\xfe\x28\x60\xda\x7e\x14\x0b\xa2\x84\x53\xe4\x99\x2a\xbd\x64\x0a\xb4\x4d\x1b\x3a\x15\xcd\x2c\x05\x7b\x58\xd1\x4b\x7b\x81\xd2\x42\x18\xfe\x6d\x36\x35\x15\x31\x5b\xb0\xc8\x5a\x86\x48\x4a\xe3\x22\xd5\xc5\x29\x16\x20\x8b\xe3\xaf\x5c\x70\x1b\xf5\x6d\x82\x19\xf8\x25\x93\x82\xa3\xc2\x74\x49\x25\xa3\xf3\x04\x0a\xff\x9f\x02\x6d\xc7\x2b\x17\xc4\xc9\x7c\xad\xa1\x99\x2d\xd9\x11\xdc\x6e\xb8\x0b\xb8\x9a\xfb\x7b\xd4\xd8\xcf\x79\x99\x93\x56\x0a\x2b\xe6\x7b\xe6\x92\x15\x62\x50\xcc\x31\x3f\x09\x71\x1e\x79\xd0\x09\x9d\x49\x66\xb5\x3f\x5a\x60\x8c\x63\xc6\x54\x91\x34\x37\x27\xb5\x91\x82\x94\x62\xf3\x04\x26\x46\xd6\x61\xcd\xc9\x34\x65\x1f\x73\x30\x50\xc6\x9e\x50\x02\xb9\x04\x83\x6f\x06\x8f\xad\xa8\x0b\x60\x04\x21\x81\x97\x60\x51\x2b\xce\x78\x97\xa9\x39\x8f\x23\xe7\x30\x3f\x59\x90\xb5\xc8\x65\x8d\xfd\xaf\xa8\xc1\x63\xa4\xde\xc6\x89\xb8\x04\x38\xe4\x41\x13\x12\x83\x51\x1c\x18\x37\x27\xd1\x52\x88\xd8\xe8\x0f\x52\x5c\xb3\x14\x47\x71\x04\x50\xec\xda\x7c\x4d\x62\x91\xcf\x93\x02\x4d\x0c\xcb\x77\xa7\x55\x46\xa3\x0b\x33\x07\xec\xb8\x2d\x75\xf1\x40\xa7\xd9\x01\xbe\xe5\xfe\xeb\xbe\x54\xb3\x9f\x95\xe0\xa5\xd3\xb9\x58\xd6\xac\xd7\xee\x32\x45\xe6\xa0\xf4\x14\x16\x0b\x21\xf5\xdf\xcc\xfe\xe6\x1c\x89\x86\x8b\x02\x80\x1e\x81\x30\xc0\x00\xa1\x8d\x29\x28\x75\xaa\x17\x72\x07\x03\xa9\xa0\x5e\x13\x0b\xcc\x0c\xbd\x4b\x7e\x48\xfe\xcf\xde\xbf\xff\xf8\xdb\x74\xff\xbb\xbd\xbd\x0f\xcf\xa6\x7f\xfd\xf8\xc7\xbd\x7f\xcf\xf0\x1f\x4f\xf7\xbf\xdb\xff\xcd\xff\xf1\xc7\xfd\xfd\xbd\xbd\x0f\x3f\xbc\x79\x75\x7e\xfa\xf2\x23\xdb\xff\xed\x03\xcf\xd3\x0b\xfb\xd7\x6f\x7b\x1f\xe0\xe5\xc7\x9e\x9d\xec\xef\x7f\xf7\x87\x86\x09\x51\xbe\x7e\xb7\x68\x25\xe2\x5e\xd9\xbb\xd3\x3e\xe7\x51\x4d\xa4\x63\x5c\x4f\x85\x9c\xda\x0f\x0e\x89\x96\xf9\x6e\x51\xd6\xc8\xbd\x5d\xae\xe1\xbe\xe7\xc1\xdb\x4a\x5f\x1b\x1e\x23\x77\x85\x9d\x33\x57\x9a\xd9\x14\x9c\x3d\xb3\xd2\xdd\xc2\x6c\xbb\x17\xfb\x9b\x8f\xb8\xb3\x1d\x3d\xa2\x3c\xef\xbe\x7c\xa2\x7c\xe4\xc3\x46\xff\x1b\x49\xb8\x96\xe3\xb7\x8d\xd5\x43\x46\x1a\x66\x82\xe9\xdc\xc2\x4c\x32\x21\x99\x5e\x1f\x27\x54\xa9\xb7\x34\x85\x9b\x6e\xc8\xc9\xa2\x54\xc3\x26\x86\x9e\xcd\xf9\xe3\x0e\x68\x17\x8a\xe2\x86\x6c\x06\xf8\xc9\x02\xf5\x90\x4a\x3f\x1e\xa8\xfe\xdb\x82\x30\x3d\x89\x0b\x49\x7e\x05\x29\xdc\x65\x86\x12\xac\x2e\xd3\x38\x82\xfb\xac\x7d\x1f\x5a\xc0\xa6\x20\xca\x11\x6c\x46\x3e\xba\x36\x1a\xc5\x82\x2d\x6f\x0a\xba\xb3\x5d\x9d\x92\x88\x72\xb3\x50\xbc\xa5\x73\x41\x3e\x25\xb0\xa4\xd1\xfa\x93\x59\xf0\x27\x09\x66\x8a\x46\x07\xfc\x64\x95\x83\x9a\xf8\xef\xa2\x7e\x98\x22\xc0\xf0\xe2\x56\xc6\x7f\xb6\x0a\xa3\xd7\xbe\x1b\x67\x22\xb1\xfe\x40\x26\xe2\x99\xd9\x83\xd9\xc6\x6a\x91\x85\x16\x0f\x0b\x51\xe2\xc3\xd3\x8f\x5b\x6f\x3a\x6b\xa6\x16\x56\xa9\xac\x12\x87\xcc\x91\xeb\xb7\xc9\x35\x1e\x20\xe4\x28\x4e\x19\x9a\x60\xc9\xde\xe9\xd9\xd1\x7e\x6d\xe5\x46\xca\xb1\xe7\x70\x2c\xc0\xc7\xdd\x98\x81\x54\x69\x4c\xc5\x33\x14\x53\x1c\x2d\x09\x63\x8e\xa3\x9f\x8b\x01\x30\xda\x57\x5b\xd2\x7a\xfd\x64\xcf\x8e\xc8\x27\x23\x21\x27\x8c\x83\xdd\x83\x4c\xb2\x4b\x96\xc0\xd2\xcc\xa4\x12\xc8\xe0\x5d\x32\xbb\xf7\x94\x29\x73\x4a\xd5\xd1\x3b\xc5\x1c\x5d\x8b\xd6\x2d\x78\xeb\x0e\x6e\x17\x53\x52\xb1\xee\x3d\x51\x38\x3d\x2f\x13\x97\xf2\x42\xed\x2d\x44\x07\xbe\x10\x32\x32\xa7\xf9\x0e\x38\x6a\x97\xc4\x6e\x40\xd3\x2e\x70\xa2\xf9\xa7\xd0\x22\xa9\x32\xb4\x57\xeb\xf0\x8a\x56\x2a\x05\xcc\xc8\x3b\x83\x84\x57\x4c\xc1\xa4\x90\x7a\x77\x76\xe1\x31\xfc\x8a\x36\xcb\x89\x95\x6e\xcf\xf0\x9f\x6b\xeb\x6d\x72\xe6\x18\x44\x77\x94\xa3\x9a\xe8\x85\x48\x50\x86\x6f\x30\x6e\xbf\x62\xb1\x15\x7d\x40\x4a\x21\x67\x36\x95\xdf\xea\xc1\x22\x89\x5b\x4e\xc9\x42\x1d\x37\x22\x0b\x1a\x9b\x2c\x7e\x71\xe4\x60\x0e\x6d\x76\x83\xb9\x01\x37\xea\xf2\xaa\x16\xc5\x12\x5a\x04\xa2\x37\x02\xf3\xff\x6d\x91\x0d\xb3\x0c\x3a\x17\xb9\xb6\xf8\x60\xd9\xc7\x42\xe4\x3c\x26\x86\x33\x1e\x92\x95\xd6\x99\x3a\x3c\x38\x28\x8f\xee\x19\x13\x07\xb1\x88\xd4\x41\x24\x78\x04\x99\x56\x07\x9e\x90\x0f\x32\x11\x4f\xfd\x1f\x53\xea\xe9\xf0\x60\x2c\xe3\x24\x04\x78\xde\x72\x9b\xe7\x94\xd8\xd5\xb6\xbc\x50\x02\x73\xe7\x4b\x5a\x24\x2e\x62\xb2\xf1\x5c\xac\xdf\xf1\x5a\xbe\x5f\xdc\x41\x5b\x08\xfe\x15\x46\xfa\x44\x55\xbb\x6e\x3f\x39\xda\x2c\xcb\x1d\xb6\xe4\xfe\xa6\xd9\x73\xcf\x4b\x8d\x34\x5c\xae\x02\xa5\x20\xad\x29\x5e\x4f\x6b\xd4\x25\xfb\xc4\xb0\x41\xbe\x26\x86\x55\x6b\x77\x65\xb2\x35\x49\xb6\x69\xf6\x2b\x23\x37\x61\x0d\x8b\x6f\x0a\xb7\xdb\x04\x16\x0b\x88\xf4\xb7\x15\x33\x51\x51\x85\xa1\x70\x6b\x7d\xe3\xff\xf5\x6d\xf3\x29\xdf\xcb\x03\xd5\x2f\xfc\xc4\x4e\xa9\xdd\xf6\x3d\xcc\xe6\xfd\x12\x7b\xdc\x90\x5f\x2c\xf0\xec\x60\xa8\xde\xa3\x6f\xda\x19\x52\xad\x57\xc2\xc9\x85\x49\x52\x7b\xb9\x33\x00\x03\xf9\x4d\xe5\x40\x70\x26\xd8\xd2\x1b\x08\xe4\xad\x70\xe5\x6c\x60\x42\x4e\xf1\xca\xe0\xf2\x17\x3c\x91\xdf\x0a\x5b\xd8\xa6\xa3\x52\x49\x4f\x83\x6d\x67\xfc\xce\x30\x78\xfe\x50\x86\xf3\x58\xc0\xd4\xc2\x79\x4a\xc2\xaa\xfa\xc1\x5a\x01\x7b\x01\xeb\x4e\xa8\xba\xc3\xcf\x85\x12\xa1\x9f\x69\x52\xe2\xa8\xd7\x0c\x6c\xa4\xc4\xdf\x5c\xf5\x03\x91\xce\x19\xb7\x53\xb1\x03\xfb\x7d\xc6\xb1\xfd\x7e\xf0\x18\xff\xec\x9e\x44\x4f\x68\xf7\x8b\x29\x1a\x06\xf2\x77\x03\xe2\x85\x0a\xcf\x73\x17\x48\x77\xc5\x05\x55\x82\x81\x5e\xfe\x92\xd3\x64\x46\x5e\x58\xf1\x1a\x81\x67\x7f\xea\x22\x37\xdb\xc5\x96\x3f\xfe\x8a\x25\x71\x44\x65\x8c\x9a\x95\x65\x3f\x44\x09\x8b\x38\xd4\x4b\x6f\x1d\x7d\x7b\x06\x58\x22\x8f\xbd\xcc\x9b\x64\x54\x6a\x16\xe5\x09\x95\x86\xe1\xc3\x52\xc8\x8e\x78\xf4\x9e\x9b\x59\x62\xf3\x19\x44\x82\xc7\x1d\x9e\xc3\x61\xbb\x7a\xbe\xd9\x79\x75\x7b\x51\x6e\x03\xc9\x5c\x45\x15\x96\xc2\x26\x79\xed\xd5\xb4\xe2\x8e\xb1\xc4\xc2\x33\xbb\x82\xb7\x4c\xac\x70\x65\xc4\xb8\x6a\xe1\x27\xa6\x7c\xb4\xff\x7e\xe5\xc0\x29\xa8\x7d\x46\xfe\xb1\xf6\x3a\x57\x57\x08\x12\xd3\xde\x0f\x85\x66\x1c\x37\x5f\x47\x8a\x6e\x27\x4b\x36\xb2\x10\x12\x2e\x41\x92\xbd\x58\xe0\x37\x58\xc0\x69\x7f\x46\xfe\x65\x94\xc1\x36\x37\x8c\x6d\x1c\x96\xb6\x04\x90\x23\xec\x22\x09\x43\x02\xda\xed\xa9\x22\xcf\xc8\x9e\xad\x0a\xc5\xd2\x14\x62\x46\x35\x24\xeb\x7d\x2f\x7d\x5b\xb3\x5a\x1f\xac\xe9\x53\x2c\xad\x52\x24\xed\xeb\x3f\xb7\xbc\x89\x93\xbd\x4d\xa4\xfa\xc9\x9b\x9b\x4b\xc0\x5a\x49\x7a\x03\x7b\x0a\x2f\x66\x67\x90\x42\x63\x44\xda\xa4\xe4\x35\x15\x51\xd7\xf3\xe6\x02\xb7\x7e\x36\x08\x4a\x89\x84\x25\xd2\xa7\xa5\xb9\x1b\x50\x27\x8b\x76\x97\x7b\xeb\x10\x42\xda\x3d\x52\x53\x62\x74\xc1\xaf\xff\x1c\x53\x4d\x1b\x5e\xb0\x28\xb3\xce\x76\x91\x5a\x97\x6c\x53\x76\xde\xb4\xd7\x3d\x5c\x2f\x6e\xf8\x51\x3d\xa0\x52\xb3\xeb\xcb\x3e\xd8\x75\x82\xb6\x69\x1b\x2b\xe9\xd1\x60\x2a\x61\xc9\x94\x96\xeb\x8a\x03\xc2\xb9\x30\x05\x61\x5c\x69\xca\x35\x43\x56\x4d\xfc\x9b\x53\x67\x7c\xbf\x62\xba\x21\x0c\xf0\x9d\xd1\xdd\xd1\xb4\x8b\x99\x38\xd6\xf8\x71\xbe\xce\x80\xfc\xbd\xf2\xc7\x2b\x99\x45\xbb\xbf\x3f\x59\x10\xc7\x40\x2d\x6e\xd2\x38\x96\xa0\xb6\x39\xdb\xae\xaf\x5b\xc1\xe7\x8d\x55\x63\x21\x78\xea\x8d\x5d\xae\x46\xa0\x52\x6c\x69\x94\x14\x5f\x1f\xd2\xfb\x72\x6a\xca\x8a\xf9\xd5\x0d\x6c\x3d\xb3\x90\x16\x27\x26\xd3\x5e\x1d\x8c\x04\x57\x79\x5a\x5a\x11\x62\xc8\x80\xc7\xc0\xa3\x35\x96\x84\x4a\x2e\xa1\x21\x8c\xe7\x47\xd5\x80\x12\x84\xfc\x2f\xb6\x34\x6a\xb7\x9b\x5c\x55\x72\xf6\xde\xe9\x8d\x99\x32\x65\x00\xbf\x00\x69\x94\x7f\xcc\xdc\x31\x42\xaf\xef\xa1\xe2\x85\x74\x35\xaa\x7c\x50\xe9\xe6\x64\xb1\x50\xe0\xee\xe9\x9e\x17\xd5\x2d\xbd\xbf\xc2\xc3\xd4\x72\x20\x03\x8e\xa5\xb0\xde\xfc\x4c\x28\xe6\xcb\xc1\x15\xe7\x42\xad\x42\xa6\x58\xd8\xfa\x95\xcd\x63\xd5\xb3\xdc\x30\x10\x7b\x63\xd1\x68\x7b\xcb\xb9\xdd\x4c\xa8\x5a\x34\x3d\x2f\x6c\xa8\xc1\x79\xbe\xbd\xd5\x45\x14\x0d\xa6\xc6\xd5\x97\x56\x9e\x65\x92\xf2\x0b\x88\x49\x02\xd7\x2c\x12\x4b\x49\xb3\x15\x8b\xb0\xd8\xa1\x75\xf5\x1a\x8d\x51\xdb\x10\xaa\x66\x0c\x6f\x3a\xbd\xb2\x7c\x9e\x30\xb5\xda\xed\x34\x6c\x25\x0e\x05\x91\x04\xbd\x93\xf3\xf5\xa1\x8d\x33\xfb\x79\x29\xfc\xf8\x80\x77\xd7\xaf\xcb\x17\xb1\xd8\xee\x13\x4b\x69\x14\x19\xc2\xf6\x0e\x50\x70\x92\x60\x85\x88\x1a\x38\x84\xf6\x7e\x26\xd3\xcb\x05\x40\x66\xf1\x19\x03\xd5\x54\x8a\xb6\x45\xc5\x78\x04\x58\xbc\xd1\x15\xe1\x04\xf0\x3e\x00\x2d\x19\x58\x09\x16\xd0\xeb\xe7\x77\x11\xb8\xde\x2d\x71\xb6\x1b\x11\x5a\x0c\x08\xed\x10\x2f\x78\x61\x27\xd0\x2b\x3c\xd4\x0b\x05\xe6\xdf\x06\xbc\xf8\x64\xe8\x66\xdb\x5a\x9d\x67\x36\x14\x7c\x34\x3f\xfc\xb1\xd6\x8b\x8b\xe1\x52\x64\x25\xae\xdc\x00\x9b\x1c\xc3\x59\xe5\x3c\x1a\xc4\x4c\x45\x86\xcd\x34\x18\x8e\x8e\x05\x57\xbe\x36\x27\xe5\xb6\x9c\xe6\x25\x4d\x5c\x82\xac\x1b\x2c\x13\x09\xfa\x41\xe3\xdc\xeb\xab\x36\xf5\x08\xd2\x39\xc4\x31\xc4\x3e\xde\x7d\x4d\x1a\x0e\xfd\x0e\x81\xa3\x4b\x26\xf0\xc7\xe2\xa9\x48\x92\xf6\x33\xbd\xd5\xb0\xd2\xc7\xac\xe2\x01\xd0\x3b\xce\xa4\x43\xcc\x3c\xf1\x00\x65\xaa\xa0\xc8\xd2\x11\x8d\x48\x66\x14\x96\x02\xee\x73\xd0\x57\x00\x9c\x44\x2b\x88\x2e\x54\x19\x63\xa7\x0d\x1d\x6e\x6c\xb4\x8b\xa1\x6a\x17\x10\xab\x1c\xb4\x10\x4c\xcd\x86\xba\x24\x77\x20\xcc\xa8\x85\x1c\xae\x36\x63\xb2\xb6\x0f\x2e\x7a\x49\x59\x42\xe7\x49\x87\xc2\x7c\xb2\x28\xdf\x9c\x54\xe7\xcf\xbc\x74\x94\xe5\x49\xe2\xbc\xd2\x18\xa5\xa2\x25\x5d\x2c\x58\x84\x41\x8a\x18\xa5\x53\x46\xf5\xee\x5c\xfa\xa8\xc8\x1c\xa5\xa9\xce\xb7\xb6\xbe\x05\x6f\xda\xf0\xc5\x68\xa1\xac\xd1\xde\xda\x07\x43\xde\xd7\x35\x58\x33\x3b\xb0\x2a\x7a\xcd\xa1\x35\x23\x6f\x85\x76\xd1\x6e\x6f\x40\x29\x17\x69\x47\xde\x03\x55\x82\x57\x8e\x02\xd4\x3c\x24\x5b\x32\x4e\x77\x57\x29\xb0\xeb\xaf\x5a\xcc\x0b\x45\x93\xae\xb1\x78\x31\x5b\x4a\xaa\x0b\x0e\x5e\x2e\xd1\x1d\x9a\x4e\x2c\x58\xe4\x18\xf1\x46\x8e\xf8\x1a\xd1\xc6\x85\xc0\xed\xb6\xa9\x32\xae\xa5\x88\xf3\x08\x5c\x99\xe6\x5c\x55\x3b\xbe\xd5\x73\xa0\x1e\xfe\xe5\xc7\x28\xd3\x09\x62\xd0\x94\x39\x7f\xb5\xe0\x40\xa8\xca\x8c\x96\xef\xb1\x3d\x97\x12\x4f\x54\xbf\x0f\x78\xd8\x1d\x9d\x9e\x90\xf7\xd0\x86\x74\x9d\x7c\xa7\x2b\xbe\x6f\x4a\x12\xaa\xf4\xb9\xa4\x5c\xe1\x84\xcf\x59\xda\x64\xa2\x30\x9a\x15\x62\x40\xe3\x73\x89\x58\xd1\xf8\xd8\xa2\x40\xe3\xe3\x06\xee\xdd\x87\x73\x6e\xaf\xe1\x36\xac\xfd\xdb\xbd\x96\xe9\x91\x46\x2e\xf1\xb6\x9e\x02\xa3\x0c\x27\x71\x6f\x83\x2b\x65\x6d\xb6\xda\xa1\x3e\xe6\xba\xa0\xba\xdd\xc6\x40\x30\xd0\xa6\xd4\xd2\xaf\xbc\x6f\x30\xe7\x31\xc8\x04\x7d\x6e\xe5\x78\xd1\xca\x08\xc9\xf1\xcc\x29\xff\xb4\xb0\xe3\x60\x98\xab\xf3\x2c\x96\x4e\x03\x1b\x30\xe7\x7b\x34\xd8\xe5\x6a\x88\xdb\x6e\x90\xc9\x46\x11\x64\xba\x9d\xcb\xf6\xb2\xc9\x79\xc3\x8a\x11\x12\xa6\xba\x19\xab\x1c\x4e\xdd\xc6\x7e\xb9\xae\x6c\x4c\xca\x2a\x4f\xa9\x61\x50\x34\xc6\x00\xb9\xe2\x99\xd5\x91\xac\x4e\x63\x29\xd2\x3a\xee\xac\xe3\xc5\x6f\x5f\xe7\x0e\x39\xa6\x45\x8b\x54\xfb\x0e\x6b\x49\x2f\x98\xa5\xf4\xfa\x35\xf0\xa5\x5e\x1d\x92\x3f\x7d\xf5\x3f\xbf\xfe\x4b\xc3\x8b\x62\x6e\x63\xda\x5e\x01\x77\x56\xa2\xdb\x80\xde\x76\xaf\x9b\x66\xce\x99\x0f\xc5\x9e\x2d\xcb\x77\x0a\x87\x42\x89\x95\xe8\x84\x06\xed\xf8\x76\x9e\xb5\x83\xf3\x7b\x4c\x26\x50\x9a\xf2\x08\x26\x46\x1c\xd8\x39\x8c\x51\x65\x2d\x8f\x4c\xd6\xe4\xf9\x57\x13\x0c\xf1\xc4\x49\x59\xea\x9a\x95\x6c\xfd\xc3\xf5\xc7\xd9\x8e\xc5\x30\x45\xfe\x3a\xd9\x98\x29\x53\xc4\xec\xbd\x58\x20\x9a\xb6\x4c\x12\xd5\x3e\x09\x96\x67\x7b\x23\xc0\x36\xcf\x86\x62\x25\x5d\x98\xd0\x65\x9b\xec\x67\x97\x4c\x19\x67\x69\x9e\x1e\x92\x67\x0d\xaf\x58\x8e\x7c\x1b\xe8\x61\x7b\x2a\xcf\x33\x6a\xd8\xf2\x52\xd2\x34\xc5\x8c\x2b\x16\x03\xd7\x6c\xc1\x30\xe6\xa5\x20\x31\xd4\xe3\xed\x87\x3e\x4e\xab\x00\x3e\x86\x70\x19\x36\xda\x8b\xe8\x4e\xed\x39\x2e\x51\x28\x75\x5e\xbb\xa8\xca\x79\xd7\x19\x58\xaa\xb4\x6a\x03\x81\xeb\xcc\x4a\x72\x15\xff\x51\x0a\x94\x33\xbe\x54\x65\xb4\x25\xf2\xbf\x36\xf3\xb8\xf9\xec\x6a\x05\x2e\xba\x01\xaa\xde\x41\x5f\x2a\xc8\x88\x92\x65\x90\x31\x06\x9e\xb7\xb3\x8f\x6d\x5b\xac\x91\xba\x52\x48\x8e\xa9\x82\x1e\x76\xd7\x4a\x2c\xa6\xbf\x56\xa1\x48\x0e\xbe\x35\x06\xf4\xfc\xd9\x57\xad\x78\x57\xbc\xd7\xf8\x52\x19\xa5\xf9\xe1\x68\xfa\x2f\x3a\xfd\xf5\xe3\x9e\xfb\xc7\xb3\xe9\x5f\xff\xef\xe4\xf0\xe3\xd3\xca\x9f\x1f\x9b\x83\x2b\x77\x4b\xce\x65\xab\xe1\xb0\x3b\x6b\xbd\x58\xe5\xf1\x63\xe2\x83\xb9\xce\x65\x0e\x13\xf2\x3d\x4d\x14\x4c\xc8\x8f\x1c\xcf\xc9\x1b\x02\xad\x3d\xba\xc2\x48\x36\x8f\xcd\xa8\x8f\xdb\x5f\xc1\x29\xb5\xbf\xe3\xa6\xdb\xa6\x82\xf6\x03\x92\xb7\x2c\x54\x18\x21\xaf\x60\xa0\xcd\xee\x5a\x08\x31\x83\x6b\x9a\x66\x09\xcc\x22\x91\x1e\x14\xcf\x6f\xf1\x90\x7b\xfe\x75\x0f\xec\xd9\xfb\x60\x71\xe4\xe3\xde\x87\xa9\xfb\xd7\x53\xff\xd3\xfe\x77\x7b\xff\x9e\xb5\x3e\xdf\x7f\x7a\x80\xa1\xbd\x05\xaa\x7d\xfc\x30\x2d\xd1\x6e\xf6\xf1\xe9\xfe\x77\x95\x67\xfb\xbb\x90\x70\x3b\x89\x2a\xa5\xd9\xf4\xa2\xb1\x62\x5c\xa3\x28\xdb\x94\x8d\x95\xd2\x6c\x97\x8a\xb7\x60\xcb\x37\x34\x7b\x0f\x0b\x90\xc0\xa3\x6e\x13\xd2\xf1\xd6\x27\x64\x2f\x36\x47\x38\xe6\xe0\xed\x7b\xe1\x55\x16\x4f\xdd\x41\x56\x7c\xe7\xb9\x7b\x71\xe1\xd1\x66\x4c\x4e\x2d\xd2\x6d\x52\x8a\x92\x3b\x94\xf5\xb2\xd7\xdb\x77\x01\x71\xda\x20\x4e\x4e\xcb\xa8\xbb\x11\x86\x1e\x73\x1c\x59\x83\x57\x9b\x06\xd1\x03\xc9\xfb\xc9\xbe\xbc\x25\xf4\xb7\x73\x90\x62\x9d\xa3\x7b\xf0\xf7\x50\xfc\x64\xed\x2e\xa3\xfb\xc9\x59\xa3\x72\xd9\x57\xba\xf8\xf1\xe4\x85\xc5\x19\x64\x4c\x28\x51\xae\x44\x12\x2b\x92\x73\xf6\x4b\x0e\xe4\xe4\x45\x51\x7d\x88\xf1\x28\xc9\xf1\xde\x9e\x1f\x7f\x3c\x79\xa1\x66\x84\xfc\x03\x22\x6a\xf4\xfa\xab\x96\x10\x4e\x2c\xb5\xf7\xee\xed\xeb\xff\x8d\x16\x00\xfc\xd2\x5d\x9b\xe1\x0a\x8b\x24\x8c\x5a\x8b\x94\x3d\x7c\x4d\xaf\x36\xba\x11\x67\x14\xd1\xac\xd9\xc6\x40\x9c\xdd\x8e\xdb\x20\xdd\x15\x24\x99\xc2\xe4\x23\xa2\x72\xe9\x56\x63\x06\xb4\x59\x10\x98\x86\xee\x1c\xe7\x3e\x9f\x0a\xf3\xd5\x46\xc5\x45\x47\x82\x73\x88\x30\x32\xc1\x08\xa1\x7d\x38\x44\xf5\xfd\x4d\x01\x7f\xa7\x44\xbb\x19\xe0\x5c\x8e\xe9\xf9\x87\x37\x90\xde\x3e\xa1\x1b\x8a\x7c\xe7\x44\x79\x9c\xf1\x08\xaa\x76\xbe\xc5\xd1\xf8\x6d\xe6\xe0\xe0\x76\xe7\x2c\x61\x6b\xbd\xa3\x46\xb4\x46\x4b\x74\x06\xbf\xef\xb0\x5d\xd7\xc3\x32\xb7\x2c\x1b\x1b\xb9\xad\x68\x40\x2d\xfc\xc9\x2b\xaa\xc8\x1c\x80\xa3\x3d\xd7\xda\xed\x80\x3b\x9c\x87\xd2\xda\x9a\x67\x53\x2d\xa6\x0d\xfa\x55\x07\xe4\xba\xa1\xd6\x62\x3e\xa8\xad\xed\x68\xb0\x41\xe0\x6a\xb5\xde\x05\x03\x55\xde\xda\xe3\xa5\xa7\xc1\x5e\xea\x66\xad\xac\x36\x67\x67\x64\x2d\x8e\x6d\xfc\x6b\x7b\x4a\x46\xdd\xae\x19\x9e\xb4\x40\xf7\x62\x8d\x9a\x47\xcc\xd1\x6e\xf3\x19\xc8\x4b\xd6\x43\xf8\x78\x5f\x7f\xbf\x17\x6b\x79\xf5\xfe\xf4\x18\xf3\xf3\xcc\x07\xde\x3f\x81\xd8\x5f\x95\x2a\x6e\xdf\xa3\x13\xd9\x50\xa3\xa3\xbb\x27\xe8\x4c\xc8\xf1\x83\x64\x52\x68\x11\x89\x0e\xa7\x53\x6b\xca\x0c\x82\xb6\x2d\xc7\x68\x48\x1f\x43\xe5\x0d\xcb\xc7\x6a\x59\x69\x4a\x0b\x69\xc8\xb5\xf6\x5b\x3e\x2f\xee\xc4\x2a\x7b\x77\x5a\x1f\xf9\xcf\x7f\x1f\xfd\xbf\x00\x00\x00\xff\xff\x78\xea\x72\xfc\x70\x56\x01\x00") +var _operatorsCoreosCom_catalogsourcesYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x6b\x73\x1c\xb7\x11\xe0\x77\xfd\x0a\x94\x2e\x55\x22\x95\xdd\xa5\xe4\xa4\x7c\x09\xe3\xd8\xc5\x50\xb2\x8e\x65\x3d\x58\x22\xed\xd4\x45\xd1\x9d\xb0\x33\xbd\xbb\x30\x67\x80\x31\x80\x21\xb9\x8e\xf3\xdf\xaf\xd0\x00\xe6\xb1\xbb\xf3\xe4\x4b\xf2\x01\x1f\x6c\x71\x67\x06\x8f\x46\x77\xa3\xdf\xa0\x19\xfb\x09\xa4\x62\x82\x1f\x12\x9a\x31\xb8\xd6\xc0\xcd\x5f\x6a\x76\xf1\x17\x35\x63\xe2\xe0\xf2\xf9\xa3\x0b\xc6\xe3\x43\x72\x9c\x2b\x2d\xd2\xf7\xa0\x44\x2e\x23\x78\x01\x0b\xc6\x99\x66\x82\x3f\x4a\x41\xd3\x98\x6a\x7a\xf8\x88\x10\xca\xb9\xd0\xd4\xfc\xac\xcc\x9f\x84\x44\x82\x6b\x29\x92\x04\xe4\x74\x09\x7c\x76\x91\xcf\x61\x9e\xb3\x24\x06\x89\x9d\xfb\xa1\x2f\x9f\xcd\xbe\x7a\x36\x7b\xf6\x88\x10\x4e\x53\x38\x24\x11\xd5\x34\x11\x4b\x3b\x96\x9a\x89\x0c\x24\xd5\x42\xaa\x59\x24\x24\x08\xf3\xbf\xf4\x91\xca\x20\x32\x83\x2c\xa5\xc8\xb3\x43\xb2\xf3\x1d\xdb\x9f\x9f\x0b\xd5\xb0\x14\x92\xf9\xbf\x09\x99\x12\x91\xa4\xf8\x6f\xb7\x46\x3b\xec\x19\x0e\x8b\xbf\x27\x4c\xe9\x1f\xb6\x9f\xbd\x66\x4a\xe3\xf3\x2c\xc9\x25\x4d\x36\x27\x8c\x8f\xd4\x4a\x48\xfd\xb6\x1c\xde\x0c\x17\x51\xad\x64\x64\x1f\x33\xbe\xcc\x13\x2a\x37\xbe\x7d\x44\x88\x8a\x44\x06\x87\x04\x3f\xcd\x68\x04\xf1\x23\x42\x1c\xa4\x5c\x57\x53\x42\xe3\x18\xa1\x4f\x93\x53\xc9\xb8\x06\x79\x2c\x92\x3c\xe5\xc5\x50\xe6\x9d\x18\x54\x24\x59\xa6\x11\xc2\xe7\x2b\x20\x99\x04\xad\xd7\x08\x12\x22\x16\x44\xaf\xc0\x8f\x5d\x7c\x45\xc8\xcf\x4a\xf0\x53\xaa\x57\x87\x64\x66\x20\x3c\x8b\x99\xca\x12\xba\x36\xb3\xa9\xbc\x65\xb7\xe9\x85\x7d\x56\xf9\x5d\xaf\xcd\xd4\x95\x96\x8c\x2f\xdb\xa6\x62\xde\xeb\x3f\x07\x0b\x9a\xf3\x75\xb6\x3d\x85\x8d\x1f\xfb\x8e\x9f\xe5\xf3\x84\xa9\x15\xc8\xfe\x93\x28\x3e\xd9\x9a\xc3\xe9\x8e\x27\x0d\x13\xa9\x74\xea\xe9\x66\x16\x49\x40\x92\x39\x67\x29\x28\x4d\xd3\x6c\x6b\x80\xa3\xe5\xf6\x1a\x63\xaa\xfd\x8f\xf6\xa5\xcb\xe7\x34\xc9\x56\xf4\xb9\xfb\x51\x45\x2b\x48\x69\x89\x0f\x22\x03\x7e\x74\x7a\xf2\xd3\x9f\xce\x36\x1e\x90\x3a\x74\x6a\x78\x4e\x98\x22\x94\x48\xc8\x84\x62\x5a\xc8\xb5\x81\xd6\xf1\xd9\x4f\x6a\x42\x8e\xdf\xbf\x50\x13\x42\x79\x5c\x10\x1e\xc9\x68\x74\x41\x97\xa0\x66\x5b\x73\x15\xf3\x9f\x21\xd2\x95\x9f\x25\xfc\x92\x33\x09\x71\x75\x16\x06\x3c\x1e\x26\x1b\x3f\x1b\xf8\x57\x7e\xca\xa4\x19\x53\x57\x08\xd9\xb6\x0a\x33\xab\xfd\xbe\xb1\xc2\xdf\xa6\x1b\x4f\x09\x31\x80\xb1\x5f\x92\xd8\x70\x36\x50\x88\x14\x8e\xea\x20\x76\xd0\xb4\xc8\xc2\x94\x81\x88\x04\x05\xdc\xf2\x3a\xf3\x33\xe5\x6e\x95\xb3\xad\xce\xcf\x40\x9a\x8e\x0c\x43\xc8\x93\xd8\xb0\xc4\x4b\x90\x9a\x48\x88\xc4\x92\xb3\x5f\x8b\xde\x15\xd1\x02\x87\x4d\xa8\x06\xa5\x09\xd2\x35\xa7\x09\xb9\xa4\x49\x0e\x08\xec\xad\xbe\x53\xba\x26\x12\xcc\xb8\x24\xe7\x95\x1e\xf1\x13\xb5\x3d\x97\x37\x42\x02\x61\x7c\x21\x0e\xc9\x4a\xeb\x4c\x1d\x1e\x1c\x2c\x99\xf6\xcc\x3e\x12\x69\x9a\x73\xa6\xd7\x07\xc8\xb7\xd9\x3c\x37\x0c\xf5\x20\x86\x4b\x48\x0e\x14\x5b\x4e\xa9\x8c\x56\x4c\x43\xa4\x73\x09\x07\x34\x63\x53\x5c\x0c\x47\x86\x3f\x4b\xe3\xff\x21\xa1\xca\x01\x37\xd1\x60\x83\x1a\x88\xe7\xbb\x03\x37\xcb\xf0\x63\x8b\x98\xb6\x43\xbb\xd8\x72\x4f\xcc\x4f\x06\x8c\xef\x5f\x9e\x9d\x13\x3f\x23\xbb\x6f\x76\x8b\xca\x57\x77\x40\xc8\xef\x96\x81\x2c\xe3\x0b\x90\xf6\xcb\x85\x14\x29\xf6\x0a\x3c\xce\x04\xe3\xda\x72\x8d\x84\x01\xd7\x44\xe5\xf3\x94\x69\x85\x68\x0d\x4a\x9b\x8d\xdc\xee\xf8\x18\x0f\x47\x32\x07\x92\x67\x86\x78\xe3\xed\x57\x4e\x38\x39\xa6\x29\x24\xc7\x54\xc1\xbd\xef\x9d\xd9\x23\x35\x35\x1b\xd2\x7b\xf7\xaa\x47\xff\xf6\x07\x5b\x54\x4f\x88\x3f\xb3\x7b\xbd\xdc\xc4\x26\x88\xe5\x09\xbb\xce\x04\xd2\xc2\x1d\x4c\xa3\x71\x2c\x41\xed\x78\xd0\x8d\x75\xa6\x1d\xd9\xcf\x2d\xf2\xad\x84\x32\x48\x40\x35\x79\xf7\xfa\x0d\x89\x28\x27\xb9\x02\x43\xc2\x91\xe0\xdc\x60\x99\x16\x84\x9a\x33\x77\x0a\xd7\x4c\x21\x56\x4a\x58\x32\xa5\xe5\x7a\x7b\x6f\x4d\xfb\x5e\xc8\x94\xea\x43\xf2\x8d\x7f\x6d\x8a\x43\x08\x49\x58\xf6\xed\xe1\x37\x99\x90\xfa\xdb\x9d\x1f\xbe\xe3\xc9\xda\x0c\x1e\x93\xab\x15\x70\x72\x56\x40\x86\xfc\xbd\xf2\xc7\x2b\x99\x45\xbb\x07\x3e\x59\x72\x21\xfd\xd7\x06\xad\x4f\x52\xba\x04\xb2\x60\x90\x20\xa1\x29\xd8\xc1\xd5\x5a\xd0\x82\x58\xc1\x6f\xc1\x96\x6f\x68\x36\x16\xd6\xc7\xbe\x03\x33\x03\x33\xa9\xaa\xd8\x52\x3e\xd4\x02\x29\xca\x2c\xde\xfc\x93\x46\x17\x84\xba\xc1\x53\x9a\x4d\x15\x52\x73\x07\xe0\xfb\xc1\xef\xd8\x77\x6a\x76\xa4\xfc\xf9\xc4\x71\xe9\xc1\x10\xaa\x02\x61\xf0\xb7\xa5\x50\xd6\x09\xdf\x37\xbb\xce\xd4\x1e\x63\x2c\x65\x16\x9d\x8a\xd8\x2e\x7b\xec\x2e\xbe\xaa\x76\x42\xe0\x3a\x13\x0a\x14\x89\xd9\x62\x01\xd2\x70\x4e\x71\x09\x52\xb2\x18\x14\x59\x08\x89\x5b\x9b\x89\x18\xd9\x44\xb1\xd5\x35\x79\xe4\x54\xec\x60\x9b\x64\x10\x0d\xa0\xd0\x62\x31\xbc\x0b\xb7\x77\x32\x25\xd2\xc1\x63\x4c\xa3\x0b\x54\x8f\xd6\xbb\x9f\x6e\x80\xee\xc8\xbd\xec\x11\xdd\x89\xa2\x8e\xc3\x3d\x51\x06\x24\x4f\x54\xd1\xe7\xee\xf5\x77\x4e\xb9\xcf\xb4\x4d\xe3\x22\x86\xa3\x8e\xe9\x6f\x2d\xe1\x05\xfe\x31\x07\x85\x9f\x17\x53\x45\xc1\x26\xce\x13\xe4\x7d\x79\x52\xdf\xe5\xa6\x75\xf4\x5c\x4b\xdf\xf5\xd8\xf7\x60\x01\x52\x42\xfc\x22\x37\xa8\x7e\x56\xcc\xca\x71\x3e\xfb\xf3\xcb\x6b\x88\xf2\x26\x72\x6c\x5c\x7a\x03\xe2\x57\x9b\x51\x38\x1c\x24\x40\x92\x2b\x96\x24\x6e\x46\x86\x65\xf9\x07\x06\x24\x28\x01\x1a\x08\x2a\x7b\xb0\x28\xaa\x99\x5a\xac\x3b\x07\x30\x10\x2d\x60\x0e\xd7\x46\xb8\x41\x6d\x11\x09\x89\x2d\x18\xc4\x64\xbe\x76\x72\x8c\x61\xea\x13\x32\xcf\x35\x61\x1a\x85\x9c\x68\x25\x84\xda\x3c\x44\xb7\x1b\xb5\x5b\x8b\xf3\xba\x64\x02\x65\x54\x22\x38\x18\x6e\x98\x1a\xc9\xc4\xd1\x6b\x65\xf8\x19\xae\xbc\xfc\x8c\x6d\x0a\x16\xdb\x2d\x35\x27\x5e\xb1\x5d\x9e\x22\xcc\x30\x57\x4c\xaf\xf0\x8f\xa5\x51\x97\x8c\x7c\xac\xf2\xd4\x0c\x7a\x05\x6c\xb9\xd2\x6a\x42\xd8\x6c\x87\xd0\xb4\xd9\x0c\x02\x02\x8d\x56\x95\x69\xa5\x00\x5a\x11\x9a\x24\x7e\x09\x55\xac\xb5\x12\x48\x6a\x64\x45\xb2\xe7\x85\xc9\xce\x51\x9c\x20\x38\x29\x24\x98\x4d\xc4\xdb\xb9\x5d\x13\x02\x3a\x9a\xed\x4f\x3a\xbb\x8f\x44\x9a\xe5\x1a\x8c\x04\x9c\xa7\x66\x6b\x99\x36\x3a\x98\x15\x7c\xa5\xc8\x97\x16\x52\x90\xb8\x89\x7b\xb5\xc5\x9e\xe8\x86\xff\xd1\x38\xde\xc5\xf3\x37\xdb\x63\x0b\xdc\xc7\x5e\x33\x31\xc3\x31\x0b\x24\x84\x5f\x4a\x75\xb4\x72\xca\x52\x24\xa4\x04\x95\x09\x6e\x7a\xb6\x4f\x5e\x96\x6b\xfb\x9b\x79\xa7\x73\x3c\xd3\xe9\x9e\xda\x2f\x37\x7b\xc5\x96\x2b\xbf\xd7\x54\x02\xfe\x56\xc7\x91\xae\x2d\xb7\xac\x84\x4a\x49\xbb\xe8\x88\x69\x48\x3b\x18\x09\x19\x41\xfd\x84\x1c\x71\x02\x69\xa6\xd7\x15\xc4\xae\xa0\x98\x06\x99\x16\x80\x44\x2c\x44\xb6\xa7\x2c\x10\x58\x9a\x25\x2c\x62\xda\xa1\x39\x79\xd6\x63\xbc\x3d\x43\x09\x84\x69\x73\x68\x10\x2e\xa6\x22\xdb\x9f\x91\x23\xc2\xf3\x82\xf1\xb4\x4d\x81\x8b\x62\x06\xae\x23\x33\x2d\x25\xca\xbe\xba\xf9\x51\x3f\xf6\x6d\x5b\xb3\x90\xbf\xdd\xa6\x6e\xfe\xc0\x7b\x10\xa1\x79\xdd\x42\xad\xf3\xd5\xbe\x07\x89\x7f\xdb\xcf\xa1\xcf\xdb\x9b\xa7\xbd\xa5\x1c\x05\x09\x44\xda\x9c\x86\x20\xd3\x09\xa1\x4a\x89\x88\x19\xad\xb0\xc4\xfd\x3a\x41\xd9\x95\x74\xc3\x9e\x0c\x85\x3f\x19\xbc\x7e\x82\x86\x87\x3a\x7d\xf7\xfd\x6e\x0b\x1a\x09\x33\x3a\xce\x62\x03\x2a\x35\xbe\x3b\x5f\xe3\xd3\x27\x8a\x24\x74\x0e\xc9\x0e\xa5\xbd\xa9\xf5\x27\xfe\xb2\xf5\x64\x03\x0d\x0b\xea\xc5\x10\xca\xb6\x89\x0d\x95\x75\x3b\x13\x47\x81\x27\xe6\xa8\x32\xaa\x3d\x65\x5c\x39\xfb\xce\x84\x50\x72\x01\x6b\x6b\x87\xa3\xbc\x30\xc5\x0d\x9a\x02\x76\x2c\xc1\x1e\xe8\x06\xef\x2e\x60\x8d\x1d\x36\xd9\x90\x5a\xba\x1a\x8a\x77\xb6\x0d\xe1\x00\x65\x9b\x9a\x89\x0e\xfc\x62\x04\x80\x86\x93\x86\x6d\x17\xd0\x2a\x3e\xef\x6a\x5b\x56\x6a\x44\x77\xdc\x0f\xdc\x24\x3c\x81\x3d\x3e\xd0\x2c\x4b\x18\xec\x36\x35\xb5\xb7\x56\xad\xaf\xad\x79\xe8\xdd\x68\x5d\x03\x09\xc4\xb4\xf7\x85\xb9\xce\xe2\xfb\x13\x65\xf1\xd5\xf0\x9d\x15\xcb\xac\xa1\x45\x01\xb2\x91\xe1\x48\x6b\xdb\x4f\x34\x61\xa5\x2d\x5b\xa1\xb0\x71\xc2\x27\xe4\xad\xd0\xe6\x7f\x2f\xaf\x99\x32\x32\xe6\x0b\x01\xea\xad\xd0\xf8\xe7\x8c\xbc\xd2\x96\xf4\x5e\xf7\xe4\xcb\x65\x1b\xbd\x07\x76\x7d\xf7\xbd\x03\x47\xdc\x32\x51\x03\xe1\xaa\xd1\x55\xcd\xc8\x89\x15\x07\x0b\x2f\x00\x53\xe4\x84\x1b\xa5\xc0\x42\x6e\xf0\x50\x68\x77\xc7\xbe\xdd\x90\x69\xae\xd0\x6a\xca\x05\x9f\xa2\x18\xb5\x73\x4c\xbb\x41\x66\xdc\xea\x16\xdd\xe2\xf0\xcd\x43\xbf\x42\x1b\xdd\x6b\x3d\xa9\x7c\x3c\x78\xdc\xca\x60\x2b\x7a\x89\xa2\x3d\xe3\xcb\xa4\x10\xe2\x27\xe4\x6a\xc5\xa2\x95\xd5\x1e\xe7\x60\x9d\x03\x99\x04\x23\x31\x50\x65\x98\xbf\xf9\x65\x09\x72\x38\xea\x9f\x1b\xd5\xc0\x8e\x6f\x5d\x1b\x09\x8d\x20\x26\x31\xaa\x2c\xd6\xca\x4e\x35\x2c\x59\x44\x52\x90\x4b\x20\x99\x39\xfa\xc7\x21\xfc\xb0\x93\xd8\xb6\xc1\xe7\x71\x75\xc0\x11\x14\x46\xc8\xf5\xf4\x22\x9f\x83\xe4\xa0\x41\x4d\x8d\x7c\x32\x75\xb3\xd7\x22\x65\x51\xef\xce\x6e\xa5\x1b\x94\xb3\xbe\x37\x7a\xdb\x3d\x89\x58\xa8\x23\x06\x11\x2b\x88\x58\x41\xc4\x0a\x22\x56\x10\xb1\x7a\xb7\x20\x62\xdd\x78\xf8\x20\x62\x05\x11\xeb\xde\x45\xac\x5a\x17\x29\xcd\x86\xf6\x60\xed\x72\x23\x0c\x81\xff\xb4\x06\xdd\x4d\xcb\x1f\x0a\x7c\x3e\x84\xa5\x6e\x02\x34\x72\xcc\x99\x3b\x9c\xce\xd1\x6c\xc8\xac\xbf\x5e\x52\xbe\x04\xf2\x7c\xfa\xfc\xd9\xb3\x21\x06\x42\x87\xce\xbd\xbe\x58\xb8\xe0\x04\xc6\xf5\x9f\xbe\xea\xf8\xe2\x06\xbb\xd2\xe4\x2f\xb9\x1f\x47\x9d\xe3\x3c\x85\x6f\xa6\x26\x22\x37\xf8\xd2\xf0\x18\xe3\x42\x93\x14\x34\xa1\xdd\x32\x59\xd5\xec\xce\x52\x98\x14\x4e\x6f\x64\x3b\x2e\x42\xc8\x3b\x05\x63\x22\xb8\x73\xbd\x98\xcd\xef\xde\xdc\x51\x2b\x88\x80\xda\xc8\x95\x39\x98\x55\x74\xbb\x02\x35\x51\x22\x35\xb3\x66\x5c\x7b\x26\x66\x96\x00\x7e\x63\xc8\x1e\xcc\x96\x33\x12\xe7\xd8\x2d\xe5\x2e\xe4\x69\xdf\xae\x56\xad\x95\x86\xb4\xdb\x17\x68\x0e\x43\x89\xff\x33\x60\xd1\x72\x6d\x3a\x83\x4b\xe0\x3a\xa7\x49\xb2\x26\x70\xc9\x22\x5d\xc0\x0f\x23\xb4\x98\x56\xbd\x20\x35\x40\x8c\xee\x2f\x3a\x4f\xb7\x28\xb4\xeb\x90\x1a\x22\xf9\x6e\xf5\xdd\x87\xe7\xd4\x28\xe0\xbd\x5b\xc9\xac\x51\x27\xd4\xa6\x5f\xeb\xb6\xc5\x7f\x22\x72\xbf\x7b\xdf\xed\x65\x23\x83\xcf\x9f\x01\x67\xce\x38\xd1\xca\x39\xbc\x84\x74\xce\xb7\xed\x95\xee\x70\x79\xd9\xb5\xd7\xa8\x46\x2c\x7a\x0e\xa8\x57\x60\x9d\x94\x47\x6f\x5f\xf4\x83\x18\x71\xc1\x01\xe7\x22\x13\x89\x58\xae\xab\xdb\x6b\x43\xa4\x59\x9a\x79\x27\x2e\x25\x2a\x9f\x3b\x11\xdc\xe0\xfc\xdb\x0d\x7c\x08\xae\xa1\xe0\x1a\x0a\x76\x0b\x6c\xc1\x6e\x11\xec\x16\xc1\x6e\xd1\xaf\x05\xbb\xc5\x8d\x87\x0f\x76\x8b\x60\xb7\x08\xae\xa1\xed\x16\x44\xac\xee\x16\x44\xac\xd6\x16\x44\xac\xa2\x05\x11\x2b\x88\x58\x41\xc4\x0a\x22\x56\x10\xb1\xee\xab\x9b\x9b\xba\x86\x6e\x34\x85\x71\x83\x67\x22\xbe\x41\xf2\x56\x26\xe2\x96\xdc\x2d\x6b\xd3\x8f\xc4\x34\x11\x11\xd5\x2e\xa3\xda\x7c\xe2\xbc\x50\x8a\xa6\xd6\x4d\x31\x21\xbf\x0a\x0e\x36\x9b\xc5\x90\x07\x3a\x0b\x84\x5e\x81\x34\xaf\xef\xa9\xfd\xd6\x14\x82\x90\xfb\x15\x72\xbf\x42\xee\x57\x63\xfb\x6c\x72\xbf\x56\x54\x59\xbc\xb5\x47\x63\x73\x2a\x58\x85\x27\x9d\x83\x4c\x7f\xa7\x99\x60\x06\xdd\x1d\x3a\x62\x3d\x90\x12\xa5\x2c\x64\x62\xe7\xf0\x87\xf8\xb4\x0e\x0f\xa7\x56\xe3\xa2\x68\x1c\x43\x4c\x32\x90\x53\x8b\xa2\x82\x2c\x18\x8f\x77\xac\xd5\xc3\xa7\x9b\x3d\xdc\x61\x2a\x56\x7d\x1d\xbd\xbe\xb9\x9b\x7c\xac\xfa\x44\x46\x38\x15\xab\x9e\xd1\xda\x21\xf8\x59\x64\x67\x0d\xd5\xd0\xa7\x44\x3b\x87\xe2\x0f\x3d\x75\xf4\xe1\x6a\x36\x2a\xc7\xde\xfd\x38\xd2\xfc\x34\x48\x15\x3a\x72\xfa\xf8\x2f\x39\xc8\x35\xd6\x0d\x28\xd5\xce\xa2\xec\x8c\x8b\x88\x61\x8a\x44\x54\xd9\x63\x75\x88\xa8\x7c\xb2\xb0\x59\x93\x3c\x4f\x92\x89\xed\x67\x93\x58\x3d\x9b\x43\x3c\xe0\xc2\x3c\x1f\x6c\x11\x1b\x68\xa2\x19\x67\x03\x19\xef\x85\x25\x9b\xfb\xb4\xd9\x95\xb5\x8d\x79\xd3\xa1\xdd\x96\x9d\xb6\xc3\x1d\xde\xf4\xc1\xfe\x71\xdb\xc6\x2a\x30\xa3\xd4\x97\x1b\xeb\xeb\x2d\x30\xb9\x81\x5d\x11\x5f\x1e\x3c\x99\xdb\xb1\x2d\x92\xf1\xf6\x45\x32\xda\xc6\x48\x46\xd9\x19\xc9\x58\x5b\x23\xb9\x81\xbd\x91\x8c\xb3\x39\x92\x4d\x6c\x33\x3b\xe4\x04\xdf\xbb\x31\x3f\x92\x9b\x29\xe7\xe3\xcd\x90\xe4\x16\x08\xab\x3a\x7e\xa5\x88\xd7\xdd\xd9\x25\x49\x5f\xdb\x24\x92\x55\xcd\x3c\x79\xdf\xfb\x32\xce\x34\x49\x6e\x69\x57\x9c\xd1\x8e\xa1\x2d\xec\xbe\x8c\x95\xe4\xe1\x0d\x96\xad\x53\x70\xc3\xf7\xb6\xf0\x8d\x1a\xfd\x06\x56\x41\x72\x23\xcb\x20\x19\x6f\x1d\x24\x37\x45\xf6\x5b\xb3\x12\xde\x6a\x57\x28\x27\xbd\xc6\x38\xb4\x1b\x48\x5b\x83\x29\xb0\x32\xac\x95\x2e\xb0\x46\xd9\x82\xfc\xc7\x08\x11\x88\x98\xff\x25\x19\x65\x52\x19\xed\xc6\xd9\xb5\xab\xcf\x9c\xf9\xae\xd2\xcd\xe0\x09\x60\x91\x36\x73\xc6\x5f\xd2\xc4\x08\x39\x36\xe8\xd7\xd9\x20\xcc\x5c\x36\x45\xc8\x09\xb9\x5a\x09\x65\x25\x92\xa2\xce\xdc\xe3\x0b\x58\x3f\x9e\xf4\x32\x0f\xd4\x5b\x95\xb2\x1f\x9f\xf0\xc7\x56\x74\xda\xa2\xcb\x42\xce\x12\x3c\x59\x93\xc7\xf8\xec\xf1\x6d\xcb\xa8\x23\xe4\xa3\x6a\x31\xdf\xb1\xe2\xc7\x28\x72\xba\xa9\x81\x9b\xd4\xb0\xef\x07\x58\x8f\x0d\x44\x18\x84\xf3\x6f\x6a\x23\x7a\x81\x1a\xd1\xcc\xe8\xee\x85\xdc\x84\x16\x55\x2b\x32\x39\x1b\x95\x35\x57\xb1\x24\x19\x30\xda\x1c\x88\xa6\x17\x80\x1e\x1e\xac\xed\xa8\x58\x8c\x06\x37\xc1\x2d\xea\xe0\x48\x06\x65\x7c\x11\xc2\x44\x88\x8b\x3c\xf3\xa8\xe7\x0b\x87\x0e\x18\x92\xf1\x48\xa4\x3e\xa6\xde\xc6\xb5\x1a\xaa\x70\xf4\x32\xb5\xe5\x4e\xed\xef\x38\x30\x1e\x01\xce\x34\xf1\xa9\xa6\x98\x7f\x22\x54\x91\x4f\x28\x54\x72\xb2\x87\x1f\xee\x7f\x1a\x12\x52\x50\x00\xd0\x5a\x5f\x45\x8e\x9c\xa5\x28\x68\x59\xb1\xff\x15\xb0\x6d\x83\xd8\x80\xa1\x7d\xa5\xb8\x2a\x30\x6c\x2d\x3c\xb2\x47\xb9\x66\xfb\x65\x41\x3c\x82\x78\x80\x52\x72\x2c\xf8\x13\x6d\xe7\xe7\xf9\x9a\xef\x60\x48\xd4\x41\x01\xf7\xd2\xe3\x67\xbd\x05\x76\xcb\x63\x58\xd0\x3c\xd1\xae\xf0\xac\x61\x7d\x78\xd2\x0f\x18\xe1\xdc\xfb\x4b\x9c\xc0\xbf\x10\x72\xce\xe2\x18\x38\xa6\x38\xf8\xe9\xcf\x85\x4f\x08\x2a\xd1\xdd\x70\xb6\xda\x1e\x0f\x19\xf6\x28\x51\x62\xb2\xd9\x63\x54\x14\xa6\x35\x54\x84\xe5\x13\x6b\x03\x10\xa6\x0c\x50\x1b\x2a\x25\xee\x6e\xf7\x12\xfa\x73\x73\x9e\x37\x3a\xf4\x8a\xa9\x07\xe0\x7b\x9b\x83\x06\xd6\xd7\x8b\xf5\x71\xa1\x03\xf7\xfb\x62\xb9\xdf\x16\xd2\xdf\x06\x03\xdc\xea\x34\xf0\xc0\xc1\x3c\x90\xfb\xfb\x29\x1e\xd8\x0b\x60\x0d\x63\x36\x8a\xd5\x4f\x49\x95\x36\x33\x4c\xf4\x1a\x67\x2f\xf3\x69\x70\xc8\x67\xb1\x87\xd8\x3b\x43\x73\xee\xea\xfe\xfb\xca\xd4\x6e\x58\xcb\x2f\x36\x7d\xee\x03\xc6\xf4\x8a\x8b\xe0\xa0\xd0\xc4\x0e\x45\x7c\x45\x65\x18\xec\x75\xc8\x52\x30\x15\xae\x34\x1f\xf2\x78\x33\x39\xae\xec\x1b\xed\xfa\x29\x50\xae\xc8\x63\x1f\xe2\xf1\x44\x95\x6f\x3c\x1e\x44\x6f\xbe\xf4\x65\x31\xf6\xde\x7f\xfe\xbb\x5f\x2b\x77\x59\x0e\x1d\xfc\x28\xc1\x8f\x52\x6d\xc1\x8f\xb2\x3d\x89\xe0\x47\x69\x6a\xc1\x8f\x32\x6a\xfc\xe0\x47\xa9\xb7\xe0\x47\x09\x7e\x94\xe0\x47\x09\x7e\x94\xe0\x47\x09\x7e\x94\xbe\x1f\xdd\x86\x1f\xa5\x54\x83\xee\x43\x8f\xae\xaa\xac\x2e\x4e\xdc\x5e\xa8\x46\x35\x8b\xca\xac\x50\xff\x96\xfd\xd7\x43\x29\xd5\x55\x35\xf8\xa6\x2a\x75\x55\x41\xdf\xb2\x60\x0c\xd6\xa8\x1b\xf5\xe7\x42\xc3\xde\x1a\xe3\x96\x54\xeb\xdf\xb9\x71\xa9\x12\xc0\x7a\x1f\xe4\x70\xee\x53\x59\xdc\x1d\x8d\x73\x28\xf3\x5c\x62\xb2\xe7\x6d\xad\xfb\x66\xc3\xb9\xd0\xf5\x87\x5c\xb3\x69\xf9\x46\x11\x20\x8c\x26\x61\x5f\xcd\x6d\x08\xd0\xbd\xce\x52\xda\x1e\x5d\x7e\x4d\x91\xd0\x51\x62\x9b\xe1\xff\x20\x6b\xb3\x65\xca\xdd\x61\x89\xa9\x69\x32\xe7\xdc\x88\x47\x82\xbb\x2c\x8e\x01\x33\xb1\x47\x8b\x35\xf3\x3a\xaa\xb4\xca\x14\xae\x11\x35\xaa\x72\x9b\x2a\x09\x00\x54\xdb\x1b\x31\x5d\xcd\x25\xc1\x9d\x91\xdc\xfc\x62\xfb\x19\x30\x89\x82\x60\x11\x9e\xac\x58\xd1\x10\x5a\x7d\x89\x34\x5a\x9d\x2c\x53\xb8\x8f\x34\x49\xc4\xd5\x90\xf3\x69\x20\x45\x8c\x2e\x0e\xd8\x1b\x7b\xaf\x06\x57\x11\xdc\x88\x96\xef\x2b\xab\x87\x52\x83\xad\x2d\x94\x1a\xfc\x3c\x4a\x0d\x56\xfc\xa0\xd5\x9a\x83\xdd\xb0\xc2\x9a\x84\x77\x5a\x73\x90\x90\x7f\xba\x0b\x36\x25\x58\xe7\x65\x9e\x68\x96\x95\x59\xc6\xca\xee\x50\x62\x55\xea\x85\xcb\x06\xac\x53\xaf\x99\x0d\x8d\x56\x9d\x43\x6d\x50\x39\x8e\x87\x59\xcb\x0a\xb9\xa9\xcd\x98\x43\xfb\xbb\x2d\xf4\xe7\x75\x6d\x9b\x76\xc8\x1e\x3a\x9b\xaa\x17\xff\x7b\xe1\xae\x6a\xae\xfa\xc0\x15\xd9\x33\xa7\x63\xb2\x76\x5e\xe3\x1a\x23\xac\x1d\xab\x3d\x06\xb0\x76\xb0\x4b\xf0\x02\xea\x92\x5d\x02\x2f\x4f\xdf\x3d\xb5\xbf\xef\x65\xe2\x4d\xf9\xa1\x47\xef\x37\x91\x30\xfa\x70\xed\xa1\x92\xc1\xc6\x79\xdf\x63\x84\x1d\x12\xc1\x37\x95\x53\xf6\xdb\x6e\x99\xa0\xc7\x20\x96\xa4\x7d\x7a\x66\x65\xa3\x4b\x59\xa0\xb3\x97\x3b\xcc\x82\x1b\x92\x6a\x35\xcc\x2a\x3e\x22\xc5\x6a\x6c\xa5\xcc\xbb\x4d\xad\xba\xd3\xb4\xaa\x2f\xa7\xa0\xe5\x03\xbb\xff\xbe\x80\x6a\x4c\x9f\x89\xbb\x2f\x94\x63\x6a\x6a\x0f\x55\x8e\xe9\xce\xdd\x79\x5f\x5c\x55\xa6\x7b\x75\xdf\xdd\x8f\xeb\xee\x0b\xab\xca\xf4\x20\xae\xba\xcf\xbc\x3e\xd3\xdd\xb9\xe8\x42\xf1\xa3\x87\xa9\x2f\x39\xd4\x0d\x37\x9e\xaa\x1e\xd4\xfd\xf6\xa0\xae\xb7\x87\x77\xbb\x8d\x92\x55\x6e\xea\x6e\x1b\x4c\x26\x37\x75\xb3\x8d\x09\xd9\x1f\x87\xcf\xf7\x97\xa2\x74\xcf\x31\xfa\x9f\x47\x6a\xd2\x03\x05\xe6\x3f\x54\x50\xfe\xdd\x06\xe4\x3f\x40\x2a\xd2\xbd\xa4\x21\x0d\x3d\xf6\x07\x1d\xf6\x37\xe3\x5d\x63\x4e\xe4\x91\x29\x47\x23\xf9\xd7\x7d\xa6\x1a\xfd\x0e\x58\xd8\xa8\x14\xa3\xc0\xc5\x1e\x88\x8b\xdd\x5e\x4a\xd1\x7d\xa5\x13\xfd\xce\x78\xd9\xc8\xd4\xa1\x5b\xb3\x6e\xdf\x4d\xca\xd0\x7d\xa7\x0b\xdd\x41\xaa\xd0\x43\xa4\x09\xdd\x41\x8a\x50\xf0\x09\xf4\x6c\xc1\x27\xd0\xb7\x05\x9f\x40\x53\x0b\x3e\x81\xcd\x16\x7c\x02\xc1\x27\x10\x7c\x02\xc1\x27\xb0\x3d\x60\xf0\x09\x04\x9f\x40\xbf\x16\x7c\x02\xf7\xe3\x13\x18\x9a\x76\x33\x0e\x97\x1f\x26\xdd\xe6\x7e\x53\x6d\x6e\x3f\xcd\xe6\x01\x53\x6c\x7e\x67\x06\x97\xc1\xe9\x34\xe3\xd0\xfc\x73\x49\xa3\xf9\x3c\x52\x68\x1e\x3c\x7d\xe6\xa6\xa9\x33\xb7\x93\x36\x33\x00\xdb\x47\xe2\x79\x26\xe2\x23\xae\xd9\x4d\x2f\x3e\xaa\x22\x60\xd3\xed\x47\xf4\x52\xb0\x98\x64\xb9\x76\x17\xae\x84\x1b\x90\x3a\x71\xe0\x7e\x6e\x40\xaa\x6d\x5e\xb8\x06\xa9\xad\x7d\x36\xd7\x20\x35\xed\xd9\x3d\xde\x85\xa4\xf2\xb9\x96\x34\xd2\x83\x2e\x44\xf2\x0e\xc7\x70\x25\xd2\x56\x0b\x57\x22\x85\x2b\x91\xc2\x95\x48\xe1\x4a\xa4\x50\xca\x2f\x94\xf2\xab\xb6\xcf\xc6\x8f\x47\x42\x29\xbf\x81\x9f\x86\x52\x7e\x5d\x2d\x94\xf2\x0b\xa5\xfc\x9a\x46\x0f\xa5\xfc\x42\x29\xbf\x61\x03\x87\x52\x7e\x24\x94\xf2\x0b\xa5\xfc\xbe\xe0\x52\x7e\xe1\x4a\xa4\x2f\xe2\x5e\x90\x70\x29\xc8\x80\xb1\x3f\xaf\x4b\x41\xc2\x95\x48\xad\x83\x84\x2b\x91\x02\xeb\x0b\x57\x22\xfd\x6e\xb9\x5f\xb8\x12\xa9\xc7\x20\xe1\x4a\xa4\x70\x25\x52\x6b\x0b\x57\x22\x05\x3f\x0a\x09\x7e\x94\xe0\x47\x19\xfa\x55\xf0\xa3\x34\xb7\xe0\x47\x19\xd2\x82\x1f\xa5\xf7\xe8\xc1\x8f\x12\xfc\x28\xc3\x06\x0e\x7e\x14\x12\xfc\x28\xc1\x8f\xf2\x05\xfb\x51\xc2\x95\x48\xe1\x4a\xa4\x70\x25\x52\x31\x72\xb8\x12\x29\x5c\x89\x84\x2d\x5c\x89\xd4\x63\x84\x70\x25\xd2\x97\x7a\x25\x52\x2d\x2d\xe8\xcb\xbd\x17\x69\xf8\x32\xc2\xe5\x48\xe1\x72\xa4\x86\x16\x2e\x47\x0a\x97\x23\xed\x6a\xe1\x72\xa4\x70\x39\x52\x4b\x0b\x85\x10\x7b\xb6\x50\x08\xb1\x6f\x0b\x85\x10\x9b\x5a\x28\x84\xb8\xd9\x42\x21\xc4\x50\x08\x31\x14\x42\x0c\x85\x10\xb7\x07\x0c\x85\x10\x43\x21\xc4\x7e\xed\xe1\x1d\x70\xff\x7f\x14\x42\x0c\x97\x23\x7d\x96\x37\x8b\x84\x6b\x45\x3a\xda\xe7\x73\xad\x48\xb8\x1c\xa9\xd6\x79\xb8\x1c\x29\xb0\xb0\x70\x39\xd2\x17\xc7\xc5\xc2\xe5\x48\x3b\x3a\x0f\x97\x23\x85\xcb\x91\xc2\xe5\x48\xc1\x27\xd0\xd9\x82\x4f\x20\xf8\x04\xaa\x2d\xf8\x04\x36\x5b\xf0\x09\x04\x9f\x40\xf0\x09\x04\x9f\xc0\xf6\x80\xc1\x27\x10\x7c\x02\xfd\x5a\xf0\x09\x84\xcb\x91\xc2\xe5\x48\xe1\x72\x24\x6c\xe1\x72\xa4\x70\x39\x52\xb8\x1c\x69\xe7\xc7\x70\x8d\x97\x9b\x1c\x0b\xae\x81\x37\xe6\xdc\xf4\x45\xe7\x97\xb5\xde\xcc\xe9\xba\x60\xcb\x5c\x3a\xbd\x7f\xf9\xfe\xf4\x98\x44\x54\xd3\x44\x2c\xc9\xa9\x88\xad\x69\x19\xbf\x28\x7e\x4e\x41\xd3\x98\x6a\x5a\xde\xa0\x92\x49\x71\xc9\x62\x64\xaa\x31\x5c\x13\x96\xd2\x25\x18\xe6\xd5\x38\x89\x5c\x01\xa1\xe4\x0a\x92\x64\x7a\xc1\xc5\x15\x27\x97\x20\x55\x85\x5d\x7f\x12\x59\xfa\x89\x28\x90\x97\xf6\x82\x21\xb8\xce\x0c\xa2\x31\x6d\xcf\x7d\x3f\x93\xea\x70\x65\x90\xfa\xb1\x7d\x7a\x86\x41\xbd\x6d\x77\xf5\x14\x6b\xc7\x65\x9a\x39\x3d\x35\x82\xfd\x53\x43\xd4\xb9\xf2\x11\xf5\x0b\x96\xc0\x74\x4e\x15\xc4\x7e\x5c\x65\x68\x4d\xc8\xd8\xce\x2d\xd7\x2c\x61\xbf\x82\x3b\x4d\x80\xea\x5c\x36\xe6\x49\xf4\x10\x38\xba\x0d\x21\x53\x3f\x8f\x17\xac\xc9\x88\xd1\xc7\x60\x11\xd1\x68\x05\x2f\x58\xab\x0a\x5f\x43\xaa\x63\xf7\x81\x37\x49\xec\x89\xcc\xca\x41\xfb\x24\x66\x12\x99\xd0\x9a\x28\x2d\xa4\x87\x5c\x26\x61\x1a\xd1\x24\xca\x13\x64\x39\x47\xa7\x27\x76\xd0\xee\x5b\xb3\x3a\x48\xa9\x5c\xff\x80\xc9\xfb\x4f\xfc\xf4\x77\xcf\x79\x7b\xb7\x51\x00\x45\x7b\xe4\x4d\xa6\x9d\x42\x2a\xe4\xfa\x9c\xca\x25\xdc\x98\x84\xdf\x54\xfa\xda\x24\xe0\x3f\xbc\x7a\xf7\xe6\xe5\x9b\xd7\x27\x6f\x4e\xce\x1d\x5f\xf6\xce\xb0\x4d\xd2\x76\x6a\xab\xb5\x30\x8a\x85\x76\x53\x24\x09\x4b\x99\x2e\xbe\xb2\x34\xd8\xac\x32\x5b\xbe\x8d\x09\x74\x39\xd7\x2c\x05\xeb\xf9\xa2\x5a\x1b\x91\xc6\xd0\x47\x0a\xa0\xf1\x9a\xae\x94\x5e\x80\x61\xae\x64\x99\x53\x49\xb9\x06\x7f\x14\x30\x6d\x3f\x8a\x05\x51\xc2\x29\xf2\x4c\x95\x5e\x32\x05\xda\xa6\x0d\x9d\x8a\x66\x96\x82\x3d\xac\xe8\xa5\xbd\x40\x69\x21\x0c\xff\x36\x9b\x9a\x8a\x98\x2d\x58\x64\x2d\x43\x24\xa5\x71\x91\xea\xe2\x14\x0b\x90\xc5\xf1\x57\x2e\xb8\x8d\xfa\x36\xc1\x0c\xfc\x92\x49\xc1\x51\x61\xba\xa4\x92\xd1\x79\x02\x85\xff\x4f\x81\xb6\xe3\x95\x0b\xe2\x64\xbe\xd6\xd0\xcc\x96\xec\x08\x6e\x37\xdc\x05\x5c\xcd\xfd\x3d\x6a\xec\xe7\xbc\xcc\x49\x2b\x85\x15\xf3\x3d\x73\xc9\x0a\x31\x28\xe6\x98\x9f\x84\x38\x8f\x3c\xe8\x84\xce\x24\xb3\xda\x1f\x2d\x30\xc6\x31\x63\xaa\x48\x9a\x9b\x93\xda\x48\x41\x4a\xb1\x79\x02\x13\x23\xeb\xb0\xe6\x64\x9a\xb2\x8f\x39\x18\x28\x63\x4f\x28\x81\x5c\x82\xc1\x37\x83\xc7\x56\xd4\x05\x30\x82\x90\xc0\x4b\xb0\xa8\x15\x67\xbc\xcb\xd4\x9c\xc7\x91\x73\x98\x9f\x2c\xc8\x5a\xe4\xb2\xc6\xfe\x57\xd4\xe0\x31\x52\x6f\xe3\x44\x5c\x02\x1c\xf2\xa0\x09\x89\xc1\x28\x0e\x8c\x9b\x93\x68\x29\x44\x6c\xf4\x07\x29\xae\x59\x8a\xa3\x38\x02\x28\x76\x6d\xbe\x26\xb1\xc8\xe7\x49\x81\x26\x86\xe5\xbb\xd3\x2a\xa3\xd1\x85\x99\x03\x76\xdc\x96\xba\x78\xa0\xd3\xec\x00\xdf\x72\xff\x75\x5f\xaa\xd9\xcf\x4a\xf0\xd2\xe9\x5c\x2c\x6b\xd6\x6b\x77\x99\x22\x73\x50\x7a\x0a\x8b\x85\x90\xfa\x6f\x66\x7f\x73\x8e\x44\xc3\x45\x01\x40\x8f\x40\x18\x60\x80\xd0\xc6\x14\x94\x3a\xd5\x0b\xb9\x83\x81\x54\x50\xaf\x89\x05\x66\x86\xde\x25\x3f\x24\xff\x67\xef\xdf\x7f\xfc\x6d\xba\xff\xdd\xde\xde\x87\x67\xd3\xbf\x7e\xfc\xe3\xde\xbf\x67\xf8\x8f\xa7\xfb\xdf\xed\xff\xe6\xff\xf8\xe3\xfe\xfe\xde\xde\x87\x1f\xde\xbc\x3a\x3f\x7d\xf9\x91\xed\xff\xf6\x81\xe7\xe9\x85\xfd\xeb\xb7\xbd\x0f\xf0\xf2\x63\xcf\x4e\xf6\xf7\xbf\xfb\x43\xc3\x84\x28\x5f\xbf\x5b\xb4\x12\x71\xaf\xec\xdd\x69\x9f\xf3\xa8\x26\xd2\x31\xae\xa7\x42\x4e\xed\x07\x87\x44\xcb\x7c\xb7\x28\x6b\xe4\xde\x2e\xd7\x70\xdf\xf3\xe0\x6d\xa5\xaf\x0d\x8f\x91\xbb\xc2\xce\x99\x2b\xcd\x6c\x0a\xce\x9e\x59\xe9\x6e\x61\xb6\xdd\x8b\xfd\xcd\x47\xdc\xd9\x8e\x1e\x51\x9e\x77\x5f\x3e\x51\x3e\xf2\x61\xa3\xff\x8d\x24\x5c\xcb\xf1\xdb\xc6\xea\x21\x23\x0d\x33\xc1\x74\x6e\x61\x26\x99\x90\x4c\xaf\x8f\x13\xaa\xd4\x5b\x9a\xc2\x4d\x37\xe4\x64\x51\xaa\x61\x13\x43\xcf\xe6\xfc\x71\x07\xb4\x0b\x45\x71\x43\x36\x03\xfc\x64\x81\x7a\x48\xa5\x1f\x0f\x54\xff\x6d\x41\x98\x9e\xc4\x85\x24\xbf\x82\x14\xee\x32\x43\x09\x56\x97\x69\x1c\xc1\x7d\xd6\xbe\x0f\x2d\x60\x53\x10\xe5\x08\x36\x23\x1f\x5d\x1b\x8d\x62\xc1\x96\x37\x05\xdd\xd9\xae\x4e\x49\x44\xb9\x59\x28\xde\xd2\xb9\x20\x9f\x12\x58\xd2\x68\xfd\xc9\x2c\xf8\x93\x04\x33\x45\xa3\x03\x7e\xb2\xca\x41\x4d\xfc\x77\x51\x3f\x4c\x11\x60\x78\x71\x2b\xe3\x3f\x5b\x85\xd1\x6b\xdf\x8d\x33\x91\x58\x7f\x20\x13\xf1\xcc\xec\xc1\x6c\x63\xb5\xc8\x42\x8b\x87\x85\x28\xf1\xe1\xe9\xc7\xad\x37\x9d\x35\x53\x0b\xab\x54\x56\x89\x43\xe6\xc8\xf5\xdb\xe4\x1a\x0f\x10\x72\x14\xa7\x0c\x4d\xb0\x64\xef\xf4\xec\x68\xbf\xb6\x72\x23\xe5\xd8\x73\x38\x16\xe0\xe3\x6e\xcc\x40\xaa\x34\xa6\xe2\x19\x8a\x29\x8e\x96\x84\x31\xc7\xd1\xcf\xc5\x00\x18\xed\xab\x2d\x69\xbd\x7e\xb2\x67\x47\xe4\x93\x91\x90\x13\xc6\xc1\xee\x41\x26\xd9\x25\x4b\x60\x69\x66\x52\x09\x64\xf0\x2e\x99\xdd\x7b\xca\x94\x39\xa5\xea\xe8\x9d\x62\x8e\xae\x45\xeb\x16\xbc\x75\x07\xb7\x8b\x29\xa9\x58\xf7\x9e\x28\x9c\x9e\x97\x89\x4b\x79\xa1\xf6\x16\xa2\x03\x5f\x08\x19\x99\xd3\x7c\x07\x1c\xb5\x4b\x62\x37\xa0\x69\x17\x38\xd1\xfc\x53\x68\x91\x54\x19\xda\xab\x75\x78\x45\x2b\x95\x02\x66\xe4\x9d\x41\xc2\x2b\xa6\x60\x52\x48\xbd\x3b\xbb\xf0\x18\x7e\x45\x9b\xe5\xc4\x4a\xb7\x67\xf8\xcf\xb5\xf5\x36\x39\x73\x0c\xa2\x3b\xca\x51\x4d\xf4\x42\x24\x28\xc3\x37\x18\xb7\x5f\xb1\xd8\x8a\x3e\x20\xa5\x90\x33\x9b\xca\x6f\xf5\x60\x91\xc4\x2d\xa7\x64\xa1\x8e\x1b\x91\x05\x8d\x4d\x16\xbf\x38\x72\x30\x87\x36\xbb\xc1\xdc\x80\x1b\x75\x79\x55\x8b\x62\x09\x2d\x02\xd1\x1b\x81\xf9\xff\xb6\xc8\x86\x59\x06\x9d\x8b\x5c\x5b\x7c\xb0\xec\x63\x21\x72\x1e\x13\xc3\x19\x0f\xc9\x4a\xeb\x4c\x1d\x1e\x1c\x94\x47\xf7\x8c\x89\x83\x58\x44\xea\x20\x12\x3c\x82\x4c\xab\x03\x4f\xc8\x07\x99\x88\xa7\xfe\x8f\x29\xf5\x74\x78\x30\x96\x71\x12\x02\x3c\x6f\xb9\xcd\x73\x4a\xec\x6a\x5b\x5e\x28\x81\xb9\xf3\x25\x2d\x12\x17\x31\xd9\x78\x2e\xd6\xef\x78\x2d\xdf\x2f\xee\xa0\x2d\x04\xff\x0a\x23\x7d\xa2\xaa\x5d\xb7\x9f\x1c\x6d\x96\xe5\x0e\x5b\x72\x7f\xd3\xec\xb9\xe7\xa5\x46\x1a\x2e\x57\x81\x52\x90\xd6\x14\xaf\xa7\x35\xea\x92\x7d\x62\xd8\x20\x5f\x13\xc3\xaa\xb5\xbb\x32\xd9\x9a\x24\xdb\x34\xfb\x95\x91\x9b\xb0\x86\xc5\x37\x85\xdb\x6d\x02\x8b\x05\x44\xfa\xdb\x8a\x99\xa8\xa8\xc2\x50\xb8\xb5\xbe\xf1\xff\xfa\xb6\xf9\x94\xef\xe5\x81\xea\x17\x7e\x62\xa7\xd4\x6e\xfb\x1e\x66\xf3\x7e\x89\x3d\x6e\xc8\x2f\x16\x78\x76\x30\x54\xef\xd1\x37\xed\x0c\xa9\xd6\x2b\xe1\xe4\xc2\x24\xa9\xbd\xdc\x19\x80\x81\xfc\xa6\x72\x20\x38\x13\x6c\xe9\x0d\x04\xf2\x56\xb8\x72\x36\x30\x21\xa7\x78\x65\x70\xf9\x0b\x9e\xc8\x6f\x85\x2d\x6c\xd3\x51\xa9\xa4\xa7\xc1\xb6\x33\x7e\x67\x18\x3c\x7f\x28\xc3\x79\x2c\x60\x6a\xe1\x3c\x25\x61\x55\xfd\x60\xad\x80\xbd\x80\x75\x27\x54\xdd\xe1\xe7\x42\x89\xd0\xcf\x34\x29\x71\xd4\x6b\x06\x36\x52\xe2\x6f\xae\xfa\x81\x48\xe7\x8c\xdb\xa9\xd8\x81\xfd\x3e\xe3\xd8\x7e\x3f\x78\x8c\x7f\x76\x4f\xa2\x27\xb4\xfb\xc5\x14\x0d\x03\xf9\xbb\x01\xf1\x42\x85\xe7\xb9\x0b\xa4\xbb\xe2\x82\x2a\xc1\x40\x2f\x7f\xc9\x69\x32\x23\x2f\xac\x78\x8d\xc0\xb3\x3f\x75\x91\x9b\xed\x62\xcb\x1f\x7f\xc5\x92\x38\xa2\x32\x46\xcd\xca\xb2\x1f\xa2\x84\x45\x1c\xea\xa5\xb7\x8e\xbe\x3d\x03\x2c\x91\xc7\x5e\xe6\x4d\x32\x2a\x35\x8b\xf2\x84\x4a\xc3\xf0\x61\x29\x64\x47\x3c\x7a\xcf\xcd\x2c\xb1\xf9\x0c\x22\xc1\xe3\x0e\xcf\xe1\xb0\x5d\x3d\xdf\xec\xbc\xba\xbd\x28\xb7\x81\x64\xae\xa2\x0a\x4b\x61\x93\xbc\xf6\x6a\x5a\x71\xc7\x58\x62\xe1\x99\x5d\xc1\x5b\x26\x56\xb8\x32\x62\x5c\xb5\xf0\x13\x53\x3e\xda\x7f\xbf\x72\xe0\x14\xd4\x3e\x23\xff\x58\x7b\x9d\xab\x2b\x04\x89\x69\xef\x87\x42\x33\x8e\x9b\xaf\x23\x45\xb7\x93\x25\x1b\x59\x08\x09\x97\x20\xc9\x5e\x2c\xf0\x1b\x2c\xe0\xb4\x3f\x23\xff\x32\xca\x60\x9b\x1b\xc6\x36\x0e\x4b\x5b\x02\xc8\x11\x76\x91\x84\x21\x01\xed\xf6\x54\x91\x67\x64\xcf\x56\x85\x62\x69\x0a\x31\xa3\x1a\x92\xf5\xbe\x97\xbe\xad\x59\xad\x0f\xd6\xf4\x29\x96\x56\x29\x92\xf6\xf5\x9f\x5b\xde\xc4\xc9\xde\x26\x52\xfd\xe4\xcd\xcd\x25\x60\xad\x24\xbd\x81\x3d\x85\x17\xb3\x33\x48\xa1\x31\x22\x6d\x52\xf2\x9a\x8a\xa8\xeb\x79\x73\x81\x5b\x3f\x1b\x04\xa5\x44\xc2\x12\xe9\xd3\xd2\xdc\x0d\xa8\x93\x45\xbb\xcb\xbd\x75\x08\x21\xed\x1e\xa9\x29\x31\xba\xe0\xd7\x7f\x8e\xa9\xa6\x0d\x2f\x58\x94\x59\x67\xbb\x48\xad\x4b\xb6\x29\x3b\x6f\xda\xeb\x1e\xae\x17\x37\xfc\xa8\x1e\x50\xa9\xd9\xf5\x65\x1f\xec\x3a\x41\xdb\xb4\x8d\x95\xf4\x68\x30\x95\xb0\x64\x4a\xcb\x75\xc5\x01\xe1\x5c\x98\x82\x30\xae\x34\xe5\x9a\x21\xab\x26\xfe\xcd\xa9\x33\xbe\x5f\x31\xdd\x10\x06\xf8\xce\xe8\xee\x68\xda\xc5\x4c\x1c\x6b\xfc\x38\x5f\x67\x40\xfe\x5e\xf9\xe3\x95\xcc\xa2\xdd\xdf\x9f\x2c\x88\x63\xa0\x16\x37\x69\x1c\x4b\x50\xdb\x9c\x6d\xd7\xd7\xad\xe0\xf3\xc6\xaa\xb1\x10\x3c\xf5\xc6\x2e\x57\x23\x50\x29\xb6\x34\x4a\x8a\xaf\x0f\xe9\x7d\x39\x35\x65\xc5\xfc\xea\x06\xb6\x9e\x59\x48\x8b\x13\x93\x69\xaf\x0e\x46\x82\xab\x3c\x2d\xad\x08\x31\x64\xc0\x63\xe0\xd1\x1a\x4b\x42\x25\x97\xd0\x10\xc6\xf3\xa3\x6a\x40\x09\x42\xfe\x17\x5b\x1a\xb5\xdb\x4d\xae\x2a\x39\x7b\xef\xf4\xc6\x4c\x99\x32\x80\x5f\x80\x34\xca\x3f\x66\xee\x18\xa1\xd7\xf7\x50\xf1\x42\xba\x1a\x55\x3e\xa8\x74\x73\xb2\x58\x28\x70\xf7\x74\xcf\x8b\xea\x96\xde\x5f\xe1\x61\x6a\x39\x90\x01\xc7\x52\x58\x6f\x7e\x26\x14\xf3\xe5\xe0\x8a\x73\xa1\x56\x21\x53\x2c\x6c\xfd\xca\xe6\xb1\xea\x59\x6e\x18\x88\xbd\xb1\x68\xb4\xbd\xe5\xdc\x6e\x26\x54\x2d\x9a\x9e\x17\x36\xd4\xe0\x3c\xdf\xde\xea\x22\x8a\x06\x53\xe3\xea\x4b\x2b\xcf\x32\x49\xf9\x05\xc4\x24\x81\x6b\x16\x89\xa5\xa4\xd9\x8a\x45\x58\xec\xd0\xba\x7a\x8d\xc6\xa8\x6d\x08\x55\x33\x86\x37\x9d\x5e\x59\x3e\x4f\x98\x5a\xed\x76\x1a\xb6\x12\x87\x82\x48\x82\xde\xc9\xf9\xfa\xd0\xc6\x99\xfd\xbc\x14\x7e\x7c\xc0\xbb\xeb\xd7\xe5\x8b\x58\x6c\xf7\x89\xa5\x34\x8a\x0c\x61\x7b\x07\x28\x38\x49\xb0\x42\x44\x0d\x1c\x42\x7b\x3f\x93\xe9\xe5\x02\x20\xb3\xf8\x8c\x81\x6a\x2a\x45\xdb\xa2\x62\x3c\x02\x2c\xde\xe8\x8a\x70\x02\x78\x1f\x80\x96\x0c\xac\x04\x0b\xe8\xf5\xf3\xbb\x08\x5c\xef\x96\x38\xdb\x8d\x08\x2d\x06\x84\x76\x88\x17\xbc\xb0\x13\xe8\x15\x1e\xea\x85\x02\xf3\x6f\x03\x5e\x7c\x32\x74\xb3\x6d\xad\xce\x33\x1b\x0a\x3e\x9a\x1f\xfe\x58\xeb\xc5\xc5\x70\x29\xb2\x12\x57\x6e\x80\x4d\x8e\xe1\xac\x72\x1e\x0d\x62\xa6\x22\xc3\x66\x1a\x0c\x47\xc7\x82\x2b\x5f\x9b\x93\x72\x5b\x4e\xf3\x92\x26\x2e\x41\xd6\x0d\x96\x89\x04\xfd\xa0\x71\xee\xf5\x55\x9b\x7a\x04\xe9\x1c\xe2\x18\x62\x1f\xef\xbe\x26\x0d\x87\x7e\x87\xc0\xd1\x25\x13\xf8\x63\xf1\x54\x24\x49\xfb\x99\xde\x6a\x58\xe9\x63\x56\xf1\x00\xe8\x1d\x67\xd2\x21\x66\x9e\x78\x80\x32\x55\x50\x64\xe9\x88\x46\x24\x33\x0a\x4b\x01\xf7\x39\xe8\x2b\x00\x4e\xa2\x15\x44\x17\xaa\x8c\xb1\xd3\x86\x0e\x37\x36\xda\xc5\x50\xb5\x0b\x88\x55\x0e\x5a\x08\xa6\x66\x43\x5d\x92\x3b\x10\x66\xd4\x42\x0e\x57\x9b\x31\x59\xdb\x07\x17\xbd\xa4\x2c\xa1\xf3\xa4\x43\x61\x3e\x59\x94\x6f\x4e\xaa\xf3\x67\x5e\x3a\xca\xf2\x24\x71\x5e\x69\x8c\x52\xd1\x92\x2e\x16\x2c\xc2\x20\x45\x8c\xd2\x29\xa3\x7a\x77\x2e\x7d\x54\x64\x8e\xd2\x54\xe7\x5b\x5b\xdf\x82\x37\x6d\xf8\x62\xb4\x50\xd6\x68\x6f\xed\x83\x21\xef\xeb\x1a\xac\x99\x1d\x58\x15\xbd\xe6\xd0\x9a\x91\xb7\x42\xbb\x68\xb7\x37\xa0\x94\x8b\xb4\x23\xef\x81\x2a\xc1\x2b\x47\x01\x6a\x1e\x92\x2d\x19\xa7\xbb\xab\x14\xd8\xf5\x57\x2d\xe6\x85\xa2\x49\xd7\x58\xbc\x98\x2d\x25\xd5\x05\x07\x2f\x97\xe8\x0e\x4d\x27\x16\x2c\x72\x8c\x78\x23\x47\x7c\x8d\x68\xe3\x42\xe0\x76\xdb\x54\x19\xd7\x52\xc4\x79\x04\xae\x4c\x73\xae\xaa\x1d\xdf\xea\x39\x50\x0f\xff\xf2\x63\x94\xe9\x04\x31\x68\xca\x9c\xbf\x5a\x70\x20\x54\x65\x46\xcb\xf7\xd8\x9e\x4b\x89\x27\xaa\xdf\x07\x3c\xec\x8e\x4e\x4f\xc8\x7b\x68\x43\xba\x4e\xbe\xd3\x15\xdf\x37\x25\x09\x55\xfa\x5c\x52\xae\x70\xc2\xe7\x2c\x6d\x32\x51\x18\xcd\x0a\x31\xa0\xf1\xb9\x44\xac\x68\x7c\x6c\x51\xa0\xf1\x71\x03\xf7\xee\xc3\x39\xb7\xd7\x70\x1b\xd6\xfe\xed\x5e\xcb\xf4\x48\x23\x97\x78\x5b\x4f\x81\x51\x86\x93\xb8\xb7\xc1\x95\xb2\x36\x5b\xed\x50\x1f\x73\x5d\x50\xdd\x6e\x63\x20\x18\x68\x53\x6a\xe9\x57\xde\x37\x98\xf3\x18\x64\x82\x3e\xb7\x72\xbc\x68\x65\x84\xe4\x78\xe6\x94\x7f\x5a\xd8\x71\x30\xcc\xd5\x79\x16\x4b\xa7\x81\x0d\x98\xf3\x3d\x1a\xec\x72\x35\xc4\x6d\x37\xc8\x64\xa3\x08\x32\xdd\xce\x65\x7b\xd9\xe4\xbc\x61\xc5\x08\x09\x53\xdd\x8c\x55\x0e\xa7\x6e\x63\xbf\x5c\x57\x36\x26\x65\x95\xa7\xd4\x30\x28\x1a\x63\x80\x5c\xf1\xcc\xea\x48\x56\xa7\xb1\x14\x69\x1d\x77\xd6\xf1\xe2\xb7\xaf\x73\x87\x1c\xd3\xa2\x45\xaa\x7d\x87\xb5\xa4\x17\xcc\x52\x7a\xfd\x1a\xf8\x52\xaf\x0e\xc9\x9f\xbe\xfa\x9f\x5f\xff\xa5\xe1\x45\x31\xb7\x31\x6d\xaf\x80\x3b\x2b\xd1\x6d\x40\x6f\xbb\xd7\x4d\x33\xe7\xcc\x87\x62\xcf\x96\xe5\x3b\x85\x43\xa1\xc4\x4a\x74\x42\x83\x76\x7c\x3b\xcf\xda\xc1\xf9\x3d\x26\x13\x28\x4d\x79\x04\x13\x23\x0e\xec\x1c\xc6\xa8\xb2\x96\x47\x26\x6b\xf2\xfc\xab\x09\x86\x78\xe2\xa4\x2c\x75\xcd\x4a\xb6\xfe\xe1\xfa\xe3\x6c\xc7\x62\x98\x22\x7f\x9d\x6c\xcc\x94\x29\x62\xf6\x5e\x2c\x10\x4d\x5b\x26\x89\x6a\x9f\x04\xcb\xb3\xbd\x11\x60\x9b\x67\x43\xb1\x92\x2e\x4c\xe8\xb2\x4d\xf6\xb3\x4b\xa6\x8c\xb3\x34\x4f\x0f\xc9\xb3\x86\x57\x2c\x47\xbe\x0d\xf4\xb0\x3d\x95\xe7\x19\x35\x6c\x79\x29\x69\x9a\x62\xc6\x15\x8b\x81\x6b\xb6\x60\x18\xf3\x52\x90\x18\xea\xf1\xf6\x43\x1f\xa7\x55\x00\x1f\x43\xb8\x0c\x1b\xed\x45\x74\xa7\xf6\x1c\x97\x28\x94\x3a\xaf\x5d\x54\xe5\xbc\xeb\x0c\x2c\x55\x5a\xb5\x81\xc0\x75\x66\x25\xb9\x8a\xff\x28\x05\xca\x19\x5f\xaa\x32\xda\x12\xf9\x5f\x9b\x79\xdc\x7c\x76\xb5\x02\x17\xdd\x00\x55\xef\xa0\x2f\x15\x64\x44\xc9\x32\xc8\x18\x03\xcf\xdb\xd9\xc7\xb6\x2d\xd6\x48\x5d\x29\x24\xc7\x54\x41\x0f\xbb\x6b\x25\x16\xd3\x5f\xab\x50\x24\x07\xdf\x1a\x03\x7a\xfe\xec\xab\x56\xbc\x2b\xde\x6b\x7c\xa9\x8c\xd2\xfc\x70\x34\xfd\x17\x9d\xfe\xfa\x71\xcf\xfd\xe3\xd9\xf4\xaf\xff\x77\x72\xf8\xf1\x69\xe5\xcf\x8f\xcd\xc1\x95\xbb\x25\xe7\xb2\xd5\x70\xd8\x9d\xb5\x5e\xac\xf2\xf8\x31\xf1\xc1\x5c\xe7\x32\x87\x09\xf9\x9e\x26\x0a\x26\xe4\x47\x8e\xe7\xe4\x0d\x81\xd6\x1e\x5d\x61\x24\x9b\xc7\x66\xd4\xc7\xed\xaf\xe0\x94\xda\xdf\x71\xd3\x6d\x53\x41\xfb\x01\xc9\x5b\x16\x2a\x8c\x90\x57\x30\xd0\x66\x77\x2d\x84\x98\xc1\x35\x4d\xb3\x04\x66\x91\x48\x0f\x8a\xe7\xb7\x78\xc8\x3d\xff\xba\x07\xf6\xec\x7d\xb0\x38\xf2\x71\xef\xc3\xd4\xfd\xeb\xa9\xff\x69\xff\xbb\xbd\x7f\xcf\x5a\x9f\xef\x3f\x3d\xc0\xd0\xde\x02\xd5\x3e\x7e\x98\x96\x68\x37\xfb\xf8\x74\xff\xbb\xca\xb3\xfd\x5d\x48\xb8\x9d\x44\x95\xd2\x6c\x7a\xd1\x58\x31\xae\x51\x94\x6d\xca\xc6\x4a\x69\xb6\x4b\xc5\x5b\xb0\xe5\x1b\x9a\xbd\x87\x05\x48\xe0\x51\xb7\x09\xe9\x78\xeb\x13\xb2\x17\x9b\x23\x1c\x73\xf0\xf6\xbd\xf0\x2a\x8b\xa7\xee\x20\x2b\xbe\xf3\xdc\xbd\xb8\xf0\x68\x33\x26\xa7\x16\xe9\x36\x29\x45\xc9\x1d\xca\x7a\xd9\xeb\xed\xbb\x80\x38\x6d\x10\x27\xa7\x65\xd4\xdd\x08\x43\x8f\x39\x8e\xac\xc1\xab\x4d\x83\xe8\x81\xe4\xfd\x64\x5f\xde\x12\xfa\xdb\x39\x48\xb1\xce\xd1\x3d\xf8\x7b\x28\x7e\xb2\x76\x97\xd1\xfd\xe4\xac\x51\xb9\xec\x2b\x5d\xfc\x78\xf2\xc2\xe2\x0c\x32\x26\x94\x28\x57\x22\x89\x15\xc9\x39\xfb\x25\x07\x72\xf2\xa2\xa8\x3e\xc4\x78\x94\xe4\x78\x6f\xcf\x8f\x3f\x9e\xbc\x50\x33\x42\xfe\x01\x11\x35\x7a\xfd\x55\x4b\x08\x27\x96\xda\x7b\xf7\xf6\xf5\xff\x46\x0b\x00\x7e\xe9\xae\xcd\x70\x85\x45\x12\x46\xad\x45\xca\x1e\xbe\xa6\x57\x1b\xdd\x88\x33\x8a\x68\xd6\x6c\x63\x20\xce\x6e\xc7\x6d\x90\xee\x0a\x92\x4c\x61\xf2\x11\x51\xb9\x74\xab\x31\x03\xda\x2c\x08\x4c\x43\x77\x8e\x73\x9f\x4f\x85\xf9\x6a\xa3\xe2\xa2\x23\xc1\x39\x44\x18\x99\x60\x84\xd0\x3e\x1c\xa2\xfa\xfe\xa6\x80\xbf\x53\xa2\xdd\x0c\x70\x2e\xc7\xf4\xfc\xc3\x1b\x48\x6f\x9f\xd0\x0d\x45\xbe\x73\xa2\x3c\xce\x78\x04\x55\x3b\xdf\xe2\x68\xfc\x36\x73\x70\x70\xbb\x73\x96\xb0\xb5\xde\x51\x23\x5a\xa3\x25\x3a\x83\xdf\x77\xd8\xae\xeb\x61\x99\x5b\x96\x8d\x8d\xdc\x56\x34\xa0\x16\xfe\xe4\x15\x55\x64\x0e\xc0\xd1\x9e\x6b\xed\x76\xc0\x1d\xce\x43\x69\x6d\xcd\xb3\xa9\x16\xd3\x06\xfd\xaa\x03\x72\xdd\x50\x6b\x31\x1f\xd4\xd6\x76\x34\xd8\x20\x70\xb5\x5a\xef\x82\x81\x2a\x6f\xed\xf1\xd2\xd3\x60\x2f\x75\xb3\x56\x56\x9b\xb3\x33\xb2\x16\xc7\x36\xfe\xb5\x3d\x25\xa3\x6e\xd7\x0c\x4f\x5a\xa0\x7b\xb1\x46\xcd\x23\xe6\x68\xb7\xf9\x0c\xe4\x25\xeb\x21\x7c\xbc\xaf\xbf\xdf\x8b\xb5\xbc\x7a\x7f\x7a\x8c\xf9\x79\xe6\x03\xef\x9f\x40\xec\xaf\x4a\x15\xb7\xef\xd1\x89\x6c\xa8\xd1\xd1\xdd\x13\x74\x26\xe4\xf8\x41\x32\x29\xb4\x88\x44\x87\xd3\xa9\x35\x65\x06\x41\xdb\x96\x63\x34\xa4\x8f\xa1\xf2\x86\xe5\x63\xb5\xac\x34\xa5\x85\x34\xe4\x5a\xfb\x2d\x9f\x17\x77\x62\x95\xbd\x3b\xad\x8f\xfc\xe7\xbf\x8f\xfe\x5f\x00\x00\x00\xff\xff\xea\x09\x27\x91\x70\x56\x01\x00") func operatorsCoreosCom_catalogsourcesYamlBytes() ([]byte, error) { return bindataRead( @@ -105,7 +105,7 @@ func operatorsCoreosCom_catalogsourcesYaml() (*asset, error) { return a, nil } -var _operatorsCoreosCom_clusterserviceversionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\x23\xb9\x95\x27\x0c\xff\xef\x4f\x81\x90\x7b\x5e\x49\x63\x91\xaa\xb2\xc7\x7e\x3d\xb5\xb3\xe3\xd0\x56\x55\x77\xeb\xe9\x2e\x95\x42\x92\xdb\x8f\xa3\xdd\x6b\x83\x99\x87\x24\x46\x99\x40\x0e\x80\xa4\x8a\xde\xde\xef\xfe\x04\x0e\x80\xbc\xf0\x22\x91\x09\x48\xcc\xaa\x4e\x38\xc2\x5d\x22\x93\xc0\x49\x5c\x0e\xce\xf5\x77\x68\xc1\x7e\x00\xa9\x98\xe0\x6f\x08\x2d\x18\x7c\xd2\xc0\xcd\x5f\x6a\x7c\xff\x47\x35\x66\xe2\x7c\xf1\xfa\x57\xf7\x8c\xa7\x6f\xc8\xdb\x52\x69\x91\xdf\x80\x12\xa5\x4c\xe0\x1d\x4c\x19\x67\x9a\x09\xfe\xab\x1c\x34\x4d\xa9\xa6\x6f\x7e\x45\x08\xe5\x5c\x68\x6a\x3e\x56\xe6\x4f\x42\x12\xc1\xb5\x14\x59\x06\x72\x34\x03\x3e\xbe\x2f\x27\x30\x29\x59\x96\x82\xc4\xce\xfd\xd0\x8b\x57\xe3\xd7\x7f\x1c\xbf\xfa\x15\x21\x9c\xe6\xf0\x86\x24\x59\xa9\x34\x48\x05\x72\xc1\x12\x70\x8f\xa9\xb1\x28\x40\x52\x2d\xa4\x1a\x27\x42\x82\x30\xff\xc9\x7f\xa5\x0a\x48\xcc\x60\x33\x29\xca\xe2\x0d\xd9\xf8\x8c\xed\xd7\xd3\x44\x35\xcc\x84\x64\xfe\x6f\x42\x46\x44\x64\x39\xfe\xdb\xbd\xab\x1d\xfe\xd6\x0e\xef\x26\x08\xbf\xcf\x98\xd2\xdf\x6d\x7f\xe6\x7b\xa6\x34\x3e\x57\x64\xa5\xa4\xd9\xb6\x17\xc1\x47\xd4\x5c\x48\x7d\x55\x93\x65\xc8\x48\xd4\xa2\xf9\x6f\xf7\x20\xe3\xb3\x32\xa3\x72\x4b\x6f\xbf\x22\x44\x25\xa2\x80\x37\x04\x3b\x2b\x68\x02\xe9\xaf\x08\xf1\x63\xd9\xce\x47\x84\xa6\x29\xae\x17\xcd\xae\x25\xe3\x1a\xe4\x5b\x91\x95\x39\xaf\x06\x37\xcf\xa4\xa0\x12\xc9\x0a\x8d\x6b\x72\x37\x07\x9c\x35\x22\xa6\x44\xcf\x81\xbc\xbd\xfd\xa1\x7a\x94\x90\xff\x52\x82\x5f\x53\x3d\x7f\x43\xc6\x66\x01\xc6\x29\x53\x45\x46\x97\x86\x84\xc6\x53\x76\x35\xdf\xd9\xef\x1a\x9f\xeb\xa5\xa1\x57\x69\xc9\xf8\xec\xb1\xf1\xdd\x4b\xec\x46\xc2\xa2\xb1\x4e\xcd\xe1\x7f\x58\xfb\x7c\xd7\xe1\x25\x64\x40\x95\x9b\x01\xa6\xf6\x23\xc7\xfd\x78\x8d\x9c\x9b\xb5\xcf\x77\x25\xc7\xaf\x06\x35\x23\x13\x3d\xa7\xda\x92\x25\xb8\x21\xb5\xc8\x68\x02\xea\x51\x82\xd6\x1e\xf1\x14\xad\x7d\xb1\x85\xa4\x66\x97\x9a\xea\x52\x8d\x8b\xf9\xa6\x77\xbc\x9e\x3f\xf9\x86\xf6\xc1\xc5\x6b\x9a\x15\x73\xfa\xda\x7d\xa8\x92\x39\xe4\xb4\xde\x92\xa2\x00\x7e\x71\x7d\xf9\xc3\xef\x6e\x57\xbe\x20\xed\xd9\xd9\x78\x18\x09\x53\x66\xaa\x90\x6f\x11\xcf\xb8\x70\xed\x96\x05\x90\x7f\x6c\xfc\xcd\x6d\x01\xc9\x3f\xc6\x6b\x94\x8b\xc9\x7f\x41\xa2\x1b\x1f\x4b\xf8\xef\x92\x49\x48\x9b\x14\x99\x09\xf2\xcc\x70\xe5\x63\x33\xff\x8d\x8f\x0a\x69\xb8\x94\x6e\x70\x20\xdb\x1a\xdc\xb8\xf5\xf9\xca\xdb\xfe\x3c\x5a\xf9\x96\x10\x33\x49\xee\xad\x53\xc3\x9a\x41\xe1\x0e\x75\x1b\x16\x52\x37\xb3\xd5\x4e\x96\x50\x48\x50\xc0\x2d\xb3\xc6\x4d\xc5\xdd\x5b\x8e\xd7\x3a\x37\x53\x04\x52\x19\x8e\x55\x66\xa9\xe1\xe9\x0b\x90\x9a\x48\x48\xc4\x8c\xb3\x7f\x56\xbd\x2b\xa2\x05\x0e\x9b\x51\x0d\x4a\x13\x64\x33\x9c\x66\x64\x41\xb3\x12\xce\x08\xe5\xe9\x5a\xdf\x39\x5d\x12\x09\x66\x5c\x52\xf2\x46\x8f\xf8\x13\xb5\x4e\xcb\x07\x21\x81\x30\x3e\x15\x6f\xc8\x5c\xeb\x42\xbd\x39\x3f\x9f\x31\xed\x6f\xab\x44\xe4\x79\xc9\x99\x5e\x9e\xe3\xc5\xc3\x26\xa5\xb9\x09\xce\x53\x58\x40\x76\xae\xd8\x6c\x44\x65\x32\x67\x1a\x12\x5d\x4a\x38\xa7\x05\x1b\xe1\xcb\x70\xbc\xb1\xc6\x79\xfa\x6b\xe9\xb6\x89\x5a\x19\x78\xe3\x79\x20\xfe\xc2\xd8\x73\xb1\xcc\x05\x62\x37\xa7\xed\xd0\xbe\x6c\xbd\x26\xe6\x23\x33\x8d\x37\xef\x6f\xef\x88\xa7\xc8\x1d\x75\x5c\xa2\xfa\xd1\x0d\x33\xe4\x57\xcb\xcc\x2c\xe3\x53\x90\xf6\x97\x53\x29\x72\xec\x15\x78\x5a\x08\xc6\x35\xfe\x91\x64\x0c\xb8\x26\xaa\x9c\xe4\x4c\x2b\xdc\xd6\xa0\xb4\x59\xc8\xf5\x8e\xdf\xe2\xed\x4e\x26\x40\xca\x22\xa5\x1a\xd2\xf5\x47\x2e\x39\x79\x4b\x73\xc8\xde\x52\x05\x2f\xbe\x76\x66\x8d\xd4\xc8\x2c\xc8\xce\xab\xd7\x94\x5d\xd6\x7f\xb0\x76\xea\x09\xf1\xc2\xc6\x3e\xcb\xbd\x95\xd1\x90\x14\x92\x8c\x4a\x2b\x2f\x11\x0d\x59\x46\x3e\x7e\xff\x81\xcc\xc5\x83\x39\x48\x8c\x2b\x4d\xb3\x0c\x0f\xa6\x93\x69\xd6\xba\xc6\x3b\x20\xa1\x9c\xe4\x94\xd3\x19\x10\x5a\x14\x8a\x4c\x85\x24\x94\xcc\xd8\x02\xb8\x67\x00\xab\x6b\xb1\xf5\xfd\xb6\x71\x36\x62\x6f\xa4\x8d\x97\xbc\xff\xd6\x11\xbc\xf2\xcd\x36\x5e\x67\xda\x9a\xb8\xb8\xdf\xc4\x9a\x76\x51\x77\x81\x47\x8a\x93\x92\x2b\x2d\x4b\xdc\x25\x29\xb9\x87\xa5\x3b\x5d\x39\x2d\x88\xd2\xc2\x7c\xf8\xc0\xf4\x9c\xd0\xe6\xc9\xa2\x1a\x8f\xcb\x64\xfd\xb5\x4c\x53\xa0\xc9\x64\x49\x8c\x70\x8c\xec\x4c\x0b\x91\x21\xaf\xc3\xfe\x0c\x5b\x23\x12\xb4\x64\xb0\x00\x42\xe5\x84\x69\x49\xe5\xb2\xda\x5b\xeb\xe7\xe0\xd1\xf9\xc7\x79\x69\xc8\x6a\xdb\x67\x8f\x3c\xb6\xb3\x89\xbd\x4e\x9c\xa8\x98\x56\xe2\x7a\xf7\x89\xbe\xbe\x74\x3b\xb8\x96\xfd\x95\xdb\xc1\xa0\x88\xd9\xa9\x4e\x2c\xaa\x94\x08\x24\xc0\x6d\xcd\x94\x08\x59\xed\x2d\x32\x59\x6e\x1c\xa3\xb1\xd5\xc9\x04\x0c\x1b\x94\x94\x9b\xa9\xdf\x78\x84\x3a\x4c\xec\x63\x9b\xd1\x34\xf1\xc0\x37\xed\xfc\x66\xdf\x54\x4a\xba\x99\x7a\x42\x98\x86\x7c\x4b\xcf\x64\x75\x9a\x9b\xf3\x59\x7d\x6c\x08\x5c\xb0\x14\xcc\xc4\x6a\xca\xec\x2e\x33\x3c\x81\x4e\x44\xa9\xed\x7c\xba\x47\x52\xb2\x60\x94\xd0\xd9\x4c\xc2\x0c\xf7\xff\xd6\x61\x9f\x98\x13\xdb\xb6\x1f\xfb\xba\x8d\xac\x8e\xf5\xe8\x13\x86\xfd\x3e\xfa\x00\xdf\xc4\x3c\x9a\x0f\xac\x8b\xf1\xed\xf6\xd4\x1a\xda\x46\x13\x33\x27\x7e\x6a\x85\x7c\xf4\xe1\x5d\xd6\xd6\xb6\x27\x56\xd8\xb6\xf6\x3a\xaf\x10\xe2\xbe\x9d\x98\x33\x53\x5f\x00\x86\x73\xe0\x83\x35\x4b\x9f\x00\x29\x40\x4e\x85\xcc\xcd\xe1\xe1\x84\x92\xc4\x8a\xb2\x15\xdf\x42\x86\xcb\x93\xc7\xa6\x93\xec\xba\xfe\xb6\xed\xb2\x0b\x6c\x1b\x91\x82\xea\xf9\x13\x8f\xed\xb6\x54\xb6\x35\x27\xed\xc9\x87\x9f\x60\x7c\x6b\x7d\xd7\xf7\x56\xf4\xbe\xcd\x34\x44\xef\x14\xaf\xac\x5d\x7a\xdd\x85\x73\xaf\xb6\x1b\xfa\xf0\x01\x94\x32\xf2\x02\x0a\xa1\x92\x3e\x10\xe0\x89\x30\x3c\xe5\xff\xb9\xfd\x78\x65\x47\xdf\xc4\x5d\xd7\xdb\xa5\x26\x2c\x2f\x32\xc8\x8d\x2c\x4a\x7e\xfc\x40\xa5\x9a\xd3\x0c\xe4\x4f\x78\x2b\xfe\xf8\x67\x9e\xb7\x3f\x49\xe8\xf6\x83\xdd\x6c\x46\xc8\x54\x90\x1a\xf6\x97\x42\x46\x97\x96\xb0\x14\x12\x91\x9a\x6b\x41\x48\x52\x18\x65\x21\x2f\x4a\x0d\x84\xda\x6f\xf1\x1d\x18\x9f\xed\x42\xf9\x5e\xab\x41\x8c\x48\x95\x53\xfd\x86\x4c\x96\xfa\xa9\xd3\x46\xc8\xa7\x51\xba\x2b\xdb\x69\x12\xf3\x34\xf3\xb1\x6d\x27\x16\xd4\xec\xf8\xc9\xb7\x34\xf2\x36\x65\x1c\xe4\xb5\x90\x7a\x17\x3e\x69\x14\xbb\x19\xac\x8b\xa3\xcd\xe6\xa7\x8c\x71\xfd\xbb\xdf\x3e\xf2\x64\x0a\x45\x26\x96\x66\xff\x3c\x7d\x3c\x77\x7c\x9f\x9d\x59\xc9\xae\xfd\xed\xca\x3e\x76\xec\xcf\x5a\x2a\x63\xf4\xb4\x49\xfb\xec\xd4\x11\x8f\xf5\x6e\x95\x02\x7d\xb0\xfb\xf6\xfa\xd2\xdb\x7a\x6e\x60\x0a\x12\x78\xe2\xf9\x5c\xf5\xa7\x16\x84\x92\xef\xca\x09\x48\x0e\x1a\x54\x43\x13\x58\x16\xe0\x0d\x6b\x60\x7f\x20\x41\x92\x52\xb3\x8c\xfd\x73\x93\x39\x62\xd3\x5b\x45\xbf\x69\x9f\x90\xa9\xfc\x63\x4f\x48\x56\xfe\xb1\xa7\xe4\x2b\xdb\xf6\xb9\xba\x9f\xde\x85\xb6\xb5\xd6\x09\x8d\x20\x4e\x63\xa8\x56\x26\x6d\x2f\x45\x74\x4e\xfe\xf4\x36\xdf\x40\xe9\x35\xda\xf2\x5b\xb6\xf0\x6d\x04\x93\x93\x6d\x6e\x92\xb1\x51\xf8\xc7\x68\xa1\xff\xf1\xa7\xb1\xed\xf2\x74\x4c\xde\xe7\x85\x5e\x7a\x33\x10\x7b\xa2\x73\xa6\x08\x17\x7a\x5d\x10\x8c\x3e\x4d\x8b\xcd\x46\xc8\x27\x67\xea\xe2\xfa\xd2\x5b\xdb\x5f\x70\x69\x55\x01\x49\x0f\x04\xfd\xdb\x16\x19\x2d\x31\x7f\xca\x20\x4b\x09\x33\x32\xbc\x21\x96\x4c\x32\x91\xdc\x3b\x4b\xfe\xcd\x3b\xa2\x84\xe5\x39\x46\xd1\x33\x92\x7f\x22\xb8\x2a\x73\x20\xec\x29\x26\x32\x48\xf6\x83\x64\xdf\x6c\x83\x64\x3f\x48\xf6\xad\x66\x9d\x74\x7d\x60\x8e\x2b\x84\x6c\x65\x8f\xf8\xdc\xc0\x20\x1f\x6b\x03\x83\xc4\x36\x30\xc8\x81\x41\x3e\xd5\xf1\x93\x6f\xb9\x93\xa4\xfb\x64\x5f\x4f\xf1\x8e\xc1\x73\x30\x78\x0e\x06\xcf\x81\x6b\xc3\xf5\xe9\xda\x70\x7d\x0e\xd7\x67\xbb\x7d\x76\xd7\xe7\xe0\x39\x18\x3c\x07\x83\xe7\x60\xf0\x1c\x34\xdb\xe0\x39\x18\x3c\x07\x83\xe7\x60\xf0\x1c\x6c\x69\x83\x64\xdf\xb1\xd3\x41\xb2\x1f\x24\xfb\x6d\x6d\xf0\x1c\x0c\x9e\x83\x81\x41\x0e\x0c\x72\x60\x90\x5b\x5a\x1f\x3d\x07\x49\x06\x94\x6f\x56\xe7\x57\x92\x1b\xf1\x39\x14\x00\xd9\x94\xb9\xd4\x3e\xf7\x6b\x32\x81\x39\x5d\x30\x51\x4a\xf2\x30\x07\xee\xf3\x52\xc9\x0c\xb4\x32\xbb\x00\x34\x6c\xd2\x00\x9f\x60\x6f\x8f\xb3\xb4\x11\x01\x4e\x27\xd9\xc6\x8e\x9f\xe2\x5e\xee\x97\x8f\x7b\x4a\x26\x42\x98\xb7\x5b\x9f\x31\xd4\x5e\xbc\x36\x10\x21\xa9\x65\x9b\xce\xb5\x39\xb1\xe5\xed\xcd\xbb\x67\x4d\x67\xd9\xd8\xc9\x65\x35\x36\x41\x17\x0e\xa6\xfd\x99\x2b\xcf\x7c\xfa\xf1\x81\x43\x8a\x49\xe9\x67\x84\x69\xf3\x80\x61\x2c\x2c\x61\x3a\x5b\x56\xe4\x7d\xde\x79\x32\x6f\x6f\xde\xed\xee\xe6\xf2\xab\xb4\xb5\xeb\x88\x1e\xad\xc1\x5f\x35\xf8\xab\xaa\x36\x08\x6d\x1d\x3b\x1d\x84\xb6\x41\x68\xdb\xd6\xe2\x0b\x6d\x7d\xf7\xef\x0c\x5e\x19\x32\x78\x65\xfc\x63\x83\x57\xe6\xc9\xc7\x07\xaf\xcc\xe0\x95\x19\xbc\x32\x8f\xb7\x41\x7e\x75\x6d\x90\x5f\x07\xf9\xb5\xdd\x3e\x3b\xf9\x75\xf0\xca\x0c\x0c\x72\x60\x90\x75\x1b\x18\xe4\xc0\x20\x5b\xed\x73\xcc\xe7\x18\x2c\xdc\x83\x85\x7b\xb0\x70\x0f\x17\xe0\x70\x01\x0e\x17\xe0\x53\x1d\x0f\x16\x6e\xdf\x06\x0b\xf7\x60\xe1\x6e\xb5\xc1\xc2\x3d\x58\xb8\x07\x0b\xf7\x60\xe1\xde\xd2\x06\xf9\xb5\x63\xa7\x83\xfc\x3a\xc8\xaf\xdb\xda\x60\xe1\x1e\x2c\xdc\x03\x83\x1c\x18\xe4\xc0\x20\xb7\xb4\x3e\x5a\xb8\x9f\x38\xbc\xbb\xec\xd2\xa6\xbd\xda\x89\xcd\x3e\xd2\x7d\x4c\xde\x52\x4e\x18\x4f\xb2\x32\x05\xfc\x66\x0a\x54\x97\x12\xd4\x19\xc9\x58\xce\x7c\xb1\x0e\x21\xcd\xa6\x19\x25\x54\x81\x72\x7d\x6c\x1c\xaa\xea\x77\xc3\xb7\x8f\xbf\xe6\xe3\x7c\xe4\xd1\x5a\x67\x55\xd8\x3e\xe3\xbe\x1f\xb7\xad\xf6\x26\x83\x25\x3b\x4c\xb3\x19\xdf\x3c\x88\xb5\x5b\x6c\xa1\x9f\x27\x5f\x7b\xdb\x16\x7c\x64\xcb\x3d\x79\xb9\x3c\x75\xa5\x8c\xc8\x84\x2a\xf8\xc3\xbf\xad\x95\xb8\x6a\x3e\x92\x43\xca\xa8\x19\x6a\xe3\x13\x4f\x5f\x33\xf5\x10\xdb\x37\xf9\x0e\x87\xa5\x22\xa3\x63\x2f\xae\x9c\x4d\xd7\x23\x62\xf6\x5d\x7a\x69\xfb\xb8\xd5\x92\x6a\x98\x2d\x1b\x75\x9b\x70\x9b\xd5\x42\x03\xdf\x52\xc2\xcc\x6b\xa0\x1b\x87\x78\x98\x83\xb4\x47\xcc\xd7\x0a\x52\x7e\x20\xa6\xaa\x74\xa1\x2e\xf9\x1f\x4f\xe5\xff\xf8\x71\x36\x7c\xfd\xd4\xfa\x6e\xaa\xa0\xe4\xdb\xae\x17\xa4\x9f\xcf\x77\xd6\x43\xf6\xae\x02\x82\x59\x9d\xe0\x82\x4a\x73\x31\x79\x4f\x1a\x8a\x67\xf5\xd3\x5b\xfb\x5f\x59\xb6\x6d\x77\xd4\x0e\xb2\xda\xd3\x32\xda\xa8\x81\x63\xb3\xcd\xab\xb7\x8b\x68\xe6\x6a\x43\x5e\x83\xcc\x99\x52\xdb\x92\xa2\xda\xa4\x3f\x75\x8b\xed\x70\x7b\xad\xc8\xcc\x7e\x5d\xfc\x1b\x35\xc8\xa9\x04\x68\x6b\x65\x99\xd0\x84\xc8\x32\x33\xe2\x34\x4f\x89\xab\x53\x44\x68\x92\x88\x92\x6b\xc2\x01\x52\x4c\xac\xda\xb8\xbd\x77\xb8\xfb\x76\x90\xa0\x77\x95\x9f\x47\x96\xce\x27\x9f\x72\xef\x70\x61\x5f\x61\x63\x91\xac\x66\xdb\x5d\xde\xc6\xe1\x9f\x16\x22\xf6\x91\x4c\x76\x96\x4b\xba\xc8\xac\xd7\x22\x63\xc9\xf2\xa6\xcc\x80\xcc\x45\x96\x2a\xac\xf9\x66\x2e\xcf\xca\x27\xda\xd4\xa5\x0a\x7c\x1a\x5f\xf2\x8c\x4c\x4a\x4d\x52\x01\xd6\x6c\xe8\xd0\xa5\x9a\x3f\xdf\x69\x7c\xeb\x29\x7f\x98\xdb\x62\x84\xa6\x63\x42\x8b\x22\xc3\xcc\x49\x61\x04\x8f\x87\x39\x4b\xe6\xb6\x24\x6c\x41\x13\xd8\xf4\xd8\xee\x72\xe9\x4e\xba\x1a\xd9\x4b\x5f\x23\xde\xec\x3d\x79\x6a\xd7\x91\x3d\x15\x37\x62\xcb\x82\x7d\x23\x45\x59\xec\xf8\x78\xb7\x3d\x40\x6c\xc9\x30\x3b\x90\xb9\x8e\xf4\x8a\x88\xe5\xbf\x74\x4e\x72\xbb\xd4\xca\x59\x60\x9d\x47\x66\x8c\xe9\x8f\x79\x99\x69\x56\x64\xf8\x13\x8b\x80\xa5\x08\x95\x50\x5f\x70\x67\x84\xf2\xa5\xf7\xb9\xbb\x12\x86\x90\x12\x3a\x33\x3d\x6a\x2c\x8f\x2a\xa6\x3b\x53\x6d\x6b\x24\x96\xb9\x91\xbf\x1a\x36\x60\x85\xea\x3e\x5f\xd6\x54\x90\x07\x96\x65\x46\xf9\xa1\x59\x26\x1e\x20\x1d\x93\xa3\xa3\xd5\x0b\x28\x11\xb2\x41\x37\xb2\xba\xa3\x7f\x6d\x3d\x65\xf8\x5a\xfd\x62\xbb\x29\x72\xfb\x6a\x21\x64\x3f\x4d\x84\xec\xaf\x73\x11\x54\xa5\xee\x2b\x07\xd5\x28\x63\x4a\x8f\x1c\x95\x5a\xe4\x2c\xd9\xa9\x13\x2e\xb8\x77\x44\xfc\xf9\xe6\xfb\x67\xdf\xa0\x57\xed\xe1\x5c\x4d\x4e\xd0\x66\x8f\x16\x54\x6a\x46\x33\x52\xca\x4c\xd9\x3d\x4a\x8d\xc2\x22\x7d\x15\xd4\x39\xc5\x38\x8f\x04\x14\xb2\x0b\x42\xfe\xd5\xee\x4a\xb7\x19\x2c\x2b\x13\x3c\x5b\x12\x6a\xb7\xc2\xb4\xcc\xb2\x33\x32\x65\x9c\x9a\x8b\x0c\x0a\x9f\xc3\xbb\x83\x69\xa6\x6e\xb7\x8c\x27\x60\xa6\x69\x54\xf9\x26\x90\x72\x33\xb2\x61\x99\x15\x4f\x4b\xcf\x5c\xd9\x4f\x6b\xa9\x52\x8e\x14\xc3\xdf\x12\x3a\xc9\x00\x35\x0d\x27\x73\xde\x88\x0c\x5d\x8a\x95\xdf\x03\x6b\x85\xd2\xe6\xd7\xff\x8b\xf1\x5d\xb5\x75\xdb\x6e\xf0\x6a\x4f\x28\x27\xc0\xf4\x1c\x24\x0e\xbd\x34\xfc\xd7\x6c\xf6\xfa\x50\x9d\xa8\x32\x99\x9b\x29\x3a\x2a\x44\xaa\x8e\x0c\x77\x3e\x52\x90\x48\xd0\xea\xe8\xd4\xfc\xb5\xfa\xae\x38\x5f\xcd\xdf\x9d\xd3\x82\x1d\x9d\x9e\x11\x9c\x70\x2c\x50\x2a\xf4\xfc\x17\x7e\x8e\xfc\x84\xb5\xca\x8b\x3f\xd5\x5a\xa7\xe8\xa6\xd9\x83\xab\xac\x29\x0a\x5b\x94\xd2\xdc\x9f\x1a\x30\xed\xdc\x9c\x14\xdc\x73\x0d\x1f\xf4\xca\x45\x4a\xc8\x05\x27\x60\xbd\x86\xa0\x49\x0e\x94\xbb\xa7\x61\x01\x72\xa9\xe7\xe8\x48\x54\x15\x17\x1d\x56\x6e\x87\x68\x84\xba\x6d\x5c\x35\xc7\xca\xfc\x0a\xd5\xc7\xcd\x16\x7f\x5e\x5d\xa1\xe3\x7f\x3d\x5e\xbd\x92\xea\x3b\xf8\x97\xbd\x1e\x28\x84\x75\x5a\x8b\x1f\xcc\x2f\xdb\xeb\x60\x3f\xb2\x97\x49\xc5\x0e\xbf\xff\xde\x16\x7b\x76\x13\xfe\x1d\xe3\xa9\xaa\x80\x55\x53\x7b\x4b\xb8\x45\xdb\xb8\x52\x48\xe1\x2f\x76\x95\xd6\x95\xae\x5d\x15\xa5\x27\x68\x6c\x68\xe5\x7d\x50\xa4\xb1\x5e\x74\x4b\x4a\x36\x6c\xf7\xcc\x7a\xe7\x8d\x58\x99\xd1\x09\x64\xca\x19\x10\xa1\x41\x3e\xb9\xf8\xfe\x43\x55\xba\x5d\x02\x7d\xc2\x28\xfe\x0c\xea\xf3\x0e\x61\x3e\x6b\x25\xf2\xd7\xdb\xee\x6a\x0e\x4e\xc5\x7e\x4e\x2c\x72\x0b\xda\x9e\xd5\x9c\x16\xe6\xa8\xda\x3e\xac\x73\x65\xc5\x71\xf2\x3d\xce\xf4\xd3\x27\x6e\x2f\xf5\x70\xf7\x92\xcf\x9b\x06\xd9\xe9\xbc\xed\x16\x4a\xb4\x47\x87\x8f\x99\xf2\xea\xd6\x9a\xe6\x95\x0d\xed\xf4\x42\xa7\xc9\x25\xb4\xe9\x50\x48\x41\x59\x70\x1d\x0b\x70\x24\xfd\xe7\x75\x17\x91\x97\x60\x1f\xfd\x7c\x44\x14\x64\x90\x6c\xaa\xc9\xbe\xe9\x61\x0d\x79\x91\x3d\x75\xf2\xc8\xde\xba\x7c\xce\xf8\x0d\xd0\x74\x79\x0b\x89\xe0\xe9\x8e\x5c\xba\x9b\xb2\xf4\x81\x71\x96\x97\x39\xe1\x65\x3e\x01\x5c\x0b\x65\x07\x45\x8e\x63\x0d\x2a\x94\x70\x78\xc8\x96\x8e\xcb\xa4\xa4\x10\xa9\x67\x3c\x13\xa3\xd5\xd3\x74\xd7\x4b\xe7\x81\xe9\x39\x96\xad\xe0\x4b\x33\x14\xd3\xf5\x8d\x28\x49\x22\xa9\x32\x42\xe3\x19\x0e\xcd\xb4\xb9\x45\x27\x80\x2e\x76\x96\x82\xd9\x32\x74\x41\x59\x66\xb4\x9c\x5d\xaf\xc5\x77\x30\xa5\x65\xa6\xd1\x3e\xf4\x8a\x9c\x18\xc2\xbd\x72\xbf\xa9\x5b\xa3\x77\x28\x21\xb8\xf9\xaf\x85\x5d\xc2\x97\x3b\xdd\xc3\xcf\xb7\x0b\x10\xba\x6f\xbb\x02\xa2\xfb\x56\xd0\x52\xed\x6a\x66\x6a\xed\x86\x4b\x9e\x9a\x43\xd8\x94\xe6\x1b\xf7\x08\x53\xae\xe7\xdd\x66\xf5\x71\x28\xaf\x0d\x54\x4b\x31\x93\xa0\xd4\x3b\xa0\x69\xc6\x38\xbc\xc0\xa6\xbe\x9b\x03\xc9\xe9\x27\xdc\xd8\x9a\xe5\x60\x84\xad\xe6\xb6\xa6\xcd\xd7\xd7\x82\xe4\xf4\x1e\x2a\x3a\xc9\x04\xa6\x42\xee\x10\xd2\xe1\x1b\x53\xcd\xcd\x64\x37\xed\x94\xb2\x0c\xd2\x31\x52\xd2\x18\xcb\x6c\x76\x29\xb2\x0c\xa4\xdd\x87\xe6\x6f\xc6\x4b\x20\x5a\xec\x38\x58\x21\x05\x9a\x26\xec\x00\x4d\x69\x06\xa5\x05\x6a\xba\xb4\x37\x0e\x1e\x36\x42\xc9\xf5\xca\xfc\xbf\xff\x94\xa0\x11\x7e\xc7\x01\x25\x50\x85\x9d\xd9\x63\xa3\x4a\x39\xa5\x89\x97\x5f\x5b\x2f\x67\x23\x66\xc6\xe4\x4a\x68\x17\xba\x5c\x4d\xa9\xf9\xf5\x8e\xe3\xa1\xa6\x0f\x04\x94\x66\x39\x72\x9b\xb4\xc4\x90\x54\x33\x18\xae\x25\xdd\xbc\x77\x5b\x67\xfd\x0f\xaf\x5e\xed\x28\x3a\x3f\xff\xa9\x95\x80\xb6\x99\x67\xdd\xf0\x57\x15\xf7\xf6\xb7\x6b\x21\x52\x65\xb6\x1f\x73\xaa\x4a\x21\xcc\x3b\x4a\x8c\xe5\x60\x4a\x33\x3e\x2b\x99\x9a\x93\x09\xe8\x07\x00\x4e\xe0\x93\x85\x97\xdb\x71\xbc\x7f\x82\x14\xb8\xdf\xcc\x6a\xd5\x0e\xc9\xd6\x1a\xbc\xee\xcf\x02\x2c\x98\x62\x82\x7f\xcb\x94\x16\x72\xf9\x3d\xcb\xd9\x13\x35\x2d\x7c\xeb\xce\x7d\xea\xeb\x54\x64\x29\xb9\xb1\x5b\xe0\x16\xec\xcc\x48\x40\xf7\x87\x16\xd6\x36\x42\x0c\x47\x98\xd0\xe4\x7e\xd7\x5b\x6d\xef\x55\xdd\xb6\x5e\x1d\x6e\xd1\xd7\xaf\xfa\xb2\xac\x5e\x50\x7b\xce\xa5\x44\x95\xa0\x1a\x09\xef\x0e\x7b\xb0\xde\x7f\xb2\xd3\xdd\x5a\xda\x87\xb9\x50\x80\x0f\x10\x2a\x9f\x96\x09\x9b\xaf\xe1\x7d\xa2\x4c\x55\x9c\x16\xe3\x55\x38\x28\x42\xa7\xd3\xf6\x13\xe9\x1e\x92\xb2\x6d\x97\x9a\xe4\xa5\xd2\x24\xa7\x3a\x99\x5b\xeb\xb4\x48\x2b\xe9\xf5\x58\x39\x2d\x73\x9f\xa5\xdd\xd9\x3d\xb6\xbf\x23\x8b\x58\x3a\xdf\x7f\x2a\xcc\xe5\xf1\x94\xcb\xbb\xdd\x5a\xeb\xbc\xda\x4d\xdb\x6a\x93\xb5\x17\xd7\xa9\x09\x78\x97\xda\x8b\xbb\xf9\x09\x5a\xe2\x2f\xae\xde\xed\x7e\x6a\xba\x18\x65\xf6\x36\xcb\x74\xf7\x91\x98\x76\xf1\xc8\x1c\x78\xa7\x89\xfb\xa6\xed\xcd\x43\xfd\x59\x9d\x11\x4a\xee\x61\x79\x66\x25\x8f\x06\x28\xaa\x79\x78\x2f\x42\x24\x64\x4e\x3c\x05\xd3\x23\x76\x68\xc7\xd8\x7d\xb6\x3b\x6c\x4c\x3f\xf8\x3e\xfe\x5b\xdf\x46\x86\xd0\x3d\x7f\xe1\x27\x68\x8f\x9f\xed\x7f\x76\x6c\xbb\x87\xe5\x7e\x3f\x58\xd9\x49\x66\x15\x9c\x16\x6f\xf7\x88\xf9\xa0\xd2\x1e\xaa\x6d\xb1\x9f\x63\xbd\xd9\x3a\x18\x14\x6d\xf3\x93\x18\xf4\x7a\x7b\x1e\x94\xe6\xb8\x2d\x3b\xad\x99\x96\x63\x65\xf7\xaf\xe1\x30\x73\x56\xd8\x9c\x3e\xe7\x6d\xdc\x7f\x13\xdb\xf6\x03\xcd\x58\x5a\x0d\x69\xb9\xcf\x25\x3f\x33\xb2\xb5\xf9\x0f\x5e\x3f\x56\xe2\x7f\x27\x40\x5d\x09\x8d\x9f\xbc\xd8\x1a\xd8\xd7\x7a\xe9\x15\xb0\xa3\x3a\xa7\x15\xb2\x55\xb4\x57\xd8\x94\x35\x37\xd3\x1e\x57\xb9\x8e\xf4\x54\xe4\x92\x13\x21\xdd\xd4\xed\x3d\xa8\xe9\xcc\x0d\x6c\x87\xc4\x8b\x74\x62\x9d\xb5\xe8\xfe\xda\x38\xa6\x5b\x21\x21\x5b\x0b\x14\x71\x78\x37\x34\xca\x82\xf6\x1b\x34\x57\x14\x19\x6a\x67\x4e\x69\xa2\x3e\xb4\x6a\x47\xaf\x48\xb3\xe5\x20\x67\xe8\xc5\x4e\x76\xf6\xba\x56\x44\x77\xb8\xf8\x6c\xdb\xfb\xfa\x6b\x0e\xd8\x61\x23\x47\xf1\x25\x45\xeb\x06\xe5\x15\x6b\x86\xee\x28\xf1\xec\x75\xaa\x1a\xc3\xb5\x6c\xe4\xff\xc7\x5c\xea\xb8\xe9\xfe\x2f\x29\x28\x93\x6a\x4c\x2e\x88\x62\x7c\x96\x41\xeb\x3b\x67\x02\x68\x74\xb3\xd7\xe0\x85\x19\xd4\xdc\xbd\x0b\x9a\x39\x43\x0c\xe5\x04\xac\x39\xde\xd0\xb1\x2a\xbe\x9d\x39\x09\xdb\x5c\x45\x55\xfc\xc3\xd1\x3d\x2c\x8f\xce\xb6\x86\x99\x6f\x6e\xcd\x93\x7a\x74\xc9\x8f\xac\x08\xb3\x76\xd6\x2a\x79\x07\x83\x2c\x8e\xf0\xbb\xa3\x98\xb2\xe1\x9e\xb2\x4a\x57\x67\x42\x7b\xd0\x3d\x8e\x49\x6b\x57\xe7\xb4\xd8\x77\x53\xfb\xc0\xce\x0e\x3a\xda\xdd\xaa\x71\xc9\x45\x40\x6b\x41\x4a\x05\x56\x8d\x46\x66\x47\xc0\xeb\x62\xa8\x79\xa1\xd5\x8b\xc3\x03\xea\x4e\xbd\x51\x68\x8c\x8a\xcf\xf8\xec\xcf\x45\x4a\xf5\x4e\x39\x45\xb6\x75\x3f\xdb\x37\x76\x40\x52\xe2\x88\x66\x27\x4f\xd9\x8c\x14\x54\xd2\x5c\x8d\xc9\xb5\x2b\x37\x80\xfb\x9a\x4d\x9b\xee\x1b\x37\xcf\x77\xcb\x02\xc8\xff\xdc\x7f\x40\xfb\x86\xcf\x7c\x0e\xba\x09\xc5\x39\xfd\x74\x5b\xca\xd9\x1e\xd3\x4f\x82\x85\x96\xa6\x25\xba\xb6\x09\xe1\x46\x6d\x82\x08\xa9\x64\x0e\x69\x99\x41\x4a\xe8\x44\x2c\xa0\xe5\x27\xab\x7e\xb6\xe7\xd0\x68\xa8\xd8\xf3\x37\x3f\x18\x0e\xe7\x89\x32\x42\xd6\x44\x89\xac\xd4\x95\x3d\xeb\x04\x3e\xbd\x21\xbf\xc7\xf8\x2d\x4a\x0a\x90\x09\x70\x4d\x67\xb0\x6a\x78\xb4\xcf\xbd\x7e\xf5\x2f\xa7\xfb\x12\x80\xe2\x8c\x19\xdf\x99\x81\x5f\x99\xdd\xf9\x81\x7e\xfa\x33\xaf\x9d\x34\x4c\x91\x1d\x8d\x50\x75\xbb\x58\x79\x11\x1c\x25\x4b\xca\x0c\x4d\xcc\x18\x17\xd7\x78\x9d\xc9\x92\x48\x51\x62\x64\x1c\x29\x8b\x7d\xc7\x6a\x9a\xcb\x7e\xfb\xfb\x7f\xd9\xf7\xe7\xef\x3f\xd1\xbc\xc8\xe0\x8d\xaf\xfb\x62\x6d\x7d\x46\x9f\xd0\x82\xfc\xee\xd5\xbf\x9c\xd9\x28\x01\x78\x68\xd8\x9e\xea\x7d\x44\xcd\x26\x2a\x0b\xc2\x72\x9b\x27\x03\xd9\x12\x3b\xda\x57\x82\x33\x57\x5c\x9b\x85\x28\x4d\xa5\x56\x67\x04\x03\xf4\x2a\x4d\x50\x0b\x4d\xb3\x15\x73\x27\x1a\x1a\xe1\xc1\x6e\x85\x54\xe0\x5a\x02\x7a\x1d\xf6\xa4\xe2\xf5\xef\x5e\xfd\xcb\xba\x51\xfb\x23\x4f\x00\xc7\xc1\xfe\x31\x5e\x73\x02\xc0\xc9\x3d\xcb\x32\x48\xf7\x15\xb1\x9f\x9a\xc8\x69\x29\xf5\x1c\xe4\x19\x01\xae\xbc\x27\xc2\xbc\xfb\xca\x7b\x23\x2d\xb2\xe4\x7c\x7f\x09\x94\x5a\x7f\x28\x3a\x37\x1a\xce\x0e\x37\xed\x46\x30\xd3\x24\x17\x4a\x6f\x9e\x8e\xbd\x06\xa3\x7c\xf9\x71\xba\xaf\x78\x3d\xea\x60\xcc\x5d\xff\x75\x07\xe1\xbc\x25\x7d\x30\xae\x47\x42\x8e\x6c\x37\x6f\x88\x96\xe5\x3e\x02\x5f\xde\x62\x21\x3d\xbc\x01\xca\x06\x83\x5b\xdb\x04\x9f\x1d\x1b\xef\xce\x6e\x53\xf1\xc0\x63\x5d\x1a\x78\xdb\x77\xba\x2e\x5e\x84\x85\xb7\x3d\x43\x2b\x9c\xc7\xcc\x83\x79\xfa\xff\xbf\x7e\xe4\xf7\x55\xa9\x57\x6e\x82\xed\xbc\xdd\xb1\xd6\x8a\x75\x1b\xb5\x06\x03\x20\xce\x56\x68\xdd\x93\x82\x0d\x6f\x56\x71\xd5\xa9\xb0\xe1\xc1\x66\x13\x98\x07\x2c\x51\x1b\xae\xb8\x9a\x01\xef\x7d\x95\x6d\xb9\xaa\xec\x3b\xd6\xb1\x1f\x1a\xc3\x2e\x0d\x1b\x56\xdb\xf8\xf0\x9e\x43\x67\x40\x95\xde\xb4\x84\x03\xd7\x7e\xb2\x3d\x9e\xe1\xbb\xda\xda\xaa\xa3\xd1\x5d\x70\xc6\x2b\x3f\x19\x26\xaf\x4f\x80\x1c\xdd\x80\x8d\x62\xb2\x19\x09\x2d\xa5\xe5\xa8\xf2\x5f\x9b\xc5\x0e\xd2\x67\x76\x9e\x36\xef\x82\x7b\x56\x7f\xb4\x1b\xa3\x91\x9d\xe7\x3c\x80\xee\x0a\xaa\x42\xa2\x6c\x7c\xd7\xee\x6e\x68\x70\xd9\x27\xee\x08\xfb\x97\x19\xab\x02\x92\xb1\x04\xe4\x2a\x36\x69\xd0\xda\x55\xd0\xdc\x72\x91\x3d\xd0\xa5\x3a\xea\x8d\x6a\x9e\x83\xa6\x8f\x27\xa5\xaf\xb6\xee\x02\xc1\xad\xa6\x3c\xa5\x32\x75\x6f\x74\xac\xaa\xd1\xf7\xe1\x08\x1f\x30\x3c\x89\x4f\xc5\x1b\x32\xd7\xba\x50\x6f\xce\xcf\x67\x4c\x8f\xef\xff\xa8\xc6\x4c\x9c\x27\x22\xcf\x4b\xce\xf4\xf2\x1c\xa3\x8d\xd8\xa4\xd4\x42\xaa\xf3\x14\x16\x90\x9d\x2b\x36\x1b\x51\x99\xcc\x99\x86\x44\x97\x12\xce\x69\xc1\x46\x89\xe0\x0b\xe0\xe8\xbf\x18\xe7\xe9\xaf\x3d\x49\xcf\xab\xc3\xb7\xd8\x04\x3a\x54\xe4\x02\x46\x25\xbf\xe7\xe2\x81\x8f\xd0\xbc\xa7\xf6\x62\x18\xbb\x45\xad\xfa\x16\xb0\x86\xfb\x04\xb5\x16\x62\x0f\x9b\xe0\xb3\xaf\xac\x99\xa2\x11\xe5\xe9\xc8\x86\x6a\x3d\xef\x02\x77\x71\xab\x8e\xea\x70\xd0\xdd\xa9\xeb\x66\x0d\xa2\x89\x66\x0b\xe8\x14\x94\xe8\x5b\x98\x62\xf0\xd1\x67\x5d\xa5\xa5\xb4\x7b\xa9\x11\xa5\xe8\x43\x34\x72\xba\x44\x19\x1e\x89\x25\xc2\x0a\x6f\x5c\xa4\xe0\x5c\x8e\x8b\x3d\x42\x07\x7d\xbb\x35\x6c\xf9\xce\x68\x9b\x2e\xd2\x11\x3d\xba\x4b\xa5\x21\xb7\x57\x81\x1d\x2d\x5b\x12\x2d\x97\x36\x3c\x52\xde\x13\xa6\x7d\xcc\xa1\x51\xef\xef\xf1\x39\xa5\x44\xc2\x50\xa4\xaf\x97\xad\x9b\xae\xe2\xbd\x5a\x94\x14\x42\x31\x7c\x2f\x27\xb8\xec\xd7\x5f\x77\x99\xa7\x11\x7e\xf4\x87\x7f\xdb\x67\x1f\x4d\x11\x58\x73\x4f\x6f\x7b\x3b\x3c\x77\xda\xcc\x79\x76\x4b\x7f\xac\xbc\x55\xd0\x08\xa2\x89\xe0\x4a\x4b\xca\xb6\x63\x49\x6c\x6e\x1d\x43\x22\xba\xc7\x1d\x10\xdc\x9d\x17\x9d\x26\x85\xac\x67\x15\x78\x81\x05\xb7\xbc\x9f\xea\xe6\xc4\x58\xa8\x09\x9f\x1d\xb3\x27\xbb\xb5\xad\xf3\x1c\x91\xa0\x79\xb2\xbf\xb6\xc0\xbe\xe9\x3b\xd4\x37\x6e\xab\xf7\xba\x9c\x71\x51\x7d\xfc\xfe\x13\x24\xe5\xae\x98\x6c\xeb\x2d\xd4\xed\x6e\x9b\x91\xf6\xbc\x99\xda\x45\x2f\x5b\xea\x0d\x87\xf0\x5f\x38\xa1\x52\xe0\x7a\x39\xe9\x52\x51\xcd\xd4\x74\x5f\x47\xb0\x6f\x66\x55\xab\x75\x87\x46\x28\x57\x75\x62\xaa\xb0\x38\x94\x19\x6c\x7e\x36\xd3\xc8\x39\x93\xb9\x10\x6a\x1f\x33\x51\xb3\x51\xbb\xe9\xf0\x1d\x16\x4c\xd8\x00\x25\xc4\x1c\x90\x24\x37\x6c\xd3\x5d\xf1\x0d\xa2\xac\x6b\xb0\xfe\x19\xdb\x57\x57\xf7\x0d\xcd\x7d\xd5\xe6\xf0\x81\x38\x66\x70\x74\x6f\x99\x3f\x66\x28\xac\x2b\x4d\x54\x99\x1b\x52\x1e\x80\xcd\xe6\x5a\x9d\x11\x36\xde\xdb\x5e\xe4\x9b\x39\x46\x40\x93\x79\xe3\x15\x72\x00\xdd\x2a\x96\xdd\x3c\x7b\x4d\x1f\xe8\xc9\xa3\x90\x46\x4f\x37\x87\xef\x70\x56\xc9\x0d\xab\x47\x62\xe3\x36\x38\x23\xa0\x93\xf1\xe9\xfe\x71\x15\xb6\xd5\xe0\x75\x66\x16\x27\x4b\xc2\x34\x98\xcb\x18\x55\x7f\x29\xca\x99\x9d\x6b\xf0\x29\x62\x38\x07\x55\xf6\x3d\x86\xbd\xa5\xe9\xfe\x26\x09\xdf\x8e\xec\xa2\x1d\x99\x13\x83\x73\x5b\xe6\x1e\x7a\x19\x57\x00\x1d\xe0\x50\x21\x4e\x48\x50\x85\xb0\x66\xb2\x55\xd7\xf8\xff\xd8\xd3\x01\xde\x6c\x66\xa8\x13\x75\x5a\x6f\xad\x39\x9b\xcd\xfd\xce\xa2\x4e\x3e\x68\xef\xc8\x6e\x1b\xac\x7b\x58\x88\x6d\x1d\x83\x43\x6c\x8b\xc3\x05\x1b\x49\xef\xf5\xf1\x6c\x1c\x09\x0d\x32\xaf\x96\x0d\x4f\x0d\x5e\x2b\xce\x2d\xed\x8b\xb8\xbb\xc3\x4a\x5e\x75\xa6\xe2\xc4\x9c\x72\xc2\x8c\x06\x69\xf8\xd4\x48\x14\xa7\x63\x72\x41\x78\x59\xb1\xe5\xc7\x08\xe3\xa2\xa2\xcb\x75\x64\x88\x55\xa2\xee\xab\x2b\xb7\x0e\xb9\x4a\x6d\xeb\x16\x8d\xd9\x6c\x23\x37\x03\xf0\x74\xd9\x95\xc7\x3a\xb1\x6b\xd4\xb1\x83\x30\xb1\xc0\xf7\xe1\xdf\xa2\x7b\x1f\xab\xb0\xe8\x96\xaf\xd4\x51\xbd\x20\xf3\xb3\xa6\x1c\x5f\xf1\x80\x36\xbb\xb1\x73\xd1\x75\x57\x90\x38\x3b\x83\x44\x9a\x57\x12\x14\x60\xbe\xb9\xad\xcc\x72\x05\xa1\xd1\x9a\xed\xd6\x7d\x39\x59\xe2\xb7\x7b\xc6\xde\x6f\x6f\xa1\xcc\xb5\x6e\x41\x6c\xb6\x6e\xb1\x18\x6e\xdd\x56\x77\x6f\x9c\x68\xf5\x08\x84\xe1\x70\x71\x62\xd8\xb7\x0c\x10\xe7\xf4\xd8\x16\xce\x61\xeb\xb6\x7f\x14\xfc\xb6\x7e\xa2\x2d\x47\x2c\x16\x61\x5b\x87\x38\xfa\xcd\x6d\x2d\xb8\xed\x79\xc2\xea\x37\xb7\x80\xf8\xd8\x4d\xad\x6b\x08\xfe\xe6\x16\x9f\x51\x98\x76\xf3\x02\x51\xfa\x9b\xdb\x4e\xb1\xfb\x67\xed\xc0\x7d\xf2\x8d\xb6\x8c\xe9\xfb\xa0\x5b\xb6\x6e\x91\x57\xbc\x5b\xc0\xff\xe6\xf6\x3c\xeb\x7d\xf1\x72\x29\x01\x9b\xdb\x81\x13\x05\xf6\x24\x6a\x3b\x41\xdf\x68\x43\xcc\xf7\xfa\xac\xf1\xe3\x48\xd4\x34\x48\xb0\x30\x7b\x3e\xaa\xdc\x29\xd8\x67\x0e\x70\xc2\x3b\x24\x31\xb9\xb5\x90\x80\xa8\x8f\x98\xf5\xd1\xc9\x28\xbc\xbd\xed\x9c\x3d\x11\x92\x0d\xb1\xb9\xc5\x93\xd7\x6c\x8b\x24\xb5\xd9\x16\x99\x7b\x44\xcb\xb2\x78\xf1\xce\x51\x4f\xf8\xda\x3a\x23\x0f\xa8\x22\x58\x77\xe8\xa0\x22\x3c\xd9\x06\x15\x61\x50\x11\x9e\x6e\x83\x8a\xb0\xde\x06\x15\x61\x50\x11\x82\xda\xa0\x22\x3c\xd9\x06\x15\xe1\xc9\x36\xa8\x08\x75\x1b\x54\x84\xfe\xab\x08\xa1\x19\xb2\x9b\x9b\xf5\xb7\x44\x73\xfb\xfc\xc5\xba\x1b\x57\xfd\x3c\xa8\xdc\xf8\x30\xf7\xb6\xc3\xc7\x48\xd1\xb7\x4e\xd4\xb8\x43\x27\x91\x4b\xf6\x96\x94\xcf\x80\xbc\x1e\xbd\x7e\xb5\x77\x52\x45\xb3\x85\xc4\xa6\x37\xdb\xbe\xa0\x51\xeb\x2d\xfa\xce\xd8\x16\xbf\xd0\xbf\x90\x1e\xc7\xd9\xab\xb8\x8a\x96\xf2\xb9\x25\xbe\xa6\xaa\x48\x90\x83\xde\x3f\x21\xc2\xb7\xa6\x63\x9a\xe5\x50\x05\xbd\x59\xb6\xee\xd2\x78\xea\xa4\x58\xc1\x5d\x80\x84\xd9\x96\x5d\xb7\x5d\xa7\xb7\x4d\x80\xda\x64\xf3\x09\x98\x37\xee\x1a\x4a\xa4\x89\x12\x39\x58\xb8\x36\x7f\x75\x98\xd7\x05\xbf\x0d\xc8\x09\x8c\x67\x63\x92\x96\xe0\x60\x10\x6c\xd6\xc9\xe9\x59\x23\x38\xb3\x6b\x2c\x91\x11\x78\x24\xfe\xc7\x4c\xac\x8b\xe9\x84\x05\x70\x5d\xd2\x2c\x5b\x12\x58\xb0\x44\x57\x2b\x80\xc9\x59\x4c\xab\x80\xb9\x0e\x56\x45\x43\xd5\xcf\xd1\x1a\xff\xea\x26\x9e\x84\xeb\x89\x6b\x74\x74\xe7\xe9\x2b\x05\x01\xec\x0c\x8d\xb7\x5a\x92\xb4\x19\xcd\x06\xa4\xe1\x3f\xf1\xe0\x7e\xbc\xe9\x1a\xbb\x43\x22\xc9\x23\xc1\x32\x48\x4c\xd5\xc0\x05\xcc\x08\xe9\x42\x7a\xd6\x67\x70\x43\xc8\xcc\x06\xfc\x8f\xbd\x73\xf3\xdb\x4d\xcf\x21\xef\x82\x21\xb2\xa9\x19\xda\xee\x44\x21\x32\x31\x5b\x36\x37\x9e\xab\xdb\x5f\xa3\x9d\x53\xa2\xca\x89\x53\x6e\xcd\xd9\xbf\x5a\xd9\xa9\x43\xb0\xc7\xd6\x36\x04\x7b\xac\xb5\xc1\x92\x3b\x58\x72\xf7\xe8\x67\xb0\xe4\x0e\x96\xdc\xc1\x92\x3b\x58\x72\xbb\xb6\xc1\x92\xbb\x17\x51\x83\x25\x97\x0c\x96\xdc\xad\x6d\xb0\xe4\xba\x36\x04\x7b\x6c\x6c\x83\x8a\xb0\x6f\x1b\x54\x84\xf0\x7e\x06\x15\x61\x50\x11\x06\x15\x61\x50\x11\xba\xb6\x41\x45\xd8\x8b\xa8\x41\x45\x20\x83\x8a\xb0\xb5\x0d\x2a\xc2\x7a\xc7\xd1\x82\x3d\x9e\x81\xdc\x98\x84\x16\x22\x8d\x0e\xe7\x52\x88\xf4\x11\x34\x17\xeb\x0b\x4f\xc4\x28\x13\x09\xc5\x5a\x82\xcc\xfe\xc4\xc5\xa0\x28\x9a\xdb\x50\x80\x33\xf2\x4f\xc1\xc1\x62\x40\xd8\xda\x9d\x39\x10\xa1\xe7\x80\x65\xba\x4e\xd4\x69\x87\x44\xf6\x01\x0d\x66\x97\x36\xa0\xc1\x0c\x68\x30\x03\x1a\xcc\xcb\xa2\xc1\xcc\xa9\x72\x25\x2e\x50\x28\xda\x0e\x0e\xd3\xe0\xd8\x77\x20\xf3\x01\x1b\xe6\xa9\xb6\xa6\x8b\xbb\xe3\x63\x56\xb8\xb1\xd9\xed\x8c\xa7\x2e\x9c\x12\xd2\xeb\xf6\x3c\x3b\xc3\x1d\x4e\x0b\x4d\x53\x48\x49\x01\x72\x64\x0f\x8f\x20\x53\xe6\x2a\xcc\xac\x9c\x66\x37\xc3\x5d\x19\x62\x4f\x00\x57\xda\x33\x11\xd0\xd3\xe1\x51\x57\xda\xaf\x12\x2d\x54\xa9\x19\xb1\xd5\x12\x7f\x3e\x3b\x0c\x96\x38\xf6\xc2\x11\xd1\x2e\x4c\xe9\xbb\x20\x8b\x61\x2c\xf3\x1e\x9a\xdf\x6e\xf7\xaa\x29\xbb\xbd\xc5\x36\x69\xf8\x42\x9d\xff\x5d\x82\x5c\x12\xb1\x00\x59\x1b\xab\xfc\x4d\xab\x5c\x8c\x36\x62\xe1\xbb\x3a\xb4\xe1\xaa\xe9\xe5\xd4\xa2\x4c\xf1\x32\xcb\xce\x6c\xef\xab\x6c\xcf\x5f\x44\xb6\xf2\x92\x30\xdf\x47\xf2\x5e\x44\x31\x70\xc7\xb4\xff\xc6\x8e\x24\x23\x3d\xab\x58\xbb\xbd\xc5\x35\x4f\x44\x34\x4e\x3c\x93\xf5\xb0\x2f\x95\x71\xb7\xb7\xe7\xf4\x2f\x91\xd8\x3e\x26\x12\xd9\xcf\x44\x22\xfa\x9a\x48\x5c\x7f\x13\x89\xee\x73\x22\x31\xfd\x4e\xe4\xc5\x2b\xfd\x6e\x6f\xd1\xcd\x8a\xb1\x5d\x51\xe4\xd9\x18\x0c\x79\xe9\x8a\xc2\xdb\xdb\xcb\xd4\x1a\xde\xde\x9e\x61\x17\xc4\x74\x4f\x91\x67\xdd\x03\x07\xa9\x69\xbc\xbd\xf5\xd2\x69\xf5\x28\x61\xcf\x5e\x07\x79\x7b\x8b\xee\x03\x22\xcf\xe0\x07\x22\xb1\x7d\x41\xe4\x79\x8e\xec\x33\xfb\x84\x5e\x60\x80\x4e\xd5\x9b\xb7\xb7\xe7\xe0\x39\x07\xad\xf8\xfc\x18\x59\x07\xac\x05\xbd\xbd\x1d\xbe\x4a\xf4\xf6\x16\x59\x3a\x0f\xad\x2c\xfd\x14\xa1\x51\x58\xc5\xf3\xb8\x5f\x49\xeb\x5c\x7c\x07\xcb\xb8\xc1\x9f\x11\x4e\xee\x87\x16\x75\x5e\xfd\xd4\xae\x86\x5d\x2d\xb5\xa3\xaf\xcd\x0a\xec\xce\x47\xe0\x2a\x62\x67\x59\x30\x0d\x13\x20\x9a\xde\x03\x46\x5c\x08\x2c\x47\xc2\x52\xb0\x75\x6b\xec\x56\xc7\xf1\xcd\x16\x2f\x15\xa4\x86\x90\x4c\x88\xfb\xb2\xf0\x47\x05\xd3\x8a\x63\x1c\x4c\xc6\x13\x91\xfb\xfc\x69\x9b\x4d\x67\x4e\xbc\xe3\x05\x23\x5b\x67\xcc\x7e\x8e\xe4\xe0\x25\xed\x8c\xaa\xff\x68\x19\xf9\xfe\x41\xa8\x22\xff\x40\xf5\x87\x93\x13\xfc\xe1\xe9\x3f\xc2\x43\x33\xab\x25\xb0\x7e\x39\x51\x22\x87\x5d\x29\x52\xde\x5e\x9d\xc7\x66\x37\x98\x20\x5f\x1b\xa5\x39\x71\xc7\xd6\x9f\x7e\x42\xb9\x66\xa7\x95\x29\x7a\x4c\x70\x7f\xa1\xee\x97\x0a\x7e\xac\x2d\xd5\x9e\xeb\xfb\x0e\xc2\x23\x32\xab\x95\xab\x23\x7b\xac\x87\x7b\xec\xca\xbe\xdb\x2a\x7c\x55\xcd\x38\x2b\xe3\x05\x8f\x7b\xe7\x63\x07\x9c\xca\x3b\x15\x72\xc2\xd2\x14\xb0\xd0\x66\xf5\xaa\x13\xe1\xa1\x31\xea\x23\x67\xf8\x7e\x6b\xef\x84\x13\x73\x91\x29\x71\xb6\x3a\x4e\x42\xb9\x07\x3f\x00\x6d\xab\x75\xb6\x86\x25\x4c\x99\x65\x51\x10\xac\x7e\xf5\x2e\x3c\xfc\xb9\xee\x89\xc8\x29\x02\x4c\xf5\xfc\xae\x58\x25\x70\xb8\x2e\xa2\x5f\x17\x5c\xe8\xe1\xc6\x18\x6e\x8c\x95\x1b\x63\xed\xe0\x3d\xdf\xa5\xb1\x36\xd4\x70\x6f\xf4\xfc\xde\xe0\x34\x07\x55\xd0\x04\x3e\x23\x0f\xb3\x35\xff\xdb\xbc\x35\x4f\xbe\x6a\x94\xd3\x06\x99\x47\xf5\x0a\x78\xa8\x1a\xbc\xb1\xb0\xdf\xd4\x87\x42\x95\xbc\x51\x6b\xb5\x41\x8c\xe5\x9b\xab\x51\x7f\xc1\x94\x78\x35\x5f\x70\x50\xe8\x7c\x85\x2a\xf6\xb4\x31\x38\x8e\x15\xfe\xda\x08\x41\x53\xbb\x59\x78\xba\x0a\x4a\x53\x8f\x88\x7e\xe0\x1c\x28\x57\xe4\xc8\x07\xc5\x1e\xab\xfa\x89\x1d\x8b\x2a\x3f\xd6\xaa\xf2\x56\x15\x45\x27\xff\xe7\xff\x9e\xb6\x4a\x5a\xd5\x04\x0d\x5e\xfe\x9d\xdb\xe0\xe5\x0f\x6a\x83\x97\x7f\xf0\xf2\xc7\xe8\x6b\xf0\xf2\x0f\x5e\xfe\x8d\x6d\xf0\xf2\x0f\x5e\xfe\xc1\xcb\x3f\x78\xf9\xd7\xdb\xe0\xe5\x1f\xbc\xfc\x8d\x36\x78\xf9\xbb\x93\x35\x78\xf9\xf7\x6c\x83\x97\x3f\xa6\x97\xbf\x36\x5c\xf4\xcd\xfa\xd6\x34\x69\xb9\x4c\x56\xd4\x3e\x35\xd5\x2c\xa9\xd1\xa3\xfc\x53\xf6\x5f\xfd\x32\xc5\x35\xcd\x64\xcf\x63\x88\x6b\x1a\xfb\xd6\xec\xa9\x91\xec\x70\x5b\xad\x6e\x95\x5d\x6e\x6d\xe4\x67\x35\xc8\x0d\xe6\xf6\x6e\x54\xd6\xa9\x65\x7d\x3b\xea\x77\x1e\xcc\x40\xcd\x45\x99\xa5\x46\xb8\xad\x90\x0e\x52\x72\xe2\x3d\x6b\xa7\x66\x2b\x72\xa1\xdb\x5f\x72\xcd\x46\xf5\x13\x55\xa2\x20\xba\x05\x7d\x35\x8f\xf0\x25\xf6\x36\x82\xda\x7b\xe4\x70\x17\xaa\x24\xfb\xfa\x74\x98\x1b\x1a\x64\xeb\x1d\x98\x22\x29\x4c\x19\xb7\x20\x2d\xb2\xe4\xdc\x08\xe7\x82\xbb\x1c\xfa\x60\xfa\xac\x48\x60\x5d\x7d\x8e\x0f\x59\x93\x06\xce\x07\xda\x35\xea\xe5\x6f\xa4\x49\x53\x64\xa2\x94\x3b\x9c\x77\xc1\x9d\x53\xd5\x7c\x62\xfb\x09\x26\xad\x62\x51\xb8\x22\xac\x7a\xfb\x70\xee\xf4\x1e\xb9\x52\xf3\xc5\x98\xc2\xfd\x41\xb3\x4c\x3c\x84\x4b\x1b\x51\xce\x75\xe4\xb2\x35\x81\xa7\xed\x61\xef\xaa\x37\x2b\xb9\xbf\x61\x9a\xed\x50\x30\x67\xc7\x36\x14\xcc\x79\xba\x0d\x05\x73\x1e\x2f\x98\xd3\x88\x6c\x6a\x56\xce\xe9\x3a\xdb\x58\x6f\xe7\x00\x95\x73\x08\xf9\xcb\x1c\x90\x6f\x48\xb0\xe1\x48\x65\xa6\x59\x51\x23\xa2\x29\xbb\xf2\x99\x35\xc4\x4d\x1d\xb2\x4e\x9b\x8b\x19\x1a\x69\x32\xef\x48\xc0\x0a\x0f\x44\x2a\x10\x77\x4d\xe1\xcd\x66\x11\x65\xd0\x0f\x6c\xcb\xca\x78\x0b\x9d\x05\xf6\x61\x9f\x3f\xfe\x47\xc0\xad\xf3\x0e\xc5\x9e\x76\xbc\x9d\x22\x27\x46\x5a\xca\x96\x2e\xea\xac\x75\xfd\xb4\xc4\xac\xce\xc3\x5a\x2f\xc2\x02\xbc\x8a\x36\x63\x0b\xe0\xb5\x8c\x76\xa2\x4e\x4f\xbd\xae\xb8\x2a\x7b\x76\x1e\x33\x44\x66\xed\x7e\xaf\xee\x2b\x6b\xae\xc8\x8a\x9d\xc7\xdd\x20\x63\xfe\x47\x43\x16\xfb\xcf\xa7\xa5\xcc\xce\x43\x5b\xd6\xe6\xe1\x96\x1a\xdb\xaa\x96\x2e\x3b\xf6\xdd\x13\xec\x98\x70\x18\x90\x18\x7e\xd8\x68\xf0\x1f\x71\xeb\x53\x1d\x02\xf6\xe3\x00\x90\x1f\xbf\xa4\x82\x51\xbd\x0c\xfe\xe9\x9d\x9d\xe9\x39\xd0\xe2\x7b\x1d\xec\x33\xc0\xc5\x07\xf5\xf3\x8b\x82\x8b\x3f\x50\x30\xcf\x2f\x10\x35\xbe\x07\xc1\x3b\x87\x0c\xdc\xf9\xc5\xa1\xc6\xf7\x28\x50\xa7\x97\x41\x3a\x7d\x0b\xd0\x19\x60\xd8\x83\xda\xe7\x09\xc3\x1e\x35\x08\x27\x36\x1f\xe9\x61\xf0\x4d\x0f\x03\x6f\xfa\x1a\x74\x13\x51\x52\x7e\x9e\x60\x9b\x48\x2c\xe0\x79\x82\x6c\xe2\xa5\x46\xc7\x3c\x95\x87\x86\xcf\xe8\x45\x2e\x74\x9f\x61\x33\x7a\x95\x00\xdd\xaf\xe4\xe7\x43\x24\x3e\xf7\x06\x26\xe3\x80\x10\x19\x71\xc4\xc0\x08\xc2\xdf\x73\xf0\xfb\x78\xb2\x58\x54\x38\x8c\xa8\x3c\xff\xf0\x30\x18\x5f\x2c\xdb\x8f\x08\x7f\x31\x70\xfe\xad\xad\xef\x9c\xff\xb9\xe1\x2e\x0e\x0b\x75\x31\xf0\xff\x9d\x5a\x54\x58\x8b\x67\xf6\x9c\xbe\x24\x9c\x45\x3f\xa0\x2c\x5e\x0c\xc6\xa2\x3f\x10\x16\x2f\x06\x5f\x31\x78\xac\x07\x8f\x75\xbb\x0d\x1e\xeb\xc1\x63\xbd\x4f\x3f\x83\xc7\x7a\xf0\x58\x0f\x1e\xeb\xc1\x63\x1d\xd8\x06\x8f\x75\x47\xa2\x06\x8f\xf5\xe6\x36\x78\xac\x07\x8f\xf5\xe0\xb1\x5e\x6b\x83\xc7\x3a\x88\xc0\x9e\x7a\xac\xe3\x40\x42\xc4\x3c\x91\x7d\x82\x82\xe8\x03\x0c\xc4\x4b\x41\x40\xf4\x0e\xfe\x61\x30\x41\xef\x46\x5d\x1c\xa8\x87\x98\x47\xb8\xdf\x10\x0f\x7d\x86\x77\xe8\x29\xb4\xc3\xf3\xc0\x3a\x3c\x27\xa4\x43\xf0\x99\x8d\x7a\x5a\x0b\x91\x5e\x70\xcd\x7c\x0a\xd9\xfe\xe7\xb4\x75\x3a\xdf\xe1\x1f\x13\xb0\x67\xac\x75\x60\x9a\x79\xf2\xb2\xcc\x40\xb9\x34\x71\xba\x10\x2c\x25\x45\xa9\xb5\xcd\xbc\x75\xe7\xd3\x6f\x7c\x9a\xdb\x4c\xf9\x33\xf2\x4f\xc1\xe1\x8c\x80\x4e\xc6\x66\x73\x63\x0e\xba\xd0\x73\x90\xe6\xf1\x13\x75\x7a\xba\xff\x9a\x04\xc9\x67\x61\xa6\xbd\x42\xc2\x14\xe4\x67\x81\xac\x80\x9e\x67\x07\x5f\x20\xad\xc3\xdb\x52\x8f\x21\x02\xee\x0b\x7b\xfc\xb4\x70\x59\xef\x78\xec\x6d\xda\x79\xd7\x1b\x12\xf1\x0d\x5a\x1b\x08\x1a\x6e\x8e\x2d\x18\x07\x67\x64\x52\x6a\xc2\x34\x02\x03\x24\x73\x21\x54\x57\xee\xe2\x92\x94\xf1\x45\x16\x4c\x58\x73\xba\xe0\x80\xa8\x03\x42\x56\x3c\xb0\x41\x94\x55\x25\xea\x9f\xb1\xae\xca\x56\x2e\x94\xae\x77\x88\x37\xce\x9a\xc1\xab\x3b\x67\x26\xc1\x50\xa4\x89\x2a\x73\x43\x8a\x05\x54\x51\x16\x02\xa0\xe3\xb0\x53\x23\x62\xd1\x64\xde\x78\x85\x1c\x40\x5b\xd7\x9c\xcf\x72\x6e\x1c\xe2\xa6\xce\x74\xe2\x73\x5e\x3b\x8e\x6d\x3a\x03\xa5\xcf\xb6\x22\x8e\x6c\xdf\x0b\x96\x27\x9c\x76\x35\x4a\x25\x22\x2f\x4a\x0d\x46\x8e\x2f\x73\xb3\x9b\x98\xc6\x88\x15\x64\x46\x52\x94\x33\x3b\xe1\x1e\xe4\xc1\x4e\x44\x8d\x20\xc2\x53\xa2\xca\x89\x96\x34\xd1\xdd\x6f\xff\x23\xbb\x7c\x47\x55\x60\x11\xd2\xc2\xa6\x15\x4e\x08\x99\x53\xd5\x8c\xb8\xa9\xaf\xd7\x27\x70\x72\xfe\x47\xc0\x05\x6b\x06\x3e\x51\x0d\x41\x67\xce\x66\x73\xbf\xe7\x8c\x92\x8c\xa6\x85\xd6\x5e\xfd\xdc\x01\x26\xcc\x01\x76\x47\x09\xa5\x96\x7a\xe3\xdb\x19\x4f\xc9\x5f\xf0\x5b\x48\x57\xd3\xae\x71\x3b\x58\xdb\x01\x4d\x53\x23\x8f\x80\x1c\xd9\x83\x24\xc8\x94\x39\x4d\x69\xe5\x64\xbb\x19\xee\xca\x21\xfb\x01\x12\xb0\xb2\xe3\x02\x7a\xb2\x33\xdf\xb1\x83\x18\xae\xb6\x95\x57\x89\xa6\xb4\xdc\xb8\x69\x1e\x93\x0b\x2b\x18\x79\x36\x66\x34\xf8\xb3\x35\x18\xac\xf5\x53\x6d\x67\xa6\x07\x41\x11\x71\xfc\xb5\x31\x90\x25\x48\x44\xf7\x6a\x34\x84\x09\xf2\x32\xe5\x7f\x5e\x00\x69\x82\x1c\x06\x6d\x82\x0c\xa5\x67\xfa\x15\xcb\x43\x86\xd2\x33\x3d\x8b\xed\x21\x43\xe9\x99\xa1\xf4\x4c\xf7\xd6\x87\xd8\x1f\x32\x94\x9e\xe9\x41\x2c\x10\x19\x4a\xcf\xec\xd2\x86\xd2\x33\x43\xe9\x99\xf5\x36\x94\x9e\x19\x4a\xcf\x34\xda\x50\x7a\xa6\x3b\x59\xbd\x8b\x27\x22\x3d\x8e\x29\x22\x43\xe9\x99\xc8\xa5\x67\xe2\x65\x49\x93\x67\x38\xb9\x87\x46\xc8\x20\x7d\x49\x97\x26\x3d\x47\xca\x20\x7d\xcb\x99\x26\xbd\xcb\x9b\x26\x07\xca\x9d\x26\x7d\x42\xce\x20\x87\x45\xcf\x20\x7d\xcc\xcf\xfb\x3c\x2a\x17\x45\x45\xd4\x20\xcf\x71\x57\x1c\x1e\x59\x83\x7c\xe9\xd7\x45\x44\x84\x0d\x32\xdc\x18\xbb\xb4\xcf\xe1\xc6\x78\x6e\xc4\x0d\x72\x70\xd4\x0d\x32\xdc\x1b\x5d\x5b\x54\x24\x0e\xf2\x32\x1e\xe6\x97\x44\xe4\x20\xbd\x41\xe5\x20\x2f\x89\xcc\x41\x7a\x85\xce\x41\x5e\x12\xa1\x83\x0c\x5e\xfe\xc1\xcb\xbf\x73\x1b\xbc\xfc\x83\x97\x3f\x46\x5f\x83\x97\x7f\xf0\xf2\x6f\x6c\x83\x97\x7f\xf0\xf2\x0f\x5e\xfe\xc1\xcb\xbf\xde\x06\x2f\xff\xe0\xe5\x6f\xb4\xc1\xcb\xdf\x9d\xac\xc1\xcb\xbf\x67\x1b\xbc\xfc\x31\xbd\xfc\x71\xd0\x44\xc8\x33\x9c\xda\x3e\xa1\x8a\x90\x9e\x20\x8b\x90\x17\x44\x17\x21\x7d\x44\x18\x21\x83\xb9\xbd\x33\x95\x71\x50\x47\xc8\x33\x1c\xf5\x7e\xa3\x8f\x90\x9e\x23\x90\x90\xfe\xa2\x90\x90\x67\x43\x22\x21\xcf\x8c\x46\x42\x62\x9d\x6b\x9b\xa2\xda\x17\x9c\x1f\x4b\xcd\x5a\x66\x6d\xab\xc2\xff\xa3\x89\xf3\x61\x9a\xad\x3b\x34\x92\xf2\x19\x90\xd7\xa3\xd7\xaf\x5e\x85\xe7\xee\x32\xae\x61\x06\x21\xd6\xcb\xa9\x90\x39\xd5\xd8\xd3\xef\x7e\xdb\xa9\x9f\xe8\x6c\x7b\x1b\xdc\x43\xff\x60\x50\x9c\x4d\xa4\x0d\x43\xd1\x92\xfe\xb7\x60\x92\xa0\x56\x60\x4e\x6b\x0e\x9a\x74\xf6\x0d\x34\x80\x37\x34\xcb\xe1\xcc\xf3\x7e\x1b\x13\xe1\x03\x00\x1c\x1a\x4b\x4a\x04\x77\x22\x9b\x61\x77\x5d\xf7\x5e\xf7\x57\x4e\x80\x2a\x44\x3e\x98\x80\x79\xed\x8e\xe3\x53\x6d\x61\x7e\x0a\xc1\xb8\xf6\x86\x1e\xf3\xce\xe0\x37\x84\xc3\x10\x4a\x4b\xb0\x16\xd4\x3a\xc6\xa9\x2c\x52\xaa\xe1\x34\x44\x55\x54\x4b\xa5\x21\x47\x28\x19\x23\xe9\x51\x0c\xfe\x21\x5a\x2e\x31\x00\x64\x01\x5c\x97\x34\xcb\x96\x04\x16\xcc\xc5\xef\x98\xe1\x31\x7a\x89\x69\x15\x34\xf3\x7f\x99\x03\x72\x10\x09\x36\x30\xa9\xcc\x34\x2b\xb2\x1a\x85\xc4\x2e\x7f\x66\x4d\x72\x53\x07\xba\xd3\xe6\x67\x86\x46\x9a\xcc\x3b\x12\xb0\xc2\x0d\x91\x0a\xc3\x80\xa4\xc2\x3b\xce\xe2\xcc\xa0\x47\xd8\xa8\x0a\xaa\xb2\xd5\x59\xcc\x1f\xf6\xf9\x23\x81\x04\xdc\x3f\xef\x50\x00\x6a\x47\xde\x29\x72\x62\xe4\xa6\x6c\xe9\xe2\xcf\x5a\x17\x51\x4b\xe0\xea\x3c\xac\xf5\x27\x2c\xc0\x2b\x6b\x33\xb6\x00\x5e\x4b\x6b\x27\xea\xf4\xd4\x6b\x8d\xab\x52\x68\xe7\x31\x43\xa4\xd7\xee\x37\xec\xbe\x52\xe7\x8a\xd4\xd8\x79\xdc\x0d\xd2\xe6\x7f\x34\xa4\xb2\xff\x7c\x5a\xde\xec\x3c\xb4\x65\x6d\x1e\x84\xa9\xb1\xad\x6a\x39\xb3\x63\xdf\x3d\x41\x91\x09\x07\x04\x89\xe1\x91\x8d\x06\x04\xf2\xcc\x05\x93\x5e\x00\x00\xe4\x00\xe0\x1f\x43\xe1\x9e\xa1\x70\x4f\xbb\x0d\x85\x7b\x86\xc2\x3d\xfb\xf4\x33\x14\xee\x19\x0a\xf7\x0c\x85\x7b\x86\xc2\x3d\x81\xad\x47\x21\x3b\xbd\x0c\xd7\xe9\x5b\xa8\xce\x50\xb8\x27\xa8\x0d\x85\x7b\x86\xc2\x3d\x43\xe1\x9e\x46\x1b\x0a\xf7\x84\x1c\xcd\x78\x49\xd2\x31\x4f\xe5\xa1\x81\x34\x7a\x91\x15\xdd\x67\x00\x8d\x5e\xa5\x42\xf7\x2b\x0d\xfa\x10\x29\xd0\xbd\x01\xcc\x38\x20\x58\xc6\x50\xe7\x69\xa7\x16\x15\x18\x23\x2a\xcf\x3f\x3c\x20\xc6\x17\xcb\xf6\x23\x02\x61\x0c\x9c\x7f\x6b\xeb\x3b\xe7\x7f\x6e\xe0\x8b\xc3\x82\x5e\x0c\xfc\x7f\xa7\x16\x15\xe0\xe2\x99\x3d\xa7\x2f\x09\x6c\xd1\x0f\x50\x8b\x17\x03\xb4\xe8\x0f\x98\xc5\x8b\x01\x59\x0c\x1e\xeb\xc1\x63\xdd\x6e\x83\xc7\x7a\xf0\x58\xef\xd3\xcf\xe0\xb1\x1e\x3c\xd6\x83\xc7\x7a\xf0\x58\x07\xb6\xc1\x63\xdd\x91\xa8\xc1\x63\xbd\xb9\x0d\x1e\xeb\xc1\x63\x3d\x78\xac\xd7\xda\xe0\xb1\x0e\x22\xb0\xa7\x1e\xeb\x38\xe0\x10\x31\x4f\x64\x9f\x40\x21\xfa\x00\x08\xf1\x52\x60\x10\xbd\x03\x82\x18\x4c\xd0\xbb\x51\x17\x07\xf4\x21\xe6\x11\xee\x37\xd8\x43\x9f\x81\x1e\x7a\x0a\xf2\xf0\x3c\x00\x0f\xcf\x09\xee\x10\x7c\x66\xa3\x9d\x56\x5a\x6a\x91\x8b\x92\xeb\x5b\x90\x0b\x96\xc0\x45\x92\x98\xbf\xee\xc4\x3d\xec\x99\xd5\xdf\x3a\xa2\x17\x8f\x74\x4b\x18\x4f\x59\x82\xb6\xc9\x87\x39\xe8\xb9\x4b\x9b\xc3\xe7\x08\xb5\x0f\x12\x8d\x4f\xd6\x27\x14\xe9\x34\x77\x2c\x66\x76\x63\xd7\xfb\x2e\x81\x9d\xa1\x89\x10\x19\xd0\x7d\x5c\xd1\x4e\x66\x04\xb9\x27\xa3\x0e\xe3\x59\xdf\x3b\x51\xa2\x1e\x9d\x4c\x20\x13\x7c\xe6\x72\xc8\x1d\xd7\xd9\x77\x17\xbe\xad\xbb\x73\xae\xda\xa4\x94\x12\xb8\xce\x96\x38\xcd\x69\x0a\x29\x41\xf3\x54\x2e\x16\xfb\x6f\xf2\x3b\x64\x47\x5e\x87\xa7\x9a\x64\x40\xcd\x7b\x70\xa8\x5f\xc4\x30\x34\x4a\xae\x3b\xd0\x5e\xf9\x96\x2d\x88\x40\xa7\xf5\xdf\xff\xc6\xee\x74\x47\xb7\x4f\x83\xd7\xcb\x50\x4a\x4b\xd0\xc8\xd7\x98\x0f\x64\x90\x4b\x51\x92\x07\x6a\x55\x29\x59\x72\x64\xa9\x38\x51\x1d\x16\x39\x40\xe9\xe8\x6e\x8c\x1f\xe1\xbd\xb4\xe7\xcf\x42\x8c\xe3\x54\xce\x3a\x89\x4e\x31\x64\x89\x0b\x39\x2b\xad\xa6\xe8\x8e\x22\x70\x2d\x97\x88\x87\xd1\xed\x5e\xb8\x9b\xb7\x4e\x48\x4e\x67\x70\xac\xc8\xdb\x0f\xef\xcc\xad\x83\x11\x48\x6c\x6a\x65\x76\x77\x0b\x15\x52\x2c\x58\xda\xf5\x1a\xfa\x81\x4a\x46\x27\x99\xd1\x7a\xa7\x20\x81\x1b\x49\xfa\xab\x93\x1f\x2e\x6e\xfe\x7e\x75\xf1\xe1\xfd\x29\xea\xbf\xf0\xa9\xa0\xdc\xb0\x83\x52\xd5\xc8\x3c\x8e\xc2\x63\x45\x80\x2f\x98\x14\xdc\xcc\x02\xda\x0d\x29\x59\xb8\x4e\x3b\x51\x54\x07\x8e\x48\x50\x22\x5b\x40\x6a\xb1\x34\x2a\x02\xeb\xf0\x9d\xa2\xd4\xde\x82\xea\x63\x6f\x4a\x9e\xcc\x29\x9f\x41\x3a\x26\xef\x44\x69\x5e\xec\xab\xaf\xf0\x25\x24\xa4\x65\x02\xdd\x74\x1c\x6b\x82\xb7\x27\xf7\xab\x33\x2f\xb3\x98\xdb\x1f\x63\x6f\x08\xa8\x84\x16\x7e\x6a\x9a\xb3\xa7\x96\x5c\xd3\x4f\x6f\x2c\x16\xc7\xd1\x57\x8d\xaf\x8e\xba\x07\xae\x15\x52\x98\x57\xb1\xb2\xa0\x7d\xfb\x8c\x69\x90\x34\x23\x47\xcd\x11\xc6\xe4\xbd\xa1\x0b\xd2\xe6\xda\x5a\x30\x1a\x58\x80\x44\xdb\xaa\x5b\xd9\x33\x22\x61\x46\x65\x9a\x81\xea\x66\x14\x12\xd3\xea\x0a\xb7\xa6\x16\xb7\xab\xa0\xb2\x19\x73\xa1\xc7\xa1\x8c\xdb\xb7\x0f\x02\xc1\x4e\xa6\xe2\x0d\x99\x6b\x5d\xa8\x37\xe7\xe7\xb5\x14\x34\x66\xe2\x3c\x15\x89\x3a\xd7\x54\xdd\xab\x73\xc6\x0d\xf3\x1b\xa5\x54\xd3\x51\x83\xeb\x9e\x5b\xd9\x78\x94\x88\x3c\xa7\x3c\x1d\x51\x77\x8e\x47\xd5\xce\x3e\xff\xb5\x93\x1e\x47\xb4\x7a\x8a\xf1\x11\x1d\xa9\x39\x74\x5a\xb9\x30\x45\x31\x40\x41\x0c\x14\x32\x23\x2b\x84\x6e\x2e\x0f\xc5\xb0\xdf\x57\xfc\xd9\x2e\xc5\x98\x5c\x09\xed\xf0\x8a\x5c\x44\x25\xde\xb6\xb8\xca\x31\x59\xf8\xfb\xab\xbb\x9b\xbf\x5e\x7f\xbc\xbc\xba\x1b\x38\xf9\xc0\xc9\xb1\x0d\x9c\x7c\xe0\xe4\x1d\x06\xee\x0b\x27\x07\xbe\x38\x14\x17\xf7\x4a\x71\x83\x63\x55\x5b\xd5\x25\x0a\x54\x61\xde\xd5\x3e\xe8\xb6\x45\xa3\xec\xf4\x83\xed\x98\xd6\x64\xbf\xe7\x8b\x1f\x68\x3b\xe2\x84\x6f\x9c\x42\xe2\x1e\xb0\x1a\xfa\xdb\xb0\x09\x0c\xf6\x7c\x85\xc6\x85\x75\x52\x48\x6d\x0b\x8f\xd9\x32\x43\x77\x37\x78\xc7\x33\x77\x5f\xd1\xbc\xb2\xd5\x6e\x5a\xf2\x10\x2b\xe6\x07\xeb\x50\x55\xee\x50\x52\xbe\x24\x85\x64\x5c\xe3\x56\xba\xb8\x7d\x7b\x79\x49\x92\x39\x95\x34\xd1\x20\x15\x81\x4f\x09\x14\x9a\x1c\xff\xcf\xe3\xee\x63\x46\xf0\x75\xa0\xf5\xba\x0f\x2b\xb3\x8f\xe0\x16\x30\x4c\x2d\xf2\x15\x12\x16\x4c\x94\x2a\x5b\x56\x1e\x82\xcd\x7c\x74\x95\x81\x12\xca\x43\x28\x30\xfb\xc2\x9b\x77\x37\x0e\xb8\x22\x74\x6e\x12\x20\x43\x6c\xed\x87\x15\x3d\x1d\x11\x31\x04\xd0\x80\xf1\x37\x88\xae\xbb\x8b\xa1\x01\xe3\x76\x12\x60\xb7\x09\xa3\x01\x74\xb4\xc5\xd8\x80\x8e\xde\xd9\xbc\x2e\x14\x36\x8e\x02\xa6\x26\x16\x27\xfb\x5a\x8a\x3c\x12\x37\xbb\x45\xc0\xc2\x2a\xcf\x6e\xd3\x51\x3d\x76\xc1\xeb\x2d\x45\xc0\xa9\xb4\x55\xa6\x9b\xf9\x3c\x30\xdb\x2d\x4a\xd4\x4c\x9c\xc0\xeb\x44\xf0\x29\x9b\x7d\xa0\xc5\x77\xb0\xbc\x81\x69\x98\xaf\xbe\x3d\xdf\xe8\xb6\x74\xe1\xbf\x78\x81\x1a\x91\xcb\x0e\x16\xe6\xba\x8c\x16\x74\x14\x2b\x34\x3f\x3c\x2c\x3f\x5e\x14\x7d\x94\x08\xfa\xd6\x42\xba\x6c\xe1\x3a\x5d\x36\x56\x82\x45\x94\xc0\xcc\x30\x49\xd4\xb7\xf8\xd1\xd1\x4d\xc9\xd4\x5d\x0f\x51\x82\xcc\xef\x6a\xb4\x73\xa6\x08\x4c\xa7\x90\x68\xb6\x80\xac\x42\x48\x4f\xcf\xc8\xa4\xd4\x1e\x9b\x7c\x42\x93\xfb\x07\x2a\x53\x45\x12\x91\x17\x54\xb3\x09\xcb\x98\x5e\x12\x16\xa3\xbe\x96\x0b\x15\x70\x80\xeb\x3e\xc6\x9a\x2b\x4d\xf1\x2a\x14\xce\x10\x68\x56\xdb\xc6\x50\x50\x9f\x20\x67\xb9\xa9\x07\x1a\x8f\x42\x4a\x2e\x94\x26\x09\x48\x23\xd4\x65\x4b\xf2\x20\x45\x8c\x1a\x18\xbb\x1a\x73\x12\xc1\x8d\xfc\xaf\xce\xc5\xc2\xc8\x82\xf0\x70\xfe\x20\xe4\x3d\xe3\xb3\x91\x79\xf1\x91\x65\x56\xea\x1c\x63\x5b\xce\x7f\x8d\xff\xe9\xd3\x29\x22\x3e\xa3\xfb\x0d\x39\x3a\x0a\xec\x4b\x14\x36\x8c\x33\xf2\xa9\xbc\xc5\x00\xa1\x65\x4b\x74\xaa\x2e\x14\x23\xfa\x30\xad\x90\x4f\x79\xf7\xbc\xd3\x02\x22\x4d\xf3\xfe\x81\x15\xeb\xed\xb9\xca\x8c\x21\x3b\x88\x7b\x7b\x07\xf3\xc0\xfa\xfa\xb7\xcc\xca\xb1\xc2\x42\xa4\x6f\x88\x2a\x8b\x42\x48\xad\x48\x0e\x9a\xa6\x54\xd3\xb1\x39\x10\x67\xed\x3f\x31\x04\xec\x8c\xfc\xa3\xfa\xd0\xe2\x11\xfc\x78\xfc\x1f\xdf\xbd\xff\xeb\x7f\x1e\xff\xf4\x8f\xe6\x77\x28\xae\xd9\xec\xa2\xc6\x03\x81\xaf\xa0\x0a\x48\xc6\x5c\xa4\x70\x85\xd4\xe1\x9f\xaa\x15\xf0\xe3\xbe\xd0\x54\x97\x6a\x3c\x17\x4a\x5f\x5e\x57\x7f\x16\x22\x5d\xfd\x2b\x30\xc7\xa9\x87\x72\x0f\xae\xed\x35\xd5\xdd\x11\xe6\x49\x54\xe9\x87\x16\xec\x07\x90\xaa\x73\xcd\x96\x66\x6b\x9d\x07\xd7\x6b\x05\x85\x9f\xcc\x21\xa7\xf8\xcf\xaf\xfd\x14\x98\xfb\xf8\x41\x32\xad\x31\x06\xcc\x15\xa8\x10\xd3\x33\xcf\x5a\xad\x52\xb5\x78\x1d\x5c\xa0\x2d\x2a\xe7\xaf\x56\x30\xf2\x84\xe1\x8c\xb8\xd9\xb2\x1c\xa0\x86\x5b\x59\x0b\xf9\xbc\xb8\xbe\x24\x0b\x3b\xc3\x3d\x9a\x9c\xe7\x63\xd7\x19\x44\x57\xb7\x82\x19\xf6\xd7\x15\x55\x6e\x99\x1a\xaa\x9b\x53\x98\x91\xf2\xd0\x05\xba\xb1\xcc\xc7\xa6\xe3\xbe\xe7\x0b\x33\xae\x22\x53\xa0\xba\x94\x40\x66\x54\xfb\x02\x3e\xc0\x8d\x4e\x1e\x98\xa2\xd2\x43\x9e\x19\x9e\xc2\x3d\x22\x45\x28\xcb\x35\x9d\x2c\x44\x56\xe6\x78\xb9\xf5\x84\x7b\xc7\xd7\x5d\xa3\xa8\x72\x5e\x01\x76\x51\x14\xad\xc3\x40\x2e\x0c\xb3\x5f\x60\xce\xb1\x7d\x06\x4d\x8f\x58\xa6\xa9\x5d\x9b\x49\x69\x2a\x75\x94\xba\x7c\xa4\x06\xf0\xf2\x96\xee\x3a\xc0\xc3\x5a\xb9\xf2\x17\xf7\x5d\xd4\xcd\x16\x4f\x23\x17\x59\x31\xc7\xcc\xa1\x59\xa5\x07\x6f\x3c\xed\x67\x15\x84\x83\x62\xff\x44\x0b\x5b\xc6\x72\xa6\xad\x5a\xf9\xfa\xb7\x7f\x6c\x10\xda\xa3\xbb\xe1\xd9\xd4\x9c\x28\x3b\x76\x93\xae\x64\xb6\xeb\x23\x6a\x52\x95\x1c\xed\x9f\x8b\x83\x34\x91\x0a\x70\x26\x53\x4c\xab\x36\x23\xd4\x27\x68\x41\x65\x15\x25\x54\x4e\x32\xa6\xe6\x71\x4a\x58\x5f\x4e\xab\xd5\x31\xfd\x2b\xc0\xb0\x63\x2d\x4b\xa8\x12\xba\x6a\xd9\xc3\xcc\xc5\x0a\x95\x11\x48\xd8\x66\x62\x6e\xd7\xcd\xab\xdd\xf9\xd7\x98\xbb\x55\x47\xc3\x8f\x7f\xf5\x6c\xf3\x30\xa5\x99\x7a\xb9\x89\xa0\x9c\x80\x94\x42\x56\x6e\x28\x09\xba\x94\xbc\x4e\x72\xbf\x16\x29\x49\x24\x58\x68\xc2\x1e\x29\xeb\xa4\x69\x14\xc1\x39\x0b\xec\xae\x88\x2f\x64\x47\xbb\xde\x0c\x6d\xcd\xfb\xcd\x8a\x06\xf6\xe2\xb2\xde\xbc\x36\x58\x62\x0c\x41\xd0\xb4\x0f\x8e\x09\x55\x45\xe4\xcc\xb6\xf4\x25\x0f\xdd\x69\xc0\x01\x8f\xc7\xe3\x63\x4b\xa5\x90\xf6\x2a\xb5\x16\x45\xf3\x79\xaf\xae\x85\x5a\xa8\x7a\x06\x33\x3c\x6f\x18\x95\xdd\x12\x61\xae\x90\x9f\x2a\xef\x62\x8d\x25\xab\x7f\x06\xca\x94\xaf\x44\xf6\x75\xaf\x6d\x60\x9e\x4a\xbf\x78\x15\xa3\x7f\x63\x53\xf5\xab\x7a\x6a\x56\xf8\xb1\xf8\x34\x46\xe5\x00\xa5\x43\x0d\xc5\x27\xb6\xcb\x71\x52\x94\x67\xae\xfb\x71\x0e\xb9\x90\xcb\xea\x4f\x28\xe6\x90\x83\xa4\xd9\x48\x69\x21\xe9\x0c\xce\xaa\xc1\xed\xcf\xaa\xbf\xec\x0f\x5b\xe4\xad\xff\xda\x46\x77\xd4\x99\x57\xce\xde\xf7\x05\xea\x72\x7e\xdd\x7a\xa2\x40\x55\xdb\xea\x19\xf8\xcf\x71\x15\x30\x67\x7d\x6e\xd5\x2c\xa2\x4b\xdd\x72\x23\x75\x56\x0b\x1c\x18\xf7\x61\x85\x3c\x75\xdc\x1f\x3e\x44\x48\xca\x16\x4c\xc5\x80\xd1\xda\xe0\x9e\x60\xce\xae\x21\x4a\x5d\x94\xda\x55\xbe\xae\x2c\x28\x9f\x0a\xa1\x30\x5a\xa4\x2a\x9e\xd8\x32\x0d\xbe\x0e\xf5\xbc\xa0\x8c\xa1\x41\xf2\x37\xe4\x7f\x9f\xfc\xed\x37\x3f\x8f\x4e\xff\x74\x72\xf2\xe3\xab\xd1\xbf\xff\xf4\x9b\x93\xbf\x8d\xf1\x1f\xff\x7a\xfa\xa7\xd3\x9f\xfd\x1f\xbf\x39\x3d\x3d\x39\xf9\xf1\xbb\x0f\xdf\xdc\x5d\xbf\xff\x89\x9d\xfe\xfc\x23\x2f\xf3\x7b\xfb\xd7\xcf\x27\x3f\xc2\xfb\x9f\x76\xec\xe4\xf4\xf4\x4f\x5f\x05\x93\x4e\xf9\xf2\x63\x20\xf7\xb6\x6d\x14\xad\x70\xf9\x6a\x8f\x91\x5c\x6d\xad\xab\x90\x71\x3d\x12\x72\x64\xbb\x7e\x83\x4a\x4a\xe0\x00\x7e\x7b\xc5\x3e\xff\x37\x9e\x6b\xd6\xb7\x59\x25\x14\xf6\xe8\x80\x3f\x97\xa0\xa1\x20\x91\xa0\x5f\x22\x4c\xc6\x8e\xe4\x35\xc3\x15\x54\x8f\x2f\xed\x06\xfd\x25\x44\xce\x54\xf5\x93\x71\x5d\x6b\x4d\xca\xa8\x57\xe3\x5a\x09\xa2\xc4\xda\x11\xdd\x73\xf7\x10\x08\xa8\x4e\x86\x48\x9b\x90\x36\x44\xda\x6c\x21\x65\x88\xb4\x09\x6a\x9f\x65\xa4\xcd\xad\xe5\x49\xbf\xc8\x30\x9b\xf5\x04\x33\xd3\xe9\x7d\xe7\x82\x33\x9d\x33\x77\xb6\x65\xba\xe5\xb4\xd8\xbb\x37\xe0\x8b\xae\xc1\xd5\x31\x53\xdd\xbc\xd9\x43\x0b\x52\x88\xa2\xcc\xa8\xde\x92\x45\x11\x29\xef\xad\x67\x9e\xb3\xbf\xcc\x81\x3b\xd1\xcf\xc5\xf0\x33\x4e\xf2\x32\xd3\xac\xe8\x98\x10\x50\xa9\x96\x15\x38\x24\xa1\x4a\x89\x84\x51\x9f\x08\xee\x80\xad\x94\xf6\xaf\x8c\x96\x79\x4d\xef\x31\x87\x26\x81\x14\x78\xd2\xd1\x72\xf8\x83\x05\xa3\xf4\x73\x3b\x59\x9a\x7b\xe8\x3d\x5f\xb8\x3b\x89\xa4\xa5\x4d\x70\x85\xda\x57\x1a\x65\xdc\x2f\x2b\x9b\xd1\x9c\x4b\x97\xad\xd0\x48\x6a\x44\x09\xb2\x32\x22\x56\xe0\xd9\x55\x08\x24\xa6\x7f\x58\x36\xdd\xed\xc2\x0b\x56\x0e\xc2\x45\xf1\x2a\x1b\x21\x48\xc7\x5a\x93\xc1\xeb\x30\xd1\xb6\xec\xdd\x79\x84\x1e\x25\x70\x84\x4b\xe5\x71\x25\xf2\xe7\x90\xc6\xfb\x22\x89\xf7\x44\x0a\x7f\x1e\x09\xbc\x9f\xd2\x77\x34\xc9\x3b\x8e\xd4\x1d\x47\xe2\xde\x23\xae\x3d\xa6\x94\x1d\x47\xc2\x7e\x0e\xfb\x5a\x21\x61\xca\x3e\xf5\x21\x6d\xf9\xa3\x77\x5f\x68\xf8\x84\xa6\x9a\x42\x42\x01\xbc\x42\x1e\xf6\x1e\x58\xa0\xc9\x7c\xc8\x38\x27\x95\x5d\x34\xee\x85\x7d\xbb\xc9\x52\x36\xdc\xd6\x64\xb8\xad\xf7\x68\xc3\x6d\x3d\xdc\xd6\x2f\x72\x5b\x3b\x6e\xf5\xe5\x5f\xd5\x91\x91\x96\x10\x43\xee\x50\x06\xa8\xb7\x6d\x28\x3b\xe4\xcc\xcf\x89\xf6\x55\x1d\xc5\x3a\xc6\xf3\x1c\x47\xee\x76\xe2\xda\x4c\xb6\x0a\xba\xd0\xc2\xb2\x3d\x32\x67\x33\xb3\x3d\x33\x58\x40\xe6\xd4\x6a\x92\x53\x4e\x67\xb6\x84\x89\x16\x55\x09\x5f\x21\xb1\x42\xa9\x64\x1d\xd1\xd3\x57\x30\x01\xd1\x82\x65\xb8\x4c\x26\x68\x8a\x5f\x4a\x91\x65\x46\x5e\xc9\xd8\x3d\x90\x77\x50\x64\x62\xe9\xaa\x90\xf0\x94\xdc\x6a\xaa\x61\x5a\x66\xb7\xa0\x3b\x85\x77\x07\x71\x1c\x24\xf8\xba\xcc\xb2\x6b\x91\xb1\xa4\x93\xf7\x2f\xc6\x56\xbc\xc4\x0d\x58\x94\x59\x46\x0a\x24\xa4\xdb\x3e\xfc\xc8\xf1\x2a\xbf\xc8\x1e\xe8\x52\x9d\x91\x2b\x58\x80\x3c\x23\x97\xd3\x2b\xa1\xaf\xad\x11\xa9\x5b\xbf\x4d\x4c\x10\xdb\x39\x61\x53\xf2\x06\xcb\x2f\x6a\xa2\xe9\x0c\x63\x8b\x7d\x18\xf1\x99\xd9\x50\xcd\x41\x89\x30\x8c\xf2\x81\xa9\x43\xda\xf6\xc2\x4f\xe9\xaf\x71\x74\x73\x75\x76\x3e\xb5\x41\x7b\x35\x63\x53\x48\x96\x49\x76\x30\x86\x79\x91\x60\x7a\x6d\x5d\xec\xa5\xc1\x4e\xd4\x52\x69\xc8\x3d\x9e\x3d\x9a\x74\x19\x27\x12\x54\x21\xb8\x42\x29\xaf\xe6\x12\xd5\x8b\x10\x4c\x92\xe9\x98\xd4\x11\xd1\xe2\xdb\x59\x31\x08\x55\x09\x0a\xa1\xf4\xad\xa6\x52\x77\x95\x4f\x62\xe9\x02\xd7\x9e\x10\x73\x92\x13\x9a\x65\x90\x12\x96\xe7\x90\x32\xaa\x8d\xdc\x4e\xa7\x1a\xab\x18\x34\x58\xbd\xb2\x31\xfb\x8d\xbc\x91\x39\xe5\x69\x06\x92\x4c\x29\xcb\x54\xf7\xcc\x81\x36\x34\x97\x91\xcf\x41\xe6\x8c\xa3\xf7\xc2\x46\x9d\x62\xf4\xb7\xf9\x2b\x49\x84\x4c\x5d\xbd\x00\xa6\x95\xff\x2a\x88\x89\x9a\xf6\x11\x25\xbb\xc6\xf6\x5e\x0d\xda\x25\x93\x4c\x24\xf7\x8a\x94\x5c\xb3\xcc\xbe\xbc\x10\xf7\xa8\xbf\x64\xc8\x4e\x3a\x0f\xdd\x9d\x4b\x55\xff\x1c\x55\x07\x6c\x64\xa8\x52\xe7\xbf\xae\xbf\xc2\x0f\x3a\x12\x17\x41\x8b\x8e\xa1\x43\xc3\x27\x48\xa2\x95\xda\x79\xff\x09\x92\x56\xa1\x2b\x07\xa4\x6a\x76\x94\x03\x4f\x8e\xe4\x77\xb4\xad\x67\x75\xbb\x03\x40\xab\x9b\x2d\x76\x48\xcf\x5b\xb7\x08\xae\x64\xaf\x5f\x93\x8c\x71\x68\x2f\x8c\x62\x29\xb4\x17\xc7\xba\x3d\x9d\x92\x4b\x52\x26\xb1\xc6\xd0\xd2\xa3\x7e\x05\x93\xe6\x69\xc1\x32\x3c\x42\x68\x72\x72\x7c\x7e\x7c\xba\xb6\x47\x8e\x15\xa6\x5f\xd8\x6b\x71\xec\xa0\xb3\xab\x97\x52\x2c\x2f\xb2\x25\xbe\xc7\x71\x7a\x46\x98\x8e\x11\x23\x64\x6e\x43\x59\x72\x3f\x2b\x0e\xea\xfb\x8c\x28\x41\xb4\xa4\xbe\xb4\x9e\xfd\xd4\x3c\xa4\x65\xe9\x2e\xf4\x93\xe3\x9f\x8f\xcf\x08\xe8\xe4\x94\x3c\x08\x7e\xac\x71\xfa\xc6\xe4\x4e\x90\x32\x38\xe7\x89\xd4\x84\x2c\x45\x49\x38\x80\x3b\x5b\x45\xc6\x12\xa6\xb3\x25\x5e\x37\x44\x94\x36\x43\xcf\x88\x16\x01\x10\xe5\xcd\xf6\xfe\x13\xd3\x0e\x7c\xc3\xf0\xef\x57\xb8\x9b\xec\x95\x45\xa8\x51\x46\x16\x70\x3e\x07\x9a\xe9\xb9\xcd\x66\xe0\x82\x8f\xfe\x09\x52\x20\x8c\x39\x77\xdf\x7c\x71\x65\xe2\x23\x06\x32\x3d\x53\x45\x35\x73\xed\x7d\x03\x9d\x45\x22\xb2\xca\x8f\xbe\xbd\xbb\xbb\xfe\x06\x74\x93\xcb\x73\xfc\x90\x7c\xf3\xfe\xce\xe7\xb0\xa0\xa1\x1f\xe4\x54\xc8\xbc\x07\xec\x3d\x4e\x70\xed\x88\x14\x42\xf6\xe1\x96\x99\x0b\x15\xb4\x9c\xe4\x19\xae\x98\x6f\x85\xd2\xd6\x97\x63\x75\x13\x8e\x89\x8d\xa2\x9d\x90\xe1\xd3\xf7\x2f\xaf\xc7\xe4\xaf\xa2\x34\x13\x32\xa1\x93\x6c\x59\x15\x32\x52\x10\x5a\xf4\x94\x90\x23\x43\xca\x91\xb9\x41\xcc\xce\xff\x16\x68\x0a\x52\x21\x83\x06\x1a\xa9\x3c\x6b\x84\xe3\xde\xa0\x2d\xea\x52\xbe\x2d\x95\x16\x39\x99\xbb\xd7\x6e\x43\x9c\xbb\xc3\x39\xb6\xc7\xd5\xc1\xc9\x4a\x28\x2c\x13\x77\xbf\xf9\xe2\x58\xf4\x1a\xf7\xb2\xf3\xee\x3e\x9f\x58\x31\xb5\x39\x6d\xce\xc1\x61\x81\x4a\x1d\x6f\x33\x5b\x35\x5a\xdc\x6b\x94\xf2\xbe\xf1\x72\x06\x48\x18\xf8\xf9\x6a\x47\xe8\xec\x09\xee\x29\x5e\x1a\x02\x89\x16\x6a\x4f\x9e\xad\xec\xbf\x11\x68\xdd\xe6\xb3\x36\xe8\xee\xd6\xf3\x4d\x9d\x33\x55\xa1\x05\x24\x94\x0b\xce\x12\x9a\xb1\x7f\x42\x4a\xca\x42\x70\x97\x5b\x87\x92\x6d\x42\x15\x8c\xd0\xf3\xce\xb5\xab\x45\x5c\xa3\x5d\x1b\xee\xa0\x85\x40\x71\x0f\x83\xe7\x0c\xbb\xb7\x54\xc7\xac\x7d\x1f\xad\xbc\x7c\x20\x74\x7b\xb3\xad\x39\xd4\x5b\x8b\x15\x67\xc7\x93\xcf\x42\x9c\x24\x91\x80\x17\xd6\xb1\xcd\xb4\x20\x34\x49\x10\xcf\xdb\x5e\x57\xc8\x78\x15\xc8\x45\xf8\xfe\x8a\x36\xaf\x46\x04\xec\x9b\xec\x65\x63\x0e\x24\xe1\x65\x3e\x01\x59\x03\x43\x4a\xbd\x3e\xa7\x51\xac\x2e\x6e\x58\x3b\x9c\xf7\xd2\x7a\x19\x83\xf2\x19\x90\xd7\x66\xe4\x3f\xfc\xfe\xf7\xbf\xfb\x7d\x84\x71\xcc\xeb\x55\x25\x42\x39\xb9\xbc\xb8\xba\xf8\xfb\xed\x0f\x6f\x11\x6e\x3e\xb4\xfb\x48\x49\xb2\xb1\x53\x64\xa3\x26\xc8\x3e\x6b\x7a\x2c\x02\x37\x06\x73\xd9\xd8\x47\xe2\x16\xa9\x32\x9b\xb0\x54\x16\xa2\xde\xe9\x24\x8d\x6a\xb8\x46\x8d\x0a\xdf\x9d\x4d\x67\x9e\x61\x58\xbd\xe0\x54\x2a\x03\x28\xa2\x69\xfc\xb7\xa6\xb7\x56\x39\x20\x92\x96\xd2\x56\xa5\xad\x9c\x57\xb5\x2d\xdf\x39\xad\x90\x86\x2f\x48\xf9\x57\x90\x08\x9e\x86\xa8\x00\xb1\x44\x5a\x47\x49\xd4\x33\x77\x6b\xfb\xf4\x26\xe2\xfa\x2a\x71\x83\xa1\x26\x19\xba\xa2\xa4\x5a\xd5\x38\x7c\xd2\xa2\x41\x60\x6f\x7f\xf8\xb7\xee\x0e\xb2\xa4\xb8\x15\xc9\x7d\x44\x13\x59\x20\x03\x7b\x67\x4e\x5a\x62\x7d\x81\x77\x6f\xaf\x2d\x71\x66\x65\xae\x3e\xde\xd5\xd0\x2f\x46\x0a\xa7\xe4\x7b\xef\x9b\xfa\xd6\x79\x0b\x29\x4f\xc9\x3d\x14\x61\xda\xa5\x61\x98\x3e\x8c\xb0\x1d\x45\x38\x76\x25\xbb\x11\x65\xce\xa6\x57\x5b\x46\xe0\xa3\xff\xac\x44\x1c\x56\x01\xa8\xe1\x9c\x47\x47\xa0\x53\x42\xa6\x94\x65\x84\xa2\x55\x5e\xb3\x1c\xc8\xc3\x1c\xb8\x35\xf6\xd7\xd1\x12\x5f\x10\xc3\xf9\x52\xad\x8d\xc7\x3e\x24\xfc\xcd\xde\x56\xc3\x50\x54\x8c\x2f\x5b\x0d\x70\x3c\x5b\xb6\x50\xcd\x06\x35\x60\x97\x36\xa8\x01\x1d\xd5\x80\x42\xc2\xad\x16\x9d\x65\xcd\x68\x01\x37\x96\x8c\x2d\xe1\x36\x13\x98\x0a\x09\xab\xf1\x36\x8d\x38\x18\x17\x39\x1f\x10\x19\x7c\x71\x7d\x59\xf9\xbe\x44\x2b\xd6\xc5\x22\x17\xab\x32\x99\x7b\x37\x29\x07\xa5\xce\x31\xb2\xa6\x2c\xac\x61\x19\xaf\xb6\x52\x42\xf7\x28\x9f\x42\x02\xe4\x38\x8f\x67\x35\x9a\x90\x79\x5d\xe0\xf6\x43\xd0\x89\xf5\x9b\xfb\xb0\x22\x87\x13\xeb\xa7\x6b\x1a\xe4\xce\xaf\x27\x36\x91\x54\xcd\x01\x73\x67\xe1\x13\xd3\xca\x0e\x6a\xd1\x58\xfd\x8c\x1b\x79\x61\x26\x69\x02\xa4\x00\xc9\x84\x11\x31\x4a\xae\x53\xf1\xc0\xc9\x04\x66\x8c\x2b\xbf\x62\x21\x24\xf9\x2d\x81\x91\x44\x4c\x55\xb5\xbb\xc7\xe4\xa6\x55\x39\xce\xa1\x8b\x25\xa2\xe6\x99\x6e\x8a\xce\x22\x4d\x09\x0a\x2f\xb8\x0d\x4a\x9a\x65\xcb\x7a\xe3\x35\x01\x42\xb7\xcc\x50\xf7\x0d\x61\x67\xf6\xa4\xe4\xf8\xa2\x29\x64\x74\x69\x33\xc8\xa7\x8c\xa3\xf5\x57\xaa\xd3\x71\x78\x68\x56\x67\x02\x85\x6c\xf4\xb9\x75\x67\x30\x45\x24\xd0\x24\x08\xc7\x78\x88\x01\x7b\xaa\x0d\x31\x60\x43\x0c\xd8\x10\x03\xb6\xde\x86\x18\xb0\x76\x1b\x62\xc0\xb6\x13\xd4\x67\xa7\xdd\x10\x03\x36\x58\x65\xd6\xdb\x10\x03\xd6\xa9\x0d\x31\x60\x4f\xb6\xde\xb1\xe8\x21\x06\x6c\x87\x36\xc4\x80\xed\xd8\x86\x18\xb0\x21\x06\x6c\x88\x01\x1b\x62\xc0\x02\xda\x10\x03\xb6\xff\xeb\x0d\xce\x9f\xee\x6d\x88\x01\x1b\x62\xc0\xf6\x6c\x43\x0c\xd8\x4a\x1b\x62\xc0\x86\x18\xb0\xc7\xda\x10\x03\x36\xc4\x80\xb9\x36\x58\x1b\xd7\xda\x10\x03\xb6\xa1\x0d\x31\x60\xfb\x8d\x33\xa8\x01\x61\x9d\x3d\x8b\x1a\xa0\xb4\x28\x6e\xd9\x2c\x00\x17\x32\xd6\x31\xb8\xad\x28\x71\xa0\x91\xca\x15\xdb\x55\xf6\x43\x6f\xc7\x52\x0e\xb2\xaf\x19\x11\xd6\xb8\x49\x26\x60\x54\x04\xf3\x5a\x45\xc8\x6d\x72\x39\x45\x07\x72\x03\xc9\xcd\x9c\x0a\x0f\x13\xc8\x5a\x65\x1d\xda\xe2\xb3\xbf\xdd\x18\x37\xba\x4b\x77\x0a\x1a\xf3\x91\x50\x6e\x2b\xa3\xba\x32\xd9\xe6\x7a\xbf\x16\xa9\xf2\x95\x24\xb8\xe0\x23\x0b\xd6\x3a\x36\x04\x8f\x85\x1a\x07\x58\x83\x03\x91\xd9\x6c\x8c\xdc\xb5\x14\x93\x83\xa1\xb3\x5d\x63\xfc\x11\x4b\x5c\x80\x9e\x98\xb6\x10\xd7\x2c\x81\x1d\x91\xd6\xda\x81\x61\x58\xac\xd9\x43\x70\x31\xc7\xb0\xab\xa0\xc0\x43\xa2\xb9\xed\x1d\x39\xe5\x51\x2a\xd5\x79\x21\xec\xff\xd5\x71\x53\x8d\x80\xa9\xce\x7e\x94\x03\xc3\xcb\x85\x44\x49\x1d\x2c\x42\xaa\x27\x11\x66\x11\xa2\xa2\x62\xca\x4a\x3d\x8d\x86\xea\x67\x24\x54\x1f\xa3\xa0\x0e\x11\x01\x75\xf0\xe8\xa7\x38\x6e\xf5\x08\x2e\xf5\x48\x12\xe9\x33\xb8\xa7\x5c\x20\xfd\xdd\x5c\x82\x9a\x8b\xac\x33\xc3\x89\xc5\x6c\x3e\x30\xce\xf2\x32\xc7\x2a\x14\x86\xa7\xb0\x45\x15\xec\xaf\x3c\xcb\x70\xd7\xbd\x8d\x38\xc0\x72\x15\x29\x60\x19\x70\xca\x32\xb3\xb5\x10\x2c\x74\x4e\x17\x28\x94\x96\x49\x02\x90\x86\x88\xa5\x4d\x6b\xf5\xef\xc6\x15\x85\x16\xa3\x9f\x29\xf2\x3a\xec\xaa\x09\xd3\x7b\x1a\xe6\xbc\xdf\xfd\xb6\x53\x1f\x33\x59\xc4\xb9\xa5\xbf\xb9\xb9\x7e\xdb\xba\xa5\xf1\x83\x6f\xf1\x18\xbf\x9d\x43\x72\x7f\xe3\x42\x69\x0e\x77\x33\x87\x9b\x99\x82\x4c\x4c\x31\x04\x83\x50\x2b\x4a\xdb\x87\x2c\xa4\x5e\x71\x81\xce\x70\x15\x41\x2e\x58\x02\xe3\x17\x30\x54\xc4\x52\xfe\xc3\x0f\x02\x41\x37\x01\xbe\x78\x5f\xc4\xae\x5b\x4b\x4e\xe5\x61\x68\xd8\xa8\x1c\xa5\x18\x34\x9a\xd1\xa4\x5a\x9b\xd9\xe6\x43\x17\x44\xc6\x89\x02\xa8\x14\x9a\x19\xd3\xf3\x72\x32\x4e\x44\x7e\x6e\x58\x87\xfd\xbf\x49\x26\x26\xe7\x39\x55\x1a\xa4\xd1\x71\xdc\xb5\x3e\x4a\x0c\x05\x8c\xcf\xc6\x79\x7a\x3a\xfe\x55\x10\x0d\x97\xce\x56\xee\xd2\xb0\xb6\x18\x09\x26\x60\xf8\xbe\x90\x2b\xd6\x02\x33\x29\xe1\x9b\x34\xf8\xfe\x0e\x2d\x2a\x12\x18\x96\x7c\x90\x90\xe4\x81\x6b\x93\x08\x0e\x81\x98\x4c\xa5\x1f\x61\xc7\xcf\x16\x72\x1c\xe5\xac\x46\x0a\x35\xee\x51\x98\x71\x6f\x74\xa1\xbe\x84\x16\x47\x0b\x2b\x8e\x15\x52\x1c\x25\x9c\x38\x46\x28\x71\xbc\x30\xe2\x38\x21\xc4\xf1\xc3\x87\x9f\x2d\x74\xf8\xb3\x08\x1b\x8e\xe8\x1f\x8b\x14\x2e\xfc\x12\xa1\xc2\xfd\xb5\xc1\x90\x08\xe1\xc1\x2f\x17\x1a\x1c\x65\x1e\xa3\x6a\xb1\x81\x2c\xe1\x00\xa1\xc0\x2f\xe1\xff\x7f\x36\xdf\x7f\x04\xbf\x7f\x4c\x9f\x7f\x34\x7f\xff\xb3\x85\xfc\x86\x87\xfb\x46\xb5\x29\xbc\x48\x98\x6f\xcc\x10\xdf\xe0\xf5\x65\x9c\x69\x46\xb3\x77\x90\xd1\xe5\x6d\x58\x20\x68\xac\x95\xb8\x5a\x0b\x16\xb5\x66\xeb\x76\x5c\xc3\x9c\x2a\xe2\x5d\xdd\x0e\xe2\xc5\xfb\xd2\x9d\x08\x4c\x28\x7a\x9c\xcd\xfb\x75\xf6\x5a\x93\xfe\x79\xae\x49\x6f\xcc\xe3\x16\x57\xa5\x27\xbb\xe6\x5b\xf1\x40\xc4\x54\x03\x27\x27\x8c\xfb\x9d\x73\xda\xb0\xd2\xd4\xee\x91\x60\x7f\x87\xe9\xf5\xf5\x2b\x3f\xc8\x97\xe7\xf7\x40\xcf\x90\x52\xbd\xf6\x7c\x39\x1a\x9f\x76\x7d\xb9\x07\xa7\x65\xd6\x76\x7f\x59\x97\x58\x1c\xdf\xd7\xeb\x31\xf9\xe0\xc4\x89\xd7\x48\x4f\xc5\x8a\x28\x4f\x89\xc3\xe7\xfa\xf2\xf6\x49\x70\xa8\x7b\x5b\xb9\xa9\x62\xd3\xdb\xf1\x2c\xf6\x06\x36\x52\xa6\x20\xd4\x3c\x85\x02\xe8\x60\x74\xed\x8d\xd1\xf5\x40\x11\xd8\x5f\x9e\xb6\xf5\xf2\x11\xd7\x83\xb6\xf5\x4b\xd1\xb6\x1a\xb0\x78\xdf\x48\x9a\xc0\x75\x9f\x84\x37\xcf\x40\xea\x44\xc0\x5a\x86\xab\xd8\x05\x07\xb0\x89\x63\x35\xe8\x21\xe2\xfb\x4d\xcb\x2c\x5b\x5a\x1b\x62\x0b\x01\xb3\xfb\xd6\xba\x9b\xc3\x1a\x74\x20\xba\x52\x37\x50\x57\xeb\x26\x85\x14\x4e\x22\x91\x25\xe7\x46\xc4\x70\xc7\xc9\x10\x6f\x74\x11\x05\xbc\xbb\x39\x9d\xb6\x80\x0d\x5d\x10\x3a\x06\x7a\xce\x81\xd4\xf9\x4b\x6d\x42\xcc\xa8\x53\x21\x13\x36\xc9\x96\x64\x4e\x33\xa3\x2c\xb9\x20\xed\x7b\x96\x65\xae\x9b\x80\xa0\x70\xd0\xd6\xf5\x6c\x25\x9a\x4c\xf0\x19\x4e\x06\xb5\x84\xc0\xa7\x02\x12\x33\x66\x92\x01\xe5\x65\x61\xe9\x34\xf2\xd1\x52\x94\xd2\xd3\x19\x14\x15\xdf\x18\x9d\x29\xc2\x59\x76\xe6\xa7\xbc\x0d\x81\xb9\xbe\xe7\x6b\x93\xb2\x82\xd4\xa1\x57\x3e\x30\x05\x67\xd8\x67\x67\x9a\x2c\x2d\xbe\x6a\xbf\xdd\x37\xf6\xb3\x42\x8a\x05\x4b\xeb\x18\x7d\xb3\x2d\x30\x3e\xbe\xf3\x58\x3f\x60\xbf\x9e\xb5\x72\xc1\x47\x1c\x66\x14\xc5\x63\xc7\xd0\x6c\x44\xa7\x1d\xdf\xc6\x0f\xf2\x94\x25\x54\x83\xc2\x9c\x84\x16\xb4\xed\x82\xd1\xce\x94\x98\xf7\x69\xec\x28\x72\xc2\x05\x11\x98\x59\x58\x72\xa6\x97\xe8\xd1\x9b\x97\x9a\xa4\xe2\x81\x9f\x86\x1c\x4c\x1b\xe6\x40\xc9\x04\x34\xad\x93\x03\xbd\x48\xa6\x08\x70\x3a\xc9\xcc\xd9\xc3\x88\xff\xbb\x8d\x1b\x80\x4c\x81\xea\x52\x02\x99\x51\x1d\xc0\x25\x36\x48\xf3\x76\x3d\x1f\xdf\x76\x4c\x39\x7f\xdd\x94\x94\x5c\x41\xa0\x20\x1b\x4d\x05\xe8\x98\xf1\x6a\x4e\xb4\x28\x75\x4f\xee\x91\x6d\xa6\x23\x9b\xb9\xd3\x50\x12\x59\x0e\x8a\x88\x32\xc0\x92\xd7\x52\xff\xdc\x70\x31\x35\xbc\xc1\xee\xb4\xb1\x75\x75\x9b\xc6\xd8\x61\x57\x0d\xa9\xbc\x81\x4f\xe0\xc3\xad\x6c\x06\xf5\xbb\xab\xdb\xbf\x7f\x7f\xf1\xbf\xde\x7f\xdf\x6d\xe1\xdf\xd3\x64\xde\xc4\x16\xe7\x84\xe2\x45\x81\x4c\x7e\x4e\x17\x40\x28\x29\x39\xfb\xef\xd2\x85\xbc\x9d\x54\xe3\x75\x64\xab\x51\xd2\x7b\x82\x04\x5f\x73\x4b\x74\xe2\x1c\x31\xd6\xf4\x7b\xa6\x10\xa8\x1a\x89\x70\x81\xff\x42\x01\x99\x4a\x91\xaf\x28\x5a\xe4\xaa\x0a\xae\x5b\x9a\x1b\x86\x5a\xd5\x6c\x0e\xb2\x9b\x44\xfe\xee\xe3\xfb\x5b\xcc\xc1\x2f\xa4\x05\x76\xc7\xe4\x02\xec\x13\x47\xb7\xa9\x83\x96\x9e\x74\x4c\x2e\xf8\xd2\x7e\x69\x99\x59\x47\x11\x25\x63\x4a\x03\x0a\xa7\x4e\x91\xf4\xe1\x81\x47\xaf\xc6\xf8\xbf\x23\x42\xd3\x54\x1a\x4d\xb3\xca\xd1\x48\x56\xb3\xcc\x3a\x8d\x6c\xf5\x57\x36\xc9\x1a\x93\xcb\x41\x63\x1a\x47\xa7\x0e\x3f\x88\xd4\xad\x04\x0a\x81\x18\xbf\x63\xa5\x5b\xa5\x25\xd5\x30\x63\x09\xc9\x41\xce\x80\x14\x54\x27\x73\x92\xd3\x25\x49\x84\x94\x65\x61\x21\x46\x52\xaa\x69\xb7\x91\xbf\x16\x92\xe4\x9e\x3b\x1b\x6e\x66\x44\xf2\xdb\xcd\x81\xa0\x35\xcb\x6e\xfe\x93\x29\x55\x82\x3a\x7f\xfd\xea\x8f\xbf\xfd\x7d\x47\xf5\x3a\xe2\xc1\xed\x1a\xfa\x14\x10\xf2\xd4\x0e\xff\xf2\x1b\x0c\x83\xae\x5b\xc8\x30\x6e\x87\xd8\x9d\x8f\xdc\x50\x31\x3e\xcb\x82\x0d\x20\xc1\x66\xc0\x50\x23\xe0\xa8\x7e\x83\xeb\xae\xb6\xc0\x70\x4b\x60\x8b\x86\xee\xa6\x94\x78\x56\xb0\x5a\x82\xf3\x76\x2f\xc7\x90\x05\x6f\x28\x76\x97\xd7\x9e\x4b\x85\xd8\x8f\x50\x9b\xa8\x0c\x53\x16\x7d\xc4\x0e\x6b\xe3\x1d\xce\xc8\x2b\xf2\x1f\xe4\x13\xf9\x0f\xb4\x82\xfd\xa1\xfb\x50\x71\x6c\x4c\x31\xc2\xf8\xe7\x42\xe9\xcb\xeb\x48\x0b\xfd\x17\x73\x5f\x99\x1e\xcd\x7a\x68\x41\x26\xcc\x99\x23\xe0\x93\x06\x69\xd4\x40\xb7\x86\xa1\x33\x17\x64\x51\x33\x04\x7e\x2e\xbb\x3b\x34\xb8\xe0\x72\xda\x8e\xfe\x7f\xa1\xfd\x8d\x03\x7f\x2b\x94\xbe\x72\xdc\xba\x09\xa1\xd3\xa4\x23\xc7\x8b\xb8\xc5\xee\x43\x46\xfd\x60\xf6\x5e\x5d\x63\x83\xa4\x02\x13\x20\x6c\x0e\xe7\x9c\x05\x30\x87\xfe\x9c\xd8\xb0\x38\xd1\x78\x5b\xf7\xb1\xad\xb5\x62\xd3\x47\x8b\x8c\x53\x52\x1a\x65\x69\x0a\x91\x8e\x51\xbf\x09\xa0\xc2\xcc\x46\xda\x10\x06\x1e\x51\x8d\xc6\x56\x5f\xab\xbc\xc3\x78\xe0\x0c\xc7\x4a\x28\xef\x2a\xc3\xda\x26\x61\x0a\x52\xda\x3c\xe1\xc9\xd2\xa7\x1b\x05\xef\xb6\x20\x2e\x57\x48\xa1\x45\x22\x3a\xc3\xa6\xc4\xdc\x2a\xd7\x8e\x16\x9c\x7b\xf4\xd5\x56\xde\xf1\x3f\xbf\xbb\x3e\x23\x77\x6f\xaf\xcf\x88\x90\xe4\xf6\x6d\x58\xf0\x53\xd3\x04\x73\x74\xf7\xf6\xfa\xe8\xa0\x2b\xd0\xc8\x61\xba\x7b\x7b\xdd\xa1\x93\xf5\xf0\xd9\x9c\x16\xa3\x7b\x58\x76\x94\xee\x62\x48\x98\xa3\x6a\x63\x45\x79\x21\x3b\xcd\x39\x2d\xf6\xee\x4d\x02\x4d\x59\xaf\x91\x5c\x7c\xd6\x61\x45\x69\x3c\x48\x97\x5c\x2c\x20\xb5\x5a\xb3\x1f\x05\x78\x5a\x08\x66\x74\xa4\x01\xe7\xe5\xb1\x36\xe0\xbc\xec\xdf\x06\x9c\x97\x4d\x6d\xc0\x79\xd9\xa3\x0d\x38\x2f\xb6\x0d\x38\x2f\x6d\x42\xfa\x98\x63\x34\xe0\xbc\x3c\xd9\x06\x9c\x97\xad\x6d\xc0\x79\xd9\xab\x0d\x38\x2f\xeb\x6d\xc0\x79\x79\xa4\x0d\x38\x2f\x55\x1b\x70\x5e\x06\x9c\x97\xcf\x97\x6b\x0f\x38\x2f\xab\x6d\xc0\x79\x19\x70\x5e\x06\x9c\x97\x66\x1b\x70\x5e\xb6\xb4\x01\xe7\x65\xc0\x79\x19\x70\x5e\x1e\x6f\x03\xce\x4b\xe7\x36\xe0\xbc\xec\xd7\x86\xcc\xc3\x3d\xdb\x80\xf3\x32\xe0\xbc\xac\xb6\x01\xe7\xe5\xc9\xd6\x0f\xf3\xf8\x80\xf3\x32\xe0\xbc\x3c\xda\x06\x9c\x97\x01\xe7\xe5\xd1\x36\xe0\xbc\x74\x68\xbd\x33\xba\x0e\x38\x2f\x03\xce\xcb\x63\x63\x0c\xda\xd6\x7e\x6d\xc0\x79\x19\x70\x5e\xd6\xda\x80\xf3\xb2\xde\x06\x9c\x97\x01\xe7\x65\xc0\x79\x19\x70\x5e\xaa\x36\xe0\xbc\x7c\xe9\x76\x27\x09\x8a\xfd\x13\xae\x45\xc6\x92\x65\x70\xb6\xcf\x0d\x28\x51\xca\xc4\xdc\xd8\xd8\x2d\x29\xb0\xdf\xca\xa2\x10\x24\x64\xf7\x0c\x42\xe1\xa6\x31\x71\x4d\x28\x05\xe9\xe6\xe0\x39\xa6\xa0\x17\x70\x0a\xfe\x05\xaf\xba\x47\x10\x8c\x7c\xf9\x6c\x3b\x7d\xdd\x8c\xa5\xc1\x5a\x7b\xf3\x45\xfa\x90\xce\xd9\x84\x3d\xaa\x76\x91\x16\x15\xb3\x65\x5b\x37\x17\x2d\x8a\x8c\x85\x24\xc6\x12\x72\x5b\xa2\x74\x01\xce\x05\xae\xde\x90\xa4\x28\xcf\x48\x0e\xb9\x90\x01\x89\x11\x11\x34\xb8\xd6\x56\xe9\xc3\x3a\xdd\x58\x82\xfc\xe4\x6b\x81\xf3\xbf\xb4\xfa\x42\x8d\x52\x55\xad\x15\xf3\xec\x30\x28\xd6\xec\x72\xba\x1a\x8c\xca\x74\xcb\x0a\x74\x25\xf4\x8d\x3b\xdc\x07\x5b\xaf\xc8\x11\x0b\x7e\x0a\x0f\x86\x5a\xf5\x56\xe4\x45\xa9\xa1\x75\xb1\xd9\x29\xb6\x4a\x07\x53\xa1\x0c\xfd\x30\xd9\xa0\x89\xe0\x53\x36\x73\xda\xf7\x79\x4e\x39\x9d\xc1\xa8\x9a\xed\x51\x0d\xf5\x70\xde\xf9\xa2\x3e\x58\x2a\x68\x92\x51\xd6\x3d\x70\x30\x16\x9b\x78\x8b\x54\x20\x0c\x58\x1d\x50\x8f\xb9\x69\xd5\x34\x9f\x55\x61\xe3\xcc\xf2\x8d\xb1\xff\xca\xfe\xf8\x2c\x40\x7b\xa4\x1a\x6d\x15\xa8\x18\x6d\xd8\xa9\x61\x0a\xa3\x55\x13\x53\x28\xc0\x68\x04\xd6\x80\xda\x5d\xee\x5f\x72\x9a\xb3\xc4\x9f\xb0\x8b\x2c\x13\x89\xb5\xc9\xb4\xb5\xca\x18\x24\x1b\x65\x37\xcf\x4b\x4d\x27\x19\x8c\xc9\xa5\x85\xa8\x10\x3c\x5b\x9a\xf3\xa7\x40\xfb\x10\x05\xb7\xf9\xc3\x34\xc9\x90\xf8\xd7\xc0\xd8\xd7\x8d\x42\x39\x6e\x2a\x8b\xa9\x01\xdc\xb0\x32\xc1\x81\x00\xd7\x72\x69\xf6\xdf\xb5\x48\x6f\xcd\x16\x6c\x3d\x1d\x0c\xb5\x11\x18\xf2\x1a\x23\xdc\x35\x30\xd4\x35\x4e\x80\x6a\x78\x70\x6a\xdc\xc0\xd4\xda\x85\x60\x91\x82\x9a\x19\x3f\xad\x6d\x51\x88\x74\xbc\x81\x35\x11\x31\x0d\xa4\xc0\x8c\x78\x2d\x52\x23\x34\x49\xb0\xfc\xa9\x3a\xa3\xd6\x80\x78\x69\x88\xbb\x47\x8b\x1f\xd5\xb5\x34\x45\x17\x94\x65\xe6\x00\x07\x12\xb0\x8e\xba\x18\xe6\x95\x89\xe4\xab\x70\xc1\xf9\x7d\xda\x2c\x2e\xad\xab\x95\x19\x96\xcc\x85\x02\x8e\xfc\x92\x56\x19\x3c\x55\x7e\x81\x63\x31\xa9\xbd\x8b\x43\xa3\x88\x2f\xa7\x04\xf2\x42\x2f\xcf\x08\x2c\x40\x2e\xf5\x1c\xa3\x0d\x2a\xdc\x50\x64\x6b\x4c\x91\x9c\xa6\x8d\xdd\x71\x46\x84\x37\x40\x07\x0e\x8f\xf7\x83\xd3\xc9\xca\x4c\x5b\x0d\x8d\xa9\x2a\x8d\xe2\xd0\xbb\x26\x36\x9c\x0d\x09\x65\x9a\x31\xe1\x68\x08\x42\xa9\xe6\xac\x1b\x70\x2d\x89\x78\x16\xbe\x47\x2a\x1a\xa9\x23\x66\x4b\xe4\xf4\x13\x9a\x27\x69\x2e\x4a\xae\x2d\x4e\x8d\xd5\x18\x2a\x29\xcf\x26\xd8\xbc\x60\xbc\xdc\xb3\xca\xf6\x24\xce\xd5\x4e\x53\x0f\x4d\x71\x1d\x23\x4f\x99\x6a\x0d\x92\xbf\x21\xff\xfb\xe4\x6f\xbf\xf9\x79\x74\xfa\xa7\x93\x93\x1f\x5f\x8d\xfe\xfd\xa7\xdf\x9c\xfc\x6d\x8c\xff\xf8\xd7\xd3\x3f\x9d\xfe\xec\xff\xf8\xcd\xe9\xe9\xc9\xc9\x8f\xdf\x7d\xf8\xe6\xee\xfa\xfd\x4f\xec\xf4\xe7\x1f\x79\x99\xdf\xdb\xbf\x7e\x3e\xf9\x11\xde\xff\xb4\x63\x27\xa7\xa7\x7f\xfa\xaa\xbb\xf7\x31\xd4\xd5\x1e\xcf\xd1\x1e\xc9\xcd\xfe\x2c\x4e\x76\xc7\x63\x0f\x7e\xf8\xdd\x15\xb8\x76\xfc\x9d\x77\xe2\xb1\xe3\x2f\x83\x6d\x32\x97\xd3\x7a\x7c\xa6\x88\xc8\x99\xd6\x90\xba\xbb\xb7\x81\x7d\xb3\x62\x0f\x72\x0c\x0b\x61\xab\x28\xde\xde\x0d\x0c\x96\xda\x8c\xd4\x99\xac\xea\x7e\x45\x0b\x18\x27\x2c\x2f\x32\xc8\x81\x6b\x64\x3c\x23\xaf\xdb\xa2\x39\x71\x5c\xbf\x41\x62\x0d\x1e\xf0\x29\x01\x48\x1d\x91\x03\x6f\x6c\xb4\x81\x37\x0e\xbc\xf1\xa9\x16\x6c\x13\x8f\xc1\x18\x6f\x9a\x44\x38\x5b\x96\xf2\x92\x32\x5a\xc8\x2b\x88\x04\x31\xc5\x40\x89\x05\x4b\x4b\x9a\x35\x91\x64\x3d\xb8\x68\x37\x0e\x80\xa6\x9d\x76\x68\x08\xba\x69\x61\x01\x59\x45\x84\x35\xd3\x8f\xc9\x5f\x6c\x38\x4f\x53\xd1\x6c\x1b\xd4\xbb\x39\xe4\x36\xbd\x6e\x1b\x11\xc2\xa9\xba\xc7\x6a\x85\xa4\x2a\xda\xa8\x4e\xc2\x30\xbb\xad\xdb\x54\x5c\x54\x5c\x23\x5b\x9e\x11\x05\xda\xe6\xd8\xcc\x61\x65\x99\xa8\x22\x47\x17\xd9\x03\x5d\xaa\xa3\xca\x27\xc9\x38\xd3\x2b\xc5\x07\x3a\xd1\x80\xd8\xb0\xa6\xc3\xa9\x30\x32\x2f\x56\x55\x98\x4e\x21\xe9\xa8\xcd\x5a\x0c\x8e\x75\xda\x5c\x3c\xba\x66\xbc\x34\x6f\xeb\x67\x15\x52\x22\x78\xa7\x81\xe0\x13\xd3\xa4\xe4\x9a\x65\x46\x58\x27\x12\x66\x65\x46\x9b\x86\x40\xf7\x66\x3e\x4c\x2e\x1d\x93\x8f\x3c\x81\xe6\xc3\xdd\x2c\xd5\x2b\x03\x18\xe1\x21\x03\x0d\xe9\x19\x76\xdd\x7e\x75\x65\x03\xcd\x5a\x27\xbf\x5a\xca\x4e\xc3\xfb\xb9\xac\x02\x89\xc6\xf6\x40\x55\x51\x0e\x24\x65\xd3\xa9\x19\x19\x95\x6d\x2e\x64\x4e\xd7\xa9\xa2\x3c\xed\x34\xba\x39\xb9\x98\x5e\xd2\x44\xf9\xc5\xca\x2e\x47\x8a\xa5\x90\x50\x79\xd4\xac\x09\x72\x91\xe9\xb9\x28\x67\xf3\x7a\x57\x84\x4d\x39\x51\x1a\xc3\xab\xcc\x64\x2a\x6f\xb9\x58\xd9\x6c\xca\xc8\x2c\x3c\x01\x2b\x5a\x09\xb0\x0c\xe3\x81\x76\x1c\x7b\x2d\x04\xc0\xc6\x74\xdb\x35\xf7\x39\x57\x18\xc3\x07\x69\x23\x41\x8e\xc3\x27\x1d\xe1\x85\xc7\xe4\xd2\x02\x5e\x9c\xb5\x7b\x6d\x4d\x89\x9d\x8c\x46\x0c\x9b\x8f\xc6\xec\x18\xc0\xb7\x32\x00\xab\x52\xcc\x10\x97\xd8\x76\x4e\xf9\xd2\x67\x74\x60\x8c\x99\xcd\x44\xab\x92\x4c\xb2\x6e\x36\xf4\xea\x2c\xbd\x78\x99\x9d\xd6\x09\xbd\x29\xb3\xc3\x79\x2f\x6f\x9a\x05\x3e\x32\x57\x80\x47\x1a\x8a\x7c\x56\xcf\x1c\x92\x7b\x7b\xf2\x52\xb0\xec\x0d\x1c\xce\x6d\xe8\xe9\x9a\x8b\x32\x4b\x2d\xaa\x6e\xcd\x9d\x91\xd3\xda\x10\x4a\x4b\x06\x95\x40\xc0\x68\x08\x08\x3d\xc2\xba\xb1\x6f\x21\x53\xb3\xbd\x2d\x4b\xc6\x8e\xad\x55\xdb\xa7\xbb\x38\x92\x90\xcb\x27\x82\xdb\x7b\xf2\xcc\xdd\xdc\x39\x65\xbc\xab\x68\x57\xbf\x03\x9b\x71\x21\xd1\x68\x3d\x25\x5c\xb4\x69\x68\x1f\xf9\x15\x2a\x3a\xcb\x1c\x55\x1c\xd2\x46\x69\xa7\x5e\x4e\x3b\xfe\xc3\x1c\x8c\xb6\xd6\xa6\xa5\x2b\xdb\x6e\xac\xa8\x34\x1c\x71\x6c\x88\x51\x5a\x52\x84\x49\x76\xf9\x14\xb2\xeb\xc6\x37\x42\xf7\x85\x26\xb9\x50\x9a\xfc\xf6\x55\x63\x8e\x83\xec\x68\x23\x82\x27\x11\x1d\x7e\x95\x98\x82\x48\x17\x14\x73\xa1\xba\xf6\x7a\x99\x02\xd7\x2c\xa1\x59\x83\x50\x73\x49\x4c\x85\x9c\xb0\x34\x05\x0c\x6d\xc7\x82\x10\xa8\x72\x76\xd4\x74\x51\x74\xad\x07\x68\xc4\x80\xd4\x1b\xeb\xc3\x9f\x6f\xef\xd0\x87\xd9\x96\xf7\x6a\x9d\xbf\x9b\x68\xb4\x30\xaf\xa0\x0d\x53\x68\xee\x67\x2b\xce\xb6\x46\xfa\x32\x42\xfa\xcc\xfb\x98\x9d\xd2\x30\xf4\xcc\xc5\xc3\x3a\x1f\x61\x46\x64\xe3\x69\xe7\x84\xc7\x1e\xc4\xf1\xd9\x8d\x7f\xa0\xd8\x3b\x3b\x78\x1f\xa2\xb9\x6e\xab\xdc\x48\xb3\xb1\xa9\xcb\x8c\xa4\xf7\xc0\x0d\x2b\x5b\x5f\xf8\x69\x85\xa1\xc5\x24\x9a\xbb\x42\xa0\xa1\xf0\x34\x53\xcd\x94\x39\xcd\xf6\x62\x44\x77\x53\x21\x5c\x05\xb7\x2a\xee\xf9\xc8\x6d\xce\x23\x73\x59\x7b\x66\x1f\x86\x69\x1d\xc1\xf1\x19\xc1\x3a\x62\x66\xf5\xad\x48\x43\x6c\x5c\x2b\xe1\x0e\x95\xd0\x63\x53\x66\xf0\xbe\x4d\xad\xcc\x83\x02\x8f\x59\xd7\xf6\xaa\x7e\x19\x71\x0e\xe6\x4c\x52\x2d\xba\xdb\xbb\xe2\xc4\x3a\x78\x32\xfa\xe5\xc2\x6e\x6d\x0a\x09\x99\xbd\x8e\xe7\xac\x20\x13\xd0\x0f\x00\x7c\xb3\x9c\x96\xc2\x89\x3a\xf5\x86\x9a\x40\x22\xea\xd0\x50\x1b\x62\x3b\x26\xd7\xad\x63\x8e\x97\x7b\x38\xb2\xdb\x25\x7f\xb3\xca\xa2\x50\xf1\xf2\x6c\xc6\xb3\xb0\x0d\xef\x8a\x01\x52\x61\xe1\x5c\xd5\xcb\x02\x6a\x1b\x6b\xef\x1c\xfc\x7a\x57\x42\x87\xbd\x61\xf0\xab\x19\xf9\xce\x19\x0c\x9e\xe5\x2d\x23\x45\x92\xb8\x38\xee\x1e\x9d\xc2\xf6\x55\xeb\xe6\xce\x6d\xfd\x8a\x39\xb7\x42\xf0\x1a\xec\x3b\x74\xe7\x54\x3a\xc5\xef\x7f\x4f\xc0\x3a\xaa\x22\xe8\x15\xbe\xc5\x81\xbc\x8c\x02\x7a\x19\x0f\xe7\x9a\x44\xc3\xba\x26\x8f\x84\x85\x74\x43\x77\x8d\x1c\x69\xae\x20\x29\x25\xd3\x4b\xa3\x0b\xc0\xa7\x4e\x06\xeb\x18\x67\xe5\xb6\x4d\x46\xcb\xa9\xe2\x49\x24\xa2\xb0\x15\x3c\x56\xca\x63\xd7\x16\x97\x92\xa3\xad\xb8\xdb\x8e\xbe\x9c\x9a\x15\xb1\xe6\x11\x74\x94\x60\xd0\xf2\x2a\x61\xde\xe9\x62\x65\xac\xff\x2e\xd9\x82\x66\x86\x0d\xd7\xbf\xb8\xc6\x0c\xcd\xe6\x8f\x9e\x33\xb2\x5d\x53\x75\x5f\xbb\x77\x61\x54\x88\xb4\xf6\xe6\x9e\xfb\xa9\xc3\x8f\xe0\x93\xfe\x0c\xa3\xda\x91\x4b\x5d\x4b\xb6\x60\x19\xcc\xe0\xbd\x4a\xa8\x15\x61\x0e\x1d\x19\x71\xb1\x85\x2e\xdc\x99\x52\x64\xaa\xb2\x3d\x51\x9f\x9f\x8e\x46\x98\x19\x65\x1c\x6b\x3b\x07\x48\xab\x6e\x50\x65\x13\xe4\x99\x56\xa4\xa0\xd2\xec\x42\x9f\x08\x6f\xfd\x19\x13\x21\x32\x57\x0c\x28\x5b\xd6\x74\xb1\xee\x21\xac\x68\x40\x17\x7f\xe7\xf0\xf0\x77\x43\x85\x22\xd3\x8c\xce\x6a\x7f\x8a\xb9\xd8\x56\xe5\xc9\xe0\xdc\xfc\xad\x13\x8d\x95\x6e\x4a\x73\x8f\x3d\xd0\xa5\xaa\x51\x0b\x9a\x66\xf7\xee\x37\xca\xeb\x53\xe4\x27\x54\x91\x6a\xec\x6e\xfe\x1e\xd3\x7e\x7b\x8a\xc6\xfd\xb7\x17\xd7\x7f\xbf\xfd\xeb\xed\xdf\x2f\xde\x7d\xb8\xbc\xea\xdc\xd9\x95\xd0\x60\x43\x5b\x1a\x4e\xdd\xa4\x4a\xa7\x31\xab\x50\x65\x64\x8d\x85\x1a\x63\xdc\x2a\x42\xe6\xf2\x54\x3c\x04\x06\xf7\x9b\x3d\x05\xb4\x9b\xf5\x84\x16\xc5\x85\xcc\x85\xbc\x96\x62\xca\xb2\xce\x12\x7f\xac\x13\xbc\x42\x8e\x0f\xf3\xbd\x70\x1f\xd7\xd7\x8d\x45\x71\x5c\xcf\x26\x69\x5c\x19\x0c\xb1\x02\x4d\x37\xdd\xc3\x8a\x56\xdd\xf9\xc7\x6a\x95\xc4\xee\x87\xe8\xa0\x7b\xe6\xe0\x18\x59\x86\x8c\x8e\x3f\x8f\x61\x1a\xc8\x44\x42\x33\xac\x12\x1d\xb6\xf1\x49\x64\xc5\x64\x95\xae\x06\xa6\x07\xf5\xdb\x99\x64\x82\xa6\xd6\x87\x65\x99\x7f\x0a\xbe\x76\x99\x17\xbb\x30\x6b\x21\x88\x90\x3b\x8b\xa7\x80\xe3\x79\x10\x92\x42\x42\x25\xd5\xac\x0c\x2f\x6c\xc9\xb6\xa0\x21\x3f\xb4\x73\x40\xdc\x5b\xb6\xe0\xb2\x42\xcf\x5c\x35\x8c\x3b\x60\x6c\x8a\xf6\x14\xb4\x73\x1a\x45\x7d\x59\x58\x03\xe7\xf7\x7e\x19\x02\xca\xcb\x46\x52\x9e\xb1\x93\x9e\xec\x4e\x3b\x3f\xd5\x8e\xb4\xc9\xe0\xf7\xcc\xcc\xe0\xb4\x66\xd2\x7e\xdb\x78\x19\xc4\x66\x84\x07\xee\xc7\x1f\xb0\x90\xb9\xe7\xff\x11\x8c\x53\xd5\x12\x93\x51\xe3\x68\x15\x12\x46\xeb\xc7\x2b\x54\xdf\xbf\x29\xb9\x66\x39\x78\x84\xd1\xd1\x8a\x4c\x24\xed\xd7\xc7\xaa\xaa\xe7\x13\x65\xa3\x13\xf2\x67\x8e\xe7\x95\x43\x4a\x46\x84\x8b\x7a\x89\x80\x4f\x85\x4c\xd0\xf0\x70\xd0\x0d\x9e\xd0\x82\x4e\x58\xc6\x42\x98\x79\xac\x0d\x8e\xe5\x31\x1b\xf4\x60\x0c\x50\x9a\x9e\xa7\x52\x14\xf6\x26\xf6\xd0\x5f\xe1\x59\x99\x6d\x88\x99\x66\x25\x27\x67\x89\x6a\x11\x32\x93\x94\xeb\x3a\x7e\x6f\x6d\xe3\xfc\x12\x65\x90\x18\x42\x00\x4d\xe3\x15\x9a\xbd\x48\x0d\xcf\x68\x2e\x5b\xf0\xb9\xea\x5b\xd1\x9a\xb7\xfe\xe5\x1a\x18\x33\xe4\xfa\xe3\xed\xe5\xff\xbb\x72\x6e\xba\x8b\x76\xb6\xf5\xbb\x64\x85\xe1\x07\xd1\xb6\xcd\x8d\xab\xf3\x3d\x6c\x9c\x2f\x7b\xe3\x54\x06\xa2\x83\xe3\x6d\xdf\x94\x4d\x8f\x33\xe3\x0d\xd2\x48\x1e\x24\xeb\x5c\x57\xd0\x94\xed\x5e\x9b\x01\xba\x12\x88\x79\x84\x6b\x86\xe1\xd2\x0d\x6b\xad\x16\xb6\x94\xb5\x13\xbb\xc2\x4a\x31\x34\x6f\xd7\x29\xcd\xd4\xe7\x7a\x45\x86\x98\x76\x0a\x29\x92\x0f\xa2\xe4\x71\x00\xbc\x03\x76\x5c\x45\x08\x49\x81\x0b\xed\xac\x29\xa8\x4b\x88\x29\x7e\x4b\x6c\xce\x5a\xa3\x36\x47\x4b\xce\x09\x10\xb3\xee\x1a\xa2\x55\x15\xbf\xe2\xe5\x70\xab\xbf\x94\x6a\x2d\x30\xd2\xc9\x55\x75\x0a\xdb\x34\x20\x92\x41\x02\x4d\x6d\x20\x0d\xd5\x73\x0b\x1a\x9f\x53\x75\x0f\xa9\xfd\x20\x10\x30\xb3\x02\xc7\xc4\x50\x38\x3f\xd3\x77\x66\x72\x3d\x66\x09\x1a\x84\x6d\x90\x2d\x22\x68\x86\xa8\x62\x07\x3d\x0d\x01\x8c\xdd\x2c\xc2\x47\x9e\x2d\x6f\x84\xd0\x5f\x57\x35\xf1\x0f\x7d\x32\xfe\x52\x85\xc2\x36\x8d\x98\x68\x97\xa6\x48\xf2\x08\x37\x0e\xf2\xc5\x46\x25\xff\x50\xb6\x68\x16\xe4\x97\xca\x15\x65\xc9\x2f\xd4\x37\x52\x94\x9d\x65\xb8\x98\xfa\xe6\x37\x97\xef\xf0\xe2\x2b\x1d\xa6\x32\xd7\x72\x59\x08\xc6\xb5\xb7\x78\x45\x74\xda\xfc\xd9\xa1\x57\x37\x39\x5b\x30\x50\x2d\x21\x1f\xe8\x92\xd0\x4c\x89\xca\xa4\xc6\x37\xb9\x5b\xbd\x2f\xd7\x7c\x3d\x11\x7a\xbe\xe6\xc4\xed\x9a\xba\x63\xda\xfa\x78\x67\x0d\x68\xe6\x3a\x20\x86\xf1\xb5\x61\x35\xa2\xba\x14\x12\x12\x48\x81\x27\x9f\xeb\x89\x38\x34\x52\x30\x9e\xaa\x2b\xc1\x0d\x7b\x3d\xf4\xb9\xba\xac\xec\x93\x6e\x35\x9a\xa7\x08\x4d\xd9\xce\x89\x48\x11\x55\x1b\x99\x6b\xa9\x42\x22\x4f\x2f\xa7\xe8\xf5\xb4\x9b\xee\xbb\x72\x02\x99\x59\x6c\x96\x65\x3e\xda\xde\x86\x26\xb0\x9c\xce\x80\x50\x5d\x1d\x42\x2d\x08\x70\x55\x4a\xb7\x6f\x3a\x66\x55\x99\x56\x25\x84\xb9\x57\xfb\xf3\xe5\x3b\xf2\x8a\x9c\x98\x77\xb3\x11\x83\x53\xca\x32\x04\xea\xf6\xb1\xba\x4d\x1d\x60\xea\x73\xca\x82\xa6\x00\xf9\x08\x11\xd2\x5e\x2d\x67\x84\x0b\xa2\xca\x64\xde\xc8\x38\xa8\x2c\xc2\xae\x6a\x53\x10\x10\xc9\xc0\x76\xe2\xdd\x87\x7f\x56\xd0\x39\x44\x36\xe6\x75\xf8\xe7\x17\xbc\x0e\x9b\x2a\xa2\x39\xfe\xed\x05\xb3\x67\x35\x07\x4d\x53\xaa\xa9\xbb\x26\xfd\x03\xc3\xae\x1d\x2e\xcb\x80\xcb\x52\xc1\xf7\x8c\x97\x9f\x6c\x5d\x94\x5e\xb8\x3d\x6e\xdf\x23\x45\x24\xf1\x0b\x2d\x1a\x7e\x3b\xef\xa1\x88\x90\xa2\x71\xd9\x3a\x46\x67\x5b\xb4\x6e\xbc\x25\xa8\xc5\xde\xc4\x2c\x4a\xca\x53\x91\xaf\x11\x39\x15\x92\x00\x4d\xe6\x9d\xa9\x69\x44\x8d\x0c\x07\xd3\xb5\x5f\xb6\x43\x08\xd3\x57\xa3\xd9\xf6\xbf\xc7\x64\x58\xa6\xaa\x9d\x6b\xb3\x63\x33\x3a\x81\xcc\xc1\xe2\x5a\xac\xf4\x88\x27\x2c\x92\x0d\x5c\x8a\x88\x21\x31\x37\xc2\x46\x72\xd1\x6a\x22\x4c\xf7\x9f\xc5\x3c\x44\x0d\xbe\xb8\x73\xd1\x25\xf5\x3c\xa0\x0d\xf4\x73\x98\x87\x32\x40\x40\x24\xab\xf3\x60\xa4\xcd\xf6\x3c\xa0\xfc\xd5\xf7\x79\x50\x90\x24\x22\x2f\x7a\x12\x29\x79\x67\xa3\xf0\x0d\x45\xbb\x46\x45\xb6\x1f\xa6\x41\xe1\xce\xae\xda\x15\xd5\xf6\x1e\xf4\x25\xaf\xfe\x7f\x8d\xeb\x1c\xb9\xdd\xea\x1d\xef\x46\x0f\x8e\xc8\xac\x46\x74\x1d\xfe\x12\x6f\xbc\x21\x0c\xb3\xd5\x5e\x3c\x0c\xb3\x81\x98\x4f\xd1\x3c\xdf\x0a\x89\xfc\x12\x82\x31\x8d\x12\x80\xf3\x0a\x1c\x51\x80\x0a\xaa\xe7\x67\x2e\x63\x75\x01\x9e\x3d\xdf\x5b\x8b\xd7\x31\x72\x1c\x4f\x90\x67\x37\x75\xcc\xaa\x45\xd2\x8f\x1a\xbb\xb9\x29\x5e\xd3\x3e\x73\xf5\xf1\xae\x89\xa3\x4f\xf9\xd2\x62\x44\x06\xa0\x9a\xd9\xd6\x3f\xb1\xe2\x39\x63\x3a\x57\x57\xf1\xb9\x43\x3a\x83\xfa\xdb\x1c\xd1\xf9\x72\xa7\x74\xb7\x28\xcf\xd5\x18\xcf\xa8\x24\xac\x06\x7c\xae\x8f\x11\x61\xe5\x82\x8f\x80\xbb\x3a\x7b\x64\x00\xf9\x8b\xa5\xc8\x6b\xd9\x89\x07\x2d\x54\x4d\x23\x08\xcd\xb2\x28\x31\x09\x9b\xac\x20\xfe\x14\x54\x50\xf2\xeb\xd6\x80\x76\x4d\xd3\x90\xd1\x9f\xb0\x60\x7c\xde\x96\x88\xcc\x68\x14\x9f\xb9\x1d\x62\x96\x2b\xfa\x56\x42\x6a\xe3\xa4\x6e\x0b\x48\xfa\x72\x5b\x7c\xf3\xe1\xf6\xa2\x4d\x19\xca\xc2\xae\x70\x06\xe0\xf7\x84\xa6\x39\x53\x0a\x1d\x3e\x30\x99\x0b\x71\x1f\x34\xe4\x89\x4f\xb5\x9d\x31\x3d\x2f\x27\xe3\x44\xe4\x8d\xac\xdb\x91\x62\x33\x75\xee\x38\xca\xc8\x4c\xdc\x29\x61\x3c\xab\x32\x95\xd1\x5a\x88\x58\x60\xdd\xa1\xe4\x9a\x2f\x4f\x92\xea\xed\x71\xeb\x61\x7e\x4a\x15\x9a\xbd\x3e\x3d\x58\xdd\x04\x37\xef\xc1\xa5\x8e\xf5\x5d\x15\x56\x6d\x70\x65\x67\x6d\x79\xf7\x66\xa5\x0e\xe7\xc5\xd9\x38\x8f\x56\x79\x3d\xf8\x24\x39\xa1\x3f\x01\x15\x14\x01\x1b\xf3\xcc\x7d\x5b\x93\xd4\xc4\xd2\x63\xd3\x16\x22\x54\x3b\xe7\x1e\xdd\xdb\xc7\xe6\x97\x3e\x2c\xf3\x38\x56\x71\x99\x8b\x2c\x33\x0b\x49\x1d\xf0\x5a\x23\xba\x13\x55\x93\x36\xa2\x9d\xc5\xdc\x35\xca\x42\xf3\x2d\xf0\x22\x09\x63\x0a\x16\xf7\xcc\x5c\x06\x0e\x33\xc3\x6c\x20\x1c\x9b\x92\x9c\x7d\x32\x14\x36\x47\x6c\x83\xc4\xa2\xe3\x7f\xf3\xd7\x01\x05\xac\x09\x06\x1f\x54\x98\xe9\x67\x66\x85\x9a\x83\xf8\xe4\x68\x6d\xae\x2d\xf3\xc5\x15\x68\xa3\xa8\xd9\x79\x6b\x7a\x1f\x8c\x62\x25\xcb\x08\x87\x21\xc4\x33\x4c\x9a\xde\xe1\xa8\x9c\x22\xf0\x3c\xa0\xa7\xd8\xd1\x64\x64\x10\x2f\xbc\xbd\x94\xe7\x98\x6c\x48\xdf\x79\x31\x0f\x32\xd9\xdd\x8b\xfc\x8c\xbe\x2a\xd2\x17\x7f\x55\x20\xd7\x6f\x62\xfd\x1e\x0c\x67\xa5\x89\x37\xcc\xd6\x83\x97\xae\x45\xba\x06\x43\x8c\x60\xc6\x8c\x66\xdd\x0b\xb9\x5e\x4e\x9b\xd0\x9d\x5c\x38\xf3\x88\xad\x20\x6e\xe3\xf4\x3f\x41\x52\x6a\x48\x1d\x1a\xb9\x33\x29\x5b\x24\xe3\x36\x35\x9d\x29\xf0\x49\xfa\x13\xc0\x00\x25\x75\x56\x97\x62\x73\xba\x4e\x85\xef\x7a\x46\xfe\x0b\xb9\xa4\xf2\x80\x5a\x19\x5b\x00\x07\xa5\xae\xab\x9f\x77\x9d\x0a\x8c\xa3\x4e\x28\xf7\xba\x95\x39\xd3\xce\xc2\xed\x50\xc7\x1d\x8e\xc7\x04\x48\x41\x25\xcd\xcd\x1d\xac\x88\x5b\x9e\x09\xcc\x98\x4d\x0b\x6c\x5c\x8a\x15\x6c\x79\x37\x50\x5d\x54\x6c\x98\x26\x39\x9b\xcd\xed\x69\x21\x94\x64\x82\xcf\x88\x8f\x1b\xcb\x04\x4d\x09\x32\x16\x21\xc9\x03\x95\xb9\x91\x05\x68\x32\xc7\x20\x34\xca\x49\x5a\x9a\xf3\x40\x10\x64\x7b\x39\x52\x9a\x6a\x70\x60\x78\x9d\x6d\x70\x7e\x9a\x0e\x50\x22\xf6\xb9\xcb\xdf\x1f\x18\x4f\xc7\x9c\xb4\x28\x56\x90\xf7\x9f\x20\xa9\x8e\xb5\x45\x9c\xce\x73\x04\x0c\x14\xfe\x38\x7b\xb4\xb8\x60\x61\xb0\x27\xaa\xb2\x7b\xc3\xbe\xc8\x26\x6f\xdd\x84\x33\xaf\x7d\xda\x3f\x8d\x3e\xda\x5e\x04\xe5\x9d\x58\x8d\xa2\x49\x88\x8e\x2d\xe4\xbd\x39\xb9\x16\x23\x48\xc8\xaa\x5a\x7f\x10\x59\x9e\x0e\x84\xcc\x16\x42\x93\x93\xe3\xf3\xe3\xd3\xb5\xbd\x70\xac\x9a\x69\x06\x36\x23\xba\x7e\x21\xc5\xf2\x22\x5b\xe2\x3b\x1c\xdb\x92\xdf\x81\x00\x86\x3e\x60\xb5\x2a\x7f\xa9\xe6\x90\x65\x67\x44\x19\xf1\x97\xfa\x1a\x22\xf6\x53\xf3\x90\x96\x65\x62\xcd\x64\x27\xc7\x3f\x1f\x9f\x11\xd0\xc9\x29\x79\x10\xfc\x58\x5b\x87\x07\xb9\x43\x1d\x32\x88\xa6\x8a\x88\xa5\x28\x09\x07\x70\x67\xa7\x2a\x56\x95\x50\xa3\xfe\x94\x56\x46\xb7\xa0\x1b\x90\x65\x61\xf2\xdc\xfb\x4f\x4c\x1b\x51\x44\x97\x68\xa6\x78\x65\x35\x05\x40\x1c\x7a\xaa\xf0\xa6\x3b\x9f\x03\xcd\xf4\x7c\x59\x69\x2f\xff\x04\x29\xb0\x3e\x29\x77\xdf\x84\xcb\x50\x3d\x48\x1b\xed\x6f\x02\xa7\x11\x30\x4a\x09\x77\x73\x09\x6a\x2e\xb2\x83\xa7\x71\x7e\x70\xe5\xde\x12\xc1\x95\xe1\x29\x46\xc5\x76\x34\xaa\x2a\x83\xce\xca\x2c\xae\xbe\x82\xc0\x53\x26\x21\x75\xc2\x92\x2b\x79\x31\xa7\x0b\x94\x14\x8c\x3c\x07\x69\x88\x6a\xd2\xd4\x89\x7e\x37\xae\x28\xac\xd2\xee\x5e\xf7\x24\x6c\xb3\x23\x76\xe4\x4c\x16\x71\x6e\xe9\x6f\x6e\xae\xdf\xb6\x6e\x69\xfc\xe0\x5b\x3c\xc6\x6f\xe7\x90\xdc\xdf\x84\x55\x73\xed\x49\x68\x41\x21\xe4\x21\x05\x03\x33\x7c\x34\xa9\xe0\x5a\x48\x4d\x78\x99\x4f\x40\x7a\x83\xc2\x0c\x57\x11\xe4\x82\x25\x30\x26\x57\xf6\x3b\xef\x9c\xf7\xd5\x87\x29\x9f\x01\x79\x6d\x0e\xc4\x1f\x7e\xff\xfb\xdf\xfd\x3e\x9c\x47\x87\x03\xa9\xc6\x01\x51\x75\x2f\xde\x17\xb1\xeb\xd6\x92\xb3\xc9\xd8\xec\x28\x45\xa5\x2e\xa3\x49\xb5\x36\xb3\xcd\x87\x2e\xcc\x2a\xa9\x00\xc8\x06\x77\x85\x61\x1d\xf6\xff\x26\x99\x98\x9c\xe7\x54\x69\x90\x46\xc7\x71\xd7\xfa\x08\xe1\x86\x19\x9f\x8d\xf3\xf4\x74\x1c\xe6\x05\xf7\x6a\xf5\x5a\x49\xb9\x16\xcc\xcc\x96\xf2\x70\x66\x52\x0e\x6e\x82\x27\x9e\xca\x37\xe4\xa8\x5b\x35\x31\xb3\x04\xdf\x40\x9c\x4c\xb4\x6f\xef\xee\xae\xbf\x01\xdd\x64\xd8\x1c\x3f\x24\xdf\xbc\xbf\xab\xca\x8d\x9b\xdd\x65\x93\x9a\x06\xae\x1d\xc2\xb5\xe7\x22\xac\xde\x7c\x6c\xbf\x8b\x65\x25\x58\x1b\x8d\x73\x48\xcc\x42\x9f\xb5\x2a\xdb\xfa\x38\xc4\xcb\xeb\x31\xf9\xab\x28\x51\xe4\xa2\x93\x6c\x49\x1e\xa8\x45\x34\xe8\x06\x29\x5d\xb7\x23\x43\xc6\x91\xe1\x5a\x66\x57\x7f\x0b\x34\xb5\xb5\x2a\xd1\xb4\x73\xf0\xb3\xda\xa0\x29\xda\xb2\xbd\x2d\x95\x16\x39\x99\xbb\x57\xb5\x73\x58\x17\xf4\xb7\xb2\x91\x3d\x82\xe8\xfb\x51\x44\x42\x61\xb5\x25\xf7\x9b\x2f\x42\x17\x5a\xe3\x42\x76\x9e\x1b\xd5\x80\x28\x49\x9a\x53\xe5\x04\x7d\x34\x61\x32\xc7\xa3\x3a\x9b\xc4\xea\x16\xa5\xaa\x08\x89\x54\x59\x84\x20\x93\x32\x87\x32\xb8\x93\x70\x27\x64\x9c\x1a\x25\xa6\xf1\x40\xf7\x9a\x6d\x71\x2b\x24\x10\xe7\x6a\x73\x9b\xcb\x06\xe0\x18\x42\x43\x51\x09\x89\x37\x26\x57\x05\x54\x29\x17\x9c\x25\xd6\x9d\x41\xca\x42\x70\x22\x4a\x5d\x94\x1a\x4d\x41\x09\x55\x30\x5a\x50\xc9\x0c\x43\x35\xe3\xd7\x3f\x2c\xb9\x39\xed\x5a\x08\xb4\x93\x54\x4e\x67\x4b\x71\x38\x99\x91\xa4\x19\xe2\x0b\x60\x44\x5e\xe1\xb5\xc5\x09\xdf\xd1\xa4\xd7\x36\x18\x62\x6b\x88\xcf\xe3\xa9\x75\x54\xcf\x31\xb2\x0f\x7d\x59\x3e\x30\x14\x19\xa7\x51\x1b\x7a\x90\x78\x13\x55\x8b\x0d\x64\x09\xe8\x6f\x17\x72\x45\x0f\x36\x14\xae\xcf\x61\xa4\x58\x93\xe7\x57\xab\xdd\x6b\xf9\x11\x28\x27\x97\x17\x57\x17\x7f\xbf\xfd\xe1\xed\xdf\xaf\x2e\x3e\xbc\x0f\xe9\x3a\xb8\x76\x7c\xcc\xea\xf1\xd1\xea\xc7\x3f\x43\x05\x79\xdf\x54\x32\x87\xfe\x84\x99\xdc\x22\x35\x4d\x50\x32\xa7\x03\x34\xea\x21\x87\xa1\xd4\x91\x15\xa3\xa9\x61\x3c\x07\xe5\x38\x2e\xaa\xe0\x1d\x64\x74\x79\x0b\x89\xe0\xe9\xc1\xa3\xb3\xaf\x2a\x66\xa3\x2c\x41\x55\x19\x68\x58\x41\xcc\xf2\x85\x60\x5d\xf1\x6a\x1f\x1f\xd0\x0c\x69\xb0\xef\xd7\xd9\x6b\x4d\xfa\xe7\xb9\x26\xbd\x31\x8f\x17\x20\x19\x46\x04\xf5\x61\xd7\x7c\x2b\x1e\x5c\x45\xf7\x13\xc6\xfd\xce\x39\x6d\x58\x69\x6a\xf7\x48\x38\x9a\x9a\x16\xe4\xf5\x2b\x3f\xc8\x97\xe7\xf7\x70\x91\x3e\xbd\xf6\x7c\x39\x1a\x9f\x76\x7d\xd5\x61\x4b\x6d\xf7\x57\x48\xfc\x10\x59\x61\xe3\xaf\xc7\x55\x9e\xda\x6b\xa4\xa7\x62\x45\x94\xa7\x3e\xe4\xec\xcb\xdb\x27\x3a\x29\x6e\x45\x72\x1f\xc9\xec\x7a\xf7\xf6\xda\xf6\xb6\x12\xcf\x62\x6f\x60\x23\x65\x0a\x42\xcd\x53\x28\x80\x0e\x46\xd7\xde\x18\x5d\x8f\x6d\x5a\x17\xcd\xde\xec\x6d\x40\x3d\x1e\xb4\xad\xba\x79\xc1\x47\xb6\x2b\xa0\x0c\xda\xd6\x96\x36\x68\x5b\x7b\x34\x9b\x44\x82\xc1\xa0\xdf\x48\x9a\xc0\x75\x9f\x84\x37\xcf\x40\x48\x5a\x4a\x57\x56\xae\x92\xe1\x2a\x76\xc1\x01\x52\xcb\x3f\xdc\xab\x00\x99\x99\x37\xb1\xe1\xd1\x68\x43\xac\x03\x8b\x4b\x19\x20\xe6\xdd\xcd\x5d\xd7\x4e\xc4\xf5\x4e\xe6\x4d\xd4\xd5\xba\x49\x51\x81\xa1\xfb\xaa\x21\xee\x38\x19\xe2\xb1\xd4\x3a\xf0\xee\xe6\x74\xda\x5c\x41\xa2\xd8\xcc\x4c\x97\xab\x0c\x6d\x63\x84\xab\xd2\x7b\x35\x21\x66\xd4\xa9\x90\x09\x9b\x64\x4b\x32\xa7\x99\x51\x96\x1e\x98\x9e\x13\x4a\xee\x59\x96\xb9\x6e\xba\x4f\xd4\x2d\xb8\x5c\x4d\x2b\xd1\x64\x82\xcf\x70\x32\xa8\xcb\xc9\xf8\x54\x40\x62\xc6\x4c\x32\xa0\xbc\x2c\x2c\x9d\x46\x3e\x5a\x8a\x32\x42\x5a\x86\x77\x7c\x57\xf2\x14\x67\x0e\x7e\xc4\x16\x6e\x7b\x74\xcf\xb7\x93\x6b\xc9\x47\x3d\x07\xf9\xc0\x14\xd8\x42\x72\x9d\x69\xb2\xb4\xb4\xcb\xc8\xd9\xcf\x2a\x08\x15\x97\x39\x68\xb6\x05\xa6\xb2\x76\x1e\xeb\x07\xec\xd7\xb3\x56\x2e\xf8\x88\xc3\xcc\x02\x35\x38\x86\x66\x23\x3a\xed\xf8\x36\x7e\xb0\xca\x36\x50\x5a\x14\x84\xe5\x39\xa4\x46\x3f\xce\x96\x64\xc1\x68\x67\x4a\x10\x14\xa2\xde\x51\xe4\x84\x0b\x22\x0a\x73\x75\x95\x9c\xe9\x25\x7a\xf4\xe6\xa5\x26\xa9\x78\xe0\x01\xf9\x56\x77\x2e\xcc\x81\x92\x09\x68\xea\x6c\xe0\xe6\x10\x54\x98\xe8\x08\x77\x6e\xce\x1e\x26\x09\xdc\x6d\xdc\x00\x15\x4c\xfa\x8c\xea\x00\x2e\xb1\x41\x9a\xb7\xeb\xf9\xf8\xb6\x63\xca\xf9\xeb\x02\x71\x98\xfb\x81\x6c\x68\x4e\xb4\x28\x75\x4f\xee\x91\x6d\xa6\x23\x0b\x71\xd1\x50\x12\x59\x0e\x8a\x88\x32\x52\xbd\x89\xd7\x6e\xb8\x98\x1a\xde\x60\x77\xda\xd8\x94\x4e\x59\xa7\xaa\xc3\x31\xb6\xd8\x16\xf0\x7e\x97\x87\xdb\xc0\xaf\x9c\x94\xd3\x29\x48\xbc\xe9\x90\xe0\xb5\xb0\xfb\xaa\x8e\x97\xbf\xc3\xba\x19\x6f\x5d\xc0\x17\xe8\x33\xac\x1d\xe0\xc0\x24\xb6\x0c\xe9\x40\x36\xb1\x4c\xaf\x04\x85\x58\xf0\x9c\xbc\xff\xf8\x75\xb7\x2d\x1a\xa3\xb2\x40\x58\xca\x2a\xbe\xe7\x47\xde\x2d\x26\x31\xee\x7e\xd8\x84\xfa\xe2\xb6\x45\x92\x09\xe5\xd2\xa3\x71\x5d\x92\x39\xe5\x1c\xbc\x31\x8a\x69\xb4\x64\x4f\x00\x38\x11\x05\xd8\xa0\xbc\x4e\xc4\x50\xa2\x18\x9f\x65\x40\xa8\xd6\x34\x99\x8f\x0d\x75\xdc\xef\x85\x3a\x0f\xd9\x7d\xa2\xb4\x04\x9a\xdb\x3d\x21\x21\xa7\xcc\x0e\x4f\x68\x22\x85\x52\x24\x2f\x33\xcd\x8a\xaa\xb3\x6e\x56\x44\x40\x44\x08\x65\xd3\x52\xfd\x5a\x61\x5a\x49\x9d\xf0\x7c\x56\x53\xe8\x5e\x5f\x34\x8b\x15\xa1\xe9\xec\xcc\x7c\x0b\x79\xa1\x97\x55\x62\x62\x37\x1d\x68\xca\xa4\xd2\x24\xc9\x18\x70\xed\xde\xcc\x42\x0e\x22\x0d\x67\x5e\x9c\xe6\x6e\x46\x94\x9b\x12\x9e\xa2\xf2\x5d\x68\x65\xf3\xef\x2a\x22\x7c\x57\x29\x53\xce\xd6\xa1\xba\x65\xff\x51\x5f\x99\xc6\x6e\x1c\x3f\x23\xb8\x75\xbc\x80\x63\x29\x72\x1f\x35\x48\x68\xd4\xd9\xae\x73\x27\xc3\xf8\x0a\x96\x8f\xf1\xe7\xfa\xac\x85\x39\x50\xeb\x16\x98\x0a\xb3\xc6\x75\x70\x43\x71\x58\x98\x73\x00\x09\x18\x51\x94\x46\x64\x32\x2f\xce\x63\x1a\xb2\xdc\x07\x50\x8a\xce\xe0\xba\x63\x38\x42\x0c\x86\x53\x1b\xda\x30\x8e\xa1\xde\x36\x73\xb0\x40\x57\x5a\x34\x3e\x69\x26\x79\x35\x95\xc7\xdc\xbe\x48\x27\x0a\xbc\xd2\xf4\x20\x99\xd6\x80\xbb\x14\x2b\x39\x61\x00\xda\x2a\x78\x67\x3b\xb9\xac\xd3\x78\x6e\xd2\x9b\xe3\x19\xf1\x83\xa7\x36\x4d\x6b\x02\x64\x22\x19\x4c\xc9\x94\x61\xde\x18\x66\x54\x9d\xd9\x2a\x04\x14\xe3\x76\xa9\x52\x20\xf1\xb5\x9d\x59\xc0\xbf\x7e\x37\x7a\xfe\xe2\xde\x5f\xcb\x92\x27\xb4\x51\xa2\x13\xb1\xc5\xd8\x94\xcc\x30\x8b\xcb\x29\xc1\xff\xf6\xea\xdf\xff\x40\x26\x4b\x23\xaf\xa1\x22\xa6\x85\xa6\x99\x27\x80\x64\xc0\x67\x66\x15\x91\xe5\x76\xe3\x1b\x2d\x7c\xaa\x6a\x71\x32\x96\x33\x6d\x27\xe8\xf5\x6f\xef\x27\x41\x47\x0f\xf9\xe3\x79\x0a\x8b\xf3\xc6\x16\x1a\x65\x62\xd6\xad\xd7\xb7\x31\xb2\x89\x83\xec\x6c\x1b\x4e\xb4\xc8\x58\xb2\x3c\xd4\x99\xf6\xc5\x4b\xc8\x5c\x3c\x58\x63\xce\xfa\x51\x6d\x40\xbd\x14\xa2\x28\x33\x9c\x38\xf2\x75\x85\xcf\x57\x2a\x58\x85\x3e\x0a\x35\x12\x36\xb8\x1d\x3a\x51\xdd\xb0\x2b\x77\x8e\x4b\x61\xf4\x64\x0a\x07\x3c\xe1\x7c\x6e\x55\x1d\x92\xce\xd6\xb8\xaf\x69\x96\x4d\x68\x72\x7f\x27\xbe\x17\x33\xf5\x91\xbf\x97\x52\xc8\xf6\x3b\x67\xd4\xdc\xe9\xf3\x92\xdf\x63\x15\xdd\x1a\x8c\x56\xcc\x5c\x4c\xa1\xc7\x0f\x68\xbc\x5d\x27\x62\xfc\x5b\x5a\x78\x50\x2f\x92\x78\x1b\x5c\x3d\x32\x7c\x62\xb5\xa1\x8d\x13\x30\x34\x77\x4d\xc0\x87\xd6\x7b\xa8\xe6\xd1\xfe\xed\xab\x7f\xfb\xa3\x65\x2e\x44\x48\xf2\xc7\x57\x98\x72\xac\xce\xec\x05\x80\x37\xb0\x11\xb5\x72\x9a\x65\x5d\xbd\x04\x4d\x16\xf0\x75\xe7\xe2\xd4\x3d\x38\xf2\xfa\x60\xa7\x7b\x67\x95\xf1\xee\xee\xaf\xa8\x2f\x32\xad\x20\x9b\x9e\x59\xb4\x97\xca\xac\x75\x8c\xd2\xd5\xb1\xbb\xf2\xba\x23\x05\x1d\x5e\x69\x5b\x88\xac\xcc\xe1\x1d\x2c\x58\xd2\xcd\x81\xd9\x5a\x95\x56\x6f\xde\x4c\x9f\x31\x85\x20\x40\x93\x4c\x24\xf7\x24\x75\x5f\x36\x42\xe5\x57\xab\x6a\x77\x9f\x85\xae\x49\x03\x01\xc9\x02\x5b\xdf\xbf\x95\x26\x90\xd3\xa2\xa8\x10\x4a\x24\x7d\x68\x4d\x06\xb2\x26\x44\x47\x0d\x74\x23\x06\x3b\xd3\x43\x5d\xe9\x23\xf7\x46\xe6\x9a\xea\xdc\x45\xe7\xdc\x82\x70\x4f\x7c\x4d\x7d\x77\x3f\x66\x6b\x43\xd4\x1d\xfa\xd3\x50\xe0\xbf\x2d\xde\xc2\x1a\x32\x56\x05\x39\x54\x6d\x0c\x2b\x41\x9a\xed\x83\xb7\x4c\x77\xf3\x65\x04\x67\x68\x58\x8e\x44\x6b\x5e\x78\xe5\x84\xce\xa9\x76\xfa\x91\xf7\xb2\x53\x52\x80\x54\x4c\x19\xd1\xe9\x07\x3c\x50\x6f\x33\xca\xf2\x86\xfb\xee\x50\x93\xb0\x1e\x51\x9f\xd3\x62\x74\x0f\xcb\x8e\x1b\x2e\xf0\xb8\x6c\x0b\xf0\xcf\x69\xd1\xf1\x1e\xc0\xd2\xb5\xe1\xd7\x40\xc7\xcb\xf9\x5a\xa4\x8e\x0e\xbc\x1e\x6c\x49\xe2\x67\x51\x63\x23\xca\x40\x87\xbe\x72\x7e\xa8\x17\xae\x7d\xe3\x98\x4f\xaa\x2b\xc7\x3e\xf5\x25\x5d\x34\xf8\x7e\x9f\xeb\x3d\x53\x11\x1f\x89\x9d\x06\x45\x3a\xe1\xed\xe4\x76\x46\xfb\x3a\x6a\x19\xb4\xec\xc9\x6c\xa8\xbe\xce\xd0\x34\xb6\x45\x01\x02\x08\x30\x47\xd1\x0d\x4a\x8e\xdf\x1c\x1f\xf4\x8e\xb3\x2b\x23\x45\x41\x67\xa8\x99\xf6\x61\x81\x56\x69\x6a\x62\xd0\xce\xc5\x83\xfd\xde\x46\x97\x14\xee\x29\x48\x6b\x20\xf3\xb9\x08\x5a\x1d\x1b\x39\xe8\x77\x84\xd3\xae\x2d\x56\xe1\x03\x5d\x12\x2a\x45\xc9\x83\xd2\xa0\xd1\x31\x52\x39\xce\x3e\xac\xbc\xec\x95\xe0\xe0\x9d\xf4\x21\xa3\xdc\xd5\x18\xe6\x4c\xd9\x78\x05\xc6\xc9\xeb\xf1\xeb\x57\xc1\xb4\xdf\x40\x52\x4a\xc5\x16\x70\xe3\x6a\x9c\x37\x9c\x2a\x97\xd3\x6b\xa1\x14\x9b\x64\x98\xb8\xa5\x05\x79\x6f\x0b\xc0\xaf\xbf\x68\x15\x38\x82\x6f\x2c\x64\x13\xad\x34\x80\xc2\x13\x7b\x82\x9b\x01\x9f\x66\x80\x80\xa8\x8f\x7e\x49\x92\xb8\xae\x2b\x92\xe4\x55\x25\x49\xda\x7b\xef\xa0\xef\xea\x0b\xdf\xf7\x81\x93\x7c\x70\xbe\x81\xba\xb2\x3d\xf3\x95\x93\xf1\xa3\x07\xc9\xb4\x3b\xdc\x0f\x4c\x01\x39\x41\xab\xc4\xca\x66\x0c\x02\x68\x6e\xda\xb0\x02\x2b\xe0\xc7\x00\x58\x96\xab\x47\xb7\x0f\xab\xb4\xce\x4f\xea\x08\xfc\x07\x67\xc0\xaa\x57\xd0\x71\xff\xfa\x5e\x9e\x53\x9e\x66\x41\x3c\xa3\x9a\x95\x6c\x19\x84\x85\x73\x39\x25\x4d\x96\xe8\xfc\x97\x8d\x6a\x12\x73\xaa\x08\x17\x24\x07\x8a\x01\x9a\xe6\x76\xf1\x5c\xb0\x85\xd5\x1c\x8f\x06\xbb\xd9\xed\x35\xd6\xbc\x10\x1c\xbb\x7e\xc7\x94\x63\xcf\x86\x8f\x38\x0d\xc4\x86\x75\xe4\x34\x0d\x49\xed\x6e\xcc\x69\xbd\x78\xe3\x3a\x68\x72\x95\x92\xfa\xe2\x58\xa1\xe5\x39\xe8\x38\x73\x25\xc8\xcd\xf0\x25\xc6\x09\x6e\x30\xcb\xd5\x41\x32\x41\xde\x6c\xdb\x56\x5f\xb7\xba\x16\xd7\xde\x75\x33\xc5\x15\xc1\x01\x34\x3c\xfd\xaa\x67\x0d\x5e\xe8\x63\x44\xad\x4b\xdd\xd5\x40\x71\x19\x8f\x61\x48\xde\xde\x29\x51\x99\x7b\x66\xc0\x41\x52\xe7\x57\xf0\x21\xa2\x0e\x7c\x85\x2a\xc1\x43\x0f\xc4\x13\x1b\xce\xf0\xfb\xa7\xc5\x14\xfb\xb3\x00\x42\x50\xce\x39\x11\x72\xe5\xb4\x3b\x8f\xc9\x26\x89\x25\xe6\x5b\xaf\x40\x73\xd9\xcd\xdf\xc0\xfc\x34\x8b\xf2\xdf\x25\x5b\xd0\x0c\x2c\x86\xbd\x67\x0d\x07\x15\x26\x54\x39\xe9\xab\xda\xe8\xf4\x43\x54\x3b\x36\x07\x3d\x6c\xd5\x20\x23\xc9\x13\x47\x47\xe4\xc4\x8e\x71\x6c\x41\x76\x0f\x2b\xe4\xba\xb5\x7a\xff\xa9\x08\xa8\xdc\x1a\x6f\xbd\xde\x7f\x2a\x28\xc6\x69\x14\xbd\x58\xb8\xff\x05\x73\xba\x00\xc4\x34\x66\x19\x95\x19\x06\xa5\xdf\xda\x29\x23\x93\x52\x13\xe0\x0b\x26\x05\xcf\xcd\xf1\x43\xf0\x19\xc3\x99\x24\x20\x18\x7c\x02\x8a\x7c\x75\xf2\xc3\xc5\x0d\x26\x2d\x9d\x3a\xb4\x7c\xf7\x7e\xa5\x42\x7c\x80\x95\x77\x68\x74\xd7\xc7\xfd\x46\xfc\xbb\x9b\xed\x82\xf2\x89\x9f\x0b\xf3\x6e\x79\xa9\x4b\x9a\x21\xf4\x73\x92\x95\xe6\x2e\x3c\xd8\xce\x8e\x6f\x03\x0f\xb1\xe4\xc5\x34\x81\x3b\xe0\xef\x77\xac\xd3\x71\x8d\x71\x50\xdf\x36\xf6\xeb\x1a\x0c\x79\xe7\x1a\x0f\x1b\x40\x28\xd7\x04\x9d\x63\x55\x01\x53\x36\xf3\x70\xdc\x5d\xdc\x2d\x3c\x03\x4b\x27\xd8\xe4\x6f\x5f\x93\x74\xcd\xc2\x88\x35\x5a\x0e\x6e\xc3\xef\x70\x18\xe2\x1d\x83\x0e\x86\xe8\x38\xbb\x3e\xe5\xea\x2d\x2e\xcd\x7e\x14\x87\x6d\xf4\xdb\x4a\x93\x35\x1b\xe1\xdd\xd5\x6d\xb3\xa0\x87\x75\xfe\x89\xbd\x57\xf2\xba\xee\xa2\xae\x7a\x83\x15\xf1\x2a\x07\x2a\xc8\x99\x15\xa7\x11\x79\xb6\x92\xaf\xdf\x5d\xdd\xee\x39\x96\xdf\xcd\x56\x18\x9e\x50\x65\x63\xa4\xdf\x5d\xdd\xda\xb8\xb5\xfd\x68\xef\xec\x48\xe9\xee\x83\x40\x00\x37\xc4\xd6\xea\xc0\xb1\xc3\xb9\xdc\x45\x15\x0f\x62\x16\x1f\x7d\xbe\x96\x1a\x72\x79\x4d\x68\x9a\x4a\x0c\x67\xee\x72\x96\x5b\x88\x76\xb4\x28\xaa\xa8\x54\x2c\x12\x43\x15\x34\x5f\xbd\xb1\x07\x50\xf0\xe9\xb8\x7e\xb6\xbd\x2b\x8b\x8c\xd9\xf0\xd3\xe6\x10\x75\x09\x9d\x5c\x2c\xba\xf0\xa7\x10\x0f\x63\x67\xff\x62\x90\x7c\x10\x15\x73\x4e\x74\x2d\x4f\x1b\x7b\x97\x4a\x50\x22\x5b\xd4\xc5\xf3\x83\x77\xa7\x63\x47\x18\x92\x58\xed\x4e\x5f\x81\xf6\x99\x76\x26\x70\x2d\x19\xac\xef\x4a\x72\x63\xde\xae\x44\x76\x56\x91\xc0\x16\x80\x29\x4b\xae\x42\x70\x87\x91\x71\x18\x9f\x77\x4b\xf4\xdc\x66\xdd\x50\x8d\x27\x93\x4a\x2f\x0a\xe0\x9b\x07\xbc\xe2\x41\x8e\xc8\x0a\x32\x7d\xfa\xee\xea\xd6\xde\xa4\x76\xba\x1c\x9e\xb7\xda\xb8\x77\x3a\x5f\x72\xe4\xf0\x65\x92\x42\xdc\x36\xd1\x72\x4a\xab\x92\xa6\x6c\xe3\x04\x1f\xab\x40\x88\xd4\x1b\x17\x9a\x10\x96\x08\x1c\x60\x39\x08\x42\x2a\x6d\xc7\x86\xf8\xb4\xd7\x47\x26\x0b\x47\x3b\xc8\xbb\x46\xbd\x2b\x14\x50\x99\xcc\xbb\x6c\xec\xd8\x97\x85\xa5\x84\xa4\xc2\x66\x88\x4d\x85\x44\x0f\xfc\x08\x45\x9d\x4c\x88\xfb\xb2\x78\x1e\xe9\xc6\x0d\x5c\x50\x3d\x7f\xb6\x4b\xa4\x35\xc6\x20\xdf\x74\xdf\xb3\x29\x57\x5d\xf2\x5c\x02\x95\x2f\xd0\x56\xe5\xc2\x91\x6b\xa4\xb6\xfd\x2f\xa3\x96\x19\xec\x6d\x56\x2a\x0d\xf2\x6b\x26\x95\x3e\xda\xb7\xa7\x1f\x68\xc6\x1c\x70\xb2\x0d\x61\x39\x6e\x76\xf7\x17\xa6\xe7\xae\x50\xef\xf1\x59\xfb\x2b\xf3\xb7\x23\xe3\x98\x08\x49\x8e\xaf\x04\x87\xbd\x83\x87\x56\x34\xd0\x4a\xf0\xa9\xae\xf4\xad\x32\x9b\x9b\x44\x05\x99\x05\x55\xc1\x2f\x3a\x9f\xb3\x3b\x57\x3b\xd9\xd0\xe3\x25\x05\x05\x9a\x50\x2c\x3a\x89\x7d\xcf\xeb\x82\xc5\xb6\x38\x9a\x2d\xf4\x2c\x9c\xce\xbb\x6c\x2c\xed\x9e\x83\x37\xaa\xab\x69\xb1\x7d\x01\xba\xa8\xb6\x7b\x9f\x33\x44\x0c\x01\x57\x4e\xe6\x7b\xc6\xef\xf7\x3c\xe4\x61\x27\xe4\xfd\xda\xe8\x0d\x88\x16\xef\x7b\x67\xdc\x82\x26\x18\x51\x8f\x4e\x44\xa9\x7d\x89\x9b\xa6\x17\x9e\xf1\xff\xb2\xfb\x02\x03\x58\x11\x00\x67\xdf\x55\xd9\x60\x00\x57\x67\x36\xcc\xc5\x5b\xb8\xd5\x92\x6b\x8a\xb5\xb6\xdf\x89\xe4\x1e\x24\xc9\x0c\xcd\xfb\x6e\xbe\x3a\x8f\xb5\x55\x55\x79\xef\xb4\x96\xae\x11\x19\x50\xcc\x21\x07\x49\xb3\xca\x00\xfa\xa2\x8b\xfe\xbd\xbb\xbd\x2b\x32\x9a\x49\x9c\xb6\x3c\xa2\x2b\x94\x2b\xd2\x31\x79\xbf\xe9\xa9\x9c\x2e\x7d\xe1\x77\xc6\xd1\x77\xf8\x89\x29\xbd\xff\x0d\x53\x88\xb4\x89\x91\x5a\x2a\x90\xa3\x0a\x33\x97\x50\x57\x7c\xd1\xe7\xd3\xa6\x30\x29\x67\x33\xc6\x67\x63\x2b\x1e\xa0\x18\x52\x17\x88\xad\x6d\x61\x0f\x73\xd8\x37\x42\x26\x91\x40\x31\x7e\x18\x95\x15\x1b\x32\xc1\x9a\xbd\xe7\x22\xb5\x9d\x4f\x96\xd6\x02\xeb\xf7\x64\x05\xa4\x44\x2e\x39\x11\xd2\xd5\xc5\xa0\x69\x4a\xf6\x0e\xd3\xd9\xb0\x22\xd8\x57\x3d\xbf\x96\xb8\xb2\xf6\xcf\x1f\xab\xfa\x57\x8d\x05\x52\xe5\xc4\xc8\xbe\xa5\xdc\xb7\xd6\x75\x57\x19\xa5\x93\x7c\x12\x2a\x8b\x5e\xf0\x7a\x7b\xbe\x6d\x22\x11\x50\xa2\x21\x2f\x84\xa4\x72\xb9\x9a\x6e\x62\x6e\x12\xb3\x7d\xcd\x02\xad\xcc\xed\xb5\x48\x8d\x90\xb0\x37\x19\x1b\xb6\xed\x82\x19\xb5\x73\xd3\xce\xdd\x78\x9e\xf0\x6a\xe3\x82\xf8\x35\x23\x1d\xa8\x50\xc9\x1c\xd2\x12\xd1\xa7\x66\x25\x95\x94\x6b\x30\xfc\xd3\x85\xb0\x2e\x5b\x81\x1c\x15\x52\x43\x05\xdb\xb6\xc4\xbc\x51\x2c\xee\x6c\x3e\xc1\xba\xd2\x5d\xc2\x4d\x9c\x70\x6c\x3a\x6a\xc0\x41\xdc\xcd\x81\x18\x49\x32\x03\x8d\x93\x0f\x0b\x96\x68\x3f\xc8\x14\x17\x61\xc3\xd6\x4f\x68\x69\xa1\x1e\xf6\x0f\x00\xba\x16\xae\x8e\x6a\x02\xe6\x4e\xd2\xaa\x9e\x5a\x97\xf5\xc8\x3a\xc5\x95\xdc\xf9\x93\xbd\x89\xe0\xfa\x60\x3e\x71\x24\xd1\x28\xd2\x99\x69\xe2\xdb\x3d\xc2\x98\xab\x35\xde\xb0\x12\x7b\x0e\x15\x60\x80\xe9\x9e\xf2\xd0\x29\x55\x21\xc4\xd6\x43\xe5\xec\x60\x49\x40\x17\x72\x56\xe6\x98\x34\xef\x74\x5b\xe0\x5a\x2e\x0b\xc1\xba\xfa\xed\xcd\x51\x43\x37\xe3\xb1\x22\x6f\x3f\xbc\x6b\x02\xbe\x35\xcb\xf4\x79\x38\xc0\x6e\x83\xfc\x10\x37\x40\x81\x5c\x4e\x09\xad\x84\xbe\x4e\x14\xd5\x17\xb5\xb3\xf9\x38\xd7\x6f\x45\xa0\xb7\xc0\x32\x5e\x18\x09\x16\xe5\xf4\x46\x5d\x9f\x64\x4e\xf9\xcc\xb0\xaa\x77\xa2\x34\x2f\xf6\xd5\x57\xf8\x12\x12\xd2\x32\xe9\x18\x5c\x8a\x80\xd1\x0e\x15\xe9\x2b\x1f\xe6\xe5\x0a\x88\x19\x5d\x14\x54\x42\x0b\x3f\x35\xcd\xd9\xb3\x52\xee\x1b\xc2\xc6\x30\x26\x47\x5f\x35\xbe\x3a\x42\x8a\x3b\x51\x53\x48\x61\x5e\xc5\x81\x30\xe1\xdb\x67\x4c\x23\xff\x38\x6a\x8e\x30\x26\xef\x0d\x5d\x18\x35\x5d\xad\x6d\x03\x57\x67\x52\xaf\xec\x19\x91\x30\xa3\x32\xcd\xa0\x23\x80\x88\x98\x56\x4a\x86\x05\xaa\x74\xbb\x0a\x19\x23\xe2\x0a\x70\xa1\xc7\x71\x5c\xdf\xbb\x22\xda\x69\xaa\xee\xd5\xb9\x55\x67\x46\x29\xd5\x74\x44\x0b\x6b\x0f\x62\x82\x9f\x5b\x53\xf7\xc8\x15\x29\x1f\x51\x77\x7a\x47\xd5\xce\x3e\xff\xb5\x83\x5f\x1d\xd1\xea\x29\xc6\x47\x74\x84\x65\xbb\x3b\xdb\x6f\x0e\x90\x76\x17\x3d\x70\x26\xa8\x1c\x53\x40\xd9\xfd\x18\x6c\xfa\x7d\xc5\x95\xed\x52\x8c\xc9\x95\xd0\xbe\xba\x7e\x5a\x27\x1a\x06\x14\x67\x6f\x32\xee\xf7\x57\x77\x37\x7f\xbd\xfe\x78\x79\x75\x37\xf0\xef\x81\x7f\x63\x1b\xf8\xf7\xc0\xbf\x3b\x0c\xdc\x17\xfe\x0d\x7c\x71\x28\xde\x5d\xd9\xbb\x36\x19\x18\x57\xaa\xbd\x06\x26\x8a\x7f\x41\x89\xf6\xef\xf9\xe2\x07\x6a\x54\xc7\x42\x82\x42\x05\xc5\x68\xac\x9b\x82\x94\xdd\x03\x68\x09\xac\x63\x3a\x3f\xdb\x4c\xfb\x03\xe6\xc9\x47\xcc\x13\x0d\x8a\x9d\xbf\x6a\x14\x00\xd9\xb4\xe4\x21\x71\xdf\x1f\xe8\xd2\xd6\x47\xb2\x87\x92\xf2\x25\x29\x24\xe3\x1a\xb7\xd2\xc5\xed\xdb\xcb\x4b\x92\xcc\xa9\xa4\x09\x3a\xa8\xe0\x53\x02\x85\x26\xc7\xff\xf3\xb0\x69\xf2\x81\xd5\x54\xe3\xad\xcc\x3e\x82\x5b\xc0\x30\xb5\xc8\x57\x48\x58\x30\x51\xaa\x6c\x59\x95\xed\xdf\xcc\x47\xd7\xd1\x14\x02\x93\xc4\x96\xde\xcd\xb4\x79\xc0\x15\xa1\x73\x93\x00\x19\x30\xfc\x81\x45\x4f\x47\x44\x0c\x01\x34\x60\xfc\x0d\xa2\xeb\xee\x62\x68\xc0\xb8\x9d\x04\xd8\x6d\xc2\x68\x00\x1d\x6d\x31\x36\xa0\xa3\x76\x16\xcd\xe1\x39\xd9\xd7\x52\xe4\x91\xb8\xd9\xad\x35\x68\xfb\xd8\x8a\x4d\x47\xb5\x8a\xba\x6a\x8a\x47\x4e\xa5\xad\x6b\xa7\x18\x75\x3a\x2f\x74\xc7\xbc\x0f\x12\xab\x6e\x7c\x9c\x12\xeb\x36\x6a\xfe\x03\x2d\xbe\x83\xe5\x0d\x04\x56\x89\x6a\xcf\x37\xc6\x5f\x28\x42\xc9\x3d\x2c\x6d\x70\xe5\x5b\x3f\x58\x58\xa1\xac\x1e\x96\xdd\xbf\x87\x6e\x60\xf4\xbe\xc5\xab\x97\x7f\x0f\x01\x50\x09\xbe\xad\x15\x53\x37\x4b\x88\xfa\x87\x59\xd3\x5e\x95\x8f\x0f\x93\x44\x7d\x8b\x59\x9e\xce\xb6\xa6\x64\xea\xae\x87\x08\x13\xb7\x0a\x97\x03\xd3\x29\x24\xda\xa7\xe0\xdb\xdd\x7c\x86\x59\x9a\x69\x69\x6b\x7c\xd2\xe4\xfe\x81\xca\x54\x91\x44\xe4\x05\xd5\x6c\xc2\x32\xa6\x97\x61\xf9\xf9\xbe\xe1\x0d\x5f\x01\x8c\x5b\xa6\x48\x2e\xb9\xd2\x14\xaf\x42\xe1\x0c\x81\x66\xb5\x6b\x94\x5f\x04\x03\xb6\xdc\x14\x33\x81\xa8\x0c\x2f\xcc\x6f\x48\xc9\x85\xd2\x24\x01\x69\x84\xba\x6c\x49\x1e\xa4\xe0\x1d\xb1\xb7\xdb\x6d\xcf\xf2\x32\x62\x61\x64\x41\x78\x38\x77\x79\x82\x23\xf3\xe2\x23\xcb\xac\xd4\x39\x66\xa1\x9c\xff\x1a\xff\xd3\xa7\x53\x44\x7c\x96\xe1\x1b\x72\x74\x14\xd8\x97\xf0\x41\x4b\x71\x4f\xe5\xad\x0b\xa6\x6b\x8a\x4e\xd5\x85\x42\x2c\x22\x30\xf2\x29\x8f\x83\xe0\xb4\x80\x48\xd3\x1c\x06\x67\x63\x5b\xcb\x52\x95\xd3\x22\xcc\x50\x55\x37\x64\x07\x71\x6f\xef\x60\x1e\x58\x5f\xff\x96\x59\x55\x55\x3a\xd3\x37\x1e\xdf\x43\x91\x1c\x34\x4d\xa9\xa6\x63\x73\x20\xce\xda\x7f\xaa\x82\x26\x70\x46\xfe\x51\x7d\x98\xd1\x09\x64\xea\xc7\xe3\xff\xf8\xee\xfd\x5f\xff\xf3\xf8\xa7\x7f\x34\xbf\x43\x71\x0d\x0d\xa7\xcd\x07\x02\x5f\x01\x63\xa5\xb8\x48\xe1\x0a\xa9\xc3\x3f\x9d\xa6\x77\x91\x24\xa2\xe4\xda\x7d\x81\xe0\xee\xe3\xb9\x50\xfa\xf2\xba\xfa\xb3\x10\xe9\xea\x5f\x01\x25\xfc\x48\x3f\xe5\x1e\x5c\xdb\x00\xb0\x47\xdb\xe2\x49\x3f\xb4\x60\x3f\x80\x54\x41\xf8\x80\xbe\xb5\x33\x36\x6c\xaf\x7e\x1b\xab\x64\x0e\x39\xc5\x7f\x7e\xed\xa7\xc0\xdc\xc7\x55\xf9\x0d\x8e\x28\xfa\xe6\x0e\x6c\xd7\xf4\x3d\x5a\xbc\x0e\xd2\x38\x6d\x8b\xc8\xf9\xab\x15\x8c\x3c\x61\x38\x23\x6e\xb6\x2c\x07\xa8\xe4\x47\x6f\xa5\xa8\xc3\x20\x2f\xae\x2f\xc9\xc2\xce\x70\x8f\x26\xe7\xf9\xd8\x75\x06\xd1\xd5\xad\x60\x86\xfd\x75\x45\x95\x5b\xa6\x86\xea\xe6\x14\x66\xa4\x3c\x74\x81\x6e\x3c\x56\xbf\xe9\xf4\x3d\x5f\x98\x71\x55\xab\xd4\xa4\x97\x27\x79\x20\xac\x0f\xe9\x27\xcf\x0c\xd5\x15\xb1\x2c\x7a\x28\xcb\x35\x9d\x58\x88\x94\xab\xae\x5e\x04\xdf\xfa\xac\xbb\x46\x51\xe5\xbc\x02\xdc\x80\xe6\xa9\x0e\x03\xb9\x30\xcc\x7e\x81\xb9\x32\xf7\x3e\x76\xb5\x90\xb0\x00\xae\xab\xa0\x6b\x57\xf7\x8b\x4a\xcd\xe2\xe8\x24\x8e\x22\x55\x59\xba\xeb\xb0\x0e\x6b\xe5\xca\x5f\xdc\x77\x51\xb7\x77\x25\x1a\x5b\x2f\xb2\x62\x4e\xcd\x5b\xcf\x2a\x3d\x78\xe3\x69\xb7\xd1\x13\x66\xee\x14\xfb\x27\xac\xd4\x6e\x79\xfd\xdb\x3f\x36\x08\xed\xd1\xdd\xf0\x6c\x6a\x4e\x94\x1d\xbb\x49\x57\xc2\x6a\x3c\xdb\xd5\x24\x57\x09\xaf\x7e\x2e\x9c\x4d\xe1\xbb\x09\x70\x26\xd3\x4f\x4c\xe9\x33\x5b\x36\xd0\x9f\xa0\x05\x95\x55\x94\x50\x39\xc9\x98\x9a\x87\xb2\x7b\xdb\x2e\xa7\xd5\xea\xac\x94\x51\xac\x70\x92\x6b\xd9\xc3\xcc\xc5\x0a\x95\x11\x48\xd8\x66\x62\x6e\xa3\x14\xd6\xee\xfc\x6b\x4c\x90\xa8\xe3\xa3\x83\x30\xf5\x1e\x9f\x07\x0b\x1d\xfb\x52\x13\xb1\x86\xa1\x28\x41\x97\xd2\xf0\xac\xd4\xf2\x89\x6b\x91\xba\x9c\x96\x78\xc2\x5f\x0c\x65\x9d\x34\x8d\x22\x5d\x8b\x2a\x36\x5b\x11\x5f\xc8\x8e\x76\xbd\xed\x00\x3d\x57\x49\xef\x9e\x49\x44\x31\xae\x39\x26\x24\x21\xb3\xf5\xd8\x11\x69\xd6\xa5\x06\x78\xe8\x79\x33\xe0\xf1\x78\x7c\x6c\xa9\x14\xae\xda\xa9\xb5\x28\x9a\xcf\x7b\x75\x2d\xd4\x42\xd5\x33\x98\xe1\x79\xc3\xa8\xec\x96\xc8\x42\xb2\xba\xa9\xf2\x2e\xd6\x58\xb2\xfa\x67\xa0\x4c\xf9\x4c\x95\xaf\x7b\x6d\x03\x6b\xe6\xd3\xb4\x82\x0f\xde\x10\x04\xcd\xf5\xdf\x3b\xe1\x47\x55\xc5\xfa\x41\xe9\x50\x43\xf1\x89\xed\x72\x9c\x14\xe5\x99\xeb\x7e\x9c\x43\x2e\xe4\xb2\xfa\xb3\xca\x02\x1a\x29\x2d\x24\x9d\x21\xec\xb8\x1d\xdc\xfe\xac\xfa\xcb\xfe\xb0\x45\xde\xfa\xaf\x6d\x74\x47\x52\x4a\x09\x5c\x67\xcb\x1a\xcf\xf7\x8b\xd3\xe5\xfc\xba\xf5\x44\x81\xaa\xb6\xd5\x33\xf0\x9f\xe3\x3a\x6f\x11\x7d\x6e\xd5\x2c\xa2\x4b\xdd\x95\x07\x3a\xab\x05\x0e\x8c\xfb\xb0\x42\x9e\x3a\xee\x0f\x1f\x22\x24\x65\x0b\xa6\x44\x00\xf4\x6b\xd5\xd1\xba\x7b\xc2\xe3\xe7\xb9\x42\x94\x36\x1d\xbd\xb2\xa0\x7c\x2a\xb0\x28\x75\x75\xd8\x57\x4c\x83\xaf\x43\x3d\x2f\x28\x63\x68\x90\xfc\x0d\xf9\xdf\x27\x7f\xfb\xcd\xcf\xa3\xd3\x3f\x9d\x9c\xfc\xf8\x6a\xf4\xef\x3f\xfd\xe6\xe4\x6f\x63\xfc\xc7\xbf\x9e\xfe\xe9\xf4\x67\xff\xc7\x6f\x4e\x4f\x4f\x4e\x7e\xfc\xee\xc3\x37\x77\xd7\xef\x7f\x62\xa7\x3f\xff\xc8\xcb\xfc\xde\xfe\xf5\xf3\xc9\x8f\xf0\xfe\xa7\x1d\x3b\x39\x3d\xfd\xd3\x57\xc1\xa4\x53\xbe\xfc\x18\xc8\xbd\x6d\x1b\xb9\xcd\xc2\xb8\x86\x19\xec\x9f\x9e\xba\xbd\xc7\x48\xae\xb6\xd6\x55\xc8\xb8\x1e\x09\x39\xb2\x5d\xbf\x41\x25\x25\x70\x00\xbf\xbd\x62\x9f\x7f\x8f\xbf\xf4\xa6\xbe\xcd\x2a\xa1\xb0\x47\x07\xfc\xb9\x04\x0d\x05\x89\x04\xfd\x12\x61\x32\x76\xa4\x46\x59\x3d\x07\x9d\x85\x1e\xb1\x2f\xed\x06\xfd\x25\x44\xce\x78\xa7\x91\x5d\xd7\x5a\x93\x32\xea\xd5\xb8\x56\x82\x28\xb1\x76\x44\xf7\xdc\x3d\x04\x84\x98\xf9\x36\x44\xda\x74\x6e\x43\xa4\xcd\x16\x52\x86\x48\x9b\xa0\xf6\x59\x46\xda\xdc\x5a\x9e\xf4\x8b\x0c\xb3\x89\x8f\xac\xdf\x31\x73\x27\x26\xa8\x3e\xf0\x45\xd7\xe0\xea\x98\xa9\x6e\xde\xec\x81\x50\x5c\x45\x99\x51\xbd\x25\x8b\x22\x52\xde\x5b\xcf\x3c\x67\x7f\xb1\x10\x36\xf7\x16\xd5\x46\x69\x7c\xcd\xbc\xcc\x34\x2b\x3a\x26\x04\x54\xaa\xa5\x4d\x2d\x30\xcc\x9f\x2a\x25\x12\x8b\xf8\x53\x81\xe4\x65\x54\x69\xff\xca\x68\x99\xd7\xf4\x1e\x73\x68\x12\x48\x81\xef\x8b\xc5\xe4\xdb\x0f\x16\x2d\xd0\xcf\xed\x64\x69\xee\xa1\xf7\x7c\xe1\xee\x24\x92\x7a\xc0\xca\xda\x57\x1a\x65\xdc\x2f\x2b\x9b\xd1\x9c\x4b\x97\xad\xd0\x48\x6a\x44\x09\xb2\x06\xe5\x41\x6f\x8e\x98\xd6\x21\x90\x98\xfe\x61\xd9\x74\xb7\x0b\x2f\x58\x39\x08\x17\xc5\xab\x6c\x84\x20\x1d\x6b\x4d\x06\xaf\xc3\x44\xdb\xb2\x77\xe7\x11\x7a\x94\xc0\x11\x2e\x95\xc7\x95\xc8\x9f\x43\x1a\xef\x8b\x24\xde\x13\x29\xfc\x79\x24\xf0\x7e\x4a\xdf\xd1\x24\xef\x38\x52\x77\x1c\x89\x7b\x8f\xb8\xf6\x98\x52\x76\x1c\x09\xfb\x39\xec\x6b\x85\x84\x29\xfb\xd4\x87\xb4\x65\x8f\xb8\x4a\x34\x7c\x42\x53\x4d\x21\xa1\x00\x5e\x01\x7a\x7b\x0f\x2c\xd0\x64\x3e\x64\x9c\x93\xca\x2e\x1a\xf7\xc2\xbe\xdd\x64\x29\x1b\x6e\x6b\x32\xdc\xd6\x7b\xb4\xe1\xb6\x1e\x6e\xeb\x17\xb9\xad\x1d\xb7\xfa\xf2\xaf\xea\xc8\x48\x4b\x88\x21\x77\xf0\x92\x8e\x96\x8c\x80\xda\x34\x7b\x1e\xc5\x3a\xc6\xf3\x1c\x47\xee\x72\xe2\x82\xce\x19\x8e\x7a\x5d\x66\x59\x97\x3a\x17\xb6\xc5\x58\x80\x4b\x9c\xf6\xa2\xcc\x32\x57\x1b\xa1\xdb\xec\x7f\xe4\x78\x81\x5d\x64\x0f\x74\xa9\xce\xc8\x15\x2c\x40\x9e\x91\xcb\xe9\x95\xd0\xd7\xd6\x74\xd2\xad\xdf\x26\x12\x86\xed\x9c\xb0\x29\x79\x93\x51\x0d\x4a\x13\x4d\x67\x18\x51\x5b\x57\xef\x14\xb2\x35\x68\x5d\x9f\xfc\x80\x16\xad\xf0\xbd\xf9\x6b\x0f\x20\x3f\x3a\xcc\x5e\xcd\xd8\x14\x92\x65\x92\x85\xb3\x89\xef\x7d\x4f\x3e\xe2\xdc\x8b\x07\x18\xa7\xb4\x01\xa1\xfa\x33\x2c\x03\x56\x08\xa5\x6f\x35\x95\xfa\xd0\xb5\xc0\xae\x3d\x21\x66\xb2\x13\x9a\x65\x90\x12\x96\xe7\x90\x32\xaa\x8d\x20\x48\xa7\x1a\x24\xa1\xcd\x7a\xb3\xca\x06\x81\x37\x12\x11\xe6\x94\xa7\x19\x48\x32\xa5\x2c\x53\xdd\x43\xd1\x57\xea\xda\x2a\x4c\xcc\x64\xdc\x02\xe0\x63\x18\xa3\x47\x98\xa7\x49\x22\x64\x8a\x31\xb4\xc2\x23\xb1\xe3\x4b\x84\xf0\x27\xd3\x3e\xa2\xa8\x90\x53\x4e\x67\x90\xbb\xaa\xf5\x6d\xb2\x26\x99\x48\xee\x15\x29\xb9\x66\x99\x7d\x79\x21\xee\x51\x20\xce\xf0\xa4\x76\x1e\xba\x3b\x03\xa8\xfe\x39\xaa\x0e\xe1\xc8\x50\xa5\xce\x7f\x5d\x7f\x85\x1f\x74\x24\x2e\x82\x5a\x16\x43\x29\x83\x4f\x90\x84\x08\x88\x6d\xeb\xfd\x27\x48\xaa\x5b\x41\xe1\x0e\x47\x64\x4e\x0b\xf1\x8f\x18\xbc\x91\x1c\x59\xb6\x45\x0a\xe8\x89\x15\x44\x13\x80\x7d\xdc\x6c\xb1\x63\x44\xde\xba\x45\x60\xca\xcd\xbc\xfd\x33\x63\x1c\xda\x0b\xa3\x6c\x49\x4c\x68\x56\x4a\x30\x7f\xae\xd5\xfc\xf6\x30\x52\xc1\xa4\x79\x5a\x0c\x6d\x52\x08\x4d\x4e\x8e\xcf\x8f\xff\x3f\xf6\xde\xbd\xb9\x8d\xdc\xda\x17\xfd\xff\x7c\x0a\x94\x93\x3a\x92\x76\x48\xc9\x9e\x64\x52\xd9\x53\xfb\xde\x94\xb6\xac\xb1\x55\xb1\x65\x5e\x49\x33\x39\xa9\xc9\xec\x09\xd8\x0d\x92\x38\xea\x06\x3a\x00\x5a\x12\x53\xf3\xe1\x6f\x61\xe1\xd1\x68\x92\xb2\x4d\x00\x12\x69\xa7\x3b\x55\x13\x8b\xa2\x1a\xef\x85\xf5\xf8\xad\xdf\x3a\x5a\xdb\x23\x07\x12\xf0\xfc\x72\x29\x15\xa9\x4d\x95\x8a\xa2\x1b\x94\xa4\x75\x03\x35\xe8\x49\x71\x50\x8e\x10\x55\x39\x40\x27\xfa\x8e\x34\x65\x73\x60\x56\x2c\x63\xf4\x08\x49\x8e\x94\xc0\x25\xb5\x7e\x32\xf8\x54\x7f\x49\x89\xd6\x56\xc1\x39\x3c\xf8\xf5\x60\x84\x88\x2a\x8e\xd0\x3d\x67\x07\x0a\xa6\xef\x18\xdd\x70\xd4\x26\x27\xd1\xa0\xae\x23\x4b\xde\x22\x46\x88\x3d\x5b\xbe\x50\x96\xbe\x6e\x10\x6f\x4d\xca\xd7\x02\xab\x14\xa6\xeb\xf0\x39\x7f\xa0\xca\xb2\x39\x68\xf9\xfd\x12\x76\x93\xb9\xb2\x10\x96\xa8\xa2\x77\xe4\x64\x41\x70\xa5\x16\x06\x1e\xcf\x38\x1b\xff\x8b\x08\x0e\xbc\xd8\xcc\xfe\x26\xb5\x1b\x69\x31\xca\xf0\x49\x88\x57\xae\x77\x28\x0b\x32\x26\xb3\x75\xe9\x1e\x7d\xed\xbd\x21\xd1\x2a\x11\x5a\x95\x47\x6f\x6f\x6e\x26\x6f\x88\x0a\xa5\x3c\x83\x0f\xd1\x9b\xf3\x1b\x97\x14\x11\xd4\x8a\xda\x03\xf1\x9e\x07\xad\x39\x46\x0d\x17\xfb\x70\xcb\x2c\xb8\x4c\x5a\x4e\xf4\x04\x57\xcc\x5b\x2e\x95\x09\x0e\x28\xae\xc5\x36\x83\x4c\x39\xde\x47\xf8\xbb\x7c\xf0\x8b\xc9\x31\xfa\x1b\x6f\xf5\x84\x4c\xf1\xb4\x5a\xa2\x7b\xcc\xac\xb7\x3b\x0d\x96\xab\x9f\x17\xba\x2b\x2f\xf4\x0d\xa2\x77\xfe\x5b\x82\x4b\x22\x24\x08\x68\x82\x93\xb3\x6b\xb3\x1d\xf7\xa0\x6f\x59\x97\xf2\xac\x95\x8a\xd7\x68\x61\x87\xdd\xe7\xcc\xb6\x87\xf3\xd8\x1c\x57\xcb\x4f\x2a\x48\x63\x84\xb8\xfd\x9b\xaf\x4e\x44\xaf\x49\x2f\x33\xef\xf6\xf3\xa9\x51\x53\xc3\x69\xb3\x1e\x73\xc3\x7c\x69\x65\x9b\xde\xaa\xd9\x80\x94\x19\x00\xe8\x28\x23\x08\x1d\xa5\xb1\x69\xaf\xbe\x08\xa2\x07\xc9\x6f\xca\x87\x6b\x47\xd9\xb0\xdb\xe8\x49\xf0\xdb\xc8\xc2\xf2\xec\xe6\x33\x91\xa3\xb4\x52\xe1\xab\x2f\x0f\x2a\x34\x17\x98\x71\x46\x0b\x5c\xd1\x7f\x91\x12\xb5\x0d\x67\x36\x59\x0b\x34\xdb\x02\x4b\x32\x86\x50\x2e\x33\xe2\x5c\x06\xf4\xc9\x5a\x3a\x28\xce\x41\xdd\x03\x34\x96\x16\xf7\xa6\xd7\x79\xba\x9a\x15\x66\x9c\xcc\x05\x1e\x3e\x6b\x11\xda\xde\x62\xe5\xd9\xf1\xe8\x8b\x50\x27\x51\xa6\x4c\xfe\x75\xb2\x2c\xc5\x11\x2e\x0a\x20\x88\x36\xd7\x15\x08\x5e\x49\xc4\x5d\xfa\xfe\xca\x36\xaf\x5a\x05\xdc\x37\xdd\xcb\x04\xb1\x05\x62\x6d\x3d\x25\xa2\x63\x1a\x14\x6a\x7d\x4e\xb3\x78\x5d\x6c\xb3\xa6\x39\x17\xf6\x73\x3a\x06\x66\x73\x82\x5e\xe9\x96\xff\xf8\xed\xb7\xbf\xff\x36\x43\x3b\x7a\x78\xae\x15\xcc\xd0\xc5\xe9\xe5\xe9\x2f\xd7\x3f\x9e\x01\x7f\x79\xea\xeb\x33\x65\x5d\xe6\xce\xb9\xcc\x9a\x71\xf9\xa4\xf9\x96\xc0\x04\x98\x2c\x65\x73\x1f\x89\x6b\xe8\x95\xde\x84\xad\x34\x9c\xe7\xd6\x26\xb1\xde\x6d\xe3\x62\x96\x19\xf2\xa4\xc2\x38\x99\x16\x58\x7b\x21\xa9\x64\x45\x48\x93\xcd\xe2\xbf\xd6\x6f\xeb\xd5\x97\x41\x65\x2b\x4c\x99\x71\xf0\x30\xf5\x7d\xf9\xb6\xd4\x38\xf4\xe1\x2b\x32\xfe\x25\x29\x38\x2b\x53\x4c\x80\x5c\x2a\xad\xed\x49\xd6\x33\x77\x6d\xde\xe9\x5c\xc4\xdd\x55\x62\x1b\x03\x4b\x32\x75\x45\x91\x5f\xd5\x3c\x72\xd2\xd0\x0b\xc0\xdb\xfe\xf8\x87\xf8\x00\x59\xd1\x5c\xf3\xe2\x36\xa3\x8b\x2c\x51\x80\xbd\xd6\x27\xad\x30\xb1\xc0\x9b\xb3\x89\xe9\x9c\x5e\x99\xcb\x0f\x37\x1d\x97\x88\xd6\xc2\x71\x17\xd6\x7d\x6b\xa3\x85\x98\x95\xe8\x96\x34\x69\xd6\xa5\x16\x98\x0e\x97\xd6\x87\xa5\x81\xef\x5d\xd8\x20\xb2\xc9\xd7\x35\x82\xc0\xc1\xc9\x8c\x46\x9c\x56\x52\x26\x88\x7b\x43\x20\xd0\x1a\x21\x33\x4c\x2b\x84\xc1\x2b\xaf\x68\x4d\x4c\xfd\x6b\x70\xf6\x77\x40\x84\xaf\x48\xe0\x7c\xad\xde\xc6\x03\x87\x31\xfe\x6e\x6b\xaf\x61\x2a\xcd\xc2\xd7\x6d\x06\x58\x99\x2d\x7a\x34\x59\x83\x19\xf0\x39\xcf\x60\x06\x44\x9a\x01\x8d\x20\xd7\x8a\x47\xeb\x9a\xd9\x00\x37\xa6\x1b\x8f\xc0\x6d\xa6\x64\xc6\x05\x59\xc5\xdb\x04\x38\x18\x0b\xc5\x4e\x80\x9a\x9e\x4e\x2e\x7c\xec\x8b\xf7\xb0\x2e\x86\x0a\x57\xb6\xc5\xc2\x85\x49\x19\x91\xf2\x04\x90\x35\x6d\x63\x1c\xcb\x70\xb5\xb5\x82\xc4\xa3\x7c\x1a\x41\x48\x0d\xf3\x38\xea\xe8\x69\xf4\x70\x09\x33\x1f\x12\x55\x98\xb8\xb9\x83\x15\x59\x18\x98\x9b\xae\x59\x52\x38\xbf\x9b\xd8\x42\x60\xb9\x20\x90\x8c\x49\x1e\xa8\x92\xa6\x51\x43\xef\xe9\x66\x5c\xeb\x0b\x73\x81\x0b\x82\x1a\x22\x28\xd7\x2a\x46\xcb\x54\xc9\xef\x19\x9a\x92\x39\x65\xd2\xad\x58\x4a\x97\xdc\x96\x00\x24\x11\x95\xbe\x04\xf4\x31\xba\xea\x95\x22\xb3\x74\x55\x05\xef\x64\xa6\x9d\xa2\x51\xa6\x29\x01\xe5\x05\xb6\x41\x8b\xab\x6a\xd9\x6d\xbc\x90\x71\xf2\x91\x19\x8a\xdf\x10\x66\x66\x0f\x5b\x06\x03\x2d\x49\x85\x97\x26\x25\x79\x46\x19\x78\x7f\x85\x3c\x3a\x4e\x87\x66\x45\x77\x90\x8b\xe0\x9d\x8f\xee\x0c\x2a\x91\x20\xb8\x48\x22\xc6\x1d\x30\x60\x9f\x7a\x06\x0c\xd8\x80\x01\x1b\x30\x60\xeb\xcf\x80\x01\xeb\x3f\x03\x06\xec\xf1\x0e\xed\x73\xd0\x6e\xc0\x80\x0d\x5e\x99\xf5\x67\xc0\x80\x45\x3d\x03\x06\xec\x93\xcf\xde\x89\xe8\x01\x03\xf6\x19\xcf\x80\x01\xfb\xcc\x67\xc0\x80\x0d\x18\xb0\x01\x03\x36\x60\xc0\x12\x9e\x01\x03\xb6\xfd\xf0\x86\xe0\x4f\xfc\x33\x60\xc0\x06\x0c\xd8\x96\xcf\x80\x01\x5b\x79\x06\x0c\xd8\x80\x01\xfb\xd8\x33\x60\xc0\x06\x0c\x98\x7d\x06\x6f\xe3\xda\x33\x60\xc0\x36\x3c\x03\x06\x6c\xbb\x76\x06\x33\x20\xed\x65\x4f\x62\x06\x48\xc5\x9b\x6b\x3a\x4f\x20\x1a\xcc\x75\x0c\xae\x7d\x4f\x2c\x0b\xa1\xb4\xd5\x5b\xa5\xf9\xd0\xf9\xb1\x80\xa1\x4c\x1f\x88\x10\xa5\xd3\xdd\x24\x53\xa2\x4d\x04\x3d\xac\x26\xe5\x36\xb9\x98\x41\x00\x39\x20\x49\xd3\xa7\xc2\x8a\x35\xdd\x4e\x50\x27\xa0\xaf\x3e\xbb\xdb\x8d\x32\x6d\xbb\xc4\xf7\x20\x98\x8f\x02\x33\x53\x6a\xd3\xd6\x5d\xd6\xd7\xfb\x84\x97\xd2\x95\x26\x60\x9c\x8d\x0d\xfb\xe7\xb1\xee\xf0\x31\x97\xc7\x09\xde\xe0\x44\xd2\x33\x83\x91\x9b\x08\x3e\x4d\x27\x3e\x83\xb7\x48\xa8\xc8\xf9\x95\xd2\x9e\xa5\xa0\x77\x76\x86\xdc\xd9\x13\xe4\x53\x06\xb4\x4e\xce\x3b\x7c\x4f\x51\x3a\xfb\x89\xd0\xd9\x47\x74\xce\x2e\x90\x39\x3b\x47\xe5\xe4\x09\xf7\x66\x08\xf5\x66\xd2\x94\x9e\x20\x6c\x62\x01\xde\x37\x0b\x41\xe4\x82\x57\xd1\x02\x27\x97\xb0\x79\x4f\x19\xad\xdb\x1a\xe8\xf6\xb5\x4c\xa1\x77\x1e\x84\x2e\x9d\xc8\xb0\xd8\x74\x13\x09\x07\x5e\xfe\x92\x40\xbd\x63\x4c\x2b\xbd\xb5\x80\xc4\x72\x81\xef\x40\x59\x6a\x8b\x82\x90\x32\x45\x5d\x0a\xbd\xa8\xbf\x3f\xf6\x3d\x34\x64\xe4\x54\xa2\x57\x69\x57\x4d\x9a\x3e\x1e\xb8\x99\x7e\xff\x4d\xd4\x3b\xe6\xa2\xc9\x73\x4b\xbf\xb9\x9a\x9c\xf5\x6e\x69\xf8\xe0\x2d\x1c\xe3\xb3\x05\x29\x6e\xaf\x2c\xc4\x63\x77\x37\x73\xba\xfb\x23\xc9\xf5\x91\x43\x31\x48\xb5\xee\xfb\x3a\xa8\x36\xc0\xfb\xa1\xb9\x39\xac\x22\x11\x77\xb4\x20\xc7\xcf\x60\x40\xe7\x32\x4a\xd3\x0f\x02\x02\xf7\x35\x0c\x7c\x5f\xd4\xae\x6b\xd3\x1d\xef\xf9\x0e\x7c\x27\xb6\xa7\x00\x66\xac\x70\xe1\xd7\x66\xbe\xf9\xd0\x25\x75\xe3\x50\x12\xe2\x53\x14\xe6\x54\x2d\xda\xe9\x71\xc1\xeb\x13\x2d\x3a\xcc\x7f\xa6\x15\x9f\x9e\xd4\x58\x2a\x22\x4e\x4a\x5e\xd8\x6b\x7d\x5c\xe8\x1e\x50\x36\x3f\xae\xcb\xa3\xe3\xff\x95\xd4\x87\x0b\xeb\xc3\xb5\xe9\x41\x8f\x18\xaf\x53\xa2\xe5\x3e\x17\x2b\x56\xac\x9e\x94\xf4\x4d\x9a\x7c\x7f\xa7\x56\x4f\x48\x84\xcb\xee\x04\x2a\x3b\x48\x6d\x94\xc1\x51\x9d\x53\xa8\xec\x07\x1c\xf6\xc9\xa0\xb0\x59\xce\x6a\x26\x08\xec\x1e\xc1\x5f\xf7\xc6\x16\xda\x17\xc8\xeb\x1e\xd6\xdc\xcf\x00\x73\xcd\x01\x71\xcd\x07\x6f\xdd\xd7\xd2\xf4\x4f\x06\x69\xfd\x22\xe0\xac\x19\xe3\x36\x99\x60\xac\xcf\x01\x61\xdd\x5f\x1f\x0c\xca\x00\x5b\x7d\x3e\xc8\x6a\x96\x79\xcc\x6a\xc5\x26\x8a\x84\x1d\x40\x54\x9f\x23\x2e\xfd\x64\x31\xe9\x0c\xf1\xe8\x9c\xb1\xe8\x6c\x71\xe8\x27\x83\xa2\xa6\xc3\x50\xb3\xfa\x14\x9e\x05\x7e\x9a\x13\x7a\x9a\xbc\xbe\x94\x51\x45\x71\xf5\x9a\x54\x78\x79\x9d\x06\x50\xcc\xb5\x12\x97\x6b\x20\x46\xe3\xb6\xee\xc7\xdb\x17\x58\x22\x57\x05\xc9\x52\x8f\xb8\x20\xb4\x55\x81\x21\x7e\x6c\xc6\x17\x5d\x8c\x0c\x6d\xcf\x45\x71\xcf\xc5\x6d\xc5\x71\x29\x4f\x1a\x6e\xfe\xd3\x31\x51\x04\x14\x14\x49\x6a\xfa\x7e\xb8\xc7\x0d\xdf\xc7\x9e\xec\x9a\xb7\xfc\x1e\xf1\x99\x22\x0c\x1d\x52\xe6\x76\xce\x51\xe0\xa5\xe9\xc2\x23\xc9\xf1\x0e\xfd\xd6\x57\x2f\x5d\x23\x5f\x5f\xdc\x03\x22\x43\x52\xee\x75\xe4\xcb\xf6\xf1\xd3\xa1\x2f\xfb\xc5\x59\x5b\xf5\xc3\x5f\x26\x24\x96\x27\xf6\xf5\xea\x18\xbd\xb7\xea\xc4\x2b\xe8\x8f\x17\x45\x98\x95\xc8\xf2\x46\x7d\x7d\xfb\x24\x19\x82\xdd\x37\x6e\x3c\x66\xba\x8f\x67\x31\x37\xb0\xd6\x32\x39\xc2\xfa\x5b\xa0\x80\x0e\x4e\xd7\xbd\x71\xba\xee\x08\x19\xfc\xf5\x59\x5b\xcf\x8f\x04\x1e\xac\xad\x7f\x17\x6b\x2b\xa0\x6b\x7b\x23\x70\x41\x26\xfb\xa4\xbc\x39\x01\xd2\x25\xa8\x75\x3a\x9c\x17\x17\x8c\x10\x93\xd0\xd4\x91\xf1\x01\xef\xdc\xac\xad\xaa\xa5\xf1\x21\xf6\x98\x19\xe3\xb7\xd6\xcd\x82\xac\x51\xda\x41\x28\x75\x43\xef\x3a\xdb\xa4\x11\xdc\x6a\x24\xa2\x65\x4c\xab\x18\xf6\x38\xe9\xce\x6b\x5b\x44\x12\x16\xef\x4e\xc7\x3d\xc2\x3d\x0b\x8e\x06\xa0\xe7\x82\xa0\x2e\xaf\xa6\xdf\x11\xdd\xea\x8c\x8b\x82\x4e\xab\x25\x5a\xe0\x4a\x1b\x4b\x16\x3c\x7c\x4b\xab\xca\xbe\x26\x01\xac\x4c\x94\x09\x3d\x1b\x8d\xa6\xe2\x6c\x0e\x93\x81\x4d\x47\xc8\x43\x43\x0a\xdd\x66\x51\x11\xcc\xda\xc6\xf4\x53\xeb\x47\x4b\xde\x0a\xd7\xcf\x24\xb4\x76\xd0\x3a\x95\x88\xd1\x6a\xe4\xa6\xbc\x4f\xcd\xb8\xbe\xe7\x3b\x97\xb2\x24\xa5\x65\x55\xbc\xa7\x92\x8c\xe0\x9d\xd1\x7d\x32\x7d\xe1\x77\x44\x08\x5a\x12\xb3\x6f\xcc\x67\x8d\xe0\x77\xb4\xec\xb0\xe3\x7a\x5b\x00\x6e\x3b\xba\xad\x1f\xe1\xbd\x4e\xb4\x32\xce\xc6\x8c\xcc\x31\xa8\xc7\x56\xa0\x19\x44\xa7\x69\xdf\xe0\x07\x59\x49\x0b\xac\x88\x04\xac\x7c\x8f\x72\xf5\x8e\xe2\xe8\x9e\xe8\xf1\x04\x3b\x0a\x1d\x32\x8e\x38\x64\xbc\xb5\x8c\xaa\x25\x44\xf4\x16\xad\x42\x25\xbf\x67\x47\x29\x07\xd3\xc0\x1c\x30\x9a\x12\x85\xbb\xa4\x35\xa7\x92\x49\x44\x18\x9e\x56\xfa\xec\x01\x86\xfc\x66\xe3\x06\x40\x33\x82\x55\x2b\x08\x9a\x63\x95\x20\x25\x36\x68\xf3\x66\x3d\x3f\xbe\xed\xa8\xb4\xf1\xba\x19\x6a\x99\x24\x89\x8a\x6c\x36\x13\x20\x32\x13\x53\x9f\x68\xde\xaa\x3d\xb9\x47\x1e\x73\x1d\x99\x8c\x92\xc0\x48\xa4\x35\x91\x88\xb7\x09\x9e\xbc\x9e\xf9\x67\x9b\xcb\x69\xe1\x0d\x7e\xa7\x8d\x4f\x6c\xd8\x34\xc7\x0e\xbb\x0c\xb4\xf2\x0d\x79\x28\x1d\xf0\xca\xe4\xf8\xbe\xbe\xbc\xfe\xe5\xdd\xe9\x7f\x9f\xbf\x8b\xdb\x02\x20\xeb\x58\xa8\x3b\xb7\x8c\xfe\xb3\x25\x08\xd7\x9c\xcd\x11\xae\xc2\x14\x98\x11\x38\x3a\x83\x0f\x40\x2a\xe6\x4d\x96\x89\xd4\x6b\xf5\x25\x10\x25\x18\xd6\xe0\x98\xcf\x91\x11\x14\x8b\x02\x49\x40\x7f\xf4\x91\x30\x6e\x0c\x80\x3f\xed\x91\x37\x30\xa2\xf4\x19\x37\x06\x21\x65\x08\x23\x49\xd9\xbc\x4a\xb6\x05\x93\x3d\x22\xa9\xfe\x90\x71\x37\x82\x49\xac\x5b\x24\xdd\x29\xd2\xeb\x43\xbc\x55\x99\xcf\x21\xd0\x5d\x66\xce\x05\x40\x1e\x1a\x2e\x89\x73\x01\x18\x1d\xf7\x62\x82\x70\x59\x8a\x24\x3d\xda\x0a\x1b\x6f\xa3\x1b\x82\x00\xd3\xac\x09\xfd\x8e\xd0\x4b\xf4\x5f\xe8\x01\xfd\x17\x38\x04\xfe\x18\xdf\x54\x1e\x73\x3b\x07\xa2\x79\xc1\xa5\xba\x98\x64\x5a\xe8\xbf\x2e\xb0\x82\x37\xea\xf5\x50\x1c\x4d\xa9\xb5\xcc\xc8\x83\x22\x42\x6b\xc4\x76\x0d\x53\x67\x2e\xc9\xb9\xa0\x3b\xf8\xa5\xec\xee\xd4\x38\xeb\xc5\xac\x0f\x84\x7e\xa6\xfd\x0d\x0d\xbf\xe5\x52\x5d\x5a\x69\x1d\xb2\x5c\x84\xfd\xa8\xb1\x2a\x16\x7d\x71\x9f\xd2\xea\x7b\xbd\xf7\x82\xeb\xbf\xe4\x70\x51\x9a\x74\xb6\x05\x4d\x10\x0e\xfb\x73\x62\xd3\x20\x73\xf9\xb6\xee\xc7\xb6\xd6\x8a\x7b\x13\xd4\x30\xab\xb7\x05\x95\x23\x1a\x5e\x1e\xa3\x73\x5c\x2c\x12\x7a\xa1\x67\xa3\x0c\x94\x81\x86\x97\xa6\x1b\x0b\x7c\xa7\xf7\xb8\x6d\x15\xe0\x7b\x46\x75\xf5\x81\x32\x38\x70\x5a\x62\x15\x98\xa1\x69\x0a\x7e\x4c\x90\x19\x11\xc2\xa4\x4c\x4e\x97\x2e\xf3\x22\x79\xb7\x25\x49\xb9\x46\x70\xc5\x0b\x1e\xcd\x6c\x90\x73\xab\x4c\x6c\x5f\x60\xee\x21\x6c\xe5\x03\x85\x3f\xbc\x9e\x8c\xd0\xcd\xd9\x64\x84\xb8\x40\xd7\x67\x69\x38\x90\xd0\x1a\x7d\x71\x73\x36\x79\xb1\xd3\x15\x08\xd2\x39\x6e\xce\x26\x11\x2f\x59\x47\x12\xd6\xb8\x19\xdf\x92\x65\xa4\x76\x97\x43\xc3\x1c\xfb\x8d\x95\x65\x40\x66\x9a\x6b\xdc\x6c\xfd\x36\x41\x70\x49\x07\xb2\x85\xcf\x7f\x06\xb2\x85\x81\x6c\x61\x20\x5b\x18\xc8\x16\x06\xb2\x85\xfd\x05\xfa\x0f\x64\x0b\x9f\x7c\x06\xb2\x85\x47\x9f\x81\x6c\x61\xab\x67\x20\x5b\x58\x7f\x06\xb2\x85\x8f\x3c\x03\xd9\x82\x7f\x06\xb2\x85\x81\x6c\xe1\xcb\x95\xda\x03\xd9\xc2\xea\x33\x90\x2d\x0c\x64\x0b\x03\xd9\x42\xf8\x0c\x64\x0b\x8f\x3c\x03\xd9\xc2\x40\xb6\x30\x90\x2d\x7c\xfc\x19\xc8\x16\xa2\x9f\x81\x6c\x61\xbb\x67\x48\xff\xd9\xf2\x19\xc8\x16\x06\xb2\x85\xd5\x67\x20\x5b\xf8\xe4\xb3\x1f\xee\xf1\x81\x6c\x61\x20\x5b\xf8\xe8\x33\x90\x2d\x0c\x64\x0b\x1f\x7d\x06\xb2\x85\x88\x67\xef\x9c\xae\x03\xd9\xc2\x40\xb6\xf0\xb1\x36\x06\x6b\x6b\xbb\x67\x20\x5b\x18\xc8\x16\xd6\x9e\x81\x6c\x61\xfd\x19\xc8\x16\x06\xb2\x85\x81\x6c\x61\x20\x5b\xf0\xcf\x40\xb6\xf0\xb5\xfb\x9d\x04\x91\xf4\x5f\x64\xc2\x2b\x5a\x2c\x93\xf3\x4c\xae\x88\xe4\xad\x28\xf4\x8d\x0d\xaf\x45\x0d\xbc\xd7\x7b\x14\x92\x94\xec\x3d\x4b\xde\xbf\x0a\x26\x2e\x4c\xe2\x17\x76\x0e\x9e\x62\x0a\xf6\x22\x91\xdf\x0d\xf0\x32\x1e\x41\x00\x2f\x51\x58\x28\x33\x7d\x71\xce\xd2\x64\xab\x3d\x1c\xc8\x3e\x24\x12\x86\xdc\x23\x7e\x17\x29\xee\x85\x2d\x7d\x74\x73\xe1\xa6\xa9\x68\x4a\x4a\x26\x42\xd7\x2d\x68\x17\xc4\x86\xc0\xe5\x77\xa8\x68\xda\x11\xaa\x49\xcd\x45\x42\x62\x44\x06\x0b\xae\xb7\x55\xf6\x61\x9d\xae\x4c\x87\xdc\xe4\x2b\x0e\xf3\xbf\x34\xf6\x42\x47\x10\xe3\xd7\x8a\x3a\x71\x98\x84\x35\x5b\x2f\x5b\x4d\x55\xcf\x0b\x74\xc9\xd5\x95\x3d\xdc\x3b\x5b\xaf\xcc\x88\x05\x37\x85\xe9\xdc\x32\x91\x0b\xde\x5d\x68\x9f\x9d\x3b\x89\xce\x37\x7c\x0a\xf1\x4f\xd9\xe8\x97\xf8\x31\x45\x75\x08\x57\x82\xe0\x72\x09\xdd\x28\x00\xaf\xd7\xf9\xff\xbe\xc0\xb4\xcd\xa2\xc2\x34\x1e\xe4\x97\xeb\x48\x9f\x41\x2f\x90\xde\xaf\x1d\xf8\x1d\xf2\xc8\xfc\x62\x8d\x3c\xc4\x9b\x9a\x33\x7e\xec\x7e\x65\xfe\x78\x94\x60\xe9\x61\x05\xbb\x0b\x8c\x18\x30\x65\xa9\x0c\xd5\x84\x34\xe3\xce\x98\x74\x25\x69\x88\xd6\xde\x8d\xb3\x33\x5e\x47\x5f\x32\x5c\xd3\xc2\x9d\x8a\x53\xb3\x09\x29\x67\x2b\x16\x60\x8e\x2e\x6b\xc3\xb4\xae\x5b\x85\xa7\x15\x39\x46\x17\x6a\x63\xa9\xfc\xb4\x9c\x65\x94\x05\xab\x9a\x88\x53\xdd\xa8\x40\xc3\xa6\x32\xcc\x0b\x84\x69\xf1\xc3\x19\x41\x84\x29\xb1\xd4\xfb\x6f\xc2\xcb\x6b\xbd\x05\x7b\xdf\x4e\x26\x64\x48\x84\xa7\xe6\x80\xa6\x26\xc2\x52\xf3\x80\x49\xd3\x81\xa4\x79\x41\xa4\x9d\xbb\xdf\xf0\xc9\x84\xd9\x39\xbd\x6d\xa1\xaf\x80\x0d\xa2\x09\xf1\x59\x62\x0f\x74\x8b\x13\x5e\x6a\x05\x47\x10\x23\x9f\xfc\x19\x35\xce\xbe\x0b\xdd\xb9\x5b\xf0\xce\x61\xd5\x69\x3e\xf8\x0e\xd3\x4a\x1f\xe0\xc4\x0e\xf8\xec\xe6\x4c\x51\x9a\x4c\x71\x05\x0b\xa4\xdf\xa7\xcd\x62\x53\xb0\x7a\x59\x5c\xc5\x82\x4b\xc2\x40\x5e\x62\x9f\x6d\xe3\x73\x01\xac\x88\x29\xcd\x5d\x9c\x8a\xf8\xbd\x98\x21\x52\x37\x6a\x39\x42\xe4\x8e\x88\xa5\x5a\x00\x32\x40\x70\x83\x16\x81\x26\x74\xdf\x6a\x5c\x06\xbb\x63\x84\xb8\x73\x16\x27\x36\x0f\xf7\x83\xb5\x9f\xda\x4a\x19\x6b\x0a\xf4\xef\xa4\x74\x50\xf3\x64\xd8\x35\xb9\x49\x4f\x50\xaa\xd0\xcc\x49\x5a\xa2\x9f\x8a\xd6\x34\x8e\x0a\x12\x65\x3c\x0b\xef\xa0\x17\x41\x9a\x87\xde\x12\x35\x7e\x00\x57\x22\xae\x79\xcb\x60\x6b\x14\xbc\x6e\x5a\x15\xa8\xe4\x4e\xbb\x7f\x36\x1f\x63\xc1\xd9\x8c\xce\x6d\x14\xec\xa4\xc6\x0c\xcf\xc9\xd8\x77\x67\xdc\xa9\x37\x27\xbb\x43\x67\xe0\xd2\xd1\x48\x4c\x72\xe4\x14\x63\xa5\x88\x60\xdf\xa1\xff\x39\xfc\xfb\xef\x7e\x1d\x1f\xfd\xf9\xf0\xf0\xa7\x97\xe3\xff\xfc\xf9\x77\x87\x7f\x3f\x86\x7f\xfc\xc7\xd1\x9f\x8f\x7e\x75\x3f\xfc\xee\xe8\xe8\xf0\xf0\xa7\xbf\xbc\x7f\x73\x33\x39\xff\x99\x1e\xfd\xfa\x13\x6b\xeb\x5b\xf3\xd3\xaf\x87\x3f\x91\xf3\x9f\x3f\xf3\x25\x47\x47\x7f\xfe\x6d\x7c\xa4\x30\x35\x2c\x9e\x2f\x28\x9e\x29\x24\xfe\x24\x01\x71\x2b\x63\x77\x7e\xf8\xed\x15\xb8\x76\xfc\x6d\x24\xe1\x63\xc7\x5f\x24\xfb\x4f\x2e\x66\x5d\xfb\x54\x22\x5e\x53\xa5\xac\xb7\x00\x87\x3c\x35\x2b\xbe\x1b\x2b\xb0\xe8\xcc\x28\x50\x54\x86\x7c\x29\x9d\xcb\x27\xba\x5b\xfe\x7e\x05\x6f\x15\x43\xb4\x6e\x2a\x52\x13\xa6\x40\xf0\x8c\x9d\x6d\x0b\xae\xbf\xe3\x6e\x04\x05\x66\x8c\x2b\x44\x1e\x0a\x42\x4a\xdb\xc9\x41\x36\x06\xcf\x20\x1b\x07\xd9\xf8\xa9\x27\xd9\x7f\x9d\xc9\x91\x19\xfa\xac\xd7\xa2\x51\x5a\x2e\x98\x23\xe6\xd4\x67\xf8\xba\xe7\x38\xe0\x33\x44\x62\xb9\x2c\xbb\x46\x2c\x3d\x26\x8e\xf5\x56\x22\xc8\x0f\xb7\x52\x49\x3a\xac\x8c\xb1\x45\x39\xdb\x0f\x2e\xf4\xde\x72\x5f\xb5\xd5\x2e\x9d\xd7\x01\xb3\xb8\xd6\xed\xc1\xa3\xa9\x7b\xe4\x40\xdd\x0b\x52\xdc\x1a\x17\x72\x49\x0c\xc8\x82\x98\x3b\x28\x4e\x03\x08\x68\xf2\x17\xbc\xad\x4a\xdd\x86\x9d\x0e\x62\x16\xe8\x81\xaa\xe3\x8f\xae\x61\x54\xbb\x5f\x29\x3d\xbc\x3d\xb3\x7a\x0f\x05\xba\xcc\x82\xdf\x87\xaa\x04\xcc\xa9\x56\x18\x16\x98\x95\xd1\xf8\xfb\x3d\x08\x2b\x63\xc0\xa4\xef\x28\x14\x6c\x1a\xdf\x87\xe0\xe2\xb5\x87\xea\x6b\x39\x8c\x2d\x50\x1f\xdf\x12\xa6\x0f\xd0\xfa\xc2\xcf\x3c\xa5\x03\x15\xa0\xd1\xa5\x30\x15\x00\xa8\x12\x2b\x2a\xb5\xb6\x69\xa0\x6e\xe0\x51\x69\xb8\x94\x74\x5a\x91\x0e\x86\xf3\xc2\x6e\xce\x17\x5a\x78\xb8\xdb\x22\x8d\x62\x31\x83\x6f\x2f\x83\x02\xa0\x67\xf5\x8c\x97\x29\x6a\xdc\x8a\x47\xdf\x0b\x61\x83\xe0\x84\x12\x1e\xa5\x91\xc1\x20\x80\xf5\xba\xf6\x57\xf5\xeb\x70\xe5\xeb\x33\x89\x15\x8f\x57\xe9\xf2\xb8\xf3\x5d\x37\xf6\xcb\x4b\xdb\xdb\x14\x82\x54\x60\xe4\xc8\x05\x6d\xd0\x94\xa8\x7b\x42\x56\x92\x12\xba\x7d\x73\x28\x8f\x1c\x4a\x39\xb1\x13\x1d\x52\xc1\x20\x3e\x8e\xd1\xa4\x77\xcc\x21\xe6\x9d\x4e\x34\x72\xc1\xbe\x5b\x15\x51\xc0\x84\xea\xc4\x8c\x13\x61\x1b\xc6\x0a\x31\xc0\xb4\x88\xa5\x1f\x2c\x01\xed\x67\x6d\xcc\xc9\xc3\xbb\xe4\x2a\x6d\x84\xc9\x43\xd3\x7a\x94\xf5\xe6\x3f\xc9\x28\x33\x05\x4b\x2c\xac\x68\x8f\x4e\x61\xff\xaa\xb5\x73\x67\xb7\xbe\x17\xce\xbd\x28\x73\x20\xbe\x53\x77\xce\xa9\x42\x35\x97\x0a\x7d\xf3\xed\xb7\x88\x18\x5f\x8c\x01\x99\x24\xbb\xa0\x51\x36\x06\xa6\x2c\x1c\x4c\xf9\x68\x17\x51\x36\xea\x45\xf4\x91\xc8\x47\x1c\xd9\x58\x66\xe0\x93\x24\x45\x2b\xa8\x5a\x6a\x5b\x80\x3c\x44\x45\x18\x73\x9c\x95\x2e\x0f\xf1\xba\xdf\x21\x8b\x86\x71\x27\xc7\xfc\x0e\xf1\xc6\x50\x4b\x3f\x5a\x3c\xad\xb3\x0a\x5b\x06\xce\x80\xb8\x5d\x7e\x31\xd3\xab\x64\x12\x53\xc0\x70\x04\xac\xce\x6a\x17\x5d\xca\x88\xe9\xce\x3f\x5b\x7a\x87\x2b\x2d\x9a\xbb\xbf\x98\x40\x12\x41\xf8\x47\x5f\x20\x84\x0a\xe4\xc5\x44\xd0\x3b\x5a\x91\x39\x39\x97\x05\x36\xca\xc4\xae\xdd\xf0\xa7\x8f\xf4\x0b\xf6\x83\xe0\x95\x44\xf7\x0b\xa2\x16\x44\x20\xec\x12\x97\x00\xe2\x33\xc7\x94\xa1\x9a\x8b\x14\x18\x88\x6d\x54\x9a\xcc\x29\xaa\x24\x6a\xb0\xd0\x6b\xef\x32\xa4\x0c\xd0\x68\xca\x79\x65\x59\xe2\xab\x65\xd7\x2f\x1a\x8f\x97\x80\x98\x3b\xff\x85\x91\xfb\x5f\x74\x2f\x24\x9a\x55\x78\xee\x13\xa3\xe0\x8a\x59\xd5\xec\x92\x93\xb6\x1e\x9d\x68\xa0\x40\x6f\xf5\x8d\x72\x8f\x97\xb2\x4b\x67\xeb\xda\xa6\x09\xb2\xfd\xd5\x11\x9c\x62\x2c\x91\x6f\xbb\x8c\x7e\xd9\x37\x47\xc0\x3f\x72\x76\x3a\xf9\xe5\xfa\x6f\xd7\xbf\x9c\xbe\x7e\x7f\x71\x19\xfd\xb2\x4b\xae\x88\x89\xa3\x04\xae\x25\xeb\x70\xb2\xab\xe0\xa1\xba\xc7\x5c\x1e\x03\x48\x02\xb8\xd4\x58\xc9\xef\x13\x91\x64\x7a\x4f\x11\x1c\xe7\xc7\xc0\x4d\x73\x2a\x6a\x2e\x26\x82\xcf\x68\x15\xad\x7b\xe7\x3a\xc1\x2b\xdd\x71\x98\x92\x53\xfb\x71\x27\xee\x0d\xbd\xcf\x3a\x74\x31\x10\xd4\x14\x48\x64\xf4\x6b\xe2\x63\x58\xbd\x14\x40\x93\x90\xb8\xd2\xc5\xf8\x43\xb4\xd3\x3d\xb3\x73\xf2\x04\xdd\x8d\xc8\x3f\xcf\x61\xa4\x57\xbc\xc0\x15\x14\xae\x4b\xdb\xf8\x28\xb3\x89\xb0\xda\xaf\x20\xd9\x13\xbb\xed\x8c\x2a\x8e\x4b\xe3\xdd\x36\xc2\xbf\x24\xae\xa8\x85\x53\x76\x00\x22\x97\xd4\x91\x1b\x93\x68\x07\xed\xb9\xec\xd4\x46\x10\x17\x21\x5d\x6d\x9e\x9b\x5a\x1e\x49\x4d\xbe\xef\x03\x0e\xed\x28\x7b\x3c\x0a\xa9\x67\xce\x37\x63\x0f\x18\x9d\x81\x67\x03\x3c\x8e\xda\x64\x5e\x36\xc6\xd5\xf8\xce\x2d\x43\x42\xc5\xab\x4c\x66\x2c\xbc\x64\x4f\x76\xa7\x99\x1f\xbf\x23\x4d\x96\xd0\x2d\xd5\x33\x38\xeb\x84\xb4\xdb\x36\x4e\x07\x31\xa9\x42\x89\xfb\xf1\x47\xa8\xad\xe8\xe4\x7f\x06\x37\x91\x5f\x62\x34\x0e\x8e\x56\x23\xc8\x78\xfd\x78\xa5\x5a\xde\x57\x2d\x53\xb4\x26\x8e\x7a\x6a\xbc\xa2\x13\x09\xf3\xeb\x03\xe9\x89\xde\xb3\x6c\x74\x84\x7e\x60\x70\x5e\x19\x29\xd1\x18\x31\xde\x2d\x11\x61\x33\x2e\x0a\x70\x01\xec\x74\x83\x17\xb8\xc1\x53\x5a\xd1\x14\x61\x9e\x6b\x83\x43\xdd\xa4\xa0\x3f\x80\x5b\x29\xcb\x93\x52\xf0\xc6\xdc\xc4\x8e\x13\x22\x3d\x05\xa0\x9f\x7b\x1c\x52\xfc\x5b\x9f\x50\xaf\x23\x73\x81\x99\xea\x48\x07\xd6\x36\xce\xbf\xa3\x0e\x92\x43\x09\xc0\x65\xbe\x0a\x64\xa7\xa5\x96\x19\xe1\xb2\x25\x9f\xab\x7d\x63\x33\x3f\x73\x83\x0b\x92\x8f\xd1\xe4\xc3\xf5\xc5\xff\x59\x39\x37\xf1\xaa\x9d\x79\xf6\x9b\xcb\x58\xcb\x83\x6c\xdb\xe6\x8a\xd4\xfc\x6e\xd8\x38\x5f\xfd\xc6\xf1\x0e\xa2\x9d\x13\x31\x5e\xb5\x61\xec\x97\xb2\xa0\x6b\xa8\x4e\xd2\x75\x26\x9e\xb3\xa8\xff\xd6\x20\x27\x15\x0b\x82\xf4\x57\x98\xa2\xb8\xaa\x96\xa1\x8f\x54\x71\x53\xe3\x30\x4b\xa1\xee\xf0\x76\x9d\xe1\x4a\x7e\xa9\x57\x64\x8a\x6b\xa7\x11\xbc\x78\xcf\x5b\x96\x87\xd9\x31\x61\xc7\xf9\x8e\xa0\x92\x30\xae\xac\x37\x05\x6c\x09\x3e\x83\xdf\x22\x03\x90\x0e\x48\x9b\x7b\x7a\x4e\x82\x9a\x75\x13\xa8\x56\x1e\x49\xe2\xf4\x70\x63\xbf\xb4\x92\xc8\xcd\x7a\x55\x87\x97\x9e\x25\x60\x0a\x04\xc1\xa5\x81\xb4\x60\xb5\x30\x6c\xa2\x35\x96\xb7\xa4\x34\x1f\x24\x32\x29\x79\xd6\x24\xc8\x98\x73\x33\x7d\xa3\x27\xd7\x25\xc8\x82\x43\xd8\xc0\xef\x80\x5a\x29\xc5\x14\xdb\xe9\x69\x48\x10\xec\x7a\x11\x3e\xb0\x6a\x79\xc5\xb9\xfa\xde\x17\x4b\xdd\xf5\xc9\xf8\xab\x0d\x47\xf4\x9d\x98\xe0\x97\xc6\xd0\xe5\x31\x6c\x1c\x90\x8b\x41\x89\xd7\x54\xb1\xa8\x17\xe4\xdf\x55\x2a\x8a\x96\x9d\xca\x37\x82\xb7\xd1\x3a\x5c\x4e\x7b\xf3\xcd\xc5\x6b\xb8\xf8\x5a\x4b\xb6\xc7\x94\x58\x36\x9c\x32\xe5\x3c\x5e\x19\x83\x36\x3f\x58\x5a\xc3\x50\xb2\x25\x33\x98\x21\xf4\x1e\x2f\x11\xae\x24\xf7\x2e\x35\xb6\x29\xc8\xe9\x22\xa8\xfa\xd7\x53\xae\x16\x6b\xa1\x53\xcc\xe2\x43\x39\xeb\xed\x8d\x02\xce\xbe\x0e\x9a\x42\xd9\x5a\xb3\x0a\x52\x88\x1b\x41\x0a\x52\x12\x56\x7c\xa9\x27\x62\xd7\x14\x72\x70\xaa\x2e\x39\xd3\xe2\x75\xd7\xe7\xea\xc2\xfb\x27\xed\x6a\x84\xa7\x08\x5c\xd9\x36\x88\x88\x81\x6e\x11\x84\x6b\x2b\x53\x30\xa0\x17\x33\x88\x7a\x9a\x4d\xf7\x97\x76\x4a\x2a\xbd\xd8\xb4\xaa\xf4\x0e\xa4\x25\x56\x06\x10\x40\x6b\x3c\x27\x08\x2b\x7f\x08\x15\x47\x84\xc9\x56\xd8\x7d\x43\xe3\xe1\x93\x25\x27\xd2\x17\xe6\xc6\x12\xfd\x70\xf1\x1a\xbd\x44\x87\x7a\x6c\x06\xbb\x37\xc3\xb4\x02\x06\x47\x87\x9a\x0d\x6d\x80\x19\xe4\x86\xf1\x14\x84\xd1\x85\x95\x23\x88\x0b\x73\xb5\x8c\x10\xe3\x48\xb6\xc5\xc2\xcd\x01\xe5\xcc\x7b\x84\x2d\x9d\x7f\x52\xd6\xeb\x20\x76\xf2\xdd\x87\x3f\x48\x12\x0d\x56\xcd\x79\x1d\xfe\xf0\x8c\xd7\x61\x68\x22\xea\xe3\xdf\x5f\x30\x73\x56\x6b\xa2\x70\x89\x15\xb6\xd7\xa4\xfb\xc2\xb0\x6b\x87\xcb\x32\xe1\xb2\x94\xe4\x1d\x65\xed\x83\x41\xba\xed\x45\xd8\xe3\xfa\x1c\x7a\x04\xc7\x0b\x16\x9a\x07\x71\x3b\x17\xa1\xc8\x90\x2c\x71\xd1\x3b\x46\xa3\x47\xac\x6e\xb8\x25\x1c\xdb\x98\x36\x84\x30\x2b\x79\xbd\xd6\x49\xa0\x43\x8b\x4d\x10\x44\xbd\xec\x8f\xe1\x60\xba\xe7\xdf\x3b\x20\x54\x91\x3b\x52\x65\xf3\xed\xbf\xd3\x6f\xd3\x93\xe3\x76\x2e\xbc\x1e\x55\x78\x4a\x2a\xcb\xc1\x66\x48\x34\x33\x9e\xb0\x4c\x3e\x70\xc1\x33\x42\x62\xae\xb8\x41\x72\x61\x3f\x11\xfa\xf5\x5f\xc4\x3c\x64\x05\x5f\xdc\x58\x74\x49\x37\x0f\xe0\x03\xfd\x12\xe6\xa1\x4d\x50\x10\xd1\xea\x3c\x68\x6d\xb3\x3f\x0f\xa0\x7f\xed\xfb\x3c\x48\x52\x14\xbc\x6e\xf6\x04\x29\x79\x63\x50\xf0\xba\x47\x9f\x8b\x8a\xec\x7f\x19\x27\xc1\x9d\x6d\x19\x04\xac\xcc\x3d\xe8\x6a\x21\xfc\xef\xe0\x3a\x07\x69\xb7\x7a\xc7\xdb\xd6\x93\x11\x99\xbe\x45\xfb\xc2\x7f\xc7\x1b\x6f\x80\x61\xf6\x9e\x67\x87\x61\x06\xf4\xac\x18\xdc\xf3\x3d\x48\xe4\xd7\x00\xc6\xd4\x46\x00\xcc\x2b\x61\x25\x65\x73\x08\x58\x8d\x6c\xee\xe8\x1d\x71\xe2\xf9\xd6\x78\xbc\x0e\x40\xe2\xb8\x0e\x39\x71\xd3\x61\x56\x0d\x6d\x6b\x56\xec\xe6\x26\xbc\xa6\xf9\xce\xe5\x87\x9b\x90\xb4\x15\xb3\xa5\x21\x24\x82\x3f\xd9\xf9\x75\xfa\xc5\x60\x3a\x57\x57\xf1\xa9\x21\x9d\x49\xef\xdb\x8c\xe8\x7c\xbe\x53\xfa\x79\x28\xcf\x55\x8c\x67\xd6\x2e\xac\x02\x3e\xd7\xdb\xc8\xb0\x72\xc9\x47\xc0\x5e\x9d\x7b\xe4\x00\xf9\xab\xe9\x91\xb3\xb2\x0b\x2d\x38\x14\x65\x73\x19\x3a\x41\x70\x95\xca\xf6\x62\x9e\x4d\x5e\x10\x77\x0a\x3c\x6f\xe9\xba\x37\xa0\x5f\xec\x2a\xa5\xf5\x4f\x78\x30\xbe\x6c\x4f\x44\xa5\x2d\x8a\x2f\xdc\x0f\x31\xaf\x25\x3e\x13\x7a\x06\x15\xc5\xd5\x75\x43\x8a\x7d\xb9\x2d\xde\xbc\xbf\x3e\xed\xf7\x0c\x74\x61\xcb\xd2\x4c\xe0\xf7\x08\x97\x35\x95\x12\x02\x3e\x64\xba\xe0\xfc\x36\xa9\xc9\x43\xc7\xdc\x37\xa7\x6a\xd1\x4e\x8f\x0b\x5e\x07\x24\x7e\x63\x49\xe7\xf2\xc4\x4a\x94\xb1\x9e\xb8\x23\x44\x59\xe5\x33\x85\xc1\x5b\xc8\x94\xb4\x11\x84\xe4\xc1\xa3\xc2\x8f\x1e\xb6\x1e\xe4\xa7\x78\x68\xf6\xfa\xf4\x00\x95\x36\x6c\xde\x9d\x6b\x1d\xeb\xbb\x2a\xad\x0c\xcd\xca\xce\x7a\x64\xec\x21\x2d\xb4\x8d\xe2\x6c\x9c\x47\x63\xbc\xee\x7c\x92\xac\xd2\x5f\x10\x99\x84\x80\xcd\x79\xe6\xde\x76\x5d\xea\x48\xd3\x80\xb9\x13\x3f\x9a\xe9\x0e\xe1\xed\x03\x28\xe5\x6b\xff\xf4\x20\x17\x93\xf9\x69\x55\xe9\x85\xc4\xfa\x9a\x38\x90\x21\xba\x13\x4c\x93\x05\xbe\x33\xa2\x40\xea\x15\x27\xb3\x19\x29\xc0\x58\x08\x47\x01\x17\x49\x9a\x50\x30\x0c\x64\x61\x79\x14\xc5\x4d\xdb\x18\xd5\xf4\x41\xf7\x30\x6c\x31\xc4\xa0\xb2\x12\x02\xff\x9b\x7f\x9d\x50\xd9\x10\x01\xf8\xc0\x13\x74\x8e\xf4\x0a\x85\x8d\xb8\xe4\x68\xa5\xaf\x2d\xfd\x8b\x4b\xa2\xb4\xa1\x66\xe6\x2d\x8c\x3e\x68\xc3\x4a\xb4\x19\x0e\x43\x4a\x64\x18\x85\xd1\xe1\xac\x92\x22\xf1\x3c\x40\xa4\xd8\xf6\x49\xeb\x20\x4e\x79\x7b\xae\xc8\x31\xda\x90\xbe\xf3\x6c\x11\x64\xf4\xf9\x51\xe4\x27\x8c\x55\xa1\x7d\x89\x57\x25\x4a\x7d\x5b\xd6\x1f\x0a\x8d\x26\x33\x9e\xc0\x5b\xb6\x28\xdb\x14\xd1\xde\x8e\x89\x3f\xc8\x43\xbc\x26\xda\x9b\xaa\xf3\x07\x52\xf8\x2d\x22\xe1\x1e\xab\x6b\xe0\x18\xe3\xd0\x48\xab\x7c\x21\xf3\xe4\x5b\x6b\x4f\x74\x7a\x3b\xc2\x7d\x11\xa2\x67\x76\xc2\xa9\x53\x93\xcd\x8f\x5a\x71\xee\x2f\x82\x74\xde\xf6\x80\x4a\x5c\xff\xa8\x6f\x2e\xca\xe6\x96\xcc\x84\x0b\xcf\xf0\x9b\xd4\x2d\xd7\x0f\xa8\x60\xc7\xb9\x42\x87\x07\x27\x07\x47\x6b\x7b\xe1\x40\x86\x78\x68\x93\xba\xd9\x0d\x48\xd2\xba\xa9\x96\x30\x86\x03\x53\xb4\x2e\x91\xf3\xcc\x21\xeb\x7c\x51\x18\xb9\x20\x55\x35\x42\x52\xdf\xd3\xd8\xf1\x71\x9b\x4f\xf5\x97\x94\x68\x0b\x63\xcf\x1f\x1e\xfc\x7a\x30\x42\x44\x15\x47\xe8\x9e\xb3\x03\x65\x3c\xb3\xe8\x06\x94\xdd\xa4\x3e\xf9\x4e\x2c\x79\x0b\x75\xd5\xcd\xb2\x79\x0a\xf7\x02\x6b\x3d\xad\x35\xca\x84\x61\x07\x20\x55\x42\x9d\x70\xfd\x9c\x3f\x50\xa5\x65\xa6\x6a\xc1\x9e\x7a\x69\x54\x1a\x02\x45\xe1\xb0\x36\xbd\xef\xc8\xc9\x82\xe0\x4a\x2d\x96\x5e\xcd\x32\x25\xab\x25\x6a\x99\xfd\x4d\xba\xb0\xdf\x83\xfc\xb6\xfd\xcd\x34\xb3\x95\xf3\x6f\x16\x82\xc8\x05\xaf\x76\x9e\x6f\xe6\xca\x29\x17\x9c\x49\x2d\x53\xb4\x2d\x60\xfb\x28\x7d\xaa\x8f\x2d\xe9\x6c\x28\xa2\x39\x9c\x32\x41\x0c\x6a\x55\x6f\x2d\x28\x00\xbd\xc0\x77\x5a\xde\xc8\xb6\x28\x08\x29\x53\x74\xa8\x50\x79\xfb\x7d\xce\x82\xcf\xbb\xaf\xad\xac\x9f\xb9\x68\xf2\xdc\xd2\x6f\xae\x26\x67\xbd\x5b\x1a\x3e\x78\x0b\xc7\xf8\x6c\x41\x8a\xdb\xab\xb4\x1a\x47\x7b\x12\x03\x6d\xb8\xd8\xa5\x62\xa0\x9b\xcf\xa6\x15\x4c\xb8\x50\x88\xf9\x12\xea\xfa\x6c\xcd\x61\x15\x89\xb8\xa3\x05\x39\x76\xe5\xd5\x5d\x14\xd1\xd5\xe4\xc2\x6c\x4e\xd0\x2b\x7d\x20\xfe\xf8\xed\xb7\xbf\xff\x36\x5d\x46\xa7\x73\x2f\xe6\xe1\x5d\xb4\x03\xdf\x17\xb5\xeb\xda\x74\x67\x93\x57\xcc\xf6\x54\xaf\x41\x53\xe1\xc2\xaf\xcd\x7c\xf3\xa1\x4b\x73\x9f\x48\x42\xd0\x06\xbf\xaa\x16\x1d\xe6\x3f\xd3\x8a\x4f\x4f\x6a\x2c\x15\x11\x27\x25\x2f\xec\xb5\x3e\x06\x86\x52\xca\xe6\xc7\x75\x79\x94\x50\x74\x13\xd9\xac\x89\x05\x95\xce\x8d\xb3\x12\x10\x71\x51\x32\x5f\x0e\x82\x4a\x1f\xca\x9b\x2e\x61\x52\x76\xee\x2b\x44\xae\x97\xdf\xa1\x17\x2f\xa2\xde\xa2\x97\xe0\x0d\xc9\x93\x32\xf3\xf6\xe6\x66\xf2\x86\xa8\x50\x60\x33\xf8\x10\xbd\x39\xbf\xf1\x45\xf8\xf4\xee\x32\xd9\x17\x83\xd4\x4e\x91\xda\x0b\x9e\x56\x85\x31\xb7\x83\xd8\x88\x12\xc5\xb5\xfa\xc4\x48\xa1\x17\x7a\xd4\xab\xf7\xe4\x00\x53\x17\x13\x53\x0e\x43\xab\x5c\x78\x5a\x2d\xd1\x3d\x36\xa9\xd7\x71\x2c\xb4\xdd\xf3\x42\x77\xe3\x85\x96\x5a\x7a\x57\xbf\x25\xb8\x24\x42\x82\x35\x44\xf0\xee\x83\x1f\x41\x9f\xb2\x2d\xdb\x59\x2b\x15\xaf\xd1\xc2\x0e\xd5\xcc\x61\x57\xe6\xd2\xe8\x46\xe6\x08\x82\x33\x48\x22\x41\x1a\x63\x2d\xd9\xbf\xf9\x2a\x6c\xa1\x35\x29\x64\xe6\x39\x28\x20\x82\x51\x11\x4e\x95\x55\xf4\xa1\xfa\x34\xb5\x32\x0a\x2c\x80\x34\x2b\x3d\x4b\x21\x02\x94\xa9\x18\x01\x4a\xaf\x2d\xec\x5e\x92\x1e\x2d\xc9\x53\xd6\x00\x65\xa9\x54\x8c\xb2\x93\xaa\x23\x1b\x13\xb0\x9b\xcb\x20\x05\x74\x47\x53\xe9\xd3\x90\x23\x59\x70\xc8\x8b\x02\x33\xce\x68\x81\x2b\xfa\x2f\x52\xa2\xb6\xe1\x0c\xf1\x56\x35\xad\x02\x57\x50\x81\x25\x19\xdf\x61\x41\xb5\x40\x35\xf5\xdc\x3d\x64\x83\xe9\xd3\xae\x38\x07\x3f\x89\x8f\x8e\x99\x1e\xa7\x77\x33\x93\x36\x83\x1c\x67\x7e\xe6\x15\x5e\x5b\x9c\xf4\x1d\x8d\xf6\xda\x07\x83\x4c\x65\xbd\x45\x3e\xb3\x0e\xab\x05\x40\x90\x0a\x88\x24\x5a\x04\x1b\x08\x4e\x6d\x36\xec\x41\x86\x40\x56\x2b\x36\x51\x24\x40\x60\x90\x8b\x15\x3b\x58\xf7\x70\x7d\x0e\x33\x05\xc5\x9f\xde\xac\x0e\xab\xb2\x4f\x89\xd6\xed\x2f\x4e\x2f\x4f\x7f\xb9\xfe\xf1\xec\x97\xcb\xd3\xf7\xe7\x29\xaf\x4e\xae\xa8\x98\xb3\xa6\x62\xb6\xaa\x8a\x4f\x54\x73\x56\x3f\xb2\x58\x90\xfd\x89\x87\x5f\x43\x6f\x42\xf6\x24\x6b\x03\x50\x36\x77\x9a\x7f\x1a\x9d\x16\x5a\x71\x9a\x6a\xc1\xb3\x53\x89\x43\x19\x55\x14\x57\xaf\x49\x85\x97\xd7\xa4\xe0\xac\xdc\x39\x8c\xf4\xd2\x0b\x1b\x69\x3a\x64\xdd\xd6\x7d\xf0\xc1\x02\x4b\xe4\xaa\x13\x4e\xc9\x8c\x0b\x02\x51\x13\xa6\x25\x52\xd3\xc5\x8f\xcd\xf8\xd4\x33\x96\x05\xbf\xe7\xe2\xb6\xe2\xb8\x94\x27\x0d\x37\xff\x19\x57\x74\x46\x8a\x65\x51\x91\xdf\xf8\xfe\x8f\x93\xd4\xf4\xfd\x70\x8f\x37\x44\x50\x80\x2e\xec\xc3\xae\x79\xcb\xef\x11\x9f\x29\xc2\xd0\x21\x65\x6e\xe7\x1c\x05\x5e\x9a\x2e\x3c\x92\x4e\xfb\xa4\x38\x7a\xf5\xd2\x35\xf2\xf5\xc5\x3d\x20\x32\x24\xe5\x5e\x47\xbe\x6c\x1f\x3f\x1d\xfa\xb2\x5f\x9c\xb5\x55\x3f\xfc\x65\x42\x62\x79\x62\x5f\xaf\x8e\x7d\x42\xcd\x2b\xe8\x8f\x17\x45\x98\x95\x0e\x1b\xf3\xf5\xed\x13\x55\x34\xd7\xbc\xb8\xcd\xe4\x76\xbd\x39\x9b\x98\xb7\xad\xe0\x59\xcc\x0d\xac\xb5\x4c\x8e\xb0\xfe\x16\x28\xa0\x83\xd3\x75\x6f\x9c\xae\x07\x5d\xa9\xa9\x6d\x1d\xa8\x07\x83\xb5\xd5\x3d\x4e\xf1\x11\xfd\x52\x0d\x83\xb5\xf5\xc8\x33\x58\x5b\x5b\x3c\x06\xed\x0e\x99\xa3\x6f\x04\x2e\xc8\x64\x9f\x94\x37\x27\x40\x50\xd9\x0a\x5b\xff\xca\xeb\x70\x5e\x5c\x30\x42\x4a\x23\x3f\xec\x50\x08\x9a\xeb\x91\xcc\xda\xaa\x5a\x1a\x1f\xa2\x51\x01\x2c\x28\x26\x8d\xeb\x16\x5e\x6d\x55\x5c\x17\x64\xde\xd4\xbb\xce\x36\x69\x3c\x6b\xb3\x2b\x6f\x60\x8f\x93\xee\x3c\x54\x67\x26\x2c\xde\x9d\x8e\xc3\x15\x44\x92\xce\xf5\x74\xd9\x62\xb2\xc8\xb0\xfd\xb8\x1a\x61\x5d\x47\x74\xab\x33\x2e\x0a\x3a\xad\x96\x68\x81\x2b\x6d\x2c\xdd\x53\xb5\x40\x18\xdd\xd2\xaa\xb2\xaf\x89\x9f\xa8\x6b\x57\x02\xde\x68\x34\x15\x67\x73\x98\x0c\x6c\xc1\xe3\x0f\x0d\x29\x74\x9b\x45\x45\x30\x6b\x1b\xd3\x4f\xad\x1f\x2d\x79\x9b\x01\x3f\xee\x02\xdf\x5e\x9f\x62\xd4\xf2\x24\x98\x0a\x53\x1f\xdd\xf3\xfd\x2c\x40\xf4\x41\x2d\x88\xb8\xa7\x92\x98\x8a\x57\xd1\x7d\x32\x7d\xe9\xd7\xbb\x32\x9f\x79\xae\x07\x9b\xe2\xa4\xb7\x05\xe4\xdc\x45\xb7\xf5\x23\xbc\xd7\x89\x56\xc6\xd9\x98\x91\xb9\xc9\x28\xb7\x02\xcd\x20\x3a\x4d\xfb\x06\x3f\xe8\xf3\x93\xa5\xe2\x0d\xa2\x75\x4d\x4a\x6d\x1f\x57\x4b\x74\x47\x71\x74\x4f\x20\x7b\xbd\xdb\x51\xe8\x90\x71\xc4\x1b\x7d\x75\xb5\x8c\xaa\x25\x44\xf4\x16\xad\x42\x25\xbf\x67\x09\x89\x21\x37\x16\xe6\x80\xd1\x94\x28\x6c\x7d\xe0\xfa\x10\x78\xf2\x66\xe0\x65\xd6\x67\x0f\x30\xe4\x37\x1b\x37\x80\xe7\x73\x9e\x63\x95\x20\x25\x36\x68\xf3\x66\x3d\x3f\xbe\xed\xa8\xb4\xf1\xba\x44\xc2\xd8\xfd\xa0\x60\xd3\x27\x9a\xb7\x6a\x4f\xee\x91\xc7\x5c\x47\x26\x17\x3f\x30\x12\x69\x4d\x24\xe2\x6d\x26\x62\xfc\x57\xb6\xb9\x9c\x16\xde\xe0\x77\xda\xf8\x48\x55\xd2\xa8\xf2\xa8\x39\xb6\xd8\x23\x2c\xe3\x36\x61\x30\x20\xda\x9b\xb6\xb3\x19\x11\x70\xd3\x41\x87\xd7\x60\xf7\xbe\xe0\x90\xbb\xc3\xe2\x9c\xb7\x16\xf0\x45\xd4\x08\x48\xce\x6d\xd6\xfb\x23\x4d\x5a\x36\x40\xa8\x27\x2a\x88\x04\xd2\x6a\x86\xce\x3f\x7c\x1f\xb7\x45\x73\x50\xa0\xa7\xe5\xd6\xc1\x38\x3f\xb0\x38\x4c\x62\xde\xfd\xb0\x89\x9e\xc2\x6e\x8b\xa2\xe2\xd2\xe6\x71\xc2\xba\x14\x0b\xcc\x18\x71\xce\x28\xaa\xc0\x93\x3d\x25\x84\x21\xde\x10\x03\xca\x8b\xea\x0c\x46\x92\xb2\x79\x45\x10\x56\x0a\x17\x8b\x63\xdd\x3b\xe6\xf6\x42\x97\x30\x69\x3f\x91\x4a\x10\x5c\x9b\x3d\x21\x48\x8d\xa9\x69\x1e\xe1\x42\x70\x29\x51\xdd\x56\x8a\x36\xfe\x65\x71\x5e\x44\x02\xa9\xeb\xd2\xe4\xcf\xb9\xb5\x82\xb4\x92\x2e\x33\x73\xd4\xf5\xd0\x0e\x9f\x87\x55\x55\xc0\x75\x36\xd2\xbf\x25\x75\xa3\x96\x48\x4f\x6d\x15\x9d\x1b\x33\xa3\x42\x2a\x54\x54\x94\x30\x65\x47\x66\xb8\xd1\xa0\x0f\x23\xa7\x4e\x33\x3b\x23\xd2\x4e\x09\x2b\xc1\xf8\x6e\x94\x44\x90\x81\xe8\x3b\xe1\x5e\x55\x52\x69\x7d\x1d\x72\x14\xb7\x76\xae\x84\x86\xd9\x38\x6e\x46\x60\xeb\x38\x05\xc7\xf4\xc8\x7e\x14\x74\x21\x28\x08\xac\x8f\xb5\x09\x89\xa4\xc9\x15\xa8\x73\xe1\xce\xf5\xa8\x97\x1c\xdd\xd9\x16\x90\x0a\xb3\x26\x75\x60\x43\x31\x72\xa7\xcf\x01\x29\x88\x56\x45\x71\x46\x21\xf3\xec\x32\x46\x61\x31\x27\xea\xcc\x8d\x3f\x36\x7b\x37\x87\xb4\x09\x2b\xa7\x87\x0e\xa2\x6e\x71\x60\x1d\x26\xbc\x04\x36\x89\x8e\xf1\x63\x53\x39\x77\x33\xae\x48\xdb\xeb\xe6\x91\x1a\xf1\xce\xa2\x32\x19\x5e\xbe\xa3\xb2\xc1\x05\x91\xe8\xf0\x62\x72\x36\x42\x93\x8b\xd7\x36\x8d\x8b\xcf\x56\xd9\xf5\x62\xa7\xc5\x5e\x82\xe6\xec\x3e\x56\xc0\xde\x57\xa7\x09\xba\x14\xd0\x6c\xd9\xfe\x4e\xbc\x51\x16\x3d\x33\xeb\x37\x01\x58\x68\xb4\x6e\x2a\xa8\x13\x89\x64\x0b\x96\x91\x0d\x5c\xe8\xad\x6d\xec\x11\x7b\x68\x49\x47\x70\x64\xc9\xe8\x23\x83\x38\xa6\x15\x3f\x5c\xbb\xe6\x10\xcb\x76\x13\x65\xf5\x00\x50\x98\x95\xfd\x95\xe7\x88\x81\x5c\x33\x0b\x15\x8f\xbf\xdd\x23\xdd\x61\x81\x11\xf5\x9e\x48\x89\xe7\x64\x12\x89\x03\xca\x71\xf6\x3a\x0f\x37\x00\x88\x3a\x79\xbd\x20\x86\x0a\x4b\xf1\xe0\x93\x30\xbb\x32\xf4\xda\xd4\x66\x20\x51\x3d\x70\x67\xeb\x5e\x50\xa5\x08\x5c\x0f\x50\xeb\x09\xb6\xee\x2a\xbd\x67\x3f\xab\x33\xaa\x3d\x3b\xe9\x61\x7b\x5a\xef\x67\xa5\xc9\x8f\x9c\x12\x34\x15\x94\xcc\xd0\x8c\x42\xc2\x26\xa4\x32\x8e\x4c\x9d\x02\x0c\x80\x79\x2c\x25\x11\x30\x6c\xeb\x8f\x73\xc3\x8f\xeb\xcf\x5f\xed\xf8\x95\x68\x59\x81\x83\x22\x9e\xc0\x3e\x46\x67\x68\x0e\xe9\x93\xd6\xfb\xf4\x87\x97\xff\xf9\x47\x34\x5d\x6a\x43\x09\xce\xa4\xe2\x0a\x57\xae\x03\xa8\x22\x6c\xae\x57\x11\x74\x9d\xb8\x0b\xbb\xc7\x60\xe5\x17\xa7\xa2\x35\x55\x66\x82\x5e\x7d\x73\x3b\x4d\xba\xf3\x40\x31\x39\x29\xc9\xdd\x49\xb0\x85\xc6\x15\x9f\xc7\xbd\xf5\xcc\x13\x3e\xb5\x4d\x19\x0b\x88\xc8\x7d\xa2\x79\x45\x8b\xe5\xce\xee\x53\xeb\x0a\x43\x0b\x7e\x6f\xbc\xa8\xeb\x47\x35\x20\x83\x69\x78\xd3\x56\x30\x71\xe8\x7b\xcf\xe0\xd7\x4a\xb2\x4a\x8e\x94\xea\x9d\x0f\xa4\x1d\xa0\x17\x6c\xb3\x2b\x57\xbd\xcd\x1d\x76\xdd\xe4\x96\x9a\xc2\x06\xbb\x7d\xa5\x92\x68\x37\xf8\xf7\xb8\xaa\xa6\xb8\xb8\xbd\xe1\xef\xf8\x5c\x7e\x60\xe7\x42\x70\xd1\x1f\x73\x85\xb5\x32\xbd\x68\xd9\x2d\xd4\xd9\xed\xe8\x6a\xf9\xdc\x82\x79\x81\x59\xb2\x3f\xb1\x51\x9d\x71\xa3\x34\x04\xa2\xce\x16\x70\xce\xef\xae\x65\xf2\x40\x3b\x0f\x37\x43\x44\xf7\x39\x5e\xc3\x09\xc7\x21\xc3\xa3\xfd\xcd\xcb\x3f\xfc\xc9\x08\x17\xc4\x05\xfa\xd3\x4b\xc8\xf5\x97\x23\x73\x01\x80\xea\xab\x6d\x9c\x1a\x57\x55\xac\x4e\x13\x8a\x80\xef\xa3\xcb\x57\xef\xc1\x91\x57\x3b\x3b\xdd\x9f\xed\xab\xb9\xb9\xf9\x1b\x68\x62\x54\x49\x52\xcd\x46\x86\x0f\xc6\xfb\x93\x0f\xc0\xac\x39\xb0\x57\x5e\x3c\x97\xd0\xee\xbd\x25\x77\xbc\x6a\x6b\xf2\x9a\xdc\xd1\x22\x0e\x39\xd0\x5b\x95\xde\xdb\x5c\x7c\xac\xa2\x12\x74\xc9\x69\xc5\x8b\x5b\x54\xda\x5f\x06\x39\x2a\xab\x75\xb7\xe3\x67\x21\x36\x5b\x27\x21\x4b\xe7\xd1\xf1\xf7\xf2\x73\x6a\xdc\x34\x5a\x8f\x06\x62\x2f\x81\xef\x7b\x93\x01\xa2\x09\xf8\x53\x13\x8d\x9e\x64\x14\x4b\x2a\x86\x65\x6c\x47\xa4\xaf\xa9\xe8\x57\x44\x27\xf5\xa4\x43\x60\xba\xde\xc7\x03\x08\x7a\x1b\xa2\x7b\xa1\x3b\x0d\x0d\xfc\xdb\x10\x9d\xac\x99\xea\xbe\xa2\x9a\xdf\x18\x46\x83\xd4\xdb\x07\x6e\x99\xf8\xb8\x41\x06\x14\x42\x5a\x72\x52\x6f\x5e\x98\x47\x7f\xd4\x58\x59\xfb\xc8\x79\x2f\x30\x6a\x88\x90\x54\x6a\xd5\xe9\x47\x38\x50\x67\x15\xa6\x75\x10\x37\xdf\xd5\x24\xac\xa7\xb2\xd4\xb8\x19\xdf\x92\x65\xe4\x86\x4b\x3c\x2e\x8f\x65\xd6\xd4\xb8\x89\xbc\x07\xa0\xb8\x6d\xfa\x35\x10\x79\x39\x4f\x78\x69\xfb\x01\xd7\x83\x29\x5a\xfc\x29\x33\x16\x5d\xb7\x53\x38\x53\xf0\xf5\xa7\xa5\x07\xcb\xaa\x3c\xed\xfa\xae\xfa\xb1\x5b\xf1\xfe\x55\xa5\x3f\xf1\x77\x95\xf9\xd6\xd7\x74\x43\xc1\xf8\xbe\xd4\x0b\xca\x77\x3e\x93\x1c\x4e\xc2\x26\xc2\xb5\x66\x77\x46\xff\x1e\xeb\x79\xc2\xcc\x91\x0e\x6c\x66\xeb\xa1\x3a\x36\xf5\x06\x12\x3a\xa0\x8f\xa2\x6d\x14\x1d\x7c\x77\xb0\xd3\xcb\xd1\xac\x8c\xe0\x0d\x9e\x83\x49\xbb\x0f\x0b\xb4\xda\xa7\x90\xde\x76\xc1\xef\x43\x91\xd9\xd8\x6f\x69\x89\xe9\x38\xd2\x17\x3c\x69\x75\x0c\xd6\xd7\xed\x08\x6b\x96\x9b\x2a\x11\xf7\x78\x89\xb0\xe0\x2d\x4b\x22\x2e\x80\x50\xa6\x0f\x75\xbf\x5f\x19\xec\x25\x67\xc4\xc1\x6a\x52\x5a\xb9\xe9\xb9\xbe\x01\x61\x44\x19\x7a\x75\xfc\xea\x65\x72\xdf\xaf\x48\xd1\x0a\x49\xef\xc8\x95\x2d\x9f\x1e\x84\x41\x2f\x66\x13\x2e\x25\x9d\x56\x90\x6a\xa9\x38\x3a\x37\xb5\xe5\xd7\x07\xea\xa1\x5e\x30\x62\x2e\x42\x22\xd4\x84\x1e\x1e\x9a\x13\x1c\x42\xb4\x75\x03\x09\x38\xad\xfd\x52\x41\x61\x5d\x57\x54\xd0\x4b\xaf\x82\x9a\x7b\x6f\xa7\x63\x75\x35\xf5\xf7\x41\x92\xbc\xb7\x41\x85\xae\x68\x3e\x75\x45\x99\xe1\xa3\x7b\x41\x95\x3d\xdc\xf7\x54\x12\x74\x08\xee\x8c\x95\xcd\x98\xc4\xfd\x1c\x3a\xbf\x12\x8b\xeb\xe7\xe0\x6e\x16\xab\x47\x77\x1f\x56\x69\x5d\x9e\x74\x39\x33\xf7\xd6\xf3\xd5\xad\xa0\x95\xfe\xdd\xbd\xbc\xc0\xac\xac\x92\x64\x86\x9f\x95\x6a\x99\xc4\x5e\x75\x31\x43\xa1\x48\xb4\x88\x83\x20\x08\xb9\xc0\x12\x31\x8e\x6a\x82\x01\x52\xad\x6f\x17\x27\x05\x7b\x34\xd0\xf9\xfa\x60\x36\xbb\xb9\xc6\xc2\x0b\xc1\x8a\xeb\xd7\x54\x5a\xf1\xac\xe5\x88\x35\x5d\x0c\x10\xab\xc6\x65\x0a\x19\x43\x30\xa7\xdd\xe2\x1d\x77\x30\xe7\xd5\x9e\x74\x17\xc7\x4a\x5f\x9e\xa2\x1f\x23\x5b\xdd\x5c\x37\x6f\x22\xcb\x1b\xfc\x79\x1d\xac\x2d\x09\x7f\x62\x9e\xd5\xe1\xfa\x6b\x71\x6d\xac\x9b\x7b\xec\x3b\x9c\xd0\x87\x4f\x0f\x75\x14\xc8\x42\x87\xea\x36\x20\x18\x5b\x5e\xc5\xe6\x28\xa7\x91\x84\xbb\x68\x86\xf7\x13\xcd\x09\x23\x02\xdb\x80\x84\x03\x75\xdb\x90\x3e\x96\x9c\xa5\x1e\x88\x4f\x6c\x38\x2d\xef\x3f\xad\xa6\x98\x3f\x4b\xe8\x08\xe8\x39\x87\x5c\xac\x9c\x76\x1b\x6a\xd9\xa4\xb1\xe4\x1c\xf5\x0a\x99\x9e\xd9\xfc\x01\x4b\xaf\x5e\x94\x7f\xb6\xf4\x0e\x57\xc4\xd0\xe3\x3b\xd1\xb0\x53\x65\x42\xb6\xd3\x7d\x35\x1b\xad\x7d\x08\x66\xc7\x66\xb4\xc4\xa3\x16\x64\x26\x7d\xe2\xc5\x0b\x74\x68\xda\x38\x30\xb4\xd8\xbb\x55\x72\xed\x5a\x9d\x3f\x34\x09\x45\x61\xf3\xad\xd7\xf9\x43\x83\x01\xe0\xd1\xec\xc5\xc2\xfd\x37\x59\xe0\x3b\x02\x2c\xe4\xb4\xc2\xa2\x82\x34\x92\x6b\x33\x65\x68\xda\x2a\x44\xd8\x1d\x15\x9c\x01\xa8\x0a\xe8\xa2\xb4\x64\x12\x64\x46\x04\x61\x05\x91\xe8\xb7\x87\x3f\x9e\x5e\x41\x9a\xe1\x11\x98\xbe\xc4\x8d\xaf\x95\x16\x05\xd5\x1b\x43\xf0\xba\x7d\xdc\x6f\xc8\x8d\x5d\x6f\x17\xd0\x4f\xdc\x5c\xe8\xb1\xd5\xad\x6a\x71\x05\x64\xed\x45\xd5\xea\xbb\x70\x67\x3b\x3b\xbf\xf3\x3c\xc5\x93\x97\xd3\x77\x6e\xa9\xfa\x5f\xd3\xa8\xe3\x9a\xe3\xa0\x9e\x05\xfb\x75\xad\x70\x40\x1a\x80\xb2\x4f\x1b\xbb\xa6\xe8\x1c\x48\x4f\x25\x1b\x66\xce\xd9\xbb\x38\x0e\xd7\x41\xe7\x0b\x65\xe9\x1a\x56\x70\x98\x01\xac\xb9\x8e\xc6\x8c\xed\x16\x00\x91\xef\x18\x44\x38\xa2\xf3\xec\xfa\x05\x97\xea\xb4\xa2\x58\x6e\xeb\xc7\x4e\xdb\xea\x6f\xbb\x66\x21\xdb\x8f\xd9\xaa\x8e\xb8\xf2\x10\x03\xdd\x33\x03\x73\xba\x98\x58\x2c\xba\xdb\x95\x94\xfd\x5f\x93\x75\xea\x03\x4a\x26\x1b\x14\xfe\x64\xcb\x9e\x18\xc4\xd1\x0c\x45\xd6\x1b\x8a\x8d\xff\x44\x45\x7e\x52\xc5\x8b\x9f\x75\xb4\xe0\x95\xcd\xbb\x76\x68\x86\x29\x51\xf7\x84\x30\x74\x31\x81\x39\xd7\x53\x69\x78\x19\x37\xcf\xbc\x55\x8e\x99\x12\x4b\x7b\xa0\xb7\xee\x4d\xb0\x66\xb0\x0a\xdb\x1e\xdd\x84\xf8\x53\x7c\xe4\x69\x8c\xe8\xb6\x97\x4a\x4a\xa4\xc8\x2f\x43\xf2\x6d\xf4\xd6\x2f\xa8\x63\xd3\xc1\x53\x7e\x47\x60\xbd\xcb\x52\x44\x66\x69\xef\x2c\xfc\x99\x5d\x81\x49\x22\xb2\xa4\x4d\xf2\xfa\x74\xeb\xe0\xa0\x24\x50\x9e\x19\xc4\x13\x1c\xb3\x67\x87\xf6\xc5\x53\xb6\xe7\xbc\x17\xb7\x3c\x6e\xf9\x6e\xc5\x8b\xc9\xd9\x73\xde\x88\x3f\x58\xef\x92\x6e\xfa\x40\x22\xda\x14\x5d\x5e\xc7\xb6\x4b\xdf\xe5\x32\x04\x74\x66\x11\x8e\xf6\x58\xe7\xfa\xa2\x2b\xd8\xf8\xdc\x4a\x05\x62\xa6\x5d\x7d\xa5\x59\x5a\x71\x0b\x1c\x01\xcf\x4f\xc3\xcb\xe3\xd5\xa9\xb6\x7f\x11\x3f\xdd\x10\xff\x33\x06\x67\x58\xaa\x72\xc9\x5b\x67\x2d\x1b\xe5\x62\x09\x4c\x3f\x12\x4a\x61\x2d\x08\x30\x63\x96\x6d\x65\xc0\xc4\xf8\x1e\x6f\x0f\xe4\x86\x86\xff\x11\xcc\xf6\x3f\x3a\xef\x76\x57\x54\x10\xbe\x30\xe1\x42\xfd\xc3\x38\xbe\xa4\xbe\xb0\x21\x71\x08\x32\x7f\xa8\xa9\xbe\x15\x44\xcf\xfe\xe1\x55\x73\xf8\xab\x6d\x13\x1e\xb5\xfa\x10\xb8\xf2\x3e\xb3\x7d\x6d\xe1\x5a\x79\x63\x5c\x9e\x1b\xfb\xb2\xed\x0c\xed\x6e\xff\x4f\x2e\x5e\xef\x50\x7c\x34\xb4\xfc\xb2\xc5\xc7\x0f\x72\xeb\xea\x03\x59\x27\x10\x8a\x94\xe6\x9d\xc1\x18\x68\xb9\xad\x4b\x6a\xff\x1a\x88\xc3\xb8\x42\x8d\x20\x92\x30\x35\xea\x87\x23\xfa\x69\x99\xa0\x3d\xf4\x47\x31\xd2\x3f\xcf\xda\x6a\x5b\x0b\x89\x8b\x80\x79\xc8\xd3\x34\x61\x4f\xb2\x02\xa1\x18\x7c\x87\x69\x05\xee\xb9\x80\x46\x77\xad\x03\x36\x7b\x6c\xcb\x1e\x54\x1c\x97\x10\x1a\x44\xb7\xfa\x6a\xaf\x50\xcd\xb5\xe0\x34\x69\x20\x67\xa7\x93\x5f\xae\xff\x76\xfd\xcb\xfb\x0f\xaf\x7f\x78\xb7\x35\xdb\x98\x49\xa1\x27\xdd\x16\x1f\x21\x8c\x18\xb9\x87\x9e\x33\x30\x4e\x0b\x1b\x0f\xf0\x2c\x94\xfa\x0e\xb9\xb6\xc9\x94\x26\x36\x6e\xa0\x29\xb3\xb6\xd2\x5f\xda\xb2\x07\x35\x55\x74\x8e\xe1\x65\x9d\x4b\x64\x2a\x08\xbe\xe5\xad\x42\x77\x6d\xc5\x88\xc0\x53\x5a\x51\x6d\x41\x20\x72\x47\x98\xc1\x43\xea\x3f\xd0\x9d\x0c\x8b\xf9\xd2\x6d\x1b\x0f\x6b\x3d\xdb\x2a\x92\x7a\x52\x75\xcb\xb8\xb0\xee\x46\xcb\xa6\x09\xbf\x6c\x04\xbd\xa3\x15\x99\x13\x4f\x53\x17\xc3\x96\xdc\x87\xe1\xe0\xaa\x59\xe0\x71\x45\xee\x88\xa1\xbb\xa2\xd2\xec\xa8\x05\x67\x5c\x98\xb8\x9c\x21\x6e\xb7\xb6\x28\x10\x00\x99\xc3\xea\x4a\x1b\x9b\x64\xdf\x6b\x97\x75\x6b\x93\x6d\x9f\x4d\x58\x6d\x8f\x64\x49\x93\x55\xd7\x1e\x09\xe0\x56\x20\xcc\x16\x9f\x6c\x0d\xaa\xde\xec\x1f\xec\xec\x73\x78\xbb\x93\x31\xf6\xb0\x60\x64\x40\xbb\x63\x57\x69\x0a\x08\x71\x62\xe6\x7c\x6b\xf3\xc4\x75\xe9\x83\xa5\xe0\x7a\x6e\x1d\x33\x6c\xbb\x5f\x42\xca\xd5\x14\xf5\xec\x60\xa1\xd0\x08\x27\x13\x4b\xd4\x10\x01\xec\x09\x21\x5b\x58\xc2\x41\xe2\x7d\x88\xc8\xa6\x36\x59\xe9\xf3\xcd\x11\x86\x62\xf3\x88\x2a\x89\x5e\x5f\x5e\x23\x41\x0a\x2e\xca\xad\x5d\x00\x7f\x35\xd7\xc2\x86\x40\x32\x06\xb2\x32\x93\xc6\x67\x99\x0d\xb7\x36\xfd\x2e\xd6\xab\x5f\xc3\xc4\x76\x8c\x6b\xd2\x55\x11\xfa\x87\x1b\xe5\x3f\x60\x98\xff\x90\xed\xb4\xe4\x35\xa6\x6c\x6b\x8d\x71\x0c\x99\x81\x93\x8f\xee\xfd\x8e\x92\x6e\xfb\xb7\xff\x43\x12\xe5\x36\xd1\xa9\xfc\xfe\xff\x7b\x7d\xf9\x8f\x8e\xdf\x8d\x56\xfa\x8a\x0f\xaf\xa3\x88\x06\x7a\xf6\x40\x3f\x50\xef\xde\x19\xbf\xcd\x3c\xcb\xa7\x1e\x3f\x2d\x61\xf3\xf8\xc9\xd6\xdb\xda\x89\x03\xca\xd0\xd5\xf7\x67\xe8\xd5\xab\x6f\x7e\x0f\x4b\xe2\xb0\xbd\x58\xa1\x5a\x6b\x06\x7f\xfc\x03\x2a\x16\x58\xe0\x42\x45\x00\xf8\xaf\x5c\xf2\x1e\x94\xf6\x58\x3d\x92\x21\xf9\x9b\xcd\x4d\x33\x77\x46\x94\x6f\x77\x6b\xf1\x04\xe1\x8c\x49\x5b\x55\xd7\xa4\x10\x64\xdb\x14\x8c\x34\xf1\x74\xb1\xd2\xf6\x63\xce\xf5\x20\x84\x0a\xa5\xb8\xec\x97\x59\x57\x6f\x27\x20\x95\xe8\x8a\x25\x34\x6d\x55\x19\x8c\xd6\xd2\xdd\x36\x30\x5a\x19\x24\xff\x51\xe9\x08\x4a\x62\x94\xdd\xde\x15\x24\x89\xef\x9a\x3b\x81\x0d\x96\xb2\x83\xc4\xdc\xd1\xb2\xc5\x15\x74\x0b\xe2\x48\x96\x7f\x03\x1b\x93\xd2\xca\xde\xda\x8e\x60\xdb\xee\x6c\xc9\xce\xd6\xa9\x52\x27\x66\x4e\x7e\x63\xad\x7e\xca\xe6\x63\xf8\x44\x77\xd3\x8e\x67\xcc\xd9\x18\x8f\xb7\x4d\x7f\xfa\xa2\x82\x0d\xef\x78\x81\xab\x0f\xe0\x9d\xbf\x72\xbb\xcd\x49\x01\x89\x08\xe3\xed\x7c\x01\xd3\x2b\x6a\xec\xc8\xbf\x2b\xa2\xc0\x6d\x62\x53\x77\x63\xa2\x0a\x7e\x67\x97\x36\x34\x10\xd6\x65\xef\xef\xec\x67\x0c\x38\xa4\xc4\x00\x62\x71\xd2\x39\x82\xd1\x97\x81\x5e\x69\x67\x36\x12\x39\xd1\xd7\xf9\x09\xa8\x1f\x0e\xce\x67\x82\x31\x23\x40\x7c\x94\xad\x91\xd9\xb8\xb8\xbd\xc7\xa2\x94\xa8\xe0\x75\x83\x15\x05\x0b\x68\x19\x8b\xf5\x73\x19\x64\xf6\x36\xd0\x6a\xc9\x31\xba\x60\x52\x61\x90\x81\x8e\xa8\x48\xaf\x70\x47\x2e\x00\xca\x8b\xe1\x79\x5c\x10\x41\x10\x16\x71\x98\x4b\x5c\xc1\x8d\x57\x10\xa1\xf7\x7e\xb5\x44\xf7\x82\xb3\x48\x92\x8f\x2d\x85\x92\x56\x97\xee\x28\xb9\x3f\xb1\x3e\xd1\xb1\x1e\xdc\xd8\x6c\x61\x79\x02\x27\xe1\xe4\x37\xf0\x7f\x5f\x4e\x74\x61\xc5\xc9\x5f\xe3\x26\x3e\x78\xf3\x15\x44\xf0\x29\xa3\x1d\x7b\xd9\xb3\x2a\x1b\xef\xac\x32\x61\x2b\x0c\xd1\x7f\x19\x39\x1e\xf8\x14\xa6\xa4\xe2\x6c\x1e\xd4\x56\x8a\xb0\x71\x2e\x18\x55\x3d\x3f\x05\xc0\xbc\x48\xd1\x1a\x00\x00\xe2\xa2\x04\xd6\x3a\x6a\x52\x6b\x7a\xad\x43\x11\xfc\x80\x2f\x0f\xb3\x6d\xc3\x94\xb4\xd7\x3a\x30\xae\xc8\xce\xef\x66\x88\x27\x5c\x1d\x12\xc5\xd1\x02\xdb\x92\xfd\x96\xd4\x8f\x4a\x87\xc4\x47\xb8\xd0\x26\xd6\xf6\x47\x45\xab\x3a\xca\x13\xff\x19\x42\x1d\x43\x79\x04\xa6\x89\x56\x72\x30\x5b\xed\x27\x38\x0a\x45\xdd\xa3\x47\xb3\xaa\xfb\x96\xcd\xb7\x8c\xfe\xb3\x25\x08\xd7\x5c\xeb\x7d\x55\x4a\xda\xed\xea\x4a\xd6\x78\x09\xb6\x28\x4c\xda\x3b\xc7\x64\x8b\x30\xd4\x02\x91\x23\x80\xec\xd3\xa0\xdc\xd3\x08\xbd\xeb\xd7\x7f\x1a\xe9\x71\x5e\x9b\xda\x2b\xf6\xa3\xed\x2d\x68\xa0\x48\xe3\xad\x28\x88\xb5\x2a\x6a\x4b\xf3\xb3\x61\x5a\xf5\xde\xd3\x26\x29\x33\xc8\x13\xbd\xa4\x90\x72\xdb\x0a\xd8\x69\x26\xa0\xb3\xfd\x12\x4f\x97\x68\xa6\xd5\x59\x8b\x58\x5c\xd0\xf9\x82\x48\xe5\xe2\x57\x27\x40\x4c\x63\x92\x9f\x71\xb1\xf0\xdd\x05\xf9\x1b\x50\x5a\x76\x90\xc7\x1a\x3f\x6c\x4f\x53\x04\xbe\x35\xcb\x6d\x6e\x4c\x6c\xd9\xd6\xee\xee\x5f\xdd\x4c\xf2\x18\xbd\xd3\xbd\x32\xc7\x11\x37\x4d\x45\x9d\x56\xde\x5b\xe3\xad\x4f\x1b\x90\x9c\x02\x18\x14\xcd\xb0\x5c\x50\xce\x52\x77\x59\x61\x20\x62\x45\x2b\xb4\xf2\x52\x2d\xc1\x7a\x2d\x4b\xad\x1f\x0a\x24\x48\xcd\xef\xb6\x47\x8d\x25\xc3\xce\xd2\x98\x9f\xf5\x24\x8f\x03\x7b\xe3\x0b\x31\x22\x4e\x3d\x7f\xad\xde\x2f\xc5\xca\x6d\x61\x36\xa0\xd6\xfe\x5d\x95\x6d\xd1\xb2\x2e\x59\x3d\xe2\xe6\xd8\x11\x40\x28\x22\xa5\x3c\xc5\x3c\xc0\x62\xbe\x33\x96\x87\x53\x31\x6f\x8d\xb8\xb4\xf7\x3b\x20\x55\x1a\x4e\xe3\xad\x84\x35\x60\xe8\x81\x44\x67\xef\x5f\x87\xa4\xfa\xca\xd6\x08\x30\xa1\x30\x53\x72\x21\xae\xb9\x1f\xf3\x42\xca\x41\xc5\xf0\x38\xf5\xa8\x1e\x15\x5e\xb2\x68\x31\x5f\xdd\x39\x67\xbc\xef\xa0\x73\xd2\x50\xd6\xb4\xca\x2a\xdf\x41\xed\xe4\x62\x81\xd9\x5c\x6b\x3b\xaf\x79\xab\x07\xf6\xdb\xdf\xc2\x20\x04\x29\xdb\x22\x32\x1d\xd0\x38\xfb\xcd\xc9\xfd\xad\x4b\xcc\xb1\x45\xda\xe1\x52\x92\x05\x6e\xdc\xd4\x84\xb3\x27\x97\x4c\xe1\x87\xef\x10\x3d\x26\xc7\xe8\xc5\x6f\x83\x5f\xbd\x80\x1e\x47\xf5\xa6\x11\x5c\x0f\xc5\x12\x5d\xc3\xe8\x2b\xaa\x80\x10\xe4\x45\xd8\xc2\x31\x3a\xd7\xfd\x82\x3c\x57\xbf\xb6\x01\x77\xf1\xb4\x5b\xd9\x11\x12\x64\x8e\x45\x59\x91\x48\xae\x48\x3e\xf3\x29\x99\xc6\x35\x6d\x77\x15\x79\xa0\x52\x49\x1b\xb5\x3d\xce\x03\x56\xfe\xdc\xbb\x43\x61\x79\xab\x6f\x0a\x2d\xfc\xc6\x25\x56\x78\x1c\x48\xdd\x13\xe3\xa5\x1d\x17\xbc\xae\x31\x2b\xc7\xd8\x9e\xe3\xee\x52\x39\xf9\x8d\x2d\x71\x33\xc6\xfe\x5b\x94\x8d\xf1\x58\x2e\x48\xd4\xca\x0d\x48\x41\x78\xec\x5c\xee\x4a\x60\x9f\x7b\xf9\x6c\x96\xe2\x18\x5d\x72\xd5\x99\x53\xfe\xb6\x85\x55\xce\x29\xc2\xcf\x2f\x6f\xae\xfe\x36\xf9\x70\x71\x79\x33\x48\xf2\x41\x92\xc3\x33\x48\xf2\x41\x92\x47\x34\xbc\x2f\x92\x9c\xb0\xbb\x5d\x49\x71\xe7\x78\xdb\x94\x1d\x69\x03\x7a\x6a\x2d\xcd\x6a\xe7\x09\x56\xbb\x26\x49\x3b\x67\x77\x3f\x62\x6d\xf2\x5b\xf8\x9c\xcd\x60\xd9\x90\x60\x6a\xbf\x60\xdc\x11\x67\x5f\x3c\x4b\xda\x0e\x39\xce\x32\x72\xfc\x24\xe5\x3d\x87\x71\xac\x4d\x4b\x9e\x92\xb3\xfb\x1e\x2f\x8d\x17\xd8\x1c\x4a\xcc\x96\xa8\x11\x94\x29\xd8\x4a\xa7\xd7\x67\x17\x17\x01\xd2\x01\x91\x87\x82\x34\x0a\x1d\xfc\x3f\xbb\xa5\x38\x03\x47\xdf\x3e\xac\xcc\x36\x8a\x5b\x42\x33\x9d\xca\xd7\x08\x72\x47\x79\x2b\xab\xa5\xc7\xaa\x6c\x96\xa3\xeb\x4c\x78\x89\x04\x1f\x06\xc7\x48\x8b\xcd\x5b\x50\xae\x28\x9d\x9b\x14\xc8\x84\xe6\x77\xac\x7a\xda\x4e\xe4\x50\x40\x13\xda\xdf\xa0\xba\x7e\xbe\x1a\x9a\xd0\x6e\x94\x02\xfb\x98\x32\x9a\xd0\x8f\xbe\x1a\x9b\xf0\xa2\x3e\x03\xc2\xee\x25\xd9\xf7\x82\xd7\x99\xa4\xd9\xb5\x09\xae\x38\xe0\xe6\xa6\xa3\x7a\xe0\xd0\x7f\xa1\x7a\x64\x4d\xda\xae\x52\xad\x36\xac\x01\x68\x90\x38\x3b\x49\x95\xec\xf3\x14\x93\x47\x36\x7f\xff\x3d\x6e\xfe\x42\x96\x57\x24\xb1\x26\x77\x7f\xbe\x49\x45\x0a\xad\x8c\xa1\x5b\xb2\x34\x84\x7d\x67\xae\xb1\xb4\xb2\xe4\x59\xa6\x0f\x65\x50\xc1\xdc\x33\xd6\x43\x4c\x7a\x47\x9e\xc5\xd4\xcf\x2d\x49\xa0\xb9\x73\xcf\x0a\x09\x23\x81\x25\x04\xfb\x43\xaf\x69\xda\xea\xa1\x3c\xe2\xc1\x3d\x69\x9a\xa8\x7b\xf2\xe9\x3d\xee\xc9\x87\xb0\xea\x3f\xbb\xc5\x5b\xf5\x9f\x9d\xa2\xaf\x56\xbb\x92\x0f\x8b\xd5\x7f\xf6\x09\x99\xd5\x7f\x32\x9e\xa2\x14\xd4\xd6\xea\xe3\x40\xc9\x99\x4f\xe5\xb5\xcd\xb5\x0d\x55\x27\x7f\xa1\x20\x53\x06\x06\xe4\x94\x83\xb2\x5b\x2b\x20\xd3\x34\xa7\x51\x91\x9a\x27\x1f\xbe\xad\xff\x80\x38\xc8\x7b\x7b\x27\xcb\xc0\xee\xfa\xb7\x79\x2c\x33\x87\xae\xfa\xce\x71\x33\x4a\x54\x13\x85\x4b\xac\xf0\xb1\x3e\x10\xa3\xfe\x8f\x36\xb3\xf0\x1f\xfe\xc3\x0a\x4f\x49\x25\x7f\x3a\xf8\xaf\xbf\x9c\xff\xed\xff\x3d\xf8\xf9\x1f\xe1\xef\x40\x5d\x33\xf0\xf0\xe0\x0b\x89\x43\x80\x6a\x92\x8c\x97\xe4\x12\x7a\x07\x3f\x5a\x4b\xef\xd4\x20\x84\xec\x2f\xa0\xa2\xd7\xb1\x21\x17\xf0\x3f\x36\xbc\x5c\xfd\x29\xb2\xa0\x81\x7b\xf6\x50\xef\x81\xb5\x4d\x20\xea\x37\x4f\x3e\xed\x07\x37\xf4\x47\x22\x64\x12\xb7\xbb\x7b\xfa\x95\x18\xcc\x5b\xdd\x36\x96\xc5\x82\xd4\x18\xfe\xf9\xbd\x9b\x02\x7d\x1f\xfb\x9a\x8b\x0c\x4a\xa7\xe9\x3b\x70\xd4\x23\xbb\x7c\x71\xf7\x2a\xc9\xe2\x34\x4f\x46\xc9\xef\x57\x30\xf3\x84\xc1\x8c\xd8\xd9\x32\x12\xc0\xeb\x8f\x3e\x1f\xc5\x53\x09\x9c\x4e\x2e\xd0\x9d\x99\xe1\x3d\x9a\x9c\xa7\x13\xd7\x15\xc9\x6e\x6e\x25\x0b\xec\xef\x7d\xaf\xec\x32\x05\xa6\x9b\x35\x98\xa3\xe8\x9c\x56\x9f\x5e\x8e\xd7\x39\xbb\xd3\xed\xca\x6c\xb9\x5d\xab\xcf\x1e\xca\xcc\x54\x5b\x51\xbf\xa3\x49\x15\xb9\xfa\x25\x86\xde\xf2\x32\x36\x8a\xe0\x9e\x7d\xb6\x5d\xb3\x98\x72\xce\x00\x0e\x68\x55\xfd\x61\x40\xa7\x5a\xd8\x9b\x9c\x49\xf3\x1d\x70\x3d\x92\x3b\xc2\x94\x87\x93\xdb\x2a\xeb\x58\x28\x9a\xc7\x26\xb1\x3d\xea\xb2\x32\x3b\x80\x87\xf1\x72\xd5\xcf\x1e\xbb\xe8\x9e\xd7\x06\x35\x7d\x5a\x35\x0b\xac\x47\x3d\xf7\x76\xf0\xc6\xd3\x6e\xd0\x13\x7a\xee\x24\xfd\x17\x59\x29\xd8\xf9\xea\x9b\x3f\x25\xa4\x93\xae\x3f\x19\x2f\xce\x27\x32\x73\xb2\xec\xd8\x4d\xb6\x12\x30\x8e\x3d\x6e\x26\xf9\x12\xe6\xee\x7b\xe9\x62\x0a\xc6\xe6\x12\xd3\xc1\x45\x3d\x0a\x0a\xbd\xb3\x3b\x74\x87\x85\x47\x09\xb5\xd3\x8a\xca\x45\xaa\xb8\x37\xcf\xc5\xac\xcb\x8c\xed\x52\xd7\x81\x69\xc5\xd5\xb8\xe9\x74\x0f\x3d\x17\x2b\xbd\xcc\xd0\x85\xc7\x5c\xcc\x7d\x86\xf9\x2e\x9c\x6f\x12\xd3\xc3\x1c\x8c\x27\x9b\x07\x43\x6d\xf2\x5c\x13\xb1\xc6\x7f\x2f\x88\x6a\x85\x96\x59\x36\xbb\x62\xc2\x4b\x43\xc5\x92\x51\xf9\xcb\x61\xac\xa3\xd0\x29\x02\x73\x96\xf8\xba\x26\xbf\x92\x9d\xed\x7a\xfb\x0c\xda\x70\xaf\xbd\x3b\x21\x91\xc5\xb9\x66\x85\x90\x20\x15\x56\xf4\xce\x6c\x4b\x97\x3f\xe4\xa8\x05\x74\x83\x07\xc7\xc7\x07\xa6\x97\x5c\x98\xab\xd4\x78\x14\xf5\xe7\x7b\x75\x2d\x74\x4a\xd5\x13\xb8\xe1\x43\x3a\x18\xbb\x44\xa6\x9c\x86\x9d\x2a\x17\x62\xcd\xa5\xab\x7f\x01\xc6\x94\xcb\x9a\xfa\x7e\xaf\x7d\x60\x3e\xb7\x6b\xb5\x9c\xec\x77\x86\xe0\xc5\xfd\xde\x2a\x3f\x86\x1f\xd9\xe6\x89\xa5\x3a\x8a\x0f\xcd\x2b\x8f\x8b\xa6\x1d\xd9\xd7\x1f\xd7\xa4\xe6\x62\xe9\x7f\xf4\xc5\x37\xc7\x52\x71\x81\xe7\x50\x32\xca\x34\x6e\xfe\xcc\xff\x64\xfe\xb0\xd7\xbd\xf5\xbf\x36\xe8\x8e\x2e\x33\xcb\xd7\x62\xf9\xea\x6c\x39\xb7\x6e\x7b\x62\x40\xf9\x6d\xf5\x04\xf2\xe7\xc0\x03\xe6\x4c\xcc\xcd\xcf\x22\x84\xd4\x6d\x4d\xd8\x51\xa7\x70\x00\xee\xc3\x28\x79\xf2\x60\x7f\xe4\x10\x42\x25\xbd\xa3\x92\x27\x94\xed\xf0\x2f\x5a\x0f\x4f\x38\x8a\x26\xde\xaa\xa6\x85\xdc\xce\x1a\x2b\xef\x41\x79\x68\xb8\x04\xb4\x88\x3d\xec\x2b\xae\xc1\x57\xa9\x91\x17\xd0\x31\x14\x11\xec\x3b\xf4\x3f\x87\x7f\xff\xdd\xaf\xe3\xa3\x3f\x1f\x1e\xfe\xf4\x72\xfc\x9f\x3f\xff\xee\xf0\xef\xc7\xf0\x8f\xff\x38\xfa\xf3\xd1\xaf\xee\x87\xdf\x1d\x1d\x1d\x1e\xfe\xf4\x97\xf7\x6f\x6e\x26\xe7\x3f\xd3\xa3\x5f\x7f\x62\x6d\x7d\x6b\x7e\xfa\xf5\xf0\x27\x72\xfe\xf3\x67\xbe\xe4\xe8\xe8\xcf\xbf\x4d\xee\x3a\x66\xcb\x0f\x89\xd2\xdb\x3c\x63\xbb\x59\x28\x53\x64\x4e\xb6\x65\xce\xfb\xd8\x1b\x33\x85\xda\x7a\x57\x21\x65\x6a\xcc\xc5\xd8\x72\x69\x81\x91\x92\xd8\x80\xdb\x5e\xb9\xcf\xff\x95\x93\x9a\x41\xa6\xb2\x53\x0a\xf7\xe8\x80\x3f\x95\xa2\x61\x18\x7e\x9e\x03\x26\x63\x5a\x0a\x6a\xa9\x1f\xc8\x8e\xdc\xe6\x6b\xbb\x41\xff\x1d\x90\x33\x2e\x68\x64\xd6\xb5\xb3\xa4\xb4\x79\x75\xdc\x19\x41\x8e\x7b\xcd\x7e\xef\x96\x24\x40\xcc\xdc\x33\x20\x6d\xa2\x9f\x01\x69\xf3\x48\x57\x06\xa4\x4d\xd2\xf3\x45\x22\x6d\x0c\xef\xe0\xbf\x27\xcc\x26\x7f\x55\xb4\xc8\xcc\x9d\x9c\x05\xd1\x08\xbb\x8b\x05\x57\xe7\x4c\x75\x73\x6e\x0f\xc5\x51\xc3\x9b\xb6\xc2\xea\x91\x2c\x8a\x4c\x79\x6f\x7b\x16\x39\x03\xa2\x5d\xa3\xfa\x59\x0c\x3f\x65\xa8\x6e\x2b\x45\x9b\xc8\x84\x00\x6f\x5a\x7a\x32\x5d\x84\xa5\xe4\x05\xc5\x2e\x11\x1c\x7e\x53\x61\xa9\xdc\x90\xc1\x33\xaf\xf0\x2d\x09\x08\x79\x63\xb3\xb5\x81\xbc\xd7\xcd\xed\x74\xa9\xef\xa1\x73\x76\x67\xef\x24\x54\xb6\x26\xc1\x95\x74\xb1\xd2\x2c\xed\x7e\x5d\xd9\x8c\xfa\x5c\xda\x6c\x85\x20\xa9\x11\x34\x48\xef\x44\xc4\x10\xcd\xe1\xb3\x0e\x02\x09\xe9\x1f\x96\x1e\x36\xaa\x1b\xc9\xc6\x41\xba\x2a\xee\xb3\x11\x92\x6c\xac\x35\x1d\xbc\x83\x89\xf6\x75\xef\xe8\x16\xf6\x28\x81\x23\x5d\x2b\xcf\xab\x91\x3f\x85\x36\xbe\x2f\x9a\xf8\x9e\x68\xe1\x4f\xa3\x81\xef\xa7\xf6\x9d\x4d\xf3\xce\xa3\x75\xe7\xd1\xb8\xb7\xc0\xb5\xe7\xd4\xb2\xf3\x68\xd8\x4f\xe1\x5f\x6b\x04\x99\xd1\x87\x7d\x48\x5b\x76\x15\x7e\x90\x22\x0f\xe0\xaa\x69\x04\x69\x08\x2b\x1d\x11\x9a\x8b\xc0\x02\x63\xe3\x90\x71\xee\xfd\xa2\x79\x2f\xec\xeb\x4d\x9e\xb2\xe1\xb6\x46\xc3\x6d\xbd\xc5\x33\xdc\xd6\xc3\x6d\xfd\x2c\xb7\xb5\x95\x56\x5f\xff\x55\x9d\xbb\xba\x6e\x8d\xe7\x3b\xab\x80\x70\xd6\xa7\xb2\x03\xc9\xfc\x2c\xd4\xfd\x6b\xf5\x44\x22\xfd\x58\xa1\x90\xf5\xa0\x0b\xc5\x8d\xd8\x33\x5c\xd3\x02\x99\xea\x6b\xc6\xac\x46\x35\x66\x78\x0e\x34\xd8\xfa\x7b\xf6\x88\x21\x2e\x7c\x55\xab\xa8\x9e\xac\x70\x02\x82\x07\xcb\xf1\x1a\xc3\x2f\x05\xaf\x2a\xad\xaf\x54\xf4\x96\xa0\xd7\xa4\xa9\xf8\xb2\xb6\x34\x4d\x25\xba\x56\x58\x91\x59\x5b\x5d\x13\x95\x50\xa8\x3a\x52\xe2\xf8\x8a\x3e\x86\x7d\x7d\x57\x5b\x11\x8a\xfb\x40\xb1\x1b\xd4\x18\x1a\xf8\xa8\xd7\x7c\x60\x70\x95\x9f\x56\xf7\x78\x29\x47\xe8\x92\xdc\x11\x31\x42\x17\xb3\x4b\xae\x26\xc6\x89\x14\xf7\xde\x90\x13\xc4\xbc\x1c\xd1\x19\xfa\xae\xc2\x8a\x48\x85\x14\x9e\x03\xb6\xb8\x2b\xf0\xc3\x45\xaf\x51\xc4\xb5\xa0\xbc\xa7\xdb\x17\xea\x31\xcf\xb3\x72\xf2\x7d\xa4\xea\x0f\xb4\xee\x6b\xfe\x3c\x7b\x5d\x8d\xca\xf1\xe8\xef\x8c\x13\xda\xd0\xf7\x1b\x3a\x6f\xc3\x46\xef\xc5\x89\x29\x19\xe8\xaa\x22\x83\x4b\x97\x32\x24\x88\x6c\x38\x93\xa4\x57\xbe\xa1\x1b\x08\xd4\xbc\x8c\x3b\xf5\x59\x3d\xbe\xd1\x86\x41\xaa\x49\xd0\x70\xa9\xa0\xca\x41\xac\x7e\x92\xcb\x16\x98\xb8\x8e\x40\xe1\x0b\x5c\x55\xa4\x44\xb4\xae\x49\x49\xb1\xd2\x7a\x3b\x9e\x29\x22\x10\x0e\x45\xbd\x2f\x9f\xea\xf3\x46\x4c\x3d\x0c\x57\x4a\x23\xde\x58\xeb\xd3\xcc\x4a\xc8\xa3\xa5\x0c\xa2\x17\x06\x75\x6a\x0b\x7f\x74\x85\x37\x56\x4a\x69\x24\x09\x51\xfd\x7c\x00\xcd\x2e\xd8\xde\xab\xa0\x5d\x34\xad\x78\x71\x2b\x51\xcb\x14\xad\x6c\xad\x4e\x7e\x0b\xf6\x4b\x05\xe2\x24\xba\xe9\x78\x29\xe5\xff\x39\xf6\x07\x6c\xac\x7b\x25\x4f\x7e\xd3\xfd\x0a\x3e\x88\xec\x5c\x06\x2b\x3a\x87\x0d\x4d\x1e\x48\x91\xa2\xcf\xf7\x83\x2d\x0f\xa4\x08\x2b\x7d\x3a\x1a\x67\xbd\xa3\x2c\x79\x72\xa6\xb8\xa3\x79\x32\xe1\xaf\x72\x61\x9e\x12\x48\xab\xc3\x27\x37\xa4\xe7\xcc\x2e\x02\x95\x76\xe6\xcd\x8f\x15\x65\xa4\xbf\x30\xbe\xfe\x9b\x5f\x1c\x13\xf6\xb4\x46\x2e\x2a\xa9\x20\x85\xe2\x62\xe9\x58\xbf\x92\xbb\xe6\xfa\xa2\xfb\x06\x85\x93\x0f\x0f\x4e\x0e\x8e\xd6\xf6\xc8\x81\x84\xf4\x0b\x73\x2d\x1e\x5b\xea\x6c\x3f\x28\x49\xeb\xa6\x5a\xc2\x38\x0e\xca\x11\xa2\x2a\x07\x46\x48\xdf\x86\xa6\x4c\x38\xcc\x8a\xa5\xfa\x1e\x21\xc9\x91\x12\xb8\xa4\xd6\x40\x80\x4f\xf5\x97\x94\x68\xed\x85\x7e\x78\xf0\xeb\xc1\x08\x11\x55\x1c\xa1\x7b\xce\x0e\x14\x4c\xdf\x31\xba\x81\xe2\x8a\xe9\xb0\x5e\xd7\x91\x25\x6f\xa1\xc2\xb8\x59\x42\x53\x4f\xb7\x5a\xc2\x75\x83\x78\x6b\xeb\xaf\x62\x95\x42\x51\x1e\x3e\xe7\x0f\x54\x59\xf2\x0d\x2d\xbf\x5f\xc2\x6e\xb2\x15\xbf\xb1\x36\x46\xee\xc8\xc9\x82\xe0\x4a\x2d\x4c\x36\x03\xe3\x6c\xfc\x2f\x22\x38\xd0\x98\x33\xfb\x9b\xd4\x6e\xa4\x85\x94\xc3\x27\x21\xbc\xbc\xde\xa1\x2c\x40\xa6\xcc\xce\x00\xf7\xe8\x6b\xef\x0d\x89\x56\x89\xd0\xaa\x3c\x7a\x7b\x73\x33\x79\x43\x54\xbf\x9e\xb3\xfe\x10\xbd\x39\xbf\x71\x39\x2c\xe0\xe8\x27\x62\xc6\x45\xbd\x07\xe2\x3d\x0f\xb8\x76\x8c\x1a\x2e\xf6\xe1\x96\x59\x70\x99\xb4\x9c\xe8\x09\xae\x98\xb7\x5c\x2a\x13\xcb\x31\xb6\x09\x83\xc4\x46\xde\x4f\xc8\x70\xe9\xfb\x17\x93\x63\xf4\x37\xde\x42\x25\x32\x3c\xad\x96\xbe\x90\x91\x24\x69\x28\x6a\xfd\xbc\xd0\x5d\x79\xa1\x6f\x10\xbd\xf3\xdf\x12\x5c\x12\x21\x41\x40\x13\x9c\x9c\x0c\x9d\xed\xb8\x07\x7d\xcb\xba\x94\x67\xad\x54\xbc\x46\x0b\x3b\xec\x3e\xc5\xb9\x3d\x9c\xc7\xe6\xb8\x5a\x3a\x59\x41\x1a\x23\xc4\xed\xdf\x7c\x75\x22\x7a\x4d\x7a\x99\x79\xb7\x9f\x4f\x8d\x9a\x1a\x4e\x9b\x0d\x70\x18\xa2\x52\x2b\xdb\x4c\xd1\xbc\x4c\xd7\x45\x86\x7c\x01\x94\x31\x67\x00\xa5\x91\x9f\xaf\xbe\x08\x82\x3d\xc9\x6f\xca\x97\x86\x80\xb2\x41\xed\xd1\x93\xc0\xed\x91\x45\x51\xda\xcd\x67\x7c\xd0\xf1\xde\xf3\x4d\x2f\xa7\x5d\x5d\xf0\x02\x33\xce\x68\x81\x2b\xfa\x2f\x52\xa2\xb6\xe1\xcc\xe6\xd6\x81\x66\x5b\x60\x49\xc6\x10\x79\x67\x46\x9c\xcb\x80\xed\x5a\x4b\x07\xc5\x39\xa8\x7b\xbe\x48\xb4\xe9\x75\x9e\xae\x66\x45\x85\x27\x53\xb7\x87\xcf\x5a\x40\xbd\xb7\x58\x79\x76\x3c\xfa\x22\xd4\x49\x94\x89\x78\x61\x9d\xdb\xcc\xd4\x09\x05\x3e\x6f\x73\x5d\x81\xe0\x95\x44\xdc\xa5\xef\xaf\x6c\xf3\xaa\x55\xc0\x7d\xd3\xbd\x0c\xe6\x40\x20\xd6\xd6\x53\x22\x3a\x62\x48\xa1\xd6\xe7\x34\x8b\xd7\xc5\x36\x6b\x9a\x73\x51\x5a\xa7\x63\x60\x36\x27\xe8\x95\x6e\xf9\x8f\xdf\x7e\xfb\xfb\x6f\x33\xb4\xa3\x87\xe7\x5a\xc1\x0c\x5d\x9c\x5e\x9e\xfe\x72\xfd\xe3\x19\xd0\xcd\xa7\xbe\x3e\x53\x92\x6c\xee\x14\xd9\xac\x09\xb2\x4f\x9a\x1e\x0b\xc4\x8d\xc9\x52\x36\xf7\x91\xb8\x86\x5e\xe9\x4d\xd8\x4a\x43\x51\x6f\x6d\x92\xa0\xc4\xb6\x36\xa3\xd2\x77\x67\x18\xcc\xd3\x02\x6b\x2f\x24\x95\xac\x08\x69\xb2\x59\xfc\xd7\xfa\x6d\xbd\x72\x40\xa8\x6c\x85\xa9\x4a\xeb\x83\x57\x9d\x2f\xdf\x06\xad\xa0\x0f\x5f\x91\xf1\x2f\x49\xc1\x59\x99\x62\x02\xe4\x52\x69\x6d\x4f\xb2\x9e\xb9\x6b\xf3\x4e\xe7\x22\xee\xae\x12\xdb\x18\x58\x92\xa9\x2b\x8a\xfc\xaa\xe6\x91\x93\x86\x0d\x02\xde\xf6\xc7\x3f\xc4\x07\xc8\x8a\xe6\x9a\x17\xb7\x19\x5d\x64\x89\x02\xec\xb5\x3e\x69\x85\x89\x05\xde\x9c\x4d\x4c\xe7\xf4\xca\x5c\x7e\xb8\xe9\xa8\x5f\xb4\x16\x8e\xbb\x6a\xf0\x6f\x6d\xb4\x10\xb3\x12\xdd\x92\x26\xcd\xba\xd4\x02\xd3\xc1\x08\xfb\x28\x42\xf0\xbd\x0b\x5b\xb7\xc3\xa4\x57\x1b\x41\xe0\xd0\x7f\x46\x23\x4e\xab\x00\x14\x04\xe7\x21\x10\x68\x8d\x90\x19\xa6\x15\xc2\xe0\x95\x57\xb4\x26\xe8\x7e\x41\x98\x71\xf6\x77\x68\x89\xaf\x48\xe0\x7c\xad\xde\xc6\x03\x07\x09\xff\x6e\x6b\xaf\x61\x2a\x2b\xc6\xd7\x6d\x06\x58\x99\x2d\x7a\xac\x66\x83\x19\xf0\x39\xcf\x60\x06\x44\x9a\x01\x8d\x20\xd7\x8a\x47\xeb\x9a\xd9\x00\x37\xa6\x1b\x8f\xc0\x6d\xa6\x64\xc6\x05\x59\xc5\xdb\x04\x38\x18\x8b\x9c\x4f\x40\x06\x9f\x4e\x2e\x7c\xec\x8b\xf7\xb0\x2e\x86\xb9\x58\xb6\xc5\xc2\x85\x49\x19\x91\xf2\x04\x90\x35\x6d\x63\x1c\xcb\x70\xb5\xb5\x82\xc4\xa3\x7c\x1a\x41\x48\x0d\xf3\x38\xea\xd8\x84\xf4\x70\x09\x33\x1f\x12\x55\x98\xb8\xb9\x83\x15\x59\x9e\x58\x37\x5d\xb3\xa4\x70\x7e\x37\xb1\x85\xc0\x72\x41\x20\x77\x96\x3c\x50\x25\x4d\xa3\x86\x8d\xd5\xcd\xb8\xd6\x17\xe6\x02\x17\x04\x35\x44\x50\xae\x55\x8c\x96\xa9\x92\xdf\x33\x34\x25\x73\xca\xa4\x5b\xb1\x94\x2e\xb9\x2d\x01\x48\x22\x2a\x7d\xed\xee\x63\x74\xd5\xab\x1c\x67\xd9\xc5\x0a\xde\xc9\x4c\x3b\x45\xa3\x4c\x53\x02\xca\x0b\x6c\x83\x16\x57\xd5\xb2\xdb\x78\x21\x41\xe8\x23\x33\x14\xbf\x21\xcc\xcc\x1e\xb6\x0c\x06\x5a\x92\x0a\x2f\x4d\x06\xf9\x8c\x32\xf0\xfe\x0a\x79\x74\x9c\x0e\xcd\x8a\xee\x20\x17\xc1\x3b\x1f\xdd\x19\x54\x22\x41\x70\x91\xc4\x63\x3c\x60\xc0\x3e\xf5\x0c\x18\xb0\x01\x03\x36\x60\xc0\xd6\x9f\x01\x03\xd6\x7f\x06\x0c\xd8\xe3\x1d\xda\xe7\xa0\xdd\x80\x01\x1b\xbc\x32\xeb\xcf\x80\x01\x8b\x7a\x06\x0c\xd8\x27\x9f\xbd\x13\xd1\x03\x06\xec\x33\x9e\x01\x03\xf6\x99\xcf\x80\x01\x1b\x30\x60\x03\x06\x6c\xc0\x80\x25\x3c\x03\x06\x6c\xfb\xe1\x0d\xc1\x9f\xf8\x67\xc0\x80\x0d\x18\xb0\x2d\x9f\x01\x03\xb6\xf2\x0c\x18\xb0\x01\x03\xf6\xb1\x67\xc0\x80\x0d\x18\x30\xfb\x0c\xde\xc6\xb5\x67\xc0\x80\x6d\x78\x06\x0c\xd8\x76\xed\x0c\x66\x40\xda\xcb\x9e\xc4\x0c\x90\x8a\x37\xd7\x74\x9e\xc0\x0b\x99\xeb\x18\x5c\xfb\x9e\x58\xd2\x48\x69\x8b\xed\x4a\xf3\xa1\xf3\x63\x49\x4b\xd9\x17\x22\xc2\x82\x9b\x64\x4a\xb4\x89\xa0\x87\xd5\xa4\xdc\x26\x17\x33\x08\x20\x07\x4c\x6e\xfa\x54\x38\x9a\x40\xda\x2b\xeb\xd0\x57\x9f\xdd\xed\x46\x99\xb6\x5d\xe2\x7b\x10\xcc\x47\x81\x99\xa9\x8c\x6a\xcb\x64\xeb\xeb\x7d\xc2\x4b\xe9\x2a\x49\x30\xce\xc6\x86\xac\xf5\x58\x77\xf8\x98\xcb\xe3\x04\x6f\x70\x22\x33\x9b\xc1\xc8\x4d\x04\x9f\xee\x8c\x9d\x6d\x02\xf8\x23\x5a\x58\x80\x1e\x9f\xf5\x18\xd7\x4c\x07\x23\x99\xd6\xfa\xc0\x30\x28\xd6\xec\x28\xb8\xa8\x15\xd8\x1e\x14\xb8\x4b\x36\xb7\xad\x91\x53\x8e\xa5\x52\x9e\x34\xdc\xfc\xa7\xc3\x4d\x05\x80\xa9\xe8\x38\xca\x8e\xe9\xe5\x52\x50\x52\x3b\x43\x48\xed\x09\xc2\x2c\x03\x2a\x2a\xa7\xae\xb4\xa7\x68\xa8\xfd\x44\x42\xed\x23\x0a\x6a\x17\x08\xa8\x9d\xa3\x9f\xf2\x84\xd5\x33\x84\xd4\x33\x69\xa4\x4f\x10\x9e\xb2\x40\xfa\x9b\x85\x20\x72\xc1\xab\x68\x81\x93\x4b\xd8\xbc\xa7\x8c\xd6\x6d\x0d\x55\x28\xb4\x4c\xa1\x77\x1e\xec\x2f\x9d\xc8\xb0\xd7\xbd\x41\x1c\x40\xb9\x8a\x92\x40\x19\x70\x4c\x2b\xbd\xb5\x80\x2c\x74\x81\xef\x40\x29\x6d\x8b\x82\x90\x32\x45\x2d\x0d\xbd\xd5\xbf\x3f\xf6\x3d\x34\x1c\xfd\x54\xa2\x57\x69\x57\x4d\x9a\xdd\x13\xb8\xf3\x7e\xff\x4d\xd4\x3b\xe6\xa2\xc9\x73\x4b\xbf\xb9\x9a\x9c\xf5\x6e\x69\xf8\xe0\x2d\x1c\xe3\xb3\x05\x29\x6e\xaf\x2c\x94\x66\x77\x37\x73\xba\x9b\x29\xc9\xc5\x94\x43\x31\x48\xf5\xa2\xf4\x63\xc8\x5c\xa8\x95\x10\xe8\x1c\x56\x91\x88\x3b\x5a\x90\xe3\x67\x70\x54\xe4\x32\xfe\xd3\x0f\x02\x82\x30\x01\x0c\x7c\x5f\xd4\xae\x6b\xd3\x1d\x1f\x61\x08\x7c\x54\xb6\xa7\x00\x1a\xad\x70\xe1\xd7\x66\xbe\xf9\xd0\x25\x75\xe3\x50\x12\xe2\x0d\x9a\x39\x55\x8b\x76\x7a\x5c\xf0\xfa\x44\x8b\x0e\xf3\x9f\x69\xc5\xa7\x27\x35\x96\x8a\x08\x6d\xe3\xd8\x6b\x7d\x5c\xe8\x1e\x50\x36\x3f\xae\xcb\xa3\xe3\xff\x95\xd4\x87\x0b\xeb\x2b\xb7\x69\x58\x8f\x38\x09\xa6\x44\xcb\x7d\x2e\x56\xbc\x05\x7a\x52\xd2\x37\x69\xf2\xfd\x9d\x5a\x54\x24\x11\x96\xbc\x13\x48\xf2\x20\xb5\x51\x86\x80\x40\x4e\xa1\xb2\x1f\xb0\xe3\x27\x83\x1c\x67\x39\xab\x99\xa0\xc6\x7b\x04\x33\xde\x1b\x5b\x68\x5f\xa0\xc5\xd9\x60\xc5\xb9\x20\xc5\x59\xe0\xc4\x39\xa0\xc4\xf9\x60\xc4\x79\x20\xc4\xf9\xe1\xc3\x4f\x06\x1d\xfe\x22\x60\xc3\x19\xe3\x63\x99\xe0\xc2\xcf\x01\x15\xde\x5f\x1f\x0c\xca\x00\x0f\x7e\x3e\x68\x70\x96\x79\xcc\x6a\xc5\x26\x8a\x84\x1d\x40\x81\x9f\x23\xfe\xff\x64\xb1\xff\x0c\x71\xff\x9c\x31\xff\x6c\xf1\xfe\x27\x83\xfc\xa6\xc3\x7d\xb3\xfa\x14\x9e\x05\xe6\x9b\x13\xe2\x9b\xbc\xbe\x94\x51\x45\x71\xf5\x9a\x54\x78\x79\x9d\x06\x04\xcd\xb5\x12\x97\x6b\x60\x51\xe3\xb6\xee\xe3\x1a\x16\x58\x22\x17\xea\xb6\x14\x2f\x2e\x96\x6e\x55\x60\x84\x21\xe2\xac\xc7\x17\x1d\xb5\x46\xfb\x17\xb9\x46\x7b\xe3\x1e\x37\xbc\x2a\x7b\xb2\x6b\xde\xf2\x7b\xc4\x67\x8a\x30\x74\x48\x99\xdb\x39\x47\x81\x97\xa6\x0b\x8f\x24\xc7\x3b\xf4\x5b\x5f\xbd\x74\x8d\x7c\x7d\x71\x0f\x88\x0c\x49\xb9\xd7\x91\x2f\xdb\xc7\x4f\x87\xbe\xec\x17\x67\x6d\xd5\x0f\x7f\x99\x90\x58\x9e\xd8\xd7\xab\x63\xf4\xde\xaa\x13\xaf\xa0\x3f\x5e\x14\x61\x56\x22\xcb\xcf\xf5\xf5\xed\x93\x64\xa8\x7b\xdf\xb8\xf1\xd8\xf4\x3e\x9e\xc5\xdc\xc0\x5a\xcb\xe4\x08\xeb\x6f\x81\x02\x3a\x38\x5d\xf7\xc6\xe9\xba\x23\x04\xf6\xd7\x67\x6d\x3d\x3f\xe2\x7a\xb0\xb6\xfe\x5d\xac\xad\x80\x16\xef\x8d\xc0\x05\x99\xec\x93\xf2\xe6\x04\x48\x97\x08\xd8\xe9\x70\x5e\x5c\x30\x42\x4c\xe2\x58\x47\x7a\x08\xfc\x7e\xb3\xb6\xaa\x96\xc6\x87\xd8\x63\xc0\x8c\xdf\x5a\x37\x0b\xb2\x46\x1d\x08\xa1\xd4\x0d\xbd\xeb\x6c\x93\x46\x70\xab\x91\x88\x96\x31\xad\x62\xd8\xe3\xa4\x3b\xaf\x6d\x11\x49\x58\xbc\x3b\x1d\xf7\x88\x0d\x2d\x08\x1d\x80\x9e\x0b\x82\xba\xfc\xa5\x7e\x47\x74\xab\x33\x2e\x0a\x3a\xad\x96\x68\x81\x2b\x6d\x2c\x59\x90\xf6\x2d\xad\x2a\xfb\x9a\x04\x50\x38\x51\x26\xf4\x6c\x34\x9a\x8a\xb3\x39\x4c\x06\x36\x1d\x21\x0f\x0d\x29\x74\x9b\x45\x45\x30\x6b\x1b\xd3\x4f\xad\x1f\x2d\x79\x2b\x5c\x3f\x93\x50\xf1\x41\xeb\x54\x22\x46\xab\x91\x9b\xf2\x3e\x05\xe6\xfa\x9e\xef\x5c\xca\x92\x94\x96\xbd\xf2\x9e\x4a\x32\x82\x77\x46\xf7\xc9\xf4\xc5\x55\xed\x37\xfb\xc6\x7c\xd6\x08\x7e\x47\xcb\x0e\xa3\xaf\xb7\x05\xe0\xe3\xa3\xdb\xfa\x11\xde\xeb\x44\x2b\xe3\x6c\xcc\xc8\x1c\x83\x7a\x6c\x05\x9a\x41\x74\x9a\xf6\x0d\x7e\x90\x95\xb4\xc0\x8a\x48\xc8\x49\xe8\x51\xdb\xde\x51\x1c\xdd\x13\x3d\x9e\x60\x47\xa1\x43\xc6\x11\x87\xcc\xc2\x96\x51\xb5\x84\x88\xde\xa2\x55\xa8\xe4\xf7\xec\x28\xe5\x60\x1a\x98\x03\x46\x53\xa2\x70\x97\x1c\xe8\x54\x32\x89\x08\xc3\xd3\x4a\x9f\x3d\x40\xfc\xdf\x6c\xdc\x00\x68\x46\xb0\x6a\x05\x41\x73\xac\x12\xa4\xc4\x06\x6d\xde\xac\xe7\xc7\xb7\x1d\x95\x36\x5e\x37\x43\x2d\x93\x24\x51\x91\xcd\x66\x02\x44\x66\xbc\xea\x13\xcd\x5b\xb5\x27\xf7\xc8\x63\xae\x23\x93\xb9\x13\x18\x89\xb4\x26\x12\xf1\x36\xc1\x93\xd7\x33\xff\x6c\x73\x39\x2d\xbc\xc1\xef\xb4\xf1\x89\x0d\x9b\xe6\xd8\x61\x97\x81\x56\x1e\xf0\x13\x38\xb8\x95\xc9\xa0\x7e\x7d\x79\xfd\xcb\xbb\xd3\xff\x3e\x7f\x17\xb7\xf0\xe7\xb8\x58\x84\xdc\xe2\x0c\x61\xb8\x28\x40\xc8\x2f\xf0\x1d\x41\x18\xb5\x8c\xfe\xb3\xb5\x90\xb7\x43\xdf\x5e\xa4\x58\xcd\x92\xde\x93\xa4\xf8\xea\x5b\x22\x4a\x72\xe4\x58\xd3\x77\x54\x02\x51\x35\x74\xc2\x02\xff\xb9\x24\x68\x26\x78\xbd\x62\x68\xa1\x4b\x0f\xae\x5b\xea\x1b\x06\x1b\xd3\x6c\x41\x44\x9c\x46\xfe\xfa\xc3\xf9\x35\xe4\xe0\x37\xc2\x10\xbb\x43\x72\x01\xbc\x13\x5a\x37\xa9\x83\xa6\x3f\xe5\x31\x3a\x65\x4b\xf3\x4b\x23\xcc\x22\x55\x94\x8a\x4a\x45\x40\x39\xb5\x86\xa4\x83\x07\xbe\x78\x79\x0c\xff\x7b\x81\x70\x59\x0a\x6d\x69\xfa\x1c\x8d\x62\x35\xcb\x2c\xaa\x65\x63\xbf\xd2\x69\x15\x4c\x2e\x23\x0a\xd2\x38\xa2\x5e\xf8\x9e\x97\x76\x25\x40\x09\x04\xfc\x8e\xd1\x6e\xa5\x12\x58\x91\x39\x2d\x50\x4d\xc4\x9c\xa0\x06\xab\x62\x81\x6a\xbc\x44\x05\x17\xa2\x6d\x0c\xc5\x48\x89\x15\x8e\x6b\xf9\x7b\x2e\x50\xed\xa4\xb3\x96\x66\x5a\x25\xbf\xde\x0c\x04\xed\x44\x76\xf8\x4f\x2a\x65\x4b\xe4\xc9\xab\x97\x7f\xfa\xe6\xdb\x48\xf3\x3a\xe3\xc1\x8d\x85\x3e\x25\x40\x9e\xfa\xf0\x2f\xb7\xc1\x00\x74\xdd\x63\x86\xb1\x3b\xc4\xec\x7c\x90\x86\x92\xb2\x79\x95\xec\x00\x49\x76\x03\xa6\x3a\x01\xc7\xdd\x08\x26\xb1\xbe\xc0\x74\x4f\x60\xaf\x0f\xf1\xae\x94\x7c\x5e\xb0\x4e\x83\x73\x7e\x2f\x2b\x90\x39\x0b\x0c\xbb\x8b\x89\x93\x52\x29\xfe\x23\xb0\x26\xbc\x63\xca\xb0\x8f\x98\x66\x0d\xde\x61\x84\x5e\xa2\xff\x42\x0f\xe8\xbf\xc0\x0b\xf6\xc7\xf8\xa6\xf2\xf8\x98\x72\xc0\xf8\x17\x5c\xaa\x8b\x49\xa6\x85\xfe\xab\xbe\xaf\xf4\x1b\xf5\x7a\x28\x8e\xa6\xd4\xba\x23\xc8\x83\x22\x42\x9b\x81\x76\x0d\x53\x67\x2e\xc9\xa3\xa6\x3b\xf8\xa5\xec\xee\x54\x70\xc1\xc5\xac\x8f\xfe\x7f\xa6\xfd\x0d\x0d\xbf\xe5\x52\x5d\x5a\x69\x1d\x52\xe8\x84\xfd\xa8\xe1\x22\xee\x89\xfb\x94\x56\xdf\xeb\xbd\xd7\xd5\xd8\x40\x25\x87\x04\x08\x93\xc3\xb9\xa0\x09\xc2\x61\x7f\x4e\x6c\x1a\x4e\x34\xdf\xd6\xfd\xd8\xd6\x5a\xf1\xe9\x83\x47\xc6\x1a\x29\x41\x59\x9a\x86\x97\xc7\x60\xdf\x24\xf4\x42\xcf\x46\x19\x28\x03\x1f\x31\x8d\x8e\x8d\xbd\xe6\xa3\xc3\x70\xe0\xb4\xc4\x2a\x30\x8b\xd5\x61\xcd\x23\xc8\x8c\x08\x61\xf2\x84\xa7\x4b\x97\x6e\x94\xbc\xdb\x92\xa4\x5c\x23\xb8\xe2\x05\x8f\xa6\x4d\xc9\xb9\x55\x26\xb6\x2f\x30\xf7\x10\xab\xf5\xd1\xf1\x1f\x5e\x4f\x46\xe8\xe6\x6c\x32\x42\x5c\xa0\xeb\xb3\x34\xf0\x53\xe8\x82\x79\x71\x73\x36\x79\xb1\xd3\x15\x08\x72\x98\x6e\xce\x26\x11\x2f\x59\x87\xcf\xd6\xb8\x19\xdf\x92\x65\xa4\x76\x97\x43\xc3\x1c\xfb\x8d\x95\x65\x40\x66\x9a\x6b\xdc\x6c\xfd\x36\x41\x70\x49\xf7\x9a\xc9\xc5\x65\x1d\xfa\x9e\xe6\xa3\x74\xa9\xf9\x1d\x29\x8d\xd5\xec\x5a\x21\xac\x6c\x38\xd5\x36\xd2\xc0\xf3\xf2\xb1\x67\xe0\x79\xd9\xfe\x19\x78\x5e\x36\x3d\x03\xcf\xcb\x16\xcf\xc0\xf3\x62\x9e\x81\xe7\xa5\xdf\x91\x7d\xcc\x31\x1a\x78\x5e\x3e\xf9\x0c\x3c\x2f\x8f\x3e\x03\xcf\xcb\x56\xcf\xc0\xf3\xb2\xfe\x0c\x3c\x2f\x1f\x79\x06\x9e\x17\xff\x0c\x3c\x2f\x03\xcf\xcb\x97\x2b\xb5\x07\x9e\x97\xd5\x67\xe0\x79\x19\x78\x5e\x06\x9e\x97\xf0\x19\x78\x5e\x1e\x79\x06\x9e\x97\x81\xe7\x65\xe0\x79\xf9\xf8\x33\xf0\xbc\x44\x3f\x03\xcf\xcb\x76\xcf\x90\x79\xb8\xe5\x33\xf0\xbc\x0c\x3c\x2f\xab\xcf\xc0\xf3\xf2\xc9\x67\x3f\xdc\xe3\x03\xcf\xcb\xc0\xf3\xf2\xd1\x67\xe0\x79\x19\x78\x5e\x3e\xfa\x0c\x3c\x2f\x11\xcf\xde\x39\x5d\x07\x9e\x97\x81\xe7\xe5\x63\x6d\x0c\xd6\xd6\x76\xcf\xc0\xf3\x32\xf0\xbc\xac\x3d\x03\xcf\xcb\xfa\x33\xf0\xbc\x0c\x3c\x2f\x03\xcf\xcb\xc0\xf3\xe2\x9f\x81\xe7\xe5\x6b\xf7\x3b\x09\x22\xe9\xbf\xc8\x84\x57\xb4\x58\x26\x67\xfb\x5c\x11\xc9\x5b\x51\xe8\x1b\x1b\x5e\x8b\x1a\x78\xaf\xf7\x28\x24\x29\xd9\x7b\x46\xa1\x70\x15\x4c\x5c\x48\xa5\x20\xec\x1c\x3c\xc5\x14\xec\x05\x9d\x82\x1b\xe0\x65\x3c\x82\x60\xec\xca\x67\x9b\xe9\x8b\x73\x96\x26\x5b\xed\xe1\x40\xf6\x21\x9d\x33\xa4\x3d\xf2\xbb\x48\x71\x2f\x6c\xe9\xa3\x9b\x0b\x37\x4d\x45\x53\x12\x63\x11\xba\x6e\x41\xbb\x20\x36\x04\x2e\xbf\x43\x45\xd3\x8e\x50\x4d\x6a\x2e\x12\x12\x23\x32\x58\x70\xbd\xad\xb2\x0f\xeb\x74\x65\x3a\xe4\x26\x5f\x71\x98\xff\xa5\xb1\x17\x3a\x96\x2a\xbf\x56\xd4\x89\xc3\x24\xac\xd9\xc5\x6c\x15\x8c\x4a\x55\xcf\x0b\x74\xc9\xd5\x95\x3d\xdc\x3b\x5b\xaf\xcc\x88\x05\x37\x85\x3b\x63\xad\x3a\xe3\x75\xd3\x2a\xd2\xbb\xd8\xcc\x14\x1b\xa3\x83\xca\x54\x81\xbe\x9b\x6c\xd0\x82\xb3\x19\x9d\x5b\xeb\xfb\xa4\xc6\x0c\xcf\xc9\xd8\xcf\xf6\xb8\xa3\x7a\x38\x89\xbe\xa8\x77\x96\x0a\x5a\x54\x98\xc6\x03\x07\x73\x89\x89\x33\xe8\x05\xd0\x80\x75\x80\x7a\xc8\x4d\xf3\xd3\x3c\xf2\xb0\x71\x6a\xe4\xc6\xb1\xfb\x95\xf9\xe3\x51\x82\xf5\x88\x15\xf8\x2a\xc0\x30\xda\xb0\x53\xd3\x0c\x46\x63\x26\x96\xa4\x21\xda\x22\x30\x0e\xd4\x78\xbd\x7f\xc9\x70\x4d\x0b\x77\xc2\x4e\xab\x8a\x17\xc6\x27\xd3\xb7\x2a\x73\x74\x59\x1b\xbb\x75\xdd\x2a\x3c\xad\xc8\x31\xba\x30\x14\x15\x9c\x55\x4b\x7d\xfe\x24\x51\x0e\xa2\x60\x37\x7f\x9a\x25\x99\x82\x7f\x4d\xc4\xbe\x6e\x54\xca\x61\x53\x19\x4e\x0d\xc2\xb4\x28\xe3\x8c\x20\xc2\x94\x58\xea\xfd\x37\xe1\xe5\xb5\xde\x82\xbd\x6f\x27\x53\x6d\x24\x42\x5e\x73\xc0\x5d\x13\xa1\xae\x79\x00\xaa\xe9\xe0\xd4\xbc\xc0\xd4\x2e\x84\x60\x98\x82\xc2\x8c\x9f\xde\xb6\x68\x78\x79\xbc\x41\x34\x21\x3e\x4b\xec\x81\x6e\x71\xc2\x4b\xad\x34\x09\x62\xe4\x93\x3f\xa3\xc6\x81\x78\xa1\x3b\x77\x0b\x1e\x3f\xac\x3a\x6d\x0a\xdf\x61\x5a\xe9\x03\x9c\xd8\x81\x75\xd6\xc5\xb4\xa8\x4c\xa6\x58\x85\x05\xe7\xef\xd3\x66\xb1\x69\x5d\xbd\xcc\xb0\x62\xc1\x25\x61\x20\x2f\xb1\xcf\xe0\xf1\xf9\x05\x56\xc4\x94\xe6\x2e\x4e\x45\x11\x5f\xcc\x10\xa9\x1b\xb5\x1c\x21\x72\x47\xc4\x52\x2d\x00\x6d\xe0\x79\x43\x41\xac\x51\x89\x6a\x5c\x06\xbb\x63\x84\xb8\x73\x40\x27\x36\x0f\xf7\x83\xb5\xc9\xda\x4a\x19\x0b\x8d\x4a\x9f\x46\xb1\xeb\x5d\x93\x9b\xce\x06\xa5\x0a\xcd\x9c\x74\x34\x08\xa8\x54\x6b\x1a\x47\x5c\x8b\x32\x9e\x85\x77\xd0\x8b\x20\x75\x44\x6f\x89\x1a\x3f\x80\x7b\x12\xd7\xbc\x65\xca\xf0\xd4\x18\x8b\xc1\x6b\x79\x26\xc1\xe6\x19\xf1\x72\x4f\xaa\xdb\xa3\x3c\x57\x3b\x2e\x1d\x35\xc5\x24\x47\x9e\x32\x56\x8a\x08\xf6\x1d\xfa\x9f\xc3\xbf\xff\xee\xd7\xf1\xd1\x9f\x0f\x0f\x7f\x7a\x39\xfe\xcf\x9f\x7f\x77\xf8\xf7\x63\xf8\xc7\x7f\x1c\xfd\xf9\xe8\x57\xf7\xc3\xef\x8e\x8e\x0e\x0f\x7f\xfa\xcb\xfb\x37\x37\x93\xf3\x9f\xe9\xd1\xaf\x3f\xb1\xb6\xbe\x35\x3f\xfd\x7a\xf8\x13\x39\xff\xf9\x33\x5f\x72\x74\xf4\xe7\xdf\xc6\x47\x1f\x53\x43\xed\xf9\x02\xed\x99\xc2\xec\x4f\x12\x64\xb7\x32\x76\xe7\x87\xdf\x5e\x81\x6b\xc7\xdf\x46\x27\x3e\x76\xfc\x45\xb2\x4f\xe6\x62\xd6\xb5\x4f\x25\xe2\x35\x55\x8a\x94\xf6\xee\x0d\xb8\x6f\x56\xfc\x41\x56\x60\x01\x6d\x15\x86\xdb\x3b\xe0\x60\xe9\xdc\x48\xd1\xdd\xf2\xf7\x2b\x78\xc0\x18\xa2\x75\x53\x91\x9a\x30\x05\x82\x67\xec\x6c\x5b\x70\x27\x1e\x77\x23\x28\x8c\xc3\x83\x3c\x14\x84\x94\xb6\x93\x83\x6c\x0c\x9e\x41\x36\x0e\xb2\xf1\x53\x4f\xb2\x4f\x3c\x87\x60\xbc\x0a\x3b\x61\x7d\x59\xd2\x69\xca\xe0\x21\xf7\x14\x09\x7c\x06\x40\x89\x3b\x5a\xb6\xb8\x0a\x99\x64\x1d\xb9\x68\x9c\x04\x00\xd7\x4e\x1f\x1a\x02\x61\x5a\x72\x47\x2a\xdf\x09\xe3\xa6\x3f\x46\x7f\x35\x70\x9e\xd0\xd0\xec\x3b\xd4\xe3\x02\x72\x9b\x86\xdb\x67\x84\xb0\xa6\xee\x81\x5c\xe9\x92\x47\x1b\x75\x49\x18\x7a\xb7\xc5\x4d\xc5\xa9\x97\x1a\xd5\x72\x84\x24\x51\x26\xc7\x66\x41\x56\x96\x09\x4b\xf4\xe2\xb4\xba\xc7\x4b\xf9\xc2\xc7\x24\x29\xa3\x6a\xa5\xf8\x40\x54\x1f\x80\x1b\x56\xbf\x70\xc6\xb5\xce\x0b\x55\x15\x66\x33\x52\x44\x5a\xb3\x86\x83\x63\xbd\x6f\x16\x8f\xae\x28\x6b\xf5\x68\xdd\xac\x92\x12\x71\x16\xd5\x10\x79\xa0\x0a\xb5\x4c\xd1\x4a\x2b\xeb\x48\x90\x79\x5b\xe1\xd0\x11\x68\x47\xe6\x60\x72\xe5\x31\xfa\xc0\x0a\x12\x7e\x39\xce\x53\xbd\xd2\x80\x56\x1e\x2a\xa2\x48\x39\x82\x57\xf7\x87\x2e\x0d\xd0\xac\x77\xf2\xfd\x52\x46\x35\xef\xe6\xd2\x03\x89\x8e\xcd\x81\xf2\x28\x07\x54\xd2\xd9\x4c\xb7\x0c\xc6\x36\xe3\xa2\xc6\xeb\xbd\xc2\xac\x8c\x6a\x5d\x9f\x5c\x48\x2f\x09\x59\x7e\xa1\xb2\xcb\x0b\x49\x4b\x52\x60\xf1\x22\xac\x09\x72\x5a\xa9\x05\x6f\xe7\x8b\x6e\x57\xa4\x4d\x39\x92\x0a\xe0\x55\x7a\x32\xa5\xf3\x5c\xac\x6c\x36\xa9\x75\x16\x56\x10\xa3\x5a\x71\x62\x04\xc6\x3d\x8e\x6c\x7b\x0d\x02\x60\x30\xdd\x66\xcd\x5d\xce\x15\x60\xf8\x48\x19\x24\xc8\x31\xf2\xa0\x32\x0c\xf8\x18\x5d\x18\xc2\x8b\x51\xff\xad\xbd\x29\x31\x93\x11\x60\xd8\x1c\x1a\x33\x12\xc0\xb7\xd2\x00\xf5\x29\x66\xc0\x4b\x6c\x5e\x8e\xd9\xd2\x65\x74\x00\xc6\xcc\x64\xa2\xf9\x24\x93\x2a\xce\x87\xee\xcf\xd2\xb3\x97\xd9\xe9\x9d\xd0\xab\xb6\xda\x5d\xf4\xf2\x2a\x2c\xf0\x51\xd9\x02\x3c\x42\xf7\xc8\x65\xf5\x2c\x48\x71\x6b\x4e\x5e\x49\x8c\x78\x23\x96\xe7\x36\xf5\x74\x2d\x78\x5b\x95\x86\x55\xb7\x93\xce\x20\x69\x0d\x84\xd2\x74\x03\x0b\x82\x88\xb6\x10\x80\x7a\x84\xc6\x89\x6f\x2e\x4a\xbd\xbd\x8d\x48\x86\x17\x1b\xaf\xb6\x4b\x77\xb1\x5d\x02\x29\x5f\x70\x66\xee\xc9\x91\xbd\xb9\x6b\x4c\x59\xac\x6a\xd7\x8d\x81\xce\x19\x17\xe0\xb4\x9e\x21\xc6\xfb\x7d\xe8\x1f\xf9\x95\x5e\x44\xeb\x1c\x1e\x87\xb4\x51\xdb\xe9\x96\xd3\xb4\x7f\xbf\x20\xda\x5a\xeb\xf7\x25\x56\x6c\x07\x2b\x2a\xb4\x44\x3c\xd6\x9d\x91\x4a\x60\xa0\x49\xb6\xf9\x14\x22\x76\xe3\x6b\xa5\xfb\x54\xa1\x9a\x4b\x85\xbe\x79\x19\xcc\x71\x92\x1f\x6d\x8c\xe0\x24\x42\xc0\xcf\xab\x29\xc0\x74\x81\x21\x17\x2a\xf6\xad\x17\x25\x61\x8a\x16\xb8\x0a\x3a\xaa\x2f\x89\x19\x17\x53\x5a\x96\x04\xa0\xed\x50\x10\x02\x4c\xce\x48\x4b\x17\x54\xd7\xae\x81\x00\x03\xd2\x6d\xac\xf7\x3f\x5c\xdf\x40\x0c\xb3\xaf\xef\x75\x36\x7f\x9c\x6a\x74\xa7\x87\xa0\xb4\x50\x08\xf7\xb3\x51\x67\x7b\x2d\x7d\x1d\x90\x3e\x3d\x1e\xbd\x53\x02\x47\xcf\x82\xdf\xaf\xcb\x11\xaa\x55\x36\x56\x46\x27\x3c\xee\x01\x8e\xcf\x6c\xfc\x1d\x61\xef\x4c\xe3\xfb\x80\xe6\xba\xf6\xb9\x91\x7a\x63\x63\x9b\x19\x89\x6f\x09\xd3\xa2\x6c\x7d\xe1\x67\x9e\x43\x8b\x0a\x70\x77\xa5\x50\x43\xc1\x69\xc6\x8a\x4a\x7d\x9a\xcd\xc5\x08\xe1\xa6\x86\xdb\x0a\x6e\x1e\xf7\xfc\xc2\x6e\xce\x17\xfa\xb2\x76\xc2\x3e\x8d\xd3\x3a\x43\xe0\x33\x83\x77\x44\xcf\xea\x19\x2f\x53\x7c\x5c\x2b\x70\x07\xaf\xf4\x98\x94\x19\xb8\x6f\x4b\xa3\xf3\x80\xc2\xa3\xd7\xb5\xbf\xaa\x5f\x07\xce\x41\x9f\x49\xac\x78\xbc\xbf\x2b\x0f\xd6\xc1\x75\x63\xbf\x42\xd8\xbd\x4d\x21\x48\x65\xae\xe3\x05\x6d\xd0\x94\xa8\x7b\x42\xd8\x66\x3d\xad\x24\x87\xf2\xc8\x39\x6a\x12\x3b\xd1\x41\x43\x0d\xc4\xf6\x18\x4d\x7a\xc7\x1c\x2e\xf7\x74\x66\xb7\x0b\xf6\xdd\xaa\x88\x02\xc3\xcb\x89\x19\x27\xc2\x36\x8c\x15\x00\x52\x69\x70\x2e\x3f\x58\x02\xd6\xc6\xda\x98\x93\x87\x77\xc9\x55\xda\x08\x93\x87\xa6\xf5\x3b\xeb\x30\x78\x92\x51\x66\x42\x92\x58\x1c\xf7\x1e\x9d\xc2\xfe\x55\x6b\xe7\xce\x6e\x7d\x2f\x9c\x7b\x10\xbc\x40\x7c\xa7\xee\x1c\x6f\x53\x7c\xfb\x2d\x22\x26\x50\x95\xc1\xae\x70\x4f\x1e\xca\xcb\x2c\xa4\x97\xf9\x78\xae\x51\x36\xae\x6b\xf4\x11\x58\x48\x1c\xbb\x6b\x66\xa4\xb9\x24\x45\x2b\xa8\x5a\x6a\x5b\x80\x3c\x44\x39\xac\x73\x9c\x95\xeb\x7e\x37\x7a\x41\x15\xd7\x45\xc4\x1b\x53\xc1\x63\xa5\x3c\x76\xe7\x71\x69\x19\xf8\x8a\xe3\x76\xf4\xc5\x4c\xaf\x88\x71\x8f\x40\xa0\x04\x40\xcb\xab\x1d\x73\x41\x17\xa3\x63\xfd\xb3\xa5\x77\xb8\xd2\x62\xb8\xfb\x8b\x09\x64\x68\x86\x7f\xf4\x94\xc8\x76\x85\xe5\x6d\x17\xde\x25\xe3\x86\x97\x5d\x34\xf7\xc4\x4d\x1d\x7c\x44\x1e\xd4\x17\x88\x6a\x07\x29\x35\x11\xf4\x8e\x56\x64\x4e\xce\x65\x81\x8d\x0a\xb3\x6b\x64\xc4\xe9\x23\xfd\x82\x9d\x29\x78\x25\xbd\xef\x09\xbb\xfc\x74\x70\xc2\xcc\x31\x65\x50\xdb\x39\x41\x5b\xb5\x8d\x4a\x93\x20\x4f\x95\x44\x0d\x16\x7a\x17\xba\x44\x78\x13\xcf\x98\x72\x5e\xd9\x62\x40\xd5\xb2\xeb\x17\x8d\x87\xb0\x82\x03\x9d\xff\xc2\xc8\xfd\x2f\xba\x17\x12\xcd\x2a\x3c\xef\xe2\x29\xfa\x62\x5b\xd5\x27\x93\x73\xf3\x1f\x9d\x68\xa8\x74\xd3\xea\x7b\xec\x1e\x2f\x65\xc7\x5a\x10\xba\xdd\xe3\x6f\x94\x57\x47\x20\x4f\xb0\x44\xbe\xed\xb8\x78\x8f\x7e\xbe\x39\x02\xe7\xfe\xd9\xe9\xe4\x97\xeb\xbf\x5d\xff\x72\xfa\xfa\xfd\xc5\x65\xf4\xcb\x2e\xb9\x22\x06\xda\x12\x04\x75\x0b\x9f\x4e\xa3\x57\xc1\x67\x64\x1d\x73\x79\x0c\xb8\x55\xa0\xcc\x65\x25\xbf\x4f\x04\xf7\xeb\x3d\x45\x70\x9c\xf7\x04\x37\xcd\xa9\xa8\xb9\x98\x08\x3e\xa3\x55\xb4\xc6\x9f\xeb\x04\xaf\x74\xc7\xc1\x7c\x4f\xed\xc7\xdd\x75\x63\x58\x1c\xd7\xb3\x49\x82\x2b\x83\x02\x57\xa0\x7e\x4d\x3c\xac\x68\x35\x9c\x7f\x20\x57\xbb\x18\x7f\x88\x76\xba\x67\x76\xce\x91\xa5\xbb\x11\xf9\xe7\x39\x5c\x03\x15\x2f\x70\x05\x55\xa2\xd3\x36\x3e\xca\x6c\x98\xac\xf6\x2b\xe0\xf4\xc0\x6e\x3b\xa3\x8a\xe3\xd2\xc4\xb0\x8c\xf0\x2f\x89\xab\x5d\xe6\xd4\x2e\xc8\x5a\x48\xea\xc8\x8d\xe1\x53\x80\xf6\x1c\x09\x49\x23\x88\xd7\x6a\x56\x9a\xe7\xa6\x64\x5b\x52\x93\xef\xfb\x39\x20\x76\x94\x3d\xba\xac\xd4\x33\xe7\x9b\xb1\x07\x8c\xce\xc0\x9f\x02\x7e\x4e\x6d\xa8\x2f\x1b\xe3\xe0\x7c\xe7\x96\x21\xa1\xbc\x6c\x26\xe3\x19\x5e\xb2\x27\xbb\xd3\xcc\x8f\xdf\x91\x26\x19\xfc\x96\xea\x19\x9c\x75\x42\xda\x6d\x1b\xa7\x83\x98\x8c\xf0\xc4\xfd\xf8\x23\x14\x32\x77\xf2\x3f\x83\x73\xca\x2f\x31\x1a\x07\x47\xab\x11\x64\xbc\x7e\xbc\x52\xed\xfd\xab\x96\x29\x5a\x13\xc7\x30\x3a\x5e\xd1\x89\x84\xf9\xf5\x81\xf4\xf5\x7c\xb2\x6c\x74\x84\x7e\x60\x70\x5e\x19\x29\xd1\x18\x31\xde\x2d\x11\x61\x33\x2e\x0a\x70\x3c\xec\x74\x83\x17\xb8\xc1\x53\x5a\xd1\x14\x61\x9e\x6b\x83\x43\x79\xcc\xa0\x3f\x80\x01\x2a\xcb\x93\x52\xf0\xc6\xdc\xc4\x8e\xfa\x2b\x3d\x2b\xb3\x4f\x31\x13\x56\x72\xb2\x9e\xa8\x5e\x47\xe6\x02\x33\xd5\xe1\xf7\xd6\x36\xce\xbf\xa3\x0e\x92\x43\x09\xc0\x65\xbe\x42\xb3\xa7\xa5\x96\x19\xe1\xb2\x25\x9f\xab\x7d\x2b\x5a\x73\xe6\x06\x17\x70\xcc\xa0\xc9\x87\xeb\x8b\xff\xb3\x72\x6e\xe2\x55\x3b\xf3\xec\x77\xc9\x0a\x2d\x0f\xb2\x6d\x9b\x2b\x5b\xe7\x7b\xd8\x38\x5f\xf7\xc6\xf1\x0e\xa2\x9d\xf3\x6d\x5f\xb5\x61\xc4\x99\xb2\xa0\x6b\xa8\x4e\xd2\x75\x26\x9e\x9a\xb2\xff\xd6\x10\xa0\x2b\x08\xd2\x5f\x61\x8a\x02\x5c\x3a\xf0\xd6\x2a\x6e\x4a\x59\x5b\xb5\x2b\xad\x14\x43\x78\xbb\xce\x70\x25\xbf\xd4\x2b\x32\xc5\xb5\xd3\x08\x5e\xbc\xe7\x2d\xcb\x43\xe0\x9d\xb0\xe3\x7c\x47\x50\x49\x18\x57\xd6\x9b\x02\xb6\x04\x9f\xc1\x6f\x91\xc9\x59\x0b\x6a\x73\xf4\xf4\x9c\x04\x35\xeb\x26\x50\xad\x3c\x7e\xc5\xe9\xe1\xc6\x7e\x69\xe5\x1a\x30\xd2\xea\x55\x5d\x0a\xdb\x2c\x01\xc9\x20\x08\x2e\x0d\x90\x06\xab\x85\x21\x8d\xaf\xb1\xbc\x25\xa5\xf9\x20\x91\x30\xd3\x93\x63\x02\x14\xce\xcd\xf4\x8d\x9e\x5c\xc7\x59\x02\x0e\x61\x03\xb2\x05\x06\xcd\x14\x53\x6c\xa7\xa7\x21\x41\xb0\xeb\x45\xf8\xc0\xaa\xe5\x15\xe7\xea\x7b\x5f\x13\x7f\xd7\x27\xe3\xaf\x1e\x0a\x1b\x3a\x31\xc1\x2f\x8d\xa1\xcb\x63\xd8\x38\x20\x17\x83\x4a\xfe\xa9\x62\x51\x2f\xc8\xbf\xab\x54\x14\x2d\x3b\x95\x6f\x04\x6f\xa3\x75\xb8\x9c\xf6\xe6\x9b\x8b\xd7\x70\xf1\xb5\x96\x53\x99\x29\xb1\x6c\x38\x65\xca\x79\xbc\x32\x06\x6d\x7e\xb0\xec\xd5\xa1\x64\x4b\x26\xaa\x45\xe8\x3d\x5e\x22\x5c\x49\xee\x5d\x6a\x6c\x53\xb8\xd5\xc5\x72\xf5\xaf\xa7\x5c\x2d\xd6\x82\xb8\xb1\xa9\x3b\xfa\x59\x6f\x6f\x14\x50\x33\x77\x80\x18\xca\xd6\x9a\x55\xc0\xea\xd2\x08\x52\x90\x92\xb0\xe2\x4b\x3d\x11\xbb\x66\x0a\x86\x53\x75\xc9\x99\x16\xaf\xbb\x3e\x57\x17\xde\x3f\x69\x57\x23\x3c\x45\xe0\xca\xb6\x41\x44\x0c\xac\xda\x20\x5c\x5b\x99\x82\x3c\xbd\x98\x41\xd4\xd3\x6c\xba\xbf\xb4\x53\x52\xe9\xc5\xa6\x55\xe5\xd0\xf6\x06\x9a\x40\x6b\x3c\x27\x08\x2b\x7f\x08\x15\x47\x84\xc9\x56\xd8\x7d\x13\x99\x55\xa5\x1f\x9f\x10\x66\x87\xf6\xc3\xc5\x6b\xf4\x12\x1d\xea\xb1\x19\xc4\xe0\x0c\xd3\x0a\x88\xba\x1d\x56\x37\xb4\x01\x66\x2e\xa7\x2c\x69\x0a\x40\x8e\x20\x2e\xcc\xd5\x32\x42\x8c\x23\xd9\x16\x8b\x20\xe3\xc0\x7b\x84\x6d\xd5\xa6\x24\x22\x92\x41\xec\xe4\xbb\x0f\x7f\x90\x24\x1a\x22\x9b\xf3\x3a\xfc\xe1\x19\xaf\xc3\xd0\x44\xd4\xc7\xbf\xbf\x60\xe6\xac\xd6\x44\xe1\x12\x2b\x6c\xaf\x49\xf7\x85\x61\xd7\x0e\x97\x65\xc2\x65\x29\xc9\x3b\xca\xda\x07\x53\x17\x65\x2f\xc2\x1e\xd7\xe7\xd0\x23\x54\xb8\x85\xe6\x41\xdc\xce\x45\x28\x32\xa4\x68\x5c\xf4\x8e\xd1\xe8\x11\xab\x1b\x6e\x09\x6c\xb8\x37\x21\x8b\x12\xb3\x92\xd7\x6b\x9d\x9c\x71\x81\x08\x2e\x16\xd1\xbd\x09\x50\x23\xc3\xc1\xb4\xcf\xbf\x77\x40\x08\xd2\x57\xb3\xf9\xf6\xdf\x41\x32\x2c\x95\x7e\xe7\x9a\xec\xd8\x0a\x4f\x49\x65\x69\x71\x0d\x57\x7a\xc6\x13\x96\xc9\x07\x2e\x78\x46\x48\xcc\x15\x37\x48\x2e\xec\x27\x42\xbf\xfe\x8b\x98\x87\xac\xe0\x8b\x1b\x8b\x2e\xe9\xe6\x01\x7c\xa0\x5f\xc2\x3c\xb4\x09\x0a\x22\x5a\x9d\x07\xad\x6d\xf6\xe7\x01\xf4\xaf\x7d\x9f\x07\x49\x8a\x82\xd7\xcd\x9e\x20\x25\x6f\x0c\x0a\x5f\xf7\xe8\x73\x51\x91\xfd\x2f\xe3\x24\xb8\xb3\xad\x76\x85\x95\xb9\x07\x5d\xc9\xab\xff\x1d\x5c\xe7\x20\xed\x56\xef\x78\xdb\x7a\x32\x22\xd3\xb7\x68\x5f\xf8\xef\x78\xe3\x0d\x30\xcc\xde\xf3\xec\x30\xcc\x80\x31\x1f\x83\x7b\xbe\x07\x89\xfc\x1a\xc0\x98\xda\x08\x80\x79\x25\x0c\x58\x80\x1a\xac\x16\x23\x9b\xb1\x7a\x47\x9c\x78\xbe\x35\x1e\xaf\x03\x90\x38\xae\x43\x4e\xdc\x74\x98\x55\xc3\xa4\x9f\x15\xbb\xb9\x09\xaf\x69\xbe\x73\xf9\xe1\x26\xe4\xd1\xc7\x6c\x69\x38\x22\x13\x58\xcd\xcc\xb3\x7f\x6a\xc5\x53\x62\x3a\x57\x57\xf1\xa9\x21\x9d\x49\xef\xdb\x8c\xe8\x7c\xbe\x53\xfa\x79\x28\xcf\x55\x8c\x67\xd6\x2e\xac\x02\x3e\xd7\xdb\xc8\xb0\x72\xc9\x47\xc0\x5e\x9d\x7b\xe4\x00\xf9\xab\xe9\x91\xb3\xb2\x0b\x47\x5a\x28\x43\x27\x08\xae\xaa\x2c\x98\x84\x4d\x5e\x10\x77\x0a\x3c\x95\xfc\xba\x37\xa0\x5f\xd3\x34\xa5\xf5\x4f\x78\x30\xbe\x6c\x4f\x44\xa5\x2d\x8a\x2f\xdc\x0f\x31\xaf\x25\x3e\x13\xa4\x34\x38\xa9\xeb\x86\x14\xfb\x72\x5b\xbc\x79\x7f\x7d\xda\xef\x19\xe8\xc2\xb6\x70\x06\x81\xdf\x23\x5c\xd6\x54\x4a\x08\xf8\x90\xe9\x82\xf3\xdb\xa4\x26\x0f\x5d\xaa\xed\x9c\xaa\x45\x3b\x3d\x2e\x78\x1d\x64\xdd\x8e\x25\x9d\xcb\x13\x2b\x51\xc6\x7a\xe2\x8e\x10\x65\x95\xcf\x54\x06\x6f\x21\x70\x81\xc5\x53\xc9\x85\x83\x47\x85\x1f\x3d\x6c\x3d\xc8\x4f\xf1\xd0\xec\xf5\xe9\x81\xea\x26\xb0\x79\x77\xae\x75\xac\xef\xaa\xb4\x6a\x83\x2b\x3b\xeb\x91\xb1\x87\x95\x3a\x6c\x14\x67\xe3\x3c\x1a\xe3\x75\xe7\x93\x64\x95\xfe\x82\xc8\x24\x04\x6c\xce\x33\xf7\xb6\xeb\x52\xc8\xa5\x47\x67\x3d\x46\xa8\x7e\xce\x3d\x84\xb7\x0f\xf4\x5f\x3a\x58\xe6\x41\xae\xe2\x32\xa7\x55\xa5\x17\x12\x5b\xe2\xb5\x00\xdd\x09\xa6\x49\x9f\xd1\xce\x70\xee\x6a\x63\x21\x1c\x05\x5c\x24\x69\x42\xc1\xf0\x9e\xe9\xcb\xc0\x72\x66\xe8\x0d\x04\x6d\x63\x54\xd3\x07\xdd\xc3\xb0\xc5\x3e\x49\x2c\x04\xfe\x37\xff\x3a\xa1\x80\x35\x02\xf0\x81\xe7\x4c\x1f\xe9\x15\x0a\x1b\x71\xc9\xd1\x4a\x5f\x5b\xfa\x17\x97\x44\x69\x43\xcd\xcc\x5b\x18\x7d\xd0\x86\x95\x68\x33\x1c\x86\x94\xc8\x30\x0a\xa3\xc3\x59\x25\x45\xe2\x79\x80\x48\xb1\xed\x93\xd6\x41\x9c\xf2\xf6\x5c\x91\x63\xb4\x21\x7d\xe7\xd9\x22\xc8\xe8\xf3\xa3\xc8\x4f\x18\xab\x42\xfb\x12\xaf\x4a\x94\xfa\x21\xd7\xef\xce\x78\x56\x42\xbe\x61\xba\x0e\x5e\x9a\xf0\x72\x8d\x86\x18\xc8\x8c\x29\xae\xe2\x0b\xb9\x5e\xcc\x42\xea\x4e\xc6\xad\x7b\xc4\x54\x10\x37\x38\xfd\x07\x52\xb4\x8a\x94\x96\x8d\xdc\xba\x94\x0d\x93\x71\xbf\x37\xd1\x3d\x70\x49\xfa\x53\x02\x00\x25\x39\xea\x4a\xb1\x59\x5b\xc7\xf3\xbb\x8e\xd0\xff\x05\x29\x29\x1d\xa1\x56\x45\xef\x08\x23\x52\x4e\xfc\x9f\xc7\x4e\x05\xe0\xa8\x0b\xcc\x9c\x6d\xa5\xcf\xb4\xf5\x70\x5b\xd6\x71\xcb\xe3\x31\x25\xa8\xc1\x02\xd7\xfa\x0e\x96\xc8\x2e\xcf\x94\xcc\xa9\x49\x0b\x0c\x2e\x45\x4f\x5b\x1e\x47\xaa\x0b\x86\x0d\x55\xa8\xa6\xf3\x85\x39\x2d\x08\xa3\x8a\xb3\x39\x72\xb8\xb1\x8a\xe3\x12\x81\x60\xe1\x02\xdd\x63\x51\x6b\x5d\x00\x17\x0b\x00\xa1\x61\x86\xca\x56\x9f\x07\x04\x24\xdb\xcb\xb1\x54\x58\x11\x4b\x86\x17\xed\x83\x73\xd3\xb4\x83\x12\xb1\x4f\x5d\xfe\x7e\xc7\x7c\x3a\xfa\xa4\x65\xf1\x82\x9c\x3f\x90\xc2\x1f\x6b\xc3\x38\x5d\xd7\x40\x18\xc8\xdd\x71\x76\x6c\x71\xc9\xca\xe0\x9e\x98\xca\x76\x84\xfb\xa2\x9b\x9c\xd9\x09\xa7\xce\xfa\x34\x3f\x6a\x7b\xb4\xbf\x08\xd2\x05\xb1\x82\xa2\x49\xc0\x8e\xcd\xc5\xad\x3e\xb9\x86\x23\x88\x0b\x5f\xad\x3f\xa9\x5b\xae\x1f\x40\x99\xcd\xb9\x42\x87\x07\x27\x07\x47\x6b\x7b\xe1\x40\x86\x69\x06\x26\x23\xba\x1b\x90\xa4\x75\x53\x2d\x61\x0c\x07\xa6\xe4\x77\x22\x81\xa1\x03\xac\xfa\xf2\x97\x72\x41\xaa\x6a\x84\xa4\x56\x7f\xb1\xab\x21\x62\x3e\xd5\x5f\x52\xa2\x2d\x8c\x9b\xec\xf0\xe0\xd7\x83\x11\x22\xaa\x38\x42\xf7\x9c\x1d\x28\x13\xf0\x40\x37\x60\x43\x26\xf5\xc9\x77\x62\xc9\x5b\xc4\x08\xb1\x67\xc7\x17\xab\x2a\xb0\x36\x7f\x5a\xa3\xa3\x1b\xd2\x0d\x52\x55\x69\xfa\xdc\xf9\x03\x55\x5a\x15\x51\x2d\xb8\x29\x5e\x1a\x4b\x81\x00\x0f\x3d\x96\x70\xd3\x9d\x2c\x08\xae\xd4\x62\xe9\xad\x97\x7f\x11\xc1\xa1\x3e\x29\xb3\xbf\x49\xd7\xa1\xf6\x20\x6d\x74\x7f\x13\x38\xb5\x82\xd1\x0a\x72\xb3\x10\x44\x2e\x78\xb5\xf3\x34\xce\xf7\xb6\xdc\x5b\xc1\x99\xd4\x32\x45\x9b\xd8\xb6\x8f\xd2\x67\xd0\x19\x9d\xc5\xd6\x57\xe0\x70\xca\x04\x29\xad\xb2\x64\x4b\x5e\x2c\xf0\x1d\x68\x0a\x5a\x9f\x23\x65\x8a\x69\x12\xda\x44\xbf\x3f\xf6\x3d\xf4\x69\x77\xaf\xf6\x04\xb6\x19\xc9\x1d\x39\x17\x4d\x9e\x5b\xfa\xcd\xd5\xe4\xac\x77\x4b\xc3\x07\x6f\xe1\x18\x9f\x2d\x48\x71\x7b\x95\x56\xcd\x75\x4f\xa0\x05\x0d\x17\xbb\x54\x0c\x74\xf3\xd9\xb4\x82\x09\x17\x0a\xb1\xb6\x9e\x12\xe1\x1c\x0a\x73\x58\x45\x22\xee\x68\x41\x8e\xd1\xa5\xf9\x9d\x0b\xce\xbb\xea\xc3\x98\xcd\x09\x7a\xa5\x0f\xc4\x1f\xbf\xfd\xf6\xf7\xdf\xa6\xcb\xe8\x74\x22\xd5\x3c\x24\xaa\x76\xe0\xfb\xa2\x76\x5d\x9b\xee\x6c\x72\x36\xdb\x9e\x82\x51\x57\xe1\xc2\xaf\xcd\x7c\xf3\xa1\x4b\xf3\x4a\x4a\x42\xd0\x86\x70\x85\x16\x1d\xe6\x3f\xd3\x8a\x4f\x4f\x6a\x2c\x15\x11\xda\xc6\xb1\xd7\xfa\x18\xe8\x86\x29\x9b\x1f\xd7\xe5\xd1\x71\x5a\x14\xdc\x99\xd5\x6b\x25\xe5\x7a\x34\x33\x8f\x94\x87\xd3\x93\xb2\x73\x17\x3c\x72\xbd\xfc\x0e\xbd\x88\xab\x26\xa6\x97\xe0\x0d\xc9\x93\x89\xf6\xf6\xe6\x66\xf2\x86\xa8\x50\x60\x33\xf8\x10\xbd\x39\xbf\xf1\xe5\xc6\xf5\xee\x32\x49\x4d\x83\xd4\x4e\x91\xda\x0b\x9e\x56\x6f\x3e\x77\xdc\xc5\x88\x12\xa8\x8d\xc6\x18\x29\xf4\x42\x8f\x7a\x95\x6d\x1d\x0e\xf1\x62\x72\x8c\xfe\xc6\x5b\x50\xb9\xf0\xb4\x5a\xa2\x7b\x6c\x18\x0d\xe2\x28\xa5\xbb\xe7\x85\xee\xc6\x0b\x2d\xb5\xf4\xae\x7e\x4b\x70\x69\x6a\x55\x82\x6b\x67\xe7\x67\x35\xe8\x53\xb6\x65\x3b\x6b\xa5\xe2\x35\x5a\xd8\xa1\x9a\x39\xec\x0a\xfa\x1b\xdd\xc8\x1c\x41\x88\xfd\x48\x24\x48\x63\xac\x25\xfb\x37\x5f\x85\x2d\xb4\x26\x85\xcc\x3c\x07\xd5\x80\x30\x2a\xc2\xa9\xb2\x8a\x3e\xb8\x30\xa9\x95\x51\xd1\x2e\xb1\xee\xc9\x52\x55\x04\x65\xaa\x2c\x82\x40\x48\xe9\x43\x99\xfc\x92\xf4\x20\x64\x9e\x1a\x25\xfa\x61\x89\xe1\x35\xf3\xe4\xad\x90\x80\x6c\xa8\xcd\x6e\x2e\x03\xc0\xd1\x1d\x4d\x65\x25\x44\xce\x99\xec\x0b\xa8\x62\xc6\x19\x2d\x4c\x38\x03\xb5\x0d\x67\x88\xb7\xaa\x69\x15\xb8\x82\x0a\x2c\xc9\xf8\x0e\x0b\xaa\x05\xaa\x6e\xbf\xfb\xc3\x96\xe9\xd3\xae\x38\x07\x3f\x89\x0f\x3a\x9b\x1e\xa7\x77\x33\x93\x36\x83\x5c\x01\x8c\xcc\x2b\xbc\xb6\x38\xe9\x3b\x1a\xed\xb5\x0f\x06\x99\x1a\xe2\x8b\x7c\x66\x1d\x56\x0b\x40\xf6\x41\x2c\xcb\x01\x43\x41\x70\x6a\xb3\x61\x0f\x12\x6f\xb2\x5a\xb1\x89\x22\x01\xe2\xed\x5c\xac\xd8\xc1\xba\x87\xeb\x73\x98\x09\x6b\xf2\xf4\x66\xb5\x1d\x96\x6b\x01\x33\x74\x71\x7a\x79\xfa\xcb\xf5\x8f\x67\xbf\x5c\x9e\xbe\x3f\x4f\x79\x75\x72\xed\xf8\x9c\xd5\xe3\xb3\xd5\x8f\x7f\x82\x0a\xf2\xee\x91\xc5\x82\xec\x0f\xcc\xe4\x1a\x7a\x13\x92\x92\x59\x1b\x20\xa8\x87\x9c\xc6\x52\x87\x56\x9c\xa6\x5a\xf0\xec\x54\xe2\x58\x54\xc1\x6b\x52\xe1\xe5\x35\x29\x38\x2b\x77\x8e\xce\xbe\xf4\xc2\x46\x9a\x0e\xf9\x32\xd0\x64\x85\x31\xcb\x15\x82\xb5\xc5\xab\x1d\x3e\x20\x84\x34\x98\xf1\x45\x47\xad\xd1\xfe\x45\xae\xd1\xde\xb8\xc7\x1b\x22\x28\x20\x82\xf6\x61\xd7\xbc\xe5\xf7\xb6\xa2\xfb\x21\x65\x6e\xe7\x1c\x05\x5e\x9a\x2e\x3c\x92\xce\xa6\xa6\x38\x7a\xf5\xd2\x35\xf2\xf5\xc5\x3d\x2c\xd2\x67\xaf\x23\x5f\xb6\x8f\x9f\x0e\x7d\x75\xb0\xa5\x7e\xf8\x2b\x05\x3f\x84\x56\xc4\xf8\xab\x63\x9f\xa7\xf6\x0a\xfa\xe3\x45\x11\x66\xa5\x83\x9c\x7d\x7d\xfb\x44\x15\xcd\x35\x2f\x6e\x33\xb9\x5d\x6f\xce\x26\xe6\x6d\x2b\x78\x16\x73\x03\x6b\x2d\x93\x23\xac\xbf\x05\x0a\xe8\xe0\x74\xdd\x1b\xa7\xeb\x81\x49\xeb\xc2\xd5\x77\x5b\x3b\x50\x0f\x06\x6b\xab\x7b\x9c\xe2\x23\xfa\x15\x50\x06\x6b\xeb\x91\x67\xb0\xb6\xb6\x78\x4c\x12\x09\x80\x41\xdf\x08\x5c\x90\xc9\x3e\x29\x6f\x4e\x80\xa0\xb2\x15\xb6\xac\x9c\xd7\xe1\xbc\xb8\x60\x84\x94\x46\x7e\xd8\xa1\x10\x34\xd7\x23\x31\xf0\x68\xf0\x21\x76\xc0\xe2\x56\x24\xa8\x79\x37\x0b\xfb\x6a\xab\xe2\xba\x20\xf3\xa6\xde\x75\xb6\x49\xe3\xc9\xd0\x5d\xd5\x10\x7b\x9c\x74\xe7\xa1\xd4\x3a\x61\xf1\xee\x74\x1c\xae\x20\x92\x74\xae\xa7\xcb\x56\x86\x36\x18\x61\x5f\x7a\xaf\xeb\x88\x6e\x75\xc6\x45\x41\xa7\xd5\x12\x2d\x70\xa5\x8d\xa5\x7b\xaa\x16\x08\xa3\x5b\x5a\x55\xf6\x35\xf1\x13\x75\x4d\x6c\xae\xa6\xd1\x68\x2a\xce\xe6\x30\x19\xd8\xe6\x64\x3c\x34\xa4\xd0\x6d\x16\x15\xc1\xac\x6d\x4c\x3f\xb5\x7e\xb4\xe4\x6d\x86\xb4\x0c\x17\xf8\xf6\xfa\x14\xa3\x96\x7e\xc4\x14\x6e\xfb\xe8\x9e\xef\x27\xd7\xa2\x0f\x6a\x41\xc4\x3d\x95\xc4\x14\x92\x8b\xee\x93\xe9\x4b\xbf\x8c\x9c\xf9\xcc\x53\xa8\xd8\xcc\x41\xbd\x2d\x20\x95\x35\xba\xad\x1f\xe1\xbd\x4e\xb4\x32\xce\xc6\x8c\xcc\x0d\x51\x83\x15\x68\x06\xd1\x69\xda\x37\xf8\x41\x9f\x6d\x20\x15\x6f\x10\xad\x6b\x52\x6a\xfb\xb8\x5a\xa2\x3b\x8a\xa3\x7b\x02\xa4\x10\xdd\x8e\x42\x87\x8c\x23\xde\xe8\xab\xab\x65\x54\x2d\x21\xa2\xb7\x68\x15\x2a\xf9\x3d\x4b\xc8\xb7\xba\xb1\x30\x07\x8c\xa6\x44\x61\xeb\x03\xd7\x87\xc0\x73\xa2\x03\xdd\xb9\x3e\x7b\x90\x24\x70\xb3\x71\x03\x78\x9a\xf4\x39\x56\x09\x52\x62\x83\x36\x6f\xd6\xf3\xe3\xdb\x8e\x4a\x1b\xaf\x4b\xe4\x61\xde\x0f\x66\x43\x7d\xa2\x79\xab\xf6\xe4\x1e\x79\xcc\x75\x64\x28\x2e\x02\x23\x91\xd6\x44\x22\xde\x66\xaa\x37\xf1\xca\x36\x97\xd3\xc2\x1b\xfc\x4e\x1b\x1f\xa9\x4a\x1a\x55\x75\x38\xc7\x16\x7b\x84\xbc\xdf\xe6\xe1\x06\xfc\x95\xd3\x76\x36\x23\x02\x6e\x3a\xe8\xf0\x1a\xec\xde\xd7\xf1\x72\x77\x58\x9c\xf3\xd6\x02\xbe\x88\x1a\x41\xed\x00\x4b\x26\xf1\x48\x93\x96\x64\x13\xca\xf4\x0a\x22\x81\x0b\x9e\xa1\xf3\x0f\xdf\xc7\x6d\xd1\x1c\x95\x05\xd2\x52\x56\x61\x9c\x1f\x58\x1c\x26\x31\xef\x7e\xd8\xc4\xfa\x62\xb7\x45\x51\x71\x69\xd3\xa3\x61\x5d\x8a\x05\x66\x8c\x38\x67\x14\x55\xe0\xc9\x9e\x12\xc2\x10\x6f\x88\x01\xe5\x45\x75\x06\x23\x49\xd9\xbc\x22\x08\x2b\x85\x8b\xc5\xb1\xee\x1d\x73\x7b\xa1\xcb\x43\xb6\x9f\x48\x25\x08\xae\xcd\x9e\x10\xa4\xc6\xd4\x34\x8f\x70\x21\xb8\x94\xa8\x6e\x2b\x45\x1b\xff\xb2\x38\x2f\x22\x01\x46\x08\x69\xd2\x52\xdd\x5a\x41\x5a\x49\x97\xf0\x3c\xea\x7a\x68\x87\xcf\xc3\x62\x45\xe0\x3a\x1b\xe9\xdf\x92\xba\x51\x4b\x9f\x98\x18\x67\x03\xcd\xa8\x90\x0a\x15\x15\x25\x4c\xd9\x91\x19\xca\x41\xe8\xc3\xc8\xa9\xd3\xcc\xce\x88\xb4\x53\xc2\x4a\x30\xbe\x1b\x25\x4d\xfe\x9d\xef\x84\x7b\x55\x49\xa5\xf5\x75\xc8\xb8\xec\x3f\xec\x2a\xd3\x98\x8d\xe3\x66\x04\xb6\x8e\x53\x70\x4c\x8f\xec\x47\x41\x17\x82\x3a\xdb\x5d\xee\x64\x9a\x5c\x81\xf2\x31\xee\x5c\x8f\x7a\x9c\x03\x9d\x6d\x01\xa9\x30\x6b\x52\x07\x36\x14\x23\x77\xfa\x1c\x90\x82\x68\x55\x14\x67\x14\x32\xcf\x2e\x63\x02\x5d\xee\x3d\x91\x12\xcf\xc9\x24\x12\x8e\x90\x43\xe0\x74\x8e\x36\xc0\x31\x74\xdb\x66\x41\x0c\xd1\x95\xe2\xc1\x27\x61\x92\x57\x68\x3c\xd6\x66\x20\x51\x3d\x70\x46\xd3\xbd\xa0\x4a\x11\xd8\xa5\x50\xc9\x09\x00\x68\xab\xe4\x9d\xfd\xe4\xb2\xa8\xf6\xec\xa4\x87\xed\x69\xf5\x83\x95\x26\x4d\x6b\x4a\xd0\x54\x50\x32\x43\x33\x0a\x79\x63\x90\x51\x35\x32\x55\x08\x30\xe0\x76\xb1\x94\x44\xc0\xb0\xad\x5b\xc0\x0d\x3f\xae\x3f\x7f\xb5\xe3\x57\xa2\x65\x05\x0e\x4a\x74\x02\xb7\x18\x9d\xa1\x39\x64\x71\x59\x23\xf8\x0f\x2f\xff\xf3\x8f\x68\xba\xd4\xfa\x1a\x18\x62\x8a\x2b\x5c\xb9\x0e\xa0\x8a\xb0\xb9\x5e\x45\x10\xb9\x71\x72\xa3\xc7\x4f\xe5\x17\xa7\xa2\x35\x55\x66\x82\x5e\x7d\x73\x3b\x4d\x3a\x7a\x20\x1f\x4f\x4a\x72\x77\x12\x6c\xa1\x71\xc5\xe7\x71\x6f\x3d\xcb\x91\x4d\x9c\xe4\x67\xdb\x70\xa2\x79\x45\x8b\xe5\xae\xce\xb4\x2b\x5e\x82\x16\xfc\xde\x38\x73\xd6\x8f\x6a\x40\xf5\xd2\xf0\xa6\xad\x60\xe2\xd0\xf7\x9e\x9f\xaf\x95\x64\x95\xfa\x28\xd5\x49\x18\x48\x3b\x08\xa2\xda\x66\x57\xee\x1c\x9b\xc2\xe8\xba\xc9\x2d\xf1\x84\x8d\xb9\xf9\x3a\x24\xd1\xde\xb8\xef\x71\x55\x4d\x71\x71\x7b\xc3\xdf\xf1\xb9\xfc\xc0\xce\x85\xe0\xa2\x3f\xe6\x0a\xeb\x3b\x7d\xd1\xb2\x5b\xa8\xa2\xdb\x91\xd1\xf2\xb9\xc5\x14\x3a\xfe\x80\x60\x74\x51\x9d\x71\xa3\x34\xf4\xa0\x4e\x25\x71\x3e\xb8\xae\x65\xf2\x40\x3b\x47\x1b\x43\x44\xf7\x39\x36\x01\x9f\xf4\xc6\x21\xc3\xa3\xfd\xcd\xcb\x3f\xfc\xc9\x08\x17\xc4\x05\xfa\xd3\x4b\x48\x39\x96\x23\x73\x01\xc0\x0d\xac\x55\xad\x1a\x57\x55\x6c\x94\x20\x14\x01\xdf\x47\x17\xa7\xde\x83\x23\xaf\x76\x76\xba\x3f\xdb\x64\xbc\xb9\xf9\x1b\xd8\x8b\x54\x49\x52\xcd\x46\x86\xed\xc5\xbb\xb5\x0e\x40\xbb\x3a\xb0\x57\x5e\x3c\x53\xd0\xee\x8d\xb6\x3b\x5e\xb5\x35\x79\x4d\xee\x68\x11\x17\xc0\xec\xad\x4a\xef\x6d\xce\x4d\x5f\x51\x09\x24\x40\xd3\x8a\x17\xb7\xa8\xb4\xbf\x0c\xa0\xf2\xab\x55\xb5\xe3\x67\x21\x36\x69\x20\x21\x59\xe0\xd1\xf1\xf7\xd2\x04\x6a\xdc\x34\x9e\xa1\x44\xe0\xfb\xde\x64\x80\x68\x02\x76\xd4\xc4\x30\x62\x72\x30\x3d\x35\x94\x3e\xb6\x23\xd2\xd7\x54\xf4\x2b\xa2\x73\x0b\xd2\x23\xf1\x5d\xef\xe3\xe3\x98\xbd\x0d\xd1\xbd\xd0\x9d\x86\x06\xfe\x6d\xf8\x16\xd6\x98\xb1\x3c\xe5\x90\xdf\x18\x46\x83\xd4\xdb\x07\x6e\x99\x78\xf7\x65\x86\x60\x68\x5a\x8e\x44\x6f\x5e\x98\x0f\x42\xd7\x58\x59\xfb\xc8\x45\xd9\x31\x6a\x88\x90\x54\x6a\xd5\xe9\x47\x38\x50\x67\x15\xa6\x75\x10\xbe\xdb\xd5\x24\xac\x23\xea\x6b\xdc\x8c\x6f\xc9\x32\x72\xc3\x25\x1e\x97\xc7\x00\xfe\x35\x6e\x22\xef\x01\x28\x5d\x9b\x7e\x0d\x44\x5e\xce\x13\x5e\xda\x7e\xc0\xf5\x60\x4a\x12\x3f\x89\x19\x9b\x51\x07\xda\xf5\x95\xf3\x63\xb7\x70\xfd\x1b\x47\x7f\xe2\xaf\x1c\xf3\xad\xaf\xe9\xa2\x81\xf1\x7d\xa9\xf7\x8c\xef\x7c\x26\x71\x9a\x84\x74\x82\xdb\xc9\xee\x8c\xfe\x75\xd4\x73\x68\x99\x93\x19\x98\xbe\xd6\xd1\x74\x6c\x8a\x02\x24\x74\x40\x1f\x45\xdb\x28\x3a\xf8\xee\x60\xa7\x77\x9c\x59\x19\xc1\x1b\x3c\x07\xcb\x74\x1f\x16\x68\xb5\x4f\x21\x07\xed\x82\xdf\x9b\xdf\x1b\x74\x49\x63\xbf\x45\xca\x8e\xc8\x7c\xc1\x93\x56\xc7\x20\x07\xdd\x8e\xb0\xd6\xb5\xe1\x2a\xbc\xc7\x4b\x84\x05\x6f\x59\x52\x1a\x34\x04\x46\x7c\xe0\xec\xfd\xca\x60\x2f\x39\x23\x2e\x48\x9f\xd2\xca\x4d\xc7\x61\x4e\xa5\xc1\x2b\x50\x86\x5e\x1d\xbf\x7a\x99\xdc\xf7\x2b\x52\xb4\x42\xd2\x3b\x72\x65\x6b\x9c\x07\x41\x95\x8b\xd9\x84\x4b\x49\xa7\x15\x24\x6e\x29\x8e\xce\x4d\x01\xf8\xf5\x81\x7a\xe0\x08\x8c\x98\x8b\x90\xad\x34\xa1\x87\x87\xe6\x04\x87\x80\x4f\xdd\x40\x02\xea\x63\xbf\x34\x49\x58\xd7\x15\x4d\xf2\xd2\x6b\x92\xe6\xde\xdb\xe9\x58\x5d\xe1\xfb\x7d\x90\x24\xef\x6d\x6c\xa0\xab\x6c\x4f\x5d\xe5\x64\xf8\xe8\x5e\x50\x65\x0f\xf7\x3d\x95\x04\x1d\x82\x57\x62\x65\x33\x26\x11\x34\x87\x3e\xac\xc4\x0a\xf8\x39\x08\x96\xc5\xea\xd1\xdd\x87\x55\x5a\x97\x27\x1d\x02\xff\xde\x3a\xb0\xba\x15\xb4\xd2\xbf\xbb\x97\x17\x98\x95\x55\x92\xcc\xf0\xb3\x52\x2d\x93\xb8\x70\x2e\x66\x28\x14\x89\x36\x7e\x19\x54\x93\x58\x60\x89\x18\x47\x35\xc1\x00\xd0\xd4\xb7\x8b\x93\x82\x3d\xae\xe6\x7c\x7d\x30\x9b\xdd\x5c\x63\xe1\x85\x60\xc5\xf5\x6b\x2a\xad\x78\xd6\x72\xc4\x5a\x20\x06\xd6\x51\xe3\x32\x25\xb5\x3b\x98\xd3\x6e\xf1\x8e\x3b\xd0\xe4\x6a\x4f\xba\x8b\x63\xa5\x2f\x4f\xd1\x8f\x91\x2d\x41\xae\x9b\x6f\x01\x27\xb8\xc1\x2d\xd7\x81\x64\x92\xa2\xd9\xe6\x59\x1d\xae\xbf\x16\xd7\xc6\xba\xb9\xc7\xbe\xc3\x09\x7d\xf8\xf4\x50\x47\x81\x2c\x74\x18\x51\x13\x52\xb7\x35\x50\x6c\xc6\x63\x1a\x93\xb7\x0b\x4a\x78\x77\xcf\x9c\x30\x22\xb0\x8d\x2b\x38\x88\xa8\x25\x5f\xc1\x92\xb3\xd4\x03\xf1\x89\x0d\xa7\xe5\xfd\xa7\xd5\x14\xf3\x67\x09\x1d\x01\x3d\xe7\x90\x8b\x95\xd3\x6e\x23\x26\x9b\x34\x96\x9c\xa3\x5e\xa1\xe6\x32\x9b\x3f\xe0\xfc\xd4\x8b\xf2\xcf\x96\xde\xe1\x8a\x18\x0e\x7b\x27\x1a\x76\xaa\x4c\xc8\x76\xba\xaf\x66\xa3\xb5\x0f\xc1\xec\xd8\x0c\x7a\x78\xd4\x82\xcc\xa4\x4f\xbc\x78\x81\x0e\x4d\x1b\x07\x86\x64\x77\xb7\x4a\xae\x5d\xab\xf3\x87\x26\xa1\x72\x6b\xbe\xf5\x3a\x7f\x68\x30\xe0\x34\x9a\xbd\x58\xb8\xff\x26\x0b\x7c\x47\x80\xd3\x98\x56\x58\x54\x00\x4a\xbf\x36\x53\x86\xa6\xad\x42\x84\xdd\x51\xc1\x59\xad\x8f\x1f\x90\xcf\x68\xc9\x24\x08\x90\xc1\x17\x44\xa2\xdf\x1e\xfe\x78\x7a\x05\x49\x4b\x47\x96\x2d\xdf\x8e\xaf\x95\xc0\x0f\xb0\x32\x86\xe0\x75\xfb\xb8\xdf\x90\x1b\xbb\xde\x2e\xa0\x9f\xb8\xb9\xd0\x63\xab\x5b\xd5\xe2\x0a\xa8\x9f\x8b\xaa\xd5\x77\xe1\xce\x76\x76\x7e\x1f\x78\x8a\x27\x2f\xa7\x0b\xdc\x12\x7f\xbf\xa6\x51\xc7\x35\xc7\x41\x3d\x0b\xf6\xeb\x1a\x0d\x79\x74\x8d\x87\x0d\x24\x94\x6b\x8a\xce\x81\xf4\xc4\x94\x61\x1e\x8e\xbd\x8b\xe3\xe0\x19\x50\x3a\xc1\x24\x7f\xbb\x9a\xa4\x6b\x1e\x46\xa8\xd1\xb2\x73\x1f\x7e\xc4\x61\xc8\x77\x0c\x22\x1c\xd1\x79\x76\x3d\xe3\x25\xd9\xbe\xaa\x50\xda\x3e\xbf\xb4\x6d\x06\x89\x4f\x94\xd9\x5b\xc7\x94\xce\x85\x82\x24\x26\xc7\x4f\x16\x0b\x52\xb6\x11\x2a\xd7\xc5\xcc\x80\x81\x46\xbd\xd7\x61\x54\x60\x56\x52\xbd\x57\x4c\x2a\x80\x79\xbd\x3e\x64\x56\xff\x77\x0d\x8a\xb0\x66\xa9\xff\xf0\x32\x82\x79\x0d\x20\xd6\x6b\xea\xf6\x28\xac\xda\x6b\x09\x13\x40\x25\x2d\x09\x9a\x92\x82\xd7\x04\xb0\xc3\x0d\x67\x46\x1f\x77\x94\x0a\x3e\x81\xc4\x44\x8e\xcd\xd0\xb6\xed\x52\xe0\x08\xb5\x17\xba\x3b\x46\xd2\x73\xed\x0b\x40\x8b\xe9\xb5\xa6\xa2\x6b\x5e\xcf\xa3\x81\x6d\xf8\x95\x41\x9c\x21\xdc\x15\xed\xd4\x23\xd8\xb6\x3f\x9f\x93\x4c\xd3\x2d\xd5\x98\xdc\x51\xa0\x1f\x38\xc1\x52\xd2\x39\x1b\x37\xbc\x1c\xeb\x66\x4f\x7e\xa3\xff\xbb\xf5\x51\x8a\x14\x00\xba\xad\x6b\x52\x81\x64\x7e\xee\xf3\xe3\xda\x35\x7b\x5a\xba\x9f\xcc\x21\x72\xd6\x19\xe4\x17\xac\x2c\xdc\x8c\x2a\xb3\x5e\x31\xcb\x74\xbd\xa1\x1d\xe3\x71\x35\xef\x3b\x90\xa8\xc2\x53\x52\xc9\x4f\x6d\x17\xc0\x38\xc4\xf4\x60\xcb\x04\x2c\x77\xed\xe0\x8d\xbb\x25\x62\x93\x44\x84\x3b\x5d\x25\x3a\x5c\x4d\xa2\x63\x86\x79\xae\x28\x7d\x3b\x45\xd2\xff\xf1\x2d\xbb\x9c\xb6\xc3\xaf\xbd\xab\x53\xef\xa1\x0f\xd7\x6b\x20\x19\x19\x00\x41\xb6\xde\xc4\xbc\xb6\xf9\xdf\xac\x0c\xb4\x10\x90\x86\x26\x80\x26\x88\x9e\x69\xc8\x92\xa6\x1d\x8f\x37\xe4\x85\x6e\x7f\x09\xd9\x11\xac\x7a\x5a\xa0\x40\xae\xb9\x03\x66\xbc\xaa\xf8\x3d\xf0\xdf\x98\x3e\x04\xee\xcf\xed\x79\x5c\xc6\x72\xa5\x02\x5d\xbf\xce\x73\xbe\x11\xd8\xf7\x8e\x72\xf7\xdf\x24\xec\x42\x05\xd0\x8b\xd7\xf1\x7f\x7c\x31\x39\x8b\xff\xe3\x1f\x24\x11\xdb\x7a\x15\xed\x9f\x0b\x22\x79\x2b\x8a\xad\xf3\x39\xed\x9f\xaf\xae\x1e\x6e\x9a\x53\x51\x73\x31\x31\x35\xc4\xf3\xbc\x54\x92\x77\x7a\xfb\xb9\x2d\x91\xe9\x9d\x50\xa4\x3e\x6b\x3f\x67\xf2\x8d\xe0\xed\xb6\x56\xdc\xc7\x5f\x76\xb6\xc0\xcc\xe5\x17\x64\x1a\xf9\x52\x16\xaa\x8a\x9d\xc6\x05\x16\xc4\xd6\x26\xd5\xca\xa5\x6c\x70\x91\x69\xf6\x7c\xd9\xd0\x8c\xaf\xcb\xb8\x1e\xb2\x6d\x9a\x8a\xd4\x84\x29\x5c\xc1\x6b\x73\x6d\xc4\xb5\xf7\xa6\x2c\x76\x77\xe5\xfc\xf4\x1f\x3f\x3f\xcd\xe9\xfc\x78\x13\x39\xce\xea\xa7\x5a\x48\x3f\xb9\x1f\x6f\xa1\xc0\x0d\x9e\xd2\x8a\x6a\xd5\xe7\x29\xde\xef\xc2\xeb\x57\x9c\xab\xef\x3d\x2c\xf0\x29\x5a\x6a\x04\xbd\xa3\x15\x99\x6f\x1d\x5a\xfd\xbc\xed\xa4\x2f\xd2\x89\x6b\xe2\x5c\x16\xb8\x8a\x49\x8d\xf9\xcc\x91\xf0\x02\xe2\x3a\x4f\xb2\x20\x69\xa2\xe7\x33\x5e\xbe\xbd\x20\x8a\x56\xe0\x63\x71\x8a\x11\x4e\x9d\x78\x54\x61\x1c\x9a\x26\xdd\x61\xf9\x58\x75\x79\x5b\xe6\x94\xcd\x51\xaf\x8e\x61\x2b\x04\x61\xaa\x5a\x06\x71\x57\xe0\xe5\x30\x8a\x37\x28\xc5\xa0\x97\x5b\xe5\x32\xc6\x9d\x77\xea\xed\x2d\x4b\xf9\x51\xe3\xa5\xd6\x46\x03\x77\xce\xac\x05\xae\x19\x30\x00\x4c\xc5\x59\x80\x5b\x45\x11\x97\x6d\x28\x34\xc4\x1b\xc2\xba\x2d\x7c\x62\xdd\xab\x63\xbd\xb5\x7b\xa5\x87\x8c\x75\x7a\x5c\x97\xbf\x69\x2a\xac\x66\x5c\xd4\x63\xe7\x45\x19\xf7\x2c\xd7\x88\x6e\x9d\x41\x1a\xbc\x87\x84\x18\xda\x27\x53\x9d\x9d\x95\x15\x09\xac\x52\xbf\x00\xac\x34\xb1\x4f\xd4\x32\x41\x0a\x3e\x67\x50\x08\xc0\xfe\x16\xec\x2d\xef\x34\xc2\x52\x5b\x84\x88\xb5\x55\xb5\x75\xdf\x22\x6d\x59\x7e\x47\xc4\x82\xe0\x2d\x4f\x61\xda\x06\xff\x60\xdb\x44\x82\x34\x82\x48\x98\x50\x13\x81\x37\x3a\xbe\xef\x14\xc2\x52\xf2\x02\x48\x8d\x4d\x8e\xa1\xa3\x1b\xc3\x60\x69\xce\xb8\x40\x18\xcd\xe9\x1d\x61\xe8\xca\xec\x86\xb3\x0a\x6f\x4f\xb3\x15\xb8\xed\x9c\x87\x1e\xb7\x8a\xfb\xfc\x53\x84\x15\xc2\x65\x4d\x81\xe4\xc1\x10\x17\x58\xaf\x66\xd8\x6a\xf0\x15\xbd\x4b\x05\x87\x6c\x44\x74\xb1\x6d\x7e\xea\x67\xbd\x17\x92\x32\x1d\x8e\xc0\x4f\x17\x58\x88\x0e\x3f\xe1\x6b\xa7\xa3\x02\x42\xef\xae\xba\x4c\xc4\xf4\x7c\x4e\x87\x2c\xbf\x86\xbe\x06\x36\x35\x6a\x7d\x5b\x0b\x7c\x67\xd0\x16\xdd\x12\x57\x5a\xcd\xd8\x56\x8d\x94\xc4\xd4\x80\xef\xf5\xcb\xe4\x1d\xba\x80\x08\xf0\xd1\x82\x67\xad\x8b\x8e\x4c\x78\x79\xdd\x90\x62\xd4\x6d\x41\xb7\xe0\x8e\xa8\xc3\x71\x88\x6d\xd9\x9f\x40\x0a\x1a\x8f\x8a\x30\x4e\xe6\x52\xef\xd6\xb0\x93\x21\xec\x85\xaa\x1e\x2b\x09\xd8\xf5\x9d\xbc\x30\x58\x89\x7f\x11\xb1\x75\x66\xd2\x06\x6f\xde\x9c\xaa\xe3\xdb\x3f\x81\x2b\x8f\xb0\x05\x66\x05\x68\xf2\xf2\xe4\x96\x34\xf2\x44\xd2\xb9\xf1\xdc\xfd\xf1\x4f\x7f\x02\x37\x9e\x5b\x9c\x93\xab\xf3\xd3\xd7\xef\xcf\x8f\xeb\xed\xd4\xb2\x9d\xfa\xf4\x1a\xac\x14\x11\xec\x3b\xf4\x3f\x87\x7f\xff\xdd\xaf\xe3\xa3\x3f\x1f\x1e\xfe\xf4\x72\xfc\x9f\x3f\xff\xee\xf0\xef\xc7\xf0\x8f\xff\x38\xfa\xf3\xd1\xaf\xee\x87\xdf\x1d\x1d\x1d\x1e\xfe\xf4\x97\xf7\x6f\x6e\x26\xe7\x3f\xd3\xa3\x5f\x7f\x62\x6d\x7d\x6b\x7e\xfa\xf5\xf0\x27\x72\xfe\xf3\x67\xbe\xe4\xe8\xe8\xcf\xbf\xdd\xb2\xa3\x91\x9c\x9e\xa9\x3c\x9e\x49\xdc\x9d\x19\xf9\x3a\x1b\x41\x48\x0d\x37\x48\x0c\x29\x41\xda\x05\x34\x59\x69\xdb\x69\x5a\xf6\x27\x7d\xaf\xb8\xee\xb1\xb9\xbe\x6a\xa4\xb9\x7e\x2a\x7e\x0f\xc4\x30\x94\x6b\xc5\x79\xfb\x80\x15\xa8\x71\x97\xe4\x8e\x88\x91\xeb\xc3\x3b\xfd\xca\x49\xe4\x1b\x43\xc4\xc4\xa6\xf7\x45\x32\xef\x45\x6e\x10\x37\x2f\xcf\xb9\x92\x37\x40\x74\x67\x47\x0b\x82\xfb\x18\xfd\x88\x05\xe5\xad\xb4\x1a\x32\xd2\x46\x38\x67\xa0\x64\x18\x22\x05\x7f\xd9\x43\xdc\xc6\x64\x5d\x6c\x2b\x64\x5c\x93\x9e\xb9\xb8\xb4\x2c\x54\x7e\xea\x4f\xfd\x25\x79\xb6\xf9\xd6\xa6\xdb\x9a\x88\x8d\x20\x77\x6e\x18\xc2\x51\x11\x11\x65\x4a\x76\xf8\x51\x19\x8b\x60\xe3\x15\xed\x14\x9a\x6d\x9d\x05\xc1\x94\x41\xa3\x6e\x8c\x70\xa1\xc5\x84\x6e\xa1\xb8\x13\x9d\x3b\x42\x31\x58\x37\xe3\xb4\x0f\x3e\x8d\x3b\x66\xf1\xc2\x31\x96\xad\xaf\x59\x9d\x8d\xe7\xdc\xff\x17\xb3\x1e\xd2\xd2\x47\xfe\x3b\x66\x58\x3f\x8d\xe8\x85\x39\x10\x70\xd5\x8f\x0b\x41\x15\x2d\x70\xf5\x22\x02\x60\xeb\x5e\x54\x54\xad\x36\xb8\xc2\x77\x09\x82\xd4\x3d\x37\x7d\xc2\x15\xba\x25\xcb\x7b\x2e\x4a\xa7\xfd\x85\x78\xdb\x6d\x43\xd9\x7a\x63\x48\xe5\x86\x03\x78\x7d\x2d\x92\x4d\xa4\x47\xd4\x44\xa0\x29\x71\xe0\xb4\x95\x2f\x2f\x8f\xd1\x29\x5b\x1a\xc5\x2b\xc2\xfe\xf7\x81\x97\xa0\x96\x2c\x68\xb7\xc6\x12\xe9\x9d\x06\xab\xf5\xb8\xbe\x61\x15\x55\x54\x6e\x33\xb2\x48\x9b\x3c\x5e\xf0\x38\xbd\xd5\x41\x8b\xb8\xb0\xac\xb7\x20\x90\x84\xe1\x08\xde\x16\x42\x6c\x5f\xf6\x2c\xb7\x85\xd6\xfa\x29\x23\x52\xbe\xd1\x1b\x76\x77\x67\x06\x83\x02\x6e\xfb\x02\x3c\xb9\x1d\xbb\x14\xd1\x92\xc9\x64\xfc\x69\x95\x80\x97\xdd\x37\xb7\x5d\xd2\x53\x07\x95\x01\x6b\xc7\x30\x58\xeb\xa6\xa9\x92\x61\xfc\xd5\xc4\x49\xf5\x37\x4e\x2f\xb7\x8d\xd2\x59\x8a\x2c\xa3\x42\xcb\x6e\x8c\x5d\x75\xd1\xfe\x28\xc1\x16\xb3\xb4\x46\xe4\x9f\x2d\xae\x00\x78\x79\x23\x5a\xb2\x6d\x61\xe2\x28\x83\x83\xa8\x7b\x2e\x6e\x4f\xbe\xfd\xd3\x4b\xb0\x39\x7c\xef\xc6\xf3\xad\xaf\xa8\xd8\x74\xf1\xa8\x44\xf1\x95\xda\xe9\xe5\x55\xb8\x91\xdd\x5a\x3a\x87\x86\x85\xd4\x9a\x82\x1e\x7a\x07\xf8\x05\x8a\x82\x2a\x44\xa5\x85\xc7\x27\x84\x8f\xbb\xee\xde\x2c\x9b\xed\x95\xa4\xf8\x5c\xee\x5e\xbb\xc9\x98\xd1\xb3\xf0\x6d\x66\x55\xa4\x59\x12\xdf\x4e\x80\x7c\x38\x90\xc1\xc7\xc0\xb0\x03\xd2\x1c\x10\x39\x70\xc3\x2c\x9b\x04\x36\xa1\x2c\x80\xc8\x48\xb8\x89\x73\xb0\x01\xe9\xc7\xb3\xca\xdc\xab\x5e\xcb\xf6\x26\x75\x6a\xc1\xca\x2f\x7d\x01\x0d\x4b\x19\xb5\xad\x7a\x62\x48\x44\xa1\xc6\xa5\x2f\x98\x66\x9d\x3f\x80\xeb\xaa\xb4\x19\x57\x1a\x32\x54\x2c\x94\x51\x98\x63\xf1\x05\x1d\x8d\x4c\x49\x10\xbe\xc3\xb4\x02\x30\x3d\xb8\x92\xb8\xec\x61\x6b\xcc\x60\x0b\xce\x64\x5b\x43\x8f\xb6\x0d\xa5\x4d\x97\x56\x9b\x88\xf1\x6f\x52\xc3\x11\x59\x35\x8b\x8f\xb3\xc9\x6f\xaf\x9a\xbd\x5e\x32\x5c\xd3\xc2\xad\xe2\xa9\x59\x36\xe0\xa1\xec\xb1\xcf\xc7\x7b\x65\x75\xf7\xeb\xba\x55\x7a\x6a\x63\x94\x93\x5d\xdc\x0c\x11\x61\x1f\xb8\x4c\x82\xa3\x10\xa6\x64\x90\x07\x5c\xa8\x6a\x09\x11\x95\xde\x97\x46\x88\x50\x48\x5b\x35\x68\xf6\x6a\x7b\xc2\x14\x2e\xec\xce\x32\xfa\x6c\xef\xed\x37\xa4\x6e\x80\x0c\xd1\x2a\xf0\xd2\xb0\x06\xab\x56\x30\xc7\x83\xba\xf2\x17\x5b\x37\x1f\x60\x1a\x23\xd2\xd0\x2e\x14\xc2\x65\x29\x11\xf6\xb5\x98\xa8\x32\x8a\x77\xcb\xe8\x3f\x5b\x52\x2d\x11\x2d\x09\x53\x1d\xee\xad\x3f\xc5\x96\x2e\xca\xca\x87\xed\xc5\xfa\x59\x77\xbe\x8d\xba\x4f\x48\xe9\x0a\x18\x59\x7f\xf2\x23\x6b\x6a\xdc\xbf\x60\x26\x68\x5d\x3d\xc2\x4c\xd8\x91\x4e\x10\x41\xee\x92\xa2\x0a\xc4\x12\x1a\xe4\xc8\x1a\x81\x30\xec\xe6\x8d\x64\x38\xa8\x4d\xbc\xaa\x58\xdd\x4a\x11\xf8\x49\xf3\x74\x94\x0b\xfa\x02\x44\xaf\x2f\xaf\x7f\x79\x77\xfa\xdf\xe7\xef\x9e\x9d\x48\xb2\xa7\x2a\x6c\xef\xd5\x30\x4f\x8e\x25\xb8\x5a\xed\xc8\x6a\x58\x7c\x45\xfe\x38\x0b\xdc\xea\x73\x32\x96\x89\x88\x39\xd4\x98\xa9\xbe\xee\x12\x02\xa2\xde\x75\x1e\x08\x6f\x3e\xdb\x30\x24\x7d\x15\x6f\x94\xbb\xbe\xa2\x58\x54\xbb\x26\xae\xb5\xdb\xbd\x13\x8e\x64\x2f\xf6\x50\x6f\x6a\x3f\xbe\x97\xdc\x57\xa3\x1a\x5d\xdf\x87\x59\xf7\x14\x90\x6c\xfb\xdb\x39\x48\x2c\x03\x56\x21\x13\x7c\xc5\x88\x91\xfb\x55\x75\xc1\xdc\xe4\xfa\x2f\x62\xf7\xd4\x94\xb7\xac\x34\xb7\x9b\x1d\x82\xf1\x7d\x87\x19\x41\x25\xa9\x88\x72\x9e\xab\x34\x05\x01\x39\x35\x1b\x88\x62\xc1\xe7\x05\xef\x36\x8a\x3b\xd4\x4b\x73\x67\xc8\x4b\x64\xfd\xc9\x08\xe1\x8a\xb3\xb9\x65\x27\x8e\x6a\xb6\x63\x0b\xf0\x51\x84\xd1\xda\x64\x43\xc9\x5d\x6c\xaf\x09\xd3\x17\xab\xd3\xa4\x6f\xd6\x70\xb9\x74\x9b\x82\x14\x5c\x94\xc6\xa7\xa3\x27\xde\xb8\x6f\x8e\x7b\x27\xee\x1a\x3e\x23\x32\x7a\x63\x6d\xd4\xbb\x61\x7e\x19\x87\xa2\x1e\xf3\xc0\x47\x06\x86\x8f\xd1\x74\xa2\x9a\x5b\x09\x95\xf7\x44\x79\xc0\x1d\x21\x78\x85\x9a\x0a\x33\x62\xab\x89\x78\x07\x6c\x96\x69\x1e\xe4\xfa\xa7\x9e\xaf\x20\x29\xd3\x9b\xf8\xbb\x70\x7c\x78\xca\x66\x53\x18\x01\x1b\x1e\x16\x3e\x43\x67\x93\x1f\x60\x9b\xbc\x27\x35\x17\xcb\xae\x93\x5e\x45\xd7\xa7\x00\x6f\x2d\xac\x37\xe7\xf4\x68\x73\xc9\x42\x04\x9d\x83\x78\x69\x8e\x9d\x45\xe9\xe8\x9e\xbc\xa3\x35\x55\x90\x6b\xb6\x6d\x5c\xa8\x68\xda\x17\x23\xf4\xa2\x86\xa1\x40\x64\x09\xbd\x58\xb4\x73\xd2\xe0\x39\x91\xe3\x17\x7d\xf1\x2c\x91\xa1\xe9\x59\xf1\xfe\x60\x41\x4c\xf0\xc3\x21\x19\x53\x1c\x07\x26\xd8\xaa\x7f\x62\x64\x3c\x17\x18\xc2\x37\x4e\x9c\x70\x53\xba\xc5\x76\x09\x07\x6e\x8b\x28\xe9\xad\x6d\x03\x01\xd3\x3c\x32\x3e\x26\x3d\xb1\xfe\xf5\x72\x81\x05\xd8\xd7\xb5\xbe\x92\xfa\xab\x83\xa3\xd4\x80\x6d\xbd\x3a\xda\xbe\x7d\x47\xee\x48\xd5\x6d\x49\xeb\x9f\xd9\xb2\xe1\xed\x6b\x09\x46\x1b\xaa\xf1\x76\x63\x11\xe1\xe2\x44\x59\xd4\x4d\xbb\x8f\xb5\x98\xea\x94\x4b\xa9\x8f\xba\x3f\xdb\xa3\x5e\x12\x74\x98\xde\x64\xfe\x38\xa6\xb4\x12\x78\x1f\xf4\xe1\xe9\x78\xdf\x43\x1e\xfe\xa8\x1b\x2e\x38\x49\x25\x69\x08\x2b\x5d\x51\xe6\x88\x77\x3d\x91\x97\x10\x7d\xc4\x53\xa8\xa5\x5d\x81\x19\xc8\x19\x87\xf1\xd3\x67\xbb\x3b\x7d\xdb\x5f\xa1\x29\xcc\xc4\xd1\xbc\xc4\xbd\x4d\xf9\xa8\x8b\x50\x6b\x21\x84\x29\xb1\xb4\xb8\xcf\x6b\xbd\xb1\xfa\xd2\x35\x5e\x65\x88\x26\x24\x4e\xa3\x23\x8e\xa6\x12\x4e\x25\x12\x4e\xa1\xd1\xcc\x56\xe3\xf3\x23\x4c\xee\xbd\xc5\x06\x4b\x60\x5d\x8c\xc4\xd6\xc6\x41\x16\x85\x3c\xe1\x25\xba\x07\x30\x41\x9f\x66\xc1\x94\x11\xbe\xd0\xdd\xba\xed\xca\xa3\xb9\x7b\xd4\xc5\x40\xa2\x9b\xb6\x7e\xb4\x64\x26\xed\x0c\x4c\x53\x16\xbd\xbc\xeb\x8d\x60\xd5\xb3\x9e\xb7\xa2\x58\x70\x49\x98\xc5\xc0\x0b\xf7\x05\xd6\x8f\x3b\x97\xe6\x1e\x4c\xaa\x3b\x6d\xe9\x3e\xc8\x1d\x11\x4b\x05\x01\x50\x4f\x7f\x6c\xfd\x9e\x72\x25\xfa\x15\x60\x9c\xa3\x1b\x06\x99\x6d\x93\x02\x00\xdf\x32\x73\x3e\x57\x18\xe9\x4e\x76\x44\x5e\x7e\xa6\x48\xd1\x96\x8f\x96\x09\x0a\x2c\xed\x44\x45\xb2\x16\x46\xc7\xa9\x0f\xcc\x94\xf8\x01\x0a\x0a\x77\xa6\x51\xc1\xeb\xa6\x55\x41\x6c\xd6\xc5\x6e\x63\x56\x3f\x89\xe2\xa2\xc6\x0c\xcf\xc9\xd8\x77\x64\x1c\xe4\x21\x45\xaa\x10\x91\x17\x6a\x0e\x88\x3c\xfa\x92\x60\xf2\x28\x1e\x2a\x8f\x32\xc0\xe5\x51\x2a\x64\x1e\xe5\x85\xcd\xa3\xee\x56\xda\xc9\xd1\xf5\x9e\x82\x95\xc3\x6b\xab\x81\x7f\xec\xf0\x3a\x4d\x30\xe6\xf4\x02\xd5\xb0\x6d\x99\x4a\xc4\x6b\xaa\x1c\x2c\x2f\xd0\x13\x80\x6b\x34\x24\x37\xb5\x82\x06\x40\x91\xf8\xff\x67\xef\x6f\xb8\xdb\xb8\xad\x7d\x71\xf8\xab\x60\x29\x77\x2d\x4b\x29\x49\xdb\x49\xfa\x72\x7c\xfb\xb4\x4b\x91\xe4\x56\x37\xb1\xad\x63\x29\xc9\xea\xd3\xf4\x9e\x80\x33\x20\x89\xa3\x19\x60\x02\x60\x24\xb3\xb7\xe7\xbb\xff\x17\xf6\x06\x30\x18\x92\x92\x2d\x0c\x24\x52\xae\xa6\x6b\x35\x16\x39\x1c\xec\x01\x36\x36\xf6\xeb\x6f\xc3\xf9\xc9\x3e\x34\x15\x2f\xb8\x89\x90\x9f\xcb\x14\x73\x2b\x02\xaf\x95\xd6\x04\xe7\xb5\xaf\x8e\x87\xae\x91\xde\xbe\x73\x29\xe9\x81\xf6\x02\x91\xd5\xd8\x87\x82\x31\xef\x69\x79\x92\x66\x4f\xd2\xec\x13\xaf\xcf\x4d\x9a\xb9\x2e\xce\x0f\x5f\x01\xf4\x1e\x07\x26\x4d\x57\xf1\xb3\xd6\x61\x36\xa0\xb8\x26\x44\xf3\x5d\xad\xcf\x21\xf4\xa0\x1f\x91\x77\xe2\x35\xf6\x06\x1d\x61\xf9\xcf\x84\x9c\x0a\xa2\x65\xed\xfa\x98\x7e\x30\x7a\x84\x1a\x2f\x25\xba\x9d\x6a\xe6\xf4\x5d\xa9\x99\x2f\x14\x76\xd5\xd6\x0d\x53\x28\xfa\x12\x4b\x85\xac\xb4\x42\xa2\xee\x19\x22\xec\x5a\xaa\xcb\x4a\xd2\x52\x3f\x6f\x24\xfe\xdf\x38\x40\xec\x3d\xff\xc2\xad\xfb\xb8\xb9\x3b\x84\x48\x6a\xba\x79\x54\x83\xf9\xd0\x45\x1a\xef\x57\xc6\xee\x65\xa0\xf6\x2a\x58\xfb\x31\x63\x40\x72\xc3\x24\x6a\x32\x57\xb2\x6d\x7c\x34\xb0\x43\x0b\xb6\xa6\xf8\x5d\xb3\x86\xa4\x9d\x8c\x28\x76\x8b\xe5\x06\x7d\x42\x82\x39\x0f\x9e\x07\xd6\xd9\x9d\x60\x51\x6a\x3d\xda\x88\xd9\xae\x5a\x91\x50\xea\x80\x75\xaf\x52\x75\xc0\x92\x8c\xec\x55\x6c\x4e\x8b\xe5\x5e\x9f\xaa\x0d\xf8\xa9\xce\x03\x6e\x8f\x5f\x7b\xac\x23\x75\xbe\x21\xed\x5d\x3d\xf8\xd0\xe5\x16\x8e\x6e\x4c\xfe\xc5\x3c\x32\xed\x5e\xdf\x97\x5a\x38\x56\x72\x25\xff\x77\x76\x4e\x24\x57\xe7\xfe\xf6\x0f\xbf\x1d\x7b\xd0\x03\x78\xcd\x87\xd8\x37\x3d\x88\xce\xed\x55\x69\xf4\xb8\x6d\xca\x48\xc9\x75\x03\x9c\x09\xae\xee\xae\xd4\x21\x90\x9b\xaf\xe4\x66\xf3\x90\x9e\x19\x12\x07\x1c\xb6\x1a\x5c\xcc\x1f\xbc\x6a\xe6\xbc\x3f\xb4\xdb\x77\xb2\xa1\xbf\xb6\x5d\x1f\x5a\x77\x58\xa1\xb2\x1d\x2d\xa0\x9b\x44\x68\xcc\x1a\x61\xc3\x26\x1e\xae\x96\x35\xd6\xa9\x01\xbd\xba\x93\x20\x61\xe9\xb4\xa1\x4b\x2f\x51\xfb\x2f\x51\x42\xf5\x0b\xf3\x9d\xb7\xee\x48\x45\x87\x68\x1b\x44\xa0\xd5\x42\xeb\x06\x0e\x59\xff\x6d\x72\x6a\xeb\xea\x7c\xaf\x06\x32\xa8\xc1\x7a\x12\xc8\x83\x70\xb0\x14\xd8\x7d\x05\xd2\x44\x6a\x79\x05\x98\xa0\x56\xa7\x98\x19\xa6\xae\xa9\x2a\xef\x78\xe6\x6f\xb5\xaa\xa6\xff\xfa\xc0\x6d\x1d\x16\x08\x1c\x9c\x67\x88\x81\x3a\x6f\xa9\x2a\xa1\x8c\xaa\xe3\x89\xa7\x44\xda\x4d\xd7\xd6\x13\x69\x5d\xb1\x74\x24\x00\xee\x1e\x4a\xf6\xd7\x09\xb5\x7a\x50\xff\x49\x18\x2b\x81\xb2\xb6\x95\x74\x2c\x28\x8c\x7e\x4a\x97\xb9\x93\x8b\x78\x05\x1f\xec\x41\xcf\x9a\xfe\xd0\x64\x21\xab\x12\x94\xd5\x71\xc5\xae\x58\x15\x48\xb3\x02\x57\xf1\x69\x6b\x1c\xce\x52\x21\xeb\xda\x95\xbc\xbb\xe6\xf3\x58\x1e\x7f\x67\x63\x07\x61\x01\x69\xf5\xaa\x07\xb1\x00\xa7\xcb\xc4\x92\xc7\x80\x33\xe2\xb7\x04\x13\xd2\x2b\x05\xee\x18\x94\x33\xc2\x2c\x9b\x26\xb0\xdf\x16\x32\x26\x56\x40\x17\xb7\xe1\x5c\x5c\x21\xc1\xc7\xbb\x0e\xdd\xc7\x44\x22\x5a\xa3\x5d\x8b\x56\xb3\xb5\xd6\x52\x1d\x9c\x56\x62\xfe\xfd\x5b\x09\xb5\xe9\xd0\x28\x3c\x04\x3c\x8b\xd0\x0c\xc1\x1e\xbb\x50\xb8\x0b\xb1\x56\xa9\x27\xc2\xa5\x10\x27\xc3\xaa\x0d\x72\x9e\x0d\x89\xac\xa3\x13\xe8\xce\x3f\x1c\x16\x55\xaf\x64\x41\x2b\x40\x20\x4e\x65\x31\x92\x2d\xa8\xba\x4a\x4b\x84\x9d\x40\xed\x6b\xc2\x67\x95\xa4\xa5\x47\x56\x67\xbe\x89\x02\x35\x2b\xf6\x77\x6a\x2c\x12\xb1\x4b\x70\x24\x5f\xf2\xd1\x28\x16\x41\x58\xf5\x06\x96\xd0\xb7\x24\x75\xb0\x37\xfd\x34\x02\xf7\x66\x31\xb4\xa0\x23\x65\xd0\x00\x1e\x77\x6c\x06\xe2\x38\x74\xc1\xb4\xb2\x92\x6b\xb2\xf7\xbd\x9f\xf4\xbd\x21\xbd\xb1\x93\x1d\x97\x26\xb1\x96\x38\x17\xcf\xe1\x3c\x04\x3e\x43\xff\xc5\x25\xb7\x33\x35\xeb\x84\x9c\x67\x89\x00\x45\xd7\x34\x15\x4f\xe7\xb2\x1f\x69\xc5\xcb\x20\x39\xa9\x1a\xd0\x1c\x36\x2c\x1f\x19\x47\x9b\xa4\x51\x6c\xbc\xbe\x51\xd2\x53\x0e\x9c\xc7\xc7\x3b\x2c\xc7\x1f\xed\xaa\x33\x90\x71\x09\xf9\x41\xc0\x9e\x13\xac\xb4\xda\x96\xec\x96\x82\x89\x99\x54\xe8\x8c\x79\x70\x86\x75\xb8\xda\xdb\x38\x86\x0f\x03\x7e\x4b\x0c\xfa\x8c\x2e\x48\x97\x67\x08\x3c\x89\x1e\xcc\xbe\xdb\xbc\x4b\x67\xbd\xfb\xb8\xd0\x42\xc0\x35\x44\xb3\x33\xe7\xe2\xfd\xc0\x00\xdf\xb9\x8e\x2e\xc6\x57\x20\x20\x8a\xe0\xb5\x1d\x74\xc1\x1b\x14\x62\xd4\xb8\x9f\xa7\x08\x07\x28\x2d\xb1\x0f\x0c\x3d\x2b\x1b\x59\xbe\x4a\xc9\x47\x7c\x89\x95\x29\xf2\x1a\xb0\x2a\xff\x72\x7a\x1c\xf6\xb2\x7d\xea\xeb\xf3\x14\xb4\x6f\x7b\x7d\x85\xcf\xd5\xcc\xcc\x79\x49\xa6\xae\xa9\x28\x33\x64\x5f\xb0\x6b\x62\xf7\x80\x76\x95\x3f\x01\xf3\xc3\xcd\xa6\x1f\x3f\xbc\x9e\x23\xe2\x20\x81\x8a\xaf\x5d\xdd\x0d\x53\x1e\x62\x6a\xca\x5d\x8b\xf4\x77\xef\x9f\x79\xa0\xce\xeb\xb1\xba\x1e\x8f\xc7\xe3\x94\xf9\xf3\x3e\xe1\x51\x6f\xe5\x83\x97\xa5\x96\x25\x9f\x2d\x57\xd6\xdf\x9e\x37\x1d\x49\xa0\x7b\x53\xb1\x74\xef\xff\x88\x74\xc1\xd4\xc8\x5e\x84\x5e\xf5\xbb\x6f\xd2\x44\x4d\x0c\xe1\xbf\x0d\xb1\xb3\x81\x8c\x00\x14\x31\x65\x0b\x7a\xc5\xad\x09\x30\xc3\xfd\x6f\x77\xd6\x4d\xab\xef\x35\x9a\x64\x59\xe0\x40\x23\x10\x50\x8a\x7d\x68\xa4\x86\x1d\x05\x69\x89\x67\x12\x0a\xcf\xfa\x88\xb1\xe8\x67\x6b\x1a\x68\xb5\x98\x30\x60\x4f\xe8\xb9\x18\x0f\xd6\x3f\xf8\x59\x21\x53\x6a\x89\x08\xaf\xbc\xbf\xc2\xf0\x49\xfd\x11\x4f\xdd\xae\x02\x97\x89\x90\x84\xcd\x66\xac\x80\x46\x46\xac\x59\xb0\x9a\x29\x5a\xf5\x49\xd3\x6d\xb1\x20\x54\xbf\xb2\x16\xb8\xb2\x1b\x14\x95\xd5\x9a\xde\xb9\xcb\x00\x71\x40\x1d\x60\x53\x97\x3c\x29\xc5\x13\x55\x9b\x08\xe8\x7a\xef\x9d\x78\x2f\xa5\x79\xc3\x35\x68\xba\xae\x02\x05\xe3\x9d\x7b\x93\x0d\x3e\x7e\xff\x5d\xc8\x6a\x7d\x3c\x82\x22\x49\xa9\xe8\x30\xde\xb7\xb1\xc1\xed\xb1\x61\x4f\xc3\x10\x81\x74\x29\xcc\x8d\xe4\xc2\xac\x35\x23\xb2\x7a\x5d\x91\x80\xb4\x65\xaf\x1f\x34\xd3\x21\x4e\xe7\xf5\xc4\x34\x30\x4c\xbc\xde\xd0\x65\x28\x3f\x75\xc8\xca\x2b\x4e\x2a\x8c\xa3\xba\xef\xa6\xd2\x2c\xd6\xbc\x58\x69\x9d\xac\xcf\x64\xb9\xf2\xa0\x51\x07\x9a\xd8\x07\xf9\x5a\x1d\xd0\x40\x7a\xb6\x35\x29\x59\xc9\xc4\x9d\xfb\x9f\x90\x00\xce\x41\xcd\xb0\x5c\xec\x7f\xa3\xb3\x14\x76\xd8\x5b\x09\x72\x68\x1b\x7b\xec\x34\x82\x80\x84\xf9\x8e\x77\x14\x78\x19\xec\xd6\xa3\x00\x98\x22\xc5\x58\x49\x09\x11\xee\xa4\x65\x3d\x9d\xb9\x9e\xff\x6b\x6a\xda\x95\x95\xcc\xbe\xb1\x3a\x34\x22\x25\xb4\x0b\x9c\x1b\x49\x98\xd0\xad\x72\x3c\x71\x67\x20\x54\x7b\x95\x92\x61\xc8\xcf\xbd\xce\x0f\xa7\xc7\xe4\x05\xd9\x87\x56\xc1\x20\xf6\x67\x94\x57\x01\xe3\x69\xb5\x35\x2a\x34\xb8\xb7\x8f\x48\x7c\xed\x90\xb2\x30\xa3\x95\x66\x23\x7b\x76\xc2\xd1\xe8\xde\xdb\xea\x20\x5e\xe5\x6e\x98\x02\x7c\xca\xb4\xa4\xe5\xcf\x41\xec\xa4\x6e\xdf\xa9\x94\x15\xbb\x73\x12\x47\xe8\x91\xb2\xad\x13\xee\x87\x07\x39\xe1\xe2\xb8\x84\xdd\xbf\xfd\x25\xc1\x2d\x57\x33\x43\x4b\x6a\xa8\x3b\xf9\xfc\x0d\xff\xb6\x8c\xf8\x74\xfe\x7d\xda\x35\xe4\xfc\x73\x7d\xb5\xb6\x6d\x4b\x6e\x20\x23\xd8\x92\x0b\xe7\x52\x8a\x5b\xd8\x9f\x9f\xc0\xfd\xd8\x67\x15\xb2\x0d\xd0\xeb\xea\x3d\x5c\x68\x05\xe9\xa8\xb8\x36\x11\x2f\x0c\x8c\xae\x05\xd5\x7d\x73\x4b\xc8\xd2\x9f\xd8\xa5\x8c\xcb\xdf\x03\x61\x96\x0f\x65\x20\x23\x9c\x7e\x2b\xb7\xe5\xb1\xa2\xa0\x7f\x15\x86\x40\x9d\x09\xf5\xde\xee\x2c\xcd\xaf\xd8\x5e\x52\x81\x6e\xf4\x7b\x52\x33\x2a\x34\x51\x0c\x66\x1a\xac\xf8\x19\xcc\x30\xba\xaf\x24\xa2\xe2\x9e\xc9\x32\xbc\xeb\x6a\x94\xcf\xab\x11\x29\xef\x8a\xf0\x5a\x98\x4a\xab\x2b\x79\x0d\xfb\xbb\xa2\x6a\xee\x9d\x05\x7a\x44\xa6\xad\x41\xbf\xa3\x26\x35\xff\x00\x0d\x00\x42\x77\x32\x98\x8d\x56\x44\x1f\x9c\xc9\x52\x87\xe2\xfe\x00\xf4\xe3\x8c\x66\x19\x63\xff\x80\x53\x3c\x65\xf2\x7a\xcb\x01\xf5\x15\xe0\x18\x25\xac\xe2\x73\xe8\x61\x1d\xcf\x16\x78\xdf\x7e\x19\x4b\x9f\x58\xfc\x0b\x71\x15\x19\xf0\xfb\xe4\x39\x0b\x88\x02\x6e\x75\xb4\x0f\x84\x51\x07\xae\x19\xbf\xb6\x0b\xcf\x86\x8f\x7b\x9b\x2b\x71\xcb\xb8\x04\xaf\x46\x6a\xec\xdb\x6d\x35\xbb\x8d\x83\x23\xc0\xc2\xc7\x96\x2c\x85\x8a\x13\x3f\xdf\x7e\xae\x29\x24\x72\x8e\x8d\x62\x8c\xbc\xe6\x53\xc5\xac\xb8\x11\xac\x82\x21\xf9\xf9\xd1\xf9\x69\xc7\x55\xf6\x23\x3b\x77\xd1\x87\x09\x24\x5c\x43\x4a\xb8\x7d\x46\xa9\xf8\x15\x53\xc4\x9e\x21\x2d\x54\x7f\xfb\x49\xf6\x12\x61\xba\x0c\xcd\x01\x5c\x3f\x47\xf8\x1e\x98\x09\xf3\xf4\x9d\x8f\x98\xa7\x94\x11\x1c\x9d\x9f\x1e\x23\x05\x5c\x68\x43\xad\x96\x47\xde\x01\x0c\x65\x3c\x39\x14\xbc\x2b\x44\xb1\x31\x2c\x7d\xc5\x4a\xa2\xbc\x24\xa8\xee\xdc\xed\x82\xac\x6d\x06\xd4\x01\x22\x4c\x57\xf0\xc3\xc1\x51\xea\xa6\x03\x6e\xef\x21\x0c\x44\x3d\x18\x92\xb6\xe3\xaa\x13\x09\x56\xf6\x53\x46\x1b\xad\x10\x3f\xc0\xe5\x74\x77\x1a\x4a\xae\x6f\x23\x02\xe4\xe0\x7b\x46\xcb\x9f\x14\x37\xec\x9d\x28\x58\x24\x53\x12\x3d\x7b\xb1\xd0\xf7\xf5\x15\x32\x66\x91\xa1\x58\x0f\x14\x8e\x4f\x84\x91\x89\x64\x12\x38\x33\xfb\xe7\x39\xc4\x12\x1c\x4c\xaa\xc3\x46\x58\x51\x15\xa5\xda\xa4\x40\xba\xa3\x29\xc6\x8b\x48\x09\xa7\xf5\x44\x66\x4f\x32\x3a\x99\xe5\xf2\x09\x7a\x5f\x6d\xd0\x60\xe2\xde\x51\xda\xb5\xdb\xc6\xc4\xd0\x39\x33\x44\x9b\xb6\xb8\xb4\x6f\x11\x20\x49\x8f\x3c\x46\x16\xa4\xb9\x3e\x22\xc5\x35\xc9\xb7\xd9\xef\xe8\xba\x2d\xeb\xcf\x33\x5e\xe1\x6d\x10\x19\xc5\xf0\xd7\xe3\xa5\xe9\xfe\x87\x7e\xa2\xfa\x9a\x76\xe4\x11\xf3\x10\x42\x9b\x50\xa2\xa8\x28\x65\xbd\x46\x9f\xdd\x99\x8c\x16\x8b\x04\x3a\x3a\x93\xe8\xae\xf6\x61\x4a\x48\xe6\x06\x8b\x72\x80\x7d\x98\x12\x24\x5e\xb1\x28\x1f\xb7\x7d\x98\x98\x77\x36\x30\x09\x8c\x5d\xb1\x2a\x43\x16\x0e\x40\x59\xd9\x49\x08\xa2\x1e\x3e\x40\x81\xbf\x9a\xa4\xd0\xdb\x22\x5b\xc9\x3d\x52\x32\x4b\xbe\xdb\x7b\x89\x69\x91\x34\xbc\xb6\x7d\xf0\xce\xbe\x75\xa6\x8c\xab\x0b\x97\x40\xd6\xbd\x35\xa4\x52\xed\xea\x5b\xb7\x49\xde\x47\xb2\xfa\xd6\x3f\x68\xec\x18\xd6\xbd\x35\x38\xfa\x76\xf1\xad\xfb\xbd\xce\xb7\x75\xf6\x3a\x2a\x9e\xd2\x84\x7b\xd7\x53\x9a\xf0\x7d\xa7\x09\x47\x60\x7e\x14\xfc\x58\xbd\xc4\xdd\xc7\x9a\x2c\x0c\x00\xf4\x76\x16\x19\x42\xf3\x36\xd4\x2c\x46\xe0\xb8\x33\xfc\xca\x43\xfe\x92\x4b\x0c\xfb\x3d\xeb\xb5\xde\xf5\x1b\xb1\xcb\xa3\x46\xa8\xbf\x4c\xb9\xc5\x9b\xf2\x89\xf1\x9e\xb7\xef\x2e\x62\xa0\x3f\xea\xbb\xbe\x25\xf7\xec\xd9\x95\x13\xf0\x7e\x72\x8e\x57\xd7\xe9\xfe\x52\x8e\x13\x9f\xb4\x39\xe3\xf8\x21\xf6\xdb\xa7\x65\x21\xaf\xe6\x20\x67\x1a\x7c\x35\x21\x79\xfd\xe9\x83\x56\x68\xc8\x41\x1f\x25\x04\x43\x1e\xd1\x56\x0c\xed\xc3\x50\x70\x0c\x39\xc9\xbd\x68\x0d\x34\x84\xe4\x0a\xba\x3f\x42\x74\x15\x22\xb1\x5c\x60\x29\x56\x0c\x15\x94\x62\x86\x7a\xc0\x9a\x35\x95\x0b\x3b\x6d\xd6\x54\x2d\x21\xc5\x09\x32\x10\x5c\xe6\xde\x7e\x5c\x09\x7d\x00\x76\x70\x8a\x20\x59\x30\x72\xbe\x36\xfb\xbe\x63\xb1\x73\xf7\xc5\xde\xc6\x34\x98\xd6\xf5\x05\xf6\x43\x38\x18\x58\xc3\x54\xed\x7a\x77\x31\xe3\x7a\xb5\x6a\xe6\x7c\xe1\x61\x7e\xd2\x12\xb0\x25\xba\x93\x19\x2d\x7d\xfe\x2e\xe6\x9c\xd7\xac\x9e\x62\xda\xa3\x5e\xef\xb4\x1e\x92\x3a\x6a\x3a\x4f\x92\xf1\xab\xfe\x14\x21\x23\x5c\xa2\xc0\x61\x8a\xd9\x4f\x71\x62\x65\x3b\x5f\xac\x93\x96\x92\xc5\x72\xeb\xcb\x40\xa4\x4a\x9b\x1e\xe8\x05\xe2\xf0\x42\xdc\x2c\x15\x89\xf7\xf6\x25\x7e\x44\x0a\xf1\x03\xa3\xf0\x0e\x85\x5e\x1a\x12\x56\xcf\xd8\x04\x90\xdc\xc2\x02\xdb\x10\xe6\xc7\x51\x58\x7e\xbd\xde\x44\xfb\xac\x19\x94\xe9\x6b\xb9\x33\x2e\xd2\x54\xd0\xaa\x80\xde\xd6\x49\xfc\xbb\x21\x04\xce\xd4\x9c\xb9\xe0\xf7\xb9\x51\xbc\x30\x9b\xf3\x87\xdd\x7d\x03\x62\x39\xfb\x87\x55\xb3\xa0\x07\xe4\x07\xed\x23\xc8\xb8\x7d\x42\xc4\xf5\x93\x04\x3f\xc4\x79\xd0\xd7\xec\x0e\x80\xc4\xa8\xcd\x66\x35\x07\x2c\x8e\x00\x71\xd7\xe5\xa6\x83\xf7\x93\x07\x20\xf9\x47\x24\x3b\xd2\xb4\x9f\xa5\x2e\x4c\xb5\x15\x95\xe7\x1c\x87\x86\x52\x78\x42\x83\xfe\x13\x3a\x0a\x95\x9e\xb8\x2e\x9e\x17\x9a\x3e\x40\xf0\x09\x12\x03\x5a\x11\xda\x2a\xa4\x1c\x1c\x6e\x84\xfd\x9b\x52\x32\x0e\x48\xcd\xe7\x0b\x13\x72\x2f\x2b\xda\x8a\x62\xf1\x88\xb8\x62\x9b\xb8\xee\xb8\xc2\x21\x4b\x89\x92\x4b\x2b\xed\x2b\xd2\x50\x45\x6b\xab\x76\xb9\xfd\xad\x59\x52\xe4\xe2\x51\xa2\xb8\xdb\x9f\x82\x58\x4e\xf8\xed\xce\x20\xc0\xbf\x0d\xcd\xc5\x1c\x49\x4b\xc8\x5e\x49\x5a\x46\x92\x03\xd5\x1c\x66\x34\xcb\xab\xfd\x08\x41\xb6\x5d\x79\xb7\xac\x2a\x92\x93\x24\x5b\x0e\x27\xff\x84\x54\x78\x9d\xa3\x08\x88\x26\xf7\x1f\x52\xf6\xfe\x1b\x07\x84\x49\xfb\xf9\x92\x2b\x91\xd8\x18\x99\x2f\x91\x80\x8f\xa4\x0e\x6f\x37\x23\x3d\xfd\x44\xaa\xd2\xf2\x32\xb7\x18\xa1\x9d\xd7\x9a\x1e\x29\x06\xcd\x4e\x69\x75\xde\xb0\x62\x9b\x0e\xcc\xbf\xbc\x39\x3f\xec\x53\x03\xe7\xbc\x6b\x4b\xc1\xe0\x7b\x42\x4b\x5f\xfa\x79\xcd\xa6\x0b\x29\x2f\x13\x07\xdb\x8f\x10\x19\x17\xed\x74\x52\xc8\x3a\x42\x39\x1d\x6b\x3e\xd7\xcf\x9d\x60\x18\xdb\x69\x3a\x20\x5c\x54\x70\x5c\x7b\x7d\x88\x09\xe3\x4d\x96\x01\x2f\x4c\x8a\xf0\xc6\xc0\x50\x0e\x7a\xd3\xe9\x5d\xeb\x53\xf2\x76\x10\xca\xd5\xe0\x23\x65\x9d\x63\x52\xbb\x7d\xae\x70\xcd\x0d\x6f\xba\xd2\xb5\x33\xb0\xc1\xea\xac\x61\x00\x70\x2b\x53\xe2\x62\x46\xd6\x44\xdd\xe6\xee\xf9\x6b\x47\x46\xec\xbb\xe3\xb3\x58\x9e\x47\x7e\xe5\x50\x1c\xf6\xcc\xfe\x92\xb8\x9f\x3e\x1b\xde\x8a\xe5\xb0\xaa\x50\x4f\x38\x93\xe5\x33\x1d\x07\x63\x3b\xd0\xb6\x90\xfb\x86\x89\xf1\xfc\x8a\xf5\xe8\x4f\x55\x04\xed\xb5\xcf\x43\x0a\x71\xd4\xff\xdf\x41\xc5\xd5\xfc\x83\xa5\x2d\x1e\x2b\xa2\x0f\xfb\x5e\x8a\xf1\xe6\xaf\x93\xea\xae\x09\x14\xea\x05\x2f\xe3\xc8\xae\x47\xfc\x78\xcb\xdf\xaa\x65\xd8\x6b\xdd\x7e\xf1\x96\x99\x6b\xa9\x2e\x71\xae\xe2\x3c\x2b\x23\xe1\xce\x21\x2c\x9e\x56\x66\x45\xe2\x52\xab\x4c\xbb\x3d\x99\xcb\xa1\xec\xca\xd1\x61\xcf\x7f\xaf\x35\xdd\x7f\x19\x16\x59\x29\xc5\xb2\x0f\x7e\x80\x72\x2c\xb2\xb9\x24\x6b\x5d\x45\x9a\xdc\x4f\x51\x16\xd9\x76\x85\x20\x19\x80\xa1\xcb\xd4\x15\x2f\xd8\x61\x51\x40\x2a\xfc\x9d\x86\x1e\xc6\xae\xc7\xcc\xbe\x32\x35\xac\x3c\xef\xd1\x80\x49\x3e\x65\xf8\x96\xd0\x8a\x53\x68\xc0\x49\xfa\x37\x5a\xfe\xbe\x3b\xf0\xbb\x7f\x2c\x64\x14\xad\xbc\xbe\xdb\x31\x10\x73\x79\x18\x04\xe3\xb5\xe1\x1f\x16\x58\x72\xfd\xe5\xd7\x75\x89\x95\xd5\xf1\xe5\x2c\x2b\xb8\xe9\x77\x1c\xfa\xd3\xf0\xf3\x0d\xd5\x97\x5d\xbb\x0e\x36\x6e\x64\xd9\x75\xe7\x88\x3e\x77\xd3\x38\xa6\x48\xe3\xdd\xda\x76\x24\x2f\x9d\xb1\x67\x91\x9d\xa9\x43\xfd\xfa\x3f\x8f\xdf\x3e\x30\x1c\xb8\x3f\x12\xed\xec\x3f\xd3\xa0\x61\xc1\xaa\x79\xdb\x33\x4a\x40\xa1\x3a\xba\xd1\x92\x3a\x22\x8a\xba\x68\x25\xc5\x03\xa1\x62\x14\xdd\xa7\x64\x3f\x02\x77\xbf\xf3\x71\x7e\x2a\x48\x97\x50\x8d\x2a\xc1\x08\x79\x04\x0b\xdd\x7c\x0d\x0e\x20\x3f\xfd\xe7\xf1\x5b\x1f\xea\x0b\xd4\xa3\x21\xe9\x38\xcf\xb9\xfc\xf6\x7d\x32\x43\xff\x0e\x6d\x54\x5b\x18\xd2\x1a\x6d\x3f\x4f\x21\xd5\x1f\x8c\x9f\x40\xac\x62\x73\xae\x8d\x5a\x3a\x79\x2e\x67\x11\xc9\xce\xb9\x1c\x6e\xb9\x64\x4b\xf2\xd7\xef\x4e\xfe\xf6\x5f\xdf\xbf\x3b\x3a\xfc\xfe\xbf\xde\x1c\x1e\xfd\xf5\xf4\xed\xc9\xcf\x3f\x9f\xff\xed\xfc\xe2\xe4\xcd\xcf\x3f\x1f\xb5\x4a\x31\x61\x8e\xb0\xf1\xee\x39\x33\x3f\xff\xec\xf6\x98\xfe\xf9\xe7\x8b\xa2\xe1\xcd\xcf\x3f\x9f\x79\x37\x27\x9c\xa3\x76\xaa\x12\x60\xc1\x01\x7a\xac\xab\x8e\x04\xfd\x0e\x97\x1f\xde\xb2\x57\x77\x39\xa0\x83\x06\x54\xfd\xa7\x88\xcb\xbb\xeb\x5a\x50\xe4\xe6\xf4\xc2\xb7\xde\xd9\xff\xa0\x22\x13\xaa\xec\x28\xd1\x5c\xcc\x01\xed\x0f\x55\xd4\x10\x78\x20\x53\x66\xae\x19\xc3\xba\xcd\x55\xd5\x2a\x1d\x0f\xee\x27\xab\xfa\x1a\xd7\xe2\xd8\x2a\x30\xbd\xd6\x2c\x2e\x4d\xc9\x15\x02\x5e\x71\x76\x0d\x6a\xba\xe6\x73\x41\xab\x28\x34\x08\x9d\x0a\x31\x03\xac\xfb\xfd\x1d\x29\xe1\x51\x11\x27\x36\x77\x76\x61\xb2\x7e\x96\xc9\x5a\x86\x49\xaf\x33\x06\xd5\x96\x36\x56\x92\xb3\xd3\x63\xf2\xf2\xae\x93\x01\xb6\x81\xcb\x2a\x39\xdf\xc4\x10\xc1\x11\x65\x55\xbc\xb4\xee\xf0\x6b\x90\xc7\x0f\xcd\xe8\xed\xb4\x94\x35\xe5\x62\xbb\x4d\x26\x66\x6d\x55\x2d\xc9\xaf\x2d\xad\x50\x7b\x3d\x93\xe5\xfa\x49\xb3\xf7\x47\xff\xd1\x9f\x26\x7f\x0c\x84\xff\x69\xf2\x47\x2b\x7d\xc2\xce\xf8\xd3\x44\x5f\x15\x93\x3f\x16\x55\xab\x0d\x53\xc4\xdd\x74\x67\xe8\xd3\x8f\x74\xa6\x08\x72\x8e\xba\x11\x80\x52\x0a\x76\xee\x83\x68\x74\xe8\x54\x80\xfc\xce\xbf\x28\x5a\xb0\x33\xa6\x38\x98\x06\x52\x94\x0f\xda\xa1\xc2\x73\x30\x29\x5d\xa3\x33\xe8\xae\x8d\x74\x84\x39\x13\x8c\x95\x68\xa9\x39\xb2\x19\x99\x5b\xaa\x61\xdd\x27\x60\x54\x4d\xad\x36\x50\x28\x46\x11\xf5\x8d\x94\xac\x62\xd0\xc8\x2e\xa9\xf3\x28\x86\x48\x7c\xca\xae\x90\x62\x2c\xd8\x1c\x53\x68\x5d\x2a\x09\xe2\x29\xe2\x31\xfb\x4f\xa6\x64\x94\xae\xa9\x8d\x6c\x08\xaf\x6b\x56\x72\x6a\x58\xb5\x24\x57\x9c\xde\x71\x7c\x50\x2b\xa0\x0f\x06\x0a\xc7\x7d\x21\x89\x84\x18\x70\x2b\xb8\x0b\xd7\x2c\x5a\x43\x4a\x79\x2d\xee\xae\x52\xb8\xae\xac\xa1\x10\x57\xf0\x6a\xd4\x6b\x96\x03\x93\x4b\x1a\xe0\x89\x5e\x94\x20\xcd\xea\x40\x5b\xbf\xf7\x50\xa7\xc0\x6f\x5a\x74\xe8\x7c\xe1\xc1\x8d\xdd\x91\xa0\x5a\x01\xb0\x9c\x5d\x6f\x2f\xc8\xf8\xd0\x4c\xdc\xd5\xcf\x4e\x63\xd6\xf7\xd3\xeb\x0f\x07\xac\xc1\xc3\x43\x8c\xad\x24\xab\xcc\xa4\x2a\xf8\xb4\x5a\x92\x05\xad\x0c\x73\x88\x99\x34\x5e\xa5\xbb\x4e\xca\x39\x33\xf1\x42\x54\x52\xcc\x63\x5d\x97\x7d\x68\x58\x61\xa0\x77\x13\xa3\xa2\x6d\x90\x3a\xab\xc6\x2d\x65\x9b\xec\xff\x88\xfd\x1e\x5f\xbf\xf0\x93\x9e\x22\x73\x52\x72\xaa\x52\xb3\xa9\x8c\xac\x18\x72\xca\x10\xe1\xb4\xb1\x3b\xd1\x33\x1d\x3f\xfd\xb1\x34\x5b\x49\xf0\xba\x5d\xb8\x8d\x03\x2c\x77\x11\x5e\x19\xfc\x18\xc6\x50\xe8\x91\x64\x45\x2c\x7e\x03\xcd\x19\x96\xc4\x6a\x45\x06\x23\x68\xae\xa9\xd8\xdd\x83\x62\x76\x63\x29\xde\x54\x8c\xfc\xf1\x92\x2d\x47\xc0\xed\x23\x54\xe7\xff\x44\xda\x90\x41\x05\xcf\x87\x1c\xc9\xc6\x12\x20\x15\xf9\xa3\xff\xd7\x9f\x1e\xb0\x37\xcc\x90\x30\x1c\xbe\xd4\xb6\xda\xb5\x9c\x20\x32\x0d\x8f\xc0\xe4\x98\x5b\x40\x07\x5a\x63\x24\xce\xf2\x84\x9c\x40\xd7\x34\x34\x20\x11\x60\xde\x5a\x02\xf1\xcd\x89\x9e\xd5\x9f\x7c\x38\xd5\xed\x32\xef\xb8\x8f\xf2\xf4\xde\x4a\xd7\x27\x88\x8d\xc8\x19\x74\xd5\xeb\x3e\x01\x51\xfc\x56\x9e\x7c\x60\x45\x9b\x56\xfd\x3e\x28\x04\x74\xc9\x12\xb2\x29\xf3\xac\xde\x77\x6c\xe9\x4f\x45\x5c\x06\x6b\x9f\x07\x38\xc0\x4e\x44\x45\xf5\x83\xb7\x2f\xe3\x25\xbb\x7b\xbf\x48\xbc\x4e\xbd\x5f\x03\x28\x72\xed\xb9\xc2\xae\xf4\x5a\xd1\xc9\x07\xae\x8d\xfe\xdf\x28\x4f\x0a\x59\x4f\xfd\xa1\x8a\xe4\x78\x5e\x43\x24\x26\xb7\xfa\x0e\x4f\x25\x95\xb4\x41\x6b\xeb\x5f\x60\x5b\x0b\xfc\xce\x4f\xa0\x62\x8d\x62\x1a\x62\xce\xd4\x4e\xc5\x33\xed\x0a\xb4\xa4\x00\x5c\x64\x17\x91\xc0\x2e\xc4\x49\x43\xf9\x5a\x1e\x1c\x10\x77\x1d\x2e\x17\x2c\xc1\x89\xb5\x94\x26\x3d\x55\x00\x3f\x4a\x13\x3b\xf8\x60\xcb\x29\xbf\xb6\xfc\x8a\x56\x0c\xdd\xaf\xd7\xbc\x2a\x0b\xaa\x30\xad\x11\x85\x3e\xd1\xd2\xd5\xc0\x62\x1b\xb4\xa4\x00\x56\xd0\x06\x58\xc7\xec\xda\xa5\x33\x51\x65\x78\xd1\x56\x54\x11\x2b\x01\xe7\x52\x25\xe1\xd5\x0c\x62\xb3\x6e\xa7\x26\x59\x53\x78\xe5\xe0\xb7\x8b\x55\x42\x62\xc6\x33\x8b\xa0\x8a\xcb\x19\x6a\x96\x2b\x62\x66\x1f\xab\xce\xdc\x6e\x4f\xa2\x40\xce\xfc\xc1\x13\x24\x7a\x8c\x86\x12\xa5\xe4\x70\x4d\xf8\x5c\x48\xc5\xca\x83\x48\x01\x09\xb2\x70\x42\xbe\x0d\xcd\x1b\x53\xfa\x7e\x5b\x8d\xcb\x47\x92\x01\x56\xc6\xbd\x9b\x13\x54\x8e\x9b\x3a\xd1\x3b\x93\x8a\x5d\x31\x45\xf6\x1d\xae\x1b\xbb\xe2\x85\x39\x98\x90\xff\xbf\x35\xf4\x52\x83\x6f\xc1\x82\x74\xc2\x30\xb4\x17\x70\xe0\xff\x54\x93\x17\x64\x1f\x86\x8a\xad\xc7\x03\x9f\x40\xa2\x97\xda\xb0\x3a\x9d\x9f\xb7\x55\x03\x91\x9c\xb8\x98\x63\x13\xfc\xe8\x6d\xdc\x6e\x71\xd1\xda\x5a\xe1\xf6\xd0\x31\x57\x0e\x3a\x32\xc3\x21\xc9\xb5\x93\x8b\xbd\xf0\x6a\xc8\xd8\xf0\x67\x6a\xd8\x0b\xff\x0d\x39\x02\x44\xb1\x39\x48\x2f\x94\x3d\x5b\x6e\x7e\x97\x98\x87\x69\x64\x23\x2b\x39\x5f\x9e\x37\x8a\xd1\xf2\x48\x0a\x6d\x14\xc8\xe8\x87\x74\x2b\x5d\xdc\x44\x84\x7b\xee\xd4\xd5\xae\x50\x57\x11\x26\x67\x88\xcb\x24\xdb\xf9\x02\x5b\x81\xc2\x0f\x09\x2d\x94\xd4\x3a\xbc\xd3\x5d\x4d\x36\xf0\xed\xe9\x89\xef\x0b\xea\xfd\xcb\xa1\xcf\x28\x8c\x09\xde\xf6\x6b\xba\x74\x52\x89\x4e\x79\xd9\x43\x50\xf4\xa4\xdf\x95\x1d\x0e\xed\xe9\x78\xe3\x3c\x58\x9d\xe0\xf0\xed\xf1\x5d\x53\x19\xb6\x67\xf2\xde\xb4\xa4\xc1\xda\x70\x20\xa1\x61\xed\x82\x41\x09\xb3\x8c\x10\x83\x76\x4a\xe7\xfc\x8a\x89\x30\x33\x8f\xa4\xed\x68\x4d\x3f\x9c\x5f\xb2\xeb\x84\x5f\xfa\x17\xfd\x8e\xdd\xbd\x48\x62\x0c\xde\xb0\x1f\x84\xa6\x86\xeb\x19\xa7\xd3\xea\x21\x7b\x9f\x02\x68\xca\x39\xab\x58\xb1\x45\xb5\xfd\xfb\x98\x88\x00\xbd\x67\x24\x99\x71\xb1\xc2\x63\x69\x47\x47\x87\x32\xe7\x3b\xbd\x71\x1d\x20\xf0\xdc\xb0\x50\x2d\x27\x5b\xe1\xfa\xe8\x86\xa4\x40\xcc\x82\x68\xeb\x29\x53\x5e\x84\xa5\xa9\x47\x0e\x54\x92\x14\x52\x29\xa6\x1b\x89\xd5\xaa\x9e\x75\x9c\x20\x4b\x3f\x8f\x92\x4b\x58\x86\xd6\x83\xc0\x94\x9e\x7c\xb0\x7a\xaf\x4e\x2b\x09\xc0\xab\xc7\x49\xab\x0f\xc5\x54\x20\x5f\xdd\xb5\xb2\x74\x6e\xd3\x43\x6f\x78\x0c\x1a\xc4\x9f\xa4\x8a\xe1\xee\x1a\x52\x03\x85\x57\x72\x25\x14\x5e\x79\xb2\x01\x09\x22\x04\xdc\x38\x77\x38\xc7\xe1\x9b\x18\xbe\xcd\x39\xd0\xf5\x08\xcd\x69\x07\xdb\x2a\x3a\x65\xcc\xde\x3c\x80\x2c\x30\xce\x9d\x39\x72\xc9\x96\xf0\x78\x1c\x31\xbd\x7b\xdd\xc0\x6d\xe1\x09\x1b\x52\xdf\x85\xd7\xd8\xbe\xd2\xa0\xdf\xfb\x69\x4e\x7e\xc8\xd0\x3d\x8e\x57\xa2\xeb\xae\xbb\x7a\x7c\x7c\xd9\x79\xe3\x90\x27\x7b\xde\xb8\x4e\x2e\x77\xbe\xb8\x41\x63\x0f\xae\x0e\xc3\x6b\x88\x8b\xab\xbb\xf2\x6d\xe8\x98\xa6\x4f\x71\x7b\x51\x48\x1a\x91\xb3\xc1\xdb\x0b\xaf\x4d\x6e\xb0\x53\x31\x22\x6f\xa5\xb1\xff\x89\x3c\x62\xc7\x92\xe9\xb7\xd2\xc0\x27\x3b\xb1\x92\x38\x01\xbb\xb4\x8e\xce\x6b\x61\xc5\xb0\xc0\xe3\xc6\x65\xb7\x59\x45\xc1\xad\xd7\x26\x33\xf8\x54\x10\xa9\xdc\x94\x0f\x24\x21\x58\xd2\xda\x11\x10\x07\xe8\x5d\x9f\xef\x1b\x0d\x71\x4b\x45\xbc\xcc\xf7\x46\x8c\x23\x04\x30\x8f\xf1\x1b\x80\x62\x6f\x2a\x28\xf8\x2e\x5b\x98\x30\x6a\x67\x8e\x1a\x36\xbf\x73\x89\xe3\xea\x55\x33\x35\x67\xa4\x81\xb0\x4e\x06\xce\x1d\xa2\x48\xe0\x35\x50\x9d\x88\x89\x19\xbc\x8d\x32\x97\x97\xde\xe3\x43\x41\xa7\x04\x5b\x23\x8f\x8e\x3a\x60\xbf\x47\xa4\xa0\xd6\x55\x53\x70\x90\xfc\xbf\x10\xbd\xfd\x1f\xd2\x50\xae\xf4\x84\x1c\xfa\x0c\xc3\xf8\x3b\x97\xa4\x11\x3d\x66\x00\x29\xcd\x7a\x60\x81\x0a\xc2\x1c\xa6\x85\x9c\xad\x29\xe3\x23\x87\xb7\x6f\x0f\xec\xe0\x5c\xde\xbb\x64\xcb\xbd\x54\x74\x25\xbc\x62\x89\xb2\x77\x2a\xf6\xba\x94\xc2\x9e\x14\x08\x3a\x29\x00\x9c\xef\xc1\x77\x7b\xf7\xa7\xf7\x0f\xd2\x20\x3b\xc0\xa4\xb3\x0c\x2a\xd8\xc0\x2d\xdb\xdb\x53\x35\x6d\x86\x6d\xa9\x8e\xf9\xbe\x63\xcb\xad\x85\x60\xde\xf4\xa8\xf0\x26\x8c\x71\xa6\x7a\xa7\x59\x6a\xac\xbf\xaf\x20\x46\xbf\x70\x6e\x41\x79\xc5\x14\xba\x04\x93\xc6\x46\x27\x98\x3d\x6b\x42\xaa\x7d\x07\xb7\x03\xfc\x08\x03\x5b\x3e\xf4\x1e\x8d\x4a\xca\xcb\xb6\xf1\xfc\x0c\x69\xb8\xa9\x3b\x86\x8b\x42\xd6\xce\x2f\x82\xef\x09\x9e\x70\xb7\x31\xc7\x2e\xe3\x09\x65\x4c\xd8\x0a\x98\x53\xd5\xf3\xfa\x24\xc6\x07\xe3\xc9\x0c\x0e\x5e\x66\x8f\xfd\xe0\x0f\xec\xa6\xf7\xd6\xa9\x4a\x22\xc0\xe7\xda\xc7\xb3\xe0\xda\x40\xd3\x3a\x04\xd6\x67\x52\x4d\x79\x59\x82\x2f\x12\x89\x0b\x05\x5f\x2b\x8c\x63\x25\x4d\xcf\x0f\x95\x26\x34\x56\x9e\xba\xa1\x0e\x7e\xd5\xd9\x25\x9e\x99\x94\xb4\x64\xbc\x60\x10\xd7\x1e\xc9\x3e\x28\xbc\xe2\xea\xd4\x78\x46\xb0\xb3\x9f\x34\xd2\x94\xf9\xf0\xa1\x3d\x92\x44\x5b\x55\x56\xdb\x03\x45\x0c\xdd\x32\x18\xe9\x03\x91\xec\x92\x12\xe6\x56\x48\x9b\x3e\xb3\x25\x35\x8a\x70\xdd\x2d\x60\x6f\x4f\x99\xa1\xbe\xcf\x85\x58\x41\x83\xea\x4f\xfe\xa9\x38\x93\x65\xdf\xa3\x7d\x0b\x2c\x14\xd9\xf7\xff\x98\x2e\x93\x8b\x5e\xc8\x60\x1d\x6f\x80\x66\x97\xf3\x70\x18\xae\x70\x39\x67\xfa\xf6\x8e\x05\x18\x3e\x0a\x45\x61\xf2\xed\x5c\x31\x44\x01\x06\xa9\x04\x52\xca\xb5\xbd\x6a\x05\xbb\x62\x96\x7b\x4b\x6e\xe7\x70\xda\x26\x62\xa6\xb9\xfc\xac\x5f\xd6\xbc\xfa\xff\xbf\x63\xf9\x56\x1a\x1f\xa6\xfa\x65\xe4\x02\xe6\xa8\xc7\x7d\xe0\x75\x5b\x63\xdf\x6a\x63\xac\x0d\xc3\x67\x33\xa6\x12\x9b\xf3\x91\x50\x7b\xd2\xf7\x5d\xf7\xa3\x35\x4e\x4a\x18\xaa\xe6\x50\x30\xed\xfc\xd0\x5e\xe5\x9a\x57\x72\x4a\x2b\x52\x73\x61\x49\x4b\x9b\x89\x8b\xb5\xe7\x84\x37\x76\x7f\xde\x42\x1c\xe8\xa0\xae\xb3\x14\x3a\xc7\xd3\x32\x24\x94\x4b\x1e\x9f\xad\xcc\xc6\xca\xc3\x41\xbe\x54\x4c\x6b\x4c\x0f\x7e\xc3\xc5\xb1\x0b\x2d\x26\x0d\xfb\xda\x4a\xc7\x0f\xb4\x6e\x2a\x36\xc2\xf0\xe3\xd7\xe3\x7f\x4a\xc1\x88\x2b\x7b\x18\x05\x16\x75\x75\x3c\x46\x92\x97\xa8\xf0\x36\x01\x96\xcc\xd7\xd7\x24\x51\xd0\x93\xbb\x21\xd8\xaa\xc9\x57\xcf\xbf\x7a\xfe\x32\x4d\xc4\x9c\xba\xd2\xa3\x82\x6a\xd7\xdd\x76\x7d\x75\xef\x5c\xc4\x83\xd7\xbf\x88\x9d\x9d\x97\xee\xbf\x5f\xb9\xff\x7e\x4d\xfe\x95\xf8\x34\x72\x46\xce\x7a\xff\xb5\xff\x49\x7c\xda\xd8\x32\x4f\xb4\x5c\x2f\x47\xfd\xb3\xb5\xa0\x02\x0f\x3e\x7b\xce\xbb\xfd\x0d\xda\x1e\xbe\x02\x9c\x33\x85\xac\x19\x4c\xfd\x57\xff\x3b\x4d\xd7\xc4\xe7\x42\x86\xbe\x21\x52\xb8\xa7\xbf\xdc\x87\xe9\x3a\x20\xd7\x90\xf7\x50\xd3\x4b\x0c\x58\x1d\x16\xa6\xa5\x95\x25\x78\xff\xeb\xf1\xcb\x03\x22\x45\xef\xf6\x24\x12\xae\xb8\xb4\xfa\x9a\x9f\x89\xfd\x97\x89\x18\x0f\xab\xd3\xf9\xd5\x86\xe9\xec\xcd\x24\xbc\x2d\x15\x4b\x78\x85\xbc\x32\xd9\x8b\xe3\x43\xb1\xbc\xa6\xcb\x20\x94\xbd\xba\x3e\xe7\x57\x8c\x2c\xf8\x7c\x01\x68\x08\x03\xfa\xa5\x12\xcc\xfb\x06\x19\xcb\x7d\x4b\x4b\x24\x64\x49\x78\xa2\xf6\x77\x6a\x9e\x69\xc8\x68\xc1\x18\x85\x03\xba\x09\x75\x6a\xa1\xf8\xe4\x25\x88\x95\x17\x2b\x40\x1f\x5b\x4e\x73\xfa\xfa\xab\xbb\xeb\x14\x41\x26\x6f\x4d\xad\x08\x14\xf4\x1a\x1e\xac\x9f\x66\xab\x87\xcb\x00\xae\xfd\xc8\xa9\x05\x07\x45\x38\x3c\xc3\x31\x7e\xe9\xac\xe1\xee\x44\xeb\x66\x2f\xcd\x2f\x7b\x26\xcb\x90\x20\x42\x9c\x3e\x0d\x89\x75\x9a\xec\xf5\x8f\x81\x3d\x48\xb4\x0b\xde\x1b\x87\xe1\xec\xec\x3d\x2e\x85\x7d\x0f\xbf\xf9\x07\xb5\x01\x27\xe4\x50\x94\x5d\x35\x51\xe2\x2c\xb1\x5f\x5b\x5a\x81\xf3\x7a\x0e\x79\x82\x2a\xcf\x7c\x45\x75\x47\x6b\x7d\x6d\x3b\x69\x9e\xf8\xda\xb8\xef\x75\x5b\x41\xa6\xe5\xc7\xdf\x3f\x2b\x27\xe8\x2e\xd5\x0a\xac\xce\x90\x6b\x55\x4b\xec\x5d\x2f\xbc\xfa\xef\x32\x2f\xa4\xf3\x4b\x0c\xda\x0c\xa7\xb3\x0d\xe5\x74\x5d\xee\x16\x99\xb2\x05\xbd\xb2\xdb\x11\x60\x9c\xe2\x9d\xea\x96\x18\x54\xac\x21\xd9\xde\x51\x81\x85\x13\x81\xba\xcf\x32\x2f\x06\x6c\xf3\xee\xdd\xa4\xc1\xf7\xfb\x69\xf5\xb4\x0a\xf1\x8f\x9e\x25\x91\x68\x52\xa7\x28\xa8\x5f\x8d\x56\xe6\xd5\x7d\xfe\xdb\x87\xd2\x5b\xbf\x4a\xd3\x5b\xef\x5d\xb9\xc4\xff\x26\xdb\x48\xdd\xc6\xdd\xb8\x5f\x7f\xbb\xdf\xcd\xfa\x01\x64\xf8\xaf\x09\x5c\x40\xc6\xea\x92\x9c\x13\x77\x98\x53\xef\x35\x37\x2d\x45\x00\x2e\xc1\xae\x5d\x49\x75\xb4\xac\x2b\x4b\x14\x39\xb9\xbc\xca\x96\x26\x57\xa6\xac\xa0\xad\xb6\x9b\xba\x6e\xac\xf9\x4d\xb4\x65\x3f\xef\x30\xfc\x7a\xff\x6b\x32\x26\x2f\x0e\xec\xee\x16\x28\x5a\x80\x05\x63\x85\x1b\x1a\xdb\xa0\xa1\x67\x16\xd6\xd4\xb7\xeb\x9c\x28\xe5\xb8\x43\xef\x5c\x51\x7b\x1f\x9f\xda\x24\x64\xc9\x0e\x67\x33\x2e\xb8\x59\xa6\xc2\xd9\xe7\x51\x9f\xde\xae\x51\x12\xa9\x51\x0b\x79\x4d\xae\x1d\x96\x00\xf0\xb2\x83\xc4\x8b\xc9\x7f\x6e\xff\x18\xe4\xb8\x86\xc3\x32\xe8\x22\xce\xe2\x08\xfa\x80\x93\x36\x96\xef\x26\xae\x6e\xde\x35\xea\x49\x19\x6b\x4c\xfe\x2a\x85\x54\xaf\xd0\x38\xc4\x5e\xf6\x41\x07\xb9\xf1\xb5\xdc\xf9\x52\x54\x6d\x19\x75\xc0\xe8\xb4\xa7\xc4\xe3\x73\x4c\x4e\xc1\x7f\xfb\xea\x63\x23\x07\x2f\x2f\x80\x28\x94\xe1\xc0\xbb\x8d\xa0\xf4\x84\xfe\x8d\x45\xf2\x70\x94\x73\x0c\x04\xf6\x03\x93\xf6\x5b\x98\x54\xd2\x00\xff\x3c\x78\xed\x91\x9d\x91\x0b\x48\xef\xde\xfe\x56\x8a\xe9\xb8\x75\x23\x61\xef\x33\x4c\x4a\x5f\xdd\x00\x49\xa3\x3f\xc4\xa6\x41\xde\xb3\x07\x8f\x6c\x8d\xa3\x7e\x44\x68\x25\x21\x88\x64\x8f\x23\xfb\x11\x2b\xdd\x8d\x33\xe9\x63\x4d\xab\xb1\x8f\x24\x32\x16\x80\xf6\xd9\x95\xaf\x8c\x7a\xbb\x20\xc7\x16\xf4\x0b\xf2\x09\x9b\xee\x81\x37\x18\x52\xb9\xad\x1d\x16\x25\xd3\x6f\xaf\xae\x2f\x90\xe0\x1d\xd6\x97\x0c\x34\x0b\x58\x38\x8c\xa5\x4d\x60\x0f\xc6\xcd\xd5\xa9\x0b\x37\x3b\x65\x89\xeb\xe4\xc4\x4f\xab\x4e\x73\x80\xec\x2d\x68\x15\xdb\x1d\xd6\xde\xe1\x25\x53\xa8\xee\x4c\x59\x0f\x85\x29\xb5\xde\x02\xaf\x9f\xba\xa7\x23\x62\x13\x40\x09\xe0\xe0\x7f\x42\xf0\xdb\xbd\x69\x5b\x5c\x32\xe3\x13\x33\x14\xa0\xa4\x34\xad\x21\x53\x5a\x51\x51\xd8\xbd\x08\x9a\x6c\x9a\xa3\x7e\xe6\x5d\xff\x46\x22\x01\x38\x5a\xf2\xdb\x60\xc7\x88\x80\xff\x83\xaf\x10\xd5\xaf\x72\xa1\x8d\xa5\x1a\x0b\x5b\x87\x4d\xde\x61\xa5\xe5\xc8\x4a\x5d\x3f\xe8\x5a\xf0\x02\x87\x77\xff\xc6\xfc\x19\xa7\x11\x30\x66\x1c\x6c\x5c\x94\xbc\x22\x53\x7a\xa1\x6d\xd2\xf5\x1c\x4e\x6f\xff\xb4\x48\x7b\x49\x36\x99\x43\xf6\xdf\xca\xf6\xd8\xeb\xe3\x35\x7a\x08\xa8\xbd\x11\xae\xa2\xdd\x25\x0e\xc9\x13\x5f\x1e\x14\x74\x6a\x86\xce\xb8\x28\x01\x1f\x78\x95\x98\xf0\xd4\x3e\x55\xd6\x10\xf0\x14\x81\x99\x9b\x9f\xa2\xcd\xee\xd8\x87\x16\x9f\x6b\x3e\xee\x6d\x09\xd1\x75\xf7\x45\x5f\x45\x81\x22\x1b\x5a\x79\x94\x1f\xab\x52\xf0\x99\xb5\xba\x4a\xc9\x30\x2b\x02\xdd\xe3\x89\xce\x37\xe6\xf5\x92\xce\x45\x94\x7a\x6a\xf7\xdc\x2d\x64\xdf\x67\x07\x10\xc3\xaa\x0a\x4f\x87\xce\x23\x66\x2d\x61\x23\x3b\x97\x58\xaa\x6f\x7f\x4c\xfa\xa1\x89\x8d\x83\xc5\x03\x79\xd0\x26\x88\x9c\x2e\x43\x6b\xd9\xd4\x1c\xdc\x69\x6b\xc8\x9c\x5f\x59\x15\x6a\x2d\xfe\xb1\x29\x96\x81\xf1\xa7\x05\xab\x1a\xa2\x58\xd9\x16\x6c\x40\x26\xa0\x4e\x34\xb3\x09\x39\x8c\x1d\x82\x80\x99\x11\x8e\xcb\xbd\x1e\x2f\xee\xb9\x3e\xb8\xc3\x15\x45\x3e\x03\x09\x0b\x26\x1e\x9f\x11\x76\xc5\xd4\x92\x34\x52\x6b\x90\xfd\xa0\x2f\x20\xc8\x21\x64\x53\xce\x7c\x61\x0d\x38\x55\x60\xce\x9c\x7f\x21\x69\xf0\x3d\xe7\x94\xd8\x03\xa7\xb2\x1c\xac\x03\xec\x6e\xd4\xfa\xeb\xe7\x2f\x53\xa3\xd6\xb9\xbd\x7f\x67\xf0\xbf\x10\x52\x1e\x14\x5a\x3e\x9d\x6d\x92\x93\x61\x6e\x7b\x92\xe7\x53\xa2\xce\xa9\xa1\x49\x98\x19\x08\x0e\x7f\x7d\x10\x05\xac\xbf\x7e\xfe\xd5\xf3\x97\xfb\x76\xee\xbf\x3a\xb0\xab\x10\x85\x95\xbf\x8a\xc2\xca\xe1\x97\xee\x2d\x12\x20\xac\x48\x97\xb4\xb3\xff\xf2\x60\x02\x35\x0d\x80\x4f\x7a\x2d\x55\xe9\x4a\xfc\x3d\x62\xa4\x7d\xf3\xd0\xfe\x93\xd7\x5e\xf9\x1c\x81\xd0\x0a\xd2\x31\xcd\x3d\x04\x01\x0d\x08\xa3\x73\x43\xbe\xac\xa5\x62\x5f\x46\x43\x3c\x56\xc5\x60\x3d\xb9\xab\xa6\xcd\xf8\x32\x21\x6f\x77\x48\xb1\xf3\xd0\x52\xe7\x9b\x52\xd4\x6a\xda\xdc\xe1\x39\x57\xb2\x6a\xeb\xbb\x66\x61\x0f\x53\x88\xbe\x77\x75\xab\x6e\x68\x57\x5a\x89\x69\x0e\xb5\xab\x39\x9e\x2e\x63\x28\xdf\x29\xab\xa4\x98\x63\xac\x32\x34\x2c\xbc\xe3\xa8\x9f\x86\xac\x5e\x48\x51\xb0\xc6\xe8\xe7\xda\x48\x45\xe7\xec\xb9\x23\xf2\x4e\x83\x6d\x0f\xb2\xe0\x47\xa0\xb6\x5f\xf9\x86\x4d\x81\xf0\x3d\x02\xd0\xb2\xaf\xff\x06\x79\x49\x0b\x80\x9d\x84\x59\xb7\xda\x52\xd4\x60\x58\xa4\x4e\xf7\x96\x50\x0b\x12\x3a\x08\x0e\xa9\x06\xa5\xd7\xfa\xa4\xa2\xda\xf0\xe2\xdb\x4a\x16\x97\xe7\x46\xa6\x39\xfa\x72\x58\x18\x9b\x68\xe9\x71\x82\x20\x87\x3f\x9d\x93\x63\xae\x2f\x89\x62\x5a\xb6\xaa\x70\xad\xca\x56\x00\x19\xef\x8a\x1d\x8b\x97\xdd\x4c\x15\x33\x0e\x72\x9f\xd4\xb4\x58\xa0\xe9\xef\xb2\x1e\xd8\x87\x46\xea\xae\xf9\x7a\x02\x4b\xe1\x15\x77\xaa\x38\xfc\xe9\x7c\xfd\x95\xb9\x8e\x9a\x64\xa0\x0f\x11\x4b\x69\xc0\x13\xdb\x65\xca\x8f\x8d\x62\x69\x5a\xd9\xc6\x99\xb6\x0c\x0f\x4e\x29\xc5\x4a\xae\x10\x48\xd5\xbd\x2b\x9b\xea\x49\xa1\xf9\x84\x5e\xeb\x49\x21\x6b\x72\x74\x7e\x4a\x4a\xc5\xaf\x52\xfb\x24\x0d\x13\x65\x5f\xd0\x6b\xcd\x90\xfc\xa9\x25\xdf\x7e\x9d\x32\x0f\x5b\xee\x15\x8a\x6f\x73\x7a\x9c\xf0\xf3\xa1\xf5\xdf\x33\x7d\x61\xdf\x3d\xd1\x9e\xcb\x55\x35\x87\x54\x78\x8f\xec\x8c\x57\x0c\x01\xbb\x90\x13\x5d\xdc\xd7\x89\x7d\xd8\xe6\x4b\xd9\x92\x6b\x8a\x8e\x6d\x38\x67\xd3\xcb\x37\x2f\x78\xf3\x8a\x9c\x08\xdd\x2a\xd6\x15\xa9\xaf\x92\x60\x15\x77\xdf\x47\xd8\xa3\x0b\x81\x6c\x70\xdb\x51\xcc\x07\x40\x8c\xe1\x75\x82\xd6\x99\x7e\x45\xf6\xd8\x07\xf3\xcd\xde\x88\xec\x7d\x98\x69\xfb\x1f\x61\x66\x7a\x6f\x42\x4e\xeb\xa6\xe2\x05\x37\xd6\x1c\x15\x33\xa6\x3a\x57\x31\xfe\x20\x53\x97\xa5\x5d\xd9\x93\x24\x47\x25\x2b\x38\x85\x81\x3d\xb7\xcc\xe1\x81\x10\xcf\xe4\xd1\x07\xe2\x3e\xd9\xfb\x74\x46\x24\x96\x1e\xf4\x61\xca\xb9\x0e\x0f\xb7\x0c\xed\x46\x17\x09\xfd\x96\xba\xab\x63\xe1\xd7\x52\xf9\x47\x3e\x2f\xd9\xd5\x73\x5d\xd2\x97\x23\x78\x2d\xe4\xcf\xe5\xca\x1c\x50\x4d\xf6\x5e\xde\xb9\x51\x40\x77\x9d\xf3\x9a\x57\x54\x55\xcb\x51\x3c\x97\xdd\xf3\xed\x51\xe9\x09\x01\x67\xf2\x8b\x3d\xb2\x8f\x68\xe0\xa0\xae\x57\xcc\xb7\xe3\x0b\x5d\x7d\xa1\x02\x2a\xb9\xd9\xdd\xd0\xc4\x10\x32\x38\x39\x84\xc0\xc1\x44\xcb\x77\xa2\x4a\x06\xf7\xc8\xc5\xfd\x9e\x0e\x8f\x1f\xa8\x5a\x17\xc5\x9e\x49\xd4\xdc\x58\x77\x8b\x6f\xc9\xc3\x85\x33\x01\xde\x58\x1e\x1d\x80\x67\xb1\x6b\xe2\x2c\xbd\xfd\x20\x09\x9a\xc2\xb6\x17\xd4\xd3\x01\x29\xf5\x82\xff\xda\x32\x72\x7a\xec\x0f\xea\x86\x29\xcd\xb5\x61\xc2\x90\xb2\xa7\xa1\x73\x54\xdb\xf7\x0f\x6b\xfa\x4f\x29\xc8\xc9\xb7\xe7\xee\x41\xc9\xdb\x6c\xf7\x56\x37\xf1\xb0\xa2\xff\x6c\x15\xb3\xf6\xcc\xd6\x4c\x2e\x4f\xc0\xaa\x9d\x65\x3f\x27\xc7\xd4\x50\x34\xb7\xf0\xc4\x90\x5d\x4f\x2f\x30\x8b\xa6\x80\xe7\xe6\x9b\xc7\xe5\x33\x8a\x02\x51\x77\xb2\x84\xa2\x97\xb1\x8b\x92\x36\x1f\x1b\xcd\x1f\xcb\xcf\x68\xff\xd8\x11\x32\x58\x40\x5b\xb6\x3c\xec\xfb\xbc\x4d\xf5\xe8\xe3\xcf\x7f\x78\x7f\xba\x05\xbb\xa5\x00\x9b\x7c\xfe\x46\x96\x79\x8c\x97\x67\xd1\x03\xbd\x8a\x06\x0d\x81\x8f\xf0\x73\x52\xdb\x91\xc8\x5b\x29\xd8\x88\xbc\x67\xb4\x24\xf6\xb0\x72\xff\xfc\x49\x71\xc3\x26\xcf\xb6\xa5\xe4\xfa\x45\xcc\x32\x11\xfe\x61\x7e\x12\xde\x46\x6d\x22\xa1\x97\x2b\x88\x74\xa7\xb3\x4e\x2b\x39\x25\x4e\xa4\x6e\xf3\xed\x7f\x78\x7f\x9a\xed\xe5\x7f\x78\x7f\xea\xdf\xdd\xfe\x53\xce\x76\xf3\xb5\x77\xcd\x70\x7f\xbd\x62\x31\x0f\xb7\x5c\xde\xb8\x9a\x08\xba\x66\x8d\xdf\xbf\x29\x3e\xd9\xb2\x11\x9e\x01\xc2\xc9\x19\x7a\xaf\x88\xa5\x2b\xcd\x0d\xca\x45\x32\x3c\x62\x5f\xb8\xda\x27\x75\x3d\x99\xa2\xac\x37\xe8\xed\x57\xbe\x22\x75\x5b\x19\xe8\x72\x03\x5b\xcb\xee\x35\x28\x20\xf3\x9b\x8c\xb8\xae\xaf\x56\x3b\xc0\x4c\x93\xf2\x95\x47\x4f\x0a\xbf\xd8\xfc\x83\x37\x54\xd0\xb9\xbd\x1d\x4e\x6c\x52\xe3\x9f\xd1\x9e\xde\xc7\x00\xbf\x08\x5f\xd1\x2b\xca\x2b\x3a\xe5\x15\x37\x60\x8d\x1c\x4c\xfc\x5c\x22\xd4\x0c\x90\xbc\x35\x61\xbf\x73\x26\x5d\xdc\x09\x03\xba\x27\x92\x7d\xfb\xdd\xf3\x6b\x7b\x28\x1e\x4c\xe0\x84\x84\x1b\x17\x4c\xc5\x56\x5f\xf2\xc8\x76\xc3\xbf\xbf\x27\x6b\x71\xb8\x85\x16\x6d\x3c\x98\x8d\x34\x4b\xc0\x4a\xd3\xad\x5a\x02\x96\x80\x8d\x96\x00\x7c\xe1\x7a\xd9\x6e\xc1\x18\x80\xe1\x13\x8c\x01\xf8\x5d\x66\x63\xc0\x1e\x4b\x9f\x93\x31\xa0\x59\xa1\x98\x19\x60\x0e\x80\x68\x4c\xfc\xfd\x50\x83\x60\xe7\xe4\x62\xf9\x24\x17\xe3\xab\x63\xae\x2c\x2b\xd4\x3d\xce\x2b\xeb\xa1\xa1\x3d\x7e\xb5\x82\x72\x8d\xc2\xeb\xdc\x69\x07\xbe\xd1\x3d\xfc\xde\x8a\xac\x14\x7c\x7f\xbc\x06\x1f\xe8\x61\xd3\xe4\x99\x17\xff\x34\x3f\x2d\xa8\xf6\xc0\xc7\x24\x79\x6b\x0f\x7c\xcd\x82\x35\x8b\xd9\xd6\xa0\x1d\xec\xe8\xaf\xcf\xfb\x89\x24\x47\xac\x59\x90\xd7\xe7\x1b\x0e\x30\xc4\xef\xb0\xd3\xa5\x31\xbd\xe4\x99\x26\x15\x9f\x31\xc3\x53\x23\x23\xf1\x19\x76\x84\xb4\xf4\x0e\xb0\x00\xcc\xe4\x0f\x2c\x9c\xae\x10\x78\x14\xd2\xb7\x37\x0d\x76\xcf\x23\x3c\x5c\x6a\x29\xb8\x91\x77\xee\x45\x4e\x72\xf4\x31\x70\x43\x6f\xfb\x68\xf0\x74\xd8\x45\x7d\xef\xa7\x93\xbc\x89\x3e\xa5\xa4\x90\x55\xc5\x0a\x8f\xa5\x01\x6c\x3a\x60\xe6\xf0\xda\xe0\x22\x77\xa9\xc0\x7a\x72\xf9\x07\x70\x92\x3b\x77\xf8\x73\x64\xbd\xe7\xef\x4f\x0e\x8f\xdf\x9c\x4c\xea\xf2\x8b\x85\xbc\x1e\x1b\x39\x6e\x35\x1b\xf3\x54\xa8\xd4\xad\x77\x59\xc8\x60\x4d\xdf\x03\x6a\x71\x43\xcd\x22\x8f\x79\x6d\x9f\x64\xd9\xa7\xeb\x68\xff\x83\x46\xbc\x00\x40\x64\x73\x79\x88\x4a\x4a\x33\x22\x8a\x42\xf2\x6d\xe8\x94\x3c\x6b\xab\x0a\xf9\xcc\xca\x9e\x51\x1c\x1f\x7e\xfe\x64\xe4\x7a\x75\xaa\x37\xb9\x9f\x95\xc5\xbb\x2b\xe2\x61\xb8\x6e\x99\x6a\x33\x93\x8c\x0c\xd3\x51\xd2\x67\x99\xf3\xde\xe7\x98\xfb\x60\x16\x96\x81\x2e\xd9\x92\x00\xaa\xbd\x35\x5b\x7f\xd0\x4c\xf5\xb7\x20\x33\x05\xcc\xfa\xf3\x56\x33\x35\xc1\xc7\x3f\xf2\x95\x1e\xa2\x2b\xc3\xfb\xbf\x67\xb3\xdd\x58\xe7\xf7\x6c\xb6\x69\x99\xdd\xc7\xd0\x9d\x39\x54\x55\x59\x55\xbc\x35\x0b\xac\xfc\xc5\xfe\xf9\x68\xa7\x6c\x5c\x77\xec\x83\xf0\xc8\x17\x7a\x10\xbe\x7a\x8e\xc6\x36\x62\x80\x55\x45\x32\x37\x01\x89\xe3\x68\x8e\x33\x06\x76\x4b\xb9\xe8\xb5\x80\x45\x08\x32\x7e\xc5\xaa\x65\xd0\xd5\xb1\x6e\xa6\x6c\x11\x11\x99\x16\x97\xd7\x54\x95\xd0\x6f\xba\xa1\x86\x3b\x0f\x37\x4f\x57\x2c\xed\xe5\x7b\x94\x3b\xcc\x65\xd7\x48\xc4\x15\x60\x6b\x7c\x63\xee\x8c\x19\x2c\x08\x15\x0e\x5c\xda\x21\xa8\xd9\x33\x92\x26\x27\x5d\x78\x22\x6a\x6b\xbb\x15\x4c\x59\x6b\xbf\x5a\x92\x6b\x25\x53\x11\xd8\xfc\x75\xc7\xc4\x12\x79\xc5\xd4\x15\x67\xd7\xcf\xaf\xa5\xba\xe4\x62\x3e\xb6\x2f\x3b\xc6\x2d\xa0\x9f\x5b\x4e\xd4\xcf\xbf\x80\xff\x0c\xa0\x2a\x53\x67\x8f\xe0\xa1\xde\xdb\xcb\xa1\x0e\x0f\x6e\x38\x60\x2f\x7b\xbe\x6d\x5b\xaa\x5b\x1a\xec\x5e\x92\xb1\x1e\xad\xfc\x89\xad\x68\x29\x35\xde\x63\xd7\xb1\x27\xaf\x69\x59\x27\xa2\x18\x93\x9d\x11\xd7\xa9\xce\x1d\x2e\xca\xb4\xa5\xcb\xe2\xdc\x81\xd1\xfb\xce\x1d\xf7\x99\x4b\x02\x0d\xe5\x20\xd4\x47\x25\x00\x78\xd6\x17\x79\xf4\x6b\x3c\x32\x78\x78\x70\xf0\xbb\x85\x28\x1c\xc5\x99\xe3\x13\xf8\x54\x88\x50\xc8\x86\x59\x91\x5c\x5c\x4e\xa4\x9a\xdf\x47\xd1\xc6\x2a\xbf\xd6\x4b\xfd\x6b\x35\x46\x0a\xc6\x4d\xd9\x31\xec\xe3\xf3\x5c\x3d\x55\x67\xdc\x5a\x9d\xf1\xb8\x13\x3d\x76\xb8\xe6\xe2\x3e\xb7\x14\xf9\x2c\xbd\x34\x9f\x55\xc8\x6d\x8b\x3c\x31\xdc\x17\xb3\x6b\x26\x7a\xa7\xd1\x35\x12\xb0\xd9\x5c\xc3\x4c\xb0\xc0\xf1\x64\xf1\xb1\x42\x40\x61\xa0\x8a\xd6\xcc\x30\xd5\x01\xc6\x17\x52\x88\x21\xfd\x66\x8d\x24\xef\x1a\x26\xce\xe1\x10\x7e\x32\xab\x9f\xcc\xea\xdb\xaf\x27\xb3\xfa\xc9\xac\xce\x61\x56\xef\x5c\xc1\x90\x97\xa7\x08\x82\xe8\x0a\x01\x3b\x44\x07\x67\xb3\x3c\xbe\x33\x33\xd5\x7a\x96\x62\xc6\xe7\x6f\x68\x33\xd8\x80\x0e\x4f\x5a\x31\x86\xc3\xc7\x2e\xb3\x01\xa0\xa9\x1a\xd9\x40\x8b\x3e\x07\x23\x0a\xd3\xff\xf0\x96\xd9\xd0\xc3\xc8\x6d\xb8\x6c\x45\x20\x03\xf8\x3b\x22\xa5\xaf\x6f\xd4\xf6\x93\x29\x37\x9d\x26\xa1\x99\xc1\x7e\x60\xd8\x73\x95\x48\x41\x0a\x87\xf0\x0e\xf6\x4f\xd4\xa7\x2e\x83\x4d\x25\x88\x2c\x8c\x87\x1a\x0d\xed\xc3\x5e\xbc\x78\xf1\x02\x7b\xc7\xfc\xfe\xf7\xbf\x27\x52\x11\x4a\x4a\x56\xf0\x7a\xfd\x46\xb8\xeb\xb7\x2f\x13\xdb\x2b\xd8\xeb\x6f\x87\x6f\xbe\x07\x5c\x96\xc6\x68\xec\xd0\x88\x14\xd9\x07\xf7\x06\xd5\x23\xf2\x7f\xce\xdf\xbd\xed\x5a\xff\xf5\xbf\x05\xaf\x49\x98\xce\x74\x7a\xe2\xf0\xed\x8b\xdf\x7d\xf3\xcd\x80\x27\x81\xc3\x45\x2a\xee\xe0\x8c\x3d\xc4\x0c\xb5\xe7\xb1\x62\xd8\x93\x07\x14\x08\x6f\xc1\x22\x00\x98\x49\x6e\x0f\x42\xbc\x82\x52\xf3\xf9\xc2\x38\x98\x58\xbb\xc5\x2b\x5e\x18\x54\x04\x10\x5c\x4b\x3a\xb4\x66\xd8\xf4\x48\x43\xb0\xde\x07\x24\xb0\x94\x6c\x44\x2a\x7e\xc9\xc8\x4c\xff\x45\xc9\xb6\xe9\x1a\xf9\x62\xcf\x12\x8f\x7d\x84\x44\x74\xbc\x9f\xdc\x07\x73\x57\x2a\xa9\x07\x65\xa0\xe4\x12\x32\x40\xc4\x8a\xcb\xc1\x21\x9f\x76\x8d\x61\x1b\xca\x03\xd8\x11\x94\x6d\xa2\x2e\xdb\xd7\x91\x8b\x44\x40\x39\x7b\x1d\x85\x13\xc5\x37\x70\x68\x94\xfc\x6f\x64\x72\x80\xf8\x8d\x4e\x74\x80\xc6\xb5\x3c\xe7\x81\x71\xbb\xcc\xc4\xe4\xf1\x2f\x19\x42\xdf\x5a\x7b\x8d\x89\xd0\x6a\x11\xde\x1e\x50\x6c\xa3\xb9\xb1\x5f\x54\x5c\x5b\xd2\xa0\x23\x90\xa3\x38\x79\xec\x0d\x6f\x1a\x46\x83\x7d\xaf\x71\x47\xb4\x62\x6d\x54\xec\xa4\x31\x60\x64\x38\xd2\xe1\x05\xa9\xef\x82\xdb\x8d\x8d\x00\xe9\xae\xc9\x8c\xbb\xd7\x73\x41\x58\xb0\xf4\xb6\xfd\xd1\x92\x6a\x66\x5a\xb7\xf4\x4c\x29\xa9\xec\xbb\x32\xad\x5d\x7f\xb5\x9a\xaa\x4b\x56\x86\xf3\x6f\x42\xce\xec\xa4\xf8\xfe\x36\x03\x5c\x3c\x15\xb5\x56\x18\x3a\xf1\xe9\x12\x5e\xd3\x19\xec\x40\xdc\xb3\xc9\xe4\x19\x0a\x5e\xa9\x88\x36\x54\x39\x69\x68\x3f\x1f\x26\x79\xb6\x98\xb7\xd6\x93\x1b\x6f\x68\x03\x2d\xb0\x41\xcf\x04\x06\x00\x1f\x06\xbc\xb3\x3b\x7c\xa8\x5b\xa3\xf4\xb3\x25\x83\x87\x61\xa8\xc3\x1d\xaf\x71\x32\xc2\xba\xff\xbd\x9d\x98\x21\xfb\x7c\xb0\x9b\x04\x24\xd5\x90\x9f\xaf\x30\xc0\x65\x1f\xb3\xde\x48\x2f\x8d\x86\x19\xe4\x99\x8c\xdf\x7a\x80\x12\x8e\x57\x4e\xb7\x10\xd2\xd3\x4f\xce\xf9\x24\x4d\xdc\xa0\xf7\xa7\x1a\xb0\x87\xf0\xda\x21\x05\x1c\xaf\x5d\x53\xc3\xf1\x3a\x9d\x81\x28\x5f\x39\xb2\xdd\x51\x13\x1b\x55\x5e\xd7\xb0\x6b\x37\x74\xd0\xed\x69\xd0\x78\x6d\x45\x8f\xc6\x2b\x87\x36\x8d\xd7\x70\x9d\x1a\xaf\x21\x69\xd0\x78\xe5\x15\x1c\x3e\x99\x1a\x17\xc3\xa9\x1d\xa8\x59\xcc\x02\x03\x40\xd4\x13\x7c\x2a\x5e\x18\x0f\x96\x17\x4e\xa9\x41\x91\x41\xa7\x5a\x56\xad\xc1\x81\x73\x3d\x3a\xd6\x97\xe0\x85\x58\x05\x3d\x29\x06\x29\x49\xab\x83\x44\xba\x17\x68\xc7\xa8\xae\x0c\x1f\x61\x37\x73\xf8\x87\x84\x42\x72\xb1\x6d\xde\x10\xc8\xf6\xc3\x1f\x5b\x0f\x7d\xe4\x0e\x7b\xec\x5a\xc8\x23\x27\xb8\x44\x62\xa8\x23\xf8\x47\x73\xec\x1d\xff\xb0\x80\x2d\x78\xbd\x60\xae\xc8\x25\x32\x7e\xad\x92\x65\x8f\x50\xb0\xc8\x7d\xbf\x55\x6c\xea\xb3\xad\x68\x79\xde\x70\x4f\xa1\xf9\xf0\x20\x82\xe6\x64\xff\x28\x60\x66\xfb\x7a\xd9\x53\x61\x98\x9a\xd1\x82\x1d\xc4\xc1\x05\xd6\x2c\x58\xcd\x94\x9d\x78\x77\x9f\x87\x60\x5e\x50\x51\x56\x0e\xfa\x1c\x77\x11\x61\x1f\x0c\x53\x76\x91\xba\xe4\xb3\x24\xe5\x71\xdb\x80\x59\x40\xf9\x36\x62\x1d\x30\xf0\xb6\xcf\x1a\xa4\xc2\xab\x47\x22\x3a\x79\xba\x65\xf5\x7d\xd3\x2c\x0b\xe8\x38\xc0\x94\x2e\x41\x8f\xa4\x00\xad\x18\xc4\xfd\x52\xb6\x0a\x13\x6e\x43\x1e\x65\x21\x95\xb2\xfa\x39\x10\x44\x35\x51\x6c\xce\xb5\x81\xee\x30\xbe\xab\x25\x76\x98\xd8\x1a\x1e\xcf\x4e\x65\xf2\x85\x94\xbd\x5b\x90\x8e\x92\xc7\x70\x16\x5d\xa3\xe4\x15\x2f\xbd\x41\x17\x9f\xcf\x5c\x93\x86\xea\x08\x3f\x9d\x6a\x2d\x0b\x0e\x01\xb0\x8e\x8b\x92\xc7\x47\x4f\x28\x98\x8b\x25\x33\xd6\xba\x17\xac\x87\x7c\x1b\x27\x19\x4a\x42\x9b\xa6\x4a\xae\xb4\x19\xcc\x16\x42\x96\xec\xac\x9d\x56\x5c\x2f\xce\x77\x25\x71\x6a\x13\x4d\x58\x9c\xbc\x56\xd1\x74\x53\x02\xd5\x80\xa4\x2d\xa1\x39\x58\x5c\x56\x5f\xb2\x06\x26\x97\x02\x5c\x5d\x54\x6b\x3f\x6a\x2c\x6a\x24\xe8\x9d\x15\x33\xcc\x7f\x95\xae\x47\x77\xef\xed\x7a\x4f\x58\x9b\xdc\x7e\xfa\x83\x68\x7a\x9f\x17\xb4\xaa\x06\x78\x3e\xfa\x2a\xb6\xd7\x5e\xd0\x05\xe0\xfb\x58\xe0\x86\xe1\x76\x2f\xf9\x59\x86\x92\x32\x3c\xbd\x26\xd8\x01\x34\x5d\xc5\xdd\xb8\x70\x3a\x6a\xf3\x2f\x85\x5f\xdd\x91\x55\xc8\xfd\x0f\x02\x07\x20\x7c\x17\xee\xe3\xa7\x74\xb6\xa7\x74\xb6\x8f\x5c\x5b\xb7\xe9\xc8\x53\x3a\xdb\x5d\xaf\x5d\x4c\x67\xdb\xb9\x94\x73\xef\xb8\xc6\xe3\x91\x96\x63\x40\x13\xc4\xa4\xab\x16\xcb\x7d\x82\x96\x3a\x54\x0b\xfe\x08\xee\xc0\xd6\x52\xbe\xf1\xbd\x0e\x8d\x51\x7c\xda\x9a\x74\x51\x9c\x37\xd7\xb0\xa3\x07\xcc\x53\xa6\x9d\xce\x30\x76\x4b\x56\x44\x87\x87\x73\xf2\x87\x13\x2d\xd2\x34\x06\x9a\x4a\x93\x60\xbb\x80\xd9\x82\x1f\x3e\xd3\xa4\x94\x45\x5b\x33\x61\x3a\x0e\xe9\x6a\x5d\x30\xce\xb2\xc5\x53\x95\x96\x25\x47\xa5\xe4\x2c\xc3\xf9\x3a\x48\x1c\x95\xf2\x5a\xd8\xf3\xe8\xf0\x2c\x09\xe1\xb7\x8f\xee\xdb\x3d\x2b\x76\x63\xf8\x8f\x89\xfd\x9c\x4e\xa1\x27\xbd\x6b\xb9\xfa\x94\x32\xb9\xf1\x11\x79\xb6\xe9\xa6\xc8\xac\x91\xa4\xd5\xec\xd6\x94\xc8\x2e\xb2\x9a\x75\xe4\xa7\xec\xcc\xdd\x08\x0b\x3f\x65\x67\xa6\x8e\xfc\x94\x9d\x99\x36\x7c\x4f\x9e\x9d\x62\x8a\xa5\x55\xe7\x2a\xd7\xdb\xb3\x77\x3e\xb8\xcc\x84\x01\x0b\xb5\x5b\x59\x65\xc7\xdd\x99\x88\xce\x8d\x55\xe0\xdf\x15\x3f\x0c\xca\xc2\x2e\x0e\x1e\x15\xcd\xf9\x43\x13\x8c\xcd\xcf\x21\x03\x6d\x07\x32\xc8\x60\x2e\x07\xf8\x04\xf1\xea\xa3\xc5\x75\xd0\x83\xd8\x8d\x1b\x53\x74\xa3\x1c\xe1\x46\x96\xaf\xb0\x01\x35\x15\x42\xa2\x8a\xaa\x47\xd8\xc0\x5b\x8f\x1c\xf8\x05\x18\xa9\x0d\x2d\xd0\x4b\xd6\xf2\x12\x64\x6a\x87\x50\x99\x8a\x1d\x87\x57\x16\x2e\x20\x99\x38\x81\x00\x37\xc0\x14\x9d\x0d\x61\x09\x92\x8d\x2d\xec\x45\x1b\xfe\x23\x53\x7a\x40\x6f\xbb\xee\xea\x37\xde\xc5\xa7\x7a\x6e\xd0\xc5\x82\xd5\x14\xfe\xf9\xda\x4f\x81\x15\x90\xd6\xea\x34\x0c\xdb\xd7\x31\x55\x6b\x22\x67\xa3\x5e\x05\xf6\xde\xd5\x90\x8e\x6e\xfe\xca\xe4\xcc\x20\x7e\x33\x9d\x0d\x4e\x37\x22\xab\x13\x76\xd6\x4b\x0e\xb2\x1b\x09\xf4\x48\xbb\xb7\x7c\xf8\xa9\x4b\xd4\x86\x43\x04\x67\x78\x87\x26\x27\xbf\xa7\x06\xaf\x5d\xcb\x0a\x4d\xcd\x06\x1d\x85\x8c\x81\xbe\xca\x3e\x90\x9c\xa7\x6c\xd0\xfe\xf5\x94\x0d\xfa\x94\x0d\x9a\x35\x1b\x34\x52\x76\xfc\xb9\xb5\x21\xb1\x33\xce\x63\xf0\xd9\x9d\x53\xe6\xed\x7e\xe7\x71\xf0\xc9\x99\x3e\x33\x53\xaa\x7e\x01\xca\xb3\xc9\xe4\x19\x96\xa0\x74\x2e\x8a\xd6\xcc\xc6\x7f\x20\x4c\x14\xb2\xb4\xcf\xb9\x80\xe7\x2b\x6d\x40\x85\xef\xe2\x3c\x31\x2d\xb5\x1f\x2b\x2e\x62\x81\x67\xe7\xd0\xa8\x06\x1f\x15\xbe\x97\xe3\xeb\xfc\x8a\xe9\x60\xe1\xde\xa9\xb3\xa1\xe3\xa4\x9b\xe2\xc2\x67\x34\x39\xbd\xd6\x7f\xaf\x49\xc5\x6b\x0e\xed\x4d\x4a\x90\x70\x4c\x9b\x61\x81\x2e\x42\xf6\xf1\x91\x93\xa2\x69\x47\xee\xf1\x93\x9a\xd5\x52\x2d\x47\x61\x08\xfb\x65\x6f\x4c\x77\xc7\x01\x28\xd1\x45\xab\x14\x13\xa6\x5a\x0e\x03\x7c\xef\xae\x1d\xd4\xa6\xfd\x0a\xec\x88\x32\x1d\x18\x64\x48\x23\x86\xee\xea\xcb\xa0\x2e\x9f\x0e\x42\xcd\x61\x16\xe1\xec\x74\xc0\x7e\xa3\x2e\x8b\xd1\x7e\xca\xc4\x15\xb9\xa2\x4a\x0f\xdb\xf3\x24\xaf\xfe\x5c\xf2\x2b\xae\x65\x72\x0e\x5a\xf4\xa0\x78\x7a\xce\x43\x04\xcd\xee\x54\xd9\x9a\xa6\x35\xee\x38\xf1\xdb\x97\x7d\x68\xa4\x55\xd2\xc2\xb6\x5d\x31\x34\x5e\xa6\x06\x28\xbb\xab\xa1\xc6\x30\x25\x5e\x91\xff\xbb\xff\xf3\x6f\xfe\x35\x3e\xf8\xf3\xfe\xfe\xdf\x5f\x8c\xff\xe3\x1f\xbf\xd9\xff\x79\x02\xff\xf8\xf2\xe0\xcf\x07\xff\xf2\x7f\xfc\xe6\xe0\x60\x7f\xff\xef\xdf\xbd\xf9\xcb\xc5\xd9\xc9\x3f\xf8\xc1\xbf\xfe\x2e\xda\xfa\x12\xff\xfa\xd7\xfe\xdf\xd9\xc9\x3f\x3e\xf1\x21\x07\x07\x7f\xfe\x5f\x83\x49\xa7\x62\xf9\x6e\xa0\x1c\xc6\x6b\x9c\x51\x1f\xe8\x3f\x31\x0b\xfb\xad\x58\x29\x5c\x98\xb1\x54\x63\x7c\xf4\x2b\xe8\x29\x3d\x70\x00\xcf\x5e\xb9\xf7\x7f\xa7\x83\x84\x73\x29\x18\x88\x3b\xb4\xc1\xef\xc3\x06\xcc\x5c\x72\x01\x29\x21\xc7\x7c\x6b\x68\xa3\x7e\xfc\x3e\xc4\x8a\x61\x75\x23\x15\x55\x4b\x52\xba\x90\xc3\xf2\x1e\xda\xc8\x0c\x6c\x74\x0d\xa4\x97\x3c\x65\x57\x6f\x39\x64\x59\xb3\x92\xb7\xf5\xb6\xa3\x95\x48\x45\xbc\xf0\xd7\x76\x89\x21\x63\x49\xce\x42\x06\xbc\xbb\xcd\xc5\x8c\xa7\xb4\xb8\x44\x27\x42\xe0\x8c\x21\x91\x25\x16\x43\x0e\xef\xed\xb9\x54\xd7\x9a\x51\x11\x22\xa7\x90\x96\x2d\x4b\xf6\x4c\x87\x7b\x91\xa4\x2c\xc1\x4a\x4c\xc9\x72\x35\x5d\xfb\x6e\x80\x03\x6b\x0a\xbd\x01\xfd\x75\x6b\x6d\xdc\x07\x70\x37\xc9\xd2\x98\x80\xff\x93\x7d\x6f\x75\xfd\x6d\xb3\x69\x20\xc4\xe7\xe8\x1b\x09\x6e\x1d\xd7\xe8\x6a\x46\x2a\x59\x44\x05\x1b\x3d\x55\x14\x18\xf5\xc4\x8b\xb8\xa1\xd9\x4a\x96\x5d\x2d\x35\x68\x03\x41\x48\xad\xd2\x98\x6f\xcd\x0b\x3a\xad\x18\xba\x8e\x80\x6f\x06\xf3\xa8\x1d\xac\xa6\x1f\x78\xdd\xd6\xa4\xd5\xf6\xcd\xa4\xe8\x3f\xbb\x7b\xb1\x6b\xdc\x9a\xb8\x57\x6a\x2e\xe0\x47\x3d\x37\x5b\x7a\xf0\x6a\xc1\xc8\x79\x58\x81\xce\xe9\x8b\xe9\x8b\xce\xa7\xa3\x5b\x30\xfd\x1d\x75\xce\x00\x95\x33\x48\xb3\x0d\x76\x88\x26\x80\xe7\x90\xdc\x38\x93\xac\x0b\x0c\xc1\xab\xbe\xc4\x00\xf9\xb5\x88\x16\xa8\x15\xae\x1e\xea\xb1\xee\xe3\x47\xa7\xc5\x0f\xd4\xdd\x73\x69\xec\x59\xf4\xf4\xec\xda\x79\xa8\x2f\xdb\x9a\xba\x17\x0a\xdc\x7a\xfa\x9e\xf3\x47\x6f\x28\x76\xa3\xbe\xce\x28\x08\xd8\x21\x30\xeb\x17\xc1\xf7\xed\x94\xc7\x62\x59\xb8\x06\x42\xbc\xcb\x51\x0c\x79\x6a\xb8\x77\x01\x88\x67\x6c\xff\xcf\xfb\xc8\x7d\xfa\xd2\x94\xcd\x30\xbd\x1f\x7f\x03\xfe\x45\x9d\x06\x09\x84\x51\x82\x8a\x19\x40\x1e\x62\x22\x3c\x14\x6a\x14\x6a\x79\x65\x45\x48\xd2\x93\x7f\xd0\x2e\xc1\x8e\x27\x6e\x0b\x7a\xd0\x43\x94\xd4\xe8\xf0\x13\x8c\x95\x88\x92\x54\x75\x33\xa0\x5a\x91\xf8\xfe\xd3\x03\x32\x63\xd4\xb4\x0a\x73\xd7\x85\x54\x10\x11\x41\x21\x86\xae\x7c\xc5\x2c\x0b\x40\x63\x27\x25\x6b\xa2\x05\x6d\xf4\x42\x1a\x70\x1b\xd3\x86\x16\xdc\x24\xc3\xdb\x18\x45\x8b\x4b\xfb\x64\xc8\x62\x82\x37\x4b\x7b\x8d\xe2\xc0\xd5\xe8\xc7\xbc\xda\xc7\x95\x32\x0b\x25\xdb\xf9\x02\x80\x87\xf0\xae\xa2\xa2\x1a\x51\xae\xd2\x12\x10\x37\x8e\xe9\x1c\x9d\x9a\x94\x4b\x41\x6b\x5e\xf8\xf5\x83\x2a\x32\xcd\xa5\x4b\x30\x01\x5a\x52\xa7\x8d\x92\x33\xa6\x34\xd7\x86\x09\x83\xb9\x2e\x47\x15\xe5\x35\xd9\xd7\x8c\x91\x13\xbf\xd5\xf1\x9b\x73\x34\xd3\x31\xb8\x95\x5e\x76\x10\x27\xcf\xb8\x26\xa3\x0e\x47\xda\x7e\xe2\x83\x7a\x51\x42\x69\x7a\x0b\x08\xb7\x2b\x37\xbe\xe2\xc1\x80\xcd\xb8\x79\xce\xa4\x82\x0a\x21\xe7\x9f\xbb\x62\xa2\x94\x5d\x62\x75\xd2\x58\x87\x67\xa7\x3a\x76\x88\xa2\x4c\x6b\x70\x74\xf8\xc2\x35\x41\x0d\x9d\x0b\x83\x44\x4c\x1a\xcf\x2a\x5c\x82\x70\x51\xf2\x2b\x5e\xb6\xb4\x42\x55\x2b\x79\x9a\x8e\xce\x4f\x91\x48\x3e\x5f\x98\xf1\x35\x83\x70\x22\xea\xda\xdd\x29\xe2\x5f\x8d\xaf\x95\xcc\x72\x0d\x4a\x99\x21\x46\xa6\x09\x24\xe6\xc2\xd8\x76\xd2\xae\xe9\x12\xba\x79\xbb\xb2\xc7\x5e\xa6\xb9\x5b\x31\x37\xec\x4c\xa6\xe9\x0c\xb5\xd7\xf2\x1c\x73\x27\x4e\xdc\x21\x88\xe1\x82\x0a\x30\x5d\x21\x0a\x6d\xf9\x1f\x64\xea\xfa\xac\xa5\x4a\x9c\x26\x70\x70\xf7\x28\x54\x7c\x35\xb5\x3b\x2e\xd1\x23\xb3\x65\xaf\xc8\x55\xb7\x1b\x2f\x58\xdd\x54\xd4\x6c\x3d\xa1\xfb\xa7\x28\x28\x1f\xe5\x0a\xda\xa3\x83\x8a\x72\x4c\x2b\x2b\x32\xce\x7e\x3c\x72\xd0\x65\x28\xd8\xb3\x54\xc6\x5c\x78\xf5\x43\x38\x0b\x07\x4d\xd9\x8d\x32\x1d\xba\xeb\x4d\x59\x09\xfa\x80\xa3\x78\x48\x29\xa5\xbc\x16\x4c\xf9\x7d\x75\xf6\xe3\xd1\x88\xf0\x09\x9b\xf8\xbf\xc2\x10\x5e\x5d\x32\x72\x8e\xe0\x14\x1e\x22\x27\x3d\xc3\x50\x96\x13\x7c\xf5\x38\x7e\x1d\x8f\xf9\xcb\x1f\xed\xa4\xd8\x6f\xff\x34\xfe\xa3\x3b\x60\xe0\xaf\x5f\xac\xd6\x36\xa0\x9a\xee\x97\x95\xa7\xc5\x78\x00\xa0\xee\xd8\xbf\x7e\x39\x93\xe5\x79\xc3\x8a\x09\x4e\xbf\xfe\x65\x50\xd2\x2b\x21\x4c\x18\xb5\x9c\x90\x33\x09\x15\x32\xbc\x44\x81\x06\xef\xaa\xd8\x7f\xfb\x84\x0c\x60\x83\x10\xf5\x2d\xa8\x61\x02\xb4\x5f\x91\xde\xfb\x9c\x78\x5c\x4d\x18\x16\xc4\x3c\x85\x79\xde\x87\x50\x1d\xc2\x8b\x8f\x88\x91\xd8\xa8\x3b\xf5\xb4\xb5\xd7\xa1\x20\xec\x03\xd7\xd0\x47\x04\x57\x12\x98\x84\x3a\x68\x03\x6f\x72\x58\x62\x2c\xdf\x85\xbe\x38\x8d\x4c\xcf\xb8\x85\x19\xfc\x52\x48\xf3\x65\xd8\xbc\xbe\x62\x0d\x6c\x0b\x49\xe8\x95\xe4\x25\x69\x35\xe8\x9c\x82\xb4\x02\x52\x16\x06\x40\xc8\x3a\xee\x99\x2e\x49\xcd\xb5\xa1\x97\x6c\x42\xce\xad\x39\x12\xa7\x11\x23\x4f\x09\x32\xad\x64\x71\xc9\x4a\xd2\x0a\xc3\xab\x41\x9e\x99\x40\x37\x4c\x6d\x64\xaa\x00\x68\x6c\x5b\x58\x2d\xb7\x51\x6c\xec\x0d\x26\xbc\x6b\x80\xc7\x18\x0f\xf4\x30\xab\xdd\x5a\x8d\xc2\x56\x5d\x50\x74\xdd\x36\x25\x0c\xe9\x6a\x5f\x07\x0a\xa3\xb5\x3a\x7d\x3b\x9f\x12\xfe\x76\x7f\x00\x93\xe9\x09\x79\x0b\x96\x4b\x95\xbe\x29\xb1\x68\x02\xbd\xdd\x2e\x43\x46\xb0\x82\x69\x4d\xd5\x12\x0b\x8b\xb9\xf1\x35\xed\xad\x66\xb3\xb6\x02\x83\x31\x7d\x52\xa9\x68\x2d\xc1\x44\xb1\x42\x0a\x6d\x54\x5b\x00\xd7\x50\x32\x55\xf2\x92\x89\x0e\xe8\x63\xc0\x61\x12\x57\x4c\x77\x45\x9d\x56\xbd\x16\x92\x14\x0b\x2a\xe6\x2c\x40\x09\x93\x9a\x96\xc0\xc9\xdf\x05\xe7\x47\xfa\x64\xca\xc0\x17\x74\x66\xac\x5a\x68\x80\x41\xa6\xd6\x4a\xf0\xd9\x48\xe9\x2f\xf6\x3e\x14\x7c\xd7\x51\x42\x93\xe0\xd5\x16\x4b\x0d\x87\x67\x94\x8c\xc1\x5a\x4d\x75\x18\x66\xc8\x20\xa9\x99\xa1\x25\x35\x74\x57\x30\x04\xde\xd0\x65\xc8\x4c\xc3\x9c\x7d\x60\xdd\x28\x97\xdf\x99\x09\xde\x3f\x24\x1b\x1e\x03\x5a\x9f\xfd\x78\x34\x68\x7c\x70\x08\x01\xb7\x42\x37\x2c\x63\xa5\x8c\x4b\x5d\x84\x5d\x85\xd0\x11\x1e\x11\xc0\x92\xe6\x29\xc1\x63\x9c\x95\xa4\x6c\x07\x47\xb3\x3b\x15\x61\x48\xee\x54\x96\xcc\x29\xcb\x9f\xbb\xc2\x1c\x17\x5d\x32\x7a\xd1\xaf\x4e\xdf\x68\xe8\x63\xce\x22\x13\x86\x2b\x16\x01\xae\x0f\x22\xc1\xf1\x5b\x2b\x50\x92\xf6\x39\x0f\x59\x73\xce\x8c\xee\xca\x2e\x51\xa1\x1c\x38\xaa\x71\x46\x12\xbe\x11\x58\x7e\x9e\x1b\x5d\xac\x65\xe3\x04\x0c\x1a\x13\xf9\x5c\x4b\xa7\x38\x5a\x95\x7b\xeb\xcc\x98\x2f\x6b\x8e\x16\xf6\x9c\x7f\x23\xcb\xe1\xe9\x77\x79\xf3\x40\x7b\xa4\x75\xe0\x36\x88\x01\xa5\x21\xdc\x89\x37\x40\x2a\xb5\xee\x81\xdb\xa3\x26\xb3\xa0\x57\x83\x01\xa0\x93\x63\x61\x9d\xbf\x62\xec\xc3\x62\x48\xee\x18\xc8\x1d\xbf\x1c\x48\xd8\xf0\x02\x44\x7f\x0d\x2c\x44\xec\x13\x94\x25\x47\xec\x1e\x20\x5e\xfd\x65\x8f\xf8\xf3\x2c\xf9\x61\xb9\xb9\xbd\xa3\xcc\xa9\xad\xae\x5c\x20\x14\xb6\x38\x58\x4c\xc6\xed\x21\x3c\x7c\xbd\xbe\xec\x99\xa9\xce\xb9\x12\xe2\x1b\x08\x29\xb5\xef\x03\x1e\x13\xc7\xd6\xbe\xfb\x56\xff\xf6\x83\xcc\xc4\x80\x55\xbe\xd9\x07\x3e\x78\xa4\x53\x57\x1d\xe9\x3d\x57\x4c\x41\xa5\x4e\x04\x6d\x69\x45\x8d\x92\x55\xc5\x14\x2c\x81\x0b\x6a\xac\x14\x80\xd9\xd5\x22\x98\x06\x98\xde\x8f\xc3\x5f\x3e\xcc\x17\x5c\x6d\x82\x5d\x07\xeb\x9a\x6a\xec\x74\xed\x33\xe0\x21\x7c\xe9\xab\xfa\x36\xd1\x33\x5c\xe4\xfd\xe4\x83\x81\x87\x62\x89\x93\x7f\x1c\x31\x27\x86\xcc\xc8\xdc\x92\xca\x35\x61\x82\x4e\x2b\x6b\x8e\x44\x0c\x1c\xe8\x5c\xd1\x4e\x8d\x8c\xee\x7a\xcf\x66\xc3\xa7\x0e\x62\x98\xf1\x23\x3f\x6d\x6c\x54\x6f\x7b\x3f\x9c\x74\xb5\xb0\xce\x37\x93\xa1\x21\xb0\xbf\x1c\xd7\xf5\x86\xe8\xd7\x47\xad\x50\x13\x77\x9b\xd9\xf8\x06\x43\x69\xca\x56\x4d\x90\xaf\x9e\x00\xfa\x85\xf0\xc4\xf8\x40\xff\x31\x83\xfc\x84\x78\xe5\x2b\x4b\x80\x2a\x5f\x28\x09\xcb\x91\xdf\x9d\xfb\xdc\x21\x18\xb6\x03\xfa\xbc\x0b\x78\x0e\x7f\x78\x9b\x22\xe4\x3b\x4f\x99\x95\xce\x5d\xf3\xa9\xe1\xfb\x82\xe0\xde\x88\xc7\xdf\x50\x3a\xd8\x89\xb9\xef\xb8\x28\x43\x11\xa7\x07\x85\xb5\x0a\xda\xe1\xd9\x29\x52\x9d\x87\xa6\xd7\x70\x26\x2c\x9d\xc1\x6b\x16\x5c\x95\xe3\x86\x2a\xb3\xc4\xd0\xd6\xa8\x47\x71\xc0\x73\xcc\x30\x74\xd6\x4c\x7b\xbb\x99\xb2\xb3\x1c\x2c\x81\x4f\x4b\x74\x79\xb3\x37\x72\xc8\xae\xcd\xc8\x50\x94\x48\x7f\xf5\x66\xe4\x6d\xd7\x0e\x2d\x04\x71\x1e\xc9\x8c\xdc\x57\xc5\x38\xe9\x9f\x66\xbb\xab\x6b\xdb\xa3\x56\xf7\x6b\x97\x50\xf5\x05\x7f\x85\x0b\x43\xca\x18\x36\x2c\x58\x99\xe0\xe5\xb7\x4f\x1a\x11\x3e\xb3\x4a\x9b\x14\x63\xc8\x7c\x1c\x4c\x5e\x97\xf6\xe4\x2c\xdd\x89\x2b\x6f\x46\x0f\x3c\x08\xa6\x88\xca\x68\xe8\x4e\x0e\x92\x7d\x21\xd3\x1d\xf4\xfe\x02\xd9\x8a\x63\x1d\x60\x45\xfb\x0d\x99\x24\xd3\xe1\x2d\xac\x48\xa7\x79\xc6\xae\xfb\xe8\x2c\xf0\x2a\x31\x17\xa5\xdd\x54\xa0\x22\x81\x53\x5f\xb7\x45\xc1\x58\x08\x19\x3a\xb1\x34\xdc\xa4\xed\x9d\x3d\x6e\xca\x6b\x6a\x8a\x05\xd3\x44\x4b\xe8\x75\xac\x0d\xad\x2a\x56\x86\x54\x27\x64\x14\x09\x56\x85\x4b\x83\x1a\x4c\x47\x64\xac\x0c\x9f\xe2\x28\x30\xe2\xa2\xae\x4d\x45\x5d\x50\x69\xd6\x8a\x02\xeb\x17\xb9\x59\x86\x2c\x93\x55\xc3\x14\xfc\xd0\x1a\x62\x6d\xc3\x4d\x9f\x19\x66\x8c\x44\x3e\xe5\xc0\xcc\x70\xf8\x2f\xf1\xb8\x5f\xd0\x2b\xd6\x65\x7b\xb8\x2e\x91\xf6\x94\x0e\x50\xb7\x19\x78\x3d\x82\xca\x1d\xa1\x85\x10\x2b\xec\xe2\x59\x9c\x0c\xce\x45\x6e\x53\x26\x9e\x87\xfd\x68\xd2\xd7\x4c\x9c\x83\x60\xda\x68\x66\x02\x88\xf7\x70\x8d\x97\xb8\xfc\x79\xda\x1a\x59\x53\xc3\x0b\x08\xd1\xf1\x59\x94\x24\x56\x63\xe2\x85\x95\x34\x3e\x11\x1e\x55\x24\x50\xdc\xdc\xba\x65\x12\x03\x9b\x8d\xa5\x7b\x98\xf8\x68\xae\xdd\x2a\xf7\xa7\xd5\x4f\x4b\xa4\x7a\x66\x7a\xcf\x0b\x8f\x88\x4c\xcc\x42\x31\x46\x78\xdd\x48\x65\xa8\x30\xa4\xe4\xb3\x80\xd1\xed\x33\x0c\x6f\xe3\x89\x1c\xfe\xa0\x9f\x20\xaf\x36\x1a\x05\x03\xa6\x55\x25\xaf\x35\x31\xd7\x32\x84\x1c\xba\xfc\x2e\x87\x79\x3c\xea\x13\x93\x41\xc7\x71\xa3\xda\xa3\xce\xf2\x55\x74\x0e\x8d\xac\xec\xb9\x66\x55\x65\xff\x7b\xdb\x69\x34\x18\xc7\x64\xe3\x9c\xf0\xb9\x40\x18\x5a\xae\x7d\xf0\xcb\x61\xa8\xec\x97\x4a\x36\x8d\x4b\x7e\xa8\x0f\xf2\xcf\x09\x24\xaf\xab\x2b\xa6\xa1\xc8\xc4\xe3\xba\x58\x56\x98\x33\xc1\x14\x35\x90\x5e\xe7\xfa\xb9\x82\x4a\xb2\x4a\xe4\xd0\xa0\x0f\x5e\x19\xfd\x22\x1f\x61\x3a\x4c\xbd\xdc\xcc\x64\xfe\x1e\xf7\x6d\x86\xf7\xe2\x02\xf9\xcd\xcb\x9d\x0c\x0c\xb4\xff\x2d\x33\xf4\x80\xfc\xa0\x91\x2d\xc2\xc9\x1b\x70\x78\x3e\xc9\xcb\xe6\xf0\xd6\xd1\xd1\x96\x81\xa8\xc3\xaa\x59\x44\x54\xc5\x7e\xa9\x00\x21\xd7\x9f\xeb\x1e\xbd\x47\x4a\x6a\xfd\xd6\xff\xe4\x01\x49\x7f\xf2\x59\x7d\xe4\x7a\xf2\x59\x3d\xf9\xac\x9e\x7c\x56\x70\x3d\xf9\xac\x56\xaf\xcf\xc5\x67\x45\xba\xe3\x6a\x57\x65\xd3\xdb\xd8\x74\xe9\x1f\xb0\xf7\x3c\xcf\x84\xbc\x95\xc6\xa5\x18\x83\x05\x4b\x6f\x0c\x3a\x51\x38\xa1\xaf\xe9\x72\x22\x98\x71\x9d\x4c\x7c\x7c\xf7\xbd\xa7\xe9\x2f\xca\x5a\x23\xce\xf5\x11\xc9\x0d\x2f\xc8\x7c\x7b\x9b\x68\x14\x23\x51\x35\xeb\x32\x9e\xe1\xf3\x67\xda\xe5\xb5\xda\xef\x01\xb2\x30\x7e\x40\xc1\x26\xe4\xdc\xd5\xba\xac\x0c\xbe\xde\x64\xa1\x64\x86\xf2\x21\xbd\x9b\xe2\xcb\x6b\x43\x17\x37\x68\x67\x5b\xd3\x76\x48\xce\x6d\x13\x40\x97\x76\xcd\x15\xdb\x81\xb8\x45\xd5\xb9\x71\x4d\x7f\x77\xc3\x7d\x65\xf8\x9c\xce\xc8\x7b\x56\xc8\x2b\xa6\x70\x75\x4f\x3e\x34\x54\x68\x2e\xc5\x6b\xca\x2b\xbb\xb6\x7e\x8d\xbb\x68\x37\x69\x35\x53\xfd\x14\xc8\x28\x45\x23\x6c\x70\xc7\x48\x96\x7b\x87\x1b\x28\xa1\xbb\x89\x1d\xcf\x55\xd0\x35\x8a\x5d\x71\xd9\x6a\x8f\x7c\xd0\x1a\xd4\x34\xb4\x71\x1e\xa2\x05\x9f\x2f\xfc\xcd\xbe\x62\x15\xb2\xae\x55\x19\x36\xf1\x60\xca\xb4\xa1\xa6\xd5\x7d\xf8\xe9\x02\x12\x0f\x77\x28\xfb\x2a\xf0\xd1\xee\x18\x21\x39\xd5\x75\x44\xa0\xd8\xd5\x03\xf1\x7b\xc4\xc7\xc0\x47\x4f\xdd\x5e\xf6\x50\x1f\x1d\xac\x49\x21\xeb\xa6\x35\x2c\xda\xf3\x6e\x77\xe5\x11\xf5\x77\x64\xa6\x5e\xff\xa7\xe7\x35\x15\x74\xce\xc6\x81\xb4\x71\x87\xf2\xf1\x3c\x9b\xa4\xcf\xc2\x56\x24\x7b\xf3\x9f\xf8\x7a\x74\xe8\x1c\xfd\x2b\x1b\xce\x1e\xb9\x17\xac\x3d\x92\x1f\x6f\x8f\xdc\x3f\xe6\x1e\x09\x10\xa8\xbb\x2a\x80\xde\x3b\xfa\x56\x45\x90\x53\x32\x6e\x13\x41\x39\x4d\x65\xa7\x6c\x38\x5a\xb8\x26\xb2\xe6\xc6\x30\x5f\x8e\x18\x44\xca\x88\x70\xd3\x43\xc7\x74\x02\x14\x02\x9c\x58\x3d\xc8\x3e\x34\x15\x2f\xb8\x89\xda\xd7\x25\x02\x48\xac\x5e\xe0\x40\xb8\xe6\x1a\x55\x79\x41\x78\xdd\x54\x2c\x68\xe0\x63\x87\x2e\xe4\x83\x70\xe1\x6d\x0a\xa8\x4d\x21\xec\x03\x84\x62\x91\xe0\x27\xb9\x7d\xc7\xeb\x49\x6e\xdf\x70\x3d\xc9\xed\xec\x72\x1b\xb1\x4b\x87\x43\x01\xf7\xe4\xb5\x7f\xa8\xeb\xbe\x44\xa7\xac\x22\xbf\xb6\x4c\x2d\x89\x35\xb0\x3a\x5c\x10\x69\x85\x9d\xe6\x25\xe2\x57\xf8\x9c\x8e\x1d\x8a\x10\xe4\x54\xce\x21\x67\xe4\xe4\x83\xb5\x6f\xa1\x2b\x45\xf6\x53\x72\x75\x80\x7e\xef\x2b\x5c\x85\xb0\x32\xb1\x55\x8a\x85\x54\xf1\x27\x60\x62\x1e\xbe\x3d\xce\xe9\xc0\xc8\x51\xa6\x42\xf2\x95\xaa\x90\x7b\x52\x32\x08\x39\xbc\x65\xae\x71\x4d\xc2\x37\x70\x8e\x87\xb2\xa6\x10\xcd\x25\x97\x6c\x39\x72\xa5\x9e\xc4\x72\x20\xf5\x37\x67\x22\x11\xab\xe7\x51\xfd\xb9\x64\x98\xc7\x31\xac\x57\x69\xff\xca\x7c\x20\xe6\x0c\xd5\xe1\x35\xb6\xaf\x9d\xed\x59\x7e\x89\xf2\x9c\xd1\x99\xcf\x7c\x62\x5f\x35\xd7\xa3\x56\xf6\x8c\xe5\x1d\xe7\xdd\x46\x9e\xb7\x1f\x04\x34\xca\xc0\xe6\x80\x14\x0a\x02\x3f\x0f\x7b\x91\xdc\xc1\x04\xbc\xfc\x32\xde\xd3\x64\x65\x13\x30\x24\xa2\xb5\x8f\x67\x78\xc9\x96\xcf\xb4\x6b\x43\x22\x85\x5e\xf0\x06\xd4\x77\x48\x66\x92\xb3\xac\x5b\x1c\xaf\x1f\xa1\x1c\xd6\x13\x83\xe7\xc6\xa9\x18\x91\xb7\xd2\xd8\xff\x9c\x00\x38\x05\x88\x97\x63\xc9\xf4\x5b\x69\xe0\x93\x9d\xe6\x02\x9c\xa4\xc7\xc0\x03\x2e\xe7\x88\x43\xc6\x0f\x1c\xaf\x88\x5f\x0d\x58\x85\x6e\xad\x7d\xd5\x51\xe0\x17\xae\xc9\xa9\x20\x52\xb9\x25\xca\x48\x0e\xb8\xe6\x91\x24\x24\xc6\xc7\xbb\xbb\xa4\xc0\x4d\xd4\x38\x1e\x91\xaa\xc7\x22\x0f\x42\x98\x23\x0a\xa2\x3e\xf8\x0d\x44\xb7\x20\x17\xd6\x43\x17\x00\xe8\x95\xa2\x86\xcd\x33\x24\xf1\x76\x57\xcd\xd4\x1c\xfa\x04\x15\x8b\xdc\xbb\x21\x97\xa2\x85\x57\x46\x75\x0b\xaf\x7b\xd8\xb2\xf7\x5a\x2d\xfc\x20\x03\x80\xee\xfe\x3d\x40\x7c\xec\xaa\xf7\x2c\x22\x11\xb5\xd8\x9a\x36\x56\xde\xfc\x3f\xab\xac\xc2\xf6\xfa\x1f\xd2\x50\xae\xf4\x84\x1c\x12\xcd\xc5\xbc\x62\xbd\xef\x5c\xb0\x38\x7a\x4c\x26\xb2\x20\x97\xc5\xea\x87\x57\xb4\x62\x88\xd3\x44\x05\x61\xe8\xae\x02\x7c\xee\x15\xc3\x68\x44\xae\x17\x52\xa3\xe6\x1b\x4a\x0c\xf6\x2e\xd9\x72\x6f\x94\x25\x14\x46\xe2\xf3\xd9\x3e\xfa\x54\xec\x75\x8d\xe0\x7a\x92\x28\xe8\xfe\x90\xf1\xb8\x07\xdf\xed\x3d\x8c\x3d\xf6\x08\xdc\x55\x8f\xa2\xc8\xc9\x85\x1b\x8f\x2a\x8a\x29\x02\xbb\x16\x5c\x5f\xa5\x6f\x35\xe3\x07\x90\xee\xa3\x7b\xba\xf4\x0e\x87\x72\xb6\x73\x51\x5c\xc0\x2d\xce\x04\x9e\x91\x81\xb9\x90\xac\x43\x63\x14\x9f\xb6\x86\xe9\x9d\xe5\x84\x1b\x09\x8d\x60\xdd\x42\xff\x54\xbb\xf2\x3f\x6e\xfa\x41\x84\x80\xc7\x75\x2e\xe6\x38\x9d\xad\xe6\x4e\x46\x90\xba\x31\x2e\x82\x54\x0e\x61\x6f\xad\x0a\xcf\xfe\x4d\x03\xa9\x0e\x43\x7d\x78\x3a\x55\x97\xac\xa9\x98\x6e\x24\x56\x9d\x6d\x9c\x18\xa7\x48\x2e\xa8\x86\xac\xfb\x99\x4b\x8a\x6a\x5a\xd5\x48\xc0\x42\xa7\x62\x6d\x33\x66\xc1\x8d\x70\x20\x21\x1e\x84\x09\x01\xe7\xc2\xce\xb5\xfb\x3d\xf4\xbf\x3c\x5c\xe9\xfc\x22\x15\x34\x93\x70\x85\x01\xa2\xe4\x85\xf3\x0b\x51\x43\x44\x1a\x80\x71\x7c\x6d\x66\x20\x5f\xb9\x84\x6e\x81\x00\x7f\x8f\xac\xe4\x4d\x04\xa4\x9d\x09\x03\x39\x36\x82\x9c\x8a\x19\xa3\x9a\x4f\x2b\xe6\x8a\x1b\xb4\xa1\x26\xc3\xfc\x45\x09\xf9\x6e\x1e\xad\x39\x0d\x5a\x04\x37\x7a\x35\xb9\x66\x9f\x8b\xa2\x6a\x81\x07\x04\xaf\x0e\xc0\x85\x4d\x45\xc1\x2a\xd4\x6d\x64\x19\xd0\xb8\xb2\xe1\x45\x44\x89\x44\x33\xa6\x14\xce\xd7\x74\xb9\x79\x37\x93\x52\x32\x4c\x45\x06\x20\x95\x11\xbe\xde\xe6\x0a\x19\xb7\x0c\xc3\x0f\x18\x9c\x2d\x4a\xce\x18\xee\x0e\x5c\x19\x42\xed\x51\x32\xab\x10\x07\xce\x9d\x25\x30\x43\xae\xd2\xe1\x3c\xca\x18\x1a\x21\x28\xa8\xc3\xee\x8c\x1b\x7f\x0e\x26\xcf\x01\x64\x6e\xeb\xfc\xc2\x65\x1a\x77\x92\x69\x0c\xc7\x17\x1b\x1c\x78\xcc\x7c\x7e\xbd\x19\xdc\xdf\xfb\xbe\x0e\x2c\x68\x13\xed\x5b\x62\xf4\x5a\x75\x75\x35\xd2\xf7\xa4\xb3\xfc\x08\x9b\x5e\xce\xc8\x6b\x5e\x31\xbd\xd4\x06\x8b\x1f\x79\x8d\x82\x0b\xcb\x43\xa5\x21\x28\x15\x30\x99\x0e\x05\x97\x3d\xcd\xf2\x04\xb2\xb2\xad\x70\x76\x95\xa4\x7b\xac\xd7\x29\x7d\x55\xf6\x1a\x6c\xed\xaa\x04\x82\x92\xdd\x50\x0f\x95\x65\xb5\x06\xcd\xd6\x2c\x09\xd6\xb1\x37\x1b\xb3\xa2\xef\x8b\x7d\xcd\xa7\x8a\x91\xa3\x05\x15\x82\x55\x51\xbf\x48\x97\xba\x41\x8d\xa1\xc5\x02\xa5\x39\x25\x56\x92\x54\xcc\x3c\xd3\x64\x21\xb5\x21\x35\x2d\x16\x5c\x84\x46\x53\x22\xf4\x4d\xed\x50\x80\x1f\x21\xd0\xfd\x4c\x5f\x58\x02\x12\xd7\x39\x97\x70\x41\x2a\x3c\xc7\xce\xba\x8d\x0d\x52\xc5\x48\x02\x69\x40\x19\x9a\xec\xad\x3d\x3b\xf4\x80\xf6\x52\x0a\xd6\x1a\x3d\x05\x70\x6e\xc2\xbd\xe9\x23\x9f\x7c\x98\x90\x3d\xf6\xc1\x7c\xb3\x37\x22\x7b\x1f\x66\xda\xfe\x47\x98\x99\xde\x9b\x90\xd3\x3a\x24\x0a\x71\x11\xa9\x11\xcc\xfd\x80\xf0\x19\x69\xc5\xe0\xa2\xce\xc1\x12\xab\x6a\x45\x16\xfe\x78\x56\xb5\xc2\x2e\xf1\x3b\xd7\x8a\xf9\x15\x79\x7d\x44\x0c\x55\x73\x66\xec\x18\x44\xb4\xf5\x94\xa9\xd4\x96\xad\x39\x12\x47\x86\xb7\xd9\x57\x8c\x96\xef\x44\x95\x1c\xdb\xcb\xb5\xa1\x3c\x1d\xfd\xf9\x3e\x8e\x12\xd7\x66\xb4\xd2\x8c\xec\xdb\x1b\x9f\x5f\x2b\x6e\xd8\xc1\x84\xbc\xf7\xbf\x82\xf2\x77\xd0\x45\x67\x72\x88\xbe\x87\x55\x23\xee\xa1\x9a\x19\xc4\x2c\x16\xce\x06\x79\x63\x37\x75\xb2\x16\x88\x0b\x3e\x95\xb2\x62\x89\x90\xee\xc8\x7b\x3f\xfd\xf4\x36\xd9\x35\xd6\xe7\xef\xee\x79\x37\xb1\xf9\xb5\x54\x55\x79\xcd\x4b\x57\x78\x44\xf6\xed\xcd\x07\xc3\x58\x7e\x48\x68\x61\x60\x20\x21\x77\x5b\xbb\x3c\x3e\xfc\xeb\x6b\x5e\xe6\x59\xd1\x01\x1b\x10\x88\xe8\xf3\x80\x77\x8c\x58\x1e\x20\xc0\x04\xbc\x64\xc2\x58\xe1\xae\x34\xd9\x87\x5f\xa4\xe3\x68\x9e\x70\xec\x7b\x02\xe3\x4a\x45\x0a\x59\x4f\xb9\xe8\xda\x12\x75\xbc\x69\x15\x18\x2b\x6f\x7d\xc4\x4d\x33\x83\xbd\x04\x00\xd5\x50\x9a\x05\xd1\xbc\x6e\x2b\x43\x05\x93\xad\xae\x92\xe1\x34\x9e\xd8\x73\xed\x9a\x55\xec\x03\xca\xbe\x6d\x35\x5d\xec\x28\xe8\x6b\xc6\x80\x54\xd1\x75\x86\x5b\x55\x8d\x93\xc6\xea\xe0\x91\xca\xe7\x41\xb5\x0e\x7d\x4e\xd8\x07\x56\x38\x14\xd5\xa6\x6a\xe7\x3c\xd1\x3b\x73\x6c\xdf\xa2\xa0\x86\x95\xaf\xc8\xeb\xee\xe5\x00\xa3\xcb\x7f\x33\x21\x47\x3e\xa7\xd1\x0d\x4f\x8e\xce\x4f\x8f\x5d\x73\x30\xa1\x0d\xa3\xdb\xd0\xdd\x87\x25\x50\x8d\x9d\x2b\x76\x0b\x46\x03\x0e\x9c\x45\xc4\x76\x1d\xda\x56\xe3\x1f\xee\x1b\xd7\x79\x3b\x74\x50\x1e\xd6\xcc\x6a\xb0\x48\x78\xb2\x97\xb6\x66\x2f\xc5\x0d\x97\x23\xb2\x4a\xd6\x30\x61\xcf\x3c\x11\xef\x7f\x9c\xe7\xad\xb1\x89\x84\x35\xce\xa4\x57\xba\x87\xf5\x95\xca\xc8\x47\xbe\x90\x55\xa9\x09\xfb\x60\x14\xb5\xc7\x7e\x6d\x0f\xf8\xf0\x9b\x19\xa1\x62\x39\x19\xa6\x62\x0e\x0a\x4b\xe7\x0d\x45\x0f\x5e\x99\xdd\xb6\xd0\xca\x27\x0b\x2d\xbe\x34\x2b\x14\x33\x03\x60\xd4\xb2\x35\xfe\xf7\x84\xf4\x97\xab\xf7\xf1\x9a\x83\x15\xbf\xf5\x20\x0d\x2e\xad\x64\x88\xdf\x58\x33\xa1\xb9\xe1\x57\xbd\xee\xa0\x00\x83\x4a\xb5\x0e\x7e\x48\x50\xa6\x9c\x00\xd4\x3d\x84\xd2\xe4\x81\x31\x3e\xc9\x67\x44\xc8\x95\xb7\x8a\xa1\x2b\x42\x9c\xb0\x77\x4b\xf2\xa0\x21\x0f\xa7\xc6\xc6\xda\x54\x00\xe0\x21\x3e\x7c\x04\x58\x6b\xf8\x6f\x4c\xc5\xb1\x73\x10\x79\x63\x61\x16\xd2\x67\xda\xcd\xde\xf6\xc4\x66\x8e\x94\xf3\xa1\x08\x35\x39\x63\x47\x6f\x23\xd5\xce\x83\x93\x0c\x0b\x2f\xf4\x3b\xc9\xb1\xd9\x8c\x15\x76\x6f\x40\xf7\x3a\xdf\x8a\xcd\x9a\xb5\x65\x8b\x00\x20\x1e\x90\xb4\x0f\x28\x3a\x14\x7a\x2f\x82\x99\xe8\xb2\x57\x4f\x85\x36\x14\x30\x22\xe1\x8d\xad\x9e\x66\x95\x27\xd7\x7f\xd0\x6d\x27\x8c\x5e\x7b\xa4\xc9\x81\x44\xd4\x56\x0d\x2b\x98\xb2\x3b\xa6\x5a\x92\x6b\x25\x87\x16\x6d\xdd\x31\xb6\x2a\xaf\x98\xba\xe2\xec\xfa\xb9\x43\xac\x19\xdb\x97\x1d\x3b\x10\xc0\xe7\xe0\xee\x7a\xfe\x05\xfc\x67\x00\x55\x99\xa2\x6f\xee\x94\x7d\x45\xf6\xf6\x72\xf8\x05\x06\xa7\xae\xcd\xa0\x09\x67\x92\x41\x95\xc7\x27\x00\xc3\xaf\x84\xca\xdc\x87\xce\x21\xf0\x29\xa1\x31\x77\xd6\x44\x0a\xb9\xdd\xec\xfe\x41\xae\x7d\x0b\xd1\x96\x4f\x3a\x90\xa5\x56\x88\xe4\xfa\xc2\xbe\xed\x8f\xc3\xf4\x0c\xff\x90\xe0\xc9\xc5\xd8\x28\xc6\xc2\xab\x1a\x67\x3e\x09\xe9\x1b\x9f\x07\xc3\xe6\x11\x06\xf1\x4a\x6a\xa8\x66\x66\x48\x30\x39\x97\xa8\x8f\x48\xb1\xf3\x1b\x4b\x7d\xf7\x15\xe4\x5b\x31\x40\xaa\xf6\xbd\x1d\xc9\xf8\x4f\xce\xf4\x17\xbd\x3b\xad\xd1\xef\xd6\x35\xfd\x24\x47\x44\x22\xe8\xd6\x82\x3e\x20\x1c\xbb\x63\x92\x6d\xd9\x88\xee\x2d\x7f\xf8\xe1\xf4\x38\x8f\x2b\xa5\x7b\x9e\xf7\x0c\xc0\xbf\xfb\xd3\xef\x36\x29\xd7\xa4\x15\xfc\xd7\x36\x76\x42\x43\xd7\xfe\xb0\x91\xdc\xfd\xdb\x98\x9d\x79\xc1\xba\xe4\x84\x63\xae\x2f\xb7\x25\x19\xd7\x08\xe9\xcb\xc8\xbf\x1c\x9d\x10\xf7\xe9\x6d\x99\x04\x49\x43\x3f\x4c\xf6\x41\x5f\x86\xfe\xe5\xe8\x64\xe5\x75\x57\xdc\xa8\x87\x55\xe5\x7d\x3d\x52\xe8\x00\xea\xe9\xa4\x6b\xa6\x29\x06\xd9\x6c\x35\x7a\xc5\x4a\xae\x30\x55\xcd\xbf\x65\x39\x29\x34\x0f\x4d\xcf\xe6\x97\x6c\xc2\x65\x94\x96\x9a\x36\x05\x83\xb2\xc8\xf4\x17\xf3\x82\x75\x09\xd1\x25\xd7\x97\x8f\xcf\x93\xdc\x94\x6f\xd3\x40\x6e\x3f\xb7\xf4\x93\x55\x77\xa7\x93\x9d\x4e\x09\x82\xdd\xbd\x94\x2d\xb9\x76\xbd\xc7\x07\xba\x59\x2f\x78\xf3\x8a\x9c\x08\xdd\x2a\xd6\x55\xe8\xae\x92\x60\x2d\xec\x7b\x77\xba\x42\x93\x7d\xfd\x6a\xcb\xa9\x2a\x3b\xb1\x15\x49\x8e\xb3\xbd\xa1\xca\x80\xd7\x73\xdb\xac\x1d\x08\xf1\x2a\x41\xf4\x81\xb8\x4f\xde\x3e\x9d\x79\x0c\xa5\x91\xeb\x0d\x8b\x9e\x7b\xae\xc3\xc3\xbb\x8c\x69\xd0\xfe\x72\xf0\xef\x6b\x19\x2c\x96\xe7\x25\xbb\x7a\xae\x4b\xfa\x72\x04\xaf\xe5\x31\x20\xfb\x73\x40\x35\xd9\x7b\xb9\x97\x3e\xf2\x39\xaf\x79\x45\x55\x85\x3d\x51\x42\xb3\x99\xf0\x7c\x7b\x42\x7a\x42\xa0\xec\xec\xc5\x1e\xd9\x97\x0a\x28\x2a\xa8\x20\x15\xf3\xfd\x53\x9c\x24\x5d\xa2\x73\xe0\xe0\x33\xd9\x42\xdb\xce\xc7\xc2\x83\x6d\xeb\x9b\xb0\xf4\xf6\x90\xd3\xb9\xe3\x38\xe7\xd9\x71\xa7\x3e\x72\x61\x75\xb0\x09\xf9\xc1\x69\x76\x4e\x37\x47\xae\x2d\x41\x21\xc3\x3b\x3e\x0f\xee\xf8\x9c\xc2\x38\x2b\x01\x99\x7b\x0d\xac\x90\xf5\x4c\xbe\xcf\x84\x23\x52\x83\x45\x73\x6e\xde\xb3\x46\x6e\xcd\x4e\xc4\xe1\x57\x52\x6a\xb8\xb1\x1f\x48\xcd\x8d\x54\x4b\x42\x0d\xa1\x78\x32\x14\x6d\x45\x15\x51\x0c\x93\x63\x32\x98\x6d\x6e\xf4\x15\x63\xed\x42\x76\x19\x38\x31\x86\xa1\x73\x43\x07\xfa\x46\xee\x34\x4e\x8c\xd1\x9d\xd8\xf3\xea\x98\x2b\x2b\xa5\x25\x56\x85\x71\x73\x14\x06\x43\x38\xa5\x4a\x0a\x07\x6d\x64\x47\x74\x59\x38\x73\x6e\x5c\x8b\x5d\x24\xc0\x7e\xed\x9f\x96\x44\x0a\x50\x00\x32\x55\x96\xcf\x74\xf7\xc6\x8f\x30\xb7\xa7\x63\x9c\x6d\xf8\x13\xc1\xec\x96\x6a\xeb\xd2\x35\x10\x12\x9a\x44\x60\x1e\x6d\xf7\xf9\x30\xc5\x11\xf2\x5c\x84\x0c\xc1\x59\x82\x35\x8c\xca\xe0\x1e\x79\x36\x99\x3c\x9b\x80\x2a\xfb\x6c\xf2\xcc\x1b\x62\x55\x28\x87\x75\xda\x5e\x47\x8c\x2f\xa2\x1c\x02\x58\xd0\x97\x1a\x13\x42\xde\x79\xd4\x4f\x68\x67\xb9\x52\x91\x1b\x8a\x6d\xab\x2a\xbc\x03\x34\x5d\xe9\xcb\x9e\x01\x91\x50\x88\xe7\xb6\xd3\xf8\x25\x5d\x61\xef\x9c\x5f\xb9\x6e\x70\x5b\x4b\xb3\xe9\x5e\x31\x0b\xa7\xc6\x33\xe6\x1c\xa8\xef\xbf\xdf\xde\xbb\xa1\xe8\xce\xf4\x66\xee\x1c\x70\xef\x55\xc8\xba\xe6\x86\x2c\xa8\x5e\x04\x2f\x5e\xd7\x19\x67\xd8\xd1\x34\xd4\xf9\x5b\xb5\xda\x30\x35\x4b\x92\x5d\x59\x0e\x73\x4f\xc0\x8a\xb3\x37\x7c\xec\x30\x89\x45\xe7\x8a\x81\x43\x4e\x2f\xa8\x62\xf6\xce\x06\x4e\x9f\x8a\xcf\x98\xe1\xa9\x9b\xa3\x77\xbe\x87\x91\x6f\x0f\x6e\x75\x84\xef\x56\x78\x6b\xe8\x59\xc8\x44\xd9\x48\x9e\xda\xaa\x61\x4c\x1a\x6a\x52\x1a\xa2\x0e\x3d\x45\x03\xd9\x59\x76\x70\x78\x9a\xdf\xc2\xfe\x03\x34\x26\x81\x03\x5d\xff\x95\x88\x61\x8c\x6c\x64\x25\xe7\x03\x73\xf8\x07\x39\xc2\xcc\x62\xdb\x5a\x84\xa5\xc1\xcf\x5a\x37\x35\xc1\x57\x63\x06\xa0\x7d\x6d\x30\x9e\x98\x73\x46\xf9\x96\x3d\xce\x50\x7a\x1e\x76\xe7\xf3\xf7\x27\x87\xc7\x6f\x4e\x26\x75\xf9\x05\x62\x40\x8c\xe9\xb8\x91\x5b\x0b\x43\x3e\x0a\x4b\x7a\x6d\xd9\xd0\xfb\x0c\x92\x98\x95\xa8\x93\xd8\x07\x8c\x01\xb3\xa9\x61\xaa\xe6\x88\x2b\xb5\xab\x26\xf6\x56\xb8\x24\xd5\xba\xb6\x67\xdc\x59\xe2\x46\xce\xc1\x1e\x7e\xfc\xfe\x81\xdc\x28\x36\x06\x20\x09\x6b\x4b\xce\x78\x05\x40\x34\x9d\x9e\x1a\x9d\xcf\x49\x83\xfa\x88\xab\x0f\xe9\xe2\x93\xab\xe5\x6a\xe4\xb5\xb3\x32\x43\x64\x1d\xdb\xbe\x56\x55\x5a\xdd\x13\x60\xf9\x58\xa5\xcc\x45\x81\xe8\x1c\x5e\x58\x2a\xd7\x41\xb0\x51\xfc\x8a\x57\x6c\x6e\x49\x58\x70\x31\xd7\x5d\x07\x22\x97\x8c\x96\x34\x2c\x60\x0c\xb1\x4e\xa7\x09\x49\x3d\x6f\x20\xb5\x2c\x80\xf3\xe3\xd6\x7c\xfb\xee\x82\x08\x86\x24\x24\x6e\xb2\x81\x8e\x27\x4b\x64\xe2\xc9\xbe\xed\x68\xeb\x76\xf4\x91\x9d\x39\x8a\x7d\x42\xca\xa6\xad\x3a\x28\xe0\x84\xb1\x1d\x3c\xec\x29\xd1\xcb\xba\xe2\xe2\x12\x5a\x76\xb8\xe3\xc4\xb5\xbf\x63\xc4\x7e\xe1\x37\xb0\x62\xb4\xca\xaf\x06\x3c\x10\x2b\x93\x1c\x2a\x80\xd9\x81\x18\x3c\x98\x2c\x56\xea\xfd\xd5\x0b\x7b\xf4\x94\x67\x39\xbf\x93\xf3\x3c\x1f\xf5\xd2\xf2\x9a\xce\xb7\x56\x68\x0a\x83\xf7\x0e\x6c\x41\xde\x1d\x9d\xfa\xba\x81\xfd\xd8\x21\x8d\xf7\x4a\x45\xa8\x32\x7c\x46\x0b\x73\x40\x9a\xb6\xaa\x9c\x89\xeb\x95\x3c\x27\x25\x6e\xc8\x3d\x4d\x22\xf2\xa2\x73\xa1\x41\x01\x87\x96\xd5\x95\x1d\xd5\x58\x1b\x1e\x3d\x81\x6d\xe3\x12\x5a\x01\x9a\x4d\x90\xeb\x05\x2f\x16\xe4\xac\xad\xaa\x33\x59\xf1\x62\x19\x1a\xb8\xa3\xb3\xbd\xb4\xc7\x42\xe2\xb9\x70\x58\x5d\xd3\xa5\x7e\x15\xbf\x25\xa1\xf0\x19\xa1\xc6\xb0\xba\x41\x66\xb6\x53\xb3\xda\xa2\xb3\xf3\xb7\x83\xb2\xc8\x2d\xa1\x20\xf2\x28\xaf\x82\x64\x6c\xdd\x07\x89\xe7\xf5\x98\xbc\x65\x57\x4c\xf5\xe9\x13\xf6\x23\x78\xb4\xee\xd3\x04\x4b\x07\xda\x78\xab\xc1\x2b\x82\x3d\xe3\xd7\x96\xfa\x23\xb4\xf3\xd9\xca\x63\xb9\x16\xcf\x0c\x71\x5c\x95\xfa\x22\xa7\xb3\xb7\xd2\x9c\xe1\x33\xfa\xef\x83\x6f\x72\xc3\xa8\xb4\xb2\x36\xc6\xd2\x8f\x6e\xd9\xa1\xe4\xfa\x72\xd0\x2b\x04\x2f\x4e\xbc\x3c\x43\x99\x79\xce\x8c\x65\xe7\x71\xe0\x68\x47\x83\xe5\x6a\xf8\xae\xb4\x2f\xeb\xf6\x97\x62\x0e\x8a\x70\xe4\x98\xbb\x66\x54\x78\xbc\x41\x76\x4d\x14\xab\xa5\x41\x3d\xd7\xd2\xeb\x9c\xdc\x85\xac\x19\xa1\x57\x94\x57\x74\x5a\x41\xe6\xae\x7d\xb8\x7b\x56\xb2\xef\xf0\x10\x66\x00\xf2\xa1\xa4\xdf\x8f\x96\x5b\x02\xcf\x23\xff\x38\x18\xf0\x78\x93\x22\x59\x95\x2c\x2e\x63\x5d\x75\xa6\x64\x8d\xb7\x60\xd5\x79\x09\x95\x50\xb4\x2c\x89\xe6\x73\x01\xc0\x80\xc2\x90\x8a\x1a\x26\x8a\xe5\x84\xb8\xc6\xa2\x1d\x1c\xa2\x62\x46\xf1\x50\xb5\x2e\xa4\xaa\x69\xe5\x27\x79\x4a\x8b\x4b\x39\x9b\xc1\x53\xbb\xfb\x5d\xa2\x96\x13\x56\x38\x27\x54\x4b\x81\x83\x33\xad\xe9\x7c\x80\xb0\x82\x8e\xe1\x56\x81\x72\x85\x15\xb8\x4a\x0e\x2a\xd4\x0b\x4a\x8f\x03\xea\x53\xf7\x95\x87\x6a\xeb\xa0\xd8\x02\xbf\xaa\x56\x18\x6e\xc5\x5f\xaf\x97\x18\x81\x88\xe1\x5a\xe2\xa9\x1d\xca\x35\x66\x03\xf0\x08\x07\xb1\x06\xa5\x58\x57\xd0\x75\x00\xe9\x5b\xcb\x57\x5b\x15\xf5\x50\xb5\x93\x3e\x0b\xd1\x39\x02\xdc\xec\x5f\x9c\x5b\xaa\x1d\xcc\x75\xa7\x5d\xee\x03\xee\x5b\xc7\x14\x7f\xff\xf2\x1f\x93\xab\x38\x0a\x0f\x3f\xb7\x2a\xc7\x81\xa5\xb7\x66\x6a\x8e\x28\x68\x8c\xd4\x54\xf0\x19\xd3\x96\x43\x96\x96\x9d\x5c\x74\x45\xd3\x9a\x91\x6b\xcb\x48\x98\x03\xbb\xf2\x7a\x89\xf2\xf5\x62\x25\x9e\x13\xad\x68\xe7\xda\xd8\x57\xf2\x00\xd6\x02\x00\xfc\x3f\xb0\xa2\x35\xb0\xff\x20\x6b\x90\xec\x0b\x69\x3f\x4b\xcc\x1e\x3a\x6f\xa7\xa8\x3e\xc3\xb0\x2b\xaf\x86\x45\x76\xd0\x50\x3f\xac\xee\x47\x67\x56\xb7\xd3\x06\xe7\x95\xcd\xac\x1e\xf5\x72\xf2\xf5\xd7\xe9\x93\x83\xb5\x5e\x30\xa6\x66\x45\xab\xb8\x59\x5a\xc1\xcb\x3e\x98\xc9\x4c\x43\x07\xfd\x23\x80\x5b\x75\x07\xf3\x82\x82\x03\x1c\x0b\xc3\x70\x43\x76\x9b\xc2\x32\xea\x23\xac\xf4\x68\x82\xde\xb1\x6d\x7d\xdd\x4d\xf2\xcc\x09\x67\xbb\x63\xba\x6d\xa9\x27\xe4\x4c\x6a\x44\x86\x0d\xd8\xea\x03\x4a\x11\x77\x5c\x33\xb2\xd7\x67\xa2\x1b\x11\xb0\xa4\x77\x5b\x3b\x4a\x7d\xaf\xd8\x22\x44\x8e\xb2\xa3\xbf\x82\xb6\x5b\x86\x18\x3a\x5f\x69\xc4\x2f\x55\x6f\x2a\xba\xfe\x9b\x5b\x8c\x77\xbb\x59\xda\xf6\xee\x7f\xef\x5d\x60\xe4\x74\x95\x69\xfb\x75\xf0\x0e\xc1\x3c\x7d\xd1\xbe\x65\x0b\x7a\xc5\x36\x1e\xbd\x8d\x2c\x27\x1b\x4e\x20\xd8\x46\xe9\x03\x5a\xd3\x2e\x14\x96\x07\x58\x6c\xad\x59\x0d\x0d\xe6\x6f\x50\x01\x36\x69\x39\xd3\x25\xa9\xa4\x04\x48\xd5\xb6\x21\x42\x96\xcc\x6e\x00\x48\xe9\xa4\x95\x1e\x91\xf3\x43\x77\x63\x13\x0d\x89\x4d\x29\x40\xb3\x6d\x58\xb1\xe1\x86\x07\xf3\x52\x45\xfd\x58\x51\xad\x49\xaf\x73\xe8\x55\x6a\x4b\x07\x9f\x00\xb5\x51\xe0\x91\x73\xcd\xf0\x2b\x76\xc5\x20\x8d\x65\xc6\xe7\x04\xdb\xc3\xd6\xae\x79\x88\xcf\x1e\x97\x0a\xda\x55\x2a\x5e\xa6\x3b\x86\x56\xb5\x35\xbb\xa4\xd7\x52\x5d\x56\x92\x96\xbe\x4a\xb5\xb2\x0a\x4f\xc5\x2f\x19\x39\x66\x4d\x25\x97\xae\xe3\x87\x28\xc9\xb9\xa1\x86\xcd\xda\xea\x7c\xc0\x52\x0c\xf3\xea\xe8\x42\xf3\xad\x79\x75\xec\xe0\x2b\x5e\x9d\xd3\xf3\xa3\xf3\xd3\x47\x5f\x07\x37\xcc\xcf\xf7\xfc\x0b\x98\x99\xc7\x17\x8b\xe0\xbf\xa6\xa5\x86\x8d\x49\xd5\xa6\xfe\x12\x93\xf8\xce\xa4\x32\xb4\xda\x82\x0e\x5d\x2c\x68\x73\xd8\x9a\xc5\x31\xd7\x85\x15\x26\x79\x54\xe9\xb5\xa7\x46\xf0\xe8\x0c\xe2\x76\xce\x6e\x22\xdc\xef\x17\x77\xdf\xd1\x5f\x0f\xcf\x08\x6d\x2d\x37\x1b\xd7\xa8\x60\x2b\x51\x5e\x12\xcd\xcd\x39\xb6\x65\xca\x3a\x33\xee\x99\x1f\x99\x17\x7f\xd7\x2e\xcd\xca\xae\x55\x29\x6e\x2a\x13\x7c\xaa\x54\x7c\x54\x95\x8a\xa9\xc7\x05\xc9\x61\x46\x70\xc1\x0d\xa7\x46\xaa\x5d\x28\x8e\xea\x11\x13\xf2\x53\x5b\x6d\x64\xed\x44\xc2\xa9\xbf\x03\xe0\x24\x06\x45\x88\xd7\x06\xeb\x92\x5e\x21\x87\x08\x96\xe5\x54\x18\xa6\x66\xb4\x60\x2b\x40\xb8\x23\x70\x87\x23\x4d\xdc\xdf\x93\x4c\xcd\x1f\x5d\x2e\x7b\x03\xe7\xe0\x9f\x5e\xfd\x31\x2a\x85\xfc\x53\x30\x3c\x9c\x6b\x3e\xb6\x31\x04\x2b\x86\x34\xb3\x19\xce\x3d\xbf\xe6\x39\x17\xf8\xaf\x62\x25\xad\x1f\xa7\xf6\x3f\x5b\x5a\xe1\x92\x0c\x59\xee\xe1\xaf\xd9\x63\x85\xad\xef\x92\x3e\x63\xba\x79\x0b\x5c\x88\x40\x2b\x20\x99\xd1\xa5\x24\xdc\x64\x1a\x45\x85\xb6\x2c\x96\xc7\x6d\xf2\xcc\x19\x62\xcf\xc8\xbe\x29\x9a\xe4\x2a\xd5\x0c\x38\x4e\x01\xc3\xc9\xfd\x23\xe9\x31\xb9\x5a\x1b\x54\xad\x88\x8d\x22\x9c\xfa\x0b\x64\xea\xef\x43\x6b\x83\x61\xb3\xb5\xf5\x52\x5a\x90\x53\x5b\x07\x56\x77\x64\x84\x1d\x10\x4f\x35\x9a\x14\xe4\x7b\xae\x0d\xc2\xc5\xe2\xcd\x00\x0f\x87\xf0\xe8\xd6\x5c\x3d\x23\x52\x11\xde\xfc\x17\x2d\x4b\xf5\x0a\x35\x4f\x1f\x1d\x55\xe9\x68\x85\x5c\xbb\xf4\x3c\x00\x2a\xf4\xfe\x8a\x7d\xb3\x6c\x78\x41\xab\x6a\x49\x2e\x8e\xce\x60\x04\x4d\xfe\xf0\xbb\x17\x60\xbf\x7e\xfd\xd5\xef\x5e\x0c\xdc\x42\x4f\xe8\xea\x2b\xd7\xa3\xc8\x66\x7e\x04\x75\xc1\xbb\x86\xdd\xda\x43\x5a\x85\x5e\x94\xd6\x3e\x3c\x47\xa0\x51\xab\x1c\xb9\xe3\x0e\x05\x81\xdd\x5d\x41\xd5\xcb\x69\x45\x3e\x41\x7a\x46\xd7\x13\xa4\xe7\x13\xa4\xe7\x13\xa4\xe7\xcd\x57\xec\xe7\xdc\xf6\x79\x14\xd3\x02\xed\x12\xd7\xf5\x26\x54\x99\xce\x3e\x77\x95\x29\x91\xd5\x52\x05\x6f\x8e\x05\x8c\xe1\x62\x86\xf4\xbf\xe8\xda\x3a\x1c\xbf\x3d\xff\xaf\xef\x0f\xbf\x3d\xf9\x1e\x66\xd5\xa1\xd2\xd8\xed\xcd\xc5\x83\x86\x51\xee\x55\xc4\x0c\x5b\xef\xed\x15\x20\x8b\x95\xd2\x63\x41\xde\xbe\x3e\xbf\x63\xd5\xf1\x16\x62\x60\x5f\x88\x59\xfa\x2a\x3d\xb6\x62\x1c\xfb\x53\xcd\xd4\x76\xfa\xef\xec\x4c\x25\x8f\x0f\xf3\xb2\x0f\x7d\xaf\xbf\xe5\x57\x9c\x9d\xad\x39\xd8\xd3\x98\x91\xfc\xdb\x54\xd4\xda\x25\xc2\x65\x7b\xf4\xb5\xb4\x0f\xc9\x16\xc3\x2c\x62\x95\xab\x6d\xd6\xa0\x56\x26\x2a\xea\xb8\x65\x0f\x12\x54\x2f\x94\x55\xf3\xac\x82\xc7\xb4\xf6\xca\xc6\xbf\xef\x3e\x6e\x36\xb5\xe7\xdf\x96\x42\xb0\x91\x18\xd7\xb0\x1f\xf3\x6d\x7a\x85\xd1\xbd\x04\xbc\xb4\xac\x9b\xd5\xde\xe0\x30\x62\x2f\xf7\x0d\x94\xb2\x86\x16\xa9\xaa\x68\x1a\x57\x74\x33\x31\xf6\x0c\xd2\x7d\x84\x9f\x40\xe3\xf2\x47\xa8\x88\x00\xdd\x5b\x82\x61\x0e\x63\x6f\x5b\x38\x05\x42\x56\x3b\x02\xd2\xbb\xb0\x24\xa1\x3a\x54\xdf\x60\xe5\x4e\x86\xd6\x81\x3b\xc9\xb3\xe4\xb3\xd4\x57\x7e\x7a\x60\x77\xf9\x36\x5d\xe5\xcd\x42\x1a\x29\x76\xa3\xdd\xc1\x26\x5a\xfa\x47\xcb\x19\xdc\x71\x14\x92\x64\xa3\xa3\x09\xf1\x69\x43\xc2\xe7\x4a\xe5\xae\x4b\xe3\xcc\x51\xb4\x1b\x43\x63\x9d\x6d\xa2\xf8\x76\x94\xac\x8d\x2f\xf9\x79\x01\x66\x35\xe5\xe9\xf1\x16\x4e\x91\xc7\x90\x26\xf7\x99\xf6\x46\x7d\xa0\xb4\xb7\xe1\x70\x60\x65\xa6\x66\x37\xf6\x41\x7e\x8d\x4f\x8f\x9d\x23\xc2\x77\xb2\xd1\x4e\x2e\x90\x9b\x05\xd5\x56\x6c\x0a\xa9\xcc\xb5\x54\x5b\xee\x00\xde\xa7\x62\x05\x52\xc9\x7d\xb7\xd6\xf5\xeb\x81\xa4\x79\x9f\xb4\x3b\x35\x9f\x59\x7d\x2f\xbb\x52\x49\x04\xdd\xd0\x79\xe6\x43\x39\xf1\x23\x4c\x0a\x59\x47\x4d\x67\xc8\xf5\x82\xa1\x16\x7a\x74\x7e\xfa\x86\xcf\x91\x40\xff\x2e\x64\xc6\xa8\x69\x15\x1b\xcf\xa9\x49\x23\x88\x6b\x92\x96\xed\xb7\xe5\x53\x08\x79\xe8\xdf\xf9\x24\x3a\x87\x93\x28\xda\x61\xb7\x9d\x48\x9f\xc3\x81\xf4\x78\x0e\xa2\x9d\xb3\x79\x9e\x3a\x3f\xf7\x2e\x2f\x3c\xb2\xac\x8f\x7f\x98\x0b\x74\x5a\xde\xec\x54\x05\x1a\x8e\x1d\x77\xdf\x56\x54\x03\x25\xff\x1b\xce\x9b\xc1\x5a\x41\x78\x12\xe6\xf7\xc1\x31\x49\xab\xca\xae\xac\x14\x2c\x54\xe8\xe9\xae\xde\x14\x0b\x2e\x6b\xda\xb8\xda\xd3\x52\x5e\x8b\x6b\xaa\x4a\x72\x78\x76\xfa\xf0\xa7\xce\x60\xec\x7a\xdc\x47\x6f\x64\xb9\x75\xf9\x1f\x91\x02\x5a\x05\x20\x8a\xd8\x3f\xa6\xdc\x68\x84\x79\x04\xd0\x45\x13\x07\x59\xac\x7a\x15\x92\xfe\x01\xd4\x63\x1a\x84\x43\x06\xa3\x45\x10\x59\x18\x5a\xb9\x4c\xa5\x29\x33\xd7\x8c\x09\xf2\xe2\xc5\x0b\xcc\xaf\x78\xf1\xfb\xdf\xff\x1e\x8a\xb9\x49\xc9\x0a\x5e\xaf\xdf\x08\x77\xfd\xf6\xe5\xcb\x74\x52\xfe\x76\xf8\xe6\x7b\x42\x0b\xf0\x91\x91\xa9\x34\x0b\x47\x11\xb0\x5e\x3c\xa8\x1e\x91\xff\x73\xfe\xee\xad\xd7\x43\xf4\xca\xb7\xc0\xd9\x61\x3a\x07\xf8\x80\x1c\x50\x0c\x07\xd8\x9f\x2e\x03\x82\x9a\x45\x80\x3c\xa1\x90\x89\x16\x41\xeb\x38\x79\x39\xa0\xa0\x0a\xba\xb2\xf3\xf9\x02\x96\x85\x0b\xd8\x85\x15\x2f\x5c\xe7\x01\xcc\x8b\xc1\x4a\x69\x8f\xef\x89\x38\x26\x5e\x85\x48\x1e\xd9\x4e\xd9\x08\x6b\x9b\x1d\x6a\xca\x28\xf8\x48\x14\xd3\x6d\x65\xa0\x33\xd5\x94\x39\x22\x3a\x8e\xd5\x2c\x99\x03\x77\x23\x85\xdd\x89\xbe\x6d\xcb\x05\x2f\x81\x9d\xf9\x5a\x71\xab\x94\xcd\x02\x20\x35\x0a\x70\x08\xb8\x92\x13\x5a\x2c\x08\x13\x06\x7a\x38\x20\xeb\xd9\xdb\x93\x87\x5e\x50\x51\x5a\x99\x02\x8d\xf4\x81\x8c\x47\x9b\x7f\x9e\x2f\x93\xf5\x2c\xcc\x78\x0f\x4e\xab\x3b\x49\x69\x25\xc5\x3c\xde\x98\x9d\x62\x1d\xc1\x09\x0d\x90\x41\x50\xd8\x08\xe0\xc2\x76\x61\x30\xf8\xaa\x1d\xe0\x91\x46\xac\xad\x29\x1b\xb2\xff\xb2\xe4\x2f\xe7\xc9\x60\x26\xa4\x40\x8c\xeb\x0b\xd5\x6a\xf3\x6d\x6b\x19\x72\xc8\xd3\xf2\xe6\x34\x13\x72\xb4\x46\x1d\x26\x04\xbb\x1c\x2b\x88\xa9\x16\x05\xd3\xb8\x79\x7f\x41\x04\x12\xd3\xdd\xfd\x0b\x2e\xdb\x40\x2a\xe4\x6c\x13\x21\x1e\xf5\x8d\x0b\x7b\x92\xd3\xd6\xc8\x71\xdb\x94\x34\x20\x60\x27\x22\x07\x76\xd7\x61\xd5\x2c\xe8\x88\xcc\x69\x64\x34\xae\xd3\x11\x6d\x18\xe7\xdd\x80\x5f\x0c\x1e\xfd\x96\x37\xb6\x47\x92\x4b\x48\x85\x9d\x50\x85\xf3\x58\xd0\x9a\x01\x56\x0f\x92\x3b\x90\x84\x42\xd6\x53\x2e\x1c\x08\xde\x0c\x50\x02\x99\xc2\x28\x24\x20\xe0\x91\x8a\x4e\x59\xe5\x08\x90\x6a\xf0\x2b\x7f\xe7\x91\x95\x98\xb2\xe7\x9b\x26\x74\x3e\x57\x4c\x6b\x7e\xc5\x1c\xdc\x20\xff\x67\xa0\x06\x5a\x5b\x9d\xbc\xf1\x50\x8c\x9a\x58\xe3\xd0\xb0\xf4\xe6\x3e\x78\x85\xb6\x59\x96\xbd\x3b\x1f\xc2\x84\x90\x13\x2d\x0d\x53\xbc\x80\x51\xdd\x52\x6b\xa2\xdb\x62\x41\xa8\xc6\xea\xc3\x31\x60\x2e\x0e\x9f\xf5\x0e\x61\x05\x41\x1c\x17\x8c\x96\x1e\x75\xce\x1a\x55\x4d\xc3\xca\x09\x21\x47\x56\xfc\xcc\x78\x41\x0d\x62\x8a\x91\x92\x95\x6d\x53\x71\xf4\x11\x0e\x24\xe3\x62\xc1\x88\x54\x25\x03\x70\x49\x39\x83\xe4\xfb\x30\x58\xa4\x1b\x02\xd8\x3c\xb7\xe3\x4f\xb9\x51\x54\x2d\x51\x83\x72\x6b\x39\x90\x08\x7b\xfa\x14\x80\x63\x07\x63\x01\x3d\x00\x7a\x43\xd2\xbb\xc9\xf8\x2b\xcb\x21\x40\x06\xfb\x06\xbb\x6b\x40\xfe\xa5\xbf\xf2\x9c\x49\xf6\x82\xad\x7d\xee\x76\xf6\xd0\x87\xe5\x3e\x96\xec\x85\xb4\x81\x39\xbf\x2e\x2a\x03\x16\xa8\x29\x16\x4e\x53\xec\x8b\x2a\x42\xd0\x7f\x44\x87\x55\xc7\xe0\xe5\x50\x15\xb9\x17\x91\xa1\x9e\x9e\x99\x89\x35\x37\x4d\x4b\xab\x6a\x39\x66\x1f\xec\x61\x6f\x85\x19\x68\x4f\xd0\x2c\x0c\x0a\xf1\x5b\xa1\x99\x19\x65\x20\x04\x84\x50\xa3\x10\xcd\x56\x93\x3d\x7c\x7f\x21\xa1\x35\xc2\x1e\x0e\x66\x4d\xec\x69\x6b\xb0\x48\x67\xb4\xf9\x27\x39\xe6\xe4\x8a\xa9\xa5\x1b\x77\xf0\xe3\xb2\x6d\x55\x92\x75\x8f\x10\x90\x50\xa6\x58\x9c\x7c\x68\x14\x42\xb5\x64\x79\xe6\xca\x76\x59\x1d\x02\x11\xfd\xbd\xa5\xd4\x67\x6c\x2f\x8c\xe0\x04\xc1\x22\x96\xf8\x13\x38\x25\x0e\xdf\x1e\x0f\x3f\x1e\xf0\x1a\x6e\xf8\xf4\xaf\x81\x66\x50\xff\xca\x2f\x73\xf0\x3a\xbc\x65\xce\x5d\xb7\x05\xff\x0d\x36\xfc\x44\x8c\x35\x1d\x3c\x39\x94\x5c\x32\x77\x4c\x52\xe1\x42\x10\xee\xe6\x6c\x44\x2a\x06\x50\x8e\x88\x58\xc9\x96\x30\x18\x8e\x9f\x67\xe5\x33\x6f\x4a\xbc\x72\x9d\xa4\xdd\x35\xb6\x2f\x9f\xf1\x69\x7e\xb1\x32\x3d\x32\xaf\x2c\xc2\xeb\x92\x25\x07\x72\x36\x5d\xbd\x5d\x64\x39\xc9\x7b\x6a\x60\x0f\xd8\x0f\x02\x06\x52\x60\x7b\x0a\x9d\x41\x35\x31\x32\x17\xb3\x91\x7c\xd5\x91\xfd\xcb\x2f\xe8\xbd\x4d\x59\x46\xc1\x43\x22\x7a\xfb\xb9\x0a\x97\x6c\xf9\x4c\xe3\x9e\xb7\x27\xc4\x82\x37\x60\x9a\xc3\x61\x2f\x67\x99\x37\x3e\x5e\x3f\x02\xc6\xb9\x27\x07\x4f\x96\x53\x31\x22\x6f\xa5\xb1\xff\x39\xf9\xc0\xb5\xb3\x61\x8e\x25\xd3\x6f\xa5\x81\x4f\x76\x9e\x1f\x70\xaa\x1e\x0b\x37\x38\xef\x3f\x87\xc2\x38\x38\x86\xc1\x50\x87\x29\xf1\xab\xee\x81\x9d\x03\xe7\x70\x4d\x4e\xa1\xbb\x2f\x2e\x55\x56\x82\xa0\x2a\xd3\x83\x5c\x5b\x72\xbc\xbf\x0e\x20\xda\x5d\xf5\xf8\x3a\x3d\x8e\x5b\xa4\xea\x31\xcb\x03\x91\xe6\xc8\x82\x28\x04\x7e\x03\xfd\x4f\x9a\x8a\x16\xac\xf4\xed\x15\xa8\x9d\x55\x6a\xd8\x3c\xb1\xfe\xf9\xa6\xab\x66\x6a\x0e\x01\x96\x62\x40\xcb\xa5\xf5\x2b\xb7\x62\x86\x57\x56\xf5\x0c\xaf\x7b\xd9\xc4\xf7\x82\xa6\xf2\xe0\x43\x80\xde\xff\xbd\x3d\x66\xef\xc3\xaa\xc8\x26\x89\x22\x32\x51\xfb\xad\x69\x63\xa5\xd0\xff\xb3\x4a\x2e\x6c\xb8\xff\x21\x0d\xe5\x4a\x4f\xc8\xa1\x6f\x48\x11\x7f\xe7\xfc\x48\xd1\x63\xb2\x11\xd6\x40\x3d\xe6\xaf\x2d\xbf\xa2\x95\x03\x4f\xa6\x82\x30\x6c\xee\x61\x69\x5c\x35\xad\x46\xe4\x7a\x21\x35\x6a\xcc\x01\x7a\x63\xef\x92\x2d\xf7\x46\x19\xfc\xa9\xfe\x8a\x25\xdf\xde\xa9\xd8\xeb\x62\x8e\x3d\xf9\x14\xec\x06\xa8\x3d\xdc\x83\xef\xf6\x1e\xca\xa6\xcb\xa8\xd7\xd3\xb2\xe4\x88\x72\x7d\x96\x5d\xdd\xcd\x2a\x3e\xf2\xa3\x5e\x74\xd7\x50\xac\x1a\xbc\xee\xcf\x8d\xe6\x77\xe6\x86\xb0\xc3\x74\xe9\x1b\xcc\x38\x97\xd5\xba\x47\x2b\x03\x21\xe0\x13\x8b\xfc\x67\x76\x4b\xf4\x9c\x90\xb9\xdc\x48\x59\x98\xc5\xe3\xb6\xef\xe2\x92\x5a\xfd\x4a\xb5\x6c\x44\x4a\x29\x9e\x19\x17\x42\x88\xdb\x43\xad\xb6\x99\x28\x37\xac\xfa\xbe\x3e\xc8\x40\x0a\x55\x0c\xba\x61\xf8\xd6\x58\xce\xdf\x89\x0d\xa4\x20\x56\x65\x7c\xbe\xb0\xfd\x73\x13\x21\x43\x01\x8c\x1c\x21\x0e\xc6\x48\x48\x38\x05\xa0\x55\x6e\x4c\x4c\xc7\x78\x11\x49\xfd\xf8\x57\x06\x2a\x6e\x63\x6f\x38\x3b\x3b\xb0\x25\x74\xdd\xfe\x93\x29\x99\x61\xdc\x0d\x0e\xf2\x5c\xbb\x69\x48\x5e\x63\x77\x0d\x01\x71\xe8\xae\xde\x56\x7a\x0f\xc6\xf0\x95\x4b\x5e\x82\xde\x67\x11\x26\xb4\x92\xc8\x08\x90\x51\x0a\x5f\x4c\x61\x5e\x76\x4a\xc8\x74\xec\xb2\x8b\x62\xe6\x8e\x01\x98\x28\x7a\x9c\x43\x4f\xf9\x48\x54\xe5\x62\xc1\xba\xc8\xb0\x9c\x01\x95\x3e\x50\x7e\x3f\x1b\x2a\xa0\x14\xb7\x02\x01\x7b\x31\x87\x2f\x5f\x40\x36\x1b\x6b\x61\x8e\xeb\x1b\xda\x64\xcc\x34\x09\xcf\x84\x9a\x60\x55\xa3\xd0\xa4\x53\xd9\x1a\x0f\xd5\xec\xbe\x2f\xa9\xa1\xd0\x9f\x0a\xf3\x26\x76\x23\x84\x9b\xcf\x0f\x9b\xc9\x44\xce\xbf\x5d\x31\x03\xba\x5f\x71\x30\x22\x8c\x16\x0b\x6b\xed\x8c\x31\xb5\xd5\xda\x69\xde\x20\x3b\xb6\x0b\x85\x46\x90\x5c\x55\x18\x72\x6c\xa1\xc0\x11\x7e\xe3\x44\xd9\xda\x3e\x09\xc3\x97\x5e\x69\x57\xd0\xe1\xcc\x33\xd1\x15\xc5\x67\xa0\xc4\x87\x47\x7c\x53\x4f\xe7\xe0\x86\x19\x01\x6f\x55\x34\x5f\x3e\x47\x91\x95\xf6\x67\x61\xd3\x67\xa0\x62\xc3\xdb\x77\x78\xec\xf6\x0c\x73\x19\xe9\xad\x58\x1b\xdf\x2a\x35\x99\x68\xc0\x6e\x69\xf6\xa5\xa9\x77\xf6\x47\xa8\xf0\xd0\x11\x15\x2a\x83\xbb\xa6\x64\x8e\x5b\xc2\x72\xe6\x70\xda\x45\x4b\xaf\x59\x68\x68\xca\x94\x92\xca\xbe\x3f\xd3\x9a\x70\x58\xa7\x9a\xaa\x4b\x56\x06\x6d\x7c\x42\xce\xec\x44\x79\xcf\x5e\x06\x4a\x94\xd7\x22\x7c\xbb\x54\xfb\xea\xce\x30\x07\x32\x9f\x4d\x26\xcf\x5c\x27\x77\x85\x0a\x36\x9e\x43\xf6\xf3\x5c\x12\x3f\x8f\x1b\x2f\x9b\xf3\xae\x27\x9b\xde\xd0\x46\xa3\x73\xd4\xaa\xd1\x10\x0e\x92\x84\xe2\x8c\xb8\x2c\x21\x3a\x18\x6c\xa2\xbb\x32\x3b\x27\xf2\x06\x1c\xf3\x05\x1b\x33\xa4\x02\xe1\x95\x3b\xc0\x98\x31\xb8\x78\x53\x60\xd1\xf1\x90\x93\x87\x79\xa3\xd5\x19\xfd\xcc\xf5\x80\xa2\x9a\xd5\xeb\xbe\x42\x44\x50\xae\xc0\x35\x79\xe7\xbd\x15\x9f\x56\x72\x63\x10\x79\x38\x87\x35\xe4\xaf\x1d\xaa\xb9\x59\xbd\x76\xad\x06\x67\xf5\x3a\x9d\x61\xa7\xe1\xbe\x12\xe2\x8e\xc7\xb8\xac\x2a\x18\x20\x83\x7a\x4c\xae\x5e\xdb\x2b\xce\x59\xbd\xb6\x52\xac\xb3\x7a\xe5\x28\xde\x59\xbd\x86\x17\xf3\xac\x5e\x79\xfc\x29\x78\xdd\x97\x70\x02\x15\x81\xfb\x6e\xc0\xb1\xb3\xc6\x99\x1b\xa0\xf0\x83\x2b\xac\x89\x0e\x86\x8c\x32\xc9\xa9\x73\x28\x96\xe8\x54\xcb\xaa\x35\x48\x42\xfe\x41\x62\x9d\x11\x5e\xd2\x47\xa1\xf2\x28\x8a\xab\xc3\x45\x9a\x28\x58\x12\xa8\x9e\xe5\x1c\xeb\xfe\x22\x2f\xb9\x63\xa9\xbb\x1a\x7a\xc9\xdf\x32\x00\xaf\xdd\x68\x1c\x80\xd7\x4e\xb4\x0f\xf0\xa4\xe4\x6f\x22\x80\xd7\x2e\xe1\x7c\xf7\xaf\xac\x9b\x74\x78\x5b\x01\x7f\xdd\x53\xf4\x2c\x34\x53\x46\x5d\x69\x19\xba\x6a\xf6\x1c\x14\x00\xdf\x6f\x34\xfa\x4f\x7c\x0e\x10\xf6\xe1\x1c\xee\xd7\xca\x17\x14\xb9\xaf\x60\xb4\x47\x34\x38\x3c\x3b\xcd\xe8\xff\x8d\x9e\x7a\x83\x07\x38\xbe\xe3\xc9\x07\xfc\x29\x57\x6f\x82\x4f\xd1\x7d\x1b\x67\xfe\x1f\x77\x33\xea\x70\x9e\xb2\xa8\xdb\xbb\xef\x73\x5a\x7b\xf1\xd7\x56\x53\x8c\x7b\xce\x45\x1c\x68\xa4\x83\x90\xe8\x74\x4a\xa7\x8b\x21\x16\xaa\xaf\xf4\x1b\x5e\xa6\x4a\x76\xdf\x3f\xb5\xa3\x5e\x25\x98\xfd\x01\xdd\xb1\x56\xaf\x1e\xb7\x3c\x7b\xef\x27\xd1\x85\x2c\x31\x98\x10\xc5\x35\x1a\x59\xbe\xc2\x24\x2b\x2a\x84\x34\x98\x43\x3d\xc2\xf0\xbc\x1e\xb9\x44\x85\x08\x50\x57\x94\xa4\xe5\x25\x56\x63\x06\x64\xcc\x67\xff\x5e\x65\x15\x30\x81\x67\x79\xd8\x89\xdc\x53\x25\x04\x6d\xf8\x8f\x4c\x0d\xe9\xdd\xbd\xe9\xea\x31\x97\x7b\xbe\xe7\x24\x5d\x2c\x58\x4d\xe1\x9f\xaf\xfd\x04\x59\xa1\xed\x6a\x93\x21\x58\xc2\x54\x6d\x15\xdf\x51\x0f\xe5\x6a\xef\xea\x65\x86\x3a\xb9\xee\xba\x97\xb4\xda\xb0\xe6\xf7\x36\x9d\x67\x3d\xf3\xdf\x6e\x51\xf0\x50\x42\xa2\x81\x47\xb7\x0e\xe1\x28\xab\x49\x5c\xe1\xfc\xef\xf8\xd4\xdd\x67\x62\x21\x5e\x8f\xc1\x1b\x9d\xea\x85\x1e\x05\x2d\xbd\xef\x3d\xce\x46\xd8\x93\x17\xfa\xe3\xd7\x93\x17\xda\x5d\x4f\x5e\xe8\x4f\xbe\xee\xcd\x0b\x1d\xa9\x74\xfe\x84\xdd\xe0\x46\x8e\x3b\xc5\x79\x5f\x72\xd7\x45\x7e\x82\x31\x29\xef\x00\xf6\xde\x5f\xa9\xfa\xe1\xfd\x67\x93\xc9\x33\x0c\xf0\x4f\x42\x10\xab\x35\xb3\xf1\x1f\x08\x13\x85\x2c\xed\x73\x2e\xe0\xf9\x4a\x1b\x30\x77\x3a\x8f\x5e\x4c\x4b\xed\xc7\x8a\x53\x04\xe0\xd9\x79\xf5\xc6\x8c\xc7\x96\x47\x47\x7c\x7d\x9f\xca\x79\xc6\xe3\xa5\x53\xee\x3d\xe5\x7e\x29\xdc\x82\x32\xe5\xb4\xfc\x0e\xf7\xb1\xe2\x35\x77\x55\x8a\x56\x9e\x32\x6d\x72\x15\x9f\x10\xb2\x8f\x0f\x9f\x14\x4d\x3b\x72\x03\x4d\x6a\x56\x4b\xb5\x1c\x85\xc1\xec\x97\xbd\xd1\xdd\x1d\x07\x60\x5c\x14\xad\x52\x4c\x98\x6a\x39\x0c\x80\x7f\xd3\xf5\x48\xac\x0c\xbf\x52\x3b\x6c\x64\x04\xe6\xca\x93\xa7\xdb\x5d\x7d\x89\x77\xe4\x87\xc1\x70\x46\x98\x6d\x38\xef\x5d\x2b\x95\x51\xe7\x01\xb5\x9f\x32\x71\x45\xae\xa8\xd2\xb9\x24\x0c\xb9\x2f\xbb\xa2\xe4\x57\x5c\xdf\x63\x09\xf6\xb9\x53\x5a\x30\xd6\x28\x5b\xd3\xb4\xc6\x1d\x77\x5e\x44\xb0\x0f\x8d\xb4\xaa\x68\x10\x0d\x2b\xe6\xd9\xcb\xa1\x2e\xef\xf8\x6a\xa8\x31\x4c\x89\x57\xe4\xff\xee\xff\xfc\x9b\x7f\x8d\x0f\xfe\xbc\xbf\xff\xf7\x17\xe3\xff\xf8\xc7\x6f\xf6\x7f\x9e\xc0\x3f\xbe\x3c\xf8\xf3\xc1\xbf\xfc\x1f\xbf\x39\x38\xd8\xdf\xff\xfb\x77\x6f\xfe\x72\x71\x76\xf2\x0f\x7e\xf0\xaf\xbf\x8b\xb6\xbe\xc4\xbf\xfe\xb5\xff\x77\x76\xf2\x8f\x4f\x7c\xc8\xc1\xc1\x9f\xff\x57\xc6\x97\xa0\x62\xf9\x2e\xdb\x99\x80\xd7\xf8\x5e\xf4\x9a\xfe\xb3\xef\xb7\xd2\x94\x0b\x33\x96\x6a\x8c\x83\xbc\x82\x32\x9c\x6c\x43\x79\xd6\xbc\x3f\x19\xd3\x69\x55\xe1\x04\x0d\xe6\xf7\x8e\x0b\x91\xfb\xb5\xb0\xef\x2d\x3c\xdd\xc8\x32\x02\x71\xdb\x25\xe4\x47\x07\x6b\xa8\x03\xb6\xa2\x02\xc7\xa8\x98\x5b\xfd\x19\x00\xc3\x69\xe5\x6a\x66\xc8\x7e\xa3\xf8\x15\x35\x1d\xd0\x4c\x84\x15\x37\x90\x8c\x62\x41\xb9\x38\xe8\x20\x46\x1a\x59\x82\x79\xd5\x6a\x16\x7a\x72\x5b\x95\xef\xe2\xfb\x73\x52\x54\x1c\xca\x7a\x55\x68\xd3\x38\x70\x70\x8f\x47\x38\x67\x82\x29\x04\xd9\x23\xab\xaf\xda\x6a\x06\xc9\xc8\xb0\x51\x44\x99\xd8\x62\xb0\xbb\xce\x7a\x1c\xf1\x1e\xd5\x42\xdf\x78\x03\x6b\xe4\xb0\x92\x06\x20\xcc\x5c\x53\x30\x57\x5b\x43\x9b\x46\xc9\x2b\x96\x23\x2f\xde\xe9\xa3\xf0\x8a\x5c\x6b\x28\x4a\x8e\x97\x15\x17\x66\x14\xa6\x08\xea\xa8\x7a\x68\x43\x43\x17\x7e\x75\x2c\x72\x13\x2e\xe3\x85\xfb\xb0\x94\x4c\x47\x26\x56\x2b\x0c\xaf\xf2\x11\xa1\xc9\x82\x5e\x31\x32\x65\x4c\xe0\x84\xa0\xe6\x05\xf5\x13\xfd\x5d\x1c\x65\xf2\x0f\xc2\xd0\xf7\x97\x93\xc4\x5c\x40\xd4\x1a\x10\x56\x73\x31\xb6\xf3\xd5\xcc\xed\xec\xaa\x25\xc4\xc3\x24\x81\x8d\x8e\x7c\x15\x2f\x82\xdb\x80\x86\xd7\x96\x96\x12\x6b\x9a\x06\xd2\xe1\x40\x55\x1d\xfb\xfa\xee\x84\x6c\xf3\x26\x98\x9c\x1b\x6a\x5a\x3d\xf9\xd6\xd2\xfb\x9e\xcd\x14\xd3\x8b\xc3\xa1\xc6\x8b\x7d\x1d\x6d\x68\xdd\x64\x9b\x53\x2b\x9d\xb0\xaa\x30\xd4\x54\xa3\x13\x33\x4c\x9a\x7f\xed\x4e\x90\x3a\x24\xd9\xe1\xd1\x14\xf0\x99\x8f\x50\x04\x36\xd4\xca\x2c\xdc\x2b\x1b\x46\xbf\x64\x4b\xf0\x9d\x64\xdd\xaa\x47\x76\xa7\xc2\x63\x11\xae\x79\xf0\xac\x5e\xf4\xe6\xc9\x1f\x38\x08\xb2\xd6\x4d\xae\xdd\x1c\x80\xca\x0a\x3a\xbd\x93\x09\xe8\x92\x39\x3b\x79\x33\x90\x04\x87\x38\xee\xba\x68\x46\xe2\x7f\xdf\x8e\xfa\xdd\xd1\xf9\x17\x7f\x70\x03\x1f\xc4\x9e\xc0\xda\x45\x98\xf3\x10\xc0\x1d\xc2\xeb\xea\xae\x44\xd1\xe8\x04\x52\x7f\x3b\xed\x9b\x65\xc3\x0b\x5a\x55\xcb\xa1\x25\x39\xf8\x40\x57\x6c\xa4\x98\x69\x15\x38\xc7\xb8\xda\x44\x8a\x20\x15\xa3\xb3\x31\x68\x0c\xd2\x20\x64\xeb\xc1\x60\x3e\x38\x83\x04\xb9\x48\x44\xac\x33\x05\xae\xc1\xc8\xf2\x45\xc1\xc8\x52\xb6\x0e\x87\xac\xc0\x3c\x80\x42\x96\x83\x95\x11\x2a\xa0\x47\x8d\x3d\xef\x51\xf5\xb3\xb3\x8b\x65\xe4\x4b\xd9\x82\x52\x12\x6d\xab\x8d\x1b\x63\xe8\x5a\xac\xbd\x17\x78\x16\x6b\x7a\xc9\x88\xb9\x96\xfd\x6d\x0f\xc4\x06\x00\x28\xcd\x48\x21\xb9\x28\xf8\xe0\x79\xc0\x44\xbd\xde\xe2\x2b\x17\x36\x1f\xb9\xc2\xac\x46\x6a\xcd\xa7\x15\x8b\x34\xb7\x15\xc5\xc9\x72\x49\x46\x1d\xc1\xce\x3f\xac\x4d\x57\xa4\xa5\x14\xd3\x8d\x14\x10\x5f\x82\x73\x1a\x1c\xf2\x13\x42\xfe\xb6\x32\x87\x83\xa7\xa3\xaa\x88\x60\x18\xc8\x2a\x16\xac\xb8\x74\xfd\xd8\xb8\x26\x85\x14\x08\x7e\x32\x72\x6e\xbe\x31\x10\x09\xca\x89\x9d\x96\x65\x86\xe4\xc6\x42\x0a\xd7\xcd\x2f\x8b\xb8\x8d\x95\x4c\xf0\x6e\x29\x59\x69\x52\x2c\xa4\xd4\x4e\xc3\xeb\xbb\x4e\xe2\x55\xe0\x43\xcf\x63\xd4\x35\xff\x37\xbc\x53\x5b\x99\x58\x9e\xf1\xba\xc1\x94\x69\x58\xb3\x67\x9a\x94\xb2\x68\xc3\xdf\x76\xee\x2b\x46\x95\x20\x0b\x79\x4d\xcc\x50\xd4\x04\xbb\x95\x57\x5e\xce\xd5\x1c\xea\xc1\x48\x7a\x3b\x08\x3c\x7d\xc9\x96\x17\xa9\x3d\x02\xe3\xe7\x74\x88\x05\x3b\x92\x8a\xb7\x49\x04\xef\x62\x2e\xf8\x4f\x01\x87\x62\xfd\x48\x05\x01\x6a\x65\x2a\x84\xba\x5c\x09\xc1\x8a\x8d\x31\x78\xe7\x13\xc8\x63\xb6\x16\x5f\x27\x17\x35\xd1\x0b\xd9\x56\x60\xe4\x6e\xd4\x56\x27\x84\xfc\xb4\x60\xc2\x1d\xcb\xee\xe8\xcb\x91\xaa\x7d\xd3\xe1\xb9\x7e\xfc\x59\xb9\xab\x3b\xc1\x1b\x8e\x9b\x3c\x95\x98\xfe\xa0\xea\x5b\x42\x8a\x45\x32\x77\x44\xa6\xac\xa0\x76\x86\x56\x4f\x3e\x89\x07\x52\x9e\x22\x75\x6c\x7f\x55\xf3\x72\xec\x8f\xda\x9d\xc1\x93\xb0\xd7\x26\xee\xd8\xf1\x7d\xb6\xa6\x40\x3e\xd8\x3e\xfb\x44\xa3\xa6\x0f\x1e\x5d\xb7\x95\xe1\x4d\x85\x4d\x2f\x00\xd3\x29\x4b\x76\x47\xcf\x52\x72\x58\x51\x40\xc9\xd9\xfb\xd3\x1f\x0f\x2f\x4e\xc8\x77\x27\x7f\xc3\x8f\x47\x71\xde\x2c\xf5\x96\x8f\x53\xeb\x32\x50\x72\xc9\x96\xd9\x66\xb7\x33\xbf\x70\xa6\x60\xcf\x1e\x9d\xbc\xbf\x38\x7d\x7d\x7a\x64\xdf\x0a\x3f\x1e\xad\xa6\x02\xa3\x21\x95\x81\x88\x75\x29\x1e\x10\x88\xbc\x79\x06\x72\x05\x31\xc0\x97\x08\xc3\x5f\xb3\x92\x5b\x45\x63\xb8\xb9\x64\xaf\x1f\x74\xdf\x5b\xdb\x6d\x4c\x02\xed\x8a\x41\x94\x9e\xc9\xf2\x99\x5e\xb3\x93\xd0\x9e\xf0\xdc\x98\x43\x8e\x82\xb5\xe4\xe5\x21\x35\xd6\x8a\x54\x9c\x5d\xa1\x5b\x31\xc8\xd2\x4d\x0e\x64\x9c\xbe\x60\x64\xe5\xc9\x5e\xfe\x6f\x97\x1a\x54\xa3\xdf\xb6\xef\x2a\xd9\x68\x3a\xf6\xb4\xfc\x1c\x33\x12\x40\x11\xab\xe5\xea\xd9\xb5\x76\xe2\x5c\x53\xed\x6d\x7c\xe7\x05\x85\xcd\x32\x94\x86\x8c\xf2\xdf\x9d\xfd\xbb\x2d\xf2\x81\xbb\x9e\x94\xa9\x27\x65\x6a\xc7\x95\x29\x67\x8d\xed\xe2\x66\xb2\x87\x2b\x14\x6b\xca\x99\x25\x13\xf0\xa2\x7a\xd1\x04\x1f\x2b\x0b\x2d\xe9\x1b\x59\x66\xd9\x4f\x88\x37\x1f\x00\x72\x19\xd9\x7b\x7f\x7e\xf8\xf5\x8b\xdf\x7f\xb5\x37\x82\x7f\x7e\xf3\xe2\x3f\x7e\x67\xff\x79\x72\x74\x7c\x7e\x78\xf6\xd5\x6f\xa3\x3f\xbe\xfe\xc3\x37\x7b\x39\x60\x89\xdc\xe3\x7e\xfb\xd5\x4b\x07\xd9\xbb\x77\x72\xfc\xd5\x6f\x7f\xfb\xf2\x3f\xb2\xb5\xb8\xc9\xc2\x3e\x35\xfd\x70\xf2\xa1\xe1\xd8\x7a\xff\x9c\x15\x52\x94\x3b\x89\x48\xb6\x89\x4e\xef\x67\xaf\xe9\x07\x5e\xb7\x35\xa9\xf8\x8c\x41\xc8\x09\x92\xc3\x8d\x71\x61\xb7\x3c\x62\x20\x92\x43\x59\x58\x34\x84\x80\x64\x83\xc9\x46\xdc\xf5\x7c\x21\x57\x4c\x4d\xa9\xe1\x75\x87\xed\xb5\x31\xc4\xa5\x87\x3b\xd0\xec\xd5\xc5\xab\x83\x1f\xb2\x6b\xa4\x9a\xe5\x4d\x4f\x67\x44\xe2\x72\x8c\xc8\x65\x3b\x65\x63\xda\x70\x0c\xba\xa3\x14\xd0\xcc\xb8\xa0\xf8\x1f\x7e\xf7\xcd\x8b\x17\xfb\x5f\x7d\x43\x16\xb2\x55\xfa\x60\xb2\x72\x7b\x06\x5a\x5c\x54\x02\x54\x3a\x27\x1e\xf4\x42\x2a\x03\x75\xbf\x54\x90\xaf\x7f\xf7\xe2\x05\xd9\x7f\x09\x04\x1c\xb8\xd8\x90\x67\x2f\x28\x4f\xa7\xd3\x2c\x3a\x2e\xae\x34\xd7\xe4\xf7\x7f\xf8\xdd\x57\xdf\xd8\x31\xff\xe3\x25\x29\xe9\x32\x93\x3a\x7f\x71\x93\x27\xd4\x6d\x19\x6b\x61\x30\x38\x28\x41\x53\x5c\xf1\xcf\xbb\xda\xfa\x1c\xc7\x78\xd8\x92\x5f\xba\x69\xfe\x12\xe7\xf9\xcd\x86\xed\x8c\x40\x03\x42\xae\xaf\x48\x06\x42\xb4\x13\x19\xbd\xb5\x45\x9f\xbb\x36\x8a\x72\x84\xf2\x63\x62\x26\x55\x81\xd1\xb1\x3e\xef\xe5\x30\x9f\x7f\xe9\x15\xfa\xff\xd2\x0f\x95\x09\x66\x37\x04\x2e\xc7\x5a\xfb\x44\x28\xe4\xc5\x99\xcc\xb1\x28\x52\xcc\xfd\xf4\xfa\xcd\x96\xeb\x50\xca\x95\x8e\x97\xb3\xc0\xe0\xde\xa0\x71\x9d\x0c\x7f\xa6\x83\x14\x2d\xc9\xd1\xf9\xfb\x0e\xde\x95\x96\xa5\x62\x5a\x7b\x53\x2c\x20\xdb\xee\x8c\x0a\xa0\x59\xa1\x98\xc9\x98\x4b\x86\x0f\xbc\xa1\xac\xdf\x7d\xf9\x54\xd1\xff\x29\xd7\xe7\x8f\xea\x7a\x8e\xec\xf0\x04\xe9\x4a\x1e\x3f\xa4\x2b\xae\xe5\x13\x9e\xeb\x13\x9e\xeb\x13\x9e\xeb\xe0\x27\xed\x28\xf2\xc6\x13\x9e\xab\xbf\x1e\x43\x05\xfd\x13\x9e\xeb\x27\x5c\x4f\x95\xf4\xb7\x5e\x4f\x95\xf4\xbd\xeb\xdf\xbc\x92\xfe\x09\xcf\x35\x71\x90\x27\x3c\xd7\xdb\xae\x27\x3c\xd7\x27\x3c\xd7\x27\x3c\xd7\x27\x3c\xd7\x04\x9a\x36\xe1\xb9\x22\xf3\x6f\x42\x75\x75\xfe\xa6\x0e\xd2\xf5\xdf\x10\xd1\x55\x5b\xf6\x2b\xd8\x61\x51\xc8\x56\x98\x0b\x79\xc9\x06\xe2\xdd\xad\x78\x7f\xd7\x9e\x6e\xc5\xd0\x4d\xde\xe0\xf5\x9b\x77\xd2\x35\x9c\x2f\x75\x7e\xb0\x61\x9f\xcf\xa4\xa7\x6d\xc9\x99\xc8\x81\x10\x90\xff\x70\xf4\xb4\x79\x0d\xd1\x6a\xdc\xa2\x64\x65\xf7\x85\x3b\x39\x8d\x65\x9a\x09\x39\x24\x8a\x15\xbc\xe1\xae\x51\x33\xc5\xcf\x73\x64\x1d\x58\xf9\xc0\x21\xfb\x6a\xb6\xb4\x52\x83\x55\xb3\x70\x54\xb9\xcf\x39\x53\x91\x8f\xd4\x69\x79\x2b\x84\xe6\x70\x7e\xd9\x57\x42\x9b\x07\x2c\x9c\x6b\xae\x99\xcf\x12\x73\x01\xed\x68\x46\x2e\x62\x1a\x62\x70\x92\x3c\xc4\x44\xaf\xee\x56\x22\x63\xa0\x34\xe3\xb9\xc5\x1e\x43\x6a\xcb\x1a\x91\x9d\x61\x04\x89\x1e\xac\x24\x65\xab\x7c\x67\x59\xab\x1b\xf1\xd2\xea\x68\x1e\x46\x14\xc5\x68\x8e\x6d\x87\x92\x38\xec\x2a\xdd\x71\x14\xc2\x05\xd0\x62\xc1\x74\x44\x2f\x7a\x23\x2e\x5d\x26\x4b\x96\x02\x76\x7b\x35\x55\x3b\xe7\x02\x5d\x1a\x30\xaa\xd7\x60\xbb\x62\x73\xf7\xd2\xab\x24\x5f\x44\xe4\xd8\x9f\xe7\x48\x1c\x00\x63\x6a\x63\xc5\x3b\xce\x0c\x9f\xc5\x7f\x68\x22\xab\xd2\x07\xd7\xff\xf0\x82\x34\x4c\x15\x28\x96\xb2\x04\xf0\x34\xd6\xd4\x1b\x49\x2a\x6b\x31\x5b\x55\xe6\xe6\xe1\x43\x6c\xff\x38\x12\x00\x98\xff\x90\x29\x43\x33\x60\x6d\x1a\x52\x31\xaa\x0d\x79\xf9\x82\xd4\x5c\xb4\x26\x5f\xcf\xe0\x7b\x48\x28\xf8\xdd\x37\x03\x9f\x76\x0f\x1d\x88\xb3\x48\x92\xd8\xab\x02\xff\x0e\xae\x15\x17\x51\xac\x61\xb3\x34\x92\x0b\xb3\xea\x68\x89\x12\xdd\x73\x9d\x56\x10\xc9\xdc\x89\xf3\x20\xb3\x8b\xe1\xd7\x56\x4e\x97\x69\x10\x3c\x39\x16\xdd\x0d\x1f\x83\xd8\x53\xf2\x9f\xee\x43\x5c\x62\x89\x6a\xc8\xc2\x1a\xbd\xe0\x97\xd5\x0b\xaa\x10\x93\x06\x8a\x38\x7c\x36\x51\xda\xea\x1c\xdb\x81\x01\x20\xe2\x55\x18\x97\x6b\x52\x86\x8f\x83\x6b\x96\x8b\xb1\x51\x8c\x05\x92\xc1\xd6\x87\x08\xb2\xcf\x42\x1a\x84\x56\x38\x50\xc5\x1f\xa6\xd8\x8f\x89\x62\x73\xae\x8d\x4a\x0b\xfb\x8d\xd3\x0f\xcc\xa1\x56\xc0\x5c\xc9\x36\xb9\xa1\x73\x2e\xb1\x05\x44\x78\x17\xaf\x4f\xf4\x28\x0a\xa6\xf5\x90\xa2\x19\x77\xd4\x39\x1e\x83\x31\x12\x9f\x35\x58\xec\x28\x46\xcb\x77\xa2\x4a\x8e\x99\xe6\x9a\x68\x4f\x07\xfa\xd3\x40\xab\x82\x2c\x47\xd8\xa0\x7e\xfb\xba\x05\x40\x57\x1d\xc8\x10\x56\xa2\xa5\x63\x7f\x3e\x06\x28\xd4\x28\x52\x98\x2e\xd5\x63\x5d\x64\x46\x2b\x9d\x1c\x67\x1c\xee\x6b\xf1\xdb\x77\xfb\x0b\x84\x74\xf4\x05\xba\xab\xee\x94\xaa\xab\xe6\xf4\x8b\xf5\xde\xff\xc0\xa9\xc1\xe9\xbe\xc2\xce\x70\xa5\x51\x26\x07\xd5\x70\x72\xbc\xb2\x82\x19\x13\xc2\xf6\x03\x0d\x31\xc0\x8c\x2f\x86\x73\x9c\x52\xc8\xba\xa6\xfa\x20\x99\x18\xcc\x2f\xa2\x00\x24\xa7\x5d\x7d\xbb\x30\x8a\x56\xdd\x0c\x45\x00\xa6\xdb\xda\xd6\x86\x09\x2a\x92\x53\x26\x73\xf1\x0c\x52\x41\xe4\x75\x28\x47\x9d\xf3\x2b\x26\x56\xf7\xb3\x73\x47\x7c\x4b\x8b\x4b\x36\x00\xbb\xe9\x07\xed\xd7\xb8\x5c\x0a\xea\xb0\x6c\xec\x31\x74\xc5\xad\x38\x60\xe5\xca\xb8\x7a\xd4\x65\xb8\x6b\x66\x3c\xd8\x10\x1a\x76\xdb\x5a\xb8\x56\xb3\x64\xd8\xd8\x5c\xcb\x66\x69\xb8\xaf\x33\x4f\x63\x46\x87\xe2\x57\x05\xf3\x76\xb1\x1d\x6f\x5b\xf3\x8d\xef\x97\x65\xc6\x3d\x37\x47\x32\xca\x55\x06\xbb\x74\x54\x84\x9e\xac\xec\x59\xb5\xf4\xa0\xed\xab\x7b\x61\xba\x84\x68\xe0\xb0\xf3\x26\x71\x3e\xd4\x34\x49\xc9\xcc\xc1\x76\x6a\x5a\xf6\x0f\x96\xf7\xb4\x94\x9a\x7c\x0b\xd5\xfb\xc7\x0c\xdc\x28\x0f\x6d\x34\xbc\xff\xf6\xf8\x23\x06\x83\xa5\xfa\xf3\x32\x16\x78\x4d\xe7\x69\xa6\xf5\x98\xd4\x52\x70\x23\x55\xca\x99\x37\xd4\x56\x98\xe9\x21\xe5\xa5\xb9\xe4\x26\x52\xe1\x7d\x1b\x1d\xa4\x67\xa8\x2f\x8d\xd2\xa2\x80\x75\x97\xb2\x25\xd7\x14\x3c\x83\xc8\xdd\xe9\x1a\xeb\x05\x6f\x5e\x91\x13\xa1\x5b\x15\x21\x94\xad\x92\x60\x0f\x3a\xcf\x9c\xfe\xb8\x83\x8d\x64\x67\x1f\xb1\x70\x1d\x08\x69\x32\x1d\x27\x1f\x68\xdd\x54\x4c\xbf\x22\x7b\xec\x83\xf9\x66\x6f\x44\xf6\x3e\xcc\xb4\xfd\x8f\x30\x33\xbd\x37\x21\xa7\x75\x53\xf1\x82\x9b\x6a\x49\xb8\x98\x31\xa5\x42\xec\x1d\x7f\xb0\x92\xfa\x9f\x4e\xc9\x1d\x63\xde\xda\x48\x45\xe7\xec\xb9\xd3\x0d\xbe\x50\xd3\x54\x4d\x64\xf0\x99\x04\x9b\x70\xdb\xcc\x0c\x44\x04\x27\x3f\x48\x63\xfc\x68\xc8\xf1\xb4\x71\x55\x98\x63\x99\xc9\xe5\x1f\x60\x5d\xdc\x0a\x3c\x57\xd3\xf2\xf9\xfb\x93\xc3\xe3\x37\x27\x93\xba\xfc\x62\x21\xaf\xc7\x46\x8e\x5b\xcd\xc6\xc9\x25\xa5\x83\x57\xe6\x92\x2d\x01\x07\x7d\xcb\x6b\xe3\xc8\xe8\x79\x51\x8d\x84\x64\x01\xf8\xdc\x1a\x20\xef\xbf\x3d\xfe\x41\x0f\x89\x74\x45\x4e\x8a\xe7\xcc\x14\xcf\x0b\xd6\x2c\x9e\xbb\x91\xff\x5d\xd7\x3f\x4a\x31\x59\x9b\x93\xa4\x07\xfa\x33\x73\xdb\x1c\xe5\xe9\x40\xed\xb5\x90\x55\x85\xb5\xd5\xf6\xd4\x3a\x62\xcd\x22\xdc\xf0\xa8\x57\x7e\x48\x99\xca\xc0\xe2\x94\xdd\x8b\x0f\x10\x40\xeb\x97\xc9\x29\x4e\xb9\x58\xcf\xd2\xd0\x3f\x67\xe0\x93\x61\xc7\x4c\x24\xbc\xd4\x34\xaf\x12\xf1\x38\xc5\x55\xaa\x3a\xf3\x28\xfc\xc3\xef\xfd\x97\x9a\x19\xd0\x62\xb9\x20\xd8\x47\xf9\x8d\xd5\xaa\x77\xc1\x11\xbc\x13\xac\x34\xc4\x0f\x8d\x65\xd1\x03\xba\xa6\xe5\xe2\x84\x40\x08\x58\xdd\x51\x86\x32\x6d\xcd\x82\x09\xe3\xa1\x9f\x5c\x1d\x77\xac\x0b\x91\xd3\x19\xfa\x03\xcb\x01\x69\x94\xf2\x8a\x29\xc5\x4b\xa6\xc9\x60\x65\x28\x8e\x03\xf1\xea\x51\xb3\xd6\xa0\x0c\xc6\x1c\x09\x83\x43\x73\xe8\x73\x26\x3a\xe4\xcf\x9b\xdf\x8d\x8c\xf9\x9d\xc8\x95\xbf\x8f\x2c\xf9\x5d\xcc\x8f\xcf\x94\x61\x38\x3c\x27\x3e\x7f\x96\xf7\xce\x04\x39\x7a\x6a\x27\x7c\x92\x4d\xed\xa4\x65\xcd\x07\x80\xf0\xed\x80\x48\xcf\xa3\x78\xc2\x3c\xdc\xf9\x21\xba\xa0\x15\x3b\x7d\xb7\xad\x70\x84\x1b\xbe\x1f\x92\x38\x77\x1f\x36\x4c\x79\x74\x57\x1f\x1d\x33\x86\x16\x0b\x17\x20\xf0\x79\x09\x52\x00\xf4\x0e\xee\x1b\x22\x64\x99\x9a\x6e\x18\xc7\x24\x3c\x0d\xb7\xc7\x25\x3c\xf9\x9f\x57\x6c\x62\x4e\x0d\xbb\x4e\xb4\xdf\xc7\x9d\xda\x98\xfa\x7b\x70\x8c\x3f\xc5\x36\x36\x06\x16\x86\xc7\x2f\x42\xf9\xfd\xda\xb3\xef\x3f\x62\x31\xb9\x21\x56\x91\xe3\x18\x80\x27\x6e\x25\x9a\x8b\x57\x90\xc3\x1f\x66\x69\xca\x88\xdb\x75\x59\xf8\xcf\x3d\xcb\x73\x11\x2c\xa4\x43\x1f\xf3\xea\xb2\x17\x70\x87\x67\xa7\xe4\x2f\x78\xfb\xd6\x66\xaf\x51\xd2\xa0\x1b\xf4\x58\xd6\x94\x27\xd7\xa0\xf5\xe6\x60\xf5\xa1\x7e\x32\x62\x4b\xd6\x4f\xc2\x59\xb8\x97\xb8\x9b\x3d\x06\x6d\x21\xc5\x8c\xcf\x5b\xc5\x4a\xe2\x02\x57\x5b\x9b\xa5\x9d\xf3\x10\xad\xf9\x6c\xc8\xbe\xfd\xee\x39\xf4\xb0\x3b\x98\x74\xde\xa2\x15\x57\x52\xba\x6f\xf7\x1e\x5d\x50\x9f\xa5\xe3\x26\xca\x88\xf1\x28\x62\x9d\xb3\xc6\x33\x3f\xa8\xe3\xa1\x92\x6c\xc0\xa8\x42\x73\x28\x2f\x88\x0a\x3c\x5d\x07\x31\xae\x3b\xa0\x30\xf4\x0a\x8d\xc8\xf7\x72\xce\x85\x3f\x5e\xa4\x2b\xf0\x99\xd1\x74\xf7\xcc\x93\x7f\x64\xed\x7a\xf2\x8f\x3c\xf9\x47\x9e\xfc\x23\x37\x5f\x5a\x57\x27\x82\x4e\xab\xf4\x6a\xee\x7e\xc1\x7b\x78\x1c\x79\x5d\xd1\x39\x61\xf0\xc7\xf3\x92\x6b\xfb\x5f\x72\x7e\xfe\x3d\x64\x45\xb7\xc2\xbb\xce\x81\x37\x9d\xf6\x35\xf2\x33\x84\x67\xe9\xf6\x8e\x31\x54\x73\xde\x0c\x00\x35\xcb\x76\x90\x75\xa4\x84\x2e\xb4\xba\x07\xe2\xe0\xee\x80\xf3\x8c\x06\xa0\x48\xac\x83\x9e\x32\x2b\xad\x8a\xcb\xb3\x28\x31\x59\x2a\xfb\x99\x88\x3e\xca\x62\x7c\x64\x7a\x66\x4e\x33\x64\x85\xa4\x21\xac\x70\x96\x2b\x78\x1d\x3d\xcf\x6b\xe3\x5e\x09\x39\x77\x0b\x09\xdf\x51\xad\x65\xc1\xbb\x52\x02\xd7\x69\xc5\xab\xe8\x25\xa8\xe8\x5b\x9b\x64\xb4\x83\xf3\x4c\x08\x9a\xdf\x1b\x2c\x13\xcf\xd8\xee\x0e\xaa\x63\x4b\x84\x0b\x3f\x6f\x5b\x9b\x04\xdc\x6a\x43\x50\xb4\x73\x09\x89\x8e\x92\xd5\x79\x0c\x02\x61\x35\x15\xdc\xa3\xd4\x3a\xde\x4b\xf6\x38\xe1\x05\x59\xa0\x5c\x6f\xe0\x5a\xae\x83\x48\x82\x4e\xec\x5b\x59\xad\x74\x50\xef\x2c\x0e\x5e\xb4\x37\xfa\xb5\x4c\xf8\x99\x4b\x2a\x07\x59\xdd\xc8\xa6\xad\xb0\x92\x3e\x4c\x5a\xda\x6c\x0d\xcc\x46\x45\xda\x1e\xde\x67\x3b\xd4\xf2\x88\xd0\x1f\xb7\xbd\x21\x63\x20\xca\xbb\x23\x8e\xfa\x3d\x8a\x8d\x96\xa6\x4b\xff\xb8\x0c\x1e\xcf\xed\x03\x8e\xe6\x02\x18\x4d\xf7\x2e\xf7\x80\x49\x7b\x1e\x9c\x17\xbf\xfb\xe6\x9b\x01\xca\x10\x57\xac\x30\x12\x8a\x01\x1d\xd8\x73\xc8\x98\xa5\x8a\x81\xed\x8f\x68\xa0\xde\xbf\x8c\xc5\x60\x66\x50\x5e\xc7\xf6\x10\x49\xb7\x82\x40\x9a\x03\x03\x63\x38\xc2\xe8\xa0\x04\xcd\x6c\x59\xf3\xd0\xbd\xe0\x74\xcb\xdd\x0b\xb6\xda\xb3\x60\x9b\x9d\x0a\xb6\xd7\x9f\x60\x8b\x5d\x09\xb6\xdd\x8b\x60\x2b\x1d\x08\xb6\x9e\xd0\xfd\xf0\x3d\x06\xb2\x40\x05\xe6\x80\x09\x1c\xda\x45\x60\x20\xc4\x60\x1e\x78\xc1\xc1\x7d\x02\x1e\xa2\x3b\x40\x26\x1f\xe7\xf0\x4e\x00\x79\x61\xa0\xb6\x8d\xfa\xbf\x43\xaa\x37\x5e\xbb\x89\xf0\xbf\x15\x5c\xff\x6d\xa3\xf9\x6f\x11\xc3\x3f\x1f\x96\x5c\x2e\xbc\xfe\xe1\x18\x72\x79\x05\xc7\x96\x10\xf9\xef\x11\x87\xff\x41\xd0\xf7\xef\x1b\x73\x7f\x37\x8b\xdb\x86\x62\x78\x0f\x46\xee\xd6\x99\xa0\xbb\x73\xe5\x80\xec\x82\x5b\xbc\xa3\x64\x63\x78\xc1\x37\x66\xf4\x8d\xb6\x9f\x61\x89\x8f\x6e\x68\x01\xfb\xba\xcd\x5c\x81\xf5\x20\x3e\x58\x32\xd8\x57\x8e\x94\xc8\x24\x85\x37\x8b\xbb\x1c\x09\x78\x77\xbe\x92\x11\x1d\x3e\x7e\xf8\x44\xe8\x30\xf4\x47\x52\xa1\xfd\xd4\xed\x58\x32\xf4\x53\x56\xf0\xa7\x5c\xbb\x98\x15\xfc\x50\x08\x26\x9f\x5f\x62\x66\xf9\x94\x98\x19\x5f\x3b\x98\x98\xe9\x99\x56\xc7\xa7\x31\x1e\xbb\x60\x5a\xca\xa9\x55\x52\x3d\x98\x5f\x27\x83\x0f\xcf\x4e\x93\x47\x2f\x14\x03\xa0\x7e\x5a\xe9\xc9\x26\x9b\xd3\xa7\x1f\x39\x0b\x37\x74\xad\x36\x86\xd5\x4d\xa2\xf0\x26\x4f\x79\x99\x9b\xae\xa7\xbc\xcc\xa7\xbc\xcc\xa7\xbc\xcc\x9b\xaf\x5d\xce\x2e\x5a\xb4\x35\x15\x63\x7b\x9e\x42\x52\x67\xaf\x9c\x64\x45\x4d\x9f\x10\x77\x02\x0e\x12\x5a\x88\xae\x0b\x98\xcb\xad\xe0\xbf\xb6\xac\x8b\x74\x04\x93\x6d\x07\xf2\xc0\x80\x8e\xdd\x59\x2e\xb4\x64\x57\xce\xd9\x42\xae\xe1\x03\xba\xb9\x0c\x4b\xe7\x8f\xc6\x61\x4b\x06\x83\xf7\x02\x93\x66\xc1\xd0\xd8\x3e\x5b\x31\xb6\x7b\x3e\x5d\x27\xc8\x41\x8e\x0e\x8b\x0e\xc7\x96\xa0\x65\x51\xfb\xee\xae\x69\xc9\x94\x91\x9a\x2b\x25\x95\xcb\x54\x8b\x5f\x1f\x0b\x9f\xf8\x7c\x61\x98\x42\x0f\x29\x96\x67\xa4\x8b\xcf\x73\x66\xdc\x2e\x80\x5d\x64\x24\xa1\x02\xb1\x57\xed\xbf\x3d\xc8\x07\x4c\x8d\xd7\x40\xa6\x6c\x41\xaf\xb8\x6c\x07\x80\xaa\x9d\xa3\x3e\xb5\xe7\x1e\x09\xb6\xc2\x52\xb6\x21\x17\xa5\xd5\x76\x32\xc2\x2a\xe8\x75\x3e\x48\x1e\xfa\x6d\xf7\x50\x70\x9b\x97\xd2\x07\xa3\xc7\xec\x03\xd7\x66\x7d\xce\x3d\x0b\xb8\xdc\xa7\xad\x6c\xe6\x2b\xdd\xd8\xd3\xf7\xc7\x64\x98\xde\x1c\x5b\xb8\x47\x44\xdf\x05\x72\x75\x0e\x5f\x7d\xcc\x01\xe2\xfa\xfd\x20\x64\x39\xa9\x69\xb1\xe0\x22\x03\x44\xed\x8f\x3d\xc2\x7a\x9e\x90\x09\x39\xac\xaa\xae\x8e\x49\x87\xd2\x41\xef\x19\xe9\xbf\x94\x5d\xa4\x24\x72\x2c\xe7\x2a\x56\x42\x9e\x15\xaa\x58\x50\x9f\xa8\xf9\xc4\x0d\x30\xb9\xaa\xaf\xa9\x62\x93\x42\xd6\xe4\xe8\xfc\x94\x94\x8a\x27\x76\xe0\xda\x72\xfd\x39\x2e\xf1\x59\x5a\xe8\xfa\x73\xf3\xf7\x3c\xf9\x7a\x76\xca\xd7\x13\x4a\x18\x2a\x5e\x2c\x4f\x8f\xf3\x96\x45\xe0\x33\xbd\xa2\xa9\x43\x49\x84\xfd\x9c\x7c\x4b\x35\x2b\xc9\x1b\x2a\xe8\x1c\x03\x56\xfb\xe7\x67\xdf\xbe\x39\xb0\x0c\x0f\xc1\xb8\xd3\xe3\x8d\x75\x13\xe7\xf1\xc3\xdf\x6e\x0b\xf1\x9c\xac\x4e\x5d\x36\xdd\x7e\xed\xa9\x89\xd3\xb7\x35\x30\x78\x12\xd4\xd6\xb3\x01\x41\xe0\x0d\x00\xf9\x67\xab\xfd\xbf\xb0\x50\xc1\x37\x6b\xd4\xab\x47\xea\x55\x5d\x5e\x3e\xf4\x04\xac\x47\x23\xad\xfd\x78\xc9\x96\x77\x96\xde\x63\x58\xc1\x81\x83\xe3\x7b\xd4\xf4\xe6\x2e\x41\x51\xa6\xcc\x6d\x14\x7e\x5a\xd6\xdc\x27\x64\xc6\xf5\xd6\xf5\xdc\x28\x6a\xd8\x7c\x79\xcc\x9a\x4a\x2e\x2d\x17\x9f\x45\x89\x3b\x78\xeb\x14\x55\x69\x35\xa5\x05\x51\x6d\x05\xbd\x10\xca\xb5\x0e\x89\x82\xb1\xb2\x13\xf3\x5c\x68\x43\xab\xca\x2e\x20\x3c\xff\x56\x8a\x3e\x59\x39\xf8\x54\x35\x60\x8c\x74\x7e\xf4\xae\x7e\x87\xe0\xb7\x1f\x5b\xed\x4f\x57\x04\x60\xf8\x8f\xf3\xdb\x5d\x32\x21\x3f\x39\xe7\x31\x45\x61\x40\x89\xf6\xbe\xad\xec\x01\x5d\x95\xfd\x8e\xca\x68\x72\x38\x56\xc0\x6e\x0d\x20\xff\xec\x4b\x3a\x17\xa0\x64\xba\x97\x0a\x11\xfd\xfc\x93\xc6\xc7\xa6\xcd\xd7\x0b\xd4\x40\xed\x83\x09\x6d\x9a\x8a\x23\xca\x80\x54\x2e\x09\x37\x8a\x27\xaf\xdf\xf6\x29\xa2\xf6\x8e\x6a\xe8\xdd\xd4\xce\x31\xb9\x62\x6a\xfa\x29\xfe\xb7\xbb\x6a\x94\xb4\xe1\x90\xce\xf4\xc9\x22\x2c\x55\x69\x3c\x3c\x3b\xc5\x81\x36\x45\xf8\xfd\x97\xc8\x10\x6e\xa9\x7d\x42\x0f\x96\xa3\xb9\x30\x40\x68\xe6\x74\x78\x76\x8a\x3d\xd2\x5c\x3f\xa7\x2e\x34\x60\x2d\x76\x8a\xc5\x97\x5d\x1b\x5a\x3a\xb7\x4f\x34\x44\x0a\x76\x97\x86\xa6\x96\x02\x26\xda\x9a\x61\xaf\xa8\x40\x0c\xe1\x02\xc6\x09\x54\x74\x11\x08\xf4\x2a\x4f\xc8\xde\x5e\x6c\x13\x22\x3c\x8b\x8a\xe8\x06\x51\xb7\xf7\x65\xef\x2e\x2b\xd7\xba\x17\xfb\xd4\x13\xfe\xee\x59\xcf\x77\xcc\x72\x4e\x38\x31\x33\x64\xee\x08\x29\xde\xbb\xf9\xfe\xe1\xfd\xf7\xf7\xce\xa0\x6f\xfb\xc3\xb9\x8e\x3d\x0c\xba\x8d\x36\x54\x19\x4e\x2b\xd2\xaa\xca\xa7\x17\x22\x12\x89\xab\x08\x5c\xd0\xab\xa8\x1b\xd2\x84\x90\x2f\x91\x2b\x1d\x33\xa0\x28\x03\xa7\xa8\xeb\x0e\x36\x6b\xab\x6a\x44\x66\x5c\x50\x7b\x90\xb1\x86\x44\x49\x5e\x9f\x4c\xf1\x39\x17\x05\xb3\xd3\x34\xf6\x7c\x49\x80\x72\xef\x36\x0a\x32\x0d\x72\x34\xe3\x90\x0b\x92\x62\xe5\x5b\x01\x7e\xe1\x99\x54\xe4\xa8\x6a\xb5\x61\xea\xbd\xb4\xc7\x70\x57\x6e\x42\x66\x4a\xd6\x84\xc6\x5f\x7f\xcb\x45\x79\xa7\x4a\xa8\xf7\x70\xb4\x17\x54\x10\xc6\x21\x31\xca\x0e\x0d\xf9\xd0\x96\xd9\xbb\x4d\xb5\xaf\xdb\x62\x61\xa7\x68\xaf\x91\xa5\xde\xb3\xd2\x79\x0f\xc3\x8d\x7a\xef\xc0\xfe\xb5\xfa\xae\x58\xbd\x11\xfd\xee\x39\x6d\xf8\xde\xc1\x88\xc0\x84\x43\x72\x9e\xfc\xf4\x6c\xbc\xcf\x74\x1f\xf9\x09\x03\x57\x5f\xd2\x2e\x7a\x1f\x3f\x01\x36\x86\xe8\x52\xdf\xae\x17\xdc\x60\xbd\x8e\xdd\x29\x18\x03\x08\xbd\x66\x56\x0f\x52\x42\x0e\x7d\x10\xcd\x6e\xad\x9a\x51\x9f\xaf\xcb\xae\x98\x5a\x9a\x85\x6b\x60\xe1\xa5\xe8\xd3\xca\xc1\xce\x18\xb4\x6a\x4e\x94\xf9\x15\xea\xb6\x1b\xc8\x84\xb5\x15\x7a\xf6\xe5\xb3\xd5\x23\xa9\x3b\x83\xff\xbd\xd7\x03\x94\xb0\xa4\xb5\xf8\xd1\xfe\xb2\xbf\x0e\xf8\x11\x1e\x26\x41\x1c\x7e\xff\xbd\x4b\x4f\xc1\x09\xff\x8e\x0b\x88\x7a\x83\x3e\xe4\xb1\x00\xdc\xa2\x6d\x5c\x29\xa0\xf0\xdf\x76\x95\xd6\x8d\xae\x4f\x35\x94\x6e\xa1\xd1\xdb\x99\x37\x3d\xea\xd6\x07\x38\x63\xf5\x8d\x2c\x37\x6f\xe2\x1e\x93\x9c\x46\x37\x87\x5c\xe2\xce\xcd\xe9\x9e\xe5\x2c\xa7\x65\xb3\xd1\x0a\xbd\x7d\x4d\x6f\x59\xbf\x9b\x28\xe9\xfc\x74\x20\xf6\xa3\x6f\x2e\xba\xc4\x08\x32\xab\xe8\xbc\xe3\x45\x10\xe2\xa8\xd9\x1f\x9d\xff\xe8\x5f\x41\x93\x1b\xa0\x87\x3f\x6a\x3a\x7d\xcc\x58\x1a\x77\xb3\x74\xe3\x1d\x37\x86\x32\x3e\x6e\x31\x85\x87\xdf\xcc\x4d\x9f\x92\xf7\x65\x6e\x75\xd5\xdf\x34\xff\xde\xb5\x4e\x23\x4e\xf0\x9d\xe3\xbc\x2b\x04\xaa\x4d\x40\x87\x3b\xff\xb1\xc7\x26\x1f\xa1\xf7\x06\xa6\xbd\x64\xcb\x6b\xa9\xca\x8f\x33\xec\x61\x10\x66\xfe\x27\xde\x98\xf7\xc9\x60\xe8\x8e\x97\x1b\x03\x3b\xc9\xac\x7a\x2b\xf1\x15\x9d\xb2\xea\xe3\xa4\xdf\x60\x18\xbc\xa1\x8d\x7d\x9d\xae\x64\x13\x3d\x52\x2e\xcb\x0c\xad\x53\xac\xf3\xf1\x15\x69\x52\xcd\xa9\xe0\xff\xc4\x3a\xd7\xc2\x4a\x0a\xa9\xf8\x3f\x37\xb3\xda\x3e\xc6\xf4\xd1\xc7\x55\xb1\xc2\x1c\x38\xae\xdf\x28\xb2\x3f\xb2\x2d\x68\x59\x72\x54\xc1\xce\x3e\xc2\xc1\xb7\xcf\x17\x17\x97\x77\x59\x69\xb8\x1f\xcb\x6c\xba\xc0\xde\x3d\x2e\xf3\x2d\x62\xe1\xe3\x3b\xf7\xf6\x34\xba\x4f\x38\x9e\x5a\x75\x4b\xa1\xc8\xad\xbf\xaf\x29\xc7\x53\x7b\x73\x1b\xaf\x1b\x66\xd7\x71\x13\x75\xba\xb5\x95\xa5\xf6\xfd\xc2\xd3\x1e\x60\x5f\x0d\x9a\x70\x56\x53\x9e\x3a\x63\x78\x0d\x58\xb2\x9a\x9a\x56\x71\xb3\xf1\xa4\xbe\xfd\x87\x5c\x7c\xd7\x4e\xd9\x8f\x4c\x69\xbb\x1e\x77\xfd\xb9\x80\x8a\xb3\xc3\xb3\xd3\x8d\xd3\x92\xe7\x44\xbe\xd1\x91\x01\x7e\x33\x47\xb9\x55\x17\x49\x2b\x68\x3d\xe5\xf3\x56\xb6\xba\x5a\xc6\x11\x14\x4a\x2e\xb9\x28\x27\x84\x9c\xa2\x5b\x55\x3c\x33\x84\x0a\x29\x96\xb5\xbb\x55\x14\x55\x5b\xb2\xde\x13\x6f\x3a\xca\x24\xa1\x57\x92\x97\x84\xb6\x46\xd6\xd4\xf0\x82\x14\x92\xa9\x02\x40\x54\xe3\xe7\xb7\x9a\x11\xda\x7b\x62\xf7\xdb\xa2\xd5\x46\xd6\xa4\xa6\x4a\x2f\x68\x55\xdd\xc4\x12\x19\xb4\x03\x70\xa7\xdd\xf8\xad\x9d\x95\x1b\xbf\xbc\xba\x65\x1e\x3e\xbe\x1d\x60\xe0\x41\xdb\xc1\x12\x37\xe8\x01\x57\x37\x33\xf5\x27\x3c\xc3\x21\xe0\x6e\xec\xcb\xd1\xe3\xcf\x8b\x05\x23\x4d\x3b\xad\xb8\x06\x13\x1e\x04\xd7\x92\x4c\xd9\x82\xbb\xd2\x9b\x8f\x4b\xac\x1b\x97\xf8\x63\xf3\x7c\x9b\xc8\xf8\xe8\x0c\xdd\x22\xe1\x6f\xfd\xad\x3b\x01\x4f\x6b\x3a\xff\x04\xd5\xfe\x86\xed\xfb\xbd\x15\xfb\x54\x2c\xc3\x79\x0a\xcd\x54\xf5\x88\x48\xe5\x0a\x89\xbd\xed\xa7\xdc\x57\xa1\x45\xb0\x22\xef\xdc\x8c\xba\xba\x68\xb7\x0d\x00\x65\x80\xa9\x99\x54\xb5\x9d\x77\xae\xc8\xac\x15\xe0\x0d\xbf\xc1\x2e\x84\x1c\x3e\x38\x7f\x9c\x33\x93\x56\x5a\x06\x61\x00\xcb\x26\x3c\x61\x84\x6a\x72\xcd\xaa\x0a\xd3\x88\xb0\xf3\x6b\x04\xdb\xdc\x61\x59\x76\xa9\x84\xd3\xcd\xb6\x65\xc9\xe7\x4c\x1b\xb2\x7f\xfe\xd7\xc3\x03\x50\x88\xc0\x59\xb7\x24\x86\xce\x27\x2b\xf9\xe1\x98\x4c\x6a\xd5\xad\xb2\x05\xb5\xac\xa0\x86\x56\x72\x8e\x19\x68\x56\xa4\xd8\xdf\x37\x15\x5d\x42\x19\x57\x43\x15\xd4\x0a\x16\xe8\xb0\x24\xaa\x15\x37\x75\xfe\xbe\xbf\x93\xf2\xe3\x32\xe9\xb6\x9e\xda\xb7\x84\x87\x3f\x2e\x73\x3e\xd2\x27\xf8\x7e\x8f\xe0\xff\x8f\xbd\x6b\xeb\x8d\xdb\xc6\xfe\xef\xfd\x14\xfc\x1b\x05\xc6\x76\x3d\x4e\xfe\x6d\xb3\xc0\xe6\xcd\xb0\x5d\x20\x58\xc7\x09\x6c\xb7\x05\x76\xdb\xa2\xb4\xc4\x99\x21\xac\x21\x55\x52\xf2\x25\x45\xbf\xfb\x82\xe7\x90\x94\x34\x23\x91\xd4\xcc\xd8\x09\x8a\xe5\x4b\x5a\x8f\x78\x27\xcf\xfd\xfc\xa8\x58\xc1\xa8\xee\xad\x9d\x72\x1f\x6c\xf5\x95\x48\xd8\x92\x66\x77\x74\x6e\x76\xde\x12\x33\xe7\x36\x72\x34\xc5\xa7\x83\xd8\x98\x51\x30\x30\x06\x3b\x30\xc7\xca\x1a\x30\xbf\xea\xfd\xf0\xc4\x19\xbc\xaf\xd1\xa6\x60\xb9\xd7\x44\xfb\x26\xfc\xf9\x74\x9a\x40\xce\xb5\x19\x40\xcd\xf5\xc2\x63\x41\xe4\x7c\x86\x09\x13\xe4\xb6\xe6\x45\xee\x1f\x34\xd0\xe0\xfc\x72\x17\x38\xc4\x64\x6e\x2c\x1e\x79\xad\xd9\xac\x2e\x30\xdf\xc6\xd6\xb3\xc4\x40\x30\xec\x7f\x49\xef\x18\xc9\x16\x54\xcc\x1b\x04\x75\xa3\x10\xa2\x83\x33\x97\xc0\xef\x3d\x2a\x42\x8b\x30\xd0\x82\x57\x4f\xfd\x48\x43\xa6\x3b\xfb\xc2\x50\xff\x89\x98\x42\xda\x16\x7f\x24\xd4\x1c\x0c\x69\xfd\x18\x5c\xb5\xb7\x7b\xb8\x22\xcd\xf3\x57\x74\xc9\x44\x4e\xa8\x10\xb2\xb2\x31\x89\x52\x59\x2d\x2e\x50\x11\x2a\xb9\xb7\x8f\x4c\x8d\x5c\x66\xf5\x92\x89\x6a\x58\xef\x9d\x5a\x00\x96\xbc\xce\xd8\xfa\xc6\x98\x99\x36\x7f\x64\xe2\x9e\x2b\x29\x4c\x83\xba\xff\x80\xbc\x03\xf0\xa4\xba\x04\x1d\xd0\x6d\x24\xad\xab\x05\xec\x8b\x24\x39\xab\x98\x5a\x72\xc1\x6c\xd2\xd4\x92\x8a\x8a\x67\x1a\x2d\xb0\x78\x82\xec\xb6\xc3\x21\x07\x0a\x37\xb8\x05\xb8\xa4\x9e\x85\x12\x20\xbf\x6b\xcd\x40\x5e\x79\x26\x05\xd2\x7e\x07\xa1\xbf\xbc\x67\x8a\x94\x8a\xf9\x73\x0b\xee\xf3\x7e\xfd\x34\x97\xd5\x54\xb3\x92\xa2\xb7\xd3\xcb\x8e\xca\xdb\x20\xcd\x05\x43\xe7\x51\x51\x2e\x28\x38\x46\xcd\xa4\x0c\x01\x5e\x3c\x95\x0b\x26\x34\x52\x73\xaa\x18\x29\xf8\x92\x0f\x59\x64\x00\x08\x69\x49\x1f\xf9\xb2\x5e\x92\x82\x89\x39\x82\x35\x7c\xfb\xda\x1c\x60\x45\xb3\x8a\xf5\x3f\x2a\x1c\xa1\x5e\x4b\xfa\x78\x01\x8d\xbd\x25\xdf\xbe\xee\xf9\xbd\x63\x5d\xbc\xa7\x05\xcf\xf1\xc8\x0d\x9d\x6d\x55\x17\xa6\x3b\x56\xcc\x8e\x97\xb4\xca\x16\x4c\xef\x4f\x7e\xfb\xcf\xeb\xe9\x3f\x4f\xa6\xff\xa6\xd3\x4f\xd3\x5f\xbf\xd9\xff\xe5\x97\xe3\xce\x1f\x0e\x0e\xbf\x9e\x1c\x0c\x10\xcf\x25\xd3\xda\x10\xe7\xd5\xad\xf3\x88\x00\x99\x5c\x96\xd2\x90\x13\x39\x23\x3b\xd8\x8b\xe0\xac\x26\xff\x07\xf3\xd2\x65\xc1\xab\xfd\xc9\xe4\x78\x32\x39\x38\x86\x90\x6f\xbd\xff\x78\x44\x1e\x9b\x09\x4f\x7e\x7b\x6d\x66\xf8\xeb\x37\x5f\x4f\x26\x07\x07\x93\xd8\xdc\xec\x40\x3a\x23\xe6\xa2\x7f\xca\x86\xe9\x83\xef\xb4\x60\x34\x37\xf3\xf9\xc4\x94\x5c\x1f\xb6\x62\x65\x41\x07\xdc\x20\x6b\x52\x68\x03\xa8\x6b\x88\x1f\x98\xcb\xa5\x60\xbe\x8d\x63\x72\x8d\x52\x0a\xcc\x0f\xee\xc8\xef\x4b\x56\xd1\x9c\x56\xf4\xf8\x92\x2e\xd9\xef\x5d\xe0\x3d\x59\xe4\xa6\xa1\xd1\x87\x11\x0d\x3c\x32\x2e\x39\x5f\x18\x52\xe7\x3f\x87\xeb\xee\xa4\xc1\xa0\xdf\x65\x4b\xa1\x19\xa6\x7f\xfe\x58\x2a\x16\x0e\x10\xeb\x8c\x75\xb5\x52\xd7\xa3\x51\x74\x67\x62\x65\x20\xa0\xa1\xc7\xb0\x35\xed\xbf\x00\x89\x38\xb9\x3c\x1b\x76\xf2\xc5\xdd\x13\x11\x77\x44\x7a\x24\xc0\x49\x60\xec\x2e\x10\xc0\xfe\xd2\x8d\x50\x71\xf0\x4b\x00\xee\x87\x90\x40\x54\x34\xfc\xc0\x7c\x1c\xe8\x16\xf7\xb9\x01\x08\x6b\x4c\x8d\xc3\x2e\x9c\xa4\x38\xa3\x94\xe8\xa2\x18\x5e\xdb\xd4\x4f\x63\xf0\xa3\xb4\x60\xa3\x28\xa6\xda\x10\x66\x1a\xee\x09\x80\xf5\x38\x7f\xb2\xdf\x86\xd4\xe0\xac\x44\x17\x94\x9b\xea\x88\x81\x46\x43\x4b\xfc\x29\xe8\xa4\x86\xdc\xb1\xa7\x89\xb5\x9f\x9a\x1b\xb4\xe0\x25\x32\x43\x1b\x69\x12\xdb\x7e\x2c\x3f\x19\xd6\xd5\x92\x03\xcd\x5d\x7a\x27\x8e\xc8\xa5\xac\xcc\x3f\xe7\x40\xc6\xe1\x38\x9d\x49\xa6\x2f\x65\x05\x7f\xd9\xc9\x4a\xe1\x00\x77\xb9\x4e\xd6\xb8\x8e\x61\x05\x70\xdd\x5b\x26\x78\xbb\x1e\xf8\x32\x4f\x4b\x64\xe6\x9a\xbc\x13\x46\xee\xc3\x29\x47\xba\xf0\x50\xa3\xda\x76\xe0\x18\xae\x90\x62\xea\x32\x7f\xd7\x7b\xb0\xeb\x28\x55\x67\x19\x37\xee\xcc\x76\x84\x49\x73\xf0\x0b\xd7\x8e\x2f\x79\xe5\x96\x3a\x87\x63\xd4\xdb\xb9\x64\x6a\x0e\x11\x43\x59\x24\xc2\x25\xd5\xcf\x9b\xe4\xdd\x4d\xf6\xe9\x6e\xe4\xc9\xdd\xa0\x12\xf0\xa4\x8b\x41\xaf\x0f\x19\x71\x1e\x5b\x4d\x21\xd5\x5f\xa2\x3b\xe8\x4f\x43\xdc\x61\x4b\xff\x02\x98\x5e\x7d\x4c\x4e\x88\xe6\x62\x5e\xb0\xce\x6f\x36\x88\xab\xd5\x4c\xa0\xab\x12\x72\xdf\xff\xa8\xf9\x3d\x2d\x0c\x9b\x81\x5c\x43\x0f\xf0\x25\x67\x6b\xcc\xf6\xc8\xc2\xf1\x1a\x82\xe8\x95\xcf\xbd\x3b\xf6\xb4\x77\x14\x4c\xbe\x6c\x9f\xe8\xbd\x77\x62\xaf\x41\xae\xeb\x9c\x52\xcf\xd3\x40\xa6\xdc\x83\xdf\xf6\x36\xe7\xdb\x41\x0e\x95\xee\xbb\x22\xf1\x23\x37\x2e\xa3\x5b\xdf\xf1\xfe\x60\xd7\x94\x43\xe2\xe4\xcb\x7d\x7d\x00\xde\x1a\xc1\x08\x40\x2b\x2a\xd0\xb4\xcd\x5f\xdb\xef\x04\xdc\x32\xe8\xad\x6c\x1e\x71\xa8\xcb\xb9\xa2\x39\x23\x73\x45\xcb\x81\x4b\x3b\x4e\x3a\x45\x11\xb7\xaf\xcb\x80\xb1\xef\xcb\xb7\xac\x0d\xec\x75\xc0\x96\x1d\xac\xf7\xc0\x6e\x17\x52\xde\x01\xde\x1a\x1f\x54\xf8\x76\xe3\xa8\xf9\x19\xfb\x3a\x6b\xfe\xe6\x8c\xe8\x9a\xe4\xac\xa2\xbc\x00\xf3\xc0\x87\x8b\xf7\x36\x34\xdd\xc9\x6a\x6e\x94\xfd\x34\x63\x07\x16\x47\x9a\xdb\xec\x8b\x2b\x76\xcf\xd9\x83\xb5\x68\x0d\x91\xa8\x29\x99\x33\x01\x61\xcf\x81\xe4\x85\x29\xd1\x3c\x67\xe7\x60\x54\x1a\x6e\x68\x8b\xd0\x8b\x81\x31\xc7\x68\x45\x98\xd7\x45\xf9\x5c\x02\x8f\xf3\x76\xf9\x8f\x52\x05\xde\x2b\x49\x03\xef\x4c\x03\xe6\xf4\xd8\x17\xdf\x7f\xff\x5d\x80\xaf\x80\x4d\xe5\x2d\xf9\xc7\x9b\x37\xdf\xbd\x19\xfe\x8c\x0b\xfc\xec\xff\x87\xe7\x67\x6f\xdb\xe9\xd5\xd9\x17\xb0\xde\xb9\xcf\x22\x0a\x87\x75\x25\x34\x35\xa3\xbc\xa8\x95\x4d\xc2\x4b\xd4\x1e\x7f\x68\xd7\x81\x90\x9c\xc6\x44\x4d\x5d\x8b\x2e\x7b\xc5\x66\xb5\xcc\xb8\x60\x9a\x2c\xe4\x03\xa9\x85\x62\x99\x9c\x0b\xfe\x89\xe5\x08\xc1\xae\x31\xac\xda\x90\x70\x7f\xc4\x09\x13\x79\x29\xb9\xa8\x80\xc5\x2e\xa8\xc8\x8b\x50\x04\x6c\xc2\x4c\xdb\x37\x78\xab\x25\x03\x6e\x34\x6a\xc1\xde\x37\x35\x56\x96\xcb\xcc\xd9\x05\x30\x21\x97\xc3\x65\xdb\x6a\xa6\x48\x18\xaf\x03\x36\x97\x9e\x31\x8e\x33\x09\xa0\xa9\x03\xfe\xf6\x47\xcd\xd4\x13\xa0\x41\x34\x8a\x5b\x2b\x4f\xe5\xa6\x01\x05\x76\x73\xb4\x42\x25\x1d\xf4\x34\x93\x1e\x93\x4c\x4b\xd4\x6a\xc2\xa6\x57\x46\x65\xad\x74\x10\xfc\xe9\x62\x89\xc8\x09\x11\x75\x51\x04\x7a\x1a\x68\x44\xc8\x50\x3c\x12\x96\x24\xfb\x43\x9a\x61\x20\xd5\x04\x85\xe5\xf3\x19\xa2\xda\x13\xdf\x91\x16\x35\x36\x49\xe5\x33\x19\xa8\xb0\x6c\x62\xa6\xc2\x32\x22\x29\x2e\x3d\x21\x2e\xed\xa1\x81\x04\xf3\x15\x96\x31\x19\x73\x89\xcf\x03\x3c\xa7\x41\x0b\xcb\xa8\xc8\xea\x34\xe3\x56\xcf\xd0\x13\xb3\xa7\x9e\xd1\xd0\x85\xe5\x39\xcc\x5d\x58\x46\xad\x63\x8a\xe9\x0b\xcb\x26\xab\xf8\x02\x66\x30\x3b\xe7\x97\x34\x86\x45\xba\xdc\xb1\x49\x0c\x4b\xb2\x61\xcc\x0e\x6e\x54\x1a\xc4\x88\x14\x88\x91\xe9\x0f\x5b\xa4\x3e\x6c\x5c\x35\xc1\x78\x86\x65\xdc\x89\x7e\x41\x43\x9a\xeb\xf0\xc5\xcc\x69\x58\x5e\xda\xa8\x86\x25\x99\x9f\x8e\x33\xb0\xb5\x1b\x8f\x1c\xd7\x4d\xe0\x13\x15\xe3\xe2\x5e\xe2\x2b\xd2\xa3\x94\x88\xab\xb5\x8a\x2b\xba\xc4\x03\xb0\x51\xab\x4c\x78\xed\xab\xad\x53\x2d\xa4\xbc\x23\xb5\x8e\x7b\xd4\x82\xf3\x8e\x80\x2e\xec\x44\x09\x1e\x73\xc3\xae\xea\x82\xfd\xcc\xab\xc5\x87\x06\xc8\x0b\xae\x59\x55\x97\x05\xac\x45\xeb\x07\x73\x2e\xaf\x1a\xe5\x04\xe3\x56\x8c\x3e\xba\x5c\x32\x91\x37\xa1\x43\xc1\x0e\xb5\x51\x6f\x31\x57\xad\x28\x50\x85\x83\xae\xd8\x63\x49\x45\xa3\xac\x40\x48\x45\xe8\x08\x27\x1e\xe0\x54\x99\x2c\x19\xbd\x60\xb4\xbc\xbd\x8a\x56\xd0\x82\x1b\xe8\xa0\x12\x90\x5b\x56\x48\x88\x3a\xc3\x7c\x3c\xcc\x5d\x4d\x4e\xe0\x7f\x37\x73\xb5\xac\xe4\x64\x5f\xbf\xf3\x11\x31\x20\x23\x16\x3c\x63\x9e\x65\xca\x14\x88\xb8\x2b\x2b\x4d\xa7\x09\xe8\x29\xbc\x2f\x91\xef\x8d\xe0\x79\x5b\xf0\x3b\x5a\xf2\xb8\x29\x10\xcb\x06\x3b\xef\x9a\x6e\xef\x7d\x3b\x56\x2b\xba\xfb\xee\xe3\xff\xed\x7f\xa8\x6c\xb1\xff\x0d\x80\xe1\xae\xb7\xbf\x4b\x51\x1b\x19\xd8\xef\xfd\x0a\x6b\xc9\xa8\x32\xcc\x1e\x2c\xf9\x53\x72\x7a\x75\x7e\x72\x73\x7e\x44\x7e\xfc\x78\x06\xff\x9e\x9d\x5f\x9c\x9b\x7f\x4f\x3f\x5c\x5e\x9e\x9f\xde\x18\xe1\xf9\x30\x3a\x84\x99\xd1\x06\x8b\x02\x77\xdf\x48\x28\xb2\x4b\xcc\xa9\x78\x22\xb3\xba\x32\x14\xb9\x19\x4c\x67\x94\x14\x4d\x88\x34\xcf\x53\x52\xe8\xff\x76\x67\xb0\xb3\xe7\x7e\x43\x57\xad\xb6\xad\x35\xc3\x25\x77\x68\x31\xf1\x99\xbd\xcc\x21\x4f\xce\xfe\x1f\x7b\xc6\x37\x03\x06\xe8\x0f\x83\x6d\x97\x1f\x62\xc1\xc2\xed\x32\x29\x65\xae\x27\x16\x01\xc2\xfc\x77\x7c\xd9\xa1\xca\xab\x42\xce\x27\x1e\x38\x82\x91\x42\xce\x89\xae\x6f\x3d\x2a\x08\x08\x82\x49\xad\x1d\xba\x66\x3a\x10\x07\x47\x1e\x3a\xa4\xd5\x6a\xf2\xe0\x3a\x6d\xb6\x1b\x18\x33\xae\x57\x3a\xa3\x05\xeb\xb4\x64\xfe\x30\x76\x40\x87\xaf\xfa\x67\xe8\x34\x15\xae\x56\x5a\x4c\xa1\x14\x0f\xbc\xc8\x33\xaa\xf2\x35\x72\xd1\x44\xd3\xe2\xc9\xc1\xe7\x66\x05\x08\x8e\x4d\xd7\x08\x2f\x1c\xb7\x58\xdd\x33\x55\xd0\x12\xb3\xcb\xe1\x9d\x64\xc8\x86\x49\x18\xe2\x19\x2b\x19\xa0\xd3\xe0\xd3\x90\x8c\x30\x91\x15\x12\xf0\x93\x51\xea\x3c\xea\x6e\x0b\xe6\xce\xb8\x67\xdc\x52\x51\x47\xfe\xe6\xec\x15\xd2\x94\x77\x4d\x75\x30\xf7\x79\x10\xe3\xdc\xa1\x5a\x44\xdb\x41\x63\xa0\xd7\xb2\x19\xd9\xb3\x99\x1a\x7b\x47\x64\xcf\xc3\x59\xe7\x56\x23\xdf\x3b\x8c\x3f\x14\xe0\x1b\x68\xe3\xd1\x80\xc2\x6e\x23\x1d\xa6\x30\xce\x36\xfc\x17\x9c\x6e\x17\xa3\x91\x3c\xf4\x06\xea\xdd\x88\x94\xd6\xd5\x02\x73\xe8\x76\x14\x6f\xa9\x3d\xd1\xb5\x51\x37\xb8\x4f\x5b\x8f\x78\xef\xb0\xd3\x7c\xe5\xde\xbc\x20\x42\xda\xcd\x53\xcc\x9c\xc6\x50\x82\x59\xbb\x5c\x77\xee\x9e\x8f\x71\x69\x63\xdd\x73\x45\x4a\x0a\x49\x18\xee\xcb\x78\xb3\x67\x16\x8b\x9d\x6b\x33\xe2\xb4\x5b\x19\xbc\x44\xad\xb0\x86\x44\x5b\xc5\xb5\xaf\x71\x5a\x50\xad\x7b\x1c\x9e\xc0\x03\x4c\xc3\xf6\xc5\x13\xc3\x7b\x6d\xcc\x07\x3c\x90\xbd\xa0\xf7\x81\xa9\x26\x0c\xba\xa2\x6a\xce\xaa\x70\x40\x02\x15\x4f\x1f\x82\x4f\x0b\x4d\x93\x1f\x1c\x9d\x6e\x60\x31\xe2\xa2\x9a\x4a\x35\xc5\x2a\x6f\x49\xa5\xea\x21\xbb\x43\xc5\x97\x4c\xd6\xd5\x35\xcb\xa4\xe8\x87\xa2\xb0\xdf\xed\x2c\xc2\x62\x04\x3e\x87\x0d\xf2\x39\x71\xe2\x77\xfb\xbd\x33\x67\x8e\x6a\x64\x73\x17\xd8\xd3\x85\xac\xfe\x70\xf1\x7e\x9b\xcd\x26\x80\x4b\x18\xde\xc9\x9f\x2c\x4f\x16\x73\x3f\x52\x3b\xf2\x60\xb5\xf7\x75\x35\xbe\xd2\xa9\x0f\x18\x09\x7f\x6d\x17\x23\x0c\x1f\x3c\x38\x7f\x5d\xd1\xaa\x5e\x3b\x0d\x31\x56\xd4\x9b\xca\x77\x0d\x4d\xb5\x7d\x56\x6d\x64\x52\xd4\xe8\x10\x9a\x19\xbe\x73\x19\x25\xc7\xc4\x56\x34\x57\xb6\x52\x94\xa3\x39\x8c\x66\x55\x4d\xd7\x5d\xee\xa6\xb2\xcd\x46\xe9\xc7\x23\x0f\x18\xc4\x42\x46\xb0\x8c\xa9\x4a\x5f\x50\x5d\xfd\x58\xe6\x74\x00\x99\x66\x25\xcb\x44\x57\x70\xa7\x50\xa7\x7d\x10\x2c\x37\x4c\xc8\x2e\x09\xb6\x47\x1e\x0c\x75\xaf\xb1\xc5\x9e\x06\x23\xa7\xd2\xdd\x31\x53\x7d\x6a\xba\xea\x1f\xf5\x95\x34\x6b\x72\xd2\x4b\xa3\xba\xc9\x3c\xb1\xd1\x1a\x8e\xa6\xa0\x35\x22\xd8\x63\x9f\x54\xb9\xfd\x88\x0b\x46\x45\x7f\x0a\x7f\x67\xac\xa7\xf8\xdd\xf8\x33\x65\x3b\x20\x0f\x0b\x6e\xd4\x2d\x44\xf0\xd1\xc4\x09\xb1\x39\x2b\xd8\x40\x42\xe3\x96\xf9\x3f\xb6\x87\x33\xdb\xc1\xb6\xa1\xd3\x1f\xbb\xcd\x79\x8f\xb7\xd5\x2d\x2d\xd6\x43\xa3\xa5\x59\xd9\xc7\xdb\x2a\x56\x27\x0c\xc2\xdb\x6d\x21\xb3\x3b\x7c\x2a\x03\xa0\x32\xf9\xa7\x81\xb4\x40\x2c\x98\x2a\x2b\x72\x9e\xf9\x70\x85\x52\xc9\xb9\x62\xba\xb3\xd4\x88\x2c\xae\xb1\x75\xd3\xa7\x59\x73\xdf\x6f\x2b\xbf\x96\xd4\xc2\x82\x29\xbd\x4c\x8a\x92\xd3\xcb\x01\x15\xa0\xe3\x4b\x5f\x57\xd1\x31\xa9\x17\xde\x5a\x6a\x65\x14\x83\xcd\xfa\xd5\xbf\x86\x01\x2d\x76\x9a\x3f\x14\x82\xd5\xc0\x2f\xb8\x7b\x4d\x2d\xf8\x55\x00\x80\x23\xd5\x15\x10\x01\xda\x20\xe9\xaa\x93\x1f\x72\x4a\x6b\x3b\xcd\xa9\xd8\x79\x98\x4c\x02\xc6\xfc\x98\xe0\x97\xd4\x37\x09\x47\xb9\xbd\xc5\x98\xc7\xb8\x3a\xb7\xa5\x51\xa6\x2c\x22\x17\xc6\xc7\xcd\xa4\x1a\x54\xdb\x76\x37\xf8\x30\x2c\x4b\xb4\x21\x23\xd3\x0e\x07\xa2\x77\x19\xb7\xa3\xa0\xbe\xca\x11\xa1\x64\xc1\x75\x25\x95\x8d\x10\x31\x0c\xb0\x52\x54\x68\xfc\x7d\x90\x57\x6c\x1b\xda\x7e\xea\x87\x40\x68\x59\x32\xaa\x9c\x9f\xde\xb2\x33\xaa\xc1\x88\x9a\x49\x95\xf7\x0e\xcc\x99\x64\x7a\xc5\xb1\xde\xee\x77\x80\x48\x55\x50\x5d\xdd\xf8\x31\x18\x99\x22\x91\x1a\x77\x25\x26\x3b\xc5\x66\x36\x0e\x19\x59\x8a\xe6\x47\x49\xa8\xb0\x86\xaa\xa1\x2e\x92\xce\x57\x5c\x2e\x69\xe6\x86\x02\xe0\x46\xf3\x7a\xf0\xc2\x5e\x6b\x8a\x2f\x33\x72\x97\x2d\x9e\x36\xe4\x13\x7c\xc7\x90\xf8\x77\x0c\x6d\x75\xc7\xec\x51\x70\xc0\xdc\x0a\x87\xf7\xff\x34\x7c\xd4\x08\x88\x09\x68\x06\xf1\xd7\x6a\xab\x2d\x2b\x17\x03\xa0\x27\x3d\x93\xf1\xb7\xc8\xe7\xf0\x24\x5f\x87\xc4\xd1\x28\x46\x75\x08\xf1\x69\x4c\x10\xf4\xad\xe2\x6c\x46\x4e\xe9\x92\x15\xa7\x54\xef\x72\xe5\x81\x3c\x84\x4c\x35\xec\x78\x7e\x4c\x26\x57\xad\x30\x99\x4b\x59\xbd\x67\xd5\x10\x02\x41\x14\x18\x32\x85\x10\x3c\x2b\x09\xd8\x5a\x1d\x89\x5f\xf8\x2d\xaf\xfa\xd6\x23\x0c\x5c\xec\x2f\xe2\x4a\x87\xd1\xce\x86\xae\x71\xf7\x02\xd7\x0a\xcc\x93\xd9\xa6\x17\x39\x82\xa0\x34\x74\x79\x53\xae\xed\x67\xba\xb0\x63\xae\x6a\x64\xf6\xbe\x89\xeb\x5e\x53\xcf\xda\x42\xdc\x74\xd4\x69\xf0\x15\xb5\x63\xe3\x11\x3d\x87\x6b\xa3\xe4\xed\x52\x30\xfa\xbc\xa8\x84\x76\x53\x07\x7f\x0f\x48\xfe\xd3\x30\x9f\xdf\x16\xf1\x30\x07\xff\x9b\x39\x01\x2f\x19\x2e\x77\xe6\x7a\xb5\x06\x18\xff\xaa\x1a\xfc\x1f\x7a\xf7\xfd\xc8\x3a\xe7\x63\x1f\x30\xa1\xd8\x3d\xe4\x51\x08\xc8\x0f\x65\x44\x30\x40\xf2\x1a\x82\xf1\x21\xe9\x2a\x5b\x9a\xba\x16\x57\xa5\xa3\x6a\x32\x89\x6f\xad\xfb\x28\xb4\xc1\x58\x52\xb5\xc2\x04\xad\x7b\x84\x3a\x18\xd7\xa9\x46\x34\x16\x15\x30\x47\xb6\xd7\x6f\x78\x5e\x2d\x2b\x0f\xa0\x99\x2a\x57\x40\xcf\x31\xd2\x22\x33\x54\x39\x83\xb7\xfd\x90\xcc\xfb\xe7\x57\xdb\x46\xe6\xab\x55\x1a\x08\x31\xf7\xdd\x13\xbe\xab\x69\xd5\x35\xdf\xdd\x9a\x47\xa1\x46\x93\xdb\xfb\x02\x70\x53\xa3\x07\xe8\x79\x81\x14\xb1\xc4\x4e\xdd\xe7\x3f\x6f\x29\x18\xda\xc1\x33\xf6\x4c\x10\xb6\x9a\xa9\x7b\x96\x77\x3c\x8c\xf6\x8d\xcd\xee\xdf\x5a\xfe\xe8\xa6\x7d\xbb\xec\xe4\xcf\xbf\xbe\xfa\x6f\x00\x00\x00\xff\xff\xa9\xf6\xe1\x13\xcd\x57\x0c\x00") +var _operatorsCoreosCom_clusterserviceversionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\x23\xb9\x95\x27\x0c\xff\xef\x4f\x81\x90\x7b\x5e\x49\x63\x91\xaa\xb2\xc7\x7e\x3d\xb5\xb3\xe3\xd0\x56\x55\x77\xeb\xe9\x2e\x95\x42\x92\xdb\x8f\xa3\xdd\x6b\x83\x99\x87\x24\x46\x99\x40\x0e\x80\xa4\x8a\xde\xde\xef\xfe\x04\x0e\x80\xbc\xf0\x22\x91\x09\x48\xcc\xaa\x4e\x38\xc2\x5d\x22\x93\xc0\x49\x5c\x0e\xce\xf5\x77\x68\xc1\x7e\x00\xa9\x98\xe0\x6f\x08\x2d\x18\x7c\xd2\xc0\xcd\x5f\x6a\x7c\xff\x47\x35\x66\xe2\x7c\xf1\xfa\x57\xf7\x8c\xa7\x6f\xc8\xdb\x52\x69\x91\xdf\x80\x12\xa5\x4c\xe0\x1d\x4c\x19\x67\x9a\x09\xfe\xab\x1c\x34\x4d\xa9\xa6\x6f\x7e\x45\x08\xe5\x5c\x68\x6a\x3e\x56\xe6\x4f\x42\x12\xc1\xb5\x14\x59\x06\x72\x34\x03\x3e\xbe\x2f\x27\x30\x29\x59\x96\x82\xc4\xce\xfd\xd0\x8b\x57\xe3\xdf\xbe\x1a\xbf\xfa\x15\x21\x9c\xe6\xf0\x86\x24\x59\xa9\x34\x48\x05\x72\xc1\x12\x70\x8f\xa9\xb1\x28\x40\x52\x2d\xa4\x1a\x27\x42\x82\x30\xff\xc9\x7f\xa5\x0a\x48\xcc\x60\x33\x29\xca\xe2\x0d\xd9\xf8\x8c\xed\xd7\xd3\x44\x35\xcc\x84\x64\xfe\x6f\x42\x46\x44\x64\x39\xfe\xdb\xbd\xab\x1d\xfe\xd6\x0e\xef\x26\x08\xbf\xcf\x98\xd2\xdf\x6d\x7f\xe6\x7b\xa6\x34\x3e\x57\x64\xa5\xa4\xd9\xb6\x17\xc1\x47\xd4\x5c\x48\x7d\x55\x93\x65\xc8\x48\xd4\xa2\xf9\x6f\xf7\x20\xe3\xb3\x32\xa3\x72\x4b\x6f\xbf\x22\x44\x25\xa2\x80\x37\x04\x3b\x2b\x68\x02\xe9\xaf\x08\xf1\x63\xd9\xce\x47\x84\xa6\x29\xae\x17\xcd\xae\x25\xe3\x1a\xe4\x5b\x91\x95\x39\xaf\x06\x37\xcf\xa4\xa0\x12\xc9\x0a\x8d\x6b\x72\x37\x07\x9c\x35\x22\xa6\x44\xcf\x81\xbc\xbd\xfd\xa1\x7a\x94\x90\xff\x52\x82\x5f\x53\x3d\x7f\x43\xc6\x66\x01\xc6\x29\x53\x45\x46\x97\x86\x84\xc6\x53\x76\x35\xdf\xd9\xef\x1a\x9f\xeb\xa5\xa1\x57\x69\xc9\xf8\xec\xb1\xf1\xdd\x4b\xec\x46\xc2\xa2\xb1\x4e\xcd\xe1\x7f\x58\xfb\x7c\xd7\xe1\x25\x64\x40\x95\x9b\x01\xa6\xf6\x23\xc7\xfd\x78\x8d\x9c\x9b\xb5\xcf\x77\x25\xc7\xaf\x06\x35\x23\x13\x3d\xa7\xda\x92\x25\xb8\x21\xb5\xc8\x68\x02\xea\x51\x82\xd6\x1e\xf1\x14\xad\x7d\xb1\x85\xa4\x66\x97\x9a\xea\x52\x8d\x8b\xf9\xa6\x77\xbc\x9e\x3f\xf9\x86\xf6\xc1\xc5\x6b\x9a\x15\x73\xfa\xda\x7d\xa8\x92\x39\xe4\xb4\xde\x92\xa2\x00\x7e\x71\x7d\xf9\xc3\xef\x6e\x57\xbe\x20\xed\xd9\xd9\x78\x18\x09\x53\x66\xaa\x90\x6f\x11\xcf\xb8\x70\xed\x96\x05\x90\x7f\x6c\xfc\xcd\x6d\x01\xc9\x3f\xc6\x6b\x94\x8b\xc9\x7f\x41\xa2\x1b\x1f\x4b\xf8\xef\x92\x49\x48\x9b\x14\x99\x09\xf2\xcc\x70\xe5\x63\x33\xff\x8d\x8f\x0a\x69\xb8\x94\x6e\x70\x20\xdb\x1a\xdc\xb8\xf5\xf9\xca\xdb\xfe\x3c\x5a\xf9\x96\x10\x33\x49\xee\xad\x53\xc3\x9a\x41\xe1\x0e\x75\x1b\x16\x52\x37\xb3\xd5\x4e\x96\x50\x48\x50\xc0\x2d\xb3\xc6\x4d\xc5\xdd\x5b\x8e\xd7\x3a\x37\x53\x04\x52\x19\x8e\x55\x66\xa9\xe1\xe9\x0b\x90\x9a\x48\x48\xc4\x8c\xb3\x7f\x56\xbd\x2b\xa2\x05\x0e\x9b\x51\x0d\x4a\x13\x64\x33\x9c\x66\x64\x41\xb3\x12\xce\x08\xe5\xe9\x5a\xdf\x39\x5d\x12\x09\x66\x5c\x52\xf2\x46\x8f\xf8\x13\xb5\x4e\xcb\x07\x21\x81\x30\x3e\x15\x6f\xc8\x5c\xeb\x42\xbd\x39\x3f\x9f\x31\xed\x6f\xab\x44\xe4\x79\xc9\x99\x5e\x9e\xe3\xc5\xc3\x26\xa5\xb9\x09\xce\x53\x58\x40\x76\xae\xd8\x6c\x44\x65\x32\x67\x1a\x12\x5d\x4a\x38\xa7\x05\x1b\xe1\xcb\x70\xbc\xb1\xc6\x79\xfa\x6b\xe9\xb6\x89\x5a\x19\x78\xe3\x79\x20\xfe\xc2\xd8\x73\xb1\xcc\x05\x62\x37\xa7\xed\xd0\xbe\x6c\xbd\x26\xe6\x23\x33\x8d\x37\xef\x6f\xef\x88\xa7\xc8\x1d\x75\x5c\xa2\xfa\xd1\x0d\x33\xe4\x57\xcb\xcc\x2c\xe3\x53\x90\xf6\x97\x53\x29\x72\xec\x15\x78\x5a\x08\xc6\x35\xfe\x91\x64\x0c\xb8\x26\xaa\x9c\xe4\x4c\x2b\xdc\xd6\xa0\xb4\x59\xc8\xf5\x8e\xdf\xe2\xed\x4e\x26\x40\xca\x22\xa5\x1a\xd2\xf5\x47\x2e\x39\x79\x4b\x73\xc8\xde\x52\x05\x2f\xbe\x76\x66\x8d\xd4\xc8\x2c\xc8\xce\xab\xd7\x94\x5d\xd6\x7f\xb0\x76\xea\x09\xf1\xc2\xc6\x3e\xcb\xbd\x95\xd1\x90\x14\x92\x8c\x4a\x2b\x2f\x11\x0d\x59\x46\x3e\x7e\xff\x81\xcc\xc5\x83\x39\x48\x8c\x2b\x4d\xb3\x0c\x0f\xa6\x93\x69\xd6\xba\xc6\x3b\x20\xa1\x9c\xe4\x94\xd3\x19\x10\x5a\x14\x8a\x4c\x85\x24\x94\xcc\xd8\x02\xb8\x67\x00\xab\x6b\xb1\xf5\xfd\xb6\x71\x36\x62\x6f\xa4\x8d\x97\xbc\xff\xd6\x11\xbc\xf2\xcd\x36\x5e\x67\xda\x9a\xb8\xb8\xdf\xc4\x9a\x76\x51\x77\x81\x47\x8a\x93\x92\x2b\x2d\x4b\xdc\x25\x29\xb9\x87\xa5\x3b\x5d\x39\x2d\x88\xd2\xc2\x7c\xf8\xc0\xf4\x9c\xd0\xe6\xc9\xa2\x1a\x8f\xcb\x64\xfd\xb5\x4c\x53\xa0\xc9\x64\x49\x8c\x70\x8c\xec\x4c\x0b\x91\x21\xaf\xc3\xfe\x0c\x5b\x23\x12\xb4\x64\xb0\x00\x42\xe5\x84\x69\x49\xe5\xb2\xda\x5b\xeb\xe7\xe0\xd1\xf9\xc7\x79\x69\xc8\x6a\xdb\x67\x8f\x3c\xb6\xb3\x89\xbd\x4e\x9c\xa8\x98\x56\xe2\x7a\xf7\x89\xbe\xbe\x74\x3b\xb8\x96\xfd\x95\xdb\xc1\xa0\x88\xd9\xa9\x4e\x2c\xaa\x94\x08\x24\xc0\x6d\xcd\x94\x08\x59\xed\x2d\x32\x59\x6e\x1c\xa3\xb1\xd5\xc9\x04\x0c\x1b\x94\x94\x9b\xa9\xdf\x78\x84\x3a\x4c\xec\x63\x9b\xd1\x34\xf1\xc0\x37\xed\xfc\x66\xdf\x54\x4a\xba\x99\x7a\x42\x98\x86\x7c\x4b\xcf\x64\x75\x9a\x9b\xf3\x59\x7d\x6c\x08\x5c\xb0\x14\xcc\xc4\x6a\xca\xec\x2e\x33\x3c\x81\x4e\x44\xa9\xed\x7c\xba\x47\x52\xb2\x60\x94\xd0\xd9\x4c\xc2\x0c\xf7\xff\xd6\x61\x9f\x98\x13\xdb\xb6\x1f\xfb\xba\x8d\xac\x8e\xf5\xe8\x13\x86\xfd\x3e\xfa\x00\xdf\xc4\x3c\x9a\x0f\xac\x8b\xf1\xed\xf6\xd4\x1a\xda\x46\x13\x33\x27\x7e\x6a\x85\x7c\xf4\xe1\x5d\xd6\xd6\xb6\x27\x56\xd8\xb6\xf6\x3a\xaf\x10\xe2\xbe\x9d\x98\x33\x53\x5f\x00\x86\x73\xe0\x83\x35\x4b\x9f\x00\x29\x40\x4e\x85\xcc\xcd\xe1\xe1\x84\x92\xc4\x8a\xb2\x15\xdf\x42\x86\xcb\x93\xc7\xa6\x93\xec\xba\xfe\xb6\xed\xb2\x0b\x6c\x1b\x91\x82\xea\xf9\x13\x8f\xed\xb6\x54\xb6\x35\x27\xed\xc9\x87\x9f\x60\x7c\x6b\x7d\xd7\xf7\x56\xf4\xbe\xcd\x34\x44\xef\x14\xaf\xac\x5d\x7a\xdd\x85\x73\xaf\xb6\x1b\xfa\xf0\x01\x94\x32\xf2\x02\x0a\xa1\x92\x3e\x10\xe0\x89\x30\x3c\xe5\xff\xb9\xfd\x78\x65\x47\xdf\xc4\x5d\xd7\xdb\xa5\x26\x2c\x2f\x32\xc8\x8d\x2c\x4a\x7e\xfc\x40\xa5\x9a\xd3\x0c\xe4\x4f\x78\x2b\xfe\xf8\x67\x9e\xb7\x3f\x49\xe8\xf6\x83\xdd\x6c\x46\xc8\x54\x90\x1a\xf6\x97\x42\x46\x97\x96\xb0\x14\x12\x91\x9a\x6b\x41\x48\x52\x18\x65\x21\x2f\x4a\x0d\x84\xda\x6f\xf1\x1d\x18\x9f\xed\x42\xf9\x5e\xab\x41\x8c\x48\x95\x53\xfd\x86\x4c\x96\xfa\xa9\xd3\x46\xc8\xa7\x51\xba\x2b\xdb\x69\x12\xf3\x34\xf3\xb1\x6d\x27\x16\xd4\xec\xf8\xc9\xb7\x34\xf2\x36\x65\x1c\xe4\xb5\x90\x7a\x17\x3e\x69\x14\xbb\x19\xac\x8b\xa3\xcd\xe6\xa7\x8c\x71\xfd\xbb\xdf\x3e\xf2\x64\x0a\x45\x26\x96\x66\xff\x3c\x7d\x3c\x77\x7c\x9f\x9d\x59\xc9\xae\xfd\xed\xca\x3e\x76\xec\xcf\x5a\x2a\x63\xf4\xb4\x49\xfb\xec\xd4\x11\x8f\xf5\x6e\x95\x02\x7d\xb0\xfb\xf6\xfa\xd2\xdb\x7a\x6e\x60\x0a\x12\x78\xe2\xf9\x5c\xf5\xa7\x16\x84\x92\xef\xca\x09\x48\x0e\x1a\x54\x43\x13\x58\x16\xe0\x0d\x6b\x60\x7f\x20\x41\x92\x52\xb3\x8c\xfd\x73\x93\x39\x62\xd3\x5b\x45\xbf\x69\x9f\x90\xa9\xfc\x63\x4f\x48\x56\xfe\xb1\xa7\xe4\x2b\xdb\xf6\xb9\xba\x9f\xde\x85\xb6\xb5\xd6\x09\x8d\x20\x4e\x63\xa8\x56\x26\x6d\x2f\x45\x74\x4e\xfe\xf4\x36\xdf\x40\xe9\x35\xda\xf2\x5b\xb6\xf0\x6d\x04\x93\x93\x6d\x6e\x92\xb1\x51\xf8\xc7\x68\xa1\xff\xf1\xa7\xb1\xed\xf2\x74\x4c\xde\xe7\x85\x5e\x7a\x33\x10\x7b\xa2\x73\xa6\x08\x17\x7a\x5d\x10\x8c\x3e\x4d\x8b\xcd\x46\xc8\x27\x67\xea\xe2\xfa\xd2\x5b\xdb\x5f\x70\x69\x55\x01\x49\x0f\x04\xfd\xdb\x16\x19\x2d\x31\x7f\xca\x20\x4b\x09\x33\x32\xbc\x21\x96\x4c\x32\x91\xdc\x3b\x4b\xfe\xcd\x3b\xa2\x84\xe5\x39\x46\xd1\x33\x92\x7f\x22\xb8\x2a\x73\x20\xec\x29\x26\x32\x48\xf6\x83\x64\xdf\x6c\x83\x64\x3f\x48\xf6\xad\x66\x9d\x74\x7d\x60\x8e\x2b\x84\x6c\x65\x8f\xf8\xdc\xc0\x20\x1f\x6b\x03\x83\xc4\x36\x30\xc8\x81\x41\x3e\xd5\xf1\x93\x6f\xb9\x93\xa4\xfb\x64\x5f\x4f\xf1\x8e\xc1\x73\x30\x78\x0e\x06\xcf\x81\x6b\xc3\xf5\xe9\xda\x70\x7d\x0e\xd7\x67\xbb\x7d\x76\xd7\xe7\xe0\x39\x18\x3c\x07\x83\xe7\x60\xf0\x1c\x34\xdb\xe0\x39\x18\x3c\x07\x83\xe7\x60\xf0\x1c\x6c\x69\x83\x64\xdf\xb1\xd3\x41\xb2\x1f\x24\xfb\x6d\x6d\xf0\x1c\x0c\x9e\x83\x81\x41\x0e\x0c\x72\x60\x90\x5b\x5a\x1f\x3d\x07\x49\x06\x94\x6f\x56\xe7\x57\x92\x1b\xf1\x39\x14\x00\xd9\x94\xb9\xd4\x3e\xf7\x6b\x32\x81\x39\x5d\x30\x51\x4a\xf2\x30\x07\xee\xf3\x52\xc9\x0c\xb4\x32\xbb\x00\x34\x6c\xd2\x00\x9f\x60\x6f\x8f\xb3\xb4\x11\x01\x4e\x27\xd9\xc6\x8e\x9f\xe2\x5e\xee\x97\x8f\x7b\x4a\x26\x42\x98\xb7\x5b\x9f\x31\xd4\x5e\xbc\x36\x10\x21\xa9\x65\x9b\xce\xb5\x39\xb1\xe5\xed\xcd\xbb\x67\x4d\x67\xd9\xd8\xc9\x65\x35\x36\x41\x17\x0e\xa6\xfd\x99\x2b\xcf\x7c\xfa\xf1\x81\x43\x8a\x49\xe9\x67\x84\x69\xf3\x80\x61\x2c\x2c\x61\x3a\x5b\x56\xe4\x7d\xde\x79\x32\x6f\x6f\xde\xed\xee\xe6\xf2\xab\xb4\xb5\xeb\x88\x1e\xad\xc1\x5f\x35\xf8\xab\xaa\x36\x08\x6d\x1d\x3b\x1d\x84\xb6\x41\x68\xdb\xd6\xe2\x0b\x6d\x7d\xf7\xef\x0c\x5e\x19\x32\x78\x65\xfc\x63\x83\x57\xe6\xc9\xc7\x07\xaf\xcc\xe0\x95\x19\xbc\x32\x8f\xb7\x41\x7e\x75\x6d\x90\x5f\x07\xf9\xb5\xdd\x3e\x3b\xf9\x75\xf0\xca\x0c\x0c\x72\x60\x90\x75\x1b\x18\xe4\xc0\x20\x5b\xed\x73\xcc\xe7\x18\x2c\xdc\x83\x85\x7b\xb0\x70\x0f\x17\xe0\x70\x01\x0e\x17\xe0\x53\x1d\x0f\x16\x6e\xdf\x06\x0b\xf7\x60\xe1\x6e\xb5\xc1\xc2\x3d\x58\xb8\x07\x0b\xf7\x60\xe1\xde\xd2\x06\xf9\xb5\x63\xa7\x83\xfc\x3a\xc8\xaf\xdb\xda\x60\xe1\x1e\x2c\xdc\x03\x83\x1c\x18\xe4\xc0\x20\xb7\xb4\x3e\x5a\xb8\x9f\x38\xbc\xbb\xec\xd2\xa6\xbd\xda\x89\xcd\x3e\xd2\x7d\x4c\xde\x52\x4e\x18\x4f\xb2\x32\x05\xfc\x66\x0a\x54\x97\x12\xd4\x19\xc9\x58\xce\x7c\xb1\x0e\x21\xcd\xa6\x19\x25\x54\x81\x72\x7d\x6c\x1c\xaa\xea\x77\xc3\xb7\x8f\xbf\xe6\xe3\x7c\xe4\xd1\x5a\x67\x55\xd8\x3e\xe3\xbe\x1f\xb7\xad\xf6\x26\x83\x25\x3b\x4c\xb3\x19\xdf\x3c\x88\xb5\x5b\x6c\xa1\x9f\x27\x5f\x7b\xdb\x16\x7c\x64\xcb\x3d\x79\xb9\x3c\x75\xa5\x8c\xc8\x84\x2a\xf8\xc3\xbf\xad\x95\xb8\x6a\x3e\x92\x43\xca\xa8\x19\x6a\xe3\x13\x4f\x5f\x33\xf5\x10\xdb\x37\xf9\x0e\x87\xa5\x22\xa3\x63\x2f\xae\x9c\x4d\xd7\x23\x62\xf6\x5d\x7a\x69\xfb\xb8\xd5\x92\x6a\x98\x2d\x1b\x75\x9b\x70\x9b\xd5\x42\x03\xdf\x52\xc2\xcc\x6b\xa0\x1b\x87\x78\x98\x83\xb4\x47\xcc\xd7\x0a\x52\x7e\x20\xa6\xaa\x74\xa1\x2e\xf9\x1f\x4f\xe5\xff\xf8\x71\x36\x7c\xfd\xd4\xfa\x6e\xaa\xa0\xe4\xdb\xae\x17\xa4\x9f\xcf\x77\xd6\x43\xf6\xae\x02\x82\x59\x9d\xe0\x82\x4a\x73\x31\x79\x4f\x1a\x8a\x67\xf5\xd3\x5b\xfb\x5f\x59\xb6\x6d\x77\xd4\x0e\xb2\xda\xd3\x32\xda\xa8\x81\x63\xb3\xcd\xab\xb7\x8b\x68\xe6\x6a\x43\x5e\x83\xcc\x99\x52\xdb\x92\xa2\xda\xa4\x3f\x75\x8b\xed\x70\x7b\xad\xc8\xcc\x7e\x5d\xfc\x1b\x35\xc8\xa9\x04\x68\x6b\x65\x99\xd0\x84\xc8\x32\x33\xe2\x34\x4f\x89\xab\x53\x44\x68\x92\x88\x92\x6b\xc2\x01\x52\x4c\xac\xda\xb8\xbd\x77\xb8\xfb\x76\x90\xa0\x77\x95\x9f\x47\x96\xce\x27\x9f\x72\xef\x70\x61\x5f\x61\x63\x91\xac\x66\xdb\x5d\xde\xc6\xe1\x9f\x16\x22\xf6\x91\x4c\x76\x96\x4b\xba\xc8\xac\xd7\x22\x63\xc9\xf2\xa6\xcc\x80\xcc\x45\x96\x2a\xac\xf9\x66\x2e\xcf\xca\x27\xda\xd4\xa5\x0a\x7c\x1a\x5f\xf2\x8c\x4c\x4a\x4d\x52\x01\xd6\x6c\xe8\xd0\xa5\x9a\x3f\xdf\x69\x7c\xeb\x29\x7f\x98\xdb\x62\x84\xa6\x63\x42\x8b\x22\xc3\xcc\x49\x61\x04\x8f\x87\x39\x4b\xe6\xb6\x24\x6c\x41\x13\xd8\xf4\xd8\xee\x72\xe9\x4e\xba\x1a\xd9\x4b\x5f\x23\xde\xec\x3d\x79\x6a\xd7\x91\x3d\x15\x37\x62\xcb\x82\x7d\x23\x45\x59\xec\xf8\x78\xb7\x3d\x40\x6c\xc9\x30\x3b\x90\xb9\x8e\xf4\x8a\x88\xe5\xbf\x74\x4e\x72\xbb\xd4\xca\x59\x60\x9d\x47\x66\x8c\xe9\x8f\x79\x99\x69\x56\x64\xf8\x13\x8b\x80\xa5\x08\x95\x50\x5f\x70\x67\x84\xf2\xa5\xf7\xb9\xbb\x12\x86\x90\x12\x3a\x33\x3d\x6a\x2c\x8f\x2a\xa6\x3b\x53\x6d\x6b\x24\x96\xb9\x91\xbf\x1a\x36\x60\x85\xea\x3e\x5f\xd6\x54\x90\x07\x96\x65\x46\xf9\xa1\x59\x26\x1e\x20\x1d\x93\xa3\xa3\xd5\x0b\x28\x11\xb2\x41\x37\xb2\xba\xa3\x7f\x6d\x3d\x65\xf8\x5a\xfd\x62\xbb\x29\x72\xfb\x6a\x21\x64\x3f\x4d\x84\xec\xaf\x73\x11\x54\xa5\xee\x2b\x07\xd5\x28\x63\x4a\x8f\x1c\x95\x5a\xe4\x2c\xd9\xa9\x13\x2e\xb8\x77\x44\xfc\xf9\xe6\xfb\x67\xdf\xa0\x57\xed\xe1\x5c\x4d\x4e\xd0\x66\x8f\x16\x54\x6a\x46\x33\x52\xca\x4c\xd9\x3d\x4a\x8d\xc2\x22\x7d\x15\xd4\x39\xc5\x38\x8f\x04\x14\xb2\x0b\x42\xfe\xd5\xee\x4a\xb7\x19\x2c\x2b\x13\x3c\x5b\x12\x6a\xb7\xc2\xb4\xcc\xb2\x33\x32\x65\x9c\x9a\x8b\x0c\x0a\x9f\xc3\xbb\x83\x69\xa6\x6e\xb7\x8c\x27\x60\xa6\x69\x54\xf9\x26\x90\x72\x33\xb2\x61\x99\x15\x4f\x4b\xcf\x5c\xd9\x4f\x6b\xa9\x52\x8e\x14\xc3\xdf\x12\x3a\xc9\x00\x35\x0d\x27\x73\xde\x88\x0c\x5d\x8a\x95\xdf\x03\x6b\x85\xd2\xe6\xd7\xff\x8b\xf1\x5d\xb5\x75\xdb\x6e\xf0\x6a\x4f\x28\x27\xc0\xf4\x1c\x24\x0e\xbd\x34\xfc\xd7\x6c\xf6\xfa\x50\x9d\xa8\x32\x99\x9b\x29\x3a\x2a\x44\xaa\x8e\x0c\x77\x3e\x52\x90\x48\xd0\xea\xe8\xd4\xfc\xb5\xfa\xae\x38\x5f\xcd\xdf\x9d\xd3\x82\x1d\x9d\x9e\x11\x9c\x70\x2c\x50\x2a\xf4\xfc\x17\x7e\x8e\xfc\x84\xb5\xca\x8b\x3f\xd5\x5a\xa7\xe8\xa6\xd9\x83\xab\xac\x29\x0a\x5b\x94\xd2\xdc\x9f\x1a\x30\xed\xdc\x9c\x14\xdc\x73\x0d\x1f\xf4\xca\x45\x4a\xc8\x05\x27\x60\xbd\x86\xa0\x49\x0e\x94\xbb\xa7\x61\x01\x72\xa9\xe7\xe8\x48\x54\x15\x17\x1d\x56\x6e\x87\x68\x84\xba\x6d\x5c\x35\xc7\xca\xfc\x0a\xd5\xc7\xcd\x16\x7f\x5e\x5d\xa1\xe3\x7f\x3d\x5e\xbd\x92\xea\x3b\xf8\x97\xbd\x1e\x28\x84\x75\x5a\x8b\x1f\xcc\x2f\xdb\xeb\x60\x3f\xb2\x97\x49\xc5\x0e\xbf\xff\xde\x16\x7b\x76\x13\xfe\x1d\xe3\xa9\xaa\x80\x55\x53\x7b\x4b\xb8\x45\xdb\xb8\x52\x48\xe1\x2f\x76\x95\xd6\x95\xae\x5d\x15\xa5\x27\x68\x6c\x68\xe5\x7d\x50\xa4\xb1\x5e\x74\x4b\x4a\x36\x6c\xf7\xcc\x7a\xe7\x8d\x58\x99\xd1\x09\x64\xca\x19\x10\xa1\x41\x3e\xb9\xf8\xfe\x43\x55\xba\x5d\x02\x7d\xc2\x28\xfe\x0c\xea\xf3\x0e\x61\x3e\x6b\x25\xf2\xd7\xdb\xee\x6a\x0e\x4e\xc5\x7e\x4e\x2c\x72\x0b\xda\x9e\xd5\x9c\x16\xe6\xa8\xda\x3e\xac\x73\x65\xc5\x71\xf2\x3d\xce\xf4\xd3\x27\x6e\x2f\xf5\x70\xf7\x92\xcf\x9b\x06\xd9\xe9\xbc\xed\x16\x4a\xb4\x47\x87\x8f\x99\xf2\xea\xd6\x9a\xe6\x95\x0d\xed\xf4\x42\xa7\xc9\x25\xb4\xe9\x50\x48\x41\x59\x70\x1d\x0b\x70\x24\xfd\xe7\x75\x17\x91\x97\x60\x1f\xfd\x7c\x44\x14\x64\x90\x6c\xaa\xc9\xbe\xe9\x61\x0d\x79\x91\x3d\x75\xf2\xc8\xde\xba\x7c\xce\xf8\x0d\xd0\x74\x79\x0b\x89\xe0\xe9\x8e\x5c\xba\x9b\xb2\xf4\x81\x71\x96\x97\x39\xe1\x65\x3e\x01\x5c\x0b\x65\x07\x45\x8e\x63\x0d\x2a\x94\x70\x78\xc8\x96\x8e\xcb\xa4\xa4\x10\xa9\x67\x3c\x13\xa3\xd5\xd3\x74\xd7\x4b\xe7\x81\xe9\x39\x96\xad\xe0\x4b\x33\x14\xd3\xf5\x8d\x28\x49\x22\xa9\x32\x42\xe3\x19\x0e\xcd\xb4\xb9\x45\x27\x80\x2e\x76\x96\x82\xd9\x32\x74\x41\x59\x66\xb4\x9c\x5d\xaf\xc5\x77\x30\xa5\x65\xa6\xd1\x3e\xf4\x8a\x9c\x18\xc2\xbd\x72\xbf\xa9\x5b\xa3\x77\x28\x21\xb8\xf9\xaf\x85\x5d\xc2\x97\x3b\xdd\xc3\xcf\xb7\x0b\x10\xba\x6f\xbb\x02\xa2\xfb\x56\xd0\x52\xed\x6a\x66\x6a\xed\x86\x4b\x9e\x9a\x43\xd8\x94\xe6\x1b\xf7\x08\x53\xae\xe7\xdd\x66\xf5\x71\x28\xaf\x0d\x54\x4b\x31\x93\xa0\xd4\x3b\xa0\x69\xc6\x38\xbc\xc0\xa6\xbe\x9b\x03\xc9\xe9\x27\xdc\xd8\x9a\xe5\x60\x84\xad\xe6\xb6\xa6\xcd\xd7\xd7\x82\xe4\xf4\x1e\x2a\x3a\xc9\x04\xa6\x42\xee\x10\xd2\xe1\x1b\x53\xcd\xcd\x64\x37\xed\x94\xb2\x0c\xd2\x31\x52\xd2\x18\xcb\x6c\x76\x29\xb2\x0c\xa4\xdd\x87\xe6\x6f\xc6\x4b\x20\x5a\xec\x38\x58\x21\x05\x9a\x26\xec\x00\x4d\x69\x06\xa5\x05\x6a\xba\xb4\x37\x0e\x1e\x36\x42\xc9\xf5\xca\xfc\xbf\xff\x94\xa0\x11\x7e\xc7\x01\x25\x50\x85\x9d\xd9\x63\xa3\x4a\x39\xa5\x89\x97\x5f\x5b\x2f\x67\x23\x66\xc6\xe4\x4a\x68\x17\xba\x5c\x4d\xa9\xf9\xf5\x8e\xe3\xa1\xa6\x0f\x04\x94\x66\x39\x72\x9b\xb4\xc4\x90\x54\x33\x18\xae\x25\xdd\xbc\x77\x5b\x67\xfd\x0f\xaf\x5e\xed\x28\x3a\x3f\xff\xa9\x95\x80\xb6\x99\x67\xdd\xf0\x57\x15\xf7\xf6\xb7\x6b\x21\x52\x65\xb6\x1f\x73\xaa\x4a\x21\xcc\x3b\x4a\x8c\xe5\x60\x4a\x33\x3e\x2b\x99\x9a\x93\x09\xe8\x07\x00\x4e\xe0\x93\x85\x97\xdb\x71\xbc\x7f\x82\x14\xb8\xdf\xcc\x6a\xd5\x0e\xc9\xd6\x1a\xbc\xee\xcf\x02\x2c\x98\x62\x82\x7f\xcb\x94\x16\x72\xf9\x3d\xcb\xd9\x13\x35\x2d\x7c\xeb\xce\x7d\xea\xeb\x54\x64\x29\xb9\xb1\x5b\xe0\x16\xec\xcc\x48\x40\xf7\x87\x16\xd6\x36\x42\x0c\x47\x98\xd0\xe4\x7e\xd7\x5b\x6d\xef\x55\xdd\xb6\x5e\x1d\x6e\xd1\xd7\xaf\xfa\xb2\xac\x5e\x50\x7b\xce\xa5\x44\x95\xa0\x1a\x09\xef\x0e\x7b\xb0\xde\x7f\xb2\xd3\xdd\x5a\xda\x87\xb9\x50\x80\x0f\x10\x2a\x9f\x96\x09\x9b\xaf\xe1\x7d\xa2\x4c\x55\x9c\x16\xe3\x55\x38\x28\x42\xa7\xd3\xf6\x13\xe9\x1e\x92\xb2\x6d\x97\x9a\xe4\xa5\xd2\x24\xa7\x3a\x99\x5b\xeb\xb4\x48\x2b\xe9\xf5\x58\x39\x2d\x73\x9f\xa5\xdd\xd9\x3d\xb6\xbf\x23\x8b\x58\x3a\xdf\x7f\x2a\xcc\xe5\xf1\x94\xcb\xbb\xdd\x5a\xeb\xbc\xda\x4d\xdb\x6a\x93\xb5\x17\xd7\xa9\x09\x78\x97\xda\x8b\xbb\xf9\x09\x5a\xe2\x2f\xae\xde\xed\x7e\x6a\xba\x18\x65\xf6\x36\xcb\x74\xf7\x91\x98\x76\xf1\xc8\x1c\x78\xa7\x89\xfb\xa6\xed\xcd\x43\xfd\x59\x9d\x11\x4a\xee\x61\x79\x66\x25\x8f\x06\x28\xaa\x79\x78\x2f\x42\x24\x64\x4e\x3c\x05\xd3\x23\x76\x68\xc7\xd8\x7d\xb6\x3b\x6c\x4c\x3f\xf8\x3e\xfe\x5b\xdf\x46\x86\xd0\x3d\x7f\xe1\x27\x68\x8f\x9f\xed\x7f\x76\x6c\xbb\x87\xe5\x7e\x3f\x58\xd9\x49\x66\x15\x9c\x16\x6f\xf7\x88\xf9\xa0\xd2\x1e\xaa\x6d\xb1\x9f\x63\xbd\xd9\x3a\x18\x14\x6d\xf3\x93\x18\xf4\x7a\x7b\x1e\x94\xe6\xb8\x2d\x3b\xad\x99\x96\x63\x65\xf7\xaf\xe1\x30\x73\x56\xd8\x9c\x3e\xe7\x6d\xdc\x7f\x13\xdb\xf6\x03\xcd\x58\x5a\x0d\x69\xb9\xcf\x25\x3f\x33\xb2\xb5\xf9\x0f\x5e\x3f\x56\xe2\x7f\x27\x40\x5d\x09\x8d\x9f\xbc\xd8\x1a\xd8\xd7\x7a\xe9\x15\xb0\xa3\x3a\xa7\x15\xb2\x55\xb4\x57\xd8\x94\x35\x37\xd3\x1e\x57\xb9\x8e\xf4\x54\xe4\x92\x13\x21\xdd\xd4\xed\x3d\xa8\xe9\xcc\x0d\x6c\x87\xc4\x8b\x74\x62\x9d\xb5\xe8\xfe\xda\x38\xa6\x5b\x21\x21\x5b\x0b\x14\x71\x78\x37\x34\xca\x82\xf6\x1b\x34\x57\x14\x19\x6a\x67\x4e\x69\xa2\x3e\xb4\x6a\x47\xaf\x48\xb3\xe5\x20\x67\xe8\xc5\x4e\x76\xf6\xba\x56\x44\x77\xb8\xf8\x6c\xdb\xfb\xfa\x6b\x0e\xd8\x61\x23\x47\xf1\x25\x45\xeb\x06\xe5\x15\x6b\x86\xee\x28\xf1\xec\x75\xaa\x1a\xc3\xb5\x6c\xe4\xff\xc7\x5c\xea\xb8\xe9\xfe\x2f\x29\x28\x93\x6a\x4c\x2e\x88\x62\x7c\x96\x41\xeb\x3b\x67\x02\x68\x74\xb3\xd7\xe0\x85\x19\xd4\xdc\xbd\x0b\x9a\x39\x43\x0c\xe5\x04\xac\x39\xde\xd0\xb1\x2a\xbe\x9d\x39\x09\xdb\x5c\x45\x55\xfc\xc3\xd1\x3d\x2c\x8f\xce\xb6\x86\x99\x6f\x6e\xcd\x93\x7a\x74\xc9\x8f\xac\x08\xb3\x76\xd6\x2a\x79\x07\x83\x2c\x8e\xf0\xbb\xa3\x98\xb2\xe1\x9e\xb2\x4a\x57\x67\x42\x7b\xd0\x3d\x8e\x49\x6b\x57\xe7\xb4\xd8\x77\x53\xfb\xc0\xce\x0e\x3a\xda\xdd\xaa\x71\xc9\x45\x40\x6b\x41\x4a\x05\x56\x8d\x46\x66\x47\xc0\xeb\x62\xa8\x79\xa1\xd5\x8b\xc3\x03\xea\x4e\xbd\x51\x68\x8c\x8a\xcf\xf8\xec\xcf\x45\x4a\xf5\x4e\x39\x45\xb6\x75\x3f\xdb\x37\x76\x40\x52\xe2\x88\x66\x27\x4f\xd9\x8c\x14\x54\xd2\x5c\x8d\xc9\xb5\x2b\x37\x80\xfb\x9a\x4d\x9b\xee\x1b\x37\xcf\x77\xcb\x02\xc8\xff\xdc\x7f\x40\xfb\x86\xcf\x7c\x0e\xba\x09\xc5\x39\xfd\x74\x5b\xca\xd9\x1e\xd3\x4f\x82\x85\x96\xa6\x25\xba\xb6\x09\xe1\x46\x6d\x82\x08\xa9\x64\x0e\x69\x99\x41\x4a\xe8\x44\x2c\xa0\xe5\x27\xab\x7e\xb6\xe7\xd0\x68\xa8\xd8\xf3\x37\x3f\x18\x0e\xe7\x89\x32\x42\xd6\x44\x89\xac\xd4\x95\x3d\xeb\x04\x3e\xbd\x21\xbf\xc7\xf8\x2d\x4a\x0a\x90\x09\x70\x4d\x67\xb0\x6a\x78\xb4\xcf\xbd\x7e\xf5\x2f\xa7\xfb\x12\x80\xe2\x8c\x19\xdf\x99\x81\x5f\x99\xdd\xf9\x81\x7e\xfa\x33\xaf\x9d\x34\x4c\x91\x1d\x8d\x50\x75\xbb\x58\x79\x11\x1c\x25\x4b\xca\x0c\x4d\xcc\x18\x17\xd7\x78\x9d\xc9\x92\x48\x51\x62\x64\x1c\x29\x8b\x7d\xc7\x6a\x9a\xcb\x7e\xfb\xfb\x7f\xd9\xf7\xe7\xef\x3f\xd1\xbc\xc8\xe0\x8d\xaf\xfb\x62\x6d\x7d\x46\x9f\xd0\x82\xfc\xee\xd5\xbf\x9c\xd9\x28\x01\x78\x68\xd8\x9e\xea\x7d\x44\xcd\x26\x2a\x0b\xc2\x72\x9b\x27\x03\xd9\x12\x3b\xda\x57\x82\x33\x57\x5c\x9b\x85\x28\x4d\xa5\x56\x67\x04\x03\xf4\x2a\x4d\x50\x0b\x4d\xb3\x15\x73\x27\x1a\x1a\xe1\xc1\x6e\x85\x54\xe0\x5a\x02\x7a\x1d\xf6\xa4\xe2\xf5\xef\x5e\xfd\xcb\xba\x51\xfb\x23\x4f\x00\xc7\xc1\xfe\x31\x5e\x73\x02\xc0\xc9\x3d\xcb\x32\x48\xf7\x15\xb1\x9f\x9a\xc8\x69\x29\xf5\x1c\xe4\x19\x01\xae\xbc\x27\xc2\xbc\xfb\xca\x7b\x23\x2d\xb2\xe4\x7c\x7f\x09\x94\x5a\x7f\x28\x3a\x37\x1a\xce\x0e\x37\xed\x46\x30\xd3\x24\x17\x4a\x6f\x9e\x8e\xbd\x06\xa3\x7c\xf9\x71\xba\xaf\x78\x3d\xea\x60\xcc\x5d\xff\x75\x07\xe1\xbc\x25\x7d\x30\xae\x47\x42\x8e\x6c\x37\x6f\x88\x96\xe5\x3e\x02\x5f\xde\x62\x21\x3d\xbc\x01\xca\x06\x83\x5b\xdb\x04\x9f\x1d\x1b\xef\xce\x6e\x53\xf1\xc0\x63\x5d\x1a\x78\xdb\x77\xba\x2e\x5e\x84\x85\xb7\x3d\x43\x2b\x9c\xc7\xcc\x83\x79\xfa\xff\xbf\x7e\xe4\xf7\x55\xa9\x57\x6e\x82\xed\xbc\xdd\xb1\xd6\x8a\x75\x1b\xb5\x06\x03\x20\xce\x56\x68\xdd\x93\x82\x0d\x6f\x56\x71\xd5\xa9\xb0\xe1\xc1\x66\x13\x98\x07\x2c\x51\x1b\xae\xb8\x9a\x01\xef\x7d\x95\x6d\xb9\xaa\xec\x3b\xd6\xb1\x1f\x1a\xc3\x2e\x0d\x1b\x56\xdb\xf8\xf0\x9e\x43\x67\x40\x95\xde\xb4\x84\x03\xd7\x7e\xb2\x3d\x9e\xe1\xbb\xda\xda\xaa\xa3\xd1\x5d\x70\xc6\x2b\x3f\x19\x26\xaf\x4f\x80\x1c\xdd\x80\x8d\x62\xb2\x19\x09\x2d\xa5\xe5\xa8\xf2\x5f\x9b\xc5\x0e\xd2\x67\x76\x9e\x36\xef\x82\x7b\x56\x7f\xb4\x1b\xa3\x91\x9d\xe7\x3c\x80\xee\x0a\xaa\x42\xa2\x6c\x7c\xd7\xee\x6e\x68\x70\xd9\x27\xee\x08\xfb\x97\x19\xab\x02\x92\xb1\x04\xe4\x2a\x36\x69\xd0\xda\x55\xd0\xdc\x72\x91\x3d\xd0\xa5\x3a\xea\x8d\x6a\x9e\x83\xa6\x8f\x27\xa5\xaf\xb6\xee\x02\xc1\xad\xa6\x3c\xa5\x32\x75\x6f\x74\xac\xaa\xd1\xf7\xe1\x08\x1f\x30\x3c\x89\x4f\xc5\x1b\x32\xd7\xba\x50\x6f\xce\xcf\x67\x4c\x8f\xef\xff\xa8\xc6\x4c\x9c\x27\x22\xcf\x4b\xce\xf4\xf2\x1c\xa3\x8d\xd8\xa4\xd4\x42\xaa\xf3\x14\x16\x90\x9d\x2b\x36\x1b\x51\x99\xcc\x99\x86\x44\x97\x12\xce\x69\xc1\x46\x89\xe0\x0b\xe0\xe8\xbf\x18\xe7\xe9\xaf\x3d\x49\xcf\xab\xc3\xb7\xd8\x04\x3a\x54\xe4\x02\x46\x25\xbf\xe7\xe2\x81\x8f\xd0\xbc\xa7\xf6\x62\x18\xbb\x45\xad\xfa\x16\xb0\x86\xfb\x04\xb5\x16\x62\x0f\x9b\xe0\xb3\xaf\xac\x99\xa2\x11\xe5\xe9\xc8\x86\x6a\x3d\xef\x02\x77\x71\xab\x8e\xea\x70\xd0\xdd\xa9\xeb\x66\x0d\xa2\x89\x66\x0b\xe8\x14\x94\xe8\x5b\x98\x62\xf0\xd1\x67\x5d\xa5\xa5\xb4\x7b\xa9\x11\xa5\xe8\x43\x34\x72\xba\x44\x19\x1e\x89\x25\xc2\x0a\x6f\x5c\xa4\xe0\x5c\x8e\x8b\x3d\x42\x07\x7d\xbb\x35\x6c\xf9\xce\x68\x9b\x2e\xd2\x11\x3d\xba\x4b\xa5\x21\xb7\x57\x81\x1d\x2d\x5b\x12\x2d\x97\x36\x3c\x52\xde\x13\xa6\x7d\xcc\xa1\x51\xef\xef\xf1\x39\xa5\x44\xc2\x50\xa4\xaf\x97\xad\x9b\xae\xe2\xbd\x5a\x94\x14\x42\x31\x7c\x2f\x27\xb8\xec\xd7\x5f\x77\x99\xa7\x11\x7e\xf4\x87\x7f\xdb\x67\x1f\x4d\x11\x58\x73\x4f\x6f\x7b\x3b\x3c\x77\xda\xcc\x79\x76\x4b\x7f\xac\xbc\x55\xd0\x08\xa2\x89\xe0\x4a\x4b\xca\xb6\x63\x49\x6c\x6e\x1d\x43\x22\xba\xc7\x1d\x10\xdc\x9d\x17\x9d\x26\x85\xac\x67\x15\x78\x81\x05\xb7\xbc\x9f\xea\xe6\xc4\x58\xa8\x09\x9f\x1d\xb3\x27\xbb\xb5\xad\xf3\x1c\x91\xa0\x79\xb2\xbf\xb6\xc0\xbe\xe9\x3b\xd4\x37\x6e\xab\xf7\xba\x9c\x71\x51\x7d\xfc\xfe\x13\x24\xe5\xae\x98\x6c\xeb\x2d\xd4\xed\x6e\x9b\x91\xf6\xbc\x99\xda\x45\x2f\x5b\xea\x0d\x87\xf0\x5f\x38\xa1\x52\xe0\x7a\x39\xe9\x52\x51\xcd\xd4\x74\x5f\x47\xb0\x6f\x66\x55\xab\x75\x87\x46\x28\x57\x75\x62\xaa\xb0\x38\x94\x19\x6c\x7e\x36\xd3\xc8\x39\x93\xb9\x10\x6a\x1f\x33\x51\xb3\x51\xbb\xe9\xf0\x1d\x16\x4c\xd8\x00\x25\xc4\x1c\x90\x24\x37\x6c\xd3\x5d\xf1\x0d\xa2\xac\x6b\xb0\xfe\x19\xdb\x57\x57\xf7\x0d\xcd\x7d\xd5\xe6\xf0\x81\x38\x66\x70\x74\x6f\x99\x3f\x66\x28\xac\x2b\x4d\x54\x99\x1b\x52\x1e\x80\xcd\xe6\x5a\x9d\x11\x36\xde\xdb\x5e\xe4\x9b\x39\x46\x40\x93\x79\xe3\x15\x72\x00\xdd\x2a\x96\xdd\x3c\x7b\x4d\x1f\xe8\xc9\xa3\x90\x46\x4f\x37\x87\xef\x70\x56\xc9\x0d\xab\x47\x62\xe3\x36\x38\x23\xa0\x93\xf1\xe9\xfe\x71\x15\xb6\xd5\xe0\x75\x66\x16\x27\x4b\xc2\x34\x98\xcb\x18\x55\x7f\x29\xca\x99\x9d\x6b\xf0\x29\x62\x38\x07\x55\xf6\x3d\x86\xbd\xa5\xe9\xfe\x26\x09\xdf\x8e\xec\xa2\x1d\x99\x13\x83\x73\x5b\xe6\x1e\x7a\x19\x57\x00\x1d\xe0\x50\x21\x4e\x48\x50\x85\xb0\x66\xb2\x55\xd7\xf8\xff\xd8\xd3\x01\xde\x6c\x66\xa8\x13\x75\x5a\x6f\xad\x39\x9b\xcd\xfd\xce\xa2\x4e\x3e\x68\xef\xc8\x6e\x1b\xac\x7b\x58\x88\x6d\x1d\x83\x43\x6c\x8b\xc3\x05\x1b\x49\xef\xf5\xf1\x6c\x1c\x09\x0d\x32\xaf\x96\x0d\x4f\x0d\x5e\x2b\xce\x2d\xed\x8b\xb8\xbb\xc3\x4a\x5e\x75\xa6\xe2\xc4\x9c\x72\xc2\x8c\x06\x69\xf8\xd4\x48\x14\xa7\x63\x72\x41\x78\x59\xb1\xe5\xc7\x08\xe3\xa2\xa2\xcb\x75\x64\x88\x55\xa2\xee\xab\x2b\xb7\x0e\xb9\x4a\x6d\xeb\x16\x8d\xd9\x6c\x23\x37\x03\xf0\x74\xd9\x95\xc7\x3a\xb1\x6b\xd4\xb1\x83\x30\xb1\xc0\xf7\xe1\xdf\xa2\x7b\x1f\xab\xb0\xe8\x96\xaf\xd4\x51\xbd\x20\xf3\xb3\xa6\x1c\x5f\xf1\x80\x36\xbb\xb1\x73\xd1\x75\x57\x90\x38\x3b\x83\x44\x9a\x57\x12\x14\x60\xbe\xb9\xad\xcc\x72\x05\xa1\xd1\x9a\xed\xd6\x7d\x39\x59\xe2\xb7\x7b\xc6\xde\x6f\x6f\xa1\xcc\xb5\x6e\x41\x6c\xb6\x6e\xb1\x18\x6e\xdd\x56\x77\x6f\x9c\x68\xf5\x08\x84\xe1\x70\x71\x62\xd8\xb7\x0c\x10\xe7\xf4\xd8\x16\xce\x61\xeb\xb6\x7f\x14\xfc\xb6\x7e\xa2\x2d\x47\x2c\x16\x61\x5b\x87\x38\xfa\xcd\x6d\x2d\xb8\xed\x79\xc2\xea\x37\xb7\x80\xf8\xd8\x4d\xad\x6b\x08\xfe\xe6\x16\x9f\x51\x98\x76\xf3\x02\x51\xfa\x9b\xdb\x4e\xb1\xfb\x67\xed\xc0\x7d\xf2\x8d\xb6\x8c\xe9\xfb\xa0\x5b\xb6\x6e\x91\x57\xbc\x5b\xc0\xff\xe6\xf6\x3c\xeb\x7d\xf1\x72\x29\x01\x9b\xdb\x81\x13\x05\xf6\x24\x6a\x3b\x41\xdf\x68\x43\xcc\xf7\xfa\xac\xf1\xe3\x48\xd4\x34\x48\xb0\x30\x7b\x3e\xaa\xdc\x29\xd8\x67\x0e\x70\xc2\x3b\x24\x31\xb9\xb5\x90\x80\xa8\x8f\x98\xf5\xd1\xc9\x28\xbc\xbd\xed\x9c\x3d\x11\x92\x0d\xb1\xb9\xc5\x93\xd7\x6c\x8b\x24\xb5\xd9\x16\x99\x7b\x44\xcb\xb2\x78\xf1\xce\x51\x4f\xf8\xda\x3a\x23\x0f\xa8\x22\x58\x77\xe8\xa0\x22\x3c\xd9\x06\x15\x61\x50\x11\x9e\x6e\x83\x8a\xb0\xde\x06\x15\x61\x50\x11\x82\xda\xa0\x22\x3c\xd9\x06\x15\xe1\xc9\x36\xa8\x08\x75\x1b\x54\x84\xfe\xab\x08\xa1\x19\xb2\x9b\x9b\xf5\xb7\x44\x73\xfb\xfc\xc5\xba\x1b\x57\xfd\x3c\xa8\xdc\xf8\x30\xf7\xb6\xc3\xc7\x48\xd1\xb7\x4e\xd4\xb8\x43\x27\x91\x4b\xf6\x96\x94\xcf\x80\xbc\x1e\xbd\x7e\xb5\x77\x52\x45\xb3\x85\xc4\xa6\x37\xdb\xbe\xa0\x51\xeb\x2d\xfa\xce\xd8\x16\xbf\xd0\xbf\x90\x1e\xc7\xd9\xab\xb8\x8a\x96\xf2\xb9\x25\xbe\xa6\xaa\x48\x90\x83\xde\x3f\x21\xc2\xb7\xa6\x63\x9a\xe5\x50\x05\xbd\x59\xb6\xee\xd2\x78\xea\xa4\x58\xc1\x5d\x80\x84\xd9\x96\x5d\xb7\x5d\xa7\xb7\x4d\x80\xda\x64\xf3\x09\x98\x37\xee\x1a\x4a\xa4\x89\x12\x39\x58\xb8\x36\x7f\x75\x98\xd7\x05\xbf\x0d\xc8\x09\x8c\x67\x63\x92\x96\xe0\x60\x10\x6c\xd6\xc9\xe9\x59\x23\x38\xb3\x6b\x2c\x91\x11\x78\x24\xfe\xc7\x4c\xac\x8b\xe9\x84\x05\x70\x5d\xd2\x2c\x5b\x12\x58\xb0\x44\x57\x2b\x80\xc9\x59\x4c\xab\x80\xb9\x0e\x56\x45\x43\xd5\xcf\xd1\x1a\xff\xea\x26\x9e\x84\xeb\x89\x6b\x74\x74\xe7\xe9\x2b\x05\x01\xec\x0c\x8d\xb7\x5a\x92\xb4\x19\xcd\x06\xa4\xe1\x3f\xf1\xe0\x7e\xbc\xe9\x1a\xbb\x43\x22\xc9\x23\xc1\x32\x48\x4c\xd5\xc0\x05\xcc\x08\xe9\x42\x7a\xd6\x67\x70\x43\xc8\xcc\x06\xfc\x8f\xbd\x73\xf3\xdb\x4d\xcf\x21\xef\x82\x21\xb2\xa9\x19\xda\xee\x44\x21\x32\x31\x5b\x36\x37\x9e\xab\xdb\x5f\xa3\x9d\x53\xa2\xca\x89\x53\x6e\xcd\xd9\xbf\x5a\xd9\xa9\x43\xb0\xc7\xd6\x36\x04\x7b\xac\xb5\xc1\x92\x3b\x58\x72\xf7\xe8\x67\xb0\xe4\x0e\x96\xdc\xc1\x92\x3b\x58\x72\xbb\xb6\xc1\x92\xbb\x17\x51\x83\x25\x97\x0c\x96\xdc\xad\x6d\xb0\xe4\xba\x36\x04\x7b\x6c\x6c\x83\x8a\xb0\x6f\x1b\x54\x84\xf0\x7e\x06\x15\x61\x50\x11\x06\x15\x61\x50\x11\xba\xb6\x41\x45\xd8\x8b\xa8\x41\x45\x20\x83\x8a\xb0\xb5\x0d\x2a\xc2\x7a\xc7\xd1\x82\x3d\x9e\x81\xdc\x98\x84\x16\x22\x8d\x0e\xe7\x52\x88\xf4\x11\x34\x17\xeb\x0b\x4f\xc4\x28\x13\x09\xc5\x5a\x82\xcc\xfe\xc4\xc5\xa0\x28\x9a\xdb\x50\x80\x33\xf2\x4f\xc1\xc1\x62\x40\xd8\xda\x9d\x39\x10\xa1\xe7\x80\x65\xba\x4e\xd4\x69\x87\x44\xf6\x01\x0d\x66\x97\x36\xa0\xc1\x0c\x68\x30\x03\x1a\xcc\xcb\xa2\xc1\xcc\xa9\x72\x25\x2e\x50\x28\xda\x0e\x0e\xd3\xe0\xd8\x77\x20\xf3\x01\x1b\xe6\xa9\xb6\xa6\x8b\xbb\xe3\x63\x56\xb8\xb1\xd9\xed\x8c\xa7\x2e\x9c\x12\xd2\xeb\xf6\x3c\x3b\xc3\x1d\x4e\x0b\x4d\x53\x48\x49\x01\x72\x64\x0f\x8f\x20\x53\xe6\x2a\xcc\xac\x9c\x66\x37\xc3\x5d\x19\x62\x4f\x00\x57\xda\x33\x11\xd0\xd3\xe1\x51\x57\xda\xaf\x12\x2d\x54\xa9\x19\xb1\xd5\x12\x7f\x3e\x3b\x0c\x96\x38\xf6\xc2\x11\xd1\x2e\x4c\xe9\xbb\x20\x8b\x61\x2c\xf3\x1e\x9a\xdf\x6e\xf7\xaa\x29\xbb\xbd\xc5\x36\x69\xf8\x42\x9d\xff\x5d\x82\x5c\x12\xb1\x00\x59\x1b\xab\xfc\x4d\xab\x5c\x8c\x36\x62\xe1\xbb\x3a\xb4\xe1\xaa\xe9\xe5\xd4\xa2\x4c\xf1\x32\xcb\xce\x6c\xef\xab\x6c\xcf\x5f\x44\xb6\xf2\x92\x30\xdf\x47\xf2\x5e\x44\x31\x70\xc7\xb4\xff\xc6\x8e\x24\x23\x3d\xab\x58\xbb\xbd\xc5\x35\x4f\x44\x34\x4e\x3c\x93\xf5\xb0\x2f\x95\x71\xb7\xb7\xe7\xf4\x2f\x91\xd8\x3e\x26\x12\xd9\xcf\x44\x22\xfa\x9a\x48\x5c\x7f\x13\x89\xee\x73\x22\x31\xfd\x4e\xe4\xc5\x2b\xfd\x6e\x6f\xd1\xcd\x8a\xb1\x5d\x51\xe4\xd9\x18\x0c\x79\xe9\x8a\xc2\xdb\xdb\xcb\xd4\x1a\xde\xde\x9e\x61\x17\xc4\x74\x4f\x91\x67\xdd\x03\x07\xa9\x69\xbc\xbd\xf5\xd2\x69\xf5\x28\x61\xcf\x5e\x07\x79\x7b\x8b\xee\x03\x22\xcf\xe0\x07\x22\xb1\x7d\x41\xe4\x79\x8e\xec\x33\xfb\x84\x5e\x60\x80\x4e\xd5\x9b\xb7\xb7\xe7\xe0\x39\x07\xad\xf8\xfc\x18\x59\x07\xac\x05\xbd\xbd\x1d\xbe\x4a\xf4\xf6\x16\x59\x3a\x0f\xad\x2c\xfd\x14\xa1\x51\x58\xc5\xf3\xb8\x5f\x49\xeb\x5c\x7c\x07\xcb\xb8\xc1\x9f\x11\x4e\xee\x87\x16\x75\x5e\xfd\xd4\xae\x86\x5d\x2d\xb5\xa3\xaf\xcd\x0a\xec\xce\x47\xe0\x2a\x62\x67\x59\x30\x0d\x13\x20\x9a\xde\x03\x46\x5c\x08\x2c\x47\xc2\x52\xb0\x75\x6b\xec\x56\xc7\xf1\xcd\x16\x2f\x15\xa4\x86\x90\x4c\x88\xfb\xb2\xf0\x47\x05\xd3\x8a\x63\x1c\x4c\xc6\x13\x91\xfb\xfc\x69\x9b\x4d\x67\x4e\xbc\xe3\x05\x23\x5b\x67\xcc\x7e\x8e\xe4\xe0\x25\xed\x8c\xaa\xff\x68\x19\xf9\xfe\x41\xa8\x22\xff\x40\xf5\x87\x93\x13\xfc\xe1\xe9\x3f\xc2\x43\x33\xab\x25\xb0\x7e\x39\x51\x22\x87\x5d\x29\x52\xde\x5e\x9d\xc7\x66\x37\x98\x20\x5f\x1b\xa5\x39\x71\xc7\xd6\x9f\x7e\x42\xb9\x66\xa7\x95\x29\x7a\x4c\x70\x7f\xa1\xee\x97\x0a\x7e\xac\x2d\xd5\x9e\xeb\xfb\x0e\xc2\x23\x32\xab\x95\xab\x23\x7b\xac\x87\x7b\xec\xca\xbe\xdb\x2a\x7c\x55\xcd\x38\x2b\xe3\x05\x8f\x7b\xe7\x63\x07\x9c\xca\x3b\x15\x72\xc2\xd2\x14\xb0\xd0\x66\xf5\xaa\x13\xe1\xa1\x31\xea\x23\x67\xf8\x7e\x6b\xef\x84\x13\x73\x91\x29\x71\xb6\x3a\x4e\x42\xb9\x07\x3f\x00\x6d\xab\x75\xb6\x86\x25\x4c\x99\x65\x51\x10\xac\x7e\xf5\x2e\x3c\xfc\xb9\xee\x89\xc8\x29\x02\x4c\xf5\xfc\xae\x58\x25\x70\xb8\x2e\xa2\x5f\x17\x5c\xe8\xe1\xc6\x18\x6e\x8c\x95\x1b\x63\xed\xe0\x3d\xdf\xa5\xb1\x36\xd4\x70\x6f\xf4\xfc\xde\xe0\x34\x07\x55\xd0\x04\x3e\x23\x0f\xb3\x35\xff\xdb\xbc\x35\x4f\xbe\x6a\x94\xd3\x06\x99\x47\xf5\x0a\x78\xa8\x1a\xbc\xb1\xb0\xdf\xd4\x87\x42\x95\xbc\x51\x6b\xb5\x41\x8c\xe5\x9b\xab\x51\x7f\xc1\x94\x78\x35\x5f\x70\x50\xe8\x7c\x85\x2a\xf6\xb4\x31\x38\x8e\x15\xfe\xda\x08\x41\x53\xbb\x59\x78\xba\x0a\x4a\x53\x8f\x88\x7e\xe0\x1c\x28\x57\xe4\xc8\x07\xc5\x1e\xab\xfa\x89\x1d\x8b\x2a\x3f\xd6\xaa\xf2\x56\x15\x45\x27\xff\xe7\xff\x9e\xb6\x4a\x5a\xd5\x04\x0d\x5e\xfe\x9d\xdb\xe0\xe5\x0f\x6a\x83\x97\x7f\xf0\xf2\xc7\xe8\x6b\xf0\xf2\x0f\x5e\xfe\x8d\x6d\xf0\xf2\x0f\x5e\xfe\xc1\xcb\x3f\x78\xf9\xd7\xdb\xe0\xe5\x1f\xbc\xfc\x8d\x36\x78\xf9\xbb\x93\x35\x78\xf9\xf7\x6c\x83\x97\x3f\xa6\x97\xbf\x36\x5c\xf4\xcd\xfa\xd6\x34\x69\xb9\x4c\x56\xd4\x3e\x35\xd5\x2c\xa9\xd1\xa3\xfc\x53\xf6\x5f\xfd\x32\xc5\x35\xcd\x64\xcf\x63\x88\x6b\x1a\xfb\xd6\xec\xa9\x91\xec\x70\x5b\xad\x6e\x95\x5d\x6e\x6d\xe4\x67\x35\xc8\x0d\xe6\xf6\x6e\x54\xd6\xa9\x65\x7d\x3b\xea\x77\x1e\xcc\x40\xcd\x45\x99\xa5\x46\xb8\xad\x90\x0e\x52\x72\xe2\x3d\x6b\xa7\x66\x2b\x72\xa1\xdb\x5f\x72\xcd\x46\xf5\x13\x55\xa2\x20\xba\x05\x7d\x35\x8f\xf0\x25\xf6\x36\x82\xda\x7b\xe4\x70\x17\xaa\x24\xfb\xfa\x74\x98\x1b\x1a\x64\xeb\x1d\x98\x22\x29\x4c\x19\xb7\x20\x2d\xb2\xe4\xdc\x08\xe7\x82\xbb\x1c\xfa\x60\xfa\xac\x48\x60\x5d\x7d\x8e\x0f\x59\x93\x06\xce\x07\xda\x35\xea\xe5\x6f\xa4\x49\x53\x64\xa2\x94\x3b\x9c\x77\xc1\x9d\x53\xd5\x7c\x62\xfb\x09\x26\xad\x62\x51\xb8\x22\xac\x7a\xfb\x70\xee\xf4\x1e\xb9\x52\xf3\xc5\x98\xc2\xfd\x41\xb3\x4c\x3c\x84\x4b\x1b\x51\xce\x75\xe4\xb2\x35\x81\xa7\xed\x61\xef\xaa\x37\x2b\xb9\xbf\x61\x9a\xed\x50\x30\x67\xc7\x36\x14\xcc\x79\xba\x0d\x05\x73\x1e\x2f\x98\xd3\x88\x6c\x6a\x56\xce\xe9\x3a\xdb\x58\x6f\xe7\x00\x95\x73\x08\xf9\xcb\x1c\x90\x6f\x48\xb0\xe1\x48\x65\xa6\x59\x51\x23\xa2\x29\xbb\xf2\x99\x35\xc4\x4d\x1d\xb2\x4e\x9b\x8b\x19\x1a\x69\x32\xef\x48\xc0\x0a\x0f\x44\x2a\x10\x77\x4d\xe1\xcd\x66\x11\x65\xd0\x0f\x6c\xcb\xca\x78\x0b\x9d\x05\xf6\x61\x9f\x3f\xfe\x47\xc0\xad\xf3\x0e\xc5\x9e\x76\xbc\x9d\x22\x27\x46\x5a\xca\x96\x2e\xea\xac\x75\xfd\xb4\xc4\xac\xce\xc3\x5a\x2f\xc2\x02\xbc\x8a\x36\x63\x0b\xe0\xb5\x8c\x76\xa2\x4e\x4f\xbd\xae\xb8\x2a\x7b\x76\x1e\x33\x44\x66\xed\x7e\xaf\xee\x2b\x6b\xae\xc8\x8a\x9d\xc7\xdd\x20\x63\xfe\x47\x43\x16\xfb\xcf\xa7\xa5\xcc\xce\x43\x5b\xd6\xe6\xe1\x96\x1a\xdb\xaa\x96\x2e\x3b\xf6\xdd\x13\xec\x98\x70\x18\x90\x18\x7e\xd8\x68\xf0\x1f\x71\xeb\x53\x1d\x02\xf6\xe3\x00\x90\x1f\xbf\xa4\x82\x51\xbd\x0c\xfe\xe9\x9d\x9d\xe9\x39\xd0\xe2\x7b\x1d\xec\x33\xc0\xc5\x07\xf5\xf3\x8b\x82\x8b\x3f\x50\x30\xcf\x2f\x10\x35\xbe\x07\xc1\x3b\x87\x0c\xdc\xf9\xc5\xa1\xc6\xf7\x28\x50\xa7\x97\x41\x3a\x7d\x0b\xd0\x19\x60\xd8\x83\xda\xe7\x09\xc3\x1e\x35\x08\x27\x36\x1f\xe9\x61\xf0\x4d\x0f\x03\x6f\xfa\x1a\x74\x13\x51\x52\x7e\x9e\x60\x9b\x48\x2c\xe0\x79\x82\x6c\xe2\xa5\x46\xc7\x3c\x95\x87\x86\xcf\xe8\x45\x2e\x74\x9f\x61\x33\x7a\x95\x00\xdd\xaf\xe4\xe7\x43\x24\x3e\xf7\x06\x26\xe3\x80\x10\x19\x71\xc4\xc0\x08\xc2\xdf\x73\xf0\xfb\x78\xb2\x58\x54\x38\x8c\xa8\x3c\xff\xf0\x30\x18\x5f\x2c\xdb\x8f\x08\x7f\x31\x70\xfe\xad\xad\xef\x9c\xff\xb9\xe1\x2e\x0e\x0b\x75\x31\xf0\xff\x9d\x5a\x54\x58\x8b\x67\xf6\x9c\xbe\x24\x9c\x45\x3f\xa0\x2c\x5e\x0c\xc6\xa2\x3f\x10\x16\x2f\x06\x5f\x31\x78\xac\x07\x8f\x75\xbb\x0d\x1e\xeb\xc1\x63\xbd\x4f\x3f\x83\xc7\x7a\xf0\x58\x0f\x1e\xeb\xc1\x63\x1d\xd8\x06\x8f\x75\x47\xa2\x06\x8f\xf5\xe6\x36\x78\xac\x07\x8f\xf5\xe0\xb1\x5e\x6b\x83\xc7\x3a\x88\xc0\x9e\x7a\xac\xe3\x40\x42\xc4\x3c\x91\x7d\x82\x82\xe8\x03\x0c\xc4\x4b\x41\x40\xf4\x0e\xfe\x61\x30\x41\xef\x46\x5d\x1c\xa8\x87\x98\x47\xb8\xdf\x10\x0f\x7d\x86\x77\xe8\x29\xb4\xc3\xf3\xc0\x3a\x3c\x27\xa4\x43\xf0\x99\x8d\x7a\x5a\x0b\x91\x5e\x70\xcd\x7c\x0a\xd9\xfe\xe7\xb4\x75\x3a\xdf\xe1\x1f\x13\xb0\x67\xac\x75\x60\x9a\x79\xf2\xb2\xcc\x40\xb9\x34\x71\xba\x10\x2c\x25\x45\xa9\xb5\xcd\xbc\x75\xe7\xd3\x6f\x7c\x9a\xdb\x4c\xf9\x33\xf2\x4f\xc1\xe1\x8c\x80\x4e\xc6\x66\x73\x63\x0e\xba\xd0\x73\x90\xe6\xf1\x13\x75\x7a\xba\xff\x9a\x04\xc9\x67\x61\xa6\xbd\x42\xc2\x14\xe4\x67\x81\xac\x80\x9e\x67\x07\x5f\x20\xad\xc3\xdb\x52\x8f\x21\x02\xee\x0b\x7b\xfc\xb4\x70\x59\xef\x78\xec\x6d\xda\x79\xd7\x1b\x12\xf1\x0d\x5a\x1b\x08\x1a\x6e\x8e\x2d\x18\x07\x67\x64\x52\x6a\xc2\x34\x02\x03\x24\x73\x21\x54\x57\xee\xe2\x92\x94\xf1\x45\x16\x4c\x58\x73\xba\xe0\x80\xa8\x03\x42\x56\x3c\xb0\x41\x94\x55\x25\xea\x9f\xb1\xae\xca\x56\x2e\x94\xae\x77\x88\x37\xce\x9a\xc1\xab\x3b\x67\x26\xc1\x50\xa4\x89\x2a\x73\x43\x8a\x05\x54\x51\x16\x02\xa0\xe3\xb0\x53\x23\x62\xd1\x64\xde\x78\x85\x1c\x40\x5b\xd7\x9c\xcf\x72\x6e\x1c\xe2\xa6\xce\x74\xe2\x73\x5e\x3b\x8e\x6d\x3a\x03\xa5\xcf\xb6\x22\x8e\x6c\xdf\x0b\x96\x27\x9c\x76\x35\x4a\x25\x22\x2f\x4a\x0d\x46\x8e\x2f\x73\xb3\x9b\x98\xc6\x88\x15\x64\x46\x52\x94\x33\x3b\xe1\x1e\xe4\xc1\x4e\x44\x8d\x20\xc2\x53\xa2\xca\x89\x96\x34\xd1\xdd\x6f\xff\x23\xbb\x7c\x47\x55\x60\x11\xd2\xc2\xa6\x15\x4e\x08\x99\x53\xd5\x8c\xb8\xa9\xaf\xd7\x27\x70\x72\xfe\x47\xc0\x05\x6b\x06\x3e\x51\x0d\x41\x67\xce\x66\x73\xbf\xe7\x8c\x92\x8c\xa6\x85\xd6\x5e\xfd\xdc\x01\x26\xcc\x01\x76\x47\x09\xa5\x96\x7a\xe3\xdb\x19\x4f\xc9\x5f\xf0\x5b\x48\x57\xd3\xae\x71\x3b\x58\xdb\x01\x4d\x53\x23\x8f\x80\x1c\xd9\x83\x24\xc8\x94\x39\x4d\x69\xe5\x64\xbb\x19\xee\xca\x21\xfb\x01\x12\xb0\xb2\xe3\x02\x7a\xb2\x33\xdf\xb1\x83\x18\xae\xb6\x95\x57\x89\xa6\xb4\xdc\xb8\x69\x1e\x93\x0b\x2b\x18\x79\x36\x66\x34\xf8\xb3\x35\x18\xac\xf5\x53\x6d\x67\xa6\x07\x41\x11\x71\xfc\xb5\x31\x90\x25\x48\x44\xf7\x6a\x34\x84\x09\xf2\x32\xe5\x7f\x5e\x00\x69\x82\x1c\x06\x6d\x82\x0c\xa5\x67\xfa\x15\xcb\x43\x86\xd2\x33\x3d\x8b\xed\x21\x43\xe9\x99\xa1\xf4\x4c\xf7\xd6\x87\xd8\x1f\x32\x94\x9e\xe9\x41\x2c\x10\x19\x4a\xcf\xec\xd2\x86\xd2\x33\x43\xe9\x99\xf5\x36\x94\x9e\x19\x4a\xcf\x34\xda\x50\x7a\xa6\x3b\x59\xbd\x8b\x27\x22\x3d\x8e\x29\x22\x43\xe9\x99\xc8\xa5\x67\xe2\x65\x49\x93\x67\x38\xb9\x87\x46\xc8\x20\x7d\x49\x97\x26\x3d\x47\xca\x20\x7d\xcb\x99\x26\xbd\xcb\x9b\x26\x07\xca\x9d\x26\x7d\x42\xce\x20\x87\x45\xcf\x20\x7d\xcc\xcf\xfb\x3c\x2a\x17\x45\x45\xd4\x20\xcf\x71\x57\x1c\x1e\x59\x83\x7c\xe9\xd7\x45\x44\x84\x0d\x32\xdc\x18\xbb\xb4\xcf\xe1\xc6\x78\x6e\xc4\x0d\x72\x70\xd4\x0d\x32\xdc\x1b\x5d\x5b\x54\x24\x0e\xf2\x32\x1e\xe6\x97\x44\xe4\x20\xbd\x41\xe5\x20\x2f\x89\xcc\x41\x7a\x85\xce\x41\x5e\x12\xa1\x83\x0c\x5e\xfe\xc1\xcb\xbf\x73\x1b\xbc\xfc\x83\x97\x3f\x46\x5f\x83\x97\x7f\xf0\xf2\x6f\x6c\x83\x97\x7f\xf0\xf2\x0f\x5e\xfe\xc1\xcb\xbf\xde\x06\x2f\xff\xe0\xe5\x6f\xb4\xc1\xcb\xdf\x9d\xac\xc1\xcb\xbf\x67\x1b\xbc\xfc\x31\xbd\xfc\x71\xd0\x44\xc8\x33\x9c\xda\x3e\xa1\x8a\x90\x9e\x20\x8b\x90\x17\x44\x17\x21\x7d\x44\x18\x21\x83\xb9\xbd\x33\x95\x71\x50\x47\xc8\x33\x1c\xf5\x7e\xa3\x8f\x90\x9e\x23\x90\x90\xfe\xa2\x90\x90\x67\x43\x22\x21\xcf\x8c\x46\x42\x62\x9d\x6b\x9b\xa2\xda\x17\x9c\x1f\x4b\xcd\x5a\x66\x6d\xab\xc2\xff\xa3\x89\xf3\x61\x9a\xad\x3b\x34\x92\xf2\x19\x90\xd7\xa3\xd7\xaf\x5e\x85\xe7\xee\x32\xae\x61\x06\x21\xd6\xcb\xa9\x90\x39\xd5\xd8\xd3\xef\x7e\xdb\xa9\x9f\xe8\x6c\x7b\x1b\xdc\x43\xff\x60\x50\x9c\x4d\xa4\x0d\x43\xd1\x92\xfe\xb7\x60\x92\xa0\x56\x60\x4e\x6b\x0e\x9a\x74\xf6\x0d\x34\x80\x37\x34\xcb\xe1\xcc\xf3\x7e\x1b\x13\xe1\x03\x00\x1c\x1a\x4b\x4a\x04\x77\x22\x9b\x61\x77\x5d\xf7\x5e\xf7\x57\x4e\x80\x2a\x44\x3e\x98\x80\x79\xed\x8e\xe3\x53\x6d\x61\x7e\x0a\xc1\xb8\xf6\x86\x1e\xf3\xce\xe0\x37\x84\xc3\x10\x4a\x4b\xb0\x16\xd4\x3a\xc6\xa9\x2c\x52\xaa\xe1\x34\x44\x55\x54\x4b\xa5\x21\x47\x28\x19\x23\xe9\x51\x0c\xfe\x21\x5a\x2e\x31\x00\x64\x01\x5c\x97\x34\xcb\x96\x04\x16\xcc\xc5\xef\x98\xe1\x31\x7a\x89\x69\x15\x34\xf3\x7f\x99\x03\x72\x10\x09\x36\x30\xa9\xcc\x34\x2b\xb2\x1a\x85\xc4\x2e\x7f\x66\x4d\x72\x53\x07\xba\xd3\xe6\x67\x86\x46\x9a\xcc\x3b\x12\xb0\xc2\x0d\x91\x0a\xc3\x80\xa4\xc2\x3b\xce\xe2\xcc\xa0\x47\xd8\xa8\x0a\xaa\xb2\xd5\x59\xcc\x1f\xf6\xf9\x23\x81\x04\xdc\x3f\xef\x50\x00\x6a\x47\xde\x29\x72\x62\xe4\xa6\x6c\xe9\xe2\xcf\x5a\x17\x51\x4b\xe0\xea\x3c\xac\xf5\x27\x2c\xc0\x2b\x6b\x33\xb6\x00\x5e\x4b\x6b\x27\xea\xf4\xd4\x6b\x8d\xab\x52\x68\xe7\x31\x43\xa4\xd7\xee\x37\xec\xbe\x52\xe7\x8a\xd4\xd8\x79\xdc\x0d\xd2\xe6\x7f\x34\xa4\xb2\xff\x7c\x5a\xde\xec\x3c\xb4\x65\x6d\x1e\x84\xa9\xb1\xad\x6a\x39\xb3\x63\xdf\x3d\x41\x91\x09\x07\x04\x89\xe1\x91\x8d\x06\x04\xf2\xcc\x05\x93\x5e\x00\x00\xe4\x00\xe0\x1f\x43\xe1\x9e\xa1\x70\x4f\xbb\x0d\x85\x7b\x86\xc2\x3d\xfb\xf4\x33\x14\xee\x19\x0a\xf7\x0c\x85\x7b\x86\xc2\x3d\x81\xad\x47\x21\x3b\xbd\x0c\xd7\xe9\x5b\xa8\xce\x50\xb8\x27\xa8\x0d\x85\x7b\x86\xc2\x3d\x43\xe1\x9e\x46\x1b\x0a\xf7\x84\x1c\xcd\x78\x49\xd2\x31\x4f\xe5\xa1\x81\x34\x7a\x91\x15\xdd\x67\x00\x8d\x5e\xa5\x42\xf7\x2b\x0d\xfa\x10\x29\xd0\xbd\x01\xcc\x38\x20\x58\xc6\x50\xe7\x69\xa7\x16\x15\x18\x23\x2a\xcf\x3f\x3c\x20\xc6\x17\xcb\xf6\x23\x02\x61\x0c\x9c\x7f\x6b\xeb\x3b\xe7\x7f\x6e\xe0\x8b\xc3\x82\x5e\x0c\xfc\x7f\xa7\x16\x15\xe0\xe2\x99\x3d\xa7\x2f\x09\x6c\xd1\x0f\x50\x8b\x17\x03\xb4\xe8\x0f\x98\xc5\x8b\x01\x59\x0c\x1e\xeb\xc1\x63\xdd\x6e\x83\xc7\x7a\xf0\x58\xef\xd3\xcf\xe0\xb1\x1e\x3c\xd6\x83\xc7\x7a\xf0\x58\x07\xb6\xc1\x63\xdd\x91\xa8\xc1\x63\xbd\xb9\x0d\x1e\xeb\xc1\x63\x3d\x78\xac\xd7\xda\xe0\xb1\x0e\x22\xb0\xa7\x1e\xeb\x38\xe0\x10\x31\x4f\x64\x9f\x40\x21\xfa\x00\x08\xf1\x52\x60\x10\xbd\x03\x82\x18\x4c\xd0\xbb\x51\x17\x07\xf4\x21\xe6\x11\xee\x37\xd8\x43\x9f\x81\x1e\x7a\x0a\xf2\xf0\x3c\x00\x0f\xcf\x09\xee\x10\x7c\x66\xa3\x9d\x56\x5a\x6a\x91\x8b\x92\xeb\x5b\x90\x0b\x96\xc0\x45\x92\x98\xbf\xee\xc4\x3d\xec\x99\xd5\xdf\x3a\xa2\x17\x8f\x74\x4b\x18\x4f\x59\x82\xb6\xc9\x87\x39\xe8\xb9\x4b\x9b\xc3\xe7\x08\xb5\x0f\x12\x8d\x4f\xd6\x27\x14\xe9\x34\x77\x2c\x66\x76\x63\xd7\xfb\x2e\x81\x9d\xa1\x89\x10\x19\xd0\x7d\x5c\xd1\x4e\x66\x04\xb9\x27\xa3\x0e\xe3\x59\xdf\x3b\x51\xa2\x1e\x9d\x4c\x20\x13\x7c\xe6\x72\xc8\x1d\xd7\xd9\x77\x17\xbe\xad\xbb\x73\xae\xda\xa4\x94\x12\xb8\xce\x96\x38\xcd\x69\x0a\x29\x41\xf3\x54\x2e\x16\xfb\x6f\xf2\x3b\x64\x47\x5e\x87\xa7\x9a\x64\x40\xcd\x7b\x70\xa8\x5f\xc4\x30\x34\x4a\xae\x3b\xd0\x5e\xf9\x96\x2d\x88\x40\xa7\xf5\xdf\xff\xc6\xee\x74\x47\xb7\x4f\x83\xd7\xcb\x50\x4a\x4b\xd0\xc8\xd7\x98\x0f\x64\x90\x4b\x51\x92\x07\x6a\x55\x29\x59\x72\x64\xa9\x38\x51\x1d\x16\x39\x40\xe9\xe8\x6e\x8c\x1f\xe1\xbd\xb4\xe7\xcf\x42\x8c\xe3\x54\xce\x3a\x89\x4e\x31\x64\x89\x0b\x39\x2b\xad\xa6\xe8\x8e\x22\x70\x2d\x97\x88\x87\xd1\xed\x5e\xb8\x9b\xb7\x4e\x48\x4e\x67\x70\xac\xc8\xdb\x0f\xef\xcc\xad\x83\x11\x48\x6c\x6a\x65\x76\x77\x0b\x15\x52\x2c\x58\xda\xf5\x1a\xfa\x81\x4a\x46\x27\x99\xd1\x7a\xa7\x20\x81\x1b\x49\xfa\xab\x93\x1f\x2e\x6e\xfe\x7e\x75\xf1\xe1\xfd\x29\xea\xbf\xf0\xa9\xa0\xdc\xb0\x83\x52\xd5\xc8\x3c\x8e\xc2\x63\x45\x80\x2f\x98\x14\xdc\xcc\x02\xda\x0d\x29\x59\xb8\x4e\x3b\x51\x54\x07\x8e\x48\x50\x22\x5b\x40\x6a\xb1\x34\x2a\x02\xeb\xf0\x9d\xa2\xd4\xde\x82\xea\x63\x6f\x4a\x9e\xcc\x29\x9f\x41\x3a\x26\xef\x44\x69\x5e\xec\xab\xaf\xf0\x25\x24\xa4\x65\x02\xdd\x74\x1c\x6b\x82\xb7\x27\xf7\xab\x33\x2f\xb3\x98\xdb\x1f\x63\x6f\x08\xa8\x84\x16\x7e\x6a\x9a\xb3\xa7\x96\x5c\xd3\x4f\x6f\x2c\x16\xc7\xd1\x57\x8d\xaf\x8e\xba\x07\xae\x15\x52\x98\x57\xb1\xb2\xa0\x7d\xfb\x8c\x69\x90\x34\x23\x47\xcd\x11\xc6\xe4\xbd\xa1\x0b\xd2\xe6\xda\x5a\x30\x1a\x58\x80\x44\xdb\xaa\x5b\xd9\x33\x22\x61\x46\x65\x9a\x81\xea\x66\x14\x12\xd3\xea\x0a\xb7\xa6\x16\xb7\xab\xa0\xb2\x19\x73\xa1\xc7\xa1\x8c\xdb\xb7\x0f\x02\xc1\x4e\xa6\xe2\x0d\x99\x6b\x5d\xa8\x37\xe7\xe7\xb5\x14\x34\x66\xe2\x3c\x15\x89\x3a\xd7\x54\xdd\xab\x73\xc6\x0d\xf3\x1b\xa5\x54\xd3\x51\x83\xeb\x9e\x5b\xd9\x78\x94\x88\x3c\xa7\x3c\x1d\x51\x77\x8e\x47\xd5\xce\x3e\xff\xb5\x93\x1e\x47\xb4\x7a\x8a\xf1\x11\x1d\xa9\x39\x74\x5a\xb9\x30\x45\x31\x40\x41\x0c\x14\x32\x23\x2b\x84\x6e\x2e\x0f\xc5\xb0\xdf\x57\xfc\xd9\x2e\xc5\x98\x5c\x09\xed\xf0\x8a\x5c\x44\x25\xde\xb6\xb8\xca\x31\x59\xf8\xfb\xab\xbb\x9b\xbf\x5e\x7f\xbc\xbc\xba\x1b\x38\xf9\xc0\xc9\xb1\x0d\x9c\x7c\xe0\xe4\x1d\x06\xee\x0b\x27\x07\xbe\x38\x14\x17\xf7\x4a\x71\x83\x63\x55\x5b\xd5\x25\x0a\x54\x61\xde\xd5\x3e\xe8\xb6\x45\xa3\xec\xf4\x83\xed\x98\xd6\x64\xbf\xe7\x8b\x1f\x68\x3b\xe2\x84\x6f\x9c\x42\xe2\x1e\xb0\x1a\xfa\xdb\xb0\x09\x0c\xf6\x7c\x85\xc6\x85\x75\x52\x48\x6d\x0b\x8f\xd9\x32\x43\x77\x37\x78\xc7\x33\x77\x5f\xd1\xbc\xb2\xd5\x6e\x5a\xf2\x10\x2b\xe6\x07\xeb\x50\x55\xee\x50\x52\xbe\x24\x85\x64\x5c\xe3\x56\xba\xb8\x7d\x7b\x79\x49\x92\x39\x95\x34\xd1\x20\x15\x81\x4f\x09\x14\x9a\x1c\xff\xcf\xe3\xee\x63\x46\xf0\x75\xa0\xf5\xba\x0f\x2b\xb3\x8f\xe0\x16\x30\x4c\x2d\xf2\x15\x12\x16\x4c\x94\x2a\x5b\x56\x1e\x82\xcd\x7c\x74\x95\x81\x12\xca\x43\x28\x30\xfb\xc2\x9b\x77\x37\x0e\xb8\x22\x74\x6e\x12\x20\x43\x6c\xed\x87\x15\x3d\x1d\x11\x31\x04\xd0\x80\xf1\x37\x88\xae\xbb\x8b\xa1\x01\xe3\x76\x12\x60\xb7\x09\xa3\x01\x74\xb4\xc5\xd8\x80\x8e\xde\xd9\xbc\x2e\x14\x36\x8e\x02\xa6\x26\x16\x27\xfb\x5a\x8a\x3c\x12\x37\xbb\x45\xc0\xc2\x2a\xcf\x6e\xd3\x51\x3d\x76\xc1\xeb\x2d\x45\xc0\xa9\xb4\x55\xa6\x9b\xf9\x3c\x30\xdb\x2d\x4a\xd4\x4c\x9c\xc0\xeb\x44\xf0\x29\x9b\x7d\xa0\xc5\x77\xb0\xbc\x81\x69\x98\xaf\xbe\x3d\xdf\xe8\xb6\x74\xe1\xbf\x78\x81\x1a\x91\xcb\x0e\x16\xe6\xba\x8c\x16\x74\x14\x2b\x34\x3f\x3c\x2c\x3f\x5e\x14\x7d\x94\x08\xfa\xd6\x42\xba\x6c\xe1\x3a\x5d\x36\x56\x82\x45\x94\xc0\xcc\x30\x49\xd4\xb7\xf8\xd1\xd1\x4d\xc9\xd4\x5d\x0f\x51\x82\xcc\xef\x6a\xb4\x73\xa6\x08\x4c\xa7\x90\x68\xb6\x80\xac\x42\x48\x4f\xcf\xc8\xa4\xd4\x1e\x9b\x7c\x42\x93\xfb\x07\x2a\x53\x45\x12\x91\x17\x54\xb3\x09\xcb\x98\x5e\x12\x16\xa3\xbe\x96\x0b\x15\x70\x80\xeb\x3e\xc6\x9a\x2b\x4d\xf1\x2a\x14\xce\x10\x68\x56\xdb\xc6\x50\x50\x9f\x20\x67\xb9\xa9\x07\x1a\x8f\x42\x4a\x2e\x94\x26\x09\x48\x23\xd4\x65\x4b\xf2\x20\x45\x8c\x1a\x18\xbb\x1a\x73\x12\xc1\x8d\xfc\xaf\xce\xc5\xc2\xc8\x82\xf0\x70\xfe\x20\xe4\x3d\xe3\xb3\x91\x79\xf1\x91\x65\x56\xea\x1c\x63\x5b\xce\x7f\x8d\xff\xe9\xd3\x29\x22\x3e\xa3\xfb\x0d\x39\x3a\x0a\xec\x4b\x14\x36\x8c\x33\xf2\xa9\xbc\xc5\x00\xa1\x65\x4b\x74\xaa\x2e\x14\x23\xfa\x30\xad\x90\x4f\x79\xf7\xbc\xd3\x02\x22\x4d\xf3\xfe\x81\x15\xeb\xed\xb9\xca\x8c\x21\x3b\x88\x7b\x7b\x07\xf3\xc0\xfa\xfa\xb7\xcc\xca\xb1\xc2\x42\xa4\x6f\x88\x2a\x8b\x42\x48\xad\x48\x0e\x9a\xa6\x54\xd3\xb1\x39\x10\x67\xed\x3f\x31\x04\xec\x8c\xfc\xa3\xfa\xd0\xe2\x11\xfc\x78\xfc\x1f\xdf\xbd\xff\xeb\x7f\x1e\xff\xf4\x8f\xe6\x77\x28\xae\xd9\xec\xa2\xc6\x03\x81\xaf\xa0\x0a\x48\xc6\x5c\xa4\x70\x85\xd4\xe1\x9f\xaa\x15\xf0\xe3\xbe\xd0\x54\x97\x6a\x3c\x17\x4a\x5f\x5e\x57\x7f\x16\x22\x5d\xfd\x2b\x30\xc7\xa9\x87\x72\x0f\xae\xed\x35\xd5\xdd\x11\xe6\x49\x54\xe9\x87\x16\xec\x07\x90\xaa\x73\xcd\x96\x66\x6b\x9d\x07\xd7\x6b\x05\x85\x9f\xcc\x21\xa7\xf8\xcf\xaf\xfd\x14\x98\xfb\xf8\x41\x32\xad\x31\x06\xcc\x15\xa8\x10\xd3\x33\xcf\x5a\xad\x52\xb5\x78\x1d\x5c\xa0\x2d\x2a\xe7\xaf\x56\x30\xf2\x84\xe1\x8c\xb8\xd9\xb2\x1c\xa0\x86\x5b\x59\x0b\xf9\xbc\xb8\xbe\x24\x0b\x3b\xc3\x3d\x9a\x9c\xe7\x63\xd7\x19\x44\x57\xb7\x82\x19\xf6\xd7\x15\x55\x6e\x99\x1a\xaa\x9b\x53\x98\x91\xf2\xd0\x05\xba\xb1\xcc\xc7\xa6\xe3\xbe\xe7\x0b\x33\xae\x22\x53\xa0\xba\x94\x40\x66\x54\xfb\x02\x3e\xc0\x8d\x4e\x1e\x98\xa2\xd2\x43\x9e\x19\x9e\xc2\x3d\x22\x45\x28\xcb\x35\x9d\x2c\x44\x56\xe6\x78\xb9\xf5\x84\x7b\xc7\xd7\x5d\xa3\xa8\x72\x5e\x01\x76\x51\x14\xad\xc3\x40\x2e\x0c\xb3\x5f\x60\xce\xb1\x7d\x06\x4d\x8f\x58\xa6\xa9\x5d\x9b\x49\x69\x2a\x75\x94\xba\x7c\xa4\x06\xf0\xf2\x96\xee\x3a\xc0\xc3\x5a\xb9\xf2\x17\xf7\x5d\xd4\xcd\x16\x4f\x23\x17\x59\x31\xc7\xcc\xa1\x59\xa5\x07\x6f\x3c\xed\x67\x15\x84\x83\x62\xff\x44\x0b\x5b\xc6\x72\xa6\xad\x5a\xf9\xfa\xb7\x7f\x6c\x10\xda\xa3\xbb\xe1\xd9\xd4\x9c\x28\x3b\x76\x93\xae\x64\xb6\xeb\x23\x6a\x52\x95\x1c\xed\x9f\x8b\x83\x34\x91\x0a\x70\x26\x53\x4c\xab\x36\x23\xd4\x27\x68\x41\x65\x15\x25\x54\x4e\x32\xa6\xe6\x71\x4a\x58\x5f\x4e\xab\xd5\x31\xfd\x2b\xc0\xb0\x63\x2d\x4b\xa8\x12\xba\x6a\xd9\xc3\xcc\xc5\x0a\x95\x11\x48\xd8\x66\x62\x6e\xd7\xcd\xab\xdd\xf9\xd7\x98\xbb\x55\x47\xc3\x8f\x7f\xf5\x6c\xf3\x30\xa5\x99\x7a\xb9\x89\xa0\x9c\x80\x94\x42\x56\x6e\x28\x09\xba\x94\xbc\x4e\x72\xbf\x16\x29\x49\x24\x58\x68\xc2\x1e\x29\xeb\xa4\x69\x14\xc1\x39\x0b\xec\xae\x88\x2f\x64\x47\xbb\xde\x0c\x6d\xcd\xfb\xcd\x8a\x06\xf6\xe2\xb2\xde\xbc\x36\x58\x62\x0c\x41\xd0\xb4\x0f\x8e\x09\x55\x45\xe4\xcc\xb6\xf4\x25\x0f\xdd\x69\xc0\x01\x8f\xc7\xe3\x63\x4b\xa5\x90\xf6\x2a\xb5\x16\x45\xf3\x79\xaf\xae\x85\x5a\xa8\x7a\x06\x33\x3c\x6f\x18\x95\xdd\x12\x61\xae\x90\x9f\x2a\xef\x62\x8d\x25\xab\x7f\x06\xca\x94\xaf\x44\xf6\x75\xaf\x6d\x60\x9e\x4a\xbf\x78\x15\xa3\x7f\x63\x53\xf5\xab\x7a\x6a\x56\xf8\xb1\xf8\x34\x46\xe5\x00\xa5\x43\x0d\xc5\x27\xb6\xcb\x71\x52\x94\x67\xae\xfb\x71\x0e\xb9\x90\xcb\xea\x4f\x28\xe6\x90\x83\xa4\xd9\x48\x69\x21\xe9\x0c\xce\xaa\xc1\xed\xcf\xaa\xbf\xec\x0f\x5b\xe4\xad\xff\xda\x46\x77\xd4\x99\x57\xce\xde\xf7\x05\xea\x72\x7e\xdd\x7a\xa2\x40\x55\xdb\xea\x19\xf8\xcf\x71\x15\x30\x67\x7d\x6e\xd5\x2c\xa2\x4b\xdd\x72\x23\x75\x56\x0b\x1c\x18\xf7\x61\x85\x3c\x75\xdc\x1f\x3e\x44\x48\xca\x16\x4c\xc5\x80\xd1\xda\xe0\x9e\x60\xce\xae\x21\x4a\x5d\x94\xda\x55\xbe\xae\x2c\x28\x9f\x0a\xa1\x30\x5a\xa4\x2a\x9e\xd8\x32\x0d\xbe\x0e\xf5\xbc\xa0\x8c\xa1\x41\xf2\x37\xe4\x7f\x9f\xfc\xed\x37\x3f\x8f\x4e\xff\x74\x72\xf2\xe3\xab\xd1\xbf\xff\xf4\x9b\x93\xbf\x8d\xf1\x1f\xff\x7a\xfa\xa7\xd3\x9f\xfd\x1f\xbf\x39\x3d\x3d\x39\xf9\xf1\xbb\x0f\xdf\xdc\x5d\xbf\xff\x89\x9d\xfe\xfc\x23\x2f\xf3\x7b\xfb\xd7\xcf\x27\x3f\xc2\xfb\x9f\x76\xec\xe4\xf4\xf4\x4f\x5f\x05\x93\x4e\xf9\xf2\x63\x20\xf7\xb6\x6d\x14\xad\x70\xf9\x6a\x8f\x91\x5c\x6d\xad\xab\x90\x71\x3d\x12\x72\x64\xbb\x7e\x83\x4a\x4a\xe0\x00\x7e\x7b\xc5\x3e\xff\x37\x9e\x6b\xd6\xb7\x59\x25\x14\xf6\xe8\x80\x3f\x97\xa0\xa1\x20\x91\xa0\x5f\x22\x4c\xc6\x8e\xe4\x35\xc3\x15\x54\x8f\x2f\xed\x06\xfd\x25\x44\xce\x54\xf5\x93\x71\x5d\x6b\x4d\xca\xa8\x57\xe3\x5a\x09\xa2\xc4\xda\x11\xdd\x73\xf7\x10\x08\xa8\x4e\x86\x48\x9b\x90\x36\x44\xda\x6c\x21\x65\x88\xb4\x09\x6a\x9f\x65\xa4\xcd\xad\xe5\x49\xbf\xc8\x30\x9b\xf5\x04\x33\xd3\xe9\x7d\xe7\x82\x33\x9d\x33\x77\xb6\x65\xba\xe5\xb4\xd8\xbb\x37\xe0\x8b\xae\xc1\xd5\x31\x53\xdd\xbc\xd9\x43\x0b\x52\x88\xa2\xcc\xa8\xde\x92\x45\x11\x29\xef\xad\x67\x9e\xb3\xbf\xcc\x81\x3b\xd1\xcf\xc5\xf0\x33\x4e\xf2\x32\xd3\xac\xe8\x98\x10\x50\xa9\x96\x15\x38\x24\xa1\x4a\x89\x84\x51\x9f\x08\xee\x80\xad\x94\xf6\xaf\x8c\x96\x79\x4d\xef\x31\x87\x26\x81\x14\x78\xd2\xd1\x72\xf8\x83\x05\xa3\xf4\x73\x3b\x59\x9a\x7b\xe8\x3d\x5f\xb8\x3b\x89\xa4\xa5\x4d\x70\x85\xda\x57\x1a\x65\xdc\x2f\x2b\x9b\xd1\x9c\x4b\x97\xad\xd0\x48\x6a\x44\x09\xb2\x32\x22\x56\xe0\xd9\x55\x08\x24\xa6\x7f\x58\x36\xdd\xed\xc2\x0b\x56\x0e\xc2\x45\xf1\x2a\x1b\x21\x48\xc7\x5a\x93\xc1\xeb\x30\xd1\xb6\xec\xdd\x79\x84\x1e\x25\x70\x84\x4b\xe5\x71\x25\xf2\xe7\x90\xc6\xfb\x22\x89\xf7\x44\x0a\x7f\x1e\x09\xbc\x9f\xd2\x77\x34\xc9\x3b\x8e\xd4\x1d\x47\xe2\xde\x23\xae\x3d\xa6\x94\x1d\x47\xc2\x7e\x0e\xfb\x5a\x21\x61\xca\x3e\xf5\x21\x6d\xf9\xa3\x77\x5f\x68\xf8\x84\xa6\x9a\x42\x42\x01\xbc\x42\x1e\xf6\x1e\x58\xa0\xc9\x7c\xc8\x38\x27\x95\x5d\x34\xee\x85\x7d\xbb\xc9\x52\x36\xdc\xd6\x64\xb8\xad\xf7\x68\xc3\x6d\x3d\xdc\xd6\x2f\x72\x5b\x3b\x6e\xf5\xe5\x5f\xd5\x91\x91\x96\x10\x43\xee\x50\x06\xa8\xb7\x6d\x28\x3b\xe4\xcc\xcf\x89\xf6\x55\x1d\xc5\x3a\xc6\xf3\x1c\x47\xee\x76\xe2\xda\x4c\xb6\x0a\xba\xd0\xc2\xb2\x3d\x32\x67\x33\xb3\x3d\x33\x58\x40\xe6\xd4\x6a\x92\x53\x4e\x67\xb6\x84\x89\x16\x55\x09\x5f\x21\xb1\x42\xa9\x64\x1d\xd1\xd3\x57\x30\x01\xd1\x82\x65\xb8\x4c\x26\x68\x8a\x5f\x4a\x91\x65\x46\x5e\xc9\xd8\x3d\x90\x77\x50\x64\x62\xe9\xaa\x90\xf0\x94\xdc\x6a\xaa\x61\x5a\x66\xb7\xa0\x3b\x85\x77\x07\x71\x1c\x24\xf8\xba\xcc\xb2\x6b\x91\xb1\xa4\x93\xf7\x2f\xc6\x56\xbc\xc4\x0d\x58\x94\x59\x46\x0a\x24\xa4\xdb\x3e\xfc\xc8\xf1\x2a\xbf\xc8\x1e\xe8\x52\x9d\x91\x2b\x58\x80\x3c\x23\x97\xd3\x2b\xa1\xaf\xad\x11\xa9\x5b\xbf\x4d\x4c\x10\xdb\x39\x61\x53\xf2\x06\xcb\x2f\x6a\xa2\xe9\x0c\x63\x8b\x7d\x18\xf1\x99\xd9\x50\xcd\x41\x89\x30\x8c\xf2\x81\xa9\x43\xda\xf6\xc2\x4f\xe9\xaf\x71\x74\x73\x75\x76\x3e\xb5\x41\x7b\x35\x63\x53\x48\x96\x49\x76\x30\x86\x79\x91\x60\x7a\x6d\x5d\xec\xa5\xc1\x4e\xd4\x52\x69\xc8\x3d\x9e\x3d\x9a\x74\x19\x27\x12\x54\x21\xb8\x42\x29\xaf\xe6\x12\xd5\x8b\x10\x4c\x92\xe9\x98\xd4\x11\xd1\xe2\xdb\x59\x31\x08\x55\x09\x0a\xa1\xf4\xad\xa6\x52\x77\x95\x4f\x62\xe9\x02\xd7\x9e\x10\x73\x92\x13\x9a\x65\x90\x12\x96\xe7\x90\x32\xaa\x8d\xdc\x4e\xa7\x1a\xab\x18\x34\x58\xbd\xb2\x31\xfb\x8d\xbc\x91\x39\xe5\x69\x06\x92\x4c\x29\xcb\x54\xf7\xcc\x81\x36\x34\x97\x91\xcf\x41\xe6\x8c\xa3\xf7\xc2\x46\x9d\x62\xf4\xb7\xf9\x2b\x49\x84\x4c\x5d\xbd\x00\xa6\x95\xff\x2a\x88\x89\x9a\xf6\x11\x25\xbb\xc6\xf6\x5e\x0d\xda\x25\x93\x4c\x24\xf7\x8a\x94\x5c\xb3\xcc\xbe\xbc\x10\xf7\xa8\xbf\x64\xc8\x4e\x3a\x0f\xdd\x9d\x4b\x55\xff\x1c\x55\x07\x6c\x64\xa8\x52\xe7\xbf\xae\xbf\xc2\x0f\x3a\x12\x17\x41\x8b\x8e\xa1\x43\xc3\x27\x48\xa2\x95\xda\x79\xff\x09\x92\x56\xa1\x2b\x07\xa4\x6a\x76\x94\x03\x4f\x8e\xe4\x77\xb4\xad\x67\x75\xbb\x03\x40\xab\x9b\x2d\x76\x48\xcf\x5b\xb7\x08\xae\x64\xaf\x5f\x93\x8c\x71\x68\x2f\x8c\x62\x29\xb4\x17\xc7\xba\x3d\x9d\x92\x4b\x52\x26\xb1\xc6\xd0\xd2\xa3\x7e\x05\x93\xe6\x69\xc1\x32\x3c\x42\x68\x72\x72\x7c\x7e\x7c\xba\xb6\x47\x8e\x15\xa6\x5f\xd8\x6b\x71\xec\xa0\xb3\xab\x97\x52\x2c\x2f\xb2\x25\xbe\xc7\x71\x7a\x46\x98\x8e\x11\x23\x64\x6e\x43\x59\x72\x3f\x2b\x0e\xea\xfb\x8c\x28\x41\xb4\xa4\xbe\xb4\x9e\xfd\xd4\x3c\xa4\x65\xe9\x2e\xf4\x93\xe3\x9f\x8f\xcf\x08\xe8\xe4\x94\x3c\x08\x7e\xac\x71\xfa\xc6\xe4\x4e\x90\x32\x38\xe7\x89\xd4\x84\x2c\x45\x49\x38\x80\x3b\x5b\x45\xc6\x12\xa6\xb3\x25\x5e\x37\x44\x94\x36\x43\xcf\x88\x16\x01\x10\xe5\xcd\xf6\xfe\x13\xd3\x0e\x7c\xc3\xf0\xef\x57\xb8\x9b\xec\x95\x45\xa8\x51\x46\x16\x70\x3e\x07\x9a\xe9\xb9\xcd\x66\xe0\x82\x8f\xfe\x09\x52\x20\x8c\x39\x77\xdf\x7c\x71\x65\xe2\x23\x06\x32\x3d\x53\x45\x35\x73\xed\x7d\x03\x9d\x45\x22\xb2\xca\x8f\xbe\xbd\xbb\xbb\xfe\x06\x74\x93\xcb\x73\xfc\x90\x7c\xf3\xfe\xce\xe7\xb0\xa0\xa1\x1f\xe4\x54\xc8\xbc\x07\xec\x3d\x4e\x70\xed\x88\x14\x42\xf6\xe1\x96\x99\x0b\x15\xb4\x9c\xe4\x19\xae\x98\x6f\x85\xd2\xd6\x97\x63\x75\x13\x8e\x89\x8d\xa2\x9d\x90\xe1\xd3\xf7\x2f\xaf\xc7\xe4\xaf\xa2\x34\x13\x32\xa1\x93\x6c\x59\x15\x32\x52\x10\x5a\xf4\x94\x90\x23\x43\xca\x91\xb9\x41\xcc\xce\xff\x16\x68\x0a\x52\x21\x83\x06\x1a\xa9\x3c\x6b\x84\xe3\xde\xa0\x2d\xea\x52\xbe\x2d\x95\x16\x39\x99\xbb\xd7\x6e\x43\x9c\xbb\xc3\x39\xb6\xc7\xd5\xc1\xc9\x4a\x28\x2c\x13\x77\xbf\xf9\xe2\x58\xf4\x1a\xf7\xb2\xf3\xee\x3e\x9f\x58\x31\xb5\x39\x6d\xce\xc1\x61\x81\x4a\x1d\x6f\x33\x5b\x35\x5a\xdc\x6b\x94\xf2\xbe\xf1\x72\x06\x48\x18\xf8\xf9\x6a\x47\xe8\xec\x09\xee\x29\x5e\x1a\x02\x89\x16\x6a\x4f\x9e\xad\xec\xbf\x11\x68\xdd\xe6\xb3\x36\xe8\xee\xd6\xf3\x4d\x9d\x33\x55\xa1\x05\x24\x94\x0b\xce\x12\x9a\xb1\x7f\x42\x4a\xca\x42\x70\x97\x5b\x87\x92\x6d\x42\x15\x8c\xd0\xf3\xce\xb5\xab\x45\x5c\xa3\x5d\x1b\xee\xa0\x85\x40\x71\x0f\x83\xe7\x0c\xbb\xb7\x54\xc7\xac\x7d\x1f\xad\xbc\x7c\x20\x74\x7b\xb3\xad\x39\xd4\x5b\x8b\x15\x67\xc7\x93\xcf\x42\x9c\x24\x91\x80\x17\xd6\xb1\xcd\xb4\x20\x34\x49\x10\xcf\xdb\x5e\x57\xc8\x78\x15\xc8\x45\xf8\xfe\x8a\x36\xaf\x46\x04\xec\x9b\xec\x65\x63\x0e\x24\xe1\x65\x3e\x01\x59\x03\x43\x4a\xbd\x3e\xa7\x51\xac\x2e\x6e\x58\x3b\x9c\xf7\xd2\x7a\x19\x83\xf2\x19\x90\xd7\x66\xe4\x3f\xfc\xfe\xf7\xbf\xfb\x7d\x84\x71\xcc\xeb\x55\x25\x42\x39\xb9\xbc\xb8\xba\xf8\xfb\xed\x0f\x6f\x11\x6e\x3e\xb4\xfb\x48\x49\xb2\xb1\x53\x64\xa3\x26\xc8\x3e\x6b\x7a\x2c\x02\x37\x06\x73\xd9\xd8\x47\xe2\x16\xa9\x32\x9b\xb0\x54\x16\xa2\xde\xe9\x24\x8d\x6a\xb8\x46\x8d\x0a\xdf\x9d\x4d\x67\x9e\x61\x58\xbd\xe0\x54\x2a\x03\x28\xa2\x69\xfc\xb7\xa6\xb7\x56\x39\x20\x92\x96\xd2\x56\xa5\xad\x9c\x57\xb5\x2d\xdf\x39\xad\x90\x86\x2f\x48\xf9\x57\x90\x08\x9e\x86\xa8\x00\xb1\x44\x5a\x47\x49\xd4\x33\x77\x6b\xfb\xf4\x26\xe2\xfa\x2a\x71\x83\xa1\x26\x19\xba\xa2\xa4\x5a\xd5\x38\x7c\xd2\xa2\x41\x60\x6f\x7f\xf8\xb7\xee\x0e\xb2\xa4\xb8\x15\xc9\x7d\x44\x13\x59\x20\x03\x7b\x67\x4e\x5a\x62\x7d\x81\x77\x6f\xaf\x2d\x71\x66\x65\xae\x3e\xde\xd5\xd0\x2f\x46\x0a\xa7\xe4\x7b\xef\x9b\xfa\xd6\x79\x0b\x29\x4f\xc9\x3d\x14\x61\xda\xa5\x61\x98\x3e\x8c\xb0\x1d\x45\x38\x76\x25\xbb\x11\x65\xce\xa6\x57\x5b\x46\xe0\xa3\xff\xac\x44\x1c\x56\x01\xa8\xe1\x9c\x47\x47\xa0\x53\x42\xa6\x94\x65\x84\xa2\x55\x5e\xb3\x1c\xc8\xc3\x1c\xb8\x35\xf6\xd7\xd1\x12\x5f\x10\xc3\xf9\x52\xad\x8d\xc7\x3e\x24\xfc\xcd\xde\x56\xc3\x50\x54\x8c\x2f\x5b\x0d\x70\x3c\x5b\xb6\x50\xcd\x06\x35\x60\x97\x36\xa8\x01\x1d\xd5\x80\x42\xc2\xad\x16\x9d\x65\xcd\x68\x01\x37\x96\x8c\x2d\xe1\x36\x13\x98\x0a\x09\xab\xf1\x36\x8d\x38\x18\x17\x39\x1f\x10\x19\x7c\x71\x7d\x59\xf9\xbe\x44\x2b\xd6\xc5\x22\x17\xab\x32\x99\x7b\x37\x29\x07\xa5\xce\x31\xb2\xa6\x2c\xac\x61\x19\xaf\xb6\x52\x42\xf7\x28\x9f\x42\x02\xe4\x38\x8f\x67\x35\x9a\x90\x79\x5d\xe0\xf6\x43\xd0\x89\xf5\x9b\xfb\xb0\x22\x87\x13\xeb\xa7\x6b\x1a\xe4\xce\xaf\x27\x36\x91\x54\xcd\x01\x73\x67\xe1\x13\xd3\xca\x0e\x6a\xd1\x58\xfd\x8c\x1b\x79\x61\x26\x69\x02\xa4\x00\xc9\x84\x11\x31\x4a\xae\x53\xf1\xc0\xc9\x04\x66\x8c\x2b\xbf\x62\x21\x24\xf9\x2d\x81\x91\x44\x4c\x55\xb5\xbb\xc7\xe4\xa6\x55\x39\xce\xa1\x8b\x25\xa2\xe6\x99\x6e\x8a\xce\x22\x4d\x09\x0a\x2f\xb8\x0d\x4a\x9a\x65\xcb\x7a\xe3\x35\x01\x42\xb7\xcc\x50\xf7\x0d\x61\x67\xf6\xa4\xe4\xf8\xa2\x29\x64\x74\x69\x33\xc8\xa7\x8c\xa3\xf5\x57\xaa\xd3\x71\x78\x68\x56\x67\x02\x85\x6c\xf4\xb9\x75\x67\x30\x45\x24\xd0\x24\x08\xc7\x78\x88\x01\x7b\xaa\x0d\x31\x60\x43\x0c\xd8\x10\x03\xb6\xde\x86\x18\xb0\x76\x1b\x62\xc0\xb6\x13\xd4\x67\xa7\xdd\x10\x03\x36\x58\x65\xd6\xdb\x10\x03\xd6\xa9\x0d\x31\x60\x4f\xb6\xde\xb1\xe8\x21\x06\x6c\x87\x36\xc4\x80\xed\xd8\x86\x18\xb0\x21\x06\x6c\x88\x01\x1b\x62\xc0\x02\xda\x10\x03\xb6\xff\xeb\x0d\xce\x9f\xee\x6d\x88\x01\x1b\x62\xc0\xf6\x6c\x43\x0c\xd8\x4a\x1b\x62\xc0\x86\x18\xb0\xc7\xda\x10\x03\x36\xc4\x80\xb9\x36\x58\x1b\xd7\xda\x10\x03\xb6\xa1\x0d\x31\x60\xfb\x8d\x33\xa8\x01\x61\x9d\x3d\x8b\x1a\xa0\xb4\x28\x6e\xd9\x2c\x00\x17\x32\xd6\x31\xb8\xad\x28\x71\xa0\x91\xca\x15\xdb\x55\xf6\x43\x6f\xc7\x52\x0e\xb2\xaf\x19\x11\xd6\xb8\x49\x26\x60\x54\x04\xf3\x5a\x45\xc8\x6d\x72\x39\x45\x07\x72\x03\xc9\xcd\x9c\x0a\x0f\x13\xc8\x5a\x65\x1d\xda\xe2\xb3\xbf\xdd\x18\x37\xba\x4b\x77\x0a\x1a\xf3\x91\x50\x6e\x2b\xa3\xba\x32\xd9\xe6\x7a\xbf\x16\xa9\xf2\x95\x24\xb8\xe0\x23\x0b\xd6\x3a\x36\x04\x8f\x85\x1a\x07\x58\x83\x03\x91\xd9\x6c\x8c\xdc\xb5\x14\x93\x83\xa1\xb3\x5d\x63\xfc\x11\x4b\x5c\x80\x9e\x98\xb6\x10\xd7\x2c\x81\x1d\x91\xd6\xda\x81\x61\x58\xac\xd9\x43\x70\x31\xc7\xb0\xab\xa0\xc0\x43\xa2\xb9\xed\x1d\x39\xe5\x51\x2a\xd5\x79\x21\xec\xff\xd5\x71\x53\x8d\x80\xa9\xce\x7e\x94\x03\xc3\xcb\x85\x44\x49\x1d\x2c\x42\xaa\x27\x11\x66\x11\xa2\xa2\x62\xca\x4a\x3d\x8d\x86\xea\x67\x24\x54\x1f\xa3\xa0\x0e\x11\x01\x75\xf0\xe8\xa7\x38\x6e\xf5\x08\x2e\xf5\x48\x12\xe9\x33\xb8\xa7\x5c\x20\xfd\xdd\x5c\x82\x9a\x8b\xac\x33\xc3\x89\xc5\x6c\x3e\x30\xce\xf2\x32\xc7\x2a\x14\x86\xa7\xb0\x45\x15\xec\xaf\x3c\xcb\x70\xd7\xbd\x8d\x38\xc0\x72\x15\x29\x60\x19\x70\xca\x32\xb3\xb5\x10\x2c\x74\x4e\x17\x28\x94\x96\x49\x02\x90\x86\x88\xa5\x4d\x6b\xf5\xef\xc6\x15\x85\x16\xa3\x9f\x29\xf2\x3a\xec\xaa\x09\xd3\x7b\x1a\xe6\xbc\xdf\xfd\xb6\x53\x1f\x33\x59\xc4\xb9\xa5\xbf\xb9\xb9\x7e\xdb\xba\xa5\xf1\x83\x6f\xf1\x18\xbf\x9d\x43\x72\x7f\xe3\x42\x69\x0e\x77\x33\x87\x9b\x99\x82\x4c\x4c\x31\x04\x83\x50\x2b\x4a\xdb\x87\x2c\xa4\x5e\x71\x81\xce\x70\x15\x41\x2e\x58\x02\xe3\x17\x30\x54\xc4\x52\xfe\xc3\x0f\x02\x41\x37\x01\xbe\x78\x5f\xc4\xae\x5b\x4b\x4e\xe5\x61\x68\xd8\xa8\x1c\xa5\x18\x34\x9a\xd1\xa4\x5a\x9b\xd9\xe6\x43\x17\x44\xc6\x89\x02\xa8\x14\x9a\x19\xd3\xf3\x72\x32\x4e\x44\x7e\x6e\x58\x87\xfd\xbf\x49\x26\x26\xe7\x39\x55\x1a\xa4\xd1\x71\xdc\xb5\x3e\x4a\x0c\x05\x8c\xcf\xc6\x79\x7a\x3a\xfe\x55\x10\x0d\x97\xce\x56\xee\xd2\xb0\xb6\x18\x09\x26\x60\xf8\xbe\x90\x2b\xd6\x02\x33\x29\xe1\x9b\x34\xf8\xfe\x0e\x2d\x2a\x12\x18\x96\x7c\x90\x90\xe4\x81\x6b\x93\x08\x0e\x81\x98\x4c\xa5\x1f\x61\xc7\xcf\x16\x72\x1c\xe5\xac\x46\x0a\x35\xee\x51\x98\x71\x6f\x74\xa1\xbe\x84\x16\x47\x0b\x2b\x8e\x15\x52\x1c\x25\x9c\x38\x46\x28\x71\xbc\x30\xe2\x38\x21\xc4\xf1\xc3\x87\x9f\x2d\x74\xf8\xb3\x08\x1b\x8e\xe8\x1f\x8b\x14\x2e\xfc\x12\xa1\xc2\xfd\xb5\xc1\x90\x08\xe1\xc1\x2f\x17\x1a\x1c\x65\x1e\xa3\x6a\xb1\x81\x2c\xe1\x00\xa1\xc0\x2f\xe1\xff\x7f\x36\xdf\x7f\x04\xbf\x7f\x4c\x9f\x7f\x34\x7f\xff\xb3\x85\xfc\x86\x87\xfb\x46\xb5\x29\xbc\x48\x98\x6f\xcc\x10\xdf\xe0\xf5\x65\x9c\x69\x46\xb3\x77\x90\xd1\xe5\x6d\x58\x20\x68\xac\x95\xb8\x5a\x0b\x16\xb5\x66\xeb\x76\x5c\xc3\x9c\x2a\xe2\x5d\xdd\x0e\xe2\xc5\xfb\xd2\x9d\x08\x4c\x28\x7a\x9c\xcd\xfb\x75\xf6\x5a\x93\xfe\x79\xae\x49\x6f\xcc\xe3\x16\x57\xa5\x27\xbb\xe6\x5b\xf1\x40\xc4\x54\x03\x27\x27\x8c\xfb\x9d\x73\xda\xb0\xd2\xd4\xee\x91\x60\x7f\x87\xe9\xf5\xf5\x2b\x3f\xc8\x97\xe7\xf7\x40\xcf\x90\x52\xbd\xf6\x7c\x39\x1a\x9f\x76\x7d\xb9\x07\xa7\x65\xd6\x76\x7f\x59\x97\x58\x1c\xdf\xd7\xeb\x31\xf9\xe0\xc4\x89\xd7\x48\x4f\xc5\x8a\x28\x4f\x89\xc3\xe7\xfa\xf2\xf6\x49\x70\xa8\x7b\x5b\xb9\xa9\x62\xd3\xdb\xf1\x2c\xf6\x06\x36\x52\xa6\x20\xd4\x3c\x85\x02\xe8\x60\x74\xed\x8d\xd1\xf5\x40\x11\xd8\x5f\x9e\xb6\xf5\xf2\x11\xd7\x83\xb6\xf5\x4b\xd1\xb6\x1a\xb0\x78\xdf\x48\x9a\xc0\x75\x9f\x84\x37\xcf\x40\xea\x44\xc0\x5a\x86\xab\xd8\x05\x07\xb0\x89\x63\x35\xe8\x21\xe2\xfb\x4d\xcb\x2c\x5b\x5a\x1b\x62\x0b\x01\xb3\xfb\xd6\xba\x9b\xc3\x1a\x74\x20\xba\x52\x37\x50\x57\xeb\x26\x85\x14\x4e\x22\x91\x25\xe7\x46\xc4\x70\xc7\xc9\x10\x6f\x74\x11\x05\xbc\xbb\x39\x9d\xb6\x80\x0d\x5d\x10\x3a\x06\x7a\xce\x81\xd4\xf9\x4b\x6d\x42\xcc\xa8\x53\x21\x13\x36\xc9\x96\x64\x4e\x33\xa3\x2c\xb9\x20\xed\x7b\x96\x65\xae\x9b\x80\xa0\x70\xd0\xd6\xf5\x6c\x25\x9a\x4c\xf0\x19\x4e\x06\xb5\x84\xc0\xa7\x02\x12\x33\x66\x92\x01\xe5\x65\x61\xe9\x34\xf2\xd1\x52\x94\xd2\xd3\x19\x14\x15\xdf\x18\x9d\x29\xc2\x59\x76\xe6\xa7\xbc\x0d\x81\xb9\xbe\xe7\x6b\x93\xb2\x82\xd4\xa1\x57\x3e\x30\x05\x67\xd8\x67\x67\x9a\x2c\x2d\xbe\x6a\xbf\xdd\x37\xf6\xb3\x42\x8a\x05\x4b\xeb\x18\x7d\xb3\x2d\x30\x3e\xbe\xf3\x58\x3f\x60\xbf\x9e\xb5\x72\xc1\x47\x1c\x66\x14\xc5\x63\xc7\xd0\x6c\x44\xa7\x1d\xdf\xc6\x0f\xf2\x94\x25\x54\x83\xc2\x9c\x84\x16\xb4\xed\x82\xd1\xce\x94\x98\xf7\x69\xec\x28\x72\xc2\x05\x11\x98\x59\x58\x72\xa6\x97\xe8\xd1\x9b\x97\x9a\xa4\xe2\x81\x9f\x86\x1c\x4c\x1b\xe6\x40\xc9\x04\x34\xad\x93\x03\xbd\x48\xa6\x08\x70\x3a\xc9\xcc\xd9\xc3\x88\xff\xbb\x8d\x1b\x80\x4c\x81\xea\x52\x02\x99\x51\x1d\xc0\x25\x36\x48\xf3\x76\x3d\x1f\xdf\x76\x4c\x39\x7f\xdd\x94\x94\x5c\x41\xa0\x20\x1b\x4d\x05\xe8\x98\xf1\x6a\x4e\xb4\x28\x75\x4f\xee\x91\x6d\xa6\x23\x9b\xb9\xd3\x50\x12\x59\x0e\x8a\x88\x32\xc0\x92\xd7\x52\xff\xdc\x70\x31\x35\xbc\xc1\xee\xb4\xb1\x75\x75\x9b\xc6\xd8\x61\x57\x0d\xa9\xbc\x81\x4f\xe0\xc3\xad\x6c\x06\xf5\xbb\xab\xdb\xbf\x7f\x7f\xf1\xbf\xde\x7f\xdf\x6d\xe1\xdf\xd3\x64\xde\xc4\x16\xe7\x84\xe2\x45\x81\x4c\x7e\x4e\x17\x40\x28\x29\x39\xfb\xef\xd2\x85\xbc\x9d\x54\xe3\x75\x64\xab\x51\xd2\x7b\x82\x04\x5f\x73\x4b\x74\xe2\x1c\x31\xd6\xf4\x7b\xa6\x10\xa8\x1a\x89\x70\x81\xff\x42\x01\x99\x4a\x91\xaf\x28\x5a\xe4\xaa\x0a\xae\x5b\x9a\x1b\x86\x5a\xd5\x6c\x0e\xb2\x9b\x44\xfe\xee\xe3\xfb\x5b\xcc\xc1\x2f\xa4\x05\x76\xc7\xe4\x02\xec\x13\x47\xb7\xa9\x83\x96\x9e\x74\x4c\x2e\xf8\xd2\x7e\x69\x99\x59\x47\x11\x25\x63\x4a\x03\x0a\xa7\x4e\x91\xf4\xe1\x81\x47\xaf\xc6\xf8\xbf\x23\x42\xd3\x54\x1a\x4d\xb3\xca\xd1\x48\x56\xb3\xcc\x3a\x8d\x6c\xf5\x57\x36\xc9\x1a\x93\xcb\x41\x63\x1a\x47\xa7\x0e\x3f\x88\xd4\xad\x04\x0a\x81\x18\xbf\x63\xa5\x5b\xa5\x25\xd5\x30\x63\x09\xc9\x41\xce\x80\x14\x54\x27\x73\x92\xd3\x25\x49\x84\x94\x65\x61\x21\x46\x52\xaa\x69\xb7\x91\xbf\x16\x92\xe4\x9e\x3b\x1b\x6e\x66\x44\xf2\xdb\xcd\x81\xa0\x35\xcb\x6e\xfe\x93\x29\x55\x82\x3a\x7f\xfd\xea\x8f\xbf\xfd\x7d\x47\xf5\x3a\xe2\xc1\xed\x1a\xfa\x14\x10\xf2\xd4\x0e\xff\xf2\x1b\x0c\x83\xae\x5b\xc8\x30\x6e\x87\xd8\x9d\x8f\xdc\x50\x31\x3e\xcb\x82\x0d\x20\xc1\x66\xc0\x50\x23\xe0\xa8\x7e\x83\xeb\xae\xb6\xc0\x70\x4b\x60\x8b\x86\xee\xa6\x94\x78\x56\xb0\x5a\x82\xf3\x76\x2f\xc7\x90\x05\x6f\x28\x76\x97\xd7\x9e\x4b\x85\xd8\x8f\x50\x9b\xa8\x0c\x53\x16\x7d\xc4\x0e\x6b\xe3\x1d\xce\xc8\x2b\xf2\x1f\xe4\x13\xf9\x0f\xb4\x82\xfd\xa1\xfb\x50\x71\x6c\x4c\x31\xc2\xf8\xe7\x42\xe9\xcb\xeb\x48\x0b\xfd\x17\x73\x5f\x99\x1e\xcd\x7a\x68\x41\x26\xcc\x99\x23\xe0\x93\x06\x69\xd4\x40\xb7\x86\xa1\x33\x17\x64\x51\x33\x04\x7e\x2e\xbb\x3b\x34\xb8\xe0\x72\xda\x8e\xfe\x7f\xa1\xfd\x8d\x03\x7f\x2b\x94\xbe\x72\xdc\xba\x09\xa1\xd3\xa4\x23\xc7\x8b\xb8\xc5\xee\x43\x46\xfd\x60\xf6\x5e\x5d\x63\x83\xa4\x02\x13\x20\x6c\x0e\xe7\x9c\x05\x30\x87\xfe\x9c\xd8\xb0\x38\xd1\x78\x5b\xf7\xb1\xad\xb5\x62\xd3\x47\x8b\x8c\x53\x52\x1a\x65\x69\x0a\x91\x8e\x51\xbf\x09\xa0\xc2\xcc\x46\xda\x10\x06\x1e\x51\x8d\xc6\x56\x5f\xab\xbc\xc3\x78\xe0\x0c\xc7\x4a\x28\xef\x2a\xc3\xda\x26\x61\x0a\x52\xda\x3c\xe1\xc9\xd2\xa7\x1b\x05\xef\xb6\x20\x2e\x57\x48\xa1\x45\x22\x3a\xc3\xa6\xc4\xdc\x2a\xd7\x8e\x16\x9c\x7b\xf4\xd5\x56\xde\xf1\x3f\xbf\xbb\x3e\x23\x77\x6f\xaf\xcf\x88\x90\xe4\xf6\x6d\x58\xf0\x53\xd3\x04\x73\x74\xf7\xf6\xfa\xe8\xa0\x2b\xd0\xc8\x61\xba\x7b\x7b\xdd\xa1\x93\xf5\xf0\xd9\x9c\x16\xa3\x7b\x58\x76\x94\xee\x62\x48\x98\xa3\x6a\x63\x45\x79\x21\x3b\xcd\x39\x2d\xf6\xee\x4d\x02\x4d\x59\xaf\x91\x5c\x7c\xd6\x61\x45\x69\x3c\x48\x97\x5c\x2c\x20\xb5\x5a\xb3\x1f\x05\x78\x5a\x08\x66\x74\xa4\x01\xe7\xe5\xb1\x36\xe0\xbc\xec\xdf\x06\x9c\x97\x4d\x6d\xc0\x79\xd9\xa3\x0d\x38\x2f\xb6\x0d\x38\x2f\x6d\x42\xfa\x98\x63\x34\xe0\xbc\x3c\xd9\x06\x9c\x97\xad\x6d\xc0\x79\xd9\xab\x0d\x38\x2f\xeb\x6d\xc0\x79\x79\xa4\x0d\x38\x2f\x55\x1b\x70\x5e\x06\x9c\x97\xcf\x97\x6b\x0f\x38\x2f\xab\x6d\xc0\x79\x19\x70\x5e\x06\x9c\x97\x66\x1b\x70\x5e\xb6\xb4\x01\xe7\x65\xc0\x79\x19\x70\x5e\x1e\x6f\x03\xce\x4b\xe7\x36\xe0\xbc\xec\xd7\x86\xcc\xc3\x3d\xdb\x80\xf3\x32\xe0\xbc\xac\xb6\x01\xe7\xe5\xc9\xd6\x0f\xf3\xf8\x80\xf3\x32\xe0\xbc\x3c\xda\x06\x9c\x97\x01\xe7\xe5\xd1\x36\xe0\xbc\x74\x68\xbd\x33\xba\x0e\x38\x2f\x03\xce\xcb\x63\x63\x0c\xda\xd6\x7e\x6d\xc0\x79\x19\x70\x5e\xd6\xda\x80\xf3\xb2\xde\x06\x9c\x97\x01\xe7\x65\xc0\x79\x19\x70\x5e\xaa\x36\xe0\xbc\x7c\xe9\x76\x27\x09\x8a\xfd\x13\xae\x45\xc6\x92\x65\x70\xb6\xcf\x0d\x28\x51\xca\xc4\xdc\xd8\xd8\x2d\x29\xb0\xdf\xca\xa2\x10\x24\x64\xf7\x0c\x42\xe1\xa6\x31\x71\x4d\x28\x05\xe9\xe6\xe0\x39\xa6\xa0\x17\x70\x0a\xfe\x05\xaf\xba\x47\x10\x8c\x7c\xf9\x6c\x3b\x7d\xdd\x8c\xa5\xc1\x5a\x7b\xf3\x45\xfa\x90\xce\xd9\x84\x3d\xaa\x76\x91\x16\x15\xb3\x65\x5b\x37\x17\x2d\x8a\x8c\x85\x24\xc6\x12\x72\x5b\xa2\x74\x01\xce\x05\xae\xde\x90\xa4\x28\xcf\x48\x0e\xb9\x90\x01\x89\x11\x11\x34\xb8\xd6\x56\xe9\xc3\x3a\xdd\x58\x82\xfc\xe4\x6b\x81\xf3\xbf\xb4\xfa\x42\x8d\x52\x55\xad\x15\xf3\xec\x30\x28\xd6\xec\x72\xba\x1a\x8c\xca\x74\xcb\x0a\x74\x25\xf4\x8d\x3b\xdc\x07\x5b\xaf\xc8\x11\x0b\x7e\x0a\x0f\x86\x5a\xf5\x56\xe4\x45\xa9\xa1\x75\xb1\xd9\x29\xb6\x4a\x07\x53\xa1\x0c\xfd\x30\xd9\xa0\x89\xe0\x53\x36\x73\xda\xf7\x79\x4e\x39\x9d\xc1\xa8\x9a\xed\x51\x0d\xf5\x70\xde\xf9\xa2\x3e\x58\x2a\x68\x92\x51\xd6\x3d\x70\x30\x16\x9b\x78\x8b\x54\x20\x0c\x58\x1d\x50\x8f\xb9\x69\xd5\x34\x9f\x55\x61\xe3\xcc\xf2\x8d\xb1\xff\xca\xfe\xf8\x2c\x40\x7b\xa4\x1a\x6d\x15\xa8\x18\x6d\xd8\xa9\x61\x0a\xa3\x55\x13\x53\x28\xc0\x68\x04\xd6\x80\xda\x5d\xee\x5f\x72\x9a\xb3\xc4\x9f\xb0\x8b\x2c\x13\x89\xb5\xc9\xb4\xb5\xca\x18\x24\x1b\x65\x37\xcf\x4b\x4d\x27\x19\x8c\xc9\xa5\x85\xa8\x10\x3c\x5b\x9a\xf3\xa7\x40\xfb\x10\x05\xb7\xf9\xc3\x34\xc9\x90\xf8\xd7\xc0\xd8\xd7\x8d\x42\x39\x6e\x2a\x8b\xa9\x01\xdc\xb0\x32\xc1\x81\x00\xd7\x72\x69\xf6\xdf\xb5\x48\x6f\xcd\x16\x6c\x3d\x1d\x0c\xb5\x11\x18\xf2\x1a\x23\xdc\x35\x30\xd4\x35\x4e\x80\x6a\x78\x70\x6a\xdc\xc0\xd4\xda\x85\x60\x91\x82\x9a\x19\x3f\xad\x6d\x51\x88\x74\xbc\x81\x35\x11\x31\x0d\xa4\xc0\x8c\x78\x2d\x52\x23\x34\x49\xb0\xfc\xa9\x3a\xa3\xd6\x80\x78\x69\x88\xbb\x47\x8b\x1f\xd5\xb5\x34\x45\x17\x94\x65\xe6\x00\x07\x12\xb0\x8e\xba\x18\xe6\x95\x89\xe4\xab\x70\xc1\xf9\x7d\xda\x2c\x2e\xad\xab\x95\x19\x96\xcc\x85\x02\x8e\xfc\x92\x56\x19\x3c\x55\x7e\x81\x63\x31\xa9\xbd\x8b\x43\xa3\x88\x2f\xa7\x04\xf2\x42\x2f\xcf\x08\x2c\x40\x2e\xf5\x1c\xa3\x0d\x2a\xdc\x50\x64\x6b\x4c\x91\x9c\xa6\x8d\xdd\x71\x46\x84\x37\x40\x07\x0e\x8f\xf7\x83\xd3\xc9\xca\x4c\x5b\x0d\x8d\xa9\x2a\x8d\xe2\xd0\xbb\x26\x36\x9c\x0d\x09\x65\x9a\x31\xe1\x68\x08\x42\xa9\xe6\xac\x1b\x70\x2d\x89\x78\x16\xbe\x47\x2a\x1a\xa9\x23\x66\x4b\xe4\xf4\x13\x9a\x27\x69\x2e\x4a\xae\x2d\x4e\x8d\xd5\x18\x2a\x29\xcf\x26\xd8\xbc\x60\xbc\xdc\xb3\xca\xf6\x24\xce\xd5\x4e\x53\x0f\x4d\x71\x1d\x23\x4f\x99\x6a\x0d\x92\xbf\x21\xff\xfb\xe4\x6f\xbf\xf9\x79\x74\xfa\xa7\x93\x93\x1f\x5f\x8d\xfe\xfd\xa7\xdf\x9c\xfc\x6d\x8c\xff\xf8\xd7\xd3\x3f\x9d\xfe\xec\xff\xf8\xcd\xe9\xe9\xc9\xc9\x8f\xdf\x7d\xf8\xe6\xee\xfa\xfd\x4f\xec\xf4\xe7\x1f\x79\x99\xdf\xdb\xbf\x7e\x3e\xf9\x11\xde\xff\xb4\x63\x27\xa7\xa7\x7f\xfa\xaa\xbb\xf7\x31\xd4\xd5\x1e\xcf\xd1\x1e\xc9\xcd\xfe\x2c\x4e\x76\xc7\x63\x0f\x7e\xf8\xdd\x15\xb8\x76\xfc\x9d\x77\xe2\xb1\xe3\x2f\x83\x6d\x32\x97\xd3\x7a\x7c\xa6\x88\xc8\x99\xd6\x90\xba\xbb\xb7\x81\x7d\xb3\x62\x0f\x72\x0c\x0b\x61\xab\x28\xde\xde\x0d\x0c\x96\xda\x8c\xd4\x99\xac\xea\x7e\x45\x0b\x18\x27\x2c\x2f\x32\xc8\x81\x6b\x64\x3c\x23\xaf\xdb\xa2\x39\x71\x5c\xbf\x41\x62\x0d\x1e\xf0\x29\x01\x48\x1d\x91\x03\x6f\x6c\xb4\x81\x37\x0e\xbc\xf1\xa9\x16\x6c\x13\x8f\xc1\x18\x6f\x9a\x44\x38\x5b\x96\xf2\x92\x32\x5a\xc8\x2b\x88\x04\x31\xc5\x40\x89\x05\x4b\x4b\x9a\x35\x91\x64\x3d\xb8\x68\x37\x0e\x80\xa6\x9d\x76\x68\x08\xba\x69\x61\x01\x59\x45\x84\x35\xd3\x8f\xc9\x5f\x6c\x38\x4f\x53\xd1\x6c\x1b\xd4\xbb\x39\xe4\x36\xbd\x6e\x1b\x11\xc2\xa9\xba\xc7\x6a\x85\xa4\x2a\xda\xa8\x4e\xc2\x30\xbb\xad\xdb\x54\x5c\x54\x5c\x23\x5b\x9e\x11\x05\xda\xe6\xd8\xcc\x61\x65\x99\xa8\x22\x47\x17\xd9\x03\x5d\xaa\xa3\xca\x27\xc9\x38\xd3\x2b\xc5\x07\x3a\xd1\x80\xd8\xb0\xa6\xc3\xa9\x30\x32\x2f\x56\x55\x98\x4e\x21\xe9\xa8\xcd\x5a\x0c\x8e\x75\xda\x5c\x3c\xba\x66\xbc\x34\x6f\xeb\x67\x15\x52\x22\x78\xa7\x81\xe0\x13\xd3\xa4\xe4\x9a\x65\x46\x58\x27\x12\x66\x65\x46\x9b\x86\x40\xf7\x66\x3e\x4c\x2e\x1d\x93\x8f\x3c\x81\xe6\xc3\xdd\x2c\xd5\x2b\x03\x18\xe1\x21\x03\x0d\xe9\x19\x76\xdd\x7e\x75\x65\x03\xcd\x5a\x27\xbf\x5a\xca\x4e\xc3\xfb\xb9\xac\x02\x89\xc6\xf6\x40\x55\x51\x0e\x24\x65\xd3\xa9\x19\x19\x95\x6d\x2e\x64\x4e\xd7\xa9\xa2\x3c\xed\x34\xba\x39\xb9\x98\x5e\xd2\x44\xf9\xc5\xca\x2e\x47\x8a\xa5\x90\x50\x79\xd4\xac\x09\x72\x91\xe9\xb9\x28\x67\xf3\x7a\x57\x84\x4d\x39\x51\x1a\xc3\xab\xcc\x64\x2a\x6f\xb9\x58\xd9\x6c\xca\xc8\x2c\x3c\x01\x2b\x5a\x09\xb0\x0c\xe3\x81\x76\x1c\x7b\x2d\x04\xc0\xc6\x74\xdb\x35\xf7\x39\x57\x18\xc3\x07\x69\x23\x41\x8e\xc3\x27\x1d\xe1\x85\xc7\xe4\xd2\x02\x5e\x9c\xb5\x7b\x6d\x4d\x89\x9d\x8c\x46\x0c\x9b\x8f\xc6\xec\x18\xc0\xb7\x32\x00\xab\x52\xcc\x10\x97\xd8\x76\x4e\xf9\xd2\x67\x74\x60\x8c\x99\xcd\x44\xab\x92\x4c\xb2\x6e\x36\xf4\xea\x2c\xbd\x78\x99\x9d\xd6\x09\xbd\x29\xb3\xc3\x79\x2f\x6f\x9a\x05\x3e\x32\x57\x80\x47\x1a\x8a\x7c\x56\xcf\x1c\x92\x7b\x7b\xf2\x52\xb0\xec\x0d\x1c\xce\x6d\xe8\xe9\x9a\x8b\x32\x4b\x2d\xaa\x6e\xcd\x9d\x91\xd3\xda\x10\x4a\x4b\x06\x95\x40\xc0\x68\x08\x08\x3d\xc2\xba\xb1\x6f\x21\x53\xb3\xbd\x2d\x4b\xc6\x8e\xad\x55\xdb\xa7\xbb\x38\x92\x90\xcb\x27\x82\xdb\x7b\xf2\xcc\xdd\xdc\x39\x65\xbc\xab\x68\x57\xbf\x03\x9b\x71\x21\xd1\x68\x3d\x25\x5c\xb4\x69\x68\x1f\xf9\x15\x2a\x3a\xcb\x1c\x55\x1c\xd2\x46\x69\xa7\x5e\x4e\x3b\xfe\xc3\x1c\x8c\xb6\xd6\xa6\xa5\x2b\xdb\x6e\xac\xa8\x34\x1c\x71\x6c\x88\x51\x5a\x52\x84\x49\x76\xf9\x14\xb2\xeb\xc6\x37\x42\xf7\x85\x26\xb9\x50\x9a\xfc\xf6\x55\x63\x8e\x83\xec\x68\x23\x82\x27\x11\x1d\x7e\x95\x98\x82\x48\x17\x14\x73\xa1\xba\xf6\x7a\x99\x02\xd7\x2c\xa1\x59\x83\x50\x73\x49\x4c\x85\x9c\xb0\x34\x05\x0c\x6d\xc7\x82\x10\xa8\x72\x76\xd4\x74\x51\x74\xad\x07\x68\xc4\x80\xd4\x1b\xeb\xc3\x9f\x6f\xef\xd0\x87\xd9\x96\xf7\x6a\x9d\xbf\x9b\x68\xb4\x30\xaf\xa0\x0d\x53\x68\xee\x67\x2b\xce\xb6\x46\xfa\x32\x42\xfa\xcc\xfb\x98\x9d\xd2\x30\xf4\xcc\xc5\xc3\x3a\x1f\x61\x46\x64\xe3\x69\xe7\x84\xc7\x1e\xc4\xf1\xd9\x8d\x7f\xa0\xd8\x3b\x3b\x78\x1f\xa2\xb9\x6e\xab\xdc\x48\xb3\xb1\xa9\xcb\x8c\xa4\xf7\xc0\x0d\x2b\x5b\x5f\xf8\x69\x85\xa1\xc5\x24\x9a\xbb\x42\xa0\xa1\xf0\x34\x53\xcd\x94\x39\xcd\xf6\x62\x44\x77\x53\x21\x5c\x05\xb7\x2a\xee\xf9\xc8\x6d\xce\x23\x73\x59\x7b\x66\x1f\x86\x69\x1d\xc1\xf1\x19\xc1\x3a\x62\x66\xf5\xad\x48\x43\x6c\x5c\x2b\xe1\x0e\x95\xd0\x63\x53\x66\xf0\xbe\x4d\xad\xcc\x83\x02\x8f\x59\xd7\xf6\xaa\x7e\x19\x71\x0e\xe6\x4c\x52\x2d\xba\xdb\xbb\xe2\xc4\x3a\x78\x32\xfa\xe5\xc2\x6e\x6d\x0a\x09\x99\xbd\x8e\xe7\xac\x20\x13\xd0\x0f\x00\x7c\xb3\x9c\x96\xc2\x89\x3a\xf5\x86\x9a\x40\x22\xea\xd0\x50\x1b\x62\x3b\x26\xd7\xad\x63\x8e\x97\x7b\x38\xb2\xdb\x25\x7f\xb3\xca\xa2\x50\xf1\xf2\x6c\xc6\xb3\xb0\x0d\xef\x8a\x01\x52\x61\xe1\x5c\xd5\xcb\x02\x6a\x1b\x6b\xef\x1c\xfc\x7a\x57\x42\x87\xbd\x61\xf0\xab\x19\xf9\xce\x19\x0c\x9e\xe5\x2d\x23\x45\x92\xb8\x38\xee\x1e\x9d\xc2\xf6\x55\xeb\xe6\xce\x6d\xfd\x8a\x39\xb7\x42\xf0\x1a\xec\x3b\x74\xe7\x54\x3a\xc5\xef\x7f\x4f\xc0\x3a\xaa\x22\xe8\x15\xbe\xc5\x81\xbc\x8c\x02\x7a\x19\x0f\xe7\x9a\x44\xc3\xba\x26\x8f\x84\x85\x74\x43\x77\x8d\x1c\x69\xae\x20\x29\x25\xd3\x4b\xa3\x0b\xc0\xa7\x4e\x06\xeb\x18\x67\xe5\xb6\x4d\x46\xcb\xa9\xe2\x49\x24\xa2\xb0\x15\x3c\x56\xca\x63\xd7\x16\x97\x92\xa3\xad\xb8\xdb\x8e\xbe\x9c\x9a\x15\xb1\xe6\x11\x74\x94\x60\xd0\xf2\x2a\x61\xde\xe9\x62\x65\xac\xff\x2e\xd9\x82\x66\x86\x0d\xd7\xbf\xb8\xc6\x0c\xcd\xe6\x8f\x9e\x33\xb2\x5d\x53\x75\x5f\xbb\x77\x61\x54\x88\xb4\xf6\xe6\x9e\xfb\xa9\xc3\x8f\xe0\x93\xfe\x0c\xa3\xda\x91\x4b\x5d\x4b\xb6\x60\x19\xcc\xe0\xbd\x4a\xa8\x15\x61\x0e\x1d\x19\x71\xb1\x85\x2e\xdc\x99\x52\x64\xaa\xb2\x3d\x51\x9f\x9f\x8e\x46\x98\x19\x65\x1c\x6b\x3b\x07\x48\xab\x6e\x50\x65\x13\xe4\x99\x56\xa4\xa0\xd2\xec\x42\x9f\x08\x6f\xfd\x19\x13\x21\x32\x57\x0c\x28\x5b\xd6\x74\xb1\xee\x21\xac\x68\x40\x17\x7f\xe7\xf0\xf0\x77\x43\x85\x22\xd3\x8c\xce\x6a\x7f\x8a\xb9\xd8\x56\xe5\xc9\xe0\xdc\xfc\xad\x13\x8d\x95\x6e\x4a\x73\x8f\x3d\xd0\xa5\xaa\x51\x0b\x9a\x66\xf7\xee\x37\xca\xeb\x53\xe4\x27\x54\x91\x6a\xec\x6e\xfe\x1e\xd3\x7e\x7b\x8a\xc6\xfd\xb7\x17\xd7\x7f\xbf\xfd\xeb\xed\xdf\x2f\xde\x7d\xb8\xbc\xea\xdc\xd9\x95\xd0\x60\x43\x5b\x1a\x4e\xdd\xa4\x4a\xa7\x31\xab\x50\x65\x64\x8d\x85\x1a\x63\xdc\x2a\x42\xe6\xf2\x54\x3c\x04\x06\xf7\x9b\x3d\x05\xb4\x9b\xf5\x84\x16\xc5\x85\xcc\x85\xbc\x96\x62\xca\xb2\xce\x12\x7f\xac\x13\xbc\x42\x8e\x0f\xf3\xbd\x70\x1f\xd7\xd7\x8d\x45\x71\x5c\xcf\x26\x69\x5c\x19\x0c\xb1\x02\x4d\x37\xdd\xc3\x8a\x56\xdd\xf9\xc7\x6a\x95\xc4\xee\x87\xe8\xa0\x7b\xe6\xe0\x18\x59\x86\x8c\x8e\x3f\x8f\x61\x1a\xc8\x44\x42\x33\xac\x12\x1d\xb6\xf1\x49\x64\xc5\x64\x95\xae\x06\xa6\x07\xf5\xdb\x99\x64\x82\xa6\xd6\x87\x65\x99\x7f\x0a\xbe\x76\x99\x17\xbb\x30\x6b\x21\x88\x90\x3b\x8b\xa7\x80\xe3\x79\x10\x92\x42\x42\x25\xd5\xac\x0c\x2f\x6c\xc9\xb6\xa0\x21\x3f\xb4\x73\x40\xdc\x5b\xb6\xe0\xb2\x42\xcf\x5c\x35\x8c\x3b\x60\x6c\x8a\xf6\x14\xb4\x73\x1a\x45\x7d\x59\x58\x03\xe7\xf7\x7e\x19\x02\xca\xcb\x46\x52\x9e\xb1\x93\x9e\xec\x4e\x3b\x3f\xd5\x8e\xb4\xc9\xe0\xf7\xcc\xcc\xe0\xb4\x66\xd2\x7e\xdb\x78\x19\xc4\x66\x84\x07\xee\xc7\x1f\xb0\x90\xb9\xe7\xff\x11\x8c\x53\xd5\x12\x93\x51\xe3\x68\x15\x12\x46\xeb\xc7\x2b\x54\xdf\xbf\x29\xb9\x66\x39\x78\x84\xd1\xd1\x8a\x4c\x24\xed\xd7\xc7\xaa\xaa\xe7\x13\x65\xa3\x13\xf2\x67\x8e\xe7\x95\x43\x4a\x46\x84\x8b\x7a\x89\x80\x4f\x85\x4c\xd0\xf0\x70\xd0\x0d\x9e\xd0\x82\x4e\x58\xc6\x42\x98\x79\xac\x0d\x8e\xe5\x31\x1b\xf4\x60\x0c\x50\x9a\x9e\xa7\x52\x14\xf6\x26\xf6\xd0\x5f\xe1\x59\x99\x6d\x88\x99\x66\x25\x27\x67\x89\x6a\x11\x32\x93\x94\xeb\x3a\x7e\x6f\x6d\xe3\xfc\x12\x65\x90\x18\x42\x00\x4d\xe3\x15\x9a\xbd\x48\x0d\xcf\x68\x2e\x5b\xf0\xb9\xea\x5b\xd1\x9a\xb7\xfe\xe5\x1a\x18\x33\xe4\xfa\xe3\xed\xe5\xff\xbb\x72\x6e\xba\x8b\x76\xb6\xf5\xbb\x64\x85\xe1\x07\xd1\xb6\xcd\x8d\xab\xf3\x3d\x6c\x9c\x2f\x7b\xe3\x54\x06\xa2\x83\xe3\x6d\xdf\x94\x4d\x8f\x33\xe3\x0d\xd2\x48\x1e\x24\xeb\x5c\x57\xd0\x94\xed\x5e\x9b\x01\xba\x12\x88\x79\x84\x6b\x86\xe1\xd2\x0d\x6b\xad\x16\xb6\x94\xb5\x13\xbb\xc2\x4a\x31\x34\x6f\xd7\x29\xcd\xd4\xe7\x7a\x45\x86\x98\x76\x0a\x29\x92\x0f\xa2\xe4\x71\x00\xbc\x03\x76\x5c\x45\x08\x49\x81\x0b\xed\xac\x29\xa8\x4b\x88\x29\x7e\x4b\x6c\xce\x5a\xa3\x36\x47\x4b\xce\x09\x10\xb3\xee\x1a\xa2\x55\x15\xbf\xe2\xe5\x70\xab\xbf\x94\x6a\x2d\x30\xd2\xc9\x55\x75\x0a\xdb\x34\x20\x92\x41\x02\x4d\x6d\x20\x0d\xd5\x73\x0b\x1a\x9f\x53\x75\x0f\xa9\xfd\x20\x10\x30\xb3\x02\xc7\xc4\x50\x38\x3f\xd3\x77\x66\x72\x3d\x66\x09\x1a\x84\x6d\x90\x2d\x22\x68\x86\xa8\x62\x07\x3d\x0d\x01\x8c\xdd\x2c\xc2\x47\x9e\x2d\x6f\x84\xd0\x5f\x57\x35\xf1\x0f\x7d\x32\xfe\x52\x85\xc2\x36\x8d\x98\x68\x97\xa6\x48\xf2\x08\x37\x0e\xf2\xc5\x46\x25\xff\x50\xb6\x68\x16\xe4\x97\xca\x15\x65\xc9\x2f\xd4\x37\x52\x94\x9d\x65\xb8\x98\xfa\xe6\x37\x97\xef\xf0\xe2\x2b\x1d\xa6\x32\xd7\x72\x59\x08\xc6\xb5\xb7\x78\x45\x74\xda\xfc\xd9\xa1\x57\x37\x39\x5b\x30\x50\x2d\x21\x1f\xe8\x92\xd0\x4c\x89\xca\xa4\xc6\x37\xb9\x5b\xbd\x2f\xd7\x7c\x3d\x11\x7a\xbe\xe6\xc4\xed\x9a\xba\x63\xda\xfa\x78\x67\x0d\x68\xe6\x3a\x20\x86\xf1\xb5\x61\x35\xa2\xba\x14\x12\x12\x48\x81\x27\x9f\xeb\x89\x38\x34\x52\x30\x9e\xaa\x2b\xc1\x0d\x7b\x3d\xf4\xb9\xba\xac\xec\x93\x6e\x35\x9a\xa7\x08\x4d\xd9\xce\x89\x48\x11\x55\x1b\x99\x6b\xa9\x42\x22\x4f\x2f\xa7\xe8\xf5\xb4\x9b\xee\xbb\x72\x02\x99\x59\x6c\x96\x65\x3e\xda\xde\x86\x26\xb0\x9c\xce\x80\x50\x5d\x1d\x42\x2d\x08\x70\x55\x4a\xb7\x6f\x3a\x66\x55\x99\x56\x25\x84\xb9\x57\xfb\xf3\xe5\x3b\xf2\x8a\x9c\x98\x77\xb3\x11\x83\x53\xca\x32\x04\xea\xf6\xb1\xba\x4d\x1d\x60\xea\x73\xca\x82\xa6\x00\xf9\x08\x11\xd2\x5e\x2d\x67\x84\x0b\xa2\xca\x64\xde\xc8\x38\xa8\x2c\xc2\xae\x6a\x53\x10\x10\xc9\xc0\x76\xe2\xdd\x87\x7f\x56\xd0\x39\x44\x36\xe6\x75\xf8\xe7\x17\xbc\x0e\x9b\x2a\xa2\x39\xfe\xed\x05\xb3\x67\x35\x07\x4d\x53\xaa\xa9\xbb\x26\xfd\x03\xc3\xae\x1d\x2e\xcb\x80\xcb\x52\xc1\xf7\x8c\x97\x9f\x6c\x5d\x94\x5e\xb8\x3d\x6e\xdf\x23\x45\x24\xf1\x0b\x2d\x1a\x7e\x3b\xef\xa1\x88\x90\xa2\x71\xd9\x3a\x46\x67\x5b\xb4\x6e\xbc\x25\xa8\xc5\xde\xc4\x2c\x4a\xca\x53\x91\xaf\x11\x39\x15\x92\x00\x4d\xe6\x9d\xa9\x69\x44\x8d\x0c\x07\xd3\xb5\x5f\xb6\x43\x08\xd3\x57\xa3\xd9\xf6\xbf\xc7\x64\x58\xa6\xaa\x9d\x6b\xb3\x63\x33\x3a\x81\xcc\xc1\xe2\x5a\xac\xf4\x88\x27\x2c\x92\x0d\x5c\x8a\x88\x21\x31\x37\xc2\x46\x72\xd1\x6a\x22\x4c\xf7\x9f\xc5\x3c\x44\x0d\xbe\xb8\x73\xd1\x25\xf5\x3c\xa0\x0d\xf4\x73\x98\x87\x32\x40\x40\x24\xab\xf3\x60\xa4\xcd\xf6\x3c\xa0\xfc\xd5\xf7\x79\x50\x90\x24\x22\x2f\x7a\x12\x29\x79\x67\xa3\xf0\x0d\x45\xbb\x46\x45\xb6\x1f\xa6\x41\xe1\xce\xae\xda\x15\xd5\xf6\x1e\xf4\x25\xaf\xfe\x7f\x8d\xeb\x1c\xb9\xdd\xea\x1d\xef\x46\x0f\x8e\xc8\xac\x46\x74\x1d\xfe\x12\x6f\xbc\x21\x0c\xb3\xd5\x5e\x3c\x0c\xb3\x81\x98\x4f\xd1\x3c\xdf\x0a\x89\xfc\x12\x82\x31\x8d\x12\x80\xf3\x0a\x1c\x51\x80\x0a\xaa\xe7\x67\x2e\x63\x75\x01\x9e\x3d\xdf\x5b\x8b\xd7\x31\x72\x1c\x4f\x90\x67\x37\x75\xcc\xaa\x45\xd2\x8f\x1a\xbb\xb9\x29\x5e\xd3\x3e\x73\xf5\xf1\xae\x89\xa3\x4f\xf9\xd2\x62\x44\x06\xa0\x9a\xd9\xd6\x3f\xb1\xe2\x39\x63\x3a\x57\x57\xf1\xb9\x43\x3a\x83\xfa\xdb\x1c\xd1\xf9\x72\xa7\x74\xb7\x28\xcf\xd5\x18\xcf\xa8\x24\xac\x06\x7c\xae\x8f\x11\x61\xe5\x82\x8f\x80\xbb\x3a\x7b\x64\x00\xf9\x8b\xa5\xc8\x6b\xd9\x89\x07\x2d\x54\x4d\x23\x08\xcd\xb2\x28\x31\x09\x9b\xac\x20\xfe\x14\x54\x50\xf2\xeb\xd6\x80\x76\x4d\xd3\x90\xd1\x9f\xb0\x60\x7c\xde\x96\x88\xcc\x68\x14\x9f\xb9\x1d\x62\x96\x2b\xfa\x56\x42\x6a\xe3\xa4\x6e\x0b\x48\xfa\x72\x5b\x7c\xf3\xe1\xf6\xa2\x4d\x19\xca\xc2\xae\x70\x06\xe0\xf7\x84\xa6\x39\x53\x0a\x1d\x3e\x30\x99\x0b\x71\x1f\x34\xe4\x89\x4f\xb5\x9d\x31\x3d\x2f\x27\xe3\x44\xe4\x8d\xac\xdb\x91\x62\x33\x75\xee\x38\xca\xc8\x4c\xdc\x29\x61\x3c\xab\x32\x95\xd1\x5a\x88\x58\x60\xdd\xa1\xe4\x9a\x2f\x4f\x92\xea\xed\x71\xeb\x61\x7e\x4a\x15\x9a\xbd\x3e\x3d\x58\xdd\x04\x37\xef\xc1\xa5\x8e\xf5\x5d\x15\x56\x6d\x70\x65\x67\x6d\x79\xf7\x66\xa5\x0e\xe7\xc5\xd9\x38\x8f\x56\x79\x3d\xf8\x24\x39\xa1\x3f\x01\x15\x14\x01\x1b\xf3\xcc\x7d\x5b\x93\xd4\xc4\xd2\x63\xd3\x16\x22\x54\x3b\xe7\x1e\xdd\xdb\xc7\xe6\x97\x3e\x2c\xf3\x38\x56\x71\x99\x8b\x2c\x33\x0b\x49\x1d\xf0\x5a\x23\xba\x13\x55\x93\x36\xa2\x9d\xc5\xdc\x35\xca\x42\xf3\x2d\xf0\x22\x09\x63\x0a\x16\xf7\xcc\x5c\x06\x0e\x33\xc3\x6c\x20\x1c\x9b\x92\x9c\x7d\x32\x14\x36\x47\x6c\x83\xc4\xa2\xe3\x7f\xf3\xd7\x01\x05\xac\x09\x06\x1f\x54\x98\xe9\x67\x66\x85\x9a\x83\xf8\xe4\x68\x6d\xae\x2d\xf3\xc5\x15\x68\xa3\xa8\xd9\x79\x6b\x7a\x1f\x8c\x62\x25\xcb\x08\x87\x21\xc4\x33\x4c\x9a\xde\xe1\xa8\x9c\x22\xf0\x3c\xa0\xa7\xd8\xd1\x64\x64\x10\x2f\xbc\xbd\x94\xe7\x98\x6c\x48\xdf\x79\x31\x0f\x32\xd9\xdd\x8b\xfc\x8c\xbe\x2a\xd2\x17\x7f\x55\x20\xd7\x6f\x62\xfd\x1e\x0c\x67\xa5\x89\x37\xcc\xd6\x83\x97\xae\x45\xba\x06\x43\x8c\x60\xc6\x8c\x66\xdd\x0b\xb9\x5e\x4e\x9b\xd0\x9d\x5c\x38\xf3\x88\xad\x20\x6e\xe3\xf4\x3f\x41\x52\x6a\x48\x1d\x1a\xb9\x33\x29\x5b\x24\xe3\x36\x35\x9d\x29\xf0\x49\xfa\x13\xc0\x00\x25\x75\x56\x97\x62\x73\xba\x4e\x85\xef\x7a\x46\xfe\x0b\xb9\xa4\xf2\x80\x5a\x19\x5b\x00\x07\xa5\xae\xab\x9f\x77\x9d\x0a\x8c\xa3\x4e\x28\xf7\xba\x95\x39\xd3\xce\xc2\xed\x50\xc7\x1d\x8e\xc7\x04\x48\x41\x25\xcd\xcd\x1d\xac\x88\x5b\x9e\x09\xcc\x98\x4d\x0b\x6c\x5c\x8a\x15\x6c\x79\x37\x50\x5d\x54\x6c\x98\x26\x39\x9b\xcd\xed\x69\x21\x94\x64\x82\xcf\x88\x8f\x1b\xcb\x04\x4d\x09\x32\x16\x21\xc9\x03\x95\xb9\x91\x05\x68\x32\xc7\x20\x34\xca\x49\x5a\x9a\xf3\x40\x10\x64\x7b\x39\x52\x9a\x6a\x70\x60\x78\x9d\x6d\x70\x7e\x9a\x0e\x50\x22\xf6\xb9\xcb\xdf\x1f\x18\x4f\xc7\x9c\xb4\x28\x56\x90\xf7\x9f\x20\xa9\x8e\xb5\x45\x9c\xce\x73\x04\x0c\x14\xfe\x38\x7b\xb4\xb8\x60\x61\xb0\x27\xaa\xb2\x7b\xc3\xbe\xc8\x26\x6f\xdd\x84\x33\xaf\x7d\xda\x3f\x8d\x3e\xda\x5e\x04\xe5\x9d\x58\x8d\xa2\x49\x88\x8e\x2d\xe4\xbd\x39\xb9\x16\x23\x48\xc8\xaa\x5a\x7f\x10\x59\x9e\x0e\x84\xcc\x16\x42\x93\x93\xe3\xf3\xe3\xd3\xb5\xbd\x70\xac\x9a\x69\x06\x36\x23\xba\x7e\x21\xc5\xf2\x22\x5b\xe2\x3b\x1c\xdb\x92\xdf\x81\x00\x86\x3e\x60\xb5\x2a\x7f\xa9\xe6\x90\x65\x67\x44\x19\xf1\x97\xfa\x1a\x22\xf6\x53\xf3\x90\x96\x65\x62\xcd\x64\x27\xc7\x3f\x1f\x9f\x11\xd0\xc9\x29\x79\x10\xfc\x58\x5b\x87\x07\xb9\x43\x1d\x32\x88\xa6\x8a\x88\xa5\x28\x09\x07\x70\x67\xa7\x2a\x56\x95\x50\xa3\xfe\x94\x56\x46\xb7\xa0\x1b\x90\x65\x61\xf2\xdc\xfb\x4f\x4c\x1b\x51\x44\x97\x68\xa6\x78\x65\x35\x05\x40\x1c\x7a\xaa\xf0\xa6\x3b\x9f\x03\xcd\xf4\x7c\x59\x69\x2f\xff\x04\x29\xb0\x3e\x29\x77\xdf\x84\xcb\x50\x3d\x48\x1b\xed\x6f\x02\xa7\x11\x30\x4a\x09\x77\x73\x09\x6a\x2e\xb2\x83\xa7\x71\x7e\x70\xe5\xde\x12\xc1\x95\xe1\x29\x46\xc5\x76\x34\xaa\x2a\x83\xce\xca\x2c\xae\xbe\x82\xc0\x53\x26\x21\x75\xc2\x92\x2b\x79\x31\xa7\x0b\x94\x14\x8c\x3c\x07\x69\x88\x6a\xd2\xd4\x89\x7e\x37\xae\x28\xac\xd2\xee\x5e\xf7\x24\x6c\xb3\x23\x76\xe4\x4c\x16\x71\x6e\xe9\x6f\x6e\xae\xdf\xb6\x6e\x69\xfc\xe0\x5b\x3c\xc6\x6f\xe7\x90\xdc\xdf\x84\x55\x73\xed\x49\x68\x41\x21\xe4\x21\x05\x03\x33\x7c\x34\xa9\xe0\x5a\x48\x4d\x78\x99\x4f\x40\x7a\x83\xc2\x0c\x57\x11\xe4\x82\x25\x30\x26\x57\xf6\x3b\xef\x9c\xf7\xd5\x87\x29\x9f\x01\x79\x6d\x0e\xc4\x1f\x7e\xff\xfb\xdf\xfd\x3e\x9c\x47\x87\x03\xa9\xc6\x01\x51\x75\x2f\xde\x17\xb1\xeb\xd6\x92\xb3\xc9\xd8\xec\x28\x45\xa5\x2e\xa3\x49\xb5\x36\xb3\xcd\x87\x2e\xcc\x2a\xa9\x00\xc8\x06\x77\x85\x61\x1d\xf6\xff\x26\x99\x98\x9c\xe7\x54\x69\x90\x46\xc7\x71\xd7\xfa\x08\xe1\x86\x19\x9f\x8d\xf3\xf4\x74\x1c\xe6\x05\xf7\x6a\xf5\x5a\x49\xb9\x16\xcc\xcc\x96\xf2\x70\x66\x52\x0e\x6e\x82\x27\x9e\xca\x37\xe4\xa8\x5b\x35\x31\xb3\x04\xdf\x40\x9c\x4c\xb4\x6f\xef\xee\xae\xbf\x01\xdd\x64\xd8\x1c\x3f\x24\xdf\xbc\xbf\xab\xca\x8d\x9b\xdd\x65\x93\x9a\x06\xae\x1d\xc2\xb5\xe7\x22\xac\xde\x7c\x6c\xbf\x8b\x65\x25\x58\x1b\x8d\x73\x48\xcc\x42\x9f\xb5\x2a\xdb\xfa\x38\xc4\xcb\xeb\x31\xf9\xab\x28\x51\xe4\xa2\x93\x6c\x49\x1e\xa8\x45\x34\xe8\x06\x29\x5d\xb7\x23\x43\xc6\x91\xe1\x5a\x66\x57\x7f\x0b\x34\xb5\xb5\x2a\xd1\xb4\x73\xf0\xb3\xda\xa0\x29\xda\xb2\xbd\x2d\x95\x16\x39\x99\xbb\x57\xb5\x73\x58\x17\xf4\xb7\xb2\x91\x3d\x82\xe8\xfb\x51\x44\x42\x61\xb5\x25\xf7\x9b\x2f\x42\x17\x5a\xe3\x42\x76\x9e\x1b\xd5\x80\x28\x49\x9a\x53\xe5\x04\x7d\x34\x61\x32\xc7\xa3\x3a\x9b\xc4\xea\x16\xa5\xaa\x08\x89\x54\x59\x84\x20\x93\x32\x87\x32\xb8\x93\x70\x27\x64\x9c\x1a\x25\xa6\xf1\x40\xf7\x9a\x6d\x71\x2b\x24\x10\xe7\x6a\x73\x9b\xcb\x06\xe0\x18\x42\x43\x51\x09\x89\x37\x26\x57\x05\x54\x29\x17\x9c\x25\xd6\x9d\x41\xca\x42\x70\x22\x4a\x5d\x94\x1a\x4d\x41\x09\x55\x30\x5a\x50\xc9\x0c\x43\x35\xe3\xd7\x3f\x2c\xb9\x39\xed\x5a\x08\xb4\x93\x54\x4e\x67\x4b\x71\x38\x99\x91\xa4\x19\xe2\x0b\x60\x44\x5e\xe1\xb5\xc5\x09\xdf\xd1\xa4\xd7\x36\x18\x62\x6b\x88\xcf\xe3\xa9\x75\x54\xcf\x31\xb2\x0f\x7d\x59\x3e\x30\x14\x19\xa7\x51\x1b\x7a\x90\x78\x13\x55\x8b\x0d\x64\x09\xe8\x6f\x17\x72\x45\x0f\x36\x14\xae\xcf\x61\xa4\x58\x93\xe7\x57\xab\xdd\x6b\xf9\x11\x28\x27\x97\x17\x57\x17\x7f\xbf\xfd\xe1\xed\xdf\xaf\x2e\x3e\xbc\x0f\xe9\x3a\xb8\x76\x7c\xcc\xea\xf1\xd1\xea\xc7\x3f\x43\x05\x79\xdf\x54\x32\x87\xfe\x84\x99\xdc\x22\x35\x4d\x50\x32\xa7\x03\x34\xea\x21\x87\xa1\xd4\x91\x15\xa3\xa9\x61\x3c\x07\xe5\x38\x2e\xaa\xe0\x1d\x64\x74\x79\x0b\x89\xe0\xe9\xc1\xa3\xb3\xaf\x2a\x66\xa3\x2c\x41\x55\x19\x68\x58\x41\xcc\xf2\x85\x60\x5d\xf1\x6a\x1f\x1f\xd0\x0c\x69\xb0\xef\xd7\xd9\x6b\x4d\xfa\xe7\xb9\x26\xbd\x31\x8f\x17\x20\x19\x46\x04\xf5\x61\xd7\x7c\x2b\x1e\x5c\x45\xf7\x13\xc6\xfd\xce\x39\x6d\x58\x69\x6a\xf7\x48\x38\x9a\x9a\x16\xe4\xf5\x2b\x3f\xc8\x97\xe7\xf7\x70\x91\x3e\xbd\xf6\x7c\x39\x1a\x9f\x76\x7d\xd5\x61\x4b\x6d\xf7\x57\x48\xfc\x10\x59\x61\xe3\xaf\xc7\x55\x9e\xda\x6b\xa4\xa7\x62\x45\x94\xa7\x3e\xe4\xec\xcb\xdb\x27\x3a\x29\x6e\x45\x72\x1f\xc9\xec\x7a\xf7\xf6\xda\xf6\xb6\x12\xcf\x62\x6f\x60\x23\x65\x0a\x42\xcd\x53\x28\x80\x0e\x46\xd7\xde\x18\x5d\x8f\x6d\x5a\x17\xcd\xde\xec\x6d\x40\x3d\x1e\xb4\xad\xba\x79\xc1\x47\xb6\x2b\xa0\x0c\xda\xd6\x96\x36\x68\x5b\x7b\x34\x9b\x44\x82\xc1\xa0\xdf\x48\x9a\xc0\x75\x9f\x84\x37\xcf\x40\x48\x5a\x4a\x57\x56\xae\x92\xe1\x2a\x76\xc1\x01\x52\xcb\x3f\xdc\xab\x00\x99\x99\x37\xb1\xe1\xd1\x68\x43\xac\x03\x8b\x4b\x19\x20\xe6\xdd\xcd\x5d\xd7\x4e\xc4\xf5\x4e\xe6\x4d\xd4\xd5\xba\x49\x51\x81\xa1\xfb\xaa\x21\xee\x38\x19\xe2\xb1\xd4\x3a\xf0\xee\xe6\x74\xda\x5c\x41\xa2\xd8\xcc\x4c\x97\xab\x0c\x6d\x63\x84\xab\xd2\x7b\x35\x21\x66\xd4\xa9\x90\x09\x9b\x64\x4b\x32\xa7\x99\x51\x96\x1e\x98\x9e\x13\x4a\xee\x59\x96\xb9\x6e\xba\x4f\xd4\x2d\xb8\x5c\x4d\x2b\xd1\x64\x82\xcf\x70\x32\xa8\xcb\xc9\xf8\x54\x40\x62\xc6\x4c\x32\xa0\xbc\x2c\x2c\x9d\x46\x3e\x5a\x8a\x32\x42\x5a\x86\x77\x7c\x57\xf2\x14\x67\x0e\x7e\xc4\x16\x6e\x7b\x74\xcf\xb7\x93\x6b\xc9\x47\x3d\x07\xf9\xc0\x14\xd8\x42\x72\x9d\x69\xb2\xb4\xb4\xcb\xc8\xd9\xcf\x2a\x08\x15\x97\x39\x68\xb6\x05\xa6\xb2\x76\x1e\xeb\x07\xec\xd7\xb3\x56\x2e\xf8\x88\xc3\xcc\x02\x35\x38\x86\x66\x23\x3a\xed\xf8\x36\x7e\xb0\xca\x36\x50\x5a\x14\x84\xe5\x39\xa4\x46\x3f\xce\x96\x64\xc1\x68\x67\x4a\x10\x14\xa2\xde\x51\xe4\x84\x0b\x22\x0a\x73\x75\x95\x9c\xe9\x25\x7a\xf4\xe6\xa5\x26\xa9\x78\xe0\x01\xf9\x56\x77\x2e\xcc\x81\x92\x09\x68\xea\x6c\xe0\xe6\x10\x54\x98\xe8\x08\x77\x6e\xce\x1e\x26\x09\xdc\x6d\xdc\x00\x15\x4c\xfa\x8c\xea\x00\x2e\xb1\x41\x9a\xb7\xeb\xf9\xf8\xb6\x63\xca\xf9\xeb\x02\x71\x98\xfb\x81\x6c\x68\x4e\xb4\x28\x75\x4f\xee\x91\x6d\xa6\x23\x0b\x71\xd1\x50\x12\x59\x0e\x8a\x88\x32\x52\xbd\x89\xd7\x6e\xb8\x98\x1a\xde\x60\x77\xda\xd8\x94\x4e\x59\xa7\xaa\xc3\x31\xb6\xd8\x16\xf0\x7e\x97\x87\xdb\xc0\xaf\x9c\x94\xd3\x29\x48\xbc\xe9\x90\xe0\xb5\xb0\xfb\xaa\x8e\x97\xbf\xc3\xba\x19\x6f\x5d\xc0\x17\xe8\x33\xac\x1d\xe0\xc0\x24\xb6\x0c\xe9\x40\x36\xb1\x4c\xaf\x04\x85\x58\xf0\x9c\xbc\xff\xf8\x75\xb7\x2d\x1a\xa3\xb2\x40\x58\xca\x2a\xbe\xe7\x47\xde\x2d\x26\x31\xee\x7e\xd8\x84\xfa\xe2\xb6\x45\x92\x09\xe5\xd2\xa3\x71\x5d\x92\x39\xe5\x1c\xbc\x31\x8a\x69\xb4\x64\x4f\x00\x38\x11\x05\xd8\xa0\xbc\x4e\xc4\x50\xa2\x18\x9f\x65\x40\xa8\xd6\x34\x99\x8f\x0d\x75\xdc\xef\x85\x3a\x0f\xd9\x7d\xa2\xb4\x04\x9a\xdb\x3d\x21\x21\xa7\xcc\x0e\x4f\x68\x22\x85\x52\x24\x2f\x33\xcd\x8a\xaa\xb3\x6e\x56\x44\x40\x44\x08\x65\xd3\x52\xfd\x5a\x61\x5a\x49\x9d\xf0\x7c\x56\x53\xe8\x5e\x5f\x34\x8b\x15\xa1\xe9\xec\xcc\x7c\x0b\x79\xa1\x97\x55\x62\x62\x37\x1d\x68\xca\xa4\xd2\x24\xc9\x18\x70\xed\xde\xcc\x42\x0e\x22\x0d\x67\x5e\x9c\xe6\x6e\x46\x94\x9b\x12\x9e\xa2\xf2\x5d\x68\x65\xf3\xef\x2a\x22\x7c\x57\x29\x53\xce\xd6\xa1\xba\x65\xff\x51\x5f\x99\xc6\x6e\x1c\x3f\x23\xb8\x75\xbc\x80\x63\x29\x72\x1f\x35\x48\x68\xd4\xd9\xae\x73\x27\xc3\xf8\x0a\x96\x8f\xf1\xe7\xfa\xac\x85\x39\x50\xeb\x16\x98\x0a\xb3\xc6\x75\x70\x43\x71\x58\x98\x73\x00\x09\x18\x51\x94\x46\x64\x32\x2f\xce\x63\x1a\xb2\xdc\x07\x50\x8a\xce\xe0\xba\x63\x38\x42\x0c\x86\x53\x1b\xda\x30\x8e\xa1\xde\x36\x73\xb0\x40\x57\x5a\x34\x3e\x69\x26\x79\x35\x95\xc7\xdc\xbe\x48\x27\x0a\xbc\xd2\xf4\x20\x99\xd6\x80\xbb\x14\x2b\x39\x61\x00\xda\x2a\x78\x67\x3b\xb9\xac\xd3\x78\x6e\xd2\x9b\xe3\x19\xf1\x83\xa7\x36\x4d\x6b\x02\x64\x22\x19\x4c\xc9\x94\x61\xde\x18\x66\x54\x9d\xd9\x2a\x04\x14\xe3\x76\xa9\x52\x20\xf1\xb5\x9d\x59\xc0\xbf\x7e\x37\x7a\xfe\xe2\xde\x5f\xcb\x92\x27\xb4\x51\xa2\x13\xb1\xc5\xd8\x94\xcc\x30\x8b\xcb\x29\xc1\xff\xf6\xea\xdf\xff\x40\x26\x4b\x23\xaf\xa1\x22\xa6\x85\xa6\x99\x27\x80\x64\xc0\x67\x66\x15\x91\xe5\x76\xe3\x1b\x2d\x7c\xaa\x6a\x71\x32\x96\x33\x6d\x27\xe8\xf5\x6f\xef\x27\x41\x47\x0f\xf9\xe3\x79\x0a\x8b\xf3\xc6\x16\x1a\x65\x62\xd6\xad\xd7\xb7\x31\xb2\x89\x83\xec\x6c\x1b\x4e\xb4\xc8\x58\xb2\x3c\xd4\x99\xf6\xc5\x4b\xc8\x5c\x3c\x58\x63\xce\xfa\x51\x6d\x40\xbd\x14\xa2\x28\x33\x9c\x38\xf2\x75\x85\xcf\x57\x2a\x58\x85\x3e\x0a\x35\x12\x36\xb8\x1d\x3a\x51\xdd\xb0\x2b\x77\x8e\x4b\x61\xf4\x64\x0a\x07\x3c\xe1\x7c\x6e\x55\x1d\x92\xce\xd6\xb8\xaf\x69\x96\x4d\x68\x72\x7f\x27\xbe\x17\x33\xf5\x91\xbf\x97\x52\xc8\xf6\x3b\x67\xd4\xdc\xe9\xf3\x92\xdf\x63\x15\xdd\x1a\x8c\x56\xcc\x5c\x4c\xa1\xc7\x0f\x68\xbc\x5d\x27\x62\xfc\x5b\x5a\x78\x50\x2f\x92\x78\x1b\x5c\x3d\x32\x7c\x62\xb5\xa1\x8d\x13\x30\x34\x77\x4d\xc0\x87\xd6\x7b\xa8\xe6\xd1\xfe\xed\xab\x7f\xfb\xa3\x65\x2e\x44\x48\xf2\xc7\x57\x98\x72\xac\xce\xec\x05\x80\x37\xb0\x11\xb5\x72\x9a\x65\x5d\xbd\x04\x4d\x16\xf0\x75\xe7\xe2\xd4\x3d\x38\xf2\xfa\x60\xa7\x7b\x67\x95\xf1\xee\xee\xaf\xa8\x2f\x32\xad\x20\x9b\x9e\x59\xb4\x97\xca\xac\x75\x8c\xd2\xd5\xb1\xbb\xf2\xba\x23\x05\x1d\x5e\x69\x5b\x88\xac\xcc\xe1\x1d\x2c\x58\xd2\xcd\x81\xd9\x5a\x95\x56\x6f\xde\x4c\x9f\x31\x85\x20\x40\x93\x4c\x24\xf7\x24\x75\x5f\x36\x42\xe5\x57\xab\x6a\x77\x9f\x85\xae\x49\x03\x01\xc9\x02\x5b\xdf\xbf\x95\x26\x90\xd3\xa2\xa8\x10\x4a\x24\x7d\x68\x4d\x06\xb2\x26\x44\x47\x0d\x74\x23\x06\x3b\xd3\x43\x5d\xe9\x23\xf7\x46\xe6\x9a\xea\xdc\x45\xe7\xdc\x82\x70\x4f\x7c\x4d\x7d\x77\x3f\x66\x6b\x43\xd4\x1d\xfa\xd3\x50\xe0\xbf\x2d\xde\xc2\x1a\x32\x56\x05\x39\x54\x6d\x0c\x2b\x41\x9a\xed\x83\xb7\x4c\x77\xf3\x65\x04\x67\x68\x58\x8e\x44\x6b\x5e\x78\xe5\x84\xce\xa9\x76\xfa\x91\xf7\xb2\x53\x52\x80\x54\x4c\x19\xd1\xe9\x07\x3c\x50\x6f\x33\xca\xf2\x86\xfb\xee\x50\x93\xb0\x1e\x51\x9f\xd3\x62\x74\x0f\xcb\x8e\x1b\x2e\xf0\xb8\x6c\x0b\xf0\xcf\x69\xd1\xf1\x1e\xc0\xd2\xb5\xe1\xd7\x40\xc7\xcb\xf9\x5a\xa4\x8e\x0e\xbc\x1e\x6c\x49\xe2\x67\x51\x63\x23\xca\x40\x87\xbe\x72\x7e\xa8\x17\xae\x7d\xe3\x98\x4f\xaa\x2b\xc7\x3e\xf5\x25\x5d\x34\xf8\x7e\x9f\xeb\x3d\x53\x11\x1f\x89\x9d\x06\x45\x3a\xe1\xed\xe4\x76\x46\xfb\x3a\x6a\x19\xb4\xec\xc9\x6c\xa8\xbe\xce\xd0\x34\xb6\x45\x01\x02\x08\x30\x47\xd1\x0d\x4a\x8e\xdf\x1c\x1f\xf4\x8e\xb3\x2b\x23\x45\x41\x67\xa8\x99\xf6\x61\x81\x56\x69\x6a\x62\xd0\xce\xc5\x83\xfd\xde\x46\x97\x14\xee\x29\x48\x6b\x20\xf3\xb9\x08\x5a\x1d\x1b\x39\xe8\x77\x84\xd3\xae\x2d\x56\xe1\x03\x5d\x12\x2a\x45\xc9\x83\xd2\xa0\xd1\x31\x52\x39\xce\x3e\xac\xbc\xec\x95\xe0\xe0\x9d\xf4\x21\xa3\xdc\xd5\x18\xe6\x4c\xd9\x78\x05\xc6\xc9\xeb\xf1\xeb\x57\xc1\xb4\xdf\x40\x52\x4a\xc5\x16\x70\xe3\x6a\x9c\x37\x9c\x2a\x97\xd3\x6b\xa1\x14\x9b\x64\x98\xb8\xa5\x05\x79\x6f\x0b\xc0\xaf\xbf\x68\x15\x38\x82\x6f\x2c\x64\x13\xad\x34\x80\xc2\x13\x7b\x82\x9b\x01\x9f\x66\x80\x80\xa8\x8f\x7e\x49\x92\xb8\xae\x2b\x92\xe4\x55\x25\x49\xda\x7b\xef\xa0\xef\xea\x0b\xdf\xf7\x81\x93\x7c\x70\xbe\x81\xba\xb2\x3d\xf3\x95\x93\xf1\xa3\x07\xc9\xb4\x3b\xdc\x0f\x4c\x01\x39\x41\xab\xc4\xca\x66\x0c\x02\x68\x6e\xda\xb0\x02\x2b\xe0\xc7\x00\x58\x96\xab\x47\xb7\x0f\xab\xb4\xce\x4f\xea\x08\xfc\x07\x67\xc0\xaa\x57\xd0\x71\xff\xfa\x5e\x9e\x53\x9e\x66\x41\x3c\xa3\x9a\x95\x6c\x19\x84\x85\x73\x39\x25\x4d\x96\xe8\xfc\x97\x8d\x6a\x12\x73\xaa\x08\x17\x24\x07\x8a\x01\x9a\xe6\x76\xf1\x5c\xb0\x85\xd5\x1c\x8f\x06\xbb\xd9\xed\x35\xd6\xbc\x10\x1c\xbb\x7e\xc7\x94\x63\xcf\x86\x8f\x38\x0d\xc4\x86\x75\xe4\x34\x0d\x49\xed\x6e\xcc\x69\xbd\x78\xe3\x3a\x68\x72\x95\x92\xfa\xe2\x58\xa1\xe5\x39\xe8\x38\x73\x25\xc8\xcd\xf0\x25\xc6\x09\x6e\x30\xcb\xd5\x41\x32\x41\xde\x6c\xdb\x56\x5f\xb7\xba\x16\xd7\xde\x75\x33\xc5\x15\xc1\x01\x34\x3c\xfd\xaa\x67\x0d\x5e\xe8\x63\x44\xad\x4b\xdd\xd5\x40\x71\x19\x8f\x61\x48\xde\xde\x29\x51\x99\x7b\x66\xc0\x41\x52\xe7\x57\xf0\x21\xa2\x0e\x7c\x85\x2a\xc1\x43\x0f\xc4\x13\x1b\xce\xf0\xfb\xa7\xc5\x14\xfb\xb3\x00\x42\x50\xce\x39\x11\x72\xe5\xb4\x3b\x8f\xc9\x26\x89\x25\xe6\x5b\xaf\x40\x73\xd9\xcd\xdf\xc0\xfc\x34\x8b\xf2\xdf\x25\x5b\xd0\x0c\x2c\x86\xbd\x67\x0d\x07\x15\x26\x54\x39\xe9\xab\xda\xe8\xf4\x43\x54\x3b\x36\x07\x3d\x6c\xd5\x20\x23\xc9\x13\x47\x47\xe4\xc4\x8e\x71\x6c\x41\x76\x0f\x2b\xe4\xba\xb5\x7a\xff\xa9\x08\xa8\xdc\x1a\x6f\xbd\xde\x7f\x2a\x28\xc6\x69\x14\xbd\x58\xb8\xff\x05\x73\xba\x00\xc4\x34\x66\x19\x95\x19\x06\xa5\xdf\xda\x29\x23\x93\x52\x13\xe0\x0b\x26\x05\xcf\xcd\xf1\x43\xf0\x19\xc3\x99\x24\x20\x18\x7c\x02\x8a\x7c\x75\xf2\xc3\xc5\x0d\x26\x2d\x9d\x3a\xb4\x7c\xf7\x7e\xa5\x42\x7c\x80\x95\x77\x68\x74\xd7\xc7\xfd\x46\xfc\xbb\x9b\xed\x82\xf2\x89\x9f\x0b\xf3\x6e\x79\xa9\x4b\x9a\x21\xf4\x73\x92\x95\xe6\x2e\x3c\xd8\xce\x8e\x6f\x03\x0f\xb1\xe4\xc5\x34\x81\x3b\xe0\xef\x77\xac\xd3\x71\x8d\x71\x50\xdf\x36\xf6\xeb\x1a\x0c\x79\xe7\x1a\x0f\x1b\x40\x28\xd7\x04\x9d\x63\x55\x01\x53\x36\xf3\x70\xdc\x5d\xdc\x2d\x3c\x03\x4b\x27\xd8\xe4\x6f\x5f\x93\x74\xcd\xc2\x88\x35\x5a\x0e\x6e\xc3\xef\x70\x18\xe2\x1d\x83\x0e\x86\xe8\x38\xbb\x3e\xe5\xea\x2d\x2e\xcd\x7e\x14\x87\x6d\xf4\xdb\x4a\x93\x35\x1b\xe1\xdd\xd5\x6d\xb3\xa0\x87\x75\xfe\x89\xbd\x57\xf2\xba\xee\xa2\xae\x7a\x83\x15\xf1\x2a\x07\x2a\xc8\x99\x15\xa7\x11\x79\xb6\x92\xaf\xdf\x5d\xdd\xee\x39\x96\xdf\xcd\x56\x18\x9e\x50\x65\x63\xa4\xdf\x5d\xdd\xda\xb8\xb5\xfd\x68\xef\xec\x48\xe9\xee\x83\x40\x00\x37\xc4\xd6\xea\xc0\xb1\xc3\xb9\xdc\x45\x15\x0f\x62\x16\x1f\x7d\xbe\x96\x1a\x72\x79\x4d\x68\x9a\x4a\x0c\x67\xee\x72\x96\x5b\x88\x76\xb4\x28\xaa\xa8\x54\x2c\x12\x43\x15\x34\x5f\xbd\xb1\x07\x50\xf0\xe9\xb8\x7e\xb6\xbd\x2b\x8b\x8c\xd9\xf0\xd3\xe6\x10\x75\x09\x9d\x5c\x2c\xba\xf0\xa7\x10\x0f\x63\x67\xff\x62\x90\x7c\x10\x15\x73\x4e\x74\x2d\x4f\x1b\x7b\x97\x4a\x50\x22\x5b\xd4\xc5\xf3\x83\x77\xa7\x63\x47\x18\x92\x58\xed\x4e\x5f\x81\xf6\x99\x76\x26\x70\x2d\x19\xac\xef\x4a\x72\x63\xde\xae\x44\x76\x56\x91\xc0\x16\x80\x29\x4b\xae\x42\x70\x87\x91\x71\x18\x9f\x77\x4b\xf4\xdc\x66\xdd\x50\x8d\x27\x93\x4a\x2f\x0a\xe0\x9b\x07\xbc\xe2\x41\x8e\xc8\x0a\x32\x7d\xfa\xee\xea\xd6\xde\xa4\x76\xba\x1c\x9e\xb7\xda\xb8\x77\x3a\x5f\x72\xe4\xf0\x65\x92\x42\xdc\x36\xd1\x72\x4a\xab\x92\xa6\x6c\xe3\x04\x1f\xab\x40\x88\xd4\x1b\x17\x9a\x10\x96\x08\x1c\x60\x39\x08\x42\x2a\x6d\xc7\x86\xf8\xb4\xd7\x47\x26\x0b\x47\x3b\xc8\xbb\x46\xbd\x2b\x14\x50\x99\xcc\xbb\x6c\xec\xd8\x97\x85\xa5\x84\xa4\xc2\x66\x88\x4d\x85\x44\x0f\xfc\x08\x45\x9d\x4c\x88\xfb\xb2\x78\x1e\xe9\xc6\x0d\x5c\x50\x3d\x7f\xb6\x4b\xa4\x35\xc6\x20\xdf\x74\xdf\xb3\x29\x57\x5d\xf2\x5c\x02\x95\x2f\xd0\x56\xe5\xc2\x91\x6b\xa4\xb6\xfd\x2f\xa3\x96\x19\xec\x6d\x56\x2a\x0d\xf2\x6b\x26\x95\x3e\xda\xb7\xa7\x1f\x68\xc6\x1c\x70\xb2\x0d\x61\x39\x6e\x76\xf7\x17\xa6\xe7\xae\x50\xef\xf1\x59\xfb\x2b\xf3\xb7\x23\xe3\x98\x08\x49\x8e\xaf\x04\x87\xbd\x83\x87\x56\x34\xd0\x4a\xf0\xa9\xae\xf4\xad\x32\x9b\x9b\x44\x05\x99\x05\x55\xc1\x2f\x3a\x9f\xb3\x3b\x57\x3b\xd9\xd0\xe3\x25\x05\x05\x9a\x50\x2c\x3a\x89\x7d\xcf\xeb\x82\xc5\xb6\x38\x9a\x2d\xf4\x2c\x9c\xce\xbb\x6c\x2c\xed\x9e\x83\x37\xaa\xab\x69\xb1\x7d\x01\xba\xa8\xb6\x7b\x9f\x33\x44\x0c\x01\x57\x4e\xe6\x7b\xc6\xef\xf7\x3c\xe4\x61\x27\xe4\xfd\xda\xe8\x0d\x88\x16\xef\x7b\x67\xdc\x82\x26\x18\x51\x8f\x4e\x44\xa9\x7d\x89\x9b\xa6\x17\x9e\xf1\xff\xb2\xfb\x02\x03\x58\x11\x00\x67\xdf\x55\xd9\x60\x00\x57\x67\x36\xcc\xc5\x5b\xb8\xd5\x92\x6b\x8a\xb5\xb6\xdf\x89\xe4\x1e\x24\xc9\x0c\xcd\xfb\x6e\xbe\x3a\x8f\xb5\x55\x55\x79\xef\xb4\x96\xae\x11\x19\x50\xcc\x21\x07\x49\xb3\xca\x00\xfa\xa2\x8b\xfe\xbd\xbb\xbd\x2b\x32\x9a\x49\x9c\xb6\x3c\xa2\x2b\x94\x2b\xd2\x31\x79\xbf\xe9\xa9\x9c\x2e\x7d\xe1\x77\xc6\xd1\x77\xf8\x89\x29\xbd\xff\x0d\x53\x88\xb4\x89\x91\x5a\x2a\x90\xa3\x0a\x33\x97\x50\x57\x7c\xd1\xe7\xd3\xa6\x30\x29\x67\x33\xc6\x67\x63\x2b\x1e\xa0\x18\x52\x17\x88\xad\x6d\x61\x0f\x73\xd8\x37\x42\x26\x91\x40\x31\x7e\x18\x95\x15\x1b\x32\xc1\x9a\xbd\xe7\x22\xb5\x9d\x4f\x96\xd6\x02\xeb\xf7\x64\x05\xa4\x44\x2e\x39\x11\xd2\xd5\xc5\xa0\x69\x4a\xf6\x0e\xd3\xd9\xb0\x22\xd8\x57\x3d\xbf\x96\xb8\xb2\xf6\xcf\x1f\xab\xfa\x57\x8d\x05\x52\xe5\xc4\xc8\xbe\xa5\xdc\xb7\xd6\x75\x57\x19\xa5\x93\x7c\x12\x2a\x8b\x5e\xf0\x7a\x7b\xbe\x6d\x22\x11\x50\xa2\x21\x2f\x84\xa4\x72\xb9\x9a\x6e\x62\x6e\x12\xb3\x7d\xcd\x02\xad\xcc\xed\xb5\x48\x8d\x90\xb0\x37\x19\x1b\xb6\xed\x82\x19\xb5\x73\xd3\xce\xdd\x78\x9e\xf0\x6a\xe3\x82\xf8\x35\x23\x1d\xa8\x50\xc9\x1c\xd2\x12\xd1\xa7\x66\x25\x95\x94\x6b\x30\xfc\xd3\x85\xb0\x2e\x5b\x81\x1c\x15\x52\x43\x05\xdb\xb6\xc4\xbc\x51\x2c\xee\x6c\x3e\xc1\xba\xd2\x5d\xc2\x4d\x9c\x70\x6c\x3a\x6a\xc0\x41\xdc\xcd\x81\x18\x49\x32\x03\x8d\x93\x0f\x0b\x96\x68\x3f\xc8\x14\x17\x61\xc3\xd6\x4f\x68\x69\xa1\x1e\xf6\x0f\x00\xba\x16\xae\x8e\x6a\x02\xe6\x4e\xd2\xaa\x9e\x5a\x97\xf5\xc8\x3a\xc5\x95\xdc\xf9\x93\xbd\x89\xe0\xfa\x60\x3e\x71\x24\xd1\x28\xd2\x99\x69\xe2\xdb\x3d\xc2\x98\xab\x35\xde\xb0\x12\x7b\x0e\x15\x60\x80\xe9\x9e\xf2\xd0\x29\x55\x21\xc4\xd6\x43\xe5\xec\x60\x49\x40\x17\x72\x56\xe6\x98\x34\xef\x74\x5b\xe0\x5a\x2e\x0b\xc1\xba\xfa\xed\xcd\x51\x43\x37\xe3\xb1\x22\x6f\x3f\xbc\x6b\x02\xbe\x35\xcb\xf4\x79\x38\xc0\x6e\x83\xfc\x10\x37\x40\x81\x5c\x4e\x09\xad\x84\xbe\x4e\x14\xd5\x17\xb5\xb3\xf9\x38\xd7\x6f\x45\xa0\xb7\xc0\x32\x5e\x18\x09\x16\xe5\xf4\x46\x5d\x9f\x64\x4e\xf9\xcc\xb0\xaa\x77\xa2\x34\x2f\xf6\xd5\x57\xf8\x12\x12\xd2\x32\xe9\x18\x5c\x8a\x80\xd1\x0e\x15\xe9\x2b\x1f\xe6\xe5\x0a\x88\x19\x5d\x14\x54\x42\x0b\x3f\x35\xcd\xd9\xb3\x52\xee\x1b\xc2\xc6\x30\x26\x47\x5f\x35\xbe\x3a\x42\x8a\x3b\x51\x53\x48\x61\x5e\xc5\x81\x30\xe1\xdb\x67\x4c\x23\xff\x38\x6a\x8e\x30\x26\xef\x0d\x5d\x18\x35\x5d\xad\x6d\x03\x57\x67\x52\xaf\xec\x19\x91\x30\xa3\x32\xcd\xa0\x23\x80\x88\x98\x56\x4a\x86\x05\xaa\x74\xbb\x0a\x19\x23\xe2\x0a\x70\xa1\xc7\x71\x5c\xdf\xbb\x22\xda\x69\xaa\xee\xd5\xb9\x55\x67\x46\x29\xd5\x74\x44\x0b\x6b\x0f\x62\x82\x9f\x5b\x53\xf7\xc8\x15\x29\x1f\x51\x77\x7a\x47\xd5\xce\x3e\xff\xb5\x83\x5f\x1d\xd1\xea\x29\xc6\x47\x74\x84\x65\xbb\x3b\xdb\x6f\x0e\x90\x76\x17\x3d\x70\x26\xa8\x1c\x53\x40\xd9\xfd\x18\x6c\xfa\x7d\xc5\x95\xed\x52\x8c\xc9\x95\xd0\xbe\xba\x7e\x5a\x27\x1a\x06\x14\x67\x6f\x32\xee\xf7\x57\x77\x37\x7f\xbd\xfe\x78\x79\x75\x37\xf0\xef\x81\x7f\x63\x1b\xf8\xf7\xc0\xbf\x3b\x0c\xdc\x17\xfe\x0d\x7c\x71\x28\xde\x5d\xd9\xbb\x36\x19\x18\x57\xaa\xbd\x06\x26\x8a\x7f\x41\x89\xf6\xef\xf9\xe2\x07\x6a\x54\xc7\x42\x82\x42\x05\xc5\x68\xac\x9b\x82\x94\xdd\x03\x68\x09\xac\x63\x3a\x3f\xdb\x4c\xfb\x03\xe6\xc9\x47\xcc\x13\x0d\x8a\x9d\xbf\x6a\x14\x00\xd9\xb4\xe4\x21\x71\xdf\x1f\xe8\xd2\xd6\x47\xb2\x87\x92\xf2\x25\x29\x24\xe3\x1a\xb7\xd2\xc5\xed\xdb\xcb\x4b\x92\xcc\xa9\xa4\x09\x3a\xa8\xe0\x53\x02\x85\x26\xc7\xff\xf3\xb0\x69\xf2\x81\xd5\x54\xe3\xad\xcc\x3e\x82\x5b\xc0\x30\xb5\xc8\x57\x48\x58\x30\x51\xaa\x6c\x59\x95\xed\xdf\xcc\x47\xd7\xd1\x14\x02\x93\xc4\x96\xde\xcd\xb4\x79\xc0\x15\xa1\x73\x93\x00\x19\x30\xfc\x81\x45\x4f\x47\x44\x0c\x01\x34\x60\xfc\x0d\xa2\xeb\xee\x62\x68\xc0\xb8\x9d\x04\xd8\x6d\xc2\x68\x00\x1d\x6d\x31\x36\xa0\xa3\x76\x16\xcd\xe1\x39\xd9\xd7\x52\xe4\x91\xb8\xd9\xad\x35\x68\xfb\xd8\x8a\x4d\x47\xb5\x8a\xba\x6a\x8a\x47\x4e\xa5\xad\x6b\xa7\x18\x75\x3a\x2f\x74\xc7\xbc\x0f\x12\xab\x6e\x7c\x9c\x12\xeb\x36\x6a\xfe\x03\x2d\xbe\x83\xe5\x0d\x04\x56\x89\x6a\xcf\x37\xc6\x5f\x28\x42\xc9\x3d\x2c\x6d\x70\xe5\x5b\x3f\x58\x58\xa1\xac\x1e\x96\xdd\xbf\x87\x6e\x60\xf4\xbe\xc5\xab\x97\x7f\x0f\x01\x50\x09\xbe\xad\x15\x53\x37\x4b\x88\xfa\x87\x59\xd3\x5e\x95\x8f\x0f\x93\x44\x7d\x8b\x59\x9e\xce\xb6\xa6\x64\xea\xae\x87\x08\x13\xb7\x0a\x97\x03\xd3\x29\x24\xda\xa7\xe0\xdb\xdd\x7c\x86\x59\x9a\x69\x69\x6b\x7c\xd2\xe4\xfe\x81\xca\x54\x91\x44\xe4\x05\xd5\x6c\xc2\x32\xa6\x97\x61\xf9\xf9\xbe\xe1\x0d\x5f\x01\x8c\x5b\xa6\x48\x2e\xb9\xd2\x14\xaf\x42\xe1\x0c\x81\x66\xb5\x6b\x94\x5f\x04\x03\xb6\xdc\x14\x33\x81\xa8\x0c\x2f\xcc\x6f\x48\xc9\x85\xd2\x24\x01\x69\x84\xba\x6c\x49\x1e\xa4\xe0\x1d\xb1\xb7\xdb\x6d\xcf\xf2\x32\x62\x61\x64\x41\x78\x38\x77\x79\x82\x23\xf3\xe2\x23\xcb\xac\xd4\x39\x66\xa1\x9c\xff\x1a\xff\xd3\xa7\x53\x44\x7c\x96\xe1\x1b\x72\x74\x14\xd8\x97\xf0\x41\x4b\x71\x4f\xe5\xad\x0b\xa6\x6b\x8a\x4e\xd5\x85\x42\x2c\x22\x30\xf2\x29\x8f\x83\xe0\xb4\x80\x48\xd3\x1c\x06\x67\x63\x5b\xcb\x52\x95\xd3\x22\xcc\x50\x55\x37\x64\x07\x71\x6f\xef\x60\x1e\x58\x5f\xff\x96\x59\x55\x55\x3a\xd3\x37\x1e\xdf\x43\x91\x1c\x34\x4d\xa9\xa6\x63\x73\x20\xce\xda\x7f\xaa\x82\x26\x70\x46\xfe\x51\x7d\x98\xd1\x09\x64\xea\xc7\xe3\xff\xf8\xee\xfd\x5f\xff\xf3\xf8\xa7\x7f\x34\xbf\x43\x71\x0d\x0d\xa7\xcd\x07\x02\x5f\x01\x63\xa5\xb8\x48\xe1\x0a\xa9\xc3\x3f\x9d\xa6\x77\x91\x24\xa2\xe4\xda\x7d\x81\xe0\xee\xe3\xb9\x50\xfa\xf2\xba\xfa\xb3\x10\xe9\xea\x5f\x01\x25\xfc\x48\x3f\xe5\x1e\x5c\xdb\x00\xb0\x47\xdb\xe2\x49\x3f\xb4\x60\x3f\x80\x54\x41\xf8\x80\xbe\xb5\x33\x36\x6c\xaf\x7e\x1b\xab\x64\x0e\x39\xc5\x7f\x7e\xed\xa7\xc0\xdc\xc7\x55\xf9\x0d\x8e\x28\xfa\xe6\x0e\x6c\xd7\xf4\x3d\x5a\xbc\x0e\xd2\x38\x6d\x8b\xc8\xf9\xab\x15\x8c\x3c\x61\x38\x23\x6e\xb6\x2c\x07\xa8\xe4\x47\x6f\xa5\xa8\xc3\x20\x2f\xae\x2f\xc9\xc2\xce\x70\x8f\x26\xe7\xf9\xd8\x75\x06\xd1\xd5\xad\x60\x86\xfd\x75\x45\x95\x5b\xa6\x86\xea\xe6\x14\x66\xa4\x3c\x74\x81\x6e\x3c\x56\xbf\xe9\xf4\x3d\x5f\x98\x71\x55\xab\xd4\xa4\x97\x27\x79\x20\xac\x0f\xe9\x27\xcf\x0c\xd5\x15\xb1\x2c\x7a\x28\xcb\x35\x9d\x58\x88\x94\xab\xae\x5e\x04\xdf\xfa\xac\xbb\x46\x51\xe5\xbc\x02\xdc\x80\xe6\xa9\x0e\x03\xb9\x30\xcc\x7e\x81\xb9\x32\xf7\x3e\x76\xb5\x90\xb0\x00\xae\xab\xa0\x6b\x57\xf7\x8b\x4a\xcd\xe2\xe8\x24\x8e\x22\x55\x59\xba\xeb\xb0\x0e\x6b\xe5\xca\x5f\xdc\x77\x51\xb7\x77\x25\x1a\x5b\x2f\xb2\x62\x4e\xcd\x5b\xcf\x2a\x3d\x78\xe3\x69\xb7\xd1\x13\x66\xee\x14\xfb\x27\xac\xd4\x6e\x79\xfd\xdb\x3f\x36\x08\xed\xd1\xdd\xf0\x6c\x6a\x4e\x94\x1d\xbb\x49\x57\xc2\x6a\x3c\xdb\xd5\x24\x57\x09\xaf\x7e\x2e\x9c\x4d\xe1\xbb\x09\x70\x26\xd3\x4f\x4c\xe9\x33\x5b\x36\xd0\x9f\xa0\x05\x95\x55\x94\x50\x39\xc9\x98\x9a\x87\xb2\x7b\xdb\x2e\xa7\xd5\xea\xac\x94\x51\xac\x70\x92\x6b\xd9\xc3\xcc\xc5\x0a\x95\x11\x48\xd8\x66\x62\x6e\xa3\x14\xd6\xee\xfc\x6b\x4c\x90\xa8\xe3\xa3\x83\x30\xf5\x1e\x9f\x07\x0b\x1d\xfb\x52\x13\xb1\x86\xa1\x28\x41\x97\xd2\xf0\xac\xd4\xf2\x89\x6b\x91\xba\x9c\x96\x78\xc2\x5f\x0c\x65\x9d\x34\x8d\x22\x5d\x8b\x2a\x36\x5b\x11\x5f\xc8\x8e\x76\xbd\xed\x00\x3d\x57\x49\xef\x9e\x49\x44\x31\xae\x39\x26\x24\x21\xb3\xf5\xd8\x11\x69\xd6\xa5\x06\x78\xe8\x79\x33\xe0\xf1\x78\x7c\x6c\xa9\x14\xae\xda\xa9\xb5\x28\x9a\xcf\x7b\x75\x2d\xd4\x42\xd5\x33\x98\xe1\x79\xc3\xa8\xec\x96\xc8\x42\xb2\xba\xa9\xf2\x2e\xd6\x58\xb2\xfa\x67\xa0\x4c\xf9\x4c\x95\xaf\x7b\x6d\x03\x6b\xe6\xd3\xb4\x82\x0f\xde\x10\x04\xcd\xf5\xdf\x3b\xe1\x47\x55\xc5\xfa\x41\xe9\x50\x43\xf1\x89\xed\x72\x9c\x14\xe5\x99\xeb\x7e\x9c\x43\x2e\xe4\xb2\xfa\xb3\xca\x02\x1a\x29\x2d\x24\x9d\x21\xec\xb8\x1d\xdc\xfe\xac\xfa\xcb\xfe\xb0\x45\xde\xfa\xaf\x6d\x74\x47\x52\x4a\x09\x5c\x67\xcb\x1a\xcf\xf7\x8b\xd3\xe5\xfc\xba\xf5\x44\x81\xaa\xb6\xd5\x33\xf0\x9f\xe3\x3a\x6f\x11\x7d\x6e\xd5\x2c\xa2\x4b\xdd\x95\x07\x3a\xab\x05\x0e\x8c\xfb\xb0\x42\x9e\x3a\xee\x0f\x1f\x22\x24\x65\x0b\xa6\x44\x00\xf4\x6b\xd5\xd1\xba\x7b\xc2\xe3\xe7\xb9\x42\x94\x36\x1d\xbd\xb2\xa0\x7c\x2a\xb0\x28\x75\x75\xd8\x57\x4c\x83\xaf\x43\x3d\x2f\x28\x63\x68\x90\xfc\x0d\xf9\xdf\x27\x7f\xfb\xcd\xcf\xa3\xd3\x3f\x9d\x9c\xfc\xf8\x6a\xf4\xef\x3f\xfd\xe6\xe4\x6f\x63\xfc\xc7\xbf\x9e\xfe\xe9\xf4\x67\xff\xc7\x6f\x4e\x4f\x4f\x4e\x7e\xfc\xee\xc3\x37\x77\xd7\xef\x7f\x62\xa7\x3f\xff\xc8\xcb\xfc\xde\xfe\xf5\xf3\xc9\x8f\xf0\xfe\xa7\x1d\x3b\x39\x3d\xfd\xd3\x57\xc1\xa4\x53\xbe\xfc\x18\xc8\xbd\x6d\x1b\xb9\xcd\xc2\xb8\x86\x19\xec\x9f\x9e\xba\xbd\xc7\x48\xae\xb6\xd6\x55\xc8\xb8\x1e\x09\x39\xb2\x5d\xbf\x41\x25\x25\x70\x00\xbf\xbd\x62\x9f\x7f\x8f\xbf\xf4\xa6\xbe\xcd\x2a\xa1\xb0\x47\x07\xfc\xb9\x04\x0d\x05\x89\x04\xfd\x12\x61\x32\x76\xa4\x46\x59\x3d\x07\x9d\x85\x1e\xb1\x2f\xed\x06\xfd\x25\x44\xce\x78\xa7\x91\x5d\xd7\x5a\x93\x32\xea\xd5\xb8\x56\x82\x28\xb1\x76\x44\xf7\xdc\x3d\x04\x84\x98\xf9\x36\x44\xda\x74\x6e\x43\xa4\xcd\x16\x52\x86\x48\x9b\xa0\xf6\x59\x46\xda\xdc\x5a\x9e\xf4\x8b\x0c\xb3\x89\x8f\xac\xdf\x31\x73\x27\x26\xa8\x3e\xf0\x45\xd7\xe0\xea\x98\xa9\x6e\xde\xec\x81\x50\x5c\x45\x99\x51\xbd\x25\x8b\x22\x52\xde\x5b\xcf\x3c\x67\x7f\xb1\x10\x36\xf7\x16\xd5\x46\x69\x7c\xcd\xbc\xcc\x34\x2b\x3a\x26\x04\x54\xaa\xa5\x4d\x2d\x30\xcc\x9f\x2a\x25\x12\x8b\xf8\x53\x81\xe4\x65\x54\x69\xff\xca\x68\x99\xd7\xf4\x1e\x73\x68\x12\x48\x81\xef\x8b\xc5\xe4\xdb\x0f\x16\x2d\xd0\xcf\xed\x64\x69\xee\xa1\xf7\x7c\xe1\xee\x24\x92\x7a\xc0\xca\xda\x57\x1a\x65\xdc\x2f\x2b\x9b\xd1\x9c\x4b\x97\xad\xd0\x48\x6a\x44\x09\xb2\x06\xe5\x41\x6f\x8e\x98\xd6\x21\x90\x98\xfe\x61\xd9\x74\xb7\x0b\x2f\x58\x39\x08\x17\xc5\xab\x6c\x84\x20\x1d\x6b\x4d\x06\xaf\xc3\x44\xdb\xb2\x77\xe7\x11\x7a\x94\xc0\x11\x2e\x95\xc7\x95\xc8\x9f\x43\x1a\xef\x8b\x24\xde\x13\x29\xfc\x79\x24\xf0\x7e\x4a\xdf\xd1\x24\xef\x38\x52\x77\x1c\x89\x7b\x8f\xb8\xf6\x98\x52\x76\x1c\x09\xfb\x39\xec\x6b\x85\x84\x29\xfb\xd4\x87\xb4\x65\x8f\xb8\x4a\x34\x7c\x42\x53\x4d\x21\xa1\x00\x5e\x01\x7a\x7b\x0f\x2c\xd0\x64\x3e\x64\x9c\x93\xca\x2e\x1a\xf7\xc2\xbe\xdd\x64\x29\x1b\x6e\x6b\x32\xdc\xd6\x7b\xb4\xe1\xb6\x1e\x6e\xeb\x17\xb9\xad\x1d\xb7\xfa\xf2\xaf\xea\xc8\x48\x4b\x88\x21\x77\xf0\x92\x8e\x96\x8c\x80\xda\x34\x7b\x1e\xc5\x3a\xc6\xf3\x1c\x47\xee\x72\xe2\x82\xce\x19\x8e\x7a\x5d\x66\x59\x97\x3a\x17\xb6\xc5\x58\x80\x4b\x9c\xf6\xa2\xcc\x32\x57\x1b\xa1\xdb\xec\x7f\xe4\x78\x81\x5d\x64\x0f\x74\xa9\xce\xc8\x15\x2c\x40\x9e\x91\xcb\xe9\x95\xd0\xd7\xd6\x74\xd2\xad\xdf\x26\x12\x86\xed\x9c\xb0\x29\x79\x93\x51\x0d\x4a\x13\x4d\x67\x18\x51\x5b\x57\xef\x14\xb2\x35\x68\x5d\x9f\xfc\x80\x16\xad\xf0\xbd\xf9\x6b\x0f\x20\x3f\x3a\xcc\x5e\xcd\xd8\x14\x92\x65\x92\x85\xb3\x89\xef\x7d\x4f\x3e\xe2\xdc\x8b\x07\x18\xa7\xb4\x01\xa1\xfa\x33\x2c\x03\x56\x08\xa5\x6f\x35\x95\xfa\xd0\xb5\xc0\xae\x3d\x21\x66\xb2\x13\x9a\x65\x90\x12\x96\xe7\x90\x32\xaa\x8d\x20\x48\xa7\x1a\x24\xa1\xcd\x7a\xb3\xca\x06\x81\x37\x12\x11\xe6\x94\xa7\x19\x48\x32\xa5\x2c\x53\xdd\x43\xd1\x57\xea\xda\x2a\x4c\xcc\x64\xdc\x02\xe0\x63\x18\xa3\x47\x98\xa7\x49\x22\x64\x8a\x31\xb4\xc2\x23\xb1\xe3\x4b\x84\xf0\x27\xd3\x3e\xa2\xa8\x90\x53\x4e\x67\x90\xbb\xaa\xf5\x6d\xb2\x26\x99\x48\xee\x15\x29\xb9\x66\x99\x7d\x79\x21\xee\x51\x20\xce\xf0\xa4\x76\x1e\xba\x3b\x03\xa8\xfe\x39\xaa\x0e\xe1\xc8\x50\xa5\xce\x7f\x5d\x7f\x85\x1f\x74\x24\x2e\x82\x5a\x16\x43\x29\x83\x4f\x90\x84\x08\x88\x6d\xeb\xfd\x27\x48\xaa\x5b\x41\xe1\x0e\x47\x64\x4e\x0b\xf1\x8f\x18\xbc\x91\x1c\x59\xb6\x45\x0a\xe8\x89\x15\x44\x13\x80\x7d\xdc\x6c\xb1\x63\x44\xde\xba\x45\x60\xca\xcd\xbc\xfd\x33\x63\x1c\xda\x0b\xa3\x6c\x49\x4c\x68\x56\x4a\x30\x7f\xae\xd5\xfc\xf6\x30\x52\xc1\xa4\x79\x5a\x0c\x6d\x52\x08\x4d\x4e\x8e\xcf\x8f\xff\x3f\xf6\xde\xbd\xb9\x8d\xdc\xda\x17\xfd\xff\x7c\x0a\x94\x93\x3a\x92\x76\x48\xc9\x9e\x64\x52\xd9\x53\xfb\xde\x94\xb6\xac\xb1\x55\xb1\x65\x5e\x49\x33\x39\xa9\xc9\xec\x09\xd8\x0d\x92\x38\xea\x06\x3a\x00\x5a\x12\x53\xf3\xe1\x6f\x61\xe1\xd1\x68\x92\xb2\x4d\x00\x12\x69\xa7\x3b\x55\x13\x8b\xa2\x1a\xef\x85\xf5\xf8\xad\xdf\x3a\x5a\xdb\x23\x07\x12\xf0\xfc\x72\x29\x15\xa9\x4d\x95\x8a\xa2\x1b\x94\xa4\x75\x03\x35\xe8\x49\x71\x50\x8e\x10\x55\x39\x40\x27\xfa\x8e\x34\x65\x73\x60\x56\x2c\x63\xf4\x08\x49\x8e\x94\xc0\x25\xb5\x7e\x32\xf8\x54\x7f\x49\x89\xd6\x56\xc1\x39\x3c\xf8\xf5\x60\x84\x88\x2a\x8e\xd0\x3d\x67\x07\x0a\xa6\xef\x18\xdd\x70\xd4\x26\x27\xd1\xa0\xae\x23\x4b\xde\x22\x46\x88\x3d\x5b\xbe\x50\x96\xbe\x6e\x10\x6f\x4d\xca\xd7\x02\xab\x14\xa6\xeb\xf0\x39\x7f\xa0\xca\xb2\x39\x68\xf9\xfd\x12\x76\x93\xb9\xb2\x10\x96\xa8\xa2\x77\xe4\x64\x41\x70\xa5\x16\x06\x1e\xcf\x38\x1b\xff\x8b\x08\x0e\xbc\xd8\xcc\xfe\x26\xb5\x1b\x69\x31\xca\xf0\x49\x88\x57\xae\x77\x28\x0b\x32\x26\xb3\x75\xe9\x1e\x7d\xed\xbd\x21\xd1\x2a\x11\x5a\x95\x47\x6f\x6f\x6e\x26\x6f\x88\x0a\xa5\x3c\x83\x0f\xd1\x9b\xf3\x1b\x97\x14\x11\xd4\x8a\xda\x03\xf1\x9e\x07\xad\x39\x46\x0d\x17\xfb\x70\xcb\x2c\xb8\x4c\x5a\x4e\xf4\x04\x57\xcc\x5b\x2e\x95\x09\x0e\x28\xae\xc5\x36\x83\x4c\x39\xde\x47\xf8\xbb\x7c\xf0\x8b\xc9\x31\xfa\x1b\x6f\xf5\x84\x4c\xf1\xb4\x5a\xa2\x7b\xcc\xac\xb7\x3b\x0d\x96\xab\x9f\x17\xba\x2b\x2f\xf4\x0d\xa2\x77\xfe\x5b\x82\x4b\x22\x24\x08\x68\x82\x93\xb3\x6b\xb3\x1d\xf7\xa0\x6f\x59\x97\xf2\xac\x95\x8a\xd7\x68\x61\x87\xdd\xe7\xcc\xb6\x87\xf3\xd8\x1c\x57\xcb\x4f\x2a\x48\x63\x84\xb8\xfd\x9b\xaf\x4e\x44\xaf\x49\x2f\x33\xef\xf6\xf3\xa9\x51\x53\xc3\x69\xb3\x1e\x73\xc3\x7c\x69\x65\x9b\xde\xaa\xd9\x80\x94\x19\x00\xe8\x28\x23\x08\x1d\xa5\xb1\x69\xaf\xbe\x08\xa2\x07\xc9\x6f\xca\x87\x6b\x47\xd9\xb0\xdb\xe8\x49\xf0\xdb\xc8\xc2\xf2\xec\xe6\x33\x91\xa3\xb4\x52\xe1\xab\x2f\x0f\x2a\x34\x17\x98\x71\x46\x0b\x5c\xd1\x7f\x91\x12\xb5\x0d\x67\x36\x59\x0b\x34\xdb\x02\x4b\x32\x86\x50\x2e\x33\xe2\x5c\x06\xf4\xc9\x5a\x3a\x28\xce\x41\xdd\x03\x34\x96\x16\xf7\xa6\xd7\x79\xba\x9a\x15\x66\x9c\xcc\x05\x1e\x3e\x6b\x11\xda\xde\x62\xe5\xd9\xf1\xe8\x8b\x50\x27\x51\xa6\x4c\xfe\x75\xb2\x2c\xc5\x11\x2e\x0a\x20\x88\x36\xd7\x15\x08\x5e\x49\xc4\x5d\xfa\xfe\xca\x36\xaf\x5a\x05\xdc\x37\xdd\xcb\x04\xb1\x05\x62\x6d\x3d\x25\xa2\x63\x1a\x14\x6a\x7d\x4e\xb3\x78\x5d\x6c\xb3\xa6\x39\x17\xf6\x73\x3a\x06\x66\x73\x82\x5e\xe9\x96\xff\xf8\xed\xb7\xbf\xff\x36\x43\x3b\x7a\x78\xae\x15\xcc\xd0\xc5\xe9\xe5\xe9\x2f\xd7\x3f\x9e\x01\x7f\x79\xea\xeb\x33\x65\x5d\xe6\xce\xb9\xcc\x9a\x71\xf9\xa4\xf9\x96\xc0\x04\x98\x2c\x65\x73\x1f\x89\x6b\xe8\x95\xde\x84\xad\x34\x9c\xe7\xd6\x26\xb1\xde\x6d\xe3\x62\x96\x19\xf2\xa4\xc2\x38\x99\x16\x58\x7b\x21\xa9\x64\x45\x48\x93\xcd\xe2\xbf\xd6\x6f\xeb\xd5\x97\x41\x65\x2b\x4c\x99\x71\xf0\x30\xf5\x7d\xf9\xb6\xd4\x38\xf4\xe1\x2b\x32\xfe\x25\x29\x38\x2b\x53\x4c\x80\x5c\x2a\xad\xed\x49\xd6\x33\x77\x6d\xde\xe9\x5c\xc4\xdd\x55\x62\x1b\x03\x4b\x32\x75\x45\x91\x5f\xd5\x3c\x72\xd2\xd0\x0b\xc0\xdb\xfe\xf8\x87\xf8\x00\x59\xd1\x5c\xf3\xe2\x36\xa3\x8b\x2c\x51\x80\xbd\xd6\x27\xad\x30\xb1\xc0\x9b\xb3\x89\xe9\x9c\x5e\x99\xcb\x0f\x37\x1d\x97\x88\xd6\xc2\x71\x17\xd6\x7d\x6b\xa3\x85\x98\x95\xe8\x96\x34\x69\xd6\xa5\x16\x98\x0e\x97\xd6\x87\xa5\x81\xef\x5d\xd8\x20\xb2\xc9\xd7\x35\x82\xc0\xc1\xc9\x8c\x46\x9c\x56\x52\x26\x88\x7b\x43\x20\xd0\x1a\x21\x33\x4c\x2b\x84\xc1\x2b\xaf\x68\x4d\x4c\xfd\x6b\x70\xf6\x77\x40\x84\xaf\x48\xe0\x7c\xad\xde\xc6\x03\x87\x31\xfe\x6e\x6b\xaf\x61\x2a\xcd\xc2\xd7\x6d\x06\x58\x99\x2d\x7a\x34\x59\x83\x19\xf0\x39\xcf\x60\x06\x44\x9a\x01\x8d\x20\xd7\x8a\x47\xeb\x9a\xd9\x00\x37\xa6\x1b\x8f\xc0\x6d\xa6\x64\xc6\x05\x59\xc5\xdb\x04\x38\x18\x0b\xc5\x4e\x80\x9a\x9e\x4e\x2e\x7c\xec\x8b\xf7\xb0\x2e\x86\x0a\x57\xb6\xc5\xc2\x85\x49\x19\x91\xf2\x04\x90\x35\x6d\x63\x1c\xcb\x70\xb5\xb5\x82\xc4\xa3\x7c\x1a\x41\x48\x0d\xf3\x38\xea\xe8\x69\xf4\x70\x09\x33\x1f\x12\x55\x98\xb8\xb9\x83\x15\x59\x18\x98\x9b\xae\x59\x52\x38\xbf\x9b\xd8\x42\x60\xb9\x20\x90\x8c\x49\x1e\xa8\x92\xa6\x51\x43\xef\xe9\x66\x5c\xeb\x0b\x73\x81\x0b\x82\x1a\x22\x28\xd7\x2a\x46\xcb\x54\xc9\xef\x19\x9a\x92\x39\x65\xd2\xad\x58\x4a\x97\xdc\x96\x00\x24\x11\x95\xbe\x04\xf4\x31\xba\xea\x95\x22\xb3\x74\x55\x05\xef\x64\xa6\x9d\xa2\x51\xa6\x29\x01\xe5\x05\xb6\x41\x8b\xab\x6a\xd9\x6d\xbc\x90\x71\xf2\x91\x19\x8a\xdf\x10\x66\x66\x0f\x5b\x06\x03\x2d\x49\x85\x97\x26\x25\x79\x46\x19\x78\x7f\x85\x3c\x3a\x4e\x87\x66\x45\x77\x90\x8b\xe0\x9d\x8f\xee\x0c\x2a\x91\x20\xb8\x48\x22\xc6\x1d\x30\x60\x9f\x7a\x06\x0c\xd8\x80\x01\x1b\x30\x60\xeb\xcf\x80\x01\xeb\x3f\x03\x06\xec\xf1\x0e\xed\x73\xd0\x6e\xc0\x80\x0d\x5e\x99\xf5\x67\xc0\x80\x45\x3d\x03\x06\xec\x93\xcf\xde\x89\xe8\x01\x03\xf6\x19\xcf\x80\x01\xfb\xcc\x67\xc0\x80\x0d\x18\xb0\x01\x03\x36\x60\xc0\x12\x9e\x01\x03\xb6\xfd\xf0\x86\xe0\x4f\xfc\x33\x60\xc0\x06\x0c\xd8\x96\xcf\x80\x01\x5b\x79\x06\x0c\xd8\x80\x01\xfb\xd8\x33\x60\xc0\x06\x0c\x98\x7d\x06\x6f\xe3\xda\x33\x60\xc0\x36\x3c\x03\x06\x6c\xbb\x76\x06\x33\x20\xed\x65\x4f\x62\x06\x48\xc5\x9b\x6b\x3a\x4f\x20\x1a\xcc\x75\x0c\xae\x7d\x4f\x2c\x0b\xa1\xb4\xd5\x5b\xa5\xf9\xd0\xf9\xb1\x80\xa1\x4c\x1f\x88\x10\xa5\xd3\xdd\x24\x53\xa2\x4d\x04\x3d\xac\x26\xe5\x36\xb9\x98\x41\x00\x39\x20\x49\xd3\xa7\xc2\x8a\x35\xdd\x4e\x50\x27\xa0\xaf\x3e\xbb\xdb\x8d\x32\x6d\xbb\xc4\xf7\x20\x98\x8f\x02\x33\x53\x6a\xd3\xd6\x5d\xd6\xd7\xfb\x84\x97\xd2\x95\x26\x60\x9c\x8d\x0d\xfb\xe7\xb1\xee\xf0\x31\x97\xc7\x09\xde\xe0\x44\xd2\x33\x83\x91\x9b\x08\x3e\x4d\x27\x3e\x83\xb7\x48\xa8\xc8\xf9\x95\xd2\x9e\xa5\xa0\x77\x76\x86\xdc\xd9\x13\xe4\x53\x06\xb4\x4e\xce\x3b\x7c\x4f\x51\x3a\xfb\x89\xd0\xd9\x47\x74\xce\x2e\x90\x39\x3b\x47\xe5\xe4\x09\xf7\x66\x08\xf5\x66\xd2\x94\x9e\x20\x6c\x62\x01\xde\x37\x0b\x41\xe4\x82\x57\xd1\x02\x27\x97\xb0\x79\x4f\x19\xad\xdb\x1a\xe8\xf6\xb5\x4c\xa1\x77\x1e\x84\x2e\x9d\xc8\xb0\xd8\x74\x13\x09\x07\x5e\xfe\x92\x40\xbd\x63\x4c\x2b\xbd\xb5\x80\xc4\x72\x81\xef\x40\x59\x6a\x8b\x82\x90\x32\x45\x5d\x0a\xbd\xa8\xbf\x3f\xf6\x3d\x34\x64\xe4\x54\xa2\x57\x69\x57\x4d\x9a\x3e\x1e\xb8\x99\x7e\xff\x4d\xd4\x3b\xe6\xa2\xc9\x73\x4b\xbf\xb9\x9a\x9c\xf5\x6e\x69\xf8\xe0\x2d\x1c\xe3\xb3\x05\x29\x6e\xaf\x2c\xc4\x63\x77\x37\x73\xba\xfb\x23\xc9\xf5\x91\x43\x31\x48\xb5\xee\xfb\x3a\xa8\x36\xc0\xfb\xa1\xb9\x39\xac\x22\x11\x77\xb4\x20\xc7\xcf\x60\x40\xe7\x32\x4a\xd3\x0f\x02\x02\xf7\x35\x0c\x7c\x5f\xd4\xae\x6b\xd3\x1d\xef\xf9\x0e\x7c\x27\xb6\xa7\x00\x66\xac\x70\xe1\xd7\x66\xbe\xf9\xd0\x25\x75\xe3\x50\x12\xe2\x53\x14\xe6\x54\x2d\xda\xe9\x71\xc1\xeb\x13\x2d\x3a\xcc\x7f\xa6\x15\x9f\x9e\xd4\x58\x2a\x22\x4e\x4a\x5e\xd8\x6b\x7d\x5c\xe8\x1e\x50\x36\x3f\xae\xcb\xa3\xe3\xff\x95\xd4\x87\x0b\xeb\xc3\xb5\xe9\x41\x8f\x18\xaf\x53\xa2\xe5\x3e\x17\x2b\x56\xac\x9e\x94\xf4\x4d\x9a\x7c\x7f\xa7\x56\x4f\x48\x84\xcb\xee\x04\x2a\x3b\x48\x6d\x94\xc1\x51\x9d\x53\xa8\xec\x07\x1c\xf6\xc9\xa0\xb0\x59\xce\x6a\x26\x08\xec\x1e\xc1\x5f\xf7\xc6\x16\xda\x17\xc8\xeb\x1e\xd6\xdc\xcf\x00\x73\xcd\x01\x71\xcd\x07\x6f\xdd\xd7\xd2\xf4\x4f\x06\x69\xfd\x22\xe0\xac\x19\xe3\x36\x99\x60\xac\xcf\x01\x61\xdd\x5f\x1f\x0c\xca\x00\x5b\x7d\x3e\xc8\x6a\x96\x79\xcc\x6a\xc5\x26\x8a\x84\x1d\x40\x54\x9f\x23\x2e\xfd\x64\x31\xe9\x0c\xf1\xe8\x9c\xb1\xe8\x6c\x71\xe8\x27\x83\xa2\xa6\xc3\x50\xb3\xfa\x14\x9e\x05\x7e\x9a\x13\x7a\x9a\xbc\xbe\x94\x51\x45\x71\xf5\x9a\x54\x78\x79\x9d\x06\x50\xcc\xb5\x12\x97\x6b\x20\x46\xe3\xb6\xee\xc7\xdb\x17\x58\x22\x57\x05\xc9\x52\x8f\xb8\x20\xb4\x55\x81\x21\x7e\x6c\xc6\x17\x5d\x8c\x0c\x6d\xcf\x45\x71\xcf\xc5\x6d\xc5\x71\x29\x4f\x1a\x6e\xfe\xd3\x31\x51\x04\x14\x14\x49\x6a\xfa\x7e\xb8\xc7\x0d\xdf\xc7\x9e\xec\x9a\xb7\xfc\x1e\xf1\x99\x22\x0c\x1d\x52\xe6\x76\xce\x51\xe0\xa5\xe9\xc2\x23\xc9\xf1\x0e\xfd\xd6\x57\x2f\x5d\x23\x5f\x5f\xdc\x03\x22\x43\x52\xee\x75\xe4\xcb\xf6\xf1\xd3\xa1\x2f\xfb\xc5\x59\x5b\xf5\xc3\x5f\x26\x24\x96\x27\xf6\xf5\xea\x18\xbd\xb7\xea\xc4\x2b\xe8\x8f\x17\x45\x98\x95\xc8\xf2\x46\x7d\x7d\xfb\x24\x19\x82\xdd\x37\x6e\x3c\x66\xba\x8f\x67\x31\x37\xb0\xd6\x32\x39\xc2\xfa\x5b\xa0\x80\x0e\x4e\xd7\xbd\x71\xba\xee\x08\x19\xfc\xf5\x59\x5b\xcf\x8f\x04\x1e\xac\xad\x7f\x17\x6b\x2b\xa0\x6b\x7b\x23\x70\x41\x26\xfb\xa4\xbc\x39\x01\xd2\x25\xa8\x75\x3a\x9c\x17\x17\x8c\x10\x93\xd0\xd4\x91\xf1\x01\xef\xdc\xac\xad\xaa\xa5\xf1\x21\xf6\x98\x19\xe3\xb7\xd6\xcd\x82\xac\x51\xda\x41\x28\x75\x43\xef\x3a\xdb\xa4\x11\xdc\x6a\x24\xa2\x65\x4c\xab\x18\xf6\x38\xe9\xce\x6b\x5b\x44\x12\x16\xef\x4e\xc7\x3d\xc2\x3d\x0b\x8e\x06\xa0\xe7\x82\xa0\x2e\xaf\xa6\xdf\x11\xdd\xea\x8c\x8b\x82\x4e\xab\x25\x5a\xe0\x4a\x1b\x4b\x16\x3c\x7c\x4b\xab\xca\xbe\x26\x01\xac\x4c\x94\x09\x3d\x1b\x8d\xa6\xe2\x6c\x0e\x93\x81\x4d\x47\xc8\x43\x43\x0a\xdd\x66\x51\x11\xcc\xda\xc6\xf4\x53\xeb\x47\x4b\xde\x0a\xd7\xcf\x24\xb4\x76\xd0\x3a\x95\x88\xd1\x6a\xe4\xa6\xbc\x4f\xcd\xb8\xbe\xe7\x3b\x97\xb2\x24\xa5\x65\x55\xbc\xa7\x92\x8c\xe0\x9d\xd1\x7d\x32\x7d\xe1\x77\x44\x08\x5a\x12\xb3\x6f\xcc\x67\x8d\xe0\x77\xb4\xec\xb0\xe3\x7a\x5b\x00\x6e\x3b\xba\xad\x1f\xe1\xbd\x4e\xb4\x32\xce\xc6\x8c\xcc\x31\xa8\xc7\x56\xa0\x19\x44\xa7\x69\xdf\xe0\x07\x59\x49\x0b\xac\x88\x04\xac\x7c\x8f\x72\xf5\x8e\xe2\xe8\x9e\xe8\xf1\x04\x3b\x0a\x1d\x32\x8e\x38\x64\xbc\xb5\x8c\xaa\x25\x44\xf4\x16\xad\x42\x25\xbf\x67\x47\x29\x07\xd3\xc0\x1c\x30\x9a\x12\x85\xbb\xa4\x35\xa7\x92\x49\x44\x18\x9e\x56\xfa\xec\x01\x86\xfc\x66\xe3\x06\x40\x33\x82\x55\x2b\x08\x9a\x63\x95\x20\x25\x36\x68\xf3\x66\x3d\x3f\xbe\xed\xa8\xb4\xf1\xba\x19\x6a\x99\x24\x89\x8a\x6c\x36\x13\x20\x32\x13\x53\x9f\x68\xde\xaa\x3d\xb9\x47\x1e\x73\x1d\x99\x8c\x92\xc0\x48\xa4\x35\x91\x88\xb7\x09\x9e\xbc\x9e\xf9\x67\x9b\xcb\x69\xe1\x0d\x7e\xa7\x8d\x4f\x6c\xd8\x34\xc7\x0e\xbb\x0c\xb4\xf2\x0d\x79\x28\x1d\xf0\xca\xe4\xf8\xbe\xbe\xbc\xfe\xe5\xdd\xe9\x7f\x9f\xbf\x8b\xdb\x02\x20\xeb\x58\xa8\x3b\xb7\x8c\xfe\xb3\x25\x08\xd7\x9c\xcd\x11\xae\xc2\x14\x98\x11\x38\x3a\x83\x0f\x40\x2a\xe6\x4d\x96\x89\xd4\x6b\xf5\x25\x10\x25\x18\xd6\xe0\x98\xcf\x91\x11\x14\x8b\x02\x49\x40\x7f\xf4\x91\x30\x6e\x0c\x80\x3f\xed\x91\x37\x30\xa2\xf4\x19\x37\x06\x21\x65\x08\x23\x49\xd9\xbc\x4a\xb6\x05\x93\x3d\x22\xa9\xfe\x90\x71\x37\x82\x49\xac\x5b\x24\xdd\x29\xd2\xeb\x43\xbc\x55\x99\xcf\x21\xd0\x5d\x66\xce\x05\x40\x1e\x1a\x2e\x89\x73\x01\x18\x1d\xf7\x62\x82\x70\x59\x8a\x24\x3d\xda\x0a\x1b\x6f\xa3\x1b\x82\x00\xd3\xac\x09\xfd\x8e\xd0\x4b\xf4\x5f\xe8\x01\xfd\x17\x38\x04\xfe\x18\xdf\x54\x1e\x73\x3b\x07\xa2\x79\xc1\xa5\xba\x98\x64\x5a\xe8\xbf\x2e\xb0\x82\x37\xea\xf5\x50\x1c\x4d\xa9\xb5\xcc\xc8\x83\x22\x42\x6b\xc4\x76\x0d\x53\x67\x2e\xc9\xb9\xa0\x3b\xf8\xa5\xec\xee\xd4\x38\xeb\xc5\xac\x0f\x84\x7e\xa6\xfd\x0d\x0d\xbf\xe5\x52\x5d\x5a\x69\x1d\xb2\x5c\x84\xfd\xa8\xb1\x2a\x16\x7d\x71\x9f\xd2\xea\x7b\xbd\xf7\x82\xeb\xbf\xe4\x70\x51\x9a\x74\xb6\x05\x4d\x10\x0e\xfb\x73\x62\xd3\x20\x73\xf9\xb6\xee\xc7\xb6\xd6\x8a\x7b\x13\xd4\x30\xab\xb7\x05\x95\x23\x1a\x5e\x1e\xa3\x73\x5c\x2c\x12\x7a\xa1\x67\xa3\x0c\x94\x81\x86\x97\xa6\x1b\x0b\x7c\xa7\xf7\xb8\x6d\x15\xe0\x7b\x46\x75\xf5\x81\x32\x38\x70\x5a\x62\x15\x98\xa1\x69\x0a\x7e\x4c\x90\x19\x11\xc2\xa4\x4c\x4e\x97\x2e\xf3\x22\x79\xb7\x25\x49\xb9\x46\x70\xc5\x0b\x1e\xcd\x6c\x90\x73\xab\x4c\x6c\x5f\x60\xee\x21\x6c\xe5\x03\x85\x3f\xbc\x9e\x8c\xd0\xcd\xd9\x64\x84\xb8\x40\xd7\x67\x69\x38\x90\xd0\x1a\x7d\x71\x73\x36\x79\xb1\xd3\x15\x08\xd2\x39\x6e\xce\x26\x11\x2f\x59\x47\x12\xd6\xb8\x19\xdf\x92\x65\xa4\x76\x97\x43\xc3\x1c\xfb\x8d\x95\x65\x40\x66\x9a\x6b\xdc\x6c\xfd\x36\x41\x70\x49\x07\xb2\x85\xcf\x7f\x06\xb2\x85\x81\x6c\x61\x20\x5b\x18\xc8\x16\x06\xb2\x85\xfd\x05\xfa\x0f\x64\x0b\x9f\x7c\x06\xb2\x85\x47\x9f\x81\x6c\x61\xab\x67\x20\x5b\x58\x7f\x06\xb2\x85\x8f\x3c\x03\xd9\x82\x7f\x06\xb2\x85\x81\x6c\xe1\xcb\x95\xda\x03\xd9\xc2\xea\x33\x90\x2d\x0c\x64\x0b\x03\xd9\x42\xf8\x0c\x64\x0b\x8f\x3c\x03\xd9\xc2\x40\xb6\x30\x90\x2d\x7c\xfc\x19\xc8\x16\xa2\x9f\x81\x6c\x61\xbb\x67\x48\xff\xd9\xf2\x19\xc8\x16\x06\xb2\x85\xd5\x67\x20\x5b\xf8\xe4\xb3\x1f\xee\xf1\x81\x6c\x61\x20\x5b\xf8\xe8\x33\x90\x2d\x0c\x64\x0b\x1f\x7d\x06\xb2\x85\x88\x67\xef\x9c\xae\x03\xd9\xc2\x40\xb6\xf0\xb1\x36\x06\x6b\x6b\xbb\x67\x20\x5b\x18\xc8\x16\xd6\x9e\x81\x6c\x61\xfd\x19\xc8\x16\x06\xb2\x85\x81\x6c\x61\x20\x5b\xf0\xcf\x40\xb6\xf0\xb5\xfb\x9d\x04\x91\xf4\x5f\x64\xc2\x2b\x5a\x2c\x93\xf3\x4c\xae\x88\xe4\xad\x28\xf4\x8d\x0d\xaf\x45\x0d\xbc\xd7\x7b\x14\x92\x94\xec\x3d\x4b\xde\xbf\x0a\x26\x2e\x4c\xe2\x17\x76\x0e\x9e\x62\x0a\xf6\x22\x91\xdf\x0d\xf0\x32\x1e\x41\x00\x2f\x51\x58\x28\x33\x7d\x71\xce\xd2\x64\xab\x3d\x1c\xc8\x3e\x24\x12\x86\xdc\x23\x7e\x17\x29\xee\x85\x2d\x7d\x74\x73\xe1\xa6\xa9\x68\x4a\x4a\x26\x42\xd7\x2d\x68\x17\xc4\x86\xc0\xe5\x77\xa8\x68\xda\x11\xaa\x49\xcd\x45\x42\x62\x44\x06\x0b\xae\xb7\x55\xf6\x61\x9d\xae\x4c\x87\xdc\xe4\x2b\x0e\xf3\xbf\x34\xf6\x42\x47\x10\xe3\xd7\x8a\x3a\x71\x98\x84\x35\x5b\x2f\x5b\x4d\x55\xcf\x0b\x74\xc9\xd5\x95\x3d\xdc\x3b\x5b\xaf\xcc\x88\x05\x37\x85\xe9\xdc\x32\x91\x0b\xde\x5d\x68\x9f\x9d\x3b\x89\xce\x37\x7c\x0a\xf1\x4f\xd9\xe8\x97\xf8\x31\x45\x75\x08\x57\x82\xe0\x72\x09\xdd\x28\x00\xaf\xd7\xf9\xff\xbe\xc0\xb4\xcd\xa2\xc2\x34\x1e\xe4\x97\xeb\x48\x9f\x41\x2f\x90\xde\xaf\x1d\xf8\x1d\xf2\xc8\xfc\x62\x8d\x3c\xc4\x9b\x9a\x33\x7e\xec\x7e\x65\xfe\x78\x94\x60\xe9\x61\x05\xbb\x0b\x8c\x18\x30\x65\xa9\x0c\xd5\x84\x34\xe3\xce\x98\x74\x25\x69\x88\xd6\xde\x8d\xb3\x33\x5e\x47\x5f\x32\x5c\xd3\xc2\x9d\x8a\x53\xb3\x09\x29\x67\x2b\x16\x60\x8e\x2e\x6b\xc3\xb4\xae\x5b\x85\xa7\x15\x39\x46\x17\x6a\x63\xa9\xfc\xb4\x9c\x65\x94\x05\xab\x9a\x88\x53\xdd\xa8\x40\xc3\xa6\x32\xcc\x0b\x84\x69\xf1\xc3\x19\x41\x84\x29\xb1\xd4\xfb\x6f\xc2\xcb\x6b\xbd\x05\x7b\xdf\x4e\x26\x64\x48\x84\xa7\xe6\x80\xa6\x26\xc2\x52\xf3\x80\x49\xd3\x81\xa4\x79\x41\xa4\x9d\xbb\xdf\xf0\xc9\x84\xd9\x39\xbd\x6d\xa1\xaf\x80\x0d\xa2\x09\xf1\x59\x62\x0f\x74\x8b\x13\x5e\x6a\x05\x47\x10\x23\x9f\xfc\x19\x35\xce\xbe\x0b\xdd\xb9\x5b\xf0\xce\x61\xd5\x69\x3e\xf8\x0e\xd3\x4a\x1f\xe0\xc4\x0e\xf8\xec\xe6\x4c\x51\x9a\x4c\x71\x05\x0b\xa4\xdf\xa7\xcd\x62\x53\xb0\x7a\x59\x5c\xc5\x82\x4b\xc2\x40\x5e\x62\x9f\x6d\xe3\x73\x01\xac\x88\x29\xcd\x5d\x9c\x8a\xf8\xbd\x98\x21\x52\x37\x6a\x39\x42\xe4\x8e\x88\xa5\x5a\x00\x32\x40\x70\x83\x16\x81\x26\x74\xdf\x6a\x5c\x06\xbb\x63\x84\xb8\x73\x16\x27\x36\x0f\xf7\x83\xb5\x9f\xda\x4a\x19\x6b\x0a\xf4\xef\xa4\x74\x50\xf3\x64\xd8\x35\xb9\x49\x4f\x50\xaa\xd0\xcc\x49\x5a\xa2\x9f\x8a\xd6\x34\x8e\x0a\x12\x65\x3c\x0b\xef\xa0\x17\x41\x9a\x87\xde\x12\x35\x7e\x00\x57\x22\xae\x79\xcb\x60\x6b\x14\xbc\x6e\x5a\x15\xa8\xe4\x4e\xbb\x7f\x36\x1f\x63\xc1\xd9\x8c\xce\x6d\x14\xec\xa4\xc6\x0c\xcf\xc9\xd8\x77\x67\xdc\xa9\x37\x27\xbb\x43\x67\xe0\xd2\xd1\x48\x4c\x72\xe4\x14\x63\xa5\x88\x60\xdf\xa1\xff\x39\xfc\xfb\xef\x7e\x1d\x1f\xfd\xf9\xf0\xf0\xa7\x97\xe3\xff\xfc\xf9\x77\x87\x7f\x3f\x86\x7f\xfc\xc7\xd1\x9f\x8f\x7e\x75\x3f\xfc\xee\xe8\xe8\xf0\xf0\xa7\xbf\xbc\x7f\x73\x33\x39\xff\x99\x1e\xfd\xfa\x13\x6b\xeb\x5b\xf3\xd3\xaf\x87\x3f\x91\xf3\x9f\x3f\xf3\x25\x47\x47\x7f\xfe\x6d\x7c\xa4\x30\x35\x2c\x9e\x2f\x28\x9e\x29\x24\xfe\x24\x01\x71\x2b\x63\x77\x7e\xf8\xed\x15\xb8\x76\xfc\x6d\x24\xe1\x63\xc7\x5f\x24\xfb\x4f\x2e\x66\x5d\xfb\x54\x22\x5e\x53\xa5\xac\xb7\x00\x87\x3c\x35\x2b\xbe\x1b\x2b\xb0\xe8\xcc\x28\x50\x54\x86\x7c\x29\x9d\xcb\x27\xba\x5b\xfe\x7e\x05\x6f\x15\x43\xb4\x6e\x2a\x52\x13\xa6\x40\xf0\x8c\x9d\x6d\x0b\xae\xbf\xe3\x6e\x04\x05\x66\x8c\x2b\x44\x1e\x0a\x42\x4a\xdb\xc9\x41\x36\x06\xcf\x20\x1b\x07\xd9\xf8\xa9\x27\xd9\x7f\x9d\xc9\x91\x19\xfa\xac\xd7\xa2\x51\x5a\x2e\x98\x23\xe6\xd4\x67\xf8\xba\xe7\x38\xe0\x33\x44\x62\xb9\x2c\xbb\x46\x2c\x3d\x26\x8e\xf5\x56\x22\xc8\x0f\xb7\x52\x49\x3a\xac\x8c\xb1\x45\x39\xdb\x0f\x2e\xf4\xde\x72\x5f\xb5\xd5\x2e\x9d\xd7\x01\xb3\xb8\xd6\xed\xc1\xa3\xa9\x7b\xe4\x40\xdd\x0b\x52\xdc\x1a\x17\x72\x49\x0c\xc8\x82\x98\x3b\x28\x4e\x03\x08\x68\xf2\x17\xbc\xad\x4a\xdd\x86\x9d\x0e\x62\x16\xe8\x81\xaa\xe3\x8f\xae\x61\x54\xbb\x5f\x29\x3d\xbc\x3d\xb3\x7a\x0f\x05\xba\xcc\x82\xdf\x87\xaa\x04\xcc\xa9\x56\x18\x16\x98\x95\xd1\xf8\xfb\x3d\x08\x2b\x63\xc0\xa4\xef\x28\x14\x6c\x1a\xdf\x87\xe0\xe2\xb5\x87\xea\x6b\x39\x8c\x2d\x50\x1f\xdf\x12\xa6\x0f\xd0\xfa\xc2\xcf\x3c\xa5\x03\x15\xa0\xd1\xa5\x30\x15\x00\xa8\x12\x2b\x2a\xb5\xb6\x69\xa0\x6e\xe0\x51\x69\xb8\x94\x74\x5a\x91\x0e\x86\xf3\xc2\x6e\xce\x17\x5a\x78\xb8\xdb\x22\x8d\x62\x31\x83\x6f\x2f\x83\x02\xa0\x67\xf5\x8c\x97\x29\x6a\xdc\x8a\x47\xdf\x0b\x61\x83\xe0\x84\x12\x1e\xa5\x91\xc1\x20\x80\xf5\xba\xf6\x57\xf5\xeb\x70\xe5\xeb\x33\x89\x15\x8f\x57\xe9\xf2\xb8\xf3\x5d\x37\xf6\xcb\x4b\xdb\xdb\x14\x82\x54\x60\xe4\xc8\x05\x6d\xd0\x94\xa8\x7b\x42\x56\x92\x12\xba\x7d\x73\x28\x8f\x1c\x4a\x39\xb1\x13\x1d\x52\xc1\x20\x3e\x8e\xd1\xa4\x77\xcc\x21\xe6\x9d\x4e\x34\x72\xc1\xbe\x5b\x15\x51\xc0\x84\xea\xc4\x8c\x13\x61\x1b\xc6\x0a\x31\xc0\xb4\x88\xa5\x1f\x2c\x01\xed\x67\x6d\xcc\xc9\xc3\xbb\xe4\x2a\x6d\x84\xc9\x43\xd3\x7a\x94\xf5\xe6\x3f\xc9\x28\x33\x05\x4b\x2c\xac\x68\x8f\x4e\x61\xff\xaa\xb5\x73\x67\xb7\xbe\x17\xce\xbd\x28\x73\x20\xbe\x53\x77\xce\xa9\x42\x35\x97\x0a\x7d\xf3\xed\xb7\x88\x18\x5f\x8c\x01\x99\x24\xbb\xa0\x51\x36\x06\xa6\x2c\x1c\x4c\xf9\x68\x17\x51\x36\xea\x45\xf4\x91\xc8\x47\x1c\xd9\x58\x66\xe0\x93\x24\x45\x2b\xa8\x5a\x6a\x5b\x80\x3c\x44\x45\x18\x73\x9c\x95\x2e\x0f\xf1\xba\xdf\x21\x8b\x86\x71\x27\xc7\xfc\x0e\xf1\xc6\x50\x4b\x3f\x5a\x3c\xad\xb3\x0a\x5b\x06\xce\x80\xb8\x5d\x7e\x31\xd3\xab\x64\x12\x53\xc0\x70\x04\xac\xce\x6a\x17\x5d\xca\x88\xe9\xce\x3f\x5b\x7a\x87\x2b\x2d\x9a\xbb\xbf\x98\x40\x12\x41\xf8\x47\x5f\x20\x84\x0a\xe4\xc5\x44\xd0\x3b\x5a\x91\x39\x39\x97\x05\x36\xca\xc4\xae\xdd\xf0\xa7\x8f\xf4\x0b\xf6\x83\xe0\x95\x44\xf7\x0b\xa2\x16\x44\x20\xec\x12\x97\x00\xe2\x33\xc7\x94\xa1\x9a\x8b\x14\x18\x88\x6d\x54\x9a\xcc\x29\xaa\x24\x6a\xb0\xd0\x6b\xef\x32\xa4\x0c\xd0\x68\xca\x79\x65\x59\xe2\xab\x65\xd7\x2f\x1a\x8f\x97\x80\x98\x3b\xff\x85\x91\xfb\x5f\x74\x2f\x24\x9a\x55\x78\xee\x13\xa3\xe0\x8a\x59\xd5\xec\x92\x93\xb6\x1e\x9d\x68\xa0\x40\x6f\xf5\x8d\x72\x8f\x97\xb2\x4b\x67\xeb\xda\xa6\x09\xb2\xfd\xd5\x11\x9c\x62\x2c\x91\x6f\xbb\x8c\x7e\xd9\x37\x47\xc0\x3f\x72\x76\x3a\xf9\xe5\xfa\x6f\xd7\xbf\x9c\xbe\x7e\x7f\x71\x19\xfd\xb2\x4b\xae\x88\x89\xa3\x04\xae\x25\xeb\x70\xb2\xab\xe0\xa1\xba\xc7\x5c\x1e\x03\x48\x02\xb8\xd4\x58\xc9\xef\x13\x91\x64\x7a\x4f\x11\x1c\xe7\xc7\xc0\x4d\x73\x2a\x6a\x2e\x26\x82\xcf\x68\x15\xad\x7b\xe7\x3a\xc1\x2b\xdd\x71\x98\x92\x53\xfb\x71\x27\xee\x0d\xbd\xcf\x3a\x74\x31\x10\xd4\x14\x48\x64\xf4\x6b\xe2\x63\x58\xbd\x14\x40\x93\x90\xb8\xd2\xc5\xf8\x43\xb4\xd3\x3d\xb3\x73\xf2\x04\xdd\x8d\xc8\x3f\xcf\x61\xa4\x57\xbc\xc0\x15\x14\xae\x4b\xdb\xf8\x28\xb3\x89\xb0\xda\xaf\x20\xd9\x13\xbb\xed\x8c\x2a\x8e\x4b\xe3\xdd\x36\xc2\xbf\x24\xae\xa8\x85\x53\x76\x00\x22\x97\xd4\x91\x1b\x93\x68\x07\xed\xb9\xec\xd4\x46\x10\x17\x21\x5d\x6d\x9e\x9b\x5a\x1e\x49\x4d\xbe\xef\x03\x0e\xed\x28\x7b\x3c\x0a\xa9\x67\xce\x37\x63\x0f\x18\x9d\x81\x67\x03\x3c\x8e\xda\x64\x5e\x36\xc6\xd5\xf8\xce\x2d\x43\x42\xc5\xab\x4c\x66\x2c\xbc\x64\x4f\x76\xa7\x99\x1f\xbf\x23\x4d\x96\xd0\x2d\xd5\x33\x38\xeb\x84\xb4\xdb\x36\x4e\x07\x31\xa9\x42\x89\xfb\xf1\x47\xa8\xad\xe8\xe4\x7f\x06\x37\x91\x5f\x62\x34\x0e\x8e\x56\x23\xc8\x78\xfd\x78\xa5\x5a\xde\x57\x2d\x53\xb4\x26\x8e\x7a\x6a\xbc\xa2\x13\x09\xf3\xeb\x03\xe9\x89\xde\xb3\x6c\x74\x84\x7e\x60\x70\x5e\x19\x29\xd1\x18\x31\xde\x2d\x11\x61\x33\x2e\x0a\x70\x01\xec\x74\x83\x17\xb8\xc1\x53\x5a\xd1\x14\x61\x9e\x6b\x83\x43\xdd\xa4\xa0\x3f\x80\x5b\x29\xcb\x93\x52\xf0\xc6\xdc\xc4\x8e\x13\x22\x3d\x05\xa0\x9f\x7b\x1c\x52\xfc\x5b\x9f\x50\xaf\x23\x73\x81\x99\xea\x48\x07\xd6\x36\xce\xbf\xa3\x0e\x92\x43\x09\xc0\x65\xbe\x0a\x64\xa7\xa5\x96\x19\xe1\xb2\x25\x9f\xab\x7d\x63\x33\x3f\x73\x83\x0b\x92\x8f\xd1\xe4\xc3\xf5\xc5\xff\x59\x39\x37\xf1\xaa\x9d\x79\xf6\x9b\xcb\x58\xcb\x83\x6c\xdb\xe6\x8a\xd4\xfc\x6e\xd8\x38\x5f\xfd\xc6\xf1\x0e\xa2\x9d\x13\x31\x5e\xb5\x61\xec\x97\xb2\xa0\x6b\xa8\x4e\xd2\x75\x26\x9e\xb3\xa8\xff\xd6\x20\x27\x15\x0b\x82\xf4\x57\x98\xa2\xb8\xaa\x96\xa1\x8f\x54\x71\x53\xe3\x30\x4b\xa1\xee\xf0\x76\x9d\xe1\x4a\x7e\xa9\x57\x64\x8a\x6b\xa7\x11\xbc\x78\xcf\x5b\x96\x87\xd9\x31\x61\xc7\xf9\x8e\xa0\x92\x30\xae\xac\x37\x05\x6c\x09\x3e\x83\xdf\x22\x03\x90\x0e\x48\x9b\x7b\x7a\x4e\x82\x9a\x75\x13\xa8\x56\x1e\x49\xe2\xf4\x70\x63\xbf\xb4\x92\xc8\xcd\x7a\x55\x87\x97\x9e\x25\x60\x0a\x04\xc1\xa5\x81\xb4\x60\xb5\x30\x6c\xa2\x35\x96\xb7\xa4\x34\x1f\x24\x32\x29\x79\xd6\x24\xc8\x98\x73\x33\x7d\xa3\x27\xd7\x25\xc8\x82\x43\xd8\xc0\xef\x80\x5a\x29\xc5\x14\xdb\xe9\x69\x48\x10\xec\x7a\x11\x3e\xb0\x6a\x79\xc5\xb9\xfa\xde\x17\x4b\xdd\xf5\xc9\xf8\xab\x0d\x47\xf4\x9d\x98\xe0\x97\xc6\xd0\xe5\x31\x6c\x1c\x90\x8b\x41\x89\xd7\x54\xb1\xa8\x17\xe4\xdf\x55\x2a\x8a\x96\x9d\xca\x37\x82\xb7\xd1\x3a\x5c\x4e\x7b\xf3\xcd\xc5\x6b\xb8\xf8\x5a\x4b\xb6\xc7\x94\x58\x36\x9c\x32\xe5\x3c\x5e\x19\x83\x36\x3f\x58\x5a\xc3\x50\xb2\x25\x33\x98\x21\xf4\x1e\x2f\x11\xae\x24\xf7\x2e\x35\xb6\x29\xc8\xe9\x22\xa8\xfa\xd7\x53\xae\x16\x6b\xa1\x53\xcc\xe2\x43\x39\xeb\xed\x8d\x02\xce\xbe\x0e\x9a\x42\xd9\x5a\xb3\x0a\x52\x88\x1b\x41\x0a\x52\x12\x56\x7c\xa9\x27\x62\xd7\x14\x72\x70\xaa\x2e\x39\xd3\xe2\x75\xd7\xe7\xea\xc2\xfb\x27\xed\x6a\x84\xa7\x08\x5c\xd9\x36\x88\x88\x81\x6e\x11\x84\x6b\x2b\x53\x30\xa0\x17\x33\x88\x7a\x9a\x4d\xf7\x97\x76\x4a\x2a\xbd\xd8\xb4\xaa\xf4\x0e\xa4\x25\x56\x06\x10\x40\x6b\x3c\x27\x08\x2b\x7f\x08\x15\x47\x84\xc9\x56\xd8\x7d\x43\xe3\xe1\x93\x25\x27\xd2\x17\xe6\xc6\x12\xfd\x70\xf1\x1a\xbd\x44\x87\x7a\x6c\x06\xbb\x37\xc3\xb4\x02\x06\x47\x87\x9a\x0d\x6d\x80\x19\xe4\x86\xf1\x14\x84\xd1\x85\x95\x23\x88\x0b\x73\xb5\x8c\x10\xe3\x48\xb6\xc5\xc2\xcd\x01\xe5\xcc\x7b\x84\x2d\x9d\x7f\x52\xd6\xeb\x20\x76\xf2\xdd\x87\x3f\x48\x12\x0d\x56\xcd\x79\x1d\xfe\xf0\x8c\xd7\x61\x68\x22\xea\xe3\xdf\x5f\x30\x73\x56\x6b\xa2\x70\x89\x15\xb6\xd7\xa4\xfb\xc2\xb0\x6b\x87\xcb\x32\xe1\xb2\x94\xe4\x1d\x65\xed\x83\x41\xba\xed\x45\xd8\xe3\xfa\x1c\x7a\x04\xc7\x0b\x16\x9a\x07\x71\x3b\x17\xa1\xc8\x90\x2c\x71\xd1\x3b\x46\xa3\x47\xac\x6e\xb8\x25\x1c\xdb\x98\x36\x84\x30\x2b\x79\xbd\xd6\x49\xa0\x43\x8b\x4d\x10\x44\xbd\xec\x8f\xe1\x60\xba\xe7\xdf\x3b\x20\x54\x91\x3b\x52\x65\xf3\xed\xbf\xd3\x6f\xd3\x93\xe3\x76\x2e\xbc\x1e\x55\x78\x4a\x2a\xcb\xc1\x66\x48\x34\x33\x9e\xb0\x4c\x3e\x70\xc1\x33\x42\x62\xae\xb8\x41\x72\x61\x3f\x11\xfa\xf5\x5f\xc4\x3c\x64\x05\x5f\xdc\x58\x74\x49\x37\x0f\xe0\x03\xfd\x12\xe6\xa1\x4d\x50\x10\xd1\xea\x3c\x68\x6d\xb3\x3f\x0f\xa0\x7f\xed\xfb\x3c\x48\x52\x14\xbc\x6e\xf6\x04\x29\x79\x63\x50\xf0\xba\x47\x9f\x8b\x8a\xec\x7f\x19\x27\xc1\x9d\x6d\x19\x04\xac\xcc\x3d\xe8\x6a\x21\xfc\xef\xe0\x3a\x07\x69\xb7\x7a\xc7\xdb\xd6\x93\x11\x99\xbe\x45\xfb\xc2\x7f\xc7\x1b\x6f\x80\x61\xf6\x9e\x67\x87\x61\x06\xf4\xac\x18\xdc\xf3\x3d\x48\xe4\xd7\x00\xc6\xd4\x46\x00\xcc\x2b\x61\x25\x65\x73\x08\x58\x8d\x6c\xee\xe8\x1d\x71\xe2\xf9\xd6\x78\xbc\x0e\x40\xe2\xb8\x0e\x39\x71\xd3\x61\x56\x0d\x6d\x6b\x56\xec\xe6\x26\xbc\xa6\xf9\xce\xe5\x87\x9b\x90\xb4\x15\xb3\xa5\x21\x24\x82\x3f\xd9\xf9\x75\xfa\xc5\x60\x3a\x57\x57\xf1\xa9\x21\x9d\x49\xef\xdb\x8c\xe8\x7c\xbe\x53\xfa\x79\x28\xcf\x55\x8c\x67\xd6\x2e\xac\x02\x3e\xd7\xdb\xc8\xb0\x72\xc9\x47\xc0\x5e\x9d\x7b\xe4\x00\xf9\xab\xe9\x91\xb3\xb2\x0b\x2d\x38\x14\x65\x73\x19\x3a\x41\x70\x95\xca\xf6\x62\x9e\x4d\x5e\x10\x77\x0a\x3c\x6f\xe9\xba\x37\xa0\x5f\xec\x2a\xa5\xf5\x4f\x78\x30\xbe\x6c\x4f\x44\xa5\x2d\x8a\x2f\xdc\x0f\x31\xaf\x25\x3e\x13\x7a\x06\x15\xc5\xd5\x75\x43\x8a\x7d\xb9\x2d\xde\xbc\xbf\x3e\xed\xf7\x0c\x74\x61\xcb\xd2\x4c\xe0\xf7\x08\x97\x35\x95\x12\x02\x3e\x64\xba\xe0\xfc\x36\xa9\xc9\x43\xc7\xdc\x37\xa7\x6a\xd1\x4e\x8f\x0b\x5e\x07\x24\x7e\x63\x49\xe7\xf2\xc4\x4a\x94\xb1\x9e\xb8\x23\x44\x59\xe5\x33\x85\xc1\x5b\xc8\x94\xb4\x11\x84\xe4\xc1\xa3\xc2\x8f\x1e\xb6\x1e\xe4\xa7\x78\x68\xf6\xfa\xf4\x00\x95\x36\x6c\xde\x9d\x6b\x1d\xeb\xbb\x2a\xad\x0c\xcd\xca\xce\x7a\x64\xec\x21\x2d\xb4\x8d\xe2\x6c\x9c\x47\x63\xbc\xee\x7c\x92\xac\xd2\x5f\x10\x99\x84\x80\xcd\x79\xe6\xde\x76\x5d\xea\x48\xd3\x80\xb9\x13\x3f\x9a\xe9\x0e\xe1\xed\x03\x28\xe5\x6b\xff\xf4\x20\x17\x93\xf9\x69\x55\xe9\x85\xc4\xfa\x9a\x38\x90\x21\xba\x13\x4c\x93\x05\xbe\x33\xa2\x40\xea\x15\x27\xb3\x19\x29\xc0\x58\x08\x47\x01\x17\x49\x9a\x50\x30\x0c\x64\x61\x79\x14\xc5\x4d\xdb\x18\xd5\xf4\x41\xf7\x30\x6c\x31\xc4\xa0\xb2\x12\x02\xff\x9b\x7f\x9d\x50\xd9\x10\x01\xf8\xc0\x13\x74\x8e\xf4\x0a\x85\x8d\xb8\xe4\x68\xa5\xaf\x2d\xfd\x8b\x4b\xa2\xb4\xa1\x66\xe6\x2d\x8c\x3e\x68\xc3\x4a\xb4\x19\x0e\x43\x4a\x64\x18\x85\xd1\xe1\xac\x92\x22\xf1\x3c\x40\xa4\xd8\xf6\x49\xeb\x20\x4e\x79\x7b\xae\xc8\x31\xda\x90\xbe\xf3\x6c\x11\x64\xf4\xf9\x51\xe4\x27\x8c\x55\xa1\x7d\x89\x57\x25\x4a\x7d\x5b\xd6\x1f\x0a\x8d\x26\x33\x9e\xc0\x5b\xb6\x28\xdb\x14\xd1\xde\x8e\x89\x3f\xc8\x43\xbc\x26\xda\x9b\xaa\xf3\x07\x52\xf8\x2d\x22\xe1\x1e\xab\x6b\xe0\x18\xe3\xd0\x48\xab\x7c\x21\xf3\xe4\x5b\x6b\x4f\x74\x7a\x3b\xc2\x7d\x11\xa2\x67\x76\xc2\xa9\x53\x93\xcd\x8f\x5a\x71\xee\x2f\x82\x74\xde\xf6\x80\x4a\x5c\xff\xa8\x6f\x2e\xca\xe6\x96\xcc\x84\x0b\xcf\xf0\x9b\xd4\x2d\xd7\x0f\xa8\x60\xc7\xb9\x42\x87\x07\x27\x07\x47\x6b\x7b\xe1\x40\x86\x78\x68\x93\xba\xd9\x0d\x48\xd2\xba\xa9\x96\x30\x86\x03\x53\xb4\x2e\x91\xf3\xcc\x21\xeb\x7c\x51\x18\xb9\x20\x55\x35\x42\x52\xdf\xd3\xd8\xf1\x71\x9b\x4f\xf5\x97\x94\x68\x0b\x63\xcf\x1f\x1e\xfc\x7a\x30\x42\x44\x15\x47\xe8\x9e\xb3\x03\x65\x3c\xb3\xe8\x06\x94\xdd\xa4\x3e\xf9\x4e\x2c\x79\x0b\x75\xd5\xcd\xb2\x79\x0a\xf7\x02\x6b\x3d\xad\x35\xca\x84\x61\x07\x20\x55\x42\x9d\x70\xfd\x9c\x3f\x50\xa5\x65\xa6\x6a\xc1\x9e\x7a\x69\x54\x1a\x02\x45\xe1\xb0\x36\xbd\xef\xc8\xc9\x82\xe0\x4a\x2d\x96\x5e\xcd\x32\x25\xab\x25\x6a\x99\xfd\x4d\xba\xb0\xdf\x83\xfc\xb6\xfd\xcd\x34\xb3\x95\xf3\x6f\x16\x82\xc8\x05\xaf\x76\x9e\x6f\xe6\xca\x29\x17\x9c\x49\x2d\x53\xb4\x2d\x60\xfb\x28\x7d\xaa\x8f\x2d\xe9\x6c\x28\xa2\x39\x9c\x32\x41\x0c\x6a\x55\x6f\x2d\x28\x00\xbd\xc0\x77\x5a\xde\xc8\xb6\x28\x08\x29\x53\x74\xa8\x50\x79\xfb\x7d\xce\x82\xcf\xbb\xaf\xad\xac\x9f\xb9\x68\xf2\xdc\xd2\x6f\xae\x26\x67\xbd\x5b\x1a\x3e\x78\x0b\xc7\xf8\x6c\x41\x8a\xdb\xab\xb4\x1a\x47\x7b\x12\x03\x6d\xb8\xd8\xa5\x62\xa0\x9b\xcf\xa6\x15\x4c\xb8\x50\x88\xf9\x12\xea\xfa\x6c\xcd\x61\x15\x89\xb8\xa3\x05\x39\x76\xe5\xd5\x5d\x14\xd1\xd5\xe4\xc2\x6c\x4e\xd0\x2b\x7d\x20\xfe\xf8\xed\xb7\xbf\xff\x36\x5d\x46\xa7\x73\x2f\xe6\xe1\x5d\xb4\x03\xdf\x17\xb5\xeb\xda\x74\x67\x93\x57\xcc\xf6\x54\xaf\x41\x53\xe1\xc2\xaf\xcd\x7c\xf3\xa1\x4b\x73\x9f\x48\x42\xd0\x06\xbf\xaa\x16\x1d\xe6\x3f\xd3\x8a\x4f\x4f\x6a\x2c\x15\x11\x27\x25\x2f\xec\xb5\x3e\x06\x86\x52\xca\xe6\xc7\x75\x79\x94\x50\x74\x13\xd9\xac\x89\x05\x95\xce\x8d\xb3\x12\x10\x71\x51\x32\x5f\x0e\x82\x4a\x1f\xca\x9b\x2e\x61\x52\x76\xee\x2b\x44\xae\x97\xdf\xa1\x17\x2f\xa2\xde\xa2\x97\xe0\x0d\xc9\x93\x32\xf3\xf6\xe6\x66\xf2\x86\xa8\x50\x60\x33\xf8\x10\xbd\x39\xbf\xf1\x45\xf8\xf4\xee\x32\xd9\x17\x83\xd4\x4e\x91\xda\x0b\x9e\x56\x85\x31\xb7\x83\xd8\x88\x12\xc5\xb5\xfa\xc4\x48\xa1\x17\x7a\xd4\xab\xf7\xe4\x00\x53\x17\x13\x53\x0e\x43\xab\x5c\x78\x5a\x2d\xd1\x3d\x36\xa9\xd7\x71\x2c\xb4\xdd\xf3\x42\x77\xe3\x85\x96\x5a\x7a\x57\xbf\x25\xb8\x24\x42\x82\x35\x44\xf0\xee\x83\x1f\x41\x9f\xb2\x2d\xdb\x59\x2b\x15\xaf\xd1\xc2\x0e\xd5\xcc\x61\x57\xe6\xd2\xe8\x46\xe6\x08\x82\x33\x48\x22\x41\x1a\x63\x2d\xd9\xbf\xf9\x2a\x6c\xa1\x35\x29\x64\xe6\x39\x28\x20\x82\x51\x11\x4e\x95\x55\xf4\xa1\xfa\x34\xb5\x32\x0a\x2c\x80\x34\x2b\x3d\x4b\x21\x02\x94\xa9\x18\x01\x4a\xaf\x2d\xec\x5e\x92\x1e\x2d\xc9\x53\xd6\x00\x65\xa9\x54\x8c\xb2\x93\xaa\x23\x1b\x13\xb0\x9b\xcb\x20\x05\x74\x47\x53\xe9\xd3\x90\x23\x59\x70\xc8\x8b\x02\x33\xce\x68\x81\x2b\xfa\x2f\x52\xa2\xb6\xe1\x0c\xf1\x56\x35\xad\x02\x57\x50\x81\x25\x19\xdf\x61\x41\xb5\x40\x35\xf5\xdc\x3d\x64\x83\xe9\xd3\xae\x38\x07\x3f\x89\x8f\x8e\x99\x1e\xa7\x77\x33\x93\x36\x83\x1c\x67\x7e\xe6\x15\x5e\x5b\x9c\xf4\x1d\x8d\xf6\xda\x07\x83\x4c\x65\xbd\x45\x3e\xb3\x0e\xab\x05\x40\x90\x0a\x88\x24\x5a\x04\x1b\x08\x4e\x6d\x36\xec\x41\x86\x40\x56\x2b\x36\x51\x24\x40\x60\x90\x8b\x15\x3b\x58\xf7\x70\x7d\x0e\x33\x05\xc5\x9f\xde\xac\x0e\xab\xb2\x4f\x89\xd6\xed\x2f\x4e\x2f\x4f\x7f\xb9\xfe\xf1\xec\x97\xcb\xd3\xf7\xe7\x29\xaf\x4e\xae\xa8\x98\xb3\xa6\x62\xb6\xaa\x8a\x4f\x54\x73\x56\x3f\xb2\x58\x90\xfd\x89\x87\x5f\x43\x6f\x42\xf6\x24\x6b\x03\x50\x36\x77\x9a\x7f\x1a\x9d\x16\x5a\x71\x9a\x6a\xc1\xb3\x53\x89\x43\x19\x55\x14\x57\xaf\x49\x85\x97\xd7\xa4\xe0\xac\xdc\x39\x8c\xf4\xd2\x0b\x1b\x69\x3a\x64\xdd\xd6\x7d\xf0\xc1\x02\x4b\xe4\xaa\x13\x4e\xc9\x8c\x0b\x02\x51\x13\xa6\x25\x52\xd3\xc5\x8f\xcd\xf8\xd4\x33\x96\x05\xbf\xe7\xe2\xb6\xe2\xb8\x94\x27\x0d\x37\xff\x19\x57\x74\x46\x8a\x65\x51\x91\xdf\xf8\xfe\x8f\x93\xd4\xf4\xfd\x70\x8f\x37\x44\x50\x80\x2e\xec\xc3\xae\x79\xcb\xef\x11\x9f\x29\xc2\xd0\x21\x65\x6e\xe7\x1c\x05\x5e\x9a\x2e\x3c\x92\x4e\xfb\xa4\x38\x7a\xf5\xd2\x35\xf2\xf5\xc5\x3d\x20\x32\x24\xe5\x5e\x47\xbe\x6c\x1f\x3f\x1d\xfa\xb2\x5f\x9c\xb5\x55\x3f\xfc\x65\x42\x62\x79\x62\x5f\xaf\x8e\x7d\x42\xcd\x2b\xe8\x8f\x17\x45\x98\x95\x0e\x1b\xf3\xf5\xed\x13\x55\x34\xd7\xbc\xb8\xcd\xe4\x76\xbd\x39\x9b\x98\xb7\xad\xe0\x59\xcc\x0d\xac\xb5\x4c\x8e\xb0\xfe\x16\x28\xa0\x83\xd3\x75\x6f\x9c\xae\x07\x5d\xa9\xa9\x6d\x1d\xa8\x07\x83\xb5\xd5\x3d\x4e\xf1\x11\xfd\x52\x0d\x83\xb5\xf5\xc8\x33\x58\x5b\x5b\x3c\x06\xed\x0e\x99\xa3\x6f\x04\x2e\xc8\x64\x9f\x94\x37\x27\x40\x50\xd9\x0a\x5b\xff\xca\xeb\x70\x5e\x5c\x30\x42\x4a\x23\x3f\xec\x50\x08\x9a\xeb\x91\xcc\xda\xaa\x5a\x1a\x1f\xa2\x51\x01\x2c\x28\x26\x8d\xeb\x16\x5e\x6d\x55\x5c\x17\x64\xde\xd4\xbb\xce\x36\x69\x3c\x6b\xb3\x2b\x6f\x60\x8f\x93\xee\x3c\x54\x67\x26\x2c\xde\x9d\x8e\xc3\x15\x44\x92\xce\xf5\x74\xd9\x62\xb2\xc8\xb0\xfd\xb8\x1a\x61\x5d\x47\x74\xab\x33\x2e\x0a\x3a\xad\x96\x68\x81\x2b\x6d\x2c\xdd\x53\xb5\x40\x18\xdd\xd2\xaa\xb2\xaf\x89\x9f\xa8\x6b\x57\x02\xde\x68\x34\x15\x67\x73\x98\x0c\x6c\xc1\xe3\x0f\x0d\x29\x74\x9b\x45\x45\x30\x6b\x1b\xd3\x4f\xad\x1f\x2d\x79\x9b\x01\x3f\xee\x02\xdf\x5e\x9f\x62\xd4\xf2\x24\x98\x0a\x53\x1f\xdd\xf3\xfd\x2c\x40\xf4\x41\x2d\x88\xb8\xa7\x92\x98\x8a\x57\xd1\x7d\x32\x7d\xe9\xd7\xbb\x32\x9f\x79\xae\x07\x9b\xe2\xa4\xb7\x05\xe4\xdc\x45\xb7\xf5\x23\xbc\xd7\x89\x56\xc6\xd9\x98\x91\xb9\xc9\x28\xb7\x02\xcd\x20\x3a\x4d\xfb\x06\x3f\xe8\xf3\x93\xa5\xe2\x0d\xa2\x75\x4d\x4a\x6d\x1f\x57\x4b\x74\x47\x71\x74\x4f\x20\x7b\xbd\xdb\x51\xe8\x90\x71\xc4\x1b\x7d\x75\xb5\x8c\xaa\x25\x44\xf4\x16\xad\x42\x25\xbf\x67\x09\x89\x21\x37\x16\xe6\x80\xd1\x94\x28\x6c\x7d\xe0\xfa\x10\x78\xf2\x66\xe0\x65\xd6\x67\x0f\x30\xe4\x37\x1b\x37\x80\xe7\x73\x9e\x63\x95\x20\x25\x36\x68\xf3\x66\x3d\x3f\xbe\xed\xa8\xb4\xf1\xba\x44\xc2\xd8\xfd\xa0\x60\xd3\x27\x9a\xb7\x6a\x4f\xee\x91\xc7\x5c\x47\x26\x17\x3f\x30\x12\x69\x4d\x24\xe2\x6d\x26\x62\xfc\x57\xb6\xb9\x9c\x16\xde\xe0\x77\xda\xf8\x48\x55\xd2\xa8\xf2\xa8\x39\xb6\xd8\x23\x2c\xe3\x36\x61\x30\x20\xda\x9b\xb6\xb3\x19\x11\x70\xd3\x41\x87\xd7\x60\xf7\xbe\xe0\x90\xbb\xc3\xe2\x9c\xb7\x16\xf0\x45\xd4\x08\x48\xce\x6d\xd6\xfb\x23\x4d\x5a\x36\x40\xa8\x27\x2a\x88\x04\xd2\x6a\x86\xce\x3f\x7c\x1f\xb7\x45\x73\x50\xa0\xa7\xe5\xd6\xc1\x38\x3f\xb0\x38\x4c\x62\xde\xfd\xb0\x89\x9e\xc2\x6e\x8b\xa2\xe2\xd2\xe6\x71\xc2\xba\x14\x0b\xcc\x18\x71\xce\x28\xaa\xc0\x93\x3d\x25\x84\x21\xde\x10\x03\xca\x8b\xea\x0c\x46\x92\xb2\x79\x45\x10\x56\x0a\x17\x8b\x63\xdd\x3b\xe6\xf6\x42\x97\x30\x69\x3f\x91\x4a\x10\x5c\x9b\x3d\x21\x48\x8d\xa9\x69\x1e\xe1\x42\x70\x29\x51\xdd\x56\x8a\x36\xfe\x65\x71\x5e\x44\x02\xa9\xeb\xd2\xe4\xcf\xb9\xb5\x82\xb4\x92\x2e\x33\x73\xd4\xf5\xd0\x0e\x9f\x87\x55\x55\xc0\x75\x36\xd2\xbf\x25\x75\xa3\x96\x48\x4f\x6d\x15\x9d\x1b\x33\xa3\x42\x2a\x54\x54\x94\x30\x65\x47\x66\xb8\xd1\xa0\x0f\x23\xa7\x4e\x33\x3b\x23\xd2\x4e\x09\x2b\xc1\xf8\x6e\x94\x44\x90\x81\xe8\x3b\xe1\x5e\x55\x52\x69\x7d\x1d\x72\x14\xb7\x76\xae\x84\x86\xd9\x38\x6e\x46\x60\xeb\x38\x05\xc7\xf4\xc8\x7e\x14\x74\x21\x28\x08\xac\x8f\xb5\x09\x89\xa4\xc9\x15\xa8\x73\xe1\xce\xf5\xa8\x97\x1c\xdd\xd9\x16\x90\x0a\xb3\x26\x75\x60\x43\x31\x72\xa7\xcf\x01\x29\x88\x56\x45\x71\x46\x21\xf3\xec\x32\x46\x61\x31\x27\xea\xcc\x8d\x3f\x36\x7b\x37\x87\xb4\x09\x2b\xa7\x87\x0e\xa2\x6e\x71\x60\x1d\x26\xbc\x04\x36\x89\x8e\xf1\x63\x53\x39\x77\x33\xae\x48\xdb\xeb\xe6\x91\x1a\xf1\xce\xa2\x32\x19\x5e\xbe\xa3\xb2\xc1\x05\x91\xe8\xf0\x62\x72\x36\x42\x93\x8b\xd7\x36\x8d\x8b\xcf\x56\xd9\xf5\x62\xa7\xc5\x5e\x82\xe6\xec\x3e\x56\xc0\xde\x57\xa7\x09\xba\x14\xd0\x6c\xd9\xfe\x4e\xbc\x51\x16\x3d\x33\xeb\x37\x01\x58\x68\xb4\x6e\x2a\xa8\x13\x89\x64\x0b\x96\x91\x0d\x5c\xe8\xad\x6d\xec\x11\x7b\x68\x49\x47\x70\x64\xc9\xe8\x23\x83\x38\xa6\x15\x3f\x5c\xbb\xe6\x10\xcb\x76\x13\x65\xf5\x00\x50\x98\x95\xfd\x95\xe7\x88\x81\x5c\x33\x0b\x15\x8f\xbf\xdd\x23\xdd\x61\x81\x11\xf5\x9e\x48\x89\xe7\x64\x12\x89\x03\xca\x71\xf6\x3a\x0f\x37\x00\x88\x3a\x79\xbd\x20\x86\x0a\x4b\xf1\xe0\x93\x30\xbb\x32\xf4\xda\xd4\x66\x20\x51\x3d\x70\x67\xeb\x5e\x50\xa5\x08\x5c\x0f\x50\xeb\x09\xb6\xee\x2a\xbd\x67\x3f\xab\x33\xaa\x3d\x3b\xe9\x61\x7b\x5a\xef\x67\xa5\xc9\x8f\x9c\x12\x34\x15\x94\xcc\xd0\x8c\x42\xc2\x26\xa4\x32\x8e\x4c\x9d\x02\x0c\x80\x79\x2c\x25\x11\x30\x6c\xeb\x8f\x73\xc3\x8f\xeb\xcf\x5f\xed\xf8\x95\x68\x59\x81\x83\x22\x9e\xc0\x3e\x46\x67\x68\x0e\xe9\x93\xd6\xfb\xf4\x87\x97\xff\xf9\x47\x34\x5d\x6a\x43\x09\xce\xa4\xe2\x0a\x57\xae\x03\xa8\x22\x6c\xae\x57\x11\x74\x9d\xb8\x0b\xbb\xc7\x60\xe5\x17\xa7\xa2\x35\x55\x66\x82\x5e\x7d\x73\x3b\x4d\xba\xf3\x40\x31\x39\x29\xc9\xdd\x49\xb0\x85\xc6\x15\x9f\xc7\xbd\xf5\xcc\x13\x3e\xb5\x4d\x19\x0b\x88\xc8\x7d\xa2\x79\x45\x8b\xe5\xce\xee\x53\xeb\x0a\x43\x0b\x7e\x6f\xbc\xa8\xeb\x47\x35\x20\x83\x69\x78\xd3\x56\x30\x71\xe8\x7b\xcf\xe0\xd7\x4a\xb2\x4a\x8e\x94\xea\x9d\x0f\xa4\x1d\xa0\x17\x6c\xb3\x2b\x57\xbd\xcd\x1d\x76\xdd\xe4\x96\x9a\xc2\x06\xbb\x7d\xa5\x92\x68\x37\xf8\xf7\xb8\xaa\xa6\xb8\xb8\xbd\xe1\xef\xf8\x5c\x7e\x60\xe7\x42\x70\xd1\x1f\x73\x85\xb5\x32\xbd\x68\xd9\x2d\xd4\xd9\xed\xe8\x6a\xf9\xdc\x82\x79\x81\x59\xb2\x3f\xb1\x51\x9d\x71\xa3\x34\x04\xa2\xce\x16\x70\xce\xef\xae\x65\xf2\x40\x3b\x0f\x37\x43\x44\xf7\x39\x5e\xc3\x09\xc7\x21\xc3\xa3\xfd\xcd\xcb\x3f\xfc\xc9\x08\x17\xc4\x05\xfa\xd3\x4b\xc8\xf5\x97\x23\x73\x01\x80\xea\xab\x6d\x9c\x1a\x57\x55\xac\x4e\x13\x8a\x80\xef\xa3\xcb\x57\xef\xc1\x91\x57\x3b\x3b\xdd\x9f\xed\xab\xb9\xb9\xf9\x1b\x68\x62\x54\x49\x52\xcd\x46\x86\x0f\xc6\xfb\x93\x0f\xc0\xac\x39\xb0\x57\x5e\x3c\x97\xd0\xee\xbd\x25\x77\xbc\x6a\x6b\xf2\x9a\xdc\xd1\x22\x0e\x39\xd0\x5b\x95\xde\xdb\x5c\x7c\xac\xa2\x12\x74\xc9\x69\xc5\x8b\x5b\x54\xda\x5f\x06\x39\x2a\xab\x75\xb7\xe3\x67\x21\x36\x5b\x27\x21\x4b\xe7\xd1\xf1\xf7\xf2\x73\x6a\xdc\x34\x5a\x8f\x06\x62\x2f\x81\xef\x7b\x93\x01\xa2\x09\xf8\x53\x13\x8d\x9e\x64\x14\x4b\x2a\x86\x65\x6c\x47\xa4\xaf\xa9\xe8\x57\x44\x27\xf5\xa4\x43\x60\xba\xde\xc7\x03\x08\x7a\x1b\xa2\x7b\xa1\x3b\x0d\x0d\xfc\xdb\x10\x9d\xac\x99\xea\xbe\xa2\x9a\xdf\x18\x46\x83\xd4\xdb\x07\x6e\x99\xf8\xb8\x41\x06\x14\x42\x5a\x72\x52\x6f\x5e\x98\x47\x7f\xd4\x58\x59\xfb\xc8\x79\x2f\x30\x6a\x88\x90\x54\x6a\xd5\xe9\x47\x38\x50\x67\x15\xa6\x75\x10\x37\xdf\xd5\x24\xac\xa7\xb2\xd4\xb8\x19\xdf\x92\x65\xe4\x86\x4b\x3c\x2e\x8f\x65\xd6\xd4\xb8\x89\xbc\x07\xa0\xb8\x6d\xfa\x35\x10\x79\x39\x4f\x78\x69\xfb\x01\xd7\x83\x29\x5a\xfc\x29\x33\x16\x5d\xb7\x53\x38\x53\xf0\xf5\xa7\xa5\x07\xcb\xaa\x3c\xed\xfa\xae\xfa\xb1\x5b\xf1\xfe\x55\xa5\x3f\xf1\x77\x95\xf9\xd6\xd7\x74\x43\xc1\xf8\xbe\xd4\x0b\xca\x77\x3e\x93\x1c\x4e\xc2\x26\xc2\xb5\x66\x77\x46\xff\x1e\xeb\x79\xc2\xcc\x91\x0e\x6c\x66\xeb\xa1\x3a\x36\xf5\x06\x12\x3a\xa0\x8f\xa2\x6d\x14\x1d\x7c\x77\xb0\xd3\xcb\xd1\xac\x8c\xe0\x0d\x9e\x83\x49\xbb\x0f\x0b\xb4\xda\xa7\x90\xde\x76\xc1\xef\x43\x91\xd9\xd8\x6f\x69\x89\xe9\x38\xd2\x17\x3c\x69\x75\x0c\xd6\xd7\xed\x08\x6b\x96\x9b\x2a\x11\xf7\x78\x89\xb0\xe0\x2d\x4b\x22\x2e\x80\x50\xa6\x0f\x75\xbf\x5f\x19\xec\x25\x67\xc4\xc1\x6a\x52\x5a\xb9\xe9\xb9\xbe\x01\x61\x44\x19\x7a\x75\xfc\xea\x65\x72\xdf\xaf\x48\xd1\x0a\x49\xef\xc8\x95\x2d\x9f\x1e\x84\x41\x2f\x66\x13\x2e\x25\x9d\x56\x90\x6a\xa9\x38\x3a\x37\xb5\xe5\xd7\x07\xea\xa1\x5e\x30\x62\x2e\x42\x22\xd4\x84\x1e\x1e\x9a\x13\x1c\x42\xb4\x75\x03\x09\x38\xad\xfd\x52\x41\x61\x5d\x57\x54\xd0\x4b\xaf\x82\x9a\x7b\x6f\xa7\x63\x75\x35\xf5\xf7\x41\x92\xbc\xb7\x41\x85\xae\x68\x3e\x75\x45\x99\xe1\xa3\x7b\x41\x95\x3d\xdc\xf7\x54\x12\x74\x08\xee\x8c\x95\xcd\x98\xc4\xfd\x1c\x3a\xbf\x12\x8b\xeb\xe7\xe0\x6e\x16\xab\x47\x77\x1f\x56\x69\x5d\x9e\x74\x39\x33\xf7\xd6\xf3\xd5\xad\xa0\x95\xfe\xdd\xbd\xbc\xc0\xac\xac\x92\x64\x86\x9f\x95\x6a\x99\xc4\x5e\x75\x31\x43\xa1\x48\xb4\x88\x83\x20\x08\xb9\xc0\x12\x31\x8e\x6a\x82\x01\x52\xad\x6f\x17\x27\x05\x7b\x34\xd0\xf9\xfa\x60\x36\xbb\xb9\xc6\xc2\x0b\xc1\x8a\xeb\xd7\x54\x5a\xf1\xac\xe5\x88\x35\x5d\x0c\x10\xab\xc6\x65\x0a\x19\x43\x30\xa7\xdd\xe2\x1d\x77\x30\xe7\xd5\x9e\x74\x17\xc7\x4a\x5f\x9e\xa2\x1f\x23\x5b\xdd\x5c\x37\x6f\x22\xcb\x1b\xfc\x79\x1d\xac\x2d\x09\x7f\x62\x9e\xd5\xe1\xfa\x6b\x71\x6d\xac\x9b\x7b\xec\x3b\x9c\xd0\x87\x4f\x0f\x75\x14\xc8\x42\x87\xea\x36\x20\x18\x5b\x5e\xc5\xe6\x28\xa7\x91\x84\xbb\x68\x86\xf7\x13\xcd\x09\x23\x02\xdb\x80\x84\x03\x75\xdb\x90\x3e\x96\x9c\xa5\x1e\x88\x4f\x6c\x38\x2d\xef\x3f\xad\xa6\x98\x3f\x4b\xe8\x08\xe8\x39\x87\x5c\xac\x9c\x76\x1b\x6a\xd9\xa4\xb1\xe4\x1c\xf5\x0a\x99\x9e\xd9\xfc\x01\x4b\xaf\x5e\x94\x7f\xb6\xf4\x0e\x57\xc4\xd0\xe3\x3b\xd1\xb0\x53\x65\x42\xb6\xd3\x7d\x35\x1b\xad\x7d\x08\x66\xc7\x66\xb4\xc4\xa3\x16\x64\x26\x7d\xe2\xc5\x0b\x74\x68\xda\x38\x30\xb4\xd8\xbb\x55\x72\xed\x5a\x9d\x3f\x34\x09\x45\x61\xf3\xad\xd7\xf9\x43\x83\x01\xe0\xd1\xec\xc5\xc2\xfd\x37\x59\xe0\x3b\x02\x2c\xe4\xb4\xc2\xa2\x82\x34\x92\x6b\x33\x65\x68\xda\x2a\x44\xd8\x1d\x15\x9c\x01\xa8\x0a\xe8\xa2\xb4\x64\x12\x64\x46\x04\x61\x05\x91\xe8\xb7\x87\x3f\x9e\x5e\x41\x9a\xe1\x11\x98\xbe\xc4\x8d\xaf\x95\x16\x05\xd5\x1b\x43\xf0\xba\x7d\xdc\x6f\xc8\x8d\x5d\x6f\x17\xd0\x4f\xdc\x5c\xe8\xb1\xd5\xad\x6a\x71\x05\x64\xed\x45\xd5\xea\xbb\x70\x67\x3b\x3b\xbf\xf3\x3c\xc5\x93\x97\xd3\x77\x6e\xa9\xfa\x5f\xd3\xa8\xe3\x9a\xe3\xa0\x9e\x05\xfb\x75\xad\x70\x40\x1a\x80\xb2\x4f\x1b\xbb\xa6\xe8\x1c\x48\x4f\x25\x1b\x66\xce\xd9\xbb\x38\x0e\xd7\x41\xe7\x0b\x65\xe9\x1a\x56\x70\x98\x01\xac\xb9\x8e\xc6\x8c\xed\x16\x00\x91\xef\x18\x44\x38\xa2\xf3\xec\xfa\x05\x97\xea\xb4\xa2\x58\x6e\xeb\xc7\x4e\xdb\xea\x6f\xbb\x66\x21\xdb\x8f\xd9\xaa\x8e\xb8\xf2\x10\x03\xdd\x33\x03\x73\xba\x98\x58\x2c\xba\xdb\x95\x94\xfd\x5f\x93\x75\xea\x03\x4a\x26\x1b\x14\xfe\x64\xcb\x9e\x18\xc4\xd1\x0c\x45\xd6\x1b\x8a\x8d\xff\x44\x45\x7e\x52\xc5\x8b\x9f\x75\xb4\xe0\x95\xcd\xbb\x76\x68\x86\x29\x51\xf7\x84\x30\x74\x31\x81\x39\xd7\x53\x69\x78\x19\x37\xcf\xbc\x55\x8e\x99\x12\x4b\x7b\xa0\xb7\xee\x4d\xb0\x66\xb0\x0a\xdb\x1e\xdd\x84\xf8\x53\x7c\xe4\x69\x8c\xe8\xb6\x97\x4a\x4a\xa4\xc8\x2f\x43\xf2\x6d\xf4\xd6\x2f\xa8\x63\xd3\xc1\x53\x7e\x47\x60\xbd\xcb\x52\x44\x66\x69\xef\x2c\xfc\x99\x5d\x81\x49\x22\xb2\xa4\x4d\xf2\xfa\x74\xeb\xe0\xa0\x24\x50\x9e\x19\xc4\x13\x1c\xb3\x67\x87\xf6\xc5\x53\xb6\xe7\xbc\x17\xb7\x3c\x6e\xf9\x6e\xc5\x8b\xc9\xd9\x73\xde\x88\x3f\x58\xef\x92\x6e\xfa\x40\x22\xda\x14\x5d\x5e\xc7\xb6\x4b\xdf\xe5\x32\x04\x74\x66\x11\x8e\xf6\x58\xe7\xfa\xa2\x2b\xd8\xf8\xdc\x4a\x05\x62\xa6\x5d\x7d\xa5\x59\x5a\x71\x0b\x1c\x01\xcf\x4f\xc3\xcb\xe3\xd5\xa9\xb6\x7f\x11\x3f\xdd\x10\xff\x33\x06\x67\x58\xaa\x72\xc9\x5b\x67\x2d\x1b\xe5\x62\x09\x4c\x3f\x12\x4a\x61\x2d\x08\x30\x63\x96\x6d\x65\xc0\xc4\xf8\x1e\x6f\x0f\xe4\x86\x86\xff\x11\xcc\xf6\x3f\x3a\xef\x76\x57\x54\x10\xbe\x30\xe1\x42\xfd\xc3\x38\xbe\xa4\xbe\xb0\x21\x71\x08\x32\x7f\xa8\xa9\xbe\x15\x44\xcf\xfe\xe1\x55\x73\xf8\xab\x6d\x13\x1e\xb5\xfa\x10\xb8\xf2\x3e\xb3\x7d\x6d\xe1\x5a\x79\x63\x5c\x9e\x1b\xfb\xb2\xed\x0c\xed\x6e\xff\x4f\x2e\x5e\xef\x50\x7c\x34\xb4\xfc\xb2\xc5\xc7\x0f\x72\xeb\xea\x03\x59\x27\x10\x8a\x94\xe6\x9d\xc1\x18\x68\xb9\xad\x4b\x6a\xff\x1a\x88\xc3\xb8\x42\x8d\x20\x92\x30\x35\xea\x87\x23\xfa\x69\x99\xa0\x3d\xf4\x47\x31\xd2\x3f\xcf\xda\x6a\x5b\x0b\x89\x8b\x80\x79\xc8\xd3\x34\x61\x4f\xb2\x02\xa1\x18\x7c\x87\x69\x05\xee\xb9\x80\x46\x77\xad\x03\x36\x7b\x6c\xcb\x1e\x54\x1c\x97\x10\x1a\x44\xb7\xfa\x6a\xaf\x50\xcd\xb5\xe0\x34\x69\x20\x67\xa7\x93\x5f\xae\xff\x76\xfd\xcb\xfb\x0f\xaf\x7f\x78\xb7\x35\xdb\x98\x49\xa1\x27\xdd\x16\x1f\x21\x8c\x18\xb9\x87\x9e\x33\x30\x4e\x0b\x1b\x0f\xf0\x2c\x94\xfa\x0e\xb9\xb6\xc9\x94\x26\x36\x6e\xa0\x29\xb3\xb6\xd2\x5f\xda\xb2\x07\x35\x55\x74\x8e\xe1\x65\x9d\x4b\x64\x2a\x08\xbe\xe5\xad\x42\x77\x6d\xc5\x88\xc0\x53\x5a\x51\x6d\x41\x20\x72\x47\x98\xc1\x43\xea\x3f\xd0\x9d\x0c\x8b\xf9\xd2\x6d\x1b\x0f\x6b\x3d\xdb\x2a\x92\x7a\x52\x75\xcb\xb8\xb0\xee\x46\xcb\xa6\x09\xbf\x6c\x04\xbd\xa3\x15\x99\x13\x4f\x53\x17\xc3\x96\xdc\x87\xe1\xe0\xaa\x59\xe0\x71\x45\xee\x88\xa1\xbb\xa2\xd2\xec\xa8\x05\x67\x5c\x98\xb8\x9c\x21\x6e\xb7\xb6\x28\x10\x00\x99\xc3\xea\x4a\x1b\x9b\x64\xdf\x6b\x97\x75\x6b\x93\x6d\x9f\x4d\x58\x6d\x8f\x64\x49\x93\x55\xd7\x1e\x09\xe0\x56\x20\xcc\x16\x9f\x6c\x0d\xaa\xde\xec\x1f\xec\xec\x73\x78\xbb\x93\x31\xf6\xb0\x60\x64\x40\xbb\x63\x57\x69\x0a\x08\x71\x62\xe6\x7c\x6b\xf3\xc4\x75\xe9\x83\xa5\xe0\x7a\x6e\x1d\x33\x6c\xbb\x5f\x42\xca\xd5\x14\xf5\xec\x60\xa1\xd0\x08\x27\x13\x4b\xd4\x10\x01\xec\x09\x21\x5b\x58\xc2\x41\xe2\x7d\x88\xc8\xa6\x36\x59\xe9\xf3\xcd\x11\x86\x62\xf3\x88\x2a\x89\x5e\x5f\x5e\x23\x41\x0a\x2e\xca\xad\x5d\x00\x7f\x35\xd7\xc2\x86\x40\x32\x06\xb2\x32\x93\xc6\x67\x99\x0d\xb7\x36\xfd\x2e\xd6\xab\x5f\xc3\xc4\x76\x8c\x6b\xd2\x55\x11\xfa\x87\x1b\xe5\x3f\x60\x98\xff\x90\xed\xb4\xe4\x35\xa6\x6c\x6b\x8d\x71\x0c\x99\x81\x93\x8f\xee\xfd\x8e\x92\x6e\xfb\xb7\xff\x43\x12\xe5\x36\xd1\xa9\xfc\xfe\xff\x7b\x7d\xf9\x8f\x8e\xdf\x8d\x56\xfa\x8a\x0f\xaf\xa3\x88\x06\x7a\xf6\x40\x3f\x50\xef\xde\x19\xbf\xcd\x3c\xcb\xa7\x1e\x3f\x2d\x61\xf3\xf8\xc9\xd6\xdb\xda\x89\x03\xca\xd0\xd5\xf7\x67\xe8\xd5\xab\x6f\x7e\x0f\x4b\xe2\xb0\xbd\x58\xa1\x5a\x6b\x06\x7f\xfc\x03\x2a\x16\x58\xe0\x42\x45\x00\xf8\xaf\x5c\xf2\x1e\x94\xf6\x58\x3d\x92\x21\xf9\x9b\xcd\x4d\x33\x77\x46\x94\x6f\x77\x6b\xf1\x04\xe1\x8c\x49\x5b\x55\xd7\xa4\x10\x64\xdb\x14\x8c\x34\xf1\x74\xb1\xd2\xf6\x63\xce\xf5\x20\x84\x0a\xa5\xb8\xec\x97\x59\x57\x6f\x27\x20\x95\xe8\x8a\x25\x34\x6d\x55\x19\x8c\xd6\xd2\xdd\x36\x30\x5a\x19\x24\xff\x51\xe9\x08\x4a\x62\x94\xdd\xde\x15\x24\x89\xef\x9a\x3b\x81\x0d\x96\xb2\x83\xc4\xdc\xd1\xb2\xc5\x15\x74\x0b\xe2\x48\x96\x7f\x03\x1b\x93\xd2\xca\xde\xda\x8e\x60\xdb\xee\x6c\xc9\xce\xd6\xa9\x52\x27\x66\x4e\x7e\x63\xad\x7e\xca\xe6\x63\xf8\x44\x77\xd3\x8e\x67\xcc\xd9\x18\x8f\xb7\x4d\x7f\xfa\xa2\x82\x0d\xef\x78\x81\xab\x0f\xe0\x9d\xbf\x72\xbb\xcd\x49\x01\x89\x08\xe3\xed\x7c\x01\xd3\x2b\x6a\xec\xc8\xbf\x2b\xa2\xc0\x6d\x62\x53\x77\x63\xa2\x0a\x7e\x67\x97\x36\x34\x10\xd6\x65\xef\xef\xec\x67\x0c\x38\xa4\xc4\x00\x62\x71\xd2\x39\x82\xd1\x97\x81\x5e\x69\x67\x36\x12\x39\xd1\xd7\xf9\x09\xa8\x1f\x0e\xce\x67\x82\x31\x23\x40\x7c\x94\xad\x91\xd9\xb8\xb8\xbd\xc7\xa2\x94\xa8\xe0\x75\x83\x15\x05\x0b\x68\x19\x8b\xf5\x73\x19\x64\xf6\x36\xd0\x6a\xc9\x31\xba\x60\x52\x61\x90\x81\x8e\xa8\x48\xaf\x70\x47\x2e\x00\xca\x8b\xe1\x79\x5c\x10\x41\x10\x16\x71\x98\x4b\x5c\xc1\x8d\x57\x10\xa1\xf7\x7e\xb5\x44\xf7\x82\xb3\x48\x92\x8f\x2d\x85\x92\x56\x97\xee\x28\xb9\x3f\xb1\x3e\xd1\xb1\x1e\xdc\xd8\x6c\x61\x79\x02\x27\xe1\xe4\x37\xf0\x7f\x5f\x4e\x74\x61\xc5\xc9\x5f\xe3\x26\x3e\x78\xf3\x15\x44\xf0\x29\xa3\x1d\x7b\xd9\xb3\x2a\x1b\xef\xac\x32\x61\x2b\x0c\xd1\x7f\x19\x39\x1e\xf8\x14\xa6\xa4\xe2\x6c\x1e\xd4\x56\x8a\xb0\x71\x2e\x18\x55\x3d\x3f\x05\xc0\xbc\x48\xd1\x1a\x00\x00\xe2\xa2\x04\xd6\x3a\x6a\x52\x6b\x7a\xad\x43\x11\xfc\x80\x2f\x0f\xb3\x6d\xc3\x94\xb4\xd7\x3a\x30\xae\xc8\xce\xef\x66\x88\x27\x5c\x1d\x12\xc5\xd1\x02\xdb\x92\xfd\x96\xd4\x8f\x4a\x87\xc4\x47\xb8\xd0\x26\xd6\xf6\x47\x45\xab\x3a\xca\x13\xff\x19\x42\x1d\x43\x79\x04\xa6\x89\x56\x72\x30\x5b\xed\x27\x38\x0a\x45\xdd\xa3\x47\xb3\xaa\xfb\x96\xcd\xb7\x8c\xfe\xb3\x25\x08\xd7\x5c\xeb\x7d\x55\x4a\xda\xed\xea\x4a\xd6\x78\x09\xb6\x28\x4c\xda\x3b\xc7\x64\x8b\x30\xd4\x02\x91\x23\x80\xec\xd3\xa0\xdc\xd3\x08\xbd\xeb\xd7\x7f\x1a\xe9\x71\x5e\x9b\xda\x2b\xf6\xa3\xed\x2d\x68\xa0\x48\xe3\xad\x28\x88\xb5\x2a\x6a\x4b\xf3\xb3\x61\x5a\xf5\xde\xd3\x26\x29\x33\xc8\x13\xbd\xa4\x90\x72\xdb\x0a\xd8\x69\x26\xa0\xb3\xfd\x12\x4f\x97\x68\xa6\xd5\x59\x8b\x58\x5c\xd0\xf9\x82\x48\xe5\xe2\x57\x27\x40\x4c\x63\x92\x9f\x71\xb1\xf0\xdd\x05\xf9\x1b\x50\x5a\x76\x90\xc7\x1a\x3f\x6c\x4f\x53\x04\xbe\x35\xcb\x6d\x6e\x4c\x6c\xd9\xd6\xee\xee\x5f\xdd\x4c\xf2\x18\xbd\xd3\xbd\x32\xc7\x11\x37\x4d\x45\x9d\x56\xde\x5b\xe3\xad\x4f\x1b\x90\x9c\x02\x18\x14\xcd\xb0\x5c\x50\xce\x52\x77\x59\x61\x20\x62\x45\x2b\xb4\xf2\x52\x2d\xc1\x7a\x2d\x4b\xad\x1f\x0a\x24\x48\xcd\xef\xb6\x47\x8d\x25\xc3\xce\xd2\x98\x9f\xf5\x24\x8f\x03\x7b\xe3\x0b\x31\x22\x4e\x3d\x7f\xad\xde\x2f\xc5\xca\x6d\x61\x36\xa0\xd6\xfe\x5d\x95\x6d\xd1\xb2\x2e\x59\x3d\xe2\xe6\xd8\x11\x40\x28\x22\xa5\x3c\xc5\x3c\xc0\x62\xbe\x33\x96\x87\x53\x31\x6f\x8d\xb8\xb4\xf7\x3b\x20\x55\x1a\x4e\xe3\xad\x84\x35\x60\xe8\x81\x44\x67\xef\x5f\x87\xa4\xfa\xca\xd6\x08\x30\xa1\x30\x53\x72\x21\xae\xb9\x1f\xf3\x42\xca\x41\xc5\xf0\x38\xf5\xa8\x1e\x15\x5e\xb2\x68\x31\x5f\xdd\x39\x67\xbc\xef\xa0\x73\xd2\x50\xd6\xb4\xca\x2a\xdf\x41\xed\xe4\x62\x81\xd9\x5c\x6b\x3b\xaf\x79\xab\x07\xf6\xdb\xdf\xc2\x20\x04\x29\xdb\x22\x32\x1d\xd0\x38\xfb\xcd\xc9\xfd\xad\x4b\xcc\xb1\x45\xda\xe1\x52\x92\x05\x6e\xdc\xd4\x84\xb3\x27\x97\x4c\xe1\x87\xef\x10\x3d\x26\xc7\xe8\xc5\x6f\x83\x5f\xbd\x80\x1e\x47\xf5\xa6\x11\x5c\x0f\xc5\x12\x5d\xc3\xe8\x2b\xaa\x80\x10\xe4\x45\xd8\xc2\x31\x3a\xd7\xfd\x82\x3c\x57\xbf\xb6\x01\x77\xf1\xb4\x5b\xd9\x11\x12\x64\x8e\x45\x59\x91\x48\xae\x48\x3e\xf3\x29\x99\xc6\x35\x6d\x77\x15\x79\xa0\x52\x49\x1b\xb5\x3d\xce\x03\x56\xfe\xdc\xbb\x43\x61\x79\xab\x6f\x0a\x2d\xfc\xc6\x25\x56\x78\x1c\x48\xdd\x13\xe3\xa5\x1d\x17\xbc\xae\x31\x2b\xc7\xd8\x9e\xe3\xee\x52\x39\xf9\x8d\x2d\x71\x33\xc6\xfe\x5b\x94\x8d\xf1\x58\x2e\x48\xd4\xca\x0d\x48\x41\x78\xec\x5c\xee\x4a\x60\x9f\x7b\xf9\x6c\x96\xe2\x18\x5d\x72\xd5\x99\x53\xfe\xb6\x85\x55\xce\x29\xc2\xcf\x2f\x6f\xae\xfe\x36\xf9\x70\x71\x79\x33\x48\xf2\x41\x92\xc3\x33\x48\xf2\x41\x92\x47\x34\xbc\x2f\x92\x9c\xb0\xbb\x5d\x49\x71\xe7\x78\xdb\x94\x1d\x69\x03\x7a\x6a\x2d\xcd\x6a\xe7\x09\x56\xbb\x26\x49\x3b\x67\x77\x3f\x62\x6d\xf2\x5b\xf8\x9c\xcd\x60\xd9\x90\x60\x6a\xbf\x60\xdc\x11\x67\x5f\x3c\x4b\xda\x0e\x39\xce\x32\x72\xfc\x24\xe5\x3d\x87\x71\xac\x4d\x4b\x9e\x92\xb3\xfb\x1e\x2f\x8d\x17\xd8\x1c\x4a\xcc\x96\xa8\x11\x94\x29\xd8\x4a\xa7\xd7\x67\x17\x17\x01\xd2\x01\x91\x87\x82\x34\x0a\x1d\xfc\x3f\xbb\xa5\x38\x03\x47\xdf\x3e\xac\xcc\x36\x8a\x5b\x42\x33\x9d\xca\xd7\x08\x72\x47\x79\x2b\xab\xa5\xc7\xaa\x6c\x96\xa3\xeb\x4c\x78\x89\x04\x1f\x06\xc7\x48\x8b\xcd\x5b\x50\xae\x28\x9d\x9b\x14\xc8\x84\xe6\x77\xac\x7a\xda\x4e\xe4\x50\x40\x13\xda\xdf\xa0\xba\x7e\xbe\x1a\x9a\xd0\x6e\x94\x02\xfb\x98\x32\x9a\xd0\x8f\xbe\x1a\x9b\xf0\xa2\x3e\x03\xc2\xee\x25\xd9\xf7\x82\xd7\x99\xa4\xd9\xb5\x09\xae\x38\xe0\xe6\xa6\xa3\x7a\xe0\xd0\x7f\xa1\x7a\x64\x4d\xda\xae\x52\xad\x36\xac\x01\x68\x90\x38\x3b\x49\x95\xec\xf3\x14\x93\x47\x36\x7f\xff\x3d\x6e\xfe\x42\x96\x57\x24\xb1\x26\x77\x7f\xbe\x49\x45\x0a\xad\x8c\xa1\x5b\xb2\x34\x84\x7d\x67\xae\xb1\xb4\xb2\xe4\x59\xa6\x0f\x65\x50\xc1\xdc\x33\xd6\x43\x4c\x7a\x47\x9e\xc5\xd4\xcf\x2d\x49\xa0\xb9\x73\xcf\x0a\x09\x23\x81\x25\x04\xfb\x43\xaf\x69\xda\xea\xa1\x3c\xe2\xc1\x3d\x69\x9a\xa8\x7b\xf2\xe9\x3d\xee\xc9\x87\xb0\xea\x3f\xbb\xc5\x5b\xf5\x9f\x9d\xa2\xaf\x56\xbb\x92\x0f\x8b\xd5\x7f\xf6\x09\x99\xd5\x7f\x32\x9e\xa2\x14\xd4\xd6\xea\xe3\x40\xc9\x99\x4f\xe5\xb5\xcd\xb5\x0d\x55\x27\x7f\xa1\x20\x53\x06\x06\xe4\x94\x83\xb2\x5b\x2b\x20\xd3\x34\xa7\x51\x91\x9a\x27\x1f\xbe\xad\xff\x80\x38\xc8\x7b\x7b\x27\xcb\xc0\xee\xfa\xb7\x79\x2c\x33\x87\xae\xfa\xce\x71\x33\x4a\x54\x13\x85\x4b\xac\xf0\xb1\x3e\x10\xa3\xfe\x8f\x36\xb3\xf0\x1f\xfe\xc3\x0a\x4f\x49\x25\x7f\x3a\xf8\xaf\xbf\x9c\xff\xed\xff\x3d\xf8\xf9\x1f\xe1\xef\x40\x5d\x33\xf0\xf0\xe0\x0b\x89\x43\x80\x6a\x92\x8c\x97\xe4\x12\x7a\x07\x3f\x5a\x4b\xef\xd4\x20\x84\xec\x2f\xa0\xa2\xd7\xb1\x21\x17\xf0\x3f\x36\xbc\x5c\xfd\x29\xb2\xa0\x81\x7b\xf6\x50\xef\x81\xb5\x4d\x20\xea\x37\x4f\x3e\xed\x07\x37\xf4\x47\x22\x64\x12\xb7\xbb\x7b\xfa\x95\x18\xcc\x5b\xdd\x36\x96\xc5\x82\xd4\x18\xfe\xf9\xbd\x9b\x02\x7d\x1f\xfb\x9a\x8b\x0c\x4a\xa7\xe9\x3b\x70\xd4\x23\xbb\x7c\x71\xf7\x2a\xc9\xe2\x34\x4f\x46\xc9\xef\x57\x30\xf3\x84\xc1\x8c\xd8\xd9\x32\x12\xc0\xeb\x8f\x3e\x1f\xc5\x53\x09\x9c\x4e\x2e\xd0\x9d\x99\xe1\x3d\x9a\x9c\xa7\x13\xd7\x15\xc9\x6e\x6e\x25\x0b\xec\xef\x7d\xaf\xec\x32\x05\xa6\x9b\x35\x98\xa3\xe8\x9c\x56\x9f\x5e\x8e\xd7\x39\xbb\xd3\xed\xca\x6c\xb9\x5d\xab\xcf\x1e\xca\xcc\x54\x5b\x51\xbf\xa3\x49\x15\xb9\xfa\x25\x86\xde\xf2\x32\x36\x8a\xe0\x9e\x7d\xb6\x5d\xb3\x98\x72\xce\x00\x0e\x68\x55\xfd\x61\x40\xa7\x5a\xd8\x9b\x9c\x49\xf3\x1d\x70\x3d\x92\x3b\xc2\x94\x87\x93\xdb\x2a\xeb\x58\x28\x9a\xc7\x26\xb1\x3d\xea\xb2\x32\x3b\x80\x87\xf1\x72\xd5\xcf\x1e\xbb\xe8\x9e\xd7\x06\x35\x7d\x5a\x35\x0b\xac\x47\x3d\xf7\x76\xf0\xc6\xd3\x6e\xd0\x13\x7a\xee\x24\xfd\x17\x59\x29\xd8\xf9\xea\x9b\x3f\x25\xa4\x93\xae\x3f\x19\x2f\xce\x27\x32\x73\xb2\xec\xd8\x4d\xb6\x12\x30\x8e\x3d\x6e\x26\xf9\x12\xe6\xee\x7b\xe9\x62\x0a\xc6\xe6\x12\xd3\xc1\x45\x3d\x0a\x0a\xbd\xb3\x3b\x74\x87\x85\x47\x09\xb5\xd3\x8a\xca\x45\xaa\xb8\x37\xcf\xc5\xac\xcb\x8c\xed\x52\xd7\x81\x69\xc5\xd5\xb8\xe9\x74\x0f\x3d\x17\x2b\xbd\xcc\xd0\x85\xc7\x5c\xcc\x7d\x86\xf9\x2e\x9c\x6f\x12\xd3\xc3\x1c\x8c\x27\x9b\x07\x43\x6d\xf2\x5c\x13\xb1\xc6\x7f\x2f\x88\x6a\x85\x96\x59\x36\xbb\x62\xc2\x4b\x43\xc5\x92\x51\xf9\xcb\x61\xac\xa3\xd0\x29\x02\x73\x96\xf8\xba\x26\xbf\x92\x9d\xed\x7a\xfb\x0c\xda\x70\xaf\xbd\x3b\x21\x91\xc5\xb9\x66\x85\x90\x20\x15\x56\xf4\xce\x6c\x4b\x97\x3f\xe4\xa8\x05\x74\x83\x07\xc7\xc7\x07\xa6\x97\x5c\x98\xab\xd4\x78\x14\xf5\xe7\x7b\x75\x2d\x74\x4a\xd5\x13\xb8\xe1\x43\x3a\x18\xbb\x44\xa6\x9c\x86\x9d\x2a\x17\x62\xcd\xa5\xab\x7f\x01\xc6\x94\xcb\x9a\xfa\x7e\xaf\x7d\x60\x3e\xb7\x6b\xb5\x9c\xec\x77\x86\xe0\xc5\xfd\xde\x2a\x3f\x86\x1f\xd9\xe6\x89\xa5\x3a\x8a\x0f\xcd\x2b\x8f\x8b\xa6\x1d\xd9\xd7\x1f\xd7\xa4\xe6\x62\xe9\x7f\xf4\xc5\x37\xc7\x52\x71\x81\xe7\x50\x32\xca\x34\x6e\xfe\xcc\xff\x64\xfe\xb0\xd7\xbd\xf5\xbf\x36\xe8\x8e\x2e\x33\xcb\xd7\x62\xf9\xea\x6c\x39\xb7\x6e\x7b\x62\x40\xf9\x6d\xf5\x04\xf2\xe7\xc0\x03\xe6\x4c\xcc\xcd\xcf\x22\x84\xd4\x6d\x4d\xd8\x51\xa7\x70\x00\xee\xc3\x28\x79\xf2\x60\x7f\xe4\x10\x42\x25\xbd\xa3\x92\x27\x94\xed\xf0\x2f\x5a\x0f\x4f\x38\x8a\x26\xde\xaa\xa6\x85\xdc\xce\x1a\x2b\xef\x41\x79\x68\xb8\x04\xb4\x88\x3d\xec\x2b\xae\xc1\x57\xa9\x91\x17\xd0\x31\x14\x11\xec\x3b\xf4\x3f\x87\x7f\xff\xdd\xaf\xe3\xa3\x3f\x1f\x1e\xfe\xf4\x72\xfc\x9f\x3f\xff\xee\xf0\xef\xc7\xf0\x8f\xff\x38\xfa\xf3\xd1\xaf\xee\x87\xdf\x1d\x1d\x1d\x1e\xfe\xf4\x97\xf7\x6f\x6e\x26\xe7\x3f\xd3\xa3\x5f\x7f\x62\x6d\x7d\x6b\x7e\xfa\xf5\xf0\x27\x72\xfe\xf3\x67\xbe\xe4\xe8\xe8\xcf\xbf\x4d\xee\x3a\x66\xcb\x0f\x89\xd2\xdb\x3c\x63\xbb\x59\x28\x53\x64\x4e\xb6\x65\xce\xfb\xd8\x1b\x33\x85\xda\x7a\x57\x21\x65\x6a\xcc\xc5\xd8\x72\x69\x81\x91\x92\xd8\x80\xdb\x5e\xb9\xcf\xff\x95\x93\x9a\x41\xa6\xb2\x53\x0a\xf7\xe8\x80\x3f\x95\xa2\x61\x18\x7e\x9e\x03\x26\x63\x5a\x0a\x6a\xa9\x1f\xc8\x8e\xdc\xe6\x6b\xbb\x41\xff\x1d\x90\x33\x2e\x68\x64\xd6\xb5\xb3\xa4\xb4\x79\x75\xdc\x19\x41\x8e\x7b\xcd\x7e\xef\x96\x24\x40\xcc\xdc\x33\x20\x6d\xa2\x9f\x01\x69\xf3\x48\x57\x06\xa4\x4d\xd2\xf3\x45\x22\x6d\x0c\xef\xe0\xbf\x27\xcc\x26\x7f\x55\xb4\xc8\xcc\x9d\x9c\x05\xd1\x08\xbb\x8b\x05\x57\xe7\x4c\x75\x73\x6e\x0f\xc5\x51\xc3\x9b\xb6\xc2\xea\x91\x2c\x8a\x4c\x79\x6f\x7b\x16\x39\x03\xa2\x5d\xa3\xfa\x59\x0c\x3f\x65\xa8\x6e\x2b\x45\x9b\xc8\x84\x00\x6f\x5a\x7a\x32\x5d\x84\xa5\xe4\x05\xc5\x2e\x11\x1c\x7e\x53\x61\xa9\xdc\x90\xc1\x33\xaf\xf0\x2d\x09\x08\x79\x63\xb3\xb5\x81\xbc\xd7\xcd\xed\x74\xa9\xef\xa1\x73\x76\x67\xef\x24\x54\xb6\x26\xc1\x95\x74\xb1\xd2\x2c\xed\x7e\x5d\xd9\x8c\xfa\x5c\xda\x6c\x85\x20\xa9\x11\x34\x48\xef\x44\xc4\x10\xcd\xe1\xb3\x0e\x02\x09\xe9\x1f\x96\x1e\x36\xaa\x1b\xc9\xc6\x41\xba\x2a\xee\xb3\x11\x92\x6c\xac\x35\x1d\xbc\x83\x89\xf6\x75\xef\xe8\x16\xf6\x28\x81\x23\x5d\x2b\xcf\xab\x91\x3f\x85\x36\xbe\x2f\x9a\xf8\x9e\x68\xe1\x4f\xa3\x81\xef\xa7\xf6\x9d\x4d\xf3\xce\xa3\x75\xe7\xd1\xb8\xb7\xc0\xb5\xe7\xd4\xb2\xf3\x68\xd8\x4f\xe1\x5f\x6b\x04\x99\xd1\x87\x7d\x48\x5b\x76\x15\x7e\x90\x22\x0f\xe0\xaa\x69\x04\x69\x08\x2b\x1d\x11\x9a\x8b\xc0\x02\x63\xe3\x90\x71\xee\xfd\xa2\x79\x2f\xec\xeb\x4d\x9e\xb2\xe1\xb6\x46\xc3\x6d\xbd\xc5\x33\xdc\xd6\xc3\x6d\xfd\x2c\xb7\xb5\x95\x56\x5f\xff\x55\x9d\xbb\xba\x6e\x8d\xe7\x3b\xab\x80\x70\xd6\xa7\xb2\x03\xc9\xfc\x2c\xd4\xfd\x6b\xf5\x44\x22\xfd\x58\xa1\x90\xf5\xa0\x0b\xc5\x8d\xd8\x33\x5c\xd3\x02\x99\xea\x6b\xc6\xac\x46\x35\x66\x78\x0e\x34\xd8\xfa\x7b\xf6\x88\x21\x2e\x7c\x55\xab\xa8\x9e\xac\x70\x02\x82\x07\xcb\xf1\x1a\xc3\x2f\x05\xaf\x2a\xad\xaf\x54\xf4\x96\xa0\xd7\xa4\xa9\xf8\xb2\xb6\x34\x4d\x25\xba\x56\x58\x91\x59\x5b\x5d\x13\x95\x50\xa8\x3a\x52\xe2\xf8\x8a\x3e\x86\x7d\x7d\x57\x5b\x11\x8a\xfb\x40\xb1\x1b\xd4\x18\x1a\xf8\xa8\xd7\x7c\x60\x70\x95\x9f\x56\xf7\x78\x29\x47\xe8\x92\xdc\x11\x31\x42\x17\xb3\x4b\xae\x26\xc6\x89\x14\xf7\xde\x90\x13\xc4\xbc\x1c\xd1\x19\xfa\xae\xc2\x8a\x48\x85\x14\x9e\x03\xb6\xb8\x2b\xf0\xc3\x45\xaf\x51\xc4\xb5\xa0\xbc\xa7\xdb\x17\xea\x31\xcf\xb3\x72\xf2\x7d\xa4\xea\x0f\xb4\xee\x6b\xfe\x3c\x7b\x5d\x8d\xca\xf1\xe8\xef\x8c\x13\xda\xd0\xf7\x1b\x3a\x6f\xc3\x46\xef\xc5\x89\x29\x19\xe8\xaa\x22\x83\x4b\x97\x32\x24\x88\x6c\x38\x93\xa4\x57\xbe\xa1\x1b\x08\xd4\xbc\x8c\x3b\xf5\x59\x3d\xbe\xd1\x86\x41\xaa\x49\xd0\x70\xa9\xa0\xca\x41\xac\x7e\x92\xcb\x16\x98\xb8\x8e\x40\xe1\x0b\x5c\x55\xa4\x44\xb4\xae\x49\x49\xb1\xd2\x7a\x3b\x9e\x29\x22\x10\x0e\x45\xbd\x2f\x9f\xea\xf3\x46\x4c\x3d\x0c\x57\x4a\x23\xde\x58\xeb\xd3\xcc\x4a\xc8\xa3\xa5\x0c\xa2\x17\x06\x75\x6a\x0b\x7f\x74\x85\x37\x56\x4a\x69\x24\x09\x51\xfd\x7c\x00\xcd\x2e\xd8\xde\xab\xa0\x5d\x34\xad\x78\x71\x2b\x51\xcb\x14\xad\x6c\xad\x4e\x7e\x0b\xf6\x4b\x05\xe2\x24\xba\xe9\x78\x29\xe5\xff\x39\xf6\x07\x6c\xac\x7b\x25\x4f\x7e\xd3\xfd\x0a\x3e\x88\xec\x5c\x06\x2b\x3a\x87\x0d\x4d\x1e\x48\x91\xa2\xcf\xf7\x83\x2d\x0f\xa4\x08\x2b\x7d\x3a\x1a\x67\xbd\xa3\x2c\x79\x72\xa6\xb8\xa3\x79\x32\xe1\xaf\x72\x61\x9e\x12\x48\xab\xc3\x27\x37\xa4\xe7\xcc\x2e\x02\x95\x76\xe6\xcd\x8f\x15\x65\xa4\xbf\x30\xbe\xfe\x9b\x5f\x1c\x13\xf6\xb4\x46\x2e\x2a\xa9\x20\x85\xe2\x62\xe9\x58\xbf\x92\xbb\xe6\xfa\xa2\xfb\x06\x85\x93\x0f\x0f\x4e\x0e\x8e\xd6\xf6\xc8\x81\x84\xf4\x0b\x73\x2d\x1e\x5b\xea\x6c\x3f\x28\x49\xeb\xa6\x5a\xc2\x38\x0e\xca\x11\xa2\x2a\x07\x46\x48\xdf\x86\xa6\x4c\x38\xcc\x8a\xa5\xfa\x1e\x21\xc9\x91\x12\xb8\xa4\xd6\x40\x80\x4f\xf5\x97\x94\x68\xed\x85\x7e\x78\xf0\xeb\xc1\x08\x11\x55\x1c\xa1\x7b\xce\x0e\x14\x4c\xdf\x31\xba\x81\xe2\x8a\xe9\xb0\x5e\xd7\x91\x25\x6f\xa1\xc2\xb8\x59\x42\x53\x4f\xb7\x5a\xc2\x75\x83\x78\x6b\xeb\xaf\x62\x95\x42\x51\x1e\x3e\xe7\x0f\x54\x59\xf2\x0d\x2d\xbf\x5f\xc2\x6e\xb2\x15\xbf\xb1\x36\x46\xee\xc8\xc9\x82\xe0\x4a\x2d\x4c\x36\x03\xe3\x6c\xfc\x2f\x22\x38\xd0\x98\x33\xfb\x9b\xd4\x6e\xa4\x85\x94\xc3\x27\x21\xbc\xbc\xde\xa1\x2c\x40\xa6\xcc\xce\x00\xf7\xe8\x6b\xef\x0d\x89\x56\x89\xd0\xaa\x3c\x7a\x7b\x73\x33\x79\x43\x54\xbf\x9e\xb3\xfe\x10\xbd\x39\xbf\x71\x39\x2c\xe0\xe8\x27\x62\xc6\x45\xbd\x07\xe2\x3d\x0f\xb8\x76\x8c\x1a\x2e\xf6\xe1\x96\x59\x70\x99\xb4\x9c\xe8\x09\xae\x98\xb7\x5c\x2a\x13\xcb\x31\xb6\x09\x83\xc4\x46\xde\x4f\xc8\x70\xe9\xfb\x17\x93\x63\xf4\x37\xde\x42\x25\x32\x3c\xad\x96\xbe\x90\x91\x24\x69\x28\x6a\xfd\xbc\xd0\x5d\x79\xa1\x6f\x10\xbd\xf3\xdf\x12\x5c\x12\x21\x41\x40\x13\x9c\x9c\x0c\x9d\xed\xb8\x07\x7d\xcb\xba\x94\x67\xad\x54\xbc\x46\x0b\x3b\xec\x3e\xc5\xb9\x3d\x9c\xc7\xe6\xb8\x5a\x3a\x59\x41\x1a\x23\xc4\xed\xdf\x7c\x75\x22\x7a\x4d\x7a\x99\x79\xb7\x9f\x4f\x8d\x9a\x1a\x4e\x9b\x0d\x70\x18\xa2\x52\x2b\xdb\x4c\xd1\xbc\x4c\xd7\x45\x86\x7c\x01\x94\x31\x67\x00\xa5\x91\x9f\xaf\xbe\x08\x82\x3d\xc9\x6f\xca\x97\x86\x80\xb2\x41\xed\xd1\x93\xc0\xed\x91\x45\x51\xda\xcd\x67\x7c\xd0\xf1\xde\xf3\x4d\x2f\xa7\x5d\x5d\xf0\x02\x33\xce\x68\x81\x2b\xfa\x2f\x52\xa2\xb6\xe1\xcc\xe6\xd6\x81\x66\x5b\x60\x49\xc6\x10\x79\x67\x46\x9c\xcb\x80\xed\x5a\x4b\x07\xc5\x39\xa8\x7b\xbe\x48\xb4\xe9\x75\x9e\xae\x66\x45\x85\x27\x53\xb7\x87\xcf\x5a\x40\xbd\xb7\x58\x79\x76\x3c\xfa\x22\xd4\x49\x94\x89\x78\x61\x9d\xdb\xcc\xd4\x09\x05\x3e\x6f\x73\x5d\x81\xe0\x95\x44\xdc\xa5\xef\xaf\x6c\xf3\xaa\x55\xc0\x7d\xd3\xbd\x0c\xe6\x40\x20\xd6\xd6\x53\x22\x3a\x62\x48\xa1\xd6\xe7\x34\x8b\xd7\xc5\x36\x6b\x9a\x73\x51\x5a\xa7\x63\x60\x36\x27\xe8\x95\x6e\xf9\x8f\xdf\x7e\xfb\xfb\x6f\x33\xb4\xa3\x87\xe7\x5a\xc1\x0c\x5d\x9c\x5e\x9e\xfe\x72\xfd\xe3\x19\xd0\xcd\xa7\xbe\x3e\x53\x92\x6c\xee\x14\xd9\xac\x09\xb2\x4f\x9a\x1e\x0b\xc4\x8d\xc9\x52\x36\xf7\x91\xb8\x86\x5e\xe9\x4d\xd8\x4a\x43\x51\x6f\x6d\x92\xa0\xc4\xb6\x36\xa3\xd2\x77\x67\x18\xcc\xd3\x02\x6b\x2f\x24\x95\xac\x08\x69\xb2\x59\xfc\xd7\xfa\x6d\xbd\x72\x40\xa8\x6c\x85\xa9\x4a\xeb\x83\x57\x9d\x2f\xdf\x06\xad\xa0\x0f\x5f\x91\xf1\x2f\x49\xc1\x59\x99\x62\x02\xe4\x52\x69\x6d\x4f\xb2\x9e\xb9\x6b\xf3\x4e\xe7\x22\xee\xae\x12\xdb\x18\x58\x92\xa9\x2b\x8a\xfc\xaa\xe6\x91\x93\x86\x0d\x02\xde\xf6\xc7\x3f\xc4\x07\xc8\x8a\xe6\x9a\x17\xb7\x19\x5d\x64\x89\x02\xec\xb5\x3e\x69\x85\x89\x05\xde\x9c\x4d\x4c\xe7\xf4\xca\x5c\x7e\xb8\xe9\xa8\x5f\xb4\x16\x8e\xbb\x6a\xf0\x6f\x6d\xb4\x10\xb3\x12\xdd\x92\x26\xcd\xba\xd4\x02\xd3\xc1\x08\xfb\x28\x42\xf0\xbd\x0b\x5b\xb7\xc3\xa4\x57\x1b\x41\xe0\xd0\x7f\x46\x23\x4e\xab\x00\x14\x04\xe7\x21\x10\x68\x8d\x90\x19\xa6\x15\xc2\xe0\x95\x57\xb4\x26\xe8\x7e\x41\x98\x71\xf6\x77\x68\x89\xaf\x48\xe0\x7c\xad\xde\xc6\x03\x07\x09\xff\x6e\x6b\xaf\x61\x2a\x2b\xc6\xd7\x6d\x06\x58\x99\x2d\x7a\xac\x66\x83\x19\xf0\x39\xcf\x60\x06\x44\x9a\x01\x8d\x20\xd7\x8a\x47\xeb\x9a\xd9\x00\x37\xa6\x1b\x8f\xc0\x6d\xa6\x64\xc6\x05\x59\xc5\xdb\x04\x38\x18\x8b\x9c\x4f\x40\x06\x9f\x4e\x2e\x7c\xec\x8b\xf7\xb0\x2e\x86\xb9\x58\xb6\xc5\xc2\x85\x49\x19\x91\xf2\x04\x90\x35\x6d\x63\x1c\xcb\x70\xb5\xb5\x82\xc4\xa3\x7c\x1a\x41\x48\x0d\xf3\x38\xea\xd8\x84\xf4\x70\x09\x33\x1f\x12\x55\x98\xb8\xb9\x83\x15\x59\x9e\x58\x37\x5d\xb3\xa4\x70\x7e\x37\xb1\x85\xc0\x72\x41\x20\x77\x96\x3c\x50\x25\x4d\xa3\x86\x8d\xd5\xcd\xb8\xd6\x17\xe6\x02\x17\x04\x35\x44\x50\xae\x55\x8c\x96\xa9\x92\xdf\x33\x34\x25\x73\xca\xa4\x5b\xb1\x94\x2e\xb9\x2d\x01\x48\x22\x2a\x7d\xed\xee\x63\x74\xd5\xab\x1c\x67\xd9\xc5\x0a\xde\xc9\x4c\x3b\x45\xa3\x4c\x53\x02\xca\x0b\x6c\x83\x16\x57\xd5\xb2\xdb\x78\x21\x41\xe8\x23\x33\x14\xbf\x21\xcc\xcc\x1e\xb6\x0c\x06\x5a\x92\x0a\x2f\x4d\x06\xf9\x8c\x32\xf0\xfe\x0a\x79\x74\x9c\x0e\xcd\x8a\xee\x20\x17\xc1\x3b\x1f\xdd\x19\x54\x22\x41\x70\x91\xc4\x63\x3c\x60\xc0\x3e\xf5\x0c\x18\xb0\x01\x03\x36\x60\xc0\xd6\x9f\x01\x03\xd6\x7f\x06\x0c\xd8\xe3\x1d\xda\xe7\xa0\xdd\x80\x01\x1b\xbc\x32\xeb\xcf\x80\x01\x8b\x7a\x06\x0c\xd8\x27\x9f\xbd\x13\xd1\x03\x06\xec\x33\x9e\x01\x03\xf6\x99\xcf\x80\x01\x1b\x30\x60\x03\x06\x6c\xc0\x80\x25\x3c\x03\x06\x6c\xfb\xe1\x0d\xc1\x9f\xf8\x67\xc0\x80\x0d\x18\xb0\x2d\x9f\x01\x03\xb6\xf2\x0c\x18\xb0\x01\x03\xf6\xb1\x67\xc0\x80\x0d\x18\x30\xfb\x0c\xde\xc6\xb5\x67\xc0\x80\x6d\x78\x06\x0c\xd8\x76\xed\x0c\x66\x40\xda\xcb\x9e\xc4\x0c\x90\x8a\x37\xd7\x74\x9e\xc0\x0b\x99\xeb\x18\x5c\xfb\x9e\x58\xd2\x48\x69\x8b\xed\x4a\xf3\xa1\xf3\x63\x49\x4b\xd9\x17\x22\xc2\x82\x9b\x64\x4a\xb4\x89\xa0\x87\xd5\xa4\xdc\x26\x17\x33\x08\x20\x07\x4c\x6e\xfa\x54\x38\x9a\x40\xda\x2b\xeb\xd0\x57\x9f\xdd\xed\x46\x99\xb6\x5d\xe2\x7b\x10\xcc\x47\x81\x99\xa9\x8c\x6a\xcb\x64\xeb\xeb\x7d\xc2\x4b\xe9\x2a\x49\x30\xce\xc6\x86\xac\xf5\x58\x77\xf8\x98\xcb\xe3\x04\x6f\x70\x22\x33\x9b\xc1\xc8\x4d\x04\x9f\xee\x8c\x9d\x6d\x02\xf8\x23\x5a\x58\x80\x1e\x9f\xf5\x18\xd7\x4c\x07\x23\x99\xd6\xfa\xc0\x30\x28\xd6\xec\x28\xb8\xa8\x15\xd8\x1e\x14\xb8\x4b\x36\xb7\xad\x91\x53\x8e\xa5\x52\x9e\x34\xdc\xfc\xa7\xc3\x4d\x05\x80\xa9\xe8\x38\xca\x8e\xe9\xe5\x52\x50\x52\x3b\x43\x48\xed\x09\xc2\x2c\x03\x2a\x2a\xa7\xae\xb4\xa7\x68\xa8\xfd\x44\x42\xed\x23\x0a\x6a\x17\x08\xa8\x9d\xa3\x9f\xf2\x84\xd5\x33\x84\xd4\x33\x69\xa4\x4f\x10\x9e\xb2\x40\xfa\x9b\x85\x20\x72\xc1\xab\x68\x81\x93\x4b\xd8\xbc\xa7\x8c\xd6\x6d\x0d\x55\x28\xb4\x4c\xa1\x77\x1e\xec\x2f\x9d\xc8\xb0\xd7\xbd\x41\x1c\x40\xb9\x8a\x92\x40\x19\x70\x4c\x2b\xbd\xb5\x80\x2c\x74\x81\xef\x40\x29\x6d\x8b\x82\x90\x32\x45\x2d\x0d\xbd\xd5\xbf\x3f\xf6\x3d\x34\x1c\xfd\x54\xa2\x57\x69\x57\x4d\x9a\xdd\x13\xb8\xf3\x7e\xff\x4d\xd4\x3b\xe6\xa2\xc9\x73\x4b\xbf\xb9\x9a\x9c\xf5\x6e\x69\xf8\xe0\x2d\x1c\xe3\xb3\x05\x29\x6e\xaf\x2c\x94\x66\x77\x37\x73\xba\x9b\x29\xc9\xc5\x94\x43\x31\x48\xf5\xa2\xf4\x63\xc8\x5c\xa8\x95\x10\xe8\x1c\x56\x91\x88\x3b\x5a\x90\xe3\x67\x70\x54\xe4\x32\xfe\xd3\x0f\x02\x82\x30\x01\x0c\x7c\x5f\xd4\xae\x6b\xd3\x1d\x1f\x61\x08\x7c\x54\xb6\xa7\x00\x1a\xad\x70\xe1\xd7\x66\xbe\xf9\xd0\x25\x75\xe3\x50\x12\xe2\x0d\x9a\x39\x55\x8b\x76\x7a\x5c\xf0\xfa\x44\x8b\x0e\xf3\x9f\x69\xc5\xa7\x27\x35\x96\x8a\x08\x6d\xe3\xd8\x6b\x7d\x5c\xe8\x1e\x50\x36\x3f\xae\xcb\xa3\xe3\xff\x95\xd4\x87\x0b\xeb\x2b\xb7\x69\x58\x8f\x38\x09\xa6\x44\xcb\x7d\x2e\x56\xbc\x05\x7a\x52\xd2\x37\x69\xf2\xfd\x9d\x5a\x54\x24\x11\x96\xbc\x13\x48\xf2\x20\xb5\x51\x86\x80\x40\x4e\xa1\xb2\x1f\xb0\xe3\x27\x83\x1c\x67\x39\xab\x99\xa0\xc6\x7b\x04\x33\xde\x1b\x5b\x68\x5f\xa0\xc5\xd9\x60\xc5\xb9\x20\xc5\x59\xe0\xc4\x39\xa0\xc4\xf9\x60\xc4\x79\x20\xc4\xf9\xe1\xc3\x4f\x06\x1d\xfe\x22\x60\xc3\x19\xe3\x63\x99\xe0\xc2\xcf\x01\x15\xde\x5f\x1f\x0c\xca\x00\x0f\x7e\x3e\x68\x70\x96\x79\xcc\x6a\xc5\x26\x8a\x84\x1d\x40\x81\x9f\x23\xfe\xff\x64\xb1\xff\x0c\x71\xff\x9c\x31\xff\x6c\xf1\xfe\x27\x83\xfc\xa6\xc3\x7d\xb3\xfa\x14\x9e\x05\xe6\x9b\x13\xe2\x9b\xbc\xbe\x94\x51\x45\x71\xf5\x9a\x54\x78\x79\x9d\x06\x04\xcd\xb5\x12\x97\x6b\x60\x51\xe3\xb6\xee\xe3\x1a\x16\x58\x22\x17\xea\xb6\x14\x2f\x2e\x96\x6e\x55\x60\x84\x21\xe2\xac\xc7\x17\x1d\xb5\x46\xfb\x17\xb9\x46\x7b\xe3\x1e\x37\xbc\x2a\x7b\xb2\x6b\xde\xf2\x7b\xc4\x67\x8a\x30\x74\x48\x99\xdb\x39\x47\x81\x97\xa6\x0b\x8f\x24\xc7\x3b\xf4\x5b\x5f\xbd\x74\x8d\x7c\x7d\x71\x0f\x88\x0c\x49\xb9\xd7\x91\x2f\xdb\xc7\x4f\x87\xbe\xec\x17\x67\x6d\xd5\x0f\x7f\x99\x90\x58\x9e\xd8\xd7\xab\x63\xf4\xde\xaa\x13\xaf\xa0\x3f\x5e\x14\x61\x56\x22\xcb\xcf\xf5\xf5\xed\x93\x64\xa8\x7b\xdf\xb8\xf1\xd8\xf4\x3e\x9e\xc5\xdc\xc0\x5a\xcb\xe4\x08\xeb\x6f\x81\x02\x3a\x38\x5d\xf7\xc6\xe9\xba\x23\x04\xf6\xd7\x67\x6d\x3d\x3f\xe2\x7a\xb0\xb6\xfe\x5d\xac\xad\x80\x16\xef\x8d\xc0\x05\x99\xec\x93\xf2\xe6\x04\x48\x97\x08\xd8\xe9\x70\x5e\x5c\x30\x42\x4c\xe2\x58\x47\x7a\x08\xfc\x7e\xb3\xb6\xaa\x96\xc6\x87\xd8\x63\xc0\x8c\xdf\x5a\x37\x0b\xb2\x46\x1d\x08\xa1\xd4\x0d\xbd\xeb\x6c\x93\x46\x70\xab\x91\x88\x96\x31\xad\x62\xd8\xe3\xa4\x3b\xaf\x6d\x11\x49\x58\xbc\x3b\x1d\xf7\x88\x0d\x2d\x08\x1d\x80\x9e\x0b\x82\xba\xfc\xa5\x7e\x47\x74\xab\x33\x2e\x0a\x3a\xad\x96\x68\x81\x2b\x6d\x2c\x59\x90\xf6\x2d\xad\x2a\xfb\x9a\x04\x50\x38\x51\x26\xf4\x6c\x34\x9a\x8a\xb3\x39\x4c\x06\x36\x1d\x21\x0f\x0d\x29\x74\x9b\x45\x45\x30\x6b\x1b\xd3\x4f\xad\x1f\x2d\x79\x2b\x5c\x3f\x93\x50\xf1\x41\xeb\x54\x22\x46\xab\x91\x9b\xf2\x3e\x05\xe6\xfa\x9e\xef\x5c\xca\x92\x94\x96\xbd\xf2\x9e\x4a\x32\x82\x77\x46\xf7\xc9\xf4\xc5\x55\xed\x37\xfb\xc6\x7c\xd6\x08\x7e\x47\xcb\x0e\xa3\xaf\xb7\x05\xe0\xe3\xa3\xdb\xfa\x11\xde\xeb\x44\x2b\xe3\x6c\xcc\xc8\x1c\x83\x7a\x6c\x05\x9a\x41\x74\x9a\xf6\x0d\x7e\x90\x95\xb4\xc0\x8a\x48\xc8\x49\xe8\x51\xdb\xde\x51\x1c\xdd\x13\x3d\x9e\x60\x47\xa1\x43\xc6\x11\x87\xcc\xc2\x96\x51\xb5\x84\x88\xde\xa2\x55\xa8\xe4\xf7\xec\x28\xe5\x60\x1a\x98\x03\x46\x53\xa2\x70\x97\x1c\xe8\x54\x32\x89\x08\xc3\xd3\x4a\x9f\x3d\x40\xfc\xdf\x6c\xdc\x00\x68\x46\xb0\x6a\x05\x41\x73\xac\x12\xa4\xc4\x06\x6d\xde\xac\xe7\xc7\xb7\x1d\x95\x36\x5e\x37\x43\x2d\x93\x24\x51\x91\xcd\x66\x02\x44\x66\xbc\xea\x13\xcd\x5b\xb5\x27\xf7\xc8\x63\xae\x23\x93\xb9\x13\x18\x89\xb4\x26\x12\xf1\x36\xc1\x93\xd7\x33\xff\x6c\x73\x39\x2d\xbc\xc1\xef\xb4\xf1\x89\x0d\x9b\xe6\xd8\x61\x97\x81\x56\x1e\xf0\x13\x38\xb8\x95\xc9\xa0\x7e\x7d\x79\xfd\xcb\xbb\xd3\xff\x3e\x7f\x17\xb7\xf0\xe7\xb8\x58\x84\xdc\xe2\x0c\x61\xb8\x28\x40\xc8\x2f\xf0\x1d\x41\x18\xb5\x8c\xfe\xb3\xb5\x90\xb7\x43\xdf\x5e\xa4\x58\xcd\x92\xde\x93\xa4\xf8\xea\x5b\x22\x4a\x72\xe4\x58\xd3\x77\x54\x02\x51\x35\x74\xc2\x02\xff\xb9\x24\x68\x26\x78\xbd\x62\x68\xa1\x4b\x0f\xae\x5b\xea\x1b\x06\x1b\xd3\x6c\x41\x44\x9c\x46\xfe\xfa\xc3\xf9\x35\xe4\xe0\x37\xc2\x10\xbb\x43\x72\x01\xbc\x13\x5a\x37\xa9\x83\xa6\x3f\xe5\x31\x3a\x65\x4b\xf3\x4b\x23\xcc\x22\x55\x94\x8a\x4a\x45\x40\x39\xb5\x86\xa4\x83\x07\xbe\x78\x79\x0c\xff\x7b\x81\x70\x59\x0a\x6d\x69\xfa\x1c\x8d\x62\x35\xcb\x2c\xaa\x65\x63\xbf\xd2\x69\x15\x4c\x2e\x23\x0a\xd2\x38\xa2\x5e\xf8\x9e\x97\x76\x25\x40\x09\x04\xfc\x8e\xd1\x6e\xa5\x12\x58\x91\x39\x2d\x50\x4d\xc4\x9c\xa0\x06\xab\x62\x81\x6a\xbc\x44\x05\x17\xa2\x6d\x0c\xc5\x48\x89\x15\x8e\x6b\xf9\x7b\x2e\x50\xed\xa4\xb3\x96\x66\x5a\x25\xbf\xde\x0c\x04\xed\x44\x76\xf8\x4f\x2a\x65\x4b\xe4\xc9\xab\x97\x7f\xfa\xe6\xdb\x48\xf3\x3a\xe3\xc1\x8d\x85\x3e\x25\x40\x9e\xfa\xf0\x2f\xb7\xc1\x00\x74\xdd\x63\x86\xb1\x3b\xc4\xec\x7c\x90\x86\x92\xb2\x79\x95\xec\x00\x49\x76\x03\xa6\x3a\x01\xc7\xdd\x08\x26\xb1\xbe\xc0\x74\x4f\x60\xaf\x0f\xf1\xae\x94\x7c\x5e\xb0\x4e\x83\x73\x7e\x2f\x2b\x90\x39\x0b\x0c\xbb\x8b\x89\x93\x52\x29\xfe\x23\xb0\x26\xbc\x63\xca\xb0\x8f\x98\x66\x0d\xde\x61\x84\x5e\xa2\xff\x42\x0f\xe8\xbf\xc0\x0b\xf6\xc7\xf8\xa6\xf2\xf8\x98\x72\xc0\xf8\x17\x5c\xaa\x8b\x49\xa6\x85\xfe\xab\xbe\xaf\xf4\x1b\xf5\x7a\x28\x8e\xa6\xd4\xba\x23\xc8\x83\x22\x42\x9b\x81\x76\x0d\x53\x67\x2e\xc9\xa3\xa6\x3b\xf8\xa5\xec\xee\x54\x70\xc1\xc5\xac\x8f\xfe\x7f\xa6\xfd\x0d\x0d\xbf\xe5\x52\x5d\x5a\x69\x1d\x52\xe8\x84\xfd\xa8\xe1\x22\xee\x89\xfb\x94\x56\xdf\xeb\xbd\xd7\xd5\xd8\x40\x25\x87\x04\x08\x93\xc3\xb9\xa0\x09\xc2\x61\x7f\x4e\x6c\x1a\x4e\x34\xdf\xd6\xfd\xd8\xd6\x5a\xf1\xe9\x83\x47\xc6\x1a\x29\x41\x59\x9a\x86\x97\xc7\x60\xdf\x24\xf4\x42\xcf\x46\x19\x28\x03\x1f\x31\x8d\x8e\x8d\xbd\xe6\xa3\xc3\x70\xe0\xb4\xc4\x2a\x30\x8b\xd5\x61\xcd\x23\xc8\x8c\x08\x61\xf2\x84\xa7\x4b\x97\x6e\x94\xbc\xdb\x92\xa4\x5c\x23\xb8\xe2\x05\x8f\xa6\x4d\xc9\xb9\x55\x26\xb6\x2f\x30\xf7\x10\xab\xf5\xd1\xf1\x1f\x5e\x4f\x46\xe8\xe6\x6c\x32\x42\x5c\xa0\xeb\xb3\x34\xf0\x53\xe8\x82\x79\x71\x73\x36\x79\xb1\xd3\x15\x08\x72\x98\x6e\xce\x26\x11\x2f\x59\x87\xcf\xd6\xb8\x19\xdf\x92\x65\xa4\x76\x97\x43\xc3\x1c\xfb\x8d\x95\x65\x40\x66\x9a\x6b\xdc\x6c\xfd\x36\x41\x70\x49\xf7\x9a\xc9\xc5\x65\x1d\xfa\x9e\xe6\xa3\x74\xa9\xf9\x1d\x29\x8d\xd5\xec\x5a\x21\xac\x6c\x38\xd5\x36\xd2\xc0\xf3\xf2\xb1\x67\xe0\x79\xd9\xfe\x19\x78\x5e\x36\x3d\x03\xcf\xcb\x16\xcf\xc0\xf3\x62\x9e\x81\xe7\xa5\xdf\x91\x7d\xcc\x31\x1a\x78\x5e\x3e\xf9\x0c\x3c\x2f\x8f\x3e\x03\xcf\xcb\x56\xcf\xc0\xf3\xb2\xfe\x0c\x3c\x2f\x1f\x79\x06\x9e\x17\xff\x0c\x3c\x2f\x03\xcf\xcb\x97\x2b\xb5\x07\x9e\x97\xd5\x67\xe0\x79\x19\x78\x5e\x06\x9e\x97\xf0\x19\x78\x5e\x1e\x79\x06\x9e\x97\x81\xe7\x65\xe0\x79\xf9\xf8\x33\xf0\xbc\x44\x3f\x03\xcf\xcb\x76\xcf\x90\x79\xb8\xe5\x33\xf0\xbc\x0c\x3c\x2f\xab\xcf\xc0\xf3\xf2\xc9\x67\x3f\xdc\xe3\x03\xcf\xcb\xc0\xf3\xf2\xd1\x67\xe0\x79\x19\x78\x5e\x3e\xfa\x0c\x3c\x2f\x11\xcf\xde\x39\x5d\x07\x9e\x97\x81\xe7\xe5\x63\x6d\x0c\xd6\xd6\x76\xcf\xc0\xf3\x32\xf0\xbc\xac\x3d\x03\xcf\xcb\xfa\x33\xf0\xbc\x0c\x3c\x2f\x03\xcf\xcb\xc0\xf3\xe2\x9f\x81\xe7\xe5\x6b\xf7\x3b\x09\x22\xe9\xbf\xc8\x84\x57\xb4\x58\x26\x67\xfb\x5c\x11\xc9\x5b\x51\xe8\x1b\x1b\x5e\x8b\x1a\x78\xaf\xf7\x28\x24\x29\xd9\x7b\x46\xa1\x70\x15\x4c\x5c\x48\xa5\x20\xec\x1c\x3c\xc5\x14\xec\x05\x9d\x82\x1b\xe0\x65\x3c\x82\x60\xec\xca\x67\x9b\xe9\x8b\x73\x96\x26\x5b\xed\xe1\x40\xf6\x21\x9d\x33\xa4\x3d\xf2\xbb\x48\x71\x2f\x6c\xe9\xa3\x9b\x0b\x37\x4d\x45\x53\x12\x63\x11\xba\x6e\x41\xbb\x20\x36\x04\x2e\xbf\x43\x45\xd3\x8e\x50\x4d\x6a\x2e\x12\x12\x23\x32\x58\x70\xbd\xad\xb2\x0f\xeb\x74\x65\x3a\xe4\x26\x5f\x71\x98\xff\xa5\xb1\x17\x3a\x96\x2a\xbf\x56\xd4\x89\xc3\x24\xac\xd9\xc5\x6c\x15\x8c\x4a\x55\xcf\x0b\x74\xc9\xd5\x95\x3d\xdc\x3b\x5b\xaf\xcc\x88\x05\x37\x85\x3b\x63\xad\x3a\xe3\x75\xd3\x2a\xd2\xbb\xd8\xcc\x14\x1b\xa3\x83\xca\x54\x81\xbe\x9b\x6c\xd0\x82\xb3\x19\x9d\x5b\xeb\xfb\xa4\xc6\x0c\xcf\xc9\xd8\xcf\xf6\xb8\xa3\x7a\x38\x89\xbe\xa8\x77\x96\x0a\x5a\x54\x98\xc6\x03\x07\x73\x89\x89\x33\xe8\x05\xd0\x80\x75\x80\x7a\xc8\x4d\xf3\xd3\x3c\xf2\xb0\x71\x6a\xe4\xc6\xb1\xfb\x95\xf9\xe3\x51\x82\xf5\x88\x15\xf8\x2a\xc0\x30\xda\xb0\x53\xd3\x0c\x46\x63\x26\x96\xa4\x21\xda\x22\x30\x0e\xd4\x78\xbd\x7f\xc9\x70\x4d\x0b\x77\xc2\x4e\xab\x8a\x17\xc6\x27\xd3\xb7\x2a\x73\x74\x59\x1b\xbb\x75\xdd\x2a\x3c\xad\xc8\x31\xba\x30\x14\x15\x9c\x55\x4b\x7d\xfe\x24\x51\x0e\xa2\x60\x37\x7f\x9a\x25\x99\x82\x7f\x4d\xc4\xbe\x6e\x54\xca\x61\x53\x19\x4e\x0d\xc2\xb4\x28\xe3\x8c\x20\xc2\x94\x58\xea\xfd\x37\xe1\xe5\xb5\xde\x82\xbd\x6f\x27\x53\x6d\x24\x42\x5e\x73\xc0\x5d\x13\xa1\xae\x79\x00\xaa\xe9\xe0\xd4\xbc\xc0\xd4\x2e\x84\x60\x98\x82\xc2\x8c\x9f\xde\xb6\x68\x78\x79\xbc\x41\x34\x21\x3e\x4b\xec\x81\x6e\x71\xc2\x4b\xad\x34\x09\x62\xe4\x93\x3f\xa3\xc6\x81\x78\xa1\x3b\x77\x0b\x1e\x3f\xac\x3a\x6d\x0a\xdf\x61\x5a\xe9\x03\x9c\xd8\x81\x75\xd6\xc5\xb4\xa8\x4c\xa6\x58\x85\x05\xe7\xef\xd3\x66\xb1\x69\x5d\xbd\xcc\xb0\x62\xc1\x25\x61\x20\x2f\xb1\xcf\xe0\xf1\xf9\x05\x56\xc4\x94\xe6\x2e\x4e\x45\x11\x5f\xcc\x10\xa9\x1b\xb5\x1c\x21\x72\x47\xc4\x52\x2d\x00\x6d\xe0\x79\x43\x41\xac\x51\x89\x6a\x5c\x06\xbb\x63\x84\xb8\x73\x40\x27\x36\x0f\xf7\x83\xb5\xc9\xda\x4a\x19\x0b\x8d\x4a\x9f\x46\xb1\xeb\x5d\x93\x9b\xce\x06\xa5\x0a\xcd\x9c\x74\x34\x08\xa8\x54\x6b\x1a\x47\x5c\x8b\x32\x9e\x85\x77\xd0\x8b\x20\x75\x44\x6f\x89\x1a\x3f\x80\x7b\x12\xd7\xbc\x65\xca\xf0\xd4\x18\x8b\xc1\x6b\x79\x26\xc1\xe6\x19\xf1\x72\x4f\xaa\xdb\xa3\x3c\x57\x3b\x2e\x1d\x35\xc5\x24\x47\x9e\x32\x56\x8a\x08\xf6\x1d\xfa\x9f\xc3\xbf\xff\xee\xd7\xf1\xd1\x9f\x0f\x0f\x7f\x7a\x39\xfe\xcf\x9f\x7f\x77\xf8\xf7\x63\xf8\xc7\x7f\x1c\xfd\xf9\xe8\x57\xf7\xc3\xef\x8e\x8e\x0e\x0f\x7f\xfa\xcb\xfb\x37\x37\x93\xf3\x9f\xe9\xd1\xaf\x3f\xb1\xb6\xbe\x35\x3f\xfd\x7a\xf8\x13\x39\xff\xf9\x33\x5f\x72\x74\xf4\xe7\xdf\xc6\x47\x1f\x53\x43\xed\xf9\x02\xed\x99\xc2\xec\x4f\x12\x64\xb7\x32\x76\xe7\x87\xdf\x5e\x81\x6b\xc7\xdf\x46\x27\x3e\x76\xfc\x45\xb2\x4f\xe6\x62\xd6\xb5\x4f\x25\xe2\x35\x55\x8a\x94\xf6\xee\x0d\xb8\x6f\x56\xfc\x41\x56\x60\x01\x6d\x15\x86\xdb\x3b\xe0\x60\xe9\xdc\x48\xd1\xdd\xf2\xf7\x2b\x78\xc0\x18\xa2\x75\x53\x91\x9a\x30\x05\x82\x67\xec\x6c\x5b\x70\x27\x1e\x77\x23\x28\x8c\xc3\x83\x3c\x14\x84\x94\xb6\x93\x83\x6c\x0c\x9e\x41\x36\x0e\xb2\xf1\x53\x4f\xb2\x4f\x3c\x87\x60\xbc\x0a\x3b\x61\x7d\x59\xd2\x69\xca\xe0\x21\xf7\x14\x09\x7c\x06\x40\x89\x3b\x5a\xb6\xb8\x0a\x99\x64\x1d\xb9\x68\x9c\x04\x00\xd7\x4e\x1f\x1a\x02\x61\x5a\x72\x47\x2a\xdf\x09\xe3\xa6\x3f\x46\x7f\x35\x70\x9e\xd0\xd0\xec\x3b\xd4\xe3\x02\x72\x9b\x86\xdb\x67\x84\xb0\xa6\xee\x81\x5c\xe9\x92\x47\x1b\x75\x49\x18\x7a\xb7\xc5\x4d\xc5\xa9\x97\x1a\xd5\x72\x84\x24\x51\x26\xc7\x66\x41\x56\x96\x09\x4b\xf4\xe2\xb4\xba\xc7\x4b\xf9\xc2\xc7\x24\x29\xa3\x6a\xa5\xf8\x40\x54\x1f\x80\x1b\x56\xbf\x70\xc6\xb5\xce\x0b\x55\x15\x66\x33\x52\x44\x5a\xb3\x86\x83\x63\xbd\x6f\x16\x8f\xae\x28\x6b\xf5\x68\xdd\xac\x92\x12\x71\x16\xd5\x10\x79\xa0\x0a\xb5\x4c\xd1\x4a\x2b\xeb\x48\x90\x79\x5b\xe1\xd0\x11\x68\x47\xe6\x60\x72\xe5\x31\xfa\xc0\x0a\x12\x7e\x39\xce\x53\xbd\xd2\x80\x56\x1e\x2a\xa2\x48\x39\x82\x57\xf7\x87\x2e\x0d\xd0\xac\x77\xf2\xfd\x52\x46\x35\xef\xe6\xd2\x03\x89\x8e\xcd\x81\xf2\x28\x07\x54\xd2\xd9\x4c\xb7\x0c\xc6\x36\xe3\xa2\xc6\xeb\xbd\xc2\xac\x8c\x6a\x5d\x9f\x5c\x48\x2f\x09\x59\x7e\xa1\xb2\xcb\x0b\x49\x4b\x52\x60\xf1\x22\xac\x09\x72\x5a\xa9\x05\x6f\xe7\x8b\x6e\x57\xa4\x4d\x39\x92\x0a\xe0\x55\x7a\x32\xa5\xf3\x5c\xac\x6c\x36\xa9\x75\x16\x56\x10\xa3\x5a\x71\x62\x04\xc6\x3d\x8e\x6c\x7b\x0d\x02\x60\x30\xdd\x66\xcd\x5d\xce\x15\x60\xf8\x48\x19\x24\xc8\x31\xf2\xa0\x32\x0c\xf8\x18\x5d\x18\xc2\x8b\x51\xff\xad\xbd\x29\x31\x93\x11\x60\xd8\x1c\x1a\x33\x12\xc0\xb7\xd2\x00\xf5\x29\x66\xc0\x4b\x6c\x5e\x8e\xd9\xd2\x65\x74\x00\xc6\xcc\x64\xa2\xf9\x24\x93\x2a\xce\x87\xee\xcf\xd2\xb3\x97\xd9\xe9\x9d\xd0\xab\xb6\xda\x5d\xf4\xf2\x2a\x2c\xf0\x51\xd9\x02\x3c\x42\xf7\xc8\x65\xf5\x2c\x48\x71\x6b\x4e\x5e\x49\x8c\x78\x23\x96\xe7\x36\xf5\x74\x2d\x78\x5b\x95\x86\x55\xb7\x93\xce\x20\x69\x0d\x84\xd2\x74\x03\x0b\x82\x88\xb6\x10\x80\x7a\x84\xc6\x89\x6f\x2e\x4a\xbd\xbd\x8d\x48\x86\x17\x1b\xaf\xb6\x4b\x77\xb1\x5d\x02\x29\x5f\x70\x66\xee\xc9\x91\xbd\xb9\x6b\x4c\x59\xac\x6a\xd7\x8d\x81\xce\x19\x17\xe0\xb4\x9e\x21\xc6\xfb\x7d\xe8\x1f\xf9\x95\x5e\x44\xeb\x1c\x1e\x87\xb4\x51\xdb\xe9\x96\xd3\xb4\x7f\xbf\x20\xda\x5a\xeb\xf7\x25\x56\x6c\x07\x2b\x2a\xb4\x44\x3c\xd6\x9d\x91\x4a\x60\xa0\x49\xb6\xf9\x14\x22\x76\xe3\x6b\xa5\xfb\x54\xa1\x9a\x4b\x85\xbe\x79\x19\xcc\x71\x92\x1f\x6d\x8c\xe0\x24\x42\xc0\xcf\xab\x29\xc0\x74\x81\x21\x17\x2a\xf6\xad\x17\x25\x61\x8a\x16\xb8\x0a\x3a\xaa\x2f\x89\x19\x17\x53\x5a\x96\x04\xa0\xed\x50\x10\x02\x4c\xce\x48\x4b\x17\x54\xd7\xae\x81\x00\x03\xd2\x6d\xac\xf7\x3f\x5c\xdf\x40\x0c\xb3\xaf\xef\x75\x36\x7f\x9c\x6a\x74\xa7\x87\xa0\xb4\x50\x08\xf7\xb3\x51\x67\x7b\x2d\x7d\x1d\x90\x3e\x3d\x1e\xbd\x53\x02\x47\xcf\x82\xdf\xaf\xcb\x11\xaa\x55\x36\x56\x46\x27\x3c\xee\x01\x8e\xcf\x6c\xfc\x1d\x61\xef\x4c\xe3\xfb\x80\xe6\xba\xf6\xb9\x91\x7a\x63\x63\x9b\x19\x89\x6f\x09\xd3\xa2\x6c\x7d\xe1\x67\x9e\x43\x8b\x0a\x70\x77\xa5\x50\x43\xc1\x69\xc6\x8a\x4a\x7d\x9a\xcd\xc5\x08\xe1\xa6\x86\xdb\x0a\x6e\x1e\xf7\xfc\xc2\x6e\xce\x17\xfa\xb2\x76\xc2\x3e\x8d\xd3\x3a\x43\xe0\x33\x83\x77\x44\xcf\xea\x19\x2f\x53\x7c\x5c\x2b\x70\x07\xaf\xf4\x98\x94\x19\xb8\x6f\x4b\xa3\xf3\x80\xc2\xa3\xd7\xb5\xbf\xaa\x5f\x07\xce\x41\x9f\x49\xac\x78\xbc\xbf\x2b\x0f\xd6\xc1\x75\x63\xbf\x42\xd8\xbd\x4d\x21\x48\x65\xae\xe3\x05\x6d\xd0\x94\xa8\x7b\x42\xd8\x66\x3d\xad\x24\x87\xf2\xc8\x39\x6a\x12\x3b\xd1\x41\x43\x0d\xc4\xf6\x18\x4d\x7a\xc7\x1c\x2e\xf7\x74\x66\xb7\x0b\xf6\xdd\xaa\x88\x02\xc3\xcb\x89\x19\x27\xc2\x36\x8c\x15\x00\x52\x69\x70\x2e\x3f\x58\x02\xd6\xc6\xda\x98\x93\x87\x77\xc9\x55\xda\x08\x93\x87\xa6\xf5\x3b\xeb\x30\x78\x92\x51\x66\x42\x92\x58\x1c\xf7\x1e\x9d\xc2\xfe\x55\x6b\xe7\xce\x6e\x7d\x2f\x9c\x7b\x10\xbc\x40\x7c\xa7\xee\x1c\x6f\x53\x7c\xfb\x2d\x22\x26\x50\x95\xc1\xae\x70\x4f\x1e\xca\xcb\x2c\xa4\x97\xf9\x78\xae\x51\x36\xae\x6b\xf4\x11\x58\x48\x1c\xbb\x6b\x66\xa4\xb9\x24\x45\x2b\xa8\x5a\x6a\x5b\x80\x3c\x44\x39\xac\x73\x9c\x95\xeb\x7e\x37\x7a\x41\x15\xd7\x45\xc4\x1b\x53\xc1\x63\xa5\x3c\x76\xe7\x71\x69\x19\xf8\x8a\xe3\x76\xf4\xc5\x4c\xaf\x88\x71\x8f\x40\xa0\x04\x40\xcb\xab\x1d\x73\x41\x17\xa3\x63\xfd\xb3\xa5\x77\xb8\xd2\x62\xb8\xfb\x8b\x09\x64\x68\x86\x7f\xf4\x94\xc8\x76\x85\xe5\x6d\x17\xde\x25\xe3\x86\x97\x5d\x34\xf7\xc4\x4d\x1d\x7c\x44\x1e\xd4\x17\x88\x6a\x07\x29\x35\x11\xf4\x8e\x56\x64\x4e\xce\x65\x81\x8d\x0a\xb3\x6b\x64\xc4\xe9\x23\xfd\x82\x9d\x29\x78\x25\xbd\xef\x09\xbb\xfc\x74\x70\xc2\xcc\x31\x65\x50\xdb\x39\x41\x5b\xb5\x8d\x4a\x93\x20\x4f\x95\x44\x0d\x16\x7a\x17\xba\x44\x78\x13\xcf\x98\x72\x5e\xd9\x62\x40\xd5\xb2\xeb\x17\x8d\x87\xb0\x82\x03\x9d\xff\xc2\xc8\xfd\x2f\xba\x17\x12\xcd\x2a\x3c\xef\xe2\x29\xfa\x62\x5b\xd5\x27\x93\x73\xf3\x1f\x9d\x68\xa8\x74\xd3\xea\x7b\xec\x1e\x2f\x65\xc7\x5a\x10\xba\xdd\xe3\x6f\x94\x57\x47\x20\x4f\xb0\x44\xbe\xed\xb8\x78\x8f\x7e\xbe\x39\x02\xe7\xfe\xd9\xe9\xe4\x97\xeb\xbf\x5d\xff\x72\xfa\xfa\xfd\xc5\x65\xf4\xcb\x2e\xb9\x22\x06\xda\x12\x04\x75\x0b\x9f\x4e\xa3\x57\xc1\x67\x64\x1d\x73\x79\x0c\xb8\x55\xa0\xcc\x65\x25\xbf\x4f\x04\xf7\xeb\x3d\x45\x70\x9c\xf7\x04\x37\xcd\xa9\xa8\xb9\x98\x08\x3e\xa3\x55\xb4\xc6\x9f\xeb\x04\xaf\x74\xc7\xc1\x7c\x4f\xed\xc7\xdd\x75\x63\x58\x1c\xd7\xb3\x49\x82\x2b\x83\x02\x57\xa0\x7e\x4d\x3c\xac\x68\x35\x9c\x7f\x20\x57\xbb\x18\x7f\x88\x76\xba\x67\x76\xce\x91\xa5\xbb\x11\xf9\xe7\x39\x5c\x03\x15\x2f\x70\x05\x55\xa2\xd3\x36\x3e\xca\x6c\x98\xac\xf6\x2b\xe0\xf4\xc0\x6e\x3b\xa3\x8a\xe3\xd2\xc4\xb0\x8c\xf0\x2f\x89\xab\x5d\xe6\xd4\x2e\xc8\x5a\x48\xea\xc8\x8d\xe1\x53\x80\xf6\x1c\x09\x49\x23\x88\xd7\x6a\x56\x9a\xe7\xa6\x64\x5b\x52\x93\xef\xfb\x39\x20\x76\x94\x3d\xba\xac\xd4\x33\xe7\x9b\xb1\x07\x8c\xce\xc0\x9f\x02\x7e\x4e\x6d\xa8\x2f\x1b\xe3\xe0\x7c\xe7\x96\x21\xa1\xbc\x6c\x26\xe3\x19\x5e\xb2\x27\xbb\xd3\xcc\x8f\xdf\x91\x26\x19\xfc\x96\xea\x19\x9c\x75\x42\xda\x6d\x1b\xa7\x83\x98\x8c\xf0\xc4\xfd\xf8\x23\x14\x32\x77\xf2\x3f\x83\x73\xca\x2f\x31\x1a\x07\x47\xab\x11\x64\xbc\x7e\xbc\x52\xed\xfd\xab\x96\x29\x5a\x13\xc7\x30\x3a\x5e\xd1\x89\x84\xf9\xf5\x81\xf4\xf5\x7c\xb2\x6c\x74\x84\x7e\x60\x70\x5e\x19\x29\xd1\x18\x31\xde\x2d\x11\x61\x33\x2e\x0a\x70\x3c\xec\x74\x83\x17\xb8\xc1\x53\x5a\xd1\x14\x61\x9e\x6b\x83\x43\x79\xcc\xa0\x3f\x80\x01\x2a\xcb\x93\x52\xf0\xc6\xdc\xc4\x8e\xfa\x2b\x3d\x2b\xb3\x4f\x31\x13\x56\x72\xb2\x9e\xa8\x5e\x47\xe6\x02\x33\xd5\xe1\xf7\xd6\x36\xce\xbf\xa3\x0e\x92\x43\x09\xc0\x65\xbe\x42\xb3\xa7\xa5\x96\x19\xe1\xb2\x25\x9f\xab\x7d\x2b\x5a\x73\xe6\x06\x17\x70\xcc\xa0\xc9\x87\xeb\x8b\xff\xb3\x72\x6e\xe2\x55\x3b\xf3\xec\x77\xc9\x0a\x2d\x0f\xb2\x6d\x9b\x2b\x5b\xe7\x7b\xd8\x38\x5f\xf7\xc6\xf1\x0e\xa2\x9d\xf3\x6d\x5f\xb5\x61\xc4\x99\xb2\xa0\x6b\xa8\x4e\xd2\x75\x26\x9e\x9a\xb2\xff\xd6\x10\xa0\x2b\x08\xd2\x5f\x61\x8a\x02\x5c\x3a\xf0\xd6\x2a\x6e\x4a\x59\x5b\xb5\x2b\xad\x14\x43\x78\xbb\xce\x70\x25\xbf\xd4\x2b\x32\xc5\xb5\xd3\x08\x5e\xbc\xe7\x2d\xcb\x43\xe0\x9d\xb0\xe3\x7c\x47\x50\x49\x18\x57\xd6\x9b\x02\xb6\x04\x9f\xc1\x6f\x91\xc9\x59\x0b\x6a\x73\xf4\xf4\x9c\x04\x35\xeb\x26\x50\xad\x3c\x7e\xc5\xe9\xe1\xc6\x7e\x69\xe5\x1a\x30\xd2\xea\x55\x5d\x0a\xdb\x2c\x01\xc9\x20\x08\x2e\x0d\x90\x06\xab\x85\x21\x8d\xaf\xb1\xbc\x25\xa5\xf9\x20\x91\x30\xd3\x93\x63\x02\x14\xce\xcd\xf4\x8d\x9e\x5c\xc7\x59\x02\x0e\x61\x03\xb2\x05\x06\xcd\x14\x53\x6c\xa7\xa7\x21\x41\xb0\xeb\x45\xf8\xc0\xaa\xe5\x15\xe7\xea\x7b\x5f\x13\x7f\xd7\x27\xe3\xaf\x1e\x0a\x1b\x3a\x31\xc1\x2f\x8d\xa1\xcb\x63\xd8\x38\x20\x17\x83\x4a\xfe\xa9\x62\x51\x2f\xc8\xbf\xab\x54\x14\x2d\x3b\x95\x6f\x04\x6f\xa3\x75\xb8\x9c\xf6\xe6\x9b\x8b\xd7\x70\xf1\xb5\x96\x53\x99\x29\xb1\x6c\x38\x65\xca\x79\xbc\x32\x06\x6d\x7e\xb0\xec\xd5\xa1\x64\x4b\x26\xaa\x45\xe8\x3d\x5e\x22\x5c\x49\xee\x5d\x6a\x6c\x53\xb8\xd5\xc5\x72\xf5\xaf\xa7\x5c\x2d\xd6\x82\xb8\xb1\xa9\x3b\xfa\x59\x6f\x6f\x14\x50\x33\x77\x80\x18\xca\xd6\x9a\x55\xc0\xea\xd2\x08\x52\x90\x92\xb0\xe2\x4b\x3d\x11\xbb\x66\x0a\x86\x53\x75\xc9\x99\x16\xaf\xbb\x3e\x57\x17\xde\x3f\x69\x57\x23\x3c\x45\xe0\xca\xb6\x41\x44\x0c\xac\xda\x20\x5c\x5b\x99\x82\x3c\xbd\x98\x41\xd4\xd3\x6c\xba\xbf\xb4\x53\x52\xe9\xc5\xa6\x55\xe5\xd0\xf6\x06\x9a\x40\x6b\x3c\x27\x08\x2b\x7f\x08\x15\x47\x84\xc9\x56\xd8\x7d\x13\x99\x55\xa5\x1f\x9f\x10\x66\x87\xf6\xc3\xc5\x6b\xf4\x12\x1d\xea\xb1\x19\xc4\xe0\x0c\xd3\x0a\x88\xba\x1d\x56\x37\xb4\x01\x66\x2e\xa7\x2c\x69\x0a\x40\x8e\x20\x2e\xcc\xd5\x32\x42\x8c\x23\xd9\x16\x8b\x20\xe3\xc0\x7b\x84\x6d\xd5\xa6\x24\x22\x92\x41\xec\xe4\xbb\x0f\x7f\x90\x24\x1a\x22\x9b\xf3\x3a\xfc\xe1\x19\xaf\xc3\xd0\x44\xd4\xc7\xbf\xbf\x60\xe6\xac\xd6\x44\xe1\x12\x2b\x6c\xaf\x49\xf7\x85\x61\xd7\x0e\x97\x65\xc2\x65\x29\xc9\x3b\xca\xda\x07\x53\x17\x65\x2f\xc2\x1e\xd7\xe7\xd0\x23\x54\xb8\x85\xe6\x41\xdc\xce\x45\x28\x32\xa4\x68\x5c\xf4\x8e\xd1\xe8\x11\xab\x1b\x6e\x09\x6c\xb8\x37\x21\x8b\x12\xb3\x92\xd7\x6b\x9d\x9c\x71\x81\x08\x2e\x16\xd1\xbd\x09\x50\x23\xc3\xc1\xb4\xcf\xbf\x77\x40\x08\xd2\x57\xb3\xf9\xf6\xdf\x41\x32\x2c\x95\x7e\xe7\x9a\xec\xd8\x0a\x4f\x49\x65\x69\x71\x0d\x57\x7a\xc6\x13\x96\xc9\x07\x2e\x78\x46\x48\xcc\x15\x37\x48\x2e\xec\x27\x42\xbf\xfe\x8b\x98\x87\xac\xe0\x8b\x1b\x8b\x2e\xe9\xe6\x01\x7c\xa0\x5f\xc2\x3c\xb4\x09\x0a\x22\x5a\x9d\x07\xad\x6d\xf6\xe7\x01\xf4\xaf\x7d\x9f\x07\x49\x8a\x82\xd7\xcd\x9e\x20\x25\x6f\x0c\x0a\x5f\xf7\xe8\x73\x51\x91\xfd\x2f\xe3\x24\xb8\xb3\xad\x76\x85\x95\xb9\x07\x5d\xc9\xab\xff\x1d\x5c\xe7\x20\xed\x56\xef\x78\xdb\x7a\x32\x22\xd3\xb7\x68\x5f\xf8\xef\x78\xe3\x0d\x30\xcc\xde\xf3\xec\x30\xcc\x80\x31\x1f\x83\x7b\xbe\x07\x89\xfc\x1a\xc0\x98\xda\x08\x80\x79\x25\x0c\x58\x80\x1a\xac\x16\x23\x9b\xb1\x7a\x47\x9c\x78\xbe\x35\x1e\xaf\x03\x90\x38\xae\x43\x4e\xdc\x74\x98\x55\xc3\xa4\x9f\x15\xbb\xb9\x09\xaf\x69\xbe\x73\xf9\xe1\x26\xe4\xd1\xc7\x6c\x69\x38\x22\x13\x58\xcd\xcc\xb3\x7f\x6a\xc5\x53\x62\x3a\x57\x57\xf1\xa9\x21\x9d\x49\xef\xdb\x8c\xe8\x7c\xbe\x53\xfa\x79\x28\xcf\x55\x8c\x67\xd6\x2e\xac\x02\x3e\xd7\xdb\xc8\xb0\x72\xc9\x47\xc0\x5e\x9d\x7b\xe4\x00\xf9\xab\xe9\x91\xb3\xb2\x0b\x47\x5a\x28\x43\x27\x08\xae\xaa\x2c\x98\x84\x4d\x5e\x10\x77\x0a\x3c\x95\xfc\xba\x37\xa0\x5f\xd3\x34\xa5\xf5\x4f\x78\x30\xbe\x6c\x4f\x44\xa5\x2d\x8a\x2f\xdc\x0f\x31\xaf\x25\x3e\x13\xa4\x34\x38\xa9\xeb\x86\x14\xfb\x72\x5b\xbc\x79\x7f\x7d\xda\xef\x19\xe8\xc2\xb6\x70\x06\x81\xdf\x23\x5c\xd6\x54\x4a\x08\xf8\x90\xe9\x82\xf3\xdb\xa4\x26\x0f\x5d\xaa\xed\x9c\xaa\x45\x3b\x3d\x2e\x78\x1d\x64\xdd\x8e\x25\x9d\xcb\x13\x2b\x51\xc6\x7a\xe2\x8e\x10\x65\x95\xcf\x54\x06\x6f\x21\x70\x81\xc5\x53\xc9\x85\x83\x47\x85\x1f\x3d\x6c\x3d\xc8\x4f\xf1\xd0\xec\xf5\xe9\x81\xea\x26\xb0\x79\x77\xae\x75\xac\xef\xaa\xb4\x6a\x83\x2b\x3b\xeb\x91\xb1\x87\x95\x3a\x6c\x14\x67\xe3\x3c\x1a\xe3\x75\xe7\x93\x64\x95\xfe\x82\xc8\x24\x04\x6c\xce\x33\xf7\xb6\xeb\x52\xc8\xa5\x47\x67\x3d\x46\xa8\x7e\xce\x3d\x84\xb7\x0f\xf4\x5f\x3a\x58\xe6\x41\xae\xe2\x32\xa7\x55\xa5\x17\x12\x5b\xe2\xb5\x00\xdd\x09\xa6\x49\x9f\xd1\xce\x70\xee\x6a\x63\x21\x1c\x05\x5c\x24\x69\x42\xc1\xf0\x9e\xe9\xcb\xc0\x72\x66\xe8\x0d\x04\x6d\x63\x54\xd3\x07\xdd\xc3\xb0\xc5\x3e\x49\x2c\x04\xfe\x37\xff\x3a\xa1\x80\x35\x02\xf0\x81\xe7\x4c\x1f\xe9\x15\x0a\x1b\x71\xc9\xd1\x4a\x5f\x5b\xfa\x17\x97\x44\x69\x43\xcd\xcc\x5b\x18\x7d\xd0\x86\x95\x68\x33\x1c\x86\x94\xc8\x30\x0a\xa3\xc3\x59\x25\x45\xe2\x79\x80\x48\xb1\xed\x93\xd6\x41\x9c\xf2\xf6\x5c\x91\x63\xb4\x21\x7d\xe7\xd9\x22\xc8\xe8\xf3\xa3\xc8\x4f\x18\xab\x42\xfb\x12\xaf\x4a\x94\xfa\x21\xd7\xef\xce\x78\x56\x42\xbe\x61\xba\x0e\x5e\x9a\xf0\x72\x8d\x86\x18\xc8\x8c\x29\xae\xe2\x0b\xb9\x5e\xcc\x42\xea\x4e\xc6\xad\x7b\xc4\x54\x10\x37\x38\xfd\x07\x52\xb4\x8a\x94\x96\x8d\xdc\xba\x94\x0d\x93\x71\xbf\x37\xd1\x3d\x70\x49\xfa\x53\x02\x00\x25\x39\xea\x4a\xb1\x59\x5b\xc7\xf3\xbb\x8e\xd0\xff\x05\x29\x29\x1d\xa1\x56\x45\xef\x08\x23\x52\x4e\xfc\x9f\xc7\x4e\x05\xe0\xa8\x0b\xcc\x9c\x6d\xa5\xcf\xb4\xf5\x70\x5b\xd6\x71\xcb\xe3\x31\x25\xa8\xc1\x02\xd7\xfa\x0e\x96\xc8\x2e\xcf\x94\xcc\xa9\x49\x0b\x0c\x2e\x45\x4f\x5b\x1e\x47\xaa\x0b\x86\x0d\x55\xa8\xa6\xf3\x85\x39\x2d\x08\xa3\x8a\xb3\x39\x72\xb8\xb1\x8a\xe3\x12\x81\x60\xe1\x02\xdd\x63\x51\x6b\x5d\x00\x17\x0b\x00\xa1\x61\x86\xca\x56\x9f\x07\x04\x24\xdb\xcb\xb1\x54\x58\x11\x4b\x86\x17\xed\x83\x73\xd3\xb4\x83\x12\xb1\x4f\x5d\xfe\x7e\xc7\x7c\x3a\xfa\xa4\x65\xf1\x82\x9c\x3f\x90\xc2\x1f\x6b\xc3\x38\x5d\xd7\x40\x18\xc8\xdd\x71\x76\x6c\x71\xc9\xca\xe0\x9e\x98\xca\x76\x84\xfb\xa2\x9b\x9c\xd9\x09\xa7\xce\xfa\x34\x3f\x6a\x7b\xb4\xbf\x08\xd2\x05\xb1\x82\xa2\x49\xc0\x8e\xcd\xc5\xad\x3e\xb9\x86\x23\x88\x0b\x5f\xad\x3f\xa9\x5b\xae\x1f\x40\x99\xcd\xb9\x42\x87\x07\x27\x07\x47\x6b\x7b\xe1\x40\x86\x69\x06\x26\x23\xba\x1b\x90\xa4\x75\x53\x2d\x61\x0c\x07\xa6\xe4\x77\x22\x81\xa1\x03\xac\xfa\xf2\x97\x72\x41\xaa\x6a\x84\xa4\x56\x7f\xb1\xab\x21\x62\x3e\xd5\x5f\x52\xa2\x2d\x8c\x9b\xec\xf0\xe0\xd7\x83\x11\x22\xaa\x38\x42\xf7\x9c\x1d\x28\x13\xf0\x40\x37\x60\x43\x26\xf5\xc9\x77\x62\xc9\x5b\xc4\x08\xb1\x67\xc7\x17\xab\x2a\xb0\x36\x7f\x5a\xa3\xa3\x1b\xd2\x0d\x52\x55\x69\xfa\xdc\xf9\x03\x55\x5a\x15\x51\x2d\xb8\x29\x5e\x1a\x4b\x81\x00\x0f\x3d\x96\x70\xd3\x9d\x2c\x08\xae\xd4\x62\xe9\xad\x97\x7f\x11\xc1\xa1\x3e\x29\xb3\xbf\x49\xd7\xa1\xf6\x20\x6d\x74\x7f\x13\x38\xb5\x82\xd1\x0a\x72\xb3\x10\x44\x2e\x78\xb5\xf3\x34\xce\xf7\xb6\xdc\x5b\xc1\x99\xd4\x32\x45\x9b\xd8\xb6\x8f\xd2\x67\xd0\x19\x9d\xc5\xd6\x57\xe0\x70\xca\x04\x29\xad\xb2\x64\x4b\x5e\x2c\xf0\x1d\x68\x0a\x5a\x9f\x23\x65\x8a\x69\x12\xda\x44\xbf\x3f\xf6\x3d\xf4\x69\x77\xaf\xf6\x04\xb6\x19\xc9\x1d\x39\x17\x4d\x9e\x5b\xfa\xcd\xd5\xe4\xac\x77\x4b\xc3\x07\x6f\xe1\x18\x9f\x2d\x48\x71\x7b\x95\x56\xcd\x75\x4f\xa0\x05\x0d\x17\xbb\x54\x0c\x74\xf3\xd9\xb4\x82\x09\x17\x0a\xb1\xb6\x9e\x12\xe1\x1c\x0a\x73\x58\x45\x22\xee\x68\x41\x8e\xd1\xa5\xf9\x9d\x0b\xce\xbb\xea\xc3\x98\xcd\x09\x7a\xa5\x0f\xc4\x1f\xbf\xfd\xf6\xf7\xdf\xa6\xcb\xe8\x74\x22\xd5\x3c\x24\xaa\x76\xe0\xfb\xa2\x76\x5d\x9b\xee\x6c\x72\x36\xdb\x9e\x82\x51\x57\xe1\xc2\xaf\xcd\x7c\xf3\xa1\x4b\xf3\x4a\x4a\x42\xd0\x86\x70\x85\x16\x1d\xe6\x3f\xd3\x8a\x4f\x4f\x6a\x2c\x15\x11\xda\xc6\xb1\xd7\xfa\x18\xe8\x86\x29\x9b\x1f\xd7\xe5\xd1\x71\x5a\x14\xdc\x99\xd5\x6b\x25\xe5\x7a\x34\x33\x8f\x94\x87\xd3\x93\xb2\x73\x17\x3c\x72\xbd\xfc\x0e\xbd\x88\xab\x26\xa6\x97\xe0\x0d\xc9\x93\x89\xf6\xf6\xe6\x66\xf2\x86\xa8\x50\x60\x33\xf8\x10\xbd\x39\xbf\xf1\xe5\xc6\xf5\xee\x32\x49\x4d\x83\xd4\x4e\x91\xda\x0b\x9e\x56\x6f\x3e\x77\xdc\xc5\x88\x12\xa8\x8d\xc6\x18\x29\xf4\x42\x8f\x7a\x95\x6d\x1d\x0e\xf1\x62\x72\x8c\xfe\xc6\x5b\x50\xb9\xf0\xb4\x5a\xa2\x7b\x6c\x18\x0d\xe2\x28\xa5\xbb\xe7\x85\xee\xc6\x0b\x2d\xb5\xf4\xae\x7e\x4b\x70\x69\x6a\x55\x82\x6b\x67\xe7\x67\x35\xe8\x53\xb6\x65\x3b\x6b\xa5\xe2\x35\x5a\xd8\xa1\x9a\x39\xec\x0a\xfa\x1b\xdd\xc8\x1c\x41\x88\xfd\x48\x24\x48\x63\xac\x25\xfb\x37\x5f\x85\x2d\xb4\x26\x85\xcc\x3c\x07\xd5\x80\x30\x2a\xc2\xa9\xb2\x8a\x3e\xb8\x30\xa9\x95\x51\xd1\x2e\xb1\xee\xc9\x52\x55\x04\x65\xaa\x2c\x82\x40\x48\xe9\x43\x99\xfc\x92\xf4\x20\x64\x9e\x1a\x25\xfa\x61\x89\xe1\x35\xf3\xe4\xad\x90\x80\x6c\xa8\xcd\x6e\x2e\x03\xc0\xd1\x1d\x4d\x65\x25\x44\xce\x99\xec\x0b\xa8\x62\xc6\x19\x2d\x4c\x38\x03\xb5\x0d\x67\x88\xb7\xaa\x69\x15\xb8\x82\x0a\x2c\xc9\xf8\x0e\x0b\xaa\x05\xaa\x6e\xbf\xfb\xc3\x96\xe9\xd3\xae\x38\x07\x3f\x89\x0f\x3a\x9b\x1e\xa7\x77\x33\x93\x36\x83\x5c\x01\x8c\xcc\x2b\xbc\xb6\x38\xe9\x3b\x1a\xed\xb5\x0f\x06\x99\x1a\xe2\x8b\x7c\x66\x1d\x56\x0b\x40\xf6\x41\x2c\xcb\x01\x43\x41\x70\x6a\xb3\x61\x0f\x12\x6f\xb2\x5a\xb1\x89\x22\x01\xe2\xed\x5c\xac\xd8\xc1\xba\x87\xeb\x73\x98\x09\x6b\xf2\xf4\x66\xb5\x1d\x96\x6b\x01\x33\x74\x71\x7a\x79\xfa\xcb\xf5\x8f\x67\xbf\x5c\x9e\xbe\x3f\x4f\x79\x75\x72\xed\xf8\x9c\xd5\xe3\xb3\xd5\x8f\x7f\x82\x0a\xf2\xee\x91\xc5\x82\xec\x0f\xcc\xe4\x1a\x7a\x13\x92\x92\x59\x1b\x20\xa8\x87\x9c\xc6\x52\x87\x56\x9c\xa6\x5a\xf0\xec\x54\xe2\x58\x54\xc1\x6b\x52\xe1\xe5\x35\x29\x38\x2b\x77\x8e\xce\xbe\xf4\xc2\x46\x9a\x0e\xf9\x32\xd0\x64\x85\x31\xcb\x15\x82\xb5\xc5\xab\x1d\x3e\x20\x84\x34\x98\xf1\x45\x47\xad\xd1\xfe\x45\xae\xd1\xde\xb8\xc7\x1b\x22\x28\x20\x82\xf6\x61\xd7\xbc\xe5\xf7\xb6\xa2\xfb\x21\x65\x6e\xe7\x1c\x05\x5e\x9a\x2e\x3c\x92\xce\xa6\xa6\x38\x7a\xf5\xd2\x35\xf2\xf5\xc5\x3d\x2c\xd2\x67\xaf\x23\x5f\xb6\x8f\x9f\x0e\x7d\x75\xb0\xa5\x7e\xf8\x2b\x05\x3f\x84\x56\xc4\xf8\xab\x63\x9f\xa7\xf6\x0a\xfa\xe3\x45\x11\x66\xa5\x83\x9c\x7d\x7d\xfb\x44\x15\xcd\x35\x2f\x6e\x33\xb9\x5d\x6f\xce\x26\xe6\x6d\x2b\x78\x16\x73\x03\x6b\x2d\x93\x23\xac\xbf\x05\x0a\xe8\xe0\x74\xdd\x1b\xa7\xeb\x81\x49\xeb\xc2\xd5\x77\x5b\x3b\x50\x0f\x06\x6b\xab\x7b\x9c\xe2\x23\xfa\x15\x50\x06\x6b\xeb\x91\x67\xb0\xb6\xb6\x78\x4c\x12\x09\x80\x41\xdf\x08\x5c\x90\xc9\x3e\x29\x6f\x4e\x80\xa0\xb2\x15\xb6\xac\x9c\xd7\xe1\xbc\xb8\x60\x84\x94\x46\x7e\xd8\xa1\x10\x34\xd7\x23\x31\xf0\x68\xf0\x21\x76\xc0\xe2\x56\x24\xa8\x79\x37\x0b\xfb\x6a\xab\xe2\xba\x20\xf3\xa6\xde\x75\xb6\x49\xe3\xc9\xd0\x5d\xd5\x10\x7b\x9c\x74\xe7\xa1\xd4\x3a\x61\xf1\xee\x74\x1c\xae\x20\x92\x74\xae\xa7\xcb\x56\x86\x36\x18\x61\x5f\x7a\xaf\xeb\x88\x6e\x75\xc6\x45\x41\xa7\xd5\x12\x2d\x70\xa5\x8d\xa5\x7b\xaa\x16\x08\xa3\x5b\x5a\x55\xf6\x35\xf1\x13\x75\x4d\x6c\xae\xa6\xd1\x68\x2a\xce\xe6\x30\x19\xd8\xe6\x64\x3c\x34\xa4\xd0\x6d\x16\x15\xc1\xac\x6d\x4c\x3f\xb5\x7e\xb4\xe4\x6d\x86\xb4\x0c\x17\xf8\xf6\xfa\x14\xa3\x96\x7e\xc4\x14\x6e\xfb\xe8\x9e\xef\x27\xd7\xa2\x0f\x6a\x41\xc4\x3d\x95\xc4\x14\x92\x8b\xee\x93\xe9\x4b\xbf\x8c\x9c\xf9\xcc\x53\xa8\xd8\xcc\x41\xbd\x2d\x20\x95\x35\xba\xad\x1f\xe1\xbd\x4e\xb4\x32\xce\xc6\x8c\xcc\x0d\x51\x83\x15\x68\x06\xd1\x69\xda\x37\xf8\x41\x9f\x6d\x20\x15\x6f\x10\xad\x6b\x52\x6a\xfb\xb8\x5a\xa2\x3b\x8a\xa3\x7b\x02\xa4\x10\xdd\x8e\x42\x87\x8c\x23\xde\xe8\xab\xab\x65\x54\x2d\x21\xa2\xb7\x68\x15\x2a\xf9\x3d\x4b\xc8\xb7\xba\xb1\x30\x07\x8c\xa6\x44\x61\xeb\x03\xd7\x87\xc0\x73\xa2\x03\xdd\xb9\x3e\x7b\x90\x24\x70\xb3\x71\x03\x78\x9a\xf4\x39\x56\x09\x52\x62\x83\x36\x6f\xd6\xf3\xe3\xdb\x8e\x4a\x1b\xaf\x4b\xe4\x61\xde\x0f\x66\x43\x7d\xa2\x79\xab\xf6\xe4\x1e\x79\xcc\x75\x64\x28\x2e\x02\x23\x91\xd6\x44\x22\xde\x66\xaa\x37\xf1\xca\x36\x97\xd3\xc2\x1b\xfc\x4e\x1b\x1f\xa9\x4a\x1a\x55\x75\x38\xc7\x16\x7b\x84\xbc\xdf\xe6\xe1\x06\xfc\x95\xd3\x76\x36\x23\x02\x6e\x3a\xe8\xf0\x1a\xec\xde\xd7\xf1\x72\x77\x58\x9c\xf3\xd6\x02\xbe\x88\x1a\x41\xed\x00\x4b\x26\xf1\x48\x93\x96\x64\x13\xca\xf4\x0a\x22\x81\x0b\x9e\xa1\xf3\x0f\xdf\xc7\x6d\xd1\x1c\x95\x05\xd2\x52\x56\x61\x9c\x1f\x58\x1c\x26\x31\xef\x7e\xd8\xc4\xfa\x62\xb7\x45\x51\x71\x69\xd3\xa3\x61\x5d\x8a\x05\x66\x8c\x38\x67\x14\x55\xe0\xc9\x9e\x12\xc2\x10\x6f\x88\x01\xe5\x45\x75\x06\x23\x49\xd9\xbc\x22\x08\x2b\x85\x8b\xc5\xb1\xee\x1d\x73\x7b\xa1\xcb\x43\xb6\x9f\x48\x25\x08\xae\xcd\x9e\x10\xa4\xc6\xd4\x34\x8f\x70\x21\xb8\x94\xa8\x6e\x2b\x45\x1b\xff\xb2\x38\x2f\x22\x01\x46\x08\x69\xd2\x52\xdd\x5a\x41\x5a\x49\x97\xf0\x3c\xea\x7a\x68\x87\xcf\xc3\x62\x45\xe0\x3a\x1b\xe9\xdf\x92\xba\x51\x4b\x9f\x98\x18\x67\x03\xcd\xa8\x90\x0a\x15\x15\x25\x4c\xd9\x91\x19\xca\x41\xe8\xc3\xc8\xa9\xd3\xcc\xce\x88\xb4\x53\xc2\x4a\x30\xbe\x1b\x25\x4d\xfe\x9d\xef\x84\x7b\x55\x49\xa5\xf5\x75\xc8\xb8\xec\x3f\xec\x2a\xd3\x98\x8d\xe3\x66\x04\xb6\x8e\x53\x70\x4c\x8f\xec\x47\x41\x17\x82\x3a\xdb\x5d\xee\x64\x9a\x5c\x81\xf2\x31\xee\x5c\x8f\x7a\x9c\x03\x9d\x6d\x01\xa9\x30\x6b\x52\x07\x36\x14\x23\x77\xfa\x1c\x90\x82\x68\x55\x14\x67\x14\x32\xcf\x2e\x63\x02\x5d\xee\x3d\x91\x12\xcf\xc9\x24\x12\x8e\x90\x43\xe0\x74\x8e\x36\xc0\x31\x74\xdb\x66\x41\x0c\xd1\x95\xe2\xc1\x27\x61\x92\x57\x68\x3c\xd6\x66\x20\x51\x3d\x70\x46\xd3\xbd\xa0\x4a\x11\xd8\xa5\x50\xc9\x09\x00\x68\xab\xe4\x9d\xfd\xe4\xb2\xa8\xf6\xec\xa4\x87\xed\x69\xf5\x83\x95\x26\x4d\x6b\x4a\xd0\x54\x50\x32\x43\x33\x0a\x79\x63\x90\x51\x35\x32\x55\x08\x30\xe0\x76\xb1\x94\x44\xc0\xb0\xad\x5b\xc0\x0d\x3f\xae\x3f\x7f\xb5\xe3\x57\xa2\x65\x05\x0e\x4a\x74\x02\xb7\x18\x9d\xa1\x39\x64\x71\x59\x23\xf8\x0f\x2f\xff\xf3\x8f\x68\xba\xd4\xfa\x1a\x18\x62\x8a\x2b\x5c\xb9\x0e\xa0\x8a\xb0\xb9\x5e\x45\x10\xb9\x71\x72\xa3\xc7\x4f\xe5\x17\xa7\xa2\x35\x55\x66\x82\x5e\x7d\x73\x3b\x4d\x3a\x7a\x20\x1f\x4f\x4a\x72\x77\x12\x6c\xa1\x71\xc5\xe7\x71\x6f\x3d\xcb\x91\x4d\x9c\xe4\x67\xdb\x70\xa2\x79\x45\x8b\xe5\xae\xce\xb4\x2b\x5e\x82\x16\xfc\xde\x38\x73\xd6\x8f\x6a\x40\xf5\xd2\xf0\xa6\xad\x60\xe2\xd0\xf7\x9e\x9f\xaf\x95\x64\x95\xfa\x28\xd5\x49\x18\x48\x3b\x08\xa2\xda\x66\x57\xee\x1c\x9b\xc2\xe8\xba\xc9\x2d\xf1\x84\x8d\xb9\xf9\x3a\x24\xd1\xde\xb8\xef\x71\x55\x4d\x71\x71\x7b\xc3\xdf\xf1\xb9\xfc\xc0\xce\x85\xe0\xa2\x3f\xe6\x0a\xeb\x3b\x7d\xd1\xb2\x5b\xa8\xa2\xdb\x91\xd1\xf2\xb9\xc5\x14\x3a\xfe\x80\x60\x74\x51\x9d\x71\xa3\x34\xf4\xa0\x4e\x25\x71\x3e\xb8\xae\x65\xf2\x40\x3b\x47\x1b\x43\x44\xf7\x39\x36\x01\x9f\xf4\xc6\x21\xc3\xa3\xfd\xcd\xcb\x3f\xfc\xc9\x08\x17\xc4\x05\xfa\xd3\x4b\x48\x39\x96\x23\x73\x01\xc0\x0d\xac\x55\xad\x1a\x57\x55\x6c\x94\x20\x14\x01\xdf\x47\x17\xa7\xde\x83\x23\xaf\x76\x76\xba\x3f\xdb\x64\xbc\xb9\xf9\x1b\xd8\x8b\x54\x49\x52\xcd\x46\x86\xed\xc5\xbb\xb5\x0e\x40\xbb\x3a\xb0\x57\x5e\x3c\x53\xd0\xee\x8d\xb6\x3b\x5e\xb5\x35\x79\x4d\xee\x68\x11\x17\xc0\xec\xad\x4a\xef\x6d\xce\x4d\x5f\x51\x09\x24\x40\xd3\x8a\x17\xb7\xa8\xb4\xbf\x0c\xa0\xf2\xab\x55\xb5\xe3\x67\x21\x36\x69\x20\x21\x59\xe0\xd1\xf1\xf7\xd2\x04\x6a\xdc\x34\x9e\xa1\x44\xe0\xfb\xde\x64\x80\x68\x02\x76\xd4\xc4\x30\x62\x72\x30\x3d\x35\x94\x3e\xb6\x23\xd2\xd7\x54\xf4\x2b\xa2\x73\x0b\xd2\x23\xf1\x5d\xef\xe3\xe3\x98\xbd\x0d\xd1\xbd\xd0\x9d\x86\x06\xfe\x6d\xf8\x16\xd6\x98\xb1\x3c\xe5\x90\xdf\x18\x46\x83\xd4\xdb\x07\x6e\x99\x78\xf7\x65\x86\x60\x68\x5a\x8e\x44\x6f\x5e\x98\x0f\x42\xd7\x58\x59\xfb\xc8\x45\xd9\x31\x6a\x88\x90\x54\x6a\xd5\xe9\x47\x38\x50\x67\x15\xa6\x75\x10\xbe\xdb\xd5\x24\xac\x23\xea\x6b\xdc\x8c\x6f\xc9\x32\x72\xc3\x25\x1e\x97\xc7\x00\xfe\x35\x6e\x22\xef\x01\x28\x5d\x9b\x7e\x0d\x44\x5e\xce\x13\x5e\xda\x7e\xc0\xf5\x60\x4a\x12\x3f\x89\x19\x9b\x51\x07\xda\xf5\x95\xf3\x63\xb7\x70\xfd\x1b\x47\x7f\xe2\xaf\x1c\xf3\xad\xaf\xe9\xa2\x81\xf1\x7d\xa9\xf7\x8c\xef\x7c\x26\x71\x9a\x84\x74\x82\xdb\xc9\xee\x8c\xfe\x75\xd4\x73\x68\x99\x93\x19\x98\xbe\xd6\xd1\x74\x6c\x8a\x02\x24\x74\x40\x1f\x45\xdb\x28\x3a\xf8\xee\x60\xa7\x77\x9c\x59\x19\xc1\x1b\x3c\x07\xcb\x74\x1f\x16\x68\xb5\x4f\x21\x07\xed\x82\xdf\x9b\xdf\x1b\x74\x49\x63\xbf\x45\xca\x8e\xc8\x7c\xc1\x93\x56\xc7\x20\x07\xdd\x8e\xb0\xd6\xb5\xe1\x2a\xbc\xc7\x4b\x84\x05\x6f\x59\x52\x1a\x34\x04\x46\x7c\xe0\xec\xfd\xca\x60\x2f\x39\x23\x2e\x48\x9f\xd2\xca\x4d\xc7\x61\x4e\xa5\xc1\x2b\x50\x86\x5e\x1d\xbf\x7a\x99\xdc\xf7\x2b\x52\xb4\x42\xd2\x3b\x72\x65\x6b\x9c\x07\x41\x95\x8b\xd9\x84\x4b\x49\xa7\x15\x24\x6e\x29\x8e\xce\x4d\x01\xf8\xf5\x81\x7a\xe0\x08\x8c\x98\x8b\x90\xad\x34\xa1\x87\x87\xe6\x04\x87\x80\x4f\xdd\x40\x02\xea\x63\xbf\x34\x49\x58\xd7\x15\x4d\xf2\xd2\x6b\x92\xe6\xde\xdb\xe9\x58\x5d\xe1\xfb\x7d\x90\x24\xef\x6d\x6c\xa0\xab\x6c\x4f\x5d\xe5\x64\xf8\xe8\x5e\x50\x65\x0f\xf7\x3d\x95\x04\x1d\x82\x57\x62\x65\x33\x26\x11\x34\x87\x3e\xac\xc4\x0a\xf8\x39\x08\x96\xc5\xea\xd1\xdd\x87\x55\x5a\x97\x27\x1d\x02\xff\xde\x3a\xb0\xba\x15\xb4\xd2\xbf\xbb\x97\x17\x98\x95\x55\x92\xcc\xf0\xb3\x52\x2d\x93\xb8\x70\x2e\x66\x28\x14\x89\x36\x7e\x19\x54\x93\x58\x60\x89\x18\x47\x35\xc1\x00\xd0\xd4\xb7\x8b\x93\x82\x3d\xae\xe6\x7c\x7d\x30\x9b\xdd\x5c\x63\xe1\x85\x60\xc5\xf5\x6b\x2a\xad\x78\xd6\x72\xc4\x5a\x20\x06\xd6\x51\xe3\x32\x25\xb5\x3b\x98\xd3\x6e\xf1\x8e\x3b\xd0\xe4\x6a\x4f\xba\x8b\x63\xa5\x2f\x4f\xd1\x8f\x91\x2d\x41\xae\x9b\x6f\x01\x27\xb8\xc1\x2d\xd7\x81\x64\x92\xa2\xd9\xe6\x59\x1d\xae\xbf\x16\xd7\xc6\xba\xb9\xc7\xbe\xc3\x09\x7d\xf8\xf4\x50\x47\x81\x2c\x74\x18\x51\x13\x52\xb7\x35\x50\x6c\xc6\x63\x1a\x93\xb7\x0b\x4a\x78\x77\xcf\x9c\x30\x22\xb0\x8d\x2b\x38\x88\xa8\x25\x5f\xc1\x92\xb3\xd4\x03\xf1\x89\x0d\xa7\xe5\xfd\xa7\xd5\x14\xf3\x67\x09\x1d\x01\x3d\xe7\x90\x8b\x95\xd3\x6e\x23\x26\x9b\x34\x96\x9c\xa3\x5e\xa1\xe6\x32\x9b\x3f\xe0\xfc\xd4\x8b\xf2\xcf\x96\xde\xe1\x8a\x18\x0e\x7b\x27\x1a\x76\xaa\x4c\xc8\x76\xba\xaf\x66\xa3\xb5\x0f\xc1\xec\xd8\x0c\x7a\x78\xd4\x82\xcc\xa4\x4f\xbc\x78\x81\x0e\x4d\x1b\x07\x86\x64\x77\xb7\x4a\xae\x5d\xab\xf3\x87\x26\xa1\x72\x6b\xbe\xf5\x3a\x7f\x68\x30\xe0\x34\x9a\xbd\x58\xb8\xff\x26\x0b\x7c\x47\x80\xd3\x98\x56\x58\x54\x00\x4a\xbf\x36\x53\x86\xa6\xad\x42\x84\xdd\x51\xc1\x59\xad\x8f\x1f\x90\xcf\x68\xc9\x24\x08\x90\xc1\x17\x44\xa2\xdf\x1e\xfe\x78\x7a\x05\x49\x4b\x47\x96\x2d\xdf\x8e\xaf\x95\xc0\x0f\xb0\x32\x86\xe0\x75\xfb\xb8\xdf\x90\x1b\xbb\xde\x2e\xa0\x9f\xb8\xb9\xd0\x63\xab\x5b\xd5\xe2\x0a\xa8\x9f\x8b\xaa\xd5\x77\xe1\xce\x76\x76\x7e\x1f\x78\x8a\x27\x2f\xa7\x0b\xdc\x12\x7f\xbf\xa6\x51\xc7\x35\xc7\x41\x3d\x0b\xf6\xeb\x1a\x0d\x79\x74\x8d\x87\x0d\x24\x94\x6b\x8a\xce\x81\xf4\xc4\x94\x61\x1e\x8e\xbd\x8b\xe3\xe0\x19\x50\x3a\xc1\x24\x7f\xbb\x9a\xa4\x6b\x1e\x46\xa8\xd1\xb2\x73\x1f\x7e\xc4\x61\xc8\x77\x0c\x22\x1c\xd1\x79\x76\x3d\xe3\x25\xd9\xbe\xaa\x50\xda\x3e\xbf\xb4\x6d\x06\x89\x4f\x94\xd9\x5b\xc7\x94\xce\x85\x82\x24\x26\xc7\x4f\x16\x0b\x52\xb6\x11\x2a\xd7\xc5\xcc\x80\x81\x46\xbd\xd7\x61\x54\x60\x56\x52\xbd\x57\x4c\x2a\x80\x79\xbd\x3e\x64\x56\xff\x77\x0d\x8a\xb0\x66\xa9\xff\xf0\x32\x82\x79\x0d\x20\xd6\x6b\xea\xf6\x28\xac\xda\x6b\x09\x13\x40\x25\x2d\x09\x9a\x92\x82\xd7\x04\xb0\xc3\x0d\x67\x46\x1f\x77\x94\x0a\x3e\x81\xc4\x44\x8e\xcd\xd0\xb6\xed\x52\xe0\x08\xb5\x17\xba\x3b\x46\xd2\x73\xed\x0b\x40\x8b\xe9\xb5\xa6\xa2\x6b\x5e\xcf\xa3\x81\x6d\xf8\x95\x41\x9c\x21\xdc\x15\xed\xd4\x23\xd8\xb6\x3f\x9f\x93\x4c\xd3\x2d\xd5\x98\xdc\x51\xa0\x1f\x38\xc1\x52\xd2\x39\x1b\x37\xbc\x1c\xeb\x66\x4f\x7e\xa3\xff\xbb\xf5\x51\x8a\x14\x00\xba\xad\x6b\x52\x81\x64\x7e\xee\xf3\xe3\xda\x35\x7b\x5a\xba\x9f\xcc\x21\x72\xd6\x19\xe4\x17\xac\x2c\xdc\x8c\x2a\xb3\x5e\x31\xcb\x74\xbd\xa1\x1d\xe3\x71\x35\xef\x3b\x90\xa8\xc2\x53\x52\xc9\x4f\x6d\x17\xc0\x38\xc4\xf4\x60\xcb\x04\x2c\x77\xed\xe0\x8d\xbb\x25\x62\x93\x44\x84\x3b\x5d\x25\x3a\x5c\x4d\xa2\x63\x86\x79\xae\x28\x7d\x3b\x45\xd2\xff\xf1\x2d\xbb\x9c\xb6\xc3\xaf\xbd\xab\x53\xef\xa1\x0f\xd7\x6b\x20\x19\x19\x00\x41\xb6\xde\xc4\xbc\xb6\xf9\xdf\xac\x0c\xb4\x10\x90\x86\x26\x80\x26\x88\x9e\x69\xc8\x92\xa6\x1d\x8f\x37\xe4\x85\x6e\x7f\x09\xd9\x11\xac\x7a\x5a\xa0\x40\xae\xb9\x03\x66\xbc\xaa\xf8\x3d\xf0\xdf\x98\x3e\x04\xee\xcf\xed\x79\x5c\xc6\x72\xa5\x02\x5d\xbf\xce\x73\xbe\x11\xd8\xf7\x8e\x72\xf7\xdf\x24\xec\x42\x05\xd0\x8b\xd7\xf1\x7f\x7c\x31\x39\x8b\xff\xe3\x1f\x24\x11\xdb\x7a\x15\xed\x9f\x0b\x22\x79\x2b\x8a\xad\xf3\x39\xed\x9f\xaf\xae\x1e\x6e\x9a\x53\x51\x73\x31\x31\x35\xc4\xf3\xbc\x54\x92\x77\x7a\xfb\xb9\x2d\x91\xe9\x9d\x50\xa4\x3e\x6b\x3f\x67\xf2\x8d\xe0\xed\xb6\x56\xdc\xc7\x5f\x76\xb6\xc0\xcc\xe5\x17\x64\x1a\xf9\x52\x16\xaa\x8a\x9d\xc6\x05\x16\xc4\xd6\x26\xd5\xca\xa5\x6c\x70\x91\x69\xf6\x7c\xd9\xd0\x8c\xaf\xcb\xb8\x1e\xb2\x6d\x9a\x8a\xd4\x84\x29\x5c\xc1\x6b\x73\x6d\xc4\xb5\xf7\xa6\x2c\x76\x77\xe5\xfc\xf4\x1f\x3f\x3f\xcd\xe9\xfc\x78\x13\x39\xce\xea\xa7\x5a\x48\x3f\xb9\x1f\x6f\xa1\xc0\x0d\x9e\xd2\x8a\x6a\xd5\xe7\x29\xde\xef\xc2\xeb\x57\x9c\xab\xef\x3d\x2c\xf0\x29\x5a\x6a\x04\xbd\xa3\x15\x99\x6f\x1d\x5a\xfd\xbc\xed\xa4\x2f\xd2\x89\x6b\xe2\x5c\x16\xb8\x8a\x49\x8d\xf9\xcc\x91\xf0\x02\xe2\x3a\x4f\xb2\x20\x69\xa2\xe7\x33\x5e\xbe\xbd\x20\x8a\x56\xe0\x63\x71\x8a\x11\x4e\x9d\x78\x54\x61\x1c\x9a\x26\xdd\x61\xf9\x58\x75\x79\x5b\xe6\x94\xcd\x51\xaf\x8e\x61\x2b\x04\x61\xaa\x5a\x06\x71\x57\xe0\xe5\x30\x8a\x37\x28\xc5\xa0\x97\x5b\xe5\x32\xc6\x9d\x77\xea\xed\x2d\x4b\xf9\x51\xe3\xa5\xd6\x46\x03\x77\xce\xac\x05\xae\x19\x30\x00\x4c\xc5\x59\x80\x5b\x45\x11\x97\x6d\x28\x34\xc4\x1b\xc2\xba\x2d\x7c\x62\xdd\xab\x63\xbd\xb5\x7b\xa5\x87\x8c\x75\x7a\x5c\x97\xbf\x69\x2a\xac\x66\x5c\xd4\x63\xe7\x45\x19\xf7\x2c\xd7\x88\x6e\x9d\x41\x1a\xbc\x87\x84\x18\xda\x27\x53\x9d\x9d\x95\x15\x09\xac\x52\xbf\x00\xac\x34\xb1\x4f\xd4\x32\x41\x0a\x3e\x67\x50\x08\xc0\xfe\x16\xec\x2d\xef\x34\xc2\x52\x5b\x84\x88\xb5\x55\xb5\x75\xdf\x22\x6d\x59\x7e\x47\xc4\x82\xe0\x2d\x4f\x61\xda\x06\xff\x60\xdb\x44\x82\x34\x82\x48\x98\x50\x13\x81\x37\x3a\xbe\xef\x14\xc2\x52\xf2\x02\x48\x8d\x4d\x8e\xa1\xa3\x1b\xc3\x60\x69\xce\xb8\x40\x18\xcd\xe9\x1d\x61\xe8\xca\xec\x86\xb3\x0a\x6f\x4f\xb3\x15\xb8\xed\x9c\x87\x1e\xb7\x8a\xfb\xfc\x53\x84\x15\xc2\x65\x4d\x81\xe4\xc1\x10\x17\x58\xaf\x66\xd8\x6a\xf0\x15\xbd\x4b\x05\x87\x6c\x44\x74\xb1\x6d\x7e\xea\x67\xbd\x17\x92\x32\x1d\x8e\xc0\x4f\x17\x58\x88\x0e\x3f\xe1\x6b\xa7\xa3\x02\x42\xef\xae\xba\x4c\xc4\xf4\x7c\x4e\x87\x2c\xbf\x86\xbe\x06\x36\x35\x6a\x7d\x5b\x0b\x7c\x67\xd0\x16\xdd\x12\x57\x5a\xcd\xd8\x56\x8d\x94\xc4\xd4\x80\xef\xf5\xcb\xe4\x1d\xba\x80\x08\xf0\xd1\x82\x67\xad\x8b\x8e\x4c\x78\x79\xdd\x90\x62\xd4\x6d\x41\xb7\xe0\x8e\xa8\xc3\x71\x88\x6d\xd9\x9f\x40\x0a\x1a\x8f\x8a\x30\x4e\xe6\x52\xef\xd6\xb0\x93\x21\xec\x85\xaa\x1e\x2b\x09\xd8\xf5\x9d\xbc\x30\x58\x89\x7f\x11\xb1\x75\x66\xd2\x06\x6f\xde\x9c\xaa\xe3\xdb\x3f\x81\x2b\x8f\xb0\x05\x66\x05\x68\xf2\xf2\xe4\x96\x34\xf2\x44\xd2\xb9\xf1\xdc\xfd\xf1\x4f\x7f\x02\x37\x9e\x5b\x9c\x93\xab\xf3\xd3\xd7\xef\xcf\x8f\xeb\xed\xd4\xb2\x9d\xfa\xf4\x1a\xac\x14\x11\xec\x3b\xf4\x3f\x87\x7f\xff\xdd\xaf\xe3\xa3\x3f\x1f\x1e\xfe\xf4\x72\xfc\x9f\x3f\xff\xee\xf0\xef\xc7\xf0\x8f\xff\x38\xfa\xf3\xd1\xaf\xee\x87\xdf\x1d\x1d\x1d\x1e\xfe\xf4\x97\xf7\x6f\x6e\x26\xe7\x3f\xd3\xa3\x5f\x7f\x62\x6d\x7d\x6b\x7e\xfa\xf5\xf0\x27\x72\xfe\xf3\x67\xbe\xe4\xe8\xe8\xcf\xbf\xdd\xb2\xa3\x91\x9c\x9e\xa9\x3c\x9e\x49\xdc\x9d\x19\xf9\x3a\x1b\x41\x48\x0d\x37\x48\x0c\x29\x41\xda\x05\x34\x59\x69\xdb\x69\x5a\xf6\x27\x7d\xaf\xb8\xee\xb1\xb9\xbe\x6a\xa4\xb9\x7e\x2a\x7e\x0f\xc4\x30\x94\x6b\xc5\x79\xfb\x80\x15\xa8\x71\x97\xe4\x8e\x88\x91\xeb\xc3\x3b\xfd\xca\x49\xe4\x1b\x43\xc4\xc4\xa6\xf7\x45\x32\xef\x45\x6e\x10\x37\x2f\xcf\xb9\x92\x37\x40\x74\x67\x47\x0b\x82\xfb\x18\xfd\x88\x05\xe5\xad\xb4\x1a\x32\xd2\x46\x38\x67\xa0\x64\x18\x22\x05\x7f\xd9\x43\xdc\xc6\x64\x5d\x6c\x2b\x64\x5c\x93\x9e\xb9\xb8\xb4\x2c\x54\x7e\xea\x4f\xfd\x25\x79\xb6\xf9\xd6\xa6\xdb\x9a\x88\x8d\x20\x77\x6e\x18\xc2\x51\x11\x11\x65\x4a\x76\xf8\x51\x19\x8b\x60\xe3\x15\xed\x14\x9a\x6d\x9d\x05\xc1\x94\x41\xa3\x6e\x8c\x70\xa1\xc5\x84\x6e\xa1\xb8\x13\x9d\x3b\x42\x31\x58\x37\xe3\xb4\x0f\x3e\x8d\x3b\x66\xf1\xc2\x31\x96\xad\xaf\x59\x9d\x8d\xe7\xdc\xff\x17\xb3\x1e\xd2\xd2\x47\xfe\x3b\x66\x58\x3f\x8d\xe8\x85\x39\x10\x70\xd5\x8f\x0b\x41\x15\x2d\x70\xf5\x22\x02\x60\xeb\x5e\x54\x54\xad\x36\xb8\xc2\x77\x09\x82\xd4\x3d\x37\x7d\xc2\x15\xba\x25\xcb\x7b\x2e\x4a\xa7\xfd\x85\x78\xdb\x6d\x43\xd9\x7a\x63\x48\xe5\x86\x03\x78\x7d\x2d\x92\x4d\xa4\x47\xd4\x44\xa0\x29\x71\xe0\xb4\x95\x2f\x2f\x8f\xd1\x29\x5b\x1a\xc5\x2b\xc2\xfe\xf7\x81\x97\xa0\x96\x2c\x68\xb7\xc6\x12\xe9\x9d\x06\xab\xf5\xb8\xbe\x61\x15\x55\x54\x6e\x33\xb2\x48\x9b\x3c\x5e\xf0\x38\xbd\xd5\x41\x8b\xb8\xb0\xac\xb7\x20\x90\x84\xe1\x08\xde\x16\x42\x6c\x5f\xf6\x2c\xb7\x85\xd6\xfa\x29\x23\x52\xbe\xd1\x1b\x76\x77\x67\x06\x83\x02\x6e\xfb\x02\x3c\xb9\x1d\xbb\x14\xd1\x92\xc9\x64\xfc\x69\x95\x80\x97\xdd\x37\xb7\x5d\xd2\x53\x07\x95\x01\x6b\xc7\x30\x58\xeb\xa6\xa9\x92\x61\xfc\xd5\xc4\x49\xf5\x37\x4e\x2f\xb7\x8d\xd2\x59\x8a\x2c\xa3\x42\xcb\x6e\x8c\x5d\x75\xd1\xfe\x28\xc1\x16\xb3\xb4\x46\xe4\x9f\x2d\xae\x00\x78\x79\x23\x5a\xb2\x6d\x61\xe2\x28\x83\x83\xa8\x7b\x2e\x6e\x4f\xbe\xfd\xd3\x4b\xb0\x39\x7c\xef\xc6\xf3\xad\xaf\xa8\xd8\x74\xf1\xa8\x44\xf1\x95\xda\xe9\xe5\x55\xb8\x91\xdd\x5a\x3a\x87\x86\x85\xd4\x9a\x82\x1e\x7a\x07\xf8\x05\x8a\x82\x2a\x44\xa5\x85\xc7\x27\x84\x8f\xbb\xee\xde\x2c\x9b\xed\x95\xa4\xf8\x5c\xee\x5e\xbb\xc9\x98\xd1\xb3\xf0\x6d\x66\x55\xa4\x59\x12\xdf\x4e\x80\x7c\x38\x90\xc1\xc7\xc0\xb0\x03\xd2\x1c\x10\x39\x70\xc3\x2c\x9b\x04\x36\xa1\x2c\x80\xc8\x48\xb8\x89\x73\xb0\x01\xe9\xc7\xb3\xca\xdc\xab\x5e\xcb\xf6\x26\x75\x6a\xc1\xca\x2f\x7d\x01\x0d\x4b\x19\xb5\xad\x7a\x62\x48\x44\xa1\xc6\xa5\x2f\x98\x66\x9d\x3f\x80\xeb\xaa\xb4\x19\x57\x1a\x32\x54\x2c\x94\x51\x98\x63\xf1\x05\x1d\x8d\x4c\x49\x10\xbe\xc3\xb4\x02\x30\x3d\xb8\x92\xb8\xec\x61\x6b\xcc\x60\x0b\xce\x64\x5b\x43\x8f\xb6\x0d\xa5\x4d\x97\x56\x9b\x88\xf1\x6f\x52\xc3\x11\x59\x35\x8b\x8f\xb3\xc9\x6f\xaf\x9a\xbd\x5e\x32\x5c\xd3\xc2\xad\xe2\xa9\x59\x36\xe0\xa1\xec\xb1\xcf\xc7\x7b\x65\x75\xf7\xeb\xba\x55\x7a\x6a\x63\x94\x93\x5d\xdc\x0c\x11\x61\x1f\xb8\x4c\x82\xa3\x10\xa6\x64\x90\x07\x5c\xa8\x6a\x09\x11\x95\xde\x97\x46\x88\x50\x48\x5b\x35\x68\xf6\x6a\x7b\xc2\x14\x2e\xec\xce\x32\xfa\x6c\xef\xed\x37\xa4\x6e\x80\x0c\xd1\x2a\xf0\xd2\xb0\x06\xab\x56\x30\xc7\x83\xba\xf2\x17\x5b\x37\x1f\x60\x1a\x23\xd2\xd0\x2e\x14\xc2\x65\x29\x11\xf6\xb5\x98\xa8\x32\x8a\x77\xcb\xe8\x3f\x5b\x52\x2d\x11\x2d\x09\x53\x1d\xee\xad\x3f\xc5\x96\x2e\xca\xca\x87\xed\xc5\xfa\x59\x77\xbe\x8d\xba\x4f\x48\xe9\x0a\x18\x59\x7f\xf2\x23\x6b\x6a\xdc\xbf\x60\x26\x68\x5d\x3d\xc2\x4c\xd8\x91\x4e\x10\x41\xee\x92\xa2\x0a\xc4\x12\x1a\xe4\xc8\x1a\x81\x30\xec\xe6\x8d\x64\x38\xa8\x4d\xbc\xaa\x58\xdd\x4a\x11\xf8\x49\xf3\x74\x94\x0b\xfa\x02\x44\xaf\x2f\xaf\x7f\x79\x77\xfa\xdf\xe7\xef\x9e\x9d\x48\xb2\xa7\x2a\x6c\xef\xd5\x30\x4f\x8e\x25\xb8\x5a\xed\xc8\x6a\x58\x7c\x45\xfe\x38\x0b\xdc\xea\x73\x32\x96\x89\x88\x39\xd4\x98\xa9\xbe\xee\x12\x02\xa2\xde\x75\x1e\x08\x6f\x3e\xdb\x30\x24\x7d\x15\x6f\x94\xbb\xbe\xa2\x58\x54\xbb\x26\xae\xb5\xdb\xbd\x13\x8e\x64\x2f\xf6\x50\x6f\x6a\x3f\xbe\x97\xdc\x57\xa3\x1a\x5d\xdf\x87\x59\xf7\x14\x90\x6c\xfb\xdb\x39\x48\x2c\x03\x56\x21\x13\x7c\xc5\x88\x91\xfb\x55\x75\xc1\xdc\xe4\xfa\x2f\x62\xf7\xd4\x94\xb7\xac\x34\xb7\x9b\x1d\x82\xf1\x7d\x87\x19\x41\x25\xa9\x88\x72\x9e\xab\x34\x05\x01\x39\x35\x1b\x88\x62\xc1\xe7\x05\xef\x36\x8a\x3b\xd4\x4b\x73\x67\xc8\x4b\x64\xfd\xc9\x08\xe1\x8a\xb3\xb9\x65\x27\x8e\x6a\xb6\x63\x0b\xf0\x51\x84\xd1\xda\x64\x43\xc9\x5d\x6c\xaf\x09\xd3\x17\xab\xd3\xa4\x6f\xd6\x70\xb9\x74\x9b\x82\x14\x5c\x94\xc6\xa7\xa3\x27\xde\xb8\x6f\x8e\x7b\x27\xee\x1a\x3e\x23\x32\x7a\x63\x6d\xd4\xbb\x61\x7e\x19\x87\xa2\x1e\xf3\xc0\x47\x06\x86\x8f\xd1\x74\xa2\x9a\x5b\x09\x95\xf7\x44\x79\xc0\x1d\x21\x78\x85\x9a\x0a\x33\x62\xab\x89\x78\x07\x6c\x96\x69\x1e\xe4\xfa\xa7\x9e\xaf\x20\x29\xd3\x9b\xf8\xbb\x70\x7c\x78\xca\x66\x53\x18\x01\x1b\x1e\x16\x3e\x43\x67\x93\x1f\x60\x9b\xbc\x27\x35\x17\xcb\xae\x93\x5e\x45\xd7\xa7\x00\x6f\x2d\xac\x37\xe7\xf4\x68\x73\xc9\x42\x04\x9d\x83\x78\x69\x8e\x9d\x45\xe9\xe8\x9e\xbc\xa3\x35\x55\x90\x6b\xb6\x6d\x5c\xa8\x68\xda\x17\x23\xf4\xa2\x86\xa1\x40\x64\x09\xbd\x58\xb4\x73\xd2\xe0\x39\x91\xe3\x17\x7d\xf1\x2c\x91\xa1\xe9\x59\xf1\xfe\x60\x41\x4c\xf0\xc3\x21\x19\x53\x1c\x07\x26\xd8\xaa\x7f\x62\x64\x3c\x17\x18\xc2\x37\x4e\x9c\x70\x53\xba\xc5\x76\x09\x07\x6e\x8b\x28\xe9\xad\x6d\x03\x01\xd3\x3c\x32\x3e\x26\x3d\xb1\xfe\xf5\x72\x81\x05\xd8\xd7\xb5\xbe\x92\xfa\xab\x83\xa3\xd4\x80\x6d\xbd\x3a\xda\xbe\x7d\x47\xee\x48\xd5\x6d\x49\xeb\x9f\xd9\xb2\xe1\xed\x6b\x09\x46\x1b\xaa\xf1\x76\x63\x11\xe1\xe2\x44\x59\xd4\x4d\xbb\x8f\xb5\x98\xea\x94\x4b\xa9\x8f\xba\x3f\xdb\xa3\x5e\x12\x74\x98\xde\x64\xfe\x38\xa6\xb4\x12\x78\x1f\xf4\xe1\xe9\x78\xdf\x43\x1e\xfe\xa8\x1b\x2e\x38\x49\x25\x69\x08\x2b\x5d\x51\xe6\x88\x77\x3d\x91\x97\x10\x7d\xc4\x53\xa8\xa5\x5d\x81\x19\xc8\x19\x87\xf1\xd3\x67\xbb\x3b\x7d\xdb\x5f\xa1\x29\xcc\xc4\xd1\xbc\xc4\xbd\x4d\xf9\xa8\x8b\x50\x6b\x21\x84\x29\xb1\xb4\xb8\xcf\x6b\xbd\xb1\xfa\xd2\x35\x5e\x65\x88\x26\x24\x4e\xa3\x23\x8e\xa6\x12\x4e\x25\x12\x4e\xa1\xd1\xcc\x56\xe3\xf3\x23\x4c\xee\xbd\xc5\x06\x4b\x60\x5d\x8c\xc4\xd6\xc6\x41\x16\x85\x3c\xe1\x25\xba\x07\x30\x41\x9f\x66\xc1\x94\x11\xbe\xd0\xdd\xba\xed\xca\xa3\xb9\x7b\xd4\xc5\x40\xa2\x9b\xb6\x7e\xb4\x64\x26\xed\x0c\x4c\x53\x16\xbd\xbc\xeb\x8d\x60\xd5\xb3\x9e\xb7\xa2\x58\x70\x49\x98\xc5\xc0\x0b\xf7\x05\xd6\x8f\x3b\x97\xe6\x1e\x4c\xaa\x3b\x6d\xe9\x3e\xc8\x1d\x11\x4b\x05\x01\x50\x4f\x7f\x6c\xfd\x9e\x72\x25\xfa\x15\x60\x9c\xa3\x1b\x06\x99\x6d\x93\x02\x00\xdf\x32\x73\x3e\x57\x18\xe9\x4e\x76\x44\x5e\x7e\xa6\x48\xd1\x96\x8f\x96\x09\x0a\x2c\xed\x44\x45\xb2\x16\x46\xc7\xa9\x0f\xcc\x94\xf8\x01\x0a\x0a\x77\xa6\x51\xc1\xeb\xa6\x55\x41\x6c\xd6\xc5\x6e\x63\x56\x3f\x89\xe2\xa2\xc6\x0c\xcf\xc9\xd8\x77\x64\x1c\xe4\x21\x45\xaa\x10\x91\x17\x6a\x0e\x88\x3c\xfa\x92\x60\xf2\x28\x1e\x2a\x8f\x32\xc0\xe5\x51\x2a\x64\x1e\xe5\x85\xcd\xa3\xee\x56\xda\xc9\xd1\xf5\x9e\x82\x95\xc3\x6b\xab\x81\x7f\xec\xf0\x3a\x4d\x30\xe6\xf4\x02\xd5\xb0\x6d\x99\x4a\xc4\x6b\xaa\x1c\x2c\x2f\xd0\x13\x80\x6b\x34\x24\x37\xb5\x82\x06\x40\x91\xf8\xff\x67\xef\x6f\xb8\xdb\xb8\xad\x7d\x71\xf8\xab\x60\x29\x77\x2d\x4b\x29\x49\xdb\x49\xfa\x72\x7c\xfb\xb4\x4b\x91\xe4\x56\x37\xb1\xad\x63\x29\xc9\xea\xd3\xf4\x9e\x80\x33\x20\x89\xa3\x19\x60\x02\x60\x24\xb3\xb7\xe7\xbb\xff\x17\xf6\x06\x30\x18\x92\x92\x2d\x0c\x24\x52\xae\xa6\x6b\x35\x16\x39\x1c\xec\x01\x36\x36\xf6\xeb\x6f\xc3\xf9\xc9\x3e\x34\x15\x2f\xb8\x89\x90\x9f\xcb\x14\x73\x2b\x02\xaf\x95\xd6\x04\xe7\xb5\xaf\x8e\x87\xae\x91\xde\xbe\x73\x29\xe9\x81\xf6\x02\x91\xd5\xd8\x87\x82\x31\xef\x69\x79\x92\x66\x4f\xd2\xec\x13\xaf\xcf\x4d\x9a\xb9\x2e\xce\x0f\x5f\x01\xf4\x1e\x07\x26\x4d\x57\xf1\xb3\xd6\x61\x36\xa0\xb8\x26\x44\xf3\x5d\xad\xcf\x21\xf4\xa0\x1f\x91\x77\xe2\x35\xf6\x06\x1d\x61\xf9\xcf\x84\x9c\x0a\xa2\x65\xed\xfa\x98\x7e\x30\x7a\x84\x1a\x2f\x25\xba\x9d\x6a\xe6\xf4\x5d\xa9\x99\x2f\x14\x76\xd5\xd6\x0d\x53\x28\xfa\x12\x4b\x85\xac\xb4\x42\xa2\xee\x19\x22\xec\x5a\xaa\xcb\x4a\xd2\x52\x3f\x6f\x24\xfe\xdf\x38\x40\xec\x3d\xff\xc2\xad\xfb\xb8\xb9\x3b\x84\x48\x6a\xba\x79\x54\x83\xf9\xd0\x45\x1a\xef\x57\xc6\xee\x65\xa0\xf6\x2a\x58\xfb\x31\x63\x40\x72\xc3\x24\x6a\x32\x57\xb2\x6d\x7c\x34\xb0\x43\x0b\xb6\xa6\xf8\x5d\xb3\x86\xa4\x9d\x8c\x28\x76\x8b\xe5\x06\x7d\x42\x82\x39\x0f\x9e\x07\xd6\xd9\x9d\x60\x51\x6a\x3d\xda\x88\xd9\xae\x5a\x91\x50\xea\x80\x75\xaf\x52\x75\xc0\x92\x8c\xec\x55\x6c\x4e\x8b\xe5\x5e\x9f\xaa\x0d\xf8\xa9\xce\x03\x6e\x8f\x5f\x7b\xac\x23\x75\xbe\x21\xed\x5d\x3d\xf8\xd0\xe5\x16\x8e\x6e\x4c\xfe\xc5\x3c\x32\xed\x5e\xdf\x97\x5a\x38\x56\x72\x25\xff\x77\x76\x4e\x24\x57\xe7\xfe\xf6\x0f\xbf\x1d\x7b\xd0\x03\x78\xcd\x87\xd8\x37\x3d\x88\xce\xed\x55\x69\xf4\xb8\x6d\xca\x48\xc9\x75\x03\x9c\x09\xae\xee\xae\xd4\x21\x90\x9b\xaf\xe4\x66\xf3\x90\x9e\x19\x12\x07\x1c\xb6\x1a\x5c\xcc\x1f\xbc\x6a\xe6\xbc\x3f\xb4\xdb\x77\xb2\xa1\xbf\xb6\x5d\x1f\x5a\x77\x58\xa1\xb2\x1d\x2d\xa0\x9b\x44\x68\xcc\x1a\x61\xc3\x26\x1e\xae\x96\x35\xd6\xa9\x01\xbd\xba\x93\x20\x61\xe9\xb4\xa1\x4b\x2f\x51\xfb\x2f\x51\x42\xf5\x0b\xf3\x9d\xb7\xee\x48\x45\x87\x68\x1b\x44\xa0\xd5\x42\xeb\x06\x0e\x59\xff\x6d\x72\x6a\xeb\xea\x7c\xaf\x06\x32\xa8\xc1\x7a\x12\xc8\x83\x70\xb0\x14\xd8\x7d\x05\xd2\x44\x6a\x79\x05\x98\xa0\x56\xa7\x98\x19\xa6\xae\xa9\x2a\xef\x78\xe6\x6f\xb5\xaa\xa6\xff\xfa\xc0\x6d\x1d\x16\x08\x1c\x9c\x67\x88\x81\x3a\x6f\xa9\x2a\xa1\x8c\xaa\xe3\x89\xa7\x44\xda\x4d\xd7\xd6\x13\x69\x5d\xb1\x74\x24\x00\xee\x1e\x4a\xf6\xd7\x09\xb5\x7a\x50\xff\x49\x18\x2b\x81\xb2\xb6\x95\x74\x2c\x28\x8c\x7e\x4a\x97\xb9\x93\x8b\x78\x05\x1f\xec\x41\xcf\x9a\xfe\xd0\x64\x21\xab\x12\x94\xd5\x71\xc5\xae\x58\x15\x48\xb3\x02\x57\xf1\x69\x6b\x1c\xce\x52\x21\xeb\xda\x95\xbc\xbb\xe6\xf3\x58\x1e\x7f\x67\x63\x07\x61\x01\x69\xf5\xaa\x07\xb1\x00\xa7\xcb\xc4\x92\xc7\x80\x33\xe2\xb7\x04\x13\xd2\x2b\x05\xee\x18\x94\x33\xc2\x2c\x9b\x26\xb0\xdf\x16\x32\x26\x56\x40\x17\xb7\xe1\x5c\x5c\x21\xc1\xc7\xbb\x0e\xdd\xc7\x44\x22\x5a\xa3\x5d\x8b\x56\xb3\xb5\xd6\x52\x1d\x9c\x56\x62\xfe\xfd\x5b\x09\xb5\xe9\xd0\x28\x3c\x04\x3c\x8b\xd0\x0c\xc1\x1e\xbb\x50\xb8\x0b\xb1\x56\xa9\x27\xc2\xa5\x10\x27\xc3\xaa\x0d\x72\x9e\x0d\x89\xac\xa3\x13\xe8\xce\x3f\x1c\x16\x55\xaf\x64\x41\x2b\x40\x20\x4e\x65\x31\x92\x2d\xa8\xba\x4a\x4b\x84\x9d\x40\xed\x6b\xc2\x67\x95\xa4\xa5\x47\x56\x67\xbe\x89\x02\x35\x2b\xf6\x77\x6a\x2c\x12\xb1\x4b\x70\x24\x5f\xf2\xd1\x28\x16\x41\x58\xf5\x06\x96\xd0\xb7\x24\x75\xb0\x37\xfd\x34\x02\xf7\x66\x31\xb4\xa0\x23\x65\xd0\x00\x1e\x77\x6c\x06\xe2\x38\x74\xc1\xb4\xb2\x92\x6b\xb2\xf7\xbd\x9f\xf4\xbd\x21\xbd\xb1\x93\x1d\x97\x26\xb1\x96\x38\x17\xcf\xe1\x3c\x04\x3e\x43\xff\xc5\x25\xb7\x33\x35\xeb\x84\x9c\x67\x89\x00\x45\xd7\x34\x15\x4f\xe7\xb2\x1f\x69\xc5\xcb\x20\x39\xa9\x1a\xd0\x1c\x36\x2c\x1f\x19\x47\x9b\xa4\x51\x6c\xbc\xbe\x51\xd2\x53\x0e\x9c\xc7\xc7\x3b\x2c\xc7\x1f\xed\xaa\x33\x90\x71\x09\xf9\x41\xc0\x9e\x13\xac\xb4\xda\x96\xec\x96\x82\x89\x99\x54\xe8\x8c\x79\x70\x86\x75\xb8\xda\xdb\x38\x86\x0f\x03\x7e\x4b\x0c\xfa\x8c\x2e\x48\x97\x67\x08\x3c\x89\x1e\xcc\xbe\xdb\xbc\x4b\x67\xbd\xfb\xb8\xd0\x42\xc0\x35\x44\xb3\x33\xe7\xe2\xfd\xc0\x00\xdf\xb9\x8e\x2e\xc6\x57\x20\x20\x8a\xe0\xb5\x1d\x74\xc1\x1b\x14\x62\xd4\xb8\x9f\xa7\x08\x07\x28\x2d\xb1\x0f\x0c\x3d\x2b\x1b\x59\xbe\x4a\xc9\x47\x7c\x89\x95\x29\xf2\x1a\xb0\x2a\xff\x72\x7a\x1c\xf6\xb2\x7d\xea\xeb\xf3\x14\xb4\x6f\x7b\x7d\x85\xcf\xd5\xcc\xcc\x79\x49\xa6\xae\xa9\x28\x33\x64\x5f\xb0\x6b\x62\xf7\x80\x76\x95\x3f\x01\xf3\xc3\xcd\xa6\x1f\x3f\xbc\x9e\x23\xe2\x20\x81\x8a\xaf\x5d\xdd\x0d\x53\x1e\x62\x6a\xca\x5d\x8b\xf4\x77\xef\x9f\x79\xa0\xce\xeb\xb1\xba\x1e\x8f\xc7\xe3\x94\xf9\xf3\x3e\xe1\x51\x6f\xe5\x83\x97\xa5\x96\x25\x9f\x2d\x57\xd6\xdf\x9e\x37\x1d\x49\xa0\x7b\x53\xb1\x74\xef\xff\x88\x74\xc1\xd4\xc8\x5e\x84\x5e\xf5\xbb\x6f\xd2\x44\x4d\x0c\xe1\xbf\x0d\xb1\xb3\x81\x8c\x00\x14\x31\x65\x0b\x7a\xc5\xad\x09\x30\xc3\xfd\x6f\x77\xd6\x4d\xab\xef\x35\x9a\x64\x59\xe0\x40\x23\x10\x50\x8a\x7d\x68\xa4\x86\x1d\x05\x69\x89\x67\x12\x0a\xcf\xfa\x88\xb1\xe8\x67\x6b\x1a\x68\xb5\x98\x30\x60\x4f\xe8\xb9\x18\x0f\xd6\x3f\xf8\x59\x21\x53\x6a\x89\x08\xaf\xbc\xbf\xc2\xf0\x49\xfd\x11\x4f\xdd\xae\x02\x97\x89\x90\x84\xcd\x66\xac\x80\x46\x46\xac\x59\xb0\x9a\x29\x5a\xf5\x49\xd3\x6d\xb1\x20\x54\xbf\xb2\x16\xb8\xb2\x1b\x14\x95\xd5\x9a\xde\xb9\xcb\x00\x71\x40\x1d\x60\x53\x97\x3c\x29\xc5\x13\x55\x9b\x08\xe8\x7a\xef\x9d\x78\x2f\xa5\x79\xc3\x35\x68\xba\xae\x02\x05\xe3\x9d\x7b\x93\x0d\x3e\x7e\xff\x5d\xc8\x6a\x7d\x3c\x82\x22\x49\xa9\xe8\x30\xde\xb7\xb1\xc1\xed\xb1\x61\x4f\xc3\x10\x81\x74\x29\xcc\x8d\xe4\xc2\xac\x35\x23\xb2\x7a\x5d\x91\x80\xb4\x65\xaf\x1f\x34\xd3\x21\x4e\xe7\xf5\xc4\x34\x30\x4c\xbc\xde\xd0\x65\x28\x3f\x75\xc8\xca\x2b\x4e\x2a\x8c\xa3\xba\xef\xa6\xd2\x2c\xd6\xbc\x58\x69\x9d\xac\xcf\x64\xb9\xf2\xa0\x51\x07\x9a\xd8\x07\xf9\x5a\x1d\xd0\x40\x7a\xb6\x35\x29\x59\xc9\xc4\x9d\xfb\x9f\x90\x00\xce\x41\xcd\xb0\x5c\xec\x7f\xa3\xb3\x14\x76\xd8\x5b\x09\x72\x68\x1b\x7b\xec\x34\x82\x80\x84\xf9\x8e\x77\x14\x78\x19\xec\xd6\xa3\x00\x98\x22\xc5\x58\x49\x09\x11\xee\xa4\x65\x3d\x9d\xb9\x9e\xff\x6b\x6a\xda\x95\x95\xcc\xbe\xb1\x3a\x34\x22\x25\xb4\x0b\x9c\x1b\x49\x98\xd0\xad\x72\x3c\x71\x67\x20\x54\x7b\x95\x92\x61\xc8\xcf\xbd\xce\x0f\xa7\xc7\xe4\x05\xd9\x87\x56\xc1\x20\xf6\x67\x94\x57\x01\xe3\x69\xb5\x35\x2a\x34\xb8\xb7\x8f\x48\x7c\xed\x90\xb2\x30\xa3\x95\x66\x23\x7b\x76\xc2\xd1\xe8\xde\xdb\xea\x20\x5e\xe5\x6e\x98\x02\x7c\xca\xb4\xa4\xe5\xcf\x41\xec\xa4\x6e\xdf\xa9\x94\x15\xbb\x73\x12\x47\xe8\x91\xb2\xad\x13\xee\x87\x07\x39\xe1\xe2\xb8\x84\xdd\xbf\xfd\x25\xc1\x2d\x57\x33\x43\x4b\x6a\xa8\x3b\xf9\xfc\x0d\xff\xb6\x8c\xf8\x74\xfe\x7d\xda\x35\xe4\xfc\x73\x7d\xb5\xb6\x6d\x4b\x6e\x20\x23\xd8\x92\x0b\xe7\x52\x8a\x5b\xd8\x9f\x9f\xc0\xfd\xd8\x67\x15\xb2\x0d\xd0\xeb\xea\x3d\x5c\x68\x05\xe9\xa8\xb8\x36\x11\x2f\x0c\x8c\xae\x05\xd5\x7d\x73\x4b\xc8\xd2\x9f\xd8\xa5\x8c\xcb\xdf\x03\x61\x96\x0f\x65\x20\x23\x9c\x7e\x2b\xb7\xe5\xb1\xa2\xa0\x7f\x15\x86\x40\x9d\x09\xf5\xde\xee\x2c\xcd\xaf\xd8\x5e\x52\x81\x6e\xf4\x7b\x52\x33\x2a\x34\x51\x0c\x66\x1a\xac\xf8\x19\xcc\x30\xba\xaf\x24\xa2\xe2\x9e\xc9\x32\xbc\xeb\x6a\x94\xcf\xab\x11\x29\xef\x8a\xf0\x5a\x98\x4a\xab\x2b\x79\x0d\xfb\xbb\xa2\x6a\xee\x9d\x05\x7a\x44\xa6\xad\x41\xbf\xa3\x26\x35\xff\x00\x0d\x00\x42\x77\x32\x98\x8d\x56\x44\x1f\x9c\xc9\x52\x87\xe2\xfe\x00\xf4\xe3\x8c\x66\x19\x63\xff\x80\x53\x3c\x65\xf2\x7a\xcb\x01\xf5\x15\xe0\x18\x25\xac\xe2\x73\xe8\x61\x1d\xcf\x16\x78\xdf\x7e\x19\x4b\x9f\x58\xfc\x0b\x71\x15\x19\xf0\xfb\xe4\x39\x0b\x88\x02\x6e\x75\xb4\x0f\x84\x51\x07\xae\x19\xbf\xb6\x0b\xcf\x86\x8f\x7b\x9b\x2b\x71\xcb\xb8\x04\xaf\x46\x6a\xec\xdb\x6d\x35\xbb\x8d\x83\x23\xc0\xc2\xc7\x96\x2c\x85\x8a\x13\x3f\xdf\x7e\xae\x29\x24\x72\x8e\x8d\x62\x8c\xbc\xe6\x53\xc5\xac\xb8\x11\xac\x82\x21\xf9\xf9\xd1\xf9\x69\xc7\x55\xf6\x23\x3b\x77\xd1\x87\x09\x24\x5c\x43\x4a\xb8\x7d\x46\xa9\xf8\x15\x53\xc4\x9e\x21\x2d\x54\x7f\xfb\x49\xf6\x12\x61\xba\x0c\xcd\x01\x5c\x3f\x47\xf8\x1e\x98\x09\xf3\xf4\x9d\x8f\x98\xa7\x94\x11\x1c\x9d\x9f\x1e\x23\x05\x5c\x68\x43\xad\x96\x47\xde\x01\x0c\x65\x3c\x39\x14\xbc\x2b\x44\xb1\x31\x2c\x7d\xc5\x4a\xa2\xbc\x24\xa8\xee\xdc\xed\x82\xac\x6d\x06\xd4\x01\x22\x4c\x57\xf0\xc3\xc1\x51\xea\xa6\x03\x6e\xef\x21\x0c\x44\x3d\x18\x92\xb6\xe3\xaa\x13\x09\x56\xf6\x53\x46\x1b\xad\x10\x3f\xc0\xe5\x74\x77\x1a\x4a\xae\x6f\x23\x02\xe4\xe0\x7b\x46\xcb\x9f\x14\x37\xec\x9d\x28\x58\x24\x53\x12\x3d\x7b\xb1\xd0\xf7\xf5\x15\x32\x66\x91\xa1\x58\x0f\x14\x8e\x4f\x84\x91\x89\x64\x12\x38\x33\xfb\xe7\x39\xc4\x12\x1c\x4c\xaa\xc3\x46\x58\x51\x15\xa5\xda\xa4\x40\xba\xa3\x29\xc6\x8b\x48\x09\xa7\xf5\x44\x66\x4f\x32\x3a\x99\xe5\xf2\x09\x7a\x5f\x6d\xd0\x60\xe2\xde\x51\xda\xb5\xdb\xc6\xc4\xd0\x39\x33\x44\x9b\xb6\xb8\xb4\x6f\x11\x20\x49\x8f\x3c\x46\x16\xa4\xb9\x3e\x22\xc5\x35\xc9\xb7\xd9\xef\xe8\xba\x2d\xeb\xcf\x33\x5e\xe1\x6d\x10\x19\xc5\xf0\xd7\xe3\xa5\xe9\xfe\x87\x7e\xa2\xfa\x9a\x76\xe4\x11\xf3\x10\x42\x9b\x50\xa2\xa8\x28\x65\xbd\x46\x9f\xdd\x99\x8c\x16\x8b\x04\x3a\x3a\x93\xe8\xae\xf6\x61\x4a\x48\xe6\x06\x8b\x72\x80\x7d\x98\x12\x24\x5e\xb1\x28\x1f\xb7\x7d\x98\x98\x77\x36\x30\x09\x8c\x5d\xb1\x2a\x43\x16\x0e\x40\x59\xd9\x49\x08\xa2\x1e\x3e\x40\x81\xbf\x9a\xa4\xd0\xdb\x22\x5b\xc9\x3d\x52\x32\x4b\xbe\xdb\x7b\x89\x69\x91\x34\xbc\xb6\x7d\xf0\xce\xbe\x75\xa6\x8c\xab\x0b\x97\x40\xd6\xbd\x35\xa4\x52\xed\xea\x5b\xb7\x49\xde\x47\xb2\xfa\xd6\x3f\x68\xec\x18\xd6\xbd\x35\x38\xfa\x76\xf1\xad\xfb\xbd\xce\xb7\x75\xf6\x3a\x2a\x9e\xd2\x84\x7b\xd7\x53\x9a\xf0\x7d\xa7\x09\x47\x60\x7e\x14\xfc\x58\xbd\xc4\xdd\xc7\x9a\x2c\x0c\x00\xf4\x76\x16\x19\x42\xf3\x36\xd4\x2c\x46\xe0\xb8\x33\xfc\xca\x43\xfe\x92\x4b\x0c\xfb\x3d\xeb\xb5\xde\xf5\x1b\xb1\xcb\xa3\x46\xa8\xbf\x4c\xb9\xc5\x9b\xf2\x89\xf1\x9e\xb7\xef\x2e\x62\xa0\x3f\xea\xbb\xbe\x25\xf7\xec\xd9\x95\x13\xf0\x7e\x72\x8e\x57\xd7\xe9\xfe\x52\x8e\x13\x9f\xb4\x39\xe3\xf8\x21\xf6\xdb\xa7\x65\x21\xaf\xe6\x20\x67\x1a\x7c\x35\x21\x79\xfd\xe9\x83\x56\x68\xc8\x41\x1f\x25\x04\x43\x1e\xd1\x56\x0c\xed\xc3\x50\x70\x0c\x39\xc9\xbd\x68\x0d\x34\x84\xe4\x0a\xba\x3f\x42\x74\x15\x22\xb1\x5c\x60\x29\x56\x0c\x15\x94\x62\x86\x7a\xc0\x9a\x35\x95\x0b\x3b\x6d\xd6\x54\x2d\x21\xc5\x09\x32\x10\x5c\xe6\xde\x7e\x5c\x09\x7d\x00\x76\x70\x8a\x20\x59\x30\x72\xbe\x36\xfb\xbe\x63\xb1\x73\xf7\xc5\xde\xc6\x34\x98\xd6\xf5\x05\xf6\x43\x38\x18\x58\xc3\x54\xed\x7a\x77\x31\xe3\x7a\xb5\x6a\xe6\x7c\xe1\x61\x7e\xd2\x12\xb0\x25\xba\x93\x19\x2d\x7d\xfe\x2e\xe6\x9c\xd7\xac\x9e\x62\xda\xa3\x5e\xef\xb4\x1e\x92\x3a\x6a\x3a\x4f\x92\xf1\xab\xfe\x14\x21\x23\x5c\xa2\xc0\x61\x8a\xd9\x4f\x71\x62\x65\x3b\x5f\xac\x93\x96\x92\xc5\x72\xeb\xcb\x40\xa4\x4a\x9b\x1e\xe8\x05\xe2\xf0\x42\xdc\x2c\x15\x89\xf7\xf6\x25\x7e\x44\x0a\xf1\x03\xa3\xf0\x0e\x85\x5e\x1a\x12\x56\xcf\xd8\x04\x90\xdc\xc2\x02\xdb\x10\xe6\xc7\x51\x58\x7e\xbd\xde\x44\xfb\xac\x19\x94\xe9\x6b\xb9\x33\x2e\xd2\x54\xd0\xaa\x80\xde\xd6\x49\xfc\xbb\x21\x04\xce\xd4\x9c\xb9\xe0\xf7\xb9\x51\xbc\x30\x9b\xf3\x87\xdd\x7d\x03\x62\x39\xfb\x87\x55\xb3\xa0\x07\xe4\x07\xed\x23\xc8\xb8\x7d\x42\xc4\xf5\x93\x04\x3f\xc4\x79\xd0\xd7\xec\x0e\x80\xc4\xa8\xcd\x66\x35\x07\x2c\x8e\x00\x71\xd7\xe5\xa6\x83\xf7\x93\x07\x20\xf9\x47\x24\x3b\xd2\xb4\x9f\xa5\x2e\x4c\xb5\x15\x95\xe7\x1c\x87\x86\x52\x78\x42\x83\xfe\x13\x3a\x0a\x95\x9e\xb8\x2e\x9e\x17\x9a\x3e\x40\xf0\x09\x12\x03\x5a\x11\xda\x2a\xa4\x1c\x1c\x6e\x84\xfd\x9b\x52\x32\x0e\x48\xcd\xe7\x0b\x13\x72\x2f\x2b\xda\x8a\x62\xf1\x88\xb8\x62\x9b\xb8\xee\xb8\xc2\x21\x4b\x89\x92\x4b\x2b\xed\x2b\xd2\x50\x45\x6b\xab\x76\xb9\xfd\xad\x59\x52\xe4\xe2\x51\xa2\xb8\xdb\x9f\x82\x58\x4e\xf8\xed\xce\x20\xc0\xbf\x0d\xcd\xc5\x1c\x49\x4b\xc8\x5e\x49\x5a\x46\x92\x03\xd5\x1c\x66\x34\xcb\xab\xfd\x08\x41\xb6\x5d\x79\xb7\xac\x2a\x92\x93\x24\x5b\x0e\x27\xff\x84\x54\x78\x9d\xa3\x08\x88\x26\xf7\x1f\x52\xf6\xfe\x1b\x07\x84\x49\xfb\xf9\x92\x2b\x91\xd8\x18\x99\x2f\x91\x80\x8f\xa4\x0e\x6f\x37\x23\x3d\xfd\x44\xaa\xd2\xf2\x32\xb7\x18\xa1\x9d\xd7\x9a\x1e\x29\x06\xcd\x4e\x69\x75\xde\xb0\x62\x9b\x0e\xcc\xbf\xbc\x39\x3f\xec\x53\x03\xe7\xbc\x6b\x4b\xc1\xe0\x7b\x42\x4b\x5f\xfa\x79\xcd\xa6\x0b\x29\x2f\x13\x07\xdb\x8f\x10\x19\x17\xed\x74\x52\xc8\x3a\x42\x39\x1d\x6b\x3e\xd7\xcf\x9d\x60\x18\xdb\x69\x3a\x20\x5c\x54\x70\x5c\x7b\x7d\x88\x09\xe3\x4d\x96\x01\x2f\x4c\x8a\xf0\xc6\xc0\x50\x0e\x7a\xd3\xe9\x5d\xeb\x53\xf2\x76\x10\xca\xd5\xe0\x23\x65\x9d\x63\x52\xbb\x7d\xae\x70\xcd\x0d\x6f\xba\xd2\xb5\x33\xb0\xc1\xea\xac\x61\x00\x70\x2b\x53\xe2\x62\x46\xd6\x44\xdd\xe6\xee\xf9\x6b\x47\x46\xec\xbb\xe3\xb3\x58\x9e\x47\x7e\xe5\x50\x1c\xf6\xcc\xfe\x92\xb8\x9f\x3e\x1b\xde\x8a\xe5\xb0\xaa\x50\x4f\x38\x93\xe5\x33\x1d\x07\x63\x3b\xd0\xb6\x90\xfb\x86\x89\xf1\xfc\x8a\xf5\xe8\x4f\x55\x04\xed\xb5\xcf\x43\x0a\x71\xd4\xff\xdf\x41\xc5\xd5\xfc\x83\xa5\x2d\x1e\x2b\xa2\x0f\xfb\x5e\x8a\xf1\xe6\xaf\x93\xea\xae\x09\x14\xea\x05\x2f\xe3\xc8\xae\x47\xfc\x78\xcb\xdf\xaa\x65\xd8\x6b\xdd\x7e\xf1\x96\x99\x6b\xa9\x2e\x71\xae\xe2\x3c\x2b\x23\xe1\xce\x21\x2c\x9e\x56\x66\x45\xe2\x52\xab\x4c\xbb\x3d\x99\xcb\xa1\xec\xca\xd1\x61\xcf\x7f\xaf\x35\xdd\x7f\x19\x16\x59\x29\xc5\xb2\x0f\x7e\x80\x72\x2c\xb2\xb9\x24\x6b\x5d\x45\x9a\xdc\x4f\x51\x16\xd9\x76\x85\x20\x19\x80\xa1\xcb\xd4\x15\x2f\xd8\x61\x51\x40\x2a\xfc\x9d\x86\x1e\xc6\xae\xc7\xcc\xbe\x32\x35\xac\x3c\xef\xd1\x80\x49\x3e\x65\xf8\x96\xd0\x8a\x53\x68\xc0\x49\xfa\x37\x5a\xfe\xbe\x3b\xf0\xbb\x7f\x2c\x64\x14\xad\xbc\xbe\xdb\x31\x10\x73\x79\x18\x04\xe3\xb5\xe1\x1f\x16\x58\x72\xfd\xe5\xd7\x75\x89\x95\xd5\xf1\xe5\x2c\x2b\xb8\xe9\x77\x1c\xfa\xd3\xf0\xf3\x0d\xd5\x97\x5d\xbb\x0e\x36\x6e\x64\xd9\x75\xe7\x88\x3e\x77\xd3\x38\xa6\x48\xe3\xdd\xda\x76\x24\x2f\x9d\xb1\x67\x91\x9d\xa9\x43\xfd\xfa\x3f\x8f\xdf\x3e\x30\x1c\xb8\x3f\x12\xed\xec\x3f\xd3\xa0\x61\xc1\xaa\x79\xdb\x33\x4a\x40\xa1\x3a\xba\xd1\x92\x3a\x22\x8a\xba\x68\x25\xc5\x03\xa1\x62\x14\xdd\xa7\x64\x3f\x02\x77\xbf\xf3\x71\x7e\x2a\x48\x97\x50\x8d\x2a\xc1\x08\x79\x04\x0b\xdd\x7c\x0d\x0e\x20\x3f\xfd\xe7\xf1\x5b\x1f\xea\x0b\xd4\xa3\x21\xe9\x38\xcf\xb9\xfc\xf6\x7d\x32\x43\xff\x0e\x6d\x54\x5b\x18\xd2\x1a\x6d\x3f\x4f\x21\xd5\x1f\x8c\x9f\x40\xac\x62\x73\xae\x8d\x5a\x3a\x79\x2e\x67\x11\xc9\xce\xb9\x1c\x6e\xb9\x64\x4b\xf2\xd7\xef\x4e\xfe\xf6\x5f\xdf\xbf\x3b\x3a\xfc\xfe\xbf\xde\x1c\x1e\xfd\xf5\xf4\xed\xc9\xcf\x3f\x9f\xff\xed\xfc\xe2\xe4\xcd\xcf\x3f\x1f\xb5\x4a\x31\x61\x8e\xb0\xf1\xee\x39\x33\x3f\xff\xec\xf6\x98\xfe\xf9\xe7\x8b\xa2\xe1\xcd\xcf\x3f\x9f\x79\x37\x27\x9c\xa3\x76\xaa\x12\x60\xc1\x01\x7a\xac\xab\x8e\x04\xfd\x0e\x97\x1f\xde\xb2\x57\x77\x39\xa0\x83\x06\x54\xfd\xa7\x88\xcb\xbb\xeb\x5a\x50\xe4\xe6\xf4\xc2\xb7\xde\xd9\xff\xa0\x22\x13\xaa\xec\x28\xd1\x5c\xcc\x01\xed\x0f\x55\xd4\x10\x78\x20\x53\x66\xae\x19\xc3\xba\xcd\x55\xd5\x2a\x1d\x0f\xee\x27\xab\xfa\x1a\xd7\xe2\xd8\x2a\x30\xbd\xd6\x2c\x2e\x4d\xc9\x15\x02\x5e\x71\x76\x0d\x6a\xba\xe6\x73\x41\xab\x28\x34\x08\x9d\x0a\x31\x03\xac\xfb\xfd\x1d\x29\xe1\x51\x11\x27\x36\x77\x76\x61\xb2\x7e\x96\xc9\x5a\x86\x49\xaf\x33\x06\xd5\x96\x36\x56\x92\xb3\xd3\x63\xf2\xf2\xae\x93\x01\xb6\x81\xcb\x2a\x39\xdf\xc4\x10\xc1\x11\x65\x55\xbc\xb4\xee\xf0\x6b\x90\xc7\x0f\xcd\xe8\xed\xb4\x94\x35\xe5\x62\xbb\x4d\x26\x66\x6d\x55\x2d\xc9\xaf\x2d\xad\x50\x7b\x3d\x93\xe5\xfa\x49\xb3\xf7\x47\xff\xd1\x9f\x26\x7f\x0c\x84\xff\x69\xf2\x47\x2b\x7d\xc2\xce\xf8\xd3\x44\x5f\x15\x93\x3f\x16\x55\xab\x0d\x53\xc4\xdd\x74\x67\xe8\xd3\x8f\x74\xa6\x08\x72\x8e\xba\x11\x80\x52\x0a\x76\xee\x83\x68\x74\xe8\x54\x80\xfc\xce\xbf\x28\x5a\xb0\x33\xa6\x38\x98\x06\x52\x94\x0f\xda\xa1\xc2\x73\x30\x29\x5d\xa3\x33\xe8\xae\x8d\x74\x84\x39\x13\x8c\x95\x68\xa9\x39\xb2\x19\x99\x5b\xaa\x61\xdd\x27\x60\x54\x4d\xad\x36\x50\x28\x46\x11\xf5\x8d\x94\xac\x62\xd0\xc8\x2e\xa9\xf3\x28\x86\x48\x7c\xca\xae\x90\x62\x2c\xd8\x1c\x53\x68\x5d\x2a\x09\xe2\x29\xe2\x31\xfb\x4f\xa6\x64\x94\xae\xa9\x8d\x6c\x08\xaf\x6b\x56\x72\x6a\x58\xb5\x24\x57\x9c\xde\x71\x7c\x50\x2b\xa0\x0f\x06\x0a\xc7\x7d\x21\x89\x84\x18\x70\x2b\xb8\x0b\xd7\x2c\x5a\x43\x4a\x79\x2d\xee\xae\x52\xb8\xae\xac\xa1\x10\x57\xf0\x6a\xd4\x6b\x96\x03\x93\x4b\x1a\xe0\x89\x5e\x94\x20\xcd\xea\x40\x5b\xbf\xf7\x50\xa7\xc0\x6f\x5a\x74\xe8\x7c\xe1\xc1\x8d\xdd\x91\xa0\x5a\x01\xb0\x9c\x5d\x6f\x2f\xc8\xf8\xd0\x4c\xdc\xd5\xcf\x4e\x63\xd6\xf7\xd3\xeb\x0f\x07\xac\xc1\xc3\x43\x8c\xad\x24\xab\xcc\xa4\x2a\xf8\xb4\x5a\x92\x05\xad\x0c\x73\x88\x99\x34\x5e\xa5\xbb\x4e\xca\x39\x33\xf1\x42\x54\x52\xcc\x63\x5d\x97\x7d\x68\x58\x61\xa0\x77\x13\xa3\xa2\x6d\x90\x3a\xab\xc6\x2d\x65\x9b\xec\xff\x88\xfd\x1e\x5f\xbf\xf0\x93\x9e\x22\x73\x52\x72\xaa\x52\xb3\xa9\x8c\xac\x18\x72\xca\x10\xe1\xb4\xb1\x3b\xd1\x33\x1d\x3f\xfd\xb1\x34\x5b\x49\xf0\xba\x5d\xb8\x8d\x03\x2c\x77\x11\x5e\x19\xfc\x18\xc6\x50\xe8\x91\x64\x45\x2c\x7e\x03\xcd\x19\x96\xc4\x6a\x45\x06\x23\x68\xae\xa9\xd8\xdd\x83\x62\x76\x63\x29\xde\x54\x8c\xfc\xf1\x92\x2d\x47\xc0\xed\x23\x54\xe7\xff\x44\xda\x90\x41\x05\xcf\x87\x1c\xc9\xc6\x12\x20\x15\xf9\xa3\xff\xd7\x9f\x1e\xb0\x37\xcc\x90\x30\x1c\xbe\xd4\xb6\xda\xb5\x9c\x20\x32\x0d\x8f\xc0\xe4\x98\x5b\x40\x07\x5a\x63\x24\xce\xf2\x84\x9c\x40\xd7\x34\x34\x20\x11\x60\xde\x5a\x02\xf1\xcd\x89\x9e\xd5\x9f\x7c\x38\xd5\xed\x32\xef\xb8\x8f\xf2\xf4\xde\x4a\xd7\x27\x88\x8d\xc8\x19\x74\xd5\xeb\x3e\x01\x51\xfc\x56\x9e\x7c\x60\x45\x9b\x56\xfd\x3e\x28\x04\x74\xc9\x12\xb2\x29\xf3\xac\xde\x77\x6c\xe9\x4f\x45\x5c\x06\x6b\x9f\x07\x38\xc0\x4e\x44\x45\xf5\x83\xb7\x2f\xe3\x25\xbb\x7b\xbf\x48\xbc\x4e\xbd\x5f\x03\x28\x72\xed\xb9\xc2\xae\xf4\x5a\xd1\xc9\x07\xae\x8d\xfe\xdf\x28\x4f\x0a\x59\x4f\xfd\xa1\x8a\xe4\x78\x5e\x43\x24\x26\xb7\xfa\x0e\x4f\x25\x95\xb4\x41\x6b\xeb\x5f\x60\x5b\x0b\xfc\xce\x4f\xa0\x62\x8d\x62\x1a\x62\xce\xd4\x4e\xc5\x33\xed\x0a\xb4\xa4\x00\x5c\x64\x17\x91\xc0\x2e\xc4\x49\x43\xf9\x5a\x1e\x1c\x10\x77\x1d\x2e\x17\x2c\xc1\x89\xb5\x94\x26\x3d\x55\x00\x3f\x4a\x13\x3b\xf8\x60\xcb\x29\xbf\xb6\xfc\x8a\x56\x0c\xdd\xaf\xd7\xbc\x2a\x0b\xaa\x30\xad\x11\x85\x3e\xd1\xd2\xd5\xc0\x62\x1b\xb4\xa4\x00\x56\xd0\x06\x58\xc7\xec\xda\xa5\x33\x51\x65\x78\xd1\x56\x54\x11\x2b\x01\xe7\x52\x25\xe1\xd5\x0c\x62\xb3\x6e\xa7\x26\x59\x53\x78\xe5\xe0\xb7\x8b\x55\x42\x62\xc6\x33\x8b\xa0\x8a\xcb\x19\x6a\x96\x2b\x62\x66\x1f\xab\xce\xdc\x6e\x4f\xa2\x40\xce\xfc\xc1\x13\x24\x7a\x8c\x86\x12\xa5\xe4\x70\x4d\xf8\x5c\x48\xc5\xca\x83\x48\x01\x09\xb2\x70\x42\xbe\x0d\xcd\x1b\x53\xfa\x7e\x5b\x8d\xcb\x47\x92\x01\x56\xc6\xbd\x9b\x13\x54\x8e\x9b\x3a\xd1\x3b\x93\x8a\x5d\x31\x45\xf6\x1d\xae\x1b\xbb\xe2\x85\x39\x98\x90\xff\xbf\x35\xf4\x52\x83\x6f\xc1\x82\x74\xc2\x30\xb4\x17\x70\xe0\xff\x54\x93\x17\x64\x1f\x86\x8a\xad\xc7\x03\x9f\x40\xa2\x97\xda\xb0\x3a\x9d\x9f\xb7\x55\x03\x91\x9c\xb8\x98\x63\x13\xfc\xe8\x6d\xdc\x6e\x71\xd1\xda\x5a\xe1\xf6\xd0\x31\x57\x0e\x3a\x32\xc3\x21\xc9\xb5\x93\x8b\xbd\xf0\x6a\xc8\xd8\xf0\x67\x6a\xd8\x0b\xff\x0d\x39\x02\x44\xb1\x39\x48\x2f\x94\x3d\x5b\x6e\x7e\x97\x98\x87\x69\x64\x23\x2b\x39\x5f\x9e\x37\x8a\xd1\xf2\x48\x0a\x6d\x14\xc8\xe8\x87\x74\x2b\x5d\xdc\x44\x84\x7b\xee\xd4\xd5\xae\x50\x57\x11\x26\x67\x88\xcb\x24\xdb\xf9\x02\x5b\x81\xc2\x0f\x09\x2d\x94\xd4\x3a\xbc\xd3\x5d\x4d\x36\xf0\xed\xe9\x89\xef\x0b\xea\xfd\xcb\xa1\xcf\x28\x8c\x09\xde\xf6\x6b\xba\x74\x52\x89\x4e\x79\xd9\x43\x50\xf4\xa4\xdf\x95\x1d\x0e\xed\xe9\x78\xe3\x3c\x58\x9d\xe0\xf0\xed\xf1\x5d\x53\x19\xb6\x67\xf2\xde\xb4\xa4\xc1\xda\x70\x20\xa1\x61\xed\x82\x41\x09\xb3\x8c\x10\x83\x76\x4a\xe7\xfc\x8a\x89\x30\x33\x8f\xa4\xed\x68\x4d\x3f\x9c\x5f\xb2\xeb\x84\x5f\xfa\x17\xfd\x8e\xdd\xbd\x48\x62\x0c\xde\xb0\x1f\x84\xa6\x86\xeb\x19\xa7\xd3\xea\x21\x7b\x9f\x02\x68\xca\x39\xab\x58\xb1\x45\xb5\xfd\xfb\x98\x88\x00\xbd\x67\x24\x99\x71\xb1\xc2\x63\x69\x47\x47\x87\x32\xe7\x3b\xbd\x71\x1d\x20\xf0\xdc\xb0\x50\x2d\x27\x5b\xe1\xfa\xe8\x86\xa4\x40\xcc\x82\x68\xeb\x29\x53\x5e\x84\xa5\xa9\x47\x0e\x54\x92\x14\x52\x29\xa6\x1b\x89\xd5\xaa\x9e\x75\x9c\x20\x4b\x3f\x8f\x92\x4b\x58\x86\xd6\x83\xc0\x94\x9e\x7c\xb0\x7a\xaf\x4e\x2b\x09\xc0\xab\xc7\x49\xab\x0f\xc5\x54\x20\x5f\xdd\xb5\xb2\x74\x6e\xd3\x43\x6f\x78\x0c\x1a\xc4\x9f\xa4\x8a\xe1\xee\x1a\x52\x03\x85\x57\x72\x25\x14\x5e\x79\xb2\x01\x09\x22\x04\xdc\x38\x77\x38\xc7\xe1\x9b\x18\xbe\xcd\x39\xd0\xf5\x08\xcd\x69\x07\xdb\x2a\x3a\x65\xcc\xde\x3c\x80\x2c\x30\xce\x9d\x39\x72\xc9\x96\xf0\x78\x1c\x31\xbd\x7b\xdd\xc0\x6d\xe1\x09\x1b\x52\xdf\x85\xd7\xd8\xbe\xd2\xa0\xdf\xfb\x69\x4e\x7e\xc8\xd0\x3d\x8e\x57\xa2\xeb\xae\xbb\x7a\x7c\x7c\xd9\x79\xe3\x90\x27\x7b\xde\xb8\x4e\x2e\x77\xbe\xb8\x41\x63\x0f\xae\x0e\xc3\x6b\x88\x8b\xab\xbb\xf2\x6d\xe8\x98\xa6\x4f\x71\x7b\x51\x48\x1a\x91\xb3\xc1\xdb\x0b\xaf\x4d\x6e\xb0\x53\x31\x22\x6f\xa5\xb1\xff\x89\x3c\x62\xc7\x92\xe9\xb7\xd2\xc0\x27\x3b\xb1\x92\x38\x01\xbb\xb4\x8e\xce\x6b\x61\xc5\xb0\xc0\xe3\xc6\x65\xb7\x59\x45\xc1\xad\xd7\x26\x33\xf8\x54\x10\xa9\xdc\x94\x0f\x24\x21\x58\xd2\xda\x11\x10\x07\xe8\x5d\x9f\xef\x1b\x0d\x71\x4b\x45\xbc\xcc\xf7\x46\x8c\x23\x04\x30\x8f\xf1\x1b\x80\x62\x6f\x2a\x28\xf8\x2e\x5b\x98\x30\x6a\x67\x8e\x1a\x36\xbf\x73\x89\xe3\xea\x55\x33\x35\x67\xa4\x81\xb0\x4e\x06\xce\x1d\xa2\x48\xe0\x35\x50\x9d\x88\x89\x19\xbc\x8d\x32\x97\x97\xde\xe3\x43\x41\xa7\x04\x5b\x23\x8f\x8e\x3a\x60\xbf\x47\xa4\xa0\xd6\x55\x53\x70\x90\xfc\xbf\x10\xbd\xfd\x1f\xd2\x50\xae\xf4\x84\x1c\xfa\x0c\xc3\xf8\x3b\x97\xa4\x11\x3d\x66\x00\x29\xcd\x7a\x60\x81\x0a\xc2\x1c\xa6\x85\x9c\xad\x29\xe3\x23\x87\xb7\x6f\x0f\xec\xe0\x5c\xde\xbb\x64\xcb\xbd\x54\x74\x25\xbc\x62\x89\xb2\x77\x2a\xf6\xba\x94\xc2\x9e\x14\x08\x3a\x29\x00\x9c\xef\xc1\x77\x7b\xf7\xa7\xf7\x0f\xd2\x20\x3b\xc0\xa4\xb3\x0c\x2a\xd8\xc0\x2d\xdb\xdb\x53\x35\x6d\x86\x6d\xa9\x8e\xf9\xbe\x63\xcb\xad\x85\x60\xde\xf4\xa8\xf0\x26\x8c\x71\xa6\x7a\xa7\x59\x6a\xac\xbf\xaf\x20\x46\xbf\x70\x6e\x41\x79\xc5\x14\xba\x04\x93\xc6\x46\x27\x98\x3d\x6b\x42\xaa\x7d\x07\xb7\x03\xfc\x08\x03\x5b\x3e\xf4\x1e\x8d\x4a\xca\xcb\xb6\xf1\xfc\x0c\x69\xb8\xa9\x3b\x86\x8b\x42\xd6\xce\x2f\x82\xef\x09\x9e\x70\xb7\x31\xc7\x2e\xe3\x09\x65\x4c\xd8\x0a\x98\x53\xd5\xf3\xfa\x24\xc6\x07\xe3\xc9\x0c\x0e\x5e\x66\x8f\xfd\xe0\x0f\xec\xa6\xf7\xd6\xa9\x4a\x22\xc0\xe7\xda\xc7\xb3\xe0\xda\x40\xd3\x3a\x04\xd6\x67\x52\x4d\x79\x59\x82\x2f\x12\x89\x0b\x05\x5f\x2b\x8c\x63\x25\x4d\xcf\x0f\x95\x26\x34\x56\x9e\xba\xa1\x0e\x7e\xd5\xd9\x25\x9e\x99\x94\xb4\x64\xbc\x60\x10\xd7\x1e\xc9\x3e\x28\xbc\xe2\xea\xd4\x78\x46\xb0\xb3\x9f\x34\xd2\x94\xf9\xf0\xa1\x3d\x92\x44\x5b\x55\x56\xdb\x03\x45\x0c\xdd\x32\x18\xe9\x03\x91\xec\x92\x12\xe6\x56\x48\x9b\x3e\xb3\x25\x35\x8a\x70\xdd\x2d\x60\x6f\x4f\x99\xa1\xbe\xcf\x85\x58\x41\x83\xea\x4f\xfe\xa9\x38\x93\x65\xdf\xa3\x7d\x0b\x2c\x14\xd9\xf7\xff\x98\x2e\x93\x8b\x5e\xc8\x60\x1d\x6f\x80\x66\x97\xf3\x70\x18\xae\x70\x39\x67\xfa\xf6\x8e\x05\x18\x3e\x0a\x45\x61\xf2\xed\x5c\x31\x44\x01\x06\xa9\x04\x52\xca\xb5\xbd\x6a\x05\xbb\x62\x96\x7b\x4b\x6e\xe7\x70\xda\x26\x62\xa6\xb9\xfc\xac\x5f\xd6\xbc\xfa\xff\xbf\x63\xf9\x56\x1a\x1f\xa6\xfa\x65\xe4\x02\xe6\xa8\xc7\x7d\xe0\x75\x5b\x63\xdf\x6a\x63\xac\x0d\xc3\x67\x33\xa6\x12\x9b\xf3\x91\x50\x7b\xd2\xf7\x5d\xf7\xa3\x35\x4e\x4a\x18\xaa\xe6\x50\x30\xed\xfc\xd0\x5e\xe5\x9a\x57\x72\x4a\x2b\x52\x73\x61\x49\x4b\x9b\x89\x8b\xb5\xe7\x84\x37\x76\x7f\xde\x42\x1c\xe8\xa0\xae\xb3\x14\x3a\xc7\xd3\x32\x24\x94\x4b\x1e\x9f\xad\xcc\xc6\xca\xc3\x41\xbe\x54\x4c\x6b\x4c\x0f\x7e\xc3\xc5\xb1\x0b\x2d\x26\x0d\xfb\xda\x4a\xc7\x0f\xb4\x6e\x2a\x36\xc2\xf0\xe3\xd7\xe3\x7f\x4a\xc1\x88\x2b\x7b\x18\x05\x16\x75\x75\x3c\x46\x92\x97\xa8\xf0\x36\x01\x96\xcc\xd7\xd7\x24\x51\xd0\x93\xbb\x21\xd8\xaa\xc9\x57\xcf\xbf\x7a\xfe\x32\x4d\xc4\x9c\xba\xd2\xa3\x82\x6a\xd7\xdd\x76\x7d\x75\xef\x5c\xc4\x83\xd7\xbf\x88\x9d\x9d\x97\xee\xbf\x5f\xb9\xff\x7e\x4d\xfe\x95\xf8\x34\x72\x46\xce\x7a\xff\xb5\xff\x49\x7c\xda\xd8\x32\x4f\xb4\x5c\x2f\x47\xfd\xb3\xb5\xa0\x02\x0f\x3e\x7b\xce\xbb\xfd\x0d\xda\x1e\xbe\x02\x9c\x33\x85\xac\x19\x4c\xfd\x57\xff\x3b\x4d\xd7\xc4\xe7\x42\x86\xbe\x21\x52\xb8\xa7\xbf\xdc\x87\xe9\x3a\x20\xd7\x90\xf7\x50\xd3\x4b\x0c\x58\x1d\x16\xa6\xa5\x95\x25\x78\xff\xeb\xf1\xcb\x03\x22\x45\xef\xf6\x24\x12\xae\xb8\xb4\xfa\x9a\x9f\x89\xfd\x97\x89\x18\x0f\xab\xd3\xf9\xd5\x86\xe9\xec\xcd\x24\xbc\x2d\x15\x4b\x78\x85\xbc\x32\xd9\x8b\xe3\x43\xb1\xbc\xa6\xcb\x20\x94\xbd\xba\x3e\xe7\x57\x8c\x2c\xf8\x7c\x01\x68\x08\x03\xfa\xa5\x12\xcc\xfb\x06\x19\xcb\x7d\x4b\x4b\x24\x64\x49\x78\xa2\xf6\x77\x6a\x9e\x69\xc8\x68\xc1\x18\x85\x03\xba\x09\x75\x6a\xa1\xf8\xe4\x25\x88\x95\x17\x2b\x40\x1f\x5b\x4e\x73\xfa\xfa\xab\xbb\xeb\x14\x41\x26\x6f\x4d\xad\x08\x14\xf4\x1a\x1e\xac\x9f\x66\xab\x87\xcb\x00\xae\xfd\xc8\xa9\x05\x07\x45\x38\x3c\xc3\x31\x7e\xe9\xac\xe1\xee\x44\xeb\x66\x2f\xcd\x2f\x7b\x26\xcb\x90\x20\x42\x9c\x3e\x0d\x89\x75\x9a\xec\xf5\x8f\x81\x3d\x48\xb4\x0b\xde\x1b\x87\xe1\xec\xec\x3d\x2e\x85\x7d\x0f\xbf\xf9\x07\xb5\x01\x27\xe4\x50\x94\x5d\x35\x51\xe2\x2c\xb1\x5f\x5b\x5a\x81\xf3\x7a\x0e\x79\x82\x2a\xcf\x7c\x45\x75\x47\x6b\x7d\x6d\x3b\x69\x9e\xf8\xda\xb8\xef\x75\x5b\x41\xa6\xe5\xc7\xdf\x3f\x2b\x27\xe8\x2e\xd5\x0a\xac\xce\x90\x6b\x55\x4b\xec\x5d\x2f\xbc\xfa\xef\x32\x2f\xa4\xf3\x4b\x0c\xda\x0c\xa7\xb3\x0d\xe5\x74\x5d\xee\x16\x99\xb2\x05\xbd\xb2\xdb\x11\x60\x9c\xe2\x9d\xea\x96\x18\x54\xac\x21\xd9\xde\x51\x81\x85\x13\x81\xba\xcf\x32\x2f\x06\x6c\xf3\xee\xdd\xa4\xc1\xf7\xfb\x69\xf5\xb4\x0a\xf1\x8f\x9e\x25\x91\x68\x52\xa7\x28\xa8\x5f\x8d\x56\xe6\xd5\x7d\xfe\xdb\x87\xd2\x5b\xbf\x4a\xd3\x5b\xef\x5d\xb9\xc4\xff\x26\xdb\x48\xdd\xc6\xdd\xb8\x5f\x7f\xbb\xdf\xcd\xfa\x01\x64\xf8\xaf\x09\x5c\x40\xc6\xea\x92\x9c\x13\x77\x98\x53\xef\x35\x37\x2d\x45\x00\x2e\xc1\xae\x5d\x49\x75\xb4\xac\x2b\x4b\x14\x39\xb9\xbc\xca\x96\x26\x57\xa6\xac\xa0\xad\xb6\x9b\xba\x6e\xac\xf9\x4d\xb4\x65\x3f\xef\x30\xfc\x7a\xff\x6b\x32\x26\x2f\x0e\xec\xee\x16\x28\x5a\x80\x05\x63\x85\x1b\x1a\xdb\xa0\xa1\x67\x16\xd6\xd4\xb7\xeb\x9c\x28\xe5\xb8\x43\xef\x5c\x51\x7b\x1f\x9f\xda\x24\x64\xc9\x0e\x67\x33\x2e\xb8\x59\xa6\xc2\xd9\xe7\x51\x9f\xde\xae\x51\x12\xa9\x51\x0b\x79\x4d\xae\x1d\x96\x00\xf0\xb2\x83\xc4\x8b\xc9\x7f\x6e\xff\x18\xe4\xb8\x86\xc3\x32\xe8\x22\xce\xe2\x08\xfa\x80\x93\x36\x96\xef\x26\xae\x6e\xde\x35\xea\x49\x19\x6b\x4c\xfe\x2a\x85\x54\xaf\xd0\x38\xc4\x5e\xf6\x41\x07\xb9\xf1\xb5\xdc\xf9\x52\x54\x6d\x19\x75\xc0\xe8\xb4\xa7\xc4\xe3\x73\x4c\x4e\xc1\x7f\xfb\xea\x63\x23\x07\x2f\x2f\x80\x28\x94\xe1\xc0\xbb\x8d\xa0\xf4\x84\xfe\x8d\x45\xf2\x70\x94\x73\x0c\x04\xf6\x03\x93\xf6\x5b\x98\x54\xd2\x00\xff\x3c\x78\xed\x91\x9d\x91\x0b\x48\xef\xde\xfe\x56\x8a\xe9\xb8\x75\x23\x61\xef\x33\x4c\x4a\x5f\xdd\x00\x49\xa3\x3f\xc4\xa6\x41\xde\xb3\x07\x8f\x6c\x8d\xa3\x7e\x44\x68\x25\x21\x88\x64\x8f\x23\xfb\x11\x2b\xdd\x8d\x33\xe9\x63\x4d\xab\xb1\x8f\x24\x32\x16\x80\xf6\xd9\x95\xaf\x8c\x7a\xbb\x20\xc7\x16\xf4\x0b\xf2\x09\x9b\xee\x81\x37\x18\x52\xb9\xad\x1d\x16\x25\xd3\x6f\xaf\xae\x2f\x90\xe0\x1d\xd6\x97\x0c\x34\x0b\x58\x38\x8c\xa5\x4d\x60\x0f\xc6\xcd\xd5\xa9\x0b\x37\x3b\x65\x89\xeb\xe4\xc4\x4f\xab\x4e\x73\x80\xec\x2d\x68\x15\xdb\x1d\xd6\xde\xe1\x25\x53\xa8\xee\x4c\x59\x0f\x85\x29\xb5\xde\x02\xaf\x9f\xba\xa7\x23\x62\x13\x40\x09\xe0\xe0\x7f\x42\xf0\xdb\xbd\x69\x5b\x5c\x32\xe3\x13\x33\x14\xa0\xa4\x34\xad\x21\x53\x5a\x51\x51\xd8\xbd\x08\x9a\x6c\x9a\xa3\x7e\xe6\x5d\xff\x46\x22\x01\x38\x5a\xf2\xdb\x60\xc7\x88\x80\xff\x83\xaf\x10\xd5\xaf\x72\xa1\x8d\xa5\x1a\x0b\x5b\x87\x4d\xde\x61\xa5\xe5\xc8\x4a\x5d\x3f\xe8\x5a\xf0\x02\x87\x77\xff\xc6\xfc\x19\xa7\x11\x30\x66\x1c\x6c\x5c\x94\xbc\x22\x53\x7a\xa1\x6d\xd2\xf5\x1c\x4e\x6f\xff\xb4\x48\x7b\x49\x36\x99\x43\xf6\xdf\xca\xf6\xd8\xeb\xe3\x35\x7a\x08\xa8\xbd\x11\xae\xa2\xdd\x25\x0e\xc9\x13\x5f\x1e\x14\x74\x6a\x86\xce\xb8\x28\x01\x1f\x78\x95\x98\xf0\xd4\x3e\x55\xd6\x10\xf0\x14\x81\x99\x9b\x9f\xa2\xcd\xee\xd8\x87\x16\x9f\x6b\x3e\xee\x6d\x09\xd1\x75\xf7\x45\x5f\x45\x81\x22\x1b\x5a\x79\x94\x1f\xab\x52\xf0\x99\xb5\xba\x4a\xc9\x30\x2b\x02\xdd\xe3\x89\xce\x37\xe6\xf5\x92\xce\x45\x94\x7a\x6a\xf7\xdc\x2d\x64\xdf\x67\x07\x10\xc3\xaa\x0a\x4f\x87\xce\x23\x66\x2d\x61\x23\x3b\x97\x58\xaa\x6f\x7f\x4c\xfa\xa1\x89\x8d\x83\xc5\x03\x79\xd0\x26\x88\x9c\x2e\x43\x6b\xd9\xd4\x1c\xdc\x69\x6b\xc8\x9c\x5f\x59\x15\x6a\x2d\xfe\xb1\x29\x96\x81\xf1\xa7\x05\xab\x1a\xa2\x58\xd9\x16\x6c\x40\x26\xa0\x4e\x34\xb3\x09\x39\x8c\x1d\x82\x80\x99\x11\x8e\xcb\xbd\x1e\x2f\xee\xb9\x3e\xb8\xc3\x15\x45\x3e\x03\x09\x0b\x26\x1e\x9f\x11\x76\xc5\xd4\x92\x34\x52\x6b\x90\xfd\xa0\x2f\x20\xc8\x21\x64\x53\xce\x7c\x61\x0d\x38\x55\x60\xce\x9c\x7f\x21\x69\xf0\x3d\xe7\x94\xd8\x03\xa7\xb2\x1c\xac\x03\xec\x6e\xd4\xfa\xeb\xe7\x2f\x53\xa3\xd6\xb9\xbd\x7f\x67\xf0\xbf\x10\x52\x1e\x14\x5a\x3e\x9d\x6d\x92\x93\x61\x6e\x7b\x92\xe7\x53\xa2\xce\xa9\xa1\x49\x98\x19\x08\x0e\x7f\x7d\x10\x05\xac\xbf\x7e\xfe\xd5\xf3\x97\xfb\x76\xee\xbf\x3a\xb0\xab\x10\x85\x95\xbf\x8a\xc2\xca\xe1\x97\xee\x2d\x12\x20\xac\x48\x97\xb4\xb3\xff\xf2\x60\x02\x35\x0d\x80\x4f\x7a\x2d\x55\xe9\x4a\xfc\x3d\x62\xa4\x7d\xf3\xd0\xfe\x93\xd7\x5e\xf9\x1c\x81\xd0\x0a\xd2\x31\xcd\x3d\x04\x01\x0d\x08\xa3\x73\x43\xbe\xac\xa5\x62\x5f\x46\x43\x3c\x56\xc5\x60\x3d\xb9\xab\xa6\xcd\xf8\x32\x21\x6f\x77\x48\xb1\xf3\xd0\x52\xe7\x9b\x52\xd4\x6a\xda\xdc\xe1\x39\x57\xb2\x6a\xeb\xbb\x66\x61\x0f\x53\x88\xbe\x77\x75\xab\x6e\x68\x57\x5a\x89\x69\x0e\xb5\xab\x39\x9e\x2e\x63\x28\xdf\x29\xab\xa4\x98\x63\xac\x32\x34\x2c\xbc\xe3\xa8\x9f\x86\xac\x5e\x48\x51\xb0\xc6\xe8\xe7\xda\x48\x45\xe7\xec\xb9\x23\xf2\x4e\x83\x6d\x0f\xb2\xe0\x47\xa0\xb6\x5f\xf9\x86\x4d\x81\xf0\x3d\x02\xd0\xb2\xaf\xff\x06\x79\x49\x0b\x80\x9d\x84\x59\xb7\xda\x52\xd4\x60\x58\xa4\x4e\xf7\x96\x50\x0b\x12\x3a\x08\x0e\xa9\x06\xa5\xd7\xfa\xa4\xa2\xda\xf0\xe2\xdb\x4a\x16\x97\xe7\x46\xa6\x39\xfa\x72\x58\x18\x9b\x68\xe9\x71\x82\x20\x87\x3f\x9d\x93\x63\xae\x2f\x89\x62\x5a\xb6\xaa\x70\xad\xca\x56\x00\x19\xef\x8a\x1d\x8b\x97\xdd\x4c\x15\x33\x0e\x72\x9f\xd4\xb4\x58\xa0\xe9\xef\xb2\x1e\xd8\x87\x46\xea\xae\xf9\x7a\x02\x4b\xe1\x15\x77\xaa\x38\xfc\xe9\x7c\xfd\x95\xb9\x8e\x9a\x64\xa0\x0f\x11\x4b\x69\xc0\x13\xdb\x65\xca\x8f\x8d\x62\x69\x5a\xd9\xc6\x99\xb6\x0c\x0f\x4e\x29\xc5\x4a\xae\x10\x48\xd5\xbd\x2b\x9b\xea\x49\xa1\xf9\x84\x5e\xeb\x49\x21\x6b\x72\x74\x7e\x4a\x4a\xc5\xaf\x52\xfb\x24\x0d\x13\x65\x5f\xd0\x6b\xcd\x90\xfc\xa9\x25\xdf\x7e\x9d\x32\x0f\x5b\xee\x15\x8a\x6f\x73\x7a\x9c\xf0\xf3\xa1\xf5\xdf\x33\x7d\x61\xdf\x3d\xd1\x9e\xcb\x55\x35\x87\x54\x78\x8f\xec\x8c\x57\x0c\x01\xbb\x90\x13\x5d\xdc\xd7\x89\x7d\xd8\xe6\x4b\xd9\x92\x6b\x8a\x8e\x6d\x38\x67\xd3\xcb\x37\x2f\x78\xf3\x8a\x9c\x08\xdd\x2a\xd6\x15\xa9\xaf\x92\x60\x15\x77\xdf\x47\xd8\xa3\x0b\x81\x6c\x70\xdb\x51\xcc\x07\x40\x8c\xe1\x75\x82\xd6\x99\x7e\x45\xf6\xd8\x07\xf3\xcd\xde\x88\xec\x7d\x98\x69\xfb\x1f\x61\x66\x7a\x6f\x42\x4e\xeb\xa6\xe2\x05\x37\xd6\x1c\x15\x33\xa6\x3a\x57\x31\xfe\x20\x53\x97\xa5\x5d\xd9\x93\x24\x47\x25\x2b\x38\x85\x81\x3d\xb7\xcc\xe1\x81\x10\xcf\xe4\xd1\x07\xe2\x3e\xd9\xfb\x74\x46\x24\x96\x1e\xf4\x61\xca\xb9\x0e\x0f\xb7\x0c\xed\x46\x17\x09\xfd\x96\xba\xab\x63\xe1\xd7\x52\xf9\x47\x3e\x2f\xd9\xd5\x73\x5d\xd2\x97\x23\x78\x2d\xe4\xcf\xe5\xca\x1c\x50\x4d\xf6\x5e\xde\xb9\x51\x40\x77\x9d\xf3\x9a\x57\x54\x55\xcb\x51\x3c\x97\xdd\xf3\xed\x51\xe9\x09\x01\x67\xf2\x8b\x3d\xb2\x8f\x68\xe0\xa0\xae\x57\xcc\xb7\xe3\x0b\x5d\x7d\xa1\x02\x2a\xb9\xd9\xdd\xd0\xc4\x10\x32\x38\x39\x84\xc0\xc1\x44\xcb\x77\xa2\x4a\x06\xf7\xc8\xc5\xfd\x9e\x0e\x8f\x1f\xa8\x5a\x17\xc5\x9e\x49\xd4\xdc\x58\x77\x8b\x6f\xc9\xc3\x85\x33\x01\xde\x58\x1e\x1d\x80\x67\xb1\x6b\xe2\x2c\xbd\xfd\x20\x09\x9a\xc2\xb6\x17\xd4\xd3\x01\x29\xf5\x82\xff\xda\x32\x72\x7a\xec\x0f\xea\x86\x29\xcd\xb5\x61\xc2\x90\xb2\xa7\xa1\x73\x54\xdb\xf7\x0f\x6b\xfa\x4f\x29\xc8\xc9\xb7\xe7\xee\x41\xc9\xdb\x6c\xf7\x56\x37\xf1\xb0\xa2\xff\x6c\x15\xb3\xf6\xcc\xd6\x4c\x2e\x4f\xc0\xaa\x9d\x65\x3f\x27\xc7\xd4\x50\x34\xb7\xf0\xc4\x90\x5d\x4f\x2f\x30\x8b\xa6\x80\xe7\xe6\x9b\xc7\xe5\x33\x8a\x02\x51\x77\xb2\x84\xa2\x97\xb1\x8b\x92\x36\x1f\x1b\xcd\x1f\xcb\xcf\x68\xff\xd8\x11\x32\x58\x40\x5b\xb6\x3c\xec\xfb\xbc\x4d\xf5\xe8\xe3\xcf\x7f\x78\x7f\xba\x05\xbb\xa5\x00\x9b\x7c\xfe\x46\x96\x79\x8c\x97\x67\xd1\x03\xbd\x8a\x06\x0d\x81\x8f\xf0\x73\x52\xdb\x91\xc8\x5b\x29\xd8\x88\xbc\x67\xb4\x24\xf6\xb0\x72\xff\xfc\x49\x71\xc3\x26\xcf\xb6\xa5\xe4\xfa\x45\xcc\x32\x11\xfe\x61\x7e\x12\xde\x46\x6d\x22\xa1\x97\x2b\x88\x74\xa7\xb3\x4e\x2b\x39\x25\x4e\xa4\x6e\xf3\xed\x7f\x78\x7f\x9a\xed\xe5\x7f\x78\x7f\xea\xdf\xdd\xfe\x53\xce\x76\xf3\xb5\x77\xcd\x70\x7f\xbd\x62\x31\x0f\xb7\x5c\xde\xb8\x9a\x08\xba\x66\x8d\xdf\xbf\x29\x3e\xd9\xb2\x11\x9e\x01\xc2\xc9\x19\x7a\xaf\x88\xa5\x2b\xcd\x0d\xca\x45\x32\x3c\x62\x5f\xb8\xda\x27\x75\x3d\x99\xa2\xac\x37\xe8\xed\x57\xbe\x22\x75\x5b\x19\xe8\x72\x03\x5b\xcb\xee\x35\x28\x20\xf3\x9b\x8c\xb8\xae\xaf\x56\x3b\xc0\x4c\x93\xf2\x95\x47\x4f\x0a\xbf\xd8\xfc\x83\x37\x54\xd0\xb9\xbd\x1d\x4e\x6c\x52\xe3\x9f\xd1\x9e\xde\xc7\x00\xbf\x08\x5f\xd1\x2b\xca\x2b\x3a\xe5\x15\x37\x60\x8d\x1c\x4c\xfc\x5c\x22\xd4\x0c\x90\xbc\x35\x61\xbf\x73\x26\x5d\xdc\x09\x03\xba\x27\x92\x7d\xfb\xdd\xf3\x6b\x7b\x28\x1e\x4c\xe0\x84\x84\x1b\x17\x4c\xc5\x56\x5f\xf2\xc8\x76\xc3\xbf\xbf\x27\x6b\x71\xb8\x85\x16\x6d\x3c\x98\x8d\x34\x4b\xc0\x4a\xd3\xad\x5a\x02\x96\x80\x8d\x96\x00\x7c\xe1\x7a\xd9\x6e\xc1\x18\x80\xe1\x13\x8c\x01\xf8\x5d\x66\x63\xc0\x1e\x4b\x9f\x93\x31\xa0\x59\xa1\x98\x19\x60\x0e\x80\x68\x4c\xfc\xfd\x50\x83\x60\xe7\xe4\x62\xf9\x24\x17\xe3\xab\x63\xae\x2c\x2b\xd4\x3d\xce\x2b\xeb\xa1\xa1\x3d\x7e\xb5\x82\x72\x8d\xc2\xeb\xdc\x69\x07\xbe\xd1\x3d\xfc\xde\x8a\xac\x14\x7c\x7f\xbc\x06\x1f\xe8\x61\xd3\xe4\x99\x17\xff\x34\x3f\x2d\xa8\xf6\xc0\xc7\x24\x79\x6b\x0f\x7c\xcd\x82\x35\x8b\xd9\xd6\xa0\x1d\xec\xe8\xaf\xcf\xfb\x89\x24\x47\xac\x59\x90\xd7\xe7\x1b\x0e\x30\xc4\xef\xb0\xd3\xa5\x31\xbd\xe4\x99\x26\x15\x9f\x31\xc3\x53\x23\x23\xf1\x19\x76\x84\xb4\xf4\x0e\xb0\x00\xcc\xe4\x0f\x2c\x9c\xae\x10\x78\x14\xd2\xb7\x37\x0d\x76\xcf\x23\x3c\x5c\x6a\x29\xb8\x91\x77\xee\x45\x4e\x72\xf4\x31\x70\x43\x6f\xfb\x68\xf0\x74\xd8\x45\x7d\xef\xa7\x93\xbc\x89\x3e\xa5\xa4\x90\x55\xc5\x0a\x8f\xa5\x01\x6c\x3a\x60\xe6\xf0\xda\xe0\x22\x77\xa9\xc0\x7a\x72\xf9\x07\x70\x92\x3b\x77\xf8\x73\x64\xbd\xe7\xef\x4f\x0e\x8f\xdf\x9c\x4c\xea\xf2\x8b\x85\xbc\x1e\x1b\x39\x6e\x35\x1b\xf3\x54\xa8\xd4\xad\x77\x59\xc8\x60\x4d\xdf\x03\x6a\x71\x43\xcd\x22\x8f\x79\x6d\x9f\x64\xd9\xa7\xeb\x68\xff\x83\x46\xbc\x00\x40\x64\x73\x79\x88\x4a\x4a\x33\x22\x8a\x42\xf2\x6d\xe8\x94\x3c\x6b\xab\x0a\xf9\xcc\xca\x9e\x51\x1c\x1f\x7e\xfe\x64\xe4\x7a\x75\xaa\x37\xb9\x9f\x95\xc5\xbb\x2b\xe2\x61\xb8\x6e\x99\x6a\x33\x93\x8c\x0c\xd3\x51\xd2\x67\x99\xf3\xde\xe7\x98\xfb\x60\x16\x96\x81\x2e\xd9\x92\x00\xaa\xbd\x35\x5b\x7f\xd0\x4c\xf5\xb7\x20\x33\x05\xcc\xfa\xf3\x56\x33\x35\xc1\xc7\x3f\xf2\x95\x1e\xa2\x2b\xc3\xfb\xbf\x67\xb3\xdd\x58\xe7\xf7\x6c\xb6\x69\x99\xdd\xc7\xd0\x9d\x39\x54\x55\x59\x55\xbc\x35\x0b\xac\xfc\xc5\xfe\xf9\x68\xa7\x6c\x5c\x77\xec\x83\xf0\xc8\x17\x7a\x10\xbe\x7a\x8e\xc6\x36\x62\x80\x55\x45\x32\x37\x01\x89\xe3\x68\x8e\x33\x06\x76\x4b\xb9\xe8\xb5\x80\x45\x08\x32\x7e\xc5\xaa\x65\xd0\xd5\xb1\x6e\xa6\x6c\x11\x11\x99\x16\x97\xd7\x54\x95\xd0\x6f\xba\xa1\x86\x3b\x0f\x37\x4f\x57\x2c\xed\xe5\x7b\x94\x3b\xcc\x65\xd7\x48\xc4\x15\x60\x6b\x7c\x63\xee\x8c\x19\x2c\x08\x15\x0e\x5c\xda\x21\xa8\xd9\x33\x92\x26\x27\x5d\x78\x22\x6a\x6b\xbb\x15\x4c\x59\x6b\xbf\x5a\x92\x6b\x25\x53\x11\xd8\xfc\x75\xc7\xc4\x12\x79\xc5\xd4\x15\x67\xd7\xcf\xaf\xa5\xba\xe4\x62\x3e\xb6\x2f\x3b\xc6\x2d\xa0\x9f\x5b\x4e\xd4\xcf\xbf\x80\xff\x0c\xa0\x2a\x53\x67\x8f\xe0\xa1\xde\xdb\xcb\xa1\x0e\x0f\x6e\x38\x60\x2f\x7b\xbe\x6d\x5b\xaa\x5b\x1a\xec\x5e\x92\xb1\x1e\xad\xfc\x89\xad\x68\x29\x35\xde\x63\xd7\xb1\x27\xaf\x69\x59\x27\xa2\x18\x93\x9d\x11\xd7\xa9\xce\x1d\x2e\xca\xb4\xa5\xcb\xe2\xdc\x81\xd1\xfb\xce\x1d\xf7\x99\x4b\x02\x0d\xe5\x20\xd4\x47\x25\x00\x78\xd6\x17\x79\xf4\x6b\x3c\x32\x78\x78\x70\xf0\xbb\x85\x28\x1c\xc5\x99\xe3\x13\xf8\x54\x88\x50\xc8\x86\x59\x91\x5c\x5c\x4e\xa4\x9a\xdf\x47\xd1\xc6\x2a\xbf\xd6\x4b\xfd\x6b\x35\x46\x0a\xc6\x4d\xd9\x31\xec\xe3\xf3\x5c\x3d\x55\x67\xdc\x5a\x9d\xf1\xb8\x13\x3d\x76\xb8\xe6\xe2\x3e\xb7\x14\xf9\x2c\xbd\x34\x9f\x55\xc8\x6d\x8b\x3c\x31\xdc\x17\xb3\x6b\x26\x7a\xa7\xd1\x35\x12\xb0\xd9\x5c\xc3\x4c\xb0\xc0\xf1\x64\xf1\xb1\x42\x40\x61\xa0\x8a\xd6\xcc\x30\xd5\x01\xc6\x17\x52\x88\x21\xfd\x66\x8d\x24\xef\x1a\x26\xce\xe1\x10\x7e\x32\xab\x9f\xcc\xea\xdb\xaf\x27\xb3\xfa\xc9\xac\xce\x61\x56\xef\x5c\xc1\x90\x97\xa7\x08\x82\xe8\x0a\x01\x3b\x44\x07\x67\xb3\x3c\xbe\x33\x33\xd5\x7a\x96\x62\xc6\xe7\x6f\x68\x33\xd8\x80\x0e\x4f\x5a\x31\x86\xc3\xc7\x2e\xb3\x01\xa0\xa9\x1a\xd9\x40\x8b\x3e\x07\x23\x0a\xd3\xff\xf0\x96\xd9\xd0\xc3\xc8\x6d\xb8\x6c\x45\x20\x03\xf8\x3b\x22\xa5\xaf\x6f\xd4\xf6\x93\x29\x37\x9d\x26\xa1\x99\xc1\x7e\x60\xd8\x73\x95\x48\x41\x0a\x87\xf0\x0e\xf6\x4f\xd4\xa7\x2e\x83\x4d\x25\x88\x2c\x8c\x87\x1a\x0d\xed\xc3\x5e\xbc\x78\xf1\x02\x7b\xc7\xfc\xfe\xf7\xbf\x27\x52\x11\x4a\x4a\x56\xf0\x7a\xfd\x46\xb8\xeb\xb7\x2f\x13\xdb\x2b\xd8\xeb\x6f\x87\x6f\xbe\x07\x5c\x96\xc6\x68\xec\xd0\x88\x14\xd9\x07\xf7\x06\xd5\x23\xf2\x7f\xce\xdf\xbd\xed\x5a\xff\xf5\xbf\x05\xaf\x49\x98\xce\x74\x7a\xe2\xf0\xed\x8b\xdf\x7d\xf3\xcd\x80\x27\x81\xc3\x45\x2a\xee\xe0\x8c\x3d\xc4\x0c\xb5\xe7\xb1\x62\xd8\x93\x07\x14\x08\x6f\xc1\x22\x00\x98\x49\x6e\x0f\x42\xbc\x82\x52\xf3\xf9\xc2\x38\x98\x58\xbb\xc5\x2b\x5e\x18\x54\x04\x10\x5c\x4b\x3a\xb4\x66\xd8\xf4\x48\x43\xb0\xde\x07\x24\xb0\x94\x6c\x44\x2a\x7e\xc9\xc8\x4c\xff\x45\xc9\xb6\xe9\x1a\xf9\x62\xcf\x12\x8f\x7d\x84\x44\x74\xbc\x9f\xdc\x07\x73\x57\x2a\xa9\x07\x65\xa0\xe4\x12\x32\x40\xc4\x8a\xcb\xc1\x21\x9f\x76\x8d\x61\x1b\xca\x03\xd8\x11\x94\x6d\xa2\x2e\xdb\xd7\x91\x8b\x44\x40\x39\x7b\x1d\x85\x13\xc5\x37\x70\x68\x94\xfc\x6f\x64\x72\x80\xf8\x8d\x4e\x74\x80\xc6\xb5\x3c\xe7\x81\x71\xbb\xcc\xc4\xe4\xf1\x2f\x19\x42\xdf\x5a\x7b\x8d\x89\xd0\x6a\x11\xde\x1e\x50\x6c\xa3\xb9\xb1\x5f\x54\x5c\x5b\xd2\xa0\x23\x90\xa3\x38\x79\xec\x0d\x6f\x1a\x46\x83\x7d\xaf\x71\x47\xb4\x62\x6d\x54\xec\xa4\x31\x60\x64\x38\xd2\xe1\x05\xa9\xef\x82\xdb\x8d\x8d\x00\xe9\xae\xc9\x8c\xbb\xd7\x73\x41\x58\xb0\xf4\xb6\xfd\xd1\x92\x6a\x66\x5a\xb7\xf4\x4c\x29\xa9\xec\xbb\x32\xad\x5d\x7f\xb5\x9a\xaa\x4b\x56\x86\xf3\x6f\x42\xce\xec\xa4\xf8\xfe\x36\x03\x5c\x3c\x15\xb5\x56\x18\x3a\xf1\xe9\x12\x5e\xd3\x19\xec\x40\xdc\xb3\xc9\xe4\x19\x0a\x5e\xa9\x88\x36\x54\x39\x69\x68\x3f\x1f\x26\x79\xb6\x98\xb7\xd6\x93\x1b\x6f\x68\x03\x2d\xb0\x41\xcf\x04\x06\x00\x1f\x06\xbc\xb3\x3b\x7c\xa8\x5b\xa3\xf4\xb3\x25\x83\x87\x61\xa8\xc3\x1d\xaf\x71\x32\xc2\xba\xff\xbd\x9d\x98\x21\xfb\x7c\xb0\x9b\x04\x24\xd5\x90\x9f\xaf\x30\xc0\x65\x1f\xb3\xde\x48\x2f\x8d\x86\x19\xe4\x99\x8c\xdf\x7a\x80\x12\x8e\x57\x4e\xb7\x10\xd2\xd3\x4f\xce\xf9\x24\x4d\xdc\xa0\xf7\xa7\x1a\xb0\x87\xf0\xda\x21\x05\x1c\xaf\x5d\x53\xc3\xf1\x3a\x9d\x81\x28\x5f\x39\xb2\xdd\x51\x13\x1b\x55\x5e\xd7\xb0\x6b\x37\x74\xd0\xed\x69\xd0\x78\x6d\x45\x8f\xc6\x2b\x87\x36\x8d\xd7\x70\x9d\x1a\xaf\x21\x69\xd0\x78\xe5\x15\x1c\x3e\x99\x1a\x17\xc3\xa9\x1d\xa8\x59\xcc\x02\x03\x40\xd4\x13\x7c\x2a\x5e\x18\x0f\x96\x17\x4e\xa9\x41\x91\x41\xa7\x5a\x56\xad\xc1\x81\x73\x3d\x3a\xd6\x97\xe0\x85\x58\x05\x3d\x29\x06\x29\x49\xab\x83\x44\xba\x17\x68\xc7\xa8\xae\x0c\x1f\x61\x37\x73\xf8\x87\x84\x42\x72\xb1\x6d\xde\x10\xc8\xf6\xc3\x1f\x5b\x0f\x7d\xe4\x0e\x7b\xec\x5a\xc8\x23\x27\xb8\x44\x62\xa8\x23\xf8\x47\x73\xec\x1d\xff\xb0\x80\x2d\x78\xbd\x60\xae\xc8\x25\x32\x7e\xad\x92\x65\x8f\x50\xb0\xc8\x7d\xbf\x55\x6c\xea\xb3\xad\x68\x79\xde\x70\x4f\xa1\xf9\xf0\x20\x82\xe6\x64\xff\x28\x60\x66\xfb\x7a\xd9\x53\x61\x98\x9a\xd1\x82\x1d\xc4\xc1\x05\xd6\x2c\x58\xcd\x94\x9d\x78\x77\x9f\x87\x60\x5e\x50\x51\x56\x0e\xfa\x1c\x77\x11\x61\x1f\x0c\x53\x76\x91\xba\xe4\xb3\x24\xe5\x71\xdb\x80\x59\x40\xf9\x36\x62\x1d\x30\xf0\xb6\xcf\x1a\xa4\xc2\xab\x47\x22\x3a\x79\xba\x65\xf5\x7d\xd3\x2c\x0b\xe8\x38\xc0\x94\x2e\x41\x8f\xa4\x00\xad\x18\xc4\xfd\x52\xb6\x0a\x13\x6e\x43\x1e\x65\x21\x95\xb2\xfa\x39\x10\x44\x35\x51\x6c\xce\xb5\x81\xee\x30\xbe\xab\x25\x76\x98\xd8\x1a\x1e\xcf\x4e\x65\xf2\x85\x94\xbd\x5b\x90\x8e\x92\xc7\x70\x16\x5d\xa3\xe4\x15\x2f\xbd\x41\x17\x9f\xcf\x5c\x93\x86\xea\x08\x3f\x9d\x6a\x2d\x0b\x0e\x01\xb0\x8e\x8b\x92\xc7\x47\x4f\x28\x98\x8b\x25\x33\xd6\xba\x17\xac\x87\x7c\x1b\x27\x19\x4a\x42\x9b\xa6\x4a\xae\xb4\x19\xcc\x16\x42\x96\xec\xac\x9d\x56\x5c\x2f\xce\x77\x25\x71\x6a\x13\x4d\x58\x9c\xbc\x56\xd1\x74\x53\x02\xd5\x80\xa4\x2d\xa1\x39\x58\x5c\x56\x5f\xb2\x06\x26\x97\x02\x5c\x5d\x54\x6b\x3f\x6a\x2c\x6a\x24\xe8\x9d\x15\x33\xcc\x7f\x95\xae\x47\x77\xef\xed\x7a\x4f\x58\x9b\xdc\x7e\xfa\x83\x68\x7a\x9f\x17\xb4\xaa\x06\x78\x3e\xfa\x2a\xb6\xd7\x5e\xd0\x05\xe0\xfb\x58\xe0\x86\xe1\x76\x2f\xf9\x59\x86\x92\x32\x3c\xbd\x26\xd8\x01\x34\x5d\xc5\xdd\xb8\x70\x3a\x6a\xf3\x2f\x85\x5f\xdd\x91\x55\xc8\xfd\x0f\x02\x07\x20\x7c\x17\xee\xe3\xa7\x74\xb6\xa7\x74\xb6\x8f\x5c\x5b\xb7\xe9\xc8\x53\x3a\xdb\x5d\xaf\x5d\x4c\x67\xdb\xb9\x94\x73\xef\xb8\xc6\xe3\x91\x96\x63\x40\x13\xc4\xa4\xab\x16\xcb\x7d\x82\x96\x3a\x54\x0b\xfe\x08\xee\xc0\xd6\x52\xbe\xf1\xbd\x0e\x8d\x51\x7c\xda\x9a\x74\x51\x9c\x37\xd7\xb0\xa3\x07\xcc\x53\xa6\x9d\xce\x30\x76\x4b\x56\x44\x87\x87\x73\xf2\x87\x13\x2d\xd2\x34\x06\x9a\x4a\x93\x60\xbb\x80\xd9\x82\x1f\x3e\xd3\xa4\x94\x45\x5b\x33\x61\x3a\x0e\xe9\x6a\x5d\x30\xce\xb2\xc5\x53\x95\x96\x25\x47\xa5\xe4\x2c\xc3\xf9\x3a\x48\x1c\x95\xf2\x5a\xd8\xf3\xe8\xf0\x2c\x09\xe1\xb7\x8f\xee\xdb\x3d\x2b\x76\x63\xf8\x8f\x89\xfd\x9c\x4e\xa1\x27\xbd\x6b\xb9\xfa\x94\x32\xb9\xf1\x11\x79\xb6\xe9\xa6\xc8\xac\x91\xa4\xd5\xec\xd6\x94\xc8\x2e\xb2\x9a\x75\xe4\xa7\xec\xcc\xdd\x08\x0b\x3f\x65\x67\xa6\x8e\xfc\x94\x9d\x99\x36\x7c\x4f\x9e\x9d\x62\x8a\xa5\x55\xe7\x2a\xd7\xdb\xb3\x77\x3e\xb8\xcc\x84\x01\x0b\xb5\x5b\x59\x65\xc7\xdd\x99\x88\xce\x8d\x55\xe0\xdf\x15\x3f\x0c\xca\xc2\x2e\x0e\x1e\x15\xcd\xf9\x43\x13\x8c\xcd\xcf\x21\x03\x6d\x07\x32\xc8\x60\x2e\x07\xf8\x04\xf1\xea\xa3\xc5\x75\xd0\x83\xd8\x8d\x1b\x53\x74\xa3\x1c\xe1\x46\x96\xaf\xb0\x01\x35\x15\x42\xa2\x8a\xaa\x47\xd8\xc0\x5b\x8f\x1c\xf8\x05\x18\xa9\x0d\x2d\xd0\x4b\xd6\xf2\x12\x64\x6a\x87\x50\x99\x8a\x1d\x87\x57\x16\x2e\x20\x99\x38\x81\x00\x37\xc0\x14\x9d\x0d\x61\x09\x92\x8d\x2d\xec\x45\x1b\xfe\x23\x53\x7a\x40\x6f\xbb\xee\xea\x37\xde\xc5\xa7\x7a\x6e\xd0\xc5\x82\xd5\x14\xfe\xf9\xda\x4f\x81\x15\x90\xd6\xea\x34\x0c\xdb\xd7\x31\x55\x6b\x22\x67\xa3\x5e\x05\xf6\xde\xd5\x90\x8e\x6e\xfe\xca\xe4\xcc\x20\x7e\x33\x9d\x0d\x4e\x37\x22\xab\x13\x76\xd6\x4b\x0e\xb2\x1b\x09\xf4\x48\xbb\xb7\x7c\xf8\xa9\x4b\xd4\x86\x43\x04\x67\x78\x87\x26\x27\xbf\xa7\x06\xaf\x5d\xcb\x0a\x4d\xcd\x06\x1d\x85\x8c\x81\xbe\xca\x3e\x90\x9c\xa7\x6c\xd0\xfe\xf5\x94\x0d\xfa\x94\x0d\x9a\x35\x1b\x34\x52\x76\xfc\xb9\xb5\x21\xb1\x33\xce\x63\xf0\xd9\x9d\x53\xe6\xed\x7e\xe7\x71\xf0\xc9\x99\x3e\x33\x53\xaa\x7e\x01\xca\xb3\xc9\xe4\x19\x96\xa0\x74\x2e\x8a\xd6\xcc\xc6\x7f\x20\x4c\x14\xb2\xb4\xcf\xb9\x80\xe7\x2b\x6d\x40\x85\xef\xe2\x3c\x31\x2d\xb5\x1f\x2b\x2e\x62\x81\x67\xe7\xd0\xa8\x06\x1f\x15\xbe\x97\xe3\xeb\xfc\x8a\xe9\x60\xe1\xde\xa9\xb3\xa1\xe3\xa4\x9b\xe2\xc2\x67\x34\x39\xbd\xd6\x7f\xaf\x49\xc5\x6b\x0e\xed\x4d\x4a\x90\x70\x4c\x9b\x61\x81\x2e\x42\xf6\xf1\x91\x93\xa2\x69\x47\xee\xf1\x93\x9a\xd5\x52\x2d\x47\x61\x08\xfb\x65\x6f\x4c\x77\xc7\x01\x28\xd1\x45\xab\x14\x13\xa6\x5a\x0e\x03\x7c\xef\xae\x1d\xd4\xa6\xfd\x0a\xec\x88\x32\x1d\x18\x64\x48\x23\x86\xee\xea\xcb\xa0\x2e\x9f\x0e\x42\xcd\x61\x16\xe1\xec\x74\xc0\x7e\xa3\x2e\x8b\xd1\x7e\xca\xc4\x15\xb9\xa2\x4a\x0f\xdb\xf3\x24\xaf\xfe\x5c\xf2\x2b\xae\x65\x72\x0e\x5a\xf4\xa0\x78\x7a\xce\x43\x04\xcd\xee\x54\xd9\x9a\xa6\x35\xee\x38\xf1\xdb\x97\x7d\x68\xa4\x55\xd2\xc2\xb6\x5d\x31\x34\x5e\xa6\x06\x28\xbb\xab\xa1\xc6\x30\x25\x5e\x91\xff\xbb\xff\xf3\x6f\xfe\x35\x3e\xf8\xf3\xfe\xfe\xdf\x5f\x8c\xff\xe3\x1f\xbf\xd9\xff\x79\x02\xff\xf8\xf2\xe0\xcf\x07\xff\xf2\x7f\xfc\xe6\xe0\x60\x7f\xff\xef\xdf\xbd\xf9\xcb\xc5\xd9\xc9\x3f\xf8\xc1\xbf\xfe\x2e\xda\xfa\x12\xff\xfa\xd7\xfe\xdf\xd9\xc9\x3f\x3e\xf1\x21\x07\x07\x7f\xfe\x5f\x83\x49\xa7\x62\xf9\x6e\xa0\x1c\xc6\x6b\x9c\x51\x1f\xe8\x3f\x31\x0b\xfb\xad\x58\x29\x5c\x98\xb1\x54\x63\x7c\xf4\x2b\xe8\x29\x3d\x70\x00\xcf\x5e\xb9\xf7\x7f\xa7\x83\x84\x73\x29\x18\x88\x3b\xb4\xc1\xef\xc3\x06\xcc\x5c\x72\x01\x29\x21\xc7\x7c\x6b\x68\xa3\x7e\xfc\x3e\xc4\x8a\x61\x75\x23\x15\x55\x4b\x52\xba\x90\xc3\xf2\x1e\xda\xc8\x0c\x6c\x74\x0d\xa4\x97\x3c\x65\x57\x6f\x39\x64\x59\xb3\x92\xb7\xf5\xb6\xa3\x95\x48\x45\xbc\xf0\xd7\x76\x89\x21\x63\x49\xce\x42\x06\xbc\xbb\xcd\xc5\x8c\xa7\xb4\xb8\x44\x27\x42\xe0\x8c\x21\x91\x25\x16\x43\x0e\xef\xed\xb9\x54\xd7\x9a\x51\x11\x22\xa7\x90\x96\x2d\x4b\xf6\x4c\x87\x7b\x91\xa4\x2c\xc1\x4a\x4c\xc9\x72\x35\x5d\xfb\x6e\x80\x03\x6b\x0a\xbd\x01\xfd\x75\x6b\x6d\xdc\x07\x70\x37\xc9\xd2\x98\x80\xff\x93\x7d\x6f\x75\xfd\x6d\xb3\x69\x20\xc4\xe7\xe8\x1b\x09\x6e\x1d\xd7\xe8\x6a\x46\x2a\x59\x44\x05\x1b\x3d\x55\x14\x18\xf5\xc4\x8b\xb8\xa1\xd9\x4a\x96\x5d\x2d\x35\x68\x03\x41\x48\xad\xd2\x98\x6f\xcd\x0b\x3a\xad\x18\xba\x8e\x80\x6f\x06\xf3\xa8\x1d\xac\xa6\x1f\x78\xdd\xd6\xa4\xd5\xf6\xcd\xa4\xe8\x3f\xbb\x7b\xb1\x6b\xdc\x9a\xb8\x57\x6a\x2e\xe0\x47\x3d\x37\x5b\x7a\xf0\x6a\xc1\xc8\x79\x58\x81\xce\xe9\x8b\xe9\x8b\xce\xa7\xa3\x5b\x30\xfd\x1d\x75\xce\x00\x95\x33\x48\xb3\x0d\x76\x88\x26\x80\xe7\x90\xdc\x38\x93\xac\x0b\x0c\xc1\xab\xbe\xc4\x00\xf9\xb5\x88\x16\xa8\x15\xae\x1e\xea\xb1\xee\xe3\x47\xa7\xc5\x0f\xd4\xdd\x73\x69\xec\x59\xf4\xf4\xec\xda\x79\xa8\x2f\xdb\x9a\xba\x17\x0a\xdc\x7a\xfa\x9e\xf3\x47\x6f\x28\x76\xa3\xbe\xce\x28\x08\xd8\x21\x30\xeb\x17\xc1\xf7\xed\x94\xc7\x62\x59\xb8\x06\x42\xbc\xcb\x51\x0c\x79\x6a\xb8\x77\x01\x88\x67\x6c\xff\xcf\xfb\xc8\x7d\xfa\xd2\x94\xcd\x30\xbd\x1f\x7f\x03\xfe\x45\x9d\x06\x09\x84\x51\x82\x8a\x19\x40\x1e\x62\x22\x3c\x14\x6a\x14\x6a\x79\x65\x45\x48\xd2\x93\x7f\xd0\x2e\xc1\x8e\x27\x6e\x0b\x7a\xd0\x43\x94\xd4\xe8\xf0\x13\x8c\x95\x88\x92\x54\x75\x33\xa0\x5a\x91\xf8\xfe\xd3\x03\x32\x63\xd4\xb4\x0a\x73\xd7\x85\x54\x10\x11\x41\x21\x86\xae\x7c\xc5\x2c\x0b\x40\x63\x27\x25\x6b\xa2\x05\x6d\xf4\x42\x1a\x70\x1b\xd3\x86\x16\xdc\x24\xc3\xdb\x18\x45\x8b\x4b\xfb\x64\xc8\x62\x82\x37\x4b\x7b\x8d\xe2\xc0\xd5\xe8\xc7\xbc\xda\xc7\x95\x32\x0b\x25\xdb\xf9\x02\x80\x87\xf0\xae\xa2\xa2\x1a\x51\xae\xd2\x12\x10\x37\x8e\xe9\x1c\x9d\x9a\x94\x4b\x41\x6b\x5e\xf8\xf5\x83\x2a\x32\xcd\xa5\x4b\x30\x01\x5a\x52\xa7\x8d\x92\x33\xa6\x34\xd7\x86\x09\x83\xb9\x2e\x47\x15\xe5\x35\xd9\xd7\x8c\x91\x13\xbf\xd5\xf1\x9b\x73\x34\xd3\x31\xb8\x95\x5e\x76\x10\x27\xcf\xb8\x26\xa3\x0e\x47\xda\x7e\xe2\x83\x7a\x51\x42\x69\x7a\x0b\x08\xb7\x2b\x37\xbe\xe2\xc1\x80\xcd\xb8\x79\xce\xa4\x82\x0a\x21\xe7\x9f\xbb\x62\xa2\x94\x5d\x62\x75\xd2\x58\x87\x67\xa7\x3a\x76\x88\xa2\x4c\x6b\x70\x74\xf8\xc2\x35\x41\x0d\x9d\x0b\x83\x44\x4c\x1a\xcf\x2a\x5c\x82\x70\x51\xf2\x2b\x5e\xb6\xb4\x42\x55\x2b\x79\x9a\x8e\xce\x4f\x91\x48\x3e\x5f\x98\xf1\x35\x83\x70\x22\xea\xda\xdd\x29\xe2\x5f\x8d\xaf\x95\xcc\x72\x0d\x4a\x99\x21\x46\xa6\x09\x24\xe6\xc2\xd8\x76\xd2\xae\xe9\x12\xba\x79\xbb\xb2\xc7\x5e\xa6\xb9\x5b\x31\x37\xec\x4c\xa6\xe9\x0c\xb5\xd7\xf2\x1c\x73\x27\x4e\xdc\x21\x88\xe1\x82\x0a\x30\x5d\x21\x0a\x6d\xf9\x1f\x64\xea\xfa\xac\xa5\x4a\x9c\x26\x70\x70\xf7\x28\x54\x7c\x35\xb5\x3b\x2e\xd1\x23\xb3\x65\xaf\xc8\x55\xb7\x1b\x2f\x58\xdd\x54\xd4\x6c\x3d\xa1\xfb\xa7\x28\x28\x1f\xe5\x0a\xda\xa3\x83\x8a\x72\x4c\x2b\x2b\x32\xce\x7e\x3c\x72\xd0\x65\x28\xd8\xb3\x54\xc6\x5c\x78\xf5\x43\x38\x0b\x07\x4d\xd9\x8d\x32\x1d\xba\xeb\x4d\x59\x09\xfa\x80\xa3\x78\x48\x29\xa5\xbc\x16\x4c\xf9\x7d\x75\xf6\xe3\xd1\x88\xf0\x09\x9b\xf8\xbf\xc2\x10\x5e\x5d\x32\x72\x8e\xe0\x14\x1e\x22\x27\x3d\xc3\x50\x96\x13\x7c\xf5\x38\x7e\x1d\x8f\xf9\xcb\x1f\xed\xa4\xd8\x6f\xff\x34\xfe\xa3\x3b\x60\xe0\xaf\x5f\xac\xd6\x36\xa0\x9a\xee\x97\x95\xa7\xc5\x78\x00\xa0\xee\xd8\xbf\x7e\x39\x93\xe5\x79\xc3\x8a\x09\x4e\xbf\xfe\x65\x50\xd2\x2b\x21\x4c\x18\xb5\x9c\x90\x33\x09\x15\x32\xbc\x44\x81\x06\xef\xaa\xd8\x7f\xfb\x84\x0c\x60\x83\x10\xf5\x2d\xa8\x61\x02\xb4\x5f\x91\xde\xfb\x9c\x78\x5c\x4d\x18\x16\xc4\x3c\x85\x79\xde\x87\x50\x1d\xc2\x8b\x8f\x88\x91\xd8\xa8\x3b\xf5\xb4\xb5\xd7\xa1\x20\xec\x03\xd7\xd0\x47\x04\x57\x12\x98\x84\x3a\x68\x03\x6f\x72\x58\x62\x2c\xdf\x85\xbe\x38\x8d\x4c\xcf\xb8\x85\x19\xfc\x52\x48\xf3\x65\xd8\xbc\xbe\x62\x0d\x6c\x0b\x49\xe8\x95\xe4\x25\x69\x35\xe8\x9c\x82\xb4\x02\x52\x16\x06\x40\xc8\x3a\xee\x99\x2e\x49\xcd\xb5\xa1\x97\x6c\x42\xce\xad\x39\x12\xa7\x11\x23\x4f\x09\x32\xad\x64\x71\xc9\x4a\xd2\x0a\xc3\xab\x41\x9e\x99\x40\x37\x4c\x6d\x64\xaa\x00\x68\x6c\x5b\x58\x2d\xb7\x51\x6c\xec\x0d\x26\xbc\x6b\x80\xc7\x18\x0f\xf4\x30\xab\xdd\x5a\x8d\xc2\x56\x5d\x50\x74\xdd\x36\x25\x0c\xe9\x6a\x5f\x07\x0a\xa3\xb5\x3a\x7d\x3b\x9f\x12\xfe\x76\x7f\x00\x93\xe9\x09\x79\x0b\x96\x4b\x95\xbe\x29\xb1\x68\x02\xbd\xdd\x2e\x43\x46\xb0\x82\x69\x4d\xd5\x12\x0b\x8b\xb9\xf1\x35\xed\xad\x66\xb3\xb6\x02\x83\x31\x7d\x52\xa9\x68\x2d\xc1\x44\xb1\x42\x0a\x6d\x54\x5b\x00\xd7\x50\x32\x55\xf2\x92\x89\x0e\xe8\x63\xc0\x61\x12\x57\x4c\x77\x45\x9d\x56\xbd\x16\x92\x14\x0b\x2a\xe6\x2c\x40\x09\x93\x9a\x96\xc0\xc9\xdf\x05\xe7\x47\xfa\x64\xca\xc0\x17\x74\x66\xac\x5a\x68\x80\x41\xa6\xd6\x4a\xf0\xd9\x48\xe9\x2f\xf6\x3e\x14\x7c\xd7\x51\x42\x93\xe0\xd5\x16\x4b\x0d\x87\x67\x94\x8c\xc1\x5a\x4d\x75\x18\x66\xc8\x20\xa9\x99\xa1\x25\x35\x74\x57\x30\x04\xde\xd0\x65\xc8\x4c\xc3\x9c\x7d\x60\xdd\x28\x97\xdf\x99\x09\xde\x3f\x24\x1b\x1e\x03\x5a\x9f\xfd\x78\x34\x68\x7c\x70\x08\x01\xb7\x42\x37\x2c\x63\xa5\x8c\x4b\x5d\x84\x5d\x85\xd0\x11\x1e\x11\xc0\x92\xe6\x29\xc1\x63\x9c\x95\xa4\x6c\x07\x47\xb3\x3b\x15\x61\x48\xee\x54\x96\xcc\x29\xcb\x9f\xbb\xc2\x1c\x17\x5d\x32\x7a\xd1\xaf\x4e\xdf\x68\xe8\x63\xce\x22\x13\x86\x2b\x16\x01\xae\x0f\x22\xc1\xf1\x5b\x2b\x50\x92\xf6\x39\x0f\x59\x73\xce\x8c\xee\xca\x2e\x51\xa1\x1c\x38\xaa\x71\x46\x12\xbe\x11\x58\x7e\x9e\x1b\x5d\xac\x65\xe3\x04\x0c\x1a\x13\xf9\x5c\x4b\xa7\x38\x5a\x95\x7b\xeb\xcc\x98\x2f\x6b\x8e\x16\xf6\x9c\x7f\x23\xcb\xe1\xe9\x77\x79\xf3\x40\x7b\xa4\x75\xe0\x36\x88\x01\xa5\x21\xdc\x89\x37\x40\x2a\xb5\xee\x81\xdb\xa3\x26\xb3\xa0\x57\x83\x01\xa0\x93\x63\x61\x9d\xbf\x62\xec\xc3\x62\x48\xee\x18\xc8\x1d\xbf\x1c\x48\xd8\xf0\x02\x44\x7f\x0d\x2c\x44\xec\x13\x94\x25\x47\xec\x1e\x20\x5e\xfd\x65\x8f\xf8\xf3\x2c\xf9\x61\xb9\xb9\xbd\xa3\xcc\xa9\xad\xae\x5c\x20\x14\xb6\x38\x58\x4c\xc6\xed\x21\x3c\x7c\xbd\xbe\xec\x99\xa9\xce\xb9\x12\xe2\x1b\x08\x29\xb5\xef\x03\x1e\x13\xc7\xd6\xbe\xfb\x56\xff\xf6\x83\xcc\xc4\x80\x55\xbe\xd9\x07\x3e\x78\xa4\x53\x57\x1d\xe9\x3d\x57\x4c\x41\xa5\x4e\x04\x6d\x69\x45\x8d\x92\x55\xc5\x14\x2c\x81\x0b\x6a\xac\x14\x80\xd9\xd5\x22\x98\x06\x98\xde\x8f\xc3\x5f\x3e\xcc\x17\x5c\x6d\x82\x5d\x07\xeb\x9a\x6a\xec\x74\xed\x33\xe0\x21\x7c\xe9\xab\xfa\x36\xd1\x33\x5c\xe4\xfd\xe4\x83\x81\x87\x62\x89\x93\x7f\x1c\x31\x27\x86\xcc\xc8\xdc\x92\xca\x35\x61\x82\x4e\x2b\x6b\x8e\x44\x0c\x1c\xe8\x5c\xd1\x4e\x8d\x8c\xee\x7a\xcf\x66\xc3\xa7\x0e\x62\x98\xf1\x23\x3f\x6d\x6c\x54\x6f\x7b\x3f\x9c\x74\xb5\xb0\xce\x37\x93\xa1\x21\xb0\xbf\x1c\xd7\xf5\x86\xe8\xd7\x47\xad\x50\x13\x77\x9b\xd9\xf8\x06\x43\x69\xca\x56\x4d\x90\xaf\x9e\x00\xfa\x85\xf0\xc4\xf8\x40\xff\x31\x83\xfc\x84\x78\xe5\x2b\x4b\x80\x2a\x5f\x28\x09\xcb\x91\xdf\x9d\xfb\xdc\x21\x18\xb6\x03\xfa\xbc\x0b\x78\x0e\x7f\x78\x9b\x22\xe4\x3b\x4f\x99\x95\xce\x5d\xf3\xa9\xe1\xfb\x82\xe0\xde\x88\xc7\xdf\x50\x3a\xd8\x89\xb9\xef\xb8\x28\x43\x11\xa7\x07\x85\xb5\x0a\xda\xe1\xd9\x29\x52\x9d\x87\xa6\xd7\x70\x26\x2c\x9d\xc1\x6b\x16\x5c\x95\xe3\x86\x2a\xb3\xc4\xd0\xd6\xa8\x47\x71\xc0\x73\xcc\x30\x74\xd6\x4c\x7b\xbb\x99\xb2\xb3\x1c\x2c\x81\x4f\x4b\x74\x79\xb3\x37\x72\xc8\xae\xcd\xc8\x50\x94\x48\x7f\xf5\x66\xe4\x6d\xd7\x0e\x2d\x04\x71\x1e\xc9\x8c\xdc\x57\xc5\x38\xe9\x9f\x66\xbb\xab\x6b\xdb\xa3\x56\xf7\x6b\x97\x50\xf5\x05\x7f\x85\x0b\x43\xca\x18\x36\x2c\x58\x99\xe0\xe5\xb7\x4f\x1a\x11\x3e\xb3\x4a\x9b\x14\x63\xc8\x7c\x1c\x4c\x5e\x97\xf6\xe4\x2c\xdd\x89\x2b\x6f\x46\x0f\x3c\x08\xa6\x88\xca\x68\xe8\x4e\x0e\x92\x7d\x21\xd3\x1d\xf4\xfe\x02\xd9\x8a\x63\x1d\x60\x45\xfb\x0d\x99\x24\xd3\xe1\x2d\xac\x48\xa7\x79\xc6\xae\xfb\xe8\x2c\xf0\x2a\x31\x17\xa5\xdd\x54\xa0\x22\x81\x53\x5f\xb7\x45\xc1\x58\x08\x19\x3a\xb1\x34\xdc\xa4\xed\x9d\x3d\x6e\xca\x6b\x6a\x8a\x05\xd3\x44\x4b\xe8\x75\xac\x0d\xad\x2a\x56\x86\x54\x27\x64\x14\x09\x56\x85\x4b\x83\x1a\x4c\x47\x64\xac\x0c\x9f\xe2\x28\x30\xe2\xa2\xae\x4d\x45\x5d\x50\x69\xd6\x8a\x02\xeb\x17\xb9\x59\x86\x2c\x93\x55\xc3\x14\xfc\xd0\x1a\x62\x6d\xc3\x4d\x9f\x19\x66\x8c\x44\x3e\xe5\xc0\xcc\x70\xf8\x2f\xf1\xb8\x5f\xd0\x2b\xd6\x65\x7b\xb8\x2e\x91\xf6\x94\x0e\x50\xb7\x19\x78\x3d\x82\xca\x1d\xa1\x85\x10\x2b\xec\xe2\x59\x9c\x0c\xce\x45\x6e\x53\x26\x9e\x87\xfd\x68\xd2\xd7\x4c\x9c\x83\x60\xda\x68\x66\x02\x88\xf7\x70\x8d\x97\xb8\xfc\x79\xda\x1a\x59\x53\xc3\x0b\x08\xd1\xf1\x59\x94\x24\x56\x63\xe2\x85\x95\x34\x3e\x11\x1e\x55\x24\x50\xdc\xdc\xba\x65\x12\x03\x9b\x8d\xa5\x7b\x98\xf8\x68\xae\xdd\x2a\xf7\xa7\xd5\x4f\x4b\xa4\x7a\x66\x7a\xcf\x0b\x8f\x88\x4c\xcc\x42\x31\x46\x78\xdd\x48\x65\xa8\x30\xa4\xe4\xb3\x80\xd1\xed\x33\x0c\x6f\xe3\x89\x1c\xfe\xa0\x9f\x20\xaf\x36\x1a\x05\x03\xa6\x55\x25\xaf\x35\x31\xd7\x32\x84\x1c\xba\xfc\x2e\x87\x79\x3c\xea\x13\x93\x41\xc7\x71\xa3\xda\xa3\xce\xf2\x55\x74\x0e\x8d\xac\xec\xb9\x66\x55\x65\xff\x7b\xdb\x69\x34\x18\xc7\x64\xe3\x9c\xf0\xb9\x40\x18\x5a\xae\x7d\xf0\xcb\x61\xa8\xec\x97\x4a\x36\x8d\x4b\x7e\xa8\x0f\xf2\xcf\x09\x24\xaf\xab\x2b\xa6\xa1\xc8\xc4\xe3\xba\x58\x56\x98\x33\xc1\x14\x35\x90\x5e\xe7\xfa\xb9\x82\x4a\xb2\x4a\xe4\xd0\xa0\x0f\x5e\x19\xfd\x22\x1f\x61\x3a\x4c\xbd\xdc\xcc\x64\xfe\x1e\xf7\x6d\x86\xf7\xe2\x02\xf9\xcd\xcb\x9d\x0c\x0c\xb4\xff\x2d\x33\xf4\x80\xfc\xa0\x91\x2d\xc2\xc9\x1b\x70\x78\x3e\xc9\xcb\xe6\xf0\xd6\xd1\xd1\x96\x81\xa8\xc3\xaa\x59\x44\x54\xc5\x7e\xa9\x00\x21\xd7\x9f\xeb\x1e\xbd\x47\x4a\x6a\xfd\xd6\xff\xe4\x01\x49\x7f\xf2\x59\x7d\xe4\x7a\xf2\x59\x3d\xf9\xac\x9e\x7c\x56\x70\x3d\xf9\xac\x56\xaf\xcf\xc5\x67\x45\xba\xe3\x6a\x57\x65\xd3\xdb\xd8\x74\xe9\x1f\xb0\xf7\x3c\xcf\x84\xbc\x95\xc6\xa5\x18\x83\x05\x4b\x6f\x0c\x3a\x51\x38\xa1\xaf\xe9\x72\x22\x98\x71\x9d\x4c\x7c\x7c\xf7\xbd\xa7\xe9\x2f\xca\x5a\x23\xce\xf5\x11\xc9\x0d\x2f\xc8\x7c\x7b\x9b\x68\x14\x23\x51\x35\xeb\x32\x9e\xe1\xf3\x67\xda\xe5\xb5\xda\xef\x01\xb2\x30\x7e\x40\xc1\x26\xe4\xdc\xd5\xba\xac\x0c\xbe\xde\x64\xa1\x64\x86\xf2\x21\xbd\x9b\xe2\xcb\x6b\x43\x17\x37\x68\x67\x5b\xd3\x76\x48\xce\x6d\x13\x40\x97\x76\xcd\x15\xdb\x81\xb8\x45\xd5\xb9\x71\x4d\x7f\x77\xc3\x7d\x65\xf8\x9c\xce\xc8\x7b\x56\xc8\x2b\xa6\x70\x75\x4f\x3e\x34\x54\x68\x2e\xc5\x6b\xca\x2b\xbb\xb6\x7e\x8d\xbb\x68\x37\x69\x35\x53\xfd\x14\xc8\x28\x45\x23\x6c\x70\xc7\x48\x96\x7b\x87\x1b\x28\xa1\xbb\x89\x1d\xcf\x55\xd0\x35\x8a\x5d\x71\xd9\x6a\x8f\x7c\xd0\x1a\xd4\x34\xb4\x71\x1e\xa2\x05\x9f\x2f\xfc\xcd\xbe\x62\x15\xb2\xae\x55\x19\x36\xf1\x60\xca\xb4\xa1\xa6\xd5\x7d\xf8\xe9\x02\x12\x0f\x77\x28\xfb\x2a\xf0\xd1\xee\x18\x21\x39\xd5\x75\x44\xa0\xd8\xd5\x03\xf1\x7b\xc4\xc7\xc0\x47\x4f\xdd\x5e\xf6\x50\x1f\x1d\xac\x49\x21\xeb\xa6\x35\x2c\xda\xf3\x6e\x77\xe5\x11\xf5\x77\x64\xa6\x5e\xff\xa7\xe7\x35\x15\x74\xce\xc6\x81\xb4\x71\x87\xf2\xf1\x3c\x9b\xa4\xcf\xc2\x56\x24\x7b\xf3\x9f\xf8\x7a\x74\xe8\x1c\xfd\x2b\x1b\xce\x1e\xb9\x17\xac\x3d\x92\x1f\x6f\x8f\xdc\x3f\xe6\x1e\x09\x10\xa8\xbb\x2a\x80\xde\x3b\xfa\x56\x45\x90\x53\x32\x6e\x13\x41\x39\x4d\x65\xa7\x6c\x38\x5a\xb8\x26\xb2\xe6\xc6\x30\x5f\x8e\x18\x44\xca\x88\x70\xd3\x43\xc7\x74\x02\x14\x02\x9c\x58\x3d\xc8\x3e\x34\x15\x2f\xb8\x89\xda\xd7\x25\x02\x48\xac\x5e\xe0\x40\xb8\xe6\x1a\x55\x79\x41\x78\xdd\x54\x2c\x68\xe0\x63\x87\x2e\xe4\x83\x70\xe1\x6d\x0a\xa8\x4d\x21\xec\x03\x84\x62\x91\xe0\x27\xb9\x7d\xc7\xeb\x49\x6e\xdf\x70\x3d\xc9\xed\xec\x72\x1b\xb1\x4b\x87\x43\x01\xf7\xe4\xb5\x7f\xa8\xeb\xbe\x44\xa7\xac\x22\xbf\xb6\x4c\x2d\x89\x35\xb0\x3a\x5c\x10\x69\x85\x9d\xe6\x25\xe2\x57\xf8\x9c\x8e\x1d\x8a\x10\xe4\x54\xce\x21\x67\xe4\xe4\x83\xb5\x6f\xa1\x2b\x45\xf6\x53\x72\x75\x80\x7e\xef\x2b\x5c\x85\xb0\x32\xb1\x55\x8a\x85\x54\xf1\x27\x60\x62\x1e\xbe\x3d\xce\xe9\xc0\xc8\x51\xa6\x42\xf2\x95\xaa\x90\x7b\x52\x32\x08\x39\xbc\x65\xae\x71\x4d\xc2\x37\x70\x8e\x87\xb2\xa6\x10\xcd\x25\x97\x6c\x39\x72\xa5\x9e\xc4\x72\x20\xf5\x37\x67\x22\x11\xab\xe7\x51\xfd\xb9\x64\x98\xc7\x31\xac\x57\x69\xff\xca\x7c\x20\xe6\x0c\xd5\xe1\x35\xb6\xaf\x9d\xed\x59\x7e\x89\xf2\x9c\xd1\x99\xcf\x7c\x62\x5f\x35\xd7\xa3\x56\xf6\x8c\xe5\x1d\xe7\xdd\x46\x9e\xb7\x1f\x04\x34\xca\xc0\xe6\x80\x14\x0a\x02\x3f\x0f\x7b\x91\xdc\xc1\x04\xbc\xfc\x32\xde\xd3\x64\x65\x13\x30\x24\xa2\xb5\x8f\x67\x78\xc9\x96\xcf\xb4\x6b\x43\x22\x85\x5e\xf0\x06\xd4\x77\x48\x66\x92\xb3\xac\x5b\x1c\xaf\x1f\xa1\x1c\xd6\x13\x83\xe7\xc6\xa9\x18\x91\xb7\xd2\xd8\xff\x9c\x00\x38\x05\x88\x97\x63\xc9\xf4\x5b\x69\xe0\x93\x9d\xe6\x02\x9c\xa4\xc7\xc0\x03\x2e\xe7\x88\x43\xc6\x0f\x1c\xaf\x88\x5f\x0d\x58\x85\x6e\xad\x7d\xd5\x51\xe0\x17\xae\xc9\xa9\x20\x52\xb9\x25\xca\x48\x0e\xb8\xe6\x91\x24\x24\xc6\xc7\xbb\xbb\xa4\xc0\x4d\xd4\x38\x1e\x91\xaa\xc7\x22\x0f\x42\x98\x23\x0a\xa2\x3e\xf8\x0d\x44\xb7\x20\x17\xd6\x43\x17\x00\xe8\x95\xa2\x86\xcd\x33\x24\xf1\x76\x57\xcd\xd4\x1c\xfa\x04\x15\x8b\xdc\xbb\x21\x97\xa2\x85\x57\x46\x75\x0b\xaf\x7b\xd8\xb2\xf7\x5a\x2d\xfc\x20\x03\x80\xee\xfe\x3d\x40\x7c\xec\xaa\xf7\x2c\x22\x11\xb5\xd8\x9a\x36\x56\xde\xfc\x3f\xab\xac\xc2\xf6\xfa\x1f\xd2\x50\xae\xf4\x84\x1c\x12\xcd\xc5\xbc\x62\xbd\xef\x5c\xb0\x38\x7a\x4c\x26\xb2\x20\x97\xc5\xea\x87\x57\xb4\x62\x88\xd3\x44\x05\x61\xe8\xae\x02\x7c\xee\x15\xc3\x68\x44\xae\x17\x52\xa3\xe6\x1b\x4a\x0c\xf6\x2e\xd9\x72\x6f\x94\x25\x14\x46\xe2\xf3\xd9\x3e\xfa\x54\xec\x75\x8d\xe0\x7a\x92\x28\xe8\xfe\x90\xf1\xb8\x07\xdf\xed\x3d\x8c\x3d\xf6\x08\xdc\x55\x8f\xa2\xc8\xc9\x85\x1b\x8f\x2a\x8a\x29\x02\xbb\x16\x5c\x5f\xa5\x6f\x35\xe3\x07\x90\xee\xa3\x7b\xba\xf4\x0e\x87\x72\xb6\x73\x51\x5c\xc0\x2d\xce\x04\x9e\x91\x81\xb9\x90\xac\x43\x63\x14\x9f\xb6\x86\xe9\x9d\xe5\x84\x1b\x09\x8d\x60\xdd\x42\xff\x54\xbb\xf2\x3f\x6e\xfa\x41\x84\x80\xc7\x75\x2e\xe6\x38\x9d\xad\xe6\x4e\x46\x90\xba\x31\x2e\x82\x54\x0e\x61\x6f\xad\x0a\xcf\xfe\x4d\x03\xa9\x0e\x43\x7d\x78\x3a\x55\x97\xac\xa9\x98\x6e\x24\x56\x9d\x6d\x9c\x18\xa7\x48\x2e\xa8\x86\xac\xfb\x99\x4b\x8a\x6a\x5a\xd5\x48\xc0\x42\xa7\x62\x6d\x33\x66\xc1\x8d\x70\x20\x21\x1e\x84\x09\x01\xe7\xc2\xce\xb5\xfb\x3d\xf4\xbf\x3c\x5c\xe9\xfc\x22\x15\x34\x93\x70\x85\x01\xa2\xe4\x85\xf3\x0b\x51\x43\x44\x1a\x80\x71\x7c\x6d\x66\x20\x5f\xb9\x84\x6e\x81\x00\x7f\x8f\xac\xe4\x4d\x04\xa4\x9d\x09\x03\x39\x36\x82\x9c\x8a\x19\xa3\x9a\x4f\x2b\xe6\x8a\x1b\xb4\xa1\x26\xc3\xfc\x45\x09\xf9\x6e\x1e\xad\x39\x0d\x5a\x04\x37\x7a\x35\xb9\x66\x9f\x8b\xa2\x6a\x81\x07\x04\xaf\x0e\xc0\x85\x4d\x45\xc1\x2a\xd4\x6d\x64\x19\xd0\xb8\xb2\xe1\x45\x44\x89\x44\x33\xa6\x14\xce\xd7\x74\xb9\x79\x37\x93\x52\x32\x4c\x45\x06\x20\x95\x11\xbe\xde\xe6\x0a\x19\xb7\x0c\xc3\x0f\x18\x9c\x2d\x4a\xce\x18\xee\x0e\x5c\x19\x42\xed\x51\x32\xab\x10\x07\xce\x9d\x25\x30\x43\xae\xd2\xe1\x3c\xca\x18\x1a\x21\x28\xa8\xc3\xee\x8c\x1b\x7f\x0e\x26\xcf\x01\x64\x6e\xeb\xfc\xc2\x65\x1a\x77\x92\x69\x0c\xc7\x17\x1b\x1c\x78\xcc\x7c\x7e\xbd\x19\xdc\xdf\xfb\xbe\x0e\x2c\x68\x13\xed\x5b\x62\xf4\x5a\x75\x75\x35\xd2\xf7\xa4\xb3\xfc\x08\x9b\x5e\xce\xc8\x6b\x5e\x31\xbd\xd4\x06\x8b\x1f\x79\x8d\x82\x0b\xcb\x43\xa5\x21\x28\x15\x30\x99\x0e\x05\x97\x3d\xcd\xf2\x04\xb2\xb2\xad\x70\x76\x95\xa4\x7b\xac\xd7\x29\x7d\x55\xf6\x1a\x6c\xed\xaa\x04\x82\x92\xdd\x50\x0f\x95\x65\xb5\x06\xcd\xd6\x2c\x09\xd6\xb1\x37\x1b\xb3\xa2\xef\x8b\x7d\xcd\xa7\x8a\x91\xa3\x05\x15\x82\x55\x51\xbf\x48\x97\xba\x41\x8d\xa1\xc5\x02\xa5\x39\x25\x56\x92\x54\xcc\x3c\xd3\x64\x21\xb5\x21\x35\x2d\x16\x5c\x84\x46\x53\x22\xf4\x4d\xed\x50\x80\x1f\x21\xd0\xfd\x4c\x5f\x58\x02\x12\xd7\x39\x97\x70\x41\x2a\x3c\xc7\xce\xba\x8d\x0d\x52\xc5\x48\x02\x69\x40\x19\x9a\xec\xad\x3d\x3b\xf4\x80\xf6\x52\x0a\xd6\x1a\x3d\x05\x70\x6e\xc2\xbd\xe9\x23\x9f\x7c\x98\x90\x3d\xf6\xc1\x7c\xb3\x37\x22\x7b\x1f\x66\xda\xfe\x47\x98\x99\xde\x9b\x90\xd3\x3a\x24\x0a\x71\x11\xa9\x11\xcc\xfd\x80\xf0\x19\x69\xc5\xe0\xa2\xce\xc1\x12\xab\x6a\x45\x16\xfe\x78\x56\xb5\xc2\x2e\xf1\x3b\xd7\x8a\xf9\x15\x79\x7d\x44\x0c\x55\x73\x66\xec\x18\x44\xb4\xf5\x94\xa9\xd4\x96\xad\x39\x12\x47\x86\xb7\xd9\x57\x8c\x96\xef\x44\x95\x1c\xdb\xcb\xb5\xa1\x3c\x1d\xfd\xf9\x3e\x8e\x12\xd7\x66\xb4\xd2\x8c\xec\xdb\x1b\x9f\x5f\x2b\x6e\xd8\xc1\x84\xbc\xf7\xbf\x82\xf2\x77\xd0\x45\x67\x72\x88\xbe\x87\x55\x23\xee\xa1\x9a\x19\xc4\x2c\x16\xce\x06\x79\x63\x37\x75\xb2\x16\x88\x0b\x3e\x95\xb2\x62\x89\x90\xee\xc8\x7b\x3f\xfd\xf4\x36\xd9\x35\xd6\xe7\xef\xee\x79\x37\xb1\xf9\xb5\x54\x55\x79\xcd\x4b\x57\x78\x44\xf6\xed\xcd\x07\xc3\x58\x7e\x48\x68\x61\x60\x20\x21\x77\x5b\xbb\x3c\x3e\xfc\xeb\x6b\x5e\xe6\x59\xd1\x01\x1b\x10\x88\xe8\xf3\x80\x77\x8c\x58\x1e\x20\xc0\x04\xbc\x64\xc2\x58\xe1\xae\x34\xd9\x87\x5f\xa4\xe3\x68\x9e\x70\xec\x7b\x02\xe3\x4a\x45\x0a\x59\x4f\xb9\xe8\xda\x12\x75\xbc\x69\x15\x18\x2b\x6f\x7d\xc4\x4d\x33\x83\xbd\x04\x00\xd5\x50\x9a\x05\xd1\xbc\x6e\x2b\x43\x05\x93\xad\xae\x92\xe1\x34\x9e\xd8\x73\xed\x9a\x55\xec\x03\xca\xbe\x6d\x35\x5d\xec\x28\xe8\x6b\xc6\x80\x54\xd1\x75\x86\x5b\x55\x8d\x93\xc6\xea\xe0\x91\xca\xe7\x41\xb5\x0e\x7d\x4e\xd8\x07\x56\x38\x14\xd5\xa6\x6a\xe7\x3c\xd1\x3b\x73\x6c\xdf\xa2\xa0\x86\x95\xaf\xc8\xeb\xee\xe5\x00\xa3\xcb\x7f\x33\x21\x47\x3e\xa7\xd1\x0d\x4f\x8e\xce\x4f\x8f\x5d\x73\x30\xa1\x0d\xa3\xdb\xd0\xdd\x87\x25\x50\x8d\x9d\x2b\x76\x0b\x46\x03\x0e\x9c\x45\xc4\x76\x1d\xda\x56\xe3\x1f\xee\x1b\xd7\x79\x3b\x74\x50\x1e\xd6\xcc\x6a\xb0\x48\x78\xb2\x97\xb6\x66\x2f\xc5\x0d\x97\x23\xb2\x4a\xd6\x30\x61\xcf\x3c\x11\xef\x7f\x9c\xe7\xad\xb1\x89\x84\x35\xce\xa4\x57\xba\x87\xf5\x95\xca\xc8\x47\xbe\x90\x55\xa9\x09\xfb\x60\x14\xb5\xc7\x7e\x6d\x0f\xf8\xf0\x9b\x19\xa1\x62\x39\x19\xa6\x62\x0e\x0a\x4b\xe7\x0d\x45\x0f\x5e\x99\xdd\xb6\xd0\xca\x27\x0b\x2d\xbe\x34\x2b\x14\x33\x03\x60\xd4\xb2\x35\xfe\xf7\x84\xf4\x97\xab\xf7\xf1\x9a\x83\x15\xbf\xf5\x20\x0d\x2e\xad\x64\x88\xdf\x58\x33\xa1\xb9\xe1\x57\xbd\xee\xa0\x00\x83\x4a\xb5\x0e\x7e\x48\x50\xa6\x9c\x00\xd4\x3d\x84\xd2\xe4\x81\x31\x3e\xc9\x67\x44\xc8\x95\xb7\x8a\xa1\x2b\x42\x9c\xb0\x77\x4b\xf2\xa0\x21\x0f\xa7\xc6\xc6\xda\x54\x00\xe0\x21\x3e\x7c\x04\x58\x6b\xf8\x6f\x4c\xc5\xb1\x73\x10\x79\x63\x61\x16\xd2\x67\xda\xcd\xde\xf6\xc4\x66\x8e\x94\xf3\xa1\x08\x35\x39\x63\x47\x6f\x23\xd5\xce\x83\x93\x0c\x0b\x2f\xf4\x3b\xc9\xb1\xd9\x8c\x15\x76\x6f\x40\xf7\x3a\xdf\x8a\xcd\x9a\xb5\x65\x8b\x00\x20\x1e\x90\xb4\x0f\x28\x3a\x14\x7a\x2f\x82\x99\xe8\xb2\x57\x4f\x85\x36\x14\x30\x22\xe1\x8d\xad\x9e\x66\x95\x27\xd7\x7f\xd0\x6d\x27\x8c\x5e\x7b\xa4\xc9\x81\x44\xd4\x56\x0d\x2b\x98\xb2\x3b\xa6\x5a\x92\x6b\x25\x87\x16\x6d\xdd\x31\xb6\x2a\xaf\x98\xba\xe2\xec\xfa\xb9\x43\xac\x19\xdb\x97\x1d\x3b\x10\xc0\xe7\xe0\xee\x7a\xfe\x05\xfc\x67\x00\x55\x99\xa2\x6f\xee\x94\x7d\x45\xf6\xf6\x72\xf8\x05\x06\xa7\xae\xcd\xa0\x09\x67\x92\x41\x95\xc7\x27\x00\xc3\xaf\x84\xca\xdc\x87\xce\x21\xf0\x29\xa1\x31\x77\xd6\x44\x0a\xb9\xdd\xec\xfe\x41\xae\x7d\x0b\xd1\x96\x4f\x3a\x90\xa5\x56\x88\xe4\xfa\xc2\xbe\xed\x8f\xc3\xf4\x0c\xff\x90\xe0\xc9\xc5\xd8\x28\xc6\xc2\xab\x1a\x67\x3e\x09\xe9\x1b\x9f\x07\xc3\xe6\x11\x06\xf1\x4a\x6a\xa8\x66\x66\x48\x30\x39\x97\xa8\x8f\x48\xb1\xf3\x1b\x4b\x7d\xf7\x15\xe4\x5b\x31\x40\xaa\xf6\xbd\x1d\xc9\xf8\x4f\xce\xf4\x17\xbd\x3b\xad\xd1\xef\xd6\x35\xfd\x24\x47\x44\x22\xe8\xd6\x82\x3e\x20\x1c\xbb\x63\x92\x6d\xd9\x88\xee\x2d\x7f\xf8\xe1\xf4\x38\x8f\x2b\xa5\x7b\x9e\xf7\x0c\xc0\xbf\xfb\xd3\xef\x36\x29\xd7\xa4\x15\xfc\xd7\x36\x76\x42\x43\xd7\xfe\xb0\x91\xdc\xfd\xdb\x98\x9d\x79\xc1\xba\xe4\x84\x63\xae\x2f\xb7\x25\x19\xd7\x08\xe9\xcb\xc8\xbf\x1c\x9d\x10\xf7\xe9\x6d\x99\x04\x49\x43\x3f\x4c\xf6\x41\x5f\x86\xfe\xe5\xe8\x64\xe5\x75\x57\xdc\xa8\x87\x55\xe5\x7d\x3d\x52\xe8\x00\xea\xe9\xa4\x6b\xa6\x29\x06\xd9\x6c\x35\x7a\xc5\x4a\xae\x30\x55\xcd\xbf\x65\x39\x29\x34\x0f\x4d\xcf\xe6\x97\x6c\xc2\x65\x94\x96\x9a\x36\x05\x83\xb2\xc8\xf4\x17\xf3\x82\x75\x09\xd1\x25\xd7\x97\x8f\xcf\x93\xdc\x94\x6f\xd3\x40\x6e\x3f\xb7\xf4\x93\x55\x77\xa7\x93\x9d\x4e\x09\x82\xdd\xbd\x94\x2d\xb9\x76\xbd\xc7\x07\xba\x59\x2f\x78\xf3\x8a\x9c\x08\xdd\x2a\xd6\x55\xe8\xae\x92\x60\x2d\xec\x7b\x77\xba\x42\x93\x7d\xfd\x6a\xcb\xa9\x2a\x3b\xb1\x15\x49\x8e\xb3\xbd\xa1\xca\x80\xd7\x73\xdb\xac\x1d\x08\xf1\x2a\x41\xf4\x81\xb8\x4f\xde\x3e\x9d\x79\x0c\xa5\x91\xeb\x0d\x8b\x9e\x7b\xae\xc3\xc3\xbb\x8c\x69\xd0\xfe\x72\xf0\xef\x6b\x19\x2c\x96\xe7\x25\xbb\x7a\xae\x4b\xfa\x72\x04\xaf\xe5\x31\x20\xfb\x73\x40\x35\xd9\x7b\xb9\x97\x3e\xf2\x39\xaf\x79\x45\x55\x85\x3d\x51\x42\xb3\x99\xf0\x7c\x7b\x42\x7a\x42\xa0\xec\xec\xc5\x1e\xd9\x97\x0a\x28\x2a\xa8\x20\x15\xf3\xfd\x53\x9c\x24\x5d\xa2\x73\xe0\xe0\x33\xd9\x42\xdb\xce\xc7\xc2\x83\x6d\xeb\x9b\xb0\xf4\xf6\x90\xd3\xb9\xe3\x38\xe7\xd9\x71\xa7\x3e\x72\x61\x75\xb0\x09\xf9\xc1\x69\x76\x4e\x37\x47\xae\x2d\x41\x21\xc3\x3b\x3e\x0f\xee\xf8\x9c\xc2\x38\x2b\x01\x99\x7b\x0d\xac\x90\xf5\x4c\xbe\xcf\x84\x23\x52\x83\x45\x73\x6e\xde\xb3\x46\x6e\xcd\x4e\xc4\xe1\x57\x52\x6a\xb8\xb1\x1f\x48\xcd\x8d\x54\x4b\x42\x0d\xa1\x78\x32\x14\x6d\x45\x15\x51\x0c\x93\x63\x32\x98\x6d\x6e\xf4\x15\x63\xed\x42\x76\x19\x38\x31\x86\xa1\x73\x43\x07\xfa\x46\xee\x34\x4e\x8c\xd1\x9d\xd8\xf3\xea\x98\x2b\x2b\xa5\x25\x56\x85\x71\x73\x14\x06\x43\x38\xa5\x4a\x0a\x07\x6d\x64\x47\x74\x59\x38\x73\x6e\x5c\x8b\x5d\x24\xc0\x7e\xed\x9f\x96\x44\x0a\x50\x00\x32\x55\x96\xcf\x74\xf7\xc6\x8f\x30\xb7\xa7\x63\x9c\x6d\xf8\x13\xc1\xec\x96\x6a\xeb\xd2\x35\x10\x12\x9a\x44\x60\x1e\x6d\xf7\xf9\x30\xc5\x11\xf2\x5c\x84\x0c\xc1\x59\x82\x35\x8c\xca\xe0\x1e\x79\x36\x99\x3c\x9b\x80\x2a\xfb\x6c\xf2\xcc\x1b\x62\x55\x28\x87\x75\xda\x5e\x47\x8c\x2f\xa2\x1c\x02\x58\xd0\x97\x1a\x13\x42\xde\x79\xd4\x4f\x68\x67\xb9\x52\x91\x1b\x8a\x6d\xab\x2a\xbc\x03\x34\x5d\xe9\xcb\x9e\x01\x91\x50\x88\xe7\xb6\xd3\xf8\x25\x5d\x61\xef\x9c\x5f\xb9\x6e\x70\x5b\x4b\xb3\xe9\x5e\x31\x0b\xa7\xc6\x33\xe6\x1c\xa8\xef\xbf\xdf\xde\xbb\xa1\xe8\xce\xf4\x66\xee\x1c\x70\xef\x55\xc8\xba\xe6\x86\x2c\xa8\x5e\x04\x2f\x5e\xd7\x19\x67\xd8\xd1\x34\xd4\xf9\x5b\xb5\xda\x30\x35\x4b\x92\x5d\x59\x0e\x73\x4f\xc0\x8a\xb3\x37\x7c\xec\x30\x89\x45\xe7\x8a\x81\x43\x4e\x2f\xa8\x62\xf6\xce\x06\x4e\x9f\x8a\xcf\x98\xe1\xa9\x9b\xa3\x77\xbe\x87\x91\x6f\x0f\x6e\x75\x84\xef\x56\x78\x6b\xe8\x59\xc8\x44\xd9\x48\x9e\xda\xaa\x61\x4c\x1a\x6a\x52\x1a\xa2\x0e\x3d\x45\x03\xd9\x59\x76\x70\x78\x9a\xdf\xc2\xfe\x03\x34\x26\x81\x03\x5d\xff\x95\x88\x61\x8c\x6c\x64\x25\xe7\x03\x73\xf8\x07\x39\xc2\xcc\x62\xdb\x5a\x84\xa5\xc1\xcf\x5a\x37\x35\xc1\x57\x63\x06\xa0\x7d\x6d\x30\x9e\x98\x73\x46\xf9\x96\x3d\xce\x50\x7a\x1e\x76\xe7\xf3\xf7\x27\x87\xc7\x6f\x4e\x26\x75\xf9\x05\x62\x40\x8c\xe9\xb8\x91\x5b\x0b\x43\x3e\x0a\x4b\x7a\x6d\xd9\xd0\xfb\x0c\x92\x98\x95\xa8\x93\xd8\x07\x8c\x01\xb3\xa9\x61\xaa\xe6\x88\x2b\xb5\xab\x26\xf6\x56\xb8\x24\xd5\xba\xb6\x67\xdc\x59\xe2\x46\xce\xc1\x1e\x7e\xfc\xfe\x81\xdc\x28\x36\x06\x20\x09\x6b\x4b\xce\x78\x05\x40\x34\x9d\x9e\x1a\x9d\xcf\x49\x83\xfa\x88\xab\x0f\xe9\xe2\x93\xab\xe5\x6a\xe4\xb5\xb3\x32\x43\x64\x1d\xdb\xbe\x56\x55\x5a\xdd\x13\x60\xf9\x58\xa5\xcc\x45\x81\xe8\x1c\x5e\x58\x2a\xd7\x41\xb0\x51\xfc\x8a\x57\x6c\x6e\x49\x58\x70\x31\xd7\x5d\x07\x22\x97\x8c\x96\x34\x2c\x60\x0c\xb1\x4e\xa7\x09\x49\x3d\x6f\x20\xb5\x2c\x80\xf3\xe3\xd6\x7c\xfb\xee\x82\x08\x86\x24\x24\x6e\xb2\x81\x8e\x27\x4b\x64\xe2\xc9\xbe\xed\x68\xeb\x76\xf4\x91\x9d\x39\x8a\x7d\x42\xca\xa6\xad\x3a\x28\xe0\x84\xb1\x1d\x3c\xec\x29\xd1\xcb\xba\xe2\xe2\x12\x5a\x76\xb8\xe3\xc4\xb5\xbf\x63\xc4\x7e\xe1\x37\xb0\x62\xb4\xca\xaf\x06\x3c\x10\x2b\x93\x1c\x2a\x80\xd9\x81\x18\x3c\x98\x2c\x56\xea\xfd\xd5\x0b\x7b\xf4\x94\x67\x39\xbf\x93\xf3\x3c\x1f\xf5\xd2\xf2\x9a\xce\xb7\x56\x68\x0a\x83\xf7\x0e\x6c\x41\xde\x1d\x9d\xfa\xba\x81\xfd\xd8\x21\x8d\xf7\x4a\x45\xa8\x32\x7c\x46\x0b\x73\x40\x9a\xb6\xaa\x9c\x89\xeb\x95\x3c\x27\x25\x6e\xc8\x3d\x4d\x22\xf2\xa2\x73\xa1\x41\x01\x87\x96\xd5\x95\x1d\xd5\x58\x1b\x1e\x3d\x81\x6d\xe3\x12\x5a\x01\x9a\x4d\x90\xeb\x05\x2f\x16\xe4\xac\xad\xaa\x33\x59\xf1\x62\x19\x1a\xb8\xa3\xb3\xbd\xb4\xc7\x42\xe2\xb9\x70\x58\x5d\xd3\xa5\x7e\x15\xbf\x25\xa1\xf0\x19\xa1\xc6\xb0\xba\x41\x66\xb6\x53\xb3\xda\xa2\xb3\xf3\xb7\x83\xb2\xc8\x2d\xa1\x20\xf2\x28\xaf\x82\x64\x6c\xdd\x07\x89\xe7\xf5\x98\xbc\x65\x57\x4c\xf5\xe9\x13\xf6\x23\x78\xb4\xee\xd3\x04\x4b\x07\xda\x78\xab\xc1\x2b\x82\x3d\xe3\xd7\x96\xfa\x23\xb4\xf3\xd9\xca\x63\xb9\x16\xcf\x0c\x71\x5c\x95\xfa\x22\xa7\xb3\xb7\xd2\x9c\xe1\x33\xfa\xef\x83\x6f\x72\xc3\xa8\xb4\xb2\x36\xc6\xd2\x8f\x6e\xd9\xa1\xe4\xfa\x72\xd0\x2b\x04\x2f\x4e\xbc\x3c\x43\x99\x79\xce\x8c\x65\xe7\x71\xe0\x68\x47\x83\xe5\x6a\xf8\xae\xb4\x2f\xeb\xf6\x97\x62\x0e\x8a\x70\xe4\x98\xbb\x66\x54\x78\xbc\x41\x76\x4d\x14\xab\xa5\x41\x3d\xd7\xd2\xeb\x9c\xdc\x85\xac\x19\xa1\x57\x94\x57\x74\x5a\x41\xe6\xae\x7d\xb8\x7b\x56\xb2\xef\xf0\x10\x66\x00\xf2\xa1\xa4\xdf\x8f\x96\x5b\x02\xcf\x23\xff\x38\x18\xf0\x78\x93\x22\x59\x95\x2c\x2e\x63\x5d\x75\xa6\x64\x8d\xb7\x60\xd5\x79\x09\x95\x50\xb4\x2c\x89\xe6\x73\x01\xc0\x80\xc2\x90\x8a\x1a\x26\x8a\xe5\x84\xb8\xc6\xa2\x1d\x1c\xa2\x62\x46\xf1\x50\xb5\x2e\xa4\xaa\x69\xe5\x27\x79\x4a\x8b\x4b\x39\x9b\xc1\x53\xbb\xfb\x5d\xa2\x96\x13\x56\x38\x27\x54\x4b\x81\x83\x33\xad\xe9\x7c\x80\xb0\x82\x8e\xe1\x56\x81\x72\x85\x15\xb8\x4a\x0e\x2a\xd4\x0b\x4a\x8f\x03\xea\x53\xf7\x95\x87\x6a\xeb\xa0\xd8\x02\xbf\xaa\x56\x18\x6e\xc5\x5f\xaf\x97\x18\x81\x88\xe1\x5a\xe2\xa9\x1d\xca\x35\x66\x03\xf0\x08\x07\xb1\x06\xa5\x58\x57\xd0\x75\x00\xe9\x5b\xcb\x57\x5b\x15\xf5\x50\xb5\x93\x3e\x0b\xd1\x39\x02\xdc\xec\x5f\x9c\x5b\xaa\x1d\xcc\x75\xa7\x5d\xee\x03\xee\x5b\xc7\x14\x7f\xff\xf2\x1f\x93\xab\x38\x0a\x0f\x3f\xb7\x2a\xc7\x81\xa5\xb7\x66\x6a\x8e\x28\x68\x8c\xd4\x54\xf0\x19\xd3\x96\x43\x96\x96\x9d\x5c\x74\x45\xd3\x9a\x91\x6b\xcb\x48\x98\x03\xbb\xf2\x7a\x89\xf2\xf5\x62\x25\x9e\x13\xad\x68\xe7\xda\xd8\x57\xf2\x00\xd6\x02\x00\xfc\x3f\xb0\xa2\x35\xb0\xff\x20\x6b\x90\xec\x0b\x69\x3f\x4b\xcc\x1e\x3a\x6f\xa7\xa8\x3e\xc3\xb0\x2b\xaf\x86\x45\x76\xd0\x50\x3f\xac\xee\x47\x67\x56\xb7\xd3\x06\xe7\x95\xcd\xac\x1e\xf5\x72\xf2\xf5\xd7\xe9\x93\x83\xb5\x5e\x30\xa6\x66\x45\xab\xb8\x59\x5a\xc1\xcb\x3e\x98\xc9\x4c\x43\x07\xfd\x23\x80\x5b\x75\x07\xf3\x82\x82\x03\x1c\x0b\xc3\x70\x43\x76\x9b\xc2\x32\xea\x23\xac\xf4\x68\x82\xde\xb1\x6d\x7d\xdd\x4d\xf2\xcc\x09\x67\xbb\x63\xba\x6d\xa9\x27\xe4\x4c\x6a\x44\x86\x0d\xd8\xea\x03\x4a\x11\x77\x5c\x33\xb2\xd7\x67\xa2\x1b\x11\xb0\xa4\x77\x5b\x3b\x4a\x7d\xaf\xd8\x22\x44\x8e\xb2\xa3\xbf\x82\xb6\x5b\x86\x18\x3a\x5f\x69\xc4\x2f\x55\x6f\x2a\xba\xfe\x9b\x5b\x8c\x77\xbb\x59\xda\xf6\xee\x7f\xef\x5d\x60\xe4\x74\x95\x69\xfb\x75\xf0\x0e\xc1\x3c\x7d\xd1\xbe\x65\x0b\x7a\xc5\x36\x1e\xbd\x8d\x2c\x27\x1b\x4e\x20\xd8\x46\xe9\x03\x5a\xd3\x2e\x14\x96\x07\x58\x6c\xad\x59\x0d\x0d\xe6\x6f\x50\x01\x36\x69\x39\xd3\x25\xa9\xa4\x04\x48\xd5\xb6\x21\x42\x96\xcc\x6e\x00\x48\xe9\xa4\x95\x1e\x91\xf3\x43\x77\x63\x13\x0d\x89\x4d\x29\x40\xb3\x6d\x58\xb1\xe1\x86\x07\xf3\x52\x45\xfd\x58\x51\xad\x49\xaf\x73\xe8\x55\x6a\x4b\x07\x9f\x00\xb5\x51\xe0\x91\x73\xcd\xf0\x2b\x76\xc5\x20\x8d\x65\xc6\xe7\x04\xdb\xc3\xd6\xae\x79\x88\xcf\x1e\x97\x0a\xda\x55\x2a\x5e\xa6\x3b\x86\x56\xb5\x35\xbb\xa4\xd7\x52\x5d\x56\x92\x96\xbe\x4a\xb5\xb2\x0a\x4f\xc5\x2f\x19\x39\x66\x4d\x25\x97\xae\xe3\x87\x28\xc9\xb9\xa1\x86\xcd\xda\xea\x7c\xc0\x52\x0c\xf3\xea\xe8\x42\xf3\xad\x79\x75\xec\xe0\x2b\x5e\x9d\xd3\xf3\xa3\xf3\xd3\x47\x5f\x07\x37\xcc\xcf\xf7\xfc\x0b\x98\x99\xc7\x17\x8b\xe0\xbf\xa6\xa5\x86\x8d\x49\xd5\xa6\xfe\x12\x93\xf8\xce\xa4\x32\xb4\xda\x82\x0e\x5d\x2c\x68\x73\xd8\x9a\xc5\x31\xd7\x85\x15\x26\x79\x54\xe9\xb5\xa7\x46\xf0\xe8\x0c\xe2\x76\xce\x6e\x22\xdc\xef\x17\x77\xdf\xd1\x5f\x0f\xcf\x08\x6d\x2d\x37\x1b\xd7\xa8\x60\x2b\x51\x5e\x12\xcd\xcd\x39\xb6\x65\xca\x3a\x33\xee\x99\x1f\x99\x17\x7f\xd7\x2e\xcd\xca\xae\x55\x29\x6e\x2a\x13\x7c\xaa\x54\x7c\x54\x95\x8a\xa9\xc7\x05\xc9\x61\x46\x70\xc1\x0d\xa7\x46\xaa\x5d\x28\x8e\xea\x11\x13\xf2\x53\x5b\x6d\x64\xed\x44\xc2\xa9\xbf\x03\xe0\x24\x06\x45\x88\xd7\x06\xeb\x92\x5e\x21\x87\x08\x96\xe5\x54\x18\xa6\x66\xb4\x60\x2b\x40\xb8\x23\x70\x87\x23\x4d\xdc\xdf\x93\x4c\xcd\x1f\x5d\x2e\x7b\x03\xe7\xe0\x9f\x5e\xfd\x31\x2a\x85\xfc\x53\x30\x3c\x9c\x6b\x3e\xb6\x31\x04\x2b\x86\x34\xb3\x19\xce\x3d\xbf\xe6\x39\x17\xf8\xaf\x62\x25\xad\x1f\xa7\xf6\x3f\x5b\x5a\xe1\x92\x0c\x59\xee\xe1\xaf\xd9\x63\x85\xad\xef\x92\x3e\x63\xba\x79\x0b\x5c\x88\x40\x2b\x20\x99\xd1\xa5\x24\xdc\x64\x1a\x45\x85\xb6\x2c\x96\xc7\x6d\xf2\xcc\x19\x62\xcf\xc8\xbe\x29\x9a\xe4\x2a\xd5\x0c\x38\x4e\x01\xc3\xc9\xfd\x23\xe9\x31\xb9\x5a\x1b\x54\xad\x88\x8d\x22\x9c\xfa\x0b\x64\xea\xef\x43\x6b\x83\x61\xb3\xb5\xf5\x52\x5a\x90\x53\x5b\x07\x56\x77\x64\x84\x1d\x10\x4f\x35\x9a\x14\xe4\x7b\xae\x0d\xc2\xc5\xe2\xcd\x00\x0f\x87\xf0\xe8\xd6\x5c\x3d\x23\x52\x11\xde\xfc\x17\x2d\x4b\xf5\x0a\x35\x4f\x1f\x1d\x55\xe9\x68\x85\x5c\xbb\xf4\x3c\x00\x2a\xf4\xfe\x8a\x7d\xb3\x6c\x78\x41\xab\x6a\x49\x2e\x8e\xce\x60\x04\x4d\xfe\xf0\xbb\x17\x60\xbf\x7e\xfd\xd5\xef\x5e\x0c\xdc\x42\x4f\xe8\xea\x2b\xd7\xa3\xc8\x66\x7e\x04\x75\xc1\xbb\x86\xdd\xda\x43\x5a\x85\x5e\x94\xd6\x3e\x3c\x47\xa0\x51\xab\x1c\xb9\xe3\x0e\x05\x81\xdd\x5d\x41\xd5\xcb\x69\x45\x3e\x41\x7a\x46\xd7\x13\xa4\xe7\x13\xa4\xe7\x13\xa4\xe7\xcd\x57\xec\xe7\xdc\xf6\x79\x14\xd3\x02\xed\x12\xd7\xf5\x26\x54\x99\xce\x3e\x77\x95\x29\x91\xd5\x52\x05\x6f\x8e\x05\x8c\xe1\x62\x86\xf4\xbf\xe8\xda\x3a\x1c\xbf\x3d\xff\xaf\xef\x0f\xbf\x3d\xf9\x1e\x66\xd5\xa1\xd2\xd8\xed\xcd\xc5\x83\x86\x51\xee\x55\xc4\x0c\x5b\xef\xed\x15\x20\x8b\x95\xd2\x63\x41\xde\xbe\x3e\xbf\x63\xd5\xf1\x16\x62\x60\x5f\x88\x59\xfa\x2a\x3d\xb6\x62\x1c\xfb\x53\xcd\xd4\x76\xfa\xef\xec\x4c\x25\x8f\x0f\xf3\xb2\x0f\x7d\xaf\xbf\xe5\x57\x9c\x9d\xad\x39\xd8\xd3\x98\x91\xfc\xdb\x54\xd4\xda\x25\xc2\x65\x7b\xf4\xb5\xb4\x0f\xc9\x16\xc3\x2c\x62\x95\xab\x6d\xd6\xa0\x56\x26\x2a\xea\xb8\x65\x0f\x12\x54\x2f\x94\x55\xf3\xac\x82\xc7\xb4\xf6\xca\xc6\xbf\xef\x3e\x6e\x36\xb5\xe7\xdf\x96\x42\xb0\x91\x18\xd7\xb0\x1f\xf3\x6d\x7a\x85\xd1\xbd\x04\xbc\xb4\xac\x9b\xd5\xde\xe0\x30\x62\x2f\xf7\x0d\x94\xb2\x86\x16\xa9\xaa\x68\x1a\x57\x74\x33\x31\xf6\x0c\xd2\x7d\x84\x9f\x40\xe3\xf2\x47\xa8\x88\x00\xdd\x5b\x82\x61\x0e\x63\x6f\x5b\x38\x05\x42\x56\x3b\x02\xd2\xbb\xb0\x24\xa1\x3a\x54\xdf\x60\xe5\x4e\x86\xd6\x81\x3b\xc9\xb3\xe4\xb3\xd4\x57\x7e\x7a\x60\x77\xf9\x36\x5d\xe5\xcd\x42\x1a\x29\x76\xa3\xdd\xc1\x26\x5a\xfa\x47\xcb\x19\xdc\x71\x14\x92\x64\xa3\xa3\x09\xf1\x69\x43\xc2\xe7\x4a\xe5\xae\x4b\xe3\xcc\x51\xb4\x1b\x43\x63\x9d\x6d\xa2\xf8\x76\x94\xac\x8d\x2f\xf9\x79\x01\x66\x35\xe5\xe9\xf1\x16\x4e\x91\xc7\x90\x26\xf7\x99\xf6\x46\x7d\xa0\xb4\xb7\xe1\x70\x60\x65\xa6\x66\x37\xf6\x41\x7e\x8d\x4f\x8f\x9d\x23\xc2\x77\xb2\xd1\x4e\x2e\x90\x9b\x05\xd5\x56\x6c\x0a\xa9\xcc\xb5\x54\x5b\xee\x00\xde\xa7\x62\x05\x52\xc9\x7d\xb7\xd6\xf5\xeb\x81\xa4\x79\x9f\xb4\x3b\x35\x9f\x59\x7d\x2f\xbb\x52\x49\x04\xdd\xd0\x79\xe6\x43\x39\xf1\x23\x4c\x0a\x59\x47\x4d\x67\xc8\xf5\x82\xa1\x16\x7a\x74\x7e\xfa\x86\xcf\x91\x40\xff\x2e\x64\xc6\xa8\x69\x15\x1b\xcf\xa9\x49\x23\x88\x6b\x92\x96\xed\xb7\xe5\x53\x08\x79\xe8\xdf\xf9\x24\x3a\x87\x93\x28\xda\x61\xb7\x9d\x48\x9f\xc3\x81\xf4\x78\x0e\xa2\x9d\xb3\x79\x9e\x3a\x3f\xf7\x2e\x2f\x3c\xb2\xac\x8f\x7f\x98\x0b\x74\x5a\xde\xec\x54\x05\x1a\x8e\x1d\x77\xdf\x56\x54\x03\x25\xff\x1b\xce\x9b\xc1\x5a\x41\x78\x12\xe6\xf7\xc1\x31\x49\xab\xca\xae\xac\x14\x2c\x54\xe8\xe9\xae\xde\x14\x0b\x2e\x6b\xda\xb8\xda\xd3\x52\x5e\x8b\x6b\xaa\x4a\x72\x78\x76\xfa\xf0\xa7\xce\x60\xec\x7a\xdc\x47\x6f\x64\xb9\x75\xf9\x1f\x91\x02\x5a\x05\x20\x8a\xd8\x3f\xa6\xdc\x68\x84\x79\x04\xd0\x45\x13\x07\x59\xac\x7a\x15\x92\xfe\x01\xd4\x63\x1a\x84\x43\x06\xa3\x45\x10\x59\x18\x5a\xb9\x4c\xa5\x29\x33\xd7\x8c\x09\xf2\xe2\xc5\x0b\xcc\xaf\x78\xf1\xfb\xdf\xff\x1e\x8a\xb9\x49\xc9\x0a\x5e\xaf\xdf\x08\x77\xfd\xf6\xe5\xcb\x74\x52\xfe\x76\xf8\xe6\x7b\x42\x0b\xf0\x91\x91\xa9\x34\x0b\x47\x11\xb0\x5e\x3c\xa8\x1e\x91\xff\x73\xfe\xee\xad\xd7\x43\xf4\xca\xb7\xc0\xd9\x61\x3a\x07\xf8\x80\x1c\x50\x0c\x07\xd8\x9f\x2e\x03\x82\x9a\x45\x80\x3c\xa1\x90\x89\x16\x41\xeb\x38\x79\x39\xa0\xa0\x0a\xba\xb2\xf3\xf9\x02\x96\x85\x0b\xd8\x85\x15\x2f\x5c\xe7\x01\xcc\x8b\xc1\x4a\x69\x8f\xef\x89\x38\x26\x5e\x85\x48\x1e\xd9\x4e\xd9\x08\x6b\x9b\x1d\x6a\xca\x28\xf8\x48\x14\xd3\x6d\x65\xa0\x33\xd5\x94\x39\x22\x3a\x8e\xd5\x2c\x99\x03\x77\x23\x85\xdd\x89\xbe\x6d\xcb\x05\x2f\x81\x9d\xf9\x5a\x71\xab\x94\xcd\x02\x20\x35\x0a\x70\x08\xb8\x92\x13\x5a\x2c\x08\x13\x06\x7a\x38\x20\xeb\xd9\xdb\x93\x87\x5e\x50\x51\x5a\x99\x02\x8d\xf4\x81\x8c\x47\x9b\x7f\x9e\x2f\x93\xf5\x2c\xcc\x78\x0f\x4e\xab\x3b\x49\x69\x25\xc5\x3c\xde\x98\x9d\x62\x1d\xc1\x09\x0d\x90\x41\x50\xd8\x08\xe0\xc2\x76\x61\x30\xf8\xaa\x1d\xe0\x91\x46\xac\xad\x29\x1b\xb2\xff\xb2\xe4\x2f\xe7\xc9\x60\x26\xa4\x40\x8c\xeb\x0b\xd5\x6a\xf3\x6d\x6b\x19\x72\xc8\xd3\xf2\xe6\x34\x13\x72\xb4\x46\x1d\x26\x04\xbb\x1c\x2b\x88\xa9\x16\x05\xd3\xb8\x79\x7f\x41\x04\x12\xd3\xdd\xfd\x0b\x2e\xdb\x40\x2a\xe4\x6c\x13\x21\x1e\xf5\x8d\x0b\x7b\x92\xd3\xd6\xc8\x71\xdb\x94\x34\x20\x60\x27\x22\x07\x76\xd7\x61\xd5\x2c\xe8\x88\xcc\x69\x64\x34\xae\xd3\x11\x6d\x18\xe7\xdd\x80\x5f\x0c\x1e\xfd\x96\x37\xb6\x47\x92\x4b\x48\x85\x9d\x50\x85\xf3\x58\xd0\x9a\x01\x56\x0f\x92\x3b\x90\x84\x42\xd6\x53\x2e\x1c\x08\xde\x0c\x50\x02\x99\xc2\x28\x24\x20\xe0\x91\x8a\x4e\x59\xe5\x08\x90\x6a\xf0\x2b\x7f\xe7\x91\x95\x98\xb2\xe7\x9b\x26\x74\x3e\x57\x4c\x6b\x7e\xc5\x1c\xdc\x20\xff\x67\xa0\x06\x5a\x5b\x9d\xbc\xf1\x50\x8c\x9a\x58\xe3\xd0\xb0\xf4\xe6\x3e\x78\x85\xb6\x59\x96\xbd\x3b\x1f\xc2\x84\x90\x13\x2d\x0d\x53\xbc\x80\x51\xdd\x52\x6b\xa2\xdb\x62\x41\xa8\xc6\xea\xc3\x31\x60\x2e\x0e\x9f\xf5\x0e\x61\x05\x41\x1c\x17\x8c\x96\x1e\x75\xce\x1a\x55\x4d\xc3\xca\x09\x21\x47\x56\xfc\xcc\x78\x41\x0d\x62\x8a\x91\x92\x95\x6d\x53\x71\xf4\x11\x0e\x24\xe3\x62\xc1\x88\x54\x25\x03\x70\x49\x39\x83\xe4\xfb\x30\x58\xa4\x1b\x02\xd8\x3c\xb7\xe3\x4f\xb9\x51\x54\x2d\x51\x83\x72\x6b\x39\x90\x08\x7b\xfa\x14\x80\x63\x07\x63\x01\x3d\x00\x7a\x43\xd2\xbb\xc9\xf8\x2b\xcb\x21\x40\x06\xfb\x06\xbb\x6b\x40\xfe\xa5\xbf\xf2\x9c\x49\xf6\x82\xad\x7d\xee\x76\xf6\xd0\x87\xe5\x3e\x96\xec\x85\xb4\x81\x39\xbf\x2e\x2a\x03\x16\xa8\x29\x16\x4e\x53\xec\x8b\x2a\x42\xd0\x7f\x44\x87\x55\xc7\xe0\xe5\x50\x15\xb9\x17\x91\xa1\x9e\x9e\x99\x89\x35\x37\x4d\x4b\xab\x6a\x39\x66\x1f\xec\x61\x6f\x85\x19\x68\x4f\xd0\x2c\x0c\x0a\xf1\x5b\xa1\x99\x19\x65\x20\x04\x84\x50\xa3\x10\xcd\x56\x93\x3d\x7c\x7f\x21\xa1\x35\xc2\x1e\x0e\x66\x4d\xec\x69\x6b\xb0\x48\x67\xb4\xf9\x27\x39\xe6\xe4\x8a\xa9\xa5\x1b\x77\xf0\xe3\xb2\x6d\x55\x92\x75\x8f\x10\x90\x50\xa6\x58\x9c\x7c\x68\x14\x42\xb5\x64\x79\xe6\xca\x76\x59\x1d\x02\x11\xfd\xbd\xa5\xd4\x67\x6c\x2f\x8c\xe0\x04\xc1\x22\x96\xf8\x13\x38\x25\x0e\xdf\x1e\x0f\x3f\x1e\xf0\x1a\x6e\xf8\xf4\xaf\x81\x66\x50\xff\xca\x2f\x73\xf0\x3a\xbc\x65\xce\x5d\xb7\x05\xff\x0d\x36\xfc\x44\x8c\x35\x1d\x3c\x39\x94\x5c\x32\x77\x4c\x52\xe1\x42\x10\xee\xe6\x6c\x44\x2a\x06\x50\x8e\x88\x58\xc9\x96\x30\x18\x8e\x9f\x67\xe5\x33\x6f\x4a\xbc\x72\x9d\xa4\xdd\x35\xb6\x2f\x9f\xf1\x69\x7e\xb1\x32\x3d\x32\xaf\x2c\xc2\xeb\x92\x25\x07\x72\x36\x5d\xbd\x5d\x64\x39\xc9\x7b\x6a\x60\x0f\xd8\x0f\x02\x06\x52\x60\x7b\x0a\x9d\x41\x35\x31\x32\x17\xb3\x91\x7c\xd5\x91\xfd\xcb\x2f\xe8\xbd\x4d\x59\x46\xc1\x43\x22\x7a\xfb\xb9\x0a\x97\x6c\xf9\x4c\xe3\x9e\xb7\x27\xc4\x82\x37\x60\x9a\xc3\x61\x2f\x67\x99\x37\x3e\x5e\x3f\x02\xc6\xb9\x27\x07\x4f\x96\x53\x31\x22\x6f\xa5\xb1\xff\x39\xf9\xc0\xb5\xb3\x61\x8e\x25\xd3\x6f\xa5\x81\x4f\x76\x9e\x1f\x70\xaa\x1e\x0b\x37\x38\xef\x3f\x87\xc2\x38\x38\x86\xc1\x50\x87\x29\xf1\xab\xee\x81\x9d\x03\xe7\x70\x4d\x4e\xa1\xbb\x2f\x2e\x55\x56\x82\xa0\x2a\xd3\x83\x5c\x5b\x72\xbc\xbf\x0e\x20\xda\x5d\xf5\xf8\x3a\x3d\x8e\x5b\xa4\xea\x31\xcb\x03\x91\xe6\xc8\x82\x28\x04\x7e\x03\xfd\x4f\x9a\x8a\x16\xac\xf4\xed\x15\xa8\x9d\x55\x6a\xd8\x3c\xb1\xfe\xf9\xa6\xab\x66\x6a\x0e\x01\x96\x62\x40\xcb\xa5\xf5\x2b\xb7\x62\x86\x57\x56\xf5\x0c\xaf\x7b\xd9\xc4\xf7\x82\xa6\xf2\xe0\x43\x80\xde\xff\xbd\x3d\x66\xef\xc3\xaa\xc8\x26\x89\x22\x32\x51\xfb\xad\x69\x63\xa5\xd0\xff\xb3\x4a\x2e\x6c\xb8\xff\x21\x0d\xe5\x4a\x4f\xc8\xa1\x6f\x48\x11\x7f\xe7\xfc\x48\xd1\x63\xb2\x11\xd6\x40\x3d\xe6\xaf\x2d\xbf\xa2\x95\x03\x4f\xa6\x82\x30\x6c\xee\x61\x69\x5c\x35\xad\x46\xe4\x7a\x21\x35\x6a\xcc\x01\x7a\x63\xef\x92\x2d\xf7\x46\x19\xfc\xa9\xfe\x8a\x25\xdf\xde\xa9\xd8\xeb\x62\x8e\x3d\xf9\x14\xec\x06\xa8\x3d\xdc\x83\xef\xf6\x1e\xca\xa6\xcb\xa8\xd7\xd3\xb2\xe4\x88\x72\x7d\x96\x5d\xdd\xcd\x2a\x3e\xf2\xa3\x5e\x74\xd7\x50\xac\x1a\xbc\xee\xcf\x8d\xe6\x77\xe6\x86\xb0\xc3\x74\xe9\x1b\xcc\x38\x97\xd5\xba\x47\x2b\x03\x21\xe0\x13\x8b\xfc\x67\x76\x4b\xf4\x9c\x90\xb9\xdc\x48\x59\x98\xc5\xe3\xb6\xef\xe2\x92\x5a\xfd\x4a\xb5\x6c\x44\x4a\x29\x9e\x19\x17\x42\x88\xdb\x43\xad\xb6\x99\x28\x37\xac\xfa\xbe\x3e\xc8\x40\x0a\x55\x0c\xba\x61\xf8\xd6\x58\xce\xdf\x89\x0d\xa4\x20\x56\x65\x7c\xbe\xb0\xfd\x73\x13\x21\x43\x01\x8c\x1c\x21\x0e\xc6\x48\x48\x38\x05\xa0\x55\x6e\x4c\x4c\xc7\x78\x11\x49\xfd\xf8\x57\x06\x2a\x6e\x63\x6f\x38\x3b\x3b\xb0\x25\x74\xdd\xfe\x93\x29\x99\x61\xdc\x0d\x0e\xf2\x5c\xbb\x69\x48\x5e\x63\x77\x0d\x01\x71\xe8\xae\xde\x56\x7a\x0f\xc6\xf0\x95\x4b\x5e\x82\xde\x67\x11\x26\xb4\x92\xc8\x08\x90\x51\x0a\x5f\x4c\x61\x5e\x76\x4a\xc8\x74\xec\xb2\x8b\x62\xe6\x8e\x01\x98\x28\x7a\x9c\x43\x4f\xf9\x48\x54\xe5\x62\xc1\xba\xc8\xb0\x9c\x01\x95\x3e\x50\x7e\x3f\x1b\x2a\xa0\x14\xb7\x02\x01\x7b\x31\x87\x2f\x5f\x40\x36\x1b\x6b\x61\x8e\xeb\x1b\xda\x64\xcc\x34\x09\xcf\x84\x9a\x60\x55\xa3\xd0\xa4\x53\xd9\x1a\x0f\xd5\xec\xbe\x2f\xa9\xa1\xd0\x9f\x0a\xf3\x26\x76\x23\x84\x9b\xcf\x0f\x9b\xc9\x44\xce\xbf\x5d\x31\x03\xba\x5f\x71\x30\x22\x8c\x16\x0b\x6b\xed\x8c\x31\xb5\xd5\xda\x69\xde\x20\x3b\xb6\x0b\x85\x46\x90\x5c\x55\x18\x72\x6c\xa1\xc0\x11\x7e\xe3\x44\xd9\xda\x3e\x09\xc3\x97\x5e\x69\x57\xd0\xe1\xcc\x33\xd1\x15\xc5\x67\xa0\xc4\x87\x47\x7c\x53\x4f\xe7\xe0\x86\x19\x01\x6f\x55\x34\x5f\x3e\x47\x91\x95\xf6\x67\x61\xd3\x67\xa0\x62\xc3\xdb\x77\x78\xec\xf6\x0c\x73\x19\xe9\xad\x58\x1b\xdf\x2a\x35\x99\x68\xc0\x6e\x69\xf6\xa5\xa9\x77\xf6\x47\xa8\xf0\xd0\x11\x15\x2a\x83\xbb\xa6\x64\x8e\x5b\xc2\x72\xe6\x70\xda\x45\x4b\xaf\x59\x68\x68\xca\x94\x92\xca\xbe\x3f\xd3\x9a\x70\x58\xa7\x9a\xaa\x4b\x56\x06\x6d\x7c\x42\xce\xec\x44\x79\xcf\x5e\x06\x4a\x94\xd7\x22\x7c\xbb\x54\xfb\xea\xce\x30\x07\x32\x9f\x4d\x26\xcf\x5c\x27\x77\x85\x0a\x36\x9e\x43\xf6\xf3\x5c\x12\x3f\x8f\x1b\x2f\x9b\xf3\xae\x27\x9b\xde\xd0\x46\xa3\x73\xd4\xaa\xd1\x10\x0e\x92\x84\xe2\x8c\xb8\x2c\x21\x3a\x18\x6c\xa2\xbb\x32\x3b\x27\xf2\x06\x1c\xf3\x05\x1b\x33\xa4\x02\xe1\x95\x3b\xc0\x98\x31\xb8\x78\x53\x60\xd1\xf1\x90\x93\x87\x79\xa3\xd5\x19\xfd\xcc\xf5\x80\xa2\x9a\xd5\xeb\xbe\x42\x44\x50\xae\xc0\x35\x79\xe7\xbd\x15\x9f\x56\x72\x63\x10\x79\x38\x87\x35\xe4\xaf\x1d\xaa\xb9\x59\xbd\x76\xad\x06\x67\xf5\x3a\x9d\x61\xa7\xe1\xbe\x12\xe2\x8e\xc7\xb8\xac\x2a\x18\x20\x83\x7a\x4c\xae\x5e\xdb\x2b\xce\x59\xbd\xb6\x52\xac\xb3\x7a\xe5\x28\xde\x59\xbd\x86\x17\xf3\xac\x5e\x79\xfc\x29\x78\xdd\x97\x70\x02\x15\x81\xfb\x6e\xc0\xb1\xb3\xc6\x99\x1b\xa0\xf0\x83\x2b\xac\x89\x0e\x86\x8c\x32\xc9\xa9\x73\x28\x96\xe8\x54\xcb\xaa\x35\x48\x42\xfe\x41\x62\x9d\x11\x5e\xd2\x47\xa1\xf2\x28\x8a\xab\xc3\x45\x9a\x28\x58\x12\xa8\x9e\xe5\x1c\xeb\xfe\x22\x2f\xb9\x63\xa9\xbb\x1a\x7a\xc9\xdf\x32\x00\xaf\xdd\x68\x1c\x80\xd7\x4e\xb4\x0f\xf0\xa4\xe4\x6f\x22\x80\xd7\x2e\xe1\x7c\xf7\xaf\xac\x9b\x74\x78\x5b\x01\x7f\xdd\x53\xf4\x2c\x34\x53\x46\x5d\x69\x19\xba\x6a\xf6\x1c\x14\x00\xdf\x6f\x34\xfa\x4f\x7c\x0e\x10\xf6\xe1\x1c\xee\xd7\xca\x17\x14\xb9\xaf\x60\xb4\x47\x34\x38\x3c\x3b\xcd\xe8\xff\x8d\x9e\x7a\x83\x07\x38\xbe\xe3\xc9\x07\xfc\x29\x57\x6f\x82\x4f\xd1\x7d\x1b\x67\xfe\x1f\x77\x33\xea\x70\x9e\xb2\xa8\xdb\xbb\xef\x73\x5a\x7b\xf1\xd7\x56\x53\x8c\x7b\xce\x45\x1c\x68\xa4\x83\x90\xe8\x74\x4a\xa7\x8b\x21\x16\xaa\xaf\xf4\x1b\x5e\xa6\x4a\x76\xdf\x3f\xb5\xa3\x5e\x25\x98\xfd\x01\xdd\xb1\x56\xaf\x1e\xb7\x3c\x7b\xef\x27\xd1\x85\x2c\x31\x98\x10\xc5\x35\x1a\x59\xbe\xc2\x24\x2b\x2a\x84\x34\x98\x43\x3d\xc2\xf0\xbc\x1e\xb9\x44\x85\x08\x50\x57\x94\xa4\xe5\x25\x56\x63\x06\x64\xcc\x67\xff\x5e\x65\x15\x30\x81\x67\x79\xd8\x89\xdc\x53\x25\x04\x6d\xf8\x8f\x4c\x0d\xe9\xdd\xbd\xe9\xea\x31\x97\x7b\xbe\xe7\x24\x5d\x2c\x58\x4d\xe1\x9f\xaf\xfd\x04\x59\xa1\xed\x6a\x93\x21\x58\xc2\x54\x6d\x15\xdf\x51\x0f\xe5\x6a\xef\xea\x65\x86\x3a\xb9\xee\xba\x97\xb4\xda\xb0\xe6\xf7\x36\x9d\x67\x3d\xf3\xdf\x6e\x51\xf0\x50\x42\xa2\x81\x47\xb7\x0e\xe1\x28\xab\x49\x5c\xe1\xfc\xef\xf8\xd4\xdd\x67\x62\x21\x5e\x8f\xc1\x1b\x9d\xea\x85\x1e\x05\x2d\xbd\xef\x3d\xce\x46\xd8\x93\x17\xfa\xe3\xd7\x93\x17\xda\x5d\x4f\x5e\xe8\x4f\xbe\xee\xcd\x0b\x1d\xa9\x74\xfe\x84\xdd\xe0\x46\x8e\x3b\xc5\x79\x5f\x72\xd7\x45\x7e\x82\x31\x29\xef\x00\xf6\xde\x5f\xa9\xfa\xe1\xfd\x67\x93\xc9\x33\x0c\xf0\x4f\x42\x10\xab\x35\xb3\xf1\x1f\x08\x13\x85\x2c\xed\x73\x2e\xe0\xf9\x4a\x1b\x30\x77\x3a\x8f\x5e\x4c\x4b\xed\xc7\x8a\x53\x04\xe0\xd9\x79\xf5\xc6\x8c\xc7\x96\x47\x47\x7c\x7d\x9f\xca\x79\xc6\xe3\xa5\x53\xee\x3d\xe5\x7e\x29\xdc\x82\x32\xe5\xb4\xfc\x0e\xf7\xb1\xe2\x35\x77\x55\x8a\x56\x9e\x32\x6d\x72\x15\x9f\x10\xb2\x8f\x0f\x9f\x14\x4d\x3b\x72\x03\x4d\x6a\x56\x4b\xb5\x1c\x85\xc1\xec\x97\xbd\xd1\xdd\x1d\x07\x60\x5c\x14\xad\x52\x4c\x98\x6a\x39\x0c\x80\x7f\xd3\xf5\x48\xac\x0c\xbf\x52\x3b\x6c\x64\x04\xe6\xca\x93\xa7\xdb\x5d\x7d\x89\x77\xe4\x87\xc1\x70\x46\x98\x6d\x38\xef\x5d\x2b\x95\x51\xe7\x01\xb5\x9f\x32\x71\x45\xae\xa8\xd2\xb9\x24\x0c\xb9\x2f\xbb\xa2\xe4\x57\x5c\xdf\x63\x09\xf6\xb9\x53\x5a\x30\xd6\x28\x5b\xd3\xb4\xc6\x1d\x77\x5e\x44\xb0\x0f\x8d\xb4\xaa\x68\x10\x0d\x2b\xe6\xd9\xcb\xa1\x2e\xef\xf8\x6a\xa8\x31\x4c\x89\x57\xe4\xff\xee\xff\xfc\x9b\x7f\x8d\x0f\xfe\xbc\xbf\xff\xf7\x17\xe3\xff\xf8\xc7\x6f\xf6\x7f\x9e\xc0\x3f\xbe\x3c\xf8\xf3\xc1\xbf\xfc\x1f\xbf\x39\x38\xd8\xdf\xff\xfb\x77\x6f\xfe\x72\x71\x76\xf2\x0f\x7e\xf0\xaf\xbf\x8b\xb6\xbe\xc4\xbf\xfe\xb5\xff\x77\x76\xf2\x8f\x4f\x7c\xc8\xc1\xc1\x9f\xff\x57\xc6\x97\xa0\x62\xf9\x2e\xdb\x99\x80\xd7\xf8\x5e\xf4\x9a\xfe\xb3\xef\xb7\xd2\x94\x0b\x33\x96\x6a\x8c\x83\xbc\x82\x32\x9c\x6c\x43\x79\xd6\xbc\x3f\x19\xd3\x69\x55\xe1\x04\x0d\xe6\xf7\x8e\x0b\x91\xfb\xb5\xb0\xef\x2d\x3c\xdd\xc8\x32\x02\x71\xdb\x25\xe4\x47\x07\x6b\xa8\x03\xb6\xa2\x02\xc7\xa8\x98\x5b\xfd\x19\x00\xc3\x69\xe5\x6a\x66\xc8\x7e\xa3\xf8\x15\x35\x1d\xd0\x4c\x84\x15\x37\x90\x8c\x62\x41\xb9\x38\xe8\x20\x46\x1a\x59\x82\x79\xd5\x6a\x16\x7a\x72\x5b\x95\xef\xe2\xfb\x73\x52\x54\x1c\xca\x7a\x55\x68\xd3\x38\x70\x70\x8f\x47\x38\x67\x82\x29\x04\xd9\x23\xab\xaf\xda\x6a\x06\xc9\xc8\xb0\x51\x44\x99\xd8\x62\xb0\xbb\xce\x7a\x1c\xf1\x1e\xd5\x42\xdf\x78\x03\x6b\xe4\xb0\x92\x06\x20\xcc\x5c\x53\x30\x57\x5b\x43\x9b\x46\xc9\x2b\x96\x23\x2f\xde\xe9\xa3\xf0\x8a\x5c\x6b\x28\x4a\x8e\x97\x15\x17\x66\x14\xa6\x08\xea\xa8\x7a\x68\x43\x43\x17\x7e\x75\x2c\x72\x13\x2e\xe3\x85\xfb\xb0\x94\x4c\x47\x26\x56\x2b\x0c\xaf\xf2\x11\xa1\xc9\x82\x5e\x31\x32\x65\x4c\xe0\x84\xa0\xe6\x05\xf5\x13\xfd\x5d\x1c\x65\xf2\x0f\xc2\xd0\xf7\x97\x93\xc4\x5c\x40\xd4\x1a\x10\x56\x73\x31\xb6\xf3\xd5\xcc\xed\xec\xaa\x25\xc4\xc3\x24\x81\x8d\x8e\x7c\x15\x2f\x82\xdb\x80\x86\xd7\x96\x96\x12\x6b\x9a\x06\xd2\xe1\x40\x55\x1d\xfb\xfa\xee\x84\x6c\xf3\x26\x98\x9c\x1b\x6a\x5a\x3d\xf9\xd6\xd2\xfb\x9e\xcd\x14\xd3\x8b\xc3\xa1\xc6\x8b\x7d\x1d\x6d\x68\xdd\x64\x9b\x53\x2b\x9d\xb0\xaa\x30\xd4\x54\xa3\x13\x33\x4c\x9a\x7f\xed\x4e\x90\x3a\x24\xd9\xe1\xd1\x14\xf0\x99\x8f\x50\x04\x36\xd4\xca\x2c\xdc\x2b\x1b\x46\xbf\x64\x4b\xf0\x9d\x64\xdd\xaa\x47\x76\xa7\xc2\x63\x11\xae\x79\xf0\xac\x5e\xf4\xe6\xc9\x1f\x38\x08\xb2\xd6\x4d\xae\xdd\x1c\x80\xca\x0a\x3a\xbd\x93\x09\xe8\x92\x39\x3b\x79\x33\x90\x04\x87\x38\xee\xba\x68\x46\xe2\x7f\xdf\x8e\xfa\xdd\xd1\xf9\x17\x7f\x70\x03\x1f\xc4\x9e\xc0\xda\x45\x98\xf3\x10\xc0\x1d\xc2\xeb\xea\xae\x44\xd1\xe8\x04\x52\x7f\x3b\xed\x9b\x65\xc3\x0b\x5a\x55\xcb\xa1\x25\x39\xf8\x40\x57\x6c\xa4\x98\x69\x15\x38\xc7\xb8\xda\x44\x8a\x20\x15\xa3\xb3\x31\x68\x0c\xd2\x20\x64\xeb\xc1\x60\x3e\x38\x83\x04\xb9\x48\x44\xac\x33\x05\xae\xc1\xc8\xf2\x45\xc1\xc8\x52\xb6\x0e\x87\xac\xc0\x3c\x80\x42\x96\x83\x95\x11\x2a\xa0\x47\x8d\x3d\xef\x51\xf5\xb3\xb3\x8b\x65\xe4\x4b\xd9\x82\x52\x12\x6d\xab\x8d\x1b\x63\xe8\x5a\xac\xbd\x17\x78\x16\x6b\x7a\xc9\x88\xb9\x96\xfd\x6d\x0f\xc4\x06\x00\x28\xcd\x48\x21\xb9\x28\xf8\xe0\x79\xc0\x44\xbd\xde\xe2\x2b\x17\x36\x1f\xb9\xc2\xac\x46\x6a\xcd\xa7\x15\x8b\x34\xb7\x15\xc5\xc9\x72\x49\x46\x1d\xc1\xce\x3f\xac\x4d\x57\xa4\xa5\x14\xd3\x8d\x14\x10\x5f\x82\x73\x1a\x1c\xf2\x13\x42\xfe\xb6\x32\x87\x83\xa7\xa3\xaa\x88\x60\x18\xc8\x2a\x16\xac\xb8\x74\xfd\xd8\xb8\x26\x85\x14\x08\x7e\x32\x72\x6e\xbe\x31\x10\x09\xca\x89\x9d\x96\x65\x86\xe4\xc6\x42\x0a\xd7\xcd\x2f\x8b\xb8\x8d\x95\x4c\xf0\x6e\x29\x59\x69\x52\x2c\xa4\xd4\x4e\xc3\xeb\xbb\x4e\xe2\x55\xe0\x43\xcf\x63\xd4\x35\xff\x37\xbc\x53\x5b\x99\x58\x9e\xf1\xba\xc1\x94\x69\x58\xb3\x67\x9a\x94\xb2\x68\xc3\xdf\x76\xee\x2b\x46\x95\x20\x0b\x79\x4d\xcc\x50\xd4\x04\xbb\x95\x57\x5e\xce\xd5\x1c\xea\xc1\x48\x7a\x3b\x08\x3c\x7d\xc9\x96\x17\xa9\x3d\x02\xe3\xe7\x74\x88\x05\x3b\x92\x8a\xb7\x49\x04\xef\x62\x2e\xf8\x4f\x01\x87\x62\xfd\x48\x05\x01\x6a\x65\x2a\x84\xba\x5c\x09\xc1\x8a\x8d\x31\x78\xe7\x13\xc8\x63\xb6\x16\x5f\x27\x17\x35\xd1\x0b\xd9\x56\x60\xe4\x6e\xd4\x56\x27\x84\xfc\xb4\x60\xc2\x1d\xcb\xee\xe8\xcb\x91\xaa\x7d\xd3\xe1\xb9\x7e\xfc\x59\xb9\xab\x3b\xc1\x1b\x8e\x9b\x3c\x95\x98\xfe\xa0\xea\x5b\x42\x8a\x45\x32\x77\x44\xa6\xac\xa0\x76\x86\x56\x4f\x3e\x89\x07\x52\x9e\x22\x75\x6c\x7f\x55\xf3\x72\xec\x8f\xda\x9d\xc1\x93\xb0\xd7\x26\xee\xd8\xf1\x7d\xb6\xa6\x40\x3e\xd8\x3e\xfb\x44\xa3\xa6\x0f\x1e\x5d\xb7\x95\xe1\x4d\x85\x4d\x2f\x00\xd3\x29\x4b\x76\x47\xcf\x52\x72\x58\x51\x40\xc9\xd9\xfb\xd3\x1f\x0f\x2f\x4e\xc8\x77\x27\x7f\xc3\x8f\x47\x71\xde\x2c\xf5\x96\x8f\x53\xeb\x32\x50\x72\xc9\x96\xd9\x66\xb7\x33\xbf\x70\xa6\x60\xcf\x1e\x9d\xbc\xbf\x38\x7d\x7d\x7a\x64\xdf\x0a\x3f\x1e\xad\xa6\x02\xa3\x21\x95\x81\x88\x75\x29\x1e\x10\x88\xbc\x79\x06\x72\x05\x31\xc0\x97\x08\xc3\x5f\xb3\x92\x5b\x45\x63\xb8\xb9\x64\xaf\x1f\x74\xdf\x5b\xdb\x6d\x4c\x02\xed\x8a\x41\x94\x9e\xc9\xf2\x99\x5e\xb3\x93\xd0\x9e\xf0\xdc\x98\x43\x8e\x82\xb5\xe4\xe5\x21\x35\xd6\x8a\x54\x9c\x5d\xa1\x5b\x31\xc8\xd2\x4d\x0e\x64\x9c\xbe\x60\x64\xe5\xc9\x5e\xfe\x6f\x97\x1a\x54\xa3\xdf\xb6\xef\x2a\xd9\x68\x3a\xf6\xb4\xfc\x1c\x33\x12\x40\x11\xab\xe5\xea\xd9\xb5\x76\xe2\x5c\x53\xed\x6d\x7c\xe7\x05\x85\xcd\x32\x94\x86\x8c\xf2\xdf\x9d\xfd\xbb\x2d\xf2\x81\xbb\x9e\x94\xa9\x27\x65\x6a\xc7\x95\x29\x67\x8d\xed\xe2\x66\xb2\x87\x2b\x14\x6b\xca\x99\x25\x13\xf0\xa2\x7a\xd1\x04\x1f\x2b\x0b\x2d\xe9\x1b\x59\x66\xd9\x4f\x88\x37\x1f\x00\x72\x19\xd9\x7b\x7f\x7e\xf8\xf5\x8b\xdf\x7f\xb5\x37\x82\x7f\x7e\xf3\xe2\x3f\x7e\x67\xff\x79\x72\x74\x7c\x7e\x78\xf6\xd5\x6f\xa3\x3f\xbe\xfe\xc3\x37\x7b\x39\x60\x89\xdc\xe3\x7e\xfb\xd5\x4b\x07\xd9\xbb\x77\x72\xfc\xd5\x6f\x7f\xfb\xf2\x3f\xb2\xb5\xb8\xc9\xc2\x3e\x35\xfd\x70\xf2\xa1\xe1\xd8\x7a\xff\x9c\x15\x52\x94\x3b\x89\x48\xb6\x89\x4e\xef\x67\xaf\xe9\x07\x5e\xb7\x35\xa9\xf8\x8c\x41\xc8\x09\x92\xc3\x8d\x71\x61\xb7\x3c\x62\x20\x92\x43\x59\x58\x34\x84\x80\x64\x83\xc9\x46\xdc\xf5\x7c\x21\x57\x4c\x4d\xa9\xe1\x75\x87\xed\xb5\x31\xc4\xa5\x87\x3b\xd0\xec\xd5\xc5\xab\x83\x1f\xb2\x6b\xa4\x9a\xe5\x4d\x4f\x67\x44\xe2\x72\x8c\xc8\x65\x3b\x65\x63\xda\x70\x0c\xba\xa3\x14\xd0\xcc\xb8\xa0\xf8\x1f\x7e\xf7\xcd\x8b\x17\xfb\x5f\x7d\x43\x16\xb2\x55\xfa\x60\xb2\x72\x7b\x06\x5a\x5c\x54\x02\x54\x3a\x27\x1e\xf4\x42\x2a\x03\x75\xbf\x54\x90\xaf\x7f\xf7\xe2\x05\xd9\x7f\x09\x04\x1c\xb8\xd8\x90\x67\x2f\x28\x4f\xa7\xd3\x2c\x3a\x2e\xae\x34\xd7\xe4\xf7\x7f\xf8\xdd\x57\xdf\xd8\x31\xff\xe3\x25\x29\xe9\x32\x93\x3a\x7f\x71\x93\x27\xd4\x6d\x19\x6b\x61\x30\x38\x28\x41\x53\x5c\xf1\xcf\xbb\xda\xfa\x1c\xc7\x78\xd8\x92\x5f\xba\x69\xfe\x12\xe7\xf9\xcd\x86\xed\x8c\x40\x03\x42\xae\xaf\x48\x06\x42\xb4\x13\x19\xbd\xb5\x45\x9f\xbb\x36\x8a\x72\x84\xf2\x63\x62\x26\x55\x81\xd1\xb1\x3e\xef\xe5\x30\x9f\x7f\xe9\x15\xfa\xff\xd2\x0f\x95\x09\x66\x37\x04\x2e\xc7\x5a\xfb\x44\x28\xe4\xc5\x99\xcc\xb1\x28\x52\xcc\xfd\xf4\xfa\xcd\x96\xeb\x50\xca\x95\x8e\x97\xb3\xc0\xe0\xde\xa0\x71\x9d\x0c\x7f\xa6\x83\x14\x2d\xc9\xd1\xf9\xfb\x0e\xde\x95\x96\xa5\x62\x5a\x7b\x53\x2c\x20\xdb\xee\x8c\x0a\xa0\x59\xa1\x98\xc9\x98\x4b\x86\x0f\xbc\xa1\xac\xdf\x7d\xf9\x54\xd1\xff\x29\xd7\xe7\x8f\xea\x7a\x8e\xec\xf0\x04\xe9\x4a\x1e\x3f\xa4\x2b\xae\xe5\x13\x9e\xeb\x13\x9e\xeb\x13\x9e\xeb\xe0\x27\xed\x28\xf2\xc6\x13\x9e\xab\xbf\x1e\x43\x05\xfd\x13\x9e\xeb\x27\x5c\x4f\x95\xf4\xb7\x5e\x4f\x95\xf4\xbd\xeb\xdf\xbc\x92\xfe\x09\xcf\x35\x71\x90\x27\x3c\xd7\xdb\xae\x27\x3c\xd7\x27\x3c\xd7\x27\x3c\xd7\x27\x3c\xd7\x04\x9a\x36\xe1\xb9\x22\xf3\x6f\x42\x75\x75\xfe\xa6\x0e\xd2\xf5\xdf\x10\xd1\x55\x5b\xf6\x2b\xd8\x61\x51\xc8\x56\x98\x0b\x79\xc9\x06\xe2\xdd\xad\x78\x7f\xd7\x9e\x6e\xc5\xd0\x4d\xde\xe0\xf5\x9b\x77\xd2\x35\x9c\x2f\x75\x7e\xb0\x61\x9f\xcf\xa4\xa7\x6d\xc9\x99\xc8\x81\x10\x90\xff\x70\xf4\xb4\x79\x0d\xd1\x6a\xdc\xa2\x64\x65\xf7\x85\x3b\x39\x8d\x65\x9a\x09\x39\x24\x8a\x15\xbc\xe1\xae\x51\x33\xc5\xcf\x73\x64\x1d\x58\xf9\xc0\x21\xfb\x6a\xb6\xb4\x52\x83\x55\xb3\x70\x54\xb9\xcf\x39\x53\x91\x8f\xd4\x69\x79\x2b\x84\xe6\x70\x7e\xd9\x57\x42\x9b\x07\x2c\x9c\x6b\xae\x99\xcf\x12\x73\x01\xed\x68\x46\x2e\x62\x1a\x62\x70\x92\x3c\xc4\x44\xaf\xee\x56\x22\x63\xa0\x34\xe3\xb9\xc5\x1e\x43\x6a\xcb\x1a\x91\x9d\x61\x04\x89\x1e\xac\x24\x65\xab\x7c\x67\x59\xab\x1b\xf1\xd2\xea\x68\x1e\x46\x14\xc5\x68\x8e\x6d\x87\x92\x38\xec\x2a\xdd\x71\x14\xc2\x05\xd0\x62\xc1\x74\x44\x2f\x7a\x23\x2e\x5d\x26\x4b\x96\x02\x76\x7b\x35\x55\x3b\xe7\x02\x5d\x1a\x30\xaa\xd7\x60\xbb\x62\x73\xf7\xd2\xab\x24\x5f\x44\xe4\xd8\x9f\xe7\x48\x1c\x00\x63\x6a\x63\xc5\x3b\xce\x0c\x9f\xc5\x7f\x68\x22\xab\xd2\x07\xd7\xff\xf0\x82\x34\x4c\x15\x28\x96\xb2\x04\xf0\x34\xd6\xd4\x1b\x49\x2a\x6b\x31\x5b\x55\xe6\xe6\xe1\x43\x6c\xff\x38\x12\x00\x98\xff\x90\x29\x43\x33\x60\x6d\x1a\x52\x31\xaa\x0d\x79\xf9\x82\xd4\x5c\xb4\x26\x5f\xcf\xe0\x7b\x48\x28\xf8\xdd\x37\x03\x9f\x76\x0f\x1d\x88\xb3\x48\x92\xd8\xab\x02\xff\x0e\xae\x15\x17\x51\xac\x61\xb3\x34\x92\x0b\xb3\xea\x68\x89\x12\xdd\x73\x9d\x56\x10\xc9\xdc\x89\xf3\x20\xb3\x8b\xe1\xd7\x56\x4e\x97\x69\x10\x3c\x39\x16\xdd\x0d\x1f\x83\xd8\x53\xf2\x9f\xee\x43\x5c\x62\x89\x6a\xc8\xc2\x1a\xbd\xe0\x97\xd5\x0b\xaa\x10\x93\x06\x8a\x38\x7c\x36\x51\xda\xea\x1c\xdb\x81\x01\x20\xe2\x55\x18\x97\x6b\x52\x86\x8f\x83\x6b\x96\x8b\xb1\x51\x8c\x05\x92\xc1\xd6\x87\x08\xb2\xcf\x42\x1a\x84\x56\x38\x50\xc5\x1f\xa6\xd8\x8f\x89\x62\x73\xae\x8d\x4a\x0b\xfb\x8d\xd3\x0f\xcc\xa1\x56\xc0\x5c\xc9\x36\xb9\xa1\x73\x2e\xb1\x05\x44\x78\x17\xaf\x4f\xf4\x28\x0a\xa6\xf5\x90\xa2\x19\x77\xd4\x39\x1e\x83\x31\x12\x9f\x35\x58\xec\x28\x46\xcb\x77\xa2\x4a\x8e\x99\xe6\x9a\x68\x4f\x07\xfa\xd3\x40\xab\x82\x2c\x47\xd8\xa0\x7e\xfb\xba\x05\x40\x57\x1d\xc8\x10\x56\xa2\xa5\x63\x7f\x3e\x06\x28\xd4\x28\x52\x98\x2e\xd5\x63\x5d\x64\x46\x2b\x9d\x1c\x67\x1c\xee\x6b\xf1\xdb\x77\xfb\x0b\x84\x74\xf4\x05\xba\xab\xee\x94\xaa\xab\xe6\xf4\x8b\xf5\xde\xff\xc0\xa9\xc1\xe9\xbe\xc2\xce\x70\xa5\x51\x26\x07\xd5\x70\x72\xbc\xb2\x82\x19\x13\xc2\xf6\x03\x0d\x31\xc0\x8c\x2f\x86\x73\x9c\x52\xc8\xba\xa6\xfa\x20\x99\x18\xcc\x2f\xa2\x00\x24\xa7\x5d\x7d\xbb\x30\x8a\x56\xdd\x0c\x45\x00\xa6\xdb\xda\xd6\x86\x09\x2a\x92\x53\x26\x73\xf1\x0c\x52\x41\xe4\x75\x28\x47\x9d\xf3\x2b\x26\x56\xf7\xb3\x73\x47\x7c\x4b\x8b\x4b\x36\x00\xbb\xe9\x07\xed\xd7\xb8\x5c\x0a\xea\xb0\x6c\xec\x31\x74\xc5\xad\x38\x60\xe5\xca\xb8\x7a\xd4\x65\xb8\x6b\x66\x3c\xd8\x10\x1a\x76\xdb\x5a\xb8\x56\xb3\x64\xd8\xd8\x5c\xcb\x66\x69\xb8\xaf\x33\x4f\x63\x46\x87\xe2\x57\x05\xf3\x76\xb1\x1d\x6f\x5b\xf3\x8d\xef\x97\x65\xc6\x3d\x37\x47\x32\xca\x55\x06\xbb\x74\x54\x84\x9e\xac\xec\x59\xb5\xf4\xa0\xed\xab\x7b\x61\xba\x84\x68\xe0\xb0\xf3\x26\x71\x3e\xd4\x34\x49\xc9\xcc\xc1\x76\x6a\x5a\xf6\x0f\x96\xf7\xb4\x94\x9a\x7c\x0b\xd5\xfb\xc7\x0c\xdc\x28\x0f\x6d\x34\xbc\xff\xf6\xf8\x23\x06\x83\xa5\xfa\xf3\x32\x16\x78\x4d\xe7\x69\xa6\xf5\x98\xd4\x52\x70\x23\x55\xca\x99\x37\xd4\x56\x98\xe9\x21\xe5\xa5\xb9\xe4\x26\x52\xe1\x7d\x1b\x1d\xa4\x67\xa8\x2f\x8d\xd2\xa2\x80\x75\x97\xb2\x25\xd7\x14\x3c\x83\xc8\xdd\xe9\x1a\xeb\x05\x6f\x5e\x91\x13\xa1\x5b\x15\x21\x94\xad\x92\x60\x0f\x3a\xcf\x9c\xfe\xb8\x83\x8d\x64\x67\x1f\xb1\x70\x1d\x08\x69\x32\x1d\x27\x1f\x68\xdd\x54\x4c\xbf\x22\x7b\xec\x83\xf9\x66\x6f\x44\xf6\x3e\xcc\xb4\xfd\x8f\x30\x33\xbd\x37\x21\xa7\x75\x53\xf1\x82\x9b\x6a\x49\xb8\x98\x31\xa5\x42\xec\x1d\x7f\xb0\x92\xfa\x9f\x4e\xc9\x1d\x63\xde\xda\x48\x45\xe7\xec\xb9\xd3\x0d\xbe\x50\xd3\x54\x4d\x64\xf0\x99\x04\x9b\x70\xdb\xcc\x0c\x44\x04\x27\x3f\x48\x63\xfc\x68\xc8\xf1\xb4\x71\x55\x98\x63\x99\xc9\xe5\x1f\x60\x5d\xdc\x0a\x3c\x57\xd3\xf2\xf9\xfb\x93\xc3\xe3\x37\x27\x93\xba\xfc\x62\x21\xaf\xc7\x46\x8e\x5b\xcd\xc6\xc9\x25\xa5\x83\x57\xe6\x92\x2d\x01\x07\x7d\xcb\x6b\xe3\xc8\xe8\x79\x51\x8d\x84\x64\x01\xf8\xdc\x1a\x20\xef\xbf\x3d\xfe\x41\x0f\x89\x74\x45\x4e\x8a\xe7\xcc\x14\xcf\x0b\xd6\x2c\x9e\xbb\x91\xff\x5d\xd7\x3f\x4a\x31\x59\x9b\x93\xa4\x07\xfa\x33\x73\xdb\x1c\xe5\xe9\x40\xed\xb5\x90\x55\x85\xb5\xd5\xf6\xd4\x3a\x62\xcd\x22\xdc\xf0\xa8\x57\x7e\x48\x99\xca\xc0\xe2\x94\xdd\x8b\x0f\x10\x40\xeb\x97\xc9\x29\x4e\xb9\x58\xcf\xd2\xd0\x3f\x67\xe0\x93\x61\xc7\x4c\x24\xbc\xd4\x34\xaf\x12\xf1\x38\xc5\x55\xaa\x3a\xf3\x28\xfc\xc3\xef\xfd\x97\x9a\x19\xd0\x62\xb9\x20\xd8\x47\xf9\x8d\xd5\xaa\x77\xc1\x11\xbc\x13\xac\x34\xc4\x0f\x8d\x65\xd1\x03\xba\xa6\xe5\xe2\x84\x40\x08\x58\xdd\x51\x86\x32\x6d\xcd\x82\x09\xe3\xa1\x9f\x5c\x1d\x77\xac\x0b\x91\xd3\x19\xfa\x03\xcb\x01\x69\x94\xf2\x8a\x29\xc5\x4b\xa6\xc9\x60\x65\x28\x8e\x03\xf1\xea\x51\xb3\xd6\xa0\x0c\xc6\x1c\x09\x83\x43\x73\xe8\x73\x26\x3a\xe4\xcf\x9b\xdf\x8d\x8c\xf9\x9d\xc8\x95\xbf\x8f\x2c\xf9\x5d\xcc\x8f\xcf\x94\x61\x38\x3c\x27\x3e\x7f\x96\xf7\xce\x04\x39\x7a\x6a\x27\x7c\x92\x4d\xed\xa4\x65\xcd\x07\x80\xf0\xed\x80\x48\xcf\xa3\x78\xc2\x3c\xdc\xf9\x21\xba\xa0\x15\x3b\x7d\xb7\xad\x70\x84\x1b\xbe\x1f\x92\x38\x77\x1f\x36\x4c\x79\x74\x57\x1f\x1d\x33\x86\x16\x0b\x17\x20\xf0\x79\x09\x52\x00\xf4\x0e\xee\x1b\x22\x64\x99\x9a\x6e\x18\xc7\x24\x3c\x0d\xb7\xc7\x25\x3c\xf9\x9f\x57\x6c\x62\x4e\x0d\xbb\x4e\xb4\xdf\xc7\x9d\xda\x98\xfa\x7b\x70\x8c\x3f\xc5\x36\x36\x06\x16\x86\xc7\x2f\x42\xf9\xfd\xda\xb3\xef\x3f\x62\x31\xb9\x21\x56\x91\xe3\x18\x80\x27\x6e\x25\x9a\x8b\x57\x90\xc3\x1f\x66\x69\xca\x88\xdb\x75\x59\xf8\xcf\x3d\xcb\x73\x11\x2c\xa4\x43\x1f\xf3\xea\xb2\x17\x70\x87\x67\xa7\xe4\x2f\x78\xfb\xd6\x66\xaf\x51\xd2\xa0\x1b\xf4\x58\xd6\x94\x27\xd7\xa0\xf5\xe6\x60\xf5\xa1\x7e\x32\x62\x4b\xd6\x4f\xc2\x59\xb8\x97\xb8\x9b\x3d\x06\x6d\x21\xc5\x8c\xcf\x5b\xc5\x4a\xe2\x02\x57\x5b\x9b\xa5\x9d\xf3\x10\xad\xf9\x6c\xc8\xbe\xfd\xee\x39\xf4\xb0\x3b\x98\x74\xde\xa2\x15\x57\x52\xba\x6f\xf7\x1e\x5d\x50\x9f\xa5\xe3\x26\xca\x88\xf1\x28\x62\x9d\xb3\xc6\x33\x3f\xa8\xe3\xa1\x92\x6c\xc0\xa8\x42\x73\x28\x2f\x88\x0a\x3c\x5d\x07\x31\xae\x3b\xa0\x30\xf4\x0a\x8d\xc8\xf7\x72\xce\x85\x3f\x5e\xa4\x2b\xf0\x99\xd1\x74\xf7\xcc\x93\x7f\x64\xed\x7a\xf2\x8f\x3c\xf9\x47\x9e\xfc\x23\x37\x5f\x5a\x57\x27\x82\x4e\xab\xf4\x6a\xee\x7e\xc1\x7b\x78\x1c\x79\x5d\xd1\x39\x61\xf0\xc7\xf3\x92\x6b\xfb\x5f\x72\x7e\xfe\x3d\x64\x45\xb7\xc2\xbb\xce\x81\x37\x9d\xf6\x35\xf2\x33\x84\x67\xe9\xf6\x8e\x31\x54\x73\xde\x0c\x00\x35\xcb\x76\x90\x75\xa4\x84\x2e\xb4\xba\x07\xe2\xe0\xee\x80\xf3\x8c\x06\xa0\x48\xac\x83\x9e\x32\x2b\xad\x8a\xcb\xb3\x28\x31\x59\x2a\xfb\x99\x88\x3e\xca\x62\x7c\x64\x7a\x66\x4e\x33\x64\x85\xa4\x21\xac\x70\x96\x2b\x78\x1d\x3d\xcf\x6b\xe3\x5e\x09\x39\x77\x0b\x09\xdf\x51\xad\x65\xc1\xbb\x52\x02\xd7\x69\xc5\xab\xe8\x25\xa8\xe8\x5b\x9b\x64\xb4\x83\xf3\x4c\x08\x9a\xdf\x1b\x2c\x13\xcf\xd8\xee\x0e\xaa\x63\x4b\x84\x0b\x3f\x6f\x5b\x9b\x04\xdc\x6a\x43\x50\xb4\x73\x09\x89\x8e\x92\xd5\x79\x0c\x02\x61\x35\x15\xdc\xa3\xd4\x3a\xde\x4b\xf6\x38\xe1\x05\x59\xa0\x5c\x6f\xe0\x5a\xae\x83\x48\x82\x4e\xec\x5b\x59\xad\x74\x50\xef\x2c\x0e\x5e\xb4\x37\xfa\xb5\x4c\xf8\x99\x4b\x2a\x07\x59\xdd\xc8\xa6\xad\xb0\x92\x3e\x4c\x5a\xda\x6c\x0d\xcc\x46\x45\xda\x1e\xde\x67\x3b\xd4\xf2\x88\xd0\x1f\xb7\xbd\x21\x63\x20\xca\xbb\x23\x8e\xfa\x3d\x8a\x8d\x96\xa6\x4b\xff\xb8\x0c\x1e\xcf\xed\x03\x8e\xe6\x02\x18\x4d\xf7\x2e\xf7\x80\x49\x7b\x1e\x9c\x17\xbf\xfb\xe6\x9b\x01\xca\x10\x57\xac\x30\x12\x8a\x01\x1d\xd8\x73\xc8\x98\xa5\x8a\x81\xed\x8f\x68\xa0\xde\xbf\x8c\xc5\x60\x66\x50\x5e\xc7\xf6\x10\x49\xb7\x82\x40\x9a\x03\x03\x63\x38\xc2\xe8\xa0\x04\xcd\x6c\x59\xf3\xd0\xbd\xe0\x74\xcb\xdd\x0b\xb6\xda\xb3\x60\x9b\x9d\x0a\xb6\xd7\x9f\x60\x8b\x5d\x09\xb6\xdd\x8b\x60\x2b\x1d\x08\xb6\x9e\xd0\xfd\xf0\x3d\x06\xb2\x40\x05\xe6\x80\x09\x1c\xda\x45\x60\x20\xc4\x60\x1e\x78\xc1\xc1\x7d\x02\x1e\xa2\x3b\x40\x26\x1f\xe7\xf0\x4e\x00\x79\x61\xa0\xb6\x8d\xfa\xbf\x43\xaa\x37\x5e\xbb\x89\xf0\xbf\x15\x5c\xff\x6d\xa3\xf9\x6f\x11\xc3\x3f\x1f\x96\x5c\x2e\xbc\xfe\xe1\x18\x72\x79\x05\xc7\x96\x10\xf9\xef\x11\x87\xff\x41\xd0\xf7\xef\x1b\x73\x7f\x37\x8b\xdb\x86\x62\x78\x0f\x46\xee\xd6\x99\xa0\xbb\x73\xe5\x80\xec\x82\x5b\xbc\xa3\x64\x63\x78\xc1\x37\x66\xf4\x8d\xb6\x9f\x61\x89\x8f\x6e\x68\x01\xfb\xba\xcd\x5c\x81\xf5\x20\x3e\x58\x32\xd8\x57\x8e\x94\xc8\x24\x85\x37\x8b\xbb\x1c\x09\x78\x77\xbe\x92\x11\x1d\x3e\x7e\xf8\x44\xe8\x30\xf4\x47\x52\xa1\xfd\xd4\xed\x58\x32\xf4\x53\x56\xf0\xa7\x5c\xbb\x98\x15\xfc\x50\x08\x26\x9f\x5f\x62\x66\xf9\x94\x98\x19\x5f\x3b\x98\x98\xe9\x99\x56\xc7\xa7\x31\x1e\xbb\x60\x5a\xca\xa9\x55\x52\x3d\x98\x5f\x27\x83\x0f\xcf\x4e\x93\x47\x2f\x14\x03\xa0\x7e\x5a\xe9\xc9\x26\x9b\xd3\xa7\x1f\x39\x0b\x37\x74\xad\x36\x86\xd5\x4d\xa2\xf0\x26\x4f\x79\x99\x9b\xae\xa7\xbc\xcc\xa7\xbc\xcc\xa7\xbc\xcc\x9b\xaf\x5d\xce\x2e\x5a\xb4\x35\x15\x63\x7b\x9e\x42\x52\x67\xaf\x9c\x64\x45\x4d\x9f\x10\x77\x02\x0e\x12\x5a\x88\xae\x0b\x98\xcb\xad\xe0\xbf\xb6\xac\x8b\x74\x04\x93\x6d\x07\xf2\xc0\x80\x8e\xdd\x59\x2e\xb4\x64\x57\xce\xd9\x42\xae\xe1\x03\xba\xb9\x0c\x4b\xe7\x8f\xc6\x61\x4b\x06\x83\xf7\x02\x93\x66\xc1\xd0\xd8\x3e\x5b\x31\xb6\x7b\x3e\x5d\x27\xc8\x41\x8e\x0e\x8b\x0e\xc7\x96\xa0\x65\x51\xfb\xee\xae\x69\xc9\x94\x91\x9a\x2b\x25\x95\xcb\x54\x8b\x5f\x1f\x0b\x9f\xf8\x7c\x61\x98\x42\x0f\x29\x96\x67\xa4\x8b\xcf\x73\x66\xdc\x2e\x80\x5d\x64\x24\xa1\x02\xb1\x57\xed\xbf\x3d\xc8\x07\x4c\x8d\xd7\x40\xa6\x6c\x41\xaf\xb8\x6c\x07\x80\xaa\x9d\xa3\x3e\xb5\xe7\x1e\x09\xb6\xc2\x52\xb6\x21\x17\xa5\xd5\x76\x32\xc2\x2a\xe8\x75\x3e\x48\x1e\xfa\x6d\xf7\x50\x70\x9b\x97\xd2\x07\xa3\xc7\xec\x03\xd7\x66\x7d\xce\x3d\x0b\xb8\xdc\xa7\xad\x6c\xe6\x2b\xdd\xd8\xd3\xf7\xc7\x64\x98\xde\x1c\x5b\xb8\x47\x44\xdf\x05\x72\x75\x0e\x5f\x7d\xcc\x01\xe2\xfa\xfd\x20\x64\x39\xa9\x69\xb1\xe0\x22\x03\x44\xed\x8f\x3d\xc2\x7a\x9e\x90\x09\x39\xac\xaa\xae\x8e\x49\x87\xd2\x41\xef\x19\xe9\xbf\x94\x5d\xa4\x24\x72\x2c\xe7\x2a\x56\x42\x9e\x15\xaa\x58\x50\x9f\xa8\xf9\xc4\x0d\x30\xb9\xaa\xaf\xa9\x62\x93\x42\xd6\xe4\xe8\xfc\x94\x94\x8a\x27\x76\xe0\xda\x72\xfd\x39\x2e\xf1\x59\x5a\xe8\xfa\x73\xf3\xf7\x3c\xf9\x7a\x76\xca\xd7\x13\x4a\x18\x2a\x5e\x2c\x4f\x8f\xf3\x96\x45\xe0\x33\xbd\xa2\xa9\x43\x49\x84\xfd\x9c\x7c\x4b\x35\x2b\xc9\x1b\x2a\xe8\x1c\x03\x56\xfb\xe7\x67\xdf\xbe\x39\xb0\x0c\x0f\xc1\xb8\xd3\xe3\x8d\x75\x13\xe7\xf1\xc3\xdf\x6e\x0b\xf1\x9c\xac\x4e\x5d\x36\xdd\x7e\xed\xa9\x89\xd3\xb7\x35\x30\x78\x12\xd4\xd6\xb3\x01\x41\xe0\x0d\x00\xf9\x67\xab\xfd\xbf\xb0\x50\xc1\x37\x6b\xd4\xab\x47\xea\x55\x5d\x5e\x3e\xf4\x04\xac\x47\x23\xad\xfd\x78\xc9\x96\x77\x96\xde\x63\x58\xc1\x81\x83\xe3\x7b\xd4\xf4\xe6\x2e\x41\x51\xa6\xcc\x6d\x14\x7e\x5a\xd6\xdc\x27\x64\xc6\xf5\xd6\xf5\xdc\x28\x6a\xd8\x7c\x79\xcc\x9a\x4a\x2e\x2d\x17\x9f\x45\x89\x3b\x78\xeb\x14\x55\x69\x35\xa5\x05\x51\x6d\x05\xbd\x10\xca\xb5\x0e\x89\x82\xb1\xb2\x13\xf3\x5c\x68\x43\xab\xca\x2e\x20\x3c\xff\x56\x8a\x3e\x59\x39\xf8\x54\x35\x60\x8c\x74\x7e\xf4\xae\x7e\x87\xe0\xb7\x1f\x5b\xed\x4f\x57\x04\x60\xf8\x8f\xf3\xdb\x5d\x32\x21\x3f\x39\xe7\x31\x45\x61\x40\x89\xf6\xbe\xad\xec\x01\x5d\x95\xfd\x8e\xca\x68\x72\x38\x56\xc0\x6e\x0d\x20\xff\xec\x4b\x3a\x17\xa0\x64\xba\x97\x0a\x11\xfd\xfc\x93\xc6\xc7\xa6\xcd\xd7\x0b\xd4\x40\xed\x83\x09\x6d\x9a\x8a\x23\xca\x80\x54\x2e\x09\x37\x8a\x27\xaf\xdf\xf6\x29\xa2\xf6\x8e\x6a\xe8\xdd\xd4\xce\x31\xb9\x62\x6a\xfa\x29\xfe\xb7\xbb\x6a\x94\xb4\xe1\x90\xce\xf4\xc9\x22\x2c\x55\x69\x3c\x3c\x3b\xc5\x81\x36\x45\xf8\xfd\x97\xc8\x10\x6e\xa9\x7d\x42\x0f\x96\xa3\xb9\x30\x40\x68\xe6\x74\x78\x76\x8a\x3d\xd2\x5c\x3f\xa7\x2e\x34\x60\x2d\x76\x8a\xc5\x97\x5d\x1b\x5a\x3a\xb7\x4f\x34\x44\x0a\x76\x97\x86\xa6\x96\x02\x26\xda\x9a\x61\xaf\xa8\x40\x0c\xe1\x02\xc6\x09\x54\x74\x11\x08\xf4\x2a\x4f\xc8\xde\x5e\x6c\x13\x22\x3c\x8b\x8a\xe8\x06\x51\xb7\xf7\x65\xef\x2e\x2b\xd7\xba\x17\xfb\xd4\x13\xfe\xee\x59\xcf\x77\xcc\x72\x4e\x38\x31\x33\x64\xee\x08\x29\xde\xbb\xf9\xfe\xe1\xfd\xf7\xf7\xce\xa0\x6f\xfb\xc3\xb9\x8e\x3d\x0c\xba\x8d\x36\x54\x19\x4e\x2b\xd2\xaa\xca\xa7\x17\x22\x12\x89\xab\x08\x5c\xd0\xab\xa8\x1b\xd2\x84\x90\x2f\x91\x2b\x1d\x33\xa0\x28\x03\xa7\xa8\xeb\x0e\x36\x6b\xab\x6a\x44\x66\x5c\x50\x7b\x90\xb1\x86\x44\x49\x5e\x9f\x4c\xf1\x39\x17\x05\xb3\xd3\x34\xf6\x7c\x49\x80\x72\xef\x36\x0a\x32\x0d\x72\x34\xe3\x90\x0b\x92\x62\xe5\x5b\x01\x7e\xe1\x99\x54\xe4\xa8\x6a\xb5\x61\xea\xbd\xb4\xc7\x70\x57\x6e\x42\x66\x4a\xd6\x84\xc6\x5f\x7f\xcb\x45\x79\xa7\x4a\xa8\xf7\x70\xb4\x17\x54\x10\xc6\x21\x31\xca\x0e\x0d\xf9\xd0\x96\xd9\xbb\x4d\xb5\xaf\xdb\x62\x61\xa7\x68\xaf\x91\xa5\xde\xb3\xd2\x79\x0f\xc3\x8d\x7a\xef\xc0\xfe\xb5\xfa\xae\x58\xbd\x11\xfd\xee\x39\x6d\xf8\xde\xc1\x88\xc0\x84\x43\x72\x9e\xfc\xf4\x6c\xbc\xcf\x74\x1f\xf9\x09\x03\x57\x5f\xd2\x2e\x7a\x1f\x3f\x01\x36\x86\xe8\x52\xdf\xae\x17\xdc\x60\xbd\x8e\xdd\x29\x18\x03\x08\xbd\x66\x56\x0f\x52\x42\x0e\x7d\x10\xcd\x6e\xad\x9a\x51\x9f\xaf\xcb\xae\x98\x5a\x9a\x85\x6b\x60\xe1\xa5\xe8\xd3\xca\xc1\xce\x18\xb4\x6a\x4e\x94\xf9\x15\xea\xb6\x1b\xc8\x84\xb5\x15\x7a\xf6\xe5\xb3\xd5\x23\xa9\x3b\x83\xff\xbd\xd7\x03\x94\xb0\xa4\xb5\xf8\xd1\xfe\xb2\xbf\x0e\xf8\x11\x1e\x26\x41\x1c\x7e\xff\xbd\x4b\x4f\xc1\x09\xff\x8e\x0b\x88\x7a\x83\x3e\xe4\xb1\x00\xdc\xa2\x6d\x5c\x29\xa0\xf0\xdf\x76\x95\xd6\x8d\xae\x4f\x35\x94\x6e\xa1\xd1\xdb\x99\x37\x3d\xea\xd6\x07\x38\x63\xf5\x8d\x2c\x37\x6f\xe2\x1e\x93\x9c\x46\x37\x87\x5c\xe2\xce\xcd\xe9\x9e\xe5\x2c\xa7\x65\xb3\xd1\x0a\xbd\x7d\x4d\x6f\x59\xbf\x9b\x28\xe9\xfc\x74\x20\xf6\xa3\x6f\x2e\xba\xc4\x08\x32\xab\xe8\xbc\xe3\x45\x10\xe2\xa8\xd9\x1f\x9d\xff\xe8\x5f\x41\x93\x1b\xa0\x87\x3f\x6a\x3a\x7d\xcc\x58\x1a\x77\xb3\x74\xe3\x1d\x37\x86\x32\x3e\x6e\x31\x85\x87\xdf\xcc\x4d\x9f\x92\xf7\x65\x6e\x75\xd5\xdf\x34\xff\xde\xb5\x4e\x23\x4e\xf0\x9d\xe3\xbc\x2b\x04\xaa\x4d\x40\x87\x3b\xff\xb1\xc7\x26\x1f\xa1\xf7\x06\xa6\xbd\x64\xcb\x6b\xa9\xca\x8f\x33\xec\x61\x10\x66\xfe\x27\xde\x98\xf7\xc9\x60\xe8\x8e\x97\x1b\x03\x3b\xc9\xac\x7a\x2b\xf1\x15\x9d\xb2\xea\xe3\xa4\xdf\x60\x18\xbc\xa1\x8d\x7d\x9d\xae\x64\x13\x3d\x52\x2e\xcb\x0c\xad\x53\xac\xf3\xf1\x15\x69\x52\xcd\xa9\xe0\xff\xc4\x3a\xd7\xc2\x4a\x0a\xa9\xf8\x3f\x37\xb3\xda\x3e\xc6\xf4\xd1\xc7\x55\xb1\xc2\x1c\x38\xae\xdf\x28\xb2\x3f\xb2\x2d\x68\x59\x72\x54\xc1\xce\x3e\xc2\xc1\xb7\xcf\x17\x17\x97\x77\x59\x69\xb8\x1f\xcb\x6c\xba\xc0\xde\x3d\x2e\xf3\x2d\x62\xe1\xe3\x3b\xf7\xf6\x34\xba\x4f\x38\x9e\x5a\x75\x4b\xa1\xc8\xad\xbf\xaf\x29\xc7\x53\x7b\x73\x1b\xaf\x1b\x66\xd7\x71\x13\x75\xba\xb5\x95\xa5\xf6\xfd\xc2\xd3\x1e\x60\x5f\x0d\x9a\x70\x56\x53\x9e\x3a\x63\x78\x0d\x58\xb2\x9a\x9a\x56\x71\xb3\xf1\xa4\xbe\xfd\x87\x5c\x7c\xd7\x4e\xd9\x8f\x4c\x69\xbb\x1e\x77\xfd\xb9\x80\x8a\xb3\xc3\xb3\xd3\x8d\xd3\x92\xe7\x44\xbe\xd1\x91\x01\x7e\x33\x47\xb9\x55\x17\x49\x2b\x68\x3d\xe5\xf3\x56\xb6\xba\x5a\xc6\x11\x14\x4a\x2e\xb9\x28\x27\x84\x9c\xa2\x5b\x55\x3c\x33\x84\x0a\x29\x96\xb5\xbb\x55\x14\x55\x5b\xb2\xde\x13\x6f\x3a\xca\x24\xa1\x57\x92\x97\x84\xb6\x46\xd6\xd4\xf0\x82\x14\x92\xa9\x02\x40\x54\xe3\xe7\xb7\x9a\x11\xda\x7b\x62\xf7\xdb\xa2\xd5\x46\xd6\xa4\xa6\x4a\x2f\x68\x55\xdd\xc4\x12\x19\xb4\x03\x70\xa7\xdd\xf8\xad\x9d\x95\x1b\xbf\xbc\xba\x65\x1e\x3e\xbe\x1d\x60\xe0\x41\xdb\xc1\x12\x37\xe8\x01\x57\x37\x33\xf5\x27\x3c\xc3\x21\xe0\x6e\xec\xcb\xd1\xe3\xcf\x8b\x05\x23\x4d\x3b\xad\xb8\x06\x13\x1e\x04\xd7\x92\x4c\xd9\x82\xbb\xd2\x9b\x8f\x4b\xac\x1b\x97\xf8\x63\xf3\x7c\x9b\xc8\xf8\xe8\x0c\xdd\x22\xe1\x6f\xfd\xad\x3b\x01\x4f\x6b\x3a\xff\x04\xd5\xfe\x86\xed\xfb\xbd\x15\xfb\x54\x2c\xc3\x79\x0a\xcd\x54\xf5\x88\x48\xe5\x0a\x89\xbd\xed\xa7\xdc\x57\xa1\x45\xb0\x22\xef\xdc\x8c\xba\xba\x68\xb7\x0d\x00\x65\x80\xa9\x99\x54\xb5\x9d\x77\xae\xc8\xac\x15\xe0\x0d\xbf\xc1\x2e\x84\x1c\x3e\x38\x7f\x9c\x33\x93\x56\x5a\x06\x61\x00\xcb\x26\x3c\x61\x84\x6a\x72\xcd\xaa\x0a\xd3\x88\xb0\xf3\x6b\x04\xdb\xdc\x61\x59\x76\xa9\x84\xd3\xcd\xb6\x65\xc9\xe7\x4c\x1b\xb2\x7f\xfe\xd7\xc3\x03\x50\x88\xc0\x59\xb7\x24\x86\xce\x27\x2b\xf9\xe1\x98\x4c\x6a\xd5\xad\xb2\x05\xb5\xac\xa0\x86\x56\x72\x8e\x19\x68\x56\xa4\xd8\xdf\x37\x15\x5d\x42\x19\x57\x43\x15\xd4\x0a\x16\xe8\xb0\x24\xaa\x15\x37\x75\xfe\xbe\xbf\x93\xf2\xe3\x32\xe9\xb6\x9e\xda\xb7\x84\x87\x3f\x2e\x73\x3e\xd2\x27\xf8\x7e\x8f\xe0\xff\x8f\xbd\x6b\xeb\x8d\xdb\xc6\xfe\xef\xfd\x14\xfc\x1b\x05\xc6\x76\x3d\x4e\xfe\x6d\xb3\xc0\xe6\xcd\xb0\x5d\x20\x58\xc7\x09\x6c\xb7\x05\x76\xdb\xa2\xb4\xc4\x99\x21\xac\x21\x55\x52\xf2\x25\x45\xbf\xfb\x82\xe7\x90\x94\x34\x23\x91\xd4\xcc\xd8\x09\x8a\xe5\x4b\x5a\x8f\x78\x27\xcf\xfd\xfc\xa8\x58\xc1\xa8\xee\xad\x9d\x72\x1f\x6c\xf5\x95\x48\xd8\x92\x66\x77\x74\x6e\x76\xde\x12\x33\xe7\x36\x72\x34\xc5\xa7\x83\xd8\x98\x51\x30\x30\x06\x3b\x30\xc7\xca\x1a\x30\xbf\xea\xfd\xf0\xc4\x19\xbc\xaf\xd1\xa6\x60\xb9\xd7\x44\xfb\x26\xfc\xf9\x74\x9a\x40\xce\xb5\x19\x40\xcd\xf5\xc2\x63\x41\xe4\x7c\x86\x09\x13\xe4\xb6\xe6\x45\xee\x1f\x34\xd0\xe0\xfc\x72\x17\x38\xc4\x64\x6e\x2c\x1e\x79\xad\xd9\xac\x2e\x30\xdf\xc6\xd6\xb3\xc4\x40\x30\xec\x7f\x49\xef\x18\xc9\x16\x54\xcc\x1b\x04\x75\xa3\x10\xa2\x83\x33\x97\xc0\xef\x3d\x2a\x42\x8b\x30\xd0\x82\x57\x4f\xfd\x48\x43\xa6\x3b\xfb\xc2\x50\xff\x89\x98\x42\xda\x16\x7f\x24\xd4\x1c\x0c\x69\xfd\x18\x5c\xb5\xb7\x7b\xb8\x22\xcd\xf3\x57\x74\xc9\x44\x4e\xa8\x10\xb2\xb2\x31\x89\x52\x59\x2d\x2e\x50\x11\x2a\xb9\xb7\x8f\x4c\x8d\x5c\x66\xf5\x92\x89\x6a\x58\xef\x9d\x5a\x00\x96\xbc\xce\xd8\xfa\xc6\x98\x99\x36\x7f\x64\xe2\x9e\x2b\x29\x4c\x83\xba\xff\x80\xbc\x03\xf0\xa4\xba\x04\x1d\xd0\x6d\x24\xad\xab\x05\xec\x8b\x24\x39\xab\x98\x5a\x72\xc1\x6c\xd2\xd4\x92\x8a\x8a\x67\x1a\x2d\xb0\x78\x82\xec\xb6\xc3\x21\x07\x0a\x37\xb8\x05\xb8\xa4\x9e\x85\x12\x20\xbf\x6b\xcd\x40\x5e\x79\x26\x05\xd2\x7e\x07\xa1\xbf\xbc\x67\x8a\x94\x8a\xf9\x73\x0b\xee\xf3\x7e\xfd\x34\x97\xd5\x54\xb3\x92\xa2\xb7\xd3\xcb\x8e\xca\xdb\x20\xcd\x05\x43\xe7\x51\x51\x2e\x28\x38\x46\xcd\xa4\x0c\x01\x5e\x3c\x95\x0b\x26\x34\x52\x73\xaa\x18\x29\xf8\x92\x0f\x59\x64\x00\x08\x69\x49\x1f\xf9\xb2\x5e\x92\x82\x89\x39\x82\x35\x7c\xfb\xda\x1c\x60\x45\xb3\x8a\xf5\x3f\x2a\x1c\xa1\x5e\x4b\xfa\x78\x01\x8d\xbd\x25\xdf\xbe\xee\xf9\xbd\x63\x5d\xbc\xa7\x05\xcf\xf1\xc8\x0d\x9d\x6d\x55\x17\xa6\x3b\x56\xcc\x8e\x97\xb4\xca\x16\x4c\xef\x4f\x7e\xfb\xcf\xeb\xe9\x3f\x4f\xa6\xff\xa6\xd3\x4f\xd3\x5f\xbf\xd9\xff\xe5\x97\xe3\xce\x1f\x0e\x0e\xbf\x9e\x1c\x0c\x10\xcf\x25\xd3\xda\x10\xe7\xd5\xad\xf3\x88\x00\x99\x5c\x96\xd2\x90\x13\x39\x23\x3b\xd8\x8b\xe0\xac\x26\xff\x07\xf3\xd2\x65\xc1\xab\xfd\xc9\xe4\x78\x32\x39\x38\x86\x90\x6f\xbd\xff\x78\x44\x1e\x9b\x09\x4f\x7e\x7b\x6d\x66\xf8\xeb\x37\x5f\x4f\x26\x07\x07\x93\xd8\xdc\xec\x40\x3a\x23\xe6\xa2\x7f\xca\x86\xe9\x83\xef\xb4\x60\x34\x37\xf3\xf9\xc4\x94\x5c\x1f\xb6\x62\x65\x41\x07\xdc\x20\x6b\x52\x68\x03\xa8\x6b\x88\x1f\x98\xcb\xa5\x60\xbe\x8d\x63\x72\x8d\x52\x0a\xcc\x0f\xee\xc8\xef\x4b\x56\xd1\x9c\x56\xf4\xf8\x92\x2e\xd9\xef\x5d\xe0\x3d\x59\xe4\xa6\xa1\xd1\x87\x11\x0d\x3c\x32\x2e\x39\x5f\x18\x52\xe7\x3f\x87\xeb\xee\xa4\xc1\xa0\xdf\x65\x4b\xa1\x19\xa6\x7f\xfe\x58\x2a\x16\x0e\x10\xeb\x8c\x75\xb5\x52\xd7\xa3\x51\x74\x67\x62\x65\x20\xa0\xa1\xc7\xb0\x35\xed\xbf\x00\x89\x38\xb9\x3c\x1b\x76\xf2\xc5\xdd\x13\x11\x77\x44\x7a\x24\xc0\x49\x60\xec\x2e\x10\xc0\xfe\xd2\x8d\x50\x71\xf0\x4b\x00\xee\x87\x90\x40\x54\x34\xfc\xc0\x7c\x1c\xe8\x16\xf7\xb9\x01\x08\x6b\x4c\x8d\xc3\x2e\x9c\xa4\x38\xa3\x94\xe8\xa2\x18\x5e\xdb\xd4\x4f\x63\xf0\xa3\xb4\x60\xa3\x28\xa6\xda\x10\x66\x1a\xee\x09\x80\xf5\x38\x7f\xb2\xdf\x86\xd4\xe0\xac\x44\x17\x94\x9b\xea\x88\x81\x46\x43\x4b\xfc\x29\xe8\xa4\x86\xdc\xb1\xa7\x89\xb5\x9f\x9a\x1b\xb4\xe0\x25\x32\x43\x1b\x69\x12\xdb\x7e\x2c\x3f\x19\xd6\xd5\x92\x03\xcd\x5d\x7a\x27\x8e\xc8\xa5\xac\xcc\x3f\xe7\x40\xc6\xe1\x38\x9d\x49\xa6\x2f\x65\x05\x7f\xd9\xc9\x4a\xe1\x00\x77\xb9\x4e\xd6\xb8\x8e\x61\x05\x70\xdd\x5b\x26\x78\xbb\x1e\xf8\x32\x4f\x4b\x64\xe6\x9a\xbc\x13\x46\xee\xc3\x29\x47\xba\xf0\x50\xa3\xda\x76\xe0\x18\xae\x90\x62\xea\x32\x7f\xd7\x7b\xb0\xeb\x28\x55\x67\x19\x37\xee\xcc\x76\x84\x49\x73\xf0\x0b\xd7\x8e\x2f\x79\xe5\x96\x3a\x87\x63\xd4\xdb\xb9\x64\x6a\x0e\x11\x43\x59\x24\xc2\x25\xd5\xcf\x9b\xe4\xdd\x4d\xf6\xe9\x6e\xe4\xc9\xdd\xa0\x12\xf0\xa4\x8b\x41\xaf\x0f\x19\x71\x1e\x5b\x4d\x21\xd5\x5f\xa2\x3b\xe8\x4f\x43\xdc\x61\x4b\xff\x02\x98\x5e\x7d\x4c\x4e\x88\xe6\x62\x5e\xb0\xce\x6f\x36\x88\xab\xd5\x4c\xa0\xab\x12\x72\xdf\xff\xa8\xf9\x3d\x2d\x0c\x9b\x81\x5c\x43\x0f\xf0\x25\x67\x6b\xcc\xf6\xc8\xc2\xf1\x1a\x82\xe8\x95\xcf\xbd\x3b\xf6\xb4\x77\x14\x4c\xbe\x6c\x9f\xe8\xbd\x77\x62\xaf\x41\xae\xeb\x9c\x52\xcf\xd3\x40\xa6\xdc\x83\xdf\xf6\x36\xe7\xdb\x41\x0e\x95\xee\xbb\x22\xf1\x23\x37\x2e\xa3\x5b\xdf\xf1\xfe\x60\xd7\x94\x43\xe2\xe4\xcb\x7d\x7d\x00\xde\x1a\xc1\x08\x40\x2b\x2a\xd0\xb4\xcd\x5f\xdb\xef\x04\xdc\x32\xe8\xad\x6c\x1e\x71\xa8\xcb\xb9\xa2\x39\x23\x73\x45\xcb\x81\x4b\x3b\x4e\x3a\x45\x11\xb7\xaf\xcb\x80\xb1\xef\xcb\xb7\xac\x0d\xec\x75\xc0\x96\x1d\xac\xf7\xc0\x6e\x17\x52\xde\x01\xde\x1a\x1f\x54\xf8\x76\xe3\xa8\xf9\x19\xfb\x3a\x6b\xfe\xe6\x8c\xe8\x9a\xe4\xac\xa2\xbc\x00\xf3\xc0\x87\x8b\xf7\x36\x34\xdd\xc9\x6a\x6e\x94\xfd\x34\x63\x07\x16\x47\x9a\xdb\xec\x8b\x2b\x76\xcf\xd9\x83\xb5\x68\x0d\x91\xa8\x29\x99\x33\x01\x61\xcf\x81\xe4\x85\x29\xd1\x3c\x67\xe7\x60\x54\x1a\x6e\x68\x8b\xd0\x8b\x81\x31\xc7\x68\x45\x98\xd7\x45\xf9\x5c\x02\x8f\xf3\x76\xf9\x8f\x52\x05\xde\x2b\x49\x03\xef\x4c\x03\xe6\xf4\xd8\x17\xdf\x7f\xff\x5d\x80\xaf\x80\x4d\xe5\x2d\xf9\xc7\x9b\x37\xdf\xbd\x19\xfe\x8c\x0b\xfc\xec\xff\x87\xe7\x67\x6f\xdb\xe9\xd5\xd9\x17\xb0\xde\xb9\xcf\x22\x0a\x87\x75\x25\x34\x35\xa3\xbc\xa8\x95\x4d\xc2\x4b\xd4\x1e\x7f\x68\xd7\x81\x90\x9c\xc6\x44\x4d\x5d\x8b\x2e\x7b\xc5\x66\xb5\xcc\xb8\x60\x9a\x2c\xe4\x03\xa9\x85\x62\x99\x9c\x0b\xfe\x89\xe5\x08\xc1\xae\x31\xac\xda\x90\x70\x7f\xc4\x09\x13\x79\x29\xb9\xa8\x80\xc5\x2e\xa8\xc8\x8b\x50\x04\x6c\xc2\x4c\xdb\x37\x78\xab\x25\x03\x6e\x34\x6a\xc1\xde\x37\x35\x56\x96\xcb\xcc\xd9\x05\x30\x21\x97\xc3\x65\xdb\x6a\xa6\x48\x18\xaf\x03\x36\x97\x9e\x31\x8e\x33\x09\xa0\xa9\x03\xfe\xf6\x47\xcd\xd4\x13\xa0\x41\x34\x8a\x5b\x2b\x4f\xe5\xa6\x01\x05\x76\x73\xb4\x42\x25\x1d\xf4\x34\x93\x1e\x93\x4c\x4b\xd4\x6a\xc2\xa6\x57\x46\x65\xad\x74\x10\xfc\xe9\x62\x89\xc8\x09\x11\x75\x51\x04\x7a\x1a\x68\x44\xc8\x50\x3c\x12\x96\x24\xfb\x43\x9a\x61\x20\xd5\x04\x85\xe5\xf3\x19\xa2\xda\x13\xdf\x91\x16\x35\x36\x49\xe5\x33\x19\xa8\xb0\x6c\x62\xa6\xc2\x32\x22\x29\x2e\x3d\x21\x2e\xed\xa1\x81\x04\xf3\x15\x96\x31\x19\x73\x89\xcf\x03\x3c\xa7\x41\x0b\xcb\xa8\xc8\xea\x34\xe3\x56\xcf\xd0\x13\xb3\xa7\x9e\xd1\xd0\x85\xe5\x39\xcc\x5d\x58\x46\xad\x63\x8a\xe9\x0b\xcb\x26\xab\xf8\x02\x66\x30\x3b\xe7\x97\x34\x86\x45\xba\xdc\xb1\x49\x0c\x4b\xb2\x61\xcc\x0e\x6e\x54\x1a\xc4\x88\x14\x88\x91\xe9\x0f\x5b\xa4\x3e\x6c\x5c\x35\xc1\x78\x86\x65\xdc\x89\x7e\x41\x43\x9a\xeb\xf0\xc5\xcc\x69\x58\x5e\xda\xa8\x86\x25\x99\x9f\x8e\x33\xb0\xb5\x1b\x8f\x1c\xd7\x4d\xe0\x13\x15\xe3\xe2\x5e\xe2\x2b\xd2\xa3\x94\x88\xab\xb5\x8a\x2b\xba\xc4\x03\xb0\x51\xab\x4c\x78\xed\xab\xad\x53\x2d\xa4\xbc\x23\xb5\x8e\x7b\xd4\x82\xf3\x8e\x80\x2e\xec\x44\x09\x1e\x73\xc3\xae\xea\x82\xfd\xcc\xab\xc5\x87\x06\xc8\x0b\xae\x59\x55\x97\x05\xac\x45\xeb\x07\x73\x2e\xaf\x1a\xe5\x04\xe3\x56\x8c\x3e\xba\x5c\x32\x91\x37\xa1\x43\xc1\x0e\xb5\x51\x6f\x31\x57\xad\x28\x50\x85\x83\xae\xd8\x63\x49\x45\xa3\xac\x40\x48\x45\xe8\x08\x27\x1e\xe0\x54\x99\x2c\x19\xbd\x60\xb4\xbc\xbd\x8a\x56\xd0\x82\x1b\xe8\xa0\x12\x90\x5b\x56\x48\x88\x3a\xc3\x7c\x3c\xcc\x5d\x4d\x4e\xe0\x7f\x37\x73\xb5\xac\xe4\x64\x5f\xbf\xf3\x11\x31\x20\x23\x16\x3c\x63\x9e\x65\xca\x14\x88\xb8\x2b\x2b\x4d\xa7\x09\xe8\x29\xbc\x2f\x91\xef\x8d\xe0\x79\x5b\xf0\x3b\x5a\xf2\xb8\x29\x10\xcb\x06\x3b\xef\x9a\x6e\xef\x7d\x3b\x56\x2b\xba\xfb\xee\xe3\xff\xed\x7f\xa8\x6c\xb1\xff\x0d\x80\xe1\xae\xb7\xbf\x4b\x51\x1b\x19\xd8\xef\xfd\x0a\x6b\xc9\xa8\x32\xcc\x1e\x2c\xf9\x53\x72\x7a\x75\x7e\x72\x73\x7e\x44\x7e\xfc\x78\x06\xff\x9e\x9d\x5f\x9c\x9b\x7f\x4f\x3f\x5c\x5e\x9e\x9f\xde\x18\xe1\xf9\x30\x3a\x84\x99\xd1\x06\x8b\x02\x77\xdf\x48\x28\xb2\x4b\xcc\xa9\x78\x22\xb3\xba\x32\x14\xb9\x19\x4c\x67\x94\x14\x4d\x88\x34\xcf\x53\x52\xe8\xff\x76\x67\xb0\xb3\xe7\x7e\x43\x57\xad\xb6\xad\x35\xc3\x25\x77\x68\x31\xf1\x99\xbd\xcc\x21\x4f\xce\xfe\x1f\x7b\xc6\x37\x03\x06\xe8\x0f\x83\x6d\x97\x1f\x62\xc1\xc2\xed\x32\x29\x65\xae\x27\x16\x01\xc2\xfc\x77\x7c\xd9\xa1\xca\xab\x42\xce\x27\x1e\x38\x82\x91\x42\xce\x89\xae\x6f\x3d\x2a\x08\x08\x82\x49\xad\x1d\xba\x66\x3a\x10\x07\x47\x1e\x3a\xa4\xd5\x6a\xf2\xe0\x3a\x6d\xb6\x1b\x18\x33\xae\x57\x3a\xa3\x05\xeb\xb4\x64\xfe\x30\x76\x40\x87\xaf\xfa\x67\xe8\x34\x15\xae\x56\x5a\x4c\xa1\x14\x0f\xbc\xc8\x33\xaa\xf2\x35\x72\xd1\x44\xd3\xe2\xc9\xc1\xe7\x66\x05\x08\x8e\x4d\xd7\x08\x2f\x1c\xb7\x58\xdd\x33\x55\xd0\x12\xb3\xcb\xe1\x9d\x64\xc8\x86\x49\x18\xe2\x19\x2b\x19\xa0\xd3\xe0\xd3\x90\x8c\x30\x91\x15\x12\xf0\x93\x51\xea\x3c\xea\x6e\x0b\xe6\xce\xb8\x67\xdc\x52\x51\x47\xfe\xe6\xec\x15\xd2\x94\x77\x4d\x75\x30\xf7\x79\x10\xe3\xdc\xa1\x5a\x44\xdb\x41\x63\xa0\xd7\xb2\x19\xd9\xb3\x99\x1a\x7b\x47\x64\xcf\xc3\x59\xe7\x56\x23\xdf\x3b\x8c\x3f\x14\xe0\x1b\x68\xe3\xd1\x80\xc2\x6e\x23\x1d\xa6\x30\xce\x36\xfc\x17\x9c\x6e\x17\xa3\x91\x3c\xf4\x06\xea\xdd\x88\x94\xd6\xd5\x02\x73\xe8\x76\x14\x6f\xa9\x3d\xd1\xb5\x51\x37\xb8\x4f\x5b\x8f\x78\xef\xb0\xd3\x7c\xe5\xde\xbc\x20\x42\xda\xcd\x53\xcc\x9c\xc6\x50\x82\x59\xbb\x5c\x77\xee\x9e\x8f\x71\x69\x63\xdd\x73\x45\x4a\x0a\x49\x18\xee\xcb\x78\xb3\x67\x16\x8b\x9d\x6b\x33\xe2\xb4\x5b\x19\xbc\x44\xad\xb0\x86\x44\x5b\xc5\xb5\xaf\x71\x5a\x50\xad\x7b\x1c\x9e\xc0\x03\x4c\xc3\xf6\xc5\x13\xc3\x7b\x6d\xcc\x07\x3c\x90\xbd\xa0\xf7\x81\xa9\x26\x0c\xba\xa2\x6a\xce\xaa\x70\x40\x02\x15\x4f\x1f\x82\x4f\x0b\x4d\x93\x1f\x1c\x9d\x6e\x60\x31\xe2\xa2\x9a\x4a\x35\xc5\x2a\x6f\x49\xa5\xea\x21\xbb\x43\xc5\x97\x4c\xd6\xd5\x35\xcb\xa4\xe8\x87\xa2\xb0\xdf\xed\x2c\xc2\x62\x04\x3e\x87\x0d\xf2\x39\x71\xe2\x77\xfb\xbd\x33\x67\x8e\x6a\x64\x73\x17\xd8\xd3\x85\xac\xfe\x70\xf1\x7e\x9b\xcd\x26\x80\x4b\x18\xde\xc9\x9f\x2c\x4f\x16\x73\x3f\x52\x3b\xf2\x60\xb5\xf7\x75\x35\xbe\xd2\xa9\x0f\x18\x09\x7f\x6d\x17\x23\x0c\x1f\x3c\x38\x7f\x5d\xd1\xaa\x5e\x3b\x0d\x31\x56\xd4\x9b\xca\x77\x0d\x4d\xb5\x7d\x56\x6d\x64\x52\xd4\xe8\x10\x9a\x19\xbe\x73\x19\x25\xc7\xc4\x56\x34\x57\xb6\x52\x94\xa3\x39\x8c\x66\x55\x4d\xd7\x5d\xee\xa6\xb2\xcd\x46\xe9\xc7\x23\x0f\x18\xc4\x42\x46\xb0\x8c\xa9\x4a\x5f\x50\x5d\xfd\x58\xe6\x74\x00\x99\x66\x25\xcb\x44\x57\x70\xa7\x50\xa7\x7d\x10\x2c\x37\x4c\xc8\x2e\x09\xb6\x47\x1e\x0c\x75\xaf\xb1\xc5\x9e\x06\x23\xa7\xd2\xdd\x31\x53\x7d\x6a\xba\xea\x1f\xf5\x95\x34\x6b\x72\xd2\x4b\xa3\xba\xc9\x3c\xb1\xd1\x1a\x8e\xa6\xa0\x35\x22\xd8\x63\x9f\x54\xb9\xfd\x88\x0b\x46\x45\x7f\x0a\x7f\x67\xac\xa7\xf8\xdd\xf8\x33\x65\x3b\x20\x0f\x0b\x6e\xd4\x2d\x44\xf0\xd1\xc4\x09\xb1\x39\x2b\xd8\x40\x42\xe3\x96\xf9\x3f\xb6\x87\x33\xdb\xc1\xb6\xa1\xd3\x1f\xbb\xcd\x79\x8f\xb7\xd5\x2d\x2d\xd6\x43\xa3\xa5\x59\xd9\xc7\xdb\x2a\x56\x27\x0c\xc2\xdb\x6d\x21\xb3\x3b\x7c\x2a\x03\xa0\x32\xf9\xa7\x81\xb4\x40\x2c\x98\x2a\x2b\x72\x9e\xf9\x70\x85\x52\xc9\xb9\x62\xba\xb3\xd4\x88\x2c\xae\xb1\x75\xd3\xa7\x59\x73\xdf\x6f\x2b\xbf\x96\xd4\xc2\x82\x29\xbd\x4c\x8a\x92\xd3\xcb\x01\x15\xa0\xe3\x4b\x5f\x57\xd1\x31\xa9\x17\xde\x5a\x6a\x65\x14\x83\xcd\xfa\xd5\xbf\x86\x01\x2d\x76\x9a\x3f\x14\x82\xd5\xc0\x2f\xb8\x7b\x4d\x2d\xf8\x55\x00\x80\x23\xd5\x15\x10\x01\xda\x20\xe9\xaa\x93\x1f\x72\x4a\x6b\x3b\xcd\xa9\xd8\x79\x98\x4c\x02\xc6\xfc\x98\xe0\x97\xd4\x37\x09\x47\xb9\xbd\xc5\x98\xc7\xb8\x3a\xb7\xa5\x51\xa6\x2c\x22\x17\xc6\xc7\xcd\xa4\x1a\x54\xdb\x76\x37\xf8\x30\x2c\x4b\xb4\x21\x23\xd3\x0e\x07\xa2\x77\x19\xb7\xa3\xa0\xbe\xca\x11\xa1\x64\xc1\x75\x25\x95\x8d\x10\x31\x0c\xb0\x52\x54\x68\xfc\x7d\x90\x57\x6c\x1b\xda\x7e\xea\x87\x40\x68\x59\x32\xaa\x9c\x9f\xde\xb2\x33\xaa\xc1\x88\x9a\x49\x95\xf7\x0e\xcc\x99\x64\x7a\xc5\xb1\xde\xee\x77\x80\x48\x55\x50\x5d\xdd\xf8\x31\x18\x99\x22\x91\x1a\x77\x25\x26\x3b\xc5\x66\x36\x0e\x19\x59\x8a\xe6\x47\x49\xa8\xb0\x86\xaa\xa1\x2e\x92\xce\x57\x5c\x2e\x69\xe6\x86\x02\xe0\x46\xf3\x7a\xf0\xc2\x5e\x6b\x8a\x2f\x33\x72\x97\x2d\x9e\x36\xe4\x13\x7c\xc7\x90\xf8\x77\x0c\x6d\x75\xc7\xec\x51\x70\xc0\xdc\x0a\x87\xf7\xff\x34\x7c\xd4\x08\x88\x09\x68\x06\xf1\xd7\x6a\xab\x2d\x2b\x17\x03\xa0\x27\x3d\x93\xf1\xb7\xc8\xe7\xf0\x24\x5f\x87\xc4\xd1\x28\x46\x75\x08\xf1\x69\x4c\x10\xf4\xad\xe2\x6c\x46\x4e\xe9\x92\x15\xa7\x54\xef\x72\xe5\x81\x3c\x84\x4c\x35\xec\x78\x7e\x4c\x26\x57\xad\x30\x99\x4b\x59\xbd\x67\xd5\x10\x02\x41\x14\x18\x32\x85\x10\x3c\x2b\x09\xd8\x5a\x1d\x89\x5f\xf8\x2d\xaf\xfa\xd6\x23\x0c\x5c\xec\x2f\xe2\x4a\x87\xd1\xce\x86\xae\x71\xf7\x02\xd7\x0a\xcc\x93\xd9\xa6\x17\x39\x82\xa0\x34\x74\x79\x53\xae\xed\x67\xba\xb0\x63\xae\x6a\x64\xf6\xbe\x89\xeb\x5e\x53\xcf\xda\x42\xdc\x74\xd4\x69\xf0\x15\xb5\x63\xe3\x11\x3d\x87\x6b\xa3\xe4\xed\x52\x30\xfa\xbc\xa8\x84\x76\x53\x07\x7f\x0f\x48\xfe\xd3\x30\x9f\xdf\x16\xf1\x30\x07\xff\x9b\x39\x01\x2f\x19\x2e\x77\xe6\x7a\xb5\x06\x18\xff\xaa\x1a\xfc\x1f\x7a\xf7\xfd\xc8\x3a\xe7\x63\x1f\x30\xa1\xd8\x3d\xe4\x51\x08\xc8\x0f\x65\x44\x30\x40\xf2\x1a\x82\xf1\x21\xe9\x2a\x5b\x9a\xba\x16\x57\xa5\xa3\x6a\x32\x89\x6f\xad\xfb\x28\xb4\xc1\x58\x52\xb5\xc2\x04\xad\x7b\x84\x3a\x18\xd7\xa9\x46\x34\x16\x15\x30\x47\xb6\xd7\x6f\x78\x5e\x2d\x2b\x0f\xa0\x99\x2a\x57\x40\xcf\x31\xd2\x22\x33\x54\x39\x83\xb7\xfd\x90\xcc\xfb\xe7\x57\xdb\x46\xe6\xab\x55\x1a\x08\x31\xf7\xdd\x13\xbe\xab\x69\xd5\x35\xdf\xdd\x9a\x47\xa1\x46\x93\xdb\xfb\x02\x70\x53\xa3\x07\xe8\x79\x81\x14\xb1\xc4\x4e\xdd\xe7\x3f\x6f\x29\x18\xda\xc1\x33\xf6\x4c\x10\xb6\x9a\xa9\x7b\x96\x77\x3c\x8c\xf6\x8d\xcd\xee\xdf\x5a\xfe\xe8\xa6\x7d\xbb\xec\xe4\xcf\xbf\xbe\xfa\x6f\x00\x00\x00\xff\xff\x9d\xd4\xd6\xc1\xcd\x57\x0c\x00") func operatorsCoreosCom_clusterserviceversionsYamlBytes() ([]byte, error) { return bindataRead( @@ -125,7 +125,7 @@ func operatorsCoreosCom_clusterserviceversionsYaml() (*asset, error) { return a, nil } -var _operatorsCoreosCom_installplansYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x5b\x4b\x73\xe3\x36\xf2\xbf\xfb\x53\x74\x39\x87\x24\x55\x96\x94\xc9\xff\x92\xf2\xcd\x7f\x67\xb3\xe5\xdd\x24\xeb\x1a\x4d\xe6\x92\xca\xa1\x45\xb6\x24\xc4\x20\x80\xe0\x21\x59\x9b\xcd\x77\xdf\x6a\x80\xa4\x28\x89\x2f\x69\x3c\xf6\xe2\x62\x8b\x04\x1a\xfd\x40\x77\xff\x1a\x00\xd1\x88\x8f\x64\x9d\xd0\xea\x16\xd0\x08\x7a\xf6\xa4\xf8\x97\x9b\x3e\x7d\xe7\xa6\x42\xcf\x36\xef\xae\x9e\x84\xca\x6f\xe1\x3e\x38\xaf\x8b\xf7\xe4\x74\xb0\x19\x7d\x4f\x4b\xa1\x84\x17\x5a\x5d\x15\xe4\x31\x47\x8f\xb7\x57\x00\xa8\x94\xf6\xc8\x8f\x1d\xff\x04\xc8\xb4\xf2\x56\x4b\x49\x76\xb2\x22\x35\x7d\x0a\x0b\x5a\x04\x21\x73\xb2\x91\x78\x35\xf5\xe6\x9b\xe9\xbb\xef\xa6\xdf\x5c\x01\x28\x2c\xe8\x16\x84\x72\x1e\xa5\x34\x12\x95\x9b\x6a\x43\x16\xbd\xb6\x6e\x9a\x69\x4b\x9a\xff\x14\x57\xce\x50\xc6\x53\xac\xac\x0e\xe6\x16\x5a\xfb\x24\x6a\x15\x27\xe8\x69\xa5\xad\xa8\x7e\x03\x4c\x40\xcb\x22\xfe\x9f\x24\x7c\x48\x93\x3e\x4a\x54\xf1\xa9\x14\xce\xff\xf3\xf8\xcd\x8f\xc2\xf9\xf8\xd6\xc8\x60\x51\x1e\xb2\x1a\x5f\xb8\xb5\xb6\xfe\xe7\xfd\xc4\x3c\x91\x30\xe9\x95\x50\xab\x20\xd1\x1e\x8c\xba\x02\x70\x99\x36\x74\x0b\x71\x90\xc1\x8c\xf2\x2b\x80\x52\x37\x25\x91\x09\x60\x9e\x47\x7d\xa3\x7c\xb4\x42\x79\xb2\xf7\x5a\x86\x42\xd5\x93\x70\x9f\x9c\x5c\x66\x85\xf1\x51\xa7\x1f\xd6\x04\x4b\x61\x9d\x87\xfb\xf9\x47\x10\x0a\xfc\x9a\xa2\x4c\xa0\x97\x90\xc9\xe0\x3c\xd9\x39\xd9\x8d\xc8\xa8\x5c\x02\x71\xfe\x9a\x1c\xc0\xef\x4e\xab\x47\xf4\xeb\x5b\x98\xb2\xba\xa7\xdd\x83\x7e\xfd\xe6\xb7\xc6\xb8\x64\xc3\xfb\xf9\xc7\xc6\x33\xbf\x63\x09\x9d\xb7\x42\xad\xfa\x38\x46\x63\xac\xde\xa0\x84\x42\xe7\xd4\xc3\x4b\xd5\xef\x64\xda\xbb\xd3\x17\x1d\x73\xb7\x93\x8c\xca\x6f\x23\x79\xf0\x22\x91\x5c\x68\x2d\xa9\x5c\x2d\x55\xe7\xcd\x3b\x94\x66\x8d\xef\xca\x87\x2e\x5b\x53\x81\x7b\x23\x69\x43\xea\xee\xf1\xe1\xe3\xff\xcd\x8f\x5e\xc0\xa1\x2e\x1a\x4b\x0e\x72\x76\x36\x72\xd1\x80\xe5\xc2\x89\x3e\xc6\x86\x44\x70\x14\x2d\xba\xf7\x80\x13\x36\xf5\xe2\x77\xca\x7c\xe3\xb1\xa5\x3f\x82\xb0\x94\x37\x67\x67\x8d\x54\xae\x7c\xf4\x98\xb5\xd3\x78\x64\x2c\xcf\xe5\x1b\x9e\x94\x5a\x23\x96\x1c\x3c\x3f\x92\xec\x3f\x93\xa3\xb7\x00\xac\x90\x34\xf2\x40\xd6\xd2\x05\x28\x2f\xb5\xc8\x62\xfa\xb5\x70\x60\xc9\x58\x72\xa4\xfc\x5e\x0d\xaa\x94\x72\x7a\x42\x9c\x97\x2b\x59\xc7\x7e\x19\x64\xce\x11\x69\x43\xd6\x83\xa5\x4c\xaf\x94\xf8\x77\x4d\xdd\x81\xd7\xc9\x47\xd0\x93\xf3\x10\x9d\x4c\xa1\x84\x0d\xca\x40\x37\x80\x2a\x3f\xa1\x5d\xe0\x0e\x2c\xf1\xbc\x10\x54\x83\x62\x1c\xe2\x4e\x79\xf9\x49\x5b\x36\xe1\x52\xdf\xc2\xda\x7b\xe3\x6e\x67\xb3\x95\xf0\x55\xac\xcd\x74\x51\x04\x25\xfc\x6e\x16\xc3\xa6\x58\x04\xb6\xe7\x2c\xa7\x0d\xc9\x99\x13\xab\x09\xda\x6c\x2d\x3c\x65\x3e\x58\x9a\xa1\x11\x93\x28\x8c\x8a\xf1\x76\x5a\xe4\x5f\xd8\x32\x3a\xbb\xa3\x89\x5b\x1d\x00\xaa\xc0\x77\xa6\xb1\x38\x24\x82\x70\xbc\xf2\x22\xc1\x24\xec\xde\x26\xfc\x88\xd5\xf8\xfe\x6f\xf3\x0f\x50\x71\x94\xec\x96\x4c\xb4\xef\xda\xa2\xa1\xca\x5a\xac\x59\xa1\x96\x64\xd3\xc8\xa5\xd5\x45\xa4\x4a\x2a\x37\x5a\x28\x1f\x7f\x64\x52\x90\xf2\xe0\xc2\xa2\x10\xde\xc5\x65\x4d\xce\xb3\x21\x4f\x09\xdf\xc7\xdc\x04\x0b\x82\x60\x72\xf4\x94\x9f\x76\x79\x50\x70\x8f\x05\xc9\x7b\x74\xf4\xea\xb6\x63\x1b\xb9\x09\x1b\x64\xb4\xf5\x9a\x99\xf7\x74\xc0\x89\xd7\x03\x54\x49\xb3\xd3\xdc\x8d\xa8\x33\x37\x94\xd5\xde\x58\x47\x99\x3b\x63\xa4\xc8\x92\xdb\xd5\xab\x8d\x1d\x67\x51\x87\x26\x3a\x76\x93\x4e\x76\xba\x02\x11\xa4\x84\x77\x1a\xc8\x0f\x5f\x9d\x4c\xc4\xaf\x46\x25\x36\xe8\x89\x62\x10\x23\x59\x9a\xfa\xf4\xcd\xb0\x7b\x70\xab\x72\x10\xbb\x09\xaf\xd3\xe0\xc8\xee\x33\x9b\xd1\x52\x64\x3b\x58\x6a\xcb\x61\xab\xa1\xf2\xd3\x35\xc7\xed\xc1\x43\x11\x5c\x5c\xb9\x5a\x11\x1b\xe1\xfa\x2e\x78\x5d\xa0\x17\xd9\x35\x68\x0b\xd7\x3f\xa1\x0a\x28\xaf\xdb\x86\x77\xae\x9d\xbd\x98\x6d\xda\x6f\x4f\x70\xfb\xd6\xad\xe5\x6e\x5a\x68\x2d\xee\x5a\xde\x0a\x4f\x45\xeb\xb0\x01\xee\x57\xa4\x38\xe3\xb5\xa4\x9b\xfd\x50\x8e\xe1\x2b\xb2\x27\xef\xd3\xc2\xed\x1e\xd7\x31\x65\x1a\x56\xc3\xb4\xb3\xc6\x3b\x8f\x3e\x9c\xc8\x39\xb4\x9a\x9a\x0e\x19\x09\x34\x82\x67\x89\x07\x96\xda\x16\xc9\x21\x71\xa1\x43\x0a\x8c\x69\x32\xd0\xcb\x53\x11\x3c\x19\x57\xfb\x1d\x7b\x6e\xa6\x0b\x23\xc9\x1f\x42\x8b\xe9\xd5\x69\x64\x4e\x34\x39\x30\x7b\x8b\x42\xc6\x89\x30\xf3\x01\x65\x9c\x8f\x4a\x38\xb2\x73\x9e\x8a\xe3\xb5\x78\x61\x0c\xc8\xd0\xa3\xd4\xab\x79\x6b\x56\xe3\x0e\x66\x8d\x8e\xce\xf1\x6c\xef\x49\x05\x0e\xff\xe5\xda\xbd\xcb\x32\x1d\x94\x7f\x4f\xcb\x8b\x9d\xbd\x9b\x24\x58\x5a\x92\x25\x95\x95\x80\xc6\xa5\x0e\x80\xa9\x07\xf8\x35\x7a\x8e\x11\xc1\xb5\xc4\xb2\xa8\x36\x0d\xb9\x4e\xe5\x41\x5e\x23\xbc\xca\x50\xdd\xfe\xde\xaa\xe7\x21\xd5\x40\x2f\x84\x6b\xd5\xc8\xdd\xe3\x43\x05\xd2\x12\x36\xa3\x4a\xe2\x16\x1c\xd6\x64\xb0\xc3\xbf\xb8\x2d\x05\xc9\x3c\xc2\xf2\x31\x1c\x74\xd8\x84\xdb\x43\xa9\xfe\x88\x51\xbc\x06\x04\x23\x28\xa3\x03\xb4\x18\x55\x49\x98\x97\x0f\x39\x1d\x5b\x2a\xdf\xdd\x24\xe4\xd1\xc3\x2a\xa4\x6a\xaf\x44\x95\x1e\x85\x02\x64\x34\x24\x72\xf8\xc7\xfc\x5f\x3f\xcf\xfe\xae\x93\x34\x6c\x6f\x72\x2e\x79\x49\x41\xca\xdf\x80\x0b\xd9\x1a\xd0\xb1\x30\xbc\xf6\xd9\xb7\x68\x5a\xa0\x12\x4b\x72\x7e\x5a\x52\x23\xeb\x7e\xfd\xf6\xb7\x2e\x4d\x02\xfc\xa0\x2d\xd0\x33\xb2\xfb\xde\x80\x48\xfa\xaf\x21\x56\xb9\xf0\x62\x0a\x62\xe1\x6b\x9a\xb0\x15\x7e\x1d\x59\x35\x3a\x2f\x85\xdc\x46\x21\x3c\x3e\x71\x8e\x49\x42\x04\x2e\x16\x9f\x5a\x63\x5c\x6a\xd7\xa9\x26\xac\x59\xfd\x93\xeb\x9f\xbf\xae\xe1\xab\xed\x9a\x2c\xc1\x35\xff\xbc\x4e\x8c\xd4\xd0\x9a\x9f\x55\x2b\x65\xcf\x50\x74\x03\x6f\xc5\x6a\x45\xb6\xc3\x11\xb8\x45\xf8\xc7\x90\xe9\x6b\xce\x7a\x62\x09\x4a\x37\x88\x44\xd2\x6c\x2f\x43\x99\x58\x0a\xca\x4f\x18\xfc\xf5\xdb\xdf\xae\xe1\xab\x43\x3d\x74\x4e\x26\x54\x4e\xcf\xf0\x6d\xaa\x9b\x85\x63\x5d\x7d\x3d\x85\x0f\x71\x45\xec\x94\xc7\x67\x9e\x2b\x5b\x6b\x47\x0a\xb4\x92\x3b\x96\x70\x8d\x1b\x02\xa7\x0b\x82\x2d\x49\x39\x49\xe0\x29\x87\x2d\xee\xda\x22\x71\xd5\x2a\x53\xf1\x32\x45\x30\x68\xfd\x40\x41\x53\x6a\x63\xc8\x91\xda\xb0\x7d\xd5\xc6\xfa\x50\xc4\xfa\x23\x3d\xfb\x0d\x11\xf2\x68\x9d\xc4\x12\xfd\x13\x75\xf2\x73\x63\x0d\x5f\xa4\x93\xa7\xb0\x20\xab\xc8\x53\x54\x4b\xae\x33\xc7\x1a\xc9\xc8\x78\x37\xd3\x1b\x4e\x11\xb4\x9d\x6d\xb5\x7d\x12\x6a\x35\xe1\x45\x3a\x49\x2b\xc1\xcd\xe2\x76\xd6\xec\x0b\xd5\x02\x67\xcf\x52\x41\x27\x7a\x39\x57\x0f\x91\xd0\x5b\x2a\x83\xe7\x77\xb3\x4b\x75\x51\x55\x30\xe7\xe4\xbc\x1e\x8d\xcc\x53\xe8\xc9\x8e\xe9\x72\x6c\xd8\xae\x45\xb6\xae\x76\x2f\x1a\xb1\xb9\xc0\x3c\x05\x6f\x54\xbb\x37\xf3\x2c\xd6\x78\xb0\xcc\xd3\x6e\x52\xee\xd8\x4e\x50\xe5\xfc\xbf\x13\xce\xf3\xf3\x4b\x55\x1c\xc4\x27\x07\xa1\x5f\x1e\xbe\x7f\x5b\x7f\x0b\xe2\xd2\x88\xf3\x3c\xd9\x4f\x3e\x29\xd0\x4c\xca\x52\xc8\xeb\x42\x64\x27\xfd\x17\x41\xe5\x92\x7e\xd4\xfa\x29\x98\x56\x80\x76\xa0\xb1\xff\x6f\xf6\xae\x2a\xcd\xb2\x4c\x17\x6a\x62\xac\x5e\x59\x46\x1d\x8d\x5d\x11\x30\x41\x4a\x40\x95\x43\x50\x06\xb3\x27\x5c\x51\x39\x69\x4c\xa4\xc4\x90\x54\x97\x3b\x2b\xb1\xc0\xeb\x86\x98\x17\x54\x73\x9d\xdc\xa7\xdd\xa4\x92\xcf\x0e\x36\x2b\xc4\xc0\x3c\xc6\x3a\xa3\xe4\x7b\x98\xdf\x41\x50\xdc\x57\x82\xa4\x76\x54\x88\xbc\xa7\xae\x6c\x3e\x01\x91\xb3\x5f\x2d\x45\x4b\xd1\x59\x75\x31\xd8\x89\x3b\x26\x5c\xde\x49\x6c\xab\x75\x60\x04\x7c\x87\x13\x3e\xbb\xe1\xdb\x81\x35\xee\x8f\x86\x55\x16\xa9\x02\x55\xa9\xe5\x83\x6e\xf1\x49\x69\x05\x16\x09\xb6\xe8\x62\xe4\x93\x1b\xca\xe3\x86\x5d\xb7\x97\x0e\x5a\x64\x9c\xb4\x30\xaa\x64\x69\x91\xf7\x82\xc2\xa5\xc9\xf8\x40\x4d\x30\xa2\x88\x69\xe1\xa9\x27\x02\xa6\xf6\x3a\x05\x4d\x6a\x6f\x59\xd6\xa4\xf6\xb6\xc5\x4d\x6a\xaf\x5e\xe2\xa4\xf6\xaa\x85\x4e\x6a\xaf\x57\xee\xa4\x76\x61\xd1\x53\xea\x67\x9c\x13\xf6\x15\x40\xa9\x9d\xe7\x7f\xe7\x15\x43\xa9\xbd\x79\x49\x74\x96\xc6\xfa\xca\xa3\x4b\x34\x76\x5e\xa9\xd4\xa9\xb1\xcf\x5a\x30\x9d\xad\xa0\xde\xe2\xe9\x52\x2d\x9d\x59\x48\x7d\x2e\x55\xf5\x96\x53\x67\x69\x6a\x64\x69\x75\x89\xbe\x3e\x5f\x99\xd5\xa9\xd6\xff\x8d\x62\xeb\x2c\x03\xf4\x14\x5e\x97\x28\xfd\xac\x22\xac\x53\x8f\x9f\xb3\x14\x3b\x43\x3b\xe7\x95\x65\xa9\x65\x5a\xa5\x0b\x38\x3d\x68\xf4\x10\x53\xd7\x03\x8e\xcf\x6c\x58\x52\x94\x07\xa7\x26\xcd\x72\x68\x08\x36\x77\x95\x5e\xa9\xf5\x14\x60\x4d\x22\x03\xd8\x7b\xb8\x26\x4a\x6d\x52\x1e\x35\x0d\x74\xe2\x39\x7b\xba\x8c\x43\xfa\x00\x12\x9d\xff\x60\x51\xb9\xa8\xd7\x0f\x62\x28\x5b\x1d\x59\xe4\x47\xe4\xf2\x52\x14\x75\x35\x99\xec\x03\xbe\x26\x59\x16\x2e\xf1\xa0\xb5\x3c\x43\x63\x7c\xa9\xb4\x5f\x77\x15\x97\xfb\x36\xd2\x31\xb9\xa5\x33\xbb\x5b\xc8\xd1\xd3\x84\x39\x1a\x14\xfb\x97\x78\x69\xe1\xc5\x44\xe6\x5a\xcd\x58\xbd\x68\xbb\x06\xf1\x4a\x52\x15\xe4\x1c\xae\xce\x13\xe7\x0e\xd6\xa1\x40\x05\x96\x30\xc7\x85\xa4\x8a\x08\xe3\xd7\x78\x2d\x41\xad\x20\x27\x8f\x42\xba\xc6\x69\xe8\xde\xbe\x2f\x26\xac\x25\x74\x43\x59\x0d\x4e\x6f\xb7\xa5\x61\xf1\xe8\xff\xc0\x1e\x5f\xba\x68\xe4\xcf\xc1\x69\xfb\xb9\x73\x2f\xa7\xf3\xea\xf4\xf8\x90\xc9\x9b\xea\xfe\xc1\x07\x1b\xe8\x06\x7e\x40\xe9\xe8\x06\x7e\x51\x4f\x4a\x6f\x5f\x8e\xdf\xd8\xf1\x2c\xbd\xee\x4c\xe4\xaa\xe6\xf3\x05\x58\xd9\xef\xe2\x8c\x0c\xf6\x0f\xf5\x80\x6a\x27\xae\xdc\x89\x99\x04\x25\xfe\x08\x87\x65\x61\x7d\x90\xfb\xd5\x71\xc1\x78\x3f\xff\x18\x17\x47\xda\x56\x71\xa9\x6c\xac\x8a\xf0\xfb\xf9\x47\xf7\xf5\x40\x6e\xe8\x95\xca\xf4\x6e\x48\x8c\xc7\x03\x8f\xe8\xd7\x47\x55\xaf\xd4\x59\xe3\x4a\xe2\x7e\x6f\xce\x84\xf6\x73\xea\xaa\x3d\xf8\x2f\x1d\xb3\x2e\x32\x94\x72\xc7\x05\xa0\x28\xd8\x9f\x6b\xf0\x36\x94\x0c\xfb\x05\x1e\x91\x57\x4e\x7c\x94\x96\x4b\xca\xbc\xd8\x50\x63\x78\x65\x9f\xb4\x1f\x49\x79\x29\xe1\x27\x31\x57\xed\xf4\x8d\x64\xed\x7d\xd9\xbd\x5a\x5f\xcd\x65\xb3\xd7\x77\x49\x34\x96\xfc\x69\xad\x29\x82\xa5\x0e\x2a\x07\xf4\xd1\x70\x17\xf2\x7c\x78\x13\xe3\xf5\x6e\xf9\xf4\xc3\xae\x97\xd9\x8b\xee\x5c\xec\x8d\xdb\x37\x35\x9a\xeb\x03\x73\xfb\xa0\x49\xcf\x94\x85\xd2\x21\x3a\x88\x8f\xb9\xfb\x35\x88\xd5\x86\x57\xf8\x39\x98\x69\x54\x90\x1e\x9b\xe5\xc7\xa2\x96\x17\x9d\x74\x10\x54\x8c\x72\xcc\xfe\xdc\xde\x8e\xf2\xdf\xa7\xd4\x1e\x37\xce\x33\x2c\x48\x66\xe8\x28\x3f\xce\xf8\x09\xf2\x8f\x49\xf3\x23\x18\x1d\x4a\xed\x23\x48\xf4\x67\xdb\xae\xbb\xa1\xb5\xd0\x31\xf7\xa6\x5e\x8b\xea\x8e\x53\x5d\xd4\x1c\xac\x6f\x0e\x3f\x08\x19\xd9\x98\xca\xd2\x15\x5e\x64\x5d\x6d\xd7\xfa\xe2\x40\xda\x63\xed\x31\x0e\xfe\x53\x05\x1e\x99\x8f\x08\x2c\x27\x27\xc0\xb2\x4c\xbe\x7b\x60\xd9\xb1\x7b\xdb\xbc\x87\x17\xb3\x76\x81\xbb\x78\x29\xb6\x30\xda\x7a\x4c\x27\x6b\x41\xe5\x64\x9d\x47\x95\x33\xbd\xed\x7a\xc7\x1a\x6b\xf7\x6b\x56\xd9\x1a\x1d\x08\xef\x20\x6d\x17\xf8\xd2\xde\x67\x5f\xf3\x8c\x77\xe4\x06\x75\xd4\xb0\xd5\x23\x0f\xa8\x71\xcc\xc1\xe4\x29\xbf\x1f\xd8\xb5\xd7\x88\xfd\x8c\x49\xec\xb9\xbb\xf9\xa9\x51\x7d\xee\xc9\x1c\x07\xeb\x86\x10\x2a\xd6\x0c\x1b\x91\xa7\xfb\x8b\x64\x40\xa8\x97\x89\xc9\xc3\xa7\x89\xe9\x94\xac\xdb\x2b\x27\xf5\xd6\x56\x67\x87\x9e\xb2\x7b\x38\x27\x68\x93\xbe\x24\x1a\x0a\x1d\x5d\xd7\x7f\x53\xab\xa5\xf8\xc4\x68\xdb\x7d\x19\x37\xb5\xf1\xc0\x94\x4d\x5e\x7d\xa1\xd6\x63\xfa\xc6\x57\x09\xf1\xe2\xba\xb7\x25\xa8\x63\x00\xda\x07\x56\x87\x96\x06\x8c\xdd\x5e\x19\xb3\xb9\x32\x49\xdf\xb6\xf5\xf6\x78\x12\x2d\x1f\xa5\x34\x3b\x30\x4a\xec\xed\xb0\xbf\xd2\x3c\xb2\x5b\xdc\x23\xee\xed\x5b\x1e\xac\x76\xf6\x19\xb7\xdb\x93\x3e\xec\x7b\x89\x9d\xd0\xe1\x73\xa0\x91\x84\xaa\x83\xcc\x17\x21\x36\x7c\xd6\x32\x92\xd0\xde\x34\x2f\x4c\x6e\xc4\x41\xc7\x48\x9a\x9b\x31\x87\x00\x2f\x00\x78\xce\x8b\x14\xe5\x36\x47\x4f\x9e\x33\x68\xbd\xc8\x82\x44\xbb\x0f\x19\x31\x71\x8c\x0b\x12\x97\x85\x45\xe7\xd1\xfa\x2e\xc8\x3c\x46\xc2\x79\x45\xa0\x12\x2d\xee\xff\x6d\xd7\xa4\xea\x43\xe9\xf4\x49\x2e\x2c\x68\xc5\x19\xdc\x18\xb9\xeb\x52\x7a\xda\xf0\xaf\x3e\xf4\x91\xc2\x79\xca\xab\x8f\x49\x23\x48\x19\x7b\x61\xa8\xd3\xb0\x5d\xd0\xde\x91\xdd\x50\x7e\x0b\xde\x86\xfa\x91\xd7\x96\xf1\xde\xc1\xb3\xb0\xa8\xf9\xdb\x6b\xac\x5c\x29\xf0\xe7\x5f\x57\xff\x0d\x00\x00\xff\xff\x73\xdc\xf0\xf8\xe3\x3c\x00\x00") +var _operatorsCoreosCom_installplansYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x5b\x4b\x73\x23\xb7\x11\xbe\xeb\x57\x74\xc9\x07\xdb\x55\x22\xb9\xde\x5c\x52\xba\x29\x72\x9c\x52\x62\x3b\xaa\xe5\x7a\x2f\xae\x3d\x34\x67\x9a\x24\x2c\x0c\x00\xe3\x41\x2e\xe3\xf8\xbf\xa7\x1a\x98\x19\x0e\xc9\x79\x91\xab\x95\x82\x8b\xc4\x19\xa0\xd1\x0f\x74\xf7\xd7\x00\x06\x8d\xf8\x40\xd6\x09\xad\x6e\x01\x8d\xa0\x4f\x9e\x14\xff\x72\xd3\xa7\xbf\xba\xa9\xd0\xb3\xcd\x77\x57\x4f\x42\xe5\xb7\x70\x1f\x9c\xd7\xc5\x3b\x72\x3a\xd8\x8c\xbe\xa7\xa5\x50\xc2\x0b\xad\xae\x0a\xf2\x98\xa3\xc7\xdb\x2b\x00\x54\x4a\x7b\xe4\xc7\x8e\x7f\x02\x64\x5a\x79\xab\xa5\x24\x3b\x59\x91\x9a\x3e\x85\x05\x2d\x82\x90\x39\xd9\x48\xbc\x9a\x7a\xf3\x66\xfa\xf6\xcd\xf4\xcd\x15\x80\xc2\x82\x6e\x41\x28\xe7\x51\x4a\x23\x51\xb9\xa9\x36\x64\xd1\x6b\xeb\xa6\x99\xb6\xa4\xf9\x4f\x71\xe5\x0c\x65\x3c\xc5\xca\xea\x60\x6e\xa1\xb5\x4f\xa2\x56\x71\x82\x9e\x56\xda\x8a\xea\x37\xc0\x04\xb4\x2c\xe2\xff\x49\xc2\x87\x34\xe9\xa3\x44\x15\x9f\x4a\xe1\xfc\xbf\x8e\xdf\xfc\x28\x9c\x8f\x6f\x8d\x0c\x16\xe5\x21\xab\xf1\x85\x5b\x6b\xeb\x7f\xde\x4f\xcc\x13\x09\x93\x5e\x09\xb5\x0a\x12\xed\xc1\xa8\x2b\x00\x97\x69\x43\xb7\x10\x07\x19\xcc\x28\xbf\x02\x28\x75\x53\x12\x99\x00\xe6\x79\xd4\x37\xca\x47\x2b\x94\x27\x7b\xaf\x65\x28\x54\x3d\x09\xf7\xc9\xc9\x65\x56\x18\x1f\x75\xfa\x7e\x4d\xb0\x14\xd6\x79\xb8\x9f\x7f\x00\xa1\xc0\xaf\x29\xca\x04\x7a\x09\x99\x0c\xce\x93\x9d\x93\xdd\x88\x8c\xca\x25\x10\xe7\xaf\xc9\x01\xfc\xe6\xb4\x7a\x44\xbf\xbe\x85\x29\xab\x7b\xda\x3d\xe8\xd7\x37\x1f\x1b\xe3\x92\x0d\xef\xe7\x1f\x1a\xcf\xfc\x8e\x25\x74\xde\x0a\xb5\xea\xe3\x18\x8d\xb1\x7a\x83\x12\x0a\x9d\x53\x0f\x2f\x55\xbf\x93\x69\xef\x4e\x5f\x74\xcc\xdd\x4e\x32\x2a\xbf\x8d\xe4\xc1\x8b\x44\x72\xa1\xb5\xa4\x72\xb5\x54\x9d\x37\xdf\xa1\x34\x6b\xfc\xae\x7c\xe8\xb2\x35\x15\xb8\x37\x92\x36\xa4\xee\x1e\x1f\x3e\xfc\x65\x7e\xf4\x02\x0e\x75\xd1\x58\x72\x90\xb3\xb3\x91\x8b\x06\x2c\x17\x4e\xf4\x31\x36\x24\x82\xa3\x68\xd1\xbd\x07\x9c\xb0\xa9\x17\xbf\x51\xe6\x1b\x8f\x2d\xfd\x1e\x84\xa5\xbc\x39\x3b\x6b\xa4\x72\xe5\xa3\xc7\xac\x9d\xc6\x23\x63\x79\x2e\xdf\xf0\xa4\xd4\x1a\xb1\xe4\xe0\xf9\x91\x64\xff\x9d\x1c\xbd\x05\x60\x85\xa4\x91\x07\xb2\x96\x2e\x40\x79\xa9\x45\x16\xd3\xaf\x85\x03\x4b\xc6\x92\x23\xe5\xf7\x6a\x50\xa5\x94\xd3\x13\xe2\xbc\x5c\xc9\x3a\xf6\xcb\x20\x73\x8e\x48\x1b\xb2\x1e\x2c\x65\x7a\xa5\xc4\x7f\x6a\xea\x0e\xbc\x4e\x3e\x82\x9e\x9c\x87\xe8\x64\x0a\x25\x6c\x50\x06\xba\x01\x54\xf9\x09\xed\x02\x77\x60\x89\xe7\x85\xa0\x1a\x14\xe3\x10\x77\xca\xcb\x4f\xda\xb2\x09\x97\xfa\x16\xd6\xde\x1b\x77\x3b\x9b\xad\x84\xaf\x62\x6d\xa6\x8b\x22\x28\xe1\x77\xb3\x18\x36\xc5\x22\xb0\x3d\x67\x39\x6d\x48\xce\x9c\x58\x4d\xd0\x66\x6b\xe1\x29\xf3\xc1\xd2\x0c\x8d\x98\x44\x61\x54\x8c\xb7\xd3\x22\xff\xca\x96\xd1\xd9\x1d\x4d\xdc\xea\x00\x50\x05\xbe\x33\x8d\xc5\x21\x11\x84\xe3\x95\x17\x09\x26\x61\xf7\x36\xe1\x47\xac\xc6\x77\x7f\x9f\xbf\x87\x8a\xa3\x64\xb7\x64\xa2\x7d\xd7\x16\x0d\x55\xd6\x62\xcd\x0a\xb5\x24\x9b\x46\x2e\xad\x2e\x22\x55\x52\xb9\xd1\x42\xf9\xf8\x23\x93\x82\x94\x07\x17\x16\x85\xf0\x2e\x2e\x6b\x72\x9e\x0d\x79\x4a\xf8\x3e\xe6\x26\x58\x10\x04\x93\xa3\xa7\xfc\xb4\xcb\x83\x82\x7b\x2c\x48\xde\xa3\xa3\x17\xb7\x1d\xdb\xc8\x4d\xd8\x20\xa3\xad\xd7\xcc\xbc\xa7\x03\x4e\xbc\x1e\xa0\x4a\x9a\x9d\xe6\x6e\x44\x9d\xb9\xa1\xac\xf6\xc6\x3a\xca\xdc\x19\x23\x45\x96\xdc\xae\x5e\x6d\xec\x38\x8b\x3a\x34\xd1\xb1\x9b\x74\xb2\xd3\x15\x88\x20\x25\xbc\xd3\x40\x7e\xf8\xea\x64\x22\x7e\x35\x2a\xb1\x41\x4f\x14\x83\x18\xc9\xd2\xd4\xa7\x6f\x86\xdd\x83\x5b\x95\x83\xd8\x4d\x78\x9d\x06\x47\x76\x9f\xd9\x8c\x96\x22\xdb\xc1\x52\x5b\x0e\x5b\x0d\x95\x9f\xae\x39\x6e\x0f\x1e\x8a\xe0\xe2\xca\xd5\x8a\xd8\x08\xd7\x77\xc1\xeb\x02\xbd\xc8\xae\x41\x5b\xb8\xfe\x09\x55\x40\x79\xdd\x36\xbc\x73\xed\xec\xc5\x6c\xd3\x7e\x7b\x82\xdb\xb7\x6e\x2d\x77\xd3\x42\x6b\x71\xd7\xf2\x56\x78\x2a\x5a\x87\x0d\x70\xbf\x22\xc5\x19\xaf\x25\xdd\xec\x87\x72\x0c\x5f\x91\x3d\x79\x9f\x16\x6e\xf7\xb8\x8e\x29\xd3\xb0\x1a\xa6\x9d\x35\xde\x79\xf4\xe1\x44\xce\xa1\xd5\xd4\x74\xc8\x48\xa0\x11\x3c\x4b\x3c\xb0\xd4\xb6\x48\x0e\x89\x0b\x1d\x52\x60\x4c\x93\x81\x5e\x9e\x8a\xe0\xc9\xb8\xda\xef\xd8\x73\x33\x5d\x18\x49\xfe\x10\x5a\x4c\xaf\x4e\x23\x73\xa2\xc9\x81\xd9\x5b\x14\x32\x4e\x84\x99\x0f\x28\xe3\x7c\x54\xc2\x91\x9d\xf3\x54\x1c\xaf\xc5\x0b\x63\x40\x86\x1e\xa5\x5e\xcd\x5b\xb3\x1a\x77\x30\x6b\x74\x74\x8e\x67\x7b\x4f\x2a\x70\xf8\x2f\xd7\xee\x5d\x96\xe9\xa0\xfc\x3b\x5a\x5e\xec\xec\xdd\x24\xc1\xd2\x92\x2c\xa9\xac\x04\x34\x2e\x75\x00\x4c\x3d\xc0\xaf\xd1\x73\x8c\x08\xae\x25\x96\x45\xb5\x69\xc8\x75\x2a\x0f\xf2\x1a\xe1\x55\x86\xea\xf6\xf7\x56\x3d\x0f\xa9\x06\x7a\x21\x5c\xab\x46\xee\x1e\x1f\x2a\x90\x96\xb0\x19\x55\x12\xb7\xe0\xb0\x26\x83\x1d\xfe\xc5\x6d\x29\x48\xe6\x11\x96\x8f\xe1\xa0\xc3\x26\xdc\x1e\x4a\xf5\x47\x8c\xe2\x35\x20\x18\x41\x19\x1d\xa0\xc5\xa8\x4a\xc2\xbc\x7c\xc8\xe9\xd8\x52\xf9\xee\x26\x21\x8f\x1e\x56\x21\x55\x7b\x25\xaa\xf4\x28\x14\x20\xa3\x21\x91\xc3\x3f\xe7\xff\xfe\x79\xf6\x0f\x9d\xa4\x61\x7b\x93\x73\xc9\x4b\x0a\x52\xfe\x06\x5c\xc8\xd6\x80\x8e\x85\xe1\xb5\xcf\xbe\x45\xd3\x02\x95\x58\x92\xf3\xd3\x92\x1a\x59\xf7\xeb\xdb\x8f\x5d\x9a\x04\xf8\x41\x5b\xa0\x4f\xc8\xee\x7b\x03\x22\xe9\xbf\x86\x58\xe5\xc2\x8b\x29\x88\x85\xaf\x69\xc2\x56\xf8\x75\x64\xd5\xe8\xbc\x14\x72\x1b\x85\xf0\xf8\xc4\x39\x26\x09\x11\xb8\x58\x7c\x6a\x8d\x71\xa9\x5d\xa7\x9a\xb0\x66\xf5\x0f\xae\x7f\xfe\xbc\x86\x6f\xb6\x6b\xb2\x04\xd7\xfc\xf3\x3a\x31\x52\x43\x6b\x7e\x56\xad\x94\x3d\x43\xd1\x0d\xbc\x15\xab\x15\xd9\x0e\x47\xe0\x16\xe1\x1f\x43\xa6\x6f\x39\xeb\x89\x25\x28\xdd\x20\x12\x49\xb3\xbd\x0c\x65\x62\x29\x28\x3f\x61\xf0\xd7\xb7\x1f\xaf\xe1\x9b\x43\x3d\x74\x4e\x26\x54\x4e\x9f\xe0\x6d\xaa\x9b\x85\x63\x5d\x7d\x3b\x85\xf7\x71\x45\xec\x94\xc7\x4f\x3c\x57\xb6\xd6\x8e\x14\x68\x25\x77\x2c\xe1\x1a\x37\x04\x4e\x17\x04\x5b\x92\x72\x92\xc0\x53\x0e\x5b\xdc\xb5\x45\xe2\xaa\x55\xa6\xe2\x65\x8a\x60\xd0\xfa\x81\x82\xa6\xd4\xc6\x90\x23\xb5\x61\xfb\xaa\x8d\xf5\xa1\x88\xf5\x47\x7a\xf6\x2b\x22\xe4\xd1\x3a\x89\x25\xfa\x67\xea\xe4\xe7\xc6\x1a\xbe\x48\x27\x4f\x61\x41\x56\x91\xa7\xa8\x96\x5c\x67\x8e\x35\x92\x91\xf1\x6e\xa6\x37\x9c\x22\x68\x3b\xdb\x6a\xfb\x24\xd4\x6a\xc2\x8b\x74\x92\x56\x82\x9b\xc5\xed\xac\xd9\x57\xaa\x05\xce\x9e\xa5\x82\x4e\xf4\x72\xae\x1e\x22\xa1\xd7\x54\x06\xcf\xef\x66\x97\xea\xa2\xaa\x60\xce\xc9\x79\x3d\x1a\x99\xa7\xd0\x93\x1d\xd3\xe5\xd8\xb0\x5d\x8b\x6c\x5d\xed\x5e\x34\x62\x73\x81\x79\x0a\xde\xa8\x76\xaf\xe6\x59\xac\xf1\x60\x99\xa7\xdd\xa4\xdc\xb1\x9d\xa0\xca\xf9\x7f\x27\x9c\xe7\xe7\x97\xaa\x38\x88\xcf\x0e\x42\xbf\x3c\x7c\xff\xba\xfe\x16\xc4\xa5\x11\xe7\xd3\x64\x3f\xf9\xa4\x40\x33\x29\x4b\x21\xaf\x0b\x91\x9d\xf4\x5f\x04\x95\x4b\xfa\x51\xeb\xa7\x60\x5a\x01\xda\x81\xc6\xfe\xd6\xec\x5d\x55\x9a\x65\x99\x2e\xd4\xc4\x58\xbd\xb2\x8c\x3a\x1a\xbb\x22\x60\x82\x94\x80\x2a\x87\xa0\x0c\x66\x4f\xb8\xa2\x72\xd2\x98\x48\x89\x21\xa9\x2e\x77\x56\x62\x81\xd7\x0d\x31\x2f\xa8\xe6\x3a\xb9\x4f\xbb\x49\x25\x9f\x1d\x6c\x56\x88\x81\x79\x8c\x75\x46\xc9\xf7\x30\xbf\x83\xa0\xb8\xaf\x04\x49\xed\xa8\x10\x79\x47\x5d\xd9\x7c\x02\x22\x67\xbf\x5a\x8a\x96\xa2\xb3\xea\x62\xb0\x13\x77\x4c\xb8\xbc\x93\xd8\x56\xeb\xc0\x08\xf8\x0e\x27\x7c\x76\xc3\xb7\x03\x6b\xdc\x1f\x0d\xab\x2c\x52\x05\xaa\x52\xcb\x07\xdd\xe2\x93\xd2\x0a\x2c\x12\x6c\xd1\xc5\xc8\x27\x37\x94\xc7\x0d\xbb\x6e\x2f\x1d\xb4\xc8\x38\x69\x61\x54\xc9\xd2\x22\xef\x05\x85\x4b\x93\xf1\x81\x9a\x60\x44\x11\xd3\xc2\x53\x4f\x04\x4c\xed\x65\x0a\x9a\xd4\x5e\xb3\xac\x49\xed\x75\x8b\x9b\xd4\x5e\xbc\xc4\x49\xed\x45\x0b\x9d\xd4\x5e\xae\xdc\x49\xed\xc2\xa2\xa7\xd4\xcf\x38\x27\xec\x2b\x80\x52\x3b\xcf\xff\xce\x2b\x86\x52\x7b\xf5\x92\xe8\x2c\x8d\xf5\x95\x47\x97\x68\xec\xbc\x52\xa9\x53\x63\x5f\xb4\x60\x3a\x5b\x41\xbd\xc5\xd3\xa5\x5a\x3a\xb3\x90\xfa\x52\xaa\xea\x2d\xa7\xce\xd2\xd4\xc8\xd2\xea\x12\x7d\x7d\xb9\x32\xab\x53\xad\xff\x1f\xc5\xd6\x59\x06\xe8\x29\xbc\x2e\x51\xfa\x59\x45\x58\xa7\x1e\xbf\x64\x29\x76\x86\x76\xce\x2b\xcb\x52\xcb\xb4\x4a\x17\x70\x7a\xd0\xe8\x21\xa6\xae\x07\x1c\x9f\xd9\xb0\xa4\x28\x0f\x4e\x4d\x9a\xe5\xd0\x10\x6c\xee\x2a\xbd\x52\xeb\x29\xc0\x9a\x44\x06\xb0\xf7\x70\x4d\x94\xda\xa4\x3c\x6a\x1a\xe8\xc4\x73\xf6\x74\x19\x87\xf4\x01\x24\x3a\xff\xde\xa2\x72\x51\xaf\xef\xc5\x50\xb6\x3a\xb2\xc8\x8f\xc8\xe5\xa5\x28\xea\x6a\x32\xd9\x07\x7c\x4d\xb2\x2c\x5c\xe2\x41\x6b\x79\x86\xc6\xf8\x52\x69\xbf\xee\x2a\x2e\xf7\x6d\xa4\x63\x72\x4b\x67\x76\xb7\x90\xa3\xa7\x09\x73\x34\x28\xf6\x2f\xf1\xd2\xc2\xb3\x89\xcc\xb5\x9a\xb1\x7a\xd1\x76\x0d\xe2\x85\xa4\x2a\xc8\x39\x5c\x9d\x27\xce\x1d\xac\x43\x81\x0a\x2c\x61\x8e\x0b\x49\x15\x11\xc6\xaf\xf1\x5a\x82\x5a\x41\x4e\x1e\x85\x74\x8d\xd3\xd0\xbd\x7d\x9f\x4d\x58\x4b\xe8\x86\xb2\x1a\x9c\xde\x6e\x4b\xc3\xe2\xd1\xff\x81\x3d\xbe\x76\xd1\xc8\x5f\x82\xd3\xf6\x73\xe7\x5e\x4e\xe7\xd5\xe9\xf1\x21\x93\x37\xd5\xfd\x83\xf7\x36\xd0\x0d\xfc\x80\xd2\xd1\x0d\xfc\xa2\x9e\x94\xde\x3e\x1f\xbf\xb1\xe3\x59\x7a\xdd\x99\xc8\x55\xcd\xe7\x33\xb0\xb2\xdf\xc5\x19\x19\xec\x1f\xea\x01\xd5\x4e\x5c\xb9\x13\x33\x09\x4a\xfc\x1e\x0e\xcb\xc2\xfa\x20\xf7\x9b\xe3\x82\xf1\x7e\xfe\x21\x2e\x8e\xb4\xad\xe2\x52\xd9\x58\x15\xe1\xf7\xf3\x0f\xee\xdb\x81\xdc\xd0\x2b\x95\xe9\xdd\x90\x18\x8f\x07\x1e\xd1\xaf\x8f\xaa\x5e\xa9\xb3\xc6\x95\xc4\xfd\xde\x9c\x09\xed\xe7\xd4\x55\x7b\xf0\x5f\x3b\x66\x5d\x64\x28\xe5\x8e\x0b\x40\x51\xb0\x3f\xd7\xe0\x6d\x28\x19\xf6\x0b\x3c\x22\xaf\x9c\xf8\x28\x2d\x97\x94\x79\xb1\xa1\xc6\xf0\xca\x3e\x69\x3f\x92\xf2\x52\xc2\xcf\x62\xae\xda\xe9\x1b\xc9\xda\xbb\xb2\x7b\xb5\xbe\x9a\xcb\x66\xaf\xef\x92\x68\x2c\xf9\xd3\x5a\x53\x04\x4b\x1d\x54\x0e\xe8\xa3\xe1\x2e\xe4\xf9\xf0\x26\xc6\xcb\xdd\xf2\xe9\x87\x5d\xcf\xb3\x17\xdd\xb9\xd8\x1b\xb7\x6f\x6a\x34\xd7\x07\xe6\xf6\x41\x93\x3e\x51\x16\x4a\x87\xe8\x20\x3e\xe6\xee\xd7\x20\x56\x1b\x5e\xe1\xe7\x60\xa6\x51\x41\x7a\x6c\x96\x1f\x8b\x5a\x9e\x75\xd2\x41\x50\x31\xca\x31\xfb\x73\x7b\x3b\xca\x7f\x97\x52\x7b\xdc\x38\xcf\xb0\x20\x99\xa1\xa3\xfc\x38\xe3\x27\xc8\x3f\x26\xcd\x8f\x60\x74\x28\xb5\x8f\x20\xd1\x9f\x6d\xbb\xee\x86\xd6\x42\xc7\xdc\x9b\x7a\x2d\xaa\x3b\x4e\x75\x51\x73\xb0\xbe\x39\xfc\x20\x64\x64\x63\x2a\x4b\x57\x78\x91\x75\xb5\x5d\xeb\x8b\x03\x69\x8f\xb5\xc7\x38\xf8\x4f\x15\x78\x64\x3e\x22\xb0\x9c\x9c\x00\xcb\x32\xf9\xee\x81\x65\xc7\xee\x6d\xf3\x1e\x5e\xcc\xda\x05\xee\xe2\xa5\xd8\xc2\x68\xeb\x31\x9d\xac\x05\x95\x93\x75\x1e\x55\xce\xf4\xb6\xeb\x1d\x6b\xac\xdd\xaf\x59\x65\x6b\x74\x20\xbc\x83\xb4\x5d\xe0\x4b\x7b\x9f\x7d\xcd\x33\xde\x91\x1b\xd4\x51\xc3\x56\x8f\x3c\xa0\xc6\x31\x07\x93\xa7\xfc\x7e\x60\xd7\x5e\x23\xf6\x33\x26\xb1\xe7\xee\xe6\xe7\x46\xf5\xb9\x27\x73\x1c\xac\x1b\x42\xa8\x58\x33\x6c\x44\x9e\xee\x2f\x92\x01\xa1\x9e\x27\x26\x0f\x9f\x26\xa6\x53\xb2\x6e\xaf\x9c\xd4\x5b\x5b\x9d\x1d\x7a\xca\xee\xe1\x9c\xa0\x4d\xfa\x92\x68\x28\x74\x74\x5d\xff\x4d\xad\x96\xe2\x33\xa3\x6d\xf7\x65\xdc\xd4\xc6\x03\x53\x36\x79\xf5\x85\x5a\x8f\xe9\x1b\x5f\x25\xc4\x8b\xeb\xde\x96\xa0\x8e\x01\x68\x1f\x58\x1d\x5a\x1a\x30\x76\x7b\x65\xcc\xe6\xca\x24\x7d\xdb\xd6\xdb\xe3\x49\xb4\x7c\x94\xd2\xec\xc0\x28\xb1\xb7\xc3\xfe\x4a\xf3\xc8\x6e\x71\x8f\xb8\xb7\x6f\x79\xb0\xda\xd9\x67\xdc\x6e\x4f\xfa\xb0\xef\x39\x76\x42\x87\xcf\x81\x46\x12\xaa\x0e\x32\x9f\x85\xd8\xf0\x59\xcb\x48\x42\x7b\xd3\x3c\x33\xb9\x11\x07\x1d\x23\x69\x6e\xc6\x1c\x02\x3c\x03\xe0\x39\x2f\x52\x94\xdb\x1c\x3d\x79\xce\xa0\xf5\x22\x0b\x12\xed\x3e\x64\xc4\xc4\x31\x2e\x48\x5c\x16\x16\x9d\x47\xeb\xbb\x20\xf3\x18\x09\xe7\x15\x81\x4a\xb4\xb8\xff\xb7\x5d\x93\xaa\x0f\xa5\xd3\x27\xb9\xb0\xa0\x15\x67\x70\x63\xe4\xae\x4b\xe9\x69\xc3\xbf\xfa\xd0\x47\x0a\xe7\x29\xaf\x3e\x26\x8d\x20\x65\xec\x85\xa1\x4e\xc3\x76\x41\x7b\x47\x76\x43\xf9\x2d\x78\x1b\xea\x47\x5e\x5b\xc6\x7b\x07\xcf\xc2\xa2\xe6\x6f\xaf\xb1\x72\xa5\xc0\x1f\x7f\x5e\xfd\x2f\x00\x00\xff\xff\x6a\x72\xd4\xdc\xe3\x3c\x00\x00") func operatorsCoreosCom_installplansYamlBytes() ([]byte, error) { return bindataRead( @@ -145,7 +145,7 @@ func operatorsCoreosCom_installplansYaml() (*asset, error) { return a, nil } -var _operatorsCoreosCom_olmconfigsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x58\x6d\x6f\xdb\xc8\x11\xfe\xee\x5f\x31\x50\x0f\x38\x29\x27\x51\x76\xae\x48\x13\xf5\x43\x10\xe8\x9a\x83\xd1\x04\x09\x62\x37\x05\xea\xba\xc5\x88\x1c\x92\x5b\x2f\x77\xd9\x7d\xb1\xad\x6b\xfa\xdf\x8b\xd9\xe5\x9b\x2c\x51\xf6\x21\xe9\xf1\x8b\xc4\x7d\x99\x9d\x99\x67\xe6\x99\x59\x62\x2d\x3e\x93\xb1\x42\xab\x15\x60\x2d\xe8\xde\x91\xe2\x37\x9b\xdc\xbc\xb4\x89\xd0\xcb\xdb\xb3\x93\x1b\xa1\xb2\x15\xac\xbd\x75\xba\xfa\x44\x56\x7b\x93\xd2\x4f\x94\x0b\x25\x9c\xd0\xea\xa4\x22\x87\x19\x3a\x5c\x9d\x00\xa0\x52\xda\x21\x0f\x5b\x7e\x05\x48\xb5\x72\x46\x4b\x49\x66\x51\x90\x4a\x6e\xfc\x86\x36\x5e\xc8\x8c\x4c\x10\xde\x1e\x7d\x7b\x9a\x9c\xbd\x4c\x4e\x4f\x00\x14\x56\xb4\x02\x2d\xab\x54\xab\x5c\x14\x36\xd1\x35\x19\x74\xda\xd8\x24\xd5\x86\x34\xff\x54\x27\xb6\xa6\x94\x0f\x28\x8c\xf6\xf5\x0a\x0e\xae\x89\xb2\x5a\x3d\xd0\x51\xa1\x8d\x68\xdf\x01\x16\x7c\x48\xf8\x1f\xed\xfb\xf0\xee\xfd\x3a\x1c\x19\xc6\xa4\xb0\xee\xcf\xbb\xe3\xef\x84\x75\x61\xae\x96\xde\xa0\x1c\x2a\x19\x86\xad\x50\x85\x97\x68\x06\x13\x27\x00\x36\xd5\x35\xad\x60\x2d\xbd\x75\x64\x4e\x00\x1a\x9b\x1b\x3d\x16\x8d\xc1\xb7\x67\x8d\x5a\x36\x2d\xa9\xc2\x56\x49\x60\xd3\xd4\x9b\x8f\xe7\x9f\x7f\xbc\x78\x30\x01\x90\x91\x4d\x8d\xa8\x5d\xf0\x60\xa7\x26\x08\x0b\x08\xa6\xc1\x89\xff\xd4\x5a\x59\xb1\x91\x04\xb9\x36\x10\x15\xf3\x46\xa8\x82\xf7\x24\x03\x79\x6e\xcb\x9a\xea\xcd\xbf\x28\x75\x83\x61\x43\xff\xf6\xc2\x50\x36\x3c\x9a\x15\x6f\x71\x1f\x0c\xd7\x86\x91\x70\x03\x2f\xc7\x67\x10\x65\x3b\xe3\x0f\x6c\xf8\xb2\x78\x30\x0b\xc0\xa6\xc7\x9d\x90\x71\xc8\x91\x05\x57\x52\xeb\x44\xca\x1a\x7f\x81\xce\xc1\x95\xc2\x82\xa1\xda\x90\x25\x15\x83\x90\x87\x51\x35\x26\x25\x7b\xc2\x2f\xc8\xb0\x20\xb0\xa5\xf6\x32\x63\xd7\xdc\x92\x71\x60\x28\xd5\x85\x12\xbf\x74\xd2\x2d\x38\x1d\x8e\x95\xe8\xc8\x3a\x10\xca\x91\x51\x28\xe1\x16\xa5\xa7\x39\xa0\xca\xf6\x64\x57\xb8\x05\x43\x7c\x2e\x78\x35\x90\x18\xb6\xd8\x7d\x5d\xde\x6b\x43\x20\x54\xae\x57\x50\x3a\x57\xdb\xd5\x72\x59\x08\xd7\x66\x61\xaa\xab\xca\x2b\xe1\xb6\xcb\x90\x50\x62\xe3\x39\xda\x97\x19\xdd\x92\x5c\x5a\x51\x2c\xd0\xa4\xa5\x70\x94\x3a\x6f\x68\x89\xb5\x58\x04\x63\x54\xc8\xc4\xa4\xca\x7e\xd7\xc6\x83\x7d\x70\x70\xc4\xdc\x3a\x8e\x87\x9d\xa9\x90\x14\xbf\x12\x2c\x4e\x98\x18\x7e\x51\x60\x34\xb6\xc7\x84\x87\xd8\x8d\x9f\xfe\x74\x71\xd9\x47\x68\xc0\x2d\x42\xd4\x2f\x3d\xe0\xa1\x16\x2d\xf6\xac\x50\x39\x99\xb8\x33\x37\xba\x0a\x52\x49\x65\xb5\x16\xca\x85\x97\x54\x0a\x52\x0e\xac\xdf\x54\xc2\xd9\x10\xc3\x64\x1d\x03\xb9\x2f\x78\x1d\x58\x0b\x36\x04\xbe\xce\xd0\x51\xb6\xbf\xe4\x5c\xc1\x1a\x2b\x92\x6b\xb4\xf4\x9b\x63\xc7\x18\xd9\x05\x03\xf2\x64\xf4\x86\x9c\xbc\xbf\x61\x2f\xc5\x01\x5a\x42\x1d\x85\xbb\xe3\x97\x8b\x9a\x52\x06\x99\xbd\xcc\xbb\x02\xab\xa0\x1a\x10\x50\x8b\xec\x43\x47\x8d\x1e\x3e\x4e\x1c\xfc\xe4\x84\xec\x99\x03\x33\x0f\x54\x7c\xdb\x2c\x0c\x45\x07\x85\x8a\x3a\x32\x93\x33\x0f\xb4\xc4\x87\xcc\x84\x1f\xde\xbd\xef\xe4\xee\xe3\x79\x54\xd5\xc7\xd4\x0d\x6a\x09\xcb\xc7\xac\x75\x2d\x28\x5b\x5f\x7c\x1e\x59\xf6\x78\x46\xb5\xcf\x4f\x0f\x05\x32\x02\xde\x52\xc6\xcc\xd4\x9c\xc6\x46\x7d\x6f\x61\x12\x17\xc1\xfa\xe2\xf3\xa4\xb5\x71\x54\x2e\x63\xd7\x15\x4f\x10\xca\x3a\x94\x92\x32\xc0\x36\x8b\x42\xd5\x8a\x45\x6c\x0e\x77\x25\x19\x02\x6c\x87\x47\xa5\x86\xe5\x59\x27\x98\x75\xd5\x8a\x13\x1d\x1d\x94\x68\x61\x43\xa4\x06\x87\x09\x05\xa8\x46\x85\x7d\x68\xa4\xfc\xcc\xa5\x3e\xca\x70\x68\x0a\x72\x16\x50\xca\x58\xe3\x6b\x4c\x0f\xe3\x18\x9f\xbf\x96\xa4\xc0\x10\x29\x76\x53\x36\x0f\xe8\xdf\x09\x29\x99\xe9\x0d\xa1\xa3\x60\xec\xc0\x71\x76\x12\x3c\x43\x98\x96\xa3\x42\x77\x7c\xd3\x1b\x3b\xa6\x45\x8c\xa8\x8d\xd6\x92\x46\x8c\xad\x31\xbd\xc1\x82\x22\xcd\x5d\x6c\x55\x7a\xce\x65\xe6\x16\xe5\xd7\x06\xcf\xc7\x31\xc1\x3b\x41\x14\xaa\x6b\xcc\xea\xad\x4a\x63\x8d\xe3\x35\xb9\x1e\x07\xba\x51\xd9\xd8\x20\x1a\x6a\x9d\xd9\xa4\x3d\x6e\x30\x06\x35\x19\xa1\x33\x91\xa2\x94\x5b\x48\x4b\x4a\x6f\xf8\xa0\xf1\xf8\x71\xe8\xbc\xe5\xa4\x5d\xa3\x43\xa9\x8b\x8b\x58\xbb\xfe\x18\x19\x9f\x59\x47\xe4\xa2\x69\x05\xa2\x6c\xf0\xdc\x7e\x41\xe6\x4d\x28\xfc\xc7\x02\xbe\x42\x07\x53\x4a\x8a\x04\x26\x2f\x4e\xab\xc9\x2c\x81\xb7\xba\xa9\x25\x35\x1a\xac\xc8\x91\x99\x83\x56\x72\x0b\xa5\xf6\xc6\xc2\x74\x52\x4e\x66\x73\xa8\x84\xf2\x6e\xaf\x80\xf6\xcf\x74\x52\xf1\x32\x54\x19\x58\x4a\xb5\xca\x78\xa7\x9d\xcc\x42\xc1\xda\x50\xa7\x76\x96\xc4\x80\xe4\x9a\xd3\x8d\xcd\x8f\x3a\xa4\xb1\x31\xa3\x1c\xbd\x74\x5d\x3b\x12\xcb\x6b\x27\x03\xee\x84\x2b\x85\x8a\x5e\x19\x82\x70\x3c\x26\x0f\x94\x8f\x21\xc2\x8e\x7b\x9d\x15\xfc\x63\x7a\x75\xba\x78\x75\xfd\xc3\xf4\xef\x49\xfc\x33\x7b\x3d\xb5\x5f\xaa\x2f\xe5\x6c\xf6\xc3\x77\x27\xfb\xe8\x3d\xb1\x98\x44\xa4\xdb\x72\x12\xdf\xfe\xdf\x05\x85\xb1\x11\x83\x3b\xca\x21\xa1\x68\x0c\x6e\x0f\xcc\x0a\x47\xd5\x18\xe9\x0f\x2d\x5c\xb7\x67\xf4\xc5\x28\x23\x87\x42\x46\xf3\x98\x0e\x91\x81\x73\xb1\x73\x25\x48\xbd\x31\xa1\x63\x71\xcc\x47\x6d\x3b\xfb\xe6\xe3\x39\x7c\x1a\xb1\xfe\x51\x1f\xc4\xe7\x70\xfb\xde\x3f\x0b\x90\x68\xdd\xa5\x41\x65\x83\xc2\x97\xa2\x1a\x0b\x44\xee\xf9\xad\xc5\x62\x7c\xde\x10\xda\xd1\xec\x5b\x34\x00\x8f\x4e\xb3\x2d\x87\xa9\xf1\x91\x7a\x0b\x07\x6c\x18\x5b\xf9\x74\xde\x3c\x24\xb5\x0d\x55\x9e\x01\xc7\x03\x01\xbc\x0e\x6d\xd7\xad\xa6\x2c\xb6\xa6\x0c\x75\x13\xd8\x4e\x03\x2a\xed\xca\xf1\x8c\xe4\xe7\x32\x70\x5c\xbc\x92\x6c\x88\x8b\x6e\x4c\x69\xaf\x32\x32\x72\xcb\x34\xd7\x9f\x97\x96\xa8\x0a\xa6\x14\x38\xcf\x63\x71\x14\x36\x30\xcb\x8d\xd2\x77\x2a\xb0\x8a\x6a\xb8\x91\x65\x04\x8d\x3b\x89\x1c\x5d\xb9\x20\xbe\xfa\x44\x31\xa1\x79\x4f\x53\xaa\x1d\x57\xca\x71\x25\x9f\x40\x1c\x2d\xd5\xae\x80\x5b\xea\x85\x1b\x8f\xaa\x26\xa6\xbe\x05\x5e\x8d\xa8\x78\x07\x29\x7d\x85\x5c\xf6\x31\x0b\xdd\x51\x37\xa7\xb8\x10\x85\xbb\x48\x9b\x91\xb8\xd1\x3e\x36\x3c\x3d\x7c\x8f\x22\xd4\xb0\x3a\x2a\xa0\xaa\x76\xdb\xc6\x1b\x5f\xe9\xb3\x0a\xef\xdf\x91\x2a\x5c\xb9\x82\x1f\x9f\xff\xe1\xc5\xcb\x91\x85\x7a\x13\x88\x3d\xfb\x99\x14\xc5\x82\xf7\x2d\xbc\xb7\x2f\x75\x70\x1f\x0b\xee\x49\xda\x7b\x45\x52\xf4\x6b\x62\x4b\xb6\x93\x05\x77\x68\xc1\x92\x83\x0d\x72\x77\xe1\xeb\xe3\xee\xe4\xf2\x1b\xba\x41\x95\xd2\x1c\x44\x7e\xf8\x18\x61\x5b\x8e\x94\x5b\x38\x7b\x3e\x87\x4d\x83\x59\x12\xb3\x2b\xe9\x69\xfd\xea\xfe\x3a\x39\x60\x8c\xb0\xf0\x6a\xfe\x40\x53\x6e\x4d\x7d\x20\x61\x0e\xd3\x23\x4a\x72\x6d\x0d\x1f\x53\x98\xb3\x9b\xfa\x7b\x80\xb3\xa9\xb3\xe4\xb1\x48\xe0\x06\xab\x38\xd2\x44\xb7\xe9\x23\x94\x7b\xf1\xfb\xf1\x80\x11\x4a\x54\xbe\x5a\xc1\xe9\xc8\x92\xc8\xc8\xdf\x22\x3c\xa2\xa4\xbe\x9e\x21\xd3\x72\x61\xb0\xaa\xd0\x89\x14\x44\xc6\x57\xd6\x5c\x90\x19\xa6\x18\x7b\xa4\xd9\x98\x87\x2e\x6b\xe0\xfc\xef\x6d\x43\xa3\x4f\x4a\xba\x8f\x46\x67\x3e\x25\x13\xfa\xc2\xa6\xe7\x49\x87\xcc\xcb\xb7\xe4\x90\x95\x4d\x2b\x4b\xf7\x8c\x55\xf7\xc9\x25\x34\x66\x15\xa1\x12\xaa\xb0\x8d\x32\xc2\x46\xfe\x9b\x1f\x39\x97\xb7\xdd\x95\xc4\xac\xdd\x37\x5d\x16\xd0\x04\x4b\xac\xc8\xc8\xf0\x85\x09\x0a\x8f\x06\x95\x23\xca\x98\x57\x8f\xd3\x47\xd7\xba\x75\x2c\x8f\xfd\xf7\x85\x47\x99\xa4\x21\xa0\xc8\xdc\x6c\x70\xf3\xf5\x22\xf0\xd0\xb7\x23\xa0\xb3\xd3\xe7\x47\xe3\xae\x5b\x77\xe4\x7a\xd0\x36\x8f\x57\x6f\x16\x7f\xc3\xc5\x2f\xd7\xd3\xe6\xcf\xe9\xe2\xd5\x3f\xe7\xab\xeb\x67\x83\xd7\xeb\xd9\xeb\xef\x46\x24\x1d\xee\x28\xfb\x67\x27\x86\xfb\xcb\xc3\x4e\xb0\xcd\x43\x21\xd6\x39\x5c\x1a\x4f\x73\x78\x8b\xd2\xd2\x1c\xfe\xa2\x42\x9d\xfc\x4a\xa7\x91\xf2\xd5\xb8\x76\xdc\xd9\x4c\xf8\xd4\xc9\xf1\x25\x41\xa5\xe3\x6b\x1a\x75\x8f\xb5\xf3\x4f\x73\x12\x2f\x6d\x3e\x8a\xb4\x44\x38\xf8\xc2\x05\x81\x90\x21\xd7\x3a\xa1\x7b\xac\x6a\x49\x49\xaa\xab\xe5\x91\x2f\x60\x3b\x2a\xfc\x9a\x22\x77\xf6\xe2\x09\xd1\x33\xbd\x8a\x31\x72\x3d\xbd\x5a\x34\xff\x9e\xb5\x43\xb3\xd7\x7c\x23\x39\x36\x3f\x7b\xb6\x9c\xbd\x9e\x0e\x22\xef\xfa\x6a\xd1\x87\x5d\x72\xfd\x6c\xf6\x7a\x30\x37\x6b\x83\x30\x96\x8f\x15\x38\xe3\xdb\xba\x60\x9d\x36\xdc\xa9\xec\x8c\xf9\x4d\xf7\x6d\xb5\x77\x7e\x13\xb1\xf0\x9f\xff\x9e\xfc\x2f\x00\x00\xff\xff\xf7\x33\xa2\x7e\x62\x19\x00\x00") +var _operatorsCoreosCom_olmconfigsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x58\x6d\x6f\xdb\xc8\xf1\x7f\xef\x4f\x31\xd0\xff\x80\x93\x72\x12\x65\xe7\xfe\x48\x2f\xea\x0b\x23\xd0\x35\x07\xa3\x09\x12\xc4\x6e\x0a\xd4\x75\x8b\x11\x39\x24\xb7\x5e\xee\xb2\xfb\x60\x5b\xd7\xf4\xbb\x17\xb3\xcb\x27\x59\xa2\xec\x43\xd2\xf2\x8d\xc4\x7d\x98\x9d\x99\xdf\xcc\x6f\x66\x89\xb5\xf8\x4c\xc6\x0a\xad\x56\x80\xb5\xa0\x07\x47\x8a\xdf\x6c\x72\xfb\x93\x4d\x84\x5e\xde\x9d\x9d\xdc\x0a\x95\xad\x60\xed\xad\xd3\xd5\x27\xb2\xda\x9b\x94\x7e\xa6\x5c\x28\xe1\x84\x56\x27\x15\x39\xcc\xd0\xe1\xea\x04\x00\x95\xd2\x0e\x79\xd8\xf2\x2b\x40\xaa\x95\x33\x5a\x4a\x32\x8b\x82\x54\x72\xeb\x37\xb4\xf1\x42\x66\x64\x82\xf0\xf6\xe8\xbb\xd3\xe4\xe5\x69\x72\x7a\x02\xa0\xb0\xa2\x15\x68\x59\xa5\x5a\xe5\xa2\xb0\x89\xae\xc9\xa0\xd3\xc6\x26\xa9\x36\xa4\xf9\xa7\x3a\xb1\x35\xa5\x7c\x40\x61\xb4\xaf\x57\x70\x70\x4d\x94\xd5\xea\x81\x8e\x0a\x6d\x44\xfb\x0e\xb0\xe0\x43\xc2\xff\x68\xdf\x87\x77\xef\xd7\xe1\xc8\x30\x26\x85\x75\x7f\xdc\x1d\x7f\x27\xac\x0b\x73\xb5\xf4\x06\xe5\x50\xc9\x30\x6c\x85\x2a\xbc\x44\x33\x98\x38\x01\xb0\xa9\xae\x69\x05\x6b\xe9\xad\x23\x73\x02\xd0\xd8\xdc\xe8\xb1\x68\x0c\xbe\x3b\x6b\xd4\xb2\x69\x49\x15\xb6\x4a\x02\x9b\xa6\xde\x7c\xbc\xf8\xfc\xe3\xe5\xa3\x09\x80\x8c\x6c\x6a\x44\xed\x82\x07\x3b\x35\x41\x58\x40\x30\x0d\x4e\xfc\xa7\xd6\xca\x8a\x8d\x24\xc8\xb5\x81\xa8\x98\x37\x42\x15\xbc\x27\x19\xc8\x73\x5b\xd6\x54\x6f\xfe\x41\xa9\x1b\x0c\x1b\xfa\xa7\x17\x86\xb2\xe1\xd1\xac\x78\x8b\xfb\x60\xb8\x36\x8c\x84\x1b\x78\x39\x3e\x83\x28\xdb\x19\x7f\x64\xc3\x97\xc5\xa3\x59\x00\x36\x3d\xee\x84\x8c\x43\x8e\x2c\xb8\x92\x5a\x27\x52\xd6\xf8\x0b\x74\x0e\xae\x14\x16\x0c\xd5\x86\x2c\xa9\x18\x84\x3c\x8c\xaa\x31\x29\xd9\x13\x7e\x49\x86\x05\x81\x2d\xb5\x97\x19\xbb\xe6\x8e\x8c\x03\x43\xa9\x2e\x94\xf8\xb5\x93\x6e\xc1\xe9\x70\xac\x44\x47\xd6\x81\x50\x8e\x8c\x42\x09\x77\x28\x3d\xcd\x01\x55\xb6\x27\xbb\xc2\x2d\x18\xe2\x73\xc1\xab\x81\xc4\xb0\xc5\xee\xeb\xf2\x5e\x1b\x02\xa1\x72\xbd\x82\xd2\xb9\xda\xae\x96\xcb\x42\xb8\x36\x0b\x53\x5d\x55\x5e\x09\xb7\x5d\x86\x84\x12\x1b\xcf\xd1\xbe\xcc\xe8\x8e\xe4\xd2\x8a\x62\x81\x26\x2d\x85\xa3\xd4\x79\x43\x4b\xac\xc5\x22\x18\xa3\x42\x26\x26\x55\xf6\x7f\x6d\x3c\xd8\x47\x07\x47\xcc\xad\xe3\x78\xd8\x99\x0a\x49\xf1\x1b\xc1\xe2\x84\x89\xe1\x17\x05\x46\x63\x7b\x4c\x78\x88\xdd\xf8\xe9\x0f\x97\x57\x7d\x84\x06\xdc\x22\x44\xfd\xd2\x03\x1e\x6a\xd1\x62\xcf\x0a\x95\x93\x89\x3b\x73\xa3\xab\x20\x95\x54\x56\x6b\xa1\x5c\x78\x49\xa5\x20\xe5\xc0\xfa\x4d\x25\x9c\x0d\x31\x4c\xd6\x31\x90\xfb\x82\xd7\x81\xb5\x60\x43\xe0\xeb\x0c\x1d\x65\xfb\x4b\x2e\x14\xac\xb1\x22\xb9\x46\x4b\xff\x73\xec\x18\x23\xbb\x60\x40\x9e\x8d\xde\x90\x93\xf7\x37\xec\xa5\x38\x40\x4b\xa8\xa3\x70\x77\xfc\x72\x59\x53\xca\x20\xb3\x97\x79\x57\x60\x15\x54\x03\x02\x6a\x91\x7d\xec\xa8\xd1\xc3\xc7\x89\x83\x9f\x9c\x90\x3d\x73\x60\xe6\x91\x8a\x6f\x9b\x85\xa1\xe8\xa0\x50\x51\x47\x66\x72\xe6\x81\x96\xf8\x90\x99\xf0\xc3\xbb\xf7\x9d\xdc\x7d\x3c\x8f\xaa\xfa\x94\xba\x41\x2d\x61\xf9\x98\xb5\xae\x05\x65\xeb\xcb\xcf\x23\xcb\x9e\xce\xa8\xf6\xf9\xf9\xb1\x40\x46\xc0\x5b\xca\x98\x99\x9a\xd3\xd8\xa8\xef\x2d\x4c\xe2\x22\x58\x5f\x7e\x9e\xb4\x36\x8e\xca\x65\xec\xba\xe2\x09\x42\x59\x87\x52\x52\x06\xd8\x66\x51\xa8\x5a\xb1\x88\xcd\xe1\xbe\x24\x43\x80\xed\xf0\xa8\xd4\xb0\x3c\xeb\x04\xb3\xae\x5a\x71\xa2\xa3\x83\x12\x2d\x6c\x88\xd4\xe0\x30\xa1\x00\xd5\xa8\xb0\x0f\x8d\x94\x5f\xb8\xd4\x47\x19\x0e\x4d\x41\xce\x02\x4a\x19\x6b\x7c\x8d\xe9\x61\x1c\xe3\xf3\xe7\x92\x14\x18\x22\xc5\x6e\xca\xe6\x01\xfd\x7b\x21\x25\x33\xbd\x21\x74\x14\x8c\x1d\x38\xce\x4e\x82\x67\x08\xd3\x72\x54\xe8\x8e\x6f\x7a\x63\xc7\xb4\x88\x11\xb5\xd1\x5a\xd2\x88\xb1\x35\xa6\xb7\x58\x50\xa4\xb9\xcb\xad\x4a\x2f\xb8\xcc\xdc\xa1\xfc\xda\xe0\xf9\x38\x26\x78\x27\x88\x42\x75\x8d\x59\xbd\x55\x69\xac\x71\xbc\x26\xd7\xe3\x40\x37\x2a\x1b\x1b\x44\x43\xad\x33\x9b\xb4\xc7\x0d\xc6\xa0\x26\x23\x74\x26\x52\x94\x72\x0b\x69\x49\xe9\x2d\x1f\x34\x1e\x3f\x0e\x9d\xb7\x9c\xb4\x6b\x74\x28\x75\x71\x19\x6b\xd7\xef\x23\xe3\x33\xeb\x88\x5c\x34\xad\x40\x94\x0d\x9e\xdb\x2f\xc8\xbc\x09\x85\xff\x58\xc0\x57\xe8\x60\x4a\x49\x91\xc0\xe4\xd5\x69\x35\x99\x25\xf0\x56\x37\xb5\xa4\x46\x83\x15\x39\x32\x73\xd0\x4a\x6e\xa1\xd4\xde\x58\x98\x4e\xca\xc9\x6c\x0e\x95\x50\xde\xed\x15\xd0\xfe\x99\x4e\x2a\x5e\x86\x2a\x03\x4b\xa9\x56\x19\xef\xb4\x93\x59\x28\x58\x1b\xea\xd4\xce\x92\x18\x90\x5c\x73\xba\xb1\xf9\x51\x87\x34\x36\x66\x94\xa3\x97\xae\x6b\x47\x62\x79\xed\x64\xc0\xbd\x70\xa5\x50\xd1\x2b\x43\x10\x8e\xc7\xe4\x81\xf2\x31\x44\xd8\x71\xaf\xb3\x82\xbf\x4d\xaf\x4f\x17\xaf\x6f\x7e\x98\xfe\x35\x89\x7f\x66\xe7\x53\xfb\xa5\xfa\x52\xce\x66\x3f\x7c\x77\xb2\x8f\xde\x33\x8b\x49\x44\xba\x2d\x27\xf1\xed\xbf\x5d\x50\x18\x1b\x31\xb8\xa3\x1c\x12\x8a\xc6\xe0\xf6\xc0\xac\x70\x54\x8d\x91\xfe\xd0\xc2\x75\x7b\x46\x5f\x8c\x32\x72\x28\x64\x34\x8f\xe9\x10\x19\x38\x17\x3b\x57\x82\xd4\x1b\x13\x3a\x16\xc7\x7c\xd4\xb6\xb3\x6f\x3e\x5e\xc0\xa7\x11\xeb\x9f\xf4\x41\x7c\x0e\xb7\xef\xfd\xb3\x00\x89\xd6\x5d\x19\x54\x36\x28\x7c\x25\xaa\xb1\x40\xe4\x9e\xdf\x5a\x2c\xc6\xe7\x0d\xa1\x1d\xcd\xbe\x45\x03\xf0\xe8\x34\xdb\x72\x98\x1a\x9f\xa8\xb7\x70\xc0\x86\xb1\x95\xcf\xe7\xcd\x43\x52\xdb\x50\xe5\x19\x70\x3c\x10\xc0\xeb\xd0\x76\xdd\x6a\xca\x62\x6b\xca\x50\x37\x81\xed\x34\xa0\xd2\xae\x1c\xcf\x48\x7e\xae\x02\xc7\xc5\x2b\xc9\x86\xb8\xe8\xc6\x94\xf6\x2a\x23\x23\xb7\x4c\x73\xfd\x79\x69\x89\xaa\x60\x4a\x81\x8b\x3c\x16\x47\x61\x03\xb3\xdc\x2a\x7d\xaf\x02\xab\xa8\x86\x1b\x59\x46\xd0\xb8\x93\xc8\xd1\x95\x0b\xe2\xab\x4f\x14\x13\x9a\xf7\x34\xa5\xda\x71\xa5\x1c\x57\xf2\x19\xc4\xd1\x52\xed\x0a\xb8\xa5\x5e\xb8\xf1\xa8\x6a\x62\xea\x5b\xe0\xd5\x88\x8a\x77\x90\xd2\x57\xc8\x65\x1f\xb3\xd0\x1d\x75\x73\x8a\x0b\x51\xb8\x8b\xb4\x19\x89\x1b\xed\x63\xc3\xd3\xc3\xf7\x24\x42\x0d\xab\xa3\x02\xaa\x6a\xb7\x6d\xbc\xf1\x95\x3e\xab\xf0\xe1\x1d\xa9\xc2\x95\x2b\xf8\xf1\xe5\xef\x5e\xfd\x34\xb2\x50\x6f\x02\xb1\x67\xbf\x90\xa2\x58\xf0\xbe\x85\xf7\xf6\xa5\x0e\xee\x63\xc1\x3d\x49\x7b\xaf\x48\x8a\x7e\x4d\x6c\xc9\x76\xb2\xe0\x1e\x2d\x58\x72\xb0\x41\xee\x2e\x7c\x7d\xdc\x9d\x5c\x7e\x43\x37\xa8\x52\x9a\x83\xc8\x0f\x1f\x23\x6c\xcb\x91\x72\x0b\x67\x2f\xe7\xb0\x69\x30\x4b\x62\x76\x25\x3d\xad\x5f\x3f\xdc\x24\x07\x8c\x11\x16\x5e\xcf\x1f\x69\xca\xad\xa9\x0f\x24\xcc\x61\x7a\x44\x49\xae\xad\xe1\x63\x0a\x73\x76\x53\x7f\x0f\x70\x36\x75\x96\x3c\x15\x09\xdc\x60\x15\x47\x9a\xe8\x36\x7d\x84\x72\xaf\xfe\x7f\x3c\x60\x84\x12\x95\xaf\x56\x70\x3a\xb2\x24\x32\xf2\xb7\x08\x8f\x28\xa9\xaf\x67\xc8\xb4\x5c\x18\xac\x2a\x74\x22\x05\x91\xf1\x95\x35\x17\x64\x86\x29\xc6\x1e\x69\x36\xe6\xa1\xcb\x1a\x38\xff\x7b\xdb\xd0\xe8\xb3\x92\xee\xa3\xd1\x99\x4f\xc9\x84\xbe\xb0\xe9\x79\xd2\x21\xf3\xf2\x2d\x39\x64\x65\xd3\xca\xd2\x03\x63\xd5\x7d\x72\x09\x8d\x59\x45\xa8\x84\x2a\x6c\xa3\x8c\xb0\x91\xff\xe6\x47\xce\xe5\x6d\xf7\x25\x31\x6b\xf7\x4d\x97\x05\x34\xc1\x12\x2b\x32\x32\x7c\x61\x82\xc2\xa3\x41\xe5\x88\x32\xe6\xd5\xe3\xf4\xd1\xb5\x6e\x1d\xcb\x63\xff\x7d\xe1\x49\x26\x69\x08\x28\x32\x37\x1b\xdc\x7c\xbd\x08\x3c\xf4\xed\x08\xe8\xec\xf4\xe5\xd1\xb8\xeb\xd6\x1d\xb9\x1e\xb4\xcd\xe3\xf5\x9b\xc5\x5f\x70\xf1\xeb\xcd\xb4\xf9\x73\xba\x78\xfd\xf7\xf9\xea\xe6\xc5\xe0\xf5\x66\x76\xfe\xdd\x88\xa4\xc3\x1d\x65\xff\xec\xc4\x70\x7f\x79\xd8\x09\xb6\x79\x28\xc4\x3a\x87\x2b\xe3\x69\x0e\x6f\x51\x5a\x9a\xc3\x9f\x54\xa8\x93\x5f\xe9\x34\x52\xbe\x1a\xd7\x8e\x3b\x9b\x09\x9f\x3a\x39\xbe\x24\xa8\x74\x7c\x4d\xa3\xee\xb1\x76\xfe\x79\x4e\xe2\xa5\xcd\x47\x91\x96\x08\x07\x5f\xb8\x20\x10\x32\xe4\x5a\x27\xf4\x80\x55\x2d\x29\x49\x75\xb5\x3c\xf2\x05\x6c\x47\x85\xdf\x52\xe4\xce\x5e\x3d\x23\x7a\xa6\xd7\x31\x46\x6e\xa6\xd7\x8b\xe6\xdf\x8b\x76\x68\x76\xce\x37\x92\x63\xf3\xb3\x17\xcb\xd9\xf9\x74\x10\x79\x37\xd7\x8b\x3e\xec\x92\x9b\x17\xb3\xf3\xc1\xdc\xac\x0d\xc2\x58\x3e\x56\xe0\x8c\x6f\xeb\x82\x75\xda\x70\xa7\xb2\x33\xe6\x37\xdd\xb7\xd5\xde\xf9\x4d\xc4\xc2\xbf\xfe\x7d\xf2\x9f\x00\x00\x00\xff\xff\x07\xce\xfe\x5c\x62\x19\x00\x00") func operatorsCoreosCom_olmconfigsYamlBytes() ([]byte, error) { return bindataRead( @@ -165,7 +165,7 @@ func operatorsCoreosCom_olmconfigsYaml() (*asset, error) { return a, nil } -var _operatorsCoreosCom_operatorconditionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5a\x5f\x73\xdb\xb8\x11\x7f\xd7\xa7\xd8\xb9\x76\xa6\x76\x46\xa2\xec\x5c\x27\xcd\xe9\x25\x93\x71\x7b\x9d\x4c\x93\x26\x73\x71\xef\xa1\xae\xdb\x5b\x92\x2b\x09\x0d\x09\xb0\xf8\x23\x5b\xd7\xf6\xbb\x77\x16\x20\x45\x4a\x24\x25\xa7\xf1\xa4\x1d\x0f\xf8\x62\x8b\x00\x16\x8b\xfd\xf3\x5b\xfc\x40\x60\x25\x7e\x24\x6d\x84\x92\x0b\xc0\x4a\xd0\xbd\x25\xc9\xbf\x4c\xf2\xe9\xa5\x49\x84\x9a\x6f\x2e\x27\x9f\x84\xcc\x17\x70\xe5\x8c\x55\xe5\x0f\x64\x94\xd3\x19\xfd\x96\x96\x42\x0a\x2b\x94\x9c\x94\x64\x31\x47\x8b\x8b\x09\x00\x4a\xa9\x2c\xf2\x6b\xc3\x3f\x01\x32\x25\xad\x56\x45\x41\x7a\xb6\x22\x99\x7c\x72\x29\xa5\x4e\x14\x39\x69\x2f\xbc\x99\x7a\x73\x91\x5c\xbe\x4c\x2e\x26\x00\x12\x4b\x5a\x80\xaa\x48\xa3\x55\x3a\x53\x32\xf7\xb3\x98\xa4\x79\x65\x92\x4c\x69\x52\xfc\xa7\x9c\x98\x8a\x32\x9e\x68\xa5\x95\xab\xda\x61\x7b\x7d\x82\xcc\x46\x1f\xb4\xb4\x52\x5a\x34\xbf\x01\x66\xa0\x8a\xd2\xff\x1f\xd6\xf9\xbe\x96\x71\xd5\x4c\xed\xdb\x0a\x61\xec\x1f\x86\xdb\xdf\x0a\x63\x7d\x9f\xaa\x70\x1a\x8b\x21\xe5\x7d\xb3\x59\x2b\x6d\xff\xd8\xaa\xc2\x53\x67\x7b\x93\x18\x21\x57\xae\x40\x3d\x20\x62\x02\x60\x32\x55\xd1\x02\xbc\x84\x0a\x33\xca\x27\x00\xb5\x01\x6b\x89\xb3\xda\x7a\x9b\xcb\x7a\x02\x93\xad\xa9\xc4\x66\x3a\x60\xb1\xf2\xf5\x87\x37\x3f\x7e\xfb\xf1\xa0\x01\x20\x27\x93\x69\x51\x59\xef\x8e\xde\x1a\x41\x18\xc0\x3a\x04\xa0\x89\x01\x50\x4b\xb0\xdb\x8a\xe0\xa7\x5e\xff\x9f\xe0\x6e\x2d\xb2\x35\x0f\x73\x86\x72\xb0\x8a\x97\xba\xa1\x2d\x08\xb9\x54\xba\xf4\x21\xc2\x6f\xdf\xbf\x7d\x07\x98\x2a\x67\xc1\xae\x09\x8c\x45\xeb\xc5\xa2\xdc\x99\x20\xe9\x28\xc9\xb3\x2d\x40\xa5\x7f\xa7\xcc\x76\x5e\x6b\xfa\x87\x13\x9a\xf2\xee\x7a\xd8\x1a\x4d\x64\x76\x5e\x57\x9a\xe5\xda\x8e\xff\xc3\xd3\xc9\x83\xbd\xf7\x07\x86\xf9\xd7\xec\xa0\x15\x80\xed\x19\x46\x42\xce\x49\x41\xc6\x2f\xa5\xf6\x0c\xe5\xb5\x13\xbc\xb1\xd6\xc2\x80\xa6\x4a\x93\x21\x19\xd2\xa4\x59\xac\x5f\x52\xd2\x13\xfe\x91\x34\x0b\xe2\xd8\x71\x45\x1e\x6c\xa8\x2d\x68\xca\xd4\x4a\x8a\x9f\x77\xd2\x0d\xdb\x92\xa7\x2d\xd0\x92\xb1\x20\xa4\x25\x2d\xb1\x80\x0d\x16\x8e\xa6\x80\x32\xef\xc9\x2e\x71\x0b\x9a\x78\x5e\x70\xb2\x23\xd1\x0f\x31\x7d\x5d\xde\x29\x4d\xde\x7d\x0b\x58\x5b\x5b\x99\xc5\x7c\xbe\x12\xb6\xc1\x89\x4c\x95\xa5\x93\xc2\x6e\xe7\x3e\xe5\x45\xea\x38\x0f\xe7\x39\x6d\xa8\x98\x1b\xb1\x9a\xa1\xce\xd6\xc2\x52\x66\x9d\xa6\x39\x56\x62\xe6\x17\x23\x43\x72\x97\xf9\x2f\x74\x1d\x55\xe6\x60\xe2\xe0\x73\x63\xb5\x90\xab\xbd\x26\x9f\xae\x9f\xe9\x2c\x4e\xe1\x10\xcb\x41\x60\x58\x6c\xeb\x13\x7e\xc5\x66\xfc\xe1\x77\x1f\xaf\xa1\xd1\x28\xf8\x2d\xb8\xa8\xed\x3a\x60\xa1\xc6\x5b\x6c\x59\x21\x97\xa4\xc3\xc8\xa5\x56\xa5\x97\x4a\x32\xaf\x94\x90\x21\xd6\xb3\x42\x90\xb4\x60\x5c\x5a\x0a\x6b\x7c\x0c\x93\xb1\xec\xc8\xbe\xe0\x2b\x8f\xab\x90\x12\xb8\x2a\x47\x4b\x79\xbf\xcb\x1b\x09\x57\x58\x52\x71\x85\x86\xbe\xba\xef\xd8\x47\x66\xc6\x0e\x79\xb0\xf7\xba\x55\xa3\x3f\xa0\x97\xe2\x00\x0d\xd4\x8f\xba\xbb\x07\x42\x1f\x2b\xca\x00\x8b\x42\xdd\xb1\xc3\xb3\xc2\x19\x4b\x1a\x30\x2f\x85\x1c\x01\xa4\xe3\x48\x54\xe3\xd5\x14\x2a\x65\x79\xf1\x58\x14\x5b\x50\x1b\xd2\x5a\xe4\x1c\x38\x61\x8c\xa6\x4a\x69\x4b\x39\xa4\x5b\x2f\x69\x08\xc7\x8e\x2e\x74\x1c\xa4\xc2\x92\xab\x42\x6d\x4b\x0e\xc0\x7e\x63\x23\x15\xb5\xc6\xed\x40\xab\xb0\x54\x0e\x0e\x3b\xe2\x28\x7e\xea\x45\x0e\xe9\xf3\x05\x53\xee\x79\xaf\x2d\x35\x1c\x83\x28\xa4\x81\x9c\x2c\x8a\xc2\xc0\x52\x69\x50\x92\x00\x39\x04\x6c\x00\x52\x82\xcc\x69\xed\x13\xa8\xf1\x94\xcf\xb5\xd7\x1f\xde\xec\xea\x53\x3f\x0d\xe0\xb8\xdd\xc3\x33\x5c\x4d\xda\x87\xeb\x8a\x31\xb8\xa2\xd1\x76\x4d\x68\xea\x92\x3e\xd4\xcc\x1a\xbb\xc3\x44\x69\x9b\x59\xc1\xc1\xc6\x63\x61\x11\x9e\x02\x8d\xbd\xd6\x28\x8d\xb7\xe4\xb5\x28\x69\xac\xe7\x69\xa8\x3c\x26\x95\x21\x34\x54\x1b\x63\xc1\xf2\x0b\xef\x91\x9d\x0b\xed\xae\x37\xe5\x01\xfe\xd8\x7f\x61\xdd\x9c\x45\x28\x95\x5d\x53\x2f\x25\xba\xcf\x35\x7b\xb3\x2e\x7b\x29\xc1\xdd\x9a\xa4\x9f\xc4\xc9\x9c\x74\xb1\xe5\x7c\x6b\xe7\xcb\xd6\x28\x57\x94\x27\x00\x6f\x38\x0e\xd0\xb2\x82\x8c\x98\x9f\xa4\xba\x93\x53\x1e\x28\xc1\x99\x06\xdd\xbd\xc6\x3b\x89\x1c\x32\x4b\x41\x5c\x5e\x83\x18\x5f\x20\xb2\x8c\x2a\x8b\x69\x31\x12\x45\x70\x2a\x65\x9a\x27\x80\xcb\x02\x18\xb6\x67\x3c\xf1\x48\xcf\x3a\xa6\x1e\xc3\x5f\xb5\xa8\x50\xe7\xd6\xae\x44\xc9\x11\x99\xf3\x62\xda\x36\x99\x8b\x0c\x7d\xbd\x6b\xd2\xac\x05\xbf\xd6\x7d\x27\x3d\xc4\xa5\x2e\x25\x46\x49\x2a\x2b\xbb\xad\xad\xf1\x85\x36\x2b\xf1\xfe\x2d\xc9\x95\x5d\x2f\xe0\xdb\xe7\xbf\x79\xf1\x72\xa4\xa3\x4a\x0d\x17\xdc\xfc\xf7\x24\x19\x62\x07\xf6\x6e\xff\x8d\xf5\xfa\x52\x3b\x35\xdf\x9b\x27\x69\x6a\x57\xb2\x6a\xfb\xf8\xa8\xdb\xcf\x82\x3b\x34\x60\xc8\x42\x8a\xbc\x05\x76\xd5\x71\x73\x7e\xaf\x34\x08\x69\x2c\xca\x8c\xa6\x20\x96\xc3\xd3\x08\xd3\x00\x5f\xb1\x85\xcb\xe7\x53\x48\x6b\x9f\x25\x21\xbb\x92\x96\x74\xdc\xdc\xdf\x26\x03\x8b\x11\x06\xbe\x9b\x1e\x68\xca\xdb\x1b\xe7\x91\x95\xc3\xf4\x88\x92\x77\xc2\xae\x79\x5f\xe4\x81\xb8\xde\x72\x0e\x00\x31\xed\x56\x72\x2a\x12\x78\xa3\xba\x22\x7d\x32\x7d\x84\xb4\x2f\x7e\x3d\x1e\x30\x42\x8a\xd2\x95\x0b\xb8\x18\xe9\x12\x10\xf9\x31\xc2\x23\x48\x6a\x8b\x14\x32\x2c\xaf\x34\x96\xbc\x85\xc8\x40\xe4\xbc\x33\x58\x0a\xd2\xdd\x14\x63\x8b\xd4\x03\xb9\x98\xed\x19\xff\x57\xa6\x86\xd1\x07\x25\xdd\x07\xad\x72\x97\xf1\x26\x53\x2d\xfd\x96\x48\x2c\x45\xd6\x45\x5e\xde\x89\xf9\xac\x0c\x64\x04\xe8\x9e\x7d\xb5\xdb\xd6\x33\x13\x80\x92\x50\x0a\xb9\x32\xb5\x32\xbc\x45\x65\xfc\x9b\x1e\x99\x97\x87\xdd\xad\x89\x51\x3b\xd0\x9b\x5a\x9a\xf6\x2b\x31\x22\x27\x4d\x39\x20\xac\x1c\x6a\x94\x96\x28\x67\x5c\x3d\x0e\x1f\xb5\x94\x0e\xca\x63\xbb\x87\x3d\x89\x24\x35\x00\x05\xe4\xe6\x05\xd7\x3b\x64\x8f\x43\x8f\x07\x40\x97\x17\xcf\x8f\xc6\xdd\xae\xdf\x68\xa7\x0a\x2d\x93\xb1\x05\xfc\xf5\xe6\xf5\xec\xcf\x38\xfb\xf9\xf6\xac\xfe\xe7\x62\xf6\xdd\xdf\xa6\x8b\xdb\x67\x9d\x9f\xb7\xe7\xaf\x7e\x39\x22\x29\x24\xf8\x03\x63\xb8\xae\xb5\xcd\x5e\xa9\x89\x8f\xa9\x2f\xc4\x6a\x09\xd7\x9a\x69\xe1\xf7\x58\x18\x9a\xc2\x9f\xa4\xaf\x93\x5f\x68\x34\x92\xae\x1c\xd7\x8e\x77\x36\xdf\xf0\xac\xdf\x1c\xef\xe2\x55\x3a\xde\xa7\x56\x77\xa4\x8f\xd7\xf5\x61\x46\xf2\x87\x17\x6a\xd9\x05\xc2\x0e\x8b\x02\x0f\xc8\xb0\x54\x2a\xa1\x7b\x2c\xab\x82\x92\x4c\x95\xf3\x23\x2c\x6b\x4f\x85\xcf\x29\x72\x97\x2f\x1e\x10\x3d\x67\x37\x21\x46\x6e\xcf\x6e\x66\xf5\x7f\xcf\x9a\x57\xe7\xaf\xce\xfe\x92\x1c\x6d\x3f\x7f\x36\x3f\x7f\x75\xd6\x89\xbc\xdb\x9b\x59\x1b\x76\xc9\xed\xb3\xf3\x57\x9d\xb6\xf3\x7e\x10\x72\x21\x11\x19\xbd\xce\x32\xe5\xbe\x1a\xf9\x18\x8e\xf9\x53\x68\xdd\x67\x82\x21\x1b\x1a\x2e\xb8\x4f\xe9\x06\x78\x20\x13\xf2\x50\xce\x02\xe5\x4b\x3c\x5a\xd5\x39\xc5\x58\x63\x35\x8a\xc2\xa7\x16\x66\xd6\x61\xd1\xb7\xd6\x8e\x3f\x82\xd9\x1a\x4b\xe5\x23\xd1\xbf\xb6\xbc\x47\x2a\xc6\x58\xd0\xe7\x26\x91\xb5\x8d\x49\x8d\xac\x0d\x22\x6b\x8b\xac\x2d\xb2\xb6\xc8\xda\x22\x6b\x8b\xac\x2d\xb2\x36\x88\xac\xed\x50\x85\xa7\xc1\xda\x42\xf9\x58\x80\xd5\xae\xa9\x0b\xc6\x2a\xcd\x3b\x15\x58\xb2\xab\x9a\x97\x2e\xdd\x7d\x76\x6d\xad\x5f\x87\x2c\xfc\xf3\xdf\x13\xe8\xde\x2a\x78\xde\x8c\x8a\xb7\x0a\xe2\xad\x82\x78\xab\xa0\x7d\xe2\xad\x82\xa7\x7b\xab\xe0\x41\xc7\x4b\xdd\x8b\x06\xfb\x87\x4b\xe1\x36\xc0\xde\x61\x92\xdf\x95\x55\x5a\x6d\x44\xde\x0b\x4b\x38\xb8\xa6\xe0\x77\xee\xfe\x98\x29\x15\x85\xb0\x5b\x16\x51\xa2\x74\xdd\xab\x07\xf4\x75\x2e\x1e\xc4\x93\xa7\xee\x13\x4f\x9e\xc6\xfa\xc5\x93\xa7\x31\x15\xe3\xc9\x53\x3c\x79\x8a\x27\x4f\xf1\xe4\x29\x9e\x3c\xc5\x93\xa7\x78\xf2\x14\x4f\x9e\xf6\x55\x78\x1a\x27\x4f\x5d\xcb\xc5\x8b\xca\xff\x6b\x8e\x12\x89\x47\x24\x1e\x91\x78\x44\xe2\x11\x89\x47\x24\x1e\x91\x78\x44\xe2\x11\x89\x07\x44\xe2\x71\xa8\xc2\x53\x23\x1e\xff\xaf\x17\x95\x4f\xdc\x4a\x7e\xff\xf6\x5d\xe7\x83\x76\xf8\xd0\xdd\xd6\x48\x58\xe3\x86\x20\x25\x92\xbb\xba\x1f\xbf\xeb\x8c\xa9\x1b\xbf\xeb\x44\x7a\x15\xe9\x55\xa4\x57\x5f\x64\xbd\x48\xaf\x22\xbd\x8a\xf4\xea\xf0\x89\xf4\x6a\xb0\x5f\xa4\x57\xed\x13\xe9\xd5\x9e\x0a\x4f\x83\x5e\x1d\xbb\x51\xdc\x7d\x77\xea\x42\xf1\x7f\x02\x00\x00\xff\xff\x37\xf9\x98\x13\x70\x4e\x00\x00") +var _operatorsCoreosCom_operatorconditionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5a\x5f\x6f\xe3\xb8\x11\x7f\xf7\xa7\x18\x5c\x0b\x34\x59\xd8\x72\x92\x2b\xb6\x77\x7e\x59\x2c\xd2\x5e\xb1\xe8\x6e\x77\x71\x9b\xde\x43\xd3\xb4\x37\x92\xc6\x36\xbb\x12\xa9\xf2\x8f\x13\x5f\xdb\xef\x5e\x0c\x29\x59\xb2\x25\xd9\xb9\x6e\xb0\x2d\x02\xea\x25\xb1\x48\x0e\x87\xf3\xe7\x37\xfc\x51\xc4\x4a\xfc\x40\xda\x08\x25\x17\x80\x95\xa0\x07\x4b\x92\x7f\x99\xe4\xd3\x37\x26\x11\x6a\xbe\xb9\x9c\x7c\x12\x32\x5f\xc0\xb5\x33\x56\x95\xdf\x93\x51\x4e\x67\xf4\x5b\x5a\x0a\x29\xac\x50\x72\x52\x92\xc5\x1c\x2d\x2e\x26\x00\x28\xa5\xb2\xc8\xaf\x0d\xff\x04\xc8\x94\xb4\x5a\x15\x05\xe9\xd9\x8a\x64\xf2\xc9\xa5\x94\x3a\x51\xe4\xa4\xbd\xf0\x66\xea\xcd\x45\x72\x75\x91\x5c\x4c\x00\x24\x96\xb4\x00\x55\x91\x46\xab\x74\xa6\x64\xee\x67\x31\x49\xf3\xca\x24\x99\xd2\xa4\xf8\x4f\x39\x31\x15\x65\x3c\xd1\x4a\x2b\x57\xb5\xc3\xf6\xfa\x04\x99\x8d\x3e\x68\x69\xa5\xb4\x68\x7e\x03\xcc\x40\x15\xa5\xff\x3f\xac\xf3\x7d\x2d\xe3\xba\x99\xda\xb7\x15\xc2\xd8\x3f\x0c\xb7\xbf\x15\xc6\xfa\x3e\x55\xe1\x34\x16\x43\xca\xfb\x66\xb3\x56\xda\xfe\xb1\x55\x85\xa7\xce\xf6\x26\x31\x42\xae\x5c\x81\x7a\x40\xc4\x04\xc0\x64\xaa\xa2\x05\x78\x09\x15\x66\x94\x4f\x00\x6a\x03\xd6\x12\x67\xb5\xf5\x36\x97\xf5\x04\x26\x5b\x53\x89\xcd\x74\xc0\x62\xe5\xeb\x0f\x6f\x7e\xf8\xfa\xe3\x41\x03\x40\x4e\x26\xd3\xa2\xb2\xde\x1d\xbd\x35\x82\x30\x80\x75\x08\x40\x13\x03\xa0\x96\x60\xb7\x15\xc1\x8f\xbd\xfe\x3f\xc2\xfd\x5a\x64\x6b\x1e\xe6\x0c\xe5\x60\x15\x2f\x75\x43\x5b\x10\x72\xa9\x74\xe9\x43\x84\xdf\xbe\x7f\xfb\x0e\x30\x55\xce\x82\x5d\x13\x18\x8b\xd6\x8b\x45\xb9\x33\x41\xd2\x51\x92\x67\x5b\x80\x4a\xff\x4e\x99\xed\xbc\xd6\xf4\x0f\x27\x34\xe5\xdd\xf5\xb0\x35\x9a\xc8\xec\xbc\xae\x34\xcb\xb5\x1d\xff\x87\xa7\x93\x07\x7b\xef\x0f\x0c\xf3\xaf\xd9\x41\x2b\x00\xdb\x33\x8c\x84\x9c\x93\x82\x8c\x5f\x4a\xed\x19\xca\x6b\x27\x78\x63\xad\x85\x01\x4d\x95\x26\x43\x32\xa4\x49\xb3\x58\xbf\xa4\xa4\x27\xfc\x23\x69\x16\xc4\xb1\xe3\x8a\x3c\xd8\x50\x5b\xd0\x94\xa9\x95\x14\x3f\xed\xa4\x1b\xb6\x25\x4f\x5b\xa0\x25\x63\x41\x48\x4b\x5a\x62\x01\x1b\x2c\x1c\x4d\x01\x65\xde\x93\x5d\xe2\x16\x34\xf1\xbc\xe0\x64\x47\xa2\x1f\x62\xfa\xba\xbc\x53\x9a\xbc\xfb\x16\xb0\xb6\xb6\x32\x8b\xf9\x7c\x25\x6c\x83\x13\x99\x2a\x4b\x27\x85\xdd\xce\x7d\xca\x8b\xd4\x71\x1e\xce\x73\xda\x50\x31\x37\x62\x35\x43\x9d\xad\x85\xa5\xcc\x3a\x4d\x73\xac\xc4\xcc\x2f\x46\x86\xe4\x2e\xf3\x5f\xe8\x3a\xaa\xcc\xc1\xc4\xc1\xe7\xc6\x6a\x21\x57\x7b\x4d\x3e\x5d\x7f\xa6\xb3\x38\x85\x43\x2c\x07\x81\x61\xb1\xad\x4f\xf8\x15\x9b\xf1\xfb\xdf\x7d\xbc\x81\x46\xa3\xe0\xb7\xe0\xa2\xb6\xeb\x80\x85\x1a\x6f\xb1\x65\x85\x5c\x92\x0e\x23\x97\x5a\x95\x5e\x2a\xc9\xbc\x52\x42\x86\x58\xcf\x0a\x41\xd2\x82\x71\x69\x29\xac\xf1\x31\x4c\xc6\xb2\x23\xfb\x82\xaf\x3d\xae\x42\x4a\xe0\xaa\x1c\x2d\xe5\xfd\x2e\x6f\x24\x5c\x63\x49\xc5\x35\x1a\xfa\xe2\xbe\x63\x1f\x99\x19\x3b\xe4\xd1\xde\xeb\x56\x8d\xfe\x80\x5e\x8a\x03\x34\x50\x3f\xea\xee\x1e\x08\x7d\xac\x28\x03\x2c\x0a\x75\xcf\x0e\xcf\x0a\x67\x2c\x69\xc0\xbc\x14\x72\x04\x90\x8e\x23\x51\x8d\x57\x53\xa8\x94\xe5\xc5\x63\x51\x6c\x41\x6d\x48\x6b\x91\x73\xe0\x84\x31\x9a\x2a\xa5\x2d\xe5\x90\x6e\xbd\xa4\x21\x1c\x3b\xba\xd0\x71\x90\x0a\x4b\xae\x0a\xb5\x2d\x39\x00\xfb\x8d\x8d\x54\xd4\x1a\xb7\x03\xad\xc2\x52\x39\x38\xec\x88\xa3\xf8\xa9\x17\x39\xa4\xcf\x67\x4c\xb9\xe7\xbd\xb6\xd4\x70\x0c\xa2\x90\x06\x72\xb2\x28\x0a\x03\x4b\xa5\x41\x49\x02\xe4\x10\xb0\x01\x48\x09\x32\xa7\xb5\x4f\xa0\xc6\x53\x3e\xd7\x5e\x7f\x78\xb3\xab\x4f\xfd\x34\x80\xe3\x76\x0f\xcf\x70\x35\x69\x1f\xae\x2b\xc6\xe0\x8a\x46\xdb\x35\xa1\xa9\x4b\xfa\x50\x33\x6b\xec\x0e\x13\xa5\x6d\x66\x05\x07\x1b\x8f\x85\x45\x78\x0a\x34\xf6\x46\xa3\x34\xde\x92\x37\xa2\xa4\xb1\x9e\xa7\xa1\xf2\x98\x54\x86\xd0\x50\x6d\x8c\x05\xcb\x2f\xbc\x47\x76\x2e\xb4\xbb\xde\x94\x07\xf8\x63\xff\x85\x75\x73\x16\xa1\x54\x76\x4d\xbd\x94\xe8\x3e\x37\xec\xcd\xba\xec\xa5\x04\xf7\x6b\x92\x7e\x12\x27\x73\xd2\xc5\x96\xf3\xad\x9d\x2f\x5b\xa3\x5c\x51\x9e\x00\xbc\xe1\x38\x40\xcb\x0a\x32\x62\x7e\x92\xea\x5e\x4e\x79\xa0\x04\x67\x1a\x74\xf7\x1a\xef\x24\x72\xc8\x2c\x05\x71\x79\x0d\x62\x7c\x81\xc8\x32\xaa\x2c\xa6\xc5\x48\x14\xc1\xa9\x94\x69\x9e\x00\x2e\x0b\x60\xd8\x9e\xf1\xc4\x23\x3d\xeb\x98\x7a\x0a\x7f\xd5\xa2\x42\x9d\x5b\xbb\x12\x25\x47\x64\xce\x8b\x69\xdb\x64\x2e\x32\xf4\xf5\xae\x49\xb3\x16\xfc\x5a\xf7\x9d\xf4\x10\x97\xba\x94\x18\x25\xa9\xac\xec\xb6\xb6\xc6\x67\xda\xac\xc4\x87\xb7\x24\x57\x76\xbd\x80\xaf\xaf\x7e\xf3\xf2\x9b\x91\x8e\x2a\x35\x5c\x70\xf3\xdf\x93\x64\x88\x1d\xd8\xbb\xfd\x37\xd6\xeb\x4b\xed\xd4\x7c\x6f\x9e\xa4\xa9\x5d\xc9\xaa\xed\xe3\xa3\x6e\x3f\x0b\xee\xd1\x80\x21\x0b\x29\xf2\x16\xd8\x55\xc7\xcd\xf9\x9d\xd2\x20\xa4\xb1\x28\x33\x9a\x82\x58\x0e\x4f\x23\x4c\x03\x7c\xc5\x16\x2e\xaf\xa6\x90\xd6\x3e\x4b\x42\x76\x25\x2d\xe9\xb8\x7d\xb8\x4b\x06\x16\x23\x0c\x7c\x3b\x3d\xd0\x94\xb7\x37\xce\x23\x2b\x87\xe9\x11\x25\xef\x85\x5d\xf3\xbe\xc8\x03\x71\xbd\xe5\x1c\x00\x62\xda\xad\xe4\x54\x24\xf0\x46\x75\x45\xfa\x64\xfa\x08\x69\x5f\xfe\x7a\x3c\x60\x84\x14\xa5\x2b\x17\x70\x31\xd2\x25\x20\xf2\x53\x84\x47\x90\xd4\x16\x29\x64\x58\x5e\x69\x2c\x79\x0b\x91\x81\xc8\x79\x67\xb0\x14\xa4\xbb\x29\xc6\x16\xa9\x07\x72\x31\xdb\x33\xfe\xaf\x4c\x0d\xa3\x8f\x4a\xba\x0f\x5a\xe5\x2e\xe3\x4d\xa6\x5a\xfa\x2d\x91\x58\x8a\xac\x8b\xbc\xbc\x13\xf3\x59\x19\xc8\x08\xd0\x03\xfb\x6a\xb7\xad\x67\x26\x00\x25\xa1\x14\x72\x65\x6a\x65\x78\x8b\xca\xf8\x37\x3d\x32\x2f\x0f\xbb\x5f\x13\xa3\x76\xa0\x37\xb5\x34\xed\x57\x62\x44\x4e\x9a\x72\x40\x58\x39\xd4\x28\x2d\x51\xce\xb8\x7a\x1c\x3e\x6a\x29\x1d\x94\xc7\x76\x0f\x7b\x12\x49\x6a\x00\x0a\xc8\xcd\x0b\xae\x77\xc8\x1e\x87\x9e\x0e\x80\x2e\x2f\xae\x8e\xc6\xdd\xae\xdf\x68\xa7\x0a\x2d\x93\xb1\x05\xfc\xf5\xf6\xf5\xec\xcf\x38\xfb\xe9\xee\xac\xfe\xe7\x62\xf6\xed\xdf\xa6\x8b\xbb\x17\x9d\x9f\x77\xe7\xaf\x7e\x39\x22\x29\x24\xf8\x23\x63\xb8\xae\xb5\xcd\x5e\xa9\x89\x8f\xa9\x2f\xc4\x6a\x09\x37\x9a\x69\xe1\x77\x58\x18\x9a\xc2\x9f\xa4\xaf\x93\x9f\x69\x34\x92\xae\x1c\xd7\x8e\x77\x36\x5f\xf1\xac\x5f\x1d\xef\xe2\x55\x3a\xde\xa7\x56\x77\xa4\x8f\xd7\xf5\x71\x46\xf2\x87\x17\x6a\xd9\x05\xc2\x0e\x8b\x02\x0f\xc8\xb0\x54\x2a\xa1\x07\x2c\xab\x82\x92\x4c\x95\xf3\x23\x2c\x6b\x4f\x85\x9f\x53\xe4\x2e\x5f\x3e\x22\x7a\xce\x6e\x43\x8c\xdc\x9d\xdd\xce\xea\xff\x5e\x34\xaf\xce\x5f\x9d\xfd\x25\x39\xda\x7e\xfe\x62\x7e\xfe\xea\xac\x13\x79\x77\xb7\xb3\x36\xec\x92\xbb\x17\xe7\xaf\x3a\x6d\xe7\xfd\x20\xe4\x42\x22\x32\x7a\x9d\x65\xca\x7d\x31\xf2\x31\x1c\xf3\xa7\xd0\xba\xcf\x04\x43\x36\x34\x5c\x70\x9f\xd2\x0d\xf0\x40\x26\xe4\xa1\x9c\x05\xca\x97\x78\xb4\xaa\x73\x8a\xb1\xc6\x6a\x14\x85\x4f\x2d\xcc\xac\xc3\xa2\x6f\xad\x1d\x7f\x04\xb3\x35\x96\xca\x27\xa2\x7f\x6d\x79\x8f\x54\x8c\xb1\xa0\xcf\x4d\x22\x6b\x1b\x93\x1a\x59\x1b\x44\xd6\x16\x59\x5b\x64\x6d\x91\xb5\x45\xd6\x16\x59\x5b\x64\x6d\x10\x59\xdb\xa1\x0a\xcf\x83\xb5\x85\xf2\xb1\x00\xab\x5d\x53\x17\x8c\x55\x9a\x77\x2a\xb0\x64\x57\x35\x2f\x5d\xba\xfb\xec\xda\x5a\xbf\x0e\x59\xf8\xe7\xbf\x27\xd0\xbd\x55\x70\xd5\x8c\x8a\xb7\x0a\xe2\xad\x82\x78\xab\xa0\x7d\xe2\xad\x82\xe7\x7b\xab\xe0\x51\xc7\x4b\xdd\x8b\x06\xfb\x87\x4b\xe1\x36\xc0\xde\x61\x92\xdf\x95\x55\x5a\x6d\x44\xde\x0b\x4b\x38\xb8\xa6\xe0\x77\xee\xfe\x98\x29\x15\x85\xb0\x5b\x16\x51\xa2\x74\xdd\xab\x07\xf4\x65\x2e\x1e\xc4\x93\xa7\xee\x13\x4f\x9e\xc6\xfa\xc5\x93\xa7\x31\x15\xe3\xc9\x53\x3c\x79\x8a\x27\x4f\xf1\xe4\x29\x9e\x3c\xc5\x93\xa7\x78\xf2\x14\x4f\x9e\xf6\x55\x78\x1e\x27\x4f\x5d\xcb\xc5\x8b\xca\xff\x6b\x8e\x12\x89\x47\x24\x1e\x91\x78\x44\xe2\x11\x89\x47\x24\x1e\x91\x78\x44\xe2\x11\x89\x07\x44\xe2\x71\xa8\xc2\x73\x23\x1e\xff\xaf\x17\x95\x4f\xdc\x4a\x7e\xff\xf6\x5d\xe7\x83\x76\xf8\xd0\xdd\xd6\x48\x58\xe3\x86\x20\x25\x92\xbb\xba\x1f\xbf\xeb\x8c\xa9\x1b\xbf\xeb\x44\x7a\x15\xe9\x55\xa4\x57\x9f\x65\xbd\x48\xaf\x22\xbd\x8a\xf4\xea\xf0\x89\xf4\x6a\xb0\x5f\xa4\x57\xed\x13\xe9\xd5\x9e\x0a\xcf\x83\x5e\x1d\xbb\x51\xdc\x7d\x77\xea\x42\xf1\x7f\x02\x00\x00\xff\xff\xe9\x64\x2d\xe1\x70\x4e\x00\x00") func operatorsCoreosCom_operatorconditionsYamlBytes() ([]byte, error) { return bindataRead( @@ -185,7 +185,7 @@ func operatorsCoreosCom_operatorconditionsYaml() (*asset, error) { return a, nil } -var _operatorsCoreosCom_operatorgroupsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3b\x5d\x73\x1b\x37\x92\xef\xfe\x15\x5d\xca\x55\x45\x72\xf1\xc3\x76\xae\x72\x09\x5f\x5c\x2a\x3b\x76\xe9\xce\x51\x54\x96\x9c\xab\x3a\x9f\xee\x0a\x9c\x69\x72\xb0\x9a\x01\x66\x01\x0c\x29\x26\x9b\xff\xbe\xd5\x0d\xcc\x70\x86\x9c\x0f\x4a\x56\x92\xdd\x2d\xe2\x45\xe2\x00\x68\x34\xfa\xbb\x1b\x80\xc8\xe5\xcf\x68\xac\xd4\x6a\x06\x22\x97\x78\xef\x50\xd1\x2f\x3b\xb9\xfb\xce\x4e\xa4\x9e\xae\x5e\x3e\xbb\x93\x2a\x9e\xc1\x9b\xc2\x3a\x9d\x7d\x44\xab\x0b\x13\xe1\x5b\x5c\x48\x25\x9d\xd4\xea\x59\x86\x4e\xc4\xc2\x89\xd9\x33\x00\xa1\x94\x76\x82\x3e\x5b\xfa\x09\x10\x69\xe5\x8c\x4e\x53\x34\xe3\x25\xaa\xc9\x5d\x31\xc7\x79\x21\xd3\x18\x0d\x03\x2f\x97\x5e\xbd\x98\xbc\xfc\x6e\xf2\xe2\x19\x80\x12\x19\xce\x40\xe7\x68\x84\xd3\x66\x69\x74\x91\xdb\x49\xf9\xd3\x4e\x22\x6d\x50\xd3\x9f\xec\x99\xcd\x31\xa2\x45\x78\xcc\x76\x4a\x63\x8c\x87\x57\xe2\x22\x1c\x2e\xb5\x91\xe5\x6f\x80\x31\xe8\x34\xe3\xff\xfd\x1e\x7f\x0a\x30\xde\x13\x48\xfe\x9e\x4a\xeb\xfe\x6b\xbf\xef\x83\xb4\x8e\xfb\xf3\xb4\x30\x22\xdd\x45\x98\xbb\x6c\xa2\x8d\xbb\xdc\x2e\xcf\xcb\x2d\x7d\x97\x54\xcb\x22\x15\x66\x67\xde\x33\x00\x1b\xe9\x1c\x67\xc0\xd3\x72\x11\x61\xfc\x0c\x20\x50\x29\x80\x19\x07\x12\xad\x5e\x06\xa8\x36\x4a\x30\x13\xe5\x1a\x40\x20\xd5\xf9\xd5\xc5\xcf\xdf\x5c\xef\x74\x00\xc4\x68\x23\x23\x73\xc7\x34\xff\xdb\xb8\xd6\x03\xcd\xfd\x81\xb4\xe0\x12\x84\x42\x49\x07\x7a\x01\x59\x91\x3a\xe9\x50\x09\x15\x6d\x60\xa1\x0d\xfc\xf4\xe1\x47\xc8\x84\x12\x4b\x8c\x6b\x94\x6f\x00\xbc\x70\xc4\x7d\xeb\x8c\x90\xca\x43\x93\xca\x3a\x91\xa6\x2c\x1f\x04\xb5\x9a\x08\x52\x81\x74\xd6\x33\x8b\xb6\x0d\x4e\x83\x00\xe2\xb0\x5c\x48\x8c\xc1\x22\xa3\xe1\x84\x59\xa2\xdb\x0e\x6b\xac\xe8\x36\x44\x39\x3d\xff\x0b\x46\xae\xf6\xd9\xe0\x5f\x0b\x69\x30\x9e\x35\x90\x1b\x43\x29\xb6\xb5\xcf\xb9\x21\x8c\x5c\x4d\x40\x7c\xab\x29\x49\xe3\x7b\x3f\x41\xa9\x11\x1f\xfc\x4c\x88\x49\x63\xd0\x13\x22\x70\x94\x36\xc6\x3c\xe2\xbd\x25\xd2\x82\xc1\xdc\xa0\x45\xe5\x2a\x1a\x09\x15\xb6\x34\xd9\x03\x7e\x8d\x86\x00\x91\xa0\x15\x69\x4c\xc4\x5e\xa1\x71\x60\x30\xd2\x4b\x25\x7f\xa9\xa0\x5b\xa2\x26\x2d\x9b\x0a\x87\xd6\x81\x54\x0e\x8d\x12\x29\xac\x44\x5a\xe0\x08\x84\x8a\xf7\x60\x67\x62\x03\x06\x69\x5d\x28\x54\x0d\x22\x4f\xb1\xfb\xb8\xfc\xa8\x0d\xf1\x77\xa1\x67\x90\x38\x97\xdb\xd9\x74\xba\x94\xae\x34\x22\x91\xce\x32\x12\xa5\xcd\x94\xed\x81\x9c\x17\xc4\xf5\x69\x8c\x2b\x4c\xa7\x56\x2e\xc7\xc2\x44\x89\x74\x18\xb9\xc2\xe0\x54\xe4\x72\xcc\x9b\x51\x6c\x48\x26\x59\xfc\x95\x09\x66\xc7\xee\x2c\xec\x79\x6e\x9d\x91\x6a\xd9\xe8\x62\x7d\x7e\x20\xb3\x48\xcf\x49\xf0\x45\x00\xe8\x37\xbb\xe5\x09\x7d\x22\x32\x7e\xfc\xe1\xfa\x06\x4a\x8c\x3c\xdf\x3c\x8b\xb6\x43\x5b\x28\x54\x72\x8b\x28\x2b\xd5\x02\x8d\x9f\xb9\x30\x3a\x63\xa8\xa8\xe2\x5c\x4b\xe5\xf8\x47\x94\x4a\x54\x0e\x6c\x31\xcf\x48\x2f\x48\x86\xd1\x3a\x62\xe4\x3e\xe0\x37\x6c\x74\x61\x8e\x50\xe4\xb1\x70\x18\xef\x0f\xb9\x50\xf0\x46\x64\x98\xbe\x11\x16\xff\x70\xde\x11\x8f\xec\x98\x18\x72\x30\xf7\xea\x2e\x65\x7f\xc2\x9e\x8a\x03\x94\xbe\xa0\x93\xdd\x0d\xeb\x76\x9d\x63\x54\x5a\x38\x9a\xc9\x16\x4d\xa8\x1d\x13\x58\x72\x78\x97\x60\x9d\x48\xd0\x92\x0b\x51\xa4\x6e\x17\x13\x80\x22\x5f\x1a\x11\xe3\xb5\x33\xe4\x83\x36\x33\x78\xeb\x47\xee\x0c\xec\x32\x40\xbc\x45\x4c\x31\x72\xda\xec\xf7\xec\x6c\xf5\x3a\x0c\x0c\x33\xfc\x36\x1b\x5b\xfb\xda\xf6\x5b\xd2\x03\x76\x3a\x84\x2d\xb0\x0d\x71\x51\xf2\xc3\x3d\xa9\x44\xcd\x7f\x0d\x60\xbf\x3b\xc9\x2b\x24\xb9\x61\xb2\x86\xa9\x98\x63\x5a\x91\xa2\xb4\xed\x19\x6b\x1c\xdc\x24\xd8\xf8\x02\xc2\x20\x9c\x5f\xbe\x6d\xd3\x88\xfa\x06\x85\x31\x62\xd3\x31\x42\x3a\xcc\x3a\x11\x1f\x36\x29\xdb\x76\xde\x83\x7b\x30\x3a\x65\x8f\x4b\x04\xbb\x4e\xc7\x8e\xd3\x5b\xdc\x11\x08\xb8\xc3\x0d\x1b\x6b\xf6\x09\x81\x9f\x3c\xb8\x67\x59\x83\x6c\xf4\x59\x06\xee\x70\xc3\xd3\xbb\x6c\x78\x93\x2a\x9d\x6c\x2f\x01\xb7\xb9\xd5\x66\x1b\xd3\x92\xbd\xfd\xe5\x36\x3a\x07\x0d\xc9\x98\x6f\x77\xb8\xe9\xeb\xde\xe1\x13\xd1\x21\x68\xbf\xe7\x09\x7d\x60\xa2\xb3\x41\x28\xd9\x20\xf2\x3c\x95\xd8\x6e\x73\xeb\xad\xd3\x8a\x35\x5b\xb9\xd5\x07\x20\xda\x2b\x50\x75\x98\x35\xc7\xe3\xe5\xe4\x6b\xeb\x39\x4f\x1a\x94\xc8\x3c\x84\x53\x3e\x88\x1a\x62\xbf\x6f\x3f\x8b\x54\xd6\x42\x3b\xd6\xa5\x0b\x35\x82\x4b\xed\xe8\xcf\x0f\xf7\x92\xfc\x11\x89\xd3\x5b\x8d\xf6\x52\x3b\xfe\xf2\x24\x94\xf2\x08\x3e\x25\x9d\x3c\x44\x56\x33\xe5\xd5\x9d\x08\x51\xf7\xf2\x76\x02\x17\x0b\xe6\x7f\x45\x53\x69\xc9\x6f\x6a\x13\xb6\x3c\xb0\x04\x87\x75\x7e\x19\xbf\x40\x56\x58\x76\xca\x4a\xab\x31\x66\xb9\xdb\xb4\xae\x10\xe8\xa8\x4d\x83\x8c\x8f\x5e\x2c\x2c\x74\x43\x91\x85\xef\xf1\x41\x65\x4a\xa9\x04\xc4\x05\x6f\x98\xe3\x1b\xf2\x43\x32\x1a\x58\x27\x43\xb3\x44\xc8\xc9\x24\x1f\xc2\xd9\x3e\x43\xea\xdb\x80\x39\xad\x03\x1b\x14\x13\x80\xfb\x31\xe5\x93\x46\xa1\x43\x3b\x26\x17\x31\x0e\x78\x38\x9d\x75\xee\xed\x11\x93\xd8\x27\x7d\x20\x53\x71\x98\x0f\xeb\x91\xc7\x1a\x28\x6f\xf5\x33\x91\x93\x2c\xfe\x4a\xc6\x9d\x59\xfa\x1b\xe4\x42\x1a\x3b\x81\x73\x4e\x13\x53\x6c\xf4\x49\xc5\xcc\xaf\x81\xe9\x59\x8a\xd3\x38\xb2\xd3\x2b\x91\x92\x9b\x21\x2b\xa0\x00\x53\xef\x74\x28\xad\xdb\x71\xb6\x23\x58\x27\xda\x7a\x4f\xb1\x90\x98\x72\x38\x7c\x72\x87\x9b\x93\x11\x2d\xdb\xb9\x54\x5d\xa2\x4f\x2e\xd4\x89\x77\x53\x7b\x52\x5a\xf9\x34\xad\xd2\x0d\x9c\x70\xdf\xc9\xe3\xfd\x76\xaf\x87\x12\x71\xcc\xe5\x09\x91\x5e\x1d\xe0\x42\x06\x44\xae\x21\x33\x99\xc8\xfb\x45\xc6\xa2\x59\xc9\x08\xcf\xa3\x48\x17\x8a\x2b\x00\x83\x31\x5b\x87\xc4\x5c\xef\x41\x2a\x1d\x97\x88\x33\xa9\x1a\x09\x32\x8f\x04\xe1\x87\xc2\x3a\x91\x51\x02\x6b\x99\xa6\x30\x6f\xe7\x5b\x61\x31\x26\x89\x88\x31\x4f\xf5\xa6\x62\xe1\xa9\x3d\xf3\x42\x46\x59\x4d\xc9\x56\xae\x4e\x74\x47\x88\x1d\x74\xb3\x94\xc5\x46\x57\x46\xaf\x64\x8c\xf1\xf9\xd5\x45\x2b\x03\x9a\xb1\x2b\x4f\x01\x87\x69\x6a\xb9\xc6\x40\x99\x8d\xd3\x21\xb3\x69\x8d\x64\xf3\x1a\xfc\x5a\xfd\xa9\x13\xd9\xb9\xd6\x29\x8a\xfd\x7e\x1f\x11\x57\x85\x97\x61\x5c\x3b\x78\x76\xb3\x03\x27\x78\x1d\xbc\xcf\x53\x19\x49\x57\x7a\xe1\x6d\xe4\xcd\xd9\x39\x4f\x6a\x17\xf7\x8b\x05\x48\x0e\x11\x2d\xba\xd1\x36\xba\x97\x16\xe4\x52\x69\xd3\xae\x25\xfd\x06\xb9\xc7\x0c\x3f\x44\x13\x6a\xd6\xd3\xe2\xbe\x22\xee\x26\x3d\x8f\x24\xe8\xa7\x26\x98\x46\x21\x25\x2c\x51\x3a\x34\x5f\x9b\x6a\x94\x95\x68\x54\x45\xeb\x76\x02\xdf\x24\x68\x90\x8d\x4e\x54\x18\x83\xca\xa5\x1b\x70\x6b\x0d\xb6\xc8\x73\x6d\x1c\xc6\xbb\xcb\xb0\x29\x69\x05\x15\xd2\xba\x19\xcb\x2e\x6b\x1f\x9b\x3a\x91\xa6\x7a\x0d\x51\x5a\x58\x87\x26\x28\x75\xa8\x0b\x31\xfb\x33\xbd\xc2\xb2\x48\xe3\xbd\x75\x97\xeb\xcb\x13\x61\x71\x5b\x34\xb0\x45\x14\x21\xc6\x18\xfb\x8e\xe0\xf9\x71\xb1\xc0\xc8\xc9\x15\xa6\x1b\xc8\x50\x70\xf5\x4d\xb8\x2d\x4e\x4a\xb7\x5b\x4d\x8f\xe6\x96\x7c\x3b\x98\x29\xbc\x77\x65\xe9\x0a\x24\x97\xa6\x9a\x15\x3d\x53\x12\xaa\x15\x7a\x22\x2c\x2c\x84\x4c\x49\x60\xdb\xf9\x80\x51\x72\x65\x70\x25\x71\xfd\x49\x59\xb1\xc0\x77\x42\xa6\xef\xb4\x59\x0b\x13\xd7\x28\xfa\x00\x62\xb6\x2e\x53\x11\x78\x80\x98\xb4\x9f\xaa\xcf\x23\x1e\xa8\xdc\x0a\xf6\xbc\x72\x38\xe9\x66\xb4\xc5\x76\x89\x8a\xc8\x49\xd4\x5b\x97\xe4\xba\x4a\x89\x27\xeb\x04\x15\xc5\x62\xc5\xbc\xd2\x01\x30\xb8\x40\x83\x6a\xbf\xd0\x15\x18\x54\xe2\x51\x03\x54\xb9\xda\x48\x38\x91\xea\x25\xd3\x79\x8e\xa8\xca\x72\x10\xac\xa5\x4b\x40\x30\x02\xa5\x20\x2f\x3a\x52\x2e\x2e\x44\x51\x04\x4a\xe4\x09\x96\xaa\x56\xde\x6d\x9d\xf3\xdf\xe7\x1f\x2f\x2f\x2e\xdf\xcf\xd8\x8f\xf7\xf1\x70\x5f\x5b\xa5\x85\x82\x47\xf1\x26\x7c\xcd\xd1\xee\x97\x45\x7c\x93\x0a\x0a\x85\xf7\x39\x46\xb4\xa9\x39\x26\x62\x25\x49\xdb\x4d\xa8\x50\xae\xd0\x88\x79\x8a\x10\x0b\x27\x20\xd5\x96\x60\xa7\x68\x2d\x6c\x74\x01\x89\x58\x21\xc4\x88\x79\xbb\x2f\x54\x31\x1a\xeb\x84\x8a\x69\xdf\x7a\x11\x12\xc1\xe6\xf6\x61\x8e\xd4\x5b\x56\xbd\x0f\xb1\x2d\x03\xc6\xb4\x2c\x17\x75\x54\x83\xa8\xa1\x2a\xb2\x76\x43\x3d\xee\x99\x45\xbd\x7d\x9c\x68\xd6\xce\x9c\x70\xc5\x9e\x37\xe8\xa9\x9e\xf1\xf8\xaa\x7e\xe6\x7f\xb5\x55\xd0\x3e\x3e\xbc\x80\xd6\x5d\x55\x18\x43\x2a\xac\xfb\xe4\x45\xfa\x01\x65\xb3\x48\x2b\xaf\x97\xc3\x0e\xfd\x4d\x35\x74\x37\x53\x6c\x8b\x3b\xb6\x80\x9f\xd4\xff\xb6\x63\xb4\x0d\x9d\x63\x74\x42\xa6\x9e\xe0\x5a\x21\x08\x8a\x01\x5d\x89\x64\x70\x60\xcc\x15\xac\x4e\x15\xce\xaf\x2e\xa0\x8b\x19\x83\x2c\xf1\x6d\xa8\xdc\xe3\xd9\x73\x63\x84\xb2\x8c\xf0\x8d\xcc\xba\xd2\x85\x31\x64\x68\xad\x58\x76\xf7\x1b\x14\xb6\x35\x82\xf3\xdd\x5e\xe4\x3a\xbb\x69\x2f\xed\xbe\x73\x30\x11\xd8\xdf\xc3\x53\x94\xfe\xf6\xa1\x6e\xcb\x4f\xd6\x81\xa3\x0f\xcc\xbc\x8a\xdb\xae\x1a\x8d\xb1\xf7\x41\xc4\xea\xa0\x6a\x9c\xc5\x69\x97\xa0\xe9\xcb\xc9\x39\x10\x08\x27\x43\x73\xf4\xce\xc6\x9f\xe8\xc5\x68\xd2\x0d\x59\xb2\xed\x7a\x51\x22\xd4\x12\xe3\x09\xf8\x12\x85\xe0\x70\x93\x42\xef\x3b\xa5\xd7\x8a\x73\x3f\x05\x85\x2d\x0f\x40\x18\xe3\x0a\x22\x49\x97\x4f\x16\x03\x18\xd6\x9e\x28\xc2\xdc\x91\x3d\x1e\xaa\x33\x0e\xe4\xf9\x0b\x6d\x32\xe1\x66\x64\xd5\x71\xec\xba\xa5\x2a\xc8\xd4\x53\xf0\x2b\x80\xf2\xf9\x79\x52\x64\x82\xfc\xb2\x88\xd9\xb9\x54\x7d\x2a\x96\x91\x60\x37\x59\x6a\xa4\x98\xeb\xc2\x97\x10\xb7\xec\x1b\xe4\x10\xf9\xbc\x39\x72\x82\x90\xe5\x6e\x13\xa8\xf1\x85\x34\xcb\xc4\xfd\x07\x54\x4b\x97\xcc\xe0\x9b\x57\xff\xf1\xed\x77\x1d\x03\xf5\x9c\xb2\x46\x8c\xdf\xfb\x10\xa5\xe5\x78\xf3\x31\xd4\xdb\x87\x5a\xaf\x4e\x12\x79\x26\xe5\xf1\xce\x64\xb9\x1d\x53\xd5\x5f\xb7\x52\xb9\x16\x9c\xf3\xc0\x5c\x58\x8e\xc1\xfb\xc9\xf9\x8e\x72\x22\x0a\x8b\x54\x84\x23\x0a\x4f\x5b\x97\x91\xb6\x16\xe4\xbf\x7c\x35\x82\x79\xe0\xd9\xc4\x6b\xd7\x64\x6b\xd6\x3f\xdf\xdf\x4e\x5a\x36\x23\x2d\x7c\x3f\xda\xc1\x94\x72\xe5\x82\x8d\x30\x89\x69\x0f\x92\x1c\x8a\x19\xf4\x36\x3b\x84\xd5\x2d\x36\x1b\xab\x9d\x0c\x49\x82\x54\x0e\x97\xd8\x5d\x3f\x2f\xd5\x47\x2a\xf7\xed\xbf\x77\x0b\x8c\x54\x32\x2b\xb2\x19\xbc\xe8\x18\xe2\x2d\xf2\x53\x88\x87\x87\xb4\xf5\x67\x82\xcc\xf2\xd2\x88\x2c\xe3\xcc\x5f\xc6\xa8\x9c\x5c\x48\x34\x75\x15\xf3\x79\x11\x4f\x5c\xf0\x99\x47\x8d\xf8\x5f\xdb\x60\x46\x0f\x52\xba\x2b\xa3\xe3\x22\x42\x63\xb9\x00\xec\xcb\x27\x51\xdd\xf2\x6e\x72\xf4\x5a\xe9\xd3\x4c\xa8\x02\xce\xb2\x92\x45\x81\x2a\x0a\x25\xd5\xd2\x06\x64\xa4\xf5\xf6\xaf\xaf\x6a\x4b\xd3\xd6\x09\x92\xd5\x6e\xd6\xc5\x78\x27\x56\xc6\x68\x30\x06\x01\xcb\x42\x18\xa1\x1c\x62\x4c\x76\xb5\xdf\x7c\x04\x28\x35\x2b\x2f\xb6\xc7\xbc\x83\x96\x24\x18\x20\x6f\xb9\x69\xc3\xe1\x10\xd9\x97\x90\x9f\xcc\x00\xbd\x7c\xf1\xaa\x57\xee\xaa\x71\xdd\x47\x40\xc2\x39\x34\x6a\x06\xff\xf7\xf9\x7c\xfc\x3f\x62\xfc\xcb\xed\x69\xf8\xe7\xc5\xf8\xfb\xff\x1f\xcd\x6e\x9f\xd7\x7e\xde\x9e\xbd\xfe\xb7\x0e\x48\xed\x71\xee\xb6\x35\x64\x38\xf8\xda\x32\xac\x2a\xe5\x63\xc4\x8e\x58\x2f\xe0\xc6\x14\x38\x82\x77\x22\xb5\x38\x82\x4f\x8a\xfd\xe4\x17\x12\xad\x3b\xd4\xf7\x6d\x0c\x27\xb4\xea\x49\xff\x10\x46\xa9\x7f\x4c\x40\xb7\xaf\xb6\x7a\x18\x91\x68\x28\x11\xa3\x66\x08\x6b\x17\x0d\x80\x0d\x32\x2c\xb4\x9e\xe0\xbd\xc8\xf2\x14\x27\x91\xce\xa6\x3d\x17\x11\x1a\x28\x3c\xc4\xc9\xbd\xfc\xf6\x00\xe9\x39\xfd\xec\x65\xe4\xf6\xf4\xf3\x38\xfc\xf7\xbc\xfc\x74\xf6\xfa\xf4\x7f\x27\xbd\xfd\x67\xcf\xa7\x67\xaf\x4f\x6b\x92\x77\xfb\x79\xbc\x15\xbb\xc9\xed\xf3\xb3\xd7\xb5\xbe\xb3\x7d\x21\xac\xa5\x2f\x83\x99\xc8\x87\xed\x58\x1f\x85\x50\xe0\x63\x9d\xc8\xf2\x52\x22\x9b\x91\xe3\x6e\x6e\x12\xa4\x97\x1c\xe8\xa7\xae\x3b\x21\x83\x64\x1e\x8e\xbc\xd4\xe1\xc5\xd2\x66\x3d\xb4\x96\x5e\xef\x5d\x44\xa8\x2c\x7c\x63\x53\xff\xa8\x35\xce\x66\xad\xff\x23\x2e\x0e\xb8\x9e\xb1\x33\xa3\x56\xf4\x09\x84\x69\x96\xf2\xc3\xdd\xa2\xaa\xd6\xff\x3b\xdc\xd4\xe8\xbe\xe0\xd6\xba\x05\x8a\xf8\xcb\x3a\x60\x90\xc7\xb0\x87\xce\x03\xe0\x41\x95\x66\x3f\x74\x25\x5c\xf2\xa5\x27\x6c\x17\x81\xa0\x7c\xd4\xc9\xe7\xde\xb9\xc4\x08\x1b\x77\xe9\x38\xbc\x42\x11\x87\x8f\x14\x72\x18\x0c\x7d\x23\xef\xd1\x07\xac\xcf\xf6\xce\x1d\x85\x31\x20\xc8\x15\xcb\x18\xfe\xf3\xfa\xa7\xcb\xe9\x7b\x1d\xbc\x2a\x25\x41\xd6\x6b\x23\x9f\x6c\x8d\xc0\x16\x51\x02\x82\xb2\x78\x4b\xd9\xf4\x35\xf5\x4c\x32\xa1\xe4\x02\xad\x9b\x04\x68\x68\xec\xe7\x57\xb7\xdd\xe6\x91\x22\xdd\x60\x51\x39\xd0\xe5\x33\xe5\xf2\x02\x5a\x10\x25\xd6\x32\xda\x7c\x05\x93\x63\x4f\x46\x35\xd7\x71\xd8\xe4\x9a\x37\xe1\xc4\x1d\x82\x0e\x9b\x28\x10\x52\x79\xd7\xe3\x01\x4e\x48\x10\x6b\xa8\xfe\x4a\xaa\xfb\xdb\x09\x9c\xae\xb9\x8c\x7e\x42\x3f\x4f\x3c\x22\xd5\xc5\x43\xfa\x56\xf3\xa5\x01\x21\x1f\xf2\x1b\xb9\x5c\x52\xf0\xd3\xed\x0d\x12\x04\x5c\xa1\x72\x67\xec\x51\x16\xa0\x74\x0d\x88\x0a\x87\x62\xdb\xa3\xb0\x5d\x04\x3f\xbf\xba\x3d\x81\xd3\x26\x1d\x3a\x17\x93\x2a\xc6\x7b\x78\x55\x1d\x81\xe5\x3a\x3e\x0b\x55\x75\xbb\x51\x4e\xdc\x73\x06\x91\x68\x8b\xca\x97\xf6\x9d\xf6\xb5\x45\xab\x29\x27\xc6\x34\x1d\xfb\xc0\x31\x86\x35\xd7\x8e\x3a\x57\x2a\x59\xe5\x4f\xe4\x73\x61\xdc\xc0\x75\xcf\x40\x8d\x21\x45\x6a\xbb\xf9\x58\xb6\x43\x75\x88\x6f\x42\x1e\xa8\xd9\x7f\xe2\xfd\xc1\x83\x69\xa2\x3a\xce\x60\x1f\x42\x93\xcb\x9a\x0c\x3f\x8a\x26\x5b\xa7\x42\x64\x89\x75\x64\x89\x22\x11\xe6\xce\x4e\xf5\x8a\x8c\x3e\xae\xa7\x6b\x6d\xee\xa4\x5a\x8e\x49\x48\xc7\x5e\x12\xec\x94\x9d\xe3\xf4\x2b\xfe\xf3\x25\x24\x60\x07\xfb\x14\x74\xf0\x77\xb4\xff\x44\x62\x70\xa4\x30\x7d\x2c\x2d\xca\x9b\x9d\x0f\xf1\x79\x3d\x14\xb9\x2e\xd3\xc8\x1d\xb8\x64\x1b\xfc\x39\x7c\xb8\xdb\x5d\xb3\xcd\x99\x88\xbd\xf1\x16\xaa\x27\xd9\xfa\x9d\x35\x8b\x28\xce\xc5\x87\x68\x33\x0e\x0f\x35\xc6\x42\xc5\x63\xce\x48\xad\xa3\xef\x8f\x25\x71\x21\xbf\xd8\x08\x7d\xba\x78\xfb\xe7\xea\x5b\x21\x1f\x6b\x71\x0e\xb9\x2f\xe2\x0b\x4b\x33\x70\xa6\x28\x23\x6b\xeb\xb4\x11\x4b\x6c\x7e\x2b\xe6\xd5\xe5\xf7\x2d\x45\x43\x2e\x0b\xbf\xfe\xc6\x9f\xb6\x6f\x42\x44\x9a\x27\xe2\x55\x39\xf7\xf8\x32\xa4\xc6\xad\xe3\xcb\x90\xe3\xcb\x90\xe3\xcb\x90\x9d\x76\x7c\x19\xf2\xc7\xbc\x0c\x39\xbe\xec\x38\xbe\xec\x38\xbe\xec\xa8\xb7\xe3\xcb\x8e\xbe\x76\x7c\xd9\x71\x7c\xd9\x71\x7c\xd9\x71\x7c\xd9\xd1\xb1\xd4\xf1\x65\xc7\xf1\x65\xc7\xf1\x65\xc7\x0e\xb2\xc7\x97\x1d\x8f\x3b\xf5\xfc\xd7\xbe\x00\x7c\x3c\x77\xff\xe7\x38\x77\x3f\x9e\xa4\x1f\x4f\xd2\x8f\x27\xe9\xc7\x93\xf4\xe3\x49\xfa\xf1\x24\x7d\x80\x26\xc7\x93\xf4\xe3\x49\xfa\xf1\x24\xfd\x78\x92\x1e\xc6\xf7\x9d\xa4\x2f\x44\x6a\x0f\x3e\x4a\xff\x7b\x00\x00\x00\xff\xff\x96\xf8\x2f\x2d\x0d\x53\x00\x00") +var _operatorsCoreosCom_operatorgroupsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3b\x6d\x73\x1b\xb7\xd1\xdf\xfd\x2b\x76\x94\x67\x26\x92\x87\xa4\x6c\xe5\x99\x34\xe1\x17\x8f\xc6\x8e\x3d\x6a\x1d\x45\x63\xc9\xe9\x4c\x5d\xb5\x03\xde\x2d\x79\xa8\xee\x80\x2b\x80\x23\xc5\xa4\xf9\xef\x9d\x5d\xe0\x8e\x77\xe4\xbd\x50\xb2\x92\xb4\x1d\xe2\x8b\xc4\x03\xb0\x58\xec\xfb\x2e\x00\x91\xcb\x1f\xd1\x58\xa9\xd5\x14\x44\x2e\xf1\xde\xa1\xa2\x5f\x76\x72\xf7\x8d\x9d\x48\x7d\xba\x7c\xf9\xec\x4e\xaa\x78\x0a\xaf\x0b\xeb\x74\xf6\x01\xad\x2e\x4c\x84\x6f\x70\x2e\x95\x74\x52\xab\x67\x19\x3a\x11\x0b\x27\xa6\xcf\x00\x84\x52\xda\x09\xfa\x6c\xe9\x27\x40\xa4\x95\x33\x3a\x4d\xd1\x8c\x17\xa8\x26\x77\xc5\x0c\x67\x85\x4c\x63\x34\x0c\xbc\x5c\x7a\xf9\x62\x72\xf6\x62\xf2\xe2\x19\x80\x12\x19\x4e\x41\xe7\x68\x84\xd3\x66\x61\x74\x91\xdb\x49\xf9\xd3\x4e\x22\x6d\x50\xd3\x9f\xec\x99\xcd\x31\xa2\x45\x78\xcc\x66\x4a\x63\x8c\x87\x57\xe2\x22\x1c\x2e\xb4\x91\xe5\x6f\x80\x31\xe8\x34\xe3\xff\xfd\x1e\x7f\x08\x30\xde\x11\x48\xfe\x9e\x4a\xeb\xfe\xb4\xdb\xf7\x5e\x5a\xc7\xfd\x79\x5a\x18\x91\x6e\x23\xcc\x5d\x36\xd1\xc6\x5d\x6e\x96\xe7\xe5\x16\xbe\x4b\xaa\x45\x91\x0a\xb3\x35\xef\x19\x80\x8d\x74\x8e\x53\xe0\x69\xb9\x88\x30\x7e\x06\x10\xa8\x14\xc0\x8c\x03\x89\x96\x2f\x03\x54\x1b\x25\x98\x89\x72\x0d\x20\x90\xea\xfc\xea\xe2\xc7\xaf\xae\xb7\x3a\x00\x62\xb4\x91\x91\xb9\x63\x9a\xff\x6b\x5c\xeb\x81\xe6\xfe\x40\x5a\x70\x09\x42\xa1\xa4\x03\x3d\x87\xac\x48\x9d\x74\xa8\x84\x8a\xd6\x30\xd7\x06\x7e\x78\xff\x3d\x64\x42\x89\x05\xc6\x35\xca\x37\x00\x5e\x38\xe2\xbe\x75\x46\x48\xe5\xa1\x49\x65\x9d\x48\x53\x96\x0f\x82\x5a\x4d\x04\xa9\x40\x3a\xeb\x99\x45\xdb\x06\xa7\x41\x00\x71\x58\xce\x25\xc6\x60\x91\xd1\x70\xc2\x2c\xd0\x6d\x86\x35\x56\x74\x6b\xa2\x9c\x9e\xfd\x03\x23\x57\xfb\x6c\xf0\x9f\x85\x34\x18\x4f\x1b\xc8\x8d\xa1\x14\xdb\xda\xe7\xdc\x10\x46\xae\x26\x20\xbe\xd5\x94\xa4\xf1\xbd\x9f\xa0\xd4\x88\x0f\x7e\x26\xc4\xa4\x31\xe8\x09\x11\x38\x4a\x1b\x63\x1e\xf1\xde\x12\x69\xc1\x60\x6e\xd0\xa2\x72\x15\x8d\x84\x0a\x5b\x9a\xec\x00\xbf\x46\x43\x80\x48\xd0\x8a\x34\x26\x62\x2f\xd1\x38\x30\x18\xe9\x85\x92\x3f\x55\xd0\x2d\x51\x93\x96\x4d\x85\x43\xeb\x40\x2a\x87\x46\x89\x14\x96\x22\x2d\x70\x04\x42\xc5\x3b\xb0\x33\xb1\x06\x83\xb4\x2e\x14\xaa\x06\x91\xa7\xd8\x5d\x5c\xbe\xd7\x86\xf8\x3b\xd7\x53\x48\x9c\xcb\xed\xf4\xf4\x74\x21\x5d\x69\x44\x22\x9d\x65\x24\x4a\xeb\x53\xb6\x07\x72\x56\x10\xd7\x4f\x63\x5c\x62\x7a\x6a\xe5\x62\x2c\x4c\x94\x48\x87\x91\x2b\x0c\x9e\x8a\x5c\x8e\x79\x33\x8a\x0d\xc9\x24\x8b\xbf\x30\xc1\xec\xd8\xad\x85\x3d\xcf\xad\x33\x52\x2d\x1a\x5d\xac\xcf\x0f\x64\x16\xe9\x39\x09\xbe\x08\x00\xfd\x66\x37\x3c\xa1\x4f\x44\xc6\x0f\xdf\x5d\xdf\x40\x89\x91\xe7\x9b\x67\xd1\x66\x68\x0b\x85\x4a\x6e\x11\x65\xa5\x9a\xa3\xf1\x33\xe7\x46\x67\x0c\x15\x55\x9c\x6b\xa9\x1c\xff\x88\x52\x89\xca\x81\x2d\x66\x19\xe9\x05\xc9\x30\x5a\x47\x8c\xdc\x05\xfc\x9a\x8d\x2e\xcc\x10\x8a\x3c\x16\x0e\xe3\xdd\x21\x17\x0a\x5e\x8b\x0c\xd3\xd7\xc2\xe2\x6f\xce\x3b\xe2\x91\x1d\x13\x43\xf6\xe6\x5e\xdd\xa5\xec\x4e\xd8\x51\x71\x80\xd2\x17\x74\xb2\xbb\x61\xdd\xae\x73\x8c\x4a\x0b\x47\x33\xd9\xa2\x09\xb5\x65\x02\x4b\x0e\x6f\x13\xac\x13\x09\x5a\x72\x2e\x8a\xd4\x6d\x63\x02\x50\xe4\x0b\x23\x62\xbc\x76\x86\x7c\xd0\x7a\x0a\x6f\xfc\xc8\xad\x81\x5d\x06\x88\xb7\x88\x29\x46\x4e\x9b\xdd\x9e\xad\xad\x5e\x87\x81\x61\x86\xdf\x66\x63\x6b\x5f\xda\x7e\x4b\xba\xc7\x4e\x87\xb0\x05\xb6\x21\x2e\x4a\xbe\xbb\x27\x95\xa8\xf9\xaf\x01\xec\xb7\x27\x79\x85\x24\x37\x4c\xd6\x30\x15\x33\x4c\x2b\x52\x94\xb6\x3d\x63\x8d\x83\x9b\x04\x1b\x5f\x40\x18\x84\xf3\xcb\x37\x6d\x1a\x51\xdf\xa0\x30\x46\xac\x3b\x46\x48\x87\x59\x27\xe2\xc3\x26\x65\xd3\xce\x7b\x70\x0f\x46\xa7\xec\x71\x89\x60\xd7\xe9\xd8\x71\x7a\x8b\x3b\x02\x01\x77\xb8\x66\x63\xcd\x3e\x21\xf0\x93\x07\xf7\x2c\x6b\x90\x8d\x3e\xcb\xc0\x1d\xae\x79\x7a\x97\x0d\x6f\x52\xa5\x93\xed\x25\xe0\x36\xb7\xda\x6c\x63\x5a\xb2\xb7\xbf\xdc\x46\xe7\xa0\x21\x19\xf3\xed\x0e\xd7\x7d\xdd\x5b\x7c\x22\x3a\x04\xed\xf7\x3c\xa1\x0f\x4c\x74\x36\x08\x25\x1b\x44\x9e\xa7\x12\xdb\x6d\x6e\xbd\x75\x5a\xb1\x66\x2b\xb7\xfa\x00\x44\x7b\x05\xaa\x0e\xb3\xe6\x78\xbc\x9c\x7c\x69\x3d\xe7\x49\x83\x12\x99\x87\x70\xca\x07\x51\x43\xec\xf7\xed\x47\x91\xca\x5a\x68\xc7\xba\x74\xa1\x46\x70\xa9\x1d\xfd\xf9\xee\x5e\x92\x3f\x22\x71\x7a\xa3\xd1\x5e\x6a\xc7\x5f\x9e\x84\x52\x1e\xc1\xa7\xa4\x93\x87\xc8\x6a\xa6\xbc\xba\x13\x21\xea\x5e\xde\x4e\xe0\x62\xce\xfc\xaf\x68\x2a\x2d\xf9\x4d\x6d\xc2\x96\x07\x96\xe0\xb0\xce\x2f\xe3\x17\xc8\x0a\xcb\x4e\x59\x69\x35\xc6\x2c\x77\xeb\xd6\x15\x02\x1d\xb5\x69\x90\xf1\xd1\x8b\x85\x85\x6e\x28\xb2\xf0\x3d\x3e\xa8\x4c\x29\x95\x80\xb8\xe0\x0d\x73\x7c\x43\x7e\x48\x46\x03\xeb\x64\x68\x16\x08\x39\x99\xe4\x7d\x38\xdb\x67\x48\x7d\x1b\x30\xa7\x75\x60\x83\x62\x02\x70\x3f\xa6\x7c\xd2\x28\x74\x68\xc7\xe4\x22\xc6\x01\x0f\xa7\xb3\xce\xbd\x3d\x62\x12\xfb\xa4\xf7\x64\x2a\xf6\xf3\x61\x3d\xf2\x58\x03\xe5\xad\x7e\x26\x72\x92\xc5\x9f\xc9\xb8\x33\x4b\x7f\x81\x5c\x48\x63\x27\x70\xce\x69\x62\x8a\x8d\x3e\xa9\x98\xf9\x35\x30\x3d\x4b\x71\x1a\x47\x76\x7a\x29\x52\x72\x33\x64\x05\x14\x60\xea\x9d\x0e\xa5\x75\x5b\xce\x76\x04\xab\x44\x5b\xef\x29\xe6\x12\x53\x0e\x87\x8f\xee\x70\x7d\x34\xa2\x65\x3b\x97\xaa\x4b\xf4\xd1\x85\x3a\xf2\x6e\x6a\x47\x4a\x2b\x9f\xa6\x55\xba\x86\x23\xee\x3b\x7a\xbc\xdf\xee\xf5\x50\x22\x8e\xb9\x3c\x21\xd2\xab\x3d\x5c\xc8\x80\xc8\x35\x64\x26\x13\x79\xbf\xc8\x58\x34\x4b\x19\xe1\x79\x14\xe9\x42\x71\x05\x60\x30\x66\xeb\x90\x98\xeb\x1d\x48\xa5\xe3\x12\x71\x26\x55\x23\x41\xe6\x91\x20\xfc\x50\x58\x25\x32\x4a\x60\x25\xd3\x14\x66\xed\x7c\x2b\x2c\xc6\x24\x11\x31\xe6\xa9\x5e\x57\x2c\x3c\xb6\x27\x5e\xc8\x28\xab\x29\xd9\xca\xd5\x89\xee\x08\xb1\x83\x6e\x96\xb2\xd8\xe8\xca\xe8\xa5\x8c\x31\x3e\xbf\xba\x68\x65\x40\x33\x76\xe5\x29\xe0\x30\x4d\x2d\xd7\x18\x28\xb3\x71\x3a\x64\x36\xad\x91\x6c\x5e\x83\x5f\xab\x3f\x75\x22\x3b\xd3\x3a\x45\xb1\xdb\xef\x23\xe2\xaa\xf0\x32\x8c\x6b\x07\xcf\x6e\xb6\xe0\x04\xaf\x83\xf7\x79\x2a\x23\xe9\x4a\x2f\xbc\x89\xbc\x39\x3b\xe7\x49\xed\xe2\x7e\x31\x07\xc9\x21\xa2\x45\x37\xda\x44\xf7\xd2\x82\x5c\x28\x6d\xda\xb5\xa4\xdf\x20\xf7\x98\xe1\x87\x68\x42\xcd\x7a\x5a\xdc\x55\xc4\xed\xa4\xe7\x91\x04\xfd\xd8\x04\xd3\x28\xa4\x84\x25\x4a\x87\xe6\x6b\x53\x8d\xb2\x12\x8d\xaa\x68\xdd\x4e\xe0\x9b\x04\x0d\xb2\xd1\x89\x0a\x63\x50\xb9\x74\x0d\x6e\xa5\xc1\x16\x79\xae\x8d\xc3\x78\x7b\x19\x36\x25\xad\xa0\x42\x5a\x37\x65\xd9\x65\xed\x63\x53\x27\xd2\x54\xaf\x20\x4a\x0b\xeb\xd0\x04\xa5\x0e\x75\x21\x66\x7f\xa6\x97\x58\x16\x69\xbc\xb7\xee\x72\x7d\x79\x22\x2c\x6e\x8a\x06\xb6\x88\x22\xc4\x18\x63\xdf\x11\x3c\x3f\xce\xe7\x18\x39\xb9\xc4\x74\x0d\x19\x0a\xae\xbe\x09\xb7\xc1\x49\xe9\x76\xab\xe9\xd1\xdc\x90\x6f\x0b\x33\x85\xf7\xae\x2c\x5d\x81\xe4\xd2\x54\xb3\xa2\x67\x4a\x42\xb5\x42\x4f\x84\x85\xb9\x90\x29\x09\x6c\x3b\x1f\x30\x4a\xae\x0c\x2e\x25\xae\x3e\x2a\x2b\xe6\xf8\x56\xc8\xf4\xad\x36\x2b\x61\xe2\x1a\x45\x1f\x40\xcc\xd6\x65\x2a\x02\x0f\x10\x93\xf6\x53\xf5\x79\xc4\x03\x95\x5b\xc1\x9e\x57\x0e\x27\x5d\x8f\x36\xd8\x2e\x50\x11\x39\x89\x7a\xab\x92\x5c\x57\x29\xf1\x64\x95\xa0\xa2\x58\xac\x98\x55\x3a\x00\x06\xe7\x68\x50\xed\x16\xba\x02\x83\x4a\x3c\x6a\x80\x2a\x57\x1b\x09\x27\x52\xbd\x60\x3a\xcf\x10\x55\x59\x0e\x82\x95\x74\x09\x08\x46\xa0\x14\xe4\x79\x47\xca\xc5\x85\x28\x8a\x40\x89\x3c\xc1\x52\xd5\xca\xbb\xad\x73\xfe\x7c\xfe\xe1\xf2\xe2\xf2\xdd\x94\xfd\x78\x1f\x0f\x77\xb5\x55\x5a\x28\x78\x14\x6f\xc2\xd7\x1c\xed\x6e\x59\xc4\x37\xa9\xa0\x50\x78\x9f\x63\x44\x9b\x9a\x61\x22\x96\x92\xb4\xdd\x84\x0a\xe5\x12\x8d\x98\xa5\x08\xb1\x70\x02\x52\x6d\x09\x76\x8a\xd6\xc2\x5a\x17\x90\x88\x25\x42\x8c\x98\xb7\xfb\x42\x15\xa3\xb1\x4e\xa8\x98\xf6\xad\xe7\x21\x11\x6c\x6e\x1f\x66\x48\xbd\x65\xd5\x7b\x1f\xdb\x32\x60\x4c\xcb\x72\x51\x47\x35\x88\x1a\xaa\x22\x6b\x37\xd4\xe3\x9e\x59\xd4\xdb\xc7\x89\x66\xed\xcc\x09\x57\xec\x78\x83\x9e\xea\x19\x8f\xaf\xea\x67\xfe\x57\x5b\x05\xed\xc3\xc3\x0b\x68\xdd\x55\x85\x31\xa4\xc2\xba\x8f\x5e\xa4\x1f\x50\x36\x8b\xb4\xf2\x7a\x39\xec\xd0\x5f\x57\x43\xb7\x33\xc5\xb6\xb8\x63\x03\xf8\x49\xfd\x6f\x3b\x46\x9b\xd0\x39\x46\x27\x64\xea\x09\xae\x15\x82\xa0\x18\xd0\x95\x48\x06\x07\xc6\x5c\xc1\xea\x54\xe1\xfc\xea\x02\xba\x98\x31\xc8\x12\xdf\x86\xca\x3d\x9e\x3d\x37\x46\x28\xcb\x08\xdf\xc8\xac\x2b\x5d\x18\x43\x86\xd6\x8a\x45\x77\xbf\x41\x61\x5b\x23\x38\xdf\xed\x45\xae\xb3\x9b\xf6\xd2\xee\x3b\x07\x13\x81\xdd\x3d\x3c\x45\xe9\x6f\x17\xea\xa6\xfc\x64\x1d\x38\xfa\xc0\xcc\xab\xb8\xed\xaa\xd1\x18\x7b\x1f\x44\xac\x0e\xaa\xc6\x59\x9c\x76\x09\x9a\xbe\x9c\x9c\x03\x81\x70\x32\x34\x43\xef\x6c\xfc\x89\x5e\x8c\x26\x5d\x93\x25\xdb\xac\x17\x25\x42\x2d\x30\x9e\x80\x2f\x51\x08\x0e\x37\x29\xf4\xbe\x53\x7a\xa5\x38\xf7\x53\x50\xd8\xf2\x00\x84\x31\xae\x20\x92\x74\xf9\x64\x31\x80\x61\xed\x89\x22\xcc\x1d\xd9\xe3\xa1\x3a\xe3\x40\x9e\x3f\xd7\x26\x13\x6e\x4a\x56\x1d\xc7\xae\x5b\xaa\x82\x4c\x3d\x05\xbf\x02\x28\x9f\x9f\x27\x45\x26\xc8\x2f\x8b\x98\x9d\x4b\xd5\xa7\x62\x19\x09\x76\x93\xa5\x46\x8a\x99\x2e\x7c\x09\x71\xc3\xbe\x41\x0e\x91\xcf\x9b\x21\x27\x08\x59\xee\xd6\x81\x1a\x9f\x49\xb3\x4c\xdc\xbf\x47\xb5\x70\xc9\x14\xbe\x3a\xfb\xc3\xd7\xdf\x74\x0c\xd4\x33\xca\x1a\x31\x7e\xe7\x43\x94\x96\xe3\xcd\xc7\x50\x6f\x17\x6a\xbd\x3a\x49\xe4\x99\x94\xc7\x3b\x93\xc5\x66\x4c\x55\x7f\xdd\x48\xe5\x4a\x70\xce\x03\x33\x61\x39\x06\xef\x27\xe7\x5b\xca\x89\x28\x2c\x52\x11\x8e\x28\x3c\x6d\x5d\x46\xda\x5a\x90\xff\xf2\x6c\x04\xb3\xc0\xb3\x89\xd7\xae\xc9\xc6\xac\x7f\xba\xbf\x9d\xb4\x6c\x46\x5a\xf8\x76\xb4\x85\x29\xe5\xca\x05\x1b\x61\x12\xd3\x1e\x24\x39\x14\x33\xe8\x6d\x76\x08\xab\x5b\x6c\x36\x56\x3b\x19\x92\x04\xa9\x1c\x2e\xb0\xbb\x7e\x5e\xaa\x8f\x54\xee\xeb\xff\xef\x16\x18\xa9\x64\x56\x64\x53\x78\xd1\x31\xc4\x5b\xe4\xa7\x10\x0f\x0f\x69\xe3\xcf\x04\x99\xe5\x85\x11\x59\xc6\x99\xbf\x8c\x51\x39\x39\x97\x68\xea\x2a\xe6\xf3\x22\x9e\x38\xe7\x33\x8f\x1a\xf1\xbf\xb4\xc1\x8c\xee\xa5\x74\x57\x46\xc7\x45\x84\xc6\x72\x01\xd8\x97\x4f\xa2\xba\xe5\x5d\xe7\xe8\xb5\xd2\xa7\x99\x50\x05\x9c\x65\x25\x8b\x02\x55\x14\x4a\xaa\x85\x0d\xc8\x48\xeb\xed\x5f\x5f\xd5\x96\xa6\xad\x12\x24\xab\xdd\xac\x8b\xf1\x4e\xac\x8c\xd1\x60\x0c\x02\x16\x85\x30\x42\x39\xc4\x98\xec\x6a\xbf\xf9\x08\x50\x6a\x56\x5e\x6c\x8e\x79\x07\x2d\x49\x30\x40\xde\x72\xd3\x86\xc3\x21\xb2\x2f\x21\x3f\x99\x01\x7a\xf9\xe2\xac\x57\xee\xaa\x71\xdd\x47\x40\xc2\x39\x34\x6a\x0a\x7f\xfb\x74\x3e\xfe\x8b\x18\xff\x74\x7b\x1c\xfe\x79\x31\xfe\xf6\xef\xa3\xe9\xed\xf3\xda\xcf\xdb\x93\x57\xff\xd7\x01\xa9\x3d\xce\xdd\xb4\x86\x0c\x07\x5f\x5b\x86\x55\xa5\x7c\x8c\xd8\x11\xeb\x39\xdc\x98\x02\x47\xf0\x56\xa4\x16\x47\xf0\x51\xb1\x9f\xfc\x4c\xa2\x75\x87\xfa\xbe\x8d\xe1\x88\x56\x3d\xea\x1f\xc2\x28\xf5\x8f\x09\xe8\xf6\xd5\x56\xf7\x23\x12\x0d\x25\x62\xd4\x0c\x61\xed\xa2\x01\xb0\x41\x86\xb9\xd6\x13\xbc\x17\x59\x9e\xe2\x24\xd2\xd9\x69\xcf\x45\x84\x06\x0a\x0f\x71\x72\x2f\xbf\xde\x43\x7a\x8e\x3f\x79\x19\xb9\x3d\xfe\x34\x0e\xff\x3d\x2f\x3f\x9d\xbc\x3a\xfe\xeb\xa4\xb7\xff\xe4\xf9\xe9\xc9\xab\xe3\x9a\xe4\xdd\x7e\x1a\x6f\xc4\x6e\x72\xfb\xfc\xe4\x55\xad\xef\x64\x57\x08\x6b\xe9\xcb\x60\x26\xf2\x7e\x33\xd6\x47\x21\x14\xf8\x58\x27\xb2\xbc\x94\xc8\x66\xe4\xb8\x9d\x9b\x04\xe9\x25\x07\xfa\xb1\xeb\x4e\xc8\x20\x99\x87\x23\x2f\xb5\x7f\xb1\xb4\x59\x0f\xad\xa5\xd7\x3b\x17\x11\x2a\x0b\xdf\xd8\xd4\x7f\x6a\x8d\xb3\x59\xeb\xff\x80\xf3\x3d\xae\x67\x6c\xcd\xa8\x15\x7d\x02\x61\x9a\xa5\xfc\x70\xb7\xa8\xaa\xf5\xff\x0a\x37\x35\xba\x2f\xb8\xb5\x6e\x81\x22\xfe\xb2\x0e\x18\xe4\x31\xec\xa1\xf3\x00\x78\x50\xa5\xd9\x0f\x5d\x09\x97\x7c\xee\x09\xdb\x45\x20\x28\x1f\x75\xf2\xb9\x77\x2e\x31\xc2\xc6\x5d\x3a\x0e\xaf\x50\xc4\xe1\x23\x85\x1c\x06\x43\xdf\xc8\x7b\xf4\x01\xeb\xb3\xb9\x73\x47\x61\x0c\x08\x72\xc5\x32\x86\x3f\x5e\xff\x70\x79\xfa\x4e\x07\xaf\x4a\x49\x90\xf5\xda\xc8\x27\x5b\x23\xb0\x45\x94\x80\xa0\x2c\xde\x52\x36\x7d\x4d\x3d\x93\x4c\x28\x39\x47\xeb\x26\x01\x1a\x1a\xfb\xe9\xec\xb6\xdb\x3c\x52\xa4\x1b\x2c\x2a\x07\xba\x7c\xa6\x5c\x5e\x40\x0b\xa2\xc4\x5a\x46\x9b\xaf\x60\x72\xec\xc9\xa8\xe6\x3a\x0e\x9b\x5c\xf1\x26\x9c\xb8\x43\xd0\x61\x13\x05\x42\x2a\xef\x7a\x3c\xc0\x11\x09\x62\x0d\xd5\x9f\x49\x75\x7f\x39\x82\xe3\x15\x97\xd1\x8f\xe8\xe7\x91\x47\xa4\xba\x78\x48\xdf\x6a\xbe\x34\x20\xe4\x43\x7e\x23\x17\x0b\x0a\x7e\xba\xbd\x41\x82\x80\x4b\x54\xee\x84\x3d\xca\x1c\x94\xae\x01\x51\xe1\x50\x6c\x73\x14\xb6\x8d\xe0\xa7\xb3\xdb\x23\x38\x6e\xd2\xa1\x73\x31\xa9\x62\xbc\x87\xb3\xea\x08\x2c\xd7\xf1\x49\xa8\xaa\xdb\xb5\x72\xe2\x9e\x33\x88\x44\x5b\x54\xbe\xb4\xef\xb4\xaf\x2d\x5a\x4d\x39\x31\xa6\xe9\xd8\x07\x8e\x31\xac\xb8\x76\xd4\xb9\x52\xc9\x2a\x7f\x22\x9f\x0b\xe3\x06\xae\x7b\x06\x6a\x0c\x29\x52\xdb\xcd\xc7\xb2\xed\xab\x43\x7c\x13\x72\x4f\xcd\xfe\x1d\xef\x0f\xee\x4d\x13\xd5\x71\x06\xfb\x10\x9a\x5c\xd6\x64\xf8\x51\x34\xd9\x38\x15\x22\x4b\xac\x23\x4b\x14\x89\x30\x77\xf6\x54\x2f\xc9\xe8\xe3\xea\x74\xa5\xcd\x9d\x54\x8b\x31\x09\xe9\xd8\x4b\x82\x3d\x65\xe7\x78\xfa\x05\xff\xf9\x1c\x12\xb0\x83\x7d\x0a\x3a\xf8\x3b\xda\xbf\x23\x31\x38\x52\x38\x7d\x2c\x2d\xca\x9b\x9d\x0f\xf1\x79\x3d\x14\xb9\x2e\xd3\xc8\x2d\xb8\x64\x1b\xfc\x39\x7c\xb8\xdb\x5d\xb3\xcd\x99\x88\xbd\xf1\x16\xaa\x27\xd9\xfa\x95\x35\x8b\x28\xce\xc5\x87\x68\x3d\x0e\x0f\x35\xc6\x42\xc5\x63\xce\x48\xad\xa3\xef\x8f\x25\x71\x21\x3f\xdb\x08\x7d\xbc\x78\xf3\xfb\xea\x5b\x21\x1f\x6b\x71\xf6\xb9\x2f\xe2\x0b\x4b\x53\x70\xa6\x28\x23\x6b\xeb\xb4\x11\x0b\x6c\x7e\x2b\x66\xd5\xe5\xf7\x0d\x45\x43\x2e\x0b\x3f\xff\xc2\x9f\x36\x6f\x42\x44\x9a\x27\xe2\xac\x9c\x7b\x78\x19\x52\xe3\xd6\xe1\x65\xc8\xe1\x65\xc8\xe1\x65\xc8\x56\x3b\xbc\x0c\xf9\x6d\x5e\x86\x1c\x5e\x76\x1c\x5e\x76\x1c\x5e\x76\xd4\xdb\xe1\x65\x47\x5f\x3b\xbc\xec\x38\xbc\xec\x38\xbc\xec\x38\xbc\xec\xe8\x58\xea\xf0\xb2\xe3\xf0\xb2\xe3\xf0\xb2\x63\x0b\xd9\xc3\xcb\x8e\xc7\x9d\x7a\xfe\x6f\x5f\x00\x3e\x9c\xbb\xff\x77\x9c\xbb\x1f\x4e\xd2\x0f\x27\xe9\x87\x93\xf4\xc3\x49\xfa\xe1\x24\xfd\x70\x92\x3e\x40\x93\xc3\x49\xfa\xe1\x24\xfd\x70\x92\x7e\x38\x49\x0f\xe3\xfb\x4e\xd2\xe7\x22\xb5\x7b\x1f\xa5\xff\x3b\x00\x00\xff\xff\x33\x8d\x09\x7c\x0d\x53\x00\x00") func operatorsCoreosCom_operatorgroupsYamlBytes() ([]byte, error) { return bindataRead( @@ -205,7 +205,7 @@ func operatorsCoreosCom_operatorgroupsYaml() (*asset, error) { return a, nil } -var _operatorsCoreosCom_operatorsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x1a\xcb\x92\xdb\x36\xf2\x3e\x5f\xd1\x25\x1f\x9c\x54\x89\x52\xec\xbd\xa4\xe6\x36\x35\x76\xb6\x66\x37\x3b\x71\x79\xc6\xbe\xa4\x72\x68\x91\x2d\x11\x2b\x12\x60\xd0\xa0\x34\x5a\xaf\xff\x7d\xab\x01\x50\x22\xf5\x22\x27\x96\x77\x70\x91\x84\x47\xbf\x9f\x80\xb0\x52\x9f\xc9\xb2\x32\xfa\x1a\xb0\x52\xf4\xe4\x48\xcb\x2f\x9e\x2c\x7f\xe6\x89\x32\xd3\xd5\x9b\xab\xa5\xd2\xd9\x35\xdc\xd6\xec\x4c\xf9\x91\xd8\xd4\x36\xa5\x77\x34\x57\x5a\x39\x65\xf4\x55\x49\x0e\x33\x74\x78\x7d\x05\x80\x5a\x1b\x87\x32\xcd\xf2\x13\x20\x35\xda\x59\x53\x14\x64\x93\x05\xe9\xc9\xb2\x9e\xd1\xac\x56\x45\x46\xd6\x03\x6f\x50\xaf\x7e\x9a\xbc\xf9\x79\xf2\xd3\x15\x80\xc6\x92\xae\xc1\x54\x64\xd1\x19\xcb\x93\xdd\xb7\xd4\x58\x32\xf2\x51\x5e\x71\x45\xa9\xc0\x5f\x58\x53\x57\xed\xdd\xad\x3d\x01\x54\x43\x06\x3a\x5a\x18\xab\x9a\xdf\x00\x09\x98\xa2\xf4\xdf\x03\x7b\xbf\x45\x18\x7e\xaa\x50\xec\xfe\xd9\x99\xfe\x55\xb1\xf3\x4b\x55\x51\x5b\x2c\x5a\x38\xfd\x2c\x2b\xbd\xa8\x0b\xb4\xbb\xf9\x2b\x00\x4e\x4d\x45\xd7\x70\x5b\xd4\xec\x48\x26\x22\xbb\x91\x86\x24\xf2\xba\x7a\x13\x49\xe2\x34\xa7\x12\x1b\x02\x41\x40\xe9\x9b\x0f\x77\x9f\xff\xf6\xb0\xb7\x00\x90\x11\xa7\x56\x55\xce\x0b\xaf\xa1\x11\x2c\x55\x96\x98\xb4\x63\x40\x48\x03\xda\x2d\x41\x93\xd6\x71\xb7\x11\xc2\xcc\xec\xdf\x94\xba\xd6\x74\x65\x65\xb3\x6b\x49\x29\x8c\x96\x91\x74\xe6\xf7\xe8\xf8\x6f\xb2\xb7\x0a\x20\xe4\x87\x93\x90\x89\xc5\x10\x83\xcb\xa9\x11\x04\x65\x91\x67\x30\x73\x70\xb9\xe2\x1d\x07\xde\x86\x64\x1a\x75\xa4\x73\x72\x00\xfc\x81\xac\x00\x02\xce\x4d\x5d\x64\x62\x6a\x2b\xb2\x0e\x2c\xa5\x66\xa1\xd5\x7f\xb6\xd0\x19\x9c\xf1\x68\x0b\x74\xc4\x0e\x94\x76\x64\x35\x16\xb0\xc2\xa2\xa6\x31\xa0\xce\x0e\x60\x97\xb8\x01\x4b\x82\x17\x6a\xdd\x82\xe8\x8f\xf0\x21\x2d\xff\x32\x96\x40\xe9\xb9\xb9\x86\xdc\xb9\x8a\xaf\xa7\xd3\x85\x72\x8d\x13\xa5\xa6\x2c\x6b\xad\xdc\x66\xea\xfd\x41\xcd\x6a\xb1\x9c\x69\x46\x2b\x2a\xa6\xac\x16\x09\xda\x34\x57\x8e\x52\x57\x5b\x9a\x62\xa5\x12\xcf\x8c\xf6\x8e\x34\x29\xb3\x57\x36\xba\x1d\xef\x21\x0e\x8a\x64\x67\x95\x5e\x74\x96\xbc\x51\x3f\x53\x59\x62\xf1\xa0\xc4\x76\x02\xc0\xc0\xec\x4e\x27\x32\x25\x62\xfc\xf8\xfe\xe1\x11\x1a\x8a\x82\xde\x82\x8a\x5a\x06\x78\x5a\x5b\x22\x59\xa5\xe7\x64\xc3\xc9\xb9\x35\xa5\x87\x4a\x3a\xab\x8c\xd2\xce\xff\x48\x0b\x45\xda\x01\xd7\xb3\x52\x39\x31\x8b\x3f\x6b\x62\x27\x8a\x3c\x04\x7c\xeb\x83\x0e\xcc\x08\xea\x2a\x43\x47\xd9\xe1\x96\x3b\x0d\xb7\x58\x52\x71\x8b\x4c\xff\x77\xdd\x89\x8e\x38\x11\x85\x0c\xd6\x5e\x3b\xa4\x1e\x1e\x38\xf0\x5b\x80\x26\x20\x9e\x54\x77\x13\x23\x1e\x2a\x4a\x3b\xae\x98\x11\x2b\x2b\xae\xe2\xd0\x91\x38\x5c\x27\x10\x0e\x41\xed\xd0\xd5\x3c\x0c\xb9\xdf\xda\x41\x6f\x66\x2c\x76\xd1\xc2\x8f\x7a\x17\xd0\x50\x0c\xd2\x31\xa4\xa6\xac\x8c\x16\xbb\x1a\x4a\xd5\xe9\x60\x06\x3e\x2b\x35\xf0\x0e\xd7\xf6\x68\xbf\xdd\x6e\x8d\xf3\x33\xe2\xad\xf1\x0b\x0f\xe8\x02\x38\xa6\xc0\xd0\x91\x70\x3b\x80\x5a\x19\x62\xe5\xa2\x8b\x63\x34\x49\xba\x28\x70\x46\xc5\x03\x15\x94\x1e\xaa\xa7\x8f\x63\x19\x9d\xf3\xc7\xb7\xec\x31\xff\x6b\xfb\x44\x08\x0d\x1e\x08\xfc\x59\x93\xdd\x80\x59\x91\x95\x68\x41\x4e\x14\xb7\x13\x4a\xcd\x94\x49\xcc\x65\x7f\xb2\x23\x96\xd7\x67\x94\x39\x50\x4c\x43\x58\x05\x1f\xc2\x5d\x9a\xbf\x7f\x92\x88\xd4\xca\xba\x03\xb8\xde\x3f\x18\x19\x57\xec\xd9\x0c\x02\xe0\x46\x28\x51\x69\xa5\x0f\x7a\xf0\x98\x53\x67\x06\xd0\x12\xdc\xdc\xbf\x3b\x16\x94\xf6\x19\x46\x6b\x71\x73\x66\x97\x72\x54\x9e\x65\xa2\x3f\xc2\x77\xc7\xcd\x19\x5e\x62\x1e\x68\x56\xa2\x99\x6b\x87\x4a\x73\x4c\x82\x63\x40\x58\xd2\xc6\xe7\x4f\x9f\xa6\x1b\xaf\x95\xcd\x3d\xa8\x2d\xf9\x5c\xec\x4d\x63\x49\x1b\x0f\xe2\x54\x6a\x3d\x94\xd4\x59\xd3\x68\x10\x9c\xf3\xa5\xdd\x48\x04\x7d\xef\x1e\x73\x3c\x26\x76\xc7\x10\x9b\x0c\x63\x49\x9b\xbe\x2d\x7b\xba\x14\x19\x29\x8e\x45\x8c\xe8\x4c\x26\xbc\x52\x64\x6a\xab\x26\xac\xaa\x42\xd1\xf1\x34\xb9\x3f\x4e\x26\x9f\xc3\xd1\xb0\xff\x4c\xa2\x7b\x0d\xb0\x0d\xbb\x5b\xbc\x2e\x69\xf3\x9a\x83\x95\x88\x07\xe6\xaa\x92\x78\xb2\x0d\x35\x43\x4c\x25\x8c\xcf\x58\xa8\x6c\x57\xac\x7b\x7f\xbc\xd3\x63\xb8\x37\x4e\x3e\xde\x3f\x29\x29\x2b\xc4\xfc\xde\x19\xe2\x7b\xe3\xfc\xcc\x45\xa5\x17\x88\xfd\x1e\xb2\x0b\x90\xbd\xab\xea\x10\x3e\x44\x38\xed\xe2\x8d\x27\x70\x37\xef\x04\x60\xd9\x7d\xa7\xc1\xd8\x28\x82\x01\x68\x7c\xc5\x1e\x50\x05\x24\x65\xcd\xbe\xde\xd2\x46\x27\x54\x56\x6e\x73\x14\x4b\x94\xad\xb1\x1d\xd1\x7e\x13\xc2\x88\xec\x51\x0a\xc7\xb0\x12\x7a\x86\x02\x53\xca\x20\xab\x3d\xe3\xbe\x7c\x95\x7e\x4f\xa5\x03\x70\x95\x64\x17\x04\x95\x84\xfc\xa1\x5a\xef\x0b\xd4\x61\x0c\x08\xd7\x6d\xa0\x83\x4c\x09\xe0\x29\x91\x16\xda\x6a\x72\xc4\x89\xa4\xa4\x24\xd2\xe4\x4c\x79\x96\xdf\xbf\x78\xd0\xe7\x42\x5f\x06\x0c\xcf\x9f\x3d\xb6\xdb\x02\x19\xb2\x4c\x89\x95\xd8\xed\x17\x49\x26\x5e\xed\x5f\xa1\x42\x65\x79\x02\x37\xbe\xb1\x2e\xa8\xb3\xa6\xb4\x37\x90\x16\x98\x1e\x74\x95\xa0\x91\x7c\xb0\xc2\x42\x52\x9b\x44\x12\x0d\x54\x84\x44\x67\xe6\x07\x09\x7f\x0c\xeb\x5c\xea\x39\x09\xb2\x73\x45\x85\xef\x8a\x46\x4b\xda\x8c\xc6\x82\xfa\x2c\xba\xb6\x07\x8c\xee\xf4\x28\xa4\xc7\x03\x8b\xde\xe6\x52\xa3\x8b\x0d\x8c\xfc\xda\xe8\xdb\xea\x87\xde\xac\x88\x59\xe6\x6f\x6c\xb0\xf8\x30\x30\x55\x0d\x30\xcd\x8e\x5d\x95\x58\xf5\x9b\x95\xa5\xf9\x49\xb4\x1d\x3b\xfa\x48\xf3\x20\x80\x56\x89\x39\x27\x4b\xda\x17\xde\xe6\x64\x5d\xb9\xab\x44\xc7\x31\x35\x52\x06\x6b\xe5\xf2\x6e\x3d\x7b\x4a\xa2\xfd\x4e\xde\xe3\xda\x5d\x26\x54\x9a\x7f\x6c\xc8\x0e\xf6\xbe\xe5\x22\xe4\xb4\x86\xda\x31\x90\xb6\x2a\xcd\x1b\x62\xa5\xf1\x09\xcd\x95\x58\x4b\x50\xdd\x99\x9c\x37\xc8\x08\x86\xd5\x28\xa7\xef\x7b\xce\x30\x7a\xf3\xe1\xae\xb9\xd7\x09\xd7\x39\xd4\x30\xda\x93\x4e\x07\xc6\xbf\x9d\x0c\x9e\x41\xd4\xed\xf6\x50\xbb\xbe\x68\xdd\x05\x6d\xdb\x4e\x7f\xeb\xd0\x58\xd0\x10\x82\xfb\xb3\xc0\xa0\x0c\x70\x9c\xdc\x1d\xb5\x6d\x62\x71\x85\xaa\xc0\x59\xd1\xb4\xcd\xa1\x38\x8a\x4d\xf3\x96\xf8\xd7\xc1\x6c\x8e\x5c\x74\x1c\x63\x63\x40\x2d\x3d\xbc\x9a\x96\x5a\x39\x98\xec\x80\x8d\x82\xbf\x67\xdb\xf0\x92\x5a\xba\x5b\x76\x8f\x16\x35\x7b\x01\x3e\xaa\x92\x86\x24\xdf\xbd\x76\x97\x1d\x38\x55\x52\xb4\x86\x46\x19\x6e\x0b\x96\xb2\x70\x61\x65\x34\x35\xbe\xe9\xb3\x89\x71\x39\x9d\x0c\x28\xed\xf1\xac\x64\x0f\x30\x37\xb6\x44\x77\x0d\x19\x3a\x4a\x84\xb2\x41\x62\xf8\xe4\xef\xc1\x2e\x2a\x82\x35\xb2\x68\x63\x46\x87\x57\xa5\x2f\xc0\x64\x49\xcc\xb8\x78\x3e\x77\x37\x90\xd7\x25\x8a\x77\x61\xe6\xfd\x28\x02\x02\xa5\x33\x95\xa2\xbf\xe1\xcc\xc8\xa1\x2a\x18\x70\x66\xea\xe0\x7d\x3b\xf5\x5f\x5c\xc3\x96\x90\xfb\xa2\xec\x11\x3e\x42\x99\x20\x47\x45\x78\x5d\x55\xbd\x66\x6f\x03\xdf\x93\xea\xe3\x57\x7e\xbd\x54\xc7\xeb\xbf\x6d\xb0\x8d\x04\x8f\xbd\x37\x99\x39\x3c\xda\x9a\xc6\xf0\x0b\x16\x4c\x63\xf8\xa4\x97\xda\xac\x2f\x4f\xbb\xdf\xfc\x6c\x79\x6f\x2a\x4f\xe1\x96\xe6\x0b\x92\xe5\x0b\xcc\x0f\xe8\xf2\x4b\x5e\xed\xdc\xc5\x5a\xc9\x37\x44\xbe\xca\xa8\x14\xa5\xd4\x79\x50\x01\xa5\xd9\x11\x66\x71\x92\xb4\x53\x96\xe2\xda\x38\x5c\xce\x0f\x92\xe9\xee\xf9\x45\x2a\x5a\x40\x29\x74\x55\x06\xff\x78\xf8\xed\x7e\xfa\x77\x13\x0b\x68\x4c\x53\xe2\x98\x98\xa4\xb2\x1d\x03\xd7\x69\x0e\xc8\xcd\x05\xf4\x83\x4f\x59\x25\x6a\x35\x27\x76\x93\x08\x8d\x2c\xff\xfe\xf6\x8f\x3e\x69\xff\x62\x2c\xd0\x13\x96\x55\x41\x63\x50\xb1\x13\x6d\x5e\x24\x5a\xa5\x97\x17\xc4\x16\xb2\xaf\xb2\x3c\xc1\x95\xc9\x22\xc3\x6b\xcf\x8a\xc3\x25\x81\x89\xac\xd4\x04\x85\x5a\xf6\xda\xcc\x88\x2b\x4a\x5b\x64\x7f\xd1\x58\xd2\xd7\x11\xfc\xb0\xce\xc9\x12\x8c\xe4\xe7\x28\x90\xb3\x2d\x5e\x65\xae\xe5\x0e\x91\xac\x70\xad\x63\xd5\x62\x41\xb6\x37\xdc\xfa\x97\x93\x15\x69\xf7\xa3\x34\xda\x6a\x0e\xda\xb4\x40\x79\x04\xa2\xc7\x8a\x52\x35\x57\x94\x1d\x90\xf9\xfb\xdb\x3f\x46\xf0\x43\x57\x26\x3d\x28\x95\xce\xe8\x09\xde\x86\x3e\x4c\xb1\x48\xef\xc7\xd8\x93\xf3\x46\x3b\x7c\x12\x8c\xa9\x34\x50\x3a\x74\x37\xce\x40\x8e\x2b\x02\x36\x25\xc1\x9a\x8a\x22\x09\x2f\x00\x19\xac\xfd\x8d\x45\x6f\xf1\x11\x54\x18\x7a\xfb\x0a\xad\xeb\x79\x17\xec\xc8\x67\x98\x13\x1e\x7b\x2e\xeb\x8e\xe7\xf9\x9f\x7f\x4a\x7b\x56\x15\xfc\x82\xcf\x50\x7f\x49\x62\xfe\xed\xfa\x82\x12\xbb\x6f\xf9\xc2\x37\x48\x6c\xd7\x8c\x8a\xd0\x32\x93\xb2\xc8\x2b\xa5\xca\xf1\xd4\xac\xc8\xae\x14\xad\xa7\x6b\x63\x97\x4a\x2f\x12\x31\xf6\x24\x58\x11\x4f\xfd\xbf\x05\xa6\xaf\xfc\xc7\xa5\x04\xc4\x15\xa6\x17\x97\x92\x07\xfa\xf2\xa2\x12\x2a\x78\x7a\x09\x49\x35\x0d\xf0\xf3\x7b\xce\x5e\x79\x3d\x84\xc0\x97\xee\xe3\x90\x98\xb4\xce\x55\x9a\x37\x7f\x3b\x68\x65\x89\x12\xb3\x90\x46\x50\x6f\x5e\xd8\x67\x45\x1f\xb5\x15\xca\x36\x49\xfc\x27\x4d\x82\x3a\x93\xef\xac\xd8\xc9\xfc\x25\x14\x50\xab\x8b\x06\xbf\x4f\x77\xef\x5e\xde\x3c\xa7\xaf\x6a\x75\x89\x48\x37\xe4\x7e\x2b\x3c\x61\x5f\x83\xb3\x75\xd3\xbb\xb0\x33\x56\x3a\x94\xce\x5c\x3d\xdb\xde\x4c\xed\xe4\x1d\x8b\x69\xf8\xf2\xf5\xea\x7f\x01\x00\x00\xff\xff\xbc\x5e\x93\xfd\x8d\x25\x00\x00") +var _operatorsCoreosCom_operatorsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x1a\xcb\x92\xdb\x36\xf2\x3e\x5f\xd1\x25\x1f\x9c\x54\x89\x92\xe3\xbd\x6c\xcd\x6d\x6a\xec\x6c\xcd\x6e\x76\xe2\xf2\x8c\x7d\x49\xe5\xd0\x22\x5b\x22\x56\x24\xc0\xa0\x41\x69\xb4\x5e\xff\xfb\x56\x03\xa0\x44\xea\x45\x4e\x2c\x67\x70\x91\x84\x47\xbf\x9f\x80\xb0\x52\x9f\xc9\xb2\x32\xfa\x1a\xb0\x52\xf4\xe4\x48\xcb\x2f\x9e\x2c\xff\xce\x13\x65\xa6\xab\x9f\xae\x96\x4a\x67\xd7\x70\x5b\xb3\x33\xe5\x47\x62\x53\xdb\x94\xde\xd1\x5c\x69\xe5\x94\xd1\x57\x25\x39\xcc\xd0\xe1\xf5\x15\x00\x6a\x6d\x1c\xca\x34\xcb\x4f\x80\xd4\x68\x67\x4d\x51\x90\x4d\x16\xa4\x27\xcb\x7a\x46\xb3\x5a\x15\x19\x59\x0f\xbc\x41\xbd\x7a\x33\x79\xfb\x66\xf2\xe6\x0a\x40\x63\x49\xd7\x60\x2a\xb2\xe8\x8c\xe5\xc9\xee\x5b\x6a\x2c\x19\xf9\x28\xaf\xb8\xa2\x54\xe0\x2f\xac\xa9\xab\xf6\xee\xd6\x9e\x00\xaa\x21\x03\x1d\x2d\x8c\x55\xcd\x6f\x80\x04\x4c\x51\xfa\xef\x81\xbd\x5f\x23\x0c\x3f\x55\x28\x76\xff\xea\x4c\xff\xa2\xd8\xf9\xa5\xaa\xa8\x2d\x16\x2d\x9c\x7e\x96\x95\x5e\xd4\x05\xda\xdd\xfc\x15\x00\xa7\xa6\xa2\x6b\xb8\x2d\x6a\x76\x24\x13\x91\xdd\x48\x43\x12\x79\x5d\xfd\x14\x49\xe2\x34\xa7\x12\x1b\x02\x41\x40\xe9\x9b\x0f\x77\x9f\xff\xf6\xb0\xb7\x00\x90\x11\xa7\x56\x55\xce\x0b\xaf\xa1\x11\x2c\x55\x96\x98\xb4\x63\x40\x48\x03\xda\x2d\x41\x93\xd6\x71\xb7\x11\xc2\xcc\xec\x3f\x94\xba\xd6\x74\x65\x65\xb3\x6b\x49\x29\x8c\x96\x91\x74\xe6\xf7\xe8\xf8\x5f\xb2\xb7\x0a\x20\xe4\x87\x93\x90\x89\xc5\x10\x83\xcb\xa9\x11\x04\x65\x91\x67\x30\x73\x70\xb9\xe2\x1d\x07\xde\x86\x64\x1a\x75\xa4\x73\x72\x00\xfc\x81\xac\x00\x02\xce\x4d\x5d\x64\x62\x6a\x2b\xb2\x0e\x2c\xa5\x66\xa1\xd5\x7f\xb7\xd0\x19\x9c\xf1\x68\x0b\x74\xc4\x0e\x94\x76\x64\x35\x16\xb0\xc2\xa2\xa6\x31\xa0\xce\x0e\x60\x97\xb8\x01\x4b\x82\x17\x6a\xdd\x82\xe8\x8f\xf0\x21\x2d\xff\x36\x96\x40\xe9\xb9\xb9\x86\xdc\xb9\x8a\xaf\xa7\xd3\x85\x72\x8d\x13\xa5\xa6\x2c\x6b\xad\xdc\x66\xea\xfd\x41\xcd\x6a\xb1\x9c\x69\x46\x2b\x2a\xa6\xac\x16\x09\xda\x34\x57\x8e\x52\x57\x5b\x9a\x62\xa5\x12\xcf\x8c\xf6\x8e\x34\x29\xb3\x57\x36\xba\x1d\xef\x21\x0e\x8a\x64\x67\x95\x5e\x74\x96\xbc\x51\x3f\x53\x59\x62\xf1\xa0\xc4\x76\x02\xc0\xc0\xec\x4e\x27\x32\x25\x62\xfc\xf8\xfe\xe1\x11\x1a\x8a\x82\xde\x82\x8a\x5a\x06\x78\x5a\x5b\x22\x59\xa5\xe7\x64\xc3\xc9\xb9\x35\xa5\x87\x4a\x3a\xab\x8c\xd2\xce\xff\x48\x0b\x45\xda\x01\xd7\xb3\x52\x39\x31\x8b\x3f\x6a\x62\x27\x8a\x3c\x04\x7c\xeb\x83\x0e\xcc\x08\xea\x2a\x43\x47\xd9\xe1\x96\x3b\x0d\xb7\x58\x52\x71\x8b\x4c\x7f\xb9\xee\x44\x47\x9c\x88\x42\x06\x6b\xaf\x1d\x52\x0f\x0f\x1c\xf8\x2d\x40\x13\x10\x4f\xaa\xbb\x89\x11\x0f\x15\xa5\x1d\x57\xcc\x88\x95\x15\x57\x71\xe8\x48\x1c\xae\x13\x08\x87\xa0\x76\xe8\x6a\x1e\x86\xdc\x6f\xed\xa0\x37\x33\x16\xbb\x68\xe1\x47\xbd\x0b\x68\x28\x06\xe9\x18\x52\x53\x56\x46\x8b\x5d\x0d\xa5\xea\x74\x30\x03\x9f\x95\x1a\x78\x87\x6b\x7b\xb4\xdf\x6e\xb7\xc6\xf9\x19\xf1\xd6\xf8\x85\x07\x74\x01\x1c\x53\x60\xe8\x48\xb8\x1d\x40\xad\x0c\xb1\x72\xd1\xc5\x31\x9a\x24\x5d\x14\x38\xa3\xe2\x81\x0a\x4a\x0f\xd5\xd3\xc7\xb1\x8c\xce\xf9\xe3\x5b\xf6\x98\xff\xa5\x7d\x22\x84\x06\x0f\x04\xfe\xa8\xc9\x6e\xc0\xac\xc8\x4a\xb4\x20\x27\x8a\xdb\x09\xa5\x66\xca\x24\xe6\xb2\x3f\xd9\x11\xcb\xeb\x33\xca\x1c\x28\xa6\x21\xac\x82\x0f\xe1\x2e\xcd\xdf\x3f\x49\x44\x6a\x65\xdd\x01\x5c\xef\x1f\x8c\x8c\x2b\xf6\x6c\x06\x01\x70\x23\x94\xa8\xb4\xd2\x07\x3d\x78\xcc\xa9\x33\x03\x68\x09\x6e\xee\xdf\x1d\x0b\x4a\xfb\x0c\xa3\xb5\xb8\x39\xb3\x4b\x39\x2a\xcf\x32\xd1\x1f\xe1\xbb\xe3\xe6\x0c\x2f\x31\x0f\x34\x2b\xd1\xcc\xb5\x43\xa5\x39\x26\xc1\x31\x20\x2c\x69\xe3\xf3\xa7\x4f\xd3\x8d\xd7\xca\xe6\x1e\xd4\x96\x7c\x2e\xf6\xa6\xb1\xa4\x8d\x07\x71\x2a\xb5\x1e\x4a\xea\xac\x69\x34\x08\xce\xf9\xd2\x6e\x24\x82\xbe\x77\x8f\x39\x1e\x13\xbb\x63\x88\x4d\x86\xb1\xa4\x4d\xdf\x96\x3d\x5d\x8a\x8c\x14\xc7\x22\x46\x74\x26\x13\x5e\x29\x32\xb5\x55\x13\x56\x55\xa1\xe8\x78\x9a\xdc\x1f\x27\x93\xcf\xe1\x68\xd8\x7f\x26\xd1\xbd\x06\xd8\x86\xdd\x2d\x5e\x97\xb4\x79\xcd\xc1\x4a\xc4\x03\x73\x55\x49\x3c\xd9\x86\x9a\x21\xa6\x12\xc6\x67\x2c\x54\xb6\x2b\xd6\xbd\x3f\xde\xe9\x31\xdc\x1b\x27\x1f\xef\x9f\x94\x94\x15\x62\x7e\xef\x0c\xf1\xbd\x71\x7e\xe6\xa2\xd2\x0b\xc4\x7e\x0f\xd9\x05\xc8\xde\x55\x75\x08\x1f\x22\x9c\x76\xf1\xc6\x13\xb8\x9b\x77\x02\xb0\xec\xbe\xd3\x60\x6c\x14\xc1\x00\x34\xbe\x62\x0f\xa8\x02\x92\xb2\x66\x5f\x6f\x69\xa3\x13\x2a\x2b\xb7\x39\x8a\x25\xca\xd6\xd8\x8e\x68\xbf\x09\x61\x44\xf6\x28\x85\x63\x58\x09\x3d\x43\x81\x29\x65\x90\xd5\x9e\x71\x5f\xbe\x4a\xbf\xa7\xd2\x01\xb8\x4a\xb2\x0b\x82\x4a\x42\xfe\x50\xad\xf7\x05\xea\x30\x06\x84\xeb\x36\xd0\x41\xa6\x04\xf0\x94\x48\x0b\x6d\x35\x39\xe2\x44\x52\x52\x12\x69\x72\xa6\x3c\xcb\xef\x9f\x3c\xe8\x73\xa1\x2f\x03\x86\xe7\xcf\x1e\xdb\x6d\x81\x0c\x59\xa6\xc4\x4a\xec\xf6\x8b\x24\x13\xaf\xf6\xaf\x50\xa1\xb2\x3c\x81\x1b\xdf\x58\x17\xd4\x59\x53\xda\x1b\x48\x0b\x4c\x0f\xba\x4a\xd0\x48\x3e\x58\x61\x21\xa9\x4d\x22\x89\x06\x2a\x42\xa2\x33\xf3\x83\x84\x3f\x86\x75\x2e\xf5\x9c\x04\xd9\xb9\xa2\xc2\x77\x45\xa3\x25\x6d\x46\x63\x41\x7d\x16\x5d\xdb\x03\x46\x77\x7a\x14\xd2\xe3\x81\x45\x6f\x73\xa9\xd1\xc5\x06\x46\x7e\x6d\xf4\x6d\xf5\x43\x6f\x56\xc4\x2c\xf3\x37\x36\x58\x7c\x18\x98\xaa\x06\x98\x66\xc7\xae\x4a\xac\xfa\xcd\xca\xd2\xfc\x24\xda\x8e\x1d\x7d\xa4\x79\x10\x40\xab\xc4\x9c\x93\x25\xed\x0b\x6f\x73\xb2\xae\xdc\x55\xa2\xe3\x98\x1a\x29\x83\xb5\x72\x79\xb7\x9e\x3d\x25\xd1\x7e\x27\xef\x71\xed\x2e\x13\x2a\xcd\x3f\x36\x64\x07\x7b\xdf\x72\x11\x72\x5a\x43\xed\x18\x48\x5b\x95\xe6\x0d\xb1\xd2\xf8\x84\xe6\x4a\xac\x25\xa8\xee\x4c\xce\x1b\x64\x04\xc3\x6a\x94\xd3\xf7\x3d\x67\x18\xbd\xf9\x70\xd7\xdc\xeb\x84\xeb\x1c\x6a\x18\xed\x49\xa7\x03\xe3\xdf\x4e\x06\xcf\x20\xea\x76\x7b\xa8\x5d\x5f\xb4\xee\x82\xb6\x6d\xa7\xbf\x75\x68\x2c\x68\x08\xc1\xfd\x59\x60\x50\x06\x38\x4e\xee\x8e\xda\x36\xb1\xb8\x42\x55\xe0\xac\x68\xda\xe6\x50\x1c\xc5\xa6\x79\x4b\xfc\xeb\x60\x36\x47\x2e\x3a\x8e\xb1\x31\xa0\x96\x1e\x5e\x4d\x4b\xad\x1c\x4c\x76\xc0\x46\xc1\xdf\xb3\x6d\x78\x49\x2d\xdd\x2d\xbb\x47\x8b\x9a\xbd\x00\x1f\x55\x49\x43\x92\xef\x5e\xbb\xcb\x0e\x9c\x2a\x29\x5a\x43\xa3\x0c\xb7\x05\x4b\x59\xb8\xb0\x32\x9a\x1a\xdf\xf4\xd9\xc4\xb8\x9c\x4e\x06\x94\xf6\x78\x56\xb2\x07\x98\x1b\x5b\xa2\xbb\x86\x0c\x1d\x25\x42\xd9\x20\x31\x7c\xf2\xf7\x60\x17\x15\xc1\x1a\x59\xb4\x31\xa3\xc3\xab\xd2\x17\x60\xb2\x24\x66\x5c\x3c\x9f\xbb\x1b\xc8\xeb\x12\xc5\xbb\x30\xf3\x7e\x14\x01\x81\xd2\x99\x4a\xd1\xdf\x70\x66\xe4\x50\x15\x0c\x38\x33\x75\xf0\xbe\x9d\xfa\x2f\xae\x61\x4b\xc8\x7d\x51\xf6\x08\x1f\xa1\x4c\x90\xa3\x22\xbc\xae\xaa\x5e\xb3\xb7\x81\xef\x49\xf5\xf1\x2b\xbf\x5e\xaa\xe3\xf5\xdf\x36\xd8\x46\x82\xc7\xde\x9b\xcc\x1c\x1e\x6d\x4d\x63\xf8\x19\x0b\xa6\x31\x7c\xd2\x4b\x6d\xd6\x97\xa7\xdd\x6f\x7e\xb6\xbc\x37\x95\xa7\x70\x4b\xf3\x05\xc9\xf2\x05\xe6\x07\x74\xf9\x25\xaf\x76\xee\x62\xad\xe4\x1b\x22\x5f\x65\x54\x8a\x52\xea\x3c\xa8\x80\xd2\xec\x08\xb3\x38\x49\xda\x29\x4b\x71\x6d\x1c\x2e\xe7\x07\xc9\x74\xf7\xfc\x22\x15\x2d\xa0\x14\xba\x2a\x83\x7f\x3e\xfc\x7a\x3f\xfd\x87\x89\x05\x34\xa6\x29\x71\x4c\x4c\x52\xd9\x8e\x81\xeb\x34\x07\xe4\xe6\x02\xfa\xc1\xa7\xac\x12\xb5\x9a\x13\xbb\x49\x84\x46\x96\x7f\x7b\xfb\x7b\x9f\xb4\x7f\x36\x16\xe8\x09\xcb\xaa\xa0\x31\xa8\xd8\x89\x36\x2f\x12\xad\xd2\xcb\x0b\x62\x0b\xd9\x57\x59\x9e\xe0\xca\x64\x91\xe1\xb5\x67\xc5\xe1\x92\xc0\x44\x56\x6a\x82\x42\x2d\x7b\x6d\x66\xc4\x15\xa5\x2d\xb2\xbf\x68\x2c\xe9\xeb\x08\x7e\x58\xe7\x64\x09\x46\xf2\x73\x14\xc8\xd9\x16\xaf\x32\xd7\x72\x87\x48\x56\xb8\xd6\xb1\x6a\xb1\x20\xdb\x1b\x6e\xfd\xcb\xc9\x8a\xb4\xfb\x51\x1a\x6d\x35\x07\x6d\x5a\xa0\x3c\x02\xd1\x63\x45\xa9\x9a\x2b\xca\x0e\xc8\xfc\xed\xed\xef\x23\xf8\xa1\x2b\x93\x1e\x94\x4a\x67\xf4\x04\x6f\x43\x1f\xa6\x58\xa4\xf7\x63\xec\xc9\x79\xa3\x1d\x3e\x09\xc6\x54\x1a\x28\x1d\xba\x1b\x67\x20\xc7\x15\x01\x9b\x92\x60\x4d\x45\x91\x84\x17\x80\x0c\xd6\xfe\xc6\xa2\xb7\xf8\x08\x2a\x0c\xbd\x7d\x85\xd6\xf5\xbc\x0b\x76\xe4\x33\xcc\x09\x8f\x3d\x97\x75\xc7\xf3\xfc\xcf\x3f\xa5\x3d\xab\x0a\x7e\xc1\x67\xa8\x3f\x25\x31\xff\x76\x7d\x41\x89\xdd\xb7\x7c\xe1\x1b\x24\xb6\x6b\x46\x45\x68\x99\x49\x59\xe4\x95\x52\xe5\x78\x6a\x56\x64\x57\x8a\xd6\xd3\xb5\xb1\x4b\xa5\x17\x89\x18\x7b\x12\xac\x88\xa7\xfe\xdf\x02\xd3\x57\xfe\xe3\x52\x02\xe2\x0a\xd3\x8b\x4b\xc9\x03\x7d\x79\x51\x09\x15\x3c\xbd\x84\xa4\x9a\x06\xf8\xf9\x3d\x67\xaf\xbc\x1e\x42\xe0\x4b\xf7\x71\x48\x4c\x5a\xe7\x2a\xcd\x9b\xbf\x1d\xb4\xb2\x44\x89\x59\x48\x23\xa8\x37\x2f\xec\xb3\xa2\x8f\xda\x0a\x65\x9b\x24\xfe\x93\x26\x41\x9d\xc9\x77\x56\xec\x64\xfe\x12\x0a\xa8\xd5\x45\x83\xdf\xa7\xbb\x77\x2f\x6f\x9e\xd3\x57\xb5\xba\x44\xa4\x1b\x72\xbf\x15\x9e\xb0\xaf\xc1\xd9\xba\xe9\x5d\xd8\x19\x2b\x1d\x4a\x67\xae\x9e\x6d\x6f\xa6\x76\xf2\x8e\xc5\x34\x7c\xf9\x7a\xf5\xff\x00\x00\x00\xff\xff\x14\x46\x6c\x9d\x8d\x25\x00\x00") func operatorsCoreosCom_operatorsYamlBytes() ([]byte, error) { return bindataRead( @@ -225,7 +225,7 @@ func operatorsCoreosCom_operatorsYaml() (*asset, error) { return a, nil } -var _operatorsCoreosCom_subscriptionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\xfd\x77\xe3\xb6\x95\x30\x8e\xff\xde\xbf\x02\xc7\xed\x39\xb6\x5b\x49\x33\xd3\x76\xdb\xee\x3c\xfd\xb6\xc7\xf1\x78\xba\x7e\x92\x99\xf8\x19\x4f\xd2\xb3\xdf\x6c\x76\x03\x93\x90\x84\x9a\x04\x18\x02\x94\x47\xdd\xec\xff\xfe\x39\xb8\x17\x00\x41\x49\x36\x01\x59\x92\x3d\x59\xe2\x87\x64\x4c\x91\x78\xbd\xb8\xef\x2f\xb4\xe2\xdf\xb2\x5a\x71\x29\x5e\x13\x5a\x71\xf6\x49\x33\x61\xfe\x52\x93\xdb\x3f\xa9\x09\x97\x2f\x16\xaf\x7e\x71\xcb\x45\xfe\x9a\x9c\x37\x4a\xcb\xf2\x03\x53\xb2\xa9\x33\xf6\x86\x4d\xb9\xe0\x9a\x4b\xf1\x8b\x92\x69\x9a\x53\x4d\x5f\xff\x82\x10\x2a\x84\xd4\xd4\x3c\x56\xe6\x4f\x42\x32\x29\x74\x2d\x8b\x82\xd5\xe3\x19\x13\x93\xdb\xe6\x86\xdd\x34\xbc\xc8\x59\x0d\x9d\xbb\xa1\x17\x2f\x27\xaf\xfe\x34\x79\xf9\x0b\x42\x04\x2d\xd9\x6b\xa2\x9a\x1b\x95\xd5\xbc\x82\x9e\x26\xb2\x62\x35\xd5\xb2\x56\x93\x4c\xd6\x4c\x9a\xff\x95\xbf\x50\x15\xcb\xcc\x18\xb3\x5a\x36\xd5\x6b\xb2\xf1\x1d\xec\xce\x4d\x85\x6a\x36\x93\x35\x77\x7f\x13\x32\x26\xb2\x28\xe1\xdf\xb8\xc4\xeb\x60\x54\x78\x5c\x70\xa5\xbf\x5c\xfb\xe9\x2b\xae\x34\xfc\x5c\x15\x4d\x4d\x8b\x95\xd9\xc2\x2f\x6a\x2e\x6b\xfd\xbe\x1d\xdb\x8c\xa5\x9a\x9b\xf0\xdf\xf6\x45\x2e\x66\x4d\x41\xeb\x6e\x27\xbf\x20\x44\x65\xb2\x62\xaf\x09\xf4\x51\xd1\x8c\xe5\xbf\x20\xc4\x6e\x97\xed\x73\x4c\x68\x9e\xc3\x11\xd0\xe2\xaa\xe6\x42\xb3\xfa\x5c\x16\x4d\x29\xfc\x98\xe6\x9d\x9c\xf9\x5e\x5f\x93\x8f\x73\x46\x2a\x9a\xdd\xd2\x19\x73\xe3\xdd\xb0\x9c\x68\xe9\x3f\x20\xe4\x1f\x4a\x8a\x2b\xaa\xe7\xaf\xc9\xc4\x6c\xf1\xc4\xec\x60\xf0\x33\x9e\xcf\x15\x76\x12\x3c\xd7\x4b\x33\x5d\xa5\x6b\x2e\x66\x0f\x0d\x9f\x51\x4d\x0b\x39\x23\x08\x46\x64\x2a\x6b\xa2\xe7\x8c\x98\xa1\xf8\x94\xb3\xdc\xcd\xef\x81\x19\xe1\xa7\x6b\x73\xba\x5e\x7d\x1c\x3d\xa5\x39\x15\x82\x15\x44\x4e\x49\x53\xe5\x54\x33\x45\xb4\x6c\xf7\xe7\xe1\xed\xb1\x1f\xaf\xcd\xe6\x7c\xed\xf9\x86\xe9\xe0\xab\x8b\x57\xb4\xa8\xe6\xf4\x95\x7d\xa8\xb2\x39\x2b\x69\x7b\x86\xb2\x62\xe2\xec\xea\xf2\xdb\xdf\x5d\xaf\xfc\x40\xba\x4b\x09\x41\x94\xdc\x32\x56\xa9\xf6\x52\x90\xa6\x32\x6b\x32\x8b\x23\x37\x4b\xa2\x6b\x9a\xdd\x72\x31\x83\xa5\xcf\x70\xbd\xe7\x78\x30\x6a\xb2\x36\x65\x79\xf3\x0f\x96\xe9\xe0\x71\xcd\x7e\x6c\x78\xcd\xf2\x70\x2a\x66\x67\x1d\x26\x58\x79\x6c\xf6\x29\x78\x54\xd5\x66\x5a\x3a\xb8\x87\xd8\x02\x54\xd4\x79\xbe\xb2\xcc\x9f\xc6\x2b\xbf\x12\x62\x76\x07\xbf\x24\xb9\xc1\x4b\x66\x41\x73\xe6\xae\x0b\xcb\xed\x96\x9a\x03\xd6\x73\xae\x48\xcd\xaa\x9a\x29\x26\x10\x53\x99\xc7\x54\xd8\x55\x4e\xd6\x3a\xbf\x66\xb5\xe9\xc8\x5c\xe9\xa6\xc8\x0d\x42\x5b\xb0\x5a\x93\x9a\x65\x72\x26\xf8\x3f\x7d\xef\xb0\x89\x66\xd8\xc2\x40\x90\x26\x70\x21\x05\x2d\xc8\x82\x16\x0d\x1b\x11\x2a\xf2\xb5\xbe\x4b\xba\x24\x35\x33\xe3\x92\x46\x04\x3d\xc2\x27\x6a\x7d\x2e\xef\x64\xcd\x08\x17\x53\xf9\x9a\xcc\xb5\xae\xd4\xeb\x17\x2f\x66\x5c\x3b\x54\x9d\xc9\xb2\x6c\x04\xd7\xcb\x17\x80\x75\xf9\x4d\x63\x8e\xfe\x45\xce\x16\xac\x78\xa1\xf8\x6c\x4c\xeb\x6c\xce\x35\xcb\x74\x53\xb3\x17\xb4\xe2\x63\x58\x8c\x40\x24\x5b\xe6\xbf\xac\x2d\x72\x57\x2b\x03\x6f\xbc\x48\xc4\xa1\xcd\xc4\xc3\x32\xf8\x94\x70\x45\xa8\xed\x10\x17\xdb\x9e\x89\x79\x64\xb6\xf1\xc3\xc5\xf5\x47\xe2\x66\x84\xe7\x86\x47\xd4\xbe\xba\x61\x87\xdc\x69\x99\x9d\xe5\x62\xca\x6a\xfc\x72\x5a\xcb\x12\x7a\x65\x22\xaf\x24\x17\x1a\xfe\xc8\x0a\xce\x84\x36\x37\xbd\xe4\x5a\x01\x58\x33\xa5\xcd\x41\xae\x77\x7c\x0e\xa4\x8d\xdc\x30\x8b\x23\xf2\xf5\x57\x2e\x05\x39\xa7\x25\x2b\xce\xa9\x62\x07\x3f\x3b\x73\x46\x6a\x6c\x0e\x24\xfa\xf4\x42\xc2\xbd\xfe\xc1\xda\xad\x27\xc4\x91\xdc\x7b\x8f\x3b\x44\x41\xd7\x15\xcb\xfc\x75\xa4\x82\x9c\x55\x55\xc1\x33\xbc\x71\x7a\x4e\x35\xc9\xa8\x30\xdb\xc9\x85\xd2\xb4\x28\xd8\xea\xed\xb8\x77\x16\xf7\xe1\x1f\x02\xc8\x66\x85\x5c\xb9\xc7\x6b\x34\xa3\xfb\x83\x27\xb3\x2b\x6f\xdc\x87\xab\x4c\xb3\x98\x7f\xfd\x87\x07\xb6\x9c\x20\x4b\x34\xe5\xb3\x4d\x9f\xdd\xbb\x97\xe7\xf0\x09\x30\x53\x94\x0b\x65\xbb\x68\x6a\xdc\xcd\x96\x76\x1a\x6a\x4a\x3b\x9c\xc4\x3a\x1c\x3e\xb8\xb3\x7d\x6b\x36\x8d\x4e\x81\xf5\x5b\x6e\xfe\xb5\x1f\x01\xb8\x76\x39\x6d\x67\x3e\x22\x72\xc1\xea\x9a\xe7\x16\x75\x57\x32\x3f\x56\x80\x58\xf3\xa6\x00\x42\x25\x85\xd2\x35\xe5\x1b\x2f\xbd\x6b\x82\x17\x66\xf1\x63\xaa\xf1\x06\x31\x45\xee\x78\x51\x90\x5f\x0b\xa9\x7f\xed\x47\x80\x01\x64\xcd\x67\xdc\x63\x67\x45\xb8\x70\xe3\x02\x59\xb7\x7c\x89\x54\x6c\xa5\xc3\xfb\x07\xff\x46\x31\xc2\xca\x4a\x2f\x1d\x9a\x3a\xf9\xef\xff\x39\x35\x34\x81\xd5\x54\x05\x03\x76\xfa\xbb\x17\xd3\x63\xeb\x39\x29\x12\x71\x5a\xb0\x2f\x32\x67\x67\x3d\xa7\x46\x56\x4f\xee\x0d\x43\xf6\x47\xc1\xe7\xfe\xd4\xc3\x43\xa9\x9b\x82\x29\xcf\xc2\x99\xbd\x7b\xa0\xf3\x88\xb5\xc4\xae\x07\xdf\x63\x53\x56\xd7\x2c\x7f\xd3\x98\x5b\x76\xed\x67\x75\x39\x13\xd2\x3f\xbe\xf8\xc4\xb2\x46\x6f\x60\x29\x1e\x5c\xfa\x03\x40\xeb\x9a\xe1\x1b\xed\x4e\xb0\x1a\xa1\x0c\x67\x04\xac\xa3\xfd\xc1\x6c\x09\xb0\x05\x66\x07\x15\x62\x3d\x45\x35\x57\xd3\x65\xef\x00\x66\x47\xfd\x9e\xb3\x4f\x86\xe2\x01\xef\x1f\xdc\x76\xc3\xc8\x01\x71\xe3\xac\xc8\x47\xe4\xa6\xd1\x84\x6b\xa0\x7c\xd9\x5c\x4a\xb5\x8e\xed\x56\x1b\xc5\xa3\x85\x79\x2d\xb8\x04\xc6\x85\x48\x61\x80\x95\x94\x86\x5c\x01\xc3\xc4\xc2\xe1\x27\xb0\xf2\xf6\x33\xbe\x4a\x6d\xd6\x5b\x29\x95\x6e\x8f\xcb\x90\x7e\xb8\x80\x82\x91\x3b\xae\xe7\xf0\xc7\xac\x66\xc8\x34\xa9\xa6\x34\x83\xde\x31\x3e\x9b\x6b\x35\x22\x7c\xb2\x81\x92\xae\x36\x03\x80\x8c\x66\xf3\x60\x5a\x25\x63\x5a\x11\x5a\x14\x6e\x09\x21\xd4\x22\xf5\x28\x0d\x03\x41\x4e\x1c\x87\xd1\x3b\x8a\xe5\x0e\x46\x9e\xfa\xac\x02\xde\xc6\xe3\x1a\x11\xa6\xb3\xc9\xe9\xa8\xb7\xfb\x4c\x96\x95\x41\x08\x14\xf6\xe0\x66\x49\xb8\x36\xbc\x3b\x72\x43\xb5\x6c\x66\xb8\x53\xac\xb0\x13\x77\xbc\x2c\x1c\xbe\x61\x2e\x41\x1a\xdc\x40\x6e\x56\xdb\x11\x6e\xee\x91\x63\x57\xcd\x70\x1c\x37\x09\xf6\xaf\xa4\x3a\x9b\x5b\x34\x9c\xc9\xba\x66\xaa\x92\xc2\xf4\x8c\xbf\x5c\xb4\x6b\xfb\x3f\xe6\x9d\xde\xf1\x4c\xa7\x27\xea\xb4\x3d\xec\x39\x9f\xcd\xdd\x59\xd3\x1a\xd1\x71\x17\x46\xfa\x8e\x1c\x51\x09\xad\x6b\xda\x77\x8f\xb8\x66\x65\x0f\x22\x21\x5b\xdc\x7e\x42\xce\x84\x45\xf6\x2d\x60\x07\x20\xa6\x59\x5d\xfa\x8d\x04\x28\x04\xb4\xa7\x70\x13\x78\x69\x38\x21\xae\x2d\x98\x93\x97\x11\xe3\x9d\x98\x9b\x40\xb8\x3e\x56\x70\x6b\xc7\xb2\x3a\x9d\x90\x33\x22\x1a\x8f\x78\x1e\x9a\x82\x90\x7e\x06\xb6\x23\x33\x2d\x25\xdb\xbe\xfa\xf1\x51\x1c\xfa\xc6\x76\x3f\x83\xb6\xde\xc6\x76\xfe\x4c\x44\x5c\x42\xf3\x3a\xee\x5a\xef\xab\xb1\x84\xc4\xbd\xed\xe6\x10\xf3\xf6\x0a\xc4\x9c\xe1\xcd\x51\xac\x60\x99\x36\xd4\x90\xd5\xe5\x88\x50\xa5\x64\xc6\x8d\xa8\xd0\xc2\x7e\xf7\x42\xe1\x4a\xfa\xf7\x9e\xa4\xee\x3f\x49\x5e\x3f\x01\x69\xb4\x7b\xbf\x63\xbf\x5b\xdb\x8d\x82\x2b\x6d\x10\x54\x77\x57\x3a\x78\xf7\x66\x09\xbf\x1e\x2b\x52\xd0\x1b\x56\x3c\xc0\x57\xad\xb6\xf8\xcb\xdf\xb6\x48\x34\x70\xcf\x82\xa2\x10\x42\xdb\x56\xa1\x21\x58\xb7\x95\x7b\x3d\x9c\x80\x18\xe4\x98\x7a\x64\x05\x47\x84\x92\x5b\xb6\x1c\x21\x4a\x17\x5e\x85\x93\x34\x05\xe8\xb8\x66\x48\xd0\x0d\xdc\xdd\xb2\x25\x74\xf8\x30\xbb\xb9\xb1\xab\x54\xb8\xc3\x96\x82\x01\xda\x36\x36\x13\x4d\xfc\x62\x8b\x0d\x4a\xbf\x1a\xd8\x6e\xd9\x83\xec\xf3\xa6\xb6\xa6\x6c\x04\x70\x87\xf3\x80\x43\x02\x0a\xec\xe0\x81\x1a\x11\x99\x6d\xd6\x3f\x3c\xdc\x1e\x14\x38\x1f\x6a\x6e\xf7\x1e\xb5\xae\xc4\x0b\x62\xda\x07\xaf\xc3\x41\x78\x3f\x56\x08\xaf\x06\xef\xcc\x39\x28\x2b\xcd\x45\x01\x34\x92\x0e\xb4\xd8\xbe\xa5\x05\xcf\x03\x1d\xa8\x61\x36\x2e\xc5\x88\xbc\x97\xda\xfc\xef\xe2\x13\x57\x86\xc7\x7c\x23\x99\x7a\x2f\x35\xfc\x39\x21\x7f\xd3\x78\xf5\xbe\x8a\xc4\xcb\x6d\xdb\xfa\x0c\x70\x7d\x87\x3e\x81\x33\x81\x48\xd4\xec\x70\xa8\x89\x53\x13\x23\x99\x03\x8b\x6e\x77\xce\x60\xad\x4b\x61\x84\x02\xdc\xb9\xe4\xa1\x40\x19\x8b\x72\x36\x0e\x59\x36\x0a\x54\x69\x42\x8a\x31\xb0\x51\x1b\xc7\xc4\x03\x32\xe3\x86\x47\xb4\xc3\xe1\xef\x1f\xfa\x6f\xda\x0c\xfb\x95\x1e\x05\x1f\x27\x8f\x1b\x0c\x36\xa7\x0b\x60\xed\xb9\x98\x15\x9e\x89\x1f\x91\xbb\x39\xcf\xe6\x28\x3d\x82\x26\x4c\xb3\xba\xaa\x99\xe1\x18\x28\xe8\xcc\xcc\x93\x19\xab\xd3\x41\xff\xa3\x11\x0d\x70\x7c\xd4\x77\x17\x34\x63\x39\xc9\x41\x64\x41\xd5\x2b\xd5\x6c\xc6\x33\x52\xb2\x7a\xc6\x48\x65\x48\xff\x76\x00\x9f\x46\x89\xb1\x25\xd3\xe3\x70\xc0\x2d\x6e\x18\x21\x9f\xc6\xb7\xcd\x0d\xab\x05\xd3\x4c\x8d\x0d\x7f\x32\xb6\xb3\xd7\xb2\xe4\x59\x74\x67\x3b\xe9\x06\xf8\xac\xb7\x46\x6e\x3b\x10\x8b\x05\x32\xe2\xc0\x62\x0d\x2c\xd6\xc0\x62\x0d\x2c\xd6\xc0\x62\x45\xb7\x81\xc5\x7a\xf4\xf0\x03\x8b\x35\xb0\x58\x07\x67\xb1\x3a\x5d\x94\xb4\x4a\xed\x01\xf5\x72\x5b\x28\x02\xff\x8e\x0a\xdd\x55\xcd\x1f\x30\x7c\xce\xaf\xa1\xab\x02\x34\x7c\xcc\xb5\x25\x4e\x1f\x41\x6d\x68\x2d\x91\x35\x15\x33\x46\x5e\x8d\x5f\xbd\x7c\x99\xa2\x20\xb4\xe0\x1c\xf5\xc5\x54\xd6\x25\xd5\xf0\xcd\xef\x7e\xdb\xf3\xc5\x23\x4e\xe5\x3e\x7b\xc9\x61\x0c\x75\x16\xf3\x78\xdb\x4c\x87\x45\xbe\xc7\x96\x06\x64\x4c\x48\x4d\x4a\xa6\x09\xed\xe7\xc9\x42\xb5\x3b\x2f\xd9\xc8\x99\x43\x11\xed\x58\xb7\x11\x67\x14\xcc\x89\x14\xd6\xf4\x62\x0e\xbf\xff\x70\xb7\x5a\x41\xc6\xa8\x62\x86\xc4\xdf\x30\xb3\x8a\x7e\x53\xa0\x26\x4a\x96\x66\xd6\x5c\x68\x87\xc4\xcc\x12\x98\x3b\x18\x72\xc2\x26\xb3\x09\xc9\x1b\xe8\x96\x0a\xeb\x07\x73\x8a\xab\x55\x4b\xa5\x59\xd9\x6f\x0b\x34\xc4\xb0\x86\xff\x99\x6d\xd1\xf5\x12\x2c\xe4\x0b\x26\x74\x43\x8b\x62\x49\xd8\x82\x67\xda\xef\x1f\xb8\xed\x70\xad\xa2\x76\x2a\x81\x8d\x8e\x67\x9d\xc7\x6b\x37\xb4\x8f\x48\xa5\x70\xbe\x6b\x7d\xc7\xe0\x9c\xce\x0d\xf8\x60\x57\x32\xb9\x57\x26\xd4\xa6\x5f\x34\xdb\xc2\x3f\x01\xb8\xbf\xfe\xd0\x6f\x65\x23\xc9\xf4\x27\x81\xe6\x6c\xc7\x5a\x59\x83\x97\xac\xad\xf1\x6d\x7d\xa5\x1b\x4c\x5e\xb8\xf6\xce\xad\x91\xd3\xc8\x01\xf5\x9c\xa1\x91\xf2\xec\xfd\x9b\xb8\x1d\x23\xd6\x39\xe0\xa3\xac\x64\x21\x67\xcb\xf0\x78\x61\x3b\xc1\xfc\x67\xe7\x81\xbe\x3a\xc8\x82\x1b\x98\x7f\xbf\x02\x0f\x83\x69\x68\x30\x0d\x0d\x7a\x0b\x68\x83\xde\x62\xd0\x5b\x0c\x7a\x8b\xb8\x36\xe8\x2d\x1e\x3d\xfc\xa0\xb7\x18\xf4\x16\x83\x69\x68\xbd\x0d\x2c\x56\x7f\x1b\x58\xac\x07\xdb\xc0\x62\xf9\x36\xb0\x58\x03\x8b\x35\xb0\x58\x03\x8b\x35\xb0\x58\x87\xea\xe6\xb1\xa6\xa1\x47\x4d\x61\xbb\xc1\x2b\x99\x3f\x22\x78\xab\x92\xf9\x03\xb1\x5b\xa8\xd3\xcf\xe4\xb8\x90\x19\xd5\x36\xcc\xd6\x7c\x62\xad\x50\x8a\x96\x68\xa6\x18\x91\x7f\x4a\xc1\x30\x9a\xc5\x5c\x0f\x30\x16\x48\x3d\x67\xb5\x79\xfd\x44\x9d\x3e\x18\x42\x30\xc4\x7e\x0d\xb1\x5f\x43\xec\xd7\xbd\xed\xd9\xc4\x7e\xcd\xa9\x42\xb8\x45\xd2\x78\x7f\x28\x58\x80\x93\x3e\xb2\xba\xfc\x99\x46\x82\x19\x70\xb7\xe0\x08\x49\x22\x5a\x90\xc2\x9d\xc9\xad\xc1\x9f\xe5\x57\xdd\xfd\xb0\x62\x35\x2c\x8a\xe6\x39\xcb\x49\xc5\xea\x31\x82\xa8\x24\x53\x2e\xf2\x0d\x6b\x75\xfb\xd3\x8f\x1e\xf6\x18\x8a\xd5\x5d\x47\xd4\x37\xfb\x89\xc7\xea\x4e\x64\x0b\xa3\x62\x68\x19\xed\x10\xc1\x67\x11\x9d\x95\x2a\xa1\x8f\x89\xb6\x06\xc5\x2f\x23\x65\xf4\x74\x31\x1b\x84\x63\x67\x7e\xdc\x52\xfd\x94\x24\x0a\x9d\x59\x79\xfc\xc7\x86\xd5\x4b\x88\xcf\x6f\xc5\x4e\x9f\x8b\xc4\x7a\xc4\x70\x45\x32\xaa\x90\xac\xa6\xb0\xca\x97\x53\x8c\x9a\x14\x4d\x51\x8c\xb0\x9f\xd5\xcb\xea\xd0\x1c\xc0\x81\x90\xe6\xf7\x64\x8d\x58\xa2\x8a\x66\x3b\x1d\xc8\xf6\x56\x58\xb2\x7a\x4e\xab\x5d\xa1\x6e\xcc\xa9\x0e\xf1\x58\x36\xea\x0e\x37\x58\xd3\x93\xed\xe3\xd8\xb6\x15\x60\xb6\x12\x5f\x1e\x2d\xaf\x3f\xb0\x27\x8f\xd0\x2b\xc2\xcb\xc9\x93\xd9\x8d\x6e\x91\x6c\xaf\x5f\x24\x5b\xeb\x18\xc9\x56\x7a\x46\xb2\xad\xae\x91\x3c\x42\xdf\x48\xb6\xd3\x39\x92\x55\x68\x33\x27\x64\x19\xdf\xfd\xa8\x1f\xc9\xe3\x84\xf3\xed\xd5\x90\x64\x07\x17\x2b\x1c\x3f\xc8\xec\xb4\x3f\xbd\x24\x89\xd5\x4d\xc2\xb5\xea\xa8\x27\x0f\x7d\x2e\xdb\xa9\x26\xc9\x8e\x4e\xc5\x65\xc6\x01\x5d\xd8\xa1\x94\x95\xe4\xe9\x15\x96\x0f\x4e\xc1\x0e\x1f\xad\xe1\xdb\x6a\xf4\x47\x68\x05\xc9\xa3\x34\x83\x64\x7b\xed\x20\x79\x2c\xb0\xef\x4c\x4b\xb8\xd3\xae\x80\x4f\xfa\x0a\xfc\xd0\x1e\xc1\x6d\x25\xdf\xc0\x60\x58\xe4\x2e\x4a\x5a\x99\xdb\xf7\xdf\x86\x89\x00\xc0\xfc\x1f\x52\x51\x5e\x2b\x23\xdd\x58\xbd\x76\xf8\x9b\x55\xdf\x05\xdd\x24\x4f\xa0\x32\x03\x1b\x1a\xbf\xa0\x85\x61\x72\xd0\xe9\xd7\xea\x20\xcc\x5c\x56\x59\xc8\x11\xb9\x83\x84\x59\x86\xbc\xa1\x66\x82\x2b\x72\x74\xcb\x96\x47\xa3\x28\xf5\x40\xb7\x85\x37\xfb\xe8\x52\x1c\x21\xeb\xb4\x76\x2f\x3d\x9f\x25\x45\xb1\x24\x47\xf0\xdb\xd1\xae\x79\xd4\x2d\xf8\xa3\x30\x35\xeb\xb6\xec\xc7\x56\xd7\xe9\xb1\x0a\x6e\xd2\x81\xbe\x2f\xd9\x72\x5b\x47\x84\x24\x98\x7f\xd7\x19\xd1\x31\xd4\x00\x66\x46\x76\xf7\x7c\x13\x66\x66\x05\x96\xc9\xea\xa8\x50\x5d\xc5\x8b\x22\x61\xb4\x1b\x46\x34\xbd\x65\x60\xe1\x91\x90\x5a\x8e\xe7\x0c\x93\xe9\x21\xe8\xc0\x48\x06\x64\x1a\x05\xe9\x71\x49\x21\xe5\x6d\x53\x39\xd0\x73\xd9\x24\x13\x86\xe4\x22\x93\xa5\xf3\xa9\x47\xbf\xd6\x91\x4d\x30\x77\xcb\x96\x63\xcc\x81\x89\xcf\x61\x60\x20\x01\x56\x35\xf1\x43\x47\x30\xff\x81\x50\x45\x7e\x00\xa6\x52\x90\x13\xf8\xf0\xf4\x87\x14\x97\x02\xbf\x81\xa8\x7d\x95\x0d\x60\x16\x66\x88\xa5\x9d\xa0\x5a\xdd\xdb\x87\x76\x2c\x61\x68\x97\x29\x2e\xdc\x8c\x63\xb4\x37\x9c\x50\xa1\xf9\xa9\x57\xd2\x4c\x08\xc0\x01\x70\xc9\xb9\x14\xc7\x1a\xe7\xe7\xf0\x9a\xeb\x20\xc5\xeb\xc0\xef\x7b\x6b\xf1\x43\x6b\x01\x1e\x79\xce\xa6\xb4\x29\xb4\xcd\x46\x6a\x50\x1f\x50\xfa\x84\x11\x3e\x3a\x7b\x89\x65\xf8\xa7\xb2\xbe\xe1\x79\xce\x04\x84\x38\xb8\xe9\xdf\x48\x17\x10\xd4\x82\xbb\xc1\x6c\x9d\x33\x4e\x19\xf6\xac\x50\x72\xb4\xda\x63\xe6\xb3\x95\x9a\x5b\x74\x37\x67\xa2\x3b\x00\xe1\xca\x6c\xaa\x62\x09\x4c\xed\x41\x5c\x7f\x1e\x8f\xf3\xb6\x76\xbd\xe2\xea\x09\xf0\xde\xea\xa0\x03\xea\x8b\x42\x7d\x42\xea\x01\xfb\x7d\xb6\xd8\x6f\x0d\xe8\x77\x81\x00\xd7\x3a\x1d\x70\x60\x32\x0e\x14\x2e\x0d\xf2\x13\x5b\x01\x50\x31\x86\x5e\xac\x6e\x4a\xaa\xd5\x99\x41\xa0\xd7\x76\xfa\x32\x17\x06\x07\x78\x16\x7a\xc8\x9d\x31\xb4\x11\x36\x19\x3c\x98\x43\xdb\x61\x11\x5f\xac\xda\xdc\x13\xc6\x74\x82\x8b\x14\x4c\x81\x8a\x9d\x79\xff\x8a\x60\x18\xe8\x35\x65\x29\x10\x0a\xd7\xaa\x0f\x45\xbe\x1a\x1c\xd7\xf6\x0d\x7a\xfd\x92\x51\xa1\xc8\x91\x73\xf1\x38\x56\xed\x1b\x47\x49\xf7\xcd\xa5\xbe\xf4\x63\x43\xa6\xe3\x30\xdd\x65\x3b\xf4\x60\x47\x19\xec\x28\x61\x1b\xec\x28\xeb\x93\x18\xec\x28\xf7\xb5\xc1\x8e\xb2\xd5\xf8\x83\x1d\xa5\xdb\x06\x3b\xca\x60\x47\x19\xec\x28\x83\x1d\x65\xb0\xa3\x0c\x76\x94\xd8\x8f\x76\x61\x47\x69\xc5\xa0\x43\xc8\xd1\xa1\xc8\x6a\xfd\xc4\xb1\xca\x16\xd5\x3c\x6b\xa3\x42\xdd\x5b\xf8\xaf\xa7\x12\xaa\x43\x31\xf8\xb1\x22\x75\x28\xa0\xaf\x69\x30\x92\x25\xea\x7b\xe5\x67\x2f\x61\xaf\x8d\xb1\x23\xd1\xfa\x67\xae\x5c\x0a\x1c\x58\x0f\x71\x1d\x3e\xba\x50\x16\x5b\xb8\xef\x86\xb5\x71\x2e\x39\x39\x71\xba\xd6\x53\x73\xe0\x42\xea\xee\x8f\x42\xf3\x71\xfb\x86\x77\x10\x06\x95\xb0\xcb\xe6\x96\xb2\xe9\x4e\x66\x69\x75\x8f\x62\xa5\xec\x65\x0b\x6d\x06\xff\xb3\xba\x33\x5b\xae\x6c\x25\x35\x08\x4d\xab\x1b\x21\x0c\x7b\x24\x85\x8d\xe2\x48\x98\x09\x92\x16\x54\xf3\xda\x5b\x89\xc2\x14\xac\x11\x24\xaa\xf6\x98\x82\x00\x00\xaa\xb1\x4c\xa2\xcd\xb9\x24\x85\x55\x92\x9b\x27\xd8\x4f\xc2\x24\xfc\x85\x85\xfd\xe4\x7e\x45\x29\x77\xf5\x02\xee\x68\x38\x59\xae\xe0\x1c\x69\x51\xc8\xbb\x14\xfa\x94\x78\x23\xb6\x4e\x0e\x18\x0d\xbd\x77\xc9\x59\x04\x57\xbc\xe5\x63\x79\xf5\x21\xd5\xe0\x83\x6d\x48\x35\xf8\x3c\x52\x0d\x06\x76\xd0\x30\xe7\x60\xff\x5e\x41\x4e\xc2\xbd\xe6\x1c\x24\xe4\xef\x73\x06\xb7\xa8\x66\x68\xbc\x6c\x0a\xcd\xab\x36\xca\x58\xe1\x09\x15\x28\x52\x4f\x6d\x34\x60\xf7\xf6\x9a\xd9\xd0\x6c\xde\x3b\xd4\xca\x2d\x87\xf1\x20\x6a\x59\x01\x36\xc5\x88\x39\xd0\xbf\x63\xa2\x3f\x27\x6b\x63\xd8\x21\x7f\xea\x68\xaa\x28\xfc\xf7\xc6\x15\x0c\x0d\x6c\xe0\x8a\x9c\x18\xea\x58\x2c\xad\xd5\xb8\x83\x08\x3b\x64\x35\x62\x00\xd4\x83\x2d\x98\x63\x50\x67\x7c\xc1\x44\x4b\x7d\x4f\xd4\xe9\xa9\xe3\x89\x57\xf9\x87\x88\xde\x1f\xc3\x61\xc4\x60\xed\x54\xce\x60\x85\xde\x47\x8c\xb0\x81\x23\xf8\x73\x40\x65\xff\xd2\xcf\x13\x44\x0c\x82\x57\xda\x85\x67\x06\x07\xdd\xf2\x02\xbd\xbd\xec\x31\x0a\x2e\x25\xd4\x2a\x4d\x2b\xbe\x45\x88\xd5\xb6\x99\x32\xf7\x1b\x5a\xb5\xd7\xb0\xaa\xcf\x27\xa1\xe5\x13\x9b\xff\x3e\x83\x6c\x4c\xcf\xc4\xdc\x37\xa4\x63\xba\xaf\x3d\x55\x3a\xa6\xbd\x9b\xf3\x3e\xbb\xac\x4c\x07\x35\xdf\x1d\xc6\x74\xf7\x99\x65\x65\x7a\x12\x53\xdd\x33\xcf\xcf\xb4\x3f\x13\xdd\x90\xfc\xe8\x69\xf2\x4b\xa6\x9a\xe1\xb6\xbf\x55\x4f\x6a\x7e\x7b\x52\xd3\xdb\xd3\x9b\xdd\xb6\xe2\x55\x1e\x6b\x6e\x4b\xbe\x26\x8f\x35\xb3\x6d\xe3\xb2\xbf\x1d\x3c\x1f\x2e\x44\xe9\xc0\x3e\xfa\xcf\x23\x34\xe9\x89\x1c\xf3\x9f\xca\x29\x7f\xbf\x0e\xf9\x4f\x10\x8a\x74\x90\x30\xa4\x54\xb2\x9f\x44\xec\x1f\x87\xbb\xb6\xa1\xc8\x5b\x86\x1c\x6d\x89\xbf\x0e\x19\x6a\xf4\x33\x40\x61\x5b\x85\x18\x0d\x58\xec\x89\xb0\xd8\xee\x42\x8a\x0e\x15\x4e\xf4\x33\xc3\x65\x5b\x86\x0e\xed\x4c\xbb\xbd\x9f\x90\xa1\x43\x87\x0b\xed\x21\x54\xe8\x29\xc2\x84\xf6\x10\x22\x34\xd8\x04\x22\xdb\x60\x13\x88\x6d\x83\x4d\xe0\xbe\x36\xd8\x04\x56\xdb\x60\x13\x18\x6c\x02\x83\x4d\x60\xb0\x09\xac\x0f\x38\xd8\x04\x06\x9b\x40\x5c\x1b\x6c\x02\x87\xb1\x09\xa4\x86\xdd\x6c\x07\xcb\x4f\x13\x6e\x73\xd8\x50\x9b\xdd\x87\xd9\x3c\x61\x88\xcd\xcf\x4c\xe1\x92\x1c\x4e\xb3\x1d\x98\x3f\x97\x30\x9a\xe7\x11\x42\xf3\xe4\xe1\x33\x8f\x0d\x9d\xd9\x4d\xd8\x4c\x02\xb4\x6f\x09\xe7\x95\xcc\xcf\x84\xe6\x8f\x2d\x7c\x14\x02\xe0\x7d\xd5\x8f\xe8\x42\xf2\x9c\x54\x8d\xb6\x05\x57\x86\x0a\x48\xbd\x30\x70\x98\x0a\x48\x9d\xc3\x1b\xca\x20\x3d\xd4\x9e\x4d\x19\xa4\xfb\xce\xec\x80\xb5\x90\x54\x73\xa3\x6b\x9a\xe9\xa4\x82\x48\xce\xe0\x38\x94\x44\x5a\x6b\x43\x49\xa4\xa1\x24\xd2\x50\x12\x69\x28\x89\x34\xa4\xf2\x1b\x52\xf9\x85\xed\xd9\xd8\xf1\xc8\x90\xca\x2f\xf1\xd3\x21\x95\x5f\x5f\x1b\x52\xf9\x0d\xa9\xfc\xee\x1b\x7d\x48\xe5\x37\xa4\xf2\x4b\x1b\x78\x48\xe5\x47\x86\x54\x7e\x43\x2a\xbf\xcf\x38\x95\xdf\x50\x12\xe9\xb3\xa8\x0b\x32\x14\x05\x49\x18\xfb\x79\x15\x05\x19\x4a\x22\x3d\x38\xc8\x50\x12\x69\x40\x7d\x43\x49\xa4\x9f\x2d\xf6\x1b\x4a\x22\x45\x0c\x32\x94\x44\x1a\x4a\x22\x3d\xd8\x86\x92\x48\x83\x1d\x85\x0c\x76\x94\xc1\x8e\x92\xfa\xd5\x60\x47\xb9\xbf\x0d\x76\x94\x94\x36\xd8\x51\xa2\x47\x1f\xec\x28\x83\x1d\x25\x6d\xe0\xc1\x8e\x42\x06\x3b\xca\x60\x47\xf9\x8c\xed\x28\x43\x49\xa4\xa1\x24\xd2\x50\x12\xc9\x8f\x3c\x94\x44\x1a\x4a\x22\x41\x1b\x4a\x22\x45\x8c\x30\x94\x44\xfa\x5c\x4b\x22\x75\xc2\x82\x3e\xdf\xba\x48\xe9\xcb\x18\x8a\x23\x0d\xc5\x91\xee\x69\x43\x71\xa4\xa1\x38\xd2\xa6\x36\x14\x47\x1a\x8a\x23\x3d\xd0\x86\x44\x88\x91\x6d\x48\x84\x18\xdb\x86\x44\x88\xf7\xb5\x21\x11\xe2\x6a\x1b\x12\x21\x0e\x89\x10\x87\x44\x88\x43\x22\xc4\xf5\x01\x87\x44\x88\x43\x22\xc4\xb8\xf6\xf4\x06\xb8\xff\x1d\x89\x10\x87\xe2\x48\xcf\xb2\xb2\xc8\x50\x56\xa4\xa7\x3d\x9f\xb2\x22\x43\x71\xa4\x4e\xe7\x43\x71\xa4\x01\x85\x0d\xc5\x91\x3e\x3b\x2c\x36\x14\x47\xda\xd0\xf9\x50\x1c\x69\x28\x8e\x34\x14\x47\x1a\x6c\x02\xbd\x6d\xb0\x09\x0c\x36\x81\xb0\x0d\x36\x81\xd5\x36\xd8\x04\x06\x9b\xc0\x60\x13\x18\x6c\x02\xeb\x03\x0e\x36\x81\xc1\x26\x10\xd7\x06\x9b\xc0\x50\x1c\x69\x28\x8e\x34\x14\x47\x82\x36\x14\x47\x1a\x8a\x23\x0d\xc5\x91\x36\x7e\x0c\x8a\x56\x94\x6c\xee\x83\xec\x58\x58\x3e\x6b\xbb\xb2\x1c\x7c\x23\x94\xae\x9b\x4c\x37\x35\xcb\xe1\xc0\xf0\x30\x0d\x63\xa0\xb4\xac\x9d\x55\x00\x2a\xcd\xbc\x61\x55\x21\x97\x86\xda\x8e\xc8\x95\xcc\x47\xe4\xec\xea\xf2\x9a\xd5\x0b\x9e\x31\x07\x7d\x5f\x5b\x9a\x7e\xff\xbe\x7d\x5c\x56\x3c\xa3\x45\x01\x1a\x8b\x76\x36\x25\x5d\x3a\x5d\xf2\xcd\x92\xb0\x4f\x9a\xd5\x82\x16\x44\x4b\x59\xa0\xf9\xc5\x4c\x06\x10\x62\xcd\x74\xcd\xd9\x82\x11\x5a\xdf\x70\x5d\xd3\x7a\x49\x4a\xa6\x69\x4e\x35\xbd\x7f\xd4\x6f\x14\x0b\x63\x34\xb4\x24\x55\xcd\xc6\x78\x03\x3a\xf3\x00\xd8\xfc\xfa\xab\x77\xee\x7e\xd3\x3c\x77\x01\x09\x0e\xc2\xaf\x9b\x1b\xbf\xdb\xc7\xf7\x73\x5b\xb9\xdf\x2d\x35\x02\xf0\xb4\x2a\x9a\x8a\x2b\xdc\xb3\x7b\x25\xd2\x08\xb6\x24\x8d\x09\xe9\x85\x4f\x26\x16\x8f\x05\xad\x0b\xb1\xe8\x6a\xf6\x98\x58\xf0\x5a\x0a\xe0\x23\x17\xb4\xe6\xf4\xa6\x60\xd6\x92\xe6\xed\x2b\x96\xb7\x63\x0f\xc0\xcb\xb9\xb7\x33\x60\xb0\xcb\xbd\x57\xb2\x9f\x9e\xf5\x50\xb0\xce\x4a\x2f\xc4\xe2\x5b\xda\x55\x33\x88\x8d\x4b\x22\xf6\x05\xb3\x24\x4a\xce\xfb\x17\x14\xc5\x74\xc6\xa8\xc3\xc6\x80\xe1\xef\x7d\x21\x4e\x69\x65\xba\x78\x98\x5e\xa6\xd1\xc9\xf7\xb4\x6c\x2b\x68\x6d\xd8\xae\x3e\x84\xfa\x0e\x39\x7e\x65\x81\xc8\x10\x84\xaa\xe6\x42\xc3\x56\x9f\x5d\x9f\x5f\x5e\x92\x6c\x4e\x6b\x9a\x69\x56\x2b\xc2\x3e\x65\xac\xd2\xe4\xf8\xff\x77\xfc\x70\xbf\x91\x08\x1a\x70\xdf\x2e\x77\xe3\x5b\x07\x24\x50\xde\x88\x09\xc3\xd9\xfd\xea\xe4\xdb\xb3\x0f\xff\xf5\xfe\xec\xdd\xc5\x29\xc8\x2c\xec\x53\x45\x45\xce\xfa\x78\xd0\x46\xb9\x10\x9f\xaa\x66\x0b\x2e\x1b\x55\x2c\x3d\x09\xdf\x7c\xd7\x56\x2f\x99\xc1\x3f\x3d\xa3\x98\xfd\xb6\xe8\x69\x73\xa7\xa0\x67\xa1\x2d\xf4\xb7\x66\xc0\x9a\x29\x59\x2c\x58\xde\xa7\x5e\x81\x60\x4b\xb7\x1d\xad\xa1\xb5\x6a\xb4\xd3\x22\x39\xdb\x69\x23\xb2\x39\x15\x33\x96\x4f\xc8\x1b\xd9\x98\xd1\x7e\xf5\x2b\xd8\xb2\x9a\xe5\x4d\xd6\xbb\x63\xa8\x02\x44\x89\xf9\x57\x23\xc7\x61\x18\xba\xae\xb0\x7a\x9a\xca\x68\xe5\x36\x35\x3c\x15\xb5\x14\x9a\x7e\x7a\x1d\x53\x87\xed\xe8\x57\xc1\x87\x47\xae\x2e\x9e\x34\xd3\x43\x6e\x0c\x57\x54\x40\x49\xb3\x82\x1c\x85\x6f\xf7\xf5\x7d\x61\xe6\xc7\xf2\x10\x76\x30\xb4\x91\x2d\x58\x0d\xda\x27\x0b\x39\x23\x52\xb3\x19\xad\xf3\x82\x29\x08\xaa\xbb\x9b\x33\x28\x52\x88\xa2\x34\x1e\x54\xcf\x58\xcc\x6b\xca\x84\xec\xd5\x60\xbe\x41\x33\x36\x20\xf3\xa3\x9e\x65\xa4\xdc\xbc\xb7\xb5\xec\xa9\x71\xd5\xb9\x7d\xd7\x10\xb5\xe3\x8d\xfd\x9b\xc0\xf5\xd8\x5a\x49\x26\x21\x19\x51\x86\xfd\x9d\xb6\x46\x78\xf3\x3c\xc2\x10\x1f\xad\x2c\x88\xb7\x16\x64\x52\x4c\xf9\xec\x1d\xad\xbe\x64\xcb\x0f\x6c\x9a\x18\x40\x88\x9c\xbf\xd5\x7f\x03\xb2\x34\xe4\x07\x3b\xec\xe7\x5b\xf7\x18\x2f\x16\x63\x93\x49\x33\xa9\x44\x1b\x52\xd6\x2a\xd7\xa1\x0c\x62\xe5\x84\x9d\x73\xf3\x24\x8a\x82\x6e\x9c\x5c\xb4\xc4\x19\x52\x54\x8b\x0a\xa2\x6d\x0c\x1f\x5b\x96\x97\x2b\xc2\xa6\x53\x96\x69\xbe\x60\x85\x0f\x65\xb6\x15\x34\x6d\x68\xf1\x0d\xcd\x6e\xef\x68\x9d\x2b\xa8\xc9\x48\x35\xbf\xe1\x05\xd7\xcb\x98\x7a\x97\xd8\xac\xd4\x64\xa3\x9f\x9d\x62\x5e\x28\x4d\x01\x7d\xb9\xca\x8d\x66\x87\x51\xae\xa0\xce\x32\x8e\xb7\xd1\xc5\x0d\x47\x0f\x07\xc5\x03\x33\x56\x1b\x02\x57\x2c\xc9\x5d\x2d\xe3\x65\xbf\x77\x12\x02\x86\xa7\xf2\x35\x99\x6b\x5d\xa9\xd7\x2f\x5e\xb4\xb2\xd9\x84\xcb\x17\xb9\xcc\xd4\x8b\x4c\x0a\xc3\x63\xa8\x17\x72\x61\xe8\x22\xbb\x7b\x71\x27\xeb\x5b\x2e\x66\x63\xb3\x80\x31\x5e\x20\xf5\x02\x84\xed\x17\xbf\x84\xff\xed\x03\xca\x88\x73\x1e\x7a\x4d\x8e\x8e\x22\xde\x97\x15\x8a\x07\x5b\x40\xe6\x35\x68\x10\x96\x1d\x32\xe2\x11\x8b\x21\x11\x5c\x2b\xb8\x57\xce\x0a\x62\xb9\x90\x84\x65\xdf\x48\x59\x30\xda\xef\xce\xf5\x18\xd5\x27\x80\x7d\x3a\x56\x8d\xba\x97\x2d\xea\xc5\xcb\x65\xaf\x67\x25\xf3\xd7\x44\x35\x55\x25\x6b\xad\x5a\xa9\xd4\x00\xc5\xa8\xfb\x27\xe8\x65\x46\xe4\x07\xff\x10\xdd\xc6\xbe\x3b\xfe\xf3\x97\x17\xff\xfe\x97\xe3\xef\x7f\x08\x7f\x0b\xe4\xd3\xe0\x85\x88\x69\xaa\x8a\x65\x13\x21\x73\xf6\x1e\x66\x00\x7f\x5a\xee\xee\x2c\xcb\x64\x23\xb4\xfd\x41\x53\xdd\xa8\xc9\x5c\x2a\x7d\x79\xe5\xff\xac\x64\xbe\xfa\x57\x84\x11\x75\x8f\x74\x05\xf6\xfa\x8a\xea\x88\xd4\x00\x49\xd4\x85\x56\xfc\x5b\x56\xab\x88\x64\x18\xd8\x3a\xf0\x62\xbf\x0c\x4b\xee\x96\x14\xfe\xf9\xd6\x4d\xd7\xe0\xde\xbb\x9a\x6b\x0d\x3e\x8d\x36\x1b\x81\x9c\x8e\xdc\x95\x46\x46\x6a\xf1\x2a\x49\x71\x1b\x8d\x39\xfc\xae\x6d\xb1\x38\x98\xbd\x5d\x99\xd7\x9c\x58\x8f\xce\x35\x7d\xe3\xd9\xd5\x25\x59\xe0\x6e\xec\x61\x21\x8f\x43\x05\x05\xdb\x8a\xc5\x8a\x42\x06\x6f\x7d\xef\x76\x6b\x02\x96\xcc\x32\xa6\x30\x83\x98\x4d\xb1\xf5\x5a\xd1\xe7\xe3\x42\x2c\x4c\xdf\x8a\x4c\x19\xd5\x4d\xcd\xc8\x8c\x6a\x97\x59\x84\x09\xc3\xdf\x46\xe8\x27\x9f\x98\xcf\x83\x7a\xba\x31\x57\xd6\xbc\xb8\x90\x45\x53\x02\xb2\x7a\x16\xfc\x63\x82\x51\x00\x19\x4d\xc3\x11\xd8\x6b\xe1\x0f\x9d\x9c\x99\x4b\xbf\x00\x57\x12\x7c\x07\x4b\xa7\x2f\xc0\xda\x1a\x26\x59\x51\x9a\xd6\x3a\x41\x77\xed\xfd\xc6\x9d\x16\xc0\x0e\x4f\x09\xe6\x33\xc0\xa2\xe8\x3b\xd7\xa5\xb4\x0d\x33\x09\x91\xb3\xa2\x9a\x83\xa1\x6f\xe6\xf9\xd4\x8d\x90\x3b\xf2\x9e\x65\x8a\xff\x13\x24\xaf\x82\x97\x5c\x23\xbb\xf8\xea\xb7\x7f\x0a\x26\xb3\x17\x44\xf8\x08\x96\x28\x1a\x12\x36\xf1\x4e\x06\x0c\x1e\x60\x9b\xbc\xe7\x8a\x7b\x2f\xde\xa5\x2d\x97\xcc\x8a\xaf\xe0\xd7\x62\x7a\x69\xa1\x6f\x41\x6b\x27\xdd\x56\xcd\x4d\xc1\xd5\x3c\xde\x34\x7e\x39\xf5\xbb\x65\xfa\x50\x0c\x1c\x03\x74\xdd\x30\x6f\x03\x6d\xf1\xbe\x59\xd3\xca\x4c\x12\x8c\x58\x1b\x75\xaa\x9d\x14\x4e\xad\xba\xf8\x0a\x0c\x9d\x5e\x9f\xa5\x26\xbf\x78\xd4\x7a\xa6\xb4\x50\xbb\x5d\x90\x11\x67\xea\x5a\xd6\x5e\x85\x55\x33\xdd\xd4\xa2\xf5\x05\xba\x92\x39\xc9\x6a\x86\x91\x1f\x7b\x60\x98\x49\x28\x28\xc0\xfa\x22\x3e\xa9\xb6\x63\x0e\x92\xd0\xa3\x19\x23\xc4\x8f\x88\xea\x11\xf1\xa1\x66\xae\x1b\x2b\x12\x4b\x30\x4d\x7b\x67\x2f\x94\xcf\x65\x64\x8e\xd4\xe5\xb7\xb2\xd0\x02\x9d\x1e\x4f\x26\xc7\x38\x13\x59\x23\xba\x45\x29\xd4\x3c\xdf\x0b\xca\x69\x09\xda\x96\xea\x0b\x11\x08\xff\x76\xcb\x4a\xc3\xb7\xbb\x65\x39\xf5\x65\x0a\x8f\x71\x40\xc6\xcb\xa5\xd6\x79\x7b\x10\x59\xcc\x8d\xe6\x36\xcc\x23\x8a\xd7\xe8\x3b\xe4\x13\xfd\x20\xe1\x51\xd6\x9c\xf8\x63\xc3\x94\x8e\x11\xda\x4f\xf0\xb3\x49\x56\x35\x23\xdb\xc5\xa4\x64\xa5\xac\x97\xfe\x4f\x56\xcd\x59\xc9\x6a\x5a\x8c\x95\x96\x35\x9d\xb1\x91\x1f\x00\x3f\xf3\x7f\xe1\x87\x9d\x29\xac\x7f\x8d\x16\x82\xac\xa9\x6b\x26\x74\xb1\x74\xb2\xe5\x13\xf3\x7d\x6e\x1f\x77\xcc\xa4\xf9\xe3\xda\xf2\xbe\x1c\x7b\xe3\x1b\xea\xe4\xfc\xaa\x40\x45\x8c\xb7\x47\x8d\x5a\x42\x00\x36\x00\x24\x94\xea\x78\x1f\xb7\x3f\xe7\x0b\xae\xb6\x8a\xfc\xb9\xf6\x1e\x54\xe0\x6e\xd4\xe8\xaa\xd1\x36\x7d\xa4\x97\x2a\x3e\x55\x52\x81\x75\xc0\x67\xaf\xea\x88\x93\xaf\x62\xb4\x44\x80\xfb\x35\xab\xc5\x6b\xf2\x9f\x27\xff\xf1\x9b\x9f\xc6\xa7\x7f\x3d\x39\xf9\xee\xe5\xf8\x5f\xbf\xff\xcd\xc9\x7f\x4c\xe0\x1f\xbf\x3e\xfd\xeb\xe9\x4f\xee\x8f\xdf\x9c\x9e\x9e\x9c\x7c\xf7\xe5\xbb\xbf\x7d\xbc\xba\xf8\x9e\x9f\xfe\xf4\x9d\x68\xca\x5b\xfc\xeb\xa7\x93\xef\xd8\xc5\xf7\x91\x9d\x9c\x9e\xfe\xf5\x57\x51\xd3\xa3\x62\xf9\x75\x04\xd6\xc0\x36\xde\x22\x27\x67\xfb\xd5\xb6\xce\x4a\x5c\xe8\xb1\xac\xc7\xf8\xf9\x6b\x60\x92\x22\x3a\x71\xc7\xb6\x0d\x9c\x7f\x70\xb7\xb5\xc5\x78\x9e\x78\xee\x01\x90\x1f\x43\x00\x14\xcb\x6a\xa6\x77\x65\xde\xc0\xde\x1c\x37\xb8\xe2\xf6\xf6\xdc\x25\xe1\x43\x5a\x3c\x7c\x2a\x41\xd8\xaf\x96\xb3\x32\xec\xd6\xa4\x65\x98\x28\x41\xb9\xd4\xbe\x77\xcb\x22\x63\x51\x07\x0b\xc9\x60\x21\x19\x2c\x24\x5d\x29\xff\x1a\xef\xd0\x33\x37\x8f\x30\xb1\x78\xc8\xca\x9e\xe0\xec\xf5\x16\xf2\x02\x87\x0e\x5f\x8e\xb9\xd6\x92\x54\xb2\x6a\x0a\xaa\xef\xf1\x21\x49\xf0\xfe\xea\xd7\x71\x79\x54\x76\xfe\x5f\x97\x6f\x2e\xde\x7f\xbc\x7c\x7b\x79\xf1\x61\x42\xce\x8a\x22\x54\xbb\xdd\x0f\x71\xad\xa4\x8e\x9c\x35\xa1\xe8\xea\x05\xfa\xb9\x3b\xa7\x50\x69\x7d\x68\xb8\x6a\x15\x75\x98\xed\x18\x09\x94\xf5\xa0\xe0\xc2\xe7\x3c\xbe\x77\x48\xcf\xb0\xf9\x58\x87\xb5\x34\xe7\xe8\x49\xab\xb4\x5b\x26\xcc\x52\xd3\x5b\xf0\xfe\xc9\x58\xce\x44\xf6\x80\xac\xf7\x2d\xc6\x4f\xb8\x3d\xbb\x31\x62\x06\x38\xe8\x21\x46\x21\x79\x53\x15\x3c\x33\xe7\xe3\x35\x92\xd1\x7d\x5f\x96\x65\xa3\x1f\xf2\xe4\xda\xb9\x1f\x9e\x81\x34\xeb\xeb\x11\xb8\xe3\x01\x7d\xf3\xe2\x9e\x8f\xf5\xf3\x86\x4a\x70\x66\xc1\x4b\x79\xff\xe1\x47\xb1\x04\x71\x84\xdb\xfb\x72\xf4\x72\x3a\x6b\x14\xbb\x35\xae\x76\x29\xf5\x83\xbd\xec\xc1\x1d\x25\x8e\x4e\xa7\xd3\xe8\x6d\xe9\xf3\x21\x69\xf3\x01\xe9\xf2\xf6\x34\xf9\xe9\xe8\x71\x12\x2d\x8e\xa7\xc3\xf1\x34\x38\xc1\x43\x21\x95\xee\xc6\xd3\xdc\x6d\x25\xa1\xaa\x66\x53\xfe\x69\x97\x8e\xa5\x5f\x3b\x25\x86\x66\x9f\xb4\x75\x67\xaf\x98\xf0\xc1\x4f\x4e\x6f\x08\x7e\xeb\x9f\x9d\x1f\x2e\xca\x23\xe9\x88\xf4\x7a\x93\xbc\x33\x60\xd1\x01\x8b\x76\xda\x80\x45\x7b\xa5\x98\xe7\x84\x42\x85\xcc\x7b\x93\x28\xc5\xde\xa6\xf7\x41\x5f\x2b\xb9\x55\xd0\x08\xe5\x16\x0e\xa6\x4e\xe7\x59\x5c\x49\x80\xe8\x29\xd7\x6d\x80\xdc\xfd\x80\x76\xbd\xa1\x47\x88\x7c\xb3\x5f\x1e\x2b\x97\x23\x6c\xa5\xff\x95\x72\x35\x18\x8a\xf4\xf0\x58\x89\xa0\x8c\x3c\x6a\x83\xb9\xd4\x5e\x50\xa5\xf8\x4c\x8c\x2b\x99\x8f\xcd\x28\x2f\x1e\xe4\xe7\x0f\x19\x8d\xe4\x55\xda\x8f\x3d\xee\x0f\xde\xe0\x13\x08\x0e\x06\xad\x35\x9a\x05\xd6\x20\x6f\x27\x70\x29\xaa\x22\x04\xd3\x5e\x31\xe8\x91\x87\x53\x52\x41\x67\x6c\x6c\x27\x3b\xf6\x93\x1d\xfb\xb9\x3d\xe2\xbc\x62\x88\x59\x56\x50\xfe\x70\xbc\x6f\x0a\x09\x3b\x87\xde\x6c\xdd\x1f\x1f\x90\xbd\x52\x7d\xc3\xc9\xab\x5c\xa0\xab\xa2\xfb\x09\x3f\x7e\xd8\x06\x0f\x97\xc5\x27\x50\xdc\x70\x90\x0f\x7e\x1d\xd0\xc8\x1c\xf8\x28\x85\x17\xf0\x61\x42\xf4\x66\x29\x68\xc9\x33\x07\x65\x67\x05\x04\xd7\x72\x29\x3a\x6e\x2f\xf1\x43\x73\x45\xb8\x07\x2b\x72\xa9\x49\x46\x05\x5a\x2e\xad\x1b\x84\x41\x18\xa1\xf7\xc3\x03\xdb\x11\x15\xdc\x1d\x11\xd2\xdd\x39\xe4\x0f\xe1\x81\x84\x71\x29\x52\x30\xc2\x84\xae\x21\xd3\xed\x95\xcc\x0d\x69\x99\x74\xde\xee\x71\xe9\x89\xe6\xc3\x62\xf5\xf2\x3d\xc1\x71\xe4\xf9\xb0\x74\x01\x81\x08\x39\xf7\xce\x96\x56\x32\x9f\x6c\xb8\x12\xf1\x25\x8c\xae\x64\x6e\x63\xc0\x75\x07\xde\xcc\x6d\x01\x50\x2b\xe9\xad\x8b\xcc\xf6\x46\x25\xba\xa0\xbc\x88\x08\x1e\x22\x90\x72\x54\xf1\x9c\x11\x1a\x83\x3b\xfd\xc4\xe2\xd9\x21\x6b\x22\xdf\xc7\x21\x7c\xc0\xae\x5d\xa2\x2d\xd8\xff\x6c\x2e\x15\x13\x70\xdf\xa8\x1b\xdb\x17\x0a\x74\x60\x9f\x23\x8e\x8c\x61\x39\x2f\xa7\xc8\xe6\x8e\x08\x5b\xb0\x7a\xa9\xa1\x5c\x97\x4b\xea\x8a\xdd\x98\xf1\x4b\x9a\x07\xbb\x3e\x22\xd2\xf0\x65\x77\x3c\xca\x89\x07\xf0\x04\xce\x4f\x35\x85\xf6\xbc\xb6\x9d\xfd\xce\x4e\x63\x3d\x80\xdd\x70\x71\xb7\xbd\xd9\x7a\x7b\x2f\xe4\x7d\x91\xf1\x25\xad\xee\xfd\x0a\xbd\x2e\x76\x45\xa4\xbe\x42\xaf\x10\xfc\xe4\xc6\x1a\xdf\x4b\xfa\x89\x97\x4d\x49\x28\xfa\xdd\xc8\xe9\x06\x06\x22\x2a\x59\xc0\x2e\xd8\x81\x0d\x6c\x80\xba\x8f\x0f\x20\xf1\x68\x35\x3d\xa5\xcd\x33\x75\x1b\x88\x72\x17\x48\x73\x13\x48\x70\x0f\xd8\xda\x2d\xc0\x39\x00\xed\x0a\x90\x2d\x4a\x5b\x03\x65\x2e\x7a\x41\xd9\xd1\xd7\x87\x61\xf9\x72\xda\x8e\xc1\x15\x91\x25\xd7\xda\xfa\xd9\x04\x14\x60\x44\xb8\xee\x38\xa5\xd8\x0b\xc6\xa7\x48\x68\xb8\x22\xec\x53\x55\xf0\x8c\x83\x6f\x93\xf3\xbf\x7c\x98\xd1\xf3\x38\xd1\xa6\xaa\xe2\x65\x85\xc9\xaa\xe0\xa2\x8c\x1d\x0f\x69\xc3\x3e\xfd\x2c\x6d\x9c\x32\xfb\x94\x31\x96\xdb\x89\x0c\xf7\x75\xb8\xaf\xc9\xf7\x55\xed\x48\x15\x11\xaa\x21\xda\xbc\x39\x5e\x1d\x61\xae\x12\xe4\xb4\x41\xc5\x80\x83\xae\x87\x2e\xe6\x85\xcb\xaa\xfe\x81\x81\x79\xef\x9a\x69\x65\x33\xf4\x40\x4f\x0f\xe9\xd5\xd6\xb2\x34\xfb\x4c\xec\x2e\xdd\x15\x05\xc5\x61\xf0\x46\x9b\xdf\xe4\x01\x29\x59\xaf\xb2\xb7\xa0\xeb\x60\x65\x55\x50\xdd\x6a\x42\x1e\x91\x08\x25\x86\x89\x4f\x49\x64\xfc\xb4\xa9\x8b\xf7\x23\xb6\xf5\xb2\xc1\x4f\x98\x82\x78\xdb\xa4\xc3\x7b\x10\x18\xfb\x9d\xb8\x22\x93\x07\xc7\x0b\x96\x51\x5e\x5e\xfb\x4e\x09\x9c\x20\x86\xc5\xa7\xfd\x4d\x97\xc3\xf6\x9c\xda\x77\x5f\xc9\x7c\x13\x76\x2f\x36\x61\x6f\xfa\xde\x1d\x28\x29\xef\xc1\xd3\xf0\x1e\x32\xf1\x6e\x52\xaa\xdd\x94\xe4\x89\xd1\x89\x13\xb7\xf7\xca\x4d\x49\x98\xb8\xe5\x87\x91\x69\x71\x53\x60\xf7\xc0\xa9\x6f\x0f\x9c\xec\xf6\x29\xd2\xdb\xee\x4d\x7e\x88\x00\xcd\x74\xcb\x9e\x96\x85\xad\xeb\x13\x67\xe9\xf9\xd8\xbe\x0f\xdb\xd1\x3a\x81\x07\x3d\x1d\xc6\x2d\xed\x41\xc8\xfe\xe8\xf8\x5c\x83\x9d\xda\x49\x03\x8c\x6b\x4d\xb3\xb9\x4d\x52\x8b\xbf\x18\x48\x10\x4b\x62\x80\x40\x23\x25\xb7\x79\x32\x1f\x3a\xe7\x39\x23\xba\xe6\x55\xc1\xc8\x9f\xfd\x85\x18\xa1\x6d\xff\x2f\x41\xaa\x30\x97\x54\xb4\x05\xc6\x3f\xbb\x7f\xfd\xe5\x91\x19\xea\xe2\x98\x1c\x9c\xd2\x2e\x79\xd5\x0b\xe8\x91\x70\x91\x83\x07\x23\xb2\x42\xb8\x79\x38\x98\xd9\x5a\x58\xf7\xc4\x66\xf7\xc4\x54\xb9\xd6\x04\x0b\xae\x8e\xed\xcb\xbd\xac\x03\x78\x78\xb6\xaa\x09\xef\xe1\xe0\xef\x30\x23\xef\xe5\xb5\x35\xdb\x8e\xc8\x15\x68\x87\xdb\x27\x70\xe7\xdf\xcb\x8b\x4f\x2c\x6b\x74\x8f\xd3\x4d\x24\xfa\xef\xe5\x19\xd3\xf6\xf3\xcb\x96\xa1\xc4\x8d\xe9\x30\x94\xed\xc5\x0a\x59\xca\x07\x37\xf6\x96\x2d\x7b\x77\xd5\x32\x09\x96\x99\xb5\xaa\x71\x0f\xa3\x8e\xc8\x23\xdf\xf0\x7f\x9c\x29\xaf\xbc\xe1\x02\xa7\x82\x03\xbb\x73\x86\xb1\xdd\x79\x18\x09\xa4\x28\x22\x26\x11\xb9\xdb\x71\x1c\x6f\xaa\xf3\x56\x3c\xa7\xeb\xe9\x45\xdf\x96\x6e\xe2\x6f\x03\xa6\xf6\xe2\xc7\x86\x16\x93\x4e\xea\x36\x7c\xd4\x77\xdd\xac\x5b\xf3\x2a\xdd\xbc\xe3\x45\x9e\xd1\xda\xc6\xd6\x01\xfa\x21\x4a\x5a\x33\x2c\x60\xbf\xac\xd7\x81\xdd\x21\xc0\x16\x78\x14\xfa\xf2\x56\xb4\xd6\x3c\x6b\x0a\x5a\x13\x73\xc7\x67\xb2\x8e\xca\xcd\xd6\x7b\x98\x2d\x34\x5f\xb3\x4c\x8a\x7c\xa7\x42\xf4\xc7\xd5\xce\x57\xbd\x95\x2b\x56\x73\x89\xb9\x82\x78\xc9\x56\xaf\xd7\x49\xc7\x01\xa5\x4f\x0e\x9b\x3a\x64\xe7\x71\xcb\x28\xd4\x8c\x76\x6d\xca\x58\x82\xee\x34\x20\x38\xfe\xb6\x4f\xc8\x17\x4b\xa7\xa2\xed\x63\xc8\xb9\x76\xf9\x04\x14\xd3\x2e\x9f\xa2\xbb\x8a\xf6\x24\x5b\x34\x32\x95\x35\xe4\x29\x3c\xc9\x25\xc6\xd1\x2f\x78\xa6\x4f\x27\xe4\xff\xcf\x6a\x19\x91\x88\x52\xb0\x19\xc6\x72\xdb\x8b\xed\xf5\x51\x35\xa3\xd6\x4b\xff\x25\x39\x81\x4e\x09\x2f\x4b\x96\x73\xaa\x59\xb1\x3c\x45\xf5\x14\x23\x6a\xa9\x34\xeb\xb1\xcd\xc5\xab\x15\x31\xf4\x12\xde\xfd\xc3\xef\x1f\x78\x73\x0f\x09\x44\x6d\x92\xc2\x76\x63\xd1\x53\x6e\x05\x7a\x7c\x6a\xed\x5e\x79\xff\x5e\xf9\x2c\x0c\x47\x68\x93\x9b\x3b\xdc\xec\x61\xeb\x1f\x06\x40\x29\xa9\xd9\x0c\xee\x27\xde\xb9\x47\xde\x4e\x8c\xcd\x7d\x27\x1b\x71\xbf\x0d\xa4\xb3\x6f\x5f\x59\x15\xdc\xb7\xc1\x87\xa9\xa9\x85\x77\xcb\x10\x06\x33\x09\xac\x2e\x14\xa3\xf5\x81\x03\x33\x88\x0d\xdf\x6a\x83\x58\x22\x8c\xe5\x3b\x4c\x17\x0c\x73\xe9\xc9\x9f\xb5\x93\xa4\xc2\x7e\xa0\x5d\x5e\x85\xab\x95\x0c\x12\x41\x5a\x5b\x57\x96\x35\xc8\x92\xd0\x42\x30\x4c\x86\xe5\x36\xec\xb1\x0f\xed\x04\x19\x23\x8e\x5f\xef\xc6\x9b\x19\x77\xa3\x96\x15\x9d\xc1\x65\xdd\xe5\xa6\xac\xf6\x4d\x72\xa6\x59\x5d\x72\xc1\x14\x99\xcb\x3b\xfc\x1d\x99\x81\xca\xbe\xc5\xf2\xd6\xf3\x60\x2e\x7b\x77\x04\x4b\xb0\xb6\x09\x84\x11\x7b\x80\xc3\xe8\x1d\x5d\x12\x5a\xcb\x46\xf4\xa6\x23\x00\x2e\xda\x53\x8e\x77\x2b\x93\x7e\x2f\x05\xf3\xce\x28\x7d\x54\xb6\x43\xda\x6e\x98\xa6\xe6\xc2\xbf\x9a\xbc\x7a\x19\x35\x87\x0f\x2c\x6b\x6a\xc5\x17\xec\x03\xa3\xf9\xd7\x46\xe2\x6e\xd3\xc1\x5c\x4e\xaf\xa4\x52\xfc\x06\xb3\xf0\x18\x06\x09\x73\x6c\xad\x4f\xd8\x73\xa8\x30\x73\x59\x93\x46\x78\x11\xa1\x67\x16\x96\xcc\x87\x56\x51\xd3\xc9\xe9\x4e\x20\x2d\x31\x99\x37\xec\xe5\x8a\x7d\xc6\x79\x99\x3b\x5c\xb5\x93\x79\xd5\x76\xb3\x77\x09\xf9\xef\xf0\x5a\x43\xdf\x63\xd0\x9d\xf0\x29\x58\xed\x46\xf8\xe8\xae\xe6\x9a\x05\x74\xeb\x04\xb3\xfd\x74\x0f\xab\x67\xdb\xbb\xa9\x8e\xa1\x83\x98\xfd\xe8\xf7\x83\xae\x57\xc1\x70\x97\x3b\xb3\x0e\xe3\x6d\x41\x1e\xe7\xeb\xdd\xee\x9a\xc5\x10\x2d\xbe\x9c\x53\x91\x17\xbd\x70\xec\x57\x50\x2c\x7b\xb3\x30\x81\xb7\x40\x7b\xdd\x60\x1f\x47\x21\x93\x3a\xa7\x86\xaf\x04\x5e\x12\xf4\xb6\x22\xf7\x37\x2c\x38\xac\xd4\x71\x10\x18\x10\x65\x85\x48\xc3\x5e\xf7\x37\x5c\xd9\xeb\x0d\x9a\x12\xa0\xdc\x96\xbf\x2d\x69\x6f\x05\x94\x60\xfd\xed\x66\x4e\x2c\x7b\xb5\x61\xb4\x16\xb9\xac\x8c\xb7\xed\x58\x23\x03\xef\xc8\x92\xfb\xac\x30\x8e\xf9\x6d\x11\x76\x6d\xb8\x8f\x92\xb5\x13\xeb\x19\x6a\x75\xda\x1e\x05\xae\xcd\x79\xf3\xac\xfc\xa4\x7a\xc6\xe9\x9f\x72\x57\x9e\x41\x85\x5a\x27\x2d\x98\xa6\x18\xae\x1b\x91\xd3\x7e\x25\x29\xd7\x8c\x09\x90\x56\x40\x0b\xe7\x14\x49\xd6\x77\x8e\x2a\x29\x62\x00\xad\xe7\x90\x0d\x9e\xe9\x27\x1f\xf8\x59\xcf\x60\x40\x63\x4e\x64\xbd\x72\x1b\x9c\x00\xb6\x81\x92\xa4\xce\x1e\x08\x73\xdb\x2f\x02\x55\x20\x68\x99\x0d\x6c\x85\x7f\x39\xf5\x57\x67\x37\xc1\x5e\xcd\xcd\xbe\x59\xc5\x0d\xc9\xc6\x42\x90\x3b\x56\xf7\x73\x8d\x09\xf4\xe1\xe8\x88\x9c\x60\x3f\xc7\x8a\xd4\x52\xea\xdd\x10\x75\xbb\x3f\x17\x9f\xaa\x9d\x2a\xa1\x2e\x6c\xf1\x80\x98\xcc\x6c\x3b\xda\xac\x2f\xd8\x9c\x2e\x98\x22\x8a\x97\xbc\xa0\x75\x01\x99\xd9\xaf\x71\x79\x10\x82\xb6\x31\x17\x60\x44\xe9\x8c\x40\xe3\x1d\xce\x33\xe8\x6e\x9f\xe7\x48\xdc\x1a\xcc\x11\x01\xbd\x71\x6b\x32\x73\x2c\x1b\xdd\xd0\xa2\x58\x12\xf6\x29\x2b\x1a\x83\x2f\x77\x22\x2c\x6f\x23\x27\xaf\x8a\xc8\x95\x75\xd4\x3f\xa0\x80\xdc\x55\x79\x1a\x7e\x35\x77\xe0\x04\x02\x31\x9a\x4d\xc0\x06\x02\x51\x0f\x34\xcb\x98\x52\x2e\x87\xc1\x32\xcc\xc3\xe0\xd7\xf0\xb9\x94\xda\xa1\x77\xea\xa2\xa0\x4a\xf3\xec\x8b\x42\x66\xb7\xd7\x5a\xd6\x3b\xd5\x15\x6d\xea\x7f\xa5\x80\xd1\xd9\xdf\xaf\x0d\xf2\xbe\x0d\x12\x47\x59\x47\xcc\xd0\x30\x45\x7b\x06\xba\x6d\x6e\x58\xc1\xf4\xb1\x02\xf9\x91\x94\x34\x9b\x63\x19\xad\x1c\x33\x90\xba\xd4\x64\x56\x7d\xfd\xe0\x11\x61\x7b\x63\x66\x09\x85\xe9\x5e\x9b\x39\xae\x2f\x03\xfd\xcd\xec\x3b\x98\xdd\x03\x35\x58\x60\x0c\x74\x81\x74\x5c\x8c\x75\xcd\xfa\xd8\xa9\x8d\xfb\x04\x21\xa9\xb6\xb6\x0c\xaf\xd1\xd3\xcd\xce\x9f\xdd\xa8\x49\xa6\xf8\x84\xde\xa9\x49\x26\x4b\x72\x7e\x7d\x49\xf2\x9a\x2f\xfa\x43\x1c\x12\x5d\x48\x6d\xd2\xbf\x17\xf6\x86\xff\x92\xde\x29\x86\x13\xbd\x31\x13\x85\x12\x68\x11\xb8\x63\xa7\x4e\x51\x38\x97\xcb\x37\x0f\xbe\x18\xef\xf0\x34\x55\x1f\xcd\x1c\x7b\xde\xda\xc6\x05\x06\x7b\x76\xaa\xd2\x29\x2f\x18\xaa\x80\xf1\x64\xbb\x29\x34\x01\xe8\x97\xb2\x21\x77\x14\xad\x19\x40\xc0\xa2\x82\xa9\x79\xf5\x9a\x5c\x08\xd5\xd4\xac\x35\x92\xad\x0e\xb6\x89\x25\x87\x9b\x62\x41\x56\xcc\xa2\xd4\xd3\xd8\x2e\x3e\xd1\xb2\x2a\x98\x7a\x4d\x8e\xd8\x27\xfd\xfb\xa3\x11\x39\xfa\x34\x55\xe6\x7f\x42\x4f\xd5\xd1\x84\x5c\x96\xde\x85\x9a\x8b\x29\xab\x6b\x1f\x7f\x8d\x1f\x18\x96\xbc\x23\x45\xf5\x8f\x79\x68\xb8\x25\x69\xce\x2f\x60\x1e\xea\xd7\xa4\x91\xad\xe0\xc8\x77\xee\x40\x29\x78\x20\x76\x03\x44\x97\x53\xe7\x31\x8f\x72\x95\x65\xe1\x61\x40\xdb\x8d\x01\x1b\x3b\x8e\xa1\x3c\x69\x80\xf2\xd6\xa7\xbb\x24\x2f\x72\xb6\x78\xa1\x72\xfa\x6a\x04\x53\x55\x36\xe4\xbb\xbb\x2e\xaa\xc8\x51\x5c\xf1\x81\x6b\xc7\xb9\x8d\xc2\x9d\x68\x7b\x32\x88\xd8\x0d\x09\x7e\x2f\x2f\x8f\x40\x74\x31\x63\x67\x54\x90\x82\xd1\x85\x15\xe7\x10\x65\x2c\xd1\xc0\xd0\xcb\x61\xa5\x18\x6b\x48\xd7\x60\xf3\xbb\xdf\xf6\x8a\xd7\x31\x3a\x18\xb2\x15\x34\xb9\xbe\x9d\xd5\xa6\x6e\x6c\x2e\xa7\xa9\xac\x33\x2f\x73\x5a\x2d\x0d\xd3\x80\x1b\xb8\xe8\xd8\x35\x9e\xf7\x85\x8d\x4b\x55\xe6\xa8\xc8\x5e\x7c\x1f\x6d\xdf\xa0\x41\x16\xfc\xc7\x86\x91\xcb\x37\xbe\x22\x0b\xab\x15\x57\xda\x08\x14\x79\x87\xef\xe1\xc8\x0c\x9d\x9c\x95\xf4\x9f\x52\x90\x8b\x2f\xae\x6d\x47\x11\xa0\xf8\xac\x11\x24\xfd\x67\x53\x33\xc3\xe3\xed\x94\xb5\x74\x9d\xae\xf2\x93\xe6\x39\x79\x43\x35\x45\xb6\xd2\x06\x16\x89\x96\xe4\x19\xa6\xf0\x86\x8b\xdc\xfe\xb4\x25\x4b\xe8\x87\x4f\xe2\x03\x83\x69\x9b\xcd\xeb\x5b\xe3\x46\xe6\xcf\x40\x0d\x72\x7f\xa6\xaf\x24\xfe\x6f\x0f\xdc\x98\x99\x4d\x44\x79\x0c\x7c\xf1\x9b\x0f\x97\x3b\xe2\xda\x32\xe0\xf0\x67\xef\x64\x9e\xca\xba\x1d\x07\x9f\x3a\x82\xfa\x6f\x06\x2e\xce\xf1\x39\x29\x4d\x9f\xa0\xb8\x1a\x81\xf2\x96\x7c\x0d\xba\x4d\xf8\xe7\xdf\x6b\xae\xd9\xa4\x3f\xa3\x6d\x02\xeb\xe0\x36\x30\x71\x19\xee\x33\xb7\x84\x30\x17\x4f\x6e\xa0\x1f\x90\x8b\xe5\x0f\x6e\x0a\x79\x43\xec\x95\xdf\xf5\xdc\xbf\xf9\x70\xb9\xc5\xd4\xbf\xf9\x70\xe9\x66\x6e\xfe\x29\xa7\x87\x9b\xf4\x21\x18\xfe\xb7\x2b\xfc\x77\x0a\x2f\xd6\xa6\xc2\x5d\xe5\xe2\x77\xc9\xc2\x4f\x0e\xc6\xbc\x6f\x97\x62\xc8\x8c\xd5\x27\xf4\x73\x11\x91\x0c\xb9\x7b\xf9\xcd\x37\x84\x7d\xaa\x10\xa3\x06\x2e\x93\xd7\x73\x0a\xf9\xab\x5d\xaa\x4c\x04\x3f\x03\x8f\xca\x90\x6c\x07\x88\x84\x62\x95\x32\x43\x0d\x50\x4b\x9f\xbf\x76\x8e\xe0\xfe\x8b\xcd\x1f\xbc\x83\x00\xcc\xfc\x35\xd2\x00\x82\xf1\x98\x79\x00\xf7\x27\x68\xae\x10\xfe\x27\x1b\x77\x8f\xd9\xae\x14\xd3\xa7\x93\x8e\x6e\x5d\xc1\x94\x77\x8a\x8c\x0e\xc2\x78\xae\x59\x30\xc9\x89\xf9\xed\x05\xd8\x47\x4f\x27\xad\xc5\x0c\xb2\x43\xb4\xbc\x69\xc4\x18\xe6\x52\x7c\x78\x34\xf7\x9a\x96\xf2\x36\xba\xb8\x09\x9c\xbb\xc1\x0c\x3b\xe7\x83\x4c\xa7\x1b\xf9\x20\xf8\xc1\x15\xc4\xdf\x27\x2b\x04\x03\x6d\xc1\x0a\xc1\x77\x5b\xb3\x42\x50\x5f\xe4\xd9\xb0\x42\x98\x23\x30\x8a\x19\x82\xab\xdb\xfb\x66\x3c\x3b\x74\x90\x7b\x9b\xff\x9c\xee\x6d\x7b\x58\x89\x7b\xd6\x7e\xe8\x18\x18\x9f\x20\xc7\x25\xb7\xef\x04\xa4\xe2\x45\xbc\xb6\xd4\xc0\x16\xb9\x44\x76\xcd\x5c\xbf\x2f\x23\xf2\xf4\x27\x20\x70\x0f\x58\xa9\xab\x72\xdf\xb9\x45\x21\x91\x82\xc7\x24\xaa\xfc\x5d\xe4\x24\x33\x56\xcd\xa7\x3b\xf5\x72\x36\x3d\xbe\xbd\xee\x9a\x71\xce\x59\x35\x27\x6f\xaf\x37\xa0\x3c\x38\x1c\x58\x96\x42\xe3\xce\xb1\x22\x05\x9f\x32\xf0\x49\x48\xc0\x7a\xe7\x38\x6a\x07\xe5\x79\x67\x34\x87\xe2\x70\xb1\x5e\x05\x2b\x24\x29\xa4\x98\x19\xe6\x20\xae\x6a\xce\x1e\x90\x54\x29\x05\xd7\xb2\x7e\xd8\x1b\x22\x1e\xf1\xb8\xee\xf6\x81\x78\x5c\xdf\x66\xeb\xda\x02\x23\xef\x82\xa7\x94\x64\xb2\x28\x58\xa6\x6d\xb9\x53\x38\xf6\xa8\x15\x62\xdb\xa0\x34\x61\x56\x67\x39\xb9\xfd\x13\xa8\x4d\xac\x82\xe4\x05\x1e\xe5\x8b\x0f\x17\x67\x6f\xde\x5d\x4c\xca\xfc\x97\x73\x79\x37\xd6\x72\xdc\x28\x36\xe6\xfd\xc5\x3b\x3e\xe3\xe8\x4c\x12\x5d\x8f\xad\xcb\x6a\x57\xb6\xce\xac\x4b\x0c\xfc\x9a\x7c\xa3\xd0\x7b\xc3\x7b\xee\xb0\x1c\xac\xd9\x23\x52\x53\x9b\xef\x93\xe2\x55\x9d\x36\x45\x81\xa7\x69\xee\xd1\x28\xd4\x47\xbf\xf8\xfc\x18\xde\xce\x26\x3c\x7b\xee\xf7\xf0\xd7\x22\x85\x62\xf7\xf3\xcf\x64\xab\xc3\x6a\x7b\xef\x1e\xd7\x75\xe7\xb9\x76\x75\x03\xb5\x84\x50\x31\x08\xea\x36\x8c\xed\x37\x8a\xd5\x5d\x30\x65\x3a\x83\xdd\x79\xd1\x28\x56\x4f\xb0\xfb\x67\xb8\xf7\x71\x5c\x45\x5c\xf6\x6b\xf2\x88\x9d\xff\xc0\xa6\x9b\x36\xde\x3e\xf6\x1e\x37\x8e\xf3\xa7\x8d\x9e\x33\xa1\xb9\xcd\x6e\x69\x39\xaf\x8d\x27\x81\x81\xf9\xcf\x70\xeb\x23\xeb\x3e\xa5\x55\x69\x1a\x2a\x1b\xb5\x6d\xa8\x6c\xf4\x3c\x2a\x1b\x3d\xa6\x5c\x9b\xc1\x9e\xfb\xc0\x3a\xa6\x5f\x48\x14\x17\x72\x27\x3e\xf5\x55\x4d\x73\xa9\xf0\x1d\xb3\x87\x1d\x7c\x42\xf3\x92\xc7\x94\xbd\x7d\x76\x98\x3c\xe3\x22\xef\xdb\xcc\x44\xd1\x0b\x7a\xec\x8a\x5e\xf6\x99\x35\xc4\x7b\x27\x2e\xea\xb4\x4c\x98\x49\xdc\x3a\x6c\x75\xfd\xb5\x92\xe4\x2f\x1c\x26\x4d\xe5\x64\xe7\xb6\xb5\xbe\x09\xbf\x07\x8d\x93\xac\x98\x41\x24\xd9\xed\x44\xd6\xb3\xc7\x39\x60\xad\x42\x45\xb9\x54\x3f\x16\x63\x1c\x6b\x5c\xe5\x2d\x58\x1c\x5a\x56\xfc\x99\x78\x5a\x3d\x3f\xe3\xcb\xb3\xf0\x9f\xda\x0d\xd8\x91\x67\x28\x6f\x3d\x7b\x45\xe5\x41\xce\x23\x45\xaa\x3a\x04\x6b\xdf\x52\xda\x4a\x72\x1b\x1d\xed\x0b\xa8\x22\xde\x0a\x6b\x88\x57\xb4\xa6\x25\x83\x5a\x3e\x8d\x75\xdd\xcd\xa4\x10\x31\x1c\x33\x84\x88\x7e\x5d\x31\x71\x0d\x08\x7a\x60\xc7\x37\xb7\x81\x1d\x7f\xa0\x0d\xec\xf8\xc6\x76\x10\xb7\x39\x77\xdf\x79\x6e\x44\x7c\xeb\x1c\xda\xc6\x64\x58\x2e\xec\x79\x60\xd9\x7e\xae\xdb\x55\x81\x4b\x60\xbc\xfd\x37\x2b\xac\x75\x5b\x95\x11\xad\x18\x10\xed\xe4\x2b\x9b\xc2\xed\xc1\x6d\xda\x0d\xa7\x18\x8f\xea\x2c\xf8\x6d\xe1\x8e\x15\x05\x19\x41\xf7\x5d\x4a\x52\x9a\x27\x37\x5c\xb7\x34\x42\x31\x4d\x2a\x56\x97\xdc\xe6\xc7\x95\x82\x64\x36\x6e\x10\x38\x3a\xc3\xbd\xd9\xee\x92\xf8\x41\x41\x64\xa6\xa9\xcd\xea\x44\x6e\x98\xbe\x63\x4c\x90\x97\x2f\x5f\xbe\x04\xd1\xe6\xe5\x1f\xff\xf8\x47\x02\xb9\xc6\x73\x96\xf1\x72\xfd\x45\x78\xeb\x5f\x5e\xbd\x8a\x19\xf4\xdf\xcf\xde\x7d\x05\x71\x46\x95\x56\xe4\x46\xea\xb9\x1d\xdb\x74\xd1\xe9\x5e\x8d\xc8\xff\xbd\xfe\xfa\xbd\xc3\xd7\x6a\xe5\x57\x90\x7f\xfc\x16\xc5\x8c\x1c\x2a\xa7\x5f\xfe\xe1\xf7\xbf\x8f\xfa\x06\x84\x24\x59\x43\x30\x77\x1b\xb4\x57\xb9\x70\x33\x21\xf5\x7a\xaa\x66\xcb\x3a\x45\x57\x8b\x2b\xf9\x6c\x0e\x07\x61\xee\xbf\x14\xd3\x82\x67\x1a\x89\x04\x26\x7e\x40\x90\xb0\xe5\x42\xa8\xcd\xba\x66\x65\x81\x28\x53\x53\xce\x46\xa4\xe0\xb7\x8c\x4c\xd5\xdf\x6a\xd9\x54\x6d\x6e\x44\x5b\xbd\x22\xa3\xc2\x8c\x8f\xc3\xb5\x70\xa7\x58\x74\x46\xd6\x7d\x78\x8a\x47\xda\x8a\xd2\xaf\x1c\x74\xbc\x22\x68\x8c\xb0\x78\xe3\x2d\x5b\x8e\x11\xba\x2b\xca\x7d\xd8\x1b\xb8\xdc\x22\x37\xd1\xe5\x47\xb2\xa8\x42\xd3\x6d\xb1\x4c\x17\x13\x5d\xd5\xf2\x1f\x08\x34\x5c\xb8\xb4\x63\x56\xa9\xa0\xac\x7c\x66\x73\x61\x8a\xd6\x6e\x1d\x31\x92\xcb\xe9\x6c\x78\x4d\x9b\x4d\xba\x4d\x69\x46\x2e\xa7\x61\xe0\x31\x24\x35\xe6\xca\x4c\x02\x6a\x3e\xdb\xb9\x45\x8c\xb2\x61\xf6\xbe\x5f\xb8\x1b\x0a\x21\xac\x11\x6b\xfd\x63\x38\x79\xd4\x18\x40\x1a\x60\xd2\xd4\xa5\xae\x6b\x47\xc1\x50\x59\x1b\x4d\x6d\xdf\x75\xa7\xe5\xb7\x3b\x3a\xe7\xad\x8d\xb0\x65\xba\xb1\x47\x84\x11\xec\x8d\x28\x98\x52\x36\x42\xbb\xa4\xf5\x2d\xcb\x3d\x7e\x9e\x40\xd8\xb3\x8a\xcc\x20\x46\x5c\xee\x6d\xbe\x40\xd7\x88\x92\x2e\x3b\xd9\x6f\xcc\x34\x8e\x27\x93\x63\x44\x2d\xb2\xc6\x80\x7b\xc4\x02\xe6\xf9\x13\xe5\xc8\xed\xdc\x2d\x28\xf3\x4c\x5d\x9e\x63\x48\x5c\x28\x21\x7d\x5c\x1b\xd1\x4c\xed\x5e\xc6\xe0\xbe\x24\xc9\x24\x5e\xb5\x83\x2d\x26\xbf\xb8\x7b\xb3\x7a\x38\x47\x93\x6b\x69\xc2\x51\x64\xb6\x71\x6c\xf7\xe5\x1c\xb7\x7b\x6c\xef\x5b\x2c\x7b\x9f\xcc\x60\x97\x51\xac\xcd\x86\xa9\x46\x8b\x72\x38\x46\xd7\x08\x16\xc5\xdf\xd8\xd4\x09\xfd\x15\x74\xdb\xf6\x24\x6c\x0d\xb6\xa7\x63\x6e\xb0\x5d\x4e\x57\xb3\x4b\x04\xe8\x2d\x64\x34\x1d\x1d\x8a\xc9\x01\xd5\xb6\x43\x70\x2b\xd8\xf6\xcc\xb3\x60\x4b\xe3\x5c\xb0\xa5\xf0\x2f\xd8\xe2\xdc\x4b\xb0\x6d\x7b\xb9\x9c\x3b\x0a\x6e\x8f\x25\x33\x48\x49\xa6\x7e\xf3\x31\x83\x6b\x15\x20\x96\x84\x3b\x65\xc9\x15\x5e\x2b\x7a\xa3\x64\xd1\x68\x1c\x22\xbd\x93\x90\xe6\xc1\x24\x5d\x4a\xf0\x38\x42\xb7\xda\x5d\x40\x29\x81\x13\x41\xf2\x94\xd2\xd7\xe1\x7c\x8d\x86\x6a\xd5\x43\xb5\xea\x7b\xda\xf3\xaa\x56\xed\x3e\xf3\x31\xcc\x9b\x8b\xff\xcb\x9a\x18\xa4\x0b\xfc\xfd\x73\xaa\x62\x8d\x2d\x53\x3c\x45\x31\xa5\x38\x39\x39\xf7\x19\x4f\x9c\x57\xf3\xa5\xd0\xac\x9e\xd2\x8c\x9d\x86\x0a\x2b\x56\xcd\x59\xc9\x6a\xb3\x41\xf6\x3d\x97\xda\xc3\x26\x74\x23\x37\x4b\x07\x7f\x84\x7d\xd2\xac\x36\x9b\xd9\x9a\x52\x0f\x5f\x6f\x07\xc7\xdd\x95\x4e\x0c\x3a\xdb\x8b\x3a\x0c\x7a\xee\x94\x07\xb5\x78\xad\xdd\x3c\xdc\x6b\xdc\x68\x15\xaa\x06\x63\x6e\xf8\xb9\x14\xc0\x3f\x00\x8a\x59\xca\xa6\x46\xa7\x07\x6f\x4f\xcf\x64\x5d\x1b\x9e\x05\x86\xa6\x8a\xd4\x6c\x66\x84\xd8\x1a\x2b\x25\xc3\x1b\x45\x63\x1e\xec\x34\x3a\x6c\xef\xf6\x63\x6f\x28\x7e\x20\x3e\x2e\xa2\x37\xcb\x61\x56\xb5\x5c\xf0\xdc\x31\x98\x21\x96\xe6\x8a\x54\x54\x05\xf9\x68\xa8\x52\x32\xe3\xa0\xa4\x6c\x4f\x30\x62\x24\x94\xf0\x81\x51\xf5\x59\x56\x3b\xf9\x1b\x42\x23\xb6\x84\x7c\xf9\x11\x9e\x70\x09\x47\x22\x64\xce\xae\x9a\x9b\x82\xab\xf9\xf5\x3e\x0d\x89\x9b\xc6\x41\x07\xf0\x35\xcf\xc0\xfb\x0c\x8a\x51\xe6\x4a\xa1\x38\xf0\x85\x86\xba\x19\x26\x96\x1b\xf1\x4a\xc2\x69\xb9\xfe\xc3\x2b\x26\x81\xc6\x17\xcc\xe6\xea\x3b\xbf\x7e\x38\xbc\x19\xdb\xfb\x76\x2d\x36\x03\x15\x56\x64\xc8\xd9\x37\xa2\xea\x3c\xcf\x68\x71\x7f\x25\xba\xb0\x75\x59\x14\x47\x97\x50\x1c\x70\x79\xab\x10\x00\xb9\x81\x4d\xb7\x47\x3c\x28\xae\x69\xb3\x70\x47\x1b\x75\x57\x36\x58\x91\x52\x62\x02\x1a\x01\x75\xa2\xf1\x25\x28\x4e\xe1\x3e\x08\xb2\xa6\x41\xf2\x5f\xb8\x01\x83\x71\xf6\x9e\x36\x18\x67\x1f\x68\x83\x71\x76\x63\x3b\x88\x73\x4d\x9b\xb9\x97\x06\x49\x56\x3b\xb5\x66\x3d\x9f\x10\xcf\x71\xf4\x44\x45\xec\xd4\xe5\x05\x67\x75\xa6\x75\xcd\x6f\x1a\xbd\xa7\xf2\x77\x2b\x63\x00\x0b\xcc\x94\xa5\x1c\x63\xbb\x89\x59\x80\xb0\xac\x32\xc8\x63\xc6\x80\xde\x44\xb3\x84\x13\xcf\xb9\x01\xd3\x86\x0f\x8f\x15\xc9\x65\xd6\xf8\x82\xc4\x70\x3a\xad\x37\x5b\x6c\xbd\xc2\x24\x3c\x9c\x5e\xce\x2b\x1c\xa4\xf7\x6a\xe5\xf2\x4e\x18\x6c\x77\x76\xd5\x93\x7b\xa2\x9b\x77\xa2\xfd\x2a\x14\x53\xdc\x63\x62\x9e\xd3\x1b\xd9\x68\x9f\xdd\xf7\x7f\x99\x99\x7d\x93\xde\x59\x4b\xd2\x28\xf6\xa0\x19\xbd\xd5\x26\x6f\x39\xc6\x60\xbb\x1f\x6c\xf7\x83\xed\xfe\xbe\xd6\xb9\xc7\x97\x68\x96\x0f\x8b\x3e\x77\xf0\x97\x4b\x95\x1c\xb3\x75\xfb\xb7\x86\xbe\x69\x31\x2e\x8a\x34\xab\x89\x2a\x56\xe4\x2c\xbc\xed\xad\x36\x3e\x70\x07\x75\x28\x19\x58\xe2\xa7\xb7\x9c\xee\xc9\x1e\x0a\xab\x8b\x92\xa1\xb1\x75\x23\x6e\xdb\x20\x69\x2c\xe5\x8e\x6e\x12\x81\x47\x46\x25\xf3\xd7\x58\xd5\x93\x0a\x21\x91\x1d\x50\x23\x5b\xf2\x7c\x64\x43\x5d\x80\x11\xae\x68\x86\x72\x69\xc3\x73\xc0\x04\x6d\xc4\x7a\x7f\xfc\x2d\xb6\xc4\x13\x20\xc9\xa7\x40\xe0\x24\x60\x81\x3d\x25\x84\xc2\x96\x7a\x24\xa6\xd1\x8a\x7f\xcb\x6a\x15\x95\xdf\xb3\x6d\xdd\x64\xd3\xf8\xbd\x3b\x09\x95\xcd\x59\x49\xe1\x9f\x6f\xdd\x02\xcc\xb5\x36\xfc\xae\x66\x98\xd8\x93\xd5\xa5\x11\xbc\x46\x1d\x7f\xf6\xa3\x45\x5c\x5e\x4c\xd7\x92\x85\x15\xe2\xc0\xb0\x3f\x05\xfe\x03\xcb\xbd\xea\x18\xd6\x0c\x08\x02\x7d\x2f\xb0\x50\xe6\x8a\x3b\x0c\x20\x2e\xdc\x9f\x3d\x2f\xed\x31\xd2\x15\xb6\x43\xf8\x01\x6c\x6b\xff\x1f\x79\xfb\x42\x97\xe5\x89\x1e\x78\xb0\xff\x0f\xf6\xff\x6e\x7b\xe6\xf6\xff\x80\xe4\x39\x0c\xba\xc1\xc0\x1f\x5a\x48\x9c\x95\xff\x86\x39\xd9\xc2\xca\x2f\xce\x74\xef\xec\xf6\xb2\xee\x3a\x9e\x1d\x4f\x26\xc7\xe8\x7a\xd6\x0a\x3c\x8d\x9e\x8e\xff\x44\x98\xc8\x64\x6e\xfa\xf9\x08\xfd\xd7\x4a\x03\xbb\xd4\x6a\xfe\xc2\xb9\x94\x6e\xac\xd0\x79\x0d\xfa\x4e\xa3\xab\x09\x68\xcf\x65\x98\x7d\xfb\x18\xe6\x22\x01\x7d\xb5\xcc\x87\xcf\x6d\x6b\xb7\xc2\xd7\x4a\xb0\x5c\x88\xfb\x5d\x91\x82\x97\xdc\xd6\x85\x35\xf7\x9d\x29\x1d\xab\xb8\x24\xe4\x04\x3f\x9e\x64\x55\x33\xb2\x1d\x4d\x4a\x56\xca\x7a\x39\xf2\x9d\x99\x1f\x3b\xbd\xdb\x37\xb0\x6a\x47\xd6\xd4\x35\x13\xba\x58\xc6\x26\xe6\x69\xdb\x81\xb8\x1c\xb7\x53\x7b\x64\x72\xfc\xe1\xc4\xa5\x8f\x6a\x5b\xf7\x46\xb6\xd6\x61\x50\xaf\xfb\xd5\x62\x59\x5e\x0c\x78\x1e\xb5\xb6\x73\xf3\x94\x89\x05\x59\xd0\x5a\xc5\xde\x00\xb2\x2d\x5f\x93\xf3\x05\x57\x7d\x95\x93\x1f\x58\xdc\xb5\xd7\x7d\x42\xc9\xc1\x46\x57\x8d\xb6\xe8\xce\x81\xb8\xab\x34\xe1\x41\x7b\x85\x7d\x7b\xd5\xaf\x02\x6e\x5b\x45\xb5\x66\xb5\x78\x4d\xfe\xf3\xe4\x3f\x7e\xf3\xd3\xf8\xf4\xaf\x27\x27\xdf\xbd\x1c\xff\xeb\xf7\xbf\x39\xf9\x8f\x09\xfc\xe3\xd7\xa7\x7f\x3d\xfd\xc9\xfd\xf1\x9b\xd3\xd3\x93\x93\xef\xbe\x7c\xf7\xb7\x8f\x57\x17\xdf\xf3\xd3\x9f\xbe\x13\x4d\x79\x8b\x7f\xfd\x74\xf2\x1d\xbb\xf8\x3e\xb2\x93\xd3\xd3\xbf\xfe\x2a\x61\x92\x54\x2c\xbf\x8e\xc6\x29\xd8\xc6\x5b\xd1\x95\xee\xb7\x89\x47\xbf\xc2\xfb\x71\xa1\xc7\xb2\x1e\x63\x27\xaf\x21\x0b\x7a\x74\x57\xee\x68\xb7\xbf\x23\x2d\xd5\x6a\xab\x9e\x38\xf6\x78\xcf\x97\xe0\x71\x1c\xf0\xd6\x8e\x5d\x60\x2a\x7a\xc3\x77\x9a\x7d\xc0\xf5\xd9\x0d\x92\xd2\xac\xac\x64\x4d\xeb\x25\xc9\xad\x72\x6b\xf9\xa8\xa4\x6f\x8f\x4c\xac\x0e\x93\xcc\xf9\xc3\x30\xbe\x07\x55\x71\xc9\x72\xde\x94\x7b\x49\xcb\x06\x3d\x87\x9b\x7e\x07\x65\x47\x6c\x51\x13\xe7\xeb\x63\x5f\x73\x25\xb9\x68\x76\x8b\x82\x8a\x3f\x95\x38\xfd\x61\xa7\x16\xc5\xd1\xd1\x4a\x8d\x6f\xd0\x4d\x83\x13\x8c\xcc\xd9\xb1\xf2\xef\xe2\xe0\x89\x4a\x62\x34\x67\x5a\xdf\xc8\x13\xdb\xd5\xa9\x61\x04\xdf\x01\xaf\x70\x80\x34\xfc\x51\xd0\x42\x12\x93\x37\xf1\x7f\xb2\xaf\x0c\x57\xb4\x97\x08\x6f\xd7\xb9\xaf\x08\x2e\x41\x98\xb3\x89\x17\xa7\xa4\x90\x59\xe0\x00\xd6\x61\x06\x00\x1c\x2e\xdc\x25\x8e\xb7\x15\x1a\xa0\x30\xe3\x22\xaf\x07\xca\xd0\x42\xa1\x77\x0b\xcf\xa0\x40\x1b\x88\x86\x70\x66\x09\x90\x60\xba\x2d\xe9\x27\x5e\x36\x25\x69\x94\x99\xad\x14\xdd\x5e\xda\xc9\xde\xb9\x3a\x73\x90\xca\x8e\x0b\xf8\xa8\x23\x1a\xc7\xa8\x28\xe7\x8c\x5c\xfb\xfd\x6b\xd5\x21\x68\x4a\xb7\x92\x9c\x6a\x40\x90\xb0\xf3\xb0\x6c\xb2\x9c\x82\x63\x85\xe7\xd8\x94\x2f\x55\xb6\xc5\xa5\x12\xbc\xe8\xde\x2a\x57\x44\xc8\x6f\x6f\x23\xac\xbf\xe2\x73\xba\x01\xcf\x98\x37\x8a\xe6\x88\xd2\xf9\xa0\x44\xee\xe7\x11\x3c\x8f\xf7\xde\xdc\x29\xc9\xf6\x2e\xa1\x1d\x9a\x1d\xd6\x2f\xea\xba\x87\x52\xe7\x49\xe8\x51\x48\x5c\x9a\x9d\x8f\x5e\xa7\x63\x49\x7d\xb6\xcc\x6c\x0a\x3f\xde\xa9\x03\x87\x83\x22\x7c\x43\x18\xdb\xd8\xfc\xc7\xe9\x7e\x9c\xf9\xf1\x86\x4d\xd1\xbd\x09\xbf\x01\xd9\x5d\xf5\x85\xce\xa1\x46\xab\x60\x1a\x62\xf1\x98\xaf\x0e\x88\x7e\x57\xa5\x5c\x44\x14\x10\xfe\x46\x59\x83\x33\xef\x05\x28\x7a\xda\x89\x93\x57\x28\x62\x0b\xc6\x72\x8c\x05\x2c\xda\xf9\xd7\x8d\xe8\x9d\xfd\xcd\x29\x99\x32\xaa\x9b\x1a\xbd\x7f\x84\x91\x72\x0a\x27\xc0\xa1\xda\xa9\x66\xe6\x50\x20\x05\x62\x2d\x4b\xa2\x04\xad\xd4\x5c\x6a\x50\x9d\xd0\x8a\x66\x5c\x47\x84\x97\xe9\x9a\x66\xb7\x50\x63\xb9\x66\x76\xb6\x7d\x53\xcb\x4e\x6d\x14\x43\x08\x11\xdd\xd8\x47\x3d\xaf\x65\x33\x9b\x43\x28\x1e\xbe\x95\x15\x54\x61\xcc\x65\x9f\x91\x7d\x63\xef\x56\x31\xa0\x48\xbe\x14\xb4\xe4\x99\xaf\x34\x55\xcb\x05\x57\x5c\x5a\x23\x15\x8c\xda\xbf\x68\x4a\xae\x7c\x19\x20\xb4\x8c\x9d\x17\x94\x97\xe4\x44\x31\x46\x2e\xdc\x25\xc1\x5f\xae\x51\x40\x40\x75\x67\x8c\x83\x55\x68\x54\xb3\xa9\x8f\x6d\xe6\x14\xf3\xc4\xa9\x6e\x03\x37\x86\x98\x84\x58\x16\x9e\x37\x4e\xbb\xbf\xc0\xaf\x01\xe3\xcd\x2b\x96\x35\xf8\x0b\xba\x6a\x78\x4c\xe4\xb2\x75\x8f\xe9\xe9\xf5\xec\xea\x52\x85\x6a\x05\xbc\xcb\xb6\xc0\x12\xfc\x60\xd3\x2d\xfb\xbc\xb2\x1e\x13\xf4\xf4\x6c\x08\xac\x80\x42\xcc\x0b\x9e\x37\xb4\x40\xd2\x1a\xb1\xc8\xf3\xeb\x4b\x1c\x98\xcf\xe6\x7a\x7c\xc7\x40\x11\x8c\x3c\x50\x8b\xfb\xdc\x74\xf9\x9a\xd3\x36\x57\x40\x84\x23\x6a\x30\x5b\xc5\x34\x2e\xf9\x8e\x2e\x21\xff\xbc\x75\xfe\xed\x78\xfb\xb8\x9a\x30\x38\xc0\x54\xf6\x51\x99\xd2\xd1\x6f\x0b\x42\xbd\xcb\x3e\x03\x94\x92\x51\x01\xcc\x38\x68\xf4\x0d\x3c\x01\xd6\x58\x5f\x73\xff\xfd\x0b\x0a\x64\xf9\x8f\x90\x21\x51\xd4\xc0\x6a\xaf\xcc\xb6\x07\x69\x6a\xd1\x42\xec\x47\x56\x56\x05\xd5\x7b\x71\xc0\xf9\x7b\x60\x72\x08\xec\xe1\x06\x89\x51\x91\x8f\x69\x61\xae\xca\xd5\xb7\xe7\x36\xe0\x15\x11\x4f\xa2\xa7\xdd\x47\x47\x84\x84\xaf\xa5\x6c\xd8\xf0\x8d\x38\x07\xb2\xa7\xde\xb0\x1c\x28\x88\x9d\x5b\x9c\x93\xb0\xbc\x13\xac\x76\xb0\x77\xf5\xed\xf9\x88\xf0\x09\x9b\xb8\xbf\x7c\x67\x8e\x3c\x6a\x39\xc3\xd0\x19\x17\xa2\x16\x63\x5b\x97\xf9\x04\x97\x13\xea\xf7\xc3\xde\x7f\xf8\xb3\x59\xa8\xf9\xf5\x2f\xe3\x3f\x07\xb5\x0b\xff\xf2\x83\xa1\xc7\x51\xbe\xaa\x3f\xac\x7c\x17\xc6\x5c\x00\xd1\x33\x7f\xfd\x70\x65\xcb\x16\xdb\xa2\xc6\x3f\x44\x3a\x55\x10\xc2\x84\xae\x97\x13\x72\x25\xc1\x0f\x8f\xe7\x78\x65\x61\xfe\x35\xfb\x87\x33\x0b\xc1\x71\x79\x0d\x7a\x46\x35\x13\xc0\x95\x3c\x58\x01\xb8\x6d\x36\x03\x00\x0c\x00\xc8\x89\xc2\x2e\x9d\x80\xea\x15\xd3\xe1\x8c\x88\x96\x98\x9c\xbe\x1f\x97\x9b\x76\x26\x08\xfb\xc4\x15\x64\x3f\xc3\x1d\x87\x63\xa3\x36\x24\xc4\x31\x72\x66\x58\x03\x09\x3e\x67\x5e\x25\x63\x7c\x37\x60\xfd\xbf\x16\x52\xff\xda\x5f\x06\xe7\x51\x0a\x1c\x9b\x24\x74\x21\xb9\xab\xb1\x6d\x10\x8f\x00\x23\x4b\x54\xa2\x09\x7b\x9e\x37\x4b\x52\x72\xa5\xe9\x2d\x9b\x90\x6b\xc3\xce\x85\x4e\x26\x78\xca\x82\x40\x2d\x3c\x96\x93\x46\x68\x5e\x44\x4a\x74\x7e\x2e\xb0\x31\x01\xab\x07\xa9\x25\x9a\xcc\xf0\x24\x55\xcd\xc6\x8e\xb5\xc4\xb7\xa2\xf4\x2e\xb6\xaa\xa7\xdb\x93\x76\x4f\x47\x1e\xf4\xe7\x14\xd5\x22\x55\x0e\x9d\x5b\x4f\xed\xe8\x0b\xbb\x16\x4d\x61\x76\x43\x8a\xac\x65\x1d\xe1\xd8\xd5\x84\xbc\x07\x7e\xb0\x88\x01\x72\x74\x1a\x43\x3d\x90\xb5\xb2\x09\x96\x31\xa5\x68\xbd\x44\x27\x76\xee\xab\x6b\x37\x8a\x4d\x9b\x02\xd8\xe5\x98\x2d\xa1\x02\x2b\x99\xd7\x2c\x93\x42\xe9\xba\xc9\xe0\x1c\x29\xb9\xa9\xe5\x2d\x13\x6d\x18\x52\x14\x62\x0c\x3d\xee\x5b\xd7\x66\xc3\xf6\x08\x49\xb2\x39\x15\x33\xe6\x53\x80\x90\x92\xe6\x00\x45\x5f\x7a\x01\x2b\x66\x2b\xa4\x3f\x29\x3a\x35\x52\x0d\xd7\x70\x64\x37\x86\x23\x73\xf6\xc8\x98\xc9\x7e\xf0\x41\x00\x65\x60\xbc\x14\xbc\xd8\xb1\x23\x6f\x8a\xad\x6a\x0c\xfc\x77\xbf\xe0\x9e\x64\x9b\x2a\x99\xa6\x39\xd5\x74\x9f\x71\x1a\xef\xa8\x2f\xe3\x6e\x7d\xa1\xe0\xd0\x03\x1f\x29\xcb\x66\x39\xa9\x50\x56\x3c\x4c\xec\x72\xf5\xed\x79\xe4\x48\x20\x06\xc2\x39\x43\xde\x48\x6d\xee\x91\x35\xcf\x03\xe4\x61\x68\x8c\x8b\xc5\x30\x93\x70\x63\x22\x39\x60\x39\xc9\x9b\x04\x6d\x7f\x4b\x54\xe2\xec\x99\x89\xd6\x4c\x73\xde\xfb\x3c\x98\x8f\xad\x9b\x50\xd6\x8d\x2c\xd8\x28\x4c\xa0\x05\x9e\x09\xcd\x6b\x16\xa4\xf7\x89\x1c\xcc\x9e\x6a\x23\xf0\xa6\x77\xcf\x17\x01\x60\xc6\xb4\x6a\x5d\x92\x91\xfc\x47\xf7\xaf\x2d\xe3\x88\xb3\x04\x5e\xd6\x9d\xb9\xd5\xdf\x6d\x5c\x54\x64\xef\x08\x37\x4a\x5a\x32\x6f\xd8\x9b\xbd\x1c\xf9\x36\xb6\x65\x9a\x19\x6c\xff\x4e\xe6\x29\xe6\xe8\x6d\xbd\x0f\x3a\xc3\xb5\xe1\x69\x18\x15\xa9\x40\xf9\x8c\x2f\x80\x43\x8c\xea\x24\x37\x42\x1a\x35\xa7\x8b\x84\x54\x2a\x5b\x6b\x3c\x5b\x39\x67\xec\xab\xf0\xc2\xc4\xc6\x30\xb1\xf1\xab\xe8\x29\xa4\x38\xf2\xba\x16\xed\xd0\xdb\x1d\x24\xd1\xea\xfa\xa8\x44\x10\xae\x19\xf4\x7f\x9d\x68\x71\xdd\x1e\x7a\xda\xd1\x2c\x33\x60\x9d\xa8\xbc\x03\x9e\x0d\xf6\x67\xdc\xa0\xed\x94\x1d\xfc\x75\x87\x6d\xb6\x82\x96\xd7\x99\x61\x38\xe5\x89\x53\xa2\x4d\x2c\x98\xb8\x3c\x95\xdd\xd7\x4f\xb7\x1e\x16\x38\xff\xcd\x5a\x9c\x84\x3e\x2f\xad\x3f\xb1\x93\x41\x8d\xac\x57\x83\x0d\xcd\x85\xf1\x9b\x8b\x57\xcb\xa2\x60\x35\x6c\xa0\x55\x9f\xad\x38\x7e\x42\xed\x4b\x34\x80\xc7\xe4\x21\x73\xcd\x29\x68\xbd\x78\x2c\xd8\x9d\xe7\xeb\xa9\xc2\x0c\xf3\xce\xdf\x08\x54\xcc\xce\xeb\x76\xd3\xc8\x29\x57\xfd\xef\x4e\x8d\x7b\x26\x96\xb8\x75\x6f\x02\x70\x41\x75\x29\x99\x99\x49\x19\xd1\x59\xd0\x9b\xc2\xb0\x68\x01\x48\xf9\x19\xad\xf0\x12\x5a\x06\x6f\x7d\x60\xd3\x94\xed\x00\x3d\x73\xf8\x71\xdc\x28\xc8\x8c\x74\x3e\x9c\xb4\xbe\xdf\x56\x7a\x4b\x4a\x32\xee\x9a\x85\x8e\x4e\x67\x5d\x7f\xcb\x95\x71\xc3\xbc\x77\x1b\xe7\x1a\x3f\xfa\x16\xfe\x58\xdb\x78\x64\x41\xf6\x34\xde\xab\xcb\xea\x7e\x10\x29\xaf\x63\xdb\xc6\x85\x0b\x3c\xd5\xc1\x15\x34\xcd\x1f\x67\x7b\x6c\x49\x50\x0d\x0b\x63\x3a\xe5\xc8\x0c\xfe\x70\x9c\x9a\xf7\x70\xb9\x61\x06\xff\xb4\x49\x21\x53\x20\x8a\x20\x54\x85\x23\x6d\x70\xe2\x6d\xaf\xf7\x97\x50\xd4\xd4\x9a\xf6\x5d\x4a\x0a\x43\xa6\xcf\xae\x2e\x71\x7e\xa9\xa3\xbf\x05\xfc\xb6\xb4\xcc\xba\x9e\xf3\x3a\x1f\x57\xb4\xd6\x4b\x54\x76\x8e\x3a\x73\xf3\x51\xf5\x49\x83\x6c\xe9\xd7\x14\x57\x06\x39\x6c\x9d\xe3\x86\xad\x72\xc6\x7b\xeb\xc3\x71\xef\x99\x1d\x62\x3d\xf1\x51\xf9\x1b\xd7\x13\x16\xb1\x74\x8a\xc1\x27\x5c\xcf\xe3\x23\x0e\x48\x17\x57\x1e\x96\x07\x32\xc8\x59\x75\xbd\x1e\x91\x51\x01\xe9\xc7\x2a\x90\x65\x18\x1c\xeb\xb9\x69\xd0\x3d\x99\x9e\x46\x84\x4f\x0d\x91\x96\x62\x0c\xd6\xfd\x84\x89\xb4\xc6\x4c\xcb\xbb\x4f\xac\x83\x3d\x6a\x8b\xe0\x42\x06\xf3\x09\x06\x69\x6f\x3a\x39\x11\x32\x46\x99\xe4\x1a\xe0\x09\xec\xf5\x14\x63\x1f\xee\xb1\x5c\xdd\xa4\x24\x9c\x24\x2d\xf7\x10\xaa\x99\x02\x0c\xe6\x18\x18\x2e\x72\x03\xa4\x40\x12\x41\x01\xa5\x9a\x2c\x63\xcc\xab\x80\xed\x25\x4d\x61\xdd\x3b\xb8\xd1\x6e\x58\x49\x75\x36\x67\x8a\x28\x09\x59\xd5\x95\xa6\x45\xc1\x72\x6f\xd6\xc4\x03\x95\xc0\xd7\x59\x93\x67\xc2\x88\x01\x63\x98\xb2\x41\x81\x0a\xce\xea\xc0\xab\x82\x5a\xe5\xe3\xb4\x11\x19\xfa\x0c\x73\xbd\xf4\x56\xad\x55\x66\x1d\xf4\x36\x0a\xf4\xac\x29\x0c\xe5\x14\xed\x56\x81\x0e\xc6\x03\x12\x90\x96\x25\x12\x13\x23\x19\xb6\x96\x28\x9b\x31\xd8\x50\x06\x9f\x7e\x23\x09\xce\x82\x44\x1d\x23\xe4\xc6\x42\x96\x49\x1c\x87\x4e\x41\x5c\x6c\xcf\x20\x86\x6b\x3b\x09\xb6\x6c\x8d\x71\x3c\xf5\x0c\xa3\x62\xbe\x1c\xb8\x4a\xe1\x5a\x88\xf5\x82\xa2\x8d\x96\x25\xd5\x3c\x03\xf5\x2c\x9f\x06\x46\xde\xd2\x17\xe5\xf3\x4e\x4e\x48\x54\x81\xa8\xdb\x5d\x4f\xbe\x56\x9b\x99\xcd\x47\x6d\x5b\xb0\x53\xf6\x34\xba\x9b\xe2\x96\x1a\xb0\x1a\xc9\x73\xff\xe8\xf2\xa6\x10\x3d\xaf\x19\x23\xbc\x34\x62\x12\x15\x9a\xe4\x7c\xea\xf3\xe5\x38\x9b\xfd\x43\x67\x97\x26\x89\xfe\x1d\xfc\x41\x82\xfe\x50\xd5\x5d\x14\xf2\x4e\x11\x7d\x27\xbd\xda\xad\xb5\xe5\xda\x7c\x29\xa3\xee\xb0\x49\x14\xd4\xf6\x6f\xd0\xb6\x39\xe9\x00\xd3\x8e\xcc\xad\xbd\x63\x45\x61\xfe\xff\x10\xbe\x4d\x88\xf4\xda\xb8\x4e\x3e\x13\x98\x88\x83\x2b\xa7\x66\xb5\xf1\x64\x27\x79\x2d\xab\xca\x9a\x81\xca\xd3\xc7\xac\x13\x5c\x9b\xea\x05\x53\xe0\xa6\xe7\xa2\xd9\xcc\x91\xcd\x98\x60\x35\xd5\x60\x08\xb7\x19\xb4\x81\x38\xae\x4e\x27\x5e\x6d\x89\x6d\x2b\x39\xad\x07\x0c\xd0\x6d\x61\xf3\xb1\xbb\x77\xec\xaf\x49\x73\xe5\x02\x21\xc0\xdd\xd8\xa4\x23\x3d\xf9\x82\x69\x7a\x4a\xbe\x51\x78\x50\x9e\x5e\xf8\x28\xc1\x28\xe9\xdc\x66\x39\x42\x01\x3d\x69\xf8\xb3\xa2\x9a\x07\xe3\x87\x52\xae\x0f\xb5\xee\xee\x54\x67\x66\xe7\xb5\x54\xea\xbd\xfb\x64\x2f\x93\x1c\x24\xe0\x41\x02\x1e\x24\xe0\x87\xdb\x20\x01\x1f\x7a\x3d\x80\xef\x0e\x79\x27\xdf\x87\x0c\x61\x17\x51\xef\x6c\x3f\x08\x79\x2f\xb5\x75\x77\x01\xfe\x9d\xde\xab\xf4\xa4\x80\xd3\xef\xe8\x72\x22\x98\xb6\x79\xe8\x9c\x6e\xff\x83\x1b\xfd\x6f\xb5\xe1\xfc\xac\x80\x16\xdc\x22\x77\x81\x5d\x12\xc1\x60\x14\x2d\x91\x14\xb7\xde\x37\xf0\xfc\x58\x59\x8f\x0e\xf3\x3b\x04\xdb\x93\x4e\x49\x96\x09\xb9\xb6\xde\x82\x2b\x83\xaf\xa7\x0a\xcb\x99\xa6\x3c\x2e\x0f\x65\xd8\x1c\xa5\xfc\x78\x0f\x8d\x3e\x00\x25\x24\xdb\x81\xac\x0f\xdd\x3c\x84\xaa\xa5\x0d\x81\x0e\x3c\xe2\xc3\xa8\x92\xf6\x85\xc7\x5b\x2a\x2f\xa7\xe4\x03\xcb\xe4\x82\xd5\xb8\xdf\x17\x9f\x2a\x2a\x8c\x98\xfe\x96\xf2\xc2\xec\xb6\xdb\xf5\xd6\x7a\x01\x45\x90\xbb\x6e\x09\x81\x11\xcc\x5f\x23\x7b\xb4\x06\x72\x52\x98\x41\x9f\xf3\xce\xf4\x6c\xfd\x74\xab\x9a\x2d\xb8\x6c\x94\x8b\xa7\x69\x34\xd2\x31\xa5\xad\x6c\x3a\xe7\xb3\xb9\x7b\xd9\xf9\x99\x83\x07\x50\x9d\xfb\xab\x92\x30\x07\xa5\xa9\x6e\x54\x37\x51\x4e\x06\xee\x04\x4f\x62\x03\xf6\xe7\xbd\x5f\x86\x6f\x3b\xe6\x0a\xe3\x8f\x0e\x89\xc6\xbf\xc2\x88\x27\xec\xe4\xc6\xde\x02\x17\xa6\xd5\x86\x99\x65\xb2\xac\x1a\xcd\x82\xdb\x62\xa1\x35\x15\x6d\x25\x1e\x64\x27\xef\xe5\x8b\x92\x0a\x3a\x63\x63\x3f\x89\x71\x1b\xa1\xf5\x62\x0b\xac\x95\x78\xa4\xe4\x11\x89\x17\xc3\xf6\x8c\x23\xab\x56\x16\x9b\x1e\x79\x4e\x1e\x19\x7d\x4e\x1e\x13\x81\x4e\x76\x19\x85\x4e\x7c\x2a\x8b\x43\x5e\xc7\x0f\x76\xcc\xd5\x0b\x69\x89\xd5\x43\x17\x72\x3b\x91\xc0\x12\x2d\x3b\x2a\x57\x44\x96\x5c\x6b\xe6\x1c\x99\xfd\x05\x1b\x11\xae\x3b\x99\x16\x2c\xe2\x00\xa5\x39\x7a\x23\xb3\x4f\xbe\xac\x76\xcb\x98\x25\x4e\x06\x84\x9f\x3b\xae\x90\xf1\x12\x84\x97\x15\x16\x66\x01\x04\x30\xb6\x71\x92\x4e\x35\xec\xe7\x9d\x81\x2f\x21\x61\x9f\x40\x91\x8f\x53\x1b\x30\xd3\x80\x99\x56\xda\xcf\x01\x33\x61\x16\x8b\x94\x24\x2b\x1d\x8c\xe4\x3e\xb7\x39\x2e\xe9\x0d\x2b\xc8\x8f\x0d\xab\x97\xc4\xb0\xad\x6d\xa4\x17\x54\x03\x57\x3c\xc7\x98\x26\x67\x35\xdb\xb3\x96\x6c\x3b\xa6\x09\x2c\x6d\x17\x9f\x0c\x77\x0f\x39\xdb\x1e\x81\xaf\x57\xbb\xea\x66\x02\xc5\xdd\xf2\x3b\x18\xf2\xe4\xe8\x74\x1a\x3e\x01\xb6\xfb\xec\xfd\x9b\xed\x04\xaa\x34\x67\x43\xb2\x8d\xc3\xe1\xda\xe2\x93\x89\x15\x21\x67\x0f\xec\x09\xee\x9d\xff\x05\xa8\x84\x77\x17\xf5\x3a\x7b\x72\xcb\x96\x23\xeb\x0e\x4e\xcc\xe9\x53\xf7\x72\xf2\x64\x30\x2e\xa4\xad\x5a\x68\x3a\x8d\xcd\xbe\xdd\x6d\x5b\x23\xe1\xed\x14\xbd\xd8\xe2\xcb\x45\x76\xbf\x72\x9b\x96\x8a\xeb\xb7\xa6\x12\x49\x65\x25\xc3\x76\x5f\x89\x49\x84\x21\xa8\x07\xe7\x72\x23\x78\xb0\x81\xac\x13\x80\x90\x52\x0f\x91\x6c\xaf\x50\xc3\xe6\x36\xf6\xd1\x4b\xdd\xe2\x62\x85\xe3\x77\x63\xf9\x6f\xd9\xf2\x58\xd9\xa4\x77\x52\xa8\x39\xaf\xb0\x04\xaa\x62\x80\xa3\xb6\x03\x78\x6c\xdf\x82\x6b\xbb\x1b\x16\x31\xd8\xa5\x18\x91\xf7\x52\x9b\xff\x5d\x40\x68\x12\x5c\xab\x37\x92\xa9\xf7\x52\xc3\x93\x83\x9f\x0b\x2e\xf1\xa9\x4e\xc5\x5a\x33\x39\x58\x18\x01\x4d\x63\x56\x1e\x88\xd3\xb7\xbb\xef\x3c\x34\xfd\x09\x72\x45\x2e\x05\x91\xb5\xdd\xca\xad\x06\xd6\xae\x88\xb2\xb2\xc3\x3a\xeb\x43\x6b\xd4\xdf\x34\xae\x3d\x35\x59\x77\x0e\x6d\xc7\x53\xb0\xc3\x83\x2e\x12\x7f\x01\xed\x2a\x78\x97\xb8\x90\x1a\x2c\xdb\x4b\x35\x9b\x25\xb9\xba\xb4\xad\x64\xf5\x0c\xb2\x3c\x66\x09\x05\x1f\x83\xc9\x6f\x49\x58\xb1\x6d\x45\x5e\xc3\x81\xb7\x04\xf6\x1d\xf9\xf8\xef\xb8\x2b\xe0\x93\xbe\x82\x50\xae\x43\x4a\xc7\xc1\xb0\xc8\x5d\x94\xb4\x32\xb7\xef\xbf\x0d\x13\x01\x80\xf9\x3f\x50\x33\x5d\x4d\xc8\x19\x51\x5c\xcc\x0a\xd6\xf9\xcd\xaa\xf9\x83\x6e\x92\x27\x00\xd6\x37\x43\xe3\x17\xb4\x60\x18\x2f\x4a\x85\xaf\x1e\x2a\xa7\x6b\x2c\xe4\xc8\x16\x51\x37\xe4\xcd\xbb\xa5\x1d\xdd\xb2\xe5\xd1\x28\x51\x91\x4a\x42\x9a\x60\x3a\xb9\x14\x47\x6d\x4a\xda\xce\xbd\xf4\x7c\x16\xf8\x1b\x1c\xc1\x6f\x47\xbb\xe6\x51\x9f\x48\x48\x7d\x32\x37\x51\xab\x54\x3e\x2f\x28\x1a\x56\x0e\x61\xbe\x58\x1d\x73\x53\x51\xc2\xeb\xe0\x9d\xd6\xa4\x65\xa3\x97\x9f\x50\xd3\x0e\x19\x61\x92\xc3\xac\x92\x0e\x76\xb5\x0c\xd0\x41\xcf\xe6\xde\xc1\x83\x60\x6b\x9f\x53\xdc\x9c\xc5\xb7\x9b\x3e\x08\x62\xcd\xb9\x4a\x3f\xae\xcb\xe9\xaa\x8f\x42\x90\xee\x24\x8c\xe2\x91\xb5\x8d\x5a\x5f\xf3\x21\x86\x0a\x89\x6d\x25\xa5\xd8\xda\xa9\x6d\x6b\xdd\x1f\x6a\xa6\x2a\x89\xfe\xb5\x1b\x17\x6b\x59\x84\x39\x55\xe0\x93\x35\xb5\xe6\xd6\xaa\xa9\x2b\xa9\x6c\x79\xbb\x55\x90\x4f\x8c\x5c\xb2\xe1\x64\x2e\xc8\x14\xc3\xc0\xfd\x4d\x30\xf7\xc7\xe7\xa5\x3e\x5b\xc9\x49\x28\x6b\x48\xd6\x66\x1d\xc4\x44\xce\x33\x2b\x4f\x52\x4d\x44\x5f\xc2\x98\xb0\x6d\x3e\x68\xe7\xfb\x89\x22\x8d\x4f\x92\x85\x47\xee\x58\x37\x9c\x25\x13\x1a\xac\x82\x82\x5c\x8a\x29\xa3\x8a\xdf\x14\xcc\xba\xb3\x29\x4d\x75\xd2\x9e\x04\x4e\x5c\x76\x6f\x8c\x30\x01\x94\x8b\x6b\xb5\x6a\x0e\x3c\xe1\x22\x2b\x1a\x38\x41\xc1\x8b\x53\x50\x04\x51\x91\xb1\x02\x29\xa7\xcc\x7d\xac\xf0\x16\x11\x4b\x81\x39\x73\xca\xea\xda\x96\xc3\x5b\x6e\xbe\x49\x24\x97\x0c\x9d\x70\x20\xb8\x6e\x84\x0b\xd9\xec\xbb\x68\xb7\x36\x05\xb1\xe2\x0e\x50\x72\xc5\x10\x5e\x71\x5f\xb1\xda\xea\xb4\x08\x2a\xf2\xd8\x55\x5b\x8f\xb7\xeb\xc0\x9a\x39\xc2\xc4\x15\x36\xeb\x44\x98\x90\x3b\x61\x22\x36\xe1\xc3\xfe\x31\x34\x6e\xf2\xb8\xbd\xe9\x63\x40\xd0\x2c\x41\x41\xbd\x35\x86\x8e\xab\xa8\xe5\xda\x63\x51\x32\x94\x17\x70\x29\xe7\x3a\xc9\x53\xdb\x78\x87\x47\xd3\xc9\x6f\xe1\xba\xc8\x29\x79\xdb\xd6\x80\xe5\x0a\x0c\x16\xdc\x25\xa4\x33\xc0\x8b\xf7\x09\x0d\xe7\x78\xb9\x0d\xbe\x4e\x55\xa4\x6e\xb1\xe7\x8f\x20\x83\x6d\x07\x8e\xdf\x70\x51\x13\x6b\x09\x4c\x56\xef\x23\xb8\xea\x7b\xdf\xd1\xc4\x5d\x8d\x5c\xeb\xb4\x27\x29\x42\x67\x2d\xd3\xac\xab\x3f\x79\xcb\x6f\x6a\x46\xce\xe7\x54\x08\x56\x04\xf9\xa1\xad\x11\x8b\x6a\x4d\xb3\x39\x62\x26\x4a\xcc\xbd\x2a\x98\x3e\x56\x64\x2e\x95\x26\x25\xcd\xe6\x5c\xf8\xe4\xa1\xc2\x67\x23\x6f\xb3\xb9\x1c\x3c\x75\xd6\xde\xab\x36\x5b\x08\x08\x4b\x1d\x77\x8a\x39\x47\xf4\xe4\x93\x00\xaf\xf5\xd2\xd6\x49\xb4\xf7\x10\xf6\x19\xa5\x1c\xc0\xca\xf0\x6e\xcc\x18\xf7\x97\x94\x26\x97\xa5\x37\x4c\x72\x11\x10\x1e\x66\x3f\x20\x7c\x4a\x1a\x91\xe0\xe2\x9d\x70\x27\x8b\x26\xa2\xa6\x51\x37\x7b\x79\xd1\x08\xb3\xe9\x6d\x95\x9a\xb7\xe7\x44\xd3\x7a\xc6\xb4\xe9\x8d\x88\xa6\xbc\x61\x75\x7f\x1a\xf3\xfd\x15\x56\x3b\x48\x1d\xd4\xce\x0e\xf4\x94\x2f\x25\x1f\xdc\x57\x10\xee\x01\xdc\xc0\x54\xc6\xd1\x61\xf4\xd1\x73\xc5\x57\xb1\xf4\x9e\xc1\xd5\xdf\x5a\x52\xd2\x88\x18\xea\x9c\x52\x1f\x15\xcf\xf2\xef\x7f\x7f\x9f\x5a\x9c\xee\xb8\xfd\xf2\x3e\x00\xb9\x93\x75\x91\xdf\xf1\xdc\xba\x63\x92\x13\xf3\xf2\x69\x2c\xb0\xec\xb8\x56\xdd\xf6\xa9\x74\x53\x75\x53\x77\x77\x3c\xdf\x4b\x9d\x59\xe8\xb8\xbb\xd3\x4e\x74\x32\x3b\x4d\x60\xab\x79\xce\x84\x36\xa8\xa3\x56\xe4\x04\xbe\x88\xc9\xf5\x70\xc1\x31\x23\x1f\x8c\x00\xd5\x70\xca\x1b\x2e\xda\xa4\x92\xed\x59\x1b\x72\x63\x6e\xbe\xd3\xb6\x2a\xa6\x31\xaf\x17\x44\xf4\x4b\x3d\x27\x8a\x97\x4d\xa1\xa9\x60\xb2\x51\xf1\x25\xe8\x3f\xcb\xe3\x9e\x16\xec\x13\xde\xcd\x5d\x26\x4e\x6e\x7b\xed\x72\x0b\x10\x4f\xd4\x66\xa3\x5d\x65\x17\x7a\x7a\x6d\xc3\x34\xf3\x17\x9e\xb1\xf0\x59\xf5\xd8\x27\x96\xd9\x7c\x1a\x55\xd1\xcc\x78\xaf\x44\xf5\xc6\xcc\xcc\xc8\xa4\xf9\x6b\xf2\xb6\x9d\x30\x44\xef\xba\x5f\xb0\x44\x31\xd8\xed\xed\x40\xe4\xfc\xfa\xf2\x8d\x4d\x7f\x2a\x94\x66\x74\x57\x3c\x4a\xac\xa9\x73\x6c\xd5\x11\x3b\x62\x78\xb0\xb3\xc4\xcb\xde\xe6\x7f\x5d\xd5\x9e\xd9\x5f\x6c\xad\x03\x9f\x37\x3f\x36\xe1\x67\x02\xd0\x0f\x9c\x1a\xb6\x07\x38\xb5\x30\x75\x7e\x30\x81\x9c\x55\x4c\xe4\x50\x8c\x2f\x80\x7b\xdc\xa5\x9d\x1e\x91\x2d\x1c\x97\x4a\x97\x5d\xbd\xb9\x0e\x51\x0e\xf4\x2e\x73\x59\xe4\x8a\xb0\x4f\xba\xa6\x06\xcd\x97\x06\xa1\xfb\x6f\xa6\x84\x8a\x65\x44\xd5\xcf\xe7\x54\x20\x9c\x3c\x09\x17\x98\xff\x9c\xb8\x40\xc5\xb2\x9a\xe9\xa8\xc0\xe2\x2d\xca\x86\xb8\xce\xbb\x1b\xd8\x79\xbc\x26\xca\xe3\xaf\x2e\x3c\xa6\xad\x0d\x1c\x35\x9e\x50\x1c\x8a\xf0\xad\x54\x1c\xae\xa8\x52\x5e\x3a\x06\x22\x67\xaf\xad\xea\x64\x9a\x88\x18\x02\x35\xb5\x7c\x4a\x84\x5c\x99\x69\x18\x08\xe4\xf5\xa8\x9d\x57\x22\xba\xf7\x16\xb3\x12\x0b\x11\x50\x01\x21\xf5\xd8\xcd\x08\xe2\x8c\xf1\xdf\x68\x34\x33\xeb\x0a\xe4\x7e\x58\x59\xcc\x3e\xd9\xb5\xef\xf6\xb2\xa7\xb9\xf2\xc4\x47\xbf\x6d\xa7\x87\x7b\x1f\x10\x57\x17\x50\x15\xab\x02\xea\xe6\x88\x65\x50\xb9\x93\x2f\x18\x64\xa0\x75\x09\x59\x0d\xe3\x9b\x37\x18\xb4\xe4\xd2\x42\x74\x93\x3d\xc4\x07\x77\x07\x21\x37\xad\x17\xc3\xa5\x50\x9a\x42\x5e\x00\x58\x85\xa1\xaa\x86\x00\xda\x5c\xbf\x16\x10\x51\x5b\xee\xb2\x0b\x44\x0f\x57\x1a\xa2\x99\xb1\xda\xc0\x5a\xb1\x24\x77\xb5\x8c\x77\xaa\x4c\xd4\xfb\xca\x05\xab\x17\x9c\xdd\xbd\xb0\xd1\x70\x63\xb3\x80\xb1\x0d\x28\x7f\x01\xe2\xe1\x8b\x5f\xc2\xff\xa2\xc6\x4f\xd6\x43\x5a\x6c\xfd\x9a\x1c\xf5\x97\xe4\xdb\xd6\x3c\x3b\x85\x04\xd2\x3b\xad\x7a\x66\xbb\x5c\x51\x1a\xda\x87\x56\x0c\x88\x51\x12\x5a\xfc\x16\xb0\x2e\xe6\x42\xb8\x8e\x6c\xfa\x3e\xa2\xcc\x19\xb5\x61\x92\x8d\x10\x11\x5e\xb6\x5d\x39\x00\x3b\xec\x08\x01\xde\x29\x80\x8b\xb1\xae\x19\xf3\x8b\xd2\x96\x4d\x14\xd2\x95\x6e\x88\x2c\xc8\xb9\x07\xc5\x65\x4e\x35\x55\x4c\xc7\xa9\xa9\xd3\x51\x51\xd0\xbd\x59\x71\x88\x95\xec\x4f\x60\x69\x64\x90\xcf\xc6\x65\x41\x26\xe3\xbf\x58\xe1\x40\x74\xde\x34\x62\x81\xdd\xe9\x18\x2c\x3f\x77\xe5\xab\x9c\x0f\x35\x8e\xd2\x1e\xd0\x2e\x79\x56\x3b\xc7\x6f\xbe\xb9\x7c\x93\x2a\x14\xb5\x5f\x3a\xd9\x01\xfe\xdd\xdd\x26\x0b\xc8\x50\xa7\x8a\xff\xd8\x84\xea\x0e\xa8\xe3\xe1\x41\xd0\xbe\xbf\xab\xb5\xcd\x32\xd6\x1a\x17\xde\x70\x75\xbb\xcb\x5b\xbe\xd6\x79\xf7\xbe\xff\xed\xfc\x82\xd8\xa7\x0f\xd9\x07\x7a\x06\xd9\xb5\xf5\xa0\x7b\xf3\xff\x76\x7e\xb1\xb2\x84\x15\x45\xc0\x59\x51\x38\xf9\xcc\x08\x1a\x2e\x5d\x82\xc5\x09\xc9\x1b\x04\xb8\xc3\xf0\x3e\x35\xc3\x1a\x83\xc1\xcc\xf3\x49\xa6\xb8\x4f\xa9\x3a\xbb\x65\x13\x2e\x03\x47\x84\x3d\xd7\x80\x9c\x65\xac\x75\x3f\xc9\xb9\xba\x3d\xb4\x7e\xa3\xca\xdf\xf7\x25\xde\x78\x5e\x06\x9d\x55\xe1\xde\x95\x07\x0a\xea\x84\x2d\x65\x43\xee\x6c\x45\x84\x68\xf5\xc1\x47\x5e\xbd\x26\x17\x42\x35\x35\x6b\x7d\xb9\x57\x07\x33\xfc\xfa\x0e\x95\x09\x50\x60\x43\xbd\x3e\x98\xf1\xe7\xc0\xe0\x4a\xd2\xa8\x41\x45\x6b\x0d\x92\xff\x3e\x00\xc8\x77\xee\xc8\x45\xf0\x40\xec\x06\x82\x2e\xa7\x2e\x02\x71\x64\x73\x8a\xfb\x42\x8a\xae\x9b\xd6\x63\x04\x68\x75\x1a\x94\xbc\xf5\xe5\xac\xc8\x8b\x9c\x2d\x5e\xa8\x9c\xbe\x1a\xc1\x54\x5d\xcc\x7d\x77\x5d\x54\x91\xa3\x57\x47\x31\x63\x5c\xf3\x92\x17\xb4\x2e\x30\xa3\x9d\x4f\xf4\xe7\x7b\x32\xf8\xd7\x0d\x09\xee\x9b\x2f\x8f\xc8\x89\xac\x61\xec\x8c\x0a\x52\x30\x97\xfd\xce\xe2\x8a\x25\x8a\x1a\xa7\xcf\x18\x24\xf7\x61\x5d\x44\x64\xba\x17\xf0\xcd\x1d\x37\x68\x39\x99\x4e\x61\xa3\x37\x2d\xb1\xe7\xc2\x50\xd7\x09\xf9\xc6\x52\x67\xcb\xf1\x20\x6c\xe4\x40\x6a\xf1\x8d\xe7\x7b\x32\xcf\x47\x85\xb7\xa2\x8c\xdb\x91\xaa\x8d\xac\xdb\x84\x9f\xf1\x69\xf4\xab\x04\x67\x5c\x7f\x60\x95\xdc\x29\x8f\x8b\x5d\xae\x18\xb4\xb8\x36\x0f\xa4\xe2\x50\xb9\x9b\x6a\x42\x11\x47\x65\x4d\x41\x8d\xd4\x8b\x06\xab\x24\x46\xd4\x8e\xb3\xc2\x7e\x7e\x0c\x6b\xa8\x05\x91\xe4\x56\x91\xe2\x67\x32\xb2\x58\xbd\x57\x63\xea\xab\x03\x43\xe1\x10\xf0\x8d\xe4\xfa\xdc\x77\x8b\x01\x86\x85\x14\x36\x04\xd0\xf4\x6d\x6d\x60\x33\xae\x6d\x5a\x74\x1c\xca\xfc\xec\x7a\xeb\x19\xb4\x2d\x52\x02\x55\xcd\xfd\x2a\x0e\x6e\x43\x6b\x0f\x6d\x57\xf2\xb7\x2b\x14\xbe\x17\xe9\xdb\xd7\x86\x77\x89\xbf\xd0\x3f\xa1\x7d\x1e\x4b\xba\xdf\xb9\xfa\x4b\xae\x82\x10\xfa\xc0\xd6\x1a\xe1\xe8\x78\x32\x39\x9e\x00\xdb\x70\x3c\x39\x76\xac\x65\xe1\x9d\xa1\x2d\x15\x6e\x87\x4d\x2b\xb3\xd7\xbd\x2d\x13\x42\xbe\x76\xf9\x09\x20\xe9\xf2\x8a\xe7\xb5\x77\xaa\x6e\x6b\x47\x63\xba\xba\xee\x9d\x8b\xd2\x14\x83\x0e\xbb\xb9\x09\x27\x6e\x5d\xb5\x67\x7c\x61\xf3\xb1\xee\xd4\xf4\xd5\x4e\x30\x11\x1e\xc2\x95\x59\x25\xc2\x87\xaf\x76\x3b\x33\x44\x22\xc9\xf3\xb2\xb8\xc7\xce\x2a\x93\x65\x89\xe5\xc0\xe6\x5e\x16\x6e\xf3\xf9\xc5\x22\xbe\x78\xf5\x05\x96\x46\x9b\xf6\xdc\xc3\x44\x94\xee\x3a\x5d\x51\x57\xf8\xc7\x36\x3f\x88\x68\x85\x2a\x40\x8b\x6a\x4e\x6b\xa6\xb0\x84\xb9\x2d\xd8\xdc\x5f\xe7\x73\x05\xcb\xfb\x31\x1e\x56\x35\xb6\x53\xdc\xbf\xb2\x31\x1e\x7b\x32\x91\x57\x92\xf7\x27\xcf\x1a\x93\x8a\xea\x87\x53\x5b\xc7\x63\x58\x3f\x68\x22\xe4\xfa\xef\x1c\xe8\xba\x07\x41\xf5\x47\x9b\x35\x2e\x38\x16\x2d\x2b\x59\xc8\x59\xb4\xf7\x4f\xa4\x38\xa9\xe7\xfb\x91\x24\xf5\xdc\xad\xae\x5d\x82\x97\x99\x74\x54\x84\xe7\x06\x66\xce\xd6\xdb\x54\x2e\xf5\x9f\x65\xdc\x5e\x78\xa8\x7c\xf1\xe1\xe2\xec\xcd\xbb\x8b\x49\x99\xff\x12\xe3\x40\xc6\x74\x1c\x53\x35\xf3\x73\xe0\xaa\xd7\x36\x12\xf5\x1c\x80\x13\x5c\xb1\xca\xb6\xee\x62\xc5\xea\x92\x63\x8c\xe2\x21\xd9\xed\x3d\x9f\x50\x3f\xa7\x6d\xb0\xe2\x55\x2f\x58\xa7\x1d\x8d\xeb\xb3\x8b\x96\xab\x9a\x8d\x7d\x61\xa8\x29\x2f\x20\x08\xab\xa5\xe8\x01\x96\xee\xe9\xde\x69\x8e\x9d\x12\x1a\xfb\x28\x96\xab\x1a\xe4\x96\x3b\xf5\x3a\x7b\x4c\x88\xdd\x5f\x48\xd4\x57\x81\xb5\x9a\x3a\x3a\xc3\xc2\x4e\xb5\xcd\x47\x5b\xd5\x7c\xc1\x0b\x36\x83\x92\xd8\x5c\xcc\x54\x9b\x5b\xd0\x1a\x51\x7b\x06\x80\x38\x38\xd6\xd2\x25\x6f\x26\x7b\x07\x26\x51\x9f\x2e\x09\x81\xfa\xfd\xd7\x1f\xa1\x58\x3d\xd8\x5f\xf7\xac\x3e\x36\xd3\xe9\xc5\xfa\xfb\xd0\x1a\xef\x8e\xd2\xec\x15\x4d\x3b\x73\xd0\x26\xc0\x8d\x54\xe9\xa1\x4e\x0d\x51\x3e\x25\x6a\x59\x16\x5c\xdc\x8e\x7c\xa1\xb1\xa9\xb4\x29\x56\x19\x31\x3f\x38\x70\xae\x19\x2d\x1e\x43\x0c\x76\x0e\x04\x24\x8d\x10\xe8\x3d\xe9\xf1\x81\xb1\x32\x77\xf5\xdf\x1c\xda\x41\xdd\x49\x22\x16\x8f\xb0\xcb\x3f\xbb\x6d\xe5\x25\x9d\xed\xd4\xf1\x17\x3a\xec\xa0\x6d\x41\xbe\x3e\xbf\xf4\xf5\x02\x43\xc5\x05\xbe\x2b\x6b\x42\x6b\xcd\xa7\x34\xd3\xa7\xa4\x6a\xa0\xaa\x0b\xd4\xa8\xb0\x64\xd6\xde\x8e\x7b\xbc\x02\x7a\xa6\xf3\xb1\x15\x23\xc1\x45\x4b\xc9\x62\x61\xfa\xd7\x50\x1c\x1a\xe4\xde\xa6\xb2\x4e\x05\x10\xb2\xea\xaa\xcc\x5f\x35\x45\x71\x25\x0b\x9e\x2d\x7d\x81\x03\x54\xbf\xe4\x06\x15\xf5\xe2\xa2\xb3\xe2\x8e\x2e\xd5\xeb\x70\xe6\x84\xc2\x33\x42\xb5\x66\x65\x85\x20\x63\x96\xbb\x9a\xe8\xb8\xd5\xc0\x60\xe1\x5d\x57\x60\x7d\x4a\x79\xe1\xef\x7e\x63\x1f\xf4\xe2\xf2\x31\x79\xcf\x16\xac\xee\xce\x44\x98\x47\xd0\x89\xea\x8e\x0e\x1b\x0f\xdc\x4c\xa3\x40\xbe\xc1\x9a\x0a\x6b\x07\xd5\x33\x4b\x3e\x5d\xe9\x16\xeb\x91\x58\x98\xe8\x9f\xf2\xe5\xf4\xbd\xd4\x57\xf8\x76\x77\xe6\x38\xe7\x7b\xfa\xa7\x85\xe1\xc6\x96\x6e\x1c\x73\x98\x39\x57\xb7\x8f\x9a\xac\x97\xc7\xc2\x2d\x8f\x07\x3a\xa8\xc0\x5b\x63\x22\x43\x80\x3c\x3b\x9a\x81\x3e\xf8\x2d\x37\xcb\xb2\x10\x5f\x33\x1b\x4a\x3d\xb2\x40\x58\x32\xea\x6a\x39\x0b\x76\x07\x95\xd9\x75\x5b\x29\xd8\xaa\x5e\x32\x59\x32\x42\x17\x94\x17\xf4\xa6\x00\x4f\x0b\xd3\xb9\xed\x2b\x42\x02\x3f\x83\x55\x81\x85\x51\xba\x1b\x62\xce\xda\xc3\x26\x9e\xbe\x4d\x3a\x13\x5e\x1b\x9c\x40\x21\xb3\xdb\x90\xdf\x80\xca\x56\xca\x95\xa8\x87\x9b\x4c\x97\x84\xe6\x39\x51\x7c\x26\x20\xdc\x59\x68\x52\x50\xcd\x44\xb6\x9c\x10\x9b\xca\x59\x05\x95\xa3\x75\xcd\xbd\x5f\xbf\x80\xba\xed\x6d\xb5\xcc\xec\x56\x4e\xa7\x2b\x95\xa6\xad\xe9\xd3\x22\x0a\x5c\x3d\x55\x52\xe0\xe0\x4c\x29\x3a\x8b\x42\x14\xab\xa5\x63\x70\xe7\x6d\xf2\x01\x87\x8e\x5c\x66\x01\xe7\xba\x54\xbb\xd0\xd8\x36\xf4\xd5\x43\x5b\xdd\x08\xcd\x4b\xb6\x92\x75\x93\x80\xfe\x76\xcd\x85\xc1\x0c\x65\xd3\x92\x42\x60\x8a\x0d\x74\x75\x25\x59\x78\x6e\xe7\xb7\x66\xeb\x5d\x45\xa8\xe0\xef\x17\xb3\xde\x00\x2f\x03\x2c\xba\x25\x42\x71\x67\x9b\xee\xa5\xe5\x52\x4e\x20\xce\xb6\x3d\xe8\xef\x7e\xfd\xfd\x64\x11\xda\x18\xe0\x73\x43\x3e\x4f\xcd\xcc\x4a\x56\xcf\x5c\xcd\x91\x92\x0a\x3e\x65\xca\x9c\xfa\xd2\x80\x88\xd5\xe3\x41\x51\xa2\x3b\x03\x1c\xe8\x4d\xb1\xb2\x90\x5e\xdc\xf6\x71\x45\x47\x18\x9c\x52\x2b\x96\x9d\xd4\xf2\xd4\xd6\xc4\x17\x63\xf6\x89\x65\x8d\x86\x7b\x02\x56\x74\x72\x22\xa4\x79\xd6\x6b\x13\xbc\x6e\x6e\x90\xe1\x82\x01\x56\xa6\xeb\x2a\x70\xe9\xe0\x6c\x7a\x77\x4b\x35\x37\x15\xee\x15\x9b\x1a\x9e\xe0\xd5\xe4\x77\xbf\x8b\x59\x30\x7a\x73\x42\xef\x8a\x65\x4d\xcd\xf5\xd2\xa0\x37\xf6\x49\x4f\xa6\x0a\xea\x59\x9c\x43\xaa\x06\x4b\xbc\xe6\x14\x14\x46\xe8\xfa\x89\x57\xa4\x05\x5e\x03\x50\x07\xf7\x53\xab\x3c\x65\xdd\x07\x2f\x67\x97\x3d\xb5\x08\xcc\x40\x60\x0b\xe6\x6a\x42\xae\xa4\xc2\xec\x0f\x3e\xbf\x4f\x94\xf3\xee\xb3\xa1\xe7\xa6\x7d\x76\x14\x9d\x80\xd4\xf2\xbc\x69\x7a\xff\x0a\x42\x5e\x1f\xe1\xc1\x8c\xf3\x1a\x92\x64\x6a\xa2\xe9\x6c\xa5\x84\x86\xac\x3b\x8b\x6e\x73\x31\xef\xd8\xce\x60\xd7\xb8\x8f\xdb\xf4\xc1\x09\xdf\xe4\x72\x15\x60\xba\xf1\x0e\x36\x3b\x4f\xcc\x36\x7e\xc1\xe6\x74\xc1\x36\x12\x81\x4a\xe6\x93\x0d\x78\x13\x80\x35\xa6\x6b\xc3\xb4\xfb\xb0\x02\x9f\x1e\x46\x29\x56\x42\x69\x88\x7b\xc8\xce\x26\x1a\x7a\xb3\x24\x85\x94\x90\x78\xa1\xa9\x88\x90\x39\x33\x60\x06\x6e\x0b\xb4\x50\x23\x72\x7d\x66\x5f\xac\x82\x21\x31\x79\x18\x70\x48\x15\xcb\x36\xbc\xb0\x07\xb9\x3b\xc8\x8b\x8d\x44\x33\xc6\xab\xac\x13\x15\x20\x6d\x38\x4b\x5b\x9a\xc5\x16\xac\x28\xd8\x82\x81\xe1\x6d\xca\x67\x04\x13\x72\x97\x36\x45\x9b\xf3\x22\x92\x35\xa4\x39\xae\x79\x1e\x23\x2c\xaf\xd2\x77\x73\x20\x77\xb2\xbe\x2d\x24\xcd\x83\x02\xec\x8a\x14\xfc\x96\x91\x37\xac\x2a\xe4\xd2\xe6\x55\x13\x39\xb9\xd6\x54\xb3\x69\x53\x5c\x47\x6d\x64\xac\xfc\xab\x32\xc5\x77\x2a\xff\x9a\x0e\x57\xe4\xdf\xcb\xeb\xf3\xeb\xcb\x67\xe9\xff\xfa\x38\x6d\xc4\x8b\x5f\xc2\x6a\x0f\xad\xe7\xe3\x3f\xf6\x19\x7c\xc7\xa4\x68\xfa\xdf\x41\x13\xfa\x95\xac\x35\x2d\x76\xc4\xdb\x64\x73\x5a\x9d\x35\x7a\xfe\x86\x2b\x28\x5b\x93\xca\xe2\xac\x7d\x1f\xa4\xdd\x61\xa0\x37\xb6\x1c\x26\xe1\x0e\xa6\xec\x7b\xe7\xff\x76\x76\x45\x68\x63\xe0\x40\xdb\x84\x52\x3b\xd3\xf0\x87\x2b\xbb\xc6\x34\x8c\x5b\xae\xcb\x7e\xdd\xb3\x2a\xf7\xd6\xbe\xd7\xf4\x54\x01\xc4\x83\x77\xf0\x01\xbd\x83\xfb\x51\x14\x49\x63\xb8\xb8\xe0\x9a\x53\x2d\xeb\x7d\xb9\x55\x76\x06\xf0\xde\x16\x8d\xd2\xb2\xb4\x17\xe4\xd2\xbd\x01\x61\x38\x91\x36\x83\xb5\x6e\x5b\x67\x0d\xb0\x64\xc2\x46\x5d\x0a\xcd\xea\x29\xcd\xd8\x4a\x0a\x8c\x11\x28\xa0\x70\x74\xee\xde\x89\x18\xf7\xcf\xd6\x4f\x09\xaa\x04\x17\x7f\x79\xfd\xe7\xc0\xd1\xf8\x2f\x9e\x45\xb3\x6a\xaf\x90\x1b\x13\x2c\x8b\x4b\x8a\x97\x72\x72\x3f\xa6\xe2\x2d\xfe\xa3\x58\x71\xb8\xc2\x2d\xf8\x7f\x0d\x2d\x70\xeb\xe2\x0e\x20\x65\x92\x9d\x63\xd8\x0b\x7c\x75\x0f\xda\xae\xcf\x9f\x2a\x86\x76\x01\x3e\x41\x91\x51\xd8\x45\xeb\x9a\x0a\x65\x0e\x32\x55\x58\x3a\xb6\xec\xe2\x31\x39\xd1\x59\x15\xe1\x7f\x9d\x14\x1b\xe9\xe3\x22\xed\x3f\x7a\x3e\x48\x4f\x20\x55\x34\x22\x64\xe8\x70\x33\x3e\x22\x38\x7c\xe5\x13\x48\xc5\xae\x6a\x2f\x2e\xde\x70\xbb\xf6\x92\xb0\xc7\x76\xed\xa1\x24\x5c\x3c\xb2\x4e\xe4\x2b\xae\x34\xa6\x9a\xc0\x97\x21\xd4\x18\x93\xf1\x18\xe6\xf7\xca\x48\x09\xbc\xfa\x2f\x9a\xe7\xf5\x6b\xa4\xf2\x4e\x07\x5e\xc7\x44\x92\x1b\x11\x45\xfb\x02\x7a\x4e\xf2\x38\xd1\xcb\xca\x56\x6b\xff\x78\x7e\x05\x7d\x29\xf2\xa7\x3f\xbc\x04\x6e\xf8\x77\xbf\xfd\xc3\xcb\x68\x30\xfb\x2c\xb3\xf6\x90\xff\x85\xde\xe6\x87\xc8\x06\xd1\xc9\xe8\x00\xd9\x7f\x0d\x0f\x7a\x8d\xc9\x0f\x0c\x79\xb2\xa8\x10\x2f\x80\x81\x35\x4f\x56\xb7\xe3\x54\x87\x94\x04\x43\x4a\x82\xb6\x0d\x29\x09\x36\x4f\x2c\x90\xd4\xf7\xe2\x00\x12\xf4\x0f\x49\x67\xd7\xa9\x1c\x12\xb8\xab\xcf\x91\xc0\xf5\x1e\x68\x3f\xba\x48\xdb\xd2\x30\x0c\x2c\x2e\xef\x57\x9b\x26\xeb\xcd\xfb\xeb\xff\xfa\xea\xec\x8b\x8b\xaf\x60\x9d\x36\xae\xcc\x80\x35\x17\x7b\x52\x6a\xed\xe8\x12\xc5\xee\xf5\x6e\x1d\xd8\xc5\x8a\xeb\xba\x20\xef\xdf\x5e\x27\x7a\xad\xef\x55\x47\xf8\x4b\x31\x8d\xd9\xb7\xc3\x3a\x02\x9a\x97\x14\xab\x77\x97\x43\x6f\xaf\xfe\x82\x41\x3d\xd0\x8e\x16\xc7\x9c\x34\xae\xe2\x00\x6a\x94\xbe\x63\x24\x9f\x89\x4f\xb7\xd9\x34\xdc\xc8\x67\xe9\xcd\xbd\x9f\x23\x89\xe5\x99\xeb\xf4\x44\x90\x91\xe9\xd3\xea\x20\x5b\xa4\x41\x48\x48\x22\x6a\x43\x3c\x0d\xd9\x64\x4a\x39\x82\xf1\xb9\x42\x75\xb5\xa9\x90\xc2\x2e\x51\xfd\xc6\x01\x6c\x11\x05\x57\x05\x22\x70\x96\xef\x98\x67\xfb\x2c\x4b\x9b\xab\x40\x84\xf6\x52\x20\x80\x15\xcd\xfa\x49\xf9\xce\xea\xdd\xb4\x8f\xf0\x09\x24\xbf\x3f\x38\x31\x81\x51\x77\x98\x8e\xc4\xf7\xb7\x8f\x8b\xe6\x3b\x5f\xcd\xcc\x4a\x53\x8e\x98\x50\xe5\x3d\xe9\xd0\x0b\x2f\x29\x85\xeb\x13\xc3\x00\x79\x86\x94\xe8\xef\x7b\x53\xa0\xec\x5a\x79\x52\xcd\xa5\x96\x62\x7f\x89\xa2\x36\xf5\xdf\x45\x5c\x57\xf0\xc6\xb9\x77\x07\x08\x10\x1f\xe6\x8a\xf0\x26\xf3\x15\x2f\x71\x6b\x1e\x4f\x73\x10\x0f\x43\x32\xaf\x36\xcd\xed\xe1\xe8\xcc\x8d\xcb\x79\x4e\x81\x9a\x55\x7e\xf9\x66\x47\x98\x6b\xc8\xb7\x8c\xed\x99\x56\xc6\x30\x27\x9d\x78\x38\xe6\x13\xb7\xeb\x97\x6f\xac\xa0\xe1\xb2\xd1\x29\x7b\x1f\xc8\xfd\x57\x71\x67\xbc\x93\xac\xf5\x9d\xac\xf7\x90\x87\xbe\xdb\xf3\x4a\x38\xa1\xfd\x6d\x2d\x0b\xe5\xce\xf1\x4a\x77\x12\x49\x69\xe5\x56\x57\x60\x76\xb4\x67\xe8\x7b\x72\xca\x7d\xca\x27\xae\xaf\x49\x26\xcb\x4e\x5d\xbb\x39\x43\x3e\xe0\xfc\xfa\xf2\x1d\x9f\xe1\x54\xdc\xac\xc9\x94\x51\xdd\xd4\x6c\x3c\xa3\xba\x6f\x68\xae\x48\x9f\xcd\x76\x0f\x38\x0e\xcf\xef\x73\xc0\x73\xd7\x80\xe7\x02\x28\x7c\x08\xdf\x3d\x57\x74\xf7\xb4\x68\xee\x20\xfc\xda\xcf\x2a\x33\xba\xbb\x1e\x89\x3b\xe6\x3e\xb3\x4a\x58\x73\xd6\x2d\x69\xa0\x1e\xa9\xd9\xf7\x76\x46\x0a\x6a\xf9\x0f\xc0\x5b\x09\x54\xc0\x7f\x83\x56\x5a\x40\xa1\xb4\x28\xcc\xae\x4a\xd1\x16\x19\x51\xad\x9f\x2e\x3a\xb5\x96\xb4\xb2\x3e\xbb\xb9\xbc\x13\x77\xb4\xce\xc9\xd9\xd5\xe5\x6e\xb0\x57\x42\xde\x20\x84\xb5\xb8\x92\x7e\x5b\x64\x0e\x6a\xbb\x07\xca\xa0\xb1\x00\x23\x23\x37\x5c\xab\x4e\x49\xd5\x40\xe5\x65\xc8\x9e\x77\xca\x81\x40\x99\x1b\x7f\x29\x92\xd8\x30\x41\x64\xa6\xa9\xab\x01\x7a\xc3\xf4\x1d\x63\x82\xbc\x7c\xf9\x12\xed\x18\x2f\xff\xf8\xc7\x3f\x82\x53\x39\xc9\x59\xc6\xcb\xf5\x17\xe1\xad\x7f\x79\xf5\x2a\x66\xd0\x7f\x3f\x7b\xf7\x15\xa1\x19\xc8\x94\x58\xc6\x07\xc7\x86\x03\x0e\xbb\x57\x23\xf2\x7f\xaf\xbf\x7e\xef\x28\x8c\x5a\xf9\x15\xe0\xc7\x6f\x51\x94\x2c\x66\x83\xa4\x38\x84\xb1\xb5\xb6\x0a\xaa\xe7\x3e\x34\x88\x82\xa5\x33\x08\x20\xb3\x77\x3f\xca\xd1\x0f\x32\xfb\xf3\xd9\x1c\x36\x95\x0b\x80\xdf\x82\x67\x36\x67\x13\x5a\x8f\x5c\x01\x0c\xcc\x23\x80\xf1\x3e\x8e\xbc\x44\x8c\x61\x16\x3c\x42\xcf\x6b\x1b\x47\xd4\xd6\xc2\xae\x99\x32\xa2\xa6\x2d\x77\x8a\xc3\xb5\x30\xa4\x58\x74\xd1\x90\x7d\x38\xbf\xd8\xcb\xbd\x17\xbd\xa5\xc5\x1b\x96\x45\x2e\xb8\xd2\x41\xd5\x4b\x8b\x76\x40\x45\x4c\x2e\x68\x36\x27\x4c\x68\xc8\x47\x85\x07\x6c\x5e\x8f\x18\x64\x4e\x45\x6e\x6e\x18\x94\x47\x80\x01\x9f\xc8\x73\x65\x1b\x5f\x80\x2b\xbf\x07\x9d\x60\xc9\x16\x23\x53\x23\x01\x87\x60\xda\x32\x26\x41\x10\x5a\x64\xbd\xd6\x8b\x4f\x14\xd2\x74\x98\xad\x42\x75\xb1\xb2\x01\x71\x2a\x2c\xe6\x15\xd3\x59\x62\xc9\xf5\x34\xff\x0b\x42\x32\xcc\xbe\xf2\xb1\x6e\x94\xfe\xa2\x31\x07\x1c\x5b\x3a\x74\xdb\x62\xad\xe7\x6b\x23\xa2\xeb\x83\xb5\xf7\x81\x16\x38\xcb\x98\x42\x50\xfe\x01\xe3\x6c\x74\xfb\xf6\x0f\xb8\x91\xd1\xe3\xc9\xe9\xa6\x21\x5d\xe4\x2c\x17\x06\xf7\xd3\x46\xcb\x31\x54\xc9\x76\x19\x5b\x7a\x63\xa7\xdb\x76\x56\x54\x73\x3a\x22\x33\x1a\x30\xb1\xeb\x23\x06\x00\x68\xe5\x14\xf8\x22\x61\x9c\x07\x56\x61\x10\x9e\x35\xf4\x03\x64\xb5\x65\x8c\x05\x2d\x19\x44\x78\xe1\xc4\xa2\x07\x5b\x29\x4a\xa7\xf8\x4c\xb0\x1a\xb5\xb4\x10\x03\x4c\x0a\x7a\xc3\x0a\x3b\x94\xac\x13\x96\xf1\xa5\x8b\xa6\x63\xb5\xc1\x9e\x8a\xd0\xd9\xac\x66\x4a\xf1\x05\xb3\x41\xd4\xfc\x9f\x6d\x31\xbc\x39\x23\x57\x17\xef\x5c\x28\xb9\x22\x86\xb1\xd5\x2c\x26\x91\x1e\x36\x9f\xc6\xd1\x80\x56\x2b\x7b\x4c\x08\xb9\x50\x52\x43\x89\x37\xd3\xbf\x3d\x12\xe5\x4b\x3a\x83\x97\xe9\x18\x62\xc6\x53\xf6\xac\x8d\x02\xc2\x70\xf3\x39\xa3\xb9\x8b\xbb\x35\x2c\x65\x55\x19\x49\x9a\x9c\x9b\x2b\x3a\xb5\x65\xc6\x31\x32\x3b\x6f\x8c\xa8\x42\x7b\x55\x6f\x61\xfb\x38\x67\x44\xd6\x39\xc3\x22\xe6\x53\x70\xe6\xf1\xdd\x06\xf4\x1d\x52\x10\x71\x33\xd2\x0d\xd7\x35\xad\x97\x48\x31\xed\x49\x44\x0f\x67\x70\x26\x96\x57\x87\x5e\x61\x64\x08\xab\x22\x31\x39\xe5\x5c\x4b\x44\x68\x24\x41\xc2\x6e\x5b\x94\x6d\xdd\xb5\x54\x9c\x69\x1a\x80\xff\xb5\x85\xfe\xf8\xcf\x1e\x53\xe3\x9a\x10\x1c\x0f\x44\x86\x75\x64\xe0\xb3\x00\xe8\x6c\x6e\xe9\x7a\xf7\x8a\x12\x82\x92\x20\x8d\xf5\x48\xc3\x66\x23\xb2\xb9\x43\x02\xde\x2b\x9f\xe9\x89\x61\xa0\x75\x43\x8b\x62\x39\x66\x9f\x0c\x29\x31\x97\x18\x68\x28\xa4\xa9\x04\x77\xfe\x46\x28\xa6\x53\xea\xd6\x13\xbc\x7c\x55\x8d\xf9\x26\x14\x39\xc2\x35\x09\x09\x09\xa8\x8e\xb0\x5b\x23\x08\xdc\x34\x1a\x5d\xe0\x46\x9b\x3f\x49\x5b\xe7\x82\xd5\x4b\x3b\x42\xc2\x87\x5b\x80\x33\xd9\x12\xe6\x08\xdc\x41\x9d\xcd\x2f\x3e\x55\x35\x86\x1e\x25\x7e\xbd\x02\x7e\xab\x9d\x61\x96\x26\xc7\x3d\x76\xc1\xc7\x5d\x42\xc0\x70\xe8\x64\x16\x3e\x01\x2c\x76\xf6\xfe\x4d\x0a\xfa\xc2\x96\xc2\x22\x76\x5b\x34\xc3\xd8\x6d\x8f\xb9\x81\xd8\xce\x1e\xd8\x1b\x9b\xe9\xca\xfd\x82\xc9\x89\x5d\x8d\x31\x27\xd5\x51\x72\xcb\x2c\x12\x36\x92\x27\x28\xbb\xec\xcb\x5b\x4c\xa7\x66\x10\xda\x8d\xb1\xea\x6c\x09\xdd\xe2\x48\xa9\x67\xb1\x35\x38\xbb\x89\xa4\xe2\xe9\xb6\x8d\xcd\xd4\xb7\xfa\xce\x6d\x5f\xf2\xc7\xdb\xde\x41\x6c\xb7\x2c\x42\xb5\xb7\xa9\x75\xe0\xcf\x9c\x97\x93\xda\x00\xa6\xcc\x03\x1f\x23\xe7\xc1\x88\x42\x6e\x63\x45\xb4\x4c\x3f\x52\xb2\x8d\xc7\x6c\xb7\xb9\x2d\xde\xc1\x82\xb7\xba\x70\xe1\x1c\xba\xb6\x91\x5b\xb6\x3c\x56\x78\x03\x0c\x06\x9b\xf3\x0a\x6b\x73\x19\xf2\x60\x24\xe0\x2d\xaf\x01\xb6\x6f\x21\x9b\x8d\x1b\x18\x71\xdc\xa5\x18\x91\xf7\x52\x9b\xff\x5d\x7c\xe2\xca\x72\x7b\x6f\x24\x53\xef\xa5\x86\x27\x4f\x72\x42\xb8\xd0\xa7\x3c\x1f\xab\x93\xe2\xe0\xdc\x09\xe8\x1c\x04\x07\x58\x90\x3b\x07\x97\x46\xc4\x9f\x25\x57\xe4\x12\x32\x7b\xe3\x96\x6e\x39\x34\xf8\xef\xba\x34\x29\x66\x60\x27\x63\x43\x2a\x1d\xeb\x49\xbf\x3e\xb2\x3d\x3f\x59\x77\x8e\x6f\xe7\x93\xb0\x13\x00\xdd\x18\xfe\x02\x19\xde\xaa\x82\x66\x2c\x77\xe9\xaa\xa8\xd9\x29\xaa\xd9\xac\xd7\xc7\xfc\xbe\x56\xb2\x7a\x06\xaa\xbc\x2c\x2a\x6d\xe2\x86\x05\x6c\x4d\x88\xb1\x6d\x49\x8e\xc3\xc1\xb7\x06\xff\x47\x46\x28\xed\xb1\x33\xe0\xb1\xbe\x32\xa8\xfd\x71\xbc\xda\x16\xf7\x32\x18\x1a\xb9\x92\x92\x56\xe6\x4e\xfe\xb7\x61\x3e\x00\x54\xff\x87\x54\x94\xd7\x6a\x42\xce\x5c\x1a\xad\xf0\x37\x2b\x3d\x06\xdd\x6c\x31\x85\x0a\x3c\x82\x7f\x6c\xf8\x82\x16\x36\x29\x07\x15\x84\x61\x9a\x31\x33\x9b\x55\x26\x74\x44\xee\xe6\x52\x21\x27\xe3\xc3\x6f\x8e\x6e\xd9\xf2\x68\x94\xa4\xc1\x70\x2d\xbc\xf1\x47\x97\xe2\xa8\xd5\x16\x77\x6e\xab\xe7\xd1\xc0\xab\xf6\x08\x7e\x3b\xda\x3d\x9f\xbb\x15\x67\xb5\x6d\x51\xe7\x4d\x13\x48\xbe\x62\x8f\x89\x87\x69\x5b\x7c\xa4\x17\xb6\x5d\x88\xc9\x0e\xa6\x37\x28\xce\x6e\x96\x2e\xa1\x9c\x15\x54\xd7\xe5\xd8\xa4\x21\x41\xe6\x0d\xe4\x63\x03\x62\x1d\x15\x41\xba\x48\x99\x78\x50\x2e\x3b\xce\xa1\x36\xd9\xd0\xd3\xba\x61\x23\x92\x4b\x71\xac\xad\xba\x2b\x4c\xba\xb8\x9a\xda\x2a\xdf\x70\x0e\x27\xea\x34\x69\x50\x5a\x33\xc8\xb5\xe5\x92\x48\x5a\x0d\x03\x26\x60\x04\x4d\xa7\x76\x1e\x22\xe6\xcf\x4d\x43\xc6\x07\xe4\xd9\x21\x6d\x58\x9e\x90\x80\xbb\x20\xad\x77\x38\x6c\x7b\xe8\xc1\xe0\x5d\xed\x69\xd2\x78\x0f\x01\x11\x60\xf1\x36\x4c\x10\xd5\x22\xff\x64\xb5\x4c\x1a\x61\x83\xea\x28\x1d\x3a\xe3\x2c\xfa\x6d\x8b\x0b\x3c\x69\x5b\x07\x34\x3f\x00\x7b\xbf\xb0\x86\x4a\xc8\xdb\x19\xe4\x25\xa9\x25\x1e\x0d\xf8\x3c\xc0\x0f\x37\xb0\xaa\xbd\x5f\xb9\xf6\xa8\x9e\xa9\x02\x30\xd0\xda\xa7\x51\xab\x1e\xad\xde\xc7\x39\x6b\x35\xf2\x72\x6a\x8b\xa4\xa3\xd1\xe1\xb1\xa0\xe8\x73\x6d\x34\x02\x13\x57\xa0\x55\x7c\x1b\xf5\xf8\x16\xc7\x8a\xfe\x16\xef\x68\xb5\x95\x15\xcc\x7f\xdd\xa9\x86\x4f\x6f\x64\xa3\x5d\xba\x10\xfb\x3b\xd4\x1c\xd6\xd2\xd9\x1f\xf7\xa7\x3a\xdf\x46\xc7\x91\xcc\xc8\x3f\x06\xa4\xd1\x13\xa6\xeb\x87\x35\x22\x8c\x66\x73\xc3\x01\x8e\xd1\xcd\xc2\x70\xa9\x8e\x1d\x7d\x63\xb6\x0e\x19\x43\xb9\x4a\x62\xd2\x80\xcf\x9f\x86\x03\xb9\xc0\x3f\xc7\x99\x8d\x9c\xcb\xa5\xb2\xae\x6b\x96\x39\x15\x6d\xe8\x42\xd2\x98\x4e\x3d\xe7\x52\x23\x5b\xd5\x0f\xac\x12\x64\xd4\x95\xca\x52\x46\xf6\x60\xb9\xf9\xcc\x5f\x8c\xa4\xf1\x36\xac\xa8\xcd\xa6\x63\xb0\xa9\xf5\x2b\x6a\xc4\xda\x48\x86\xe0\x25\x8f\x86\x59\x36\xcd\x42\xa8\x53\x6d\x05\xd9\x7b\x20\x57\x34\xf8\x9b\xb7\x29\x2e\xed\xa9\xfa\xc3\x48\x13\xbf\x83\x23\x52\xcc\xa7\x7a\x66\x75\x2d\x6b\xb3\x26\xa6\x14\xe1\xb0\xcb\x25\xad\x6f\x59\xee\xb9\xa4\x09\xb9\x32\x8b\x77\x32\x7a\xd2\x98\xb5\xa3\x46\x2e\x65\x74\x58\xa4\xcc\x4c\xe8\x78\x32\x39\xb6\x15\x14\xd6\x4b\x96\x25\x63\xaf\x54\x81\x7c\x0b\x31\xbc\x73\x7f\xdf\xd1\x4a\xa1\x3a\xc2\xb0\x37\xa0\x8e\x94\x50\x2b\x50\xcf\x9d\x4d\x91\x26\x84\xd8\xac\x2e\x67\x0b\x01\x68\x5b\xb5\xf2\x36\x2a\xe5\x24\xc3\x21\xb6\xed\xd5\xc8\x5b\xa9\x90\xef\x53\x1f\xdb\x93\xb2\x37\x7e\x5b\xcd\xff\x56\x1a\x98\x32\xca\x25\x70\xb5\x3d\x5e\xed\x08\xae\x5d\x5c\x91\xaf\x9d\xec\x13\xe7\x30\xa8\xe7\xb6\x12\xf6\x36\x7a\xb2\x27\xf1\x18\x5c\x6d\x4f\xe7\x41\xb8\xda\x2e\xa7\x98\x4f\x7c\x63\x41\xc4\xd0\xa5\xd3\xb3\x75\x91\xd9\x77\x57\xdb\x21\x5c\x0b\x57\xdb\x9e\x5d\x0d\x57\x5b\x9a\xeb\xe1\x6a\x4b\x71\x45\x5c\x6d\xa9\xd2\x19\xb6\xc7\x5f\xe0\xb0\x1a\x5c\xdd\x11\xf2\x2c\x6b\x07\x2c\x17\x88\xba\x55\x80\xe4\xb6\xba\xb7\x96\x50\xe3\xd5\xa5\x37\x4a\x16\x8d\x8e\x2f\x39\x77\x5f\x77\x21\xdd\x87\x89\x3b\xcd\x66\x2a\xb1\x5f\xed\x38\xe0\x1b\x80\x6b\x43\x72\xbc\x5d\xaf\xbb\xd0\xfc\x6d\xaf\x05\x3f\xa4\xea\xef\x31\x09\x9f\xb0\x1d\x3a\xed\x13\xb6\x03\x27\x7f\x72\x83\x3e\x26\x05\x14\xb6\xa7\x4d\x04\x85\x6d\x4b\xf0\x4e\x49\x0a\xe5\xda\xa3\xb5\xac\x3e\x89\x39\x52\xcc\xa5\xcf\x2c\xdc\x11\x82\x20\x51\x93\x56\x28\x8d\x39\x3b\xa2\xad\xde\xb2\x67\x55\xdd\xe3\xd5\xfd\x2e\x46\xe5\xec\xea\x72\x2b\x2d\x4a\xf0\xfd\x3d\x7a\x94\xf0\x8d\x9f\xb1\x26\xe5\x12\x55\x23\xa1\x4f\xd6\x9b\x76\xe5\x36\xce\x32\x91\xb5\x79\x1a\x99\x72\x6d\xda\x6f\x0d\x5d\x0f\x73\x95\x06\xe7\xac\xa5\x0d\xe9\x69\x39\x00\x4b\x65\x5d\x99\x1e\xf4\xe5\x4d\x71\x02\x27\x4f\x23\x7f\x1e\x50\x96\x84\xfd\x88\xca\x23\xb9\xda\x3a\x27\x75\xdc\x56\xd2\x40\x65\x33\x2a\xbe\x02\x6d\x5b\x25\xf3\xd7\x68\x24\xa5\x42\x48\xac\x14\xa5\x46\x68\xa8\x50\x23\x6b\x86\x09\x52\x74\x88\x9c\x34\x3c\x47\x0f\x68\x9f\x5d\xe0\xf8\x73\x72\x4c\x83\xe5\x5f\xa5\x1e\x25\x79\xb4\x87\x19\xad\xf8\xb7\xac\x8e\xcb\x62\xbf\xa9\x75\x0e\xd6\xf6\xe4\x4e\x51\x65\x73\x56\x52\xf8\xe7\x5b\xb7\x3c\x83\x6a\xac\x7f\x3d\xa8\xe5\x58\x5d\x1a\xd6\x63\xd4\x89\x32\x3d\x5a\xbc\x4a\xf2\x8f\x6d\xdb\x23\x5d\x3c\xfc\x29\xec\x60\x33\xae\x3a\x22\x86\x01\x6e\xd0\x14\x80\x71\xc5\x65\x9a\xf1\x6a\x4b\x43\x65\x16\xb8\x7b\x4f\xb0\xf0\xdd\x98\xdf\xb1\x3d\x95\x9e\x66\x5b\xfd\xcc\xc8\xf3\x3e\x5d\x6d\xcb\x16\x53\x18\xf4\x33\x83\x7e\xe6\x7f\xb5\x7e\x26\x20\xec\x0e\xd7\x6f\x50\xbb\x84\x19\x51\x9d\xee\xa5\xad\x7b\x30\x41\xed\xa7\x53\xa3\x38\x1d\x4a\x5b\x62\x10\xcd\x1f\xc7\x93\xc9\x31\x1a\x40\x26\x5e\x5d\xda\xe8\xe9\xf8\x4f\x84\x89\x4c\xe6\xa6\x1f\x2c\x10\x58\x2b\x0d\xac\x65\x2b\xb1\x87\x73\x29\xdd\x58\xa1\x09\x05\xfa\xde\x96\x7b\xd8\x0a\x05\xbb\xa8\xfc\xb7\xbb\x61\xb0\xb6\x42\xa0\x2d\x2b\xe6\xeb\x32\xd9\x2d\xf3\xa5\xaa\x2c\x4f\xd6\xe6\x10\x28\x78\xc9\xad\x77\xb2\xc1\x2e\x4c\xe9\x74\xf7\x3d\x42\x4e\xb0\x9b\x49\x56\x35\x23\xdb\xe5\xa4\x64\xa5\xac\x97\x23\xdf\xad\xf9\xb1\x33\x8e\x7d\xe3\x14\x98\xbe\xac\xa9\x6b\x26\x74\xb1\x8c\x4d\x2e\xb5\xa9\x3d\x21\xf7\xe7\x76\xf4\xc0\xcc\x9f\x3f\xd8\x54\xff\x92\xb6\x75\xef\x7f\x5b\x87\x10\x14\x72\x7e\x57\x80\xc6\xd8\x34\x76\xa3\x56\x3f\x61\x9e\x32\xb1\x20\x0b\x5a\xab\xf4\xfb\x46\x1e\xcf\xef\xe5\x7c\xc1\xd5\x4e\x42\x0e\xae\x2d\xf1\x43\x3d\xb3\x6c\x74\xd5\x68\x8b\x8e\xdd\x35\x72\x15\xc9\xfc\xf5\x59\x61\x7a\x5f\xc5\xab\x88\xc2\x56\x51\xad\x59\x2d\x5e\x93\xff\x3c\xf9\x8f\xdf\xfc\x34\x3e\xfd\xeb\xc9\xc9\x77\x2f\xc7\xff\xfa\xfd\x6f\x4e\xfe\x63\x02\xff\xf8\xf5\xe9\x5f\x4f\x7f\x72\x7f\xfc\xe6\xf4\xf4\xe4\xe4\xbb\x2f\xdf\xfd\xed\xe3\xd5\xc5\xf7\xfc\xf4\xa7\xef\x44\x53\xde\xe2\x5f\x3f\x9d\x7c\xc7\x2e\xbe\x8f\xec\xe4\xf4\xf4\xaf\xbf\xda\x6a\xba\x54\x2c\xbf\xde\x02\xbf\x61\x1b\x3f\x92\x3e\x76\x7b\xd9\x95\x27\x38\x17\x7a\x2c\xeb\x31\x76\xf7\x1a\x5c\x16\xb7\xe8\xd4\x81\xc5\x2e\xee\x61\x4b\x87\xdb\x1a\x7b\x4e\xf8\x78\x82\x8b\xb6\x2b\xf9\x62\x07\xc6\x82\x4a\xe6\x41\x60\xf4\xbe\xf3\x10\xd8\x80\x7c\xe5\xe3\xff\x6b\x50\x66\x88\x59\x50\x40\xd3\x7a\x12\x92\x93\xaa\xe6\x0b\xaa\xdb\xf0\xba\x20\xd2\x3a\x7a\xc0\x6c\x4e\xb9\x38\x6d\x83\xbb\x2a\x99\x03\x7b\xda\x28\xe6\xb3\xf4\x1b\x12\xff\xf1\xab\x6b\x92\x15\x1c\xdc\xe3\x6b\x9f\x62\x38\x7a\x18\x17\x5f\x3f\x63\x82\xd5\x18\x60\x4e\x56\xa7\x0f\xf5\x92\xb8\x46\xc0\x13\x79\x6f\xda\xdd\x60\xd7\x3a\x67\xf4\x01\x09\xbe\x4b\xdd\x86\x3e\xb7\xe8\x75\x08\xe1\xc6\x36\x8d\xa8\xf5\x43\xa4\x55\x55\xcb\x05\x4b\xf3\x9a\xb2\x3c\x05\x96\x30\x51\x0a\x1c\xf6\xc3\xed\xc7\x6d\x1d\xf9\x65\x83\x17\x68\x27\x16\x32\xfe\x80\x56\x7b\x25\xf7\xe5\x0e\xf8\x68\x1f\xe6\x92\xa9\x80\x45\x6d\x84\xe6\x0f\x57\x68\xbc\x67\x38\x45\xe6\x74\x61\x64\x4f\x26\x70\x91\x48\x95\xc1\x0b\xae\x7b\x2b\x02\x8f\xae\xc8\x7c\x56\xae\x59\x5c\xc3\x05\x58\x16\x20\xab\x46\x3a\x50\x59\x29\x71\x66\xf6\xa6\x5e\x82\x3e\x56\x12\xb8\x38\x78\xd2\xe1\x16\x5a\x30\xc7\xc2\xf2\x22\x47\xef\xcd\xe8\x11\x6d\x22\x0d\x0b\x3a\x2e\xbb\x2f\xdb\x0c\x80\x93\x6b\x4d\x75\xa3\x26\x5f\x98\x99\x7d\x60\xd3\x9a\xa9\xf9\x59\x3c\xa3\x68\xa6\xa8\x34\x2d\xab\x2d\x76\xc4\xdc\x60\xf4\x3c\xf6\xf1\x06\xa8\xba\xf0\x4b\xf6\xe5\xef\x3d\x5a\xb1\x19\x41\x52\x34\x8a\xa0\xa5\x1a\x21\x42\xa8\xa8\xb9\xd7\x08\x91\x1b\xc6\xb9\x65\x4b\x90\xf0\xb6\x04\xfd\x73\x03\xf9\xd0\x01\x26\xac\x49\xd8\x93\x8f\x9d\x55\x3a\xe4\x89\x01\xd1\xed\xd6\x18\x10\x84\x9c\x1b\xc0\x81\x4d\x48\x20\x0c\x5e\x5d\xbc\x8b\x1e\xcc\xe6\x30\xb2\x19\xa0\x03\x04\x77\x62\xfa\xff\xf2\xfc\xfa\x97\x7f\xb2\x43\x9c\x86\x5a\x81\xd2\xda\x11\x52\x87\xe2\x36\x53\xc7\x2a\x94\x23\xa2\xb0\x97\xb6\x0b\xb4\x6d\x65\x94\x78\xa7\x46\xfc\xd4\xba\x60\xd6\x4c\x37\x35\x08\xd5\xbc\xde\x34\xa8\x20\x05\xa3\xd3\x31\xd0\x2e\xa9\x31\x21\xc7\x69\xc2\x79\x5d\x81\x89\x3c\xb8\x5c\xeb\x87\x87\x3b\x38\x32\xe7\x97\x31\xb2\x94\x8d\x8d\x45\xc6\xda\x51\xc4\x88\xf3\xf1\x40\x46\x05\x64\x2e\x34\x94\x07\xd9\x02\xb3\x37\x18\x4c\xb1\x94\x0d\x10\xc2\x00\x78\x37\x02\x65\xfc\x4e\xae\xcd\x15\xf4\x09\x25\xbd\x65\x44\xdf\xc9\xee\x35\x82\x69\xf9\xf0\x54\x65\xc4\x6a\x2e\xb2\xb8\x62\xd1\xd8\xd0\x28\xdf\x39\xa4\xda\x1a\x47\x46\xd6\x05\xb5\x72\x15\xfd\x5b\x0e\x60\x85\x2c\x9b\xd3\xdc\x8a\x5a\x99\xdd\x83\x9d\x6d\xdd\x51\xeb\x9a\xa9\x4a\x0a\xd0\xb1\x02\x1d\x01\x15\xd8\x84\x90\x7f\x5f\xd9\x97\x84\x25\x16\x05\x11\x0c\xd5\xb6\xd9\x9c\x65\xb7\x36\x07\x2c\x57\x46\x5a\xc5\x10\xb5\x91\x55\x04\x8c\x61\x3a\x40\x10\xcd\x52\x97\x49\xce\x09\x99\x14\x36\x7b\x6f\x22\xf2\x09\x19\x10\x57\xa8\x5b\x91\x6c\x2e\xa5\xb2\x3c\x41\x57\xec\x0b\xf7\x90\xc7\xd3\x0b\xe4\x43\xfe\x0f\xcc\xb3\x29\x74\x78\xe7\x79\x59\xa1\x03\x10\xec\xed\xb1\x22\xb9\xcc\x1a\xff\xb7\xd9\xb9\x82\xd1\x5a\x90\xb9\xbc\x23\x3a\x3e\x6e\xc7\x5c\x8d\x95\x09\x5b\xcf\x66\x95\x10\xdf\x7e\xa0\xd4\x3b\xb7\x6c\xf9\xb1\x3f\xfb\x6f\xf8\x45\x1b\x49\xb3\x47\x63\xfc\x26\x74\x72\x28\xbf\xa4\xbf\xfb\xd8\xa4\x75\x34\x0e\xc8\xc0\xe0\x07\x50\xcb\x5a\x57\xb2\x15\x2e\x2f\xe1\x1e\x10\xf0\xca\x31\x1c\x73\x7b\xc7\x15\x51\x73\xd9\x14\xc0\xf8\x6f\xe4\x43\x26\x84\xfc\x7d\xce\x84\x25\x05\x16\x09\xa7\x39\x13\xdd\x87\xb0\xd7\x11\xb1\xc1\x21\xaa\x45\x22\x1e\x1d\xa6\x7a\x6b\x3b\x94\xd9\xe5\x3a\x6b\x16\xe0\x8f\x11\xb9\x61\x19\x35\xab\x5e\xc5\xc1\x12\x11\x66\x6a\x00\x07\x26\x19\x2d\x79\x3e\x76\xe8\x7d\xef\x61\x66\x9b\xce\xeb\x09\xe0\x76\x8d\x35\xd8\x03\xdc\x46\x32\x90\xdd\xa4\x3a\x65\x53\x68\x5e\x15\x98\x28\x0e\xe2\x50\x13\x2d\x65\x1d\xfe\xd3\x46\xb2\xc2\x98\x57\x1f\x2e\xbf\x3d\xfb\x78\x41\xbe\xbc\xf8\x77\x7c\x3c\x0a\x3d\x51\xa8\xe3\x32\x2d\x19\x4f\x1a\xf3\x96\x2d\xb7\xd8\x9b\x96\x7d\xc5\x75\x02\xb4\x9f\x5f\x7c\xf8\x78\xf9\xf6\xf2\xdc\xcc\x14\x1f\x8f\x56\x1d\x66\x90\x3d\x4d\x1a\x6e\x1d\x4f\xf9\xb8\x4b\xc7\xde\xc2\xdd\xc3\x1c\x46\x4b\x4c\xc0\x55\xb2\x9c\x1b\xd2\x94\xc2\x84\x9a\xf6\x8d\xea\xea\x5d\x5a\x40\x27\x90\xd0\x1e\x50\xc8\x15\x14\x83\x5b\xe5\x3e\x91\xa3\x73\xf0\x91\x86\x3f\x80\x07\x75\x78\x80\x6a\xc3\x6f\xd7\x9c\x2d\x50\xc5\xe0\x71\xc8\x26\xa5\x0f\x6e\x89\x67\x5d\x53\x7d\x7c\xfe\x61\x0d\x9f\x25\x6a\x60\xba\x02\xdd\x46\x26\xbb\xc3\x7d\xa5\xad\xd2\x27\x0f\x28\x96\xab\x18\x77\x0d\x7b\xde\x51\xe5\x64\x19\xab\xfb\x00\x40\x8d\x1f\x6d\x2b\x0c\x67\xe9\xcd\xe1\x91\x1a\x9c\xec\x40\x7e\x07\xf2\xfb\x40\xb3\xdc\xec\xa1\x80\xd3\xa0\x79\x70\xf3\x96\x53\x33\x34\x44\xbe\x76\xb4\x6f\x4e\xaf\xeb\x0b\x70\x40\xa5\xd1\xa4\x31\x30\xaf\x95\x4f\x7f\xc2\xc8\xd1\x87\xeb\xb3\xdf\xbd\xfc\xe3\x6f\x8f\x46\xf0\xcf\xdf\xbf\xfc\xd7\x3f\x98\x7f\x5e\x9c\xbf\xb9\x3e\xbb\xfa\xed\xbf\x04\x7f\xfc\xee\x4f\xbf\x3f\x4a\x0b\xd1\xb4\x1f\xfe\xcb\x6f\x5f\xd9\xd4\x2b\x47\x17\x6f\x7e\xfb\x2f\xff\xf2\xea\x5f\xb7\x48\xb3\x98\x78\x74\x25\xfd\x74\xf1\xa9\xe2\x58\x26\xe4\x9a\x19\x21\xf5\x60\x71\xcd\x9b\xc6\x76\xda\xaa\x92\x7e\xe2\x65\x53\xfa\xc2\xa6\xe8\x00\xa5\xb5\x55\xfb\xa6\x5e\x8a\xe0\xfe\x25\x02\x82\x57\x62\xca\x0a\xcd\xa3\xdc\xe6\x28\x24\x0b\x56\xdf\x50\x0d\x85\xd7\x2c\x21\xd8\xa8\x78\x55\x29\x62\xb3\x69\xad\x55\xc2\xeb\x0e\xda\xf4\xe4\x89\xb3\xbf\x9c\x12\x89\xdb\x36\x82\xda\x37\x63\x5a\x71\x5b\xc1\x11\x6e\x8a\x62\xda\x1a\x39\xfe\xf4\x87\xdf\xbf\x7c\x79\xf2\xdb\xdf\x93\xb9\x6c\x6a\x75\x3a\x59\x79\x3d\x69\x54\xab\x99\x03\x12\x6e\xaf\x90\x9a\xcb\x5a\xbb\xba\xc8\xbf\xfb\xc3\xcb\x97\xe4\xe4\x15\x0c\x75\x6a\xb5\x9b\xee\xc0\x21\xcc\x83\xde\x24\xf2\x29\x78\x22\x5c\x91\x3f\xfe\xe9\x0f\xbf\xfd\xbd\xe9\xfd\x5f\x5f\x91\x9c\x2e\x93\xd9\xac\x8f\xf7\xe9\x29\x2c\x60\x1a\x1e\x8f\x01\x72\x06\x1e\x60\x45\x9f\x65\xe3\x4e\xd2\x88\x84\x07\xf1\x5f\xdb\x4d\xfa\x35\xee\xd2\xbb\x0d\xd7\x03\x03\x6b\x84\x5c\xdf\xcf\xa4\x21\x95\xbd\x6c\x9d\x33\x40\x1d\x95\xd2\x35\xe5\x18\x76\xcf\x04\x14\x42\x01\x9d\x6d\x17\x1a\xd2\x84\x87\x1f\x3a\xe1\x2e\x3f\x74\x15\xb8\x82\x61\x39\x51\xb3\x99\x6b\xc9\x99\xc1\xad\x3f\xaa\xb2\xf1\xca\x96\x62\xa9\x36\xd8\x1c\x07\xd2\xe9\xa8\x34\xdd\x4c\xbf\x9d\x03\xdb\x0e\x92\xa4\x58\x2c\x75\xac\x3c\xf6\xc8\xc9\xf9\xf5\x87\x36\x55\x88\xad\xcc\xea\x98\x56\x9f\xf9\x64\xaf\x04\x06\x6b\xb4\x6c\x65\xa5\xc6\x4f\xef\x09\x6e\xb1\x3f\xfe\x8c\xe3\x5a\x3e\x9b\x0c\x21\xd7\x78\x14\x43\x7a\x90\x27\x4f\x0f\x82\x27\x31\xe4\x06\x69\x17\x37\xe4\x06\x81\x36\xe4\x06\x09\xdb\x90\x1b\xa4\x33\xee\x90\x1b\x64\x88\x3d\x19\x62\x4f\x9e\x3e\xf6\x64\xc8\x0d\x32\xe4\x06\xd9\xdc\x86\xdc\x20\xfd\x6d\xc8\x0d\xf2\xbf\x2d\x37\x08\x82\xd8\xa6\x0c\x21\x56\x22\x6d\xd3\x83\x7c\x76\xd9\x41\x94\x39\xe4\x8c\x9d\x65\x99\x6c\x84\xfe\x28\x6f\x59\x74\x74\xfb\x8a\x0e\x65\xad\x1f\x73\x29\xef\xd3\xa9\xac\xbf\x7c\x30\x05\xcb\x33\xac\x5e\x46\x9b\x9c\x33\x91\x16\xcf\xf2\x18\xd4\xeb\xc6\x73\xf4\xdc\xf0\x31\x22\x67\x79\xfb\x83\xc5\xcb\xda\x1c\xcd\x84\x9c\x91\x9a\x65\xbc\xe2\xb6\x44\x00\xc5\xe7\x69\xf6\x17\x73\x2f\x6c\x21\xe8\xa5\xb9\x2d\xac\x98\x7a\xf4\xe8\x0b\x44\xd7\x81\xfe\xc1\x52\xea\x95\x29\xa5\x89\xb1\x66\x9a\xc8\x07\x02\xd7\x77\xc7\x15\x73\xb6\x5f\x6b\x32\x08\x56\xf9\x31\x1c\x2d\x0c\x37\x4b\x1d\x36\x58\x8e\xdd\xc7\xad\x94\xd9\x5b\xe1\x4a\xf6\x54\x06\xb6\xb5\x81\x5b\x66\x11\x4c\x53\x58\x5b\xc5\x57\x92\x5c\xd0\x82\xe7\x86\xfa\xba\x04\x18\x88\x12\xd2\xc0\x18\xf1\x87\x87\x52\xd5\x9e\x26\x06\xb7\xd0\x6c\xce\x54\x30\x33\x94\x78\x6e\xad\x95\x2d\x31\x60\xc3\xb4\xaa\x68\x66\x5c\xa0\x80\x04\xfd\x3b\x7e\xa3\x0d\xb9\xb0\x0b\x59\x9d\xdc\xc7\x60\x60\xf3\x79\x9a\x09\x05\x18\xcc\x8d\x11\x1e\xb8\x5a\x3e\x0d\xff\x50\x44\x16\xb9\x33\x49\xfc\xe9\xa5\x91\xa9\x33\xbc\xba\x89\x8a\x5e\x85\xd1\x22\x5a\x92\xc2\x70\xfb\x86\xcc\xdd\x3f\x90\xb7\x7d\xbc\x09\xae\x0e\xda\x7c\x92\xfd\x18\x7c\x9e\x09\x4d\x0a\x46\x95\x26\xaf\x5e\x92\x92\x8b\x46\x6f\x93\x1b\xff\x51\xa6\x95\x3f\xfc\x3e\xfa\xbb\x47\xe5\xd4\x4f\xbc\x6d\xa1\x34\x06\xff\xf6\x22\x99\xd5\x1b\x97\x00\x7c\x95\xe4\x42\xaf\x0a\x68\x81\xc3\x53\x3a\x36\x05\xcd\xf4\xde\xb0\xd8\xd6\x62\xcc\x8f\x8d\xbc\x59\xf6\x05\x29\xa6\x6d\xb8\xed\xb2\x5b\xdf\xec\xff\xd9\x87\xb8\xbd\x12\x49\xd4\xdc\xb0\xe6\xa0\xc7\x50\x73\x5a\x33\x5b\x39\xf9\x58\x79\x7b\x62\xdf\x7e\xbd\x31\x43\x40\xd0\xd0\x6b\x3f\x02\x57\x24\xf7\x8f\xbd\x2a\x83\x8b\xb1\xae\x19\xf3\x93\x03\x29\x03\x74\xf4\xce\x0e\x19\x19\xd5\x1f\xcd\x38\xc5\xb2\x4b\x63\x52\xb3\x19\x57\xba\xee\x53\xe3\x8e\x63\x10\x6f\x3c\x17\x35\xab\x65\x13\x51\x1e\x20\xfd\xb2\x41\xc7\x4e\xa1\xe1\x0c\x4b\xb6\x12\x76\x8c\xcb\x9f\x45\x83\xf6\x74\xa0\xb7\xde\xaf\x12\x2e\x4b\xcd\x68\xfe\xb5\x28\x22\xb4\xd2\xe9\x4b\x77\x7d\xa3\xac\x0a\xd4\x0e\xac\xf3\x00\x82\x0e\x40\x5d\x19\x76\x10\x83\xe1\x3e\xb0\x1c\x39\x3a\xf3\xf9\x18\xd2\x5f\x04\xda\xdc\x18\x9c\x11\x52\x8e\x29\x2d\x54\x74\x45\xfb\x38\xa9\xc9\x01\xe8\x7e\xb6\x0c\xfb\xee\xa2\x0b\xeb\x25\x2d\xeb\xd6\x2b\xda\x6d\xdf\x07\xf7\x81\x65\x18\x62\xa4\xe8\x96\x39\xa6\x81\xdd\x87\x2a\xc0\x40\xaf\xcd\xb5\x47\xc3\xeb\x89\x1f\x2d\x0c\x95\x73\x8e\xad\xf6\x94\x32\x59\x96\x34\xaa\xe0\x0f\x5a\x02\x29\x04\x67\x2b\x1b\x35\x21\x74\x4d\x8b\x76\xd5\x41\xd2\x8a\x5d\x02\xb9\x66\x82\x8a\x08\xa3\x7e\xfa\x79\x61\xcf\x44\xde\x79\xa7\xec\x19\x5f\x30\xb1\x0a\xdd\x56\x08\xf9\x82\x66\xb7\x2c\x2a\x7e\xf3\x1b\xe5\xf6\x37\x5f\x0a\x6a\x63\xea\x0c\x3a\x5b\x70\x73\x0d\x58\xbe\x32\x82\x1a\xb5\xfe\x44\x50\x43\x19\x43\x16\x91\xd1\xdc\xe5\x56\x36\x8a\x45\x24\xef\x48\xdf\x48\xd3\xef\xe3\xb1\xa4\x42\xfb\x4f\xcd\x17\x19\x73\x9c\xb3\xe9\x79\x97\x3b\x80\xb3\x4b\xdc\x03\x07\x07\xc1\x7d\xb3\xbe\xe9\xd6\x85\x01\x13\x16\x14\x06\xe7\x2d\x5d\x62\xa6\x55\x28\xb2\x85\xff\x63\xb1\x59\xef\x6a\xea\x9b\x1e\x72\x9c\x76\x8c\xf5\x4d\xde\x45\x5b\x1f\x68\x2e\x15\xf9\x02\x22\x2f\xde\x30\x10\x67\xf6\xc7\xf0\x7c\xf8\xe2\x4d\x0f\xb3\x63\xe6\xf7\x9c\x18\x1d\x5e\xd2\x59\x1f\xeb\x3c\x26\xa5\x14\x5c\xcb\xfa\x61\x7c\x18\xcf\xe7\x4c\x55\x9c\xdb\x73\xfa\x0d\xc6\x9e\x9d\x34\xd1\x26\x56\xf0\x7e\xcf\x81\x99\x10\x0e\x7d\x29\x1b\x72\x47\xb1\x78\x24\xc0\x45\x0c\x6d\xff\xc8\xab\xd7\xe4\x42\xa8\xa6\x0e\x22\x6e\x57\x07\x33\x48\xd0\x1d\xab\x43\x85\x00\x6c\x58\x35\x12\x0a\xbc\x61\xd2\x87\x88\x11\x2f\x3e\xd1\xb2\x2a\x98\x7a\x4d\x8e\xd8\x27\xfd\xfb\xa3\x11\x39\xfa\x34\x55\xe6\x7f\x42\x4f\xd5\xd1\x84\x5c\x96\x55\xc1\x33\xae\x8b\x25\xe1\x62\xca\xea\xda\x6b\xf5\xf1\x83\x15\x27\xa7\x98\x31\x13\x75\xec\x4a\xcb\x9a\xce\xd8\x0b\x4b\x0b\x7e\x59\xdf\xf4\xd3\x98\x04\x8c\x07\x80\xba\x0f\x90\x81\x8e\xbd\x82\x07\xb0\x05\x3e\x8a\xad\x6d\xb6\x61\x9f\x98\x3d\xae\xc9\xed\x9f\x60\xa7\xec\x9e\xbc\xa8\x6f\xf2\x17\x1f\x2e\xce\xde\xbc\xbb\x98\x94\xf9\x2f\xe7\xf2\x6e\xac\xe5\xb8\x51\x6c\x1c\xe1\xea\x9c\xb0\x57\xb7\x6c\x09\x39\x89\xf6\xb0\x5b\xb6\xeb\x8e\xbc\xae\x25\x98\x0b\xe0\xb9\x61\x9e\x3e\x7c\xf1\xe6\x1b\x15\xa7\x1f\x0c\x04\x8b\x17\x4c\x67\x2f\x32\x56\xcd\x5f\xd8\x31\x3e\xcf\xbd\x0f\x0c\x3c\x6b\x2b\xea\xf9\xd4\x61\xd9\x7d\x9c\x9b\xeb\x1b\xa9\x7f\x26\x8b\x02\xfd\xe2\x0d\x4e\x3c\x67\xd5\xdc\xbf\xf0\xec\x76\x3d\xce\x11\x2d\xda\xfd\xec\x30\x3a\x1c\x02\x39\xa7\x64\x84\xc1\x2e\xfd\x28\x4d\xbf\x5d\x7c\x05\x4f\x62\xd1\x55\x70\xe5\xea\x9b\x6d\x09\xc1\xf3\xb9\x64\xfd\x64\xe6\xc9\xb4\x0b\x1f\xdc\x8f\x8a\x69\xa0\xf7\x5c\x10\xcc\x51\xff\xce\x70\x1a\xfb\x52\x23\x1c\xf8\xc0\xe2\xf4\x15\xe8\x7a\x1e\x95\xe3\x34\xfd\x14\x7c\xe7\xc0\x55\x07\xbe\x18\xb4\xd1\x73\x26\xb4\x0b\x4f\xb4\xfe\xef\x21\x8d\x22\x97\x53\x94\x68\xf3\x28\x03\xb7\x5c\xb0\xba\xe6\x39\x53\x24\x81\x48\x85\xda\x33\x5e\x3c\xbb\x03\x8c\xb4\x38\xa7\x19\x83\xe3\xbd\x6f\xb6\x33\x1d\x3c\xc6\xe3\xe6\xd0\xbe\x36\x07\xf6\xb2\x79\x9c\x7f\xcd\xd3\x7a\xd6\x24\xdb\x89\x53\xbc\x69\x1e\xe3\x61\xb2\x57\x95\x53\x87\x98\xc3\x93\x2d\x88\x39\xcd\x4b\x1e\x15\xb2\xfc\xac\xc9\x39\xac\xe2\x81\xd7\x55\x46\x0b\x76\xf9\xf5\x2e\x55\x46\xb6\xcb\xae\xda\xe8\xda\x3e\xac\x58\xed\x72\x35\x38\x8d\xa0\xd6\x34\x9b\x5b\xd5\x8e\xb3\x15\x48\x01\xa1\x64\x08\x5b\x44\xc8\xbc\xdf\xb8\x1b\xea\x8d\xdc\x68\x0f\xeb\x8e\xdc\x44\x9f\x93\xfe\x68\x46\x35\xbb\xeb\xe5\xcf\xc7\x2d\x89\xee\x7f\x13\x94\x22\x9f\xb9\xa6\x29\x45\x9b\xe4\x5d\xfb\xd7\x7a\xd9\xa5\xfe\x68\x72\x8f\xe6\x28\x0d\xc9\xc0\xb7\x3b\xd3\xfd\x62\xf3\x77\xff\xd3\xb4\x8f\x48\x58\x68\x4b\x3c\x4f\xfb\x95\x3b\x2b\xd8\x44\x1b\xd7\xe9\x58\x08\x77\x01\xcf\xae\x2e\xc9\xdf\xf0\xf5\x9d\xae\xb2\xaa\xa5\x46\x81\xfb\x8d\x2c\x29\x8f\xf0\x4b\xec\xac\x60\xf5\x73\xb7\x94\x90\xd7\x75\x4b\xb8\xf2\xef\x12\xfb\xb2\xcb\xe6\x80\x35\xe2\x9b\x9a\xe5\xc4\x2a\xeb\x76\xba\xc6\x83\xc8\x59\x6b\xf2\x10\x39\x31\xbf\xbd\x80\x3c\xa9\xa7\x93\x56\xe6\x5a\x11\xc8\x62\x34\x03\x3b\x11\xd9\x9e\xa1\x50\x14\xd8\x77\x5c\x24\x66\x2b\x08\x39\xb0\x01\xb6\xc3\x7b\x17\x46\xf5\x2f\x14\x07\x37\x9d\xc0\x31\xd6\xe6\xb9\xe4\xaa\x0d\xb6\x44\xd9\x6a\x44\xbe\x92\x33\x2e\x1c\xf2\x92\xd6\xf1\x6c\x4a\x63\x04\xa2\x41\x4e\x19\xe4\x94\xd5\x36\xc8\x29\x1b\x9b\x52\xc5\x85\xa0\x37\x45\x8c\x4f\x78\xd7\xe9\xdd\x7f\x48\xde\x16\x74\x46\x18\xfc\xf1\x22\xe7\xca\xfc\x9f\x5c\x5f\x7f\x05\x5e\x16\x8d\x70\xca\x14\x80\x00\x4b\x2b\x7d\x49\x0b\xc4\xc9\xbb\x45\x92\x48\xaa\xde\x45\x05\x7b\x6e\x81\x26\xdb\xee\x7d\xbe\x6b\xd5\x09\x8c\xb0\x6f\x00\xb6\xa4\x3e\xec\x1b\x3d\xaf\x6f\x98\xb9\xa5\xd9\xed\x55\xe0\x14\x21\x6b\xf3\x4c\x04\x8f\x12\x99\xac\xe4\xaf\xb7\x63\xb7\x56\x86\x89\x3b\x86\xab\x74\xa5\x76\xf0\xa5\xe3\x5b\x1c\xd1\xb9\xb6\x5b\x0b\xbf\x51\xa5\x64\xc6\x5b\xa7\x1e\x9b\x2d\xcd\x31\x33\x39\x30\x33\x3b\xdd\x0c\xe4\x9f\x53\x97\x83\x0c\xfa\x06\x0e\xcc\x01\x8a\x7d\x83\xaa\x90\xe3\xe2\xc2\xad\x7a\xa7\x4b\x40\x70\x8c\xcb\x81\x92\x7e\x39\xda\xde\x57\xd7\xeb\x2f\xc2\xaa\xbb\x88\xcb\xaa\x60\x4f\x38\x42\x9a\xb3\x6b\x9e\x53\x54\x63\xac\x41\x01\x57\xfe\xd2\x41\x9d\x81\x9d\xed\x5f\x4c\x9a\x95\x44\x55\x02\xf2\x55\x5d\xbf\x39\x7c\x66\x5d\x4c\x00\x6b\x54\xb2\x6a\x0a\xf4\x7a\xf7\x8b\xeb\x5b\xd5\x23\xad\xf1\x38\x8b\xdd\x68\x07\xe2\x39\xac\x20\x12\x7b\x1f\xe0\x19\x06\x7a\xa7\xc7\xe3\x3b\x88\xc5\xc4\x7f\x37\x4b\xd7\x5d\x92\xcc\x7e\xc8\x70\xfc\x5d\x85\xdf\xc7\x68\x37\x3a\x01\xfa\x1d\xa9\xeb\xe5\x1f\x7e\xff\xfb\x28\x82\xc6\x6b\x96\x69\x09\x2e\x9b\x36\x81\x87\xf7\x18\xa0\x35\x03\xe9\x00\x63\xe5\x9d\x7e\x03\xdd\x06\x75\xa4\x55\xe5\x10\x91\xf9\x7b\x8e\xc4\x4f\x8b\xe9\x48\x89\xb4\x8f\x34\x87\x6f\xe1\x2d\x03\x19\x93\x2e\x0f\x96\x31\xe9\x40\x79\x92\x0e\x93\x1d\xe9\x10\x39\x91\x0e\x92\x09\xe9\x70\xf9\x8f\xf6\x9c\xf5\x68\x2f\x2e\x26\xfb\xcc\x6b\x94\x18\x24\x9c\x16\x20\x1c\x9f\xb9\x28\x3a\x8c\x38\x35\x84\x38\x21\x37\xd1\x6e\x33\x12\x25\x4b\xf4\x29\xd9\x87\xb6\x0d\x8f\x3b\x5c\xa6\xa1\x27\xcc\x2f\xf4\xd4\x59\x85\xf6\x9c\x4b\xe8\x70\x19\x84\x0e\x92\x37\x68\x9b\x38\xd4\xf4\x1c\x41\x29\xf1\xa7\xdb\x5e\xae\xbd\x67\x01\xda\x49\xee\x9f\x1d\x67\xfc\xd9\x5d\x9e\x9f\xc3\x39\x52\xc6\x67\x3f\x79\x74\xce\x13\x95\x9c\xf4\x24\xdd\xde\xb3\x2f\x65\x4d\xdb\xfb\x46\xe5\x94\x4b\x0c\xeb\x12\xbb\x1f\xa3\xab\x9c\xaa\x28\x96\x89\x6d\xb6\xf6\x2d\xdc\xb1\x1e\x82\x24\x68\x70\xb0\x77\xd9\xc3\x5c\x24\x2a\x71\xb0\xd3\xaf\xaf\x57\x3c\x42\xfc\xe3\x7d\x3a\x82\xf8\x41\x7a\x5c\x41\xdc\xc2\x0f\xe0\x0c\x32\x78\x5b\xec\xce\xdb\x62\xf7\x71\x3a\xcf\xcd\x40\x9f\x0f\x06\xfa\x64\x03\xbd\xea\x54\x91\x77\x0a\x63\x40\xc9\xc0\xd4\xca\x9b\xb0\xe2\x52\x8b\x23\xce\xae\x2e\x23\xc6\x69\xab\xc2\xa8\xc9\x26\x6e\xd7\x99\xee\x2c\x17\xed\x33\x9f\x6b\xcd\xca\xaa\x17\x8d\x90\xc1\x3e\x3f\xd8\xe7\x37\xb4\xc1\x3e\xbf\xb1\x1d\xda\x5e\x37\x6f\x4a\x2a\xa0\x62\x2a\x98\xf1\x3b\x0e\x63\x2b\x0c\xcd\x84\x58\x4c\x1a\x79\x2d\x31\x13\x03\xe4\xc6\x68\x04\xff\xb1\x61\xad\x3e\xcb\x33\x96\x7b\xb2\x75\x42\xdf\xfb\xdd\x40\xe4\x8b\x57\x30\x73\x26\xd7\xa2\x88\xed\x9a\xfd\x66\x3a\x14\x1b\xbb\x89\x30\x4c\x47\x45\x0b\xd5\x52\x6c\x59\x9c\x0e\x93\xde\xd1\x3f\x58\xf4\x03\x38\x21\x56\xcb\x1d\x72\xa6\x06\x10\xcc\x7a\x6c\x1a\xae\x1b\x46\x4a\x5e\xd7\xb2\xb6\x76\xd7\x70\x49\xe8\x40\xc8\x67\x73\xcd\x6a\x94\xfc\xeb\xe8\xfa\x58\xd7\x4c\x5b\xa8\x02\xa8\xd4\x12\x2a\xfa\x09\xfb\x6f\x17\x4e\x03\xcb\x75\x74\xe8\x86\xcd\xe9\x82\xcb\x26\x2a\x80\xf4\x1a\x29\xe5\x91\xfd\x18\xf8\xa7\xa5\x6c\xbc\x85\x09\xcb\x9e\xf9\x3d\x54\xeb\xe7\x15\x31\xc8\xfb\xf6\x73\x50\xd0\xe4\xd2\xa9\xcf\xc7\xec\x13\x57\x7a\x7d\xc7\xdc\x51\x59\x1b\xe3\xce\xae\xc1\x42\x55\x06\x8b\x7f\x1b\x91\xfe\x21\x0d\xf8\x3b\x1d\x77\x05\x9f\xc5\x35\xfc\xd4\x27\xf6\xd8\x8c\x70\x98\xc0\x85\x94\x34\x9b\x73\x91\x94\x3c\xe1\xdb\xce\x14\x3a\xf2\xcf\x84\x9c\x15\x45\xeb\x3b\xa8\xbc\x4b\xab\x93\x87\xba\xd3\xd7\xfd\x25\x82\x0d\x7c\xd4\x2c\x07\x1b\x65\x5b\x91\x30\x53\x7c\x62\xbb\x9a\x2c\xca\x3b\x5a\xb3\x49\x26\x4b\x72\x7e\x7d\x49\xf2\x9a\xf7\xe6\x3c\xdc\x83\x7f\x3d\x6e\x7a\x6f\xcd\xbe\xe7\x25\xa3\x0d\xf2\x59\xdb\x52\xdc\x91\x9c\xa3\x54\xc1\xb3\xe5\xe5\x9b\x6d\xdd\xac\xf0\x6b\xc7\x00\x28\xef\x62\x65\x9e\x93\x2f\xa8\x62\x39\x79\x47\x05\x9d\xa1\xfa\xf0\xe4\xfa\xea\x8b\x77\xa7\x06\x80\x40\xdd\x79\xf9\x66\xa3\x1f\xd6\x75\xd8\xf9\xfb\x5d\xe6\x7f\x59\x5b\xf8\x16\xbc\xd1\xda\xf7\x5b\x2e\x7e\xa7\x89\x6d\x88\x67\x27\xe2\x0a\x90\x6e\x48\xd5\x73\xb5\x9a\x19\x11\x9d\xa4\x5c\x4a\x56\xb5\x8a\x9a\x17\x65\x7e\xfb\xb8\xe9\x73\x23\x4d\x14\xc5\x55\x41\xc5\x59\x55\xd5\x72\xb1\x59\xeb\x1a\x83\x1c\xdc\xf7\x6e\x01\xe8\x60\xee\x1e\x56\x78\x22\xe0\x53\x29\x50\x88\xc1\x61\x37\xef\xff\xa5\xf6\x8a\x59\x29\x80\x05\x3b\x3a\x6b\xb4\x2c\xa9\xe6\xd9\x11\x91\x35\x39\x7a\x47\x45\x43\x8b\x8d\xb1\x29\x0f\xae\xf8\x3e\x01\xf3\xc1\x8f\xd0\x11\x6d\xcb\xcf\x1e\x64\x60\x1f\xfe\x5e\xd3\xda\xa0\xba\xf3\xeb\x6f\x93\xbe\x55\x9a\xea\x66\x8d\x32\x3c\x40\xad\xee\xa7\x4f\x63\x52\x50\xa5\xbf\xa9\x72\x83\x1f\x56\x7e\x7d\x88\x08\x65\x54\xd3\x42\xce\xfe\x8d\xd1\x62\xf3\x65\x88\x01\xa9\xf3\xb0\x93\xb6\x4a\x37\x20\xa8\xe6\xc6\x7f\x7f\xac\x88\x11\x25\x0d\x94\x70\xad\x48\xcd\x0a\xb6\xa0\x42\xbb\xcf\xaf\xe1\x14\xd4\xb1\xdd\x96\x7b\x01\x8e\xb7\x36\xd6\x9c\x69\x56\x97\x5c\x74\xc7\xb9\x86\xef\xcf\xa5\xc0\x2a\xc8\x0a\xad\x48\xf8\x45\x77\xac\xfb\xa1\xf2\x3e\xd7\x83\x07\x9c\x0d\x3a\x3b\x15\xce\xa7\xbb\x3d\xf8\xda\x8d\x15\x5d\xe6\xf8\x10\x3c\x37\x3b\x73\x5b\xdb\x3d\x72\x2b\x8c\x44\x01\x19\xce\x37\xef\x4d\x2f\x9b\xd3\xc7\xde\x8c\x1d\x38\xe0\x14\xee\x8f\x0a\x1c\xdb\x79\xdf\xe7\x94\xf0\x10\x34\x62\xeb\x67\x8c\x56\xa7\x72\x3f\xa6\xee\x6c\xfc\xf9\xca\x67\x98\x58\xc5\xfb\x36\xa1\x97\x47\xe7\xa5\xfb\x29\x4b\x14\xdf\x18\xc7\xe2\xd1\x8a\x7f\xcb\x6a\x65\xa6\x18\x2f\x1d\x9c\x5d\x5d\x92\x05\x7e\x95\xa6\x0b\x8b\x24\x85\xa0\x23\xeb\xa7\x82\x69\x2c\xe7\xa5\x0d\x6c\xaa\xad\x04\x4b\x49\xc5\x19\xe6\x56\xa7\xc2\x6e\x26\xd0\x33\x46\x73\xfb\xd0\xd0\xcd\x9a\xd9\xdf\x46\xd6\xe3\x30\x8a\x41\x41\xbf\x5d\x67\x83\xa5\x98\xf2\x1b\xbc\x11\x5e\xfc\x4d\x5a\x1d\xa0\x4d\x15\x68\xb0\x0a\x70\x17\x23\xa2\x9a\x6c\x4e\xa8\x11\x64\x94\xb9\x0e\x06\x5f\xb0\x49\x49\x05\x9f\x32\xa5\x27\xb6\x37\x56\xab\xef\x7e\xfb\x7d\x1f\xdb\xf1\x56\xd6\xc4\x46\x69\x8f\x5c\xe6\x6a\xbb\xc6\x16\xe6\xb8\xc2\x8d\xf0\x3d\xb7\x1a\x99\x4a\xe6\x76\xc1\x77\xb0\x14\x4d\x6f\x0d\x29\xc5\xa5\x34\x0c\xbc\x06\xfa\x78\x94\x23\xc3\xf6\x06\xd3\xfe\x6f\x43\x3b\xff\xe7\x88\x9c\xdc\x01\x13\x72\x64\xfe\x3c\xc2\xe9\xf8\x48\xb3\x50\xe1\xd4\x4e\x0b\x93\xa6\xd5\x7c\x36\x63\x75\xaf\x8d\xd5\x7c\xca\x16\x4c\xe8\x53\x9b\xb5\x5b\xc8\xa0\x2b\xe7\xe7\xd7\xea\x4f\x56\xa7\xf9\xdd\x6f\xbf\x3f\x22\x27\xdd\x3d\xe9\x19\x92\x8b\x9c\x7d\x22\xbf\x45\x6b\x29\x14\x17\xcf\x4f\x27\xa8\x70\x51\x4b\xa1\xe9\x27\x33\x62\x36\x97\x8a\x09\x54\x80\x69\x49\xe6\x74\xc1\x88\x92\x25\x23\x77\xac\x28\xc6\xd6\x7e\x4c\xee\xe8\xb2\x3f\x59\xb9\x3b\x42\x48\x81\x4a\x2a\x5a\xeb\x0e\x18\xef\xe4\x12\xde\x72\xb1\xd3\x4c\x8b\x5f\x72\xb1\xea\xd2\xd9\x2b\xe0\x6d\x50\x0a\xcf\xb8\x76\x59\x07\x6c\x7c\x91\x5e\xbe\x30\x87\x55\xf3\x9b\x46\xcb\x5a\xbd\xc8\xd9\x82\x15\x2f\x14\x9f\x8d\x69\x9d\xcd\xb9\x66\x99\x6e\x6a\xf6\xe2\xff\x63\xee\x7c\x7e\xdb\x06\xa1\x38\x7e\xdf\x5f\x81\xd4\x43\x2f\xf1\x7a\xdf\x4e\x5b\xd2\x6d\x91\xaa\x6d\x6a\x93\x49\x3b\x52\x9b\xa5\xa8\x8e\x1d\x81\xdd\x68\x9a\xf6\xbf\x4f\xf0\xc0\x86\xc4\xfc\x4a\x5c\x67\xb7\x36\xb6\x93\xc7\x03\xc3\xf7\x7d\x78\x00\xde\xd1\x2c\xaf\x2b\xd1\x30\xe4\x9e\xbc\xdb\xe2\x4a\x78\x82\x67\xa2\xa0\x7e\x4a\x1c\xe9\xb1\xf0\xdc\x43\x9a\xc7\x4e\x99\x6b\xb8\x0c\x46\x4f\x70\x50\x04\x8a\x4d\xf7\x12\xf0\xce\x8b\xbb\x4a\x22\xbf\x9b\x31\x3c\xc5\x08\x68\xff\xf4\xb1\x39\xe8\xaf\x07\xe8\xf8\xf2\xc3\xdf\x10\x7d\x12\x64\xfb\xca\x2e\xcc\x1a\x25\xb6\xb8\x80\x61\x04\x57\xc1\x75\xee\xaf\xfc\xce\x8a\xfa\x68\x99\xb0\xec\x77\x26\xbf\xa2\x2e\x33\x5c\x15\xe2\x6f\xd8\x78\x23\xf7\x67\xa4\x46\x56\x40\x4b\x47\xed\xfc\xd6\xcb\xc5\xe5\x9b\xe7\xcd\x55\x4b\xc7\xe8\xe9\x4e\x99\xcf\x52\xba\x3c\x52\x2c\x43\x48\x02\x19\xba\xac\x25\x5a\xc0\xd8\x81\x08\xe5\xfa\x5b\xdf\xab\xcc\x81\xee\xa0\x9b\x90\x74\xf6\xcf\xe6\x1b\x31\x42\xa4\xbd\x77\xfd\x13\x26\x0b\x97\x99\xff\x98\x37\xea\x28\x11\xbd\xf3\xab\x55\x0c\x1d\x9c\x3e\xe1\x6a\xe3\x91\x36\x51\x15\xa3\xf3\x26\x85\x21\xd9\xe0\x61\xee\x79\x17\x7c\x06\x63\x6a\x23\x4e\x95\xa1\x4a\x49\x79\x77\x9c\x86\x08\x5b\x79\x83\xf0\x0b\xa6\xa5\x9c\x27\xac\x1f\x39\x61\x2f\x0a\xb6\xc3\x61\x57\xf8\x30\xc6\x86\xd7\xb6\x01\xc1\x3b\x51\x84\xab\xcb\x70\x5c\x2b\xbe\x02\xc8\xa8\xf7\xc0\x7a\xa7\xd5\xa3\xc4\xb7\x80\x16\x9c\x97\x9d\x13\x14\xe1\x20\x4f\xb4\xbf\x2f\x04\xb3\xe6\x91\xe0\x66\x45\x7d\x0a\xe5\xa8\x49\x5b\xcf\x69\x2e\xd7\x37\xe8\x3d\x41\x9b\xba\x11\xb2\xb3\x95\x6d\x1f\xe2\x03\xd8\x4b\xbe\x6b\x68\xaf\xdd\xa2\xfb\x52\xae\x18\x96\x3b\x4c\xd4\x55\x62\x31\xed\x07\x8f\xcb\xa9\x62\x11\xd5\x92\x1a\xb8\x1b\xfd\x62\xf5\x56\xc2\x45\xa8\x3b\x98\xaa\xf4\x6f\x86\x31\x6a\x91\xb7\x84\x73\xef\x16\xc7\xf6\xb2\x12\xb8\x1b\x5e\xe5\x83\x49\xfe\xad\xbe\x06\xcb\xd9\x45\x50\x51\x90\x06\xd3\x52\xbf\xca\xe0\x8a\xce\x4b\xa1\xde\xd5\x5b\x40\x46\x30\xf7\x09\x1a\xcb\xea\x7b\x79\x33\x18\x5d\x57\x24\xdb\xd7\xac\x40\x73\xbc\x25\xe5\x1c\x73\xa2\xbe\xcb\xdc\xaf\x06\xea\xe8\x9a\x8f\x6a\xf2\x30\x0e\x75\x98\x0c\x90\xaf\x9f\x50\x90\xff\xf5\x01\x2d\x18\x38\xd3\x54\x7a\xc5\x5a\x32\x43\x9f\xc4\xe8\x35\x43\xeb\xea\xb9\xaa\xf7\xe7\xd9\xda\x78\x27\xeb\x2c\x4b\xcd\x0c\x49\xbd\xdd\xb9\x05\xf6\x3a\x73\x4f\xb4\x48\x75\xf8\x0e\xfa\x6c\x0f\x36\xdd\xad\xda\x22\xf1\xe7\x11\x6a\x14\xa1\x35\xab\x37\x8c\x70\x0e\x14\x27\x19\xdf\x1b\x13\x16\x9f\x49\xa5\xe6\x87\x83\xe6\x2d\x87\x9e\xd2\x96\xea\x71\x6d\xd3\x5f\x51\xf5\xad\x7e\x6c\x57\x0e\x4a\x0d\xff\xca\x08\xc3\x50\x07\x64\x74\x59\x38\x0c\x17\x8d\x51\xcf\xb8\x17\x44\x89\x8f\x8c\xeb\xd2\xcd\x1f\x7e\xb8\x9d\xed\x1c\xfb\x42\xe3\x53\x18\x3f\x9e\x0b\x1e\x83\xef\x4c\x10\x36\xc6\x2a\xfd\x69\x00\xe3\x25\xd1\xe2\x65\xa1\xe2\xe4\x38\x71\x52\x90\x38\x1d\x42\x3c\x11\x1e\x06\x5f\x24\x1f\x30\x8c\x7d\x87\xd2\x20\xe1\xc5\xf1\x60\xd0\x27\x3e\x24\x18\xeb\x93\x34\x0c\x38\x35\x00\x8c\x72\x81\x17\xfa\xa5\xf8\x21\x11\xf4\x4d\x8c\xf8\x82\xbe\x88\xc4\x7a\xb1\x1e\x79\x3d\x94\xf7\xdf\x42\xbc\xa0\x8b\x3d\xe0\x2e\xd6\xad\x49\xb0\x6e\x62\x4c\x17\x28\x7f\x1a\x9a\x53\x1a\x93\x14\x31\x12\x7d\x69\xdc\x6c\x8a\x74\x25\x10\x65\x02\x9c\xba\x43\x27\xdc\x99\x52\xf2\x54\xa5\x2e\xc4\xf3\xa9\xf9\x1f\xca\xe4\x78\x35\xac\x24\x3c\x29\xba\x98\x32\x54\x04\x84\x16\xb7\xdf\xef\x6f\xe7\x1f\x56\xb7\x8b\x43\x15\x9e\x2e\x97\xfd\xa0\x28\x33\xe4\xb2\xe3\x06\x31\x58\x39\x2e\x89\xb6\xe5\xb8\xd4\xb6\x74\xe8\xa9\xf3\xc5\xfb\x59\x9a\xe1\xac\xc1\x35\xdc\x4f\x8c\xd4\x51\xc8\xb6\x05\x59\xab\x42\x55\x3e\xd5\x65\xc1\xf5\xfa\x86\xe5\xa2\xdb\x88\x80\x56\x79\xd9\x16\x42\x72\xad\xd7\xcb\x05\x7f\x8b\xd0\x47\x92\xe3\x96\x0b\xe9\xe6\x0e\xd7\xeb\xea\xba\x41\xdf\xbe\xde\xfd\x94\x4b\xbb\xe4\x93\xb3\x6e\xbb\x54\x79\xf6\x1e\xc5\x70\x7c\xa0\x2c\xa8\xfc\x56\x90\x75\xd2\xa2\x1c\xef\x44\x0f\xec\x46\xfe\x14\x76\xaf\xc1\x55\x81\x9e\x48\xb9\x13\xa3\xc3\x33\x41\xfd\x39\x65\xe2\x07\xe5\x55\x58\xbf\xa1\xf2\xd8\x37\xa4\x81\x4d\x09\x7c\xa9\xea\xde\x0a\x08\x10\xf6\x33\xd8\xba\x85\x0b\x14\x7d\xd9\x63\xae\x08\xe5\xa0\xb5\x81\xa6\x12\xe6\x71\x6e\xa4\xe5\x80\x59\x30\xb2\xc8\xff\x8e\x6c\x16\xc6\xf6\xdc\x0a\x92\xc3\x68\x13\x4d\xcf\xdd\x99\x80\xc3\x27\x44\x1f\xb1\x2b\x72\xe8\x64\xeb\x87\xbb\xb5\x40\x86\xc9\x71\xb6\x70\xc2\x5e\x48\xf1\x4e\xce\xe7\xe8\x8f\x20\xdb\xd6\xfe\xac\x7d\xd4\x62\xc6\xe8\x75\x14\x81\x43\x7f\xfe\xbe\xf9\x17\x00\x00\xff\xff\xc4\xc9\x92\x01\x49\xa6\x03\x00") +var _operatorsCoreosCom_subscriptionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\xfd\x77\xe3\xb6\x95\x30\x8e\xff\xde\xbf\x02\xc7\xed\x39\xb6\x5b\x49\x33\x93\x76\xdb\xee\x3c\xfd\xb6\xc7\xf1\x78\xba\x7e\x92\x99\xf8\x19\x4f\xd2\xb3\xdf\x6c\x77\x03\x93\x90\x84\x9a\x04\x18\x02\x94\x47\xdd\xec\xff\xfe\x39\xb8\x17\x00\x41\x49\x36\x01\x59\x92\x3d\x59\xe2\x87\x64\x4c\x91\x78\xbd\xb8\xef\x2f\xb4\xe2\xdf\xb1\x5a\x71\x29\x5e\x13\x5a\x71\xf6\x49\x33\x61\xfe\x52\x93\xdb\x3f\xaa\x09\x97\x2f\x16\xaf\x7e\x71\xcb\x45\xfe\x9a\x9c\x37\x4a\xcb\xf2\x03\x53\xb2\xa9\x33\xf6\x86\x4d\xb9\xe0\x9a\x4b\xf1\x8b\x92\x69\x9a\x53\x4d\x5f\xff\x82\x10\x2a\x84\xd4\xd4\x3c\x56\xe6\x4f\x42\x32\x29\x74\x2d\x8b\x82\xd5\xe3\x19\x13\x93\xdb\xe6\x86\xdd\x34\xbc\xc8\x59\x0d\x9d\xbb\xa1\x17\x2f\x27\x5f\xbc\x9c\xbc\xfc\x05\x21\x82\x96\xec\x35\x51\xcd\x8d\xca\x6a\x5e\x41\x4f\x13\x59\xb1\x9a\x6a\x59\xab\x49\x26\x6b\x26\xcd\xff\xca\x5f\xa8\x8a\x65\x66\x8c\x59\x2d\x9b\xea\x35\xd9\xf8\x0e\x76\xe7\xa6\x42\x35\x9b\xc9\x9a\xbb\xbf\x09\x19\x13\x59\x94\xf0\x6f\x5c\xe2\x75\x30\x2a\x3c\x2e\xb8\xd2\x5f\xad\xfd\xf4\x35\x57\x1a\x7e\xae\x8a\xa6\xa6\xc5\xca\x6c\xe1\x17\x35\x97\xb5\x7e\xdf\x8e\x6d\xc6\x52\xcd\x4d\xf8\x6f\xfb\x22\x17\xb3\xa6\xa0\x75\xb7\x93\x5f\x10\xa2\x32\x59\xb1\xd7\x04\xfa\xa8\x68\xc6\xf2\x5f\x10\x62\xb7\xcb\xf6\x39\x26\x34\xcf\xe1\x08\x68\x71\x55\x73\xa1\x59\x7d\x2e\x8b\xa6\x14\x7e\x4c\xf3\x4e\xce\x7c\xaf\xaf\xc9\xc7\x39\x23\x15\xcd\x6e\xe9\x8c\xb9\xf1\x6e\x58\x4e\xb4\xf4\x1f\x10\xf2\x0f\x25\xc5\x15\xd5\xf3\xd7\x64\x62\xb6\x78\x62\x76\x30\xf8\x19\xcf\xe7\x0a\x3b\x09\x9e\xeb\xa5\x99\xae\xd2\x35\x17\xb3\x87\x86\xcf\xa8\xa6\x85\x9c\x11\x04\x23\x32\x95\x35\xd1\x73\x46\xcc\x50\x7c\xca\x59\xee\xe6\xf7\xc0\x8c\xf0\xd3\xb5\x39\x5d\xaf\x3e\x8e\x9e\xd2\x9c\x0a\xc1\x0a\x22\xa7\xa4\xa9\x72\xaa\x99\x22\x5a\xb6\xfb\xf3\xf0\xf6\xd8\x8f\xd7\x66\x73\xbe\xf6\x7c\xc3\x74\xf0\xd5\xc5\x2b\x5a\x54\x73\xfa\xca\x3e\x54\xd9\x9c\x95\xb4\x3d\x43\x59\x31\x71\x76\x75\xf9\xdd\x6f\xaf\x57\x7e\x20\xdd\xa5\x84\x20\x4a\x6e\x19\xab\x54\x7b\x29\x48\x53\x99\x35\x99\xc5\x91\x9b\x25\xd1\x35\xcd\x6e\xb9\x98\xc1\xd2\x67\xb8\xde\x73\x3c\x18\x35\x59\x9b\xb2\xbc\xf9\x07\xcb\x74\xf0\xb8\x66\x3f\x36\xbc\x66\x79\x38\x15\xb3\xb3\x0e\x13\xac\x3c\x36\xfb\x14\x3c\xaa\x6a\x33\x2d\x1d\xdc\x43\x6c\x01\x2a\xea\x3c\x5f\x59\xe6\x4f\xe3\x95\x5f\x09\x31\xbb\x83\x5f\x92\xdc\xe0\x25\xb3\xa0\x39\x73\xd7\x85\xe5\x76\x4b\xcd\x01\xeb\x39\x57\xa4\x66\x55\xcd\x14\x13\x88\xa9\xcc\x63\x2a\xec\x2a\x27\x6b\x9d\x5f\xb3\xda\x74\x64\xae\x74\x53\xe4\x06\xa1\x2d\x58\xad\x49\xcd\x32\x39\x13\xfc\x9f\xbe\x77\xd8\x44\x33\x6c\x61\x20\x48\x13\xb8\x90\x82\x16\x64\x41\x8b\x86\x8d\x08\x15\xf9\x5a\xdf\x25\x5d\x92\x9a\x99\x71\x49\x23\x82\x1e\xe1\x13\xb5\x3e\x97\x77\xb2\x66\x84\x8b\xa9\x7c\x4d\xe6\x5a\x57\xea\xf5\x8b\x17\x33\xae\x1d\xaa\xce\x64\x59\x36\x82\xeb\xe5\x0b\xc0\xba\xfc\xa6\x31\x47\xff\x22\x67\x0b\x56\xbc\x50\x7c\x36\xa6\x75\x36\xe7\x9a\x65\xba\xa9\xd9\x0b\x5a\xf1\x31\x2c\x46\x20\x92\x2d\xf3\x5f\xd6\x16\xb9\xab\x95\x81\x37\x5e\x24\xe2\xd0\x66\xe2\x61\x19\x7c\x4a\xb8\x22\xd4\x76\x88\x8b\x6d\xcf\xc4\x3c\x32\xdb\xf8\xe1\xe2\xfa\x23\x71\x33\xc2\x73\xc3\x23\x6a\x5f\xdd\xb0\x43\xee\xb4\xcc\xce\x72\x31\x65\x35\x7e\x39\xad\x65\x09\xbd\x32\x91\x57\x92\x0b\x0d\x7f\x64\x05\x67\x42\x9b\x9b\x5e\x72\xad\x00\xac\x99\xd2\xe6\x20\xd7\x3b\x3e\x07\xd2\x46\x6e\x98\xc5\x11\xf9\xfa\x2b\x97\x82\x9c\xd3\x92\x15\xe7\x54\xb1\x83\x9f\x9d\x39\x23\x35\x36\x07\x12\x7d\x7a\x21\xe1\x5e\xff\x60\xed\xd6\x13\xe2\x48\xee\xbd\xc7\x1d\xa2\xa0\xeb\x8a\x65\xfe\x3a\x52\x41\xce\xaa\xaa\xe0\x19\xde\x38\x3d\xa7\x9a\x64\x54\x98\xed\xe4\x42\x69\x5a\x14\x6c\xf5\x76\xdc\x3b\x8b\xfb\xf0\x0f\x01\x64\xb3\x42\xae\xdc\xe3\x35\x9a\xd1\xfd\xc1\x93\xd9\x95\x37\xee\xc3\x55\xa6\x59\xcc\xbf\xfe\xc3\x03\x5b\x4e\x90\x25\x9a\xf2\xd9\xa6\xcf\xee\xdd\xcb\x73\xf8\x04\x98\x29\xca\x85\xb2\x5d\x34\x35\xee\x66\x4b\x3b\x0d\x35\xa5\x1d\x4e\x62\x1d\x0e\x1f\xdc\xd9\xbe\x35\x9b\x46\xa7\xc0\xfa\x2d\x37\xff\xda\x8f\x00\x5c\xbb\x9c\xb6\x33\x1f\x11\xb9\x60\x75\xcd\x73\x8b\xba\x2b\x99\x1f\x2b\x40\xac\x79\x53\x00\xa1\x92\x42\xe9\x9a\xf2\x8d\x97\xde\x35\xc1\x0b\xb3\xf8\x31\xd5\x78\x83\x98\x22\x77\xbc\x28\xc8\xaf\x85\xd4\xbf\xf6\x23\xc0\x00\xb2\xe6\x33\xee\xb1\xb3\x22\x5c\xb8\x71\x81\xac\x5b\xbe\x44\x2a\xb6\xd2\xe1\xfd\x83\x7f\xab\x18\x61\x65\xa5\x97\x0e\x4d\x9d\xfc\xf7\xff\x9c\x1a\x9a\xc0\x6a\xaa\x82\x01\x3b\xfd\xdd\x8b\xe9\xb1\xf5\x9c\x14\x89\x38\x2d\xd8\x17\x99\xb3\xb3\x9e\x53\x23\xab\x27\xf7\x86\x21\xfb\xa3\xe0\x73\x7f\xea\xe1\xa1\xd4\x4d\xc1\x94\x67\xe1\xcc\xde\x3d\xd0\x79\xc4\x5a\x62\xd7\x83\xef\xb1\x29\xab\x6b\x96\xbf\x69\xcc\x2d\xbb\xf6\xb3\xba\x9c\x09\xe9\x1f\x5f\x7c\x62\x59\xa3\x37\xb0\x14\x0f\x2e\xfd\x01\xa0\x75\xcd\xf0\x8d\x76\x27\x58\x8d\x50\x86\x33\x02\xd6\xd1\xfe\x60\xb6\x04\xd8\x02\xb3\x83\x0a\xb1\x9e\xa2\x9a\xab\xe9\xb2\x77\x00\xb3\xa3\x7e\xcf\xd9\x27\x43\xf1\x80\xf7\x0f\x6e\xbb\x61\xe4\x80\xb8\x71\x56\xe4\x23\x72\xd3\x68\xc2\x35\x50\xbe\x6c\x2e\xa5\x5a\xc7\x76\xab\x8d\xe2\xd1\xc2\xbc\x16\x5c\x02\xe3\x42\xa4\x30\xc0\x4a\x4a\x43\xae\x80\x61\x62\xe1\xf0\x13\x58\x79\xfb\x19\x5f\xa5\x36\xeb\xad\x94\x4a\xb7\xc7\x65\x48\x3f\x5c\x40\xc1\xc8\x1d\xd7\x73\xf8\x63\x56\x33\x64\x9a\x54\x53\x9a\x41\xef\x18\x9f\xcd\xb5\x1a\x11\x3e\xd9\x40\x49\x57\x9b\x01\x40\x46\xb3\x79\x30\xad\x92\x31\xad\x08\x2d\x0a\xb7\x84\x10\x6a\x91\x7a\x94\x86\x81\x20\x27\x8e\xc3\xe8\x1d\xc5\x72\x07\x23\x4f\x7d\x56\x01\x6f\xe3\x71\x8d\x08\xd3\xd9\xe4\x74\xd4\xdb\x7d\x26\xcb\xca\x20\x04\x0a\x7b\x70\xb3\x24\x5c\x1b\xde\x1d\xb9\xa1\x5a\x36\x33\xdc\x29\x56\xd8\x89\x3b\x5e\x16\x0e\xdf\x30\x97\x20\x0d\x6e\x20\x37\xab\xed\x08\x37\xf7\xc8\xb1\xab\x66\x38\x8e\x9b\x04\xfb\x57\x52\x9d\xcd\x2d\x1a\xce\x64\x5d\x33\x55\x49\x61\x7a\xc6\x5f\x2e\xda\xb5\xfd\x1f\xf3\x4e\xef\x78\xa6\xd3\x13\x75\xda\x1e\xf6\x9c\xcf\xe6\xee\xac\x69\x8d\xe8\xb8\x0b\x23\x7d\x47\x8e\xa8\x84\xd6\x35\xed\xbb\x47\x5c\xb3\xb2\x07\x91\x90\x2d\x6e\x3f\x21\x67\xc2\x22\xfb\x16\xb0\x03\x10\xd3\xac\x2e\xfd\x46\x02\x14\x02\xda\x53\xb8\x09\xbc\x34\x9c\x10\xd7\x16\xcc\xc9\xcb\x88\xf1\x4e\xcc\x4d\x20\x5c\x1f\x2b\xb8\xb5\x63\x59\x9d\x4e\xc8\x19\x11\x8d\x47\x3c\x0f\x4d\x41\x48\x3f\x03\xdb\x91\x99\x96\x92\x6d\x5f\xfd\xf8\x28\x0e\x7d\x63\xbb\x9f\x41\x5b\x6f\x63\x3b\x7f\x26\x22\x2e\xa1\x79\x1d\x77\xad\xf7\xd5\x58\x42\xe2\xde\x76\x73\x88\x79\x7b\x05\x62\xce\xf0\xe6\x28\x56\xb0\x4c\x1b\x6a\xc8\xea\x72\x44\xa8\x52\x32\xe3\x46\x54\x68\x61\xbf\x7b\xa1\x70\x25\xfd\x7b\x4f\x52\xf7\x9f\x24\xaf\x9f\x80\x34\xda\xbd\xdf\xb1\xdf\xad\xed\x46\xc1\x95\x36\x08\xaa\xbb\x2b\x1d\xbc\x7b\xb3\x84\x5f\x8f\x15\x29\xe8\x0d\x2b\x1e\xe0\xab\x56\x5b\xfc\xe5\x6f\x5b\x24\x1a\xb8\x67\x41\x51\x08\xa1\x6d\xab\xd0\x10\xac\xdb\xca\xbd\x1e\x4e\x40\x0c\x72\x4c\x3d\xb2\x82\x23\x42\xc9\x2d\x5b\x8e\x10\xa5\x0b\xaf\xc2\x49\x9a\x02\x74\x5c\x33\x24\xe8\x06\xee\x6e\xd9\x12\x3a\x7c\x98\xdd\xdc\xd8\x55\x2a\xdc\x61\x4b\xc1\x00\x6d\x1b\x9b\x89\x26\x7e\xb1\xc5\x06\xa5\x5f\x0d\x6c\xb7\xec\x41\xf6\x79\x53\x5b\x53\x36\x02\xb8\xc3\x79\xc0\x21\x01\x05\x76\xf0\x40\x8d\x88\xcc\x36\xeb\x1f\x1e\x6e\x0f\x0a\x9c\x0f\x35\xb7\x7b\x8f\x5a\x57\xe2\x05\x31\xed\x83\xd7\xe1\x20\xbc\x1f\x2b\x84\x57\x83\x77\xe6\x1c\x94\x95\xe6\xa2\x00\x1a\x49\x07\x5a\x6c\xdf\xd1\x82\xe7\x81\x0e\xd4\x30\x1b\x97\x62\x44\xde\x4b\x6d\xfe\x77\xf1\x89\x2b\xc3\x63\xbe\x91\x4c\xbd\x97\x1a\xfe\x9c\x90\xbf\x6a\xbc\x7a\x5f\x47\xe2\xe5\xb6\x6d\x7d\x06\xb8\xbe\x43\x9f\xc0\x99\x40\x24\x6a\x76\x38\xd4\xc4\xa9\x89\x91\xcc\x81\x45\xb7\x3b\x67\xb0\xd6\xa5\x30\x42\x01\xee\x5c\xf2\x50\xa0\x8c\x45\x39\x1b\x87\x2c\x1b\x05\xaa\x34\x21\xc5\x18\xd8\xa8\x8d\x63\xe2\x01\x99\x71\xc3\x23\xda\xe1\xf0\xf7\x0f\xfd\x57\x6d\x86\xfd\x5a\x8f\x82\x8f\x93\xc7\x0d\x06\x9b\xd3\x05\xb0\xf6\x5c\xcc\x0a\xcf\xc4\x8f\xc8\xdd\x9c\x67\x73\x94\x1e\x41\x13\xa6\x59\x5d\xd5\xcc\x70\x0c\x14\x74\x66\xe6\xc9\x8c\xd5\xe9\xa0\xff\xd1\x88\x06\x38\x3e\xea\xbb\x0b\x9a\xb1\x9c\xe4\x20\xb2\xa0\xea\x95\x6a\x36\xe3\x19\x29\x59\x3d\x63\xa4\x32\xa4\x7f\x3b\x80\x4f\xa3\xc4\xd8\x92\xe9\x71\x38\xe0\x16\x37\x8c\x90\x4f\xe3\xdb\xe6\x86\xd5\x82\x69\xa6\xc6\x86\x3f\x19\xdb\xd9\x6b\x59\xf2\x2c\xba\xb3\x9d\x74\x03\x7c\xd6\x5b\x23\xb7\x1d\x88\xc5\x02\x19\x71\x60\xb1\x06\x16\x6b\x60\xb1\x06\x16\x6b\x60\xb1\xa2\xdb\xc0\x62\x3d\x7a\xf8\x81\xc5\x1a\x58\xac\x83\xb3\x58\x9d\x2e\x4a\x5a\xa5\xf6\x80\x7a\xb9\x2d\x14\x81\x7f\x43\x85\xee\xaa\xe6\x0f\x18\x3e\xe7\xd7\xd0\x55\x01\x1a\x3e\xe6\xda\x12\xa7\x8f\xa0\x36\xb4\x96\xc8\x9a\x8a\x19\x23\xaf\xc6\xaf\x5e\xbe\x4c\x51\x10\x5a\x70\x8e\xfa\x62\x2a\xeb\x92\x6a\xf8\xe6\xb7\x5f\xf4\x7c\xf1\x88\x53\xb9\xcf\x5e\x72\x18\x43\x9d\xc5\x3c\xde\x36\xd3\x61\x91\xef\xb1\xa5\x01\x19\x13\x52\x93\x92\x69\x42\xfb\x79\xb2\x50\xed\xce\x4b\x36\x72\xe6\x50\x44\x3b\xd6\x6d\xc4\x19\x05\x73\x22\x85\x35\xbd\x98\xc3\xef\x3f\xdc\xad\x56\x90\x31\xaa\x98\x21\xf1\x37\xcc\xac\xa2\xdf\x14\xa8\x89\x92\xa5\x99\x35\x17\xda\x21\x31\xb3\x04\xe6\x0e\x86\x9c\xb0\xc9\x6c\x42\xf2\x06\xba\xa5\xc2\xfa\xc1\x9c\xe2\x6a\xd5\x52\x69\x56\xf6\xdb\x02\x0d\x31\xac\xe1\x7f\x66\x5b\x74\xbd\x04\x0b\xf9\x82\x09\xdd\xd0\xa2\x58\x12\xb6\xe0\x99\xf6\xfb\x07\x6e\x3b\x5c\xab\xa8\x9d\x4a\x60\xa3\xe3\x59\xe7\xf1\xda\x0d\xed\x23\x52\x29\x9c\xef\x5a\xdf\x31\x38\xa7\x73\x03\x3e\xd8\x95\x4c\xee\x95\x09\xb5\xe9\x17\xcd\xb6\xf0\x4f\x00\xee\x6f\x3e\xf4\x5b\xd9\x48\x32\xfd\x49\xa0\x39\xdb\xb1\x56\xd6\xe0\x25\x6b\x6b\x7c\x5b\x5f\xe9\x06\x93\x17\xae\xbd\x73\x6b\xe4\x34\x72\x40\x3d\x67\x68\xa4\x3c\x7b\xff\x26\x6e\xc7\x88\x75\x0e\xf8\x28\x2b\x59\xc8\xd9\x32\x3c\x5e\xd8\x4e\x30\xff\xd9\x79\xa0\xaf\x0e\xb2\xe0\x06\xe6\xdf\xaf\xc0\xc3\x60\x1a\x1a\x4c\x43\x83\xde\x02\xda\xa0\xb7\x18\xf4\x16\x83\xde\x22\xae\x0d\x7a\x8b\x47\x0f\x3f\xe8\x2d\x06\xbd\xc5\x60\x1a\x5a\x6f\x03\x8b\xd5\xdf\x06\x16\xeb\xc1\x36\xb0\x58\xbe\x0d\x2c\xd6\xc0\x62\x0d\x2c\xd6\xc0\x62\x0d\x2c\xd6\xa1\xba\x79\xac\x69\xe8\x51\x53\xd8\x6e\xf0\x4a\xe6\x8f\x08\xde\xaa\x64\xfe\x40\xec\x16\xea\xf4\x33\x39\x2e\x64\x46\xb5\x0d\xb3\x35\x9f\x58\x2b\x94\xa2\x25\x9a\x29\x46\xe4\x9f\x52\x30\x8c\x66\x31\xd7\x03\x8c\x05\x52\xcf\x59\x6d\x5e\x3f\x51\xa7\x0f\x86\x10\x0c\xb1\x5f\x43\xec\xd7\x10\xfb\x75\x6f\x7b\x36\xb1\x5f\x73\xaa\x10\x6e\x91\x34\xde\x1f\x0a\x16\xe0\xa4\x8f\xac\x2e\x7f\xa6\x91\x60\x06\xdc\x2d\x38\x42\x92\x88\x16\xa4\x70\x67\x72\x6b\xf0\x67\xf9\x55\x77\x3f\xac\x58\x0d\x8b\xa2\x79\xce\x72\x52\xb1\x7a\x8c\x20\x2a\xc9\x94\x8b\x7c\xc3\x5a\xdd\xfe\xf4\xa3\x87\x3d\x86\x62\x75\xd7\x11\xf5\xcd\x7e\xe2\xb1\xba\x13\xd9\xc2\xa8\x18\x5a\x46\x3b\x44\xf0\x59\x44\x67\xa5\x4a\xe8\x63\xa2\xad\x41\xf1\xab\x48\x19\x3d\x5d\xcc\x06\xe1\xd8\x99\x1f\xb7\x54\x3f\x25\x89\x42\x67\x56\x1e\xff\xb1\x61\xf5\x12\xe2\xf3\x5b\xb1\xd3\xe7\x22\xb1\x1e\x31\x5c\x91\x8c\x2a\x24\xab\x29\xac\xf2\xe5\x14\xa3\x26\x45\x53\x14\x23\xec\x67\xf5\xb2\x3a\x34\x07\x70\x20\xa4\xf9\x3d\x59\x23\x96\xa8\xa2\xd9\x4e\x07\xb2\xbd\x15\x96\xac\x9e\xd3\x6a\x57\xa8\x1b\x73\xaa\x43\x3c\x96\x8d\xba\xc3\x0d\xd6\xf4\x64\xfb\x38\xb6\x6d\x05\x98\xad\xc4\x97\x47\xcb\xeb\x0f\xec\xc9\x23\xf4\x8a\xf0\x72\xf2\x64\x76\xa3\x5b\x24\xdb\xeb\x17\xc9\xd6\x3a\x46\xb2\x95\x9e\x91\x6c\xab\x6b\x24\x8f\xd0\x37\x92\xed\x74\x8e\x64\x15\xda\xcc\x09\x59\xc6\x77\x3f\xea\x47\xf2\x38\xe1\x7c\x7b\x35\x24\xd9\xc1\xc5\x0a\xc7\x0f\x32\x3b\xed\x4f\x2f\x49\x62\x75\x93\x70\xad\x3a\xea\xc9\x43\x9f\xcb\x76\xaa\x49\xb2\xa3\x53\x71\x99\x71\x40\x17\x76\x28\x65\x25\x79\x7a\x85\xe5\x83\x53\xb0\xc3\x47\x6b\xf8\xb6\x1a\xfd\x11\x5a\x41\xf2\x28\xcd\x20\xd9\x5e\x3b\x48\x1e\x0b\xec\x3b\xd3\x12\xee\xb4\x2b\xe0\x93\xbe\x06\x3f\xb4\x47\x70\x5b\xc9\x37\x30\x18\x16\xb9\x8b\x92\x56\xe6\xf6\xfd\xb7\x61\x22\x00\x30\xff\x87\x54\x94\xd7\xca\x48\x37\x56\xaf\x1d\xfe\x66\xd5\x77\x41\x37\xc9\x13\xa8\xcc\xc0\x86\xc6\x2f\x68\x61\x98\x1c\x74\xfa\xb5\x3a\x08\x33\x97\x55\x16\x72\x44\xee\x20\x61\x96\x21\x6f\xa8\x99\xe0\x8a\x1c\xdd\xb2\xe5\xd1\x28\x4a\x3d\xd0\x6d\xe1\xcd\x3e\xba\x14\x47\xc8\x3a\xad\xdd\x4b\xcf\x67\x49\x51\x2c\xc9\x11\xfc\x76\xb4\x6b\x1e\x75\x0b\xfe\x28\x4c\xcd\xba\x2d\xfb\xb1\xd5\x75\x7a\xac\x82\x9b\x74\xa0\xef\x2b\xb6\xdc\xd6\x11\x21\x09\xe6\xdf\x75\x46\x74\x0c\x35\x80\x99\x91\xdd\x3d\xdf\x84\x99\x59\x81\x65\xb2\x3a\x2a\x54\x57\xf1\xa2\x48\x18\xed\x86\x11\x4d\x6f\x19\x58\x78\x24\xa4\x96\xe3\x39\xc3\x64\x7a\x08\x3a\x30\x92\x01\x99\x46\x41\x7a\x5c\x52\x48\x79\xdb\x54\x0e\xf4\x5c\x36\xc9\x84\x21\xb9\xc8\x64\xe9\x7c\xea\xd1\xaf\x75\x64\x13\xcc\xdd\xb2\xe5\x18\x73\x60\xe2\x73\x18\x18\x48\x80\x55\x4d\xfc\xd0\x11\xcc\x7f\x20\x54\x91\x1f\x80\xa9\x14\xe4\x04\x3e\x3c\xfd\x21\xc5\xa5\xc0\x6f\x20\x6a\x5f\x65\x03\x98\x85\x19\x62\x69\x27\xa8\x56\xf7\xf6\xa1\x1d\x4b\x18\xda\x65\x8a\x0b\x37\xe3\x18\xed\x0d\x27\x54\x68\x7e\xea\x95\x34\x13\x02\x70\x00\x5c\x72\x2e\xc5\xb1\xc6\xf9\x39\xbc\xe6\x3a\x48\xf1\x3a\xf0\xfb\xde\x5a\xfc\xd0\x5a\x80\x47\x9e\xb3\x29\x6d\x0a\x6d\xb3\x91\x1a\xd4\x07\x94\x3e\x61\x84\x8f\xce\x5e\x62\x19\xfe\xa9\xac\x6f\x78\x9e\x33\x01\x21\x0e\x6e\xfa\x37\xd2\x05\x04\xb5\xe0\x6e\x30\x5b\xe7\x8c\x53\x86\x3d\x2b\x94\x1c\xad\xf6\x98\xf9\x6c\xa5\xe6\x16\xdd\xcd\x99\xe8\x0e\x40\xb8\x32\x9b\xaa\x58\x02\x53\x7b\x10\xd7\x9f\xc7\xe3\xbc\xad\x5d\xaf\xb8\x7a\x02\xbc\xb7\x3a\xe8\x80\xfa\xa2\x50\x9f\x90\x7a\xc0\x7e\x9f\x2d\xf6\x5b\x03\xfa\x5d\x20\xc0\xb5\x4e\x07\x1c\x98\x8c\x03\x85\x4b\x83\xfc\xc4\x56\x00\x54\x8c\xa1\x17\xab\x9b\x92\x6a\x75\x66\x10\xe8\xb5\x9d\xbe\xcc\x85\xc1\x01\x9e\x85\x1e\x72\x67\x0c\x6d\x84\x4d\x06\x0f\xe6\xd0\x76\x58\xc4\x17\xab\x36\xf7\x84\x31\x9d\xe0\x22\x05\x53\xa0\x62\x67\xde\xbf\x22\x18\x06\x7a\x4d\x59\x0a\x84\xc2\xb5\xea\x43\x91\xaf\x06\xc7\xb5\x7d\x83\x5e\xbf\x64\x54\x28\x72\xe4\x5c\x3c\x8e\x55\xfb\xc6\x51\xd2\x7d\x73\xa9\x2f\xfd\xd8\x90\xe9\x38\x4c\x77\xd9\x0e\x3d\xd8\x51\x06\x3b\x4a\xd8\x06\x3b\xca\xfa\x24\x06\x3b\xca\x7d\x6d\xb0\xa3\x6c\x35\xfe\x60\x47\xe9\xb6\xc1\x8e\x32\xd8\x51\x06\x3b\xca\x60\x47\x19\xec\x28\x83\x1d\x25\xf6\xa3\x5d\xd8\x51\x5a\x31\xe8\x10\x72\x74\x28\xb2\x5a\x3f\x71\xac\xb2\x45\x35\xcf\xda\xa8\x50\xf7\x16\xfe\xeb\xa9\x84\xea\x50\x0c\x7e\xac\x48\x1d\x0a\xe8\x6b\x1a\x8c\x64\x89\xfa\x5e\xf9\xd9\x4b\xd8\x6b\x63\xec\x48\xb4\xfe\x99\x2b\x97\x02\x07\xd6\x43\x5c\x87\x8f\x2e\x94\xc5\x16\xee\xbb\x61\x6d\x9c\x4b\x4e\x4e\x9c\xae\xf5\xd4\x1c\xb8\x90\xba\xfb\xa3\xd0\x7c\xdc\xbe\xe1\x1d\x84\x41\x25\xec\xb2\xb9\xa5\x6c\xba\x93\x59\x5a\xdd\xa3\x58\x29\x7b\xd9\x42\x9b\xc1\xff\xac\xee\xcc\x96\x2b\x5b\x49\x0d\x42\xd3\xea\x46\x08\xc3\x1e\x49\x61\xa3\x38\x12\x66\x82\xa4\x05\xd5\xbc\xf6\x56\xa2\x30\x05\x6b\x04\x89\xaa\x3d\xa6\x20\x00\x80\x6a\x2c\x93\x68\x73\x2e\x49\x61\x95\xe4\xe6\x09\xf6\x93\x30\x09\x7f\x61\x61\x3f\xb9\x5f\x51\xca\x5d\xbd\x80\x3b\x1a\x4e\x96\x2b\x38\x47\x5a\x14\xf2\x2e\x85\x3e\x25\xde\x88\xad\x93\x03\x46\x43\xef\x5d\x72\x16\xc1\x15\x6f\xf9\x58\x5e\x7d\x48\x35\xf8\x60\x1b\x52\x0d\x3e\x8f\x54\x83\x81\x1d\x34\xcc\x39\xd8\xbf\x57\x90\x93\x70\xaf\x39\x07\x09\xf9\xdb\x9c\xc1\x2d\xaa\x19\x1a\x2f\x9b\x42\xf3\xaa\x8d\x32\x56\x78\x42\x05\x8a\xd4\x53\x1b\x0d\xd8\xbd\xbd\x66\x36\x34\x9b\xf7\x0e\xb5\x72\xcb\x61\x3c\x88\x5a\x56\x80\x4d\x31\x62\x0e\xf4\xef\x98\xe8\xcf\xc9\xda\x18\x76\xc8\x9f\x3a\x9a\x2a\x0a\xff\xbd\x71\x05\x43\x03\x1b\xb8\x22\x27\x86\x3a\x16\x4b\x6b\x35\xee\x20\xc2\x0e\x59\x8d\x18\x00\xf5\x60\x0b\xe6\x18\xd4\x19\x5f\x30\xd1\x52\xdf\x13\x75\x7a\xea\x78\xe2\x55\xfe\x21\xa2\xf7\xc7\x70\x18\x31\x58\x3b\x95\x33\x58\xa1\xf7\x11\x23\x6c\xe0\x08\xfe\x14\x50\xd9\x3f\xf7\xf3\x04\x11\x83\xe0\x95\x76\xe1\x99\xc1\x41\xb7\xbc\x40\x6f\x2f\x7b\x8c\x82\x4b\x09\xb5\x4a\xd3\x8a\x6f\x11\x62\xb5\x6d\xa6\xcc\xfd\x86\x56\xed\x35\xac\xea\xf3\x49\x68\xf9\xc4\xe6\xbf\xcf\x20\x1b\xd3\x33\x31\xf7\x0d\xe9\x98\xee\x6b\x4f\x95\x8e\x69\xef\xe6\xbc\xcf\x2e\x2b\xd3\x41\xcd\x77\x87\x31\xdd\x7d\x66\x59\x99\x9e\xc4\x54\xf7\xcc\xf3\x33\xed\xcf\x44\x37\x24\x3f\x7a\x9a\xfc\x92\xa9\x66\xb8\xed\x6f\xd5\x93\x9a\xdf\x9e\xd4\xf4\xf6\xf4\x66\xb7\xad\x78\x95\xc7\x9a\xdb\x92\xaf\xc9\x63\xcd\x6c\xdb\xb8\xec\x6f\x07\xcf\x87\x0b\x51\x3a\xb0\x8f\xfe\xf3\x08\x4d\x7a\x22\xc7\xfc\xa7\x72\xca\xdf\xaf\x43\xfe\x13\x84\x22\x1d\x24\x0c\x29\x95\xec\x27\x11\xfb\xc7\xe1\xae\x6d\x28\xf2\x96\x21\x47\x5b\xe2\xaf\x43\x86\x1a\xfd\x0c\x50\xd8\x56\x21\x46\x03\x16\x7b\x22\x2c\xb6\xbb\x90\xa2\x43\x85\x13\xfd\xcc\x70\xd9\x96\xa1\x43\x3b\xd3\x6e\xef\x27\x64\xe8\xd0\xe1\x42\x7b\x08\x15\x7a\x8a\x30\xa1\x3d\x84\x08\x0d\x36\x81\xc8\x36\xd8\x04\x62\xdb\x60\x13\xb8\xaf\x0d\x36\x81\xd5\x36\xd8\x04\x06\x9b\xc0\x60\x13\x18\x6c\x02\xeb\x03\x0e\x36\x81\xc1\x26\x10\xd7\x06\x9b\xc0\x61\x6c\x02\xa9\x61\x37\xdb\xc1\xf2\xd3\x84\xdb\x1c\x36\xd4\x66\xf7\x61\x36\x4f\x18\x62\xf3\x33\x53\xb8\x24\x87\xd3\x6c\x07\xe6\xcf\x25\x8c\xe6\x79\x84\xd0\x3c\x79\xf8\xcc\x63\x43\x67\x76\x13\x36\x93\x00\xed\x5b\xc2\x79\x25\xf3\x33\xa1\xf9\x63\x0b\x1f\x85\x00\x78\x5f\xf5\x23\xba\x90\x3c\x27\x55\xa3\x6d\xc1\x95\xa1\x02\x52\x2f\x0c\x1c\xa6\x02\x52\xe7\xf0\x86\x32\x48\x0f\xb5\x67\x53\x06\xe9\xbe\x33\x3b\x60\x2d\x24\xd5\xdc\xe8\x9a\x66\x3a\xa9\x20\x92\x33\x38\x0e\x25\x91\xd6\xda\x50\x12\x69\x28\x89\x34\x94\x44\x1a\x4a\x22\x0d\xa9\xfc\x86\x54\x7e\x61\x7b\x36\x76\x3c\x32\xa4\xf2\x4b\xfc\x74\x48\xe5\xd7\xd7\x86\x54\x7e\x43\x2a\xbf\xfb\x46\x1f\x52\xf9\x0d\xa9\xfc\xd2\x06\x1e\x52\xf9\x91\x21\x95\xdf\x90\xca\xef\x33\x4e\xe5\x37\x94\x44\xfa\x2c\xea\x82\x0c\x45\x41\x12\xc6\x7e\x5e\x45\x41\x86\x92\x48\x0f\x0e\x32\x94\x44\x1a\x50\xdf\x50\x12\xe9\x67\x8b\xfd\x86\x92\x48\x11\x83\x0c\x25\x91\x86\x92\x48\x0f\xb6\xa1\x24\xd2\x60\x47\x21\x83\x1d\x65\xb0\xa3\xa4\x7e\x35\xd8\x51\xee\x6f\x83\x1d\x25\xa5\x0d\x76\x94\xe8\xd1\x07\x3b\xca\x60\x47\x49\x1b\x78\xb0\xa3\x90\xc1\x8e\x32\xd8\x51\x3e\x63\x3b\xca\x50\x12\x69\x28\x89\x34\x94\x44\xf2\x23\x0f\x25\x91\x86\x92\x48\xd0\x86\x92\x48\x11\x23\x0c\x25\x91\x3e\xd7\x92\x48\x9d\xb0\xa0\xcf\xb7\x2e\x52\xfa\x32\x86\xe2\x48\x43\x71\xa4\x7b\xda\x50\x1c\x69\x28\x8e\xb4\xa9\x0d\xc5\x91\x86\xe2\x48\x0f\xb4\x21\x11\x62\x64\x1b\x12\x21\xc6\xb6\x21\x11\xe2\x7d\x6d\x48\x84\xb8\xda\x86\x44\x88\x43\x22\xc4\x21\x11\xe2\x90\x08\x71\x7d\xc0\x21\x11\xe2\x90\x08\x31\xae\x3d\xbd\x01\xee\x7f\x47\x22\xc4\xa1\x38\xd2\xb3\xac\x2c\x32\x94\x15\xe9\x69\xcf\xa7\xac\xc8\x50\x1c\xa9\xd3\xf9\x50\x1c\x69\x40\x61\x43\x71\xa4\xcf\x0e\x8b\x0d\xc5\x91\x36\x74\x3e\x14\x47\x1a\x8a\x23\x0d\xc5\x91\x06\x9b\x40\x6f\x1b\x6c\x02\x83\x4d\x20\x6c\x83\x4d\x60\xb5\x0d\x36\x81\xc1\x26\x30\xd8\x04\x06\x9b\xc0\xfa\x80\x83\x4d\x60\xb0\x09\xc4\xb5\xc1\x26\x30\x14\x47\x1a\x8a\x23\x0d\xc5\x91\xa0\x0d\xc5\x91\x86\xe2\x48\x43\x71\xa4\x8d\x1f\x83\xa2\x15\x25\x9b\xfb\x20\x3b\x16\x96\xcf\xda\xae\x2c\x07\xdf\x08\xa5\xeb\x26\xd3\x4d\xcd\x72\x38\x30\x3c\x4c\xc3\x18\x28\x2d\x6b\x67\x15\x80\x4a\x33\x6f\x58\x55\xc8\xa5\xa1\xb6\x23\x72\x25\xf3\x11\x39\xbb\xba\xbc\x66\xf5\x82\x67\xcc\x41\xdf\x37\x96\xa6\xdf\xbf\x6f\x1f\x97\x15\xcf\x68\x51\x80\xc6\xa2\x9d\x4d\x49\x97\x4e\x97\x7c\xb3\x24\xec\x93\x66\xb5\xa0\x05\xd1\x52\x16\x68\x7e\x31\x93\x01\x84\x58\x33\x5d\x73\xb6\x60\x84\xd6\x37\x5c\xd7\xb4\x5e\x92\x92\x69\x9a\x53\x4d\xef\x1f\xf5\x5b\xc5\xc2\x18\x0d\x2d\x49\x55\xb3\x31\xde\x80\xce\x3c\x00\x36\xbf\xf9\xfa\x9d\xbb\xdf\x34\xcf\x5d\x40\x82\x83\xf0\xeb\xe6\xc6\xef\xf6\xf1\xfd\xdc\x56\xee\x77\x4b\x8d\x00\x3c\xad\x8a\xa6\xe2\x0a\xf7\xec\x5e\x89\x34\x82\x2d\x49\x63\x42\x7a\xe1\x93\x89\xc5\x63\x41\xeb\x42\x2c\xba\x9a\x3d\x26\x16\xbc\x96\x02\xf8\xc8\x05\xad\x39\xbd\x29\x98\xb5\xa4\x79\xfb\x8a\xe5\xed\xd8\x03\xf0\x72\xee\xed\x0c\x18\xec\x72\xef\x95\xec\xa7\x67\x3d\x14\xac\xb3\xd2\x0b\xb1\xf8\x8e\x76\xd5\x0c\x62\xe3\x92\x88\x7d\xc1\x2c\x89\x92\xf3\xfe\x05\x45\x31\x9d\x31\xea\xb0\x31\x60\xf8\x7b\x5f\x88\x53\x5a\x99\x2e\x1e\xa6\x97\x69\x74\xf2\x3d\x2d\xdb\x0a\x5a\x1b\xb6\xab\x0f\xa1\xbe\x43\x8e\x5f\x59\x20\x32\x04\xa1\xaa\xb9\xd0\xb0\xd5\x67\xd7\xe7\x97\x97\x24\x9b\xd3\x9a\x66\x9a\xd5\x8a\xb0\x4f\x19\xab\x34\x39\xfe\xff\x1d\x3f\xdc\x6f\x24\x82\x06\xdc\xb7\xcb\xdd\xf8\xce\x01\x09\x94\x37\x62\xc2\x70\x76\xbf\x3a\xf9\xee\xec\xc3\x7f\xbd\x3f\x7b\x77\x71\x0a\x32\x0b\xfb\x54\x51\x91\xb3\x3e\x1e\xb4\x51\x2e\xc4\xa7\xaa\xd9\x82\xcb\x46\x15\x4b\x4f\xc2\x37\xdf\xb5\xd5\x4b\x66\xf0\x4f\xcf\x28\x66\xbf\x2d\x7a\xda\xdc\x29\xe8\x59\x68\x0b\xfd\xad\x19\xb0\x66\x4a\x16\x0b\x96\xf7\xa9\x57\x20\xd8\xd2\x6d\x47\x6b\x68\xad\x1a\xed\xb4\x48\xce\x76\xda\x88\x6c\x4e\xc5\x8c\xe5\x13\xf2\x46\x36\x66\xb4\x5f\xfd\x0a\xb6\xac\x66\x79\x93\xf5\xee\x18\xaa\x00\x51\x62\xfe\xd5\xc8\x71\x18\x86\xae\x2b\xac\x9e\xa6\x32\x5a\xb9\x4d\x0d\x4f\x45\x2d\x85\xa6\x9f\x5e\xc7\xd4\x61\x3b\xfa\x55\xf0\xe1\x91\xab\x8b\x27\xcd\xf4\x90\x1b\xc3\x15\x15\x50\xd2\xac\x20\x47\xe1\xdb\x7d\x7d\x5f\x98\xf9\xb1\x3c\x84\x1d\x0c\x6d\x64\x0b\x56\x83\xf6\xc9\x42\xce\x88\xd4\x6c\x46\xeb\xbc\x60\x0a\x82\xea\xee\xe6\x0c\x8a\x14\xa2\x28\x8d\x07\xd5\x33\x16\xf3\x9a\x32\x21\x7b\x35\x98\x6f\xd0\x8c\x0d\xc8\xfc\xa8\x67\x19\x29\x37\xef\x6d\x2d\x7b\x6a\x5c\x75\x6e\xdf\x35\x44\xed\x78\x63\xff\x26\x70\x3d\xb6\x56\x92\x49\x48\x46\x94\x61\x7f\xa7\xad\x11\xde\x3c\x8f\x30\xc4\x47\x2b\x0b\xe2\xad\x05\x99\x14\x53\x3e\x7b\x47\xab\xaf\xd8\xf2\x03\x9b\x26\x06\x10\x22\xe7\x6f\xf5\xdf\x80\x2c\x0d\xf9\xc1\x0e\xfb\xf9\xd6\x3d\xc6\x8b\xc5\xd8\x64\xd2\x4c\x2a\xd1\x86\x94\xb5\xca\x75\x28\x83\x58\x39\x61\xe7\xdc\x3c\x89\xa2\xa0\x1b\x27\x17\x2d\x71\x86\x14\xd5\xa2\x82\x68\x1b\xc3\xc7\x96\xe5\xe5\x8a\xb0\xe9\x94\x65\x9a\x2f\x58\xe1\x43\x99\x6d\x05\x4d\x1b\x5a\x7c\x43\xb3\xdb\x3b\x5a\xe7\x0a\x6a\x32\x52\xcd\x6f\x78\xc1\xf5\x32\xa6\xde\x25\x36\x2b\x35\xd9\xe8\x67\xa7\x98\x17\x4a\x53\x40\x5f\xae\x72\xa3\xd9\x61\x94\x2b\xa8\xb3\x8c\xe3\x6d\x74\x71\xc3\xd1\xc3\x41\xf1\xc0\x8c\xd5\x86\xc0\x15\x4b\x72\x57\xcb\x78\xd9\xef\x9d\x84\x80\xe1\xa9\x7c\x4d\xe6\x5a\x57\xea\xf5\x8b\x17\xad\x6c\x36\xe1\xf2\x45\x2e\x33\xf5\x22\x93\xc2\xf0\x18\xea\x85\x5c\x18\xba\xc8\xee\x5e\xdc\xc9\xfa\x96\x8b\xd9\xd8\x2c\x60\x8c\x17\x48\xbd\x00\x61\xfb\xc5\x2f\xe1\x7f\xfb\x80\x32\xe2\x9c\x87\x5e\x93\xa3\xa3\x88\xf7\x65\x85\xe2\xc1\x16\x90\x79\x0d\x1a\x84\x65\x87\x8c\x78\xc4\x62\x48\x04\xd7\x0a\xee\x95\xb3\x82\x58\x2e\x24\x61\xd9\x37\x52\x16\x8c\xf6\xbb\x73\x3d\x46\xf5\x09\x60\x9f\x8e\x55\xa3\xee\x65\x8b\x7a\xf1\x72\xd9\xeb\x59\xc9\xfc\x35\x51\x4d\x55\xc9\x5a\xab\x56\x2a\x35\x40\x31\xea\xfe\x09\x7a\x99\x11\xf9\xc1\x3f\x44\xb7\xb1\xef\x8f\xff\xf4\xd5\xc5\xbf\xff\xf9\xf8\xef\x3f\x84\xbf\x05\xf2\x69\xf0\x42\xc4\x34\x55\xc5\xb2\x89\x90\x39\x7b\x0f\x33\x80\x3f\x2d\x77\x77\x96\x65\xb2\x11\xda\xfe\xa0\xa9\x6e\xd4\x64\x2e\x95\xbe\xbc\xf2\x7f\x56\x32\x5f\xfd\x2b\xc2\x88\xba\x47\xba\x02\x7b\x7d\x45\x75\x44\x6a\x80\x24\xea\x42\x2b\xfe\x1d\xab\x55\x44\x32\x0c\x6c\x1d\x78\xb1\x5f\x86\x25\x77\x4b\x0a\xff\x7c\xeb\xa6\x6b\x70\xef\x5d\xcd\xb5\x06\x9f\x46\x9b\x8d\x40\x4e\x47\xee\x4a\x23\x23\xb5\x78\x95\xa4\xb8\x8d\xc6\x1c\x7e\xd7\xb6\x58\x1c\xcc\xde\xae\xcc\x6b\x4e\xac\x47\xe7\x9a\xbe\xf1\xec\xea\x92\x2c\x70\x37\xf6\xb0\x90\xc7\xa1\x82\x82\x6d\xc5\x62\x45\x21\x83\xb7\xbe\x77\xbb\x35\x01\x4b\x66\x19\x53\x98\x41\xcc\xa6\xd8\x7a\xad\xe8\xf3\x71\x21\x16\xa6\x6f\x45\xa6\x8c\xea\xa6\x66\x64\x46\xb5\xcb\x2c\xc2\x84\xe1\x6f\x23\xf4\x93\x4f\xcc\xe7\x41\x3d\xdd\x98\x2b\x6b\x5e\x5c\xc8\xa2\x29\x01\x59\x3d\x0b\xfe\x31\xc1\x28\x80\x8c\xa6\xe1\x08\xec\xb5\xf0\x87\x4e\xce\xcc\xa5\x5f\x80\x2b\x09\xbe\x83\xa5\xd3\x17\x60\x6d\x0d\x93\xac\x28\x4d\x6b\x9d\xa0\xbb\xf6\x7e\xe3\x4e\x0b\x60\x87\xa7\x04\xf3\x19\x60\x51\xf4\x9d\xeb\x52\xda\x86\x99\x84\xc8\x59\x51\xcd\xc1\xd0\x37\xf3\x7c\xea\x46\xc8\x1d\x79\xcf\x32\xc5\xff\x09\x92\x57\xc1\x4b\xae\x91\x5d\x7c\xf5\xc5\x1f\x83\xc9\xec\x05\x11\x3e\x82\x25\x8a\x86\x84\x4d\xbc\x93\x01\x83\x07\xd8\x26\xef\xb9\xe2\xde\x8b\x77\x69\xcb\x25\xb3\xe2\x2b\xf8\xb5\x98\x5e\x5a\xe8\x5b\xd0\xda\x49\xb7\x55\x73\x53\x70\x35\x8f\x37\x8d\x5f\x4e\xfd\x6e\x99\x3e\x14\x03\xc7\x00\x5d\x37\xcc\xdb\x40\x5b\xbc\x6f\xd6\xb4\x32\x93\x04\x23\xd6\x46\x9d\x6a\x27\x85\x53\xab\x2e\xbe\x02\x43\xa7\xd7\x67\xa9\xc9\x2f\x1e\xb5\x9e\x29\x2d\xd4\x6e\x17\x64\xc4\x99\xba\x96\xb5\x57\x61\xd5\x4c\x37\xb5\x68\x7d\x81\xae\x64\x4e\xb2\x9a\x61\xe4\xc7\x1e\x18\x66\x12\x0a\x0a\xb0\xbe\x88\x4f\xaa\xed\x98\x83\x24\xf4\x68\xc6\x08\xf1\x23\xa2\x7a\x44\x7c\xa8\x99\xeb\xc6\x8a\xc4\x12\x4c\xd3\xde\xd9\x0b\xe5\x73\x19\x99\x23\x75\xf9\xad\x2c\xb4\x40\xa7\xc7\x93\xc9\x31\xce\x44\xd6\x88\x6e\x51\x0a\x35\xcf\xf7\x82\x72\x5a\x82\xb6\xa5\xfa\x42\x04\xc2\xbf\xdd\xb2\xd2\xf0\xed\x6e\x59\x4e\x7d\x99\xc2\x63\x1c\x90\xf1\x72\xa9\x75\xde\x1e\x44\x16\x73\xa3\xb9\x0d\xf3\x88\xe2\x35\xfa\x0e\xf9\x44\x3f\x48\x78\x94\x35\x27\xfe\xd8\x30\xa5\x63\x84\xf6\x13\xfc\x6c\x92\x55\xcd\xc8\x76\x31\x29\x59\x29\xeb\xa5\xff\x93\x55\x73\x56\xb2\x9a\x16\x63\xa5\x65\x4d\x67\x6c\xe4\x07\xc0\xcf\xfc\x5f\xf8\x61\x67\x0a\xeb\x5f\xa3\x85\x20\x6b\xea\x9a\x09\x5d\x2c\x9d\x6c\xf9\xc4\x7c\x9f\xdb\xc7\x1d\x33\x69\xfe\xb8\xb6\xbc\x2f\xc7\xde\xf8\x86\x3a\x39\xbf\x2a\x50\x11\xe3\xed\x51\xa3\x96\x10\x80\x0d\x00\x09\xa5\x3a\xde\xc7\xed\xcf\xf9\x82\xab\xad\x22\x7f\xae\xbd\x07\x15\xb8\x1b\x35\xba\x6a\xb4\x4d\x1f\xe9\xa5\x8a\x4f\x95\x54\x60\x1d\xf0\xd9\xab\x3a\xe2\xe4\xab\x18\x2d\x11\xe0\x7e\xcd\x6a\xf1\x9a\xfc\xe7\xc9\x7f\xfc\xe6\xa7\xf1\xe9\x5f\x4e\x4e\xbe\x7f\x39\xfe\xd7\xbf\xff\xe6\xe4\x3f\x26\xf0\x8f\x5f\x9f\xfe\xe5\xf4\x27\xf7\xc7\x6f\x4e\x4f\x4f\x4e\xbe\xff\xea\xdd\x5f\x3f\x5e\x5d\xfc\x9d\x9f\xfe\xf4\xbd\x68\xca\x5b\xfc\xeb\xa7\x93\xef\xd9\xc5\xdf\x23\x3b\x39\x3d\xfd\xcb\xaf\xa2\xa6\x47\xc5\xf2\x9b\x08\xac\x81\x6d\xbc\x45\x4e\xce\xf6\xab\x6d\x9d\x95\xb8\xd0\x63\x59\x8f\xf1\xf3\xd7\xc0\x24\x45\x74\xe2\x8e\x6d\x1b\x38\xff\xe0\x6e\x6b\x8b\xf1\x3c\xf1\xdc\x03\x20\x3f\x86\x00\x28\x96\xd5\x4c\xef\xca\xbc\x81\xbd\x39\x6e\x70\xc5\xed\xed\xb9\x4b\xc2\x87\xb4\x78\xf8\x54\x82\xb0\x5f\x2d\x67\x65\xd8\xad\x49\xcb\x30\x51\x82\x72\xa9\x7d\xef\x96\x45\xc6\xa2\x0e\x16\x92\xc1\x42\x32\x58\x48\xba\x52\xfe\x35\xde\xa1\x67\x6e\x1e\x61\x62\xf1\x90\x95\x3d\xc1\xd9\xeb\x2d\xe4\x05\x0e\x1d\xbe\x1c\x73\xad\x25\xa9\x64\xd5\x14\x54\xdf\xe3\x43\x92\xe0\xfd\xd5\xaf\xe3\xf2\xa8\xec\xfc\xbf\x2e\xdf\x5c\xbc\xff\x78\xf9\xf6\xf2\xe2\xc3\x84\x9c\x15\x45\xa8\x76\xbb\x1f\xe2\x5a\x49\x1d\x39\x6b\x42\xd1\xd5\x0b\xf4\x73\x77\x4e\xa1\xd2\xfa\xd0\x70\xd5\x2a\xea\x30\xdb\x31\x12\x28\xeb\x41\xc1\x85\xcf\x79\x7c\xef\x90\x9e\x61\xf3\xb1\x0e\x6b\x69\xce\xd1\x93\x56\x69\xb7\x4c\x98\xa5\xa6\xb7\xe0\xfd\x93\xb1\x9c\x89\xec\x01\x59\xef\x3b\x8c\x9f\x70\x7b\x76\x63\xc4\x0c\x70\xd0\x43\x8c\x42\xf2\xa6\x2a\x78\x66\xce\xc7\x6b\x24\xa3\xfb\xbe\x2c\xcb\x46\x3f\xe4\xc9\xb5\x73\x3f\x3c\x03\x69\xd6\xd7\x23\x70\xc7\x03\xfa\xe6\xc5\x3d\x1f\xeb\xe7\x0d\x95\xe0\xcc\x82\x97\xf2\xfe\xc3\x8f\x62\x09\xe2\x08\xb7\xf7\xe5\xe8\xe5\x74\xd6\x28\x76\x6b\x5c\xed\x52\xea\x07\x7b\xd9\x83\x3b\x4a\x1c\x9d\x4e\xa7\xd1\xdb\xd2\xe7\x43\xd2\xe6\x03\xd2\xe5\xed\x69\xf2\xd3\xd1\xe3\x24\x5a\x1c\x4f\x87\xe3\x69\x70\x82\x87\x42\x2a\xdd\x8d\xa7\xb9\xdb\x4a\x42\x55\xcd\xa6\xfc\xd3\x2e\x1d\x4b\xbf\x71\x4a\x0c\xcd\x3e\x69\xeb\xce\x5e\x31\xe1\x83\x9f\x9c\xde\x10\xfc\xd6\x3f\x3b\x3f\x5c\x94\x47\xd2\x11\xe9\xf5\x26\x79\x67\xc0\xa2\x03\x16\xed\xb4\x01\x8b\xf6\x4a\x31\xcf\x09\x85\x0a\x99\xf7\x26\x51\x8a\xbd\x4d\xef\x83\xbe\x56\x72\xab\xa0\x11\xca\x2d\x1c\x4c\x9d\xce\xb3\xb8\x92\x00\xd1\x53\xae\xdb\x00\xb9\xfb\x01\xed\x7a\x43\x8f\x10\xf9\x66\xbf\x3c\x56\x2e\x47\xd8\x4a\xff\x2b\xe5\x6a\x30\x14\xe9\xe1\xb1\x12\x41\x19\x79\xd4\x06\x73\xa9\xbd\xa0\x4a\xf1\x99\x18\x57\x32\x1f\x9b\x51\x5e\x3c\xc8\xcf\x1f\x32\x1a\xc9\xab\xb4\x1f\x7b\xdc\x1f\xbc\xc1\x27\x10\x1c\x0c\x5a\x6b\x34\x0b\xac\x41\xde\x4e\xe0\x52\x54\x45\x08\xa6\xbd\x62\xd0\x23\x0f\xa7\xa4\x82\xce\xd8\xd8\x4e\x76\xec\x27\x3b\xf6\x73\x7b\xc4\x79\xc5\x10\xb3\xac\xa0\xfc\xe1\x78\xdf\x14\x12\x76\x0e\xbd\xd9\xba\x3f\x3e\x20\x7b\xa5\xfa\x86\x93\x57\xb9\x40\x57\x45\xf7\x13\x7e\xfc\xb0\x0d\x1e\x2e\x8b\x4f\xa0\xb8\xe1\x20\x1f\xfc\x3a\xa0\x91\x39\xf0\x51\x0a\x2f\xe0\xc3\x84\xe8\xcd\x52\xd0\x92\x67\x0e\xca\xce\x0a\x08\xae\xe5\x52\x74\xdc\x5e\xe2\x87\xe6\x8a\x70\x0f\x56\xe4\x52\x93\x8c\x0a\xb4\x5c\x5a\x37\x08\x83\x30\x42\xef\x87\x07\xb6\x23\x2a\xb8\x3b\x22\xa4\xbb\x73\xc8\x1f\xc2\x03\x09\xe3\x52\xa4\x60\x84\x09\x5d\x43\xa6\xdb\x2b\x99\x1b\xd2\x32\xe9\xbc\xdd\xe3\xd2\x13\xcd\x87\xc5\xea\xe5\x7b\x82\xe3\xc8\xf3\x61\xe9\x02\x02\x11\x72\xee\x9d\x2d\xad\x64\x3e\xd9\x70\x25\xe2\x4b\x18\x5d\xc9\xdc\xc6\x80\xeb\x0e\xbc\x99\xdb\x02\xa0\x56\xd2\x5b\x17\x99\xed\x8d\x4a\x74\x41\x79\x11\x11\x3c\x44\x20\xe5\xa8\xe2\x39\x23\x34\x06\x77\xfa\x89\xc5\xb3\x43\xd6\x44\xbe\x8f\x43\xf8\x80\x5d\xbb\x44\x5b\xb0\xff\xd9\x5c\x2a\x26\xe0\xbe\x51\x37\xb6\x2f\x14\xe8\xc0\x3e\x47\x1c\x19\xc3\x72\x5e\x4e\x91\xcd\x1d\x11\xb6\x60\xf5\x52\x43\xb9\x2e\x97\xd4\x15\xbb\x31\xe3\x97\x34\x0f\x76\x7d\x44\xa4\xe1\xcb\xee\x78\x94\x13\x0f\xe0\x09\x9c\x9f\x6a\x0a\xed\x79\x6d\x3b\xfb\x9d\x9d\xc6\x7a\x00\xbb\xe1\xe2\x6e\x7b\xb3\xf5\xf6\x5e\xc8\xfb\x22\xe3\x4b\x5a\xdd\xfb\x15\x7a\x5d\xec\x8a\x48\x7d\x8d\x5e\x21\xf8\xc9\x8d\x35\xbe\x97\xf4\x13\x2f\x9b\x92\x50\xf4\xbb\x91\xd3\x0d\x0c\x44\x54\xb2\x80\x5d\xb0\x03\x1b\xd8\x00\x75\x1f\x1f\x40\xe2\xd1\x6a\x7a\x4a\x9b\x67\xea\x36\x10\xe5\x2e\x90\xe6\x26\x90\xe0\x1e\xb0\xb5\x5b\x80\x73\x00\xda\x15\x20\x5b\x94\xb6\x06\xca\x5c\xf4\x82\xb2\xa3\xaf\x0f\xc3\xf2\xe5\xb4\x1d\x83\x2b\x22\x4b\xae\xb5\xf5\xb3\x09\x28\xc0\x88\x70\xdd\x71\x4a\xb1\x17\x8c\x4f\x91\xd0\x70\x45\xd8\xa7\xaa\xe0\x19\x07\xdf\x26\xe7\x7f\xf9\x30\xa3\xe7\x71\xa2\x4d\x55\xc5\xcb\x0a\x93\x55\xc1\x45\x19\x3b\x1e\xd2\x86\x7d\xfa\x59\xda\x38\x65\xf6\x29\x63\x2c\xb7\x13\x19\xee\xeb\x70\x5f\x93\xef\xab\xda\x91\x2a\x22\x54\x43\xb4\x79\x73\xbc\x3a\xc2\x5c\x25\xc8\x69\x83\x8a\x01\x07\x5d\x0f\x5d\xcc\x0b\x97\x55\xfd\x03\x03\xf3\xde\x35\xd3\xca\x66\xe8\x81\x9e\x1e\xd2\xab\xad\x65\x69\xf6\x99\xd8\x5d\xba\x2b\x0a\x8a\xc3\xe0\x8d\x36\xbf\xc9\x03\x52\xb2\x5e\x65\x6f\x41\xd7\xc1\xca\xaa\xa0\xba\xd5\x84\x3c\x22\x11\x4a\x0c\x13\x9f\x92\xc8\xf8\x69\x53\x17\xef\x47\x6c\xeb\x65\x83\x9f\x30\x05\xf1\xb6\x49\x87\xf7\x20\x30\xf6\x3b\x71\x45\x26\x0f\x8e\x17\x2c\xa3\xbc\xbc\xf6\x9d\x12\x38\x41\x0c\x8b\x4f\xfb\x9b\x2e\x87\xed\x39\xb5\xef\xbe\x92\xf9\x26\xec\x5e\x6c\xc2\xde\xf4\xbd\x3b\x50\x52\xde\x83\xa7\xe1\x3d\x64\xe2\xdd\xa4\x54\xbb\x29\xc9\x13\xa3\x13\x27\x6e\xef\x95\x9b\x92\x30\x71\xcb\x0f\x23\xd3\xe2\xa6\xc0\xee\x81\x53\xdf\x1e\x38\xd9\xed\x53\xa4\xb7\xdd\x9b\xfc\x10\x01\x9a\xe9\x96\x3d\x2d\x0b\x5b\xd7\x27\xce\xd2\xf3\xb1\x7d\x1f\xb6\xa3\x75\x02\x0f\x7a\x3a\x8c\x5b\xda\x83\x90\xfd\xd1\xf1\xb9\x06\x3b\xb5\x93\x06\x18\xd7\x9a\x66\x73\x9b\xa4\x16\x7f\x31\x90\x20\x96\xc4\x00\x81\x46\x4a\x6e\xf3\x64\x3e\x74\xce\x73\x46\x74\xcd\xab\x82\x91\x3f\xf9\x0b\x31\x42\xdb\xfe\x9f\x83\x54\x61\x2e\xa9\x68\x0b\x8c\x7f\x72\xff\xfa\xf3\x23\x33\xd4\xc5\x31\x39\x38\xa5\x5d\xf2\xaa\x17\xd0\x23\xe1\x22\x07\x0f\x46\x64\x85\x70\xf3\x70\x30\xb3\xb5\xb0\xee\x89\xcd\xee\x89\xa9\x72\xad\x09\x16\x5c\x1d\xdb\x97\x7b\x59\x07\xf0\xf0\x6c\x55\x13\xde\xc3\xc1\xdf\x61\x46\xde\xcb\x6b\x6b\xb6\x1d\x91\x2b\xd0\x0e\xb7\x4f\xe0\xce\xbf\x97\x17\x9f\x58\xd6\xe8\x1e\xa7\x9b\x48\xf4\xdf\xcb\x33\xa6\xed\xe7\x57\x2d\x43\x89\x1b\xd3\x61\x28\xdb\x8b\x15\xb2\x94\x0f\x6e\xec\x2d\x5b\xf6\xee\xaa\x65\x12\x2c\x33\x6b\x55\xe3\x1e\x46\x1d\x91\x47\xbe\xe1\xff\x38\x53\x5e\x79\xc3\x05\x4e\x05\x07\x76\xe7\x0c\x63\xbb\xf3\x30\x12\x48\x51\x44\x4c\x22\x72\xb7\xe3\x38\xde\x54\xe7\xad\x78\x4e\xd7\xd3\x8b\xbe\x2d\xdd\xc4\xdf\x06\x4c\xed\xc5\x8f\x0d\x2d\x26\x9d\xd4\x6d\xf8\xa8\xef\xba\x59\xb7\xe6\x55\xba\x79\xc7\x8b\x3c\xa3\xb5\x8d\xad\x03\xf4\x43\x94\xb4\x66\x58\xc0\x7e\x59\xaf\x03\xbb\x43\x80\x2d\xf0\x28\xf4\xe5\xad\x68\xad\x79\xd6\x14\xb4\x26\xe6\x8e\xcf\x64\x1d\x95\x9b\xad\xf7\x30\x5b\x68\xbe\x66\x99\x14\xf9\x4e\x85\xe8\x8f\xab\x9d\xaf\x7a\x2b\x57\xac\xe6\x12\x73\x05\xf1\x92\xad\x5e\xaf\x93\x8e\x03\x4a\x9f\x1c\x36\x75\xc8\xce\xe3\x96\x51\xa8\x19\xed\xda\x94\xb1\x04\xdd\x69\x40\x70\xfc\x6d\x9f\x90\x2f\x97\x4e\x45\xdb\xc7\x90\x73\xed\xf2\x09\x28\xa6\x5d\x3e\x45\x77\x15\xed\x49\xb6\x68\x64\x2a\x6b\xc8\x53\x78\x92\x4b\x8c\xa3\x5f\xf0\x4c\x9f\x4e\xc8\xff\x9f\xd5\x32\x22\x11\xa5\x60\x33\x8c\xe5\xb6\x17\xdb\xeb\xa3\x6a\x46\xad\x97\xfe\x4b\x72\x02\x9d\x12\x5e\x96\x2c\xe7\x54\xb3\x62\x79\x8a\xea\x29\x46\xd4\x52\x69\xd6\x63\x9b\x8b\x57\x2b\x62\xe8\x25\xbc\xfb\xfb\xdf\x3d\xf0\xe6\x1e\x12\x88\xda\x24\x85\xed\xc6\xa2\xa7\xdc\x0a\xf4\xf8\xd4\xda\xbd\xf2\xfe\xbd\xf2\x59\x18\x8e\xd0\x26\x37\x77\xb8\xd9\xc3\xd6\x3f\x0c\x80\x52\x52\xb3\x19\xdc\x4f\xbc\x73\x8f\xbc\x9d\x18\x9b\xfb\x4e\x36\xe2\x7e\x1b\x48\x67\xdf\xbe\xb6\x2a\xb8\xef\x82\x0f\x53\x53\x0b\xef\x96\x21\x0c\x66\x12\x58\x5d\x28\x46\xeb\x03\x07\x66\x10\x1b\xbe\xd5\x06\xb1\x44\x18\xcb\x77\x98\x2e\x18\xe6\xd2\x93\x3f\x6b\x27\x49\x85\xfd\x40\xbb\xbc\x0a\x57\x2b\x19\x24\x82\xb4\xb6\xae\x2c\x6b\x90\x25\xa1\x85\x60\x98\x0c\xcb\x6d\xd8\x63\x1f\xda\x09\x32\x46\x1c\xbf\xde\x8d\x37\x33\xee\x46\x2d\x2b\x3a\x83\xcb\xba\xcb\x4d\x59\xed\x9b\xe4\x4c\xb3\xba\xe4\x82\x29\x32\x97\x77\xf8\x3b\x32\x03\x95\x7d\x8b\xe5\xad\xe7\xc1\x5c\xf6\xee\x08\x96\x60\x6d\x13\x08\x23\xf6\x00\x87\xd1\x3b\xba\x24\xb4\x96\x8d\xe8\x4d\x47\x00\x5c\xb4\xa7\x1c\xef\x56\x26\xfd\x5e\x0a\xe6\x9d\x51\xfa\xa8\x6c\x87\xb4\xdd\x30\x4d\xcd\x85\x7f\x35\x79\xf5\x32\x6a\x0e\x1f\x58\xd6\xd4\x8a\x2f\xd8\x07\x46\xf3\x6f\x8c\xc4\xdd\xa6\x83\xb9\x9c\x5e\x49\xa5\xf8\x0d\x66\xe1\x31\x0c\x12\xe6\xd8\x5a\x9f\xb0\xe7\x50\x61\xe6\xb2\x26\x8d\xf0\x22\x42\xcf\x2c\x2c\x99\x0f\xad\xa2\xa6\x93\xd3\x9d\x40\x5a\x62\x32\x6f\xd8\xcb\x15\xfb\x8c\xf3\x32\x77\xb8\x6a\x27\xf3\xaa\xed\x66\xef\x12\xf2\xdf\xe1\xb5\x86\xbe\xc7\xa0\x3b\xe1\x53\xb0\xda\x8d\xf0\xd1\x5d\xcd\x35\x0b\xe8\xd6\x09\x66\xfb\xe9\x1e\x56\xcf\xb6\x77\x53\x1d\x43\x07\x31\xfb\xd1\xef\x07\x5d\xaf\x82\xe1\x2e\x77\x66\x1d\xc6\xdb\x82\x3c\xce\xd7\xbb\xdd\x35\x8b\x21\x5a\x7c\x39\xa7\x22\x2f\x7a\xe1\xd8\xaf\xa0\x58\xf6\x66\x61\x02\x6f\x81\xf6\xba\xc1\x3e\x8e\x42\x26\x75\x4e\x0d\x5f\x09\xbc\x24\xe8\x6d\x45\xee\x6f\x58\x70\x58\xa9\xe3\x20\x30\x20\xca\x0a\x91\x86\xbd\xee\x6f\xb8\xb2\xd7\x1b\x34\x25\x40\xb9\x2d\x7f\x5b\xd2\xde\x0a\x28\xc1\xfa\xdb\xcd\x9c\x58\xf6\x6a\xc3\x68\x2d\x72\x59\x19\x6f\xdb\xb1\x46\x06\xde\x91\x25\xf7\x59\x61\x1c\xf3\xdb\x22\xec\xda\x70\x1f\x25\x6b\x27\xd6\x33\xd4\xea\xb4\x3d\x0a\x5c\x9b\xf3\xe6\x59\xf9\x49\xf5\x8c\xd3\x3f\xe5\xae\x3c\x83\x0a\xb5\x4e\x5a\x30\x4d\x31\x5c\x37\x22\xa7\xfd\x4a\x52\xae\x19\x13\x20\xad\x80\x16\xce\x29\x92\xac\xef\x1c\x55\x52\xc4\x00\x5a\xcf\x21\x1b\x3c\xd3\x4f\x3e\xf0\xb3\x9e\xc1\x80\xc6\x9c\xc8\x7a\xe5\x36\x38\x01\x6c\x03\x25\x49\x9d\x3d\x10\xe6\xb6\x5f\x04\xaa\x40\xd0\x32\x1b\xd8\x0a\xff\x72\xea\xaf\xce\x6e\x82\xbd\x9a\x9b\x7d\xb3\x8a\x1b\x92\x8d\x85\x20\x77\xac\xee\xe7\x1a\x13\xe8\xc3\xd1\x11\x39\xc1\x7e\x8e\x15\xa9\xa5\xd4\xbb\x21\xea\x76\x7f\x2e\x3e\x55\x3b\x55\x42\x5d\xd8\xe2\x01\x31\x99\xd9\x76\xb4\x59\x5f\xb2\x39\x5d\x30\x45\x14\x2f\x79\x41\xeb\x02\x32\xb3\x5f\xe3\xf2\x20\x04\x6d\x63\x2e\xc0\x88\xd2\x19\x81\xc6\x3b\x9c\x67\xd0\xdd\x3e\xcf\x91\xb8\x35\x98\x23\x02\x7a\xe3\xd6\x64\xe6\x58\x36\xba\xa1\x45\xb1\x24\xec\x53\x56\x34\x06\x5f\xee\x44\x58\xde\x46\x4e\x5e\x15\x91\x2b\xeb\xa8\x7f\x40\x01\xb9\xab\xf2\x34\xfc\x6a\xee\xc0\x09\x04\x62\x34\x9b\x80\x0d\x04\xa2\x1e\x68\x96\x31\xa5\x5c\x0e\x83\x65\x98\x87\xc1\xaf\xe1\x73\x29\xb5\x43\xef\xd4\x45\x41\x95\xe6\xd9\x97\x85\xcc\x6e\xaf\xb5\xac\x77\xaa\x2b\xda\xd4\xff\x4a\x01\xa3\xb3\xbf\x5d\x1b\xe4\x7d\x1b\x24\x8e\xb2\x8e\x98\xa1\x61\x8a\xf6\x0c\x74\xdb\xdc\xb0\x82\xe9\x63\x05\xf2\x23\x29\x69\x36\xc7\x32\x5a\x39\x66\x20\x75\xa9\xc9\xac\xfa\xfa\xc1\x23\xc2\xf6\xc6\xcc\x12\x0a\xd3\xbd\x36\x73\x5c\x5f\x06\xfa\x9b\xd9\x77\x30\xbb\x07\x6a\xb0\xc0\x18\xe8\x02\xe9\xb8\x18\xeb\x9a\xf5\xb1\x53\x1b\xf7\x09\x42\x52\x6d\x6d\x19\x5e\xa3\xa7\x9b\x9d\x3f\xbb\x51\x93\x4c\xf1\x09\xbd\x53\x93\x4c\x96\xe4\xfc\xfa\x92\xe4\x35\x5f\xf4\x87\x38\x24\xba\x90\xda\xa4\x7f\x2f\xec\x0d\xff\x25\xbd\x53\x0c\x27\x7a\x63\x26\x0a\x25\xd0\x22\x70\xc7\x4e\x9d\xa2\x70\x2e\x97\x6f\x1e\x7c\x31\xde\xe1\x69\xaa\x3e\x9a\x39\xf6\xbc\xb5\x8d\x0b\x0c\xf6\xec\x54\xa5\x53\x5e\x30\x54\x01\xe3\xc9\x76\x53\x68\x02\xd0\x2f\x65\x43\xee\x28\x5a\x33\x80\x80\x45\x05\x53\xf3\xea\x35\xb9\x10\xaa\xa9\x59\x6b\x24\x5b\x1d\x6c\x13\x4b\x0e\x37\xc5\x82\xac\x98\x45\xa9\xa7\xb1\x5d\x7c\xa2\x65\x55\x30\xf5\x9a\x1c\xb1\x4f\xfa\x77\x47\x23\x72\xf4\x69\xaa\xcc\xff\x84\x9e\xaa\xa3\x09\xb9\x2c\xbd\x0b\x35\x17\x53\x56\xd7\x3e\xfe\x1a\x3f\x30\x2c\x79\x47\x8a\xea\x1f\xf3\xd0\x70\x4b\xd2\x9c\x5f\xc0\x3c\xd4\xaf\x49\x23\x5b\xc1\x91\xef\xdc\x81\x52\xf0\x40\xec\x06\x88\x2e\xa7\xce\x63\x1e\xe5\x2a\xcb\xc2\xc3\x80\xb6\x1b\x03\x36\x76\x1c\x43\x79\xd2\x00\xe5\xad\x4f\x77\x49\x5e\xe4\x6c\xf1\x42\xe5\xf4\xd5\x08\xa6\xaa\x6c\xc8\x77\x77\x5d\x54\x91\xa3\xb8\xe2\x03\xd7\x8e\x73\x1b\x85\x3b\xd1\xf6\x64\x10\xb1\x1b\x12\xfc\x5e\x5e\x1e\x81\xe8\x62\xc6\xce\xa8\x20\x05\xa3\x0b\x2b\xce\x21\xca\x58\xa2\x81\xa1\x97\xc3\x4a\x31\xd6\x90\xae\xc1\xe6\xb7\x5f\xf4\x8a\xd7\x31\x3a\x18\xb2\x15\x34\xb9\xbe\x9d\xd5\xa6\x6e\x6c\x2e\xa7\xa9\xac\x33\x2f\x73\x5a\x2d\x0d\xd3\x80\x1b\xb8\xe8\xd8\x35\x9e\xf7\x85\x8d\x4b\x55\xe6\xa8\xc8\x5e\x7c\x1f\x6d\xdf\xa0\x41\x16\xfc\xc7\x86\x91\xcb\x37\xbe\x22\x0b\xab\x15\x57\xda\x08\x14\x79\x87\xef\xe1\xc8\x0c\x9d\x9c\x95\xf4\x9f\x52\x90\x8b\x2f\xaf\x6d\x47\x11\xa0\xf8\xac\x11\x24\xfd\x67\x53\x33\xc3\xe3\xed\x94\xb5\x74\x9d\xae\xf2\x93\xe6\x39\x79\x43\x35\x45\xb6\xd2\x06\x16\x89\x96\xe4\x19\xa6\xf0\x86\x8b\xdc\xfe\xb4\x25\x4b\xe8\x87\x4f\xe2\x03\x83\x69\x9b\xcd\xeb\x5b\xe3\x46\xe6\xcf\x40\x0d\x72\x7f\xa6\xaf\x24\xfe\x6f\x0f\xdc\x98\x99\x4d\x44\x79\x0c\x7c\xf1\xdb\x0f\x97\x3b\xe2\xda\x32\xe0\xf0\x67\xef\x64\x9e\xca\xba\x1d\x07\x9f\x3a\x82\xfa\x6f\x06\x2e\xce\xf1\x39\x29\x4d\x9f\xa0\xb8\x1a\x81\xf2\x96\x7c\x03\xba\x4d\xf8\xe7\xdf\x6a\xae\xd9\xa4\x3f\xa3\x6d\x02\xeb\xe0\x36\x30\x71\x19\xee\x33\xb7\x84\x30\x17\x4f\x6e\xa0\x1f\x90\x8b\xe5\x0f\x6e\x0a\x79\x43\xec\x95\xdf\xf5\xdc\xbf\xfd\x70\xb9\xc5\xd4\xbf\xfd\x70\xe9\x66\x6e\xfe\x29\xa7\x87\x9b\xf4\x21\x18\xfe\xb7\x2b\xfc\x77\x0a\x2f\xd6\xa6\xc2\x5d\xe5\xe2\x77\xc9\xc2\x4f\x0e\xc6\xbc\x6f\x97\x62\xc8\x8c\xd5\x27\xf4\x73\x11\x91\x0c\xb9\x7b\xf9\xcd\x37\x84\x7d\xaa\x10\xa3\x06\x2e\x93\xd7\x73\x0a\xf9\xab\x5d\xaa\x4c\x04\x3f\x03\x8f\xca\x90\x6c\x07\x88\x84\x62\x95\x32\x43\x0d\x50\x4b\x9f\xbf\x76\x8e\xe0\xfe\x8b\xcd\x1f\xbc\x83\x00\xcc\xfc\x35\xd2\x00\x82\xf1\x98\x79\x00\xf7\x27\x68\xae\x10\xfe\x27\x1b\x77\x8f\xd9\xae\x14\xd3\xa7\x93\x8e\x6e\x5d\xc1\x94\x77\x8a\x8c\x0e\xc2\x78\xae\x59\x30\xc9\x89\xf9\xed\x05\xd8\x47\x4f\x27\xad\xc5\x0c\xb2\x43\xb4\xbc\x69\xc4\x18\xe6\x52\x7c\x78\x34\xf7\x9a\x96\xf2\x36\xba\xb8\x09\x9c\xbb\xc1\x0c\x3b\xe7\x83\x4c\xa7\x1b\xf9\x20\xf8\xc1\x15\xc4\xdf\x27\x2b\x04\x03\x6d\xc1\x0a\xc1\x77\x5b\xb3\x42\x50\x5f\xe4\xd9\xb0\x42\x98\x23\x30\x8a\x19\x82\xab\xdb\xfb\x66\x3c\x3b\x74\x90\x7b\x9b\xff\x9c\xee\x6d\x7b\x58\x89\x7b\xd6\x7e\xe8\x18\x18\x9f\x20\xc7\x25\xb7\xef\x04\xa4\xe2\x45\xbc\xb6\xd4\xc0\x16\xb9\x44\x76\xcd\x5c\xbf\xaf\x22\xf2\xf4\x27\x20\x70\x0f\x58\xa9\xab\x72\xdf\xb9\x45\x21\x91\x82\xc7\x24\xaa\xfc\x5d\xe4\x24\x33\x56\xcd\xa7\x3b\xf5\x72\x36\x3d\xbe\xbd\xee\x9a\x71\xce\x59\x35\x27\x6f\xaf\x37\xa0\x3c\x38\x1c\x58\x96\x42\xe3\xce\xb1\x22\x05\x9f\x32\xf0\x49\x48\xc0\x7a\xe7\x38\x6a\x07\xe5\x79\x67\x34\x87\xe2\x70\xb1\x5e\x05\x2b\x24\x29\xa4\x98\x19\xe6\x20\xae\x6a\xce\x1e\x90\x54\x29\x05\xd7\xb2\x7e\xd8\x1b\x22\x1e\xf1\xb8\xee\xf6\x81\x78\x5c\xdf\x66\xeb\xda\x02\x23\xef\x82\xa7\x94\x64\xb2\x28\x58\xa6\x6d\xb9\x53\x38\xf6\xa8\x15\x62\xdb\xa0\x34\x61\x56\x67\x39\xb9\xfd\x23\xa8\x4d\xac\x82\xe4\x05\x1e\xe5\x8b\x0f\x17\x67\x6f\xde\x5d\x4c\xca\xfc\x97\x73\x79\x37\xd6\x72\xdc\x28\x36\xe6\xfd\xc5\x3b\x3e\xe3\xe8\x4c\x12\x5d\x8f\xad\xcb\x6a\x57\xb6\xce\xac\x4b\x0c\xfc\x9a\x7c\xab\xd0\x7b\xc3\x7b\xee\xb0\x1c\xac\xd9\x23\x52\x53\x9b\xef\x93\xe2\x55\x9d\x36\x45\x81\xa7\x69\xee\xd1\x28\xd4\x47\xbf\xf8\xfc\x18\xde\xce\x26\x3c\x7b\xee\xf7\xf0\xd7\x22\x85\x62\xf7\xf3\xcf\x64\xab\xc3\x6a\x7b\xef\x1e\xd7\x75\xe7\xb9\x76\x75\x03\xb5\x84\x50\x31\x08\xea\x36\x8c\xed\xb7\x8a\xd5\x5d\x30\x65\x3a\x83\xdd\x79\xd1\x28\x56\x4f\xb0\xfb\x67\xb8\xf7\x71\x5c\x45\x5c\xf6\x6b\xf2\x88\x9d\xff\xc0\xa6\x9b\x36\xde\x3e\xf6\x1e\x37\x8e\xf3\xa7\x8d\x9e\x33\xa1\xb9\xcd\x6e\x69\x39\xaf\x8d\x27\x81\x81\xf9\xcf\x70\xeb\x23\xeb\x3e\xa5\x55\x69\x1a\x2a\x1b\xb5\x6d\xa8\x6c\xf4\x3c\x2a\x1b\x3d\xa6\x5c\x9b\xc1\x9e\xfb\xc0\x3a\xa6\x5f\x48\x14\x17\x72\x27\x3e\xf5\x55\x4d\x73\xa9\xf0\x1d\xb3\x87\x1d\x7c\x42\xf3\x92\xc7\x94\xbd\x7d\x76\x98\x3c\xe3\x22\xef\xdb\xcc\x44\xd1\x0b\x7a\xec\x8a\x5e\xf6\x99\x35\xc4\x7b\x27\x2e\xea\xb4\x4c\x98\x49\xdc\x3a\x6c\x75\xfd\xb5\x92\xe4\x2f\x1c\x26\x4d\xe5\x64\xe7\xb6\xb5\xbe\x09\xbf\x07\x8d\x93\xac\x98\x41\x24\xd9\xed\x44\xd6\xb3\xc7\x39\x60\xad\x42\x45\xb9\x54\x3f\x16\x63\x1c\x6b\x5c\xe5\x2d\x58\x1c\x5a\x56\xfc\x99\x78\x5a\x3d\x3f\xe3\xcb\xb3\xf0\x9f\xda\x0d\xd8\x91\x67\x28\x6f\x3d\x7b\x45\xe5\x41\xce\x23\x45\xaa\x3a\x04\x6b\xdf\x52\xda\x4a\x72\x1b\x1d\xed\x0b\xa8\x22\xde\x0a\x6b\x88\x57\xb4\xa6\x25\x83\x5a\x3e\x8d\x75\xdd\xcd\xa4\x10\x31\x1c\x33\x84\x88\x7e\x53\x31\x71\x0d\x08\x7a\x60\xc7\x37\xb7\x81\x1d\x7f\xa0\x0d\xec\xf8\xc6\x76\x10\xb7\x39\x77\xdf\x79\x6e\x44\x7c\xeb\x1c\xda\xc6\x64\x58\x2e\xec\x79\x60\xd9\x7e\xae\xdb\x55\x81\x4b\x60\xbc\xfd\x37\x2b\xac\x75\x5b\x95\x11\xad\x18\x10\xed\xe4\x2b\x9b\xc2\xed\xc1\x6d\xda\x0d\xa7\x18\x8f\xea\x2c\xf8\x6d\xe1\x8e\x15\x05\x19\x41\xf7\x5d\x4a\x52\x9a\x27\x37\x5c\xb7\x34\x42\x31\x4d\x2a\x56\x97\xdc\xe6\xc7\x95\x82\x64\x36\x6e\x10\x38\x3a\xc3\xbd\xd9\xee\x92\xf8\x41\x41\x64\xa6\xa9\xcd\xea\x44\x6e\x98\xbe\x63\x4c\x90\x97\x2f\x5f\xbe\x04\xd1\xe6\xe5\x1f\xfe\xf0\x07\x02\xb9\xc6\x73\x96\xf1\x72\xfd\x45\x78\xeb\x5f\x5e\xbd\x8a\x19\xf4\xdf\xcf\xde\x7d\x0d\x71\x46\x95\x56\xe4\x46\xea\xb9\x1d\xdb\x74\xd1\xe9\x5e\x8d\xc8\xff\xbd\xfe\xe6\xbd\xc3\xd7\x6a\xe5\x57\x90\x7f\xfc\x16\xc5\x8c\x1c\x2a\xa7\x5f\xfe\xfe\x77\xbf\x8b\xfa\x06\x84\x24\x59\x43\x30\x77\x1b\xb4\x57\xb9\x70\x33\x21\xf5\x7a\xaa\x66\xcb\x3a\x45\x57\x8b\x2b\xf9\x6c\x0e\x07\x61\xee\xbf\x14\xd3\x82\x67\x1a\x89\x04\x26\x7e\x40\x90\xb0\xe5\x42\xa8\xcd\xba\x66\x65\x81\x28\x53\x53\xce\x46\xa4\xe0\xb7\x8c\x4c\xd5\x5f\x6b\xd9\x54\x6d\x6e\x44\x5b\xbd\x22\xa3\xc2\x8c\x8f\xc3\xb5\x70\xa7\x58\x74\x46\xd6\x7d\x78\x8a\x47\xda\x8a\xd2\xaf\x1c\x74\xbc\x22\x68\x8c\xb0\x78\xe3\x2d\x5b\x8e\x11\xba\x2b\xca\x7d\xd8\x1b\xb8\xdc\x22\x37\xd1\xe5\x47\xb2\xa8\x42\xd3\x6d\xb1\x4c\x17\x13\x5d\xd5\xf2\x1f\x08\x34\x5c\xb8\xb4\x63\x56\xa9\xa0\xac\x7c\x66\x73\x61\x8a\xd6\x6e\x1d\x31\x92\xcb\xe9\x6c\x78\x4d\x9b\x4d\xba\x4d\x69\x46\x2e\xa7\x61\xe0\x31\x24\x35\xe6\xca\x4c\x02\x6a\x3e\xdb\xb9\x45\x8c\xb2\x61\xf6\xbe\x5f\xb8\x1b\x0a\x21\xac\x11\x6b\xfd\x63\x38\x79\xd4\x18\x40\x1a\x60\xd2\xd4\xa5\xae\x6b\x47\xc1\x50\x59\x1b\x4d\x6d\xdf\x75\xa7\xe5\xb7\x3b\x3a\xe7\xad\x8d\xb0\x65\xba\xb1\x47\x84\x11\xec\x8d\x28\x98\x52\x36\x42\xbb\xa4\xf5\x2d\xcb\x3d\x7e\x9e\x40\xd8\xb3\x8a\xcc\x20\x46\x5c\xee\x6d\xbe\x40\xd7\x88\x92\x2e\x3b\xd9\x6f\xcc\x34\x8e\x27\x93\x63\x44\x2d\xb2\xc6\x80\x7b\xc4\x02\xe6\xf9\x13\xe5\xc8\xed\xdc\x2d\x28\xf3\x4c\x5d\x9e\x63\x48\x5c\x28\x21\x7d\x5c\x1b\xd1\x4c\xed\x5e\xc6\xe0\xbe\x24\xc9\x24\x5e\xb5\x83\x2d\x26\xbf\xb8\x7b\xb3\x7a\x38\x47\x93\x6b\x69\xc2\x51\x64\xb6\x71\x6c\xf7\xe5\x1c\xb7\x7b\x6c\xef\x5b\x2c\x7b\x9f\xcc\x60\x97\x51\xac\xcd\x86\xa9\x46\x8b\x72\x38\x46\xd7\x08\x16\xc5\xdf\xd8\xd4\x09\xfd\x15\x74\xdb\xf6\x24\x6c\x0d\xb6\xa7\x63\x6e\xb0\x5d\x4e\x57\xb3\x4b\x04\xe8\x2d\x64\x34\x1d\x1d\x8a\xc9\x01\xd5\xb6\x43\x70\x2b\xd8\xf6\xcc\xb3\x60\x4b\xe3\x5c\xb0\xa5\xf0\x2f\xd8\xe2\xdc\x4b\xb0\x6d\x7b\xb9\x9c\x3b\x0a\x6e\x8f\x25\x33\x48\x49\xa6\x7e\xf3\x31\x83\x6b\x15\x20\x96\x84\x3b\x65\xc9\x15\x5e\x2b\x7a\xa3\x64\xd1\x68\x1c\x22\xbd\x93\x90\xe6\xc1\x24\x5d\x4a\xf0\x38\x42\xb7\xda\x5d\x40\x29\x81\x13\x41\xf2\x94\xd2\xd7\xe1\x7c\x8d\x86\x6a\xd5\x43\xb5\xea\x7b\xda\xf3\xaa\x56\xed\x3e\xf3\x31\xcc\x9b\x8b\xff\xcb\x9a\x18\xa4\x0b\xfc\xfd\x73\xaa\x62\x8d\x2d\x53\x3c\x45\x31\xa5\x38\x39\x39\xf7\x19\x4f\x9c\x57\xf3\xa5\xd0\xac\x9e\xd2\x8c\x9d\x86\x0a\x2b\x56\xcd\x59\xc9\x6a\xb3\x41\xf6\x3d\x97\xda\xc3\x26\x74\x23\x37\x4b\x07\x7f\x84\x7d\xd2\xac\x36\x9b\xd9\x9a\x52\x0f\x5f\x6f\x07\xc7\xdd\x95\x4e\x0c\x3a\xdb\x8b\x3a\x0c\x7a\xee\x94\x07\xb5\x78\xad\xdd\x3c\xdc\x6b\xdc\x68\x15\xaa\x06\x63\x6e\xf8\xb9\x14\xc0\x3f\x00\x8a\x59\xca\xa6\x46\xa7\x07\x6f\x4f\xcf\x64\x5d\x1b\x9e\x05\x86\xa6\x8a\xd4\x6c\x66\x84\xd8\x1a\x2b\x25\xc3\x1b\x45\x63\x1e\xec\x34\x3a\x6c\xef\xf6\x63\x6f\x28\x7e\x20\x3e\x2e\xa2\x37\xcb\x61\x56\xb5\x5c\xf0\xdc\x31\x98\x21\x96\xe6\x8a\x54\x54\x05\xf9\x68\xa8\x52\x32\xe3\xa0\xa4\x6c\x4f\x30\x62\x24\x94\xf0\x81\x51\xf5\x59\x56\x3b\xf9\x1b\x42\x23\xb6\x84\x7c\xf9\x11\x9e\x70\x09\x47\x22\x64\xce\xae\x9a\x9b\x82\xab\xf9\xf5\x3e\x0d\x89\x9b\xc6\x41\x07\xf0\x35\xcf\xc0\xfb\x0c\x8a\x51\xe6\x4a\xa1\x38\xf0\x85\x86\xba\x19\x26\x96\x1b\xf1\x4a\xc2\x69\xb9\xfe\xc3\x2b\x26\x81\xc6\x17\xcc\xe6\xea\x3b\xbf\x7e\x38\xbc\x19\xdb\xfb\x76\x2d\x36\x03\x15\x56\x64\xc8\xd9\xb7\xa2\xea\x3c\xcf\x68\x71\x7f\x25\xba\xb0\x75\x59\x14\x47\x97\x50\x1c\x70\x79\xab\x10\x00\xb9\x81\x4d\xb7\x47\x3c\x28\xae\x69\xb3\x70\x47\x1b\x75\x57\x36\x58\x91\x52\x62\x02\x1a\x01\x75\xa2\xf1\x25\x28\x4e\xe1\x3e\x08\xb2\xa6\x41\xf2\x5f\xb8\x01\x83\x71\xf6\x9e\x36\x18\x67\x1f\x68\x83\x71\x76\x63\x3b\x88\x73\x4d\x9b\xb9\x97\x06\x49\x56\x3b\xb5\x66\x3d\x9f\x10\xcf\x71\xf4\x44\x45\xec\xd4\xe5\x05\x67\x75\xa6\x75\xcd\x6f\x1a\xbd\xa7\xf2\x77\x2b\x63\x00\x0b\xcc\x94\xa5\x1c\x63\xbb\x89\x59\x80\xb0\xac\x32\xc8\x63\xc6\x80\xde\x44\xb3\x84\x13\xcf\xb9\x01\xd3\x86\x0f\x8f\x15\xc9\x65\xd6\xf8\x82\xc4\x70\x3a\xad\x37\x5b\x6c\xbd\xc2\x24\x3c\x9c\x5e\xce\x2b\x1c\xa4\xf7\x6a\xe5\xf2\x4e\x18\x6c\x77\x76\xd5\x93\x7b\xa2\x9b\x77\xa2\xfd\x2a\x14\x53\xdc\x63\x62\x9e\xd3\x1b\xd9\x68\x9f\xdd\xf7\x7f\x99\x99\x7d\x93\xde\x59\x4b\xd2\x28\xf6\xa0\x19\xbd\xd5\x26\x6f\x39\xc6\x60\xbb\x1f\x6c\xf7\x83\xed\xfe\xbe\xd6\xb9\xc7\x97\x68\x96\x0f\x8b\x3e\x77\xf0\x97\x4b\x95\x1c\xb3\x75\xfb\xb7\x86\xbe\x69\x31\x2e\x8a\x34\xab\x89\x2a\x56\xe4\x2c\xbc\xed\xad\x36\x3e\x70\x07\x75\x28\x19\x58\xe2\xa7\xb7\x9c\xee\xc9\x1e\x0a\xab\x8b\x92\xa1\xb1\x75\x23\x6e\xdb\x20\x69\x2c\xe5\x8e\x6e\x12\x81\x47\x46\x25\xf3\xd7\x58\xd5\x93\x0a\x21\x91\x1d\x50\x23\x5b\xf2\x7c\x64\x43\x5d\x80\x11\xae\x68\x86\x72\x69\xc3\x73\xc0\x04\x6d\xc4\x7a\x7f\xfc\x2d\xb6\xc4\x13\x20\xc9\xa7\x40\xe0\x24\x60\x81\x3d\x25\x84\xc2\x96\x7a\x24\xa6\xd1\x8a\x7f\xc7\x6a\x15\x95\xdf\xb3\x6d\xdd\x64\xd3\xf8\xbd\x3b\x09\x95\xcd\x59\x49\xe1\x9f\x6f\xdd\x02\xcc\xb5\x36\xfc\xae\x66\x98\xd8\x93\xd5\xa5\x11\xbc\x46\x1d\x7f\xf6\xa3\x45\x5c\x5e\x4c\xd7\x92\x85\x15\xe2\xc0\xb0\x3f\x05\xfe\x03\xcb\xbd\xea\x18\xd6\x0c\x08\x02\x7d\x2f\xb0\x50\xe6\x8a\x3b\x0c\x20\x2e\xdc\x9f\x3d\x2f\xed\x31\xd2\x15\xb6\x43\xf8\x01\x6c\x6b\xff\x1f\x79\xfb\x42\x97\xe5\x89\x1e\x78\xb0\xff\x0f\xf6\xff\x6e\x7b\xe6\xf6\xff\x80\xe4\x39\x0c\xba\xc1\xc0\x1f\x5a\x48\x9c\x95\xff\x86\x39\xd9\xc2\xca\x2f\xce\x74\xef\xec\xf6\xb2\xee\x3a\x9e\x1d\x4f\x26\xc7\xe8\x7a\xd6\x0a\x3c\x8d\x9e\x8e\xff\x48\x98\xc8\x64\x6e\xfa\xf9\x08\xfd\xd7\x4a\x03\xbb\xd4\x6a\xfe\xc2\xb9\x94\x6e\xac\xd0\x79\x0d\xfa\x4e\xa3\xab\x09\x68\xcf\x65\x98\x7d\xfb\x18\xe6\x22\x01\x7d\xb5\xcc\x87\xcf\x6d\x6b\xb7\xc2\xd7\x4a\xb0\x5c\x88\xfb\x5d\x91\x82\x97\xdc\xd6\x85\x35\xf7\x9d\x29\x1d\xab\xb8\x24\xe4\x04\x3f\x9e\x64\x55\x33\xb2\x1d\x4d\x4a\x56\xca\x7a\x39\xf2\x9d\x99\x1f\x3b\xbd\xdb\x37\xb0\x6a\x47\xd6\xd4\x35\x13\xba\x58\xc6\x26\xe6\x69\xdb\x81\xb8\x1c\xb7\x53\x7b\x64\x72\xfc\xe1\xc4\xa5\x8f\x6a\x5b\xf7\x46\xb6\xd6\x61\x50\xaf\xfb\xd5\x62\x59\x5e\x0c\x78\x1e\xb5\xb6\x73\xf3\x94\x89\x05\x59\xd0\x5a\xc5\xde\x00\xb2\x2d\x5f\x93\xf3\x05\x57\x7d\x95\x93\x1f\x58\xdc\xb5\xd7\x7d\x42\xc9\xc1\x46\x57\x8d\xb6\xe8\xce\x81\xb8\xab\x34\xe1\x41\x7b\x85\x7d\x7b\xd5\xaf\x02\x6e\x5b\x45\xb5\x66\xb5\x78\x4d\xfe\xf3\xe4\x3f\x7e\xf3\xd3\xf8\xf4\x2f\x27\x27\xdf\xbf\x1c\xff\xeb\xdf\x7f\x73\xf2\x1f\x13\xf8\xc7\xaf\x4f\xff\x72\xfa\x93\xfb\xe3\x37\xa7\xa7\x27\x27\xdf\x7f\xf5\xee\xaf\x1f\xaf\x2e\xfe\xce\x4f\x7f\xfa\x5e\x34\xe5\x2d\xfe\xf5\xd3\xc9\xf7\xec\xe2\xef\x91\x9d\x9c\x9e\xfe\xe5\x57\x09\x93\xa4\x62\xf9\x4d\x34\x4e\xc1\x36\xde\x8a\xae\x74\xbf\x4d\x3c\xfa\x15\xde\x8f\x0b\x3d\x96\xf5\x18\x3b\x79\x0d\x59\xd0\xa3\xbb\x72\x47\xbb\xfd\x1d\x69\xa9\x56\x5b\xf5\xc4\xb1\xc7\x7b\xbe\x04\x8f\xe3\x80\xb7\x76\xec\x02\x53\xd1\x1b\xbe\xd3\xec\x03\xae\xcf\x6e\x90\x94\x66\x65\x25\x6b\x5a\x2f\x49\x6e\x95\x5b\xcb\x47\x25\x7d\x7b\x64\x62\x75\x98\x64\xce\x1f\x86\xf1\x3d\xa8\x8a\x4b\x96\xf3\xa6\xdc\x4b\x5a\x36\xe8\x39\xdc\xf4\x3b\x28\x3b\x62\x8b\x9a\x38\x5f\x1f\xfb\x9a\x2b\xc9\x45\xb3\x5b\x14\x54\xfc\xa9\xc4\xe9\x0f\x3b\xb5\x28\x8e\x8e\x56\x6a\x7c\x83\x6e\x1a\x9c\x60\x64\xce\x8e\x95\x7f\x17\x07\x4f\x54\x12\xa3\x39\xd3\xfa\x46\x9e\xd8\xae\x4e\x0d\x23\xf8\x0e\x78\x85\x03\xa4\xe1\x8f\x82\x16\x92\x98\xbc\x89\xff\x93\x7d\x6d\xb8\xa2\xbd\x44\x78\xbb\xce\x7d\x45\x70\x09\xc2\x9c\x4d\xbc\x38\x25\x85\xcc\x02\x07\xb0\x0e\x33\x00\xe0\x70\xe1\x2e\x71\xbc\xad\xd0\x00\x85\x19\x17\x79\x3d\x50\x86\x16\x0a\xbd\x5b\x78\x06\x05\xda\x40\x34\x84\x33\x4b\x80\x04\xd3\x6d\x49\x3f\xf1\xb2\x29\x49\xa3\xcc\x6c\xa5\xe8\xf6\xd2\x4e\xf6\xce\xd5\x99\x83\x54\x76\x5c\xc0\x47\x1d\xd1\x38\x46\x45\x39\x67\xe4\xda\xef\x5f\xab\x0e\x41\x53\xba\x95\xe4\x54\x03\x82\x84\x9d\x87\x65\x93\xe5\x14\x1c\x2b\x3c\xc7\xa6\x7c\xa9\xb2\x2d\x2e\x95\xe0\x45\xf7\x56\xb9\x22\x42\x7e\x7b\x1b\x61\xfd\x15\x9f\xd3\x0d\x78\xc6\xbc\x51\x34\x47\x94\xce\x07\x25\x72\x3f\x8f\xe0\x79\xbc\xf7\xe6\x4e\x49\xb6\x77\x09\xed\xd0\xec\xb0\x7e\x51\xd7\x3d\x94\x3a\x4f\x42\x8f\x42\xe2\xd2\xec\x7c\xf4\x3a\x1d\x4b\xea\xb3\x65\x66\x53\xf8\xf1\x4e\x1d\x38\x1c\x14\xe1\x1b\xc2\xd8\xc6\xe6\x3f\x4e\xf7\xe3\xcc\x8f\x37\x6c\x8a\xee\x4d\xf8\x0d\xc8\xee\xaa\x2f\x74\x0e\x35\x5a\x05\xd3\x10\x8b\xc7\x7c\x75\x40\xf4\xbb\x2a\xe5\x22\xa2\x80\xf0\xb7\xca\x1a\x9c\x79\x2f\x40\xd1\xd3\x4e\x9c\xbc\x42\x11\x5b\x30\x96\x63\x2c\x60\xd1\xce\xbf\x6e\x44\xef\xec\x6f\x4e\xc9\x94\x51\xdd\xd4\xe8\xfd\x23\x8c\x94\x53\x38\x01\x0e\xd5\x4e\x35\x33\x87\x02\x29\x10\x6b\x59\x12\x25\x68\xa5\xe6\x52\x83\xea\x84\x56\x34\xe3\x3a\x22\xbc\x4c\xd7\x34\xbb\x85\x1a\xcb\x35\xb3\xb3\xed\x9b\x5a\x76\x6a\xa3\x18\x42\x88\xe8\xc6\x3e\xea\x79\x2d\x9b\xd9\x1c\x42\xf1\xf0\xad\xac\xa0\x0a\x63\x2e\xfb\x8c\xec\x1b\x7b\xb7\x8a\x01\x45\xf2\xa5\xa0\x25\xcf\x7c\xa5\xa9\x5a\x2e\xb8\xe2\xd2\x1a\xa9\x60\xd4\xfe\x45\x53\x72\xe5\xcb\x00\xa1\x65\xec\xbc\xa0\xbc\x24\x27\x8a\x31\x72\xe1\x2e\x09\xfe\x72\x8d\x02\x02\xaa\x3b\x63\x1c\xac\x42\xa3\x9a\x4d\x7d\x6c\x33\xa7\x98\x27\x4e\x75\x1b\xb8\x31\xc4\x24\xc4\xb2\xf0\xbc\x71\xda\xfd\x05\x7e\x0d\x18\x6f\x5e\xb1\xac\xc1\x5f\xd0\x55\xc3\x63\x22\x97\xad\x7b\x4c\x4f\xaf\x67\x57\x97\x2a\x54\x2b\xe0\x5d\xb6\x05\x96\xe0\x07\x9b\x6e\xd9\xe7\x95\xf5\x98\xa0\xa7\x67\x43\x60\x05\x14\x62\x5e\xf0\xbc\xa1\x05\x92\xd6\x88\x45\x9e\x5f\x5f\xe2\xc0\x7c\x36\xd7\xe3\x3b\x06\x8a\x60\xe4\x81\x5a\xdc\xe7\xa6\xcb\xd7\x9c\xb6\xb9\x02\x22\x1c\x51\x83\xd9\x2a\xa6\x71\xc9\x77\x74\x09\xf9\xe7\xad\xf3\x6f\xc7\xdb\xc7\xd5\x84\xc1\x01\xa6\xb2\x8f\xca\x94\x8e\x7e\x5b\x10\xea\x5d\xf6\x19\xa0\x94\x8c\x0a\x60\xc6\x41\xa3\x6f\xe0\x09\xb0\xc6\xfa\x9a\xfb\xef\x5f\x50\x20\xcb\x7f\x84\x0c\x89\xa2\x06\x56\x7b\x65\xb6\x3d\x48\x53\x8b\x16\x62\x3f\xb2\xb2\x2a\xa8\xde\x8b\x03\xce\xdf\x02\x93\x43\x60\x0f\x37\x48\x8c\x8a\x7c\x4c\x0b\x73\x55\xae\xbe\x3b\xb7\x01\xaf\x88\x78\x12\x3d\xed\x3e\x3a\x22\x24\x7c\x2d\x65\xc3\x86\x6f\xc4\x39\x90\x3d\xf5\x86\xe5\x40\x41\xec\xdc\xe2\x9c\x84\xe5\x9d\x60\xb5\x83\xbd\xab\xef\xce\x47\x84\x4f\xd8\xc4\xfd\xe5\x3b\x73\xe4\x51\xcb\x19\x86\xce\xb8\x10\xb5\x18\xdb\xba\xcc\x27\xb8\x9c\x50\xbf\x1f\xf6\xfe\xc3\x9f\xcc\x42\xcd\xaf\x7f\x1e\xff\x29\xa8\x5d\xf8\xe7\x1f\x0c\x3d\x8e\xf2\x55\xfd\x61\xe5\xbb\x30\xe6\x02\x88\x9e\xf9\xeb\x87\x2b\x5b\xb6\xd8\x16\x35\xfe\x21\xd2\xa9\x82\x10\x26\x74\xbd\x9c\x90\x2b\x09\x7e\x78\x3c\xc7\x2b\x0b\xf3\xaf\xd9\x3f\x9c\x59\x08\x8e\xcb\x6b\xd0\x33\xaa\x99\x00\xae\xe4\xc1\x0a\xc0\x6d\xb3\x19\x00\x60\x00\x40\x4e\x14\x76\xe9\x04\x54\xaf\x98\x0e\x67\x44\xb4\xc4\xe4\xf4\xfd\xb8\xdc\xb4\x33\x41\xd8\x27\xae\x20\xfb\x19\xee\x38\x1c\x1b\xb5\x21\x21\x8e\x91\x33\xc3\x1a\x48\xf0\x39\xf3\x2a\x19\xe3\xbb\x01\xeb\xff\xb5\x90\xfa\xd7\xfe\x32\x38\x8f\x52\xe0\xd8\x24\xa1\x0b\xc9\x5d\x8d\x6d\x83\x78\x04\x18\x59\xa2\x12\x4d\xd8\xf3\xbc\x59\x92\x92\x2b\x4d\x6f\xd9\x84\x5c\x1b\x76\x2e\x74\x32\xc1\x53\x16\x04\x6a\xe1\xb1\x9c\x34\x42\xf3\x22\x52\xa2\xf3\x73\x81\x8d\x09\x58\x3d\x48\x2d\xd1\x64\x86\x27\xa9\x6a\x36\x76\xac\x25\xbe\x15\xa5\x77\xb1\x55\x3d\xdd\x9e\xb4\x7b\x3a\xf2\xa0\x3f\xa7\xa8\x16\xa9\x72\xe8\xdc\x7a\x6a\x47\x5f\xd8\xb5\x68\x0a\xb3\x1b\x52\x64\x2d\xeb\x08\xc7\xae\x26\xe4\x3d\xf0\x83\x45\x0c\x90\xa3\xd3\x18\xea\x81\xac\x95\x4d\xb0\x8c\x29\x45\xeb\x25\x3a\xb1\x73\x5f\x5d\xbb\x51\x6c\xda\x14\xc0\x2e\xc7\x6c\x09\x15\x58\xc9\xbc\x66\x99\x14\x4a\xd7\x4d\x06\xe7\x48\xc9\x4d\x2d\x6f\x99\x68\xc3\x90\xa2\x10\x63\xe8\x71\xdf\xba\x36\x1b\xb6\x47\x48\x92\xcd\xa9\x98\x31\x9f\x02\x84\x94\x34\x07\x28\xfa\xca\x0b\x58\x31\x5b\x21\xfd\x49\xd1\xa9\x91\x6a\xb8\x86\x23\xbb\x31\x1c\x99\xb3\x47\xc6\x4c\xf6\x83\x0f\x02\x28\x03\xe3\xa5\xe0\xc5\x8e\x1d\x79\x53\x6c\x55\x63\xe0\xbf\xfb\x05\xf7\x24\xdb\x54\xc9\x34\xcd\xa9\xa6\xfb\x8c\xd3\x78\x47\x7d\x19\x77\xeb\x0b\x05\x87\x1e\xf8\x48\x59\x36\xcb\x49\x85\xb2\xe2\x61\x62\x97\xab\xef\xce\x23\x47\x02\x31\x10\xce\x19\xf2\x46\x6a\x73\x8f\xac\x79\x1e\x20\x0f\x43\x63\x5c\x2c\x86\x99\x84\x1b\x13\xc9\x01\xcb\x49\xde\x24\x68\xfb\x5b\xa2\x12\x67\xcf\x4c\xb4\x66\x9a\xf3\xde\xe7\xc1\x7c\x6c\xdd\x84\xb2\x6e\x64\xc1\x46\x61\x02\x2d\xf0\x4c\x68\x5e\xb3\x20\xbd\x4f\xe4\x60\xf6\x54\x1b\x81\x37\xbd\x7b\xbe\x08\x00\x33\xa6\x55\xeb\x92\x8c\xe4\x3f\xba\x7f\x6d\x19\x47\x9c\x25\xf0\xb2\xee\xcc\xad\xfe\x6e\xe3\xa2\x22\x7b\x47\xb8\x51\xd2\x92\x79\xc3\xde\xec\xe5\xc8\xb7\xb1\x2d\xd3\xcc\x60\xfb\x77\x32\x4f\x31\x47\x6f\xeb\x7d\xd0\x19\xae\x0d\x4f\xc3\xa8\x48\x05\xca\x67\x7c\x01\x1c\x62\x54\x27\xb9\x11\xd2\xa8\x39\x5d\x24\xa4\x52\xd9\x5a\xe3\xd9\xca\x39\x63\x5f\x85\x17\x26\x36\x86\x89\x8d\x5f\x45\x4f\x21\xc5\x91\xd7\xb5\x68\x87\xde\xee\x20\x89\x56\xd7\x47\x25\x82\x70\xcd\xa0\xff\xeb\x44\x8b\xeb\xf6\xd0\xd3\x8e\x66\x99\x01\xeb\x44\xe5\x1d\xf0\x6c\xb0\x3f\xe3\x06\x6d\xa7\xec\xe0\xaf\x3b\x6c\xb3\x15\xb4\xbc\xce\x0c\xc3\x29\x4f\x9c\x12\x6d\x62\xc1\xc4\xe5\xa9\xec\xbe\x7e\xba\xf5\xb0\xc0\xf9\x6f\xd6\xe2\x24\xf4\x79\x69\xfd\x89\x9d\x0c\x6a\x64\xbd\x1a\x6c\x68\x2e\x8c\xdf\x5c\xbc\x5a\x16\x05\xab\x61\x03\xad\xfa\x6c\xc5\xf1\x13\x6a\x5f\xa2\x01\x3c\x26\x0f\x99\x6b\x4e\x41\xeb\xc5\x63\xc1\xee\x3c\x5f\x4f\x15\x66\x98\x77\xfe\x46\xa0\x62\x76\x5e\xb7\x9b\x46\x4e\xb9\xea\x7f\x73\x6a\xdc\x33\xb1\xc4\xad\x7b\x13\x80\x0b\xaa\x4b\xc9\xcc\x4c\xca\x88\xce\x82\xde\x14\x86\x45\x0b\x40\xca\xcf\x68\x85\x97\xd0\x32\x78\xeb\x03\x9b\xa6\x6c\x07\xe8\x99\xc3\x8f\xe3\x46\x41\x66\xa4\xf3\xe1\xa4\xf5\xfd\xb6\xd2\x5b\x52\x92\x71\xd7\x2c\x74\x74\x3a\xeb\xfa\x5b\xae\x8c\x1b\xe6\xbd\xdb\x38\xd7\xf8\xd1\xb7\xf0\xc7\xda\xc6\x23\x0b\xb2\xa7\xf1\x5e\x5d\x56\xf7\x83\x48\x79\x1d\xdb\x36\x2e\x5c\xe0\xa9\x0e\xae\xa0\x69\xfe\x38\xdb\x63\x4b\x82\x6a\x58\x18\xd3\x29\x47\x66\xf0\x87\xe3\xd4\xbc\x87\xcb\x0d\x33\xf8\xa7\x4d\x0a\x99\x02\x51\x04\xa1\x2a\x1c\x69\x83\x13\x6f\x7b\xbd\xbf\x82\xa2\xa6\xd6\xb4\xef\x52\x52\x18\x32\x7d\x76\x75\x89\xf3\x4b\x1d\xfd\x2d\xe0\xb7\xa5\x65\xd6\xf5\x9c\xd7\xf9\xb8\xa2\xb5\x5e\xa2\xb2\x73\xd4\x99\x9b\x8f\xaa\x4f\x1a\x64\x4b\xbf\xa6\xb8\x32\xc8\x61\xeb\x1c\x37\x6c\x95\x33\xde\x5b\x1f\x8e\x7b\xcf\xec\x10\xeb\x89\x8f\xca\xdf\xb8\x9e\xb0\x88\xa5\x53\x0c\x3e\xe1\x7a\x1e\x1f\x71\x40\xba\xb8\xf2\xb0\x3c\x90\x41\xce\xaa\xeb\xf5\x88\x8c\x0a\x48\x3f\x56\x81\x2c\xc3\xe0\x58\xcf\x4d\x83\xee\xc9\xf4\x34\x22\x7c\x6a\x88\xb4\x14\x63\xb0\xee\x27\x4c\xa4\x35\x66\x5a\xde\x7d\x62\x1d\xec\x51\x5b\x04\x17\x32\x98\x4f\x30\x48\x7b\xd3\xc9\x89\x90\x31\xca\x24\xd7\x00\x4f\x60\xaf\xa7\x18\xfb\x70\x8f\xe5\xea\x26\x25\xe1\x24\x69\xb9\x87\x50\xcd\x14\x60\x30\xc7\xc0\x70\x91\x1b\x20\x05\x92\x08\x0a\x28\xd5\x64\x19\x63\x5e\x05\x6c\x2f\x69\x0a\xeb\xde\xc1\x8d\x76\xc3\x4a\xaa\xb3\x39\x53\x44\x49\xc8\xaa\xae\x34\x2d\x0a\x96\x7b\xb3\x26\x1e\xa8\x04\xbe\xce\x9a\x3c\x13\x46\x0c\x18\xc3\x94\x0d\x0a\x54\x70\x56\x07\x5e\x15\xd4\x2a\x1f\xa7\x8d\xc8\xd0\x67\x98\xeb\xa5\xb7\x6a\xad\x32\xeb\xa0\xb7\x51\xa0\x67\x4d\x61\x28\xa7\x68\xb7\x0a\x74\x30\x1e\x90\x80\xb4\x2c\x91\x98\x18\xc9\xb0\xb5\x44\xd9\x8c\xc1\x86\x32\xf8\xf4\x1b\x49\x70\x16\x24\xea\x18\x21\x37\x16\xb2\x4c\xe2\x38\x74\x0a\xe2\x62\x7b\x06\x31\x5c\xdb\x49\xb0\x65\x6b\x8c\xe3\xa9\x67\x18\x15\xf3\xe5\xc0\x55\x0a\xd7\x42\xac\x17\x14\x6d\xb4\x2c\xa9\xe6\x19\xa8\x67\xf9\x34\x30\xf2\x96\xbe\x28\x9f\x77\x72\x42\xa2\x0a\x44\xdd\xee\x7a\xf2\xb5\xda\xcc\x6c\x3e\x6a\xdb\x82\x9d\xb2\xa7\xd1\xdd\x14\xb7\xd4\x80\xd5\x48\x9e\xfb\x47\x97\x37\x85\xe8\x79\xcd\x18\xe1\xa5\x11\x93\xa8\xd0\x24\xe7\x53\x9f\x2f\xc7\xd9\xec\x1f\x3a\xbb\x34\x49\xf4\x6f\xe0\x0f\x12\xf4\x87\xaa\xee\xa2\x90\x77\x8a\xe8\x3b\xe9\xd5\x6e\xad\x2d\xd7\xe6\x4b\x19\x75\x87\x4d\xa2\xa0\xb6\x7f\x83\xb6\xcd\x49\x07\x98\x76\x64\x6e\xed\x1d\x2b\x0a\xf3\xff\x87\xf0\x6d\x42\xa4\xd7\xc6\x75\xf2\x99\xc0\x44\x1c\x5c\x39\x35\xab\x8d\x27\x3b\xc9\x6b\x59\x55\xd6\x0c\x54\x9e\x3e\x66\x9d\xe0\xda\x54\x2f\x98\x02\x37\x3d\x17\xcd\x66\x8e\x6c\xc6\x04\xab\xa9\x06\x43\xb8\xcd\xa0\x0d\xc4\x71\x75\x3a\xf1\x6a\x4b\x6c\x5b\xc9\x69\x3d\x60\x80\x6e\x0b\x9b\x8f\xdd\xbd\x63\x7f\x4d\x9a\x2b\x17\x08\x01\xee\xc6\x26\x1d\xe9\xc9\x97\x4c\xd3\x53\xf2\xad\xc2\x83\xf2\xf4\xc2\x47\x09\x46\x49\xe7\x36\xcb\x11\x0a\xe8\x49\xc3\x9f\x15\xd5\x3c\x18\x3f\x94\x72\x7d\xa8\x75\x77\xa7\x3a\x33\x3b\xaf\xa5\x52\xef\xdd\x27\x7b\x99\xe4\x20\x01\x0f\x12\xf0\x20\x01\x3f\xdc\x06\x09\xf8\xd0\xeb\x01\x7c\x77\xc8\x3b\xf9\x3e\x64\x08\xbb\x88\x7a\x67\xfb\x41\xc8\x7b\xa9\xad\xbb\x0b\xf0\xef\xf4\x5e\xa5\x27\x05\x9c\x7e\x47\x97\x13\xc1\xb4\xcd\x43\xe7\x74\xfb\x1f\xdc\xe8\x7f\xad\x0d\xe7\x67\x05\xb4\xe0\x16\xb9\x0b\xec\x92\x08\x06\xa3\x68\x89\xa4\xb8\xf5\xbe\x81\xe7\xc7\xca\x7a\x74\x98\xdf\x21\xd8\x9e\x74\x4a\xb2\x4c\xc8\xb5\xf5\x16\x5c\x19\x7c\x3d\x55\x58\xce\x34\xe5\x71\x79\x28\xc3\xe6\x28\xe5\xc7\x7b\x68\xf4\x01\x28\x21\xd9\x0e\x64\x7d\xe8\xe6\x21\x54\x2d\x6d\x08\x74\xe0\x11\x1f\x46\x95\xb4\x2f\x3c\xde\x52\x79\x39\x25\x1f\x58\x26\x17\xac\xc6\xfd\xbe\xf8\x54\x51\x61\xc4\xf4\xb7\x94\x17\x66\xb7\xdd\xae\xb7\xd6\x0b\x28\x82\xdc\x75\x4b\x08\x8c\x60\xfe\x1a\xd9\xa3\x35\x90\x93\xc2\x0c\xfa\x9c\x77\xa6\x67\xeb\xa7\x5b\xd5\x6c\xc1\x65\xa3\x5c\x3c\x4d\xa3\x91\x8e\x29\x6d\x65\xd3\x39\x9f\xcd\xdd\xcb\xce\xcf\x1c\x3c\x80\xea\xdc\x5f\x95\x84\x39\x28\x4d\x75\xa3\xba\x89\x72\x32\x70\x27\x78\x12\x1b\xb0\x3f\xef\xfd\x32\x7c\xdb\x31\x57\x18\x7f\x74\x48\x34\xfe\x35\x46\x3c\x61\x27\x37\xf6\x16\xb8\x30\xad\x36\xcc\x2c\x93\x65\xd5\x68\x16\xdc\x16\x0b\xad\xa9\x68\x2b\xf1\x20\x3b\x79\x2f\x5f\x94\x54\xd0\x19\x1b\xfb\x49\x8c\xdb\x08\xad\x17\x5b\x60\xad\xc4\x23\x25\x8f\x48\xbc\x18\xb6\x67\x1c\x59\xb5\xb2\xd8\xf4\xc8\x73\xf2\xc8\xe8\x73\xf2\x98\x08\x74\xb2\xcb\x28\x74\xe2\x53\x59\x1c\xf2\x3a\x7e\xb0\x63\xae\x5e\x48\x4b\xac\x1e\xba\x90\xdb\x89\x04\x96\x68\xd9\x51\xb9\x22\xb2\xe4\x5a\x33\xe7\xc8\xec\x2f\xd8\x88\x70\xdd\xc9\xb4\x60\x11\x07\x28\xcd\xd1\x1b\x99\x7d\xf2\x65\xb5\x5b\xc6\x2c\x71\x32\x20\xfc\xdc\x71\x85\x8c\x97\x20\xbc\xac\xb0\x30\x0b\x20\x80\xb1\x8d\x93\x74\xaa\x61\x3f\xef\x0c\x7c\x09\x09\xfb\x04\x8a\x7c\x9c\xda\x80\x99\x06\xcc\xb4\xd2\x7e\x0e\x98\x09\xb3\x58\xa4\x24\x59\xe9\x60\x24\xf7\xb9\xcd\x71\x49\x6f\x58\x41\x7e\x6c\x58\xbd\x24\x86\x6d\x6d\x23\xbd\xa0\x1a\xb8\xe2\x39\xc6\x34\x39\xab\xd9\x9e\xb5\x64\xdb\x31\x4d\x60\x69\xbb\xf8\x64\xb8\x7b\xc8\xd9\xf6\x08\x7c\xbd\xda\x55\x37\x13\x28\xee\x96\xdf\xc1\x90\x27\x47\xa7\xd3\xf0\x09\xb0\xdd\x67\xef\xdf\x6c\x27\x50\xa5\x39\x1b\x92\x6d\x1c\x0e\xd7\x16\x9f\x4c\xac\x08\x39\x7b\x60\x4f\x70\xef\xfc\x2f\x40\x25\xbc\xbb\xa8\xd7\xd9\x93\x5b\xb6\x1c\x59\x77\x70\x62\x4e\x9f\xba\x97\x93\x27\x83\x71\x21\x6d\xd5\x42\xd3\x69\x6c\xf6\xed\x6e\xdb\x1a\x09\x6f\xa7\xe8\xc5\x16\x5f\x2e\xb2\xfb\x95\xdb\xb4\x54\x5c\xbf\x35\x95\x48\x2a\x2b\x19\xb6\xfb\x4a\x4c\x22\x0c\x41\x3d\x38\x97\x1b\xc1\x83\x0d\x64\x9d\x00\x84\x94\x7a\x88\x64\x7b\x85\x1a\x36\xb7\xb1\x8f\x5e\xea\x16\x17\x2b\x1c\xbf\x1b\xcb\x7f\xcb\x96\xc7\xca\x26\xbd\x93\x42\xcd\x79\x85\x25\x50\x15\x03\x1c\xb5\x1d\xc0\x63\xfb\x0e\x5c\xdb\xdd\xb0\x88\xc1\x2e\xc5\x88\xbc\x97\xda\xfc\xef\x02\x42\x93\xe0\x5a\xbd\x91\x4c\xbd\x97\x1a\x9e\x1c\xfc\x5c\x70\x89\x4f\x75\x2a\xd6\x9a\xc9\xc1\xc2\x08\x68\x1a\xb3\xf2\x40\x9c\xbe\xdd\x7d\xe7\xa1\xe9\x4f\x90\x2b\x72\x29\x88\xac\xed\x56\x6e\x35\xb0\x76\x45\x94\x95\x1d\xd6\x59\x1f\x5a\xa3\xfe\xa6\x71\xed\xa9\xc9\xba\x73\x68\x3b\x9e\x82\x1d\x1e\x74\x91\xf8\x0b\x68\x57\xc1\xbb\xc4\x85\xd4\x60\xd9\x5e\xaa\xd9\x2c\xc9\xd5\xa5\x6d\x25\xab\x67\x90\xe5\x31\x4b\x28\xf8\x18\x4c\x7e\x4b\xc2\x8a\x6d\x2b\xf2\x1a\x0e\xbc\x25\xb0\xef\xc8\xc7\x7f\xc7\x5d\x01\x9f\xf4\x35\x84\x72\x1d\x52\x3a\x0e\x86\x45\xee\xa2\xa4\x95\xb9\x7d\xff\x6d\x98\x08\x00\xcc\xff\x81\x9a\xe9\x6a\x42\xce\x88\xe2\x62\x56\xb0\xce\x6f\x56\xcd\x1f\x74\x93\x3c\x01\xb0\xbe\x19\x1a\xbf\xa0\x05\xc3\x78\x51\x2a\x7c\xf5\x50\x39\x5d\x63\x21\x47\xb6\x88\xba\x21\x6f\xde\x2d\xed\xe8\x96\x2d\x8f\x46\x89\x8a\x54\x12\xd2\x04\xd3\xc9\xa5\x38\x6a\x53\xd2\x76\xee\xa5\xe7\xb3\xc0\xdf\xe0\x08\x7e\x3b\xda\x35\x8f\xfa\x44\x42\xea\x93\xb9\x89\x5a\xa5\xf2\x79\x41\xd1\xb0\x72\x08\xf3\xc5\xea\x98\x9b\x8a\x12\x5e\x07\xef\xb4\x26\x2d\x1b\xbd\xfc\x84\x9a\x76\xc8\x08\x93\x1c\x66\x95\x74\xb0\xab\x65\x80\x0e\x7a\x36\xf7\x0e\x1e\x04\x5b\xfb\x9c\xe2\xe6\x2c\xbe\xdb\xf4\x41\x10\x6b\xce\x55\xfa\x71\x5d\x4e\x57\x7d\x14\x82\x74\x27\x61\x14\x8f\xac\x6d\xd4\xfa\x9a\x0f\x31\x54\x48\x6c\x2b\x29\xc5\xd6\x4e\x6d\x5b\xeb\xfe\x50\x33\x55\x49\xf4\xaf\xdd\xb8\x58\xcb\x22\xcc\xa9\x02\x9f\xac\xa9\x35\xb7\x56\x4d\x5d\x49\x65\xcb\xdb\xad\x82\x7c\x62\xe4\x92\x0d\x27\x73\x41\xa6\x18\x06\xee\x6f\x82\xb9\x3f\x3e\x2f\xf5\xd9\x4a\x4e\x42\x59\x43\xb2\x36\xeb\x20\x26\x72\x9e\x59\x79\x92\x6a\x22\xfa\x12\xc6\x84\x6d\xf3\x41\x3b\xdf\x4f\x14\x69\x7c\x92\x2c\x3c\x72\xc7\xba\xe1\x2c\x99\xd0\x60\x15\x14\xe4\x52\x4c\x19\x55\xfc\xa6\x60\xd6\x9d\x4d\x69\xaa\x93\xf6\x24\x70\xe2\xb2\x7b\x63\x84\x09\xa0\x5c\x5c\xab\x55\x73\xe0\x09\x17\x59\xd1\xc0\x09\x0a\x5e\x9c\x82\x22\x88\x8a\x8c\x15\x48\x39\x65\xee\x63\x85\xb7\x88\x58\x0a\xcc\x99\x53\x56\xd7\xb6\x1c\xde\x72\xf3\x4d\x22\xb9\x64\xe8\x84\x03\xc1\x75\x23\x5c\xc8\x66\xdf\x45\xbb\xb5\x29\x88\x15\x77\x80\x92\x2b\x86\xf0\x8a\xfb\x8a\xd5\x56\xa7\x45\x50\x91\xc7\xae\xda\x7a\xbc\x5d\x07\xd6\xcc\x11\x26\xae\xb0\x59\x27\xc2\x84\xdc\x09\x13\xb1\x09\x1f\xf6\x8f\xa1\x71\x93\xc7\xed\x4d\x1f\x03\x82\x66\x09\x0a\xea\xad\x31\x74\x5c\x45\x2d\xd7\x1e\x8b\x92\xa1\xbc\x80\x4b\x39\xd7\x49\x9e\xda\xc6\x3b\x3c\x9a\x4e\x7e\x07\xd7\x45\x4e\xc9\xdb\xb6\x06\x2c\x57\x60\xb0\xe0\x2e\x21\x9d\x01\x5e\xbc\x4f\x68\x38\xc7\xcb\x6d\xf0\x75\xaa\x22\x75\x8b\x3d\x7f\x04\x19\x6c\x3b\x70\xfc\x86\x8b\x9a\x58\x4b\x60\xb2\x7a\x1f\xc1\x55\xdf\xfb\x8e\x26\xee\x6a\xe4\x5a\xa7\x3d\x49\x11\x3a\x6b\x99\x66\x5d\xfd\xc9\x5b\x7e\x53\x33\x72\x3e\xa7\x42\xb0\x22\xc8\x0f\x6d\x8d\x58\x54\x6b\x9a\xcd\x11\x33\x51\x62\xee\x55\xc1\xf4\xb1\x22\x73\xa9\x34\x29\x69\x36\xe7\xc2\x27\x0f\x15\x3e\x1b\x79\x9b\xcd\xe5\xe0\xa9\xb3\xf6\x5e\xb5\xd9\x42\x40\x58\xea\xb8\x53\xcc\x39\xa2\x27\x9f\x04\x78\xad\x97\xb6\x4e\xa2\xbd\x87\xb0\xcf\x28\xe5\x00\x56\x86\x77\x63\xc6\xb8\xbf\xa4\x34\xb9\x2c\xbd\x61\x92\x8b\x80\xf0\x30\xfb\x01\xe1\x53\xd2\x88\x04\x17\xef\x84\x3b\x59\x34\x11\x35\x8d\xba\xd9\xcb\x8b\x46\x98\x4d\x6f\xab\xd4\xbc\x3d\x27\x9a\xd6\x33\xa6\x4d\x6f\x44\x34\xe5\x0d\xab\xfb\xd3\x98\xef\xaf\xb0\xda\x41\xea\xa0\x76\x76\xa0\xa7\x7c\x29\xf9\xe0\xbe\x82\x70\x0f\xe0\x06\xa6\x32\x8e\x0e\xa3\x8f\x9e\x2b\xbe\x8a\xa5\xf7\x0c\xae\xfe\xce\x92\x92\x46\xc4\x50\xe7\x94\xfa\xa8\x78\x96\x7f\xfb\xdb\xfb\xd4\xe2\x74\xc7\xed\x97\xf7\x01\xc8\x9d\xac\x8b\xfc\x8e\xe7\xd6\x1d\x93\x9c\x98\x97\x4f\x63\x81\x65\xc7\xb5\xea\xb6\x4f\xa5\x9b\xaa\x9b\xba\xbb\xe3\xf9\x5e\xea\xcc\x42\xc7\xdd\x9d\x76\xa2\x93\xd9\x69\x02\x5b\xcd\x73\x26\xb4\x41\x1d\xb5\x22\x27\xf0\x45\x4c\xae\x87\x0b\x8e\x19\xf9\x60\x04\xa8\x86\x53\xde\x70\xd1\x26\x95\x6c\xcf\xda\x90\x1b\x73\xf3\x9d\xb6\x55\x31\x8d\x79\xbd\x20\xa2\x5f\xea\x39\x51\xbc\x6c\x0a\x4d\x05\x93\x8d\x8a\x2f\x41\xff\x59\x1e\xf7\xb4\x60\x9f\xf0\x6e\xee\x32\x71\x72\xdb\x6b\x97\x5b\x80\x78\xa2\x36\x1b\xed\x2a\xbb\xd0\xd3\x6b\x1b\xa6\x99\xbf\xf0\x8c\x85\xcf\xaa\xc7\x3e\xb1\xcc\xe6\xd3\xa8\x8a\x66\xc6\x7b\x25\xaa\x37\x66\x66\x46\x26\xcd\x5f\x93\xb7\xed\x84\x21\x7a\xd7\xfd\x82\x25\x8a\xc1\x6e\x6f\x07\x22\xe7\xd7\x97\x6f\x6c\xfa\x53\xa1\x34\xa3\xbb\xe2\x51\x62\x4d\x9d\x63\xab\x8e\xd8\x11\xc3\x83\x9d\x25\x5e\xf6\x36\xff\xeb\xaa\xf6\xcc\xfe\x62\x6b\x1d\xf8\xbc\xf9\xb1\x09\x3f\x13\x80\x7e\xe0\xd4\xb0\x3d\xc0\xa9\x85\xa9\xf3\x83\x09\xe4\xac\x62\x22\x87\x62\x7c\x01\xdc\xe3\x2e\xed\xf4\x88\x6c\xe1\xb8\x54\xba\xec\xea\xcd\x75\x88\x72\xa0\x77\x99\xcb\x22\x57\x84\x7d\xd2\x35\x35\x68\xbe\x34\x08\xdd\x7f\x33\x25\x54\x2c\x23\xaa\x7e\x3e\xa7\x02\xe1\xe4\x49\xb8\xc0\xfc\xe7\xc4\x05\x2a\x96\xd5\x4c\x47\x05\x16\x6f\x51\x36\xc4\x75\xde\xdd\xc0\xce\xe3\x35\x51\x1e\x7f\x75\xe1\x31\x6d\x6d\xe0\xa8\xf1\x84\xe2\x50\x84\x6f\xa5\xe2\x70\x45\x95\xf2\xd2\x31\x10\x39\x7b\x6d\x55\x27\xd3\x44\xc4\x10\xa8\xa9\xe5\x53\x22\xe4\xca\x4c\xc3\x40\x20\xaf\x47\xed\xbc\x12\xd1\xbd\xb7\x98\x95\x58\x88\x80\x0a\x08\xa9\xc7\x6e\x46\x10\x67\x8c\xff\x46\xa3\x99\x59\x57\x20\xf7\xc3\xca\x62\xf6\xc9\xae\x7d\xb7\x97\x3d\xcd\x95\x27\x3e\xfa\x6d\x3b\x3d\xdc\xfb\x80\xb8\xba\x80\xaa\x58\x15\x50\x37\x47\x2c\x83\xca\x9d\x7c\xc1\x20\x03\xad\x4b\xc8\x6a\x18\xdf\xbc\xc1\xa0\x25\x97\x16\xa2\x9b\xec\x21\x3e\xb8\x3b\x08\xb9\x69\xbd\x18\x2e\x85\xd2\x14\xf2\x02\xc0\x2a\x0c\x55\x35\x04\xd0\xe6\xfa\xb5\x80\x88\xda\x72\x97\x5d\x20\x7a\xb8\xd2\x10\xcd\x8c\xd5\x06\xd6\x8a\x25\xb9\xab\x65\xbc\x53\x65\xa2\xde\x57\x2e\x58\xbd\xe0\xec\xee\x85\x8d\x86\x1b\x9b\x05\x8c\x6d\x40\xf9\x0b\x10\x0f\x5f\xfc\x12\xfe\x17\x35\x7e\xb2\x1e\xd2\x62\xeb\xd7\xe4\xa8\xbf\x24\xdf\xb6\xe6\xd9\x29\x24\x90\xde\x69\xd5\x33\xdb\xe5\x8a\xd2\xd0\x3e\xb4\x62\x40\x8c\x92\xd0\xe2\xb7\x80\x75\x31\x17\xc2\x75\x64\xd3\xf7\x11\x65\xce\xa8\x0d\x93\x6c\x84\x88\xf0\xb2\xed\xca\x01\xd8\x61\x47\x08\xf0\x4e\x01\x5c\x8c\x75\xcd\x98\x5f\x94\xb6\x6c\xa2\x90\xae\x74\x43\x64\x41\xce\x3d\x28\x2e\x73\xaa\xa9\x62\x3a\x4e\x4d\x9d\x8e\x8a\x82\xee\xcd\x8a\x43\xac\x64\x7f\x02\x4b\x23\x83\x7c\x36\x2e\x0b\x32\x19\xff\xd9\x0a\x07\xa2\xf3\xa6\x11\x0b\xec\x4e\xc7\x60\xf9\xb9\x2b\x5f\xe5\x7c\xa8\x71\x94\xf6\x80\x76\xc9\xb3\xda\x39\x7e\xfb\xed\xe5\x9b\x54\xa1\xa8\xfd\xd2\xc9\x0e\xf0\xef\xee\x36\x59\x40\x86\x3a\x55\xfc\xc7\x26\x54\x77\x40\x1d\x0f\x0f\x82\xf6\xfd\x5d\xad\x6d\x96\xb1\xd6\xb8\xf0\x86\xab\xdb\x5d\xde\xf2\xb5\xce\xbb\xf7\xfd\xaf\xe7\x17\xc4\x3e\x7d\xc8\x3e\xd0\x33\xc8\xae\xad\x07\xdd\x9b\xff\xd7\xf3\x8b\x95\x25\xac\x28\x02\xce\x8a\xc2\xc9\x67\x46\xd0\x70\xe9\x12\x2c\x4e\x48\xde\x20\xc0\x1d\x86\xf7\xa9\x19\xd6\x18\x0c\x66\x9e\x4f\x32\xc5\x7d\x4a\xd5\xd9\x2d\x9b\x70\x19\x38\x22\xec\xb9\x06\xe4\x2c\x63\xad\xfb\x49\xce\xd5\xed\xa1\xf5\x1b\x55\xfe\xbe\x2f\xf1\xc6\xf3\x32\xe8\xac\x0a\xf7\xae\x3c\x50\x50\x27\x6c\x29\x1b\x72\x67\x2b\x22\x44\xab\x0f\x3e\xf2\xea\x35\xb9\x10\xaa\xa9\x59\xeb\xcb\xbd\x3a\x98\xe1\xd7\x77\xa8\x4c\x80\x02\x1b\xea\xf5\xc1\x8c\x3f\x07\x06\x57\x92\x46\x0d\x2a\x5a\x6b\x90\xfc\xf7\x01\x40\xbe\x73\x47\x2e\x82\x07\x62\x37\x10\x74\x39\x75\x11\x88\x23\x9b\x53\xdc\x17\x52\x74\xdd\xb4\x1e\x23\x40\xab\xd3\xa0\xe4\xad\x2f\x67\x45\x5e\xe4\x6c\xf1\x42\xe5\xf4\xd5\x08\xa6\xea\x62\xee\xbb\xeb\xa2\x8a\x1c\xbd\x3a\x8a\x19\xe3\x9a\x97\xbc\xa0\x75\x81\x19\xed\x7c\xa2\x3f\xdf\x93\xc1\xbf\x6e\x48\x70\xdf\x7c\x79\x44\x4e\x64\x0d\x63\x67\x54\x90\x82\xb9\xec\x77\x16\x57\x2c\x51\xd4\x38\x7d\xc6\x20\xb9\x0f\xeb\x22\x22\xd3\xbd\x80\x6f\xee\xb8\x41\xcb\xc9\x74\x0a\x1b\xbd\x69\x89\x3d\x17\x86\xba\x4e\xc8\xb7\x96\x3a\x5b\x8e\x07\x61\x23\x07\x52\x8b\x6f\x3c\xdf\x93\x79\x3e\x2a\xbc\x15\x65\xdc\x8e\x54\x6d\x64\xdd\x26\xfc\x8c\x4f\xa3\x5f\x25\x38\xe3\xfa\x03\xab\xe4\x4e\x79\x5c\xec\x72\xc5\xa0\xc5\xb5\x79\x20\x15\x87\xca\xdd\x54\x13\x8a\x38\x2a\x6b\x0a\x6a\xa4\x5e\x34\x58\x25\x31\xa2\x76\x9c\x15\xf6\xf3\x63\x58\x43\x2d\x88\x24\xb7\x8a\x14\x3f\x93\x91\xc5\xea\xbd\x1a\x53\x5f\x1d\x18\x0a\x87\x80\x6f\x24\xd7\xe7\xbe\x5b\x0c\x30\x2c\xa4\xb0\x21\x80\xa6\x6f\x6b\x03\x9b\x71\x6d\xd3\xa2\xe3\x50\xe6\x67\xd7\x5b\xcf\xa0\x6d\x91\x12\xa8\x6a\xee\x57\x71\x70\x1b\x5a\x7b\x68\xbb\x92\xbf\x5d\xa1\xf0\xbd\x48\xdf\xbe\x36\xbc\x4b\xfc\x85\xfe\x09\xed\xf3\x58\xd2\xfd\xce\xd5\x5f\x72\x15\x84\xd0\x07\xb6\xd6\x08\x47\xc7\x93\xc9\xf1\x04\xd8\x86\xe3\xc9\xb1\x63\x2d\x0b\xef\x0c\x6d\xa9\x70\x3b\x6c\x5a\x99\xbd\xee\x6d\x99\x10\xf2\x8d\xcb\x4f\x00\x49\x97\x57\x3c\xaf\xbd\x53\x75\x5b\x3b\x1a\xd3\xd5\x75\xef\x5c\x94\xa6\x18\x74\xd8\xcd\x4d\x38\x71\xeb\xaa\x3d\xe3\x0b\x9b\x8f\x75\xa7\xa6\xaf\x76\x82\x89\xf0\x10\xae\xcc\x2a\x11\x3e\x7c\xbd\xdb\x99\x21\x12\x49\x9e\x97\xc5\x3d\x76\x56\x99\x2c\x4b\x2c\x07\x36\xf7\xb2\x70\x9b\xcf\x2f\x16\xf1\xc5\xab\x2f\xb0\x34\xda\xb4\xe7\x1e\x26\xa2\x74\xd7\xe9\x8a\xba\xc2\x3f\xb6\xf9\x41\x44\x2b\x54\x01\x5a\x54\x73\x5a\x33\x85\x25\xcc\x6d\xc1\xe6\xfe\x3a\x9f\x2b\x58\xde\x8f\xf1\xb0\xaa\xb1\x9d\xe2\xfe\x95\x8d\xf1\xd8\x93\x89\xbc\x92\xbc\x3f\x79\xd6\x98\x54\x54\x3f\x9c\xda\x3a\x1e\xc3\xfa\x41\x13\x21\xd7\x7f\xe7\x40\xd7\x3d\x08\xaa\x3f\xda\xac\x71\xc1\xb1\x68\x59\xc9\x42\xce\xa2\xbd\x7f\x22\xc5\x49\x3d\xdf\x8f\x24\xa9\xe7\x6e\x75\xed\x12\xbc\xcc\xa4\xa3\x22\x3c\x37\x30\x73\xb6\xde\xa6\x72\xa9\xff\x2c\xe3\xf6\xc2\x43\xe5\x8b\x0f\x17\x67\x6f\xde\x5d\x4c\xca\xfc\x97\x18\x07\x32\xa6\xe3\x98\xaa\x99\x9f\x03\x57\xbd\xb6\x91\xa8\xe7\x00\x9c\xe0\x8a\x55\xb6\x75\x17\x2b\x56\x97\x1c\x63\x14\x0f\xc9\x6e\xef\xf9\x84\xfa\x39\x6d\x83\x15\xaf\x7a\xc1\x3a\xed\x68\x5c\x9f\x5d\xb4\x5c\xd5\x6c\xec\x0b\x43\x4d\x79\x01\x41\x58\x2d\x45\x0f\xb0\x74\x4f\xf7\x4e\x73\xec\x94\xd0\xd8\x47\xb1\x5c\xd5\x20\xb7\xdc\xa9\xd7\xd9\x63\x42\xec\xfe\x42\xa2\xbe\x0a\xac\xd5\xd4\xd1\x19\x16\x76\xaa\x6d\x3e\xda\xaa\xe6\x0b\x5e\xb0\x19\x94\xc4\xe6\x62\xa6\xda\xdc\x82\xd6\x88\xda\x33\x00\xc4\xc1\xb1\x96\x2e\x79\x33\xd9\x3b\x30\x89\xfa\x74\x49\x08\xd4\xef\xbf\xf9\x08\xc5\xea\xc1\xfe\xba\x67\xf5\xb1\x99\x4e\x2f\xd6\xdf\x87\xd6\x78\x77\x94\x66\xaf\x68\xda\x99\x83\x36\x01\x6e\xa4\x4a\x0f\x75\x6a\x88\xf2\x29\x51\xcb\xb2\xe0\xe2\x76\xe4\x0b\x8d\x4d\xa5\x4d\xb1\xca\x88\xf9\xc1\x81\x73\xcd\x68\xf1\x18\x62\xb0\x73\x20\x20\x69\x84\x40\xef\x49\x8f\x0f\x8c\x95\xb9\xab\xff\xe6\xd0\x0e\xea\x4e\x12\xb1\x78\x84\x5d\xfe\xd9\x6d\x2b\x2f\xe9\x6c\xa7\x8e\xbf\xd0\x61\x07\x6d\x0b\xf2\xcd\xf9\xa5\xaf\x17\x18\x2a\x2e\xf0\x5d\x59\x13\x5a\x6b\x3e\xa5\x99\x3e\x25\x55\x03\x55\x5d\xa0\x46\x85\x25\xb3\xf6\x76\xdc\xe3\x15\xd0\x33\x9d\x8f\xad\x18\x09\x2e\x5a\x4a\x16\x0b\xd3\xbf\x86\xe2\xd0\x20\xf7\x36\x95\x75\x2a\x80\x90\x55\x57\x65\xfe\xaa\x29\x8a\x2b\x59\xf0\x6c\xe9\x0b\x1c\xa0\xfa\x25\x37\xa8\xa8\x17\x17\x9d\x15\x77\x74\xa9\x5e\x87\x33\x27\x14\x9e\x11\xaa\x35\x2b\x2b\x04\x19\xb3\xdc\xd5\x44\xc7\xad\x06\x06\x0b\xef\xba\x02\xeb\x53\xca\x0b\x7f\xf7\x1b\xfb\xa0\x17\x97\x8f\xc9\x7b\xb6\x60\x75\x77\x26\xc2\x3c\x82\x4e\x54\x77\x74\xd8\x78\xe0\x66\x1a\x05\xf2\x0d\xd6\x54\x58\x3b\xa8\x9e\x59\xf2\xe9\x4a\xb7\x58\x8f\xc4\xc2\x44\xff\x94\x2f\xa7\xef\xa5\xbe\xc2\xb7\xbb\x33\xc7\x39\xdf\xd3\x3f\x2d\x0c\x37\xb6\x74\xe3\x98\xc3\xcc\xb9\xba\x7d\xd4\x64\xbd\x3c\x16\x6e\x79\x3c\xd0\x41\x05\xde\x1a\x13\x19\x02\xe4\xd9\xd1\x0c\xf4\xc1\x6f\xb9\x59\x96\x85\xf8\x9a\xd9\x50\xea\x91\x05\xc2\x92\x51\x57\xcb\x59\xb0\x3b\xa8\xcc\xae\xdb\x4a\xc1\x56\xf5\x92\xc9\x92\x11\xba\xa0\xbc\xa0\x37\x05\x78\x5a\x98\xce\x6d\x5f\x11\x12\xf8\x19\xac\x0a\x2c\x8c\xd2\xdd\x10\x73\xd6\x1e\x36\xf1\xf4\x6d\xd2\x99\xf0\xda\xe0\x04\x0a\x99\xdd\x86\xfc\x06\x54\xb6\x52\xae\x44\x3d\xdc\x64\xba\x24\x34\xcf\x89\xe2\x33\x01\xe1\xce\x42\x93\x82\x6a\x26\xb2\xe5\x84\xd8\x54\xce\x2a\xa8\x1c\xad\x6b\xee\xfd\xfa\x05\xd4\x6d\x6f\xab\x65\x66\xb7\x72\x3a\x5d\xa9\x34\x6d\x4d\x9f\x16\x51\xe0\xea\xa9\x92\x02\x07\x67\x4a\xd1\x59\x14\xa2\x58\x2d\x1d\x83\x3b\x6f\x93\x0f\x38\x74\xe4\x32\x0b\x38\xd7\xa5\xda\x85\xc6\xb6\xa1\xaf\x1e\xda\xea\x46\x68\x5e\xb2\x95\xac\x9b\x04\xf4\xb7\x6b\x2e\x0c\x66\x28\x9b\x96\x14\x02\x53\x6c\xa0\xab\x2b\xc9\xc2\x73\x3b\xbf\x35\x5b\xef\x2a\x42\x05\x7f\xbf\x98\xf5\x06\x78\x19\x60\xd1\x2d\x11\x8a\x3b\xdb\x74\x2f\x2d\x97\x72\x02\x71\xb6\xed\x41\x7f\xff\xeb\xbf\x4f\x16\xa1\x8d\x01\x3e\x37\xe4\xf3\xd4\xcc\xac\x64\xf5\xcc\xd5\x1c\x29\xa9\xe0\x53\xa6\xcc\xa9\x2f\x0d\x88\x58\x3d\x1e\x14\x25\xba\x33\xc0\x81\xde\x14\x2b\x0b\xe9\xc5\x6d\x1f\x57\x74\x84\xc1\x29\xb5\x62\xd9\x49\x2d\x4f\x6d\x4d\x7c\x31\x66\x9f\x58\xd6\x68\xb8\x27\x60\x45\x27\x27\x42\x9a\x67\xbd\x36\xc1\xeb\xe6\x06\x19\x2e\x18\x60\x65\xba\xae\x02\x97\x0e\xce\xa6\x77\xb7\x54\x73\x53\xe1\x5e\xb1\xa9\xe1\x09\x5e\x4d\x7e\xfb\xdb\x98\x05\xa3\x37\x27\xf4\xae\x58\xd6\xd4\x5c\x2f\x0d\x7a\x63\x9f\xf4\x64\xaa\xa0\x9e\xc5\x39\xa4\x6a\xb0\xc4\x6b\x4e\x41\x61\x84\xae\x9f\x78\x45\x5a\xe0\x35\x00\x75\x70\x3f\xb5\xca\x53\xd6\x7d\xf0\x72\x76\xd9\x53\x8b\xc0\x0c\x04\xb6\x60\xae\x26\xe4\x4a\x2a\xcc\xfe\xe0\xf3\xfb\x44\x39\xef\x3e\x1b\x7a\x6e\xda\x67\x47\xd1\x09\x48\x2d\xcf\x9b\xa6\xf7\xaf\x20\xe4\xf5\x11\x1e\xcc\x38\xaf\x21\x49\xa6\x26\x9a\xce\x56\x4a\x68\xc8\xba\xb3\xe8\x36\x17\xf3\x8e\xed\x0c\x76\x8d\xfb\xb8\x4d\x1f\x9c\xf0\x4d\x2e\x57\x01\xa6\x1b\xef\x60\xb3\xf3\xc4\x6c\xe3\x97\x6c\x4e\x17\x6c\x23\x11\xa8\x64\x3e\xd9\x80\x37\x01\x58\x63\xba\x36\x4c\xbb\x0f\x2b\xf0\xe9\x61\x94\x62\x25\x94\x86\xb8\x87\xec\x6c\xa2\xa1\x37\x4b\x52\x48\x09\x89\x17\x9a\x8a\x08\x99\x33\x03\x66\xe0\xb6\x40\x0b\x35\x22\xd7\x67\xf6\xc5\x2a\x18\x12\x93\x87\x01\x87\x54\xb1\x6c\xc3\x0b\x7b\x90\xbb\x83\xbc\xd8\x48\x34\x63\xbc\xca\x3a\x51\x01\xd2\x86\xb3\xb4\xa5\x59\x6c\xc1\x8a\x82\x2d\x18\x18\xde\xa6\x7c\x46\x30\x21\x77\x69\x53\xb4\x39\x2f\x22\x59\x43\x9a\xe3\x9a\xe7\x31\xc2\xf2\x2a\x7d\x37\x07\x72\x27\xeb\xdb\x42\xd2\x3c\x28\xc0\xae\x48\xc1\x6f\x19\x79\xc3\xaa\x42\x2e\x6d\x5e\x35\x91\x93\x6b\x4d\x35\x9b\x36\xc5\x75\xd4\x46\xc6\xca\xbf\x2a\x53\x7c\xa7\xf2\xaf\xe9\x70\x45\xfe\xbd\xbc\x3e\xbf\xbe\x7c\x96\xfe\xaf\x8f\xd3\x46\xbc\xf8\x25\xac\xf6\xd0\x7a\x3e\xfe\x63\x9f\xc1\x77\x4c\x8a\xa6\xff\x1d\x34\xa1\x5f\xc9\x5a\xd3\x62\x47\xbc\x4d\x36\xa7\xd5\x59\xa3\xe7\x6f\xb8\x82\xb2\x35\xa9\x2c\xce\xda\xf7\x41\xda\x1d\x06\x7a\x63\xcb\x61\x12\xee\x60\xca\xbe\x77\xfe\x6f\x67\x57\x84\x36\x06\x0e\xb4\x4d\x28\xb5\x33\x0d\x7f\xb8\xb2\x6b\x4c\xc3\xb8\xe5\xba\xec\xd7\x3d\xab\x72\x6f\xed\x7b\x4d\x4f\x15\x40\x3c\x78\x07\x1f\xd0\x3b\xb8\x1f\x45\x91\x34\x86\x8b\x0b\xae\x39\xd5\xb2\xde\x97\x5b\x65\x67\x00\xef\x6d\xd1\x28\x2d\x4b\x7b\x41\x2e\xdd\x1b\x10\x86\x13\x69\x33\x58\xeb\xb6\x75\xd6\x00\x4b\x26\x6c\xd4\xa5\xd0\xac\x9e\xd2\x8c\xad\xa4\xc0\x18\x81\x02\x0a\x47\xe7\xee\x9d\x88\x71\xff\x64\xfd\x94\xa0\x4a\x70\xf1\xe7\xd7\x7f\x0a\x1c\x8d\xff\xec\x59\x34\xab\xf6\x0a\xb9\x31\xc1\xb2\xb8\xa4\x78\x29\x27\xf7\x63\x2a\xde\xe2\x3f\x8a\x15\x87\x2b\xdc\x82\xff\xd7\xd0\x02\xb7\x2e\xee\x00\x52\x26\xd9\x39\x86\xbd\xc0\x57\xf7\xa0\xed\xfa\xfc\xa9\x62\x68\x17\xe0\x13\x14\x19\x85\x5d\xb4\xae\xa9\x50\xe6\x20\x53\x85\xa5\x63\xcb\x2e\x1e\x93\x13\x9d\x55\x11\xfe\xd7\x49\xb1\x91\x3e\x2e\xd2\xfe\xa3\xe7\x83\xf4\x04\x52\x45\x23\x42\x86\x0e\x37\xe3\x23\x82\xc3\xd7\x3e\x81\x54\xec\xaa\xf6\xe2\xe2\x0d\xb7\x6b\x2f\x09\x7b\x6c\xd7\x1e\x4a\xc2\xc5\x23\xeb\x44\xbe\xe6\x4a\x63\xaa\x09\x7c\x19\x42\x8d\x31\x19\x8f\x61\x7e\xaf\x8c\x94\xc0\xab\xff\xa2\x79\x5e\xbf\x46\x2a\xef\x74\xe0\x75\x4c\x24\xb9\x11\x51\xb4\x2f\xa0\xe7\x24\x8f\x13\xbd\xac\x6c\xb5\xf6\x8f\xe7\x57\xd0\x97\x22\x7f\xfc\xfd\x4b\xe0\x86\x7f\xfb\xc5\xef\x5f\x46\x83\xd9\x67\x99\xb5\x87\xfc\x2f\xf4\x36\x3f\x44\x36\x88\x4e\x46\x07\xc8\xfe\x6b\x78\xd0\x6b\x4c\x7e\x60\xc8\x93\x45\x85\x78\x01\x0c\xac\x79\xb2\xba\x1d\xa7\x3a\xa4\x24\x18\x52\x12\xb4\x6d\x48\x49\xb0\x79\x62\x81\xa4\xbe\x17\x07\x90\xa0\x7f\x48\x3a\xbb\x4e\xe5\x90\xc0\x5d\x7d\x8e\x04\xae\xf7\x40\xfb\xd1\x45\xda\x96\x86\x61\x60\x71\x79\xbf\xda\x34\x59\x6f\xde\x5f\xff\xd7\xd7\x67\x5f\x5e\x7c\x0d\xeb\xb4\x71\x65\x06\xac\xb9\xd8\x93\x52\x6b\x47\x97\x28\x76\xaf\x77\xeb\xc0\x2e\x56\x5c\xd7\x05\x79\xff\xf6\x3a\xd1\x6b\x7d\xaf\x3a\xc2\x5f\x8a\x69\xcc\xbe\x1d\xd6\x11\xd0\xbc\xa4\x58\xbd\xbb\x1c\x7a\x7b\xf5\x17\x0c\xea\x81\x76\xb4\x38\xe6\xa4\x71\x15\x07\x50\xa3\xf4\x1d\x23\xf9\x4c\x7c\xba\xcd\xa6\xe1\x46\x3e\x4b\x6f\xee\xfd\x1c\x49\x2c\xcf\x5c\xa7\x27\x82\x8c\x4c\x9f\x56\x07\xd9\x22\x0d\x42\x42\x12\x51\x1b\xe2\x69\xc8\x26\x53\xca\x11\x8c\xcf\x15\xaa\xab\x4d\x85\x14\x76\x89\xea\x37\x0e\x60\x8b\x28\xb8\x2a\x10\x81\xb3\x7c\xc7\x3c\xdb\x67\x59\xda\x5c\x05\x22\xb4\x97\x02\x01\xac\x68\xd6\x4f\xca\x77\x56\xef\xa6\x7d\x84\x4f\x20\xf9\xfd\xc1\x89\x09\x8c\xba\xc3\x74\x24\xbe\xbf\x7d\x5c\x34\xdf\xf9\x6a\x66\x56\x9a\x72\xc4\x84\x2a\xef\x49\x87\x5e\x78\x49\x29\x5c\x9f\x18\x06\xc8\x33\xa4\x44\x7f\xdb\x9b\x02\x65\xd7\xca\x93\x6a\x2e\xb5\x14\xfb\x4b\x14\xb5\xa9\xff\x2e\xe2\xba\x82\x37\xce\xbd\x3b\x40\x80\xf8\x30\x57\x84\x37\x99\xaf\x78\x89\x5b\xf3\x78\x9a\x83\x78\x18\x92\x79\xb5\x69\x6e\x0f\x47\x67\x6e\x5c\xce\x73\x0a\xd4\xac\xf2\xcb\x37\x3b\xc2\x5c\x43\xbe\x65\x6c\xcf\xb4\x32\x86\x39\xe9\xc4\xc3\x31\x9f\xb8\x5d\xbf\x7c\x63\x05\x0d\x97\x8d\x4e\xd9\xfb\x40\xee\xbf\x8a\x3b\xe3\x9d\x64\xad\xef\x64\xbd\x87\x3c\xf4\xdd\x9e\x57\xc2\x09\xed\x6f\x6b\x59\x28\x77\x8e\x57\xba\x93\x48\x4a\x2b\xb7\xba\x02\xb3\xa3\x3d\x43\xdf\x93\x53\xee\x53\x3e\x71\x7d\x4d\x32\x59\x76\xea\xda\xcd\x19\xf2\x01\xe7\xd7\x97\xef\xf8\x0c\xa7\xe2\x66\x4d\xa6\x8c\xea\xa6\x66\xe3\x19\xd5\x7d\x43\x73\x45\xfa\x6c\xb6\x7b\xc0\x71\x78\x7e\x9f\x03\x9e\xbb\x06\x3c\x17\x40\xe1\x43\xf8\xee\xb9\xa2\xbb\xa7\x45\x73\x07\xe1\xd7\x7e\x56\x99\xd1\xdd\xf5\x48\xdc\x31\xf7\x99\x55\xc2\x9a\xb3\x6e\x49\x03\xf5\x48\xcd\xbe\xb7\x33\x52\x50\xcb\x7f\x00\xde\x4a\xa0\x02\xfe\x1b\xb4\xd2\x02\x0a\xa5\x45\x61\x76\x55\x8a\xb6\xc8\x88\x6a\xfd\x74\xd1\xa9\xb5\xa4\x95\xf5\xd9\xcd\xe5\x9d\xb8\xa3\x75\x4e\xce\xae\x2e\x77\x83\xbd\x12\xf2\x06\x21\xac\xc5\x95\xf4\xdb\x22\x73\x50\xdb\x3d\x50\x06\x8d\x05\x18\x19\xb9\xe1\x5a\x75\x4a\xaa\x06\x2a\x2f\x43\xf6\xbc\x53\x0e\x04\xca\xdc\xf8\x4b\x91\xc4\x86\x09\x22\x33\x4d\x5d\x0d\xd0\x1b\xa6\xef\x18\x13\xe4\xe5\xcb\x97\x68\xc7\x78\xf9\x87\x3f\xfc\x01\x9c\xca\x49\xce\x32\x5e\xae\xbf\x08\x6f\xfd\xcb\xab\x57\x31\x83\xfe\xfb\xd9\xbb\xaf\x09\xcd\x40\xa6\xc4\x32\x3e\x38\x36\x1c\x70\xd8\xbd\x1a\x91\xff\x7b\xfd\xcd\x7b\x47\x61\xd4\xca\xaf\x00\x3f\x7e\x8b\xa2\x64\x31\x1b\x24\xc5\x21\x8c\xad\xb5\x55\x50\x3d\xf7\xa1\x41\x14\x2c\x9d\x41\x00\x99\xbd\xfb\x51\x8e\x7e\x90\xd9\x9f\xcf\xe6\xb0\xa9\x5c\x00\xfc\x16\x3c\xb3\x39\x9b\xd0\x7a\xe4\x0a\x60\x60\x1e\x01\x8c\xf7\x71\xe4\x25\x62\x0c\xb3\xe0\x11\x7a\x5e\xdb\x38\xa2\xb6\x16\x76\xcd\x94\x11\x35\x6d\xb9\x53\x1c\xae\x85\x21\xc5\xa2\x8b\x86\xec\xc3\xf9\xc5\x5e\xee\xbd\xe8\x2d\x2d\xde\xb0\x2c\x72\xc1\x95\x0e\xaa\x5e\x5a\xb4\x03\x2a\x62\x72\x41\xb3\x39\x61\x42\x43\x3e\x2a\x3c\x60\xf3\x7a\xc4\x20\x73\x2a\x72\x73\xc3\xa0\x3c\x02\x0c\xf8\x44\x9e\x2b\xdb\xf8\x02\x5c\xf9\x3d\xe8\x04\x4b\xb6\x18\x99\x1a\x09\x38\x04\xd3\x96\x31\x09\x82\xd0\x22\xeb\xb5\x5e\x7c\xa2\x90\xa6\xc3\x6c\x15\xaa\x8b\x95\x0d\x88\x53\x61\x31\xaf\x98\xce\x12\x4b\xae\xa7\xf9\x5f\x10\x92\x61\xf6\x95\x8f\x75\xa3\xf4\x97\x8d\x39\xe0\xd8\xd2\xa1\xdb\x16\x6b\x3d\x5f\x1b\x11\x5d\x1f\xac\xbd\x0f\xb4\xc0\x59\xc6\x14\x82\xf2\x0f\x18\x67\xa3\xdb\xb7\x7f\xc0\x8d\x8c\x1e\x4f\x4e\x37\x0d\xe9\x22\x67\xb9\x30\xb8\x9f\x36\x5a\x8e\xa1\x4a\xb6\xcb\xd8\xd2\x1b\x3b\xdd\xb6\xb3\xa2\x9a\xd3\x11\x99\xd1\x80\x89\x5d\x1f\x31\x00\x40\x2b\xa7\xc0\x17\x09\xe3\x3c\xb0\x0a\x83\xf0\xac\xa1\x1f\x20\xab\x2d\x63\x2c\x68\xc9\x20\xc2\x0b\x27\x16\x3d\xd8\x4a\x51\x3a\xc5\x67\x82\xd5\xa8\xa5\x85\x18\x60\x52\xd0\x1b\x56\xd8\xa1\x64\x9d\xb0\x8c\xaf\x5c\x34\x1d\xab\x0d\xf6\x54\x84\xce\x66\x35\x53\x8a\x2f\x98\x0d\xa2\xe6\xff\x6c\x8b\xe1\xcd\x19\xb9\xba\x78\xe7\x42\xc9\x15\x31\x8c\xad\x66\x31\x89\xf4\xb0\xf9\x34\x8e\x06\xb4\x5a\xd9\x63\x42\xc8\x85\x92\x1a\x4a\xbc\x99\xfe\xed\x91\x28\x5f\xd2\x19\xbc\x4c\xc7\x10\x33\x9e\xb2\x67\x6d\x14\x10\x86\x9b\xcf\x19\xcd\x5d\xdc\xad\x61\x29\xab\xca\x48\xd2\xe4\xdc\x5c\xd1\xa9\x2d\x33\x8e\x91\xd9\x79\x63\x44\x15\xda\xab\x7a\x0b\xdb\xc7\x39\x23\xb2\xce\x19\x16\x31\x9f\x82\x33\x8f\xef\x36\xa0\xef\x90\x82\x88\x9b\x91\x6e\xb8\xae\x69\xbd\x44\x8a\x69\x4f\x22\x7a\x38\x83\x33\xb1\xbc\x3a\xf4\x0a\x23\x43\x58\x15\x89\xc9\x29\xe7\x5a\x22\x42\x23\x09\x12\x76\xdb\xa2\x6c\xeb\xae\xa5\xe2\x4c\xd3\x00\xfc\xaf\x2d\xf4\xc7\x7f\xf6\x98\x1a\xd7\x84\xe0\x78\x20\x32\xac\x23\x03\x9f\x05\x40\x67\x73\x4b\xd7\xbb\x57\x94\x10\x94\x04\x69\xac\x47\x1a\x36\x1b\x91\xcd\x1d\x12\xf0\x5e\xf9\x4c\x4f\x0c\x03\xad\x1b\x5a\x14\xcb\x31\xfb\x64\x48\x89\xb9\xc4\x40\x43\x21\x4d\x25\xb8\xf3\x37\x42\x31\x9d\x52\xb7\x9e\xe0\xe5\xab\x6a\xcc\x37\xa1\xc8\x11\xae\x49\x48\x48\x40\x75\x84\xdd\x1a\x41\xe0\xa6\xd1\xe8\x02\x37\xda\xfc\x49\xda\x3a\x17\xac\x5e\xda\x11\x12\x3e\xdc\x02\x9c\xc9\x96\x30\x47\xe0\x0e\xea\x6c\x7e\xf1\xa9\xaa\x31\xf4\x28\xf1\xeb\x15\xf0\x5b\xed\x0c\xb3\x34\x39\xee\xb1\x0b\x3e\xee\x12\x02\x86\x43\x27\xb3\xf0\x09\x60\xb1\xb3\xf7\x6f\x52\xd0\x17\xb6\x14\x16\xb1\xdb\xa2\x19\xc6\x6e\x7b\xcc\x0d\xc4\x76\xf6\xc0\xde\xd8\x4c\x57\xee\x17\x4c\x4e\xec\x6a\x8c\x39\xa9\x8e\x92\x5b\x66\x91\xb0\x91\x3c\x41\xd9\x65\x5f\xde\x62\x3a\x35\x83\xd0\x6e\x8c\x55\x67\x4b\xe8\x16\x47\x4a\x3d\x8b\xad\xc1\xd9\x4d\x24\x15\x4f\xb7\x6d\x6c\xa6\xbe\xd5\x77\x6e\xfb\x92\x3f\xde\xf6\x0e\x62\xbb\x65\x11\xaa\xbd\x4d\xad\x03\x7f\xe6\xbc\x9c\xd4\x06\x30\x65\x1e\xf8\x18\x39\x0f\x46\x14\x72\x1b\x2b\xa2\x65\xfa\x91\x92\x6d\x3c\x66\xbb\xcd\x6d\xf1\x0e\x16\xbc\xd5\x85\x0b\xe7\xd0\xb5\x8d\xdc\xb2\xe5\xb1\xc2\x1b\x60\x30\xd8\x9c\x57\x58\x9b\xcb\x90\x07\x23\x01\x6f\x79\x0d\xb0\x7d\x07\xd9\x6c\xdc\xc0\x88\xe3\x2e\xc5\x88\xbc\x97\xda\xfc\xef\xe2\x13\x57\x96\xdb\x7b\x23\x99\x7a\x2f\x35\x3c\x79\x92\x13\xc2\x85\x3e\xe5\xf9\x58\x9d\x14\x07\xe7\x4e\x40\xe7\x20\x38\xc0\x82\xdc\x39\xb8\x34\x22\xfe\x2c\xb9\x22\x97\x90\xd9\x1b\xb7\x74\xcb\xa1\xc1\x7f\xd7\xa5\x49\x31\x03\x3b\x19\x1b\x52\xe9\x58\x4f\xfa\xf5\x91\xed\xf9\xc9\xba\x73\x7c\x3b\x9f\x84\x9d\x00\xe8\xc6\xf0\x17\xc8\xf0\x56\x15\x34\x63\xb9\x4b\x57\x45\xcd\x4e\x51\xcd\x66\xbd\x3e\xe6\xf7\xb5\x92\xd5\x33\x50\xe5\x65\x51\x69\x13\x37\x2c\x60\x6b\x42\x8c\x6d\x4b\x72\x1c\x0e\xbe\x35\xf8\x3f\x32\x42\x69\x8f\x9d\x01\x8f\xf5\xb5\x41\xed\x8f\xe3\xd5\xb6\xb8\x97\xc1\xd0\xc8\x95\x94\xb4\x32\x77\xf2\xbf\x0d\xf3\x01\xa0\xfa\x3f\xa4\xa2\xbc\x56\x13\x72\xe6\xd2\x68\x85\xbf\x59\xe9\x31\xe8\x66\x8b\x29\x54\xe0\x11\xfc\x63\xc3\x17\xb4\xb0\x49\x39\xa8\x20\x0c\xd3\x8c\x99\xd9\xac\x32\xa1\x23\x72\x37\x97\x0a\x39\x19\x1f\x7e\x73\x74\xcb\x96\x47\xa3\x24\x0d\x86\x6b\xe1\x8d\x3f\xba\x14\x47\xad\xb6\xb8\x73\x5b\x3d\x8f\x06\x5e\xb5\x47\xf0\xdb\xd1\xee\xf9\xdc\xad\x38\xab\x6d\x8b\x3a\x6f\x9a\x40\xf2\x15\x7b\x4c\x3c\x4c\xdb\xe2\x23\xbd\xb0\xed\x42\x4c\x76\x30\xbd\x41\x71\x76\xb3\x74\x09\xe5\xac\xa0\xba\x2e\xc7\x26\x0d\x09\x32\x6f\x20\x1f\x1b\x10\xeb\xa8\x08\xd2\x45\xca\xc4\x83\x72\xd9\x71\x0e\xb5\xc9\x86\x9e\xd6\x0d\x1b\x91\x5c\x8a\x63\x6d\xd5\x5d\x61\xd2\xc5\xd5\xd4\x56\xf9\x86\x73\x38\x51\xa7\x49\x83\xd2\x9a\x41\xae\x2d\x97\x44\xd2\x6a\x18\x30\x01\x23\x68\x3a\xb5\xf3\x10\x31\x7f\x6e\x1a\x32\x3e\x20\xcf\x0e\x69\xc3\xf2\x84\x04\xdc\x05\x69\xbd\xc3\x61\xdb\x43\x0f\x06\xef\x6a\x4f\x93\xc6\x7b\x08\x88\x00\x8b\xb7\x61\x82\xa8\x16\xf9\x27\xab\x65\xd2\x08\x1b\x54\x47\xe9\xd0\x19\x67\xd1\x6f\x5b\x5c\xe0\x49\xdb\x3a\xa0\xf9\x01\xd8\xfb\x85\x35\x54\x42\xde\xce\x20\x2f\x49\x2d\xf1\x68\xc0\xe7\x01\x7e\xb8\x81\x55\xed\xfd\xca\xb5\x47\xf5\x4c\x15\x80\x81\xd6\x3e\x8d\x5a\xf5\x68\xf5\x3e\xce\x59\xab\x91\x97\x53\x5b\x24\x1d\x8d\x0e\x8f\x05\x45\x9f\x6b\xa3\x11\x98\xb8\x02\xad\xe2\xdb\xa8\xc7\xb7\x38\x56\xf4\xb7\x78\x47\xab\xad\xac\x60\xfe\xeb\x4e\x35\x7c\x7a\x23\x1b\xed\xd2\x85\xd8\xdf\xa1\xe6\xb0\x96\xce\xfe\xb8\x3f\xd5\xf9\x36\x3a\x8e\x64\x46\xfe\x31\x20\x8d\x9e\x30\x5d\x3f\xac\x11\x61\x34\x9b\x1b\x0e\x70\x8c\x6e\x16\x86\x4b\x75\xec\xe8\x1b\xb3\x75\xc8\x18\xca\x55\x12\x93\x06\x7c\xfe\x34\x1c\xc8\x05\xfe\x39\xce\x6c\xe4\x5c\x2e\x95\x75\x5d\xb3\xcc\xa9\x68\x43\x17\x92\xc6\x74\xea\x39\x97\x1a\xd9\xaa\x7e\x60\x95\x20\xa3\xae\x54\x96\x32\xb2\x07\xcb\xcd\x67\xfe\x62\x24\x8d\xb7\x61\x45\x6d\x36\x1d\x83\x4d\xad\x5f\x51\x23\xd6\x46\x32\x04\x2f\x79\x34\xcc\xb2\x69\x16\x42\x9d\x6a\x2b\xc8\xde\x03\xb9\xa2\xc1\xdf\xbc\x4d\x71\x69\x4f\xd5\x1f\x46\x9a\xf8\x1d\x1c\x91\x62\x3e\xd5\x33\xab\x6b\x59\x9b\x35\x31\xa5\x08\x87\x5d\x2e\x69\x7d\xcb\x72\xcf\x25\x4d\xc8\x95\x59\xbc\x93\xd1\x93\xc6\xac\x1d\x35\x72\x29\xa3\xc3\x22\x65\x66\x42\xc7\x93\xc9\xb1\xad\xa0\xb0\x5e\xb2\x2c\x19\x7b\xa5\x0a\xe4\x5b\x88\xe1\x9d\xfb\xfb\x8e\x56\x0a\xd5\x11\x86\xbd\x01\x75\xa4\x84\x5a\x81\x7a\xee\x6c\x8a\x34\x21\xc4\x66\x75\x39\x5b\x08\x40\xdb\xaa\x95\xb7\x51\x29\x27\x19\x0e\xb1\x6d\xaf\x46\xde\x4a\x85\x7c\x9f\xfa\xd8\x9e\x94\xbd\xf1\xdb\x6a\xfe\xb7\xd2\xc0\x94\x51\x2e\x81\xab\xed\xf1\x6a\x47\x70\xed\xe2\x8a\x7c\xe3\x64\x9f\x38\x87\x41\x3d\xb7\x95\xb0\xb7\xd1\x93\x3d\x89\xc7\xe0\x6a\x7b\x3a\x0f\xc2\xd5\x76\x39\xc5\x7c\xe2\x1b\x0b\x22\x86\x2e\x9d\x9e\xad\x8b\xcc\xbe\xbb\xda\x0e\xe1\x5a\xb8\xda\xf6\xec\x6a\xb8\xda\xd2\x5c\x0f\x57\x5b\x8a\x2b\xe2\x6a\x4b\x95\xce\xb0\x3d\xfe\x02\x87\xd5\xe0\xea\x8e\x90\x67\x59\x3b\x60\xb9\x40\xd4\xad\x02\x24\xb7\xd5\xbd\xb5\x84\x1a\xaf\x2e\xbd\x51\xb2\x68\x74\x7c\xc9\xb9\xfb\xba\x0b\xe9\x3e\x4c\xdc\x69\x36\x53\x89\xfd\x6a\xc7\x01\xdf\x00\x5c\x1b\x92\xe3\xed\x7a\xdd\x85\xe6\x6f\x7b\x2d\xf8\x21\x55\x7f\x8f\x49\xf8\x84\xed\xd0\x69\x9f\xb0\x1d\x38\xf9\x93\x1b\xf4\x31\x29\xa0\xb0\x3d\x6d\x22\x28\x6c\x5b\x82\x77\x4a\x52\x28\xd7\x1e\xad\x65\xf5\x49\xcc\x91\x62\x2e\x7d\x66\xe1\x8e\x10\x04\x89\x9a\xb4\x42\x69\xcc\xd9\x11\x6d\xf5\x96\x3d\xab\xea\x1e\xaf\xee\x77\x31\x2a\x67\x57\x97\x5b\x69\x51\x82\xef\xef\xd1\xa3\x84\x6f\xfc\x8c\x35\x29\x97\xa8\x1a\x09\x7d\xb2\xde\xb4\x2b\xb7\x71\x96\x89\xac\xcd\xd3\xc8\x94\x6b\xd3\x7e\x6b\xe8\x7a\x98\xab\x34\x38\x67\x2d\x6d\x48\x4f\xcb\x01\x58\x2a\xeb\xca\xf4\xa0\x2f\x6f\x8a\x13\x38\x79\x1a\xf9\xf3\x80\xb2\x24\xec\x47\x54\x1e\xc9\xd5\xd6\x39\xa9\xe3\xb6\x92\x06\x2a\x9b\x51\xf1\x15\x68\xdb\x2a\x99\xbf\x46\x23\x29\x15\x42\x62\xa5\x28\x35\x42\x43\x85\x1a\x59\x33\x4c\x90\xa2\x43\xe4\xa4\xe1\x39\x7a\x40\xfb\xec\x02\xc7\x9f\x93\x63\x1a\x2c\xff\x2a\xf5\x28\xc9\xa3\x3d\xcc\x68\xc5\xbf\x63\x75\x5c\x16\xfb\x4d\xad\x73\xb0\xb6\x27\x77\x8a\x2a\x9b\xb3\x92\xc2\x3f\xdf\xba\xe5\x19\x54\x63\xfd\xeb\x41\x2d\xc7\xea\xd2\xb0\x1e\xa3\x4e\x94\xe9\xd1\xe2\x55\x92\x7f\x6c\xdb\x1e\xe9\xe2\xe1\x4f\x61\x07\x9b\x71\xd5\x11\x31\x0c\x70\x83\xa6\x00\x8c\x2b\x2e\xd3\x8c\x57\x5b\x1a\x2a\xb3\xc0\xdd\x7b\x82\x85\xef\xc6\xfc\x8e\xed\xa9\xf4\x34\xdb\xea\x67\x46\x9e\xf7\xe9\x6a\x5b\xb6\x98\xc2\xa0\x9f\x19\xf4\x33\xff\xab\xf5\x33\x01\x61\x77\xb8\x7e\x83\xda\x25\xcc\x88\xea\x74\x2f\x6d\xdd\x83\x09\x6a\x3f\x9d\x1a\xc5\xe9\x50\xda\x12\x83\x68\xfe\x38\x9e\x4c\x8e\xd1\x00\x32\xf1\xea\xd2\x46\x4f\xc7\x7f\x24\x4c\x64\x32\x37\xfd\x60\x81\xc0\x5a\x69\x60\x2d\x5b\x89\x3d\x9c\x4b\xe9\xc6\x0a\x4d\x28\xd0\xf7\xb6\xdc\xc3\x56\x28\xd8\x45\xe5\xbf\xdd\x0d\x83\xb5\x15\x02\x6d\x59\x31\x5f\x97\xc9\x6e\x99\x2f\x55\x65\x79\xb2\x36\x87\x40\xc1\x4b\x6e\xbd\x93\x0d\x76\x61\x4a\xa7\xbb\xef\x11\x72\x82\xdd\x4c\xb2\xaa\x19\xd9\x2e\x27\x25\x2b\x65\xbd\x1c\xf9\x6e\xcd\x8f\x9d\x71\xec\x1b\xa7\xc0\xf4\x65\x4d\x5d\x33\xa1\x8b\x65\x6c\x72\xa9\x4d\xed\x09\xb9\x3f\xb7\xa3\x07\x66\xfe\xfc\xc1\xa6\xfa\x97\xb4\xad\x7b\xff\xdb\x3a\x84\xa0\x90\xf3\xbb\x02\x34\xc6\xa6\xb1\x1b\xb5\xfa\x09\xf3\x94\x89\x05\x59\xd0\x5a\xa5\xdf\x37\xf2\x78\x7e\x2f\xe7\x0b\xae\x76\x12\x72\x70\x6d\x89\x1f\xea\x99\x65\xa3\xab\x46\x5b\x74\xec\xae\x91\xab\x48\xe6\xaf\xcf\x0a\xd3\xfb\x2a\x5e\x45\x14\xb6\x8a\x6a\xcd\x6a\xf1\x9a\xfc\xe7\xc9\x7f\xfc\xe6\xa7\xf1\xe9\x5f\x4e\x4e\xbe\x7f\x39\xfe\xd7\xbf\xff\xe6\xe4\x3f\x26\xf0\x8f\x5f\x9f\xfe\xe5\xf4\x27\xf7\xc7\x6f\x4e\x4f\x4f\x4e\xbe\xff\xea\xdd\x5f\x3f\x5e\x5d\xfc\x9d\x9f\xfe\xf4\xbd\x68\xca\x5b\xfc\xeb\xa7\x93\xef\xd9\xc5\xdf\x23\x3b\x39\x3d\xfd\xcb\xaf\xb6\x9a\x2e\x15\xcb\x6f\xb6\xc0\x6f\xd8\xc6\x8f\xa4\x8f\xdd\x5e\x76\xe5\x09\xce\x85\x1e\xcb\x7a\x8c\xdd\xbd\x06\x97\xc5\x2d\x3a\x75\x60\xb1\x8b\x7b\xd8\xd2\xe1\xb6\xc6\x9e\x13\x3e\x9e\xe0\xa2\xed\x4a\xbe\xd8\x81\xb1\xa0\x92\x79\x10\x18\xbd\xef\x3c\x04\x36\x20\x5f\xf9\xf8\xff\x1a\x94\x19\x62\x16\x14\xd0\xb4\x9e\x84\xe4\xa4\xaa\xf9\x82\xea\x36\xbc\x2e\x88\xb4\x8e\x1e\x30\x9b\x53\x2e\x4e\xdb\xe0\xae\x4a\xe6\xc0\x9e\x36\x8a\xf9\x2c\xfd\x86\xc4\x7f\xfc\xfa\x9a\x64\x05\x07\xf7\xf8\xda\xa7\x18\x8e\x1e\xc6\xc5\xd7\xcf\x98\x60\x35\x06\x98\x93\xd5\xe9\x43\xbd\x24\xae\x11\xf0\x44\xde\x9b\x76\x37\xd8\xb5\xce\x19\x7d\x40\x82\xef\x52\xb7\xa1\xcf\x2d\x7a\x1d\x42\xb8\xb1\x4d\x23\x6a\xfd\x10\x69\x55\xd5\x72\xc1\xd2\xbc\xa6\x2c\x4f\x81\x25\x4c\x94\x02\x87\xfd\x70\xfb\x71\x5b\x47\x7e\xd9\xe0\x05\xda\x89\x85\x8c\x3f\xa0\xd5\x5e\xc9\x7d\xb9\x03\x3e\xda\x87\xb9\x64\x2a\x60\x51\x1b\xa1\xf9\xc3\x15\x1a\xef\x19\x4e\x91\x39\x5d\x18\xd9\x93\x09\x5c\x24\x52\x65\xf0\x82\xeb\xde\x8a\xc0\xa3\x2b\x32\x9f\x95\x6b\x16\xd7\x70\x01\x96\x05\xc8\xaa\x91\x0e\x54\x56\x4a\x9c\x99\xbd\xa9\x97\xa0\x8f\x95\x04\x2e\x0e\x9e\x74\xb8\x85\x16\xcc\xb1\xb0\xbc\xc8\xd1\x7b\x33\x7a\x44\x9b\x48\xc3\x82\x8e\xcb\xee\xcb\x36\x03\xe0\xe4\x5a\x53\xdd\xa8\xc9\x97\x66\x66\x1f\xd8\xb4\x66\x6a\x7e\x16\xcf\x28\x9a\x29\x2a\x4d\xcb\x6a\x8b\x1d\x31\x37\x18\x3d\x8f\x7d\xbc\x01\xaa\x2e\xfc\x92\x7d\xf9\x7b\x8f\x56\x6c\x46\x90\x14\x8d\x22\x68\xa9\x46\x88\x10\x2a\x6a\xee\x35\x42\xe4\x86\x71\x6e\xd9\x12\x24\xbc\x2d\x41\xff\xdc\x40\x3e\x74\x80\x09\x6b\x12\xf6\xe4\x63\x67\x95\x0e\x79\x62\x40\x74\xbb\x35\x06\x04\x21\xe7\x06\x70\x60\x13\x12\x08\x83\x57\x17\xef\xa2\x07\xb3\x39\x8c\x6c\x06\xe8\x00\xc1\x9d\x98\xfe\xbf\x3a\xbf\xfe\xe5\x1f\xed\x10\xa7\xa1\x56\xa0\xb4\x76\x84\xd4\xa1\xb8\xcd\xd4\xb1\x0a\xe5\x88\x28\xec\xa5\xed\x02\x6d\x5b\x19\x25\xde\xa9\x11\x3f\xb5\x2e\x98\x35\xd3\x4d\x0d\x42\x35\xaf\x37\x0d\x2a\x48\xc1\xe8\x74\x0c\xb4\x4b\x6a\x4c\xc8\x71\x9a\x70\x5e\x57\x60\x22\x0f\x2e\xd7\xfa\xe1\xe1\x0e\x8e\xcc\xf9\x65\x8c\x2c\x65\x63\x63\x91\xb1\x76\x14\x31\xe2\x7c\x3c\x90\x51\x01\x99\x0b\x0d\xe5\x41\xb6\xc0\xec\x0d\x06\x53\x2c\x65\x03\x84\x30\x00\xde\x8d\x40\x19\xbf\x93\x6b\x73\x05\x7d\x42\x49\x6f\x19\xd1\x77\xb2\x7b\x8d\x60\x5a\x3e\x3c\x55\x19\xb1\x9a\x8b\x2c\xae\x58\x34\x36\x34\xca\x77\x0e\xa9\xb6\xc6\x91\x91\x75\x41\xad\x5c\x45\xff\x96\x03\x58\x21\xcb\xe6\x34\xb7\xa2\x56\x66\xf7\x60\x67\x5b\x77\xd4\xba\x66\xaa\x92\x02\x74\xac\x40\x47\x40\x05\x36\x21\xe4\xdf\x57\xf6\x25\x61\x89\x45\x41\x04\x43\xb5\x6d\x36\x67\xd9\xad\xcd\x01\xcb\x95\x91\x56\x31\x44\x6d\x64\x15\x01\x63\x98\x0e\x10\x44\xb3\xd4\x65\x92\x73\x42\x26\x85\xcd\xde\x9b\x88\x7c\x42\x06\xc4\x15\xea\x56\x24\x9b\x4b\xa9\x2c\x4f\xd0\x15\xfb\xc2\x3d\xe4\xf1\xf4\x02\xf9\x90\xff\x03\xf3\x6c\x0a\x1d\xde\x79\x5e\x56\xe8\x00\x04\x7b\x7b\xac\x48\x2e\xb3\xc6\xff\x6d\x76\xae\x60\xb4\x16\x64\x2e\xef\x88\x8e\x8f\xdb\x31\x57\x63\x65\xc2\xd6\xb3\x59\x25\xc4\xb7\x1f\x28\xf5\xce\x2d\x5b\x7e\xec\xcf\xfe\x1b\x7e\xd1\x46\xd2\xec\xd1\x18\xbf\x09\x9d\x1c\xca\x2f\xe9\x6f\x3e\x36\x69\x1d\x8d\x03\x32\x30\xf8\x01\xd4\xb2\xd6\x95\x6c\x85\xcb\x4b\xb8\x07\x04\xbc\x72\x0c\xc7\xdc\xde\x71\x45\xd4\x5c\x36\x05\x30\xfe\x1b\xf9\x90\x09\x21\x7f\x9b\x33\x61\x49\x81\x45\xc2\x69\xce\x44\xf7\x21\xec\x75\x44\x6c\x70\x88\x6a\x91\x88\x47\x87\xa9\xde\xda\x0e\x65\x76\xb9\xce\x9a\x05\xf8\x63\x44\x6e\x58\x46\xcd\xaa\x57\x71\xb0\x44\x84\x99\x1a\xc0\x81\x49\x46\x4b\x9e\x8f\x1d\x7a\xdf\x7b\x98\xd9\xa6\xf3\x7a\x02\xb8\x5d\x63\x0d\xf6\x00\xb7\x91\x0c\x64\x37\xa9\x4e\xd9\x14\x9a\x57\x05\x26\x8a\x83\x38\xd4\x44\x4b\x59\x87\xff\xb4\x91\xac\x30\xe6\xd5\x87\xcb\xef\xce\x3e\x5e\x90\xaf\x2e\xfe\x1d\x1f\x8f\x42\x4f\x14\xea\xb8\x4c\x4b\xc6\x93\xc6\xbc\x65\xcb\x2d\xf6\xa6\x65\x5f\x71\x9d\x00\xed\xe7\x17\x1f\x3e\x5e\xbe\xbd\x3c\x37\x33\xc5\xc7\xa3\x55\x87\x19\x64\x4f\x93\x86\x5b\xc7\x53\x3e\xee\xd2\xb1\xb7\x70\xf7\x30\x87\xd1\x12\x13\x70\x95\x2c\xe7\x86\x34\xa5\x30\xa1\xa6\x7d\xab\xba\x7a\x97\x16\xd0\x09\x24\xb4\x07\x14\x72\x05\xc5\xe0\x56\xb9\x4f\xe4\xe8\x1c\x7c\xa4\xe1\x0f\xe0\x41\x1d\x1e\xa0\xda\xf0\xdb\x35\x67\x0b\x54\x31\x78\x1c\xb2\x49\xe9\x83\x5b\xe2\x59\xd7\x54\x1f\x9f\x7f\x58\xc3\x67\x89\x1a\x98\xae\x40\xb7\x91\xc9\xee\x70\x5f\x69\xab\xf4\xc9\x03\x8a\xe5\x2a\xc6\x5d\xc3\x9e\x77\x54\x39\x59\xc6\xea\x3e\x00\x50\xe3\x47\xdb\x0a\xc3\x59\x7a\x73\x78\xa4\x06\x27\x3b\x90\xdf\x81\xfc\x3e\xd0\x2c\x37\x7b\x28\xe0\x34\x68\x1e\xdc\xbc\xe5\xd4\x0c\x0d\x91\xaf\x1d\xed\x9b\xd3\xeb\xfa\x02\x1c\x50\x69\x34\x69\x0c\xcc\x6b\xe5\xd3\x9f\x30\x72\xf4\xe1\xfa\xec\xb7\x2f\xff\xf0\xc5\xd1\x08\xfe\xf9\xbb\x97\xff\xfa\x7b\xf3\xcf\x8b\xf3\x37\xd7\x67\x57\x5f\xfc\x4b\xf0\xc7\x6f\xff\xf8\xbb\xa3\xb4\x10\x4d\xfb\xe1\xbf\x7c\xf1\xca\xa6\x5e\x39\xba\x78\xf3\xc5\xbf\xfc\xcb\xab\x7f\xdd\x22\xcd\x62\xe2\xd1\x95\xf4\xd3\xc5\xa7\x8a\x63\x99\x90\x6b\x66\x84\xd4\x83\xc5\x35\x6f\x1a\xdb\x69\xab\x4a\xfa\x89\x97\x4d\xe9\x0b\x9b\xa2\x03\x94\xd6\x56\xed\x9b\x7a\x29\x82\xfb\x97\x08\x08\x5e\x89\x29\x2b\x34\x8f\x72\x9b\xa3\x90\x2c\x58\x7d\x43\x35\x14\x5e\xb3\x84\x60\xa3\xe2\x55\xa5\x88\xcd\xa6\xb5\x56\x09\xaf\x3b\x68\xd3\x93\x27\xce\xfe\x72\x4a\x24\x6e\xdb\x08\x6a\xdf\x8c\x69\xc5\x6d\x05\x47\xb8\x29\x8a\x69\x6b\xe4\xf8\xe3\xef\x7f\xf7\xf2\xe5\xc9\x17\xbf\x23\x73\xd9\xd4\xea\x74\xb2\xf2\x7a\xd2\xa8\x56\x33\x07\x24\xdc\x5e\x21\x35\x97\xb5\x76\x75\x91\x7f\xfb\xfb\x97\x2f\xc9\xc9\x2b\x18\xea\xd4\x6a\x37\xdd\x81\x43\x98\x07\xbd\x49\xe4\x53\xf0\x44\xb8\x22\x7f\xf8\xe3\xef\xbf\xf8\x9d\xe9\xfd\x5f\x5f\x91\x9c\x2e\x93\xd9\xac\x8f\xf7\xe9\x29\x2c\x60\x1a\x1e\x8f\x01\x72\x06\x1e\x60\x45\x9f\x65\xe3\x4e\xd2\x88\x84\x07\xf1\x5f\xdb\x4d\xfa\x35\xee\xd2\xbb\x0d\xd7\x03\x03\x6b\x84\x5c\xdf\xcf\xa4\x21\x95\xbd\x6c\x9d\x33\x40\x1d\x95\xd2\x35\xe5\x18\x76\xcf\x04\x14\x42\x01\x9d\x6d\x17\x1a\xd2\x84\x87\x1f\x3a\xe1\x2e\x3f\x74\x15\xb8\x82\x61\x39\x51\xb3\x99\x6b\xc9\x99\xc1\xad\x3f\xaa\xb2\xf1\xca\x96\x62\xa9\x36\xd8\x1c\x07\xd2\xe9\xa8\x34\xdd\x4c\xbf\x9d\x03\xdb\x0e\x92\xa4\x58\x2c\x75\xac\x3c\xf6\xc8\xc9\xf9\xf5\x87\x36\x55\x88\xad\xcc\xea\x98\x56\x9f\xf9\x64\xaf\x04\x06\x6b\xb4\x6c\x65\xa5\xc6\x4f\xef\x09\x6e\xb1\x3f\xfe\x8c\xe3\x5a\x3e\x9b\x0c\x21\xd7\x78\x14\x43\x7a\x90\x27\x4f\x0f\x82\x27\x31\xe4\x06\x69\x17\x37\xe4\x06\x81\x36\xe4\x06\x09\xdb\x90\x1b\xa4\x33\xee\x90\x1b\x64\x88\x3d\x19\x62\x4f\x9e\x3e\xf6\x64\xc8\x0d\x32\xe4\x06\xd9\xdc\x86\xdc\x20\xfd\x6d\xc8\x0d\xf2\xbf\x2d\x37\x08\x82\xd8\xa6\x0c\x21\x56\x22\x6d\xd3\x83\x7c\x76\xd9\x41\x94\x39\xe4\x8c\x9d\x65\x99\x6c\x84\xfe\x28\x6f\x59\x74\x74\xfb\x8a\x0e\x65\xad\x1f\x73\x29\xef\xd3\xa9\xac\xbf\x7c\x30\x05\xcb\x33\xac\x5e\x46\x9b\x9c\x33\x91\x16\xcf\xf2\x18\xd4\xeb\xc6\x73\xf4\xdc\xf0\x31\x22\x67\x79\xfb\x83\xc5\xcb\xda\x1c\xcd\x84\x9c\x91\x9a\x65\xbc\xe2\xb6\x44\x00\xc5\xe7\x69\xf6\x17\x73\x2f\x6c\x21\xe8\xa5\xb9\x2d\xac\x98\x7a\xf4\xe8\x0b\x44\xd7\x81\xfe\xc1\x52\xea\x95\x29\xa5\x89\xb1\x66\x9a\xc8\x07\x02\xd7\x77\xc7\x15\x73\xb6\x5f\x6b\x32\x08\x56\xf9\x31\x1c\x2d\x0c\x37\x4b\x1d\x36\x58\x8e\xdd\xc7\xad\x94\xd9\x5b\xe1\x4a\xf6\x54\x06\xb6\xb5\x81\x5b\x66\x11\x4c\x53\x58\x5b\xc5\x57\x92\x5c\xd0\x82\xe7\x86\xfa\xba\x04\x18\x88\x12\xd2\xc0\x18\xf1\x87\x87\x52\xd5\x9e\x26\x06\xb7\xd0\x6c\xce\x54\x30\x33\x94\x78\x6e\xad\x95\x2d\x31\x60\xc3\xb4\xaa\x68\x66\x5c\xa0\x80\x04\xfd\x3b\x7e\xa3\x0d\xb9\xb0\x0b\x59\x9d\xdc\xc7\x60\x60\xf3\x79\x9a\x09\x05\x18\xcc\x8d\x11\x1e\xb8\x5a\x3e\x0d\xff\x50\x44\x16\xb9\x33\x49\xfc\xf1\xa5\x91\xa9\x33\xbc\xba\x89\x8a\x5e\x85\xd1\x22\x5a\x92\xc2\x70\xfb\x86\xcc\xdd\x3f\x90\xb7\x7d\xbc\x09\xae\x0e\xda\x7c\x92\xfd\x18\x7c\x9e\x09\x4d\x0a\x46\x95\x26\xaf\x5e\x92\x92\x8b\x46\x6f\x93\x1b\xff\x51\xa6\x95\xdf\xff\x2e\xfa\xbb\x47\xe5\xd4\x4f\xbc\x6d\xa1\x34\x06\xff\xf6\x22\x99\xd5\x1b\x97\x00\x7c\x95\xe4\x42\xaf\x0a\x68\x81\xc3\x53\x3a\x36\x05\xcd\xf4\xde\xb0\xd8\xd6\x62\xcc\x8f\x8d\xbc\x59\xf6\x05\x29\xa6\x6d\xb8\xed\xb2\x5b\xdf\xec\xff\xd9\x87\xb8\xbd\x12\x49\xd4\xdc\xb0\xe6\xa0\xc7\x50\x73\x5a\x33\x5b\x39\xf9\x58\x79\x7b\x62\xdf\x7e\xbd\x31\x43\x40\xd0\xd0\x6b\x3f\x02\x57\x24\xf7\x8f\xbd\x2a\x83\x8b\xb1\xae\x19\xf3\x93\x03\x29\x03\x74\xf4\xce\x0e\x19\x19\xd5\x1f\xcd\x38\xc5\xb2\x4b\x63\x52\xb3\x19\x57\xba\xee\x53\xe3\x8e\x63\x10\x6f\x3c\x17\x35\xab\x65\x13\x51\x1e\x20\xfd\xb2\x41\xc7\x4e\xa1\xe1\x0c\x4b\xb6\x12\x76\x8c\xcb\x9f\x45\x83\xf6\x74\xa0\xb7\xde\xaf\x12\x2e\x4b\xcd\x68\xfe\x8d\x28\x22\xb4\xd2\xe9\x4b\x77\x7d\xa3\xac\x0a\xd4\x0e\xac\xf3\x00\x82\x0e\x40\x5d\x19\x76\x10\x83\xe1\x3e\xb0\x1c\x39\x3a\xf3\xf9\x18\xd2\x5f\x04\xda\xdc\x18\x9c\x11\x52\x8e\x29\x2d\x54\x74\x45\xfb\x38\xa9\xc9\x01\xe8\x7e\xb6\x0c\xfb\xee\xa2\x0b\xeb\x25\x2d\xeb\xd6\x2b\xda\x6d\xdf\x07\xf7\x81\x65\x18\x62\xa4\xe8\x96\x39\xa6\x81\xdd\x87\x2a\xc0\x40\xaf\xcd\xb5\x47\xc3\xeb\x89\x1f\x2d\x0c\x95\x73\x8e\xad\xf6\x94\x32\x59\x96\x34\xaa\xe0\x0f\x5a\x02\x29\x04\x67\x2b\x1b\x35\x21\x74\x4d\x8b\x76\xd5\x41\xd2\x8a\x5d\x02\xb9\x66\x82\x8a\x08\xa3\x7e\xfa\x79\x61\xcf\x44\xde\x79\xa7\xec\x19\x5f\x30\xb1\x0a\xdd\x56\x08\xf9\x92\x66\xb7\x2c\x2a\x7e\xf3\x5b\xe5\xf6\x37\x5f\x0a\x6a\x63\xea\x0c\x3a\x5b\x70\x73\x0d\x58\xbe\x32\x82\x1a\xb5\xfe\x44\x50\x43\x19\x43\x16\x91\xd1\xdc\xe5\x56\x36\x8a\x45\x24\xef\x48\xdf\x48\xd3\xef\xe3\xb1\xa4\x42\xfb\x4f\xcd\x17\x19\x73\x9c\xb3\xe9\x79\x97\x3b\x80\xb3\x4b\xdc\x03\x07\x07\xc1\x7d\xb3\xbe\xe9\xd6\x85\x01\x13\x16\x14\x06\xe7\x2d\x5d\x62\xa6\x55\x28\xb2\x85\xff\x63\xb1\x59\xef\x6a\xea\x9b\x1e\x72\x9c\x76\x8c\xf5\x4d\xde\x45\x5b\x1f\x68\x2e\x15\xf9\x12\x22\x2f\xde\x30\x10\x67\xf6\xc7\xf0\x7c\xf8\xf2\x4d\x0f\xb3\x63\xe6\xf7\x9c\x18\x1d\x5e\xd2\x59\x1f\xeb\x3c\x26\xa5\x14\x5c\xcb\xfa\x61\x7c\x18\xcf\xe7\x4c\x55\x9c\xdb\x73\xfa\x0d\xc6\x9e\x9d\x34\xd1\x26\x56\xf0\x7e\xcf\x81\x99\x10\x0e\x7d\x29\x1b\x72\x47\xb1\x78\x24\xc0\x45\x0c\x6d\xff\xc8\xab\xd7\xe4\x42\xa8\xa6\x0e\x22\x6e\x57\x07\x33\x48\xd0\x1d\xab\x43\x85\x00\x6c\x58\x35\x12\x0a\xbc\x61\xd2\x87\x88\x11\x2f\x3e\xd1\xb2\x2a\x98\x7a\x4d\x8e\xd8\x27\xfd\xbb\xa3\x11\x39\xfa\x34\x55\xe6\x7f\x42\x4f\xd5\xd1\x84\x5c\x96\x55\xc1\x33\xae\x8b\x25\xe1\x62\xca\xea\xda\x6b\xf5\xf1\x83\x15\x27\xa7\x98\x31\x13\x75\xec\x4a\xcb\x9a\xce\xd8\x0b\x4b\x0b\x7e\x59\xdf\xf4\xd3\x98\x04\x8c\x07\x80\xba\x0f\x90\x81\x8e\xbd\x82\x07\xb0\x05\x3e\x8a\xad\x6d\xb6\x61\x9f\x98\x3d\xae\xc9\xed\x1f\x61\xa7\xec\x9e\xbc\xa8\x6f\xf2\x17\x1f\x2e\xce\xde\xbc\xbb\x98\x94\xf9\x2f\xe7\xf2\x6e\xac\xe5\xb8\x51\x6c\x1c\xe1\xea\x9c\xb0\x57\xb7\x6c\x09\x39\x89\xf6\xb0\x5b\xb6\xeb\x8e\xbc\xae\x25\x98\x0b\xe0\xb9\x61\x9e\x3e\x7c\xf9\xe6\x5b\x15\xa7\x1f\x0c\x04\x8b\x17\x4c\x67\x2f\x32\x56\xcd\x5f\xd8\x31\x3e\xcf\xbd\x0f\x0c\x3c\x6b\x2b\xea\xf9\xd4\x61\xd9\x7d\x9c\x9b\xeb\x1b\xa9\x7f\x26\x8b\x02\xfd\xe2\x0d\x4e\x3c\x67\xd5\xdc\xbf\xf0\xec\x76\x3d\xce\x11\x2d\xda\xfd\xec\x30\x3a\x1c\x02\x39\xa7\x64\x84\xc1\x2e\xfd\x28\x4d\xbf\x5d\x7c\x05\x4f\x62\xd1\x55\x70\xe5\xea\x9b\x6d\x09\xc1\xf3\xb9\x64\xfd\x64\xe6\xc9\xb4\x0b\x1f\xdc\x8f\x8a\x69\xa0\xf7\x5c\x10\xcc\x51\xff\xce\x70\x1a\xfb\x52\x23\x1c\xf8\xc0\xe2\xf4\x15\xe8\x7a\x1e\x95\xe3\x34\xfd\x14\x7c\xe7\xc0\x55\x07\xbe\x18\xb4\xd1\x73\x26\xb4\x0b\x4f\xb4\xfe\xef\x21\x8d\x22\x97\x53\x94\x68\xf3\x28\x03\xb7\x5c\xb0\xba\xe6\x39\x53\x24\x81\x48\x85\xda\x33\x5e\x3c\xbb\x03\x8c\xb4\x38\xa7\x19\x83\xe3\xbd\x6f\xb6\x33\x1d\x3c\xc6\xe3\xe6\xd0\xbe\x36\x07\xf6\xb2\x79\x9c\x7f\xcd\xd3\x7a\xd6\x24\xdb\x89\x53\xbc\x69\x1e\xe3\x61\xb2\x57\x95\x53\x87\x98\xc3\x93\x2d\x88\x39\xcd\x4b\x1e\x15\xb2\xfc\xac\xc9\x39\xac\xe2\x81\xd7\x55\x46\x0b\x76\xf9\xcd\x2e\x55\x46\xb6\xcb\xae\xda\xe8\xda\x3e\xac\x58\xed\x72\x35\x38\x8d\xa0\xd6\x34\x9b\x5b\xd5\x8e\xb3\x15\x48\x01\xa1\x64\x08\x5b\x44\xc8\xbc\xdf\xb8\x1b\xea\x8d\xdc\x68\x0f\xeb\x8e\xdc\x44\x9f\x93\xfe\x68\x46\x35\xbb\xeb\xe5\xcf\xc7\x2d\x89\xee\x7f\x13\x94\x22\x9f\xb9\xa6\x29\x45\x9b\xe4\x5d\xfb\xd7\x7a\xd9\xa5\xfe\x68\x72\x8f\xe6\x28\x0d\xc9\xc0\xb7\x3b\xd3\xfd\x62\xf3\x77\xff\xd3\xb4\x8f\x48\x58\x68\x4b\x3c\x4f\xfb\x95\x3b\x2b\xd8\x44\x1b\xd7\xe9\x58\x08\x77\x01\xcf\xae\x2e\xc9\x5f\xf1\xf5\x9d\xae\xb2\xaa\xa5\x46\x81\xfb\x8d\x2c\x29\x8f\xf0\x4b\xec\xac\x60\xf5\x73\xb7\x94\x90\xd7\x75\x4b\xb8\xf2\xef\x12\xfb\xb2\xcb\xe6\x80\x35\xe2\x9b\x9a\xe5\xc4\x2a\xeb\x76\xba\xc6\x83\xc8\x59\x6b\xf2\x10\x39\x31\xbf\xbd\x80\x3c\xa9\xa7\x93\x56\xe6\x5a\x11\xc8\x62\x34\x03\x3b\x11\xd9\x9e\xa1\x50\x14\xd8\x77\x5c\x24\x66\x2b\x08\x39\xb0\x01\xb6\xc3\x7b\x17\x46\xf5\x2f\x14\x07\x37\x9d\xc0\x31\xd6\xe6\xb9\xe4\xaa\x0d\xb6\x44\xd9\x6a\x44\xbe\x96\x33\x2e\x1c\xf2\x92\xd6\xf1\x6c\x4a\x63\x04\xa2\x41\x4e\x19\xe4\x94\xd5\x36\xc8\x29\x1b\x9b\x52\xc5\x85\xa0\x37\x45\x8c\x4f\x78\xd7\xe9\xdd\x7f\x48\xde\x16\x74\x46\x18\xfc\xf1\x22\xe7\xca\xfc\x9f\x5c\x5f\x7f\x0d\x5e\x16\x8d\x70\xca\x14\x80\x00\x4b\x2b\x7d\x49\x0b\xc4\xc9\xbb\x45\x92\x48\xaa\xde\x45\x05\x7b\x6e\x81\x26\xdb\xee\x7d\xbe\x6b\xd5\x09\x8c\xb0\x6f\x00\xb6\xa4\x3e\xec\x1b\x3d\xaf\x6f\x98\xb9\xa5\xd9\xed\x55\xe0\x14\x21\x6b\xf3\x4c\x04\x8f\x12\x99\xac\xe4\xaf\xb7\x63\xb7\x56\x86\x89\x3b\x86\xab\x74\xa5\x76\xf0\xa5\xe3\x5b\x1c\xd1\xb9\xb6\x5b\x0b\xbf\x51\xa5\x64\xc6\x5b\xa7\x1e\x9b\x2d\xcd\x31\x33\x39\x30\x33\x3b\xdd\x0c\xe4\x9f\x53\x97\x83\x0c\xfa\x06\x0e\xcc\x01\x8a\x7d\x83\xaa\x90\xe3\xe2\xc2\xad\x7a\xa7\x4b\x40\x70\x8c\xcb\x81\x92\x7e\x39\xda\xde\x57\xd7\xeb\x2f\xc2\xaa\xbb\x88\xcb\xaa\x60\x4f\x38\x42\x9a\xb3\x6b\x9e\x53\x54\x63\xac\x41\x01\x57\xfe\xd2\x41\x9d\x81\x9d\xed\x5f\x4c\x9a\x95\x44\x55\x02\xf2\x55\x5d\xbf\x39\x7c\x66\x5d\x4c\x00\x6b\x54\xb2\x6a\x0a\xf4\x7a\xf7\x8b\xeb\x5b\xd5\x23\xad\xf1\x38\x8b\xdd\x68\x07\xe2\x39\xac\x20\x12\x7b\x1f\xe0\x19\x06\x7a\xa7\xc7\xe3\x3b\x88\xc5\xc4\x7f\x37\x4b\xd7\x5d\x92\xcc\x7e\xc8\x70\xfc\x5d\x85\xdf\xc7\x68\x37\x3a\x01\xfa\x1d\xa9\xeb\xe5\xef\x7f\xf7\xbb\x28\x82\xc6\x6b\x96\x69\x09\x2e\x9b\x36\x81\x87\xf7\x18\xa0\x35\x03\xe9\x00\x63\xe5\x9d\x7e\x03\xdd\x06\x75\xa4\x55\xe5\x10\x91\xf9\x7b\x8e\xc4\x4f\x8b\xe9\x48\x89\xb4\x8f\x34\x87\x6f\xe1\x2d\x03\x19\x93\x2e\x0f\x96\x31\xe9\x40\x79\x92\x0e\x93\x1d\xe9\x10\x39\x91\x0e\x92\x09\xe9\x70\xf9\x8f\xf6\x9c\xf5\x68\x2f\x2e\x26\xfb\xcc\x6b\x94\x18\x24\x9c\x16\x20\x1c\x9f\xb9\x28\x3a\x8c\x38\x35\x84\x38\x21\x37\xd1\x6e\x33\x12\x25\x4b\xf4\x29\xd9\x87\xb6\x0d\x8f\x3b\x5c\xa6\xa1\x27\xcc\x2f\xf4\xd4\x59\x85\xf6\x9c\x4b\xe8\x70\x19\x84\x0e\x92\x37\x68\x9b\x38\xd4\xf4\x1c\x41\x29\xf1\xa7\xdb\x5e\xae\xbd\x67\x01\xda\x49\xee\x9f\x1d\x67\xfc\xd9\x5d\x9e\x9f\xc3\x39\x52\xc6\x67\x3f\x79\x74\xce\x13\x95\x9c\xf4\x24\xdd\xde\xb3\x2f\x65\x4d\xdb\xfb\x46\xe5\x94\x4b\x0c\xeb\x12\xbb\x1f\xa3\xab\x9c\xaa\x28\x96\x89\x6d\xb6\xf6\x2d\xdc\xb1\x1e\x82\x24\x68\x70\xb0\x77\xd9\xc3\x5c\x24\x2a\x71\xb0\xd3\x6f\xae\x57\x3c\x42\xfc\xe3\x7d\x3a\x82\xf8\x41\x7a\x5c\x41\xdc\xc2\x0f\xe0\x0c\x32\x78\x5b\xec\xce\xdb\x62\xf7\x71\x3a\xcf\xcd\x40\x9f\x0f\x06\xfa\x64\x03\xbd\xea\x54\x91\x77\x0a\x63\x40\xc9\xc0\xd4\xca\x9b\xb0\xe2\x52\x8b\x23\xce\xae\x2e\x23\xc6\x69\xab\xc2\xa8\xc9\x26\x6e\xd7\x99\xee\x2c\x17\xed\x33\x9f\x6b\xcd\xca\xaa\x17\x8d\x90\xc1\x3e\x3f\xd8\xe7\x37\xb4\xc1\x3e\xbf\xb1\x1d\xda\x5e\x37\x6f\x4a\x2a\xa0\x62\x2a\x98\xf1\x3b\x0e\x63\x2b\x0c\xcd\x84\x58\x4c\x1a\x79\x2d\x31\x13\x03\xe4\xc6\x68\x04\xff\xb1\x61\xad\x3e\xcb\x33\x96\x7b\xb2\x75\x42\xdf\xfb\xdd\x40\xe4\x8b\x57\x30\x73\x26\xd7\xa2\x88\xed\x9a\xfd\x66\x3a\x14\x1b\xbb\x89\x30\x4c\x47\x45\x0b\xd5\x52\x6c\x59\x9c\x0e\x93\xde\xd1\x3f\x58\xf4\x03\x38\x21\x56\xcb\x1d\x72\xa6\x06\x10\xcc\x7a\x6c\x1a\xae\x1b\x46\x4a\x5e\xd7\xb2\xb6\x76\xd7\x70\x49\xe8\x40\xc8\x67\x73\xcd\x6a\x94\xfc\xeb\xe8\xfa\x58\xd7\x4c\x5b\xa8\x02\xa8\xd4\x12\x2a\xfa\x09\xfb\x6f\x17\x4e\x03\xcb\x75\x74\xe8\x86\xcd\xe9\x82\xcb\x26\x2a\x80\xf4\x1a\x29\xe5\x91\xfd\x18\xf8\xa7\xa5\x6c\xbc\x85\x09\xcb\x9e\xf9\x3d\x54\xeb\xe7\x15\x31\xc8\xfb\xf6\x73\x50\xd0\xe4\xd2\xa9\xcf\xc7\xec\x13\x57\x7a\x7d\xc7\xdc\x51\x59\x1b\xe3\xce\xae\xc1\x42\x55\x06\x8b\x7f\x17\x91\xfe\x21\x0d\xf8\x3b\x1d\x77\x05\x9f\xc5\x35\xfc\xd4\x27\xf6\xd8\x8c\x70\x98\xc0\x85\x94\x34\x9b\x73\x91\x94\x3c\xe1\xbb\xce\x14\x3a\xf2\xcf\x84\x9c\x15\x45\xeb\x3b\xa8\xbc\x4b\xab\x93\x87\xba\xd3\xd7\xfd\x25\x82\x0d\x7c\xd4\x2c\x07\x1b\x65\x5b\x91\x30\x53\x7c\x62\xbb\x9a\x2c\xca\x3b\x5a\xb3\x49\x26\x4b\x72\x7e\x7d\x49\xf2\x9a\xf7\xe6\x3c\xdc\x83\x7f\x3d\x6e\x7a\x6f\xcd\xbe\xe7\x25\xa3\x0d\xf2\x59\xdb\x52\xdc\x91\x9c\xa3\x54\xc1\xb3\xe5\xe5\x9b\x6d\xdd\xac\xf0\x6b\xc7\x00\x28\xef\x62\x65\x9e\x93\x2f\xa9\x62\x39\x79\x47\x05\x9d\xa1\xfa\xf0\xe4\xfa\xea\xcb\x77\xa7\x06\x80\x40\xdd\x79\xf9\x66\xa3\x1f\xd6\x75\xd8\xf9\xfb\x5d\xe6\x7f\x59\x5b\xf8\x16\xbc\xd1\xda\xf7\x5b\x2e\x7e\xa7\x89\x6d\x88\x67\x27\xe2\x0a\x90\x6e\x48\xd5\x73\xb5\x9a\x19\x11\x9d\xa4\x5c\x4a\x56\xb5\x8a\x9a\x17\x65\x7e\xfb\xb8\xe9\x73\x23\x4d\x14\xc5\x55\x41\xc5\x59\x55\xd5\x72\xb1\x59\xeb\x1a\x83\x1c\xdc\xf7\x6e\x01\xe8\x60\xee\x1e\x56\x78\x22\xe0\x53\x29\x50\x88\xc1\x61\x37\xef\xff\xa5\xf6\x8a\x59\x29\x80\x05\x3b\x3a\x6b\xb4\x2c\xa9\xe6\xd9\x11\x91\x35\x39\x7a\x47\x45\x43\x8b\x8d\xb1\x29\x0f\xae\xf8\x3e\x01\xf3\xc1\x8f\xd0\x11\x6d\xcb\xcf\x1e\x64\x60\x1f\xfe\x5e\xd3\xda\xa0\xba\xf3\xeb\xef\x92\xbe\x55\x9a\xea\x66\x8d\x32\x3c\x40\xad\xee\xa7\x4f\x63\x52\x50\xa5\xbf\xad\x72\x83\x1f\x56\x7e\x7d\x88\x08\x65\x54\xd3\x42\xce\xfe\x8d\xd1\x62\xf3\x65\x88\x01\xa9\xf3\xb0\x93\xb6\x4a\x37\x20\xa8\xe6\xc6\x7f\x7f\xac\x88\x11\x25\x0d\x94\x70\xad\x48\xcd\x0a\xb6\xa0\x42\xbb\xcf\xaf\xe1\x14\xd4\xb1\xdd\x96\x7b\x01\x8e\xb7\x36\xd6\x9c\x69\x56\x97\x5c\x74\xc7\xb9\x86\xef\xcf\xa5\xc0\x2a\xc8\x0a\xad\x48\xf8\x45\x77\xac\xfb\xa1\xf2\x3e\xd7\x83\x07\x9c\x0d\x3a\x3b\x15\xce\xa7\xbb\x3d\xf8\xda\x8d\x15\x5d\xe6\xf8\x10\x3c\x37\x3b\x73\x5b\xdb\x3d\x72\x2b\x8c\x44\x01\x19\xce\x37\xef\x4d\x2f\x9b\xd3\xc7\xde\x8c\x1d\x38\xe0\x14\xee\x8f\x0a\x1c\xdb\x79\xdf\xe7\x94\xf0\x10\x34\x62\xeb\x67\x8c\x56\xa7\x72\x3f\xa6\xee\x6c\xfc\xf9\xca\x67\x98\x58\xc5\xfb\x36\xa1\x97\x47\xe7\xa5\xfb\x29\x4b\x14\xdf\x18\xc7\xe2\xd1\x8a\x7f\xc7\x6a\x65\xa6\x18\x2f\x1d\x9c\x5d\x5d\x92\x05\x7e\x95\xa6\x0b\x8b\x24\x85\xa0\x23\xeb\xa7\x82\x69\x2c\xe7\xa5\x0d\x6c\xaa\xad\x04\x4b\x49\xc5\x19\xe6\x56\xa7\xc2\x6e\x26\xd0\x33\x46\x73\xfb\xd0\xd0\xcd\x9a\xd9\xdf\x46\xd6\xe3\x30\x8a\x41\x41\xbf\x5d\x67\x83\xa5\x98\xf2\x1b\xbc\x11\x5e\xfc\x55\x5a\x1d\xa0\x4d\x15\x68\xb0\x0a\x70\x17\x23\xa2\x9a\x6c\x4e\xa8\x11\x64\x94\xb9\x0e\x06\x5f\xb0\x49\x49\x05\x9f\x32\xa5\x27\xb6\x37\x56\xab\xef\xbf\xf8\x7b\x1f\xdb\xf1\x56\xd6\xc4\x46\x69\x8f\x5c\xe6\x6a\xbb\xc6\x16\xe6\xb8\xc2\x8d\xf0\x3d\xb7\x1a\x99\x4a\xe6\x76\xc1\x77\xb0\x14\x4d\x6f\x0d\x29\xc5\xa5\x34\x0c\xbc\x06\xfa\x78\x94\x23\xc3\xf6\x06\xd3\xfe\x6f\x43\x3b\xff\xe7\x88\x9c\xdc\x01\x13\x72\x64\xfe\x3c\xc2\xe9\xf8\x48\xb3\x50\xe1\xd4\x4e\x0b\x93\xa6\xd5\x7c\x36\x63\x75\xaf\x8d\xd5\x7c\xca\x16\x4c\xe8\x53\x9b\xb5\x5b\xc8\xa0\x2b\xe7\xe7\xd7\xea\x4f\x56\xa7\xf9\xfd\x17\x7f\x3f\x22\x27\xdd\x3d\xe9\x19\x92\x8b\x9c\x7d\x22\x5f\xa0\xb5\x14\x8a\x8b\xe7\xa7\x13\x54\xb8\xa8\xa5\xd0\xf4\x93\x19\x31\x9b\x4b\xc5\x04\x2a\xc0\xb4\x24\x73\xba\x60\x44\xc9\x92\x91\x3b\x56\x14\x63\x6b\x3f\x26\x77\x74\xd9\x9f\xac\xdc\x1d\x21\xa4\x40\x25\x15\xad\x75\x07\x8c\x77\x72\x09\x6f\xb9\xd8\x69\xa6\xc5\xaf\xb8\x58\x75\xe9\xec\x15\xf0\x36\x28\x85\x67\x5c\xbb\xac\x03\x36\xbe\x48\x2f\x5f\x98\xc3\xaa\xf9\x4d\xa3\x65\xad\x5e\xe4\x6c\xc1\x8a\x17\x8a\xcf\xc6\xb4\xce\xe6\x5c\xb3\x4c\x37\x35\x7b\xf1\xff\x31\x77\x3e\xbf\x6d\x83\x50\x1c\xbf\xef\xaf\x40\xea\xa1\x97\x78\xbd\x6f\xa7\x2d\xe9\xb6\x48\xd5\x36\xb5\xc9\xa4\x1d\xa9\xcd\x52\x54\xc7\x8e\xc0\x6e\x34\x4d\xfb\xdf\x27\x78\x60\x43\x62\x7e\x25\xae\xb3\x5b\x1b\xdb\xc9\xe3\x81\xe1\xfb\x3e\x3c\x00\xef\x68\x96\xd7\x95\x68\x18\x72\x4f\xde\x6d\x71\x25\x3c\xc1\x33\x51\x50\x3f\x25\x8e\xf4\x58\x78\xee\x21\xcd\x63\xa7\xcc\x35\x5c\x06\xa3\x27\x38\x28\x02\xc5\xa6\x7b\x09\x78\xe7\xc5\x5d\x25\x91\xdf\xcd\x18\x9e\x62\x04\xb4\x7f\xfa\xd8\x1c\xf4\xd7\x03\x74\x7c\xf9\xe1\x6f\x88\x3e\x09\xb2\x7d\x65\x17\x66\x8d\x12\x5b\x5c\xc0\x30\x82\xab\xe0\x3a\xf7\x57\x7e\x67\x45\x7d\xb4\x4c\x58\xf6\x3b\x93\x5f\x51\x97\x19\xae\x0a\xf1\x37\x6c\xbc\x91\xfb\x33\x52\x23\x2b\xa0\xa5\xa3\x76\x7e\xeb\xe5\xe2\xf2\xcd\xf3\xe6\xaa\xa5\x63\xf4\x74\xa7\xcc\x67\x29\x5d\x1e\x29\x96\x21\x24\x81\x0c\x5d\xd6\x12\x2d\x60\xec\x40\x84\x72\xfd\xad\xef\x55\xe6\x40\x77\xd0\x4d\x48\x3a\xfb\x67\xf3\x8d\x18\x21\xd2\xde\xbb\xfe\x09\x93\x85\xcb\xcc\x7f\xcc\x1b\x75\x94\x88\xde\xf9\xd5\x2a\x86\x0e\x4e\x9f\x70\xb5\xf1\x48\x9b\xa8\x8a\xd1\x79\x93\xc2\x90\x6c\xf0\x30\xf7\xbc\x0b\x3e\x83\x31\xb5\x11\xa7\xca\x50\xa5\xa4\xbc\x3b\x4e\x43\x84\xad\xbc\x41\xf8\x05\xd3\x52\xce\x13\xd6\x8f\x9c\xb0\x17\x05\xdb\xe1\xb0\x2b\x7c\x18\x63\xc3\x6b\xdb\x80\xe0\x9d\x28\xc2\xd5\x65\x38\xae\x15\x5f\x01\x64\xd4\x7b\x60\xbd\xd3\xea\x51\xe2\x5b\x40\x0b\xce\xcb\xce\x09\x8a\x70\x90\x27\xda\xdf\x17\x82\x59\xf3\x48\x70\xb3\xa2\x3e\x85\x72\xd4\xa4\xad\xe7\x34\x97\xeb\x1b\xf4\x9e\xa0\x4d\xdd\x08\xd9\xd9\xca\xb6\x0f\xf1\x01\xec\x25\xdf\x35\xb4\xd7\x6e\xd1\x7d\x29\x57\x0c\xcb\x1d\x26\xea\x2a\xb1\x98\xf6\x83\xc7\xe5\x54\xb1\x88\x6a\x49\x0d\xdc\x8d\x7e\xb1\x7a\x2b\xe1\x22\xd4\x1d\x4c\x55\xfa\x37\xc3\x18\xb5\xc8\x5b\xc2\xb9\x77\x8b\x63\x7b\x59\x09\xdc\x0d\xaf\xf2\xc1\x24\xff\x56\x5f\x83\xe5\xec\x22\xa8\x28\x48\x83\x69\xa9\x5f\x65\x70\x45\xe7\xa5\x50\xef\xea\x2d\x20\x23\x98\xfb\x04\x8d\x65\xf5\xbd\xbc\x19\x8c\xae\x2b\x92\xed\x6b\x56\xa0\x39\xde\x92\x72\x8e\x39\x51\xdf\x65\xee\x57\x03\x75\x74\xcd\x47\x35\x79\x18\x87\x3a\x4c\x06\xc8\xd7\x4f\x28\xc8\xff\xfa\x80\x16\x0c\x9c\x69\x2a\xbd\x62\x2d\x99\xa1\x4f\x62\xf4\x9a\xa1\x75\xf5\x5c\xd5\xfb\xf3\x6c\x6d\xbc\x93\x75\x96\xa5\x66\x86\xa4\xde\xee\xdc\x02\x7b\x9d\xb9\x27\x5a\xa4\x3a\x7c\x07\x7d\xb6\x07\x9b\xee\x56\x6d\x91\xf8\xf3\x08\x35\x8a\xd0\x9a\xd5\x1b\x46\x38\x07\x8a\x93\x8c\xef\x8d\x09\x8b\xcf\xa4\x52\xf3\xc3\x41\xf3\x96\x43\x4f\x69\x4b\xf5\xb8\xb6\xe9\xaf\xa8\xfa\x56\x3f\xb6\x2b\x07\xa5\x86\x7f\x65\x84\x61\xa8\x03\x32\xba\x2c\x1c\x86\x8b\xc6\xa8\x67\xdc\x0b\xa2\xc4\x47\xc6\x75\xe9\xe6\x0f\x3f\xdc\xce\x76\x8e\x7d\xa1\xf1\x29\x8c\x1f\xcf\x05\x8f\xc1\x77\x26\x08\x1b\x63\x95\xfe\x34\x80\xf1\x92\x68\xf1\xb2\x50\x71\x72\x9c\x38\x29\x48\x9c\x0e\x21\x9e\x08\x0f\x83\x2f\x92\x0f\x18\xc6\xbe\x43\x69\x90\xf0\xe2\x78\x30\xe8\x13\x1f\x12\x8c\xf5\x49\x1a\x06\x9c\x1a\x00\x46\xb9\xc0\x0b\xfd\x52\xfc\x90\x08\xfa\x26\x46\x7c\x41\x5f\x44\x62\xbd\x58\x8f\xbc\x1e\xca\xfb\x6f\x21\x5e\xd0\xc5\x1e\x70\x17\xeb\xd6\x24\x58\x37\x31\xa6\x0b\x94\x3f\x0d\xcd\x29\x8d\x49\x8a\x18\x89\xbe\x34\x6e\x36\x45\xba\x12\x88\x32\x01\x4e\xdd\xa1\x13\xee\x4c\x29\x79\xaa\x52\x17\xe2\xf9\xd4\xfc\x0f\x65\x72\xbc\x1a\x56\x12\x9e\x14\x5d\x4c\x19\x2a\x02\x42\x8b\xdb\xef\xf7\xb7\xf3\x0f\xab\xdb\xc5\xa1\x0a\x4f\x97\xcb\x7e\x50\x94\x19\x72\xd9\x71\x83\x18\xac\x1c\x97\x44\xdb\x72\x5c\x6a\x5b\x3a\xf4\xd4\xf9\xe2\xfd\x2c\xcd\x70\xd6\xe0\x1a\xee\x27\x46\xea\x28\x64\xdb\x82\xac\x55\xa1\x2a\x9f\xea\xb2\xe0\x7a\x7d\xc3\x72\xd1\x6d\x44\x40\xab\xbc\x6c\x0b\x21\xb9\xd6\xeb\xe5\x82\xbf\x45\xe8\x23\xc9\x71\xcb\x85\x74\x73\x87\xeb\x75\x75\xdd\xa0\x6f\x5f\xef\x7e\xca\xa5\x5d\xf2\xc9\x59\xb7\x5d\xaa\x3c\x7b\x8f\x62\x38\x3e\x50\x16\x54\x7e\x2b\xc8\x3a\x69\x51\x8e\x77\xa2\x07\x76\x23\x7f\x0a\xbb\xd7\xe0\xaa\x40\x4f\xa4\xdc\x89\xd1\xe1\x99\xa0\xfe\x9c\x32\xf1\x83\xf2\x2a\xac\xdf\x50\x79\xec\x1b\xd2\xc0\xa6\x04\xbe\x54\x75\x6f\x05\x04\x08\xfb\x19\x6c\xdd\xc2\x05\x8a\xbe\xec\x31\x57\x84\x72\xd0\xda\x40\x53\x09\xf3\x38\x37\xd2\x72\xc0\x2c\x18\x59\xe4\x7f\x47\x36\x0b\x63\x7b\x6e\x05\xc9\x61\xb4\x89\xa6\xe7\xee\x4c\xc0\xe1\x13\xa2\x8f\xd8\x15\x39\x74\xb2\xf5\xc3\xdd\x5a\x20\xc3\xe4\x38\x5b\x38\x61\x2f\xa4\x78\x27\xe7\x73\xf4\x47\x90\x6d\x6b\x7f\xd6\x3e\x6a\x31\x63\xf4\x3a\x8a\xc0\xa1\x3f\x7f\xdf\xfc\x0b\x00\x00\xff\xff\x4a\x92\x72\xa4\x49\xa6\x03\x00") func operatorsCoreosCom_subscriptionsYamlBytes() ([]byte, error) { return bindataRead( diff --git a/vendor/github.com/operator-framework/api/pkg/manifests/bundleloader.go b/vendor/github.com/operator-framework/api/pkg/manifests/bundleloader.go index 6ed1e4ddf6..f557c4f354 100644 --- a/vendor/github.com/operator-framework/api/pkg/manifests/bundleloader.go +++ b/vendor/github.com/operator-framework/api/pkg/manifests/bundleloader.go @@ -2,7 +2,6 @@ package manifests import ( "fmt" - "io/ioutil" "os" "path/filepath" "strings" @@ -189,7 +188,7 @@ func (b *bundleLoader) LoadBundleWalkFunc(path string, f os.FileInfo, err error) // loadBundle takes the directory that a CSV is in and assumes the rest of the objects in that directory // are part of the bundle. func loadBundle(csvName string, dir string) (*Bundle, error) { - files, err := ioutil.ReadDir(dir) + files, err := os.ReadDir(dir) if err != nil { return nil, err } diff --git a/vendor/github.com/operator-framework/api/pkg/validation/internal/community.go b/vendor/github.com/operator-framework/api/pkg/validation/internal/community.go index debaae2bab..37473fd311 100644 --- a/vendor/github.com/operator-framework/api/pkg/validation/internal/community.go +++ b/vendor/github.com/operator-framework/api/pkg/validation/internal/community.go @@ -3,7 +3,6 @@ package internal import ( "encoding/json" "fmt" - "io/ioutil" "os" "strings" @@ -225,7 +224,7 @@ func validateImageFile(checks CommunityOperatorChecks, deprecatedAPImsg string) return checks } - b, err := ioutil.ReadFile(checks.indexImagePath) + b, err := os.ReadFile(checks.indexImagePath) if err != nil { checks.errs = append(checks.errs, fmt.Errorf("unable to read the index image in the path "+ "(%s). Error : %s", checks.indexImagePath, err)) diff --git a/vendor/github.com/operator-framework/api/pkg/validation/internal/operatorhub.go b/vendor/github.com/operator-framework/api/pkg/validation/internal/operatorhub.go index 2f5926cb95..fe0edee3ae 100644 --- a/vendor/github.com/operator-framework/api/pkg/validation/internal/operatorhub.go +++ b/vendor/github.com/operator-framework/api/pkg/validation/internal/operatorhub.go @@ -3,9 +3,9 @@ package internal import ( "encoding/json" "fmt" - "io/ioutil" "net/mail" "net/url" + "os" "path/filepath" "strings" @@ -313,7 +313,7 @@ func extractCategories(path string) (map[string]struct{}, error) { return nil, fmt.Errorf("finding category file: %w", err) } - data, err := ioutil.ReadFile(path) + data, err := os.ReadFile(path) if err != nil { return nil, fmt.Errorf("reading category file: %w", err) } diff --git a/vendor/github.com/operator-framework/operator-lifecycle-manager/cmd/catalog/main.go b/vendor/github.com/operator-framework/operator-lifecycle-manager/cmd/catalog/main.go index 4092bf8922..bef693e2b1 100644 --- a/vendor/github.com/operator-framework/operator-lifecycle-manager/cmd/catalog/main.go +++ b/vendor/github.com/operator-framework/operator-lifecycle-manager/cmd/catalog/main.go @@ -19,6 +19,7 @@ import ( "github.com/operator-framework/operator-lifecycle-manager/pkg/api/client" "github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/catalog" "github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/catalogtemplate" + "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/apiserver" "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorclient" "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorstatus" "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/server" @@ -63,10 +64,28 @@ func (o *options) run(ctx context.Context, logger *logrus.Logger) error { return fmt.Errorf("error configuring client: %s", err.Error()) } + configClient, err := configv1client.NewForConfig(config) + if err != nil { + return fmt.Errorf("error configuring client: %s", err.Error()) + } + opClient := operatorclient.NewClientFromConfig(o.kubeconfig, logger) + crClient, err := client.NewClient(o.kubeconfig) + if err != nil { + return fmt.Errorf("error configuring client: %s", err.Error()) + } + + // Setup APIServer TLS configuration for HTTPS servers + apiServerTLSQuerier, apiServerFactory, err := apiserver.SetupAPIServerTLSConfig(logger, config) + if err != nil { + return fmt.Errorf("error setting up APIServer TLS configuration: %w", err) + } + + // Setup metrics/health server with TLS configuration listenAndServe, err := server.GetListenAndServeFunc( server.WithLogger(logger), server.WithTLS(&o.tlsCertPath, &o.tlsKeyPath, &o.clientCAPath), server.WithKubeConfig(config), + server.WithAPIServerTLSQuerier(apiServerTLSQuerier), server.WithDebug(o.debug), ) if err != nil { @@ -79,16 +98,6 @@ func (o *options) run(ctx context.Context, logger *logrus.Logger) error { } }() - configClient, err := configv1client.NewForConfig(config) - if err != nil { - return fmt.Errorf("error configuring client: %s", err.Error()) - } - opClient := operatorclient.NewClientFromConfig(o.kubeconfig, logger) - crClient, err := client.NewClient(o.kubeconfig) - if err != nil { - return fmt.Errorf("error configuring client: %s", err.Error()) - } - workloadUserID := int64(-1) if o.setWorkloadUserID { workloadUserID = defaultWorkLoadUserID @@ -139,6 +148,11 @@ func (o *options) run(ctx context.Context, logger *logrus.Logger) error { opCatalogTemplate.Run(ctx) <-opCatalogTemplate.Ready() + // Start APIServer TLS informer factory if on OpenShift + if apiServerFactory != nil { + apiServerFactory.Start(ctx.Done()) + } + if o.writeStatusName != "" { operatorstatus.MonitorClusterStatus(o.writeStatusName, op.AtLevel(), op.Done(), opClient, configClient, crClient, logger) } diff --git a/vendor/github.com/operator-framework/operator-lifecycle-manager/cmd/olm/main.go b/vendor/github.com/operator-framework/operator-lifecycle-manager/cmd/olm/main.go index a5ea596910..763d71fefe 100644 --- a/vendor/github.com/operator-framework/operator-lifecycle-manager/cmd/olm/main.go +++ b/vendor/github.com/operator-framework/operator-lifecycle-manager/cmd/olm/main.go @@ -23,6 +23,7 @@ import ( "github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/olm" "github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/openshift" "github.com/operator-framework/operator-lifecycle-manager/pkg/feature" + "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/apiserver" "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorclient" "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorstatus" "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/queueinformer" @@ -129,22 +130,6 @@ func main() { } config := mgr.GetConfig() - listenAndServe, err := server.GetListenAndServeFunc( - server.WithLogger(logger), - server.WithTLS(tlsCertPath, tlsKeyPath, clientCAPath), - server.WithKubeConfig(config), - server.WithDebug(*debug), - ) - if err != nil { - logger.Fatalf("Error setting up health/metric/pprof service: %v", err) - } - - go func() { - if err := listenAndServe(); err != nil && err != http.ErrServerClosed { - logger.Error(err) - } - }() - // create a config that validates we're creating objects with labels validatingConfig := validatingroundtripper.Wrap(config, mgr.GetScheme()) @@ -169,6 +154,31 @@ func main() { logger.WithError(err).Fatal("error configuring metadata client") } + // Setup APIServer TLS configuration for HTTPS servers + apiServerTLSQuerier, apiServerFactory, err := apiserver.SetupAPIServerTLSConfig(logger, config) + if err != nil { + logger.WithError(err).Fatal("error setting up APIServer TLS configuration") + } + openshiftConfigAPIExists := apiServerFactory != nil + + // Setup metrics/health server with TLS configuration + listenAndServe, err := server.GetListenAndServeFunc( + server.WithLogger(logger), + server.WithTLS(tlsCertPath, tlsKeyPath, clientCAPath), + server.WithKubeConfig(config), + server.WithAPIServerTLSQuerier(apiServerTLSQuerier), + server.WithDebug(*debug), + ) + if err != nil { + logger.Fatalf("Error setting up health/metric/pprof service: %v", err) + } + + go func() { + if err := listenAndServe(); err != nil && err != http.ErrServerClosed { + logger.Error(err) + } + }() + // Create a new instance of the operator. op, err := olm.NewOperator( ctx, @@ -181,6 +191,7 @@ func main() { olm.WithRestConfig(validatingConfig), olm.WithConfigClient(versionedConfigClient), olm.WithProtectedCopiedCSVNamespaces(*protectedCopiedCSVNamespaces), + olm.WithOpenshiftConfigAPIExists(openshiftConfigAPIExists), ) if err != nil { logger.WithError(err).Fatal("error configuring operator") @@ -190,6 +201,11 @@ func main() { op.Run(ctx) <-op.Ready() + // Start APIServer TLS informer factory if on OpenShift + if apiServerFactory != nil { + apiServerFactory.Start(ctx.Done()) + } + // Emit CSV metric if err = op.EnsureCSVMetric(); err != nil { logger.WithError(err).Fatal("error emitting metrics for existing CSV") diff --git a/vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/olm/config.go b/vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/olm/config.go index fa472c7130..4a9c3ca870 100644 --- a/vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/olm/config.go +++ b/vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/olm/config.go @@ -37,6 +37,7 @@ type operatorConfig struct { apiLabeler labeler.Labeler restConfig *rest.Config configClient configv1client.Interface + openshiftConfigAPIExists bool } func (o *operatorConfig) OperatorClient() operatorclient.ClientInterface { @@ -202,3 +203,9 @@ func WithConfigClient(configClient configv1client.Interface) OperatorOption { config.configClient = configClient } } + +func WithOpenshiftConfigAPIExists(exists bool) OperatorOption { + return func(config *operatorConfig) { + config.openshiftConfigAPIExists = exists + } +} diff --git a/vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/olm/operator.go b/vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/olm/operator.go index cd9bb45e9c..5b54dbe246 100644 --- a/vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/olm/operator.go +++ b/vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/olm/operator.go @@ -57,7 +57,6 @@ import ( "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/event" index "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/index" "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/labeler" - "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/openshiftconfig" "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorclient" "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorlister" "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/ownerutil" @@ -853,18 +852,10 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat return nil, err } - // Check if OpenShift config API is available (used by proxy and apiserver controllers) - discovery := config.operatorClient.KubernetesInterface().Discovery() - openshiftConfigAPIExists, err := openshiftconfig.IsAPIAvailable(discovery) - if err != nil { - op.logger.Errorf("error happened while probing for OpenShift config API support - %v", err) - return nil, err - } - // setup proxy env var injection policies proxyQuerierInUse := proxy.NoopQuerier() - if openshiftConfigAPIExists { - op.logger.Info("OpenShift Proxy API available - setting up watch for Proxy type") + if config.openshiftConfigAPIExists { + op.logger.Info("OpenShift Proxy API available - setting up watch for Proxy type") proxyInformer, proxySyncer, proxyQuerier, err := proxy.NewSyncer(op.logger, config.configClient) if err != nil { diff --git a/vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/lib/apiserver/syncer.go b/vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/lib/apiserver/syncer.go index 4b3793cd62..0d9e68a5d1 100644 --- a/vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/lib/apiserver/syncer.go +++ b/vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/lib/apiserver/syncer.go @@ -11,7 +11,10 @@ import ( apiconfigv1 "github.com/openshift/api/config/v1" configv1client "github.com/openshift/client-go/config/clientset/versioned" configv1 "github.com/openshift/client-go/config/informers/externalversions/config/v1" + "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/openshiftconfig" "github.com/sirupsen/logrus" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" "k8s.io/client-go/tools/cache" ) @@ -58,6 +61,53 @@ func RegisterEventHandlers(informer configv1.APIServerInformer, syncer *Syncer) }) } +// SetupAPIServerTLSConfig sets up the APIServer TLS configuration for HTTPS servers. +// It checks if OpenShift config API is available and if so, creates the necessary +// syncer and informer infrastructure to watch for cluster-wide TLS configuration changes. +// +// Returns: +// - querier: A Querier that can be used to get TLS configuration (NoopQuerier if OpenShift API not available) +// - factory: A SharedInformerFactory that must be started after operators are ready (nil if OpenShift API not available) +// - error: Any error encountered during setup +func SetupAPIServerTLSConfig(logger *logrus.Logger, config *rest.Config) (Querier, interface{ Start(<-chan struct{}) }, error) { + // Create Kubernetes client for discovery + clientset, err := kubernetes.NewForConfig(config) + if err != nil { + return nil, nil, fmt.Errorf("error creating kubernetes client: %w", err) + } + + // Check if OpenShift config API is available + openshiftConfigAPIExists, err := openshiftconfig.IsAPIAvailable(clientset.Discovery()) + if err != nil { + return nil, nil, fmt.Errorf("error checking for OpenShift config API support: %w", err) + } + + if !openshiftConfigAPIExists { + return NoopQuerier(), nil, nil + } + + logger.Info("OpenShift APIServer API available - setting up watch for APIServer TLS configuration") + + // Create versioned config client + versionedConfigClient, err := configv1client.NewForConfig(config) + if err != nil { + return nil, nil, fmt.Errorf("error configuring openshift config client: %w", err) + } + + // Create syncer and informer + apiServerInformer, apiServerSyncer, apiServerQuerier, apiServerFactory, err := NewSyncer(logger, versionedConfigClient) + if err != nil { + return nil, nil, fmt.Errorf("error initializing APIServer TLS syncer: %w", err) + } + + logger.Info("APIServer TLS configuration will be applied to HTTPS servers") + + // Register event handlers for APIServer resource changes + RegisterEventHandlers(apiServerInformer, apiServerSyncer) + + return apiServerQuerier, apiServerFactory, nil +} + // Syncer deals with watching APIServer type(s) on the cluster and let the caller // query for cluster scoped APIServer TLS configuration. type Syncer struct { diff --git a/vendor/github.com/operator-framework/operator-registry/alpha/declcfg/declcfg.go b/vendor/github.com/operator-framework/operator-registry/alpha/declcfg/declcfg.go index 9e4f752ee0..bacf4e0aa6 100644 --- a/vendor/github.com/operator-framework/operator-registry/alpha/declcfg/declcfg.go +++ b/vendor/github.com/operator-framework/operator-registry/alpha/declcfg/declcfg.go @@ -6,6 +6,7 @@ import ( "errors" "fmt" + "github.com/blang/semver/v4" "golang.org/x/text/cases" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/sets" @@ -206,3 +207,71 @@ func (destination *DeclarativeConfig) Merge(src *DeclarativeConfig) { destination.Others = append(destination.Others, src.Others...) destination.Deprecations = append(destination.Deprecations, src.Deprecations...) } + +type CompositeVersion struct { + Version semver.Version + Release semver.Version +} + +func (cv *CompositeVersion) Compare(other *CompositeVersion) int { + if cv.Version.NE(other.Version) { + return cv.Version.Compare(other.Version) + } + hasrelease := len(cv.Release.Pre) > 0 + otherhasrelease := len(other.Release.Pre) > 0 + if hasrelease && !otherhasrelease { + return 1 + } + if !hasrelease && otherhasrelease { + return -1 + } + return cv.Release.Compare(other.Release) +} + +// order by version, then +// release, if present +func (b *Bundle) Compare(other *Bundle) int { + if b.Name == other.Name { + return 0 + } + acv, err := b.CompositeVersion() + if err != nil { + return 0 + } + otherCv, err := other.CompositeVersion() + if err != nil { + return 0 + } + return acv.Compare(otherCv) +} + +func (b *Bundle) CompositeVersion() (*CompositeVersion, error) { + props, err := property.Parse(b.Properties) + if err != nil { + return nil, fmt.Errorf("parse properties for bundle %q: %v", b.Name, err) + } + if len(props.Packages) != 1 { + return nil, fmt.Errorf("bundle %q must have exactly 1 \"olm.package\" property, found %v", b.Name, len(props.Packages)) + } + v, err := semver.Parse(props.Packages[0].Version) + if err != nil { + return nil, fmt.Errorf("bundle %q has invalid version %q: %v", b.Name, props.Packages[0].Version, err) + } + + var r semver.Version + if props.Packages[0].Release != "" { + r, err = semver.Parse(fmt.Sprintf("0.0.0-%s", props.Packages[0].Release)) + if err != nil { + return nil, fmt.Errorf("error parsing bundle %q release version %q: %v", b.Name, props.Packages[0].Release, err) + } + // only need to check for build metadata since we are using explicit zero major, minor, and patch versions above + if len(r.Build) != 0 { + return nil, fmt.Errorf("bundle %q release version %q cannot contain build metadata", b.Name, props.Packages[0].Release) + } + } + + return &CompositeVersion{ + Version: v, + Release: r, + }, nil +} diff --git a/vendor/github.com/operator-framework/operator-registry/alpha/declcfg/declcfg_to_model.go b/vendor/github.com/operator-framework/operator-registry/alpha/declcfg/declcfg_to_model.go index 342cab4036..62dfd13ca7 100644 --- a/vendor/github.com/operator-framework/operator-registry/alpha/declcfg/declcfg_to_model.go +++ b/vendor/github.com/operator-framework/operator-registry/alpha/declcfg/declcfg_to_model.go @@ -135,6 +135,19 @@ func ConvertToModel(cfg DeclarativeConfig) (model.Model, error) { return nil, fmt.Errorf("error parsing bundle %q version %q: %v", b.Name, rawVersion, err) } + // Parse release version from the package property. + var relver semver.Version + if props.Packages[0].Release != "" { + relver, err = semver.Parse(fmt.Sprintf("0.0.0-%s", props.Packages[0].Release)) + if err != nil { + return nil, fmt.Errorf("error parsing bundle %q release version %q: %v", b.Name, props.Packages[0].Release, err) + } + // only need to check for build metadata since we are using explicit zero major, minor, and patch versions above + if len(relver.Build) != 0 { + return nil, fmt.Errorf("bundle %q release version %q cannot contain build metadata", b.Name, props.Packages[0].Release) + } + } + channelDefinedEntries[b.Package] = channelDefinedEntries[b.Package].Delete(b.Name) found := false for _, mch := range mpkg.Channels { @@ -147,6 +160,7 @@ func ConvertToModel(cfg DeclarativeConfig) (model.Model, error) { mb.Objects = b.Objects mb.PropertiesP = props mb.Version = ver + mb.Release = relver } } if !found { diff --git a/vendor/github.com/operator-framework/operator-registry/alpha/model/error.go b/vendor/github.com/operator-framework/operator-registry/alpha/model/error.go index e99cb2ca8c..e175b3d408 100644 --- a/vendor/github.com/operator-framework/operator-registry/alpha/model/error.go +++ b/vendor/github.com/operator-framework/operator-registry/alpha/model/error.go @@ -62,7 +62,7 @@ func (v *validationError) errorPrefix(prefix []rune, last bool, seen []error) st if errors.As(serr, &verr) { errMsg.WriteString(verr.errorPrefix(subPrefix, subLast, seen)) } else { - errMsg.WriteString(fmt.Sprintf("%s%s\n", string(subPrefix), serr)) + fmt.Fprintf(errMsg, "%s%s\n", string(subPrefix), serr) } } return errMsg.String() diff --git a/vendor/github.com/operator-framework/operator-registry/alpha/model/model.go b/vendor/github.com/operator-framework/operator-registry/alpha/model/model.go index af6c391e6a..3149ae5031 100644 --- a/vendor/github.com/operator-framework/operator-registry/alpha/model/model.go +++ b/vendor/github.com/operator-framework/operator-registry/alpha/model/model.go @@ -3,6 +3,7 @@ package model import ( "errors" "fmt" + "slices" "sort" "strings" @@ -52,75 +53,75 @@ type Package struct { Deprecation *Deprecation } -func (m *Package) Validate() error { - result := newValidationError(fmt.Sprintf("invalid package %q", m.Name)) +func (p *Package) Validate() error { + result := newValidationError(fmt.Sprintf("invalid package %q", p.Name)) - if m.Name == "" { + if p.Name == "" { result.subErrors = append(result.subErrors, errors.New("package name must not be empty")) } - if err := m.Icon.Validate(); err != nil { + if err := p.Icon.Validate(); err != nil { result.subErrors = append(result.subErrors, err) } - if m.DefaultChannel == nil { + if p.DefaultChannel == nil { result.subErrors = append(result.subErrors, fmt.Errorf("default channel must be set")) } - if len(m.Channels) == 0 { + if len(p.Channels) == 0 { result.subErrors = append(result.subErrors, fmt.Errorf("package must contain at least one channel")) } foundDefault := false - for name, ch := range m.Channels { + for name, ch := range p.Channels { if name != ch.Name { result.subErrors = append(result.subErrors, fmt.Errorf("channel key %q does not match channel name %q", name, ch.Name)) } if err := ch.Validate(); err != nil { result.subErrors = append(result.subErrors, err) } - if ch == m.DefaultChannel { + if ch == p.DefaultChannel { foundDefault = true } - if ch.Package != m { + if ch.Package != p { result.subErrors = append(result.subErrors, fmt.Errorf("channel %q not correctly linked to parent package", ch.Name)) } } - if err := m.validateUniqueBundleVersions(); err != nil { + if err := p.validateUniqueBundleVersions(); err != nil { result.subErrors = append(result.subErrors, err) } - if m.DefaultChannel != nil && !foundDefault { - result.subErrors = append(result.subErrors, fmt.Errorf("default channel %q not found in channels list", m.DefaultChannel.Name)) + if p.DefaultChannel != nil && !foundDefault { + result.subErrors = append(result.subErrors, fmt.Errorf("default channel %q not found in channels list", p.DefaultChannel.Name)) } - if err := m.Deprecation.Validate(); err != nil { + if err := p.Deprecation.Validate(); err != nil { result.subErrors = append(result.subErrors, fmt.Errorf("invalid deprecation: %v", err)) } return result.orNil() } -func (m *Package) validateUniqueBundleVersions() error { - versionsMap := map[string]semver.Version{} +func (p *Package) validateUniqueBundleVersions() error { + versionsMap := map[string]string{} bundlesWithVersion := map[string]sets.Set[string]{} - for _, ch := range m.Channels { + for _, ch := range p.Channels { for _, b := range ch.Bundles { - versionsMap[b.Version.String()] = b.Version - if bundlesWithVersion[b.Version.String()] == nil { - bundlesWithVersion[b.Version.String()] = sets.New[string]() + versionsMap[b.VersionString()] = b.VersionString() + if bundlesWithVersion[b.VersionString()] == nil { + bundlesWithVersion[b.VersionString()] = sets.New[string]() } - bundlesWithVersion[b.Version.String()].Insert(b.Name) + bundlesWithVersion[b.VersionString()].Insert(b.Name) } } versionsSlice := maps.Values(versionsMap) - semver.Sort(versionsSlice) + slices.Sort(versionsSlice) var errs []error for _, v := range versionsSlice { - bundles := sets.List(bundlesWithVersion[v.String()]) + bundles := sets.List(bundlesWithVersion[v]) if len(bundles) > 1 { errs = append(errs, fmt.Errorf("{%s: [%s]}", v, strings.Join(bundles, ", "))) } @@ -331,6 +332,49 @@ type Bundle struct { // These fields are used to compare bundles in a diff. PropertiesP *property.Properties Version semver.Version + Release semver.Version +} + +func (b *Bundle) VersionString() string { + if len(b.Release.Pre) > 0 { + pres := []string{} + for _, pre := range b.Release.Pre { + pres = append(pres, pre.String()) + } + relString := strings.Join(pres, ".") + return strings.Join([]string{b.Version.String(), relString}, "-") + } + return b.Version.String() +} + +func (b *Bundle) normalizeName() string { + // if the bundle has release versioning, then the name must include this in standard form: + // -v- + // if no release versioning exists, then just return the bundle name + if len(b.Release.Pre) > 0 { + return strings.Join([]string{b.Package.Name, "v" + b.VersionString()}, "-") + } + return b.Name +} + +// order by version, then +// release, if present +func (b *Bundle) Compare(other *Bundle) int { + if b.Name == other.Name { + return 0 + } + if b.Version.NE(other.Version) { + return b.Version.Compare(other.Version) + } + bhasrelease := len(b.Release.Pre) > 0 + otherhasrelease := len(other.Release.Pre) > 0 + if bhasrelease && !otherhasrelease { + return 1 + } + if !bhasrelease && otherhasrelease { + return -1 + } + return b.Release.Compare(other.Release) } func (b *Bundle) Validate() error { @@ -339,6 +383,9 @@ func (b *Bundle) Validate() error { if b.Name == "" { result.subErrors = append(result.subErrors, errors.New("name must be set")) } + if b.Name != b.normalizeName() { + result.subErrors = append(result.subErrors, fmt.Errorf("name %q does not match normalized name %q", b.Name, b.normalizeName())) + } if b.Channel == nil { result.subErrors = append(result.subErrors, errors.New("channel must be set")) } @@ -379,6 +426,10 @@ func (b *Bundle) Validate() error { result.subErrors = append(result.subErrors, fmt.Errorf("invalid deprecation: %v", err)) } + if len(b.Version.Build) > 0 && len(b.Release.Pre) > 0 { + result.subErrors = append(result.subErrors, fmt.Errorf("cannot use build metadata in version with a release version")) + } + return result.orNil() } diff --git a/vendor/github.com/operator-framework/operator-registry/alpha/property/property.go b/vendor/github.com/operator-framework/operator-registry/alpha/property/property.go index 6fb792dda2..dcca33ce5f 100644 --- a/vendor/github.com/operator-framework/operator-registry/alpha/property/property.go +++ b/vendor/github.com/operator-framework/operator-registry/alpha/property/property.go @@ -38,6 +38,7 @@ func (p Property) String() string { type Package struct { PackageName string `json:"packageName"` Version string `json:"version"` + Release string `json:"release,omitzero"` } // NOTICE: The Channel properties are for internal use only. @@ -247,6 +248,9 @@ func jsonMarshal(p interface{}) ([]byte, error) { func MustBuildPackage(name, version string) Property { return MustBuild(&Package{PackageName: name, Version: version}) } +func MustBuildPackageRelease(name, version, relVersion string) Property { + return MustBuild(&Package{PackageName: name, Version: version, Release: relVersion}) +} func MustBuildPackageRequired(name, versionRange string) Property { return MustBuild(&PackageRequired{name, versionRange}) } diff --git a/vendor/github.com/operator-framework/operator-registry/alpha/template/api/api.go b/vendor/github.com/operator-framework/operator-registry/alpha/template/api/api.go new file mode 100644 index 0000000000..3db9a95f9b --- /dev/null +++ b/vendor/github.com/operator-framework/operator-registry/alpha/template/api/api.go @@ -0,0 +1,36 @@ +package api + +import ( + "context" + "io" + + "github.com/operator-framework/operator-registry/alpha/declcfg" +) + +// BundleRenderer defines the function signature for rendering a string containing a bundle image/path/file into a DeclarativeConfig fragment +// It's provided as a discrete type to allow for easy mocking in tests as well as facilitating variable +// restrictions on reference types +type BundleRenderer func(context.Context, string) (*declcfg.DeclarativeConfig, error) + +// Template defines the common interface for all template types +type Template interface { + // RenderBundle renders a bundle image reference into a DeclarativeConfig fragment. + // This function is used to render a single bundle image reference by a template instance, + // and is provided to the template on construction. + // This is typically used in the call to Render the template to DeclarativeConfig, and + // needs to be configurable to handle different bundle image formats and configurations. + RenderBundle(ctx context.Context, imageRef string) (*declcfg.DeclarativeConfig, error) + // Render processes the raw template yaml/json input and returns an expanded DeclarativeConfig + // in the case where expansion fails, it returns an error + Render(ctx context.Context, reader io.Reader) (*declcfg.DeclarativeConfig, error) + // Schema returns the schema identifier for this template type + Schema() string +} + +// Factory creates template instances based on schema +type Factory interface { + // CreateTemplate creates a new template instance with the given RenderBundle function + CreateTemplate(renderBundle BundleRenderer) Template + // Schema returns the schema identifier this factory handles + Schema() string +} diff --git a/vendor/github.com/operator-framework/operator-registry/alpha/template/basic/basic.go b/vendor/github.com/operator-framework/operator-registry/alpha/template/basic/basic.go index a34d7541d7..7bb97955bb 100644 --- a/vendor/github.com/operator-framework/operator-registry/alpha/template/basic/basic.go +++ b/vendor/github.com/operator-framework/operator-registry/alpha/template/basic/basic.go @@ -9,40 +9,40 @@ import ( "k8s.io/apimachinery/pkg/util/yaml" "github.com/operator-framework/operator-registry/alpha/declcfg" + "github.com/operator-framework/operator-registry/alpha/template/api" ) +// Schema const schema string = "olm.template.basic" -type Template struct { - RenderBundle func(context.Context, string) (*declcfg.DeclarativeConfig, error) -} +// Template types -type BasicTemplate struct { +type BasicTemplateData struct { Schema string `json:"schema"` Entries []*declcfg.Meta `json:"entries"` } -func parseSpec(reader io.Reader) (*BasicTemplate, error) { - bt := &BasicTemplate{} - btDoc := json.RawMessage{} - btDecoder := yaml.NewYAMLOrJSONDecoder(reader, 4096) - err := btDecoder.Decode(&btDoc) - if err != nil { - return nil, fmt.Errorf("decoding template schema: %v", err) - } - err = json.Unmarshal(btDoc, bt) - if err != nil { - return nil, fmt.Errorf("unmarshalling template: %v", err) - } +type basicTemplate struct { + renderBundle api.BundleRenderer +} - if bt.Schema != schema { - return nil, fmt.Errorf("template has unknown schema (%q), should be %q", bt.Schema, schema) +// new creates a new basic template instance +func new(renderBundle api.BundleRenderer) api.Template { + return &basicTemplate{ + renderBundle: renderBundle, } +} - return bt, nil +// Template functions + +// RenderBundle expands the bundle image reference into a DeclarativeConfig fragment. +func (t *basicTemplate) RenderBundle(ctx context.Context, image string) (*declcfg.DeclarativeConfig, error) { + return t.renderBundle(ctx, image) } -func (t Template) Render(ctx context.Context, reader io.Reader) (*declcfg.DeclarativeConfig, error) { +// Render extracts the spec from the reader and converts it to a standalone DeclarativeConfig, +// expanding any bundle image references into full olm.bundle DeclarativeConfig +func (t *basicTemplate) Render(ctx context.Context, reader io.Reader) (*declcfg.DeclarativeConfig, error) { bt, err := parseSpec(reader) if err != nil { return nil, err @@ -68,14 +68,41 @@ func (t Template) Render(ctx context.Context, reader io.Reader) (*declcfg.Declar return cfg, nil } +// Schema returns the schema identifier for this template type +func (t *basicTemplate) Schema() string { + return schema +} + +// Helper functions + +func parseSpec(reader io.Reader) (*BasicTemplateData, error) { + bt := &BasicTemplateData{} + btDoc := json.RawMessage{} + btDecoder := yaml.NewYAMLOrJSONDecoder(reader, 4096) + err := btDecoder.Decode(&btDoc) + if err != nil { + return nil, fmt.Errorf("decoding template schema: %v", err) + } + err = json.Unmarshal(btDoc, bt) + if err != nil { + return nil, fmt.Errorf("unmarshalling template: %v", err) + } + + if bt.Schema != schema { + return nil, fmt.Errorf("template has unknown schema (%q), should be %q", bt.Schema, schema) + } + + return bt, nil +} + // isBundleTemplate identifies a Bundle template source as having a Schema and Image defined // but no Properties, RelatedImages or Package defined func isBundleTemplate(b *declcfg.Bundle) bool { return b.Schema != "" && b.Image != "" && b.Package == "" && len(b.Properties) == 0 && len(b.RelatedImages) == 0 } -// FromReader reads FBC from a reader and generates a BasicTemplate from it -func FromReader(r io.Reader) (*BasicTemplate, error) { +// FromReader reads FBC from a reader and generates a BasicTemplateData from it +func FromReader(r io.Reader) (*BasicTemplateData, error) { var entries []*declcfg.Meta if err := declcfg.WalkMetasReader(r, func(meta *declcfg.Meta, err error) error { if err != nil { @@ -101,10 +128,27 @@ func FromReader(r io.Reader) (*BasicTemplate, error) { return nil, err } - bt := &BasicTemplate{ + bt := &BasicTemplateData{ Schema: schema, Entries: entries, } return bt, nil } + +// Factory types + +// Factory represents the basic template factory +type Factory struct{} + +// Factory functions + +// CreateTemplate creates a new template instance with the given RenderBundle function +func (f *Factory) CreateTemplate(renderBundle api.BundleRenderer) api.Template { + return new(renderBundle) +} + +// Schema returns the schema supported by this factory +func (f *Factory) Schema() string { + return schema +} diff --git a/vendor/github.com/operator-framework/operator-registry/alpha/template/converter/converter.go b/vendor/github.com/operator-framework/operator-registry/alpha/template/converter/converter.go index 03e3e0a979..8a5de92e18 100644 --- a/vendor/github.com/operator-framework/operator-registry/alpha/template/converter/converter.go +++ b/vendor/github.com/operator-framework/operator-registry/alpha/template/converter/converter.go @@ -9,22 +9,46 @@ import ( "sigs.k8s.io/yaml" "github.com/operator-framework/operator-registry/alpha/template/basic" + "github.com/operator-framework/operator-registry/alpha/template/substitutes" "github.com/operator-framework/operator-registry/pkg/image" ) type Converter struct { - FbcReader io.Reader - OutputFormat string - Registry image.Registry + FbcReader io.Reader + OutputFormat string + Registry image.Registry + DestinationTemplateType string // TODO: when we have a template factory, we can pass it here } func (c *Converter) Convert() error { - bt, err := basic.FromReader(c.FbcReader) - if err != nil { - return err + var b []byte + var err error + switch c.DestinationTemplateType { + case "basic": + var bt *basic.BasicTemplateData + bt, err = basic.FromReader(c.FbcReader) + if err != nil { + return err + } + b, err = json.MarshalIndent(bt, "", " ") + if err != nil { + return err + } + case "substitutes": + var st *substitutes.SubstitutesTemplateData + st, err = substitutes.FromReader(c.FbcReader) + if err != nil { + return err + } + b, err = json.MarshalIndent(st, "", " ") + if err != nil { + return err + } + default: + // usage pattern prevents us from getting here, so if we do it's a programmer failure and we should panic + panic(fmt.Sprintf("unknown template type %q", c.DestinationTemplateType)) } - b, _ := json.MarshalIndent(bt, "", " ") if c.OutputFormat == "json" { fmt.Fprintln(os.Stdout, string(b)) } else { diff --git a/vendor/github.com/operator-framework/operator-registry/alpha/template/registry.go b/vendor/github.com/operator-framework/operator-registry/alpha/template/registry.go new file mode 100644 index 0000000000..1ece2e4a6c --- /dev/null +++ b/vendor/github.com/operator-framework/operator-registry/alpha/template/registry.go @@ -0,0 +1,146 @@ +package template + +import ( + "fmt" + "io" + "slices" + "strings" + "sync" + "text/tabwriter" + + "github.com/operator-framework/operator-registry/alpha/template/api" + "github.com/operator-framework/operator-registry/alpha/template/basic" + "github.com/operator-framework/operator-registry/alpha/template/semver" + "github.com/operator-framework/operator-registry/alpha/template/substitutes" +) + +// Re-export api types for backward compatibility +type ( + BundleRenderer = api.BundleRenderer + Template = api.Template + Factory = api.Factory +) + +type Registry interface { + Register(factory Factory) + GetSupportedTypes() []string + HasType(templateType string) bool + HasSchema(schema string) bool + CreateTemplateBySchema(reader io.Reader, renderBundle BundleRenderer) (Template, io.Reader, error) + CreateTemplateByType(templateType string, renderBundle BundleRenderer) (Template, error) + GetSupportedSchemas() []string + HelpText() string +} + +// registry maintains a mapping of schema identifiers to template factories +type registry struct { + mu sync.RWMutex + factories map[string]Factory +} + +// NewRegistry creates a new registry and registers all built-in template factories. +func NewRegistry() Registry { + r := ®istry{ + factories: make(map[string]Factory), + } + r.Register(&basic.Factory{}) + r.Register(&semver.Factory{}) + r.Register(&substitutes.Factory{}) + return r +} + +func (r *registry) HelpText() string { + var help strings.Builder + supportedTypes := r.GetSupportedTypes() + help.WriteString("\n") + tabber := tabwriter.NewWriter(&help, 0, 0, 1, ' ', 0) + for _, item := range supportedTypes { + fmt.Fprintf(tabber, " - %s\n", item) + } + tabber.Flush() + return help.String() +} + +// Register adds a template factory to the registry +func (r *registry) Register(factory Factory) { + r.mu.Lock() + defer r.mu.Unlock() + r.factories[factory.Schema()] = factory +} + +// CreateTemplateBySchema creates a template instance based on the schema found in the input +// and returns a reader that can be used to render the template. The returned reader includes +// both the data consumed during schema detection and the remaining unconsumed data. +func (r *registry) CreateTemplateBySchema(reader io.Reader, renderBundle BundleRenderer) (Template, io.Reader, error) { + schema, replayReader, err := detectSchema(reader) + if err != nil { + return nil, nil, err + } + + r.mu.RLock() + factory, exists := r.factories[schema] + defer r.mu.RUnlock() + if !exists { + return nil, nil, &UnknownSchemaError{Schema: schema} + } + + return factory.CreateTemplate(renderBundle), replayReader, nil +} + +func (r *registry) CreateTemplateByType(templateType string, renderBundle BundleRenderer) (Template, error) { + r.mu.RLock() + factory, exists := r.factories[templateType] + defer r.mu.RUnlock() + if !exists { + return nil, &UnknownSchemaError{Schema: templateType} + } + + return factory.CreateTemplate(renderBundle), nil +} + +// GetSupportedSchemas returns all supported schema identifiers +func (r *registry) GetSupportedSchemas() []string { + r.mu.RLock() + defer r.mu.RUnlock() + schemas := make([]string, 0, len(r.factories)) + for schema := range r.factories { + schemas = append(schemas, schema) + } + slices.Sort(schemas) + return schemas +} + +// GetSupportedTypes returns all supported template types +// TODO: in future, might store the type separately from the schema +// right now it's just the last part of the schema string +func (r *registry) GetSupportedTypes() []string { + r.mu.RLock() + defer r.mu.RUnlock() + types := make([]string, 0, len(r.factories)) + for schema := range r.factories { + types = append(types, schema[strings.LastIndex(schema, ".")+1:]) + } + slices.Sort(types) + return types +} + +func (r *registry) HasSchema(schema string) bool { + r.mu.RLock() + defer r.mu.RUnlock() + _, exists := r.factories[schema] + return exists +} + +func (r *registry) HasType(templateType string) bool { + types := r.GetSupportedTypes() + return slices.Contains(types, templateType) +} + +// UnknownSchemaError is returned when a schema is not recognized +type UnknownSchemaError struct { + Schema string +} + +func (e *UnknownSchemaError) Error() string { + return "unknown template schema: " + e.Schema +} diff --git a/vendor/github.com/operator-framework/operator-registry/alpha/template/schema.go b/vendor/github.com/operator-framework/operator-registry/alpha/template/schema.go new file mode 100644 index 0000000000..d96b346da3 --- /dev/null +++ b/vendor/github.com/operator-framework/operator-registry/alpha/template/schema.go @@ -0,0 +1,47 @@ +package template + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + + "k8s.io/apimachinery/pkg/util/yaml" +) + +// detectSchema reads the input, extracts the schema field, and returns a reader +// that includes the consumed data followed by the remaining stream data. +// This works when the input is stdin or a file (since stdin cannot be closed and reopened) +// and complies with the requirement that each supplied schema has a defined "schema" field, +// without attempting to load all input into memory. +func detectSchema(reader io.Reader) (string, io.Reader, error) { + // Capture what's read during schema detection + var capturedData bytes.Buffer + teeReader := io.TeeReader(reader, &capturedData) + + // Read the input into a raw message + rawDoc := json.RawMessage{} + decoder := yaml.NewYAMLOrJSONDecoder(teeReader, 4096) + err := decoder.Decode(&rawDoc) + if err != nil { + return "", nil, fmt.Errorf("decoding template input: %v", err) + } + + // Parse the raw message to extract schema + var schemaDoc struct { + Schema string `json:"schema"` + } + err = json.Unmarshal(rawDoc, &schemaDoc) + if err != nil { + return "", nil, fmt.Errorf("unmarshalling template schema: %v", err) + } + + if schemaDoc.Schema == "" { + return "", nil, fmt.Errorf("template input missing required 'schema' field") + } + + // Create a reader that combines the captured data with the remaining stream + replayReader := io.MultiReader(&capturedData, reader) + + return schemaDoc.Schema, replayReader, nil +} diff --git a/vendor/github.com/operator-framework/operator-registry/alpha/template/semver/semver.go b/vendor/github.com/operator-framework/operator-registry/alpha/template/semver/semver.go index 8a4b837b41..22ca94e8d3 100644 --- a/vendor/github.com/operator-framework/operator-registry/alpha/template/semver/semver.go +++ b/vendor/github.com/operator-framework/operator-registry/alpha/template/semver/semver.go @@ -15,12 +15,72 @@ import ( "github.com/operator-framework/operator-registry/alpha/declcfg" "github.com/operator-framework/operator-registry/alpha/property" + "github.com/operator-framework/operator-registry/alpha/template/api" ) -func (t Template) Render(ctx context.Context) (*declcfg.DeclarativeConfig, error) { +// Schema +const schema string = "olm.semver" + +// Template types + +// StreamType represents the type of version stream for channel generation +type StreamType string + +const ( + // DefaultStreamType represents an unspecified stream type + DefaultStreamType StreamType = "" + // MinorStreamType represents minor version channels (e.g., stable-v1.2) + MinorStreamType StreamType = "minor" + // MajorStreamType represents major version channels (e.g., stable-v1) + MajorStreamType StreamType = "major" +) + +type bundleEntry struct { + Image string `json:"image,omitempty"` +} + +type channelBundles struct { + Bundles []bundleEntry `json:"bundles,omitempty"` +} + +type SemverTemplateData struct { + Schema string `json:"schema"` + GenerateMajorChannels bool `json:"generateMajorChannels,omitempty"` + GenerateMinorChannels bool `json:"generateMinorChannels,omitempty"` + DefaultChannelTypePreference StreamType `json:"defaultChannelTypePreference,omitempty"` + Candidate channelBundles `json:"candidate,omitempty"` + Fast channelBundles `json:"fast,omitempty"` + Stable channelBundles `json:"stable,omitempty"` + + pkg string `json:"-"` // the derived package name + defaultChannel string `json:"-"` // detected "most stable" channel head +} + +// semverTemplate implements the common template interface +type semverTemplate struct { + renderBundle api.BundleRenderer +} + +// new creates a new semver template instance +func new(renderBundle api.BundleRenderer) api.Template { + return &semverTemplate{ + renderBundle: renderBundle, + } +} + +// Template functions + +// RenderBundle expands the bundle image reference into a DeclarativeConfig fragment. +func (t *semverTemplate) RenderBundle(ctx context.Context, image string) (*declcfg.DeclarativeConfig, error) { + return t.renderBundle(ctx, image) +} + +// Render takes all provided entries and converts them to a standalone DeclarativeConfig, +// generating channels based on the bundles listed in the template and expanding any bundle image references into full olm.bundle DeclarativeConfig +func (t *semverTemplate) Render(ctx context.Context, reader io.Reader) (*declcfg.DeclarativeConfig, error) { var out declcfg.DeclarativeConfig - sv, err := readFile(t.Data) + sv, err := readFile(reader) if err != nil { return nil, fmt.Errorf("render: unable to read file: %v", err) } @@ -58,9 +118,86 @@ func (t Template) Render(ctx context.Context) (*declcfg.DeclarativeConfig, error return &out, nil } -func buildBundleList(t semverTemplate) map[string]string { +// Schema returns the schema identifier for this template type +func (t *semverTemplate) Schema() string { + return schema +} + +// Helper functions + +// channel "archetypes", restricted in this iteration to just these +type channelArchetype string + +const ( + candidateChannelArchetype channelArchetype = "candidate" + fastChannelArchetype channelArchetype = "fast" + stableChannelArchetype channelArchetype = "stable" +) + +// mapping channel name --> stability, where higher values indicate greater stability +var channelPriorities = map[channelArchetype]int{candidateChannelArchetype: 0, fastChannelArchetype: 1, stableChannelArchetype: 2} + +// sorting capability for a slice according to the assigned channelPriorities +type byChannelPriority []channelArchetype + +func (b byChannelPriority) Len() int { return len(b) } +func (b byChannelPriority) Less(i, j int) bool { + return channelPriorities[b[i]] < channelPriorities[b[j]] +} +func (b byChannelPriority) Swap(i, j int) { b[i], b[j] = b[j], b[i] } + +// general preference for minor channels +var streamTypePriorities = map[StreamType]int{MinorStreamType: 2, MajorStreamType: 1, DefaultStreamType: 0} + +// map of archetypes --> bundles --> bundle-version from the input file +type bundleVersions map[channelArchetype]map[string]semver.Version // e.g. srcv["stable"]["example-operator.v1.0.0"] = 1.0.0 + +// the "high-water channel" struct functions as a freely-rising indicator of the "most stable" channel head, so we can use that +// later as the package's defaultChannel attribute +type highwaterChannel struct { + archetype channelArchetype + kind StreamType + version semver.Version + name string +} + +// prefer (in descending order of preference): +// - higher-rank archetype, +// - semver version, +// - a channel type matching the set preference, or +// - a 'better' (higher value) channel type +func (h *highwaterChannel) gt(ih *highwaterChannel, pref StreamType) bool { + if channelPriorities[h.archetype] != channelPriorities[ih.archetype] { + return channelPriorities[h.archetype] > channelPriorities[ih.archetype] + } + if h.version.NE(ih.version) { + return h.version.GT(ih.version) + } + if h.kind != ih.kind { + if h.kind == pref { + return true + } + if ih.kind == pref { + return false + } + return h.kind.gt((*ih).kind) + } + return false +} + +// entryTuple represents a channel entry with its associated metadata +type entryTuple struct { + arch channelArchetype + kind StreamType + parent string + name string + version semver.Version + index int +} + +func buildBundleList(t SemverTemplateData) map[string]string { dict := make(map[string]string) - for _, bl := range []semverTemplateChannelBundles{t.Candidate, t.Fast, t.Stable} { + for _, bl := range []channelBundles{t.Candidate, t.Fast, t.Stable} { for _, b := range bl.Bundles { if _, ok := dict[b.Image]; !ok { dict[b.Image] = b.Image @@ -70,13 +207,13 @@ func buildBundleList(t semverTemplate) map[string]string { return dict } -func readFile(reader io.Reader) (*semverTemplate, error) { +func readFile(reader io.Reader) (*SemverTemplateData, error) { data, err := io.ReadAll(reader) if err != nil { return nil, err } - sv := semverTemplate{} + sv := SemverTemplateData{} if err := yaml.UnmarshalStrict(data, &sv); err != nil { return nil, err } @@ -94,17 +231,17 @@ func readFile(reader io.Reader) (*semverTemplate, error) { // if un-set, default to align to the selected generate option // if set, error out if we mismatch the two switch sv.DefaultChannelTypePreference { - case defaultStreamType: + case DefaultStreamType: if sv.GenerateMinorChannels { - sv.DefaultChannelTypePreference = minorStreamType + sv.DefaultChannelTypePreference = MinorStreamType } else if sv.GenerateMajorChannels { - sv.DefaultChannelTypePreference = majorStreamType + sv.DefaultChannelTypePreference = MajorStreamType } - case minorStreamType: + case MinorStreamType: if !sv.GenerateMinorChannels { return nil, fmt.Errorf("schema attribute mismatch: DefaultChannelTypePreference set to 'minor' doesn't make sense if not generating minor-version channels") } - case majorStreamType: + case MajorStreamType: if !sv.GenerateMajorChannels { return nil, fmt.Errorf("schema attribute mismatch: DefaultChannelTypePreference set to 'major' doesn't make sense if not generating major-version channels") } @@ -115,7 +252,7 @@ func readFile(reader io.Reader) (*semverTemplate, error) { return &sv, nil } -func (sv *semverTemplate) getVersionsFromStandardChannels(cfg *declcfg.DeclarativeConfig, bundleDict map[string]string) (*bundleVersions, error) { +func (sv *SemverTemplateData) getVersionsFromStandardChannels(cfg *declcfg.DeclarativeConfig, bundleDict map[string]string) (*bundleVersions, error) { versions := bundleVersions{} bdm, err := sv.getVersionsFromChannel(sv.Candidate.Bundles, bundleDict, cfg) @@ -148,7 +285,7 @@ func (sv *semverTemplate) getVersionsFromStandardChannels(cfg *declcfg.Declarati return &versions, nil } -func (sv *semverTemplate) getVersionsFromChannel(semverBundles []semverTemplateBundleEntry, bundleDict map[string]string, cfg *declcfg.DeclarativeConfig) (map[string]semver.Version, error) { +func (sv *SemverTemplateData) getVersionsFromChannel(semverBundles []bundleEntry, bundleDict map[string]string, cfg *declcfg.DeclarativeConfig) (map[string]semver.Version, error) { entries := make(map[string]semver.Version) // we iterate over the channel bundles from the template, to: @@ -204,13 +341,12 @@ func (sv *semverTemplate) getVersionsFromChannel(semverBundles []semverTemplateB return entries, nil } -// generates an unlinked channel for each channel as per the input template config (major || minor), then link up the edges of the set of channels so that: +// generateChannels generates an unlinked channel for each channel as per the input template config (major || minor), then link up the edges of the set of channels so that: // - for minor version increase, the new edge replaces the previous // - (for major channels) iterating to a new minor version channel (traversing between Y-streams) creates a 'replaces' edge between the predecessor and successor bundles // - within the same minor version (Y-stream), the head of the channel should have a 'skips' encompassing all lesser Y.Z versions of the bundle enumerated in the template. // along the way, uses a highwaterChannel marker to identify the "most stable" channel head to be used as the default channel for the generated package - -func (sv *semverTemplate) generateChannels(semverChannels *bundleVersions) []declcfg.Channel { +func (sv *SemverTemplateData) generateChannels(semverChannels *bundleVersions) []declcfg.Channel { outChannels := []declcfg.Channel{} // sort the channel archetypes in ascending order so we can traverse the bundles in order of @@ -253,12 +389,12 @@ func (sv *semverTemplate) generateChannels(semverChannels *bundleVersions) []dec for _, bundleName := range bundleNamesByVersion { // a dodge to avoid duplicating channel processing body; accumulate a map of the channels which need creating from the bundle // we need to associate by kind so we can partition the resulting entries - channelNameKeys := make(map[streamType]string) + channelNameKeys := make(map[StreamType]string) if sv.GenerateMajorChannels { - channelNameKeys[majorStreamType] = channelNameFromMajor(archetype, bundles[bundleName]) + channelNameKeys[MajorStreamType] = channelNameFromMajor(archetype, bundles[bundleName]) } if sv.GenerateMinorChannels { - channelNameKeys[minorStreamType] = channelNameFromMinor(archetype, bundles[bundleName]) + channelNameKeys[MinorStreamType] = channelNameFromMinor(archetype, bundles[bundleName]) } for cKey, cName := range channelNameKeys { @@ -287,7 +423,7 @@ func (sv *semverTemplate) generateChannels(semverChannels *bundleVersions) []dec return outChannels } -func (sv *semverTemplate) linkChannels(unlinkedChannels map[string]*declcfg.Channel, entries []entryTuple) []declcfg.Channel { +func (sv *SemverTemplateData) linkChannels(unlinkedChannels map[string]*declcfg.Channel, entries []entryTuple) []declcfg.Channel { channels := []declcfg.Channel{} // sort to force partitioning by archetype --> kind --> semver @@ -465,30 +601,23 @@ func stripBuildMetadata(v semver.Version) string { return v.String() } -// prefer (in descending order of preference): -// - higher-rank archetype, -// - semver version, -// - a channel type matching the set preference, or -// - a 'better' (higher value) channel type -func (h *highwaterChannel) gt(ih *highwaterChannel, pref streamType) bool { - if channelPriorities[h.archetype] != channelPriorities[ih.archetype] { - return channelPriorities[h.archetype] > channelPriorities[ih.archetype] - } - if h.version.NE(ih.version) { - return h.version.GT(ih.version) - } - if h.kind != ih.kind { - if h.kind == pref { - return true - } - if ih.kind == pref { - return false - } - return h.kind.gt((*ih).kind) - } - return false +func (t StreamType) gt(in StreamType) bool { + return streamTypePriorities[t] > streamTypePriorities[in] } -func (t streamType) gt(in streamType) bool { - return streamTypePriorities[t] > streamTypePriorities[in] +// Factory types + +// Factory represents the semver template factory +type Factory struct{} + +// Factory functions + +// CreateTemplate creates a new template instance with the given RenderBundle function +func (f *Factory) CreateTemplate(renderBundle api.BundleRenderer) api.Template { + return new(renderBundle) +} + +// Schema returns the schema supported by this factory +func (f *Factory) Schema() string { + return schema } diff --git a/vendor/github.com/operator-framework/operator-registry/alpha/template/semver/types.go b/vendor/github.com/operator-framework/operator-registry/alpha/template/semver/types.go deleted file mode 100644 index fda01139a3..0000000000 --- a/vendor/github.com/operator-framework/operator-registry/alpha/template/semver/types.go +++ /dev/null @@ -1,93 +0,0 @@ -package semver - -import ( - "context" - "io" - - "github.com/blang/semver/v4" - - "github.com/operator-framework/operator-registry/alpha/declcfg" -) - -// data passed into this module externally -type Template struct { - Data io.Reader - RenderBundle func(context.Context, string) (*declcfg.DeclarativeConfig, error) -} - -// IO structs -- BEGIN -type semverTemplateBundleEntry struct { - Image string `json:"image,omitempty"` -} - -type semverTemplateChannelBundles struct { - Bundles []semverTemplateBundleEntry `json:"bundles,omitempty"` -} - -type semverTemplate struct { - Schema string `json:"schema"` - GenerateMajorChannels bool `json:"generateMajorChannels,omitempty"` - GenerateMinorChannels bool `json:"generateMinorChannels,omitempty"` - DefaultChannelTypePreference streamType `json:"defaultChannelTypePreference,omitempty"` - Candidate semverTemplateChannelBundles `json:"candidate,omitempty"` - Fast semverTemplateChannelBundles `json:"fast,omitempty"` - Stable semverTemplateChannelBundles `json:"stable,omitempty"` - - pkg string `json:"-"` // the derived package name - defaultChannel string `json:"-"` // detected "most stable" channel head -} - -// IO structs -- END - -const schema string = "olm.semver" - -// channel "archetypes", restricted in this iteration to just these -type channelArchetype string - -const ( - candidateChannelArchetype channelArchetype = "candidate" - fastChannelArchetype channelArchetype = "fast" - stableChannelArchetype channelArchetype = "stable" -) - -// mapping channel name --> stability, where higher values indicate greater stability -var channelPriorities = map[channelArchetype]int{candidateChannelArchetype: 0, fastChannelArchetype: 1, stableChannelArchetype: 2} - -// sorting capability for a slice according to the assigned channelPriorities -type byChannelPriority []channelArchetype - -func (b byChannelPriority) Len() int { return len(b) } -func (b byChannelPriority) Less(i, j int) bool { - return channelPriorities[b[i]] < channelPriorities[b[j]] -} -func (b byChannelPriority) Swap(i, j int) { b[i], b[j] = b[j], b[i] } - -type streamType string - -const defaultStreamType streamType = "" -const minorStreamType streamType = "minor" -const majorStreamType streamType = "major" - -// general preference for minor channels -var streamTypePriorities = map[streamType]int{minorStreamType: 2, majorStreamType: 1, defaultStreamType: 0} - -// map of archetypes --> bundles --> bundle-version from the input file -type bundleVersions map[channelArchetype]map[string]semver.Version // e.g. srcv["stable"]["example-operator.v1.0.0"] = 1.0.0 - -// the "high-water channel" struct functions as a freely-rising indicator of the "most stable" channel head, so we can use that -// later as the package's defaultChannel attribute -type highwaterChannel struct { - archetype channelArchetype - kind streamType - version semver.Version - name string -} - -type entryTuple struct { - arch channelArchetype - kind streamType - name string - parent string - index int - version semver.Version -} diff --git a/vendor/github.com/operator-framework/operator-registry/alpha/template/substitutes/substitutes.go b/vendor/github.com/operator-framework/operator-registry/alpha/template/substitutes/substitutes.go new file mode 100644 index 0000000000..d2ed36e967 --- /dev/null +++ b/vendor/github.com/operator-framework/operator-registry/alpha/template/substitutes/substitutes.go @@ -0,0 +1,287 @@ +package substitutes + +import ( + "context" + "encoding/json" + "fmt" + "io" + "slices" + + "k8s.io/apimachinery/pkg/util/yaml" + + "github.com/operator-framework/operator-registry/alpha/declcfg" + "github.com/operator-framework/operator-registry/alpha/template/api" +) + +// Schema +const schema string = "olm.template.substitutes" + +// Template types + +// Substitute defines a replacement relationship between an existing bundle name and a superceding bundle image pullspec. +// Since registry+v0 graphs are bundle name based, this uses the name instead of a version. +type Substitute struct { + Name string `json:"name"` // the bundle image pullspec to substitute + Base string `json:"base"` // the bundle name to substitute for +} + +// SubstitutesTemplateData represents a template for bundle substitutions. +// It contains the schema identifier, an input declarative config, and substitution mappings +// that define how bundles should be replaced in upgrade graphs. +type SubstitutesTemplateData struct { + Schema string `json:"schema"` + Entries []*declcfg.Meta `json:"entries"` + Substitutions []Substitute `json:"substitutions"` +} + +// template implements a catalog template to make the substitutesFor mechanics less error prone. +// It provides a customizable RenderBundle function that is used to produce declarative config for a supplied bundle. +type template struct { + renderBundle api.BundleRenderer +} + +func new(renderBundle api.BundleRenderer) api.Template { + return &template{ + renderBundle: renderBundle, + } +} + +// Template functions + +func (t *template) Schema() string { + return schema +} + +func (t *template) RenderBundle(ctx context.Context, bundleRef string) (*declcfg.DeclarativeConfig, error) { + return t.renderBundle(ctx, bundleRef) +} + +func (t *template) Render(ctx context.Context, reader io.Reader) (*declcfg.DeclarativeConfig, error) { + st, err := parseSpec(reader) + if err != nil { + return nil, fmt.Errorf("render: unable to parse template: %v", err) + } + + // Create DeclarativeConfig from template entries + cfg, err := declcfg.LoadSlice(st.Entries) + if err != nil { + return nil, fmt.Errorf("render: unable to create declarative config from entries: %v", err) + } + + _, err = declcfg.ConvertToModel(*cfg) + if err != nil { + return nil, fmt.Errorf("render: entries are not valid FBC: %v", err) + } + + // Process each substitution + for _, substitution := range st.Substitutions { + err := t.processSubstitution(ctx, cfg, substitution) + if err != nil { + return nil, fmt.Errorf("render: error processing substitution %s->%s: %v", substitution.Base, substitution.Name, err) + } + } + + return cfg, nil +} + +// Helper functions + +func parseSpec(reader io.Reader) (*SubstitutesTemplateData, error) { + st := &SubstitutesTemplateData{} + stDoc := json.RawMessage{} + stDecoder := yaml.NewYAMLOrJSONDecoder(reader, 4096) + err := stDecoder.Decode(&stDoc) + if err != nil { + return nil, fmt.Errorf("decoding template schema: %v", err) + } + err = json.Unmarshal(stDoc, st) + if err != nil { + return nil, fmt.Errorf("unmarshalling template: %v", err) + } + + if st.Schema != schema { + return nil, fmt.Errorf("template has unknown schema (%q), should be %q", st.Schema, schema) + } + + return st, nil +} + +// validateSubstitution validates the substitution references +func (t *template) validateSubstitution(ctx context.Context, cfg *declcfg.DeclarativeConfig, substitution Substitute) error { + // Validate substitution fields - all are required + if substitution.Name == "" { + return fmt.Errorf("substitution name cannot be empty") + } + if substitution.Base == "" { + return fmt.Errorf("substitution base cannot be empty") + } + if substitution.Name == substitution.Base { + return fmt.Errorf("substitution name and base cannot be the same") + } + + // determine the versions of the base and substitute bundles and ensure that + // the composite version of the substitute bundle is greater than the composite version of the base bundle + + // 1. Render the pullspec represented by substitution.Name + substituteCfg, err := t.renderBundle(ctx, substitution.Name) + if err != nil { + return fmt.Errorf("failed to render bundle image reference %q: %v", substitution.Name, err) + } + if substituteCfg == nil || len(substituteCfg.Bundles) == 0 { + return fmt.Errorf("rendered bundle image reference %q contains no bundles", substitution.Name) + } + substituteBundle := &substituteCfg.Bundles[0] + substituteCv, err := substituteBundle.CompositeVersion() + if err != nil { + return fmt.Errorf("failed to get composite version for substitute bundle %q: %v", substitution.Name, err) + } + + // 2. Examine cfg to find the bundle which has matching name to substitution.Base + var baseBundle *declcfg.Bundle + for i := range cfg.Bundles { + if cfg.Bundles[i].Name == substitution.Base { + baseBundle = &cfg.Bundles[i] + break + } + } + if baseBundle == nil { + return fmt.Errorf("base bundle %q does not exist in catalog", substitution.Base) + } + baseCv, err := baseBundle.CompositeVersion() + if err != nil { + return fmt.Errorf("failed to get composite version for base bundle %q: %v", substitution.Base, err) + } + + // 3. Ensure that the base bundle composite version is less than the substitute bundle composite version + if baseCv.Compare(substituteCv) >= 0 { + return fmt.Errorf("base bundle %q is not less than substitute bundle %q", substitution.Base, substitution.Name) + } + + return nil +} + +// processSubstitution handles the complex logic for processing a single substitution +func (t *template) processSubstitution(ctx context.Context, cfg *declcfg.DeclarativeConfig, substitution Substitute) error { + if err := t.validateSubstitution(ctx, cfg, substitution); err != nil { + return err + } + + substituteCfg, err := t.RenderBundle(ctx, substitution.Name) + if err != nil { + return fmt.Errorf("failed to render bundle image reference %q: %v", substitution.Name, err) + } + + // normally, we'd rely RenderBundle to represent any failure via err, but since this is comes from input, + // we need to perform more validation of the results here before processing them + if substituteCfg == nil || len(substituteCfg.Bundles) == 0 { + return fmt.Errorf("rendered bundle image reference %q contains no bundles", substitution.Name) + } + + substituteBundle := &substituteCfg.Bundles[0] + + // Iterate over all channels + for i := range cfg.Channels { + channel := &cfg.Channels[i] + + // First pass: find entries that have substitution.base as their name + // Only process original entries, not substitution entries (they have empty replaces after clearing) + var entriesToSubstitute []int + for j := range channel.Entries { + entry := &channel.Entries[j] + if entry.Name == substitution.Base { + entriesToSubstitute = append(entriesToSubstitute, j) + } + } + + // Create new entries for each substitution (process in reverse order to avoid index issues) + for i := len(entriesToSubstitute) - 1; i >= 0; i-- { + entryIndex := entriesToSubstitute[i] + // Create a new channel entry for substitution.name + newEntry := declcfg.ChannelEntry{ + Name: substituteBundle.Name, + Replaces: channel.Entries[entryIndex].Replaces, + Skips: channel.Entries[entryIndex].Skips, + SkipRange: channel.Entries[entryIndex].SkipRange, + } + + // Add skip relationship to substitution.base + newEntry.Skips = append(newEntry.Skips, substitution.Base) + + // Add the new entry to the channel + channel.Entries = append(channel.Entries, newEntry) + + // Clear the original entry's replaces/skips/skipRange since they moved to the new entry + channel.Entries[entryIndex].Replaces = "" + channel.Entries[entryIndex].Skips = nil + channel.Entries[entryIndex].SkipRange = "" + } + + // Second pass: update all references to substitution.base to point to substitution.name + // Skip the newly created substitution entries (they are at the end) + originalEntryCount := len(channel.Entries) - len(entriesToSubstitute) + for j := 0; j < originalEntryCount; j++ { + entry := &channel.Entries[j] + + // If this entry replaces substitution.base, update it to replace substitution.name + if entry.Replaces == substitution.Base { + entry.Replaces = substituteBundle.Name + entry.Skips = append(entry.Skips, substitution.Base) + } else if entry.Skips != nil && slices.Contains(entry.Skips, substitution.Base) { + // If this entry skips substitution.base, update it to skip substitution.name + // and remove substitution.base from the skips list + entry.Skips = append(entry.Skips, substituteBundle.Name) + entry.Skips = slices.DeleteFunc(entry.Skips, func(skip string) bool { + return skip == substitution.Base + }) + } + } + } + + // Add the substitute bundle to the config (only once) + cfg.Bundles = append(cfg.Bundles, *substituteBundle) + + // now validate the resulting config + _, err = declcfg.ConvertToModel(*cfg) + if err != nil { + return fmt.Errorf("resulting config is not valid FBC: %v", err) + } + + return nil +} + +// FromReader reads FBC from a reader and generates a SubstitutesForTemplate from it +func FromReader(r io.Reader) (*SubstitutesTemplateData, error) { + var entries []*declcfg.Meta + if err := declcfg.WalkMetasReader(r, func(meta *declcfg.Meta, err error) error { + if err != nil { + return err + } + + entries = append(entries, meta) + return nil + }); err != nil { + return nil, err + } + + bt := &SubstitutesTemplateData{ + Schema: schema, + Entries: entries, + Substitutions: []Substitute{}, + } + + return bt, nil +} + +// Factory types + +type Factory struct{} + +// Factory functions + +func (f *Factory) CreateTemplate(renderBundle api.BundleRenderer) api.Template { + return new(renderBundle) +} + +func (f *Factory) Schema() string { + return schema +} diff --git a/vendor/github.com/operator-framework/operator-registry/cmd/opm/alpha/convert-template/convert.go b/vendor/github.com/operator-framework/operator-registry/cmd/opm/alpha/convert-template/convert.go index a5587c004b..4b5567e9ce 100644 --- a/vendor/github.com/operator-framework/operator-registry/cmd/opm/alpha/convert-template/convert.go +++ b/vendor/github.com/operator-framework/operator-registry/cmd/opm/alpha/convert-template/convert.go @@ -17,6 +17,7 @@ func NewCmd() *cobra.Command { } cmd.AddCommand( newBasicConvertCmd(), + newSubstitutesConvertCmd(), ) return cmd } @@ -49,6 +50,49 @@ If no argument is specified or is '-' input is assumed from STDIN. } converter.FbcReader = reader + converter.DestinationTemplateType = "basic" + err = converter.Convert() + if err != nil { + return fmt.Errorf("converting: %v", err) + } + + return nil + }, + } + cmd.Flags().StringVarP(&output, "output", "o", "json", "Output format (json|yaml)") + + return cmd +} + +func newSubstitutesConvertCmd() *cobra.Command { + var ( + converter converter.Converter + output string + ) + cmd := &cobra.Command{ + Use: "substitutes [ | -]", + Args: cobra.MaximumNArgs(1), + Short: "Generate a substitutes template from existing FBC", + Long: `Generate a substitutes template from existing FBC. + +This command outputs a substitutes catalog template to STDOUT from input FBC. +If no argument is specified or is '-' input is assumed from STDIN. +`, + RunE: func(c *cobra.Command, args []string) error { + switch output { + case "yaml", "json": + converter.OutputFormat = output + default: + log.Fatalf("invalid --output value %q, expected (json|yaml)", output) + } + + reader, name, err := util.OpenFileOrStdin(c, args) + if err != nil { + return fmt.Errorf("unable to open input: %q", name) + } + + converter.FbcReader = reader + converter.DestinationTemplateType = "substitutes" err = converter.Convert() if err != nil { return fmt.Errorf("converting: %v", err) diff --git a/vendor/github.com/operator-framework/operator-registry/cmd/opm/alpha/template/basic.go b/vendor/github.com/operator-framework/operator-registry/cmd/opm/alpha/template/basic.go deleted file mode 100644 index de6aed367c..0000000000 --- a/vendor/github.com/operator-framework/operator-registry/cmd/opm/alpha/template/basic.go +++ /dev/null @@ -1,103 +0,0 @@ -package template - -import ( - "context" - "io" - "log" - "os" - - "github.com/sirupsen/logrus" - "github.com/spf13/cobra" - - "github.com/operator-framework/operator-registry/alpha/action" - "github.com/operator-framework/operator-registry/alpha/action/migrations" - "github.com/operator-framework/operator-registry/alpha/declcfg" - "github.com/operator-framework/operator-registry/alpha/template/basic" - "github.com/operator-framework/operator-registry/cmd/opm/internal/util" -) - -func newBasicTemplateCmd() *cobra.Command { - var ( - template basic.Template - migrateLevel string - ) - cmd := &cobra.Command{ - Use: "basic basic-template-file", - Short: `Generate a file-based catalog from a single 'basic template' file -When FILE is '-' or not provided, the template is read from standard input`, - Long: `Generate a file-based catalog from a single 'basic template' file -When FILE is '-' or not provided, the template is read from standard input`, - Args: cobra.MaximumNArgs(1), - Run: func(cmd *cobra.Command, args []string) { - // Handle different input argument types - // When no arguments or "-" is passed to the command, - // assume input is coming from stdin - // Otherwise open the file passed to the command - data, source, err := util.OpenFileOrStdin(cmd, args) - if err != nil { - log.Fatalf("unable to open %q: %v", source, err) - } - defer data.Close() - - var write func(declcfg.DeclarativeConfig, io.Writer) error - output, err := cmd.Flags().GetString("output") - if err != nil { - log.Fatalf("unable to determine output format") - } - switch output { - case "yaml": - write = declcfg.WriteYAML - case "json": - write = declcfg.WriteJSON - default: - log.Fatalf("invalid --output value %q, expected (json|yaml)", output) - } - - // The bundle loading impl is somewhat verbose, even on the happy path, - // so discard all logrus default logger logs. Any important failures will be - // returned from template.Render and logged as fatal errors. - logrus.SetOutput(io.Discard) - - reg, err := util.CreateCLIRegistry(cmd) - if err != nil { - log.Fatalf("creating containerd registry: %v", err) - } - defer func() { - _ = reg.Destroy() - }() - - var m *migrations.Migrations - if migrateLevel != "" { - m, err = migrations.NewMigrations(migrateLevel) - if err != nil { - log.Fatal(err) - } - } - - template.RenderBundle = func(ctx context.Context, image string) (*declcfg.DeclarativeConfig, error) { - // populate registry, incl any flags from CLI, and enforce only rendering bundle images - r := action.Render{ - Refs: []string{image}, - Registry: reg, - AllowedRefMask: action.RefBundleImage, - Migrations: m, - } - return r.Run(ctx) - } - - // only taking first file argument - cfg, err := template.Render(cmd.Context(), data) - if err != nil { - log.Fatal(err) - } - - if err := write(*cfg, os.Stdout); err != nil { - log.Fatal(err) - } - }, - } - - cmd.Flags().StringVar(&migrateLevel, "migrate-level", "", "Name of the last migration to run (default: none)\n"+migrations.HelpText()) - - return cmd -} diff --git a/vendor/github.com/operator-framework/operator-registry/cmd/opm/alpha/template/cmd.go b/vendor/github.com/operator-framework/operator-registry/cmd/opm/alpha/template/cmd.go index 55ac55187b..710368cf9b 100644 --- a/vendor/github.com/operator-framework/operator-registry/cmd/opm/alpha/template/cmd.go +++ b/vendor/github.com/operator-framework/operator-registry/cmd/opm/alpha/template/cmd.go @@ -2,26 +2,39 @@ package template import ( "github.com/spf13/cobra" + + "github.com/operator-framework/operator-registry/alpha/action/migrations" + alphatemplate "github.com/operator-framework/operator-registry/alpha/template" ) func NewCmd() *cobra.Command { - var output string + var output, migrateLevel string + tr := alphatemplate.NewRegistry() runCmd := &cobra.Command{ - Use: "render-template", - Short: "Render a catalog template type", - Args: cobra.NoArgs, - } + Use: "render-template [TYPE] [FILE]", + Short: "Render a catalog template (auto-detects type from schema if TYPE not specified)", + Long: `Render a catalog template with optional type specification. - bc := newBasicTemplateCmd() - // bc.Hidden = true - runCmd.AddCommand(bc) +If TYPE is specified, it must be one of: ` + tr.HelpText() + ` +If TYPE is not specified, the template type will be auto-detected from the schema field in the input file. - sc := newSemverTemplateCmd() - // sc.Hidden = true - runCmd.AddCommand(sc) +When FILE is '-' or not provided, the template is read from standard input. +FILE must not match a supported TYPE name when TYPE is not provided, to avoid ambiguity. + +Examples: + opm alpha render-template basic template.yaml + opm alpha render-template semver template.yaml + opm alpha render-template template.yaml # auto-detect type + opm alpha render-template < template.yaml # auto-detect from stdin`, + Args: cobra.RangeArgs(0, 2), + RunE: func(cmd *cobra.Command, args []string) error { + return runRenderTemplate(cmd, args, tr) + }, + } - runCmd.PersistentFlags().StringVarP(&output, "output", "o", "json", "Output format (json|yaml)") + runCmd.PersistentFlags().StringVarP(&output, "output", "o", "json", "Output format (json|yaml|mermaid)") + runCmd.PersistentFlags().StringVar(&migrateLevel, "migrate-level", "", "Name of the last migration to run (default: none)\n"+migrations.HelpText()) return runCmd } diff --git a/vendor/github.com/operator-framework/operator-registry/cmd/opm/alpha/template/render.go b/vendor/github.com/operator-framework/operator-registry/cmd/opm/alpha/template/render.go new file mode 100644 index 0000000000..e7234e76bc --- /dev/null +++ b/vendor/github.com/operator-framework/operator-registry/cmd/opm/alpha/template/render.go @@ -0,0 +1,141 @@ +package template + +import ( + "context" + "fmt" + "io" + "os" + + "github.com/sirupsen/logrus" + "github.com/spf13/cobra" + + "github.com/operator-framework/operator-registry/alpha/action" + "github.com/operator-framework/operator-registry/alpha/action/migrations" + "github.com/operator-framework/operator-registry/alpha/declcfg" + alphatemplate "github.com/operator-framework/operator-registry/alpha/template" + "github.com/operator-framework/operator-registry/cmd/opm/internal/util" +) + +// runRenderTemplate handles the unified template rendering logic +func runRenderTemplate(cmd *cobra.Command, args []string, tr alphatemplate.Registry) error { + var templateType, filePath string + + // Parse arguments based on number provided + switch len(args) { + case 0: + // No arguments - read from stdin, auto-detect type + filePath = "-" + case 1: + // One argument - could be type or file + if tr.HasType(args[0]) { + // It's a template type, read from stdin + templateType = args[0] + filePath = "-" + } else { + // It's a file path, auto-detect type + filePath = args[0] + } + case 2: + // Two arguments - type and file + templateType = args[0] + filePath = args[1] + if !tr.HasType(templateType) { + return fmt.Errorf("invalid template type %q, must be one of: %s", templateType, tr.GetSupportedTypes()) + } + } + + // Handle different input argument types + data, source, err := util.OpenFileOrStdin(cmd, []string{filePath}) + if err != nil { + return fmt.Errorf("unable to open %q: %v", source, err) + } + defer data.Close() + + // Determine output format + var write func(declcfg.DeclarativeConfig, io.Writer) error + output, err := cmd.Flags().GetString("output") + if err != nil { + return fmt.Errorf("unable to determine output format") + } + switch output { + case "yaml": + write = declcfg.WriteYAML + case "json": + write = declcfg.WriteJSON + case "mermaid": + write = func(cfg declcfg.DeclarativeConfig, writer io.Writer) error { + mermaidWriter := declcfg.NewMermaidWriter() + return mermaidWriter.WriteChannels(cfg, writer) + } + default: + return fmt.Errorf("invalid --output value %q, expected (json|yaml|mermaid)", output) + } + + // The bundle loading impl is somewhat verbose, even on the happy path, + // so discard all logrus default logger logs. + logrus.SetOutput(io.Discard) + + // Create registry and registry client + reg, err := util.CreateCLIRegistry(cmd) + if err != nil { + return fmt.Errorf("creating containerd registry: %v", err) + } + defer func() { + _ = reg.Destroy() + }() + + // Handle migrations + var m *migrations.Migrations + migrateLevel, err := cmd.Flags().GetString("migrate-level") + if err == nil && migrateLevel != "" { + m, err = migrations.NewMigrations(migrateLevel) + if err != nil { + return err + } + } + + // Create render bundle function + renderBundle := alphatemplate.BundleRenderer(func(ctx context.Context, image string) (*declcfg.DeclarativeConfig, error) { + renderer := action.Render{ + Refs: []string{image}, + Registry: reg, + AllowedRefMask: action.RefBundleImage, + Migrations: m, + } + return renderer.Run(ctx) + }) + + var tmpl alphatemplate.Template + // a reader for the schema data. in the simple case, this is just 'data'. + // in the case where we auto-detect the schema, this is a reader that + // includes the consumed schema data plus any remainder. + var renderReader io.Reader + + if templateType != "" { + // Use specified template type + tmpl, err = tr.CreateTemplateByType(templateType, renderBundle) + if err != nil { + return fmt.Errorf("creating template by type: %v", err) + } + renderReader = data + } else { + // Auto-detect template type from schema + tmpl, renderReader, err = tr.CreateTemplateBySchema(data, renderBundle) + if err != nil { + return fmt.Errorf("auto-detecting template type: %v", err) + } + } + + // Render the template + cfg, err := tmpl.Render(cmd.Context(), renderReader) + if err != nil { + return fmt.Errorf("rendering template: %v", err) + } + + // Write output + if err := write(*cfg, os.Stdout); err != nil { + return fmt.Errorf("writing output: %v", err) + } + + return nil +} diff --git a/vendor/github.com/operator-framework/operator-registry/cmd/opm/alpha/template/semver.go b/vendor/github.com/operator-framework/operator-registry/cmd/opm/alpha/template/semver.go deleted file mode 100644 index eb07ab5684..0000000000 --- a/vendor/github.com/operator-framework/operator-registry/cmd/opm/alpha/template/semver.go +++ /dev/null @@ -1,114 +0,0 @@ -package template - -import ( - "context" - "fmt" - "io" - "log" - "os" - - "github.com/sirupsen/logrus" - "github.com/spf13/cobra" - - "github.com/operator-framework/operator-registry/alpha/action" - "github.com/operator-framework/operator-registry/alpha/action/migrations" - "github.com/operator-framework/operator-registry/alpha/declcfg" - "github.com/operator-framework/operator-registry/alpha/template/semver" - "github.com/operator-framework/operator-registry/cmd/opm/internal/util" -) - -func newSemverTemplateCmd() *cobra.Command { - var ( - migrateLevel string - ) - - cmd := &cobra.Command{ - Use: "semver [FILE]", - Short: `Generate a file-based catalog from a single 'semver template' file -When FILE is '-' or not provided, the template is read from standard input`, - Long: `Generate a file-based catalog from a single 'semver template' file -When FILE is '-' or not provided, the template is read from standard input`, - Args: cobra.MaximumNArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - // Handle different input argument types - // When no arguments or "-" is passed to the command, - // assume input is coming from stdin - // Otherwise open the file passed to the command - data, source, err := util.OpenFileOrStdin(cmd, args) - if err != nil { - return err - } - defer data.Close() - - var write func(declcfg.DeclarativeConfig, io.Writer) error - output, err := cmd.Flags().GetString("output") - if err != nil { - log.Fatalf("unable to determine output format") - } - switch output { - case "json": - write = declcfg.WriteJSON - case "yaml": - write = declcfg.WriteYAML - case "mermaid": - write = func(cfg declcfg.DeclarativeConfig, writer io.Writer) error { - mermaidWriter := declcfg.NewMermaidWriter() - return mermaidWriter.WriteChannels(cfg, writer) - } - default: - return fmt.Errorf("invalid output format %q", output) - } - - // The bundle loading impl is somewhat verbose, even on the happy path, - // so discard all logrus default logger logs. Any important failures will be - // returned from template.Render and logged as fatal errors. - logrus.SetOutput(io.Discard) - - reg, err := util.CreateCLIRegistry(cmd) - if err != nil { - log.Fatalf("creating containerd registry: %v", err) - } - defer func() { - _ = reg.Destroy() - }() - - var m *migrations.Migrations - if migrateLevel != "" { - m, err = migrations.NewMigrations(migrateLevel) - if err != nil { - log.Fatal(err) - } - } - - template := semver.Template{ - Data: data, - RenderBundle: func(ctx context.Context, ref string) (*declcfg.DeclarativeConfig, error) { - renderer := action.Render{ - Refs: []string{ref}, - Registry: reg, - AllowedRefMask: action.RefBundleImage, - Migrations: m, - } - return renderer.Run(ctx) - }, - } - - out, err := template.Render(cmd.Context()) - if err != nil { - log.Fatalf("semver %q: %v", source, err) - } - - if out != nil { - if err := write(*out, os.Stdout); err != nil { - log.Fatal(err) - } - } - - return nil - }, - } - - cmd.Flags().StringVar(&migrateLevel, "migrate-level", "", "Name of the last migration to run (default: none)\n"+migrations.HelpText()) - - return cmd -} diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/client/kubeclient.go b/vendor/github.com/operator-framework/operator-registry/pkg/client/kubeclient.go index 7b63e1c55d..c3f9df5f9e 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/client/kubeclient.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/client/kubeclient.go @@ -27,7 +27,7 @@ func NewKubeClient(kubeconfig string, logger *logrus.Logger) (*kubernetes.Client } if err != nil { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized err = fmt.Errorf("Cannot load config for REST client: %v", err) return nil, err } diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/containertools/dockerfilegenerator.go b/vendor/github.com/operator-framework/operator-registry/pkg/containertools/dockerfilegenerator.go index dd46ce22f5..79059b9ee7 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/containertools/dockerfilegenerator.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/containertools/dockerfilegenerator.go @@ -9,11 +9,9 @@ import ( const ( DefaultBinarySourceImage = "quay.io/operator-framework/opm:latest" - // nolint:stylecheck - DefaultDbLocation = "/database/index.db" - // nolint:stylecheck - DbLocationLabel = "operators.operatorframework.io.index.database.v1" - ConfigsLocationLabel = "operators.operatorframework.io.index.configs.v1" + DefaultDbLocation = "/database/index.db" + DbLocationLabel = "operators.operatorframework.io.index.database.v1" + ConfigsLocationLabel = "operators.operatorframework.io.index.configs.v1" ) // DockerfileGenerator defines functions to generate index dockerfiles diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/containertools/labelreader.go b/vendor/github.com/operator-framework/operator-registry/pkg/containertools/labelreader.go index 18ad46d981..6364f7a5b3 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/containertools/labelreader.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/containertools/labelreader.go @@ -71,6 +71,6 @@ func (r ImageLabelReader) GetLabelsFromImage(image string) (map[string]string, e return data[0].Labels, nil } - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return nil, fmt.Errorf("Unable to parse label data from container") } diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/lib/bundle/build.go b/vendor/github.com/operator-framework/operator-registry/pkg/lib/bundle/build.go index 5bfb517fc5..d7902b178c 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/lib/bundle/build.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/lib/bundle/build.go @@ -31,7 +31,7 @@ func ExecuteCommand(cmd *exec.Cmd) error { log.Debugf("Running %#v", cmd.Args) if err := cmd.Run(); err != nil { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return fmt.Errorf("Failed to exec %#v: %v", cmd.Args, err) } diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/lib/bundle/generate.go b/vendor/github.com/operator-framework/operator-registry/pkg/lib/bundle/generate.go index 72e781e0b1..7895126b6f 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/lib/bundle/generate.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/lib/bundle/generate.go @@ -222,7 +222,7 @@ func GetMediaType(directory string) (string, error) { fileWithPath := filepath.Join(directory, item.Name()) fileBlob, err := os.ReadFile(fileWithPath) if err != nil { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return "", fmt.Errorf("Unable to read file %s in bundle", fileWithPath) } @@ -234,7 +234,7 @@ func GetMediaType(directory string) (string, error) { } if len(files) == 0 { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return "", fmt.Errorf("The directory %s contains no yaml files", directory) } @@ -281,13 +281,13 @@ func ValidateAnnotations(existing, expected []byte) error { for label, item := range expectedAnnotations.Annotations { value, hasAnnotation := fileAnnotations.Annotations[label] if !hasAnnotation { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized errs = append(errs, fmt.Errorf("Missing field: %s", label)) continue } if item != value { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized errs = append(errs, fmt.Errorf("Expect field %q to have value %q instead of %q", label, item, value)) } diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/lib/bundle/validate.go b/vendor/github.com/operator-framework/operator-registry/pkg/lib/bundle/validate.go index 2ed9266039..4ec65d2382 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/lib/bundle/validate.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/lib/bundle/validate.go @@ -101,11 +101,11 @@ func (i imageValidator) ValidateBundleFormat(directory string) error { } if !manifestsFound { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized validationErrors = append(validationErrors, fmt.Errorf("Unable to locate manifests directory")) } if !metadataFound { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized validationErrors = append(validationErrors, fmt.Errorf("Unable to locate metadata directory")) } @@ -147,7 +147,7 @@ func (i imageValidator) ValidateBundleFormat(directory string) error { } if !annotationsFound { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized validationErrors = append(validationErrors, fmt.Errorf("Could not find annotations file")) } else { i.logger.Debug("Found annotations file") @@ -189,7 +189,7 @@ func validateAnnotations(mediaType string, fileAnnotations *AnnotationMetadata) for label, item := range annotations { val, ok := fileAnnotations.Annotations[label] if !ok && label != ChannelDefaultLabel { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized aErr := fmt.Errorf("Missing annotation %q", label) validationErrors = append(validationErrors, aErr) } @@ -197,31 +197,31 @@ func validateAnnotations(mediaType string, fileAnnotations *AnnotationMetadata) switch label { case MediatypeLabel: if item != val { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized aErr := fmt.Errorf("Expecting annotation %q to have value %q instead of %q", label, item, val) validationErrors = append(validationErrors, aErr) } case ManifestsLabel: if item != ManifestsDir { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized aErr := fmt.Errorf("Expecting annotation %q to have value %q instead of %q", label, ManifestsDir, val) validationErrors = append(validationErrors, aErr) } case MetadataDir: if item != MetadataLabel { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized aErr := fmt.Errorf("Expecting annotation %q to have value %q instead of %q", label, MetadataDir, val) validationErrors = append(validationErrors, aErr) } case ChannelsLabel: if val == "" { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized aErr := fmt.Errorf("Expecting annotation %q to have non-empty value", label) validationErrors = append(validationErrors, aErr) } case ChannelDefaultLabel: if ok && val == "" { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized aErr := fmt.Errorf("Expecting annotation %q to have non-empty value", label) validationErrors = append(validationErrors, aErr) } @@ -301,7 +301,7 @@ func (i imageValidator) ValidateBundleContent(manifestDir string) error { fileWithPath := filepath.Join(manifestDir, item.Name()) data, err := os.ReadFile(fileWithPath) if err != nil { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized validationErrors = append(validationErrors, fmt.Errorf("Unable to read file %s in supported types", fileWithPath)) continue } @@ -373,7 +373,7 @@ func (i imageValidator) ValidateBundleContent(manifestDir string) error { } } default: - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized validationErrors = append(validationErrors, fmt.Errorf("Unsupported api version of CRD: %s", gv)) } } else { diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/lib/indexer/indexer.go b/vendor/github.com/operator-framework/operator-registry/pkg/lib/indexer/indexer.go index e91aba091b..dd24289f23 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/lib/indexer/indexer.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/lib/indexer/indexer.go @@ -37,7 +37,7 @@ const ( concurrencyLimitForExport = 10 ) -// nolint:stylecheck +//nolint:staticcheck // ST1005: error message intentionally ends with punctuation (URL) var ErrFileBasedCatalogPrune = errors.New("`opm index prune` only supports sqlite-based catalogs. See https://github.com/redhat-openshift-ecosystem/community-operators-prod/issues/793 for instructions on pruning a plaintext files backed catalog.") // ImageIndexer is a struct implementation of the Indexer interface diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/lib/semver/semver.go b/vendor/github.com/operator-framework/operator-registry/pkg/lib/semver/semver.go index 60721cdaf6..037dab7bb4 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/lib/semver/semver.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/lib/semver/semver.go @@ -8,7 +8,6 @@ import ( // BuildIdCompare compares two versions and returns negative one if the first arg is less than the second arg, positive one if it is larger, and zero if they are equal. // This comparison follows typical semver precedence rules, with one addition: whenever two versions are equal with the exception of their build-ids, the build-ids are compared using prerelease precedence rules. Further, versions with no build-id are always less than versions with build-ids; e.g. 1.0.0 < 1.0.0+1. -// nolint:stylecheck func BuildIdCompare(b semver.Version, v semver.Version) (int, error) { if c := b.Compare(v); c != 0 { return c, nil diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/lib/validation/bundle.go b/vendor/github.com/operator-framework/operator-registry/pkg/lib/validation/bundle.go index a88b7b6302..ce990cd56c 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/lib/validation/bundle.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/lib/validation/bundle.go @@ -39,6 +39,18 @@ func validateBundle(bundle *registry.Bundle) errors.ManifestResult { result.Add(errors.ErrInvalidParse("error getting bundle CSV version", err)) return result } + release, err := csv.GetRelease() + if err != nil { + result.Add(errors.ErrInvalidParse("error getting bundle CSV release version", err)) + return result + } + substitutesFor := csv.GetSubstitutesFor() + if release != "" && substitutesFor != "" { + result.Add(errors.ErrInvalidBundle( + fmt.Sprintf("bundle %q cannot have both a release version (%q) and olm.substitutesFor annotation (%q)", bundle.Name, release, substitutesFor), + registry.DefinitionKey{}, + )) + } return result } diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/registry/bundle.go b/vendor/github.com/operator-framework/operator-registry/pkg/registry/bundle.go index 8b3be74b0e..792f9f0ddf 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/registry/bundle.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/registry/bundle.go @@ -42,6 +42,7 @@ type Bundle struct { Channels []string BundleImage string version string + release string csv *ClusterServiceVersion v1beta1crds []*apiextensionsv1beta1.CustomResourceDefinition v1crds []*apiextensionsv1.CustomResourceDefinition @@ -130,6 +131,23 @@ func (b *Bundle) Version() (string, error) { return b.version, err } +func (b *Bundle) Release() (string, error) { + if b.release != "" { + return b.release, nil + } + + var err error + if err = b.cache(); err != nil { + return "", err + } + + if b.csv != nil { + b.release, err = b.csv.GetRelease() + } + + return b.release, err +} + func (b *Bundle) SkipRange() (string, error) { if err := b.cache(); err != nil { return "", err diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/registry/bundlegraphloader.go b/vendor/github.com/operator-framework/operator-registry/pkg/registry/bundlegraphloader.go index 2854003a26..8003184ca6 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/registry/bundlegraphloader.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/registry/bundlegraphloader.go @@ -16,7 +16,7 @@ type BundleGraphLoader struct { func (g *BundleGraphLoader) AddBundleToGraph(bundle *Bundle, graph *Package, annotations *AnnotationsFile, skippatch bool) (*Package, error) { bundleVersion, err := bundle.Version() if err != nil { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return nil, fmt.Errorf("Unable to extract bundle version from bundle %s, can't insert in semver mode", bundle.BundleImage) } @@ -44,7 +44,7 @@ func (g *BundleGraphLoader) AddBundleToGraph(bundle *Bundle, graph *Package, ann if graph.DefaultChannel == "" { // Infer default channel from channel list if annotations.SelectDefaultChannel() == "" { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return nil, fmt.Errorf("Default channel is missing and can't be inferred") } graph.DefaultChannel = annotations.SelectDefaultChannel() @@ -85,7 +85,7 @@ func (g *BundleGraphLoader) AddBundleToGraph(bundle *Bundle, graph *Package, ann for node := range channelGraph.Nodes { nodeVersion, err := semver.Make(node.Version) if err != nil { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return nil, fmt.Errorf("Unable to parse existing bundle version stored in index %s %s %s", node.CsvName, node.Version, node.BundlePath) } diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/registry/channelupdateoptions.go b/vendor/github.com/operator-framework/operator-registry/pkg/registry/channelupdateoptions.go index d45bd414e1..48ba90f71b 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/registry/channelupdateoptions.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/registry/channelupdateoptions.go @@ -22,7 +22,7 @@ func GetModeFromString(mode string) (Mode, error) { case "semver-skippatch": return SkipPatchMode, nil default: - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return -1, fmt.Errorf("Invalid channel update mode %s specified", mode) } } diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/registry/csv.go b/vendor/github.com/operator-framework/operator-registry/pkg/registry/csv.go index 4a3d8ceaf7..fec3d2907b 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/registry/csv.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/registry/csv.go @@ -58,6 +58,9 @@ const ( // expected to be semver and parseable by blang/semver/v4 version = "version" + // The yaml attribute that specifies the release version of the ClusterServiceVersion + release = "release" + // The yaml attribute that specifies the related images of the ClusterServiceVersion relatedImages = "relatedImages" @@ -181,6 +184,28 @@ func (csv *ClusterServiceVersion) GetVersion() (string, error) { return v, nil } +// GetRelease returns the release of the CSV +// +// If not defined, the function returns an empty string. +func (csv *ClusterServiceVersion) GetRelease() (string, error) { + var objmap map[string]*json.RawMessage + if err := json.Unmarshal(csv.Spec, &objmap); err != nil { + return "", err + } + + rawValue, ok := objmap[release] + if !ok || rawValue == nil { + return "", nil + } + + var r string + if err := json.Unmarshal(*rawValue, &r); err != nil { + return "", err + } + + return r, nil +} + // GetSkipRange returns the skiprange of the CSV // // If not defined, the function returns an empty string. @@ -261,7 +286,6 @@ func (csv *ClusterServiceVersion) GetCustomResourceDefintions() ([]*DefinitionKe // // If owned or required is not defined in the spec then an empty list is // returned respectively. -// nolint:stylecheck func (csv *ClusterServiceVersion) GetApiServiceDefinitions() ([]*DefinitionKey, []*DefinitionKey, error) { var objmap map[string]*json.RawMessage diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/registry/empty.go b/vendor/github.com/operator-framework/operator-registry/pkg/registry/empty.go index dc34f06dc7..7b0d780468 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/registry/empty.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/registry/empty.go @@ -68,7 +68,6 @@ func (EmptyQuery) GetImagesForBundle(ctx context.Context, bundleName string) ([] return nil, errors.New("empty querier: cannot get image list") } -// nolint:stylecheck func (EmptyQuery) GetApisForEntry(ctx context.Context, entryId int64) ([]*api.GroupVersionKind, []*api.GroupVersionKind, error) { return nil, nil, errors.New("empty querier: cannot apis") } diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/registry/parse.go b/vendor/github.com/operator-framework/operator-registry/pkg/registry/parse.go index 24445ffe08..2f5a913553 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/registry/parse.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/registry/parse.go @@ -157,7 +157,7 @@ func (b *bundleParser) addMetadata(metadata fs.FS, bundle *Bundle) error { bundle.Package = af.Annotations.PackageName bundle.Channels = af.GetChannels() } else { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return fmt.Errorf("Could not find annotations file") } @@ -197,22 +197,35 @@ func (b *bundleParser) derivedProperties(bundle *Bundle) ([]Property, error) { } } + // nolint:nestif + // existing code triggering nested complexity, but at least will not make worse with release processing if bundle.Annotations != nil && bundle.Annotations.PackageName != "" { pkg := bundle.Annotations.PackageName version, err := bundle.Version() if err != nil { return nil, err } + release, err := bundle.Release() + if err != nil { + return nil, err + } + if release == "" && csv.GetSubstitutesFor() != "" { + version, release, err = extractReleaseVersionFromBuildMetadata(version) + if err != nil { + return nil, fmt.Errorf("bundle %q error: %v", bundle.Name, err) + } + } value, err := json.Marshal(PackageProperty{ PackageName: pkg, Version: version, + Release: release, }) if err != nil { return nil, fmt.Errorf("failed to marshal package property: %s", err) } - // Annotations file takes precedent over CSV annotations + // Annotations file takes precedence over CSV annotations derived = append([]Property{{Type: PackageType, Value: value}}, derived...) } @@ -253,3 +266,21 @@ func propertySet(properties []Property) []Property { return set } + +func extractReleaseVersionFromBuildMetadata(substitutesFor string) (string, string, error) { + var version, release string + // if the bundle expresses no release version, but + // includes the substitutesFor annotation, then we + // interpret any build metadata in the version as + // the release version. + // failure to parse build metadata under these conditions is fatal, + // though validation is later + parts := strings.SplitN(substitutesFor, "+", 2) + if len(parts) == 2 { + version = parts[0] + release = parts[1] + } else { + return "", "", fmt.Errorf("no release version expressed as build metadata: %q", substitutesFor) + } + return version, release, nil +} diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/registry/populator.go b/vendor/github.com/operator-framework/operator-registry/pkg/registry/populator.go index ea86a163e5..f2ab730f82 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/registry/populator.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/registry/populator.go @@ -181,7 +181,7 @@ func (i *DirectoryPopulator) loadManifests(imagesToAdd []*ImageInput, mode Mode) } } default: - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return fmt.Errorf("Unsupported update mode") } diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/registry/registry_to_model.go b/vendor/github.com/operator-framework/operator-registry/pkg/registry/registry_to_model.go index 947814751d..d0491f6df7 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/registry/registry_to_model.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/registry/registry_to_model.go @@ -29,7 +29,7 @@ func ObjectsAndPropertiesFromBundle(b *Bundle) ([]string, []property.Property, e if err := json.Unmarshal(p.Value, &v); err != nil { return nil, nil, property.ParseError{Idx: i, Typ: p.Type, Err: err} } - p := property.MustBuildPackage(v.PackageName, v.Version) + p := property.MustBuildPackageRelease(v.PackageName, v.Version, v.Release) packageProvidedProperty = &p default: otherProps = append(otherProps, property.Property{ @@ -68,6 +68,11 @@ func ObjectsAndPropertiesFromBundle(b *Bundle) ([]string, []property.Property, e return nil, nil, fmt.Errorf("get version: %v", err) } + release, err := b.Release() + if err != nil { + return nil, nil, fmt.Errorf("get release: %v", err) + } + providedApis, err := b.ProvidedAPIs() if err != nil { return nil, nil, fmt.Errorf("get provided apis: %v", err) @@ -105,7 +110,7 @@ func ObjectsAndPropertiesFromBundle(b *Bundle) ([]string, []property.Property, e } if packageProvidedProperty == nil { - p := property.MustBuildPackage(b.Package, version) + p := property.MustBuildPackageRelease(b.Package, version, release) packageProvidedProperty = &p } props = append(props, *packageProvidedProperty) diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/registry/types.go b/vendor/github.com/operator-framework/operator-registry/pkg/registry/types.go index 4105aaa3d6..66dc242e6a 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/registry/types.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/registry/types.go @@ -256,6 +256,9 @@ type PackageProperty struct { // The version of package in semver format Version string `json:"version" yaml:"version"` + + // The release version of the package in semver pre-release format + Release string `json:"release,omitzero" yaml:"release,omitzero"` } type DeprecatedProperty struct { @@ -286,7 +289,7 @@ func (gd *GVKDependency) Validate() []error { func (ld *LabelDependency) Validate() []error { errs := []error{} if *ld == (LabelDependency{}) { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized errs = append(errs, fmt.Errorf("Label information is missing")) } return errs @@ -296,16 +299,14 @@ func (ld *LabelDependency) Validate() []error { func (pd *PackageDependency) Validate() []error { errs := []error{} if pd.PackageName == "" { - // nolint:stylecheck errs = append(errs, fmt.Errorf("Package name is empty")) } if pd.Version == "" { - // nolint:stylecheck errs = append(errs, fmt.Errorf("Package version is empty")) } else { _, err := semver.ParseRange(pd.Version) if err != nil { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized errs = append(errs, fmt.Errorf("Invalid semver format version")) } } @@ -316,18 +317,18 @@ func (pd *PackageDependency) Validate() []error { func (cc *CelConstraint) Validate() []error { errs := []error{} if cc.Cel == nil { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized errs = append(errs, fmt.Errorf("The CEL field is missing")) } else { if cc.Cel.Rule == "" { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized errs = append(errs, fmt.Errorf("The CEL expression is missing")) return errs } validator := constraints.NewCelEnvironment() _, err := validator.Validate(cc.Cel.Rule) if err != nil { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized errs = append(errs, fmt.Errorf("Invalid CEL expression: %s", err.Error())) } } diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/server/server.go b/vendor/github.com/operator-framework/operator-registry/pkg/server/server.go index 64b87ce70e..56b09e2258 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/server/server.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/server/server.go @@ -1,7 +1,7 @@ package server import ( - "golang.org/x/net/context" + "context" "github.com/operator-framework/operator-registry/pkg/api" "github.com/operator-framework/operator-registry/pkg/registry" diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/db_options.go b/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/db_options.go index 5d43615f1d..e09bfbc036 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/db_options.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/db_options.go @@ -4,14 +4,12 @@ import ( "database/sql" ) -// nolint:stylecheck type DbOptions struct { // MigratorBuilder is a function that returns a migrator instance MigratorBuilder func(*sql.DB) (Migrator, error) EnableAlpha bool } -// nolint:stylecheck type DbOption func(*DbOptions) func defaultDBOptions() *DbOptions { diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/load.go b/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/load.go index 9592b5f54b..190144eaf2 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/load.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/load.go @@ -123,7 +123,7 @@ func (s *sqlLoader) addOperatorBundle(tx *sql.Tx, bundle *registry.Bundle) error } if substitutesFor != "" && !s.enableAlpha { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message intentionally ends with punctuation return fmt.Errorf("SubstitutesFor is an alpha-only feature. You must enable alpha features with the flag --enable-alpha in order to use this feature.") } @@ -508,7 +508,7 @@ func (s *sqlLoader) AddPackageChannelsFromGraph(graph *registry.Package) error { // If the number of nodes is 5 and the startDepth is 3, the expected depth is 7 (3, 4, 5, 6, 7) expectedDepth := len(channel.Nodes) + startDepth - 1 if expectedDepth != depth { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized err := fmt.Errorf("Invalid graph: some (non-bottom) nodes defined in the graph were not mentioned as replacements of any node (%d != %d)", expectedDepth, depth) errs = append(errs, err) } @@ -720,7 +720,7 @@ func (s *sqlLoader) addPackageChannels(tx *sql.Tx, manifest registry.PackageMani // If we find 'replaces' in the circuit list then we've seen it already, break out if _, ok := replaceCycle[replaces]; ok { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized errs = append(errs, fmt.Errorf("Cycle detected, %s replaces %s", channelEntryCSVName, replaces)) break } @@ -736,7 +736,7 @@ func (s *sqlLoader) addPackageChannels(tx *sql.Tx, manifest registry.PackageMani break } if _, _, _, err := s.getBundleSkipsReplacesVersion(tx, replaces); err != nil { - // nolint:stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized errs = append(errs, fmt.Errorf("Invalid bundle %s, replaces nonexistent bundle %s", c.CurrentCSVName, replaces)) break } diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/migrations/003_required_apis.go b/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/migrations/003_required_apis.go index f25d285ab7..114e755a37 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/migrations/003_required_apis.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/migrations/003_required_apis.go @@ -9,7 +9,6 @@ import ( "github.com/sirupsen/logrus" ) -// nolint:stylecheck const RequiredApiMigrationKey = 3 // Register this migration diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/migrations/migrations.go b/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/migrations/migrations.go index 475bb7cd69..b9bb60fbaf 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/migrations/migrations.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/migrations/migrations.go @@ -8,7 +8,6 @@ import ( ) type Migration struct { - // nolint:stylecheck Id int Up func(context.Context, *sql.Tx) error Down func(context.Context, *sql.Tx) error diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/query.go b/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/query.go index 7a42981f45..47c4fe7742 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/query.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/query.go @@ -63,7 +63,6 @@ func NewSQLLiteQuerier(dbFilename string, opts ...SQLiteQuerierOption) (*SQLQuer return NewSQLLiteQuerierFromDb(db, opts...), nil } -// nolint:stylecheck func NewSQLLiteQuerierFromDb(db *sql.DB, opts ...SQLiteQuerierOption) *SQLQuerier { return NewSQLLiteQuerierFromDBQuerier(dbQuerierAdapter{db}, opts...) } @@ -810,7 +809,7 @@ func (s *SQLQuerier) GetBundlePathsForPackage(ctx context.Context, pkgName strin return nil, err } if imgName.Valid && imgName.String == "" { - // nolint: stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return nil, fmt.Errorf("Index malformed: cannot find paths to bundle images") } images = append(images, imgName.String) @@ -846,7 +845,7 @@ func (s *SQLQuerier) GetBundlesForPackage(ctx context.Context, pkgName string) ( key.Version = version.String } if key.IsEmpty() { - // nolint: stylecheck + //nolint:staticcheck // ST1005: error message is intentionally capitalized return nil, fmt.Errorf("Index malformed: cannot find identifier for bundle in package %s", pkgName) } bundles[key] = struct{}{} diff --git a/vendor/github.com/sigstore/fulcio/pkg/certificate/extensions.go b/vendor/github.com/sigstore/fulcio/pkg/certificate/extensions.go index 584aac971f..4ed41e31a1 100644 --- a/vendor/github.com/sigstore/fulcio/pkg/certificate/extensions.go +++ b/vendor/github.com/sigstore/fulcio/pkg/certificate/extensions.go @@ -53,6 +53,7 @@ var ( OIDBuildTrigger = asn1.ObjectIdentifier{1, 3, 6, 1, 4, 1, 57264, 1, 20} OIDRunInvocationURI = asn1.ObjectIdentifier{1, 3, 6, 1, 4, 1, 57264, 1, 21} OIDSourceRepositoryVisibilityAtSigning = asn1.ObjectIdentifier{1, 3, 6, 1, 4, 1, 57264, 1, 22} + OIDDeploymentEnvironment = asn1.ObjectIdentifier{1, 3, 6, 1, 4, 1, 57264, 1, 23} ) // Extensions contains all custom x509 extensions defined by Fulcio @@ -132,6 +133,9 @@ type Extensions struct { // Source repository visibility at the time of signing the certificate. SourceRepositoryVisibilityAtSigning string `json:"SourceRepositoryVisibilityAtSigning,omitempty" yaml:"source-repository-visibility-at-signing,omitempty"` // 1.3.6.1.4.1.57264.1.22 + + // Deployment target for a workflow or job + DeploymentEnvironment string `json:"DeploymentEnvironment,omitempty" yaml:"deployment-environment,omitempty"` // 1.3.6.1.4.1.57264.1.23 } func (e Extensions) Render() ([]pkix.Extension, error) { @@ -334,6 +338,16 @@ func (e Extensions) Render() ([]pkix.Extension, error) { Value: val, }) } + if e.DeploymentEnvironment != "" { + val, err := asn1.MarshalWithParams(e.DeploymentEnvironment, "utf8") + if err != nil { + return nil, err + } + exts = append(exts, pkix.Extension{ + Id: OIDDeploymentEnvironment, + Value: val, + }) + } return exts, nil } @@ -417,6 +431,10 @@ func ParseExtensions(ext []pkix.Extension) (Extensions, error) { if err := ParseDERString(e.Value, &out.SourceRepositoryVisibilityAtSigning); err != nil { return Extensions{}, err } + case e.Id.Equal(OIDDeploymentEnvironment): + if err := ParseDERString(e.Value, &out.DeploymentEnvironment); err != nil { + return Extensions{}, err + } } } diff --git a/vendor/github.com/sigstore/sigstore/pkg/cryptoutils/publickey.go b/vendor/github.com/sigstore/sigstore/pkg/cryptoutils/publickey.go index 1e2fa031be..63e789a8d2 100644 --- a/vendor/github.com/sigstore/sigstore/pkg/cryptoutils/publickey.go +++ b/vendor/github.com/sigstore/sigstore/pkg/cryptoutils/publickey.go @@ -16,7 +16,6 @@ package cryptoutils import ( - "context" "crypto" "crypto/ecdsa" "crypto/ed25519" @@ -29,8 +28,6 @@ import ( "encoding/pem" "errors" "fmt" - - "github.com/letsencrypt/boulder/goodkey" ) const ( @@ -133,54 +130,3 @@ func genErrMsg(first, second crypto.PublicKey, keyType string) string { } return fmt.Sprintf("%s (%s, %s)", msg, hex.EncodeToString(firstSKID), hex.EncodeToString(secondSKID)) } - -// ValidatePubKey validates the parameters of an RSA, ECDSA, or ED25519 public key. -func ValidatePubKey(pub crypto.PublicKey) error { - // goodkey policy enforces: - // * RSA - // * Size of key: 2048 <= size <= 4096, size % 8 = 0 - // * Exponent E = 65537 (Default exponent for OpenSSL and Golang) - // * Small primes check for modulus - // * Weak keys generated by Infineon hardware (see https://crocs.fi.muni.cz/public/papers/rsa_ccs17) - // * Key is easily factored with Fermat's factorization method - // * EC - // * Public key Q is not the identity element (Ø) - // * Public key Q's x and y are within [0, p-1] - // * Public key Q is on the curve - // * Public key Q's order matches the subgroups (nQ = Ø) - allowedKeys := &goodkey.AllowedKeys{ - RSA2048: true, - RSA3072: true, - RSA4096: true, - ECDSAP256: true, - ECDSAP384: true, - ECDSAP521: true, - } - cfg := &goodkey.Config{ - FermatRounds: 100, - AllowedKeys: allowedKeys, - } - p, err := goodkey.NewPolicy(cfg, nil) - if err != nil { - // Should not occur, only chances to return errors are if fermat rounds - // are <0 or when loading blocked/weak keys from disk (not used here) - return errors.New("unable to initialize key policy") - } - - switch pk := pub.(type) { - case *rsa.PublicKey: - // ctx is unused - return p.GoodKey(context.Background(), pub) - case *ecdsa.PublicKey: - // ctx is unused - return p.GoodKey(context.Background(), pub) - case ed25519.PublicKey: - return validateEd25519Key(pk) - } - return errors.New("unsupported public key type") -} - -// No validations currently, ED25519 supports only one key size. -func validateEd25519Key(_ ed25519.PublicKey) error { - return nil -} diff --git a/vendor/github.com/sigstore/sigstore/pkg/cryptoutils/safestring.go b/vendor/github.com/sigstore/sigstore/pkg/cryptoutils/safestring.go new file mode 100644 index 0000000000..cdc69aec37 --- /dev/null +++ b/vendor/github.com/sigstore/sigstore/pkg/cryptoutils/safestring.go @@ -0,0 +1,34 @@ +// +// Copyright 2025 The Sigstore 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 cryptoutils + +import ( + "crypto/rand" + "encoding/base64" +) + +// GenerateRandomURLSafeString generates a cryptographically secure random +// URL-safe string with the specified number of bits of entropy. +func GenerateRandomURLSafeString(entropyLength uint) string { + if entropyLength == 0 { + return "" + } + // Round up to the nearest byte to ensure minimum entropy is met + entropyBytes := (entropyLength + 7) / 8 + b := make([]byte, entropyBytes) + _, _ = rand.Read(b) + return base64.RawURLEncoding.EncodeToString(b) +} diff --git a/vendor/github.com/sigstore/sigstore/pkg/cryptoutils/sans.go b/vendor/github.com/sigstore/sigstore/pkg/cryptoutils/sans.go index d237ef58ea..abcea306a0 100644 --- a/vendor/github.com/sigstore/sigstore/pkg/cryptoutils/sans.go +++ b/vendor/github.com/sigstore/sigstore/pkg/cryptoutils/sans.go @@ -132,6 +132,9 @@ func UnmarshalOtherNameSAN(exts []pkix.Extension) (string, error) { // and OtherName SANs func GetSubjectAlternateNames(cert *x509.Certificate) []string { sans := []string{} + if cert == nil { + return sans + } sans = append(sans, cert.DNSNames...) sans = append(sans, cert.EmailAddresses...) for _, ip := range cert.IPAddresses { diff --git a/vendor/github.com/sigstore/sigstore/pkg/signature/message.go b/vendor/github.com/sigstore/sigstore/pkg/signature/message.go index 6f8449eea9..44771ff3da 100644 --- a/vendor/github.com/sigstore/sigstore/pkg/signature/message.go +++ b/vendor/github.com/sigstore/sigstore/pkg/signature/message.go @@ -55,10 +55,10 @@ func ComputeDigestForSigning(rawMessage io.Reader, defaultHashFunc crypto.Hash, if hashedWith != crypto.Hash(0) && len(digest) != hashedWith.Size() { err = errors.New("unexpected length of digest for hash function specified") } - return + return digest, hashedWith, err } digest, err = hashMessage(rawMessage, hashedWith) - return + return digest, hashedWith, err } // ComputeDigestForVerifying calculates the digest value for the specified message using a hash function selected by the following process: @@ -81,10 +81,10 @@ func ComputeDigestForVerifying(rawMessage io.Reader, defaultHashFunc crypto.Hash if hashedWith != crypto.Hash(0) && len(digest) != hashedWith.Size() { err = errors.New("unexpected length of digest for hash function specified") } - return + return digest, hashedWith, err } digest, err = hashMessage(rawMessage, hashedWith) - return + return digest, hashedWith, err } func hashMessage(rawMessage io.Reader, hashFunc crypto.Hash) ([]byte, error) { diff --git a/vendor/github.com/sigstore/sigstore/pkg/signature/signer.go b/vendor/github.com/sigstore/sigstore/pkg/signature/signer.go index 1122989ff6..50f432798d 100644 --- a/vendor/github.com/sigstore/sigstore/pkg/signature/signer.go +++ b/vendor/github.com/sigstore/sigstore/pkg/signature/signer.go @@ -31,9 +31,6 @@ import ( "github.com/sigstore/sigstore/pkg/cryptoutils" "github.com/sigstore/sigstore/pkg/signature/options" - - // these ensure we have the implementations loaded - _ "golang.org/x/crypto/sha3" ) // Signer creates digital signatures over a message using a specified key pair diff --git a/vendor/github.com/titanous/rocacheck/LICENSE b/vendor/github.com/titanous/rocacheck/LICENSE deleted file mode 100644 index 7bdce481fa..0000000000 --- a/vendor/github.com/titanous/rocacheck/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -MIT License - -Copyright (c) 2017, Jonathan Rudenberg -Copyright (c) 2017, CRoCS, EnigmaBridge Ltd. - -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/titanous/rocacheck/README.md b/vendor/github.com/titanous/rocacheck/README.md deleted file mode 100644 index b8e765ea9c..0000000000 --- a/vendor/github.com/titanous/rocacheck/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# rocacheck [![GoDoc](https://godoc.org/github.com/titanous/rocacheck?status.svg)](https://godoc.org/github.com/titanous/rocacheck) - -Package rocacheck is a Go implementation of the [key fingerprint -algorithm](https://github.com/crocs-muni/roca) that checks if an RSA key was -generated by broken Infineon code and is vulnerable to factorization via the -[Return of Coppersmith's Attack -(ROCA)](https://crocs.fi.muni.cz/public/papers/rsa_ccs17) / CVE-2017-15361. diff --git a/vendor/github.com/titanous/rocacheck/rocacheck.go b/vendor/github.com/titanous/rocacheck/rocacheck.go deleted file mode 100644 index e813579bb8..0000000000 --- a/vendor/github.com/titanous/rocacheck/rocacheck.go +++ /dev/null @@ -1,52 +0,0 @@ -// Package rocacheck checks if a key was generated by broken Infineon code and -// is vulnerable to factorization via the Return of Coppersmith's Attack (ROCA) -// / CVE-2017-15361. -package rocacheck - -import ( - "crypto/rsa" - "math/big" -) - -type test struct { - Prime *big.Int - Fingerprints map[int64]struct{} -} - -var tests = make([]test, 17) - -func init() { - bigOne := big.NewInt(1) - n := &big.Int{} - // relations table from https://github.com/crocs-muni/roca/pull/40 - for i, r := range [][2]int64{ - {2, 11}, {6, 13}, {8, 17}, {9, 19}, {3, 37}, {26, 53}, {20, 61}, - {35, 71}, {24, 73}, {13, 79}, {6, 97}, {51, 103}, {53, 107}, - {54, 109}, {42, 127}, {50, 151}, {78, 157}, - } { - fps := make(map[int64]struct{}) - bp := big.NewInt(r[1]) - br := big.NewInt(r[0]) - for j := int64(0); j < r[1]; j++ { - if n.Exp(big.NewInt(j), br, bp).Cmp(bigOne) == 0 { - fps[j] = struct{}{} - } - } - tests[i] = test{ - Prime: big.NewInt(r[1]), - Fingerprints: fps, - } - } -} - -// IsWeak returns true if a RSA public key is vulnerable to Return of -// Coppersmith's Attack (ROCA). -func IsWeak(k *rsa.PublicKey) bool { - tmp := &big.Int{} - for _, t := range tests { - if _, ok := t.Fingerprints[tmp.Mod(k.N, t.Prime).Int64()]; !ok { - return false - } - } - return true -} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/LICENSE b/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/LICENSE index 261eeb9e9f..f1aee0f110 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/LICENSE +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/LICENSE @@ -199,3 +199,33 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +-------------------------------------------------------------------------------- + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/config.go b/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/config.go index 296407f38e..e65c4907c9 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/config.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/config.go @@ -4,13 +4,14 @@ package otelgrpc // import "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" import ( - "google.golang.org/grpc/stats" + "context" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/propagation" "go.opentelemetry.io/otel/trace" + "google.golang.org/grpc/stats" ) // ScopeName is the instrumentation scope name. @@ -39,6 +40,9 @@ type config struct { SpanAttributes []attribute.KeyValue MetricAttributes []attribute.KeyValue + PublicEndpoint bool + PublicEndpointFn func(ctx context.Context, info *stats.RPCTagInfo) bool + ReceivedEvent bool SentEvent bool } @@ -61,6 +65,38 @@ func newConfig(opts []Option) *config { return c } +type publicEndpointOption struct{ p bool } + +func (o publicEndpointOption) apply(c *config) { + c.PublicEndpoint = o.p +} + +// 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 publicEndpointOption{p: true} +} + +type publicEndpointFnOption struct { + fn func(context.Context, *stats.RPCTagInfo) bool +} + +func (o publicEndpointFnOption) apply(c *config) { + if o.fn != nil { + c.PublicEndpointFn = o.fn + } +} + +// 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(context.Context, *stats.RPCTagInfo) bool) Option { + return publicEndpointFnOption{fn: fn} +} + type propagatorsOption struct{ p propagation.TextMapPropagator } func (o propagatorsOption) apply(c *config) { @@ -178,6 +214,8 @@ func (o spanStartOption) apply(c *config) { // WithSpanOptions configures an additional set of // trace.SpanOptions, which are applied to each new span. +// +// Deprecated: It is only used by the deprecated interceptor, and is unused by [NewClientHandler] and [NewServerHandler]. func WithSpanOptions(opts ...trace.SpanStartOption) Option { return spanStartOption{opts} } diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/interceptor.go b/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/interceptor.go index f63513d456..99f88ec3b9 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/interceptor.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/interceptor.go @@ -4,318 +4,18 @@ package otelgrpc // import "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" // gRPC tracing middleware -// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/rpc.md +// https://opentelemetry.io/docs/specs/semconv/rpc/ import ( - "context" - "errors" - "io" "net" "strconv" - "google.golang.org/grpc" - grpc_codes "google.golang.org/grpc/codes" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/peer" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" - - "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/internal" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" - semconv "go.opentelemetry.io/otel/semconv/v1.30.0" - "go.opentelemetry.io/otel/trace" -) - -type messageType attribute.KeyValue - -// Event adds an event of the messageType to the span associated with the -// passed context with a message id. -func (m messageType) Event(ctx context.Context, id int, _ interface{}) { - span := trace.SpanFromContext(ctx) - if !span.IsRecording() { - return - } - span.AddEvent("message", trace.WithAttributes( - attribute.KeyValue(m), - semconv.RPCMessageIDKey.Int(id), - )) -} - -var ( - messageSent = messageType(semconv.RPCMessageTypeSent) - messageReceived = messageType(semconv.RPCMessageTypeReceived) + semconv "go.opentelemetry.io/otel/semconv/v1.37.0" + grpc_codes "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" ) -// clientStream wraps around the embedded grpc.ClientStream, and intercepts the RecvMsg and -// SendMsg method call. -type clientStream struct { - grpc.ClientStream - desc *grpc.StreamDesc - - span trace.Span - - receivedEvent bool - sentEvent bool - - receivedMessageID int - sentMessageID int -} - -var _ = proto.Marshal - -func (w *clientStream) RecvMsg(m interface{}) error { - err := w.ClientStream.RecvMsg(m) - - if err == nil && !w.desc.ServerStreams { - w.endSpan(nil) - } else if errors.Is(err, io.EOF) { - w.endSpan(nil) - } else if err != nil { - w.endSpan(err) - } else { - w.receivedMessageID++ - - if w.receivedEvent { - messageReceived.Event(w.Context(), w.receivedMessageID, m) - } - } - - return err -} - -func (w *clientStream) SendMsg(m interface{}) error { - err := w.ClientStream.SendMsg(m) - - w.sentMessageID++ - - if w.sentEvent { - messageSent.Event(w.Context(), w.sentMessageID, m) - } - - if err != nil { - w.endSpan(err) - } - - return err -} - -func (w *clientStream) Header() (metadata.MD, error) { - md, err := w.ClientStream.Header() - if err != nil { - w.endSpan(err) - } - - return md, err -} - -func (w *clientStream) CloseSend() error { - err := w.ClientStream.CloseSend() - if err != nil { - w.endSpan(err) - } - - return err -} - -func wrapClientStream(s grpc.ClientStream, desc *grpc.StreamDesc, span trace.Span, cfg *config) *clientStream { - return &clientStream{ - ClientStream: s, - span: span, - desc: desc, - receivedEvent: cfg.ReceivedEvent, - sentEvent: cfg.SentEvent, - } -} - -func (w *clientStream) endSpan(err error) { - if err != nil { - s, _ := status.FromError(err) - w.span.SetStatus(codes.Error, s.Message()) - w.span.SetAttributes(statusCodeAttr(s.Code())) - } else { - w.span.SetAttributes(statusCodeAttr(grpc_codes.OK)) - } - - w.span.End() -} - -// StreamClientInterceptor returns a grpc.StreamClientInterceptor suitable -// for use in a grpc.NewClient call. -// -// Deprecated: Use [NewClientHandler] instead. -func StreamClientInterceptor(opts ...Option) grpc.StreamClientInterceptor { - cfg := newConfig(opts) - tracer := cfg.TracerProvider.Tracer( - ScopeName, - trace.WithInstrumentationVersion(Version()), - ) - - return func( - ctx context.Context, - desc *grpc.StreamDesc, - cc *grpc.ClientConn, - method string, - streamer grpc.Streamer, - callOpts ...grpc.CallOption, - ) (grpc.ClientStream, error) { - i := &InterceptorInfo{ - Method: method, - Type: StreamClient, - } - if cfg.InterceptorFilter != nil && !cfg.InterceptorFilter(i) { - return streamer(ctx, desc, cc, method, callOpts...) - } - - name, attr := telemetryAttributes(method, cc.Target()) - - startOpts := append([]trace.SpanStartOption{ - trace.WithSpanKind(trace.SpanKindClient), - trace.WithAttributes(attr...), - }, - cfg.SpanStartOptions..., - ) - - ctx, span := tracer.Start( - ctx, - name, - startOpts..., - ) - - ctx = inject(ctx, cfg.Propagators) - - s, err := streamer(ctx, desc, cc, method, callOpts...) - if err != nil { - grpcStatus, _ := status.FromError(err) - span.SetStatus(codes.Error, grpcStatus.Message()) - span.SetAttributes(statusCodeAttr(grpcStatus.Code())) - span.End() - return s, err - } - stream := wrapClientStream(s, desc, span, cfg) - return stream, nil - } -} - -// serverStream wraps around the embedded grpc.ServerStream, and intercepts the RecvMsg and -// SendMsg method call. -type serverStream struct { - grpc.ServerStream - ctx context.Context - - receivedMessageID int - sentMessageID int - - receivedEvent bool - sentEvent bool -} - -func (w *serverStream) Context() context.Context { - return w.ctx -} - -func (w *serverStream) RecvMsg(m interface{}) error { - err := w.ServerStream.RecvMsg(m) - - if err == nil { - w.receivedMessageID++ - if w.receivedEvent { - messageReceived.Event(w.Context(), w.receivedMessageID, m) - } - } - - return err -} - -func (w *serverStream) SendMsg(m interface{}) error { - err := w.ServerStream.SendMsg(m) - - w.sentMessageID++ - if w.sentEvent { - messageSent.Event(w.Context(), w.sentMessageID, m) - } - - return err -} - -func wrapServerStream(ctx context.Context, ss grpc.ServerStream, cfg *config) *serverStream { - return &serverStream{ - ServerStream: ss, - ctx: ctx, - receivedEvent: cfg.ReceivedEvent, - sentEvent: cfg.SentEvent, - } -} - -// StreamServerInterceptor returns a grpc.StreamServerInterceptor suitable -// for use in a grpc.NewServer call. -// -// Deprecated: Use [NewServerHandler] instead. -func StreamServerInterceptor(opts ...Option) grpc.StreamServerInterceptor { - cfg := newConfig(opts) - tracer := cfg.TracerProvider.Tracer( - ScopeName, - trace.WithInstrumentationVersion(Version()), - ) - - return func( - srv interface{}, - ss grpc.ServerStream, - info *grpc.StreamServerInfo, - handler grpc.StreamHandler, - ) error { - ctx := ss.Context() - i := &InterceptorInfo{ - StreamServerInfo: info, - Type: StreamServer, - } - if cfg.InterceptorFilter != nil && !cfg.InterceptorFilter(i) { - return handler(srv, wrapServerStream(ctx, ss, cfg)) - } - - ctx = extract(ctx, cfg.Propagators) - name, attr := telemetryAttributes(info.FullMethod, peerFromCtx(ctx)) - - startOpts := append([]trace.SpanStartOption{ - trace.WithSpanKind(trace.SpanKindServer), - trace.WithAttributes(attr...), - }, - cfg.SpanStartOptions..., - ) - - ctx, span := tracer.Start( - trace.ContextWithRemoteSpanContext(ctx, trace.SpanContextFromContext(ctx)), - name, - startOpts..., - ) - defer span.End() - - err := handler(srv, wrapServerStream(ctx, ss, cfg)) - if err != nil { - s, _ := status.FromError(err) - statusCode, msg := serverStatus(s) - span.SetStatus(statusCode, msg) - span.SetAttributes(statusCodeAttr(s.Code())) - } else { - span.SetAttributes(statusCodeAttr(grpc_codes.OK)) - } - - return err - } -} - -// telemetryAttributes returns a span name and span and metric attributes from -// the gRPC method and peer address. -func telemetryAttributes(fullMethod, sererAddr string) (string, []attribute.KeyValue) { - name, methodAttrs := internal.ParseFullMethod(fullMethod) - srvAttrs := serverAddrAttrs(sererAddr) - - attrs := make([]attribute.KeyValue, 0, 1+len(methodAttrs)+len(srvAttrs)) - attrs = append(attrs, semconv.RPCSystemGRPC) - attrs = append(attrs, methodAttrs...) - attrs = append(attrs, srvAttrs...) - return name, attrs -} - // serverAddrAttrs returns the server address attributes for the hostport. func serverAddrAttrs(hostport string) []attribute.KeyValue { h, pStr, err := net.SplitHostPort(hostport) @@ -333,20 +33,6 @@ func serverAddrAttrs(hostport string) []attribute.KeyValue { } } -// peerFromCtx returns a peer address from a context, if one exists. -func peerFromCtx(ctx context.Context) string { - p, ok := peer.FromContext(ctx) - if !ok { - return "" - } - return p.Addr.String() -} - -// statusCodeAttr returns status code attribute based on given gRPC code. -func statusCodeAttr(c grpc_codes.Code) attribute.KeyValue { - return semconv.RPCGRPCStatusCodeKey.Int64(int64(c)) -} - // serverStatus returns a span status code and message for a given gRPC // status code. It maps specific gRPC status codes to a corresponding span // status code and message. This function is intended for use on the server diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/internal/parse.go b/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/internal/parse.go index 1fa73c2f94..e46185e0b1 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/internal/parse.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/internal/parse.go @@ -8,7 +8,7 @@ import ( "strings" "go.opentelemetry.io/otel/attribute" - semconv "go.opentelemetry.io/otel/semconv/v1.30.0" + semconv "go.opentelemetry.io/otel/semconv/v1.37.0" ) // ParseFullMethod returns a span name following the OpenTelemetry semantic diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/metadata_supplier.go b/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/metadata_supplier.go index 6e67f0216b..b427e17247 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/metadata_supplier.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/metadata_supplier.go @@ -6,15 +6,14 @@ package otelgrpc // import "go.opentelemetry.io/contrib/instrumentation/google.g import ( "context" - "google.golang.org/grpc/metadata" - "go.opentelemetry.io/otel/baggage" "go.opentelemetry.io/otel/propagation" "go.opentelemetry.io/otel/trace" + "google.golang.org/grpc/metadata" ) type metadataSupplier struct { - metadata *metadata.MD + metadata metadata.MD } // assert that metadataSupplier implements the TextMapCarrier interface. @@ -28,13 +27,13 @@ func (s *metadataSupplier) Get(key string) string { return values[0] } -func (s *metadataSupplier) Set(key string, value string) { +func (s *metadataSupplier) Set(key, value string) { s.metadata.Set(key, value) } func (s *metadataSupplier) Keys() []string { - out := make([]string, 0, len(*s.metadata)) - for key := range *s.metadata { + out := make([]string, 0, len(s.metadata)) + for key := range s.metadata { out = append(out, key) } return out @@ -43,11 +42,12 @@ func (s *metadataSupplier) Keys() []string { // Inject injects correlation context and span context into the gRPC // metadata object. This function is meant to be used on outgoing // requests. +// // Deprecated: Unnecessary public func. func Inject(ctx context.Context, md *metadata.MD, opts ...Option) { c := newConfig(opts) c.Propagators.Inject(ctx, &metadataSupplier{ - metadata: md, + metadata: *md, }) } @@ -57,7 +57,7 @@ func inject(ctx context.Context, propagators propagation.TextMapPropagator) cont md = metadata.MD{} } propagators.Inject(ctx, &metadataSupplier{ - metadata: &md, + metadata: md, }) return metadata.NewOutgoingContext(ctx, md) } @@ -65,11 +65,12 @@ func inject(ctx context.Context, propagators propagation.TextMapPropagator) cont // Extract returns the correlation context and span context that // another service encoded in the gRPC metadata object with Inject. // This function is meant to be used on incoming requests. +// // Deprecated: Unnecessary public func. func Extract(ctx context.Context, md *metadata.MD, opts ...Option) (baggage.Baggage, trace.SpanContext) { c := newConfig(opts) ctx = c.Propagators.Extract(ctx, &metadataSupplier{ - metadata: md, + metadata: *md, }) return baggage.FromContext(ctx), trace.SpanContextFromContext(ctx) @@ -82,6 +83,6 @@ func extract(ctx context.Context, propagators propagation.TextMapPropagator) con } return propagators.Extract(ctx, &metadataSupplier{ - metadata: &md, + metadata: md, }) } diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/stats_handler.go b/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/stats_handler.go index 9bec51df33..29d7ab2bda 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/stats_handler.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/stats_handler.go @@ -8,18 +8,17 @@ import ( "sync/atomic" "time" - grpc_codes "google.golang.org/grpc/codes" - "google.golang.org/grpc/peer" - "google.golang.org/grpc/stats" - "google.golang.org/grpc/status" - "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/metric" - "go.opentelemetry.io/otel/metric/noop" - semconv "go.opentelemetry.io/otel/semconv/v1.30.0" + semconv "go.opentelemetry.io/otel/semconv/v1.37.0" + "go.opentelemetry.io/otel/semconv/v1.37.0/rpcconv" "go.opentelemetry.io/otel/trace" + grpc_codes "google.golang.org/grpc/codes" + "google.golang.org/grpc/peer" + "google.golang.org/grpc/stats" + "google.golang.org/grpc/status" "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/internal" ) @@ -38,11 +37,11 @@ type serverHandler struct { tracer trace.Tracer - duration metric.Float64Histogram - inSize metric.Int64Histogram - outSize metric.Int64Histogram - inMsg metric.Int64Histogram - outMsg metric.Int64Histogram + duration rpcconv.ServerDuration + inSize rpcconv.ServerRequestSize + outSize rpcconv.ServerResponseSize + inMsg rpcconv.ServerRequestsPerRPC + outMsg rpcconv.ServerResponsesPerRPC } // NewServerHandler creates a stats.Handler for a gRPC server. @@ -62,76 +61,41 @@ func NewServerHandler(opts ...Option) stats.Handler { ) var err error - h.duration, err = meter.Float64Histogram( - semconv.RPCServerDurationName, - metric.WithDescription(semconv.RPCServerDurationDescription), - metric.WithUnit(semconv.RPCServerDurationUnit), - ) + h.duration, err = rpcconv.NewServerDuration(meter) if err != nil { otel.Handle(err) - if h.duration == nil { - h.duration = noop.Float64Histogram{} - } } - h.inSize, err = meter.Int64Histogram( - semconv.RPCServerRequestSizeName, - metric.WithDescription(semconv.RPCServerRequestSizeDescription), - metric.WithUnit(semconv.RPCServerRequestSizeUnit), - ) + h.inSize, err = rpcconv.NewServerRequestSize(meter) if err != nil { otel.Handle(err) - if h.inSize == nil { - h.inSize = noop.Int64Histogram{} - } } - h.outSize, err = meter.Int64Histogram( - semconv.RPCServerResponseSizeName, - metric.WithDescription(semconv.RPCServerResponseSizeDescription), - metric.WithUnit(semconv.RPCServerResponseSizeUnit), - ) + h.outSize, err = rpcconv.NewServerResponseSize(meter) if err != nil { otel.Handle(err) - if h.outSize == nil { - h.outSize = noop.Int64Histogram{} - } } - h.inMsg, err = meter.Int64Histogram( - semconv.RPCServerRequestsPerRPCName, - metric.WithDescription(semconv.RPCServerRequestsPerRPCDescription), - metric.WithUnit(semconv.RPCServerRequestsPerRPCUnit), - ) + h.inMsg, err = rpcconv.NewServerRequestsPerRPC(meter) if err != nil { otel.Handle(err) - if h.inMsg == nil { - h.inMsg = noop.Int64Histogram{} - } } - h.outMsg, err = meter.Int64Histogram( - semconv.RPCServerResponsesPerRPCName, - metric.WithDescription(semconv.RPCServerResponsesPerRPCDescription), - metric.WithUnit(semconv.RPCServerResponsesPerRPCUnit), - ) + h.outMsg, err = rpcconv.NewServerResponsesPerRPC(meter) if err != nil { otel.Handle(err) - if h.outMsg == nil { - h.outMsg = noop.Int64Histogram{} - } } return h } // TagConn can attach some information to the given context. -func (h *serverHandler) TagConn(ctx context.Context, info *stats.ConnTagInfo) context.Context { +func (*serverHandler) TagConn(ctx context.Context, _ *stats.ConnTagInfo) context.Context { return ctx } // HandleConn processes the Conn stats. -func (h *serverHandler) HandleConn(ctx context.Context, info stats.ConnStats) { +func (*serverHandler) HandleConn(context.Context, stats.ConnStats) { } // TagRPC can attach some information to the given context. @@ -147,11 +111,21 @@ func (h *serverHandler) TagRPC(ctx context.Context, info *stats.RPCTagInfo) cont } if record { + opts := []trace.SpanStartOption{ + trace.WithSpanKind(trace.SpanKindServer), + trace.WithAttributes(append(attrs, h.SpanAttributes...)...), + } + if h.PublicEndpoint || (h.PublicEndpointFn != nil && h.PublicEndpointFn(ctx, info)) { + 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})) + } + } ctx, _ = h.tracer.Start( trace.ContextWithRemoteSpanContext(ctx, trace.SpanContextFromContext(ctx)), name, - trace.WithSpanKind(trace.SpanKindServer), - trace.WithAttributes(append(attrs, h.SpanAttributes...)...), + opts..., ) } @@ -165,7 +139,16 @@ func (h *serverHandler) TagRPC(ctx context.Context, info *stats.RPCTagInfo) cont // HandleRPC processes the RPC stats. func (h *serverHandler) HandleRPC(ctx context.Context, rs stats.RPCStats) { - h.handleRPC(ctx, rs, h.duration, h.inSize, h.outSize, h.inMsg, h.outMsg, serverStatus) + h.handleRPC( + ctx, + rs, + h.duration.Inst(), + h.inSize, + h.outSize, + h.inMsg.Inst(), + h.outMsg.Inst(), + serverStatus, + ) } type clientHandler struct { @@ -173,11 +156,11 @@ type clientHandler struct { tracer trace.Tracer - duration metric.Float64Histogram - inSize metric.Int64Histogram - outSize metric.Int64Histogram - inMsg metric.Int64Histogram - outMsg metric.Int64Histogram + duration rpcconv.ClientDuration + inSize rpcconv.ClientResponseSize + outSize rpcconv.ClientRequestSize + inMsg rpcconv.ClientResponsesPerRPC + outMsg rpcconv.ClientRequestsPerRPC } // NewClientHandler creates a stats.Handler for a gRPC client. @@ -197,64 +180,29 @@ func NewClientHandler(opts ...Option) stats.Handler { ) var err error - h.duration, err = meter.Float64Histogram( - semconv.RPCClientDurationName, - metric.WithDescription(semconv.RPCClientDurationDescription), - metric.WithUnit(semconv.RPCClientDurationUnit), - ) + h.duration, err = rpcconv.NewClientDuration(meter) if err != nil { otel.Handle(err) - if h.duration == nil { - h.duration = noop.Float64Histogram{} - } } - h.outSize, err = meter.Int64Histogram( - semconv.RPCClientRequestSizeName, - metric.WithDescription(semconv.RPCClientRequestSizeDescription), - metric.WithUnit(semconv.RPCClientRequestSizeUnit), - ) + h.inSize, err = rpcconv.NewClientResponseSize(meter) if err != nil { otel.Handle(err) - if h.outSize == nil { - h.outSize = noop.Int64Histogram{} - } } - h.inSize, err = meter.Int64Histogram( - semconv.RPCClientResponseSizeName, - metric.WithDescription(semconv.RPCClientResponseSizeDescription), - metric.WithUnit(semconv.RPCClientResponseSizeUnit), - ) + h.outSize, err = rpcconv.NewClientRequestSize(meter) if err != nil { otel.Handle(err) - if h.inSize == nil { - h.inSize = noop.Int64Histogram{} - } } - h.outMsg, err = meter.Int64Histogram( - semconv.RPCClientRequestsPerRPCName, - metric.WithDescription(semconv.RPCClientRequestsPerRPCDescription), - metric.WithUnit(semconv.RPCClientRequestsPerRPCUnit), - ) + h.inMsg, err = rpcconv.NewClientResponsesPerRPC(meter) if err != nil { otel.Handle(err) - if h.outMsg == nil { - h.outMsg = noop.Int64Histogram{} - } } - h.inMsg, err = meter.Int64Histogram( - semconv.RPCClientResponsesPerRPCName, - metric.WithDescription(semconv.RPCClientResponsesPerRPCDescription), - metric.WithUnit(semconv.RPCClientResponsesPerRPCUnit), - ) + h.outMsg, err = rpcconv.NewClientRequestsPerRPC(meter) if err != nil { otel.Handle(err) - if h.inMsg == nil { - h.inMsg = noop.Int64Histogram{} - } } return h @@ -290,7 +238,13 @@ func (h *clientHandler) TagRPC(ctx context.Context, info *stats.RPCTagInfo) cont // HandleRPC processes the RPC stats. func (h *clientHandler) HandleRPC(ctx context.Context, rs stats.RPCStats) { h.handleRPC( - ctx, rs, h.duration, h.inSize, h.outSize, h.inMsg, h.outMsg, + ctx, + rs, + h.duration.Inst(), + h.inSize, + h.outSize, + h.inMsg.Inst(), + h.outMsg.Inst(), func(s *status.Status) (codes.Code, string) { return codes.Error, s.Message() }, @@ -298,20 +252,25 @@ func (h *clientHandler) HandleRPC(ctx context.Context, rs stats.RPCStats) { } // TagConn can attach some information to the given context. -func (h *clientHandler) TagConn(ctx context.Context, info *stats.ConnTagInfo) context.Context { +func (*clientHandler) TagConn(ctx context.Context, _ *stats.ConnTagInfo) context.Context { return ctx } // HandleConn processes the Conn stats. -func (h *clientHandler) HandleConn(context.Context, stats.ConnStats) { +func (*clientHandler) HandleConn(context.Context, stats.ConnStats) { // no-op } +type int64Hist interface { + Record(context.Context, int64, ...attribute.KeyValue) +} + func (c *config) handleRPC( ctx context.Context, rs stats.RPCStats, duration metric.Float64Histogram, - inSize, outSize, inMsg, outMsg metric.Int64Histogram, + inSize, outSize int64Hist, + inMsg, outMsg metric.Int64Histogram, recordStatus func(*status.Status) (codes.Code, string), ) { gctx, _ := ctx.Value(gRPCContextKey{}).(*gRPCContext) @@ -327,7 +286,7 @@ func (c *config) handleRPC( case *stats.InPayload: if gctx != nil { messageId = atomic.AddInt64(&gctx.inMessages, 1) - inSize.Record(ctx, int64(rs.Length), metric.WithAttributes(gctx.metricAttrs...)) + inSize.Record(ctx, int64(rs.Length), gctx.metricAttrs...) } if c.ReceivedEvent && span.IsRecording() { @@ -343,7 +302,7 @@ func (c *config) handleRPC( case *stats.OutPayload: if gctx != nil { messageId = atomic.AddInt64(&gctx.outMessages, 1) - outSize.Record(ctx, int64(rs.Length), metric.WithAttributes(gctx.metricAttrs...)) + outSize.Record(ctx, int64(rs.Length), gctx.metricAttrs...) } if c.SentEvent && span.IsRecording() { diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/version.go b/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/version.go index b1feeca494..aa4f4e2129 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/version.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/version.go @@ -5,6 +5,6 @@ package otelgrpc // import "go.opentelemetry.io/contrib/instrumentation/google.g // Version is the current release version of the gRPC instrumentation. func Version() string { - return "0.61.0" + return "0.63.0" // This string is updated by the pre_release.sh script during release } diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/LICENSE b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/LICENSE index 261eeb9e9f..f1aee0f110 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/LICENSE +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/LICENSE @@ -199,3 +199,33 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +-------------------------------------------------------------------------------- + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file 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 index b25641c55d..521daa25db 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/client.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/client.go @@ -18,7 +18,7 @@ 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, http.MethodGet, targetURL, nil) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, targetURL, http.NoBody) if err != nil { return nil, err } @@ -27,7 +27,7 @@ func Get(ctx context.Context, targetURL string) (resp *http.Response, err error) // 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, http.MethodHead, targetURL, nil) + req, err := http.NewRequestWithContext(ctx, http.MethodHead, targetURL, http.NoBody) if err != nil { return nil, err } 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 index 6bd50d4c9b..38fb79c032 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/config.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/config.go @@ -8,9 +8,8 @@ import ( "net/http" "net/http/httptrace" - "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/propagation" "go.opentelemetry.io/otel/trace" 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 index 937f9b4e73..fef83b42fe 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/handler.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/handler.go @@ -8,13 +8,13 @@ import ( "time" "github.com/felixge/httpsnoop" - - "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request" - "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/propagation" "go.opentelemetry.io/otel/trace" + + "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request" + "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv" ) // middleware is an http middleware which wraps the next handler in a span. 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 index 7cb9693d98..821b80ec41 100644 --- 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 @@ -10,13 +10,13 @@ import ( "context" "fmt" "net/http" - "os" "strings" "sync" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/metric" + "go.opentelemetry.io/otel/semconv/v1.37.0/httpconv" ) // OTelSemConvStabilityOptIn is an environment variable. @@ -32,17 +32,9 @@ type ResponseTelemetry struct { } type HTTPServer struct { - duplicate bool - - // Old metrics - requestBytesCounter metric.Int64Counter - responseBytesCounter metric.Int64Counter - serverLatencyMeasure metric.Float64Histogram - - // New metrics - requestBodySizeHistogram metric.Int64Histogram - responseBodySizeHistogram metric.Int64Histogram - requestDurationHistogram metric.Float64Histogram + requestBodySizeHistogram httpconv.ServerRequestBodySize + responseBodySizeHistogram httpconv.ServerResponseBodySize + requestDurationHistogram httpconv.ServerRequestDuration } // RequestTraceAttrs returns trace attributes for an HTTP request received by a @@ -62,20 +54,10 @@ type HTTPServer struct { // 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, opts RequestTraceAttrsOpts) []attribute.KeyValue { - attrs := CurrentHTTPServer{}.RequestTraceAttrs(server, req, opts) - if s.duplicate { - return OldHTTPServer{}.RequestTraceAttrs(server, req, attrs) - } - return attrs + return CurrentHTTPServer{}.RequestTraceAttrs(server, req, opts) } func (s HTTPServer) NetworkTransportAttr(network string) []attribute.KeyValue { - if s.duplicate { - return []attribute.KeyValue{ - OldHTTPServer{}.NetworkTransportAttr(network), - CurrentHTTPServer{}.NetworkTransportAttr(network), - } - } return []attribute.KeyValue{ CurrentHTTPServer{}.NetworkTransportAttr(network), } @@ -85,11 +67,7 @@ func (s HTTPServer) NetworkTransportAttr(network string) []attribute.KeyValue { // // If any of the fields in the ResponseTelemetry are not set the attribute will be omitted. func (s HTTPServer) ResponseTraceAttrs(resp ResponseTelemetry) []attribute.KeyValue { - attrs := CurrentHTTPServer{}.ResponseTraceAttrs(resp) - if s.duplicate { - return OldHTTPServer{}.ResponseTraceAttrs(resp, attrs) - } - return attrs + return CurrentHTTPServer{}.ResponseTraceAttrs(resp) } // Route returns the attribute for the route. @@ -133,42 +111,28 @@ type MetricData struct { var ( metricAddOptionPool = &sync.Pool{ - New: func() interface{} { + New: func() any { return &[]metric.AddOption{} }, } metricRecordOptionPool = &sync.Pool{ - New: func() interface{} { + New: func() any { return &[]metric.RecordOption{} }, } ) func (s HTTPServer) RecordMetrics(ctx context.Context, md ServerMetricData) { - if s.requestDurationHistogram != nil && s.requestBodySizeHistogram != nil && s.responseBodySizeHistogram != nil { - attributes := CurrentHTTPServer{}.MetricAttributes(md.ServerName, md.Req, md.StatusCode, md.AdditionalAttributes) - o := metric.WithAttributeSet(attribute.NewSet(attributes...)) - recordOpts := metricRecordOptionPool.Get().(*[]metric.RecordOption) - *recordOpts = append(*recordOpts, o) - s.requestBodySizeHistogram.Record(ctx, md.RequestSize, *recordOpts...) - s.responseBodySizeHistogram.Record(ctx, md.ResponseSize, *recordOpts...) - s.requestDurationHistogram.Record(ctx, md.ElapsedTime/1000.0, o) - *recordOpts = (*recordOpts)[:0] - metricRecordOptionPool.Put(recordOpts) - } - - if s.duplicate && s.requestBytesCounter != nil && s.responseBytesCounter != nil && s.serverLatencyMeasure != nil { - attributes := OldHTTPServer{}.MetricAttributes(md.ServerName, md.Req, md.StatusCode, md.AdditionalAttributes) - o := metric.WithAttributeSet(attribute.NewSet(attributes...)) - addOpts := metricAddOptionPool.Get().(*[]metric.AddOption) - *addOpts = append(*addOpts, o) - s.requestBytesCounter.Add(ctx, md.RequestSize, *addOpts...) - s.responseBytesCounter.Add(ctx, md.ResponseSize, *addOpts...) - s.serverLatencyMeasure.Record(ctx, md.ElapsedTime, o) - *addOpts = (*addOpts)[:0] - metricAddOptionPool.Put(addOpts) - } + attributes := CurrentHTTPServer{}.MetricAttributes(md.ServerName, md.Req, md.StatusCode, md.AdditionalAttributes) + o := metric.WithAttributeSet(attribute.NewSet(attributes...)) + recordOpts := metricRecordOptionPool.Get().(*[]metric.RecordOption) + *recordOpts = append(*recordOpts, o) + s.requestBodySizeHistogram.Inst().Record(ctx, md.RequestSize, *recordOpts...) + s.responseBodySizeHistogram.Inst().Record(ctx, md.ResponseSize, *recordOpts...) + s.requestDurationHistogram.Inst().Record(ctx, md.ElapsedTime/1000.0, o) + *recordOpts = (*recordOpts)[:0] + metricRecordOptionPool.Put(recordOpts) } // hasOptIn returns true if the comma-separated version string contains the @@ -183,61 +147,55 @@ func hasOptIn(version, optIn string) bool { } func NewHTTPServer(meter metric.Meter) HTTPServer { - env := strings.ToLower(os.Getenv(OTelSemConvStabilityOptIn)) - duplicate := hasOptIn(env, "http/dup") - server := HTTPServer{ - duplicate: duplicate, - } - server.requestBodySizeHistogram, server.responseBodySizeHistogram, server.requestDurationHistogram = CurrentHTTPServer{}.createMeasures(meter) - if duplicate { - server.requestBytesCounter, server.responseBytesCounter, server.serverLatencyMeasure = OldHTTPServer{}.createMeasures(meter) - } + server := HTTPServer{} + + var err error + server.requestBodySizeHistogram, err = httpconv.NewServerRequestBodySize(meter) + handleErr(err) + + server.responseBodySizeHistogram, err = httpconv.NewServerResponseBodySize(meter) + handleErr(err) + + server.requestDurationHistogram, err = httpconv.NewServerRequestDuration( + meter, + metric.WithExplicitBucketBoundaries( + 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, + 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10, + ), + ) + handleErr(err) return server } type HTTPClient struct { - duplicate bool - - // old metrics - requestBytesCounter metric.Int64Counter - responseBytesCounter metric.Int64Counter - latencyMeasure metric.Float64Histogram - - // new metrics - requestBodySize metric.Int64Histogram - requestDuration metric.Float64Histogram + requestBodySize httpconv.ClientRequestBodySize + requestDuration httpconv.ClientRequestDuration } func NewHTTPClient(meter metric.Meter) HTTPClient { - env := strings.ToLower(os.Getenv(OTelSemConvStabilityOptIn)) - duplicate := hasOptIn(env, "http/dup") - client := HTTPClient{ - duplicate: duplicate, - } - client.requestBodySize, client.requestDuration = CurrentHTTPClient{}.createMeasures(meter) - if duplicate { - client.requestBytesCounter, client.responseBytesCounter, client.latencyMeasure = OldHTTPClient{}.createMeasures(meter) - } + client := HTTPClient{} + + var err error + client.requestBodySize, err = httpconv.NewClientRequestBodySize(meter) + handleErr(err) + + client.requestDuration, err = httpconv.NewClientRequestDuration( + meter, + metric.WithExplicitBucketBoundaries(0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10), + ) + handleErr(err) return client } // RequestTraceAttrs returns attributes for an HTTP request made by a client. func (c HTTPClient) RequestTraceAttrs(req *http.Request) []attribute.KeyValue { - attrs := CurrentHTTPClient{}.RequestTraceAttrs(req) - if c.duplicate { - return OldHTTPClient{}.RequestTraceAttrs(req, attrs) - } - return attrs + return CurrentHTTPClient{}.RequestTraceAttrs(req) } // ResponseTraceAttrs returns metric attributes for an HTTP request made by a client. func (c HTTPClient) ResponseTraceAttrs(resp *http.Response) []attribute.KeyValue { - attrs := CurrentHTTPClient{}.ResponseTraceAttrs(resp) - if c.duplicate { - return OldHTTPClient{}.ResponseTraceAttrs(resp, attrs) - } - return attrs + return CurrentHTTPClient{}.ResponseTraceAttrs(resp) } func (c HTTPClient) Status(code int) (codes.Code, string) { @@ -277,47 +235,14 @@ func (c HTTPClient) MetricOptions(ma MetricAttributes) map[string]MetricOpts { addOptions: set, } - if c.duplicate { - attributes := OldHTTPClient{}.MetricAttributes(ma.Req, ma.StatusCode, ma.AdditionalAttributes) - set := metric.WithAttributeSet(attribute.NewSet(attributes...)) - opts["old"] = MetricOpts{ - measurement: set, - addOptions: set, - } - } - return opts } func (s HTTPClient) RecordMetrics(ctx context.Context, md MetricData, opts map[string]MetricOpts) { - if s.requestBodySize == nil || s.requestDuration == nil { - // This will happen if an HTTPClient{} is used instead of NewHTTPClient(). - return - } - - s.requestBodySize.Record(ctx, md.RequestSize, opts["new"].MeasurementOption()) - s.requestDuration.Record(ctx, md.ElapsedTime/1000, opts["new"].MeasurementOption()) - - if s.duplicate { - s.requestBytesCounter.Add(ctx, md.RequestSize, opts["old"].AddOptions()) - s.latencyMeasure.Record(ctx, md.ElapsedTime, opts["old"].MeasurementOption()) - } -} - -func (s HTTPClient) RecordResponseSize(ctx context.Context, responseData int64, opts map[string]MetricOpts) { - if s.responseBytesCounter == nil { - // This will happen if an HTTPClient{} is used instead of NewHTTPClient(). - return - } - - s.responseBytesCounter.Add(ctx, responseData, opts["old"].AddOptions()) + s.requestBodySize.Inst().Record(ctx, md.RequestSize, opts["new"].MeasurementOption()) + s.requestDuration.Inst().Record(ctx, md.ElapsedTime/1000, opts["new"].MeasurementOption()) } func (s HTTPClient) TraceAttributes(host string) []attribute.KeyValue { - attrs := CurrentHTTPClient{}.TraceAttributes(host) - if s.duplicate { - return OldHTTPClient{}.TraceAttributes(host, attrs) - } - - return attrs + return CurrentHTTPClient{}.TraceAttributes(host) } diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/gen.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/gen.go index f2cf8a152d..1bb207b809 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/gen.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/gen.go @@ -5,10 +5,11 @@ package semconv // import "go.opentelemetry.io/contrib/instrumentation/net/http/ // Generate semconv package: //go:generate gotmpl --body=../../../../../../internal/shared/semconv/bench_test.go.tmpl "--data={ \"pkg\": \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\" }" --out=bench_test.go +//go:generate gotmpl --body=../../../../../../internal/shared/semconv/common_test.go.tmpl "--data={ \"pkg\": \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\" }" --out=common_test.go //go:generate gotmpl --body=../../../../../../internal/shared/semconv/env.go.tmpl "--data={ \"pkg\": \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\" }" --out=env.go //go:generate gotmpl --body=../../../../../../internal/shared/semconv/env_test.go.tmpl "--data={ \"pkg\": \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\" }" --out=env_test.go //go:generate gotmpl --body=../../../../../../internal/shared/semconv/httpconv.go.tmpl "--data={ \"pkg\": \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\" }" --out=httpconv.go //go:generate gotmpl --body=../../../../../../internal/shared/semconv/httpconv_test.go.tmpl "--data={ \"pkg\": \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\" }" --out=httpconv_test.go +//go:generate gotmpl --body=../../../../../../internal/shared/semconv/httpconvtest_test.go.tmpl "--data={ \"pkg\": \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\" }" --out=httpconvtest_test.go //go:generate gotmpl --body=../../../../../../internal/shared/semconv/util.go.tmpl "--data={ \"pkg\": \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\" }" --out=util.go //go:generate gotmpl --body=../../../../../../internal/shared/semconv/util_test.go.tmpl "--data={ \"pkg\": \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\" }" --out=util_test.go -//go:generate gotmpl --body=../../../../../../internal/shared/semconv/v1.20.0.go.tmpl "--data={ \"pkg\": \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\" }" --out=v1.20.0.go diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/httpconv.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/httpconv.go index 53976b0d5a..28c51a3b38 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/httpconv.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/httpconv.go @@ -17,9 +17,7 @@ import ( "strings" "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/metric" - "go.opentelemetry.io/otel/metric/noop" - semconvNew "go.opentelemetry.io/otel/semconv/v1.26.0" + semconvNew "go.opentelemetry.io/otel/semconv/v1.37.0" ) type RequestTraceAttrsOpts struct { @@ -196,7 +194,7 @@ func (n CurrentHTTPServer) method(method string) (attribute.KeyValue, attribute. return semconvNew.HTTPRequestMethodGet, orig } -func (n CurrentHTTPServer) scheme(https bool) attribute.KeyValue { // nolint:revive +func (n CurrentHTTPServer) scheme(https bool) attribute.KeyValue { //nolint:revive // ignore linter if https { return semconvNew.URLScheme("https") } @@ -247,36 +245,6 @@ func (n CurrentHTTPServer) Route(route string) attribute.KeyValue { return semconvNew.HTTPRoute(route) } -func (n CurrentHTTPServer) createMeasures(meter metric.Meter) (metric.Int64Histogram, metric.Int64Histogram, metric.Float64Histogram) { - if meter == nil { - return noop.Int64Histogram{}, noop.Int64Histogram{}, noop.Float64Histogram{} - } - - var err error - requestBodySizeHistogram, err := meter.Int64Histogram( - semconvNew.HTTPServerRequestBodySizeName, - metric.WithUnit(semconvNew.HTTPServerRequestBodySizeUnit), - metric.WithDescription(semconvNew.HTTPServerRequestBodySizeDescription), - ) - handleErr(err) - - responseBodySizeHistogram, err := meter.Int64Histogram( - semconvNew.HTTPServerResponseBodySizeName, - metric.WithUnit(semconvNew.HTTPServerResponseBodySizeUnit), - metric.WithDescription(semconvNew.HTTPServerResponseBodySizeDescription), - ) - handleErr(err) - requestDurationHistogram, err := meter.Float64Histogram( - semconvNew.HTTPServerRequestDurationName, - metric.WithUnit(semconvNew.HTTPServerRequestDurationUnit), - metric.WithDescription(semconvNew.HTTPServerRequestDurationDescription), - metric.WithExplicitBucketBoundaries(0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10), - ) - handleErr(err) - - return requestBodySizeHistogram, responseBodySizeHistogram, requestDurationHistogram -} - func (n CurrentHTTPServer) MetricAttributes(server string, req *http.Request, statusCode int, additionalAttributes []attribute.KeyValue) []attribute.KeyValue { num := len(additionalAttributes) + 3 var host string @@ -472,30 +440,6 @@ func (n CurrentHTTPClient) method(method string) (attribute.KeyValue, attribute. return semconvNew.HTTPRequestMethodGet, orig } -func (n CurrentHTTPClient) createMeasures(meter metric.Meter) (metric.Int64Histogram, metric.Float64Histogram) { - if meter == nil { - return noop.Int64Histogram{}, noop.Float64Histogram{} - } - - var err error - requestBodySize, err := meter.Int64Histogram( - semconvNew.HTTPClientRequestBodySizeName, - metric.WithUnit(semconvNew.HTTPClientRequestBodySizeUnit), - metric.WithDescription(semconvNew.HTTPClientRequestBodySizeDescription), - ) - handleErr(err) - - requestDuration, err := meter.Float64Histogram( - semconvNew.HTTPClientRequestDurationName, - metric.WithUnit(semconvNew.HTTPClientRequestDurationUnit), - metric.WithDescription(semconvNew.HTTPClientRequestDurationDescription), - metric.WithExplicitBucketBoundaries(0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10), - ) - handleErr(err) - - return requestBodySize, requestDuration -} - func (n CurrentHTTPClient) MetricAttributes(req *http.Request, statusCode int, additionalAttributes []attribute.KeyValue) []attribute.KeyValue { num := len(additionalAttributes) + 2 var h string 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 index bc1f7751db..96422ad1ed 100644 --- 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 @@ -14,7 +14,7 @@ import ( "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" - semconvNew "go.opentelemetry.io/otel/semconv/v1.26.0" + semconvNew "go.opentelemetry.io/otel/semconv/v1.37.0" ) // SplitHostPort splits a network address hostport of the form "host", @@ -53,10 +53,10 @@ func SplitHostPort(hostport string) (host string, port int) { if err != nil { return } - return host, int(p) // nolint: gosec // Byte size checked 16 above. + return host, int(p) //nolint:gosec // Byte size checked 16 above. } -func requiredHTTPPort(https bool, port int) int { // nolint:revive +func requiredHTTPPort(https bool, port int) int { //nolint:revive // ignore linter if https { if port > 0 && port != 443 { return port 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 ba7fccf1ef..0000000000 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/v1.20.0.go +++ /dev/null @@ -1,273 +0,0 @@ -// Code generated by gotmpl. DO NOT MODIFY. -// source: internal/shared/semconv/v120.0.go.tmpl - -// 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" - "slices" - - "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil" - "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/metric" - "go.opentelemetry.io/otel/metric/noop" - 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, attrs []attribute.KeyValue) []attribute.KeyValue { - return semconvutil.HTTPServerRequest(server, req, semconvutil.HTTPServerRequestOptions{}, attrs) -} - -func (o OldHTTPServer) NetworkTransportAttr(network string) attribute.KeyValue { - return semconvutil.NetTransport(network) -} - -// 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, attributes []attribute.KeyValue) []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) -} - -// 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 -) - -func (h OldHTTPServer) createMeasures(meter metric.Meter) (metric.Int64Counter, metric.Int64Counter, metric.Float64Histogram) { - if meter == nil { - return noop.Int64Counter{}, noop.Int64Counter{}, noop.Float64Histogram{} - } - var err error - requestBytesCounter, err := meter.Int64Counter( - serverRequestSize, - metric.WithUnit("By"), - metric.WithDescription("Measures the size of HTTP request messages."), - ) - handleErr(err) - - responseBytesCounter, err := meter.Int64Counter( - serverResponseSize, - metric.WithUnit("By"), - metric.WithDescription("Measures the size of HTTP response messages."), - ) - handleErr(err) - - serverLatencyMeasure, err := meter.Float64Histogram( - serverDuration, - metric.WithUnit("ms"), - metric.WithDescription("Measures the duration of inbound HTTP requests."), - ) - handleErr(err) - - return requestBytesCounter, responseBytesCounter, serverLatencyMeasure -} - -func (o OldHTTPServer) MetricAttributes(server string, req *http.Request, statusCode int, additionalAttributes []attribute.KeyValue) []attribute.KeyValue { - n := len(additionalAttributes) + 3 - 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++ - } - - if statusCode > 0 { - n++ - } - - attributes := slices.Grow(additionalAttributes, n) - attributes = append(attributes, - semconv.HTTPMethod(standardizeHTTPMethod(req.Method)), - o.scheme(req.TLS != nil), - semconv.NetHostName(host)) - - if hostPort > 0 { - attributes = append(attributes, semconv.NetHostPort(hostPort)) - } - if protoName != "" { - attributes = append(attributes, semconv.NetProtocolName(protoName)) - } - if protoVersion != "" { - attributes = append(attributes, semconv.NetProtocolVersion(protoVersion)) - } - - if statusCode > 0 { - attributes = append(attributes, semconv.HTTPStatusCode(statusCode)) - } - return attributes -} - -func (o OldHTTPServer) scheme(https bool) attribute.KeyValue { // nolint:revive - if https { - return semconv.HTTPSchemeHTTPS - } - return semconv.HTTPSchemeHTTP -} - -type OldHTTPClient struct{} - -func (o OldHTTPClient) RequestTraceAttrs(req *http.Request, attrs []attribute.KeyValue) []attribute.KeyValue { - return semconvutil.HTTPClientRequest(req, attrs) -} - -func (o OldHTTPClient) ResponseTraceAttrs(resp *http.Response, attrs []attribute.KeyValue) []attribute.KeyValue { - return semconvutil.HTTPClientResponse(resp, attrs) -} - -func (o OldHTTPClient) MetricAttributes(req *http.Request, statusCode int, additionalAttributes []attribute.KeyValue) []attribute.KeyValue { - /* The following semantic conventions are returned if present: - http.method string - http.status_code int - net.peer.name string - net.peer.port int - */ - - n := 2 // method, peer name. - var h string - if req.URL != nil { - h = req.URL.Host - } - var requestHost string - var requestPort int - for _, hostport := range []string{h, req.Header.Get("Host")} { - requestHost, requestPort = SplitHostPort(hostport) - if requestHost != "" || requestPort > 0 { - break - } - } - - port := requiredHTTPPort(req.URL != nil && req.URL.Scheme == "https", requestPort) - if port > 0 { - n++ - } - - if statusCode > 0 { - n++ - } - - attributes := slices.Grow(additionalAttributes, n) - attributes = append(attributes, - semconv.HTTPMethod(standardizeHTTPMethod(req.Method)), - semconv.NetPeerName(requestHost), - ) - - if port > 0 { - attributes = append(attributes, semconv.NetPeerPort(port)) - } - - if statusCode > 0 { - attributes = append(attributes, semconv.HTTPStatusCode(statusCode)) - } - return attributes -} - -// Client HTTP metrics. -const ( - clientRequestSize = "http.client.request.size" // Incoming request bytes total - clientResponseSize = "http.client.response.size" // Incoming response bytes total - clientDuration = "http.client.duration" // Incoming end to end duration, milliseconds -) - -func (o OldHTTPClient) createMeasures(meter metric.Meter) (metric.Int64Counter, metric.Int64Counter, metric.Float64Histogram) { - if meter == nil { - return noop.Int64Counter{}, noop.Int64Counter{}, noop.Float64Histogram{} - } - requestBytesCounter, err := meter.Int64Counter( - clientRequestSize, - metric.WithUnit("By"), - metric.WithDescription("Measures the size of HTTP request messages."), - ) - handleErr(err) - - responseBytesCounter, err := meter.Int64Counter( - clientResponseSize, - metric.WithUnit("By"), - metric.WithDescription("Measures the size of HTTP response messages."), - ) - handleErr(err) - - latencyMeasure, err := meter.Float64Histogram( - clientDuration, - metric.WithUnit("ms"), - metric.WithDescription("Measures the duration of outbound HTTP requests."), - ) - handleErr(err) - - return requestBytesCounter, responseBytesCounter, latencyMeasure -} - -// TraceAttributes returns attributes for httptrace. -func (c OldHTTPClient) TraceAttributes(host string, attrs []attribute.KeyValue) []attribute.KeyValue { - return append(attrs, semconv.NetHostName(host)) -} 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 7aa5f99e81..0000000000 --- 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 b997354793..0000000000 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/httpconv.go +++ /dev/null @@ -1,594 +0,0 @@ -// Code generated by gotmpl. DO NOT MODIFY. -// source: internal/shared/semconvutil/httpconv.go.tmpl - -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -// Package semconvutil provides OpenTelemetry semantic convention utilities. -package semconvutil // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil" - -import ( - "fmt" - "net/http" - "slices" - "strings" - - "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/codes" - semconv "go.opentelemetry.io/otel/semconv/v1.20.0" -) - -type HTTPServerRequestOptions struct { - // If set, this is used as value for the "http.client_ip" attribute. - HTTPClientIP string -} - -// 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: -// -// HTTPClientResponse(resp, ClientRequest(resp.Request))) -func HTTPClientResponse(resp *http.Response, attrs []attribute.KeyValue) []attribute.KeyValue { - return hc.ClientResponse(resp, attrs) -} - -// 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, attrs []attribute.KeyValue) []attribute.KeyValue { - return hc.ClientRequest(req, attrs) -} - -// 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, opts HTTPServerRequestOptions, attrs []attribute.KeyValue) []attribute.KeyValue { - return hc.ServerRequest(server, req, opts, attrs) -} - -// 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: -// -// ClientResponse(resp, ClientRequest(resp.Request)) -func (c *httpConv) ClientResponse(resp *http.Response, attrs []attribute.KeyValue) []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++ - } - if n == 0 { - return attrs - } - - attrs = slices.Grow(attrs, 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, attrs []attribute.KeyValue) []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 = slices.Grow(attrs, 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, opts HTTPServerRequestOptions, attrs []attribute.KeyValue) []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++ - } - - // For client IP, use, in order: - // 1. The value passed in the options - // 2. The value in the X-Forwarded-For header - // 3. The peer address - clientIP := opts.HTTPClientIP - if clientIP == "" { - clientIP = serverClientIP(req.Header.Get("X-Forwarded-For")) - if clientIP == "" { - clientIP = peer - } - } - 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 = slices.Grow(attrs, 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 df97255e41..0000000000 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/netconv.go +++ /dev/null @@ -1,214 +0,0 @@ -// Code generated 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) // nolint: gosec // Bitsize checked to be 16 above. -} - -func netProtocol(proto string) (name string, version string) { - name, version, _ = strings.Cut(proto, "/") - switch name { - case "HTTP": - name = "http" - case "QUIC": - name = "quic" - case "SPDY": - name = "spdy" - default: - name = strings.ToLower(name) - } - return name, version -} 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 index 44b86ad860..514ae6753b 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/transport.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/transport.go @@ -11,14 +11,14 @@ import ( "sync/atomic" "time" - "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request" - "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/propagation" - "go.opentelemetry.io/otel/trace" + + "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request" + "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv" ) // Transport implements the http.RoundTripper interface and wraps @@ -129,6 +129,37 @@ func (t *Transport) RoundTrip(r *http.Request) (*http.Response, error) { t.propagators.Inject(ctx, propagation.HeaderCarrier(r.Header)) res, err := t.rt.RoundTrip(r) + + // Defer metrics recording function to record the metrics on error or no error. + defer func() { + metricAttributes := semconv.MetricAttributes{ + Req: r, + AdditionalAttributes: append(labeler.Get(), t.metricAttributesFromRequest(r)...), + } + + if err == nil { + metricAttributes.StatusCode = res.StatusCode + } + + metricOpts := t.semconv.MetricOptions(metricAttributes) + + metricData := semconv.MetricData{ + RequestSize: bw.BytesRead(), + } + + if err == nil { + readRecordFunc := func(int64) {} + 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) + + metricData.ElapsedTime = elapsedTime + + t.semconv.RecordMetrics(ctx, metricData, metricOpts) + }() + if err != nil { // set error type attribute if the error is part of the predefined // error types. @@ -141,35 +172,14 @@ func (t *Transport) RoundTrip(r *http.Request) (*http.Response, error) { span.SetStatus(codes.Error, err.Error()) span.End() - return res, err - } - - // metrics - metricOpts := t.semconv.MetricOptions(semconv.MetricAttributes{ - Req: r, - StatusCode: res.StatusCode, - AdditionalAttributes: append(labeler.Get(), t.metricAttributesFromRequest(r)...), - }) - // For handling response bytes we leverage a callback when the client reads the http response - readRecordFunc := func(n int64) { - t.semconv.RecordResponseSize(ctx, n, metricOpts) + return res, err } // traces span.SetAttributes(t.semconv.ResponseTraceAttrs(res)...) span.SetStatus(t.semconv.Status(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.semconv.RecordMetrics(ctx, semconv.MetricData{ - RequestSize: bw.BytesRead(), - ElapsedTime: elapsedTime, - }, metricOpts) - return res, 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 index 6be4c1fde2..dfb53cf1f3 100644 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go +++ b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go @@ -5,6 +5,6 @@ package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http // Version is the current release version of the otelhttp instrumentation. func Version() string { - return "0.61.0" + return "0.63.0" // This string is updated by the pre_release.sh script during release } diff --git a/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/LICENSE b/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/LICENSE index 261eeb9e9f..f1aee0f110 100644 --- a/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/LICENSE +++ b/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/LICENSE @@ -199,3 +199,33 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +-------------------------------------------------------------------------------- + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/exporter.go b/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/exporter.go index 3f0a518ae0..30446bd28b 100644 --- a/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/exporter.go +++ b/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/exporter.go @@ -94,7 +94,7 @@ func NewUnstarted(client Client) *Exporter { } // MarshalLog is the marshaling function used by the logging system to represent this Exporter. -func (e *Exporter) MarshalLog() interface{} { +func (e *Exporter) MarshalLog() any { return struct { Type string Client Client diff --git a/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform/attribute.go b/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform/attribute.go index ca4544f0da..d9bfd6e176 100644 --- a/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform/attribute.go +++ b/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform/attribute.go @@ -6,9 +6,10 @@ package tracetransform // import "go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform" import ( + commonpb "go.opentelemetry.io/proto/otlp/common/v1" + "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/sdk/resource" - commonpb "go.opentelemetry.io/proto/otlp/common/v1" ) // KeyValues transforms a slice of attribute KeyValues into OTLP key-values. diff --git a/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform/instrumentation.go b/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform/instrumentation.go index 2e7690e43a..43359c8944 100644 --- a/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform/instrumentation.go +++ b/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform/instrumentation.go @@ -4,8 +4,9 @@ package tracetransform // import "go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform" import ( - "go.opentelemetry.io/otel/sdk/instrumentation" commonpb "go.opentelemetry.io/proto/otlp/common/v1" + + "go.opentelemetry.io/otel/sdk/instrumentation" ) func InstrumentationScope(il instrumentation.Scope) *commonpb.InstrumentationScope { diff --git a/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform/resource.go b/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform/resource.go index db7b698a56..526bb5e070 100644 --- a/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform/resource.go +++ b/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform/resource.go @@ -4,8 +4,9 @@ package tracetransform // import "go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform" import ( - "go.opentelemetry.io/otel/sdk/resource" resourcepb "go.opentelemetry.io/proto/otlp/resource/v1" + + "go.opentelemetry.io/otel/sdk/resource" ) // Resource transforms a Resource into an OTLP Resource. diff --git a/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform/span.go b/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform/span.go index bf27ef0220..379bc8170d 100644 --- a/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform/span.go +++ b/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform/span.go @@ -6,12 +6,13 @@ package tracetransform // import "go.opentelemetry.io/otel/exporters/otlp/otlptr import ( "math" + tracepb "go.opentelemetry.io/proto/otlp/trace/v1" + "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/sdk/instrumentation" tracesdk "go.opentelemetry.io/otel/sdk/trace" "go.opentelemetry.io/otel/trace" - tracepb "go.opentelemetry.io/proto/otlp/trace/v1" ) // Spans transforms a slice of OpenTelemetry spans into a slice of OTLP @@ -154,7 +155,6 @@ func links(links []tracesdk.Link) []*tracepb.Span_Link { for _, otLink := range links { // This redefinition is necessary to prevent otLink.*ID[:] copies // being reused -- in short we need a new otLink per iteration. - otLink := otLink tid := otLink.SpanContext.TraceID() sid := otLink.SpanContext.SpanID() @@ -189,7 +189,7 @@ func spanEvents(es []tracesdk.Event) []*tracepb.Span_Event { events := make([]*tracepb.Span_Event, len(es)) // Transform message events - for i := 0; i < len(es); i++ { + for i := range es { events[i] = &tracepb.Span_Event{ Name: es[i].Name, TimeUnixNano: uint64(max(0, es[i].Time.UnixNano())), // nolint:gosec // Overflow checked. diff --git a/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/LICENSE b/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/LICENSE index 261eeb9e9f..f1aee0f110 100644 --- a/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/LICENSE +++ b/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/LICENSE @@ -199,3 +199,33 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +-------------------------------------------------------------------------------- + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/client.go b/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/client.go index 8409b5f8f9..4b4cc76f4a 100644 --- a/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/client.go +++ b/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/client.go @@ -9,6 +9,8 @@ import ( "sync" "time" + coltracepb "go.opentelemetry.io/proto/otlp/collector/trace/v1" + tracepb "go.opentelemetry.io/proto/otlp/trace/v1" "google.golang.org/genproto/googleapis/rpc/errdetails" "google.golang.org/grpc" "google.golang.org/grpc/codes" @@ -20,8 +22,6 @@ import ( "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal" "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/otlpconfig" "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/retry" - coltracepb "go.opentelemetry.io/proto/otlp/collector/trace/v1" - tracepb "go.opentelemetry.io/proto/otlp/trace/v1" ) type client struct { @@ -223,7 +223,7 @@ func (c *client) exportContext(parent context.Context) (context.Context, context ) if c.exportTimeout > 0 { - ctx, cancel = context.WithTimeout(parent, c.exportTimeout) + ctx, cancel = context.WithTimeoutCause(parent, c.exportTimeout, errors.New("exporter export timeout")) } else { ctx, cancel = context.WithCancel(parent) } @@ -289,7 +289,7 @@ func throttleDelay(s *status.Status) (bool, time.Duration) { } // MarshalLog is the marshaling function used by the logging system to represent this Client. -func (c *client) MarshalLog() interface{} { +func (c *client) MarshalLog() any { return struct { Type string Endpoint string diff --git a/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/otlpconfig/options.go b/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/otlpconfig/options.go index 506ca00b61..4f47117a58 100644 --- a/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/otlpconfig/options.go +++ b/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/otlpconfig/options.go @@ -92,12 +92,11 @@ func NewHTTPConfig(opts ...HTTPOption) Config { return cfg } -// cleanPath returns a path with all spaces trimmed and all redundancies -// removed. If urlPath is empty or cleaning it results in an empty string, +// cleanPath returns a path with all spaces trimmed. If urlPath is empty, // defaultPath is returned instead. func cleanPath(urlPath string, defaultPath string) string { - tmp := path.Clean(strings.TrimSpace(urlPath)) - if tmp == "." { + tmp := strings.TrimSpace(urlPath) + if tmp == "" || tmp == "." { return defaultPath } if !path.IsAbs(tmp) { diff --git a/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/retry/retry.go b/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/retry/retry.go index 777e68a7bb..259a898ae7 100644 --- a/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/retry/retry.go +++ b/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/retry/retry.go @@ -132,7 +132,7 @@ func wait(ctx context.Context, delay time.Duration) error { select { case <-timer.C: default: - return ctx.Err() + return context.Cause(ctx) } case <-timer.C: } diff --git a/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/version.go b/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/version.go index 5f78bfdfb0..3b79c1a0b5 100644 --- a/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/version.go +++ b/vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/version.go @@ -5,5 +5,5 @@ package otlptrace // import "go.opentelemetry.io/otel/exporters/otlp/otlptrace" // Version is the current release version of the OpenTelemetry OTLP trace exporter in use. func Version() string { - return "1.36.0" + return "1.38.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 82e1f46b4e..0000000000 --- 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 6685c392b5..0000000000 --- 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 0d1f55a8fe..0000000000 --- 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 6377639321..0000000000 --- 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 f40c97825a..0000000000 --- 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 9c1840631b..0000000000 --- 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 3d44dae275..0000000000 --- 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 95d0210e38..0000000000 --- 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 90b1b0452c..0000000000 --- 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.26.0/README.md b/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/README.md deleted file mode 100644 index 2de1fc3c6b..0000000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Semconv v1.26.0 - -[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/semconv/v1.26.0)](https://pkg.go.dev/go.opentelemetry.io/otel/semconv/v1.26.0) diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/attribute_group.go b/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/attribute_group.go deleted file mode 100644 index d8dc822b26..0000000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/attribute_group.go +++ /dev/null @@ -1,8996 +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.26.0" - -import "go.opentelemetry.io/otel/attribute" - -// 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) -} - -// ASP.NET Core attributes -const ( - // 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: stable - // Examples: 'acquired', 'request_canceled' - AspnetcoreRateLimitingResultKey = attribute.Key("aspnetcore.rate_limiting.result") - - // 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: stable - // Examples: 'Contoso.MyHandler' - AspnetcoreDiagnosticsHandlerTypeKey = attribute.Key("aspnetcore.diagnostics.handler.type") - - // AspnetcoreDiagnosticsExceptionResultKey is the attribute Key conforming - // to the "aspnetcore.diagnostics.exception.result" semantic conventions. - // It represents the aSP.NET Core exception middleware handling result - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - // Examples: 'handled', 'unhandled' - AspnetcoreDiagnosticsExceptionResultKey = attribute.Key("aspnetcore.diagnostics.exception.result") - - // AspnetcoreRateLimitingPolicyKey is the attribute Key conforming to the - // "aspnetcore.rate_limiting.policy" semantic conventions. It represents - // the rate limiting policy name. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'fixed', 'sliding', 'token' - AspnetcoreRateLimitingPolicyKey = attribute.Key("aspnetcore.rate_limiting.policy") - - // 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: Optional - // Stability: stable - // 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: Optional - // Stability: stable - // Examples: True - AspnetcoreRoutingIsFallbackKey = attribute.Key("aspnetcore.routing.is_fallback") - - // AspnetcoreRoutingMatchStatusKey is the attribute Key conforming to the - // "aspnetcore.routing.match_status" semantic conventions. It represents - // the match result - success or failure - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - // Examples: 'success', 'failure' - AspnetcoreRoutingMatchStatusKey = attribute.Key("aspnetcore.routing.match_status") -) - -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") -) - -var ( - // Exception was handled by the exception handling middleware - AspnetcoreDiagnosticsExceptionResultHandled = AspnetcoreDiagnosticsExceptionResultKey.String("handled") - // Exception was not handled by the exception handling middleware - AspnetcoreDiagnosticsExceptionResultUnhandled = AspnetcoreDiagnosticsExceptionResultKey.String("unhandled") - // Exception handling was skipped because the response had started - AspnetcoreDiagnosticsExceptionResultSkipped = AspnetcoreDiagnosticsExceptionResultKey.String("skipped") - // Exception handling didn't run because the request was aborted - AspnetcoreDiagnosticsExceptionResultAborted = AspnetcoreDiagnosticsExceptionResultKey.String("aborted") -) - -var ( - // Match succeeded - AspnetcoreRoutingMatchStatusSuccess = AspnetcoreRoutingMatchStatusKey.String("success") - // Match failed - AspnetcoreRoutingMatchStatusFailure = AspnetcoreRoutingMatchStatusKey.String("failure") -) - -// 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) -} - -// Generic attributes for AWS services. -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 for AWS DynamoDB. -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") - - // 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") - - // 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") - - // 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") - - // 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 - // `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") - - // 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") - - // 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") - - // 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") - - // 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") - - // 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") - - // 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") - - // 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") - - // AWSDynamoDBTableCountKey is the attribute Key conforming to the - // "aws.dynamodb.table_count" semantic conventions. It represents the - // number of items in the `TableNames` response parameter. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 20 - AWSDynamoDBTableCountKey = attribute.Key("aws.dynamodb.table_count") - - // 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") - - // 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") -) - -// 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) -} - -// 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) -} - -// 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) -} - -// 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) -} - -// 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 -// `GlobalSecondaryIndexUpdates` request field. -func AWSDynamoDBGlobalSecondaryIndexUpdates(val ...string) attribute.KeyValue { - return AWSDynamoDBGlobalSecondaryIndexUpdatesKey.StringSlice(val) -} - -// 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) -} - -// 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) -} - -// 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) -} - -// 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) -} - -// 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) -} - -// 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) -} - -// 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) -} - -// AWSDynamoDBTableCount returns an attribute KeyValue conforming to the -// "aws.dynamodb.table_count" semantic conventions. It represents the number of -// items in the `TableNames` response parameter. -func AWSDynamoDBTableCount(val int) attribute.KeyValue { - return AWSDynamoDBTableCountKey.Int(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) -} - -// 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) -} - -// Attributes for AWS Elastic Container Service (ECS). -const ( - // AWSECSTaskIDKey is the attribute Key conforming to the "aws.ecs.task.id" - // semantic conventions. It represents the ID of a running ECS task. The ID - // MUST be extracted from `task.arn`. - // - // Type: string - // RequirementLevel: ConditionallyRequired (If and only if `task.arn` is - // populated.) - // Stability: experimental - // Examples: '10838bed-421f-43ef-870a-f43feacbbb5b', - // '23ebb8ac-c18f-46c6-8bbe-d55d0e37cfbd' - AWSECSTaskIDKey = attribute.Key("aws.ecs.task.id") - - // 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 a - // running [ECS - // task](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#ecs-resource-ids). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: - // 'arn:aws:ecs:us-west-1:123456789123:task/10838bed-421f-43ef-870a-f43feacbbb5b', - // 'arn:aws:ecs:us-west-1:123456789123:task/my-cluster/task-id/23ebb8ac-c18f-46c6-8bbe-d55d0e37cfbd' - AWSECSTaskARNKey = attribute.Key("aws.ecs.task.arn") - - // AWSECSTaskFamilyKey is the attribute Key conforming to the - // "aws.ecs.task.family" semantic conventions. It represents the family - // name of the [ECS task - // definition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html) - // used to create the ECS task. - // - // 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 the task definition used to create the ECS task. - // - // 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") -) - -// AWSECSTaskID returns an attribute KeyValue conforming to the -// "aws.ecs.task.id" semantic conventions. It represents the ID of a running -// ECS task. The ID MUST be extracted from `task.arn`. -func AWSECSTaskID(val string) attribute.KeyValue { - return AWSECSTaskIDKey.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) -} - -// 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 a running -// [ECS -// task](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#ecs-resource-ids). -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 family name of -// the [ECS task -// definition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html) -// used to create the ECS task. -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 -// the task definition used to create the ECS task. -func AWSECSTaskRevision(val string) attribute.KeyValue { - return AWSECSTaskRevisionKey.String(val) -} - -// Attributes for 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) -} - -// Attributes for AWS Logs. -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) -} - -// Attributes for AWS Lambda. -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 AWS S3. -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) -} - -// The web browser attributes -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) -} - -// 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) -} - -// 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 Apps - CloudPlatformAzureContainerApps = CloudPlatformKey.String("azure_container_apps") - // 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) -} - -// Attributes for CloudEvents. -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: Optional - // 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: Optional - // 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) -} - -// 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) -} - -// 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") - - // ContainerCPUStateKey is the attribute Key conforming to the - // "container.cpu.state" semantic conventions. It represents the CPU state - // for this data point. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'user', 'kernel' - ContainerCPUStateKey = attribute.Key("container.cpu.state") - - // 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 assigned 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") -) - -var ( - // When tasks of the cgroup are in user mode (Linux). When all container processes are in user mode (Windows) - ContainerCPUStateUser = ContainerCPUStateKey.String("user") - // When CPU is used by the system (host OS) - ContainerCPUStateSystem = ContainerCPUStateKey.String("system") - // When tasks of the cgroup are in kernel mode (Linux). When all container processes are in kernel mode (Windows) - ContainerCPUStateKernel = ContainerCPUStateKey.String("kernel") -) - -// 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) -} - -// This group defines the attributes used to describe telemetry in the context -// of databases. -const ( - // DBClientConnectionsPoolNameKey is the attribute Key conforming to the - // "db.client.connections.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, instrumentation should use a combination of `server.address` and - // `server.port` attributes formatted as `server.address:server.port`. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'myDataSource' - DBClientConnectionsPoolNameKey = attribute.Key("db.client.connections.pool.name") - - // DBClientConnectionsStateKey is the attribute Key conforming to the - // "db.client.connections.state" semantic conventions. It represents the - // state of a connection in the pool - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'idle' - DBClientConnectionsStateKey = attribute.Key("db.client.connections.state") - - // DBCollectionNameKey is the attribute Key conforming to the - // "db.collection.name" semantic conventions. It represents the name of a - // collection (table, container) within the database. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'public.users', 'customers' - // Note: If the collection name is parsed from the query, it SHOULD match - // the value provided in the query and may be qualified with the schema and - // database name. - // It is RECOMMENDED to capture the value as provided by the application - // without attempting to do any case normalization. - DBCollectionNameKey = attribute.Key("db.collection.name") - - // DBNamespaceKey is the attribute Key conforming to the "db.namespace" - // semantic conventions. It represents the name of the database, fully - // qualified within the server address and port. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'customers', 'test.users' - // Note: If a database system has multiple namespace components, they - // SHOULD be concatenated (potentially using database system specific - // conventions) from most general to most specific namespace component, and - // more specific namespaces SHOULD NOT be captured without the more general - // namespaces, to ensure that "startswith" queries for the more general - // namespaces will be valid. - // Semantic conventions for individual database systems SHOULD document - // what `db.namespace` means in the context of that system. - // It is RECOMMENDED to capture the value as provided by the application - // without attempting to do any case normalization. - DBNamespaceKey = attribute.Key("db.namespace") - - // DBOperationNameKey is the attribute Key conforming to the - // "db.operation.name" semantic conventions. It represents the name of the - // operation or command being executed. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'findAndModify', 'HMSET', 'SELECT' - // Note: It is RECOMMENDED to capture the value as provided by the - // application without attempting to do any case normalization. - DBOperationNameKey = attribute.Key("db.operation.name") - - // DBQueryTextKey is the attribute Key conforming to the "db.query.text" - // semantic conventions. It represents the database query being executed. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'SELECT * FROM wuser_table where username = ?', 'SET mykey - // "WuValue"' - DBQueryTextKey = attribute.Key("db.query.text") - - // DBSystemKey is the attribute Key conforming to the "db.system" semantic - // conventions. It represents the database management system (DBMS) product - // as identified by the client instrumentation. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Note: The actual DBMS may differ from the one identified by the client. - // For example, when using PostgreSQL client libraries to connect to a - // CockroachDB, the `db.system` is set to `postgresql` based on the - // instrumentation's best knowledge. - DBSystemKey = attribute.Key("db.system") -) - -var ( - // idle - DBClientConnectionsStateIdle = DBClientConnectionsStateKey.String("idle") - // used - DBClientConnectionsStateUsed = DBClientConnectionsStateKey.String("used") -) - -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") -) - -// DBClientConnectionsPoolName returns an attribute KeyValue conforming to -// the "db.client.connections.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, -// instrumentation should use a combination of `server.address` and -// `server.port` attributes formatted as `server.address:server.port`. -func DBClientConnectionsPoolName(val string) attribute.KeyValue { - return DBClientConnectionsPoolNameKey.String(val) -} - -// DBCollectionName returns an attribute KeyValue conforming to the -// "db.collection.name" semantic conventions. It represents the name of a -// collection (table, container) within the database. -func DBCollectionName(val string) attribute.KeyValue { - return DBCollectionNameKey.String(val) -} - -// DBNamespace returns an attribute KeyValue conforming to the -// "db.namespace" semantic conventions. It represents the name of the database, -// fully qualified within the server address and port. -func DBNamespace(val string) attribute.KeyValue { - return DBNamespaceKey.String(val) -} - -// DBOperationName returns an attribute KeyValue conforming to the -// "db.operation.name" semantic conventions. It represents the name of the -// operation or command being executed. -func DBOperationName(val string) attribute.KeyValue { - return DBOperationNameKey.String(val) -} - -// DBQueryText returns an attribute KeyValue conforming to the -// "db.query.text" semantic conventions. It represents the database query being -// executed. -func DBQueryText(val string) attribute.KeyValue { - return DBQueryTextKey.String(val) -} - -// This group defines attributes for Cassandra. -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") -) - -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") -) - -// 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) -} - -// This group defines attributes for Azure 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: 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") - - // 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") -) - -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") -) - -// 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) -} - -// 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) -} - -// This group defines attributes for Elasticsearch. -const ( - // 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") -) - -// 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) -} - -// Attributes for software deployments. -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) -} - -// Attributes that 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 deprecated use the - // `device.app.lifecycle` event definition including `android.state` as a - // payload field instead. - // - // Type: Enum - // RequirementLevel: Optional - // 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") -) - -// 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) -} - -// 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) -} - -// 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 a DNS query. -const ( - // DNSQuestionNameKey is the attribute Key conforming to the - // "dns.question.name" semantic conventions. It represents the name being - // queried. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'www.example.com', 'opentelemetry.io' - // Note: If the name field contains non-printable characters (below 32 or - // above 126), those characters should be represented as escaped base 10 - // integers (\DDD). Back slashes and quotes should be escaped. Tabs, - // carriage returns, and line feeds should be converted to \t, \r, and \n - // respectively. - DNSQuestionNameKey = attribute.Key("dns.question.name") -) - -// DNSQuestionName returns an attribute KeyValue conforming to the -// "dns.question.name" semantic conventions. It represents the name being -// queried. -func DNSQuestionName(val string) attribute.KeyValue { - return DNSQuestionNameKey.String(val) -} - -// Attributes for operations 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) -} - -// 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. - // - // When `error.type` is set to a type (e.g., an exception type), its - // canonical class name identifying the type within the artifact SHOULD be - // used. - // - // 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") -) - -// 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: Optional - // 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.33.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 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: 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 for recording span - // exceptions](https://opentelemetry.io/docs/specs/semconv/exceptions/exceptions-spans/#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: 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") - - // 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") -) - -// 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) -} - -// FaaS attributes -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") - - // 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") - - // 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: Optional - // 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: Optional - // 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") - - // 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") - - // 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") - - // FaaSInvokedNameKey is the attribute Key conforming to the - // "faas.invoked_name" semantic conventions. It represents the name of the - // invoked function. - // - // Type: string - // RequirementLevel: Optional - // 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: Optional - // 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: 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") - - // 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: Optional - // 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") - - // 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") - - // 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") - - // 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") -) - -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") -) - -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") -) - -// 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) -} - -// 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) -} - -// 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) -} - -// 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) -} - -// 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) -} - -// 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) -} - -// 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) -} - -// 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) -} - -// 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) -} - -// Attributes for Feature Flags. -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: Optional - // 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: Optional - // 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: Optional - // 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) -} - -// Describes file attributes. -const ( - // FileDirectoryKey is the attribute Key conforming to the "file.directory" - // semantic conventions. It represents the directory where the file is - // located. It should include the drive letter, when appropriate. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '/home/user', 'C:\\Program Files\\MyApp' - FileDirectoryKey = attribute.Key("file.directory") - - // FileExtensionKey is the attribute Key conforming to the "file.extension" - // semantic conventions. It represents the file extension, excluding the - // leading dot. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'png', 'gz' - // Note: When the file name has multiple extensions (example.tar.gz), only - // the last one should be captured ("gz", not "tar.gz"). - FileExtensionKey = attribute.Key("file.extension") - - // FileNameKey is the attribute Key conforming to the "file.name" semantic - // conventions. It represents the name of the file including the extension, - // without the directory. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'example.png' - FileNameKey = attribute.Key("file.name") - - // FilePathKey is the attribute Key conforming to the "file.path" semantic - // conventions. It represents the full path to the file, including the file - // name. It should include the drive letter, when appropriate. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '/home/alice/example.png', 'C:\\Program - // Files\\MyApp\\myapp.exe' - FilePathKey = attribute.Key("file.path") - - // FileSizeKey is the attribute Key conforming to the "file.size" semantic - // conventions. It represents the file size in bytes. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - FileSizeKey = attribute.Key("file.size") -) - -// FileDirectory returns an attribute KeyValue conforming to the -// "file.directory" semantic conventions. It represents the directory where the -// file is located. It should include the drive letter, when appropriate. -func FileDirectory(val string) attribute.KeyValue { - return FileDirectoryKey.String(val) -} - -// FileExtension returns an attribute KeyValue conforming to the -// "file.extension" semantic conventions. It represents the file extension, -// excluding the leading dot. -func FileExtension(val string) attribute.KeyValue { - return FileExtensionKey.String(val) -} - -// FileName returns an attribute KeyValue conforming to the "file.name" -// semantic conventions. It represents the name of the file including the -// extension, without the directory. -func FileName(val string) attribute.KeyValue { - return FileNameKey.String(val) -} - -// FilePath returns an attribute KeyValue conforming to the "file.path" -// semantic conventions. It represents the full path to the file, including the -// file name. It should include the drive letter, when appropriate. -func FilePath(val string) attribute.KeyValue { - return FilePathKey.String(val) -} - -// FileSize returns an attribute KeyValue conforming to the "file.size" -// semantic conventions. It represents the file size in bytes. -func FileSize(val int) attribute.KeyValue { - return FileSizeKey.Int(val) -} - -// Attributes for 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) -} - -// Attributes for 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) -} - -// The attributes used to describe telemetry in the context of LLM (Large -// Language Models) requests and responses. -const ( - // GenAiCompletionKey is the attribute Key conforming to the - // "gen_ai.completion" semantic conventions. It represents the full - // response received from the LLM. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: "[{'role': 'assistant', 'content': 'The capital of France is - // Paris.'}]" - // Note: It's RECOMMENDED to format completions as JSON string matching - // [OpenAI messages - // format](https://platform.openai.com/docs/guides/text-generation) - GenAiCompletionKey = attribute.Key("gen_ai.completion") - - // GenAiPromptKey is the attribute Key conforming to the "gen_ai.prompt" - // semantic conventions. It represents the full prompt sent to an LLM. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: "[{'role': 'user', 'content': 'What is the capital of - // France?'}]" - // Note: It's RECOMMENDED to format prompts as JSON string matching [OpenAI - // messages - // format](https://platform.openai.com/docs/guides/text-generation) - GenAiPromptKey = attribute.Key("gen_ai.prompt") - - // GenAiRequestMaxTokensKey is the attribute Key conforming to the - // "gen_ai.request.max_tokens" semantic conventions. It represents the - // maximum number of tokens the LLM generates for a request. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 100 - GenAiRequestMaxTokensKey = attribute.Key("gen_ai.request.max_tokens") - - // GenAiRequestModelKey is the attribute Key conforming to the - // "gen_ai.request.model" semantic conventions. It represents the name of - // the LLM a request is being made to. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'gpt-4' - GenAiRequestModelKey = attribute.Key("gen_ai.request.model") - - // GenAiRequestTemperatureKey is the attribute Key conforming to the - // "gen_ai.request.temperature" semantic conventions. It represents the - // temperature setting for the LLM request. - // - // Type: double - // RequirementLevel: Optional - // Stability: experimental - // Examples: 0.0 - GenAiRequestTemperatureKey = attribute.Key("gen_ai.request.temperature") - - // GenAiRequestTopPKey is the attribute Key conforming to the - // "gen_ai.request.top_p" semantic conventions. It represents the top_p - // sampling setting for the LLM request. - // - // Type: double - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1.0 - GenAiRequestTopPKey = attribute.Key("gen_ai.request.top_p") - - // GenAiResponseFinishReasonsKey is the attribute Key conforming to the - // "gen_ai.response.finish_reasons" semantic conventions. It represents the - // array of reasons the model stopped generating tokens, corresponding to - // each generation received. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'stop' - GenAiResponseFinishReasonsKey = attribute.Key("gen_ai.response.finish_reasons") - - // GenAiResponseIDKey is the attribute Key conforming to the - // "gen_ai.response.id" semantic conventions. It represents the unique - // identifier for the completion. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'chatcmpl-123' - GenAiResponseIDKey = attribute.Key("gen_ai.response.id") - - // GenAiResponseModelKey is the attribute Key conforming to the - // "gen_ai.response.model" semantic conventions. It represents the name of - // the LLM a response was generated from. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'gpt-4-0613' - GenAiResponseModelKey = attribute.Key("gen_ai.response.model") - - // GenAiSystemKey is the attribute Key conforming to the "gen_ai.system" - // semantic conventions. It represents the Generative AI product as - // identified by the client instrumentation. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'openai' - // Note: The actual GenAI product may differ from the one identified by the - // client. For example, when using OpenAI client libraries to communicate - // with Mistral, the `gen_ai.system` is set to `openai` based on the - // instrumentation's best knowledge. - GenAiSystemKey = attribute.Key("gen_ai.system") - - // GenAiUsageCompletionTokensKey is the attribute Key conforming to the - // "gen_ai.usage.completion_tokens" semantic conventions. It represents the - // number of tokens used in the LLM response (completion). - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 180 - GenAiUsageCompletionTokensKey = attribute.Key("gen_ai.usage.completion_tokens") - - // GenAiUsagePromptTokensKey is the attribute Key conforming to the - // "gen_ai.usage.prompt_tokens" semantic conventions. It represents the - // number of tokens used in the LLM prompt. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 100 - GenAiUsagePromptTokensKey = attribute.Key("gen_ai.usage.prompt_tokens") -) - -var ( - // OpenAI - GenAiSystemOpenai = GenAiSystemKey.String("openai") -) - -// GenAiCompletion returns an attribute KeyValue conforming to the -// "gen_ai.completion" semantic conventions. It represents the full response -// received from the LLM. -func GenAiCompletion(val string) attribute.KeyValue { - return GenAiCompletionKey.String(val) -} - -// GenAiPrompt returns an attribute KeyValue conforming to the -// "gen_ai.prompt" semantic conventions. It represents the full prompt sent to -// an LLM. -func GenAiPrompt(val string) attribute.KeyValue { - return GenAiPromptKey.String(val) -} - -// GenAiRequestMaxTokens returns an attribute KeyValue conforming to the -// "gen_ai.request.max_tokens" semantic conventions. It represents the maximum -// number of tokens the LLM generates for a request. -func GenAiRequestMaxTokens(val int) attribute.KeyValue { - return GenAiRequestMaxTokensKey.Int(val) -} - -// GenAiRequestModel returns an attribute KeyValue conforming to the -// "gen_ai.request.model" semantic conventions. It represents the name of the -// LLM a request is being made to. -func GenAiRequestModel(val string) attribute.KeyValue { - return GenAiRequestModelKey.String(val) -} - -// GenAiRequestTemperature returns an attribute KeyValue conforming to the -// "gen_ai.request.temperature" semantic conventions. It represents the -// temperature setting for the LLM request. -func GenAiRequestTemperature(val float64) attribute.KeyValue { - return GenAiRequestTemperatureKey.Float64(val) -} - -// GenAiRequestTopP returns an attribute KeyValue conforming to the -// "gen_ai.request.top_p" semantic conventions. It represents the top_p -// sampling setting for the LLM request. -func GenAiRequestTopP(val float64) attribute.KeyValue { - return GenAiRequestTopPKey.Float64(val) -} - -// GenAiResponseFinishReasons returns an attribute KeyValue conforming to -// the "gen_ai.response.finish_reasons" semantic conventions. It represents the -// array of reasons the model stopped generating tokens, corresponding to each -// generation received. -func GenAiResponseFinishReasons(val ...string) attribute.KeyValue { - return GenAiResponseFinishReasonsKey.StringSlice(val) -} - -// GenAiResponseID returns an attribute KeyValue conforming to the -// "gen_ai.response.id" semantic conventions. It represents the unique -// identifier for the completion. -func GenAiResponseID(val string) attribute.KeyValue { - return GenAiResponseIDKey.String(val) -} - -// GenAiResponseModel returns an attribute KeyValue conforming to the -// "gen_ai.response.model" semantic conventions. It represents the name of the -// LLM a response was generated from. -func GenAiResponseModel(val string) attribute.KeyValue { - return GenAiResponseModelKey.String(val) -} - -// GenAiUsageCompletionTokens returns an attribute KeyValue conforming to -// the "gen_ai.usage.completion_tokens" semantic conventions. It represents the -// number of tokens used in the LLM response (completion). -func GenAiUsageCompletionTokens(val int) attribute.KeyValue { - return GenAiUsageCompletionTokensKey.Int(val) -} - -// GenAiUsagePromptTokens returns an attribute KeyValue conforming to the -// "gen_ai.usage.prompt_tokens" semantic conventions. It represents the number -// of tokens used in the LLM prompt. -func GenAiUsagePromptTokens(val int) attribute.KeyValue { - return GenAiUsagePromptTokensKey.Int(val) -} - -// Attributes for GraphQL. -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) -} - -// Attributes for the Android platform on which the Android application is -// running. -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) -} - -// 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: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '1', 'r1p1' - 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 string) attribute.KeyValue { - return HostCPUSteppingKey.String(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) -} - -// Semantic convention attributes in the HTTP namespace. -const ( - // HTTPConnectionStateKey is the attribute Key conforming to the - // "http.connection.state" semantic conventions. It represents the state of - // the HTTP connection in the HTTP connection pool. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'active', 'idle' - HTTPConnectionStateKey = attribute.Key("http.connection.state") - - // 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") - - // HTTPRequestSizeKey is the attribute Key conforming to the - // "http.request.size" semantic conventions. It represents the total size - // of the request in bytes. This should be the total number of bytes sent - // over the wire, including the request line (HTTP/1.1), framing (HTTP/2 - // and HTTP/3), headers, and request body if any. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1437 - HTTPRequestSizeKey = attribute.Key("http.request.size") - - // 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") - - // HTTPResponseSizeKey is the attribute Key conforming to the - // "http.response.size" semantic conventions. It represents the total size - // of the response in bytes. This should be the total number of bytes sent - // over the wire, including the status line (HTTP/1.1), framing (HTTP/2 and - // HTTP/3), headers, and response body and trailers if any. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1437 - HTTPResponseSizeKey = attribute.Key("http.response.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 ( - // active state - HTTPConnectionStateActive = HTTPConnectionStateKey.String("active") - // idle state - HTTPConnectionStateIdle = HTTPConnectionStateKey.String("idle") -) - -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) -} - -// HTTPRequestSize returns an attribute KeyValue conforming to the -// "http.request.size" semantic conventions. It represents the total size of -// the request in bytes. This should be the total number of bytes sent over the -// wire, including the request line (HTTP/1.1), framing (HTTP/2 and HTTP/3), -// headers, and request body if any. -func HTTPRequestSize(val int) attribute.KeyValue { - return HTTPRequestSizeKey.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) -} - -// HTTPResponseSize returns an attribute KeyValue conforming to the -// "http.response.size" semantic conventions. It represents the total size of -// the response in bytes. This should be the total number of bytes sent over -// the wire, including the status line (HTTP/1.1), framing (HTTP/2 and HTTP/3), -// headers, and response body and trailers if any. -func HTTPResponseSize(val int) attribute.KeyValue { - return HTTPResponseSizeKey.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) -} - -// Java Virtual machine related 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: Optional - // 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") - - // JvmGcActionKey is the attribute Key conforming to the "jvm.gc.action" - // semantic conventions. It represents the name of the garbage collector - // action. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'end of minor GC', 'end of major GC' - // Note: Garbage collector action is generally obtained via - // [GarbageCollectionNotificationInfo#getGcAction()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcAction()). - JvmGcActionKey = attribute.Key("jvm.gc.action") - - // JvmGcNameKey is the attribute Key conforming to the "jvm.gc.name" - // semantic conventions. It represents the name of the garbage collector. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'G1 Young Generation', 'G1 Old Generation' - // Note: Garbage collector name is generally obtained via - // [GarbageCollectionNotificationInfo#getGcName()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcName()). - JvmGcNameKey = attribute.Key("jvm.gc.name") - - // 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: Optional - // 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: Optional - // Stability: stable - // Examples: 'heap', 'non_heap' - JvmMemoryTypeKey = attribute.Key("jvm.memory.type") - - // JvmThreadDaemonKey is the attribute Key conforming to the - // "jvm.thread.daemon" semantic conventions. It represents the whether the - // thread is daemon or not. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: stable - JvmThreadDaemonKey = attribute.Key("jvm.thread.daemon") - - // JvmThreadStateKey is the attribute Key conforming to the - // "jvm.thread.state" semantic conventions. It represents the state of the - // thread. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - // Examples: 'runnable', 'blocked' - JvmThreadStateKey = attribute.Key("jvm.thread.state") -) - -var ( - // Heap memory - JvmMemoryTypeHeap = JvmMemoryTypeKey.String("heap") - // Non-heap memory - JvmMemoryTypeNonHeap = JvmMemoryTypeKey.String("non_heap") -) - -var ( - // A thread that has not yet started is in this state - JvmThreadStateNew = JvmThreadStateKey.String("new") - // A thread executing in the Java virtual machine is in this state - JvmThreadStateRunnable = JvmThreadStateKey.String("runnable") - // A thread that is blocked waiting for a monitor lock is in this state - JvmThreadStateBlocked = JvmThreadStateKey.String("blocked") - // A thread that is waiting indefinitely for another thread to perform a particular action is in this state - JvmThreadStateWaiting = JvmThreadStateKey.String("waiting") - // A thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state - JvmThreadStateTimedWaiting = JvmThreadStateKey.String("timed_waiting") - // A thread that has exited is in this state - JvmThreadStateTerminated = JvmThreadStateKey.String("terminated") -) - -// 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) -} - -// JvmGcAction returns an attribute KeyValue conforming to the -// "jvm.gc.action" semantic conventions. It represents the name of the garbage -// collector action. -func JvmGcAction(val string) attribute.KeyValue { - return JvmGcActionKey.String(val) -} - -// JvmGcName returns an attribute KeyValue conforming to the "jvm.gc.name" -// semantic conventions. It represents the name of the garbage collector. -func JvmGcName(val string) attribute.KeyValue { - return JvmGcNameKey.String(val) -} - -// 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) -} - -// JvmThreadDaemon returns an attribute KeyValue conforming to the -// "jvm.thread.daemon" semantic conventions. It represents the whether the -// thread is daemon or not. -func JvmThreadDaemon(val bool) attribute.KeyValue { - return JvmThreadDaemonKey.Bool(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 - K8SContainerRestartCountKey = attribute.Key("k8s.container.restart_count") - - // K8SContainerStatusLastTerminatedReasonKey is the attribute Key - // conforming to the "k8s.container.status.last_terminated_reason" semantic - // conventions. It represents the last terminated reason of the Container. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Evicted', 'Error' - K8SContainerStatusLastTerminatedReasonKey = attribute.Key("k8s.container.status.last_terminated_reason") - - // 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) -} - -// K8SContainerStatusLastTerminatedReason returns an attribute KeyValue -// conforming to the "k8s.container.status.last_terminated_reason" semantic -// conventions. It represents the last terminated reason of the Container. -func K8SContainerStatusLastTerminatedReason(val string) attribute.KeyValue { - return K8SContainerStatusLastTerminatedReasonKey.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) -} - -// 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) -} - -// 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") -) - -// Attributes for 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: Optional - // 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) -} - -// The generic attributes that may be used in any Log Record. -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) -} - -// 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") - - // MessagingDestinationPartitionIDKey is the attribute Key conforming to - // the "messaging.destination.partition.id" semantic conventions. It - // represents the identifier of the partition messages are sent to or - // received from, unique within the `messaging.destination.name`. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '1' - MessagingDestinationPartitionIDKey = attribute.Key("messaging.destination.partition.id") - - // 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") - - // 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") - - // MessagingOperationNameKey is the attribute Key conforming to the - // "messaging.operation.name" semantic conventions. It represents the - // system-specific name of the messaging operation. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'ack', 'nack', 'send' - MessagingOperationNameKey = attribute.Key("messaging.operation.name") - - // MessagingOperationTypeKey is the attribute Key conforming to the - // "messaging.operation.type" semantic conventions. It represents a string - // identifying the type of the messaging operation. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Note: If a custom value is used, it MUST be of low cardinality. - MessagingOperationTypeKey = attribute.Key("messaging.operation.type") - - // MessagingSystemKey is the attribute Key conforming to the - // "messaging.system" semantic conventions. It represents the messaging - // system as identified by the client instrumentation. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Note: The actual messaging system may differ from the one known by the - // client. For example, when using Kafka client libraries to communicate - // with Azure Event Hubs, the `messaging.system` is set to `kafka` based on - // the instrumentation's best knowledge. - 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 - MessagingOperationTypePublish = MessagingOperationTypeKey.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 - MessagingOperationTypeCreate = MessagingOperationTypeKey.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 - MessagingOperationTypeReceive = MessagingOperationTypeKey.String("receive") - // One or more messages are delivered to or processed by a consumer - MessagingOperationTypeDeliver = MessagingOperationTypeKey.String("process") - // One or more messages are settled - MessagingOperationTypeSettle = MessagingOperationTypeKey.String("settle") -) - -var ( - // Apache ActiveMQ - MessagingSystemActivemq = MessagingSystemKey.String("activemq") - // Amazon Simple Queue Service (SQS) - MessagingSystemAWSSqs = MessagingSystemKey.String("aws_sqs") - // Azure Event Grid - MessagingSystemEventgrid = MessagingSystemKey.String("eventgrid") - // Azure Event Hubs - MessagingSystemEventhubs = MessagingSystemKey.String("eventhubs") - // Azure Service Bus - MessagingSystemServicebus = MessagingSystemKey.String("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) -} - -// MessagingDestinationPartitionID returns an attribute KeyValue conforming -// to the "messaging.destination.partition.id" semantic conventions. It -// represents the identifier of the partition messages are sent to or received -// from, unique within the `messaging.destination.name`. -func MessagingDestinationPartitionID(val string) attribute.KeyValue { - return MessagingDestinationPartitionIDKey.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) -} - -// 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) -} - -// MessagingOperationName returns an attribute KeyValue conforming to the -// "messaging.operation.name" semantic conventions. It represents the -// system-specific name of the messaging operation. -func MessagingOperationName(val string) attribute.KeyValue { - return MessagingOperationNameKey.String(val) -} - -// This group describes attributes specific to Apache Kafka. -const ( - // 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") - - // 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") -) - -// 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) -} - -// 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) -} - -// This group describes attributes specific to 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: Optional - // Stability: experimental - // Examples: 'myKey' - MessagingRabbitmqDestinationRoutingKeyKey = attribute.Key("messaging.rabbitmq.destination.routing_key") - - // MessagingRabbitmqMessageDeliveryTagKey is the attribute Key conforming - // to the "messaging.rabbitmq.message.delivery_tag" semantic conventions. - // It represents the rabbitMQ message delivery tag - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 123 - MessagingRabbitmqMessageDeliveryTagKey = attribute.Key("messaging.rabbitmq.message.delivery_tag") -) - -// 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) -} - -// MessagingRabbitmqMessageDeliveryTag returns an attribute KeyValue -// conforming to the "messaging.rabbitmq.message.delivery_tag" semantic -// conventions. It represents the rabbitMQ message delivery tag -func MessagingRabbitmqMessageDeliveryTag(val int) attribute.KeyValue { - return MessagingRabbitmqMessageDeliveryTagKey.Int(val) -} - -// This group describes attributes specific to RocketMQ. -const ( - // 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") -) - -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") -) - -// 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) -} - -// This group describes attributes specific to GCP Pub/Sub. -const ( - // MessagingGCPPubsubMessageAckDeadlineKey is the attribute Key conforming - // to the "messaging.gcp_pubsub.message.ack_deadline" semantic conventions. - // It represents the ack deadline in seconds set for the modify ack - // deadline request. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 10 - MessagingGCPPubsubMessageAckDeadlineKey = attribute.Key("messaging.gcp_pubsub.message.ack_deadline") - - // MessagingGCPPubsubMessageAckIDKey is the attribute Key conforming to the - // "messaging.gcp_pubsub.message.ack_id" semantic conventions. It - // represents the ack id for a given message. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'ack_id' - MessagingGCPPubsubMessageAckIDKey = attribute.Key("messaging.gcp_pubsub.message.ack_id") - - // MessagingGCPPubsubMessageDeliveryAttemptKey is the attribute Key - // conforming to the "messaging.gcp_pubsub.message.delivery_attempt" - // semantic conventions. It represents the delivery attempt for a given - // message. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 2 - MessagingGCPPubsubMessageDeliveryAttemptKey = attribute.Key("messaging.gcp_pubsub.message.delivery_attempt") - - // 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") -) - -// MessagingGCPPubsubMessageAckDeadline returns an attribute KeyValue -// conforming to the "messaging.gcp_pubsub.message.ack_deadline" semantic -// conventions. It represents the ack deadline in seconds set for the modify -// ack deadline request. -func MessagingGCPPubsubMessageAckDeadline(val int) attribute.KeyValue { - return MessagingGCPPubsubMessageAckDeadlineKey.Int(val) -} - -// MessagingGCPPubsubMessageAckID returns an attribute KeyValue conforming -// to the "messaging.gcp_pubsub.message.ack_id" semantic conventions. It -// represents the ack id for a given message. -func MessagingGCPPubsubMessageAckID(val string) attribute.KeyValue { - return MessagingGCPPubsubMessageAckIDKey.String(val) -} - -// MessagingGCPPubsubMessageDeliveryAttempt returns an attribute KeyValue -// conforming to the "messaging.gcp_pubsub.message.delivery_attempt" semantic -// conventions. It represents the delivery attempt for a given message. -func MessagingGCPPubsubMessageDeliveryAttempt(val int) attribute.KeyValue { - return MessagingGCPPubsubMessageDeliveryAttemptKey.Int(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) -} - -// This group describes attributes specific to Azure Service Bus. -const ( - // MessagingServicebusDestinationSubscriptionNameKey is the attribute Key - // conforming to the "messaging.servicebus.destination.subscription_name" - // semantic conventions. It represents the name of the subscription in the - // topic messages are received from. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'mySubscription' - MessagingServicebusDestinationSubscriptionNameKey = attribute.Key("messaging.servicebus.destination.subscription_name") - - // MessagingServicebusDispositionStatusKey is the attribute Key conforming - // to the "messaging.servicebus.disposition_status" semantic conventions. - // It represents the describes the [settlement - // type](https://learn.microsoft.com/azure/service-bus-messaging/message-transfers-locks-settlement#peeklock). - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - MessagingServicebusDispositionStatusKey = attribute.Key("messaging.servicebus.disposition_status") - - // MessagingServicebusMessageDeliveryCountKey is the attribute Key - // conforming to the "messaging.servicebus.message.delivery_count" semantic - // conventions. It represents the number of deliveries that have been - // attempted for this message. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 2 - MessagingServicebusMessageDeliveryCountKey = attribute.Key("messaging.servicebus.message.delivery_count") - - // MessagingServicebusMessageEnqueuedTimeKey is the attribute Key - // conforming to the "messaging.servicebus.message.enqueued_time" semantic - // conventions. It represents the UTC epoch seconds at which the message - // has been accepted and stored in the entity. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1701393730 - MessagingServicebusMessageEnqueuedTimeKey = attribute.Key("messaging.servicebus.message.enqueued_time") -) - -var ( - // Message is completed - MessagingServicebusDispositionStatusComplete = MessagingServicebusDispositionStatusKey.String("complete") - // Message is abandoned - MessagingServicebusDispositionStatusAbandon = MessagingServicebusDispositionStatusKey.String("abandon") - // Message is sent to dead letter queue - MessagingServicebusDispositionStatusDeadLetter = MessagingServicebusDispositionStatusKey.String("dead_letter") - // Message is deferred - MessagingServicebusDispositionStatusDefer = MessagingServicebusDispositionStatusKey.String("defer") -) - -// MessagingServicebusDestinationSubscriptionName returns an attribute -// KeyValue conforming to the -// "messaging.servicebus.destination.subscription_name" semantic conventions. -// It represents the name of the subscription in the topic messages are -// received from. -func MessagingServicebusDestinationSubscriptionName(val string) attribute.KeyValue { - return MessagingServicebusDestinationSubscriptionNameKey.String(val) -} - -// MessagingServicebusMessageDeliveryCount returns an attribute KeyValue -// conforming to the "messaging.servicebus.message.delivery_count" semantic -// conventions. It represents the number of deliveries that have been attempted -// for this message. -func MessagingServicebusMessageDeliveryCount(val int) attribute.KeyValue { - return MessagingServicebusMessageDeliveryCountKey.Int(val) -} - -// MessagingServicebusMessageEnqueuedTime returns an attribute KeyValue -// conforming to the "messaging.servicebus.message.enqueued_time" semantic -// conventions. It represents the UTC epoch seconds at which the message has -// been accepted and stored in the entity. -func MessagingServicebusMessageEnqueuedTime(val int) attribute.KeyValue { - return MessagingServicebusMessageEnqueuedTimeKey.Int(val) -} - -// This group describes attributes specific to Azure Event Hubs. -const ( - // MessagingEventhubsConsumerGroupKey is the attribute Key conforming to - // the "messaging.eventhubs.consumer.group" semantic conventions. It - // represents the name of the consumer group the event consumer is - // associated with. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'indexer' - MessagingEventhubsConsumerGroupKey = attribute.Key("messaging.eventhubs.consumer.group") - - // MessagingEventhubsMessageEnqueuedTimeKey is the attribute Key conforming - // to the "messaging.eventhubs.message.enqueued_time" semantic conventions. - // It represents the UTC epoch seconds at which the message has been - // accepted and stored in the entity. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1701393730 - MessagingEventhubsMessageEnqueuedTimeKey = attribute.Key("messaging.eventhubs.message.enqueued_time") -) - -// MessagingEventhubsConsumerGroup returns an attribute KeyValue conforming -// to the "messaging.eventhubs.consumer.group" semantic conventions. It -// represents the name of the consumer group the event consumer is associated -// with. -func MessagingEventhubsConsumerGroup(val string) attribute.KeyValue { - return MessagingEventhubsConsumerGroupKey.String(val) -} - -// MessagingEventhubsMessageEnqueuedTime returns an attribute KeyValue -// conforming to the "messaging.eventhubs.message.enqueued_time" semantic -// conventions. It represents the UTC epoch seconds at which the message has -// been accepted and stored in the entity. -func MessagingEventhubsMessageEnqueuedTime(val int) attribute.KeyValue { - return MessagingEventhubsMessageEnqueuedTimeKey.Int(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 - // actual version of the protocol used for network communication. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '1.1', '2' - // Note: If protocol version is subject to negotiation (for example using - // [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute - // SHOULD be set to the negotiated version. If the actual protocol version - // is not known, this attribute SHOULD NOT be set. - 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 actual -// version of the protocol used for network communication. -func NetworkProtocolVersion(val string) attribute.KeyValue { - return NetworkProtocolVersionKey.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) -} - -// Attributes used by the OpenTracing Shim layer. -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") -) - -// 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) -} - -// Attributes reserved for OpenTelemetry -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) -} - -// 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) -} - -// 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) -} - -// 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") - - // ProcessContextSwitchTypeKey is the attribute Key conforming to the - // "process.context_switch_type" semantic conventions. It represents the - // specifies whether the context switches for this data point were - // voluntary or involuntary. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - ProcessContextSwitchTypeKey = attribute.Key("process.context_switch_type") - - // ProcessCreationTimeKey is the attribute Key conforming to the - // "process.creation.time" semantic conventions. It represents the date and - // time the process was created, in ISO 8601 format. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '2023-11-21T09:25:34.853Z' - ProcessCreationTimeKey = attribute.Key("process.creation.time") - - // 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") - - // ProcessExitCodeKey is the attribute Key conforming to the - // "process.exit.code" semantic conventions. It represents the exit code of - // the process. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 127 - ProcessExitCodeKey = attribute.Key("process.exit.code") - - // ProcessExitTimeKey is the attribute Key conforming to the - // "process.exit.time" semantic conventions. It represents the date and - // time the process exited, in ISO 8601 format. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '2023-11-21T09:26:12.315Z' - ProcessExitTimeKey = attribute.Key("process.exit.time") - - // ProcessGroupLeaderPIDKey is the attribute Key conforming to the - // "process.group_leader.pid" semantic conventions. It represents the PID - // of the process's group leader. This is also the process group ID (PGID) - // of the process. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 23 - ProcessGroupLeaderPIDKey = attribute.Key("process.group_leader.pid") - - // ProcessInteractiveKey is the attribute Key conforming to the - // "process.interactive" semantic conventions. It represents the whether - // the process is connected to an interactive shell. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - ProcessInteractiveKey = attribute.Key("process.interactive") - - // 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") - - // ProcessPagingFaultTypeKey is the attribute Key conforming to the - // "process.paging.fault_type" semantic conventions. It represents the type - // of page fault for this data point. Type `major` is for major/hard page - // faults, and `minor` is for minor/soft page faults. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - ProcessPagingFaultTypeKey = attribute.Key("process.paging.fault_type") - - // 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") - - // ProcessRealUserIDKey is the attribute Key conforming to the - // "process.real_user.id" semantic conventions. It represents the real user - // ID (RUID) of the process. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1000 - ProcessRealUserIDKey = attribute.Key("process.real_user.id") - - // ProcessRealUserNameKey is the attribute Key conforming to the - // "process.real_user.name" semantic conventions. It represents the - // username of the real user of the process. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'operator' - ProcessRealUserNameKey = attribute.Key("process.real_user.name") - - // 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") - - // ProcessSavedUserIDKey is the attribute Key conforming to the - // "process.saved_user.id" semantic conventions. It represents the saved - // user ID (SUID) of the process. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1002 - ProcessSavedUserIDKey = attribute.Key("process.saved_user.id") - - // ProcessSavedUserNameKey is the attribute Key conforming to the - // "process.saved_user.name" semantic conventions. It represents the - // username of the saved user. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'operator' - ProcessSavedUserNameKey = attribute.Key("process.saved_user.name") - - // ProcessSessionLeaderPIDKey is the attribute Key conforming to the - // "process.session_leader.pid" semantic conventions. It represents the PID - // of the process's session leader. This is also the session ID (SID) of - // the process. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 14 - ProcessSessionLeaderPIDKey = attribute.Key("process.session_leader.pid") - - // ProcessUserIDKey is the attribute Key conforming to the - // "process.user.id" semantic conventions. It represents the effective user - // ID (EUID) of the process. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1001 - ProcessUserIDKey = attribute.Key("process.user.id") - - // ProcessUserNameKey is the attribute Key conforming to the - // "process.user.name" semantic conventions. It represents the username of - // the effective user of the process. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'root' - ProcessUserNameKey = attribute.Key("process.user.name") - - // ProcessVpidKey is the attribute Key conforming to the "process.vpid" - // semantic conventions. It represents the virtual process identifier. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 12 - // Note: The process ID within a PID namespace. This is not necessarily - // unique across all processes on the host but it is unique within the - // process namespace that the process exists within. - ProcessVpidKey = attribute.Key("process.vpid") -) - -var ( - // voluntary - ProcessContextSwitchTypeVoluntary = ProcessContextSwitchTypeKey.String("voluntary") - // involuntary - ProcessContextSwitchTypeInvoluntary = ProcessContextSwitchTypeKey.String("involuntary") -) - -var ( - // major - ProcessPagingFaultTypeMajor = ProcessPagingFaultTypeKey.String("major") - // minor - ProcessPagingFaultTypeMinor = ProcessPagingFaultTypeKey.String("minor") -) - -// 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) -} - -// ProcessCreationTime returns an attribute KeyValue conforming to the -// "process.creation.time" semantic conventions. It represents the date and -// time the process was created, in ISO 8601 format. -func ProcessCreationTime(val string) attribute.KeyValue { - return ProcessCreationTimeKey.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) -} - -// ProcessExitCode returns an attribute KeyValue conforming to the -// "process.exit.code" semantic conventions. It represents the exit code of the -// process. -func ProcessExitCode(val int) attribute.KeyValue { - return ProcessExitCodeKey.Int(val) -} - -// ProcessExitTime returns an attribute KeyValue conforming to the -// "process.exit.time" semantic conventions. It represents the date and time -// the process exited, in ISO 8601 format. -func ProcessExitTime(val string) attribute.KeyValue { - return ProcessExitTimeKey.String(val) -} - -// ProcessGroupLeaderPID returns an attribute KeyValue conforming to the -// "process.group_leader.pid" semantic conventions. It represents the PID of -// the process's group leader. This is also the process group ID (PGID) of the -// process. -func ProcessGroupLeaderPID(val int) attribute.KeyValue { - return ProcessGroupLeaderPIDKey.Int(val) -} - -// ProcessInteractive returns an attribute KeyValue conforming to the -// "process.interactive" semantic conventions. It represents the whether the -// process is connected to an interactive shell. -func ProcessInteractive(val bool) attribute.KeyValue { - return ProcessInteractiveKey.Bool(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) -} - -// ProcessRealUserID returns an attribute KeyValue conforming to the -// "process.real_user.id" semantic conventions. It represents the real user ID -// (RUID) of the process. -func ProcessRealUserID(val int) attribute.KeyValue { - return ProcessRealUserIDKey.Int(val) -} - -// ProcessRealUserName returns an attribute KeyValue conforming to the -// "process.real_user.name" semantic conventions. It represents the username of -// the real user of the process. -func ProcessRealUserName(val string) attribute.KeyValue { - return ProcessRealUserNameKey.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) -} - -// 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) -} - -// ProcessSavedUserID returns an attribute KeyValue conforming to the -// "process.saved_user.id" semantic conventions. It represents the saved user -// ID (SUID) of the process. -func ProcessSavedUserID(val int) attribute.KeyValue { - return ProcessSavedUserIDKey.Int(val) -} - -// ProcessSavedUserName returns an attribute KeyValue conforming to the -// "process.saved_user.name" semantic conventions. It represents the username -// of the saved user. -func ProcessSavedUserName(val string) attribute.KeyValue { - return ProcessSavedUserNameKey.String(val) -} - -// ProcessSessionLeaderPID returns an attribute KeyValue conforming to the -// "process.session_leader.pid" semantic conventions. It represents the PID of -// the process's session leader. This is also the session ID (SID) of the -// process. -func ProcessSessionLeaderPID(val int) attribute.KeyValue { - return ProcessSessionLeaderPIDKey.Int(val) -} - -// ProcessUserID returns an attribute KeyValue conforming to the -// "process.user.id" semantic conventions. It represents the effective user ID -// (EUID) of the process. -func ProcessUserID(val int) attribute.KeyValue { - return ProcessUserIDKey.Int(val) -} - -// ProcessUserName returns an attribute KeyValue conforming to the -// "process.user.name" semantic conventions. It represents the username of the -// effective user of the process. -func ProcessUserName(val string) attribute.KeyValue { - return ProcessUserNameKey.String(val) -} - -// ProcessVpid returns an attribute KeyValue conforming to the -// "process.vpid" semantic conventions. It represents the virtual process -// identifier. -func ProcessVpid(val int) attribute.KeyValue { - return ProcessVpidKey.Int(val) -} - -// Attributes for process CPU -const ( - // ProcessCPUStateKey is the attribute Key conforming to the - // "process.cpu.state" semantic conventions. It represents the CPU state of - // the process. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - ProcessCPUStateKey = attribute.Key("process.cpu.state") -) - -var ( - // system - ProcessCPUStateSystem = ProcessCPUStateKey.String("system") - // user - ProcessCPUStateUser = ProcessCPUStateKey.String("user") - // wait - ProcessCPUStateWait = ProcessCPUStateKey.String("wait") -) - -// 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") - - // RPCMessageCompressedSizeKey is the attribute Key conforming to the - // "rpc.message.compressed_size" semantic conventions. It represents the - // compressed size of the message in bytes. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - RPCMessageCompressedSizeKey = attribute.Key("rpc.message.compressed_size") - - // RPCMessageIDKey is the attribute Key conforming to the "rpc.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. - RPCMessageIDKey = attribute.Key("rpc.message.id") - - // RPCMessageTypeKey is the attribute Key conforming to the - // "rpc.message.type" semantic conventions. It represents the whether this - // is a received or sent message. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - RPCMessageTypeKey = attribute.Key("rpc.message.type") - - // RPCMessageUncompressedSizeKey is the attribute Key conforming to the - // "rpc.message.uncompressed_size" semantic conventions. It represents the - // uncompressed size of the message in bytes. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - RPCMessageUncompressedSizeKey = attribute.Key("rpc.message.uncompressed_size") - - // 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 ( - // sent - RPCMessageTypeSent = RPCMessageTypeKey.String("SENT") - // received - RPCMessageTypeReceived = RPCMessageTypeKey.String("RECEIVED") -) - -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) -} - -// RPCMessageCompressedSize returns an attribute KeyValue conforming to the -// "rpc.message.compressed_size" semantic conventions. It represents the -// compressed size of the message in bytes. -func RPCMessageCompressedSize(val int) attribute.KeyValue { - return RPCMessageCompressedSizeKey.Int(val) -} - -// RPCMessageID returns an attribute KeyValue conforming to the -// "rpc.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 RPCMessageID(val int) attribute.KeyValue { - return RPCMessageIDKey.Int(val) -} - -// RPCMessageUncompressedSize returns an attribute KeyValue conforming to -// the "rpc.message.uncompressed_size" semantic conventions. It represents the -// uncompressed size of the message in bytes. -func RPCMessageUncompressedSize(val int) attribute.KeyValue { - return RPCMessageUncompressedSizeKey.Int(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) -} - -// 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: '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). - // - // Implementations, such as SDKs, are recommended to generate a random - // Version 1 or Version 4 [RFC - // 4122](https://www.ietf.org/rfc/rfc4122.txt) UUID, but are free to use an - // inherent unique ID as the source of - // this value if stability is desirable. In that case, the ID SHOULD be - // used as source of a UUID Version 5 and - // SHOULD use the following UUID as the namespace: - // `4d63009a-8d0f-11ee-aad7-4c796ed8e320`. - // - // UUIDs are typically recommended, as only an opaque value for the - // purposes of identifying a service instance is - // needed. Similar to what can be seen in the man page for the - // [`/etc/machine-id`](https://www.freedesktop.org/software/systemd/man/machine-id.html) - // file, the underlying - // data, such as pod name and namespace should be treated as confidential, - // being the user's choice to expose it - // or not via another resource attribute. - // - // For applications running behind an application server (like unicorn), we - // do not recommend using one identifier - // for all processes participating in the application. Instead, it's - // recommended each division (e.g. a worker - // thread in unicorn) to have its own instance.id. - // - // It's not recommended for a Collector to set `service.instance.id` if it - // can't unambiguously determine the - // service instance that is generating that telemetry. For instance, - // creating an UUID based on `pod.name` will - // likely be wrong, as the Collector might not know from which container - // within that pod the telemetry originated. - // However, Collectors can set the `service.instance.id` if they can - // unambiguously determine the service instance - // for that telemetry. This is typically the case for scraping receivers, - // as they know the target address and - // port. - ServiceInstanceIDKey = attribute.Key("service.instance.id") - - // ServiceNameKey is the attribute Key conforming to the "service.name" - // semantic conventions. It represents the logical name of the service. - // - // Type: string - // RequirementLevel: Optional - // 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), 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") - - // 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") - - // 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: stable - // Examples: '2.0.0', 'a01dbef8a' - ServiceVersionKey = attribute.Key("service.version") -) - -// 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) -} - -// 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) -} - -// 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) -} - -// 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) -} - -// 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) -} - -// 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: stable - // 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: stable - // 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") -) - -// 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) -} - -// Describes System 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 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 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 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 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 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 attributes -const ( - // SystemProcessStatusKey is the attribute Key conforming to the - // "system.process.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' - SystemProcessStatusKey = attribute.Key("system.process.status") -) - -var ( - // running - SystemProcessStatusRunning = SystemProcessStatusKey.String("running") - // sleeping - SystemProcessStatusSleeping = SystemProcessStatusKey.String("sleeping") - // stopped - SystemProcessStatusStopped = SystemProcessStatusKey.String("stopped") - // defunct - SystemProcessStatusDefunct = SystemProcessStatusKey.String("defunct") -) - -// Attributes for telemetry SDK. -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: stable - 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: stable - // 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: stable - // Examples: '1.2.3' - TelemetrySDKVersionKey = attribute.Key("telemetry.sdk.version") - - // 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") -) - -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) -} - -// 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) -} - -// 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) -} - -// 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 ( - // URLDomainKey is the attribute Key conforming to the "url.domain" - // semantic conventions. It represents the domain extracted from the - // `url.full`, such as "opentelemetry.io". - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'www.foo.bar', 'opentelemetry.io', '3.12.167.2', - // '[1080:0:0:0:8:800:200C:417A]' - // Note: In some cases a URL may refer to an IP and/or port directly, - // without a domain name. In this case, the IP address would go to the - // domain field. If the URL contains a [literal IPv6 - // address](https://www.rfc-editor.org/rfc/rfc2732#section-2) enclosed by - // `[` and `]`, the `[` and `]` characters should also be captured in the - // domain field. - URLDomainKey = attribute.Key("url.domain") - - // URLExtensionKey is the attribute Key conforming to the "url.extension" - // semantic conventions. It represents the file extension extracted from - // the `url.full`, excluding the leading dot. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'png', 'gz' - // Note: The file extension is only set if it exists, as not every url has - // a file extension. When the file name has multiple extensions - // `example.tar.gz`, only the last one should be captured `gz`, not - // `tar.gz`. - URLExtensionKey = attribute.Key("url.extension") - - // 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). Sensitive content provided in `url.full` SHOULD be - // scrubbed when instrumentations can identify it. - URLFullKey = attribute.Key("url.full") - - // URLOriginalKey is the attribute Key conforming to the "url.original" - // semantic conventions. It represents the unmodified original URL as seen - // in the event source. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'https://www.foo.bar/search?q=OpenTelemetry#SemConv', - // 'search?q=OpenTelemetry' - // Note: In network monitoring, the observed URL may be a full URL, whereas - // in access logs, the URL is often just represented as a path. This field - // is meant to represent the URL as it was observed, complete or not. - // `url.original` might contain credentials passed via URL in form of - // `https://username:password@www.example.com/`. In such case password and - // username SHOULD NOT be redacted and attribute's value SHOULD remain the - // same. - URLOriginalKey = attribute.Key("url.original") - - // 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' - // Note: Sensitive content provided in `url.path` SHOULD be scrubbed when - // instrumentations can identify it. - URLPathKey = attribute.Key("url.path") - - // URLPortKey is the attribute Key conforming to the "url.port" semantic - // conventions. It represents the port extracted from the `url.full` - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 443 - URLPortKey = attribute.Key("url.port") - - // 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 `url.query` SHOULD be scrubbed when - // instrumentations can identify it. - URLQueryKey = attribute.Key("url.query") - - // URLRegisteredDomainKey is the attribute Key conforming to the - // "url.registered_domain" semantic conventions. It represents the highest - // registered url domain, stripped of the subdomain. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'example.com', 'foo.co.uk' - // Note: This value can be determined precisely with the [public suffix - // list](http://publicsuffix.org). For example, the registered domain for - // `foo.example.com` is `example.com`. Trying to approximate this by simply - // taking the last two labels will not work well for TLDs such as `co.uk`. - URLRegisteredDomainKey = attribute.Key("url.registered_domain") - - // 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") - - // URLSubdomainKey is the attribute Key conforming to the "url.subdomain" - // semantic conventions. It represents the subdomain portion of a fully - // qualified domain name includes all of the names except the host name - // under the registered_domain. In a partially qualified domain, or if the - // qualification level of the full name cannot be determined, subdomain - // contains all of the names below the registered domain. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'east', 'sub2.sub1' - // Note: The subdomain portion of `www.east.mydomain.co.uk` is `east`. If - // the domain has multiple levels of subdomain, such as - // `sub2.sub1.example.com`, the subdomain field should contain `sub2.sub1`, - // with no trailing period. - URLSubdomainKey = attribute.Key("url.subdomain") - - // URLTemplateKey is the attribute Key conforming to the "url.template" - // semantic conventions. It represents the low-cardinality template of an - // [absolute path - // reference](https://www.rfc-editor.org/rfc/rfc3986#section-4.2). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '/users/{id}', '/users/:id', '/users?id={id}' - URLTemplateKey = attribute.Key("url.template") - - // URLTopLevelDomainKey is the attribute Key conforming to the - // "url.top_level_domain" semantic conventions. It represents the effective - // top level domain (eTLD), also known as the domain suffix, is the last - // part of the domain name. For example, the top level domain for - // example.com is `com`. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'com', 'co.uk' - // Note: This value can be determined precisely with the [public suffix - // list](http://publicsuffix.org). - URLTopLevelDomainKey = attribute.Key("url.top_level_domain") -) - -// URLDomain returns an attribute KeyValue conforming to the "url.domain" -// semantic conventions. It represents the domain extracted from the -// `url.full`, such as "opentelemetry.io". -func URLDomain(val string) attribute.KeyValue { - return URLDomainKey.String(val) -} - -// URLExtension returns an attribute KeyValue conforming to the -// "url.extension" semantic conventions. It represents the file extension -// extracted from the `url.full`, excluding the leading dot. -func URLExtension(val string) attribute.KeyValue { - return URLExtensionKey.String(val) -} - -// 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) -} - -// URLOriginal returns an attribute KeyValue conforming to the -// "url.original" semantic conventions. It represents the unmodified original -// URL as seen in the event source. -func URLOriginal(val string) attribute.KeyValue { - return URLOriginalKey.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) -} - -// URLPort returns an attribute KeyValue conforming to the "url.port" -// semantic conventions. It represents the port extracted from the `url.full` -func URLPort(val int) attribute.KeyValue { - return URLPortKey.Int(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) -} - -// URLRegisteredDomain returns an attribute KeyValue conforming to the -// "url.registered_domain" semantic conventions. It represents the highest -// registered url domain, stripped of the subdomain. -func URLRegisteredDomain(val string) attribute.KeyValue { - return URLRegisteredDomainKey.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) -} - -// URLSubdomain returns an attribute KeyValue conforming to the -// "url.subdomain" semantic conventions. It represents the subdomain portion of -// a fully qualified domain name includes all of the names except the host name -// under the registered_domain. In a partially qualified domain, or if the -// qualification level of the full name cannot be determined, subdomain -// contains all of the names below the registered domain. -func URLSubdomain(val string) attribute.KeyValue { - return URLSubdomainKey.String(val) -} - -// URLTemplate returns an attribute KeyValue conforming to the -// "url.template" semantic conventions. It represents the low-cardinality -// template of an [absolute path -// reference](https://www.rfc-editor.org/rfc/rfc3986#section-4.2). -func URLTemplate(val string) attribute.KeyValue { - return URLTemplateKey.String(val) -} - -// URLTopLevelDomain returns an attribute KeyValue conforming to the -// "url.top_level_domain" semantic conventions. It represents the effective top -// level domain (eTLD), also known as the domain suffix, is the last part of -// the domain name. For example, the top level domain for example.com is `com`. -func URLTopLevelDomain(val string) attribute.KeyValue { - return URLTopLevelDomainKey.String(val) -} - -// Describes user-agent attributes. -const ( - // UserAgentNameKey is the attribute Key conforming to the - // "user_agent.name" semantic conventions. It represents the name of the - // user-agent extracted from original. Usually refers to the browser's - // name. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Safari', 'YourApp' - // Note: [Example](https://www.whatsmyua.info) of extracting browser's name - // from original string. In the case of using a user-agent for non-browser - // products, such as microservices with multiple names/versions inside the - // `user_agent.original`, the most significant name SHOULD be selected. In - // such a scenario it should align with `user_agent.version` - UserAgentNameKey = attribute.Key("user_agent.name") - - // 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', 'YourApp/1.0.0 - // grpc-java-okhttp/1.27.2' - UserAgentOriginalKey = attribute.Key("user_agent.original") - - // UserAgentVersionKey is the attribute Key conforming to the - // "user_agent.version" semantic conventions. It represents the version of - // the user-agent extracted from original. Usually refers to the browser's - // version - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '14.1.2', '1.0.0' - // Note: [Example](https://www.whatsmyua.info) of extracting browser's - // version from original string. In the case of using a user-agent for - // non-browser products, such as microservices with multiple names/versions - // inside the `user_agent.original`, the most significant version SHOULD be - // selected. In such a scenario it should align with `user_agent.name` - UserAgentVersionKey = attribute.Key("user_agent.version") -) - -// UserAgentName returns an attribute KeyValue conforming to the -// "user_agent.name" semantic conventions. It represents the name of the -// user-agent extracted from original. Usually refers to the browser's name. -func UserAgentName(val string) attribute.KeyValue { - return UserAgentNameKey.String(val) -} - -// 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) -} - -// UserAgentVersion returns an attribute KeyValue conforming to the -// "user_agent.version" semantic conventions. It represents the version of the -// user-agent extracted from original. Usually refers to the browser's version -func UserAgentVersion(val string) attribute.KeyValue { - return UserAgentVersionKey.String(val) -} - -// The attributes used to describe the packaged software running the -// application code. -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: Optional - // 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) -} diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/doc.go b/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/doc.go deleted file mode 100644 index d031bbea78..0000000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.26.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.26.0 -// version of the OpenTelemetry semantic conventions. -package semconv // import "go.opentelemetry.io/otel/semconv/v1.26.0" diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/exception.go b/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/exception.go deleted file mode 100644 index bfaee0d56e..0000000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.26.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.26.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.26.0/metric.go b/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/metric.go deleted file mode 100644 index fcdb9f4859..0000000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/metric.go +++ /dev/null @@ -1,1307 +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.26.0" - -const ( - - // ContainerCPUTime is the metric conforming to the "container.cpu.time" - // semantic conventions. It represents the total CPU time consumed. - // Instrument: counter - // Unit: s - // Stability: Experimental - ContainerCPUTimeName = "container.cpu.time" - ContainerCPUTimeUnit = "s" - ContainerCPUTimeDescription = "Total CPU time consumed" - - // ContainerMemoryUsage is the metric conforming to the - // "container.memory.usage" semantic conventions. It represents the memory - // usage of the container. - // Instrument: counter - // Unit: By - // Stability: Experimental - ContainerMemoryUsageName = "container.memory.usage" - ContainerMemoryUsageUnit = "By" - ContainerMemoryUsageDescription = "Memory usage of the container." - - // ContainerDiskIo is the metric conforming to the "container.disk.io" semantic - // conventions. It represents the disk bytes for the container. - // Instrument: counter - // Unit: By - // Stability: Experimental - ContainerDiskIoName = "container.disk.io" - ContainerDiskIoUnit = "By" - ContainerDiskIoDescription = "Disk bytes for the container." - - // ContainerNetworkIo is the metric conforming to the "container.network.io" - // semantic conventions. It represents the network bytes for the container. - // Instrument: counter - // Unit: By - // Stability: Experimental - ContainerNetworkIoName = "container.network.io" - ContainerNetworkIoUnit = "By" - ContainerNetworkIoDescription = "Network bytes for the container." - - // DBClientOperationDuration is the metric conforming to the - // "db.client.operation.duration" semantic conventions. It represents the - // duration of database client operations. - // Instrument: histogram - // Unit: s - // Stability: Experimental - DBClientOperationDurationName = "db.client.operation.duration" - DBClientOperationDurationUnit = "s" - DBClientOperationDurationDescription = "Duration of database client operations." - - // DBClientConnectionCount is the metric conforming to the - // "db.client.connection.count" semantic conventions. It represents the number - // of connections that are currently in state described by the `state` - // attribute. - // Instrument: updowncounter - // Unit: {connection} - // Stability: Experimental - DBClientConnectionCountName = "db.client.connection.count" - DBClientConnectionCountUnit = "{connection}" - DBClientConnectionCountDescription = "The number of connections that are currently in state described by the `state` attribute" - - // DBClientConnectionIdleMax is the metric conforming to the - // "db.client.connection.idle.max" semantic conventions. It represents the - // maximum number of idle open connections allowed. - // Instrument: updowncounter - // Unit: {connection} - // Stability: Experimental - DBClientConnectionIdleMaxName = "db.client.connection.idle.max" - DBClientConnectionIdleMaxUnit = "{connection}" - DBClientConnectionIdleMaxDescription = "The maximum number of idle open connections allowed" - - // DBClientConnectionIdleMin is the metric conforming to the - // "db.client.connection.idle.min" semantic conventions. It represents the - // minimum number of idle open connections allowed. - // Instrument: updowncounter - // Unit: {connection} - // Stability: Experimental - DBClientConnectionIdleMinName = "db.client.connection.idle.min" - DBClientConnectionIdleMinUnit = "{connection}" - DBClientConnectionIdleMinDescription = "The minimum number of idle open connections allowed" - - // DBClientConnectionMax is the metric conforming to the - // "db.client.connection.max" semantic conventions. It represents the maximum - // number of open connections allowed. - // Instrument: updowncounter - // Unit: {connection} - // Stability: Experimental - DBClientConnectionMaxName = "db.client.connection.max" - DBClientConnectionMaxUnit = "{connection}" - DBClientConnectionMaxDescription = "The maximum number of open connections allowed" - - // DBClientConnectionPendingRequests is the metric conforming to the - // "db.client.connection.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 - DBClientConnectionPendingRequestsName = "db.client.connection.pending_requests" - DBClientConnectionPendingRequestsUnit = "{request}" - DBClientConnectionPendingRequestsDescription = "The number of pending requests for an open connection, cumulative for the entire pool" - - // DBClientConnectionTimeouts is the metric conforming to the - // "db.client.connection.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 - DBClientConnectionTimeoutsName = "db.client.connection.timeouts" - DBClientConnectionTimeoutsUnit = "{timeout}" - DBClientConnectionTimeoutsDescription = "The number of connection timeouts that have occurred trying to obtain a connection from the pool" - - // DBClientConnectionCreateTime is the metric conforming to the - // "db.client.connection.create_time" semantic conventions. It represents the - // time it took to create a new connection. - // Instrument: histogram - // Unit: s - // Stability: Experimental - DBClientConnectionCreateTimeName = "db.client.connection.create_time" - DBClientConnectionCreateTimeUnit = "s" - DBClientConnectionCreateTimeDescription = "The time it took to create a new connection" - - // DBClientConnectionWaitTime is the metric conforming to the - // "db.client.connection.wait_time" semantic conventions. It represents the - // time it took to obtain an open connection from the pool. - // Instrument: histogram - // Unit: s - // Stability: Experimental - DBClientConnectionWaitTimeName = "db.client.connection.wait_time" - DBClientConnectionWaitTimeUnit = "s" - DBClientConnectionWaitTimeDescription = "The time it took to obtain an open connection from the pool" - - // DBClientConnectionUseTime is the metric conforming to the - // "db.client.connection.use_time" semantic conventions. It represents the time - // between borrowing a connection and returning it to the pool. - // Instrument: histogram - // Unit: s - // Stability: Experimental - DBClientConnectionUseTimeName = "db.client.connection.use_time" - DBClientConnectionUseTimeUnit = "s" - DBClientConnectionUseTimeDescription = "The time between borrowing a connection and returning it to the pool" - - // DBClientConnectionsUsage is the metric conforming to the - // "db.client.connections.usage" semantic conventions. It represents the - // deprecated, use `db.client.connection.count` instead. - // Instrument: updowncounter - // Unit: {connection} - // Stability: Experimental - DBClientConnectionsUsageName = "db.client.connections.usage" - DBClientConnectionsUsageUnit = "{connection}" - DBClientConnectionsUsageDescription = "Deprecated, use `db.client.connection.count` instead." - - // DBClientConnectionsIdleMax is the metric conforming to the - // "db.client.connections.idle.max" semantic conventions. It represents the - // deprecated, use `db.client.connection.idle.max` instead. - // Instrument: updowncounter - // Unit: {connection} - // Stability: Experimental - DBClientConnectionsIdleMaxName = "db.client.connections.idle.max" - DBClientConnectionsIdleMaxUnit = "{connection}" - DBClientConnectionsIdleMaxDescription = "Deprecated, use `db.client.connection.idle.max` instead." - - // DBClientConnectionsIdleMin is the metric conforming to the - // "db.client.connections.idle.min" semantic conventions. It represents the - // deprecated, use `db.client.connection.idle.min` instead. - // Instrument: updowncounter - // Unit: {connection} - // Stability: Experimental - DBClientConnectionsIdleMinName = "db.client.connections.idle.min" - DBClientConnectionsIdleMinUnit = "{connection}" - DBClientConnectionsIdleMinDescription = "Deprecated, use `db.client.connection.idle.min` instead." - - // DBClientConnectionsMax is the metric conforming to the - // "db.client.connections.max" semantic conventions. It represents the - // deprecated, use `db.client.connection.max` instead. - // Instrument: updowncounter - // Unit: {connection} - // Stability: Experimental - DBClientConnectionsMaxName = "db.client.connections.max" - DBClientConnectionsMaxUnit = "{connection}" - DBClientConnectionsMaxDescription = "Deprecated, use `db.client.connection.max` instead." - - // DBClientConnectionsPendingRequests is the metric conforming to the - // "db.client.connections.pending_requests" semantic conventions. It represents - // the deprecated, use `db.client.connection.pending_requests` instead. - // Instrument: updowncounter - // Unit: {request} - // Stability: Experimental - DBClientConnectionsPendingRequestsName = "db.client.connections.pending_requests" - DBClientConnectionsPendingRequestsUnit = "{request}" - DBClientConnectionsPendingRequestsDescription = "Deprecated, use `db.client.connection.pending_requests` instead." - - // DBClientConnectionsTimeouts is the metric conforming to the - // "db.client.connections.timeouts" semantic conventions. It represents the - // deprecated, use `db.client.connection.timeouts` instead. - // Instrument: counter - // Unit: {timeout} - // Stability: Experimental - DBClientConnectionsTimeoutsName = "db.client.connections.timeouts" - DBClientConnectionsTimeoutsUnit = "{timeout}" - DBClientConnectionsTimeoutsDescription = "Deprecated, use `db.client.connection.timeouts` instead." - - // DBClientConnectionsCreateTime is the metric conforming to the - // "db.client.connections.create_time" semantic conventions. It represents the - // deprecated, use `db.client.connection.create_time` instead. Note: the unit - // also changed from `ms` to `s`. - // Instrument: histogram - // Unit: ms - // Stability: Experimental - DBClientConnectionsCreateTimeName = "db.client.connections.create_time" - DBClientConnectionsCreateTimeUnit = "ms" - DBClientConnectionsCreateTimeDescription = "Deprecated, use `db.client.connection.create_time` instead. Note: the unit also changed from `ms` to `s`." - - // DBClientConnectionsWaitTime is the metric conforming to the - // "db.client.connections.wait_time" semantic conventions. It represents the - // deprecated, use `db.client.connection.wait_time` instead. Note: the unit - // also changed from `ms` to `s`. - // Instrument: histogram - // Unit: ms - // Stability: Experimental - DBClientConnectionsWaitTimeName = "db.client.connections.wait_time" - DBClientConnectionsWaitTimeUnit = "ms" - DBClientConnectionsWaitTimeDescription = "Deprecated, use `db.client.connection.wait_time` instead. Note: the unit also changed from `ms` to `s`." - - // DBClientConnectionsUseTime is the metric conforming to the - // "db.client.connections.use_time" semantic conventions. It represents the - // deprecated, use `db.client.connection.use_time` instead. Note: the unit also - // changed from `ms` to `s`. - // Instrument: histogram - // Unit: ms - // Stability: Experimental - DBClientConnectionsUseTimeName = "db.client.connections.use_time" - DBClientConnectionsUseTimeUnit = "ms" - DBClientConnectionsUseTimeDescription = "Deprecated, use `db.client.connection.use_time` instead. Note: the unit also changed from `ms` to `s`." - - // 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." - - // 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: Stable - 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: Stable - 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: Stable - 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: Stable - 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: Stable - 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: Stable - 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: Stable - AspnetcoreRateLimitingRequestsName = "aspnetcore.rate_limiting.requests" - AspnetcoreRateLimitingRequestsUnit = "{request}" - AspnetcoreRateLimitingRequestsDescription = "Number of requests that tried to acquire a rate limiting lease." - - // 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: Stable - 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: Stable - 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: Stable - 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: Stable - 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: Stable - 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: Stable - 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: Stable - 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: Stable - 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: Stable - 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: Stable - 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." - - // 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." - - // 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." - - // MessagingProcessDuration is the metric conforming to the - // "messaging.process.duration" semantic conventions. It represents the - // measures the duration of process operation. - // Instrument: histogram - // Unit: s - // Stability: Experimental - MessagingProcessDurationName = "messaging.process.duration" - MessagingProcessDurationUnit = "s" - MessagingProcessDurationDescription = "Measures the duration of process 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." - - // MessagingProcessMessages is the metric conforming to the - // "messaging.process.messages" semantic conventions. It represents the - // measures the number of processed messages. - // Instrument: counter - // Unit: {message} - // Stability: Experimental - MessagingProcessMessagesName = "messaging.process.messages" - MessagingProcessMessagesUnit = "{message}" - MessagingProcessMessagesDescription = "Measures the number of processed messages." - - // ProcessCPUTime is the metric conforming to the "process.cpu.time" semantic - // conventions. It represents the total CPU seconds broken down by different - // states. - // Instrument: counter - // Unit: s - // Stability: Experimental - ProcessCPUTimeName = "process.cpu.time" - ProcessCPUTimeUnit = "s" - ProcessCPUTimeDescription = "Total CPU seconds broken down by different states." - - // ProcessCPUUtilization is the metric conforming to the - // "process.cpu.utilization" semantic conventions. It represents the difference - // in process.cpu.time since the last measurement, divided by the elapsed time - // and number of CPUs available to the process. - // Instrument: gauge - // Unit: 1 - // Stability: Experimental - ProcessCPUUtilizationName = "process.cpu.utilization" - ProcessCPUUtilizationUnit = "1" - ProcessCPUUtilizationDescription = "Difference in process.cpu.time since the last measurement, divided by the elapsed time and number of CPUs available to the process." - - // ProcessMemoryUsage is the metric conforming to the "process.memory.usage" - // semantic conventions. It represents the amount of physical memory in use. - // Instrument: updowncounter - // Unit: By - // Stability: Experimental - ProcessMemoryUsageName = "process.memory.usage" - ProcessMemoryUsageUnit = "By" - ProcessMemoryUsageDescription = "The amount of physical memory in use." - - // ProcessMemoryVirtual is the metric conforming to the - // "process.memory.virtual" semantic conventions. It represents the amount of - // committed virtual memory. - // Instrument: updowncounter - // Unit: By - // Stability: Experimental - ProcessMemoryVirtualName = "process.memory.virtual" - ProcessMemoryVirtualUnit = "By" - ProcessMemoryVirtualDescription = "The amount of committed virtual memory." - - // ProcessDiskIo is the metric conforming to the "process.disk.io" semantic - // conventions. It represents the disk bytes transferred. - // Instrument: counter - // Unit: By - // Stability: Experimental - ProcessDiskIoName = "process.disk.io" - ProcessDiskIoUnit = "By" - ProcessDiskIoDescription = "Disk bytes transferred." - - // ProcessNetworkIo is the metric conforming to the "process.network.io" - // semantic conventions. It represents the network bytes transferred. - // Instrument: counter - // Unit: By - // Stability: Experimental - ProcessNetworkIoName = "process.network.io" - ProcessNetworkIoUnit = "By" - ProcessNetworkIoDescription = "Network bytes transferred." - - // ProcessThreadCount is the metric conforming to the "process.thread.count" - // semantic conventions. It represents the process threads count. - // Instrument: updowncounter - // Unit: {thread} - // Stability: Experimental - ProcessThreadCountName = "process.thread.count" - ProcessThreadCountUnit = "{thread}" - ProcessThreadCountDescription = "Process threads count." - - // ProcessOpenFileDescriptorCount is the metric conforming to the - // "process.open_file_descriptor.count" semantic conventions. It represents the - // number of file descriptors in use by the process. - // Instrument: updowncounter - // Unit: {count} - // Stability: Experimental - ProcessOpenFileDescriptorCountName = "process.open_file_descriptor.count" - ProcessOpenFileDescriptorCountUnit = "{count}" - ProcessOpenFileDescriptorCountDescription = "Number of file descriptors in use by the process." - - // ProcessContextSwitches is the metric conforming to the - // "process.context_switches" semantic conventions. It represents the number of - // times the process has been context switched. - // Instrument: counter - // Unit: {count} - // Stability: Experimental - ProcessContextSwitchesName = "process.context_switches" - ProcessContextSwitchesUnit = "{count}" - ProcessContextSwitchesDescription = "Number of times the process has been context switched." - - // ProcessPagingFaults is the metric conforming to the "process.paging.faults" - // semantic conventions. It represents the number of page faults the process - // has made. - // Instrument: counter - // Unit: {fault} - // Stability: Experimental - ProcessPagingFaultsName = "process.paging.faults" - ProcessPagingFaultsUnit = "{fault}" - ProcessPagingFaultsDescription = "Number of page faults the process has made." - - // 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." - - // SystemMemoryShared is the metric conforming to the "system.memory.shared" - // semantic conventions. It represents the shared memory used (mostly by - // tmpfs). - // Instrument: updowncounter - // Unit: By - // Stability: Experimental - SystemMemorySharedName = "system.memory.shared" - SystemMemorySharedUnit = "By" - SystemMemorySharedDescription = "Shared memory used (mostly by tmpfs)." - - // 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}" - - // SystemProcessCount is the metric conforming to the "system.process.count" - // semantic conventions. It represents the total number of processes in each - // state. - // Instrument: updowncounter - // Unit: {process} - // Stability: Experimental - SystemProcessCountName = "system.process.count" - SystemProcessCountUnit = "{process}" - SystemProcessCountDescription = "Total number of processes in each state" - - // SystemProcessCreated is the metric conforming to the - // "system.process.created" semantic conventions. It represents the total - // number of processes created over uptime of the host. - // Instrument: counter - // Unit: {process} - // Stability: Experimental - SystemProcessCreatedName = "system.process.created" - SystemProcessCreatedUnit = "{process}" - SystemProcessCreatedDescription = "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.26.0/schema.go b/vendor/go.opentelemetry.io/otel/semconv/v1.26.0/schema.go deleted file mode 100644 index 4c87c7adcc..0000000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.26.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.26.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.26.0" diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.30.0/MIGRATION.md b/vendor/go.opentelemetry.io/otel/semconv/v1.30.0/MIGRATION.md deleted file mode 100644 index 8a11ea28d3..0000000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.30.0/MIGRATION.md +++ /dev/null @@ -1,155 +0,0 @@ -# Semantic Convention Changes - -The `go.opentelemetry.io/otel/semconv/v1.30.0` should be a drop-in replacement for `go.opentelemetry.io/otel/semconv/v1.28.0` with the following exceptions. - -Note: `go.opentelemetry.io/otel/semconv/v1.29.0` does not exist due to bugs from the upstream [OpenTelemetry Semantic Conventions]. - -## Dropped deprecations - -The following declarations have been deprecated in the [OpenTelemetry Semantic Conventions]. -Refer to the respective documentation in that repository for deprecation instructions for each type. - -- `CodeColumn` -- `CodeColumnKey` -- `CodeFunction` -- `CodeFunctionKey` -- `DBCassandraConsistencyLevelAll` -- `DBCassandraConsistencyLevelAny` -- `DBCassandraConsistencyLevelEachQuorum` -- `DBCassandraConsistencyLevelKey` -- `DBCassandraConsistencyLevelLocalOne` -- `DBCassandraConsistencyLevelLocalQuorum` -- `DBCassandraConsistencyLevelLocalSerial` -- `DBCassandraConsistencyLevelOne` -- `DBCassandraConsistencyLevelQuorum` -- `DBCassandraConsistencyLevelSerial` -- `DBCassandraConsistencyLevelThree` -- `DBCassandraConsistencyLevelTwo` -- `DBCassandraCoordinatorDC` -- `DBCassandraCoordinatorDCKey` -- `DBCassandraCoordinatorID` -- `DBCassandraCoordinatorIDKey` -- `DBCassandraIdempotence` -- `DBCassandraIdempotenceKey` -- `DBCassandraPageSize` -- `DBCassandraPageSizeKey` -- `DBCassandraSpeculativeExecutionCount` -- `DBCassandraSpeculativeExecutionCountKey` -- `DBCosmosDBClientID` -- `DBCosmosDBClientIDKey` -- `DBCosmosDBConnectionModeDirect` -- `DBCosmosDBConnectionModeGateway` -- `DBCosmosDBConnectionModeKey` -- `DBCosmosDBOperationTypeBatch` -- `DBCosmosDBOperationTypeCreate` -- `DBCosmosDBOperationTypeDelete` -- `DBCosmosDBOperationTypeExecute` -- `DBCosmosDBOperationTypeExecuteJavascript` -- `DBCosmosDBOperationTypeHead` -- `DBCosmosDBOperationTypeHeadFeed` -- `DBCosmosDBOperationTypeInvalid` -- `DBCosmosDBOperationTypeKey` -- `DBCosmosDBOperationTypePatch` -- `DBCosmosDBOperationTypeQuery` -- `DBCosmosDBOperationTypeQueryPlan` -- `DBCosmosDBOperationTypeRead` -- `DBCosmosDBOperationTypeReadFeed` -- `DBCosmosDBOperationTypeReplace` -- `DBCosmosDBOperationTypeUpsert` -- `DBCosmosDBRequestCharge` -- `DBCosmosDBRequestChargeKey` -- `DBCosmosDBRequestContentLength` -- `DBCosmosDBRequestContentLengthKey` -- `DBCosmosDBSubStatusCode` -- `DBCosmosDBSubStatusCodeKey` -- `DBElasticsearchNodeName` -- `DBElasticsearchNodeNameKey` -- `DBSystemAdabas` -- `DBSystemCache` -- `DBSystemCassandra` -- `DBSystemClickhouse` -- `DBSystemCloudscape` -- `DBSystemCockroachdb` -- `DBSystemColdfusion` -- `DBSystemCosmosDB` -- `DBSystemCouchDB` -- `DBSystemCouchbase` -- `DBSystemDb2` -- `DBSystemDerby` -- `DBSystemDynamoDB` -- `DBSystemEDB` -- `DBSystemElasticsearch` -- `DBSystemFilemaker` -- `DBSystemFirebird` -- `DBSystemFirstSQL` -- `DBSystemGeode` -- `DBSystemH2` -- `DBSystemHBase` -- `DBSystemHSQLDB` -- `DBSystemHanaDB` -- `DBSystemHive` -- `DBSystemInfluxdb` -- `DBSystemInformix` -- `DBSystemIngres` -- `DBSystemInstantDB` -- `DBSystemInterbase` -- `DBSystemIntersystemsCache` -- `DBSystemKey` -- `DBSystemMSSQL` -- `DBSystemMariaDB` -- `DBSystemMaxDB` -- `DBSystemMemcached` -- `DBSystemMongoDB` -- `DBSystemMssqlcompact` -- `DBSystemMySQL` -- `DBSystemNeo4j` -- `DBSystemNetezza` -- `DBSystemOpensearch` -- `DBSystemOracle` -- `DBSystemOtherSQL` -- `DBSystemPervasive` -- `DBSystemPointbase` -- `DBSystemPostgreSQL` -- `DBSystemProgress` -- `DBSystemRedis` -- `DBSystemRedshift` -- `DBSystemSpanner` -- `DBSystemSqlite` -- `DBSystemSybase` -- `DBSystemTeradata` -- `DBSystemTrino` -- `DBSystemVertica` -- `EventName` -- `EventNameKey` -- `ExceptionEscaped` -- `ExceptionEscapedKey` -- `GenAIOpenaiRequestSeed` -- `GenAIOpenaiRequestSeedKey` -- `ProcessExecutableBuildIDProfiling` -- `ProcessExecutableBuildIDProfilingKey` -- `SystemNetworkStateClose` -- `SystemNetworkStateCloseWait` -- `SystemNetworkStateClosing` -- `SystemNetworkStateDelete` -- `SystemNetworkStateEstablished` -- `SystemNetworkStateFinWait1` -- `SystemNetworkStateFinWait2` -- `SystemNetworkStateKey` -- `SystemNetworkStateLastAck` -- `SystemNetworkStateListen` -- `SystemNetworkStateSynRecv` -- `SystemNetworkStateSynSent` -- `SystemNetworkStateTimeWait` -- `VCSRepositoryChangeID` -- `VCSRepositoryChangeIDKey` -- `VCSRepositoryChangeTitle` -- `VCSRepositoryChangeTitleKey` -- `VCSRepositoryRefName` -- `VCSRepositoryRefNameKey` -- `VCSRepositoryRefRevision` -- `VCSRepositoryRefRevisionKey` -- `VCSRepositoryRefTypeBranch` -- `VCSRepositoryRefTypeKey` -- `VCSRepositoryRefTypeTag` - -[OpenTelemetry Semantic Conventions]: https://github.com/open-telemetry/semantic-conventions diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.30.0/README.md b/vendor/go.opentelemetry.io/otel/semconv/v1.30.0/README.md deleted file mode 100644 index 072ea6928f..0000000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.30.0/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Semconv v1.30.0 - -[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/semconv/v1.30.0)](https://pkg.go.dev/go.opentelemetry.io/otel/semconv/v1.30.0) diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.30.0/attribute_group.go b/vendor/go.opentelemetry.io/otel/semconv/v1.30.0/attribute_group.go deleted file mode 100644 index 60f3df0db5..0000000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.30.0/attribute_group.go +++ /dev/null @@ -1,12333 +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.30.0" - -import "go.opentelemetry.io/otel/attribute" - -// Namespace: android -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]. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "33", "32" - // - // [here]: https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels - 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]. -// -// [here]: https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels -func AndroidOSAPILevel(val string) attribute.KeyValue { - return AndroidOSAPILevelKey.String(val) -} - -// Namespace: artifact -const ( - // ArtifactAttestationFilenameKey is the attribute Key conforming to the - // "artifact.attestation.filename" semantic conventions. It represents the - // provenance filename of the built attestation which directly relates to the - // build artifact filename. This filename SHOULD accompany the artifact at - // publish time. See the [SLSA Relationship] specification for more information. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "golang-binary-amd64-v0.1.0.attestation", - // "docker-image-amd64-v0.1.0.intoto.json1", "release-1.tar.gz.attestation", - // "file-name-package.tar.gz.intoto.json1" - // - // [SLSA Relationship]: https://slsa.dev/spec/v1.0/distributing-provenance#relationship-between-artifacts-and-attestations - ArtifactAttestationFilenameKey = attribute.Key("artifact.attestation.filename") - - // ArtifactAttestationHashKey is the attribute Key conforming to the - // "artifact.attestation.hash" semantic conventions. It represents the full - // [hash value (see glossary)], of the built attestation. Some envelopes in the - // [software attestation space] also refer to this as the **digest**. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "1b31dfcd5b7f9267bf2ff47651df1cfb9147b9e4df1f335accf65b4cda498408" - // - // [hash value (see glossary)]: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf - // [software attestation space]: https://github.com/in-toto/attestation/tree/main/spec - ArtifactAttestationHashKey = attribute.Key("artifact.attestation.hash") - - // ArtifactAttestationIDKey is the attribute Key conforming to the - // "artifact.attestation.id" semantic conventions. It represents the id of the - // build [software attestation]. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "123" - // - // [software attestation]: https://slsa.dev/attestation-model - ArtifactAttestationIDKey = attribute.Key("artifact.attestation.id") - - // ArtifactFilenameKey is the attribute Key conforming to the - // "artifact.filename" semantic conventions. It represents the human readable - // file name of the artifact, typically generated during build and release - // processes. Often includes the package name and version in the file name. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "golang-binary-amd64-v0.1.0", "docker-image-amd64-v0.1.0", - // "release-1.tar.gz", "file-name-package.tar.gz" - // Note: This file name can also act as the [Package Name] - // in cases where the package ecosystem maps accordingly. - // Additionally, the artifact [can be published] - // for others, but that is not a guarantee. - // - // [Package Name]: https://slsa.dev/spec/v1.0/terminology#package-model - // [can be published]: https://slsa.dev/spec/v1.0/terminology#software-supply-chain - ArtifactFilenameKey = attribute.Key("artifact.filename") - - // ArtifactHashKey is the attribute Key conforming to the "artifact.hash" - // semantic conventions. It represents the full [hash value (see glossary)], - // often found in checksum.txt on a release of the artifact and used to verify - // package integrity. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "9ff4c52759e2c4ac70b7d517bc7fcdc1cda631ca0045271ddd1b192544f8a3e9" - // Note: The specific algorithm used to create the cryptographic hash value is - // not defined. In situations where an artifact has multiple - // cryptographic hashes, it is up to the implementer to choose which - // hash value to set here; this should be the most secure hash algorithm - // that is suitable for the situation and consistent with the - // corresponding attestation. The implementer can then provide the other - // hash values through an additional set of attribute extensions as they - // deem necessary. - // - // [hash value (see glossary)]: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf - ArtifactHashKey = attribute.Key("artifact.hash") - - // ArtifactPurlKey is the attribute Key conforming to the "artifact.purl" - // semantic conventions. It represents the [Package URL] of the - // [package artifact] provides a standard way to identify and locate the - // packaged artifact. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "pkg:github/package-url/purl-spec@1209109710924", - // "pkg:npm/foo@12.12.3" - // - // [Package URL]: https://github.com/package-url/purl-spec - // [package artifact]: https://slsa.dev/spec/v1.0/terminology#package-model - ArtifactPurlKey = attribute.Key("artifact.purl") - - // ArtifactVersionKey is the attribute Key conforming to the "artifact.version" - // semantic conventions. It represents the version of the artifact. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "v0.1.0", "1.2.1", "122691-build" - ArtifactVersionKey = attribute.Key("artifact.version") -) - -// ArtifactAttestationFilename returns an attribute KeyValue conforming to the -// "artifact.attestation.filename" semantic conventions. It represents the -// provenance filename of the built attestation which directly relates to the -// build artifact filename. This filename SHOULD accompany the artifact at -// publish time. See the [SLSA Relationship] specification for more information. -// -// [SLSA Relationship]: https://slsa.dev/spec/v1.0/distributing-provenance#relationship-between-artifacts-and-attestations -func ArtifactAttestationFilename(val string) attribute.KeyValue { - return ArtifactAttestationFilenameKey.String(val) -} - -// ArtifactAttestationHash returns an attribute KeyValue conforming to the -// "artifact.attestation.hash" semantic conventions. It represents the full -// [hash value (see glossary)], of the built attestation. Some envelopes in the -// [software attestation space] also refer to this as the **digest**. -// -// [hash value (see glossary)]: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf -// [software attestation space]: https://github.com/in-toto/attestation/tree/main/spec -func ArtifactAttestationHash(val string) attribute.KeyValue { - return ArtifactAttestationHashKey.String(val) -} - -// ArtifactAttestationID returns an attribute KeyValue conforming to the -// "artifact.attestation.id" semantic conventions. It represents the id of the -// build [software attestation]. -// -// [software attestation]: https://slsa.dev/attestation-model -func ArtifactAttestationID(val string) attribute.KeyValue { - return ArtifactAttestationIDKey.String(val) -} - -// ArtifactFilename returns an attribute KeyValue conforming to the -// "artifact.filename" semantic conventions. It represents the human readable -// file name of the artifact, typically generated during build and release -// processes. Often includes the package name and version in the file name. -func ArtifactFilename(val string) attribute.KeyValue { - return ArtifactFilenameKey.String(val) -} - -// ArtifactHash returns an attribute KeyValue conforming to the "artifact.hash" -// semantic conventions. It represents the full [hash value (see glossary)], -// often found in checksum.txt on a release of the artifact and used to verify -// package integrity. -// -// [hash value (see glossary)]: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf -func ArtifactHash(val string) attribute.KeyValue { - return ArtifactHashKey.String(val) -} - -// ArtifactPurl returns an attribute KeyValue conforming to the "artifact.purl" -// semantic conventions. It represents the [Package URL] of the -// [package artifact] provides a standard way to identify and locate the packaged -// artifact. -// -// [Package URL]: https://github.com/package-url/purl-spec -// [package artifact]: https://slsa.dev/spec/v1.0/terminology#package-model -func ArtifactPurl(val string) attribute.KeyValue { - return ArtifactPurlKey.String(val) -} - -// ArtifactVersion returns an attribute KeyValue conforming to the -// "artifact.version" semantic conventions. It represents the version of the -// artifact. -func ArtifactVersion(val string) attribute.KeyValue { - return ArtifactVersionKey.String(val) -} - -// Namespace: aws -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: Recommended - // Stability: Development - // - // Examples: "{ "AttributeName": "string", "AttributeType": "string" }" - AWSDynamoDBAttributeDefinitionsKey = attribute.Key("aws.dynamodb.attribute_definitions") - - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: - 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: Recommended - // Stability: Development - // - // 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") - - // 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: Recommended - // Stability: Development - // - // Examples: 10 - AWSDynamoDBCountKey = attribute.Key("aws.dynamodb.count") - - // 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: Recommended - // Stability: Development - // - // Examples: "Users", "CatsTable" - AWSDynamoDBExclusiveStartTableKey = attribute.Key("aws.dynamodb.exclusive_start_table") - - // 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 - // `GlobalSecondaryIndexUpdates` request field. - // - // Type: string[] - // RequirementLevel: Recommended - // Stability: Development - // - // 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") - - // 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: Recommended - // Stability: Development - // - // 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") - - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: 10 - AWSDynamoDBLimitKey = attribute.Key("aws.dynamodb.limit") - - // 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: Recommended - // Stability: Development - // - // 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") - - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: 1.0, 2.0 - AWSDynamoDBProvisionedWriteCapacityKey = attribute.Key("aws.dynamodb.provisioned_write_capacity") - - // 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: Recommended - // Stability: Development - // - // Examples: - AWSDynamoDBScanForwardKey = attribute.Key("aws.dynamodb.scan_forward") - - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: 10 - AWSDynamoDBSegmentKey = attribute.Key("aws.dynamodb.segment") - - // 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: Recommended - // Stability: Development - // - // Examples: "ALL_ATTRIBUTES", "COUNT" - AWSDynamoDBSelectKey = attribute.Key("aws.dynamodb.select") - - // AWSDynamoDBTableCountKey is the attribute Key conforming to the - // "aws.dynamodb.table_count" semantic conventions. It represents the number of - // items in the `TableNames` response parameter. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 20 - AWSDynamoDBTableCountKey = attribute.Key("aws.dynamodb.table_count") - - // 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: Recommended - // Stability: Development - // - // Examples: "Users", "Cats" - AWSDynamoDBTableNamesKey = attribute.Key("aws.dynamodb.table_names") - - // 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: Recommended - // Stability: Development - // - // Examples: 100 - AWSDynamoDBTotalSegmentsKey = attribute.Key("aws.dynamodb.total_segments") - - // AWSECSClusterARNKey is the attribute Key conforming to the - // "aws.ecs.cluster.arn" semantic conventions. It represents the ARN of an - // [ECS cluster]. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster" - // - // [ECS cluster]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html - 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]. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - // "arn:aws:ecs:us-west-1:123456789123:container/32624152-9086-4f0e-acae-1a75b14fe4d9" - // - // [ECS container instance]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html - 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] - // for an ECS task. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - // - // [launch type]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html - 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 a running [ECS task]. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - // "arn:aws:ecs:us-west-1:123456789123:task/10838bed-421f-43ef-870a-f43feacbbb5b", - // "arn:aws:ecs:us-west-1:123456789123:task/my-cluster/task-id/23ebb8ac-c18f-46c6-8bbe-d55d0e37cfbd" - // - // [ECS task]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#ecs-resource-ids - AWSECSTaskARNKey = attribute.Key("aws.ecs.task.arn") - - // AWSECSTaskFamilyKey is the attribute Key conforming to the - // "aws.ecs.task.family" semantic conventions. It represents the family name of - // the [ECS task definition] used to create the ECS task. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "opentelemetry-family" - // - // [ECS task definition]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html - AWSECSTaskFamilyKey = attribute.Key("aws.ecs.task.family") - - // AWSECSTaskIDKey is the attribute Key conforming to the "aws.ecs.task.id" - // semantic conventions. It represents the ID of a running ECS task. The ID MUST - // be extracted from `task.arn`. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "10838bed-421f-43ef-870a-f43feacbbb5b", - // "23ebb8ac-c18f-46c6-8bbe-d55d0e37cfbd" - AWSECSTaskIDKey = attribute.Key("aws.ecs.task.id") - - // AWSECSTaskRevisionKey is the attribute Key conforming to the - // "aws.ecs.task.revision" semantic conventions. It represents the revision for - // the task definition used to create the ECS task. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "8", "26" - AWSECSTaskRevisionKey = attribute.Key("aws.ecs.task.revision") - - // 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: Recommended - // Stability: Development - // - // Examples: "arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster" - AWSEKSClusterARNKey = attribute.Key("aws.eks.cluster.arn") - - // AWSExtendedRequestIDKey is the attribute Key conforming to the - // "aws.extended_request_id" semantic conventions. It represents the AWS - // extended request ID as returned in the response header `x-amz-id-2`. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - // "wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=" - AWSExtendedRequestIDKey = attribute.Key("aws.extended_request_id") - - // 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: Recommended - // Stability: Development - // - // 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") - - // 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: Recommended - // Stability: Development - // - // Examples: "arn:aws:logs:us-west-1:123456789012:log-group:/aws/my/group:*" - // Note: See the [log group ARN format documentation]. - // - // [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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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]. One log group can - // contain several log streams, so these ARNs necessarily identify both a log - // group and a log stream. - // - // [log stream ARN format documentation]: https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format - 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: Recommended - // Stability: Development - // - // Examples: "logs/main/10838bed-421f-43ef-870a-f43feacbbb5b" - AWSLogStreamNamesKey = attribute.Key("aws.log.stream.names") - - // 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-amzn-requestid`, `x-amzn-request-id` or - // `x-amz-request-id`. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "79b9da39-b7ae-508a-a6bc-864b2829c622", "C9ER4AJX75574TDJ" - AWSRequestIDKey = attribute.Key("aws.request_id") - - // 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] operations. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // 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`. - // - // [S3 API]: https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html - 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: Recommended - // Stability: Development - // - // 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]. - // This applies in particular to the following operations: - // - // - [copy-object] - // - [upload-part-copy] - // - // - // [copy-object operation within the S3 API]: https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html - // [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: Recommended - // Stability: Development - // - // Examples: - // "Objects=[{Key=string,VersionId=string},{Key=string,VersionId=string}],Quiet=boolean" - // Note: The `delete` attribute is only applicable to the [delete-object] - // operation. - // The `delete` attribute corresponds to the `--delete` parameter of the - // [delete-objects operation within the S3 API]. - // - // [delete-object]: https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html - // [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] operations. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // 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] - // - [delete-object] - // - [get-object] - // - [head-object] - // - [put-object] - // - [restore-object] - // - [select-object-content] - // - [abort-multipart-upload] - // - [complete-multipart-upload] - // - [create-multipart-upload] - // - [list-parts] - // - [upload-part] - // - [upload-part-copy] - // - // - // [S3 API]: https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html - // [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: Recommended - // Stability: Development - // - // Examples: 3456 - // Note: The `part_number` attribute is only applicable to the [upload-part] - // and [upload-part-copy] operations. - // The `part_number` attribute corresponds to the `--part-number` parameter of - // the - // [upload-part operation within the S3 API]. - // - // [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 - // [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: Recommended - // Stability: Development - // - // 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] multipart operations. - // This applies in particular to the following operations: - // - // - [abort-multipart-upload] - // - [complete-multipart-upload] - // - [list-parts] - // - [upload-part] - // - [upload-part-copy] - // - // - // [S3 API]: https://docs.aws.amazon.com/cli/latest/reference/s3api/index.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 - // [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") -) - -// 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) -} - -// 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) -} - -// 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) -} - -// 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) -} - -// 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 -// `GlobalSecondaryIndexUpdates` request field. -func AWSDynamoDBGlobalSecondaryIndexUpdates(val ...string) attribute.KeyValue { - return AWSDynamoDBGlobalSecondaryIndexUpdatesKey.StringSlice(val) -} - -// 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) -} - -// 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) -} - -// 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) -} - -// 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) -} - -// 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) -} - -// 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) -} - -// 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) -} - -// AWSDynamoDBTableCount returns an attribute KeyValue conforming to the -// "aws.dynamodb.table_count" semantic conventions. It represents the number of -// items in the `TableNames` response parameter. -func AWSDynamoDBTableCount(val int) attribute.KeyValue { - return AWSDynamoDBTableCountKey.Int(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) -} - -// 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) -} - -// AWSECSClusterARN returns an attribute KeyValue conforming to the -// "aws.ecs.cluster.arn" semantic conventions. It represents the ARN of an -// [ECS cluster]. -// -// [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]. -// -// [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 a running -// [ECS task]. -// -// [ECS task]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#ecs-resource-ids -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 family name of -// the [ECS task definition] used to create the ECS task. -// -// [ECS task definition]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html -func AWSECSTaskFamily(val string) attribute.KeyValue { - return AWSECSTaskFamilyKey.String(val) -} - -// AWSECSTaskID returns an attribute KeyValue conforming to the "aws.ecs.task.id" -// semantic conventions. It represents the ID of a running ECS task. The ID MUST -// be extracted from `task.arn`. -func AWSECSTaskID(val string) attribute.KeyValue { - return AWSECSTaskIDKey.String(val) -} - -// AWSECSTaskRevision returns an attribute KeyValue conforming to the -// "aws.ecs.task.revision" semantic conventions. It represents the revision for -// the task definition used to create the ECS task. -func AWSECSTaskRevision(val string) attribute.KeyValue { - return AWSECSTaskRevisionKey.String(val) -} - -// 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) -} - -// AWSExtendedRequestID returns an attribute KeyValue conforming to the -// "aws.extended_request_id" semantic conventions. It represents the AWS extended -// request ID as returned in the response header `x-amz-id-2`. -func AWSExtendedRequestID(val string) attribute.KeyValue { - return AWSExtendedRequestIDKey.String(val) -} - -// 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) -} - -// 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) -} - -// 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-amzn-requestid`, `x-amzn-request-id` or `x-amz-request-id` -// . -func AWSRequestID(val string) attribute.KeyValue { - return AWSRequestIDKey.String(val) -} - -// 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] operations. -// -// [S3 API]: https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html -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] operations. -// -// [S3 API]: https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html -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) -} - -// Enum values for aws.ecs.launchtype -var ( - // ec2 - // Stability: development - AWSECSLaunchtypeEC2 = AWSECSLaunchtypeKey.String("ec2") - // fargate - // Stability: development - AWSECSLaunchtypeFargate = AWSECSLaunchtypeKey.String("fargate") -) - -// Namespace: az -const ( - // AzNamespaceKey is the attribute Key conforming to the "az.namespace" semantic - // conventions. It represents the [Azure Resource Provider Namespace] as - // recognized by the client. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "Microsoft.Storage", "Microsoft.KeyVault", "Microsoft.ServiceBus" - // - // [Azure Resource Provider Namespace]: https://learn.microsoft.com/azure/azure-resource-manager/management/azure-services-resource-providers - AzNamespaceKey = attribute.Key("az.namespace") - - // AzServiceRequestIDKey is the attribute Key conforming to the - // "az.service_request_id" semantic conventions. It represents the unique - // identifier of the service request. It's generated by the Azure service and - // returned with the response. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "00000000-0000-0000-0000-000000000000" - AzServiceRequestIDKey = attribute.Key("az.service_request_id") -) - -// AzNamespace returns an attribute KeyValue conforming to the "az.namespace" -// semantic conventions. It represents the [Azure Resource Provider Namespace] as -// recognized by the client. -// -// [Azure Resource Provider Namespace]: https://learn.microsoft.com/azure/azure-resource-manager/management/azure-services-resource-providers -func AzNamespace(val string) attribute.KeyValue { - return AzNamespaceKey.String(val) -} - -// AzServiceRequestID returns an attribute KeyValue conforming to the -// "az.service_request_id" semantic conventions. It represents the unique -// identifier of the service request. It's generated by the Azure service and -// returned with the response. -func AzServiceRequestID(val string) attribute.KeyValue { - return AzServiceRequestIDKey.String(val) -} - -// Namespace: azure -const ( - // AzureClientIDKey is the attribute Key conforming to the "azure.client.id" - // semantic conventions. It represents the unique identifier of the client - // instance. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "3ba4827d-4422-483f-b59f-85b74211c11d", "storage-client-1" - AzureClientIDKey = attribute.Key("azure.client.id") - - // AzureCosmosDBConnectionModeKey is the attribute Key conforming to the - // "azure.cosmosdb.connection.mode" semantic conventions. It represents the - // cosmos client connection mode. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - AzureCosmosDBConnectionModeKey = attribute.Key("azure.cosmosdb.connection.mode") - - // AzureCosmosDBConsistencyLevelKey is the attribute Key conforming to the - // "azure.cosmosdb.consistency.level" semantic conventions. It represents the - // account or request [consistency level]. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "Eventual", "ConsistentPrefix", "BoundedStaleness", "Strong", - // "Session" - // - // [consistency level]: https://learn.microsoft.com/azure/cosmos-db/consistency-levels - AzureCosmosDBConsistencyLevelKey = attribute.Key("azure.cosmosdb.consistency.level") - - // AzureCosmosDBOperationContactedRegionsKey is the attribute Key conforming to - // the "azure.cosmosdb.operation.contacted_regions" semantic conventions. It - // represents the list of regions contacted during operation in the order that - // they were contacted. If there is more than one region listed, it indicates - // that the operation was performed on multiple regions i.e. cross-regional - // call. - // - // Type: string[] - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "North Central US", "Australia East", "Australia Southeast" - // Note: Region name matches the format of `displayName` in [Azure Location API] - // - // [Azure Location API]: https://learn.microsoft.com/rest/api/subscription/subscriptions/list-locations?view=rest-subscription-2021-10-01&tabs=HTTP#location - AzureCosmosDBOperationContactedRegionsKey = attribute.Key("azure.cosmosdb.operation.contacted_regions") - - // AzureCosmosDBOperationRequestChargeKey is the attribute Key conforming to the - // "azure.cosmosdb.operation.request_charge" semantic conventions. It represents - // the number of request units consumed by the operation. - // - // Type: double - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 46.18, 1.0 - AzureCosmosDBOperationRequestChargeKey = attribute.Key("azure.cosmosdb.operation.request_charge") - - // AzureCosmosDBRequestBodySizeKey is the attribute Key conforming to the - // "azure.cosmosdb.request.body.size" semantic conventions. It represents the - // request payload size in bytes. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - AzureCosmosDBRequestBodySizeKey = attribute.Key("azure.cosmosdb.request.body.size") - - // AzureCosmosDBResponseSubStatusCodeKey is the attribute Key conforming to the - // "azure.cosmosdb.response.sub_status_code" semantic conventions. It represents - // the cosmos DB sub status code. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 1000, 1002 - AzureCosmosDBResponseSubStatusCodeKey = attribute.Key("azure.cosmosdb.response.sub_status_code") -) - -// AzureClientID returns an attribute KeyValue conforming to the -// "azure.client.id" semantic conventions. It represents the unique identifier of -// the client instance. -func AzureClientID(val string) attribute.KeyValue { - return AzureClientIDKey.String(val) -} - -// AzureCosmosDBOperationContactedRegions returns an attribute KeyValue -// conforming to the "azure.cosmosdb.operation.contacted_regions" semantic -// conventions. It represents the list of regions contacted during operation in -// the order that they were contacted. If there is more than one region listed, -// it indicates that the operation was performed on multiple regions i.e. -// cross-regional call. -func AzureCosmosDBOperationContactedRegions(val ...string) attribute.KeyValue { - return AzureCosmosDBOperationContactedRegionsKey.StringSlice(val) -} - -// AzureCosmosDBOperationRequestCharge returns an attribute KeyValue conforming -// to the "azure.cosmosdb.operation.request_charge" semantic conventions. It -// represents the number of request units consumed by the operation. -func AzureCosmosDBOperationRequestCharge(val float64) attribute.KeyValue { - return AzureCosmosDBOperationRequestChargeKey.Float64(val) -} - -// AzureCosmosDBRequestBodySize returns an attribute KeyValue conforming to the -// "azure.cosmosdb.request.body.size" semantic conventions. It represents the -// request payload size in bytes. -func AzureCosmosDBRequestBodySize(val int) attribute.KeyValue { - return AzureCosmosDBRequestBodySizeKey.Int(val) -} - -// AzureCosmosDBResponseSubStatusCode returns an attribute KeyValue conforming to -// the "azure.cosmosdb.response.sub_status_code" semantic conventions. It -// represents the cosmos DB sub status code. -func AzureCosmosDBResponseSubStatusCode(val int) attribute.KeyValue { - return AzureCosmosDBResponseSubStatusCodeKey.Int(val) -} - -// Enum values for azure.cosmosdb.connection.mode -var ( - // Gateway (HTTP) connection. - // Stability: development - AzureCosmosDBConnectionModeGateway = AzureCosmosDBConnectionModeKey.String("gateway") - // Direct connection. - // Stability: development - AzureCosmosDBConnectionModeDirect = AzureCosmosDBConnectionModeKey.String("direct") -) - -// Enum values for azure.cosmosdb.consistency.level -var ( - // strong - // Stability: development - AzureCosmosDBConsistencyLevelStrong = AzureCosmosDBConsistencyLevelKey.String("Strong") - // bounded_staleness - // Stability: development - AzureCosmosDBConsistencyLevelBoundedStaleness = AzureCosmosDBConsistencyLevelKey.String("BoundedStaleness") - // session - // Stability: development - AzureCosmosDBConsistencyLevelSession = AzureCosmosDBConsistencyLevelKey.String("Session") - // eventual - // Stability: development - AzureCosmosDBConsistencyLevelEventual = AzureCosmosDBConsistencyLevelKey.String("Eventual") - // consistent_prefix - // Stability: development - AzureCosmosDBConsistencyLevelConsistentPrefix = AzureCosmosDBConsistencyLevelKey.String("ConsistentPrefix") -) - -// Namespace: browser -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: Recommended - // Stability: Development - // - // Examples: " Not A;Brand 99", "Chromium 99", "Chrome 99" - // Note: This value is intended to be taken from the [UA client hints API] ( - // `navigator.userAgentData.brands`). - // - // [UA client hints API]: https://wicg.github.io/ua-client-hints/#interface - 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: - // Note: This value is intended to be taken from the [UA client hints API] ( - // `navigator.userAgentData.mobile`). If unavailable, this attribute SHOULD be - // left unset. - // - // [UA client hints API]: https://wicg.github.io/ua-client-hints/#interface - 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: Recommended - // Stability: Development - // - // Examples: "Windows", "macOS", "Android" - // Note: This value is intended to be taken from the [UA client hints API] ( - // `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]. Note that some (but not all) of - // these values can overlap with values in the - // [`os.type` and `os.name` attributes]. However, for consistency, the values in - // the `browser.platform` attribute should capture the exact value that the user - // agent provides. - // - // [UA client hints API]: https://wicg.github.io/ua-client-hints/#interface - // [W3C User-Agent Client Hints specification]: https://wicg.github.io/ua-client-hints/#sec-ch-ua-platform - // [`os.type` and `os.name` attributes]: ./os.md - 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) -} - -// Namespace: cassandra -const ( - // CassandraConsistencyLevelKey is the attribute Key conforming to the - // "cassandra.consistency.level" semantic conventions. It represents the - // consistency level of the query. Based on consistency values from [CQL]. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - // - // [CQL]: https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html - CassandraConsistencyLevelKey = attribute.Key("cassandra.consistency.level") - - // CassandraCoordinatorDCKey is the attribute Key conforming to the - // "cassandra.coordinator.dc" semantic conventions. It represents the data - // center of the coordinating node for a query. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: us-west-2 - CassandraCoordinatorDCKey = attribute.Key("cassandra.coordinator.dc") - - // CassandraCoordinatorIDKey is the attribute Key conforming to the - // "cassandra.coordinator.id" semantic conventions. It represents the ID of the - // coordinating node for a query. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: be13faa2-8574-4d71-926d-27f16cf8a7af - CassandraCoordinatorIDKey = attribute.Key("cassandra.coordinator.id") - - // CassandraPageSizeKey is the attribute Key conforming to the - // "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: Recommended - // Stability: Development - // - // Examples: 5000 - CassandraPageSizeKey = attribute.Key("cassandra.page.size") - - // CassandraQueryIdempotentKey is the attribute Key conforming to the - // "cassandra.query.idempotent" semantic conventions. It represents the whether - // or not the query is idempotent. - // - // Type: boolean - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - CassandraQueryIdempotentKey = attribute.Key("cassandra.query.idempotent") - - // CassandraSpeculativeExecutionCountKey is the attribute Key conforming to the - // "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: Recommended - // Stability: Development - // - // Examples: 0, 2 - CassandraSpeculativeExecutionCountKey = attribute.Key("cassandra.speculative_execution.count") -) - -// CassandraCoordinatorDC returns an attribute KeyValue conforming to the -// "cassandra.coordinator.dc" semantic conventions. It represents the data center -// of the coordinating node for a query. -func CassandraCoordinatorDC(val string) attribute.KeyValue { - return CassandraCoordinatorDCKey.String(val) -} - -// CassandraCoordinatorID returns an attribute KeyValue conforming to the -// "cassandra.coordinator.id" semantic conventions. It represents the ID of the -// coordinating node for a query. -func CassandraCoordinatorID(val string) attribute.KeyValue { - return CassandraCoordinatorIDKey.String(val) -} - -// CassandraPageSize returns an attribute KeyValue conforming to the -// "cassandra.page.size" semantic conventions. It represents the fetch size used -// for paging, i.e. how many rows will be returned at once. -func CassandraPageSize(val int) attribute.KeyValue { - return CassandraPageSizeKey.Int(val) -} - -// CassandraQueryIdempotent returns an attribute KeyValue conforming to the -// "cassandra.query.idempotent" semantic conventions. It represents the whether -// or not the query is idempotent. -func CassandraQueryIdempotent(val bool) attribute.KeyValue { - return CassandraQueryIdempotentKey.Bool(val) -} - -// CassandraSpeculativeExecutionCount returns an attribute KeyValue conforming to -// the "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 CassandraSpeculativeExecutionCount(val int) attribute.KeyValue { - return CassandraSpeculativeExecutionCountKey.Int(val) -} - -// Enum values for cassandra.consistency.level -var ( - // all - // Stability: development - CassandraConsistencyLevelAll = CassandraConsistencyLevelKey.String("all") - // each_quorum - // Stability: development - CassandraConsistencyLevelEachQuorum = CassandraConsistencyLevelKey.String("each_quorum") - // quorum - // Stability: development - CassandraConsistencyLevelQuorum = CassandraConsistencyLevelKey.String("quorum") - // local_quorum - // Stability: development - CassandraConsistencyLevelLocalQuorum = CassandraConsistencyLevelKey.String("local_quorum") - // one - // Stability: development - CassandraConsistencyLevelOne = CassandraConsistencyLevelKey.String("one") - // two - // Stability: development - CassandraConsistencyLevelTwo = CassandraConsistencyLevelKey.String("two") - // three - // Stability: development - CassandraConsistencyLevelThree = CassandraConsistencyLevelKey.String("three") - // local_one - // Stability: development - CassandraConsistencyLevelLocalOne = CassandraConsistencyLevelKey.String("local_one") - // any - // Stability: development - CassandraConsistencyLevelAny = CassandraConsistencyLevelKey.String("any") - // serial - // Stability: development - CassandraConsistencyLevelSerial = CassandraConsistencyLevelKey.String("serial") - // local_serial - // Stability: development - CassandraConsistencyLevelLocalSerial = CassandraConsistencyLevelKey.String("local_serial") -) - -// Namespace: cicd -const ( - // CICDPipelineNameKey is the attribute Key conforming to the - // "cicd.pipeline.name" semantic conventions. It represents the human readable - // name of the pipeline within a CI/CD system. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "Build and Test", "Lint", "Deploy Go Project", - // "deploy_to_environment" - CICDPipelineNameKey = attribute.Key("cicd.pipeline.name") - - // CICDPipelineResultKey is the attribute Key conforming to the - // "cicd.pipeline.result" semantic conventions. It represents the result of a - // pipeline run. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "success", "failure", "timeout", "skipped" - CICDPipelineResultKey = attribute.Key("cicd.pipeline.result") - - // CICDPipelineRunIDKey is the attribute Key conforming to the - // "cicd.pipeline.run.id" semantic conventions. It represents the unique - // identifier of a pipeline run within a CI/CD system. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "120912" - CICDPipelineRunIDKey = attribute.Key("cicd.pipeline.run.id") - - // CICDPipelineRunStateKey is the attribute Key conforming to the - // "cicd.pipeline.run.state" semantic conventions. It represents the pipeline - // run goes through these states during its lifecycle. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "pending", "executing", "finalizing" - CICDPipelineRunStateKey = attribute.Key("cicd.pipeline.run.state") - - // CICDPipelineTaskNameKey is the attribute Key conforming to the - // "cicd.pipeline.task.name" semantic conventions. It represents the human - // readable name of a task within a pipeline. Task here most closely aligns with - // a [computing process] in a pipeline. Other terms for tasks include commands, - // steps, and procedures. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "Run GoLang Linter", "Go Build", "go-test", "deploy_binary" - // - // [computing process]: https://wikipedia.org/wiki/Pipeline_(computing) - CICDPipelineTaskNameKey = attribute.Key("cicd.pipeline.task.name") - - // CICDPipelineTaskRunIDKey is the attribute Key conforming to the - // "cicd.pipeline.task.run.id" semantic conventions. It represents the unique - // identifier of a task run within a pipeline. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "12097" - CICDPipelineTaskRunIDKey = attribute.Key("cicd.pipeline.task.run.id") - - // CICDPipelineTaskRunURLFullKey is the attribute Key conforming to the - // "cicd.pipeline.task.run.url.full" semantic conventions. It represents the - // [URL] of the pipeline run providing the complete address in order to locate - // and identify the pipeline run. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - // "https://github.com/open-telemetry/semantic-conventions/actions/runs/9753949763/job/26920038674?pr=1075" - // - // [URL]: https://wikipedia.org/wiki/URL - CICDPipelineTaskRunURLFullKey = attribute.Key("cicd.pipeline.task.run.url.full") - - // CICDPipelineTaskTypeKey is the attribute Key conforming to the - // "cicd.pipeline.task.type" semantic conventions. It represents the type of the - // task within a pipeline. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "build", "test", "deploy" - CICDPipelineTaskTypeKey = attribute.Key("cicd.pipeline.task.type") - - // CICDSystemComponentKey is the attribute Key conforming to the - // "cicd.system.component" semantic conventions. It represents the name of a - // component of the CICD system. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "controller", "scheduler", "agent" - CICDSystemComponentKey = attribute.Key("cicd.system.component") - - // CICDWorkerStateKey is the attribute Key conforming to the "cicd.worker.state" - // semantic conventions. It represents the state of a CICD worker / agent. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "idle", "busy", "down" - CICDWorkerStateKey = attribute.Key("cicd.worker.state") -) - -// CICDPipelineName returns an attribute KeyValue conforming to the -// "cicd.pipeline.name" semantic conventions. It represents the human readable -// name of the pipeline within a CI/CD system. -func CICDPipelineName(val string) attribute.KeyValue { - return CICDPipelineNameKey.String(val) -} - -// CICDPipelineRunID returns an attribute KeyValue conforming to the -// "cicd.pipeline.run.id" semantic conventions. It represents the unique -// identifier of a pipeline run within a CI/CD system. -func CICDPipelineRunID(val string) attribute.KeyValue { - return CICDPipelineRunIDKey.String(val) -} - -// CICDPipelineTaskName returns an attribute KeyValue conforming to the -// "cicd.pipeline.task.name" semantic conventions. It represents the human -// readable name of a task within a pipeline. Task here most closely aligns with -// a [computing process] in a pipeline. Other terms for tasks include commands, -// steps, and procedures. -// -// [computing process]: https://wikipedia.org/wiki/Pipeline_(computing) -func CICDPipelineTaskName(val string) attribute.KeyValue { - return CICDPipelineTaskNameKey.String(val) -} - -// CICDPipelineTaskRunID returns an attribute KeyValue conforming to the -// "cicd.pipeline.task.run.id" semantic conventions. It represents the unique -// identifier of a task run within a pipeline. -func CICDPipelineTaskRunID(val string) attribute.KeyValue { - return CICDPipelineTaskRunIDKey.String(val) -} - -// CICDPipelineTaskRunURLFull returns an attribute KeyValue conforming to the -// "cicd.pipeline.task.run.url.full" semantic conventions. It represents the -// [URL] of the pipeline run providing the complete address in order to locate -// and identify the pipeline run. -// -// [URL]: https://wikipedia.org/wiki/URL -func CICDPipelineTaskRunURLFull(val string) attribute.KeyValue { - return CICDPipelineTaskRunURLFullKey.String(val) -} - -// CICDSystemComponent returns an attribute KeyValue conforming to the -// "cicd.system.component" semantic conventions. It represents the name of a -// component of the CICD system. -func CICDSystemComponent(val string) attribute.KeyValue { - return CICDSystemComponentKey.String(val) -} - -// Enum values for cicd.pipeline.result -var ( - // The pipeline run finished successfully. - // Stability: development - CICDPipelineResultSuccess = CICDPipelineResultKey.String("success") - // The pipeline run did not finish successfully, eg. due to a compile error or a - // failing test. Such failures are usually detected by non-zero exit codes of - // the tools executed in the pipeline run. - // Stability: development - CICDPipelineResultFailure = CICDPipelineResultKey.String("failure") - // The pipeline run failed due to an error in the CICD system, eg. due to the - // worker being killed. - // Stability: development - CICDPipelineResultError = CICDPipelineResultKey.String("error") - // A timeout caused the pipeline run to be interrupted. - // Stability: development - CICDPipelineResultTimeout = CICDPipelineResultKey.String("timeout") - // The pipeline run was cancelled, eg. by a user manually cancelling the - // pipeline run. - // Stability: development - CICDPipelineResultCancellation = CICDPipelineResultKey.String("cancellation") - // The pipeline run was skipped, eg. due to a precondition not being met. - // Stability: development - CICDPipelineResultSkip = CICDPipelineResultKey.String("skip") -) - -// Enum values for cicd.pipeline.run.state -var ( - // The run pending state spans from the event triggering the pipeline run until - // the execution of the run starts (eg. time spent in a queue, provisioning - // agents, creating run resources). - // - // Stability: development - CICDPipelineRunStatePending = CICDPipelineRunStateKey.String("pending") - // The executing state spans the execution of any run tasks (eg. build, test). - // Stability: development - CICDPipelineRunStateExecuting = CICDPipelineRunStateKey.String("executing") - // The finalizing state spans from when the run has finished executing (eg. - // cleanup of run resources). - // Stability: development - CICDPipelineRunStateFinalizing = CICDPipelineRunStateKey.String("finalizing") -) - -// Enum values for cicd.pipeline.task.type -var ( - // build - // Stability: development - CICDPipelineTaskTypeBuild = CICDPipelineTaskTypeKey.String("build") - // test - // Stability: development - CICDPipelineTaskTypeTest = CICDPipelineTaskTypeKey.String("test") - // deploy - // Stability: development - CICDPipelineTaskTypeDeploy = CICDPipelineTaskTypeKey.String("deploy") -) - -// Enum values for cicd.worker.state -var ( - // The worker is not performing work for the CICD system. It is available to the - // CICD system to perform work on (online / idle). - // Stability: development - CICDWorkerStateAvailable = CICDWorkerStateKey.String("available") - // The worker is performing work for the CICD system. - // Stability: development - CICDWorkerStateBusy = CICDWorkerStateKey.String("busy") - // The worker is not available to the CICD system (disconnected / down). - // Stability: development - CICDWorkerStateOffline = CICDWorkerStateKey.String("offline") -) - -// Namespace: client -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: Recommended - // 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: Recommended - // 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) -} - -// Namespace: cloud -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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: - // 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: Recommended - // Stability: Development - // - // Examples: - 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: Recommended - // Stability: Development - // - // Examples: "us-central1", "us-east-1" - // Note: Refer to your provider's docs to see the available regions, for example - // [Alibaba Cloud regions], [AWS regions], [Azure regions], - // [Google Cloud regions], or [Tencent Cloud regions]. - // - // [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 - // [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] on AWS, a - // [fully qualified resource ID] on Azure, a [full resource name] on GCP). - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // 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]. - // Take care not to use the "invoked ARN" directly but replace any - // [alias suffix] - // with the resolved function version, as the same runtime instance may be - // invocable with - // multiple different aliases. - // - **GCP:** The [URI of the resource] - // - **Azure:** The [Fully Qualified Resource 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. - // - // - // [ARN]: https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html - // [fully qualified resource ID]: https://learn.microsoft.com/rest/api/resources/resources/get-by-id - // [full resource name]: https://cloud.google.com/apis/design/resource_names#full_resource_name - // [ARN]: https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html - // [alias suffix]: https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html - // [URI of the resource]: https://cloud.google.com/iam/docs/full-resource-names - // [Fully Qualified Resource ID]: https://docs.microsoft.com/rest/api/resources/resources/get-by-id - CloudResourceIDKey = attribute.Key("cloud.resource_id") -) - -// 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] on AWS, a [fully qualified resource ID] on Azure, a [full resource name] -// on GCP). -// -// [ARN]: https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html -// [fully qualified resource ID]: https://learn.microsoft.com/rest/api/resources/resources/get-by-id -// [full resource name]: https://cloud.google.com/apis/design/resource_names#full_resource_name -func CloudResourceID(val string) attribute.KeyValue { - return CloudResourceIDKey.String(val) -} - -// Enum values for cloud.platform -var ( - // Alibaba Cloud Elastic Compute Service - // Stability: development - CloudPlatformAlibabaCloudECS = CloudPlatformKey.String("alibaba_cloud_ecs") - // Alibaba Cloud Function Compute - // Stability: development - CloudPlatformAlibabaCloudFc = CloudPlatformKey.String("alibaba_cloud_fc") - // Red Hat OpenShift on Alibaba Cloud - // Stability: development - CloudPlatformAlibabaCloudOpenshift = CloudPlatformKey.String("alibaba_cloud_openshift") - // AWS Elastic Compute Cloud - // Stability: development - CloudPlatformAWSEC2 = CloudPlatformKey.String("aws_ec2") - // AWS Elastic Container Service - // Stability: development - CloudPlatformAWSECS = CloudPlatformKey.String("aws_ecs") - // AWS Elastic Kubernetes Service - // Stability: development - CloudPlatformAWSEKS = CloudPlatformKey.String("aws_eks") - // AWS Lambda - // Stability: development - CloudPlatformAWSLambda = CloudPlatformKey.String("aws_lambda") - // AWS Elastic Beanstalk - // Stability: development - CloudPlatformAWSElasticBeanstalk = CloudPlatformKey.String("aws_elastic_beanstalk") - // AWS App Runner - // Stability: development - CloudPlatformAWSAppRunner = CloudPlatformKey.String("aws_app_runner") - // Red Hat OpenShift on AWS (ROSA) - // Stability: development - CloudPlatformAWSOpenshift = CloudPlatformKey.String("aws_openshift") - // Azure Virtual Machines - // Stability: development - CloudPlatformAzureVM = CloudPlatformKey.String("azure_vm") - // Azure Container Apps - // Stability: development - CloudPlatformAzureContainerApps = CloudPlatformKey.String("azure_container_apps") - // Azure Container Instances - // Stability: development - CloudPlatformAzureContainerInstances = CloudPlatformKey.String("azure_container_instances") - // Azure Kubernetes Service - // Stability: development - CloudPlatformAzureAKS = CloudPlatformKey.String("azure_aks") - // Azure Functions - // Stability: development - CloudPlatformAzureFunctions = CloudPlatformKey.String("azure_functions") - // Azure App Service - // Stability: development - CloudPlatformAzureAppService = CloudPlatformKey.String("azure_app_service") - // Azure Red Hat OpenShift - // Stability: development - CloudPlatformAzureOpenshift = CloudPlatformKey.String("azure_openshift") - // Google Bare Metal Solution (BMS) - // Stability: development - CloudPlatformGCPBareMetalSolution = CloudPlatformKey.String("gcp_bare_metal_solution") - // Google Cloud Compute Engine (GCE) - // Stability: development - CloudPlatformGCPComputeEngine = CloudPlatformKey.String("gcp_compute_engine") - // Google Cloud Run - // Stability: development - CloudPlatformGCPCloudRun = CloudPlatformKey.String("gcp_cloud_run") - // Google Cloud Kubernetes Engine (GKE) - // Stability: development - CloudPlatformGCPKubernetesEngine = CloudPlatformKey.String("gcp_kubernetes_engine") - // Google Cloud Functions (GCF) - // Stability: development - CloudPlatformGCPCloudFunctions = CloudPlatformKey.String("gcp_cloud_functions") - // Google Cloud App Engine (GAE) - // Stability: development - CloudPlatformGCPAppEngine = CloudPlatformKey.String("gcp_app_engine") - // Red Hat OpenShift on Google Cloud - // Stability: development - CloudPlatformGCPOpenshift = CloudPlatformKey.String("gcp_openshift") - // Red Hat OpenShift on IBM Cloud - // Stability: development - CloudPlatformIbmCloudOpenshift = CloudPlatformKey.String("ibm_cloud_openshift") - // Compute on Oracle Cloud Infrastructure (OCI) - // Stability: development - CloudPlatformOracleCloudCompute = CloudPlatformKey.String("oracle_cloud_compute") - // Kubernetes Engine (OKE) on Oracle Cloud Infrastructure (OCI) - // Stability: development - CloudPlatformOracleCloudOke = CloudPlatformKey.String("oracle_cloud_oke") - // Tencent Cloud Cloud Virtual Machine (CVM) - // Stability: development - CloudPlatformTencentCloudCvm = CloudPlatformKey.String("tencent_cloud_cvm") - // Tencent Cloud Elastic Kubernetes Service (EKS) - // Stability: development - CloudPlatformTencentCloudEKS = CloudPlatformKey.String("tencent_cloud_eks") - // Tencent Cloud Serverless Cloud Function (SCF) - // Stability: development - CloudPlatformTencentCloudScf = CloudPlatformKey.String("tencent_cloud_scf") -) - -// Enum values for cloud.provider -var ( - // Alibaba Cloud - // Stability: development - CloudProviderAlibabaCloud = CloudProviderKey.String("alibaba_cloud") - // Amazon Web Services - // Stability: development - CloudProviderAWS = CloudProviderKey.String("aws") - // Microsoft Azure - // Stability: development - CloudProviderAzure = CloudProviderKey.String("azure") - // Google Cloud Platform - // Stability: development - CloudProviderGCP = CloudProviderKey.String("gcp") - // Heroku Platform as a Service - // Stability: development - CloudProviderHeroku = CloudProviderKey.String("heroku") - // IBM Cloud - // Stability: development - CloudProviderIbmCloud = CloudProviderKey.String("ibm_cloud") - // Oracle Cloud Infrastructure (OCI) - // Stability: development - CloudProviderOracleCloud = CloudProviderKey.String("oracle_cloud") - // Tencent Cloud - // Stability: development - CloudProviderTencentCloud = CloudProviderKey.String("tencent_cloud") -) - -// Namespace: cloudevents -const ( - // CloudeventsEventIDKey is the attribute Key conforming to the - // "cloudevents.event_id" semantic conventions. It represents the [event_id] - // uniquely identifies the event. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "123e4567-e89b-12d3-a456-426614174000", "0001" - // - // [event_id]: https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#id - CloudeventsEventIDKey = attribute.Key("cloudevents.event_id") - - // CloudeventsEventSourceKey is the attribute Key conforming to the - // "cloudevents.event_source" semantic conventions. It represents the [source] - // identifies the context in which an event happened. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "https://github.com/cloudevents", "/cloudevents/spec/pull/123", - // "my-service" - // - // [source]: https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#source-1 - 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] which the event uses. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 1.0 - // - // [version of the CloudEvents specification]: https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#specversion - CloudeventsEventSpecVersionKey = attribute.Key("cloudevents.event_spec_version") - - // CloudeventsEventSubjectKey is the attribute Key conforming to the - // "cloudevents.event_subject" semantic conventions. It represents the [subject] - // of the event in the context of the event producer (identified by source). - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: mynewfile.jpg - // - // [subject]: https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#subject - CloudeventsEventSubjectKey = attribute.Key("cloudevents.event_subject") - - // CloudeventsEventTypeKey is the attribute Key conforming to the - // "cloudevents.event_type" semantic conventions. It represents the [event_type] - // contains a value describing the type of event related to the originating - // occurrence. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "com.github.pull_request.opened", "com.example.object.deleted.v2" - // - // [event_type]: https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#type - CloudeventsEventTypeKey = attribute.Key("cloudevents.event_type") -) - -// CloudeventsEventID returns an attribute KeyValue conforming to the -// "cloudevents.event_id" semantic conventions. It represents the [event_id] -// uniquely identifies the event. -// -// [event_id]: https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#id -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] -// identifies the context in which an event happened. -// -// [source]: https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#source-1 -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] which the event uses. -// -// [version of the CloudEvents specification]: https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#specversion -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] -// of the event in the context of the event producer (identified by source). -// -// [subject]: https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#subject -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] -// contains a value describing the type of event related to the originating -// occurrence. -// -// [event_type]: https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#type -func CloudeventsEventType(val string) attribute.KeyValue { - return CloudeventsEventTypeKey.String(val) -} - -// Namespace: cloudfoundry -const ( - // CloudfoundryAppIDKey is the attribute Key conforming to the - // "cloudfoundry.app.id" semantic conventions. It represents the guid of the - // application. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "218fc5a9-a5f1-4b54-aa05-46717d0ab26d" - // Note: Application instrumentation should use the value from environment - // variable `VCAP_APPLICATION.application_id`. This is the same value as - // reported by `cf app --guid`. - CloudfoundryAppIDKey = attribute.Key("cloudfoundry.app.id") - - // CloudfoundryAppInstanceIDKey is the attribute Key conforming to the - // "cloudfoundry.app.instance.id" semantic conventions. It represents the index - // of the application instance. 0 when just one instance is active. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "0", "1" - // Note: CloudFoundry defines the `instance_id` in the [Loggregator v2 envelope] - // . - // It is used for logs and metrics emitted by CloudFoundry. It is - // supposed to contain the application instance index for applications - // deployed on the runtime. - // - // Application instrumentation should use the value from environment - // variable `CF_INSTANCE_INDEX`. - // - // [Loggregator v2 envelope]: https://github.com/cloudfoundry/loggregator-api#v2-envelope - CloudfoundryAppInstanceIDKey = attribute.Key("cloudfoundry.app.instance.id") - - // CloudfoundryAppNameKey is the attribute Key conforming to the - // "cloudfoundry.app.name" semantic conventions. It represents the name of the - // application. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "my-app-name" - // Note: Application instrumentation should use the value from environment - // variable `VCAP_APPLICATION.application_name`. This is the same value - // as reported by `cf apps`. - CloudfoundryAppNameKey = attribute.Key("cloudfoundry.app.name") - - // CloudfoundryOrgIDKey is the attribute Key conforming to the - // "cloudfoundry.org.id" semantic conventions. It represents the guid of the - // CloudFoundry org the application is running in. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "218fc5a9-a5f1-4b54-aa05-46717d0ab26d" - // Note: Application instrumentation should use the value from environment - // variable `VCAP_APPLICATION.org_id`. This is the same value as - // reported by `cf org --guid`. - CloudfoundryOrgIDKey = attribute.Key("cloudfoundry.org.id") - - // CloudfoundryOrgNameKey is the attribute Key conforming to the - // "cloudfoundry.org.name" semantic conventions. It represents the name of the - // CloudFoundry organization the app is running in. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "my-org-name" - // Note: Application instrumentation should use the value from environment - // variable `VCAP_APPLICATION.org_name`. This is the same value as - // reported by `cf orgs`. - CloudfoundryOrgNameKey = attribute.Key("cloudfoundry.org.name") - - // CloudfoundryProcessIDKey is the attribute Key conforming to the - // "cloudfoundry.process.id" semantic conventions. It represents the UID - // identifying the process. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "218fc5a9-a5f1-4b54-aa05-46717d0ab26d" - // Note: Application instrumentation should use the value from environment - // variable `VCAP_APPLICATION.process_id`. It is supposed to be equal to - // `VCAP_APPLICATION.app_id` for applications deployed to the runtime. - // For system components, this could be the actual PID. - CloudfoundryProcessIDKey = attribute.Key("cloudfoundry.process.id") - - // CloudfoundryProcessTypeKey is the attribute Key conforming to the - // "cloudfoundry.process.type" semantic conventions. It represents the type of - // process. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "web" - // Note: CloudFoundry applications can consist of multiple jobs. Usually the - // main process will be of type `web`. There can be additional background - // tasks or side-cars with different process types. - CloudfoundryProcessTypeKey = attribute.Key("cloudfoundry.process.type") - - // CloudfoundrySpaceIDKey is the attribute Key conforming to the - // "cloudfoundry.space.id" semantic conventions. It represents the guid of the - // CloudFoundry space the application is running in. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "218fc5a9-a5f1-4b54-aa05-46717d0ab26d" - // Note: Application instrumentation should use the value from environment - // variable `VCAP_APPLICATION.space_id`. This is the same value as - // reported by `cf space --guid`. - CloudfoundrySpaceIDKey = attribute.Key("cloudfoundry.space.id") - - // CloudfoundrySpaceNameKey is the attribute Key conforming to the - // "cloudfoundry.space.name" semantic conventions. It represents the name of the - // CloudFoundry space the application is running in. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "my-space-name" - // Note: Application instrumentation should use the value from environment - // variable `VCAP_APPLICATION.space_name`. This is the same value as - // reported by `cf spaces`. - CloudfoundrySpaceNameKey = attribute.Key("cloudfoundry.space.name") - - // CloudfoundrySystemIDKey is the attribute Key conforming to the - // "cloudfoundry.system.id" semantic conventions. It represents a guid or - // another name describing the event source. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "cf/gorouter" - // Note: CloudFoundry defines the `source_id` in the [Loggregator v2 envelope]. - // It is used for logs and metrics emitted by CloudFoundry. It is - // supposed to contain the component name, e.g. "gorouter", for - // CloudFoundry components. - // - // When system components are instrumented, values from the - // [Bosh spec] - // should be used. The `system.id` should be set to - // `spec.deployment/spec.name`. - // - // [Loggregator v2 envelope]: https://github.com/cloudfoundry/loggregator-api#v2-envelope - // [Bosh spec]: https://bosh.io/docs/jobs/#properties-spec - CloudfoundrySystemIDKey = attribute.Key("cloudfoundry.system.id") - - // CloudfoundrySystemInstanceIDKey is the attribute Key conforming to the - // "cloudfoundry.system.instance.id" semantic conventions. It represents a guid - // describing the concrete instance of the event source. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "218fc5a9-a5f1-4b54-aa05-46717d0ab26d" - // Note: CloudFoundry defines the `instance_id` in the [Loggregator v2 envelope] - // . - // It is used for logs and metrics emitted by CloudFoundry. It is - // supposed to contain the vm id for CloudFoundry components. - // - // When system components are instrumented, values from the - // [Bosh spec] - // should be used. The `system.instance.id` should be set to `spec.id`. - // - // [Loggregator v2 envelope]: https://github.com/cloudfoundry/loggregator-api#v2-envelope - // [Bosh spec]: https://bosh.io/docs/jobs/#properties-spec - CloudfoundrySystemInstanceIDKey = attribute.Key("cloudfoundry.system.instance.id") -) - -// CloudfoundryAppID returns an attribute KeyValue conforming to the -// "cloudfoundry.app.id" semantic conventions. It represents the guid of the -// application. -func CloudfoundryAppID(val string) attribute.KeyValue { - return CloudfoundryAppIDKey.String(val) -} - -// CloudfoundryAppInstanceID returns an attribute KeyValue conforming to the -// "cloudfoundry.app.instance.id" semantic conventions. It represents the index -// of the application instance. 0 when just one instance is active. -func CloudfoundryAppInstanceID(val string) attribute.KeyValue { - return CloudfoundryAppInstanceIDKey.String(val) -} - -// CloudfoundryAppName returns an attribute KeyValue conforming to the -// "cloudfoundry.app.name" semantic conventions. It represents the name of the -// application. -func CloudfoundryAppName(val string) attribute.KeyValue { - return CloudfoundryAppNameKey.String(val) -} - -// CloudfoundryOrgID returns an attribute KeyValue conforming to the -// "cloudfoundry.org.id" semantic conventions. It represents the guid of the -// CloudFoundry org the application is running in. -func CloudfoundryOrgID(val string) attribute.KeyValue { - return CloudfoundryOrgIDKey.String(val) -} - -// CloudfoundryOrgName returns an attribute KeyValue conforming to the -// "cloudfoundry.org.name" semantic conventions. It represents the name of the -// CloudFoundry organization the app is running in. -func CloudfoundryOrgName(val string) attribute.KeyValue { - return CloudfoundryOrgNameKey.String(val) -} - -// CloudfoundryProcessID returns an attribute KeyValue conforming to the -// "cloudfoundry.process.id" semantic conventions. It represents the UID -// identifying the process. -func CloudfoundryProcessID(val string) attribute.KeyValue { - return CloudfoundryProcessIDKey.String(val) -} - -// CloudfoundryProcessType returns an attribute KeyValue conforming to the -// "cloudfoundry.process.type" semantic conventions. It represents the type of -// process. -func CloudfoundryProcessType(val string) attribute.KeyValue { - return CloudfoundryProcessTypeKey.String(val) -} - -// CloudfoundrySpaceID returns an attribute KeyValue conforming to the -// "cloudfoundry.space.id" semantic conventions. It represents the guid of the -// CloudFoundry space the application is running in. -func CloudfoundrySpaceID(val string) attribute.KeyValue { - return CloudfoundrySpaceIDKey.String(val) -} - -// CloudfoundrySpaceName returns an attribute KeyValue conforming to the -// "cloudfoundry.space.name" semantic conventions. It represents the name of the -// CloudFoundry space the application is running in. -func CloudfoundrySpaceName(val string) attribute.KeyValue { - return CloudfoundrySpaceNameKey.String(val) -} - -// CloudfoundrySystemID returns an attribute KeyValue conforming to the -// "cloudfoundry.system.id" semantic conventions. It represents a guid or another -// name describing the event source. -func CloudfoundrySystemID(val string) attribute.KeyValue { - return CloudfoundrySystemIDKey.String(val) -} - -// CloudfoundrySystemInstanceID returns an attribute KeyValue conforming to the -// "cloudfoundry.system.instance.id" semantic conventions. It represents a guid -// describing the concrete instance of the event source. -func CloudfoundrySystemInstanceID(val string) attribute.KeyValue { - return CloudfoundrySystemInstanceIDKey.String(val) -} - -// Namespace: code -const ( - // CodeColumnNumberKey is the attribute Key conforming to the - // "code.column.number" semantic conventions. It represents the column number in - // `code.file.path` best representing the operation. It SHOULD point within the - // code unit named in `code.function.name`. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - CodeColumnNumberKey = attribute.Key("code.column.number") - - // CodeFilePathKey is the attribute Key conforming to the "code.file.path" - // 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: Recommended - // Stability: Development - // - // Examples: /usr/local/MyApplication/content_root/app/index.php - CodeFilePathKey = attribute.Key("code.file.path") - - // CodeFilepathKey is the attribute Key conforming to the "code.filepath" - // semantic conventions. It represents the deprecated, use `code.file.path` - // instead. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: /usr/local/MyApplication/content_root/app/index.php - CodeFilepathKey = attribute.Key("code.filepath") - - // CodeFunctionNameKey is the attribute Key conforming to the - // "code.function.name" semantic conventions. It represents the method or - // function name, or equivalent (usually rightmost part of the code unit's - // name). - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: serveRequest - CodeFunctionNameKey = attribute.Key("code.function.name") - - // CodeLineNumberKey is the attribute Key conforming to the "code.line.number" - // semantic conventions. It represents the line number in `code.file.path` best - // representing the operation. It SHOULD point within the code unit named in - // `code.function.name`. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - CodeLineNumberKey = attribute.Key("code.line.number") - - // CodeNamespaceKey is the attribute Key conforming to the "code.namespace" - // semantic conventions. It represents the "namespace" within which - // `code.function.name` is defined. Usually the qualified class or module name, - // such that `code.namespace` + some separator + `code.function.name` form a - // unique identifier for the code unit. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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") -) - -// CodeColumnNumber returns an attribute KeyValue conforming to the -// "code.column.number" semantic conventions. It represents the column number in -// `code.file.path` best representing the operation. It SHOULD point within the -// code unit named in `code.function.name`. -func CodeColumnNumber(val int) attribute.KeyValue { - return CodeColumnNumberKey.Int(val) -} - -// CodeFilePath returns an attribute KeyValue conforming to the "code.file.path" -// 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) -} - -// CodeFilepath returns an attribute KeyValue conforming to the "code.filepath" -// semantic conventions. It represents the deprecated, use `code.file.path` -// instead. -func CodeFilepath(val string) attribute.KeyValue { - return CodeFilepathKey.String(val) -} - -// CodeFunctionName returns an attribute KeyValue conforming to the -// "code.function.name" semantic conventions. It represents the method or -// function name, or equivalent (usually rightmost part of the code unit's name). -func CodeFunctionName(val string) attribute.KeyValue { - return CodeFunctionNameKey.String(val) -} - -// CodeLineNumber returns an attribute KeyValue conforming to the -// "code.line.number" semantic conventions. It represents the line number in -// `code.file.path` best representing the operation. It SHOULD point within the -// code unit named in `code.function.name`. -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.name` is defined. Usually the qualified class or module name, -// such that `code.namespace` + some separator + `code.function.name` 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) -} - -// Namespace: container -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: Recommended - // Stability: Development - // - // 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. - // - // Type: string[] - // RequirementLevel: Recommended - // Stability: Development - // - // 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. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "otelcontribcol --config config.yaml" - ContainerCommandLineKey = attribute.Key("container.command_line") - - // ContainerCsiPluginNameKey is the attribute Key conforming to the - // "container.csi.plugin.name" semantic conventions. It represents the name of - // the CSI ([Container Storage Interface]) plugin used by the volume. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "pd.csi.storage.gke.io" - // Note: This can sometimes be referred to as a "driver" in CSI implementations. - // This should represent the `name` field of the GetPluginInfo RPC. - // - // [Container Storage Interface]: https://github.com/container-storage-interface/spec - ContainerCsiPluginNameKey = attribute.Key("container.csi.plugin.name") - - // ContainerCsiVolumeIDKey is the attribute Key conforming to the - // "container.csi.volume.id" semantic conventions. It represents the unique - // volume ID returned by the CSI ([Container Storage Interface]) plugin. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "projects/my-gcp-project/zones/my-gcp-zone/disks/my-gcp-disk" - // Note: This can sometimes be referred to as a "volume handle" in CSI - // implementations. This should represent the `Volume.volume_id` field in CSI - // spec. - // - // [Container Storage Interface]: https://github.com/container-storage-interface/spec - ContainerCsiVolumeIDKey = attribute.Key("container.csi.volume.id") - - // 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]. The UUID might be abbreviated. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "a3bf90e006b2" - // - // [identify Docker containers]: https://docs.docker.com/engine/containers/run/#container-identification - 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: Recommended - // Stability: Development - // - // 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] - // endpoint. - // K8s defines a link to the container registry repository with digest - // `"imageID": "registry.azurecr.io /namespace/service/dockerfile@sha256:bdeabd40c3a8a492eaf9e8e44d0ebbb84bac7ee25ac0cf8a7159d25f62555625"` - // . - // The ID is assigned 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. - // - // [API]: https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerInspect - 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: - // "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", - // "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" - // Note: [Docker] and [CRI] report those under the `RepoDigests` field. - // - // [Docker]: https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect - // [CRI]: https://github.com/kubernetes/cri-api/blob/c75ef5b473bbe2d0a4fc92f82235efd665ea8e9f/pkg/apis/runtime/v1/api.proto#L1237-L1238 - 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]. Should be only - // the `` section of the full name for example from - // `registry.example.com/my-org/my-image:`. - // - // Type: string[] - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "v1.27.1", "3.5.7-0" - // - // [Docker Image Inspect]: https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect - 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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. -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. -func ContainerCommandLine(val string) attribute.KeyValue { - return ContainerCommandLineKey.String(val) -} - -// ContainerCsiPluginName returns an attribute KeyValue conforming to the -// "container.csi.plugin.name" semantic conventions. It represents the name of -// the CSI ([Container Storage Interface]) plugin used by the volume. -// -// [Container Storage Interface]: https://github.com/container-storage-interface/spec -func ContainerCsiPluginName(val string) attribute.KeyValue { - return ContainerCsiPluginNameKey.String(val) -} - -// ContainerCsiVolumeID returns an attribute KeyValue conforming to the -// "container.csi.volume.id" semantic conventions. It represents the unique -// volume ID returned by the CSI ([Container Storage Interface]) plugin. -// -// [Container Storage Interface]: https://github.com/container-storage-interface/spec -func ContainerCsiVolumeID(val string) attribute.KeyValue { - return ContainerCsiVolumeIDKey.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]. The UUID might be abbreviated. -// -// [identify Docker containers]: https://docs.docker.com/engine/containers/run/#container-identification -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]. Should be only the -// `` section of the full name for example from -// `registry.example.com/my-org/my-image:`. -// -// [Docker Image Inspect]: https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect -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) -} - -// Namespace: cpu -const ( - // CPUModeKey is the attribute Key conforming to the "cpu.mode" semantic - // conventions. It represents the mode of the CPU. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "user", "system" - CPUModeKey = attribute.Key("cpu.mode") -) - -// Enum values for cpu.mode -var ( - // user - // Stability: development - CPUModeUser = CPUModeKey.String("user") - // system - // Stability: development - CPUModeSystem = CPUModeKey.String("system") - // nice - // Stability: development - CPUModeNice = CPUModeKey.String("nice") - // idle - // Stability: development - CPUModeIdle = CPUModeKey.String("idle") - // iowait - // Stability: development - CPUModeIowait = CPUModeKey.String("iowait") - // interrupt - // Stability: development - CPUModeInterrupt = CPUModeKey.String("interrupt") - // steal - // Stability: development - CPUModeSteal = CPUModeKey.String("steal") - // kernel - // Stability: development - CPUModeKernel = CPUModeKey.String("kernel") -) - -// Namespace: db -const ( - // DBClientConnectionPoolNameKey is the attribute Key conforming to the - // "db.client.connection.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, instrumentation - // SHOULD use a combination of parameters that would make the name unique, for - // example, combining attributes `server.address`, `server.port`, and - // `db.namespace`, formatted as `server.address:server.port/db.namespace`. - // Instrumentations that generate connection pool name following different - // patterns SHOULD document it. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "myDataSource" - DBClientConnectionPoolNameKey = attribute.Key("db.client.connection.pool.name") - - // DBClientConnectionStateKey is the attribute Key conforming to the - // "db.client.connection.state" semantic conventions. It represents the state of - // a connection in the pool. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "idle" - DBClientConnectionStateKey = attribute.Key("db.client.connection.state") - - // DBCollectionNameKey is the attribute Key conforming to the - // "db.collection.name" semantic conventions. It represents the name of a - // collection (table, container) within the database. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Release_Candidate - // - // Examples: "public.users", "customers" - // Note: It is RECOMMENDED to capture the value as provided by the application - // without attempting to do any case normalization. - // - // The collection name SHOULD NOT be extracted from `db.query.text`, - // unless the query format is known to only ever have a single collection name - // present. - // - // For batch operations, if the individual operations are known to have the same - // collection name - // then that collection name SHOULD be used. - DBCollectionNameKey = attribute.Key("db.collection.name") - - // DBNamespaceKey is the attribute Key conforming to the "db.namespace" semantic - // conventions. It represents the name of the database, fully qualified within - // the server address and port. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Release_Candidate - // - // Examples: "customers", "test.users" - // Note: If a database system has multiple namespace components, they SHOULD be - // concatenated (potentially using database system specific conventions) from - // most general to most specific namespace component, and more specific - // namespaces SHOULD NOT be captured without the more general namespaces, to - // ensure that "startswith" queries for the more general namespaces will be - // valid. - // Semantic conventions for individual database systems SHOULD document what - // `db.namespace` means in the context of that system. - // It is RECOMMENDED to capture the value as provided by the application without - // attempting to do any case normalization. - DBNamespaceKey = attribute.Key("db.namespace") - - // DBOperationBatchSizeKey is the attribute Key conforming to the - // "db.operation.batch.size" semantic conventions. It represents the number of - // queries included in a batch operation. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Release_Candidate - // - // Examples: 2, 3, 4 - // Note: Operations are only considered batches when they contain two or more - // operations, and so `db.operation.batch.size` SHOULD never be `1`. - DBOperationBatchSizeKey = attribute.Key("db.operation.batch.size") - - // DBOperationNameKey is the attribute Key conforming to the "db.operation.name" - // semantic conventions. It represents the name of the operation or command - // being executed. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Release_Candidate - // - // Examples: "findAndModify", "HMSET", "SELECT" - // Note: It is RECOMMENDED to capture the value as provided by the application - // without attempting to do any case normalization. - // - // The operation name SHOULD NOT be extracted from `db.query.text`, - // unless the query format is known to only ever have a single operation name - // present. - // - // For batch operations, if the individual operations are known to have the same - // operation name - // then that operation name SHOULD be used prepended by `BATCH `, - // otherwise `db.operation.name` SHOULD be `BATCH` or some other database - // system specific term if more applicable. - DBOperationNameKey = attribute.Key("db.operation.name") - - // DBQuerySummaryKey is the attribute Key conforming to the "db.query.summary" - // semantic conventions. It represents the low cardinality representation of a - // database query text. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Release_Candidate - // - // Examples: "SELECT wuser_table", "INSERT shipping_details SELECT orders", "get - // user by id" - // Note: `db.query.summary` provides static summary of the query text. It - // describes a class of database queries and is useful as a grouping key, - // especially when analyzing telemetry for database calls involving complex - // queries. - // Summary may be available to the instrumentation through instrumentation hooks - // or other means. If it is not available, instrumentations that support query - // parsing SHOULD generate a summary following [Generating query summary] - // section. - // - // [Generating query summary]: ../../docs/database/database-spans.md#generating-a-summary-of-the-query-text - DBQuerySummaryKey = attribute.Key("db.query.summary") - - // DBQueryTextKey is the attribute Key conforming to the "db.query.text" - // semantic conventions. It represents the database query being executed. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Release_Candidate - // - // Examples: "SELECT * FROM wuser_table where username = ?", "SET mykey ?" - // Note: For sanitization see [Sanitization of `db.query.text`]. - // For batch operations, if the individual operations are known to have the same - // query text then that query text SHOULD be used, otherwise all of the - // individual query texts SHOULD be concatenated with separator `; ` or some - // other database system specific separator if more applicable. - // Even though parameterized query text can potentially have sensitive data, by - // using a parameterized query the user is giving a strong signal that any - // sensitive data will be passed as parameter values, and the benefit to - // observability of capturing the static part of the query text by default - // outweighs the risk. - // - // [Sanitization of `db.query.text`]: ../../docs/database/database-spans.md#sanitization-of-dbquerytext - DBQueryTextKey = attribute.Key("db.query.text") - - // DBResponseReturnedRowsKey is the attribute Key conforming to the - // "db.response.returned_rows" semantic conventions. It represents the number of - // rows returned by the operation. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 10, 30, 1000 - DBResponseReturnedRowsKey = attribute.Key("db.response.returned_rows") - - // DBResponseStatusCodeKey is the attribute Key conforming to the - // "db.response.status_code" semantic conventions. It represents the database - // response status code. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Release_Candidate - // - // Examples: "102", "ORA-17002", "08P01", "404" - // Note: The status code returned by the database. Usually it represents an - // error code, but may also represent partial success, warning, or differentiate - // between various types of successful outcomes. - // Semantic conventions for individual database systems SHOULD document what - // `db.response.status_code` means in the context of that system. - DBResponseStatusCodeKey = attribute.Key("db.response.status_code") - - // DBSystemNameKey is the attribute Key conforming to the "db.system.name" - // semantic conventions. It represents the database management system (DBMS) - // product as identified by the client instrumentation. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Release_Candidate - // - // Examples: - // Note: The actual DBMS may differ from the one identified by the client. For - // example, when using PostgreSQL client libraries to connect to a CockroachDB, - // the `db.system.name` is set to `postgresql` based on the instrumentation's - // best knowledge. - DBSystemNameKey = attribute.Key("db.system.name") -) - -// DBClientConnectionPoolName returns an attribute KeyValue conforming to the -// "db.client.connection.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, instrumentation -// SHOULD use a combination of parameters that would make the name unique, for -// example, combining attributes `server.address`, `server.port`, and -// `db.namespace`, formatted as `server.address:server.port/db.namespace`. -// Instrumentations that generate connection pool name following different -// patterns SHOULD document it. -func DBClientConnectionPoolName(val string) attribute.KeyValue { - return DBClientConnectionPoolNameKey.String(val) -} - -// DBCollectionName returns an attribute KeyValue conforming to the -// "db.collection.name" semantic conventions. It represents the name of a -// collection (table, container) within the database. -func DBCollectionName(val string) attribute.KeyValue { - return DBCollectionNameKey.String(val) -} - -// DBNamespace returns an attribute KeyValue conforming to the "db.namespace" -// semantic conventions. It represents the name of the database, fully qualified -// within the server address and port. -func DBNamespace(val string) attribute.KeyValue { - return DBNamespaceKey.String(val) -} - -// DBOperationBatchSize returns an attribute KeyValue conforming to the -// "db.operation.batch.size" semantic conventions. It represents the number of -// queries included in a batch operation. -func DBOperationBatchSize(val int) attribute.KeyValue { - return DBOperationBatchSizeKey.Int(val) -} - -// DBOperationName returns an attribute KeyValue conforming to the -// "db.operation.name" semantic conventions. It represents the name of the -// operation or command being executed. -func DBOperationName(val string) attribute.KeyValue { - return DBOperationNameKey.String(val) -} - -// DBQuerySummary returns an attribute KeyValue conforming to the -// "db.query.summary" semantic conventions. It represents the low cardinality -// representation of a database query text. -func DBQuerySummary(val string) attribute.KeyValue { - return DBQuerySummaryKey.String(val) -} - -// DBQueryText returns an attribute KeyValue conforming to the "db.query.text" -// semantic conventions. It represents the database query being executed. -func DBQueryText(val string) attribute.KeyValue { - return DBQueryTextKey.String(val) -} - -// DBResponseReturnedRows returns an attribute KeyValue conforming to the -// "db.response.returned_rows" semantic conventions. It represents the number of -// rows returned by the operation. -func DBResponseReturnedRows(val int) attribute.KeyValue { - return DBResponseReturnedRowsKey.Int(val) -} - -// DBResponseStatusCode returns an attribute KeyValue conforming to the -// "db.response.status_code" semantic conventions. It represents the database -// response status code. -func DBResponseStatusCode(val string) attribute.KeyValue { - return DBResponseStatusCodeKey.String(val) -} - -// Enum values for db.client.connection.state -var ( - // idle - // Stability: development - DBClientConnectionStateIdle = DBClientConnectionStateKey.String("idle") - // used - // Stability: development - DBClientConnectionStateUsed = DBClientConnectionStateKey.String("used") -) - -// Enum values for db.system.name -var ( - // Some other SQL database. Fallback only. - // Stability: development - DBSystemNameOtherSQL = DBSystemNameKey.String("other_sql") - // [Adabas (Adaptable Database System)] - // Stability: development - // - // [Adabas (Adaptable Database System)]: https://documentation.softwareag.com/?pf=adabas - DBSystemNameSoftwareagAdabas = DBSystemNameKey.String("softwareag.adabas") - // [Actian Ingres] - // Stability: development - // - // [Actian Ingres]: https://www.actian.com/databases/ingres/ - DBSystemNameActianIngres = DBSystemNameKey.String("actian.ingres") - // [Amazon DynamoDB] - // Stability: development - // - // [Amazon DynamoDB]: https://aws.amazon.com/pm/dynamodb/ - DBSystemNameAWSDynamoDB = DBSystemNameKey.String("aws.dynamodb") - // [Amazon Redshift] - // Stability: development - // - // [Amazon Redshift]: https://aws.amazon.com/redshift/ - DBSystemNameAWSRedshift = DBSystemNameKey.String("aws.redshift") - // [Azure Cosmos DB] - // Stability: development - // - // [Azure Cosmos DB]: https://learn.microsoft.com/azure/cosmos-db - DBSystemNameAzureCosmosDB = DBSystemNameKey.String("azure.cosmosdb") - // [InterSystems Caché] - // Stability: development - // - // [InterSystems Caché]: https://www.intersystems.com/products/cache/ - DBSystemNameIntersystemsCache = DBSystemNameKey.String("intersystems.cache") - // [Apache Cassandra] - // Stability: development - // - // [Apache Cassandra]: https://cassandra.apache.org/ - DBSystemNameCassandra = DBSystemNameKey.String("cassandra") - // [ClickHouse] - // Stability: development - // - // [ClickHouse]: https://clickhouse.com/ - DBSystemNameClickhouse = DBSystemNameKey.String("clickhouse") - // [CockroachDB] - // Stability: development - // - // [CockroachDB]: https://www.cockroachlabs.com/ - DBSystemNameCockroachdb = DBSystemNameKey.String("cockroachdb") - // [Couchbase] - // Stability: development - // - // [Couchbase]: https://www.couchbase.com/ - DBSystemNameCouchbase = DBSystemNameKey.String("couchbase") - // [Apache CouchDB] - // Stability: development - // - // [Apache CouchDB]: https://couchdb.apache.org/ - DBSystemNameCouchDB = DBSystemNameKey.String("couchdb") - // [Apache Derby] - // Stability: development - // - // [Apache Derby]: https://db.apache.org/derby/ - DBSystemNameDerby = DBSystemNameKey.String("derby") - // [Elasticsearch] - // Stability: development - // - // [Elasticsearch]: https://www.elastic.co/elasticsearch - DBSystemNameElasticsearch = DBSystemNameKey.String("elasticsearch") - // [Firebird] - // Stability: development - // - // [Firebird]: https://www.firebirdsql.org/ - DBSystemNameFirebirdsql = DBSystemNameKey.String("firebirdsql") - // [Google Cloud Spanner] - // Stability: development - // - // [Google Cloud Spanner]: https://cloud.google.com/spanner - DBSystemNameGCPSpanner = DBSystemNameKey.String("gcp.spanner") - // [Apache Geode] - // Stability: development - // - // [Apache Geode]: https://geode.apache.org/ - DBSystemNameGeode = DBSystemNameKey.String("geode") - // [H2 Database] - // Stability: development - // - // [H2 Database]: https://h2database.com/ - DBSystemNameH2database = DBSystemNameKey.String("h2database") - // [Apache HBase] - // Stability: development - // - // [Apache HBase]: https://hbase.apache.org/ - DBSystemNameHBase = DBSystemNameKey.String("hbase") - // [Apache Hive] - // Stability: development - // - // [Apache Hive]: https://hive.apache.org/ - DBSystemNameHive = DBSystemNameKey.String("hive") - // [HyperSQL Database] - // Stability: development - // - // [HyperSQL Database]: https://hsqldb.org/ - DBSystemNameHSQLDB = DBSystemNameKey.String("hsqldb") - // [IBM Db2] - // Stability: development - // - // [IBM Db2]: https://www.ibm.com/db2 - DBSystemNameIbmDb2 = DBSystemNameKey.String("ibm.db2") - // [IBM Informix] - // Stability: development - // - // [IBM Informix]: https://www.ibm.com/products/informix - DBSystemNameIbmInformix = DBSystemNameKey.String("ibm.informix") - // [IBM Netezza] - // Stability: development - // - // [IBM Netezza]: https://www.ibm.com/products/netezza - DBSystemNameIbmNetezza = DBSystemNameKey.String("ibm.netezza") - // [InfluxDB] - // Stability: development - // - // [InfluxDB]: https://www.influxdata.com/ - DBSystemNameInfluxdb = DBSystemNameKey.String("influxdb") - // [Instant] - // Stability: development - // - // [Instant]: https://www.instantdb.com/ - DBSystemNameInstantDB = DBSystemNameKey.String("instantdb") - // [MariaDB] - // Stability: release_candidate - // - // [MariaDB]: https://mariadb.org/ - DBSystemNameMariaDB = DBSystemNameKey.String("mariadb") - // [Memcached] - // Stability: development - // - // [Memcached]: https://memcached.org/ - DBSystemNameMemcached = DBSystemNameKey.String("memcached") - // [MongoDB] - // Stability: development - // - // [MongoDB]: https://www.mongodb.com/ - DBSystemNameMongoDB = DBSystemNameKey.String("mongodb") - // [Microsoft SQL Server] - // Stability: release_candidate - // - // [Microsoft SQL Server]: https://www.microsoft.com/sql-server - DBSystemNameMicrosoftSQLServer = DBSystemNameKey.String("microsoft.sql_server") - // [MySQL] - // Stability: release_candidate - // - // [MySQL]: https://www.mysql.com/ - DBSystemNameMySQL = DBSystemNameKey.String("mysql") - // [Neo4j] - // Stability: development - // - // [Neo4j]: https://neo4j.com/ - DBSystemNameNeo4j = DBSystemNameKey.String("neo4j") - // [OpenSearch] - // Stability: development - // - // [OpenSearch]: https://opensearch.org/ - DBSystemNameOpensearch = DBSystemNameKey.String("opensearch") - // [Oracle Database] - // Stability: development - // - // [Oracle Database]: https://www.oracle.com/database/ - DBSystemNameOracleDB = DBSystemNameKey.String("oracle.db") - // [PostgreSQL] - // Stability: release_candidate - // - // [PostgreSQL]: https://www.postgresql.org/ - DBSystemNamePostgreSQL = DBSystemNameKey.String("postgresql") - // [Redis] - // Stability: development - // - // [Redis]: https://redis.io/ - DBSystemNameRedis = DBSystemNameKey.String("redis") - // [SAP HANA] - // Stability: development - // - // [SAP HANA]: https://www.sap.com/products/technology-platform/hana/what-is-sap-hana.html - DBSystemNameSapHana = DBSystemNameKey.String("sap.hana") - // [SAP MaxDB] - // Stability: development - // - // [SAP MaxDB]: https://maxdb.sap.com/ - DBSystemNameSapMaxDB = DBSystemNameKey.String("sap.maxdb") - // [SQLite] - // Stability: development - // - // [SQLite]: https://www.sqlite.org/ - DBSystemNameSqlite = DBSystemNameKey.String("sqlite") - // [Teradata] - // Stability: development - // - // [Teradata]: https://www.teradata.com/ - DBSystemNameTeradata = DBSystemNameKey.String("teradata") - // [Trino] - // Stability: development - // - // [Trino]: https://trino.io/ - DBSystemNameTrino = DBSystemNameKey.String("trino") -) - -// Namespace: deployment -const ( - // DeploymentEnvironmentNameKey is the attribute Key conforming to the - // "deployment.environment.name" semantic conventions. It represents the name of - // the [deployment environment] (aka deployment tier). - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "staging", "production" - // Note: `deployment.environment.name` 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.name=production` - // - `service.name=frontend`, `deployment.environment.name=staging`. - // - // - // [deployment environment]: https://wikipedia.org/wiki/Deployment_environment - DeploymentEnvironmentNameKey = attribute.Key("deployment.environment.name") - - // DeploymentIDKey is the attribute Key conforming to the "deployment.id" - // semantic conventions. It represents the id of the deployment. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "1208" - DeploymentIDKey = attribute.Key("deployment.id") - - // DeploymentNameKey is the attribute Key conforming to the "deployment.name" - // semantic conventions. It represents the name of the deployment. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "deploy my app", "deploy-frontend" - DeploymentNameKey = attribute.Key("deployment.name") - - // DeploymentStatusKey is the attribute Key conforming to the - // "deployment.status" semantic conventions. It represents the status of the - // deployment. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - DeploymentStatusKey = attribute.Key("deployment.status") -) - -// DeploymentEnvironmentName returns an attribute KeyValue conforming to the -// "deployment.environment.name" semantic conventions. It represents the name of -// the [deployment environment] (aka deployment tier). -// -// [deployment environment]: https://wikipedia.org/wiki/Deployment_environment -func DeploymentEnvironmentName(val string) attribute.KeyValue { - return DeploymentEnvironmentNameKey.String(val) -} - -// DeploymentID returns an attribute KeyValue conforming to the "deployment.id" -// semantic conventions. It represents the id of the deployment. -func DeploymentID(val string) attribute.KeyValue { - return DeploymentIDKey.String(val) -} - -// DeploymentName returns an attribute KeyValue conforming to the -// "deployment.name" semantic conventions. It represents the name of the -// deployment. -func DeploymentName(val string) attribute.KeyValue { - return DeploymentNameKey.String(val) -} - -// Enum values for deployment.status -var ( - // failed - // Stability: development - DeploymentStatusFailed = DeploymentStatusKey.String("failed") - // succeeded - // Stability: development - DeploymentStatusSucceeded = DeploymentStatusKey.String("succeeded") -) - -// Namespace: destination -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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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) -} - -// Namespace: device -const ( - // DeviceIDKey is the attribute Key conforming to the "device.id" semantic - // conventions. It represents a unique identifier representing the device. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // 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]. 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] 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. - // - // [vendor identifier]: https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor - // [here]: https://developer.android.com/training/articles/user-data-ids - 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: Recommended - // Stability: Development - // - // Examples: "Apple", "Samsung" - // Note: The Android OS provides this field via [Build]. iOS apps SHOULD - // hardcode the value `Apple`. - // - // [Build]: https://developer.android.com/reference/android/os/Build#MANUFACTURER - 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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) -} - -// Namespace: disk -const ( - // DiskIoDirectionKey is the attribute Key conforming to the "disk.io.direction" - // semantic conventions. It represents the disk IO operation direction. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "read" - DiskIoDirectionKey = attribute.Key("disk.io.direction") -) - -// Enum values for disk.io.direction -var ( - // read - // Stability: development - DiskIoDirectionRead = DiskIoDirectionKey.String("read") - // write - // Stability: development - DiskIoDirectionWrite = DiskIoDirectionKey.String("write") -) - -// Namespace: dns -const ( - // DNSQuestionNameKey is the attribute Key conforming to the "dns.question.name" - // semantic conventions. It represents the name being queried. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "www.example.com", "opentelemetry.io" - // Note: If the name field contains non-printable characters (below 32 or above - // 126), those characters should be represented as escaped base 10 integers - // (\DDD). Back slashes and quotes should be escaped. Tabs, carriage returns, - // and line feeds should be converted to \t, \r, and \n respectively. - DNSQuestionNameKey = attribute.Key("dns.question.name") -) - -// DNSQuestionName returns an attribute KeyValue conforming to the -// "dns.question.name" semantic conventions. It represents the name being -// queried. -func DNSQuestionName(val string) attribute.KeyValue { - return DNSQuestionNameKey.String(val) -} - -// Namespace: elasticsearch -const ( - // ElasticsearchNodeNameKey is the attribute Key conforming to the - // "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: Recommended - // Stability: Development - // - // Examples: "instance-0000000001" - ElasticsearchNodeNameKey = attribute.Key("elasticsearch.node.name") -) - -// ElasticsearchNodeName returns an attribute KeyValue conforming to the -// "elasticsearch.node.name" semantic conventions. It represents the represents -// the human-readable identifier of the node/instance to which a request was -// routed. -func ElasticsearchNodeName(val string) attribute.KeyValue { - return ElasticsearchNodeNameKey.String(val) -} - -// Namespace: 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: Recommended - // Stability: Stable - // - // Examples: "timeout", "java.net.UnknownHostException", - // "server_certificate_invalid", "500" - // Note: The `error.type` SHOULD be predictable, and SHOULD have low - // cardinality. - // - // When `error.type` is set to a type (e.g., an exception type), its - // canonical class name identifying the type within the artifact SHOULD be used. - // - // 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") -) - -// Enum values for error.type -var ( - // A fallback error value to be used when the instrumentation doesn't define a - // custom value. - // - // Stability: stable - ErrorTypeOther = ErrorTypeKey.String("_OTHER") -) - -// Namespace: exception -const ( - // ExceptionMessageKey is the attribute Key conforming to the - // "exception.message" semantic conventions. It represents the exception - // message. - // - // Type: string - // RequirementLevel: Recommended - // 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: Recommended - // 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") - - // 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: Recommended - // Stability: Stable - // - // Examples: "java.net.ConnectException", "OSError" - ExceptionTypeKey = attribute.Key("exception.type") -) - -// 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) -} - -// Namespace: faas -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: Recommended - // Stability: Development - // - // Examples: - FaaSColdstartKey = attribute.Key("faas.coldstart") - - // FaaSCronKey is the attribute Key conforming to the "faas.cron" semantic - // conventions. It represents a string containing the schedule period as - // [Cron Expression]. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 0/5 * * * ? * - // - // [Cron Expression]: https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm - FaaSCronKey = attribute.Key("faas.cron") - - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: - 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] format expressed in - // [UTC]. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 2020-01-23T13:47:06Z - // - // [ISO 8601]: https://www.iso.org/iso-8601-date-and-time-format.html - // [UTC]: https://www.w3.org/TR/NOTE-datetime - FaaSDocumentTimeKey = attribute.Key("faas.document.time") - - // 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: Recommended - // Stability: Development - // - // Examples: "2021/06/28/[$LATEST]2f399eb14537447da05ab2a2e39309de" - // Note: - **AWS Lambda:** Use the (full) log stream name. - FaaSInstanceKey = attribute.Key("faas.instance") - - // 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: Recommended - // Stability: Development - // - // Examples: af9d5aa4-a685-4c5f-a22b-444f80b3cc28 - FaaSInvocationIDKey = attribute.Key("faas.invocation_id") - - // FaaSInvokedNameKey is the attribute Key conforming to the "faas.invoked_name" - // semantic conventions. It represents the name of the invoked function. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: - // 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: Recommended - // Stability: Development - // - // Examples: eu-central-1 - // Note: SHOULD be equal to the `cloud.region` resource attribute of the invoked - // function. - FaaSInvokedRegionKey = attribute.Key("faas.invoked_region") - - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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.name`] - // 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). - // - // - // [`code.namespace`/`code.function.name`]: /docs/general/attributes.md#source-code-attributes - FaaSNameKey = attribute.Key("faas.name") - - // 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] format expressed in [UTC]. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 2020-01-23T13:47:06Z - // - // [ISO 8601]: https://www.iso.org/iso-8601-date-and-time-format.html - // [UTC]: https://www.w3.org/TR/NOTE-datetime - FaaSTimeKey = attribute.Key("faas.time") - - // 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: Recommended - // Stability: Development - // - // Examples: - FaaSTriggerKey = attribute.Key("faas.trigger") - - // 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: Recommended - // Stability: Development - // - // Examples: "26", "pinkfroid-00002" - // Note: Depending on the cloud provider and platform, use: - // - // - **AWS Lambda:** The [function version] - // (an integer represented as a decimal string). - // - **Google Cloud Run (Services):** The [revision] - // (i.e., the function name plus the revision suffix). - // - **Google Cloud Functions:** The value of the - // [`K_REVISION` environment variable]. - // - **Azure Functions:** Not applicable. Do not set this attribute. - // - // - // [function version]: https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html - // [revision]: https://cloud.google.com/run/docs/managing/revisions - // [`K_REVISION` environment variable]: https://cloud.google.com/functions/docs/env-var#runtime_environment_variables_set_automatically - FaaSVersionKey = attribute.Key("faas.version") -) - -// 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) -} - -// FaaSCron returns an attribute KeyValue conforming to the "faas.cron" semantic -// conventions. It represents a string containing the schedule period as -// [Cron Expression]. -// -// [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) -} - -// 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] format expressed in -// [UTC]. -// -// [ISO 8601]: https://www.iso.org/iso-8601-date-and-time-format.html -// [UTC]: https://www.w3.org/TR/NOTE-datetime -func FaaSDocumentTime(val string) attribute.KeyValue { - return FaaSDocumentTimeKey.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) -} - -// 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) -} - -// 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) -} - -// 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) -} - -// 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] format expressed in [UTC]. -// -// [ISO 8601]: https://www.iso.org/iso-8601-date-and-time-format.html -// [UTC]: https://www.w3.org/TR/NOTE-datetime -func FaaSTime(val string) attribute.KeyValue { - return FaaSTimeKey.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) -} - -// Enum values for faas.document.operation -var ( - // When a new object is created. - // Stability: development - FaaSDocumentOperationInsert = FaaSDocumentOperationKey.String("insert") - // When an object is modified. - // Stability: development - FaaSDocumentOperationEdit = FaaSDocumentOperationKey.String("edit") - // When an object is deleted. - // Stability: development - FaaSDocumentOperationDelete = FaaSDocumentOperationKey.String("delete") -) - -// Enum values for faas.invoked_provider -var ( - // Alibaba Cloud - // Stability: development - FaaSInvokedProviderAlibabaCloud = FaaSInvokedProviderKey.String("alibaba_cloud") - // Amazon Web Services - // Stability: development - FaaSInvokedProviderAWS = FaaSInvokedProviderKey.String("aws") - // Microsoft Azure - // Stability: development - FaaSInvokedProviderAzure = FaaSInvokedProviderKey.String("azure") - // Google Cloud Platform - // Stability: development - FaaSInvokedProviderGCP = FaaSInvokedProviderKey.String("gcp") - // Tencent Cloud - // Stability: development - FaaSInvokedProviderTencentCloud = FaaSInvokedProviderKey.String("tencent_cloud") -) - -// Enum values for faas.trigger -var ( - // A response to some data source operation such as a database or filesystem - // read/write - // Stability: development - FaaSTriggerDatasource = FaaSTriggerKey.String("datasource") - // To provide an answer to an inbound HTTP request - // Stability: development - FaaSTriggerHTTP = FaaSTriggerKey.String("http") - // A function is set to be executed when messages are sent to a messaging system - // Stability: development - FaaSTriggerPubsub = FaaSTriggerKey.String("pubsub") - // A function is scheduled to be executed regularly - // Stability: development - FaaSTriggerTimer = FaaSTriggerKey.String("timer") - // If none of the others apply - // Stability: development - FaaSTriggerOther = FaaSTriggerKey.String("other") -) - -// Namespace: feature_flag -const ( - // FeatureFlagContextIDKey is the attribute Key conforming to the - // "feature_flag.context.id" semantic conventions. It represents the unique - // identifier for the flag evaluation context. For example, the targeting key. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "5157782b-2203-4c80-a857-dbbd5e7761db" - FeatureFlagContextIDKey = attribute.Key("feature_flag.context.id") - - // FeatureFlagEvaluationErrorMessageKey is the attribute Key conforming to the - // "feature_flag.evaluation.error.message" semantic conventions. It represents a - // message explaining the nature of an error occurring during flag evaluation. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "Flag `header-color` expected type `string` but found type `number` - // " - FeatureFlagEvaluationErrorMessageKey = attribute.Key("feature_flag.evaluation.error.message") - - // FeatureFlagEvaluationReasonKey is the attribute Key conforming to the - // "feature_flag.evaluation.reason" semantic conventions. It represents the - // reason code which shows how a feature flag value was determined. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "static", "targeting_match", "error", "default" - FeatureFlagEvaluationReasonKey = attribute.Key("feature_flag.evaluation.reason") - - // FeatureFlagKeyKey is the attribute Key conforming to the "feature_flag.key" - // semantic conventions. It represents the lookup key of the feature flag. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // 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 - // identifies the feature flag provider. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "Flag Manager" - FeatureFlagProviderNameKey = attribute.Key("feature_flag.provider_name") - - // FeatureFlagSetIDKey is the attribute Key conforming to the - // "feature_flag.set.id" semantic conventions. It represents the identifier of - // the [flag set] to which the feature flag belongs. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "proj-1", "ab98sgs", "service1/dev" - // - // [flag set]: https://openfeature.dev/specification/glossary/#flag-set - FeatureFlagSetIDKey = attribute.Key("feature_flag.set.id") - - // FeatureFlagVariantKey is the attribute Key conforming to the - // "feature_flag.variant" semantic conventions. It represents a semantic - // identifier for an evaluated flag value. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // 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`. - FeatureFlagVariantKey = attribute.Key("feature_flag.variant") - - // FeatureFlagVersionKey is the attribute Key conforming to the - // "feature_flag.version" semantic conventions. It represents the version of the - // ruleset used during the evaluation. This may be any stable value which - // uniquely identifies the ruleset. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "1", "01ABCDEF" - FeatureFlagVersionKey = attribute.Key("feature_flag.version") -) - -// FeatureFlagContextID returns an attribute KeyValue conforming to the -// "feature_flag.context.id" semantic conventions. It represents the unique -// identifier for the flag evaluation context. For example, the targeting key. -func FeatureFlagContextID(val string) attribute.KeyValue { - return FeatureFlagContextIDKey.String(val) -} - -// FeatureFlagEvaluationErrorMessage returns an attribute KeyValue conforming to -// the "feature_flag.evaluation.error.message" semantic conventions. It -// represents a message explaining the nature of an error occurring during flag -// evaluation. -func FeatureFlagEvaluationErrorMessage(val string) attribute.KeyValue { - return FeatureFlagEvaluationErrorMessageKey.String(val) -} - -// FeatureFlagKey returns an attribute KeyValue conforming to the -// "feature_flag.key" semantic conventions. It represents the lookup key 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 -// identifies the feature flag provider. -func FeatureFlagProviderName(val string) attribute.KeyValue { - return FeatureFlagProviderNameKey.String(val) -} - -// FeatureFlagSetID returns an attribute KeyValue conforming to the -// "feature_flag.set.id" semantic conventions. It represents the identifier of -// the [flag set] to which the feature flag belongs. -// -// [flag set]: https://openfeature.dev/specification/glossary/#flag-set -func FeatureFlagSetID(val string) attribute.KeyValue { - return FeatureFlagSetIDKey.String(val) -} - -// FeatureFlagVariant returns an attribute KeyValue conforming to the -// "feature_flag.variant" semantic conventions. It represents a semantic -// identifier for an evaluated flag value. -func FeatureFlagVariant(val string) attribute.KeyValue { - return FeatureFlagVariantKey.String(val) -} - -// FeatureFlagVersion returns an attribute KeyValue conforming to the -// "feature_flag.version" semantic conventions. It represents the version of the -// ruleset used during the evaluation. This may be any stable value which -// uniquely identifies the ruleset. -func FeatureFlagVersion(val string) attribute.KeyValue { - return FeatureFlagVersionKey.String(val) -} - -// Enum values for feature_flag.evaluation.reason -var ( - // The resolved value is static (no dynamic evaluation). - // Stability: development - FeatureFlagEvaluationReasonStatic = FeatureFlagEvaluationReasonKey.String("static") - // The resolved value fell back to a pre-configured value (no dynamic evaluation - // occurred or dynamic evaluation yielded no result). - // Stability: development - FeatureFlagEvaluationReasonDefault = FeatureFlagEvaluationReasonKey.String("default") - // The resolved value was the result of a dynamic evaluation, such as a rule or - // specific user-targeting. - // Stability: development - FeatureFlagEvaluationReasonTargetingMatch = FeatureFlagEvaluationReasonKey.String("targeting_match") - // The resolved value was the result of pseudorandom assignment. - // Stability: development - FeatureFlagEvaluationReasonSplit = FeatureFlagEvaluationReasonKey.String("split") - // The resolved value was retrieved from cache. - // Stability: development - FeatureFlagEvaluationReasonCached = FeatureFlagEvaluationReasonKey.String("cached") - // The resolved value was the result of the flag being disabled in the - // management system. - // Stability: development - FeatureFlagEvaluationReasonDisabled = FeatureFlagEvaluationReasonKey.String("disabled") - // The reason for the resolved value could not be determined. - // Stability: development - FeatureFlagEvaluationReasonUnknown = FeatureFlagEvaluationReasonKey.String("unknown") - // The resolved value is non-authoritative or possibly out of date - // Stability: development - FeatureFlagEvaluationReasonStale = FeatureFlagEvaluationReasonKey.String("stale") - // The resolved value was the result of an error. - // Stability: development - FeatureFlagEvaluationReasonError = FeatureFlagEvaluationReasonKey.String("error") -) - -// Namespace: file -const ( - // FileAccessedKey is the attribute Key conforming to the "file.accessed" - // semantic conventions. It represents the time when the file was last accessed, - // in ISO 8601 format. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "2021-01-01T12:00:00Z" - // Note: This attribute might not be supported by some file systems — NFS, - // FAT32, in embedded OS, etc. - FileAccessedKey = attribute.Key("file.accessed") - - // FileAttributesKey is the attribute Key conforming to the "file.attributes" - // semantic conventions. It represents the array of file attributes. - // - // Type: string[] - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "readonly", "hidden" - // Note: Attributes names depend on the OS or file system. Here’s a - // non-exhaustive list of values expected for this attribute: `archive`, - // `compressed`, `directory`, `encrypted`, `execute`, `hidden`, `immutable`, - // `journaled`, `read`, `readonly`, `symbolic link`, `system`, `temporary`, - // `write`. - FileAttributesKey = attribute.Key("file.attributes") - - // FileChangedKey is the attribute Key conforming to the "file.changed" semantic - // conventions. It represents the time when the file attributes or metadata was - // last changed, in ISO 8601 format. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "2021-01-01T12:00:00Z" - // Note: `file.changed` captures the time when any of the file's properties or - // attributes (including the content) are changed, while `file.modified` - // captures the timestamp when the file content is modified. - FileChangedKey = attribute.Key("file.changed") - - // FileCreatedKey is the attribute Key conforming to the "file.created" semantic - // conventions. It represents the time when the file was created, in ISO 8601 - // format. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "2021-01-01T12:00:00Z" - // Note: This attribute might not be supported by some file systems — NFS, - // FAT32, in embedded OS, etc. - FileCreatedKey = attribute.Key("file.created") - - // FileDirectoryKey is the attribute Key conforming to the "file.directory" - // semantic conventions. It represents the directory where the file is located. - // It should include the drive letter, when appropriate. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "/home/user", "C:\Program Files\MyApp" - FileDirectoryKey = attribute.Key("file.directory") - - // FileExtensionKey is the attribute Key conforming to the "file.extension" - // semantic conventions. It represents the file extension, excluding the leading - // dot. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "png", "gz" - // Note: When the file name has multiple extensions (example.tar.gz), only the - // last one should be captured ("gz", not "tar.gz"). - FileExtensionKey = attribute.Key("file.extension") - - // FileForkNameKey is the attribute Key conforming to the "file.fork_name" - // semantic conventions. It represents the name of the fork. A fork is - // additional data associated with a filesystem object. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "Zone.Identifer" - // Note: On Linux, a resource fork is used to store additional data with a - // filesystem object. A file always has at least one fork for the data portion, - // and additional forks may exist. - // On NTFS, this is analogous to an Alternate Data Stream (ADS), and the default - // data stream for a file is just called $DATA. Zone.Identifier is commonly used - // by Windows to track contents downloaded from the Internet. An ADS is - // typically of the form: C:\path\to\filename.extension:some_fork_name, and - // some_fork_name is the value that should populate `fork_name`. - // `filename.extension` should populate `file.name`, and `extension` should - // populate `file.extension`. The full path, `file.path`, will include the fork - // name. - FileForkNameKey = attribute.Key("file.fork_name") - - // FileGroupIDKey is the attribute Key conforming to the "file.group.id" - // semantic conventions. It represents the primary Group ID (GID) of the file. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "1000" - FileGroupIDKey = attribute.Key("file.group.id") - - // FileGroupNameKey is the attribute Key conforming to the "file.group.name" - // semantic conventions. It represents the primary group name of the file. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "users" - FileGroupNameKey = attribute.Key("file.group.name") - - // FileInodeKey is the attribute Key conforming to the "file.inode" semantic - // conventions. It represents the inode representing the file in the filesystem. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "256383" - FileInodeKey = attribute.Key("file.inode") - - // FileModeKey is the attribute Key conforming to the "file.mode" semantic - // conventions. It represents the mode of the file in octal representation. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "0640" - FileModeKey = attribute.Key("file.mode") - - // FileModifiedKey is the attribute Key conforming to the "file.modified" - // semantic conventions. It represents the time when the file content was last - // modified, in ISO 8601 format. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "2021-01-01T12:00:00Z" - FileModifiedKey = attribute.Key("file.modified") - - // FileNameKey is the attribute Key conforming to the "file.name" semantic - // conventions. It represents the name of the file including the extension, - // without the directory. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "example.png" - FileNameKey = attribute.Key("file.name") - - // FileOwnerIDKey is the attribute Key conforming to the "file.owner.id" - // semantic conventions. It represents the user ID (UID) or security identifier - // (SID) of the file owner. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "1000" - FileOwnerIDKey = attribute.Key("file.owner.id") - - // FileOwnerNameKey is the attribute Key conforming to the "file.owner.name" - // semantic conventions. It represents the username of the file owner. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "root" - FileOwnerNameKey = attribute.Key("file.owner.name") - - // FilePathKey is the attribute Key conforming to the "file.path" semantic - // conventions. It represents the full path to the file, including the file - // name. It should include the drive letter, when appropriate. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "/home/alice/example.png", "C:\Program Files\MyApp\myapp.exe" - FilePathKey = attribute.Key("file.path") - - // FileSizeKey is the attribute Key conforming to the "file.size" semantic - // conventions. It represents the file size in bytes. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - FileSizeKey = attribute.Key("file.size") - - // FileSymbolicLinkTargetPathKey is the attribute Key conforming to the - // "file.symbolic_link.target_path" semantic conventions. It represents the path - // to the target of a symbolic link. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "/usr/bin/python3" - // Note: This attribute is only applicable to symbolic links. - FileSymbolicLinkTargetPathKey = attribute.Key("file.symbolic_link.target_path") -) - -// FileAccessed returns an attribute KeyValue conforming to the "file.accessed" -// semantic conventions. It represents the time when the file was last accessed, -// in ISO 8601 format. -func FileAccessed(val string) attribute.KeyValue { - return FileAccessedKey.String(val) -} - -// FileAttributes returns an attribute KeyValue conforming to the -// "file.attributes" semantic conventions. It represents the array of file -// attributes. -func FileAttributes(val ...string) attribute.KeyValue { - return FileAttributesKey.StringSlice(val) -} - -// FileChanged returns an attribute KeyValue conforming to the "file.changed" -// semantic conventions. It represents the time when the file attributes or -// metadata was last changed, in ISO 8601 format. -func FileChanged(val string) attribute.KeyValue { - return FileChangedKey.String(val) -} - -// FileCreated returns an attribute KeyValue conforming to the "file.created" -// semantic conventions. It represents the time when the file was created, in ISO -// 8601 format. -func FileCreated(val string) attribute.KeyValue { - return FileCreatedKey.String(val) -} - -// FileDirectory returns an attribute KeyValue conforming to the "file.directory" -// semantic conventions. It represents the directory where the file is located. -// It should include the drive letter, when appropriate. -func FileDirectory(val string) attribute.KeyValue { - return FileDirectoryKey.String(val) -} - -// FileExtension returns an attribute KeyValue conforming to the "file.extension" -// semantic conventions. It represents the file extension, excluding the leading -// dot. -func FileExtension(val string) attribute.KeyValue { - return FileExtensionKey.String(val) -} - -// FileForkName returns an attribute KeyValue conforming to the "file.fork_name" -// semantic conventions. It represents the name of the fork. A fork is additional -// data associated with a filesystem object. -func FileForkName(val string) attribute.KeyValue { - return FileForkNameKey.String(val) -} - -// FileGroupID returns an attribute KeyValue conforming to the "file.group.id" -// semantic conventions. It represents the primary Group ID (GID) of the file. -func FileGroupID(val string) attribute.KeyValue { - return FileGroupIDKey.String(val) -} - -// FileGroupName returns an attribute KeyValue conforming to the -// "file.group.name" semantic conventions. It represents the primary group name -// of the file. -func FileGroupName(val string) attribute.KeyValue { - return FileGroupNameKey.String(val) -} - -// FileInode returns an attribute KeyValue conforming to the "file.inode" -// semantic conventions. It represents the inode representing the file in the -// filesystem. -func FileInode(val string) attribute.KeyValue { - return FileInodeKey.String(val) -} - -// FileMode returns an attribute KeyValue conforming to the "file.mode" semantic -// conventions. It represents the mode of the file in octal representation. -func FileMode(val string) attribute.KeyValue { - return FileModeKey.String(val) -} - -// FileModified returns an attribute KeyValue conforming to the "file.modified" -// semantic conventions. It represents the time when the file content was last -// modified, in ISO 8601 format. -func FileModified(val string) attribute.KeyValue { - return FileModifiedKey.String(val) -} - -// FileName returns an attribute KeyValue conforming to the "file.name" semantic -// conventions. It represents the name of the file including the extension, -// without the directory. -func FileName(val string) attribute.KeyValue { - return FileNameKey.String(val) -} - -// FileOwnerID returns an attribute KeyValue conforming to the "file.owner.id" -// semantic conventions. It represents the user ID (UID) or security identifier -// (SID) of the file owner. -func FileOwnerID(val string) attribute.KeyValue { - return FileOwnerIDKey.String(val) -} - -// FileOwnerName returns an attribute KeyValue conforming to the -// "file.owner.name" semantic conventions. It represents the username of the file -// owner. -func FileOwnerName(val string) attribute.KeyValue { - return FileOwnerNameKey.String(val) -} - -// FilePath returns an attribute KeyValue conforming to the "file.path" semantic -// conventions. It represents the full path to the file, including the file name. -// It should include the drive letter, when appropriate. -func FilePath(val string) attribute.KeyValue { - return FilePathKey.String(val) -} - -// FileSize returns an attribute KeyValue conforming to the "file.size" semantic -// conventions. It represents the file size in bytes. -func FileSize(val int) attribute.KeyValue { - return FileSizeKey.Int(val) -} - -// FileSymbolicLinkTargetPath returns an attribute KeyValue conforming to the -// "file.symbolic_link.target_path" semantic conventions. It represents the path -// to the target of a symbolic link. -func FileSymbolicLinkTargetPath(val string) attribute.KeyValue { - return FileSymbolicLinkTargetPathKey.String(val) -} - -// Namespace: gcp -const ( - // GCPClientServiceKey is the attribute Key conforming to the - // "gcp.client.service" semantic conventions. It represents the identifies the - // Google Cloud service for which the official client library is intended. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "appengine", "run", "firestore", "alloydb", "spanner" - // Note: Intended to be a stable identifier for Google Cloud client libraries - // that is uniform across implementation languages. The value should be derived - // from the canonical service domain for the service; for example, - // 'foo.googleapis.com' should result in a value of 'foo'. - GCPClientServiceKey = attribute.Key("gcp.client.service") - - // GCPCloudRunJobExecutionKey is the attribute Key conforming to the - // "gcp.cloud_run.job.execution" semantic conventions. It represents the name of - // the Cloud Run [execution] being run for the Job, as set by the - // [`CLOUD_RUN_EXECUTION`] environment variable. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "job-name-xxxx", "sample-job-mdw84" - // - // [execution]: https://cloud.google.com/run/docs/managing/job-executions - // [`CLOUD_RUN_EXECUTION`]: https://cloud.google.com/run/docs/container-contract#jobs-env-vars - 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`] - // environment variable. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 0, 1 - // - // [`CLOUD_RUN_TASK_INDEX`]: https://cloud.google.com/run/docs/container-contract#jobs-env-vars - GCPCloudRunJobTaskIndexKey = attribute.Key("gcp.cloud_run.job.task_index") - - // 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] - // . - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "my-host1234.example.com", - // "sample-vm.us-west1-b.c.my-project.internal" - // - // [custom hostname]: https://cloud.google.com/compute/docs/instances/custom-hostname-vm - 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]. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "instance-1", "my-vm-name" - // - // [default internal DNS name]: https://cloud.google.com/compute/docs/internal-dns#instance-fully-qualified-domain-names - GCPGceInstanceNameKey = attribute.Key("gcp.gce.instance.name") -) - -// GCPClientService returns an attribute KeyValue conforming to the -// "gcp.client.service" semantic conventions. It represents the identifies the -// Google Cloud service for which the official client library is intended. -func GCPClientService(val string) attribute.KeyValue { - return GCPClientServiceKey.String(val) -} - -// GCPCloudRunJobExecution returns an attribute KeyValue conforming to the -// "gcp.cloud_run.job.execution" semantic conventions. It represents the name of -// the Cloud Run [execution] being run for the Job, as set by the -// [`CLOUD_RUN_EXECUTION`] environment variable. -// -// [execution]: https://cloud.google.com/run/docs/managing/job-executions -// [`CLOUD_RUN_EXECUTION`]: https://cloud.google.com/run/docs/container-contract#jobs-env-vars -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`] -// environment variable. -// -// [`CLOUD_RUN_TASK_INDEX`]: https://cloud.google.com/run/docs/container-contract#jobs-env-vars -func GCPCloudRunJobTaskIndex(val int) attribute.KeyValue { - return GCPCloudRunJobTaskIndexKey.Int(val) -} - -// 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] -// . -// -// [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]. -// -// [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) -} - -// Namespace: gen_ai -const ( - // GenAIOpenaiRequestResponseFormatKey is the attribute Key conforming to the - // "gen_ai.openai.request.response_format" semantic conventions. It represents - // the response format that is requested. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "json" - GenAIOpenaiRequestResponseFormatKey = attribute.Key("gen_ai.openai.request.response_format") - - // GenAIOpenaiRequestServiceTierKey is the attribute Key conforming to the - // "gen_ai.openai.request.service_tier" semantic conventions. It represents the - // service tier requested. May be a specific tier, default, or auto. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "auto", "default" - GenAIOpenaiRequestServiceTierKey = attribute.Key("gen_ai.openai.request.service_tier") - - // GenAIOpenaiResponseServiceTierKey is the attribute Key conforming to the - // "gen_ai.openai.response.service_tier" semantic conventions. It represents the - // service tier used for the response. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "scale", "default" - GenAIOpenaiResponseServiceTierKey = attribute.Key("gen_ai.openai.response.service_tier") - - // GenAIOpenaiResponseSystemFingerprintKey is the attribute Key conforming to - // the "gen_ai.openai.response.system_fingerprint" semantic conventions. It - // represents a fingerprint to track any eventual change in the Generative AI - // environment. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "fp_44709d6fcb" - GenAIOpenaiResponseSystemFingerprintKey = attribute.Key("gen_ai.openai.response.system_fingerprint") - - // GenAIOperationNameKey is the attribute Key conforming to the - // "gen_ai.operation.name" semantic conventions. It represents the name of the - // operation being performed. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - // Note: If one of the predefined values applies, but specific system uses a - // different name it's RECOMMENDED to document it in the semantic conventions - // for specific GenAI system and use system-specific name in the - // instrumentation. If a different name is not documented, instrumentation - // libraries SHOULD use applicable predefined value. - GenAIOperationNameKey = attribute.Key("gen_ai.operation.name") - - // GenAIRequestEncodingFormatsKey is the attribute Key conforming to the - // "gen_ai.request.encoding_formats" semantic conventions. It represents the - // encoding formats requested in an embeddings operation, if specified. - // - // Type: string[] - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "base64"], ["float", "binary" - // Note: In some GenAI systems the encoding formats are called embedding types. - // Also, some GenAI systems only accept a single format per request. - GenAIRequestEncodingFormatsKey = attribute.Key("gen_ai.request.encoding_formats") - - // GenAIRequestFrequencyPenaltyKey is the attribute Key conforming to the - // "gen_ai.request.frequency_penalty" semantic conventions. It represents the - // frequency penalty setting for the GenAI request. - // - // Type: double - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 0.1 - GenAIRequestFrequencyPenaltyKey = attribute.Key("gen_ai.request.frequency_penalty") - - // GenAIRequestMaxTokensKey is the attribute Key conforming to the - // "gen_ai.request.max_tokens" semantic conventions. It represents the maximum - // number of tokens the model generates for a request. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 100 - GenAIRequestMaxTokensKey = attribute.Key("gen_ai.request.max_tokens") - - // GenAIRequestModelKey is the attribute Key conforming to the - // "gen_ai.request.model" semantic conventions. It represents the name of the - // GenAI model a request is being made to. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: gpt-4 - GenAIRequestModelKey = attribute.Key("gen_ai.request.model") - - // GenAIRequestPresencePenaltyKey is the attribute Key conforming to the - // "gen_ai.request.presence_penalty" semantic conventions. It represents the - // presence penalty setting for the GenAI request. - // - // Type: double - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 0.1 - GenAIRequestPresencePenaltyKey = attribute.Key("gen_ai.request.presence_penalty") - - // GenAIRequestSeedKey is the attribute Key conforming to the - // "gen_ai.request.seed" semantic conventions. It represents the requests with - // same seed value more likely to return same result. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 100 - GenAIRequestSeedKey = attribute.Key("gen_ai.request.seed") - - // GenAIRequestStopSequencesKey is the attribute Key conforming to the - // "gen_ai.request.stop_sequences" semantic conventions. It represents the list - // of sequences that the model will use to stop generating further tokens. - // - // Type: string[] - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "forest", "lived" - GenAIRequestStopSequencesKey = attribute.Key("gen_ai.request.stop_sequences") - - // GenAIRequestTemperatureKey is the attribute Key conforming to the - // "gen_ai.request.temperature" semantic conventions. It represents the - // temperature setting for the GenAI request. - // - // Type: double - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 0.0 - GenAIRequestTemperatureKey = attribute.Key("gen_ai.request.temperature") - - // GenAIRequestTopKKey is the attribute Key conforming to the - // "gen_ai.request.top_k" semantic conventions. It represents the top_k sampling - // setting for the GenAI request. - // - // Type: double - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 1.0 - GenAIRequestTopKKey = attribute.Key("gen_ai.request.top_k") - - // GenAIRequestTopPKey is the attribute Key conforming to the - // "gen_ai.request.top_p" semantic conventions. It represents the top_p sampling - // setting for the GenAI request. - // - // Type: double - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 1.0 - GenAIRequestTopPKey = attribute.Key("gen_ai.request.top_p") - - // GenAIResponseFinishReasonsKey is the attribute Key conforming to the - // "gen_ai.response.finish_reasons" semantic conventions. It represents the - // array of reasons the model stopped generating tokens, corresponding to each - // generation received. - // - // Type: string[] - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "stop"], ["stop", "length" - GenAIResponseFinishReasonsKey = attribute.Key("gen_ai.response.finish_reasons") - - // GenAIResponseIDKey is the attribute Key conforming to the - // "gen_ai.response.id" semantic conventions. It represents the unique - // identifier for the completion. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "chatcmpl-123" - GenAIResponseIDKey = attribute.Key("gen_ai.response.id") - - // GenAIResponseModelKey is the attribute Key conforming to the - // "gen_ai.response.model" semantic conventions. It represents the name of the - // model that generated the response. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "gpt-4-0613" - GenAIResponseModelKey = attribute.Key("gen_ai.response.model") - - // GenAISystemKey is the attribute Key conforming to the "gen_ai.system" - // semantic conventions. It represents the Generative AI product as identified - // by the client or server instrumentation. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: openai - // Note: The `gen_ai.system` describes a family of GenAI models with specific - // model identified - // by `gen_ai.request.model` and `gen_ai.response.model` attributes. - // - // The actual GenAI product may differ from the one identified by the client. - // Multiple systems, including Azure OpenAI and Gemini, are accessible by OpenAI - // client - // libraries. In such cases, the `gen_ai.system` is set to `openai` based on the - // instrumentation's best knowledge, instead of the actual system. The - // `server.address` - // attribute may help identify the actual system in use for `openai`. - // - // For custom model, a custom friendly name SHOULD be used. - // If none of these options apply, the `gen_ai.system` SHOULD be set to `_OTHER` - // . - GenAISystemKey = attribute.Key("gen_ai.system") - - // GenAITokenTypeKey is the attribute Key conforming to the "gen_ai.token.type" - // semantic conventions. It represents the type of token being counted. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "input", "output" - GenAITokenTypeKey = attribute.Key("gen_ai.token.type") - - // GenAIUsageInputTokensKey is the attribute Key conforming to the - // "gen_ai.usage.input_tokens" semantic conventions. It represents the number of - // tokens used in the GenAI input (prompt). - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 100 - GenAIUsageInputTokensKey = attribute.Key("gen_ai.usage.input_tokens") - - // GenAIUsageOutputTokensKey is the attribute Key conforming to the - // "gen_ai.usage.output_tokens" semantic conventions. It represents the number - // of tokens used in the GenAI response (completion). - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 180 - GenAIUsageOutputTokensKey = attribute.Key("gen_ai.usage.output_tokens") -) - -// GenAIOpenaiResponseServiceTier returns an attribute KeyValue conforming to the -// "gen_ai.openai.response.service_tier" semantic conventions. It represents the -// service tier used for the response. -func GenAIOpenaiResponseServiceTier(val string) attribute.KeyValue { - return GenAIOpenaiResponseServiceTierKey.String(val) -} - -// GenAIOpenaiResponseSystemFingerprint returns an attribute KeyValue conforming -// to the "gen_ai.openai.response.system_fingerprint" semantic conventions. It -// represents a fingerprint to track any eventual change in the Generative AI -// environment. -func GenAIOpenaiResponseSystemFingerprint(val string) attribute.KeyValue { - return GenAIOpenaiResponseSystemFingerprintKey.String(val) -} - -// GenAIRequestEncodingFormats returns an attribute KeyValue conforming to the -// "gen_ai.request.encoding_formats" semantic conventions. It represents the -// encoding formats requested in an embeddings operation, if specified. -func GenAIRequestEncodingFormats(val ...string) attribute.KeyValue { - return GenAIRequestEncodingFormatsKey.StringSlice(val) -} - -// GenAIRequestFrequencyPenalty returns an attribute KeyValue conforming to the -// "gen_ai.request.frequency_penalty" semantic conventions. It represents the -// frequency penalty setting for the GenAI request. -func GenAIRequestFrequencyPenalty(val float64) attribute.KeyValue { - return GenAIRequestFrequencyPenaltyKey.Float64(val) -} - -// GenAIRequestMaxTokens returns an attribute KeyValue conforming to the -// "gen_ai.request.max_tokens" semantic conventions. It represents the maximum -// number of tokens the model generates for a request. -func GenAIRequestMaxTokens(val int) attribute.KeyValue { - return GenAIRequestMaxTokensKey.Int(val) -} - -// GenAIRequestModel returns an attribute KeyValue conforming to the -// "gen_ai.request.model" semantic conventions. It represents the name of the -// GenAI model a request is being made to. -func GenAIRequestModel(val string) attribute.KeyValue { - return GenAIRequestModelKey.String(val) -} - -// GenAIRequestPresencePenalty returns an attribute KeyValue conforming to the -// "gen_ai.request.presence_penalty" semantic conventions. It represents the -// presence penalty setting for the GenAI request. -func GenAIRequestPresencePenalty(val float64) attribute.KeyValue { - return GenAIRequestPresencePenaltyKey.Float64(val) -} - -// GenAIRequestSeed returns an attribute KeyValue conforming to the -// "gen_ai.request.seed" semantic conventions. It represents the requests with -// same seed value more likely to return same result. -func GenAIRequestSeed(val int) attribute.KeyValue { - return GenAIRequestSeedKey.Int(val) -} - -// GenAIRequestStopSequences returns an attribute KeyValue conforming to the -// "gen_ai.request.stop_sequences" semantic conventions. It represents the list -// of sequences that the model will use to stop generating further tokens. -func GenAIRequestStopSequences(val ...string) attribute.KeyValue { - return GenAIRequestStopSequencesKey.StringSlice(val) -} - -// GenAIRequestTemperature returns an attribute KeyValue conforming to the -// "gen_ai.request.temperature" semantic conventions. It represents the -// temperature setting for the GenAI request. -func GenAIRequestTemperature(val float64) attribute.KeyValue { - return GenAIRequestTemperatureKey.Float64(val) -} - -// GenAIRequestTopK returns an attribute KeyValue conforming to the -// "gen_ai.request.top_k" semantic conventions. It represents the top_k sampling -// setting for the GenAI request. -func GenAIRequestTopK(val float64) attribute.KeyValue { - return GenAIRequestTopKKey.Float64(val) -} - -// GenAIRequestTopP returns an attribute KeyValue conforming to the -// "gen_ai.request.top_p" semantic conventions. It represents the top_p sampling -// setting for the GenAI request. -func GenAIRequestTopP(val float64) attribute.KeyValue { - return GenAIRequestTopPKey.Float64(val) -} - -// GenAIResponseFinishReasons returns an attribute KeyValue conforming to the -// "gen_ai.response.finish_reasons" semantic conventions. It represents the array -// of reasons the model stopped generating tokens, corresponding to each -// generation received. -func GenAIResponseFinishReasons(val ...string) attribute.KeyValue { - return GenAIResponseFinishReasonsKey.StringSlice(val) -} - -// GenAIResponseID returns an attribute KeyValue conforming to the -// "gen_ai.response.id" semantic conventions. It represents the unique identifier -// for the completion. -func GenAIResponseID(val string) attribute.KeyValue { - return GenAIResponseIDKey.String(val) -} - -// GenAIResponseModel returns an attribute KeyValue conforming to the -// "gen_ai.response.model" semantic conventions. It represents the name of the -// model that generated the response. -func GenAIResponseModel(val string) attribute.KeyValue { - return GenAIResponseModelKey.String(val) -} - -// GenAIUsageInputTokens returns an attribute KeyValue conforming to the -// "gen_ai.usage.input_tokens" semantic conventions. It represents the number of -// tokens used in the GenAI input (prompt). -func GenAIUsageInputTokens(val int) attribute.KeyValue { - return GenAIUsageInputTokensKey.Int(val) -} - -// GenAIUsageOutputTokens returns an attribute KeyValue conforming to the -// "gen_ai.usage.output_tokens" semantic conventions. It represents the number of -// tokens used in the GenAI response (completion). -func GenAIUsageOutputTokens(val int) attribute.KeyValue { - return GenAIUsageOutputTokensKey.Int(val) -} - -// Enum values for gen_ai.openai.request.response_format -var ( - // Text response format - // Stability: development - GenAIOpenaiRequestResponseFormatText = GenAIOpenaiRequestResponseFormatKey.String("text") - // JSON object response format - // Stability: development - GenAIOpenaiRequestResponseFormatJSONObject = GenAIOpenaiRequestResponseFormatKey.String("json_object") - // JSON schema response format - // Stability: development - GenAIOpenaiRequestResponseFormatJSONSchema = GenAIOpenaiRequestResponseFormatKey.String("json_schema") -) - -// Enum values for gen_ai.openai.request.service_tier -var ( - // The system will utilize scale tier credits until they are exhausted. - // Stability: development - GenAIOpenaiRequestServiceTierAuto = GenAIOpenaiRequestServiceTierKey.String("auto") - // The system will utilize the default scale tier. - // Stability: development - GenAIOpenaiRequestServiceTierDefault = GenAIOpenaiRequestServiceTierKey.String("default") -) - -// Enum values for gen_ai.operation.name -var ( - // Chat completion operation such as [OpenAI Chat API] - // Stability: development - // - // [OpenAI Chat API]: https://platform.openai.com/docs/api-reference/chat - GenAIOperationNameChat = GenAIOperationNameKey.String("chat") - // Text completions operation such as [OpenAI Completions API (Legacy)] - // Stability: development - // - // [OpenAI Completions API (Legacy)]: https://platform.openai.com/docs/api-reference/completions - GenAIOperationNameTextCompletion = GenAIOperationNameKey.String("text_completion") - // Embeddings operation such as [OpenAI Create embeddings API] - // Stability: development - // - // [OpenAI Create embeddings API]: https://platform.openai.com/docs/api-reference/embeddings/create - GenAIOperationNameEmbeddings = GenAIOperationNameKey.String("embeddings") -) - -// Enum values for gen_ai.system -var ( - // OpenAI - // Stability: development - GenAISystemOpenai = GenAISystemKey.String("openai") - // Vertex AI - // Stability: development - GenAISystemVertexAI = GenAISystemKey.String("vertex_ai") - // Gemini - // Stability: development - GenAISystemGemini = GenAISystemKey.String("gemini") - // Anthropic - // Stability: development - GenAISystemAnthropic = GenAISystemKey.String("anthropic") - // Cohere - // Stability: development - GenAISystemCohere = GenAISystemKey.String("cohere") - // Azure AI Inference - // Stability: development - GenAISystemAzAIInference = GenAISystemKey.String("az.ai.inference") - // Azure OpenAI - // Stability: development - GenAISystemAzAIOpenai = GenAISystemKey.String("az.ai.openai") - // IBM Watsonx AI - // Stability: development - GenAISystemIbmWatsonxAI = GenAISystemKey.String("ibm.watsonx.ai") - // AWS Bedrock - // Stability: development - GenAISystemAWSBedrock = GenAISystemKey.String("aws.bedrock") - // Perplexity - // Stability: development - GenAISystemPerplexity = GenAISystemKey.String("perplexity") - // xAI - // Stability: development - GenAISystemXai = GenAISystemKey.String("xai") - // DeepSeek - // Stability: development - GenAISystemDeepseek = GenAISystemKey.String("deepseek") - // Groq - // Stability: development - GenAISystemGroq = GenAISystemKey.String("groq") - // Mistral AI - // Stability: development - GenAISystemMistralAI = GenAISystemKey.String("mistral_ai") -) - -// Enum values for gen_ai.token.type -var ( - // Input tokens (prompt, input, etc.) - // Stability: development - GenAITokenTypeInput = GenAITokenTypeKey.String("input") - // Output tokens (completion, response, etc.) - // Stability: development - GenAITokenTypeCompletion = GenAITokenTypeKey.String("output") -) - -// Namespace: geo -const ( - // GeoContinentCodeKey is the attribute Key conforming to the - // "geo.continent.code" semantic conventions. It represents the two-letter code - // representing continent’s name. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - GeoContinentCodeKey = attribute.Key("geo.continent.code") - - // GeoCountryIsoCodeKey is the attribute Key conforming to the - // "geo.country.iso_code" semantic conventions. It represents the two-letter ISO - // Country Code ([ISO 3166-1 alpha2]). - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "CA" - // - // [ISO 3166-1 alpha2]: https://wikipedia.org/wiki/ISO_3166-1#Codes - GeoCountryIsoCodeKey = attribute.Key("geo.country.iso_code") - - // GeoLocalityNameKey is the attribute Key conforming to the "geo.locality.name" - // semantic conventions. It represents the locality name. Represents the name of - // a city, town, village, or similar populated place. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "Montreal", "Berlin" - GeoLocalityNameKey = attribute.Key("geo.locality.name") - - // GeoLocationLatKey is the attribute Key conforming to the "geo.location.lat" - // semantic conventions. It represents the latitude of the geo location in - // [WGS84]. - // - // Type: double - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 45.505918 - // - // [WGS84]: https://wikipedia.org/wiki/World_Geodetic_System#WGS84 - GeoLocationLatKey = attribute.Key("geo.location.lat") - - // GeoLocationLonKey is the attribute Key conforming to the "geo.location.lon" - // semantic conventions. It represents the longitude of the geo location in - // [WGS84]. - // - // Type: double - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: -73.61483 - // - // [WGS84]: https://wikipedia.org/wiki/World_Geodetic_System#WGS84 - GeoLocationLonKey = attribute.Key("geo.location.lon") - - // GeoPostalCodeKey is the attribute Key conforming to the "geo.postal_code" - // semantic conventions. It represents the postal code associated with the - // location. Values appropriate for this field may also be known as a postcode - // or ZIP code and will vary widely from country to country. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "94040" - GeoPostalCodeKey = attribute.Key("geo.postal_code") - - // GeoRegionIsoCodeKey is the attribute Key conforming to the - // "geo.region.iso_code" semantic conventions. It represents the region ISO code - // ([ISO 3166-2]). - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "CA-QC" - // - // [ISO 3166-2]: https://wikipedia.org/wiki/ISO_3166-2 - GeoRegionIsoCodeKey = attribute.Key("geo.region.iso_code") -) - -// GeoCountryIsoCode returns an attribute KeyValue conforming to the -// "geo.country.iso_code" semantic conventions. It represents the two-letter ISO -// Country Code ([ISO 3166-1 alpha2]). -// -// [ISO 3166-1 alpha2]: https://wikipedia.org/wiki/ISO_3166-1#Codes -func GeoCountryIsoCode(val string) attribute.KeyValue { - return GeoCountryIsoCodeKey.String(val) -} - -// GeoLocalityName returns an attribute KeyValue conforming to the -// "geo.locality.name" semantic conventions. It represents the locality name. -// Represents the name of a city, town, village, or similar populated place. -func GeoLocalityName(val string) attribute.KeyValue { - return GeoLocalityNameKey.String(val) -} - -// GeoLocationLat returns an attribute KeyValue conforming to the -// "geo.location.lat" semantic conventions. It represents the latitude of the geo -// location in [WGS84]. -// -// [WGS84]: https://wikipedia.org/wiki/World_Geodetic_System#WGS84 -func GeoLocationLat(val float64) attribute.KeyValue { - return GeoLocationLatKey.Float64(val) -} - -// GeoLocationLon returns an attribute KeyValue conforming to the -// "geo.location.lon" semantic conventions. It represents the longitude of the -// geo location in [WGS84]. -// -// [WGS84]: https://wikipedia.org/wiki/World_Geodetic_System#WGS84 -func GeoLocationLon(val float64) attribute.KeyValue { - return GeoLocationLonKey.Float64(val) -} - -// GeoPostalCode returns an attribute KeyValue conforming to the -// "geo.postal_code" semantic conventions. It represents the postal code -// associated with the location. Values appropriate for this field may also be -// known as a postcode or ZIP code and will vary widely from country to country. -func GeoPostalCode(val string) attribute.KeyValue { - return GeoPostalCodeKey.String(val) -} - -// GeoRegionIsoCode returns an attribute KeyValue conforming to the -// "geo.region.iso_code" semantic conventions. It represents the region ISO code -// ([ISO 3166-2]). -// -// [ISO 3166-2]: https://wikipedia.org/wiki/ISO_3166-2 -func GeoRegionIsoCode(val string) attribute.KeyValue { - return GeoRegionIsoCodeKey.String(val) -} - -// Enum values for geo.continent.code -var ( - // Africa - // Stability: development - GeoContinentCodeAf = GeoContinentCodeKey.String("AF") - // Antarctica - // Stability: development - GeoContinentCodeAn = GeoContinentCodeKey.String("AN") - // Asia - // Stability: development - GeoContinentCodeAs = GeoContinentCodeKey.String("AS") - // Europe - // Stability: development - GeoContinentCodeEu = GeoContinentCodeKey.String("EU") - // North America - // Stability: development - GeoContinentCodeNa = GeoContinentCodeKey.String("NA") - // Oceania - // Stability: development - GeoContinentCodeOc = GeoContinentCodeKey.String("OC") - // South America - // Stability: development - GeoContinentCodeSa = GeoContinentCodeKey.String("SA") -) - -// Namespace: go -const ( - // GoMemoryTypeKey is the attribute Key conforming to the "go.memory.type" - // semantic conventions. It represents the type of memory. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "other", "stack" - GoMemoryTypeKey = attribute.Key("go.memory.type") -) - -// Enum values for go.memory.type -var ( - // Memory allocated from the heap that is reserved for stack space, whether or - // not it is currently in-use. - // Stability: development - GoMemoryTypeStack = GoMemoryTypeKey.String("stack") - // Memory used by the Go runtime, excluding other categories of memory usage - // described in this enumeration. - // Stability: development - GoMemoryTypeOther = GoMemoryTypeKey.String("other") -) - -// Namespace: graphql -const ( - // GraphqlDocumentKey is the attribute Key conforming to the "graphql.document" - // semantic conventions. It represents the GraphQL document being executed. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: "query", "mutation", "subscription" - GraphqlOperationTypeKey = attribute.Key("graphql.operation.type") -) - -// 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) -} - -// Enum values for graphql.operation.type -var ( - // GraphQL query - // Stability: development - GraphqlOperationTypeQuery = GraphqlOperationTypeKey.String("query") - // GraphQL mutation - // Stability: development - GraphqlOperationTypeMutation = GraphqlOperationTypeKey.String("mutation") - // GraphQL subscription - // Stability: development - GraphqlOperationTypeSubscription = GraphqlOperationTypeKey.String("subscription") -) - -// Namespace: heroku -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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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) -} - -// Namespace: host -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: Recommended - // Stability: Development - // - // Examples: - 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "1", "r1p1" - 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: Recommended - // Stability: Development - // - // Examples: "GenuineIntel" - // Note: [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. - // - // [CPUID]: https://wiki.osdev.org/CPUID - 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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]. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "0.1" - // - // [Version Attributes]: /docs/resource/README.md#version-attributes - 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: Recommended - // Stability: Development - // - // 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] format. - // - // [RFC 5952]: https://www.rfc-editor.org/rfc/rfc5952.html - 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: Recommended - // Stability: Development - // - // 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]: as - // hyphen-separated octets in uppercase hexadecimal form from most to least - // significant. - // - // [IEEE RA hexadecimal form]: https://standards.ieee.org/wp-content/uploads/import/documents/tutorials/eui.pdf - 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: "n1-standard-1" - HostTypeKey = attribute.Key("host.type") -) - -// 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 string) attribute.KeyValue { - return HostCPUSteppingKey.String(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]. -// -// [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) -} - -// Enum values for host.arch -var ( - // AMD64 - // Stability: development - HostArchAMD64 = HostArchKey.String("amd64") - // ARM32 - // Stability: development - HostArchARM32 = HostArchKey.String("arm32") - // ARM64 - // Stability: development - HostArchARM64 = HostArchKey.String("arm64") - // Itanium - // Stability: development - HostArchIA64 = HostArchKey.String("ia64") - // 32-bit PowerPC - // Stability: development - HostArchPPC32 = HostArchKey.String("ppc32") - // 64-bit PowerPC - // Stability: development - HostArchPPC64 = HostArchKey.String("ppc64") - // IBM z/Architecture - // Stability: development - HostArchS390x = HostArchKey.String("s390x") - // 32-bit x86 - // Stability: development - HostArchX86 = HostArchKey.String("x86") -) - -// Namespace: http -const ( - // HTTPConnectionStateKey is the attribute Key conforming to the - // "http.connection.state" semantic conventions. It represents the state of the - // HTTP connection in the HTTP connection pool. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "active", "idle" - HTTPConnectionStateKey = attribute.Key("http.connection.state") - - // 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] header. For requests using transport encoding, this should - // be the compressed size. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length - 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: Recommended - // 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] - // and the PATCH method defined in [RFC5789]. - // - // 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. - // - // [RFC9110]: https://www.rfc-editor.org/rfc/rfc9110.html#name-methods - // [RFC5789]: https://www.rfc-editor.org/rfc/rfc5789.html - 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: Recommended - // 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: Recommended - // Stability: Stable - // - // 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") - - // HTTPRequestSizeKey is the attribute Key conforming to the "http.request.size" - // semantic conventions. It represents the total size of the request in bytes. - // This should be the total number of bytes sent over the wire, including the - // request line (HTTP/1.1), framing (HTTP/2 and HTTP/3), headers, and request - // body if any. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - HTTPRequestSizeKey = attribute.Key("http.request.size") - - // 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] header. For requests using transport encoding, this should - // be the compressed size. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length - HTTPResponseBodySizeKey = attribute.Key("http.response.body.size") - - // HTTPResponseSizeKey is the attribute Key conforming to the - // "http.response.size" semantic conventions. It represents the total size of - // the response in bytes. This should be the total number of bytes sent over the - // wire, including the status line (HTTP/1.1), framing (HTTP/2 and HTTP/3), - // headers, and response body and trailers if any. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - HTTPResponseSizeKey = attribute.Key("http.response.size") - - // HTTPResponseStatusCodeKey is the attribute Key conforming to the - // "http.response.status_code" semantic conventions. It represents the - // [HTTP response status code]. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Stable - // - // Examples: 200 - // - // [HTTP response status code]: https://tools.ietf.org/html/rfc7231#section-6 - 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: Recommended - // 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] if there is one. - // - // [application root]: /docs/http/http-spans.md#http-server-definitions - HTTPRouteKey = attribute.Key("http.route") -) - -// 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] header. For requests using transport encoding, this should be -// the compressed size. -// -// [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length -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) -} - -// HTTPRequestSize returns an attribute KeyValue conforming to the -// "http.request.size" semantic conventions. It represents the total size of the -// request in bytes. This should be the total number of bytes sent over the wire, -// including the request line (HTTP/1.1), framing (HTTP/2 and HTTP/3), headers, -// and request body if any. -func HTTPRequestSize(val int) attribute.KeyValue { - return HTTPRequestSizeKey.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] header. For requests using transport encoding, this should be -// the compressed size. -// -// [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length -func HTTPResponseBodySize(val int) attribute.KeyValue { - return HTTPResponseBodySizeKey.Int(val) -} - -// HTTPResponseSize returns an attribute KeyValue conforming to the -// "http.response.size" semantic conventions. It represents the total size of the -// response in bytes. This should be the total number of bytes sent over the -// wire, including the status line (HTTP/1.1), framing (HTTP/2 and HTTP/3), -// headers, and response body and trailers if any. -func HTTPResponseSize(val int) attribute.KeyValue { - return HTTPResponseSizeKey.Int(val) -} - -// HTTPResponseStatusCode returns an attribute KeyValue conforming to the -// "http.response.status_code" semantic conventions. It represents the -// [HTTP response status code]. -// -// [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) -} - -// Enum values for http.connection.state -var ( - // active state. - // Stability: development - HTTPConnectionStateActive = HTTPConnectionStateKey.String("active") - // idle state. - // Stability: development - HTTPConnectionStateIdle = HTTPConnectionStateKey.String("idle") -) - -// Enum values for http.request.method -var ( - // CONNECT method. - // Stability: stable - HTTPRequestMethodConnect = HTTPRequestMethodKey.String("CONNECT") - // DELETE method. - // Stability: stable - HTTPRequestMethodDelete = HTTPRequestMethodKey.String("DELETE") - // GET method. - // Stability: stable - HTTPRequestMethodGet = HTTPRequestMethodKey.String("GET") - // HEAD method. - // Stability: stable - HTTPRequestMethodHead = HTTPRequestMethodKey.String("HEAD") - // OPTIONS method. - // Stability: stable - HTTPRequestMethodOptions = HTTPRequestMethodKey.String("OPTIONS") - // PATCH method. - // Stability: stable - HTTPRequestMethodPatch = HTTPRequestMethodKey.String("PATCH") - // POST method. - // Stability: stable - HTTPRequestMethodPost = HTTPRequestMethodKey.String("POST") - // PUT method. - // Stability: stable - HTTPRequestMethodPut = HTTPRequestMethodKey.String("PUT") - // TRACE method. - // Stability: stable - HTTPRequestMethodTrace = HTTPRequestMethodKey.String("TRACE") - // Any HTTP method that the instrumentation has no prior knowledge of. - // Stability: stable - HTTPRequestMethodOther = HTTPRequestMethodKey.String("_OTHER") -) - -// Namespace: hw -const ( - // HwIDKey is the attribute Key conforming to the "hw.id" semantic conventions. - // It represents an identifier for the hardware component, unique within the - // monitored host. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "win32battery_battery_testsysa33_1" - HwIDKey = attribute.Key("hw.id") - - // HwNameKey is the attribute Key conforming to the "hw.name" semantic - // conventions. It represents an easily-recognizable name for the hardware - // component. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "eth0" - HwNameKey = attribute.Key("hw.name") - - // HwParentKey is the attribute Key conforming to the "hw.parent" semantic - // conventions. It represents the unique identifier of the parent component - // (typically the `hw.id` attribute of the enclosure, or disk controller). - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "dellStorage_perc_0" - HwParentKey = attribute.Key("hw.parent") - - // HwStateKey is the attribute Key conforming to the "hw.state" semantic - // conventions. It represents the current state of the component. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - HwStateKey = attribute.Key("hw.state") - - // HwTypeKey is the attribute Key conforming to the "hw.type" semantic - // conventions. It represents the type of the component. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - // Note: Describes the category of the hardware component for which `hw.state` - // is being reported. For example, `hw.type=temperature` along with - // `hw.state=degraded` would indicate that the temperature of the hardware - // component has been reported as `degraded`. - HwTypeKey = attribute.Key("hw.type") -) - -// HwID returns an attribute KeyValue conforming to the "hw.id" semantic -// conventions. It represents an identifier for the hardware component, unique -// within the monitored host. -func HwID(val string) attribute.KeyValue { - return HwIDKey.String(val) -} - -// HwName returns an attribute KeyValue conforming to the "hw.name" semantic -// conventions. It represents an easily-recognizable name for the hardware -// component. -func HwName(val string) attribute.KeyValue { - return HwNameKey.String(val) -} - -// HwParent returns an attribute KeyValue conforming to the "hw.parent" semantic -// conventions. It represents the unique identifier of the parent component -// (typically the `hw.id` attribute of the enclosure, or disk controller). -func HwParent(val string) attribute.KeyValue { - return HwParentKey.String(val) -} - -// Enum values for hw.state -var ( - // Ok - // Stability: development - HwStateOk = HwStateKey.String("ok") - // Degraded - // Stability: development - HwStateDegraded = HwStateKey.String("degraded") - // Failed - // Stability: development - HwStateFailed = HwStateKey.String("failed") -) - -// Enum values for hw.type -var ( - // Battery - // Stability: development - HwTypeBattery = HwTypeKey.String("battery") - // CPU - // Stability: development - HwTypeCPU = HwTypeKey.String("cpu") - // Disk controller - // Stability: development - HwTypeDiskController = HwTypeKey.String("disk_controller") - // Enclosure - // Stability: development - HwTypeEnclosure = HwTypeKey.String("enclosure") - // Fan - // Stability: development - HwTypeFan = HwTypeKey.String("fan") - // GPU - // Stability: development - HwTypeGpu = HwTypeKey.String("gpu") - // Logical disk - // Stability: development - HwTypeLogicalDisk = HwTypeKey.String("logical_disk") - // Memory - // Stability: development - HwTypeMemory = HwTypeKey.String("memory") - // Network - // Stability: development - HwTypeNetwork = HwTypeKey.String("network") - // Physical disk - // Stability: development - HwTypePhysicalDisk = HwTypeKey.String("physical_disk") - // Power supply - // Stability: development - HwTypePowerSupply = HwTypeKey.String("power_supply") - // Tape drive - // Stability: development - HwTypeTapeDrive = HwTypeKey.String("tape_drive") - // Temperature - // Stability: development - HwTypeTemperature = HwTypeKey.String("temperature") - // Voltage - // Stability: development - HwTypeVoltage = HwTypeKey.String("voltage") -) - -// Namespace: k8s -const ( - // K8SClusterNameKey is the attribute Key conforming to the "k8s.cluster.name" - // semantic conventions. It represents the name of the cluster. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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]. - // 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. - // - // [ISO/IEC 9834-8 and ITU-T X.667]: https://www.itu.int/ITU-T/studygroups/com17/oid.html - 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: - K8SContainerRestartCountKey = attribute.Key("k8s.container.restart_count") - - // K8SContainerStatusLastTerminatedReasonKey is the attribute Key conforming to - // the "k8s.container.status.last_terminated_reason" semantic conventions. It - // represents the last terminated reason of the Container. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "Evicted", "Error" - K8SContainerStatusLastTerminatedReasonKey = attribute.Key("k8s.container.status.last_terminated_reason") - - // K8SCronJobNameKey is the attribute Key conforming to the "k8s.cronjob.name" - // semantic conventions. It represents the name of the CronJob. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: "default" - K8SNamespaceNameKey = attribute.Key("k8s.namespace.name") - - // K8SNamespacePhaseKey is the attribute Key conforming to the - // "k8s.namespace.phase" semantic conventions. It represents the phase of the - // K8s namespace. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "active", "terminating" - // Note: This attribute aligns with the `phase` field of the - // [K8s NamespaceStatus] - // - // [K8s NamespaceStatus]: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#namespacestatus-v1-core - K8SNamespacePhaseKey = attribute.Key("k8s.namespace.phase") - - // K8SNodeNameKey is the attribute Key conforming to the "k8s.node.name" - // semantic conventions. It represents the name of the Node. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" - K8SStatefulSetUIDKey = attribute.Key("k8s.statefulset.uid") - - // K8SVolumeNameKey is the attribute Key conforming to the "k8s.volume.name" - // semantic conventions. It represents the name of the K8s volume. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "volume0" - K8SVolumeNameKey = attribute.Key("k8s.volume.name") - - // K8SVolumeTypeKey is the attribute Key conforming to the "k8s.volume.type" - // semantic conventions. It represents the type of the K8s volume. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "emptyDir", "persistentVolumeClaim" - K8SVolumeTypeKey = attribute.Key("k8s.volume.type") -) - -// 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) -} - -// K8SContainerStatusLastTerminatedReason returns an attribute KeyValue -// conforming to the "k8s.container.status.last_terminated_reason" semantic -// conventions. It represents the last terminated reason of the Container. -func K8SContainerStatusLastTerminatedReason(val string) attribute.KeyValue { - return K8SContainerStatusLastTerminatedReasonKey.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) -} - -// 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) -} - -// K8SVolumeName returns an attribute KeyValue conforming to the -// "k8s.volume.name" semantic conventions. It represents the name of the K8s -// volume. -func K8SVolumeName(val string) attribute.KeyValue { - return K8SVolumeNameKey.String(val) -} - -// Enum values for k8s.namespace.phase -var ( - // Active namespace phase as described by [K8s API] - // Stability: development - // - // [K8s API]: https://pkg.go.dev/k8s.io/api@v0.31.3/core/v1#NamespacePhase - K8SNamespacePhaseActive = K8SNamespacePhaseKey.String("active") - // Terminating namespace phase as described by [K8s API] - // Stability: development - // - // [K8s API]: https://pkg.go.dev/k8s.io/api@v0.31.3/core/v1#NamespacePhase - K8SNamespacePhaseTerminating = K8SNamespacePhaseKey.String("terminating") -) - -// Enum values for k8s.volume.type -var ( - // A [persistentVolumeClaim] volume - // Stability: development - // - // [persistentVolumeClaim]: https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#persistentvolumeclaim - K8SVolumeTypePersistentVolumeClaim = K8SVolumeTypeKey.String("persistentVolumeClaim") - // A [configMap] volume - // Stability: development - // - // [configMap]: https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#configmap - K8SVolumeTypeConfigMap = K8SVolumeTypeKey.String("configMap") - // A [downwardAPI] volume - // Stability: development - // - // [downwardAPI]: https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#downwardapi - K8SVolumeTypeDownwardAPI = K8SVolumeTypeKey.String("downwardAPI") - // An [emptyDir] volume - // Stability: development - // - // [emptyDir]: https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#emptydir - K8SVolumeTypeEmptyDir = K8SVolumeTypeKey.String("emptyDir") - // A [secret] volume - // Stability: development - // - // [secret]: https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#secret - K8SVolumeTypeSecret = K8SVolumeTypeKey.String("secret") - // A [local] volume - // Stability: development - // - // [local]: https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#local - K8SVolumeTypeLocal = K8SVolumeTypeKey.String("local") -) - -// Namespace: linux -const ( - // LinuxMemorySlabStateKey is the attribute Key conforming to the - // "linux.memory.slab.state" semantic conventions. It represents the Linux Slab - // memory state. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "reclaimable", "unreclaimable" - LinuxMemorySlabStateKey = attribute.Key("linux.memory.slab.state") -) - -// Enum values for linux.memory.slab.state -var ( - // reclaimable - // Stability: development - LinuxMemorySlabStateReclaimable = LinuxMemorySlabStateKey.String("reclaimable") - // unreclaimable - // Stability: development - LinuxMemorySlabStateUnreclaimable = LinuxMemorySlabStateKey.String("unreclaimable") -) - -// Namespace: log -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: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: "/var/lib/docker/uuid.log" - LogFilePathResolvedKey = attribute.Key("log.file.path_resolved") - - // 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: Recommended - // Stability: Development - // - // Examples: - LogIostreamKey = attribute.Key("log.iostream") - - // LogRecordOriginalKey is the attribute Key conforming to the - // "log.record.original" semantic conventions. It represents the complete - // original Log Record. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "77 <86>1 2015-08-06T21:58:59.694Z 192.168.2.133 inactive - - - - // Something happened", "[INFO] 8/3/24 12:34:56 Something happened" - // Note: This value MAY be added when processing a Log Record which was - // originally transmitted as a string or equivalent data type AND the Body field - // of the Log Record does not contain the same value. (e.g. a syslog or a log - // record read from a file.) - LogRecordOriginalKey = attribute.Key("log.record.original") - - // 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: Recommended - // Stability: Development - // - // 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)], but other - // identifiers (e.g. UUID) may be used as needed. - // - // [Universally Unique Lexicographically Sortable Identifier (ULID)]: https://github.com/ulid/spec - LogRecordUIDKey = attribute.Key("log.record.uid") -) - -// 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) -} - -// LogRecordOriginal returns an attribute KeyValue conforming to the -// "log.record.original" semantic conventions. It represents the complete -// original Log Record. -func LogRecordOriginal(val string) attribute.KeyValue { - return LogRecordOriginalKey.String(val) -} - -// 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) -} - -// Enum values for log.iostream -var ( - // Logs from stdout stream - // Stability: development - LogIostreamStdout = LogIostreamKey.String("stdout") - // Events from stderr stream - // Stability: development - LogIostreamStderr = LogIostreamKey.String("stderr") -) - -// Namespace: messaging -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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: "client-5", "myhost@8742@s8083jm" - MessagingClientIDKey = attribute.Key("messaging.client.id") - - // MessagingConsumerGroupNameKey is the attribute Key conforming to the - // "messaging.consumer.group.name" semantic conventions. It represents the name - // of the consumer group with which a consumer is associated. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "my-group", "indexer" - // Note: Semantic conventions for individual messaging systems SHOULD document - // whether `messaging.consumer.group.name` is applicable and what it means in - // the context of that system. - MessagingConsumerGroupNameKey = attribute.Key("messaging.consumer.group.name") - - // 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: Recommended - // Stability: Development - // - // Examples: - 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: Recommended - // Stability: Development - // - // 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") - - // MessagingDestinationPartitionIDKey is the attribute Key conforming to the - // "messaging.destination.partition.id" semantic conventions. It represents the - // identifier of the partition messages are sent to or received from, unique - // within the `messaging.destination.name`. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 1 - MessagingDestinationPartitionIDKey = attribute.Key("messaging.destination.partition.id") - - // MessagingDestinationSubscriptionNameKey is the attribute Key conforming to - // the "messaging.destination.subscription.name" semantic conventions. It - // represents the name of the destination subscription from which a message is - // consumed. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "subscription-a" - // Note: Semantic conventions for individual messaging systems SHOULD document - // whether `messaging.destination.subscription.name` is applicable and what it - // means in the context of that system. - MessagingDestinationSubscriptionNameKey = attribute.Key("messaging.destination.subscription.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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: - MessagingDestinationTemporaryKey = attribute.Key("messaging.destination.temporary") - - // MessagingEventhubsMessageEnqueuedTimeKey is the attribute Key conforming to - // the "messaging.eventhubs.message.enqueued_time" semantic conventions. It - // represents the UTC epoch seconds at which the message has been accepted and - // stored in the entity. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - MessagingEventhubsMessageEnqueuedTimeKey = attribute.Key("messaging.eventhubs.message.enqueued_time") - - // MessagingGCPPubsubMessageAckDeadlineKey is the attribute Key conforming to - // the "messaging.gcp_pubsub.message.ack_deadline" semantic conventions. It - // represents the ack deadline in seconds set for the modify ack deadline - // request. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - MessagingGCPPubsubMessageAckDeadlineKey = attribute.Key("messaging.gcp_pubsub.message.ack_deadline") - - // MessagingGCPPubsubMessageAckIDKey is the attribute Key conforming to the - // "messaging.gcp_pubsub.message.ack_id" semantic conventions. It represents the - // ack id for a given message. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: ack_id - MessagingGCPPubsubMessageAckIDKey = attribute.Key("messaging.gcp_pubsub.message.ack_id") - - // MessagingGCPPubsubMessageDeliveryAttemptKey is the attribute Key conforming - // to the "messaging.gcp_pubsub.message.delivery_attempt" semantic conventions. - // It represents the delivery attempt for a given message. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - MessagingGCPPubsubMessageDeliveryAttemptKey = attribute.Key("messaging.gcp_pubsub.message.delivery_attempt") - - // 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: Recommended - // Stability: Development - // - // Examples: ordering_key - MessagingGCPPubsubMessageOrderingKeyKey = attribute.Key("messaging.gcp_pubsub.message.ordering_key") - - // 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: Recommended - // Stability: Development - // - // 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") - - // 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: Recommended - // Stability: Development - // - // Examples: - MessagingKafkaMessageTombstoneKey = attribute.Key("messaging.kafka.message.tombstone") - - // MessagingKafkaOffsetKey is the attribute Key conforming to the - // "messaging.kafka.offset" semantic conventions. It represents the offset of a - // record in the corresponding Kafka partition. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - MessagingKafkaOffsetKey = attribute.Key("messaging.kafka.offset") - - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: 452a7c7c7c7048c2f887f61572b18fc2 - MessagingMessageIDKey = attribute.Key("messaging.message.id") - - // MessagingOperationNameKey is the attribute Key conforming to the - // "messaging.operation.name" semantic conventions. It represents the - // system-specific name of the messaging operation. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "ack", "nack", "send" - MessagingOperationNameKey = attribute.Key("messaging.operation.name") - - // MessagingOperationTypeKey is the attribute Key conforming to the - // "messaging.operation.type" semantic conventions. It represents a string - // identifying the type of the messaging operation. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - // Note: If a custom value is used, it MUST be of low cardinality. - MessagingOperationTypeKey = attribute.Key("messaging.operation.type") - - // 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: Recommended - // Stability: Development - // - // Examples: myKey - MessagingRabbitmqDestinationRoutingKeyKey = attribute.Key("messaging.rabbitmq.destination.routing_key") - - // MessagingRabbitmqMessageDeliveryTagKey is the attribute Key conforming to the - // "messaging.rabbitmq.message.delivery_tag" semantic conventions. It represents - // the rabbitMQ message delivery tag. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - MessagingRabbitmqMessageDeliveryTagKey = attribute.Key("messaging.rabbitmq.message.delivery_tag") - - // 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: Recommended - // Stability: Development - // - // Examples: - 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: Recommended - // Stability: Development - 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: Recommended - // Stability: Development - 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: - 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: Recommended - // Stability: Development - // - // Examples: myNamespace - MessagingRocketmqNamespaceKey = attribute.Key("messaging.rocketmq.namespace") - - // MessagingServicebusDispositionStatusKey is the attribute Key conforming to - // the "messaging.servicebus.disposition_status" semantic conventions. It - // represents the describes the [settlement type]. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - // - // [settlement type]: https://learn.microsoft.com/azure/service-bus-messaging/message-transfers-locks-settlement#peeklock - MessagingServicebusDispositionStatusKey = attribute.Key("messaging.servicebus.disposition_status") - - // MessagingServicebusMessageDeliveryCountKey is the attribute Key conforming to - // the "messaging.servicebus.message.delivery_count" semantic conventions. It - // represents the number of deliveries that have been attempted for this - // message. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - MessagingServicebusMessageDeliveryCountKey = attribute.Key("messaging.servicebus.message.delivery_count") - - // MessagingServicebusMessageEnqueuedTimeKey is the attribute Key conforming to - // the "messaging.servicebus.message.enqueued_time" semantic conventions. It - // represents the UTC epoch seconds at which the message has been accepted and - // stored in the entity. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - MessagingServicebusMessageEnqueuedTimeKey = attribute.Key("messaging.servicebus.message.enqueued_time") - - // MessagingSystemKey is the attribute Key conforming to the "messaging.system" - // semantic conventions. It represents the messaging system as identified by the - // client instrumentation. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - // Note: The actual messaging system may differ from the one known by the - // client. For example, when using Kafka client libraries to communicate with - // Azure Event Hubs, the `messaging.system` is set to `kafka` based on the - // instrumentation's best knowledge. - MessagingSystemKey = attribute.Key("messaging.system") -) - -// 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) -} - -// MessagingConsumerGroupName returns an attribute KeyValue conforming to the -// "messaging.consumer.group.name" semantic conventions. It represents the name -// of the consumer group with which a consumer is associated. -func MessagingConsumerGroupName(val string) attribute.KeyValue { - return MessagingConsumerGroupNameKey.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) -} - -// MessagingDestinationPartitionID returns an attribute KeyValue conforming to -// the "messaging.destination.partition.id" semantic conventions. It represents -// the identifier of the partition messages are sent to or received from, unique -// within the `messaging.destination.name`. -func MessagingDestinationPartitionID(val string) attribute.KeyValue { - return MessagingDestinationPartitionIDKey.String(val) -} - -// MessagingDestinationSubscriptionName returns an attribute KeyValue conforming -// to the "messaging.destination.subscription.name" semantic conventions. It -// represents the name of the destination subscription from which a message is -// consumed. -func MessagingDestinationSubscriptionName(val string) attribute.KeyValue { - return MessagingDestinationSubscriptionNameKey.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) -} - -// MessagingEventhubsMessageEnqueuedTime returns an attribute KeyValue conforming -// to the "messaging.eventhubs.message.enqueued_time" semantic conventions. It -// represents the UTC epoch seconds at which the message has been accepted and -// stored in the entity. -func MessagingEventhubsMessageEnqueuedTime(val int) attribute.KeyValue { - return MessagingEventhubsMessageEnqueuedTimeKey.Int(val) -} - -// MessagingGCPPubsubMessageAckDeadline returns an attribute KeyValue conforming -// to the "messaging.gcp_pubsub.message.ack_deadline" semantic conventions. It -// represents the ack deadline in seconds set for the modify ack deadline -// request. -func MessagingGCPPubsubMessageAckDeadline(val int) attribute.KeyValue { - return MessagingGCPPubsubMessageAckDeadlineKey.Int(val) -} - -// MessagingGCPPubsubMessageAckID returns an attribute KeyValue conforming to the -// "messaging.gcp_pubsub.message.ack_id" semantic conventions. It represents the -// ack id for a given message. -func MessagingGCPPubsubMessageAckID(val string) attribute.KeyValue { - return MessagingGCPPubsubMessageAckIDKey.String(val) -} - -// MessagingGCPPubsubMessageDeliveryAttempt returns an attribute KeyValue -// conforming to the "messaging.gcp_pubsub.message.delivery_attempt" semantic -// conventions. It represents the delivery attempt for a given message. -func MessagingGCPPubsubMessageDeliveryAttempt(val int) attribute.KeyValue { - return MessagingGCPPubsubMessageDeliveryAttemptKey.Int(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) -} - -// 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) -} - -// 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) -} - -// MessagingKafkaOffset returns an attribute KeyValue conforming to the -// "messaging.kafka.offset" semantic conventions. It represents the offset of a -// record in the corresponding Kafka partition. -func MessagingKafkaOffset(val int) attribute.KeyValue { - return MessagingKafkaOffsetKey.Int(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) -} - -// MessagingOperationName returns an attribute KeyValue conforming to the -// "messaging.operation.name" semantic conventions. It represents the -// system-specific name of the messaging operation. -func MessagingOperationName(val string) attribute.KeyValue { - return MessagingOperationNameKey.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) -} - -// MessagingRabbitmqMessageDeliveryTag returns an attribute KeyValue conforming -// to the "messaging.rabbitmq.message.delivery_tag" semantic conventions. It -// represents the rabbitMQ message delivery tag. -func MessagingRabbitmqMessageDeliveryTag(val int) attribute.KeyValue { - return MessagingRabbitmqMessageDeliveryTagKey.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) -} - -// 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) -} - -// MessagingServicebusMessageDeliveryCount returns an attribute KeyValue -// conforming to the "messaging.servicebus.message.delivery_count" semantic -// conventions. It represents the number of deliveries that have been attempted -// for this message. -func MessagingServicebusMessageDeliveryCount(val int) attribute.KeyValue { - return MessagingServicebusMessageDeliveryCountKey.Int(val) -} - -// MessagingServicebusMessageEnqueuedTime returns an attribute KeyValue -// conforming to the "messaging.servicebus.message.enqueued_time" semantic -// conventions. It represents the UTC epoch seconds at which the message has been -// accepted and stored in the entity. -func MessagingServicebusMessageEnqueuedTime(val int) attribute.KeyValue { - return MessagingServicebusMessageEnqueuedTimeKey.Int(val) -} - -// Enum values for messaging.operation.type -var ( - // 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 sending - // scenarios. - // - // Stability: development - MessagingOperationTypeCreate = MessagingOperationTypeKey.String("create") - // One or more messages are provided for sending to an intermediary. If a single - // message is sent, the context of the "Send" span can be used as the creation - // context and no "Create" span needs to be created. - // - // Stability: development - MessagingOperationTypeSend = MessagingOperationTypeKey.String("send") - // 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. - // - // Stability: development - MessagingOperationTypeReceive = MessagingOperationTypeKey.String("receive") - // One or more messages are processed by a consumer. - // - // Stability: development - MessagingOperationTypeProcess = MessagingOperationTypeKey.String("process") - // One or more messages are settled. - // - // Stability: development - MessagingOperationTypeSettle = MessagingOperationTypeKey.String("settle") - // Deprecated: Replaced by `process`. - MessagingOperationTypeDeliver = MessagingOperationTypeKey.String("deliver") - // Deprecated: Replaced by `send`. - MessagingOperationTypePublish = MessagingOperationTypeKey.String("publish") -) - -// Enum values for messaging.rocketmq.consumption_model -var ( - // Clustering consumption model - // Stability: development - MessagingRocketmqConsumptionModelClustering = MessagingRocketmqConsumptionModelKey.String("clustering") - // Broadcasting consumption model - // Stability: development - MessagingRocketmqConsumptionModelBroadcasting = MessagingRocketmqConsumptionModelKey.String("broadcasting") -) - -// Enum values for messaging.rocketmq.message.type -var ( - // Normal message - // Stability: development - MessagingRocketmqMessageTypeNormal = MessagingRocketmqMessageTypeKey.String("normal") - // FIFO message - // Stability: development - MessagingRocketmqMessageTypeFifo = MessagingRocketmqMessageTypeKey.String("fifo") - // Delay message - // Stability: development - MessagingRocketmqMessageTypeDelay = MessagingRocketmqMessageTypeKey.String("delay") - // Transaction message - // Stability: development - MessagingRocketmqMessageTypeTransaction = MessagingRocketmqMessageTypeKey.String("transaction") -) - -// Enum values for messaging.servicebus.disposition_status -var ( - // Message is completed - // Stability: development - MessagingServicebusDispositionStatusComplete = MessagingServicebusDispositionStatusKey.String("complete") - // Message is abandoned - // Stability: development - MessagingServicebusDispositionStatusAbandon = MessagingServicebusDispositionStatusKey.String("abandon") - // Message is sent to dead letter queue - // Stability: development - MessagingServicebusDispositionStatusDeadLetter = MessagingServicebusDispositionStatusKey.String("dead_letter") - // Message is deferred - // Stability: development - MessagingServicebusDispositionStatusDefer = MessagingServicebusDispositionStatusKey.String("defer") -) - -// Enum values for messaging.system -var ( - // Apache ActiveMQ - // Stability: development - MessagingSystemActivemq = MessagingSystemKey.String("activemq") - // Amazon Simple Queue Service (SQS) - // Stability: development - MessagingSystemAWSSqs = MessagingSystemKey.String("aws_sqs") - // Azure Event Grid - // Stability: development - MessagingSystemEventgrid = MessagingSystemKey.String("eventgrid") - // Azure Event Hubs - // Stability: development - MessagingSystemEventhubs = MessagingSystemKey.String("eventhubs") - // Azure Service Bus - // Stability: development - MessagingSystemServicebus = MessagingSystemKey.String("servicebus") - // Google Cloud Pub/Sub - // Stability: development - MessagingSystemGCPPubsub = MessagingSystemKey.String("gcp_pubsub") - // Java Message Service - // Stability: development - MessagingSystemJms = MessagingSystemKey.String("jms") - // Apache Kafka - // Stability: development - MessagingSystemKafka = MessagingSystemKey.String("kafka") - // RabbitMQ - // Stability: development - MessagingSystemRabbitmq = MessagingSystemKey.String("rabbitmq") - // Apache RocketMQ - // Stability: development - MessagingSystemRocketmq = MessagingSystemKey.String("rocketmq") - // Apache Pulsar - // Stability: development - MessagingSystemPulsar = MessagingSystemKey.String("pulsar") -) - -// Namespace: network -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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: sprint - NetworkCarrierNameKey = attribute.Key("network.carrier.name") - - // NetworkConnectionStateKey is the attribute Key conforming to the - // "network.connection.state" semantic conventions. It represents the state of - // network connection. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "close_wait" - // Note: Connection states are defined as part of the [rfc9293] - // - // [rfc9293]: https://datatracker.ietf.org/doc/html/rfc9293#section-3.3.2 - NetworkConnectionStateKey = attribute.Key("network.connection.state") - - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: wifi - NetworkConnectionTypeKey = attribute.Key("network.connection.type") - - // NetworkInterfaceNameKey is the attribute Key conforming to the - // "network.interface.name" semantic conventions. It represents the network - // interface name. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "lo", "eth0" - NetworkInterfaceNameKey = attribute.Key("network.interface.name") - - // NetworkIoDirectionKey is the attribute Key conforming to the - // "network.io.direction" semantic conventions. It represents the network IO - // operation direction. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // 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: Recommended - // 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: Recommended - // 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: Recommended - // 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: Recommended - // 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] or non-OSI equivalent. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Stable - // - // Examples: "amqp", "http", "mqtt" - // Note: The value SHOULD be normalized to lowercase. - // - // [OSI application layer]: https://wikipedia.org/wiki/Application_layer - NetworkProtocolNameKey = attribute.Key("network.protocol.name") - - // NetworkProtocolVersionKey is the attribute Key conforming to the - // "network.protocol.version" semantic conventions. It represents the actual - // version of the protocol used for network communication. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Stable - // - // Examples: "1.1", "2" - // Note: If protocol version is subject to negotiation (for example using [ALPN] - // ), this attribute SHOULD be set to the negotiated version. If the actual - // protocol version is not known, this attribute SHOULD NOT be set. - // - // [ALPN]: https://www.rfc-editor.org/rfc/rfc7301.html - NetworkProtocolVersionKey = attribute.Key("network.protocol.version") - - // NetworkTransportKey is the attribute Key conforming to the - // "network.transport" semantic conventions. It represents the - // [OSI transport layer] or [inter-process communication method]. - // - // Type: Enum - // RequirementLevel: Recommended - // 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. - // - // [OSI transport layer]: https://wikipedia.org/wiki/Transport_layer - // [inter-process communication method]: https://wikipedia.org/wiki/Inter-process_communication - NetworkTransportKey = attribute.Key("network.transport") - - // NetworkTypeKey is the attribute Key conforming to the "network.type" semantic - // conventions. It represents the [OSI network layer] or non-OSI equivalent. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Stable - // - // Examples: "ipv4", "ipv6" - // Note: The value SHOULD be normalized to lowercase. - // - // [OSI network layer]: https://wikipedia.org/wiki/Network_layer - NetworkTypeKey = attribute.Key("network.type") -) - -// 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) -} - -// NetworkInterfaceName returns an attribute KeyValue conforming to the -// "network.interface.name" semantic conventions. It represents the network -// interface name. -func NetworkInterfaceName(val string) attribute.KeyValue { - return NetworkInterfaceNameKey.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] or non-OSI equivalent. -// -// [OSI application layer]: https://wikipedia.org/wiki/Application_layer -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 actual -// version of the protocol used for network communication. -func NetworkProtocolVersion(val string) attribute.KeyValue { - return NetworkProtocolVersionKey.String(val) -} - -// Enum values for network.connection.state -var ( - // closed - // Stability: development - NetworkConnectionStateClosed = NetworkConnectionStateKey.String("closed") - // close_wait - // Stability: development - NetworkConnectionStateCloseWait = NetworkConnectionStateKey.String("close_wait") - // closing - // Stability: development - NetworkConnectionStateClosing = NetworkConnectionStateKey.String("closing") - // established - // Stability: development - NetworkConnectionStateEstablished = NetworkConnectionStateKey.String("established") - // fin_wait_1 - // Stability: development - NetworkConnectionStateFinWait1 = NetworkConnectionStateKey.String("fin_wait_1") - // fin_wait_2 - // Stability: development - NetworkConnectionStateFinWait2 = NetworkConnectionStateKey.String("fin_wait_2") - // last_ack - // Stability: development - NetworkConnectionStateLastAck = NetworkConnectionStateKey.String("last_ack") - // listen - // Stability: development - NetworkConnectionStateListen = NetworkConnectionStateKey.String("listen") - // syn_received - // Stability: development - NetworkConnectionStateSynReceived = NetworkConnectionStateKey.String("syn_received") - // syn_sent - // Stability: development - NetworkConnectionStateSynSent = NetworkConnectionStateKey.String("syn_sent") - // time_wait - // Stability: development - NetworkConnectionStateTimeWait = NetworkConnectionStateKey.String("time_wait") -) - -// Enum values for network.connection.subtype -var ( - // GPRS - // Stability: development - NetworkConnectionSubtypeGprs = NetworkConnectionSubtypeKey.String("gprs") - // EDGE - // Stability: development - NetworkConnectionSubtypeEdge = NetworkConnectionSubtypeKey.String("edge") - // UMTS - // Stability: development - NetworkConnectionSubtypeUmts = NetworkConnectionSubtypeKey.String("umts") - // CDMA - // Stability: development - NetworkConnectionSubtypeCdma = NetworkConnectionSubtypeKey.String("cdma") - // EVDO Rel. 0 - // Stability: development - NetworkConnectionSubtypeEvdo0 = NetworkConnectionSubtypeKey.String("evdo_0") - // EVDO Rev. A - // Stability: development - NetworkConnectionSubtypeEvdoA = NetworkConnectionSubtypeKey.String("evdo_a") - // CDMA2000 1XRTT - // Stability: development - NetworkConnectionSubtypeCdma20001xrtt = NetworkConnectionSubtypeKey.String("cdma2000_1xrtt") - // HSDPA - // Stability: development - NetworkConnectionSubtypeHsdpa = NetworkConnectionSubtypeKey.String("hsdpa") - // HSUPA - // Stability: development - NetworkConnectionSubtypeHsupa = NetworkConnectionSubtypeKey.String("hsupa") - // HSPA - // Stability: development - NetworkConnectionSubtypeHspa = NetworkConnectionSubtypeKey.String("hspa") - // IDEN - // Stability: development - NetworkConnectionSubtypeIden = NetworkConnectionSubtypeKey.String("iden") - // EVDO Rev. B - // Stability: development - NetworkConnectionSubtypeEvdoB = NetworkConnectionSubtypeKey.String("evdo_b") - // LTE - // Stability: development - NetworkConnectionSubtypeLte = NetworkConnectionSubtypeKey.String("lte") - // EHRPD - // Stability: development - NetworkConnectionSubtypeEhrpd = NetworkConnectionSubtypeKey.String("ehrpd") - // HSPAP - // Stability: development - NetworkConnectionSubtypeHspap = NetworkConnectionSubtypeKey.String("hspap") - // GSM - // Stability: development - NetworkConnectionSubtypeGsm = NetworkConnectionSubtypeKey.String("gsm") - // TD-SCDMA - // Stability: development - NetworkConnectionSubtypeTdScdma = NetworkConnectionSubtypeKey.String("td_scdma") - // IWLAN - // Stability: development - NetworkConnectionSubtypeIwlan = NetworkConnectionSubtypeKey.String("iwlan") - // 5G NR (New Radio) - // Stability: development - NetworkConnectionSubtypeNr = NetworkConnectionSubtypeKey.String("nr") - // 5G NRNSA (New Radio Non-Standalone) - // Stability: development - NetworkConnectionSubtypeNrnsa = NetworkConnectionSubtypeKey.String("nrnsa") - // LTE CA - // Stability: development - NetworkConnectionSubtypeLteCa = NetworkConnectionSubtypeKey.String("lte_ca") -) - -// Enum values for network.connection.type -var ( - // wifi - // Stability: development - NetworkConnectionTypeWifi = NetworkConnectionTypeKey.String("wifi") - // wired - // Stability: development - NetworkConnectionTypeWired = NetworkConnectionTypeKey.String("wired") - // cell - // Stability: development - NetworkConnectionTypeCell = NetworkConnectionTypeKey.String("cell") - // unavailable - // Stability: development - NetworkConnectionTypeUnavailable = NetworkConnectionTypeKey.String("unavailable") - // unknown - // Stability: development - NetworkConnectionTypeUnknown = NetworkConnectionTypeKey.String("unknown") -) - -// Enum values for network.io.direction -var ( - // transmit - // Stability: development - NetworkIoDirectionTransmit = NetworkIoDirectionKey.String("transmit") - // receive - // Stability: development - NetworkIoDirectionReceive = NetworkIoDirectionKey.String("receive") -) - -// Enum values for network.transport -var ( - // TCP - // Stability: stable - NetworkTransportTCP = NetworkTransportKey.String("tcp") - // UDP - // Stability: stable - NetworkTransportUDP = NetworkTransportKey.String("udp") - // Named or anonymous pipe. - // Stability: stable - NetworkTransportPipe = NetworkTransportKey.String("pipe") - // Unix domain socket - // Stability: stable - NetworkTransportUnix = NetworkTransportKey.String("unix") - // QUIC - // Stability: development - NetworkTransportQUIC = NetworkTransportKey.String("quic") -) - -// Enum values for network.type -var ( - // IPv4 - // Stability: stable - NetworkTypeIpv4 = NetworkTypeKey.String("ipv4") - // IPv6 - // Stability: stable - NetworkTypeIpv6 = NetworkTypeKey.String("ipv6") -) - -// Namespace: oci -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: Recommended - // Stability: Development - // - // Examples: - // "sha256:e4ca62c0d62f3e886e684806dfe9d4e0cda60d54986898173c1083856cfda0f4" - // Note: Follows [OCI Image Manifest Specification], and specifically the - // [Digest property]. - // An example can be found in [Example Image Manifest]. - // - // [OCI Image Manifest Specification]: https://github.com/opencontainers/image-spec/blob/main/manifest.md - // [Digest property]: https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests - // [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) -} - -// Namespace: opentracing -const ( - // OpentracingRefTypeKey is the attribute Key conforming to the - // "opentracing.ref_type" semantic conventions. It represents the parent-child - // Reference type. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - // Note: The causal relationship between a child Span and a parent Span. - OpentracingRefTypeKey = attribute.Key("opentracing.ref_type") -) - -// Enum values for opentracing.ref_type -var ( - // The parent Span depends on the child Span in some capacity - // Stability: development - OpentracingRefTypeChildOf = OpentracingRefTypeKey.String("child_of") - // The parent Span doesn't depend in any way on the result of the child Span - // Stability: development - OpentracingRefTypeFollowsFrom = OpentracingRefTypeKey.String("follows_from") -) - -// Namespace: os -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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: - 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]. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "14.2.1", "18.04.1" - // - // [Version Attributes]: /docs/resource/README.md#version-attributes - OSVersionKey = attribute.Key("os.version") -) - -// 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]. -// -// [Version Attributes]: /docs/resource/README.md#version-attributes -func OSVersion(val string) attribute.KeyValue { - return OSVersionKey.String(val) -} - -// Enum values for os.type -var ( - // Microsoft Windows - // Stability: development - OSTypeWindows = OSTypeKey.String("windows") - // Linux - // Stability: development - OSTypeLinux = OSTypeKey.String("linux") - // Apple Darwin - // Stability: development - OSTypeDarwin = OSTypeKey.String("darwin") - // FreeBSD - // Stability: development - OSTypeFreeBSD = OSTypeKey.String("freebsd") - // NetBSD - // Stability: development - OSTypeNetBSD = OSTypeKey.String("netbsd") - // OpenBSD - // Stability: development - OSTypeOpenBSD = OSTypeKey.String("openbsd") - // DragonFly BSD - // Stability: development - OSTypeDragonflyBSD = OSTypeKey.String("dragonflybsd") - // HP-UX (Hewlett Packard Unix) - // Stability: development - OSTypeHPUX = OSTypeKey.String("hpux") - // AIX (Advanced Interactive eXecutive) - // Stability: development - OSTypeAIX = OSTypeKey.String("aix") - // SunOS, Oracle Solaris - // Stability: development - OSTypeSolaris = OSTypeKey.String("solaris") - // IBM z/OS - // Stability: development - OSTypeZOS = OSTypeKey.String("z_os") -) - -// Namespace: otel -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: Recommended - // 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: Recommended - // Stability: Stable - // - // Examples: "1.0.0" - OTelScopeVersionKey = attribute.Key("otel.scope.version") - - // 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: Recommended - // Stability: Stable - // - // Examples: - 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: Recommended - // Stability: Stable - // - // Examples: "resource not found" - OTelStatusDescriptionKey = attribute.Key("otel.status_description") -) - -// 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) -} - -// 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) -} - -// Enum values for otel.status_code -var ( - // The operation has been validated by an Application developer or Operator to - // have completed successfully. - // Stability: stable - OTelStatusCodeOk = OTelStatusCodeKey.String("OK") - // The operation contains an error. - // Stability: stable - OTelStatusCodeError = OTelStatusCodeKey.String("ERROR") -) - -// Namespace: peer -const ( - // PeerServiceKey is the attribute Key conforming to the "peer.service" semantic - // conventions. It represents the [`service.name`] of the remote service. SHOULD - // be equal to the actual `service.name` resource attribute of the remote - // service if any. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: AuthTokenCache - // - // [`service.name`]: /docs/resource/README.md#service - PeerServiceKey = attribute.Key("peer.service") -) - -// PeerService returns an attribute KeyValue conforming to the "peer.service" -// semantic conventions. It represents the [`service.name`] of the remote -// service. SHOULD be equal to the actual `service.name` resource attribute of -// the remote service if any. -// -// [`service.name`]: /docs/resource/README.md#service -func PeerService(val string) attribute.KeyValue { - return PeerServiceKey.String(val) -} - -// Namespace: process -const ( - // ProcessArgsCountKey is the attribute Key conforming to the - // "process.args_count" semantic conventions. It represents the length of the - // process.command_args array. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 4 - // Note: This field can be useful for querying or performing bucket analysis on - // how many arguments were provided to start a process. More arguments may be an - // indication of suspicious activity. - ProcessArgsCountKey = attribute.Key("process.args_count") - - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: "C:\cmd\otecol --config="my directory\config.yaml"" - ProcessCommandLineKey = attribute.Key("process.command_line") - - // ProcessContextSwitchTypeKey is the attribute Key conforming to the - // "process.context_switch_type" semantic conventions. It represents the - // specifies whether the context switches for this data point were voluntary or - // involuntary. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - ProcessContextSwitchTypeKey = attribute.Key("process.context_switch_type") - - // ProcessCreationTimeKey is the attribute Key conforming to the - // "process.creation.time" semantic conventions. It represents the date and time - // the process was created, in ISO 8601 format. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "2023-11-21T09:25:34.853Z" - ProcessCreationTimeKey = attribute.Key("process.creation.time") - - // ProcessExecutableBuildIDGnuKey is the attribute Key conforming to the - // "process.executable.build_id.gnu" semantic conventions. It represents the GNU - // build ID as found in the `.note.gnu.build-id` ELF section (hex string). - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "c89b11207f6479603b0d49bf291c092c2b719293" - ProcessExecutableBuildIDGnuKey = attribute.Key("process.executable.build_id.gnu") - - // ProcessExecutableBuildIDGoKey is the attribute Key conforming to the - // "process.executable.build_id.go" semantic conventions. It represents the Go - // build ID as retrieved by `go tool buildid `. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - // "foh3mEXu7BLZjsN9pOwG/kATcXlYVCDEFouRMQed_/WwRFB1hPo9LBkekthSPG/x8hMC8emW2cCjXD0_1aY" - ProcessExecutableBuildIDGoKey = attribute.Key("process.executable.build_id.go") - - // ProcessExecutableBuildIDHtlhashKey is the attribute Key conforming to the - // "process.executable.build_id.htlhash" semantic conventions. It represents the - // profiling specific build ID for executables. See the OTel specification for - // Profiles for more information. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "600DCAFE4A110000F2BF38C493F5FB92" - ProcessExecutableBuildIDHtlhashKey = attribute.Key("process.executable.build_id.htlhash") - - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: "/usr/bin/cmd/otelcol" - ProcessExecutablePathKey = attribute.Key("process.executable.path") - - // ProcessExitCodeKey is the attribute Key conforming to the "process.exit.code" - // semantic conventions. It represents the exit code of the process. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 127 - ProcessExitCodeKey = attribute.Key("process.exit.code") - - // ProcessExitTimeKey is the attribute Key conforming to the "process.exit.time" - // semantic conventions. It represents the date and time the process exited, in - // ISO 8601 format. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "2023-11-21T09:26:12.315Z" - ProcessExitTimeKey = attribute.Key("process.exit.time") - - // ProcessGroupLeaderPIDKey is the attribute Key conforming to the - // "process.group_leader.pid" semantic conventions. It represents the PID of the - // process's group leader. This is also the process group ID (PGID) of the - // process. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 23 - ProcessGroupLeaderPIDKey = attribute.Key("process.group_leader.pid") - - // ProcessInteractiveKey is the attribute Key conforming to the - // "process.interactive" semantic conventions. It represents the whether the - // process is connected to an interactive shell. - // - // Type: boolean - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - ProcessInteractiveKey = attribute.Key("process.interactive") - - // ProcessLinuxCgroupKey is the attribute Key conforming to the - // "process.linux.cgroup" semantic conventions. It represents the control group - // associated with the process. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "1:name=systemd:/user.slice/user-1000.slice/session-3.scope", - // "0::/user.slice/user-1000.slice/user@1000.service/tmux-spawn-0267755b-4639-4a27-90ed-f19f88e53748.scope" - // Note: Control groups (cgroups) are a kernel feature used to organize and - // manage process resources. This attribute provides the path(s) to the - // cgroup(s) associated with the process, which should match the contents of the - // [/proc/[PID]/cgroup] file. - // - // [/proc/[PID]/cgroup]: https://man7.org/linux/man-pages/man7/cgroups.7.html - ProcessLinuxCgroupKey = attribute.Key("process.linux.cgroup") - - // 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: Recommended - // Stability: Development - // - // Examples: "root" - ProcessOwnerKey = attribute.Key("process.owner") - - // ProcessPagingFaultTypeKey is the attribute Key conforming to the - // "process.paging.fault_type" semantic conventions. It represents the type of - // page fault for this data point. Type `major` is for major/hard page faults, - // and `minor` is for minor/soft page faults. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - ProcessPagingFaultTypeKey = attribute.Key("process.paging.fault_type") - - // ProcessParentPIDKey is the attribute Key conforming to the - // "process.parent_pid" semantic conventions. It represents the parent Process - // identifier (PPID). - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: 1234 - ProcessPIDKey = attribute.Key("process.pid") - - // ProcessRealUserIDKey is the attribute Key conforming to the - // "process.real_user.id" semantic conventions. It represents the real user ID - // (RUID) of the process. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 1000 - ProcessRealUserIDKey = attribute.Key("process.real_user.id") - - // ProcessRealUserNameKey is the attribute Key conforming to the - // "process.real_user.name" semantic conventions. It represents the username of - // the real user of the process. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "operator" - ProcessRealUserNameKey = attribute.Key("process.real_user.name") - - // 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: Recommended - // Stability: Development - // - // 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. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: 14.0.2 - ProcessRuntimeVersionKey = attribute.Key("process.runtime.version") - - // ProcessSavedUserIDKey is the attribute Key conforming to the - // "process.saved_user.id" semantic conventions. It represents the saved user ID - // (SUID) of the process. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 1002 - ProcessSavedUserIDKey = attribute.Key("process.saved_user.id") - - // ProcessSavedUserNameKey is the attribute Key conforming to the - // "process.saved_user.name" semantic conventions. It represents the username of - // the saved user. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "operator" - ProcessSavedUserNameKey = attribute.Key("process.saved_user.name") - - // ProcessSessionLeaderPIDKey is the attribute Key conforming to the - // "process.session_leader.pid" semantic conventions. It represents the PID of - // the process's session leader. This is also the session ID (SID) of the - // process. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 14 - ProcessSessionLeaderPIDKey = attribute.Key("process.session_leader.pid") - - // ProcessTitleKey is the attribute Key conforming to the "process.title" - // semantic conventions. It represents the process title (proctitle). - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "cat /etc/hostname", "xfce4-session", "bash" - // Note: In many Unix-like systems, process title (proctitle), is the string - // that represents the name or command line of a running process, displayed by - // system monitoring tools like ps, top, and htop. - ProcessTitleKey = attribute.Key("process.title") - - // ProcessUserIDKey is the attribute Key conforming to the "process.user.id" - // semantic conventions. It represents the effective user ID (EUID) of the - // process. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 1001 - ProcessUserIDKey = attribute.Key("process.user.id") - - // ProcessUserNameKey is the attribute Key conforming to the "process.user.name" - // semantic conventions. It represents the username of the effective user of the - // process. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "root" - ProcessUserNameKey = attribute.Key("process.user.name") - - // ProcessVpidKey is the attribute Key conforming to the "process.vpid" semantic - // conventions. It represents the virtual process identifier. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 12 - // Note: The process ID within a PID namespace. This is not necessarily unique - // across all processes on the host but it is unique within the process - // namespace that the process exists within. - ProcessVpidKey = attribute.Key("process.vpid") - - // ProcessWorkingDirectoryKey is the attribute Key conforming to the - // "process.working_directory" semantic conventions. It represents the working - // directory of the process. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "/root" - ProcessWorkingDirectoryKey = attribute.Key("process.working_directory") -) - -// ProcessArgsCount returns an attribute KeyValue conforming to the -// "process.args_count" semantic conventions. It represents the length of the -// process.command_args array. -func ProcessArgsCount(val int) attribute.KeyValue { - return ProcessArgsCountKey.Int(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) -} - -// 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) -} - -// ProcessCreationTime returns an attribute KeyValue conforming to the -// "process.creation.time" semantic conventions. It represents the date and time -// the process was created, in ISO 8601 format. -func ProcessCreationTime(val string) attribute.KeyValue { - return ProcessCreationTimeKey.String(val) -} - -// ProcessExecutableBuildIDGnu returns an attribute KeyValue conforming to the -// "process.executable.build_id.gnu" semantic conventions. It represents the GNU -// build ID as found in the `.note.gnu.build-id` ELF section (hex string). -func ProcessExecutableBuildIDGnu(val string) attribute.KeyValue { - return ProcessExecutableBuildIDGnuKey.String(val) -} - -// ProcessExecutableBuildIDGo returns an attribute KeyValue conforming to the -// "process.executable.build_id.go" semantic conventions. It represents the Go -// build ID as retrieved by `go tool buildid `. -func ProcessExecutableBuildIDGo(val string) attribute.KeyValue { - return ProcessExecutableBuildIDGoKey.String(val) -} - -// ProcessExecutableBuildIDHtlhash returns an attribute KeyValue conforming to -// the "process.executable.build_id.htlhash" semantic conventions. It represents -// the profiling specific build ID for executables. See the OTel specification -// for Profiles for more information. -func ProcessExecutableBuildIDHtlhash(val string) attribute.KeyValue { - return ProcessExecutableBuildIDHtlhashKey.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) -} - -// ProcessExitCode returns an attribute KeyValue conforming to the -// "process.exit.code" semantic conventions. It represents the exit code of the -// process. -func ProcessExitCode(val int) attribute.KeyValue { - return ProcessExitCodeKey.Int(val) -} - -// ProcessExitTime returns an attribute KeyValue conforming to the -// "process.exit.time" semantic conventions. It represents the date and time the -// process exited, in ISO 8601 format. -func ProcessExitTime(val string) attribute.KeyValue { - return ProcessExitTimeKey.String(val) -} - -// ProcessGroupLeaderPID returns an attribute KeyValue conforming to the -// "process.group_leader.pid" semantic conventions. It represents the PID of the -// process's group leader. This is also the process group ID (PGID) of the -// process. -func ProcessGroupLeaderPID(val int) attribute.KeyValue { - return ProcessGroupLeaderPIDKey.Int(val) -} - -// ProcessInteractive returns an attribute KeyValue conforming to the -// "process.interactive" semantic conventions. It represents the whether the -// process is connected to an interactive shell. -func ProcessInteractive(val bool) attribute.KeyValue { - return ProcessInteractiveKey.Bool(val) -} - -// ProcessLinuxCgroup returns an attribute KeyValue conforming to the -// "process.linux.cgroup" semantic conventions. It represents the control group -// associated with the process. -func ProcessLinuxCgroup(val string) attribute.KeyValue { - return ProcessLinuxCgroupKey.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) -} - -// ProcessRealUserID returns an attribute KeyValue conforming to the -// "process.real_user.id" semantic conventions. It represents the real user ID -// (RUID) of the process. -func ProcessRealUserID(val int) attribute.KeyValue { - return ProcessRealUserIDKey.Int(val) -} - -// ProcessRealUserName returns an attribute KeyValue conforming to the -// "process.real_user.name" semantic conventions. It represents the username of -// the real user of the process. -func ProcessRealUserName(val string) attribute.KeyValue { - return ProcessRealUserNameKey.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) -} - -// ProcessRuntimeName returns an attribute KeyValue conforming to the -// "process.runtime.name" semantic conventions. It represents the name of the -// runtime of this process. -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) -} - -// ProcessSavedUserID returns an attribute KeyValue conforming to the -// "process.saved_user.id" semantic conventions. It represents the saved user ID -// (SUID) of the process. -func ProcessSavedUserID(val int) attribute.KeyValue { - return ProcessSavedUserIDKey.Int(val) -} - -// ProcessSavedUserName returns an attribute KeyValue conforming to the -// "process.saved_user.name" semantic conventions. It represents the username of -// the saved user. -func ProcessSavedUserName(val string) attribute.KeyValue { - return ProcessSavedUserNameKey.String(val) -} - -// ProcessSessionLeaderPID returns an attribute KeyValue conforming to the -// "process.session_leader.pid" semantic conventions. It represents the PID of -// the process's session leader. This is also the session ID (SID) of the -// process. -func ProcessSessionLeaderPID(val int) attribute.KeyValue { - return ProcessSessionLeaderPIDKey.Int(val) -} - -// ProcessTitle returns an attribute KeyValue conforming to the "process.title" -// semantic conventions. It represents the process title (proctitle). -func ProcessTitle(val string) attribute.KeyValue { - return ProcessTitleKey.String(val) -} - -// ProcessUserID returns an attribute KeyValue conforming to the -// "process.user.id" semantic conventions. It represents the effective user ID -// (EUID) of the process. -func ProcessUserID(val int) attribute.KeyValue { - return ProcessUserIDKey.Int(val) -} - -// ProcessUserName returns an attribute KeyValue conforming to the -// "process.user.name" semantic conventions. It represents the username of the -// effective user of the process. -func ProcessUserName(val string) attribute.KeyValue { - return ProcessUserNameKey.String(val) -} - -// ProcessVpid returns an attribute KeyValue conforming to the "process.vpid" -// semantic conventions. It represents the virtual process identifier. -func ProcessVpid(val int) attribute.KeyValue { - return ProcessVpidKey.Int(val) -} - -// ProcessWorkingDirectory returns an attribute KeyValue conforming to the -// "process.working_directory" semantic conventions. It represents the working -// directory of the process. -func ProcessWorkingDirectory(val string) attribute.KeyValue { - return ProcessWorkingDirectoryKey.String(val) -} - -// Enum values for process.context_switch_type -var ( - // voluntary - // Stability: development - ProcessContextSwitchTypeVoluntary = ProcessContextSwitchTypeKey.String("voluntary") - // involuntary - // Stability: development - ProcessContextSwitchTypeInvoluntary = ProcessContextSwitchTypeKey.String("involuntary") -) - -// Enum values for process.paging.fault_type -var ( - // major - // Stability: development - ProcessPagingFaultTypeMajor = ProcessPagingFaultTypeKey.String("major") - // minor - // Stability: development - ProcessPagingFaultTypeMinor = ProcessPagingFaultTypeKey.String("minor") -) - -// Namespace: profile -const ( - // ProfileFrameTypeKey is the attribute Key conforming to the - // "profile.frame.type" semantic conventions. It represents the describes the - // interpreter or compiler of a single frame. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "cpython" - ProfileFrameTypeKey = attribute.Key("profile.frame.type") -) - -// Enum values for profile.frame.type -var ( - // [.NET] - // - // Stability: development - // - // [.NET]: https://wikipedia.org/wiki/.NET - ProfileFrameTypeDotnet = ProfileFrameTypeKey.String("dotnet") - // [JVM] - // - // Stability: development - // - // [JVM]: https://wikipedia.org/wiki/Java_virtual_machine - ProfileFrameTypeJVM = ProfileFrameTypeKey.String("jvm") - // [Kernel] - // - // Stability: development - // - // [Kernel]: https://wikipedia.org/wiki/Kernel_(operating_system) - ProfileFrameTypeKernel = ProfileFrameTypeKey.String("kernel") - // [C], [C++], [Go], [Rust] - // - // Stability: development - // - // [C]: https://wikipedia.org/wiki/C_(programming_language) - // [C++]: https://wikipedia.org/wiki/C%2B%2B - // [Go]: https://wikipedia.org/wiki/Go_(programming_language) - // [Rust]: https://wikipedia.org/wiki/Rust_(programming_language) - ProfileFrameTypeNative = ProfileFrameTypeKey.String("native") - // [Perl] - // - // Stability: development - // - // [Perl]: https://wikipedia.org/wiki/Perl - ProfileFrameTypePerl = ProfileFrameTypeKey.String("perl") - // [PHP] - // - // Stability: development - // - // [PHP]: https://wikipedia.org/wiki/PHP - ProfileFrameTypePHP = ProfileFrameTypeKey.String("php") - // [Python] - // - // Stability: development - // - // [Python]: https://wikipedia.org/wiki/Python_(programming_language) - ProfileFrameTypeCpython = ProfileFrameTypeKey.String("cpython") - // [Ruby] - // - // Stability: development - // - // [Ruby]: https://wikipedia.org/wiki/Ruby_(programming_language) - ProfileFrameTypeRuby = ProfileFrameTypeKey.String("ruby") - // [V8JS] - // - // Stability: development - // - // [V8JS]: https://wikipedia.org/wiki/V8_(JavaScript_engine) - ProfileFrameTypeV8JS = ProfileFrameTypeKey.String("v8js") - // [Erlang] - // - // Stability: development - // - // [Erlang]: https://en.wikipedia.org/wiki/BEAM_(Erlang_virtual_machine) - ProfileFrameTypeBeam = ProfileFrameTypeKey.String("beam") -) - -// Namespace: rpc -const ( - // RPCConnectRPCErrorCodeKey is the attribute Key conforming to the - // "rpc.connect_rpc.error_code" semantic conventions. It represents the - // [error codes] of the Connect request. Error codes are always string values. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - // - // [error codes]: https://connect.build/docs/protocol/#error-codes - 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] of the gRPC request. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - // - // [numeric status code]: https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md - 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: "2.0", "1.0" - RPCJsonrpcVersionKey = attribute.Key("rpc.jsonrpc.version") - - // RPCMessageCompressedSizeKey is the attribute Key conforming to the - // "rpc.message.compressed_size" semantic conventions. It represents the - // compressed size of the message in bytes. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - RPCMessageCompressedSizeKey = attribute.Key("rpc.message.compressed_size") - - // RPCMessageIDKey is the attribute Key conforming to the "rpc.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: Recommended - // Stability: Development - // - // Examples: - // Note: This way we guarantee that the values will be consistent between - // different implementations. - RPCMessageIDKey = attribute.Key("rpc.message.id") - - // RPCMessageTypeKey is the attribute Key conforming to the "rpc.message.type" - // semantic conventions. It represents the whether this is a received or sent - // message. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - RPCMessageTypeKey = attribute.Key("rpc.message.type") - - // RPCMessageUncompressedSizeKey is the attribute Key conforming to the - // "rpc.message.uncompressed_size" semantic conventions. It represents the - // uncompressed size of the message in bytes. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - RPCMessageUncompressedSizeKey = attribute.Key("rpc.message.uncompressed_size") - - // 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: Development - // - // 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.name` 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: - RPCSystemKey = attribute.Key("rpc.system") -) - -// 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) -} - -// RPCMessageCompressedSize returns an attribute KeyValue conforming to the -// "rpc.message.compressed_size" semantic conventions. It represents the -// compressed size of the message in bytes. -func RPCMessageCompressedSize(val int) attribute.KeyValue { - return RPCMessageCompressedSizeKey.Int(val) -} - -// RPCMessageID returns an attribute KeyValue conforming to the "rpc.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 RPCMessageID(val int) attribute.KeyValue { - return RPCMessageIDKey.Int(val) -} - -// RPCMessageUncompressedSize returns an attribute KeyValue conforming to the -// "rpc.message.uncompressed_size" semantic conventions. It represents the -// uncompressed size of the message in bytes. -func RPCMessageUncompressedSize(val int) attribute.KeyValue { - return RPCMessageUncompressedSizeKey.Int(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) -} - -// Enum values for rpc.connect_rpc.error_code -var ( - // cancelled - // Stability: development - RPCConnectRPCErrorCodeCancelled = RPCConnectRPCErrorCodeKey.String("cancelled") - // unknown - // Stability: development - RPCConnectRPCErrorCodeUnknown = RPCConnectRPCErrorCodeKey.String("unknown") - // invalid_argument - // Stability: development - RPCConnectRPCErrorCodeInvalidArgument = RPCConnectRPCErrorCodeKey.String("invalid_argument") - // deadline_exceeded - // Stability: development - RPCConnectRPCErrorCodeDeadlineExceeded = RPCConnectRPCErrorCodeKey.String("deadline_exceeded") - // not_found - // Stability: development - RPCConnectRPCErrorCodeNotFound = RPCConnectRPCErrorCodeKey.String("not_found") - // already_exists - // Stability: development - RPCConnectRPCErrorCodeAlreadyExists = RPCConnectRPCErrorCodeKey.String("already_exists") - // permission_denied - // Stability: development - RPCConnectRPCErrorCodePermissionDenied = RPCConnectRPCErrorCodeKey.String("permission_denied") - // resource_exhausted - // Stability: development - RPCConnectRPCErrorCodeResourceExhausted = RPCConnectRPCErrorCodeKey.String("resource_exhausted") - // failed_precondition - // Stability: development - RPCConnectRPCErrorCodeFailedPrecondition = RPCConnectRPCErrorCodeKey.String("failed_precondition") - // aborted - // Stability: development - RPCConnectRPCErrorCodeAborted = RPCConnectRPCErrorCodeKey.String("aborted") - // out_of_range - // Stability: development - RPCConnectRPCErrorCodeOutOfRange = RPCConnectRPCErrorCodeKey.String("out_of_range") - // unimplemented - // Stability: development - RPCConnectRPCErrorCodeUnimplemented = RPCConnectRPCErrorCodeKey.String("unimplemented") - // internal - // Stability: development - RPCConnectRPCErrorCodeInternal = RPCConnectRPCErrorCodeKey.String("internal") - // unavailable - // Stability: development - RPCConnectRPCErrorCodeUnavailable = RPCConnectRPCErrorCodeKey.String("unavailable") - // data_loss - // Stability: development - RPCConnectRPCErrorCodeDataLoss = RPCConnectRPCErrorCodeKey.String("data_loss") - // unauthenticated - // Stability: development - RPCConnectRPCErrorCodeUnauthenticated = RPCConnectRPCErrorCodeKey.String("unauthenticated") -) - -// Enum values for rpc.grpc.status_code -var ( - // OK - // Stability: development - RPCGRPCStatusCodeOk = RPCGRPCStatusCodeKey.Int(0) - // CANCELLED - // Stability: development - RPCGRPCStatusCodeCancelled = RPCGRPCStatusCodeKey.Int(1) - // UNKNOWN - // Stability: development - RPCGRPCStatusCodeUnknown = RPCGRPCStatusCodeKey.Int(2) - // INVALID_ARGUMENT - // Stability: development - RPCGRPCStatusCodeInvalidArgument = RPCGRPCStatusCodeKey.Int(3) - // DEADLINE_EXCEEDED - // Stability: development - RPCGRPCStatusCodeDeadlineExceeded = RPCGRPCStatusCodeKey.Int(4) - // NOT_FOUND - // Stability: development - RPCGRPCStatusCodeNotFound = RPCGRPCStatusCodeKey.Int(5) - // ALREADY_EXISTS - // Stability: development - RPCGRPCStatusCodeAlreadyExists = RPCGRPCStatusCodeKey.Int(6) - // PERMISSION_DENIED - // Stability: development - RPCGRPCStatusCodePermissionDenied = RPCGRPCStatusCodeKey.Int(7) - // RESOURCE_EXHAUSTED - // Stability: development - RPCGRPCStatusCodeResourceExhausted = RPCGRPCStatusCodeKey.Int(8) - // FAILED_PRECONDITION - // Stability: development - RPCGRPCStatusCodeFailedPrecondition = RPCGRPCStatusCodeKey.Int(9) - // ABORTED - // Stability: development - RPCGRPCStatusCodeAborted = RPCGRPCStatusCodeKey.Int(10) - // OUT_OF_RANGE - // Stability: development - RPCGRPCStatusCodeOutOfRange = RPCGRPCStatusCodeKey.Int(11) - // UNIMPLEMENTED - // Stability: development - RPCGRPCStatusCodeUnimplemented = RPCGRPCStatusCodeKey.Int(12) - // INTERNAL - // Stability: development - RPCGRPCStatusCodeInternal = RPCGRPCStatusCodeKey.Int(13) - // UNAVAILABLE - // Stability: development - RPCGRPCStatusCodeUnavailable = RPCGRPCStatusCodeKey.Int(14) - // DATA_LOSS - // Stability: development - RPCGRPCStatusCodeDataLoss = RPCGRPCStatusCodeKey.Int(15) - // UNAUTHENTICATED - // Stability: development - RPCGRPCStatusCodeUnauthenticated = RPCGRPCStatusCodeKey.Int(16) -) - -// Enum values for rpc.message.type -var ( - // sent - // Stability: development - RPCMessageTypeSent = RPCMessageTypeKey.String("SENT") - // received - // Stability: development - RPCMessageTypeReceived = RPCMessageTypeKey.String("RECEIVED") -) - -// Enum values for rpc.system -var ( - // gRPC - // Stability: development - RPCSystemGRPC = RPCSystemKey.String("grpc") - // Java RMI - // Stability: development - RPCSystemJavaRmi = RPCSystemKey.String("java_rmi") - // .NET WCF - // Stability: development - RPCSystemDotnetWcf = RPCSystemKey.String("dotnet_wcf") - // Apache Dubbo - // Stability: development - RPCSystemApacheDubbo = RPCSystemKey.String("apache_dubbo") - // Connect RPC - // Stability: development - RPCSystemConnectRPC = RPCSystemKey.String("connect_rpc") -) - -// Namespace: security_rule -const ( - // SecurityRuleCategoryKey is the attribute Key conforming to the - // "security_rule.category" semantic conventions. It represents a categorization - // value keyword used by the entity using the rule for detection of this event. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "Attempted Information Leak" - SecurityRuleCategoryKey = attribute.Key("security_rule.category") - - // SecurityRuleDescriptionKey is the attribute Key conforming to the - // "security_rule.description" semantic conventions. It represents the - // description of the rule generating the event. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "Block requests to public DNS over HTTPS / TLS protocols" - SecurityRuleDescriptionKey = attribute.Key("security_rule.description") - - // SecurityRuleLicenseKey is the attribute Key conforming to the - // "security_rule.license" semantic conventions. It represents the name of the - // license under which the rule used to generate this event is made available. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "Apache 2.0" - SecurityRuleLicenseKey = attribute.Key("security_rule.license") - - // SecurityRuleNameKey is the attribute Key conforming to the - // "security_rule.name" semantic conventions. It represents the name of the rule - // or signature generating the event. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "BLOCK_DNS_over_TLS" - SecurityRuleNameKey = attribute.Key("security_rule.name") - - // SecurityRuleReferenceKey is the attribute Key conforming to the - // "security_rule.reference" semantic conventions. It represents the reference - // URL to additional information about the rule used to generate this event. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "https://en.wikipedia.org/wiki/DNS_over_TLS" - // Note: The URL can point to the vendor’s documentation about the rule. If - // that’s not available, it can also be a link to a more general page - // describing this type of alert. - SecurityRuleReferenceKey = attribute.Key("security_rule.reference") - - // SecurityRuleRulesetNameKey is the attribute Key conforming to the - // "security_rule.ruleset.name" semantic conventions. It represents the name of - // the ruleset, policy, group, or parent category in which the rule used to - // generate this event is a member. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "Standard_Protocol_Filters" - SecurityRuleRulesetNameKey = attribute.Key("security_rule.ruleset.name") - - // SecurityRuleUUIDKey is the attribute Key conforming to the - // "security_rule.uuid" semantic conventions. It represents a rule ID that is - // unique within the scope of a set or group of agents, observers, or other - // entities using the rule for detection of this event. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "550e8400-e29b-41d4-a716-446655440000", "1100110011" - SecurityRuleUUIDKey = attribute.Key("security_rule.uuid") - - // SecurityRuleVersionKey is the attribute Key conforming to the - // "security_rule.version" semantic conventions. It represents the version / - // revision of the rule being used for analysis. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "1.0.0" - SecurityRuleVersionKey = attribute.Key("security_rule.version") -) - -// SecurityRuleCategory returns an attribute KeyValue conforming to the -// "security_rule.category" semantic conventions. It represents a categorization -// value keyword used by the entity using the rule for detection of this event. -func SecurityRuleCategory(val string) attribute.KeyValue { - return SecurityRuleCategoryKey.String(val) -} - -// SecurityRuleDescription returns an attribute KeyValue conforming to the -// "security_rule.description" semantic conventions. It represents the -// description of the rule generating the event. -func SecurityRuleDescription(val string) attribute.KeyValue { - return SecurityRuleDescriptionKey.String(val) -} - -// SecurityRuleLicense returns an attribute KeyValue conforming to the -// "security_rule.license" semantic conventions. It represents the name of the -// license under which the rule used to generate this event is made available. -func SecurityRuleLicense(val string) attribute.KeyValue { - return SecurityRuleLicenseKey.String(val) -} - -// SecurityRuleName returns an attribute KeyValue conforming to the -// "security_rule.name" semantic conventions. It represents the name of the rule -// or signature generating the event. -func SecurityRuleName(val string) attribute.KeyValue { - return SecurityRuleNameKey.String(val) -} - -// SecurityRuleReference returns an attribute KeyValue conforming to the -// "security_rule.reference" semantic conventions. It represents the reference -// URL to additional information about the rule used to generate this event. -func SecurityRuleReference(val string) attribute.KeyValue { - return SecurityRuleReferenceKey.String(val) -} - -// SecurityRuleRulesetName returns an attribute KeyValue conforming to the -// "security_rule.ruleset.name" semantic conventions. It represents the name of -// the ruleset, policy, group, or parent category in which the rule used to -// generate this event is a member. -func SecurityRuleRulesetName(val string) attribute.KeyValue { - return SecurityRuleRulesetNameKey.String(val) -} - -// SecurityRuleUUID returns an attribute KeyValue conforming to the -// "security_rule.uuid" semantic conventions. It represents a rule ID that is -// unique within the scope of a set or group of agents, observers, or other -// entities using the rule for detection of this event. -func SecurityRuleUUID(val string) attribute.KeyValue { - return SecurityRuleUUIDKey.String(val) -} - -// SecurityRuleVersion returns an attribute KeyValue conforming to the -// "security_rule.version" semantic conventions. It represents the version / -// revision of the rule being used for analysis. -func SecurityRuleVersion(val string) attribute.KeyValue { - return SecurityRuleVersionKey.String(val) -} - -// Namespace: server -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: Recommended - // 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: Recommended - // 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) -} - -// Namespace: service -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: Recommended - // Stability: Development - // - // Examples: "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). - // - // Implementations, such as SDKs, are recommended to generate a random Version 1 - // or Version 4 [RFC - // 4122] UUID, but are free to use an inherent unique ID as - // the source of - // this value if stability is desirable. In that case, the ID SHOULD be used as - // source of a UUID Version 5 and - // SHOULD use the following UUID as the namespace: - // `4d63009a-8d0f-11ee-aad7-4c796ed8e320`. - // - // UUIDs are typically recommended, as only an opaque value for the purposes of - // identifying a service instance is - // needed. Similar to what can be seen in the man page for the - // [`/etc/machine-id`] file, the underlying - // data, such as pod name and namespace should be treated as confidential, being - // the user's choice to expose it - // or not via another resource attribute. - // - // For applications running behind an application server (like unicorn), we do - // not recommend using one identifier - // for all processes participating in the application. Instead, it's recommended - // each division (e.g. a worker - // thread in unicorn) to have its own instance.id. - // - // It's not recommended for a Collector to set `service.instance.id` if it can't - // unambiguously determine the - // service instance that is generating that telemetry. For instance, creating an - // UUID based on `pod.name` will - // likely be wrong, as the Collector might not know from which container within - // that pod the telemetry originated. - // However, Collectors can set the `service.instance.id` if they can - // unambiguously determine the service instance - // for that telemetry. This is typically the case for scraping receivers, as - // they know the target address and - // port. - // - // [RFC - // 4122]: https://www.ietf.org/rfc/rfc4122.txt - // [`/etc/machine-id`]: https://www.freedesktop.org/software/systemd/man/latest/machine-id.html - ServiceInstanceIDKey = attribute.Key("service.instance.id") - - // ServiceNameKey is the attribute Key conforming to the "service.name" semantic - // conventions. It represents the logical name of the service. - // - // Type: string - // RequirementLevel: Recommended - // 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`], e.g. `unknown_service:bash`. - // If `process.executable.name` is not available, the value MUST be set to - // `unknown_service`. - // - // [`process.executable.name`]: process.md - ServiceNameKey = attribute.Key("service.name") - - // ServiceNamespaceKey is the attribute Key conforming to the - // "service.namespace" semantic conventions. It represents a namespace for - // `service.name`. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // 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") - - // 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: Recommended - // Stability: Stable - // - // Examples: "2.0.0", "a01dbef8a" - ServiceVersionKey = attribute.Key("service.version") -) - -// 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) -} - -// 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) -} - -// 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) -} - -// 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) -} - -// Namespace: session -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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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) -} - -// Namespace: signalr -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: Recommended - // Stability: Stable - // - // 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]. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Stable - // - // Examples: "web_sockets", "long_polling" - // - // [SignalR transport type]: https://github.com/dotnet/aspnetcore/blob/main/src/SignalR/docs/specs/TransportProtocols.md - SignalrTransportKey = attribute.Key("signalr.transport") -) - -// Enum values for signalr.connection.status -var ( - // The connection was closed normally. - // Stability: stable - SignalrConnectionStatusNormalClosure = SignalrConnectionStatusKey.String("normal_closure") - // The connection was closed due to a timeout. - // Stability: stable - SignalrConnectionStatusTimeout = SignalrConnectionStatusKey.String("timeout") - // The connection was closed because the app is shutting down. - // Stability: stable - SignalrConnectionStatusAppShutdown = SignalrConnectionStatusKey.String("app_shutdown") -) - -// Enum values for signalr.transport -var ( - // ServerSentEvents protocol - // Stability: stable - SignalrTransportServerSentEvents = SignalrTransportKey.String("server_sent_events") - // LongPolling protocol - // Stability: stable - SignalrTransportLongPolling = SignalrTransportKey.String("long_polling") - // WebSockets protocol - // Stability: stable - SignalrTransportWebSockets = SignalrTransportKey.String("web_sockets") -) - -// Namespace: source -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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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) -} - -// Namespace: system -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: Recommended - // Stability: Development - // - // Examples: 1 - SystemCPULogicalNumberKey = attribute.Key("system.cpu.logical_number") - - // SystemDeviceKey is the attribute Key conforming to the "system.device" - // semantic conventions. It represents the device identifier. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "(identifier)" - SystemDeviceKey = attribute.Key("system.device") - - // SystemFilesystemModeKey is the attribute Key conforming to the - // "system.filesystem.mode" semantic conventions. It represents the filesystem - // mode. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: "ext4" - SystemFilesystemTypeKey = attribute.Key("system.filesystem.type") - - // SystemMemoryStateKey is the attribute Key conforming to the - // "system.memory.state" semantic conventions. It represents the memory state. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "free", "cached" - SystemMemoryStateKey = attribute.Key("system.memory.state") - - // SystemPagingDirectionKey is the attribute Key conforming to the - // "system.paging.direction" semantic conventions. It represents the paging - // access direction. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: "minor" - SystemPagingTypeKey = attribute.Key("system.paging.type") - - // SystemProcessStatusKey is the attribute Key conforming to the - // "system.process.status" semantic conventions. It represents the process - // state, e.g., [Linux Process State Codes]. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "running" - // - // [Linux Process State Codes]: https://man7.org/linux/man-pages/man1/ps.1.html#PROCESS_STATE_CODES - SystemProcessStatusKey = attribute.Key("system.process.status") -) - -// 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) -} - -// 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) -} - -// 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) -} - -// Enum values for system.filesystem.state -var ( - // used - // Stability: development - SystemFilesystemStateUsed = SystemFilesystemStateKey.String("used") - // free - // Stability: development - SystemFilesystemStateFree = SystemFilesystemStateKey.String("free") - // reserved - // Stability: development - SystemFilesystemStateReserved = SystemFilesystemStateKey.String("reserved") -) - -// Enum values for system.filesystem.type -var ( - // fat32 - // Stability: development - SystemFilesystemTypeFat32 = SystemFilesystemTypeKey.String("fat32") - // exfat - // Stability: development - SystemFilesystemTypeExfat = SystemFilesystemTypeKey.String("exfat") - // ntfs - // Stability: development - SystemFilesystemTypeNtfs = SystemFilesystemTypeKey.String("ntfs") - // refs - // Stability: development - SystemFilesystemTypeRefs = SystemFilesystemTypeKey.String("refs") - // hfsplus - // Stability: development - SystemFilesystemTypeHfsplus = SystemFilesystemTypeKey.String("hfsplus") - // ext4 - // Stability: development - SystemFilesystemTypeExt4 = SystemFilesystemTypeKey.String("ext4") -) - -// Enum values for system.memory.state -var ( - // used - // Stability: development - SystemMemoryStateUsed = SystemMemoryStateKey.String("used") - // free - // Stability: development - SystemMemoryStateFree = SystemMemoryStateKey.String("free") - // Deprecated: Removed, report shared memory usage with - // `metric.system.memory.shared` metric. - SystemMemoryStateShared = SystemMemoryStateKey.String("shared") - // buffers - // Stability: development - SystemMemoryStateBuffers = SystemMemoryStateKey.String("buffers") - // cached - // Stability: development - SystemMemoryStateCached = SystemMemoryStateKey.String("cached") -) - -// Enum values for system.paging.direction -var ( - // in - // Stability: development - SystemPagingDirectionIn = SystemPagingDirectionKey.String("in") - // out - // Stability: development - SystemPagingDirectionOut = SystemPagingDirectionKey.String("out") -) - -// Enum values for system.paging.state -var ( - // used - // Stability: development - SystemPagingStateUsed = SystemPagingStateKey.String("used") - // free - // Stability: development - SystemPagingStateFree = SystemPagingStateKey.String("free") -) - -// Enum values for system.paging.type -var ( - // major - // Stability: development - SystemPagingTypeMajor = SystemPagingTypeKey.String("major") - // minor - // Stability: development - SystemPagingTypeMinor = SystemPagingTypeKey.String("minor") -) - -// Enum values for system.process.status -var ( - // running - // Stability: development - SystemProcessStatusRunning = SystemProcessStatusKey.String("running") - // sleeping - // Stability: development - SystemProcessStatusSleeping = SystemProcessStatusKey.String("sleeping") - // stopped - // Stability: development - SystemProcessStatusStopped = SystemProcessStatusKey.String("stopped") - // defunct - // Stability: development - SystemProcessStatusDefunct = SystemProcessStatusKey.String("defunct") -) - -// Namespace: telemetry -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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: "1.2.3" - TelemetryDistroVersionKey = attribute.Key("telemetry.distro.version") - - // TelemetrySDKLanguageKey is the attribute Key conforming to the - // "telemetry.sdk.language" semantic conventions. It represents the language of - // the telemetry SDK. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Stable - // - // Examples: - 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: Recommended - // Stability: Stable - // - // 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: Recommended - // Stability: Stable - // - // Examples: "1.2.3" - TelemetrySDKVersionKey = attribute.Key("telemetry.sdk.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) -} - -// 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) -} - -// Enum values for telemetry.sdk.language -var ( - // cpp - // Stability: stable - TelemetrySDKLanguageCPP = TelemetrySDKLanguageKey.String("cpp") - // dotnet - // Stability: stable - TelemetrySDKLanguageDotnet = TelemetrySDKLanguageKey.String("dotnet") - // erlang - // Stability: stable - TelemetrySDKLanguageErlang = TelemetrySDKLanguageKey.String("erlang") - // go - // Stability: stable - TelemetrySDKLanguageGo = TelemetrySDKLanguageKey.String("go") - // java - // Stability: stable - TelemetrySDKLanguageJava = TelemetrySDKLanguageKey.String("java") - // nodejs - // Stability: stable - TelemetrySDKLanguageNodejs = TelemetrySDKLanguageKey.String("nodejs") - // php - // Stability: stable - TelemetrySDKLanguagePHP = TelemetrySDKLanguageKey.String("php") - // python - // Stability: stable - TelemetrySDKLanguagePython = TelemetrySDKLanguageKey.String("python") - // ruby - // Stability: stable - TelemetrySDKLanguageRuby = TelemetrySDKLanguageKey.String("ruby") - // rust - // Stability: stable - TelemetrySDKLanguageRust = TelemetrySDKLanguageKey.String("rust") - // swift - // Stability: stable - TelemetrySDKLanguageSwift = TelemetrySDKLanguageKey.String("swift") - // webjs - // Stability: stable - TelemetrySDKLanguageWebjs = TelemetrySDKLanguageKey.String("webjs") -) - -// Namespace: test -const ( - // TestCaseNameKey is the attribute Key conforming to the "test.case.name" - // semantic conventions. It represents the fully qualified human readable name - // of the [test case]. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "org.example.TestCase1.test1", "example/tests/TestCase1.test1", - // "ExampleTestCase1_test1" - // - // [test case]: https://wikipedia.org/wiki/Test_case - TestCaseNameKey = attribute.Key("test.case.name") - - // TestCaseResultStatusKey is the attribute Key conforming to the - // "test.case.result.status" semantic conventions. It represents the status of - // the actual test case result from test execution. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "pass", "fail" - TestCaseResultStatusKey = attribute.Key("test.case.result.status") - - // TestSuiteNameKey is the attribute Key conforming to the "test.suite.name" - // semantic conventions. It represents the human readable name of a [test suite] - // . - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "TestSuite1" - // - // [test suite]: https://wikipedia.org/wiki/Test_suite - TestSuiteNameKey = attribute.Key("test.suite.name") - - // TestSuiteRunStatusKey is the attribute Key conforming to the - // "test.suite.run.status" semantic conventions. It represents the status of the - // test suite run. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "success", "failure", "skipped", "aborted", "timed_out", - // "in_progress" - TestSuiteRunStatusKey = attribute.Key("test.suite.run.status") -) - -// TestCaseName returns an attribute KeyValue conforming to the "test.case.name" -// semantic conventions. It represents the fully qualified human readable name of -// the [test case]. -// -// [test case]: https://wikipedia.org/wiki/Test_case -func TestCaseName(val string) attribute.KeyValue { - return TestCaseNameKey.String(val) -} - -// TestSuiteName returns an attribute KeyValue conforming to the -// "test.suite.name" semantic conventions. It represents the human readable name -// of a [test suite]. -// -// [test suite]: https://wikipedia.org/wiki/Test_suite -func TestSuiteName(val string) attribute.KeyValue { - return TestSuiteNameKey.String(val) -} - -// Enum values for test.case.result.status -var ( - // pass - // Stability: development - TestCaseResultStatusPass = TestCaseResultStatusKey.String("pass") - // fail - // Stability: development - TestCaseResultStatusFail = TestCaseResultStatusKey.String("fail") -) - -// Enum values for test.suite.run.status -var ( - // success - // Stability: development - TestSuiteRunStatusSuccess = TestSuiteRunStatusKey.String("success") - // failure - // Stability: development - TestSuiteRunStatusFailure = TestSuiteRunStatusKey.String("failure") - // skipped - // Stability: development - TestSuiteRunStatusSkipped = TestSuiteRunStatusKey.String("skipped") - // aborted - // Stability: development - TestSuiteRunStatusAborted = TestSuiteRunStatusKey.String("aborted") - // timed_out - // Stability: development - TestSuiteRunStatusTimedOut = TestSuiteRunStatusKey.String("timed_out") - // in_progress - // Stability: development - TestSuiteRunStatusInProgress = TestSuiteRunStatusKey.String("in_progress") -) - -// Namespace: thread -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: Recommended - // Stability: Development - 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: Recommended - // Stability: Development - // - // 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) -} - -// Namespace: tls -const ( - // TLSCipherKey is the attribute Key conforming to the "tls.cipher" semantic - // conventions. It represents the string indicating the [cipher] used during the - // current connection. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // 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]. - // - // [cipher]: https://datatracker.ietf.org/doc/html/rfc5246#appendix-A.5 - // [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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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] of - // the issuer of the x.509 certificate presented by the client. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "CN=Example Root CA, OU=Infrastructure Team, DC=example, DC=com" - // - // [subject]: https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6 - 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: "1970-01-01T00:00:00.000Z" - TLSClientNotBeforeKey = attribute.Key("tls.client.not_before") - - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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], this string should be lower - // case. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "http/1.1" - // - // [IANA registry]: https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids - 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]. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - // - // [SSL/TLS protocol version]: https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html#RETURN-VALUES - 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]. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "1.2", "3" - // - // [SSL/TLS protocol version]: https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html#RETURN-VALUES - 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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] of - // the issuer of the x.509 certificate presented by the client. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "CN=Example Root CA, OU=Infrastructure Team, DC=example, DC=com" - // - // [subject]: https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6 - 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // Examples: "CN=myserver, OU=Documentation Team, DC=example, DC=com" - TLSServerSubjectKey = attribute.Key("tls.server.subject") -) - -// TLSCipher returns an attribute KeyValue conforming to the "tls.cipher" -// semantic conventions. It represents the string indicating the [cipher] used -// during the current connection. -// -// [cipher]: https://datatracker.ietf.org/doc/html/rfc5246#appendix-A.5 -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] of the issuer of the x.509 certificate presented by the client. -// -// [subject]: https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6 -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) -} - -// 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], this -// string should be lower case. -// -// [IANA registry]: https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids -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]. -// -// [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] of the issuer of the x.509 certificate presented by the client. -// -// [subject]: https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6 -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) -} - -// Enum values for tls.protocol.name -var ( - // ssl - // Stability: development - TLSProtocolNameSsl = TLSProtocolNameKey.String("ssl") - // tls - // Stability: development - TLSProtocolNameTLS = TLSProtocolNameKey.String("tls") -) - -// Namespace: url -const ( - // URLDomainKey is the attribute Key conforming to the "url.domain" semantic - // conventions. It represents the domain extracted from the `url.full`, such as - // "opentelemetry.io". - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "www.foo.bar", "opentelemetry.io", "3.12.167.2", - // "[1080:0:0:0:8:800:200C:417A]" - // Note: In some cases a URL may refer to an IP and/or port directly, without a - // domain name. In this case, the IP address would go to the domain field. If - // the URL contains a [literal IPv6 address] enclosed by `[` and `]`, the `[` - // and `]` characters should also be captured in the domain field. - // - // [literal IPv6 address]: https://www.rfc-editor.org/rfc/rfc2732#section-2 - URLDomainKey = attribute.Key("url.domain") - - // URLExtensionKey is the attribute Key conforming to the "url.extension" - // semantic conventions. It represents the file extension extracted from the - // `url.full`, excluding the leading dot. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "png", "gz" - // Note: The file extension is only set if it exists, as not every url has a - // file extension. When the file name has multiple extensions `example.tar.gz`, - // only the last one should be captured `gz`, not `tar.gz`. - URLExtensionKey = attribute.Key("url.extension") - - // URLFragmentKey is the attribute Key conforming to the "url.fragment" semantic - // conventions. It represents the [URI fragment] component. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Stable - // - // Examples: "SemConv" - // - // [URI fragment]: https://www.rfc-editor.org/rfc/rfc3986#section-3.5 - 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]. - // - // Type: string - // RequirementLevel: Recommended - // 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). - // - // Sensitive content provided in `url.full` SHOULD be scrubbed when - // instrumentations can identify it. - // - // - // Query string values for the following keys SHOULD be redacted by default and - // replaced by the - // value `REDACTED`: - // - // - [`AWSAccessKeyId`] - // - [`Signature`] - // - [`sig`] - // - [`X-Goog-Signature`] - // - // This list is subject to change over time. - // - // When a query string value is redacted, the query string key SHOULD still be - // preserved, e.g. - // `https://www.example.com/path?color=blue&sig=REDACTED`. - // - // [RFC3986]: https://www.rfc-editor.org/rfc/rfc3986 - // [`AWSAccessKeyId`]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth - // [`Signature`]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth - // [`sig`]: https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token - // [`X-Goog-Signature`]: https://cloud.google.com/storage/docs/access-control/signed-urls - URLFullKey = attribute.Key("url.full") - - // URLOriginalKey is the attribute Key conforming to the "url.original" semantic - // conventions. It represents the unmodified original URL as seen in the event - // source. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "https://www.foo.bar/search?q=OpenTelemetry#SemConv", - // "search?q=OpenTelemetry" - // Note: In network monitoring, the observed URL may be a full URL, whereas in - // access logs, the URL is often just represented as a path. This field is meant - // to represent the URL as it was observed, complete or not. - // `url.original` might contain credentials passed via URL in form of - // `https://username:password@www.example.com/`. In such case password and - // username SHOULD NOT be redacted and attribute's value SHOULD remain the same. - URLOriginalKey = attribute.Key("url.original") - - // URLPathKey is the attribute Key conforming to the "url.path" semantic - // conventions. It represents the [URI path] component. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Stable - // - // Examples: "/search" - // Note: Sensitive content provided in `url.path` SHOULD be scrubbed when - // instrumentations can identify it. - // - // [URI path]: https://www.rfc-editor.org/rfc/rfc3986#section-3.3 - URLPathKey = attribute.Key("url.path") - - // URLPortKey is the attribute Key conforming to the "url.port" semantic - // conventions. It represents the port extracted from the `url.full`. - // - // Type: int - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: 443 - URLPortKey = attribute.Key("url.port") - - // URLQueryKey is the attribute Key conforming to the "url.query" semantic - // conventions. It represents the [URI query] component. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Stable - // - // Examples: "q=OpenTelemetry" - // Note: Sensitive content provided in `url.query` SHOULD be scrubbed when - // instrumentations can identify it. - // - // - // Query string values for the following keys SHOULD be redacted by default and - // replaced by the value `REDACTED`: - // - // - [`AWSAccessKeyId`] - // - [`Signature`] - // - [`sig`] - // - [`X-Goog-Signature`] - // - // This list is subject to change over time. - // - // When a query string value is redacted, the query string key SHOULD still be - // preserved, e.g. - // `q=OpenTelemetry&sig=REDACTED`. - // - // [URI query]: https://www.rfc-editor.org/rfc/rfc3986#section-3.4 - // [`AWSAccessKeyId`]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth - // [`Signature`]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth - // [`sig`]: https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token - // [`X-Goog-Signature`]: https://cloud.google.com/storage/docs/access-control/signed-urls - URLQueryKey = attribute.Key("url.query") - - // URLRegisteredDomainKey is the attribute Key conforming to the - // "url.registered_domain" semantic conventions. It represents the highest - // registered url domain, stripped of the subdomain. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "example.com", "foo.co.uk" - // Note: This value can be determined precisely with the [public suffix list]. - // For example, the registered domain for `foo.example.com` is `example.com`. - // Trying to approximate this by simply taking the last two labels will not work - // well for TLDs such as `co.uk`. - // - // [public suffix list]: http://publicsuffix.org - URLRegisteredDomainKey = attribute.Key("url.registered_domain") - - // URLSchemeKey is the attribute Key conforming to the "url.scheme" semantic - // conventions. It represents the [URI scheme] component identifying the used - // protocol. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Stable - // - // Examples: "https", "ftp", "telnet" - // - // [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1 - URLSchemeKey = attribute.Key("url.scheme") - - // URLSubdomainKey is the attribute Key conforming to the "url.subdomain" - // semantic conventions. It represents the subdomain portion of a fully - // qualified domain name includes all of the names except the host name under - // the registered_domain. In a partially qualified domain, or if the - // qualification level of the full name cannot be determined, subdomain contains - // all of the names below the registered domain. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "east", "sub2.sub1" - // Note: The subdomain portion of `www.east.mydomain.co.uk` is `east`. If the - // domain has multiple levels of subdomain, such as `sub2.sub1.example.com`, the - // subdomain field should contain `sub2.sub1`, with no trailing period. - URLSubdomainKey = attribute.Key("url.subdomain") - - // URLTemplateKey is the attribute Key conforming to the "url.template" semantic - // conventions. It represents the low-cardinality template of an - // [absolute path reference]. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "/users/{id}", "/users/:id", "/users?id={id}" - // - // [absolute path reference]: https://www.rfc-editor.org/rfc/rfc3986#section-4.2 - URLTemplateKey = attribute.Key("url.template") - - // URLTopLevelDomainKey is the attribute Key conforming to the - // "url.top_level_domain" semantic conventions. It represents the effective top - // level domain (eTLD), also known as the domain suffix, is the last part of the - // domain name. For example, the top level domain for example.com is `com`. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "com", "co.uk" - // Note: This value can be determined precisely with the [public suffix list]. - // - // [public suffix list]: http://publicsuffix.org - URLTopLevelDomainKey = attribute.Key("url.top_level_domain") -) - -// URLDomain returns an attribute KeyValue conforming to the "url.domain" -// semantic conventions. It represents the domain extracted from the `url.full`, -// such as "opentelemetry.io". -func URLDomain(val string) attribute.KeyValue { - return URLDomainKey.String(val) -} - -// URLExtension returns an attribute KeyValue conforming to the "url.extension" -// semantic conventions. It represents the file extension extracted from the -// `url.full`, excluding the leading dot. -func URLExtension(val string) attribute.KeyValue { - return URLExtensionKey.String(val) -} - -// URLFragment returns an attribute KeyValue conforming to the "url.fragment" -// semantic conventions. It represents the [URI fragment] component. -// -// [URI fragment]: https://www.rfc-editor.org/rfc/rfc3986#section-3.5 -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]. -// -// [RFC3986]: https://www.rfc-editor.org/rfc/rfc3986 -func URLFull(val string) attribute.KeyValue { - return URLFullKey.String(val) -} - -// URLOriginal returns an attribute KeyValue conforming to the "url.original" -// semantic conventions. It represents the unmodified original URL as seen in the -// event source. -func URLOriginal(val string) attribute.KeyValue { - return URLOriginalKey.String(val) -} - -// URLPath returns an attribute KeyValue conforming to the "url.path" semantic -// conventions. It represents the [URI path] component. -// -// [URI path]: https://www.rfc-editor.org/rfc/rfc3986#section-3.3 -func URLPath(val string) attribute.KeyValue { - return URLPathKey.String(val) -} - -// URLPort returns an attribute KeyValue conforming to the "url.port" semantic -// conventions. It represents the port extracted from the `url.full`. -func URLPort(val int) attribute.KeyValue { - return URLPortKey.Int(val) -} - -// URLQuery returns an attribute KeyValue conforming to the "url.query" semantic -// conventions. It represents the [URI query] component. -// -// [URI query]: https://www.rfc-editor.org/rfc/rfc3986#section-3.4 -func URLQuery(val string) attribute.KeyValue { - return URLQueryKey.String(val) -} - -// URLRegisteredDomain returns an attribute KeyValue conforming to the -// "url.registered_domain" semantic conventions. It represents the highest -// registered url domain, stripped of the subdomain. -func URLRegisteredDomain(val string) attribute.KeyValue { - return URLRegisteredDomainKey.String(val) -} - -// URLScheme returns an attribute KeyValue conforming to the "url.scheme" -// semantic conventions. It represents the [URI scheme] component identifying the -// used protocol. -// -// [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1 -func URLScheme(val string) attribute.KeyValue { - return URLSchemeKey.String(val) -} - -// URLSubdomain returns an attribute KeyValue conforming to the "url.subdomain" -// semantic conventions. It represents the subdomain portion of a fully qualified -// domain name includes all of the names except the host name under the -// registered_domain. In a partially qualified domain, or if the qualification -// level of the full name cannot be determined, subdomain contains all of the -// names below the registered domain. -func URLSubdomain(val string) attribute.KeyValue { - return URLSubdomainKey.String(val) -} - -// URLTemplate returns an attribute KeyValue conforming to the "url.template" -// semantic conventions. It represents the low-cardinality template of an -// [absolute path reference]. -// -// [absolute path reference]: https://www.rfc-editor.org/rfc/rfc3986#section-4.2 -func URLTemplate(val string) attribute.KeyValue { - return URLTemplateKey.String(val) -} - -// URLTopLevelDomain returns an attribute KeyValue conforming to the -// "url.top_level_domain" semantic conventions. It represents the effective top -// level domain (eTLD), also known as the domain suffix, is the last part of the -// domain name. For example, the top level domain for example.com is `com`. -func URLTopLevelDomain(val string) attribute.KeyValue { - return URLTopLevelDomainKey.String(val) -} - -// Namespace: user -const ( - // UserEmailKey is the attribute Key conforming to the "user.email" semantic - // conventions. It represents the user email address. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "a.einstein@example.com" - UserEmailKey = attribute.Key("user.email") - - // UserFullNameKey is the attribute Key conforming to the "user.full_name" - // semantic conventions. It represents the user's full name. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "Albert Einstein" - UserFullNameKey = attribute.Key("user.full_name") - - // UserHashKey is the attribute Key conforming to the "user.hash" semantic - // conventions. It represents the unique user hash to correlate information for - // a user in anonymized form. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "364fc68eaf4c8acec74a4e52d7d1feaa" - // Note: Useful if `user.id` or `user.name` contain confidential information and - // cannot be used. - UserHashKey = attribute.Key("user.hash") - - // UserIDKey is the attribute Key conforming to the "user.id" semantic - // conventions. It represents the unique identifier of the user. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "S-1-5-21-202424912787-2692429404-2351956786-1000" - UserIDKey = attribute.Key("user.id") - - // UserNameKey is the attribute Key conforming to the "user.name" semantic - // conventions. It represents the short name or login/username of the user. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "a.einstein" - UserNameKey = attribute.Key("user.name") - - // UserRolesKey is the attribute Key conforming to the "user.roles" semantic - // conventions. It represents the array of user roles at the time of the event. - // - // Type: string[] - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "admin", "reporting_user" - UserRolesKey = attribute.Key("user.roles") -) - -// UserEmail returns an attribute KeyValue conforming to the "user.email" -// semantic conventions. It represents the user email address. -func UserEmail(val string) attribute.KeyValue { - return UserEmailKey.String(val) -} - -// UserFullName returns an attribute KeyValue conforming to the "user.full_name" -// semantic conventions. It represents the user's full name. -func UserFullName(val string) attribute.KeyValue { - return UserFullNameKey.String(val) -} - -// UserHash returns an attribute KeyValue conforming to the "user.hash" semantic -// conventions. It represents the unique user hash to correlate information for a -// user in anonymized form. -func UserHash(val string) attribute.KeyValue { - return UserHashKey.String(val) -} - -// UserID returns an attribute KeyValue conforming to the "user.id" semantic -// conventions. It represents the unique identifier of the user. -func UserID(val string) attribute.KeyValue { - return UserIDKey.String(val) -} - -// UserName returns an attribute KeyValue conforming to the "user.name" semantic -// conventions. It represents the short name or login/username of the user. -func UserName(val string) attribute.KeyValue { - return UserNameKey.String(val) -} - -// UserRoles returns an attribute KeyValue conforming to the "user.roles" -// semantic conventions. It represents the array of user roles at the time of the -// event. -func UserRoles(val ...string) attribute.KeyValue { - return UserRolesKey.StringSlice(val) -} - -// Namespace: user_agent -const ( - // UserAgentNameKey is the attribute Key conforming to the "user_agent.name" - // semantic conventions. It represents the name of the user-agent extracted from - // original. Usually refers to the browser's name. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "Safari", "YourApp" - // Note: [Example] of extracting browser's name from original string. In the - // case of using a user-agent for non-browser products, such as microservices - // with multiple names/versions inside the `user_agent.original`, the most - // significant name SHOULD be selected. In such a scenario it should align with - // `user_agent.version` - // - // [Example]: https://www.whatsmyua.info - UserAgentNameKey = attribute.Key("user_agent.name") - - // UserAgentOriginalKey is the attribute Key conforming to the - // "user_agent.original" semantic conventions. It represents the value of the - // [HTTP User-Agent] header sent by the client. - // - // Type: string - // RequirementLevel: Recommended - // 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", "YourApp/1.0.0 - // grpc-java-okhttp/1.27.2" - // - // [HTTP User-Agent]: https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent - UserAgentOriginalKey = attribute.Key("user_agent.original") - - // UserAgentSyntheticTypeKey is the attribute Key conforming to the - // "user_agent.synthetic.type" semantic conventions. It represents the specifies - // the category of synthetic traffic, such as tests or bots. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - // Note: This attribute MAY be derived from the contents of the - // `user_agent.original` attribute. Components that populate the attribute are - // responsible for determining what they consider to be synthetic bot or test - // traffic. This attribute can either be set for self-identification purposes, - // or on telemetry detected to be generated as a result of a synthetic request. - // This attribute is useful for distinguishing between genuine client traffic - // and synthetic traffic generated by bots or tests. - UserAgentSyntheticTypeKey = attribute.Key("user_agent.synthetic.type") - - // UserAgentVersionKey is the attribute Key conforming to the - // "user_agent.version" semantic conventions. It represents the version of the - // user-agent extracted from original. Usually refers to the browser's version. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "14.1.2", "1.0.0" - // Note: [Example] of extracting browser's version from original string. In the - // case of using a user-agent for non-browser products, such as microservices - // with multiple names/versions inside the `user_agent.original`, the most - // significant version SHOULD be selected. In such a scenario it should align - // with `user_agent.name` - // - // [Example]: https://www.whatsmyua.info - UserAgentVersionKey = attribute.Key("user_agent.version") -) - -// UserAgentName returns an attribute KeyValue conforming to the -// "user_agent.name" semantic conventions. It represents the name of the -// user-agent extracted from original. Usually refers to the browser's name. -func UserAgentName(val string) attribute.KeyValue { - return UserAgentNameKey.String(val) -} - -// UserAgentOriginal returns an attribute KeyValue conforming to the -// "user_agent.original" semantic conventions. It represents the value of the -// [HTTP User-Agent] header sent by the client. -// -// [HTTP User-Agent]: https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent -func UserAgentOriginal(val string) attribute.KeyValue { - return UserAgentOriginalKey.String(val) -} - -// UserAgentVersion returns an attribute KeyValue conforming to the -// "user_agent.version" semantic conventions. It represents the version of the -// user-agent extracted from original. Usually refers to the browser's version. -func UserAgentVersion(val string) attribute.KeyValue { - return UserAgentVersionKey.String(val) -} - -// Enum values for user_agent.synthetic.type -var ( - // Bot source. - // Stability: development - UserAgentSyntheticTypeBot = UserAgentSyntheticTypeKey.String("bot") - // Synthetic test source. - // Stability: development - UserAgentSyntheticTypeTest = UserAgentSyntheticTypeKey.String("test") -) - -// Namespace: vcs -const ( - // VCSChangeIDKey is the attribute Key conforming to the "vcs.change.id" - // semantic conventions. It represents the ID of the change (pull request/merge - // request/changelist) if applicable. This is usually a unique (within - // repository) identifier generated by the VCS system. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "123" - VCSChangeIDKey = attribute.Key("vcs.change.id") - - // VCSChangeStateKey is the attribute Key conforming to the "vcs.change.state" - // semantic conventions. It represents the state of the change (pull - // request/merge request/changelist). - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "open", "closed", "merged" - VCSChangeStateKey = attribute.Key("vcs.change.state") - - // VCSChangeTitleKey is the attribute Key conforming to the "vcs.change.title" - // semantic conventions. It represents the human readable title of the change - // (pull request/merge request/changelist). This title is often a brief summary - // of the change and may get merged in to a ref as the commit summary. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "Fixes broken thing", "feat: add my new feature", "[chore] update - // dependency" - VCSChangeTitleKey = attribute.Key("vcs.change.title") - - // VCSLineChangeTypeKey is the attribute Key conforming to the - // "vcs.line_change.type" semantic conventions. It represents the type of line - // change being measured on a branch or change. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "added", "removed" - VCSLineChangeTypeKey = attribute.Key("vcs.line_change.type") - - // VCSRefBaseNameKey is the attribute Key conforming to the "vcs.ref.base.name" - // semantic conventions. It represents the name of the [reference] such as - // **branch** or **tag** in the repository. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "my-feature-branch", "tag-1-test" - // Note: `base` refers to the starting point of a change. For example, `main` - // would be the base reference of type branch if you've created a new - // reference of type branch from it and created new commits. - // - // [reference]: https://git-scm.com/docs/gitglossary#def_ref - VCSRefBaseNameKey = attribute.Key("vcs.ref.base.name") - - // VCSRefBaseRevisionKey is the attribute Key conforming to the - // "vcs.ref.base.revision" semantic conventions. It represents the revision, - // literally [revised version], The revision most often refers to a commit - // object in Git, or a revision number in SVN. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "9d59409acf479dfa0df1aa568182e43e43df8bbe28d60fcf2bc52e30068802cc", - // "main", "123", "HEAD" - // Note: `base` refers to the starting point of a change. For example, `main` - // would be the base reference of type branch if you've created a new - // reference of type branch from it and created new commits. The - // revision can be a full [hash value (see - // glossary)], - // of the recorded change to a ref within a repository pointing to a - // commit [commit] object. It does - // not necessarily have to be a hash; it can simply define a [revision - // number] - // which is an integer that is monotonically increasing. In cases where - // it is identical to the `ref.base.name`, it SHOULD still be included. - // It is up to the implementer to decide which value to set as the - // revision based on the VCS system and situational context. - // - // [revised version]: https://www.merriam-webster.com/dictionary/revision - // [hash value (see - // glossary)]: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf - // [commit]: https://git-scm.com/docs/git-commit - // [revision - // number]: https://svnbook.red-bean.com/en/1.7/svn.tour.revs.specifiers.html - VCSRefBaseRevisionKey = attribute.Key("vcs.ref.base.revision") - - // VCSRefBaseTypeKey is the attribute Key conforming to the "vcs.ref.base.type" - // semantic conventions. It represents the type of the [reference] in the - // repository. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "branch", "tag" - // Note: `base` refers to the starting point of a change. For example, `main` - // would be the base reference of type branch if you've created a new - // reference of type branch from it and created new commits. - // - // [reference]: https://git-scm.com/docs/gitglossary#def_ref - VCSRefBaseTypeKey = attribute.Key("vcs.ref.base.type") - - // VCSRefHeadNameKey is the attribute Key conforming to the "vcs.ref.head.name" - // semantic conventions. It represents the name of the [reference] such as - // **branch** or **tag** in the repository. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "my-feature-branch", "tag-1-test" - // Note: `head` refers to where you are right now; the current reference at a - // given time. - // - // [reference]: https://git-scm.com/docs/gitglossary#def_ref - VCSRefHeadNameKey = attribute.Key("vcs.ref.head.name") - - // VCSRefHeadRevisionKey is the attribute Key conforming to the - // "vcs.ref.head.revision" semantic conventions. It represents the revision, - // literally [revised version], The revision most often refers to a commit - // object in Git, or a revision number in SVN. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "9d59409acf479dfa0df1aa568182e43e43df8bbe28d60fcf2bc52e30068802cc", - // "main", "123", "HEAD" - // Note: `head` refers to where you are right now; the current reference at a - // given time.The revision can be a full [hash value (see - // glossary)], - // of the recorded change to a ref within a repository pointing to a - // commit [commit] object. It does - // not necessarily have to be a hash; it can simply define a [revision - // number] - // which is an integer that is monotonically increasing. In cases where - // it is identical to the `ref.head.name`, it SHOULD still be included. - // It is up to the implementer to decide which value to set as the - // revision based on the VCS system and situational context. - // - // [revised version]: https://www.merriam-webster.com/dictionary/revision - // [hash value (see - // glossary)]: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf - // [commit]: https://git-scm.com/docs/git-commit - // [revision - // number]: https://svnbook.red-bean.com/en/1.7/svn.tour.revs.specifiers.html - VCSRefHeadRevisionKey = attribute.Key("vcs.ref.head.revision") - - // VCSRefHeadTypeKey is the attribute Key conforming to the "vcs.ref.head.type" - // semantic conventions. It represents the type of the [reference] in the - // repository. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "branch", "tag" - // Note: `head` refers to where you are right now; the current reference at a - // given time. - // - // [reference]: https://git-scm.com/docs/gitglossary#def_ref - VCSRefHeadTypeKey = attribute.Key("vcs.ref.head.type") - - // VCSRefTypeKey is the attribute Key conforming to the "vcs.ref.type" semantic - // conventions. It represents the type of the [reference] in the repository. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "branch", "tag" - // - // [reference]: https://git-scm.com/docs/gitglossary#def_ref - VCSRefTypeKey = attribute.Key("vcs.ref.type") - - // VCSRepositoryNameKey is the attribute Key conforming to the - // "vcs.repository.name" semantic conventions. It represents the human readable - // name of the repository. It SHOULD NOT include any additional identifier like - // Group/SubGroup in GitLab or organization in GitHub. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "semantic-conventions", "my-cool-repo" - // Note: Due to it only being the name, it can clash with forks of the same - // repository if collecting telemetry across multiple orgs or groups in - // the same backends. - VCSRepositoryNameKey = attribute.Key("vcs.repository.name") - - // VCSRepositoryURLFullKey is the attribute Key conforming to the - // "vcs.repository.url.full" semantic conventions. It represents the - // [canonical URL] of the repository providing the complete HTTP(S) address in - // order to locate and identify the repository through a browser. - // - // Type: string - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: - // "https://github.com/opentelemetry/open-telemetry-collector-contrib", - // "https://gitlab.com/my-org/my-project/my-projects-project/repo" - // Note: In Git Version Control Systems, the canonical URL SHOULD NOT include - // the `.git` extension. - // - // [canonical URL]: https://support.google.com/webmasters/answer/10347851?hl=en#:~:text=A%20canonical%20URL%20is%20the,Google%20chooses%20one%20as%20canonical. - VCSRepositoryURLFullKey = attribute.Key("vcs.repository.url.full") - - // VCSRevisionDeltaDirectionKey is the attribute Key conforming to the - // "vcs.revision_delta.direction" semantic conventions. It represents the type - // of revision comparison. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: Development - // - // Examples: "ahead", "behind" - VCSRevisionDeltaDirectionKey = attribute.Key("vcs.revision_delta.direction") -) - -// VCSChangeID returns an attribute KeyValue conforming to the "vcs.change.id" -// semantic conventions. It represents the ID of the change (pull request/merge -// request/changelist) if applicable. This is usually a unique (within -// repository) identifier generated by the VCS system. -func VCSChangeID(val string) attribute.KeyValue { - return VCSChangeIDKey.String(val) -} - -// VCSChangeTitle returns an attribute KeyValue conforming to the -// "vcs.change.title" semantic conventions. It represents the human readable -// title of the change (pull request/merge request/changelist). This title is -// often a brief summary of the change and may get merged in to a ref as the -// commit summary. -func VCSChangeTitle(val string) attribute.KeyValue { - return VCSChangeTitleKey.String(val) -} - -// VCSRefBaseName returns an attribute KeyValue conforming to the -// "vcs.ref.base.name" semantic conventions. It represents the name of the -// [reference] such as **branch** or **tag** in the repository. -// -// [reference]: https://git-scm.com/docs/gitglossary#def_ref -func VCSRefBaseName(val string) attribute.KeyValue { - return VCSRefBaseNameKey.String(val) -} - -// VCSRefBaseRevision returns an attribute KeyValue conforming to the -// "vcs.ref.base.revision" semantic conventions. It represents the revision, -// literally [revised version], The revision most often refers to a commit object -// in Git, or a revision number in SVN. -// -// [revised version]: https://www.merriam-webster.com/dictionary/revision -func VCSRefBaseRevision(val string) attribute.KeyValue { - return VCSRefBaseRevisionKey.String(val) -} - -// VCSRefHeadName returns an attribute KeyValue conforming to the -// "vcs.ref.head.name" semantic conventions. It represents the name of the -// [reference] such as **branch** or **tag** in the repository. -// -// [reference]: https://git-scm.com/docs/gitglossary#def_ref -func VCSRefHeadName(val string) attribute.KeyValue { - return VCSRefHeadNameKey.String(val) -} - -// VCSRefHeadRevision returns an attribute KeyValue conforming to the -// "vcs.ref.head.revision" semantic conventions. It represents the revision, -// literally [revised version], The revision most often refers to a commit object -// in Git, or a revision number in SVN. -// -// [revised version]: https://www.merriam-webster.com/dictionary/revision -func VCSRefHeadRevision(val string) attribute.KeyValue { - return VCSRefHeadRevisionKey.String(val) -} - -// VCSRepositoryName returns an attribute KeyValue conforming to the -// "vcs.repository.name" semantic conventions. It represents the human readable -// name of the repository. It SHOULD NOT include any additional identifier like -// Group/SubGroup in GitLab or organization in GitHub. -func VCSRepositoryName(val string) attribute.KeyValue { - return VCSRepositoryNameKey.String(val) -} - -// VCSRepositoryURLFull returns an attribute KeyValue conforming to the -// "vcs.repository.url.full" semantic conventions. It represents the -// [canonical URL] of the repository providing the complete HTTP(S) address in -// order to locate and identify the repository through a browser. -// -// [canonical URL]: https://support.google.com/webmasters/answer/10347851?hl=en#:~:text=A%20canonical%20URL%20is%20the,Google%20chooses%20one%20as%20canonical. -func VCSRepositoryURLFull(val string) attribute.KeyValue { - return VCSRepositoryURLFullKey.String(val) -} - -// Enum values for vcs.change.state -var ( - // Open means the change is currently active and under review. It hasn't been - // merged into the target branch yet, and it's still possible to make changes or - // add comments. - // Stability: development - VCSChangeStateOpen = VCSChangeStateKey.String("open") - // WIP (work-in-progress, draft) means the change is still in progress and not - // yet ready for a full review. It might still undergo significant changes. - // Stability: development - VCSChangeStateWip = VCSChangeStateKey.String("wip") - // Closed means the merge request has been closed without merging. This can - // happen for various reasons, such as the changes being deemed unnecessary, the - // issue being resolved in another way, or the author deciding to withdraw the - // request. - // Stability: development - VCSChangeStateClosed = VCSChangeStateKey.String("closed") - // Merged indicates that the change has been successfully integrated into the - // target codebase. - // Stability: development - VCSChangeStateMerged = VCSChangeStateKey.String("merged") -) - -// Enum values for vcs.line_change.type -var ( - // How many lines were added. - // Stability: development - VCSLineChangeTypeAdded = VCSLineChangeTypeKey.String("added") - // How many lines were removed. - // Stability: development - VCSLineChangeTypeRemoved = VCSLineChangeTypeKey.String("removed") -) - -// Enum values for vcs.ref.base.type -var ( - // [branch] - // Stability: development - // - // [branch]: https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefbranchabranch - VCSRefBaseTypeBranch = VCSRefBaseTypeKey.String("branch") - // [tag] - // Stability: development - // - // [tag]: https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddeftagatag - VCSRefBaseTypeTag = VCSRefBaseTypeKey.String("tag") -) - -// Enum values for vcs.ref.head.type -var ( - // [branch] - // Stability: development - // - // [branch]: https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefbranchabranch - VCSRefHeadTypeBranch = VCSRefHeadTypeKey.String("branch") - // [tag] - // Stability: development - // - // [tag]: https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddeftagatag - VCSRefHeadTypeTag = VCSRefHeadTypeKey.String("tag") -) - -// Enum values for vcs.ref.type -var ( - // [branch] - // Stability: development - // - // [branch]: https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefbranchabranch - VCSRefTypeBranch = VCSRefTypeKey.String("branch") - // [tag] - // Stability: development - // - // [tag]: https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddeftagatag - VCSRefTypeTag = VCSRefTypeKey.String("tag") -) - -// Enum values for vcs.revision_delta.direction -var ( - // How many revisions the change is behind the target ref. - // Stability: development - VCSRevisionDeltaDirectionBehind = VCSRevisionDeltaDirectionKey.String("behind") - // How many revisions the change is ahead of the target ref. - // Stability: development - VCSRevisionDeltaDirectionAhead = VCSRevisionDeltaDirectionKey.String("ahead") -) - -// Namespace: webengine -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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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: Recommended - // Stability: Development - // - // 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) -} \ No newline at end of file diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.30.0/doc.go b/vendor/go.opentelemetry.io/otel/semconv/v1.30.0/doc.go deleted file mode 100644 index 787f5b0f4d..0000000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.30.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.30.0 -// version of the OpenTelemetry semantic conventions. -package semconv // import "go.opentelemetry.io/otel/semconv/v1.30.0" diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.30.0/exception.go b/vendor/go.opentelemetry.io/otel/semconv/v1.30.0/exception.go deleted file mode 100644 index 4332a795f3..0000000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.30.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.30.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.30.0/metric.go b/vendor/go.opentelemetry.io/otel/semconv/v1.30.0/metric.go deleted file mode 100644 index fe6beb91dd..0000000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.30.0/metric.go +++ /dev/null @@ -1,1750 +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.30.0" - -const ( - // AzureCosmosDBClientActiveInstanceCount is the metric conforming to the - // "azure.cosmosdb.client.active_instance.count" semantic conventions. It - // represents the number of active client instances. - // Instrument: updowncounter - // Unit: {instance} - // Stability: development - AzureCosmosDBClientActiveInstanceCountName = "azure.cosmosdb.client.active_instance.count" - AzureCosmosDBClientActiveInstanceCountUnit = "{instance}" - AzureCosmosDBClientActiveInstanceCountDescription = "Number of active client instances" - // AzureCosmosDBClientOperationRequestCharge is the metric conforming to the - // "azure.cosmosdb.client.operation.request_charge" semantic conventions. It - // represents the [Request units] consumed by the operation. - // - // [Request units]: https://learn.microsoft.com/azure/cosmos-db/request-units - // Instrument: histogram - // Unit: {request_unit} - // Stability: development - AzureCosmosDBClientOperationRequestChargeName = "azure.cosmosdb.client.operation.request_charge" - AzureCosmosDBClientOperationRequestChargeUnit = "{request_unit}" - AzureCosmosDBClientOperationRequestChargeDescription = "[Request units](https://learn.microsoft.com/azure/cosmos-db/request-units) consumed by the operation" - // CICDPipelineRunActive is the metric conforming to the - // "cicd.pipeline.run.active" semantic conventions. It represents the number of - // pipeline runs currently active in the system by state. - // Instrument: updowncounter - // Unit: {run} - // Stability: development - CICDPipelineRunActiveName = "cicd.pipeline.run.active" - CICDPipelineRunActiveUnit = "{run}" - CICDPipelineRunActiveDescription = "The number of pipeline runs currently active in the system by state." - // CICDPipelineRunDuration is the metric conforming to the - // "cicd.pipeline.run.duration" semantic conventions. It represents the - // duration of a pipeline run grouped by pipeline, state and result. - // Instrument: histogram - // Unit: s - // Stability: development - CICDPipelineRunDurationName = "cicd.pipeline.run.duration" - CICDPipelineRunDurationUnit = "s" - CICDPipelineRunDurationDescription = "Duration of a pipeline run grouped by pipeline, state and result." - // CICDPipelineRunErrors is the metric conforming to the - // "cicd.pipeline.run.errors" semantic conventions. It represents the number of - // errors encountered in pipeline runs (eg. compile, test failures). - // Instrument: counter - // Unit: {error} - // Stability: development - CICDPipelineRunErrorsName = "cicd.pipeline.run.errors" - CICDPipelineRunErrorsUnit = "{error}" - CICDPipelineRunErrorsDescription = "The number of errors encountered in pipeline runs (eg. compile, test failures)." - // CICDSystemErrors is the metric conforming to the "cicd.system.errors" - // semantic conventions. It represents the number of errors in a component of - // the CICD system (eg. controller, scheduler, agent). - // Instrument: counter - // Unit: {error} - // Stability: development - CICDSystemErrorsName = "cicd.system.errors" - CICDSystemErrorsUnit = "{error}" - CICDSystemErrorsDescription = "The number of errors in a component of the CICD system (eg. controller, scheduler, agent)." - // CICDWorkerCount is the metric conforming to the "cicd.worker.count" semantic - // conventions. It represents the number of workers on the CICD system by - // state. - // Instrument: updowncounter - // Unit: {count} - // Stability: development - CICDWorkerCountName = "cicd.worker.count" - CICDWorkerCountUnit = "{count}" - CICDWorkerCountDescription = "The number of workers on the CICD system by state." - // ContainerCPUTime is the metric conforming to the "container.cpu.time" - // semantic conventions. It represents the total CPU time consumed. - // Instrument: counter - // Unit: s - // Stability: development - ContainerCPUTimeName = "container.cpu.time" - ContainerCPUTimeUnit = "s" - ContainerCPUTimeDescription = "Total CPU time consumed" - // ContainerCPUUsage is the metric conforming to the "container.cpu.usage" - // semantic conventions. It represents the container's CPU usage, measured in - // cpus. Range from 0 to the number of allocatable CPUs. - // Instrument: gauge - // Unit: {cpu} - // Stability: development - ContainerCPUUsageName = "container.cpu.usage" - ContainerCPUUsageUnit = "{cpu}" - ContainerCPUUsageDescription = "Container's CPU usage, measured in cpus. Range from 0 to the number of allocatable CPUs" - // ContainerDiskIo is the metric conforming to the "container.disk.io" semantic - // conventions. It represents the disk bytes for the container. - // Instrument: counter - // Unit: By - // Stability: development - ContainerDiskIoName = "container.disk.io" - ContainerDiskIoUnit = "By" - ContainerDiskIoDescription = "Disk bytes for the container." - // ContainerMemoryUsage is the metric conforming to the - // "container.memory.usage" semantic conventions. It represents the memory - // usage of the container. - // Instrument: counter - // Unit: By - // Stability: development - ContainerMemoryUsageName = "container.memory.usage" - ContainerMemoryUsageUnit = "By" - ContainerMemoryUsageDescription = "Memory usage of the container." - // ContainerNetworkIo is the metric conforming to the "container.network.io" - // semantic conventions. It represents the network bytes for the container. - // Instrument: counter - // Unit: By - // Stability: development - ContainerNetworkIoName = "container.network.io" - ContainerNetworkIoUnit = "By" - ContainerNetworkIoDescription = "Network bytes for the container." - // ContainerUptime is the metric conforming to the "container.uptime" semantic - // conventions. It represents the time the container has been running. - // Instrument: gauge - // Unit: s - // Stability: development - ContainerUptimeName = "container.uptime" - ContainerUptimeUnit = "s" - ContainerUptimeDescription = "The time the container has been running" - // DBClientConnectionCount is the metric conforming to the - // "db.client.connection.count" semantic conventions. It represents the number - // of connections that are currently in state described by the `state` - // attribute. - // Instrument: updowncounter - // Unit: {connection} - // Stability: development - DBClientConnectionCountName = "db.client.connection.count" - DBClientConnectionCountUnit = "{connection}" - DBClientConnectionCountDescription = "The number of connections that are currently in state described by the `state` attribute" - // DBClientConnectionCreateTime is the metric conforming to the - // "db.client.connection.create_time" semantic conventions. It represents the - // time it took to create a new connection. - // Instrument: histogram - // Unit: s - // Stability: development - DBClientConnectionCreateTimeName = "db.client.connection.create_time" - DBClientConnectionCreateTimeUnit = "s" - DBClientConnectionCreateTimeDescription = "The time it took to create a new connection" - // DBClientConnectionIdleMax is the metric conforming to the - // "db.client.connection.idle.max" semantic conventions. It represents the - // maximum number of idle open connections allowed. - // Instrument: updowncounter - // Unit: {connection} - // Stability: development - DBClientConnectionIdleMaxName = "db.client.connection.idle.max" - DBClientConnectionIdleMaxUnit = "{connection}" - DBClientConnectionIdleMaxDescription = "The maximum number of idle open connections allowed" - // DBClientConnectionIdleMin is the metric conforming to the - // "db.client.connection.idle.min" semantic conventions. It represents the - // minimum number of idle open connections allowed. - // Instrument: updowncounter - // Unit: {connection} - // Stability: development - DBClientConnectionIdleMinName = "db.client.connection.idle.min" - DBClientConnectionIdleMinUnit = "{connection}" - DBClientConnectionIdleMinDescription = "The minimum number of idle open connections allowed" - // DBClientConnectionMax is the metric conforming to the - // "db.client.connection.max" semantic conventions. It represents the maximum - // number of open connections allowed. - // Instrument: updowncounter - // Unit: {connection} - // Stability: development - DBClientConnectionMaxName = "db.client.connection.max" - DBClientConnectionMaxUnit = "{connection}" - DBClientConnectionMaxDescription = "The maximum number of open connections allowed" - // DBClientConnectionPendingRequests is the metric conforming to the - // "db.client.connection.pending_requests" semantic conventions. It represents - // the number of current pending requests for an open connection. - // Instrument: updowncounter - // Unit: {request} - // Stability: development - DBClientConnectionPendingRequestsName = "db.client.connection.pending_requests" - DBClientConnectionPendingRequestsUnit = "{request}" - DBClientConnectionPendingRequestsDescription = "The number of current pending requests for an open connection" - // DBClientConnectionTimeouts is the metric conforming to the - // "db.client.connection.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: development - DBClientConnectionTimeoutsName = "db.client.connection.timeouts" - DBClientConnectionTimeoutsUnit = "{timeout}" - DBClientConnectionTimeoutsDescription = "The number of connection timeouts that have occurred trying to obtain a connection from the pool" - // DBClientConnectionUseTime is the metric conforming to the - // "db.client.connection.use_time" semantic conventions. It represents the time - // between borrowing a connection and returning it to the pool. - // Instrument: histogram - // Unit: s - // Stability: development - DBClientConnectionUseTimeName = "db.client.connection.use_time" - DBClientConnectionUseTimeUnit = "s" - DBClientConnectionUseTimeDescription = "The time between borrowing a connection and returning it to the pool" - // DBClientConnectionWaitTime is the metric conforming to the - // "db.client.connection.wait_time" semantic conventions. It represents the - // time it took to obtain an open connection from the pool. - // Instrument: histogram - // Unit: s - // Stability: development - DBClientConnectionWaitTimeName = "db.client.connection.wait_time" - DBClientConnectionWaitTimeUnit = "s" - DBClientConnectionWaitTimeDescription = "The time it took to obtain an open connection from the pool" - // DBClientConnectionsCreateTime is the metric conforming to the - // "db.client.connections.create_time" semantic conventions. It represents the - // deprecated, use `db.client.connection.create_time` instead. Note: the unit - // also changed from `ms` to `s`. - // Instrument: histogram - // Unit: ms - // Stability: development - // Deprecated: Replaced by `db.client.connection.create_time`. Note: the unit also changed from `ms` to `s`. - DBClientConnectionsCreateTimeName = "db.client.connections.create_time" - DBClientConnectionsCreateTimeUnit = "ms" - DBClientConnectionsCreateTimeDescription = "Deprecated, use `db.client.connection.create_time` instead. Note: the unit also changed from `ms` to `s`." - // DBClientConnectionsIdleMax is the metric conforming to the - // "db.client.connections.idle.max" semantic conventions. It represents the - // deprecated, use `db.client.connection.idle.max` instead. - // Instrument: updowncounter - // Unit: {connection} - // Stability: development - // Deprecated: Replaced by `db.client.connection.idle.max`. - DBClientConnectionsIdleMaxName = "db.client.connections.idle.max" - DBClientConnectionsIdleMaxUnit = "{connection}" - DBClientConnectionsIdleMaxDescription = "Deprecated, use `db.client.connection.idle.max` instead." - // DBClientConnectionsIdleMin is the metric conforming to the - // "db.client.connections.idle.min" semantic conventions. It represents the - // deprecated, use `db.client.connection.idle.min` instead. - // Instrument: updowncounter - // Unit: {connection} - // Stability: development - // Deprecated: Replaced by `db.client.connection.idle.min`. - DBClientConnectionsIdleMinName = "db.client.connections.idle.min" - DBClientConnectionsIdleMinUnit = "{connection}" - DBClientConnectionsIdleMinDescription = "Deprecated, use `db.client.connection.idle.min` instead." - // DBClientConnectionsMax is the metric conforming to the - // "db.client.connections.max" semantic conventions. It represents the - // deprecated, use `db.client.connection.max` instead. - // Instrument: updowncounter - // Unit: {connection} - // Stability: development - // Deprecated: Replaced by `db.client.connection.max`. - DBClientConnectionsMaxName = "db.client.connections.max" - DBClientConnectionsMaxUnit = "{connection}" - DBClientConnectionsMaxDescription = "Deprecated, use `db.client.connection.max` instead." - // DBClientConnectionsPendingRequests is the metric conforming to the - // "db.client.connections.pending_requests" semantic conventions. It represents - // the deprecated, use `db.client.connection.pending_requests` instead. - // Instrument: updowncounter - // Unit: {request} - // Stability: development - // Deprecated: Replaced by `db.client.connection.pending_requests`. - DBClientConnectionsPendingRequestsName = "db.client.connections.pending_requests" - DBClientConnectionsPendingRequestsUnit = "{request}" - DBClientConnectionsPendingRequestsDescription = "Deprecated, use `db.client.connection.pending_requests` instead." - // DBClientConnectionsTimeouts is the metric conforming to the - // "db.client.connections.timeouts" semantic conventions. It represents the - // deprecated, use `db.client.connection.timeouts` instead. - // Instrument: counter - // Unit: {timeout} - // Stability: development - // Deprecated: Replaced by `db.client.connection.timeouts`. - DBClientConnectionsTimeoutsName = "db.client.connections.timeouts" - DBClientConnectionsTimeoutsUnit = "{timeout}" - DBClientConnectionsTimeoutsDescription = "Deprecated, use `db.client.connection.timeouts` instead." - // DBClientConnectionsUsage is the metric conforming to the - // "db.client.connections.usage" semantic conventions. It represents the - // deprecated, use `db.client.connection.count` instead. - // Instrument: updowncounter - // Unit: {connection} - // Stability: development - // Deprecated: Replaced by `db.client.connection.count`. - DBClientConnectionsUsageName = "db.client.connections.usage" - DBClientConnectionsUsageUnit = "{connection}" - DBClientConnectionsUsageDescription = "Deprecated, use `db.client.connection.count` instead." - // DBClientConnectionsUseTime is the metric conforming to the - // "db.client.connections.use_time" semantic conventions. It represents the - // deprecated, use `db.client.connection.use_time` instead. Note: the unit also - // changed from `ms` to `s`. - // Instrument: histogram - // Unit: ms - // Stability: development - // Deprecated: Replaced by `db.client.connection.use_time`. Note: the unit also changed from `ms` to `s`. - DBClientConnectionsUseTimeName = "db.client.connections.use_time" - DBClientConnectionsUseTimeUnit = "ms" - DBClientConnectionsUseTimeDescription = "Deprecated, use `db.client.connection.use_time` instead. Note: the unit also changed from `ms` to `s`." - // DBClientConnectionsWaitTime is the metric conforming to the - // "db.client.connections.wait_time" semantic conventions. It represents the - // deprecated, use `db.client.connection.wait_time` instead. Note: the unit - // also changed from `ms` to `s`. - // Instrument: histogram - // Unit: ms - // Stability: development - // Deprecated: Replaced by `db.client.connection.wait_time`. Note: the unit also changed from `ms` to `s`. - DBClientConnectionsWaitTimeName = "db.client.connections.wait_time" - DBClientConnectionsWaitTimeUnit = "ms" - DBClientConnectionsWaitTimeDescription = "Deprecated, use `db.client.connection.wait_time` instead. Note: the unit also changed from `ms` to `s`." - // DBClientCosmosDBActiveInstanceCount is the metric conforming to the - // "db.client.cosmosdb.active_instance.count" semantic conventions. It - // represents the deprecated, use `azure.cosmosdb.client.active_instance.count` - // instead. - // Instrument: updowncounter - // Unit: {instance} - // Stability: development - // Deprecated: Replaced by `azure.cosmosdb.client.active_instance.count`. - DBClientCosmosDBActiveInstanceCountName = "db.client.cosmosdb.active_instance.count" - DBClientCosmosDBActiveInstanceCountUnit = "{instance}" - DBClientCosmosDBActiveInstanceCountDescription = "Deprecated, use `azure.cosmosdb.client.active_instance.count` instead." - // DBClientCosmosDBOperationRequestCharge is the metric conforming to the - // "db.client.cosmosdb.operation.request_charge" semantic conventions. It - // represents the deprecated, use - // `azure.cosmosdb.client.operation.request_charge` instead. - // Instrument: histogram - // Unit: {request_unit} - // Stability: development - // Deprecated: Replaced by `azure.cosmosdb.client.operation.request_charge`. - DBClientCosmosDBOperationRequestChargeName = "db.client.cosmosdb.operation.request_charge" - DBClientCosmosDBOperationRequestChargeUnit = "{request_unit}" - DBClientCosmosDBOperationRequestChargeDescription = "Deprecated, use `azure.cosmosdb.client.operation.request_charge` instead." - // DBClientOperationDuration is the metric conforming to the - // "db.client.operation.duration" semantic conventions. It represents the - // duration of database client operations. - // Instrument: histogram - // Unit: s - // Stability: release_candidate - DBClientOperationDurationName = "db.client.operation.duration" - DBClientOperationDurationUnit = "s" - DBClientOperationDurationDescription = "Duration of database client operations." - // DBClientResponseReturnedRows is the metric conforming to the - // "db.client.response.returned_rows" semantic conventions. It represents the - // actual number of records returned by the database operation. - // Instrument: histogram - // Unit: {row} - // Stability: development - DBClientResponseReturnedRowsName = "db.client.response.returned_rows" - DBClientResponseReturnedRowsUnit = "{row}" - DBClientResponseReturnedRowsDescription = "The actual number of records returned by the database operation." - // 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: development - DNSLookupDurationName = "dns.lookup.duration" - DNSLookupDurationUnit = "s" - DNSLookupDurationDescription = "Measures the time taken to perform a DNS lookup." - // FaaSColdstarts is the metric conforming to the "faas.coldstarts" semantic - // conventions. It represents the number of invocation cold starts. - // Instrument: counter - // Unit: {coldstart} - // Stability: development - FaaSColdstartsName = "faas.coldstarts" - FaaSColdstartsUnit = "{coldstart}" - FaaSColdstartsDescription = "Number of invocation cold starts" - // 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: development - FaaSCPUUsageName = "faas.cpu_usage" - FaaSCPUUsageUnit = "s" - FaaSCPUUsageDescription = "Distribution of CPU usage per invocation" - // FaaSErrors is the metric conforming to the "faas.errors" semantic - // conventions. It represents the number of invocation errors. - // Instrument: counter - // Unit: {error} - // Stability: development - FaaSErrorsName = "faas.errors" - FaaSErrorsUnit = "{error}" - FaaSErrorsDescription = "Number of invocation errors" - // 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: development - FaaSInitDurationName = "faas.init_duration" - FaaSInitDurationUnit = "s" - FaaSInitDurationDescription = "Measures the duration of the function's initialization, such as a cold start" - // FaaSInvocations is the metric conforming to the "faas.invocations" semantic - // conventions. It represents the number of successful invocations. - // Instrument: counter - // Unit: {invocation} - // Stability: development - FaaSInvocationsName = "faas.invocations" - FaaSInvocationsUnit = "{invocation}" - FaaSInvocationsDescription = "Number of successful invocations" - // 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: development - FaaSInvokeDurationName = "faas.invoke_duration" - FaaSInvokeDurationUnit = "s" - FaaSInvokeDurationDescription = "Measures the duration of the function's logic execution" - // 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: development - FaaSMemUsageName = "faas.mem_usage" - FaaSMemUsageUnit = "By" - FaaSMemUsageDescription = "Distribution of max memory 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: development - FaaSNetIoName = "faas.net_io" - FaaSNetIoUnit = "By" - FaaSNetIoDescription = "Distribution of net I/O usage per invocation" - // FaaSTimeouts is the metric conforming to the "faas.timeouts" semantic - // conventions. It represents the number of invocation timeouts. - // Instrument: counter - // Unit: {timeout} - // Stability: development - FaaSTimeoutsName = "faas.timeouts" - FaaSTimeoutsUnit = "{timeout}" - FaaSTimeoutsDescription = "Number of invocation timeouts" - // GenAIClientOperationDuration is the metric conforming to the - // "gen_ai.client.operation.duration" semantic conventions. It represents the - // genAI operation duration. - // Instrument: histogram - // Unit: s - // Stability: development - GenAIClientOperationDurationName = "gen_ai.client.operation.duration" - GenAIClientOperationDurationUnit = "s" - GenAIClientOperationDurationDescription = "GenAI operation duration" - // GenAIClientTokenUsage is the metric conforming to the - // "gen_ai.client.token.usage" semantic conventions. It represents the measures - // number of input and output tokens used. - // Instrument: histogram - // Unit: {token} - // Stability: development - GenAIClientTokenUsageName = "gen_ai.client.token.usage" - GenAIClientTokenUsageUnit = "{token}" - GenAIClientTokenUsageDescription = "Measures number of input and output tokens used" - // GenAIServerRequestDuration is the metric conforming to the - // "gen_ai.server.request.duration" semantic conventions. It represents the - // generative AI server request duration such as time-to-last byte or last - // output token. - // Instrument: histogram - // Unit: s - // Stability: development - GenAIServerRequestDurationName = "gen_ai.server.request.duration" - GenAIServerRequestDurationUnit = "s" - GenAIServerRequestDurationDescription = "Generative AI server request duration such as time-to-last byte or last output token" - // GenAIServerTimePerOutputToken is the metric conforming to the - // "gen_ai.server.time_per_output_token" semantic conventions. It represents - // the time per output token generated after the first token for successful - // responses. - // Instrument: histogram - // Unit: s - // Stability: development - GenAIServerTimePerOutputTokenName = "gen_ai.server.time_per_output_token" - GenAIServerTimePerOutputTokenUnit = "s" - GenAIServerTimePerOutputTokenDescription = "Time per output token generated after the first token for successful responses" - // GenAIServerTimeToFirstToken is the metric conforming to the - // "gen_ai.server.time_to_first_token" semantic conventions. It represents the - // time to generate first token for successful responses. - // Instrument: histogram - // Unit: s - // Stability: development - GenAIServerTimeToFirstTokenName = "gen_ai.server.time_to_first_token" - GenAIServerTimeToFirstTokenUnit = "s" - GenAIServerTimeToFirstTokenDescription = "Time to generate first token for successful responses" - // GoConfigGogc is the metric conforming to the "go.config.gogc" semantic - // conventions. It represents the heap size target percentage configured by the - // user, otherwise 100. - // Instrument: updowncounter - // Unit: % - // Stability: development - GoConfigGogcName = "go.config.gogc" - GoConfigGogcUnit = "%" - GoConfigGogcDescription = "Heap size target percentage configured by the user, otherwise 100." - // GoGoroutineCount is the metric conforming to the "go.goroutine.count" - // semantic conventions. It represents the count of live goroutines. - // Instrument: updowncounter - // Unit: {goroutine} - // Stability: development - GoGoroutineCountName = "go.goroutine.count" - GoGoroutineCountUnit = "{goroutine}" - GoGoroutineCountDescription = "Count of live goroutines." - // GoMemoryAllocated is the metric conforming to the "go.memory.allocated" - // semantic conventions. It represents the memory allocated to the heap by the - // application. - // Instrument: counter - // Unit: By - // Stability: development - GoMemoryAllocatedName = "go.memory.allocated" - GoMemoryAllocatedUnit = "By" - GoMemoryAllocatedDescription = "Memory allocated to the heap by the application." - // GoMemoryAllocations is the metric conforming to the "go.memory.allocations" - // semantic conventions. It represents the count of allocations to the heap by - // the application. - // Instrument: counter - // Unit: {allocation} - // Stability: development - GoMemoryAllocationsName = "go.memory.allocations" - GoMemoryAllocationsUnit = "{allocation}" - GoMemoryAllocationsDescription = "Count of allocations to the heap by the application." - // GoMemoryGCGoal is the metric conforming to the "go.memory.gc.goal" semantic - // conventions. It represents the heap size target for the end of the GC cycle. - // Instrument: updowncounter - // Unit: By - // Stability: development - GoMemoryGCGoalName = "go.memory.gc.goal" - GoMemoryGCGoalUnit = "By" - GoMemoryGCGoalDescription = "Heap size target for the end of the GC cycle." - // GoMemoryLimit is the metric conforming to the "go.memory.limit" semantic - // conventions. It represents the go runtime memory limit configured by the - // user, if a limit exists. - // Instrument: updowncounter - // Unit: By - // Stability: development - GoMemoryLimitName = "go.memory.limit" - GoMemoryLimitUnit = "By" - GoMemoryLimitDescription = "Go runtime memory limit configured by the user, if a limit exists." - // GoMemoryUsed is the metric conforming to the "go.memory.used" semantic - // conventions. It represents the memory used by the Go runtime. - // Instrument: updowncounter - // Unit: By - // Stability: development - GoMemoryUsedName = "go.memory.used" - GoMemoryUsedUnit = "By" - GoMemoryUsedDescription = "Memory used by the Go runtime." - // GoProcessorLimit is the metric conforming to the "go.processor.limit" - // semantic conventions. It represents the number of OS threads that can - // execute user-level Go code simultaneously. - // Instrument: updowncounter - // Unit: {thread} - // Stability: development - GoProcessorLimitName = "go.processor.limit" - GoProcessorLimitUnit = "{thread}" - GoProcessorLimitDescription = "The number of OS threads that can execute user-level Go code simultaneously." - // GoScheduleDuration is the metric conforming to the "go.schedule.duration" - // semantic conventions. It represents the time goroutines have spent in the - // scheduler in a runnable state before actually running. - // Instrument: histogram - // Unit: s - // Stability: development - GoScheduleDurationName = "go.schedule.duration" - GoScheduleDurationUnit = "s" - GoScheduleDurationDescription = "The time goroutines have spent in the scheduler in a runnable state before actually running." - // 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: development - HTTPClientActiveRequestsName = "http.client.active_requests" - HTTPClientActiveRequestsUnit = "{request}" - HTTPClientActiveRequestsDescription = "Number of active HTTP requests." - // 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: development - HTTPClientConnectionDurationName = "http.client.connection.duration" - HTTPClientConnectionDurationUnit = "s" - HTTPClientConnectionDurationDescription = "The duration of the successfully established outbound HTTP connections." - // 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: development - HTTPClientOpenConnectionsName = "http.client.open_connections" - HTTPClientOpenConnectionsUnit = "{connection}" - HTTPClientOpenConnectionsDescription = "Number of outbound HTTP connections that are currently active or idle on the client." - // 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: development - HTTPClientRequestBodySizeName = "http.client.request.body.size" - HTTPClientRequestBodySizeUnit = "By" - HTTPClientRequestBodySizeDescription = "Size of HTTP client request 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." - // 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: development - HTTPClientResponseBodySizeName = "http.client.response.body.size" - HTTPClientResponseBodySizeUnit = "By" - HTTPClientResponseBodySizeDescription = "Size of HTTP client response bodies." - // 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: development - 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: development - HTTPServerRequestBodySizeName = "http.server.request.body.size" - HTTPServerRequestBodySizeUnit = "By" - HTTPServerRequestBodySizeDescription = "Size of HTTP server request bodies." - // 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." - // 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: development - HTTPServerResponseBodySizeName = "http.server.response.body.size" - HTTPServerResponseBodySizeUnit = "By" - HTTPServerResponseBodySizeDescription = "Size of HTTP server response bodies." - // HwEnergy is the metric conforming to the "hw.energy" semantic conventions. - // It represents the energy consumed by the component. - // Instrument: counter - // Unit: J - // Stability: development - HwEnergyName = "hw.energy" - HwEnergyUnit = "J" - HwEnergyDescription = "Energy consumed by the component" - // HwErrors is the metric conforming to the "hw.errors" semantic conventions. - // It represents the number of errors encountered by the component. - // Instrument: counter - // Unit: {error} - // Stability: development - HwErrorsName = "hw.errors" - HwErrorsUnit = "{error}" - HwErrorsDescription = "Number of errors encountered by the component" - // HwPower is the metric conforming to the "hw.power" semantic conventions. It - // represents the instantaneous power consumed by the component. - // Instrument: gauge - // Unit: W - // Stability: development - HwPowerName = "hw.power" - HwPowerUnit = "W" - HwPowerDescription = "Instantaneous power consumed by the component" - // HwStatus is the metric conforming to the "hw.status" semantic conventions. - // It represents the operational status: `1` (true) or `0` (false) for each of - // the possible states. - // Instrument: updowncounter - // Unit: 1 - // Stability: development - HwStatusName = "hw.status" - HwStatusUnit = "1" - HwStatusDescription = "Operational status: `1` (true) or `0` (false) for each of the possible states" - // K8SCronJobActiveJobs is the metric conforming to the - // "k8s.cronjob.active_jobs" semantic conventions. It represents the number of - // actively running jobs for a cronjob. - // Instrument: updowncounter - // Unit: {job} - // Stability: development - K8SCronJobActiveJobsName = "k8s.cronjob.active_jobs" - K8SCronJobActiveJobsUnit = "{job}" - K8SCronJobActiveJobsDescription = "The number of actively running jobs for a cronjob" - // K8SDaemonSetCurrentScheduledNodes is the metric conforming to the - // "k8s.daemonset.current_scheduled_nodes" semantic conventions. It represents - // the number of nodes that are running at least 1 daemon pod and are supposed - // to run the daemon pod. - // Instrument: updowncounter - // Unit: {node} - // Stability: development - K8SDaemonSetCurrentScheduledNodesName = "k8s.daemonset.current_scheduled_nodes" - K8SDaemonSetCurrentScheduledNodesUnit = "{node}" - K8SDaemonSetCurrentScheduledNodesDescription = "Number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod" - // K8SDaemonSetDesiredScheduledNodes is the metric conforming to the - // "k8s.daemonset.desired_scheduled_nodes" semantic conventions. It represents - // the number of nodes that should be running the daemon pod (including nodes - // currently running the daemon pod). - // Instrument: updowncounter - // Unit: {node} - // Stability: development - K8SDaemonSetDesiredScheduledNodesName = "k8s.daemonset.desired_scheduled_nodes" - K8SDaemonSetDesiredScheduledNodesUnit = "{node}" - K8SDaemonSetDesiredScheduledNodesDescription = "Number of nodes that should be running the daemon pod (including nodes currently running the daemon pod)" - // K8SDaemonSetMisscheduledNodes is the metric conforming to the - // "k8s.daemonset.misscheduled_nodes" semantic conventions. It represents the - // number of nodes that are running the daemon pod, but are not supposed to run - // the daemon pod. - // Instrument: updowncounter - // Unit: {node} - // Stability: development - K8SDaemonSetMisscheduledNodesName = "k8s.daemonset.misscheduled_nodes" - K8SDaemonSetMisscheduledNodesUnit = "{node}" - K8SDaemonSetMisscheduledNodesDescription = "Number of nodes that are running the daemon pod, but are not supposed to run the daemon pod" - // K8SDaemonSetReadyNodes is the metric conforming to the - // "k8s.daemonset.ready_nodes" semantic conventions. It represents the number - // of nodes that should be running the daemon pod and have one or more of the - // daemon pod running and ready. - // Instrument: updowncounter - // Unit: {node} - // Stability: development - K8SDaemonSetReadyNodesName = "k8s.daemonset.ready_nodes" - K8SDaemonSetReadyNodesUnit = "{node}" - K8SDaemonSetReadyNodesDescription = "Number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready" - // K8SDeploymentAvailablePods is the metric conforming to the - // "k8s.deployment.available_pods" semantic conventions. It represents the - // total number of available replica pods (ready for at least minReadySeconds) - // targeted by this deployment. - // Instrument: updowncounter - // Unit: {pod} - // Stability: development - K8SDeploymentAvailablePodsName = "k8s.deployment.available_pods" - K8SDeploymentAvailablePodsUnit = "{pod}" - K8SDeploymentAvailablePodsDescription = "Total number of available replica pods (ready for at least minReadySeconds) targeted by this deployment" - // K8SDeploymentDesiredPods is the metric conforming to the - // "k8s.deployment.desired_pods" semantic conventions. It represents the number - // of desired replica pods in this deployment. - // Instrument: updowncounter - // Unit: {pod} - // Stability: development - K8SDeploymentDesiredPodsName = "k8s.deployment.desired_pods" - K8SDeploymentDesiredPodsUnit = "{pod}" - K8SDeploymentDesiredPodsDescription = "Number of desired replica pods in this deployment" - // K8SHpaCurrentPods is the metric conforming to the "k8s.hpa.current_pods" - // semantic conventions. It represents the current number of replica pods - // managed by this horizontal pod autoscaler, as last seen by the autoscaler. - // Instrument: updowncounter - // Unit: {pod} - // Stability: development - K8SHpaCurrentPodsName = "k8s.hpa.current_pods" - K8SHpaCurrentPodsUnit = "{pod}" - K8SHpaCurrentPodsDescription = "Current number of replica pods managed by this horizontal pod autoscaler, as last seen by the autoscaler" - // K8SHpaDesiredPods is the metric conforming to the "k8s.hpa.desired_pods" - // semantic conventions. It represents the desired number of replica pods - // managed by this horizontal pod autoscaler, as last calculated by the - // autoscaler. - // Instrument: updowncounter - // Unit: {pod} - // Stability: development - K8SHpaDesiredPodsName = "k8s.hpa.desired_pods" - K8SHpaDesiredPodsUnit = "{pod}" - K8SHpaDesiredPodsDescription = "Desired number of replica pods managed by this horizontal pod autoscaler, as last calculated by the autoscaler" - // K8SHpaMaxPods is the metric conforming to the "k8s.hpa.max_pods" semantic - // conventions. It represents the upper limit for the number of replica pods to - // which the autoscaler can scale up. - // Instrument: updowncounter - // Unit: {pod} - // Stability: development - K8SHpaMaxPodsName = "k8s.hpa.max_pods" - K8SHpaMaxPodsUnit = "{pod}" - K8SHpaMaxPodsDescription = "The upper limit for the number of replica pods to which the autoscaler can scale up" - // K8SHpaMinPods is the metric conforming to the "k8s.hpa.min_pods" semantic - // conventions. It represents the lower limit for the number of replica pods to - // which the autoscaler can scale down. - // Instrument: updowncounter - // Unit: {pod} - // Stability: development - K8SHpaMinPodsName = "k8s.hpa.min_pods" - K8SHpaMinPodsUnit = "{pod}" - K8SHpaMinPodsDescription = "The lower limit for the number of replica pods to which the autoscaler can scale down" - // K8SJobActivePods is the metric conforming to the "k8s.job.active_pods" - // semantic conventions. It represents the number of pending and actively - // running pods for a job. - // Instrument: updowncounter - // Unit: {pod} - // Stability: development - K8SJobActivePodsName = "k8s.job.active_pods" - K8SJobActivePodsUnit = "{pod}" - K8SJobActivePodsDescription = "The number of pending and actively running pods for a job" - // K8SJobDesiredSuccessfulPods is the metric conforming to the - // "k8s.job.desired_successful_pods" semantic conventions. It represents the - // desired number of successfully finished pods the job should be run with. - // Instrument: updowncounter - // Unit: {pod} - // Stability: development - K8SJobDesiredSuccessfulPodsName = "k8s.job.desired_successful_pods" - K8SJobDesiredSuccessfulPodsUnit = "{pod}" - K8SJobDesiredSuccessfulPodsDescription = "The desired number of successfully finished pods the job should be run with" - // K8SJobFailedPods is the metric conforming to the "k8s.job.failed_pods" - // semantic conventions. It represents the number of pods which reached phase - // Failed for a job. - // Instrument: updowncounter - // Unit: {pod} - // Stability: development - K8SJobFailedPodsName = "k8s.job.failed_pods" - K8SJobFailedPodsUnit = "{pod}" - K8SJobFailedPodsDescription = "The number of pods which reached phase Failed for a job" - // K8SJobMaxParallelPods is the metric conforming to the - // "k8s.job.max_parallel_pods" semantic conventions. It represents the max - // desired number of pods the job should run at any given time. - // Instrument: updowncounter - // Unit: {pod} - // Stability: development - K8SJobMaxParallelPodsName = "k8s.job.max_parallel_pods" - K8SJobMaxParallelPodsUnit = "{pod}" - K8SJobMaxParallelPodsDescription = "The max desired number of pods the job should run at any given time" - // K8SJobSuccessfulPods is the metric conforming to the - // "k8s.job.successful_pods" semantic conventions. It represents the number of - // pods which reached phase Succeeded for a job. - // Instrument: updowncounter - // Unit: {pod} - // Stability: development - K8SJobSuccessfulPodsName = "k8s.job.successful_pods" - K8SJobSuccessfulPodsUnit = "{pod}" - K8SJobSuccessfulPodsDescription = "The number of pods which reached phase Succeeded for a job" - // K8SNamespacePhase is the metric conforming to the "k8s.namespace.phase" - // semantic conventions. It represents the describes number of K8s namespaces - // that are currently in a given phase. - // Instrument: updowncounter - // Unit: {namespace} - // Stability: development - K8SNamespacePhaseName = "k8s.namespace.phase" - K8SNamespacePhaseUnit = "{namespace}" - K8SNamespacePhaseDescription = "Describes number of K8s namespaces that are currently in a given phase." - // K8SNodeCPUTime is the metric conforming to the "k8s.node.cpu.time" semantic - // conventions. It represents the total CPU time consumed. - // Instrument: counter - // Unit: s - // Stability: development - K8SNodeCPUTimeName = "k8s.node.cpu.time" - K8SNodeCPUTimeUnit = "s" - K8SNodeCPUTimeDescription = "Total CPU time consumed" - // K8SNodeCPUUsage is the metric conforming to the "k8s.node.cpu.usage" - // semantic conventions. It represents the node's CPU usage, measured in cpus. - // Range from 0 to the number of allocatable CPUs. - // Instrument: gauge - // Unit: {cpu} - // Stability: development - K8SNodeCPUUsageName = "k8s.node.cpu.usage" - K8SNodeCPUUsageUnit = "{cpu}" - K8SNodeCPUUsageDescription = "Node's CPU usage, measured in cpus. Range from 0 to the number of allocatable CPUs" - // K8SNodeMemoryUsage is the metric conforming to the "k8s.node.memory.usage" - // semantic conventions. It represents the memory usage of the Node. - // Instrument: gauge - // Unit: By - // Stability: development - K8SNodeMemoryUsageName = "k8s.node.memory.usage" - K8SNodeMemoryUsageUnit = "By" - K8SNodeMemoryUsageDescription = "Memory usage of the Node" - // K8SNodeNetworkErrors is the metric conforming to the - // "k8s.node.network.errors" semantic conventions. It represents the node - // network errors. - // Instrument: counter - // Unit: {error} - // Stability: development - K8SNodeNetworkErrorsName = "k8s.node.network.errors" - K8SNodeNetworkErrorsUnit = "{error}" - K8SNodeNetworkErrorsDescription = "Node network errors" - // K8SNodeNetworkIo is the metric conforming to the "k8s.node.network.io" - // semantic conventions. It represents the network bytes for the Node. - // Instrument: counter - // Unit: By - // Stability: development - K8SNodeNetworkIoName = "k8s.node.network.io" - K8SNodeNetworkIoUnit = "By" - K8SNodeNetworkIoDescription = "Network bytes for the Node" - // K8SNodeUptime is the metric conforming to the "k8s.node.uptime" semantic - // conventions. It represents the time the Node has been running. - // Instrument: gauge - // Unit: s - // Stability: development - K8SNodeUptimeName = "k8s.node.uptime" - K8SNodeUptimeUnit = "s" - K8SNodeUptimeDescription = "The time the Node has been running" - // K8SPodCPUTime is the metric conforming to the "k8s.pod.cpu.time" semantic - // conventions. It represents the total CPU time consumed. - // Instrument: counter - // Unit: s - // Stability: development - K8SPodCPUTimeName = "k8s.pod.cpu.time" - K8SPodCPUTimeUnit = "s" - K8SPodCPUTimeDescription = "Total CPU time consumed" - // K8SPodCPUUsage is the metric conforming to the "k8s.pod.cpu.usage" semantic - // conventions. It represents the pod's CPU usage, measured in cpus. Range from - // 0 to the number of allocatable CPUs. - // Instrument: gauge - // Unit: {cpu} - // Stability: development - K8SPodCPUUsageName = "k8s.pod.cpu.usage" - K8SPodCPUUsageUnit = "{cpu}" - K8SPodCPUUsageDescription = "Pod's CPU usage, measured in cpus. Range from 0 to the number of allocatable CPUs" - // K8SPodMemoryUsage is the metric conforming to the "k8s.pod.memory.usage" - // semantic conventions. It represents the memory usage of the Pod. - // Instrument: gauge - // Unit: By - // Stability: development - K8SPodMemoryUsageName = "k8s.pod.memory.usage" - K8SPodMemoryUsageUnit = "By" - K8SPodMemoryUsageDescription = "Memory usage of the Pod" - // K8SPodNetworkErrors is the metric conforming to the "k8s.pod.network.errors" - // semantic conventions. It represents the pod network errors. - // Instrument: counter - // Unit: {error} - // Stability: development - K8SPodNetworkErrorsName = "k8s.pod.network.errors" - K8SPodNetworkErrorsUnit = "{error}" - K8SPodNetworkErrorsDescription = "Pod network errors" - // K8SPodNetworkIo is the metric conforming to the "k8s.pod.network.io" - // semantic conventions. It represents the network bytes for the Pod. - // Instrument: counter - // Unit: By - // Stability: development - K8SPodNetworkIoName = "k8s.pod.network.io" - K8SPodNetworkIoUnit = "By" - K8SPodNetworkIoDescription = "Network bytes for the Pod" - // K8SPodUptime is the metric conforming to the "k8s.pod.uptime" semantic - // conventions. It represents the time the Pod has been running. - // Instrument: gauge - // Unit: s - // Stability: development - K8SPodUptimeName = "k8s.pod.uptime" - K8SPodUptimeUnit = "s" - K8SPodUptimeDescription = "The time the Pod has been running" - // K8SReplicaSetAvailablePods is the metric conforming to the - // "k8s.replicaset.available_pods" semantic conventions. It represents the - // total number of available replica pods (ready for at least minReadySeconds) - // targeted by this replicaset. - // Instrument: updowncounter - // Unit: {pod} - // Stability: development - K8SReplicaSetAvailablePodsName = "k8s.replicaset.available_pods" - K8SReplicaSetAvailablePodsUnit = "{pod}" - K8SReplicaSetAvailablePodsDescription = "Total number of available replica pods (ready for at least minReadySeconds) targeted by this replicaset" - // K8SReplicaSetDesiredPods is the metric conforming to the - // "k8s.replicaset.desired_pods" semantic conventions. It represents the number - // of desired replica pods in this replicaset. - // Instrument: updowncounter - // Unit: {pod} - // Stability: development - K8SReplicaSetDesiredPodsName = "k8s.replicaset.desired_pods" - K8SReplicaSetDesiredPodsUnit = "{pod}" - K8SReplicaSetDesiredPodsDescription = "Number of desired replica pods in this replicaset" - // K8SReplicationControllerAvailablePods is the metric conforming to the - // "k8s.replication_controller.available_pods" semantic conventions. It - // represents the total number of available replica pods (ready for at least - // minReadySeconds) targeted by this replication controller. - // Instrument: updowncounter - // Unit: {pod} - // Stability: development - K8SReplicationControllerAvailablePodsName = "k8s.replication_controller.available_pods" - K8SReplicationControllerAvailablePodsUnit = "{pod}" - K8SReplicationControllerAvailablePodsDescription = "Total number of available replica pods (ready for at least minReadySeconds) targeted by this replication controller" - // K8SReplicationControllerDesiredPods is the metric conforming to the - // "k8s.replication_controller.desired_pods" semantic conventions. It - // represents the number of desired replica pods in this replication - // controller. - // Instrument: updowncounter - // Unit: {pod} - // Stability: development - K8SReplicationControllerDesiredPodsName = "k8s.replication_controller.desired_pods" - K8SReplicationControllerDesiredPodsUnit = "{pod}" - K8SReplicationControllerDesiredPodsDescription = "Number of desired replica pods in this replication controller" - // K8SStatefulSetCurrentPods is the metric conforming to the - // "k8s.statefulset.current_pods" semantic conventions. It represents the - // number of replica pods created by the statefulset controller from the - // statefulset version indicated by currentRevision. - // Instrument: updowncounter - // Unit: {pod} - // Stability: development - K8SStatefulSetCurrentPodsName = "k8s.statefulset.current_pods" - K8SStatefulSetCurrentPodsUnit = "{pod}" - K8SStatefulSetCurrentPodsDescription = "The number of replica pods created by the statefulset controller from the statefulset version indicated by currentRevision" - // K8SStatefulSetDesiredPods is the metric conforming to the - // "k8s.statefulset.desired_pods" semantic conventions. It represents the - // number of desired replica pods in this statefulset. - // Instrument: updowncounter - // Unit: {pod} - // Stability: development - K8SStatefulSetDesiredPodsName = "k8s.statefulset.desired_pods" - K8SStatefulSetDesiredPodsUnit = "{pod}" - K8SStatefulSetDesiredPodsDescription = "Number of desired replica pods in this statefulset" - // K8SStatefulSetReadyPods is the metric conforming to the - // "k8s.statefulset.ready_pods" semantic conventions. It represents the number - // of replica pods created for this statefulset with a Ready Condition. - // Instrument: updowncounter - // Unit: {pod} - // Stability: development - K8SStatefulSetReadyPodsName = "k8s.statefulset.ready_pods" - K8SStatefulSetReadyPodsUnit = "{pod}" - K8SStatefulSetReadyPodsDescription = "The number of replica pods created for this statefulset with a Ready Condition" - // K8SStatefulSetUpdatedPods is the metric conforming to the - // "k8s.statefulset.updated_pods" semantic conventions. It represents the - // number of replica pods created by the statefulset controller from the - // statefulset version indicated by updateRevision. - // Instrument: updowncounter - // Unit: {pod} - // Stability: development - K8SStatefulSetUpdatedPodsName = "k8s.statefulset.updated_pods" - K8SStatefulSetUpdatedPodsUnit = "{pod}" - K8SStatefulSetUpdatedPodsDescription = "Number of replica pods created by the statefulset controller from the statefulset version indicated by updateRevision" - // 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: stable - KestrelActiveConnectionsName = "kestrel.active_connections" - KestrelActiveConnectionsUnit = "{connection}" - KestrelActiveConnectionsDescription = "Number of connections that are currently active 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: stable - KestrelActiveTLSHandshakesName = "kestrel.active_tls_handshakes" - KestrelActiveTLSHandshakesUnit = "{handshake}" - KestrelActiveTLSHandshakesDescription = "Number of TLS handshakes that are currently in progress 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: stable - KestrelConnectionDurationName = "kestrel.connection.duration" - KestrelConnectionDurationUnit = "s" - KestrelConnectionDurationDescription = "The duration of connections on 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: stable - 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: stable - 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." - // 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: stable - KestrelRejectedConnectionsName = "kestrel.rejected_connections" - KestrelRejectedConnectionsUnit = "{connection}" - KestrelRejectedConnectionsDescription = "Number of connections rejected by the server." - // 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: stable - KestrelTLSHandshakeDurationName = "kestrel.tls_handshake.duration" - KestrelTLSHandshakeDurationUnit = "s" - KestrelTLSHandshakeDurationDescription = "The duration of TLS handshakes on the server." - // 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: stable - KestrelUpgradedConnectionsName = "kestrel.upgraded_connections" - KestrelUpgradedConnectionsUnit = "{connection}" - KestrelUpgradedConnectionsDescription = "Number of connections that are currently upgraded (WebSockets). ." - // MessagingClientConsumedMessages is the metric conforming to the - // "messaging.client.consumed.messages" semantic conventions. It represents the - // number of messages that were delivered to the application. - // Instrument: counter - // Unit: {message} - // Stability: development - MessagingClientConsumedMessagesName = "messaging.client.consumed.messages" - MessagingClientConsumedMessagesUnit = "{message}" - MessagingClientConsumedMessagesDescription = "Number of messages that were delivered to the application." - // MessagingClientOperationDuration is the metric conforming to the - // "messaging.client.operation.duration" semantic conventions. It represents - // the duration of messaging operation initiated by a producer or consumer - // client. - // Instrument: histogram - // Unit: s - // Stability: development - MessagingClientOperationDurationName = "messaging.client.operation.duration" - MessagingClientOperationDurationUnit = "s" - MessagingClientOperationDurationDescription = "Duration of messaging operation initiated by a producer or consumer client." - // MessagingClientPublishedMessages is the metric conforming to the - // "messaging.client.published.messages" semantic conventions. It represents - // the deprecated. Use `messaging.client.sent.messages` instead. - // Instrument: counter - // Unit: {message} - // Stability: development - // Deprecated: Replaced by `messaging.client.sent.messages`. - MessagingClientPublishedMessagesName = "messaging.client.published.messages" - MessagingClientPublishedMessagesUnit = "{message}" - MessagingClientPublishedMessagesDescription = "Deprecated. Use `messaging.client.sent.messages` instead." - // MessagingClientSentMessages is the metric conforming to the - // "messaging.client.sent.messages" semantic conventions. It represents the - // number of messages producer attempted to send to the broker. - // Instrument: counter - // Unit: {message} - // Stability: development - MessagingClientSentMessagesName = "messaging.client.sent.messages" - MessagingClientSentMessagesUnit = "{message}" - MessagingClientSentMessagesDescription = "Number of messages producer attempted to send to the broker." - // MessagingProcessDuration is the metric conforming to the - // "messaging.process.duration" semantic conventions. It represents the - // duration of processing operation. - // Instrument: histogram - // Unit: s - // Stability: development - MessagingProcessDurationName = "messaging.process.duration" - MessagingProcessDurationUnit = "s" - MessagingProcessDurationDescription = "Duration of processing operation." - // MessagingProcessMessages is the metric conforming to the - // "messaging.process.messages" semantic conventions. It represents the - // deprecated. Use `messaging.client.consumed.messages` instead. - // Instrument: counter - // Unit: {message} - // Stability: development - // Deprecated: Replaced by `messaging.client.consumed.messages`. - MessagingProcessMessagesName = "messaging.process.messages" - MessagingProcessMessagesUnit = "{message}" - MessagingProcessMessagesDescription = "Deprecated. Use `messaging.client.consumed.messages` instead." - // MessagingPublishDuration is the metric conforming to the - // "messaging.publish.duration" semantic conventions. It represents the - // deprecated. Use `messaging.client.operation.duration` instead. - // Instrument: histogram - // Unit: s - // Stability: development - // Deprecated: Replaced by `messaging.client.operation.duration`. - MessagingPublishDurationName = "messaging.publish.duration" - MessagingPublishDurationUnit = "s" - MessagingPublishDurationDescription = "Deprecated. Use `messaging.client.operation.duration` instead." - // MessagingPublishMessages is the metric conforming to the - // "messaging.publish.messages" semantic conventions. It represents the - // deprecated. Use `messaging.client.produced.messages` instead. - // Instrument: counter - // Unit: {message} - // Stability: development - // Deprecated: Replaced by `messaging.client.produced.messages`. - MessagingPublishMessagesName = "messaging.publish.messages" - MessagingPublishMessagesUnit = "{message}" - MessagingPublishMessagesDescription = "Deprecated. Use `messaging.client.produced.messages` instead." - // MessagingReceiveDuration is the metric conforming to the - // "messaging.receive.duration" semantic conventions. It represents the - // deprecated. Use `messaging.client.operation.duration` instead. - // Instrument: histogram - // Unit: s - // Stability: development - // Deprecated: Replaced by `messaging.client.operation.duration`. - MessagingReceiveDurationName = "messaging.receive.duration" - MessagingReceiveDurationUnit = "s" - MessagingReceiveDurationDescription = "Deprecated. Use `messaging.client.operation.duration` instead." - // MessagingReceiveMessages is the metric conforming to the - // "messaging.receive.messages" semantic conventions. It represents the - // deprecated. Use `messaging.client.consumed.messages` instead. - // Instrument: counter - // Unit: {message} - // Stability: development - // Deprecated: Replaced by `messaging.client.consumed.messages`. - MessagingReceiveMessagesName = "messaging.receive.messages" - MessagingReceiveMessagesUnit = "{message}" - MessagingReceiveMessagesDescription = "Deprecated. Use `messaging.client.consumed.messages` instead." - // ProcessContextSwitches is the metric conforming to the - // "process.context_switches" semantic conventions. It represents the number of - // times the process has been context switched. - // Instrument: counter - // Unit: {count} - // Stability: development - ProcessContextSwitchesName = "process.context_switches" - ProcessContextSwitchesUnit = "{count}" - ProcessContextSwitchesDescription = "Number of times the process has been context switched." - // ProcessCPUTime is the metric conforming to the "process.cpu.time" semantic - // conventions. It represents the total CPU seconds broken down by different - // states. - // Instrument: counter - // Unit: s - // Stability: development - ProcessCPUTimeName = "process.cpu.time" - ProcessCPUTimeUnit = "s" - ProcessCPUTimeDescription = "Total CPU seconds broken down by different states." - // ProcessCPUUtilization is the metric conforming to the - // "process.cpu.utilization" semantic conventions. It represents the difference - // in process.cpu.time since the last measurement, divided by the elapsed time - // and number of CPUs available to the process. - // Instrument: gauge - // Unit: 1 - // Stability: development - ProcessCPUUtilizationName = "process.cpu.utilization" - ProcessCPUUtilizationUnit = "1" - ProcessCPUUtilizationDescription = "Difference in process.cpu.time since the last measurement, divided by the elapsed time and number of CPUs available to the process." - // ProcessDiskIo is the metric conforming to the "process.disk.io" semantic - // conventions. It represents the disk bytes transferred. - // Instrument: counter - // Unit: By - // Stability: development - ProcessDiskIoName = "process.disk.io" - ProcessDiskIoUnit = "By" - ProcessDiskIoDescription = "Disk bytes transferred." - // ProcessMemoryUsage is the metric conforming to the "process.memory.usage" - // semantic conventions. It represents the amount of physical memory in use. - // Instrument: updowncounter - // Unit: By - // Stability: development - ProcessMemoryUsageName = "process.memory.usage" - ProcessMemoryUsageUnit = "By" - ProcessMemoryUsageDescription = "The amount of physical memory in use." - // ProcessMemoryVirtual is the metric conforming to the - // "process.memory.virtual" semantic conventions. It represents the amount of - // committed virtual memory. - // Instrument: updowncounter - // Unit: By - // Stability: development - ProcessMemoryVirtualName = "process.memory.virtual" - ProcessMemoryVirtualUnit = "By" - ProcessMemoryVirtualDescription = "The amount of committed virtual memory." - // ProcessNetworkIo is the metric conforming to the "process.network.io" - // semantic conventions. It represents the network bytes transferred. - // Instrument: counter - // Unit: By - // Stability: development - ProcessNetworkIoName = "process.network.io" - ProcessNetworkIoUnit = "By" - ProcessNetworkIoDescription = "Network bytes transferred." - // ProcessOpenFileDescriptorCount is the metric conforming to the - // "process.open_file_descriptor.count" semantic conventions. It represents the - // number of file descriptors in use by the process. - // Instrument: updowncounter - // Unit: {count} - // Stability: development - ProcessOpenFileDescriptorCountName = "process.open_file_descriptor.count" - ProcessOpenFileDescriptorCountUnit = "{count}" - ProcessOpenFileDescriptorCountDescription = "Number of file descriptors in use by the process." - // ProcessPagingFaults is the metric conforming to the "process.paging.faults" - // semantic conventions. It represents the number of page faults the process - // has made. - // Instrument: counter - // Unit: {fault} - // Stability: development - ProcessPagingFaultsName = "process.paging.faults" - ProcessPagingFaultsUnit = "{fault}" - ProcessPagingFaultsDescription = "Number of page faults the process has made." - // ProcessThreadCount is the metric conforming to the "process.thread.count" - // semantic conventions. It represents the process threads count. - // Instrument: updowncounter - // Unit: {thread} - // Stability: development - ProcessThreadCountName = "process.thread.count" - ProcessThreadCountUnit = "{thread}" - ProcessThreadCountDescription = "Process threads count." - // ProcessUptime is the metric conforming to the "process.uptime" semantic - // conventions. It represents the time the process has been running. - // Instrument: gauge - // Unit: s - // Stability: development - ProcessUptimeName = "process.uptime" - ProcessUptimeUnit = "s" - ProcessUptimeDescription = "The time the process has been running." - // 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: development - 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: development - RPCClientRequestSizeName = "rpc.client.request.size" - RPCClientRequestSizeUnit = "By" - RPCClientRequestSizeDescription = "Measures the size of RPC request 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: development - RPCClientRequestsPerRPCName = "rpc.client.requests_per_rpc" - RPCClientRequestsPerRPCUnit = "{count}" - RPCClientRequestsPerRPCDescription = "Measures the number of messages received per RPC." - // 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: development - RPCClientResponseSizeName = "rpc.client.response.size" - RPCClientResponseSizeUnit = "By" - RPCClientResponseSizeDescription = "Measures the size of RPC response messages (uncompressed)." - // 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: development - RPCClientResponsesPerRPCName = "rpc.client.responses_per_rpc" - RPCClientResponsesPerRPCUnit = "{count}" - RPCClientResponsesPerRPCDescription = "Measures the number of messages sent per RPC." - // 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: development - 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: development - RPCServerRequestSizeName = "rpc.server.request.size" - RPCServerRequestSizeUnit = "By" - RPCServerRequestSizeDescription = "Measures the size of RPC request 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: development - RPCServerRequestsPerRPCName = "rpc.server.requests_per_rpc" - RPCServerRequestsPerRPCUnit = "{count}" - RPCServerRequestsPerRPCDescription = "Measures the number of messages received per RPC." - // 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: development - RPCServerResponseSizeName = "rpc.server.response.size" - RPCServerResponseSizeUnit = "By" - RPCServerResponseSizeDescription = "Measures the size of RPC response messages (uncompressed)." - // 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: development - RPCServerResponsesPerRPCName = "rpc.server.responses_per_rpc" - RPCServerResponsesPerRPCUnit = "{count}" - RPCServerResponsesPerRPCDescription = "Measures the number of messages sent per RPC." - // 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: stable - SignalrServerActiveConnectionsName = "signalr.server.active_connections" - SignalrServerActiveConnectionsUnit = "{connection}" - SignalrServerActiveConnectionsDescription = "Number of connections that are currently active 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: stable - SignalrServerConnectionDurationName = "signalr.server.connection.duration" - SignalrServerConnectionDurationUnit = "s" - SignalrServerConnectionDurationDescription = "The duration of connections on the server." - // 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: development - SystemCPUFrequencyName = "system.cpu.frequency" - SystemCPUFrequencyUnit = "{Hz}" - SystemCPUFrequencyDescription = "Reports the current frequency of the CPU in Hz" - // 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: development - SystemCPULogicalCountName = "system.cpu.logical.count" - SystemCPULogicalCountUnit = "{cpu}" - SystemCPULogicalCountDescription = "Reports the number of logical (virtual) processor cores created by the operating system to manage multitasking" - // 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: development - SystemCPUPhysicalCountName = "system.cpu.physical.count" - SystemCPUPhysicalCountUnit = "{cpu}" - SystemCPUPhysicalCountDescription = "Reports the number of actual physical processor cores on the hardware" - // 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: development - 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: development - 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" - // SystemDiskIo is the metric conforming to the "system.disk.io" semantic - // conventions. - // Instrument: counter - // Unit: By - // Stability: development - // NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository. - SystemDiskIoName = "system.disk.io" - SystemDiskIoUnit = "By" - // 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: development - SystemDiskIoTimeName = "system.disk.io_time" - SystemDiskIoTimeUnit = "s" - SystemDiskIoTimeDescription = "Time disk spent activated" - // SystemDiskLimit is the metric conforming to the "system.disk.limit" semantic - // conventions. It represents the total storage capacity of the disk. - // Instrument: updowncounter - // Unit: By - // Stability: development - SystemDiskLimitName = "system.disk.limit" - SystemDiskLimitUnit = "By" - SystemDiskLimitDescription = "The total storage capacity of the disk" - // SystemDiskMerged is the metric conforming to the "system.disk.merged" - // semantic conventions. - // Instrument: counter - // Unit: {operation} - // Stability: development - // NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository. - SystemDiskMergedName = "system.disk.merged" - SystemDiskMergedUnit = "{operation}" - // 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: development - SystemDiskOperationTimeName = "system.disk.operation_time" - SystemDiskOperationTimeUnit = "s" - SystemDiskOperationTimeDescription = "Sum of the time each operation took to complete" - // SystemDiskOperations is the metric conforming to the - // "system.disk.operations" semantic conventions. - // Instrument: counter - // Unit: {operation} - // Stability: development - // NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository. - SystemDiskOperationsName = "system.disk.operations" - SystemDiskOperationsUnit = "{operation}" - // SystemFilesystemLimit is the metric conforming to the - // "system.filesystem.limit" semantic conventions. It represents the total - // storage capacity of the filesystem. - // Instrument: updowncounter - // Unit: By - // Stability: development - SystemFilesystemLimitName = "system.filesystem.limit" - SystemFilesystemLimitUnit = "By" - SystemFilesystemLimitDescription = "The total storage capacity of the filesystem" - // SystemFilesystemUsage is the metric conforming to the - // "system.filesystem.usage" semantic conventions. It represents the reports a - // filesystem's space usage across different states. - // Instrument: updowncounter - // Unit: By - // Stability: development - SystemFilesystemUsageName = "system.filesystem.usage" - SystemFilesystemUsageUnit = "By" - SystemFilesystemUsageDescription = "Reports a filesystem's space usage across different states." - // SystemFilesystemUtilization is the metric conforming to the - // "system.filesystem.utilization" semantic conventions. - // Instrument: gauge - // Unit: 1 - // Stability: development - // NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository. - SystemFilesystemUtilizationName = "system.filesystem.utilization" - SystemFilesystemUtilizationUnit = "1" - // 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: development - SystemLinuxMemoryAvailableName = "system.linux.memory.available" - SystemLinuxMemoryAvailableUnit = "By" - SystemLinuxMemoryAvailableDescription = "An estimate of how much memory is available for starting new applications, without causing swapping" - // SystemLinuxMemorySlabUsage is the metric conforming to the - // "system.linux.memory.slab.usage" semantic conventions. It represents the - // reports the memory used by the Linux kernel for managing caches of - // frequently used objects. - // Instrument: updowncounter - // Unit: By - // Stability: development - SystemLinuxMemorySlabUsageName = "system.linux.memory.slab.usage" - SystemLinuxMemorySlabUsageUnit = "By" - SystemLinuxMemorySlabUsageDescription = "Reports the memory used by the Linux kernel for managing caches of frequently used objects." - // 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: development - SystemMemoryLimitName = "system.memory.limit" - SystemMemoryLimitUnit = "By" - SystemMemoryLimitDescription = "Total memory available in the system." - // SystemMemoryShared is the metric conforming to the "system.memory.shared" - // semantic conventions. It represents the shared memory used (mostly by - // tmpfs). - // Instrument: updowncounter - // Unit: By - // Stability: development - SystemMemorySharedName = "system.memory.shared" - SystemMemorySharedUnit = "By" - SystemMemorySharedDescription = "Shared memory used (mostly by tmpfs)." - // 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: development - SystemMemoryUsageName = "system.memory.usage" - SystemMemoryUsageUnit = "By" - SystemMemoryUsageDescription = "Reports memory in use by state." - // SystemMemoryUtilization is the metric conforming to the - // "system.memory.utilization" semantic conventions. - // Instrument: gauge - // Unit: 1 - // Stability: development - // NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository. - SystemMemoryUtilizationName = "system.memory.utilization" - SystemMemoryUtilizationUnit = "1" - // SystemNetworkConnections is the metric conforming to the - // "system.network.connections" semantic conventions. - // Instrument: updowncounter - // Unit: {connection} - // Stability: development - // NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository. - SystemNetworkConnectionsName = "system.network.connections" - SystemNetworkConnectionsUnit = "{connection}" - // 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: development - SystemNetworkDroppedName = "system.network.dropped" - SystemNetworkDroppedUnit = "{packet}" - SystemNetworkDroppedDescription = "Count of packets that are dropped or discarded even though there was no error" - // 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: development - 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: development - // NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository. - SystemNetworkIoName = "system.network.io" - SystemNetworkIoUnit = "By" - // SystemNetworkPackets is the metric conforming to the - // "system.network.packets" semantic conventions. - // Instrument: counter - // Unit: {packet} - // Stability: development - // NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository. - SystemNetworkPacketsName = "system.network.packets" - SystemNetworkPacketsUnit = "{packet}" - // SystemPagingFaults is the metric conforming to the "system.paging.faults" - // semantic conventions. - // Instrument: counter - // Unit: {fault} - // Stability: development - // 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: development - // NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository. - SystemPagingOperationsName = "system.paging.operations" - SystemPagingOperationsUnit = "{operation}" - // 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: development - 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: development - // NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository. - SystemPagingUtilizationName = "system.paging.utilization" - SystemPagingUtilizationUnit = "1" - // SystemProcessCount is the metric conforming to the "system.process.count" - // semantic conventions. It represents the total number of processes in each - // state. - // Instrument: updowncounter - // Unit: {process} - // Stability: development - SystemProcessCountName = "system.process.count" - SystemProcessCountUnit = "{process}" - SystemProcessCountDescription = "Total number of processes in each state" - // SystemProcessCreated is the metric conforming to the - // "system.process.created" semantic conventions. It represents the total - // number of processes created over uptime of the host. - // Instrument: counter - // Unit: {process} - // Stability: development - SystemProcessCreatedName = "system.process.created" - SystemProcessCreatedUnit = "{process}" - SystemProcessCreatedDescription = "Total number of processes created over uptime of the host" - // SystemUptime is the metric conforming to the "system.uptime" semantic - // conventions. It represents the time the system has been running. - // Instrument: gauge - // Unit: s - // Stability: development - SystemUptimeName = "system.uptime" - SystemUptimeUnit = "s" - SystemUptimeDescription = "The time the system has been running" - // VCSChangeCount is the metric conforming to the "vcs.change.count" semantic - // conventions. It represents the number of changes (pull requests/merge - // requests/changelists) in a repository, categorized by their state (e.g. open - // or merged). - // Instrument: updowncounter - // Unit: {change} - // Stability: development - VCSChangeCountName = "vcs.change.count" - VCSChangeCountUnit = "{change}" - VCSChangeCountDescription = "The number of changes (pull requests/merge requests/changelists) in a repository, categorized by their state (e.g. open or merged)" - // VCSChangeDuration is the metric conforming to the "vcs.change.duration" - // semantic conventions. It represents the time duration a change (pull - // request/merge request/changelist) has been in a given state. - // Instrument: gauge - // Unit: s - // Stability: development - VCSChangeDurationName = "vcs.change.duration" - VCSChangeDurationUnit = "s" - VCSChangeDurationDescription = "The time duration a change (pull request/merge request/changelist) has been in a given state." - // VCSChangeTimeToApproval is the metric conforming to the - // "vcs.change.time_to_approval" semantic conventions. It represents the amount - // of time since its creation it took a change (pull request/merge - // request/changelist) to get the first approval. - // Instrument: gauge - // Unit: s - // Stability: development - VCSChangeTimeToApprovalName = "vcs.change.time_to_approval" - VCSChangeTimeToApprovalUnit = "s" - VCSChangeTimeToApprovalDescription = "The amount of time since its creation it took a change (pull request/merge request/changelist) to get the first approval." - // VCSChangeTimeToMerge is the metric conforming to the - // "vcs.change.time_to_merge" semantic conventions. It represents the amount of - // time since its creation it took a change (pull request/merge - // request/changelist) to get merged into the target(base) ref. - // Instrument: gauge - // Unit: s - // Stability: development - VCSChangeTimeToMergeName = "vcs.change.time_to_merge" - VCSChangeTimeToMergeUnit = "s" - VCSChangeTimeToMergeDescription = "The amount of time since its creation it took a change (pull request/merge request/changelist) to get merged into the target(base) ref." - // VCSContributorCount is the metric conforming to the "vcs.contributor.count" - // semantic conventions. It represents the number of unique contributors to a - // repository. - // Instrument: gauge - // Unit: {contributor} - // Stability: development - VCSContributorCountName = "vcs.contributor.count" - VCSContributorCountUnit = "{contributor}" - VCSContributorCountDescription = "The number of unique contributors to a repository" - // VCSRefCount is the metric conforming to the "vcs.ref.count" semantic - // conventions. It represents the number of refs of type branch or tag in a - // repository. - // Instrument: updowncounter - // Unit: {ref} - // Stability: development - VCSRefCountName = "vcs.ref.count" - VCSRefCountUnit = "{ref}" - VCSRefCountDescription = "The number of refs of type branch or tag in a repository." - // VCSRefLinesDelta is the metric conforming to the "vcs.ref.lines_delta" - // semantic conventions. It represents the number of lines added/removed in a - // ref (branch) relative to the ref from the `vcs.ref.base.name` attribute. - // Instrument: gauge - // Unit: {line} - // Stability: development - VCSRefLinesDeltaName = "vcs.ref.lines_delta" - VCSRefLinesDeltaUnit = "{line}" - VCSRefLinesDeltaDescription = "The number of lines added/removed in a ref (branch) relative to the ref from the `vcs.ref.base.name` attribute." - // VCSRefRevisionsDelta is the metric conforming to the - // "vcs.ref.revisions_delta" semantic conventions. It represents the number of - // revisions (commits) a ref (branch) is ahead/behind the branch from the - // `vcs.ref.base.name` attribute. - // Instrument: gauge - // Unit: {revision} - // Stability: development - VCSRefRevisionsDeltaName = "vcs.ref.revisions_delta" - VCSRefRevisionsDeltaUnit = "{revision}" - VCSRefRevisionsDeltaDescription = "The number of revisions (commits) a ref (branch) is ahead/behind the branch from the `vcs.ref.base.name` attribute" - // VCSRefTime is the metric conforming to the "vcs.ref.time" semantic - // conventions. It represents the time a ref (branch) created from the default - // branch (trunk) has existed. The `ref.type` attribute will always be `branch` - // . - // Instrument: gauge - // Unit: s - // Stability: development - VCSRefTimeName = "vcs.ref.time" - VCSRefTimeUnit = "s" - VCSRefTimeDescription = "Time a ref (branch) created from the default branch (trunk) has existed. The `ref.type` attribute will always be `branch`" - // VCSRepositoryCount is the metric conforming to the "vcs.repository.count" - // semantic conventions. It represents the number of repositories in an - // organization. - // Instrument: updowncounter - // Unit: {repository} - // Stability: development - VCSRepositoryCountName = "vcs.repository.count" - VCSRepositoryCountUnit = "{repository}" - VCSRepositoryCountDescription = "The number of repositories in an organization." -) \ No newline at end of file diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.30.0/schema.go b/vendor/go.opentelemetry.io/otel/semconv/v1.30.0/schema.go deleted file mode 100644 index b2e7a515ac..0000000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.30.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.30.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.30.0" diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/httpconv/metric.go b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/httpconv/metric.go new file mode 100644 index 0000000000..55bde895dd --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/httpconv/metric.go @@ -0,0 +1,1641 @@ +// Code generated from semantic convention specification. DO NOT EDIT. + +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// Package httpconv provides types and functionality for OpenTelemetry semantic +// conventions in the "http" namespace. +package httpconv + +import ( + "context" + "sync" + + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/metric" + "go.opentelemetry.io/otel/metric/noop" +) + +var ( + addOptPool = &sync.Pool{New: func() any { return &[]metric.AddOption{} }} + recOptPool = &sync.Pool{New: func() any { return &[]metric.RecordOption{} }} +) + +// ErrorTypeAttr is an attribute conforming to the error.type semantic +// conventions. It represents the describes a class of error the operation ended +// with. +type ErrorTypeAttr string + +var ( + // ErrorTypeOther is a fallback error value to be used when the instrumentation + // doesn't define a custom value. + ErrorTypeOther ErrorTypeAttr = "_OTHER" +) + +// ConnectionStateAttr is an attribute conforming to the http.connection.state +// semantic conventions. It represents the state of the HTTP connection in the +// HTTP connection pool. +type ConnectionStateAttr string + +var ( + // ConnectionStateActive is the active state. + ConnectionStateActive ConnectionStateAttr = "active" + // ConnectionStateIdle is the idle state. + ConnectionStateIdle ConnectionStateAttr = "idle" +) + +// RequestMethodAttr is an attribute conforming to the http.request.method +// semantic conventions. It represents the HTTP request method. +type RequestMethodAttr string + +var ( + // RequestMethodConnect is the CONNECT method. + RequestMethodConnect RequestMethodAttr = "CONNECT" + // RequestMethodDelete is the DELETE method. + RequestMethodDelete RequestMethodAttr = "DELETE" + // RequestMethodGet is the GET method. + RequestMethodGet RequestMethodAttr = "GET" + // RequestMethodHead is the HEAD method. + RequestMethodHead RequestMethodAttr = "HEAD" + // RequestMethodOptions is the OPTIONS method. + RequestMethodOptions RequestMethodAttr = "OPTIONS" + // RequestMethodPatch is the PATCH method. + RequestMethodPatch RequestMethodAttr = "PATCH" + // RequestMethodPost is the POST method. + RequestMethodPost RequestMethodAttr = "POST" + // RequestMethodPut is the PUT method. + RequestMethodPut RequestMethodAttr = "PUT" + // RequestMethodTrace is the TRACE method. + RequestMethodTrace RequestMethodAttr = "TRACE" + // RequestMethodOther is the any HTTP method that the instrumentation has no + // prior knowledge of. + RequestMethodOther RequestMethodAttr = "_OTHER" +) + +// UserAgentSyntheticTypeAttr is an attribute conforming to the +// user_agent.synthetic.type semantic conventions. It represents the specifies +// the category of synthetic traffic, such as tests or bots. +type UserAgentSyntheticTypeAttr string + +var ( + // UserAgentSyntheticTypeBot is the bot source. + UserAgentSyntheticTypeBot UserAgentSyntheticTypeAttr = "bot" + // UserAgentSyntheticTypeTest is the synthetic test source. + UserAgentSyntheticTypeTest UserAgentSyntheticTypeAttr = "test" +) + +// ClientActiveRequests is an instrument used to record metric values conforming +// to the "http.client.active_requests" semantic conventions. It represents the +// number of active HTTP requests. +type ClientActiveRequests struct { + metric.Int64UpDownCounter +} + +// NewClientActiveRequests returns a new ClientActiveRequests instrument. +func NewClientActiveRequests( + m metric.Meter, + opt ...metric.Int64UpDownCounterOption, +) (ClientActiveRequests, error) { + // Check if the meter is nil. + if m == nil { + return ClientActiveRequests{noop.Int64UpDownCounter{}}, nil + } + + i, err := m.Int64UpDownCounter( + "http.client.active_requests", + append([]metric.Int64UpDownCounterOption{ + metric.WithDescription("Number of active HTTP requests."), + metric.WithUnit("{request}"), + }, opt...)..., + ) + if err != nil { + return ClientActiveRequests{noop.Int64UpDownCounter{}}, err + } + return ClientActiveRequests{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m ClientActiveRequests) Inst() metric.Int64UpDownCounter { + return m.Int64UpDownCounter +} + +// Name returns the semantic convention name of the instrument. +func (ClientActiveRequests) Name() string { + return "http.client.active_requests" +} + +// Unit returns the semantic convention unit of the instrument +func (ClientActiveRequests) Unit() string { + return "{request}" +} + +// Description returns the semantic convention description of the instrument +func (ClientActiveRequests) Description() string { + return "Number of active HTTP requests." +} + +// Add adds incr to the existing count for attrs. +// +// The serverAddress is the server domain name if available without reverse DNS +// lookup; otherwise, IP address or Unix domain socket name. +// +// The serverPort is the server port number. +// +// All additional attrs passed are included in the recorded value. +func (m ClientActiveRequests) Add( + ctx context.Context, + incr int64, + serverAddress string, + serverPort int, + attrs ...attribute.KeyValue, +) { + if len(attrs) == 0 { + m.Int64UpDownCounter.Add(ctx, incr) + return + } + + o := addOptPool.Get().(*[]metric.AddOption) + defer func() { + *o = (*o)[:0] + addOptPool.Put(o) + }() + + *o = append( + *o, + metric.WithAttributes( + append( + attrs, + attribute.String("server.address", serverAddress), + attribute.Int("server.port", serverPort), + )..., + ), + ) + + m.Int64UpDownCounter.Add(ctx, incr, *o...) +} + +// AddSet adds incr to the existing count for set. +func (m ClientActiveRequests) AddSet(ctx context.Context, incr int64, set attribute.Set) { + if set.Len() == 0 { + m.Int64UpDownCounter.Add(ctx, incr) + return + } + + o := addOptPool.Get().(*[]metric.AddOption) + defer func() { + *o = (*o)[:0] + addOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Int64UpDownCounter.Add(ctx, incr, *o...) +} + +// AttrURLTemplate returns an optional attribute for the "url.template" semantic +// convention. It represents the low-cardinality template of an +// [absolute path reference]. +// +// [absolute path reference]: https://www.rfc-editor.org/rfc/rfc3986#section-4.2 +func (ClientActiveRequests) AttrURLTemplate(val string) attribute.KeyValue { + return attribute.String("url.template", val) +} + +// AttrRequestMethod returns an optional attribute for the "http.request.method" +// semantic convention. It represents the HTTP request method. +func (ClientActiveRequests) AttrRequestMethod(val RequestMethodAttr) attribute.KeyValue { + return attribute.String("http.request.method", string(val)) +} + +// AttrURLScheme returns an optional attribute for the "url.scheme" semantic +// convention. It represents the [URI scheme] component identifying the used +// protocol. +// +// [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1 +func (ClientActiveRequests) AttrURLScheme(val string) attribute.KeyValue { + return attribute.String("url.scheme", val) +} + +// ClientConnectionDuration is an instrument used to record metric values +// conforming to the "http.client.connection.duration" semantic conventions. It +// represents the duration of the successfully established outbound HTTP +// connections. +type ClientConnectionDuration struct { + metric.Float64Histogram +} + +// NewClientConnectionDuration returns a new ClientConnectionDuration instrument. +func NewClientConnectionDuration( + m metric.Meter, + opt ...metric.Float64HistogramOption, +) (ClientConnectionDuration, error) { + // Check if the meter is nil. + if m == nil { + return ClientConnectionDuration{noop.Float64Histogram{}}, nil + } + + i, err := m.Float64Histogram( + "http.client.connection.duration", + append([]metric.Float64HistogramOption{ + metric.WithDescription("The duration of the successfully established outbound HTTP connections."), + metric.WithUnit("s"), + }, opt...)..., + ) + if err != nil { + return ClientConnectionDuration{noop.Float64Histogram{}}, err + } + return ClientConnectionDuration{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m ClientConnectionDuration) Inst() metric.Float64Histogram { + return m.Float64Histogram +} + +// Name returns the semantic convention name of the instrument. +func (ClientConnectionDuration) Name() string { + return "http.client.connection.duration" +} + +// Unit returns the semantic convention unit of the instrument +func (ClientConnectionDuration) Unit() string { + return "s" +} + +// Description returns the semantic convention description of the instrument +func (ClientConnectionDuration) Description() string { + return "The duration of the successfully established outbound HTTP connections." +} + +// Record records val to the current distribution for attrs. +// +// The serverAddress is the server domain name if available without reverse DNS +// lookup; otherwise, IP address or Unix domain socket name. +// +// The serverPort is the server port number. +// +// All additional attrs passed are included in the recorded value. +func (m ClientConnectionDuration) Record( + ctx context.Context, + val float64, + serverAddress string, + serverPort int, + attrs ...attribute.KeyValue, +) { + if len(attrs) == 0 { + m.Float64Histogram.Record(ctx, val) + return + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append( + *o, + metric.WithAttributes( + append( + attrs, + attribute.String("server.address", serverAddress), + attribute.Int("server.port", serverPort), + )..., + ), + ) + + m.Float64Histogram.Record(ctx, val, *o...) +} + +// RecordSet records val to the current distribution for set. +func (m ClientConnectionDuration) RecordSet(ctx context.Context, val float64, set attribute.Set) { + if set.Len() == 0 { + m.Float64Histogram.Record(ctx, val) + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Float64Histogram.Record(ctx, val, *o...) +} + +// AttrNetworkPeerAddress returns an optional attribute for the +// "network.peer.address" semantic convention. It represents the peer address of +// the network connection - IP address or Unix domain socket name. +func (ClientConnectionDuration) AttrNetworkPeerAddress(val string) attribute.KeyValue { + return attribute.String("network.peer.address", val) +} + +// AttrNetworkProtocolVersion returns an optional attribute for the +// "network.protocol.version" semantic convention. It represents the actual +// version of the protocol used for network communication. +func (ClientConnectionDuration) AttrNetworkProtocolVersion(val string) attribute.KeyValue { + return attribute.String("network.protocol.version", val) +} + +// AttrURLScheme returns an optional attribute for the "url.scheme" semantic +// convention. It represents the [URI scheme] component identifying the used +// protocol. +// +// [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1 +func (ClientConnectionDuration) AttrURLScheme(val string) attribute.KeyValue { + return attribute.String("url.scheme", val) +} + +// ClientOpenConnections is an instrument used to record metric values 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. +type ClientOpenConnections struct { + metric.Int64UpDownCounter +} + +// NewClientOpenConnections returns a new ClientOpenConnections instrument. +func NewClientOpenConnections( + m metric.Meter, + opt ...metric.Int64UpDownCounterOption, +) (ClientOpenConnections, error) { + // Check if the meter is nil. + if m == nil { + return ClientOpenConnections{noop.Int64UpDownCounter{}}, nil + } + + i, err := m.Int64UpDownCounter( + "http.client.open_connections", + append([]metric.Int64UpDownCounterOption{ + metric.WithDescription("Number of outbound HTTP connections that are currently active or idle on the client."), + metric.WithUnit("{connection}"), + }, opt...)..., + ) + if err != nil { + return ClientOpenConnections{noop.Int64UpDownCounter{}}, err + } + return ClientOpenConnections{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m ClientOpenConnections) Inst() metric.Int64UpDownCounter { + return m.Int64UpDownCounter +} + +// Name returns the semantic convention name of the instrument. +func (ClientOpenConnections) Name() string { + return "http.client.open_connections" +} + +// Unit returns the semantic convention unit of the instrument +func (ClientOpenConnections) Unit() string { + return "{connection}" +} + +// Description returns the semantic convention description of the instrument +func (ClientOpenConnections) Description() string { + return "Number of outbound HTTP connections that are currently active or idle on the client." +} + +// Add adds incr to the existing count for attrs. +// +// The connectionState is the state of the HTTP connection in the HTTP connection +// pool. +// +// The serverAddress is the server domain name if available without reverse DNS +// lookup; otherwise, IP address or Unix domain socket name. +// +// The serverPort is the server port number. +// +// All additional attrs passed are included in the recorded value. +func (m ClientOpenConnections) Add( + ctx context.Context, + incr int64, + connectionState ConnectionStateAttr, + serverAddress string, + serverPort int, + attrs ...attribute.KeyValue, +) { + if len(attrs) == 0 { + m.Int64UpDownCounter.Add(ctx, incr) + return + } + + o := addOptPool.Get().(*[]metric.AddOption) + defer func() { + *o = (*o)[:0] + addOptPool.Put(o) + }() + + *o = append( + *o, + metric.WithAttributes( + append( + attrs, + attribute.String("http.connection.state", string(connectionState)), + attribute.String("server.address", serverAddress), + attribute.Int("server.port", serverPort), + )..., + ), + ) + + m.Int64UpDownCounter.Add(ctx, incr, *o...) +} + +// AddSet adds incr to the existing count for set. +func (m ClientOpenConnections) AddSet(ctx context.Context, incr int64, set attribute.Set) { + if set.Len() == 0 { + m.Int64UpDownCounter.Add(ctx, incr) + return + } + + o := addOptPool.Get().(*[]metric.AddOption) + defer func() { + *o = (*o)[:0] + addOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Int64UpDownCounter.Add(ctx, incr, *o...) +} + +// AttrNetworkPeerAddress returns an optional attribute for the +// "network.peer.address" semantic convention. It represents the peer address of +// the network connection - IP address or Unix domain socket name. +func (ClientOpenConnections) AttrNetworkPeerAddress(val string) attribute.KeyValue { + return attribute.String("network.peer.address", val) +} + +// AttrNetworkProtocolVersion returns an optional attribute for the +// "network.protocol.version" semantic convention. It represents the actual +// version of the protocol used for network communication. +func (ClientOpenConnections) AttrNetworkProtocolVersion(val string) attribute.KeyValue { + return attribute.String("network.protocol.version", val) +} + +// AttrURLScheme returns an optional attribute for the "url.scheme" semantic +// convention. It represents the [URI scheme] component identifying the used +// protocol. +// +// [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1 +func (ClientOpenConnections) AttrURLScheme(val string) attribute.KeyValue { + return attribute.String("url.scheme", val) +} + +// ClientRequestBodySize is an instrument used to record metric values conforming +// to the "http.client.request.body.size" semantic conventions. It represents the +// size of HTTP client request bodies. +type ClientRequestBodySize struct { + metric.Int64Histogram +} + +// NewClientRequestBodySize returns a new ClientRequestBodySize instrument. +func NewClientRequestBodySize( + m metric.Meter, + opt ...metric.Int64HistogramOption, +) (ClientRequestBodySize, error) { + // Check if the meter is nil. + if m == nil { + return ClientRequestBodySize{noop.Int64Histogram{}}, nil + } + + i, err := m.Int64Histogram( + "http.client.request.body.size", + append([]metric.Int64HistogramOption{ + metric.WithDescription("Size of HTTP client request bodies."), + metric.WithUnit("By"), + }, opt...)..., + ) + if err != nil { + return ClientRequestBodySize{noop.Int64Histogram{}}, err + } + return ClientRequestBodySize{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m ClientRequestBodySize) Inst() metric.Int64Histogram { + return m.Int64Histogram +} + +// Name returns the semantic convention name of the instrument. +func (ClientRequestBodySize) Name() string { + return "http.client.request.body.size" +} + +// Unit returns the semantic convention unit of the instrument +func (ClientRequestBodySize) Unit() string { + return "By" +} + +// Description returns the semantic convention description of the instrument +func (ClientRequestBodySize) Description() string { + return "Size of HTTP client request bodies." +} + +// Record records val to the current distribution for attrs. +// +// The requestMethod is the HTTP request method. +// +// The serverAddress is the server domain name if available without reverse DNS +// lookup; otherwise, IP address or Unix domain socket name. +// +// The serverPort is the server port number. +// +// All additional attrs passed are included in the recorded value. +// +// 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] header. For requests using transport encoding, this should be +// the compressed size. +// +// [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length +func (m ClientRequestBodySize) Record( + ctx context.Context, + val int64, + requestMethod RequestMethodAttr, + serverAddress string, + serverPort int, + attrs ...attribute.KeyValue, +) { + if len(attrs) == 0 { + m.Int64Histogram.Record(ctx, val) + return + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append( + *o, + metric.WithAttributes( + append( + attrs, + attribute.String("http.request.method", string(requestMethod)), + attribute.String("server.address", serverAddress), + attribute.Int("server.port", serverPort), + )..., + ), + ) + + m.Int64Histogram.Record(ctx, val, *o...) +} + +// RecordSet records val to the current distribution for set. +// +// 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] header. For requests using transport encoding, this should be +// the compressed size. +// +// [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length +func (m ClientRequestBodySize) RecordSet(ctx context.Context, val int64, set attribute.Set) { + if set.Len() == 0 { + m.Int64Histogram.Record(ctx, val) + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Int64Histogram.Record(ctx, val, *o...) +} + +// AttrErrorType returns an optional attribute for the "error.type" semantic +// convention. It represents the describes a class of error the operation ended +// with. +func (ClientRequestBodySize) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue { + return attribute.String("error.type", string(val)) +} + +// AttrResponseStatusCode returns an optional attribute for the +// "http.response.status_code" semantic convention. It represents the +// [HTTP response status code]. +// +// [HTTP response status code]: https://tools.ietf.org/html/rfc7231#section-6 +func (ClientRequestBodySize) AttrResponseStatusCode(val int) attribute.KeyValue { + return attribute.Int("http.response.status_code", val) +} + +// AttrNetworkProtocolName returns an optional attribute for the +// "network.protocol.name" semantic convention. It represents the +// [OSI application layer] or non-OSI equivalent. +// +// [OSI application layer]: https://wikipedia.org/wiki/Application_layer +func (ClientRequestBodySize) AttrNetworkProtocolName(val string) attribute.KeyValue { + return attribute.String("network.protocol.name", val) +} + +// AttrURLTemplate returns an optional attribute for the "url.template" semantic +// convention. It represents the low-cardinality template of an +// [absolute path reference]. +// +// [absolute path reference]: https://www.rfc-editor.org/rfc/rfc3986#section-4.2 +func (ClientRequestBodySize) AttrURLTemplate(val string) attribute.KeyValue { + return attribute.String("url.template", val) +} + +// AttrNetworkProtocolVersion returns an optional attribute for the +// "network.protocol.version" semantic convention. It represents the actual +// version of the protocol used for network communication. +func (ClientRequestBodySize) AttrNetworkProtocolVersion(val string) attribute.KeyValue { + return attribute.String("network.protocol.version", val) +} + +// AttrURLScheme returns an optional attribute for the "url.scheme" semantic +// convention. It represents the [URI scheme] component identifying the used +// protocol. +// +// [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1 +func (ClientRequestBodySize) AttrURLScheme(val string) attribute.KeyValue { + return attribute.String("url.scheme", val) +} + +// ClientRequestDuration is an instrument used to record metric values conforming +// to the "http.client.request.duration" semantic conventions. It represents the +// duration of HTTP client requests. +type ClientRequestDuration struct { + metric.Float64Histogram +} + +// NewClientRequestDuration returns a new ClientRequestDuration instrument. +func NewClientRequestDuration( + m metric.Meter, + opt ...metric.Float64HistogramOption, +) (ClientRequestDuration, error) { + // Check if the meter is nil. + if m == nil { + return ClientRequestDuration{noop.Float64Histogram{}}, nil + } + + i, err := m.Float64Histogram( + "http.client.request.duration", + append([]metric.Float64HistogramOption{ + metric.WithDescription("Duration of HTTP client requests."), + metric.WithUnit("s"), + }, opt...)..., + ) + if err != nil { + return ClientRequestDuration{noop.Float64Histogram{}}, err + } + return ClientRequestDuration{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m ClientRequestDuration) Inst() metric.Float64Histogram { + return m.Float64Histogram +} + +// Name returns the semantic convention name of the instrument. +func (ClientRequestDuration) Name() string { + return "http.client.request.duration" +} + +// Unit returns the semantic convention unit of the instrument +func (ClientRequestDuration) Unit() string { + return "s" +} + +// Description returns the semantic convention description of the instrument +func (ClientRequestDuration) Description() string { + return "Duration of HTTP client requests." +} + +// Record records val to the current distribution for attrs. +// +// The requestMethod is the HTTP request method. +// +// The serverAddress is the server domain name if available without reverse DNS +// lookup; otherwise, IP address or Unix domain socket name. +// +// The serverPort is the server port number. +// +// All additional attrs passed are included in the recorded value. +func (m ClientRequestDuration) Record( + ctx context.Context, + val float64, + requestMethod RequestMethodAttr, + serverAddress string, + serverPort int, + attrs ...attribute.KeyValue, +) { + if len(attrs) == 0 { + m.Float64Histogram.Record(ctx, val) + return + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append( + *o, + metric.WithAttributes( + append( + attrs, + attribute.String("http.request.method", string(requestMethod)), + attribute.String("server.address", serverAddress), + attribute.Int("server.port", serverPort), + )..., + ), + ) + + m.Float64Histogram.Record(ctx, val, *o...) +} + +// RecordSet records val to the current distribution for set. +func (m ClientRequestDuration) RecordSet(ctx context.Context, val float64, set attribute.Set) { + if set.Len() == 0 { + m.Float64Histogram.Record(ctx, val) + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Float64Histogram.Record(ctx, val, *o...) +} + +// AttrErrorType returns an optional attribute for the "error.type" semantic +// convention. It represents the describes a class of error the operation ended +// with. +func (ClientRequestDuration) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue { + return attribute.String("error.type", string(val)) +} + +// AttrResponseStatusCode returns an optional attribute for the +// "http.response.status_code" semantic convention. It represents the +// [HTTP response status code]. +// +// [HTTP response status code]: https://tools.ietf.org/html/rfc7231#section-6 +func (ClientRequestDuration) AttrResponseStatusCode(val int) attribute.KeyValue { + return attribute.Int("http.response.status_code", val) +} + +// AttrNetworkProtocolName returns an optional attribute for the +// "network.protocol.name" semantic convention. It represents the +// [OSI application layer] or non-OSI equivalent. +// +// [OSI application layer]: https://wikipedia.org/wiki/Application_layer +func (ClientRequestDuration) AttrNetworkProtocolName(val string) attribute.KeyValue { + return attribute.String("network.protocol.name", val) +} + +// AttrNetworkProtocolVersion returns an optional attribute for the +// "network.protocol.version" semantic convention. It represents the actual +// version of the protocol used for network communication. +func (ClientRequestDuration) AttrNetworkProtocolVersion(val string) attribute.KeyValue { + return attribute.String("network.protocol.version", val) +} + +// AttrURLScheme returns an optional attribute for the "url.scheme" semantic +// convention. It represents the [URI scheme] component identifying the used +// protocol. +// +// [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1 +func (ClientRequestDuration) AttrURLScheme(val string) attribute.KeyValue { + return attribute.String("url.scheme", val) +} + +// AttrURLTemplate returns an optional attribute for the "url.template" semantic +// convention. It represents the low-cardinality template of an +// [absolute path reference]. +// +// [absolute path reference]: https://www.rfc-editor.org/rfc/rfc3986#section-4.2 +func (ClientRequestDuration) AttrURLTemplate(val string) attribute.KeyValue { + return attribute.String("url.template", val) +} + +// ClientResponseBodySize is an instrument used to record metric values +// conforming to the "http.client.response.body.size" semantic conventions. It +// represents the size of HTTP client response bodies. +type ClientResponseBodySize struct { + metric.Int64Histogram +} + +// NewClientResponseBodySize returns a new ClientResponseBodySize instrument. +func NewClientResponseBodySize( + m metric.Meter, + opt ...metric.Int64HistogramOption, +) (ClientResponseBodySize, error) { + // Check if the meter is nil. + if m == nil { + return ClientResponseBodySize{noop.Int64Histogram{}}, nil + } + + i, err := m.Int64Histogram( + "http.client.response.body.size", + append([]metric.Int64HistogramOption{ + metric.WithDescription("Size of HTTP client response bodies."), + metric.WithUnit("By"), + }, opt...)..., + ) + if err != nil { + return ClientResponseBodySize{noop.Int64Histogram{}}, err + } + return ClientResponseBodySize{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m ClientResponseBodySize) Inst() metric.Int64Histogram { + return m.Int64Histogram +} + +// Name returns the semantic convention name of the instrument. +func (ClientResponseBodySize) Name() string { + return "http.client.response.body.size" +} + +// Unit returns the semantic convention unit of the instrument +func (ClientResponseBodySize) Unit() string { + return "By" +} + +// Description returns the semantic convention description of the instrument +func (ClientResponseBodySize) Description() string { + return "Size of HTTP client response bodies." +} + +// Record records val to the current distribution for attrs. +// +// The requestMethod is the HTTP request method. +// +// The serverAddress is the server domain name if available without reverse DNS +// lookup; otherwise, IP address or Unix domain socket name. +// +// The serverPort is the server port number. +// +// All additional attrs passed are included in the recorded value. +// +// 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] header. For requests using transport encoding, this should be +// the compressed size. +// +// [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length +func (m ClientResponseBodySize) Record( + ctx context.Context, + val int64, + requestMethod RequestMethodAttr, + serverAddress string, + serverPort int, + attrs ...attribute.KeyValue, +) { + if len(attrs) == 0 { + m.Int64Histogram.Record(ctx, val) + return + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append( + *o, + metric.WithAttributes( + append( + attrs, + attribute.String("http.request.method", string(requestMethod)), + attribute.String("server.address", serverAddress), + attribute.Int("server.port", serverPort), + )..., + ), + ) + + m.Int64Histogram.Record(ctx, val, *o...) +} + +// RecordSet records val to the current distribution for set. +// +// 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] header. For requests using transport encoding, this should be +// the compressed size. +// +// [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length +func (m ClientResponseBodySize) RecordSet(ctx context.Context, val int64, set attribute.Set) { + if set.Len() == 0 { + m.Int64Histogram.Record(ctx, val) + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Int64Histogram.Record(ctx, val, *o...) +} + +// AttrErrorType returns an optional attribute for the "error.type" semantic +// convention. It represents the describes a class of error the operation ended +// with. +func (ClientResponseBodySize) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue { + return attribute.String("error.type", string(val)) +} + +// AttrResponseStatusCode returns an optional attribute for the +// "http.response.status_code" semantic convention. It represents the +// [HTTP response status code]. +// +// [HTTP response status code]: https://tools.ietf.org/html/rfc7231#section-6 +func (ClientResponseBodySize) AttrResponseStatusCode(val int) attribute.KeyValue { + return attribute.Int("http.response.status_code", val) +} + +// AttrNetworkProtocolName returns an optional attribute for the +// "network.protocol.name" semantic convention. It represents the +// [OSI application layer] or non-OSI equivalent. +// +// [OSI application layer]: https://wikipedia.org/wiki/Application_layer +func (ClientResponseBodySize) AttrNetworkProtocolName(val string) attribute.KeyValue { + return attribute.String("network.protocol.name", val) +} + +// AttrURLTemplate returns an optional attribute for the "url.template" semantic +// convention. It represents the low-cardinality template of an +// [absolute path reference]. +// +// [absolute path reference]: https://www.rfc-editor.org/rfc/rfc3986#section-4.2 +func (ClientResponseBodySize) AttrURLTemplate(val string) attribute.KeyValue { + return attribute.String("url.template", val) +} + +// AttrNetworkProtocolVersion returns an optional attribute for the +// "network.protocol.version" semantic convention. It represents the actual +// version of the protocol used for network communication. +func (ClientResponseBodySize) AttrNetworkProtocolVersion(val string) attribute.KeyValue { + return attribute.String("network.protocol.version", val) +} + +// AttrURLScheme returns an optional attribute for the "url.scheme" semantic +// convention. It represents the [URI scheme] component identifying the used +// protocol. +// +// [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1 +func (ClientResponseBodySize) AttrURLScheme(val string) attribute.KeyValue { + return attribute.String("url.scheme", val) +} + +// ServerActiveRequests is an instrument used to record metric values conforming +// to the "http.server.active_requests" semantic conventions. It represents the +// number of active HTTP server requests. +type ServerActiveRequests struct { + metric.Int64UpDownCounter +} + +// NewServerActiveRequests returns a new ServerActiveRequests instrument. +func NewServerActiveRequests( + m metric.Meter, + opt ...metric.Int64UpDownCounterOption, +) (ServerActiveRequests, error) { + // Check if the meter is nil. + if m == nil { + return ServerActiveRequests{noop.Int64UpDownCounter{}}, nil + } + + i, err := m.Int64UpDownCounter( + "http.server.active_requests", + append([]metric.Int64UpDownCounterOption{ + metric.WithDescription("Number of active HTTP server requests."), + metric.WithUnit("{request}"), + }, opt...)..., + ) + if err != nil { + return ServerActiveRequests{noop.Int64UpDownCounter{}}, err + } + return ServerActiveRequests{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m ServerActiveRequests) Inst() metric.Int64UpDownCounter { + return m.Int64UpDownCounter +} + +// Name returns the semantic convention name of the instrument. +func (ServerActiveRequests) Name() string { + return "http.server.active_requests" +} + +// Unit returns the semantic convention unit of the instrument +func (ServerActiveRequests) Unit() string { + return "{request}" +} + +// Description returns the semantic convention description of the instrument +func (ServerActiveRequests) Description() string { + return "Number of active HTTP server requests." +} + +// Add adds incr to the existing count for attrs. +// +// The requestMethod is the HTTP request method. +// +// The urlScheme is the the [URI scheme] component identifying the used protocol. +// +// All additional attrs passed are included in the recorded value. +// +// [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1 +func (m ServerActiveRequests) Add( + ctx context.Context, + incr int64, + requestMethod RequestMethodAttr, + urlScheme string, + attrs ...attribute.KeyValue, +) { + if len(attrs) == 0 { + m.Int64UpDownCounter.Add(ctx, incr) + return + } + + o := addOptPool.Get().(*[]metric.AddOption) + defer func() { + *o = (*o)[:0] + addOptPool.Put(o) + }() + + *o = append( + *o, + metric.WithAttributes( + append( + attrs, + attribute.String("http.request.method", string(requestMethod)), + attribute.String("url.scheme", urlScheme), + )..., + ), + ) + + m.Int64UpDownCounter.Add(ctx, incr, *o...) +} + +// AddSet adds incr to the existing count for set. +func (m ServerActiveRequests) AddSet(ctx context.Context, incr int64, set attribute.Set) { + if set.Len() == 0 { + m.Int64UpDownCounter.Add(ctx, incr) + return + } + + o := addOptPool.Get().(*[]metric.AddOption) + defer func() { + *o = (*o)[:0] + addOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Int64UpDownCounter.Add(ctx, incr, *o...) +} + +// AttrServerAddress returns an optional attribute for the "server.address" +// semantic convention. It represents the name of the local HTTP server that +// received the request. +func (ServerActiveRequests) AttrServerAddress(val string) attribute.KeyValue { + return attribute.String("server.address", val) +} + +// AttrServerPort returns an optional attribute for the "server.port" semantic +// convention. It represents the port of the local HTTP server that received the +// request. +func (ServerActiveRequests) AttrServerPort(val int) attribute.KeyValue { + return attribute.Int("server.port", val) +} + +// ServerRequestBodySize is an instrument used to record metric values conforming +// to the "http.server.request.body.size" semantic conventions. It represents the +// size of HTTP server request bodies. +type ServerRequestBodySize struct { + metric.Int64Histogram +} + +// NewServerRequestBodySize returns a new ServerRequestBodySize instrument. +func NewServerRequestBodySize( + m metric.Meter, + opt ...metric.Int64HistogramOption, +) (ServerRequestBodySize, error) { + // Check if the meter is nil. + if m == nil { + return ServerRequestBodySize{noop.Int64Histogram{}}, nil + } + + i, err := m.Int64Histogram( + "http.server.request.body.size", + append([]metric.Int64HistogramOption{ + metric.WithDescription("Size of HTTP server request bodies."), + metric.WithUnit("By"), + }, opt...)..., + ) + if err != nil { + return ServerRequestBodySize{noop.Int64Histogram{}}, err + } + return ServerRequestBodySize{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m ServerRequestBodySize) Inst() metric.Int64Histogram { + return m.Int64Histogram +} + +// Name returns the semantic convention name of the instrument. +func (ServerRequestBodySize) Name() string { + return "http.server.request.body.size" +} + +// Unit returns the semantic convention unit of the instrument +func (ServerRequestBodySize) Unit() string { + return "By" +} + +// Description returns the semantic convention description of the instrument +func (ServerRequestBodySize) Description() string { + return "Size of HTTP server request bodies." +} + +// Record records val to the current distribution for attrs. +// +// The requestMethod is the HTTP request method. +// +// The urlScheme is the the [URI scheme] component identifying the used protocol. +// +// All additional attrs passed are included in the recorded value. +// +// [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1 +// +// 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] header. For requests using transport encoding, this should be +// the compressed size. +// +// [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length +func (m ServerRequestBodySize) Record( + ctx context.Context, + val int64, + requestMethod RequestMethodAttr, + urlScheme string, + attrs ...attribute.KeyValue, +) { + if len(attrs) == 0 { + m.Int64Histogram.Record(ctx, val) + return + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append( + *o, + metric.WithAttributes( + append( + attrs, + attribute.String("http.request.method", string(requestMethod)), + attribute.String("url.scheme", urlScheme), + )..., + ), + ) + + m.Int64Histogram.Record(ctx, val, *o...) +} + +// RecordSet records val to the current distribution for set. +// +// 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] header. For requests using transport encoding, this should be +// the compressed size. +// +// [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length +func (m ServerRequestBodySize) RecordSet(ctx context.Context, val int64, set attribute.Set) { + if set.Len() == 0 { + m.Int64Histogram.Record(ctx, val) + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Int64Histogram.Record(ctx, val, *o...) +} + +// AttrErrorType returns an optional attribute for the "error.type" semantic +// convention. It represents the describes a class of error the operation ended +// with. +func (ServerRequestBodySize) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue { + return attribute.String("error.type", string(val)) +} + +// AttrResponseStatusCode returns an optional attribute for the +// "http.response.status_code" semantic convention. It represents the +// [HTTP response status code]. +// +// [HTTP response status code]: https://tools.ietf.org/html/rfc7231#section-6 +func (ServerRequestBodySize) AttrResponseStatusCode(val int) attribute.KeyValue { + return attribute.Int("http.response.status_code", val) +} + +// AttrRoute returns an optional attribute for the "http.route" semantic +// convention. It represents the matched route, that is, the path template in the +// format used by the respective server framework. +func (ServerRequestBodySize) AttrRoute(val string) attribute.KeyValue { + return attribute.String("http.route", val) +} + +// AttrNetworkProtocolName returns an optional attribute for the +// "network.protocol.name" semantic convention. It represents the +// [OSI application layer] or non-OSI equivalent. +// +// [OSI application layer]: https://wikipedia.org/wiki/Application_layer +func (ServerRequestBodySize) AttrNetworkProtocolName(val string) attribute.KeyValue { + return attribute.String("network.protocol.name", val) +} + +// AttrNetworkProtocolVersion returns an optional attribute for the +// "network.protocol.version" semantic convention. It represents the actual +// version of the protocol used for network communication. +func (ServerRequestBodySize) AttrNetworkProtocolVersion(val string) attribute.KeyValue { + return attribute.String("network.protocol.version", val) +} + +// AttrServerAddress returns an optional attribute for the "server.address" +// semantic convention. It represents the name of the local HTTP server that +// received the request. +func (ServerRequestBodySize) AttrServerAddress(val string) attribute.KeyValue { + return attribute.String("server.address", val) +} + +// AttrServerPort returns an optional attribute for the "server.port" semantic +// convention. It represents the port of the local HTTP server that received the +// request. +func (ServerRequestBodySize) AttrServerPort(val int) attribute.KeyValue { + return attribute.Int("server.port", val) +} + +// AttrUserAgentSyntheticType returns an optional attribute for the +// "user_agent.synthetic.type" semantic convention. It represents the specifies +// the category of synthetic traffic, such as tests or bots. +func (ServerRequestBodySize) AttrUserAgentSyntheticType(val UserAgentSyntheticTypeAttr) attribute.KeyValue { + return attribute.String("user_agent.synthetic.type", string(val)) +} + +// ServerRequestDuration is an instrument used to record metric values conforming +// to the "http.server.request.duration" semantic conventions. It represents the +// duration of HTTP server requests. +type ServerRequestDuration struct { + metric.Float64Histogram +} + +// NewServerRequestDuration returns a new ServerRequestDuration instrument. +func NewServerRequestDuration( + m metric.Meter, + opt ...metric.Float64HistogramOption, +) (ServerRequestDuration, error) { + // Check if the meter is nil. + if m == nil { + return ServerRequestDuration{noop.Float64Histogram{}}, nil + } + + i, err := m.Float64Histogram( + "http.server.request.duration", + append([]metric.Float64HistogramOption{ + metric.WithDescription("Duration of HTTP server requests."), + metric.WithUnit("s"), + }, opt...)..., + ) + if err != nil { + return ServerRequestDuration{noop.Float64Histogram{}}, err + } + return ServerRequestDuration{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m ServerRequestDuration) Inst() metric.Float64Histogram { + return m.Float64Histogram +} + +// Name returns the semantic convention name of the instrument. +func (ServerRequestDuration) Name() string { + return "http.server.request.duration" +} + +// Unit returns the semantic convention unit of the instrument +func (ServerRequestDuration) Unit() string { + return "s" +} + +// Description returns the semantic convention description of the instrument +func (ServerRequestDuration) Description() string { + return "Duration of HTTP server requests." +} + +// Record records val to the current distribution for attrs. +// +// The requestMethod is the HTTP request method. +// +// The urlScheme is the the [URI scheme] component identifying the used protocol. +// +// All additional attrs passed are included in the recorded value. +// +// [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1 +func (m ServerRequestDuration) Record( + ctx context.Context, + val float64, + requestMethod RequestMethodAttr, + urlScheme string, + attrs ...attribute.KeyValue, +) { + if len(attrs) == 0 { + m.Float64Histogram.Record(ctx, val) + return + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append( + *o, + metric.WithAttributes( + append( + attrs, + attribute.String("http.request.method", string(requestMethod)), + attribute.String("url.scheme", urlScheme), + )..., + ), + ) + + m.Float64Histogram.Record(ctx, val, *o...) +} + +// RecordSet records val to the current distribution for set. +func (m ServerRequestDuration) RecordSet(ctx context.Context, val float64, set attribute.Set) { + if set.Len() == 0 { + m.Float64Histogram.Record(ctx, val) + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Float64Histogram.Record(ctx, val, *o...) +} + +// AttrErrorType returns an optional attribute for the "error.type" semantic +// convention. It represents the describes a class of error the operation ended +// with. +func (ServerRequestDuration) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue { + return attribute.String("error.type", string(val)) +} + +// AttrResponseStatusCode returns an optional attribute for the +// "http.response.status_code" semantic convention. It represents the +// [HTTP response status code]. +// +// [HTTP response status code]: https://tools.ietf.org/html/rfc7231#section-6 +func (ServerRequestDuration) AttrResponseStatusCode(val int) attribute.KeyValue { + return attribute.Int("http.response.status_code", val) +} + +// AttrRoute returns an optional attribute for the "http.route" semantic +// convention. It represents the matched route, that is, the path template in the +// format used by the respective server framework. +func (ServerRequestDuration) AttrRoute(val string) attribute.KeyValue { + return attribute.String("http.route", val) +} + +// AttrNetworkProtocolName returns an optional attribute for the +// "network.protocol.name" semantic convention. It represents the +// [OSI application layer] or non-OSI equivalent. +// +// [OSI application layer]: https://wikipedia.org/wiki/Application_layer +func (ServerRequestDuration) AttrNetworkProtocolName(val string) attribute.KeyValue { + return attribute.String("network.protocol.name", val) +} + +// AttrNetworkProtocolVersion returns an optional attribute for the +// "network.protocol.version" semantic convention. It represents the actual +// version of the protocol used for network communication. +func (ServerRequestDuration) AttrNetworkProtocolVersion(val string) attribute.KeyValue { + return attribute.String("network.protocol.version", val) +} + +// AttrServerAddress returns an optional attribute for the "server.address" +// semantic convention. It represents the name of the local HTTP server that +// received the request. +func (ServerRequestDuration) AttrServerAddress(val string) attribute.KeyValue { + return attribute.String("server.address", val) +} + +// AttrServerPort returns an optional attribute for the "server.port" semantic +// convention. It represents the port of the local HTTP server that received the +// request. +func (ServerRequestDuration) AttrServerPort(val int) attribute.KeyValue { + return attribute.Int("server.port", val) +} + +// AttrUserAgentSyntheticType returns an optional attribute for the +// "user_agent.synthetic.type" semantic convention. It represents the specifies +// the category of synthetic traffic, such as tests or bots. +func (ServerRequestDuration) AttrUserAgentSyntheticType(val UserAgentSyntheticTypeAttr) attribute.KeyValue { + return attribute.String("user_agent.synthetic.type", string(val)) +} + +// ServerResponseBodySize is an instrument used to record metric values +// conforming to the "http.server.response.body.size" semantic conventions. It +// represents the size of HTTP server response bodies. +type ServerResponseBodySize struct { + metric.Int64Histogram +} + +// NewServerResponseBodySize returns a new ServerResponseBodySize instrument. +func NewServerResponseBodySize( + m metric.Meter, + opt ...metric.Int64HistogramOption, +) (ServerResponseBodySize, error) { + // Check if the meter is nil. + if m == nil { + return ServerResponseBodySize{noop.Int64Histogram{}}, nil + } + + i, err := m.Int64Histogram( + "http.server.response.body.size", + append([]metric.Int64HistogramOption{ + metric.WithDescription("Size of HTTP server response bodies."), + metric.WithUnit("By"), + }, opt...)..., + ) + if err != nil { + return ServerResponseBodySize{noop.Int64Histogram{}}, err + } + return ServerResponseBodySize{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m ServerResponseBodySize) Inst() metric.Int64Histogram { + return m.Int64Histogram +} + +// Name returns the semantic convention name of the instrument. +func (ServerResponseBodySize) Name() string { + return "http.server.response.body.size" +} + +// Unit returns the semantic convention unit of the instrument +func (ServerResponseBodySize) Unit() string { + return "By" +} + +// Description returns the semantic convention description of the instrument +func (ServerResponseBodySize) Description() string { + return "Size of HTTP server response bodies." +} + +// Record records val to the current distribution for attrs. +// +// The requestMethod is the HTTP request method. +// +// The urlScheme is the the [URI scheme] component identifying the used protocol. +// +// All additional attrs passed are included in the recorded value. +// +// [URI scheme]: https://www.rfc-editor.org/rfc/rfc3986#section-3.1 +// +// 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] header. For requests using transport encoding, this should be +// the compressed size. +// +// [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length +func (m ServerResponseBodySize) Record( + ctx context.Context, + val int64, + requestMethod RequestMethodAttr, + urlScheme string, + attrs ...attribute.KeyValue, +) { + if len(attrs) == 0 { + m.Int64Histogram.Record(ctx, val) + return + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append( + *o, + metric.WithAttributes( + append( + attrs, + attribute.String("http.request.method", string(requestMethod)), + attribute.String("url.scheme", urlScheme), + )..., + ), + ) + + m.Int64Histogram.Record(ctx, val, *o...) +} + +// RecordSet records val to the current distribution for set. +// +// 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] header. For requests using transport encoding, this should be +// the compressed size. +// +// [Content-Length]: https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length +func (m ServerResponseBodySize) RecordSet(ctx context.Context, val int64, set attribute.Set) { + if set.Len() == 0 { + m.Int64Histogram.Record(ctx, val) + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Int64Histogram.Record(ctx, val, *o...) +} + +// AttrErrorType returns an optional attribute for the "error.type" semantic +// convention. It represents the describes a class of error the operation ended +// with. +func (ServerResponseBodySize) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue { + return attribute.String("error.type", string(val)) +} + +// AttrResponseStatusCode returns an optional attribute for the +// "http.response.status_code" semantic convention. It represents the +// [HTTP response status code]. +// +// [HTTP response status code]: https://tools.ietf.org/html/rfc7231#section-6 +func (ServerResponseBodySize) AttrResponseStatusCode(val int) attribute.KeyValue { + return attribute.Int("http.response.status_code", val) +} + +// AttrRoute returns an optional attribute for the "http.route" semantic +// convention. It represents the matched route, that is, the path template in the +// format used by the respective server framework. +func (ServerResponseBodySize) AttrRoute(val string) attribute.KeyValue { + return attribute.String("http.route", val) +} + +// AttrNetworkProtocolName returns an optional attribute for the +// "network.protocol.name" semantic convention. It represents the +// [OSI application layer] or non-OSI equivalent. +// +// [OSI application layer]: https://wikipedia.org/wiki/Application_layer +func (ServerResponseBodySize) AttrNetworkProtocolName(val string) attribute.KeyValue { + return attribute.String("network.protocol.name", val) +} + +// AttrNetworkProtocolVersion returns an optional attribute for the +// "network.protocol.version" semantic convention. It represents the actual +// version of the protocol used for network communication. +func (ServerResponseBodySize) AttrNetworkProtocolVersion(val string) attribute.KeyValue { + return attribute.String("network.protocol.version", val) +} + +// AttrServerAddress returns an optional attribute for the "server.address" +// semantic convention. It represents the name of the local HTTP server that +// received the request. +func (ServerResponseBodySize) AttrServerAddress(val string) attribute.KeyValue { + return attribute.String("server.address", val) +} + +// AttrServerPort returns an optional attribute for the "server.port" semantic +// convention. It represents the port of the local HTTP server that received the +// request. +func (ServerResponseBodySize) AttrServerPort(val int) attribute.KeyValue { + return attribute.Int("server.port", val) +} + +// AttrUserAgentSyntheticType returns an optional attribute for the +// "user_agent.synthetic.type" semantic convention. It represents the specifies +// the category of synthetic traffic, such as tests or bots. +func (ServerResponseBodySize) AttrUserAgentSyntheticType(val UserAgentSyntheticTypeAttr) attribute.KeyValue { + return attribute.String("user_agent.synthetic.type", string(val)) +} \ No newline at end of file diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/rpcconv/metric.go b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/rpcconv/metric.go new file mode 100644 index 0000000000..146b7eda62 --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/rpcconv/metric.go @@ -0,0 +1,920 @@ +// Code generated from semantic convention specification. DO NOT EDIT. + +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// Package httpconv provides types and functionality for OpenTelemetry semantic +// conventions in the "rpc" namespace. +package rpcconv + +import ( + "context" + "sync" + + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/metric" + "go.opentelemetry.io/otel/metric/noop" +) + +var ( + addOptPool = &sync.Pool{New: func() any { return &[]metric.AddOption{} }} + recOptPool = &sync.Pool{New: func() any { return &[]metric.RecordOption{} }} +) + +// ClientDuration is an instrument used to record metric values conforming to the +// "rpc.client.duration" semantic conventions. It represents the measures the +// duration of outbound RPC. +type ClientDuration struct { + metric.Float64Histogram +} + +// NewClientDuration returns a new ClientDuration instrument. +func NewClientDuration( + m metric.Meter, + opt ...metric.Float64HistogramOption, +) (ClientDuration, error) { + // Check if the meter is nil. + if m == nil { + return ClientDuration{noop.Float64Histogram{}}, nil + } + + i, err := m.Float64Histogram( + "rpc.client.duration", + append([]metric.Float64HistogramOption{ + metric.WithDescription("Measures the duration of outbound RPC."), + metric.WithUnit("ms"), + }, opt...)..., + ) + if err != nil { + return ClientDuration{noop.Float64Histogram{}}, err + } + return ClientDuration{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m ClientDuration) Inst() metric.Float64Histogram { + return m.Float64Histogram +} + +// Name returns the semantic convention name of the instrument. +func (ClientDuration) Name() string { + return "rpc.client.duration" +} + +// Unit returns the semantic convention unit of the instrument +func (ClientDuration) Unit() string { + return "ms" +} + +// Description returns the semantic convention description of the instrument +func (ClientDuration) Description() string { + return "Measures the duration of outbound RPC." +} + +// Record records val to the current distribution for attrs. +// +// While streaming RPCs may record this metric as start-of-batch +// to end-of-batch, it's hard to interpret in practice. +// +// **Streaming**: N/A. +func (m ClientDuration) Record(ctx context.Context, val float64, attrs ...attribute.KeyValue) { + if len(attrs) == 0 { + m.Float64Histogram.Record(ctx, val) + return + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributes(attrs...)) + m.Float64Histogram.Record(ctx, val, *o...) +} + +// RecordSet records val to the current distribution for set. +// +// While streaming RPCs may record this metric as start-of-batch +// to end-of-batch, it's hard to interpret in practice. +// +// **Streaming**: N/A. +func (m ClientDuration) RecordSet(ctx context.Context, val float64, set attribute.Set) { + if set.Len() == 0 { + m.Float64Histogram.Record(ctx, val) + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Float64Histogram.Record(ctx, val, *o...) +} + +// ClientRequestSize is an instrument used to record metric values conforming to +// the "rpc.client.request.size" semantic conventions. It represents the measures +// the size of RPC request messages (uncompressed). +type ClientRequestSize struct { + metric.Int64Histogram +} + +// NewClientRequestSize returns a new ClientRequestSize instrument. +func NewClientRequestSize( + m metric.Meter, + opt ...metric.Int64HistogramOption, +) (ClientRequestSize, error) { + // Check if the meter is nil. + if m == nil { + return ClientRequestSize{noop.Int64Histogram{}}, nil + } + + i, err := m.Int64Histogram( + "rpc.client.request.size", + append([]metric.Int64HistogramOption{ + metric.WithDescription("Measures the size of RPC request messages (uncompressed)."), + metric.WithUnit("By"), + }, opt...)..., + ) + if err != nil { + return ClientRequestSize{noop.Int64Histogram{}}, err + } + return ClientRequestSize{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m ClientRequestSize) Inst() metric.Int64Histogram { + return m.Int64Histogram +} + +// Name returns the semantic convention name of the instrument. +func (ClientRequestSize) Name() string { + return "rpc.client.request.size" +} + +// Unit returns the semantic convention unit of the instrument +func (ClientRequestSize) Unit() string { + return "By" +} + +// Description returns the semantic convention description of the instrument +func (ClientRequestSize) Description() string { + return "Measures the size of RPC request messages (uncompressed)." +} + +// Record records val to the current distribution for attrs. +// +// **Streaming**: Recorded per message in a streaming batch +func (m ClientRequestSize) Record(ctx context.Context, val int64, attrs ...attribute.KeyValue) { + if len(attrs) == 0 { + m.Int64Histogram.Record(ctx, val) + return + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributes(attrs...)) + m.Int64Histogram.Record(ctx, val, *o...) +} + +// RecordSet records val to the current distribution for set. +// +// **Streaming**: Recorded per message in a streaming batch +func (m ClientRequestSize) RecordSet(ctx context.Context, val int64, set attribute.Set) { + if set.Len() == 0 { + m.Int64Histogram.Record(ctx, val) + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Int64Histogram.Record(ctx, val, *o...) +} + +// ClientRequestsPerRPC is an instrument used to record metric values conforming +// to the "rpc.client.requests_per_rpc" semantic conventions. It represents the +// measures the number of messages received per RPC. +type ClientRequestsPerRPC struct { + metric.Int64Histogram +} + +// NewClientRequestsPerRPC returns a new ClientRequestsPerRPC instrument. +func NewClientRequestsPerRPC( + m metric.Meter, + opt ...metric.Int64HistogramOption, +) (ClientRequestsPerRPC, error) { + // Check if the meter is nil. + if m == nil { + return ClientRequestsPerRPC{noop.Int64Histogram{}}, nil + } + + i, err := m.Int64Histogram( + "rpc.client.requests_per_rpc", + append([]metric.Int64HistogramOption{ + metric.WithDescription("Measures the number of messages received per RPC."), + metric.WithUnit("{count}"), + }, opt...)..., + ) + if err != nil { + return ClientRequestsPerRPC{noop.Int64Histogram{}}, err + } + return ClientRequestsPerRPC{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m ClientRequestsPerRPC) Inst() metric.Int64Histogram { + return m.Int64Histogram +} + +// Name returns the semantic convention name of the instrument. +func (ClientRequestsPerRPC) Name() string { + return "rpc.client.requests_per_rpc" +} + +// Unit returns the semantic convention unit of the instrument +func (ClientRequestsPerRPC) Unit() string { + return "{count}" +} + +// Description returns the semantic convention description of the instrument +func (ClientRequestsPerRPC) Description() string { + return "Measures the number of messages received per RPC." +} + +// Record records val to the current distribution for attrs. +// +// Should be 1 for all non-streaming RPCs. +// +// **Streaming**: This metric is required for server and client streaming RPCs +func (m ClientRequestsPerRPC) Record(ctx context.Context, val int64, attrs ...attribute.KeyValue) { + if len(attrs) == 0 { + m.Int64Histogram.Record(ctx, val) + return + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributes(attrs...)) + m.Int64Histogram.Record(ctx, val, *o...) +} + +// RecordSet records val to the current distribution for set. +// +// Should be 1 for all non-streaming RPCs. +// +// **Streaming**: This metric is required for server and client streaming RPCs +func (m ClientRequestsPerRPC) RecordSet(ctx context.Context, val int64, set attribute.Set) { + if set.Len() == 0 { + m.Int64Histogram.Record(ctx, val) + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Int64Histogram.Record(ctx, val, *o...) +} + +// ClientResponseSize is an instrument used to record metric values conforming to +// the "rpc.client.response.size" semantic conventions. It represents the +// measures the size of RPC response messages (uncompressed). +type ClientResponseSize struct { + metric.Int64Histogram +} + +// NewClientResponseSize returns a new ClientResponseSize instrument. +func NewClientResponseSize( + m metric.Meter, + opt ...metric.Int64HistogramOption, +) (ClientResponseSize, error) { + // Check if the meter is nil. + if m == nil { + return ClientResponseSize{noop.Int64Histogram{}}, nil + } + + i, err := m.Int64Histogram( + "rpc.client.response.size", + append([]metric.Int64HistogramOption{ + metric.WithDescription("Measures the size of RPC response messages (uncompressed)."), + metric.WithUnit("By"), + }, opt...)..., + ) + if err != nil { + return ClientResponseSize{noop.Int64Histogram{}}, err + } + return ClientResponseSize{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m ClientResponseSize) Inst() metric.Int64Histogram { + return m.Int64Histogram +} + +// Name returns the semantic convention name of the instrument. +func (ClientResponseSize) Name() string { + return "rpc.client.response.size" +} + +// Unit returns the semantic convention unit of the instrument +func (ClientResponseSize) Unit() string { + return "By" +} + +// Description returns the semantic convention description of the instrument +func (ClientResponseSize) Description() string { + return "Measures the size of RPC response messages (uncompressed)." +} + +// Record records val to the current distribution for attrs. +// +// **Streaming**: Recorded per response in a streaming batch +func (m ClientResponseSize) Record(ctx context.Context, val int64, attrs ...attribute.KeyValue) { + if len(attrs) == 0 { + m.Int64Histogram.Record(ctx, val) + return + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributes(attrs...)) + m.Int64Histogram.Record(ctx, val, *o...) +} + +// RecordSet records val to the current distribution for set. +// +// **Streaming**: Recorded per response in a streaming batch +func (m ClientResponseSize) RecordSet(ctx context.Context, val int64, set attribute.Set) { + if set.Len() == 0 { + m.Int64Histogram.Record(ctx, val) + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Int64Histogram.Record(ctx, val, *o...) +} + +// ClientResponsesPerRPC is an instrument used to record metric values conforming +// to the "rpc.client.responses_per_rpc" semantic conventions. It represents the +// measures the number of messages sent per RPC. +type ClientResponsesPerRPC struct { + metric.Int64Histogram +} + +// NewClientResponsesPerRPC returns a new ClientResponsesPerRPC instrument. +func NewClientResponsesPerRPC( + m metric.Meter, + opt ...metric.Int64HistogramOption, +) (ClientResponsesPerRPC, error) { + // Check if the meter is nil. + if m == nil { + return ClientResponsesPerRPC{noop.Int64Histogram{}}, nil + } + + i, err := m.Int64Histogram( + "rpc.client.responses_per_rpc", + append([]metric.Int64HistogramOption{ + metric.WithDescription("Measures the number of messages sent per RPC."), + metric.WithUnit("{count}"), + }, opt...)..., + ) + if err != nil { + return ClientResponsesPerRPC{noop.Int64Histogram{}}, err + } + return ClientResponsesPerRPC{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m ClientResponsesPerRPC) Inst() metric.Int64Histogram { + return m.Int64Histogram +} + +// Name returns the semantic convention name of the instrument. +func (ClientResponsesPerRPC) Name() string { + return "rpc.client.responses_per_rpc" +} + +// Unit returns the semantic convention unit of the instrument +func (ClientResponsesPerRPC) Unit() string { + return "{count}" +} + +// Description returns the semantic convention description of the instrument +func (ClientResponsesPerRPC) Description() string { + return "Measures the number of messages sent per RPC." +} + +// Record records val to the current distribution for attrs. +// +// Should be 1 for all non-streaming RPCs. +// +// **Streaming**: This metric is required for server and client streaming RPCs +func (m ClientResponsesPerRPC) Record(ctx context.Context, val int64, attrs ...attribute.KeyValue) { + if len(attrs) == 0 { + m.Int64Histogram.Record(ctx, val) + return + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributes(attrs...)) + m.Int64Histogram.Record(ctx, val, *o...) +} + +// RecordSet records val to the current distribution for set. +// +// Should be 1 for all non-streaming RPCs. +// +// **Streaming**: This metric is required for server and client streaming RPCs +func (m ClientResponsesPerRPC) RecordSet(ctx context.Context, val int64, set attribute.Set) { + if set.Len() == 0 { + m.Int64Histogram.Record(ctx, val) + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Int64Histogram.Record(ctx, val, *o...) +} + +// ServerDuration is an instrument used to record metric values conforming to the +// "rpc.server.duration" semantic conventions. It represents the measures the +// duration of inbound RPC. +type ServerDuration struct { + metric.Float64Histogram +} + +// NewServerDuration returns a new ServerDuration instrument. +func NewServerDuration( + m metric.Meter, + opt ...metric.Float64HistogramOption, +) (ServerDuration, error) { + // Check if the meter is nil. + if m == nil { + return ServerDuration{noop.Float64Histogram{}}, nil + } + + i, err := m.Float64Histogram( + "rpc.server.duration", + append([]metric.Float64HistogramOption{ + metric.WithDescription("Measures the duration of inbound RPC."), + metric.WithUnit("ms"), + }, opt...)..., + ) + if err != nil { + return ServerDuration{noop.Float64Histogram{}}, err + } + return ServerDuration{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m ServerDuration) Inst() metric.Float64Histogram { + return m.Float64Histogram +} + +// Name returns the semantic convention name of the instrument. +func (ServerDuration) Name() string { + return "rpc.server.duration" +} + +// Unit returns the semantic convention unit of the instrument +func (ServerDuration) Unit() string { + return "ms" +} + +// Description returns the semantic convention description of the instrument +func (ServerDuration) Description() string { + return "Measures the duration of inbound RPC." +} + +// Record records val to the current distribution for attrs. +// +// While streaming RPCs may record this metric as start-of-batch +// to end-of-batch, it's hard to interpret in practice. +// +// **Streaming**: N/A. +func (m ServerDuration) Record(ctx context.Context, val float64, attrs ...attribute.KeyValue) { + if len(attrs) == 0 { + m.Float64Histogram.Record(ctx, val) + return + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributes(attrs...)) + m.Float64Histogram.Record(ctx, val, *o...) +} + +// RecordSet records val to the current distribution for set. +// +// While streaming RPCs may record this metric as start-of-batch +// to end-of-batch, it's hard to interpret in practice. +// +// **Streaming**: N/A. +func (m ServerDuration) RecordSet(ctx context.Context, val float64, set attribute.Set) { + if set.Len() == 0 { + m.Float64Histogram.Record(ctx, val) + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Float64Histogram.Record(ctx, val, *o...) +} + +// ServerRequestSize is an instrument used to record metric values conforming to +// the "rpc.server.request.size" semantic conventions. It represents the measures +// the size of RPC request messages (uncompressed). +type ServerRequestSize struct { + metric.Int64Histogram +} + +// NewServerRequestSize returns a new ServerRequestSize instrument. +func NewServerRequestSize( + m metric.Meter, + opt ...metric.Int64HistogramOption, +) (ServerRequestSize, error) { + // Check if the meter is nil. + if m == nil { + return ServerRequestSize{noop.Int64Histogram{}}, nil + } + + i, err := m.Int64Histogram( + "rpc.server.request.size", + append([]metric.Int64HistogramOption{ + metric.WithDescription("Measures the size of RPC request messages (uncompressed)."), + metric.WithUnit("By"), + }, opt...)..., + ) + if err != nil { + return ServerRequestSize{noop.Int64Histogram{}}, err + } + return ServerRequestSize{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m ServerRequestSize) Inst() metric.Int64Histogram { + return m.Int64Histogram +} + +// Name returns the semantic convention name of the instrument. +func (ServerRequestSize) Name() string { + return "rpc.server.request.size" +} + +// Unit returns the semantic convention unit of the instrument +func (ServerRequestSize) Unit() string { + return "By" +} + +// Description returns the semantic convention description of the instrument +func (ServerRequestSize) Description() string { + return "Measures the size of RPC request messages (uncompressed)." +} + +// Record records val to the current distribution for attrs. +// +// **Streaming**: Recorded per message in a streaming batch +func (m ServerRequestSize) Record(ctx context.Context, val int64, attrs ...attribute.KeyValue) { + if len(attrs) == 0 { + m.Int64Histogram.Record(ctx, val) + return + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributes(attrs...)) + m.Int64Histogram.Record(ctx, val, *o...) +} + +// RecordSet records val to the current distribution for set. +// +// **Streaming**: Recorded per message in a streaming batch +func (m ServerRequestSize) RecordSet(ctx context.Context, val int64, set attribute.Set) { + if set.Len() == 0 { + m.Int64Histogram.Record(ctx, val) + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Int64Histogram.Record(ctx, val, *o...) +} + +// ServerRequestsPerRPC is an instrument used to record metric values conforming +// to the "rpc.server.requests_per_rpc" semantic conventions. It represents the +// measures the number of messages received per RPC. +type ServerRequestsPerRPC struct { + metric.Int64Histogram +} + +// NewServerRequestsPerRPC returns a new ServerRequestsPerRPC instrument. +func NewServerRequestsPerRPC( + m metric.Meter, + opt ...metric.Int64HistogramOption, +) (ServerRequestsPerRPC, error) { + // Check if the meter is nil. + if m == nil { + return ServerRequestsPerRPC{noop.Int64Histogram{}}, nil + } + + i, err := m.Int64Histogram( + "rpc.server.requests_per_rpc", + append([]metric.Int64HistogramOption{ + metric.WithDescription("Measures the number of messages received per RPC."), + metric.WithUnit("{count}"), + }, opt...)..., + ) + if err != nil { + return ServerRequestsPerRPC{noop.Int64Histogram{}}, err + } + return ServerRequestsPerRPC{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m ServerRequestsPerRPC) Inst() metric.Int64Histogram { + return m.Int64Histogram +} + +// Name returns the semantic convention name of the instrument. +func (ServerRequestsPerRPC) Name() string { + return "rpc.server.requests_per_rpc" +} + +// Unit returns the semantic convention unit of the instrument +func (ServerRequestsPerRPC) Unit() string { + return "{count}" +} + +// Description returns the semantic convention description of the instrument +func (ServerRequestsPerRPC) Description() string { + return "Measures the number of messages received per RPC." +} + +// Record records val to the current distribution for attrs. +// +// Should be 1 for all non-streaming RPCs. +// +// **Streaming** : This metric is required for server and client streaming RPCs +func (m ServerRequestsPerRPC) Record(ctx context.Context, val int64, attrs ...attribute.KeyValue) { + if len(attrs) == 0 { + m.Int64Histogram.Record(ctx, val) + return + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributes(attrs...)) + m.Int64Histogram.Record(ctx, val, *o...) +} + +// RecordSet records val to the current distribution for set. +// +// Should be 1 for all non-streaming RPCs. +// +// **Streaming** : This metric is required for server and client streaming RPCs +func (m ServerRequestsPerRPC) RecordSet(ctx context.Context, val int64, set attribute.Set) { + if set.Len() == 0 { + m.Int64Histogram.Record(ctx, val) + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Int64Histogram.Record(ctx, val, *o...) +} + +// ServerResponseSize is an instrument used to record metric values conforming to +// the "rpc.server.response.size" semantic conventions. It represents the +// measures the size of RPC response messages (uncompressed). +type ServerResponseSize struct { + metric.Int64Histogram +} + +// NewServerResponseSize returns a new ServerResponseSize instrument. +func NewServerResponseSize( + m metric.Meter, + opt ...metric.Int64HistogramOption, +) (ServerResponseSize, error) { + // Check if the meter is nil. + if m == nil { + return ServerResponseSize{noop.Int64Histogram{}}, nil + } + + i, err := m.Int64Histogram( + "rpc.server.response.size", + append([]metric.Int64HistogramOption{ + metric.WithDescription("Measures the size of RPC response messages (uncompressed)."), + metric.WithUnit("By"), + }, opt...)..., + ) + if err != nil { + return ServerResponseSize{noop.Int64Histogram{}}, err + } + return ServerResponseSize{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m ServerResponseSize) Inst() metric.Int64Histogram { + return m.Int64Histogram +} + +// Name returns the semantic convention name of the instrument. +func (ServerResponseSize) Name() string { + return "rpc.server.response.size" +} + +// Unit returns the semantic convention unit of the instrument +func (ServerResponseSize) Unit() string { + return "By" +} + +// Description returns the semantic convention description of the instrument +func (ServerResponseSize) Description() string { + return "Measures the size of RPC response messages (uncompressed)." +} + +// Record records val to the current distribution for attrs. +// +// **Streaming**: Recorded per response in a streaming batch +func (m ServerResponseSize) Record(ctx context.Context, val int64, attrs ...attribute.KeyValue) { + if len(attrs) == 0 { + m.Int64Histogram.Record(ctx, val) + return + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributes(attrs...)) + m.Int64Histogram.Record(ctx, val, *o...) +} + +// RecordSet records val to the current distribution for set. +// +// **Streaming**: Recorded per response in a streaming batch +func (m ServerResponseSize) RecordSet(ctx context.Context, val int64, set attribute.Set) { + if set.Len() == 0 { + m.Int64Histogram.Record(ctx, val) + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Int64Histogram.Record(ctx, val, *o...) +} + +// ServerResponsesPerRPC is an instrument used to record metric values conforming +// to the "rpc.server.responses_per_rpc" semantic conventions. It represents the +// measures the number of messages sent per RPC. +type ServerResponsesPerRPC struct { + metric.Int64Histogram +} + +// NewServerResponsesPerRPC returns a new ServerResponsesPerRPC instrument. +func NewServerResponsesPerRPC( + m metric.Meter, + opt ...metric.Int64HistogramOption, +) (ServerResponsesPerRPC, error) { + // Check if the meter is nil. + if m == nil { + return ServerResponsesPerRPC{noop.Int64Histogram{}}, nil + } + + i, err := m.Int64Histogram( + "rpc.server.responses_per_rpc", + append([]metric.Int64HistogramOption{ + metric.WithDescription("Measures the number of messages sent per RPC."), + metric.WithUnit("{count}"), + }, opt...)..., + ) + if err != nil { + return ServerResponsesPerRPC{noop.Int64Histogram{}}, err + } + return ServerResponsesPerRPC{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m ServerResponsesPerRPC) Inst() metric.Int64Histogram { + return m.Int64Histogram +} + +// Name returns the semantic convention name of the instrument. +func (ServerResponsesPerRPC) Name() string { + return "rpc.server.responses_per_rpc" +} + +// Unit returns the semantic convention unit of the instrument +func (ServerResponsesPerRPC) Unit() string { + return "{count}" +} + +// Description returns the semantic convention description of the instrument +func (ServerResponsesPerRPC) Description() string { + return "Measures the number of messages sent per RPC." +} + +// Record records val to the current distribution for attrs. +// +// Should be 1 for all non-streaming RPCs. +// +// **Streaming**: This metric is required for server and client streaming RPCs +func (m ServerResponsesPerRPC) Record(ctx context.Context, val int64, attrs ...attribute.KeyValue) { + if len(attrs) == 0 { + m.Int64Histogram.Record(ctx, val) + return + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributes(attrs...)) + m.Int64Histogram.Record(ctx, val, *o...) +} + +// RecordSet records val to the current distribution for set. +// +// Should be 1 for all non-streaming RPCs. +// +// **Streaming**: This metric is required for server and client streaming RPCs +func (m ServerResponsesPerRPC) RecordSet(ctx context.Context, val int64, set attribute.Set) { + if set.Len() == 0 { + m.Int64Histogram.Record(ctx, val) + } + + o := recOptPool.Get().(*[]metric.RecordOption) + defer func() { + *o = (*o)[:0] + recOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Int64Histogram.Record(ctx, val, *o...) +} \ No newline at end of file diff --git a/vendor/go.uber.org/zap/.golangci.yml b/vendor/go.uber.org/zap/.golangci.yml index 2346df1351..74faaa71d8 100644 --- a/vendor/go.uber.org/zap/.golangci.yml +++ b/vendor/go.uber.org/zap/.golangci.yml @@ -25,7 +25,7 @@ linters-settings: govet: # These govet checks are disabled by default, but they're useful. enable: - - niliness + - nilness - reflectvaluecompare - sortslice - unusedwrite diff --git a/vendor/go.uber.org/zap/CHANGELOG.md b/vendor/go.uber.org/zap/CHANGELOG.md index 6d6cd5f4d7..86e7e6f982 100644 --- a/vendor/go.uber.org/zap/CHANGELOG.md +++ b/vendor/go.uber.org/zap/CHANGELOG.md @@ -3,6 +3,16 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 1.27.1 (19 Nov 2025) +Enhancements: +* [#1501][]: prevent `Object` from panicking on nils +* [#1511][]: Fix a race condition in `WithLazy`. + +Thanks to @rabbbit, @alshopov, @jquirke, @arukiidou for their contributions to this release. + +[#1501]: https://github.com/uber-go/zap/pull/1501 +[#1511]: https://github.com/uber-go/zap/pull/1511 + ## 1.27.0 (20 Feb 2024) Enhancements: * [#1378][]: Add `WithLazy` method for `SugaredLogger`. diff --git a/vendor/go.uber.org/zap/CODE_OF_CONDUCT.md b/vendor/go.uber.org/zap/CODE_OF_CONDUCT.md index e327d9aa5c..bc988b72ed 100644 --- a/vendor/go.uber.org/zap/CODE_OF_CONDUCT.md +++ b/vendor/go.uber.org/zap/CODE_OF_CONDUCT.md @@ -71,5 +71,5 @@ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]. -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ +[homepage]: https://contributor-covenant.org +[version]: https://contributor-covenant.org/version/1/4/ diff --git a/vendor/go.uber.org/zap/LICENSE b/vendor/go.uber.org/zap/LICENSE index 6652bed45f..3883b9a7ea 100644 --- a/vendor/go.uber.org/zap/LICENSE +++ b/vendor/go.uber.org/zap/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2016-2017 Uber Technologies, Inc. +Copyright (c) 2016-2024 Uber Technologies, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/go.uber.org/zap/Makefile b/vendor/go.uber.org/zap/Makefile index eb1cee53bd..f9db385b34 100644 --- a/vendor/go.uber.org/zap/Makefile +++ b/vendor/go.uber.org/zap/Makefile @@ -24,7 +24,7 @@ golangci-lint: @$(foreach mod,$(MODULE_DIRS), \ (cd $(mod) && \ echo "[lint] golangci-lint: $(mod)" && \ - golangci-lint run --path-prefix $(mod)) &&) true + golangci-lint run --path-prefix $(mod) ./...) &&) true .PHONY: tidy tidy: diff --git a/vendor/go.uber.org/zap/field.go b/vendor/go.uber.org/zap/field.go index 6743930b82..1884afabcd 100644 --- a/vendor/go.uber.org/zap/field.go +++ b/vendor/go.uber.org/zap/field.go @@ -398,6 +398,9 @@ func Durationp(key string, val *time.Duration) Field { // struct-like user-defined types to the logging context. The struct's // MarshalLogObject method is called lazily. func Object(key string, val zapcore.ObjectMarshaler) Field { + if val == nil { + return nilField(key) + } return Field{Key: key, Type: zapcore.ObjectMarshalerType, Interface: val} } @@ -431,6 +434,13 @@ func (d dictObject) MarshalLogObject(enc zapcore.ObjectEncoder) error { return nil } +// DictObject constructs a [zapcore.ObjectMarshaler] with the given list of fields. +// The resulting object marshaler can be used as input to [Object], [Objects], or +// any other functions that expect an object marshaler. +func DictObject(val ...Field) zapcore.ObjectMarshaler { + return dictObject(val) +} + // We discovered an issue where zap.Any can cause a performance degradation // when used in new goroutines. // diff --git a/vendor/go.uber.org/zap/http_handler.go b/vendor/go.uber.org/zap/http_handler.go index 2be8f65150..1cae2c164b 100644 --- a/vendor/go.uber.org/zap/http_handler.go +++ b/vendor/go.uber.org/zap/http_handler.go @@ -71,7 +71,7 @@ import ( func (lvl AtomicLevel) ServeHTTP(w http.ResponseWriter, r *http.Request) { if err := lvl.serveHTTP(w, r); err != nil { w.WriteHeader(http.StatusInternalServerError) - fmt.Fprintf(w, "internal error: %v", err) + _, _ = fmt.Fprintf(w, "internal error: %v", err) } } diff --git a/vendor/go.uber.org/zap/logger.go b/vendor/go.uber.org/zap/logger.go index c4d3003239..2d0ef141bc 100644 --- a/vendor/go.uber.org/zap/logger.go +++ b/vendor/go.uber.org/zap/logger.go @@ -381,7 +381,11 @@ func (log *Logger) check(lvl zapcore.Level, msg string) *zapcore.CheckedEntry { if stack.Count() == 0 { if log.addCaller { - fmt.Fprintf(log.errorOutput, "%v Logger.check error: failed to get caller\n", ent.Time.UTC()) + _, _ = fmt.Fprintf( + log.errorOutput, + "%v Logger.check error: failed to get caller\n", + ent.Time.UTC(), + ) _ = log.errorOutput.Sync() } return ce diff --git a/vendor/go.uber.org/zap/options.go b/vendor/go.uber.org/zap/options.go index 43d357ac90..04a3c1e635 100644 --- a/vendor/go.uber.org/zap/options.go +++ b/vendor/go.uber.org/zap/options.go @@ -125,7 +125,11 @@ func IncreaseLevel(lvl zapcore.LevelEnabler) Option { return optionFunc(func(log *Logger) { core, err := zapcore.NewIncreaseLevelCore(log.core, lvl) if err != nil { - fmt.Fprintf(log.errorOutput, "failed to IncreaseLevel: %v\n", err) + _, _ = fmt.Fprintf( + log.errorOutput, + "failed to IncreaseLevel: %v\n", + err, + ) } else { log.core = core } diff --git a/vendor/go.uber.org/zap/sink.go b/vendor/go.uber.org/zap/sink.go index 499772a00d..92202280f1 100644 --- a/vendor/go.uber.org/zap/sink.go +++ b/vendor/go.uber.org/zap/sink.go @@ -71,7 +71,7 @@ func newSinkRegistry() *sinkRegistry { return sr } -// RegisterScheme registers the given factory for the specific scheme. +// RegisterSink registers the given factory for the specific scheme. func (sr *sinkRegistry) RegisterSink(scheme string, factory func(*url.URL) (Sink, error)) error { sr.mu.Lock() defer sr.mu.Unlock() diff --git a/vendor/go.uber.org/zap/zapcore/buffered_write_syncer.go b/vendor/go.uber.org/zap/zapcore/buffered_write_syncer.go index a40e93b3ec..4b426a5648 100644 --- a/vendor/go.uber.org/zap/zapcore/buffered_write_syncer.go +++ b/vendor/go.uber.org/zap/zapcore/buffered_write_syncer.go @@ -188,32 +188,33 @@ func (s *BufferedWriteSyncer) flushLoop() { // Stop closes the buffer, cleans up background goroutines, and flushes // remaining unwritten data. func (s *BufferedWriteSyncer) Stop() (err error) { - var stopped bool - // Critical section. - func() { + stopped := func() bool { s.mu.Lock() defer s.mu.Unlock() if !s.initialized { - return + return false } - stopped = s.stopped - if stopped { - return + if s.stopped { + return false } s.stopped = true s.ticker.Stop() close(s.stop) // tell flushLoop to stop - <-s.done // and wait until it has + return true }() - // Don't call Sync on consecutive Stops. + // Not initialized, or already stopped, no need for any cleanup. if !stopped { - err = s.Sync() + return } - return err + // Wait for flushLoop to end outside of the lock, as it may need the lock to complete. + // See https://github.com/uber-go/zap/issues/1428 for details. + <-s.done + + return s.Sync() } diff --git a/vendor/go.uber.org/zap/zapcore/console_encoder.go b/vendor/go.uber.org/zap/zapcore/console_encoder.go index cc2b4e07b9..98eea5154d 100644 --- a/vendor/go.uber.org/zap/zapcore/console_encoder.go +++ b/vendor/go.uber.org/zap/zapcore/console_encoder.go @@ -105,7 +105,7 @@ func (c consoleEncoder) EncodeEntry(ent Entry, fields []Field) (*buffer.Buffer, if i > 0 { line.AppendString(c.ConsoleSeparator) } - fmt.Fprint(line, arr.elems[i]) + _, _ = fmt.Fprint(line, arr.elems[i]) } putSliceEncoder(arr) diff --git a/vendor/go.uber.org/zap/zapcore/entry.go b/vendor/go.uber.org/zap/zapcore/entry.go index 459a5d7ce3..841752f2ed 100644 --- a/vendor/go.uber.org/zap/zapcore/entry.go +++ b/vendor/go.uber.org/zap/zapcore/entry.go @@ -241,7 +241,12 @@ func (ce *CheckedEntry) Write(fields ...Field) { // If the entry is dirty, log an internal error; because the // CheckedEntry is being used after it was returned to the pool, // the message may be an amalgamation from multiple call sites. - fmt.Fprintf(ce.ErrorOutput, "%v Unsafe CheckedEntry re-use near Entry %+v.\n", ce.Time, ce.Entry) + _, _ = fmt.Fprintf( + ce.ErrorOutput, + "%v Unsafe CheckedEntry re-use near Entry %+v.\n", + ce.Time, + ce.Entry, + ) _ = ce.ErrorOutput.Sync() // ignore error } return @@ -253,7 +258,12 @@ func (ce *CheckedEntry) Write(fields ...Field) { err = multierr.Append(err, ce.cores[i].Write(ce.Entry, fields)) } if err != nil && ce.ErrorOutput != nil { - fmt.Fprintf(ce.ErrorOutput, "%v write error: %v\n", ce.Time, err) + _, _ = fmt.Fprintf( + ce.ErrorOutput, + "%v write error: %v\n", + ce.Time, + err, + ) _ = ce.ErrorOutput.Sync() // ignore error } diff --git a/vendor/go.uber.org/zap/zapcore/lazy_with.go b/vendor/go.uber.org/zap/zapcore/lazy_with.go index 05288d6a88..500809de08 100644 --- a/vendor/go.uber.org/zap/zapcore/lazy_with.go +++ b/vendor/go.uber.org/zap/zapcore/lazy_with.go @@ -23,7 +23,8 @@ package zapcore import "sync" type lazyWithCore struct { - Core + core Core + originalCore Core sync.Once fields []Field } @@ -32,23 +33,45 @@ type lazyWithCore struct { // the logger is written to (or is further chained in a lon-lazy manner). func NewLazyWith(core Core, fields []Field) Core { return &lazyWithCore{ - Core: core, - fields: fields, + core: nil, // core is allocated once `initOnce` is called. + originalCore: core, + fields: fields, } } func (d *lazyWithCore) initOnce() { d.Once.Do(func() { - d.Core = d.Core.With(d.fields) + d.core = d.originalCore.With(d.fields) }) } func (d *lazyWithCore) With(fields []Field) Core { d.initOnce() - return d.Core.With(fields) + return d.core.With(fields) } func (d *lazyWithCore) Check(e Entry, ce *CheckedEntry) *CheckedEntry { + // This is safe because `lazyWithCore` doesn't change the level. + // So we can delagate the level check, any not `initOnce` + // just for the check. + if !d.originalCore.Enabled(e.Level) { + return ce + } + d.initOnce() + return d.core.Check(e, ce) +} + +func (d *lazyWithCore) Enabled(level Level) bool { + // Like above, this is safe because `lazyWithCore` doesn't change the level. + return d.originalCore.Enabled(level) +} + +func (d *lazyWithCore) Write(e Entry, fields []Field) error { + d.initOnce() + return d.core.Write(e, fields) +} + +func (d *lazyWithCore) Sync() error { d.initOnce() - return d.Core.Check(e, ce) + return d.core.Sync() } diff --git a/vendor/go.uber.org/zap/zapcore/level.go b/vendor/go.uber.org/zap/zapcore/level.go index e01a241316..f3e166d67b 100644 --- a/vendor/go.uber.org/zap/zapcore/level.go +++ b/vendor/go.uber.org/zap/zapcore/level.go @@ -179,19 +179,19 @@ func (l *Level) UnmarshalText(text []byte) error { func (l *Level) unmarshalText(text []byte) bool { switch string(text) { - case "debug", "DEBUG": + case "debug": *l = DebugLevel - case "info", "INFO", "": // make the zero value useful + case "info", "": // make the zero value useful *l = InfoLevel - case "warn", "WARN": + case "warn", "warning": *l = WarnLevel - case "error", "ERROR": + case "error": *l = ErrorLevel - case "dpanic", "DPANIC": + case "dpanic": *l = DPanicLevel - case "panic", "PANIC": + case "panic": *l = PanicLevel - case "fatal", "FATAL": + case "fatal": *l = FatalLevel default: return false diff --git a/vendor/golang.org/x/crypto/ocsp/ocsp.go b/vendor/golang.org/x/crypto/ocsp/ocsp.go deleted file mode 100644 index e6c645e7ce..0000000000 --- a/vendor/golang.org/x/crypto/ocsp/ocsp.go +++ /dev/null @@ -1,793 +0,0 @@ -// Copyright 2013 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. - -// Package ocsp parses OCSP responses as specified in RFC 2560. OCSP responses -// are signed messages attesting to the validity of a certificate for a small -// period of time. This is used to manage revocation for X.509 certificates. -package ocsp - -import ( - "crypto" - "crypto/ecdsa" - "crypto/elliptic" - "crypto/rand" - "crypto/rsa" - _ "crypto/sha1" - _ "crypto/sha256" - _ "crypto/sha512" - "crypto/x509" - "crypto/x509/pkix" - "encoding/asn1" - "errors" - "fmt" - "math/big" - "strconv" - "time" -) - -var idPKIXOCSPBasic = asn1.ObjectIdentifier([]int{1, 3, 6, 1, 5, 5, 7, 48, 1, 1}) - -// ResponseStatus contains the result of an OCSP request. See -// https://tools.ietf.org/html/rfc6960#section-2.3 -type ResponseStatus int - -const ( - Success ResponseStatus = 0 - Malformed ResponseStatus = 1 - InternalError ResponseStatus = 2 - TryLater ResponseStatus = 3 - // Status code four is unused in OCSP. See - // https://tools.ietf.org/html/rfc6960#section-4.2.1 - SignatureRequired ResponseStatus = 5 - Unauthorized ResponseStatus = 6 -) - -func (r ResponseStatus) String() string { - switch r { - case Success: - return "success" - case Malformed: - return "malformed" - case InternalError: - return "internal error" - case TryLater: - return "try later" - case SignatureRequired: - return "signature required" - case Unauthorized: - return "unauthorized" - default: - return "unknown OCSP status: " + strconv.Itoa(int(r)) - } -} - -// ResponseError is an error that may be returned by ParseResponse to indicate -// that the response itself is an error, not just that it's indicating that a -// certificate is revoked, unknown, etc. -type ResponseError struct { - Status ResponseStatus -} - -func (r ResponseError) Error() string { - return "ocsp: error from server: " + r.Status.String() -} - -// These are internal structures that reflect the ASN.1 structure of an OCSP -// response. See RFC 2560, section 4.2. - -type certID struct { - HashAlgorithm pkix.AlgorithmIdentifier - NameHash []byte - IssuerKeyHash []byte - SerialNumber *big.Int -} - -// https://tools.ietf.org/html/rfc2560#section-4.1.1 -type ocspRequest struct { - TBSRequest tbsRequest -} - -type tbsRequest struct { - Version int `asn1:"explicit,tag:0,default:0,optional"` - RequestorName pkix.RDNSequence `asn1:"explicit,tag:1,optional"` - RequestList []request -} - -type request struct { - Cert certID -} - -type responseASN1 struct { - Status asn1.Enumerated - Response responseBytes `asn1:"explicit,tag:0,optional"` -} - -type responseBytes struct { - ResponseType asn1.ObjectIdentifier - Response []byte -} - -type basicResponse struct { - TBSResponseData responseData - SignatureAlgorithm pkix.AlgorithmIdentifier - Signature asn1.BitString - Certificates []asn1.RawValue `asn1:"explicit,tag:0,optional"` -} - -type responseData struct { - Raw asn1.RawContent - Version int `asn1:"optional,default:0,explicit,tag:0"` - RawResponderID asn1.RawValue - ProducedAt time.Time `asn1:"generalized"` - Responses []singleResponse -} - -type singleResponse struct { - CertID certID - Good asn1.Flag `asn1:"tag:0,optional"` - Revoked revokedInfo `asn1:"tag:1,optional"` - Unknown asn1.Flag `asn1:"tag:2,optional"` - ThisUpdate time.Time `asn1:"generalized"` - NextUpdate time.Time `asn1:"generalized,explicit,tag:0,optional"` - SingleExtensions []pkix.Extension `asn1:"explicit,tag:1,optional"` -} - -type revokedInfo struct { - RevocationTime time.Time `asn1:"generalized"` - Reason asn1.Enumerated `asn1:"explicit,tag:0,optional"` -} - -var ( - oidSignatureMD2WithRSA = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 2} - oidSignatureMD5WithRSA = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 4} - oidSignatureSHA1WithRSA = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 5} - oidSignatureSHA256WithRSA = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 11} - oidSignatureSHA384WithRSA = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 12} - oidSignatureSHA512WithRSA = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 13} - oidSignatureDSAWithSHA1 = asn1.ObjectIdentifier{1, 2, 840, 10040, 4, 3} - oidSignatureDSAWithSHA256 = asn1.ObjectIdentifier{2, 16, 840, 1, 101, 3, 4, 3, 2} - oidSignatureECDSAWithSHA1 = asn1.ObjectIdentifier{1, 2, 840, 10045, 4, 1} - oidSignatureECDSAWithSHA256 = asn1.ObjectIdentifier{1, 2, 840, 10045, 4, 3, 2} - oidSignatureECDSAWithSHA384 = asn1.ObjectIdentifier{1, 2, 840, 10045, 4, 3, 3} - oidSignatureECDSAWithSHA512 = asn1.ObjectIdentifier{1, 2, 840, 10045, 4, 3, 4} -) - -var hashOIDs = map[crypto.Hash]asn1.ObjectIdentifier{ - crypto.SHA1: asn1.ObjectIdentifier([]int{1, 3, 14, 3, 2, 26}), - crypto.SHA256: asn1.ObjectIdentifier([]int{2, 16, 840, 1, 101, 3, 4, 2, 1}), - crypto.SHA384: asn1.ObjectIdentifier([]int{2, 16, 840, 1, 101, 3, 4, 2, 2}), - crypto.SHA512: asn1.ObjectIdentifier([]int{2, 16, 840, 1, 101, 3, 4, 2, 3}), -} - -// TODO(rlb): This is also from crypto/x509, so same comment as AGL's below -var signatureAlgorithmDetails = []struct { - algo x509.SignatureAlgorithm - oid asn1.ObjectIdentifier - pubKeyAlgo x509.PublicKeyAlgorithm - hash crypto.Hash -}{ - {x509.MD2WithRSA, oidSignatureMD2WithRSA, x509.RSA, crypto.Hash(0) /* no value for MD2 */}, - {x509.MD5WithRSA, oidSignatureMD5WithRSA, x509.RSA, crypto.MD5}, - {x509.SHA1WithRSA, oidSignatureSHA1WithRSA, x509.RSA, crypto.SHA1}, - {x509.SHA256WithRSA, oidSignatureSHA256WithRSA, x509.RSA, crypto.SHA256}, - {x509.SHA384WithRSA, oidSignatureSHA384WithRSA, x509.RSA, crypto.SHA384}, - {x509.SHA512WithRSA, oidSignatureSHA512WithRSA, x509.RSA, crypto.SHA512}, - {x509.DSAWithSHA1, oidSignatureDSAWithSHA1, x509.DSA, crypto.SHA1}, - {x509.DSAWithSHA256, oidSignatureDSAWithSHA256, x509.DSA, crypto.SHA256}, - {x509.ECDSAWithSHA1, oidSignatureECDSAWithSHA1, x509.ECDSA, crypto.SHA1}, - {x509.ECDSAWithSHA256, oidSignatureECDSAWithSHA256, x509.ECDSA, crypto.SHA256}, - {x509.ECDSAWithSHA384, oidSignatureECDSAWithSHA384, x509.ECDSA, crypto.SHA384}, - {x509.ECDSAWithSHA512, oidSignatureECDSAWithSHA512, x509.ECDSA, crypto.SHA512}, -} - -// TODO(rlb): This is also from crypto/x509, so same comment as AGL's below -func signingParamsForPublicKey(pub interface{}, requestedSigAlgo x509.SignatureAlgorithm) (hashFunc crypto.Hash, sigAlgo pkix.AlgorithmIdentifier, err error) { - var pubType x509.PublicKeyAlgorithm - - switch pub := pub.(type) { - case *rsa.PublicKey: - pubType = x509.RSA - hashFunc = crypto.SHA256 - sigAlgo.Algorithm = oidSignatureSHA256WithRSA - sigAlgo.Parameters = asn1.RawValue{ - Tag: 5, - } - - case *ecdsa.PublicKey: - pubType = x509.ECDSA - - switch pub.Curve { - case elliptic.P224(), elliptic.P256(): - hashFunc = crypto.SHA256 - sigAlgo.Algorithm = oidSignatureECDSAWithSHA256 - case elliptic.P384(): - hashFunc = crypto.SHA384 - sigAlgo.Algorithm = oidSignatureECDSAWithSHA384 - case elliptic.P521(): - hashFunc = crypto.SHA512 - sigAlgo.Algorithm = oidSignatureECDSAWithSHA512 - default: - err = errors.New("x509: unknown elliptic curve") - } - - default: - err = errors.New("x509: only RSA and ECDSA keys supported") - } - - if err != nil { - return - } - - if requestedSigAlgo == 0 { - return - } - - found := false - for _, details := range signatureAlgorithmDetails { - if details.algo == requestedSigAlgo { - if details.pubKeyAlgo != pubType { - err = errors.New("x509: requested SignatureAlgorithm does not match private key type") - return - } - sigAlgo.Algorithm, hashFunc = details.oid, details.hash - if hashFunc == 0 { - err = errors.New("x509: cannot sign with hash function requested") - return - } - found = true - break - } - } - - if !found { - err = errors.New("x509: unknown SignatureAlgorithm") - } - - return -} - -// TODO(agl): this is taken from crypto/x509 and so should probably be exported -// from crypto/x509 or crypto/x509/pkix. -func getSignatureAlgorithmFromOID(oid asn1.ObjectIdentifier) x509.SignatureAlgorithm { - for _, details := range signatureAlgorithmDetails { - if oid.Equal(details.oid) { - return details.algo - } - } - return x509.UnknownSignatureAlgorithm -} - -// TODO(rlb): This is not taken from crypto/x509, but it's of the same general form. -func getHashAlgorithmFromOID(target asn1.ObjectIdentifier) crypto.Hash { - for hash, oid := range hashOIDs { - if oid.Equal(target) { - return hash - } - } - return crypto.Hash(0) -} - -func getOIDFromHashAlgorithm(target crypto.Hash) asn1.ObjectIdentifier { - for hash, oid := range hashOIDs { - if hash == target { - return oid - } - } - return nil -} - -// This is the exposed reflection of the internal OCSP structures. - -// The status values that can be expressed in OCSP. See RFC 6960. -// These are used for the Response.Status field. -const ( - // Good means that the certificate is valid. - Good = 0 - // Revoked means that the certificate has been deliberately revoked. - Revoked = 1 - // Unknown means that the OCSP responder doesn't know about the certificate. - Unknown = 2 - // ServerFailed is unused and was never used (see - // https://go-review.googlesource.com/#/c/18944). ParseResponse will - // return a ResponseError when an error response is parsed. - ServerFailed = 3 -) - -// The enumerated reasons for revoking a certificate. See RFC 5280. -const ( - Unspecified = 0 - KeyCompromise = 1 - CACompromise = 2 - AffiliationChanged = 3 - Superseded = 4 - CessationOfOperation = 5 - CertificateHold = 6 - - RemoveFromCRL = 8 - PrivilegeWithdrawn = 9 - AACompromise = 10 -) - -// Request represents an OCSP request. See RFC 6960. -type Request struct { - HashAlgorithm crypto.Hash - IssuerNameHash []byte - IssuerKeyHash []byte - SerialNumber *big.Int -} - -// Marshal marshals the OCSP request to ASN.1 DER encoded form. -func (req *Request) Marshal() ([]byte, error) { - hashAlg := getOIDFromHashAlgorithm(req.HashAlgorithm) - if hashAlg == nil { - return nil, errors.New("Unknown hash algorithm") - } - return asn1.Marshal(ocspRequest{ - tbsRequest{ - Version: 0, - RequestList: []request{ - { - Cert: certID{ - pkix.AlgorithmIdentifier{ - Algorithm: hashAlg, - Parameters: asn1.RawValue{Tag: 5 /* ASN.1 NULL */}, - }, - req.IssuerNameHash, - req.IssuerKeyHash, - req.SerialNumber, - }, - }, - }, - }, - }) -} - -// Response represents an OCSP response containing a single SingleResponse. See -// RFC 6960. -type Response struct { - Raw []byte - - // Status is one of {Good, Revoked, Unknown} - Status int - SerialNumber *big.Int - ProducedAt, ThisUpdate, NextUpdate, RevokedAt time.Time - RevocationReason int - Certificate *x509.Certificate - // TBSResponseData contains the raw bytes of the signed response. If - // Certificate is nil then this can be used to verify Signature. - TBSResponseData []byte - Signature []byte - SignatureAlgorithm x509.SignatureAlgorithm - - // IssuerHash is the hash used to compute the IssuerNameHash and IssuerKeyHash. - // Valid values are crypto.SHA1, crypto.SHA256, crypto.SHA384, and crypto.SHA512. - // If zero, the default is crypto.SHA1. - IssuerHash crypto.Hash - - // RawResponderName optionally contains the DER-encoded subject of the - // responder certificate. Exactly one of RawResponderName and - // ResponderKeyHash is set. - RawResponderName []byte - // ResponderKeyHash optionally contains the SHA-1 hash of the - // responder's public key. Exactly one of RawResponderName and - // ResponderKeyHash is set. - ResponderKeyHash []byte - - // Extensions contains raw X.509 extensions from the singleExtensions field - // of the OCSP response. When parsing certificates, this can be used to - // extract non-critical extensions that are not parsed by this package. When - // marshaling OCSP responses, the Extensions field is ignored, see - // ExtraExtensions. - Extensions []pkix.Extension - - // ExtraExtensions contains extensions to be copied, raw, into any marshaled - // OCSP response (in the singleExtensions field). Values override any - // extensions that would otherwise be produced based on the other fields. The - // ExtraExtensions field is not populated when parsing certificates, see - // Extensions. - ExtraExtensions []pkix.Extension -} - -// These are pre-serialized error responses for the various non-success codes -// defined by OCSP. The Unauthorized code in particular can be used by an OCSP -// responder that supports only pre-signed responses as a response to requests -// for certificates with unknown status. See RFC 5019. -var ( - MalformedRequestErrorResponse = []byte{0x30, 0x03, 0x0A, 0x01, 0x01} - InternalErrorErrorResponse = []byte{0x30, 0x03, 0x0A, 0x01, 0x02} - TryLaterErrorResponse = []byte{0x30, 0x03, 0x0A, 0x01, 0x03} - SigRequredErrorResponse = []byte{0x30, 0x03, 0x0A, 0x01, 0x05} - UnauthorizedErrorResponse = []byte{0x30, 0x03, 0x0A, 0x01, 0x06} -) - -// CheckSignatureFrom checks that the signature in resp is a valid signature -// from issuer. This should only be used if resp.Certificate is nil. Otherwise, -// the OCSP response contained an intermediate certificate that created the -// signature. That signature is checked by ParseResponse and only -// resp.Certificate remains to be validated. -func (resp *Response) CheckSignatureFrom(issuer *x509.Certificate) error { - return issuer.CheckSignature(resp.SignatureAlgorithm, resp.TBSResponseData, resp.Signature) -} - -// ParseError results from an invalid OCSP response. -type ParseError string - -func (p ParseError) Error() string { - return string(p) -} - -// ParseRequest parses an OCSP request in DER form. It only supports -// requests for a single certificate. Signed requests are not supported. -// If a request includes a signature, it will result in a ParseError. -func ParseRequest(bytes []byte) (*Request, error) { - var req ocspRequest - rest, err := asn1.Unmarshal(bytes, &req) - if err != nil { - return nil, err - } - if len(rest) > 0 { - return nil, ParseError("trailing data in OCSP request") - } - - if len(req.TBSRequest.RequestList) == 0 { - return nil, ParseError("OCSP request contains no request body") - } - innerRequest := req.TBSRequest.RequestList[0] - - hashFunc := getHashAlgorithmFromOID(innerRequest.Cert.HashAlgorithm.Algorithm) - if hashFunc == crypto.Hash(0) { - return nil, ParseError("OCSP request uses unknown hash function") - } - - return &Request{ - HashAlgorithm: hashFunc, - IssuerNameHash: innerRequest.Cert.NameHash, - IssuerKeyHash: innerRequest.Cert.IssuerKeyHash, - SerialNumber: innerRequest.Cert.SerialNumber, - }, nil -} - -// ParseResponse parses an OCSP response in DER form. The response must contain -// only one certificate status. To parse the status of a specific certificate -// from a response which may contain multiple statuses, use ParseResponseForCert -// instead. -// -// If the response contains an embedded certificate, then that certificate will -// be used to verify the response signature. If the response contains an -// embedded certificate and issuer is not nil, then issuer will be used to verify -// the signature on the embedded certificate. -// -// If the response does not contain an embedded certificate and issuer is not -// nil, then issuer will be used to verify the response signature. -// -// Invalid responses and parse failures will result in a ParseError. -// Error responses will result in a ResponseError. -func ParseResponse(bytes []byte, issuer *x509.Certificate) (*Response, error) { - return ParseResponseForCert(bytes, nil, issuer) -} - -// ParseResponseForCert acts identically to ParseResponse, except it supports -// parsing responses that contain multiple statuses. If the response contains -// multiple statuses and cert is not nil, then ParseResponseForCert will return -// the first status which contains a matching serial, otherwise it will return an -// error. If cert is nil, then the first status in the response will be returned. -func ParseResponseForCert(bytes []byte, cert, issuer *x509.Certificate) (*Response, error) { - var resp responseASN1 - rest, err := asn1.Unmarshal(bytes, &resp) - if err != nil { - return nil, err - } - if len(rest) > 0 { - return nil, ParseError("trailing data in OCSP response") - } - - if status := ResponseStatus(resp.Status); status != Success { - return nil, ResponseError{status} - } - - if !resp.Response.ResponseType.Equal(idPKIXOCSPBasic) { - return nil, ParseError("bad OCSP response type") - } - - var basicResp basicResponse - rest, err = asn1.Unmarshal(resp.Response.Response, &basicResp) - if err != nil { - return nil, err - } - if len(rest) > 0 { - return nil, ParseError("trailing data in OCSP response") - } - - if n := len(basicResp.TBSResponseData.Responses); n == 0 || cert == nil && n > 1 { - return nil, ParseError("OCSP response contains bad number of responses") - } - - var singleResp singleResponse - if cert == nil { - singleResp = basicResp.TBSResponseData.Responses[0] - } else { - match := false - for _, resp := range basicResp.TBSResponseData.Responses { - if cert.SerialNumber.Cmp(resp.CertID.SerialNumber) == 0 { - singleResp = resp - match = true - break - } - } - if !match { - return nil, ParseError("no response matching the supplied certificate") - } - } - - ret := &Response{ - Raw: bytes, - TBSResponseData: basicResp.TBSResponseData.Raw, - Signature: basicResp.Signature.RightAlign(), - SignatureAlgorithm: getSignatureAlgorithmFromOID(basicResp.SignatureAlgorithm.Algorithm), - Extensions: singleResp.SingleExtensions, - SerialNumber: singleResp.CertID.SerialNumber, - ProducedAt: basicResp.TBSResponseData.ProducedAt, - ThisUpdate: singleResp.ThisUpdate, - NextUpdate: singleResp.NextUpdate, - } - - // Handle the ResponderID CHOICE tag. ResponderID can be flattened into - // TBSResponseData once https://go-review.googlesource.com/34503 has been - // released. - rawResponderID := basicResp.TBSResponseData.RawResponderID - switch rawResponderID.Tag { - case 1: // Name - var rdn pkix.RDNSequence - if rest, err := asn1.Unmarshal(rawResponderID.Bytes, &rdn); err != nil || len(rest) != 0 { - return nil, ParseError("invalid responder name") - } - ret.RawResponderName = rawResponderID.Bytes - case 2: // KeyHash - if rest, err := asn1.Unmarshal(rawResponderID.Bytes, &ret.ResponderKeyHash); err != nil || len(rest) != 0 { - return nil, ParseError("invalid responder key hash") - } - default: - return nil, ParseError("invalid responder id tag") - } - - if len(basicResp.Certificates) > 0 { - // Responders should only send a single certificate (if they - // send any) that connects the responder's certificate to the - // original issuer. We accept responses with multiple - // certificates due to a number responders sending them[1], but - // ignore all but the first. - // - // [1] https://github.com/golang/go/issues/21527 - ret.Certificate, err = x509.ParseCertificate(basicResp.Certificates[0].FullBytes) - if err != nil { - return nil, err - } - - if err := ret.CheckSignatureFrom(ret.Certificate); err != nil { - return nil, ParseError("bad signature on embedded certificate: " + err.Error()) - } - - if issuer != nil { - if err := issuer.CheckSignature(ret.Certificate.SignatureAlgorithm, ret.Certificate.RawTBSCertificate, ret.Certificate.Signature); err != nil { - return nil, ParseError("bad OCSP signature: " + err.Error()) - } - } - } else if issuer != nil { - if err := ret.CheckSignatureFrom(issuer); err != nil { - return nil, ParseError("bad OCSP signature: " + err.Error()) - } - } - - for _, ext := range singleResp.SingleExtensions { - if ext.Critical { - return nil, ParseError("unsupported critical extension") - } - } - - for h, oid := range hashOIDs { - if singleResp.CertID.HashAlgorithm.Algorithm.Equal(oid) { - ret.IssuerHash = h - break - } - } - if ret.IssuerHash == 0 { - return nil, ParseError("unsupported issuer hash algorithm") - } - - switch { - case bool(singleResp.Good): - ret.Status = Good - case bool(singleResp.Unknown): - ret.Status = Unknown - default: - ret.Status = Revoked - ret.RevokedAt = singleResp.Revoked.RevocationTime - ret.RevocationReason = int(singleResp.Revoked.Reason) - } - - return ret, nil -} - -// RequestOptions contains options for constructing OCSP requests. -type RequestOptions struct { - // Hash contains the hash function that should be used when - // constructing the OCSP request. If zero, SHA-1 will be used. - Hash crypto.Hash -} - -func (opts *RequestOptions) hash() crypto.Hash { - if opts == nil || opts.Hash == 0 { - // SHA-1 is nearly universally used in OCSP. - return crypto.SHA1 - } - return opts.Hash -} - -// CreateRequest returns a DER-encoded, OCSP request for the status of cert. If -// opts is nil then sensible defaults are used. -func CreateRequest(cert, issuer *x509.Certificate, opts *RequestOptions) ([]byte, error) { - hashFunc := opts.hash() - - // OCSP seems to be the only place where these raw hash identifiers are - // used. I took the following from - // http://msdn.microsoft.com/en-us/library/ff635603.aspx - _, ok := hashOIDs[hashFunc] - if !ok { - return nil, x509.ErrUnsupportedAlgorithm - } - - if !hashFunc.Available() { - return nil, x509.ErrUnsupportedAlgorithm - } - h := opts.hash().New() - - var publicKeyInfo struct { - Algorithm pkix.AlgorithmIdentifier - PublicKey asn1.BitString - } - if _, err := asn1.Unmarshal(issuer.RawSubjectPublicKeyInfo, &publicKeyInfo); err != nil { - return nil, err - } - - h.Write(publicKeyInfo.PublicKey.RightAlign()) - issuerKeyHash := h.Sum(nil) - - h.Reset() - h.Write(issuer.RawSubject) - issuerNameHash := h.Sum(nil) - - req := &Request{ - HashAlgorithm: hashFunc, - IssuerNameHash: issuerNameHash, - IssuerKeyHash: issuerKeyHash, - SerialNumber: cert.SerialNumber, - } - return req.Marshal() -} - -// CreateResponse returns a DER-encoded OCSP response with the specified contents. -// The fields in the response are populated as follows: -// -// The responder cert is used to populate the responder's name field, and the -// certificate itself is provided alongside the OCSP response signature. -// -// The issuer cert is used to populate the IssuerNameHash and IssuerKeyHash fields. -// -// The template is used to populate the SerialNumber, Status, RevokedAt, -// RevocationReason, ThisUpdate, and NextUpdate fields. -// -// If template.IssuerHash is not set, SHA1 will be used. -// -// The ProducedAt date is automatically set to the current date, to the nearest minute. -func CreateResponse(issuer, responderCert *x509.Certificate, template Response, priv crypto.Signer) ([]byte, error) { - var publicKeyInfo struct { - Algorithm pkix.AlgorithmIdentifier - PublicKey asn1.BitString - } - if _, err := asn1.Unmarshal(issuer.RawSubjectPublicKeyInfo, &publicKeyInfo); err != nil { - return nil, err - } - - if template.IssuerHash == 0 { - template.IssuerHash = crypto.SHA1 - } - hashOID := getOIDFromHashAlgorithm(template.IssuerHash) - if hashOID == nil { - return nil, errors.New("unsupported issuer hash algorithm") - } - - if !template.IssuerHash.Available() { - return nil, fmt.Errorf("issuer hash algorithm %v not linked into binary", template.IssuerHash) - } - h := template.IssuerHash.New() - h.Write(publicKeyInfo.PublicKey.RightAlign()) - issuerKeyHash := h.Sum(nil) - - h.Reset() - h.Write(issuer.RawSubject) - issuerNameHash := h.Sum(nil) - - innerResponse := singleResponse{ - CertID: certID{ - HashAlgorithm: pkix.AlgorithmIdentifier{ - Algorithm: hashOID, - Parameters: asn1.RawValue{Tag: 5 /* ASN.1 NULL */}, - }, - NameHash: issuerNameHash, - IssuerKeyHash: issuerKeyHash, - SerialNumber: template.SerialNumber, - }, - ThisUpdate: template.ThisUpdate.UTC(), - NextUpdate: template.NextUpdate.UTC(), - SingleExtensions: template.ExtraExtensions, - } - - switch template.Status { - case Good: - innerResponse.Good = true - case Unknown: - innerResponse.Unknown = true - case Revoked: - innerResponse.Revoked = revokedInfo{ - RevocationTime: template.RevokedAt.UTC(), - Reason: asn1.Enumerated(template.RevocationReason), - } - } - - rawResponderID := asn1.RawValue{ - Class: 2, // context-specific - Tag: 1, // Name (explicit tag) - IsCompound: true, - Bytes: responderCert.RawSubject, - } - tbsResponseData := responseData{ - Version: 0, - RawResponderID: rawResponderID, - ProducedAt: time.Now().Truncate(time.Minute).UTC(), - Responses: []singleResponse{innerResponse}, - } - - tbsResponseDataDER, err := asn1.Marshal(tbsResponseData) - if err != nil { - return nil, err - } - - hashFunc, signatureAlgorithm, err := signingParamsForPublicKey(priv.Public(), template.SignatureAlgorithm) - if err != nil { - return nil, err - } - - responseHash := hashFunc.New() - responseHash.Write(tbsResponseDataDER) - signature, err := priv.Sign(rand.Reader, responseHash.Sum(nil), hashFunc) - if err != nil { - return nil, err - } - - response := basicResponse{ - TBSResponseData: tbsResponseData, - SignatureAlgorithm: signatureAlgorithm, - Signature: asn1.BitString{ - Bytes: signature, - BitLength: 8 * len(signature), - }, - } - if template.Certificate != nil { - response.Certificates = []asn1.RawValue{ - {FullBytes: template.Certificate.Raw}, - } - } - responseDER, err := asn1.Marshal(response) - if err != nil { - return nil, err - } - - return asn1.Marshal(responseASN1{ - Status: asn1.Enumerated(Success), - Response: responseBytes{ - ResponseType: idPKIXOCSPBasic, - Response: responseDER, - }, - }) -} diff --git a/vendor/golang.org/x/crypto/sha3/hashes.go b/vendor/golang.org/x/crypto/sha3/hashes.go deleted file mode 100644 index a51269d91a..0000000000 --- a/vendor/golang.org/x/crypto/sha3/hashes.go +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright 2014 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. - -// Package sha3 implements the SHA-3 hash algorithms and the SHAKE extendable -// output functions defined in FIPS 202. -// -// Most of this package is a wrapper around the crypto/sha3 package in the -// standard library. The only exception is the legacy Keccak hash functions. -package sha3 - -import ( - "crypto/sha3" - "hash" -) - -// New224 creates a new SHA3-224 hash. -// Its generic security strength is 224 bits against preimage attacks, -// and 112 bits against collision attacks. -// -// It is a wrapper for the [sha3.New224] function in the standard library. -// -//go:fix inline -func New224() hash.Hash { - return sha3.New224() -} - -// New256 creates a new SHA3-256 hash. -// Its generic security strength is 256 bits against preimage attacks, -// and 128 bits against collision attacks. -// -// It is a wrapper for the [sha3.New256] function in the standard library. -// -//go:fix inline -func New256() hash.Hash { - return sha3.New256() -} - -// New384 creates a new SHA3-384 hash. -// Its generic security strength is 384 bits against preimage attacks, -// and 192 bits against collision attacks. -// -// It is a wrapper for the [sha3.New384] function in the standard library. -// -//go:fix inline -func New384() hash.Hash { - return sha3.New384() -} - -// New512 creates a new SHA3-512 hash. -// Its generic security strength is 512 bits against preimage attacks, -// and 256 bits against collision attacks. -// -// It is a wrapper for the [sha3.New512] function in the standard library. -// -//go:fix inline -func New512() hash.Hash { - return sha3.New512() -} - -// Sum224 returns the SHA3-224 digest of the data. -// -// It is a wrapper for the [sha3.Sum224] function in the standard library. -// -//go:fix inline -func Sum224(data []byte) [28]byte { - return sha3.Sum224(data) -} - -// Sum256 returns the SHA3-256 digest of the data. -// -// It is a wrapper for the [sha3.Sum256] function in the standard library. -// -//go:fix inline -func Sum256(data []byte) [32]byte { - return sha3.Sum256(data) -} - -// Sum384 returns the SHA3-384 digest of the data. -// -// It is a wrapper for the [sha3.Sum384] function in the standard library. -// -//go:fix inline -func Sum384(data []byte) [48]byte { - return sha3.Sum384(data) -} - -// Sum512 returns the SHA3-512 digest of the data. -// -// It is a wrapper for the [sha3.Sum512] function in the standard library. -// -//go:fix inline -func Sum512(data []byte) [64]byte { - return sha3.Sum512(data) -} diff --git a/vendor/golang.org/x/crypto/sha3/legacy_hash.go b/vendor/golang.org/x/crypto/sha3/legacy_hash.go deleted file mode 100644 index b8784536e0..0000000000 --- a/vendor/golang.org/x/crypto/sha3/legacy_hash.go +++ /dev/null @@ -1,263 +0,0 @@ -// Copyright 2014 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. - -package sha3 - -// This implementation is only used for NewLegacyKeccak256 and -// NewLegacyKeccak512, which are not implemented by crypto/sha3. -// All other functions in this package are wrappers around crypto/sha3. - -import ( - "crypto/subtle" - "encoding/binary" - "errors" - "hash" - "unsafe" - - "golang.org/x/sys/cpu" -) - -const ( - dsbyteKeccak = 0b00000001 - - // rateK[c] is the rate in bytes for Keccak[c] where c is the capacity in - // bits. Given the sponge size is 1600 bits, the rate is 1600 - c bits. - rateK256 = (1600 - 256) / 8 - rateK512 = (1600 - 512) / 8 - rateK1024 = (1600 - 1024) / 8 -) - -// NewLegacyKeccak256 creates a new Keccak-256 hash. -// -// Only use this function if you require compatibility with an existing cryptosystem -// that uses non-standard padding. All other users should use New256 instead. -func NewLegacyKeccak256() hash.Hash { - return &state{rate: rateK512, outputLen: 32, dsbyte: dsbyteKeccak} -} - -// NewLegacyKeccak512 creates a new Keccak-512 hash. -// -// Only use this function if you require compatibility with an existing cryptosystem -// that uses non-standard padding. All other users should use New512 instead. -func NewLegacyKeccak512() hash.Hash { - return &state{rate: rateK1024, outputLen: 64, dsbyte: dsbyteKeccak} -} - -// spongeDirection indicates the direction bytes are flowing through the sponge. -type spongeDirection int - -const ( - // spongeAbsorbing indicates that the sponge is absorbing input. - spongeAbsorbing spongeDirection = iota - // spongeSqueezing indicates that the sponge is being squeezed. - spongeSqueezing -) - -type state struct { - a [1600 / 8]byte // main state of the hash - - // a[n:rate] is the buffer. If absorbing, it's the remaining space to XOR - // into before running the permutation. If squeezing, it's the remaining - // output to produce before running the permutation. - n, rate int - - // dsbyte contains the "domain separation" bits and the first bit of - // the padding. Sections 6.1 and 6.2 of [1] separate the outputs of the - // SHA-3 and SHAKE functions by appending bitstrings to the message. - // Using a little-endian bit-ordering convention, these are "01" for SHA-3 - // and "1111" for SHAKE, or 00000010b and 00001111b, respectively. Then the - // padding rule from section 5.1 is applied to pad the message to a multiple - // of the rate, which involves adding a "1" bit, zero or more "0" bits, and - // a final "1" bit. We merge the first "1" bit from the padding into dsbyte, - // giving 00000110b (0x06) and 00011111b (0x1f). - // [1] http://csrc.nist.gov/publications/drafts/fips-202/fips_202_draft.pdf - // "Draft FIPS 202: SHA-3 Standard: Permutation-Based Hash and - // Extendable-Output Functions (May 2014)" - dsbyte byte - - outputLen int // the default output size in bytes - state spongeDirection // whether the sponge is absorbing or squeezing -} - -// BlockSize returns the rate of sponge underlying this hash function. -func (d *state) BlockSize() int { return d.rate } - -// Size returns the output size of the hash function in bytes. -func (d *state) Size() int { return d.outputLen } - -// Reset clears the internal state by zeroing the sponge state and -// the buffer indexes, and setting Sponge.state to absorbing. -func (d *state) Reset() { - // Zero the permutation's state. - for i := range d.a { - d.a[i] = 0 - } - d.state = spongeAbsorbing - d.n = 0 -} - -func (d *state) clone() *state { - ret := *d - return &ret -} - -// permute applies the KeccakF-1600 permutation. -func (d *state) permute() { - var a *[25]uint64 - if cpu.IsBigEndian { - a = new([25]uint64) - for i := range a { - a[i] = binary.LittleEndian.Uint64(d.a[i*8:]) - } - } else { - a = (*[25]uint64)(unsafe.Pointer(&d.a)) - } - - keccakF1600(a) - d.n = 0 - - if cpu.IsBigEndian { - for i := range a { - binary.LittleEndian.PutUint64(d.a[i*8:], a[i]) - } - } -} - -// pads appends the domain separation bits in dsbyte, applies -// the multi-bitrate 10..1 padding rule, and permutes the state. -func (d *state) padAndPermute() { - // Pad with this instance's domain-separator bits. We know that there's - // at least one byte of space in the sponge because, if it were full, - // permute would have been called to empty it. dsbyte also contains the - // first one bit for the padding. See the comment in the state struct. - d.a[d.n] ^= d.dsbyte - // This adds the final one bit for the padding. Because of the way that - // bits are numbered from the LSB upwards, the final bit is the MSB of - // the last byte. - d.a[d.rate-1] ^= 0x80 - // Apply the permutation - d.permute() - d.state = spongeSqueezing -} - -// Write absorbs more data into the hash's state. It panics if any -// output has already been read. -func (d *state) Write(p []byte) (n int, err error) { - if d.state != spongeAbsorbing { - panic("sha3: Write after Read") - } - - n = len(p) - - for len(p) > 0 { - x := subtle.XORBytes(d.a[d.n:d.rate], d.a[d.n:d.rate], p) - d.n += x - p = p[x:] - - // If the sponge is full, apply the permutation. - if d.n == d.rate { - d.permute() - } - } - - return -} - -// Read squeezes an arbitrary number of bytes from the sponge. -func (d *state) Read(out []byte) (n int, err error) { - // If we're still absorbing, pad and apply the permutation. - if d.state == spongeAbsorbing { - d.padAndPermute() - } - - n = len(out) - - // Now, do the squeezing. - for len(out) > 0 { - // Apply the permutation if we've squeezed the sponge dry. - if d.n == d.rate { - d.permute() - } - - x := copy(out, d.a[d.n:d.rate]) - d.n += x - out = out[x:] - } - - return -} - -// Sum applies padding to the hash state and then squeezes out the desired -// number of output bytes. It panics if any output has already been read. -func (d *state) Sum(in []byte) []byte { - if d.state != spongeAbsorbing { - panic("sha3: Sum after Read") - } - - // Make a copy of the original hash so that caller can keep writing - // and summing. - dup := d.clone() - hash := make([]byte, dup.outputLen, 64) // explicit cap to allow stack allocation - dup.Read(hash) - return append(in, hash...) -} - -const ( - magicKeccak = "sha\x0b" - // magic || rate || main state || n || sponge direction - marshaledSize = len(magicKeccak) + 1 + 200 + 1 + 1 -) - -func (d *state) MarshalBinary() ([]byte, error) { - return d.AppendBinary(make([]byte, 0, marshaledSize)) -} - -func (d *state) AppendBinary(b []byte) ([]byte, error) { - switch d.dsbyte { - case dsbyteKeccak: - b = append(b, magicKeccak...) - default: - panic("unknown dsbyte") - } - // rate is at most 168, and n is at most rate. - b = append(b, byte(d.rate)) - b = append(b, d.a[:]...) - b = append(b, byte(d.n), byte(d.state)) - return b, nil -} - -func (d *state) UnmarshalBinary(b []byte) error { - if len(b) != marshaledSize { - return errors.New("sha3: invalid hash state") - } - - magic := string(b[:len(magicKeccak)]) - b = b[len(magicKeccak):] - switch { - case magic == magicKeccak && d.dsbyte == dsbyteKeccak: - default: - return errors.New("sha3: invalid hash state identifier") - } - - rate := int(b[0]) - b = b[1:] - if rate != d.rate { - return errors.New("sha3: invalid hash state function") - } - - copy(d.a[:], b) - b = b[len(d.a):] - - n, state := int(b[0]), spongeDirection(b[1]) - if n > d.rate { - return errors.New("sha3: invalid hash state") - } - d.n = n - if state != spongeAbsorbing && state != spongeSqueezing { - return errors.New("sha3: invalid hash state") - } - d.state = state - - return nil -} diff --git a/vendor/golang.org/x/crypto/sha3/legacy_keccakf.go b/vendor/golang.org/x/crypto/sha3/legacy_keccakf.go deleted file mode 100644 index 101588c16c..0000000000 --- a/vendor/golang.org/x/crypto/sha3/legacy_keccakf.go +++ /dev/null @@ -1,416 +0,0 @@ -// Copyright 2014 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. - -package sha3 - -// This implementation is only used for NewLegacyKeccak256 and -// NewLegacyKeccak512, which are not implemented by crypto/sha3. -// All other functions in this package are wrappers around crypto/sha3. - -import "math/bits" - -// rc stores the round constants for use in the ι step. -var rc = [24]uint64{ - 0x0000000000000001, - 0x0000000000008082, - 0x800000000000808A, - 0x8000000080008000, - 0x000000000000808B, - 0x0000000080000001, - 0x8000000080008081, - 0x8000000000008009, - 0x000000000000008A, - 0x0000000000000088, - 0x0000000080008009, - 0x000000008000000A, - 0x000000008000808B, - 0x800000000000008B, - 0x8000000000008089, - 0x8000000000008003, - 0x8000000000008002, - 0x8000000000000080, - 0x000000000000800A, - 0x800000008000000A, - 0x8000000080008081, - 0x8000000000008080, - 0x0000000080000001, - 0x8000000080008008, -} - -// keccakF1600 applies the Keccak permutation to a 1600b-wide -// state represented as a slice of 25 uint64s. -func keccakF1600(a *[25]uint64) { - // Implementation translated from Keccak-inplace.c - // in the keccak reference code. - var t, bc0, bc1, bc2, bc3, bc4, d0, d1, d2, d3, d4 uint64 - - for i := 0; i < 24; i += 4 { - // Combines the 5 steps in each round into 2 steps. - // Unrolls 4 rounds per loop and spreads some steps across rounds. - - // Round 1 - bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] - bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] - bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] - bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] - bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] - d0 = bc4 ^ (bc1<<1 | bc1>>63) - d1 = bc0 ^ (bc2<<1 | bc2>>63) - d2 = bc1 ^ (bc3<<1 | bc3>>63) - d3 = bc2 ^ (bc4<<1 | bc4>>63) - d4 = bc3 ^ (bc0<<1 | bc0>>63) - - bc0 = a[0] ^ d0 - t = a[6] ^ d1 - bc1 = bits.RotateLeft64(t, 44) - t = a[12] ^ d2 - bc2 = bits.RotateLeft64(t, 43) - t = a[18] ^ d3 - bc3 = bits.RotateLeft64(t, 21) - t = a[24] ^ d4 - bc4 = bits.RotateLeft64(t, 14) - a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i] - a[6] = bc1 ^ (bc3 &^ bc2) - a[12] = bc2 ^ (bc4 &^ bc3) - a[18] = bc3 ^ (bc0 &^ bc4) - a[24] = bc4 ^ (bc1 &^ bc0) - - t = a[10] ^ d0 - bc2 = bits.RotateLeft64(t, 3) - t = a[16] ^ d1 - bc3 = bits.RotateLeft64(t, 45) - t = a[22] ^ d2 - bc4 = bits.RotateLeft64(t, 61) - t = a[3] ^ d3 - bc0 = bits.RotateLeft64(t, 28) - t = a[9] ^ d4 - bc1 = bits.RotateLeft64(t, 20) - a[10] = bc0 ^ (bc2 &^ bc1) - a[16] = bc1 ^ (bc3 &^ bc2) - a[22] = bc2 ^ (bc4 &^ bc3) - a[3] = bc3 ^ (bc0 &^ bc4) - a[9] = bc4 ^ (bc1 &^ bc0) - - t = a[20] ^ d0 - bc4 = bits.RotateLeft64(t, 18) - t = a[1] ^ d1 - bc0 = bits.RotateLeft64(t, 1) - t = a[7] ^ d2 - bc1 = bits.RotateLeft64(t, 6) - t = a[13] ^ d3 - bc2 = bits.RotateLeft64(t, 25) - t = a[19] ^ d4 - bc3 = bits.RotateLeft64(t, 8) - a[20] = bc0 ^ (bc2 &^ bc1) - a[1] = bc1 ^ (bc3 &^ bc2) - a[7] = bc2 ^ (bc4 &^ bc3) - a[13] = bc3 ^ (bc0 &^ bc4) - a[19] = bc4 ^ (bc1 &^ bc0) - - t = a[5] ^ d0 - bc1 = bits.RotateLeft64(t, 36) - t = a[11] ^ d1 - bc2 = bits.RotateLeft64(t, 10) - t = a[17] ^ d2 - bc3 = bits.RotateLeft64(t, 15) - t = a[23] ^ d3 - bc4 = bits.RotateLeft64(t, 56) - t = a[4] ^ d4 - bc0 = bits.RotateLeft64(t, 27) - a[5] = bc0 ^ (bc2 &^ bc1) - a[11] = bc1 ^ (bc3 &^ bc2) - a[17] = bc2 ^ (bc4 &^ bc3) - a[23] = bc3 ^ (bc0 &^ bc4) - a[4] = bc4 ^ (bc1 &^ bc0) - - t = a[15] ^ d0 - bc3 = bits.RotateLeft64(t, 41) - t = a[21] ^ d1 - bc4 = bits.RotateLeft64(t, 2) - t = a[2] ^ d2 - bc0 = bits.RotateLeft64(t, 62) - t = a[8] ^ d3 - bc1 = bits.RotateLeft64(t, 55) - t = a[14] ^ d4 - bc2 = bits.RotateLeft64(t, 39) - a[15] = bc0 ^ (bc2 &^ bc1) - a[21] = bc1 ^ (bc3 &^ bc2) - a[2] = bc2 ^ (bc4 &^ bc3) - a[8] = bc3 ^ (bc0 &^ bc4) - a[14] = bc4 ^ (bc1 &^ bc0) - - // Round 2 - bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] - bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] - bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] - bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] - bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] - d0 = bc4 ^ (bc1<<1 | bc1>>63) - d1 = bc0 ^ (bc2<<1 | bc2>>63) - d2 = bc1 ^ (bc3<<1 | bc3>>63) - d3 = bc2 ^ (bc4<<1 | bc4>>63) - d4 = bc3 ^ (bc0<<1 | bc0>>63) - - bc0 = a[0] ^ d0 - t = a[16] ^ d1 - bc1 = bits.RotateLeft64(t, 44) - t = a[7] ^ d2 - bc2 = bits.RotateLeft64(t, 43) - t = a[23] ^ d3 - bc3 = bits.RotateLeft64(t, 21) - t = a[14] ^ d4 - bc4 = bits.RotateLeft64(t, 14) - a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+1] - a[16] = bc1 ^ (bc3 &^ bc2) - a[7] = bc2 ^ (bc4 &^ bc3) - a[23] = bc3 ^ (bc0 &^ bc4) - a[14] = bc4 ^ (bc1 &^ bc0) - - t = a[20] ^ d0 - bc2 = bits.RotateLeft64(t, 3) - t = a[11] ^ d1 - bc3 = bits.RotateLeft64(t, 45) - t = a[2] ^ d2 - bc4 = bits.RotateLeft64(t, 61) - t = a[18] ^ d3 - bc0 = bits.RotateLeft64(t, 28) - t = a[9] ^ d4 - bc1 = bits.RotateLeft64(t, 20) - a[20] = bc0 ^ (bc2 &^ bc1) - a[11] = bc1 ^ (bc3 &^ bc2) - a[2] = bc2 ^ (bc4 &^ bc3) - a[18] = bc3 ^ (bc0 &^ bc4) - a[9] = bc4 ^ (bc1 &^ bc0) - - t = a[15] ^ d0 - bc4 = bits.RotateLeft64(t, 18) - t = a[6] ^ d1 - bc0 = bits.RotateLeft64(t, 1) - t = a[22] ^ d2 - bc1 = bits.RotateLeft64(t, 6) - t = a[13] ^ d3 - bc2 = bits.RotateLeft64(t, 25) - t = a[4] ^ d4 - bc3 = bits.RotateLeft64(t, 8) - a[15] = bc0 ^ (bc2 &^ bc1) - a[6] = bc1 ^ (bc3 &^ bc2) - a[22] = bc2 ^ (bc4 &^ bc3) - a[13] = bc3 ^ (bc0 &^ bc4) - a[4] = bc4 ^ (bc1 &^ bc0) - - t = a[10] ^ d0 - bc1 = bits.RotateLeft64(t, 36) - t = a[1] ^ d1 - bc2 = bits.RotateLeft64(t, 10) - t = a[17] ^ d2 - bc3 = bits.RotateLeft64(t, 15) - t = a[8] ^ d3 - bc4 = bits.RotateLeft64(t, 56) - t = a[24] ^ d4 - bc0 = bits.RotateLeft64(t, 27) - a[10] = bc0 ^ (bc2 &^ bc1) - a[1] = bc1 ^ (bc3 &^ bc2) - a[17] = bc2 ^ (bc4 &^ bc3) - a[8] = bc3 ^ (bc0 &^ bc4) - a[24] = bc4 ^ (bc1 &^ bc0) - - t = a[5] ^ d0 - bc3 = bits.RotateLeft64(t, 41) - t = a[21] ^ d1 - bc4 = bits.RotateLeft64(t, 2) - t = a[12] ^ d2 - bc0 = bits.RotateLeft64(t, 62) - t = a[3] ^ d3 - bc1 = bits.RotateLeft64(t, 55) - t = a[19] ^ d4 - bc2 = bits.RotateLeft64(t, 39) - a[5] = bc0 ^ (bc2 &^ bc1) - a[21] = bc1 ^ (bc3 &^ bc2) - a[12] = bc2 ^ (bc4 &^ bc3) - a[3] = bc3 ^ (bc0 &^ bc4) - a[19] = bc4 ^ (bc1 &^ bc0) - - // Round 3 - bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] - bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] - bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] - bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] - bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] - d0 = bc4 ^ (bc1<<1 | bc1>>63) - d1 = bc0 ^ (bc2<<1 | bc2>>63) - d2 = bc1 ^ (bc3<<1 | bc3>>63) - d3 = bc2 ^ (bc4<<1 | bc4>>63) - d4 = bc3 ^ (bc0<<1 | bc0>>63) - - bc0 = a[0] ^ d0 - t = a[11] ^ d1 - bc1 = bits.RotateLeft64(t, 44) - t = a[22] ^ d2 - bc2 = bits.RotateLeft64(t, 43) - t = a[8] ^ d3 - bc3 = bits.RotateLeft64(t, 21) - t = a[19] ^ d4 - bc4 = bits.RotateLeft64(t, 14) - a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+2] - a[11] = bc1 ^ (bc3 &^ bc2) - a[22] = bc2 ^ (bc4 &^ bc3) - a[8] = bc3 ^ (bc0 &^ bc4) - a[19] = bc4 ^ (bc1 &^ bc0) - - t = a[15] ^ d0 - bc2 = bits.RotateLeft64(t, 3) - t = a[1] ^ d1 - bc3 = bits.RotateLeft64(t, 45) - t = a[12] ^ d2 - bc4 = bits.RotateLeft64(t, 61) - t = a[23] ^ d3 - bc0 = bits.RotateLeft64(t, 28) - t = a[9] ^ d4 - bc1 = bits.RotateLeft64(t, 20) - a[15] = bc0 ^ (bc2 &^ bc1) - a[1] = bc1 ^ (bc3 &^ bc2) - a[12] = bc2 ^ (bc4 &^ bc3) - a[23] = bc3 ^ (bc0 &^ bc4) - a[9] = bc4 ^ (bc1 &^ bc0) - - t = a[5] ^ d0 - bc4 = bits.RotateLeft64(t, 18) - t = a[16] ^ d1 - bc0 = bits.RotateLeft64(t, 1) - t = a[2] ^ d2 - bc1 = bits.RotateLeft64(t, 6) - t = a[13] ^ d3 - bc2 = bits.RotateLeft64(t, 25) - t = a[24] ^ d4 - bc3 = bits.RotateLeft64(t, 8) - a[5] = bc0 ^ (bc2 &^ bc1) - a[16] = bc1 ^ (bc3 &^ bc2) - a[2] = bc2 ^ (bc4 &^ bc3) - a[13] = bc3 ^ (bc0 &^ bc4) - a[24] = bc4 ^ (bc1 &^ bc0) - - t = a[20] ^ d0 - bc1 = bits.RotateLeft64(t, 36) - t = a[6] ^ d1 - bc2 = bits.RotateLeft64(t, 10) - t = a[17] ^ d2 - bc3 = bits.RotateLeft64(t, 15) - t = a[3] ^ d3 - bc4 = bits.RotateLeft64(t, 56) - t = a[14] ^ d4 - bc0 = bits.RotateLeft64(t, 27) - a[20] = bc0 ^ (bc2 &^ bc1) - a[6] = bc1 ^ (bc3 &^ bc2) - a[17] = bc2 ^ (bc4 &^ bc3) - a[3] = bc3 ^ (bc0 &^ bc4) - a[14] = bc4 ^ (bc1 &^ bc0) - - t = a[10] ^ d0 - bc3 = bits.RotateLeft64(t, 41) - t = a[21] ^ d1 - bc4 = bits.RotateLeft64(t, 2) - t = a[7] ^ d2 - bc0 = bits.RotateLeft64(t, 62) - t = a[18] ^ d3 - bc1 = bits.RotateLeft64(t, 55) - t = a[4] ^ d4 - bc2 = bits.RotateLeft64(t, 39) - a[10] = bc0 ^ (bc2 &^ bc1) - a[21] = bc1 ^ (bc3 &^ bc2) - a[7] = bc2 ^ (bc4 &^ bc3) - a[18] = bc3 ^ (bc0 &^ bc4) - a[4] = bc4 ^ (bc1 &^ bc0) - - // Round 4 - bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] - bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] - bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] - bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] - bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] - d0 = bc4 ^ (bc1<<1 | bc1>>63) - d1 = bc0 ^ (bc2<<1 | bc2>>63) - d2 = bc1 ^ (bc3<<1 | bc3>>63) - d3 = bc2 ^ (bc4<<1 | bc4>>63) - d4 = bc3 ^ (bc0<<1 | bc0>>63) - - bc0 = a[0] ^ d0 - t = a[1] ^ d1 - bc1 = bits.RotateLeft64(t, 44) - t = a[2] ^ d2 - bc2 = bits.RotateLeft64(t, 43) - t = a[3] ^ d3 - bc3 = bits.RotateLeft64(t, 21) - t = a[4] ^ d4 - bc4 = bits.RotateLeft64(t, 14) - a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+3] - a[1] = bc1 ^ (bc3 &^ bc2) - a[2] = bc2 ^ (bc4 &^ bc3) - a[3] = bc3 ^ (bc0 &^ bc4) - a[4] = bc4 ^ (bc1 &^ bc0) - - t = a[5] ^ d0 - bc2 = bits.RotateLeft64(t, 3) - t = a[6] ^ d1 - bc3 = bits.RotateLeft64(t, 45) - t = a[7] ^ d2 - bc4 = bits.RotateLeft64(t, 61) - t = a[8] ^ d3 - bc0 = bits.RotateLeft64(t, 28) - t = a[9] ^ d4 - bc1 = bits.RotateLeft64(t, 20) - a[5] = bc0 ^ (bc2 &^ bc1) - a[6] = bc1 ^ (bc3 &^ bc2) - a[7] = bc2 ^ (bc4 &^ bc3) - a[8] = bc3 ^ (bc0 &^ bc4) - a[9] = bc4 ^ (bc1 &^ bc0) - - t = a[10] ^ d0 - bc4 = bits.RotateLeft64(t, 18) - t = a[11] ^ d1 - bc0 = bits.RotateLeft64(t, 1) - t = a[12] ^ d2 - bc1 = bits.RotateLeft64(t, 6) - t = a[13] ^ d3 - bc2 = bits.RotateLeft64(t, 25) - t = a[14] ^ d4 - bc3 = bits.RotateLeft64(t, 8) - a[10] = bc0 ^ (bc2 &^ bc1) - a[11] = bc1 ^ (bc3 &^ bc2) - a[12] = bc2 ^ (bc4 &^ bc3) - a[13] = bc3 ^ (bc0 &^ bc4) - a[14] = bc4 ^ (bc1 &^ bc0) - - t = a[15] ^ d0 - bc1 = bits.RotateLeft64(t, 36) - t = a[16] ^ d1 - bc2 = bits.RotateLeft64(t, 10) - t = a[17] ^ d2 - bc3 = bits.RotateLeft64(t, 15) - t = a[18] ^ d3 - bc4 = bits.RotateLeft64(t, 56) - t = a[19] ^ d4 - bc0 = bits.RotateLeft64(t, 27) - a[15] = bc0 ^ (bc2 &^ bc1) - a[16] = bc1 ^ (bc3 &^ bc2) - a[17] = bc2 ^ (bc4 &^ bc3) - a[18] = bc3 ^ (bc0 &^ bc4) - a[19] = bc4 ^ (bc1 &^ bc0) - - t = a[20] ^ d0 - bc3 = bits.RotateLeft64(t, 41) - t = a[21] ^ d1 - bc4 = bits.RotateLeft64(t, 2) - t = a[22] ^ d2 - bc0 = bits.RotateLeft64(t, 62) - t = a[23] ^ d3 - bc1 = bits.RotateLeft64(t, 55) - t = a[24] ^ d4 - bc2 = bits.RotateLeft64(t, 39) - a[20] = bc0 ^ (bc2 &^ bc1) - a[21] = bc1 ^ (bc3 &^ bc2) - a[22] = bc2 ^ (bc4 &^ bc3) - a[23] = bc3 ^ (bc0 &^ bc4) - a[24] = bc4 ^ (bc1 &^ bc0) - } -} diff --git a/vendor/golang.org/x/crypto/sha3/shake.go b/vendor/golang.org/x/crypto/sha3/shake.go deleted file mode 100644 index 6f3f70c265..0000000000 --- a/vendor/golang.org/x/crypto/sha3/shake.go +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2014 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. - -package sha3 - -import ( - "crypto/sha3" - "hash" - "io" -) - -// ShakeHash defines the interface to hash functions that support -// arbitrary-length output. When used as a plain [hash.Hash], it -// produces minimum-length outputs that provide full-strength generic -// security. -type ShakeHash interface { - hash.Hash - - // Read reads more output from the hash; reading affects the hash's - // state. (ShakeHash.Read is thus very different from Hash.Sum.) - // It never returns an error, but subsequent calls to Write or Sum - // will panic. - io.Reader - - // Clone returns a copy of the ShakeHash in its current state. - Clone() ShakeHash -} - -// NewShake128 creates a new SHAKE128 variable-output-length ShakeHash. -// Its generic security strength is 128 bits against all attacks if at -// least 32 bytes of its output are used. -func NewShake128() ShakeHash { - return &shakeWrapper{sha3.NewSHAKE128(), 32, false, sha3.NewSHAKE128} -} - -// NewShake256 creates a new SHAKE256 variable-output-length ShakeHash. -// Its generic security strength is 256 bits against all attacks if -// at least 64 bytes of its output are used. -func NewShake256() ShakeHash { - return &shakeWrapper{sha3.NewSHAKE256(), 64, false, sha3.NewSHAKE256} -} - -// NewCShake128 creates a new instance of cSHAKE128 variable-output-length ShakeHash, -// a customizable variant of SHAKE128. -// N is used to define functions based on cSHAKE, it can be empty when plain cSHAKE is -// desired. S is a customization byte string used for domain separation - two cSHAKE -// computations on same input with different S yield unrelated outputs. -// When N and S are both empty, this is equivalent to NewShake128. -func NewCShake128(N, S []byte) ShakeHash { - return &shakeWrapper{sha3.NewCSHAKE128(N, S), 32, false, func() *sha3.SHAKE { - return sha3.NewCSHAKE128(N, S) - }} -} - -// NewCShake256 creates a new instance of cSHAKE256 variable-output-length ShakeHash, -// a customizable variant of SHAKE256. -// N is used to define functions based on cSHAKE, it can be empty when plain cSHAKE is -// desired. S is a customization byte string used for domain separation - two cSHAKE -// computations on same input with different S yield unrelated outputs. -// When N and S are both empty, this is equivalent to NewShake256. -func NewCShake256(N, S []byte) ShakeHash { - return &shakeWrapper{sha3.NewCSHAKE256(N, S), 64, false, func() *sha3.SHAKE { - return sha3.NewCSHAKE256(N, S) - }} -} - -// ShakeSum128 writes an arbitrary-length digest of data into hash. -func ShakeSum128(hash, data []byte) { - h := NewShake128() - h.Write(data) - h.Read(hash) -} - -// ShakeSum256 writes an arbitrary-length digest of data into hash. -func ShakeSum256(hash, data []byte) { - h := NewShake256() - h.Write(data) - h.Read(hash) -} - -// shakeWrapper adds the Size, Sum, and Clone methods to a sha3.SHAKE -// to implement the ShakeHash interface. -type shakeWrapper struct { - *sha3.SHAKE - outputLen int - squeezing bool - newSHAKE func() *sha3.SHAKE -} - -func (w *shakeWrapper) Read(p []byte) (n int, err error) { - w.squeezing = true - return w.SHAKE.Read(p) -} - -func (w *shakeWrapper) Clone() ShakeHash { - s := w.newSHAKE() - b, err := w.MarshalBinary() - if err != nil { - panic(err) // unreachable - } - if err := s.UnmarshalBinary(b); err != nil { - panic(err) // unreachable - } - return &shakeWrapper{s, w.outputLen, w.squeezing, w.newSHAKE} -} - -func (w *shakeWrapper) Size() int { return w.outputLen } - -func (w *shakeWrapper) Sum(b []byte) []byte { - if w.squeezing { - panic("sha3: Sum after Read") - } - out := make([]byte, w.outputLen) - // Clone the state so that we don't affect future Write calls. - s := w.Clone() - s.Read(out) - return append(b, out...) -} diff --git a/vendor/google.golang.org/grpc/cmd/protoc-gen-go-grpc/grpc.go b/vendor/google.golang.org/grpc/cmd/protoc-gen-go-grpc/grpc.go index abc2160229..cff016d66a 100644 --- a/vendor/google.golang.org/grpc/cmd/protoc-gen-go-grpc/grpc.go +++ b/vendor/google.golang.org/grpc/cmd/protoc-gen-go-grpc/grpc.go @@ -73,11 +73,11 @@ func (serviceGenerateHelper) generateClientStruct(g *protogen.GeneratedFile, cli g.P() } -func (serviceGenerateHelper) generateNewClientDefinitions(g *protogen.GeneratedFile, service *protogen.Service, clientName string) { +func (serviceGenerateHelper) generateNewClientDefinitions(g *protogen.GeneratedFile, _ *protogen.Service, clientName string) { g.P("return &", unexport(clientName), "{cc}") } -func (serviceGenerateHelper) generateUnimplementedServerType(gen *protogen.Plugin, file *protogen.File, g *protogen.GeneratedFile, service *protogen.Service) { +func (serviceGenerateHelper) generateUnimplementedServerType(_ *protogen.Plugin, _ *protogen.File, g *protogen.GeneratedFile, service *protogen.Service) { serverType := service.GoName + "Server" mustOrShould := "must" if !*requireUnimplemented { @@ -97,7 +97,7 @@ func (serviceGenerateHelper) generateUnimplementedServerType(gen *protogen.Plugi nilArg = "nil," } g.P("func (Unimplemented", serverType, ") ", serverSignature(g, method), "{") - g.P("return ", nilArg, statusPackage.Ident("Errorf"), "(", codesPackage.Ident("Unimplemented"), `, "method `, method.GoName, ` not implemented")`) + g.P("return ", nilArg, statusPackage.Ident("Error"), "(", codesPackage.Ident("Unimplemented"), `, "method `, method.GoName, ` not implemented")`) g.P("}") } if *requireUnimplemented { @@ -119,7 +119,7 @@ func (serviceGenerateHelper) generateServerFunctions(gen *protogen.Plugin, file genServiceDesc(file, g, serviceDescVar, serverType, service, handlerNames) } -func (serviceGenerateHelper) formatHandlerFuncName(service *protogen.Service, hname string) string { +func (serviceGenerateHelper) formatHandlerFuncName(_ *protogen.Service, hname string) string { return hname } @@ -310,7 +310,7 @@ func genService(gen *protogen.Plugin, file *protogen.File, g *protogen.Generated } serviceDescVar := service.GoName + "_ServiceDesc" g.P("func Register", service.GoName, "Server(s ", grpcPackage.Ident("ServiceRegistrar"), ", srv ", serverType, ") {") - g.P("// If the following call pancis, it indicates Unimplemented", serverType, " was") + g.P("// If the following call panics, it indicates Unimplemented", serverType, " was") g.P("// embedded by pointer and is nil. This will cause panics if an") g.P("// unimplemented method is ever invoked, so we test this at initialization") g.P("// time to prevent it from happening at runtime later due to I/O.") @@ -347,14 +347,14 @@ func clientStreamInterface(g *protogen.GeneratedFile, method *protogen.Method) s typeParam := g.QualifiedGoIdent(method.Input.GoIdent) + ", " + g.QualifiedGoIdent(method.Output.GoIdent) if method.Desc.IsStreamingClient() && method.Desc.IsStreamingServer() { return g.QualifiedGoIdent(grpcPackage.Ident("BidiStreamingClient")) + "[" + typeParam + "]" - } else if method.Desc.IsStreamingClient() { + } + if method.Desc.IsStreamingClient() { return g.QualifiedGoIdent(grpcPackage.Ident("ClientStreamingClient")) + "[" + typeParam + "]" - } else { // i.e. if method.Desc.IsStreamingServer() - return g.QualifiedGoIdent(grpcPackage.Ident("ServerStreamingClient")) + "[" + g.QualifiedGoIdent(method.Output.GoIdent) + "]" } + return g.QualifiedGoIdent(grpcPackage.Ident("ServerStreamingClient")) + "[" + g.QualifiedGoIdent(method.Output.GoIdent) + "]" } -func genClientMethod(gen *protogen.Plugin, file *protogen.File, g *protogen.GeneratedFile, method *protogen.Method, index int) { +func genClientMethod(_ *protogen.Plugin, _ *protogen.File, g *protogen.GeneratedFile, method *protogen.Method, index int) { service := method.Parent fmSymbol := helper.formatFullMethodSymbol(service, method) @@ -514,14 +514,15 @@ func serverStreamInterface(g *protogen.GeneratedFile, method *protogen.Method) s typeParam := g.QualifiedGoIdent(method.Input.GoIdent) + ", " + g.QualifiedGoIdent(method.Output.GoIdent) if method.Desc.IsStreamingClient() && method.Desc.IsStreamingServer() { return g.QualifiedGoIdent(grpcPackage.Ident("BidiStreamingServer")) + "[" + typeParam + "]" - } else if method.Desc.IsStreamingClient() { + } + if method.Desc.IsStreamingClient() { return g.QualifiedGoIdent(grpcPackage.Ident("ClientStreamingServer")) + "[" + typeParam + "]" - } else { // i.e. if method.Desc.IsStreamingServer() - return g.QualifiedGoIdent(grpcPackage.Ident("ServerStreamingServer")) + "[" + g.QualifiedGoIdent(method.Output.GoIdent) + "]" } + + return g.QualifiedGoIdent(grpcPackage.Ident("ServerStreamingServer")) + "[" + g.QualifiedGoIdent(method.Output.GoIdent) + "]" } -func genServerMethod(gen *protogen.Plugin, file *protogen.File, g *protogen.GeneratedFile, method *protogen.Method, hnameFuncNameFormatter func(string) string) string { +func genServerMethod(_ *protogen.Plugin, _ *protogen.File, g *protogen.GeneratedFile, method *protogen.Method, hnameFuncNameFormatter func(string) string) string { service := method.Parent hname := fmt.Sprintf("_%s_%s_Handler", service.GoName, method.GoName) diff --git a/vendor/google.golang.org/grpc/cmd/protoc-gen-go-grpc/main.go b/vendor/google.golang.org/grpc/cmd/protoc-gen-go-grpc/main.go index 183ba69742..b3f69223ab 100644 --- a/vendor/google.golang.org/grpc/cmd/protoc-gen-go-grpc/main.go +++ b/vendor/google.golang.org/grpc/cmd/protoc-gen-go-grpc/main.go @@ -42,7 +42,7 @@ import ( "google.golang.org/protobuf/types/pluginpb" ) -const version = "1.5.1" +const version = "1.6.0" var requireUnimplemented *bool var useGenericStreams *bool @@ -64,7 +64,7 @@ func main() { }.Run(func(gen *protogen.Plugin) error { gen.SupportedFeatures = uint64(pluginpb.CodeGeneratorResponse_FEATURE_PROTO3_OPTIONAL) | uint64(pluginpb.CodeGeneratorResponse_FEATURE_SUPPORTS_EDITIONS) gen.SupportedEditionsMinimum = descriptorpb.Edition_EDITION_PROTO2 - gen.SupportedEditionsMaximum = descriptorpb.Edition_EDITION_2023 + gen.SupportedEditionsMaximum = descriptorpb.Edition_EDITION_2024 for _, f := range gen.Files { if !f.Generate { continue diff --git a/vendor/google.golang.org/grpc/cmd/protoc-gen-go-grpc/protoc-gen-go-grpc_test.sh b/vendor/google.golang.org/grpc/cmd/protoc-gen-go-grpc/protoc-gen-go-grpc_test.sh index 32e8e26ecd..c70fd0fa63 100644 --- a/vendor/google.golang.org/grpc/cmd/protoc-gen-go-grpc/protoc-gen-go-grpc_test.sh +++ b/vendor/google.golang.org/grpc/cmd/protoc-gen-go-grpc/protoc-gen-go-grpc_test.sh @@ -15,7 +15,7 @@ # limitations under the License. # Uncomment to enable debugging. -# set -x +# set -x WORKDIR="$(dirname $0)" TEMPDIR=$(mktemp -d) @@ -24,7 +24,7 @@ trap "rm -rf ${TEMPDIR}" EXIT # Build protoc-gen-go-grpc binary and add to $PATH. pushd "${WORKDIR}" -go build -o "${TEMPDIR}" . +go build -o "${TEMPDIR}" . PATH="${TEMPDIR}:${PATH}" popd @@ -38,7 +38,7 @@ GENFILE="${TEMPDIR}/examples/route_guide/routeguide/route_guide_grpc.pb.go" # diff is piped to [[ $? == 1 ]] to avoid exiting on diff but exit on error # (like if the file was not found). See man diff for more info. -DIFF=$(diff "${GOLDENFILE}" "${GENFILE}" || [[ $? == 1 ]]) +DIFF=$(diff "${GOLDENFILE}" "${GENFILE}" || [[ $? == 1 ]]) if [[ -n "${DIFF}" ]]; then echo -e "ERROR: Generated file differs from golden file:\n${DIFF}" echo -e "If you have made recent changes to protoc-gen-go-grpc," \ diff --git a/vendor/modules.txt b/vendor/modules.txt index aaf3725837..dee1fbebb3 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -80,7 +80,7 @@ github.com/beorn7/perks/quantile # github.com/blang/semver/v4 v4.0.0 ## explicit; go 1.14 github.com/blang/semver/v4 -# github.com/cenkalti/backoff/v5 v5.0.2 +# github.com/cenkalti/backoff/v5 v5.0.3 ## explicit; go 1.23 github.com/cenkalti/backoff/v5 # github.com/cespare/xxhash/v2 v2.3.0 @@ -96,8 +96,8 @@ github.com/clipperhouse/uax29/v2/internal/iterators # github.com/containerd/cgroups/v3 v3.0.5 ## explicit; go 1.22.0 github.com/containerd/cgroups/v3/cgroup1/stats -# github.com/containerd/containerd v1.7.29 -## explicit; go 1.23.0 +# github.com/containerd/containerd v1.7.30 +## explicit; go 1.24.0 github.com/containerd/containerd/archive github.com/containerd/containerd/archive/compression github.com/containerd/containerd/archive/tarheader @@ -199,7 +199,7 @@ 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 v29.0.0+incompatible +# github.com/docker/cli v29.1.5+incompatible ## explicit github.com/docker/cli/cli/config github.com/docker/cli/cli/config/configfile @@ -320,16 +320,16 @@ github.com/gogo/protobuf/gogoproto github.com/gogo/protobuf/proto github.com/gogo/protobuf/protoc-gen-gogo/descriptor github.com/gogo/protobuf/sortkeys -# github.com/golang-migrate/migrate/v4 v4.19.0 -## explicit; go 1.23.0 +# github.com/golang-migrate/migrate/v4 v4.19.1 +## explicit; go 1.24.0 github.com/golang-migrate/migrate/v4/source github.com/golang-migrate/migrate/v4/source/file github.com/golang-migrate/migrate/v4/source/iofs # github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 ## explicit; go 1.20 github.com/golang/groupcache/lru -# github.com/golang/mock v1.6.0 -## explicit; go 1.11 +# github.com/golang/mock v1.7.0-rc.1 +## explicit; go 1.15 github.com/golang/mock/mockgen github.com/golang/mock/mockgen/model # github.com/golang/protobuf v1.5.4 @@ -417,13 +417,13 @@ github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors/logging ## explicit github.com/grpc-ecosystem/go-grpc-prometheus github.com/grpc-ecosystem/go-grpc-prometheus/packages/grpcstatus -# github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.0 -## explicit; go 1.23.0 +# github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 +## explicit; go 1.24.0 github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options github.com/grpc-ecosystem/grpc-gateway/v2/runtime github.com/grpc-ecosystem/grpc-gateway/v2/utilities -# github.com/grpc-ecosystem/grpc-health-probe v0.4.41 +# github.com/grpc-ecosystem/grpc-health-probe v0.4.44 ## explicit; go 1.24.0 github.com/grpc-ecosystem/grpc-health-probe # github.com/h2non/filetype v1.1.3 @@ -477,14 +477,6 @@ github.com/klauspost/pgzip # github.com/kylelemons/godebug v1.1.0 ## explicit; go 1.11 github.com/kylelemons/godebug/diff -# github.com/letsencrypt/boulder v0.0.0-20250624003606-5ddd5acf990d -## explicit; go 1.24.0 -github.com/letsencrypt/boulder/core -github.com/letsencrypt/boulder/core/proto -github.com/letsencrypt/boulder/goodkey -github.com/letsencrypt/boulder/identifier -github.com/letsencrypt/boulder/probs -github.com/letsencrypt/boulder/revocation # github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de ## explicit github.com/liggitt/tabwriter @@ -502,7 +494,7 @@ github.com/mattn/go-isatty # github.com/mattn/go-runewidth v0.0.19 ## explicit; go 1.20 github.com/mattn/go-runewidth -# github.com/mattn/go-sqlite3 v1.14.32 +# github.com/mattn/go-sqlite3 v1.14.33 ## explicit; go 1.19 github.com/mattn/go-sqlite3 # github.com/maxbrunsfeld/counterfeiter/v6 v6.12.1 @@ -566,6 +558,8 @@ github.com/munnerz/goautoneg # github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f ## explicit github.com/mxk/go-flowrate/flowrate +# github.com/nxadm/tail v1.4.11 +## explicit; go 1.13 # github.com/onsi/ginkgo/v2 v2.27.5 ## explicit; go 1.23.0 github.com/onsi/ginkgo/v2/config @@ -628,8 +622,8 @@ github.com/openshift/client-go/config/listers/config/v1alpha2 # github.com/openshift/library-go v0.0.0-20260108135436-db8dbd64c462 ## explicit; go 1.24.0 github.com/openshift/library-go/pkg/crypto -# github.com/operator-framework/api v0.37.0 => ./staging/api -## explicit; go 1.24.6 +# github.com/operator-framework/api v0.38.0 => ./staging/api +## explicit; go 1.25.3 github.com/operator-framework/api/crds github.com/operator-framework/api/pkg/constraints github.com/operator-framework/api/pkg/encoding @@ -746,16 +740,19 @@ github.com/operator-framework/operator-lifecycle-manager/pkg/package-server/stor github.com/operator-framework/operator-lifecycle-manager/pkg/package-server/version github.com/operator-framework/operator-lifecycle-manager/pkg/version github.com/operator-framework/operator-lifecycle-manager/util/cpb -# github.com/operator-framework/operator-registry v1.61.0 => ./staging/operator-registry -## explicit; go 1.24.6 +# github.com/operator-framework/operator-registry v1.62.0 => ./staging/operator-registry +## explicit; go 1.25.3 github.com/operator-framework/operator-registry/alpha/action github.com/operator-framework/operator-registry/alpha/action/migrations github.com/operator-framework/operator-registry/alpha/declcfg github.com/operator-framework/operator-registry/alpha/model github.com/operator-framework/operator-registry/alpha/property +github.com/operator-framework/operator-registry/alpha/template +github.com/operator-framework/operator-registry/alpha/template/api github.com/operator-framework/operator-registry/alpha/template/basic github.com/operator-framework/operator-registry/alpha/template/converter github.com/operator-framework/operator-registry/alpha/template/semver +github.com/operator-framework/operator-registry/alpha/template/substitutes github.com/operator-framework/operator-registry/cmd/configmap-server github.com/operator-framework/operator-registry/cmd/initializer github.com/operator-framework/operator-registry/cmd/opm @@ -849,14 +846,14 @@ github.com/russross/blackfriday/v2 # github.com/secure-systems-lab/go-securesystemslib v0.9.1 ## explicit; go 1.23.0 github.com/secure-systems-lab/go-securesystemslib/encrypted -# github.com/sigstore/fulcio v1.7.1 -## explicit; go 1.24.0 +# github.com/sigstore/fulcio v1.8.3 +## explicit; go 1.25.0 github.com/sigstore/fulcio/pkg/certificate -# github.com/sigstore/protobuf-specs v0.4.3 +# github.com/sigstore/protobuf-specs v0.5.0 ## explicit; go 1.22.0 github.com/sigstore/protobuf-specs/gen/pb-go/common/v1 -# github.com/sigstore/sigstore v1.9.5 -## explicit; go 1.23.0 +# github.com/sigstore/sigstore v1.10.0 +## explicit; go 1.25.0 github.com/sigstore/sigstore/pkg/cryptoutils github.com/sigstore/sigstore/pkg/signature github.com/sigstore/sigstore/pkg/signature/options @@ -904,9 +901,6 @@ github.com/stretchr/testify/require # github.com/tidwall/btree v1.8.1 ## explicit; go 1.20 github.com/tidwall/btree -# github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 -## explicit -github.com/titanous/rocacheck # github.com/ulikunitz/xz v0.5.15 ## explicit; go 1.12 github.com/ulikunitz/xz @@ -969,16 +963,15 @@ go.opencensus.io/trace/tracestate ## explicit; go 1.24.0 go.opentelemetry.io/auto/sdk go.opentelemetry.io/auto/sdk/internal/telemetry -# go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 +# go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 ## explicit; go 1.23.0 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/internal -# go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 +# go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 ## explicit; go 1.23.0 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request 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.38.0 ## explicit; go 1.23.0 go.opentelemetry.io/otel @@ -992,17 +985,16 @@ go.opentelemetry.io/otel/propagation go.opentelemetry.io/otel/semconv/internal go.opentelemetry.io/otel/semconv/v1.12.0 go.opentelemetry.io/otel/semconv/v1.17.0 -go.opentelemetry.io/otel/semconv/v1.20.0 go.opentelemetry.io/otel/semconv/v1.21.0 -go.opentelemetry.io/otel/semconv/v1.26.0 -go.opentelemetry.io/otel/semconv/v1.30.0 go.opentelemetry.io/otel/semconv/v1.37.0 +go.opentelemetry.io/otel/semconv/v1.37.0/httpconv go.opentelemetry.io/otel/semconv/v1.37.0/otelconv -# go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0 +go.opentelemetry.io/otel/semconv/v1.37.0/rpcconv +# go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 ## explicit; go 1.23.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform -# go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.36.0 +# go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 ## explicit; go 1.23.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal @@ -1029,13 +1021,13 @@ go.opentelemetry.io/otel/trace go.opentelemetry.io/otel/trace/embedded go.opentelemetry.io/otel/trace/internal/telemetry go.opentelemetry.io/otel/trace/noop -# go.opentelemetry.io/proto/otlp v1.7.0 +# go.opentelemetry.io/proto/otlp v1.7.1 ## explicit; go 1.23.0 go.opentelemetry.io/proto/otlp/collector/trace/v1 go.opentelemetry.io/proto/otlp/common/v1 go.opentelemetry.io/proto/otlp/resource/v1 go.opentelemetry.io/proto/otlp/trace/v1 -# go.podman.io/common v0.66.0 +# go.podman.io/common v0.66.1 ## explicit; go 1.24.2 go.podman.io/common/pkg/auth go.podman.io/common/pkg/capabilities @@ -1120,7 +1112,7 @@ go.podman.io/storage/pkg/unshare # go.uber.org/multierr v1.11.0 ## explicit; go 1.19 go.uber.org/multierr -# go.uber.org/zap v1.27.0 +# go.uber.org/zap v1.27.1 ## explicit; go 1.19 go.uber.org/zap go.uber.org/zap/buffer @@ -1147,7 +1139,6 @@ golang.org/x/crypto/hkdf golang.org/x/crypto/internal/alias golang.org/x/crypto/internal/poly1305 golang.org/x/crypto/nacl/secretbox -golang.org/x/crypto/ocsp golang.org/x/crypto/openpgp golang.org/x/crypto/openpgp/armor golang.org/x/crypto/openpgp/elgamal @@ -1157,7 +1148,6 @@ golang.org/x/crypto/openpgp/s2k golang.org/x/crypto/pbkdf2 golang.org/x/crypto/salsa20/salsa golang.org/x/crypto/scrypt -golang.org/x/crypto/sha3 # golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b ## explicit; go 1.23.0 golang.org/x/exp/maps @@ -1166,7 +1156,7 @@ golang.org/x/exp/slices ## explicit; go 1.11 golang.org/x/lint golang.org/x/lint/golint -# golang.org/x/mod v0.31.0 +# golang.org/x/mod v0.32.0 ## explicit; go 1.24.0 golang.org/x/mod/internal/lazyregexp golang.org/x/mod/modfile @@ -1350,8 +1340,8 @@ google.golang.org/grpc/serviceconfig google.golang.org/grpc/stats google.golang.org/grpc/status google.golang.org/grpc/tap -# google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 -## explicit; go 1.21 +# google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.0 +## explicit; go 1.24.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc # google.golang.org/protobuf v1.36.11 ## explicit; go 1.23