diff --git a/go.mod b/go.mod index 02a91cb557..77f91ce8c6 100644 --- a/go.mod +++ b/go.mod @@ -9,23 +9,23 @@ require ( github.com/golang/mock v1.6.0 github.com/googleapis/gnostic v0.5.5 github.com/grpc-ecosystem/grpc-health-probe v0.4.41 - github.com/maxbrunsfeld/counterfeiter/v6 v6.12.0 + 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.2 + github.com/onsi/ginkgo/v2 v2.27.3 github.com/openshift/api v0.0.0-20251111193948-50e2ece149d7 - github.com/operator-framework/api v0.36.0 + github.com/operator-framework/api v0.37.0 github.com/operator-framework/operator-lifecycle-manager v0.0.0-00010101000000-000000000000 github.com/operator-framework/operator-registry v1.61.0 github.com/sirupsen/logrus v1.9.3 - github.com/spf13/cobra v1.10.1 + 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/protobuf v1.36.10 gopkg.in/yaml.v2 v2.4.0 - k8s.io/api v0.34.2 - k8s.io/apimachinery v0.34.2 - k8s.io/client-go v0.34.2 - k8s.io/code-generator v0.34.2 + k8s.io/api v0.34.3 + k8s.io/apimachinery v0.34.3 + k8s.io/client-go v0.34.3 + k8s.io/code-generator v0.34.3 k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 k8s.io/utils v0.0.0-20251002143259-bc988d571ff4 sigs.k8s.io/controller-runtime v0.22.4 @@ -49,6 +49,8 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff/v5 v5.0.2 // 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/api v1.9.0 // indirect @@ -111,8 +113,8 @@ require ( 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 - github.com/itchyny/gojq v0.12.17 // indirect - github.com/itchyny/timefmt-go v0.1.6 // indirect + github.com/itchyny/gojq v0.12.18 // indirect + github.com/itchyny/timefmt-go v0.1.7 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/joelanford/ignore v0.1.1 // indirect github.com/josharian/intern v1.0.0 // indirect @@ -126,7 +128,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-runewidth v0.0.16 // indirect + github.com/mattn/go-runewidth v0.0.19 // indirect github.com/mattn/go-sqlite3 v1.14.32 // indirect github.com/miekg/pkcs11 v1.1.1 // indirect github.com/mitchellh/go-wordwrap v1.0.1 // indirect @@ -144,7 +146,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/onsi/gomega v1.38.2 // indirect + github.com/onsi/gomega v1.38.3 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.1 // indirect github.com/opencontainers/runtime-spec v1.2.1 // indirect @@ -156,9 +158,8 @@ require ( github.com/proglottis/gpgme v0.1.5 // indirect github.com/prometheus/client_golang v1.23.2 // indirect github.com/prometheus/client_model v0.6.2 // indirect - github.com/prometheus/common v0.67.2 // indirect + github.com/prometheus/common v0.67.4 // indirect github.com/prometheus/procfs v0.16.1 // indirect - 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 @@ -180,15 +181,15 @@ require ( go.etcd.io/etcd/client/pkg/v3 v3.6.4 // indirect go.etcd.io/etcd/client/v3 v3.6.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/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/otel v1.37.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/metric v1.37.0 // indirect - go.opentelemetry.io/otel/sdk v1.37.0 // indirect - go.opentelemetry.io/otel/trace 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/trace v1.38.0 // indirect go.opentelemetry.io/proto/otlp v1.7.0 // indirect go.podman.io/common v0.66.0 // indirect go.podman.io/image/v5 v5.38.0 // indirect @@ -197,38 +198,38 @@ require ( go.uber.org/zap v1.27.0 // indirect go.yaml.in/yaml/v2 v2.4.3 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/crypto v0.44.0 // indirect + golang.org/x/crypto v0.46.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.29.0 // indirect - golang.org/x/net v0.47.0 // indirect + golang.org/x/mod v0.30.0 // indirect + golang.org/x/net v0.48.0 // indirect golang.org/x/oauth2 v0.32.0 // indirect - golang.org/x/sync v0.18.0 // indirect - golang.org/x/sys v0.38.0 // indirect - golang.org/x/term v0.37.0 // indirect - golang.org/x/text v0.31.0 // indirect + golang.org/x/sync v0.19.0 // indirect + golang.org/x/sys v0.39.0 // indirect + golang.org/x/term v0.38.0 // indirect + golang.org/x/text v0.32.0 // indirect golang.org/x/time v0.14.0 // indirect - golang.org/x/tools v0.38.0 // indirect + golang.org/x/tools v0.39.0 // indirect 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-20250804133106-a7a43d27e69b // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20251110190251-83f479183930 // indirect - google.golang.org/grpc v1.76.0 // indirect + google.golang.org/grpc v1.77.0 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect gopkg.in/op/go-logging.v1 v1.0.0-20160211212156-b2cb9fa56473 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.34.2 // indirect - k8s.io/apiserver v0.34.2 // indirect + k8s.io/apiextensions-apiserver v0.34.3 // indirect + k8s.io/apiserver v0.34.3 // indirect k8s.io/cli-runtime v0.33.2 // indirect - k8s.io/component-base v0.34.2 // indirect + k8s.io/component-base v0.34.3 // indirect k8s.io/gengo/v2 v2.0.0-20250604051438-85fd79dbfd9f // indirect k8s.io/klog v1.0.0 // indirect k8s.io/klog/v2 v2.130.1 // indirect - k8s.io/kms v0.34.2 // indirect - k8s.io/kube-aggregator v0.34.2 // indirect + k8s.io/kms v0.34.3 // indirect + k8s.io/kube-aggregator v0.34.3 // indirect k8s.io/kubectl v0.33.2 // indirect oras.land/oras-go/v2 v2.6.0 // indirect sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.33.0 // indirect diff --git a/go.sum b/go.sum index 33adfa472c..ef62cc048d 100644 --- a/go.sum +++ b/go.sum @@ -47,6 +47,10 @@ github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghf 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/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/clipperhouse/stringish v0.1.1 h1:+NSqMOr3GR6k1FdRhhnXrLfztGzuG+VuFDfatpWHKCs= +github.com/clipperhouse/stringish v0.1.1/go.mod h1:v/WhFtE1q0ovMta2+m+UbpZ+2/HEXNWYXQgCt4hdOzA= +github.com/clipperhouse/uax29/v2 v2.3.0 h1:SNdx9DVUqMoBuBoW3iLOj4FQv3dN5mDtuqwuhIGpJy4= +github.com/clipperhouse/uax29/v2 v2.3.0/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsVRgg6W7ihQeh4g= 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= @@ -192,8 +196,8 @@ github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7a 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/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.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/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -284,10 +288,10 @@ github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/itchyny/gojq v0.12.17 h1:8av8eGduDb5+rvEdaOO+zQUjA04MS0m3Ps8HiD+fceg= -github.com/itchyny/gojq v0.12.17/go.mod h1:WBrEMkgAfAGO1LUcGOckBl5O726KPp+OlkKug0I/FEY= -github.com/itchyny/timefmt-go v0.1.6 h1:ia3s54iciXDdzWzwaVKXZPbiXzxxnv1SPGFfM/myJ5Q= -github.com/itchyny/timefmt-go v0.1.6/go.mod h1:RRDZYC5s9ErkjQvTvvU7keJjxUYzIISJGxm9/mAERQg= +github.com/itchyny/gojq v0.12.18 h1:gFGHyt/MLbG9n6dqnvlliiya2TaMMh6FFaR2b1H6Drc= +github.com/itchyny/gojq v0.12.18/go.mod h1:4hPoZ/3lN9fDL1D+aK7DY1f39XZpY9+1Xpjz8atrEkg= +github.com/itchyny/timefmt-go v0.1.7 h1:xyftit9Tbw+Dc/huSSPJaEmX1TVL8lw5vxjJLK4GMMA= +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= @@ -349,13 +353,13 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky 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.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= -github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +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/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= @@ -402,10 +406,10 @@ github.com/nxadm/tail v1.4.11/go.mod h1:OTaG3NK980DZzxbRq6lEuzgU+mug70nY11sMd4JX github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/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.3 h1:ICsZJ8JoYafeXFFlFAG75a7CxMsJHwgKwtO+82SE9L8= +github.com/onsi/ginkgo/v2 v2.27.3/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zwn/ykDRo= +github.com/onsi/gomega v1.38.3 h1:eTX+W6dobAYfFeGC2PV6RwXRu/MyT+cQguijutvkpSM= +github.com/onsi/gomega v1.38.3/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= @@ -442,8 +446,8 @@ github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvM github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.67.2 h1:PcBAckGFTIHt2+L3I33uNRTlKTplNzFctXcWhPyAEN8= -github.com/prometheus/common v0.67.2/go.mod h1:63W3KZb1JOKgcjlIr64WW/LvFGAqKPj0atm+knVGEko= +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.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= @@ -456,9 +460,6 @@ github.com/redis/go-redis/extra/redisotel/v9 v9.10.0 h1:4z7/hCJ9Jft8EBb2tDmK38p2 github.com/redis/go-redis/extra/redisotel/v9 v9.10.0/go.mod h1:B0thqLh4hB8MvvcUKSwyP5YiIcCCp8UrQ0cA9gEqyjk= github.com/redis/go-redis/v9 v9.10.0 h1:FxwK3eV8p/CQa0Ch276C7u2d0eNC9kCmAYQ7mCXCzVs= github.com/redis/go-redis/v9 v9.10.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw= -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/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= @@ -490,8 +491,8 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= -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/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= @@ -571,8 +572,8 @@ go.etcd.io/raft/v3 v3.6.0 h1:5NtvbDVYpnfZWcIHgGRk9DyzkBIXOi8j+DDp1IcnUWQ= go.etcd.io/raft/v3 v3.6.0/go.mod h1:nLvLevg6+xrVtHUmVaTcTz603gQPHfh7kUAwV6YpfGo= 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= @@ -581,8 +582,8 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.6 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/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= @@ -607,16 +608,16 @@ 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/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/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.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= @@ -649,8 +650,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.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU= -golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc= +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= @@ -669,8 +670,8 @@ 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.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= @@ -692,8 +693,8 @@ 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.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= -golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= +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= @@ -710,8 +711,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-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -741,8 +742,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.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= +golang.org/x/sys v0.39.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= @@ -752,8 +753,8 @@ 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.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= -golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= +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.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -764,8 +765,8 @@ 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.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= -golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= +golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= +golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= @@ -787,8 +788,8 @@ 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.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= -golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= +golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ= +golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ= golang.org/x/tools/go/expect v0.1.0-deprecated h1:jY2C5HGYR5lqex3gEniOQL0r7Dq5+VGVgY1nudX5lXY= golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY= golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM= @@ -809,8 +810,8 @@ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEY google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 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/api v0.0.0-20251022142026-3a174f9686a8 h1:mepRgnBZa07I4TRuomDE4sTIYieg/osKmzIf4USdWS4= +google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8/go.mod h1:fDMmzKV90WSg1NbozdqrE64fkuTv6mlq2zxo9ad+3yo= google.golang.org/genproto/googleapis/rpc v0.0.0-20251110190251-83f479183930 h1:tK4fkUnnRhig9TsTp4otV1FxwBFYgbKUq1RY0V6KZ4U= google.golang.org/genproto/googleapis/rpc v0.0.0-20251110190251-83f479183930/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.18.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= @@ -820,8 +821,8 @@ google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac 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 v1.77.0 h1:wVVY6/8cGA6vvffn+wWK5ToddbgdU3d8MNENr4evgXM= +google.golang.org/grpc v1.77.0/go.mod h1:z0BY1iVj0q8E1uSQCjL9cppRj+gnZjzDnzV0dHhrNig= 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/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -873,32 +874,32 @@ gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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.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/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.2 h1:Co6XiknN+uUZqiddlfAjT68184/37PS4QAzYvQvDR8M= -k8s.io/client-go v0.34.2/go.mod h1:2VYDl1XXJsdcAxw7BenFslRQX28Dxz91U9MWKjX97fE= -k8s.io/code-generator v0.34.2 h1:9bG6jTxmsU3HXE5BNYJTC8AZ1D6hVVfkm8yYSkdkGY0= -k8s.io/code-generator v0.34.2/go.mod h1:dnDDEd6S/z4uZ+PG1aE58ySCi/lR4+qT3a4DddE4/2I= -k8s.io/component-base v0.34.2 h1:HQRqK9x2sSAsd8+R4xxRirlTjowsg6fWCPwWYeSvogQ= -k8s.io/component-base v0.34.2/go.mod h1:9xw2FHJavUHBFpiGkZoKuYZ5pdtLKe97DEByaA+hHbM= +k8s.io/client-go v0.34.3 h1:wtYtpzy/OPNYf7WyNBTj3iUA0XaBHVqhv4Iv3tbrF5A= +k8s.io/client-go v0.34.3/go.mod h1:OxxeYagaP9Kdf78UrKLa3YZixMCfP6bgPwPwNBQBzpM= +k8s.io/code-generator v0.34.3 h1:6ipJKsJZZ9q21BO8I2jEj4OLN3y8/1n4aihKN0xKmQk= +k8s.io/code-generator v0.34.3/go.mod h1:oW73UPYpGLsbRN8Ozkhd6ZzkF8hzFCiYmvEuWZDroI4= +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/gengo/v2 v2.0.0-20250604051438-85fd79dbfd9f h1:SLb+kxmzfA87x4E4brQzB33VBbT2+x7Zq9ROIHmGn9Q= k8s.io/gengo/v2 v2.0.0-20250604051438-85fd79dbfd9f/go.mod h1:EJykeLsmFC60UQbYJezXkEsG2FLrt0GPNkU5iK5GWxU= k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= -k8s.io/kms v0.34.2 h1:91rj4MDZLyIT9KxG8J5/CcMH666Z88CF/xJQeuPfJc8= -k8s.io/kms v0.34.2/go.mod h1:s1CFkLG7w9eaTYvctOxosx88fl4spqmixnNpys0JAtM= -k8s.io/kube-aggregator v0.34.2 h1:Nn0Vksj67WHBL2x7bJ6vuxL44RbMTK6uRtXX+3vMVJk= -k8s.io/kube-aggregator v0.34.2/go.mod h1:/tp4cc/1p2AvICsS4mjjSJakdrbhcGbRmj0mdHTdR2Q= +k8s.io/kms v0.34.3 h1:QzBOD0sk1bGQVMcZQAHGjtbP1iKZJUyhC6D0I+BTxIE= +k8s.io/kms v0.34.3/go.mod h1:s1CFkLG7w9eaTYvctOxosx88fl4spqmixnNpys0JAtM= +k8s.io/kube-aggregator v0.34.3 h1:rKsZWTD2As4dKuv+zzdJU0uo5H7bFlAEoSucai4mW6M= +k8s.io/kube-aggregator v0.34.3/go.mod h1:d4D8PV2FK4Qlq6u442FSum1tHPhK9tKdKBfH/A3R0I0= k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 h1:Y3gxNAuB0OBLImH611+UDZcmKS3g6CthxToOb37KgwE= k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912/go.mod h1:kdmbQkyfwUagLfXIad1y2TdrjPFWp2Q89B3qkRwf/pQ= k8s.io/kubectl v0.33.2 h1:7XKZ6DYCklu5MZQzJe+CkCjoGZwD1wWl7t/FxzhMz7Y= diff --git a/manifests/0000_50_olm_00-clusterserviceversions.crd.yaml b/manifests/0000_50_olm_00-clusterserviceversions.crd.yaml index 563474fa48..b2ed5a0f71 100644 --- a/manifests/0000_50_olm_00-clusterserviceversions.crd.yaml +++ b/manifests/0000_50_olm_00-clusterserviceversions.crd.yaml @@ -31,6 +31,10 @@ spec: jsonPath: .spec.version name: Version type: string + - description: The release of this version of the CSV + jsonPath: .spec.release + name: Release + type: string - description: The name of a CSV that this one replaces jsonPath: .spec.replaces name: Replaces @@ -8991,6 +8995,30 @@ spec: type: string name: type: string + release: + description: |- + release specifies the packaging version of the operator, defaulting to empty + release is optional + + A ClusterServiceVersion's release field is used to distinguish between different builds of the same operator version + This is useful for operators that need to make changes to the CSV which don't affect their functionality, + for example: + - to fix a typo in their description + - to add/amend annotations or labels + - to amend examples or documentation + - to produce different builds for different environments + + It is up to operator authors to determine the semantics of release versions they use + for their operator. All release versions must conform to the semver prerelease format + (dot-separated identifiers containing only alphanumerics and hyphens) and are limited + to a maximum length of 20 characters. + type: string + maxLength: 20 + x-kubernetes-validations: + - rule: self.matches('^[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*$') + message: release version must be composed of dot-separated identifiers containing only alphanumerics and hyphens + - rule: '!self.split(''.'').exists(x, x.matches(''^0[0-9]+$''))' + message: numeric identifiers in release version must not have leading zeros replaces: description: The name of a CSV this one replaces. Should match the `metadata.Name` field of the old CSV. type: string diff --git a/microshift-manifests/0000_50_olm_00-clusterserviceversions.crd.yaml b/microshift-manifests/0000_50_olm_00-clusterserviceversions.crd.yaml index 563474fa48..b2ed5a0f71 100644 --- a/microshift-manifests/0000_50_olm_00-clusterserviceversions.crd.yaml +++ b/microshift-manifests/0000_50_olm_00-clusterserviceversions.crd.yaml @@ -31,6 +31,10 @@ spec: jsonPath: .spec.version name: Version type: string + - description: The release of this version of the CSV + jsonPath: .spec.release + name: Release + type: string - description: The name of a CSV that this one replaces jsonPath: .spec.replaces name: Replaces @@ -8991,6 +8995,30 @@ spec: type: string name: type: string + release: + description: |- + release specifies the packaging version of the operator, defaulting to empty + release is optional + + A ClusterServiceVersion's release field is used to distinguish between different builds of the same operator version + This is useful for operators that need to make changes to the CSV which don't affect their functionality, + for example: + - to fix a typo in their description + - to add/amend annotations or labels + - to amend examples or documentation + - to produce different builds for different environments + + It is up to operator authors to determine the semantics of release versions they use + for their operator. All release versions must conform to the semver prerelease format + (dot-separated identifiers containing only alphanumerics and hyphens) and are limited + to a maximum length of 20 characters. + type: string + maxLength: 20 + x-kubernetes-validations: + - rule: self.matches('^[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*$') + message: release version must be composed of dot-separated identifiers containing only alphanumerics and hyphens + - rule: '!self.split(''.'').exists(x, x.matches(''^0[0-9]+$''))' + message: numeric identifiers in release version must not have leading zeros replaces: description: The name of a CSV this one replaces. Should match the `metadata.Name` field of the old CSV. type: string diff --git a/staging/api/.github/workflows/go-verdiff.yaml b/staging/api/.github/workflows/go-verdiff.yaml index 921110b3b7..8695f93fc4 100644 --- a/staging/api/.github/workflows/go-verdiff.yaml +++ b/staging/api/.github/workflows/go-verdiff.yaml @@ -7,7 +7,7 @@ jobs: go-verdiff: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: fetch-depth: 0 - name: Check golang version diff --git a/staging/api/.github/workflows/go.yaml b/staging/api/.github/workflows/go.yaml index 5ebc0026ce..efdbfdd3fe 100644 --- a/staging/api/.github/workflows/go.yaml +++ b/staging/api/.github/workflows/go.yaml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out code into the Go module directory - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Set up Go uses: actions/setup-go@v6 with: @@ -43,7 +43,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 diff --git a/staging/api/.github/workflows/verify.yml b/staging/api/.github/workflows/verify.yml index 9a5ac9605c..b5a1cc6f7e 100644 --- a/staging/api/.github/workflows/verify.yml +++ b/staging/api/.github/workflows/verify.yml @@ -12,7 +12,7 @@ jobs: verify: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-go@v6 with: go-version-file: go.mod @@ -24,7 +24,7 @@ jobs: kind: 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/api/AGENTS.md b/staging/api/AGENTS.md new file mode 100644 index 0000000000..6694c064ad --- /dev/null +++ b/staging/api/AGENTS.md @@ -0,0 +1,301 @@ +# AGENTS.md + +This file provides AI agents with comprehensive context about the operator-framework/api repository to enable effective navigation, understanding, and contribution. + +## Project Overview + +This repository contains the API definitions and validation libraries used by [Operator Lifecycle Manager][olm] (OLMv0). It's a foundational library in the [Operator Framework](https://github.com/operator-framework) ecosystem. + +### Core Capabilities +- **API Definitions**: Kubernetes Custom Resource Definitions (CRDs) for OLM resources +- **Manifest Validation**: Static validators for operator bundles and package manifests +- **CLI Tool**: `operator-verify` for manifest verification +- **Common Libraries**: Shared utilities for bundle and manifest manipulation + +## Custom Resource Definitions (CRDs) + +| Resource | API Group | Description | +|----------|-----------|-------------| +| **ClusterServiceVersion (CSV)** | operators.coreos.com/v1alpha1 | Defines operator metadata, installation strategy, permissions, and owned/required CRDs | +| **Subscription** | operators.coreos.com/v1alpha1 | Tracks operator updates from a catalog channel | +| **InstallPlan** | operators.coreos.com/v1alpha1 | Calculated list of resources to install/upgrade | +| **CatalogSource** | operators.coreos.com/v1alpha1 | Repository of operators and metadata | +| **OperatorGroup** | operators.coreos.com/v1 | Groups namespaces for operator installation scope | +| **OperatorCondition** | operators.coreos.com/v2 | Tracks operator health status and conditions | + +## Directory Structure + +``` +api/ +├── cmd/ # Entry point binaries +│ └── operator-verify/ # CLI tool for manifest verification +│ +├── pkg/ # Core implementation +│ ├── operators/ # OLM API types +│ │ ├── v1alpha1/ # Core OLM types (CSV, Subscription, etc.) +│ │ ├── v1/ # OperatorGroup, OperatorCondition v1 +│ │ ├── v2/ # OperatorCondition v2 +│ │ └── reference/ # Image reference parsing +│ │ +│ ├── validation/ # Operator manifest validators +│ │ ├── errors/ # Validation error types +│ │ ├── interfaces/ # Validator interfaces +│ │ └── internal/ # Validator implementations +│ │ +│ ├── manifests/ # Bundle and manifest loaders +│ │ +│ ├── constraints/ # Constraint and CEL validation +│ │ +│ ├── lib/version/ # Version utilities +│ │ +│ └── apis/scorecard/ # Scorecard configuration types +│ +├── crds/ # Generated CRD YAML files +│ +└── hack/ # Build scripts and tools +``` + +## Key Packages and Their Responsibilities + +### API Types (`pkg/operators/`) + +Defines all Kubernetes custom resources used by OLM: +- `v1alpha1/`: Core types (CSV, Subscription, InstallPlan, CatalogSource) +- `v1/`: OperatorGroup, Operator, OperatorCondition +- `v2/`: OperatorCondition v2 +- `reference/`: Container image reference parsing utilities + +**Key files**: +- `v1alpha1/clusterserviceversion_types.go` - CSV API definition +- `v1/operatorgroup_types.go` - OperatorGroup API definition + +### Validation (`pkg/validation/`) + +Static validators for operator bundles and manifests: +- **Default Validators**: Required checks for all operators +- **Optional Validators**: Community, OperatorHub, and best practice validators +- **Custom Validators**: Extensible validator interface + +**Key files**: +- `validation.go` - Main validator orchestration +- `internal/bundle.go` - Bundle structure validation +- `internal/csv.go` - CSV validation rules +- `internal/operatorhub.go` - OperatorHub requirements + +**Validator Types**: +- `BundleValidator` - Bundle format and structure +- `CSVValidator` - ClusterServiceVersion validation +- `CRDValidator` - CRD validation +- `OperatorHubValidator` - OperatorHub.io requirements +- `GoodPracticesValidator` - Best practices checks +- `AlphaDeprecatedAPIsValidator` - Deprecated API detection + +### Manifests (`pkg/manifests/`) + +Bundle and package manifest loaders: +- Bundle loading from directories +- PackageManifest parsing +- Metadata extraction + +**Key files**: +- `bundle.go` - Bundle representation and loading +- `bundleloader.go` - Bundle loading logic + +## Development Workflow + +### Building operator-verify CLI +```bash +make install # Build and install operator-verify CLI +``` + +### Testing +```bash +make test-unit # Run unit tests +make test # Run all tests +make TEST= test-unit # Run specific test +``` + +### Code Generation +```bash +make generate # Generate deep-copy methods +make manifests # Generate CRD manifests +make verify # Verify generated code is up-to-date +``` + +### Code Quality +```bash +make format # Format source code +make tidy # Update and verify dependencies +``` + +## Validation Usage + +### Using Default Validators + +```go +import ( + apimanifests "github.com/operator-framework/api/pkg/manifests" + apivalidation "github.com/operator-framework/api/pkg/validation" +) + +// Load bundle +bundle, err := apimanifests.GetBundleFromDir(path) +if err != nil { + return err +} + +// Run default validators +validators := apivalidation.DefaultBundleValidators +results := validators.Validate(bundle.ObjectsToValidate()...) + +// Check results +for _, result := range results { + if result.HasError() { + fmt.Printf("Error: %v\n", result) + } +} +``` + +### Using Optional Validators + +```go +// Add optional validators +validators := apivalidation.DefaultBundleValidators +validators = validators.WithValidators(apivalidation.OperatorHubValidator) +validators = validators.WithValidators(apivalidation.GoodPracticesValidator) + +// Pass optional key/values +optionalValues := map[string]string{ + "k8s-version": "1.28", +} +objs := append(bundle.ObjectsToValidate(), optionalValues) + +results := validators.Validate(objs...) +``` + +### CLI Usage + +```bash +# Install operator-verify +make install + +# Verify manifests +operator-verify manifests /path/to/manifest.yaml +``` + +## Code Generation + +This repository uses controller-gen for code generation: + +### Generated Code +- **Deep-copy methods**: Auto-generated for all API types (`zz_generated.deepcopy.go`) +- **CRD manifests**: Generated from Go type definitions in `crds/` +- **Embedded CRDs**: Go code embedding CRD YAML in `crds/zz_defs.go` + +### Regenerating Code +```bash +make generate manifests # Regenerate everything +make verify # Verify nothing changed +``` + +**Important**: Never edit generated files directly - modify the source types and regenerate. + +## Common Tasks for AI Agents + +### Understanding Validation Flow +1. Bundle loaded via `pkg/manifests` +2. Validators instantiated from `pkg/validation` +3. Each validator checks specific aspects (CSV format, CRD structure, etc.) +4. Results aggregated with errors/warnings +5. Results returned to caller + +### Adding a New Validator +1. Create new validator in `pkg/validation/internal/` +2. Implement `interfaces.Validator` interface +3. Add validator to appropriate suite in `pkg/validation/validation.go` +4. Write unit tests in `*_test.go` +5. Document validator behavior + +### Modifying API Types +1. Edit type definition in `pkg/operators/v*/` +2. Update CRD markers (kubebuilder comments) if needed +3. Run `make generate manifests` to regenerate code +4. Run `make verify` to ensure clean state +5. Update tests if behavior changed + +### Understanding CRD Structure +- All CRDs defined in `pkg/operators/v*/` +- Generated to `crds/*.yaml` via controller-gen +- Embedded in Go code at `crds/zz_defs.go` +- Used by OLM and other operator-framework components + +## Important Dependencies + +| Dependency | Purpose | +|------------|---------| +| k8s.io/api | Kubernetes core types | +| k8s.io/apimachinery | Kubernetes meta types | +| sigs.k8s.io/controller-tools | Code generation (controller-gen) | +| github.com/blang/semver/v4 | Semantic versioning | +| github.com/operator-framework/operator-registry | Registry integration | + +## Navigation Tips + +### Finding API Definitions +- Core OLM types: `pkg/operators/v1alpha1/` +- OperatorGroup: `pkg/operators/v1/operatorgroup_types.go` +- OperatorCondition: `pkg/operators/v2/operatorcondition_types.go` + +### Finding Validators +- Validator implementations: `pkg/validation/internal/` +- Validator interfaces: `pkg/validation/interfaces/` +- Main orchestration: `pkg/validation/validation.go` + +### Finding Utilities +- Bundle loading: `pkg/manifests/bundle.go` +- Image references: `pkg/operators/reference/` +- Version utilities: `pkg/lib/version/` + +## Anti-Patterns to Avoid + +1. **Don't modify generated code** - Edit source types and regenerate +2. **Don't skip `make verify`** - Always verify generated code is current +3. **Don't add breaking API changes** - This is a library used by multiple projects +4. **Don't add validators without tests** - All validators must be thoroughly tested +5. **Don't bypass validation interfaces** - Use the provided validator framework + +## Resources and Links + +- [OLM Documentation](https://olm.operatorframework.io/) +- [Operator SDK Bundle Validation](https://sdk.operatorframework.io/docs/cli/operator-sdk_bundle_validate/) +- [Operator Framework Community](https://github.com/operator-framework/community) +- [Validation Package Docs](https://pkg.go.dev/github.com/operator-framework/api@master/pkg/validation) + +## Quick Reference + +### Common Build Targets +```bash +make install # Install operator-verify CLI +make test-unit # Run unit tests +make generate manifests # Generate code and CRDs +make verify # Verify no uncommitted changes +make format tidy # Format and tidy code +``` + +### Tool Management +Tools are managed via Makefile and installed to `./bin/`: +- `controller-gen` - Kubernetes code generator +- `yq` - YAML processor for CRD patching +- `kind` - Local Kubernetes clusters + +## Contributing + +See [DCO](DCO) for Developer Certificate of Origin requirements. + +When contributing: +1. Run `make verify` before submitting PRs +2. Add tests for new validators or API changes +3. Update CRD generation if modifying types +4. Follow existing patterns for consistency + +[olm]: https://github.com/operator-framework/operator-lifecycle-manager diff --git a/staging/api/Makefile b/staging/api/Makefile index 400f8ef165..9641500dbc 100644 --- a/staging/api/Makefile +++ b/staging/api/Makefile @@ -129,7 +129,7 @@ $(YQ): $(LOCALBIN) GOBIN=$(LOCALBIN) go install $(GO_INSTALL_OPTS) github.com/mikefarah/yq/v4@$(YQ_VERSION) .PHONY: kind -kind: $(KIND) ## Download yq locally if necessary. +kind: $(KIND) ## Download kind locally if necessary. $(KIND): $(LOCALBIN) GOBIN=$(LOCALBIN) go install $(GO_INSTALL_OPTS) sigs.k8s.io/kind@latest diff --git a/staging/api/crds/operators.coreos.com_clusterserviceversions.yaml b/staging/api/crds/operators.coreos.com_clusterserviceversions.yaml index b957a9badb..1e81a97169 100644 --- a/staging/api/crds/operators.coreos.com_clusterserviceversions.yaml +++ b/staging/api/crds/operators.coreos.com_clusterserviceversions.yaml @@ -27,6 +27,10 @@ spec: jsonPath: .spec.version name: Version type: string + - description: The release of this version of the CSV + jsonPath: .spec.release + name: Release + type: string - description: The name of a CSV that this one replaces jsonPath: .spec.replaces name: Replaces @@ -8988,6 +8992,30 @@ spec: type: string name: type: string + release: + description: |- + release specifies the packaging version of the operator, defaulting to empty + release is optional + + A ClusterServiceVersion's release field is used to distinguish between different builds of the same operator version + This is useful for operators that need to make changes to the CSV which don't affect their functionality, + for example: + - to fix a typo in their description + - to add/amend annotations or labels + - to amend examples or documentation + - to produce different builds for different environments + + It is up to operator authors to determine the semantics of release versions they use + for their operator. All release versions must conform to the semver prerelease format + (dot-separated identifiers containing only alphanumerics and hyphens) and are limited + to a maximum length of 20 characters. + type: string + maxLength: 20 + x-kubernetes-validations: + - rule: self.matches('^[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*$') + message: release version must be composed of dot-separated identifiers containing only alphanumerics and hyphens + - rule: '!self.split(''.'').exists(x, x.matches(''^0[0-9]+$''))' + message: numeric identifiers in release version must not have leading zeros replaces: description: The name of a CSV this one replaces. Should match the `metadata.Name` field of the old CSV. type: string diff --git a/staging/api/crds/zz_defs.go b/staging/api/crds/zz_defs.go index 06bb23be58..940c0c799b 100644 --- a/staging/api/crds/zz_defs.go +++ b/staging/api/crds/zz_defs.go @@ -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\xfd\xeb\x53\x33\x32\xd1\x73\xaa\x89\x9e\x33\x45\x04\x07\x22\xa1\xc8\x68\x02\xea\x11\x82\x36\x3c\x62\x29\xba\x59\xff\x62\x0b\x49\xcd\x2e\x35\xd5\xa5\x1a\x17\x73\xaa\xd6\xa7\xf8\x7a\xe5\xd3\x0d\xdd\xd9\x07\x17\xaf\x69\x56\xcc\xe9\x6b\xf7\xa1\x4a\xe6\x90\xd3\x7a\x0f\x88\x02\xf8\xc5\xf5\xe5\x0f\xbf\xbb\x5d\xf9\x82\xb4\x67\x67\xe3\xee\x27\x4c\x99\xa9\x42\x46\x41\x3c\xa7\xc0\xb5\x5b\x16\x40\xfe\xb1\xf1\x37\xb7\x05\x24\xff\x18\xaf\x51\x2e\x26\xff\x05\x89\x6e\x7c\x2c\xe1\xbf\x4b\x26\x21\x6d\x52\x64\x26\xc8\x73\x9f\x95\x8f\xcd\xfc\x37\x3e\x2a\xa4\x61\x0b\xba\x71\xe4\x6d\x6b\xb0\xbf\xd6\xe7\x2b\x6f\xfb\xf3\x68\xe5\x5b\x42\xcc\x24\xb9\xb7\x4e\x0d\x2f\x04\x85\x3b\xd4\xed\x41\x48\xdd\xcc\xda\x9d\xcb\x94\xd9\x2e\x12\x14\x70\xcb\x1d\x71\x53\x71\xf7\x96\xe3\xb5\xce\xcd\x14\x81\x54\x86\x45\x94\x59\x6a\x98\xe8\x02\xa4\x26\x12\x12\x31\xe3\xec\x9f\x55\xef\x8a\x68\x81\xc3\x66\x54\x83\xd2\x04\xcf\x35\xa7\x19\x59\xd0\xac\x84\x33\x42\x79\xba\xd6\x77\x4e\x97\x44\x82\x19\x97\x94\xbc\xd1\x23\xfe\x44\xad\xd3\xf2\x41\x48\x20\x8c\x4f\xc5\x1b\x32\xd7\xba\x50\x6f\xce\xcf\x67\x4c\xfb\xeb\x21\x11\x79\x5e\x72\xa6\x97\xe7\xc8\xe9\xd9\xa4\x34\xac\xf7\x3c\x85\x05\x64\xe7\x8a\xcd\x46\x54\x26\x73\xa6\x21\xd1\xa5\x84\x73\x5a\xb0\x11\xbe\x0c\xc7\x2b\x62\x9c\xa7\xbf\x96\x6e\x9b\xa8\x95\x81\x37\x9e\x07\xe2\x39\xf4\x9e\x8b\x65\x38\xb6\xdd\x9c\xb6\x43\xfb\xb2\xf5\x9a\x98\x8f\xcc\x34\xde\xbc\xbf\xbd\x23\x9e\x22\x77\xd4\x71\x89\xea\x47\x37\xcc\x90\x5f\x2d\x33\xb3\x8c\x4f\x41\xda\x5f\x4e\xa5\xc8\xb1\x57\xe0\x69\x21\x18\xd7\xf8\x47\x92\x31\xe0\x9a\xa8\x72\x92\x33\xad\x70\x5b\x83\xd2\x66\x21\xd7\x3b\x7e\x8b\xd7\x29\x99\x00\x29\x8b\x94\x6a\x48\xd7\x1f\xb9\xe4\xe4\x2d\xcd\x21\x7b\x4b\x15\xbc\xf8\xda\x99\x35\x52\x23\xb3\x20\x3b\xaf\x5e\x53\x58\x58\xff\xc1\xda\xa9\x27\xc4\xdf\xee\xfb\x2c\xf7\x56\x46\x43\x52\x48\x32\x2a\xad\x80\x42\x34\x64\x19\xf9\xf8\xfd\x07\x32\x17\x0f\xe6\x20\x31\xae\x34\xcd\x32\x3c\x98\x4e\x88\x58\xeb\x1a\xef\x80\x84\x72\x92\x53\x4e\x67\x40\x68\x51\x28\x32\x15\x92\x50\x32\x63\x0b\xe0\x9e\x01\xac\xae\xc5\xd6\xf7\xdb\xc6\xd9\x88\xbd\x91\x36\xde\xaa\xfe\x5b\x47\xf0\xca\x37\xdb\x78\x9d\x69\x6b\xf2\xd9\x7e\x13\x6b\xda\x45\xdd\x05\x1e\x29\x4e\x4a\xae\xb4\x2c\x71\x97\xa4\xe4\x1e\x96\xee\x74\xe5\xb4\x20\x4a\x0b\xf3\xe1\x03\xd3\x73\x42\x9b\x27\x8b\x6a\x3c\x2e\x93\xf5\xd7\x32\x4d\x81\x26\x93\x25\x31\xd2\x28\xb2\x33\x2d\x44\x86\xbc\x0e\xfb\x33\x6c\x8d\x48\xd0\x92\xc1\x02\x08\x95\x13\xa6\x25\x95\xcb\x6a\x6f\xad\x9f\x83\x47\xe7\x1f\xe7\xa5\x21\x1c\x6d\x9f\x3d\xf2\xd8\xce\x26\xf6\x3a\x71\xb2\x59\x5a\xc9\xc7\xdd\x27\xfa\xfa\xd2\xed\xe0\x5a\xd8\x56\x6e\x07\x83\x22\x66\xa7\x3a\xb1\xa8\x92\xda\x91\x00\xb7\x35\x53\x22\x64\xb5\xb7\xc8\x64\xb9\x71\x8c\xc6\x56\x27\x13\x30\x6c\x50\x52\x6e\xa6\x7e\xe3\x11\xea\x30\xb1\x8f\x6d\x46\xd3\xc4\x03\xdf\xb4\xf3\x9b\x7d\x53\x29\xe9\x66\xea\x09\x61\x1a\xf2\x2d\x3d\x93\xd5\x69\x6e\xce\x67\xf5\xb1\x21\x70\xc1\x52\x30\x13\xab\x29\xb3\xbb\xcc\xf0\x04\x3a\x11\xa5\xb6\xf3\xe9\x1e\x49\xc9\x82\x51\x42\x67\x33\x09\x33\xdc\xff\x5b\x87\x7d\x62\x4e\x6c\xdb\x7e\xec\xeb\x36\xb2\x4a\xcd\xa3\x4f\x18\xf6\xfb\xe8\x03\x7c\x13\xf3\x68\x3e\xb0\x2e\x37\xb7\xdb\x53\x6b\x68\x1b\x4d\xcc\x9c\xf8\xa9\x15\xf2\xd1\x87\x77\x59\x5b\xdb\x9e\x58\x61\xdb\xda\xeb\xbc\x42\x88\xfb\x76\x62\xce\x4c\x7d\x01\x18\xce\x81\x0f\xd6\x2c\x7d\x02\xa4\x00\x39\x15\x32\x37\x87\x87\x13\x4a\x12\x2b\xca\x56\x7c\x0b\x19\x2e\x4f\x1e\x9b\x4e\xb2\xeb\xfa\xdb\xb6\xcb\x2e\xb0\x6d\x44\x0a\xaa\xe7\x4f\x3c\xb6\xdb\x52\xd9\xd6\x9c\xb4\x27\x1f\x7e\x82\xf1\xad\xf5\x5d\xdf\x5b\xd1\xfb\x36\xd3\x10\xbd\x53\xbc\xb2\x76\xe9\x75\x17\xce\xbd\xda\x6e\xe8\xc3\x07\x50\xca\xc8\x0b\x28\x84\x4a\xfa\x40\x80\x27\xc2\xf0\x94\xff\xe7\xf6\xe3\x95\x1d\x7d\x13\x77\x5d\x6f\x97\x9a\xb0\xbc\xc8\x20\x37\xb2\x28\xf9\xf1\x03\x95\x6a\x4e\x33\x90\x3f\xe1\xad\xf8\xe3\x9f\x79\xde\xfe\x24\xa1\xdb\x0f\x76\xb3\x19\x21\x53\x41\x6a\xd8\x5f\x0a\x19\x5d\x5a\xc2\x52\x48\x44\x6a\xae\x05\x21\x49\x61\x94\x85\xbc\x28\x35\x10\x6a\xbf\xc5\x77\x60\x7c\xb6\x0b\xe5\x7b\xad\x06\x31\x22\x55\x4e\xf5\x1b\x32\x59\xea\xa7\x4e\x1b\x21\x9f\x46\xe9\xae\x6c\xa7\x49\xcc\xd3\xcc\xc7\xb6\x9d\x58\x50\xb3\xe3\x27\xdf\xd2\xc8\xdb\x94\x71\x90\xd7\x42\xea\x5d\xf8\xa4\x51\xec\x66\xb0\x2e\x8e\x36\x9b\x9f\x32\xc6\xf5\xef\x7e\xfb\xc8\x93\x29\x14\x99\x58\x9a\xfd\xf3\xf4\xf1\xdc\xf1\x7d\x76\x66\x25\xbb\xf6\xb7\x2b\xfb\xd8\xb1\x3f\x6b\x1a\x8c\xd1\xd3\x26\xed\xb3\x53\x47\x3c\xd6\xbb\x55\x0a\xf4\xc1\xee\xdb\xeb\x4b\x6f\xeb\xb9\x81\x29\x48\xe0\x89\xe7\x73\xd5\x9f\x5a\x10\x4a\xbe\x2b\x27\x20\x39\x68\x50\x0d\x4d\x60\x59\x80\x37\xac\x81\xfd\x81\x04\x49\x4a\xcd\x32\xf6\xcf\x4d\xe6\x88\x4d\x6f\x15\xfd\xa6\x7d\x42\xa6\xf2\x8f\x3d\x21\x59\xf9\xc7\x9e\x92\xaf\x6c\xdb\xe7\xea\x7e\x7a\x17\xda\xd6\x5a\x27\x34\x82\x38\x8d\xa1\x5a\x99\xb4\xbd\x14\xd1\x39\xf9\xd3\xdb\x7c\x03\xa5\xd7\x68\x3c\x6f\x19\x9f\xb7\x11\x4c\x4e\xb6\xf9\x25\xc6\x46\xe1\x1f\xa3\x49\xfc\xc7\x9f\xc6\xb6\xcb\xd3\x31\x79\x9f\x17\x7a\xe9\xcd\x40\xec\x89\xce\x99\x22\x5c\xe8\x75\x41\x30\xfa\x34\x2d\x36\x1b\x21\x9f\x9c\xa9\x8b\xeb\x4b\x6f\xde\x7e\xc1\xa5\x55\x05\x24\x3d\x10\xf4\x6f\x5b\x64\xb4\xc4\xfc\x29\x83\x2c\x25\xcc\xc8\xf0\x86\x58\x32\xc9\x44\x72\xef\x2c\xf9\x37\xef\x88\x12\x96\xe7\x18\x45\xcf\x48\xfe\x89\xe0\xaa\xcc\x81\xb0\xa7\x98\xc8\x20\xd9\x0f\x92\x7d\xb3\x0d\x92\xfd\x20\xd9\xb7\x9a\x75\xd2\xf5\x81\x39\xae\x10\xb2\x95\x3d\xe2\x73\x03\x83\x7c\xac\x0d\x0c\x12\xdb\xc0\x20\x07\x06\xf9\x54\xc7\x4f\xbe\xe5\x4e\x92\xee\x93\x7d\x3d\xc5\x3b\x06\xcf\xc1\xe0\x39\x18\x3c\x07\xae\x0d\xd7\xa7\x6b\xc3\xf5\x39\x5c\x9f\xed\xf6\xd9\x5d\x9f\x83\xe7\x60\xf0\x1c\x0c\x9e\x83\xc1\x73\xd0\x6c\x83\xe7\x60\xf0\x1c\x0c\x9e\x83\xc1\x73\xb0\xa5\x0d\x92\x7d\xc7\x4e\x07\xc9\x7e\x90\xec\xb7\xb5\xc1\x73\x30\x78\x0e\x06\x06\x39\x30\xc8\x81\x41\x6e\x69\x7d\xf4\x1c\x24\x19\x50\xbe\x59\x9d\x5f\x49\x6e\xc4\xe7\x50\x00\x64\x53\xe6\x52\xfb\xdc\xaf\xc9\x04\xe6\x74\xc1\x44\x29\xc9\xc3\x1c\xb8\xcf\x4b\x25\x33\xd0\xca\xec\x02\xd0\xb0\x49\x03\x7c\x82\xbd\x3d\xce\xd2\x46\x04\x38\x9d\x64\x1b\x3b\x7e\x8a\x7b\xb9\x5f\x3e\xee\x29\x99\x08\x61\xde\x6e\x7d\xc6\x50\x7b\xf1\xda\x40\x84\xa4\x96\x6d\x3a\xd7\xe6\xc4\x96\xb7\x37\xef\x9e\x35\x9d\x65\x63\x27\x97\xd5\xd8\x04\x5d\x38\x98\xf6\x67\xae\x3c\xf3\xe9\xc7\x07\x0e\x29\x66\x81\x9f\x11\xa6\xcd\x03\x86\xb1\xb0\x84\xe9\x6c\x59\x91\xf7\x79\xe7\xc9\xbc\xbd\x79\xb7\xbb\x9b\xcb\xaf\xd2\xd6\xae\x23\x7a\xb4\x06\x7f\xd5\xe0\xaf\xaa\xda\x20\xb4\x75\xec\x74\x10\xda\x06\xa1\x6d\x5b\x8b\x2f\xb4\xf5\xdd\xbf\x33\x78\x65\xc8\xe0\x95\xf1\x8f\x0d\x5e\x99\x27\x1f\x1f\xbc\x32\x83\x57\x66\xf0\xca\x3c\xde\x06\xf9\xd5\xb5\x41\x7e\x1d\xe4\xd7\x76\xfb\xec\xe4\xd7\xc1\x2b\x33\x30\xc8\x81\x41\xd6\x6d\x60\x90\x03\x83\x6c\xb5\xcf\x31\x9f\x63\xb0\x70\x0f\x16\xee\xc1\xc2\x3d\x5c\x80\xc3\x05\x38\x5c\x80\x4f\x75\x3c\x58\xb8\x7d\x1b\x2c\xdc\x83\x85\xbb\xd5\x06\x0b\xf7\x60\xe1\x1e\x2c\xdc\x83\x85\x7b\x4b\x1b\xe4\xd7\x8e\x9d\x0e\xf2\xeb\x20\xbf\x6e\x6b\x83\x85\x7b\xb0\x70\x0f\x0c\x72\x60\x90\x03\x83\xdc\xd2\xfa\x68\xe1\x7e\xe2\xf0\xee\xb2\x4b\x9b\xf6\x6a\x27\x36\xfb\x48\xf7\x31\x79\x4b\x39\x61\x3c\xc9\xca\x14\xf0\x9b\x29\x50\x5d\x4a\x50\x67\x24\x63\x39\xf3\xc5\x3a\x84\x34\x9b\x66\x94\x50\x05\xca\xf5\xb1\x71\xa8\xaa\xdf\x0d\xdf\x3e\xfe\x9a\x8f\xf3\x91\x47\x8b\x8b\x55\x61\xfb\x8c\xfb\x7e\xdc\xb6\xda\x9b\x0c\x96\xec\x30\xcd\x66\x7c\xf3\x20\xd6\x6e\xb1\x85\x7e\x9e\x7c\xed\x6d\x5b\xf0\x91\x2d\xf7\xe4\xe5\xf2\xd4\x95\x32\x22\x13\xaa\xe0\x0f\xff\xb6\x56\xe2\xaa\xf9\x48\x0e\x29\xa3\x66\xa8\x8d\x4f\x3c\x7d\xcd\xd4\x43\x6c\xdf\xe4\x3b\x1c\x96\x8a\x8c\x8e\xbd\xb8\x72\x36\x5d\x8f\x88\xd9\x77\xe9\xa5\xed\xe3\x56\x4b\xaa\x61\xb6\x6c\xd4\x6d\xc2\x6d\x56\x0b\x0d\x7c\x4b\x09\x33\xaf\x81\x6e\x1c\xe2\x61\x0e\xd2\x1e\x31\x5f\x2b\x48\xf9\x81\x98\xaa\xd2\x85\xba\xe4\x7f\x3c\x95\xff\xe3\xc7\xd9\xf0\xf5\x53\xeb\xbb\xa9\x82\x92\x6f\xbb\x5e\x90\x7e\x3e\xdf\x59\x0f\xd9\xbb\x0a\x08\x66\x75\x82\x0b\x2a\xcd\xc5\xe4\x3d\x69\x28\x9e\xd5\x4f\x6f\xed\x7f\x65\xd9\xb6\xdd\x51\x3b\xc8\x6a\x4f\xcb\x68\xa3\x06\x8e\xcd\x36\xaf\xde\x2e\xa2\x99\x2b\xc6\x78\x0d\x32\x67\x4a\x6d\x4b\x8a\x6a\x93\xfe\xd4\x2d\xb6\xc3\xed\xb5\x22\x33\xfb\x75\xf1\x6f\xd4\x20\xa7\x12\xa0\xad\x95\x65\x42\x13\x22\xcb\xcc\x88\xd3\x3c\x25\xae\x4e\x11\xa1\x49\x22\x4a\xae\x09\x07\x48\x31\xb1\x6a\xe3\xf6\xde\xe1\xee\xdb\x41\x82\xde\x55\x7e\x1e\x59\x3a\x9f\x7c\xca\xbd\xc3\x85\x7d\x85\x8d\x45\xb2\x9a\x6d\x77\x79\x1b\x87\x7f\x5a\x88\xd8\x47\x32\xd9\x59\x2e\xe9\x22\xb3\x5e\x8b\x8c\x25\xcb\x9b\x32\x03\x32\x17\x59\xaa\xb0\xe6\x9b\xb9\x3c\x2b\x9f\x68\x53\x97\x2a\xf0\x69\x7c\xc9\x33\x32\x29\x35\x49\x05\x58\xb3\xa1\x43\x97\x6a\xfe\x7c\xa7\xf1\xad\xa7\xfc\x61\x6e\x8b\x11\x9a\x8e\x09\x2d\x8a\x0c\x33\x27\x85\x11\x3c\x1e\xe6\x2c\x99\xdb\x1a\xac\x05\x4d\x60\xd3\x63\xbb\xcb\xa5\x3b\xe9\x6a\x64\x2f\x7d\x8d\x78\xb3\xf7\xe4\xa9\x5d\x47\xf6\x54\xdc\x88\x2d\x0b\xf6\x8d\x14\x65\xb1\xe3\xe3\xdd\xf6\x00\xb1\x25\xc3\xec\x40\xe6\x3a\xd2\x2b\x22\x96\xff\xd2\x39\xc9\xed\x52\x2b\x67\x81\x75\x1e\x99\x31\xa6\x3f\xe6\x65\xa6\x59\x91\xe1\x4f\x2c\x02\x96\x22\x54\x42\x7d\xc1\x9d\x11\xca\x97\xde\xe7\xee\x4a\x18\x42\x4a\xe8\xcc\xf4\xa8\xb1\x3c\xaa\x98\xee\x4c\xb5\xad\x91\x58\xe6\x46\xfe\x6a\xd8\x80\x15\xaa\xfb\x7c\x59\x53\x41\x1e\x58\x96\x19\xe5\x87\x66\x99\x78\x80\x74\x4c\x8e\x8e\x56\x2f\xa0\x44\xc8\x06\xdd\xc8\xea\x8e\xfe\xb5\xf5\x94\xe1\x6b\xf5\x8b\xed\xa6\xc8\xed\xab\x85\x90\xfd\x34\x11\xb2\xbf\xce\x45\x50\x95\xba\xaf\x1c\x54\xa3\x8c\x29\x3d\x72\x54\x6a\x91\xb3\x64\xa7\x4e\xb8\xe0\xde\x11\xf1\xe7\x9b\xef\x9f\x7d\x83\x5e\xb5\x87\x73\x35\x39\x41\x9b\x3d\x5a\x50\xa9\x19\xcd\x48\x29\x33\x65\xf7\x28\x35\x0a\x8b\xf4\x55\x50\xe7\x14\xe3\x3c\x12\x50\xc8\x2e\x08\xf9\x57\xbb\x2b\xdd\x66\xb0\xac\x4c\xf0\x6c\x49\xa8\xdd\x0a\xd3\x32\xcb\xce\xc8\x94\x71\x6a\x2e\x32\x28\x7c\x0e\xef\x0e\xa6\x99\xba\xdd\x32\x9e\x80\x99\xa6\x51\xe5\x9b\x40\xca\xcd\xc8\x86\x65\x56\x3c\x2d\x3d\x73\x65\x3f\xad\xa5\x4a\x39\x52\x0c\x7f\x4b\xe8\x24\x03\xd4\x34\x9c\xcc\x79\x23\x32\x74\x29\x56\x7e\x0f\xac\x15\x4a\x9b\x5f\xff\x2f\xc6\x77\xd5\xd6\x6d\xbb\xc1\xab\x3d\xa1\x9c\x00\xd3\x73\x90\x38\xf4\xd2\xf0\x5f\xb3\xd9\xeb\x43\x75\xa2\xca\x64\x6e\xa6\xe8\xa8\x10\xa9\x3a\x32\xdc\xf9\x48\x41\x22\x41\xab\xa3\x53\xf3\xd7\xea\xbb\xe2\x7c\x35\x7f\x77\x4e\x0b\x76\x74\x7a\x46\x70\xc2\xb1\x40\xa9\xd0\xf3\x5f\xf8\x39\xf2\x13\xd6\xaa\xe7\xfd\x54\x6b\x9d\xa2\x9b\x66\x0f\xae\xb2\xa6\x28\x6c\x51\x4a\x73\x7f\x6a\xc0\xb4\x73\x73\x52\x70\xcf\x35\x7c\xd0\x2b\x17\x29\x21\x17\x9c\x80\xf5\x1a\x82\x26\x39\x50\xee\x9e\x86\x05\xc8\xa5\x9e\xa3\x23\x51\x55\x5c\x74\x58\xb9\x1d\xa2\x11\xea\xb6\x71\xd5\x1c\x2b\xf3\x2b\x54\x1f\x37\x5b\xfc\x79\x75\x85\x8e\xff\xf5\x78\xf5\x4a\xaa\xef\xe0\x5f\xf6\x7a\xa0\x10\xd6\x69\x2d\x7e\x30\xbf\x6c\xaf\x83\xfd\xc8\x5e\x26\x15\x3b\xfc\xfe\x7b\x5b\xec\xd9\x4d\xf8\x77\x8c\xa7\xaa\x02\x56\x4d\xed\x2d\xe1\x16\x6d\xe3\x4a\x21\x85\xbf\xd8\x55\x5a\x57\xba\x76\x55\x94\x9e\xa0\xb1\xa1\x95\xf7\x41\x91\xc6\x7a\xd1\x2d\x29\xd9\xb0\xdd\x33\xeb\x9d\x37\x62\x65\x46\x27\x90\x29\x67\x40\x84\x06\xf9\xe4\xe2\xfb\x0f\x55\xe9\x76\x09\xf4\x09\xa3\xf8\x33\xa8\xcf\x3b\x84\xf9\xac\x95\xc8\x5f\x6f\xbb\xab\x39\x38\x15\xfb\x39\xb1\xc8\x2d\x68\x7b\x56\x73\x5a\x98\xa3\x6a\xfb\xb0\xce\x95\x15\xc7\xc9\xf7\x38\xd3\x4f\x9f\xb8\xbd\xd4\xc3\xdd\x4b\x3e\x6f\x1a\x64\xa7\xf3\xb6\x5b\x28\xd1\x1e\x1d\x3e\x66\xca\xab\x5b\x6b\x9a\x57\x36\xb4\xd3\x0b\x9d\x26\x97\xd0\xa6\x43\x21\x05\x65\xc1\x75\x2c\xc0\x91\xf4\x9f\xd7\x5d\x44\x5e\x82\x7d\xf4\xf3\x11\x51\x90\x41\xb2\xa9\x26\xfb\xa6\x87\x35\xe4\x45\xf6\xd4\xc9\x23\x7b\xeb\xf2\x39\xe3\x37\x40\xd3\xe5\x2d\x24\x82\xa7\x3b\x72\xe9\x6e\xca\xd2\x07\xc6\x59\x5e\xe6\x84\x97\xf9\x04\x70\x2d\x94\x1d\x14\x39\x8e\x35\xa8\x50\xc2\xe1\x21\x5b\x3a\x2e\x93\x92\x42\xa4\x9e\xf1\x4c\x8c\x56\x4f\xd3\x5d\x2f\x9d\x07\xa6\xe7\x58\xb6\x82\x2f\xcd\x50\x4c\xd7\x37\xa2\x24\x89\xa4\xca\x08\x8d\x67\x38\x34\xd3\xe6\x16\x9d\x00\xba\xd8\x59\x0a\x66\xcb\xd0\x05\x65\x99\xd1\x72\x76\xbd\x16\xdf\xc1\x94\x96\x99\x46\xfb\xd0\x2b\x72\x62\x08\xf7\xca\xfd\xa6\x6e\x8d\xde\xa1\x84\xe0\xe6\xbf\x16\x76\x09\x5f\xee\x74\x0f\x3f\xdf\x2e\x40\xe8\xbe\xed\x0a\x88\xee\x5b\x41\x4b\xb5\xab\x99\xa9\xb5\x1b\x2e\x79\x6a\x0e\x61\x53\x9a\x6f\xdc\x23\x4c\xb9\x9e\x77\x9b\xd5\xc7\xa1\xbc\x36\x50\x2d\xc5\x4c\x82\x52\xef\x80\xa6\x19\xe3\xf0\x02\x9b\xfa\x6e\x0e\x24\xa7\x9f\x70\x63\x6b\x96\x83\x11\xb6\x9a\xdb\x9a\x36\x5f\x5f\x0b\x92\xd3\x7b\xa8\xe8\x24\x13\x98\x0a\xb9\x43\x48\x87\x6f\x4c\x35\x37\x93\xdd\xb4\x53\xca\x32\x48\xc7\x48\x49\x63\x2c\xb3\xd9\xa5\xc8\x32\x90\x76\x1f\x9a\xbf\x19\x2f\x81\x68\xb1\xe3\x60\x85\x14\x68\x9a\xb0\x03\x34\xa5\x19\x94\x16\xa8\xe9\xd2\xde\x38\x78\xd8\x08\x25\xd7\x2b\xf3\xff\xfe\x53\x82\x46\xf8\x1d\x07\x94\x40\x15\x76\x66\x8f\x8d\x2a\xe5\x94\x26\x5e\x7e\x6d\xbd\x9c\x8d\x98\x19\x93\x2b\xa1\x5d\xe8\x72\x35\xa5\xe6\xd7\x3b\x8e\x87\x9a\x3e\x10\x50\x9a\xe5\xc8\x6d\xd2\x12\x43\x52\xcd\x60\xb8\x96\x74\xf3\xde\x6d\x9d\xf5\x3f\xbc\x7a\xb5\xa3\xe8\xfc\xfc\xa7\x56\x02\xda\x66\x9e\x75\xc3\x5f\x55\xdc\xdb\xdf\xae\x85\x48\x95\xd9\x7e\xcc\xa9\x2a\x85\x30\xef\x28\x31\x96\x83\x29\xcd\xf8\xac\x64\x6a\x4e\x26\xa0\x1f\x00\x38\x81\x4f\x16\x5e\x6e\xc7\xf1\xfe\x09\x52\xe0\x7e\x33\xab\x55\x3b\x24\x5b\x6b\xf0\xba\x3f\x0b\xb0\x60\x8a\x09\xfe\x2d\x53\x5a\xc8\xe5\xf7\x2c\x67\x4f\xd4\xb4\xf0\xad\x3b\xf7\xa9\xaf\x53\x91\xa5\xe4\xc6\x6e\x81\x5b\xb0\x33\x23\x01\xdd\x1f\x5a\x58\xdb\x08\x31\x1c\x61\x42\x93\xfb\x5d\x6f\xb5\xbd\x57\x75\xdb\x7a\x75\xb8\x45\x5f\xbf\xea\xcb\xb2\x7a\x41\xed\x39\x97\x12\x55\x82\x6a\x24\xbc\x3b\xec\xc1\x7a\xff\xc9\x4e\x77\x6b\x69\x1f\xe6\x42\x01\x3e\x40\xa8\x7c\x5a\x26\x6c\xbe\x86\xf7\x89\x32\x55\x71\x5a\x8c\x57\xe1\xa0\x08\x9d\x4e\xdb\x4f\xa4\x7b\x48\xca\xb6\x5d\x6a\x92\x97\x4a\x93\x9c\xea\x64\x6e\xad\xd3\x22\xad\xa4\xd7\x63\xe5\xb4\xcc\x7d\x96\x76\x67\xf7\xd8\xfe\x8e\x2c\x62\xe9\x7c\xff\xa9\x30\x97\xc7\x53\x2e\xef\x76\x6b\xad\xf3\x6a\x37\x6d\xab\x4d\xd6\x5e\x5c\xa7\x26\xe0\x5d\x6a\x2f\xee\xe6\x27\x68\x89\xbf\xb8\x7a\xb7\xfb\xa9\xe9\x62\x94\xd9\xdb\x2c\xd3\xdd\x47\x62\xda\xc5\x23\x73\xe0\x9d\x26\xee\x9b\xb6\x37\x0f\xf5\x67\x75\x46\x28\xb9\x87\xe5\x99\x95\x3c\x1a\xa0\xa8\xe6\xe1\xbd\x08\x91\x90\x39\xf1\x14\x4c\x8f\xd8\xa1\x1d\x63\xf7\xd9\xee\xb0\x31\xfd\xe0\xfb\xf8\x6f\x7d\x1b\x19\x42\xf7\xfc\x85\x9f\xa0\x3d\x7e\xb6\xff\xd9\xb1\xed\x1e\x96\xfb\xfd\x60\x65\x27\x99\x55\x70\x5a\xbc\xdd\x23\xe6\x83\x4a\x7b\xa8\xb6\xc5\x7e\x8e\xf5\x66\xeb\x60\x50\xb4\xcd\x4f\x62\xd0\xeb\xed\x79\x50\x9a\xe3\xb6\xec\xb4\x66\x5a\x8e\x95\xdd\xbf\x86\xc3\xcc\x59\x61\x73\xfa\x9c\xb7\x71\xff\x4d\x6c\xdb\x0f\x34\x63\x69\x35\xa4\xe5\x3e\x97\xfc\xcc\xc8\xd6\xe6\x3f\x78\xfd\x58\x89\xff\x9d\x00\x75\x25\x34\x7e\xf2\x62\x6b\x60\x5f\xeb\xa5\x57\xc0\x8e\xea\x9c\x56\xc8\x56\xd1\x5e\x61\x53\xd6\xdc\x4c\x7b\x5c\xe5\x3a\xd2\x53\x91\x4b\x4e\x84\x74\x53\xb7\xf7\xa0\xa6\x33\x37\xb0\x1d\x12\x2f\xd2\x89\x75\xd6\xa2\xfb\x6b\xe3\x98\x6e\x85\x84\x6c\x2d\x50\xc4\xe1\xdd\xd0\x28\x0b\xda\x6f\xd0\x5c\x51\x64\xa8\x9d\x39\xa5\x89\xfa\xd0\xaa\x1d\xbd\x22\xcd\x96\x83\x9c\xa1\x17\x3b\xd9\xd9\xeb\x5a\x11\xdd\xe1\xe2\xb3\x6d\xef\xeb\xaf\x39\x60\x87\x8d\x1c\xc5\x97\x14\xad\x1b\x94\x57\xac\x19\xba\xa3\xc4\xb3\xd7\xa9\x6a\x0c\xd7\xb2\x91\xff\x1f\x73\xa9\xe3\xa6\xfb\xbf\xa4\xa0\x4c\xaa\x31\xb9\x20\x8a\xf1\x59\x06\xad\xef\x9c\x09\xa0\xd1\xcd\x5e\x83\x17\x66\x50\x73\xf7\x2e\x68\xe6\x0c\x31\x94\x13\xb0\xe6\x78\x43\xc7\xaa\xf8\x76\xe6\x24\x6c\x73\x15\x55\xf1\x0f\x47\xf7\xb0\x3c\x3a\xdb\x1a\x66\xbe\xb9\x35\x4f\xea\xd1\x25\x3f\xb2\x22\xcc\xda\x59\xab\xe4\x1d\x0c\xb2\x38\xc2\xef\x8e\x62\xca\x86\x7b\xca\x2a\x5d\x9d\x09\xed\x41\xf7\x38\x26\xad\x5d\x9d\xd3\x62\xdf\x4d\xed\x03\x3b\x3b\xe8\x68\x77\xab\xc6\x25\x17\x01\xad\x05\x29\x15\x58\x35\x1a\x99\x1d\x01\xaf\x8b\xa1\xe6\x85\x56\x2f\x0e\x0f\xa8\x3b\xf5\x46\xa1\x31\x2a\x3e\xe3\xb3\x3f\x17\x29\xd5\x3b\xe5\x14\xd9\xd6\xfd\x6c\xdf\xd8\x01\x49\x89\x23\x9a\x9d\x3c\x65\x33\x52\x50\x49\x73\x35\x26\xd7\xae\xdc\x00\xee\x6b\x36\x6d\xba\x6f\xdc\x3c\xdf\x2d\x0b\x20\xff\x73\xff\x01\xed\x1b\x3e\xf3\x39\xe8\x26\x14\xe7\xf4\xd3\x6d\x29\x67\x7b\x4c\x3f\x09\x16\x5a\x9a\x96\xe8\xda\x26\x84\x1b\xb5\x09\x22\xa4\x92\x39\xa4\x65\x06\x29\xa1\x13\xb1\x80\x96\x9f\xac\xfa\xd9\x9e\x43\xa3\xa1\x62\xcf\xdf\xfc\x60\x38\x9c\x27\xca\x08\x59\x13\x25\xb2\x52\x57\xf6\xac\x13\xf8\xf4\x86\xfc\x1e\xe3\xb7\x28\x29\x40\x26\xc0\x35\x9d\xc1\xaa\xe1\xd1\x3e\xf7\xfa\xd5\xbf\x9c\xee\x4b\x00\x8a\x33\x66\x7c\x67\x06\x7e\x65\x76\xe7\x07\xfa\xe9\xcf\xbc\x76\xd2\x30\x45\x76\x34\x42\xd5\xed\x62\xe5\x45\x70\x94\x2c\x29\x33\x34\x31\x63\x5c\x5c\xe3\x75\x26\x4b\x22\x45\x89\x91\x71\xa4\x2c\xf6\x1d\xab\x69\x2e\xfb\xed\xef\xff\x65\xdf\x9f\xbf\xff\x44\xf3\x22\x83\x37\xbe\xee\x8b\xb5\xf5\x19\x7d\x42\x0b\xf2\xbb\x57\xff\x72\x66\xa3\x04\xe0\xa1\x61\x7b\xaa\xf7\x11\x35\x9b\xa8\x2c\x08\xcb\x6d\x9e\x0c\x64\x4b\xec\x68\x5f\x09\xce\x5c\x71\x6d\x16\xa2\x34\x95\x5a\x9d\x11\x0c\xd0\xab\x34\x41\x2d\x34\xcd\x56\xcc\x9d\x68\x68\x84\x07\xbb\x15\x52\x81\x6b\x09\xe8\x75\xd8\x93\x8a\xd7\xbf\x7b\xf5\x2f\xeb\x46\xed\x8f\x3c\x01\x1c\x07\xfb\xc7\x78\xcd\x09\x00\x27\xf7\x2c\xcb\x20\xdd\x57\xc4\x7e\x6a\x22\xa7\xa5\xd4\x73\x90\x67\x04\xb8\xf2\x9e\x08\xf3\xee\x2b\xef\x8d\xb4\xc8\x92\xf3\xfd\x25\x50\x6a\xfd\xa1\xe8\xdc\x68\x38\x3b\xdc\xb4\x1b\xc1\x4c\x93\x5c\x28\xbd\x79\x3a\xf6\x1a\x8c\xf2\xe5\xc7\xe9\xbe\xe2\xf5\xa8\x83\x31\x77\xfd\xd7\x1d\x84\xf3\x96\xf4\xc1\xb8\x1e\x09\x39\xb2\xdd\xbc\x21\x5a\x96\xfb\x08\x7c\x79\x8b\x85\xf4\xf0\x06\x28\x1b\x0c\x6e\x6d\x13\x7c\x76\x6c\xbc\x3b\xbb\x4d\xc5\x03\x8f\x75\x69\xe0\x6d\xdf\xe9\xba\x78\x11\x16\xde\xf6\x0c\xad\x70\x1e\x33\x0f\xe6\xe9\xff\xff\xfa\x91\xdf\x57\xa5\x5e\xb9\x09\xb6\xf3\x76\xc7\x5a\x2b\xd6\x6d\xd4\x1a\x0c\x80\x38\x5b\xa1\x75\x4f\x0a\x36\xbc\x59\xc5\x55\xa7\xc2\x86\x07\x9b\x4d\x60\x1e\xb0\x44\x6d\xb8\xe2\x6a\x06\xbc\xf7\x55\xb6\xe5\xaa\xb2\xef\x58\xc7\x7e\x68\x0c\xbb\x34\x6c\x58\x6d\xe3\xc3\x7b\x0e\x9d\x01\x55\x7a\xd3\x12\x0e\x5c\xfb\xc9\xf6\x78\x86\xef\x6a\x6b\xab\x8e\x46\x77\xc1\x19\xaf\xfc\x64\x98\xbc\x3e\x01\x72\x74\x03\x36\x8a\xc9\x66\x24\xb4\x94\x96\xa3\xca\x7f\x6d\x16\x3b\x48\x9f\xd9\x79\xda\xbc\x0b\xee\x59\xfd\xd1\x6e\x8c\x46\x76\x9e\xf3\x00\xba\x2b\xa8\x0a\x89\xb2\xf1\x5d\xbb\xbb\xa1\xc1\x65\x9f\xb8\x23\xec\x5f\x66\xac\x0a\x48\xc6\x12\x90\xab\xd8\xa4\x41\x6b\x57\x41\x73\xcb\x45\xf6\x40\x97\xea\xa8\x37\xaa\x79\x0e\x9a\x3e\x9e\x94\xbe\xda\xba\x0b\x04\xb7\x9a\xf2\x94\xca\xd4\xbd\xd1\xb1\xaa\x46\xdf\x87\x23\x7c\xc0\xf0\x24\x3e\x15\x6f\xc8\x5c\xeb\x42\xbd\x39\x3f\x9f\x31\x3d\xbe\xff\xa3\x1a\x33\x71\x9e\x88\x3c\x2f\x39\xd3\xcb\x73\x8c\x36\x62\x93\x52\x0b\xa9\xce\x53\x58\x40\x76\xae\xd8\x6c\x44\x65\x32\x67\x1a\x12\x5d\x4a\x38\xa7\x05\x1b\x25\x82\x2f\x80\xa3\xff\x62\x9c\xa7\xbf\xf6\x24\x3d\xaf\x0e\xdf\x62\x13\xe8\x50\x91\x0b\x18\x95\xfc\x9e\x8b\x07\x3e\x42\xf3\x9e\xda\x8b\x61\xec\x16\xb5\xea\x5b\xc0\x1a\xee\x13\xd4\x5a\x88\x3d\x6c\x82\xcf\xbe\xb2\x66\x8a\x46\x94\xa7\x23\x1b\xaa\xf5\xbc\x0b\xdc\xc5\xad\x3a\xaa\xc3\x41\x77\xa7\xae\x9b\x35\x88\x26\x9a\x2d\xa0\x53\x50\xa2\x6f\x61\x8a\xc1\x47\x9f\x75\x95\x96\xd2\xee\xa5\x46\x94\xa2\x0f\xd1\xc8\xe9\x12\x65\x78\x24\x96\x08\x2b\xbc\x71\x91\x82\x73\x39\x2e\xf6\x08\x1d\xf4\xed\xd6\xb0\xe5\x3b\xa3\x6d\xba\x48\x47\xf4\xe8\x2e\x95\x86\xdc\x5e\x05\x76\xb4\x6c\x49\xb4\x5c\xda\xf0\x48\x79\x4f\x98\xf6\x31\x87\x46\xbd\xbf\xc7\xe7\x94\x12\x09\x43\x91\xbe\x5e\xb6\x6e\xba\x8a\xf7\x6a\x51\x52\x08\xc5\xf0\xbd\x9c\xe0\xb2\x5f\x7f\xdd\x65\x9e\x46\xf8\xd1\x1f\xfe\x6d\x9f\x7d\x34\x45\x60\xcd\x3d\xbd\xed\xed\xf0\xdc\x69\x33\xe7\xd9\x2d\xfd\xb1\xf2\x56\x41\x23\x88\x26\x82\x2b\x2d\x29\xdb\x8e\x25\xb1\xb9\x75\x0c\x89\xe8\x1e\x77\x40\x70\x77\x5e\x74\x9a\x14\xb2\x9e\x55\xe0\x05\x16\xdc\xf2\x7e\xaa\x9b\x13\x63\xa1\x26\x7c\x76\xcc\x9e\xec\xd6\xb6\xce\x73\x44\x82\xe6\xc9\xfe\xda\x02\xfb\xa6\xef\x50\xdf\xb8\xad\xde\xeb\x72\xc6\x45\xf5\xf1\xfb\x4f\x90\x94\xbb\x62\xb2\xad\xb7\x50\xb7\xbb\x6d\x46\xda\xf3\x66\x6a\x17\xbd\x6c\xa9\x37\x1c\xc2\x7f\xe1\x84\x4a\x81\xeb\xe5\xa4\x4b\x45\x35\x53\xd3\x7d\x1d\xc1\xbe\x99\x55\xad\xd6\x1d\x1a\xa1\x5c\xd5\x89\xa9\xc2\xe2\x50\x66\xb0\xf9\xd9\x4c\x23\xe7\x4c\xe6\x42\xa8\x7d\xcc\x44\xcd\x46\xed\xa6\xc3\x77\x58\x30\x61\x03\x94\x10\x73\x40\x92\xdc\xb0\x4d\x77\xc5\x37\x88\xb2\xae\xc1\xfa\x67\x6c\x5f\x5d\xdd\x37\x34\xf7\x55\x9b\xc3\x07\xe2\x98\xc1\xd1\xbd\x65\xfe\x98\xa1\xb0\xae\x34\x51\x65\x6e\x48\x79\x00\x36\x9b\x6b\x75\x46\xd8\x78\x6f\x7b\x91\x6f\xe6\x18\x01\x4d\xe6\x8d\x57\xc8\x01\x74\xab\x58\x76\xf3\xec\x35\x7d\xa0\x27\x8f\x42\x1a\x3d\xdd\x1c\xbe\xc3\x59\x25\x37\xac\x1e\x89\x8d\xdb\xe0\x8c\x80\x4e\xc6\xa7\xfb\xc7\x55\xd8\x56\x83\xd7\x99\x59\x9c\x2c\x09\xd3\x60\x2e\x63\x54\xfd\xa5\x28\x67\x76\xae\xc1\xa7\x88\xe1\x1c\x54\xd9\xf7\x18\xf6\x96\xa6\xfb\x9b\x24\x7c\x3b\xb2\x8b\x76\x64\x4e\x0c\xce\x6d\x99\x7b\xe8\x65\x5c\x01\x74\x80\x43\x85\x38\x21\x41\x15\xc2\x9a\xc9\x56\x5d\xe3\xff\x63\x4f\x07\x78\xb3\x99\xa1\x4e\xd4\x69\xbd\xb5\xe6\x6c\x36\xf7\x3b\x8b\x3a\xf9\xa0\xbd\x23\xbb\x6d\xb0\xee\x61\x21\xb6\x75\x0c\x0e\xb1\x2d\x0e\x17\x6c\x24\xbd\xd7\xc7\xb3\x71\x24\x34\xc8\xbc\x5a\x36\x3c\x35\x78\xad\x38\xb7\xb4\x2f\xe2\xee\x0e\x2b\x79\xd5\x99\x8a\x13\x73\xca\x09\x33\x1a\xa4\xe1\x53\x23\x51\x9c\x8e\xc9\x05\xe1\x65\xc5\x96\x1f\x23\x8c\x8b\x8a\x2e\xd7\x91\x21\x56\x89\xba\xaf\xae\xdc\x3a\xe4\x2a\xb5\xad\x5b\x34\x66\xb3\x8d\xdc\x0c\xc0\xd3\x65\x57\x1e\xeb\xc4\xae\x51\xc7\x0e\xc2\xc4\x02\xdf\x87\x7f\x8b\xee\x7d\xac\xc2\xa2\x5b\xbe\x52\x47\xf5\x82\xcc\xcf\x9a\x72\x7c\xc5\x03\xda\xec\xc6\xce\x45\xd7\x5d\x41\xe2\xec\x0c\x12\x69\x5e\x49\x50\x80\xf9\xe6\xb6\x32\xcb\x15\x84\x46\x6b\xb6\x5b\xf7\xe5\x64\x89\xdf\xee\x19\x7b\xbf\xbd\x85\x32\xd7\xba\x05\xb1\xd9\xba\xc5\x62\xb8\x75\x5b\xdd\xbd\x71\xa2\xd5\x23\x10\x86\xc3\xc5\x89\x61\xdf\x32\x40\x9c\xd3\x63\x5b\x38\x87\xad\xdb\xfe\x51\xf0\xdb\xfa\x89\xb6\x1c\xb1\x58\x84\x6d\x1d\xe2\xe8\x37\xb7\xb5\xe0\xb6\xe7\x09\xab\xdf\xdc\x02\xe2\x63\x37\xb5\xae\x21\xf8\x9b\x5b\x7c\x46\x61\xda\xcd\x0b\x44\xe9\x6f\x6e\x3b\xc5\xee\x9f\xb5\x03\xf7\xc9\x37\xda\x32\xa6\xef\x83\x6e\xd9\xba\x45\x5e\xf1\x6e\x01\xff\x9b\xdb\xf3\xac\xf7\xc5\xcb\xa5\x04\x6c\x6e\x07\x4e\x14\xd8\x93\xa8\xed\x04\x7d\xa3\x0d\x31\xdf\xeb\xb3\xc6\x8f\x23\x51\xd3\x20\xc1\xc2\xec\xf9\xa8\x72\xa7\x60\x9f\x39\xc0\x09\xef\x90\xc4\xe4\xd6\x42\x02\xa2\x3e\x62\xd6\x47\x27\xa3\xf0\xf6\xb6\x73\xf6\x44\x48\x36\xc4\xe6\x16\x4f\x5e\xb3\x2d\x92\xd4\x66\x5b\x64\xee\x11\x2d\xcb\xe2\xc5\x3b\x47\x3d\xe1\x6b\xeb\x8c\x3c\xa0\x8a\x60\xdd\xa1\x83\x8a\xf0\x64\x1b\x54\x84\x41\x45\x78\xba\x0d\x2a\xc2\x7a\x1b\x54\x84\x41\x45\x08\x6a\x83\x8a\xf0\x64\x1b\x54\x84\x27\xdb\xa0\x22\xd4\x6d\x50\x11\xfa\xaf\x22\x84\x66\xc8\x6e\x6e\xd6\xdf\x12\xcd\xed\xf3\x17\xeb\x6e\x5c\xf5\xf3\xa0\x72\xe3\xc3\xdc\xdb\x0e\x1f\x23\x45\xdf\x3a\x51\xe3\x0e\x9d\x44\x2e\xd9\x5b\x52\x3e\x03\xf2\x7a\xf4\xfa\xd5\xde\x49\x15\xcd\x16\x12\x9b\xde\x6c\xfb\x82\x46\xad\xb7\xe8\x3b\x63\x5b\xfc\x42\xff\x42\x7a\x1c\x67\xaf\xe2\x2a\x5a\xca\xe7\x96\xf8\x9a\xaa\x22\x41\x0e\x7a\xff\x84\x08\xdf\x9a\x8e\x69\x96\x43\x15\xf4\x66\xd9\xba\x4b\xe3\xa9\x93\x62\x05\x77\x01\x12\x66\x5b\x76\xdd\x76\x9d\xde\x36\x01\x6a\x93\xcd\x27\x60\xde\xb8\x6b\x28\x91\x26\x4a\xe4\x60\xe1\xda\xfc\xd5\x61\x5e\x17\xfc\x36\x20\x27\x30\x9e\x8d\x49\x5a\x82\x83\x41\xb0\x59\x27\xa7\x67\x8d\xe0\xcc\xae\xb1\x44\x46\xe0\x91\xf8\x1f\x33\xb1\x2e\xa6\x13\x16\xc0\x75\x49\xb3\x6c\x49\x60\xc1\x12\x5d\xad\x00\x26\x67\x31\xad\x02\xe6\x3a\x58\x15\x0d\x55\x3f\x47\x6b\xfc\xab\x9b\x78\x12\xae\x27\xae\xd1\xd1\x9d\xa7\xaf\x14\x04\xb0\x33\x34\xde\x6a\x49\xd2\x66\x34\x1b\x90\x86\xff\xc4\x83\xfb\xf1\xa6\x6b\xec\x0e\x89\x24\x8f\x04\xcb\x20\x31\x55\x03\x17\x30\x23\xa4\x0b\xe9\x59\x9f\xc1\x0d\x21\x33\x1b\xf0\x3f\xf6\xce\xcd\x6f\x37\x3d\x87\xbc\x0b\x86\xc8\xa6\x66\x68\xbb\x13\x85\xc8\xc4\x6c\xd9\xdc\x78\xae\x6e\x7f\x8d\x76\x4e\x89\x2a\x27\x4e\xb9\x35\x67\xff\x6a\x65\xa7\x0e\xc1\x1e\x5b\xdb\x10\xec\xb1\xd6\x06\x4b\xee\x60\xc9\xdd\xa3\x9f\xc1\x92\x3b\x58\x72\x07\x4b\xee\x60\xc9\xed\xda\x06\x4b\xee\x5e\x44\x0d\x96\x5c\x32\x58\x72\xb7\xb6\xc1\x92\xeb\xda\x10\xec\xb1\xb1\x0d\x2a\xc2\xbe\x6d\x50\x11\xc2\xfb\x19\x54\x84\x41\x45\x18\x54\x84\x41\x45\xe8\xda\x06\x15\x61\x2f\xa2\x06\x15\x81\x0c\x2a\xc2\xd6\x36\xa8\x08\xeb\x1d\x47\x0b\xf6\x78\x06\x72\x63\x12\x5a\x88\x34\x3a\x9c\x4b\x21\xd2\x47\xd0\x5c\xac\x2f\x3c\x11\xa3\x4c\x24\x14\x6b\x09\x32\xfb\x13\x17\x83\xa2\x68\x6e\x43\x01\xce\xc8\x3f\x05\x07\x8b\x01\x61\x6b\x77\xe6\x40\x84\x9e\x03\x96\xe9\x3a\x51\xa7\x1d\x12\xd9\x07\x34\x98\x5d\xda\x80\x06\x33\xa0\xc1\x0c\x68\x30\x2f\x8b\x06\x33\xa7\xca\x95\xb8\x40\xa1\x68\x3b\x38\x4c\x83\x63\xdf\x81\xcc\x07\x6c\x98\xa7\xda\x9a\x2e\xee\x8e\x8f\x59\xe1\xc6\x66\xb7\x33\x9e\xba\x70\x4a\x48\xaf\xdb\xf3\xec\x0c\x77\x38\x2d\x34\x4d\x21\x25\x05\xc8\x91\x3d\x3c\x82\x4c\x99\xab\x30\xb3\x72\x9a\xdd\x0c\x77\x65\x88\x3d\x01\x5c\x69\xcf\x44\x40\x4f\x87\x47\x5d\x69\xbf\x4a\xb4\x50\xa5\x66\xc4\x56\x4b\xfc\xf9\xec\x30\x58\xe2\xd8\x0b\x47\x44\xbb\x30\xa5\xef\x82\x2c\x86\xb1\xcc\x7b\x68\x7e\xbb\xdd\xab\xa6\xec\xf6\x16\xdb\xa4\xe1\x0b\x75\xfe\x77\x09\x72\x49\xc4\x02\x64\x6d\xac\xf2\x37\xad\x72\x31\xda\x88\x85\xef\xea\xd0\x86\xab\xa6\x97\x53\x8b\x32\xc5\xcb\x2c\x3b\xb3\xbd\xaf\xb2\x3d\x7f\x11\xd9\xca\x4b\xc2\x7c\x1f\xc9\x7b\x11\xc5\xc0\x1d\xd3\xfe\x1b\x3b\x92\x8c\xf4\xac\x62\xed\xf6\x16\xd7\x3c\x11\xd1\x38\xf1\x4c\xd6\xc3\xbe\x54\xc6\xdd\xde\x9e\xd3\xbf\x44\x62\xfb\x98\x48\x64\x3f\x13\x89\xe8\x6b\x22\x71\xfd\x4d\x24\xba\xcf\x89\xc4\xf4\x3b\x91\x17\xaf\xf4\xbb\xbd\x45\x37\x2b\xc6\x76\x45\x91\x67\x63\x30\xe4\xa5\x2b\x0a\x6f\x6f\x2f\x53\x6b\x78\x7b\x7b\x86\x5d\x10\xd3\x3d\x45\x9e\x75\x0f\x1c\xa4\xa6\xf1\xf6\xd6\x4b\xa7\xd5\xa3\x84\x3d\x7b\x1d\xe4\xed\x2d\xba\x0f\x88\x3c\x83\x1f\x88\xc4\xf6\x05\x91\xe7\x39\xb2\xcf\xec\x13\x7a\x81\x01\x3a\x55\x6f\xde\xde\x9e\x83\xe7\x1c\xb4\xe2\xf3\x63\x64\x1d\xb0\x16\xf4\xf6\x76\xf8\x2a\xd1\xdb\x5b\x64\xe9\x3c\xb4\xb2\xf4\x53\x84\x46\x61\x15\xcf\xe3\x7e\x25\xad\x73\xf1\x1d\x2c\xe3\x06\x7f\x46\x38\xb9\x1f\x5a\xd4\x79\xf5\x53\xbb\x1a\x76\xb5\xd4\x8e\xbe\x36\x2b\xb0\x3b\x1f\x81\xab\x88\x9d\x65\xc1\x34\x4c\x80\x68\x7a\x0f\x18\x71\x21\xb0\x1c\x09\x4b\xc1\xd6\xad\xb1\x5b\x1d\xc7\x37\x5b\xbc\x54\x90\x1a\x42\x32\x21\xee\xcb\xc2\x1f\x15\x4c\x2b\x8e\x71\x30\x19\x4f\x44\xee\xf3\xa7\x6d\x36\x9d\x39\xf1\x8e\x17\x8c\x6c\x9d\x31\xfb\x39\x92\x83\x97\xb4\x33\xaa\xfe\xa3\x65\xe4\xfb\x07\xa1\x8a\xfc\x03\xd5\x1f\x4e\x4e\xf0\x87\xa7\xff\x08\x0f\xcd\xac\x96\xc0\xfa\xe5\x44\x89\x1c\x76\xa5\x48\x79\x7b\x75\x1e\x9b\xdd\x60\x82\x7c\x6d\x94\xe6\xc4\x1d\x5b\x7f\xfa\x09\xe5\x9a\x9d\x56\xa6\xe8\x31\xc1\xfd\x85\xba\x5f\x2a\xf8\xb1\xb6\x54\x7b\xae\xef\x3b\x08\x8f\xc8\xac\x56\xae\x8e\xec\xb1\x1e\xee\xb1\x2b\xfb\x6e\xab\xf0\x55\x35\xe3\xac\x8c\x17\x3c\xee\x9d\x8f\x1d\x70\x2a\xef\x54\xc8\x09\x4b\x53\xc0\x42\x9b\xd5\xab\x4e\x84\x87\xc6\xa8\x8f\x9c\xe1\xfb\xad\xbd\x13\x4e\xcc\x45\xa6\xc4\xd9\xea\x38\x09\xe5\x1e\xfc\x00\xb4\xad\xd6\xd9\x1a\x96\x30\x65\x96\x45\x41\xb0\xfa\xd5\xbb\xf0\xf0\xe7\xba\x27\x22\xa7\x08\x30\xd5\xf3\xbb\x62\x95\xc0\xe1\xba\x88\x7e\x5d\x70\xa1\x87\x1b\x63\xb8\x31\x56\x6e\x8c\xb5\x83\xf7\x7c\x97\xc6\xda\x50\xc3\xbd\xd1\xf3\x7b\x83\xd3\x1c\x54\x41\x13\xf8\x8c\x3c\xcc\xd6\xfc\x6f\xf3\xd6\x3c\xf9\xaa\x51\x4e\x1b\x64\x1e\xd5\x2b\xe0\xa1\x6a\xf0\xc6\xc2\x7e\x53\x1f\x0a\x55\xf2\x46\xad\xd5\x06\x31\x96\x6f\xae\x46\xfd\x05\x53\xe2\xd5\x7c\xc1\x41\xa1\xf3\x15\xaa\xd8\xd3\xc6\xe0\x38\x56\xf8\x6b\x23\x04\x4d\xed\x66\xe1\xe9\x2a\x28\x4d\x3d\x22\xfa\x81\x73\xa0\x5c\x91\x23\x1f\x14\x7b\xac\xea\x27\x76\x2c\xaa\xfc\x58\xab\xca\x5b\x55\x14\x9d\xfc\x9f\xff\x7b\xda\x2a\x69\x55\x13\x34\x78\xf9\x77\x6e\x83\x97\x3f\xa8\x0d\x5e\xfe\xc1\xcb\x1f\xa3\xaf\xc1\xcb\x3f\x78\xf9\x37\xb6\xc1\xcb\x3f\x78\xf9\x07\x2f\xff\xe0\xe5\x5f\x6f\x83\x97\x7f\xf0\xf2\x37\xda\xe0\xe5\xef\x4e\xd6\xe0\xe5\xdf\xb3\x0d\x5e\xfe\x98\x5e\xfe\xda\x70\xd1\x37\xeb\x5b\xd3\xa4\xe5\x32\x59\x51\xfb\xd4\x54\xb3\xa4\x46\x8f\xf2\x4f\xd9\x7f\xf5\xcb\x14\xd7\x34\x93\x3d\x8f\x21\xae\x69\xec\x5b\xb3\xa7\x46\xb2\xc3\x6d\xb5\xba\x55\x76\xb9\xb5\x91\x9f\xd5\x20\x37\x98\xdb\xbb\x51\x59\xa7\x96\xf5\xed\xa8\xdf\x79\x30\x03\x35\x17\x65\x96\x1a\xe1\xb6\x42\x3a\x48\xc9\x89\xf7\xac\x9d\x9a\xad\xc8\x85\x6e\x7f\xc9\x35\x1b\xd5\x4f\x54\x89\x82\xe8\x16\xf4\xd5\x3c\xc2\x97\xd8\xdb\x08\x6a\xef\x91\xc3\x5d\xa8\x92\xec\xeb\xd3\x61\x6e\x68\x90\xad\x77\x60\x8a\xa4\x30\x65\xdc\x82\xb4\xc8\x92\x73\x23\x9c\x0b\xee\x72\xe8\x83\xe9\xb3\x22\x81\x75\xf5\x39\x3e\x64\x4d\x1a\x38\x1f\x68\xd7\xa8\x97\xbf\x91\x26\x4d\x91\x89\x52\xee\x70\xde\x05\x77\x4e\x55\xf3\x89\xed\x27\x98\xb4\x8a\x45\xe1\x8a\xb0\xea\xed\xc3\xb9\xd3\x7b\xe4\x4a\xcd\x17\x63\x0a\xf7\x07\xcd\x32\xf1\x10\x2e\x6d\x44\x39\xd7\x91\xcb\xd6\x04\x9e\xb6\x87\xbd\xab\xde\xac\xe4\xfe\x86\x69\xb6\x43\xc1\x9c\x1d\xdb\x50\x30\xe7\xe9\x36\x14\xcc\x79\xbc\x60\x4e\x23\xb2\xa9\x59\x39\xa7\xeb\x6c\x63\xbd\x9d\x03\x54\xce\x21\xe4\x2f\x73\x40\xbe\x21\xc1\x86\x23\x95\x99\x66\x45\x8d\x88\xa6\xec\xca\x67\xd6\x10\x37\x75\xc8\x3a\x6d\x2e\x66\x68\xa4\xc9\xbc\x23\x01\x2b\x3c\x10\xa9\x40\xdc\x35\x85\x37\x9b\x45\x94\x41\x3f\xb0\x2d\x2b\xe3\x2d\x74\x16\xd8\x87\x7d\xfe\xf8\x1f\x01\xb7\xce\x3b\x14\x7b\xda\xf1\x76\x8a\x9c\x18\x69\x29\x5b\xba\xa8\xb3\xd6\xf5\xd3\x12\xb3\x3a\x0f\x6b\xbd\x08\x0b\xf0\x2a\xda\x8c\x2d\x80\xd7\x32\xda\x89\x3a\x3d\xf5\xba\xe2\xaa\xec\xd9\x79\xcc\x10\x99\xb5\xfb\xbd\xba\xaf\xac\xb9\x22\x2b\x76\x1e\x77\x83\x8c\xf9\x1f\x0d\x59\xec\x3f\x9f\x96\x32\x3b\x0f\x6d\x59\x9b\x87\x5b\x6a\x6c\xab\x5a\xba\xec\xd8\x77\x4f\xb0\x63\xc2\x61\x40\x62\xf8\x61\xa3\xc1\x7f\xc4\xad\x4f\x75\x08\xd8\x8f\x03\x40\x7e\xfc\x92\x0a\x46\xf5\x32\xf8\xa7\x77\x76\xa6\xe7\x40\x8b\xef\x75\xb0\xcf\x00\x17\x1f\xd4\xcf\x2f\x0a\x2e\xfe\x40\xc1\x3c\xbf\x40\xd4\xf8\x1e\x04\xef\x1c\x32\x70\xe7\x17\x87\x1a\xdf\xa3\x40\x9d\x5e\x06\xe9\xf4\x2d\x40\x67\x80\x61\x0f\x6a\x9f\x27\x0c\x7b\xd4\x20\x9c\xd8\x7c\xa4\x87\xc1\x37\x3d\x0c\xbc\xe9\x6b\xd0\x4d\x44\x49\xf9\x79\x82\x6d\x22\xb1\x80\xe7\x09\xb2\x89\x97\x1a\x1d\xf3\x54\x1e\x1a\x3e\xa3\x17\xb9\xd0\x7d\x86\xcd\xe8\x55\x02\x74\xbf\x92\x9f\x0f\x91\xf8\xdc\x1b\x98\x8c\x03\x42\x64\xc4\x11\x03\x23\x08\x7f\xcf\xc1\xef\xe3\xc9\x62\x51\xe1\x30\xa2\xf2\xfc\xc3\xc3\x60\x7c\xb1\x6c\x3f\x22\xfc\xc5\xc0\xf9\xb7\xb6\xbe\x73\xfe\xe7\x86\xbb\x38\x2c\xd4\xc5\xc0\xff\x77\x6a\x51\x61\x2d\x9e\xd9\x73\xfa\x92\x70\x16\xfd\x80\xb2\x78\x31\x18\x8b\xfe\x40\x58\xbc\x18\x7c\xc5\xe0\xb1\x1e\x3c\xd6\xed\x36\x78\xac\x07\x8f\xf5\x3e\xfd\x0c\x1e\xeb\xc1\x63\x3d\x78\xac\x07\x8f\x75\x60\x1b\x3c\xd6\x1d\x89\x1a\x3c\xd6\x9b\xdb\xe0\xb1\x1e\x3c\xd6\x83\xc7\x7a\xad\x0d\x1e\xeb\x20\x02\x7b\xea\xb1\x8e\x03\x09\x11\xf3\x44\xf6\x09\x0a\xa2\x0f\x30\x10\x2f\x05\x01\xd1\x3b\xf8\x87\xc1\x04\xbd\x1b\x75\x71\xa0\x1e\x62\x1e\xe1\x7e\x43\x3c\xf4\x19\xde\xa1\xa7\xd0\x0e\xcf\x03\xeb\xf0\x9c\x90\x0e\xc1\x67\x36\xea\x69\x2d\x44\x7a\xc1\x35\xf3\x29\x64\xfb\x9f\xd3\xd6\xe9\x7c\x87\x7f\x4c\xc0\x9e\xb1\xd6\x81\x69\xe6\xc9\xcb\x32\x03\xe5\xd2\xc4\xe9\x42\xb0\x94\x14\xa5\xd6\x36\xf3\xd6\x9d\x4f\xbf\xf1\x69\x6e\x33\xe5\xcf\xc8\x3f\x05\x87\x33\x02\x3a\x19\x9b\xcd\x8d\x39\xe8\x42\xcf\x41\x9a\xc7\x4f\xd4\xe9\xe9\xfe\x6b\x12\x24\x9f\x85\x99\xf6\x0a\x09\x53\x90\x9f\x05\xb2\x02\x7a\x9e\x1d\x7c\x81\xb4\x0e\x6f\x4b\x3d\x86\x08\xb8\x2f\xec\xf1\xd3\xc2\x65\xbd\xe3\xb1\xb7\x69\xe7\x5d\x6f\x48\xc4\x37\x68\x6d\x20\x68\xb8\x39\xb6\x60\x1c\x9c\x91\x49\xa9\x09\xd3\x08\x0c\x90\xcc\x85\x50\x5d\xb9\x8b\x4b\x52\xc6\x17\x59\x30\x61\xcd\xe9\x82\x03\xa2\x0e\x08\x59\xf1\xc0\x06\x51\x56\x95\xa8\x7f\xc6\xba\x2a\x5b\xb9\x50\xba\xde\x21\xde\x38\x6b\x06\xaf\xee\x9c\x99\x04\x43\x91\x26\xaa\xcc\x0d\x29\x16\x50\x45\x59\x08\x80\x8e\xc3\x4e\x8d\x88\x45\x93\x79\xe3\x15\x72\x00\x6d\x5d\x73\x3e\xcb\xb9\x71\x88\x9b\x3a\xd3\x89\xcf\x79\xed\x38\xb6\xe9\x0c\x94\x3e\xdb\x8a\x38\xb2\x7d\x2f\x58\x9e\x70\xda\xd5\x28\x95\x88\xbc\x28\x35\x18\x39\xbe\xcc\xcd\x6e\x62\x1a\x23\x56\x90\x19\x49\x51\xce\xec\x84\x7b\x90\x07\x3b\x11\x35\x82\x08\x4f\x89\x2a\x27\x5a\xd2\x44\x77\xbf\xfd\x8f\xec\xf2\x1d\x55\x81\x45\x48\x0b\x9b\x56\x38\x21\x64\x4e\x55\x33\xe2\xa6\xbe\x5e\x9f\xc0\xc9\xf9\x1f\x01\x17\xac\x19\xf8\x44\x35\x04\x9d\x39\x9b\xcd\xfd\x9e\x33\x4a\x32\x9a\x16\x5a\x7b\xf5\x73\x07\x98\x30\x07\xd8\x1d\x25\x94\x5a\xea\x8d\x6f\x67\x3c\x25\x7f\xc1\x6f\x21\x5d\x4d\xbb\xc6\xed\x60\x6d\x07\x34\x4d\x8d\x3c\x02\x72\x64\x0f\x92\x20\x53\xe6\x34\xa5\x95\x93\xed\x66\xb8\x2b\x87\xec\x07\x48\xc0\xca\x8e\x0b\xe8\xc9\xce\x7c\xc7\x0e\x62\xb8\xda\x56\x5e\x25\x9a\xd2\x72\xe3\xa6\x79\x4c\x2e\xac\x60\xe4\xd9\x98\xd1\xe0\xcf\xd6\x60\xb0\xd6\x4f\xb5\x9d\x99\x1e\x04\x45\xc4\xf1\xd7\xc6\x40\x96\x20\x11\xdd\xab\xd1\x10\x26\xc8\xcb\x94\xff\x79\x01\xa4\x09\x72\x18\xb4\x09\x32\x94\x9e\xe9\x57\x2c\x0f\x19\x4a\xcf\xf4\x2c\xb6\x87\x0c\xa5\x67\x86\xd2\x33\xdd\x5b\x1f\x62\x7f\xc8\x50\x7a\xa6\x07\xb1\x40\x64\x28\x3d\xb3\x4b\x1b\x4a\xcf\x0c\xa5\x67\xd6\xdb\x50\x7a\x66\x28\x3d\xd3\x68\x43\xe9\x99\xee\x64\xf5\x2e\x9e\x88\xf4\x38\xa6\x88\x0c\xa5\x67\x22\x97\x9e\x89\x97\x25\x4d\x9e\xe1\xe4\x1e\x1a\x21\x83\xf4\x25\x5d\x9a\xf4\x1c\x29\x83\xf4\x2d\x67\x9a\xf4\x2e\x6f\x9a\x1c\x28\x77\x9a\xf4\x09\x39\x83\x1c\x16\x3d\x83\xf4\x31\x3f\xef\xf3\xa8\x5c\x14\x15\x51\x83\x3c\xc7\x5d\x71\x78\x64\x0d\xf2\xa5\x5f\x17\x11\x11\x36\xc8\x70\x63\xec\xd2\x3e\x87\x1b\xe3\xb9\x11\x37\xc8\xc1\x51\x37\xc8\x70\x6f\x74\x6d\x51\x91\x38\xc8\xcb\x78\x98\x5f\x12\x91\x83\xf4\x06\x95\x83\xbc\x24\x32\x07\xe9\x15\x3a\x07\x79\x49\x84\x0e\x32\x78\xf9\x07\x2f\xff\xce\x6d\xf0\xf2\x0f\x5e\xfe\x18\x7d\x0d\x5e\xfe\xc1\xcb\xbf\xb1\x0d\x5e\xfe\xc1\xcb\x3f\x78\xf9\x07\x2f\xff\x7a\x1b\xbc\xfc\x83\x97\xbf\xd1\x06\x2f\x7f\x77\xb2\x06\x2f\xff\x9e\x6d\xf0\xf2\xc7\xf4\xf2\xc7\x41\x13\x21\xcf\x70\x6a\xfb\x84\x2a\x42\x7a\x82\x2c\x42\x5e\x10\x5d\x84\xf4\x11\x61\x84\x0c\xe6\xf6\xce\x54\xc6\x41\x1d\x21\xcf\x70\xd4\xfb\x8d\x3e\x42\x7a\x8e\x40\x42\xfa\x8b\x42\x42\x9e\x0d\x89\x84\x3c\x33\x1a\x09\x89\x75\xae\x6d\x8a\x6a\x5f\x70\x7e\x2c\x35\x6b\x99\xb5\xad\x0a\xff\x8f\x26\xce\x87\x69\xb6\xee\xd0\x48\xca\x67\x40\x5e\x8f\x5e\xbf\x7a\x15\x9e\xbb\xcb\xb8\x86\x19\x84\x58\x2f\xa7\x42\xe6\x54\x63\x4f\xbf\xfb\x6d\xa7\x7e\xa2\xb3\xed\x6d\x70\x0f\xfd\x83\x41\x71\x36\x91\x36\x0c\x45\x4b\xfa\xdf\x82\x49\x82\x5a\x81\x39\xad\x39\x68\xd2\xd9\x37\xd0\x00\xde\xd0\x2c\x87\x33\xcf\xfb\x6d\x4c\x84\x0f\x00\x70\x68\x2c\x29\x11\xdc\x89\x6c\x86\xdd\x75\xdd\x7b\xdd\x5f\x39\x01\xaa\x10\xf9\x60\x02\xe6\xb5\x3b\x8e\x4f\xb5\x85\xf9\x29\x04\xe3\xda\x1b\x7a\xcc\x3b\x83\xdf\x10\x0e\x43\x28\x2d\xc1\x5a\x50\xeb\x18\xa7\xb2\x48\xa9\x86\xd3\x10\x55\x51\x2d\x95\x86\x1c\xa1\x64\x8c\xa4\x47\x31\xf8\x87\x68\xb9\xc4\x00\x90\x05\x70\x5d\xd2\x2c\x5b\x12\x58\x30\x17\xbf\x63\x86\xc7\xe8\x25\xa6\x55\xd0\xcc\xff\x65\x0e\xc8\x41\x24\xd8\xc0\xa4\x32\xd3\xac\xc8\x6a\x14\x12\xbb\xfc\x99\x35\xc9\x4d\x1d\xe8\x4e\x9b\x9f\x19\x1a\x69\x32\xef\x48\xc0\x0a\x37\x44\x2a\x0c\x03\x92\x0a\xef\x38\x8b\x33\x83\x1e\x61\xa3\x2a\xa8\xca\x56\x67\x31\x7f\xd8\xe7\x8f\x04\x12\x70\xff\xbc\x43\x01\xa8\x1d\x79\xa7\xc8\x89\x91\x9b\xb2\xa5\x8b\x3f\x6b\x5d\x44\x2d\x81\xab\xf3\xb0\xd6\x9f\xb0\x00\xaf\xac\xcd\xd8\x02\x78\x2d\xad\x9d\xa8\xd3\x53\xaf\x35\xae\x4a\xa1\x9d\xc7\x0c\x91\x5e\xbb\xdf\xb0\xfb\x4a\x9d\x2b\x52\x63\xe7\x71\x37\x48\x9b\xff\xd1\x90\xca\xfe\xf3\x69\x79\xb3\xf3\xd0\x96\xb5\x79\x10\xa6\xc6\xb6\xaa\xe5\xcc\x8e\x7d\xf7\x04\x45\x26\x1c\x10\x24\x86\x47\x36\x1a\x10\xc8\x33\x17\x4c\x7a\x01\x00\x90\x03\x80\x7f\x0c\x85\x7b\x86\xc2\x3d\xed\x36\x14\xee\x19\x0a\xf7\xec\xd3\xcf\x50\xb8\x67\x28\xdc\x33\x14\xee\x19\x0a\xf7\x04\xb6\x1e\x85\xec\xf4\x32\x5c\xa7\x6f\xa1\x3a\x43\xe1\x9e\xa0\x36\x14\xee\x19\x0a\xf7\x0c\x85\x7b\x1a\x6d\x28\xdc\x13\x72\x34\xe3\x25\x49\xc7\x3c\x95\x87\x06\xd2\xe8\x45\x56\x74\x9f\x01\x34\x7a\x95\x0a\xdd\xaf\x34\xe8\x43\xa4\x40\xf7\x06\x30\xe3\x80\x60\x19\x43\x9d\xa7\x9d\x5a\x54\x60\x8c\xa8\x3c\xff\xf0\x80\x18\x5f\x2c\xdb\x8f\x08\x84\x31\x70\xfe\xad\xad\xef\x9c\xff\xb9\x81\x2f\x0e\x0b\x7a\x31\xf0\xff\x9d\x5a\x54\x80\x8b\x67\xf6\x9c\xbe\x24\xb0\x45\x3f\x40\x2d\x5e\x0c\xd0\xa2\x3f\x60\x16\x2f\x06\x64\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\x80\x43\xc4\x3c\x91\x7d\x02\x85\xe8\x03\x20\xc4\x4b\x81\x41\xf4\x0e\x08\x62\x30\x41\xef\x46\x5d\x1c\xd0\x87\x98\x47\xb8\xdf\x60\x0f\x7d\x06\x7a\xe8\x29\xc8\xc3\xf3\x00\x3c\x3c\x27\xb8\x43\xf0\x99\x8d\x76\x5a\x69\xa9\x45\x2e\x4a\xae\x6f\x41\x2e\x58\x02\x17\x49\x62\xfe\xba\x13\xf7\xb0\x67\x56\x7f\xeb\x88\x5e\x3c\xd2\x2d\x61\x3c\x65\x09\xda\x26\x1f\xe6\xa0\xe7\x2e\x6d\x0e\x9f\x23\xd4\x3e\x48\x34\x3e\x59\x9f\x50\xa4\xd3\xdc\xb1\x98\xd9\x8d\x5d\xef\xbb\x04\x76\x86\x26\x42\x64\x40\xf7\x71\x45\x3b\x99\x11\xe4\x9e\x8c\x3a\x8c\x67\x7d\xef\x44\x89\x7a\x74\x32\x81\x4c\xf0\x99\xcb\x21\x77\x5c\x67\xdf\x5d\xf8\xb6\xee\xce\xb9\x6a\x93\x52\x4a\xe0\x3a\x5b\xe2\x34\xa7\x29\xa4\x04\xcd\x53\xb9\x58\xec\xbf\xc9\xef\x90\x1d\x79\x1d\x9e\x6a\x92\x01\x35\xef\xc1\xa1\x7e\x11\xc3\xd0\x28\xb9\xee\x40\x7b\xe5\x5b\xb6\x20\x02\x9d\xd6\x7f\xff\x1b\xbb\xd3\x1d\xdd\x3e\x0d\x5e\x2f\x43\x29\x2d\x41\x23\x5f\x63\x3e\x90\x41\x2e\x45\x49\x1e\xa8\x55\xa5\x64\xc9\x91\xa5\xe2\x44\x75\x58\xe4\x00\xa5\xa3\xbb\x31\x7e\x84\xf7\xd2\x9e\x3f\x0b\x31\x8e\x53\x39\xeb\x24\x3a\xc5\x90\x25\x2e\xe4\xac\xb4\x9a\xa2\x3b\x8a\xc0\xb5\x5c\x22\x1e\x46\xb7\x7b\xe1\x6e\xde\x3a\x21\x39\x9d\xc1\xb1\x22\x6f\x3f\xbc\x33\xb7\x0e\x46\x20\xb1\xa9\x95\xd9\xdd\x2d\x54\x48\xb1\x60\x69\xd7\x6b\xe8\x07\x2a\x19\x9d\x64\x46\xeb\x9d\x82\x04\x6e\x24\xe9\xaf\x4e\x7e\xb8\xb8\xf9\xfb\xd5\xc5\x87\xf7\xa7\xa8\xff\xc2\xa7\x82\x72\xc3\x0e\x4a\x55\x23\xf3\x38\x0a\x8f\x15\x01\xbe\x60\x52\x70\x33\x0b\x68\x37\xa4\x64\xe1\x3a\xed\x44\x51\x1d\x38\x22\x41\x89\x6c\x01\xa9\xc5\xd2\xa8\x08\xac\xc3\x77\x8a\x52\x7b\x0b\xaa\x8f\xbd\x29\x79\x32\xa7\x7c\x06\xe9\x98\xbc\x13\xa5\x79\xb1\xaf\xbe\xc2\x97\x90\x90\x96\x09\x74\xd3\x71\xac\x09\xde\x9e\xdc\xaf\xce\xbc\xcc\x62\x6e\x7f\x8c\xbd\x21\xa0\x12\x5a\xf8\xa9\x69\xce\x9e\x5a\x72\x4d\x3f\xbd\xb1\x58\x1c\x47\x5f\x35\xbe\x3a\xea\x1e\xb8\x56\x48\x61\x5e\xc5\xca\x82\xf6\xed\x33\xa6\x41\xd2\x8c\x1c\x35\x47\x18\x93\xf7\x86\x2e\x48\x9b\x6b\x6b\xc1\x68\x60\x01\x12\x6d\xab\x6e\x65\xcf\x88\x84\x19\x95\x69\x06\xaa\x9b\x51\x48\x4c\xab\x2b\xdc\x9a\x5a\xdc\xae\x82\xca\x66\xcc\x85\x1e\x87\x32\x6e\xdf\x3e\x08\x04\x3b\x99\x8a\x37\x64\xae\x75\xa1\xde\x9c\x9f\xd7\x52\xd0\x98\x89\xf3\x54\x24\xea\x5c\x53\x75\xaf\xce\x19\x37\xcc\x6f\x94\x52\x4d\x47\x0d\xae\x7b\x6e\x65\xe3\x51\x22\xf2\x9c\xf2\x74\x44\xdd\x39\x1e\x55\x3b\xfb\xfc\xd7\x4e\x7a\x1c\xd1\xea\x29\xc6\x47\x74\xa4\xe6\xd0\x69\xe5\xc2\x14\xc5\x00\x05\x31\x50\xc8\x8c\xac\x10\xba\xb9\x3c\x14\xc3\x7e\x5f\xf1\x67\xbb\x14\x63\x72\x25\xb4\xc3\x2b\x72\x11\x95\x78\xdb\xe2\x2a\xc7\x64\xe1\xef\xaf\xee\x6e\xfe\x7a\xfd\xf1\xf2\xea\x6e\xe0\xe4\x03\x27\xc7\x36\x70\xf2\x81\x93\x77\x18\xb8\x2f\x9c\x1c\xf8\xe2\x50\x5c\xdc\x2b\xc5\x0d\x8e\x55\x6d\x55\x97\x28\x50\x85\x79\x57\xfb\xa0\xdb\x16\x8d\xb2\xd3\x0f\xb6\x63\x5a\x93\xfd\x9e\x2f\x7e\xa0\xed\x88\x13\xbe\x71\x0a\x89\x7b\xc0\x6a\xe8\x6f\xc3\x26\x30\xd8\xf3\x15\x1a\x17\xd6\x49\x21\xb5\x2d\x3c\x66\xcb\x0c\xdd\xdd\xe0\x1d\xcf\xdc\x7d\x45\xf3\xca\x56\xbb\x69\xc9\x43\xac\x98\x1f\xac\x43\x55\xb9\x43\x49\xf9\x92\x14\x92\x71\x8d\x5b\xe9\xe2\xf6\xed\xe5\x25\x49\xe6\x54\xd2\x44\x83\x54\x04\x3e\x25\x50\x68\x72\xfc\x3f\x8f\xbb\x8f\x19\xc1\xd7\x81\xd6\xeb\x3e\xac\xcc\x3e\x82\x5b\xc0\x30\xb5\xc8\x57\x48\x58\x30\x51\xaa\x6c\x59\x79\x08\x36\xf3\xd1\x55\x06\x4a\x28\x0f\xa1\xc0\xec\x0b\x6f\xde\xdd\x38\xe0\x8a\xd0\xb9\x49\x80\x0c\xb1\xb5\x1f\x56\xf4\x74\x44\xc4\x10\x40\x03\xc6\xdf\x20\xba\xee\x2e\x86\x06\x8c\xdb\x49\x80\xdd\x26\x8c\x06\xd0\xd1\x16\x63\x03\x3a\x7a\x67\xf3\xba\x50\xd8\x38\x0a\x98\x9a\x58\x9c\xec\x6b\x29\xf2\x48\xdc\xec\x16\x01\x0b\xab\x3c\xbb\x4d\x47\xf5\xd8\x05\xaf\xb7\x14\x01\xa7\xd2\x56\x99\x6e\xe6\xf3\xc0\x6c\xb7\x28\x51\x33\x71\x02\xaf\x13\xc1\xa7\x6c\xf6\x81\x16\xdf\xc1\xf2\x06\xa6\x61\xbe\xfa\xf6\x7c\xa3\xdb\xd2\x85\xff\xe2\x05\x6a\x44\x2e\x3b\x58\x98\xeb\x32\x5a\xd0\x51\xac\xd0\xfc\xf0\xb0\xfc\x78\x51\xf4\x51\x22\xe8\x5b\x0b\xe9\xb2\x85\xeb\x74\xd9\x58\x09\x16\x51\x02\x33\xc3\x24\x51\xdf\xe2\x47\x47\x37\x25\x53\x77\x3d\x44\x09\x32\xbf\xab\xd1\xce\x99\x22\x30\x9d\x42\xa2\xd9\x02\xb2\x0a\x21\x3d\x3d\x23\x93\x52\x7b\x6c\xf2\x09\x4d\xee\x1f\xa8\x4c\x15\x49\x44\x5e\x50\xcd\x26\x2c\x63\x7a\x49\x58\x8c\xfa\x5a\x2e\x54\xc0\x01\xae\xfb\x18\x6b\xae\x34\xc5\xab\x50\x38\x43\xa0\x59\x6d\x1b\x43\x41\x7d\x82\x9c\xe5\xa6\x1e\x68\x3c\x0a\x29\xb9\x50\x9a\x24\x20\x8d\x50\x97\x2d\xc9\x83\x14\x31\x6a\x60\xec\x6a\xcc\x49\x04\x37\xf2\xbf\x3a\x17\x0b\x23\x0b\xc2\xc3\xf9\x83\x90\xf7\x8c\xcf\x46\xe6\xc5\x47\x96\x59\xa9\x73\x8c\x6d\x39\xff\x35\xfe\xa7\x4f\xa7\x88\xf8\x8c\xee\x37\xe4\xe8\x28\xb0\x2f\x51\xd8\x30\xce\xc8\xa7\xf2\x16\x03\x84\x96\x2d\xd1\xa9\xba\x50\x8c\xe8\xc3\xb4\x42\x3e\xe5\xdd\xf3\x4e\x0b\x88\x34\xcd\xfb\x07\x56\xac\xb7\xe7\x2a\x33\x86\xec\x20\xee\xed\x1d\xcc\x03\xeb\xeb\xdf\x32\x2b\xc7\x0a\x0b\x91\xbe\x21\xaa\x2c\x0a\x21\xb5\x22\x39\x68\x9a\x52\x4d\xc7\xe6\x40\x9c\xb5\xff\xc4\x10\xb0\x33\xf2\x8f\xea\x43\x8b\x47\xf0\xe3\xf1\x7f\x7c\xf7\xfe\xaf\xff\x79\xfc\xd3\x3f\x9a\xdf\xa1\xb8\x66\xb3\x8b\x1a\x0f\x04\xbe\x82\x2a\x20\x19\x73\x91\xc2\x15\x52\x87\x7f\xaa\x56\xc0\x8f\xfb\x42\x53\x5d\xaa\xf1\x5c\x28\x7d\x79\x5d\xfd\x59\x88\x74\xf5\xaf\xc0\x1c\xa7\x1e\xca\x3d\xb8\xb6\xd7\x54\x77\x47\x98\x27\x51\xa5\x1f\x5a\xb0\x1f\x40\xaa\xce\x35\x5b\x9a\xad\x75\x1e\x5c\xaf\x15\x14\x7e\x32\x87\x9c\xe2\x3f\xbf\xf6\x53\x60\xee\xe3\x07\xc9\xb4\xc6\x18\x30\x57\xa0\x42\x4c\xcf\x3c\x6b\xb5\x4a\xd5\xe2\x75\x70\x81\xb6\xa8\x9c\xbf\x5a\xc1\xc8\x13\x86\x33\xe2\x66\xcb\x72\x80\x1a\x6e\x65\x2d\xe4\xf3\xe2\xfa\x92\x2c\xec\x0c\xf7\x68\x72\x9e\x8f\x5d\x67\x10\x5d\xdd\x0a\x66\xd8\x5f\x57\x54\xb9\x65\x6a\xa8\x6e\x4e\x61\x46\xca\x43\x17\xe8\xc6\x32\x1f\x9b\x8e\xfb\x9e\x2f\xcc\xb8\x8a\x4c\x81\xea\x52\x02\x99\x51\xed\x0b\xf8\x00\x37\x3a\x79\x60\x8a\x4a\x0f\x79\x66\x78\x0a\xf7\x88\x14\xa1\x2c\xd7\x74\xb2\x10\x59\x99\xe3\xe5\xd6\x13\xee\x1d\x5f\x77\x8d\xa2\xca\x79\x05\xd8\x45\x51\xb4\x0e\x03\xb9\x30\xcc\x7e\x81\x39\xc7\xf6\x19\x34\x3d\x62\x99\xa6\x76\x6d\x26\xa5\xa9\xd4\x51\xea\xf2\x91\x1a\xc0\xcb\x5b\xba\xeb\x00\x0f\x6b\xe5\xca\x5f\xdc\x77\x51\x37\x5b\x3c\x8d\x5c\x64\xc5\x1c\x33\x87\x66\x95\x1e\xbc\xf1\xb4\x9f\x55\x10\x0e\x8a\xfd\x13\x2d\x6c\x19\xcb\x99\xb6\x6a\xe5\xeb\xdf\xfe\xb1\x41\x68\x8f\xee\x86\x67\x53\x73\xa2\xec\xd8\x4d\xba\x92\xd9\xae\x8f\xa8\x49\x55\x72\xb4\x7f\x2e\x0e\xd2\x44\x2a\xc0\x99\x4c\x31\xad\xda\x8c\x50\x9f\xa0\x05\x95\x55\x94\x50\x39\xc9\x98\x9a\xc7\x29\x61\x7d\x39\xad\x56\xc7\xf4\xaf\x00\xc3\x8e\xb5\x2c\xa1\x4a\xe8\xaa\x65\x0f\x33\x17\x2b\x54\x46\x20\x61\x9b\x89\xb9\x5d\x37\xaf\x76\xe7\x5f\x63\xee\x56\x1d\x0d\x3f\xfe\xd5\xb3\xcd\xc3\x94\x66\xea\xe5\x26\x82\x72\x02\x52\x0a\x59\xb9\xa1\x24\xe8\x52\xf2\x3a\xc9\xfd\x5a\xa4\x24\x91\x60\xa1\x09\x7b\xa4\xac\x93\xa6\x51\x04\xe7\x2c\xb0\xbb\x22\xbe\x90\x1d\xed\x7a\x33\xb4\x35\xef\x37\x2b\x1a\xd8\x8b\xcb\x7a\xf3\xda\x60\x89\x31\x04\x41\xd3\x3e\x38\x26\x54\x15\x91\x33\xdb\xd2\x97\x3c\x74\xa7\x01\x07\x3c\x1e\x8f\x8f\x2d\x95\x42\xda\xab\xd4\x5a\x14\xcd\xe7\xbd\xba\x16\x6a\xa1\xea\x19\xcc\xf0\xbc\x61\x54\x76\x4b\x84\xb9\x42\x7e\xaa\xbc\x8b\x35\x96\xac\xfe\x19\x28\x53\xbe\x12\xd9\xd7\xbd\xb6\x81\x79\x2a\xfd\xe2\x55\x8c\xfe\x8d\x4d\xd5\xaf\xea\xa9\x59\xe1\xc7\xe2\xd3\x18\x95\x03\x94\x0e\x35\x14\x9f\xd8\x2e\xc7\x49\x51\x9e\xb9\xee\xc7\x39\xe4\x42\x2e\xab\x3f\xa1\x98\x43\x0e\x92\x66\x23\xa5\x85\xa4\x33\x38\xab\x06\xb7\x3f\xab\xfe\xb2\x3f\x6c\x91\xb7\xfe\x6b\x1b\xdd\x51\x67\x5e\x39\x7b\xdf\x17\xa8\xcb\xf9\x75\xeb\x89\x02\x55\x6d\xab\x67\xe0\x3f\xc7\x55\xc0\x9c\xf5\xb9\x55\xb3\x88\x2e\x75\xcb\x8d\xd4\x59\x2d\x70\x60\xdc\x87\x15\xf2\xd4\x71\x7f\xf8\x10\x21\x29\x5b\x30\x15\x03\x46\x6b\x83\x7b\x82\x39\xbb\x86\x28\x75\x51\x6a\x57\xf9\xba\xb2\xa0\x7c\x2a\x84\xc2\x68\x91\xaa\x78\x62\xcb\x34\xf8\x3a\xd4\xf3\x82\x32\x86\x06\xc9\xdf\x90\xff\x7d\xf2\xb7\xdf\xfc\x3c\x3a\xfd\xd3\xc9\xc9\x8f\xaf\x46\xff\xfe\xd3\x6f\x4e\xfe\x36\xc6\x7f\xfc\xeb\xe9\x9f\x4e\x7f\xf6\x7f\xfc\xe6\xf4\xf4\xe4\xe4\xc7\xef\x3e\x7c\x73\x77\xfd\xfe\x27\x76\xfa\xf3\x8f\xbc\xcc\xef\xed\x5f\x3f\x9f\xfc\x08\xef\x7f\xda\xb1\x93\xd3\xd3\x3f\x7d\x15\x4c\x3a\xe5\xcb\x8f\x81\xdc\xdb\xb6\x51\xb4\xc2\xe5\xab\x3d\x46\x72\xb5\xb5\xae\x42\xc6\xf5\x48\xc8\x91\xed\xfa\x0d\x2a\x29\x81\x03\xf8\xed\x15\xfb\xfc\xdf\x78\xae\x59\xdf\x66\x95\x50\xd8\xa3\x03\xfe\x5c\x82\x86\x82\x44\x82\x7e\x89\x30\x19\x3b\x92\xd7\x0c\x57\x50\x3d\xbe\xb4\x1b\xf4\x97\x10\x39\x53\xd5\x4f\xc6\x75\xad\x35\x29\xa3\x5e\x8d\x6b\x25\x88\x12\x6b\x47\x74\xcf\xdd\x43\x20\xa0\x3a\x19\x22\x6d\x42\xda\x10\x69\xb3\x85\x94\x21\xd2\x26\xa8\x7d\x96\x91\x36\xb7\x96\x27\xfd\x22\xc3\x6c\xd6\x13\xcc\x4c\xa7\xf7\x9d\x0b\xce\x74\xce\xdc\xd9\x96\xe9\x96\xd3\x62\xef\xde\x80\x2f\xba\x06\x57\xc7\x4c\x75\xf3\x66\x0f\x2d\x48\x21\x8a\x32\xa3\x7a\x4b\x16\x45\xa4\xbc\xb7\x9e\x79\xce\xfe\x32\x07\xee\x44\x3f\x17\xc3\xcf\x38\xc9\xcb\x4c\xb3\xa2\x63\x42\x40\xa5\x5a\x56\xe0\x90\x84\x2a\x25\x12\x46\x7d\x22\xb8\x03\xb6\x52\xda\xbf\x32\x5a\xe6\x35\xbd\xc7\x1c\x9a\x04\x52\xe0\x49\x47\xcb\xe1\x0f\x16\x8c\xd2\xcf\xed\x64\x69\xee\xa1\xf7\x7c\xe1\xee\x24\x92\x96\x36\xc1\x15\x6a\x5f\x69\x94\x71\xbf\xac\x6c\x46\x73\x2e\x5d\xb6\x42\x23\xa9\x11\x25\xc8\xca\x88\x58\x81\x67\x57\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\xe5\x8f\xde\x7d\xa1\xe1\x13\x9a\x6a\x0a\x09\x05\xf0\x0a\x79\xd8\x7b\x60\x81\x26\xf3\x21\xe3\x9c\x54\x76\xd1\xb8\x17\xf6\xed\x26\x4b\xd9\x70\x5b\x93\xe1\xb6\xde\xa3\x0d\xb7\xf5\x70\x5b\xbf\xc8\x6d\xed\xb8\xd5\x97\x7f\x55\x47\x46\x5a\x42\x0c\xb9\x43\x19\xa0\xde\xb6\xa1\xec\x90\x33\x3f\x27\xda\x57\x75\x14\xeb\x18\xcf\x73\x1c\xb9\xdb\x89\x6b\x33\xd9\x2a\xe8\x42\x0b\xcb\xf6\xc8\x9c\xcd\xcc\xf6\xcc\x60\x01\x99\x53\xab\x49\x4e\x39\x9d\xd9\x12\x26\x5a\x54\x25\x7c\x85\xc4\x0a\xa5\x92\x75\x44\x4f\x5f\xc1\x04\x44\x0b\x96\xe1\x32\x99\xa0\x29\x7e\x29\x45\x96\x19\x79\x25\x63\xf7\x40\xde\x41\x91\x89\xa5\xab\x42\xc2\x53\x72\xab\xa9\x86\x69\x99\xdd\x82\xee\x14\xde\x1d\xc4\x71\x90\xe0\xeb\x32\xcb\xae\x45\xc6\x92\x4e\xde\xbf\x18\x5b\xf1\x12\x37\x60\x51\x66\x19\x29\x90\x90\x6e\xfb\xf0\x23\xc7\xab\xfc\x22\x7b\xa0\x4b\x75\x46\xae\x60\x01\xf2\x8c\x5c\x4e\xaf\x84\xbe\xb6\x46\xa4\x6e\xfd\x36\x31\x41\x6c\xe7\x84\x4d\xc9\x1b\x2c\xbf\xa8\x89\xa6\x33\x8c\x2d\xf6\x61\xc4\x67\x66\x43\x35\x07\x25\xc2\x30\xca\x07\xa6\x0e\x69\xdb\x0b\x3f\xa5\xbf\xc6\xd1\xcd\xd5\xd9\xf9\xd4\x06\xed\xd5\x8c\x4d\x21\x59\x26\xd9\xc1\x18\xe6\x45\x82\xe9\xb5\x75\xb1\x97\x06\x3b\x51\x4b\xa5\x21\xf7\x78\xf6\x68\xd2\x65\x9c\x48\x50\x85\xe0\x0a\xa5\xbc\x9a\x4b\x54\x2f\x42\x30\x49\xa6\x63\x52\x47\x44\x8b\x6f\x67\xc5\x20\x54\x25\x28\x84\xd2\xb7\x9a\x4a\xdd\x55\x3e\x89\xa5\x0b\x5c\x7b\x42\xcc\x49\x4e\x68\x96\x41\x4a\x58\x9e\x43\xca\xa8\x36\x72\x3b\x9d\x6a\xac\x62\xd0\x60\xf5\xca\xc6\xec\x37\xf2\x46\xe6\x94\xa7\x19\x48\x32\xa5\x2c\x53\xdd\x33\x07\xda\xd0\x5c\x46\x3e\x07\x99\x33\x8e\xde\x0b\x1b\x75\x8a\xd1\xdf\xe6\xaf\x24\x11\x32\x75\xf5\x02\x98\x56\xfe\xab\x20\x26\x6a\xda\x47\x94\xec\x1a\xdb\x7b\x35\x68\x97\x4c\x32\x91\xdc\x2b\x52\x72\xcd\x32\xfb\xf2\x42\xdc\xa3\xfe\x92\x21\x3b\xe9\x3c\x74\x77\x2e\x55\xfd\x73\x54\x1d\xb0\x91\xa1\x4a\x9d\xff\xba\xfe\x0a\x3f\xe8\x48\x5c\x04\x2d\x3a\x86\x0e\x0d\x9f\x20\x89\x56\x6a\xe7\xfd\x27\x48\x5a\x85\xae\x1c\x90\xaa\xd9\x51\x0e\x3c\x39\x92\xdf\xd1\xb6\x9e\xd5\xed\x0e\x00\xad\x6e\xb6\xd8\x21\x3d\x6f\xdd\x22\xb8\x92\xbd\x7e\x4d\x32\xc6\xa1\xbd\x30\x8a\xa5\xd0\x5e\x1c\xeb\xf6\x74\x4a\x2e\x49\x99\xc4\x1a\x43\x4b\x8f\xfa\x15\x4c\x9a\xa7\x05\xcb\xf0\x08\xa1\xc9\xc9\xf1\xf9\xf1\xe9\xda\x1e\x39\x56\x98\x7e\x61\xaf\xc5\xb1\x83\xce\xae\x5e\x4a\xb1\xbc\xc8\x96\xf8\x1e\xc7\xe9\x19\x61\x3a\x46\x8c\x90\xb9\x0d\x65\xc9\xfd\xac\x38\xa8\xef\x33\xa2\x04\xd1\x92\xfa\xd2\x7a\xf6\x53\xf3\x90\x96\xa5\xbb\xd0\x4f\x8e\x7f\x3e\x3e\x23\xa0\x93\x53\xf2\x20\xf8\xb1\xc6\xe9\x1b\x93\x3b\x41\xca\xe0\x9c\x27\x52\x13\xb2\x14\x25\xe1\x00\xee\x6c\x15\x19\x4b\x98\xce\x96\x78\xdd\x10\x51\xda\x0c\x3d\x23\x5a\x04\x40\x94\x37\xdb\xfb\x4f\x4c\x3b\xf0\x0d\xc3\xbf\x5f\xe1\x6e\xb2\x57\x16\xa1\x46\x19\x59\xc0\xf9\x1c\x68\xa6\xe7\x36\x9b\x81\x0b\x3e\xfa\x27\x48\x81\x30\xe6\xdc\x7d\xf3\xc5\x95\x89\x8f\x18\xc8\xf4\x4c\x15\xd5\xcc\xb5\xf7\x0d\x74\x16\x89\xc8\x2a\x3f\xfa\xf6\xee\xee\xfa\x1b\xd0\x4d\x2e\xcf\xf1\x43\xf2\xcd\xfb\x3b\x9f\xc3\x82\x86\x7e\x90\x53\x21\xf3\x1e\xb0\xf7\x38\xc1\xb5\x23\x52\x08\xd9\x87\x5b\x66\x2e\x54\xd0\x72\x92\x67\xb8\x62\xbe\x15\x4a\x5b\x5f\x8e\xd5\x4d\x38\x26\x36\x8a\x76\x42\x86\x4f\xdf\xbf\xbc\x1e\x93\xbf\x8a\xd2\x4c\xc8\x84\x4e\xb2\x65\x55\xc8\x48\x41\x68\xd1\x53\x42\x8e\x0c\x29\x47\xe6\x06\x31\x3b\xff\x5b\xa0\x29\x48\x85\x0c\x1a\x68\xa4\xf2\xac\x11\x8e\x7b\x83\xb6\xa8\x4b\xf9\xb6\x54\x5a\xe4\x64\xee\x5e\xbb\x0d\x71\xee\x0e\xe7\xd8\x1e\x57\x07\x27\x2b\xa1\xb0\x4c\xdc\xfd\xe6\x8b\x63\xd1\x6b\xdc\xcb\xce\xbb\xfb\x7c\x62\xc5\xd4\xe6\xb4\x39\x07\x87\x05\x2a\x75\xbc\xcd\x6c\xd5\x68\x71\xaf\x51\xca\xfb\xc6\xcb\x19\x20\x61\xe0\xe7\xab\x1d\xa1\xb3\x27\xb8\xa7\x78\x69\x08\x24\x5a\xa8\x3d\x79\xb6\xb2\xff\x46\xa0\x75\x9b\xcf\xda\xa0\xbb\x5b\xcf\x37\x75\xce\x54\x85\x16\x90\x50\x2e\x38\x4b\x68\xc6\xfe\x09\x29\x29\x0b\xc1\x5d\x6e\x1d\x4a\xb6\x09\x55\x30\x42\xcf\x3b\xd7\xae\x16\x71\x8d\x76\x6d\xb8\x83\x16\x02\xc5\x3d\x0c\x9e\x33\xec\xde\x52\x1d\xb3\xf6\x7d\xb4\xf2\xf2\x81\xd0\xed\xcd\xb6\xe6\x50\x6f\x2d\x56\x9c\x1d\x4f\x3e\x0b\x71\x92\x44\x02\x5e\x58\xc7\x36\xd3\x82\xd0\x24\x41\x3c\x6f\x7b\x5d\x21\xe3\x55\x20\x17\xe1\xfb\x2b\xda\xbc\x1a\x11\xb0\x6f\xb2\x97\x8d\x39\x90\x84\x97\xf9\x04\x64\x0d\x0c\x29\xf5\xfa\x9c\x46\xb1\xba\xb8\x61\xed\x70\xde\x4b\xeb\x65\x0c\xca\x67\x40\x5e\x9b\x91\xff\xf0\xfb\xdf\xff\xee\xf7\x11\xc6\x31\xaf\x57\x95\x08\xe5\xe4\xf2\xe2\xea\xe2\xef\xb7\x3f\xbc\x45\xb8\xf9\xd0\xee\x23\x25\xc9\xc6\x4e\x91\x8d\x9a\x20\xfb\xac\xe9\xb1\x08\xdc\x18\xcc\x65\x63\x1f\x89\x5b\xa4\xca\x6c\xc2\x52\x59\x88\x7a\xa7\x93\x34\xaa\xe1\x1a\x35\x2a\x7c\x77\x36\x9d\x79\x86\x61\xf5\x82\x53\xa9\x0c\xa0\x88\xa6\xf1\xdf\x9a\xde\x5a\xe5\x80\x48\x5a\x4a\x5b\x95\xb6\x72\x5e\xd5\xb6\x7c\xe7\xb4\x42\x1a\xbe\x20\xe5\x5f\x41\x22\x78\x1a\xa2\x02\xc4\x12\x69\x1d\x25\x51\xcf\xdc\xad\xed\xd3\x9b\x88\xeb\xab\xc4\x0d\x86\x9a\x64\xe8\x8a\x92\x6a\x55\xe3\xf0\x49\x8b\x06\x81\xbd\xfd\xe1\xdf\xba\x3b\xc8\x92\xe2\x56\x24\xf7\x11\x4d\x64\x81\x0c\xec\x9d\x39\x69\x89\xf5\x05\xde\xbd\xbd\xb6\xc4\x99\x95\xb9\xfa\x78\x57\x43\xbf\x18\x29\x9c\x92\xef\xbd\x6f\xea\x5b\xe7\x2d\xa4\x3c\x25\xf7\x50\x84\x69\x97\x86\x61\xfa\x30\xc2\x76\x14\xe1\xd8\x95\xec\x46\x94\x39\x9b\x5e\x6d\x19\x81\x8f\xfe\xb3\x12\x71\x58\x05\xa0\x86\x73\x1e\x1d\x81\x4e\x09\x99\x52\x96\x11\x8a\x56\x79\xcd\x72\x20\x0f\x73\xe0\xd6\xd8\x5f\x47\x4b\x7c\x41\x0c\xe7\x4b\xb5\x36\x1e\xfb\x90\xf0\x37\x7b\x5b\x0d\x43\x51\x31\xbe\x6c\x35\xc0\xf1\x6c\xd9\x42\x35\x1b\xd4\x80\x5d\xda\xa0\x06\x74\x54\x03\x0a\x09\xb7\x5a\x74\x96\x35\xa3\x05\xdc\x58\x32\xb6\x84\xdb\x4c\x60\x2a\x24\xac\xc6\xdb\x34\xe2\x60\x5c\xe4\x7c\x40\x64\xf0\xc5\xf5\x65\xe5\xfb\x12\xad\x58\x17\x8b\x5c\xac\xca\x64\xee\xdd\xa4\x1c\x94\x3a\xc7\xc8\x9a\xb2\xb0\x86\x65\xbc\xda\x4a\x09\xdd\xa3\x7c\x0a\x09\x90\xe3\x3c\x9e\xd5\x68\x42\xe6\x75\x81\xdb\x0f\x41\x27\xd6\x6f\xee\xc3\x8a\x1c\x4e\xac\x9f\xae\x69\x90\x3b\xbf\x9e\xd8\x44\x52\x35\x07\xcc\x9d\x85\x4f\x4c\x2b\x3b\xa8\x45\x63\xf5\x33\x6e\xe4\x85\x99\xa4\x09\x90\x02\x24\x13\x46\xc4\x28\xb9\x4e\xc5\x03\x27\x13\x98\x31\xae\xfc\x8a\x85\x90\xe4\xb7\x04\x46\x12\x31\x55\xd5\xee\x1e\x93\x9b\x56\xe5\x38\x87\x2e\x96\x88\x9a\x67\xba\x29\x3a\x8b\x34\x25\x28\xbc\xe0\x36\x28\x69\x96\x2d\xeb\x8d\xd7\x04\x08\xdd\x32\x43\xdd\x37\x84\x9d\xd9\x93\x92\xe3\x8b\xa6\x90\xd1\xa5\xcd\x20\x9f\x32\x8e\xd6\x5f\xa9\x4e\xc7\xe1\xa1\x59\x9d\x09\x14\xb2\xd1\xe7\xd6\x9d\xc1\x14\x91\x40\x93\x20\x1c\xe3\x21\x06\xec\xa9\x36\xc4\x80\x0d\x31\x60\x43\x0c\xd8\x7a\x1b\x62\xc0\xda\x6d\x88\x01\xdb\x4e\x50\x9f\x9d\x76\x43\x0c\xd8\x60\x95\x59\x6f\x43\x0c\x58\xa7\x36\xc4\x80\x3d\xd9\x7a\xc7\xa2\x87\x18\xb0\x1d\xda\x10\x03\xb6\x63\x1b\x62\xc0\x86\x18\xb0\x21\x06\x6c\x88\x01\x0b\x68\x43\x0c\xd8\xfe\xaf\x37\x38\x7f\xba\xb7\x21\x06\x6c\x88\x01\xdb\xb3\x0d\x31\x60\x2b\x6d\x88\x01\x1b\x62\xc0\x1e\x6b\x43\x0c\xd8\x10\x03\xe6\xda\x60\x6d\x5c\x6b\x43\x0c\xd8\x86\x36\xc4\x80\xed\x37\xce\xa0\x06\x84\x75\xf6\x2c\x6a\x80\xd2\xa2\xb8\x65\xb3\x00\x5c\xc8\x58\xc7\xe0\xb6\xa2\xc4\x81\x46\x2a\x57\x6c\x57\xd9\x0f\xbd\x1d\x4b\x39\xc8\xbe\x66\x44\x58\xe3\x26\x99\x80\x51\x11\xcc\x6b\x15\x21\xb7\xc9\xe5\x14\x1d\xc8\x0d\x24\x37\x73\x2a\x3c\x4c\x20\x6b\x95\x75\x68\x8b\xcf\xfe\x76\x63\xdc\xe8\x2e\xdd\x29\x68\xcc\x47\x42\xb9\xad\x8c\xea\xca\x64\x9b\xeb\xfd\x5a\xa4\xca\x57\x92\xe0\x82\x8f\x2c\x58\xeb\xd8\x10\x3c\x16\x6a\x1c\x60\x0d\x0e\x44\x66\xb3\x31\x72\xd7\x52\x4c\x0e\x86\xce\x76\x8d\xf1\x47\x2c\x71\x01\x7a\x62\xda\x42\x5c\xb3\x04\x76\x44\x5a\x6b\x07\x86\x61\xb1\x66\x0f\xc1\xc5\x1c\xc3\xae\x82\x02\x0f\x89\xe6\xb6\x77\xe4\x94\x47\xa9\x54\xe7\x85\xb0\xff\x57\xc7\x4d\x35\x02\xa6\x3a\xfb\x51\x0e\x0c\x2f\x17\x12\x25\x75\xb0\x08\xa9\x9e\x44\x98\x45\x88\x8a\x8a\x29\x2b\xf5\x34\x1a\xaa\x9f\x91\x50\x7d\x8c\x82\x3a\x44\x04\xd4\xc1\xa3\x9f\xe2\xb8\xd5\x23\xb8\xd4\x23\x49\xa4\xcf\xe0\x9e\x72\x81\xf4\x77\x73\x09\x6a\x2e\xb2\xce\x0c\x27\x16\xb3\xf9\xc0\x38\xcb\xcb\x1c\xab\x50\x18\x9e\xc2\x16\x55\xb0\xbf\xf2\x2c\xc3\x5d\xf7\x36\xe2\x00\xcb\x55\xa4\x80\x65\xc0\x29\xcb\xcc\xd6\x42\xb0\xd0\x39\x5d\xa0\x50\x5a\x26\x09\x40\x1a\x22\x96\x36\xad\xd5\xbf\x1b\x57\x14\x5a\x8c\x7e\xa6\xc8\xeb\xb0\xab\x26\x4c\xef\x69\x98\xf3\x7e\xf7\xdb\x4e\x7d\xcc\x64\x11\xe7\x96\xfe\xe6\xe6\xfa\x6d\xeb\x96\xc6\x0f\xbe\xc5\x63\xfc\x76\x0e\xc9\xfd\x8d\x0b\xa5\x39\xdc\xcd\x1c\x6e\x66\x0a\x32\x31\xc5\x10\x0c\x42\xad\x28\x6d\x1f\xb2\x90\x7a\xc5\x05\x3a\xc3\x55\x04\xb9\x60\x09\x8c\x5f\xc0\x50\x11\x4b\xf9\x0f\x3f\x08\x04\xdd\x04\xf8\xe2\x7d\x11\xbb\x6e\x2d\x39\x95\x87\xa1\x61\xa3\x72\x94\x62\xd0\x68\x46\x93\x6a\x6d\x66\x9b\x0f\x5d\x10\x19\x27\x0a\xa0\x52\x68\x66\x4c\xcf\xcb\xc9\x38\x11\xf9\xb9\x61\x1d\xf6\xff\x26\x99\x98\x9c\xe7\x54\x69\x90\x46\xc7\x71\xd7\xfa\x28\x31\x14\x30\x3e\x1b\xe7\xe9\xe9\xf8\x57\x41\x34\x5c\x3a\x5b\xb9\x4b\xc3\xda\x62\x24\x98\x80\xe1\xfb\x42\xae\x58\x0b\xcc\xa4\x84\x6f\xd2\xe0\xfb\x3b\xb4\xa8\x48\x60\x58\xf2\x41\x42\x92\x07\xae\x4d\x22\x38\x04\x62\x32\x95\x7e\x84\x1d\x3f\x5b\xc8\x71\x94\xb3\x1a\x29\xd4\xb8\x47\x61\xc6\xbd\xd1\x85\xfa\x12\x5a\x1c\x2d\xac\x38\x56\x48\x71\x94\x70\xe2\x18\xa1\xc4\xf1\xc2\x88\xe3\x84\x10\xc7\x0f\x1f\x7e\xb6\xd0\xe1\xcf\x22\x6c\x38\xa2\x7f\x2c\x52\xb8\xf0\x4b\x84\x0a\xf7\xd7\x06\x43\x22\x84\x07\xbf\x5c\x68\x70\x94\x79\x8c\xaa\xc5\x06\xb2\x84\x03\x84\x02\xbf\x84\xff\xff\xd9\x7c\xff\x11\xfc\xfe\x31\x7d\xfe\xd1\xfc\xfd\xcf\x16\xf2\x1b\x1e\xee\x1b\xd5\xa6\xf0\x22\x61\xbe\x31\x43\x7c\x83\xd7\x97\x71\xa6\x19\xcd\xde\x41\x46\x97\xb7\x61\x81\xa0\xb1\x56\xe2\x6a\x2d\x58\xd4\x9a\xad\xdb\x71\x0d\x73\xaa\x88\x77\x75\x3b\x88\x17\xef\x4b\x77\x22\x30\xa1\xe8\x71\x36\xef\xd7\xd9\x6b\x4d\xfa\xe7\xb9\x26\xbd\x31\x8f\x5b\x5c\x95\x9e\xec\x9a\x6f\xc5\x03\x11\x53\x0d\x9c\x9c\x30\xee\x77\xce\x69\xc3\x4a\x53\xbb\x47\x82\xfd\x1d\xa6\xd7\xd7\xaf\xfc\x20\x5f\x9e\xdf\x03\x3d\x43\x4a\xf5\xda\xf3\xe5\x68\x7c\xda\xf5\xe5\x1e\x9c\x96\x59\xdb\xfd\x65\x5d\x62\x71\x7c\x5f\xaf\xc7\xe4\x83\x13\x27\x5e\x23\x3d\x15\x2b\xa2\x3c\x25\x0e\x9f\xeb\xcb\xdb\x27\xc1\xa1\xee\x6d\xe5\xa6\x8a\x4d\x6f\xc7\xb3\xd8\x1b\xd8\x48\x99\x82\x50\xf3\x14\x0a\xa0\x83\xd1\xb5\x37\x46\xd7\x03\x45\x60\x7f\x79\xda\xd6\xcb\x47\x5c\x0f\xda\xd6\x2f\x45\xdb\x6a\xc0\xe2\x7d\x23\x69\x02\xd7\x7d\x12\xde\x3c\x03\xa9\x13\x01\x6b\x19\xae\x62\x17\x1c\xc0\x26\x8e\xd5\xa0\x87\x88\xef\x37\x2d\xb3\x6c\x69\x6d\x88\x2d\x04\xcc\xee\x5b\xeb\x6e\x0e\x6b\xd0\x81\xe8\x4a\xdd\x40\x5d\xad\x9b\x14\x52\x38\x89\x44\x96\x9c\x1b\x11\xc3\x1d\x27\x43\xbc\xd1\x45\x14\xf0\xee\xe6\x74\xda\x02\x36\x74\x41\xe8\x18\xe8\x39\x07\x52\xe7\x2f\xb5\x09\x31\xa3\x4e\x85\x4c\xd8\x24\x5b\x92\x39\xcd\x8c\xb2\xe4\x82\xb4\xef\x59\x96\xb9\x6e\x02\x82\xc2\x41\x5b\xd7\xb3\x95\x68\x32\xc1\x67\x38\x19\xd4\x12\x02\x9f\x0a\x48\xcc\x98\x49\x06\x94\x97\x85\xa5\xd3\xc8\x47\x4b\x51\x4a\x4f\x67\x50\x54\x7c\x63\x74\xa6\x08\x67\xd9\x99\x9f\xf2\x36\x04\xe6\xfa\x9e\xaf\x4d\xca\x0a\x52\x87\x5e\xf9\xc0\x14\x9c\x61\x9f\x9d\x69\xb2\xb4\xf8\xaa\xfd\x76\xdf\xd8\xcf\x0a\x29\x16\x2c\xad\x63\xf4\xcd\xb6\xc0\xf8\xf8\xce\x63\xfd\x80\xfd\x7a\xd6\xca\x05\x1f\x71\x98\x51\x14\x8f\x1d\x43\xb3\x11\x9d\x76\x7c\x1b\x3f\xc8\x53\x96\x50\x0d\x0a\x73\x12\x5a\xd0\xb6\x0b\x46\x3b\x53\x62\xde\xa7\xb1\xa3\xc8\x09\x17\x44\x60\x66\x61\xc9\x99\x5e\xa2\x47\x6f\x5e\x6a\x92\x8a\x07\x7e\x1a\x72\x30\x6d\x98\x03\x25\x13\xd0\xb4\x4e\x0e\xf4\x22\x99\x22\xc0\xe9\x24\x33\x67\x0f\x23\xfe\xef\x36\x6e\x00\x32\x05\xaa\x4b\x09\x64\x46\x75\x00\x97\xd8\x20\xcd\xdb\xf5\x7c\x7c\xdb\x31\xe5\xfc\x75\x53\x52\x72\x05\x81\x82\x6c\x34\x15\xa0\x63\xc6\xab\x39\xd1\xa2\xd4\x3d\xb9\x47\xb6\x99\x8e\x6c\xe6\x4e\x43\x49\x64\x39\x28\x22\xca\x00\x4b\x5e\x4b\xfd\x73\xc3\xc5\xd4\xf0\x06\xbb\xd3\xc6\xd6\xd5\x6d\x1a\x63\x87\x5d\x35\xa4\xf2\x06\x3e\x81\x0f\xb7\xb2\x19\xd4\xef\xae\x6e\xff\xfe\xfd\xc5\xff\x7a\xff\x7d\xb7\x85\x7f\x4f\x93\x79\x13\x5b\x9c\x13\x8a\x17\x05\x32\xf9\x39\x5d\x00\xa1\xa4\xe4\xec\xbf\x4b\x17\xf2\x76\x52\x8d\xd7\x91\xad\x46\x49\xef\x09\x12\x7c\xcd\x2d\xd1\x89\x73\xc4\x58\xd3\xef\x99\x42\xa0\x6a\x24\xc2\x05\xfe\x0b\x05\x64\x2a\x45\xbe\xa2\x68\x91\xab\x2a\xb8\x6e\x69\x6e\x18\x6a\x55\xb3\x39\xc8\x6e\x12\xf9\xbb\x8f\xef\x6f\x31\x07\xbf\x90\x16\xd8\x1d\x93\x0b\xb0\x4f\x1c\xdd\xa6\x0e\x5a\x7a\xd2\x31\xb9\xe0\x4b\xfb\xa5\x65\x66\x1d\x45\x94\x8c\x29\x0d\x28\x9c\x3a\x45\xd2\x87\x07\x1e\xbd\x1a\xe3\xff\x8e\x08\x4d\x53\x69\x34\xcd\x2a\x47\x23\x59\xcd\x32\xeb\x34\xb2\xd5\x5f\xd9\x24\x6b\x4c\x2e\x07\x8d\x69\x1c\x9d\x3a\xfc\x20\x52\xb7\x12\x28\x04\x62\xfc\x8e\x95\x6e\x95\x96\x54\xc3\x8c\x25\x24\x07\x39\x03\x52\x50\x9d\xcc\x49\x4e\x97\x24\x11\x52\x96\x85\x85\x18\x49\xa9\xa6\xdd\x46\xfe\x5a\x48\x92\x7b\xee\x6c\xb8\x99\x11\xc9\x6f\x37\x07\x82\xd6\x2c\xbb\xf9\x4f\xa6\x54\x09\xea\xfc\xf5\xab\x3f\xfe\xf6\xf7\x1d\xd5\xeb\x88\x07\xb7\x6b\xe8\x53\x40\xc8\x53\x3b\xfc\xcb\x6f\x30\x0c\xba\x6e\x21\xc3\xb8\x1d\x62\x77\x3e\x72\x43\xc5\xf8\x2c\x0b\x36\x80\x04\x9b\x01\x43\x8d\x80\xa3\xfa\x0d\xae\xbb\xda\x02\xc3\x2d\x81\x2d\x1a\xba\x9b\x52\xe2\x59\xc1\x6a\x09\xce\xdb\xbd\x1c\x43\x16\xbc\xa1\xd8\x5d\x5e\x7b\x2e\x15\x62\x3f\x42\x6d\xa2\x32\x4c\x59\xf4\x11\x3b\xac\x8d\x77\x38\x23\xaf\xc8\x7f\x90\x4f\xe4\x3f\xd0\x0a\xf6\x87\xee\x43\xc5\xb1\x31\xc5\x08\xe3\x9f\x0b\xa5\x2f\xaf\x23\x2d\xf4\x5f\xcc\x7d\x65\x7a\x34\xeb\xa1\x05\x99\x30\x67\x8e\x80\x4f\x1a\xa4\x51\x03\xdd\x1a\x86\xce\x5c\x90\x45\xcd\x10\xf8\xb9\xec\xee\xd0\xe0\x82\xcb\x69\x3b\xfa\xff\x85\xf6\x37\x0e\xfc\xad\x50\xfa\xca\x71\xeb\x26\x84\x4e\x93\x8e\x1c\x2f\xe2\x16\xbb\x0f\x19\xf5\x83\xd9\x7b\x75\x8d\x0d\x92\x0a\x4c\x80\xb0\x39\x9c\x73\x16\xc0\x1c\xfa\x73\x62\xc3\xe2\x44\xe3\x6d\xdd\xc7\xb6\xd6\x8a\x4d\x1f\x2d\x32\x4e\x49\x69\x94\xa5\x29\x44\x3a\x46\xfd\x26\x80\x0a\x33\x1b\x69\x43\x18\x78\x44\x35\x1a\x5b\x7d\xad\xf2\x0e\xe3\x81\x33\x1c\x2b\xa1\xbc\xab\x0c\x6b\x9b\x84\x29\x48\x69\xf3\x84\x27\x4b\x9f\x6e\x14\xbc\xdb\x82\xb8\x5c\x21\x85\x16\x89\xe8\x0c\x9b\x12\x73\xab\x5c\x3b\x5a\x70\xee\xd1\x57\x5b\x79\xc7\xff\xfc\xee\xfa\x8c\xdc\xbd\xbd\x3e\x23\x42\x92\xdb\xb7\x61\xc1\x4f\x4d\x13\xcc\xd1\xdd\xdb\xeb\xa3\x83\xae\x40\x23\x87\xe9\xee\xed\x75\x87\x4e\xd6\xc3\x67\x73\x5a\x8c\xee\x61\xd9\x51\xba\x8b\x21\x61\x8e\xaa\x8d\x15\xe5\x85\xec\x34\xe7\xb4\xd8\xbb\x37\x09\x34\x65\xbd\x46\x72\xf1\x59\x87\x15\xa5\xf1\x20\x5d\x72\xb1\x80\xd4\x6a\xcd\x7e\x14\xe0\x69\x21\x98\xd1\x91\x06\x9c\x97\xc7\xda\x80\xf3\xb2\x7f\x1b\x70\x5e\x36\xb5\x01\xe7\x65\x8f\x36\xe0\xbc\xd8\x36\xe0\xbc\xb4\x09\xe9\x63\x8e\xd1\x80\xf3\xf2\x64\x1b\x70\x5e\xb6\xb6\x01\xe7\x65\xaf\x36\xe0\xbc\xac\xb7\x01\xe7\xe5\x91\x36\xe0\xbc\x54\x6d\xc0\x79\x19\x70\x5e\x3e\x5f\xae\x3d\xe0\xbc\xac\xb6\x01\xe7\x65\xc0\x79\x19\x70\x5e\x9a\x6d\xc0\x79\xd9\xd2\x06\x9c\x97\x01\xe7\x65\xc0\x79\x79\xbc\x0d\x38\x2f\x9d\xdb\x80\xf3\xb2\x5f\x1b\x32\x0f\xf7\x6c\x03\xce\xcb\x80\xf3\xb2\xda\x06\x9c\x97\x27\x5b\x3f\xcc\xe3\x03\xce\xcb\x80\xf3\xf2\x68\x1b\x70\x5e\x06\x9c\x97\x47\xdb\x80\xf3\xd2\xa1\xf5\xce\xe8\x3a\xe0\xbc\x0c\x38\x2f\x8f\x8d\x31\x68\x5b\xfb\xb5\x01\xe7\x65\xc0\x79\x59\x6b\x03\xce\xcb\x7a\x1b\x70\x5e\x06\x9c\x97\x01\xe7\x65\xc0\x79\xa9\xda\x80\xf3\xf2\xa5\xdb\x9d\x24\x28\xf6\x4f\xb8\x16\x19\x4b\x96\xc1\xd9\x3e\x37\xa0\x44\x29\x13\x73\x63\x63\xb7\xa4\xc0\x7e\x2b\x8b\x42\x90\x90\xdd\x33\x08\x85\x9b\xc6\xc4\x35\xa1\x14\xa4\x9b\x83\xe7\x98\x82\x5e\xc0\x29\xf8\x17\xbc\xea\x1e\x41\x30\xf2\xe5\xb3\xed\xf4\x75\x33\x96\x06\x6b\xed\xcd\x17\xe9\x43\x3a\x67\x13\xf6\xa8\xda\x45\x5a\x54\xcc\x96\x6d\xdd\x5c\xb4\x28\x32\x16\x92\x18\x4b\xc8\x6d\x89\xd2\x05\x38\x17\xb8\x7a\x43\x92\xa2\x3c\x23\x39\xe4\x42\x06\x24\x46\x44\xd0\xe0\x5a\x5b\xa5\x0f\xeb\x74\x63\x09\xf2\x93\xaf\x05\xce\xff\xd2\xea\x0b\x35\x4a\x55\xb5\x56\xcc\xb3\xc3\xa0\x58\xb3\xcb\xe9\x6a\x30\x2a\xd3\x2d\x2b\xd0\x95\xd0\x37\xee\x70\x1f\x6c\xbd\x22\x47\x2c\xf8\x29\x3c\x18\x6a\xd5\x5b\x91\x17\xa5\x86\xd6\xc5\x66\xa7\xd8\x2a\x1d\x4c\x85\x32\xf4\xc3\x64\x83\x26\x82\x4f\xd9\xcc\x69\xdf\xe7\x39\xe5\x74\x06\xa3\x6a\xb6\x47\x35\xd4\xc3\x79\xe7\x8b\xfa\x60\xa9\xa0\x49\x46\x59\xf7\xc0\xc1\x58\x6c\xe2\x2d\x52\x81\x30\x60\x75\x40\x3d\xe6\xa6\x55\xd3\x7c\x56\x85\x8d\x33\xcb\x37\xc6\xfe\x2b\xfb\xe3\xb3\x00\xed\x91\x6a\xb4\x55\xa0\x62\xb4\x61\xa7\x86\x29\x8c\x56\x4d\x4c\xa1\x00\xa3\x11\x58\x03\x6a\x77\xb9\x7f\xc9\x69\xce\x12\x7f\xc2\x2e\xb2\x4c\x24\xd6\x26\xd3\xd6\x2a\x63\x90\x6c\x94\xdd\x3c\x2f\x35\x9d\x64\x30\x26\x97\x16\xa2\x42\xf0\x6c\x69\xce\x9f\x02\xed\x43\x14\xdc\xe6\x0f\xd3\x24\x43\xe2\x5f\x03\x63\x5f\x37\x0a\xe5\xb8\xa9\x2c\xa6\x06\x70\xc3\xca\x04\x07\x02\x5c\xcb\xa5\xd9\x7f\xd7\x22\xbd\x35\x5b\xb0\xf5\x74\x30\xd4\x46\x60\xc8\x6b\x8c\x70\xd7\xc0\x50\xd7\x38\x01\xaa\xe1\xc1\xa9\x71\x03\x53\x6b\x17\x82\x45\x0a\x6a\x66\xfc\xb4\xb6\x45\x21\xd2\xf1\x06\xd6\x44\xc4\x34\x90\x02\x33\xe2\xb5\x48\x8d\xd0\x24\xc1\xf2\xa7\xea\x8c\x5a\x03\xe2\xa5\x21\xee\x1e\x2d\x7e\x54\xd7\xd2\x14\x5d\x50\x96\x99\x03\x1c\x48\xc0\x3a\xea\x62\x98\x57\x26\x92\xaf\xc2\x05\xe7\xf7\x69\xb3\xb8\xb4\xae\x56\x66\x58\x32\x17\x0a\x38\xf2\x4b\x5a\x65\xf0\x54\xf9\x05\x8e\xc5\xa4\xf6\x2e\x0e\x8d\x22\xbe\x9c\x12\xc8\x0b\xbd\x3c\x23\xb0\x00\xb9\xd4\x73\x8c\x36\xa8\x70\x43\x91\xad\x31\x45\x72\x9a\x36\x76\xc7\x19\x11\xde\x00\x1d\x38\x3c\xde\x0f\x4e\x27\x2b\x33\x6d\x35\x34\xa6\xaa\x34\x8a\x43\xef\x9a\xd8\x70\x36\x24\x94\x69\xc6\x84\xa3\x21\x08\xa5\x9a\xb3\x6e\xc0\xb5\x24\xe2\x59\xf8\x1e\xa9\x68\xa4\x8e\x98\x2d\x91\xd3\x4f\x68\x9e\xa4\xb9\x28\xb9\xb6\x38\x35\x56\x63\xa8\xa4\x3c\x9b\x60\xf3\x82\xf1\x72\xcf\x2a\xdb\x93\x38\x57\x3b\x4d\x3d\x34\xc5\x75\x8c\x3c\x65\xaa\x35\x48\xfe\x86\xfc\xef\x93\xbf\xfd\xe6\xe7\xd1\xe9\x9f\x4e\x4e\x7e\x7c\x35\xfa\xf7\x9f\x7e\x73\xf2\xb7\x31\xfe\xe3\x5f\x4f\xff\x74\xfa\xb3\xff\xe3\x37\xa7\xa7\x27\x27\x3f\x7e\xf7\xe1\x9b\xbb\xeb\xf7\x3f\xb1\xd3\x9f\x7f\xe4\x65\x7e\x6f\xff\xfa\xf9\xe4\x47\x78\xff\xd3\x8e\x9d\x9c\x9e\xfe\xe9\xab\xee\xde\xc7\x50\x57\x7b\x3c\x47\x7b\x24\x37\xfb\xb3\x38\xd9\x1d\x8f\x3d\xf8\xe1\x77\x57\xe0\xda\xf1\x77\xde\x89\xc7\x8e\xbf\x0c\xb6\xc9\x5c\x4e\xeb\xf1\x99\x22\x22\x67\x5a\x43\xea\xee\xde\x06\xf6\xcd\x8a\x3d\xc8\x31\x2c\x84\xad\xa2\x78\x7b\x37\x30\x58\x6a\x33\x52\x67\xb2\xaa\xfb\x15\x2d\x60\x9c\xb0\xbc\xc8\x20\x07\xae\x91\xf1\x8c\xbc\x6e\x8b\xe6\xc4\x71\xfd\x06\x89\x35\x78\xc0\xa7\x04\x20\x75\x44\x0e\xbc\xb1\xd1\x06\xde\x38\xf0\xc6\xa7\x5a\xb0\x4d\x3c\x06\x63\xbc\x69\x12\xe1\x6c\x59\xca\x4b\xca\x68\x21\xaf\x20\x12\xc4\x14\x03\x25\x16\x2c\x2d\x69\xd6\x44\x92\xf5\xe0\xa2\xdd\x38\x00\x9a\x76\xda\xa1\x21\xe8\xa6\x85\x05\x64\x15\x11\xd6\x4c\x3f\x26\x7f\xb1\xe1\x3c\x4d\x45\xb3\x6d\x50\xef\xe6\x90\xdb\xf4\xba\x6d\x44\x08\xa7\xea\x1e\xab\x15\x92\xaa\x68\xa3\x3a\x09\xc3\xec\xb6\x6e\x53\x71\x51\x71\x8d\x6c\x79\x46\x14\x68\x9b\x63\x33\x87\x95\x65\xa2\x8a\x1c\x5d\x64\x0f\x74\xa9\x8e\x2a\x9f\x24\xe3\x4c\xaf\x14\x1f\xe8\x44\x03\x62\xc3\x9a\x0e\xa7\xc2\xc8\xbc\x58\x55\x61\x3a\x85\xa4\xa3\x36\x6b\x31\x38\xd6\x69\x73\xf1\xe8\x9a\xf1\xd2\xbc\xad\x9f\x55\x48\x89\xe0\x9d\x06\x82\x4f\x4c\x93\x92\x6b\x96\x19\x61\x9d\x48\x98\x95\x19\x6d\x1a\x02\xdd\x9b\xf9\x30\xb9\x74\x4c\x3e\xf2\x04\x9a\x0f\x77\xb3\x54\xaf\x0c\x60\x84\x87\x0c\x34\xa4\x67\xd8\x75\xfb\xd5\x95\x0d\x34\x6b\x9d\xfc\x6a\x29\x3b\x0d\xef\xe7\xb2\x0a\x24\x1a\xdb\x03\x55\x45\x39\x90\x94\x4d\xa7\x66\x64\x54\xb6\xb9\x90\x39\x5d\xa7\x8a\xf2\xb4\xd3\xe8\xe6\xe4\x62\x7a\x49\x13\xe5\x17\x2b\xbb\x1c\x29\x96\x42\x42\xe5\x51\xb3\x26\xc8\x45\xa6\xe7\xa2\x9c\xcd\xeb\x5d\x11\x36\xe5\x44\x69\x0c\xaf\x32\x93\xa9\xbc\xe5\x62\x65\xb3\x29\x23\xb3\xf0\x04\xac\x68\x25\xc0\x32\x8c\x07\xda\x71\xec\xb5\x10\x00\x1b\xd3\x6d\xd7\xdc\xe7\x5c\x61\x0c\x1f\xa4\x8d\x04\x39\x0e\x9f\x74\x84\x17\x1e\x93\x4b\x0b\x78\x71\xd6\xee\xb5\x35\x25\x76\x32\x1a\x31\x6c\x3e\x1a\xb3\x63\x00\xdf\xca\x00\xac\x4a\x31\x43\x5c\x62\xdb\x39\xe5\x4b\x9f\xd1\x81\x31\x66\x36\x13\xad\x4a\x32\xc9\xba\xd9\xd0\xab\xb3\xf4\xe2\x65\x76\x5a\x27\xf4\xa6\xcc\x0e\xe7\xbd\xbc\x69\x16\xf8\xc8\x5c\x01\x1e\x69\x28\xf2\x59\x3d\x73\x48\xee\xed\xc9\x4b\xc1\xb2\x37\x70\x38\xb7\xa1\xa7\x6b\x2e\xca\x2c\xb5\xa8\xba\x35\x77\x46\x4e\x6b\x43\x28\x2d\x19\x54\x02\x01\xa3\x21\x20\xf4\x08\xeb\xc6\xbe\x85\x4c\xcd\xf6\xb6\x2c\x19\x3b\xb6\x56\x6d\x9f\xee\xe2\x48\x42\x2e\x9f\x08\x6e\xef\xc9\x33\x77\x73\xe7\x94\xf1\xae\xa2\x5d\xfd\x0e\x6c\xc6\x85\x44\xa3\xf5\x94\x70\xd1\xa6\xa1\x7d\xe4\x57\xa8\xe8\x2c\x73\x54\x71\x48\x1b\xa5\x9d\x7a\x39\xed\xf8\x0f\x73\x30\xda\x5a\x9b\x96\xae\x6c\xbb\xb1\xa2\xd2\x70\xc4\xb1\x21\x46\x69\x49\x11\x26\xd9\xe5\x53\xc8\xae\x1b\xdf\x08\xdd\x17\x9a\xe4\x42\x69\xf2\xdb\x57\x8d\x39\x0e\xb2\xa3\x8d\x08\x9e\x44\x74\xf8\x55\x62\x0a\x22\x5d\x50\xcc\x85\xea\xda\xeb\x65\x0a\x5c\xb3\x84\x66\x0d\x42\xcd\x25\x31\x15\x72\xc2\xd2\x14\x30\xb4\x1d\x0b\x42\xa0\xca\xd9\x51\xd3\x45\xd1\xb5\x1e\xa0\x11\x03\x52\x6f\xac\x0f\x7f\xbe\xbd\x43\x1f\x66\x5b\xde\xab\x75\xfe\x6e\xa2\xd1\xc2\xbc\x82\x36\x4c\xa1\xb9\x9f\xad\x38\xdb\x1a\xe9\xcb\x08\xe9\x33\xef\x63\x76\x4a\xc3\xd0\x33\x17\x0f\xeb\x7c\x84\x19\x91\x8d\xa7\x9d\x13\x1e\x7b\x10\xc7\x67\x37\xfe\x81\x62\xef\xec\xe0\x7d\x88\xe6\xba\xad\x72\x23\xcd\xc6\xa6\x2e\x33\x92\xde\x03\x37\xac\x6c\x7d\xe1\xa7\x15\x86\x16\x93\x68\xee\x0a\x81\x86\xc2\xd3\x4c\x35\x53\xe6\x34\xdb\x8b\x11\xdd\x4d\x85\x70\x15\xdc\xaa\xb8\xe7\x23\xb7\x39\x8f\xcc\x65\xed\x99\x7d\x18\xa6\x75\x04\xc7\x67\x04\xeb\x88\x99\xd5\xb7\x22\x0d\xb1\x71\xad\x84\x3b\x54\x42\x8f\x4d\x99\xc1\xfb\x36\xb5\x32\x0f\x0a\x3c\x66\x5d\xdb\xab\xfa\x65\xc4\x39\x98\x33\x49\xb5\xe8\x6e\xef\x8a\x13\xeb\xe0\xc9\xe8\x97\x0b\xbb\xb5\x29\x24\x64\xf6\x3a\x9e\xb3\x82\x4c\x40\x3f\x00\xf0\xcd\x72\x5a\x0a\x27\xea\xd4\x1b\x6a\x02\x89\xa8\x43\x43\x6d\x88\xed\x98\x5c\xb7\x8e\x39\x5e\xee\xe1\xc8\x6e\x97\xfc\xcd\x2a\x8b\x42\xc5\xcb\xb3\x19\xcf\xc2\x36\xbc\x2b\x06\x48\x85\x85\x73\x55\x2f\x0b\xa8\x6d\xac\xbd\x73\xf0\xeb\x5d\x09\x1d\xf6\x86\xc1\xaf\x66\xe4\x3b\x67\x30\x78\x96\xb7\x8c\x14\x49\xe2\xe2\xb8\x7b\x74\x0a\xdb\x57\xad\x9b\x3b\xb7\xf5\x2b\xe6\xdc\x0a\xc1\x6b\xb0\xef\xd0\x9d\x53\xe9\x14\xbf\xff\x3d\x01\xeb\xa8\x8a\xa0\x57\xf8\x16\x07\xf2\x32\x0a\xe8\x65\x3c\x9c\x6b\x12\x0d\xeb\x9a\x3c\x12\x16\xd2\x0d\xdd\x35\x72\xa4\xb9\x82\xa4\x94\x4c\x2f\x8d\x2e\x00\x9f\x3a\x19\xac\x63\x9c\x95\xdb\x36\x19\x2d\xa7\x8a\x27\x91\x88\xc2\x56\xf0\x58\x29\x8f\x5d\x5b\x5c\x4a\x8e\xb6\xe2\x6e\x3b\xfa\x72\x6a\x56\xc4\x9a\x47\xd0\x51\x82\x41\xcb\xab\x84\x79\xa7\x8b\x95\xb1\xfe\xbb\x64\x0b\x9a\x19\x36\x5c\xff\xe2\x1a\x33\x34\x9b\x3f\x7a\xce\xc8\x76\x4d\xd5\x7d\xed\xde\x85\x51\x21\xd2\xda\x9b\x7b\xee\xa7\x0e\x3f\x82\x4f\xfa\x33\x8c\x6a\x47\x2e\x75\x2d\xd9\x82\x65\x30\x83\xf7\x2a\xa1\x56\x84\x39\x74\x64\xc4\xc5\x16\xba\x70\x67\x4a\x91\xa9\xca\xf6\x44\x7d\x7e\x3a\x1a\x61\x66\x94\x71\xac\xed\x1c\x20\xad\xba\x41\x95\x4d\x90\x67\x5a\x91\x82\x4a\xb3\x0b\x7d\x22\xbc\xf5\x67\x4c\x84\xc8\x5c\x31\xa0\x6c\x59\xd3\xc5\xba\x87\xb0\xa2\x01\x5d\xfc\x9d\xc3\xc3\xdf\x0d\x15\x8a\x4c\x33\x3a\xab\xfd\x29\xe6\x62\x5b\x95\x27\x83\x73\xf3\xb7\x4e\x34\x56\xba\x29\xcd\x3d\xf6\x40\x97\xaa\x46\x2d\x68\x9a\xdd\xbb\xdf\x28\xaf\x4f\x91\x9f\x50\x45\xaa\xb1\xbb\xf9\x7b\x4c\xfb\xed\x29\x1a\xf7\xdf\x5e\x5c\xff\xfd\xf6\xaf\xb7\x7f\xbf\x78\xf7\xe1\xf2\xaa\x73\x67\x57\x42\x83\x0d\x6d\x69\x38\x75\x93\x2a\x9d\xc6\xac\x42\x95\x91\x35\x16\x6a\x8c\x71\xab\x08\x99\xcb\x53\xf1\x10\x18\xdc\x6f\xf6\x14\xd0\x6e\xd6\x13\x5a\x14\x17\x32\x17\xf2\x5a\x8a\x29\xcb\x3a\x4b\xfc\xb1\x4e\xf0\x0a\x39\x3e\xcc\xf7\xc2\x7d\x5c\x5f\x37\x16\xc5\x71\x3d\x9b\xa4\x71\x65\x30\xc4\x0a\x34\xdd\x74\x0f\x2b\x5a\x75\xe7\x1f\xab\x55\x12\xbb\x1f\xa2\x83\xee\x99\x83\x63\x64\x19\x32\x3a\xfe\x3c\x86\x69\x20\x13\x09\xcd\xb0\x4a\x74\xd8\xc6\x27\x91\x15\x93\x55\xba\x1a\x98\x1e\xd4\x6f\x67\x92\x09\x9a\x5a\x1f\x96\x65\xfe\x29\xf8\xda\x65\x5e\xec\xc2\xac\x85\x20\x42\xee\x2c\x9e\x02\x8e\xe7\x41\x48\x0a\x09\x95\x54\xb3\x32\xbc\xb0\x25\xdb\x82\x86\xfc\xd0\xce\x01\x71\x6f\xd9\x82\xcb\x0a\x3d\x73\xd5\x30\xee\x80\xb1\x29\xda\x53\xd0\xce\x69\x14\xf5\x65\x61\x0d\x9c\xdf\xfb\x65\x08\x28\x2f\x1b\x49\x79\xc6\x4e\x7a\xb2\x3b\xed\xfc\x54\x3b\xd2\x26\x83\xdf\x33\x33\x83\xd3\x9a\x49\xfb\x6d\xe3\x65\x10\x9b\x11\x1e\xb8\x1f\x7f\xc0\x42\xe6\x9e\xff\x47\x30\x4e\x55\x4b\x4c\x46\x8d\xa3\x55\x48\x18\xad\x1f\xaf\x50\x7d\xff\xa6\xe4\x9a\xe5\xe0\x11\x46\x47\x2b\x32\x91\xb4\x5f\x1f\xab\xaa\x9e\x4f\x94\x8d\x4e\xc8\x9f\x39\x9e\x57\x0e\x29\x19\x11\x2e\xea\x25\x02\x3e\x15\x32\x41\xc3\xc3\x41\x37\x78\x42\x0b\x3a\x61\x19\x0b\x61\xe6\xb1\x36\x38\x96\xc7\x6c\xd0\x83\x31\x40\x69\x7a\x9e\x4a\x51\xd8\x9b\xd8\x43\x7f\x85\x67\x65\xb6\x21\x66\x9a\x95\x9c\x9c\x25\xaa\x45\xc8\x4c\x52\xae\xeb\xf8\xbd\xb5\x8d\xf3\x4b\x94\x41\x62\x08\x01\x34\x8d\x57\x68\xf6\x22\x35\x3c\xa3\xb9\x6c\xc1\xe7\xaa\x6f\x45\x6b\xde\xfa\x97\x6b\x60\xcc\x90\xeb\x8f\xb7\x97\xff\xef\xca\xb9\xe9\x2e\xda\xd9\xd6\xef\x92\x15\x86\x1f\x44\xdb\x36\x37\xae\xce\xf7\xb0\x71\xbe\xec\x8d\x53\x19\x88\x0e\x8e\xb7\x7d\x53\x36\x3d\xce\x8c\x37\x48\x23\x79\x90\xac\x73\x5d\x41\x53\xb6\x7b\x6d\x06\xe8\x4a\x20\xe6\x11\xae\x19\x86\x4b\x37\xac\xb5\x5a\xd8\x52\xd6\x4e\xec\x0a\x2b\xc5\xd0\xbc\x5d\xa7\x34\x53\x9f\xeb\x15\x19\x62\xda\x29\xa4\x48\x3e\x88\x92\xc7\x01\xf0\x0e\xd8\x71\x15\x21\x24\x05\x2e\xb4\xb3\xa6\xa0\x2e\x21\xa6\xf8\x2d\xb1\x39\x6b\x8d\xda\x1c\x2d\x39\x27\x40\xcc\xba\x6b\x88\x56\x55\xfc\x8a\x97\xc3\xad\xfe\x52\xaa\xb5\xc0\x48\x27\x57\xd5\x29\x6c\xd3\x80\x48\x06\x09\x34\xb5\x81\x34\x54\xcf\x2d\x68\x7c\x4e\xd5\x3d\xa4\xf6\x83\x40\xc0\xcc\x0a\x1c\x13\x43\xe1\xfc\x4c\xdf\x99\xc9\xf5\x98\x25\x68\x10\xb6\x41\xb6\x88\xa0\x19\xa2\x8a\x1d\xf4\x34\x04\x30\x76\xb3\x08\x1f\x79\xb6\xbc\x11\x42\x7f\x5d\xd5\xc4\x3f\xf4\xc9\xf8\x4b\x15\x0a\xdb\x34\x62\xa2\x5d\x9a\x22\xc9\x23\xdc\x38\xc8\x17\xa7\x15\xd5\xe1\x25\x2e\xcc\xca\xfd\x42\xb9\xa2\x2c\xf9\x85\xfa\x46\x8a\xb2\xb3\x0c\x17\x53\xdf\xfc\xe6\xf2\x1d\x5e\x7c\xa5\xc3\x54\xe6\x5a\x2e\x0b\xc1\xb8\xf6\x16\xaf\x88\x4e\x9b\x3f\x3b\xf4\xea\x26\x67\x0b\x06\xaa\x25\xe4\x03\x5d\x12\x9a\x29\x51\x99\xd4\xf8\x26\x77\xab\xf7\xe5\x9a\xaf\x27\x42\xcf\xd7\x9c\xb8\x5d\x53\x77\x4c\x5b\x1f\xef\xac\x01\xcd\x5c\x07\xc4\x30\xbe\x36\xac\x46\x54\x97\x42\x42\x02\x29\xf0\xe4\x73\x3d\x11\x87\x46\x0a\xc6\x53\x75\x25\xb8\x61\xaf\x87\x3e\x57\x97\x95\x7d\xd2\xad\x46\xf3\x14\xa1\x29\xdb\x39\x11\x29\xa2\x6a\x23\x73\x2d\x55\x48\xe4\xe9\xe5\x14\xbd\x9e\x76\xd3\x7d\x57\x4e\x20\x33\x8b\xcd\xb2\xcc\x47\xdb\xdb\xd0\x04\x96\xd3\x19\x10\xaa\xab\x43\xa8\x05\x01\xae\x4a\xe9\xf6\x4d\xc7\xac\x2a\xd3\xaa\x84\x30\xf7\x6a\x7f\xbe\x7c\x47\x5e\x91\x13\xf3\x6e\x36\x62\x70\x4a\x59\x86\x40\xdd\x3e\x56\xb7\xa9\x03\x4c\x7d\x4e\x59\xd0\x14\x20\x1f\x21\x42\xda\xab\xe5\x8c\x70\x41\x54\x99\xcc\x1b\x19\x07\x95\x45\xd8\x55\x6d\x0a\x02\x22\x19\xd8\x4e\xbc\xfb\xf0\xcf\x0a\x3a\x87\xc8\xc6\xbc\x0e\xff\xfc\x82\xd7\x61\x53\x45\x34\xc7\xbf\xbd\x60\xf6\xac\xe6\xa0\x69\x4a\x35\x75\xd7\xa4\x7f\x60\xd8\xb5\xc3\x65\x19\x70\x59\x2a\xf8\x9e\xf1\xf2\x93\xad\x8b\xd2\x0b\xb7\xc7\xed\x7b\xa4\x88\x24\x7e\xa1\x45\xc3\x6f\xe7\x3d\x14\x11\x52\x34\x2e\x5b\xc7\xe8\x6c\x8b\xd6\x8d\xb7\x04\xb5\xd8\x9b\x98\x45\x49\x79\x2a\xf2\x35\x22\xa7\x42\x12\xa0\xc9\xbc\x33\x35\x8d\xa8\x91\xe1\x60\xba\xf6\xcb\x76\x08\x61\xfa\x6a\x34\xdb\xfe\xf7\x98\x0c\xcb\x54\xb5\x73\x6d\x76\x6c\x46\x27\x90\x39\x58\x5c\x8b\x95\x1e\xf1\x84\x45\xb2\x81\x4b\x11\x31\x24\xe6\x46\xd8\x48\x2e\x5a\x4d\x84\xe9\xfe\xb3\x98\x87\xa8\xc1\x17\x77\x2e\xba\xa4\x9e\x07\xb4\x81\x7e\x0e\xf3\x50\x06\x08\x88\x64\x75\x1e\x8c\xb4\xd9\x9e\x07\x94\xbf\xfa\x3e\x0f\x0a\x92\x44\xe4\x45\x4f\x22\x25\xef\x6c\x14\xbe\xa1\x68\xd7\xa8\xc8\xf6\xc3\x34\x28\xdc\xd9\x55\xbb\xa2\xda\xde\x83\xbe\xe4\xd5\xff\xaf\x71\x9d\x23\xb7\x5b\xbd\xe3\xdd\xe8\xc1\x11\x99\xd5\x88\xae\xc3\x5f\xe2\x8d\x37\x84\x61\xb6\xda\x8b\x87\x61\x36\x10\xf3\x29\x9a\xe7\x5b\x21\x91\x5f\x42\x30\xa6\x51\x02\x70\x5e\x81\x23\x0a\x50\x41\xf5\xfc\xcc\x65\xac\x2e\xc0\xb3\xe7\x7b\x6b\xf1\x3a\x46\x8e\xe3\x09\xf2\xec\xa6\x8e\x59\xb5\x48\xfa\x51\x63\x37\x37\xc5\x6b\xda\x67\xae\x3e\xde\x35\x71\xf4\x29\x5f\x5a\x8c\xc8\x00\x54\x33\xdb\xfa\x27\x56\x3c\x67\x4c\xe7\xea\x2a\x3e\x77\x48\x67\x50\x7f\x9b\x23\x3a\x5f\xee\x94\xee\x16\xe5\xb9\x1a\xe3\x19\x95\x84\xd5\x80\xcf\xf5\x31\x22\xac\x5c\xf0\x11\x70\x57\x67\x8f\x0c\x20\x7f\xb1\x14\x79\x2d\x3b\xf1\xa0\x85\xaa\x69\x04\xa1\x59\x16\x25\x26\x61\x93\x15\xc4\x9f\x82\x0a\x4a\x7e\xdd\x1a\xd0\xae\x69\x1a\x32\xfa\x13\x16\x8c\xcf\xdb\x12\x91\x19\x8d\xe2\x33\xb7\x43\xcc\x72\x45\xdf\x4a\x48\x6d\x9c\xd4\x6d\x01\x49\x5f\x6e\x8b\x6f\x3e\xdc\x5e\xb4\x29\x43\x59\xd8\x15\xce\x00\xfc\x9e\xd0\x34\x67\x4a\xa1\xc3\x07\x26\x73\x21\xee\x83\x86\x3c\xf1\xa9\xb6\x33\xa6\xe7\xe5\x64\x9c\x88\xbc\x91\x75\x3b\x52\x6c\xa6\xce\x1d\x47\x19\x99\x89\x3b\x25\x8c\x67\x55\xa6\x32\x5a\x0b\x11\x0b\xac\x3b\x94\x5c\xf3\xe5\x49\x52\xbd\x3d\x6e\x3d\xcc\x4f\xa9\x42\xb3\xd7\xa7\x07\xab\x9b\xe0\xe6\x3d\xb8\xd4\xb1\xbe\xab\xc2\xaa\x0d\xae\xec\xac\x2d\xef\xde\xac\xd4\xe1\xbc\x38\x1b\xe7\xd1\x2a\xaf\x07\x9f\x24\x27\xf4\x27\xa0\x82\x22\x60\x63\x9e\xb9\x6f\x6b\x92\x9a\x58\x7a\x6c\xda\x42\x84\x6a\xe7\xdc\xa3\x7b\xfb\xd8\xfc\xd2\x87\x65\x1e\xc7\x2a\x2e\x73\x91\x65\x66\x21\xa9\x03\x5e\x6b\x44\x77\xa2\x6a\xd2\x46\xb4\xb3\x98\xbb\x46\x59\x68\xbe\x05\x5e\x24\x61\x4c\xc1\xe2\x9e\x99\xcb\xc0\x61\x66\x98\x0d\x84\x63\x53\x92\xb3\x4f\x86\xc2\xe6\x88\x6d\x90\x58\x74\xfc\x6f\xfe\x3a\xa0\x80\x35\xc1\xe0\x83\x0a\x33\xfd\xcc\xac\x50\x73\x10\x9f\x1c\xad\xcd\xb5\x65\xbe\xb8\x02\x6d\x14\x35\x3b\x6f\x4d\xef\x83\x51\xac\x64\x19\xe1\x30\x84\x78\x86\x49\xd3\x3b\x1c\x95\x53\x04\x9e\x07\xf4\x14\x3b\x9a\x8c\x0c\xe2\x85\xb7\x97\xf2\x1c\x93\x0d\xe9\x3b\x2f\xe6\x41\x26\xbb\x7b\x91\x9f\xd1\x57\x45\xfa\xe2\xaf\x0a\xe4\xfa\x4d\xac\xdf\x83\xe1\xac\x34\xf1\x86\xd9\x7a\xf0\xd2\xb5\x48\xd7\x60\x88\x11\xcc\x98\xd1\xac\x7b\x21\xd7\xcb\x69\x13\xba\x93\x0b\x67\x1e\xb1\x15\xc4\x6d\x9c\xfe\x27\x48\x4a\x0d\xa9\x43\x23\x77\x26\x65\x8b\x64\xdc\xa6\xa6\x33\x05\x3e\x49\x7f\x02\x18\xa0\xa4\xce\xea\x52\x6c\x4e\xd7\xa9\xf0\x5d\xcf\xc8\x7f\x21\x97\x54\x1e\x50\x2b\x63\x0b\xe0\xa0\xd4\x75\xf5\xf3\xae\x53\x81\x71\xd4\x09\xe5\x5e\xb7\x32\x67\xda\x59\xb8\x1d\xea\xb8\xc3\xf1\x98\x00\x29\xa8\xa4\xb9\xb9\x83\x15\x71\xcb\x33\x81\x19\xb3\x69\x81\x8d\x4b\xb1\x82\x2d\xef\x06\xaa\x8b\x8a\x0d\xd3\x24\x67\xb3\xb9\x3d\x2d\x84\x92\x4c\xf0\x19\xf1\x71\x63\x99\xa0\x29\x41\xc6\x22\x24\x79\xa0\x32\x37\xb2\x00\x4d\xe6\x18\x84\x46\x39\x49\x4b\x73\x1e\x08\x82\x6c\x2f\x47\x4a\x53\x0d\x0e\x0c\xaf\xb3\x0d\xce\x4f\xd3\x01\x4a\xc4\x3e\x77\xf9\xfb\x03\xe3\xe9\x98\x93\x16\xc5\x0a\xf2\xfe\x13\x24\xd5\xb1\xb6\x88\xd3\x79\x8e\x80\x81\xc2\x1f\x67\x8f\x16\x17\x2c\x0c\xf6\x44\x55\x76\x6f\xd8\x17\xd9\xe4\xad\x9b\x70\xe6\xb5\x4f\xfb\xa7\xd1\x47\xdb\x8b\xa0\xbc\x13\xab\x51\x34\x09\xd1\xb1\x85\xbc\x37\x27\xd7\x62\x04\x09\x59\x55\xeb\x0f\x22\xcb\xd3\x81\x90\xd9\x42\x68\x72\x72\x7c\x7e\x7c\xba\xb6\x17\x8e\x55\x33\xcd\xc0\x66\x44\xd7\x2f\xa4\x58\x5e\x64\x4b\x7c\x87\x63\x5b\xf2\x3b\x10\xc0\xd0\x07\xac\x56\xe5\x2f\xd5\x1c\xb2\xec\x8c\x28\x23\xfe\x52\x5f\x43\xc4\x7e\x6a\x1e\xd2\xb2\x4c\xac\x99\xec\xe4\xf8\xe7\xe3\x33\x02\x3a\x39\x25\x0f\x82\x1f\x6b\xeb\xf0\x20\x77\xa8\x43\x06\xd1\x54\x11\xb1\x14\x25\xe1\x00\xee\xec\x54\xc5\xaa\x12\x6a\xd4\x9f\xd2\xca\xe8\x16\x74\x03\xb2\x2c\x4c\x9e\x7b\xff\x89\x69\x23\x8a\xe8\x12\xcd\x14\xaf\xac\xa6\x00\x88\x43\x4f\x15\xde\x74\xe7\x73\xa0\x99\x9e\x2f\x2b\xed\xe5\x9f\x20\x05\xd6\x27\xe5\xee\x9b\x70\x19\xaa\x07\x69\xa3\xfd\x4d\xe0\x34\x02\x46\x29\xe1\x6e\x2e\x41\xcd\x45\x76\xf0\x34\xce\x0f\xae\xdc\x5b\x22\xb8\x32\x3c\xc5\xa8\xd8\x8e\x46\x55\x65\xd0\x59\x99\xc5\xd5\x57\x10\x78\xca\x24\xa4\x4e\x58\x72\x25\x2f\xe6\x74\x81\x92\x82\x91\xe7\x20\x0d\x51\x4d\x9a\x3a\xd1\xef\xc6\x15\x85\x55\xda\xdd\xeb\x9e\x84\x6d\x76\xc4\x8e\x9c\xc9\x22\xce\x2d\xfd\xcd\xcd\xf5\xdb\xd6\x2d\x8d\x1f\x7c\x8b\xc7\xf8\xed\x1c\x92\xfb\x9b\xb0\x6a\xae\x3d\x09\x2d\x28\x84\x3c\xa4\x60\x60\x86\x8f\x26\x15\x5c\x0b\xa9\x09\x2f\xf3\x09\x48\x6f\x50\x98\xe1\x2a\x82\x5c\xb0\x04\xc6\xe4\xca\x7e\xe7\x9d\xf3\xbe\xfa\x30\xe5\x33\x20\xaf\xcd\x81\xf8\xc3\xef\x7f\xff\xbb\xdf\x87\xf3\xe8\x70\x20\xd5\x38\x20\xaa\xee\xc5\xfb\x22\x76\xdd\x5a\x72\x36\x19\x9b\x1d\xa5\xa8\xd4\x65\x34\xa9\xd6\x66\xb6\xf9\xd0\x85\x59\x25\x15\x00\xd9\xe0\xae\x30\xac\xc3\xfe\xdf\x24\x13\x93\xf3\x9c\x2a\x0d\xd2\xe8\x38\xee\x5a\x1f\x21\xdc\x30\xe3\xb3\x71\x9e\x9e\x8e\xc3\xbc\xe0\x5e\xad\x5e\x2b\x29\xd7\x82\x99\xd9\x52\x1e\xce\x4c\xca\xc1\x4d\xf0\xc4\x53\xf9\x86\x1c\x75\xab\x26\x66\x96\xe0\x1b\x88\x93\x89\xf6\xed\xdd\xdd\xf5\x37\xa0\x9b\x0c\x9b\xe3\x87\xe4\x9b\xf7\x77\x55\xb9\x71\xb3\xbb\x6c\x52\xd3\xc0\xb5\x43\xb8\xf6\x5c\x84\xd5\x9b\x8f\xed\x77\xb1\xac\x04\x6b\xa3\x71\x0e\x89\x59\xe8\xb3\x56\x65\x5b\x1f\x87\x78\x79\x3d\x26\x7f\x15\x25\x8a\x5c\x74\x92\x2d\xc9\x03\xb5\x88\x06\xdd\x20\xa5\xeb\x76\x64\xc8\x38\x32\x5c\xcb\xec\xea\x6f\x81\xa6\xb6\x56\x25\x9a\x76\x0e\x7e\x56\x1b\x34\x45\x5b\xb6\xb7\xa5\xd2\x22\x27\x73\xf7\xaa\x76\x0e\xeb\x82\xfe\x56\x36\xb2\x47\x10\x7d\x3f\x8a\x48\x28\xac\xb6\xe4\x7e\xf3\x45\xe8\x42\x6b\x5c\xc8\xce\x73\xa3\x1a\x10\x25\x49\x73\xaa\x9c\xa0\x8f\x26\x4c\xe6\x78\x54\x67\x93\x58\xdd\xa2\x54\x15\x21\x91\x2a\x8b\x10\x64\x52\xe6\x50\x06\x77\x12\xee\x84\x8c\x53\xa3\xc4\x34\x1e\xe8\x5e\xb3\x2d\x6e\x85\x04\xe2\x5c\x6d\x6e\x73\xd9\x00\x1c\x43\x68\x28\x2a\x21\xf1\xc6\xe4\xaa\x80\x2a\xe5\x82\xb3\xc4\xba\x33\x48\x59\x08\x4e\x44\xa9\x8b\x52\xa3\x29\x28\xa1\x0a\x46\x0b\x2a\x99\x61\xa8\x66\xfc\xfa\x87\x25\x37\xa7\x5d\x0b\x81\x76\x92\xca\xe9\x6c\x29\x0e\x27\x33\x92\x34\x43\x7c\x01\x8c\xc8\x2b\xbc\xb6\x38\xe1\x3b\x9a\xf4\xda\x06\x43\x6c\x0d\xf1\x79\x3c\xb5\x8e\xea\x39\x46\xf6\xa1\x2f\xcb\x07\x86\x22\xe3\x34\x6a\x43\x0f\x12\x6f\xa2\x6a\xb1\x81\x2c\x01\xfd\xed\x42\xae\xe8\xc1\x86\xc2\xf5\x39\x8c\x14\x6b\xf2\xfc\x6a\xb5\x7b\x2d\x3f\x02\xe5\xe4\xf2\xe2\xea\xe2\xef\xb7\x3f\xbc\xfd\xfb\xd5\xc5\x87\xf7\x21\x5d\x07\xd7\x8e\x8f\x59\x3d\x3e\x5a\xfd\xf8\x67\xa8\x20\xef\x9b\x4a\xe6\xd0\x9f\x30\x93\x5b\xa4\xa6\x09\x4a\xe6\x74\x80\x46\x3d\xe4\x30\x94\x3a\xb2\x62\x34\x35\x8c\xe7\xa0\x1c\xc7\x45\x15\xbc\x83\x8c\x2e\x6f\x21\x11\x3c\x3d\x78\x74\xf6\x55\xc5\x6c\x94\x25\xa8\x2a\x03\x0d\x2b\x88\x59\xbe\x10\xac\x2b\x5e\xed\xe3\x03\x9a\x21\x0d\xf6\xfd\x3a\x7b\xad\x49\xff\x3c\xd7\xa4\x37\xe6\xf1\x02\x24\xc3\x88\xa0\x3e\xec\x9a\x6f\xc5\x83\xab\xe8\x7e\xc2\xb8\xdf\x39\xa7\x0d\x2b\x4d\xed\x1e\x09\x47\x53\xd3\x82\xbc\x7e\xe5\x07\xf9\xf2\xfc\x1e\x2e\xd2\xa7\xd7\x9e\x2f\x47\xe3\xd3\xae\xaf\x3a\x6c\xa9\xed\xfe\x0a\x89\x1f\x22\x2b\x6c\xfc\xf5\xb8\xca\x53\x7b\x8d\xf4\x54\xac\x88\xf2\xd4\x87\x9c\x7d\x79\xfb\x44\x27\xc5\xad\x48\xee\x23\x99\x5d\xef\xde\x5e\xdb\xde\x56\xe2\x59\xec\x0d\x6c\xa4\x4c\x41\xa8\x79\x0a\x05\xd0\xc1\xe8\xda\x1b\xa3\xeb\xb1\x4d\xeb\xa2\xd9\x9b\xbd\x0d\xa8\xc7\x83\xb6\x55\x37\x2f\xf8\xc8\x76\x05\x94\x41\xdb\xda\xd2\x06\x6d\x6b\x8f\x66\x93\x48\x30\x18\xf4\x1b\x49\x13\xb8\xee\x93\xf0\xe6\x19\x08\x49\x4b\xe9\xca\xca\x55\x32\x5c\xc5\x2e\x38\x40\x6a\xf9\x87\x7b\x15\x20\x33\xf3\x26\x36\x3c\x1a\x6d\x88\x75\x60\x71\x29\x03\xc4\xbc\xbb\xb9\xeb\xda\x89\xb8\xde\xc9\xbc\x89\xba\x5a\x37\x29\x2a\x30\x74\x5f\x35\xc4\x1d\x27\x43\x3c\x96\x5a\x07\xde\xdd\x9c\x4e\x9b\x2b\x48\x14\x9b\x99\xe9\x72\x95\xa1\x6d\x8c\x70\x55\x7a\xaf\x26\xc4\x8c\x3a\x15\x32\x61\x93\x6c\x49\xe6\x34\x33\xca\xd2\x03\xd3\x73\x42\xc9\x3d\xcb\x32\xd7\x4d\xf7\x89\xba\x05\x97\xab\x69\x25\x9a\x4c\xf0\x19\x4e\x06\x75\x39\x19\x9f\x0a\x48\xcc\x98\x49\x06\x94\x97\x85\xa5\xd3\xc8\x47\x4b\x51\x46\x48\xcb\xf0\x8e\xef\x4a\x9e\xe2\xcc\xc1\x8f\xd8\xc2\x6d\x8f\xee\xf9\x76\x72\x2d\xf9\xa8\xe7\x20\x1f\x98\x02\x5b\x48\xae\x33\x4d\x96\x96\x76\x19\x39\xfb\x59\x05\xa1\xe2\x32\x07\xcd\xb6\xc0\x54\xd6\xce\x63\xfd\x80\xfd\x7a\xd6\xca\x05\x1f\x71\x98\x59\xa0\x06\xc7\xd0\x6c\x44\xa7\x1d\xdf\xc6\x0f\x56\xd9\x06\x4a\x8b\x82\xb0\x3c\x87\xd4\xe8\xc7\xd9\x92\x2c\x18\xed\x4c\x09\x82\x42\xd4\x3b\x8a\x9c\x70\x41\x44\x61\xae\xae\x92\x33\xbd\x44\x8f\xde\xbc\xd4\x24\x15\x0f\x3c\x20\xdf\xea\xce\x85\x39\x50\x32\x01\x4d\x9d\x0d\xdc\x1c\x82\x0a\x13\x1d\xe1\xce\xcd\xd9\xc3\x24\x81\xbb\x8d\x1b\xa0\x82\x49\x9f\x51\x1d\xc0\x25\x36\x48\xf3\x76\x3d\x1f\xdf\x76\x4c\x39\x7f\x5d\x20\x0e\x73\x3f\x90\x0d\xcd\x89\x16\xa5\xee\xc9\x3d\xb2\xcd\x74\x64\x21\x2e\x1a\x4a\x22\xcb\x41\x11\x51\x46\xaa\x37\xf1\xda\x0d\x17\x53\xc3\x1b\xec\x4e\x1b\x9b\xd2\x29\xeb\x54\x75\x38\xc6\x16\xdb\x02\xde\xef\xf2\x70\x1b\xf8\x95\x93\x72\x3a\x05\x89\x37\x1d\x12\xbc\x16\x76\x5f\xd5\xf1\xf2\x77\x58\x37\xe3\xad\x0b\xf8\x02\x7d\x86\xb5\x03\x1c\x98\xc4\x96\x21\x1d\xc8\x26\x96\xe9\x95\xa0\x10\x0b\x9e\x93\xf7\x1f\xbf\xee\xb6\x45\x63\x54\x16\x08\x4b\x59\xc5\xf7\xfc\xc8\xbb\xc5\x24\xc6\xdd\x0f\x9b\x50\x5f\xdc\xb6\x48\x32\xa1\x5c\x7a\x34\xae\x4b\x32\xa7\x9c\x83\x37\x46\x31\x8d\x96\xec\x09\x00\x27\xa2\x00\x1b\x94\xd7\x89\x18\x4a\x14\xe3\xb3\x0c\x08\xd5\x9a\x26\xf3\xb1\xa1\x8e\xfb\xbd\x50\xe7\x21\xbb\x4f\x94\x96\x40\x73\xbb\x27\x24\xe4\x94\xd9\xe1\x09\x4d\xa4\x50\x8a\xe4\x65\xa6\x59\x51\x75\xd6\xcd\x8a\x08\x88\x08\xa1\x6c\x5a\xaa\x5f\x2b\x4c\x2b\xa9\x13\x9e\xcf\x6a\x0a\xdd\xeb\x8b\x66\xb1\x22\x34\x9d\x9d\x99\x6f\x21\x2f\xf4\xb2\x4a\x4c\xec\xa6\x03\x4d\x99\x54\x9a\x24\x19\x03\xae\xdd\x9b\x59\xc8\x41\xa4\xe1\xcc\x8b\xd3\xdc\xcd\x88\x72\x53\xc2\x53\x54\xbe\x0b\xad\x6c\xfe\x5d\x45\x84\xef\x2a\x65\xca\xd9\x3a\x54\xb7\xec\x3f\xea\x2b\xd3\xd8\x8d\xe3\x67\x04\xb7\x8e\x17\x70\x2c\x45\xee\xa3\x06\x09\x8d\x3a\xdb\x75\xee\x64\x18\x5f\xc1\xf2\x31\xfe\x5c\x9f\xb5\x30\x07\x6a\xdd\x02\x53\x61\xd6\xb8\x0e\x6e\x28\x0e\x0b\x73\x0e\x20\x01\x23\x8a\xd2\x88\x4c\xe6\xc5\x79\x4c\x43\x96\xfb\x00\x4a\xd1\x19\x5c\x77\x0c\x47\x88\xc1\x70\x6a\x43\x1b\xc6\x31\xd4\xdb\x66\x0e\x16\xe8\x4a\x8b\xc6\x27\xcd\x24\xaf\xa6\xf2\x98\xdb\x17\xe9\x44\x81\x57\x9a\x1e\x24\xd3\x1a\x70\x97\x62\x25\x27\x0c\x40\x5b\x05\xef\x6c\x27\x97\x75\x1a\xcf\x4d\x7a\x73\x3c\x23\x7e\xf0\xd4\xa6\x69\x4d\x80\x4c\x24\x83\x29\x99\x32\xcc\x1b\xc3\x8c\xaa\x33\x5b\x85\x80\x62\xdc\x2e\x55\x0a\x24\xbe\xb6\x33\x0b\xf8\xd7\xef\x46\xcf\x5f\xdc\xfb\x6b\x59\xf2\x84\x36\x4a\x74\x22\xb6\x18\x9b\x92\x19\x66\x71\x39\x25\xf8\xdf\x5e\xfd\xfb\x1f\xc8\x64\x69\xe4\x35\x54\xc4\xb4\xd0\x34\xf3\x04\x90\x0c\xf8\xcc\xac\x22\xb2\xdc\x6e\x7c\xa3\x85\x4f\x55\x2d\x4e\xc6\x72\xa6\xed\x04\xbd\xfe\xed\xfd\x24\xe8\xe8\x21\x7f\x3c\x4f\x61\x71\xde\xd8\x42\xa3\x4c\xcc\xba\xf5\xfa\x36\x46\x36\x71\x90\x9d\x6d\xc3\x89\x16\x19\x4b\x96\x87\x3a\xd3\xbe\x78\x09\x99\x8b\x07\x6b\xcc\x59\x3f\xaa\x0d\xa8\x97\x42\x14\x65\x86\x13\x47\xbe\xae\xf0\xf9\x4a\x05\xab\xd0\x47\xa1\x46\xc2\x06\xb7\x43\x27\xaa\x1b\x76\xe5\xce\x71\x29\x8c\x9e\x4c\xe1\x80\x27\x9c\xcf\xad\xaa\x43\xd2\xd9\x1a\xf7\x35\xcd\xb2\x09\x4d\xee\xef\xc4\xf7\x62\xa6\x3e\xf2\xf7\x52\x0a\xd9\x7e\xe7\x8c\x9a\x3b\x7d\x5e\xf2\x7b\xac\xa2\x5b\x83\xd1\x8a\x99\x8b\x29\xf4\xf8\x01\x8d\xb7\xeb\x44\x8c\x7f\x4b\x0b\x0f\xea\x45\x12\x6f\x83\xab\x47\x86\x4f\xac\x36\xb4\x71\x02\x86\xe6\xae\x09\xf8\xd0\x7a\x0f\xd5\x3c\xda\xbf\x7d\xf5\x6f\x7f\xb4\xcc\x85\x08\x49\xfe\xf8\x0a\x53\x8e\xd5\x99\xbd\x00\xf0\x06\x36\xa2\x56\x4e\xb3\xac\xab\x97\xa0\xc9\x02\xbe\xee\x5c\x9c\xba\x07\x47\x5e\x1f\xec\x74\xef\xac\x32\xde\xdd\xfd\x15\xf5\x45\xa6\x15\x64\xd3\x33\x8b\xf6\x52\x99\xb5\x8e\x51\xba\x3a\x76\x57\x5e\x77\xa4\xa0\xc3\x2b\x6d\x0b\x91\x95\x39\xbc\x83\x05\x4b\xba\x39\x30\x5b\xab\xd2\xea\xcd\x9b\xe9\x33\xa6\x10\x04\x68\x92\x89\xe4\x9e\xa4\xee\xcb\x46\xa8\xfc\x6a\x55\xed\xee\xb3\xd0\x35\x69\x20\x20\x59\x60\xeb\xfb\xb7\xd2\x04\x72\x5a\x14\x15\x42\x89\xa4\x0f\xad\xc9\x40\xd6\x84\xe8\xa8\x81\x6e\xc4\x60\x67\x7a\xa8\x2b\x7d\xe4\xde\xc8\x5c\x53\x9d\xbb\xe8\x9c\x5b\x10\xee\x89\xaf\xa9\xef\xee\xc7\x6c\x6d\x88\xba\x43\x7f\x1a\x0a\xfc\xb7\xc5\x5b\x58\x43\xc6\xaa\x20\x87\xaa\x8d\x61\x25\x48\xb3\x7d\xf0\x96\xe9\x6e\xbe\x8c\xe0\x0c\x0d\xcb\x91\x68\xcd\x0b\xaf\x9c\xd0\x39\xd5\x4e\x3f\xf2\x5e\x76\x4a\x0a\x90\x8a\x29\x23\x3a\xfd\x80\x07\xea\x6d\x46\x59\xde\x70\xdf\x1d\x6a\x12\xd6\x23\xea\x73\x5a\x8c\xee\x61\xd9\x71\xc3\x05\x1e\x97\x6d\x01\xfe\x39\x2d\x3a\xde\x03\x58\xba\x36\xfc\x1a\xe8\x78\x39\x5f\x8b\xd4\xd1\x81\xd7\x83\x2d\x49\xfc\x2c\x6a\x6c\x44\x19\xe8\xd0\x57\xce\x0f\xf5\xc2\xb5\x6f\x1c\xf3\x49\x75\xe5\xd8\xa7\xbe\xa4\x8b\x06\xdf\xef\x73\xbd\x67\x2a\xe2\x23\xb1\xd3\xa0\x48\x27\xbc\x9d\xdc\xce\x68\x5f\x47\x2d\x83\x96\x3d\x99\x0d\xd5\xd7\x19\x9a\xc6\xb6\x28\x40\x00\x01\xe6\x28\xba\x41\xc9\xf1\x9b\xe3\x83\xde\x71\x76\x65\xa4\x28\xe8\x0c\x35\xd3\x3e\x2c\xd0\x2a\x4d\x4d\x0c\xda\xb9\x78\xb0\xdf\xdb\xe8\x92\xc2\x3d\x05\x69\x0d\x64\x3e\x17\x41\xab\x63\x23\x07\xfd\x8e\x70\xda\xb5\xc5\x2a\x7c\xa0\x4b\x42\xa5\x28\x79\x50\x1a\x34\x3a\x46\x2a\xc7\xd9\x87\x95\x97\xbd\x12\x1c\xbc\x93\x3e\x64\x94\xbb\x1a\xc3\x9c\x29\x1b\xaf\xc0\x38\x79\x3d\x7e\xfd\x2a\x98\xf6\x1b\x48\x4a\xa9\xd8\x02\x6e\x5c\x8d\xf3\x86\x53\xe5\x72\x7a\x2d\x94\x62\x93\x0c\x13\xb7\xb4\x20\xef\x6d\x01\xf8\xf5\x17\xad\x02\x47\xf0\x8d\x85\x6c\xa2\x95\x06\x50\x78\x62\x4f\x70\x33\xe0\xd3\x0c\x10\x10\xf5\xd1\x2f\x49\x12\xd7\x75\x45\x92\xbc\xaa\x24\x49\x7b\xef\x1d\xf4\x5d\x7d\xe1\xfb\x3e\x70\x92\x0f\xce\x37\x50\x57\xb6\x67\xbe\x72\x32\x7e\xf4\x20\x99\x76\x87\xfb\x81\x29\x20\x27\x68\x95\x58\xd9\x8c\x41\x00\xcd\x4d\x1b\x56\x60\x05\xfc\x18\x00\xcb\x72\xf5\xe8\xf6\x61\x95\xd6\xf9\x49\x1d\x81\xff\xe0\x0c\x58\xf5\x0a\x3a\xee\x5f\xdf\xcb\x73\xca\xd3\x2c\x88\x67\x54\xb3\x92\x2d\x83\xb0\x70\x2e\xa7\xa4\xc9\x12\x9d\xff\xb2\x51\x4d\x62\x4e\x15\xe1\x82\xe4\x40\x31\x40\xd3\xdc\x2e\x9e\x0b\xb6\xb0\x9a\xe3\xd1\x60\x37\xbb\xbd\xc6\x9a\x17\x82\x63\xd7\xef\x98\x72\xec\xd9\xf0\x11\xa7\x81\xd8\xb0\x8e\x9c\xa6\x21\xa9\xdd\x8d\x39\xad\x17\x6f\x5c\x07\x4d\xae\x52\x52\x5f\x1c\x2b\xb4\x3c\x07\x1d\x67\xae\x04\xb9\x19\xbe\xc4\x38\xc1\x0d\x66\xb9\x3a\x48\x26\xc8\x9b\x6d\xdb\xea\xeb\x56\xd7\xe2\xda\xbb\x6e\xa6\xb8\x22\x38\x80\x86\xa7\x5f\xf5\xac\xc1\x0b\x7d\x8c\xa8\x75\xa9\xbb\x1a\x28\x2e\xe3\x31\x0c\xc9\xdb\x3b\x25\x2a\x73\xcf\x0c\x38\x48\xea\xfc\x0a\x3e\x44\xd4\x81\xaf\x50\x25\x78\xe8\x81\x78\x62\xc3\x19\x7e\xff\xb4\x98\x62\x7f\x16\x40\x08\xca\x39\x27\x42\xae\x9c\x76\xe7\x31\xd9\x24\xb1\xc4\x7c\xeb\x15\x68\x2e\xbb\xf9\x1b\x98\x9f\x66\x51\xfe\xbb\x64\x0b\x9a\x81\xc5\xb0\xf7\xac\xe1\xa0\xc2\x84\x2a\x27\x7d\x55\x1b\x9d\x7e\x88\x6a\xc7\xe6\xa0\x87\xad\x1a\x64\x24\x79\xe2\xe8\x88\x9c\xd8\x31\x8e\x2d\xc8\xee\x61\x85\x5c\xb7\x56\xef\x3f\x15\x01\x95\x5b\xe3\xad\xd7\xfb\x4f\x05\xc5\x38\x8d\xa2\x17\x0b\xf7\xbf\x60\x4e\x17\x80\x98\xc6\x2c\xa3\x32\xc3\xa0\xf4\x5b\x3b\x65\x64\x52\x6a\x02\x7c\xc1\xa4\xe0\xb9\x39\x7e\x08\x3e\x63\x38\x93\x04\x04\x83\x4f\x40\x91\xaf\x4e\x7e\xb8\xb8\xc1\xa4\xa5\x53\x87\x96\xef\xde\xaf\x54\x88\x0f\xb0\xf2\x0e\x8d\xee\xfa\xb8\xdf\x88\x7f\x77\xb3\x5d\x50\x3e\xf1\x73\x61\xde\x2d\x2f\x75\x49\x33\x84\x7e\x4e\xb2\xd2\xdc\x85\x07\xdb\xd9\xf1\x6d\xe0\x21\x96\xbc\x98\x26\x70\x07\xfc\xfd\x8e\x75\x3a\xae\x31\x0e\xea\xdb\xc6\x7e\x5d\x83\x21\xef\x5c\xe3\x61\x03\x08\xe5\x9a\xa0\x73\xac\x2a\x60\xca\x66\x1e\x8e\xbb\x8b\xbb\x85\x67\x60\xe9\x04\x9b\xfc\xed\x6b\x92\xae\x59\x18\xb1\x46\xcb\xc1\x6d\xf8\x1d\x0e\x43\xbc\x63\xd0\xc1\x10\x1d\x67\xd7\xa7\x5c\xbd\xc5\xa5\xd9\x8f\xe2\xb0\x8d\x7e\x5b\x69\xb2\x66\x23\xbc\xbb\xba\x6d\x16\xf4\xb0\xce\x3f\xb1\xf7\x4a\x5e\xd7\x5d\xd4\x55\x6f\xb0\x22\x5e\xe5\x40\x05\x39\xb3\xe2\x34\x22\xcf\x56\xf2\xf5\xbb\xab\xdb\x3d\xc7\xf2\xbb\xd9\x0a\xc3\x13\xaa\x6c\x8c\xf4\xbb\xab\x5b\x1b\xb7\xb6\x1f\xed\x9d\x1d\x29\xdd\x7d\x10\x08\xe0\x86\xd8\x5a\x1d\x38\x76\x38\x97\xbb\xa8\xe2\x41\xcc\xe2\xa3\xcf\xd7\x52\x43\x2e\xaf\x09\x4d\x53\x89\xe1\xcc\x5d\xce\x72\x0b\xd1\x8e\x16\x45\x15\x95\x8a\x45\x62\xa8\x82\xe6\xab\x37\xf6\x00\x0a\x3e\x1d\xd7\xcf\xb6\x77\x65\x91\x31\x1b\x7e\xda\x1c\xa2\x2e\xa1\x93\x8b\x45\x17\xfe\x14\xe2\x61\xec\xec\x5f\x0c\x92\x0f\xa2\x62\xce\x89\xae\xe5\x69\x63\xef\x52\x09\x4a\x64\x8b\xba\x78\x7e\xf0\xee\x74\xec\x08\x43\x12\xab\xdd\xe9\x2b\xd0\x3e\xd3\xce\x04\xae\x25\x83\xf5\x5d\x49\x6e\xcc\xdb\x95\xc8\xce\x2a\x12\xd8\x02\x30\x65\xc9\x55\x08\xee\x30\x32\x0e\xe3\xf3\x6e\x89\x9e\xdb\xac\x1b\xaa\xf1\x64\x52\xe9\x45\x01\x7c\xf3\x80\x57\x3c\xc8\x11\x59\x41\xa6\x4f\xdf\x5d\xdd\xda\x9b\xd4\x4e\x97\xc3\xf3\x56\x1b\xf7\x4e\xe7\x4b\x8e\x1c\xbe\x4c\x52\x88\xdb\x26\x5a\x4e\x69\x55\xd2\x94\x6d\x9c\xe0\x63\x15\x08\x91\x7a\xe3\x42\x13\xc2\x12\x81\x03\x2c\x07\x41\x48\xa5\xed\xd8\x10\x9f\xf6\xfa\xc8\x64\xe1\x68\x07\x79\xd7\xa8\x77\x85\x02\x2a\x93\x79\x97\x8d\x1d\xfb\xb2\xb0\x94\x90\x54\xd8\x0c\xb1\xa9\x90\xe8\x81\x1f\xa1\xa8\x93\x09\x71\x5f\x16\xcf\x23\xdd\xb8\x81\x0b\xaa\xe7\xcf\x76\x89\xb4\xc6\x18\xe4\x9b\xee\x7b\x36\xe5\xaa\x4b\x9e\x4b\xa0\xf2\x05\xda\xaa\x5c\x38\x72\x8d\xd4\xb6\xff\x65\xd4\x32\x83\xbd\xcd\x4a\xa5\x41\x7e\xcd\xa4\xd2\x47\xfb\xf6\xf4\x03\xcd\x98\x03\x4e\xb6\x21\x2c\xc7\xcd\xee\xfe\xc2\xf4\xdc\x15\xea\x3d\x3e\x6b\x7f\x65\xfe\x76\x64\x1c\x13\x21\xc9\xf1\x95\xe0\xb0\x77\xf0\xd0\x8a\x06\x5a\x09\x3e\xd5\x95\xbe\x55\x66\x73\x93\xa8\x20\xb3\xa0\x2a\xf8\x45\xe7\x73\x76\xe7\x6a\x27\x1b\x7a\xbc\xa4\xa0\x40\x13\x8a\x45\x27\xb1\xef\x79\x5d\xb0\xd8\x16\x47\xb3\x85\x9e\x85\xd3\x79\x97\x8d\xa5\xdd\x73\xf0\x46\x75\x35\x2d\xb6\x2f\x40\x17\xd5\x76\xef\x73\x86\x88\x21\xe0\xca\xc9\x7c\xcf\xf8\xfd\x9e\x87\x3c\xec\x84\xbc\x5f\x1b\xbd\x01\xd1\xe2\x7d\xef\x8c\x5b\xd0\x04\x23\xea\xd1\x89\x28\xb5\x2f\x71\xd3\xf4\xc2\x33\xfe\x5f\x76\x5f\x60\x00\x2b\x02\xe0\xec\xbb\x2a\x1b\x0c\xe0\xea\xcc\x86\xb9\x78\x0b\xb7\x5a\x72\x4d\xb1\xd6\xf6\x3b\x91\xdc\x83\x24\x99\xa1\x79\xdf\xcd\x57\xe7\xb1\xb6\xaa\x2a\xef\x9d\xd6\xd2\x35\x22\x03\x8a\x39\xe4\x20\x69\x56\x19\x40\x5f\x74\xd1\xbf\x77\xb7\x77\x45\x46\x33\x89\xd3\x96\x47\x74\x85\x72\x45\x3a\x26\xef\x37\x3d\x95\xd3\xa5\x2f\xfc\xce\x38\xfa\x0e\x3f\x31\xa5\xf7\xbf\x61\x0a\x91\x36\x31\x52\x4b\x05\x72\x54\x61\xe6\x12\xea\x8a\x2f\xfa\x7c\xda\x14\x26\xe5\x6c\xc6\xf8\x6c\x6c\xc5\x03\x14\x43\xea\x02\xb1\xb5\x2d\xec\x61\x0e\xfb\x46\xc8\x24\x12\x28\xc6\x0f\xa3\xb2\x62\x43\x26\x58\xb3\xf7\x5c\xa4\xb6\xf3\xc9\xd2\x5a\x60\xfd\x9e\xac\x80\x94\xc8\x25\x27\x42\xba\xba\x18\x34\x4d\xc9\xde\x61\x3a\x1b\x56\x04\xfb\xaa\xe7\xd7\x12\x57\xd6\xfe\xf9\x63\x55\xff\xaa\xb1\x40\xaa\x9c\x18\xd9\xb7\x94\xfb\xd6\xba\xee\x2a\xa3\x74\x92\x4f\x42\x65\xd1\x0b\x5e\x6f\xcf\xb7\x4d\x24\x02\x4a\x34\xe4\x85\x90\x54\x2e\x57\xd3\x4d\xcc\x4d\x62\xb6\xaf\x59\xa0\x95\xb9\xbd\x16\xa9\x11\x12\xf6\x26\x63\xc3\xb6\x5d\x30\xa3\x76\x6e\xda\xb9\x1b\xcf\x13\x5e\x6d\x5c\x10\xbf\x66\xa4\x03\x15\x2a\x99\x43\x5a\x22\xfa\xd4\xac\xa4\x92\x72\x0d\x86\x7f\xba\x10\xd6\x65\x2b\x90\xa3\x42\x6a\xa8\x60\xdb\x96\x98\x37\x8a\xc5\x9d\xcd\x27\x58\x57\xba\x4b\xb8\x89\x13\x8e\x4d\x47\x0d\x38\x88\xbb\x39\x10\x23\x49\x66\xa0\x71\xf2\x61\xc1\x12\xed\x07\x99\xe2\x22\x6c\xd8\xfa\x09\x2d\x2d\xd4\xc3\xfe\x01\x40\xd7\xc2\xd5\x51\x4d\xc0\xdc\x49\x5a\xd5\x53\xeb\xb2\x1e\x59\xa7\xb8\x92\x3b\x7f\xb2\x37\x11\x5c\x1f\xcc\x27\x8e\x24\x1a\x45\x3a\x33\x4d\x7c\xbb\x47\x18\x73\xb5\xc6\x1b\x56\x62\xcf\xa1\x02\x0c\x30\xdd\x53\x1e\x3a\xa5\x2a\x84\xd8\x7a\xa8\x9c\x1d\x2c\x09\xe8\x42\xce\xca\x1c\x93\xe6\x9d\x6e\x0b\x5c\xcb\x65\x21\x58\x57\xbf\xbd\x39\x6a\xe8\x66\x3c\x56\xe4\xed\x87\x77\x4d\xc0\xb7\x66\x99\x3e\x0f\x07\xd8\x6d\x90\x1f\xe2\x06\x28\x90\xcb\x29\xa1\x95\xd0\xd7\x89\xa2\xfa\xa2\x76\x36\x1f\xe7\xfa\xad\x08\xf4\x16\x58\xc6\x0b\x23\xc1\xa2\x9c\xde\xa8\xeb\x93\xcc\x29\x9f\x19\x56\xf5\x4e\x94\xe6\xc5\xbe\xfa\x0a\x5f\x42\x42\x5a\x26\x1d\x83\x4b\x11\x30\xda\xa1\x22\x7d\xe5\xc3\xbc\x5c\x01\x31\xa3\x8b\x82\x4a\x68\xe1\xa7\xa6\x39\x7b\x56\xca\x7d\x43\xd8\x18\xc6\xe4\xe8\xab\xc6\x57\x47\x48\x71\x27\x6a\x0a\x29\xcc\xab\x38\x10\x26\x7c\xfb\x8c\x69\xe4\x1f\x47\xcd\x11\xc6\xe4\xbd\xa1\x0b\xa3\xa6\xab\xb5\x6d\xe0\xea\x4c\xea\x95\x3d\x23\x12\x66\x54\xa6\x19\x74\x04\x10\x11\xd3\x4a\xc9\xb0\x40\x95\x6e\x57\x21\x63\x44\x5c\x01\x2e\xf4\x38\x8e\xeb\x7b\x57\x44\x3b\x4d\xd5\xbd\x3a\xb7\xea\xcc\x28\xa5\x9a\x8e\x68\x61\xed\x41\x4c\xf0\x73\x6b\xea\x1e\xb9\x22\xe5\x23\xea\x4e\xef\xa8\xda\xd9\xe7\xbf\x76\xf0\xab\x23\x5a\x3d\xc5\xf8\x88\x8e\xb0\x6c\x77\x67\xfb\xcd\x01\xd2\xee\xa2\x07\xce\x04\x95\x63\x0a\x28\xbb\x1f\x83\x4d\xbf\xaf\xb8\xb2\x5d\x8a\x31\xb9\x12\xda\x57\xd7\x4f\xeb\x44\xc3\x80\xe2\xec\x4d\xc6\xfd\xfe\xea\xee\xe6\xaf\xd7\x1f\x2f\xaf\xee\x06\xfe\x3d\xf0\x6f\x6c\x03\xff\x1e\xf8\x77\x87\x81\xfb\xc2\xbf\x81\x2f\x0e\xc5\xbb\x2b\x7b\xd7\x26\x03\xe3\x4a\xb5\xd7\xc0\x44\xf1\x2f\x28\xd1\xfe\x3d\x5f\xfc\x40\x8d\xea\x58\x48\x50\xa8\xa0\x18\x8d\x75\x53\x90\xb2\x7b\x00\x2d\x81\x75\x4c\xe7\x67\x9b\x69\x7f\xc0\x3c\xf9\x88\x79\xa2\x41\xb1\xf3\x57\x8d\x02\x20\x9b\x96\x3c\x24\xee\xfb\x03\x5d\xda\xfa\x48\xf6\x50\x52\xbe\x24\x85\x64\x5c\xe3\x56\xba\xb8\x7d\x7b\x79\x49\x92\x39\x95\x34\x41\x07\x15\x7c\x4a\xa0\xd0\xe4\xf8\x7f\x1e\x36\x4d\x3e\xb0\x9a\x6a\xbc\x95\xd9\x47\x70\x0b\x18\xa6\x16\xf9\x0a\x09\x0b\x26\x4a\x95\x2d\xab\xb2\xfd\x9b\xf9\xe8\x3a\x9a\x42\x60\x92\xd8\xd2\xbb\x99\x36\x0f\xb8\x22\x74\x6e\x12\x20\x03\x86\x3f\xb0\xe8\xe9\x88\x88\x21\x80\x06\x8c\xbf\x41\x74\xdd\x5d\x0c\x0d\x18\xb7\x93\x00\xbb\x4d\x18\x0d\xa0\xa3\x2d\xc6\x06\x74\xd4\xce\xa2\x39\x3c\x27\xfb\x5a\x8a\x3c\x12\x37\xbb\xb5\x06\x6d\x1f\x5b\xb1\xe9\xa8\x56\x51\x57\x4d\xf1\xc8\xa9\xb4\x75\xed\x14\xa3\x4e\xe7\x85\xee\x98\xf7\x41\x62\xd5\x8d\x8f\x53\x62\xdd\x46\xcd\x7f\xa0\xc5\x77\xb0\xbc\x81\xc0\x2a\x51\xed\xf9\xc6\xf8\x0b\x45\x28\xb9\x87\xa5\x0d\xae\x7c\xeb\x07\x0b\x2b\x94\xd5\xc3\xb2\xfb\xf7\xd0\x0d\x8c\xde\xb7\x78\xf5\xf2\xef\x21\x00\x2a\xc1\xb7\xb5\x62\xea\x66\x09\x51\xff\x30\x6b\xda\xab\xf2\xf1\x61\x92\xa8\x6f\x31\xcb\xd3\xd9\xd6\x94\x4c\xdd\xf5\x10\x61\xe2\x56\xe1\x72\x60\x3a\x85\x44\xfb\x14\x7c\xbb\x9b\xcf\x30\x4b\x33\x2d\x6d\x8d\x4f\x9a\xdc\x3f\x50\x99\x2a\x92\x88\xbc\xa0\x9a\x4d\x58\xc6\xf4\x32\x2c\x3f\xdf\x37\xbc\xe1\x2b\x80\x71\xcb\x14\xc9\x25\x57\x9a\xe2\x55\x28\x9c\x21\xd0\xac\x76\x8d\xf2\x8b\x60\xc0\x96\x9b\x62\x26\x10\x95\xe1\x85\xf9\x0d\x29\xb9\x50\x9a\x24\x20\x8d\x50\x97\x2d\xc9\x83\x14\xbc\x23\xf6\x76\xbb\xed\x59\x5e\x46\x2c\x8c\x2c\x08\x0f\xe7\x2e\x4f\x70\x64\x5e\x7c\x64\x99\x95\x3a\xc7\x2c\x94\xf3\x5f\xe3\x7f\xfa\x74\x8a\x88\xcf\x32\x7c\x43\x8e\x8e\x02\xfb\x12\x3e\x68\x29\xee\xa9\xbc\x75\xc1\x74\x4d\xd1\xa9\xba\x50\x88\x45\x04\x46\x3e\xe5\x71\x10\x9c\x16\x10\x69\x9a\xc3\xe0\x6c\x6c\x6b\x59\xaa\x72\x5a\x84\x19\xaa\xea\x86\xec\x20\xee\xed\x1d\xcc\x03\xeb\xeb\xdf\x32\xab\xaa\x4a\x67\xfa\xc6\xe3\x7b\x28\x92\x83\xa6\x29\xd5\x74\x6c\x0e\xc4\x59\xfb\x4f\x55\xd0\x04\xce\xc8\x3f\xaa\x0f\x33\x3a\x81\x4c\xfd\x78\xfc\x1f\xdf\xbd\xff\xeb\x7f\x1e\xff\xf4\x8f\xe6\x77\x28\xae\xa1\xe1\xb4\xf9\x40\xe0\x2b\x60\xac\x14\x17\x29\x5c\x21\x75\xf8\xa7\xd3\xf4\x2e\x92\x44\x94\x5c\xbb\x2f\x10\xdc\x7d\x3c\x17\x4a\x5f\x5e\x57\x7f\x16\x22\x5d\xfd\x2b\xa0\x84\x1f\xe9\xa7\xdc\x83\x6b\x1b\x00\xf6\x68\x5b\x3c\xe9\x87\x16\xec\x07\x90\x2a\x08\x1f\xd0\xb7\x76\xc6\x86\xed\xd5\x6f\x63\x95\xcc\x21\xa7\xf8\xcf\xaf\xfd\x14\x98\xfb\xb8\x2a\xbf\xc1\x11\x45\xdf\xdc\x81\xed\x9a\xbe\x47\x8b\xd7\x41\x1a\xa7\x6d\x11\x39\x7f\xb5\x82\x91\x27\x0c\x67\xc4\xcd\x96\xe5\x00\x95\xfc\xe8\xad\x14\x75\x18\xe4\xc5\xf5\x25\x59\xd8\x19\xee\xd1\xe4\x3c\x1f\xbb\xce\x20\xba\xba\x15\xcc\xb0\xbf\xae\xa8\x72\xcb\xd4\x50\xdd\x9c\xc2\x8c\x94\x87\x2e\xd0\x8d\xc7\xea\x37\x9d\xbe\xe7\x0b\x33\xae\x6a\x95\x9a\xf4\xf2\x24\x0f\x84\xf5\x21\xfd\xe4\x99\xa1\xba\x22\x96\x45\x0f\x65\xb9\xa6\x13\x0b\x91\x72\xd5\xd5\x8b\xe0\x5b\x9f\x75\xd7\x28\xaa\x9c\x57\x80\x1b\xd0\x3c\xd5\x61\x20\x17\x86\xd9\x2f\x30\x57\xe6\xde\xc7\xae\x16\x12\x16\xc0\x75\x15\x74\xed\xea\x7e\x51\xa9\x59\x1c\x9d\xc4\x51\xa4\x2a\x4b\x77\x1d\xd6\x61\xad\x5c\xf9\x8b\xfb\x2e\xea\xf6\xae\x44\x63\xeb\x45\x56\xcc\xa9\x79\xeb\x59\xa5\x07\x6f\x3c\xed\x36\x7a\xc2\xcc\x9d\x62\xff\x84\x95\xda\x2d\xaf\x7f\xfb\xc7\x06\xa1\x3d\xba\x1b\x9e\x4d\xcd\x89\xb2\x63\x37\xe9\x4a\x58\x8d\x67\xbb\x9a\xe4\x2a\xe1\xd5\xcf\x85\xb3\x29\x7c\x37\x01\xce\x64\xfa\x89\x29\x7d\x66\xcb\x06\xfa\x13\xb4\xa0\xb2\x8a\x12\x2a\x27\x19\x53\xf3\x50\x76\x6f\xdb\xe5\xb4\x5a\x9d\x95\x32\x8a\x15\x4e\x72\x2d\x7b\x98\xb9\x58\xa1\x32\x02\x09\xdb\x4c\xcc\x6d\x94\xc2\xda\x9d\x7f\x8d\x09\x12\x75\x7c\x74\x10\xa6\xde\xe3\xf3\x60\xa1\x63\x5f\x6a\x22\xd6\x30\x14\x25\xe8\x52\x1a\x9e\x95\x5a\x3e\x71\x2d\x52\x97\xd3\x12\x4f\xf8\x8b\xa1\xac\x93\xa6\x51\xa4\x6b\x51\xc5\x66\x2b\xe2\x0b\xd9\xd1\xae\xb7\x1d\xa0\xe7\x2a\xe9\xdd\x33\x89\x28\xc6\x35\xc7\x84\x24\x64\xb6\x1e\x3b\x22\xcd\xba\xd4\x00\x0f\x3d\x6f\x06\x3c\x1e\x8f\x8f\x2d\x95\xc2\x55\x3b\xb5\x16\x45\xf3\x79\xaf\xae\x85\x5a\xa8\x7a\x06\x33\x3c\x6f\x18\x95\xdd\x12\x59\x48\x56\x37\x55\xde\xc5\x1a\x4b\x56\xff\x0c\x94\x29\x9f\xa9\xf2\x75\xaf\x6d\x60\xcd\x7c\x9a\x56\xf0\xc1\x1b\x82\xa0\xb9\xfe\x7b\x27\xfc\xa8\xaa\x58\x3f\x28\x1d\x6a\x28\x3e\xb1\x5d\x8e\x93\xa2\x3c\x73\xdd\x8f\x73\xc8\x85\x5c\x56\x7f\x56\x59\x40\x23\xa5\x85\xa4\x33\x84\x1d\xb7\x83\xdb\x9f\x55\x7f\xd9\x1f\xb6\xc8\x5b\xff\xb5\x8d\xee\x48\x4a\x29\x81\xeb\x6c\x59\xe3\xf9\x7e\x71\xba\x9c\x5f\xb7\x9e\x28\x50\xd5\xb6\x7a\x06\xfe\x73\x5c\xe7\x2d\xa2\xcf\xad\x9a\x45\x74\xa9\xbb\xf2\x40\x67\xb5\xc0\x81\x71\x1f\x56\xc8\x53\xc7\xfd\xe1\x43\x84\xa4\x6c\xc1\x94\x08\x80\x7e\xad\x3a\x5a\x77\x4f\x78\xfc\x3c\x57\x88\xd2\xa6\xa3\x57\x16\x94\x4f\x05\x16\xa5\xae\x0e\xfb\x8a\x69\xf0\x75\xa8\xe7\x05\x65\x0c\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\x2a\x98\x74\xca\x97\x1f\x03\xb9\xb7\x6d\x23\xb7\x59\x18\xd7\x30\x83\xfd\xd3\x53\xb7\xf7\x18\xc9\xd5\xd6\xba\x0a\x19\xd7\x23\x21\x47\xb6\xeb\x37\xa8\xa4\x04\x0e\xe0\xb7\x57\xec\xf3\xef\xf1\x97\xde\xd4\xb7\x59\x25\x14\xf6\xe8\x80\x3f\x97\xa0\xa1\x20\x91\xa0\x5f\x22\x4c\xc6\x8e\xd4\x28\xab\xe7\xa0\xb3\xd0\x23\xf6\xa5\xdd\xa0\xbf\x84\xc8\x19\xef\x34\xb2\xeb\x5a\x6b\x52\x46\xbd\x1a\xd7\x4a\x10\x25\xd6\x8e\xe8\x9e\xbb\x87\x80\x10\x33\xdf\x86\x48\x9b\xce\x6d\x88\xb4\xd9\x42\xca\x10\x69\x13\xd4\x3e\xcb\x48\x9b\x5b\xcb\x93\x7e\x91\x61\x36\xf1\x91\xf5\x3b\x66\xee\xc4\x04\xd5\x07\xbe\xe8\x1a\x5c\x1d\x33\xd5\xcd\x9b\x3d\x10\x8a\xab\x28\x33\xaa\xb7\x64\x51\x44\xca\x7b\xeb\x99\xe7\xec\x2f\x16\xc2\xe6\xde\xa2\xda\x28\x8d\xaf\x99\x97\x99\x66\x45\xc7\x84\x80\x4a\xb5\xb4\xa9\x05\x86\xf9\x53\xa5\x44\x62\x11\x7f\x2a\x90\xbc\x8c\x2a\xed\x5f\x19\x2d\xf3\x9a\xde\x63\x0e\x4d\x02\x29\xf0\x7d\xb1\x98\x7c\xfb\xc1\xa2\x05\xfa\xb9\x9d\x2c\xcd\x3d\xf4\x9e\x2f\xdc\x9d\x44\x52\x0f\x58\x59\xfb\x4a\xa3\x8c\xfb\x65\x65\x33\x9a\x73\xe9\xb2\x15\x1a\x49\x8d\x28\x41\xd6\xa0\x3c\xe8\xcd\x11\xd3\x3a\x04\x12\xd3\x3f\x2c\x9b\xee\x76\xe1\x05\x2b\x07\xe1\xa2\x78\x95\x8d\x10\xa4\x63\xad\xc9\xe0\x75\x98\x68\x5b\xf6\xee\x3c\x42\x8f\x12\x38\xc2\xa5\xf2\xb8\x12\xf9\x73\x48\xe3\x7d\x91\xc4\x7b\x22\x85\x3f\x8f\x04\xde\x4f\xe9\x3b\x9a\xe4\x1d\x47\xea\x8e\x23\x71\xef\x11\xd7\x1e\x53\xca\x8e\x23\x61\x3f\x87\x7d\xad\x90\x30\x65\x9f\xfa\x90\xb6\xec\x11\x57\x89\x86\x4f\x68\xaa\x29\x24\x14\xc0\x2b\x40\x6f\xef\x81\x05\x9a\xcc\x87\x8c\x73\x52\xd9\x45\xe3\x5e\xd8\xb7\x9b\x2c\x65\xc3\x6d\x4d\x86\xdb\x7a\x8f\x36\xdc\xd6\xc3\x6d\xfd\x22\xb7\xb5\xe3\x56\x5f\xfe\x55\x1d\x19\x69\x09\x31\xe4\x0e\x5e\xd2\xd1\x92\x11\x50\x9b\x66\xcf\xa3\x58\xc7\x78\x9e\xe3\xc8\x5d\x4e\x5c\xd0\x39\xc3\x51\xaf\xcb\x2c\xeb\x52\xe7\xc2\xb6\x18\x0b\x70\x89\xd3\x5e\x94\x59\xe6\x6a\x23\x74\x9b\xfd\x8f\x1c\x2f\xb0\x8b\xec\x81\x2e\xd5\x19\xb9\x82\x05\xc8\x33\x72\x39\xbd\x12\xfa\xda\x9a\x4e\xba\xf5\xdb\x44\xc2\xb0\x9d\x13\x36\x25\x6f\x32\xaa\x41\x69\xa2\xe9\x0c\x23\x6a\xeb\xea\x9d\x42\xb6\x06\xad\xeb\x93\x1f\xd0\xa2\x15\xbe\x37\x7f\xed\x01\xe4\x47\x87\xd9\xab\x19\x9b\x42\xb2\x4c\xb2\x70\x36\xf1\xbd\xef\xc9\x47\x9c\x7b\xf1\x00\xe3\x94\x36\x20\x54\x7f\x86\x65\xc0\x0a\xa1\xf4\xad\xa6\x52\x1f\xba\x16\xd8\xb5\x27\xc4\x4c\x76\x42\xb3\x0c\x52\xc2\xf2\x1c\x52\x46\xb5\x11\x04\xe9\x54\x83\x24\xb4\x59\x6f\x56\xd9\x20\xf0\x46\x22\xc2\x9c\xf2\x34\x03\x49\xa6\x94\x65\xaa\x7b\x28\xfa\x4a\x5d\x5b\x85\x89\x99\x8c\x5b\x00\x7c\x0c\x63\xf4\x08\xf3\x34\x49\x84\x4c\x31\x86\x56\x78\x24\x76\x7c\x89\x10\xfe\x64\xda\x47\x14\x15\x72\xca\xe9\x0c\x72\x57\xb5\xbe\x4d\xd6\x24\x13\xc9\xbd\x22\x25\xd7\x2c\xb3\x2f\x2f\xc4\x3d\x0a\xc4\x19\x9e\xd4\xce\x43\x77\x67\x00\xd5\x3f\x47\xd5\x21\x1c\x19\xaa\xd4\xf9\xaf\xeb\xaf\xf0\x83\x8e\xc4\x45\x50\xcb\x62\x28\x65\xf0\x09\x92\x10\x01\xb1\x6d\xbd\xff\x04\x49\x75\x2b\x28\xdc\xe1\x88\xcc\x69\x21\xfe\x11\x83\x37\x92\x23\xcb\xb6\x48\x01\x3d\xb1\x82\x68\x02\xb0\x8f\x9b\x2d\x76\x8c\xc8\x5b\xb7\x08\x4c\xb9\x99\xb7\x7f\x66\x8c\x43\x7b\x61\x94\x2d\x89\x09\xcd\x4a\x09\xe6\xcf\xb5\x9a\xdf\x1e\x46\x2a\x98\x34\x4f\x8b\xa1\x4d\x0a\xa1\xc9\xc9\xf1\xf9\xf1\xe9\xda\x1e\x39\xfe\xff\xd8\x7b\xf7\xe6\x36\x72\x6b\x5f\xf4\xff\xf3\x29\x50\x4e\xea\x48\xda\x21\x25\x7b\x92\x49\x65\x4f\xed\x7b\x53\xda\xb2\xc6\x56\xc5\x96\x79\x25\xcd\xe4\xa4\x26\xb3\x27\x60\x37\x48\xe2\xa8\x1b\xe8\x00\x68\x49\x4c\xcd\x87\xbf\x85\x85\x47\xa3\x49\xca\x36\x01\x48\xa4\x9d\xee\x54\x4d\x2c\x8a\x6a\xbc\x17\xd6\xe3\xb7\x7e\x4b\x02\x9e\x5f\x2e\xa5\x22\xb5\xa9\x52\x51\x74\x83\x92\xb4\x6e\xa0\x06\x3d\x29\x0e\xca\x11\xa2\x2a\x07\xe8\x44\xdf\x91\xa6\x6c\x0e\xcc\x8a\x65\x8c\x1e\x21\xc9\x91\x12\xb8\xa4\xd6\x4f\x06\x9f\xea\x2f\x29\xd1\xda\x2a\x38\x87\x07\xbf\x1e\x8c\x10\x51\xc5\x11\xba\xe7\xec\x40\xc1\xf4\x1d\xa3\x1b\x8e\xda\xe4\x24\x1a\xd4\x75\x64\xc9\x5b\xc4\x08\xb1\x67\xcb\x17\xca\xd2\xd7\x0d\xe2\xad\x49\xf9\x5a\x60\x95\xc2\x74\x1d\x3e\xe7\x0f\x54\x59\x36\x07\x2d\xbf\x5f\xc2\x6e\x32\x57\x16\xc2\x12\x55\xf4\x8e\x9c\x2c\x08\xae\xd4\xc2\xc0\xe3\x19\x67\xe3\x7f\x11\xc1\x81\x17\x9b\xd9\xdf\xa4\x76\x23\x2d\x46\x19\x3e\x09\xf1\xca\xf5\x0e\x65\x41\xc6\x64\xb6\x2e\xdd\xa3\xaf\xbd\x37\x24\x5a\x25\x42\xab\xf2\xe8\xed\xcd\xcd\xe4\x0d\x51\xa1\x94\x67\xf0\x21\x7a\x73\x7e\xe3\x92\x22\x82\x5a\x51\x7b\x20\xde\xf3\xa0\x35\xc7\xa8\xe1\x62\x1f\x6e\x99\x05\x97\x49\xcb\x89\x9e\xe0\x8a\x79\xcb\xa5\x32\xc1\x01\xc5\xb5\xd8\x66\x90\x29\xc7\xfb\x08\x7f\x97\x0f\x7e\x31\x39\x46\x7f\xe3\xad\x9e\x90\x29\x9e\x56\x4b\x74\x8f\x99\xf5\x76\xa7\xc1\x72\xf5\xf3\x42\x77\xe5\x85\xbe\x41\xf4\xce\x7f\x4b\x70\x49\x84\x04\x01\x4d\x70\x72\x76\x6d\xb6\xe3\x1e\xf4\x2d\xeb\x52\x9e\xb5\x52\xf1\x1a\x2d\xec\xb0\xfb\x9c\xd9\xf6\x70\x1e\x9b\xe3\x6a\xf9\x49\x05\x69\x8c\x10\xb7\x7f\xf3\xd5\x89\xe8\x35\xe9\x65\xe6\xdd\x7e\x3e\x35\x6a\x6a\x38\x6d\xd6\x63\x6e\x98\x2f\xad\x6c\xd3\x5b\x35\x1b\x90\x32\x03\x00\x1d\x65\x04\xa1\xa3\x34\x36\xed\xd5\x17\x41\xf4\x20\xf9\x4d\xf9\x70\xed\x28\x1b\x76\x1b\x3d\x09\x7e\x1b\x59\x58\x9e\xdd\x7c\x26\x72\x94\x56\x2a\x7c\xf5\xe5\x41\x85\xe6\x02\x33\xce\x68\x81\x2b\xfa\x2f\x52\xa2\xb6\xe1\xcc\x26\x6b\x81\x66\x5b\x60\x49\xc6\x10\xca\x65\x46\x9c\xcb\x80\x3e\x59\x4b\x07\xc5\x39\xa8\x7b\x80\xc6\xd2\xe2\xde\xf4\x3a\x4f\x57\xb3\xc2\x8c\x93\xb9\xc0\xc3\x67\x2d\x42\xdb\x5b\xac\x3c\x3b\x1e\x7d\x11\xea\x24\xca\x94\xc9\xbf\x4e\x96\xa5\x38\xc2\x45\x01\x04\xd1\xe6\xba\x02\xc1\x2b\x89\xb8\x4b\xdf\x5f\xd9\xe6\x55\xab\x80\xfb\xa6\x7b\x99\x20\xb6\x40\xac\xad\xa7\x44\x74\x4c\x83\x42\xad\xcf\x69\x16\xaf\x8b\x6d\xd6\x34\xe7\xc2\x7e\x4e\xc7\xc0\x6c\x4e\xd0\x2b\xdd\xf2\x1f\xbf\xfd\xf6\xf7\xdf\x66\x68\x47\x0f\xcf\xb5\x82\x19\xba\x38\xbd\x3c\xfd\xe5\xfa\xc7\x33\xe0\x2f\x4f\x7d\x7d\xa6\xac\xcb\xdc\x39\x97\x59\x33\x2e\x9f\x34\xdf\x12\x98\x00\x93\xa5\x6c\xee\x23\x71\x0d\xbd\xd2\x9b\xb0\x95\x86\xf3\xdc\xda\x24\xd6\xbb\x6d\x5c\xcc\x32\x43\x9e\x54\x18\x27\xd3\x02\x6b\x2f\x24\x95\xac\x08\x69\xb2\x59\xfc\xd7\xfa\x6d\xbd\xfa\x32\xa8\x6c\x85\x29\x33\x0e\x1e\xa6\xbe\x2f\xdf\x96\x1a\x87\x3e\x7c\x45\xc6\xbf\x24\x05\x67\x65\x8a\x09\x90\x4b\xa5\xb5\x3d\xc9\x7a\xe6\xae\xcd\x3b\x9d\x8b\xb8\xbb\x4a\x6c\x63\x60\x49\xa6\xae\x28\xf2\xab\x9a\x47\x4e\x1a\x7a\x01\x78\xdb\x1f\xff\x10\x1f\x20\x2b\x9a\x6b\x5e\xdc\x66\x74\x91\x25\x0a\xb0\xd7\xfa\xa4\x15\x26\x16\x78\x73\x36\x31\x9d\xd3\x2b\x73\xf9\xe1\xa6\xe3\x12\xd1\x5a\x38\xee\xc2\xba\x6f\x6d\xb4\x10\xb3\x12\xdd\x92\x26\xcd\xba\xd4\x02\xd3\xe1\xd2\xfa\xb0\x34\xf0\xbd\x0b\x1b\x44\x36\xf9\xba\x46\x10\x38\x38\x99\xd1\x88\xd3\x4a\xca\x04\x71\x6f\x08\x04\x5a\x23\x64\x86\x69\x85\x30\x78\xe5\x15\xad\x89\xa9\x7f\x0d\xce\xfe\x0e\x88\xf0\x15\x09\x9c\xaf\xd5\xdb\x78\xe0\x30\xc6\xdf\x6d\xed\x35\x4c\xa5\x59\xf8\xba\xcd\x00\x2b\xb3\x45\x8f\x26\x6b\x30\x03\x3e\xe7\x19\xcc\x80\x48\x33\xa0\x11\xe4\x5a\xf1\x68\x5d\x33\x1b\xe0\xc6\x74\xe3\x11\xb8\xcd\x94\xcc\xb8\x20\xab\x78\x9b\x00\x07\x63\xa1\xd8\x09\x50\xd3\xd3\xc9\x85\x8f\x7d\xf1\x1e\xd6\xc5\x50\xe1\xca\xb6\x58\xb8\x30\x29\x23\x52\x9e\x00\xb2\xa6\x6d\x8c\x63\x19\xae\xb6\x56\x90\x78\x94\x4f\x23\x08\xa9\x61\x1e\x47\x1d\x3d\x8d\x1e\x2e\x61\xe6\x43\xa2\x0a\x13\x37\x77\xb0\x22\x0b\x03\x73\xd3\x35\x4b\x0a\xe7\x77\x13\x5b\x08\x2c\x17\x04\x92\x31\xc9\x03\x55\xd2\x34\x6a\xe8\x3d\xdd\x8c\x6b\x7d\x61\x2e\x70\x41\x50\x43\x04\xe5\x5a\xc5\x68\x99\x2a\xf9\x3d\x43\x53\x32\xa7\x4c\xba\x15\x4b\xe9\x92\xdb\x12\x80\x24\xa2\xd2\x97\x80\x3e\x46\x57\xbd\x52\x64\x96\xae\xaa\xe0\x9d\xcc\xb4\x53\x34\xca\x34\x25\xa0\xbc\xc0\x36\x68\x71\x55\x2d\xbb\x8d\x17\x32\x4e\x3e\x32\x43\xf1\x1b\xc2\xcc\xec\x61\xcb\x60\xa0\x25\xa9\xf0\xd2\xa4\x24\xcf\x28\x03\xef\xaf\x90\x47\xc7\xe9\xd0\xac\xe8\x0e\x72\x11\xbc\xf3\xd1\x9d\x41\x25\x12\x04\x17\x49\xc4\xb8\x03\x06\xec\x53\xcf\x80\x01\x1b\x30\x60\x03\x06\x6c\xfd\x19\x30\x60\xfd\x67\xc0\x80\x3d\xde\xa1\x7d\x0e\xda\x0d\x18\xb0\xc1\x2b\xb3\xfe\x0c\x18\xb0\xa8\x67\xc0\x80\x7d\xf2\xd9\x3b\x11\x3d\x60\xc0\x3e\xe3\x19\x30\x60\x9f\xf9\x0c\x18\xb0\x01\x03\x36\x60\xc0\x06\x0c\x58\xc2\x33\x60\xc0\xb6\x1f\xde\x10\xfc\x89\x7f\x06\x0c\xd8\x80\x01\xdb\xf2\x19\x30\x60\x2b\xcf\x80\x01\x1b\x30\x60\x1f\x7b\x06\x0c\xd8\x80\x01\xb3\xcf\xe0\x6d\x5c\x7b\x06\x0c\xd8\x86\x67\xc0\x80\x6d\xd7\xce\x60\x06\xa4\xbd\xec\x49\xcc\x00\xa9\x78\x73\x4d\xe7\x09\x44\x83\xb9\x8e\xc1\xb5\xef\x89\x65\x21\x94\xb6\x7a\xab\x34\x1f\x3a\x3f\x16\x30\x94\xe9\x03\x11\xa2\x74\xba\x9b\x64\x4a\xb4\x89\xa0\x87\xd5\xa4\xdc\x26\x17\x33\x08\x20\x07\x24\x69\xfa\x54\x58\xb1\xa6\xdb\x09\xea\x04\xf4\xd5\x67\x77\xbb\x51\xa6\x6d\x97\xf8\x1e\x04\xf3\x51\x60\x66\x4a\x6d\xda\xba\xcb\xfa\x7a\x9f\xf0\x52\xba\xd2\x04\x8c\xb3\xb1\x61\xff\x3c\xd6\x1d\x3e\xe6\xf2\x38\xc1\x1b\x9c\x48\x7a\x66\x30\x72\x13\xc1\xa7\xe9\xc4\x67\xf0\x16\x09\x15\x39\xbf\x52\xda\xb3\x14\xf4\xce\xce\x90\x3b\x7b\x82\x7c\xca\x80\xd6\xc9\x79\x87\xef\x29\x4a\x67\x3f\x11\x3a\xfb\x88\xce\xd9\x05\x32\x67\xe7\xa8\x9c\x3c\xe1\xde\x0c\xa1\xde\x4c\x9a\xd2\x13\x84\x4d\x2c\xc0\xfb\x66\x21\x88\x5c\xf0\x2a\x5a\xe0\xe4\x12\x36\xef\x29\xa3\x75\x5b\x03\xdd\xbe\x96\x29\xf4\xce\x83\xd0\xa5\x13\x19\x16\x9b\x6e\x22\xe1\xc0\xcb\x5f\x12\xa8\x77\x8c\x69\xa5\xb7\x16\x90\x58\x2e\xf0\x1d\x28\x4b\x6d\x51\x10\x52\xa6\xa8\x4b\xa1\x17\xf5\xf7\xc7\xbe\x87\x86\x8c\x9c\x4a\xf4\x2a\xed\xaa\x49\xd3\xc7\x03\x37\xd3\xef\xbf\x89\x7a\xc7\x5c\x34\x79\x6e\xe9\x37\x57\x93\xb3\xde\x2d\x0d\x1f\xbc\x85\x63\x7c\xb6\x20\xc5\xed\x95\x85\x78\xec\xee\x66\x4e\x77\x7f\x24\xb9\x3e\x72\x28\x06\xa9\xd6\x7d\x5f\x07\xd5\x06\x78\x3f\x34\x37\x87\x55\x24\xe2\x8e\x16\xe4\xf8\x19\x0c\xe8\x5c\x46\x69\xfa\x41\x40\xe0\xbe\x86\x81\xef\x8b\xda\x75\x6d\xba\xe3\x3d\xdf\x81\xef\xc4\xf6\x14\xc0\x8c\x15\x2e\xfc\xda\xcc\x37\x1f\xba\xa4\x6e\x1c\x4a\x42\x7c\x8a\xc2\x9c\xaa\x45\x3b\x3d\x2e\x78\x7d\xa2\x45\x87\xf9\xcf\xb4\xe2\xd3\x93\x1a\x4b\x45\xc4\x49\xc9\x0b\x7b\xad\x8f\x0b\xdd\x03\xca\xe6\xc7\x75\x79\x74\xfc\xbf\x92\xfa\x70\x61\x7d\xb8\x36\x3d\xe8\x11\xe3\x75\x4a\xb4\xdc\xe7\x62\xc5\x8a\xd5\x93\x92\xbe\x49\x93\xef\xef\xd4\xea\x09\x89\x70\xd9\x9d\x40\x65\x07\xa9\x8d\x32\x38\xaa\x73\x0a\x95\xfd\x80\xc3\x3e\x19\x14\x36\xcb\x59\xcd\x04\x81\xdd\x23\xf8\xeb\xde\xd8\x42\xfb\x02\x79\xdd\xc3\x9a\xfb\x19\x60\xae\x39\x20\xae\xf9\xe0\xad\xfb\x5a\x9a\xfe\xc9\x20\xad\x5f\x04\x9c\x35\x63\xdc\x26\x13\x8c\xf5\x39\x20\xac\xfb\xeb\x83\x41\x19\x60\xab\xcf\x07\x59\xcd\x32\x8f\x59\xad\xd8\x44\x91\xb0\x03\x88\xea\x73\xc4\xa5\x9f\x2c\x26\x9d\x21\x1e\x9d\x33\x16\x9d\x2d\x0e\xfd\x64\x50\xd4\x74\x18\x6a\x56\x9f\xc2\xb3\xc0\x4f\x73\x42\x4f\x93\xd7\x97\x32\xaa\x28\xae\x5e\x93\x0a\x2f\xaf\xd3\x00\x8a\xb9\x56\xe2\x72\x0d\xc4\x68\xdc\xd6\xfd\x78\xfb\x02\x4b\xe4\xaa\x20\x59\xea\x11\x17\x84\xb6\x2a\x30\xc4\x8f\xcd\xf8\xa2\x8b\x91\xa1\xed\xb9\x28\xee\xb9\xb8\xad\x38\x2e\xe5\x49\xc3\xcd\x7f\x3a\x26\x8a\x80\x82\x22\x49\x4d\xdf\x0f\xf7\xb8\xe1\xfb\xd8\x93\x5d\xf3\x96\xdf\x23\x3e\x53\x84\xa1\x43\xca\xdc\xce\x39\x0a\xbc\x34\x5d\x78\x24\x39\xde\xa1\xdf\xfa\xea\xa5\x6b\xe4\xeb\x8b\x7b\x40\x64\x48\xca\xbd\x8e\x7c\xd9\x3e\x7e\x3a\xf4\x65\xbf\x38\x6b\xab\x7e\xf8\xcb\x84\xc4\xf2\xc4\xbe\x5e\x1d\xa3\xf7\x56\x9d\x78\x05\xfd\xf1\xa2\x08\xb3\x12\x59\xde\xa8\xaf\x6f\x9f\x24\x43\xb0\xfb\xc6\x8d\xc7\x4c\xf7\xf1\x2c\xe6\x06\xd6\x5a\x26\x47\x58\x7f\x0b\x14\xd0\xc1\xe9\xba\x37\x4e\xd7\x1d\x21\x83\xbf\x3e\x6b\xeb\xf9\x91\xc0\x83\xb5\xf5\xef\x62\x6d\x05\x74\x6d\x6f\x04\x2e\xc8\x64\x9f\x94\x37\x27\x40\xba\x04\xb5\x4e\x87\xf3\xe2\x82\x11\x62\x12\x9a\x3a\x32\x3e\xe0\x9d\x9b\xb5\x55\xb5\x34\x3e\xc4\x1e\x33\x63\xfc\xd6\xba\x59\x90\x35\x4a\x3b\x08\xa5\x6e\xe8\x5d\x67\x9b\x34\x82\x5b\x8d\x44\xb4\x8c\x69\x15\xc3\x1e\x27\xdd\x79\x6d\x8b\x48\xc2\xe2\xdd\xe9\xb8\x47\xb8\x67\xc1\xd1\x00\xf4\x5c\x10\xd4\xe5\xd5\xf4\x3b\xa2\x5b\x9d\x71\x51\xd0\x69\xb5\x44\x0b\x5c\x69\x63\xc9\x82\x87\x6f\x69\x55\xd9\xd7\x24\x80\x95\x89\x32\xa1\x67\xa3\xd1\x54\x9c\xcd\x61\x32\xb0\xe9\x08\x79\x68\x48\xa1\xdb\x2c\x2a\x82\x59\xdb\x98\x7e\x6a\xfd\x68\xc9\x5b\xe1\xfa\x99\x84\xd6\x0e\x5a\xa7\x12\x31\x5a\x8d\xdc\x94\xf7\xa9\x19\xd7\xf7\x7c\xe7\x52\x96\xa4\xb4\xac\x8a\xf7\x54\x92\x11\xbc\x33\xba\x4f\xa6\x2f\xfc\x8e\x08\x41\x4b\x62\xf6\x8d\xf9\xac\x11\xfc\x8e\x96\x1d\x76\x5c\x6f\x0b\xc0\x6d\x47\xb7\xf5\x23\xbc\xd7\x89\x56\xc6\xd9\x98\x91\x39\x06\xf5\xd8\x0a\x34\x83\xe8\x34\xed\x1b\xfc\x20\x2b\x69\x81\x15\x91\x80\x95\xef\x51\xae\xde\x51\x1c\xdd\x13\x3d\x9e\x60\x47\xa1\x43\xc6\x11\x87\x8c\xb7\x96\x51\xb5\x84\x88\xde\xa2\x55\xa8\xe4\xf7\xec\x28\xe5\x60\x1a\x98\x03\x46\x53\xa2\x70\x97\xb4\xe6\x54\x32\x89\x08\xc3\xd3\x4a\x9f\x3d\xc0\x90\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\x62\xea\x13\xcd\x5b\xb5\x27\xf7\xc8\x63\xae\x23\x93\x51\x12\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\xbe\x21\x0f\xa5\x03\x5e\x99\x1c\xdf\xd7\x97\xd7\xbf\xbc\x3b\xfd\xef\xf3\x77\x71\x5b\x00\x64\x1d\x0b\x75\xe7\x96\xd1\x7f\xb6\x04\xe1\x9a\xb3\x39\xc2\x55\x98\x02\x33\x02\x47\x67\xf0\x01\x48\xc5\xbc\xc9\x32\x91\x7a\xad\xbe\x04\xa2\x04\xc3\x1a\x1c\xf3\x39\x32\x82\x62\x51\x20\x09\xe8\x8f\x3e\x12\xc6\x8d\x01\xf0\xa7\x3d\xf2\x06\x46\x94\x3e\xe3\xc6\x20\xa4\x0c\x61\x24\x29\x9b\x57\xc9\xb6\x60\xb2\x47\x24\xd5\x1f\x32\xee\x46\x30\x89\x75\x8b\xa4\x3b\x45\x7a\x7d\x88\xb7\x2a\xf3\x39\x04\xba\xcb\xcc\xb9\x00\xc8\x43\xc3\x25\x71\x2e\x00\xa3\xe3\x5e\x4c\x10\x2e\x4b\x91\xa4\x47\x5b\x61\xe3\x6d\x74\x43\x10\x60\x9a\x35\xa1\xdf\x11\x7a\x89\xfe\x0b\x3d\xa0\xff\x02\x87\xc0\x1f\xe3\x9b\xca\x63\x6e\xe7\x40\x34\x2f\xb8\x54\x17\x93\x4c\x0b\xfd\xd7\x05\x56\xf0\x46\xbd\x1e\x8a\xa3\x29\xb5\x96\x19\x79\x50\x44\x68\x8d\xd8\xae\x61\xea\xcc\x25\x39\x17\x74\x07\xbf\x94\xdd\x9d\x1a\x67\xbd\x98\xf5\x81\xd0\xcf\xb4\xbf\xa1\xe1\xb7\x5c\xaa\x4b\x2b\xad\x43\x96\x8b\xb0\x1f\x35\x56\xc5\xa2\x2f\xee\x53\x5a\x7d\xaf\xf7\x5e\x70\xfd\x97\x1c\x2e\x4a\x93\xce\xb6\xa0\x09\xc2\x61\x7f\x4e\x6c\x1a\x64\x2e\xdf\xd6\xfd\xd8\xd6\x5a\x71\x6f\x82\x1a\x66\xf5\xb6\xa0\x72\x44\xc3\xcb\x63\x74\x8e\x8b\x45\x42\x2f\xf4\x6c\x94\x81\x32\xd0\xf0\xd2\x74\x63\x81\xef\xf4\x1e\xb7\xad\x02\x7c\xcf\xa8\xae\x3e\x50\x06\x07\x4e\x4b\xac\x02\x33\x34\x4d\xc1\x8f\x09\x32\x23\x42\x98\x94\xc9\xe9\xd2\x65\x5e\x24\xef\xb6\x24\x29\xd7\x08\xae\x78\xc1\xa3\x99\x0d\x72\x6e\x95\x89\xed\x0b\xcc\x3d\x84\xad\x7c\xa0\xf0\x87\xd7\x93\x11\xba\x39\x9b\x8c\x10\x17\xe8\xfa\x2c\x0d\x07\x12\x5a\xa3\x2f\x6e\xce\x26\x2f\x76\xba\x02\x41\x3a\xc7\xcd\xd9\x24\xe2\x25\xeb\x48\xc2\x1a\x37\xe3\x5b\xb2\x8c\xd4\xee\x72\x68\x98\x63\xbf\xb1\xb2\x0c\xc8\x4c\x73\x8d\x9b\xad\xdf\x26\x08\x2e\xe9\x40\xb6\xf0\xf9\xcf\x40\xb6\x30\x90\x2d\x0c\x64\x0b\x03\xd9\xc2\x40\xb6\xb0\xbf\x40\xff\x81\x6c\xe1\x93\xcf\x40\xb6\xf0\xe8\x33\x90\x2d\x6c\xf5\x0c\x64\x0b\xeb\xcf\x40\xb6\xf0\x91\x67\x20\x5b\xf0\xcf\x40\xb6\x30\x90\x2d\x7c\xb9\x52\x7b\x20\x5b\x58\x7d\x06\xb2\x85\x81\x6c\x61\x20\x5b\x08\x9f\x81\x6c\xe1\x91\x67\x20\x5b\x18\xc8\x16\x06\xb2\x85\x8f\x3f\x03\xd9\x42\xf4\x33\x90\x2d\x6c\xf7\x0c\xe9\x3f\x5b\x3e\x03\xd9\xc2\x40\xb6\xb0\xfa\x0c\x64\x0b\x9f\x7c\xf6\xc3\x3d\x3e\x90\x2d\x0c\x64\x0b\x1f\x7d\x06\xb2\x85\x81\x6c\xe1\xa3\xcf\x40\xb6\x10\xf1\xec\x9d\xd3\x75\x20\x5b\x18\xc8\x16\x3e\xd6\xc6\x60\x6d\x6d\xf7\x0c\x64\x0b\x03\xd9\xc2\xda\x33\x90\x2d\xac\x3f\x03\xd9\xc2\x40\xb6\x30\x90\x2d\x0c\x64\x0b\xfe\x19\xc8\x16\xbe\x76\xbf\x93\x20\x92\xfe\x8b\x4c\x78\x45\x8b\x65\x72\x9e\xc9\x15\x91\xbc\x15\x85\xbe\xb1\xe1\xb5\xa8\x81\xf7\x7a\x8f\x42\x92\x92\xbd\x67\xc9\xfb\x57\xc1\xc4\x85\x49\xfc\xc2\xce\xc1\x53\x4c\xc1\x5e\x24\xf2\xbb\x01\x5e\xc6\x23\x08\xe0\x25\x0a\x0b\x65\xa6\x2f\xce\x59\x9a\x6c\xb5\x87\x03\xd9\x87\x44\xc2\x90\x7b\xc4\xef\x22\xc5\xbd\xb0\xa5\x8f\x6e\x2e\xdc\x34\x15\x4d\x49\xc9\x44\xe8\xba\x05\xed\x82\xd8\x10\xb8\xfc\x0e\x15\x4d\x3b\x42\x35\xa9\xb9\x48\x48\x8c\xc8\x60\xc1\xf5\xb6\xca\x3e\xac\xd3\x95\xe9\x90\x9b\x7c\xc5\x61\xfe\x97\xc6\x5e\xe8\x08\x62\xfc\x5a\x51\x27\x0e\x93\xb0\x66\xeb\x65\xab\xa9\xea\x79\x81\x2e\xb9\xba\xb2\x87\x7b\x67\xeb\x95\x19\xb1\xe0\xa6\x30\x9d\x5b\x26\x72\xc1\xbb\x0b\xed\xb3\x73\x27\xd1\xf9\x86\x4f\x21\xfe\x29\x1b\xfd\x12\x3f\xa6\xa8\x0e\xe1\x4a\x10\x5c\x2e\xa1\x1b\x05\xe0\xf5\x3a\xff\xdf\x17\x98\xb6\x59\x54\x98\xc6\x83\xfc\x72\x1d\xe9\x33\xe8\x05\xd2\xfb\xb5\x03\xbf\x43\x1e\x99\x5f\xac\x91\x87\x78\x53\x73\xc6\x8f\xdd\xaf\xcc\x1f\x8f\x12\x2c\x3d\xac\x60\x77\x81\x11\x03\xa6\x2c\x95\xa1\x9a\x90\x66\xdc\x19\x93\xae\x24\x0d\xd1\xda\xbb\x71\x76\xc6\xeb\xe8\x4b\x86\x6b\x5a\xb8\x53\x71\x6a\x36\x21\xe5\x6c\xc5\x02\xcc\xd1\x65\x6d\x98\xd6\x75\xab\xf0\xb4\x22\xc7\xe8\x42\x6d\x2c\x95\x9f\x96\xb3\x8c\xb2\x60\x55\x13\x71\xaa\x1b\x15\x68\xd8\x54\x86\x79\x81\x30\x2d\x7e\x38\x23\x88\x30\x25\x96\x7a\xff\x4d\x78\x79\xad\xb7\x60\xef\xdb\xc9\x84\x0c\x89\xf0\xd4\x1c\xd0\xd4\x44\x58\x6a\x1e\x30\x69\x3a\x90\x34\x2f\x88\xb4\x73\xf7\x1b\x3e\x99\x30\x3b\xa7\xb7\x2d\xf4\x15\xb0\x41\x34\x21\x3e\x4b\xec\x81\x6e\x71\xc2\x4b\xad\xe0\x08\x62\xe4\x93\x3f\xa3\xc6\xd9\x77\xa1\x3b\x77\x0b\xde\x39\xac\x3a\xcd\x07\xdf\x61\x5a\xe9\x03\x9c\xd8\x01\x9f\xdd\x9c\x29\x4a\x93\x29\xae\x60\x81\xf4\xfb\xb4\x59\x6c\x0a\x56\x2f\x8b\xab\x58\x70\x49\x18\xc8\x4b\xec\xb3\x6d\x7c\x2e\x80\x15\x31\xa5\xb9\x8b\x53\x11\xbf\x17\x33\x44\xea\x46\x2d\x47\x88\xdc\x11\xb1\x54\x0b\x40\x06\x08\x6e\xd0\x22\xd0\x84\xee\x5b\x8d\xcb\x60\x77\x8c\x10\x77\xce\xe2\xc4\xe6\xe1\x7e\xb0\xf6\x53\x5b\x29\x63\x4d\x81\xfe\x9d\x94\x0e\x6a\x9e\x0c\xbb\x26\x37\xe9\x09\x4a\x15\x9a\x39\x49\x4b\xf4\x53\xd1\x9a\xc6\x51\x41\xa2\x8c\x67\xe1\x1d\xf4\x22\x48\xf3\xd0\x5b\xa2\xc6\x0f\xe0\x4a\xc4\x35\x6f\x19\x6c\x8d\x82\xd7\x4d\xab\x02\x95\xdc\x69\xf7\xcf\xe6\x63\x2c\x38\x9b\xd1\xb9\x8d\x82\x9d\xd4\x98\xe1\x39\x19\xfb\xee\x8c\x3b\xf5\xe6\x64\x77\xe8\x0c\x5c\x3a\x1a\x89\x49\x8e\x9c\x62\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\x8d\x8f\x14\xa6\x86\xc5\xf3\x05\xc5\x33\x85\xc4\x9f\x24\x20\x6e\x65\xec\xce\x0f\xbf\xbd\x02\xd7\x8e\xbf\x8d\x24\x7c\xec\xf8\x8b\x64\xff\xc9\xc5\xac\x6b\x9f\x4a\xc4\x6b\xaa\x94\xf5\x16\xe0\x90\xa7\x66\xc5\x77\x63\x05\x16\x9d\x19\x05\x8a\xca\x90\x2f\xa5\x73\xf9\x44\x77\xcb\xdf\xaf\xe0\xad\x62\x88\xd6\x4d\x45\x6a\xc2\x14\x08\x9e\xb1\xb3\x6d\xc1\xf5\x77\xdc\x8d\xa0\xc0\x8c\x71\x85\xc8\x43\x41\x48\x69\x3b\x39\xc8\xc6\xe0\x19\x64\xe3\x20\x1b\x3f\xf5\x24\xfb\xaf\x33\x39\x32\x43\x9f\xf5\x5a\x34\x4a\xcb\x05\x73\xc4\x9c\xfa\x0c\x5f\xf7\x1c\x07\x7c\x86\x48\x2c\x97\x65\xd7\x88\xa5\xc7\xc4\xb1\xde\x4a\x04\xf9\xe1\x56\x2a\x49\x87\x95\x31\xb6\x28\x67\xfb\xc1\x85\xde\x5b\xee\xab\xb6\xda\xa5\xf3\x3a\x60\x16\xd7\xba\x3d\x78\x34\x75\x8f\x1c\xa8\x7b\x41\x8a\x5b\xe3\x42\x2e\x89\x01\x59\x10\x73\x07\xc5\x69\x00\x01\x4d\xfe\x82\xb7\x55\xa9\xdb\xb0\xd3\x41\xcc\x02\x3d\x50\x75\xfc\xd1\x35\x8c\x6a\xf7\x2b\xa5\x87\xb7\x67\x56\xef\xa1\x40\x97\x59\xf0\xfb\x50\x95\x80\x39\xd5\x0a\xc3\x02\xb3\x32\x1a\x7f\xbf\x07\x61\x65\x0c\x98\xf4\x1d\x85\x82\x4d\xe3\xfb\x10\x5c\xbc\xf6\x50\x7d\x2d\x87\xb1\x05\xea\xe3\x5b\xc2\xf4\x01\x5a\x5f\xf8\x99\xa7\x74\xa0\x02\x34\xba\x14\xa6\x02\x00\x55\x62\x45\xa5\xd6\x36\x0d\xd4\x0d\x3c\x2a\x0d\x97\x92\x4e\x2b\xd2\xc1\x70\x5e\xd8\xcd\xf9\x42\x0b\x0f\x77\x5b\xa4\x51\x2c\x66\xf0\xed\x65\x50\x00\xf4\xac\x9e\xf1\x32\x45\x8d\x5b\xf1\xe8\x7b\x21\x6c\x10\x9c\x50\xc2\xa3\x34\x32\x18\x04\xb0\x5e\xd7\xfe\xaa\x7e\x1d\xae\x7c\x7d\x26\xb1\xe2\xf1\x2a\x5d\x1e\x77\xbe\xeb\xc6\x7e\x79\x69\x7b\x9b\x42\x90\x0a\x8c\x1c\xb9\xa0\x0d\x9a\x12\x75\x4f\xc8\x4a\x52\x42\xb7\x6f\x0e\xe5\x91\x43\x29\x27\x76\xa2\x43\x2a\x18\xc4\xc7\x31\x9a\xf4\x8e\x39\xc4\xbc\xd3\x89\x46\x2e\xd8\x77\xab\x22\x0a\x98\x50\x9d\x98\x71\x22\x6c\xc3\x58\x21\x06\x98\x16\xb1\xf4\x83\x25\xa0\xfd\xac\x8d\x39\x79\x78\x97\x5c\xa5\x8d\x30\x79\x68\x5a\x8f\xb2\xde\xfc\x27\x19\x65\xa6\x60\x89\x85\x15\xed\xd1\x29\xec\x5f\xb5\x76\xee\xec\xd6\xf7\xc2\xb9\x17\x65\x0e\xc4\x77\xea\xce\x39\x55\xa8\xe6\x52\xa1\x6f\xbe\xfd\x16\x11\xe3\x8b\x31\x20\x93\x64\x17\x34\xca\xc6\xc0\x94\x85\x83\x29\x1f\xed\x22\xca\x46\xbd\x88\x3e\x12\xf9\x88\x23\x1b\xcb\x0c\x7c\x92\xa4\x68\x05\x55\x4b\x6d\x0b\x90\x87\xa8\x08\x63\x8e\xb3\xd2\xe5\x21\x5e\xf7\x3b\x64\xd1\x30\xee\xe4\x98\xdf\x21\xde\x18\x6a\xe9\x47\x8b\xa7\x75\x56\x61\xcb\xc0\x19\x10\xb7\xcb\x2f\x66\x7a\x95\x4c\x62\x0a\x18\x8e\x80\xd5\x59\xed\xa2\x4b\x19\x31\xdd\xf9\x67\x4b\xef\x70\xa5\x45\x73\xf7\x17\x13\x48\x22\x08\xff\xe8\x0b\x84\x50\x81\xbc\x98\x08\x7a\x47\x2b\x32\x27\xe7\xb2\xc0\x46\x99\xd8\xb5\x1b\xfe\xf4\x91\x7e\xc1\x7e\x10\xbc\x92\xe8\x7e\x41\xd4\x82\x08\x84\x5d\xe2\x12\x40\x7c\xe6\x98\x32\x54\x73\x91\x02\x03\xb1\x8d\x4a\x93\x39\x45\x95\x44\x0d\x16\x7a\xed\x5d\x86\x94\x01\x1a\x4d\x39\xaf\x2c\x4b\x7c\xb5\xec\xfa\x45\xe3\xf1\x12\x10\x73\xe7\xbf\x30\x72\xff\x8b\xee\x85\x44\xb3\x0a\xcf\x7d\x62\x14\x5c\x31\xab\x9a\x5d\x72\xd2\xd6\xa3\x13\x0d\x14\xe8\xad\xbe\x51\xee\xf1\x52\x76\xe9\x6c\x5d\xdb\x34\x41\xb6\xbf\x3a\x82\x53\x8c\x25\xf2\x6d\x97\xd1\x2f\xfb\xe6\x08\xf8\x47\xce\x4e\x27\xbf\x5c\xff\xed\xfa\x97\xd3\xd7\xef\x2f\x2e\xa3\x5f\x76\xc9\x15\x31\x71\x94\xc0\xb5\x64\x1d\x4e\x76\x15\x3c\x54\xf7\x98\xcb\x63\x00\x49\x00\x97\x1a\x2b\xf9\x7d\x22\x92\x4c\xef\x29\x82\xe3\xfc\x18\xb8\x69\x4e\x45\xcd\xc5\x44\xf0\x19\xad\xa2\x75\xef\x5c\x27\x78\xa5\x3b\x0e\x53\x72\x6a\x3f\xee\xc4\xbd\xa1\xf7\x59\x87\x2e\x06\x82\x9a\x02\x89\x8c\x7e\x4d\x7c\x0c\xab\x97\x02\x68\x12\x12\x57\xba\x18\x7f\x88\x76\xba\x67\x76\x4e\x9e\xa0\xbb\x11\xf9\xe7\x39\x8c\xf4\x8a\x17\xb8\x82\xc2\x75\x69\x1b\x1f\x65\x36\x11\x56\xfb\x15\x24\x7b\x62\xb7\x9d\x51\xc5\x71\x69\xbc\xdb\x46\xf8\x97\xc4\x15\xb5\x70\xca\x0e\x40\xe4\x92\x3a\x72\x63\x12\xed\xa0\x3d\x97\x9d\xda\x08\xe2\x22\xa4\xab\xcd\x73\x53\xcb\x23\xa9\xc9\xf7\x7d\xc0\xa1\x1d\x65\x8f\x47\x21\xf5\xcc\xf9\x66\xec\x01\xa3\x33\xf0\x6c\x80\xc7\x51\x9b\xcc\xcb\xc6\xb8\x1a\xdf\xb9\x65\x48\xa8\x78\x95\xc9\x8c\x85\x97\xec\xc9\xee\x34\xf3\xe3\x77\xa4\xc9\x12\xba\xa5\x7a\x06\x67\x9d\x90\x76\xdb\xc6\xe9\x20\x26\x55\x28\x71\x3f\xfe\x08\xb5\x15\x9d\xfc\xcf\xe0\x26\xf2\x4b\x8c\xc6\xc1\xd1\x6a\x04\x19\xaf\x1f\xaf\x54\xcb\xfb\xaa\x65\x8a\xd6\xc4\x51\x4f\x8d\x57\x74\x22\x61\x7e\x7d\x20\x3d\xd1\x7b\x96\x8d\x8e\xd0\x0f\x0c\xce\x2b\x23\x25\x1a\x23\xc6\xbb\x25\x22\x6c\xc6\x45\x01\x2e\x80\x9d\x6e\xf0\x02\x37\x78\x4a\x2b\x9a\x22\xcc\x73\x6d\x70\xa8\x9b\x14\xf4\x07\x70\x2b\x65\x79\x52\x0a\xde\x98\x9b\xd8\x71\x42\xa4\xa7\x00\xf4\x73\x8f\x43\x8a\x7f\xeb\x13\xea\x75\x64\x2e\x30\x53\x1d\xe9\xc0\xda\xc6\xf9\x77\xd4\x41\x72\x28\x01\xb8\xcc\x57\x81\xec\xb4\xd4\x32\x23\x5c\xb6\xe4\x73\xb5\x6f\x6c\xe6\x67\x6e\x70\x41\xf2\x31\x9a\x7c\xb8\xbe\xf8\x3f\x2b\xe7\x26\x5e\xb5\x33\xcf\x7e\x73\x19\x6b\x79\x90\x6d\xdb\x5c\x91\x9a\xdf\x0d\x1b\xe7\xab\xdf\x38\xde\x41\xb4\x73\x22\xc6\xab\x36\x8c\xfd\x52\x16\x74\x0d\xd5\x49\xba\xce\xc4\x73\x16\xf5\xdf\x1a\xe4\xa4\x62\x41\x90\xfe\x0a\x53\x14\x57\xd5\x32\xf4\x91\x2a\x6e\x6a\x1c\x66\x29\xd4\x1d\xde\xae\x33\x5c\xc9\x2f\xf5\x8a\x4c\x71\xed\x34\x82\x17\xef\x79\xcb\xf2\x30\x3b\x26\xec\x38\xdf\x11\x54\x12\xc6\x95\xf5\xa6\x80\x2d\xc1\x67\xf0\x5b\x64\x00\xd2\x01\x69\x73\x4f\xcf\x49\x50\xb3\x6e\x02\xd5\xca\x23\x49\x9c\x1e\x6e\xec\x97\x56\x12\xb9\x59\xaf\xea\xf0\xd2\xb3\x04\x4c\x81\x20\xb8\x34\x90\x16\xac\x16\x86\x4d\xb4\xc6\xf2\x96\x94\xe6\x83\x44\x26\x25\xcf\x9a\x04\x19\x73\x6e\xa6\x6f\xf4\xe4\xba\x04\x59\x70\x08\x1b\xf8\x1d\x50\x2b\xa5\x98\x62\x3b\x3d\x0d\x09\x82\x5d\x2f\xc2\x07\x56\x2d\xaf\x38\x57\xdf\xfb\x62\xa9\xbb\x3e\x19\x7f\xb5\xe1\x88\xbe\x13\x13\xfc\xd2\x18\xba\x3c\x86\x8d\x03\x72\x31\x28\xf1\x9a\x2a\x16\xf5\x82\xfc\xbb\x4a\x45\xd1\xb2\x53\xf9\x46\xf0\x36\x5a\x87\xcb\x69\x6f\xbe\xb9\x78\x0d\x17\x5f\x6b\xc9\xf6\x98\x12\xcb\x86\x53\xa6\x9c\xc7\x2b\x63\xd0\xe6\x07\x4b\x6b\x18\x4a\xb6\x64\x06\x33\x84\xde\xe3\x25\xc2\x95\xe4\xde\xa5\xc6\x36\x05\x39\x5d\x04\x55\xff\x7a\xca\xd5\x62\x2d\x74\x8a\x59\x7c\x28\x67\xbd\xbd\x51\xc0\xd9\xd7\x41\x53\x28\x5b\x6b\x56\x41\x0a\x71\x23\x48\x41\x4a\xc2\x8a\x2f\xf5\x44\xec\x9a\x42\x0e\x4e\xd5\x25\x67\x5a\xbc\xee\xfa\x5c\x5d\x78\xff\xa4\x5d\x8d\xf0\x14\x81\x2b\xdb\x06\x11\x31\xd0\x2d\x82\x70\x6d\x65\x0a\x06\xf4\x62\x06\x51\x4f\xb3\xe9\xfe\xd2\x4e\x49\xa5\x17\x9b\x56\x95\xde\x81\xb4\xc4\xca\x00\x02\x68\x8d\xe7\x04\x61\xe5\x0f\xa1\xe2\x88\x30\xd9\x0a\xbb\x6f\x68\x3c\x7c\xb2\xe4\x44\xfa\xc2\xdc\x58\xa2\x1f\x2e\x5e\xa3\x97\xe8\x50\x8f\xcd\x60\xf7\x66\x98\x56\xc0\xe0\xe8\x50\xb3\xa1\x0d\x30\x83\xdc\x30\x9e\x82\x30\xba\xb0\x72\x04\x71\x61\xae\x96\x11\x62\x1c\xc9\xb6\x58\xb8\x39\xa0\x9c\x79\x8f\xb0\xa5\xf3\x4f\xca\x7a\x1d\xc4\x4e\xbe\xfb\xf0\x07\x49\xa2\xc1\xaa\x39\xaf\xc3\x1f\x9e\xf1\x3a\x0c\x4d\x44\x7d\xfc\xfb\x0b\x66\xce\x6a\x4d\x14\x2e\xb1\xc2\xf6\x9a\x74\x5f\x18\x76\xed\x70\x59\x26\x5c\x96\x92\xbc\xa3\xac\x7d\x30\x48\xb7\xbd\x08\x7b\x5c\x9f\x43\x8f\xe0\x78\xc1\x42\xf3\x20\x6e\xe7\x22\x14\x19\x92\x25\x2e\x7a\xc7\x68\xf4\x88\xd5\x0d\xb7\x84\x63\x1b\xd3\x86\x10\x66\x25\xaf\xd7\x3a\x09\x74\x68\xb1\x09\x82\xa8\x97\xfd\x31\x1c\x4c\xf7\xfc\x7b\x07\x84\x2a\x72\x47\xaa\x6c\xbe\xfd\x77\xfa\x6d\x7a\x72\xdc\xce\x85\xd7\xa3\x0a\x4f\x49\x65\x39\xd8\x0c\x89\x66\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\x5e\xf7\xe8\x73\x51\x91\xfd\x2f\xe3\x24\xb8\xb3\x2d\x83\x80\x95\xb9\x07\x5d\x2d\x84\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\x9e\x15\x83\x7b\xbe\x07\x89\xfc\x1a\xc0\x98\xda\x08\x80\x79\x25\xac\xa4\x6c\x0e\x01\xab\x91\xcd\x1d\xbd\x23\x4e\x3c\xdf\x1a\x8f\xd7\x01\x48\x1c\xd7\x21\x27\x6e\x3a\xcc\xaa\xa1\x6d\xcd\x8a\xdd\xdc\x84\xd7\x34\xdf\xb9\xfc\x70\x13\x92\xb6\x62\xb6\x34\x84\x44\xf0\x27\x3b\xbf\x4e\xbf\x18\x4c\xe7\xea\x2a\x3e\x35\xa4\x33\xe9\x7d\x9b\x11\x9d\xcf\x77\x4a\x3f\x0f\xe5\xb9\x8a\xf1\xcc\xda\x85\x55\xc0\xe7\x7a\x1b\x19\x56\x2e\xf9\x08\xd8\xab\x73\x8f\x1c\x20\x7f\x35\x3d\x72\x56\x76\xa1\x05\x87\xa2\x6c\x2e\x43\x27\x08\xae\x52\xd9\x5e\xcc\xb3\xc9\x0b\xe2\x4e\x81\xe7\x2d\x5d\xf7\x06\xf4\x8b\x5d\xa5\xb4\xfe\x09\x0f\xc6\x97\xed\x89\xa8\xb4\x45\xf1\x85\xfb\x21\xe6\xb5\xc4\x67\x42\xcf\xa0\xa2\xb8\xba\x6e\x48\xb1\x2f\xb7\xc5\x9b\xf7\xd7\xa7\xfd\x9e\x81\x2e\x6c\x59\x9a\x09\xfc\x1e\xe1\xb2\xa6\x52\x42\xc0\x87\x4c\x17\x9c\xdf\x26\x35\x79\xe8\x98\xfb\xe6\x54\x2d\xda\xe9\x71\xc1\xeb\x80\xc4\x6f\x2c\xe9\x5c\x9e\x58\x89\x32\xd6\x13\x77\x84\x28\xab\x7c\xa6\x30\x78\x0b\x99\x92\x36\x82\x90\x3c\x78\x54\xf8\xd1\xc3\xd6\x83\xfc\x14\x0f\xcd\x5e\x9f\x1e\xa0\xd2\x86\xcd\xbb\x73\xad\x63\x7d\x57\xa5\x95\xa1\x59\xd9\x59\x8f\x8c\x3d\xa4\x85\xb6\x51\x9c\x8d\xf3\x68\x8c\xd7\x9d\x4f\x92\x55\xfa\x0b\x22\x93\x10\xb0\x39\xcf\xdc\xdb\xae\x4b\x1d\x69\x1a\x30\x77\xe2\x47\x33\xdd\x21\xbc\x7d\x00\xa5\x7c\xed\x9f\x1e\xe4\x62\x32\x3f\xad\x2a\xbd\x90\x58\x5f\x13\x07\x32\x44\x77\x82\x69\xb2\xc0\x77\x46\x14\x48\xbd\xe2\x64\x36\x23\x05\x18\x0b\xe1\x28\xe0\x22\x49\x13\x0a\x86\x81\x2c\x2c\x8f\xa2\xb8\x69\x1b\xa3\x9a\x3e\xe8\x1e\x86\x2d\x86\x18\x54\x56\x42\xe0\x7f\xf3\xaf\x13\x2a\x1b\x22\x00\x1f\x78\x82\xce\x91\x5e\xa1\xb0\x11\x97\x1c\xad\xf4\xb5\xa5\x7f\x71\x49\x94\x36\xd4\xcc\xbc\x85\xd1\x07\x6d\x58\x89\x36\xc3\x61\x48\x89\x0c\xa3\x30\x3a\x9c\x55\x52\x24\x9e\x07\x88\x14\xdb\x3e\x69\x1d\xc4\x29\x6f\xcf\x15\x39\x46\x1b\xd2\x77\x9e\x2d\x82\x8c\x3e\x3f\x8a\xfc\x84\xb1\x2a\xb4\x2f\xf1\xaa\x44\xa9\x6f\xcb\xfa\x43\xa1\xd1\x64\xc6\x13\x78\xcb\x16\x65\x9b\x22\xda\xdb\x31\xf1\x07\x79\x88\xd7\x44\x7b\x53\x75\xfe\x40\x0a\xbf\x45\x24\xdc\x63\x75\x0d\x1c\x63\x1c\x1a\x69\x95\x2f\x64\x9e\x7c\x6b\xed\x89\x4e\x6f\x47\xb8\x2f\x42\xf4\xcc\x4e\x38\x75\x6a\xb2\xf9\x51\x2b\xce\xfd\x45\x90\xce\xdb\x1e\x50\x89\xeb\x1f\xf5\xcd\x45\xd9\xdc\x92\x99\x70\xe1\x19\x7e\x93\xba\xe5\xfa\x01\x15\xec\x38\x57\xe8\xf0\xe0\xe4\xe0\x68\x6d\x2f\x1c\xc8\x10\x0f\x6d\x52\x37\xbb\x01\x49\x5a\x37\xd5\x12\xc6\x70\x60\x8a\xd6\x25\x72\x9e\x39\x64\x9d\x2f\x0a\x23\x17\xa4\xaa\x46\x48\xea\x7b\x1a\x3b\x3e\x6e\xf3\xa9\xfe\x92\x12\x6d\x61\xec\xf9\xc3\x83\x5f\x0f\x46\x88\xa8\xe2\x08\xdd\x73\x76\xa0\x8c\x67\x16\xdd\x80\xb2\x9b\xd4\x27\xdf\x89\x25\x6f\xa1\xae\xba\x59\x36\x4f\xe1\x5e\x60\xad\xa7\xb5\x46\x99\x30\xec\x00\xa4\x4a\xa8\x13\xae\x9f\xf3\x07\xaa\xb4\xcc\x54\x2d\xd8\x53\x2f\x8d\x4a\x43\xa0\x28\x1c\xd6\xa6\xf7\x1d\x39\x59\x10\x5c\xa9\xc5\xd2\xab\x59\xa6\x64\xb5\x44\x2d\xb3\xbf\x49\x17\xf6\x7b\x90\xdf\xb6\xbf\x99\x66\xb6\x72\xfe\xcd\x42\x10\xb9\xe0\xd5\xce\xf3\xcd\x5c\x39\xe5\x82\x33\xa9\x65\x8a\xb6\x05\x6c\x1f\xa5\x4f\xf5\xb1\x25\x9d\x0d\x45\x34\x87\x53\x26\x88\x41\xad\xea\xad\x05\x05\xa0\x17\xf8\x4e\xcb\x1b\xd9\x16\x05\x21\x65\x8a\x0e\x15\x2a\x6f\xbf\xcf\x59\xf0\x79\xf7\xb5\x95\xf5\x33\x17\x4d\x9e\x5b\xfa\xcd\xd5\xe4\xac\x77\x4b\xc3\x07\x6f\xe1\x18\x9f\x2d\x48\x71\x7b\x95\x56\xe3\x68\x4f\x62\xa0\x0d\x17\xbb\x54\x0c\x74\xf3\xd9\xb4\x82\x09\x17\x0a\x31\x5f\x42\x5d\x9f\xad\x39\xac\x22\x11\x77\xb4\x20\xc7\xae\xbc\xba\x8b\x22\xba\x9a\x5c\x98\xcd\x09\x7a\xa5\x0f\xc4\x1f\xbf\xfd\xf6\xf7\xdf\xa6\xcb\xe8\x74\xee\xc5\x3c\xbc\x8b\x76\xe0\xfb\xa2\x76\x5d\x9b\xee\x6c\xf2\x8a\xd9\x9e\xea\x35\x68\x2a\x5c\xf8\xb5\x99\x6f\x3e\x74\x69\xee\x13\x49\x08\xda\xe0\x57\xd5\xa2\xc3\xfc\x67\x5a\xf1\xe9\x49\x8d\xa5\x22\xe2\xa4\xe4\x85\xbd\xd6\xc7\xc0\x50\x4a\xd9\xfc\xb8\x2e\x8f\x12\x8a\x6e\x22\x9b\x35\xb1\xa0\xd2\xb9\x71\x56\x02\x22\x2e\x4a\xe6\xcb\x41\x50\xe9\x43\x79\xd3\x25\x4c\xca\xce\x7d\x85\xc8\xf5\xf2\x3b\xf4\xe2\x45\xd4\x5b\xf4\x12\xbc\x21\x79\x52\x66\xde\xde\xdc\x4c\xde\x10\x15\x0a\x6c\x06\x1f\xa2\x37\xe7\x37\xbe\x08\x9f\xde\x5d\x26\xfb\x62\x90\xda\x29\x52\x7b\xc1\xd3\xaa\x30\xe6\x76\x10\x1b\x51\xa2\xb8\x56\x9f\x18\x29\xf4\x42\x8f\x7a\xf5\x9e\x1c\x60\xea\x62\x62\xca\x61\x68\x95\x0b\x4f\xab\x25\xba\xc7\x26\xf5\x3a\x8e\x85\xb6\x7b\x5e\xe8\x6e\xbc\xd0\x52\x4b\xef\xea\xb7\x04\x97\x44\x48\xb0\x86\x08\xde\x7d\xf0\x23\xe8\x53\xb6\x65\x3b\x6b\xa5\xe2\x35\x5a\xd8\xa1\x9a\x39\xec\xca\x5c\x1a\xdd\xc8\x1c\x41\x70\x06\x49\x24\x48\x63\xac\x25\xfb\x37\x5f\x85\x2d\xb4\x26\x85\xcc\x3c\x07\x05\x44\x30\x2a\xc2\xa9\xb2\x8a\x3e\x54\x9f\xa6\x56\x46\x81\x05\x90\x66\xa5\x67\x29\x44\x80\x32\x15\x23\x40\xe9\xb5\x85\xdd\x4b\xd2\xa3\x25\x79\xca\x1a\xa0\x2c\x95\x8a\x51\x76\x52\x75\x64\x63\x02\x76\x73\x19\xa4\x80\xee\x68\x2a\x7d\x1a\x72\x24\x0b\x0e\x79\x51\x60\xc6\x19\x2d\x70\x45\xff\x45\x4a\xd4\x36\x9c\x21\xde\xaa\xa6\x55\xe0\x0a\x2a\xb0\x24\xe3\x3b\x2c\xa8\x16\xa8\xa6\x9e\xbb\x87\x6c\x30\x7d\xda\x15\xe7\xe0\x27\xf1\xd1\x31\xd3\xe3\xf4\x6e\x66\xd2\x66\x90\xe3\xcc\xcf\xbc\xc2\x6b\x8b\x93\xbe\xa3\xd1\x5e\xfb\x60\x90\xa9\xac\xb7\xc8\x67\xd6\x61\xb5\x00\x08\x52\x01\x91\x44\x8b\x60\x03\xc1\xa9\xcd\x86\x3d\xc8\x10\xc8\x6a\xc5\x26\x8a\x04\x08\x0c\x72\xb1\x62\x07\xeb\x1e\xae\xcf\x61\xa6\xa0\xf8\xd3\x9b\xd5\x61\x55\xf6\x29\xd1\xba\xfd\xc5\xe9\xe5\xe9\x2f\xd7\x3f\x9e\xfd\x72\x79\xfa\xfe\x3c\xe5\xd5\xc9\x15\x15\x73\xd6\x54\xcc\x56\x55\xf1\x89\x6a\xce\xea\x47\x16\x0b\xb2\x3f\xf1\xf0\x6b\xe8\x4d\xc8\x9e\x64\x6d\x00\xca\xe6\x4e\xf3\x4f\xa3\xd3\x42\x2b\x4e\x53\x2d\x78\x76\x2a\x71\x28\xa3\x8a\xe2\xea\x35\xa9\xf0\xf2\x9a\x14\x9c\x95\x3b\x87\x91\x5e\x7a\x61\x23\x4d\x87\xac\xdb\xba\x0f\x3e\x58\x60\x89\x5c\x75\xc2\x29\x99\x71\x41\x20\x6a\xc2\xb4\x44\x6a\xba\xf8\xb1\x19\x9f\x7a\xc6\xb2\xe0\xf7\x5c\xdc\x56\x1c\x97\xf2\xa4\xe1\xe6\x3f\xe3\x8a\xce\x48\xb1\x2c\x2a\xf2\x1b\xdf\xff\x71\x92\x9a\xbe\x1f\xee\xf1\x86\x08\x0a\xd0\x85\x7d\xd8\x35\x6f\xf9\x3d\xe2\x33\x45\x18\x3a\xa4\xcc\xed\x9c\xa3\xc0\x4b\xd3\x85\x47\xd2\x69\x9f\x14\x47\xaf\x5e\xba\x46\xbe\xbe\xb8\x07\x44\x86\xa4\xdc\xeb\xc8\x97\xed\xe3\xa7\x43\x5f\xf6\x8b\xb3\xb6\xea\x87\xbf\x4c\x48\x2c\x4f\xec\xeb\xd5\xb1\x4f\xa8\x79\x05\xfd\xf1\xa2\x08\xb3\xd2\x61\x63\xbe\xbe\x7d\xa2\x8a\xe6\x9a\x17\xb7\x99\xdc\xae\x37\x67\x13\xf3\xb6\x15\x3c\x8b\xb9\x81\xb5\x96\xc9\x11\xd6\xdf\x02\x05\x74\x70\xba\xee\x8d\xd3\xf5\xa0\x2b\x35\xb5\xad\x03\xf5\x60\xb0\xb6\xba\xc7\x29\x3e\xa2\x5f\xaa\x61\xb0\xb6\x1e\x79\x06\x6b\x6b\x8b\xc7\xa0\xdd\x21\x73\xf4\x8d\xc0\x05\x99\xec\x93\xf2\xe6\x04\x08\x2a\x5b\x61\xeb\x5f\x79\x1d\xce\x8b\x0b\x46\x48\x69\xe4\x87\x1d\x0a\x41\x73\x3d\x92\x59\x5b\x55\x4b\xe3\x43\x34\x2a\x80\x05\xc5\xa4\x71\xdd\xc2\xab\xad\x8a\xeb\x82\xcc\x9b\x7a\xd7\xd9\x26\x8d\x67\x6d\x76\xe5\x0d\xec\x71\xd2\x9d\x87\xea\xcc\x84\xc5\xbb\xd3\x71\xb8\x82\x48\xd2\xb9\x9e\x2e\x5b\x4c\x16\x19\xb6\x1f\x57\x23\xac\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\xed\x4a\xc0\x1b\x8d\xa6\xe2\x6c\x0e\x93\x81\x2d\x78\xfc\xa1\x21\x85\x6e\xb3\xa8\x08\x66\x6d\x63\xfa\xa9\xf5\xa3\x25\x6f\x33\xe0\xc7\x5d\xe0\xdb\xeb\x53\x8c\x5a\x9e\x04\x53\x61\xea\xa3\x7b\xbe\x9f\x05\x88\x3e\xa8\x05\x11\xf7\x54\x12\x53\xf1\x2a\xba\x4f\xa6\x2f\xfd\x7a\x57\xe6\x33\xcf\xf5\x60\x53\x9c\xf4\xb6\x80\x9c\xbb\xe8\xb6\x7e\x84\xf7\x3a\xd1\xca\x38\x1b\x33\x32\x37\x19\xe5\x56\xa0\x19\x44\xa7\x69\xdf\xe0\x07\x7d\x7e\xb2\x54\xbc\x41\xb4\xae\x49\xa9\xed\xe3\x6a\x89\xee\x28\x8e\xee\x09\x64\xaf\x77\x3b\x0a\x1d\x32\x8e\x78\xa3\xaf\xae\x96\x51\xb5\x84\x88\xde\xa2\x55\xa8\xe4\xf7\x2c\x21\x31\xe4\xc6\xc2\x1c\x30\x9a\x12\x85\xad\x0f\x5c\x1f\x02\x4f\xde\x0c\xbc\xcc\xfa\xec\x01\x86\xfc\x66\xe3\x06\xf0\x7c\xce\x73\xac\x12\xa4\xc4\x06\x6d\xde\xac\xe7\xc7\xb7\x1d\x95\x36\x5e\x97\x48\x18\xbb\x1f\x14\x6c\xfa\x44\xf3\x56\xed\xc9\x3d\xf2\x98\xeb\xc8\xe4\xe2\x07\x46\x22\xad\x89\x44\xbc\xcd\x44\x8c\xff\xca\x36\x97\xd3\xc2\x1b\xfc\x4e\x1b\x1f\xa9\x4a\x1a\x55\x1e\x35\xc7\x16\x7b\x84\x65\xdc\x26\x0c\x06\x44\x7b\xd3\x76\x36\x23\x02\x6e\x3a\xe8\xf0\x1a\xec\xde\x17\x1c\x72\x77\x58\x9c\xf3\xd6\x02\xbe\x88\x1a\x01\xc9\xb9\xcd\x7a\x7f\xa4\x49\xcb\x06\x08\xf5\x44\x05\x91\x40\x5a\xcd\xd0\xf9\x87\xef\xe3\xb6\x68\x0e\x0a\xf4\xb4\xdc\x3a\x18\xe7\x07\x16\x87\x49\xcc\xbb\x1f\x36\xd1\x53\xd8\x6d\x51\x54\x5c\xda\x3c\x4e\x58\x97\x62\x81\x19\x23\xce\x19\x45\x15\x78\xb2\xa7\x84\x30\xc4\x1b\x62\x40\x79\x51\x9d\xc1\x48\x52\x36\xaf\x08\xc2\x4a\xe1\x62\x71\xac\x7b\xc7\xdc\x5e\xe8\x12\x26\xed\x27\x52\x09\x82\x6b\xb3\x27\x04\xa9\x31\x35\xcd\x23\x5c\x08\x2e\x25\xaa\xdb\x4a\xd1\xc6\xbf\x2c\xce\x8b\x48\x20\x75\x5d\x9a\xfc\x39\xb7\x56\x90\x56\xd2\x65\x66\x8e\xba\x1e\xda\xe1\xf3\xb0\xaa\x0a\xb8\xce\x46\xfa\xb7\xa4\x6e\xd4\x12\xe9\xa9\xad\xa2\x73\x63\x66\x54\x48\x85\x8a\x8a\x12\xa6\xec\xc8\x0c\x37\x1a\xf4\x61\xe4\xd4\x69\x66\x67\x44\xda\x29\x61\x25\x18\xdf\x8d\x92\x08\x32\x10\x7d\x27\xdc\xab\x4a\x2a\xad\xaf\x43\x8e\xe2\xd6\xce\x95\xd0\x30\x1b\xc7\xcd\x08\x6c\x1d\xa7\xe0\x98\x1e\xd9\x8f\x82\x2e\x04\x05\x81\xf5\xb1\x36\x21\x91\x34\xb9\x02\x75\x2e\xdc\xb9\x1e\xf5\x92\xa3\x3b\xdb\x02\x52\x61\xd6\xa4\x0e\x6c\x28\x46\xee\xf4\x39\x20\x05\xd1\xaa\x28\xce\x28\x64\x9e\x5d\xc6\x28\x2c\xe6\x44\x9d\xb9\xf1\xc7\x66\xef\xe6\x90\x36\x61\xe5\xf4\xd0\x41\xd4\x2d\x0e\xac\xc3\x84\x97\xc0\x26\xd1\x31\x7e\x6c\x2a\xe7\x6e\xc6\x15\x69\x7b\xdd\x3c\x52\x23\xde\x59\x54\x26\xc3\xcb\x77\x54\x36\xb8\x20\x12\x1d\x5e\x4c\xce\x46\x68\x72\xf1\xda\xa6\x71\xf1\xd9\x2a\xbb\x5e\xec\xb4\xd8\x4b\xd0\x9c\xdd\xc7\x0a\xd8\xfb\xea\x34\x41\x97\x02\x9a\x2d\xdb\xdf\x89\x37\xca\xa2\x67\x66\xfd\x26\x00\x0b\x8d\xd6\x4d\x05\x75\x22\x91\x6c\xc1\x32\xb2\x81\x0b\xbd\xb5\x8d\x3d\x62\x0f\x2d\xe9\x08\x8e\x2c\x19\x7d\x64\x10\xc7\xb4\xe2\x87\x6b\xd7\x1c\x62\xd9\x6e\xa2\xac\x1e\x00\x0a\xb3\xb2\xbf\xf2\x1c\x31\x90\x6b\x66\xa1\xe2\xf1\xb7\x7b\xa4\x3b\x2c\x30\xa2\xde\x13\x29\xf1\x9c\x4c\x22\x71\x40\x39\xce\x5e\xe7\xe1\x06\x00\x51\x27\xaf\x17\xc4\x50\x61\x29\x1e\x7c\x12\x66\x57\x86\x5e\x9b\xda\x0c\x24\xaa\x07\xee\x6c\xdd\x0b\xaa\x14\x81\xeb\x01\x6a\x3d\xc1\xd6\x5d\xa5\xf7\xec\x67\x75\x46\xb5\x67\x27\x3d\x6c\x4f\xeb\xfd\xac\x34\xf9\x91\x53\x82\xa6\x82\x92\x19\x9a\x51\x48\xd8\x84\x54\xc6\x91\xa9\x53\x80\x01\x30\x8f\xa5\x24\x02\x86\x6d\xfd\x71\x6e\xf8\x71\xfd\xf9\xab\x1d\xbf\x12\x2d\x2b\x70\x50\xc4\x13\xd8\xc7\xe8\x0c\xcd\x21\x7d\xd2\x7a\x9f\xfe\xf0\xf2\x3f\xff\x88\xa6\x4b\x6d\x28\xc1\x99\x54\x5c\xe1\xca\x75\x00\x55\x84\xcd\xf5\x2a\x82\xae\x13\x77\x61\xf7\x18\xac\xfc\xe2\x54\xb4\xa6\xca\x4c\xd0\xab\x6f\x6e\xa7\x49\x77\x1e\x28\x26\x27\x25\xb9\x3b\x09\xb6\xd0\xb8\xe2\xf3\xb8\xb7\x9e\x79\xc2\xa7\xb6\x29\x63\x01\x11\xb9\x4f\x34\xaf\x68\xb1\xdc\xd9\x7d\x6a\x5d\x61\x68\xc1\xef\x8d\x17\x75\xfd\xa8\x06\x64\x30\x0d\x6f\xda\x0a\x26\x0e\x7d\xef\x19\xfc\x5a\x49\x56\xc9\x91\x52\xbd\xf3\x81\xb4\x03\xf4\x82\x6d\x76\xe5\xaa\xb7\xb9\xc3\xae\x9b\xdc\x52\x53\xd8\x60\xb7\xaf\x54\x12\xed\x06\xff\x1e\x57\xd5\x14\x17\xb7\x37\xfc\x1d\x9f\xcb\x0f\xec\x5c\x08\x2e\xfa\x63\xae\xb0\x56\xa6\x17\x2d\xbb\x85\x3a\xbb\x1d\x5d\x2d\x9f\x5b\x30\x2f\x30\x4b\xf6\x27\x36\xaa\x33\x6e\x94\x86\x40\xd4\xd9\x02\xce\xf9\xdd\xb5\x4c\x1e\x68\xe7\xe1\x66\x88\xe8\x3e\xc7\x6b\x38\xe1\x38\x64\x78\xb4\xbf\x79\xf9\x87\x3f\x19\xe1\x82\xb8\x40\x7f\x7a\x09\xb9\xfe\x72\x64\x2e\x00\x50\x7d\xb5\x8d\x53\xe3\xaa\x8a\xd5\x69\x42\x11\xf0\x7d\x74\xf9\xea\x3d\x38\xf2\x6a\x67\xa7\xfb\xb3\x7d\x35\x37\x37\x7f\x03\x4d\x8c\x2a\x49\xaa\xd9\xc8\xf0\xc1\x78\x7f\xf2\x01\x98\x35\x07\xf6\xca\x8b\xe7\x12\xda\xbd\xb7\xe4\x8e\x57\x6d\x4d\x5e\x93\x3b\x5a\xc4\x21\x07\x7a\xab\xd2\x7b\x9b\x8b\x8f\x55\x54\x82\x2e\x39\xad\x78\x71\x8b\x4a\xfb\xcb\x20\x47\x65\xb5\xee\x76\xfc\x2c\xc4\x66\xeb\x24\x64\xe9\x3c\x3a\xfe\x5e\x7e\x4e\x8d\x9b\x46\xeb\xd1\x40\xec\x25\xf0\x7d\x6f\x32\x40\x34\x01\x7f\x6a\xa2\xd1\x93\x8c\x62\x49\xc5\xb0\x8c\xed\x88\xf4\x35\x15\xfd\x8a\xe8\xa4\x9e\x74\x08\x4c\xd7\xfb\x78\x00\x41\x6f\x43\x74\x2f\x74\xa7\xa1\x81\x7f\x1b\xa2\x93\x35\x53\xdd\x57\x54\xf3\x1b\xc3\x68\x90\x7a\xfb\xc0\x2d\x13\x1f\x37\xc8\x80\x42\x48\x4b\x4e\xea\xcd\x0b\xf3\xe8\x8f\x1a\x2b\x6b\x1f\x39\xef\x05\x46\x0d\x11\x92\x4a\xad\x3a\xfd\x08\x07\xea\xac\xc2\xb4\x0e\xe2\xe6\xbb\x9a\x84\xf5\x54\x96\x1a\x37\xe3\x5b\xb2\x8c\xdc\x70\x89\xc7\xe5\xb1\xcc\x9a\x1a\x37\x91\xf7\x00\x14\xb7\x4d\xbf\x06\x22\x2f\xe7\x09\x2f\x6d\x3f\xe0\x7a\x30\x45\x8b\x3f\x65\xc6\xa2\xeb\x76\x0a\x67\x0a\xbe\xfe\xb4\xf4\x60\x59\x95\xa7\x5d\xdf\x55\x3f\x76\x2b\xde\xbf\xaa\xf4\x27\xfe\xae\x32\xdf\xfa\x9a\x6e\x28\x18\xdf\x97\x7a\x41\xf9\xce\x67\x92\xc3\x49\xd8\x44\xb8\xd6\xec\xce\xe8\xdf\x63\x3d\x4f\x98\x39\xd2\x81\xcd\x6c\x3d\x54\xc7\xa6\xde\x40\x42\x07\xf4\x51\xb4\x8d\xa2\x83\xef\x0e\x76\x7a\x39\x9a\x95\x11\xbc\xc1\x73\x30\x69\xf7\x61\x81\x56\xfb\x14\xd2\xdb\x2e\xf8\x7d\x28\x32\x1b\xfb\x2d\x2d\x31\x1d\x47\xfa\x82\x27\xad\x8e\xc1\xfa\xba\x1d\x61\xcd\x72\x53\x25\xe2\x1e\x2f\x11\x16\xbc\x65\x49\xc4\x05\x10\xca\xf4\xa1\xee\xf7\x2b\x83\xbd\xe4\x8c\x38\x58\x4d\x4a\x2b\x37\x3d\xd7\x37\x20\x8c\x28\x43\xaf\x8e\x5f\xbd\x4c\xee\xfb\x15\x29\x5a\x21\xe9\x1d\xb9\xb2\xe5\xd3\x83\x30\xe8\xc5\x6c\xc2\xa5\xa4\xd3\x0a\x52\x2d\x15\x47\xe7\xa6\xb6\xfc\xfa\x40\x3d\xd4\x0b\x46\xcc\x45\x48\x84\x9a\xd0\xc3\x43\x73\x82\x43\x88\xb6\x6e\x20\x01\xa7\xb5\x5f\x2a\x28\xac\xeb\x8a\x0a\x7a\xe9\x55\x50\x73\xef\xed\x74\xac\xae\xa6\xfe\x3e\x48\x92\xf7\x36\xa8\xd0\x15\xcd\xa7\xae\x28\x33\x7c\x74\x2f\xa8\xb2\x87\xfb\x9e\x4a\x82\x0e\xc1\x9d\xb1\xb2\x19\x93\xb8\x9f\x43\xe7\x57\x62\x71\xfd\x1c\xdc\xcd\x62\xf5\xe8\xee\xc3\x2a\xad\xcb\x93\x2e\x67\xe6\xde\x7a\xbe\xba\x15\xb4\xd2\xbf\xbb\x97\x17\x98\x95\x55\x92\xcc\xf0\xb3\x52\x2d\x93\xd8\xab\x2e\x66\x28\x14\x89\x16\x71\x10\x04\x21\x17\x58\x22\xc6\x51\x4d\x30\x40\xaa\xf5\xed\xe2\xa4\x60\x8f\x06\x3a\x5f\x1f\xcc\x66\x37\xd7\x58\x78\x21\x58\x71\xfd\x9a\x4a\x2b\x9e\xb5\x1c\xb1\xa6\x8b\x01\x62\xd5\xb8\x4c\x21\x63\x08\xe6\xb4\x5b\xbc\xe3\x0e\xe6\xbc\xda\x93\xee\xe2\x58\xe9\xcb\x53\xf4\x63\x64\xab\x9b\xeb\xe6\x4d\x64\x79\x83\x3f\xaf\x83\xb5\x25\xe1\x4f\xcc\xb3\x3a\x5c\x7f\x2d\xae\x8d\x75\x73\x8f\x7d\x87\x13\xfa\xf0\xe9\xa1\x8e\x02\x59\xe8\x50\xdd\x06\x04\x63\xcb\xab\xd8\x1c\xe5\x34\x92\x70\x17\xcd\xf0\x7e\xa2\x39\x61\x44\x60\x1b\x90\x70\xa0\x6e\x1b\xd2\xc7\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\x43\x2d\x9b\x34\x96\x9c\xa3\x5e\x21\xd3\x33\x9b\x3f\x60\xe9\xd5\x8b\xf2\xcf\x96\xde\xe1\x8a\x18\x7a\x7c\x27\x1a\x76\xaa\x4c\xc8\x76\xba\xaf\x66\xa3\xb5\x0f\xc1\xec\xd8\x8c\x96\x78\xd4\x82\xcc\xa4\x4f\xbc\x78\x81\x0e\x4d\x1b\x07\x86\x16\x7b\xb7\x4a\xae\x5d\xab\xf3\x87\x26\xa1\x28\x6c\xbe\xf5\x3a\x7f\x68\x30\x00\x3c\x9a\xbd\x58\xb8\xff\x26\x0b\x7c\x47\x80\x85\x9c\x56\x58\x54\x90\x46\x72\x6d\xa6\x0c\x4d\x5b\x85\x08\xbb\xa3\x82\x33\x00\x55\x01\x5d\x94\x96\x4c\x82\xcc\x88\x20\xac\x20\x12\xfd\xf6\xf0\xc7\xd3\x2b\x48\x33\x3c\x02\xd3\x97\xb8\xf1\xb5\xd2\xa2\xa0\x7a\x63\x08\x5e\xb7\x8f\xfb\x0d\xb9\xb1\xeb\xed\x02\xfa\x89\x9b\x0b\x3d\xb6\xba\x55\x2d\xae\x80\xac\xbd\xa8\x5a\x7d\x17\xee\x6c\x67\xe7\x77\x9e\xa7\x78\xf2\x72\xfa\xce\x2d\x55\xff\x6b\x1a\x75\x5c\x73\x1c\xd4\xb3\x60\xbf\xae\x15\x0e\x48\x03\x50\xf6\x69\x63\xd7\x14\x9d\x03\xe9\xa9\x64\xc3\xcc\x39\x7b\x17\xc7\xe1\x3a\xe8\x7c\xa1\x2c\x5d\xc3\x0a\x0e\x33\x80\x35\xd7\xd1\x98\xb1\xdd\x02\x20\xf2\x1d\x83\x08\x47\x74\x9e\x5d\xbf\xe0\x52\x9d\x56\x14\xcb\x6d\xfd\xd8\x69\x5b\xfd\x6d\xd7\x2c\x64\xfb\x31\x5b\xd5\x11\x57\x1e\x62\xa0\x7b\x66\x60\x4e\x17\x13\x8b\x45\x77\xbb\x92\xb2\xff\x6b\xb2\x4e\x7d\x40\xc9\x64\x83\xc2\x9f\x6c\xd9\x13\x83\x38\x9a\xa1\xc8\x7a\x43\xb1\xf1\x9f\xa8\xc8\x4f\xaa\x78\xf1\xb3\x8e\x16\xbc\xb2\x79\xd7\x0e\xcd\x30\x25\xea\x9e\x10\x86\x2e\x26\x30\xe7\x7a\x2a\x0d\x2f\xe3\xe6\x99\xb7\xca\x31\x53\x62\x69\x0f\xf4\xd6\xbd\x09\xd6\x0c\x56\x61\xdb\xa3\x9b\x10\x7f\x8a\x8f\x3c\x8d\x11\xdd\xf6\x52\x49\x89\x14\xf9\x65\x48\xbe\x8d\xde\xfa\x05\x75\x6c\x3a\x78\xca\xef\x08\xac\x77\x59\x8a\xc8\x2c\xed\x9d\x85\x3f\xb3\x2b\x30\x49\x44\x96\xb4\x49\x5e\x9f\x6e\x1d\x1c\x94\x04\xca\x33\x83\x78\x82\x63\xf6\xec\xd0\xbe\x78\xca\xf6\x9c\xf7\xe2\x96\xc7\x2d\xdf\xad\x78\x31\x39\x7b\xce\x1b\xf1\x07\xeb\x5d\xd2\x4d\x1f\x48\x44\x9b\xa2\xcb\xeb\xd8\x76\xe9\xbb\x5c\x86\x80\xce\x2c\xc2\xd1\x1e\xeb\x5c\x5f\x74\x05\x1b\x9f\x5b\xa9\x40\xcc\xb4\xab\xaf\x34\x4b\x2b\x6e\x81\x23\xe0\xf9\x69\x78\x79\xbc\x3a\xd5\xf6\x2f\xe2\xa7\x1b\xe2\x7f\xc6\xe0\x0c\x4b\x55\x2e\x79\xeb\xac\x65\xa3\x5c\x2c\x81\xe9\x47\x42\x29\xac\x05\x01\x66\xcc\xb2\xad\x0c\x98\x18\xdf\xe3\xed\x81\xdc\xd0\xf0\x3f\x82\xd9\xfe\x47\xe7\xdd\xee\x8a\x0a\xc2\x17\x26\x5c\xa8\x7f\x18\xc7\x97\xd4\x17\x36\x24\x0e\x41\xe6\x0f\x35\xd5\xb7\x82\xe8\xd9\x3f\xbc\x6a\x0e\x7f\xb5\x6d\xc2\xa3\x56\x1f\x02\x57\xde\x67\xb6\xaf\x2d\x5c\x2b\x6f\x8c\xcb\x73\x63\x5f\xb6\x9d\xa1\xdd\xed\xff\xc9\xc5\xeb\x1d\x8a\x8f\x86\x96\x5f\xb6\xf8\xf8\x41\x6e\x5d\x7d\x20\xeb\x04\x42\x91\xd2\xbc\x33\x18\x03\x2d\xb7\x75\x49\xed\x5f\x03\x71\x18\x57\xa8\x11\x44\x12\xa6\x46\xfd\x70\x44\x3f\x2d\x13\xb4\x87\xfe\x28\x46\xfa\xe7\x59\x5b\x6d\x6b\x21\x71\x11\x30\x0f\x79\x9a\x26\xec\x49\x56\x20\x14\x83\xef\x30\xad\xc0\x3d\x17\xd0\xe8\xae\x75\xc0\x66\x8f\x6d\xd9\x83\x8a\xe3\x12\x42\x83\xe8\x56\x5f\xed\x15\xaa\xb9\x16\x9c\x26\x0d\xe4\xec\x74\xf2\xcb\xf5\xdf\xae\x7f\x79\xff\xe1\xf5\x0f\xef\xb6\x66\x1b\x33\x29\xf4\xa4\xdb\xe2\x23\x84\x11\x23\xf7\xd0\x73\x06\xc6\x69\x61\xe3\x01\x9e\x85\x52\xdf\x21\xd7\x36\x99\xd2\xc4\xc6\x0d\x34\x65\xd6\x56\xfa\x4b\x5b\xf6\xa0\xa6\x8a\xce\x31\xbc\xac\x73\x89\x4c\x05\xc1\xb7\xbc\x55\xe8\xae\xad\x18\x11\x78\x4a\x2b\xaa\x2d\x08\x44\xee\x08\x33\x78\x48\xfd\x07\xba\x93\x61\x31\x5f\xba\x6d\xe3\x61\xad\x67\x5b\x45\x52\x4f\xaa\x6e\x19\x17\xd6\xdd\x68\xd9\x34\xe1\x97\x8d\xa0\x77\xb4\x22\x73\xe2\x69\xea\x62\xd8\x92\xfb\x30\x1c\x5c\x35\x0b\x3c\xae\xc8\x1d\x31\x74\x57\x54\x9a\x1d\xb5\xe0\x8c\x0b\x13\x97\x33\xc4\xed\xd6\x16\x05\x02\x20\x73\x58\x5d\x69\x63\x93\xec\x7b\xed\xb2\x6e\x6d\xb2\xed\xb3\x09\xab\xed\x91\x2c\x69\xb2\xea\xda\x23\x01\xdc\x0a\x84\xd9\xe2\x93\xad\x41\xd5\x9b\xfd\x83\x9d\x7d\x0e\x6f\x77\x32\xc6\x1e\x16\x8c\x0c\x68\x77\xec\x2a\x4d\x01\x21\x4e\xcc\x9c\x6f\x6d\x9e\xb8\x2e\x7d\xb0\x14\x5c\xcf\xad\x63\x86\x6d\xf7\x4b\x48\xb9\x9a\xa2\x9e\x1d\x2c\x14\x1a\xe1\x64\x62\x89\x1a\x22\x80\x3d\x21\x64\x0b\x4b\x38\x48\xbc\x0f\x11\xd9\xd4\x26\x2b\x7d\xbe\x39\xc2\x50\x6c\x1e\x51\x25\xd1\xeb\xcb\x6b\x24\x48\xc1\x45\xb9\xb5\x0b\xe0\xaf\xe6\x5a\xd8\x10\x48\xc6\x40\x56\x66\xd2\xf8\x2c\xb3\xe1\xd6\xa6\xdf\xc5\x7a\xf5\x6b\x98\xd8\x8e\x71\x4d\xba\x2a\x42\xff\x70\xa3\xfc\x07\x0c\xf3\x1f\xb2\x9d\x96\xbc\xc6\x94\x6d\xad\x31\x8e\x21\x33\x70\xf2\xd1\xbd\xdf\x51\xd2\x6d\xff\xf6\x7f\x48\xa2\xdc\x26\x3a\x95\xdf\xff\x7f\xaf\x2f\xff\xd1\xf1\xbb\xd1\x4a\x5f\xf1\xe1\x75\x14\xd1\x40\xcf\x1e\xe8\x07\xea\xdd\x3b\xe3\xb7\x99\x67\xf9\xd4\xe3\xa7\x25\x6c\x1e\x3f\xd9\x7a\x5b\x3b\x71\x40\x19\xba\xfa\xfe\x0c\xbd\x7a\xf5\xcd\xef\x61\x49\x1c\xb6\x17\x2b\x54\x6b\xcd\xe0\x8f\x7f\x40\xc5\x02\x0b\x5c\xa8\x08\x00\xff\x95\x4b\xde\x83\xd2\x1e\xab\x47\x32\x24\x7f\xb3\xb9\x69\xe6\xce\x88\xf2\xed\x6e\x2d\x9e\x20\x9c\x31\x69\xab\xea\x9a\x14\x82\x6c\x9b\x82\x91\x26\x9e\x2e\x56\xda\x7e\xcc\xb9\x1e\x84\x50\xa1\x14\x97\xfd\x32\xeb\xea\xed\x04\xa4\x12\x5d\xb1\x84\xa6\xad\x2a\x83\xd1\x5a\xba\xdb\x06\x46\x2b\x83\xe4\x3f\x2a\x1d\x41\x49\x8c\xb2\xdb\xbb\x82\x24\xf1\x5d\x73\x27\xb0\xc1\x52\x76\x90\x98\x3b\x5a\xb6\xb8\x82\x6e\x41\x1c\xc9\xf2\x6f\x60\x63\x52\x5a\xd9\x5b\xdb\x11\x6c\xdb\x9d\x2d\xd9\xd9\x3a\x55\xea\xc4\xcc\xc9\x6f\xac\xd5\x4f\xd9\x7c\x0c\x9f\xe8\x6e\xda\xf1\x8c\x39\x1b\xe3\xf1\xb6\xe9\x4f\x5f\x54\xb0\xe1\x1d\x2f\x70\xf5\x01\xbc\xf3\x57\x6e\xb7\x39\x29\x20\x11\x61\xbc\x9d\x2f\x60\x7a\x45\x8d\x1d\xf9\x77\x45\x14\xb8\x4d\x6c\xea\x6e\x4c\x54\xc1\xef\xec\xd2\x86\x06\xc2\xba\xec\xfd\x9d\xfd\x8c\x01\x87\x94\x18\x40\x2c\x4e\x3a\x47\x30\xfa\x32\xd0\x2b\xed\xcc\x46\x22\x27\xfa\x3a\x3f\x01\xf5\xc3\xc1\xf9\x4c\x30\x66\x04\x88\x8f\xb2\x35\x32\x1b\x17\xb7\xf7\x58\x94\x12\x15\xbc\x6e\xb0\xa2\x60\x01\x2d\x63\xb1\x7e\x2e\x83\xcc\xde\x06\x5a\x2d\x39\x46\x17\x4c\x2a\x0c\x32\xd0\x11\x15\xe9\x15\xee\xc8\x05\x40\x79\x31\x3c\x8f\x0b\x22\x08\xc2\x22\x0e\x73\x89\x2b\xb8\xf1\x0a\x22\xf4\xde\xaf\x96\xe8\x5e\x70\x16\x49\xf2\xb1\xa5\x50\xd2\xea\xd2\x1d\x25\xf7\x27\xd6\x27\x3a\xd6\x83\x1b\x9b\x2d\x2c\x4f\xe0\x24\x9c\xfc\x06\xfe\xef\xcb\x89\x2e\xac\x38\xf9\x6b\xdc\xc4\x07\x6f\xbe\x82\x08\x3e\x65\xb4\x63\x2f\x7b\x56\x65\xe3\x9d\x55\x26\x6c\x85\x21\xfa\x2f\x23\xc7\x03\x9f\xc2\x94\x54\x9c\xcd\x83\xda\x4a\x11\x36\xce\x05\xa3\xaa\xe7\xa7\x00\x98\x17\x29\x5a\x03\x00\x40\x5c\x94\xc0\x5a\x47\x4d\x6a\x4d\xaf\x75\x28\x82\x1f\xf0\xe5\x61\xb6\x6d\x98\x92\xf6\x5a\x07\xc6\x15\xd9\xf9\xdd\x0c\xf1\x84\xab\x43\xa2\x38\x5a\x60\x5b\xb2\xdf\x92\xfa\x51\xe9\x90\xf8\x08\x17\xda\xc4\xda\xfe\xa8\x68\x55\x47\x79\xe2\x3f\x43\xa8\x63\x28\x8f\xc0\x34\xd1\x4a\x0e\x66\xab\xfd\x04\x47\xa1\xa8\x7b\xf4\x68\x56\x75\xdf\xb2\xf9\x96\xd1\x7f\xb6\x04\xe1\x9a\x6b\xbd\xaf\x4a\x49\xbb\x5d\x5d\xc9\x1a\x2f\xc1\x16\x85\x49\x7b\xe7\x98\x6c\x11\x86\x5a\x20\x72\x04\x90\x7d\x1a\x94\x7b\x1a\xa1\x77\xfd\xfa\x4f\x23\x3d\xce\x6b\x53\x7b\xc5\x7e\xb4\xbd\x05\x0d\x14\x69\xbc\x15\x05\xb1\x56\x45\x6d\x69\x7e\x36\x4c\xab\xde\x7b\xda\x24\x65\x06\x79\xa2\x97\x14\x52\x6e\x5b\x01\x3b\xcd\x04\x74\xb6\x5f\xe2\xe9\x12\xcd\xb4\x3a\x6b\x11\x8b\x0b\x3a\x5f\x10\xa9\x5c\xfc\xea\x04\x88\x69\x4c\xf2\x33\x2e\x16\xbe\xbb\x20\x7f\x03\x4a\xcb\x0e\xf2\x58\xe3\x87\xed\x69\x8a\xc0\xb7\x66\xb9\xcd\x8d\x89\x2d\xdb\xda\xdd\xfd\xab\x9b\x49\x1e\xa3\x77\xba\x57\xe6\x38\xe2\xa6\xa9\xa8\xd3\xca\x7b\x6b\xbc\xf5\x69\x03\x92\x53\x00\x83\xa2\x19\x96\x0b\xca\x59\xea\x2e\x2b\x0c\x44\xac\x68\x85\x56\x5e\xaa\x25\x58\xaf\x65\xa9\xf5\x43\x81\x04\xa9\xf9\xdd\xf6\xa8\xb1\x64\xd8\x59\x1a\xf3\xb3\x9e\xe4\x71\x60\x6f\x7c\x21\x46\xc4\xa9\xe7\xaf\xd5\xfb\xa5\x58\xb9\x2d\xcc\x06\xd4\xda\xbf\xab\xb2\x2d\x5a\xd6\x25\xab\x47\xdc\x1c\x3b\x02\x08\x45\xa4\x94\xa7\x98\x07\x58\xcc\x77\xc6\xf2\x70\x2a\xe6\xad\x11\x97\xf6\x7e\x07\xa4\x4a\xc3\x69\xbc\x95\xb0\x06\x0c\x3d\x90\xe8\xec\xfd\xeb\x90\x54\x5f\xd9\x1a\x01\x26\x14\x66\x4a\x2e\xc4\x35\xf7\x63\x5e\x48\x39\xa8\x18\x1e\xa7\x1e\xd5\xa3\xc2\x4b\x16\x2d\xe6\xab\x3b\xe7\x8c\xf7\x1d\x74\x4e\x1a\xca\x9a\x56\x59\xe5\x3b\xa8\x9d\x5c\x2c\x30\x9b\x6b\x6d\xe7\x35\x6f\xf5\xc0\x7e\xfb\x5b\x18\x84\x20\x65\x5b\x44\xa6\x03\x1a\x67\xbf\x39\xb9\xbf\x75\x89\x39\xb6\x48\x3b\x5c\x4a\xb2\xc0\x8d\x9b\x9a\x70\xf6\xe4\x92\x29\xfc\xf0\x1d\xa2\xc7\xe4\x18\xbd\xf8\x6d\xf0\xab\x17\xd0\xe3\xa8\xde\x34\x82\xeb\xa1\x58\xa2\x6b\x18\x7d\x45\x15\x10\x82\xbc\x08\x5b\x38\x46\xe7\xba\x5f\x90\xe7\xea\xd7\x36\xe0\x2e\x9e\x76\x2b\x3b\x42\x82\xcc\xb1\x28\x2b\x12\xc9\x15\xc9\x67\x3e\x25\xd3\xb8\xa6\xed\xae\x22\x0f\x54\x2a\x69\xa3\xb6\xc7\x79\xc0\xca\x9f\x7b\x77\x28\x2c\x6f\xf5\x4d\xa1\x85\xdf\xb8\xc4\x0a\x8f\x03\xa9\x7b\x62\xbc\xb4\xe3\x82\xd7\x35\x66\xe5\x18\xdb\x73\xdc\x5d\x2a\x27\xbf\xb1\x25\x6e\xc6\xd8\x7f\x8b\xb2\x31\x1e\xcb\x05\x89\x5a\xb9\x01\x29\x08\x8f\x9d\xcb\x5d\x09\xec\x73\x2f\x9f\xcd\x52\x1c\xa3\x4b\xae\x3a\x73\xca\xdf\xb6\xb0\xca\x39\x45\xf8\xf9\xe5\xcd\xd5\xdf\x26\x1f\x2e\x2e\x6f\x06\x49\x3e\x48\x72\x78\x06\x49\x3e\x48\xf2\x88\x86\xf7\x45\x92\x13\x76\xb7\x2b\x29\xee\x1c\x6f\x9b\xb2\x23\x6d\x40\x4f\xad\xa5\x59\xed\x3c\xc1\x6a\xd7\x24\x69\xe7\xec\xee\x47\xac\x4d\x7e\x0b\x9f\xb3\x19\x2c\x1b\x12\x4c\xed\x17\x8c\x3b\xe2\xec\x8b\x67\x49\xdb\x21\xc7\x59\x46\x8e\x9f\xa4\xbc\xe7\x30\x8e\xb5\x69\xc9\x53\x72\x76\xdf\xe3\xa5\xf1\x02\x9b\x43\x89\xd9\x12\x35\x82\x32\x05\x5b\xe9\xf4\xfa\xec\xe2\x22\x40\x3a\x20\xf2\x50\x90\x46\xa1\x83\xff\x67\xb7\x14\x67\xe0\xe8\xdb\x87\x95\xd9\x46\x71\x4b\x68\xa6\x53\xf9\x1a\x41\xee\x28\x6f\x65\xb5\xf4\x58\x95\xcd\x72\x74\x9d\x09\x2f\x91\xe0\xc3\xe0\x18\x69\xb1\x79\x0b\xca\x15\xa5\x73\x93\x02\x99\xd0\xfc\x8e\x55\x4f\xdb\x89\x1c\x0a\x68\x42\xfb\x1b\x54\xd7\xcf\x57\x43\x13\xda\x8d\x52\x60\x1f\x53\x46\x13\xfa\xd1\x57\x63\x13\x5e\xd4\x67\x40\xd8\xbd\x24\xfb\x5e\xf0\x3a\x93\x34\xbb\x36\xc1\x15\x07\xdc\xdc\x74\x54\x0f\x1c\xfa\x2f\x54\x8f\xac\x49\xdb\x55\xaa\xd5\x86\x35\x00\x0d\x12\x67\x27\xa9\x92\x7d\x9e\x62\xf2\xc8\xe6\xef\xbf\xc7\xcd\x5f\xc8\xf2\x8a\x24\xd6\xe4\xee\xcf\x37\xa9\x48\xa1\x95\x31\x74\x4b\x96\x86\xb0\xef\xcc\x35\x96\x56\x96\x3c\xcb\xf4\xa1\x0c\x2a\x98\x7b\xc6\x7a\x88\x49\xef\xc8\xb3\x98\xfa\xb9\x25\x09\x34\x77\xee\x59\x21\x61\x24\xb0\x84\x60\x7f\xe8\x35\x4d\x5b\x3d\x94\x47\x3c\xb8\x27\x4d\x13\x75\x4f\x3e\xbd\xc7\x3d\xf9\x10\x56\xfd\x67\xb7\x78\xab\xfe\xb3\x53\xf4\xd5\x6a\x57\xf2\x61\xb1\xfa\xcf\x3e\x21\xb3\xfa\x4f\xc6\x53\x94\x82\xda\x5a\x7d\x1c\x28\x39\xf3\xa9\xbc\xb6\xb9\xb6\xa1\xea\xe4\x2f\x14\x64\xca\xc0\x80\x9c\x72\x50\x76\x6b\x05\x64\x9a\xe6\x34\x2a\x52\xf3\xe4\xc3\xb7\xf5\x1f\x10\x07\x79\x6f\xef\x64\x19\xd8\x5d\xff\x36\x8f\x65\xe6\xd0\x55\xdf\x39\x6e\x46\x89\x6a\xa2\x70\x89\x15\x3e\xd6\x07\x62\xd4\xff\xd1\x66\x16\xfe\xc3\x7f\x58\xe1\x29\xa9\xe4\x4f\x07\xff\xf5\x97\xf3\xbf\xfd\xbf\x07\x3f\xff\x23\xfc\x1d\xa8\x6b\x06\x1e\x1e\x7c\x21\x71\x08\x50\x4d\x92\xf1\x92\x5c\x42\xef\xe0\x47\x6b\xe9\x9d\x1a\x84\x90\xfd\x05\x54\xf4\x3a\x36\xe4\x02\xfe\xc7\x86\x97\xab\x3f\x45\x16\x34\x70\xcf\x1e\xea\x3d\xb0\xb6\x09\x44\xfd\xe6\xc9\xa7\xfd\xe0\x86\xfe\x48\x84\x4c\xe2\x76\x77\x4f\xbf\x12\x83\x79\xab\xdb\xc6\xb2\x58\x90\x1a\xc3\x3f\xbf\x77\x53\xa0\xef\x63\x5f\x73\x91\x41\xe9\x34\x7d\x07\x8e\x7a\x64\x97\x2f\xee\x5e\x25\x59\x9c\xe6\xc9\x28\xf9\xfd\x0a\x66\x9e\x30\x98\x11\x3b\x5b\x46\x02\x78\xfd\xd1\xe7\xa3\x78\x2a\x81\xd3\xc9\x05\xba\x33\x33\xbc\x47\x93\xf3\x74\xe2\xba\x22\xd9\xcd\xad\x64\x81\xfd\xbd\xef\x95\x5d\xa6\xc0\x74\xb3\x06\x73\x14\x9d\xd3\xea\xd3\xcb\xf1\x3a\x67\x77\xba\x5d\x99\x2d\xb7\x6b\xf5\xd9\x43\x99\x99\x6a\x2b\xea\x77\x34\xa9\x22\x57\xbf\xc4\xd0\x5b\x5e\xc6\x46\x11\xdc\xb3\xcf\xb6\x6b\x16\x53\xce\x19\xc0\x01\xad\xaa\x3f\x0c\xe8\x54\x0b\x7b\x93\x33\x69\xbe\x03\xae\x47\x72\x47\x98\xf2\x70\x72\x5b\x65\x1d\x0b\x45\xf3\xd8\x24\xb6\x47\x5d\x56\x66\x07\xf0\x30\x5e\xae\xfa\xd9\x63\x17\xdd\xf3\xda\xa0\xa6\x4f\xab\x66\x81\xf5\xa8\xe7\xde\x0e\xde\x78\xda\x0d\x7a\x42\xcf\x9d\xa4\xff\x22\x2b\x05\x3b\x5f\x7d\xf3\xa7\x84\x74\xd2\xf5\x27\xe3\xc5\xf9\x44\x66\x4e\x96\x1d\xbb\xc9\x56\x02\xc6\xb1\xc7\xcd\x24\x5f\xc2\xdc\x7d\x2f\x5d\x4c\xc1\xd8\x5c\x62\x3a\xb8\xa8\x47\x41\xa1\x77\x76\x87\xee\xb0\xf0\x28\xa1\x76\x5a\x51\xb9\x48\x15\xf7\xe6\xb9\x98\x75\x99\xb1\x5d\xea\x3a\x30\xad\xb8\x1a\x37\x9d\xee\xa1\xe7\x62\xa5\x97\x19\xba\xf0\x98\x8b\xb9\xcf\x30\xdf\x85\xf3\x4d\x62\x7a\x98\x83\xf1\x64\xf3\x60\xa8\x4d\x9e\x6b\x22\xd6\xf8\xef\x05\x51\xad\xd0\x32\xcb\x66\x57\x4c\x78\x69\xa8\x58\x32\x2a\x7f\x39\x8c\x75\x14\x3a\x45\x60\xce\x12\x5f\xd7\xe4\x57\xb2\xb3\x5d\x6f\x9f\x41\x1b\xee\xb5\x77\x27\x24\xb2\x38\xd7\xac\x10\x12\xa4\xc2\x8a\xde\x99\x6d\xe9\xf2\x87\x1c\xb5\x80\x6e\xf0\xe0\xf8\xf8\xc0\xf4\x92\x0b\x73\x95\x1a\x8f\xa2\xfe\x7c\xaf\xae\x85\x4e\xa9\x7a\x02\x37\x7c\x48\x07\x63\x97\xc8\x94\xd3\xb0\x53\xe5\x42\xac\xb9\x74\xf5\x2f\xc0\x98\x72\x59\x53\xdf\xef\xb5\x0f\xcc\xe7\x76\xad\x96\x93\xfd\xce\x10\xbc\xb8\xdf\x5b\xe5\xc7\xf0\x23\xdb\x3c\xb1\x54\x47\xf1\xa1\x79\xe5\x71\xd1\xb4\x23\xfb\xfa\xe3\x9a\xd4\x5c\x2c\xfd\x8f\xbe\xf8\xe6\x58\x2a\x2e\xf0\x1c\x4a\x46\x99\xc6\xcd\x9f\xf9\x9f\xcc\x1f\xf6\xba\xb7\xfe\xd7\x06\xdd\xd1\x65\x66\xf9\x5a\x2c\x5f\x9d\x2d\xe7\xd6\x6d\x4f\x0c\x28\xbf\xad\x9e\x40\xfe\x1c\x78\xc0\x9c\x89\xb9\xf9\x59\x84\x90\xba\xad\x09\x3b\xea\x14\x0e\xc0\x7d\x18\x25\x4f\x1e\xec\x8f\x1c\x42\xa8\xa4\x77\x54\xf2\x84\xb2\x1d\xfe\x45\xeb\xe1\x09\x47\xd1\xc4\x5b\xd5\xb4\x90\xdb\x59\x63\xe5\x3d\x28\x0f\x0d\x97\x80\x16\xb1\x87\x7d\xc5\x35\xf8\x2a\x35\xf2\x02\x3a\x86\x22\x82\x7d\x87\xfe\xe7\xf0\xef\xbf\xfb\x75\x7c\xf4\xe7\xc3\xc3\x9f\x5e\x8e\xff\xf3\xe7\xdf\x1d\xfe\xfd\x18\xfe\xf1\x1f\x47\x7f\x3e\xfa\xd5\xfd\xf0\xbb\xa3\xa3\xc3\xc3\x9f\xfe\xf2\xfe\xcd\xcd\xe4\xfc\x67\x7a\xf4\xeb\x4f\xac\xad\x6f\xcd\x4f\xbf\x1e\xfe\x44\xce\x7f\xfe\xcc\x97\x1c\x1d\xfd\xf9\xb7\xc9\x5d\xc7\x6c\xf9\x21\x51\x7a\x9b\x67\x6c\x37\x0b\x65\x8a\xcc\xc9\xb6\xcc\x79\x1f\x7b\x63\xa6\x50\x5b\xef\x2a\xa4\x4c\x8d\xb9\x18\x5b\x2e\x2d\x30\x52\x12\x1b\x70\xdb\x2b\xf7\xf9\xbf\x72\x52\x33\xc8\x54\x76\x4a\xe1\x1e\x1d\xf0\xa7\x52\x34\x0c\xc3\xcf\x73\xc0\x64\x4c\x4b\x41\x2d\xf5\x03\xd9\x91\xdb\x7c\x6d\x37\xe8\xbf\x03\x72\xc6\x05\x8d\xcc\xba\x76\x96\x94\x36\xaf\x8e\x3b\x23\xc8\x71\xaf\xd9\xef\xdd\x92\x04\x88\x99\x7b\x06\xa4\x4d\xf4\x33\x20\x6d\x1e\xe9\xca\x80\xb4\x49\x7a\xbe\x48\xa4\x8d\xe1\x1d\xfc\xf7\x84\xd9\xe4\xaf\x8a\x16\x99\xb9\x93\xb3\x20\x1a\x61\x77\xb1\xe0\xea\x9c\xa9\x6e\xce\xed\xa1\x38\x6a\x78\xd3\x56\x58\x3d\x92\x45\x91\x29\xef\x6d\xcf\x22\x67\x40\xb4\x6b\x54\x3f\x8b\xe1\xa7\x0c\xd5\x6d\xa5\x68\x13\x99\x10\xe0\x4d\x4b\x4f\xa6\x8b\xb0\x94\xbc\xa0\xd8\x25\x82\xc3\x6f\x2a\x2c\x95\x1b\x32\x78\xe6\x15\xbe\x25\x01\x21\x6f\x6c\xb6\x36\x90\xf7\xba\xb9\x9d\x2e\xf5\x3d\x74\xce\xee\xec\x9d\x84\xca\xd6\x24\xb8\x92\x2e\x56\x9a\xa5\xdd\xaf\x2b\x9b\x51\x9f\x4b\x9b\xad\x10\x24\x35\x82\x06\xe9\x9d\x88\x18\xa2\x39\x7c\xd6\x41\x20\x21\xfd\xc3\xd2\xc3\x46\x75\x23\xd9\x38\x48\x57\xc5\x7d\x36\x42\x92\x8d\xb5\xa6\x83\x77\x30\xd1\xbe\xee\x1d\xdd\xc2\x1e\x25\x70\xa4\x6b\xe5\x79\x35\xf2\xa7\xd0\xc6\xf7\x45\x13\xdf\x13\x2d\xfc\x69\x34\xf0\xfd\xd4\xbe\xb3\x69\xde\x79\xb4\xee\x3c\x1a\xf7\x16\xb8\xf6\x9c\x5a\x76\x1e\x0d\xfb\x29\xfc\x6b\x8d\x20\x33\xfa\xb0\x0f\x69\xcb\xae\xc2\x0f\x52\xe4\x01\x5c\x35\x8d\x20\x0d\x61\xa5\x23\x42\x73\x11\x58\x60\x6c\x1c\x32\xce\xbd\x5f\x34\xef\x85\x7d\xbd\xc9\x53\x36\xdc\xd6\x68\xb8\xad\xb7\x78\x86\xdb\x7a\xb8\xad\x9f\xe5\xb6\xb6\xd2\xea\xeb\xbf\xaa\x73\x57\xd7\xad\xf1\x7c\x67\x15\x10\xce\xfa\x54\x76\x20\x99\x9f\x85\xba\x7f\xad\x9e\x48\xa4\x1f\x2b\x14\xb2\x1e\x74\xa1\xb8\x11\x7b\x86\x6b\x5a\x20\x53\x7d\xcd\x98\xd5\xa8\xc6\x0c\xcf\x81\x06\x5b\x7f\xcf\x1e\x31\xc4\x85\xaf\x6a\x15\xd5\x93\x15\x4e\x40\xf0\x60\x39\x5e\x63\xf8\xa5\xe0\x55\xa5\xf5\x95\x8a\xde\x12\xf4\x9a\x34\x15\x5f\xd6\x96\xa6\xa9\x44\xd7\x0a\x2b\x32\x6b\xab\x6b\xa2\x12\x0a\x55\x47\x4a\x1c\x5f\xd1\xc7\xb0\xaf\xef\x6a\x2b\x42\x71\x1f\x28\x76\x83\x1a\x43\x03\x1f\xf5\x9a\x0f\x0c\xae\xf2\xd3\xea\x1e\x2f\xe5\x08\x5d\x92\x3b\x22\x46\xe8\x62\x76\xc9\xd5\xc4\x38\x91\xe2\xde\x1b\x72\x82\x98\x97\x23\x3a\x43\xdf\x55\x58\x11\xa9\x90\xc2\x73\xc0\x16\x77\x05\x7e\xb8\xe8\x35\x8a\xb8\x16\x94\xf7\x74\xfb\x42\x3d\xe6\x79\x56\x4e\xbe\x8f\x54\xfd\x81\xd6\x7d\xcd\x9f\x67\xaf\xab\x51\x39\x1e\xfd\x9d\x71\x42\x1b\xfa\x7e\x43\xe7\x6d\xd8\xe8\xbd\x38\x31\x25\x03\x5d\x55\x64\x70\xe9\x52\x86\x04\x91\x0d\x67\x92\xf4\xca\x37\x74\x03\x81\x9a\x97\x71\xa7\x3e\xab\xc7\x37\xda\x30\x48\x35\x09\x1a\x2e\x15\x54\x39\x88\xd5\x4f\x72\xd9\x02\x13\xd7\x11\x28\x7c\x81\xab\x8a\x94\x88\xd6\x35\x29\x29\x56\x5a\x6f\xc7\x33\x45\x04\xc2\xa1\xa8\xf7\xe5\x53\x7d\xde\x88\xa9\x87\xe1\x4a\x69\xc4\x1b\x6b\x7d\x9a\x59\x09\x79\xb4\x94\x41\xf4\xc2\xa0\x4e\x6d\xe1\x8f\xae\xf0\xc6\x4a\x29\x8d\x24\x21\xaa\x9f\x0f\xa0\xd9\x05\xdb\x7b\x15\xb4\x8b\xa6\x15\x2f\x6e\x25\x6a\x99\xa2\x95\xad\xd5\xc9\x6f\xc1\x7e\xa9\x40\x9c\x44\x37\x1d\x2f\xa5\xfc\x3f\xc7\xfe\x80\x8d\x75\xaf\xe4\xc9\x6f\xba\x5f\xc1\x07\x91\x9d\xcb\x60\x45\xe7\xb0\xa1\xc9\x03\x29\x52\xf4\xf9\x7e\xb0\xe5\x81\x14\x61\xa5\x4f\x47\xe3\xac\x77\x94\x25\x4f\xce\x14\x77\x34\x4f\x26\xfc\x55\x2e\xcc\x53\x02\x69\x75\xf8\xe4\x86\xf4\x9c\xd9\x45\xa0\xd2\xce\xbc\xf9\xb1\xa2\x8c\xf4\x17\xc6\xd7\x7f\xf3\x8b\x63\xc2\x9e\xd6\xc8\x45\x25\x15\xa4\x50\x5c\x2c\x1d\xeb\x57\x72\xd7\x5c\x5f\x74\xdf\xa0\x70\xf2\xe1\xc1\xc9\xc1\xd1\xda\x1e\x39\x90\x90\x7e\x61\xae\xc5\x63\x4b\x9d\xed\x07\x25\x69\xdd\x54\x4b\x18\xc7\x41\x39\x42\x54\xe5\xc0\x08\xe9\xdb\xd0\x94\x09\x87\x59\xb1\x54\xdf\x23\x24\x39\x52\x02\x97\xd4\x1a\x08\xf0\xa9\xfe\x92\x12\xad\xbd\xd0\x0f\x0f\x7e\x3d\x18\x21\xa2\x8a\x23\x74\xcf\xd9\x81\x82\xe9\x3b\x46\x37\x50\x5c\x31\x1d\xd6\xeb\x3a\xb2\xe4\x2d\x54\x18\x37\x4b\x68\xea\xe9\x56\x4b\xb8\x6e\x10\x6f\x6d\xfd\x55\xac\x52\x28\xca\xc3\xe7\xfc\x81\x2a\x4b\xbe\xa1\xe5\xf7\x4b\xd8\x4d\xb6\xe2\x37\xd6\xc6\xc8\x1d\x39\x59\x10\x5c\xa9\x85\xc9\x66\x60\x9c\x8d\xff\x45\x04\x07\x1a\x73\x66\x7f\x93\xda\x8d\xb4\x90\x72\xf8\x24\x84\x97\xd7\x3b\x94\x05\xc8\x94\xd9\x19\xe0\x1e\x7d\xed\xbd\x21\xd1\x2a\x11\x5a\x95\x47\x6f\x6f\x6e\x26\x6f\x88\xea\xd7\x73\xd6\x1f\xa2\x37\xe7\x37\x2e\x87\x05\x1c\xfd\x44\xcc\xb8\xa8\xf7\x40\xbc\xe7\x01\xd7\x8e\x51\xc3\xc5\x3e\xdc\x32\x0b\x2e\x93\x96\x13\x3d\xc1\x15\xf3\x96\x4b\x65\x62\x39\xc6\x36\x61\x90\xd8\xc8\xfb\x09\x19\x2e\x7d\xff\x62\x72\x8c\xfe\xc6\x5b\xa8\x44\x86\xa7\xd5\xd2\x17\x32\x92\x24\x0d\x45\xad\x9f\x17\xba\x2b\x2f\xf4\x0d\xa2\x77\xfe\x5b\x82\x4b\x22\x24\x08\x68\x82\x93\x93\xa1\xb3\x1d\xf7\xa0\x6f\x59\x97\xf2\xac\x95\x8a\xd7\x68\x61\x87\xdd\xa7\x38\xb7\x87\xf3\xd8\x1c\x57\x4b\x27\x2b\x48\x63\x84\xb8\xfd\x9b\xaf\x4e\x44\xaf\x49\x2f\x33\xef\xf6\xf3\xa9\x51\x53\xc3\x69\xb3\x01\x0e\x43\x54\x6a\x65\x9b\x29\x9a\x97\xe9\xba\xc8\x90\x2f\x80\x32\xe6\x0c\xa0\x34\xf2\xf3\xd5\x17\x41\xb0\x27\xf9\x4d\xf9\xd2\x10\x50\x36\xa8\x3d\x7a\x12\xb8\x3d\xb2\x28\x4a\xbb\xf9\x8c\x0f\x3a\xde\x7b\xbe\xe9\xe5\xb4\xab\x0b\x5e\x60\xc6\x19\x2d\x70\x45\xff\x45\x4a\xd4\x36\x9c\xd9\xdc\x3a\xd0\x6c\x0b\x2c\xc9\x18\x22\xef\xcc\x88\x73\x19\xb0\x5d\x6b\xe9\xa0\x38\x07\x75\xcf\x17\x89\x36\xbd\xce\xd3\xd5\xac\xa8\xf0\x64\xea\xf6\xf0\x59\x0b\xa8\xf7\x16\x2b\xcf\x8e\x47\x5f\x84\x3a\x89\x32\x11\x2f\xac\x73\x9b\x99\x3a\xa1\xc0\xe7\x6d\xae\x2b\x10\xbc\x92\x88\xbb\xf4\xfd\x95\x6d\x5e\xb5\x0a\xb8\x6f\xba\x97\xc1\x1c\x08\xc4\xda\x7a\x4a\x44\x47\x0c\x29\xd4\xfa\x9c\x66\xf1\xba\xd8\x66\x4d\x73\x2e\x4a\xeb\x74\x0c\xcc\xe6\x04\xbd\xd2\x2d\xff\xf1\xdb\x6f\x7f\xff\x6d\x86\x76\xf4\xf0\x5c\x2b\x98\xa1\x8b\xd3\xcb\xd3\x5f\xae\x7f\x3c\x03\xba\xf9\xd4\xd7\x67\x4a\x92\xcd\x9d\x22\x9b\x35\x41\xf6\x49\xd3\x63\x81\xb8\x31\x59\xca\xe6\x3e\x12\xd7\xd0\x2b\xbd\x09\x5b\x69\x28\xea\xad\x4d\x12\x94\xd8\xd6\x66\x54\xfa\xee\x0c\x83\x79\x5a\x60\xed\x85\xa4\x92\x15\x21\x4d\x36\x8b\xff\x5a\xbf\xad\x57\x0e\x08\x95\xad\x30\x55\x69\x7d\xf0\xaa\xf3\xe5\xdb\xa0\x15\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\xb0\x41\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\xf5\x8b\xd6\xc2\x71\x57\x0d\xfe\xad\x8d\x16\x62\x56\xa2\x5b\xd2\xa4\x59\x97\x5a\x60\x3a\x18\x61\x1f\x45\x08\xbe\x77\x61\xeb\x76\x98\xf4\x6a\x23\x08\x1c\xfa\xcf\x68\xc4\x69\x15\x80\x82\xe0\x3c\x04\x02\xad\x11\x32\xc3\xb4\x42\x18\xbc\xf2\x8a\xd6\x04\xdd\x2f\x08\x33\xce\xfe\x0e\x2d\xf1\x15\x09\x9c\xaf\xd5\xdb\x78\xe0\x20\xe1\xdf\x6d\xed\x35\x4c\x65\xc5\xf8\xba\xcd\x00\x2b\xb3\x45\x8f\xd5\x6c\x30\x03\x3e\xe7\x19\xcc\x80\x48\x33\xa0\x11\xe4\x5a\xf1\x68\x5d\x33\x1b\xe0\xc6\x74\xe3\x11\xb8\xcd\x94\xcc\xb8\x20\xab\x78\x9b\x00\x07\x63\x91\xf3\x09\xc8\xe0\xd3\xc9\x85\x8f\x7d\xf1\x1e\xd6\xc5\x30\x17\xcb\xb6\x58\xb8\x30\x29\x23\x52\x9e\x00\xb2\xa6\x6d\x8c\x63\x19\xae\xb6\x56\x90\x78\x94\x4f\x23\x08\xa9\x61\x1e\x47\x1d\x9b\x90\x1e\x2e\x61\xe6\x43\xa2\x0a\x13\x37\x77\xb0\x22\xcb\x13\xeb\xa6\x6b\x96\x14\xce\xef\x26\xb6\x10\x58\x2e\x08\xe4\xce\x92\x07\xaa\xa4\x69\xd4\xb0\xb1\xba\x19\xd7\xfa\xc2\x5c\xe0\x82\xa0\x86\x08\xca\xb5\x8a\xd1\x32\x55\xf2\x7b\x86\xa6\x64\x4e\x99\x74\x2b\x96\xd2\x25\xb7\x25\x00\x49\x44\xa5\xaf\xdd\x7d\x8c\xae\x7a\x95\xe3\x2c\xbb\x58\xc1\x3b\x99\x69\xa7\x68\x94\x69\x4a\x40\x79\x81\x6d\xd0\xe2\xaa\x5a\x76\x1b\x2f\x24\x08\x7d\x64\x86\xe2\x37\x84\x99\xd9\xc3\x96\xc1\x40\x4b\x52\xe1\xa5\xc9\x20\x9f\x51\x06\xde\x5f\x21\x8f\x8e\xd3\xa1\x59\xd1\x1d\xe4\x22\x78\xe7\xa3\x3b\x83\x4a\x24\x08\x2e\x92\x78\x8c\x07\x0c\xd8\xa7\x9e\x01\x03\x36\x60\xc0\x06\x0c\xd8\xfa\x33\x60\xc0\xfa\xcf\x80\x01\x7b\xbc\x43\xfb\x1c\xb4\x1b\x30\x60\x83\x57\x66\xfd\x19\x30\x60\x51\xcf\x80\x01\xfb\xe4\xb3\x77\x22\x7a\xc0\x80\x7d\xc6\x33\x60\xc0\x3e\xf3\x19\x30\x60\x03\x06\x6c\xc0\x80\x0d\x18\xb0\x84\x67\xc0\x80\x6d\x3f\xbc\x21\xf8\x13\xff\x0c\x18\xb0\x01\x03\xb6\xe5\x33\x60\xc0\x56\x9e\x01\x03\x36\x60\xc0\x3e\xf6\x0c\x18\xb0\x01\x03\x66\x9f\xc1\xdb\xb8\xf6\x0c\x18\xb0\x0d\xcf\x80\x01\xdb\xae\x9d\xc1\x0c\x48\x7b\xd9\x93\x98\x01\x52\xf1\xe6\x9a\xce\x13\x78\x21\x73\x1d\x83\x6b\xdf\x13\x4b\x1a\x29\x6d\xb1\x5d\x69\x3e\x74\x7e\x2c\x69\x29\xfb\x42\x44\x58\x70\x93\x4c\x89\x36\x11\xf4\xb0\x9a\x94\xdb\xe4\x62\x06\x01\xe4\x80\xc9\x4d\x9f\x0a\x47\x13\x48\x7b\x65\x1d\xfa\xea\xb3\xbb\xdd\x28\xd3\xb6\x4b\x7c\x0f\x82\xf9\x28\x30\x33\x95\x51\x6d\x99\x6c\x7d\xbd\x4f\x78\x29\x5d\x25\x09\xc6\xd9\xd8\x90\xb5\x1e\xeb\x0e\x1f\x73\x79\x9c\xe0\x0d\x4e\x64\x66\x33\x18\xb9\x89\xe0\xd3\x9d\xb1\xb3\x4d\x00\x7f\x44\x0b\x0b\xd0\xe3\xb3\x1e\xe3\x9a\xe9\x60\x24\xd3\x5a\x1f\x18\x06\xc5\x9a\x1d\x05\x17\xb5\x02\xdb\x83\x02\x77\xc9\xe6\xb6\x35\x72\xca\xb1\x54\xca\x93\x86\x9b\xff\x74\xb8\xa9\x00\x30\x15\x1d\x47\xd9\x31\xbd\x5c\x0a\x4a\x6a\x67\x08\xa9\x3d\x41\x98\x65\x40\x45\xe5\xd4\x95\xf6\x14\x0d\xb5\x9f\x48\xa8\x7d\x44\x41\xed\x02\x01\xb5\x73\xf4\x53\x9e\xb0\x7a\x86\x90\x7a\x26\x8d\xf4\x09\xc2\x53\x16\x48\x7f\xb3\x10\x44\x2e\x78\x15\x2d\x70\x72\x09\x9b\xf7\x94\xd1\xba\xad\xa1\x0a\x85\x96\x29\xf4\xce\x83\xfd\xa5\x13\x19\xf6\xba\x37\x88\x03\x28\x57\x51\x12\x28\x03\x8e\x69\xa5\xb7\x16\x90\x85\x2e\xf0\x1d\x28\xa5\x6d\x51\x10\x52\xa6\xa8\xa5\xa1\xb7\xfa\xf7\xc7\xbe\x87\x86\xa3\x9f\x4a\xf4\x2a\xed\xaa\x49\xb3\x7b\x02\x77\xde\xef\xbf\x89\x7a\xc7\x5c\x34\x79\x6e\xe9\x37\x57\x93\xb3\xde\x2d\x0d\x1f\xbc\x85\x63\x7c\xb6\x20\xc5\xed\x95\x85\xd2\xec\xee\x66\x4e\x77\x33\x25\xb9\x98\x72\x28\x06\xa9\x5e\x94\x7e\x0c\x99\x0b\xb5\x12\x02\x9d\xc3\x2a\x12\x71\x47\x0b\x72\xfc\x0c\x8e\x8a\x5c\xc6\x7f\xfa\x41\x40\x10\x26\x80\x81\xef\x8b\xda\x75\x6d\xba\xe3\x23\x0c\x81\x8f\xca\xf6\x14\x40\xa3\x15\x2e\xfc\xda\xcc\x37\x1f\xba\xa4\x6e\x1c\x4a\x42\xbc\x41\x33\xa7\x6a\xd1\x4e\x8f\x0b\x5e\x9f\x68\xd1\x61\xfe\x33\xad\xf8\xf4\xa4\xc6\x52\x11\xa1\x6d\x1c\x7b\xad\x8f\x0b\xdd\x03\xca\xe6\xc7\x75\x79\x74\xfc\xbf\x92\xfa\x70\x61\x7d\xe5\x36\x0d\xeb\x11\x27\xc1\x94\x68\xb9\xcf\xc5\x8a\xb7\x40\x4f\x4a\xfa\x26\x4d\xbe\xbf\x53\x8b\x8a\x24\xc2\x92\x77\x02\x49\x1e\xa4\x36\xca\x10\x10\xc8\x29\x54\xf6\x03\x76\xfc\x64\x90\xe3\x2c\x67\x35\x13\xd4\x78\x8f\x60\xc6\x7b\x63\x0b\xed\x0b\xb4\x38\x1b\xac\x38\x17\xa4\x38\x0b\x9c\x38\x07\x94\x38\x1f\x8c\x38\x0f\x84\x38\x3f\x7c\xf8\xc9\xa0\xc3\x5f\x04\x6c\x38\x63\x7c\x2c\x13\x5c\xf8\x39\xa0\xc2\xfb\xeb\x83\x41\x19\xe0\xc1\xcf\x07\x0d\xce\x32\x8f\x59\xad\xd8\x44\x91\xb0\x03\x28\xf0\x73\xc4\xff\x9f\x2c\xf6\x9f\x21\xee\x9f\x33\xe6\x9f\x2d\xde\xff\x64\x90\xdf\x74\xb8\x6f\x56\x9f\xc2\xb3\xc0\x7c\x73\x42\x7c\x93\xd7\x97\x32\xaa\x28\xae\x5e\x93\x0a\x2f\xaf\xd3\x80\xa0\xb9\x56\xe2\x72\x0d\x2c\x6a\xdc\xd6\x7d\x5c\xc3\x02\x4b\xe4\x42\xdd\x96\xe2\xc5\xc5\xd2\xad\x0a\x8c\x30\x44\x9c\xf5\xf8\xa2\xa3\xd6\x68\xff\x22\xd7\x68\x6f\xdc\xe3\x86\x57\x65\x4f\x76\xcd\x5b\x7e\x8f\xf8\x4c\x11\x86\x0e\x29\x73\x3b\xe7\x28\xf0\xd2\x74\xe1\x91\xe4\x78\x87\x7e\xeb\xab\x97\xae\x91\xaf\x2f\xee\x01\x91\x21\x29\xf7\x3a\xf2\x65\xfb\xf8\xe9\xd0\x97\xfd\xe2\xac\xad\xfa\xe1\x2f\x13\x12\xcb\x13\xfb\x7a\x75\x8c\xde\x5b\x75\xe2\x15\xf4\xc7\x8b\x22\xcc\x4a\x64\xf9\xb9\xbe\xbe\x7d\x92\x0c\x75\xef\x1b\x37\x1e\x9b\xde\xc7\xb3\x98\x1b\x58\x6b\x99\x1c\x61\xfd\x2d\x50\x40\x07\xa7\xeb\xde\x38\x5d\x77\x84\xc0\xfe\xfa\xac\xad\xe7\x47\x5c\x0f\xd6\xd6\xbf\x8b\xb5\x15\xd0\xe2\xbd\x11\xb8\x20\x93\x7d\x52\xde\x9c\x00\xe9\x12\x01\x3b\x1d\xce\x8b\x0b\x46\x88\x49\x1c\xeb\x48\x0f\x81\xdf\x6f\xd6\x56\xd5\xd2\xf8\x10\x7b\x0c\x98\xf1\x5b\xeb\x66\x41\xd6\xa8\x03\x21\x94\xba\xa1\x77\x9d\x6d\xd2\x08\x6e\x35\x12\xd1\x32\xa6\x55\x0c\x7b\x9c\x74\xe7\xb5\x2d\x22\x09\x8b\x77\xa7\xe3\x1e\xb1\xa1\x05\xa1\x03\xd0\x73\x41\x50\x97\xbf\xd4\xef\x88\x6e\x75\xc6\x45\x41\xa7\xd5\x12\x2d\x70\xa5\x8d\x25\x0b\xd2\xbe\xa5\x55\x65\x5f\x93\x00\x0a\x27\xca\x84\x9e\x8d\x46\x53\x71\x36\x87\xc9\xc0\xa6\x23\xe4\xa1\x21\x85\x6e\xb3\xa8\x08\x66\x6d\x63\xfa\xa9\xf5\xa3\x25\x6f\x85\xeb\x67\x12\x2a\x3e\x68\x9d\x4a\xc4\x68\x35\x72\x53\xde\xa7\xc0\x5c\xdf\xf3\x9d\x4b\x59\x92\xd2\xb2\x57\xde\x53\x49\x46\xf0\xce\xe8\x3e\x99\xbe\xb8\xaa\xfd\x66\xdf\x98\xcf\x1a\xc1\xef\x68\xd9\x61\xf4\xf5\xb6\x00\x7c\x7c\x74\x5b\x3f\xc2\x7b\x9d\x68\x65\x9c\x8d\x19\x99\x63\x50\x8f\xad\x40\x33\x88\x4e\xd3\xbe\xc1\x0f\xb2\x92\x16\x58\x11\x09\x39\x09\x3d\x6a\xdb\x3b\x8a\xa3\x7b\xa2\xc7\x13\xec\x28\x74\xc8\x38\xe2\x90\x59\xd8\x32\xaa\x96\x10\xd1\x5b\xb4\x0a\x95\xfc\x9e\x1d\xa5\x1c\x4c\x03\x73\xc0\x68\x4a\x14\xee\x92\x03\x9d\x4a\x26\x11\x61\x78\x5a\xe9\xb3\x07\x88\xff\x9b\x8d\x1b\x00\xcd\x08\x56\xad\x20\x68\x8e\x55\x82\x94\xd8\xa0\xcd\x9b\xf5\xfc\xf8\xb6\xa3\xd2\xc6\xeb\x66\xa8\x65\x92\x24\x2a\xb2\xd9\x4c\x80\xc8\x8c\x57\x7d\xa2\x79\xab\xf6\xe4\x1e\x79\xcc\x75\x64\x32\x77\x02\x23\x91\xd6\x44\x22\xde\x26\x78\xf2\x7a\xe6\x9f\x6d\x2e\xa7\x85\x37\xf8\x9d\x36\x3e\xb1\x61\xd3\x1c\x3b\xec\x32\xd0\xca\x03\x7e\x02\x07\xb7\x32\x19\xd4\xaf\x2f\xaf\x7f\x79\x77\xfa\xdf\xe7\xef\xe2\x16\xfe\x1c\x17\x8b\x90\x5b\x9c\x21\x0c\x17\x05\x08\xf9\x05\xbe\x23\x08\xa3\x96\xd1\x7f\xb6\x16\xf2\x76\xe8\xdb\x8b\x14\xab\x59\xd2\x7b\x92\x14\x5f\x7d\x4b\x44\x49\x8e\x1c\x6b\xfa\x8e\x4a\x20\xaa\x86\x4e\x58\xe0\x3f\x97\x04\xcd\x04\xaf\x57\x0c\x2d\x74\xe9\xc1\x75\x4b\x7d\xc3\x60\x63\x9a\x2d\x88\x88\xd3\xc8\x5f\x7f\x38\xbf\x86\x1c\xfc\x46\x18\x62\x77\x48\x2e\x80\x77\x42\xeb\x26\x75\xd0\xf4\xa7\x3c\x46\xa7\x6c\x69\x7e\x69\x84\x59\xa4\x8a\x52\x51\xa9\x08\x28\xa7\xd6\x90\x74\xf0\xc0\x17\x2f\x8f\xe1\x7f\x2f\x10\x2e\x4b\xa1\x2d\x4d\x9f\xa3\x51\xac\x66\x99\x45\xb5\x6c\xec\x57\x3a\xad\x82\xc9\x65\x44\x41\x1a\x47\xd4\x0b\xdf\xf3\xd2\xae\x04\x28\x81\x80\xdf\x31\xda\xad\x54\x02\x2b\x32\xa7\x05\xaa\x89\x98\x13\xd4\x60\x55\x2c\x50\x8d\x97\xa8\xe0\x42\xb4\x8d\xa1\x18\x29\xb1\xc2\x71\x2d\x7f\xcf\x05\xaa\x9d\x74\xd6\xd2\x4c\xab\xe4\xd7\x9b\x81\xa0\x9d\xc8\x0e\xff\x49\xa5\x6c\x89\x3c\x79\xf5\xf2\x4f\xdf\x7c\x1b\x69\x5e\x67\x3c\xb8\xb1\xd0\xa7\x04\xc8\x53\x1f\xfe\xe5\x36\x18\x80\xae\x7b\xcc\x30\x76\x87\x98\x9d\x0f\xd2\x50\x52\x36\xaf\x92\x1d\x20\xc9\x6e\xc0\x54\x27\xe0\xb8\x1b\xc1\x24\xd6\x17\x98\xee\x09\xec\xf5\x21\xde\x95\x92\xcf\x0b\xd6\x69\x70\xce\xef\x65\x05\x32\x67\x81\x61\x77\x31\x71\x52\x2a\xc5\x7f\x04\xd6\x84\x77\x4c\x19\xf6\x11\xd3\xac\xc1\x3b\x8c\xd0\x4b\xf4\x5f\xe8\x01\xfd\x17\x78\xc1\xfe\x18\xdf\x54\x1e\x1f\x53\x0e\x18\xff\x82\x4b\x75\x31\xc9\xb4\xd0\x7f\xd5\xf7\x95\x7e\xa3\x5e\x0f\xc5\xd1\x94\x5a\x77\x04\x79\x50\x44\x68\x33\xd0\xae\x61\xea\xcc\x25\x79\xd4\x74\x07\xbf\x94\xdd\x9d\x0a\x2e\xb8\x98\xf5\xd1\xff\xcf\xb4\xbf\xa1\xe1\xb7\x5c\xaa\x4b\x2b\xad\x43\x0a\x9d\xb0\x1f\x35\x5c\xc4\x3d\x71\x9f\xd2\xea\x7b\xbd\xf7\xba\x1a\x1b\xa8\xe4\x90\x00\x61\x72\x38\x17\x34\x41\x38\xec\xcf\x89\x4d\xc3\x89\xe6\xdb\xba\x1f\xdb\x5a\x2b\x3e\x7d\xf0\xc8\x58\x23\x25\x28\x4b\xd3\xf0\xf2\x18\xec\x9b\x84\x5e\xe8\xd9\x28\x03\x65\xe0\x23\xa6\xd1\xb1\xb1\xd7\x7c\x74\x18\x0e\x9c\x96\x58\x05\x66\xb1\x3a\xac\x79\x04\x99\x11\x21\x4c\x9e\xf0\x74\xe9\xd2\x8d\x92\x77\x5b\x92\x94\x6b\x04\x57\xbc\xe0\xd1\xb4\x29\x39\xb7\xca\xc4\xf6\x05\xe6\x1e\x62\xb5\x3e\x3a\xfe\xc3\xeb\xc9\x08\xdd\x9c\x4d\x46\x88\x0b\x74\x7d\x96\x06\x7e\x0a\x5d\x30\x2f\x6e\xce\x26\x2f\x76\xba\x02\x41\x0e\xd3\xcd\xd9\x24\xe2\x25\xeb\xf0\xd9\x1a\x37\xe3\x5b\xb2\x8c\xd4\xee\x72\x68\x98\x63\xbf\xb1\xb2\x0c\xc8\x4c\x73\x8d\x9b\xad\xdf\x26\x08\x2e\xe9\x5e\x33\xb9\xb8\xac\x43\xdf\xd3\x7c\x94\x2e\x35\xbf\x23\xa5\xb1\x9a\x5d\x2b\x84\x95\x0d\xa7\xda\x46\x1a\x78\x5e\x3e\xf6\x0c\x3c\x2f\xdb\x3f\x03\xcf\xcb\xa6\x67\xe0\x79\xd9\xe2\x19\x78\x5e\xcc\x33\xf0\xbc\xf4\x3b\xb2\x8f\x39\x46\x03\xcf\xcb\x27\x9f\x81\xe7\xe5\xd1\x67\xe0\x79\xd9\xea\x19\x78\x5e\xd6\x9f\x81\xe7\xe5\x23\xcf\xc0\xf3\xe2\x9f\x81\xe7\x65\xe0\x79\xf9\x72\xa5\xf6\xc0\xf3\xb2\xfa\x0c\x3c\x2f\x03\xcf\xcb\xc0\xf3\x12\x3e\x03\xcf\xcb\x23\xcf\xc0\xf3\x32\xf0\xbc\x0c\x3c\x2f\x1f\x7f\x06\x9e\x97\xe8\x67\xe0\x79\xd9\xee\x19\x32\x0f\xb7\x7c\x06\x9e\x97\x81\xe7\x65\xf5\x19\x78\x5e\x3e\xf9\xec\x87\x7b\x7c\xe0\x79\x19\x78\x5e\x3e\xfa\x0c\x3c\x2f\x03\xcf\xcb\x47\x9f\x81\xe7\x25\xe2\xd9\x3b\xa7\xeb\xc0\xf3\x32\xf0\xbc\x7c\xac\x8d\xc1\xda\xda\xee\x19\x78\x5e\x06\x9e\x97\xb5\x67\xe0\x79\x59\x7f\x06\x9e\x97\x81\xe7\x65\xe0\x79\x19\x78\x5e\xfc\x33\xf0\xbc\x7c\xed\x7e\x27\x41\x24\xfd\x17\x99\xf0\x8a\x16\xcb\xe4\x6c\x9f\x2b\x22\x79\x2b\x0a\x7d\x63\xc3\x6b\x51\x03\xef\xf5\x1e\x85\x24\x25\x7b\xcf\x28\x14\xae\x82\x89\x0b\xa9\x14\x84\x9d\x83\xa7\x98\x82\xbd\xa0\x53\x70\x03\xbc\x8c\x47\x10\x8c\x5d\xf9\x6c\x33\x7d\x71\xce\xd2\x64\xab\x3d\x1c\xc8\x3e\xa4\x73\x86\xb4\x47\x7e\x17\x29\xee\x85\x2d\x7d\x74\x73\xe1\xa6\xa9\x68\x4a\x62\x2c\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\xc7\x52\xe5\xd7\x8a\x3a\x71\x98\x84\x35\xbb\x98\xad\x82\x51\xa9\xea\x79\x81\x2e\xb9\xba\xb2\x87\x7b\x67\xeb\x95\x19\xb1\xe0\xa6\x70\x67\xac\x55\x67\xbc\x6e\x5a\x45\x7a\x17\x9b\x99\x62\x63\x74\x50\x99\x2a\xd0\x77\x93\x0d\x5a\x70\x36\xa3\x73\x6b\x7d\x9f\xd4\x98\xe1\x39\x19\xfb\xd9\x1e\x77\x54\x0f\x27\xd1\x17\xf5\xce\x52\x41\x8b\x0a\xd3\x78\xe0\x60\x2e\x31\x71\x06\xbd\x00\x1a\xb0\x0e\x50\x0f\xb9\x69\x7e\x9a\x47\x1e\x36\x4e\x8d\xdc\x38\x76\xbf\x32\x7f\x3c\x4a\xb0\x1e\xb1\x02\x5f\x05\x18\x46\x1b\x76\x6a\x9a\xc1\x68\xcc\xc4\x92\x34\x44\x5b\x04\xc6\x81\x1a\xaf\xf7\x2f\x19\xae\x69\xe1\x4e\xd8\x69\x55\xf1\xc2\xf8\x64\xfa\x56\x65\x8e\x2e\x6b\x63\xb7\xae\x5b\x85\xa7\x15\x39\x46\x17\x86\xa2\x82\xb3\x6a\xa9\xcf\x9f\x24\xca\x41\x14\xec\xe6\x4f\xb3\x24\x53\xf0\xaf\x89\xd8\xd7\x8d\x4a\x39\x6c\x2a\xc3\xa9\x41\x98\x16\x65\x9c\x11\x44\x98\x12\x4b\xbd\xff\x26\xbc\xbc\xd6\x5b\xb0\xf7\xed\x64\xaa\x8d\x44\xc8\x6b\x0e\xb8\x6b\x22\xd4\x35\x0f\x40\x35\x1d\x9c\x9a\x17\x98\xda\x85\x10\x0c\x53\x50\x98\xf1\xd3\xdb\x16\x0d\x2f\x8f\x37\x88\x26\xc4\x67\x89\x3d\xd0\x2d\x4e\x78\xa9\x95\x26\x41\x8c\x7c\xf2\x67\xd4\x38\x10\x2f\x74\xe7\x6e\xc1\xe3\x87\x55\xa7\x4d\xe1\x3b\x4c\x2b\x7d\x80\x13\x3b\xb0\xce\xba\x98\x16\x95\xc9\x14\xab\xb0\xe0\xfc\x7d\xda\x2c\x36\xad\xab\x97\x19\x56\x2c\xb8\x24\x0c\xe4\x25\xf6\x19\x3c\x3e\xbf\xc0\x8a\x98\xd2\xdc\xc5\xa9\x28\xe2\x8b\x19\x22\x75\xa3\x96\x23\x44\xee\x88\x58\xaa\x05\xa0\x0d\x3c\x6f\x28\x88\x35\x2a\x51\x8d\xcb\x60\x77\x8c\x10\x77\x0e\xe8\xc4\xe6\xe1\x7e\xb0\x36\x59\x5b\x29\x63\xa1\x51\xe9\xd3\x28\x76\xbd\x6b\x72\xd3\xd9\xa0\x54\xa1\x99\x93\x8e\x06\x01\x95\x6a\x4d\xe3\x88\x6b\x51\xc6\xb3\xf0\x0e\x7a\x11\xa4\x8e\xe8\x2d\x51\xe3\x07\x70\x4f\xe2\x9a\xb7\x4c\x19\x9e\x1a\x63\x31\x78\x2d\xcf\x24\xd8\x3c\x23\x5e\xee\x49\x75\x7b\x94\xe7\x6a\xc7\xa5\xa3\xa6\x98\xe4\xc8\x53\xc6\x4a\x11\xc1\xbe\x43\xff\x73\xf8\xf7\xdf\xfd\x3a\x3e\xfa\xf3\xe1\xe1\x4f\x2f\xc7\xff\xf9\xf3\xef\x0e\xff\x7e\x0c\xff\xf8\x8f\xa3\x3f\x1f\xfd\xea\x7e\xf8\xdd\xd1\xd1\xe1\xe1\x4f\x7f\x79\xff\xe6\x66\x72\xfe\x33\x3d\xfa\xf5\x27\xd6\xd6\xb7\xe6\xa7\x5f\x0f\x7f\x22\xe7\x3f\x7f\xe6\x4b\x8e\x8e\xfe\xfc\xdb\xf8\xe8\x63\x6a\xa8\x3d\x5f\xa0\x3d\x53\x98\xfd\x49\x82\xec\x56\xc6\xee\xfc\xf0\xdb\x2b\x70\xed\xf8\xdb\xe8\xc4\xc7\x8e\xbf\x48\xf6\xc9\x5c\xcc\xba\xf6\xa9\x44\xbc\xa6\x4a\x91\xd2\xde\xbd\x01\xf7\xcd\x8a\x3f\xc8\x0a\x2c\xa0\xad\xc2\x70\x7b\x07\x1c\x2c\x9d\x1b\x29\xba\x5b\xfe\x7e\x05\x0f\x18\x43\xb4\x6e\x2a\x52\x13\xa6\x40\xf0\x8c\x9d\x6d\x0b\xee\xc4\xe3\x6e\x04\x85\x71\x78\x90\x87\x82\x90\xd2\x76\x72\x90\x8d\xc1\x33\xc8\xc6\x41\x36\x7e\xea\x49\xf6\x89\xe7\x10\x8c\x57\x61\x27\xac\x2f\x4b\x3a\x4d\x19\x3c\xe4\x9e\x22\x81\xcf\x00\x28\x71\x47\xcb\x16\x57\x21\x93\xac\x23\x17\x8d\x93\x00\xe0\xda\xe9\x43\x43\x20\x4c\x4b\xee\x48\xe5\x3b\x61\xdc\xf4\xc7\xe8\xaf\x06\xce\x13\x1a\x9a\x7d\x87\x7a\x5c\x40\x6e\xd3\x70\xfb\x8c\x10\xd6\xd4\x3d\x90\x2b\x5d\xf2\x68\xa3\x2e\x09\x43\xef\xb6\xb8\xa9\x38\xf5\x52\xa3\x5a\x8e\x90\x24\xca\xe4\xd8\x2c\xc8\xca\x32\x61\x89\x5e\x9c\x56\xf7\x78\x29\x5f\xf8\x98\x24\x65\x54\xad\x14\x1f\x88\xea\x03\x70\xc3\xea\x17\xce\xb8\xd6\x79\xa1\xaa\xc2\x6c\x46\x8a\x48\x6b\xd6\x70\x70\xac\xf7\xcd\xe2\xd1\x15\x65\xad\x1e\xad\x9b\x55\x52\x22\xce\xa2\x1a\x22\x0f\x54\xa1\x96\x29\x5a\x69\x65\x1d\x09\x32\x6f\x2b\x1c\x3a\x02\xed\xc8\x1c\x4c\xae\x3c\x46\x1f\x58\x41\xc2\x2f\xc7\x79\xaa\x57\x1a\xd0\xca\x43\x45\x14\x29\x47\xf0\xea\xfe\xd0\xa5\x01\x9a\xf5\x4e\xbe\x5f\xca\xa8\xe6\xdd\x5c\x7a\x20\xd1\xb1\x39\x50\x1e\xe5\x80\x4a\x3a\x9b\xe9\x96\xc1\xd8\x66\x5c\xd4\x78\xbd\x57\x98\x95\x51\xad\xeb\x93\x0b\xe9\x25\x21\xcb\x2f\x54\x76\x79\x21\x69\x49\x0a\x2c\x5e\x84\x35\x41\x4e\x2b\xb5\xe0\xed\x7c\xd1\xed\x8a\xb4\x29\x47\x52\x01\xbc\x4a\x4f\xa6\x74\x9e\x8b\x95\xcd\x26\xb5\xce\xc2\x0a\x62\x54\x2b\x4e\x8c\xc0\xb8\xc7\x91\x6d\xaf\x41\x00\x0c\xa6\xdb\xac\xb9\xcb\xb9\x02\x0c\x1f\x29\x83\x04\x39\x46\x1e\x54\x86\x01\x1f\xa3\x0b\x43\x78\x31\xea\xbf\xb5\x37\x25\x66\x32\x02\x0c\x9b\x43\x63\x46\x02\xf8\x56\x1a\xa0\x3e\xc5\x0c\x78\x89\xcd\xcb\x31\x5b\xba\x8c\x0e\xc0\x98\x99\x4c\x34\x9f\x64\x52\xc5\xf9\xd0\xfd\x59\x7a\xf6\x32\x3b\xbd\x13\x7a\xd5\x56\xbb\x8b\x5e\x5e\x85\x05\x3e\x2a\x5b\x80\x47\xe8\x1e\xb9\xac\x9e\x05\x29\x6e\xcd\xc9\x2b\x89\x11\x6f\xc4\xf2\xdc\xa6\x9e\xae\x05\x6f\xab\xd2\xb0\xea\x76\xd2\x19\x24\xad\x81\x50\x9a\x6e\x60\x41\x10\xd1\x16\x02\x50\x8f\xd0\x38\xf1\xcd\x45\xa9\xb7\xb7\x11\xc9\xf0\x62\xe3\xd5\x76\xe9\x2e\xb6\x4b\x20\xe5\x0b\xce\xcc\x3d\x39\xb2\x37\x77\x8d\x29\x8b\x55\xed\xba\x31\xd0\x39\xe3\x02\x9c\xd6\x33\xc4\x78\xbf\x0f\xfd\x23\xbf\xd2\x8b\x68\x9d\xc3\xe3\x90\x36\x6a\x3b\xdd\x72\x9a\xf6\xef\x17\x44\x5b\x6b\xfd\xbe\xc4\x8a\xed\x60\x45\x85\x96\x88\xc7\xba\x33\x52\x09\x0c\x34\xc9\x36\x9f\x42\xc4\x6e\x7c\xad\x74\x9f\x2a\x54\x73\xa9\xd0\x37\x2f\x83\x39\x4e\xf2\xa3\x8d\x11\x9c\x44\x08\xf8\x79\x35\x05\x98\x2e\x30\xe4\x42\xc5\xbe\xf5\xa2\x24\x4c\xd1\x02\x57\x41\x47\xf5\x25\x31\xe3\x62\x4a\xcb\x92\x00\xb4\x1d\x0a\x42\x80\xc9\x19\x69\xe9\x82\xea\xda\x35\x10\x60\x40\xba\x8d\xf5\xfe\x87\xeb\x1b\x88\x61\xf6\xf5\xbd\xce\xe6\x8f\x53\x8d\xee\xf4\x10\x94\x16\x0a\xe1\x7e\x36\xea\x6c\xaf\xa5\xaf\x03\xd2\xa7\xc7\xa3\x77\x4a\xe0\xe8\x59\xf0\xfb\x75\x39\x42\xb5\xca\xc6\xca\xe8\x84\xc7\x3d\xc0\xf1\x99\x8d\xbf\x23\xec\x9d\x69\x7c\x1f\xd0\x5c\xd7\x3e\x37\x52\x6f\x6c\x6c\x33\x23\xf1\x2d\x61\x5a\x94\xad\x2f\xfc\xcc\x73\x68\x51\x01\xee\xae\x14\x6a\x28\x38\xcd\x58\x51\xa9\x4f\xb3\xb9\x18\x21\xdc\xd4\x70\x5b\xc1\xcd\xe3\x9e\x5f\xd8\xcd\xf9\x42\x5f\xd6\x4e\xd8\xa7\x71\x5a\x67\x08\x7c\x66\xf0\x8e\xe8\x59\x3d\xe3\x65\x8a\x8f\x6b\x05\xee\xe0\x95\x1e\x93\x32\x03\xf7\x6d\x69\x74\x1e\x50\x78\xf4\xba\xf6\x57\xf5\xeb\xc0\x39\xe8\x33\x89\x15\x8f\xf7\x77\xe5\xc1\x3a\xb8\x6e\xec\x57\x08\xbb\xb7\x29\x04\xa9\xcc\x75\xbc\xa0\x0d\x9a\x12\x75\x4f\x08\xdb\xac\xa7\x95\xe4\x50\x1e\x39\x47\x4d\x62\x27\x3a\x68\xa8\x81\xd8\x1e\xa3\x49\xef\x98\xc3\xe5\x9e\xce\xec\x76\xc1\xbe\x5b\x15\x51\x60\x78\x39\x31\xe3\x44\xd8\x86\xb1\x02\x40\x2a\x0d\xce\xe5\x07\x4b\xc0\xda\x58\x1b\x73\xf2\xf0\x2e\xb9\x4a\x1b\x61\xf2\xd0\xb4\x7e\x67\x1d\x06\x4f\x32\xca\x4c\x48\x12\x8b\xe3\xde\xa3\x53\xd8\xbf\x6a\xed\xdc\xd9\xad\xef\x85\x73\x0f\x82\x17\x88\xef\xd4\x9d\xe3\x6d\x8a\x6f\xbf\x45\xc4\x04\xaa\x32\xd8\x15\xee\xc9\x43\x79\x99\x85\xf4\x32\x1f\xcf\x35\xca\xc6\x75\x8d\x3e\x02\x0b\x89\x63\x77\xcd\x8c\x34\x97\xa4\x68\x05\x55\x4b\x6d\x0b\x90\x87\x28\x87\x75\x8e\xb3\x72\xdd\xef\x46\x2f\xa8\xe2\xba\x88\x78\x63\x2a\x78\xac\x94\xc7\xee\x3c\x2e\x2d\x03\x5f\x71\xdc\x8e\xbe\x98\xe9\x15\x31\xee\x11\x08\x94\x00\x68\x79\xb5\x63\x2e\xe8\x62\x74\xac\x7f\xb6\xf4\x0e\x57\x5a\x0c\x77\x7f\x31\x81\x0c\xcd\xf0\x8f\x9e\x12\xd9\xae\xb0\xbc\xed\xc2\xbb\x64\xdc\xf0\xb2\x8b\xe6\x9e\xb8\xa9\x83\x8f\xc8\x83\xfa\x02\x51\xed\x20\xa5\x26\x82\xde\xd1\x8a\xcc\xc9\xb9\x2c\xb0\x51\x61\x76\x8d\x8c\x38\x7d\xa4\x5f\xb0\x33\x05\xaf\xa4\xf7\x3d\x61\x97\x9f\x0e\x4e\x98\x39\xa6\x0c\x6a\x3b\x27\x68\xab\xb6\x51\x69\x12\xe4\xa9\x92\xa8\xc1\x42\xef\x42\x97\x08\x6f\xe2\x19\x53\xce\x2b\x5b\x0c\xa8\x5a\x76\xfd\xa2\xf1\x10\x56\x70\xa0\xf3\x5f\x18\xb9\xff\x45\xf7\x42\xa2\x59\x85\xe7\x5d\x3c\x45\x5f\x6c\xab\xfa\x64\x72\x6e\xfe\xa3\x13\x0d\x95\x6e\x5a\x7d\x8f\xdd\xe3\xa5\xec\x58\x0b\x42\xb7\x7b\xfc\x8d\xf2\xea\x08\xe4\x09\x96\xc8\xb7\x1d\x17\xef\xd1\xcf\x37\x47\xe0\xdc\x3f\x3b\x9d\xfc\x72\xfd\xb7\xeb\x5f\x4e\x5f\xbf\xbf\xb8\x8c\x7e\xd9\x25\x57\xc4\x40\x5b\x82\xa0\x6e\xe1\xd3\x69\xf4\x2a\xf8\x8c\xac\x63\x2e\x8f\x01\xb7\x0a\x94\xb9\xac\xe4\xf7\x89\xe0\x7e\xbd\xa7\x08\x8e\xf3\x9e\xe0\xa6\x39\x15\x35\x17\x13\xc1\x67\xb4\x8a\xd6\xf8\x73\x9d\xe0\x95\xee\x38\x98\xef\xa9\xfd\xb8\xbb\x6e\x0c\x8b\xe3\x7a\x36\x49\x70\x65\x50\xe0\x0a\xd4\xaf\x89\x87\x15\xad\x86\xf3\x0f\xe4\x6a\x17\xe3\x0f\xd1\x4e\xf7\xcc\xce\x39\xb2\x74\x37\x22\xff\x3c\x87\x6b\xa0\xe2\x05\xae\xa0\x4a\x74\xda\xc6\x47\x99\x0d\x93\xd5\x7e\x05\x9c\x1e\xd8\x6d\x67\x54\x71\x5c\x9a\x18\x96\x11\xfe\x25\x71\xb5\xcb\x9c\xda\x05\x59\x0b\x49\x1d\xb9\x31\x7c\x0a\xd0\x9e\x23\x21\x69\x04\xf1\x5a\xcd\x4a\xf3\xdc\x94\x6c\x4b\x6a\xf2\x7d\x3f\x07\xc4\x8e\xb2\x47\x97\x95\x7a\xe6\x7c\x33\xf6\x80\xd1\x19\xf8\x53\xc0\xcf\xa9\x0d\xf5\x65\x63\x1c\x9c\xef\xdc\x32\x24\x94\x97\xcd\x64\x3c\xc3\x4b\xf6\x64\x77\x9a\xf9\xf1\x3b\xd2\x24\x83\xdf\x52\x3d\x83\xb3\x4e\x48\xbb\x6d\xe3\x74\x10\x93\x11\x9e\xb8\x1f\x7f\x84\x42\xe6\x4e\xfe\x67\x70\x4e\xf9\x25\x46\xe3\xe0\x68\x35\x82\x8c\xd7\x8f\x57\xaa\xbd\x7f\xd5\x32\x45\x6b\xe2\x18\x46\xc7\x2b\x3a\x91\x30\xbf\x3e\x90\xbe\x9e\x4f\x96\x8d\x8e\xd0\x0f\x0c\xce\x2b\x23\x25\x1a\x23\xc6\xbb\x25\x22\x6c\xc6\x45\x01\x8e\x87\x9d\x6e\xf0\x02\x37\x78\x4a\x2b\x9a\x22\xcc\x73\x6d\x70\x28\x8f\x19\xf4\x07\x30\x40\x65\x79\x52\x0a\xde\x98\x9b\xd8\x51\x7f\xa5\x67\x65\xf6\x29\x66\xc2\x4a\x4e\xd6\x13\xd5\xeb\xc8\x5c\x60\xa6\x3a\xfc\xde\xda\xc6\xf9\x77\xd4\x41\x72\x28\x01\xb8\xcc\x57\x68\xf6\xb4\xd4\x32\x23\x5c\xb6\xe4\x73\xb5\x6f\x45\x6b\xce\xdc\xe0\x02\x8e\x19\x34\xf9\x70\x7d\xf1\x7f\x56\xce\x4d\xbc\x6a\x67\x9e\xfd\x2e\x59\xa1\xe5\x41\xb6\x6d\x73\x65\xeb\x7c\x0f\x1b\xe7\xeb\xde\x38\xde\x41\xb4\x73\xbe\xed\xab\x36\x8c\x38\x53\x16\x74\x0d\xd5\x49\xba\xce\xc4\x53\x53\xf6\xdf\x1a\x02\x74\x05\x41\xfa\x2b\x4c\x51\x80\x4b\x07\xde\x5a\xc5\x4d\x29\x6b\xab\x76\xa5\x95\x62\x08\x6f\xd7\x19\xae\xe4\x97\x7a\x45\xa6\xb8\x76\x1a\xc1\x8b\xf7\xbc\x65\x79\x08\xbc\x13\x76\x9c\xef\x08\x2a\x09\xe3\xca\x7a\x53\xc0\x96\xe0\x33\xf8\x2d\x32\x39\x6b\x41\x6d\x8e\x9e\x9e\x93\xa0\x66\xdd\x04\xaa\x95\xc7\xaf\x38\x3d\xdc\xd8\x2f\xad\x5c\x03\x46\x5a\xbd\xaa\x4b\x61\x9b\x25\x20\x19\x04\xc1\xa5\x01\xd2\x60\xb5\x30\xa4\xf1\x35\x96\xb7\xa4\x34\x1f\x24\x12\x66\x7a\x72\x4c\x80\xc2\xb9\x99\xbe\xd1\x93\xeb\x38\x4b\xc0\x21\x6c\x40\xb6\xc0\xa0\x99\x62\x8a\xed\xf4\x34\x24\x08\x76\xbd\x08\x1f\x58\xb5\xbc\xe2\x5c\x7d\xef\x6b\xe2\xef\xfa\x64\xfc\xd5\x43\x61\x43\x27\x26\xf8\xa5\x31\x74\x79\x0c\x1b\x07\xe4\x62\x50\xc9\x3f\x55\x2c\xea\x05\xf9\x77\x95\x8a\xa2\x65\xa7\xf2\x8d\xe0\x6d\xb4\x0e\x97\xd3\xde\x7c\x73\xf1\x1a\x2e\xbe\xd6\x72\x2a\x33\x25\x96\x0d\xa7\x4c\x39\x8f\x57\xc6\xa0\xcd\x0f\x96\xbd\x3a\x94\x6c\xc9\x44\xb5\x08\xbd\xc7\x4b\x84\x2b\xc9\xbd\x4b\x8d\x6d\x0a\xb7\xba\x58\xae\xfe\xf5\x94\xab\xc5\x5a\x10\x37\x36\x75\x47\x3f\xeb\xed\x8d\x02\x6a\xe6\x0e\x10\x43\xd9\x5a\xb3\x0a\x58\x5d\x1a\x41\x0a\x52\x12\x56\x7c\xa9\x27\x62\xd7\x4c\xc1\x70\xaa\x2e\x39\xd3\xe2\x75\xd7\xe7\xea\xc2\xfb\x27\xed\x6a\x84\xa7\x08\x5c\xd9\x36\x88\x88\x81\x55\x1b\x84\x6b\x2b\x53\x90\xa7\x17\x33\x88\x7a\x9a\x4d\xf7\x97\x76\x4a\x2a\xbd\xd8\xb4\xaa\x1c\xda\xde\x40\x13\x68\x8d\xe7\x04\x61\xe5\x0f\xa1\xe2\x88\x30\xd9\x0a\xbb\x6f\x22\xb3\xaa\xf4\xe3\x13\xc2\xec\xd0\x7e\xb8\x78\x8d\x5e\xa2\x43\x3d\x36\x83\x18\x9c\x61\x5a\x01\x51\xb7\xc3\xea\x86\x36\xc0\xcc\xe5\x94\x25\x4d\x01\xc8\x11\xc4\x85\xb9\x5a\x46\x88\x71\x24\xdb\x62\x11\x64\x1c\x78\x8f\xb0\xad\xda\x94\x44\x44\x32\x88\x9d\x7c\xf7\xe1\x0f\x92\x44\x43\x64\x73\x5e\x87\x3f\x3c\xe3\x75\x18\x9a\x88\xfa\xf8\xf7\x17\xcc\x9c\xd5\x9a\x28\x5c\x62\x85\xed\x35\xe9\xbe\x30\xec\xda\xe1\xb2\x4c\xb8\x2c\x25\x79\x47\x59\xfb\x60\xea\xa2\xec\x45\xd8\xe3\xfa\x1c\x7a\x84\x0a\xb7\xd0\x3c\x88\xdb\xb9\x08\x45\x86\x14\x8d\x8b\xde\x31\x1a\x3d\x62\x75\xc3\x2d\x81\x0d\xf7\x26\x64\x51\x62\x56\xf2\x7a\xad\x93\x33\x2e\x10\xc1\xc5\x22\xba\x37\x01\x6a\x64\x38\x98\xf6\xf9\xf7\x0e\x08\x41\xfa\x6a\x36\xdf\xfe\x3b\x48\x86\xa5\xd2\xef\x5c\x93\x1d\x5b\xe1\x29\xa9\x2c\x2d\xae\xe1\x4a\xcf\x78\xc2\x32\xf9\xc0\x05\xcf\x08\x89\xb9\xe2\x06\xc9\x85\xfd\x44\xe8\xd7\x7f\x11\xf3\x90\x15\x7c\x71\x63\xd1\x25\xdd\x3c\x80\x0f\xf4\x4b\x98\x87\x36\x41\x41\x44\xab\xf3\xa0\xb5\xcd\xfe\x3c\x80\xfe\xb5\xef\xf3\x20\x49\x51\xf0\xba\xd9\x13\xa4\xe4\x8d\x41\xe1\xeb\x1e\x7d\x2e\x2a\xb2\xff\x65\x9c\x04\x77\xb6\xd5\xae\xb0\x32\xf7\xa0\x2b\x79\xf5\xbf\x83\xeb\x1c\xa4\xdd\xea\x1d\x6f\x5b\x4f\x46\x64\xfa\x16\xed\x0b\xff\x1d\x6f\xbc\x01\x86\xd9\x7b\x9e\x1d\x86\x19\x30\xe6\x63\x70\xcf\xf7\x20\x91\x5f\x03\x18\x53\x1b\x01\x30\xaf\x84\x01\x0b\x50\x83\xd5\x62\x64\x33\x56\xef\x88\x13\xcf\xb7\xc6\xe3\x75\x00\x12\xc7\x75\xc8\x89\x9b\x0e\xb3\x6a\x98\xf4\xb3\x62\x37\x37\xe1\x35\xcd\x77\x2e\x3f\xdc\x84\x3c\xfa\x98\x2d\x0d\x47\x64\x02\xab\x99\x79\xf6\x4f\xad\x78\x4a\x4c\xe7\xea\x2a\x3e\x35\xa4\x33\xe9\x7d\x9b\x11\x9d\xcf\x77\x4a\x3f\x0f\xe5\xb9\x8a\xf1\xcc\xda\x85\x55\xc0\xe7\x7a\x1b\x19\x56\x2e\xf9\x08\xd8\xab\x73\x8f\x1c\x20\x7f\x35\x3d\x72\x56\x76\xe1\x48\x0b\x65\xe8\x04\xc1\x55\x95\x05\x93\xb0\xc9\x0b\xe2\x4e\x81\xa7\x92\x5f\xf7\x06\xf4\x6b\x9a\xa6\xb4\xfe\x09\x0f\xc6\x97\xed\x89\xa8\xb4\x45\xf1\x85\xfb\x21\xe6\xb5\xc4\x67\x82\x94\x06\x27\x75\xdd\x90\x62\x5f\x6e\x8b\x37\xef\xaf\x4f\xfb\x3d\x03\x5d\xd8\x16\xce\x20\xf0\x7b\x84\xcb\x9a\x4a\x09\x01\x1f\x32\x5d\x70\x7e\x9b\xd4\xe4\xa1\x4b\xb5\x9d\x53\xb5\x68\xa7\xc7\x05\xaf\x83\xac\xdb\xb1\xa4\x73\x79\x62\x25\xca\x58\x4f\xdc\x11\xa2\xac\xf2\x99\xca\xe0\x2d\x04\x2e\xb0\x78\x2a\xb9\x70\xf0\xa8\xf0\xa3\x87\xad\x07\xf9\x29\x1e\x9a\xbd\x3e\x3d\x50\xdd\x04\x36\xef\xce\xb5\x8e\xf5\x5d\x95\x56\x6d\x70\x65\x67\x3d\x32\xf6\xb0\x52\x87\x8d\xe2\x6c\x9c\x47\x63\xbc\xee\x7c\x92\xac\xd2\x5f\x10\x99\x84\x80\xcd\x79\xe6\xde\x76\x5d\x0a\xb9\xf4\xe8\xac\xc7\x08\xd5\xcf\xb9\x87\xf0\xf6\x81\xfe\x4b\x07\xcb\x3c\xc8\x55\x5c\xe6\xb4\xaa\xf4\x42\x62\x4b\xbc\x16\xa0\x3b\xc1\x34\xe9\x33\xda\x19\xce\x5d\x6d\x2c\x84\xa3\x80\x8b\x24\x4d\x28\x18\xde\x33\x7d\x19\x58\xce\x0c\xbd\x81\xa0\x6d\x8c\x6a\xfa\xa0\x7b\x18\xb6\xd8\x27\x89\x85\xc0\xff\xe6\x5f\x27\x14\xb0\x46\x00\x3e\xf0\x9c\xe9\x23\xbd\x42\x61\x23\x2e\x39\x5a\xe9\x6b\x4b\xff\xe2\x92\x28\x6d\xa8\x99\x79\x0b\xa3\x0f\xda\xb0\x12\x6d\x86\xc3\x90\x12\x19\x46\x61\x74\x38\xab\xa4\x48\x3c\x0f\x10\x29\xb6\x7d\xd2\x3a\x88\x53\xde\x9e\x2b\x72\x8c\x36\xa4\xef\x3c\x5b\x04\x19\x7d\x7e\x14\xf9\x09\x63\x55\x68\x5f\xe2\x55\x89\x52\x3f\xe4\xfa\xdd\x19\xcf\x4a\xc8\x37\x4c\xd7\xc1\x4b\x13\x5e\xae\xd1\x10\x03\x99\x31\xc5\x55\x7c\x21\xd7\x8b\x59\x48\xdd\xc9\xb8\x75\x8f\x98\x0a\xe2\x06\xa7\xff\x40\x8a\x56\x91\xd2\xb2\x91\x5b\x97\xb2\x61\x32\xee\xf7\x26\xba\x07\x2e\x49\x7f\x4a\x00\xa0\x24\x47\x5d\x29\x36\x6b\xeb\x78\x7e\xd7\x11\xfa\xbf\x20\x25\xa5\x23\xd4\xaa\xe8\x1d\x61\x44\xca\x89\xff\xf3\xd8\xa9\x00\x1c\x75\x81\x99\xb3\xad\xf4\x99\xb6\x1e\x6e\xcb\x3a\x6e\x79\x3c\xa6\x04\x35\x58\xe0\x5a\xdf\xc1\x12\xd9\xe5\x99\x92\x39\x35\x69\x81\xc1\xa5\xe8\x69\xcb\xe3\x48\x75\xc1\xb0\xa1\x0a\xd5\x74\xbe\x30\xa7\x05\x61\x54\x71\x36\x47\x0e\x37\x56\x71\x5c\x22\x10\x2c\x5c\xa0\x7b\x2c\x6a\xad\x0b\xe0\x62\x01\x20\x34\xcc\x50\xd9\xea\xf3\x80\x80\x64\x7b\x39\x96\x0a\x2b\x62\xc9\xf0\xa2\x7d\x70\x6e\x9a\x76\x50\x22\xf6\xa9\xcb\xdf\xef\x98\x4f\x47\x9f\xb4\x2c\x5e\x90\xf3\x07\x52\xf8\x63\x6d\x18\xa7\xeb\x1a\x08\x03\xb9\x3b\xce\x8e\x2d\x2e\x59\x19\xdc\x13\x53\xd9\x8e\x70\x5f\x74\x93\x33\x3b\xe1\xd4\x59\x9f\xe6\x47\x6d\x8f\xf6\x17\x41\xba\x20\x56\x50\x34\x09\xd8\xb1\xb9\xb8\xd5\x27\xd7\x70\x04\x71\xe1\xab\xf5\x27\x75\xcb\xf5\x03\x28\xb3\x39\x57\xe8\xf0\xe0\xe4\xe0\x68\x6d\x2f\x1c\xc8\x30\xcd\xc0\x64\x44\x77\x03\x92\xb4\x6e\xaa\x25\x8c\xe1\xc0\x94\xfc\x4e\x24\x30\x74\x80\x55\x5f\xfe\x52\x2e\x48\x55\x8d\x90\xd4\xea\x2f\x76\x35\x44\xcc\xa7\xfa\x4b\x4a\xb4\x85\x71\x93\x1d\x1e\xfc\x7a\x30\x42\x44\x15\x47\xe8\x9e\xb3\x03\x65\x02\x1e\xe8\x06\x6c\xc8\xa4\x3e\xf9\x4e\x2c\x79\x8b\x18\x21\xf6\xec\xf8\x62\x55\x05\xd6\xe6\x4f\x6b\x74\x74\x43\xba\x41\xaa\x2a\x4d\x9f\x3b\x7f\xa0\x4a\xab\x22\xaa\x05\x37\xc5\x4b\x63\x29\x10\xe0\xa1\xc7\x12\x6e\xba\x93\x05\xc1\x95\x5a\x2c\xbd\xf5\xf2\x2f\x22\x38\xd4\x27\x65\xf6\x37\xe9\x3a\xd4\x1e\xa4\x8d\xee\x6f\x02\xa7\x56\x30\x5a\x41\x6e\x16\x82\xc8\x05\xaf\x76\x9e\xc6\xf9\xde\x96\x7b\x2b\x38\x93\x5a\xa6\x68\x13\xdb\xf6\x51\xfa\x0c\x3a\xa3\xb3\xd8\xfa\x0a\x1c\x4e\x99\x20\xa5\x55\x96\x6c\xc9\x8b\x05\xbe\x03\x4d\x41\xeb\x73\xa4\x4c\x31\x4d\x42\x9b\xe8\xf7\xc7\xbe\x87\x3e\xed\xee\xd5\x9e\xc0\x36\x23\xb9\x23\xe7\xa2\xc9\x73\x4b\xbf\xb9\x9a\x9c\xf5\x6e\x69\xf8\xe0\x2d\x1c\xe3\xb3\x05\x29\x6e\xaf\xd2\xaa\xb9\xee\x09\xb4\xa0\xe1\x62\x97\x8a\x81\x6e\x3e\x9b\x56\x30\xe1\x42\x21\xd6\xd6\x53\x22\x9c\x43\x61\x0e\xab\x48\xc4\x1d\x2d\xc8\x31\xba\x34\xbf\x73\xc1\x79\x57\x7d\x18\xb3\x39\x41\xaf\xf4\x81\xf8\xe3\xb7\xdf\xfe\xfe\xdb\x74\x19\x9d\x4e\xa4\x9a\x87\x44\xd5\x0e\x7c\x5f\xd4\xae\x6b\xd3\x9d\x4d\xce\x66\xdb\x53\x30\xea\x2a\x5c\xf8\xb5\x99\x6f\x3e\x74\x69\x5e\x49\x49\x08\xda\x10\xae\xd0\xa2\xc3\xfc\x67\x5a\xf1\xe9\x49\x8d\xa5\x22\x42\xdb\x38\xf6\x5a\x1f\x03\xdd\x30\x65\xf3\xe3\xba\x3c\x3a\x4e\x8b\x82\x3b\xb3\x7a\xad\xa4\x5c\x8f\x66\xe6\x91\xf2\x70\x7a\x52\x76\xee\x82\x47\xae\x97\xdf\xa1\x17\x71\xd5\xc4\xf4\x12\xbc\x21\x79\x32\xd1\xde\xde\xdc\x4c\xde\x10\x15\x0a\x6c\x06\x1f\xa2\x37\xe7\x37\xbe\xdc\xb8\xde\x5d\x26\xa9\x69\x90\xda\x29\x52\x7b\xc1\xd3\xea\xcd\xe7\x8e\xbb\x18\x51\x02\xb5\xd1\x18\x23\x85\x5e\xe8\x51\xaf\xb2\xad\xc3\x21\x5e\x4c\x8e\xd1\xdf\x78\x0b\x2a\x17\x9e\x56\x4b\x74\x8f\x0d\xa3\x41\x1c\xa5\x74\xf7\xbc\xd0\xdd\x78\xa1\xa5\x96\xde\xd5\x6f\x09\x2e\x4d\xad\x4a\x70\xed\xec\xfc\xac\x06\x7d\xca\xb6\x6c\x67\xad\x54\xbc\x46\x0b\x3b\x54\x33\x87\x5d\x41\x7f\xa3\x1b\x99\x23\x08\xb1\x1f\x89\x04\x69\x8c\xb5\x64\xff\xe6\xab\xb0\x85\xd6\xa4\x90\x99\xe7\xa0\x1a\x10\x46\x45\x38\x55\x56\xd1\x07\x17\x26\xb5\x32\x2a\xda\x25\xd6\x3d\x59\xaa\x8a\xa0\x4c\x95\x45\x10\x08\x29\x7d\x28\x93\x5f\x92\x1e\x84\xcc\x53\xa3\x44\x3f\x2c\x31\xbc\x66\x9e\xbc\x15\x12\x90\x0d\xb5\xd9\xcd\x65\x00\x38\xba\xa3\xa9\xac\x84\xc8\x39\x93\x7d\x01\x55\xcc\x38\xa3\x85\x09\x67\xa0\xb6\xe1\x0c\xf1\x56\x35\xad\x02\x57\x50\x81\x25\x19\xdf\x61\x41\xb5\x40\xd5\xed\x77\x7f\xd8\x32\x7d\xda\x15\xe7\xe0\x27\xf1\x41\x67\xd3\xe3\xf4\x6e\x66\xd2\x66\x90\x2b\x80\x91\x79\x85\xd7\x16\x27\x7d\x47\xa3\xbd\xf6\xc1\x20\x53\x43\x7c\x91\xcf\xac\xc3\x6a\x01\xc8\x3e\x88\x65\x39\x60\x28\x08\x4e\x6d\x36\xec\x41\xe2\x4d\x56\x2b\x36\x51\x24\x40\xbc\x9d\x8b\x15\x3b\x58\xf7\x70\x7d\x0e\x33\x61\x4d\x9e\xde\xac\xb6\xc3\x72\x2d\x60\x86\x2e\x4e\x2f\x4f\x7f\xb9\xfe\xf1\xec\x97\xcb\xd3\xf7\xe7\x29\xaf\x4e\xae\x1d\x9f\xb3\x7a\x7c\xb6\xfa\xf1\x4f\x50\x41\xde\x3d\xb2\x58\x90\xfd\x81\x99\x5c\x43\x6f\x42\x52\x32\x6b\x03\x04\xf5\x90\xd3\x58\xea\xd0\x8a\xd3\x54\x0b\x9e\x9d\x4a\x1c\x8b\x2a\x78\x4d\x2a\xbc\xbc\x26\x05\x67\xe5\xce\xd1\xd9\x97\x5e\xd8\x48\xd3\x21\x5f\x06\x9a\xac\x30\x66\xb9\x42\xb0\xb6\x78\xb5\xc3\x07\x84\x90\x06\x33\xbe\xe8\xa8\x35\xda\xbf\xc8\x35\xda\x1b\xf7\x78\x43\x04\x05\x44\xd0\x3e\xec\x9a\xb7\xfc\xde\x56\x74\x3f\xa4\xcc\xed\x9c\xa3\xc0\x4b\xd3\x85\x47\xd2\xd9\xd4\x14\x47\xaf\x5e\xba\x46\xbe\xbe\xb8\x87\x45\xfa\xec\x75\xe4\xcb\xf6\xf1\xd3\xa1\xaf\x0e\xb6\xd4\x0f\x7f\xa5\xe0\x87\xd0\x8a\x18\x7f\x75\xec\xf3\xd4\x5e\x41\x7f\xbc\x28\xc2\xac\x74\x90\xb3\xaf\x6f\x9f\xa8\xa2\xb9\xe6\xc5\x6d\x26\xb7\xeb\xcd\xd9\xc4\xbc\x6d\x05\xcf\x62\x6e\x60\xad\x65\x72\x84\xf5\xb7\x40\x01\x1d\x9c\xae\x7b\xe3\x74\x3d\x30\x69\x5d\xb8\xfa\x6e\x6b\x07\xea\xc1\x60\x6d\x75\x8f\x53\x7c\x44\xbf\x02\xca\x60\x6d\x3d\xf2\x0c\xd6\xd6\x16\x8f\x49\x22\x01\x30\xe8\x1b\x81\x0b\x32\xd9\x27\xe5\xcd\x09\x10\x54\xb6\xc2\x96\x95\xf3\x3a\x9c\x17\x17\x8c\x90\xd2\xc8\x0f\x3b\x14\x82\xe6\x7a\x24\x06\x1e\x0d\x3e\xc4\x0e\x58\xdc\x8a\x04\x35\xef\x66\x61\x5f\x6d\x55\x5c\x17\x64\xde\xd4\xbb\xce\x36\x69\x3c\x19\xba\xab\x1a\x62\x8f\x93\xee\x3c\x94\x5a\x27\x2c\xde\x9d\x8e\xc3\x15\x44\x92\xce\xf5\x74\xd9\xca\xd0\x06\x23\xec\x4b\xef\x75\x1d\xd1\xad\xce\xb8\x28\xe8\xb4\x5a\xa2\x05\xae\xb4\xb1\x74\x4f\xd5\x02\x61\x74\x4b\xab\xca\xbe\x26\x7e\xa2\xae\x89\xcd\xd5\x34\x1a\x4d\xc5\xd9\x1c\x26\x03\xdb\x9c\x8c\x87\x86\x14\xba\xcd\xa2\x22\x98\xb5\x8d\xe9\xa7\xd6\x8f\x96\xbc\xcd\x90\x96\xe1\x02\xdf\x5e\x9f\x62\xd4\xd2\x8f\x98\xc2\x6d\x1f\xdd\xf3\xfd\xe4\x5a\xf4\x41\x2d\x88\xb8\xa7\x92\x98\x42\x72\xd1\x7d\x32\x7d\xe9\x97\x91\x33\x9f\x79\x0a\x15\x9b\x39\xa8\xb7\x05\xa4\xb2\x46\xb7\xf5\x23\xbc\xd7\x89\x56\xc6\xd9\x98\x91\xb9\x21\x6a\xb0\x02\xcd\x20\x3a\x4d\xfb\x06\x3f\xe8\xb3\x0d\xa4\xe2\x0d\xa2\x75\x4d\x4a\x6d\x1f\x57\x4b\x74\x47\x71\x74\x4f\x80\x14\xa2\xdb\x51\xe8\x90\x71\xc4\x1b\x7d\x75\xb5\x8c\xaa\x25\x44\xf4\x16\xad\x42\x25\xbf\x67\x09\xf9\x56\x37\x16\xe6\x80\xd1\x94\x28\x6c\x7d\xe0\xfa\x10\x78\x4e\x74\xa0\x3b\xd7\x67\x0f\x92\x04\x6e\x36\x6e\x00\x4f\x93\x3e\xc7\x2a\x41\x4a\x6c\xd0\xe6\xcd\x7a\x7e\x7c\xdb\x51\x69\xe3\x75\x89\x3c\xcc\xfb\xc1\x6c\xa8\x4f\x34\x6f\xd5\x9e\xdc\x23\x8f\xb9\x8e\x0c\xc5\x45\x60\x24\xd2\x9a\x48\xc4\xdb\x4c\xf5\x26\x5e\xd9\xe6\x72\x5a\x78\x83\xdf\x69\xe3\x23\x55\x49\xa3\xaa\x0e\xe7\xd8\x62\x8f\x90\xf7\xdb\x3c\xdc\x80\xbf\x72\xda\xce\x66\x44\xc0\x4d\x07\x1d\x5e\x83\xdd\xfb\x3a\x5e\xee\x0e\x8b\x73\xde\x5a\xc0\x17\x51\x23\xa8\x1d\x60\xc9\x24\x1e\x69\xd2\x92\x6c\x42\x99\x5e\x41\x24\x70\xc1\x33\x74\xfe\xe1\xfb\xb8\x2d\x9a\xa3\xb2\x40\x5a\xca\x2a\x8c\xf3\x03\x8b\xc3\x24\xe6\xdd\x0f\x9b\x58\x5f\xec\xb6\x28\x2a\x2e\x6d\x7a\x34\xac\x4b\xb1\xc0\x8c\x11\xe7\x8c\xa2\x0a\x3c\xd9\x53\x42\x18\xe2\x0d\x31\xa0\xbc\xa8\xce\x60\x24\x29\x9b\x57\x04\x61\xa5\x70\xb1\x38\xd6\xbd\x63\x6e\x2f\x74\x79\xc8\xf6\x13\xa9\x04\xc1\xb5\xd9\x13\x82\xd4\x98\x9a\xe6\x11\x2e\x04\x97\x12\xd5\x6d\xa5\x68\xe3\x5f\x16\xe7\x45\x24\xc0\x08\x21\x4d\x5a\xaa\x5b\x2b\x48\x2b\xe9\x12\x9e\x47\x5d\x0f\xed\xf0\x79\x58\xac\x08\x5c\x67\x23\xfd\x5b\x52\x37\x6a\xe9\x13\x13\xe3\x6c\xa0\x19\x15\x52\xa1\xa2\xa2\x84\x29\x3b\x32\x43\x39\x08\x7d\x18\x39\x75\x9a\xd9\x19\x91\x76\x4a\x58\x09\xc6\x77\xa3\xa4\xc9\xbf\xf3\x9d\x70\xaf\x2a\xa9\xb4\xbe\x0e\x19\x97\xfd\x87\x5d\x65\x1a\xb3\x71\xdc\x8c\xc0\xd6\x71\x0a\x8e\xe9\x91\xfd\x28\xe8\x42\x50\x67\xbb\xcb\x9d\x4c\x93\x2b\x50\x3e\xc6\x9d\xeb\x51\x8f\x73\xa0\xb3\x2d\x20\x15\x66\x4d\xea\xc0\x86\x62\xe4\x4e\x9f\x03\x52\x10\xad\x8a\xe2\x8c\x42\xe6\xd9\x65\x4c\xa0\xcb\xbd\x27\x52\xe2\x39\x99\x44\xc2\x11\x72\x08\x9c\xce\xd1\x06\x38\x86\x6e\xdb\x2c\x88\x21\xba\x52\x3c\xf8\x24\x4c\xf2\x0a\x8d\xc7\xda\x0c\x24\xaa\x07\xce\x68\xba\x17\x54\x29\x02\xbb\x14\x2a\x39\x01\x00\x6d\x95\xbc\xb3\x9f\x5c\x16\xd5\x9e\x9d\xf4\xb0\x3d\xad\x7e\xb0\xd2\xa4\x69\x4d\x09\x9a\x0a\x4a\x66\x68\x46\x21\x6f\x0c\x32\xaa\x46\xa6\x0a\x01\x06\xdc\x2e\x96\x92\x08\x18\xb6\x75\x0b\xb8\xe1\xc7\xf5\xe7\xaf\x76\xfc\x4a\xb4\xac\xc0\x41\x89\x4e\xe0\x16\xa3\x33\x34\x87\x2c\x2e\x6b\x04\xff\xe1\xe5\x7f\xfe\x11\x4d\x97\x5a\x5f\x03\x43\x4c\x71\x85\x2b\xd7\x01\x54\x11\x36\xd7\xab\x08\x22\x37\x4e\x6e\xf4\xf8\xa9\xfc\xe2\x54\xb4\xa6\xca\x4c\xd0\xab\x6f\x6e\xa7\x49\x47\x0f\xe4\xe3\x49\x49\xee\x4e\x82\x2d\x34\xae\xf8\x3c\xee\xad\x67\x39\xb2\x89\x93\xfc\x6c\x1b\x4e\x34\xaf\x68\xb1\xdc\xd5\x99\x76\xc5\x4b\xd0\x82\xdf\x1b\x67\xce\xfa\x51\x0d\xa8\x5e\x1a\xde\xb4\x15\x4c\x1c\xfa\xde\xf3\xf3\xb5\x92\xac\x52\x1f\xa5\x3a\x09\x03\x69\x07\x41\x54\xdb\xec\xca\x9d\x63\x53\x18\x5d\x37\xb9\x25\x9e\xb0\x31\x37\x5f\x87\x24\xda\x1b\xf7\x3d\xae\xaa\x29\x2e\x6e\x6f\xf8\x3b\x3e\x97\x1f\xd8\xb9\x10\x5c\xf4\xc7\x5c\x61\x7d\xa7\x2f\x5a\x76\x0b\x55\x74\x3b\x32\x5a\x3e\xb7\x98\x42\xc7\x1f\x10\x8c\x2e\xaa\x33\x6e\x94\x86\x1e\xd4\xa9\x24\xce\x07\xd7\xb5\x4c\x1e\x68\xe7\x68\x63\x88\xe8\x3e\xc7\x26\xe0\x93\xde\x38\x64\x78\xb4\xbf\x79\xf9\x87\x3f\x19\xe1\x82\xb8\x40\x7f\x7a\x09\x29\xc7\x72\x64\x2e\x00\xb8\x81\xb5\xaa\x55\xe3\xaa\x8a\x8d\x12\x84\x22\xe0\xfb\xe8\xe2\xd4\x7b\x70\xe4\xd5\xce\x4e\xf7\x67\x9b\x8c\x37\x37\x7f\x03\x7b\x91\x2a\x49\xaa\xd9\xc8\xb0\xbd\x78\xb7\xd6\x01\x68\x57\x07\xf6\xca\x8b\x67\x0a\xda\xbd\xd1\x76\xc7\xab\xb6\x26\xaf\xc9\x1d\x2d\xe2\x02\x98\xbd\x55\xe9\xbd\xcd\xb9\xe9\x2b\x2a\x81\x04\x68\x5a\xf1\xe2\x16\x95\xf6\x97\x01\x54\x7e\xb5\xaa\x76\xfc\x2c\xc4\x26\x0d\x24\x24\x0b\x3c\x3a\xfe\x5e\x9a\x40\x8d\x9b\xc6\x33\x94\x08\x7c\xdf\x9b\x0c\x10\x4d\xc0\x8e\x9a\x18\x46\x4c\x0e\xa6\xa7\x86\xd2\xc7\x76\x44\xfa\x9a\x8a\x7e\x45\x74\x6e\x41\x7a\x24\xbe\xeb\x7d\x7c\x1c\xb3\xb7\x21\xba\x17\xba\xd3\xd0\xc0\xbf\x0d\xdf\xc2\x1a\x33\x96\xa7\x1c\xf2\x1b\xc3\x68\x90\x7a\xfb\xc0\x2d\x13\xef\xbe\xcc\x10\x0c\x4d\xcb\x91\xe8\xcd\x0b\xf3\x41\xe8\x1a\x2b\x6b\x1f\xb9\x28\x3b\x46\x0d\x11\x92\x4a\xad\x3a\xfd\x08\x07\xea\xac\xc2\xb4\x0e\xc2\x77\xbb\x9a\x84\x75\x44\x7d\x8d\x9b\xf1\x2d\x59\x46\x6e\xb8\xc4\xe3\xf2\x18\xc0\xbf\xc6\x4d\xe4\x3d\x00\xa5\x6b\xd3\xaf\x81\xc8\xcb\x79\xc2\x4b\xdb\x0f\xb8\x1e\x4c\x49\xe2\x27\x31\x63\x33\xea\x40\xbb\xbe\x72\x7e\xec\x16\xae\x7f\xe3\xe8\x4f\xfc\x95\x63\xbe\xf5\x35\x5d\x34\x30\xbe\x2f\xf5\x9e\xf1\x9d\xcf\x24\x4e\x93\x90\x4e\x70\x3b\xd9\x9d\xd1\xbf\x8e\x7a\x0e\x2d\x73\x32\x03\xd3\xd7\x3a\x9a\x8e\x4d\x51\x80\x84\x0e\xe8\xa3\x68\x1b\x45\x07\xdf\x1d\xec\xf4\x8e\x33\x2b\x23\x78\x83\xe7\x60\x99\xee\xc3\x02\xad\xf6\x29\xe4\xa0\x5d\xf0\x7b\xf3\x7b\x83\x2e\x69\xec\xb7\x48\xd9\x11\x99\x2f\x78\xd2\xea\x18\xe4\xa0\xdb\x11\xd6\xba\x36\x5c\x85\xf7\x78\x89\xb0\xe0\x2d\x4b\x4a\x83\x86\xc0\x88\x0f\x9c\xbd\x5f\x19\xec\x25\x67\xc4\x05\xe9\x53\x5a\xb9\xe9\x38\xcc\xa9\x34\x78\x05\xca\xd0\xab\xe3\x57\x2f\x93\xfb\x7e\x45\x8a\x56\x48\x7a\x47\xae\x6c\x8d\xf3\x20\xa8\x72\x31\x9b\x70\x29\xe9\xb4\x82\xc4\x2d\xc5\xd1\xb9\x29\x00\xbf\x3e\x50\x0f\x1c\x81\x11\x73\x11\xb2\x95\x26\xf4\xf0\xd0\x9c\xe0\x10\xf0\xa9\x1b\x48\x40\x7d\xec\x97\x26\x09\xeb\xba\xa2\x49\x5e\x7a\x4d\xd2\xdc\x7b\x3b\x1d\xab\x2b\x7c\xbf\x0f\x92\xe4\xbd\x8d\x0d\x74\x95\xed\xa9\xab\x9c\x0c\x1f\xdd\x0b\xaa\xec\xe1\xbe\xa7\x92\xa0\x43\xf0\x4a\xac\x6c\xc6\x24\x82\xe6\xd0\x87\x95\x58\x01\x3f\x07\xc1\xb2\x58\x3d\xba\xfb\xb0\x4a\xeb\xf2\xa4\x43\xe0\xdf\x5b\x07\x56\xb7\x82\x56\xfa\x77\xf7\xf2\x02\xb3\xb2\x4a\x92\x19\x7e\x56\xaa\x65\x12\x17\xce\xc5\x0c\x85\x22\xd1\xc6\x2f\x83\x6a\x12\x0b\x2c\x11\xe3\xa8\x26\x18\x00\x9a\xfa\x76\x71\x52\xb0\xc7\xd5\x9c\xaf\x0f\x66\xb3\x9b\x6b\x2c\xbc\x10\xac\xb8\x7e\x4d\xa5\x15\xcf\x5a\x8e\x58\x0b\xc4\xc0\x3a\x6a\x5c\xa6\xa4\x76\x07\x73\xda\x2d\xde\x71\x07\x9a\x5c\xed\x49\x77\x71\xac\xf4\xe5\x29\xfa\x31\xb2\x25\xc8\x75\xf3\x2d\xe0\x04\x37\xb8\xe5\x3a\x90\x4c\x52\x34\xdb\x3c\xab\xc3\xf5\xd7\xe2\xda\x58\x37\xf7\xd8\x77\x38\xa1\x0f\x9f\x1e\xea\x28\x90\x85\x0e\x23\x6a\x42\xea\xb6\x06\x8a\xcd\x78\x4c\x63\xf2\x76\x41\x09\xef\xee\x99\x13\x46\x04\xb6\x71\x05\x07\x11\xb5\xe4\x2b\x58\x72\x96\x7a\x20\x3e\xb1\xe1\xb4\xbc\xff\xb4\x9a\x62\xfe\x2c\xa1\x23\xa0\xe7\x1c\x72\xb1\x72\xda\x6d\xc4\x64\x93\xc6\x92\x73\xd4\x2b\xd4\x5c\x66\xf3\x07\x9c\x9f\x7a\x51\xfe\xd9\xd2\x3b\x5c\x11\xc3\x61\xef\x44\xc3\x4e\x95\x09\xd9\x4e\xf7\xd5\x6c\xb4\xf6\x21\x98\x1d\x9b\x41\x0f\x8f\x5a\x90\x99\xf4\x89\x17\x2f\xd0\xa1\x69\xe3\xc0\x90\xec\xee\x56\xc9\xb5\x6b\x75\xfe\xd0\x24\x54\x6e\xcd\xb7\x5e\xe7\x0f\x0d\x06\x9c\x46\xb3\x17\x0b\xf7\xdf\x64\x81\xef\x08\x70\x1a\xd3\x0a\x8b\x0a\x40\xe9\xd7\x66\xca\xd0\xb4\x55\x88\xb0\x3b\x2a\x38\xab\xf5\xf1\x03\xf2\x19\x2d\x99\x04\x01\x32\xf8\x82\x48\xf4\xdb\xc3\x1f\x4f\xaf\x20\x69\xe9\xc8\xb2\xe5\xdb\xf1\xb5\x12\xf8\x01\x56\xc6\x10\xbc\x6e\x1f\xf7\x1b\x72\x63\xd7\xdb\x05\xf4\x13\x37\x17\x7a\x6c\x75\xab\x5a\x5c\x01\xf5\x73\x51\xb5\xfa\x2e\xdc\xd9\xce\xce\xef\x03\x4f\xf1\xe4\xe5\x74\x81\x5b\xe2\xef\xd7\x34\xea\xb8\xe6\x38\xa8\x67\xc1\x7e\x5d\xa3\x21\x8f\xae\xf1\xb0\x81\x84\x72\x4d\xd1\x39\x90\x9e\x98\x32\xcc\xc3\xb1\x77\x71\x1c\x3c\x03\x4a\x27\x98\xe4\x6f\x57\x93\x74\xcd\xc3\x08\x35\x5a\x76\xee\xc3\x8f\x38\x0c\xf9\x8e\x41\x84\x23\x3a\xcf\xae\x67\xbc\x24\xdb\x57\x15\x4a\xdb\xe7\x97\xb6\xcd\x20\xf1\x89\x32\x7b\xeb\x98\xd2\xb9\x50\x90\xc4\xe4\xf8\xc9\x62\x41\xca\x36\x42\xe5\xba\x98\x19\x30\xd0\xa8\xf7\x3a\x8c\x0a\xcc\x4a\xaa\xf7\x8a\x49\x05\x30\xaf\xd7\x87\xcc\xea\xff\xae\x41\x11\xd6\x2c\xf5\x1f\x5e\x46\x30\xaf\x01\xc4\x7a\x4d\xdd\x1e\x85\x55\x7b\x2d\x61\x02\xa8\xa4\x25\x41\x53\x52\xf0\x9a\x00\x76\xb8\xe1\xcc\xe8\xe3\x8e\x52\xc1\x27\x90\x98\xc8\xb1\x19\xda\xb6\x5d\x0a\x1c\xa1\xf6\x42\x77\xc7\x48\x7a\xae\x7d\x01\x68\x31\xbd\xd6\x54\x74\xcd\xeb\x79\x34\xb0\x0d\xbf\x32\x88\x33\x84\xbb\xa2\x9d\x7a\x04\xdb\xf6\xe7\x73\x92\x69\xba\xa5\x1a\x93\x3b\x0a\xf4\x03\x27\x58\x4a\x3a\x67\xe3\x86\x97\x63\xdd\xec\xc9\x6f\xf4\x7f\xb7\x3e\x4a\x91\x02\x40\xb7\x75\x4d\x2a\x90\xcc\xcf\x7d\x7e\x5c\xbb\x66\x4f\x4b\xf7\x93\x39\x44\xce\x3a\x83\xfc\x82\x95\x85\x9b\x51\x65\xd6\x2b\x66\x99\xae\x37\xb4\x63\x3c\xae\xe6\x7d\x07\x12\x55\x78\x4a\x2a\xf9\xa9\xed\x02\x18\x87\x98\x1e\x6c\x99\x80\xe5\xae\x1d\xbc\x71\xb7\x44\x6c\x92\x88\x70\xa7\xab\x44\x87\xab\x49\x74\xcc\x30\xcf\x15\xa5\x6f\xa7\x48\xfa\x3f\xbe\x65\x97\xd3\x76\xf8\xb5\x77\x75\xea\x3d\xf4\xe1\x7a\x0d\x24\x23\x03\x20\xc8\xd6\x9b\x98\xd7\x36\xff\x9b\x95\x81\x16\x02\xd2\xd0\x04\xd0\x04\xd1\x33\x0d\x59\xd2\xb4\xe3\xf1\x86\xbc\xd0\xed\x2f\x21\x3b\x82\x55\x4f\x0b\x14\xc8\x35\x77\xc0\x8c\x57\x15\xbf\x07\xfe\x1b\xd3\x87\xc0\xfd\xb9\x3d\x8f\xcb\x58\xae\x54\xa0\xeb\xd7\x79\xce\x37\x02\xfb\xde\x51\xee\xfe\x9b\x84\x5d\xa8\x00\x7a\xf1\x3a\xfe\x8f\x2f\x26\x67\xf1\x7f\xfc\x83\x24\x62\x5b\xaf\xa2\xfd\x73\x41\x24\x6f\x45\xb1\x75\x3e\xa7\xfd\xf3\xd5\xd5\xc3\x4d\x73\x2a\x6a\x2e\x26\xa6\x86\x78\x9e\x97\x4a\xf2\x4e\x6f\x3f\xb7\x25\x32\xbd\x13\x8a\xd4\x67\xed\xe7\x4c\xbe\x11\xbc\xdd\xd6\x8a\xfb\xf8\xcb\xce\x16\x98\xb9\xfc\x82\x4c\x23\x5f\xca\x42\x55\xb1\xd3\xb8\xc0\x82\xd8\xda\xa4\x5a\xb9\x94\x0d\x2e\x32\xcd\x9e\x2f\x1b\x9a\xf1\x75\x19\xd7\x43\xb6\x4d\x53\x91\x9a\x30\x85\x2b\x78\x6d\xae\x8d\xb8\xf6\xde\x94\xc5\xee\xae\x9c\x9f\xfe\xe3\xe7\xa7\x39\x9d\x1f\x6f\x22\xc7\x59\xfd\x54\x0b\xe9\x27\xf7\xe3\x2d\x14\xb8\xc1\x53\x5a\x51\xad\xfa\x3c\xc5\xfb\x5d\x78\xfd\x8a\x73\xf5\xbd\x87\x05\x3e\x45\x4b\x8d\xa0\x77\xb4\x22\xf3\xad\x43\xab\x9f\xb7\x9d\xf4\x45\x3a\x71\x4d\x9c\xcb\x02\x57\x31\xa9\x31\x9f\x39\x12\x5e\x40\x5c\xe7\x49\x16\x24\x4d\xf4\x7c\xc6\xcb\xb7\x17\x44\xd1\x0a\x7c\x2c\x4e\x31\xc2\xa9\x13\x8f\x2a\x8c\x43\xd3\xa4\x3b\x2c\x1f\xab\x2e\x6f\xcb\x9c\xb2\x39\xea\xd5\x31\x6c\x85\x20\x4c\x55\xcb\x20\xee\x0a\xbc\x1c\x46\xf1\x06\xa5\x18\xf4\x72\xab\x5c\xc6\xb8\xf3\x4e\xbd\xbd\x65\x29\x3f\x6a\xbc\xd4\xda\x68\xe0\xce\x99\xb5\xc0\x35\x03\x06\x80\xa9\x38\x0b\x70\xab\x28\xe2\xb2\x0d\x85\x86\x78\x43\x58\xb7\x85\x4f\xac\x7b\x75\xac\xb7\x76\xaf\xf4\x90\xb1\x4e\x8f\xeb\xf2\x37\x4d\x85\xd5\x8c\x8b\x7a\xec\xbc\x28\xe3\x9e\xe5\x1a\xd1\xad\x33\x48\x83\xf7\x90\x10\x43\xfb\x64\xaa\xb3\xb3\xb2\x22\x81\x55\xea\x17\x80\x95\x26\xf6\x89\x5a\x26\x48\xc1\xe7\x0c\x0a\x01\xd8\xdf\x82\xbd\xe5\x9d\x46\x58\x6a\x8b\x10\xb1\xb6\xaa\xb6\xee\x5b\xa4\x2d\xcb\xef\x88\x58\x10\xbc\xe5\x29\x4c\xdb\xe0\x1f\x6c\x9b\x48\x90\x46\x10\x09\x13\x6a\x22\xf0\x46\xc7\xf7\x9d\x42\x58\x4a\x5e\x00\xa9\xb1\xc9\x31\x74\x74\x63\x18\x2c\xcd\x19\x17\x08\xa3\x39\xbd\x23\x0c\x5d\x99\xdd\x70\x56\xe1\xed\x69\xb6\x02\xb7\x9d\xf3\xd0\xe3\x56\x71\x9f\x7f\x8a\xb0\x42\xb8\xac\x29\x90\x3c\x18\xe2\x02\xeb\xd5\x0c\x5b\x0d\xbe\xa2\x77\xa9\xe0\x90\x8d\x88\x2e\xb6\xcd\x4f\xfd\xac\xf7\x42\x52\xa6\xc3\x11\xf8\xe9\x02\x0b\xd1\xe1\x27\x7c\xed\x74\x54\x40\xe8\xdd\x55\x97\x89\x98\x9e\xcf\xe9\x90\xe5\xd7\xd0\xd7\xc0\xa6\x46\xad\x6f\x6b\x81\xef\x0c\xda\xa2\x5b\xe2\x4a\xab\x19\xdb\xaa\x91\x92\x98\x1a\xf0\xbd\x7e\x99\xbc\x43\x17\x10\x01\x3e\x5a\xf0\xac\x75\xd1\x91\x09\x2f\xaf\x1b\x52\x8c\xba\x2d\xe8\x16\xdc\x11\x75\x38\x0e\xb1\x2d\xfb\x13\x48\x41\xe3\x51\x11\xc6\xc9\x5c\xea\xdd\x1a\x76\x32\x84\xbd\x50\xd5\x63\x25\x01\xbb\xbe\x93\x17\x06\x2b\xf1\x2f\x22\xb6\xce\x4c\xda\xe0\xcd\x9b\x53\x75\x7c\xfb\x27\x70\xe5\x11\xb6\xc0\xac\x00\x4d\x5e\x9e\xdc\x92\x46\x9e\x48\x3a\x37\x9e\xbb\x3f\xfe\xe9\x4f\xe0\xc6\x73\x8b\x73\x72\x75\x7e\xfa\xfa\xfd\xf9\x71\xbd\x9d\x5a\xb6\x53\x9f\x5e\x83\x95\x22\x82\x7d\x87\xfe\xe7\xf0\xef\xbf\xfb\x75\x7c\xf4\xe7\xc3\xc3\x9f\x5e\x8e\xff\xf3\xe7\xdf\x1d\xfe\xfd\x18\xfe\xf1\x1f\x47\x7f\x3e\xfa\xd5\xfd\xf0\xbb\xa3\xa3\xc3\xc3\x9f\xfe\xf2\xfe\xcd\xcd\xe4\xfc\x67\x7a\xf4\xeb\x4f\xac\xad\x6f\xcd\x4f\xbf\x1e\xfe\x44\xce\x7f\xfe\xcc\x97\x1c\x1d\xfd\xf9\xb7\x5b\x76\x34\x92\xd3\x33\x95\xc7\x33\x89\xbb\x33\x23\x5f\x67\x23\x08\xa9\xe1\x06\x89\x21\x25\x48\xbb\x80\x26\x2b\x6d\x3b\x4d\xcb\xfe\xa4\xef\x15\xd7\x3d\x36\xd7\x57\x8d\x34\xd7\x4f\xc5\xef\x81\x18\x86\x72\xad\x38\x6f\x1f\xb0\x02\x35\xee\x92\xdc\x11\x31\x72\x7d\x78\xa7\x5f\x39\x89\x7c\x63\x88\x98\xd8\xf4\xbe\x48\xe6\xbd\xc8\x0d\xe2\xe6\xe5\x39\x57\xf2\x06\x88\xee\xec\x68\x41\x70\x1f\xa3\x1f\xb1\xa0\xbc\x95\x56\x43\x46\xda\x08\xe7\x0c\x94\x0c\x43\xa4\xe0\x2f\x7b\x88\xdb\x98\xac\x8b\x6d\x85\x8c\x6b\xd2\x33\x17\x97\x96\x85\xca\x4f\xfd\xa9\xbf\x24\xcf\x36\xdf\xda\x74\x5b\x13\xb1\x11\xe4\xce\x0d\x43\x38\x2a\x22\xa2\x4c\xc9\x0e\x3f\x2a\x63\x11\x6c\xbc\xa2\x9d\x42\xb3\xad\xb3\x20\x98\x32\x68\xd4\x8d\x11\x2e\xb4\x98\xd0\x2d\x14\x77\xa2\x73\x47\x28\x06\xeb\x66\x9c\xf6\xc1\xa7\x71\xc7\x2c\x5e\x38\xc6\xb2\xf5\x35\xab\xb3\xf1\x9c\xfb\xff\x62\xd6\x43\x5a\xfa\xc8\x7f\xc7\x0c\xeb\xa7\x11\xbd\x30\x07\x02\xae\xfa\x71\x21\xa8\xa2\x05\xae\x5e\x44\x00\x6c\xdd\x8b\x8a\xaa\xd5\x06\x57\xf8\x2e\x41\x90\xba\xe7\xa6\x4f\xb8\x42\xb7\x64\x79\xcf\x45\xe9\xb4\xbf\x10\x6f\xbb\x6d\x28\x5b\x6f\x0c\xa9\xdc\x70\x00\xaf\xaf\x45\xb2\x89\xf4\x88\x9a\x08\x34\x25\x0e\x9c\xb6\xf2\xe5\xe5\x31\x3a\x65\x4b\xa3\x78\x45\xd8\xff\x3e\xf0\x12\xd4\x92\x05\xed\xd6\x58\x22\xbd\xd3\x60\xb5\x1e\xd7\x37\xac\xa2\x8a\xca\x6d\x46\x16\x69\x93\xc7\x0b\x1e\xa7\xb7\x3a\x68\x11\x17\x96\xf5\x16\x04\x92\x30\x1c\xc1\xdb\x42\x88\xed\xcb\x9e\xe5\xb6\xd0\x5a\x3f\x65\x44\xca\x37\x7a\xc3\xee\xee\xcc\x60\x50\xc0\x6d\x5f\x80\x27\xb7\x63\x97\x22\x5a\x32\x99\x8c\x3f\xad\x12\xf0\xb2\xfb\xe6\xb6\x4b\x7a\xea\xa0\x32\x60\xed\x18\x06\x6b\xdd\x34\x55\x32\x8c\xbf\x9a\x38\xa9\xfe\xc6\xe9\xe5\xb6\x51\x3a\x4b\x91\x65\x54\x68\xd9\x8d\xb1\xab\x2e\xda\x1f\x25\xd8\x62\x96\xd6\x88\xfc\xb3\xc5\x15\x00\x2f\x6f\x44\x4b\xb6\x2d\x4c\x1c\x65\x70\x10\x75\xcf\xc5\xed\xc9\xb7\x7f\x7a\x09\x36\x87\xef\xdd\x78\xbe\xf5\x15\x15\x9b\x2e\x1e\x95\x28\xbe\x52\x3b\xbd\xbc\x0a\x37\xb2\x5b\x4b\xe7\xd0\xb0\x90\x5a\x53\xd0\x43\xef\x00\xbf\x40\x51\x50\x85\xa8\xb4\xf0\xf8\x84\xf0\x71\xd7\xdd\x9b\x65\xb3\xbd\x92\x14\x9f\xcb\xdd\x6b\x37\x19\x33\x7a\x16\xbe\xcd\xac\x8a\x34\x4b\xe2\xdb\x09\x90\x0f\x07\x32\xf8\x18\x18\x76\x40\x9a\x03\x22\x07\x6e\x98\x65\x93\xc0\x26\x94\x05\x10\x19\x09\x37\x71\x0e\x36\x20\xfd\x78\x56\x99\x7b\xd5\x6b\xd9\xde\xa4\x4e\x2d\x58\xf9\xa5\x2f\xa0\x61\x29\xa3\xb6\x55\x4f\x0c\x89\x28\xd4\xb8\xf4\x05\xd3\xac\xf3\x07\x70\x5d\x95\x36\xe3\x4a\x43\x86\x8a\x85\x32\x0a\x73\x2c\xbe\xa0\xa3\x91\x29\x09\xc2\x77\x98\x56\x00\xa6\x07\x57\x12\x97\x3d\x6c\x8d\x19\x6c\xc1\x99\x6c\x6b\xe8\xd1\xb6\xa1\xb4\xe9\xd2\x6a\x13\x31\xfe\x4d\x6a\x38\x22\xab\x66\xf1\x71\x36\xf9\xed\x55\xb3\xd7\x4b\x86\x6b\x5a\xb8\x55\x3c\x35\xcb\x06\x3c\x94\x3d\xf6\xf9\x78\xaf\xac\xee\x7e\x5d\xb7\x4a\x4f\x6d\x8c\x72\xb2\x8b\x9b\x21\x22\xec\x03\x97\x49\x70\x14\xc2\x94\x0c\xf2\x80\x0b\x55\x2d\x21\xa2\xd2\xfb\xd2\x08\x11\x0a\x69\xab\x06\xcd\x5e\x6d\x4f\x98\xc2\x85\xdd\x59\x46\x9f\xed\xbd\xfd\x86\xd4\x0d\x90\x21\x5a\x05\x5e\x1a\xd6\x60\xd5\x0a\xe6\x78\x50\x57\xfe\x62\xeb\xe6\x03\x4c\x63\x44\x1a\xda\x85\x42\xb8\x2c\x25\xc2\xbe\x16\x13\x55\x46\xf1\x6e\x19\xfd\x67\x4b\xaa\x25\xa2\x25\x61\xaa\xc3\xbd\xf5\xa7\xd8\xd2\x45\x59\xf9\xb0\xbd\x58\x3f\xeb\xce\xb7\x51\xf7\x09\x29\x5d\x01\x23\xeb\x4f\x7e\x64\x4d\x8d\xfb\x17\xcc\x04\xad\xab\x47\x98\x09\x3b\xd2\x09\x22\xc8\x5d\x52\x54\x81\x58\x42\x83\x1c\x59\x23\x10\x86\xdd\xbc\x91\x0c\x07\xb5\x89\x57\x15\xab\x5b\x29\x02\x3f\x69\x9e\x8e\x72\x41\x5f\x80\xe8\xf5\xe5\xf5\x2f\xef\x4e\xff\xfb\xfc\xdd\xb3\x13\x49\xf6\x54\x85\xed\xbd\x1a\xe6\xc9\xb1\x04\x57\xab\x1d\x59\x0d\x8b\xaf\xc8\x1f\x67\x81\x5b\x7d\x4e\xc6\x32\x11\x31\x87\x1a\x33\xd5\xd7\x5d\x42\x40\xd4\xbb\xce\x03\xe1\xcd\x67\x1b\x86\xa4\xaf\xe2\x8d\x72\xd7\x57\x14\x8b\x6a\xd7\xc4\xb5\x76\xbb\x77\xc2\x91\xec\xc5\x1e\xea\x4d\xed\xc7\xf7\x92\xfb\x6a\x54\xa3\xeb\xfb\x30\xeb\x9e\x02\x92\x6d\x7f\x3b\x07\x89\x65\xc0\x2a\x64\x82\xaf\x18\x31\x72\xbf\xaa\x2e\x98\x9b\x5c\xff\x45\xec\x9e\x9a\xf2\x96\x95\xe6\x76\xb3\x43\x30\xbe\xef\x30\x23\xa8\x24\x15\x51\xce\x73\x95\xa6\x20\x20\xa7\x66\x03\x51\x2c\xf8\xbc\xe0\xdd\x46\x71\x87\x7a\x69\xee\x0c\x79\x89\xac\x3f\x19\x21\x5c\x71\x36\xb7\xec\xc4\x51\xcd\x76\x6c\x01\x3e\x8a\x30\x5a\x9b\x6c\x28\xb9\x8b\xed\x35\x61\xfa\x62\x75\x9a\xf4\xcd\x1a\x2e\x97\x6e\x53\x90\x82\x8b\xd2\xf8\x74\xf4\xc4\x1b\xf7\xcd\x71\xef\xc4\x5d\xc3\x67\x44\x46\x6f\xac\x8d\x7a\x37\xcc\x2f\xe3\x50\xd4\x63\x1e\xf8\xc8\xc0\xf0\x31\x9a\x4e\x54\x73\x2b\xa1\xf2\x9e\x28\x0f\xb8\x23\x04\xaf\x50\x53\x61\x46\x6c\x35\x11\xef\x80\xcd\x32\xcd\x83\x5c\xff\xd4\xf3\x15\x24\x65\x7a\x13\x7f\x17\x8e\x0f\x4f\xd9\x6c\x0a\x23\x60\xc3\xc3\xc2\x67\xe8\x6c\xf2\x03\x6c\x93\xf7\xa4\xe6\x62\xd9\x75\xd2\xab\xe8\xfa\x14\xe0\xad\x85\xf5\xe6\x9c\x1e\x6d\x2e\x59\x88\xa0\x73\x10\x2f\xcd\xb1\xb3\x28\x1d\xdd\x93\x77\xb4\xa6\x0a\x72\xcd\xb6\x8d\x0b\x15\x4d\xfb\x62\x84\x5e\xd4\x30\x14\x88\x2c\xa1\x17\x8b\x76\x4e\x1a\x3c\x27\x72\xfc\xa2\x2f\x9e\x25\x32\x34\x3d\x2b\xde\x1f\x2c\x88\x09\x7e\x38\x24\x63\x8a\xe3\xc0\x04\x5b\xf5\x4f\x8c\x8c\xe7\x02\x43\xf8\xc6\x89\x13\x6e\x4a\xb7\xd8\x2e\xe1\xc0\x6d\x11\x25\xbd\xb5\x6d\x20\x60\x9a\x47\xc6\xc7\xa4\x27\xd6\xbf\x5e\x2e\xb0\x00\xfb\xba\xd6\x57\x52\x7f\x75\x70\x94\x1a\xb0\xad\x57\x47\xdb\xb7\xef\xc8\x1d\xa9\xba\x2d\x69\xfd\x33\x5b\x36\xbc\x7d\x2d\xc1\x68\x43\x35\xde\x6e\x2c\x22\x5c\x9c\x28\x8b\xba\x69\xf7\xb1\x16\x53\x9d\x72\x29\xf5\x51\xf7\x67\x7b\xd4\x4b\x82\x0e\xd3\x9b\xcc\x1f\xc7\x94\x56\x02\xef\x83\x3e\x3c\x1d\xef\x7b\xc8\xc3\x1f\x75\xc3\x05\x27\xa9\x24\x0d\x61\xa5\x2b\xca\x1c\xf1\xae\x27\xf2\x12\xa2\x8f\x78\x0a\xb5\xb4\x2b\x30\x03\x39\xe3\x30\x7e\xfa\x6c\x77\xa7\x6f\xfb\x2b\x34\x85\x99\x38\x9a\x97\xb8\xb7\x29\x1f\x75\x11\x6a\x2d\x84\x30\x25\x96\x16\xf7\x79\xad\x37\x56\x5f\xba\xc6\xab\x0c\xd1\x84\xc4\x69\x74\xc4\xd1\x54\xc2\xa9\x44\xc2\x29\x34\x9a\xd9\x6a\x7c\x7e\x84\xc9\xbd\xb7\xd8\x60\x09\xac\x8b\x91\xd8\xda\x38\xc8\xa2\x90\x27\xbc\x44\xf7\x00\x26\xe8\xd3\x2c\x98\x32\xc2\x17\xba\x5b\xb7\x5d\x79\x34\x77\x8f\xba\x18\x48\x74\xd3\xd6\x8f\x96\xcc\xa4\x9d\x81\x69\xca\xa2\x97\x77\xbd\x11\xac\x7a\xd6\xf3\x56\x14\x0b\x2e\x09\xb3\x18\x78\xe1\xbe\xc0\xfa\x71\xe7\xd2\xdc\x83\x49\x75\xa7\x2d\xdd\x07\xb9\x23\x62\xa9\x20\x00\xea\xe9\x8f\xad\xdf\x53\xae\x44\xbf\x02\x8c\x73\x74\xc3\x20\xb3\x6d\x52\x00\xe0\x5b\x66\xce\xe7\x0a\x23\xdd\xc9\x8e\xc8\xcb\xcf\x14\x29\xda\xf2\xd1\x32\x41\x81\xa5\x9d\xa8\x48\xd6\xc2\xe8\x38\xf5\x81\x99\x12\x3f\x40\x41\xe1\xce\x34\x2a\x78\xdd\xb4\x2a\x88\xcd\xba\xd8\x6d\xcc\xea\x27\x51\x5c\xd4\x98\xe1\x39\x19\xfb\x8e\x8c\x83\x3c\xa4\x48\x15\x22\xf2\x42\xcd\x01\x91\x47\x5f\x12\x4c\x1e\xc5\x43\xe5\x51\x06\xb8\x3c\x4a\x85\xcc\xa3\xbc\xb0\x79\xd4\xdd\x4a\x3b\x39\xba\xde\x53\xb0\x72\x78\x6d\x35\xf0\x8f\x1d\x5e\xa7\x09\xc6\x9c\x5e\xa0\x1a\xb6\x2d\x53\x89\x78\x4d\x95\x83\xe5\x05\x7a\x02\x70\x8d\x86\xe4\xa6\x56\xd0\x00\x28\x12\xc3\xfd\x49\x1e\xfe\x7f\xf6\xfe\x86\xbb\x8d\xdb\xda\x17\x87\xbf\x0a\x96\x72\xd7\xb2\x94\x92\xb4\x9d\xa4\x2f\xc7\xb7\x4f\xbb\x14\x49\x6e\x75\x13\xdb\x3a\x96\x92\xac\x3e\x4d\xef\x09\x38\x03\x92\x38\x9a\x01\x26\x00\x46\x32\x7b\x7b\xbe\xfb\x7f\x61\x6f\x00\x83\x21\x29\xd9\xc2\x40\x22\xe5\x6a\xba\x56\x63\x91\xc3\xc1\x1e\x60\x63\x63\xbf\xfe\x76\x53\xf1\x82\x9b\x08\xf9\xb9\x4c\x31\xb7\x22\xf0\x5a\x69\x4d\x70\x5e\xfb\xea\x78\xe8\x1a\xe9\xed\x3b\x97\x92\x1e\x68\x2f\x10\x59\x8d\x7d\x28\x18\xf3\x9e\x96\x27\x69\xf6\x24\xcd\x3e\xf1\xfa\xdc\xa4\x99\xeb\xe2\xfc\xf0\x15\x40\xef\x71\x60\xd2\x74\x15\x3f\x6b\x1d\x66\x03\x8a\x6b\x42\x34\xdf\xd5\xfa\x1c\x42\x0f\xfa\x11\x79\x27\x5e\x63\x6f\xd0\x11\x96\xff\x4c\xc8\xa9\x20\x5a\xd6\xae\x8f\xe9\x07\xa3\x47\xa8\xf1\x52\xa2\xdb\xa9\x66\x4e\xdf\x95\x9a\xf9\x42\x61\x57\x6d\xdd\x30\x85\xa2\x2f\xb1\x54\xc8\x4a\x2b\x24\xea\x9e\x21\xc2\xae\xa5\xba\xac\x24\x2d\xf5\xf3\x46\xe2\xff\x8d\x03\xc4\xde\xf3\x2f\xdc\xba\x8f\x9b\xbb\x43\x88\xa4\xa6\x9b\x47\x35\x98\x0f\x5d\xa4\xf1\x7e\x65\xec\x5e\x06\x6a\xaf\x82\xb5\x1f\x33\x06\x24\x37\x4c\xa2\x26\x73\x25\xdb\xc6\x47\x03\x3b\xb4\x60\x6b\x8a\xdf\x35\x6b\x48\xda\xc9\x88\x62\xb7\x58\x6e\xd0\x27\x24\x98\xf3\xe0\x79\x60\x9d\xdd\x09\x16\xa5\xd6\xa3\x8d\x98\xed\xaa\x15\x09\xa5\x0e\x58\xf7\x2a\x55\x07\x2c\xc9\xc8\x5e\xc5\xe6\xb4\x58\xee\xf5\xa9\xda\x80\x9f\xea\x3c\xe0\xf6\xf8\xb5\xc7\x3a\x52\xe7\x1b\xd2\xde\xd5\x83\x0f\x5d\x6e\xe1\xe8\xc6\xe4\x5f\xcc\x23\xd3\xee\xf5\x7d\xa9\x85\x63\x25\x57\xf2\x7f\x67\xe7\x44\x72\x75\xee\x6f\xff\xf0\xdb\xb1\x07\x3d\x80\xd7\x7c\x88\x7d\xd3\x83\xe8\xdc\x5e\x95\x46\x8f\xdb\xa6\x8c\x94\x5c\x37\xc0\x99\xe0\xea\xee\x4a\x1d\x02\xb9\xf9\x4a\x6e\x36\x0f\xe9\x99\x21\x71\xc0\x61\xab\xc1\xc5\xfc\xc1\xab\x66\xce\xfb\x43\xbb\x7d\x27\x1b\xfa\x6b\xdb\xf5\xa1\x75\x87\x15\x2a\xdb\xd1\x02\xba\x49\x84\xc6\xac\x11\x36\x6c\xe2\xe1\x6a\x59\x63\x9d\x1a\xd0\xab\x3b\x09\x12\x96\x4e\x1b\xba\xf4\x12\xb5\xff\x12\x25\x54\xbf\x30\xdf\x79\xeb\x8e\x54\x74\x88\xb6\x41\x04\x5a\x2d\xb4\x6e\xe0\x90\xf5\xdf\x26\xa7\xb6\xae\xce\xf7\x6a\x20\x83\x1a\xac\x27\x81\x3c\x08\x07\x4b\x81\xdd\x57\x20\x4d\xa4\x96\x57\x80\x09\x6a\x75\x8a\x99\x61\xea\x9a\xaa\xf2\x8e\x67\xfe\x56\xab\x6a\xfa\xaf\x0f\xdc\xd6\x61\x81\xc0\xc1\x79\x86\x18\xa8\xf3\x96\xaa\x12\xca\xa8\x3a\x9e\x78\x4a\xa4\xdd\x74\x6d\x3d\x91\xd6\x15\x4b\x47\x02\xe0\xee\xa1\x64\x7f\x9d\x50\xab\x07\xf5\x9f\x84\xb1\x12\x28\x6b\x5b\x49\xc7\x82\xc2\xe8\xa7\x74\x99\x3b\xb9\x88\x57\xf0\xc1\x1e\xf4\xac\xe9\x0f\x4d\x16\xb2\x2a\x41\x59\x1d\x57\xec\x8a\x55\x81\x34\x2b\x70\x15\x9f\xb6\xc6\xe1\x2c\x15\xb2\xae\x5d\xc9\xbb\x6b\x3e\x8f\xe5\xf1\x77\x36\x76\x10\x16\x90\x56\xaf\x7a\x10\x0b\x70\xba\x4c\x2c\x79\x0c\x38\x23\x7e\x4b\x30\x21\xbd\x52\xe0\x8e\x41\x39\x23\xcc\xb2\x69\x02\xfb\x6d\x21\x63\x62\x05\x74\x71\x1b\xce\xc5\x15\x12\x7c\xbc\xeb\xd0\x7d\x4c\x24\xa2\x35\xda\xb5\x68\x35\x5b\x6b\x2d\xd5\xc1\x69\x25\xe6\xdf\xbf\x95\x50\x9b\x0e\x8d\xc2\x43\xc0\xb3\x08\xcd\x10\xec\xb1\x0b\x85\xbb\x10\x6b\x95\x7a\x22\x5c\x0a\x71\x32\xac\xda\x20\xe7\xd9\x90\xc8\x3a\x3a\x81\xee\xfc\xc3\x61\x51\xf5\x4a\x16\xb4\x02\x04\xe2\x54\x16\x23\xd9\x82\xaa\xab\xb4\x44\xd8\x09\xd4\xbe\x26\x7c\x56\x49\x5a\x7a\x64\x75\xe6\x9b\x28\x50\xb3\x62\x7f\xa7\xc6\x22\x11\xbb\x04\x47\xf2\x25\x1f\x8d\x62\x11\x84\x55\x6f\x60\x09\x7d\x4b\x52\x07\x7b\xd3\x4f\x23\x70\x6f\x16\x43\x0b\x3a\x52\x06\x0d\xe0\x71\xc7\x66\x20\x8e\x43\x17\x4c\x2b\x2b\xb9\x26\x7b\xdf\xfb\x49\xdf\x1b\xd2\x1b\x3b\xd9\x71\x69\x12\x6b\x89\x73\xf1\x1c\xce\x43\xe0\x33\xf4\x5f\x5c\x72\x3b\x53\xb3\x4e\xc8\x79\x96\x08\x50\x74\x4d\x53\xf1\x74\x2e\xfb\x91\x56\xbc\x0c\x92\x93\xaa\x01\xcd\x61\xc3\xf2\x91\x71\xb4\x49\x1a\xc5\xc6\xeb\x1b\x25\x3d\xe5\xc0\x79\x7c\xbc\xc3\x72\xfc\xd1\xae\x3a\x03\x19\x97\x90\x1f\x04\xec\x39\xc1\x4a\xab\x6d\xc9\x6e\x29\x98\x98\x49\x85\xce\x98\x07\x67\x58\x87\xab\xbd\x8d\x63\xf8\x30\xe0\xb7\xc4\xa0\xcf\xe8\x82\x74\x79\x86\xc0\x93\xe8\xc1\xec\xbb\xcd\xbb\x74\xd6\xbb\x8f\x0b\x2d\x04\x5c\x43\x34\x3b\x73\x2e\xde\x0f\x0c\xf0\x9d\xeb\xe8\x62\x7c\x05\x02\xa2\x08\x5e\xdb\x41\x17\xbc\x41\x21\x46\x8d\xfb\x79\x8a\x70\x80\xd2\x12\xfb\xc0\xd0\xb3\xb2\x91\xe5\xab\x94\x7c\xc4\x97\x58\x99\x22\xaf\x01\xab\xf2\x2f\xa7\xc7\x61\x2f\xdb\xa7\xbe\x3e\x4f\x41\xfb\xb6\xd7\x57\xf8\x5c\xcd\xcc\x9c\x97\x64\xea\x9a\x8a\x32\x43\xf6\x05\xbb\x26\x76\x0f\x68\x57\xf9\x13\x30\x3f\xdc\x6c\xfa\xf1\xc3\xeb\x39\x22\x0e\x12\xa8\xf8\xda\xd5\xdd\x30\xe5\x21\xa6\xa6\xdc\xb5\x48\x7f\xf7\xfe\x99\x07\xea\xbc\x1e\xab\xeb\xf1\x78\x3c\x4e\x99\x3f\xef\x13\x1e\xf5\x56\x3e\x78\x59\x6a\x59\xf2\xd9\x72\x65\xfd\xed\x79\xd3\x91\x04\xba\x37\x15\x4b\xf7\xfe\x8f\x48\x17\x4c\x8d\xec\x45\xe8\x55\xbf\xfb\x26\x4d\xd4\xc4\x10\xfe\xdb\x10\x3b\x1b\xc8\x08\x40\x11\x53\xb6\xa0\x57\xdc\x9a\x00\x33\xdc\xff\x76\x67\xdd\xb4\xfa\x5e\xa3\x49\x96\x05\x0e\x34\x02\x01\xa5\xd8\x87\x46\x6a\xd8\x51\x90\x96\x78\x26\xa1\xf0\xac\x8f\x18\x8b\x7e\xb6\xa6\x81\x56\x8b\x09\x03\xf6\x84\x9e\x8b\xf1\x60\xfd\x83\x9f\x15\x32\xa5\x96\x88\xf0\xca\xfb\x2b\x0c\x9f\xd4\x1f\xf1\xd4\xed\x2a\x70\x99\x08\x49\xd8\x6c\xc6\x0a\x68\x64\xc4\x9a\x05\xab\x99\xa2\x55\x9f\x34\xdd\x16\x0b\x42\xf5\x2b\x6b\x81\x2b\xbb\x41\x51\x59\xad\xe9\x9d\xbb\x0c\x10\x07\xd4\x01\x36\x75\xc9\x93\x52\x3c\x51\xb5\x89\x80\xae\xf7\xde\x89\xf7\x52\x9a\x37\x5c\x83\xa6\xeb\x2a\x50\x30\xde\xb9\x37\xd9\xe0\xe3\xf7\xdf\x85\xac\xd6\xc7\x23\x28\x92\x94\x8a\x0e\xe3\x7d\x1b\x1b\xdc\x1e\x1b\xf6\x34\x0c\x11\x48\x97\xc2\xdc\x48\x2e\xcc\x5a\x33\x22\xab\xd7\x15\x09\x48\x5b\xf6\xfa\x41\x33\x1d\xe2\x74\x5e\x4f\x4c\x03\xc3\xc4\xeb\x0d\x5d\x86\xf2\x53\x87\xac\xbc\xe2\xa4\xc2\x38\xaa\xfb\x6e\x2a\xcd\x62\xcd\x8b\x95\xd6\xc9\xfa\x4c\x96\x2b\x0f\x1a\x75\xa0\x89\x7d\x90\xaf\xd5\x01\x0d\xa4\x67\x5b\x93\x92\x95\x4c\xdc\xb9\xff\x09\x09\xe0\x1c\xd4\x0c\xcb\xc5\xfe\x37\x3a\x4b\x61\x87\xbd\x95\x20\x87\xb6\xb1\xc7\x4e\x23\x08\x48\x98\xef\x78\x47\x81\x97\xc1\x6e\x3d\x0a\x80\x29\x52\x8c\x95\x94\x10\xe1\x4e\x5a\xd6\xd3\x99\xeb\xf9\xbf\xa6\xa6\x5d\x59\xc9\xec\x1b\xab\x43\x23\x52\x42\xbb\xc0\xb9\x91\x84\x09\xdd\x2a\xc7\x13\x77\x06\x42\xb5\x57\x29\x19\x86\xfc\xdc\xeb\xfc\x70\x7a\x4c\x5e\x90\x7d\x68\x15\x0c\x62\x7f\x46\x79\x15\x30\x9e\x56\x5b\xa3\x42\x83\x7b\xfb\x88\xc4\xd7\x0e\x29\x0b\x33\x5a\x69\x36\xb2\x67\x27\x1c\x8d\xee\xbd\xad\x0e\xe2\x55\xee\x86\x29\xc0\xa7\x4c\x4b\x5a\xfe\x1c\xc4\x4e\xea\xf6\x9d\x4a\x59\xb1\x3b\x27\x71\x84\x1e\x29\xdb\x3a\xe1\x7e\x78\x90\x13\x2e\x8e\x4b\xd8\xfd\xdb\x5f\x12\xdc\x72\x35\x33\xb4\xa4\x86\xba\x93\xcf\xdf\xf0\x6f\xcb\x88\x4f\xe7\xdf\xa7\x5d\x43\xce\x3f\xd7\x57\x6b\xdb\xb6\xe4\x06\x32\x82\x2d\xb9\x70\x2e\xa5\xb8\x85\xfd\xf9\x09\xdc\x8f\x7d\x56\x21\xdb\x00\xbd\xae\xde\xc3\x85\x56\x90\x8e\x8a\x6b\x13\xf1\xc2\xc0\xe8\x5a\x50\xdd\x37\xb7\x84\x2c\xfd\x89\x5d\xca\xb8\xfc\x3d\x10\x66\xf9\x50\x06\x32\xc2\xe9\xb7\x72\x5b\x1e\x2b\x0a\xfa\x57\x61\x08\xd4\x99\x50\xef\xed\xce\xd2\xfc\x8a\xed\x25\x15\xe8\x46\xbf\x27\x35\xa3\x42\x13\xc5\x60\xa6\xc1\x8a\x9f\xc1\x0c\xa3\xfb\x4a\x22\x2a\xee\x99\x2c\xc3\xbb\xae\x46\xf9\xbc\x1a\x91\xf2\xae\x08\xaf\x85\xa9\xb4\xba\x92\xd7\xb0\xbf\x2b\xaa\xe6\xde\x59\xa0\x47\x64\xda\x1a\xf4\x3b\x6a\x52\xf3\x0f\xd0\x00\x20\x74\x27\x83\xd9\x68\x45\xf4\xc1\x99\x2c\x75\x28\xee\x0f\x40\x3f\xce\x68\x96\x31\xf6\x0f\x38\xc5\x53\x26\xaf\xb7\x1c\x50\x5f\x01\x8e\x51\xc2\x2a\x3e\x87\x1e\xd6\xf1\x6c\x81\xf7\xed\x97\xb1\xf4\x89\xc5\xbf\x10\x57\x91\x01\xbf\x4f\x9e\xb3\x80\x28\xe0\x56\x47\xfb\x40\x18\x75\xe0\x9a\xf1\x6b\xbb\xf0\x6c\xf8\xb8\xb7\xb9\x12\xb7\x8c\x4b\xf0\x6a\xa4\xc6\xbe\xdd\x56\xb3\xdb\x38\x38\x02\x2c\x7c\x6c\xc9\x52\xa8\x38\xf1\xf3\xed\xe7\x9a\x42\x22\xe7\xd8\x28\xc6\xc8\x6b\x3e\x55\xcc\x8a\x1b\xc1\x2a\x18\x92\x9f\x1f\x9d\x9f\x76\x5c\x65\x3f\xb2\x73\x17\x7d\x98\x40\xc2\x35\xa4\x84\xdb\x67\x94\x8a\x5f\x31\x45\xec\x19\xd2\x42\xf5\xb7\x9f\x64\x2f\x11\xa6\xcb\xd0\x1c\xc0\xf5\x73\x84\xef\x81\x99\x30\x4f\xdf\xf9\x88\x79\x4a\x19\xc1\xd1\xf9\xe9\x31\x52\xc0\x85\x36\xd4\x6a\x79\xe4\x1d\xc0\x50\xc6\x93\x43\xc1\xbb\x42\x14\x1b\xc3\xd2\x57\xac\x24\xca\x4b\x82\xea\xce\xdd\x2e\xc8\xda\x66\x40\x1d\x20\xc2\x74\x05\x3f\x1c\x1c\xa5\x6e\x3a\xe0\xf6\x1e\xc2\x40\xd4\x83\x21\x69\x3b\xae\x3a\x91\x60\x65\x3f\x65\xb4\xd1\x0a\xf1\x03\x5c\x4e\x77\xa7\xa1\xe4\xfa\x36\x22\x40\x0e\xbe\x67\xb4\xfc\x49\x71\xc3\xde\x89\x82\x45\x32\x25\xd1\xb3\x17\x0b\x7d\x5f\x5f\x21\x63\x16\x19\x8a\xf5\x40\xe1\xf8\x44\x18\x99\x48\x26\x81\x33\xb3\x7f\x9e\x43\x2c\xc1\xc1\xa4\x3a\x6c\x84\x15\x55\x51\xaa\x4d\x0a\xa4\x3b\x9a\x62\xbc\x88\x94\x70\x5a\x4f\x64\xf6\x24\xa3\x93\x59\x2e\x9f\xa0\xf7\xd5\x06\x0d\x26\xee\x1d\xa5\x5d\xbb\x6d\x4c\x0c\x9d\x33\x43\xb4\x69\x8b\x4b\xfb\x16\x01\x92\xf4\xc8\x63\x64\x41\x9a\xeb\x23\x52\x5c\x93\x7c\x9b\xfd\x8e\xae\xdb\xb2\xfe\x3c\xe3\x15\xde\x06\x91\x51\x0c\x7f\x3d\x5e\x9a\xee\x7f\xe8\x27\xaa\xaf\x69\x47\x1e\x31\x0f\x21\xb4\x09\x25\x8a\x8a\x52\xd6\x6b\xf4\xd9\x9d\xc9\x68\xb1\x48\xa0\xa3\x33\x89\xee\x6a\x1f\xa6\x84\x64\x6e\xb0\x28\x07\xd8\x87\x29\x41\xe2\x15\x8b\xf2\x71\xdb\x87\x89\x79\x67\x03\x93\xc0\xd8\x15\xab\x32\x64\xe1\x00\x94\x95\x9d\x84\x20\xea\xe1\x03\x14\xf8\xab\x49\x0a\xbd\x2d\xb2\x95\xdc\x23\x25\xb3\xe4\xbb\xbd\x97\x98\x16\x49\xc3\x6b\xdb\x07\xef\xec\x5b\x67\xca\xb8\xba\x70\x09\x64\xdd\x5b\x43\x2a\xd5\xae\xbe\x75\x9b\xe4\x7d\x24\xab\x6f\xfd\x83\xc6\x8e\x61\xdd\x5b\x83\xa3\x6f\x17\xdf\xba\xdf\xeb\x7c\x5b\x67\xaf\xa3\xe2\x29\x4d\xb8\x77\x3d\xa5\x09\xdf\x77\x9a\x70\x04\xe6\x47\xc1\x8f\xd5\x4b\xdc\x7d\xac\xc9\xc2\x00\x40\x6f\x67\x91\x21\x34\x6f\x43\xcd\x62\x04\x8e\x3b\xc3\xaf\x3c\xe4\x2f\xb9\xc4\xb0\xdf\xb3\x5e\xeb\x5d\xbf\x11\xbb\x3c\x6a\x84\xfa\xcb\x94\x5b\xbc\x29\x9f\x18\xef\x79\xfb\xee\x22\x06\xfa\xa3\xbe\xeb\x5b\x72\xcf\x9e\x5d\x39\x01\xef\x27\xe7\x78\x75\x9d\xee\x2f\xe5\x38\xf1\x49\x9b\x33\x8e\x1f\x62\xbf\x7d\x5a\x16\xf2\x6a\x0e\x72\xa6\xc1\x57\x13\x92\xd7\x9f\x3e\x68\x85\x86\x1c\xf4\x51\x42\x30\xe4\x11\x6d\xc5\xd0\x3e\x0c\x05\xc7\x90\x93\xdc\x8b\xd6\x40\x43\x48\xae\xa0\xfb\x23\x44\x57\x21\x12\xcb\x05\x96\x62\xc5\x50\x41\x29\x66\xa8\x07\xac\x59\x53\xb9\xb0\xd3\x66\x4d\xd5\x12\x52\x9c\x20\x03\xc1\x65\xee\xed\xc7\x95\xd0\x07\x60\x07\xa7\x08\x92\x05\x23\xe7\x6b\xb3\xef\x3b\x16\x3b\x77\x5f\xec\x6d\x4c\x83\x69\x5d\x5f\x60\x3f\x84\x83\x81\x35\x4c\xd5\xae\x77\x17\x33\xae\x57\xab\x66\xce\x17\x1e\xe6\x27\x2d\x01\x5b\xa2\x3b\x99\xd1\xd2\xe7\xef\x62\xce\x79\xcd\xea\x29\xa6\x3d\xea\xf5\x4e\xeb\x21\xa9\xa3\xa6\xf3\x24\x19\xbf\xea\x4f\x11\x32\xc2\x25\x0a\x1c\xa6\x98\xfd\x14\x27\x56\xb6\xf3\xc5\x3a\x69\x29\x59\x2c\xb7\xbe\x0c\x44\xaa\xb4\xe9\x81\x5e\x20\x0e\x2f\xc4\xcd\x52\x91\x78\x6f\x5f\xe2\x47\xa4\x10\x3f\x30\x0a\xef\x50\xe8\xa5\x21\x61\xf5\x8c\x4d\x00\xc9\x2d\x2c\xb0\x0d\x61\x7e\x1c\x85\xe5\xd7\xeb\x4d\xb4\xcf\x9a\x41\x99\xbe\x96\x3b\xe3\x22\x4d\x05\xad\x0a\xe8\x6d\x9d\xc4\xbf\x1b\x42\xe0\x4c\xcd\x99\x0b\x7e\x9f\x1b\xc5\x0b\xb3\x39\x7f\xd8\xdd\x37\x20\x96\xb3\x7f\x58\x35\x0b\x7a\x40\x7e\xd0\x3e\x82\x8c\xdb\x27\x44\x5c\x3f\x49\xf0\x43\x9c\x07\x7d\xcd\xee\x00\x48\x8c\xda\x6c\x56\x73\xc0\xe2\x08\x10\x77\x5d\x6e\x3a\x78\x3f\x79\x00\x92\x7f\x44\xb2\x23\x4d\xfb\x59\xea\xc2\x54\x5b\x51\x79\xce\x71\x68\x28\x85\x27\x34\xe8\x3f\xa1\xa3\x50\xe9\x89\xeb\xe2\x79\xa1\xe9\x03\x04\x9f\x20\x31\xa0\x15\xa1\xad\x42\xca\xc1\xe1\x46\xd8\xbf\x29\x25\xe3\x80\xd4\x7c\xbe\x30\x21\xf7\xb2\xa2\xad\x28\x16\x8f\x88\x2b\xb6\x89\xeb\x8e\x2b\x1c\xb2\x94\x28\xb9\xb4\xd2\xbe\x22\x0d\x55\xb4\xb6\x6a\x97\xdb\xdf\x9a\x25\x45\x2e\x1e\x25\x8a\xbb\xfd\x29\x88\xe5\x84\xdf\xee\x0c\x02\xfc\xdb\xd0\x5c\xcc\x91\xb4\x84\xec\x95\xa4\x65\x24\x39\x50\xcd\x61\x46\xb3\xbc\xda\x8f\x10\x64\xdb\x95\x77\xcb\xaa\x22\x39\x49\xb2\xe5\x70\xf2\x4f\x48\x85\xd7\x39\x8a\x80\x68\x72\xff\x21\x65\xef\xbf\x71\x40\x98\xb4\x9f\x2f\xb9\x12\x89\x8d\x91\xf9\x12\x09\xf8\x48\xea\xf0\x76\x33\xd2\xd3\x4f\xa4\x2a\x2d\x2f\x73\x8b\x11\xda\x79\xad\xe9\x91\x62\xd0\xec\x94\x56\xe7\x0d\x2b\xb6\xe9\xc0\xfc\xcb\x9b\xf3\xc3\x3e\x35\x70\xce\xbb\xb6\x14\x0c\xbe\x27\xb4\xf4\xa5\x9f\xd7\x6c\xba\x90\xf2\x32\x71\xb0\xfd\x08\x91\x71\xd1\x4e\x27\x85\xac\x23\x94\xd3\xb1\xe6\x73\xfd\xdc\x09\x86\xb1\x9d\xa6\x03\xc2\x45\x05\xc7\xb5\xd7\x87\x98\x30\xde\x64\x19\xf0\xc2\xa4\x08\x6f\x0c\x0c\xe5\xa0\x37\x9d\xde\xb5\x3e\x25\x6f\x07\xa1\x5c\x0d\x3e\x52\xd6\x39\x26\xb5\xdb\xe7\x0a\xd7\xdc\xf0\xa6\x2b\x5d\x3b\x03\x1b\xac\xce\x1a\x06\x00\xb7\x32\x25\x2e\x66\x64\x4d\xd4\x6d\xee\x9e\xbf\x76\x64\xc4\xbe\x3b\x3e\x8b\xe5\x79\xe4\x57\x0e\xc5\x61\xcf\xec\x2f\x89\xfb\xe9\xb3\xe1\xad\x58\x0e\xab\x0a\xf5\x84\x33\x59\x3e\xd3\x71\x30\xb6\x03\x6d\x0b\xb9\x6f\x98\x18\xcf\xaf\x58\x8f\xfe\x54\x45\xd0\x5e\xfb\x3c\xa4\x10\x47\xfd\xff\x1d\x54\x5c\xcd\x3f\x58\xda\xe2\xb1\x22\xfa\xb0\xef\xa5\x18\x6f\xfe\x3a\xa9\xee\x9a\x40\xa1\x5e\xf0\x32\x8e\xec\x7a\xc4\x8f\xb7\xfc\xad\x5a\x86\xbd\xd6\xed\x17\x6f\x99\xb9\x96\xea\x12\xe7\x2a\xce\xb3\x32\x12\xee\x1c\xc2\xe2\x69\x65\x56\x24\x2e\xb5\xca\xb4\xdb\x93\xb9\x1c\xca\xae\x1c\x1d\xf6\xfc\xf7\x5a\xd3\xfd\x97\x61\x91\x95\x52\x2c\xfb\xe0\x07\x28\xc7\x22\x9b\x4b\xb2\xd6\x55\xa4\xc9\xfd\x14\x65\x91\x6d\x57\x08\x92\x01\x18\xba\x4c\x5d\xf1\x82\x1d\x16\x05\xa4\xc2\xdf\x69\xe8\x61\xec\x7a\xcc\xec\x2b\x53\xc3\xca\xf3\x1e\x0d\x98\xe4\x53\x86\x6f\x09\xad\x38\x85\x06\x9c\xa4\x7f\xa3\xe5\xef\xbb\x03\xbf\xfb\xc7\x42\x46\xd1\xca\xeb\xbb\x1d\x03\x31\x97\x87\x41\x30\x5e\x1b\xfe\x61\x81\x25\xd7\x5f\x7e\x5d\x97\x58\x59\x1d\x5f\xce\xb2\x82\x9b\x7e\xc7\xa1\x3f\x0d\x3f\xdf\x50\x7d\xd9\xb5\xeb\x60\xe3\x46\x96\x5d\x77\x8e\xe8\x73\x37\x8d\x63\x8a\x34\xde\xad\x6d\x47\xf2\xd2\x19\x7b\x16\xd9\x99\x3a\xd4\xaf\xff\xf3\xf8\xed\x03\xc3\x81\xfb\x23\xd1\xce\xfe\x33\x0d\x1a\x16\xac\x9a\xb7\x3d\xa3\x04\x14\xaa\xa3\x1b\x2d\xa9\x23\xa2\xa8\x8b\x56\x52\x3c\x10\x2a\x46\xd1\x7d\x4a\xf6\x23\x70\xf7\x3b\x1f\xe7\xa7\x82\x74\x09\xd5\xa8\x12\x8c\x90\x47\xb0\xd0\xcd\xd7\xe0\x00\xf2\xd3\x7f\x1e\xbf\xf5\xa1\xbe\x40\x3d\x1a\x92\x8e\xf3\x9c\xcb\x6f\xdf\x27\x33\xf4\xef\xd0\x46\xb5\x85\x21\xad\xd1\xf6\xf3\x14\x52\xfd\xc1\xf8\x09\xc4\x2a\x36\xe7\xda\xa8\xa5\x93\xe7\x72\x16\x91\xec\x9c\xcb\xe1\x96\x4b\xb6\x24\x7f\xfd\xee\xe4\x6f\xff\xf5\xfd\xbb\xa3\xc3\xef\xff\xeb\xcd\xe1\xd1\x5f\x4f\xdf\x9e\xfc\xfc\xf3\xf9\xdf\xce\x2f\x4e\xde\xfc\xfc\xf3\x51\xab\x14\x13\xe6\x08\x1b\xef\x9e\x33\xf3\xf3\xcf\x6e\x8f\xe9\x9f\x7f\xbe\x28\x1a\xde\xfc\xfc\xf3\x99\x77\x73\xc2\x39\x6a\xa7\x2a\x01\x16\x1c\xa0\xc7\xba\xea\x48\xd0\xef\x70\xf9\xe1\x2d\x7b\x75\x97\x03\x3a\x68\x40\xd5\x7f\x8a\xb8\xbc\xbb\xae\x05\x45\x6e\x4e\x2f\x7c\xeb\x9d\xfd\x0f\x2a\x32\xa1\xca\x8e\x12\xcd\xc5\x1c\xd0\xfe\x50\x45\x0d\x81\x07\x32\x65\xe6\x9a\x31\xac\xdb\x5c\x55\xad\xd2\xf1\xe0\x7e\xb2\xaa\xaf\x71\x2d\x8e\xad\x02\xd3\x6b\xcd\xe2\xd2\x94\x5c\x21\xe0\x15\x67\xd7\xa0\xa6\x6b\x3e\x17\xb4\x8a\x42\x83\xd0\xa9\x10\x33\xc0\xba\xdf\xdf\x91\x12\x1e\x15\x71\x62\x73\x67\x17\x26\xeb\x67\x99\xac\x65\x98\xf4\x3a\x63\x50\x6d\x69\x63\x25\x39\x3b\x3d\x26\x2f\xef\x3a\x19\x60\x1b\xb8\xac\x92\xf3\x4d\x0c\x11\x1c\x51\x56\xc5\x4b\xeb\x0e\xbf\x06\x79\xfc\xd0\x8c\xde\x4e\x4b\x59\x53\x2e\xb6\xdb\x64\x62\xd6\x56\xd5\x92\xfc\xda\xd2\x0a\xb5\xd7\x33\x59\xae\x9f\x34\x7b\x7f\xf4\x1f\xfd\x69\xf2\xc7\x40\xf8\x9f\x26\x7f\xb4\xd2\x27\xec\x8c\x3f\x4d\xf4\x55\x31\xf9\x63\x51\xb5\xda\x30\x45\xdc\x4d\x77\x86\x3e\xfd\x48\x67\x8a\x20\xe7\xa8\x1b\x01\x28\xa5\x60\xe7\x3e\x88\x46\x87\x4e\x05\xc8\xef\xfc\x8b\xa2\x05\x3b\x63\x8a\x83\x69\x20\x45\xf9\xa0\x1d\x2a\x3c\x07\x93\xd2\x35\x3a\x83\xee\xda\x48\x47\x98\x33\xc1\x58\x89\x96\x9a\x23\x9b\x91\xb9\xa5\x1a\xd6\x7d\x02\x46\xd5\xd4\x6a\x03\x85\x62\x14\x51\xdf\x48\xc9\x2a\x06\x8d\xec\x92\x3a\x8f\x62\x88\xc4\xa7\xec\x0a\x29\xc6\x82\xcd\x31\x85\xd6\xa5\x92\x20\x9e\x22\x1e\xb3\xff\x64\x4a\x46\xe9\x9a\xda\xc8\x86\xf0\xba\x66\x25\xa7\x86\x55\x4b\x72\xc5\xe9\x1d\xc7\x07\xb5\x02\xfa\x60\xa0\x70\xdc\x17\x92\x48\x88\x01\xb7\x82\xbb\x70\xcd\xa2\x35\xa4\x94\xd7\xe2\xee\x2a\x85\xeb\xca\x1a\x0a\x71\x05\xaf\x46\xbd\x66\x39\x30\xb9\xa4\x01\x9e\xe8\x45\x09\xd2\xac\x0e\xb4\xf5\x7b\x0f\x75\x0a\xfc\xa6\x45\x87\xce\x17\x1e\xdc\xd8\x1d\x09\xaa\x15\x00\xcb\xd9\xf5\xf6\x82\x8c\x0f\xcd\xc4\x5d\xfd\xec\x34\x66\x7d\x3f\xbd\xfe\x70\xc0\x1a\x3c\x3c\xc4\xd8\x4a\xb2\xca\x4c\xaa\x82\x4f\xab\x25\x59\xd0\xca\x30\x87\x98\x49\xe3\x55\xba\xeb\xa4\x9c\x33\x13\x2f\x44\x25\xc5\x3c\xd6\x75\xd9\x87\x86\x15\x06\x7a\x37\x31\x2a\xda\x06\xa9\xb3\x6a\xdc\x52\xb6\xc9\xfe\x8f\xd8\xef\xf1\xf5\x0b\x3f\xe9\x29\x32\x27\x25\xa7\x2a\x35\x9b\xca\xc8\x8a\x21\xa7\x0c\x11\x4e\x1b\xbb\x13\x3d\xd3\xf1\xd3\x1f\x4b\xb3\x95\x04\xaf\xdb\x85\xdb\x38\xc0\x72\x17\xe1\x95\xc1\x8f\x61\x0c\x85\x1e\x49\x56\xc4\xe2\x37\xd0\x9c\x61\x49\xac\x56\x64\x30\x82\xe6\x9a\x8a\xdd\x3d\x28\x66\x37\x96\xe2\x4d\xc5\xc8\x1f\x2f\xd9\x72\x04\xdc\x3e\x42\x75\xfe\x4f\xa4\x0d\x19\x54\xf0\x7c\xc8\x91\x6c\x2c\x01\x52\x91\x3f\xfa\x7f\xfd\xe9\x01\x7b\xc3\x0c\x09\xc3\xe1\x4b\x6d\xab\x5d\xcb\x09\x22\xd3\xf0\x08\x4c\x8e\xb9\x05\x74\xa0\x35\x46\xe2\x2c\x4f\xc8\x09\x74\x4d\x43\x03\x12\x01\xe6\xad\x25\x10\xdf\x9c\xe8\x59\xfd\xc9\x87\x53\xdd\x2e\xf3\x8e\xfb\x28\x4f\xef\xad\x74\x7d\x82\xd8\x88\x9c\x41\x57\xbd\xee\x13\x10\xc5\x6f\xe5\xc9\x07\x56\xb4\x69\xd5\xef\x83\x42\x40\x97\x2c\x21\x9b\x32\xcf\xea\x7d\xc7\x96\xfe\x54\xc4\x65\xb0\xf6\x79\x80\x03\xec\x44\x54\x54\x3f\x78\xfb\x32\x5e\xb2\xbb\xf7\x8b\xc4\xeb\xd4\xfb\x35\x80\x22\xd7\x9e\x2b\xec\x4a\xaf\x15\x9d\x7c\xe0\xda\xe8\xff\x8d\xf2\xa4\x90\xf5\xd4\x1f\xaa\x48\x8e\xe7\x35\x44\x62\x72\xab\xef\xf0\x54\x52\x49\x1b\xb4\xb6\xfe\x05\xb6\xb5\xc0\xef\xfc\x04\x2a\xd6\x28\xa6\x21\xe6\x4c\xed\x54\x3c\xd3\xae\x40\x4b\x0a\xc0\x45\x76\x11\x09\xec\x42\x9c\x34\x94\xaf\xe5\xc1\x01\x71\xd7\xe1\x72\xc1\x12\x9c\x58\x4b\x69\xd2\x53\x05\xf0\xa3\x34\xb1\x83\x0f\xb6\x9c\xf2\x6b\xcb\xaf\x68\xc5\xd0\xfd\x7a\xcd\xab\xb2\xa0\x0a\xd3\x1a\x51\xe8\x13\x2d\x5d\x0d\x2c\xb6\x41\x4b\x0a\x60\x05\x6d\x80\x75\xcc\xae\x5d\x3a\x13\x55\x86\x17\x6d\x45\x15\xb1\x12\x70\x2e\x55\x12\x5e\xcd\x20\x36\xeb\x76\x6a\x92\x35\x85\x57\x0e\x7e\xbb\x58\x25\x24\x66\x3c\xb3\x08\xaa\xb8\x9c\xa1\x66\xb9\x22\x66\xf6\xb1\xea\xcc\xed\xf6\x24\x0a\xe4\xcc\x1f\x3c\x41\xa2\xc7\x68\x28\x51\x4a\x0e\xd7\x84\xcf\x85\x54\xac\x3c\x88\x14\x90\x20\x0b\x27\xe4\xdb\xd0\xbc\x31\xa5\xef\xb7\xd5\xb8\x7c\x24\x19\x60\x65\xdc\xbb\x39\x41\xe5\xb8\xa9\x13\xbd\x33\xa9\xd8\x15\x53\x64\xdf\xe1\xba\xb1\x2b\x5e\x98\x83\x09\xf9\xff\x5b\x43\x2f\x35\xf8\x16\x2c\x48\x27\x0c\x43\x7b\x01\x07\xfe\x4f\x35\x79\x41\xf6\x61\xa8\xd8\x7a\x3c\xf0\x09\x24\x7a\xa9\x0d\xab\xd3\xf9\x79\x5b\x35\x10\xc9\x89\x8b\x39\x36\xc1\x8f\xde\xc6\xed\x16\x17\xad\xad\x15\x6e\x0f\x1d\x73\xe5\xa0\x23\x33\x1c\x92\x5c\x3b\xb9\xd8\x0b\xaf\x86\x8c\x0d\x7f\xa6\x86\xbd\xf0\xdf\x90\x23\x40\x14\x9b\x83\xf4\x42\xd9\xb3\xe5\xe6\x77\x89\x79\x98\x46\x36\xb2\x92\xf3\xe5\x79\xa3\x18\x2d\x8f\xa4\xd0\x46\x81\x8c\x7e\x48\xb7\xd2\xc5\x4d\x44\xb8\xe7\x4e\x5d\xed\x0a\x75\x15\x61\x72\x86\xb8\x4c\xb2\x9d\x2f\xb0\x15\x28\xfc\x90\xd0\x42\x49\xad\xc3\x3b\xdd\xd5\x64\x03\xdf\x9e\x9e\xf8\xbe\xa0\xde\xbf\x1c\xfa\x8c\xc2\x98\xe0\x6d\xbf\xa6\x4b\x27\x95\xe8\x94\x97\x3d\x04\x45\x4f\xfa\x5d\xd9\xe1\xd0\x9e\x8e\x37\xce\x83\xd5\x09\x0e\xdf\x1e\xdf\x35\x95\x61\x7b\x26\xef\x4d\x4b\x1a\xac\x0d\x07\x12\x1a\xd6\x2e\x18\x94\x30\xcb\x08\x31\x68\xa7\x74\xce\xaf\x98\x08\x33\xf3\x48\xda\x8e\xd6\xf4\xc3\xf9\x25\xbb\x4e\xf8\xa5\x7f\xd1\xef\xd8\xdd\x8b\x24\xc6\xe0\x0d\xfb\x41\x68\x6a\xb8\x9e\x71\x3a\xad\x1e\xb2\xf7\x29\x80\xa6\x9c\xb3\x8a\x15\x5b\x54\xdb\xbf\x8f\x89\x08\xd0\x7b\x46\x92\x19\x17\x2b\x3c\x96\x76\x74\x74\x28\x73\xbe\xd3\x1b\xd7\x01\x02\xcf\x0d\x0b\xd5\x72\xb2\x15\xae\x8f\x6e\x48\x0a\xc4\x2c\x88\xb6\x9e\x32\xe5\x45\x58\x9a\x7a\xe4\x40\x25\x49\x21\x95\x62\xba\x91\x58\xad\xea\x59\xc7\x09\xb2\xf4\xf3\x28\xb9\x84\x65\x68\x3d\x08\x4c\xe9\xc9\x07\xab\xf7\xea\xb4\x92\x00\xbc\x7a\x9c\xb4\xfa\x50\x4c\x05\xf2\xd5\x5d\x2b\x4b\xe7\x36\x3d\xf4\x86\xc7\xa0\x41\xfc\x49\xaa\x18\xee\xae\x21\x35\x50\x78\x25\x57\x42\xe1\x95\x27\x1b\x90\x20\x42\xc0\x8d\x73\x87\x73\x1c\xbe\x89\xe1\xdb\x9c\x03\x5d\x8f\xd0\x9c\x76\xb0\xad\xa2\x53\xc6\xec\xcd\x03\xc8\x02\xe3\xdc\x99\x23\x97\x6c\x09\x8f\xc7\x11\xd3\xbb\xd7\x0d\xdc\x16\x9e\xb0\x21\xf5\x5d\x78\x8d\xed\x2b\x0d\xfa\xbd\x9f\xe6\xe4\x87\x0c\xdd\xe3\x78\x25\xba\xee\xba\xab\xc7\xc7\x97\x9d\x37\x0e\x79\xb2\xe7\x8d\xeb\xe4\x72\xe7\x8b\x1b\x34\xf6\xe0\xea\x30\xbc\x86\xb8\xb8\xba\x2b\xdf\x86\x8e\x69\xfa\x14\xb7\x17\x85\xa4\x11\x39\x1b\xbc\xbd\xf0\xda\xe4\x06\x3b\x15\x23\xf2\x56\x1a\xfb\x9f\xc8\x23\x76\x2c\x99\x7e\x2b\x0d\x7c\xb2\x13\x2b\x89\x13\xb0\x4b\xeb\xe8\xbc\x16\x56\x0c\x0b\x3c\x6e\x5c\x76\x9b\x55\x14\xdc\x7a\x6d\x32\x83\x4f\x05\x91\xca\x4d\xf9\x40\x12\x82\x25\xad\x1d\x01\x71\x80\xde\xf5\xf9\xbe\xd1\x10\xb7\x54\xc4\xcb\x7c\x6f\xc4\x38\x42\x00\xf3\x18\xbf\x01\x28\xf6\xa6\x82\x82\xef\xb2\x85\x09\xa3\x76\xe6\xa8\x61\xf3\x3b\x97\x38\xae\x5e\x35\x53\x73\x46\x1a\x08\xeb\x64\xe0\xdc\x21\x8a\x04\x5e\x03\xd5\x89\x98\x98\xc1\xdb\x28\x73\x79\xe9\x3d\x3e\x14\x74\x4a\xb0\x35\xf2\xe8\xa8\x03\xf6\x7b\x44\x0a\x6a\x5d\x35\x05\x07\xc9\xff\x0b\xd1\xdb\xff\x21\x0d\xe5\x4a\x4f\xc8\xa1\xcf\x30\x8c\xbf\x73\x49\x1a\xd1\x63\x06\x90\xd2\xac\x07\x16\xa8\x20\xcc\x61\x5a\xc8\xd9\x9a\x32\x3e\x72\x78\xfb\xf6\xc0\x0e\xce\xe5\xbd\x4b\xb6\xdc\x4b\x45\x57\xc2\x2b\x96\x28\x7b\xa7\x62\xaf\x4b\x29\xec\x49\x81\xa0\x93\x02\xc0\xf9\x1e\x7c\xb7\x77\x7f\x7a\xff\x20\x0d\xb2\x03\x4c\x3a\xcb\xa0\x82\x0d\xdc\xb2\xbd\x3d\x55\xd3\x66\xd8\x96\xea\x98\xef\x3b\xb6\xdc\x5a\x08\xe6\x4d\x8f\x0a\x6f\xc2\x18\x67\xaa\x77\x9a\xa5\xc6\xfa\xfb\x0a\x62\xf4\x0b\xe7\x16\x94\x57\x4c\xa1\x4b\x30\x69\x6c\x74\x82\xd9\xb3\x26\xa4\xda\x77\x70\x3b\xc0\x8f\x30\xb0\xe5\x43\xef\xd1\xa8\xa4\xbc\x6c\x1b\xcf\xcf\x90\x86\x9b\xba\x63\xb8\x28\x64\xed\xfc\x22\xf8\x9e\xe0\x09\x77\x1b\x73\xec\x32\x9e\x50\xc6\x84\xad\x80\x39\x55\x3d\xaf\x4f\x62\x7c\x30\x9e\xcc\xe0\xe0\x65\xf6\xd8\x0f\xfe\xc0\x6e\x7a\x6f\x9d\xaa\x24\x02\x7c\xae\x7d\x3c\x0b\xae\x0d\x34\xad\x43\x60\x7d\x26\xd5\x94\x97\x25\xf8\x22\x91\xb8\x50\xf0\xb5\xc2\x38\x56\xd2\xf4\xfc\x50\x69\x42\x63\xe5\xa9\x1b\xea\xe0\x57\x9d\x5d\xe2\x99\x49\x49\x4b\xc6\x0b\x06\x71\xed\x91\xec\x83\xc2\x2b\xae\x4e\x8d\x67\x04\x3b\xfb\x49\x23\x4d\x99\x0f\x1f\xda\x23\x49\xb4\x55\x65\xb5\x3d\x50\xc4\xd0\x2d\x83\x91\x3e\x10\xc9\x2e\x29\x61\x6e\x85\xb4\xe9\x33\x5b\x52\xa3\x08\xd7\xdd\x02\xf6\xf6\x94\x19\xea\xfb\x5c\x88\x15\x34\xa8\xfe\xe4\x9f\x8a\x33\x59\xf6\x3d\xda\xb7\xc0\x42\x91\x7d\xff\x8f\xe9\x32\xb9\xe8\x85\x0c\xd6\xf1\x06\x68\x76\x39\x0f\x87\xe1\x0a\x97\x73\xa6\x6f\xef\x58\x80\xe1\xa3\x50\x14\x26\xdf\xce\x15\x43\x14\x60\x90\x4a\x20\xa5\x5c\xdb\xab\x56\xb0\x2b\x66\xb9\xb7\xe4\x76\x0e\xa7\x6d\x22\x66\x9a\xcb\xcf\xfa\x65\xcd\xab\xff\xff\x3b\x96\x6f\xa5\xf1\x61\xaa\x5f\x46\x2e\x60\x8e\x7a\xdc\x07\x5e\xb7\x35\xf6\xad\x36\xc6\xda\x30\x7c\x36\x63\x2a\xb1\x39\x1f\x09\xb5\x27\x7d\xdf\x75\x3f\x5a\xe3\xa4\x84\xa1\x6a\x0e\x05\xd3\xce\x0f\xed\x55\xae\x79\x25\xa7\xb4\x22\x35\x17\x96\xb4\xb4\x99\xb8\x58\x7b\x4e\x78\x63\xf7\xe7\x2d\xc4\x81\x0e\xea\x3a\x4b\xa1\x73\x3c\x2d\x43\x42\xb9\xe4\xf1\xd9\xca\x6c\xac\x3c\x1c\xe4\x4b\xc5\xb4\xc6\xf4\xe0\x37\x5c\x1c\xbb\xd0\x62\xd2\xb0\xaf\xad\x74\xfc\x40\xeb\xa6\x62\x23\x0c\x3f\x7e\x3d\xfe\xa7\x14\x8c\xb8\xb2\x87\x51\x60\x51\x57\xc7\x63\x24\x79\x89\x0a\x6f\x13\x60\xc9\x7c\x7d\x4d\x12\x05\x3d\xb9\x1b\x82\xad\x9a\x7c\xf5\xfc\xab\xe7\x2f\xd3\x44\xcc\xa9\x2b\x3d\x2a\xa8\x76\xdd\x6d\xd7\x57\xf7\xce\x45\x3c\x78\xfd\x8b\xd8\xd9\x79\xe9\xfe\xfb\x95\xfb\xef\xd7\xe4\x5f\x89\x4f\x23\x67\xe4\xac\xf7\x5f\xfb\x9f\xc4\xa7\x8d\x2d\xf3\x44\xcb\xf5\x72\xd4\x3f\x5b\x0b\x2a\xf0\xe0\xb3\xe7\xbc\xdb\xdf\xa0\xed\xe1\x2b\xc0\x39\x53\xc8\x9a\xc1\xd4\x7f\xf5\xbf\xd3\x74\x4d\x7c\x2e\x64\xe8\x1b\x22\x85\x7b\xfa\xcb\x7d\x98\xae\x03\x72\x0d\x79\x0f\x35\xbd\xc4\x80\xd5\x61\x61\x5a\x5a\x59\x82\xf7\xbf\x1e\xbf\x3c\x20\x52\xf4\x6e\x4f\x22\xe1\x8a\x4b\xab\xaf\xf9\x99\xd8\x7f\x99\x88\xf1\xb0\x3a\x9d\x5f\x6d\x98\xce\xde\x4c\xc2\xdb\x52\xb1\x84\x57\xc8\x2b\x93\xbd\x38\x3e\x14\xcb\x6b\xba\x0c\x42\xd9\xab\xeb\x73\x7e\xc5\xc8\x82\xcf\x17\x80\x86\x30\xa0\x5f\x2a\xc1\xbc\x6f\x90\xb1\xdc\xb7\xb4\x44\x42\x96\x84\x27\x6a\x7f\xa7\xe6\x99\x86\x8c\x16\x8c\x51\x38\xa0\x9b\x50\xa7\x16\x8a\x4f\x5e\x82\x58\x79\xb1\x02\xf4\xb1\xe5\x34\xa7\xaf\xbf\xba\xbb\x4e\x11\x64\xf2\xd6\xd4\x8a\x40\x41\xaf\xe1\xc1\xfa\x69\xb6\x7a\xb8\x0c\xe0\xda\x8f\x9c\x5a\x70\x50\x84\xc3\x33\x1c\xe3\x97\xce\x1a\xee\x4e\xb4\x6e\xf6\xd2\xfc\xb2\x67\xb2\x0c\x09\x22\xc4\xe9\xd3\x90\x58\xa7\xc9\x5e\xff\x18\xd8\x83\x44\xbb\xe0\xbd\x71\x18\xce\xce\xde\xe3\x52\xd8\xf7\xf0\x9b\x7f\x50\x1b\x70\x42\x0e\x45\xd9\x55\x13\x25\xce\x12\xfb\xb5\xa5\x15\x38\xaf\xe7\x90\x27\xa8\xf2\xcc\x57\x54\x77\xb4\xd6\xd7\xb6\x93\xe6\x89\xaf\x8d\xfb\x5e\xb7\x15\x64\x5a\x7e\xfc\xfd\xb3\x72\x82\xee\x52\xad\xc0\xea\x0c\xb9\x56\xb5\xc4\xde\xf5\xc2\xab\xff\x2e\xf3\x42\x3a\xbf\xc4\xa0\xcd\x70\x3a\xdb\x50\x4e\xd7\xe5\x6e\x91\x29\x5b\xd0\x2b\xbb\x1d\x01\xc6\x29\xde\xa9\x6e\x89\x41\xc5\x1a\x92\xed\x1d\x15\x58\x38\x11\xa8\xfb\x2c\xf3\x62\xc0\x36\xef\xde\x4d\x1a\x7c\xbf\x9f\x56\x4f\xab\x10\xff\xe8\x59\x12\x89\x26\x75\x8a\x82\xfa\xd5\x68\x65\x5e\xdd\xe7\xbf\x7d\x28\xbd\xf5\xab\x34\xbd\xf5\xde\x95\x4b\xfc\x6f\xb2\x8d\xd4\x6d\xdc\x8d\xfb\xf5\xb7\xfb\xdd\xac\x1f\x40\x86\xff\x9a\xc0\x05\x64\xac\x2e\xc9\x39\x71\x87\x39\xf5\x5e\x73\xd3\x52\x04\xe0\x12\xec\xda\x95\x54\x47\xcb\xba\xb2\x44\x91\x93\xcb\xab\x6c\x69\x72\x65\xca\x0a\xda\x6a\xbb\xa9\xeb\xc6\x9a\xdf\x44\x5b\xf6\xf3\x0e\xc3\xaf\xf7\xbf\x26\x63\xf2\xe2\xc0\xee\x6e\x81\xa2\x05\x58\x30\x56\xb8\xa1\xb1\x0d\x1a\x7a\x66\x61\x4d\x7d\xbb\xce\x89\x52\x8e\x3b\xf4\xce\x15\xb5\xf7\xf1\xa9\x4d\x42\x96\xec\x70\x36\xe3\x82\x9b\x65\x2a\x9c\x7d\x1e\xf5\xe9\xed\x1a\x25\x91\x1a\xb5\x90\xd7\xe4\xda\x61\x09\x00\x2f\x3b\x48\xbc\x98\xfc\xe7\xf6\x8f\x41\x8e\x6b\x38\x2c\x83\x2e\xe2\x2c\x8e\xa0\x0f\x38\x69\x63\xf9\x6e\xe2\xea\xe6\x5d\xa3\x9e\x94\xb1\xc6\xe4\xaf\x52\x48\xf5\x0a\x8d\x43\xec\x65\x1f\x74\x90\x1b\x5f\xcb\x9d\x2f\x45\xd5\x96\x51\x07\x8c\x4e\x7b\x4a\x3c\x3e\xc7\xe4\x14\xfc\xb7\xaf\x3e\x36\x72\xf0\xf2\x02\x88\x42\x19\x0e\xbc\xdb\x08\x4a\x4f\xe8\xdf\x58\x24\x0f\x47\x39\xc7\x40\x60\x3f\x30\x69\xbf\x85\x49\x25\x0d\xf0\xcf\x83\xd7\x1e\xd9\x19\xb9\x80\xf4\xee\xed\x6f\xa5\x98\x8e\x5b\x37\x12\xf6\x3e\xc3\xa4\xf4\xd5\x0d\x90\x34\xfa\x43\x6c\x1a\xe4\x3d\x7b\xf0\xc8\xd6\x38\xea\x47\x84\x56\x12\x82\x48\xf6\x38\xb2\x1f\xb1\xd2\xdd\x38\x93\x3e\xd6\xb4\x1a\xfb\x48\x22\x63\x01\x68\x9f\x5d\xf9\xca\xa8\xb7\x0b\x72\x6c\x41\xbf\x20\x9f\xb0\xe9\x1e\x78\x83\x21\x95\xdb\xda\x61\x51\x32\xfd\xf6\xea\xfa\x02\x09\xde\x61\x7d\xc9\x40\xb3\x80\x85\xc3\x58\xda\x04\xf6\x60\xdc\x5c\x9d\xba\x70\xb3\x53\x96\xb8\x4e\x4e\xfc\xb4\xea\x34\x07\xc8\xde\x82\x56\xb1\xdd\x61\xed\x1d\x5e\x32\x85\xea\xce\x94\xf5\x50\x98\x52\xeb\x2d\xf0\xfa\xa9\x7b\x3a\x22\x36\x01\x94\x00\x0e\xfe\x27\x04\xbf\xdd\x9b\xb6\xc5\x25\x33\x3e\x31\x43\x01\x4a\x4a\xd3\x1a\x32\xa5\x15\x15\x85\xdd\x8b\xa0\xc9\xa6\x39\xea\x67\xde\xf5\x6f\x24\x12\x80\xa3\x25\xbf\x0d\x76\x8c\x08\xf8\x3f\xf8\x0a\x51\xfd\x2a\x17\xda\x58\xaa\xb1\xb0\x75\xd8\xe4\x1d\x56\x5a\x8e\xac\xd4\xf5\x83\xae\x05\x2f\x70\x78\xf7\x6f\xcc\x9f\x71\x1a\x01\x63\xc6\xc1\xc6\x45\xc9\x2b\x32\xa5\x17\xda\x26\x5d\xcf\xe1\xf4\xf6\x4f\x8b\xb4\x97\x64\x93\x39\x64\xff\xad\x6c\x8f\xbd\x3e\x5e\xa3\x87\x80\xda\x1b\xe1\x2a\xda\x5d\xe2\x90\x3c\xf1\xe5\x41\x41\xa7\x66\xe8\x8c\x8b\x12\xf0\x81\x57\x89\x09\x4f\xed\x53\x65\x0d\x01\x4f\x11\x98\xb9\xf9\x29\xda\xec\x8e\x7d\x68\xf1\xb9\xe6\xe3\xde\x96\x10\x5d\x77\x5f\xf4\x55\x14\x28\xb2\xa1\x95\x47\xf9\xb1\x2a\x05\x9f\x59\xab\xab\x94\x0c\xb3\x22\xd0\x3d\x9e\xe8\x7c\x63\x5e\x2f\xe9\x5c\x44\xa9\xa7\x76\xcf\xdd\x42\xf6\x7d\x76\x00\x31\xac\xaa\xf0\x74\xe8\x3c\x62\xd6\x12\x36\xb2\x73\x89\xa5\xfa\xf6\xc7\xa4\x1f\x9a\xd8\x38\x58\x3c\x90\x07\x6d\x82\xc8\xe9\x32\xb4\x96\x4d\xcd\xc1\x9d\xb6\x86\xcc\xf9\x95\x55\xa1\xd6\xe2\x1f\x9b\x62\x19\x18\x7f\x5a\xb0\xaa\x21\x8a\x95\x6d\xc1\x06\x64\x02\xea\x44\x33\x9b\x90\xc3\xd8\x21\x08\x98\x19\xe1\xb8\xdc\xeb\xf1\xe2\x9e\xeb\x83\x3b\x5c\x51\xe4\x33\x90\xb0\x60\xe2\xf1\x19\x61\x57\x4c\x2d\x49\x23\xb5\x06\xd9\x0f\xfa\x02\x82\x1c\x42\x36\xe5\xcc\x17\xd6\x80\x53\x05\xe6\xcc\xf9\x17\x92\x06\xdf\x73\x4e\x89\x3d\x70\x2a\xcb\xc1\x3a\xc0\xee\x46\xad\xbf\x7e\xfe\x32\x35\x6a\x9d\xdb\xfb\x77\x06\xff\x0b\x21\xe5\x41\xa1\xe5\xd3\xd9\x26\x39\x19\xe6\xb6\x27\x79\x3e\x25\xea\x9c\x1a\x9a\x84\x99\x81\xe0\xf0\xd7\x07\x51\xc0\xfa\xeb\xe7\x5f\x3d\x7f\xb9\x6f\xe7\xfe\xab\x03\xbb\x0a\x51\x58\xf9\xab\x28\xac\x1c\x7e\xe9\xde\x22\x01\xc2\x8a\x74\x49\x3b\xfb\x2f\x0f\x26\x50\xd3\x00\xf8\xa4\xd7\x52\x95\xae\xc4\xdf\x23\x46\xda\x37\x0f\xed\x3f\x79\xed\x95\xcf\x11\x08\xad\x20\x1d\xd3\xdc\x43\x10\xd0\x80\x30\x3a\x37\xe4\xcb\x5a\x2a\xf6\x65\x34\xc4\x63\x55\x0c\xd6\x93\xbb\x6a\xda\x8c\x2f\x13\xf2\x76\x87\x14\x3b\x0f\x2d\x75\xbe\x29\x45\xad\xa6\xcd\x1d\x9e\x73\x25\xab\xb6\xbe\x6b\x16\xf6\x30\x85\xe8\x7b\x57\xb7\xea\x86\x76\xa5\x95\x98\xe6\x50\xbb\x9a\xe3\xe9\x32\x86\xf2\x9d\xb2\x4a\x8a\x39\xc6\x2a\x43\xc3\xc2\x3b\x8e\xfa\x69\xc8\xea\x85\x14\x05\x6b\x8c\x7e\xae\x8d\x54\x74\xce\x9e\x3b\x22\xef\x34\xd8\xf6\x20\x0b\x7e\x04\x6a\xfb\x95\x6f\xd8\x14\x08\xdf\x23\x00\x2d\xfb\xfa\x6f\x90\x97\xb4\x00\xd8\x49\x98\x75\xab\x2d\x45\x0d\x86\x45\xea\x74\x6f\x09\xb5\x20\xa1\x83\xe0\x90\x6a\x50\x7a\xad\x4f\x2a\xaa\x0d\x2f\xbe\xad\x64\x71\x79\x6e\x64\x9a\xa3\x2f\x87\x85\xb1\x89\x96\x1e\x27\x08\x72\xf8\xd3\x39\x39\xe6\xfa\x92\x28\xa6\x65\xab\x0a\xd7\xaa\x6c\x05\x90\xf1\xae\xd8\xb1\x78\xd9\xcd\x54\x31\xe3\x20\xf7\x49\x4d\x8b\x05\x9a\xfe\x2e\xeb\x81\x7d\x68\xa4\xee\x9a\xaf\x27\xb0\x14\x5e\x71\xa7\x8a\xc3\x9f\xce\xd7\x5f\x99\xeb\xa8\x49\x06\xfa\x10\xb1\x94\x06\x3c\xb1\x5d\xa6\xfc\xd8\x28\x96\xa6\x95\x6d\x9c\x69\xcb\xf0\xe0\x94\x52\xac\xe4\x0a\x81\x54\xdd\xbb\xb2\xa9\x9e\x14\x9a\x4f\xe8\xb5\x9e\x14\xb2\x26\x47\xe7\xa7\xa4\x54\xfc\x2a\xb5\x4f\xd2\x30\x51\xf6\x05\xbd\xd6\x0c\xc9\x9f\x5a\xf2\xed\xd7\x29\xf3\xb0\xe5\x5e\xa1\xf8\x36\xa7\xc7\x09\x3f\x1f\x5a\xff\x3d\xd3\x17\xf6\xdd\x13\xed\xb9\x5c\x55\x73\x48\x85\xf7\xc8\xce\x78\xc5\x10\xb0\x0b\x39\xd1\xc5\x7d\x9d\xd8\x87\x6d\xbe\x94\x2d\xb9\xa6\xe8\xd8\x86\x73\x36\xbd\x7c\xf3\x82\x37\xaf\xc8\x89\xd0\xad\x62\x5d\x91\xfa\x2a\x09\x56\x71\xf7\x7d\x84\x3d\xba\x10\xc8\x06\xb7\x1d\xc5\x7c\x00\xc4\x18\x5e\x27\x68\x9d\xe9\x57\x64\x8f\x7d\x30\xdf\xec\x8d\xc8\xde\x87\x99\xb6\xff\x11\x66\xa6\xf7\x26\xe4\xb4\x6e\x2a\x5e\x70\x63\xcd\x51\x31\x63\xaa\x73\x15\xe3\x0f\x32\x75\x59\xda\x95\x3d\x49\x72\x54\xb2\x82\x53\x18\xd8\x73\xcb\x1c\x1e\x08\xf1\x4c\x1e\x7d\x20\xee\x93\xbd\x4f\x67\x44\x62\xe9\x41\x1f\xa6\x9c\xeb\xf0\x70\xcb\xd0\x6e\x74\x91\xd0\x6f\xa9\xbb\x3a\x16\x7e\x2d\x95\x7f\xe4\xf3\x92\x5d\x3d\xd7\x25\x7d\x39\x82\xd7\x42\xfe\x5c\xae\xcc\x01\xd5\x64\xef\xe5\x9d\x1b\x05\x74\xd7\x39\xaf\x79\x45\x55\xb5\x1c\xc5\x73\xd9\x3d\xdf\x1e\x95\x9e\x10\x70\x26\xbf\xd8\x23\xfb\x88\x06\x0e\xea\x7a\xc5\x7c\x3b\xbe\xd0\xd5\x17\x2a\xa0\x92\x9b\xdd\x0d\x4d\x0c\x21\x83\x93\x43\x08\x1c\x4c\xb4\x7c\x27\xaa\x64\x70\x8f\x5c\xdc\xef\xe9\xf0\xf8\x81\xaa\x75\x51\xec\x99\x44\xcd\x8d\x75\xb7\xf8\x96\x3c\x5c\x38\x13\xe0\x8d\xe5\xd1\x01\x78\x16\xbb\x26\xce\xd2\xdb\x0f\x92\xa0\x29\x6c\x7b\x41\x3d\x1d\x90\x52\x2f\xf8\xaf\x2d\x23\xa7\xc7\xfe\xa0\x6e\x98\xd2\x5c\x1b\x26\x0c\x29\x7b\x1a\x3a\x47\xb5\x7d\xff\xb0\xa6\xff\x94\x82\x9c\x7c\x7b\xee\x1e\x94\xbc\xcd\x76\x6f\x75\x13\x0f\x2b\xfa\xcf\x56\x31\x6b\xcf\x6c\xcd\xe4\xf2\x04\xac\xda\x59\xf6\x73\x72\x4c\x0d\x45\x73\x0b\x4f\x0c\xd9\xf5\xf4\x02\xb3\x68\x0a\x78\x6e\xbe\x79\x5c\x3e\xa3\x28\x10\x75\x27\x4b\x28\x7a\x19\xbb\x28\x69\xf3\xb1\xd1\xfc\xb1\xfc\x8c\xf6\x8f\x1d\x21\x83\x05\xb4\x65\xcb\xc3\xbe\xcf\xdb\x54\x8f\x3e\xfe\xfc\x87\xf7\xa7\x5b\xb0\x5b\x0a\xb0\xc9\xe7\x6f\x64\x99\xc7\x78\x79\x16\x3d\xd0\xab\x68\xd0\x10\xf8\x08\x3f\x27\xb5\x1d\x89\xbc\x95\x82\x8d\xc8\x7b\x46\x4b\x62\x0f\x2b\xf7\xcf\x9f\x14\x37\x6c\xf2\x6c\x5b\x4a\xae\x5f\xc4\x2c\x13\xe1\x1f\xe6\x27\xe1\x6d\xd4\x26\x12\x7a\xb9\x82\x48\x77\x3a\xeb\xb4\x92\x53\xe2\x44\xea\x36\xdf\xfe\x87\xf7\xa7\xd9\x5e\xfe\x87\xf7\xa7\xfe\xdd\xed\x3f\xe5\x6c\x37\x5f\x7b\xd7\x0c\xf7\xd7\x2b\x16\xf3\x70\xcb\xe5\x8d\xab\x89\xa0\x6b\xd6\xf8\xfd\x9b\xe2\x93\x2d\x1b\xe1\x19\x20\x9c\x9c\xa1\xf7\x8a\x58\xba\xd2\xdc\xa0\x5c\x24\xc3\x23\xf6\x85\xab\x7d\x52\xd7\x93\x29\xca\x7a\x83\xde\x7e\xe5\x2b\x52\xb7\x95\x81\x2e\x37\xb0\xb5\xec\x5e\x83\x02\x32\xbf\xc9\x88\xeb\xfa\x6a\xb5\x03\xcc\x34\x29\x5f\x79\xf4\xa4\xf0\x8b\xcd\x3f\x78\x43\x05\x9d\xdb\xdb\xe1\xc4\x26\x35\xfe\x19\xed\xe9\x7d\x0c\xf0\x8b\xf0\x15\xbd\xa2\xbc\xa2\x53\x5e\x71\x03\xd6\xc8\xc1\xc4\xcf\x25\x42\xcd\x00\xc9\x5b\x13\xf6\x3b\x67\xd2\xc5\x9d\x30\xa0\x7b\x22\xd9\xb7\xdf\x3d\xbf\xb6\x87\xe2\xc1\x04\x4e\x48\xb8\x71\xc1\x54\x6c\xf5\x25\x8f\x6c\x37\xfc\xfb\x7b\xb2\x16\x87\x5b\x68\xd1\xc6\x83\xd9\x48\xb3\x04\xac\x34\xdd\xaa\x25\x60\x09\xd8\x68\x09\xc0\x17\xae\x97\xed\x16\x8c\x01\x18\x3e\xc1\x18\x80\xdf\x65\x36\x06\xec\xb1\xf4\x39\x19\x03\x9a\x15\x8a\x99\x01\xe6\x00\x88\xc6\xc4\xdf\x0f\x35\x08\x76\x4e\x2e\x96\x4f\x72\x31\xbe\x3a\xe6\xca\xb2\x42\xdd\xe3\xbc\xb2\x1e\x1a\xda\xe3\x57\x2b\x28\xd7\x28\xbc\xce\x9d\x76\xe0\x1b\xdd\xc3\xef\xad\xc8\x4a\xc1\xf7\xc7\x6b\xf0\x81\x1e\x36\x4d\x9e\x79\xf1\x4f\xf3\xd3\x82\x6a\x0f\x7c\x4c\x92\xb7\xf6\xc0\xd7\x2c\x58\xb3\x98\x6d\x0d\xda\xc1\x8e\xfe\xfa\xbc\x9f\x48\x72\xc4\x9a\x05\x79\x7d\xbe\xe1\x00\x43\xfc\x0e\x3b\x5d\x1a\xd3\x4b\x9e\x69\x52\xf1\x19\x33\x3c\x35\x32\x12\x9f\x61\x47\x48\x4b\xef\x00\x0b\xc0\x4c\xfe\xc0\xc2\xe9\x0a\x81\x47\x21\x7d\x7b\xd3\x60\xf7\x3c\xc2\xc3\xa5\x96\x82\x1b\x79\xe7\x5e\xe4\x24\x47\x1f\x03\x37\xf4\xb6\x8f\x06\x4f\x87\x5d\xd4\xf7\x7e\x3a\xc9\x9b\xe8\x53\x4a\x0a\x59\x55\xac\xf0\x58\x1a\xc0\xa6\x03\x66\x0e\xaf\x0d\x2e\x72\x97\x0a\xac\x27\x97\x7f\x00\x27\xb9\x73\x87\x3f\x47\xd6\x7b\xfe\xfe\xe4\xf0\xf8\xcd\xc9\xa4\x2e\xbf\x58\xc8\xeb\xb1\x91\xe3\x56\xb3\x31\x4f\x85\x4a\xdd\x7a\x97\x85\x0c\xd6\xf4\x3d\xa0\x16\x37\xd4\x2c\xf2\x98\xd7\xf6\x49\x96\x7d\xba\x8e\xf6\x3f\x68\xc4\x0b\x00\x44\x36\x97\x87\xa8\xa4\x34\x23\xa2\x28\x24\xdf\x86\x4e\xc9\xb3\xb6\xaa\x90\xcf\xac\xec\x19\xc5\xf1\xe1\xe7\x4f\x46\xae\x57\xa7\x7a\x93\xfb\x59\x59\xbc\xbb\x22\x1e\x86\xeb\x96\xa9\x36\x33\xc9\xc8\x30\x1d\x25\x7d\x96\x39\xef\x7d\x8e\xb9\x0f\x66\x61\x19\xe8\x92\x2d\x09\xa0\xda\x5b\xb3\xf5\x07\xcd\x54\x7f\x0b\x32\x53\xc0\xac\x3f\x6f\x35\x53\x13\x7c\xfc\x23\x5f\xe9\x21\xba\x32\xbc\xff\x7b\x36\xdb\x8d\x75\x7e\xcf\x66\x9b\x96\xd9\x7d\x0c\xdd\x99\x43\x55\x95\x55\xc5\x5b\xb3\xc0\xca\x5f\xec\x9f\x8f\x76\xca\xc6\x75\xc7\x3e\x08\x8f\x7c\xa1\x07\xe1\xab\xe7\x68\x6c\x23\x06\x58\x55\x24\x73\x13\x90\x38\x8e\xe6\x38\x63\x60\xb7\x94\x8b\x5e\x0b\x58\x84\x20\xe3\x57\xac\x5a\x06\x5d\x1d\xeb\x66\xca\x16\x11\x91\x69\x71\x79\x4d\x55\x09\xfd\xa6\x1b\x6a\xb8\xf3\x70\xf3\x74\xc5\xd2\x5e\xbe\x47\xb9\xc3\x5c\x76\x8d\x44\x5c\x01\xb6\xc6\x37\xe6\xce\x98\xc1\x82\x50\xe1\xc0\xa5\x1d\x82\x9a\x3d\x23\x69\x72\xd2\x85\x27\xa2\xb6\xb6\x5b\xc1\x94\xb5\xf6\xab\x25\xb9\x56\x32\x15\x81\xcd\x5f\x77\x4c\x2c\x91\x57\x4c\x5d\x71\x76\xfd\xfc\x5a\xaa\x4b\x2e\xe6\x63\xfb\xb2\x63\xdc\x02\xfa\xb9\xe5\x44\xfd\xfc\x0b\xf8\xcf\x00\xaa\x32\x75\xf6\x08\x1e\xea\xbd\xbd\x1c\xea\xf0\xe0\x86\x03\xf6\xb2\xe7\xdb\xb6\xa5\xba\xa5\xc1\xee\x25\x19\xeb\xd1\xca\x9f\xd8\x8a\x96\x52\xe3\x3d\x76\x1d\x7b\xf2\x9a\x96\x75\x22\x8a\x31\xd9\x19\x71\x9d\xea\xdc\xe1\xa2\x4c\x5b\xba\x2c\xce\x1d\x18\xbd\xef\xdc\x71\x9f\xb9\x24\xd0\x50\x0e\x42\x7d\x54\x02\x80\x67\x7d\x91\x47\xbf\xc6\x23\x83\x87\x07\x07\xbf\x5b\x88\xc2\x51\x9c\x39\x3e\x81\x4f\x85\x08\x85\x6c\x98\x15\xc9\xc5\xe5\x44\xaa\xf9\x7d\x14\x6d\xac\xf2\x6b\xbd\xd4\xbf\x56\x63\xa4\x60\xdc\x94\x1d\xc3\x3e\x3e\xcf\xd5\x53\x75\xc6\xad\xd5\x19\x8f\x3b\xd1\x63\x87\x6b\x2e\xee\x73\x4b\x91\xcf\xd2\x4b\xf3\x59\x85\xdc\xb6\xc8\x13\xc3\x7d\x31\xbb\x66\xa2\x77\x1a\x5d\x23\x01\x9b\xcd\x35\xcc\x04\x0b\x1c\x4f\x16\x1f\x2b\x04\x14\x06\xaa\x68\xcd\x0c\x53\x1d\x60\x7c\x21\x85\x18\xd2\x6f\xd6\x48\xf2\xae\x61\xe2\x1c\x0e\xe1\x27\xb3\xfa\xc9\xac\xbe\xfd\x7a\x32\xab\x9f\xcc\xea\x1c\x66\xf5\xce\x15\x0c\x79\x79\x8a\x20\x88\xae\x10\xb0\x43\x74\x70\x36\xcb\xe3\x3b\x33\x53\xad\x67\x29\x66\x7c\xfe\x86\x36\x83\x0d\xe8\xf0\xa4\x15\x63\x38\x7c\xec\x32\x1b\x00\x9a\xaa\x91\x0d\xb4\xe8\x73\x30\xa2\x30\xfd\x0f\x6f\x99\x0d\x3d\x8c\xdc\x86\xcb\x56\x04\x32\x80\xbf\x23\x52\xfa\xfa\x46\x6d\x3f\x99\x72\xd3\x69\x12\x9a\x19\xec\x07\x86\x3d\x57\x89\x14\xa4\x70\x08\xef\x60\xff\x44\x7d\xea\x32\xd8\x54\x82\xc8\xc2\x78\xa8\xd1\xd0\x3e\xec\xc5\x8b\x17\x2f\xb0\x77\xcc\xef\x7f\xff\x7b\x22\x15\xa1\xa4\x64\x05\xaf\xd7\x6f\x84\xbb\x7e\xfb\x32\xb1\xbd\x82\xbd\xfe\x76\xf8\xe6\x7b\xc0\x65\x69\x8c\xc6\x0e\x8d\x48\x91\x7d\x70\x6f\x50\x3d\x22\xff\xe7\xfc\xdd\xdb\xae\xf5\x5f\xff\x5b\xf0\x9a\x84\xe9\x4c\xa7\x27\x0e\xdf\xbe\xf8\xdd\x37\xdf\x0c\x78\x12\x38\x5c\xa4\xe2\x0e\xce\xd8\x43\xcc\x50\x7b\x1e\x2b\x86\x3d\x79\x40\x81\xf0\x16\x2c\x02\x80\x99\xe4\xf6\x20\xc4\x2b\x28\x35\x9f\x2f\x8c\x83\x89\xb5\x5b\xbc\xe2\x85\x41\x45\x00\xc1\xb5\xa4\x43\x6b\x86\x4d\x8f\x34\x04\xeb\x7d\x40\x02\x4b\xc9\x46\xa4\xe2\x97\x8c\xcc\xf4\x5f\x94\x6c\x9b\xae\x91\x2f\xf6\x2c\xf1\xd8\x47\x48\x44\xc7\xfb\xc9\x7d\x30\x77\xa5\x92\x7a\x50\x06\x4a\x2e\x21\x03\x44\xac\xb8\x1c\x1c\xf2\x69\xd7\x18\xb6\xa1\x3c\x80\x1d\x41\xd9\x26\xea\xb2\x7d\x1d\xb9\x48\x04\x94\xb3\xd7\x51\x38\x51\x7c\x03\x87\x46\xc9\xff\x46\x26\x07\x88\xdf\xe8\x44\x07\x68\x5c\xcb\x73\x1e\x18\xb7\xcb\x4c\x4c\x1e\xff\x92\x21\xf4\xad\xb5\xd7\x98\x08\xad\x16\xe1\xed\x01\xc5\x36\x9a\x1b\xfb\x45\xc5\xb5\x25\x0d\x3a\x02\x39\x8a\x93\xc7\xde\xf0\xa6\x61\x34\xd8\xf7\x1a\x77\x44\x2b\xd6\x46\xc5\x4e\x1a\x03\x46\x86\x23\x1d\x5e\x90\xfa\x2e\xb8\xdd\xd8\x08\x90\xee\x9a\xcc\xb8\x7b\x3d\x17\x84\x05\x4b\x6f\xdb\x1f\x2d\xa9\x66\xa6\x75\x4b\xcf\x94\x92\xca\xbe\x2b\xd3\xda\xf5\x57\xab\xa9\xba\x64\x65\x38\xff\x26\xe4\xcc\x4e\x8a\xef\x6f\x33\xc0\xc5\x53\x51\x6b\x85\xa1\x13\x9f\x2e\xe1\x35\x9d\xc1\x0e\xc4\x3d\x9b\x4c\x9e\xa1\xe0\x95\x8a\x68\x43\x95\x93\x86\xf6\xf3\x61\x92\x67\x8b\x79\x6b\x3d\xb9\xf1\x86\x36\xd0\x02\x1b\xf4\x4c\x60\x00\xf0\x61\xc0\x3b\xbb\xc3\x87\xba\x35\x4a\x3f\x5b\x32\x78\x18\x86\x3a\xdc\xf1\x1a\x27\x23\xac\xfb\xdf\xdb\x89\x19\xb2\xcf\x07\xbb\x49\x40\x52\x0d\xf9\xf9\x0a\x03\x5c\xf6\x31\xeb\x8d\xf4\xd2\x68\x98\x41\x9e\xc9\xf8\xad\x07\x28\xe1\x78\xe5\x74\x0b\x21\x3d\xfd\xe4\x9c\x4f\xd2\xc4\x0d\x7a\x7f\xaa\x01\x7b\x08\xaf\x1d\x52\xc0\xf1\xda\x35\x35\x1c\xaf\xd3\x19\x88\xf2\x95\x23\xdb\x1d\x35\xb1\x51\xe5\x75\x0d\xbb\x76\x43\x07\xdd\x9e\x06\x8d\xd7\x56\xf4\x68\xbc\x72\x68\xd3\x78\x0d\xd7\xa9\xf1\x1a\x92\x06\x8d\x57\x5e\xc1\xe1\x93\xa9\x71\x31\x9c\xda\x81\x9a\xc5\x2c\x30\x00\x44\x3d\xc1\xa7\xe2\x85\xf1\x60\x79\xe1\x94\x1a\x14\x19\x74\xaa\x65\xd5\x1a\x1c\x38\xd7\xa3\x63\x7d\x09\x5e\x88\x55\xd0\x93\x62\x90\x92\xb4\x3a\x48\xa4\x7b\x81\x76\x8c\xea\xca\xf0\x11\x76\x33\x87\x7f\x48\x28\x24\x17\xdb\xe6\x0d\x81\x6c\x3f\xfc\xb1\xf5\xd0\x47\xee\xb0\xc7\xae\x85\x3c\x72\x82\x4b\x24\x86\x3a\x82\x7f\x34\xc7\xde\xf1\x0f\x0b\xd8\x82\xd7\x0b\xe6\x8a\x5c\x22\xe3\xd7\x2a\x59\xf6\x08\x05\x8b\xdc\xf7\x5b\xc5\xa6\x3e\xdb\x8a\x96\xe7\x0d\xf7\x14\x9a\x0f\x0f\x22\x68\x4e\xf6\x8f\x02\x66\xb6\xaf\x97\x3d\x15\x86\xa9\x19\x2d\xd8\x41\x1c\x5c\x60\xcd\x82\xd5\x4c\xd9\x89\x77\xf7\x79\x08\xe6\x05\x15\x65\xe5\xa0\xcf\x71\x17\x11\xf6\xc1\x30\x65\x17\xa9\x4b\x3e\x4b\x52\x1e\xb7\x0d\x98\x05\x94\x6f\x23\xd6\x01\x03\x6f\xfb\xac\x41\x2a\xbc\x7a\x24\xa2\x93\xa7\x5b\x56\xdf\x37\xcd\xb2\x80\x8e\x03\x4c\xe9\x12\xf4\x48\x0a\xd0\x8a\x41\xdc\x2f\x65\xab\x30\xe1\x36\xe4\x51\x16\x52\x29\xab\x9f\x03\x41\x54\x13\xc5\xe6\x5c\x1b\xe8\x0e\xe3\xbb\x5a\x62\x87\x89\xad\xe1\xf1\xec\x54\x26\x5f\x48\xd9\xbb\x05\xe9\x28\x79\x0c\x67\xd1\x35\x4a\x5e\xf1\xd2\x1b\x74\xf1\xf9\xcc\x35\x69\xa8\x8e\xf0\xd3\xa9\xd6\xb2\xe0\x10\x00\xeb\xb8\x28\x79\x7c\xf4\x84\x82\xb9\x58\x32\x63\xad\x7b\xc1\x7a\xc8\xb7\x71\x92\xa1\x24\xb4\x69\xaa\xe4\x4a\x9b\xc1\x6c\x21\x64\xc9\xce\xda\x69\xc5\xf5\xe2\x7c\x57\x12\xa7\x36\xd1\x84\xc5\xc9\x6b\x15\x4d\x37\x25\x50\x0d\x48\xda\x12\x9a\x83\xc5\x65\xf5\x25\x6b\x60\x72\x29\xc0\xd5\x45\xb5\xf6\xa3\xc6\xa2\x46\x82\xde\x59\x31\xc3\xfc\x57\xe9\x7a\x74\xf7\xde\xae\xf7\x84\xb5\xc9\xed\xa7\x3f\x88\xa6\xf7\x79\x41\xab\x6a\x80\xe7\xa3\xaf\x62\x7b\xed\x05\x5d\x00\xbe\x8f\x05\x6e\x18\x6e\xf7\x92\x9f\x65\x28\x29\xc3\xd3\x6b\x82\x1d\x40\xd3\x55\xdc\x8d\x0b\xa7\xa3\x36\xff\x52\xf8\xd5\x1d\x59\x85\xdc\xff\x20\x70\x00\xc2\x77\xe1\x3e\x7e\x4a\x67\x7b\x4a\x67\xfb\xc8\xb5\x75\x9b\x8e\x3c\xa5\xb3\xdd\xf5\xda\xc5\x74\xb6\x9d\x4b\x39\xf7\x8e\x6b\x3c\x1e\x69\x39\x06\x34\x41\x4c\xba\x6a\xb1\xdc\x27\x68\xa9\x43\xb5\xe0\x8f\xe0\x0e\x6c\x2d\xe5\x1b\xdf\xeb\xd0\x18\xc5\xa7\xad\x49\x17\xc5\x79\x73\x0d\x3b\x7a\xc0\x3c\x65\xda\xe9\x0c\x63\xb7\x64\x45\x74\x78\x38\x27\x7f\x38\xd1\x22\x4d\x63\xa0\xa9\x34\x09\xb6\x0b\x98\x2d\xf8\xe1\x33\x4d\x4a\x59\xb4\x35\x13\xa6\xe3\x90\xae\xd6\x05\xe3\x2c\x5b\x3c\x55\x69\x59\x72\x54\x4a\xce\x32\x9c\xaf\x83\xc4\x51\x29\xaf\x85\x3d\x8f\x0e\xcf\x92\x10\x7e\xfb\xe8\xbe\xdd\xb3\x62\x37\x86\xff\x98\xd8\xcf\xe9\x14\x7a\xd2\xbb\x96\xab\x4f\x29\x93\x1b\x1f\x91\x67\x9b\x6e\x8a\xcc\x1a\x49\x5a\xcd\x6e\x4d\x89\xec\x22\xab\x59\x47\x7e\xca\xce\xdc\x8d\xb0\xf0\x53\x76\x66\xea\xc8\x4f\xd9\x99\x69\xc3\xf7\xe4\xd9\x29\xa6\x58\x5a\x75\xae\x72\xbd\x3d\x7b\xe7\x83\xcb\x4c\x18\xb0\x50\xbb\x95\x55\x76\xdc\x9d\x89\xe8\xdc\x58\x05\xfe\x5d\xf1\xc3\xa0\x2c\xec\xe2\xe0\x51\xd1\x9c\x3f\x34\xc1\xd8\xfc\x1c\x32\xd0\x76\x20\x83\x0c\xe6\x72\x80\x4f\x10\xaf\x3e\x5a\x5c\x07\x3d\x88\xdd\xb8\x31\x45\x37\xca\x11\x6e\x64\xf9\x0a\x1b\x50\x53\x21\x24\xaa\xa8\x7a\x84\x0d\xbc\xf5\xc8\x81\x5f\x80\x91\xda\xd0\x02\xbd\x64\x2d\x2f\x41\xa6\x76\x08\x95\xa9\xd8\x71\x78\x65\xe1\x02\x92\x89\x13\x08\x70\x03\x4c\xd1\xd9\x10\x96\x20\xd9\xd8\xc2\x5e\xb4\xe1\x3f\x32\xa5\x07\xf4\xb6\xeb\xae\x7e\xe3\x5d\x7c\xaa\xe7\x06\x5d\x2c\x58\x4d\xe1\x9f\xaf\xfd\x14\x58\x01\x69\xad\x4e\xc3\xb0\x7d\x1d\x53\xb5\x26\x72\x36\xea\x55\x60\xef\x5d\x0d\xe9\xe8\xe6\xaf\x4c\xce\x0c\xe2\x37\xd3\xd9\xe0\x74\x23\xb2\x3a\x61\x67\xbd\xe4\x20\xbb\x91\x40\x8f\xb4\x7b\xcb\x87\x9f\xba\x44\x6d\x38\x44\x70\x86\x77\x68\x72\xf2\x7b\x6a\xf0\xda\xb5\xac\xd0\xd4\x6c\xd0\x51\xc8\x18\xe8\xab\xec\x03\xc9\x79\xca\x06\xed\x5f\x4f\xd9\xa0\x4f\xd9\xa0\x59\xb3\x41\x23\x65\xc7\x9f\x5b\x1b\x12\x3b\xe3\x3c\x06\x9f\xdd\x39\x65\xde\xee\x77\x1e\x07\x9f\x9c\xe9\x33\x33\xa5\xea\x17\xa0\x3c\x9b\x4c\x9e\x61\x09\x4a\xe7\xa2\x68\xcd\x6c\xfc\x07\xc2\x44\x21\x4b\xfb\x9c\x0b\x78\xbe\xd2\x06\x54\xf8\x2e\xce\x13\xd3\x52\xfb\xb1\xe2\x22\x16\x78\x76\x0e\x8d\x6a\xf0\x51\xe1\x7b\x39\xbe\xce\xaf\x98\x0e\x16\xee\x9d\x3a\x1b\x3a\x4e\xba\x29\x2e\x7c\x46\x93\xd3\x6b\xfd\xf7\x9a\x54\xbc\xe6\xd0\xde\xa4\x04\x09\xc7\xb4\x19\x16\xe8\x22\x64\x1f\x1f\x39\x29\x9a\x76\xe4\x1e\x3f\xa9\x59\x2d\xd5\x72\x14\x86\xb0\x5f\xf6\xc6\x74\x77\x1c\x80\x12\x5d\xb4\x4a\x31\x61\xaa\xe5\x30\xc0\xf7\xee\xda\x41\x6d\xda\xaf\xc0\x8e\x28\xd3\x81\x41\x86\x34\x62\xe8\xae\xbe\x0c\xea\xf2\xe9\x20\xd4\x1c\x66\x11\xce\x4e\x07\xec\x37\xea\xb2\x18\xed\xa7\x4c\x5c\x91\x2b\xaa\xf4\xb0\x3d\x4f\xf2\xea\xcf\x25\xbf\xe2\x5a\x26\xe7\xa0\x45\x0f\x8a\xa7\xe7\x3c\x44\xd0\xec\x4e\x95\xad\x69\x5a\xe3\x8e\x13\xbf\x7d\xd9\x87\x46\x5a\x25\x2d\x6c\xdb\x15\x43\xe3\x65\x6a\x80\xb2\xbb\x1a\x6a\x0c\x53\xe2\x15\xf9\xbf\xfb\x3f\xff\xe6\x5f\xe3\x83\x3f\xef\xef\xff\xfd\xc5\xf8\x3f\xfe\xf1\x9b\xfd\x9f\x27\xf0\x8f\x2f\x0f\xfe\x7c\xf0\x2f\xff\xc7\x6f\x0e\x0e\xf6\xf7\xff\xfe\xdd\x9b\xbf\x5c\x9c\x9d\xfc\x83\x1f\xfc\xeb\xef\xa2\xad\x2f\xf1\xaf\x7f\xed\xff\x9d\x9d\xfc\xe3\x13\x1f\x72\x70\xf0\xe7\xff\x35\x98\x74\x2a\x96\xef\x06\xca\x61\xbc\xc6\x19\xf5\x81\xfe\x13\xb3\xb0\xdf\x8a\x95\xc2\x85\x19\x4b\x35\xc6\x47\xbf\x82\x9e\xd2\x03\x07\xf0\xec\x95\x7b\xff\x77\x3a\x48\x38\x97\x82\x81\xb8\x43\x1b\xfc\x3e\x6c\xc0\xcc\x25\x17\x90\x12\x72\xcc\xb7\x86\x36\xea\xc7\xef\x43\xac\x18\x56\x37\x52\x51\xb5\x24\xa5\x0b\x39\x2c\xef\xa1\x8d\xcc\xc0\x46\xd7\x40\x7a\xc9\x53\x76\xf5\x96\x43\x96\x35\x2b\x79\x5b\x6f\x3b\x5a\x89\x54\xc4\x0b\x7f\x6d\x97\x18\x32\x96\xe4\x2c\x64\xc0\xbb\xdb\x5c\xcc\x78\x4a\x8b\x4b\x74\x22\x04\xce\x18\x12\x59\x62\x31\xe4\xf0\xde\x9e\x4b\x75\xad\x19\x15\x21\x72\x0a\x69\xd9\xb2\x64\xcf\x74\xb8\x17\x49\xca\x12\xac\xc4\x94\x2c\x57\xd3\xb5\xef\x06\x38\xb0\xa6\xd0\x1b\xd0\x5f\xb7\xd6\xc6\x7d\x00\x77\x93\x2c\x8d\x09\xf8\x3f\xd9\xf7\x56\xd7\xdf\x36\x9b\x06\x42\x7c\x8e\xbe\x91\xe0\xd6\x71\x8d\xae\x66\xa4\x92\x45\x54\xb0\xd1\x53\x45\x81\x51\x4f\xbc\x88\x1b\x9a\xad\x64\xd9\xd5\x52\x83\x36\x10\x84\xd4\x2a\x8d\xf9\xd6\xbc\xa0\xd3\x8a\xa1\xeb\x08\xf8\x66\x30\x8f\xda\xc1\x6a\xfa\x81\xd7\x6d\x4d\x5a\x6d\xdf\x4c\x8a\xfe\xb3\xbb\x17\xbb\xc6\xad\x89\x7b\xa5\xe6\x02\x7e\xd4\x73\xb3\xa5\x07\xaf\x16\x8c\x9c\x87\x15\xe8\x9c\xbe\x98\xbe\xe8\x7c\x3a\xba\x05\xd3\xdf\x51\xe7\x0c\x50\x39\x83\x34\xdb\x60\x87\x68\x02\x78\x0e\xc9\x8d\x33\xc9\xba\xc0\x10\xbc\xea\x4b\x0c\x90\x5f\x8b\x68\x81\x5a\xe1\xea\xa1\x1e\xeb\x3e\x7e\x74\x5a\xfc\x40\xdd\x3d\x97\xc6\x9e\x45\x4f\xcf\xae\x9d\x87\xfa\xb2\xad\xa9\x7b\xa1\xc0\xad\xa7\xef\x39\x7f\xf4\x86\x62\x37\xea\xeb\x8c\x82\x80\x1d\x02\xb3\x7e\x11\x7c\xdf\x4e\x79\x2c\x96\x85\x6b\x20\xc4\xbb\x1c\xc5\x90\xa7\x86\x7b\x17\x80\x78\xc6\xf6\xff\xbc\x8f\xdc\xa7\x2f\x4d\xd9\x0c\xd3\xfb\xf1\x37\xe0\x5f\xd4\x69\x90\x40\x18\x25\xa8\x98\x01\xe4\x21\x26\xc2\x43\xa1\x46\xa1\x96\x57\x56\x84\x24\x3d\xf9\x07\xed\x12\xec\x78\xe2\xb6\xa0\x07\x3d\x44\x49\x8d\x0e\x3f\xc1\x58\x89\x28\x49\x55\x37\x03\xaa\x15\x89\xef\x3f\x3d\x20\x33\x46\x4d\xab\x30\x77\x5d\x48\x05\x11\x11\x14\x62\xe8\xca\x57\xcc\xb2\x00\x34\x76\x52\xb2\x26\x5a\xd0\x46\x2f\xa4\x01\xb7\x31\x6d\x68\xc1\x4d\x32\xbc\x8d\x51\xb4\xb8\xb4\x4f\x86\x2c\x26\x78\xb3\xb4\xd7\x28\x0e\x5c\x8d\x7e\xcc\xab\x7d\x5c\x29\xb3\x50\xb2\x9d\x2f\x00\x78\x08\xef\x2a\x2a\xaa\x11\xe5\x2a\x2d\x01\x71\xe3\x98\xce\xd1\xa9\x49\xb9\x14\xb4\xe6\x85\x5f\x3f\xa8\x22\xd3\x5c\xba\x04\x13\xa0\x25\x75\xda\x28\x39\x63\x4a\x73\x6d\x98\x30\x98\xeb\x72\x54\x51\x5e\x93\x7d\xcd\x18\x39\xf1\x5b\x1d\xbf\x39\x47\x33\x1d\x83\x5b\xe9\x65\x07\x71\xf2\x8c\x6b\x32\xea\x70\xa4\xed\x27\x3e\xa8\x17\x25\x94\xa6\xb7\x80\x70\xbb\x72\xe3\x2b\x1e\x0c\xd8\x8c\x9b\xe7\x4c\x2a\xa8\x10\x72\xfe\xb9\x2b\x26\x4a\xd9\x25\x56\x27\x8d\x75\x78\x76\xaa\x63\x87\x28\xca\xb4\x06\x47\x87\x2f\x5c\x13\xd4\xd0\xb9\x30\x48\xc4\xa4\xf1\xac\xc2\x25\x08\x17\x25\xbf\xe2\x65\x4b\x2b\x54\xb5\x92\xa7\xe9\xe8\xfc\x14\x89\xe4\xf3\x85\x19\x5f\x33\x08\x27\xa2\xae\xdd\x9d\x22\xfe\xd5\xf8\x5a\xc9\x2c\xd7\xa0\x94\x19\x62\x64\x9a\x40\x62\x2e\x8c\x6d\x27\xed\x9a\x2e\xa1\x9b\xb7\x2b\x7b\xec\x65\x9a\xbb\x15\x73\xc3\xce\x64\x9a\xce\x50\x7b\x2d\xcf\x31\x77\xe2\xc4\x1d\x82\x18\x2e\xa8\x00\xd3\x15\xa2\xd0\x96\xff\x41\xa6\xae\xcf\x5a\xaa\xc4\x69\x02\x07\x77\x8f\x42\xc5\x57\x53\xbb\xe3\x12\x3d\x32\x5b\xf6\x8a\x5c\x75\xbb\xf1\x82\xd5\x4d\x45\xcd\xd6\x13\xba\x7f\x8a\x82\xf2\x51\xae\xa0\x3d\x3a\xa8\x28\xc7\xb4\xb2\x22\xe3\xec\xc7\x23\x07\x5d\x86\x82\x3d\x4b\x65\xcc\x85\x57\x3f\x84\xb3\x70\xd0\x94\xdd\x28\xd3\xa1\xbb\xde\x94\x95\xa0\x0f\x38\x8a\x87\x94\x52\xca\x6b\xc1\x94\xdf\x57\x67\x3f\x1e\x8d\x08\x9f\xb0\x89\xff\x2b\x0c\xe1\xd5\x25\x23\xe7\x08\x4e\xe1\x21\x72\xd2\x33\x0c\x65\x39\xc1\x57\x8f\xe3\xd7\xf1\x98\xbf\xfc\xd1\x4e\x8a\xfd\xf6\x4f\xe3\x3f\xba\x03\x06\xfe\xfa\xc5\x6a\x6d\x03\xaa\xe9\x7e\x59\x79\x5a\x8c\x07\x00\xea\x8e\xfd\xeb\x97\x33\x59\x9e\x37\xac\x98\xe0\xf4\xeb\x5f\x06\x25\xbd\x12\xc2\x84\x51\xcb\x09\x39\x93\x50\x21\xc3\x4b\x14\x68\xf0\xae\x8a\xfd\xb7\x4f\xc8\x00\x36\x08\x51\xdf\x82\x1a\x26\x40\xfb\x15\xe9\xbd\xcf\x89\xc7\xd5\x84\x61\x41\xcc\x53\x98\xe7\x7d\x08\xd5\x21\xbc\xf8\x88\x18\x89\x8d\xba\x53\x4f\x5b\x7b\x1d\x0a\xc2\x3e\x70\x0d\x7d\x44\x70\x25\x81\x49\xa8\x83\x36\xf0\x26\x87\x25\xc6\xf2\x5d\xe8\x8b\xd3\xc8\xf4\x8c\x5b\x98\xc1\x2f\x85\x34\x5f\x86\xcd\xeb\x2b\xd6\xc0\xb6\x90\x84\x5e\x49\x5e\x92\x56\x83\xce\x29\x48\x2b\x20\x65\x61\x00\x84\xac\xe3\x9e\xe9\x92\xd4\x5c\x1b\x7a\xc9\x26\xe4\xdc\x9a\x23\x71\x1a\x31\xf2\x94\x20\xd3\x4a\x16\x97\xac\x24\xad\x30\xbc\x1a\xe4\x99\x09\x74\xc3\xd4\x46\xa6\x0a\x80\xc6\xb6\x85\xd5\x72\x1b\xc5\xc6\xde\x60\xc2\xbb\x06\x78\x8c\xf1\x40\x0f\xb3\xda\xad\xd5\x28\x6c\xd5\x05\x45\xd7\x6d\x53\xc2\x90\xae\xf6\x75\xa0\x30\x5a\xab\xd3\xb7\xf3\x29\xe1\x6f\xf7\x07\x30\x99\x9e\x90\xb7\x60\xb9\x54\xe9\x9b\x12\x8b\x26\xd0\xdb\xed\x32\x64\x04\x2b\x98\xd6\x54\x2d\xb1\xb0\x98\x1b\x5f\xd3\xde\x6a\x36\x6b\x2b\x30\x18\xd3\x27\x95\x8a\xd6\x12\x4c\x14\x2b\xa4\xd0\x46\xb5\x05\x70\x0d\x25\x53\x25\x2f\x99\xe8\x80\x3e\x06\x1c\x26\x71\xc5\x74\x57\xd4\x69\xd5\x6b\x21\x49\xb1\xa0\x62\xce\x02\x94\x30\xa9\x69\x09\x9c\xfc\x5d\x70\x7e\xa4\x4f\xa6\x0c\x7c\x41\x67\xc6\xaa\x85\x06\x18\x64\x6a\xad\x04\x9f\x8d\x94\xfe\x62\xef\x43\xc1\x77\x1d\x25\x34\x09\x5e\x6d\xb1\xd4\x70\x78\x46\xc9\x18\xac\xd5\x54\x87\x61\x86\x0c\x92\x9a\x19\x5a\x52\x43\x77\x05\x43\xe0\x0d\x5d\x86\xcc\x34\xcc\xd9\x07\xd6\x8d\x72\xf9\x9d\x99\xe0\xfd\x43\xb2\xe1\x31\xa0\xf5\xd9\x8f\x47\x83\xc6\x07\x87\x10\x70\x2b\x74\xc3\x32\x56\xca\xb8\xd4\x45\xd8\x55\x08\x1d\xe1\x11\x01\x2c\x69\x9e\x12\x3c\xc6\x59\x49\xca\x76\x70\x34\xbb\x53\x11\x86\xe4\x4e\x65\xc9\x9c\xb2\xfc\xb9\x2b\xcc\x71\xd1\x25\xa3\x17\xfd\xea\xf4\x8d\x86\x3e\xe6\x2c\x32\x61\xb8\x62\x11\xe0\xfa\x20\x12\x1c\xbf\xb5\x02\x25\x69\x9f\xf3\x90\x35\xe7\xcc\xe8\xae\xec\x12\x15\xca\x81\xa3\x1a\x67\x24\xe1\x1b\x81\xe5\xe7\xb9\xd1\xc5\x5a\x36\x4e\xc0\xa0\x31\x91\xcf\xb5\x74\x8a\xa3\x55\xb9\xb7\xce\x8c\xf9\xb2\xe6\x68\x61\xcf\xf9\x37\xb2\x1c\x9e\x7e\x97\x37\x0f\xb4\x47\x5a\x07\x6e\x83\x18\x50\x1a\xc2\x9d\x78\x03\xa4\x52\xeb\x1e\xb8\x3d\x6a\x32\x0b\x7a\x35\x18\x00\x3a\x39\x16\xd6\xf9\x2b\xc6\x3e\x2c\x86\xe4\x8e\x81\xdc\xf1\xcb\x81\x84\x0d\x2f\x40\xf4\xd7\xc0\x42\xc4\x3e\x41\x59\x72\xc4\xee\x01\xe2\xd5\x5f\xf6\x88\x3f\xcf\x92\x1f\x96\x9b\xdb\x3b\xca\x9c\xda\xea\xca\x05\x42\x61\x8b\x83\xc5\x64\xdc\x1e\xc2\xc3\xd7\xeb\xcb\x9e\x99\xea\x9c\x2b\x21\xbe\x81\x90\x52\xfb\x3e\xe0\x31\x71\x6c\xed\xbb\x6f\xf5\x6f\x3f\xc8\x4c\x0c\x58\xe5\x9b\x7d\xe0\x83\x47\x3a\x75\xd5\x91\xde\x73\xc5\x14\x54\xea\x44\xd0\x96\x56\xd4\x28\x59\x55\x4c\xc1\x12\xb8\xa0\xc6\x4a\x01\x98\x5d\x2d\x82\x69\x80\xe9\xfd\x38\xfc\xe5\xc3\x7c\xc1\xd5\x26\xd8\x75\xb0\xae\xa9\xc6\x4e\xd7\x3e\x03\x1e\xc2\x97\xbe\xaa\x6f\x13\x3d\xc3\x45\xde\x4f\x3e\x18\x78\x28\x96\x38\xf9\xc7\x11\x73\x62\xc8\x8c\xcc\x2d\xa9\x5c\x13\x26\xe8\xb4\xb2\xe6\x48\xc4\xc0\x81\xce\x15\xed\xd4\xc8\xe8\xae\xf7\x6c\x36\x7c\xea\x20\x86\x19\x3f\xf2\xd3\xc6\x46\xf5\xb6\xf7\xc3\x49\x57\x0b\xeb\x7c\x33\x19\x1a\x02\xfb\xcb\x71\x5d\x6f\x88\x7e\x7d\xd4\x0a\x35\x71\xb7\x99\x8d\x6f\x30\x94\xa6\x6c\xd5\x04\xf9\xea\x09\xa0\x5f\x08\x4f\x8c\x0f\xf4\x1f\x33\xc8\x4f\x88\x57\xbe\xb2\x04\xa8\xf2\x85\x92\xb0\x1c\xf9\xdd\xb9\xcf\x1d\x82\x61\x3b\xa0\xcf\xbb\x80\xe7\xf0\x87\xb7\x29\x42\xbe\xf3\x94\x59\xe9\xdc\x35\x9f\x1a\xbe\x2f\x08\xee\x8d\x78\xfc\x0d\xa5\x83\x9d\x98\xfb\x8e\x8b\x32\x14\x71\x7a\x50\x58\xab\xa0\x1d\x9e\x9d\x22\xd5\x79\x68\x7a\x0d\x67\xc2\xd2\x19\xbc\x66\xc1\x55\x39\x6e\xa8\x32\x4b\x0c\x6d\x8d\x7a\x14\x07\x3c\xc7\x0c\x43\x67\xcd\xb4\xb7\x9b\x29\x3b\xcb\xc1\x12\xf8\xb4\x44\x97\x37\x7b\x23\x87\xec\xda\x8c\x0c\x45\x89\xf4\x57\x6f\x46\xde\x76\xed\xd0\x42\x10\xe7\x91\xcc\xc8\x7d\x55\x8c\x93\xfe\x69\xb6\xbb\xba\xb6\x3d\x6a\x75\xbf\x76\x09\x55\x5f\xf0\x57\xb8\x30\xa4\x8c\x61\xc3\x82\x95\x09\x5e\x7e\xfb\xa4\x11\xe1\x33\xab\xb4\x49\x31\x86\xcc\xc7\xc1\xe4\x75\x69\x4f\xce\xd2\x9d\xb8\xf2\x66\xf4\xc0\x83\x60\x8a\xa8\x8c\x86\xee\xe4\x20\xd9\x17\x32\xdd\x41\xef\x2f\x90\xad\x38\xd6\x01\x56\xb4\xdf\x90\x49\x32\x1d\xde\xc2\x8a\x74\x9a\x67\xec\xba\x8f\xce\x02\xaf\x12\x73\x51\xda\x4d\x05\x2a\x12\x38\xf5\x75\x5b\x14\x8c\x85\x90\xa1\x13\x4b\xc3\x4d\xda\xde\xd9\xe3\xa6\xbc\xa6\xa6\x58\x30\x4d\xb4\x84\x5e\xc7\xda\xd0\xaa\x62\x65\x48\x75\x42\x46\x91\x60\x55\xb8\x34\xa8\xc1\x74\x44\xc6\xca\xf0\x29\x8e\x02\x23\x2e\xea\xda\x54\xd4\x05\x95\x66\xad\x28\xb0\x7e\x91\x9b\x65\xc8\x32\x59\x35\x4c\xc1\x0f\xad\x21\xd6\x36\xdc\xf4\x99\x61\xc6\x48\xe4\x53\x0e\xcc\x0c\x87\xff\x12\x8f\xfb\x05\xbd\x62\x5d\xb6\x87\xeb\x12\x69\x4f\xe9\x00\x75\x9b\x81\xd7\x23\xa8\xdc\x11\x5a\x08\xb1\xc2\x2e\x9e\xc5\xc9\xe0\x5c\xe4\x36\x65\xe2\x79\xd8\x8f\x26\x7d\xcd\xc4\x39\x08\xa6\x8d\x66\x26\x80\x78\x0f\xd7\x78\x89\xcb\x9f\xa7\xad\x91\x35\x35\xbc\x80\x10\x1d\x9f\x45\x49\x62\x35\x26\x5e\x58\x49\xe3\x13\xe1\x51\x45\x02\xc5\xcd\xad\x5b\x26\x31\xb0\xd9\x58\xba\x87\x89\x8f\xe6\xda\xad\x72\x7f\x5a\xfd\xb4\x44\xaa\x67\xa6\xf7\xbc\xf0\x88\xc8\xc4\x2c\x14\x63\x84\xd7\x8d\x54\x86\x0a\x43\x4a\x3e\x0b\x18\xdd\x3e\xc3\xf0\x36\x9e\xc8\xe1\x0f\xfa\x09\xf2\x6a\xa3\x51\x30\x60\x5a\x55\xf2\x5a\x13\x73\x2d\x43\xc8\xa1\xcb\xef\x72\x98\xc7\xa3\x3e\x31\x19\x74\x1c\x37\xaa\x3d\xea\x2c\x5f\x45\xe7\xd0\xc8\xca\x9e\x6b\x56\x55\xf6\xbf\xb7\x9d\x46\x83\x71\x4c\x36\xce\x09\x9f\x0b\x84\xa1\xe5\xda\x07\xbf\x1c\x86\xca\x7e\xa9\x64\xd3\xb8\xe4\x87\xfa\x20\xff\x9c\x40\xf2\xba\xba\x62\x1a\x8a\x4c\x3c\xae\x8b\x65\x85\x39\x13\x4c\x51\x03\xe9\x75\xae\x9f\x2b\xa8\x24\xab\x44\x0e\x0d\xfa\xe0\x95\xd1\x2f\xf2\x11\xa6\xc3\xd4\xcb\xcd\x4c\xe6\xef\x71\xdf\x66\x78\x2f\x2e\x90\xdf\xbc\xdc\xc9\xc0\x40\xfb\xdf\x32\x43\x0f\xc8\x0f\x1a\xd9\x22\x9c\xbc\x01\x87\xe7\x93\xbc\x6c\x0e\x6f\x1d\x1d\x6d\x19\x88\x3a\xac\x9a\x45\x44\x55\xec\x97\x0a\x10\x72\xfd\xb9\xee\xd1\x7b\xa4\xa4\xd6\x6f\xfd\x4f\x1e\x90\xf4\x27\x9f\xd5\x47\xae\x27\x9f\xd5\x93\xcf\xea\xc9\x67\x05\xd7\x93\xcf\x6a\xf5\xfa\x5c\x7c\x56\xa4\x3b\xae\x76\x55\x36\xbd\x8d\x4d\x97\xfe\x01\x7b\xcf\xf3\x4c\xc8\x5b\x69\x5c\x8a\x31\x58\xb0\xf4\xc6\xa0\x13\x85\x13\xfa\x9a\x2e\x27\x82\x19\xd7\xc9\xc4\xc7\x77\xdf\x7b\x9a\xfe\xa2\xac\x35\xe2\x5c\x1f\x91\xdc\xf0\x82\xcc\xb7\xb7\x89\x46\x31\x12\x55\xb3\x2e\xe3\x19\x3e\x7f\xa6\x5d\x5e\xab\xfd\x1e\x20\x0b\xe3\x07\x14\x6c\x42\xce\x5d\xad\xcb\xca\xe0\xeb\x4d\x16\x4a\x66\x28\x1f\xd2\xbb\x29\xbe\xbc\x36\x74\x71\x83\x76\xb6\x35\x6d\x87\xe4\xdc\x36\x01\x74\x69\xd7\x5c\xb1\x1d\x88\x5b\x54\x9d\x1b\xd7\xf4\x77\x37\xdc\x57\x86\xcf\xe9\x8c\xbc\x67\x85\xbc\x62\x0a\x57\xf7\xe4\x43\x43\x85\xe6\x52\xbc\xa6\xbc\xb2\x6b\xeb\xd7\xb8\x8b\x76\x93\x56\x33\xd5\x4f\x81\x8c\x52\x34\xc2\x06\x77\x8c\x64\xb9\x77\xb8\x81\x12\xba\x9b\xd8\xf1\x5c\x05\x5d\xa3\xd8\x15\x97\xad\xf6\xc8\x07\xad\x41\x4d\x43\x1b\xe7\x21\x5a\xf0\xf9\xc2\xdf\xec\x2b\x56\x21\xeb\x5a\x95\x61\x13\x0f\xa6\x4c\x1b\x6a\x5a\xdd\x87\x9f\x2e\x20\xf1\x70\x87\xb2\xaf\x02\x1f\xed\x8e\x11\x92\x53\x5d\x47\x04\x8a\x5d\x3d\x10\xbf\x47\x7c\x0c\x7c\xf4\xd4\xed\x65\x0f\xf5\xd1\xc1\x9a\x14\xb2\x6e\x5a\xc3\xa2\x3d\xef\x76\x57\x1e\x51\x7f\x47\x66\xea\xf5\x7f\x7a\x5e\x53\x41\xe7\x6c\x1c\x48\x1b\x77\x28\x1f\xcf\xb3\x49\xfa\x2c\x6c\x45\xb2\x37\xff\x89\xaf\x47\x87\xce\xd1\xbf\xb2\xe1\xec\x91\x7b\xc1\xda\x23\xf9\xf1\xf6\xc8\xfd\x63\xee\x91\x00\x81\xba\xab\x02\xe8\xbd\xa3\x6f\x55\x04\x39\x25\xe3\x36\x11\x94\xd3\x54\x76\xca\x86\xa3\x85\x6b\x22\x6b\x6e\x0c\xf3\xe5\x88\x41\xa4\x8c\x08\x37\x3d\x74\x4c\x27\x40\x21\xc0\x89\xd5\x83\xec\x43\x53\xf1\x82\x9b\xa8\x7d\x5d\x22\x80\xc4\xea\x05\x0e\x84\x6b\xae\x51\x95\x17\x84\xd7\x4d\xc5\x82\x06\x3e\x76\xe8\x42\x3e\x08\x17\xde\xa6\x80\xda\x14\xc2\x3e\x40\x28\x16\x09\x7e\x92\xdb\x77\xbc\x9e\xe4\xf6\x0d\xd7\x93\xdc\xce\x2e\xb7\x11\xbb\x74\x38\x14\x70\x4f\x5e\xfb\x87\xba\xee\x4b\x74\xca\x2a\xf2\x6b\xcb\xd4\x92\x58\x03\xab\xc3\x05\x91\x56\xd8\x69\x5e\x22\x7e\x85\xcf\xe9\xd8\xa1\x08\x41\x4e\xe5\x1c\x72\x46\x4e\x3e\x58\xfb\x16\xba\x52\x64\x3f\x25\x57\x07\xe8\xf7\xbe\xc2\x55\x08\x2b\x13\x5b\xa5\x58\x48\x15\x7f\x02\x26\xe6\xe1\xdb\xe3\x9c\x0e\x8c\x1c\x65\x2a\x24\x5f\xa9\x0a\xb9\x27\x25\x83\x90\xc3\x5b\xe6\x1a\xd7\x24\x7c\x03\xe7\x78\x28\x6b\x0a\xd1\x5c\x72\xc9\x96\x23\x57\xea\x49\x2c\x07\x52\x7f\x73\x26\x12\xb1\x7a\x1e\xd5\x9f\x4b\x86\x79\x1c\xc3\x7a\x95\xf6\xaf\xcc\x07\x62\xce\x50\x1d\x5e\x63\xfb\xda\xd9\x9e\xe5\x97\x28\xcf\x19\x9d\xf9\xcc\x27\xf6\x55\x73\x3d\x6a\x65\xcf\x58\xde\x71\xde\x6d\xe4\x79\xfb\x41\x40\xa3\x0c\x6c\x0e\x48\xa1\x20\xf0\xf3\xb0\x17\xc9\x1d\x4c\xc0\xcb\x2f\xe3\x3d\x4d\x56\x36\x01\x43\x22\x5a\xfb\x78\x86\x97\x6c\xf9\x4c\xbb\x36\x24\x52\xe8\x05\x6f\x40\x7d\x87\x64\x26\x39\xcb\xba\xc5\xf1\xfa\x11\xca\x61\x3d\x31\x78\x6e\x9c\x8a\x11\x79\x2b\x8d\xfd\xcf\x09\x80\x53\x80\x78\x39\x96\x4c\xbf\x95\x06\x3e\xd9\x69\x2e\xc0\x49\x7a\x0c\x3c\xe0\x72\x8e\x38\x64\xfc\xc0\xf1\x8a\xf8\xd5\x80\x55\xe8\xd6\xda\x57\x1d\x05\x7e\xe1\x9a\x9c\x0a\x22\x95\x5b\xa2\x8c\xe4\x80\x6b\x1e\x49\x42\x62\x7c\xbc\xbb\x4b\x0a\xdc\x44\x8d\xe3\x11\xa9\x7a\x2c\xf2\x20\x84\x39\xa2\x20\xea\x83\xdf\x40\x74\x0b\x72\x61\x3d\x74\x01\x80\x5e\x29\x6a\xd8\x3c\x43\x12\x6f\x77\xd5\x4c\xcd\xa1\x4f\x50\xb1\xc8\xbd\x1b\x72\x29\x5a\x78\x65\x54\xb7\xf0\xba\x87\x2d\x7b\xaf\xd5\xc2\x0f\x32\x00\xe8\xee\xdf\x03\xc4\xc7\xae\x7a\xcf\x22\x12\x51\x8b\xad\x69\x63\xe5\xcd\xff\xb3\xca\x2a\x6c\xaf\xff\x21\x0d\xe5\x4a\x4f\xc8\x21\xd1\x5c\xcc\x2b\xd6\xfb\xce\x05\x8b\xa3\xc7\x64\x22\x0b\x72\x59\xac\x7e\x78\x45\x2b\x86\x38\x4d\x54\x10\x86\xee\x2a\xc0\xe7\x5e\x31\x8c\x46\xe4\x7a\x21\x35\x6a\xbe\xa1\xc4\x60\xef\x92\x2d\xf7\x46\x59\x42\x61\x24\x3e\x9f\xed\xa3\x4f\xc5\x5e\xd7\x08\xae\x27\x89\x82\xee\x0f\x19\x8f\x7b\xf0\xdd\xde\xc3\xd8\x63\x8f\xc0\x5d\xf5\x28\x8a\x9c\x5c\xb8\xf1\xa8\xa2\x98\x22\xb0\x6b\xc1\xf5\x55\xfa\x56\x33\x7e\x00\xe9\x3e\xba\xa7\x4b\xef\x70\x28\x67\x3b\x17\xc5\x05\xdc\xe2\x4c\xe0\x19\x19\x98\x0b\xc9\x3a\x34\x46\xf1\x69\x6b\x98\xde\x59\x4e\xb8\x91\xd0\x08\xd6\x2d\xf4\x4f\xb5\x2b\xff\xe3\xa6\x1f\x44\x08\x78\x5c\xe7\x62\x8e\xd3\xd9\x6a\xee\x64\x04\xa9\x1b\xe3\x22\x48\xe5\x10\xf6\xd6\xaa\xf0\xec\xdf\x34\x90\xea\x30\xd4\x87\xa7\x53\x75\xc9\x9a\x8a\xe9\x46\x62\xd5\xd9\xc6\x89\x71\x8a\xe4\x82\x6a\xc8\xba\x9f\xb9\xa4\xa8\xa6\x55\x8d\x04\x2c\x74\x2a\xd6\x36\x63\x16\xdc\x08\x07\x12\xe2\x41\x98\x10\x70\x2e\xec\x5c\xbb\xdf\x43\xff\xcb\xc3\x95\xce\x2f\x52\x41\x33\x09\x57\x18\x20\x4a\x5e\x38\xbf\x10\x35\x44\xa4\x01\x18\xc7\xd7\x66\x06\xf2\x95\x4b\xe8\x16\x08\xf0\xf7\xc8\x4a\xde\x44\x40\xda\x99\x30\x90\x63\x23\xc8\xa9\x98\x31\xaa\xf9\xb4\x62\xae\xb8\x41\x1b\x6a\x32\xcc\x5f\x94\x90\xef\xe6\xd1\x9a\xd3\xa0\x45\x70\xa3\x57\x93\x6b\xf6\xb9\x28\xaa\x16\x78\x40\xf0\xea\x00\x5c\xd8\x54\x14\xac\x42\xdd\x46\x96\x01\x8d\x2b\x1b\x5e\x44\x94\x48\x34\x63\x4a\xe1\x7c\x4d\x97\x9b\x77\x33\x29\x25\xc3\x54\x64\x00\x52\x19\xe1\xeb\x6d\xae\x90\x71\xcb\x30\xfc\x80\xc1\xd9\xa2\xe4\x8c\xe1\xee\xc0\x95\x21\xd4\x1e\x25\xb3\x0a\x71\xe0\xdc\x59\x02\x33\xe4\x2a\x1d\xce\xa3\x8c\xa1\x11\x82\x82\x3a\xec\xce\xb8\xf1\xe7\x60\xf2\x1c\x40\xe6\xb6\xce\x2f\x5c\xa6\x71\x27\x99\xc6\x70\x7c\xb1\xc1\x81\xc7\xcc\xe7\xd7\x9b\xc1\xfd\xbd\xef\xeb\xc0\x82\x36\xd1\xbe\x25\x46\xaf\x55\x57\x57\x23\x7d\x4f\x3a\xcb\x8f\xb0\xe9\xe5\x8c\xbc\xe6\x15\xd3\x4b\x6d\xb0\xf8\x91\xd7\x28\xb8\xb0\x3c\x54\x1a\x82\x52\x01\x93\xe9\x50\x70\xd9\xd3\x2c\x4f\x20\x2b\xdb\x0a\x67\x57\x49\xba\xc7\x7a\x9d\xd2\x57\x65\xaf\xc1\xd6\xae\x4a\x20\x28\xd9\x0d\xf5\x50\x59\x56\x6b\xd0\x6c\xcd\x92\x60\x1d\x7b\xb3\x31\x2b\xfa\xbe\xd8\xd7\x7c\xaa\x18\x39\x5a\x50\x21\x58\x15\xf5\x8b\x74\xa9\x1b\xd4\x18\x5a\x2c\x50\x9a\x53\x62\x25\x49\xc5\xcc\x33\x4d\x16\x52\x1b\x52\xd3\x62\xc1\x45\x68\x34\x25\x42\xdf\xd4\x0e\x05\xf8\x11\x02\xdd\xcf\xf4\x85\x25\x20\x71\x9d\x73\x09\x17\xa4\xc2\x73\xec\xac\xdb\xd8\x20\x55\x8c\x24\x90\x06\x94\xa1\xc9\xde\xda\xb3\x43\x0f\x68\x2f\xa5\x60\xad\xd1\x53\x00\xe7\x26\xdc\x9b\x3e\xf2\xc9\x87\x09\xd9\x63\x1f\xcc\x37\x7b\x23\xb2\xf7\x61\xa6\xed\x7f\x84\x99\xe9\xbd\x09\x39\xad\x43\xa2\x10\x17\x91\x1a\xc1\xdc\x0f\x08\x9f\x91\x56\x0c\x2e\xea\x1c\x2c\xb1\xaa\x56\x64\xe1\x8f\x67\x55\x2b\xec\x12\xbf\x73\xad\x98\x5f\x91\xd7\x47\xc4\x50\x35\x67\xc6\x8e\x41\x44\x5b\x4f\x99\x4a\x6d\xd9\x9a\x23\x71\x64\x78\x9b\x7d\xc5\x68\xf9\x4e\x54\xc9\xb1\xbd\x5c\x1b\xca\xd3\xd1\x9f\xef\xe3\x28\x71\x6d\x46\x2b\xcd\xc8\xbe\xbd\xf1\xf9\xb5\xe2\x86\x1d\x4c\xc8\x7b\xff\x2b\x28\x7f\x07\x5d\x74\x26\x87\xe8\x7b\x58\x35\xe2\x1e\xaa\x99\x41\xcc\x62\xe1\x6c\x90\x37\x76\x53\x27\x6b\x81\xb8\xe0\x53\x29\x2b\x96\x08\xe9\x8e\xbc\xf7\xd3\x4f\x6f\x93\x5d\x63\x7d\xfe\xee\x9e\x77\x13\x9b\x5f\x4b\x55\x95\xd7\xbc\x74\x85\x47\x64\xdf\xde\x7c\x30\x8c\xe5\x87\x84\x16\x06\x06\x12\x72\xb7\xb5\xcb\xe3\xc3\xbf\xbe\xe6\x65\x9e\x15\x1d\xb0\x01\x81\x88\x3e\x0f\x78\xc7\x88\xe5\x01\x02\x4c\xc0\x4b\x26\x8c\x15\xee\x4a\x93\x7d\xf8\x45\x3a\x8e\xe6\x09\xc7\xbe\x27\x30\xae\x54\xa4\x90\xf5\x94\x8b\xae\x2d\x51\xc7\x9b\x56\x81\xb1\xf2\xd6\x47\xdc\x34\x33\xd8\x4b\x00\x50\x0d\xa5\x59\x10\xcd\xeb\xb6\x32\x54\x30\xd9\xea\x2a\x19\x4e\xe3\x89\x3d\xd7\xae\x59\xc5\x3e\xa0\xec\xdb\x56\xd3\xc5\x8e\x82\xbe\x66\x0c\x48\x15\x5d\x67\xb8\x55\xd5\x38\x69\xac\x0e\x1e\xa9\x7c\x1e\x54\xeb\xd0\xe7\x84\x7d\x60\x85\x43\x51\x6d\xaa\x76\xce\x13\xbd\x33\xc7\xf6\x2d\x0a\x6a\x58\xf9\x8a\xbc\xee\x5e\x0e\x30\xba\xfc\x37\x13\x72\xe4\x73\x1a\xdd\xf0\xe4\xe8\xfc\xf4\xd8\x35\x07\x13\xda\x30\xba\x0d\xdd\x7d\x58\x02\xd5\xd8\xb9\x62\xb7\x60\x34\xe0\xc0\x59\x44\x6c\xd7\xa1\x6d\x35\xfe\xe1\xbe\x71\x9d\xb7\x43\x07\xe5\x61\xcd\xac\x06\x8b\x84\x27\x7b\x69\x6b\xf6\x52\xdc\x70\x39\x22\xab\x64\x0d\x13\xf6\xcc\x13\xf1\xfe\xc7\x79\xde\x1a\x9b\x48\x58\xe3\x4c\x7a\xa5\x7b\x58\x5f\xa9\x8c\x7c\xe4\x0b\x59\x95\x9a\xb0\x0f\x46\x51\x7b\xec\xd7\xf6\x80\x0f\xbf\x99\x11\x2a\x96\x93\x61\x2a\xe6\xa0\xb0\x74\xde\x50\xf4\xe0\x95\xd9\x6d\x0b\xad\x7c\xb2\xd0\xe2\x4b\xb3\x42\x31\x33\x00\x46\x2d\x5b\xe3\x7f\x4f\x48\x7f\xb9\x7a\x1f\xaf\x39\x58\xf1\x5b\x0f\xd2\xe0\xd2\x4a\x86\xf8\x8d\x35\x13\x9a\x1b\x7e\xd5\xeb\x0e\x0a\x30\xa8\x54\xeb\xe0\x87\x04\x65\xca\x09\x40\xdd\x43\x28\x4d\x1e\x18\xe3\x93\x7c\x46\x84\x5c\x79\xab\x18\xba\x22\xc4\x09\x7b\xb7\x24\x0f\x1a\xf2\x70\x6a\x6c\xac\x4d\x05\x00\x1e\xe2\xc3\x47\x80\xb5\x86\xff\xc6\x54\x1c\x3b\x07\x91\x37\x16\x66\x21\x7d\xa6\xdd\xec\x6d\x4f\x6c\xe6\x48\x39\x1f\x8a\x50\x93\x33\x76\xf4\x36\x52\xed\x3c\x38\xc9\xb0\xf0\x42\xbf\x93\x1c\x9b\xcd\x58\x61\xf7\x06\x74\xaf\xf3\xad\xd8\xac\x59\x5b\xb6\x08\x00\xe2\x01\x49\xfb\x80\xa2\x43\xa1\xf7\x22\x98\x89\x2e\x7b\xf5\x54\x68\x43\x01\x23\x12\xde\xd8\xea\x69\x56\x79\x72\xfd\x07\xdd\x76\xc2\xe8\xb5\x47\x9a\x1c\x48\x44\x6d\xd5\xb0\x82\x29\xbb\x63\xaa\x25\xb9\x56\x72\x68\xd1\xd6\x1d\x63\xab\xf2\x8a\xa9\x2b\xce\xae\x9f\x3b\xc4\x9a\xb1\x7d\xd9\xb1\x03\x01\x7c\x0e\xee\xae\xe7\x5f\xc0\x7f\x06\x50\x95\x29\xfa\xe6\x4e\xd9\x57\x64\x6f\x2f\x87\x5f\x60\x70\xea\xda\x0c\x9a\x70\x26\x19\x54\x79\x7c\x02\x30\xfc\x4a\xa8\xcc\x7d\xe8\x1c\x02\x9f\x12\x1a\x73\x67\x4d\xa4\x90\xdb\xcd\xee\x1f\xe4\xda\xb7\x10\x6d\xf9\xa4\x03\x59\x6a\x85\x48\xae\x2f\xec\xdb\xfe\x38\x4c\xcf\xf0\x0f\x09\x9e\x5c\x8c\x8d\x62\x2c\xbc\xaa\x71\xe6\x93\x90\xbe\xf1\x79\x30\x6c\x1e\x61\x10\xaf\xa4\x86\x6a\x66\x86\x04\x93\x73\x89\xfa\x88\x14\x3b\xbf\xb1\xd4\x77\x5f\x41\xbe\x15\x03\xa4\x6a\xdf\xdb\x91\x8c\xff\xe4\x4c\x7f\xd1\xbb\xd3\x1a\xfd\x6e\x5d\xd3\x4f\x72\x44\x24\x82\x6e\x2d\xe8\x03\xc2\xb1\x3b\x26\xd9\x96\x8d\xe8\xde\xf2\x87\x1f\x4e\x8f\xf3\xb8\x52\xba\xe7\x79\xcf\x00\xfc\xbb\x3f\xfd\x6e\x93\x72\x4d\x5a\xc1\x7f\x6d\x63\x27\x34\x74\xed\x0f\x1b\xc9\xdd\xbf\x8d\xd9\x99\x17\xac\x4b\x4e\x38\xe6\xfa\x72\x5b\x92\x71\x8d\x90\xbe\x8c\xfc\xcb\xd1\x09\x71\x9f\xde\x96\x49\x90\x34\xf4\xc3\x64\x1f\xf4\x65\xe8\x5f\x8e\x4e\x56\x5e\x77\xc5\x8d\x7a\x58\x55\xde\xd7\x23\x85\x0e\xa0\x9e\x4e\xba\x66\x9a\x62\x90\xcd\x56\xa3\x57\xac\xe4\x0a\x53\xd5\xfc\x5b\x96\x93\x42\xf3\xd0\xf4\x6c\x7e\xc9\x26\x5c\x46\x69\xa9\x69\x53\x30\x28\x8b\x4c\x7f\x31\x2f\x58\x97\x10\x5d\x72\x7d\xf9\xf8\x3c\xc9\x4d\xf9\x36\x0d\xe4\xf6\x73\x4b\x3f\x59\x75\x77\x3a\xd9\xe9\x94\x20\xd8\xdd\x4b\xd9\x92\x6b\xd7\x7b\x7c\xa0\x9b\xf5\x82\x37\xaf\xc8\x89\xd0\xad\x62\x5d\x85\xee\x2a\x09\xd6\xc2\xbe\x77\xa7\x2b\x34\xd9\xd7\xaf\xb6\x9c\xaa\xb2\x13\x5b\x91\xe4\x38\xdb\x1b\xaa\x0c\x78\x3d\xb7\xcd\xda\x81\x10\xaf\x12\x44\x1f\x88\xfb\xe4\xed\xd3\x99\xc7\x50\x1a\xb9\xde\xb0\xe8\xb9\xe7\x3a\x3c\xbc\xcb\x98\x06\xed\x2f\x07\xff\xbe\x96\xc1\x62\x79\x5e\xb2\xab\xe7\xba\xa4\x2f\x47\xf0\x5a\x1e\x03\xb2\x3f\x07\x54\x93\xbd\x97\x7b\xe9\x23\x9f\xf3\x9a\x57\x54\x55\xd8\x13\x25\x34\x9b\x09\xcf\xb7\x27\xa4\x27\x04\xca\xce\x5e\xec\x91\x7d\xa9\x80\xa2\x82\x0a\x52\x31\xdf\x3f\xc5\x49\xd2\x25\x3a\x07\x0e\x3e\x93\x2d\xb4\xed\x7c\x2c\x3c\xd8\xb6\xbe\x09\x4b\x6f\x0f\x39\x9d\x3b\x8e\x73\x9e\x1d\x77\xea\x23\x17\x56\x07\x9b\x90\x1f\x9c\x66\xe7\x74\x73\xe4\xda\x12\x14\x32\xbc\xe3\xf3\xe0\x8e\xcf\x29\x8c\xb3\x12\x90\xb9\xd7\xc0\x0a\x59\xcf\xe4\xfb\x4c\x38\x22\x35\x58\x34\xe7\xe6\x3d\x6b\xe4\xd6\xec\x44\x1c\x7e\x25\xa5\x86\x1b\xfb\x81\xd4\xdc\x48\xb5\x24\xd4\x10\x8a\x27\x43\xd1\x56\x54\x11\xc5\x30\x39\x26\x83\xd9\xe6\x46\x5f\x31\xd6\x2e\x64\x97\x81\x13\x63\x18\x3a\x37\x74\xa0\x6f\xe4\x4e\xe3\xc4\x18\xdd\x89\x3d\xaf\x8e\xb9\xb2\x52\x5a\x62\x55\x18\x37\x47\x61\x30\x84\x53\xaa\xa4\x70\xd0\x46\x76\x44\x97\x85\x33\xe7\xc6\xb5\xd8\x45\x02\xec\xd7\xfe\x69\x49\xa4\x00\x05\x20\x53\x65\xf9\x4c\x77\x6f\xfc\x08\x73\x7b\x3a\xc6\xd9\x86\x3f\x11\xcc\x6e\xa9\xb6\x2e\x5d\x03\x21\xa1\x49\x04\xe6\xd1\x76\x9f\x0f\x53\x1c\x21\xcf\x45\xc8\x10\x9c\x25\x58\xc3\xa8\x0c\xee\x91\x67\x93\xc9\xb3\x09\xa8\xb2\xcf\x26\xcf\xbc\x21\x56\x85\x72\x58\xa7\xed\x75\xc4\xf8\x22\xca\x21\x80\x05\x7d\xa9\x31\x21\xe4\x9d\x47\xfd\x84\x76\x96\x2b\x15\xb9\xa1\xd8\xb6\xaa\xc2\x3b\x40\xd3\x95\xbe\xec\x19\x10\x09\x85\x78\x6e\x3b\x8d\x5f\xd2\x15\xf6\xce\xf9\x95\xeb\x06\xb7\xb5\x34\x9b\xee\x15\xb3\x70\x6a\x3c\x63\xce\x81\xfa\xfe\xfb\xed\xbd\x1b\x8a\xee\x4c\x6f\xe6\xce\x01\xf7\x5e\x85\xac\x6b\x6e\xc8\x82\xea\x45\xf0\xe2\x75\x9d\x71\x86\x1d\x4d\x43\x9d\xbf\x55\xab\x0d\x53\xb3\x24\xd9\x95\xe5\x30\xf7\x04\xac\x38\x7b\xc3\xc7\x0e\x93\x58\x74\xae\x18\x38\xe4\xf4\x82\x2a\x66\xef\x6c\xe0\xf4\xa9\xf8\x8c\x19\x9e\xba\x39\x7a\xe7\x7b\x18\xf9\xf6\xe0\x56\x47\xf8\x6e\x85\xb7\x86\x9e\x85\x4c\x94\x8d\xe4\xa9\xad\x1a\xc6\xa4\xa1\x26\xa5\x21\xea\xd0\x53\x34\x90\x9d\x65\x07\x87\xa7\xf9\x2d\xec\x3f\x40\x63\x12\x38\xd0\xf5\x5f\x89\x18\xc6\xc8\x46\x56\x72\x3e\x30\x87\x7f\x90\x23\xcc\x2c\xb6\xad\x45\x58\x1a\xfc\xac\x75\x53\x13\x7c\x35\x66\x00\xda\xd7\x06\xe3\x89\x39\x67\x94\x6f\xd9\xe3\x0c\xa5\xe7\x61\x77\x3e\x7f\x7f\x72\x78\xfc\xe6\x64\x52\x97\x5f\x20\x06\xc4\x98\x8e\x1b\xb9\xb5\x30\xe4\xa3\xb0\xa4\xd7\x96\x0d\xbd\xcf\x20\x89\x59\x89\x3a\x89\x7d\xc0\x18\x30\x9b\x1a\xa6\x6a\x8e\xb8\x52\xbb\x6a\x62\x6f\x85\x4b\x52\xad\x6b\x7b\xc6\x9d\x25\x6e\xe4\x1c\xec\xe1\xc7\xef\x1f\xc8\x8d\x62\x63\x00\x92\xb0\xb6\xe4\x8c\x57\x00\x44\xd3\xe9\xa9\xd1\xf9\x9c\x34\xa8\x8f\xb8\xfa\x90\x2e\x3e\xb9\x5a\xae\x46\x5e\x3b\x2b\x33\x44\xd6\xb1\xed\x6b\x55\xa5\xd5\x3d\x01\x96\x8f\x55\xca\x5c\x14\x88\xce\xe1\x85\xa5\x72\x1d\x04\x1b\xc5\xaf\x78\xc5\xe6\x96\x84\x05\x17\x73\xdd\x75\x20\x72\xc9\x68\x49\xc3\x02\xc6\x10\xeb\x74\x9a\x90\xd4\xf3\x06\x52\xcb\x02\x38\x3f\x6e\xcd\xb7\xef\x2e\x88\x60\x48\x42\xe2\x26\x1b\xe8\x78\xb2\x44\x26\x9e\xec\xdb\x8e\xb6\x6e\x47\x1f\xd9\x99\xa3\xd8\x27\xa4\x6c\xda\xaa\x83\x02\x4e\x18\xdb\xc1\xc3\x9e\x12\xbd\xac\x2b\x2e\x2e\xa1\x65\x87\x3b\x4e\x5c\xfb\x3b\x46\xec\x17\x7e\x03\x2b\x46\xab\xfc\x6a\xc0\x03\xb1\x32\xc9\xa1\x02\x98\x1d\x88\xc1\x83\xc9\x62\xa5\xde\x5f\xbd\xb0\x47\x4f\x79\x96\xf3\x3b\x39\xcf\xf3\x51\x2f\x2d\xaf\xe9\x7c\x6b\x85\xa6\x30\x78\xef\xc0\x16\xe4\xdd\xd1\xa9\xaf\x1b\xd8\x8f\x1d\xd2\x78\xaf\x54\x84\x2a\xc3\x67\xb4\x30\x07\xa4\x69\xab\xca\x99\xb8\x5e\xc9\x73\x52\xe2\x86\xdc\xd3\x24\x22\x2f\x3a\x17\x1a\x14\x70\x68\x59\x5d\xd9\x51\x8d\xb5\xe1\xd1\x13\xd8\x36\x2e\xa1\x15\xa0\xd9\x04\xb9\x5e\xf0\x62\x41\xce\xda\xaa\x3a\x93\x15\x2f\x96\xa1\x81\x3b\x3a\xdb\x4b\x7b\x2c\x24\x9e\x0b\x87\xd5\x35\x5d\xea\x57\xf1\x5b\x12\x0a\x9f\x11\x6a\x0c\xab\x1b\x64\x66\x3b\x35\xab\x2d\x3a\x3b\x7f\x3b\x28\x8b\xdc\x12\x0a\x22\x8f\xf2\x2a\x48\xc6\xd6\x7d\x90\x78\x5e\x8f\xc9\x5b\x76\xc5\x54\x9f\x3e\x61\x3f\x82\x47\xeb\x3e\x4d\xb0\x74\xa0\x8d\xb7\x1a\xbc\x22\xd8\x33\x7e\x6d\xa9\x3f\x42\x3b\x9f\xad\x3c\x96\x6b\xf1\xcc\x10\xc7\x55\xa9\x2f\x72\x3a\x7b\x2b\xcd\x19\x3e\xa3\xff\x3e\xf8\x26\x37\x8c\x4a\x2b\x6b\x63\x2c\xfd\xe8\x96\x1d\x4a\xae\x2f\x07\xbd\x42\xf0\xe2\xc4\xcb\x33\x94\x99\xe7\xcc\x58\x76\x1e\x07\x8e\x76\x34\x58\xae\x86\xef\x4a\xfb\xb2\x6e\x7f\x29\xe6\xa0\x08\x47\x8e\xb9\x6b\x46\x85\xc7\x1b\x64\xd7\x44\xb1\x5a\x1a\xd4\x73\x2d\xbd\xce\xc9\x5d\xc8\x9a\x11\x7a\x45\x79\x45\xa7\x15\x64\xee\xda\x87\xbb\x67\x25\xfb\x0e\x0f\x61\x06\x20\x1f\x4a\xfa\xfd\x68\xb9\x25\xf0\x3c\xf2\x8f\x83\x01\x8f\x37\x29\x92\x55\xc9\xe2\x32\xd6\x55\x67\x4a\xd6\x78\x0b\x56\x9d\x97\x50\x09\x45\xcb\x92\x68\x3e\x17\x00\x0c\x28\x0c\xa9\xa8\x61\xa2\x58\x4e\x88\x6b\x2c\xda\xc1\x21\x2a\x66\x14\x0f\x55\xeb\x42\xaa\x9a\x56\x7e\x92\xa7\xb4\xb8\x94\xb3\x19\x3c\xb5\xbb\xdf\x25\x6a\x39\x61\x85\x73\x42\xb5\x14\x38\x38\xd3\x9a\xce\x07\x08\x2b\xe8\x18\x6e\x15\x28\x57\x58\x81\xab\xe4\xa0\x42\xbd\xa0\xf4\x38\xa0\x3e\x75\x5f\x79\xa8\xb6\x0e\x8a\x2d\xf0\xab\x6a\x85\xe1\x56\xfc\xf5\x7a\x89\x11\x88\x18\xae\x25\x9e\xda\xa1\x5c\x63\x36\x00\x8f\x70\x10\x6b\x50\x8a\x75\x05\x5d\x07\x90\xbe\xb5\x7c\xb5\x55\x51\x0f\x55\x3b\xe9\xb3\x10\x9d\x23\xc0\xcd\xfe\xc5\xb9\xa5\xda\xc1\x5c\x77\xda\xe5\x3e\xe0\xbe\x75\x4c\xf1\xf7\x2f\xff\x31\xb9\x8a\xa3\xf0\xf0\x73\xab\x72\x1c\x58\x7a\x6b\xa6\xe6\x88\x82\xc6\x48\x4d\x05\x9f\x31\x6d\x39\x64\x69\xd9\xc9\x45\x57\x34\xad\x19\xb9\xb6\x8c\x84\x39\xb0\x2b\xaf\x97\x28\x5f\x2f\x56\xe2\x39\xd1\x8a\x76\xae\x8d\x7d\x25\x0f\x60\x2d\x00\xc0\xff\x03\x2b\x5a\x03\xfb\x0f\xb2\x06\xc9\xbe\x90\xf6\xb3\xc4\xec\xa1\xf3\x76\x8a\xea\x33\x0c\xbb\xf2\x6a\x58\x64\x07\x0d\xf5\xc3\xea\x7e\x74\x66\x75\x3b\x6d\x70\x5e\xd9\xcc\xea\x51\x2f\x27\x5f\x7f\x9d\x3e\x39\x58\xeb\x05\x63\x6a\x56\xb4\x8a\x9b\xa5\x15\xbc\xec\x83\x99\xcc\x34\x74\xd0\x3f\x02\xb8\x55\x77\x30\x2f\x28\x38\xc0\xb1\x30\x0c\x37\x64\xb7\x29\x2c\xa3\x3e\xc2\x4a\x8f\x26\xe8\x1d\xdb\xd6\xd7\xdd\x24\xcf\x9c\x70\xb6\x3b\xa6\xdb\x96\x7a\x42\xce\xa4\x46\x64\xd8\x80\xad\x3e\xa0\x14\x71\xc7\x35\x23\x7b\x7d\x26\xba\x11\x01\x4b\x7a\xb7\xb5\xa3\xd4\xf7\x8a\x2d\x42\xe4\x28\x3b\xfa\x2b\x68\xbb\x65\x88\xa1\xf3\x95\x46\xfc\x52\xf5\xa6\xa2\xeb\xbf\xb9\xc5\x78\xb7\x9b\xa5\x6d\xef\xfe\xf7\xde\x05\x46\x4e\x57\x99\xb6\x5f\x07\xef\x10\xcc\xd3\x17\xed\x5b\xb6\xa0\x57\x6c\xe3\xd1\xdb\xc8\x72\xb2\xe1\x04\x82\x6d\x94\x3e\xa0\x35\xed\x42\x61\x79\x80\xc5\xd6\x9a\xd5\xd0\x60\xfe\x06\x15\x60\x93\x96\x33\x5d\x92\x4a\x4a\x80\x54\x6d\x1b\x22\x64\xc9\xec\x06\x80\x94\x4e\x5a\xe9\x11\x39\x3f\x74\x37\x36\xd1\x90\xd8\x94\x02\x34\xdb\x86\x15\x1b\x6e\x78\x30\x2f\x55\xd4\x8f\x15\xd5\x9a\xf4\x3a\x87\x5e\xa5\xb6\x74\xf0\x09\x50\x1b\x05\x1e\x39\xd7\x0c\xbf\x62\x57\x0c\xd2\x58\x66\x7c\x4e\xb0\x3d\x6c\xed\x9a\x87\xf8\xec\x71\xa9\xa0\x5d\xa5\xe2\x65\xba\x63\x68\x55\x5b\xb3\x4b\x7a\x2d\xd5\x65\x25\x69\xe9\xab\x54\x2b\xab\xf0\x54\xfc\x92\x91\x63\xd6\x54\x72\xe9\x3a\x7e\x88\x92\x9c\x1b\x6a\xd8\xac\xad\xce\x07\x2c\xc5\x30\xaf\x8e\x2e\x34\xdf\x9a\x57\xc7\x0e\xbe\xe2\xd5\x39\x3d\x3f\x3a\x3f\x7d\xf4\x75\x70\xc3\xfc\x7c\xcf\xbf\x80\x99\x79\x7c\xb1\x08\xfe\x6b\x5a\x6a\xd8\x98\x54\x6d\xea\x2f\x31\x89\xef\x4c\x2a\x43\xab\x2d\xe8\xd0\xc5\x82\x36\x87\xad\x59\x1c\x73\x5d\x58\x61\x92\x47\x95\x5e\x7b\x6a\x04\x8f\xce\x20\x6e\xe7\xec\x26\xc2\xfd\x7e\x71\xf7\x1d\xfd\xf5\xf0\x8c\xd0\xd6\x72\xb3\x71\x8d\x0a\xb6\x12\xe5\x25\xd1\xdc\x9c\x63\x5b\xa6\xac\x33\xe3\x9e\xf9\x91\x79\xf1\x77\xed\xd2\xac\xec\x5a\x95\xe2\xa6\x32\xc1\xa7\x4a\xc5\x47\x55\xa9\x98\x7a\x5c\x90\x1c\x66\x04\x17\xdc\x70\x6a\xa4\xda\x85\xe2\xa8\x1e\x31\x21\x3f\xb5\xd5\x46\xd6\x4e\x24\x9c\xfa\x3b\x00\x4e\x62\x50\x84\x78\x6d\xb0\x2e\xe9\x15\x72\x88\x60\x59\x4e\x85\x61\x6a\x46\x0b\xb6\x02\x84\x3b\x02\x77\x38\xd2\xc4\xfd\x3d\xc9\xd4\xfc\xd1\xe5\xb2\x37\x70\x0e\xfe\xe9\xd5\x1f\xa3\x52\xc8\x3f\x05\xc3\xc3\xb9\xe6\x63\x1b\x43\xb0\x62\x48\x33\x9b\xe1\xdc\xf3\x6b\x9e\x73\x81\xff\x2a\x56\xd2\xfa\x71\x6a\xff\xb3\xa5\x15\x2e\xc9\x90\xe5\x1e\xfe\x9a\x3d\x56\xd8\xfa\x2e\xe9\x33\xa6\x9b\xb7\xc0\x85\x08\xb4\x02\x92\x19\x5d\x4a\xc2\x4d\xa6\x51\x54\x68\xcb\x62\x79\xdc\x26\xcf\x9c\x21\xf6\x8c\xec\x9b\xa2\x49\xae\x52\xcd\x80\xe3\x14\x30\x9c\xdc\x3f\x92\x1e\x93\xab\xb5\x41\xd5\x8a\xd8\x28\xc2\xa9\xbf\x40\xa6\xfe\x3e\xb4\x36\x18\x36\x5b\x5b\x2f\xa5\x05\x39\xb5\x75\x60\x75\x47\x46\xd8\x01\xf1\x54\xa3\x49\x41\xbe\xe7\xda\x20\x5c\x2c\xde\x0c\xf0\x70\x08\x8f\x6e\xcd\xd5\x33\x22\x15\xe1\xcd\x7f\xd1\xb2\x54\xaf\x50\xf3\xf4\xd1\x51\x95\x8e\x56\xc8\xb5\x4b\xcf\x03\xa0\x42\xef\xaf\xd8\x37\xcb\x86\x17\xb4\xaa\x96\xe4\xe2\xe8\x0c\x46\xd0\xe4\x0f\xbf\x7b\x01\xf6\xeb\xd7\x5f\xfd\xee\xc5\xc0\x2d\xf4\x84\xae\xbe\x72\x3d\x8a\x6c\xe6\x47\x50\x17\xbc\x6b\xd8\xad\x3d\xa4\x55\xe8\x45\x69\xed\xc3\x73\x04\x1a\xb5\xca\x91\x3b\xee\x50\x10\xd8\xdd\x15\x54\xbd\x9c\x56\xe4\x13\xa4\x67\x74\x3d\x41\x7a\x3e\x41\x7a\x3e\x41\x7a\xde\x7c\xc5\x7e\xce\x6d\x9f\x47\x31\x2d\xd0\x2e\x71\x5d\x6f\x42\x95\xe9\xec\x73\x57\x99\x12\x59\x2d\x55\xf0\xe6\x58\xc0\x18\x2e\x66\x48\xff\x8b\xae\xad\xc3\xf1\xdb\xf3\xff\xfa\xfe\xf0\xdb\x93\xef\x61\x56\x1d\x2a\x8d\xdd\xde\x5c\x3c\x68\x18\xe5\x5e\x45\xcc\xb0\xf5\xde\x5e\x01\xb2\x58\x29\x3d\x16\xe4\xed\xeb\xf3\x3b\x56\x1d\x6f\x21\x06\xf6\x85\x98\xa5\xaf\xd2\x63\x2b\xc6\xb1\x3f\xd5\x4c\x6d\xa7\xff\xce\xce\x54\xf2\xf8\x30\x2f\xfb\xd0\xf7\xfa\x5b\x7e\xc5\xd9\xd9\x9a\x83\x3d\x8d\x19\xc9\xbf\x4d\x45\xad\x5d\x22\x5c\xb6\x47\x5f\x4b\xfb\x90\x6c\x31\xcc\x22\x56\xb9\xda\x66\x0d\x6a\x65\xa2\xa2\x8e\x5b\xf6\x20\x41\xf5\x42\x59\x35\xcf\x2a\x78\x4c\x6b\xaf\x6c\xfc\xfb\xee\xe3\x66\x53\x7b\xfe\x6d\x29\x04\x1b\x89\x71\x0d\xfb\x31\xdf\xa6\x57\x18\xdd\x4b\xc0\x4b\xcb\xba\x59\xed\x0d\x0e\x23\xf6\x72\xdf\x40\x29\x6b\x68\x91\xaa\x8a\xa6\x71\x45\x37\x13\x63\xcf\x20\xdd\x47\xf8\x09\x34\x2e\x7f\x84\x8a\x08\xd0\xbd\x25\x18\xe6\x30\xf6\xb6\x85\x53\x20\x64\xb5\x23\x20\xbd\x0b\x4b\x12\xaa\x43\xf5\x0d\x56\xee\x64\x68\x1d\xb8\x93\x3c\x4b\x3e\x4b\x7d\xe5\xa7\x07\x76\x97\x6f\xd3\x55\xde\x2c\xa4\x91\x62\x37\xda\x1d\x6c\xa2\xa5\x7f\xb4\x9c\xc1\x1d\x47\x21\x49\x36\x3a\x9a\x10\x9f\x36\x24\x7c\xae\x54\xee\xba\x34\xce\x1c\x45\xbb\x31\x34\xd6\xd9\x26\x8a\x6f\x47\xc9\xda\xf8\x92\x9f\x17\x60\x56\x53\x9e\x1e\x6f\xe1\x14\x79\x0c\x69\x72\x9f\x69\x6f\xd4\x07\x4a\x7b\x1b\x0e\x07\x56\x66\x6a\x76\x63\x1f\xe4\xd7\xf8\xf4\xd8\x39\x22\x7c\x27\x1b\xed\xe4\x02\xb9\x59\x50\x6d\xc5\xa6\x90\xca\x5c\x4b\xb5\xe5\x0e\xe0\x7d\x2a\x56\x20\x95\xdc\x77\x6b\x5d\xbf\x1e\x48\x9a\xf7\x49\xbb\x53\xf3\x99\xd5\xf7\xb2\x2b\x95\x44\xd0\x0d\x9d\x67\x3e\x94\x13\x3f\xc2\xa4\x90\x75\xd4\x74\x86\x5c\x2f\x18\x6a\xa1\x47\xe7\xa7\x6f\xf8\x1c\x09\xf4\xef\x42\x66\x8c\x9a\x56\xb1\xf1\x9c\x9a\x34\x82\xb8\x26\x69\xd9\x7e\x5b\x3e\x85\x90\x87\xfe\x9d\x4f\xa2\x73\x38\x89\xa2\x1d\x76\xdb\x89\xf4\x39\x1c\x48\x8f\xe7\x20\xda\x39\x9b\xe7\xa9\xf3\x73\xef\xf2\xc2\x23\xcb\xfa\xf8\x87\xb9\x40\xa7\xe5\xcd\x4e\x55\xa0\xe1\xd8\x71\xf7\x6d\x45\x35\x50\xf2\xbf\xe1\xbc\x19\xac\x15\x84\x27\x61\x7e\x1f\x1c\x93\xb4\xaa\xec\xca\x4a\xc1\x42\x85\x9e\xee\xea\x4d\xb1\xe0\xb2\xa6\x8d\xab\x3d\x2d\xe5\xb5\xb8\xa6\xaa\x24\x87\x67\xa7\x0f\x7f\xea\x0c\xc6\xae\xc7\x7d\xf4\x46\x96\x5b\x97\xff\x11\x29\xa0\x55\x00\xa2\x88\xfd\x63\xca\x8d\x46\x98\x47\x00\x5d\x34\x71\x90\xc5\xaa\x57\x21\xe9\x1f\x40\x3d\xa6\x41\x38\x64\x30\x5a\x04\x91\x85\xa1\x95\xcb\x54\x9a\x32\x73\xcd\x98\x20\x2f\x5e\xbc\xc0\xfc\x8a\x17\xbf\xff\xfd\xef\xa1\x98\x9b\x94\xac\xe0\xf5\xfa\x8d\x70\xd7\x6f\x5f\xbe\x4c\x27\xe5\x6f\x87\x6f\xbe\x27\xb4\x00\x1f\x19\x99\x4a\xb3\x70\x14\x01\xeb\xc5\x83\xea\x11\xf9\x3f\xe7\xef\xde\x7a\x3d\x44\xaf\x7c\x0b\x9c\x1d\xa6\x73\x80\x0f\xc8\x01\xc5\x70\x80\xfd\xe9\x32\x20\xa8\x59\x04\xc8\x13\x0a\x99\x68\x11\xb4\x8e\x93\x97\x03\x0a\xaa\xa0\x2b\x3b\x9f\x2f\x60\x59\xb8\x80\x5d\x58\xf1\xc2\x75\x1e\xc0\xbc\x18\xac\x94\xf6\xf8\x9e\x88\x63\xe2\x55\x88\xe4\x91\xed\x94\x8d\xb0\xb6\xd9\xa1\xa6\x8c\x82\x8f\x44\x31\xdd\x56\x06\x3a\x53\x4d\x99\x23\xa2\xe3\x58\xcd\x92\x39\x70\x37\x52\xd8\x9d\xe8\xdb\xb6\x5c\xf0\x12\xd8\x99\xaf\x15\xb7\x4a\xd9\x2c\x00\x52\xa3\x00\x87\x80\x2b\x39\xa1\xc5\x82\x30\x61\xa0\x87\x03\xb2\x9e\xbd\x3d\x79\xe8\x05\x15\xa5\x95\x29\xd0\x48\x1f\xc8\x78\xb4\xf9\xe7\xf9\x32\x59\xcf\xc2\x8c\xf7\xe0\xb4\xba\x93\x94\x56\x52\xcc\xe3\x8d\xd9\x29\xd6\x11\x9c\xd0\x00\x19\x04\x85\x8d\x00\x2e\x6c\x17\x06\x83\xaf\xda\x01\x1e\x69\xc4\xda\x9a\xb2\x21\xfb\x2f\x4b\xfe\x72\x9e\x0c\x66\x42\x0a\xc4\xb8\xbe\x50\xad\x36\xdf\xb6\x96\x21\x87\x3c\x2d\x6f\x4e\x33\x21\x47\x6b\xd4\x61\x42\xb0\xcb\xb1\x82\x98\x6a\x51\x30\x8d\x9b\xf7\x17\x44\x20\x31\xdd\xdd\xbf\xe0\xb2\x0d\xa4\x42\xce\x36\x11\xe2\x51\xdf\xb8\xb0\x27\x39\x6d\x8d\x1c\xb7\x4d\x49\x03\x02\x76\x22\x72\x60\x77\x1d\x56\xcd\x82\x8e\xc8\x9c\x46\x46\xe3\x3a\x1d\xd1\x86\x71\xde\x0d\xf8\xc5\xe0\xd1\x6f\x79\x63\x7b\x24\xb9\x84\x54\xd8\x09\x55\x38\x8f\x05\xad\x19\x60\xf5\x20\xb9\x03\x49\x28\x64\x3d\xe5\xc2\x81\xe0\xcd\x00\x25\x90\x29\x8c\x42\x02\x02\x1e\xa9\xe8\x94\x55\x8e\x00\xa9\x06\xbf\xf2\x77\x1e\x59\x89\x29\x7b\xbe\x69\x42\xe7\x73\xc5\xb4\xe6\x57\xcc\xc1\x0d\xf2\x7f\x06\x6a\xa0\xb5\xd5\xc9\x1b\x0f\xc5\xa8\x89\x35\x0e\x0d\x4b\x6f\xee\x83\x57\x68\x9b\x65\xd9\xbb\xf3\x21\x4c\x08\x39\xd1\xd2\x30\xc5\x0b\x18\xd5\x2d\xb5\x26\xba\x2d\x16\x84\x6a\xac\x3e\x1c\x03\xe6\xe2\xf0\x59\xef\x10\x56\x10\xc4\x71\xc1\x68\xe9\x51\xe7\xac\x51\xd5\x34\xac\x9c\x10\x72\x64\xc5\xcf\x8c\x17\xd4\x20\xa6\x18\x29\x59\xd9\x36\x15\x47\x1f\xe1\x40\x32\x2e\x16\x8c\x48\x55\x32\x00\x97\x94\x33\x48\xbe\x0f\x83\x45\xba\x21\x80\xcd\x73\x3b\xfe\x94\x1b\x45\xd5\x12\x35\x28\xb7\x96\x03\x89\xb0\xa7\x4f\x01\x38\x76\x30\x16\xd0\x03\xa0\x37\x24\xbd\x9b\x8c\xbf\xb2\x1c\x02\x64\xb0\x6f\xb0\xbb\x06\xe4\x5f\xfa\x2b\xcf\x99\x64\x2f\xd8\xda\xe7\x6e\x67\x0f\x7d\x58\xee\x63\xc9\x5e\x48\x1b\x98\xf3\xeb\xa2\x32\x60\x81\x9a\x62\xe1\x34\xc5\xbe\xa8\x22\x04\xfd\x47\x74\x58\x75\x0c\x5e\x0e\x55\x91\x7b\x11\x19\xea\xe9\x99\x99\x58\x73\xd3\xb4\xb4\xaa\x96\x63\xf6\xc1\x1e\xf6\x56\x98\x81\xf6\x04\xcd\xc2\xa0\x10\xbf\x15\x9a\x99\x51\x06\x42\x40\x08\x35\x0a\xd1\x6c\x35\xd9\xc3\xf7\x17\x12\x5a\x23\xec\xe1\x60\xd6\xc4\x9e\xb6\x06\x8b\x74\x46\x9b\x7f\x92\x63\x4e\xae\x98\x5a\xba\x71\x07\x3f\x2e\xdb\x56\x25\x59\xf7\x08\x01\x09\x65\x8a\xc5\xc9\x87\x46\x21\x54\x4b\x96\x67\xae\x6c\x97\xd5\x21\x10\xd1\xdf\x5b\x4a\x7d\xc6\xf6\xc2\x08\x4e\x10\x2c\x62\x89\x3f\x81\x53\xe2\xf0\xed\xf1\xf0\xe3\x01\xaf\xe1\x86\x4f\xff\x1a\x68\x06\xf5\xaf\xfc\x32\x07\xaf\xc3\x5b\xe6\xdc\x75\x5b\xf0\xdf\x60\xc3\x4f\xc4\x58\xd3\xc1\x93\x43\xc9\x25\x73\xc7\x24\x15\x2e\x04\xe1\x6e\xce\x46\xa4\x62\x00\xe5\x88\x88\x95\x6c\x09\x83\xe1\xf8\x79\x56\x3e\xf3\xa6\xc4\x2b\xd7\x49\xda\x5d\x63\xfb\xf2\x19\x9f\xe6\x17\x2b\xd3\x23\xf3\xca\x22\xbc\x2e\x59\x72\x20\x67\xd3\xd5\xdb\x45\x96\x93\xbc\xa7\x06\xf6\x80\xfd\x20\x60\x20\x05\xb6\xa7\xd0\x19\x54\x13\x23\x73\x31\x1b\xc9\x57\x1d\xd9\xbf\xfc\x82\xde\xdb\x94\x65\x14\x3c\x24\xa2\xb7\x9f\xab\x70\xc9\x96\xcf\x34\xee\x79\x7b\x42\x2c\x78\x03\xa6\x39\x1c\xf6\x72\x96\x79\xe3\xe3\xf5\x23\x60\x9c\x7b\x72\xf0\x64\x39\x15\x23\xf2\x56\x1a\xfb\x9f\x93\x0f\x5c\x3b\x1b\xe6\x58\x32\xfd\x56\x1a\xf8\x64\xe7\xf9\x01\xa7\xea\xb1\x70\x83\xf3\xfe\x73\x28\x8c\x83\x63\x18\x0c\x75\x98\x12\xbf\xea\x1e\xd8\x39\x70\x0e\xd7\xe4\x14\xba\xfb\xe2\x52\x65\x25\x08\xaa\x32\x3d\xc8\xb5\x25\xc7\xfb\xeb\x00\xa2\xdd\x55\x8f\xaf\xd3\xe3\xb8\x45\xaa\x1e\xb3\x3c\x10\x69\x8e\x2c\x88\x42\xe0\x37\xd0\xff\xa4\xa9\x68\xc1\x4a\xdf\x5e\x81\xda\x59\xa5\x86\xcd\x13\xeb\x9f\x6f\xba\x6a\xa6\xe6\x10\x60\x29\x06\xb4\x5c\x5a\xbf\x72\x2b\x66\x78\x65\x55\xcf\xf0\xba\x97\x4d\x7c\x2f\x68\x2a\x0f\x3e\x04\xe8\xfd\xdf\xdb\x63\xf6\x3e\xac\x8a\x6c\x92\x28\x22\x13\xb5\xdf\x9a\x36\x56\x0a\xfd\x3f\xab\xe4\xc2\x86\xfb\x1f\xd2\x50\xae\xf4\x84\x1c\xfa\x86\x14\xf1\x77\xce\x8f\x14\x3d\x26\x1b\x61\x0d\xd4\x63\xfe\xda\xf2\x2b\x5a\x39\xf0\x64\x2a\x08\xc3\xe6\x1e\x96\xc6\x55\xd3\x6a\x44\xae\x17\x52\xa3\xc6\x1c\xa0\x37\xf6\x2e\xd9\x72\x6f\x94\xc1\x9f\xea\xaf\x58\xf2\xed\x9d\x8a\xbd\x2e\xe6\xd8\x93\x4f\xc1\x6e\x80\xda\xc3\x3d\xf8\x6e\xef\xa1\x6c\xba\x8c\x7a\x3d\x2d\x4b\x8e\x28\xd7\x67\xd9\xd5\xdd\xac\xe2\x23\x3f\xea\x45\x77\x0d\xc5\xaa\xc1\xeb\xfe\xdc\x68\x7e\x67\x6e\x08\x3b\x4c\x97\xbe\xc1\x8c\x73\x59\xad\x7b\xb4\x32\x10\x02\x3e\xb1\xc8\x7f\x66\xb7\x44\xcf\x09\x99\xcb\x8d\x94\x85\x59\x3c\x6e\xfb\x2e\x2e\xa9\xd5\xaf\x54\xcb\x46\xa4\x94\xe2\x99\x71\x21\x84\xb8\x3d\xd4\x6a\x9b\x89\x72\xc3\xaa\xef\xeb\x83\x0c\xa4\x50\xc5\xa0\x1b\x86\x6f\x8d\xe5\xfc\x9d\xd8\x40\x0a\x62\x55\xc6\xe7\x0b\xdb\x3f\x37\x11\x32\x14\xc0\xc8\x11\xe2\x60\x8c\x84\x84\x53\x00\x5a\xe5\xc6\xc4\x74\x8c\x17\x91\xd4\x8f\x7f\x65\xa0\xe2\x36\xf6\x86\xb3\xb3\x03\x5b\x42\xd7\xed\x3f\x99\x92\x19\xc6\xdd\xe0\x20\xcf\xb5\x9b\x86\xe4\x35\x76\xd7\x10\x10\x87\xee\xea\x6d\xa5\xf7\x60\x0c\x5f\xb9\xe4\x25\xe8\x7d\x16\x61\x42\x2b\x89\x8c\x00\x19\xa5\xf0\xc5\x14\xe6\x65\xa7\x84\x4c\xc7\x2e\xbb\x28\x66\xee\x18\x80\x89\xa2\xc7\x39\xf4\x94\x8f\x44\x55\x2e\x16\xac\x8b\x0c\xcb\x19\x50\xe9\x03\xe5\xf7\xb3\xa1\x02\x4a\x71\x2b\x10\xb0\x17\x73\xf8\xf2\x05\x64\xb3\xb1\x16\xe6\xb8\xbe\xa1\x4d\xc6\x4c\x93\xf0\x4c\xa8\x09\x56\x35\x0a\x4d\x3a\x95\xad\xf1\x50\xcd\xee\xfb\x92\x1a\x0a\xfd\xa9\x30\x6f\x62\x37\x42\xb8\xf9\xfc\xb0\x99\x4c\xe4\xfc\xdb\x15\x33\xa0\xfb\x15\x07\x23\xc2\x68\xb1\xb0\xd6\xce\x18\x53\x5b\xad\x9d\xe6\x0d\xb2\x63\xbb\x50\x68\x04\xc9\x55\x85\x21\xc7\x16\x0a\x1c\xe1\x37\x4e\x94\xad\xed\x93\x30\x7c\xe9\x95\x76\x05\x1d\xce\x3c\x13\x5d\x51\x7c\x06\x4a\x7c\x78\xc4\x37\xf5\x74\x0e\x6e\x98\x11\xf0\x56\x45\xf3\xe5\x73\x14\x59\x69\x7f\x16\x36\x7d\x06\x2a\x36\xbc\x7d\x87\xc7\x6e\xcf\x30\x97\x91\xde\x8a\xb5\xf1\xad\x52\x93\x89\x06\xec\x96\x66\x5f\x9a\x7a\x67\x7f\x84\x0a\x0f\x1d\x51\xa1\x32\xb8\x6b\x4a\xe6\xb8\x25\x2c\x67\x0e\xa7\x5d\xb4\xf4\x9a\x85\x86\xa6\x4c\x29\xa9\xec\xfb\x33\xad\x09\x87\x75\xaa\xa9\xba\x64\x65\xd0\xc6\x27\xe4\xcc\x4e\x94\xf7\xec\x65\xa0\x44\x79\x2d\xc2\xb7\x4b\xb5\xaf\xee\x0c\x73\x20\xf3\xd9\x64\xf2\xcc\x75\x72\x57\xa8\x60\xe3\x39\x64\x3f\xcf\x25\xf1\xf3\xb8\xf1\xb2\x39\xef\x7a\xb2\xe9\x0d\x6d\x34\x3a\x47\xad\x1a\x0d\xe1\x20\x49\x28\xce\x88\xcb\x12\xa2\x83\xc1\x26\xba\x2b\xb3\x73\x22\x6f\xc0\x31\x5f\xb0\x31\x43\x2a\x10\x5e\xb9\x03\x8c\x19\x83\x8b\x37\x05\x16\x1d\x0f\x39\x79\x98\x37\x5a\x9d\xd1\xcf\x5c\x0f\x28\xaa\x59\xbd\xee\x2b\x44\x04\xe5\x0a\x5c\x93\x77\xde\x5b\xf1\x69\x25\x37\x06\x91\x87\x73\x58\x43\xfe\xda\xa1\x9a\x9b\xd5\x6b\xd7\x6a\x70\x56\xaf\xd3\x19\x76\x1a\xee\x2b\x21\xee\x78\x8c\xcb\xaa\x82\x01\x32\xa8\xc7\xe4\xea\xb5\xbd\xe2\x9c\xd5\x6b\x2b\xc5\x3a\xab\x57\x8e\xe2\x9d\xd5\x6b\x78\x31\xcf\xea\x95\xc7\x9f\x82\xd7\x7d\x09\x27\x50\x11\xb8\xef\x06\x1c\x3b\x6b\x9c\xb9\x01\x0a\x3f\xb8\xc2\x9a\xe8\x60\xc8\x28\x93\x9c\x3a\x87\x62\x89\x4e\xb5\xac\x5a\x83\x24\xe4\x1f\x24\xd6\x19\xe1\x25\x7d\x14\x2a\x8f\xa2\xb8\x3a\x5c\xa4\x89\x82\x25\x81\xea\x59\xce\xb1\xee\x2f\xf2\x92\x3b\x96\xba\xab\xa1\x97\xfc\x2d\x03\xf0\xda\x8d\xc6\x01\x78\xed\x44\xfb\x00\x4f\x4a\xfe\x26\x02\x78\xed\x12\xce\x77\xff\xca\xba\x49\x87\xb7\x15\xf0\xd7\x3d\x45\xcf\x42\x33\x65\xd4\x95\x96\xa1\xab\x66\xcf\x41\x01\xf0\xfd\x46\xa3\xff\xc4\xe7\x00\x61\x1f\xce\xe1\x7e\xad\x7c\x41\x91\xfb\x0a\x46\x7b\x44\x83\xc3\xb3\xd3\x8c\xfe\xdf\xe8\xa9\x37\x78\x80\xe3\x3b\x9e\x7c\xc0\x9f\x72\xf5\x26\xf8\x14\xdd\xb7\x71\xe6\xff\x71\x37\xa3\x0e\xe7\x29\x8b\xba\xbd\xfb\x3e\xa7\xb5\x17\x7f\x6d\x35\xc5\xb8\xe7\x5c\xc4\x81\x46\x3a\x08\x89\x4e\xa7\x74\xba\x18\x62\xa1\xfa\x4a\xbf\xe1\x65\xaa\x64\xf7\xfd\x53\x3b\xea\x55\x82\xd9\x1f\xd0\x1d\x6b\xf5\xea\x71\xcb\xb3\xf7\x7e\x12\x5d\xc8\x12\x83\x09\x51\x5c\xa3\x91\xe5\x2b\x4c\xb2\xa2\x42\x48\x83\x39\xd4\x23\x0c\xcf\xeb\x91\x4b\x54\x88\x00\x75\x45\x49\x5a\x5e\x62\x35\x66\x40\xc6\x7c\xf6\xef\x55\x56\x01\x13\x78\x96\x87\x9d\xc8\x3d\x55\x42\xd0\x86\xff\xc8\xd4\x90\xde\xdd\x9b\xae\x1e\x73\xb9\xe7\x7b\x4e\xd2\xc5\x82\xd5\x14\xfe\xf9\xda\x4f\x90\x15\xda\xae\x36\x19\x82\x25\x4c\xd5\x56\xf1\x1d\xf5\x50\xae\xf6\xae\x5e\x66\xa8\x93\xeb\xae\x7b\x49\xab\x0d\x6b\x7e\x6f\xd3\x79\xd6\x33\xff\xed\x16\x05\x0f\x25\x24\x1a\x78\x74\xeb\x10\x8e\xb2\x9a\xc4\x15\xce\xff\x8e\x4f\xdd\x7d\x26\x16\xe2\xf5\x18\xbc\xd1\xa9\x5e\xe8\x51\xd0\xd2\xfb\xde\xe3\x6c\x84\x3d\x79\xa1\x3f\x7e\x3d\x79\xa1\xdd\xf5\xe4\x85\xfe\xe4\xeb\xde\xbc\xd0\x91\x4a\xe7\x4f\xd8\x0d\x6e\xe4\xb8\x53\x9c\xf7\x25\x77\x5d\xe4\x27\x18\x93\xf2\x0e\x60\xef\xfd\x95\xaa\x1f\xde\x7f\x36\x99\x3c\xc3\x00\xff\x24\x04\xb1\x5a\x33\x1b\xff\x81\x30\x51\xc8\xd2\x3e\xe7\x02\x9e\xaf\xb4\x01\x73\xa7\xf3\xe8\xc5\xb4\xd4\x7e\xac\x38\x45\x00\x9e\x9d\x57\x6f\xcc\x78\x6c\x79\x74\xc4\xd7\xf7\xa9\x9c\x67\x3c\x5e\x3a\xe5\xde\x53\xee\x97\xc2\x2d\x28\x53\x4e\xcb\xef\x70\x1f\x2b\x5e\x73\x57\xa5\x68\xe5\x29\xd3\x26\x57\xf1\x09\x21\xfb\xf8\xf0\x49\xd1\xb4\x23\x37\xd0\xa4\x66\xb5\x54\xcb\x51\x18\xcc\x7e\xd9\x1b\xdd\xdd\x71\x00\xc6\x45\xd1\x2a\xc5\x84\xa9\x96\xc3\x00\xf8\x37\x5d\x8f\xc4\xca\xf0\x2b\xb5\xc3\x46\x46\x60\xae\x3c\x79\xba\xdd\xd5\x97\x78\x47\x7e\x18\x0c\x67\x84\xd9\x86\xf3\xde\xb5\x52\x19\x75\x1e\x50\xfb\x29\x13\x57\xe4\x8a\x2a\x9d\x4b\xc2\x90\xfb\xb2\x2b\x4a\x7e\xc5\xf5\x3d\x96\x60\x9f\x3b\xa5\x05\x63\x8d\xb2\x35\x4d\x6b\xdc\x71\xe7\x45\x04\xfb\xd0\x48\xab\x8a\x06\xd1\xb0\x62\x9e\xbd\x1c\xea\xf2\x8e\xaf\x86\x1a\xc3\x94\x78\x45\xfe\xef\xfe\xcf\xbf\xf9\xd7\xf8\xe0\xcf\xfb\xfb\x7f\x7f\x31\xfe\x8f\x7f\xfc\x66\xff\xe7\x09\xfc\xe3\xcb\x83\x3f\x1f\xfc\xcb\xff\xf1\x9b\x83\x83\xfd\xfd\xbf\x7f\xf7\xe6\x2f\x17\x67\x27\xff\xe0\x07\xff\xfa\xbb\x68\xeb\x4b\xfc\xeb\x5f\xfb\x7f\x67\x27\xff\xf8\xc4\x87\x1c\x1c\xfc\xf9\x7f\x65\x7c\x09\x2a\x96\xef\xb2\x9d\x09\x78\x8d\xef\x45\xaf\xe9\x3f\xfb\x7e\x2b\x4d\xb9\x30\x63\xa9\xc6\x38\xc8\x2b\x28\xc3\xc9\x36\x94\x67\xcd\xfb\x93\x31\x9d\x56\x15\x4e\xd0\x60\x7e\xef\xb8\x10\xb9\x5f\x0b\xfb\xde\xc2\xd3\x8d\x2c\x23\x10\xb7\x5d\x42\x7e\x74\xb0\x86\x3a\x60\x2b\x2a\x70\x8c\x8a\xb9\xd5\x9f\x01\x30\x9c\x56\xae\x66\x86\xec\x37\x8a\x5f\x51\xd3\x01\xcd\x44\x58\x71\x03\xc9\x28\x16\x94\x8b\x83\x0e\x62\xa4\x91\x25\x98\x57\xad\x66\xa1\x27\xb7\x55\xf9\x2e\xbe\x3f\x27\x45\xc5\xa1\xac\x57\x85\x36\x8d\x03\x07\xf7\x78\x84\x73\x26\x98\x42\x90\x3d\xb2\xfa\xaa\xad\x66\x90\x8c\x0c\x1b\x45\x94\x89\x2d\x06\xbb\xeb\xac\xc7\x11\xef\x51\x2d\xf4\x8d\x37\xb0\x46\x0e\x2b\x69\x00\xc2\xcc\x35\x05\x73\xb5\x35\xb4\x69\x94\xbc\x62\x39\xf2\xe2\x9d\x3e\x0a\xaf\xc8\xb5\x86\xa2\xe4\x78\x59\x71\x61\x46\x61\x8a\xa0\x8e\xaa\x87\x36\x34\x74\xe1\x57\xc7\x22\x37\xe1\x32\x5e\xb8\x0f\x4b\xc9\x74\x64\x62\xb5\xc2\xf0\x2a\x1f\x11\x9a\x2c\xe8\x15\x23\x53\xc6\x04\x4e\x08\x6a\x5e\x50\x3f\xd1\xdf\xc5\x51\x26\xff\x20\x0c\x7d\x7f\x39\x49\xcc\x05\x44\xad\x01\x61\x35\x17\x63\x3b\x5f\xcd\xdc\xce\xae\x5a\x42\x3c\x4c\x12\xd8\xe8\xc8\x57\xf1\x22\xb8\x0d\x68\x78\x6d\x69\x29\xb1\xa6\x69\x20\x1d\x0e\x54\xd5\xb1\xaf\xef\x4e\xc8\x36\x6f\x82\xc9\xb9\xa1\xa6\xd5\x93\x6f\x2d\xbd\xef\xd9\x4c\x31\xbd\x38\x1c\x6a\xbc\xd8\xd7\xd1\x86\xd6\x4d\xb6\x39\xb5\xd2\x09\xab\x0a\x43\x4d\x35\x3a\x31\xc3\xa4\xf9\xd7\xee\x04\xa9\x43\x92\x1d\x1e\x4d\x01\x9f\xf9\x08\x45\x60\x43\xad\xcc\xc2\xbd\xb2\x61\xf4\x4b\xb6\x04\xdf\x49\xd6\xad\x7a\x64\x77\x2a\x3c\x16\xe1\x9a\x07\xcf\xea\x45\x6f\x9e\xfc\x81\x83\x20\x6b\xdd\xe4\xda\xcd\x01\xa8\xac\xa0\xd3\x3b\x99\x80\x2e\x99\xb3\x93\x37\x03\x49\x70\x88\xe3\xae\x8b\x66\x24\xfe\xf7\xed\xa8\xdf\x1d\x9d\x7f\xf1\x07\x37\xf0\x41\xec\x09\xac\x5d\x84\x39\x0f\x01\xdc\x21\xbc\xae\xee\x4a\x14\x8d\x4e\x20\xf5\xb7\xd3\xbe\x59\x36\xbc\xa0\x55\xb5\x1c\x5a\x92\x83\x0f\x74\xc5\x46\x8a\x99\x56\x81\x73\x8c\xab\x4d\xa4\x08\x52\x31\x3a\x1b\x83\xc6\x20\x0d\x42\xb6\x1e\x0c\xe6\x83\x33\x48\x90\x8b\x44\xc4\x3a\x53\xe0\x1a\x8c\x2c\x5f\x14\x8c\x2c\x65\xeb\x70\xc8\x0a\xcc\x03\x28\x64\x39\x58\x19\xa1\x02\x7a\xd4\xd8\xf3\x1e\x55\x3f\x3b\xbb\x58\x46\xbe\x94\x2d\x28\x25\xd1\xb6\xda\xb8\x31\x86\xae\xc5\xda\x7b\x81\x67\xb1\xa6\x97\x8c\x98\x6b\xd9\xdf\xf6\x40\x6c\x00\x80\xd2\x8c\x14\x92\x8b\x82\x0f\x9e\x07\x4c\xd4\xeb\x2d\xbe\x72\x61\xf3\x91\x2b\xcc\x6a\xa4\xd6\x7c\x5a\xb1\x48\x73\x5b\x51\x9c\x2c\x97\x64\xd4\x11\xec\xfc\xc3\xda\x74\x45\x5a\x4a\x31\xdd\x48\x01\xf1\x25\x38\xa7\xc1\x21\x3f\x21\xe4\x6f\x2b\x73\x38\x78\x3a\xaa\x8a\x08\x86\x81\xac\x62\xc1\x8a\x4b\xd7\x8f\x8d\x6b\x52\x48\x81\xe0\x27\x23\xe7\xe6\x1b\x03\x91\xa0\x9c\xd8\x69\x59\x66\x48\x6e\x2c\xa4\x70\xdd\xfc\xb2\x88\xdb\x58\xc9\x04\xef\x96\x92\x95\x26\xc5\x42\x4a\xed\x34\xbc\xbe\xeb\x24\x5e\x05\x3e\xf4\x3c\x46\x5d\xf3\x7f\xc3\x3b\xb5\x95\x89\xe5\x19\xaf\x1b\x4c\x99\x86\x35\x7b\xa6\x49\x29\x8b\x36\xfc\x6d\xe7\xbe\x62\x54\x09\xb2\x90\xd7\xc4\x0c\x45\x4d\xb0\x5b\x79\xe5\xe5\x5c\xcd\xa1\x1e\x8c\xa4\xb7\x83\xc0\xd3\x97\x6c\x79\x91\xda\x23\x30\x7e\x4e\x87\x58\xb0\x23\xa9\x78\x9b\x44\xf0\x2e\xe6\x82\xff\x14\x70\x28\xd6\x8f\x54\x10\xa0\x56\xa6\x42\xa8\xcb\x95\x10\xac\xd8\x18\x83\x77\x3e\x81\x3c\x66\x6b\xf1\x75\x72\x51\x13\xbd\x90\x6d\x05\x46\xee\x46\x6d\x75\x42\xc8\x4f\x0b\x26\xdc\xb1\xec\x8e\xbe\x1c\xa9\xda\x37\x1d\x9e\xeb\xc7\x9f\x95\xbb\xba\x13\xbc\xe1\xb8\xc9\x53\x89\xe9\x0f\xaa\xbe\x25\xa4\x58\x24\x73\x47\x64\xca\x0a\x6a\x67\x68\xf5\xe4\x93\x78\x20\xe5\x29\x52\xc7\xf6\x57\x35\x2f\xc7\xfe\xa8\xdd\x19\x3c\x09\x7b\x6d\xe2\x8e\x1d\xdf\x67\x6b\x0a\xe4\x83\xed\xb3\x4f\x34\x6a\xfa\xe0\xd1\x75\x5b\x19\xde\x54\xd8\xf4\x02\x30\x9d\xb2\x64\x77\xf4\x2c\x25\x87\x15\x05\x94\x9c\xbd\x3f\xfd\xf1\xf0\xe2\x84\x7c\x77\xf2\x37\xfc\x78\x14\xe7\xcd\x52\x6f\xf9\x38\xb5\x2e\x03\x25\x97\x6c\x99\x6d\x76\x3b\xf3\x0b\x67\x0a\xf6\xec\xd1\xc9\xfb\x8b\xd3\xd7\xa7\x47\xf6\xad\xf0\xe3\xd1\x6a\x2a\x30\x1a\x52\x19\x88\x58\x97\xe2\x01\x81\xc8\x9b\x67\x20\x57\x10\x03\x7c\x89\x30\xfc\x35\x2b\xb9\x55\x34\x86\x9b\x4b\xf6\xfa\x41\xf7\xbd\xb5\xdd\xc6\x24\xd0\xae\x18\x44\xe9\x99\x2c\x9f\xe9\x35\x3b\x09\xed\x09\xcf\x8d\x39\xe4\x28\x58\x4b\x5e\x1e\x52\x63\xad\x48\xc5\xd9\x15\xba\x15\x83\x2c\xdd\xe4\x40\xc6\xe9\x0b\x46\x56\x9e\xec\xe5\xff\x76\xa9\x41\x35\xfa\x6d\xfb\xae\x92\x8d\xa6\x63\x4f\xcb\xcf\x31\x23\x01\x14\xb1\x5a\xae\x9e\x5d\x6b\x27\xce\x35\xd5\xde\xc6\x77\x5e\x50\xd8\x2c\x43\x69\xc8\x28\xff\xdd\xd9\xbf\xdb\x22\x1f\xb8\xeb\x49\x99\x7a\x52\xa6\x76\x5c\x99\x72\xd6\xd8\x2e\x6e\x26\x7b\xb8\x42\xb1\xa6\x9c\x59\x32\x01\x2f\xaa\x17\x4d\xf0\xb1\xb2\xd0\x92\xbe\x91\x65\x96\xfd\x84\x78\xf3\x01\x20\x97\x91\xbd\xf7\xe7\x87\x5f\xbf\xf8\xfd\x57\x7b\x23\xf8\xe7\x37\x2f\xfe\xe3\x77\xf6\x9f\x27\x47\xc7\xe7\x87\x67\x5f\xfd\x36\xfa\xe3\xeb\x3f\x7c\xb3\x97\x03\x96\xc8\x3d\xee\xb7\x5f\xbd\x74\x90\xbd\x7b\x27\xc7\x5f\xfd\xf6\xb7\x2f\xff\x23\x5b\x8b\x9b\x2c\xec\x53\xd3\x0f\x27\x1f\x1a\x8e\xad\xf7\xcf\x59\x21\x45\xb9\x93\x88\x64\x9b\xe8\xf4\x7e\xf6\x9a\x7e\xe0\x75\x5b\x93\x8a\xcf\x18\x84\x9c\x20\x39\xdc\x18\x17\x76\xcb\x23\x06\x22\x39\x94\x85\x45\x43\x08\x48\x36\x98\x6c\xc4\x5d\xcf\x17\x72\xc5\xd4\x94\x1a\x5e\x77\xd8\x5e\x1b\x43\x5c\x7a\xb8\x03\xcd\x5e\x5d\xbc\x3a\xf8\x21\xbb\x46\xaa\x59\xde\xf4\x74\x46\x24\x2e\xc7\x88\x5c\xb6\x53\x36\xa6\x0d\xc7\xa0\x3b\x4a\x01\xcd\x8c\x0b\x8a\xff\xe1\x77\xdf\xbc\x78\xb1\xff\xd5\x37\x64\x21\x5b\xa5\x0f\x26\x2b\xb7\x67\xa0\xc5\x45\x25\x40\xa5\x73\xe2\x41\x2f\xa4\x32\x50\xf7\x4b\x05\xf9\xfa\x77\x2f\x5e\x90\xfd\x97\x40\xc0\x81\x8b\x0d\x79\xf6\x82\xf2\x74\x3a\xcd\xa2\xe3\xe2\x4a\x73\x4d\x7e\xff\x87\xdf\x7d\xf5\x8d\x1d\xf3\x3f\x5e\x92\x92\x2e\x33\xa9\xf3\x17\x37\x79\x42\xdd\x96\xb1\x16\x06\x83\x83\x12\x34\xc5\x15\xff\xbc\xab\xad\xcf\x71\x8c\x87\x2d\xf9\xa5\x9b\xe6\x2f\x71\x9e\xdf\x6c\xd8\xce\x08\x34\x20\xe4\xfa\x8a\x64\x20\x44\x3b\x91\xd1\x5b\x5b\xf4\xb9\x6b\xa3\x28\x47\x28\x3f\x26\x66\x52\x15\x18\x1d\xeb\xf3\x5e\x0e\xf3\xf9\x97\x5e\xa1\xff\x2f\xfd\x50\x99\x60\x76\x43\xe0\x72\xac\xb5\x4f\x84\x42\x5e\x9c\xc9\x1c\x8b\x22\xc5\xdc\x4f\xaf\xdf\x6c\xb9\x0e\xa5\x5c\xe9\x78\x39\x0b\x0c\xee\x0d\x1a\xd7\xc9\xf0\x67\x3a\x48\xd1\x92\x1c\x9d\xbf\xef\xe0\x5d\x69\x59\x2a\xa6\xb5\x37\xc5\x02\xb2\xed\xce\xa8\x00\x9a\x15\x8a\x99\x8c\xb9\x64\xf8\xc0\x1b\xca\xfa\xdd\x97\x4f\x15\xfd\x9f\x72\x7d\xfe\xa8\xae\xe7\xc8\x0e\x4f\x90\xae\xe4\xf1\x43\xba\xe2\x5a\x3e\xe1\xb9\x3e\xe1\xb9\x3e\xe1\xb9\x0e\x7e\xd2\x8e\x22\x6f\x3c\xe1\xb9\xfa\xeb\x31\x54\xd0\x3f\xe1\xb9\x7e\xc2\xf5\x54\x49\x7f\xeb\xf5\x54\x49\xdf\xbb\xfe\xcd\x2b\xe9\x9f\xf0\x5c\x13\x07\x79\xc2\x73\xbd\xed\x7a\xc2\x73\x7d\xc2\x73\x7d\xc2\x73\x7d\xc2\x73\x4d\xa0\x69\x13\x9e\x2b\x32\xff\x26\x54\x57\xe7\x6f\xea\x20\x5d\xff\x0d\x11\x5d\xb5\x65\xbf\x82\x1d\x16\x85\x6c\x85\xb9\x90\x97\x6c\x20\xde\xdd\x8a\xf7\x77\xed\xe9\x56\x0c\xdd\xe4\x0d\x5e\xbf\x79\x27\x5d\xc3\xf9\x52\xe7\x07\x1b\xf6\xf9\x4c\x7a\xda\x96\x9c\x89\x1c\x08\x01\xf9\x0f\x47\x4f\x9b\xd7\x10\xad\xc6\x2d\x4a\x56\x76\x5f\xb8\x93\xd3\x58\xa6\x99\x90\x43\xa2\x58\xc1\x1b\xee\x1a\x35\x53\xfc\x3c\x47\xd6\x81\x95\x0f\x1c\xb2\xaf\x66\x4b\x2b\x35\x58\x35\x0b\x47\x95\xfb\x9c\x33\x15\xf9\x48\x9d\x96\xb7\x42\x68\x0e\xe7\x97\x7d\x25\xb4\x79\xc0\xc2\xb9\xe6\x9a\xf9\x2c\x31\x17\xd0\x8e\x66\xe4\x22\xa6\x21\x06\x27\xc9\x43\x4c\xf4\xea\x6e\x25\x32\x06\x4a\x33\x9e\x5b\xec\x31\xa4\xb6\xac\x11\xd9\x19\x46\x90\xe8\xc1\x4a\x52\xb6\xca\x77\x96\xb5\xba\x11\x2f\xad\x8e\xe6\x61\x44\x51\x8c\xe6\xd8\x76\x28\x89\xc3\xae\xd2\x1d\x47\x21\x5c\x00\x2d\x16\x4c\x47\xf4\xa2\x37\xe2\xd2\x65\xb2\x64\x29\x60\xb7\x57\x53\xb5\x73\x2e\xd0\xa5\x01\xa3\x7a\x0d\xb6\x2b\x36\x77\x2f\xbd\x4a\xf2\x45\x44\x8e\xfd\x79\x8e\xc4\x01\x30\xa6\x36\x56\xbc\xe3\xcc\xf0\x59\xfc\x87\x26\xb2\x2a\x7d\x70\xfd\x0f\x2f\x48\xc3\x54\x81\x62\x29\x4b\x00\x4f\x63\x4d\xbd\x91\xa4\xb2\x16\xb3\x55\x65\x6e\x1e\x3e\xc4\xf6\x8f\x23\x01\x80\xf9\x0f\x99\x32\x34\x03\xd6\xa6\x21\x15\xa3\xda\x90\x97\x2f\x48\xcd\x45\x6b\xf2\xf5\x0c\xbe\x87\x84\x82\xdf\x7d\x33\xf0\x69\xf7\xd0\x81\x38\x8b\x24\x89\xbd\x2a\xf0\xef\xe0\x5a\x71\x11\xc5\x1a\x36\x4b\x23\xb9\x30\xab\x8e\x96\x28\xd1\x3d\xd7\x69\x05\x91\xcc\x9d\x38\x0f\x32\xbb\x18\x7e\x6d\xe5\x74\x99\x06\xc1\x93\x63\xd1\xdd\xf0\x31\x88\x3d\x25\xff\xe9\x3e\xc4\x25\x96\xa8\x86\x2c\xac\xd1\x0b\x7e\x59\xbd\xa0\x0a\x31\x69\xa0\x88\xc3\x67\x13\xa5\xad\xce\xb1\x1d\x18\x00\x22\x5e\x85\x71\xb9\x26\x65\xf8\x38\xb8\x66\xb9\x18\x1b\xc5\x58\x20\x19\x6c\x7d\x88\x20\xfb\x2c\xa4\x41\x68\x85\x03\x55\xfc\x61\x8a\xfd\x98\x28\x36\xe7\xda\xa8\xb4\xb0\xdf\x38\xfd\xc0\x1c\x6a\x05\xcc\x95\x6c\x93\x1b\x3a\xe7\x12\x5b\x40\x84\x77\xf1\xfa\x44\x8f\xa2\x60\x5a\x0f\x29\x9a\x71\x47\x9d\xe3\x31\x18\x23\xf1\x59\x83\xc5\x8e\x62\xb4\x7c\x27\xaa\xe4\x98\x69\xae\x89\xf6\x74\xa0\x3f\x0d\xb4\x2a\xc8\x72\x84\x0d\xea\xb7\xaf\x5b\x00\x74\xd5\x81\x0c\x61\x25\x5a\x3a\xf6\xe7\x63\x80\x42\x8d\x22\x85\xe9\x52\x3d\xd6\x45\x66\xb4\xd2\xc9\x71\xc6\xe1\xbe\x16\xbf\x7d\xb7\xbf\x40\x48\x47\x5f\xa0\xbb\xea\x4e\xa9\xba\x6a\x4e\xbf\x58\xef\xfd\x0f\x9c\x1a\x9c\xee\x2b\xec\x0c\x57\x1a\x65\x72\x50\x0d\x27\xc7\x2b\x2b\x98\x31\x21\x6c\x3f\xd0\x10\x03\xcc\xf8\x62\x38\xc7\x29\x85\xac\x6b\xaa\x0f\x92\x89\xc1\xfc\x22\x0a\x40\x72\xda\xd5\xb7\x0b\xa3\x68\xd5\xcd\x50\x04\x60\xba\xad\x6d\x6d\x98\xa0\x22\x39\x65\x32\x17\xcf\x20\x15\x44\x5e\x87\x72\xd4\x39\xbf\x62\x62\x75\x3f\x3b\x77\xc4\xb7\xb4\xb8\x64\x03\xb0\x9b\x7e\xd0\x7e\x8d\xcb\xa5\xa0\x0e\xcb\xc6\x1e\x43\x57\xdc\x8a\x03\x56\xae\x8c\xab\x47\x5d\x86\xbb\x66\xc6\x83\x0d\xa1\x61\xb7\xad\x85\x6b\x35\x4b\x86\x8d\xcd\xb5\x6c\x96\x86\xfb\x3a\xf3\x34\x66\x74\x28\x7e\x55\x30\x6f\x17\xdb\xf1\xb6\x35\xdf\xf8\x7e\x59\x66\xdc\x73\x73\x24\xa3\x5c\x65\xb0\x4b\x47\x45\xe8\xc9\xca\x9e\x55\x4b\x0f\xda\xbe\xba\x17\xa6\x4b\x88\x06\x0e\x3b\x6f\x12\xe7\x43\x4d\x93\x94\xcc\x1c\x6c\xa7\xa6\x65\xff\x60\x79\x4f\x4b\xa9\xc9\xb7\x50\xbd\x7f\xcc\xc0\x8d\xf2\xd0\x46\xc3\xfb\x6f\x8f\x3f\x62\x30\x58\xaa\x3f\x2f\x63\x81\xd7\x74\x9e\x66\x5a\x8f\x49\x2d\x05\x37\x52\xa5\x9c\x79\x43\x6d\x85\x99\x1e\x52\x5e\x9a\x4b\x6e\x22\x15\xde\xb7\xd1\x41\x7a\x86\xfa\xd2\x28\x2d\x0a\x58\x77\x29\x5b\x72\x4d\xc1\x33\x88\xdc\x9d\xae\xb1\x5e\xf0\xe6\x15\x39\x11\xba\x55\x11\x42\xd9\x2a\x09\xf6\xa0\xf3\xcc\xe9\x8f\x3b\xd8\x48\x76\xf6\x11\x0b\xd7\x81\x90\x26\xd3\x71\xf2\x81\xd6\x4d\xc5\xf4\x2b\xb2\xc7\x3e\x98\x6f\xf6\x46\x64\xef\xc3\x4c\xdb\xff\x08\x33\xd3\x7b\x13\x72\x5a\x37\x15\x2f\xb8\xa9\x96\x84\x8b\x19\x53\x2a\xc4\xde\xf1\x07\x2b\xa9\xff\xe9\x94\xdc\x31\xe6\xad\x8d\x54\x74\xce\x9e\x3b\xdd\xe0\x0b\x35\x4d\xd5\x44\x06\x9f\x49\xb0\x09\xb7\xcd\xcc\x40\x44\x70\xf2\x83\x34\xc6\x8f\x86\x1c\x4f\x1b\x57\x85\x39\x96\x99\x5c\xfe\x01\xd6\xc5\xad\xc0\x73\x35\x2d\x9f\xbf\x3f\x39\x3c\x7e\x73\x32\xa9\xcb\x2f\x16\xf2\x7a\x6c\xe4\xb8\xd5\x6c\x9c\x5c\x52\x3a\x78\x65\x2e\xd9\x12\x70\xd0\xb7\xbc\x36\x8e\x8c\x9e\x17\xd5\x48\x48\x16\x80\xcf\xad\x01\xf2\xfe\xdb\xe3\x1f\xf4\x90\x48\x57\xe4\xa4\x78\xce\x4c\xf1\xbc\x60\xcd\xe2\xb9\x1b\xf9\xdf\x75\xfd\xa3\x14\x93\xb5\x39\x49\x7a\xa0\x3f\x33\xb7\xcd\x51\x9e\x0e\xd4\x5e\x0b\x59\x55\x58\x5b\x6d\x4f\xad\x23\xd6\x2c\xc2\x0d\x8f\x7a\xe5\x87\x94\xa9\x0c\x2c\x4e\xd9\xbd\xf8\x00\x01\xb4\x7e\x99\x9c\xe2\x94\x8b\xf5\x2c\x0d\xfd\x73\x06\x3e\x19\x76\xcc\x44\xc2\x4b\x4d\xf3\x2a\x11\x8f\x53\x5c\xa5\xaa\x33\x8f\xc2\x3f\xfc\xde\x7f\xa9\x99\x01\x2d\x96\x0b\x82\x7d\x94\xdf\x58\xad\x7a\x17\x1c\xc1\x3b\xc1\x4a\x43\xfc\xd0\x58\x16\x3d\xa0\x6b\x5a\x2e\x4e\x08\x84\x80\xd5\x1d\x65\x28\xd3\xd6\x2c\x98\x30\x1e\xfa\xc9\xd5\x71\xc7\xba\x10\x39\x9d\xa1\x3f\xb0\x1c\x90\x46\x29\xaf\x98\x52\xbc\x64\x9a\x0c\x56\x86\xe2\x38\x10\xaf\x1e\x35\x6b\x0d\xca\x60\xcc\x91\x30\x38\x34\x87\x3e\x67\xa2\x43\xfe\xbc\xf9\xdd\xc8\x98\xdf\x89\x5c\xf9\xfb\xc8\x92\xdf\xc5\xfc\xf8\x4c\x19\x86\xc3\x73\xe2\xf3\x67\x79\xef\x4c\x90\xa3\xa7\x76\xc2\x27\xd9\xd4\x4e\x5a\xd6\x7c\x00\x08\xdf\x0e\x88\xf4\x3c\x8a\x27\xcc\xc3\x9d\x1f\xa2\x0b\x5a\xb1\xd3\x77\xdb\x0a\x47\xb8\xe1\xfb\x21\x89\x73\xf7\x61\xc3\x94\x47\x77\xf5\xd1\x31\x63\x68\xb1\x70\x01\x02\x9f\x97\x20\x05\x40\xef\xe0\xbe\x21\x42\x96\xa9\xe9\x86\x71\x4c\xc2\xd3\x70\x7b\x5c\xc2\x93\xff\x79\xc5\x26\xe6\xd4\xb0\xeb\x44\xfb\x7d\xdc\xa9\x8d\xa9\xbf\x07\xc7\xf8\x53\x6c\x63\x63\x60\x61\x78\xfc\x22\x94\xdf\xaf\x3d\xfb\xfe\x23\x16\x93\x1b\x62\x15\x39\x8e\x01\x78\xe2\x56\xa2\xb9\x78\x05\x39\xfc\x61\x96\xa6\x8c\xb8\x5d\x97\x85\xff\xdc\xb3\x3c\x17\xc1\x42\x3a\xf4\x31\xaf\x2e\x7b\x01\x77\x78\x76\x4a\xfe\x82\xb7\x6f\x6d\xf6\x1a\x25\x0d\xba\x41\x8f\x65\x4d\x79\x72\x0d\x5a\x6f\x0e\x56\x1f\xea\x27\x23\xb6\x64\xfd\x24\x9c\x85\x7b\x89\xbb\xd9\x63\xd0\x16\x52\xcc\xf8\xbc\x55\xac\x24\x2e\x70\xb5\xb5\x59\xda\x39\x0f\xd1\x9a\xcf\x86\xec\xdb\xef\x9e\x43\x0f\xbb\x83\x49\xe7\x2d\x5a\x71\x25\xa5\xfb\x76\xef\xd1\x05\xf5\x59\x3a\x6e\xa2\x8c\x18\x8f\x22\xd6\x39\x6b\x3c\xf3\x83\x3a\x1e\x2a\xc9\x06\x8c\x2a\x34\x87\xf2\x82\xa8\xc0\xd3\x75\x10\xe3\xba\x03\x0a\x43\xaf\xd0\x88\x7c\x2f\xe7\x5c\xf8\xe3\x45\xba\x02\x9f\x19\x4d\x77\xcf\x3c\xf9\x47\xd6\xae\x27\xff\xc8\x93\x7f\xe4\xc9\x3f\x72\xf3\xa5\x75\x75\x22\xe8\xb4\x4a\xaf\xe6\xee\x17\xbc\x87\xc7\x91\xd7\x15\x9d\x13\x06\x7f\x3c\x2f\xb9\xb6\xff\x25\xe7\xe7\xdf\x43\x56\x74\x2b\xbc\xeb\x1c\x78\xd3\x69\x5f\x23\x3f\x43\x78\x96\x6e\xef\x18\x43\x35\xe7\xcd\x00\x50\xb3\x6c\x07\x59\x47\x4a\xe8\x42\xab\x7b\x20\x0e\xee\x0e\x38\xcf\x68\x00\x8a\xc4\x3a\xe8\x29\xb3\xd2\xaa\xb8\x3c\x8b\x12\x93\xa5\xb2\x9f\x89\xe8\xa3\x2c\xc6\x47\xa6\x67\xe6\x34\x43\x56\x48\x1a\xc2\x0a\x67\xb9\x82\xd7\xd1\xf3\xbc\x36\xee\x95\x90\x73\xb7\x90\xf0\x1d\xd5\x5a\x16\xbc\x2b\x25\x70\x9d\x56\xbc\x8a\x5e\x82\x8a\xbe\xb5\x49\x46\x3b\x38\xcf\x84\xa0\xf9\xbd\xc1\x32\xf1\x8c\xed\xee\xa0\x3a\xb6\x44\xb8\xf0\xf3\xb6\xb5\x49\xc0\xad\x36\x04\x45\x3b\x97\x90\xe8\x28\x59\x9d\xc7\x20\x10\x56\x53\xc1\x3d\x4a\xad\xe3\xbd\x64\x8f\x13\x5e\x90\x05\xca\xf5\x06\xae\xe5\x3a\x88\x24\xe8\xc4\xbe\x95\xd5\x4a\x07\xf5\xce\xe2\xe0\x45\x7b\xa3\x5f\xcb\x84\x9f\xb9\xa4\x72\x90\xd5\x8d\x6c\xda\x0a\x2b\xe9\xc3\xa4\xa5\xcd\xd6\xc0\x6c\x54\xa4\xed\xe1\x7d\xb6\x43\x2d\x8f\x08\xfd\x71\xdb\x1b\x32\x06\xa2\xbc\x3b\xe2\xa8\xdf\xa3\xd8\x68\x69\xba\xf4\x8f\xcb\xe0\xf1\xdc\x3e\xe0\x68\x2e\x80\xd1\x74\xef\x72\x0f\x98\xb4\xe7\xc1\x79\xf1\xbb\x6f\xbe\x19\xa0\x0c\x71\xc5\x0a\x23\xa1\x18\xd0\x81\x3d\x87\x8c\x59\xaa\x18\xd8\xfe\x88\x06\xea\xfd\xcb\x58\x0c\x66\x06\xe5\x75\x6c\x0f\x91\x74\x2b\x08\xa4\x39\x30\x30\x86\x23\x8c\x0e\x4a\xd0\xcc\x96\x35\x0f\xdd\x0b\x4e\xb7\xdc\xbd\x60\xab\x3d\x0b\xb6\xd9\xa9\x60\x7b\xfd\x09\xb6\xd8\x95\x60\xdb\xbd\x08\xb6\xd2\x81\x60\xeb\x09\xdd\x0f\xdf\x63\x20\x0b\x54\x60\x0e\x98\xc0\xa1\x5d\x04\x06\x42\x0c\xe6\x81\x17\x1c\xdc\x27\xe0\x21\xba\x03\x64\xf2\x71\x0e\xef\x04\x90\x17\x06\x6a\xdb\xa8\xff\x3b\xa4\x7a\xe3\xb5\x9b\x08\xff\x5b\xc1\xf5\xdf\x36\x9a\xff\x16\x31\xfc\xf3\x61\xc9\xe5\xc2\xeb\x1f\x8e\x21\x97\x57\x70\x6c\x09\x91\xff\x1e\x71\xf8\x1f\x04\x7d\xff\xbe\x31\xf7\x77\xb3\xb8\x6d\x28\x86\xf7\x60\xe4\x6e\x9d\x09\xba\x3b\x57\x0e\xc8\x2e\xb8\xc5\x3b\x4a\x36\x86\x17\x7c\x63\x46\xdf\x68\xfb\x19\x96\xf8\xe8\x86\x16\xb0\xaf\xdb\xcc\x15\x58\x0f\xe2\x83\x25\x83\x7d\xe5\x48\x89\x4c\x52\x78\xb3\xb8\xcb\x91\x80\x77\xe7\x2b\x19\xd1\xe1\xe3\x87\x4f\x84\x0e\x43\x7f\x24\x15\xda\x4f\xdd\x8e\x25\x43\x3f\x65\x05\x7f\xca\xb5\x8b\x59\xc1\x0f\x85\x60\xf2\xf9\x25\x66\x96\x4f\x89\x99\xf1\xb5\x83\x89\x99\x9e\x69\x75\x7c\x1a\xe3\xb1\x0b\xa6\xa5\x9c\x5a\x25\xd5\x83\xf9\x75\x32\xf8\xf0\xec\x34\x79\xf4\x42\x31\x00\xea\xa7\x95\x9e\x6c\xb2\x39\x7d\xfa\x91\xb3\x70\x43\xd7\x6a\x63\x58\xdd\x24\x0a\x6f\xf2\x94\x97\xb9\xe9\x7a\xca\xcb\x7c\xca\xcb\x7c\xca\xcb\xbc\xf9\xda\xe5\xec\xa2\x45\x5b\x53\x31\xb6\xe7\x29\x24\x75\xf6\xca\x49\x56\xd4\xf4\x09\x71\x27\xe0\x20\xa1\x85\xe8\xba\x80\xb9\xdc\x0a\xfe\x6b\xcb\xba\x48\x47\x30\xd9\x76\x20\x0f\x0c\xe8\xd8\x9d\xe5\x42\x4b\x76\xe5\x9c\x2d\xe4\x1a\x3e\xa0\x9b\xcb\xb0\x74\xfe\x68\x1c\xb6\x64\x30\x78\x2f\x30\x69\x16\x0c\x8d\xed\xb3\x15\x63\xbb\xe7\xd3\x75\x82\x1c\xe4\xe8\xb0\xe8\x70\x6c\x09\x5a\x16\xb5\xef\xee\x9a\x96\x4c\x19\xa9\xb9\x52\x52\xb9\x4c\xb5\xf8\xf5\xb1\xf0\x89\xcf\x17\x86\x29\xf4\x90\x62\x79\x46\xba\xf8\x3c\x67\xc6\xed\x02\xd8\x45\x46\x12\x2a\x10\x7b\xd5\xfe\xdb\x83\x7c\xc0\xd4\x78\x0d\x64\xca\x16\xf4\x8a\xcb\x76\x00\xa8\xda\x39\xea\x53\x7b\xee\x91\x60\x2b\x2c\x65\x1b\x72\x51\x5a\x6d\x27\x23\xac\x82\x5e\xe7\x83\xe4\xa1\xdf\x76\x0f\x05\xb7\x79\x29\x7d\x30\x7a\xcc\x3e\x70\x6d\xd6\xe7\xdc\xb3\x80\xcb\x7d\xda\xca\x66\xbe\xd2\x8d\x3d\x7d\x7f\x4c\x86\xe9\xcd\xb1\x85\x7b\x44\xf4\x5d\x20\x57\xe7\xf0\xd5\xc7\x1c\x20\xae\xdf\x0f\x42\x96\x93\x9a\x16\x0b\x2e\x32\x40\xd4\xfe\xd8\x23\xac\xe7\x09\x99\x90\xc3\xaa\xea\xea\x98\x74\x28\x1d\xf4\x9e\x91\xfe\x4b\xd9\x45\x4a\x22\xc7\x72\xae\x62\x25\xe4\x59\xa1\x8a\x05\xf5\x89\x9a\x4f\xdc\x00\x93\xab\xfa\x9a\x2a\x36\x29\x64\x4d\x8e\xce\x4f\x49\xa9\x78\x62\x07\xae\x2d\xd7\x9f\xe3\x12\x9f\xa5\x85\xae\x3f\x37\x7f\xcf\x93\xaf\x67\xa7\x7c\x3d\xa1\x84\xa1\xe2\xc5\xf2\xf4\x38\x6f\x59\x04\x3e\xd3\x2b\x9a\x3a\x94\x44\xd8\xcf\xc9\xb7\x54\xb3\x92\xbc\xa1\x82\xce\x31\x60\xb5\x7f\x7e\xf6\xed\x9b\x03\xcb\xf0\x10\x8c\x3b\x3d\xde\x58\x37\x71\x1e\x3f\xfc\xed\xb6\x10\xcf\xc9\xea\xd4\x65\xd3\xed\xd7\x9e\x9a\x38\x7d\x5b\x03\x83\x27\x41\x6d\x3d\x1b\x10\x04\xde\x00\x90\x7f\xb6\xda\xff\x0b\x0b\x15\x7c\xb3\x46\xbd\x7a\xa4\x5e\xd5\xe5\xe5\x43\x4f\xc0\x7a\x34\xd2\xda\x8f\x97\x6c\x79\x67\xe9\x3d\x86\x15\x1c\x38\x38\xbe\x47\x4d\x6f\xee\x12\x14\x65\xca\xdc\x46\xe1\xa7\x65\xcd\x7d\x42\x66\x5c\x6f\x5d\xcf\x8d\xa2\x86\xcd\x97\xc7\xac\xa9\xe4\xd2\x72\xf1\x59\x94\xb8\x83\xb7\x4e\x51\x95\x56\x53\x5a\x10\xd5\x56\xd0\x0b\xa1\x5c\xeb\x90\x28\x18\x2b\x3b\x31\xcf\x85\x36\xb4\xaa\xec\x02\xc2\xf3\x6f\xa5\xe8\x93\x95\x83\x4f\x55\x03\xc6\x48\xe7\x47\xef\xea\x77\x08\x7e\xfb\xb1\xd5\xfe\x74\x45\x00\x86\xff\x38\xbf\xdd\x25\x13\xf2\x93\x73\x1e\x53\x14\x06\x94\x68\xef\xdb\xca\x1e\xd0\x55\xd9\xef\xa8\x8c\x26\x87\x63\x05\xec\xd6\x00\xf2\xcf\xbe\xa4\x73\x01\x4a\xa6\x7b\xa9\x10\xd1\xcf\x3f\x69\x7c\x6c\xda\x7c\xbd\x40\x0d\xd4\x3e\x98\xd0\xa6\xa9\x38\xa2\x0c\x48\xe5\x92\x70\xa3\x78\xf2\xfa\x6d\x9f\x22\x6a\xef\xa8\x86\xde\x4d\xed\x1c\x93\x2b\xa6\xa6\x9f\xe2\x7f\xbb\xab\x46\x49\x1b\x0e\xe9\x4c\x9f\x2c\xc2\x52\x95\xc6\xc3\xb3\x53\x1c\x68\x53\x84\xdf\x7f\x89\x0c\xe1\x96\xda\x27\xf4\x60\x39\x9a\x0b\x03\x84\x66\x4e\x87\x67\xa7\xd8\x23\xcd\xf5\x73\xea\x42\x03\xd6\x62\xa7\x58\x7c\xd9\xb5\xa1\xa5\x73\xfb\x44\x43\xa4\x60\x77\x69\x68\x6a\x29\x60\xa2\xad\x19\xf6\x8a\x0a\xc4\x10\x2e\x60\x9c\x40\x45\x17\x81\x40\xaf\xf2\x84\xec\xed\xc5\x36\x21\xc2\xb3\xa8\x88\x6e\x10\x75\x7b\x5f\xf6\xee\xb2\x72\xad\x7b\xb1\x4f\x3d\xe1\xef\x9e\xf5\x7c\xc7\x2c\xe7\x84\x13\x33\x43\xe6\x8e\x90\xe2\xbd\x9b\xef\x1f\xde\x7f\x7f\xef\x0c\xfa\xb6\x3f\x9c\xeb\xd8\xc3\xa0\xdb\x68\x43\x95\xe1\xb4\x22\xad\xaa\x7c\x7a\x21\x22\x91\xb8\x8a\xc0\x05\xbd\x8a\xba\x21\x4d\x08\xf9\x12\xb9\xd2\x31\x03\x8a\x32\x70\x8a\xba\xee\x60\xb3\xb6\xaa\x46\x64\xc6\x05\xb5\x07\x19\x6b\x48\x94\xe4\xf5\xc9\x14\x9f\x73\x51\x30\x3b\x4d\x63\xcf\x97\x04\x28\xf7\x6e\xa3\x20\xd3\x20\x47\x33\x0e\xb9\x20\x29\x56\xbe\x15\xe0\x17\x9e\x49\x45\x8e\xaa\x56\x1b\xa6\xde\x4b\x7b\x0c\x77\xe5\x26\x64\xa6\x64\x4d\x68\xfc\xf5\xb7\x5c\x94\x77\xaa\x84\x7a\x0f\x47\x7b\x41\x05\x61\x1c\x12\xa3\xec\xd0\x90\x0f\x6d\x99\xbd\xdb\x54\xfb\xba\x2d\x16\x76\x8a\xf6\x1a\x59\xea\x3d\x2b\x9d\xf7\x30\xdc\xa8\xf7\x0e\xec\x5f\xab\xef\x8a\xd5\x1b\xd1\xef\x9e\xd3\x86\xef\x1d\x8c\x08\x4c\x38\x24\xe7\xc9\x4f\xcf\xc6\xfb\x4c\xf7\x91\x9f\x30\x70\xf5\x25\xed\xa2\xf7\xf1\x13\x60\x63\x88\x2e\xf5\xed\x7a\xc1\x0d\xd6\xeb\xd8\x9d\x82\x31\x80\xd0\x6b\x66\xf5\x20\x25\xe4\xd0\x07\xd1\xec\xd6\xaa\x19\xf5\xf9\xba\xec\x8a\xa9\xa5\x59\xb8\x06\x16\x5e\x8a\x3e\xad\x1c\xec\x8c\x41\xab\xe6\x44\x99\x5f\xa1\x6e\xbb\x81\x4c\x58\x5b\xa1\x67\x5f\x3e\x5b\x3d\x92\xba\x33\xf8\xdf\x7b\x3d\x40\x09\x4b\x5a\x8b\x1f\xed\x2f\xfb\xeb\x80\x1f\xe1\x61\x12\xc4\xe1\xf7\xdf\xbb\xf4\x14\x9c\xf0\xef\xb8\x80\xa8\x37\xe8\x43\x1e\x0b\xc0\x2d\xda\xc6\x95\x02\x0a\xff\x6d\x57\x69\xdd\xe8\xfa\x54\x43\xe9\x16\x1a\xbd\x9d\x79\xd3\xa3\x6e\x7d\x80\x33\x56\xdf\xc8\x72\xf3\x26\xee\x31\xc9\x69\x74\x73\xc8\x25\xee\xdc\x9c\xee\x59\xce\x72\x5a\x36\x1b\xad\xd0\xdb\xd7\xf4\x96\xf5\xbb\x89\x92\xce\x4f\x07\x62\x3f\xfa\xe6\xa2\x4b\x8c\x20\xb3\x8a\xce\x3b\x5e\x04\x21\x8e\x9a\xfd\xd1\xf9\x8f\xfe\x15\x34\xb9\x01\x7a\xf8\xa3\xa6\xd3\xc7\x8c\xa5\x71\x37\x4b\x37\xde\x71\x63\x28\xe3\xe3\x16\x53\x78\xf8\xcd\xdc\xf4\x29\x79\x5f\xe6\x56\x57\xfd\x4d\xf3\xef\x5d\xeb\x34\xe2\x04\xdf\x39\xce\xbb\x42\xa0\xda\x04\x74\xb8\xf3\x1f\x7b\x6c\xf2\x11\x7a\x6f\x60\xda\x4b\xb6\xbc\x96\xaa\xfc\x38\xc3\x1e\x06\x61\xe6\x7f\xe2\x8d\x79\x9f\x0c\x86\xee\x78\xb9\x31\xb0\x93\xcc\xaa\xb7\x12\x5f\xd1\x29\xab\x3e\x4e\xfa\x0d\x86\xc1\x1b\xda\xd8\xd7\xe9\x4a\x36\xd1\x23\xe5\xb2\xcc\xd0\x3a\xc5\x3a\x1f\x5f\x91\x26\xd5\x9c\x0a\xfe\x4f\xac\x73\x2d\xac\xa4\x90\x8a\xff\x73\x33\xab\xed\x63\x4c\x1f\x7d\x5c\x15\x2b\xcc\x81\xe3\xfa\x8d\x22\xfb\x23\xdb\x82\x96\x25\x47\x15\xec\xec\x23\x1c\x7c\xfb\x7c\x71\x71\x79\x97\x95\x86\xfb\xb1\xcc\xa6\x0b\xec\xdd\xe3\x32\xdf\x22\x16\x3e\xbe\x73\x6f\x4f\xa3\xfb\x84\xe3\xa9\x55\xb7\x14\x8a\xdc\xfa\xfb\x9a\x72\x3c\xb5\x37\xb7\xf1\xba\x61\x76\x1d\x37\x51\xa7\x5b\x5b\x59\x6a\xdf\x2f\x3c\xed\x01\xf6\xd5\xa0\x09\x67\x35\xe5\xa9\x33\x86\xd7\x80\x25\xab\xa9\x69\x15\x37\x1b\x4f\xea\xdb\x7f\xc8\xc5\x77\xed\x94\xfd\xc8\x94\xb6\xeb\x71\xd7\x9f\x0b\xa8\x38\x3b\x3c\x3b\xdd\x38\x2d\x79\x4e\xe4\x1b\x1d\x19\xe0\x37\x73\x94\x5b\x75\x91\xb4\x82\xd6\x53\x3e\x6f\x65\xab\xab\x65\x1c\x41\xa1\xe4\x92\x8b\x72\x42\xc8\x29\xba\x55\xc5\x33\x43\xa8\x90\x62\x59\xbb\x5b\x45\x51\xb5\x25\xeb\x3d\xf1\xa6\xa3\x4c\x12\x7a\x25\x79\x49\x68\x6b\x64\x4d\x0d\x2f\x48\x21\x99\x2a\x00\x44\x35\x7e\x7e\xab\x19\xa1\xbd\x27\x76\xbf\x2d\x5a\x6d\x64\x4d\x6a\xaa\xf4\x82\x56\xd5\x4d\x2c\x91\x41\x3b\x00\x77\xda\x8d\xdf\xda\x59\xb9\xf1\xcb\xab\x5b\xe6\xe1\xe3\xdb\x01\x06\x1e\xb4\x1d\x2c\x71\x83\x1e\x70\x75\x33\x53\x7f\xc2\x33\x1c\x02\xee\xc6\xbe\x1c\x3d\xfe\xbc\x58\x30\xd2\xb4\xd3\x8a\x6b\x30\xe1\x41\x70\x2d\xc9\x94\x2d\xb8\x2b\xbd\xf9\xb8\xc4\xba\x71\x89\x3f\x36\xcf\xb7\x89\x8c\x8f\xce\xd0\x2d\x12\xfe\xd6\xdf\xba\x13\xf0\xb4\xa6\xf3\x4f\x50\xed\x6f\xd8\xbe\xdf\x5b\xb1\x4f\xc5\x32\x9c\xa7\xd0\x4c\x55\x8f\x88\x54\xae\x90\xd8\xdb\x7e\xca\x7d\x15\x5a\x04\x2b\xf2\xce\xcd\xa8\xab\x8b\x76\xdb\x00\x50\x06\x98\x9a\x49\x55\xdb\x79\xe7\x8a\xcc\x5a\x01\xde\xf0\x1b\xec\x42\xc8\xe1\x83\xf3\xc7\x39\x33\x69\xa5\x65\x10\x06\xb0\x6c\xc2\x13\x46\xa8\x26\xd7\xac\xaa\x30\x8d\x08\x3b\xbf\x46\xb0\xcd\x1d\x96\x65\x97\x4a\x38\xdd\x6c\x5b\x96\x7c\xce\xb4\x21\xfb\xe7\x7f\x3d\x3c\x00\x85\x08\x9c\x75\x4b\x62\xe8\x7c\xb2\x92\x1f\x8e\xc9\xa4\x56\xdd\x2a\x5b\x50\xcb\x0a\x6a\x68\x25\xe7\x98\x81\x66\x45\x8a\xfd\x7d\x53\xd1\x25\x94\x71\x35\x54\x41\xad\x60\x81\x0e\x4b\xa2\x5a\x71\x53\xe7\xef\xfb\x3b\x29\x3f\x2e\x93\x6e\xeb\xa9\x7d\x4b\x78\xf8\xe3\x32\xe7\x23\x7d\x82\xef\xf7\x08\x56\xac\xf9\xff\xd8\xbb\xb6\xde\xc6\x6d\x25\xfc\xde\x5f\x41\xf8\x25\x6d\x10\x67\x71\xd0\xee\x79\xe8\x5b\xe0\xa4\x40\x70\x72\x59\x38\x69\xfb\x5a\xc6\x62\x6c\x21\x32\xa9\x92\x52\x2e\x2d\xfa\xdf\x0f\x38\x43\x52\xa2\x2d\x91\x94\xad\x38\x8b\x45\xf5\x92\x5d\x4b\xbc\xdf\x66\xbe\x99\xf9\x58\xd0\x1e\xc0\x6a\x6b\xbf\x68\xa8\x0f\xb5\xde\x02\xc0\x86\xe0\xcc\xe5\x71\x4a\xee\x70\x3e\xad\x69\xb5\x40\xff\x90\x3f\xd6\xac\xa2\x19\xad\xe8\xa9\x56\xee\xff\xf0\x29\x92\x44\x91\xe9\x8c\xfa\x07\xba\xa7\xce\x28\x8a\x8b\xf8\x1e\x77\xa5\x55\x0b\xf7\x39\x28\x5c\x76\xdd\x06\x11\xb2\x3d\xb7\x37\x68\xfe\xc5\xab\xd6\xad\x83\xa6\x7c\xaf\xae\x9b\x89\x7c\xec\xa9\xf0\x5b\x62\x66\xeb\x9a\xf1\x4a\x9d\xc2\xd0\xb4\x7f\x01\x7b\xc2\xd9\xcd\x79\x3f\x1c\x1b\x07\x92\x22\xc0\x51\xba\xcd\xe6\x2c\x50\x77\x6b\xb2\x31\x6f\x7c\x5b\xa2\x25\xca\x00\x1a\x26\x24\x6f\xa0\xdc\x9d\x4a\xf0\x71\xa0\x58\x1c\xe7\x86\xca\xa5\x51\x0a\xfb\xc1\xb6\x24\x8b\x70\x8a\x1d\x38\xc6\xac\x33\x75\xcd\xe8\xfd\x28\xcd\x2c\x1c\x65\xbf\xe9\x63\xb7\xc1\x31\x01\x5a\x05\x8b\xfc\xbb\x61\x48\x35\xa3\x27\x82\x85\xb6\xa9\x03\x2a\x1a\x35\x02\xba\x59\xe0\x39\xf1\x3e\xb1\xb7\x23\xa3\xe9\xea\x15\xb4\xca\x4b\xe4\x6f\x32\x36\xc1\xd8\xf0\xe3\xf3\x1b\x2d\xf2\xcc\x15\x80\x6b\xe9\x92\x9f\x90\x1b\x51\xe9\x3f\x17\xaf\xb9\xaa\x10\x63\x38\x17\x4c\xdd\x88\x0a\x7e\x19\xa5\xa7\xb0\x82\x63\xf6\x93\x81\x41\xd0\x00\x04\xcb\xbd\x05\x96\x98\xfe\xc0\x3b\x14\x1a\x79\x4f\x7f\x7d\xc9\xb5\x40\x83\x4d\x8e\x14\xe1\x48\xe1\x94\x29\xc0\x92\x25\x70\xc1\xa7\x36\x46\x6b\xbb\x04\xd3\x8f\x42\x7a\xdd\xb8\x73\x61\xa6\x20\x0c\x6f\x80\x37\xb9\xb2\xe7\x92\x13\x43\xa8\x85\x86\xa3\xb8\xf4\x9a\xc9\x25\xd8\x76\x17\x11\x5b\x64\x2a\x22\x9f\x84\xc3\x27\xa3\xef\x3b\x61\xee\x3b\x24\x82\x33\xe9\xaa\x17\x9f\x23\x03\xe6\x63\x2b\x2b\xdc\xf5\xd7\x08\xdc\xfd\xad\x37\x77\x18\xd2\x7f\x80\x50\x51\x9d\x92\x33\xa2\x72\xbe\x2c\x98\xf7\xce\x98\xdb\x5b\xd9\x04\x8a\x2a\x21\x4a\xf1\xcf\x3a\x7f\xa6\x85\x3e\x66\x20\x2a\xc4\x51\xb1\x88\xc7\xad\xc3\xf6\xc4\x10\x27\xea\x0d\xd1\x89\xb1\x93\x27\xf6\x36\x39\x09\x86\xc9\xb4\x67\xf4\xe4\x92\x4f\x1a\x8e\x21\x6f\x96\xba\x33\x0d\x24\xe3\x09\xbc\x9b\xec\x7e\x6e\x07\x4f\xa8\x74\x94\x91\xc4\xa7\xdc\xb0\xd8\x3b\xf5\x94\x77\xbb\x25\xa5\x4c\x12\x2b\x5f\x7e\xaf\x7e\x00\x5c\x8d\x33\x02\x24\x58\x12\x4c\x12\xfa\xd7\x36\xa3\xb3\xd6\x58\x9e\xf2\xb2\x6c\xe8\xb6\xeb\x72\x29\x69\xc6\xc8\x52\xd2\xb2\x67\xd1\x0e\x93\x4e\x51\xc4\xed\x2a\x32\xa0\x96\x7d\xfd\x3a\x50\xcf\x58\x07\x50\x87\x60\xba\x17\xf6\xb0\x12\xe2\x09\x98\x71\x60\xde\xbd\x23\xa4\xf6\x3b\x96\x75\xde\xfc\x66\xe1\x0e\x45\x32\x56\xd1\xbc\x00\x17\xc1\xdb\xab\x6b\xe3\x44\x68\x65\x35\x5b\xcb\xee\x3d\x63\x04\xdd\x90\x66\xc6\x4f\x76\xce\x9e\x73\xf6\x62\x90\xb3\xbe\x2d\x6a\x4a\x96\x8c\x83\x83\x5a\xc0\xcd\x74\x4a\x54\x9e\xb1\x0b\x08\xb5\xee\xcf\x68\x0f\x23\x59\x4f\x9d\x63\x7b\x45\xf8\xac\x8b\x9e\x73\x09\x67\x9c\x43\x50\xbe\x08\x19\x60\x96\x4f\xa3\x59\x4b\xa3\x50\x73\x51\xca\x3f\xfd\xf4\x63\xe0\x5c\x79\xcd\xd7\xf5\xfa\x67\xf2\xdf\xcf\x9f\x7f\xfc\xdc\xff\x59\xce\xf1\xb3\xff\xf4\xb7\xcf\xac\xb6\xd9\xfc\xfc\x2b\xe8\xef\xcc\xf9\x7b\x87\x0d\xf0\x09\x59\x3d\xd2\xbc\xa8\xa5\x09\x97\x48\xd4\x1e\x7f\x69\xa7\x01\xe3\x69\x13\x56\x4b\x6d\x8e\xd6\xcf\xd8\xf8\x1f\x3f\xe6\x9c\x29\xb2\x12\x2f\xa4\xe6\x92\x2d\xc4\x92\xe7\x7f\xb1\x0c\xc9\x72\x15\x3a\xc0\xc1\x55\xf2\x76\x8a\x13\xc6\xb3\x52\xe4\xbc\x82\x23\x76\x45\x79\x56\x84\x7c\x95\x12\x5a\xda\x5e\xc1\x7b\x75\x19\x9c\x46\x83\x3a\xec\xba\x49\xb1\xd1\x5d\xba\xcd\xd6\xd4\x8c\xa7\x1c\x76\xdb\x5e\x2d\xc5\x8d\xf1\x2e\x80\xb9\x74\xd4\x71\x18\x24\x80\x50\x07\xfc\xf6\x67\xcd\xe4\x1b\xc4\xed\x36\x8a\x5b\xcb\xa3\xf8\xbe\xa1\x6f\xb4\x6d\x34\x42\x25\xed\xb5\x09\x90\x0e\x48\xa6\x25\x6a\x35\x0e\x6e\x1b\xb5\x82\x34\x0c\xdd\x74\xac\xd5\x97\x9c\x11\x5e\x17\x45\xa0\xa4\x9e\x4c\xb8\x08\x59\x8e\xf1\x49\xc2\x1f\xd2\x80\x81\x54\x08\x0a\x9f\x8f\x03\xa2\xda\x0d\x1f\x49\x8b\x1a\xea\x4e\xfc\x41\x00\x15\x3e\xbb\xc0\x54\xf8\x0c\x08\x5f\x48\x0f\x5d\x48\xa3\x84\x4e\x80\xaf\xf0\x19\x12\xdb\x90\x48\xe4\xfc\x9e\x80\x16\x3e\x83\x7c\xe0\xd2\xc0\xad\x8e\xaa\x27\xfa\xb9\xbf\x23\xd0\x85\xcf\x7b\xc0\x5d\xf8\x0c\xea\xc7\x14\xe8\x0b\x9f\x5d\x7a\xf1\x00\x30\x98\x69\xf3\x21\xc1\xb0\x48\x91\x23\x43\x62\xf8\x24\x03\x63\xa6\x72\x83\x1c\x56\x07\x38\xab\x0e\x74\x54\xdd\xc3\x49\x75\xe7\xa4\x09\xe0\x19\x3e\xc3\x66\xf4\x01\x81\x34\x5b\xe0\xc1\xe0\x34\x7c\x0e\x0d\xaa\xe1\x93\x7c\x9e\x0e\x03\xd8\xda\x99\x47\xa6\xeb\x2e\x44\x57\x92\xe5\xfc\x59\xe0\x7d\x9f\x83\x94\x88\xf9\x56\xc2\x0d\x5d\xe2\x05\x8e\x51\xa3\x4c\x38\xed\xab\xad\x53\xad\x84\x78\x22\xb5\x8a\x5b\xd4\x82\xed\x8e\x84\xc7\x8e\xa2\x04\x0f\x59\x61\xf3\xba\x60\xbf\xe7\xd5\xea\xb6\xa1\x5c\x81\x65\x56\xd5\x65\x01\x7d\xd1\x7a\xa1\xe7\xe5\xbc\x51\x4e\x2e\x2b\xdc\x62\x17\x62\xbd\x66\x3c\x43\x6f\xcb\x35\x7d\x0a\x4f\x78\xa5\xd5\x5b\x8c\x2a\x28\x0a\x54\xe1\xa0\x28\xf6\x5a\x52\xde\x28\x2b\xcf\xfa\xa0\x0e\x4d\xe1\xc4\x09\x9c\x2a\x93\x25\xc7\x99\x0e\x96\xb7\x37\xe3\x4a\x5b\x81\xa1\x5e\xfc\x28\x79\x60\x85\x00\x4e\x29\x8c\x9c\xc0\x28\xa3\xe4\x50\xcb\xcb\x47\x9b\xca\x48\x4e\xe6\x9e\x22\xc6\x97\x0d\xd1\xbc\x2a\xf2\x05\x73\x47\xa6\x48\x21\xf3\x99\x1b\x69\x3a\x4d\x40\x4f\x39\xfb\x12\xcf\xbd\x01\x67\xde\x1e\xe7\x1d\x2d\xf3\x38\x14\x88\xcf\x0e\x23\x6f\xb3\x6e\x8f\xfd\xb3\xfd\x2d\x65\xf4\xed\xc7\xff\x8e\x7f\xe8\xd9\x63\xfc\x1b\xaa\xa9\xb1\x87\xdf\xdf\x51\x1b\x19\xd8\x8d\xfd\xc6\xd1\xb2\xa0\x52\x1f\xf6\x80\xe4\x4f\xc9\x6c\x7e\x71\x76\x7f\x71\x42\x7e\xfd\x72\x0e\x7f\xcf\x2f\xae\x2e\xf4\xdf\xd9\xed\xcd\xcd\xc5\xec\x5e\x0b\xcf\xc7\xd1\x2a\xc0\x45\xce\x45\x81\xa3\xaf\x25\x14\xe1\x6f\xe6\x94\xbf\x91\xc7\xba\xd2\x3b\x72\x53\x19\xaf\x96\x14\x21\x44\x9a\x65\x29\xc1\x8e\xdf\xdc\x1c\xf4\xc6\xdc\x0d\xe8\x26\x6a\xdb\xea\x33\x73\x77\xb6\x89\xeb\x8f\xb7\xec\x30\x93\x3c\x39\x4e\x73\xe8\x1c\xdf\x2d\x84\xf3\xbb\x68\xbe\xbf\x08\x49\xd8\x2b\x5d\x97\x45\x42\x84\xdc\x51\x29\x32\x75\x64\x62\x75\xf5\xbf\xe3\xdd\x0e\x49\x3e\x15\x62\x79\xe4\x42\x7c\x19\x29\xc4\x92\xa8\xfa\xc1\xc5\x6f\x83\x20\x98\x94\xdb\xb1\xcd\xc6\x0b\x46\x3d\x71\x41\xde\xad\x5c\x93\x2b\xe7\xe5\xd9\xce\x60\x48\xbd\x3e\xa9\x05\x2d\x98\x97\x93\xfe\x61\x68\x85\x8e\x3f\x75\xb7\xd0\x6a\x2a\xb9\xdc\xc8\x31\x65\xa7\x78\xc9\x8b\x6c\x41\x65\xb6\xb5\x5d\x80\xe8\x87\xab\x09\x66\x0e\x5e\x0c\xc8\x41\x70\x6c\x8a\x46\x22\xc8\x38\x62\xf5\xcc\x64\x41\x4b\x8c\x03\x84\x1b\x2d\xc1\x6f\x39\xa1\x8a\xe7\xac\x64\xc0\x23\x80\x97\x78\x31\xc2\xf8\xa2\x10\xc0\x74\x89\x52\xe7\x89\x3f\x2c\xe8\xe5\x6c\x2f\xdc\x49\x8d\x0f\xff\xc6\x8f\x57\x08\x28\x1b\x7b\xd7\xc1\x28\xb5\x5e\x36\x5a\x1b\x7f\x1c\xcd\x07\xc1\x40\xa7\x65\x33\x32\x31\x24\x12\x93\x13\x32\x71\xc4\xa3\x99\xd1\xc8\x27\xc7\x71\x4a\x67\x97\x41\x9b\x39\x00\x14\x76\xe3\xe9\x30\x85\x7a\xb6\x89\x5a\x60\x76\x5b\x1f\x8d\xe4\xaa\x37\xa4\xbc\x5a\xa4\x34\xa6\x16\x68\x83\x5f\x50\x3c\xa7\x76\x43\xb7\x6a\xdd\x30\x74\xec\x5d\xe3\xc9\xb1\x97\x7d\x65\xd9\xc9\x09\x17\x66\xf0\x24\xd3\xb3\x31\x14\x0a\xd0\x7e\xee\xbc\xb5\xe7\x7c\x5c\xda\xac\xc4\xb9\x24\x25\x95\x8c\x57\xae\xf2\xf1\x6c\xcd\x25\xce\x00\xc6\x1c\x4f\xd2\x56\x65\x70\x11\xb5\xdc\x1a\x12\xb1\x8a\x3b\x97\x62\x56\x50\xa5\x3a\x0c\x9e\x70\x06\xe8\x8c\x0d\x37\xbd\x3e\x7b\x8d\xcf\x07\x5c\x65\xba\xa2\xcf\x81\xa6\x26\x54\xba\xa2\x72\xc9\xaa\xb0\x43\x02\xe5\x6f\xb7\xc1\x4b\x20\xa6\xc9\x57\xc3\x4d\x77\x40\x8c\x72\x5e\x4d\x85\x9c\x62\x92\x9f\x49\x25\xeb\x3e\xdc\xa1\xca\xd7\x4c\xd4\xd5\x1d\x5b\x08\xde\x1d\x34\x6c\xbe\x1b\xcd\xc3\x62\x40\x24\xb5\x71\xf2\x39\xb3\xe2\x77\xfb\x66\x1a\x0b\x47\x35\xb2\xb9\x75\xec\xf1\xc9\x45\x6f\xaf\xae\xf7\x19\x6c\x02\x0c\x52\xe1\x91\xfc\xcd\x9c\xc9\x7c\xe9\x6a\x6a\x6a\x1e\x4c\x76\x5d\x57\xc3\x13\xcd\x9c\xc3\x48\xf8\x6b\xd3\x19\x61\xa2\xc7\xde\xf6\xab\x8a\x56\xf5\xd6\x6c\x88\x1d\x45\x66\x7f\xbf\x43\x22\x07\xa3\xde\xdf\x41\x56\x6d\x9b\x55\x9b\x43\x0e\x35\x3a\x24\xd1\x84\xef\x6c\x44\xc9\x29\x31\x09\xf5\x92\xad\x24\xcd\x11\x0e\xa3\x8b\xaa\xa6\xdb\x26\x77\x9d\xd8\x44\xa3\x74\x33\xc7\x06\x00\xb1\x10\x08\xb6\x60\xb2\x52\x57\x54\x55\xbf\x96\x19\xed\xe1\x10\xd8\x88\x32\x51\x15\xac\x29\xd4\x69\x5f\x38\xcb\xf4\x21\x64\xba\x04\xf3\x23\x2f\x7a\x77\xaf\x31\xc7\x8e\x0c\x23\xb3\xd2\xae\x31\x9d\x7c\xaa\x8b\xea\xae\xf5\x5c\xe8\x3e\x39\xeb\xdc\xa3\xfc\x60\x9e\x58\x6d\xf5\x89\x26\x21\x37\xc2\xd9\x6b\x97\x54\xb9\x7f\x8d\x0b\x46\x79\x77\xb0\xa5\x57\xd7\x19\x7e\x37\x7c\x4e\x99\x02\xc8\xcb\x2a\xd7\xea\x16\x72\x2d\x28\x62\x85\xd8\x8c\x15\xac\x87\x72\x61\xcf\xf8\x1f\x53\xc2\xb9\x29\x60\x5f\xd7\xe9\x2f\x7e\x76\xce\xe2\x6d\x74\x4b\x13\x95\xdb\x68\x69\x46\xf6\x71\x58\xc5\x66\x83\x41\x78\x7b\x28\xc4\xe2\x09\x49\xcd\x81\xd4\x2c\xff\x8b\xc9\x80\x90\x01\x56\xc4\x9c\x67\xf9\xc2\xb9\x2b\x94\x52\x2c\x25\x53\x5e\x57\x23\x07\xac\xc2\xdc\x75\x99\xba\xcf\x5d\xb9\x42\x36\xb6\x9d\x9a\x1b\xda\x8b\xc3\x84\x28\x59\xbd\x1c\xe2\x37\x3d\x5b\xfa\xb6\x8a\x8e\xfc\x92\x70\x2b\x86\x01\x68\xe8\xda\x04\x59\x7f\xfa\x5f\x7f\xe8\xf1\xa8\xf1\x43\xa1\x00\x68\xfc\x22\xb7\xf7\xde\x04\xbf\x0a\x84\x4a\xa7\x9a\x02\x22\x21\xd1\x24\x5d\x75\x72\x55\x4e\xc9\x6d\xd4\x98\x8a\xd1\xdd\x64\x12\xd8\x80\x87\x38\xbf\xa4\xde\x1e\x35\xc8\xec\xcd\x87\x5c\x9b\xe2\xad\x96\x46\x99\x32\xdc\x29\xe8\x1f\xf7\x28\x64\xaf\xda\x36\x5e\xe5\xc3\x01\xf4\xd1\x8c\xb4\x4c\xdb\xef\x88\xee\x1f\xdc\x76\x07\x75\x49\x4e\x08\x25\xab\x5c\x55\x42\x1a\x0f\x11\x7d\x00\x56\x92\x72\x85\xef\x7b\xcf\x8a\x7d\x5d\xdb\x67\xae\x0a\x84\x96\x25\xa3\xd2\xda\xe9\xcd\x71\x46\x15\x80\xa8\x0b\x21\xb3\xce\x8a\x59\x48\xa6\x53\x1c\xeb\x2c\x7e\x04\xee\x90\x82\xaa\xea\xde\xd5\x41\xcb\x14\x89\xbb\xb1\x2f\x31\x99\x26\x36\xad\xb1\x1c\x96\x82\x37\x2f\x05\xa1\xdc\x00\x55\x7d\x45\x24\xcd\xaf\xb8\x5c\xd2\xb4\x0d\x05\xc0\x9d\xda\xf5\xe2\x84\xbd\x56\x13\x0f\x53\xf3\x35\x53\x2a\x18\x50\xbe\xc1\x64\x03\x37\x4e\x11\x77\xe3\x94\x49\x6e\x0f\x7b\x14\x1c\x30\xb6\xc2\x32\x33\xbf\xf5\x4f\x35\x02\x62\x02\xc2\x20\x6e\x59\xed\x35\x64\xe5\x8a\xaa\xd4\xc6\xb8\x55\xe4\x62\x78\x92\x97\x43\x62\x6d\x24\xa3\x2a\xc4\xcd\x31\xc4\x09\xfa\x41\xe6\xec\x91\xcc\xe8\x9a\x15\x33\xaa\xc6\xec\x79\xd8\x1e\x42\x50\x0d\x3b\x5d\x9e\x92\xa3\x79\xcb\x4d\xe6\x46\x54\xd7\xac\x3a\xda\xad\x6f\xd2\x36\x82\x77\xdd\x02\xf6\x56\x47\xe2\x0b\x7e\xcf\xa5\xbe\x77\x0d\x03\x0b\xfb\xab\x58\xd2\x61\x5e\x9a\xbe\x65\xec\x2f\xe0\x5a\x02\x3c\xb9\xd8\x75\x21\x47\xb8\x2e\xfa\x16\x6f\xca\xb2\xfd\xa0\x05\x3b\x64\xa9\x46\x5a\xef\xb2\xb8\xeb\x84\x7a\xb6\x3a\xe2\xde\x53\xa7\xc1\x56\xd4\xf6\x8d\xc7\x9b\xa8\x72\xa5\x95\xbc\x31\x05\xa3\x8f\xe5\x8f\x32\x83\xda\xfb\x3e\x20\xf9\x4f\xc3\xe7\xfc\xbe\xdc\x54\x19\xd8\xdf\xf4\x0c\x38\xa4\xbb\xdc\xb9\x2d\xd5\x00\x30\xee\xfe\x1b\xf8\x1f\x5a\xf7\x5d\xcd\xbc\xf9\xf1\x7d\x25\x48\x29\xd9\x33\xc4\x51\x70\x88\x0f\x65\x84\x33\xa5\x17\xca\x0f\x81\xe2\x13\x55\xb6\x34\x75\x2d\xae\x4a\x47\xd5\x64\x12\x1f\x5a\xfb\x51\x68\x80\xf1\x49\xd5\x0a\x13\xb4\xee\x01\xea\x60\x5c\xa7\x1a\x90\x59\x54\xc0\x1c\x98\x5f\x37\xf0\xbc\xf9\x6c\x5c\x55\xa3\x93\xcc\x61\x3f\x47\x4f\x8b\x85\xde\x95\x17\x70\x0b\x13\x6e\xf3\xee\xa2\xbc\x36\xc8\x3c\xdf\xdc\x03\xc1\xe7\xde\x9f\xe1\x63\x35\xab\xae\xf3\xf1\xfa\x3c\x4a\x0a\x97\x9c\xdf\x57\xc0\x70\x17\x9d\x40\xef\x4b\x79\x85\x4f\x6c\xd6\x7d\xfc\x7c\x4b\x61\x3b\x0d\xce\xb1\x77\x22\x1b\x54\x4c\x3e\xb3\xcc\xb3\x30\x9a\xdb\xd0\xfc\xdf\x5a\xf6\xe8\x26\x7f\xd3\xed\xe4\xef\x7f\xbe\xfb\x7f\x00\x00\x00\xff\xff\x90\x1c\x07\x44\xe8\x50\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\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") func operatorsCoreosCom_clusterserviceversionsYamlBytes() ([]byte, error) { return bindataRead( diff --git a/staging/api/go.mod b/staging/api/go.mod index bbac9ce5aa..e58e9683b8 100644 --- a/staging/api/go.mod +++ b/staging/api/go.mod @@ -7,14 +7,14 @@ require ( 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/spf13/cobra v1.10.1 + 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.1 - k8s.io/apiextensions-apiserver v0.34.1 - k8s.io/apimachinery v0.34.1 - k8s.io/client-go v0.34.1 - sigs.k8s.io/controller-runtime v0.22.3 + 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 + 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.1 // indirect - k8s.io/component-base v0.34.1 // indirect + k8s.io/apiserver v0.34.2 // indirect + k8s.io/component-base v0.34.2 // 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 e65720fab3..925ed53591 100644 --- a/staging/api/go.sum +++ b/staging/api/go.sum @@ -112,8 +112,8 @@ github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWN 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/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 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY= github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stoewer/go-strcase v1.3.1 h1:iS0MdW+kVTxgMoE1LAZyMiYJFKlOzLooE4MxjirtkAs= @@ -243,18 +243,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.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/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/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/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= @@ -263,8 +263,8 @@ k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8 k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.33.0 h1:qPrZsv1cwQiFeieFlRqT627fVZ+tyfou/+S5S0H5ua0= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.33.0/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw= -sigs.k8s.io/controller-runtime v0.22.3 h1:I7mfqz/a/WdmDCEnXmSPm8/b/yRTy6JsKKENTijTq8Y= -sigs.k8s.io/controller-runtime v0.22.3/go.mod h1:+QX1XUpTXN4mLoblf4tqr5CQcyHPAki2HLXqQMY6vh8= +sigs.k8s.io/controller-runtime v0.22.4 h1:GEjV7KV3TY8e+tJ2LCTxUTanW4z/FmNB7l327UfMq9A= +sigs.k8s.io/controller-runtime v0.22.4/go.mod h1:+QX1XUpTXN4mLoblf4tqr5CQcyHPAki2HLXqQMY6vh8= sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE= sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg= sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU= diff --git a/staging/api/pkg/lib/release/release.go b/staging/api/pkg/lib/release/release.go new file mode 100644 index 0000000000..e91adf4c30 --- /dev/null +++ b/staging/api/pkg/lib/release/release.go @@ -0,0 +1,73 @@ +package release + +import ( + "encoding/json" + "slices" + "strings" + + semver "github.com/blang/semver/v4" +) + +// +k8s:openapi-gen=true +// OperatorRelease is a wrapper around a slice of semver.PRVersion which supports correct +// marshaling to YAML and JSON. +// +kubebuilder:validation:Type=string +// +kubebuilder:validation:MaxLength=20 +// +kubebuilder:validation:XValidation:rule="self.matches('^[0-9A-Za-z-]+(\\\\.[0-9A-Za-z-]+)*$')",message="release version must be composed of dot-separated identifiers containing only alphanumerics and hyphens" +// +kubebuilder:validation:XValidation:rule="!self.split('.').exists(x, x.matches('^0[0-9]+$'))",message="numeric identifiers in release version must not have leading zeros" +type OperatorRelease struct { + Release []semver.PRVersion `json:"-"` +} + +// DeepCopyInto creates a deep-copy of the Version value. +func (v *OperatorRelease) DeepCopyInto(out *OperatorRelease) { + out.Release = slices.Clone(v.Release) +} + +// MarshalJSON implements the encoding/json.Marshaler interface. +func (v OperatorRelease) MarshalJSON() ([]byte, error) { + segments := []string{} + for _, segment := range v.Release { + segments = append(segments, segment.String()) + } + return json.Marshal(strings.Join(segments, ".")) +} + +// UnmarshalJSON implements the encoding/json.Unmarshaler interface. +func (v *OperatorRelease) UnmarshalJSON(data []byte) (err error) { + var versionString string + + if err = json.Unmarshal(data, &versionString); err != nil { + return + } + + segments := strings.Split(versionString, ".") + for _, segment := range segments { + release, err := semver.NewPRVersion(segment) + if err != nil { + return err + } + v.Release = append(v.Release, release) + } + + return nil +} + +// OpenAPISchemaType is used by the kube-openapi generator when constructing +// the OpenAPI spec of this type. +// +// See: https://github.com/kubernetes/kube-openapi/tree/master/pkg/generators +func (_ OperatorRelease) OpenAPISchemaType() []string { return []string{"string"} } + +// OpenAPISchemaFormat is used by the kube-openapi generator when constructing +// the OpenAPI spec of this type. +// "semver" is not a standard openapi format but tooling may use the value regardless +func (_ OperatorRelease) OpenAPISchemaFormat() string { return "semver" } + +func (r OperatorRelease) String() string { + segments := []string{} + for _, segment := range r.Release { + segments = append(segments, segment.String()) + } + return strings.Join(segments, ".") +} diff --git a/staging/api/pkg/lib/release/release_test.go b/staging/api/pkg/lib/release/release_test.go new file mode 100644 index 0000000000..4756c81557 --- /dev/null +++ b/staging/api/pkg/lib/release/release_test.go @@ -0,0 +1,161 @@ +package release + +import ( + "encoding/json" + "testing" + + semver "github.com/blang/semver/v4" + "github.com/stretchr/testify/require" +) + +func TestOperatorReleaseMarshal(t *testing.T) { + tests := []struct { + name string + in OperatorRelease + out []byte + err error + }{ + { + name: "single-segment", + in: OperatorRelease{Release: []semver.PRVersion{mustNewPRVersion("1")}}, + out: []byte(`"1"`), + }, + { + name: "two-segments", + in: OperatorRelease{Release: []semver.PRVersion{mustNewPRVersion("1"), mustNewPRVersion("0")}}, + out: []byte(`"1.0"`), + }, + { + name: "multi-segment", + in: OperatorRelease{Release: []semver.PRVersion{ + mustNewPRVersion("1"), + mustNewPRVersion("2"), + mustNewPRVersion("3"), + }}, + out: []byte(`"1.2.3"`), + }, + { + name: "numeric-segments", + in: OperatorRelease{Release: []semver.PRVersion{ + mustNewPRVersion("20240101"), + mustNewPRVersion("12345"), + }}, + out: []byte(`"20240101.12345"`), + }, + { + name: "alphanumeric-segments", + in: OperatorRelease{Release: []semver.PRVersion{ + mustNewPRVersion("alpha"), + mustNewPRVersion("beta"), + mustNewPRVersion("1"), + }}, + out: []byte(`"alpha.beta.1"`), + }, + { + name: "alphanumeric-with-hyphens", + in: OperatorRelease{Release: []semver.PRVersion{ + mustNewPRVersion("rc-1"), + mustNewPRVersion("build-123"), + }}, + out: []byte(`"rc-1.build-123"`), + }, + { + name: "mixed-alphanumeric", + in: OperatorRelease{Release: []semver.PRVersion{ + mustNewPRVersion("1"), + mustNewPRVersion("2-beta"), + mustNewPRVersion("x86-64"), + }}, + out: []byte(`"1.2-beta.x86-64"`), + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + m, err := tt.in.MarshalJSON() + require.Equal(t, tt.out, m, string(m)) + require.Equal(t, tt.err, err) + }) + } +} + +func TestOperatorReleaseUnmarshal(t *testing.T) { + type TestStruct struct { + Release OperatorRelease `json:"r"` + } + tests := []struct { + name string + in []byte + out TestStruct + err error + }{ + { + name: "single-segment", + in: []byte(`{"r": "1"}`), + out: TestStruct{Release: OperatorRelease{Release: []semver.PRVersion{mustNewPRVersion("1")}}}, + }, + { + name: "two-segments", + in: []byte(`{"r": "1.0"}`), + out: TestStruct{Release: OperatorRelease{Release: []semver.PRVersion{mustNewPRVersion("1"), mustNewPRVersion("0")}}}, + }, + { + name: "multi-segment", + in: []byte(`{"r": "1.2.3"}`), + out: TestStruct{Release: OperatorRelease{Release: []semver.PRVersion{ + mustNewPRVersion("1"), + mustNewPRVersion("2"), + mustNewPRVersion("3"), + }}}, + }, + { + name: "numeric-segments", + in: []byte(`{"r": "20240101.12345"}`), + out: TestStruct{Release: OperatorRelease{Release: []semver.PRVersion{ + mustNewPRVersion("20240101"), + mustNewPRVersion("12345"), + }}}, + }, + { + name: "alphanumeric-segments", + in: []byte(`{"r": "alpha.beta.1"}`), + out: TestStruct{Release: OperatorRelease{Release: []semver.PRVersion{ + mustNewPRVersion("alpha"), + mustNewPRVersion("beta"), + mustNewPRVersion("1"), + }}}, + }, + { + name: "alphanumeric-with-hyphens", + in: []byte(`{"r": "rc-1.build-123"}`), + out: TestStruct{Release: OperatorRelease{Release: []semver.PRVersion{ + mustNewPRVersion("rc-1"), + mustNewPRVersion("build-123"), + }}}, + }, + { + name: "mixed-alphanumeric", + in: []byte(`{"r": "1.2-beta.x86-64"}`), + out: TestStruct{Release: OperatorRelease{Release: []semver.PRVersion{ + mustNewPRVersion("1"), + mustNewPRVersion("2-beta"), + mustNewPRVersion("x86-64"), + }}}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + s := TestStruct{} + err := json.Unmarshal(tt.in, &s) + require.Equal(t, tt.out, s) + require.Equal(t, tt.err, err) + }) + } +} + +func mustNewPRVersion(s string) semver.PRVersion { + v, err := semver.NewPRVersion(s) + if err != nil { + panic(err) + } + return v +} diff --git a/staging/api/pkg/manifests/bundleloader.go b/staging/api/pkg/manifests/bundleloader.go index 397190a6a1..6ed1e4ddf6 100644 --- a/staging/api/pkg/manifests/bundleloader.go +++ b/staging/api/pkg/manifests/bundleloader.go @@ -39,6 +39,7 @@ func (b *bundleLoader) LoadBundle() error { errs = append(errs, b.calculateCompressedBundleSize()) b.addChannelsFromAnnotationsFile() + b.addPackageFromAnnotationsFile() if !b.foundCSV { errs = append(errs, fmt.Errorf("unable to find a csv in bundle directory %s", b.dir)) @@ -68,6 +69,14 @@ func (b *bundleLoader) addChannelsFromAnnotationsFile() { } } +func (b *bundleLoader) addPackageFromAnnotationsFile() { + if b.bundle == nil { + // None of this is relevant if the bundle was not found + return + } + b.bundle.Package = b.annotationsFile.Annotations.PackageName +} + // Compress the bundle to check its size func (b *bundleLoader) calculateCompressedBundleSize() error { if b.bundle == nil { diff --git a/staging/api/pkg/operators/v1alpha1/clusterserviceversion_types.go b/staging/api/pkg/operators/v1alpha1/clusterserviceversion_types.go index 3e6d324803..1efb4323ce 100644 --- a/staging/api/pkg/operators/v1alpha1/clusterserviceversion_types.go +++ b/staging/api/pkg/operators/v1alpha1/clusterserviceversion_types.go @@ -13,6 +13,7 @@ import ( "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/util/intstr" + "github.com/operator-framework/api/pkg/lib/release" "github.com/operator-framework/api/pkg/lib/version" ) @@ -274,8 +275,25 @@ type APIServiceDefinitions struct { // that can manage apps for a given version. // +k8s:openapi-gen=true type ClusterServiceVersionSpec struct { - InstallStrategy NamedInstallStrategy `json:"install"` - Version version.OperatorVersion `json:"version,omitempty"` + InstallStrategy NamedInstallStrategy `json:"install"` + Version version.OperatorVersion `json:"version,omitempty"` + // release specifies the packaging version of the operator, defaulting to empty + // release is optional + // + // A ClusterServiceVersion's release field is used to distinguish between different builds of the same operator version + // This is useful for operators that need to make changes to the CSV which don't affect their functionality, + // for example: + // - to fix a typo in their description + // - to add/amend annotations or labels + // - to amend examples or documentation + // - to produce different builds for different environments + // + // It is up to operator authors to determine the semantics of release versions they use + // for their operator. All release versions must conform to the semver prerelease format + // (dot-separated identifiers containing only alphanumerics and hyphens) and are limited + // to a maximum length of 20 characters. + // +optional + Release release.OperatorRelease `json:"release,omitzero"` Maturity string `json:"maturity,omitempty"` CustomResourceDefinitions CustomResourceDefinitions `json:"customresourcedefinitions,omitempty"` APIServiceDefinitions APIServiceDefinitions `json:"apiservicedefinitions,omitempty"` @@ -595,6 +613,7 @@ type ResourceInstance struct { // +kubebuilder:subresource:status // +kubebuilder:printcolumn:name="Display",type=string,JSONPath=`.spec.displayName`,description="The name of the CSV" // +kubebuilder:printcolumn:name="Version",type=string,JSONPath=`.spec.version`,description="The version of the CSV" +// +kubebuilder:printcolumn:name="Release",type=string,JSONPath=`.spec.release`,description="The release of this version of the CSV" // +kubebuilder:printcolumn:name="Replaces",type=string,JSONPath=`.spec.replaces`,description="The name of a CSV that this one replaces" // +kubebuilder:printcolumn:name="Phase",type=string,JSONPath=`.status.phase` diff --git a/staging/api/pkg/operators/v1alpha1/zz_generated.deepcopy.go b/staging/api/pkg/operators/v1alpha1/zz_generated.deepcopy.go index 684a7432a6..685fa26a31 100644 --- a/staging/api/pkg/operators/v1alpha1/zz_generated.deepcopy.go +++ b/staging/api/pkg/operators/v1alpha1/zz_generated.deepcopy.go @@ -501,6 +501,7 @@ func (in *ClusterServiceVersionSpec) DeepCopyInto(out *ClusterServiceVersionSpec *out = *in in.InstallStrategy.DeepCopyInto(&out.InstallStrategy) in.Version.DeepCopyInto(&out.Version) + in.Release.DeepCopyInto(&out.Release) in.CustomResourceDefinitions.DeepCopyInto(&out.CustomResourceDefinitions) in.APIServiceDefinitions.DeepCopyInto(&out.APIServiceDefinitions) if in.WebhookDefinitions != nil { diff --git a/staging/api/pkg/validation/internal/bundle.go b/staging/api/pkg/validation/internal/bundle.go index 9bb90a04d3..c5f7ba18d5 100644 --- a/staging/api/pkg/validation/internal/bundle.go +++ b/staging/api/pkg/validation/internal/bundle.go @@ -42,9 +42,26 @@ func validateBundle(bundle *manifests.Bundle) (result errors.ManifestResult) { if sizeErrors != nil { result.Add(sizeErrors...) } + nameErrors := validateBundleName(bundle) + if nameErrors != nil { + result.Add(nameErrors...) + } return result } +func validateBundleName(bundle *manifests.Bundle) []errors.Error { + var errs []errors.Error + // bundle naming with a specified release version must follow the pattern + // -v- + if len(bundle.CSV.Spec.Release.Release) > 0 { + expectedName := fmt.Sprintf("%s-v%s-%s", bundle.Package, bundle.CSV.Spec.Version.String(), bundle.CSV.Spec.Release.String()) + if bundle.Name != expectedName { + errs = append(errs, errors.ErrInvalidBundle(fmt.Sprintf("bundle name with release versioning %q does not match expected name %q", bundle.Name, expectedName), bundle.Name)) + } + } + return errs +} + func validateServiceAccounts(bundle *manifests.Bundle) []errors.Error { // get service account names defined in the csv saNamesFromCSV := make(map[string]struct{}, 0) diff --git a/staging/api/pkg/validation/internal/typecheck.go b/staging/api/pkg/validation/internal/typecheck.go index 197ef5de89..c5eafd454f 100644 --- a/staging/api/pkg/validation/internal/typecheck.go +++ b/staging/api/pkg/validation/internal/typecheck.go @@ -28,7 +28,7 @@ func checkEmptyFields(result *errors.ManifestResult, v reflect.Value, parentStru // Omitted field tags will contain ",omitempty", and ignored tags will // match "-" exactly, respectively. - isOptionalField := strings.Contains(tag, ",omitempty") || tag == "-" + isOptionalField := strings.Contains(tag, ",omitempty") || strings.Contains(tag, ",omitzero") || tag == "-" emptyVal := fieldValue.IsZero() newParentStructName := fieldType.Name diff --git a/staging/operator-lifecycle-manager/.github/workflows/e2e-tests.yml b/staging/operator-lifecycle-manager/.github/workflows/e2e-tests.yml index 0b0f0f72dc..1b1aafb15c 100644 --- a/staging/operator-lifecycle-manager/.github/workflows/e2e-tests.yml +++ b/staging/operator-lifecycle-manager/.github/workflows/e2e-tests.yml @@ -17,7 +17,7 @@ jobs: sha: ${{ steps.vars.outputs.sha }} steps: # checkout code and setup go - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-go@v6 with: go-version-file: "go.mod" @@ -27,7 +27,7 @@ jobs: - name: Save image run: docker save quay.io/operator-framework/olm:local -o olm-image.tar - name: Upload Docker image as artifact - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: olm-image.tar path: olm-image.tar @@ -49,14 +49,14 @@ jobs: E2E_KUBECONFIG_ROOT: ${{ github.workspace }}/kubeconfigs steps: # checkout code and setup go - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-go@v6 with: go-version-file: "go.mod" # load the olm image - name: Load OLM Docker image - uses: actions/download-artifact@v6 + uses: actions/download-artifact@v7 with: name: olm-image.tar path: . @@ -103,7 +103,7 @@ jobs: # archive test results - name: Archive Test Artifacts if: ${{ always() }} - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: e2e-test-output-${{ (github.event.pull_request.head.sha || github.sha) }}-${{ github.run_id }}-${{ matrix.parallel-id }} path: ${{ env.ARTIFACT_DIR }}/* @@ -136,14 +136,14 @@ jobs: E2E_KUBECONFIG_ROOT: ${{ github.workspace }}/kubeconfigs steps: # checkout code and setup go - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-go@v6 with: go-version-file: "go.mod" # load the olm image - name: Load OLM Docker image - uses: actions/download-artifact@v6 + uses: actions/download-artifact@v7 with: name: olm-image.tar path: . @@ -186,7 +186,7 @@ jobs: # archive test results - name: Archive Test Artifacts if: ${{ always() }} - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: e2e-test-output-${{ (github.event.pull_request.head.sha || github.sha) }}-${{ github.run_id }}-flakes path: ${{ env.ARTIFACT_DIR }}/* diff --git a/staging/operator-lifecycle-manager/.github/workflows/go-verdiff.yaml b/staging/operator-lifecycle-manager/.github/workflows/go-verdiff.yaml index d608706f45..0eff680626 100644 --- a/staging/operator-lifecycle-manager/.github/workflows/go-verdiff.yaml +++ b/staging/operator-lifecycle-manager/.github/workflows/go-verdiff.yaml @@ -10,7 +10,7 @@ jobs: go-verdiff: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: fetch-depth: 0 - name: Check golang version diff --git a/staging/operator-lifecycle-manager/.github/workflows/goreleaser.yaml b/staging/operator-lifecycle-manager/.github/workflows/goreleaser.yaml index 7448e98a7a..91b6bb8bcc 100644 --- a/staging/operator-lifecycle-manager/.github/workflows/goreleaser.yaml +++ b/staging/operator-lifecycle-manager/.github/workflows/goreleaser.yaml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: fetch-depth: 0 - name: Set up Go diff --git a/staging/operator-lifecycle-manager/.github/workflows/quickstart.yml b/staging/operator-lifecycle-manager/.github/workflows/quickstart.yml index b1f92c4be9..d02555e213 100644 --- a/staging/operator-lifecycle-manager/.github/workflows/quickstart.yml +++ b/staging/operator-lifecycle-manager/.github/workflows/quickstart.yml @@ -8,7 +8,7 @@ jobs: install-quickstart: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - run: | curl -sLo kind "$(curl -sL https://api.github.com/repos/kubernetes-sigs/kind/releases/latest | jq -r '[.assets[] | select(.name == "kind-linux-amd64")] | first | .browser_download_url')" chmod +x kind diff --git a/staging/operator-lifecycle-manager/.github/workflows/sanity.yaml b/staging/operator-lifecycle-manager/.github/workflows/sanity.yaml index 5992bbe8f1..3ce0a3ece7 100644 --- a/staging/operator-lifecycle-manager/.github/workflows/sanity.yaml +++ b/staging/operator-lifecycle-manager/.github/workflows/sanity.yaml @@ -10,7 +10,7 @@ jobs: check-vendor: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-go@v6 with: go-version-file: "go.mod" @@ -19,7 +19,7 @@ jobs: static-analysis: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-go@v6 with: go-version-file: "go.mod" @@ -28,7 +28,7 @@ jobs: verify: 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-lifecycle-manager/.github/workflows/unit.yml b/staging/operator-lifecycle-manager/.github/workflows/unit.yml index 35ad5a2e05..11c1b67e9d 100644 --- a/staging/operator-lifecycle-manager/.github/workflows/unit.yml +++ b/staging/operator-lifecycle-manager/.github/workflows/unit.yml @@ -14,7 +14,7 @@ jobs: github.event_name != 'issue_comment' || startsWith(github.event.comment.body, '/retest 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-lifecycle-manager/Makefile b/staging/operator-lifecycle-manager/Makefile index e1ca9918ee..dc22f4002d 100644 --- a/staging/operator-lifecycle-manager/Makefile +++ b/staging/operator-lifecycle-manager/Makefile @@ -340,11 +340,7 @@ mockgen: #HELP Generate mocks # Consider using counterfeiter:generate directives to speed things up. # See https://github.com/maxbrunsfeld/counterfeiter#step-2b---add-counterfeitergenerate-directives for more information. # Set the "COUNTERFEITER_NO_GENERATE_WARNING" environment variable to suppress this message. - @set -e; \ - overlay_file=$$(mktemp "$(CURDIR)/hack/overlays/goimports_overlay.XXXXXX.json"); \ - trap 'rm -f "$$overlay_file"' EXIT; \ - printf '{\n "Replace": {\n "%s/vendor/golang.org/x/tools/imports/vendorlesspath.go": "%s/hack/overlays/goimports_vendorlesspath.go"\n }\n}\n' "$(CURDIR)" "$(CURDIR)" > "$$overlay_file"; \ - GO111MODULE=on GOWORK=off COUNTERFEITER_NO_GENERATE_WARNING=1 GOFLAGS="$$GOFLAGS -overlay=$$overlay_file" go generate ./pkg/... + GO111MODULE=on GOWORK=off COUNTERFEITER_NO_GENERATE_WARNING=1 go generate ./pkg/... #SECTION Verification 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 b957a9badb..1e81a97169 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 @@ -27,6 +27,10 @@ spec: jsonPath: .spec.version name: Version type: string + - description: The release of this version of the CSV + jsonPath: .spec.release + name: Release + type: string - description: The name of a CSV that this one replaces jsonPath: .spec.replaces name: Replaces @@ -8988,6 +8992,30 @@ spec: type: string name: type: string + release: + description: |- + release specifies the packaging version of the operator, defaulting to empty + release is optional + + A ClusterServiceVersion's release field is used to distinguish between different builds of the same operator version + This is useful for operators that need to make changes to the CSV which don't affect their functionality, + for example: + - to fix a typo in their description + - to add/amend annotations or labels + - to amend examples or documentation + - to produce different builds for different environments + + It is up to operator authors to determine the semantics of release versions they use + for their operator. All release versions must conform to the semver prerelease format + (dot-separated identifiers containing only alphanumerics and hyphens) and are limited + to a maximum length of 20 characters. + type: string + maxLength: 20 + x-kubernetes-validations: + - rule: self.matches('^[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*$') + message: release version must be composed of dot-separated identifiers containing only alphanumerics and hyphens + - rule: '!self.split(''.'').exists(x, x.matches(''^0[0-9]+$''))' + message: numeric identifiers in release version must not have leading zeros replaces: description: The name of a CSV this one replaces. Should match the `metadata.Name` field of the old CSV. type: string diff --git a/staging/operator-lifecycle-manager/go.mod b/staging/operator-lifecycle-manager/go.mod index c70eeb99a2..38b3c3df82 100644 --- a/staging/operator-lifecycle-manager/go.mod +++ b/staging/operator-lifecycle-manager/go.mod @@ -12,42 +12,42 @@ require ( github.com/go-air/gini v1.0.4 github.com/go-logr/logr v1.4.3 github.com/google/go-cmp v0.7.0 - github.com/itchyny/gojq v0.12.17 - github.com/maxbrunsfeld/counterfeiter/v6 v6.12.0 + github.com/itchyny/gojq v0.12.18 + github.com/maxbrunsfeld/counterfeiter/v6 v6.12.1 github.com/mitchellh/hashstructure v1.1.0 github.com/mitchellh/mapstructure v1.5.0 - github.com/onsi/ginkgo/v2 v2.27.2 - github.com/onsi/gomega v1.38.2 + github.com/onsi/ginkgo/v2 v2.27.3 + github.com/onsi/gomega v1.38.3 github.com/openshift/api v0.0.0-20251111193948-50e2ece149d7 github.com/openshift/client-go v0.0.0-20251015124057-db0dee36e235 - github.com/operator-framework/api v0.36.0 + github.com/operator-framework/api v0.37.0 github.com/operator-framework/operator-registry v1.61.0 github.com/otiai10/copy v1.14.1 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.23.2 github.com/prometheus/client_model v0.6.2 - github.com/prometheus/common v0.67.2 + github.com/prometheus/common v0.67.4 github.com/sirupsen/logrus v1.9.3 - github.com/spf13/cobra v1.10.1 + github.com/spf13/cobra v1.10.2 github.com/spf13/pflag v1.0.10 github.com/stretchr/testify v1.11.1 go.podman.io/image/v5 v5.38.0 go.uber.org/mock v0.6.0 - golang.org/x/net v0.47.0 - golang.org/x/sync v0.18.0 + golang.org/x/net v0.48.0 + golang.org/x/sync v0.19.0 golang.org/x/time v0.14.0 - google.golang.org/grpc v1.76.0 + google.golang.org/grpc v1.77.0 gopkg.in/yaml.v2 v2.4.0 - k8s.io/api v0.34.2 - k8s.io/apiextensions-apiserver v0.34.2 - k8s.io/apimachinery v0.34.2 - k8s.io/apiserver v0.34.2 - k8s.io/client-go v0.34.2 - k8s.io/code-generator v0.34.2 - k8s.io/component-base v0.34.2 + k8s.io/api v0.34.3 + k8s.io/apiextensions-apiserver v0.34.3 + k8s.io/apimachinery v0.34.3 + k8s.io/apiserver v0.34.3 + k8s.io/client-go v0.34.3 + k8s.io/code-generator v0.34.3 + k8s.io/component-base v0.34.3 k8s.io/klog v1.0.0 k8s.io/klog/v2 v2.130.1 - k8s.io/kube-aggregator v0.34.2 + k8s.io/kube-aggregator v0.34.3 k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 k8s.io/utils v0.0.0-20251002143259-bc988d571ff4 sigs.k8s.io/controller-runtime v0.22.4 @@ -113,7 +113,7 @@ require ( 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 - github.com/itchyny/timefmt-go v0.1.6 // indirect + github.com/itchyny/timefmt-go v0.1.7 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/compress v1.18.0 // indirect @@ -144,15 +144,15 @@ require ( go.etcd.io/etcd/client/pkg/v3 v3.6.4 // indirect go.etcd.io/etcd/client/v3 v3.6.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/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/otel v1.37.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/metric v1.37.0 // indirect - go.opentelemetry.io/otel/sdk v1.37.0 // indirect - go.opentelemetry.io/otel/trace 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/trace v1.38.0 // indirect go.opentelemetry.io/proto/otlp v1.7.0 // indirect go.podman.io/common v0.66.0 // indirect go.podman.io/storage v1.61.0 // indirect @@ -160,25 +160,25 @@ require ( go.uber.org/zap v1.27.0 // indirect go.yaml.in/yaml/v2 v2.4.3 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/crypto v0.44.0 // indirect + golang.org/x/crypto v0.46.0 // indirect golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b // indirect - golang.org/x/mod v0.29.0 // indirect + golang.org/x/mod v0.30.0 // indirect golang.org/x/oauth2 v0.32.0 // indirect - golang.org/x/sys v0.38.0 // indirect - golang.org/x/term v0.37.0 // indirect - golang.org/x/text v0.31.0 // indirect - golang.org/x/tools v0.38.0 // indirect + golang.org/x/sys v0.39.0 // indirect + golang.org/x/term v0.38.0 // indirect + golang.org/x/text v0.32.0 // indirect + golang.org/x/tools v0.39.0 // indirect 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-20250804133106-a7a43d27e69b // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250804133106-a7a43d27e69b // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251022142026-3a174f9686a8 // indirect google.golang.org/protobuf v1.36.10 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/gengo/v2 v2.0.0-20250604051438-85fd79dbfd9f // indirect - k8s.io/kms v0.34.2 // indirect + k8s.io/kms v0.34.3 // 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-lifecycle-manager/go.sum b/staging/operator-lifecycle-manager/go.sum index 4dff58ab01..430af367f6 100644 --- a/staging/operator-lifecycle-manager/go.sum +++ b/staging/operator-lifecycle-manager/go.sum @@ -32,6 +32,10 @@ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA 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/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/clipperhouse/stringish v0.1.1 h1:+NSqMOr3GR6k1FdRhhnXrLfztGzuG+VuFDfatpWHKCs= +github.com/clipperhouse/stringish v0.1.1/go.mod h1:v/WhFtE1q0ovMta2+m+UbpZ+2/HEXNWYXQgCt4hdOzA= +github.com/clipperhouse/uax29/v2 v2.3.0 h1:SNdx9DVUqMoBuBoW3iLOj4FQv3dN5mDtuqwuhIGpJy4= +github.com/clipperhouse/uax29/v2 v2.3.0/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsVRgg6W7ihQeh4g= 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= @@ -126,8 +130,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-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= @@ -150,8 +154,8 @@ 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.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -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.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/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -225,10 +229,10 @@ github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/itchyny/gojq v0.12.17 h1:8av8eGduDb5+rvEdaOO+zQUjA04MS0m3Ps8HiD+fceg= -github.com/itchyny/gojq v0.12.17/go.mod h1:WBrEMkgAfAGO1LUcGOckBl5O726KPp+OlkKug0I/FEY= -github.com/itchyny/timefmt-go v0.1.6 h1:ia3s54iciXDdzWzwaVKXZPbiXzxxnv1SPGFfM/myJ5Q= -github.com/itchyny/timefmt-go v0.1.6/go.mod h1:RRDZYC5s9ErkjQvTvvU7keJjxUYzIISJGxm9/mAERQg= +github.com/itchyny/gojq v0.12.18 h1:gFGHyt/MLbG9n6dqnvlliiya2TaMMh6FFaR2b1H6Drc= +github.com/itchyny/gojq v0.12.18/go.mod h1:4hPoZ/3lN9fDL1D+aK7DY1f39XZpY9+1Xpjz8atrEkg= +github.com/itchyny/timefmt-go v0.1.7 h1:xyftit9Tbw+Dc/huSSPJaEmX1TVL8lw5vxjJLK4GMMA= +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/joelanford/ignore v0.1.1 h1:vKky5RDoPT+WbONrbQBgOn95VV/UPh4ejlyAbbzgnQk= @@ -266,12 +270,12 @@ github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovk 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.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= -github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +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/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= @@ -304,10 +308,10 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -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.3 h1:ICsZJ8JoYafeXFFlFAG75a7CxMsJHwgKwtO+82SE9L8= +github.com/onsi/ginkgo/v2 v2.27.3/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zwn/ykDRo= +github.com/onsi/gomega v1.38.3 h1:eTX+W6dobAYfFeGC2PV6RwXRu/MyT+cQguijutvkpSM= +github.com/onsi/gomega v1.38.3/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= @@ -318,8 +322,8 @@ github.com/openshift/api v0.0.0-20251111193948-50e2ece149d7 h1:MemawsK6SpxEaE5y0 github.com/openshift/api v0.0.0-20251111193948-50e2ece149d7/go.mod h1:d5uzF0YN2nQQFA0jIEWzzOZ+edmo6wzlGLvx5Fhz4uY= github.com/openshift/client-go v0.0.0-20251015124057-db0dee36e235 h1:9JBeIXmnHlpXTQPi7LPmu1jdxznBhAE7bb1K+3D8gxY= github.com/openshift/client-go v0.0.0-20251015124057-db0dee36e235/go.mod h1:L49W6pfrZkfOE5iC1PqEkuLkXG4W0BX4w8b+L2Bv7fM= -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.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/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8= @@ -338,8 +342,8 @@ github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UH github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.67.2 h1:PcBAckGFTIHt2+L3I33uNRTlKTplNzFctXcWhPyAEN8= -github.com/prometheus/common v0.67.2/go.mod h1:63W3KZb1JOKgcjlIr64WW/LvFGAqKPj0atm+knVGEko= +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.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= github.com/redis/go-redis/extra/rediscmd/v9 v9.10.0 h1:uTiEyEyfLhkw678n6EulHVto8AkcXVr8zUcBJNZ0ark= @@ -348,10 +352,8 @@ github.com/redis/go-redis/extra/redisotel/v9 v9.10.0 h1:4z7/hCJ9Jft8EBb2tDmK38p2 github.com/redis/go-redis/extra/redisotel/v9 v9.10.0/go.mod h1:B0thqLh4hB8MvvcUKSwyP5YiIcCCp8UrQ0cA9gEqyjk= github.com/redis/go-redis/v9 v9.10.0 h1:FxwK3eV8p/CQa0Ch276C7u2d0eNC9kCmAYQ7mCXCzVs= github.com/redis/go-redis/v9 v9.10.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw= -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.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/sclevine/spec v1.4.0 h1:z/Q9idDcay5m5irkZ28M7PtQM4aOISzOpj4bUPkDee8= github.com/sclevine/spec v1.4.0/go.mod h1:LvpgJaFyvQzRvc1kaDs0bulYwzC70PbiYjC4QnFHkOM= @@ -369,8 +371,8 @@ github.com/smallstep/pkcs7 v0.2.1 h1:6Kfzr/QizdIuB6LSv8y1LJdZ3aPSfTNhTLqAx9CTLfA github.com/smallstep/pkcs7 v0.2.1/go.mod h1:RcXHsMfL+BzH8tRhmrF1NkkpebKpq3JEM66cOFxanf0= github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js= github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= -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= @@ -432,8 +434,8 @@ go.etcd.io/raft/v3 v3.6.0 h1:5NtvbDVYpnfZWcIHgGRk9DyzkBIXOi8j+DDp1IcnUWQ= go.etcd.io/raft/v3 v3.6.0/go.mod h1:nLvLevg6+xrVtHUmVaTcTz603gQPHfh7kUAwV6YpfGo= 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= @@ -442,8 +444,8 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.6 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/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= -go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= +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= @@ -468,16 +470,16 @@ 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/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/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.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= @@ -501,8 +503,8 @@ go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU= -golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc= +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= @@ -511,8 +513,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.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= -golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= +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-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -522,8 +524,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 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.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= -golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= +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= @@ -532,8 +534,8 @@ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJ 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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -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-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -541,14 +543,14 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -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.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= -golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= +golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= +golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +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.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= -golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= +golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= +golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= 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= @@ -559,8 +561,8 @@ 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.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= -golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= +golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ= +golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ= golang.org/x/tools/go/expect v0.1.0-deprecated h1:jY2C5HGYR5lqex3gEniOQL0r7Dq5+VGVgY1nudX5lXY= golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY= golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM= @@ -580,17 +582,17 @@ 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-20251022142026-3a174f9686a8 h1:mepRgnBZa07I4TRuomDE4sTIYieg/osKmzIf4USdWS4= +google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8/go.mod h1:fDMmzKV90WSg1NbozdqrE64fkuTv6mlq2zxo9ad+3yo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251022142026-3a174f9686a8 h1:M1rk8KBnUsBDg1oPGHNCxG4vc1f49epmTO7xscSajMk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251022142026-3a174f9686a8/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 v1.77.0 h1:wVVY6/8cGA6vvffn+wWK5ToddbgdU3d8MNENr4evgXM= +google.golang.org/grpc v1.77.0/go.mod h1:z0BY1iVj0q8E1uSQCjL9cppRj+gnZjzDnzV0dHhrNig= 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= @@ -624,30 +626,30 @@ 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.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/code-generator v0.34.2 h1:9bG6jTxmsU3HXE5BNYJTC8AZ1D6hVVfkm8yYSkdkGY0= -k8s.io/code-generator v0.34.2/go.mod h1:dnDDEd6S/z4uZ+PG1aE58ySCi/lR4+qT3a4DddE4/2I= -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/code-generator v0.34.3 h1:6ipJKsJZZ9q21BO8I2jEj4OLN3y8/1n4aihKN0xKmQk= +k8s.io/code-generator v0.34.3/go.mod h1:oW73UPYpGLsbRN8Ozkhd6ZzkF8hzFCiYmvEuWZDroI4= +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/gengo/v2 v2.0.0-20250604051438-85fd79dbfd9f h1:SLb+kxmzfA87x4E4brQzB33VBbT2+x7Zq9ROIHmGn9Q= k8s.io/gengo/v2 v2.0.0-20250604051438-85fd79dbfd9f/go.mod h1:EJykeLsmFC60UQbYJezXkEsG2FLrt0GPNkU5iK5GWxU= k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= -k8s.io/kms v0.34.2 h1:91rj4MDZLyIT9KxG8J5/CcMH666Z88CF/xJQeuPfJc8= -k8s.io/kms v0.34.2/go.mod h1:s1CFkLG7w9eaTYvctOxosx88fl4spqmixnNpys0JAtM= -k8s.io/kube-aggregator v0.34.2 h1:Nn0Vksj67WHBL2x7bJ6vuxL44RbMTK6uRtXX+3vMVJk= -k8s.io/kube-aggregator v0.34.2/go.mod h1:/tp4cc/1p2AvICsS4mjjSJakdrbhcGbRmj0mdHTdR2Q= +k8s.io/kms v0.34.3 h1:QzBOD0sk1bGQVMcZQAHGjtbP1iKZJUyhC6D0I+BTxIE= +k8s.io/kms v0.34.3/go.mod h1:s1CFkLG7w9eaTYvctOxosx88fl4spqmixnNpys0JAtM= +k8s.io/kube-aggregator v0.34.3 h1:rKsZWTD2As4dKuv+zzdJU0uo5H7bFlAEoSucai4mW6M= +k8s.io/kube-aggregator v0.34.3/go.mod h1:d4D8PV2FK4Qlq6u442FSum1tHPhK9tKdKBfH/A3R0I0= k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 h1:Y3gxNAuB0OBLImH611+UDZcmKS3g6CthxToOb37KgwE= k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912/go.mod h1:kdmbQkyfwUagLfXIad1y2TdrjPFWp2Q89B3qkRwf/pQ= k8s.io/utils v0.0.0-20251002143259-bc988d571ff4 h1:SjGebBtkBqHFOli+05xYbK8YF1Dzkbzn+gDM4X9T4Ck= diff --git a/staging/operator-lifecycle-manager/hack/overlays/goimports_vendorlesspath.go b/staging/operator-lifecycle-manager/hack/overlays/goimports_vendorlesspath.go deleted file mode 100644 index 4d1ab99221..0000000000 --- a/staging/operator-lifecycle-manager/hack/overlays/goimports_vendorlesspath.go +++ /dev/null @@ -1,14 +0,0 @@ -package imports - -import "strings" - -// VendorlessPath returns ipath with any vendor prefixes trimmed. -func VendorlessPath(ipath string) string { - if i := strings.LastIndex(ipath, "/vendor/"); i >= 0 { - return ipath[i+len("/vendor/"):] - } - if strings.HasPrefix(ipath, "vendor/") { - return ipath[len("vendor/"):] - } - return ipath -} diff --git a/staging/operator-lifecycle-manager/pkg/package-server/client/openapi/zz_generated.openapi.go b/staging/operator-lifecycle-manager/pkg/package-server/client/openapi/zz_generated.openapi.go index 993cbf55da..8caeb4aa8b 100644 --- a/staging/operator-lifecycle-manager/pkg/package-server/client/openapi/zz_generated.openapi.go +++ b/staging/operator-lifecycle-manager/pkg/package-server/client/openapi/zz_generated.openapi.go @@ -629,6 +629,12 @@ func schema_api_pkg_operators_v1alpha1_ClusterServiceVersionSpec(ref common.Refe Ref: ref("github.com/operator-framework/api/pkg/lib/version.OperatorVersion"), }, }, + "release": { + SchemaProps: spec.SchemaProps{ + Description: "release specifies the packaging version of the operator, defaulting to empty release is optional\n\nA ClusterServiceVersion's release field is used to distinguish between different builds of the same operator version This is useful for operators that need to make changes to the CSV which don't affect their functionality, for example: - to fix a typo in their description - to add/amend annotations or labels - to amend examples or documentation - to produce different builds for different environments\n\nIt is up to operator authors to determine the semantics of release versions they use for their operator. All release versions must conform to the semver prerelease format (dot-separated identifiers containing only alphanumerics and hyphens) and are limited to a maximum length of 20 characters.", + Ref: ref("github.com/operator-framework/api/pkg/lib/release.OperatorRelease"), + }, + }, "maturity": { SchemaProps: spec.SchemaProps{ Type: []string{"string"}, @@ -858,7 +864,7 @@ func schema_api_pkg_operators_v1alpha1_ClusterServiceVersionSpec(ref common.Refe }, }, Dependencies: []string{ - "github.com/operator-framework/api/pkg/lib/version.OperatorVersion", "github.com/operator-framework/api/pkg/operators/v1alpha1.APIServiceDefinitions", "github.com/operator-framework/api/pkg/operators/v1alpha1.AppLink", "github.com/operator-framework/api/pkg/operators/v1alpha1.CleanupSpec", "github.com/operator-framework/api/pkg/operators/v1alpha1.CustomResourceDefinitions", "github.com/operator-framework/api/pkg/operators/v1alpha1.Icon", "github.com/operator-framework/api/pkg/operators/v1alpha1.InstallMode", "github.com/operator-framework/api/pkg/operators/v1alpha1.Maintainer", "github.com/operator-framework/api/pkg/operators/v1alpha1.NamedInstallStrategy", "github.com/operator-framework/api/pkg/operators/v1alpha1.RelatedImage", "github.com/operator-framework/api/pkg/operators/v1alpha1.WebhookDescription", "k8s.io/apimachinery/pkg/apis/meta/v1.GroupVersionKind", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + "github.com/operator-framework/api/pkg/lib/release.OperatorRelease", "github.com/operator-framework/api/pkg/lib/version.OperatorVersion", "github.com/operator-framework/api/pkg/operators/v1alpha1.APIServiceDefinitions", "github.com/operator-framework/api/pkg/operators/v1alpha1.AppLink", "github.com/operator-framework/api/pkg/operators/v1alpha1.CleanupSpec", "github.com/operator-framework/api/pkg/operators/v1alpha1.CustomResourceDefinitions", "github.com/operator-framework/api/pkg/operators/v1alpha1.Icon", "github.com/operator-framework/api/pkg/operators/v1alpha1.InstallMode", "github.com/operator-framework/api/pkg/operators/v1alpha1.Maintainer", "github.com/operator-framework/api/pkg/operators/v1alpha1.NamedInstallStrategy", "github.com/operator-framework/api/pkg/operators/v1alpha1.RelatedImage", "github.com/operator-framework/api/pkg/operators/v1alpha1.WebhookDescription", "k8s.io/apimachinery/pkg/apis/meta/v1.GroupVersionKind", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, } } diff --git a/staging/operator-lifecycle-manager/test/e2e/catalog_e2e_test.go b/staging/operator-lifecycle-manager/test/e2e/catalog_e2e_test.go index 78a8f20fdd..5ed3181460 100644 --- a/staging/operator-lifecycle-manager/test/e2e/catalog_e2e_test.go +++ b/staging/operator-lifecycle-manager/test/e2e/catalog_e2e_test.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "k8s.io/apimachinery/pkg/util/intstr" "net" @@ -1169,6 +1170,10 @@ var _ = Describe("Starting CatalogSource e2e tests", Label("CatalogSource"), fun } for _, pod := range podList.Items { + // Ignore terminating pods + if pod.DeletionTimestamp != nil { + continue + } ctx.Ctx().Logf("old image id %s\n new image id %s\n", registryPod.Items[0].Status.ContainerStatuses[0].ImageID, pod.Status.ContainerStatuses[0].ImageID) if pod.Status.ContainerStatuses[0].ImageID != registryPod.Items[0].Status.ContainerStatuses[0].ImageID { @@ -1194,10 +1199,11 @@ var _ = Describe("Starting CatalogSource e2e tests", Label("CatalogSource"), fun return false } By("await new catalog source and ensure old one was deleted") + // the required check for ensuring there's a non-terminating pod with the new image is covered in the podCheckFunc registryPods, err = awaitPodsWithInterval(GinkgoT(), c, source.GetNamespace(), selector.String(), 30*time.Second, 10*time.Minute, podCheckFunc) Expect(err).ShouldNot(HaveOccurred(), "error awaiting registry pod") Expect(registryPods).ShouldNot(BeNil(), "nil registry pods") - Expect(registryPods.Items).To(HaveLen(1), "unexpected number of registry pods found") + Expect(registryPods.Items).ToNot(BeEmpty(), "no registry pods found") By("update catalog source with annotation (to kick resync)") Eventually(func() error { diff --git a/vendor/github.com/clipperhouse/stringish/.gitignore b/vendor/github.com/clipperhouse/stringish/.gitignore new file mode 100644 index 0000000000..12fbfb739b --- /dev/null +++ b/vendor/github.com/clipperhouse/stringish/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +*.test diff --git a/vendor/github.com/rivo/uniseg/LICENSE.txt b/vendor/github.com/clipperhouse/stringish/LICENSE similarity index 96% rename from vendor/github.com/rivo/uniseg/LICENSE.txt rename to vendor/github.com/clipperhouse/stringish/LICENSE index 5040f1ef80..4b8064eb37 100644 --- a/vendor/github.com/rivo/uniseg/LICENSE.txt +++ b/vendor/github.com/clipperhouse/stringish/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Oliver Kuederle +Copyright (c) 2025 Matt Sherman 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/github.com/clipperhouse/stringish/README.md b/vendor/github.com/clipperhouse/stringish/README.md new file mode 100644 index 0000000000..fa1f7cc672 --- /dev/null +++ b/vendor/github.com/clipperhouse/stringish/README.md @@ -0,0 +1,64 @@ +# stringish + +A small Go module that provides a generic type constraint for “string-like” +data, and a utf8 package that works with both strings and byte slices +without conversions. + +```go +type Interface interface { + ~[]byte | ~string +} +``` + +[![Go Reference](https://pkg.go.dev/badge/github.com/clipperhouse/stringish/utf8.svg)](https://pkg.go.dev/github.com/clipperhouse/stringish/utf8) +[![Test Status](https://github.com/clipperhouse/stringish/actions/workflows/gotest.yml/badge.svg)](https://github.com/clipperhouse/stringish/actions/workflows/gotest.yml) + +## Install + +``` +go get github.com/clipperhouse/stringish +``` + +## Examples + +```go +import ( + "github.com/clipperhouse/stringish" + "github.com/clipperhouse/stringish/utf8" +) + +s := "Hello, 世界" +r, size := utf8.DecodeRune(s) // not DecodeRuneInString 🎉 + +b := []byte("Hello, 世界") +r, size = utf8.DecodeRune(b) // same API! + +func MyFoo[T stringish.Interface](s T) T { + // pass a string or a []byte + // iterate, slice, transform, whatever +} +``` + +## Motivation + +Sometimes we want APIs to accept `string` or `[]byte` without having to convert +between those types. That conversion usually allocates! + +By implementing with `stringish.Interface`, we can have a single API, and +single implementation for both types: one `Foo` instead of `Foo` and +`FooString`. + +We have converted the +[`unicode/utf8` package](https://github.com/clipperhouse/stringish/blob/main/utf8/utf8.go) +as an example -- note the absence of`*InString` funcs. We might look at `x/text` +next. + +## Used by + +- clipperhouse/uax29: [stringish trie](https://github.com/clipperhouse/uax29/blob/master/graphemes/trie.go#L27), [stringish iterator](https://github.com/clipperhouse/uax29/blob/master/internal/iterators/iterator.go#L9), [stringish SplitFunc](https://github.com/clipperhouse/uax29/blob/master/graphemes/splitfunc.go#L21) + +- [clipperhouse/displaywidth](https://github.com/clipperhouse/displaywidth) + +## Prior discussion + +- [Consideration of similar by the Go team](https://github.com/golang/go/issues/48643) diff --git a/vendor/github.com/clipperhouse/stringish/interface.go b/vendor/github.com/clipperhouse/stringish/interface.go new file mode 100644 index 0000000000..adfeab61eb --- /dev/null +++ b/vendor/github.com/clipperhouse/stringish/interface.go @@ -0,0 +1,5 @@ +package stringish + +type Interface interface { + ~[]byte | ~string +} diff --git a/vendor/github.com/clipperhouse/uax29/v2/LICENSE b/vendor/github.com/clipperhouse/uax29/v2/LICENSE new file mode 100644 index 0000000000..6ae86a9a19 --- /dev/null +++ b/vendor/github.com/clipperhouse/uax29/v2/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matt Sherman + +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/clipperhouse/uax29/v2/graphemes/README.md b/vendor/github.com/clipperhouse/uax29/v2/graphemes/README.md new file mode 100644 index 0000000000..dc14d11e2f --- /dev/null +++ b/vendor/github.com/clipperhouse/uax29/v2/graphemes/README.md @@ -0,0 +1,94 @@ +An implementation of grapheme cluster boundaries from [Unicode text segmentation](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries) (UAX 29), for Unicode version 15.0.0. + +[![Documentation](https://pkg.go.dev/badge/github.com/clipperhouse/uax29/v2/graphemes.svg)](https://pkg.go.dev/github.com/clipperhouse/uax29/v2/graphemes) +![Tests](https://github.com/clipperhouse/uax29/actions/workflows/gotest.yml/badge.svg) +![Fuzz](https://github.com/clipperhouse/uax29/actions/workflows/gofuzz.yml/badge.svg) + +## Quick start + +``` +go get "github.com/clipperhouse/uax29/v2/graphemes" +``` + +```go +import "github.com/clipperhouse/uax29/v2/graphemes" + +text := "Hello, 世界. Nice dog! 👍🐶" + +tokens := graphemes.FromString(text) + +for tokens.Next() { // Next() returns true until end of data + fmt.Println(tokens.Value()) // Do something with the current grapheme +} +``` + +_A grapheme is a “single visible character”, which might be a simple as a single letter, or a complex emoji that consists of several Unicode code points._ + +## Conformance + +We use the Unicode [test suite](https://unicode.org/reports/tr41/tr41-26.html#Tests29). + +![Tests](https://github.com/clipperhouse/uax29/actions/workflows/gotest.yml/badge.svg) +![Fuzz](https://github.com/clipperhouse/uax29/actions/workflows/gofuzz.yml/badge.svg) + +## APIs + +### If you have a `string` + +```go +text := "Hello, 世界. Nice dog! 👍🐶" + +tokens := graphemes.FromString(text) + +for tokens.Next() { // Next() returns true until end of data + fmt.Println(tokens.Value()) // Do something with the current grapheme +} +``` + +### If you have an `io.Reader` + +`FromReader` embeds a [`bufio.Scanner`](https://pkg.go.dev/bufio#Scanner), so just use those methods. + +```go +r := getYourReader() // from a file or network maybe +tokens := graphemes.FromReader(r) + +for tokens.Scan() { // Scan() returns true until error or EOF + fmt.Println(tokens.Text()) // Do something with the current grapheme +} + +if tokens.Err() != nil { // Check the error + log.Fatal(tokens.Err()) +} +``` + +### If you have a `[]byte` + +```go +b := []byte("Hello, 世界. Nice dog! 👍🐶") + +tokens := graphemes.FromBytes(b) + +for tokens.Next() { // Next() returns true until end of data + fmt.Println(tokens.Value()) // Do something with the current grapheme +} +``` + +### Benchmarks + +On a Mac M2 laptop, we see around 200MB/s, or around 100 million graphemes per second, and no allocations. + +``` +goos: darwin +goarch: arm64 +pkg: github.com/clipperhouse/uax29/graphemes/comparative +cpu: Apple M2 +BenchmarkGraphemes/clipperhouse/uax29-8 173805 ns/op 201.16 MB/s 0 B/op 0 allocs/op +BenchmarkGraphemes/rivo/uniseg-8 2045128 ns/op 17.10 MB/s 0 B/op 0 allocs/op +``` + +### Invalid inputs + +Invalid UTF-8 input is considered undefined behavior. We test to ensure that bad inputs will not cause pathological outcomes, such as a panic or infinite loop. Callers should expect “garbage-in, garbage-out”. + +Your pipeline should probably include a call to [`utf8.Valid()`](https://pkg.go.dev/unicode/utf8#Valid). diff --git a/vendor/github.com/clipperhouse/uax29/v2/graphemes/iterator.go b/vendor/github.com/clipperhouse/uax29/v2/graphemes/iterator.go new file mode 100644 index 0000000000..1eaaa534ce --- /dev/null +++ b/vendor/github.com/clipperhouse/uax29/v2/graphemes/iterator.go @@ -0,0 +1,31 @@ +package graphemes + +import ( + "github.com/clipperhouse/stringish" + "github.com/clipperhouse/uax29/v2/internal/iterators" +) + +type Iterator[T stringish.Interface] struct { + *iterators.Iterator[T] +} + +var ( + splitFuncString = splitFunc[string] + splitFuncBytes = splitFunc[[]byte] +) + +// FromString returns an iterator for the grapheme clusters in the input string. +// Iterate while Next() is true, and access the grapheme via Value(). +func FromString(s string) Iterator[string] { + return Iterator[string]{ + iterators.New(splitFuncString, s), + } +} + +// FromBytes returns an iterator for the grapheme clusters in the input bytes. +// Iterate while Next() is true, and access the grapheme via Value(). +func FromBytes(b []byte) Iterator[[]byte] { + return Iterator[[]byte]{ + iterators.New(splitFuncBytes, b), + } +} diff --git a/vendor/github.com/clipperhouse/uax29/v2/graphemes/reader.go b/vendor/github.com/clipperhouse/uax29/v2/graphemes/reader.go new file mode 100644 index 0000000000..9aa0066183 --- /dev/null +++ b/vendor/github.com/clipperhouse/uax29/v2/graphemes/reader.go @@ -0,0 +1,25 @@ +// Package graphemes implements Unicode grapheme cluster boundaries: https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries +package graphemes + +import ( + "bufio" + "io" +) + +type Scanner struct { + *bufio.Scanner +} + +// FromReader returns a Scanner, to split graphemes per +// https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries. +// +// It embeds a [bufio.Scanner], so you can use its methods. +// +// Iterate through graphemes by calling Scan() until false, then check Err(). +func FromReader(r io.Reader) *Scanner { + sc := bufio.NewScanner(r) + sc.Split(SplitFunc) + return &Scanner{ + Scanner: sc, + } +} diff --git a/vendor/github.com/clipperhouse/uax29/v2/graphemes/splitfunc.go b/vendor/github.com/clipperhouse/uax29/v2/graphemes/splitfunc.go new file mode 100644 index 0000000000..cbe1ec9ef1 --- /dev/null +++ b/vendor/github.com/clipperhouse/uax29/v2/graphemes/splitfunc.go @@ -0,0 +1,174 @@ +package graphemes + +import ( + "bufio" + + "github.com/clipperhouse/stringish" +) + +// is determines if lookup intersects propert(ies) +func (lookup property) is(properties property) bool { + return (lookup & properties) != 0 +} + +const _Ignore = _Extend + +// SplitFunc is a bufio.SplitFunc implementation of Unicode grapheme cluster segmentation, for use with bufio.Scanner. +// +// See https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries. +var SplitFunc bufio.SplitFunc = splitFunc[[]byte] + +func splitFunc[T stringish.Interface](data T, atEOF bool) (advance int, token T, err error) { + var empty T + if len(data) == 0 { + return 0, empty, nil + } + + // These vars are stateful across loop iterations + var pos int + var lastExIgnore property = 0 // "last excluding ignored categories" + var lastLastExIgnore property = 0 // "last one before that" + var regionalIndicatorCount int + + // Rules are usually of the form Cat1 × Cat2; "current" refers to the first property + // to the right of the ×, from which we look back or forward + + current, w := lookup(data[pos:]) + if w == 0 { + if !atEOF { + // Rune extends past current data, request more + return 0, empty, nil + } + pos = len(data) + return pos, data[:pos], nil + } + + // https://unicode.org/reports/tr29/#GB1 + // Start of text always advances + pos += w + + for { + eot := pos == len(data) // "end of text" + + if eot { + if !atEOF { + // Token extends past current data, request more + return 0, empty, nil + } + + // https://unicode.org/reports/tr29/#GB2 + break + } + + /* + We've switched the evaluation order of GB1↓ and GB2↑. It's ok: + because we've checked for len(data) at the top of this function, + sot and eot are mutually exclusive, order doesn't matter. + */ + + // Rules are usually of the form Cat1 × Cat2; "current" refers to the first property + // to the right of the ×, from which we look back or forward + + // Remember previous properties to avoid lookups/lookbacks + last := current + if !last.is(_Ignore) { + lastLastExIgnore = lastExIgnore + lastExIgnore = last + } + + current, w = lookup(data[pos:]) + if w == 0 { + if atEOF { + // Just return the bytes, we can't do anything with them + pos = len(data) + break + } + // Rune extends past current data, request more + return 0, empty, nil + } + + // Optimization: no rule can possibly apply + if current|last == 0 { // i.e. both are zero + break + } + + // https://unicode.org/reports/tr29/#GB3 + if current.is(_LF) && last.is(_CR) { + pos += w + continue + } + + // https://unicode.org/reports/tr29/#GB4 + // https://unicode.org/reports/tr29/#GB5 + if (current | last).is(_Control | _CR | _LF) { + break + } + + // https://unicode.org/reports/tr29/#GB6 + if current.is(_L|_V|_LV|_LVT) && last.is(_L) { + pos += w + continue + } + + // https://unicode.org/reports/tr29/#GB7 + if current.is(_V|_T) && last.is(_LV|_V) { + pos += w + continue + } + + // https://unicode.org/reports/tr29/#GB8 + if current.is(_T) && last.is(_LVT|_T) { + pos += w + continue + } + + // https://unicode.org/reports/tr29/#GB9 + if current.is(_Extend | _ZWJ) { + pos += w + continue + } + + // https://unicode.org/reports/tr29/#GB9a + if current.is(_SpacingMark) { + pos += w + continue + } + + // https://unicode.org/reports/tr29/#GB9b + if last.is(_Prepend) { + pos += w + continue + } + + // https://unicode.org/reports/tr29/#GB9c + // TODO(clipperhouse): + // It appears to be added in Unicode 15.1.0: + // https://unicode.org/versions/Unicode15.1.0/#Migration + // This package currently supports Unicode 15.0.0, so + // out of scope for now + + // https://unicode.org/reports/tr29/#GB11 + if current.is(_ExtendedPictographic) && last.is(_ZWJ) && lastLastExIgnore.is(_ExtendedPictographic) { + pos += w + continue + } + + // https://unicode.org/reports/tr29/#GB12 + // https://unicode.org/reports/tr29/#GB13 + if (current & last).is(_RegionalIndicator) { + regionalIndicatorCount++ + + odd := regionalIndicatorCount%2 == 1 + if odd { + pos += w + continue + } + } + + // If we fall through all the above rules, it's a grapheme cluster break + break + } + + // Return token + return pos, data[:pos], nil +} diff --git a/vendor/github.com/clipperhouse/uax29/v2/graphemes/trie.go b/vendor/github.com/clipperhouse/uax29/v2/graphemes/trie.go new file mode 100644 index 0000000000..8aaabfacf0 --- /dev/null +++ b/vendor/github.com/clipperhouse/uax29/v2/graphemes/trie.go @@ -0,0 +1,1409 @@ +package graphemes + +import "github.com/clipperhouse/stringish" + +// generated by github.com/clipperhouse/uax29/v2 +// from https://www.unicode.org/Public/15.0.0/ucd/auxiliary/GraphemeBreakProperty.txt + +type property uint16 + +const ( + _CR property = 1 << iota + _Control + _Extend + _ExtendedPictographic + _L + _LF + _LV + _LVT + _Prepend + _RegionalIndicator + _SpacingMark + _T + _V + _ZWJ +) + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func lookup[T stringish.Interface](s T) (v property, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return graphemesValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := graphemesIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := graphemesIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = graphemesIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := graphemesIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = graphemesIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = graphemesIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// graphemesTrie. Total size: 29120 bytes (28.44 KiB). Checksum: 80ad0c5ab9375f7. +// type graphemesTrie struct { } + +// func newGraphemesTrie(i int) *graphemesTrie { +// return &graphemesTrie{} +// } + +// lookupValue determines the type of block n and looks up the value for b. +func lookupValue(n uint32, b byte) property { + switch { + default: + return property(graphemesValues[n<<6+uint32(b)]) + } +} + +// graphemesValues: 215 blocks, 13760 entries, 27520 bytes +// The third block is the zero block. +var graphemesValues = [13760]property{ + // Block 0x0, offset 0x0 + 0x00: 0x0002, 0x01: 0x0002, 0x02: 0x0002, 0x03: 0x0002, 0x04: 0x0002, 0x05: 0x0002, + 0x06: 0x0002, 0x07: 0x0002, 0x08: 0x0002, 0x09: 0x0002, 0x0a: 0x0020, 0x0b: 0x0002, + 0x0c: 0x0002, 0x0d: 0x0001, 0x0e: 0x0002, 0x0f: 0x0002, 0x10: 0x0002, 0x11: 0x0002, + 0x12: 0x0002, 0x13: 0x0002, 0x14: 0x0002, 0x15: 0x0002, 0x16: 0x0002, 0x17: 0x0002, + 0x18: 0x0002, 0x19: 0x0002, 0x1a: 0x0002, 0x1b: 0x0002, 0x1c: 0x0002, 0x1d: 0x0002, + 0x1e: 0x0002, 0x1f: 0x0002, + // Block 0x1, offset 0x40 + 0x7f: 0x0002, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x0002, 0xc1: 0x0002, 0xc2: 0x0002, 0xc3: 0x0002, 0xc4: 0x0002, 0xc5: 0x0002, + 0xc6: 0x0002, 0xc7: 0x0002, 0xc8: 0x0002, 0xc9: 0x0002, 0xca: 0x0002, 0xcb: 0x0002, + 0xcc: 0x0002, 0xcd: 0x0002, 0xce: 0x0002, 0xcf: 0x0002, 0xd0: 0x0002, 0xd1: 0x0002, + 0xd2: 0x0002, 0xd3: 0x0002, 0xd4: 0x0002, 0xd5: 0x0002, 0xd6: 0x0002, 0xd7: 0x0002, + 0xd8: 0x0002, 0xd9: 0x0002, 0xda: 0x0002, 0xdb: 0x0002, 0xdc: 0x0002, 0xdd: 0x0002, + 0xde: 0x0002, 0xdf: 0x0002, + 0xe9: 0x0008, + 0xed: 0x0002, 0xee: 0x0008, + // Block 0x4, offset 0x100 + 0x100: 0x0004, 0x101: 0x0004, 0x102: 0x0004, 0x103: 0x0004, 0x104: 0x0004, 0x105: 0x0004, + 0x106: 0x0004, 0x107: 0x0004, 0x108: 0x0004, 0x109: 0x0004, 0x10a: 0x0004, 0x10b: 0x0004, + 0x10c: 0x0004, 0x10d: 0x0004, 0x10e: 0x0004, 0x10f: 0x0004, 0x110: 0x0004, 0x111: 0x0004, + 0x112: 0x0004, 0x113: 0x0004, 0x114: 0x0004, 0x115: 0x0004, 0x116: 0x0004, 0x117: 0x0004, + 0x118: 0x0004, 0x119: 0x0004, 0x11a: 0x0004, 0x11b: 0x0004, 0x11c: 0x0004, 0x11d: 0x0004, + 0x11e: 0x0004, 0x11f: 0x0004, 0x120: 0x0004, 0x121: 0x0004, 0x122: 0x0004, 0x123: 0x0004, + 0x124: 0x0004, 0x125: 0x0004, 0x126: 0x0004, 0x127: 0x0004, 0x128: 0x0004, 0x129: 0x0004, + 0x12a: 0x0004, 0x12b: 0x0004, 0x12c: 0x0004, 0x12d: 0x0004, 0x12e: 0x0004, 0x12f: 0x0004, + 0x130: 0x0004, 0x131: 0x0004, 0x132: 0x0004, 0x133: 0x0004, 0x134: 0x0004, 0x135: 0x0004, + 0x136: 0x0004, 0x137: 0x0004, 0x138: 0x0004, 0x139: 0x0004, 0x13a: 0x0004, 0x13b: 0x0004, + 0x13c: 0x0004, 0x13d: 0x0004, 0x13e: 0x0004, 0x13f: 0x0004, + // Block 0x5, offset 0x140 + 0x140: 0x0004, 0x141: 0x0004, 0x142: 0x0004, 0x143: 0x0004, 0x144: 0x0004, 0x145: 0x0004, + 0x146: 0x0004, 0x147: 0x0004, 0x148: 0x0004, 0x149: 0x0004, 0x14a: 0x0004, 0x14b: 0x0004, + 0x14c: 0x0004, 0x14d: 0x0004, 0x14e: 0x0004, 0x14f: 0x0004, 0x150: 0x0004, 0x151: 0x0004, + 0x152: 0x0004, 0x153: 0x0004, 0x154: 0x0004, 0x155: 0x0004, 0x156: 0x0004, 0x157: 0x0004, + 0x158: 0x0004, 0x159: 0x0004, 0x15a: 0x0004, 0x15b: 0x0004, 0x15c: 0x0004, 0x15d: 0x0004, + 0x15e: 0x0004, 0x15f: 0x0004, 0x160: 0x0004, 0x161: 0x0004, 0x162: 0x0004, 0x163: 0x0004, + 0x164: 0x0004, 0x165: 0x0004, 0x166: 0x0004, 0x167: 0x0004, 0x168: 0x0004, 0x169: 0x0004, + 0x16a: 0x0004, 0x16b: 0x0004, 0x16c: 0x0004, 0x16d: 0x0004, 0x16e: 0x0004, 0x16f: 0x0004, + // Block 0x6, offset 0x180 + 0x183: 0x0004, 0x184: 0x0004, 0x185: 0x0004, + 0x186: 0x0004, 0x187: 0x0004, 0x188: 0x0004, 0x189: 0x0004, + // Block 0x7, offset 0x1c0 + 0x1d1: 0x0004, + 0x1d2: 0x0004, 0x1d3: 0x0004, 0x1d4: 0x0004, 0x1d5: 0x0004, 0x1d6: 0x0004, 0x1d7: 0x0004, + 0x1d8: 0x0004, 0x1d9: 0x0004, 0x1da: 0x0004, 0x1db: 0x0004, 0x1dc: 0x0004, 0x1dd: 0x0004, + 0x1de: 0x0004, 0x1df: 0x0004, 0x1e0: 0x0004, 0x1e1: 0x0004, 0x1e2: 0x0004, 0x1e3: 0x0004, + 0x1e4: 0x0004, 0x1e5: 0x0004, 0x1e6: 0x0004, 0x1e7: 0x0004, 0x1e8: 0x0004, 0x1e9: 0x0004, + 0x1ea: 0x0004, 0x1eb: 0x0004, 0x1ec: 0x0004, 0x1ed: 0x0004, 0x1ee: 0x0004, 0x1ef: 0x0004, + 0x1f0: 0x0004, 0x1f1: 0x0004, 0x1f2: 0x0004, 0x1f3: 0x0004, 0x1f4: 0x0004, 0x1f5: 0x0004, + 0x1f6: 0x0004, 0x1f7: 0x0004, 0x1f8: 0x0004, 0x1f9: 0x0004, 0x1fa: 0x0004, 0x1fb: 0x0004, + 0x1fc: 0x0004, 0x1fd: 0x0004, 0x1ff: 0x0004, + // Block 0x8, offset 0x200 + 0x201: 0x0004, 0x202: 0x0004, 0x204: 0x0004, 0x205: 0x0004, + 0x207: 0x0004, + // Block 0x9, offset 0x240 + 0x240: 0x0100, 0x241: 0x0100, 0x242: 0x0100, 0x243: 0x0100, 0x244: 0x0100, 0x245: 0x0100, + 0x250: 0x0004, 0x251: 0x0004, + 0x252: 0x0004, 0x253: 0x0004, 0x254: 0x0004, 0x255: 0x0004, 0x256: 0x0004, 0x257: 0x0004, + 0x258: 0x0004, 0x259: 0x0004, 0x25a: 0x0004, 0x25c: 0x0002, + // Block 0xa, offset 0x280 + 0x28b: 0x0004, + 0x28c: 0x0004, 0x28d: 0x0004, 0x28e: 0x0004, 0x28f: 0x0004, 0x290: 0x0004, 0x291: 0x0004, + 0x292: 0x0004, 0x293: 0x0004, 0x294: 0x0004, 0x295: 0x0004, 0x296: 0x0004, 0x297: 0x0004, + 0x298: 0x0004, 0x299: 0x0004, 0x29a: 0x0004, 0x29b: 0x0004, 0x29c: 0x0004, 0x29d: 0x0004, + 0x29e: 0x0004, 0x29f: 0x0004, + 0x2b0: 0x0004, + // Block 0xb, offset 0x2c0 + 0x2d6: 0x0004, 0x2d7: 0x0004, + 0x2d8: 0x0004, 0x2d9: 0x0004, 0x2da: 0x0004, 0x2db: 0x0004, 0x2dc: 0x0004, 0x2dd: 0x0100, + 0x2df: 0x0004, 0x2e0: 0x0004, 0x2e1: 0x0004, 0x2e2: 0x0004, 0x2e3: 0x0004, + 0x2e4: 0x0004, 0x2e7: 0x0004, 0x2e8: 0x0004, + 0x2ea: 0x0004, 0x2eb: 0x0004, 0x2ec: 0x0004, 0x2ed: 0x0004, + // Block 0xc, offset 0x300 + 0x30f: 0x0100, 0x311: 0x0004, + 0x330: 0x0004, 0x331: 0x0004, 0x332: 0x0004, 0x333: 0x0004, 0x334: 0x0004, 0x335: 0x0004, + 0x336: 0x0004, 0x337: 0x0004, 0x338: 0x0004, 0x339: 0x0004, 0x33a: 0x0004, 0x33b: 0x0004, + 0x33c: 0x0004, 0x33d: 0x0004, 0x33e: 0x0004, 0x33f: 0x0004, + // Block 0xd, offset 0x340 + 0x340: 0x0004, 0x341: 0x0004, 0x342: 0x0004, 0x343: 0x0004, 0x344: 0x0004, 0x345: 0x0004, + 0x346: 0x0004, 0x347: 0x0004, 0x348: 0x0004, 0x349: 0x0004, 0x34a: 0x0004, + // Block 0xe, offset 0x380 + 0x3a6: 0x0004, 0x3a7: 0x0004, 0x3a8: 0x0004, 0x3a9: 0x0004, + 0x3aa: 0x0004, 0x3ab: 0x0004, 0x3ac: 0x0004, 0x3ad: 0x0004, 0x3ae: 0x0004, 0x3af: 0x0004, + 0x3b0: 0x0004, + // Block 0xf, offset 0x3c0 + 0x3eb: 0x0004, 0x3ec: 0x0004, 0x3ed: 0x0004, 0x3ee: 0x0004, 0x3ef: 0x0004, + 0x3f0: 0x0004, 0x3f1: 0x0004, 0x3f2: 0x0004, 0x3f3: 0x0004, + 0x3fd: 0x0004, + // Block 0x10, offset 0x400 + 0x416: 0x0004, 0x417: 0x0004, + 0x418: 0x0004, 0x419: 0x0004, 0x41b: 0x0004, 0x41c: 0x0004, 0x41d: 0x0004, + 0x41e: 0x0004, 0x41f: 0x0004, 0x420: 0x0004, 0x421: 0x0004, 0x422: 0x0004, 0x423: 0x0004, + 0x425: 0x0004, 0x426: 0x0004, 0x427: 0x0004, 0x429: 0x0004, + 0x42a: 0x0004, 0x42b: 0x0004, 0x42c: 0x0004, 0x42d: 0x0004, + // Block 0x11, offset 0x440 + 0x459: 0x0004, 0x45a: 0x0004, 0x45b: 0x0004, + // Block 0x12, offset 0x480 + 0x490: 0x0100, 0x491: 0x0100, + 0x498: 0x0004, 0x499: 0x0004, 0x49a: 0x0004, 0x49b: 0x0004, 0x49c: 0x0004, 0x49d: 0x0004, + 0x49e: 0x0004, 0x49f: 0x0004, + // Block 0x13, offset 0x4c0 + 0x4ca: 0x0004, 0x4cb: 0x0004, + 0x4cc: 0x0004, 0x4cd: 0x0004, 0x4ce: 0x0004, 0x4cf: 0x0004, 0x4d0: 0x0004, 0x4d1: 0x0004, + 0x4d2: 0x0004, 0x4d3: 0x0004, 0x4d4: 0x0004, 0x4d5: 0x0004, 0x4d6: 0x0004, 0x4d7: 0x0004, + 0x4d8: 0x0004, 0x4d9: 0x0004, 0x4da: 0x0004, 0x4db: 0x0004, 0x4dc: 0x0004, 0x4dd: 0x0004, + 0x4de: 0x0004, 0x4df: 0x0004, 0x4e0: 0x0004, 0x4e1: 0x0004, 0x4e2: 0x0100, 0x4e3: 0x0004, + 0x4e4: 0x0004, 0x4e5: 0x0004, 0x4e6: 0x0004, 0x4e7: 0x0004, 0x4e8: 0x0004, 0x4e9: 0x0004, + 0x4ea: 0x0004, 0x4eb: 0x0004, 0x4ec: 0x0004, 0x4ed: 0x0004, 0x4ee: 0x0004, 0x4ef: 0x0004, + 0x4f0: 0x0004, 0x4f1: 0x0004, 0x4f2: 0x0004, 0x4f3: 0x0004, 0x4f4: 0x0004, 0x4f5: 0x0004, + 0x4f6: 0x0004, 0x4f7: 0x0004, 0x4f8: 0x0004, 0x4f9: 0x0004, 0x4fa: 0x0004, 0x4fb: 0x0004, + 0x4fc: 0x0004, 0x4fd: 0x0004, 0x4fe: 0x0004, 0x4ff: 0x0004, + // Block 0x14, offset 0x500 + 0x500: 0x0004, 0x501: 0x0004, 0x502: 0x0004, 0x503: 0x0400, + 0x53a: 0x0004, 0x53b: 0x0400, + 0x53c: 0x0004, 0x53e: 0x0400, 0x53f: 0x0400, + // Block 0x15, offset 0x540 + 0x540: 0x0400, 0x541: 0x0004, 0x542: 0x0004, 0x543: 0x0004, 0x544: 0x0004, 0x545: 0x0004, + 0x546: 0x0004, 0x547: 0x0004, 0x548: 0x0004, 0x549: 0x0400, 0x54a: 0x0400, 0x54b: 0x0400, + 0x54c: 0x0400, 0x54d: 0x0004, 0x54e: 0x0400, 0x54f: 0x0400, 0x551: 0x0004, + 0x552: 0x0004, 0x553: 0x0004, 0x554: 0x0004, 0x555: 0x0004, 0x556: 0x0004, 0x557: 0x0004, + 0x562: 0x0004, 0x563: 0x0004, + // Block 0x16, offset 0x580 + 0x581: 0x0004, 0x582: 0x0400, 0x583: 0x0400, + 0x5bc: 0x0004, 0x5be: 0x0004, 0x5bf: 0x0400, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x0400, 0x5c1: 0x0004, 0x5c2: 0x0004, 0x5c3: 0x0004, 0x5c4: 0x0004, + 0x5c7: 0x0400, 0x5c8: 0x0400, 0x5cb: 0x0400, + 0x5cc: 0x0400, 0x5cd: 0x0004, + 0x5d7: 0x0004, + 0x5e2: 0x0004, 0x5e3: 0x0004, + 0x5fe: 0x0004, + // Block 0x18, offset 0x600 + 0x601: 0x0004, 0x602: 0x0004, 0x603: 0x0400, + 0x63c: 0x0004, 0x63e: 0x0400, 0x63f: 0x0400, + // Block 0x19, offset 0x640 + 0x640: 0x0400, 0x641: 0x0004, 0x642: 0x0004, + 0x647: 0x0004, 0x648: 0x0004, 0x64b: 0x0004, + 0x64c: 0x0004, 0x64d: 0x0004, 0x651: 0x0004, + 0x670: 0x0004, 0x671: 0x0004, 0x675: 0x0004, + // Block 0x1a, offset 0x680 + 0x680: 0x0400, 0x681: 0x0004, 0x682: 0x0004, 0x683: 0x0004, 0x684: 0x0004, 0x685: 0x0004, + 0x687: 0x0004, 0x688: 0x0004, 0x689: 0x0400, 0x68b: 0x0400, + 0x68c: 0x0400, 0x68d: 0x0004, + 0x6a2: 0x0004, 0x6a3: 0x0004, + 0x6ba: 0x0004, 0x6bb: 0x0004, + 0x6bc: 0x0004, 0x6bd: 0x0004, 0x6be: 0x0004, 0x6bf: 0x0004, + // Block 0x1b, offset 0x6c0 + 0x6c1: 0x0004, 0x6c2: 0x0400, 0x6c3: 0x0400, + 0x6fc: 0x0004, 0x6fe: 0x0004, 0x6ff: 0x0004, + // Block 0x1c, offset 0x700 + 0x700: 0x0400, 0x701: 0x0004, 0x702: 0x0004, 0x703: 0x0004, 0x704: 0x0004, + 0x707: 0x0400, 0x708: 0x0400, 0x70b: 0x0400, + 0x70c: 0x0400, 0x70d: 0x0004, + 0x715: 0x0004, 0x716: 0x0004, 0x717: 0x0004, + 0x722: 0x0004, 0x723: 0x0004, + // Block 0x1d, offset 0x740 + 0x742: 0x0004, + 0x77e: 0x0004, 0x77f: 0x0400, + // Block 0x1e, offset 0x780 + 0x780: 0x0004, 0x781: 0x0400, 0x782: 0x0400, + 0x786: 0x0400, 0x787: 0x0400, 0x788: 0x0400, 0x78a: 0x0400, 0x78b: 0x0400, + 0x78c: 0x0400, 0x78d: 0x0004, + 0x797: 0x0004, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x0004, 0x7c1: 0x0400, 0x7c2: 0x0400, 0x7c3: 0x0400, 0x7c4: 0x0004, + 0x7fc: 0x0004, 0x7fe: 0x0004, 0x7ff: 0x0004, + // Block 0x20, offset 0x800 + 0x800: 0x0004, 0x801: 0x0400, 0x802: 0x0400, 0x803: 0x0400, 0x804: 0x0400, + 0x806: 0x0004, 0x807: 0x0004, 0x808: 0x0004, 0x80a: 0x0004, 0x80b: 0x0004, + 0x80c: 0x0004, 0x80d: 0x0004, + 0x815: 0x0004, 0x816: 0x0004, + 0x822: 0x0004, 0x823: 0x0004, + // Block 0x21, offset 0x840 + 0x841: 0x0004, 0x842: 0x0400, 0x843: 0x0400, + 0x87c: 0x0004, 0x87e: 0x0400, 0x87f: 0x0004, + // Block 0x22, offset 0x880 + 0x880: 0x0400, 0x881: 0x0400, 0x882: 0x0004, 0x883: 0x0400, 0x884: 0x0400, + 0x886: 0x0004, 0x887: 0x0400, 0x888: 0x0400, 0x88a: 0x0400, 0x88b: 0x0400, + 0x88c: 0x0004, 0x88d: 0x0004, + 0x895: 0x0004, 0x896: 0x0004, + 0x8a2: 0x0004, 0x8a3: 0x0004, + 0x8b3: 0x0400, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x0004, 0x8c1: 0x0004, 0x8c2: 0x0400, 0x8c3: 0x0400, + 0x8fb: 0x0004, + 0x8fc: 0x0004, 0x8fe: 0x0004, 0x8ff: 0x0400, + // Block 0x24, offset 0x900 + 0x900: 0x0400, 0x901: 0x0004, 0x902: 0x0004, 0x903: 0x0004, 0x904: 0x0004, + 0x906: 0x0400, 0x907: 0x0400, 0x908: 0x0400, 0x90a: 0x0400, 0x90b: 0x0400, + 0x90c: 0x0400, 0x90d: 0x0004, 0x90e: 0x0100, + 0x917: 0x0004, + 0x922: 0x0004, 0x923: 0x0004, + // Block 0x25, offset 0x940 + 0x941: 0x0004, 0x942: 0x0400, 0x943: 0x0400, + // Block 0x26, offset 0x980 + 0x98a: 0x0004, + 0x98f: 0x0004, 0x990: 0x0400, 0x991: 0x0400, + 0x992: 0x0004, 0x993: 0x0004, 0x994: 0x0004, 0x996: 0x0004, + 0x998: 0x0400, 0x999: 0x0400, 0x99a: 0x0400, 0x99b: 0x0400, 0x99c: 0x0400, 0x99d: 0x0400, + 0x99e: 0x0400, 0x99f: 0x0004, + 0x9b2: 0x0400, 0x9b3: 0x0400, + // Block 0x27, offset 0x9c0 + 0x9f1: 0x0004, 0x9f3: 0x0400, 0x9f4: 0x0004, 0x9f5: 0x0004, + 0x9f6: 0x0004, 0x9f7: 0x0004, 0x9f8: 0x0004, 0x9f9: 0x0004, 0x9fa: 0x0004, + // Block 0x28, offset 0xa00 + 0xa07: 0x0004, 0xa08: 0x0004, 0xa09: 0x0004, 0xa0a: 0x0004, 0xa0b: 0x0004, + 0xa0c: 0x0004, 0xa0d: 0x0004, 0xa0e: 0x0004, + // Block 0x29, offset 0xa40 + 0xa71: 0x0004, 0xa73: 0x0400, 0xa74: 0x0004, 0xa75: 0x0004, + 0xa76: 0x0004, 0xa77: 0x0004, 0xa78: 0x0004, 0xa79: 0x0004, 0xa7a: 0x0004, 0xa7b: 0x0004, + 0xa7c: 0x0004, + // Block 0x2a, offset 0xa80 + 0xa88: 0x0004, 0xa89: 0x0004, 0xa8a: 0x0004, 0xa8b: 0x0004, + 0xa8c: 0x0004, 0xa8d: 0x0004, 0xa8e: 0x0004, + // Block 0x2b, offset 0xac0 + 0xad8: 0x0004, 0xad9: 0x0004, + 0xaf5: 0x0004, + 0xaf7: 0x0004, 0xaf9: 0x0004, + 0xafe: 0x0400, 0xaff: 0x0400, + // Block 0x2c, offset 0xb00 + 0xb31: 0x0004, 0xb32: 0x0004, 0xb33: 0x0004, 0xb34: 0x0004, 0xb35: 0x0004, + 0xb36: 0x0004, 0xb37: 0x0004, 0xb38: 0x0004, 0xb39: 0x0004, 0xb3a: 0x0004, 0xb3b: 0x0004, + 0xb3c: 0x0004, 0xb3d: 0x0004, 0xb3e: 0x0004, 0xb3f: 0x0400, + // Block 0x2d, offset 0xb40 + 0xb40: 0x0004, 0xb41: 0x0004, 0xb42: 0x0004, 0xb43: 0x0004, 0xb44: 0x0004, + 0xb46: 0x0004, 0xb47: 0x0004, + 0xb4d: 0x0004, 0xb4e: 0x0004, 0xb4f: 0x0004, 0xb50: 0x0004, 0xb51: 0x0004, + 0xb52: 0x0004, 0xb53: 0x0004, 0xb54: 0x0004, 0xb55: 0x0004, 0xb56: 0x0004, 0xb57: 0x0004, + 0xb59: 0x0004, 0xb5a: 0x0004, 0xb5b: 0x0004, 0xb5c: 0x0004, 0xb5d: 0x0004, + 0xb5e: 0x0004, 0xb5f: 0x0004, 0xb60: 0x0004, 0xb61: 0x0004, 0xb62: 0x0004, 0xb63: 0x0004, + 0xb64: 0x0004, 0xb65: 0x0004, 0xb66: 0x0004, 0xb67: 0x0004, 0xb68: 0x0004, 0xb69: 0x0004, + 0xb6a: 0x0004, 0xb6b: 0x0004, 0xb6c: 0x0004, 0xb6d: 0x0004, 0xb6e: 0x0004, 0xb6f: 0x0004, + 0xb70: 0x0004, 0xb71: 0x0004, 0xb72: 0x0004, 0xb73: 0x0004, 0xb74: 0x0004, 0xb75: 0x0004, + 0xb76: 0x0004, 0xb77: 0x0004, 0xb78: 0x0004, 0xb79: 0x0004, 0xb7a: 0x0004, 0xb7b: 0x0004, + 0xb7c: 0x0004, + // Block 0x2e, offset 0xb80 + 0xb86: 0x0004, + // Block 0x2f, offset 0xbc0 + 0xbed: 0x0004, 0xbee: 0x0004, 0xbef: 0x0004, + 0xbf0: 0x0004, 0xbf1: 0x0400, 0xbf2: 0x0004, 0xbf3: 0x0004, 0xbf4: 0x0004, 0xbf5: 0x0004, + 0xbf6: 0x0004, 0xbf7: 0x0004, 0xbf9: 0x0004, 0xbfa: 0x0004, 0xbfb: 0x0400, + 0xbfc: 0x0400, 0xbfd: 0x0004, 0xbfe: 0x0004, + // Block 0x30, offset 0xc00 + 0xc16: 0x0400, 0xc17: 0x0400, + 0xc18: 0x0004, 0xc19: 0x0004, + 0xc1e: 0x0004, 0xc1f: 0x0004, 0xc20: 0x0004, + 0xc31: 0x0004, 0xc32: 0x0004, 0xc33: 0x0004, 0xc34: 0x0004, + // Block 0x31, offset 0xc40 + 0xc42: 0x0004, 0xc44: 0x0400, 0xc45: 0x0004, + 0xc46: 0x0004, + 0xc4d: 0x0004, + 0xc5d: 0x0004, + // Block 0x32, offset 0xc80 + 0xc80: 0x0010, 0xc81: 0x0010, 0xc82: 0x0010, 0xc83: 0x0010, 0xc84: 0x0010, 0xc85: 0x0010, + 0xc86: 0x0010, 0xc87: 0x0010, 0xc88: 0x0010, 0xc89: 0x0010, 0xc8a: 0x0010, 0xc8b: 0x0010, + 0xc8c: 0x0010, 0xc8d: 0x0010, 0xc8e: 0x0010, 0xc8f: 0x0010, 0xc90: 0x0010, 0xc91: 0x0010, + 0xc92: 0x0010, 0xc93: 0x0010, 0xc94: 0x0010, 0xc95: 0x0010, 0xc96: 0x0010, 0xc97: 0x0010, + 0xc98: 0x0010, 0xc99: 0x0010, 0xc9a: 0x0010, 0xc9b: 0x0010, 0xc9c: 0x0010, 0xc9d: 0x0010, + 0xc9e: 0x0010, 0xc9f: 0x0010, 0xca0: 0x0010, 0xca1: 0x0010, 0xca2: 0x0010, 0xca3: 0x0010, + 0xca4: 0x0010, 0xca5: 0x0010, 0xca6: 0x0010, 0xca7: 0x0010, 0xca8: 0x0010, 0xca9: 0x0010, + 0xcaa: 0x0010, 0xcab: 0x0010, 0xcac: 0x0010, 0xcad: 0x0010, 0xcae: 0x0010, 0xcaf: 0x0010, + 0xcb0: 0x0010, 0xcb1: 0x0010, 0xcb2: 0x0010, 0xcb3: 0x0010, 0xcb4: 0x0010, 0xcb5: 0x0010, + 0xcb6: 0x0010, 0xcb7: 0x0010, 0xcb8: 0x0010, 0xcb9: 0x0010, 0xcba: 0x0010, 0xcbb: 0x0010, + 0xcbc: 0x0010, 0xcbd: 0x0010, 0xcbe: 0x0010, 0xcbf: 0x0010, + // Block 0x33, offset 0xcc0 + 0xcc0: 0x0010, 0xcc1: 0x0010, 0xcc2: 0x0010, 0xcc3: 0x0010, 0xcc4: 0x0010, 0xcc5: 0x0010, + 0xcc6: 0x0010, 0xcc7: 0x0010, 0xcc8: 0x0010, 0xcc9: 0x0010, 0xcca: 0x0010, 0xccb: 0x0010, + 0xccc: 0x0010, 0xccd: 0x0010, 0xcce: 0x0010, 0xccf: 0x0010, 0xcd0: 0x0010, 0xcd1: 0x0010, + 0xcd2: 0x0010, 0xcd3: 0x0010, 0xcd4: 0x0010, 0xcd5: 0x0010, 0xcd6: 0x0010, 0xcd7: 0x0010, + 0xcd8: 0x0010, 0xcd9: 0x0010, 0xcda: 0x0010, 0xcdb: 0x0010, 0xcdc: 0x0010, 0xcdd: 0x0010, + 0xcde: 0x0010, 0xcdf: 0x0010, 0xce0: 0x1000, 0xce1: 0x1000, 0xce2: 0x1000, 0xce3: 0x1000, + 0xce4: 0x1000, 0xce5: 0x1000, 0xce6: 0x1000, 0xce7: 0x1000, 0xce8: 0x1000, 0xce9: 0x1000, + 0xcea: 0x1000, 0xceb: 0x1000, 0xcec: 0x1000, 0xced: 0x1000, 0xcee: 0x1000, 0xcef: 0x1000, + 0xcf0: 0x1000, 0xcf1: 0x1000, 0xcf2: 0x1000, 0xcf3: 0x1000, 0xcf4: 0x1000, 0xcf5: 0x1000, + 0xcf6: 0x1000, 0xcf7: 0x1000, 0xcf8: 0x1000, 0xcf9: 0x1000, 0xcfa: 0x1000, 0xcfb: 0x1000, + 0xcfc: 0x1000, 0xcfd: 0x1000, 0xcfe: 0x1000, 0xcff: 0x1000, + // Block 0x34, offset 0xd00 + 0xd00: 0x1000, 0xd01: 0x1000, 0xd02: 0x1000, 0xd03: 0x1000, 0xd04: 0x1000, 0xd05: 0x1000, + 0xd06: 0x1000, 0xd07: 0x1000, 0xd08: 0x1000, 0xd09: 0x1000, 0xd0a: 0x1000, 0xd0b: 0x1000, + 0xd0c: 0x1000, 0xd0d: 0x1000, 0xd0e: 0x1000, 0xd0f: 0x1000, 0xd10: 0x1000, 0xd11: 0x1000, + 0xd12: 0x1000, 0xd13: 0x1000, 0xd14: 0x1000, 0xd15: 0x1000, 0xd16: 0x1000, 0xd17: 0x1000, + 0xd18: 0x1000, 0xd19: 0x1000, 0xd1a: 0x1000, 0xd1b: 0x1000, 0xd1c: 0x1000, 0xd1d: 0x1000, + 0xd1e: 0x1000, 0xd1f: 0x1000, 0xd20: 0x1000, 0xd21: 0x1000, 0xd22: 0x1000, 0xd23: 0x1000, + 0xd24: 0x1000, 0xd25: 0x1000, 0xd26: 0x1000, 0xd27: 0x1000, 0xd28: 0x0800, 0xd29: 0x0800, + 0xd2a: 0x0800, 0xd2b: 0x0800, 0xd2c: 0x0800, 0xd2d: 0x0800, 0xd2e: 0x0800, 0xd2f: 0x0800, + 0xd30: 0x0800, 0xd31: 0x0800, 0xd32: 0x0800, 0xd33: 0x0800, 0xd34: 0x0800, 0xd35: 0x0800, + 0xd36: 0x0800, 0xd37: 0x0800, 0xd38: 0x0800, 0xd39: 0x0800, 0xd3a: 0x0800, 0xd3b: 0x0800, + 0xd3c: 0x0800, 0xd3d: 0x0800, 0xd3e: 0x0800, 0xd3f: 0x0800, + // Block 0x35, offset 0xd40 + 0xd40: 0x0800, 0xd41: 0x0800, 0xd42: 0x0800, 0xd43: 0x0800, 0xd44: 0x0800, 0xd45: 0x0800, + 0xd46: 0x0800, 0xd47: 0x0800, 0xd48: 0x0800, 0xd49: 0x0800, 0xd4a: 0x0800, 0xd4b: 0x0800, + 0xd4c: 0x0800, 0xd4d: 0x0800, 0xd4e: 0x0800, 0xd4f: 0x0800, 0xd50: 0x0800, 0xd51: 0x0800, + 0xd52: 0x0800, 0xd53: 0x0800, 0xd54: 0x0800, 0xd55: 0x0800, 0xd56: 0x0800, 0xd57: 0x0800, + 0xd58: 0x0800, 0xd59: 0x0800, 0xd5a: 0x0800, 0xd5b: 0x0800, 0xd5c: 0x0800, 0xd5d: 0x0800, + 0xd5e: 0x0800, 0xd5f: 0x0800, 0xd60: 0x0800, 0xd61: 0x0800, 0xd62: 0x0800, 0xd63: 0x0800, + 0xd64: 0x0800, 0xd65: 0x0800, 0xd66: 0x0800, 0xd67: 0x0800, 0xd68: 0x0800, 0xd69: 0x0800, + 0xd6a: 0x0800, 0xd6b: 0x0800, 0xd6c: 0x0800, 0xd6d: 0x0800, 0xd6e: 0x0800, 0xd6f: 0x0800, + 0xd70: 0x0800, 0xd71: 0x0800, 0xd72: 0x0800, 0xd73: 0x0800, 0xd74: 0x0800, 0xd75: 0x0800, + 0xd76: 0x0800, 0xd77: 0x0800, 0xd78: 0x0800, 0xd79: 0x0800, 0xd7a: 0x0800, 0xd7b: 0x0800, + 0xd7c: 0x0800, 0xd7d: 0x0800, 0xd7e: 0x0800, 0xd7f: 0x0800, + // Block 0x36, offset 0xd80 + 0xd9d: 0x0004, + 0xd9e: 0x0004, 0xd9f: 0x0004, + // Block 0x37, offset 0xdc0 + 0xdd2: 0x0004, 0xdd3: 0x0004, 0xdd4: 0x0004, 0xdd5: 0x0400, + 0xdf2: 0x0004, 0xdf3: 0x0004, 0xdf4: 0x0400, + // Block 0x38, offset 0xe00 + 0xe12: 0x0004, 0xe13: 0x0004, + 0xe32: 0x0004, 0xe33: 0x0004, + // Block 0x39, offset 0xe40 + 0xe74: 0x0004, 0xe75: 0x0004, + 0xe76: 0x0400, 0xe77: 0x0004, 0xe78: 0x0004, 0xe79: 0x0004, 0xe7a: 0x0004, 0xe7b: 0x0004, + 0xe7c: 0x0004, 0xe7d: 0x0004, 0xe7e: 0x0400, 0xe7f: 0x0400, + // Block 0x3a, offset 0xe80 + 0xe80: 0x0400, 0xe81: 0x0400, 0xe82: 0x0400, 0xe83: 0x0400, 0xe84: 0x0400, 0xe85: 0x0400, + 0xe86: 0x0004, 0xe87: 0x0400, 0xe88: 0x0400, 0xe89: 0x0004, 0xe8a: 0x0004, 0xe8b: 0x0004, + 0xe8c: 0x0004, 0xe8d: 0x0004, 0xe8e: 0x0004, 0xe8f: 0x0004, 0xe90: 0x0004, 0xe91: 0x0004, + 0xe92: 0x0004, 0xe93: 0x0004, + 0xe9d: 0x0004, + // Block 0x3b, offset 0xec0 + 0xecb: 0x0004, + 0xecc: 0x0004, 0xecd: 0x0004, 0xece: 0x0002, 0xecf: 0x0004, + // Block 0x3c, offset 0xf00 + 0xf05: 0x0004, + 0xf06: 0x0004, + 0xf29: 0x0004, + // Block 0x3d, offset 0xf40 + 0xf60: 0x0004, 0xf61: 0x0004, 0xf62: 0x0004, 0xf63: 0x0400, + 0xf64: 0x0400, 0xf65: 0x0400, 0xf66: 0x0400, 0xf67: 0x0004, 0xf68: 0x0004, 0xf69: 0x0400, + 0xf6a: 0x0400, 0xf6b: 0x0400, + 0xf70: 0x0400, 0xf71: 0x0400, 0xf72: 0x0004, 0xf73: 0x0400, 0xf74: 0x0400, 0xf75: 0x0400, + 0xf76: 0x0400, 0xf77: 0x0400, 0xf78: 0x0400, 0xf79: 0x0004, 0xf7a: 0x0004, 0xf7b: 0x0004, + // Block 0x3e, offset 0xf80 + 0xf97: 0x0004, + 0xf98: 0x0004, 0xf99: 0x0400, 0xf9a: 0x0400, 0xf9b: 0x0004, + // Block 0x3f, offset 0xfc0 + 0xfd5: 0x0400, 0xfd6: 0x0004, 0xfd7: 0x0400, + 0xfd8: 0x0004, 0xfd9: 0x0004, 0xfda: 0x0004, 0xfdb: 0x0004, 0xfdc: 0x0004, 0xfdd: 0x0004, + 0xfde: 0x0004, 0xfe0: 0x0004, 0xfe2: 0x0004, + 0xfe5: 0x0004, 0xfe6: 0x0004, 0xfe7: 0x0004, 0xfe8: 0x0004, 0xfe9: 0x0004, + 0xfea: 0x0004, 0xfeb: 0x0004, 0xfec: 0x0004, 0xfed: 0x0400, 0xfee: 0x0400, 0xfef: 0x0400, + 0xff0: 0x0400, 0xff1: 0x0400, 0xff2: 0x0400, 0xff3: 0x0004, 0xff4: 0x0004, 0xff5: 0x0004, + 0xff6: 0x0004, 0xff7: 0x0004, 0xff8: 0x0004, 0xff9: 0x0004, 0xffa: 0x0004, 0xffb: 0x0004, + 0xffc: 0x0004, 0xfff: 0x0004, + // Block 0x40, offset 0x1000 + 0x1030: 0x0004, 0x1031: 0x0004, 0x1032: 0x0004, 0x1033: 0x0004, 0x1034: 0x0004, 0x1035: 0x0004, + 0x1036: 0x0004, 0x1037: 0x0004, 0x1038: 0x0004, 0x1039: 0x0004, 0x103a: 0x0004, 0x103b: 0x0004, + 0x103c: 0x0004, 0x103d: 0x0004, 0x103e: 0x0004, 0x103f: 0x0004, + // Block 0x41, offset 0x1040 + 0x1040: 0x0004, 0x1041: 0x0004, 0x1042: 0x0004, 0x1043: 0x0004, 0x1044: 0x0004, 0x1045: 0x0004, + 0x1046: 0x0004, 0x1047: 0x0004, 0x1048: 0x0004, 0x1049: 0x0004, 0x104a: 0x0004, 0x104b: 0x0004, + 0x104c: 0x0004, 0x104d: 0x0004, 0x104e: 0x0004, + // Block 0x42, offset 0x1080 + 0x1080: 0x0004, 0x1081: 0x0004, 0x1082: 0x0004, 0x1083: 0x0004, 0x1084: 0x0400, + 0x10b4: 0x0004, 0x10b5: 0x0004, + 0x10b6: 0x0004, 0x10b7: 0x0004, 0x10b8: 0x0004, 0x10b9: 0x0004, 0x10ba: 0x0004, 0x10bb: 0x0400, + 0x10bc: 0x0004, 0x10bd: 0x0400, 0x10be: 0x0400, 0x10bf: 0x0400, + // Block 0x43, offset 0x10c0 + 0x10c0: 0x0400, 0x10c1: 0x0400, 0x10c2: 0x0004, 0x10c3: 0x0400, 0x10c4: 0x0400, + 0x10eb: 0x0004, 0x10ec: 0x0004, 0x10ed: 0x0004, 0x10ee: 0x0004, 0x10ef: 0x0004, + 0x10f0: 0x0004, 0x10f1: 0x0004, 0x10f2: 0x0004, 0x10f3: 0x0004, + // Block 0x44, offset 0x1100 + 0x1100: 0x0004, 0x1101: 0x0004, 0x1102: 0x0400, + 0x1121: 0x0400, 0x1122: 0x0004, 0x1123: 0x0004, + 0x1124: 0x0004, 0x1125: 0x0004, 0x1126: 0x0400, 0x1127: 0x0400, 0x1128: 0x0004, 0x1129: 0x0004, + 0x112a: 0x0400, 0x112b: 0x0004, 0x112c: 0x0004, 0x112d: 0x0004, + // Block 0x45, offset 0x1140 + 0x1166: 0x0004, 0x1167: 0x0400, 0x1168: 0x0004, 0x1169: 0x0004, + 0x116a: 0x0400, 0x116b: 0x0400, 0x116c: 0x0400, 0x116d: 0x0004, 0x116e: 0x0400, 0x116f: 0x0004, + 0x1170: 0x0004, 0x1171: 0x0004, 0x1172: 0x0400, 0x1173: 0x0400, + // Block 0x46, offset 0x1180 + 0x11a4: 0x0400, 0x11a5: 0x0400, 0x11a6: 0x0400, 0x11a7: 0x0400, 0x11a8: 0x0400, 0x11a9: 0x0400, + 0x11aa: 0x0400, 0x11ab: 0x0400, 0x11ac: 0x0004, 0x11ad: 0x0004, 0x11ae: 0x0004, 0x11af: 0x0004, + 0x11b0: 0x0004, 0x11b1: 0x0004, 0x11b2: 0x0004, 0x11b3: 0x0004, 0x11b4: 0x0400, 0x11b5: 0x0400, + 0x11b6: 0x0004, 0x11b7: 0x0004, + // Block 0x47, offset 0x11c0 + 0x11d0: 0x0004, 0x11d1: 0x0004, + 0x11d2: 0x0004, 0x11d4: 0x0004, 0x11d5: 0x0004, 0x11d6: 0x0004, 0x11d7: 0x0004, + 0x11d8: 0x0004, 0x11d9: 0x0004, 0x11da: 0x0004, 0x11db: 0x0004, 0x11dc: 0x0004, 0x11dd: 0x0004, + 0x11de: 0x0004, 0x11df: 0x0004, 0x11e0: 0x0004, 0x11e1: 0x0400, 0x11e2: 0x0004, 0x11e3: 0x0004, + 0x11e4: 0x0004, 0x11e5: 0x0004, 0x11e6: 0x0004, 0x11e7: 0x0004, 0x11e8: 0x0004, + 0x11ed: 0x0004, + 0x11f4: 0x0004, + 0x11f7: 0x0400, 0x11f8: 0x0004, 0x11f9: 0x0004, + // Block 0x48, offset 0x1200 + 0x120b: 0x0002, + 0x120c: 0x0004, 0x120d: 0x2000, 0x120e: 0x0002, 0x120f: 0x0002, + 0x1228: 0x0002, 0x1229: 0x0002, + 0x122a: 0x0002, 0x122b: 0x0002, 0x122c: 0x0002, 0x122d: 0x0002, 0x122e: 0x0002, + 0x123c: 0x0008, + // Block 0x49, offset 0x1240 + 0x1249: 0x0008, + 0x1260: 0x0002, 0x1261: 0x0002, 0x1262: 0x0002, 0x1263: 0x0002, + 0x1264: 0x0002, 0x1265: 0x0002, 0x1266: 0x0002, 0x1267: 0x0002, 0x1268: 0x0002, 0x1269: 0x0002, + 0x126a: 0x0002, 0x126b: 0x0002, 0x126c: 0x0002, 0x126d: 0x0002, 0x126e: 0x0002, 0x126f: 0x0002, + // Block 0x4a, offset 0x1280 + 0x1290: 0x0004, 0x1291: 0x0004, + 0x1292: 0x0004, 0x1293: 0x0004, 0x1294: 0x0004, 0x1295: 0x0004, 0x1296: 0x0004, 0x1297: 0x0004, + 0x1298: 0x0004, 0x1299: 0x0004, 0x129a: 0x0004, 0x129b: 0x0004, 0x129c: 0x0004, 0x129d: 0x0004, + 0x129e: 0x0004, 0x129f: 0x0004, 0x12a0: 0x0004, 0x12a1: 0x0004, 0x12a2: 0x0004, 0x12a3: 0x0004, + 0x12a4: 0x0004, 0x12a5: 0x0004, 0x12a6: 0x0004, 0x12a7: 0x0004, 0x12a8: 0x0004, 0x12a9: 0x0004, + 0x12aa: 0x0004, 0x12ab: 0x0004, 0x12ac: 0x0004, 0x12ad: 0x0004, 0x12ae: 0x0004, 0x12af: 0x0004, + 0x12b0: 0x0004, + // Block 0x4b, offset 0x12c0 + 0x12e2: 0x0008, + 0x12f9: 0x0008, + // Block 0x4c, offset 0x1300 + 0x1314: 0x0008, 0x1315: 0x0008, 0x1316: 0x0008, 0x1317: 0x0008, + 0x1318: 0x0008, 0x1319: 0x0008, + 0x1329: 0x0008, + 0x132a: 0x0008, + // Block 0x4d, offset 0x1340 + 0x135a: 0x0008, 0x135b: 0x0008, + 0x1368: 0x0008, + // Block 0x4e, offset 0x1380 + 0x1388: 0x0008, + // Block 0x4f, offset 0x13c0 + 0x13cf: 0x0008, + 0x13e9: 0x0008, + 0x13ea: 0x0008, 0x13eb: 0x0008, 0x13ec: 0x0008, 0x13ed: 0x0008, 0x13ee: 0x0008, 0x13ef: 0x0008, + 0x13f0: 0x0008, 0x13f1: 0x0008, 0x13f2: 0x0008, 0x13f3: 0x0008, + 0x13f8: 0x0008, 0x13f9: 0x0008, 0x13fa: 0x0008, + // Block 0x50, offset 0x1400 + 0x1402: 0x0008, + // Block 0x51, offset 0x1440 + 0x146a: 0x0008, 0x146b: 0x0008, + 0x1476: 0x0008, + // Block 0x52, offset 0x1480 + 0x1480: 0x0008, + 0x14bb: 0x0008, + 0x14bc: 0x0008, 0x14bd: 0x0008, 0x14be: 0x0008, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x0008, 0x14c1: 0x0008, 0x14c2: 0x0008, 0x14c3: 0x0008, 0x14c4: 0x0008, 0x14c5: 0x0008, + 0x14c7: 0x0008, 0x14c8: 0x0008, 0x14c9: 0x0008, 0x14ca: 0x0008, 0x14cb: 0x0008, + 0x14cc: 0x0008, 0x14cd: 0x0008, 0x14ce: 0x0008, 0x14cf: 0x0008, 0x14d0: 0x0008, 0x14d1: 0x0008, + 0x14d2: 0x0008, 0x14d4: 0x0008, 0x14d5: 0x0008, 0x14d6: 0x0008, 0x14d7: 0x0008, + 0x14d8: 0x0008, 0x14d9: 0x0008, 0x14da: 0x0008, 0x14db: 0x0008, 0x14dc: 0x0008, 0x14dd: 0x0008, + 0x14de: 0x0008, 0x14df: 0x0008, 0x14e0: 0x0008, 0x14e1: 0x0008, 0x14e2: 0x0008, 0x14e3: 0x0008, + 0x14e4: 0x0008, 0x14e5: 0x0008, 0x14e6: 0x0008, 0x14e7: 0x0008, 0x14e8: 0x0008, 0x14e9: 0x0008, + 0x14ea: 0x0008, 0x14eb: 0x0008, 0x14ec: 0x0008, 0x14ed: 0x0008, 0x14ee: 0x0008, 0x14ef: 0x0008, + 0x14f0: 0x0008, 0x14f1: 0x0008, 0x14f2: 0x0008, 0x14f3: 0x0008, 0x14f4: 0x0008, 0x14f5: 0x0008, + 0x14f6: 0x0008, 0x14f7: 0x0008, 0x14f8: 0x0008, 0x14f9: 0x0008, 0x14fa: 0x0008, 0x14fb: 0x0008, + 0x14fc: 0x0008, 0x14fd: 0x0008, 0x14fe: 0x0008, 0x14ff: 0x0008, + // Block 0x54, offset 0x1500 + 0x1500: 0x0008, 0x1501: 0x0008, 0x1502: 0x0008, 0x1503: 0x0008, 0x1504: 0x0008, 0x1505: 0x0008, + 0x1506: 0x0008, 0x1507: 0x0008, 0x1508: 0x0008, 0x1509: 0x0008, 0x150a: 0x0008, 0x150b: 0x0008, + 0x150c: 0x0008, 0x150d: 0x0008, 0x150e: 0x0008, 0x150f: 0x0008, 0x1510: 0x0008, 0x1511: 0x0008, + 0x1512: 0x0008, 0x1513: 0x0008, 0x1514: 0x0008, 0x1515: 0x0008, 0x1516: 0x0008, 0x1517: 0x0008, + 0x1518: 0x0008, 0x1519: 0x0008, 0x151a: 0x0008, 0x151b: 0x0008, 0x151c: 0x0008, 0x151d: 0x0008, + 0x151e: 0x0008, 0x151f: 0x0008, 0x1520: 0x0008, 0x1521: 0x0008, 0x1522: 0x0008, 0x1523: 0x0008, + 0x1524: 0x0008, 0x1525: 0x0008, 0x1526: 0x0008, 0x1527: 0x0008, 0x1528: 0x0008, 0x1529: 0x0008, + 0x152a: 0x0008, 0x152b: 0x0008, 0x152c: 0x0008, 0x152d: 0x0008, 0x152e: 0x0008, 0x152f: 0x0008, + 0x1530: 0x0008, 0x1531: 0x0008, 0x1532: 0x0008, 0x1533: 0x0008, 0x1534: 0x0008, 0x1535: 0x0008, + 0x1536: 0x0008, 0x1537: 0x0008, 0x1538: 0x0008, 0x1539: 0x0008, 0x153a: 0x0008, 0x153b: 0x0008, + 0x153c: 0x0008, 0x153d: 0x0008, 0x153e: 0x0008, 0x153f: 0x0008, + // Block 0x55, offset 0x1540 + 0x1540: 0x0008, 0x1541: 0x0008, 0x1542: 0x0008, 0x1543: 0x0008, 0x1544: 0x0008, 0x1545: 0x0008, + 0x1550: 0x0008, 0x1551: 0x0008, + 0x1552: 0x0008, 0x1553: 0x0008, 0x1554: 0x0008, 0x1555: 0x0008, 0x1556: 0x0008, 0x1557: 0x0008, + 0x1558: 0x0008, 0x1559: 0x0008, 0x155a: 0x0008, 0x155b: 0x0008, 0x155c: 0x0008, 0x155d: 0x0008, + 0x155e: 0x0008, 0x155f: 0x0008, 0x1560: 0x0008, 0x1561: 0x0008, 0x1562: 0x0008, 0x1563: 0x0008, + 0x1564: 0x0008, 0x1565: 0x0008, 0x1566: 0x0008, 0x1567: 0x0008, 0x1568: 0x0008, 0x1569: 0x0008, + 0x156a: 0x0008, 0x156b: 0x0008, 0x156c: 0x0008, 0x156d: 0x0008, 0x156e: 0x0008, 0x156f: 0x0008, + 0x1570: 0x0008, 0x1571: 0x0008, 0x1572: 0x0008, 0x1573: 0x0008, 0x1574: 0x0008, 0x1575: 0x0008, + 0x1576: 0x0008, 0x1577: 0x0008, 0x1578: 0x0008, 0x1579: 0x0008, 0x157a: 0x0008, 0x157b: 0x0008, + 0x157c: 0x0008, 0x157d: 0x0008, 0x157e: 0x0008, 0x157f: 0x0008, + // Block 0x56, offset 0x1580 + 0x1580: 0x0008, 0x1581: 0x0008, 0x1582: 0x0008, 0x1583: 0x0008, 0x1584: 0x0008, 0x1585: 0x0008, + 0x1588: 0x0008, 0x1589: 0x0008, 0x158a: 0x0008, 0x158b: 0x0008, + 0x158c: 0x0008, 0x158d: 0x0008, 0x158e: 0x0008, 0x158f: 0x0008, 0x1590: 0x0008, 0x1591: 0x0008, + 0x1592: 0x0008, 0x1594: 0x0008, 0x1596: 0x0008, + 0x159d: 0x0008, + 0x15a1: 0x0008, + 0x15a8: 0x0008, + 0x15b3: 0x0008, 0x15b4: 0x0008, + // Block 0x57, offset 0x15c0 + 0x15c4: 0x0008, + 0x15c7: 0x0008, + 0x15cc: 0x0008, 0x15ce: 0x0008, + 0x15d3: 0x0008, 0x15d4: 0x0008, 0x15d5: 0x0008, 0x15d7: 0x0008, + 0x15e3: 0x0008, + 0x15e4: 0x0008, 0x15e5: 0x0008, 0x15e6: 0x0008, 0x15e7: 0x0008, + // Block 0x58, offset 0x1600 + 0x1615: 0x0008, 0x1616: 0x0008, 0x1617: 0x0008, + 0x1621: 0x0008, + 0x1630: 0x0008, + 0x163f: 0x0008, + // Block 0x59, offset 0x1640 + 0x1674: 0x0008, 0x1675: 0x0008, + // Block 0x5a, offset 0x1680 + 0x1685: 0x0008, + 0x1686: 0x0008, 0x1687: 0x0008, + 0x169b: 0x0008, 0x169c: 0x0008, + // Block 0x5b, offset 0x16c0 + 0x16d0: 0x0008, + 0x16d5: 0x0008, + // Block 0x5c, offset 0x1700 + 0x172f: 0x0004, + 0x1730: 0x0004, 0x1731: 0x0004, + // Block 0x5d, offset 0x1740 + 0x177f: 0x0004, + // Block 0x5e, offset 0x1780 + 0x17a0: 0x0004, 0x17a1: 0x0004, 0x17a2: 0x0004, 0x17a3: 0x0004, + 0x17a4: 0x0004, 0x17a5: 0x0004, 0x17a6: 0x0004, 0x17a7: 0x0004, 0x17a8: 0x0004, 0x17a9: 0x0004, + 0x17aa: 0x0004, 0x17ab: 0x0004, 0x17ac: 0x0004, 0x17ad: 0x0004, 0x17ae: 0x0004, 0x17af: 0x0004, + 0x17b0: 0x0004, 0x17b1: 0x0004, 0x17b2: 0x0004, 0x17b3: 0x0004, 0x17b4: 0x0004, 0x17b5: 0x0004, + 0x17b6: 0x0004, 0x17b7: 0x0004, 0x17b8: 0x0004, 0x17b9: 0x0004, 0x17ba: 0x0004, 0x17bb: 0x0004, + 0x17bc: 0x0004, 0x17bd: 0x0004, 0x17be: 0x0004, 0x17bf: 0x0004, + // Block 0x5f, offset 0x17c0 + 0x17ea: 0x0004, 0x17eb: 0x0004, 0x17ec: 0x0004, 0x17ed: 0x0004, 0x17ee: 0x0004, 0x17ef: 0x0004, + 0x17f0: 0x0008, + 0x17fd: 0x0008, + // Block 0x60, offset 0x1800 + 0x1819: 0x0004, 0x181a: 0x0004, + // Block 0x61, offset 0x1840 + 0x1857: 0x0008, + 0x1859: 0x0008, + // Block 0x62, offset 0x1880 + 0x18af: 0x0004, + 0x18b0: 0x0004, 0x18b1: 0x0004, 0x18b2: 0x0004, 0x18b4: 0x0004, 0x18b5: 0x0004, + 0x18b6: 0x0004, 0x18b7: 0x0004, 0x18b8: 0x0004, 0x18b9: 0x0004, 0x18ba: 0x0004, 0x18bb: 0x0004, + 0x18bc: 0x0004, 0x18bd: 0x0004, + // Block 0x63, offset 0x18c0 + 0x18de: 0x0004, 0x18df: 0x0004, + // Block 0x64, offset 0x1900 + 0x1930: 0x0004, 0x1931: 0x0004, + // Block 0x65, offset 0x1940 + 0x1942: 0x0004, + 0x1946: 0x0004, 0x194b: 0x0004, + 0x1963: 0x0400, + 0x1964: 0x0400, 0x1965: 0x0004, 0x1966: 0x0004, 0x1967: 0x0400, + 0x196c: 0x0004, + // Block 0x66, offset 0x1980 + 0x1980: 0x0400, 0x1981: 0x0400, + 0x19b4: 0x0400, 0x19b5: 0x0400, + 0x19b6: 0x0400, 0x19b7: 0x0400, 0x19b8: 0x0400, 0x19b9: 0x0400, 0x19ba: 0x0400, 0x19bb: 0x0400, + 0x19bc: 0x0400, 0x19bd: 0x0400, 0x19be: 0x0400, 0x19bf: 0x0400, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x0400, 0x19c1: 0x0400, 0x19c2: 0x0400, 0x19c3: 0x0400, 0x19c4: 0x0004, 0x19c5: 0x0004, + 0x19e0: 0x0004, 0x19e1: 0x0004, 0x19e2: 0x0004, 0x19e3: 0x0004, + 0x19e4: 0x0004, 0x19e5: 0x0004, 0x19e6: 0x0004, 0x19e7: 0x0004, 0x19e8: 0x0004, 0x19e9: 0x0004, + 0x19ea: 0x0004, 0x19eb: 0x0004, 0x19ec: 0x0004, 0x19ed: 0x0004, 0x19ee: 0x0004, 0x19ef: 0x0004, + 0x19f0: 0x0004, 0x19f1: 0x0004, + 0x19ff: 0x0004, + // Block 0x68, offset 0x1a00 + 0x1a26: 0x0004, 0x1a27: 0x0004, 0x1a28: 0x0004, 0x1a29: 0x0004, + 0x1a2a: 0x0004, 0x1a2b: 0x0004, 0x1a2c: 0x0004, 0x1a2d: 0x0004, + // Block 0x69, offset 0x1a40 + 0x1a47: 0x0004, 0x1a48: 0x0004, 0x1a49: 0x0004, 0x1a4a: 0x0004, 0x1a4b: 0x0004, + 0x1a4c: 0x0004, 0x1a4d: 0x0004, 0x1a4e: 0x0004, 0x1a4f: 0x0004, 0x1a50: 0x0004, 0x1a51: 0x0004, + 0x1a52: 0x0400, 0x1a53: 0x0400, + 0x1a60: 0x0010, 0x1a61: 0x0010, 0x1a62: 0x0010, 0x1a63: 0x0010, + 0x1a64: 0x0010, 0x1a65: 0x0010, 0x1a66: 0x0010, 0x1a67: 0x0010, 0x1a68: 0x0010, 0x1a69: 0x0010, + 0x1a6a: 0x0010, 0x1a6b: 0x0010, 0x1a6c: 0x0010, 0x1a6d: 0x0010, 0x1a6e: 0x0010, 0x1a6f: 0x0010, + 0x1a70: 0x0010, 0x1a71: 0x0010, 0x1a72: 0x0010, 0x1a73: 0x0010, 0x1a74: 0x0010, 0x1a75: 0x0010, + 0x1a76: 0x0010, 0x1a77: 0x0010, 0x1a78: 0x0010, 0x1a79: 0x0010, 0x1a7a: 0x0010, 0x1a7b: 0x0010, + 0x1a7c: 0x0010, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x0004, 0x1a81: 0x0004, 0x1a82: 0x0004, 0x1a83: 0x0400, + 0x1ab3: 0x0004, 0x1ab4: 0x0400, 0x1ab5: 0x0400, + 0x1ab6: 0x0004, 0x1ab7: 0x0004, 0x1ab8: 0x0004, 0x1ab9: 0x0004, 0x1aba: 0x0400, 0x1abb: 0x0400, + 0x1abc: 0x0004, 0x1abd: 0x0004, 0x1abe: 0x0400, 0x1abf: 0x0400, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0x0400, + 0x1ae5: 0x0004, + // Block 0x6c, offset 0x1b00 + 0x1b29: 0x0004, + 0x1b2a: 0x0004, 0x1b2b: 0x0004, 0x1b2c: 0x0004, 0x1b2d: 0x0004, 0x1b2e: 0x0004, 0x1b2f: 0x0400, + 0x1b30: 0x0400, 0x1b31: 0x0004, 0x1b32: 0x0004, 0x1b33: 0x0400, 0x1b34: 0x0400, 0x1b35: 0x0004, + 0x1b36: 0x0004, + // Block 0x6d, offset 0x1b40 + 0x1b43: 0x0004, + 0x1b4c: 0x0004, 0x1b4d: 0x0400, + 0x1b7c: 0x0004, + // Block 0x6e, offset 0x1b80 + 0x1bb0: 0x0004, 0x1bb2: 0x0004, 0x1bb3: 0x0004, 0x1bb4: 0x0004, + 0x1bb7: 0x0004, 0x1bb8: 0x0004, + 0x1bbe: 0x0004, 0x1bbf: 0x0004, + // Block 0x6f, offset 0x1bc0 + 0x1bc1: 0x0004, + 0x1beb: 0x0400, 0x1bec: 0x0004, 0x1bed: 0x0004, 0x1bee: 0x0400, 0x1bef: 0x0400, + 0x1bf5: 0x0400, + 0x1bf6: 0x0004, + // Block 0x70, offset 0x1c00 + 0x1c23: 0x0400, + 0x1c24: 0x0400, 0x1c25: 0x0004, 0x1c26: 0x0400, 0x1c27: 0x0400, 0x1c28: 0x0004, 0x1c29: 0x0400, + 0x1c2a: 0x0400, 0x1c2c: 0x0400, 0x1c2d: 0x0004, + // Block 0x71, offset 0x1c40 + 0x1c40: 0x0040, 0x1c41: 0x0080, 0x1c42: 0x0080, 0x1c43: 0x0080, 0x1c44: 0x0080, 0x1c45: 0x0080, + 0x1c46: 0x0080, 0x1c47: 0x0080, 0x1c48: 0x0080, 0x1c49: 0x0080, 0x1c4a: 0x0080, 0x1c4b: 0x0080, + 0x1c4c: 0x0080, 0x1c4d: 0x0080, 0x1c4e: 0x0080, 0x1c4f: 0x0080, 0x1c50: 0x0080, 0x1c51: 0x0080, + 0x1c52: 0x0080, 0x1c53: 0x0080, 0x1c54: 0x0080, 0x1c55: 0x0080, 0x1c56: 0x0080, 0x1c57: 0x0080, + 0x1c58: 0x0080, 0x1c59: 0x0080, 0x1c5a: 0x0080, 0x1c5b: 0x0080, 0x1c5c: 0x0040, 0x1c5d: 0x0080, + 0x1c5e: 0x0080, 0x1c5f: 0x0080, 0x1c60: 0x0080, 0x1c61: 0x0080, 0x1c62: 0x0080, 0x1c63: 0x0080, + 0x1c64: 0x0080, 0x1c65: 0x0080, 0x1c66: 0x0080, 0x1c67: 0x0080, 0x1c68: 0x0080, 0x1c69: 0x0080, + 0x1c6a: 0x0080, 0x1c6b: 0x0080, 0x1c6c: 0x0080, 0x1c6d: 0x0080, 0x1c6e: 0x0080, 0x1c6f: 0x0080, + 0x1c70: 0x0080, 0x1c71: 0x0080, 0x1c72: 0x0080, 0x1c73: 0x0080, 0x1c74: 0x0080, 0x1c75: 0x0080, + 0x1c76: 0x0080, 0x1c77: 0x0080, 0x1c78: 0x0040, 0x1c79: 0x0080, 0x1c7a: 0x0080, 0x1c7b: 0x0080, + 0x1c7c: 0x0080, 0x1c7d: 0x0080, 0x1c7e: 0x0080, 0x1c7f: 0x0080, + // Block 0x72, offset 0x1c80 + 0x1c80: 0x0080, 0x1c81: 0x0080, 0x1c82: 0x0080, 0x1c83: 0x0080, 0x1c84: 0x0080, 0x1c85: 0x0080, + 0x1c86: 0x0080, 0x1c87: 0x0080, 0x1c88: 0x0080, 0x1c89: 0x0080, 0x1c8a: 0x0080, 0x1c8b: 0x0080, + 0x1c8c: 0x0080, 0x1c8d: 0x0080, 0x1c8e: 0x0080, 0x1c8f: 0x0080, 0x1c90: 0x0080, 0x1c91: 0x0080, + 0x1c92: 0x0080, 0x1c93: 0x0080, 0x1c94: 0x0040, 0x1c95: 0x0080, 0x1c96: 0x0080, 0x1c97: 0x0080, + 0x1c98: 0x0080, 0x1c99: 0x0080, 0x1c9a: 0x0080, 0x1c9b: 0x0080, 0x1c9c: 0x0080, 0x1c9d: 0x0080, + 0x1c9e: 0x0080, 0x1c9f: 0x0080, 0x1ca0: 0x0080, 0x1ca1: 0x0080, 0x1ca2: 0x0080, 0x1ca3: 0x0080, + 0x1ca4: 0x0080, 0x1ca5: 0x0080, 0x1ca6: 0x0080, 0x1ca7: 0x0080, 0x1ca8: 0x0080, 0x1ca9: 0x0080, + 0x1caa: 0x0080, 0x1cab: 0x0080, 0x1cac: 0x0080, 0x1cad: 0x0080, 0x1cae: 0x0080, 0x1caf: 0x0080, + 0x1cb0: 0x0040, 0x1cb1: 0x0080, 0x1cb2: 0x0080, 0x1cb3: 0x0080, 0x1cb4: 0x0080, 0x1cb5: 0x0080, + 0x1cb6: 0x0080, 0x1cb7: 0x0080, 0x1cb8: 0x0080, 0x1cb9: 0x0080, 0x1cba: 0x0080, 0x1cbb: 0x0080, + 0x1cbc: 0x0080, 0x1cbd: 0x0080, 0x1cbe: 0x0080, 0x1cbf: 0x0080, + // Block 0x73, offset 0x1cc0 + 0x1cc0: 0x0080, 0x1cc1: 0x0080, 0x1cc2: 0x0080, 0x1cc3: 0x0080, 0x1cc4: 0x0080, 0x1cc5: 0x0080, + 0x1cc6: 0x0080, 0x1cc7: 0x0080, 0x1cc8: 0x0080, 0x1cc9: 0x0080, 0x1cca: 0x0080, 0x1ccb: 0x0080, + 0x1ccc: 0x0040, 0x1ccd: 0x0080, 0x1cce: 0x0080, 0x1ccf: 0x0080, 0x1cd0: 0x0080, 0x1cd1: 0x0080, + 0x1cd2: 0x0080, 0x1cd3: 0x0080, 0x1cd4: 0x0080, 0x1cd5: 0x0080, 0x1cd6: 0x0080, 0x1cd7: 0x0080, + 0x1cd8: 0x0080, 0x1cd9: 0x0080, 0x1cda: 0x0080, 0x1cdb: 0x0080, 0x1cdc: 0x0080, 0x1cdd: 0x0080, + 0x1cde: 0x0080, 0x1cdf: 0x0080, 0x1ce0: 0x0080, 0x1ce1: 0x0080, 0x1ce2: 0x0080, 0x1ce3: 0x0080, + 0x1ce4: 0x0080, 0x1ce5: 0x0080, 0x1ce6: 0x0080, 0x1ce7: 0x0080, 0x1ce8: 0x0040, 0x1ce9: 0x0080, + 0x1cea: 0x0080, 0x1ceb: 0x0080, 0x1cec: 0x0080, 0x1ced: 0x0080, 0x1cee: 0x0080, 0x1cef: 0x0080, + 0x1cf0: 0x0080, 0x1cf1: 0x0080, 0x1cf2: 0x0080, 0x1cf3: 0x0080, 0x1cf4: 0x0080, 0x1cf5: 0x0080, + 0x1cf6: 0x0080, 0x1cf7: 0x0080, 0x1cf8: 0x0080, 0x1cf9: 0x0080, 0x1cfa: 0x0080, 0x1cfb: 0x0080, + 0x1cfc: 0x0080, 0x1cfd: 0x0080, 0x1cfe: 0x0080, 0x1cff: 0x0080, + // Block 0x74, offset 0x1d00 + 0x1d00: 0x0080, 0x1d01: 0x0080, 0x1d02: 0x0080, 0x1d03: 0x0080, 0x1d04: 0x0040, 0x1d05: 0x0080, + 0x1d06: 0x0080, 0x1d07: 0x0080, 0x1d08: 0x0080, 0x1d09: 0x0080, 0x1d0a: 0x0080, 0x1d0b: 0x0080, + 0x1d0c: 0x0080, 0x1d0d: 0x0080, 0x1d0e: 0x0080, 0x1d0f: 0x0080, 0x1d10: 0x0080, 0x1d11: 0x0080, + 0x1d12: 0x0080, 0x1d13: 0x0080, 0x1d14: 0x0080, 0x1d15: 0x0080, 0x1d16: 0x0080, 0x1d17: 0x0080, + 0x1d18: 0x0080, 0x1d19: 0x0080, 0x1d1a: 0x0080, 0x1d1b: 0x0080, 0x1d1c: 0x0080, 0x1d1d: 0x0080, + 0x1d1e: 0x0080, 0x1d1f: 0x0080, 0x1d20: 0x0040, 0x1d21: 0x0080, 0x1d22: 0x0080, 0x1d23: 0x0080, + 0x1d24: 0x0080, 0x1d25: 0x0080, 0x1d26: 0x0080, 0x1d27: 0x0080, 0x1d28: 0x0080, 0x1d29: 0x0080, + 0x1d2a: 0x0080, 0x1d2b: 0x0080, 0x1d2c: 0x0080, 0x1d2d: 0x0080, 0x1d2e: 0x0080, 0x1d2f: 0x0080, + 0x1d30: 0x0080, 0x1d31: 0x0080, 0x1d32: 0x0080, 0x1d33: 0x0080, 0x1d34: 0x0080, 0x1d35: 0x0080, + 0x1d36: 0x0080, 0x1d37: 0x0080, 0x1d38: 0x0080, 0x1d39: 0x0080, 0x1d3a: 0x0080, 0x1d3b: 0x0080, + 0x1d3c: 0x0040, 0x1d3d: 0x0080, 0x1d3e: 0x0080, 0x1d3f: 0x0080, + // Block 0x75, offset 0x1d40 + 0x1d40: 0x0080, 0x1d41: 0x0080, 0x1d42: 0x0080, 0x1d43: 0x0080, 0x1d44: 0x0080, 0x1d45: 0x0080, + 0x1d46: 0x0080, 0x1d47: 0x0080, 0x1d48: 0x0080, 0x1d49: 0x0080, 0x1d4a: 0x0080, 0x1d4b: 0x0080, + 0x1d4c: 0x0080, 0x1d4d: 0x0080, 0x1d4e: 0x0080, 0x1d4f: 0x0080, 0x1d50: 0x0080, 0x1d51: 0x0080, + 0x1d52: 0x0080, 0x1d53: 0x0080, 0x1d54: 0x0080, 0x1d55: 0x0080, 0x1d56: 0x0080, 0x1d57: 0x0080, + 0x1d58: 0x0040, 0x1d59: 0x0080, 0x1d5a: 0x0080, 0x1d5b: 0x0080, 0x1d5c: 0x0080, 0x1d5d: 0x0080, + 0x1d5e: 0x0080, 0x1d5f: 0x0080, 0x1d60: 0x0080, 0x1d61: 0x0080, 0x1d62: 0x0080, 0x1d63: 0x0080, + 0x1d64: 0x0080, 0x1d65: 0x0080, 0x1d66: 0x0080, 0x1d67: 0x0080, 0x1d68: 0x0080, 0x1d69: 0x0080, + 0x1d6a: 0x0080, 0x1d6b: 0x0080, 0x1d6c: 0x0080, 0x1d6d: 0x0080, 0x1d6e: 0x0080, 0x1d6f: 0x0080, + 0x1d70: 0x0080, 0x1d71: 0x0080, 0x1d72: 0x0080, 0x1d73: 0x0080, 0x1d74: 0x0040, 0x1d75: 0x0080, + 0x1d76: 0x0080, 0x1d77: 0x0080, 0x1d78: 0x0080, 0x1d79: 0x0080, 0x1d7a: 0x0080, 0x1d7b: 0x0080, + 0x1d7c: 0x0080, 0x1d7d: 0x0080, 0x1d7e: 0x0080, 0x1d7f: 0x0080, + // Block 0x76, offset 0x1d80 + 0x1d80: 0x0080, 0x1d81: 0x0080, 0x1d82: 0x0080, 0x1d83: 0x0080, 0x1d84: 0x0080, 0x1d85: 0x0080, + 0x1d86: 0x0080, 0x1d87: 0x0080, 0x1d88: 0x0080, 0x1d89: 0x0080, 0x1d8a: 0x0080, 0x1d8b: 0x0080, + 0x1d8c: 0x0080, 0x1d8d: 0x0080, 0x1d8e: 0x0080, 0x1d8f: 0x0080, 0x1d90: 0x0040, 0x1d91: 0x0080, + 0x1d92: 0x0080, 0x1d93: 0x0080, 0x1d94: 0x0080, 0x1d95: 0x0080, 0x1d96: 0x0080, 0x1d97: 0x0080, + 0x1d98: 0x0080, 0x1d99: 0x0080, 0x1d9a: 0x0080, 0x1d9b: 0x0080, 0x1d9c: 0x0080, 0x1d9d: 0x0080, + 0x1d9e: 0x0080, 0x1d9f: 0x0080, 0x1da0: 0x0080, 0x1da1: 0x0080, 0x1da2: 0x0080, 0x1da3: 0x0080, + 0x1da4: 0x0080, 0x1da5: 0x0080, 0x1da6: 0x0080, 0x1da7: 0x0080, 0x1da8: 0x0080, 0x1da9: 0x0080, + 0x1daa: 0x0080, 0x1dab: 0x0080, 0x1dac: 0x0040, 0x1dad: 0x0080, 0x1dae: 0x0080, 0x1daf: 0x0080, + 0x1db0: 0x0080, 0x1db1: 0x0080, 0x1db2: 0x0080, 0x1db3: 0x0080, 0x1db4: 0x0080, 0x1db5: 0x0080, + 0x1db6: 0x0080, 0x1db7: 0x0080, 0x1db8: 0x0080, 0x1db9: 0x0080, 0x1dba: 0x0080, 0x1dbb: 0x0080, + 0x1dbc: 0x0080, 0x1dbd: 0x0080, 0x1dbe: 0x0080, 0x1dbf: 0x0080, + // Block 0x77, offset 0x1dc0 + 0x1dc0: 0x0080, 0x1dc1: 0x0080, 0x1dc2: 0x0080, 0x1dc3: 0x0080, 0x1dc4: 0x0080, 0x1dc5: 0x0080, + 0x1dc6: 0x0080, 0x1dc7: 0x0080, 0x1dc8: 0x0040, 0x1dc9: 0x0080, 0x1dca: 0x0080, 0x1dcb: 0x0080, + 0x1dcc: 0x0080, 0x1dcd: 0x0080, 0x1dce: 0x0080, 0x1dcf: 0x0080, 0x1dd0: 0x0080, 0x1dd1: 0x0080, + 0x1dd2: 0x0080, 0x1dd3: 0x0080, 0x1dd4: 0x0080, 0x1dd5: 0x0080, 0x1dd6: 0x0080, 0x1dd7: 0x0080, + 0x1dd8: 0x0080, 0x1dd9: 0x0080, 0x1dda: 0x0080, 0x1ddb: 0x0080, 0x1ddc: 0x0080, 0x1ddd: 0x0080, + 0x1dde: 0x0080, 0x1ddf: 0x0080, 0x1de0: 0x0080, 0x1de1: 0x0080, 0x1de2: 0x0080, 0x1de3: 0x0080, + 0x1de4: 0x0040, 0x1de5: 0x0080, 0x1de6: 0x0080, 0x1de7: 0x0080, 0x1de8: 0x0080, 0x1de9: 0x0080, + 0x1dea: 0x0080, 0x1deb: 0x0080, 0x1dec: 0x0080, 0x1ded: 0x0080, 0x1dee: 0x0080, 0x1def: 0x0080, + 0x1df0: 0x0080, 0x1df1: 0x0080, 0x1df2: 0x0080, 0x1df3: 0x0080, 0x1df4: 0x0080, 0x1df5: 0x0080, + 0x1df6: 0x0080, 0x1df7: 0x0080, 0x1df8: 0x0080, 0x1df9: 0x0080, 0x1dfa: 0x0080, 0x1dfb: 0x0080, + 0x1dfc: 0x0080, 0x1dfd: 0x0080, 0x1dfe: 0x0080, 0x1dff: 0x0080, + // Block 0x78, offset 0x1e00 + 0x1e00: 0x0080, 0x1e01: 0x0080, 0x1e02: 0x0080, 0x1e03: 0x0080, 0x1e04: 0x0080, 0x1e05: 0x0080, + 0x1e06: 0x0080, 0x1e07: 0x0080, 0x1e08: 0x0040, 0x1e09: 0x0080, 0x1e0a: 0x0080, 0x1e0b: 0x0080, + 0x1e0c: 0x0080, 0x1e0d: 0x0080, 0x1e0e: 0x0080, 0x1e0f: 0x0080, 0x1e10: 0x0080, 0x1e11: 0x0080, + 0x1e12: 0x0080, 0x1e13: 0x0080, 0x1e14: 0x0080, 0x1e15: 0x0080, 0x1e16: 0x0080, 0x1e17: 0x0080, + 0x1e18: 0x0080, 0x1e19: 0x0080, 0x1e1a: 0x0080, 0x1e1b: 0x0080, 0x1e1c: 0x0080, 0x1e1d: 0x0080, + 0x1e1e: 0x0080, 0x1e1f: 0x0080, 0x1e20: 0x0080, 0x1e21: 0x0080, 0x1e22: 0x0080, 0x1e23: 0x0080, + 0x1e30: 0x1000, 0x1e31: 0x1000, 0x1e32: 0x1000, 0x1e33: 0x1000, 0x1e34: 0x1000, 0x1e35: 0x1000, + 0x1e36: 0x1000, 0x1e37: 0x1000, 0x1e38: 0x1000, 0x1e39: 0x1000, 0x1e3a: 0x1000, 0x1e3b: 0x1000, + 0x1e3c: 0x1000, 0x1e3d: 0x1000, 0x1e3e: 0x1000, 0x1e3f: 0x1000, + // Block 0x79, offset 0x1e40 + 0x1e40: 0x1000, 0x1e41: 0x1000, 0x1e42: 0x1000, 0x1e43: 0x1000, 0x1e44: 0x1000, 0x1e45: 0x1000, + 0x1e46: 0x1000, 0x1e4b: 0x0800, + 0x1e4c: 0x0800, 0x1e4d: 0x0800, 0x1e4e: 0x0800, 0x1e4f: 0x0800, 0x1e50: 0x0800, 0x1e51: 0x0800, + 0x1e52: 0x0800, 0x1e53: 0x0800, 0x1e54: 0x0800, 0x1e55: 0x0800, 0x1e56: 0x0800, 0x1e57: 0x0800, + 0x1e58: 0x0800, 0x1e59: 0x0800, 0x1e5a: 0x0800, 0x1e5b: 0x0800, 0x1e5c: 0x0800, 0x1e5d: 0x0800, + 0x1e5e: 0x0800, 0x1e5f: 0x0800, 0x1e60: 0x0800, 0x1e61: 0x0800, 0x1e62: 0x0800, 0x1e63: 0x0800, + 0x1e64: 0x0800, 0x1e65: 0x0800, 0x1e66: 0x0800, 0x1e67: 0x0800, 0x1e68: 0x0800, 0x1e69: 0x0800, + 0x1e6a: 0x0800, 0x1e6b: 0x0800, 0x1e6c: 0x0800, 0x1e6d: 0x0800, 0x1e6e: 0x0800, 0x1e6f: 0x0800, + 0x1e70: 0x0800, 0x1e71: 0x0800, 0x1e72: 0x0800, 0x1e73: 0x0800, 0x1e74: 0x0800, 0x1e75: 0x0800, + 0x1e76: 0x0800, 0x1e77: 0x0800, 0x1e78: 0x0800, 0x1e79: 0x0800, 0x1e7a: 0x0800, 0x1e7b: 0x0800, + // Block 0x7a, offset 0x1e80 + 0x1e9e: 0x0004, + // Block 0x7b, offset 0x1ec0 + 0x1ec0: 0x0004, 0x1ec1: 0x0004, 0x1ec2: 0x0004, 0x1ec3: 0x0004, 0x1ec4: 0x0004, 0x1ec5: 0x0004, + 0x1ec6: 0x0004, 0x1ec7: 0x0004, 0x1ec8: 0x0004, 0x1ec9: 0x0004, 0x1eca: 0x0004, 0x1ecb: 0x0004, + 0x1ecc: 0x0004, 0x1ecd: 0x0004, 0x1ece: 0x0004, 0x1ecf: 0x0004, + 0x1ee0: 0x0004, 0x1ee1: 0x0004, 0x1ee2: 0x0004, 0x1ee3: 0x0004, + 0x1ee4: 0x0004, 0x1ee5: 0x0004, 0x1ee6: 0x0004, 0x1ee7: 0x0004, 0x1ee8: 0x0004, 0x1ee9: 0x0004, + 0x1eea: 0x0004, 0x1eeb: 0x0004, 0x1eec: 0x0004, 0x1eed: 0x0004, 0x1eee: 0x0004, 0x1eef: 0x0004, + // Block 0x7c, offset 0x1f00 + 0x1f3f: 0x0002, + // Block 0x7d, offset 0x1f40 + 0x1f70: 0x0002, 0x1f71: 0x0002, 0x1f72: 0x0002, 0x1f73: 0x0002, 0x1f74: 0x0002, 0x1f75: 0x0002, + 0x1f76: 0x0002, 0x1f77: 0x0002, 0x1f78: 0x0002, 0x1f79: 0x0002, 0x1f7a: 0x0002, 0x1f7b: 0x0002, + // Block 0x7e, offset 0x1f80 + 0x1fbd: 0x0004, + // Block 0x7f, offset 0x1fc0 + 0x1fe0: 0x0004, + // Block 0x80, offset 0x2000 + 0x2036: 0x0004, 0x2037: 0x0004, 0x2038: 0x0004, 0x2039: 0x0004, 0x203a: 0x0004, + // Block 0x81, offset 0x2040 + 0x2041: 0x0004, 0x2042: 0x0004, 0x2043: 0x0004, 0x2045: 0x0004, + 0x2046: 0x0004, + 0x204c: 0x0004, 0x204d: 0x0004, 0x204e: 0x0004, 0x204f: 0x0004, + 0x2078: 0x0004, 0x2079: 0x0004, 0x207a: 0x0004, + 0x207f: 0x0004, + // Block 0x82, offset 0x2080 + 0x20a5: 0x0004, 0x20a6: 0x0004, + // Block 0x83, offset 0x20c0 + 0x20e4: 0x0004, 0x20e5: 0x0004, 0x20e6: 0x0004, 0x20e7: 0x0004, + // Block 0x84, offset 0x2100 + 0x212b: 0x0004, 0x212c: 0x0004, + // Block 0x85, offset 0x2140 + 0x217d: 0x0004, 0x217e: 0x0004, 0x217f: 0x0004, + // Block 0x86, offset 0x2180 + 0x2186: 0x0004, 0x2187: 0x0004, 0x2188: 0x0004, 0x2189: 0x0004, 0x218a: 0x0004, 0x218b: 0x0004, + 0x218c: 0x0004, 0x218d: 0x0004, 0x218e: 0x0004, 0x218f: 0x0004, 0x2190: 0x0004, + // Block 0x87, offset 0x21c0 + 0x21c2: 0x0004, 0x21c3: 0x0004, 0x21c4: 0x0004, 0x21c5: 0x0004, + // Block 0x88, offset 0x2200 + 0x2200: 0x0400, 0x2201: 0x0004, 0x2202: 0x0400, + 0x2238: 0x0004, 0x2239: 0x0004, 0x223a: 0x0004, 0x223b: 0x0004, + 0x223c: 0x0004, 0x223d: 0x0004, 0x223e: 0x0004, 0x223f: 0x0004, + // Block 0x89, offset 0x2240 + 0x2240: 0x0004, 0x2241: 0x0004, 0x2242: 0x0004, 0x2243: 0x0004, 0x2244: 0x0004, 0x2245: 0x0004, + 0x2246: 0x0004, + 0x2270: 0x0004, 0x2273: 0x0004, 0x2274: 0x0004, + 0x227f: 0x0004, + // Block 0x8a, offset 0x2280 + 0x2280: 0x0004, 0x2281: 0x0004, 0x2282: 0x0400, + 0x22b0: 0x0400, 0x22b1: 0x0400, 0x22b2: 0x0400, 0x22b3: 0x0004, 0x22b4: 0x0004, 0x22b5: 0x0004, + 0x22b6: 0x0004, 0x22b7: 0x0400, 0x22b8: 0x0400, 0x22b9: 0x0004, 0x22ba: 0x0004, + 0x22bd: 0x0100, + // Block 0x8b, offset 0x22c0 + 0x22c2: 0x0004, + 0x22cd: 0x0100, + // Block 0x8c, offset 0x2300 + 0x2300: 0x0004, 0x2301: 0x0004, 0x2302: 0x0004, + 0x2327: 0x0004, 0x2328: 0x0004, 0x2329: 0x0004, + 0x232a: 0x0004, 0x232b: 0x0004, 0x232c: 0x0400, 0x232d: 0x0004, 0x232e: 0x0004, 0x232f: 0x0004, + 0x2330: 0x0004, 0x2331: 0x0004, 0x2332: 0x0004, 0x2333: 0x0004, 0x2334: 0x0004, + // Block 0x8d, offset 0x2340 + 0x2345: 0x0400, + 0x2346: 0x0400, + 0x2373: 0x0004, + // Block 0x8e, offset 0x2380 + 0x2380: 0x0004, 0x2381: 0x0004, 0x2382: 0x0400, + 0x23b3: 0x0400, 0x23b4: 0x0400, 0x23b5: 0x0400, + 0x23b6: 0x0004, 0x23b7: 0x0004, 0x23b8: 0x0004, 0x23b9: 0x0004, 0x23ba: 0x0004, 0x23bb: 0x0004, + 0x23bc: 0x0004, 0x23bd: 0x0004, 0x23be: 0x0004, 0x23bf: 0x0400, + // Block 0x8f, offset 0x23c0 + 0x23c0: 0x0400, 0x23c2: 0x0100, 0x23c3: 0x0100, + 0x23c9: 0x0004, 0x23ca: 0x0004, 0x23cb: 0x0004, + 0x23cc: 0x0004, 0x23ce: 0x0400, 0x23cf: 0x0004, + // Block 0x90, offset 0x2400 + 0x242c: 0x0400, 0x242d: 0x0400, 0x242e: 0x0400, 0x242f: 0x0004, + 0x2430: 0x0004, 0x2431: 0x0004, 0x2432: 0x0400, 0x2433: 0x0400, 0x2434: 0x0004, 0x2435: 0x0400, + 0x2436: 0x0004, 0x2437: 0x0004, + 0x243e: 0x0004, + // Block 0x91, offset 0x2440 + 0x2441: 0x0004, + // Block 0x92, offset 0x2480 + 0x249f: 0x0004, 0x24a0: 0x0400, 0x24a1: 0x0400, 0x24a2: 0x0400, 0x24a3: 0x0004, + 0x24a4: 0x0004, 0x24a5: 0x0004, 0x24a6: 0x0004, 0x24a7: 0x0004, 0x24a8: 0x0004, 0x24a9: 0x0004, + 0x24aa: 0x0004, + // Block 0x93, offset 0x24c0 + 0x24c0: 0x0004, 0x24c1: 0x0400, 0x24c2: 0x0400, 0x24c3: 0x0400, 0x24c4: 0x0400, + 0x24c7: 0x0400, 0x24c8: 0x0400, 0x24cb: 0x0400, + 0x24cc: 0x0400, 0x24cd: 0x0400, + 0x24d7: 0x0004, + 0x24e2: 0x0400, 0x24e3: 0x0400, + 0x24e6: 0x0004, 0x24e7: 0x0004, 0x24e8: 0x0004, 0x24e9: 0x0004, + 0x24ea: 0x0004, 0x24eb: 0x0004, 0x24ec: 0x0004, + 0x24f0: 0x0004, 0x24f1: 0x0004, 0x24f2: 0x0004, 0x24f3: 0x0004, 0x24f4: 0x0004, + // Block 0x94, offset 0x2500 + 0x2535: 0x0400, + 0x2536: 0x0400, 0x2537: 0x0400, 0x2538: 0x0004, 0x2539: 0x0004, 0x253a: 0x0004, 0x253b: 0x0004, + 0x253c: 0x0004, 0x253d: 0x0004, 0x253e: 0x0004, 0x253f: 0x0004, + // Block 0x95, offset 0x2540 + 0x2540: 0x0400, 0x2541: 0x0400, 0x2542: 0x0004, 0x2543: 0x0004, 0x2544: 0x0004, 0x2545: 0x0400, + 0x2546: 0x0004, + 0x255e: 0x0004, + // Block 0x96, offset 0x2580 + 0x25b0: 0x0004, 0x25b1: 0x0400, 0x25b2: 0x0400, 0x25b3: 0x0004, 0x25b4: 0x0004, 0x25b5: 0x0004, + 0x25b6: 0x0004, 0x25b7: 0x0004, 0x25b8: 0x0004, 0x25b9: 0x0400, 0x25ba: 0x0004, 0x25bb: 0x0400, + 0x25bc: 0x0400, 0x25bd: 0x0004, 0x25be: 0x0400, 0x25bf: 0x0004, + // Block 0x97, offset 0x25c0 + 0x25c0: 0x0004, 0x25c1: 0x0400, 0x25c2: 0x0004, 0x25c3: 0x0004, + // Block 0x98, offset 0x2600 + 0x262f: 0x0004, + 0x2630: 0x0400, 0x2631: 0x0400, 0x2632: 0x0004, 0x2633: 0x0004, 0x2634: 0x0004, 0x2635: 0x0004, + 0x2638: 0x0400, 0x2639: 0x0400, 0x263a: 0x0400, 0x263b: 0x0400, + 0x263c: 0x0004, 0x263d: 0x0004, 0x263e: 0x0400, 0x263f: 0x0004, + // Block 0x99, offset 0x2640 + 0x2640: 0x0004, + 0x265c: 0x0004, 0x265d: 0x0004, + // Block 0x9a, offset 0x2680 + 0x26b0: 0x0400, 0x26b1: 0x0400, 0x26b2: 0x0400, 0x26b3: 0x0004, 0x26b4: 0x0004, 0x26b5: 0x0004, + 0x26b6: 0x0004, 0x26b7: 0x0004, 0x26b8: 0x0004, 0x26b9: 0x0004, 0x26ba: 0x0004, 0x26bb: 0x0400, + 0x26bc: 0x0400, 0x26bd: 0x0004, 0x26be: 0x0400, 0x26bf: 0x0004, + // Block 0x9b, offset 0x26c0 + 0x26c0: 0x0004, + // Block 0x9c, offset 0x2700 + 0x272b: 0x0004, 0x272c: 0x0400, 0x272d: 0x0004, 0x272e: 0x0400, 0x272f: 0x0400, + 0x2730: 0x0004, 0x2731: 0x0004, 0x2732: 0x0004, 0x2733: 0x0004, 0x2734: 0x0004, 0x2735: 0x0004, + 0x2736: 0x0400, 0x2737: 0x0004, + // Block 0x9d, offset 0x2740 + 0x275d: 0x0004, + 0x275e: 0x0004, 0x275f: 0x0004, 0x2762: 0x0004, 0x2763: 0x0004, + 0x2764: 0x0004, 0x2765: 0x0004, 0x2766: 0x0400, 0x2767: 0x0004, 0x2768: 0x0004, 0x2769: 0x0004, + 0x276a: 0x0004, 0x276b: 0x0004, + // Block 0x9e, offset 0x2780 + 0x27ac: 0x0400, 0x27ad: 0x0400, 0x27ae: 0x0400, 0x27af: 0x0004, + 0x27b0: 0x0004, 0x27b1: 0x0004, 0x27b2: 0x0004, 0x27b3: 0x0004, 0x27b4: 0x0004, 0x27b5: 0x0004, + 0x27b6: 0x0004, 0x27b7: 0x0004, 0x27b8: 0x0400, 0x27b9: 0x0004, 0x27ba: 0x0004, + // Block 0x9f, offset 0x27c0 + 0x27f0: 0x0004, 0x27f1: 0x0400, 0x27f2: 0x0400, 0x27f3: 0x0400, 0x27f4: 0x0400, 0x27f5: 0x0400, + 0x27f7: 0x0400, 0x27f8: 0x0400, 0x27fb: 0x0004, + 0x27fc: 0x0004, 0x27fd: 0x0400, 0x27fe: 0x0004, 0x27ff: 0x0100, + // Block 0xa0, offset 0x2800 + 0x2800: 0x0400, 0x2801: 0x0100, 0x2802: 0x0400, 0x2803: 0x0004, + // Block 0xa1, offset 0x2840 + 0x2851: 0x0400, + 0x2852: 0x0400, 0x2853: 0x0400, 0x2854: 0x0004, 0x2855: 0x0004, 0x2856: 0x0004, 0x2857: 0x0004, + 0x285a: 0x0004, 0x285b: 0x0004, 0x285c: 0x0400, 0x285d: 0x0400, + 0x285e: 0x0400, 0x285f: 0x0400, 0x2860: 0x0004, + 0x2864: 0x0400, + // Block 0xa2, offset 0x2880 + 0x2881: 0x0004, 0x2882: 0x0004, 0x2883: 0x0004, 0x2884: 0x0004, 0x2885: 0x0004, + 0x2886: 0x0004, 0x2887: 0x0004, 0x2888: 0x0004, 0x2889: 0x0004, 0x288a: 0x0004, + 0x28b3: 0x0004, 0x28b4: 0x0004, 0x28b5: 0x0004, + 0x28b6: 0x0004, 0x28b7: 0x0004, 0x28b8: 0x0004, 0x28b9: 0x0400, 0x28ba: 0x0100, 0x28bb: 0x0004, + 0x28bc: 0x0004, 0x28bd: 0x0004, 0x28be: 0x0004, + // Block 0xa3, offset 0x28c0 + 0x28c7: 0x0004, + 0x28d1: 0x0004, + 0x28d2: 0x0004, 0x28d3: 0x0004, 0x28d4: 0x0004, 0x28d5: 0x0004, 0x28d6: 0x0004, 0x28d7: 0x0400, + 0x28d8: 0x0400, 0x28d9: 0x0004, 0x28da: 0x0004, 0x28db: 0x0004, + // Block 0xa4, offset 0x2900 + 0x2904: 0x0100, 0x2905: 0x0100, + 0x2906: 0x0100, 0x2907: 0x0100, 0x2908: 0x0100, 0x2909: 0x0100, 0x290a: 0x0004, 0x290b: 0x0004, + 0x290c: 0x0004, 0x290d: 0x0004, 0x290e: 0x0004, 0x290f: 0x0004, 0x2910: 0x0004, 0x2911: 0x0004, + 0x2912: 0x0004, 0x2913: 0x0004, 0x2914: 0x0004, 0x2915: 0x0004, 0x2916: 0x0004, 0x2917: 0x0400, + 0x2918: 0x0004, 0x2919: 0x0004, + // Block 0xa5, offset 0x2940 + 0x296f: 0x0400, + 0x2970: 0x0004, 0x2971: 0x0004, 0x2972: 0x0004, 0x2973: 0x0004, 0x2974: 0x0004, 0x2975: 0x0004, + 0x2976: 0x0004, 0x2978: 0x0004, 0x2979: 0x0004, 0x297a: 0x0004, 0x297b: 0x0004, + 0x297c: 0x0004, 0x297d: 0x0004, 0x297e: 0x0400, 0x297f: 0x0004, + // Block 0xa6, offset 0x2980 + 0x2992: 0x0004, 0x2993: 0x0004, 0x2994: 0x0004, 0x2995: 0x0004, 0x2996: 0x0004, 0x2997: 0x0004, + 0x2998: 0x0004, 0x2999: 0x0004, 0x299a: 0x0004, 0x299b: 0x0004, 0x299c: 0x0004, 0x299d: 0x0004, + 0x299e: 0x0004, 0x299f: 0x0004, 0x29a0: 0x0004, 0x29a1: 0x0004, 0x29a2: 0x0004, 0x29a3: 0x0004, + 0x29a4: 0x0004, 0x29a5: 0x0004, 0x29a6: 0x0004, 0x29a7: 0x0004, 0x29a9: 0x0400, + 0x29aa: 0x0004, 0x29ab: 0x0004, 0x29ac: 0x0004, 0x29ad: 0x0004, 0x29ae: 0x0004, 0x29af: 0x0004, + 0x29b0: 0x0004, 0x29b1: 0x0400, 0x29b2: 0x0004, 0x29b3: 0x0004, 0x29b4: 0x0400, 0x29b5: 0x0004, + 0x29b6: 0x0004, + // Block 0xa7, offset 0x29c0 + 0x29f1: 0x0004, 0x29f2: 0x0004, 0x29f3: 0x0004, 0x29f4: 0x0004, 0x29f5: 0x0004, + 0x29f6: 0x0004, 0x29fa: 0x0004, + 0x29fc: 0x0004, 0x29fd: 0x0004, 0x29ff: 0x0004, + // Block 0xa8, offset 0x2a00 + 0x2a00: 0x0004, 0x2a01: 0x0004, 0x2a02: 0x0004, 0x2a03: 0x0004, 0x2a04: 0x0004, 0x2a05: 0x0004, + 0x2a06: 0x0100, 0x2a07: 0x0004, + // Block 0xa9, offset 0x2a40 + 0x2a4a: 0x0400, 0x2a4b: 0x0400, + 0x2a4c: 0x0400, 0x2a4d: 0x0400, 0x2a4e: 0x0400, 0x2a50: 0x0004, 0x2a51: 0x0004, + 0x2a53: 0x0400, 0x2a54: 0x0400, 0x2a55: 0x0004, 0x2a56: 0x0400, 0x2a57: 0x0004, + // Block 0xaa, offset 0x2a80 + 0x2ab3: 0x0004, 0x2ab4: 0x0004, 0x2ab5: 0x0400, + 0x2ab6: 0x0400, + // Block 0xab, offset 0x2ac0 + 0x2ac0: 0x0004, 0x2ac1: 0x0004, 0x2ac2: 0x0100, 0x2ac3: 0x0400, + 0x2af4: 0x0400, 0x2af5: 0x0400, + 0x2af6: 0x0004, 0x2af7: 0x0004, 0x2af8: 0x0004, 0x2af9: 0x0004, 0x2afa: 0x0004, + 0x2afe: 0x0400, 0x2aff: 0x0400, + // Block 0xac, offset 0x2b00 + 0x2b00: 0x0004, 0x2b01: 0x0400, 0x2b02: 0x0004, + // Block 0xad, offset 0x2b40 + 0x2b70: 0x0002, 0x2b71: 0x0002, 0x2b72: 0x0002, 0x2b73: 0x0002, 0x2b74: 0x0002, 0x2b75: 0x0002, + 0x2b76: 0x0002, 0x2b77: 0x0002, 0x2b78: 0x0002, 0x2b79: 0x0002, 0x2b7a: 0x0002, 0x2b7b: 0x0002, + 0x2b7c: 0x0002, 0x2b7d: 0x0002, 0x2b7e: 0x0002, 0x2b7f: 0x0002, + // Block 0xae, offset 0x2b80 + 0x2b80: 0x0004, + 0x2b87: 0x0004, 0x2b88: 0x0004, 0x2b89: 0x0004, 0x2b8a: 0x0004, 0x2b8b: 0x0004, + 0x2b8c: 0x0004, 0x2b8d: 0x0004, 0x2b8e: 0x0004, 0x2b8f: 0x0004, 0x2b90: 0x0004, 0x2b91: 0x0004, + 0x2b92: 0x0004, 0x2b93: 0x0004, 0x2b94: 0x0004, 0x2b95: 0x0004, + // Block 0xaf, offset 0x2bc0 + 0x2bf0: 0x0004, 0x2bf1: 0x0004, 0x2bf2: 0x0004, 0x2bf3: 0x0004, 0x2bf4: 0x0004, + // Block 0xb0, offset 0x2c00 + 0x2c30: 0x0004, 0x2c31: 0x0004, 0x2c32: 0x0004, 0x2c33: 0x0004, 0x2c34: 0x0004, 0x2c35: 0x0004, + 0x2c36: 0x0004, + // Block 0xb1, offset 0x2c40 + 0x2c4f: 0x0004, 0x2c51: 0x0400, + 0x2c52: 0x0400, 0x2c53: 0x0400, 0x2c54: 0x0400, 0x2c55: 0x0400, 0x2c56: 0x0400, 0x2c57: 0x0400, + 0x2c58: 0x0400, 0x2c59: 0x0400, 0x2c5a: 0x0400, 0x2c5b: 0x0400, 0x2c5c: 0x0400, 0x2c5d: 0x0400, + 0x2c5e: 0x0400, 0x2c5f: 0x0400, 0x2c60: 0x0400, 0x2c61: 0x0400, 0x2c62: 0x0400, 0x2c63: 0x0400, + 0x2c64: 0x0400, 0x2c65: 0x0400, 0x2c66: 0x0400, 0x2c67: 0x0400, 0x2c68: 0x0400, 0x2c69: 0x0400, + 0x2c6a: 0x0400, 0x2c6b: 0x0400, 0x2c6c: 0x0400, 0x2c6d: 0x0400, 0x2c6e: 0x0400, 0x2c6f: 0x0400, + 0x2c70: 0x0400, 0x2c71: 0x0400, 0x2c72: 0x0400, 0x2c73: 0x0400, 0x2c74: 0x0400, 0x2c75: 0x0400, + 0x2c76: 0x0400, 0x2c77: 0x0400, 0x2c78: 0x0400, 0x2c79: 0x0400, 0x2c7a: 0x0400, 0x2c7b: 0x0400, + 0x2c7c: 0x0400, 0x2c7d: 0x0400, 0x2c7e: 0x0400, 0x2c7f: 0x0400, + // Block 0xb2, offset 0x2c80 + 0x2c80: 0x0400, 0x2c81: 0x0400, 0x2c82: 0x0400, 0x2c83: 0x0400, 0x2c84: 0x0400, 0x2c85: 0x0400, + 0x2c86: 0x0400, 0x2c87: 0x0400, + 0x2c8f: 0x0004, 0x2c90: 0x0004, 0x2c91: 0x0004, + 0x2c92: 0x0004, + // Block 0xb3, offset 0x2cc0 + 0x2ce4: 0x0004, + 0x2cf0: 0x0400, 0x2cf1: 0x0400, + // Block 0xb4, offset 0x2d00 + 0x2d1d: 0x0004, + 0x2d1e: 0x0004, 0x2d20: 0x0002, 0x2d21: 0x0002, 0x2d22: 0x0002, 0x2d23: 0x0002, + // Block 0xb5, offset 0x2d40 + 0x2d40: 0x0004, 0x2d41: 0x0004, 0x2d42: 0x0004, 0x2d43: 0x0004, 0x2d44: 0x0004, 0x2d45: 0x0004, + 0x2d46: 0x0004, 0x2d47: 0x0004, 0x2d48: 0x0004, 0x2d49: 0x0004, 0x2d4a: 0x0004, 0x2d4b: 0x0004, + 0x2d4c: 0x0004, 0x2d4d: 0x0004, 0x2d4e: 0x0004, 0x2d4f: 0x0004, 0x2d50: 0x0004, 0x2d51: 0x0004, + 0x2d52: 0x0004, 0x2d53: 0x0004, 0x2d54: 0x0004, 0x2d55: 0x0004, 0x2d56: 0x0004, 0x2d57: 0x0004, + 0x2d58: 0x0004, 0x2d59: 0x0004, 0x2d5a: 0x0004, 0x2d5b: 0x0004, 0x2d5c: 0x0004, 0x2d5d: 0x0004, + 0x2d5e: 0x0004, 0x2d5f: 0x0004, 0x2d60: 0x0004, 0x2d61: 0x0004, 0x2d62: 0x0004, 0x2d63: 0x0004, + 0x2d64: 0x0004, 0x2d65: 0x0004, 0x2d66: 0x0004, 0x2d67: 0x0004, 0x2d68: 0x0004, 0x2d69: 0x0004, + 0x2d6a: 0x0004, 0x2d6b: 0x0004, 0x2d6c: 0x0004, 0x2d6d: 0x0004, + 0x2d70: 0x0004, 0x2d71: 0x0004, 0x2d72: 0x0004, 0x2d73: 0x0004, 0x2d74: 0x0004, 0x2d75: 0x0004, + 0x2d76: 0x0004, 0x2d77: 0x0004, 0x2d78: 0x0004, 0x2d79: 0x0004, 0x2d7a: 0x0004, 0x2d7b: 0x0004, + 0x2d7c: 0x0004, 0x2d7d: 0x0004, 0x2d7e: 0x0004, 0x2d7f: 0x0004, + // Block 0xb6, offset 0x2d80 + 0x2d80: 0x0004, 0x2d81: 0x0004, 0x2d82: 0x0004, 0x2d83: 0x0004, 0x2d84: 0x0004, 0x2d85: 0x0004, + 0x2d86: 0x0004, + // Block 0xb7, offset 0x2dc0 + 0x2de5: 0x0004, 0x2de6: 0x0400, 0x2de7: 0x0004, 0x2de8: 0x0004, 0x2de9: 0x0004, + 0x2ded: 0x0400, 0x2dee: 0x0004, 0x2def: 0x0004, + 0x2df0: 0x0004, 0x2df1: 0x0004, 0x2df2: 0x0004, 0x2df3: 0x0002, 0x2df4: 0x0002, 0x2df5: 0x0002, + 0x2df6: 0x0002, 0x2df7: 0x0002, 0x2df8: 0x0002, 0x2df9: 0x0002, 0x2dfa: 0x0002, 0x2dfb: 0x0004, + 0x2dfc: 0x0004, 0x2dfd: 0x0004, 0x2dfe: 0x0004, 0x2dff: 0x0004, + // Block 0xb8, offset 0x2e00 + 0x2e00: 0x0004, 0x2e01: 0x0004, 0x2e02: 0x0004, 0x2e05: 0x0004, + 0x2e06: 0x0004, 0x2e07: 0x0004, 0x2e08: 0x0004, 0x2e09: 0x0004, 0x2e0a: 0x0004, 0x2e0b: 0x0004, + 0x2e2a: 0x0004, 0x2e2b: 0x0004, 0x2e2c: 0x0004, 0x2e2d: 0x0004, + // Block 0xb9, offset 0x2e40 + 0x2e42: 0x0004, 0x2e43: 0x0004, 0x2e44: 0x0004, + // Block 0xba, offset 0x2e80 + 0x2e80: 0x0004, 0x2e81: 0x0004, 0x2e82: 0x0004, 0x2e83: 0x0004, 0x2e84: 0x0004, 0x2e85: 0x0004, + 0x2e86: 0x0004, 0x2e87: 0x0004, 0x2e88: 0x0004, 0x2e89: 0x0004, 0x2e8a: 0x0004, 0x2e8b: 0x0004, + 0x2e8c: 0x0004, 0x2e8d: 0x0004, 0x2e8e: 0x0004, 0x2e8f: 0x0004, 0x2e90: 0x0004, 0x2e91: 0x0004, + 0x2e92: 0x0004, 0x2e93: 0x0004, 0x2e94: 0x0004, 0x2e95: 0x0004, 0x2e96: 0x0004, 0x2e97: 0x0004, + 0x2e98: 0x0004, 0x2e99: 0x0004, 0x2e9a: 0x0004, 0x2e9b: 0x0004, 0x2e9c: 0x0004, 0x2e9d: 0x0004, + 0x2e9e: 0x0004, 0x2e9f: 0x0004, 0x2ea0: 0x0004, 0x2ea1: 0x0004, 0x2ea2: 0x0004, 0x2ea3: 0x0004, + 0x2ea4: 0x0004, 0x2ea5: 0x0004, 0x2ea6: 0x0004, 0x2ea7: 0x0004, 0x2ea8: 0x0004, 0x2ea9: 0x0004, + 0x2eaa: 0x0004, 0x2eab: 0x0004, 0x2eac: 0x0004, 0x2ead: 0x0004, 0x2eae: 0x0004, 0x2eaf: 0x0004, + 0x2eb0: 0x0004, 0x2eb1: 0x0004, 0x2eb2: 0x0004, 0x2eb3: 0x0004, 0x2eb4: 0x0004, 0x2eb5: 0x0004, + 0x2eb6: 0x0004, 0x2ebb: 0x0004, + 0x2ebc: 0x0004, 0x2ebd: 0x0004, 0x2ebe: 0x0004, 0x2ebf: 0x0004, + // Block 0xbb, offset 0x2ec0 + 0x2ec0: 0x0004, 0x2ec1: 0x0004, 0x2ec2: 0x0004, 0x2ec3: 0x0004, 0x2ec4: 0x0004, 0x2ec5: 0x0004, + 0x2ec6: 0x0004, 0x2ec7: 0x0004, 0x2ec8: 0x0004, 0x2ec9: 0x0004, 0x2eca: 0x0004, 0x2ecb: 0x0004, + 0x2ecc: 0x0004, 0x2ecd: 0x0004, 0x2ece: 0x0004, 0x2ecf: 0x0004, 0x2ed0: 0x0004, 0x2ed1: 0x0004, + 0x2ed2: 0x0004, 0x2ed3: 0x0004, 0x2ed4: 0x0004, 0x2ed5: 0x0004, 0x2ed6: 0x0004, 0x2ed7: 0x0004, + 0x2ed8: 0x0004, 0x2ed9: 0x0004, 0x2eda: 0x0004, 0x2edb: 0x0004, 0x2edc: 0x0004, 0x2edd: 0x0004, + 0x2ede: 0x0004, 0x2edf: 0x0004, 0x2ee0: 0x0004, 0x2ee1: 0x0004, 0x2ee2: 0x0004, 0x2ee3: 0x0004, + 0x2ee4: 0x0004, 0x2ee5: 0x0004, 0x2ee6: 0x0004, 0x2ee7: 0x0004, 0x2ee8: 0x0004, 0x2ee9: 0x0004, + 0x2eea: 0x0004, 0x2eeb: 0x0004, 0x2eec: 0x0004, + 0x2ef5: 0x0004, + // Block 0xbc, offset 0x2f00 + 0x2f04: 0x0004, + 0x2f1b: 0x0004, 0x2f1c: 0x0004, 0x2f1d: 0x0004, + 0x2f1e: 0x0004, 0x2f1f: 0x0004, 0x2f21: 0x0004, 0x2f22: 0x0004, 0x2f23: 0x0004, + 0x2f24: 0x0004, 0x2f25: 0x0004, 0x2f26: 0x0004, 0x2f27: 0x0004, 0x2f28: 0x0004, 0x2f29: 0x0004, + 0x2f2a: 0x0004, 0x2f2b: 0x0004, 0x2f2c: 0x0004, 0x2f2d: 0x0004, 0x2f2e: 0x0004, 0x2f2f: 0x0004, + // Block 0xbd, offset 0x2f40 + 0x2f40: 0x0004, 0x2f41: 0x0004, 0x2f42: 0x0004, 0x2f43: 0x0004, 0x2f44: 0x0004, 0x2f45: 0x0004, + 0x2f46: 0x0004, 0x2f48: 0x0004, 0x2f49: 0x0004, 0x2f4a: 0x0004, 0x2f4b: 0x0004, + 0x2f4c: 0x0004, 0x2f4d: 0x0004, 0x2f4e: 0x0004, 0x2f4f: 0x0004, 0x2f50: 0x0004, 0x2f51: 0x0004, + 0x2f52: 0x0004, 0x2f53: 0x0004, 0x2f54: 0x0004, 0x2f55: 0x0004, 0x2f56: 0x0004, 0x2f57: 0x0004, + 0x2f58: 0x0004, 0x2f5b: 0x0004, 0x2f5c: 0x0004, 0x2f5d: 0x0004, + 0x2f5e: 0x0004, 0x2f5f: 0x0004, 0x2f60: 0x0004, 0x2f61: 0x0004, 0x2f63: 0x0004, + 0x2f64: 0x0004, 0x2f66: 0x0004, 0x2f67: 0x0004, 0x2f68: 0x0004, 0x2f69: 0x0004, + 0x2f6a: 0x0004, + // Block 0xbe, offset 0x2f80 + 0x2f8f: 0x0004, + // Block 0xbf, offset 0x2fc0 + 0x2fee: 0x0004, + // Block 0xc0, offset 0x3000 + 0x302c: 0x0004, 0x302d: 0x0004, 0x302e: 0x0004, 0x302f: 0x0004, + // Block 0xc1, offset 0x3040 + 0x3050: 0x0004, 0x3051: 0x0004, + 0x3052: 0x0004, 0x3053: 0x0004, 0x3054: 0x0004, 0x3055: 0x0004, 0x3056: 0x0004, + // Block 0xc2, offset 0x3080 + 0x3084: 0x0004, 0x3085: 0x0004, + 0x3086: 0x0004, 0x3087: 0x0004, 0x3088: 0x0004, 0x3089: 0x0004, 0x308a: 0x0004, + // Block 0xc3, offset 0x30c0 + 0x30cd: 0x0008, 0x30ce: 0x0008, 0x30cf: 0x0008, + 0x30ef: 0x0008, + // Block 0xc4, offset 0x3100 + 0x312c: 0x0008, 0x312d: 0x0008, 0x312e: 0x0008, 0x312f: 0x0008, + 0x3130: 0x0008, 0x3131: 0x0008, + 0x313e: 0x0008, 0x313f: 0x0008, + // Block 0xc5, offset 0x3140 + 0x314e: 0x0008, 0x3151: 0x0008, + 0x3152: 0x0008, 0x3153: 0x0008, 0x3154: 0x0008, 0x3155: 0x0008, 0x3156: 0x0008, 0x3157: 0x0008, + 0x3158: 0x0008, 0x3159: 0x0008, 0x315a: 0x0008, + 0x316d: 0x0008, 0x316e: 0x0008, 0x316f: 0x0008, + 0x3170: 0x0008, 0x3171: 0x0008, 0x3172: 0x0008, 0x3173: 0x0008, 0x3174: 0x0008, 0x3175: 0x0008, + 0x3176: 0x0008, 0x3177: 0x0008, 0x3178: 0x0008, 0x3179: 0x0008, 0x317a: 0x0008, 0x317b: 0x0008, + 0x317c: 0x0008, 0x317d: 0x0008, 0x317e: 0x0008, 0x317f: 0x0008, + // Block 0xc6, offset 0x3180 + 0x3180: 0x0008, 0x3181: 0x0008, 0x3182: 0x0008, 0x3183: 0x0008, 0x3184: 0x0008, 0x3185: 0x0008, + 0x3186: 0x0008, 0x3187: 0x0008, 0x3188: 0x0008, 0x3189: 0x0008, 0x318a: 0x0008, 0x318b: 0x0008, + 0x318c: 0x0008, 0x318d: 0x0008, 0x318e: 0x0008, 0x318f: 0x0008, 0x3190: 0x0008, 0x3191: 0x0008, + 0x3192: 0x0008, 0x3193: 0x0008, 0x3194: 0x0008, 0x3195: 0x0008, 0x3196: 0x0008, 0x3197: 0x0008, + 0x3198: 0x0008, 0x3199: 0x0008, 0x319a: 0x0008, 0x319b: 0x0008, 0x319c: 0x0008, 0x319d: 0x0008, + 0x319e: 0x0008, 0x319f: 0x0008, 0x31a0: 0x0008, 0x31a1: 0x0008, 0x31a2: 0x0008, 0x31a3: 0x0008, + 0x31a4: 0x0008, 0x31a5: 0x0008, 0x31a6: 0x0200, 0x31a7: 0x0200, 0x31a8: 0x0200, 0x31a9: 0x0200, + 0x31aa: 0x0200, 0x31ab: 0x0200, 0x31ac: 0x0200, 0x31ad: 0x0200, 0x31ae: 0x0200, 0x31af: 0x0200, + 0x31b0: 0x0200, 0x31b1: 0x0200, 0x31b2: 0x0200, 0x31b3: 0x0200, 0x31b4: 0x0200, 0x31b5: 0x0200, + 0x31b6: 0x0200, 0x31b7: 0x0200, 0x31b8: 0x0200, 0x31b9: 0x0200, 0x31ba: 0x0200, 0x31bb: 0x0200, + 0x31bc: 0x0200, 0x31bd: 0x0200, 0x31be: 0x0200, 0x31bf: 0x0200, + // Block 0xc7, offset 0x31c0 + 0x31c1: 0x0008, 0x31c2: 0x0008, 0x31c3: 0x0008, 0x31c4: 0x0008, 0x31c5: 0x0008, + 0x31c6: 0x0008, 0x31c7: 0x0008, 0x31c8: 0x0008, 0x31c9: 0x0008, 0x31ca: 0x0008, 0x31cb: 0x0008, + 0x31cc: 0x0008, 0x31cd: 0x0008, 0x31ce: 0x0008, 0x31cf: 0x0008, + 0x31da: 0x0008, + 0x31ef: 0x0008, + 0x31f2: 0x0008, 0x31f3: 0x0008, 0x31f4: 0x0008, 0x31f5: 0x0008, + 0x31f6: 0x0008, 0x31f7: 0x0008, 0x31f8: 0x0008, 0x31f9: 0x0008, 0x31fa: 0x0008, + 0x31fc: 0x0008, 0x31fd: 0x0008, 0x31fe: 0x0008, 0x31ff: 0x0008, + // Block 0xc8, offset 0x3200 + 0x3209: 0x0008, 0x320a: 0x0008, 0x320b: 0x0008, + 0x320c: 0x0008, 0x320d: 0x0008, 0x320e: 0x0008, 0x320f: 0x0008, 0x3210: 0x0008, 0x3211: 0x0008, + 0x3212: 0x0008, 0x3213: 0x0008, 0x3214: 0x0008, 0x3215: 0x0008, 0x3216: 0x0008, 0x3217: 0x0008, + 0x3218: 0x0008, 0x3219: 0x0008, 0x321a: 0x0008, 0x321b: 0x0008, 0x321c: 0x0008, 0x321d: 0x0008, + 0x321e: 0x0008, 0x321f: 0x0008, 0x3220: 0x0008, 0x3221: 0x0008, 0x3222: 0x0008, 0x3223: 0x0008, + 0x3224: 0x0008, 0x3225: 0x0008, 0x3226: 0x0008, 0x3227: 0x0008, 0x3228: 0x0008, 0x3229: 0x0008, + 0x322a: 0x0008, 0x322b: 0x0008, 0x322c: 0x0008, 0x322d: 0x0008, 0x322e: 0x0008, 0x322f: 0x0008, + 0x3230: 0x0008, 0x3231: 0x0008, 0x3232: 0x0008, 0x3233: 0x0008, 0x3234: 0x0008, 0x3235: 0x0008, + 0x3236: 0x0008, 0x3237: 0x0008, 0x3238: 0x0008, 0x3239: 0x0008, 0x323a: 0x0008, 0x323b: 0x0008, + 0x323c: 0x0008, 0x323d: 0x0008, 0x323e: 0x0008, 0x323f: 0x0008, + // Block 0xc9, offset 0x3240 + 0x3240: 0x0008, 0x3241: 0x0008, 0x3242: 0x0008, 0x3243: 0x0008, 0x3244: 0x0008, 0x3245: 0x0008, + 0x3246: 0x0008, 0x3247: 0x0008, 0x3248: 0x0008, 0x3249: 0x0008, 0x324a: 0x0008, 0x324b: 0x0008, + 0x324c: 0x0008, 0x324d: 0x0008, 0x324e: 0x0008, 0x324f: 0x0008, 0x3250: 0x0008, 0x3251: 0x0008, + 0x3252: 0x0008, 0x3253: 0x0008, 0x3254: 0x0008, 0x3255: 0x0008, 0x3256: 0x0008, 0x3257: 0x0008, + 0x3258: 0x0008, 0x3259: 0x0008, 0x325a: 0x0008, 0x325b: 0x0008, 0x325c: 0x0008, 0x325d: 0x0008, + 0x325e: 0x0008, 0x325f: 0x0008, 0x3260: 0x0008, 0x3261: 0x0008, 0x3262: 0x0008, 0x3263: 0x0008, + 0x3264: 0x0008, 0x3265: 0x0008, 0x3266: 0x0008, 0x3267: 0x0008, 0x3268: 0x0008, 0x3269: 0x0008, + 0x326a: 0x0008, 0x326b: 0x0008, 0x326c: 0x0008, 0x326d: 0x0008, 0x326e: 0x0008, 0x326f: 0x0008, + 0x3270: 0x0008, 0x3271: 0x0008, 0x3272: 0x0008, 0x3273: 0x0008, 0x3274: 0x0008, 0x3275: 0x0008, + 0x3276: 0x0008, 0x3277: 0x0008, 0x3278: 0x0008, 0x3279: 0x0008, 0x327a: 0x0008, 0x327b: 0x0004, + 0x327c: 0x0004, 0x327d: 0x0004, 0x327e: 0x0004, 0x327f: 0x0004, + // Block 0xca, offset 0x3280 + 0x3280: 0x0008, 0x3281: 0x0008, 0x3282: 0x0008, 0x3283: 0x0008, 0x3284: 0x0008, 0x3285: 0x0008, + 0x3286: 0x0008, 0x3287: 0x0008, 0x3288: 0x0008, 0x3289: 0x0008, 0x328a: 0x0008, 0x328b: 0x0008, + 0x328c: 0x0008, 0x328d: 0x0008, 0x328e: 0x0008, 0x328f: 0x0008, 0x3290: 0x0008, 0x3291: 0x0008, + 0x3292: 0x0008, 0x3293: 0x0008, 0x3294: 0x0008, 0x3295: 0x0008, 0x3296: 0x0008, 0x3297: 0x0008, + 0x3298: 0x0008, 0x3299: 0x0008, 0x329a: 0x0008, 0x329b: 0x0008, 0x329c: 0x0008, 0x329d: 0x0008, + 0x329e: 0x0008, 0x329f: 0x0008, 0x32a0: 0x0008, 0x32a1: 0x0008, 0x32a2: 0x0008, 0x32a3: 0x0008, + 0x32a4: 0x0008, 0x32a5: 0x0008, 0x32a6: 0x0008, 0x32a7: 0x0008, 0x32a8: 0x0008, 0x32a9: 0x0008, + 0x32aa: 0x0008, 0x32ab: 0x0008, 0x32ac: 0x0008, 0x32ad: 0x0008, 0x32ae: 0x0008, 0x32af: 0x0008, + 0x32b0: 0x0008, 0x32b1: 0x0008, 0x32b2: 0x0008, 0x32b3: 0x0008, 0x32b4: 0x0008, 0x32b5: 0x0008, + 0x32b6: 0x0008, 0x32b7: 0x0008, 0x32b8: 0x0008, 0x32b9: 0x0008, 0x32ba: 0x0008, 0x32bb: 0x0008, + 0x32bc: 0x0008, 0x32bd: 0x0008, + // Block 0xcb, offset 0x32c0 + 0x32c6: 0x0008, 0x32c7: 0x0008, 0x32c8: 0x0008, 0x32c9: 0x0008, 0x32ca: 0x0008, 0x32cb: 0x0008, + 0x32cc: 0x0008, 0x32cd: 0x0008, 0x32ce: 0x0008, 0x32cf: 0x0008, 0x32d0: 0x0008, 0x32d1: 0x0008, + 0x32d2: 0x0008, 0x32d3: 0x0008, 0x32d4: 0x0008, 0x32d5: 0x0008, 0x32d6: 0x0008, 0x32d7: 0x0008, + 0x32d8: 0x0008, 0x32d9: 0x0008, 0x32da: 0x0008, 0x32db: 0x0008, 0x32dc: 0x0008, 0x32dd: 0x0008, + 0x32de: 0x0008, 0x32df: 0x0008, 0x32e0: 0x0008, 0x32e1: 0x0008, 0x32e2: 0x0008, 0x32e3: 0x0008, + 0x32e4: 0x0008, 0x32e5: 0x0008, 0x32e6: 0x0008, 0x32e7: 0x0008, 0x32e8: 0x0008, 0x32e9: 0x0008, + 0x32ea: 0x0008, 0x32eb: 0x0008, 0x32ec: 0x0008, 0x32ed: 0x0008, 0x32ee: 0x0008, 0x32ef: 0x0008, + 0x32f0: 0x0008, 0x32f1: 0x0008, 0x32f2: 0x0008, 0x32f3: 0x0008, 0x32f4: 0x0008, 0x32f5: 0x0008, + 0x32f6: 0x0008, 0x32f7: 0x0008, 0x32f8: 0x0008, 0x32f9: 0x0008, 0x32fa: 0x0008, 0x32fb: 0x0008, + 0x32fc: 0x0008, 0x32fd: 0x0008, 0x32fe: 0x0008, 0x32ff: 0x0008, + // Block 0xcc, offset 0x3300 + 0x3300: 0x0008, 0x3301: 0x0008, 0x3302: 0x0008, 0x3303: 0x0008, 0x3304: 0x0008, 0x3305: 0x0008, + 0x3306: 0x0008, 0x3307: 0x0008, 0x3308: 0x0008, 0x3309: 0x0008, 0x330a: 0x0008, 0x330b: 0x0008, + 0x330c: 0x0008, 0x330d: 0x0008, 0x330e: 0x0008, 0x330f: 0x0008, + // Block 0xcd, offset 0x3340 + 0x3374: 0x0008, 0x3375: 0x0008, + 0x3376: 0x0008, 0x3377: 0x0008, 0x3378: 0x0008, 0x3379: 0x0008, 0x337a: 0x0008, 0x337b: 0x0008, + 0x337c: 0x0008, 0x337d: 0x0008, 0x337e: 0x0008, 0x337f: 0x0008, + // Block 0xce, offset 0x3380 + 0x3395: 0x0008, 0x3396: 0x0008, 0x3397: 0x0008, + 0x3398: 0x0008, 0x3399: 0x0008, 0x339a: 0x0008, 0x339b: 0x0008, 0x339c: 0x0008, 0x339d: 0x0008, + 0x339e: 0x0008, 0x339f: 0x0008, 0x33a0: 0x0008, 0x33a1: 0x0008, 0x33a2: 0x0008, 0x33a3: 0x0008, + 0x33a4: 0x0008, 0x33a5: 0x0008, 0x33a6: 0x0008, 0x33a7: 0x0008, 0x33a8: 0x0008, 0x33a9: 0x0008, + 0x33aa: 0x0008, 0x33ab: 0x0008, 0x33ac: 0x0008, 0x33ad: 0x0008, 0x33ae: 0x0008, 0x33af: 0x0008, + 0x33b0: 0x0008, 0x33b1: 0x0008, 0x33b2: 0x0008, 0x33b3: 0x0008, 0x33b4: 0x0008, 0x33b5: 0x0008, + 0x33b6: 0x0008, 0x33b7: 0x0008, 0x33b8: 0x0008, 0x33b9: 0x0008, 0x33ba: 0x0008, 0x33bb: 0x0008, + 0x33bc: 0x0008, 0x33bd: 0x0008, 0x33be: 0x0008, 0x33bf: 0x0008, + // Block 0xcf, offset 0x33c0 + 0x33cc: 0x0008, 0x33cd: 0x0008, 0x33ce: 0x0008, 0x33cf: 0x0008, + // Block 0xd0, offset 0x3400 + 0x3408: 0x0008, 0x3409: 0x0008, 0x340a: 0x0008, 0x340b: 0x0008, + 0x340c: 0x0008, 0x340d: 0x0008, 0x340e: 0x0008, 0x340f: 0x0008, + 0x341a: 0x0008, 0x341b: 0x0008, 0x341c: 0x0008, 0x341d: 0x0008, + 0x341e: 0x0008, 0x341f: 0x0008, + // Block 0xd1, offset 0x3440 + 0x3448: 0x0008, 0x3449: 0x0008, 0x344a: 0x0008, 0x344b: 0x0008, + 0x344c: 0x0008, 0x344d: 0x0008, 0x344e: 0x0008, 0x344f: 0x0008, + 0x346e: 0x0008, 0x346f: 0x0008, + 0x3470: 0x0008, 0x3471: 0x0008, 0x3472: 0x0008, 0x3473: 0x0008, 0x3474: 0x0008, 0x3475: 0x0008, + 0x3476: 0x0008, 0x3477: 0x0008, 0x3478: 0x0008, 0x3479: 0x0008, 0x347a: 0x0008, 0x347b: 0x0008, + 0x347c: 0x0008, 0x347d: 0x0008, 0x347e: 0x0008, 0x347f: 0x0008, + // Block 0xd2, offset 0x3480 + 0x348c: 0x0008, 0x348d: 0x0008, 0x348e: 0x0008, 0x348f: 0x0008, 0x3490: 0x0008, 0x3491: 0x0008, + 0x3492: 0x0008, 0x3493: 0x0008, 0x3494: 0x0008, 0x3495: 0x0008, 0x3496: 0x0008, 0x3497: 0x0008, + 0x3498: 0x0008, 0x3499: 0x0008, 0x349a: 0x0008, 0x349b: 0x0008, 0x349c: 0x0008, 0x349d: 0x0008, + 0x349e: 0x0008, 0x349f: 0x0008, 0x34a0: 0x0008, 0x34a1: 0x0008, 0x34a2: 0x0008, 0x34a3: 0x0008, + 0x34a4: 0x0008, 0x34a5: 0x0008, 0x34a6: 0x0008, 0x34a7: 0x0008, 0x34a8: 0x0008, 0x34a9: 0x0008, + 0x34aa: 0x0008, 0x34ab: 0x0008, 0x34ac: 0x0008, 0x34ad: 0x0008, 0x34ae: 0x0008, 0x34af: 0x0008, + 0x34b0: 0x0008, 0x34b1: 0x0008, 0x34b2: 0x0008, 0x34b3: 0x0008, 0x34b4: 0x0008, 0x34b5: 0x0008, + 0x34b6: 0x0008, 0x34b7: 0x0008, 0x34b8: 0x0008, 0x34b9: 0x0008, 0x34ba: 0x0008, + 0x34bc: 0x0008, 0x34bd: 0x0008, 0x34be: 0x0008, 0x34bf: 0x0008, + // Block 0xd3, offset 0x34c0 + 0x34c0: 0x0008, 0x34c1: 0x0008, 0x34c2: 0x0008, 0x34c3: 0x0008, 0x34c4: 0x0008, 0x34c5: 0x0008, + 0x34c7: 0x0008, 0x34c8: 0x0008, 0x34c9: 0x0008, 0x34ca: 0x0008, 0x34cb: 0x0008, + 0x34cc: 0x0008, 0x34cd: 0x0008, 0x34ce: 0x0008, 0x34cf: 0x0008, 0x34d0: 0x0008, 0x34d1: 0x0008, + 0x34d2: 0x0008, 0x34d3: 0x0008, 0x34d4: 0x0008, 0x34d5: 0x0008, 0x34d6: 0x0008, 0x34d7: 0x0008, + 0x34d8: 0x0008, 0x34d9: 0x0008, 0x34da: 0x0008, 0x34db: 0x0008, 0x34dc: 0x0008, 0x34dd: 0x0008, + 0x34de: 0x0008, 0x34df: 0x0008, 0x34e0: 0x0008, 0x34e1: 0x0008, 0x34e2: 0x0008, 0x34e3: 0x0008, + 0x34e4: 0x0008, 0x34e5: 0x0008, 0x34e6: 0x0008, 0x34e7: 0x0008, 0x34e8: 0x0008, 0x34e9: 0x0008, + 0x34ea: 0x0008, 0x34eb: 0x0008, 0x34ec: 0x0008, 0x34ed: 0x0008, 0x34ee: 0x0008, 0x34ef: 0x0008, + 0x34f0: 0x0008, 0x34f1: 0x0008, 0x34f2: 0x0008, 0x34f3: 0x0008, 0x34f4: 0x0008, 0x34f5: 0x0008, + 0x34f6: 0x0008, 0x34f7: 0x0008, 0x34f8: 0x0008, 0x34f9: 0x0008, 0x34fa: 0x0008, 0x34fb: 0x0008, + 0x34fc: 0x0008, 0x34fd: 0x0008, 0x34fe: 0x0008, 0x34ff: 0x0008, + // Block 0xd4, offset 0x3500 + 0x3500: 0x0002, 0x3501: 0x0002, 0x3502: 0x0002, 0x3503: 0x0002, 0x3504: 0x0002, 0x3505: 0x0002, + 0x3506: 0x0002, 0x3507: 0x0002, 0x3508: 0x0002, 0x3509: 0x0002, 0x350a: 0x0002, 0x350b: 0x0002, + 0x350c: 0x0002, 0x350d: 0x0002, 0x350e: 0x0002, 0x350f: 0x0002, 0x3510: 0x0002, 0x3511: 0x0002, + 0x3512: 0x0002, 0x3513: 0x0002, 0x3514: 0x0002, 0x3515: 0x0002, 0x3516: 0x0002, 0x3517: 0x0002, + 0x3518: 0x0002, 0x3519: 0x0002, 0x351a: 0x0002, 0x351b: 0x0002, 0x351c: 0x0002, 0x351d: 0x0002, + 0x351e: 0x0002, 0x351f: 0x0002, 0x3520: 0x0004, 0x3521: 0x0004, 0x3522: 0x0004, 0x3523: 0x0004, + 0x3524: 0x0004, 0x3525: 0x0004, 0x3526: 0x0004, 0x3527: 0x0004, 0x3528: 0x0004, 0x3529: 0x0004, + 0x352a: 0x0004, 0x352b: 0x0004, 0x352c: 0x0004, 0x352d: 0x0004, 0x352e: 0x0004, 0x352f: 0x0004, + 0x3530: 0x0004, 0x3531: 0x0004, 0x3532: 0x0004, 0x3533: 0x0004, 0x3534: 0x0004, 0x3535: 0x0004, + 0x3536: 0x0004, 0x3537: 0x0004, 0x3538: 0x0004, 0x3539: 0x0004, 0x353a: 0x0004, 0x353b: 0x0004, + 0x353c: 0x0004, 0x353d: 0x0004, 0x353e: 0x0004, 0x353f: 0x0004, + // Block 0xd5, offset 0x3540 + 0x3540: 0x0002, 0x3541: 0x0002, 0x3542: 0x0002, 0x3543: 0x0002, 0x3544: 0x0002, 0x3545: 0x0002, + 0x3546: 0x0002, 0x3547: 0x0002, 0x3548: 0x0002, 0x3549: 0x0002, 0x354a: 0x0002, 0x354b: 0x0002, + 0x354c: 0x0002, 0x354d: 0x0002, 0x354e: 0x0002, 0x354f: 0x0002, 0x3550: 0x0002, 0x3551: 0x0002, + 0x3552: 0x0002, 0x3553: 0x0002, 0x3554: 0x0002, 0x3555: 0x0002, 0x3556: 0x0002, 0x3557: 0x0002, + 0x3558: 0x0002, 0x3559: 0x0002, 0x355a: 0x0002, 0x355b: 0x0002, 0x355c: 0x0002, 0x355d: 0x0002, + 0x355e: 0x0002, 0x355f: 0x0002, 0x3560: 0x0002, 0x3561: 0x0002, 0x3562: 0x0002, 0x3563: 0x0002, + 0x3564: 0x0002, 0x3565: 0x0002, 0x3566: 0x0002, 0x3567: 0x0002, 0x3568: 0x0002, 0x3569: 0x0002, + 0x356a: 0x0002, 0x356b: 0x0002, 0x356c: 0x0002, 0x356d: 0x0002, 0x356e: 0x0002, 0x356f: 0x0002, + 0x3570: 0x0002, 0x3571: 0x0002, 0x3572: 0x0002, 0x3573: 0x0002, 0x3574: 0x0002, 0x3575: 0x0002, + 0x3576: 0x0002, 0x3577: 0x0002, 0x3578: 0x0002, 0x3579: 0x0002, 0x357a: 0x0002, 0x357b: 0x0002, + 0x357c: 0x0002, 0x357d: 0x0002, 0x357e: 0x0002, 0x357f: 0x0002, + // Block 0xd6, offset 0x3580 + 0x3580: 0x0004, 0x3581: 0x0004, 0x3582: 0x0004, 0x3583: 0x0004, 0x3584: 0x0004, 0x3585: 0x0004, + 0x3586: 0x0004, 0x3587: 0x0004, 0x3588: 0x0004, 0x3589: 0x0004, 0x358a: 0x0004, 0x358b: 0x0004, + 0x358c: 0x0004, 0x358d: 0x0004, 0x358e: 0x0004, 0x358f: 0x0004, 0x3590: 0x0004, 0x3591: 0x0004, + 0x3592: 0x0004, 0x3593: 0x0004, 0x3594: 0x0004, 0x3595: 0x0004, 0x3596: 0x0004, 0x3597: 0x0004, + 0x3598: 0x0004, 0x3599: 0x0004, 0x359a: 0x0004, 0x359b: 0x0004, 0x359c: 0x0004, 0x359d: 0x0004, + 0x359e: 0x0004, 0x359f: 0x0004, 0x35a0: 0x0004, 0x35a1: 0x0004, 0x35a2: 0x0004, 0x35a3: 0x0004, + 0x35a4: 0x0004, 0x35a5: 0x0004, 0x35a6: 0x0004, 0x35a7: 0x0004, 0x35a8: 0x0004, 0x35a9: 0x0004, + 0x35aa: 0x0004, 0x35ab: 0x0004, 0x35ac: 0x0004, 0x35ad: 0x0004, 0x35ae: 0x0004, 0x35af: 0x0004, + 0x35b0: 0x0002, 0x35b1: 0x0002, 0x35b2: 0x0002, 0x35b3: 0x0002, 0x35b4: 0x0002, 0x35b5: 0x0002, + 0x35b6: 0x0002, 0x35b7: 0x0002, 0x35b8: 0x0002, 0x35b9: 0x0002, 0x35ba: 0x0002, 0x35bb: 0x0002, + 0x35bc: 0x0002, 0x35bd: 0x0002, 0x35be: 0x0002, 0x35bf: 0x0002, +} + +// graphemesIndex: 25 blocks, 1600 entries, 1600 bytes +// Block 0 is the zero block. +var graphemesIndex = [1600]property{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, + 0xcc: 0x02, 0xcd: 0x03, + 0xd2: 0x04, 0xd6: 0x05, 0xd7: 0x06, + 0xd8: 0x07, 0xd9: 0x08, 0xdb: 0x09, 0xdc: 0x0a, 0xdd: 0x0b, 0xde: 0x0c, 0xdf: 0x0d, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, + 0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a, + 0xf0: 0x14, 0xf3: 0x16, + // Block 0x4, offset 0x100 + 0x120: 0x0e, 0x121: 0x0f, 0x122: 0x10, 0x123: 0x11, 0x124: 0x12, 0x125: 0x13, 0x126: 0x14, 0x127: 0x15, + 0x128: 0x16, 0x129: 0x17, 0x12a: 0x16, 0x12b: 0x18, 0x12c: 0x19, 0x12d: 0x1a, 0x12e: 0x1b, 0x12f: 0x1c, + 0x130: 0x1d, 0x131: 0x1e, 0x132: 0x1f, 0x133: 0x20, 0x134: 0x21, 0x135: 0x22, 0x136: 0x23, 0x137: 0x24, + 0x138: 0x25, 0x139: 0x26, 0x13a: 0x27, 0x13b: 0x28, 0x13c: 0x29, 0x13d: 0x2a, 0x13e: 0x2b, 0x13f: 0x2c, + // Block 0x5, offset 0x140 + 0x140: 0x2d, 0x141: 0x2e, 0x142: 0x2f, 0x144: 0x30, 0x145: 0x31, 0x146: 0x32, 0x147: 0x33, + 0x14d: 0x34, + 0x15c: 0x35, 0x15d: 0x36, 0x15e: 0x37, 0x15f: 0x38, + 0x160: 0x39, 0x162: 0x3a, 0x164: 0x3b, + 0x168: 0x3c, 0x169: 0x3d, 0x16a: 0x3e, 0x16b: 0x3f, 0x16c: 0x40, 0x16d: 0x41, 0x16e: 0x42, 0x16f: 0x43, + 0x170: 0x44, 0x173: 0x45, 0x177: 0x02, + // Block 0x6, offset 0x180 + 0x180: 0x46, 0x181: 0x47, 0x183: 0x48, 0x184: 0x49, 0x186: 0x4a, + 0x18c: 0x4b, 0x18e: 0x4c, 0x18f: 0x4d, + 0x193: 0x4e, 0x196: 0x4f, 0x197: 0x50, + 0x198: 0x51, 0x199: 0x52, 0x19a: 0x53, 0x19b: 0x52, 0x19c: 0x54, 0x19d: 0x55, 0x19e: 0x56, + 0x1a4: 0x57, + 0x1ac: 0x58, 0x1ad: 0x59, + 0x1b3: 0x5a, 0x1b5: 0x5b, 0x1b7: 0x5c, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x5d, 0x1c2: 0x5e, + 0x1ca: 0x5f, + // Block 0x8, offset 0x200 + 0x219: 0x60, 0x21a: 0x61, 0x21b: 0x62, + 0x220: 0x63, 0x222: 0x64, 0x223: 0x65, 0x224: 0x66, 0x225: 0x67, 0x226: 0x68, 0x227: 0x69, + 0x228: 0x6a, 0x229: 0x6b, 0x22a: 0x6c, 0x22b: 0x6d, 0x22f: 0x6e, + 0x230: 0x6f, 0x231: 0x70, 0x232: 0x71, 0x233: 0x72, 0x234: 0x73, 0x235: 0x74, 0x236: 0x75, 0x237: 0x6f, + 0x238: 0x70, 0x239: 0x71, 0x23a: 0x72, 0x23b: 0x73, 0x23c: 0x74, 0x23d: 0x75, 0x23e: 0x6f, 0x23f: 0x70, + // Block 0x9, offset 0x240 + 0x240: 0x71, 0x241: 0x72, 0x242: 0x73, 0x243: 0x74, 0x244: 0x75, 0x245: 0x6f, 0x246: 0x70, 0x247: 0x71, + 0x248: 0x72, 0x249: 0x73, 0x24a: 0x74, 0x24b: 0x75, 0x24c: 0x6f, 0x24d: 0x70, 0x24e: 0x71, 0x24f: 0x72, + 0x250: 0x73, 0x251: 0x74, 0x252: 0x75, 0x253: 0x6f, 0x254: 0x70, 0x255: 0x71, 0x256: 0x72, 0x257: 0x73, + 0x258: 0x74, 0x259: 0x75, 0x25a: 0x6f, 0x25b: 0x70, 0x25c: 0x71, 0x25d: 0x72, 0x25e: 0x73, 0x25f: 0x74, + 0x260: 0x75, 0x261: 0x6f, 0x262: 0x70, 0x263: 0x71, 0x264: 0x72, 0x265: 0x73, 0x266: 0x74, 0x267: 0x75, + 0x268: 0x6f, 0x269: 0x70, 0x26a: 0x71, 0x26b: 0x72, 0x26c: 0x73, 0x26d: 0x74, 0x26e: 0x75, 0x26f: 0x6f, + 0x270: 0x70, 0x271: 0x71, 0x272: 0x72, 0x273: 0x73, 0x274: 0x74, 0x275: 0x75, 0x276: 0x6f, 0x277: 0x70, + 0x278: 0x71, 0x279: 0x72, 0x27a: 0x73, 0x27b: 0x74, 0x27c: 0x75, 0x27d: 0x6f, 0x27e: 0x70, 0x27f: 0x71, + // Block 0xa, offset 0x280 + 0x280: 0x72, 0x281: 0x73, 0x282: 0x74, 0x283: 0x75, 0x284: 0x6f, 0x285: 0x70, 0x286: 0x71, 0x287: 0x72, + 0x288: 0x73, 0x289: 0x74, 0x28a: 0x75, 0x28b: 0x6f, 0x28c: 0x70, 0x28d: 0x71, 0x28e: 0x72, 0x28f: 0x73, + 0x290: 0x74, 0x291: 0x75, 0x292: 0x6f, 0x293: 0x70, 0x294: 0x71, 0x295: 0x72, 0x296: 0x73, 0x297: 0x74, + 0x298: 0x75, 0x299: 0x6f, 0x29a: 0x70, 0x29b: 0x71, 0x29c: 0x72, 0x29d: 0x73, 0x29e: 0x74, 0x29f: 0x75, + 0x2a0: 0x6f, 0x2a1: 0x70, 0x2a2: 0x71, 0x2a3: 0x72, 0x2a4: 0x73, 0x2a5: 0x74, 0x2a6: 0x75, 0x2a7: 0x6f, + 0x2a8: 0x70, 0x2a9: 0x71, 0x2aa: 0x72, 0x2ab: 0x73, 0x2ac: 0x74, 0x2ad: 0x75, 0x2ae: 0x6f, 0x2af: 0x70, + 0x2b0: 0x71, 0x2b1: 0x72, 0x2b2: 0x73, 0x2b3: 0x74, 0x2b4: 0x75, 0x2b5: 0x6f, 0x2b6: 0x70, 0x2b7: 0x71, + 0x2b8: 0x72, 0x2b9: 0x73, 0x2ba: 0x74, 0x2bb: 0x75, 0x2bc: 0x6f, 0x2bd: 0x70, 0x2be: 0x71, 0x2bf: 0x72, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x73, 0x2c1: 0x74, 0x2c2: 0x75, 0x2c3: 0x6f, 0x2c4: 0x70, 0x2c5: 0x71, 0x2c6: 0x72, 0x2c7: 0x73, + 0x2c8: 0x74, 0x2c9: 0x75, 0x2ca: 0x6f, 0x2cb: 0x70, 0x2cc: 0x71, 0x2cd: 0x72, 0x2ce: 0x73, 0x2cf: 0x74, + 0x2d0: 0x75, 0x2d1: 0x6f, 0x2d2: 0x70, 0x2d3: 0x71, 0x2d4: 0x72, 0x2d5: 0x73, 0x2d6: 0x74, 0x2d7: 0x75, + 0x2d8: 0x6f, 0x2d9: 0x70, 0x2da: 0x71, 0x2db: 0x72, 0x2dc: 0x73, 0x2dd: 0x74, 0x2de: 0x76, 0x2df: 0x77, + // Block 0xc, offset 0x300 + 0x32c: 0x78, + 0x338: 0x79, 0x33b: 0x7a, 0x33e: 0x61, 0x33f: 0x7b, + // Block 0xd, offset 0x340 + 0x347: 0x7c, + 0x34b: 0x7d, 0x34d: 0x7e, + 0x368: 0x7f, 0x36b: 0x80, + 0x374: 0x81, + 0x37a: 0x82, 0x37b: 0x83, 0x37d: 0x84, 0x37e: 0x85, + // Block 0xe, offset 0x380 + 0x380: 0x86, 0x381: 0x87, 0x382: 0x88, 0x383: 0x89, 0x384: 0x8a, 0x385: 0x8b, 0x386: 0x8c, 0x387: 0x8d, + 0x388: 0x8e, 0x389: 0x8f, 0x38b: 0x90, 0x38c: 0x21, 0x38d: 0x91, + 0x390: 0x92, 0x391: 0x93, 0x392: 0x94, 0x393: 0x95, 0x396: 0x96, 0x397: 0x97, + 0x398: 0x98, 0x399: 0x99, 0x39a: 0x9a, 0x39c: 0x9b, + 0x3a0: 0x9c, 0x3a4: 0x9d, 0x3a5: 0x9e, 0x3a7: 0x9f, + 0x3a8: 0xa0, 0x3a9: 0xa1, 0x3aa: 0xa2, + 0x3b0: 0xa3, 0x3b2: 0xa4, 0x3b4: 0xa5, 0x3b5: 0xa6, 0x3b6: 0xa7, + 0x3bb: 0xa8, 0x3bc: 0xa9, 0x3bd: 0xaa, + // Block 0xf, offset 0x3c0 + 0x3d0: 0xab, 0x3d1: 0xac, + // Block 0x10, offset 0x400 + 0x42b: 0xad, 0x42c: 0xae, + 0x43d: 0xaf, 0x43e: 0xb0, 0x43f: 0xb1, + // Block 0x11, offset 0x440 + 0x472: 0xb2, + // Block 0x12, offset 0x480 + 0x4bc: 0xb3, 0x4bd: 0xb4, + // Block 0x13, offset 0x4c0 + 0x4c5: 0xb5, 0x4c6: 0xb6, + 0x4c9: 0xb7, + 0x4e8: 0xb8, 0x4e9: 0xb9, 0x4ea: 0xba, + // Block 0x14, offset 0x500 + 0x500: 0xbb, 0x502: 0xbc, 0x504: 0xae, + 0x50a: 0xbd, 0x50b: 0xbe, + 0x513: 0xbe, + 0x523: 0xbf, 0x525: 0xc0, + // Block 0x15, offset 0x540 + 0x540: 0x52, 0x541: 0x52, 0x542: 0x52, 0x543: 0x52, 0x544: 0xc1, 0x545: 0xc2, 0x546: 0xc3, 0x547: 0xc4, + 0x548: 0xc5, 0x549: 0xc6, 0x54a: 0x52, 0x54b: 0x52, 0x54c: 0x52, 0x54d: 0x52, 0x54e: 0x52, 0x54f: 0xc7, + 0x550: 0x52, 0x551: 0x52, 0x552: 0x52, 0x553: 0x52, 0x554: 0xc8, 0x555: 0xc9, 0x556: 0x52, 0x557: 0x52, + 0x558: 0x52, 0x559: 0xca, 0x55a: 0x52, 0x55b: 0x52, 0x55d: 0xcb, 0x55f: 0xcc, + 0x560: 0xcd, 0x561: 0xce, 0x562: 0xcf, 0x563: 0x52, 0x564: 0xd0, 0x565: 0xd1, 0x566: 0x52, 0x567: 0x52, + 0x568: 0x52, 0x569: 0x52, 0x56a: 0x52, 0x56b: 0x52, + 0x570: 0x52, 0x571: 0x52, 0x572: 0x52, 0x573: 0x52, 0x574: 0x52, 0x575: 0x52, 0x576: 0x52, 0x577: 0x52, + 0x578: 0x52, 0x579: 0x52, 0x57a: 0x52, 0x57b: 0x52, 0x57c: 0x52, 0x57d: 0x52, 0x57e: 0x52, 0x57f: 0xc8, + // Block 0x16, offset 0x580 + 0x590: 0x0b, 0x591: 0x0c, 0x593: 0x0d, 0x596: 0x0e, + 0x59b: 0x0f, 0x59c: 0x10, 0x59d: 0x11, 0x59e: 0x12, 0x59f: 0x13, + // Block 0x17, offset 0x5c0 + 0x5c0: 0xd2, 0x5c1: 0x02, 0x5c2: 0xd3, 0x5c3: 0xd3, 0x5c4: 0x02, 0x5c5: 0x02, 0x5c6: 0x02, 0x5c7: 0xd4, + 0x5c8: 0xd3, 0x5c9: 0xd3, 0x5ca: 0xd3, 0x5cb: 0xd3, 0x5cc: 0xd3, 0x5cd: 0xd3, 0x5ce: 0xd3, 0x5cf: 0xd3, + 0x5d0: 0xd3, 0x5d1: 0xd3, 0x5d2: 0xd3, 0x5d3: 0xd3, 0x5d4: 0xd3, 0x5d5: 0xd3, 0x5d6: 0xd3, 0x5d7: 0xd3, + 0x5d8: 0xd3, 0x5d9: 0xd3, 0x5da: 0xd3, 0x5db: 0xd3, 0x5dc: 0xd3, 0x5dd: 0xd3, 0x5de: 0xd3, 0x5df: 0xd3, + 0x5e0: 0xd3, 0x5e1: 0xd3, 0x5e2: 0xd3, 0x5e3: 0xd3, 0x5e4: 0xd3, 0x5e5: 0xd3, 0x5e6: 0xd3, 0x5e7: 0xd3, + 0x5e8: 0xd3, 0x5e9: 0xd3, 0x5ea: 0xd3, 0x5eb: 0xd3, 0x5ec: 0xd3, 0x5ed: 0xd3, 0x5ee: 0xd3, 0x5ef: 0xd3, + 0x5f0: 0xd3, 0x5f1: 0xd3, 0x5f2: 0xd3, 0x5f3: 0xd3, 0x5f4: 0xd3, 0x5f5: 0xd3, 0x5f6: 0xd3, 0x5f7: 0xd3, + 0x5f8: 0xd3, 0x5f9: 0xd3, 0x5fa: 0xd3, 0x5fb: 0xd3, 0x5fc: 0xd3, 0x5fd: 0xd3, 0x5fe: 0xd3, 0x5ff: 0xd3, + // Block 0x18, offset 0x600 + 0x620: 0x15, +} diff --git a/vendor/github.com/clipperhouse/uax29/v2/internal/iterators/iterator.go b/vendor/github.com/clipperhouse/uax29/v2/internal/iterators/iterator.go new file mode 100644 index 0000000000..e213486380 --- /dev/null +++ b/vendor/github.com/clipperhouse/uax29/v2/internal/iterators/iterator.go @@ -0,0 +1,100 @@ +package iterators + +import "github.com/clipperhouse/stringish" + +type SplitFunc[T stringish.Interface] func(T, bool) (int, T, error) + +// Iterator is a generic iterator for words that are either []byte or string. +// Iterate while Next() is true, and access the word via Value(). +type Iterator[T stringish.Interface] struct { + split SplitFunc[T] + data T + start int + pos int +} + +// New creates a new Iterator for the given data and SplitFunc. +func New[T stringish.Interface](split SplitFunc[T], data T) *Iterator[T] { + return &Iterator[T]{ + split: split, + data: data, + } +} + +// SetText sets the text for the iterator to operate on, and resets all state. +func (iter *Iterator[T]) SetText(data T) { + iter.data = data + iter.start = 0 + iter.pos = 0 +} + +// Split sets the SplitFunc for the Iterator. +func (iter *Iterator[T]) Split(split SplitFunc[T]) { + iter.split = split +} + +// Next advances the iterator to the next token. It returns false when there +// are no remaining tokens or an error occurred. +func (iter *Iterator[T]) Next() bool { + if iter.pos == len(iter.data) { + return false + } + if iter.pos > len(iter.data) { + panic("SplitFunc advanced beyond the end of the data") + } + + iter.start = iter.pos + + advance, _, err := iter.split(iter.data[iter.pos:], true) + if err != nil { + panic(err) + } + if advance <= 0 { + panic("SplitFunc returned a zero or negative advance") + } + + iter.pos += advance + if iter.pos > len(iter.data) { + panic("SplitFunc advanced beyond the end of the data") + } + + return true +} + +// Value returns the current token. +func (iter *Iterator[T]) Value() T { + return iter.data[iter.start:iter.pos] +} + +// Start returns the byte position of the current token in the original data. +func (iter *Iterator[T]) Start() int { + return iter.start +} + +// End returns the byte position after the current token in the original data. +func (iter *Iterator[T]) End() int { + return iter.pos +} + +// Reset resets the iterator to the beginning of the data. +func (iter *Iterator[T]) Reset() { + iter.start = 0 + iter.pos = 0 +} + +func (iter *Iterator[T]) First() T { + if len(iter.data) == 0 { + return iter.data + } + advance, _, err := iter.split(iter.data, true) + if err != nil { + panic(err) + } + if advance <= 0 { + panic("SplitFunc returned a zero or negative advance") + } + if advance > len(iter.data) { + panic("SplitFunc advanced beyond the end of the data") + } + return iter.data[:advance] +} diff --git a/vendor/github.com/itchyny/gojq/CHANGELOG.md b/vendor/github.com/itchyny/gojq/CHANGELOG.md index a10c4858d1..d2acbff08f 100644 --- a/vendor/github.com/itchyny/gojq/CHANGELOG.md +++ b/vendor/github.com/itchyny/gojq/CHANGELOG.md @@ -1,4 +1,18 @@ # Changelog +## [v0.12.18](https://github.com/itchyny/gojq/compare/v0.12.17..v0.12.18) (2025-12-02) +* implement `trimstr/1`, `toboolean/0` function +* fix `last/1` to be included in `builtins/0` +* fix `--indent 0` to preserve newlines +* fix string repetition to emit error when the result is too large +* increase the array index limit to 536870912 (`2^29`) +* stop numeric normalization for concurrent execution (see 1ace748d08df) +* support binding expressions with binary operators (`1 + 2 as $x | -$x`) +* improve `gojq.NewIter` to be a generic function +* improve logic for getting file contents on JSON parse error +* improve JSON parsing to preserve the precision of floating-point numbers +* improve YAML parsing performance and preserve the precision of large integers +* improve performance and reduce memory allocation of long-running queries + ## [v0.12.17](https://github.com/itchyny/gojq/compare/v0.12.16..v0.12.17) (2024-12-01) * implement `add/1`, `skip/2` functions * implement `--library-path` option as the alias of `-L` option diff --git a/vendor/github.com/itchyny/gojq/Dockerfile b/vendor/github.com/itchyny/gojq/Dockerfile index 96a14e99a5..cf6a9a35b3 100644 --- a/vendor/github.com/itchyny/gojq/Dockerfile +++ b/vendor/github.com/itchyny/gojq/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.23 AS builder +FROM golang:1.25 AS builder WORKDIR /app COPY go.* ./ diff --git a/vendor/github.com/itchyny/gojq/LICENSE b/vendor/github.com/itchyny/gojq/LICENSE index fe59004071..5eeaeebb62 100644 --- a/vendor/github.com/itchyny/gojq/LICENSE +++ b/vendor/github.com/itchyny/gojq/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2019-2024 itchyny +Copyright (c) 2019-2025 itchyny 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/github.com/itchyny/gojq/Makefile b/vendor/github.com/itchyny/gojq/Makefile index 15ace7d738..e91f2c6dd2 100644 --- a/vendor/github.com/itchyny/gojq/Makefile +++ b/vendor/github.com/itchyny/gojq/Makefile @@ -89,9 +89,8 @@ clean: .PHONY: update update: export GOPROXY=direct update: - go get -u ./... && go mod tidy - go mod edit -modfile=go.dev.mod -droprequire=github.com/itchyny/{astgen,timefmt}-go - go get -u -modfile=go.dev.mod github.com/itchyny/{astgen,timefmt}-go && go generate + go get -u ./... && go get github.com/itchyny/go-yaml@gojq && go mod tidy + rm go.dev.sum && go get -u -modfile=go.dev.mod github.com/itchyny/{astgen,timefmt}-go && go generate .PHONY: bump bump: $(GOBIN)/gobump diff --git a/vendor/github.com/itchyny/gojq/README.md b/vendor/github.com/itchyny/gojq/README.md index 7b34f93c34..98709ee04f 100644 --- a/vendor/github.com/itchyny/gojq/README.md +++ b/vendor/github.com/itchyny/gojq/README.md @@ -74,12 +74,11 @@ docker run -i --rm ghcr.io/itchyny/gojq ## Difference to jq - gojq is purely implemented with Go language and is completely portable. jq depends on the C standard library so the availability of math functions depends on the library. jq also depends on the regular expression library and it makes build scripts complex. -- gojq implements nice error messages for invalid query and JSON input. The error message of jq is sometimes difficult to tell where to fix the query. - gojq does not keep the order of object keys. I understand this might cause problems for some scripts but basically, we should not rely on the order of object keys. Due to this limitation, gojq does not have `keys_unsorted` function and `--sort-keys` (`-S`) option. I would implement when ordered map is implemented in the standard library of Go but I'm less motivated. - gojq supports arbitrary-precision integer calculation while jq does not; jq loses the precision of large integers when calculation is involved. Note that even with gojq, all mathematical functions, including `floor` and `round`, convert integers to floating-point numbers; only addition, subtraction, multiplication, modulo, and division operators (when divisible) keep the integer precision. To calculate floor division of integers without losing the precision, use `def idivide($n): (. - . % $n) / $n;`. To round down floating-point numbers to integers, use `def ifloor: floor | tostring | tonumber;`, but note that this function does not work with large floating-point numbers and also loses the precision of large integers. -- gojq behaves differently than jq in some features, hoping that jq will fix the behaviors in the future. gojq consistently counts by characters (not by bytes) in `index`, `rindex`, and `indices` functions; `"12345" | .[index("3"):]` results in `"345"` ([jq#1430](https://github.com/jqlang/jq/issues/1430), [jq#1624](https://github.com/jqlang/jq/issues/1624)). gojq supports string indexing; `"abcde"[2]` ([jq#1520](https://github.com/jqlang/jq/issues/1520)). gojq fixes handling files with no newline characters at the end ([jq#2374](https://github.com/jqlang/jq/issues/2374)). gojq consistently truncates down floating-point number indices both in indexing (`[0] | .[0.5]` results in `0`), and slicing (`[0,1,2] | .[0.5:1.5]` results in `[0]`). gojq parses unary operators with higher precedence than variable binding (`[-1 as $x | 1,$x]` results in `[1,-1]` not `[-1,-1]`) ([jq#3053](https://github.com/jqlang/jq/pull/3053)). gojq fixes `@base64d` to allow binary string as the decoded string ([jq#1931](https://github.com/jqlang/jq/issues/1931)). gojq improves time formatting and parsing; deals with `%f` in `strftime` and `strptime` ([jq#1409](https://github.com/jqlang/jq/issues/1409)), parses timezone offsets with `fromdate` and `fromdateiso8601` ([jq#1053](https://github.com/jqlang/jq/issues/1053)), supports timezone name/offset with `%Z`/`%z` in `strptime` ([jq#929](https://github.com/jqlang/jq/issues/929), [jq#2195](https://github.com/jqlang/jq/issues/2195)), and looks up correct timezone during daylight saving time on formatting with `%Z` ([jq#1912](https://github.com/jqlang/jq/issues/1912)). gojq supports nanoseconds in date and time functions. -- gojq does not support some functions intentionally; `get_jq_origin`, `get_prog_origin`, `get_search_list` (unstable, not listed in jq document), `input_line_number`, `$__loc__` (performance issue). gojq does not support some flags; `--ascii-output, -a` (performance issue), `--seq` (not used commonly), `--sort-keys, -S` (sorts by default because `map[string]any` does not keep the order), `--unbuffered` (unbuffered by default). gojq does not parse JSON extensions supported by jq; `NaN`, `Infinity`, and `[000]`. gojq normalizes floating-point numbers to fit to double-precision floating-point numbers. gojq does not support some regular expression metacharacters, backreferences, look-around assertions, and some flags (regular expression engine differences). gojq does not support BOM (`encoding/json` does not support this). gojq disallows using keywords for function names (`def true: .; true` is a confusing query), and module name prefixes in function declarations (using module prefixes like `def m::f: .;` is undocumented). -- gojq supports reading from YAML input (`--yaml-input`) while jq does not. gojq also supports YAML output (`--yaml-output`). gojq supports `@urid` format string ([jq#798](https://github.com/jqlang/jq/issues/798), [jq#2261](https://github.com/jqlang/jq/issues/2261)). +- gojq behaves differently than jq in some features, expecting jq to fix its behavior in the future. gojq supports string indexing; `"abcde"[2]` ([jq#1520](https://github.com/jqlang/jq/issues/1520)). gojq fixes handling files with no newline characters at the end ([jq#2374](https://github.com/jqlang/jq/issues/2374)). gojq fixes `@base64d` to allow binary string as the decoded string ([jq#1931](https://github.com/jqlang/jq/issues/1931)). gojq improves time formatting and parsing; deals with `%f` in `strftime` and `strptime` ([jq#1409](https://github.com/jqlang/jq/issues/1409)), parses timezone offsets with `fromdate` and `fromdateiso8601` ([jq#1053](https://github.com/jqlang/jq/issues/1053)), supports timezone name/offset with `%Z`/`%z` in `strptime` ([jq#929](https://github.com/jqlang/jq/issues/929), [jq#2195](https://github.com/jqlang/jq/issues/2195)). gojq supports nanoseconds in date and time functions. +- gojq does not support some functions intentionally; `get_jq_origin`, `get_prog_origin`, `get_search_list` (unstable, not listed in jq document), `input_line_number`, `$__loc__` (performance issue). gojq does not support some flags; `--ascii-output, -a` (performance issue), `--seq` (not used commonly), `--sort-keys, -S` (sorts by default because `map[string]any` does not keep the order), `--unbuffered` (unbuffered by default). gojq does not parse JSON extensions supported by jq; `NaN`, `Infinity`, and `[000]`. gojq does not support some regular expression metacharacters, backreferences, look-around assertions, and some flags (regular expression engine differences). gojq does not support BOM (`encoding/json` does not support this). gojq disallows using keywords for function names (`def true: .; true` is a confusing query), and module name prefixes in function declarations (using module prefixes like `def m::f: .;` is undocumented). +- gojq supports reading from YAML input (`--yaml-input`) while jq does not. gojq also supports YAML output (`--yaml-output`). ### Color configuration The gojq command automatically disables coloring output when the output is not a tty. @@ -130,7 +129,7 @@ func main() { - Use [`gojq.ParseError`](https://pkg.go.dev/github.com/itchyny/gojq#ParseError) to get the error position and token of the parsing error. - Secondly, get the result iterator - using [`query.Run`](https://pkg.go.dev/github.com/itchyny/gojq#Query.Run) or [`query.RunWithContext`](https://pkg.go.dev/github.com/itchyny/gojq#Query.RunWithContext) - - or alternatively, compile the query using [`gojq.Compile`](https://pkg.go.dev/github.com/itchyny/gojq#Compile) and then [`code.Run`](https://pkg.go.dev/github.com/itchyny/gojq#Code.Run) or [`code.RunWithContext`](https://pkg.go.dev/github.com/itchyny/gojq#Code.RunWithContext). You can reuse the `*Code` against multiple inputs to avoid compilation of the same query. But for arguments of `code.Run`, do not give values sharing same data between multiple calls. + - or alternatively, compile the query using [`gojq.Compile`](https://pkg.go.dev/github.com/itchyny/gojq#Compile) and then [`code.Run`](https://pkg.go.dev/github.com/itchyny/gojq#Code.Run) or [`code.RunWithContext`](https://pkg.go.dev/github.com/itchyny/gojq#Code.RunWithContext). You can reuse the `*Code` against multiple inputs to avoid compilation of the same query. - In either case, you cannot use custom type values as the query input. The type should be `[]any` for an array and `map[string]any` for a map (just like decoded to an `any` using the [encoding/json](https://golang.org/pkg/encoding/json/) package). You can't use `[]int` or `map[string]string`, for example. If you want to query your custom struct, marshal to JSON, unmarshal to `any` and use it as the query input. - Thirdly, iterate through the results using [`iter.Next() (any, bool)`](https://pkg.go.dev/github.com/itchyny/gojq#Iter). The iterator can emit an error so make sure to handle it. The method returns `true` with results, and `false` when the iterator terminates. - The return type is not `(any, error)` because the iterator may emit multiple errors. The `jq` and `gojq` commands stop the iteration on the first error, but the library user can choose to stop the iteration on errors, or to continue until it terminates. diff --git a/vendor/github.com/itchyny/gojq/builtin.go b/vendor/github.com/itchyny/gojq/builtin.go index 8ae4666cba..013448341b 100644 --- a/vendor/github.com/itchyny/gojq/builtin.go +++ b/vendor/github.com/itchyny/gojq/builtin.go @@ -4,67 +4,68 @@ package gojq func init() { builtinFuncDefs = map[string][]*FuncDef{ - "IN": {{Name: "IN", Args: []string{"s"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "any", Args: []*Query{{Left: &Query{Func: "s"}, Op: OpEq, Right: &Query{Func: "."}}, {Func: "."}}}}}}, {Name: "IN", Args: []string{"src", "s"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "any", Args: []*Query{{Left: &Query{Func: "src"}, Op: OpEq, Right: &Query{Func: "s"}}, {Func: "."}}}}}}}, - "INDEX": {{Name: "INDEX", Args: []string{"stream", "idx_expr"}, Body: &Query{Term: &Term{Type: TermTypeReduce, Reduce: &Reduce{Query: &Query{Func: "stream"}, Pattern: &Pattern{Name: "$row"}, Start: &Query{Term: &Term{Type: TermTypeObject, Object: &Object{}}}, Update: &Query{Left: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Left: &Query{Func: "$row"}, Op: OpPipe, Right: &Query{Left: &Query{Func: "idx_expr"}, Op: OpPipe, Right: &Query{Func: "tostring"}}}}}}, Op: OpAssign, Right: &Query{Func: "$row"}}}}}}, {Name: "INDEX", Args: []string{"idx_expr"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "INDEX", Args: []*Query{{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Iter: true}}}}, {Func: "idx_expr"}}}}}}}, - "JOIN": {{Name: "JOIN", Args: []string{"$idx", "idx_expr"}, Body: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Iter: true}}}}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Left: &Query{Func: "."}, Op: OpComma, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$idx"}, SuffixList: []*Suffix{{Index: &Index{Start: &Query{Func: "idx_expr"}}}}}}}}}}}}}}}, {Name: "JOIN", Args: []string{"$idx", "stream", "idx_expr"}, Body: &Query{Left: &Query{Func: "stream"}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Left: &Query{Func: "."}, Op: OpComma, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$idx"}, SuffixList: []*Suffix{{Index: &Index{Start: &Query{Func: "idx_expr"}}}}}}}}}}}}, {Name: "JOIN", Args: []string{"$idx", "stream", "idx_expr", "join_expr"}, Body: &Query{Left: &Query{Func: "stream"}, Op: OpPipe, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Left: &Query{Func: "."}, Op: OpComma, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$idx"}, SuffixList: []*Suffix{{Index: &Index{Start: &Query{Func: "idx_expr"}}}}}}}}}}, Op: OpPipe, Right: &Query{Func: "join_expr"}}}}}, + "IN": {{Name: "IN", Args: []string{"s"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "any", Args: []*Query{{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "s"}}}, Right: &Query{Term: &Term{Type: TermTypeIdentity}}, Op: OpEq}, {Term: &Term{Type: TermTypeIdentity}}}}}}}, {Name: "IN", Args: []string{"src", "s"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "any", Args: []*Query{{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "src"}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "s"}}}, Op: OpEq}, {Term: &Term{Type: TermTypeIdentity}}}}}}}}, + "INDEX": {{Name: "INDEX", Args: []string{"stream", "idx_expr"}, Body: &Query{Term: &Term{Type: TermTypeReduce, Reduce: &Reduce{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "stream"}}}, Pattern: &Pattern{Name: "$row"}, Start: &Query{Term: &Term{Type: TermTypeObject, Object: &Object{}}}, Update: &Query{Left: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$row"}}}, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "idx_expr"}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "tostring"}}}, Op: OpPipe}, Op: OpPipe}}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$row"}}}, Op: OpAssign}}}}}, {Name: "INDEX", Args: []string{"idx_expr"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "INDEX", Args: []*Query{{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Iter: true}}}}, {Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "idx_expr"}}}}}}}}}, + "JOIN": {{Name: "JOIN", Args: []string{"$idx", "idx_expr"}, Body: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Iter: true}}}}, Right: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$idx"}, SuffixList: []*Suffix{{Index: &Index{Start: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "idx_expr"}}}}}}}}, Op: OpComma}}}}, Op: OpPipe}}}}}, {Name: "JOIN", Args: []string{"$idx", "stream", "idx_expr"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "stream"}}}, Right: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$idx"}, SuffixList: []*Suffix{{Index: &Index{Start: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "idx_expr"}}}}}}}}, Op: OpComma}}}}, Op: OpPipe}}, {Name: "JOIN", Args: []string{"$idx", "stream", "idx_expr", "join_expr"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "stream"}}}, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$idx"}, SuffixList: []*Suffix{{Index: &Index{Start: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "idx_expr"}}}}}}}}, Op: OpComma}}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "join_expr"}}}, Op: OpPipe}, Op: OpPipe}}}, "_assign": {}, + "_last": {}, "_modify": {}, - "add": {{Name: "add", Args: []string{"f"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Func: "f"}}}}, Op: OpPipe, Right: &Query{Func: "add"}}}}, - "all": {{Name: "all", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "all", Args: []*Query{{Func: "."}}}}}}, {Name: "all", Args: []string{"y"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "all", Args: []*Query{{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Iter: true}}}}, {Func: "y"}}}}}}, {Name: "all", Args: []string{"g", "y"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "isempty", Args: []*Query{{Left: &Query{Func: "g"}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Func: "y"}, Op: OpPipe, Right: &Query{Func: "not"}}}}}}}}}}}}}, - "any": {{Name: "any", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "any", Args: []*Query{{Func: "."}}}}}}, {Name: "any", Args: []string{"y"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "any", Args: []*Query{{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Iter: true}}}}, {Func: "y"}}}}}}, {Name: "any", Args: []string{"g", "y"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "isempty", Args: []*Query{{Left: &Query{Func: "g"}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Func: "y"}}}}}}}}}}, Op: OpPipe, Right: &Query{Func: "not"}}}}, - "arrays": {{Name: "arrays", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Func: "type"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "array"}}}}}}}}}}, - "booleans": {{Name: "booleans", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Func: "type"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "boolean"}}}}}}}}}}, - "capture": {{Name: "capture", Args: []string{"$re"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "capture", Args: []*Query{{Func: "$re"}, {Func: "null"}}}}}}, {Name: "capture", Args: []string{"$re", "$flags"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "match", Args: []*Query{{Func: "$re"}, {Func: "$flags"}}}}}, Op: OpPipe, Right: &Query{Func: "_capture"}}}}, - "combinations": {{Name: "combinations", Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Func: "length"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}, Then: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{}}}, Else: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}, SuffixList: []*Suffix{{Iter: true}, {Bind: &Bind{Patterns: []*Pattern{{Name: "$x"}}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Func: "$x"}}}}, Op: OpAdd, Right: &Query{Term: &Term{Type: TermTypeQuery, Query: &Query{Left: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Term: &Term{Type: TermTypeNumber, Number: "1"}}, IsSlice: true}}}, Op: OpPipe, Right: &Query{Func: "combinations"}}}}}}}}}}}}}}, {Name: "combinations", Args: []string{"n"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "limit", Args: []*Query{{Func: "n"}, {Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "repeat", Args: []*Query{{Func: "."}}}}}}}}}}}}, Op: OpPipe, Right: &Query{Func: "combinations"}}}}, - "del": {{Name: "del", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "delpaths", Args: []*Query{{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "path", Args: []*Query{{Func: "f"}}}}}}}}}}}}}}, - "finites": {{Name: "finites", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Func: "isfinite"}}}}}}}, - "first": {{Name: "first", Body: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}}}}, {Name: "first", Args: []string{"g"}, Body: &Query{Term: &Term{Type: TermTypeLabel, Label: &Label{Ident: "$out", Body: &Query{Left: &Query{Func: "g"}, Op: OpPipe, Right: &Query{Left: &Query{Func: "."}, Op: OpComma, Right: &Query{Term: &Term{Type: TermTypeBreak, Break: "$out"}}}}}}}}}, - "fromdate": {{Name: "fromdate", Body: &Query{Func: "fromdateiso8601"}}}, - "fromdateiso8601": {{Name: "fromdateiso8601", Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "strptime", Args: []*Query{{Term: &Term{Type: TermTypeString, Str: &String{Str: "%Y-%m-%dT%H:%M:%S%z"}}}}}}}, Op: OpPipe, Right: &Query{Func: "mktime"}}}}, - "fromstream": {{Name: "fromstream", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeForeach, Foreach: &Foreach{Query: &Query{Func: "f"}, Pattern: &Pattern{Name: "$pv"}, Start: &Query{Func: "null"}, Update: &Query{Left: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "e"}}}, Then: &Query{Func: "null"}}}}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$pv"}, SuffixList: []*Suffix{{Bind: &Bind{Patterns: []*Pattern{{Array: []*Pattern{{Name: "$p"}, {Name: "$v"}}}}, Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Func: "$pv"}, Op: OpPipe, Right: &Query{Left: &Query{Func: "length"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "2"}}}}, Then: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "setpath", Args: []*Query{{Left: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "v"}}}}}}, Op: OpAdd, Right: &Query{Func: "$p"}}, {Func: "$v"}}}}}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "setpath", Args: []*Query{{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "e"}}}}}}, {Left: &Query{Func: "$p"}, Op: OpPipe, Right: &Query{Left: &Query{Func: "length"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}}}}}}}, Else: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "setpath", Args: []*Query{{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "e"}}}}}}, {Left: &Query{Func: "$p"}, Op: OpPipe, Right: &Query{Left: &Query{Func: "length"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "1"}}}}}}}}}}}}}}}}}, Extract: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "e"}}}, Then: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "v"}}}, Else: &Query{Func: "empty"}}}}}}}}}, - "group_by": {{Name: "group_by", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_group_by", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map", Args: []*Query{{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Func: "f"}}}}}}}}}}}}}}, - "gsub": {{Name: "gsub", Args: []string{"$re", "str"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "sub", Args: []*Query{{Func: "$re"}, {Func: "str"}, {Term: &Term{Type: TermTypeString, Str: &String{Str: "g"}}}}}}}}, {Name: "gsub", Args: []string{"$re", "str", "$flags"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "sub", Args: []*Query{{Func: "$re"}, {Func: "str"}, {Left: &Query{Func: "$flags"}, Op: OpAdd, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "g"}}}}}}}}}}, - "in": {{Name: "in", Args: []string{"xs"}, Body: &Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Bind: &Bind{Patterns: []*Pattern{{Name: "$x"}}, Body: &Query{Left: &Query{Func: "xs"}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "has", Args: []*Query{{Func: "$x"}}}}}}}}}}}}}, - "inputs": {{Name: "inputs", Body: &Query{Term: &Term{Type: TermTypeTry, Try: &Try{Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "repeat", Args: []*Query{{Func: "input"}}}}}, Catch: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Func: "."}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "break"}}}}, Then: &Query{Func: "empty"}, Else: &Query{Func: "error"}}}}}}}}}, - "inside": {{Name: "inside", Args: []string{"xs"}, Body: &Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Bind: &Bind{Patterns: []*Pattern{{Name: "$x"}}, Body: &Query{Left: &Query{Func: "xs"}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "contains", Args: []*Query{{Func: "$x"}}}}}}}}}}}}}, - "isempty": {{Name: "isempty", Args: []string{"g"}, Body: &Query{Term: &Term{Type: TermTypeLabel, Label: &Label{Ident: "$out", Body: &Query{Left: &Query{Term: &Term{Type: TermTypeQuery, Query: &Query{Left: &Query{Func: "g"}, Op: OpPipe, Right: &Query{Left: &Query{Func: "false"}, Op: OpComma, Right: &Query{Term: &Term{Type: TermTypeBreak, Break: "$out"}}}}}}, Op: OpComma, Right: &Query{Func: "true"}}}}}}}, - "iterables": {{Name: "iterables", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Func: "type"}, Op: OpPipe, Right: &Query{Left: &Query{Left: &Query{Func: "."}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "array"}}}}, Op: OpOr, Right: &Query{Left: &Query{Func: "."}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "object"}}}}}}}}}}}}, - "last": {{Name: "last", Body: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Term: &Term{Type: TermTypeUnary, Unary: &Unary{Op: OpSub, Term: &Term{Type: TermTypeNumber, Number: "1"}}}}}}}}}, - "limit": {{Name: "limit", Args: []string{"$n", "g"}, Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Func: "$n"}, Op: OpGt, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}, Then: &Query{Term: &Term{Type: TermTypeLabel, Label: &Label{Ident: "$out", Body: &Query{Term: &Term{Type: TermTypeForeach, Foreach: &Foreach{Query: &Query{Func: "g"}, Pattern: &Pattern{Name: "$item"}, Start: &Query{Func: "$n"}, Update: &Query{Left: &Query{Func: "."}, Op: OpSub, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "1"}}}, Extract: &Query{Left: &Query{Func: "$item"}, Op: OpComma, Right: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Func: "."}, Op: OpLe, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}, Then: &Query{Term: &Term{Type: TermTypeBreak, Break: "$out"}}, Else: &Query{Func: "empty"}}}}}}}}}}}, Elif: []*IfElif{{Cond: &Query{Left: &Query{Func: "$n"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}, Then: &Query{Func: "empty"}}}, Else: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "error", Args: []*Query{{Term: &Term{Type: TermTypeString, Str: &String{Str: "limit doesn't support negative count"}}}}}}}}}}}}, - "map": {{Name: "map", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Iter: true}}}}, Op: OpPipe, Right: &Query{Func: "f"}}}}}}}, - "map_values": {{Name: "map_values", Args: []string{"f"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Iter: true}}}}, Op: OpModify, Right: &Query{Func: "f"}}}}, - "match": {{Name: "match", Args: []string{"$re"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "match", Args: []*Query{{Func: "$re"}, {Func: "null"}}}}}}, {Name: "match", Args: []string{"$re", "$flags"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_match", Args: []*Query{{Func: "$re"}, {Func: "$flags"}, {Func: "false"}}}, SuffixList: []*Suffix{{Iter: true}}}}}}, - "max_by": {{Name: "max_by", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_max_by", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map", Args: []*Query{{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Func: "f"}}}}}}}}}}}}}}, - "min_by": {{Name: "min_by", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_min_by", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map", Args: []*Query{{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Func: "f"}}}}}}}}}}}}}}, - "normals": {{Name: "normals", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Func: "isnormal"}}}}}}}, - "not": {{Name: "not", Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Func: "."}, Then: &Query{Func: "false"}, Else: &Query{Func: "true"}}}}}}, - "nth": {{Name: "nth", Args: []string{"$n"}, Body: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Func: "$n"}}}}}, {Name: "nth", Args: []string{"$n", "g"}, Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Func: "$n"}, Op: OpGe, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}, Then: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "first", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "skip", Args: []*Query{{Func: "$n"}, {Func: "g"}}}}}}}}}, Else: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "error", Args: []*Query{{Term: &Term{Type: TermTypeString, Str: &String{Str: "nth doesn't support negative index"}}}}}}}}}}}}, - "nulls": {{Name: "nulls", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Func: "."}, Op: OpEq, Right: &Query{Func: "null"}}}}}}}}, - "numbers": {{Name: "numbers", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Func: "type"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "number"}}}}}}}}}}, - "objects": {{Name: "objects", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Func: "type"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "object"}}}}}}}}}}, - "paths": {{Name: "paths", Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "path", Args: []*Query{{Func: ".."}}}}}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Func: "."}, Op: OpNe, Right: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{}}}}}}}}}}, {Name: "paths", Args: []string{"f"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "path", Args: []*Query{{Left: &Query{Func: ".."}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Func: "f"}}}}}}}}}}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Func: "."}, Op: OpNe, Right: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{}}}}}}}}}}}, - "pick": {{Name: "pick", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Bind: &Bind{Patterns: []*Pattern{{Name: "$v"}}, Body: &Query{Term: &Term{Type: TermTypeReduce, Reduce: &Reduce{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "path", Args: []*Query{{Func: "f"}}}}}, Pattern: &Pattern{Name: "$p"}, Start: &Query{Func: "null"}, Update: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "setpath", Args: []*Query{{Func: "$p"}, {Left: &Query{Func: "$v"}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "getpath", Args: []*Query{{Func: "$p"}}}}}}}}}}}}}}}}}}}}, - "range": {{Name: "range", Args: []string{"$end"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_range", Args: []*Query{{Term: &Term{Type: TermTypeNumber, Number: "0"}}, {Func: "$end"}, {Term: &Term{Type: TermTypeNumber, Number: "1"}}}}}}}, {Name: "range", Args: []string{"$start", "$end"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_range", Args: []*Query{{Func: "$start"}, {Func: "$end"}, {Term: &Term{Type: TermTypeNumber, Number: "1"}}}}}}}, {Name: "range", Args: []string{"$start", "$end", "$step"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_range", Args: []*Query{{Func: "$start"}, {Func: "$end"}, {Func: "$step"}}}}}}}, - "recurse": {{Name: "recurse", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "recurse", Args: []*Query{{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Iter: true}, {Optional: true}}}}}}}}}, {Name: "recurse", Args: []string{"f"}, Body: &Query{FuncDefs: []*FuncDef{{Name: "r", Body: &Query{Left: &Query{Func: "."}, Op: OpComma, Right: &Query{Term: &Term{Type: TermTypeQuery, Query: &Query{Left: &Query{Func: "f"}, Op: OpPipe, Right: &Query{Func: "r"}}}}}}}, Func: "r"}}, {Name: "recurse", Args: []string{"f", "cond"}, Body: &Query{FuncDefs: []*FuncDef{{Name: "r", Body: &Query{Left: &Query{Func: "."}, Op: OpComma, Right: &Query{Term: &Term{Type: TermTypeQuery, Query: &Query{Left: &Query{Func: "f"}, Op: OpPipe, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Func: "cond"}}}}}, Op: OpPipe, Right: &Query{Func: "r"}}}}}}}}, Func: "r"}}}, - "repeat": {{Name: "repeat", Args: []string{"f"}, Body: &Query{FuncDefs: []*FuncDef{{Name: "_repeat", Body: &Query{Left: &Query{Func: "f"}, Op: OpComma, Right: &Query{Func: "_repeat"}}}}, Func: "_repeat"}}}, - "scalars": {{Name: "scalars", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Func: "type"}, Op: OpPipe, Right: &Query{Left: &Query{Left: &Query{Func: "."}, Op: OpNe, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "array"}}}}, Op: OpAnd, Right: &Query{Left: &Query{Func: "."}, Op: OpNe, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "object"}}}}}}}}}}}}, - "scan": {{Name: "scan", Args: []string{"$re"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "scan", Args: []*Query{{Func: "$re"}, {Func: "null"}}}}}}, {Name: "scan", Args: []string{"$re", "$flags"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "match", Args: []*Query{{Func: "$re"}, {Left: &Query{Func: "$flags"}, Op: OpAdd, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "g"}}}}}}}}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "captures"}}}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{}}}}, Then: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "string"}}}, Else: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "captures"}, SuffixList: []*Suffix{{Iter: true}, {Index: &Index{Name: "string"}}}}}}}}}}}}}}, - "select": {{Name: "select", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Func: "f"}, Then: &Query{Func: "."}, Else: &Query{Func: "empty"}}}}}}, - "skip": {{Name: "skip", Args: []string{"$n", "g"}, Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Func: "$n"}, Op: OpGt, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}, Then: &Query{Term: &Term{Type: TermTypeForeach, Foreach: &Foreach{Query: &Query{Func: "g"}, Pattern: &Pattern{Name: "$item"}, Start: &Query{Func: "$n"}, Update: &Query{Left: &Query{Func: "."}, Op: OpSub, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "1"}}}, Extract: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Func: "."}, Op: OpLt, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}, Then: &Query{Func: "$item"}, Else: &Query{Func: "empty"}}}}}}}, Elif: []*IfElif{{Cond: &Query{Left: &Query{Func: "$n"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}, Then: &Query{Func: "g"}}}, Else: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "error", Args: []*Query{{Term: &Term{Type: TermTypeString, Str: &String{Str: "skip doesn't support negative count"}}}}}}}}}}}}, - "sort_by": {{Name: "sort_by", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_sort_by", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map", Args: []*Query{{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Func: "f"}}}}}}}}}}}}}}, - "splits": {{Name: "splits", Args: []string{"$re"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "splits", Args: []*Query{{Func: "$re"}, {Func: "null"}}}}}}, {Name: "splits", Args: []string{"$re", "$flags"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "split", Args: []*Query{{Func: "$re"}, {Func: "$flags"}}}, SuffixList: []*Suffix{{Iter: true}}}}}}, - "strings": {{Name: "strings", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Func: "type"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "string"}}}}}}}}}}, - "sub": {{Name: "sub", Args: []string{"$re", "str"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "sub", Args: []*Query{{Func: "$re"}, {Func: "str"}, {Func: "null"}}}}}}, {Name: "sub", Args: []string{"$re", "str", "$flags"}, Body: &Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Bind: &Bind{Patterns: []*Pattern{{Name: "$str"}}, Body: &Query{FuncDefs: []*FuncDef{{Name: "_sub", Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "matches"}}}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{}}}}, Then: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$str"}, SuffixList: []*Suffix{{Index: &Index{End: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "offset"}}}, IsSlice: true}}}}}, Op: OpAdd, Right: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "string"}}}}, Else: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "matches"}, SuffixList: []*Suffix{{Index: &Index{Start: &Query{Term: &Term{Type: TermTypeUnary, Unary: &Unary{Op: OpSub, Term: &Term{Type: TermTypeNumber, Number: "1"}}}}}}, {Bind: &Bind{Patterns: []*Pattern{{Name: "$r"}}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeObject, Object: &Object{KeyVals: []*ObjectKeyVal{{Key: "string", Val: &Query{Left: &Query{Left: &Query{Term: &Term{Type: TermTypeQuery, Query: &Query{Left: &Query{Func: "$r"}, Op: OpPipe, Right: &Query{Left: &Query{Func: "_capture"}, Op: OpPipe, Right: &Query{Func: "str"}}}}}, Op: OpAdd, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$str"}, SuffixList: []*Suffix{{Index: &Index{Start: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$r"}, SuffixList: []*Suffix{{Index: &Index{Name: "offset"}}}}}, Op: OpAdd, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$r"}, SuffixList: []*Suffix{{Index: &Index{Name: "length"}}}}}}, End: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "offset"}}}, IsSlice: true}}}}}}, Op: OpAdd, Right: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "string"}}}}}, {Key: "offset", Val: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$r"}, SuffixList: []*Suffix{{Index: &Index{Name: "offset"}}}}}}, {Key: "matches", Val: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "matches"}, SuffixList: []*Suffix{{Index: &Index{End: &Query{Term: &Term{Type: TermTypeUnary, Unary: &Unary{Op: OpSub, Term: &Term{Type: TermTypeNumber, Number: "1"}}}}, IsSlice: true}}}}}}}}}}, Op: OpPipe, Right: &Query{Func: "_sub"}}}}}}}}}}}}, Left: &Query{Term: &Term{Type: TermTypeObject, Object: &Object{KeyVals: []*ObjectKeyVal{{Key: "string", Val: &Query{Term: &Term{Type: TermTypeString, Str: &String{}}}}, {Key: "matches", Val: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "match", Args: []*Query{{Func: "$re"}, {Func: "$flags"}}}}}}}}}}}}}, Op: OpPipe, Right: &Query{Func: "_sub"}}}}}}}}}, - "test": {{Name: "test", Args: []string{"$re"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "test", Args: []*Query{{Func: "$re"}, {Func: "null"}}}}}}, {Name: "test", Args: []string{"$re", "$flags"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_match", Args: []*Query{{Func: "$re"}, {Func: "$flags"}, {Func: "true"}}}}}}}, - "todate": {{Name: "todate", Body: &Query{Func: "todateiso8601"}}}, + "add": {{Name: "add", Args: []string{"f"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "f"}}}}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "add"}}}, Op: OpPipe}}}, + "all": {{Name: "all", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "all", Args: []*Query{{Term: &Term{Type: TermTypeIdentity}}}}}}}, {Name: "all", Args: []string{"y"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "all", Args: []*Query{{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Iter: true}}}}, {Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "y"}}}}}}}}, {Name: "all", Args: []string{"g", "y"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "isempty", Args: []*Query{{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "g"}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "y"}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "not"}}}, Op: OpPipe}}}}}, Op: OpPipe}}}}}}}, + "any": {{Name: "any", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "any", Args: []*Query{{Term: &Term{Type: TermTypeIdentity}}}}}}}, {Name: "any", Args: []string{"y"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "any", Args: []*Query{{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Iter: true}}}}, {Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "y"}}}}}}}}, {Name: "any", Args: []string{"g", "y"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "isempty", Args: []*Query{{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "g"}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "y"}}}}}}}, Op: OpPipe}}}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "not"}}}, Op: OpPipe}}}, + "arrays": {{Name: "arrays", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "type"}}}, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "array"}}}, Op: OpEq}}}}}}}, + "booleans": {{Name: "booleans", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "type"}}}, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "boolean"}}}, Op: OpEq}}}}}}}, + "capture": {{Name: "capture", Args: []string{"$re"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "capture", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$re"}}}, {Term: &Term{Type: TermTypeNull}}}}}}}, {Name: "capture", Args: []string{"$re", "$flags"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "match", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$re"}}}, {Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$flags"}}}}}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_capture"}}}, Op: OpPipe}}}, + "combinations": {{Name: "combinations", Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "length"}}}, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}, Op: OpEq}, Then: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{}}}, Else: &Query{Left: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}, SuffixList: []*Suffix{{Iter: true}}}}, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$x"}}}}}}, Right: &Query{Term: &Term{Type: TermTypeQuery, Query: &Query{Left: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Term: &Term{Type: TermTypeNumber, Number: "1"}}, IsSlice: true}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "combinations"}}}, Op: OpPipe}}}, Op: OpAdd}, Patterns: []*Pattern{{Name: "$x"}}, Op: OpPipe}}}}}, {Name: "combinations", Args: []string{"n"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "limit", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "n"}}}, {Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "repeat", Args: []*Query{{Term: &Term{Type: TermTypeIdentity}}}}}}}}}}}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "combinations"}}}, Op: OpPipe}}}, + "del": {{Name: "del", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "delpaths", Args: []*Query{{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "path", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "f"}}}}}}}}}}}}}}}}, + "finites": {{Name: "finites", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "isfinite"}}}}}}}}}, + "first": {{Name: "first", Body: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}}}}, {Name: "first", Args: []string{"g"}, Body: &Query{Term: &Term{Type: TermTypeLabel, Label: &Label{Ident: "$out", Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "g"}}}, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Term: &Term{Type: TermTypeBreak, Break: "$out"}}, Op: OpComma}, Op: OpPipe}}}}}}, + "fromdate": {{Name: "fromdate", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "fromdateiso8601"}}}}}, + "fromdateiso8601": {{Name: "fromdateiso8601", Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "strptime", Args: []*Query{{Term: &Term{Type: TermTypeString, Str: &String{Str: "%Y-%m-%dT%H:%M:%S%z"}}}}}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "mktime"}}}, Op: OpPipe}}}, + "fromstream": {{Name: "fromstream", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeForeach, Foreach: &Foreach{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "f"}}}, Pattern: &Pattern{Name: "$pv"}, Start: &Query{Term: &Term{Type: TermTypeNull}}, Update: &Query{Left: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "e"}}}, Then: &Query{Term: &Term{Type: TermTypeNull}}}}}, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$pv"}}}, Right: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$pv"}}}, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "length"}}}, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "2"}}, Op: OpEq}, Op: OpPipe}, Then: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "setpath", Args: []*Query{{Left: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "v"}}}}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$p"}}}, Op: OpAdd}, {Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$v"}}}}}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "setpath", Args: []*Query{{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "e"}}}}}}, {Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$p"}}}, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "length"}}}, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}, Op: OpEq}, Op: OpPipe}}}}}, Op: OpPipe}, Else: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "setpath", Args: []*Query{{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "e"}}}}}}, {Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$p"}}}, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "length"}}}, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "1"}}, Op: OpEq}, Op: OpPipe}}}}}}}}, Patterns: []*Pattern{{Array: []*Pattern{{Name: "$p"}, {Name: "$v"}}}}, Op: OpPipe}, Op: OpPipe}, Extract: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "e"}}}, Then: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "v"}}}, Else: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "empty"}}}}}}}}}}}, + "group_by": {{Name: "group_by", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_group_by", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map", Args: []*Query{{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "f"}}}}}}}}}}}}}}}}, + "gsub": {{Name: "gsub", Args: []string{"$re", "str"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "sub", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$re"}}}, {Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "str"}}}, {Term: &Term{Type: TermTypeString, Str: &String{Str: "g"}}}}}}}}, {Name: "gsub", Args: []string{"$re", "str", "$flags"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "sub", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$re"}}}, {Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "str"}}}, {Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$flags"}}}, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "g"}}}, Op: OpAdd}}}}}}}, + "in": {{Name: "in", Args: []string{"xs"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "xs"}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "has", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$x"}}}}}}}, Op: OpPipe}, Patterns: []*Pattern{{Name: "$x"}}, Op: OpPipe}}}, + "inputs": {{Name: "inputs", Body: &Query{Term: &Term{Type: TermTypeTry, Try: &Try{Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "repeat", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "input"}}}}}}}, Catch: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "break"}}}, Op: OpEq}, Then: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "empty"}}}, Else: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "error"}}}}}}}}}}}, + "inside": {{Name: "inside", Args: []string{"xs"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "xs"}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "contains", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$x"}}}}}}}, Op: OpPipe}, Patterns: []*Pattern{{Name: "$x"}}, Op: OpPipe}}}, + "isempty": {{Name: "isempty", Args: []string{"g"}, Body: &Query{Term: &Term{Type: TermTypeLabel, Label: &Label{Ident: "$out", Body: &Query{Left: &Query{Term: &Term{Type: TermTypeQuery, Query: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "g"}}}, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeFalse}}, Right: &Query{Term: &Term{Type: TermTypeBreak, Break: "$out"}}, Op: OpComma}, Op: OpPipe}}}, Right: &Query{Term: &Term{Type: TermTypeTrue}}, Op: OpComma}}}}}}, + "iterables": {{Name: "iterables", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "type"}}}, Right: &Query{Left: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "array"}}}, Op: OpEq}, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "object"}}}, Op: OpEq}, Op: OpOr}, Op: OpPipe}}}}}}}, + "last": {{Name: "last", Body: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Term: &Term{Type: TermTypeUnary, Unary: &Unary{Op: OpSub, Term: &Term{Type: TermTypeNumber, Number: "1"}}}}}}}}, {Name: "last", Args: []string{"g"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_last", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "g"}}}}}}}}}, + "limit": {{Name: "limit", Args: []string{"$n", "g"}, Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$n"}}}, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}, Op: OpGt}, Then: &Query{Term: &Term{Type: TermTypeLabel, Label: &Label{Ident: "$out", Body: &Query{Term: &Term{Type: TermTypeForeach, Foreach: &Foreach{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "g"}}}, Pattern: &Pattern{Name: "$item"}, Start: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$n"}}}, Update: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "1"}}, Op: OpSub}, Extract: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$item"}}}, Right: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}, Op: OpLe}, Then: &Query{Term: &Term{Type: TermTypeBreak, Break: "$out"}}, Else: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "empty"}}}}}}, Op: OpComma}}}}}}}, Elif: []*IfElif{{Cond: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$n"}}}, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}, Op: OpEq}, Then: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "empty"}}}}}, Else: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "error", Args: []*Query{{Term: &Term{Type: TermTypeString, Str: &String{Str: "limit doesn't support negative count"}}}}}}}}}}}}, + "map": {{Name: "map", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Iter: true}}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "f"}}}, Op: OpPipe}}}}}}, + "map_values": {{Name: "map_values", Args: []string{"f"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Iter: true}}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "f"}}}, Op: OpModify}}}, + "match": {{Name: "match", Args: []string{"$re"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "match", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$re"}}}, {Term: &Term{Type: TermTypeNull}}}}}}}, {Name: "match", Args: []string{"$re", "$flags"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_match", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$re"}}}, {Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$flags"}}}, {Term: &Term{Type: TermTypeFalse}}}}, SuffixList: []*Suffix{{Iter: true}}}}}}, + "max_by": {{Name: "max_by", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_max_by", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map", Args: []*Query{{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "f"}}}}}}}}}}}}}}}}, + "min_by": {{Name: "min_by", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_min_by", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map", Args: []*Query{{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "f"}}}}}}}}}}}}}}}}, + "normals": {{Name: "normals", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "isnormal"}}}}}}}}}, + "not": {{Name: "not", Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Term: &Term{Type: TermTypeIdentity}}, Then: &Query{Term: &Term{Type: TermTypeFalse}}, Else: &Query{Term: &Term{Type: TermTypeTrue}}}}}}}, + "nth": {{Name: "nth", Args: []string{"$n"}, Body: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$n"}}}}}}}, {Name: "nth", Args: []string{"$n", "g"}, Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$n"}}}, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}, Op: OpGe}, Then: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "first", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "skip", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$n"}}}, {Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "g"}}}}}}}}}}}, Else: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "error", Args: []*Query{{Term: &Term{Type: TermTypeString, Str: &String{Str: "nth doesn't support negative index"}}}}}}}}}}}}, + "nulls": {{Name: "nulls", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Term: &Term{Type: TermTypeNull}}, Op: OpEq}}}}}}}, + "numbers": {{Name: "numbers", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "type"}}}, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "number"}}}, Op: OpEq}}}}}}}, + "objects": {{Name: "objects", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "type"}}}, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "object"}}}, Op: OpEq}}}}}}}, + "paths": {{Name: "paths", Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "path", Args: []*Query{{Term: &Term{Type: TermTypeRecurse}}}}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{}}}, Op: OpNe}}}}}, Op: OpPipe}}, {Name: "paths", Args: []string{"f"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "path", Args: []*Query{{Left: &Query{Term: &Term{Type: TermTypeRecurse}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "f"}}}}}}}, Op: OpPipe}}}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{}}}, Op: OpNe}}}}}, Op: OpPipe}}}, + "pick": {{Name: "pick", Args: []string{"f"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Term: &Term{Type: TermTypeReduce, Reduce: &Reduce{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "path", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "f"}}}}}}}, Pattern: &Pattern{Name: "$p"}, Start: &Query{Term: &Term{Type: TermTypeNull}}, Update: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "setpath", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$p"}}}, {Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$v"}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "getpath", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$p"}}}}}}}, Op: OpPipe}}}}}}}}, Patterns: []*Pattern{{Name: "$v"}}, Op: OpPipe}}}, + "range": {{Name: "range", Args: []string{"$end"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_range", Args: []*Query{{Term: &Term{Type: TermTypeNumber, Number: "0"}}, {Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$end"}}}, {Term: &Term{Type: TermTypeNumber, Number: "1"}}}}}}}, {Name: "range", Args: []string{"$start", "$end"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_range", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$start"}}}, {Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$end"}}}, {Term: &Term{Type: TermTypeNumber, Number: "1"}}}}}}}, {Name: "range", Args: []string{"$start", "$end", "$step"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_range", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$start"}}}, {Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$end"}}}, {Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$step"}}}}}}}}}, + "recurse": {{Name: "recurse", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "recurse", Args: []*Query{{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Iter: true}, {Optional: true}}}}}}}}}, {Name: "recurse", Args: []string{"f"}, Body: &Query{FuncDefs: []*FuncDef{{Name: "r", Body: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Term: &Term{Type: TermTypeQuery, Query: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "f"}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "r"}}}, Op: OpPipe}}}, Op: OpComma}}}, Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "r"}}}}, {Name: "recurse", Args: []string{"f", "cond"}, Body: &Query{FuncDefs: []*FuncDef{{Name: "r", Body: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Term: &Term{Type: TermTypeQuery, Query: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "f"}}}, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "cond"}}}}}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "r"}}}, Op: OpPipe}, Op: OpPipe}}}, Op: OpComma}}}, Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "r"}}}}}, + "repeat": {{Name: "repeat", Args: []string{"f"}, Body: &Query{FuncDefs: []*FuncDef{{Name: "_repeat", Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "f"}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_repeat"}}}, Op: OpComma}}}, Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_repeat"}}}}}, + "scalars": {{Name: "scalars", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "type"}}}, Right: &Query{Left: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "array"}}}, Op: OpNe}, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "object"}}}, Op: OpNe}, Op: OpAnd}, Op: OpPipe}}}}}}}, + "scan": {{Name: "scan", Args: []string{"$re"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "scan", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$re"}}}, {Term: &Term{Type: TermTypeNull}}}}}}}, {Name: "scan", Args: []string{"$re", "$flags"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "match", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$re"}}}, {Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$flags"}}}, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "g"}}}, Op: OpAdd}}}}}, Right: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "captures"}}}, Right: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{}}}, Op: OpEq}, Then: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "string"}}}, Else: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "captures"}, SuffixList: []*Suffix{{Iter: true}, {Index: &Index{Name: "string"}}}}}}}}}}}, Op: OpPipe}}}, + "select": {{Name: "select", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "f"}}}, Then: &Query{Term: &Term{Type: TermTypeIdentity}}, Else: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "empty"}}}}}}}}, + "skip": {{Name: "skip", Args: []string{"$n", "g"}, Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$n"}}}, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}, Op: OpGt}, Then: &Query{Term: &Term{Type: TermTypeForeach, Foreach: &Foreach{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "g"}}}, Pattern: &Pattern{Name: "$item"}, Start: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$n"}}}, Update: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "1"}}, Op: OpSub}, Extract: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}, Op: OpLt}, Then: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$item"}}}, Else: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "empty"}}}}}}}}}, Elif: []*IfElif{{Cond: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$n"}}}, Right: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}, Op: OpEq}, Then: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "g"}}}}}, Else: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "error", Args: []*Query{{Term: &Term{Type: TermTypeString, Str: &String{Str: "skip doesn't support negative count"}}}}}}}}}}}}, + "sort_by": {{Name: "sort_by", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_sort_by", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map", Args: []*Query{{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "f"}}}}}}}}}}}}}}}}, + "splits": {{Name: "splits", Args: []string{"$re"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "splits", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$re"}}}, {Term: &Term{Type: TermTypeNull}}}}}}}, {Name: "splits", Args: []string{"$re", "$flags"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "split", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$re"}}}, {Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$flags"}}}}}, SuffixList: []*Suffix{{Iter: true}}}}}}, + "strings": {{Name: "strings", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "type"}}}, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "string"}}}, Op: OpEq}}}}}}}, + "sub": {{Name: "sub", Args: []string{"$re", "str"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "sub", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$re"}}}, {Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "str"}}}, {Term: &Term{Type: TermTypeNull}}}}}}}, {Name: "sub", Args: []string{"$re", "str", "$flags"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{FuncDefs: []*FuncDef{{Name: "_sub", Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "matches"}}}, Right: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{}}}, Op: OpEq}, Then: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$str"}, SuffixList: []*Suffix{{Index: &Index{End: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "offset"}}}, IsSlice: true}}}}}, Right: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "string"}}}, Op: OpAdd}, Else: &Query{Left: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "matches"}, SuffixList: []*Suffix{{Index: &Index{Start: &Query{Term: &Term{Type: TermTypeUnary, Unary: &Unary{Op: OpSub, Term: &Term{Type: TermTypeNumber, Number: "1"}}}}}}}}}, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeObject, Object: &Object{KeyVals: []*ObjectKeyVal{{Key: "string", Val: &Query{Left: &Query{Left: &Query{Term: &Term{Type: TermTypeQuery, Query: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$r"}}}, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_capture"}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "str"}}}, Op: OpPipe}, Op: OpPipe}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$str"}, SuffixList: []*Suffix{{Index: &Index{Start: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$r"}, SuffixList: []*Suffix{{Index: &Index{Name: "offset"}}}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$r"}, SuffixList: []*Suffix{{Index: &Index{Name: "length"}}}}}, Op: OpAdd}, End: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "offset"}}}, IsSlice: true}}}}}, Op: OpAdd}, Right: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "string"}}}, Op: OpAdd}}, {Key: "offset", Val: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$r"}, SuffixList: []*Suffix{{Index: &Index{Name: "offset"}}}}}}, {Key: "matches", Val: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Name: "matches"}, SuffixList: []*Suffix{{Index: &Index{End: &Query{Term: &Term{Type: TermTypeUnary, Unary: &Unary{Op: OpSub, Term: &Term{Type: TermTypeNumber, Number: "1"}}}}, IsSlice: true}}}}}}}}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_sub"}}}, Op: OpPipe}, Patterns: []*Pattern{{Name: "$r"}}, Op: OpPipe}}}}}}, Left: &Query{Term: &Term{Type: TermTypeObject, Object: &Object{KeyVals: []*ObjectKeyVal{{Key: "string", Val: &Query{Term: &Term{Type: TermTypeString, Str: &String{}}}}, {Key: "matches", Val: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "match", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$re"}}}, {Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$flags"}}}}}}}}}}}}}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_sub"}}}, Op: OpPipe}, Patterns: []*Pattern{{Name: "$str"}}, Op: OpPipe}}}, + "test": {{Name: "test", Args: []string{"$re"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "test", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$re"}}}, {Term: &Term{Type: TermTypeNull}}}}}}}, {Name: "test", Args: []string{"$re", "$flags"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_match", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$re"}}}, {Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$flags"}}}, {Term: &Term{Type: TermTypeTrue}}}}}}}}, + "todate": {{Name: "todate", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "todateiso8601"}}}}}, "todateiso8601": {{Name: "todateiso8601", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "strftime", Args: []*Query{{Term: &Term{Type: TermTypeString, Str: &String{Str: "%Y-%m-%dT%H:%M:%SZ"}}}}}}}}}, - "tostream": {{Name: "tostream", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "path", Args: []*Query{{FuncDefs: []*FuncDef{{Name: "r", Body: &Query{Left: &Query{Term: &Term{Type: TermTypeQuery, Query: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Iter: true}, {Optional: true}}}}, Op: OpPipe, Right: &Query{Func: "r"}}}}, Op: OpComma, Right: &Query{Func: "."}}}}, Func: "r"}}}, SuffixList: []*Suffix{{Bind: &Bind{Patterns: []*Pattern{{Name: "$p"}}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "getpath", Args: []*Query{{Func: "$p"}}}}}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeReduce, Reduce: &Reduce{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "path", Args: []*Query{{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Iter: true}, {Optional: true}}}}}}}}, Pattern: &Pattern{Name: "$q"}, Start: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Left: &Query{Func: "$p"}, Op: OpComma, Right: &Query{Func: "."}}}}}, Update: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Left: &Query{Func: "$p"}, Op: OpAdd, Right: &Query{Func: "$q"}}}}}}}}}}}}}}}}, - "truncate_stream": {{Name: "truncate_stream", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Bind: &Bind{Patterns: []*Pattern{{Name: "$n"}}, Body: &Query{Left: &Query{Func: "null"}, Op: OpPipe, Right: &Query{Left: &Query{Func: "f"}, Op: OpPipe, Right: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}}}, Op: OpPipe, Right: &Query{Left: &Query{Func: "length"}, Op: OpGt, Right: &Query{Func: "$n"}}}, Then: &Query{Left: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}}}, Op: OpModify, Right: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Func: "$n"}, IsSlice: true}}}}, Else: &Query{Func: "empty"}}}}}}}}}}}}}, - "unique_by": {{Name: "unique_by", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_unique_by", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map", Args: []*Query{{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Func: "f"}}}}}}}}}}}}}}, - "until": {{Name: "until", Args: []string{"cond", "next"}, Body: &Query{FuncDefs: []*FuncDef{{Name: "_until", Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Func: "cond"}, Then: &Query{Func: "."}, Else: &Query{Left: &Query{Func: "next"}, Op: OpPipe, Right: &Query{Func: "_until"}}}}}}}, Func: "_until"}}}, - "values": {{Name: "values", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Func: "."}, Op: OpNe, Right: &Query{Func: "null"}}}}}}}}, - "walk": {{Name: "walk", Args: []string{"f"}, Body: &Query{FuncDefs: []*FuncDef{{Name: "_walk", Body: &Query{Left: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Func: "type"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "array"}}}}, Then: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map", Args: []*Query{{Func: "_walk"}}}}}, Elif: []*IfElif{{Cond: &Query{Left: &Query{Func: "type"}, Op: OpEq, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "object"}}}}, Then: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map_values", Args: []*Query{{Func: "_walk"}}}}}}}}}}, Op: OpPipe, Right: &Query{Func: "f"}}}}, Func: "_walk"}}}, - "while": {{Name: "while", Args: []string{"cond", "update"}, Body: &Query{FuncDefs: []*FuncDef{{Name: "_while", Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Func: "cond"}, Then: &Query{Left: &Query{Func: "."}, Op: OpComma, Right: &Query{Term: &Term{Type: TermTypeQuery, Query: &Query{Left: &Query{Func: "update"}, Op: OpPipe, Right: &Query{Func: "_while"}}}}}, Else: &Query{Func: "empty"}}}}}}, Func: "_while"}}}, - "with_entries": {{Name: "with_entries", Args: []string{"f"}, Body: &Query{Left: &Query{Func: "to_entries"}, Op: OpPipe, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map", Args: []*Query{{Func: "f"}}}}}, Op: OpPipe, Right: &Query{Func: "from_entries"}}}}}, + "tostream": {{Name: "tostream", Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "path", Args: []*Query{{FuncDefs: []*FuncDef{{Name: "r", Body: &Query{Left: &Query{Term: &Term{Type: TermTypeQuery, Query: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Iter: true}, {Optional: true}}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "r"}}}, Op: OpPipe}}}, Right: &Query{Term: &Term{Type: TermTypeIdentity}}, Op: OpComma}}}, Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "r"}}}}}}}, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "getpath", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$p"}}}}}}}, Right: &Query{Term: &Term{Type: TermTypeReduce, Reduce: &Reduce{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "path", Args: []*Query{{Term: &Term{Type: TermTypeIdentity, SuffixList: []*Suffix{{Iter: true}, {Optional: true}}}}}}}}, Pattern: &Pattern{Name: "$q"}, Start: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$p"}}}, Right: &Query{Term: &Term{Type: TermTypeIdentity}}, Op: OpComma}}}}, Update: &Query{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$p"}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$q"}}}, Op: OpAdd}}}}}}}, Op: OpPipe}, Patterns: []*Pattern{{Name: "$p"}}, Op: OpPipe}}}, + "truncate_stream": {{Name: "truncate_stream", Args: []string{"f"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeNull}}, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "f"}}}, Right: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}}}, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "length"}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$n"}}}, Op: OpGt}, Op: OpPipe}, Then: &Query{Left: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Term: &Term{Type: TermTypeNumber, Number: "0"}}}}}, Right: &Query{Term: &Term{Type: TermTypeIndex, Index: &Index{Start: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "$n"}}}, IsSlice: true}}}, Op: OpModify}, Else: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "empty"}}}}}}, Op: OpPipe}, Op: OpPipe}, Patterns: []*Pattern{{Name: "$n"}}, Op: OpPipe}}}, + "unique_by": {{Name: "unique_by", Args: []string{"f"}, Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_unique_by", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map", Args: []*Query{{Term: &Term{Type: TermTypeArray, Array: &Array{Query: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "f"}}}}}}}}}}}}}}}}, + "until": {{Name: "until", Args: []string{"cond", "next"}, Body: &Query{FuncDefs: []*FuncDef{{Name: "_until", Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "cond"}}}, Then: &Query{Term: &Term{Type: TermTypeIdentity}}, Else: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "next"}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_until"}}}, Op: OpPipe}}}}}}, Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_until"}}}}}, + "values": {{Name: "values", Body: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "select", Args: []*Query{{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Term: &Term{Type: TermTypeNull}}, Op: OpNe}}}}}}}, + "walk": {{Name: "walk", Args: []string{"f"}, Body: &Query{FuncDefs: []*FuncDef{{Name: "_walk", Body: &Query{Left: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "type"}}}, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "array"}}}, Op: OpEq}, Then: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_walk"}}}}}}}, Elif: []*IfElif{{Cond: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "type"}}}, Right: &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: "object"}}}, Op: OpEq}, Then: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map_values", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_walk"}}}}}}}}}}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "f"}}}, Op: OpPipe}}}, Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_walk"}}}}}, + "while": {{Name: "while", Args: []string{"cond", "update"}, Body: &Query{FuncDefs: []*FuncDef{{Name: "_while", Body: &Query{Term: &Term{Type: TermTypeIf, If: &If{Cond: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "cond"}}}, Then: &Query{Left: &Query{Term: &Term{Type: TermTypeIdentity}}, Right: &Query{Term: &Term{Type: TermTypeQuery, Query: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "update"}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_while"}}}, Op: OpPipe}}}, Op: OpComma}, Else: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "empty"}}}}}}}}, Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "_while"}}}}}, + "with_entries": {{Name: "with_entries", Args: []string{"f"}, Body: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "to_entries"}}}, Right: &Query{Left: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "map", Args: []*Query{{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "f"}}}}}}}, Right: &Query{Term: &Term{Type: TermTypeFunc, Func: &Func{Name: "from_entries"}}}, Op: OpPipe}, Op: OpPipe}}}, } } diff --git a/vendor/github.com/itchyny/gojq/builtin.jq b/vendor/github.com/itchyny/gojq/builtin.jq index 987e419212..a704921611 100644 --- a/vendor/github.com/itchyny/gojq/builtin.jq +++ b/vendor/github.com/itchyny/gojq/builtin.jq @@ -59,6 +59,7 @@ def walk(f): def first: .[0]; def first(g): label $out | g | ., break $out; def last: .[-1]; +def last(g): _last(g); def isempty(g): label $out | (g | false, break $out), true; def all: all(.); def all(y): all(.[]; y); diff --git a/vendor/github.com/itchyny/gojq/compare.go b/vendor/github.com/itchyny/gojq/compare.go index 9791e9dc1c..533c9760c1 100644 --- a/vendor/github.com/itchyny/gojq/compare.go +++ b/vendor/github.com/itchyny/gojq/compare.go @@ -1,6 +1,8 @@ package gojq import ( + "cmp" + "encoding/json" "math" "math/big" ) @@ -10,8 +12,8 @@ import ( // This comparison is used by built-in operators and functions. func Compare(l, r any) int { return binopTypeSwitch(l, r, - compareInt, - func(l, r float64) any { + cmp.Compare, + func(l, r float64) int { switch { case l < r || math.IsNaN(l): return -1 @@ -21,28 +23,17 @@ func Compare(l, r any) int { return 1 } }, - func(l, r *big.Int) any { - return l.Cmp(r) - }, - func(l, r string) any { - switch { - case l < r: - return -1 - case l == r: - return 0 - default: - return 1 - } - }, - func(l, r []any) any { - for i, n := 0, min(len(l), len(r)); i < n; i++ { + (*big.Int).Cmp, + cmp.Compare, + func(l, r []any) int { + for i := range min(len(l), len(r)) { if cmp := Compare(l[i], r[i]); cmp != 0 { return cmp } } - return compareInt(len(l), len(r)) + return cmp.Compare(len(l), len(r)) }, - func(l, r map[string]any) any { + func(l, r map[string]any) int { lk, rk := funcKeys(l), funcKeys(r) if cmp := Compare(lk, rk); cmp != 0 { return cmp @@ -54,21 +45,10 @@ func Compare(l, r any) int { } return 0 }, - func(l, r any) any { - return compareInt(typeIndex(l), typeIndex(r)) + func(l, r any) int { + return cmp.Compare(typeIndex(l), typeIndex(r)) }, - ).(int) -} - -func compareInt(l, r int) any { - switch { - case l < r: - return -1 - case l == r: - return 0 - default: - return 1 - } + ) } func typeIndex(v any) int { @@ -80,7 +60,7 @@ func typeIndex(v any) int { return 1 } return 2 - case int, float64, *big.Int: + case int, float64, *big.Int, json.Number: return 3 case string: return 4 diff --git a/vendor/github.com/itchyny/gojq/compiler.go b/vendor/github.com/itchyny/gojq/compiler.go index cea452e3f1..3a193848b8 100644 --- a/vendor/github.com/itchyny/gojq/compiler.go +++ b/vendor/github.com/itchyny/gojq/compiler.go @@ -34,7 +34,6 @@ type Code struct { // a result iterator. // // It is safe to call this method in goroutines, to reuse a compiled [*Code]. -// But for arguments, do not give values sharing same data between goroutines. func (c *Code) Run(v any, values ...any) Iter { return c.RunWithContext(context.Background(), v, values...) } @@ -46,10 +45,7 @@ func (c *Code) RunWithContext(ctx context.Context, v any, values ...any) Iter { } else if len(values) < len(c.variables) { return NewIter(&expectedVariableError{c.variables[len(values)]}) } - for i, v := range values { - values[i] = normalizeNumbers(v) - } - return newEnv(ctx).execute(c, normalizeNumbers(v), values...) + return newEnv(ctx).execute(c, v, values...) } type scopeinfo struct { @@ -160,7 +156,6 @@ func (c *compiler) compileImport(i *Import) error { } else { return fmt.Errorf("module not found: %q", path) } - vals = normalizeNumbers(vals) c.append(&code{op: oppush, v: vals}) c.append(&code{op: opstore, v: c.pushVariable(alias)}) c.append(&code{op: oppush, v: vals}) @@ -379,28 +374,16 @@ func (c *compiler) compileQuery(e *Query) error { return err } } - if e.Func != "" { - switch e.Func { - case ".": - return c.compileTerm(&Term{Type: TermTypeIdentity}) - case "..": - return c.compileTerm(&Term{Type: TermTypeRecurse}) - case "null": - return c.compileTerm(&Term{Type: TermTypeNull}) - case "true": - return c.compileTerm(&Term{Type: TermTypeTrue}) - case "false": - return c.compileTerm(&Term{Type: TermTypeFalse}) - default: - return c.compileFunc(&Func{Name: e.Func}) - } - } else if e.Term != nil { + if e.Term != nil { return c.compileTerm(e.Term) } switch e.Op { case Operator(0): return errors.New(`missing query (try ".")`) case OpPipe: + if len(e.Patterns) > 0 { + return c.compileBind(e.Left, e.Right, e.Patterns) + } if err := c.compileQuery(e.Left); err != nil { return err } @@ -529,7 +512,7 @@ func (c *compiler) compileQueryUpdate(l, r *Query, op Operator) error { Name: op.getFunc(), Args: []*Query{ {Term: &Term{Type: TermTypeIdentity}}, - {Func: name}, + {Term: &Term{Type: TermTypeFunc, Func: &Func{Name: name}}}, }, }, }}, @@ -539,19 +522,19 @@ func (c *compiler) compileQueryUpdate(l, r *Query, op Operator) error { } } -func (c *compiler) compileBind(e *Term, b *Bind) error { +func (c *compiler) compileBind(l, r *Query, patterns []*Pattern) error { defer c.newScopeDepth()() c.append(&code{op: opdup}) c.append(&code{op: opexpbegin}) - if err := c.compileTerm(e); err != nil { + if err := c.compileQuery(l); err != nil { return err } var pc int var vs [][2]int - for i, p := range b.Patterns { + for i, p := range patterns { var pcc int var err error - if i < len(b.Patterns)-1 { + if i < len(patterns)-1 { defer c.lazy(func() *code { return &code{op: opforkalt, v: pcc} })() @@ -565,22 +548,22 @@ func (c *compiler) compileBind(e *Term, b *Bind) error { if vs, err = c.compilePattern(vs[:0], p); err != nil { return err } - if i < len(b.Patterns)-1 { + if i < len(patterns)-1 { defer c.lazy(func() *code { return &code{op: opjump, v: pc} })() pcc = len(c.codes) } } - if len(b.Patterns) > 1 { + if len(patterns) > 1 { pc = len(c.codes) } - if len(b.Patterns) == 1 && c.codes[len(c.codes)-2].op == opexpbegin { + if len(patterns) == 1 && c.codes[len(c.codes)-2].op == opexpbegin { c.codes[len(c.codes)-2].op = opnop } else { c.append(&code{op: opexpend}) } - return c.compileQuery(b.Body) + return c.compileQuery(r) } func (c *compiler) compilePattern(vs [][2]int, p *Pattern) ([][2]int, error) { @@ -953,7 +936,7 @@ func (c *compiler) compileFunc(e *Func) error { c.compileAssign() case "_modify": c.compileModify() - case "last": + case "_last": c.compileLast() } } @@ -1145,7 +1128,7 @@ func (c *compiler) compileModify() { // Appends the compiled code for the `last/1` function to // maximize performance avoiding unnecessary boxing. func (c *compiler) compileLast() { - defer c.appendBuiltin("last", 1)() + defer c.appendBuiltin("_last", 1)() scope := c.newScope() v, g, x := [2]int{scope.id, 0}, [2]int{scope.id, 1}, [2]int{scope.id, 2} c.appends( @@ -1218,7 +1201,7 @@ func (c *compiler) funcInput(any, []any) any { if !ok { return errors.New("break") } - return normalizeNumbers(v) + return v } func (c *compiler) funcModulemeta(v any, _ []any) any { @@ -1317,7 +1300,7 @@ func (c *compiler) compileObject(e *Object) error { if pc+l*3+1 != len(c.codes) { return nil } - for i := 0; i < l; i++ { + for i := range l { if c.codes[pc+i*3].op != oppush || c.codes[pc+i*3+1].op != opload || c.codes[pc+i*3+2].op != opconst { @@ -1325,7 +1308,7 @@ func (c *compiler) compileObject(e *Object) error { } } w := make(map[string]any, l) - for i := 0; i < l; i++ { + for i := range l { w[c.codes[pc+i*3].v.(string)] = c.codes[pc+i*3+2].v } c.codes[pc-1] = &code{op: opconst, v: w} @@ -1417,7 +1400,7 @@ func (c *compiler) compileArray(e *Array) error { return nil } l := (len(c.codes) - pc - 3) / 3 - for i := 0; i < l; i++ { + for i := range l { if c.codes[pc+i].op != opfork || c.codes[pc+i*2+l].op != opconst || (i < l-1 && c.codes[pc+i*2+l+1].op != opjump) { @@ -1425,7 +1408,7 @@ func (c *compiler) compileArray(e *Array) error { } } v := make([]any, l) - for i := 0; i < l; i++ { + for i := range l { v[i] = c.codes[pc+i*2+l].v } c.codes[pc-2] = &code{op: opconst, v: v} @@ -1536,8 +1519,6 @@ func (c *compiler) compileTermSuffix(e *Term, s *Suffix) error { } } return c.compileTry(&Try{Body: &Query{Term: e}}) - } else if s.Bind != nil { - return c.compileBind(e, s.Bind) } else { return fmt.Errorf("invalid suffix: %s", s) } @@ -1656,33 +1637,33 @@ func (c *compiler) optimizeTailRec() { var pcs []int scopes := map[int]bool{} L: - for i, l := 0, len(c.codes); i < l; i++ { - switch c.codes[i].op { + for i, code := range c.codes { + switch code.op { case opscope: pcs = append(pcs, i) - if v := c.codes[i].v.([3]int); v[2] == 0 { + if v := code.v.([3]int); v[2] == 0 { scopes[i] = v[1] == 0 } case opcall: var canjump bool - if j, ok := c.codes[i].v.(int); !ok || + if j, ok := code.v.(int); !ok || len(pcs) == 0 || pcs[len(pcs)-1] != j { break } else if canjump, ok = scopes[j]; !ok { break } - for j := i + 1; j < l; { + for j := i + 1; j < len(c.codes); { switch c.codes[j].op { case opjump: j = c.codes[j].v.(int) case opret: if canjump { - c.codes[i].op = opjump - c.codes[i].v = pcs[len(pcs)-1] + 1 + code.op = opjump + code.v = pcs[len(pcs)-1] + 1 } else { - c.codes[i].op = opcallrec + code.op = opcallrec } - continue L + fallthrough default: continue L } diff --git a/vendor/github.com/itchyny/gojq/encoder.go b/vendor/github.com/itchyny/gojq/encoder.go index 518904d71c..cc44c95b43 100644 --- a/vendor/github.com/itchyny/gojq/encoder.go +++ b/vendor/github.com/itchyny/gojq/encoder.go @@ -2,6 +2,7 @@ package gojq import ( "bytes" + "encoding/json" "fmt" "io" "math" @@ -15,12 +16,12 @@ import ( // Marshal returns the jq-flavored JSON encoding of v. // // This method accepts only limited types (nil, bool, int, float64, *big.Int, -// string, []any, and map[string]any) because these are the possible types a -// gojq iterator can emit. This method marshals NaN to null, truncates -// infinities to (+|-) math.MaxFloat64, uses \b and \f in strings, and does not -// escape '<', '>', '&', '\u2028', and '\u2029'. These behaviors are based on -// the marshaler of jq command, and different from json.Marshal in the Go -// standard library. Note that the result is not safe to embed in HTML. +// json.Number, string, []any, and map[string]any) because these are the +// possible types a gojq iterator can emit. This method marshals NaN to null, +// truncates infinities to (+|-) math.MaxFloat64, uses \b and \f in strings, +// and does not escape '<', '>', '&', '\u2028', and '\u2029'. These behaviors +// are based on the marshaler of jq command, and different from json.Marshal in +// the Go standard library. Note that the result is not safe to embed in HTML. func Marshal(v any) ([]byte, error) { var b bytes.Buffer (&encoder{w: &b}).encode(v) @@ -62,6 +63,8 @@ func (e *encoder) encode(v any) { e.encodeFloat64(v) case *big.Int: e.w.Write(v.Append(e.buf[:0], 10)) + case json.Number: + e.w.WriteString(v.String()) case string: e.encodeString(v) case []any: diff --git a/vendor/github.com/itchyny/gojq/env.go b/vendor/github.com/itchyny/gojq/env.go index bf058eda83..3ba44ad1d5 100644 --- a/vendor/github.com/itchyny/gojq/env.go +++ b/vendor/github.com/itchyny/gojq/env.go @@ -44,5 +44,6 @@ type fork struct { scopelimit int pathindex int pathlimit int + offset int expdepth int } diff --git a/vendor/github.com/itchyny/gojq/error.go b/vendor/github.com/itchyny/gojq/error.go index 18b06b1ccf..743fa9f638 100644 --- a/vendor/github.com/itchyny/gojq/error.go +++ b/vendor/github.com/itchyny/gojq/error.go @@ -51,6 +51,15 @@ func (err *arrayIndexTooLargeError) Error() string { return "array index too large: " + Preview(err.v) } +type repeatStringTooLargeError struct { + s string + n float64 +} + +func (err *repeatStringTooLargeError) Error() string { + return "repeat string result too large: " + Preview(err.s) + " * " + Preview(err.n) +} + type objectKeyNotStringError struct { v any } diff --git a/vendor/github.com/itchyny/gojq/execute.go b/vendor/github.com/itchyny/gojq/execute.go index 344d8a3c57..3b7eab2b78 100644 --- a/vendor/github.com/itchyny/gojq/execute.go +++ b/vendor/github.com/itchyny/gojq/execute.go @@ -59,7 +59,7 @@ loop: } n := code.v.(int) m := make(map[string]any, n) - for i := 0; i < n; i++ { + for range n { v, k := env.pop(), env.pop() s, ok := k.(string) if !ok { @@ -180,7 +180,7 @@ loop: case [3]any: argcnt := v[1].(int) x, args := env.pop(), env.args[:argcnt] - for i := 0; i < argcnt; i++ { + for i := range argcnt { args[i] = env.pop() } w := v[0].(func(any, []any) any)(x, args) @@ -238,8 +238,7 @@ loop: callpc, saveindex = env.popscope() } } else { - saveindex, _ = env.scopes.save() - env.scopes.index = index + saveindex = env.scopes.index } if outerindex = index; outerindex >= 0 { if s := env.scopes.data[outerindex].value; s.id == xs[0] { @@ -377,7 +376,7 @@ func (env *env) popscope() (int, int) { } func (env *env) pushfork(pc int) { - f := fork{pc: pc, expdepth: env.expdepth} + f := fork{pc: pc, offset: env.offset, expdepth: env.expdepth} f.stackindex, f.stacklimit = env.stack.save() f.scopeindex, f.scopelimit = env.scopes.save() f.pathindex, f.pathlimit = env.paths.save() @@ -388,7 +387,8 @@ func (env *env) pushfork(pc int) { func (env *env) popfork() int { f := env.forks[len(env.forks)-1] env.debugForks(f.pc, "<<<") - env.forks, env.expdepth = env.forks[:len(env.forks)-1], f.expdepth + env.forks, env.offset, env.expdepth = + env.forks[:len(env.forks)-1], f.offset, f.expdepth env.stack.restore(f.stackindex, f.stacklimit) env.scopes.restore(f.scopeindex, f.scopelimit) env.paths.restore(f.pathindex, f.pathlimit) diff --git a/vendor/github.com/itchyny/gojq/func.go b/vendor/github.com/itchyny/gojq/func.go index dcfaa5d505..b7d7a34665 100644 --- a/vendor/github.com/itchyny/gojq/func.go +++ b/vendor/github.com/itchyny/gojq/func.go @@ -6,6 +6,7 @@ import ( "errors" "fmt" "io" + "maps" "math" "math/big" "net/url" @@ -60,6 +61,7 @@ func init() { "to_entries": argFunc0(funcToEntries), "from_entries": argFunc0(funcFromEntries), "add": argFunc0(funcAdd), + "toboolean": argFunc0(funcToBoolean), "tonumber": argFunc0(funcToNumber), "tostring": argFunc0(funcToString), "type": argFunc0(funcType), @@ -72,6 +74,7 @@ func init() { "endswith": argFunc1(funcEndsWith), "ltrimstr": argFunc1(funcLtrimstr), "rtrimstr": argFunc1(funcRtrimstr), + "trimstr": argFunc1(funcTrimstr), "ltrim": argFunc0(funcLtrim), "rtrim": argFunc0(funcRtrim), "trim": argFunc0(funcTrim), @@ -293,6 +296,11 @@ func funcAbs(v any) any { return v } return new(big.Int).Abs(v) + case json.Number: + if !strings.HasPrefix(v.String(), "-") { + return v + } + return v[1:] default: return &func0TypeError{"abs", v} } @@ -314,6 +322,11 @@ func funcLength(v any) any { return v } return new(big.Int).Abs(v) + case json.Number: + if !strings.HasPrefix(v.String(), "-") { + return v + } + return v[1:] case string: return len([]rune(v)) case []any: @@ -487,16 +500,10 @@ func funcAdd(v any) any { case map[string]any: switch w := v.(type) { case nil: - m := make(map[string]any, len(x)) - for k, e := range x { - m[k] = e - } - v = m + v = maps.Clone(x) continue case map[string]any: - for k, e := range x { - w[k] = e - } + maps.Copy(w, x) continue } } @@ -514,9 +521,27 @@ func funcAdd(v any) any { return v } +func funcToBoolean(v any) any { + switch v := v.(type) { + case bool: + return v + case string: + switch v { + case "true": + return true + case "false": + return false + default: + return &func0WrapError{"toboolean", v, errors.New("invalid boolean")} + } + default: + return &func0TypeError{"toboolean", v} + } +} + func funcToNumber(v any) any { switch v := v.(type) { - case int, float64, *big.Int: + case int, float64, *big.Int, json.Number: return v case string: if !newLexer(v).validNumber() { @@ -529,7 +554,7 @@ func funcToNumber(v any) any { } func toNumber(v string) any { - return normalizeNumber(json.Number(v)) + return parseNumber(json.Number(v)) } func funcToString(v any) any { @@ -602,7 +627,7 @@ func indices(vs, xs []any) any { if len(xs) == 0 { return rs } - for i := 0; i <= len(vs)-len(xs); i++ { + for i := range len(vs) - len(xs) + 1 { if Compare(vs[i:i+len(xs)], xs) == 0 { rs = append(rs, i) } @@ -615,7 +640,7 @@ func funcIndex(v, x any) any { if len(xs) == 0 { return nil } - for i := 0; i <= len(vs)-len(xs); i++ { + for i := range len(vs) - len(xs) + 1 { if Compare(vs[i:i+len(xs)], xs) == 0 { return i } @@ -707,6 +732,18 @@ func funcRtrimstr(v, x any) any { return strings.TrimSuffix(s, t) } +func funcTrimstr(v, x any) any { + s, ok := v.(string) + if !ok { + return &func1TypeError{"trimstr", v, x} + } + t, ok := x.(string) + if !ok { + return &func1TypeError{"trimstr", v, x} + } + return strings.TrimSuffix(strings.TrimPrefix(s, t), t) +} + func funcLtrim(v any) any { s, ok := v.(string) if !ok { @@ -848,7 +885,7 @@ func funcFromJSON(v any) any { if _, err := dec.Token(); err != io.EOF { return &func0TypeError{"fromjson", v} } - return normalizeNumbers(w) + return w } func funcFormat(v, x any) any { @@ -997,7 +1034,7 @@ func funcIndex2(_, v, x any) any { default: return &expectedObjectError{v} } - case int, float64, *big.Int: + case int, float64, *big.Int, json.Number: i, _ := toInt(x) switch v := v.(type) { case nil: @@ -1087,7 +1124,7 @@ func slice(vs []any, e, s any) any { } } if e != nil { - if i, ok := toInt(e); ok { + if i, ok := toIntCeil(e); ok { end = clampIndex(i, start, len(vs)) } else { return &arrayIndexNotNumberError{e} @@ -1109,7 +1146,7 @@ func sliceString(v string, e, s any) any { } } if e != nil { - if i, ok := toInt(e); ok { + if i, ok := toIntCeil(e); ok { end = clampIndex(i, start, l) } else { return &stringIndexNotNumberError{e} @@ -1140,16 +1177,16 @@ func sliceString(v string, e, s any) any { return v[start:end] } -func clampIndex(i, min, max int) int { +func clampIndex(i, minimum, maximum int) int { if i < 0 { - i += max + i += maximum } - if i < min { - return min - } else if i < max { + if i < minimum { + return minimum + } else if i < maximum { return i } else { - return max + return maximum } } @@ -1200,7 +1237,7 @@ func (iter *rangeIter) Next() (any, bool) { func funcRange(_ any, xs []any) any { for _, x := range xs { switch x.(type) { - case int, float64, *big.Int: + case int, float64, *big.Int, json.Number: default: return &func0TypeError{"range", x} } @@ -1380,7 +1417,7 @@ func funcJoin(v, x any) any { } else { ss[i] = "false" } - case int, float64, *big.Int: + case int, float64, *big.Int, json.Number: ss[i] = jsonMarshal(v) default: return &joinTypeError{v} @@ -1585,7 +1622,7 @@ func update(v any, path []any, n any, a allocator) (any, error) { default: return nil, &expectedObjectError{v} } - case int, float64, *big.Int: + case int, float64, *big.Int, json.Number: i, _ := toInt(p) switch v := v.(type) { case nil: @@ -1632,9 +1669,7 @@ func updateObject(v map[string]any, k string, path []any, n any, a allocator) (a return v, nil } w := a.makeObject(len(v) + 1) - for k, v := range v { - w[k] = v - } + maps.Copy(w, v) w[k] = u return w, nil } @@ -1653,7 +1688,7 @@ func updateArrayIndex(v []any, i int, path []any, n any, a allocator) (any, erro if n == struct{}{} { return v, nil } - if i >= 0x8000000 { + if i >= 0x20000000 { return nil, &arrayIndexTooLargeError{i} } } @@ -2043,7 +2078,6 @@ func compileRegexp(re, flags string) (*regexp.Regexp, error) { }) >= 0 { return nil, fmt.Errorf("unsupported regular expression flag: %q", flags) } - re = strings.ReplaceAll(re, "(?<", "(?P<") if strings.ContainsRune(flags, 'i') { re = "(?i)" + re } @@ -2116,11 +2150,20 @@ func toInt(x any) (int, bool) { return math.MaxInt, true } return math.MinInt, true + case json.Number: + return toInt(parseNumber(x)) default: return 0, false } } +func toIntCeil(x any) (int, bool) { + if f, ok := x.(float64); ok { + x = math.Ceil(f) + } + return toInt(x) +} + func floatToInt(x float64) int { if math.MinInt <= x && x <= math.MaxInt { return int(x) @@ -2139,6 +2182,9 @@ func toFloat(x any) (float64, bool) { return x, true case *big.Int: return bigToFloat(x), true + case json.Number: + v, err := x.Float64() + return v, err == nil default: return 0.0, false } @@ -2153,3 +2199,21 @@ func bigToFloat(x *big.Int) float64 { } return math.Inf(x.Sign()) } + +func parseNumber(v json.Number) any { + if i, err := v.Int64(); err == nil && math.MinInt <= i && i <= math.MaxInt { + return int(i) + } + if strings.ContainsAny(v.String(), ".eE") { + if f, err := v.Float64(); err == nil { + return f + } + } + if bi, ok := new(big.Int).SetString(v.String(), 10); ok { + return bi + } + if strings.HasPrefix(v.String(), "-") { + return math.Inf(-1) + } + return math.Inf(1) +} diff --git a/vendor/github.com/itchyny/gojq/go.dev.mod b/vendor/github.com/itchyny/gojq/go.dev.mod index bdc69df6f0..dbf537856e 100644 --- a/vendor/github.com/itchyny/gojq/go.dev.mod +++ b/vendor/github.com/itchyny/gojq/go.dev.mod @@ -1,8 +1,8 @@ module github.com/itchyny/gojq -go 1.21 +go 1.24.0 require ( - github.com/itchyny/astgen-go v0.0.0-20231113225122-e1c22b9aaf7b // indirect - github.com/itchyny/timefmt-go v0.1.6 // indirect + github.com/itchyny/astgen-go v0.0.0-20250520171007-4331c963041e // indirect + github.com/itchyny/timefmt-go v0.1.7 // indirect ) diff --git a/vendor/github.com/itchyny/gojq/go.dev.sum b/vendor/github.com/itchyny/gojq/go.dev.sum index e8691b822f..e66f41739d 100644 --- a/vendor/github.com/itchyny/gojq/go.dev.sum +++ b/vendor/github.com/itchyny/gojq/go.dev.sum @@ -1,4 +1,4 @@ -github.com/itchyny/astgen-go v0.0.0-20231113225122-e1c22b9aaf7b h1:72fDU7wad+r3iQObaxhlXVIpAIMRUIUMrNa3go1vb8s= -github.com/itchyny/astgen-go v0.0.0-20231113225122-e1c22b9aaf7b/go.mod h1:Zp6xzEWVc2pQ/ObfLD6t/M6gDegsJWKdGKJSiT7qlu0= -github.com/itchyny/timefmt-go v0.1.6 h1:ia3s54iciXDdzWzwaVKXZPbiXzxxnv1SPGFfM/myJ5Q= -github.com/itchyny/timefmt-go v0.1.6/go.mod h1:RRDZYC5s9ErkjQvTvvU7keJjxUYzIISJGxm9/mAERQg= +github.com/itchyny/astgen-go v0.0.0-20250520171007-4331c963041e h1:Pu7Ev38D+75aWdsHzULyVZfMP3WrgIHNUaAUH81CTqE= +github.com/itchyny/astgen-go v0.0.0-20250520171007-4331c963041e/go.mod h1:8EXgnGrgW1p0qVnOF1A/4ORQEUAi8TvxQdIR+zJfKxM= +github.com/itchyny/timefmt-go v0.1.7 h1:xyftit9Tbw+Dc/huSSPJaEmX1TVL8lw5vxjJLK4GMMA= +github.com/itchyny/timefmt-go v0.1.7/go.mod h1:5E46Q+zj7vbTgWY8o5YkMeYb4I6GeWLFnetPy5oBrAI= diff --git a/vendor/github.com/itchyny/gojq/iter.go b/vendor/github.com/itchyny/gojq/iter.go index d0bed96063..fb8a8ffe83 100644 --- a/vendor/github.com/itchyny/gojq/iter.go +++ b/vendor/github.com/itchyny/gojq/iter.go @@ -6,14 +6,14 @@ type Iter interface { } // NewIter creates a new [Iter] from values. -func NewIter(values ...any) Iter { +func NewIter[T any](values ...T) Iter { switch len(values) { case 0: return emptyIter{} case 1: return &unitIter{value: values[0]} default: - iter := sliceIter(values) + iter := sliceIter[T](values) return &iter } } @@ -37,9 +37,9 @@ func (iter *unitIter) Next() (any, bool) { return iter.value, true } -type sliceIter []any +type sliceIter[T any] []T -func (iter *sliceIter) Next() (any, bool) { +func (iter *sliceIter[T]) Next() (any, bool) { if len(*iter) == 0 { return nil, false } diff --git a/vendor/github.com/itchyny/gojq/lexer.go b/vendor/github.com/itchyny/gojq/lexer.go index 0c2efd122c..82aeef31aa 100644 --- a/vendor/github.com/itchyny/gojq/lexer.go +++ b/vendor/github.com/itchyny/gojq/lexer.go @@ -507,7 +507,7 @@ func quoteAndEscape(src string, quote bool, controls int) []byte { buf[len(buf)-1] = '"' j++ } - for i := 0; i < len(src); i++ { + for i := range len(src) { if ch := src[i]; ch < ' ' { const hex = "0123456789abcdef" copy(buf[j:], `\u00`) diff --git a/vendor/github.com/itchyny/gojq/normalize.go b/vendor/github.com/itchyny/gojq/normalize.go deleted file mode 100644 index 2bfcd21569..0000000000 --- a/vendor/github.com/itchyny/gojq/normalize.go +++ /dev/null @@ -1,84 +0,0 @@ -package gojq - -import ( - "encoding/json" - "math" - "math/big" - "strings" -) - -func normalizeNumber(v json.Number) any { - if i, err := v.Int64(); err == nil && math.MinInt <= i && i <= math.MaxInt { - return int(i) - } - if strings.ContainsAny(v.String(), ".eE") { - if f, err := v.Float64(); err == nil { - return f - } - } - if bi, ok := new(big.Int).SetString(v.String(), 10); ok { - return bi - } - if strings.HasPrefix(v.String(), "-") { - return math.Inf(-1) - } - return math.Inf(1) -} - -func normalizeNumbers(v any) any { - switch v := v.(type) { - case json.Number: - return normalizeNumber(v) - case *big.Int: - if v.IsInt64() { - if i := v.Int64(); math.MinInt <= i && i <= math.MaxInt { - return int(i) - } - } - return v - case int64: - if math.MinInt <= v && v <= math.MaxInt { - return int(v) - } - return big.NewInt(v) - case int32: - return int(v) - case int16: - return int(v) - case int8: - return int(v) - case uint: - if v <= math.MaxInt { - return int(v) - } - return new(big.Int).SetUint64(uint64(v)) - case uint64: - if v <= math.MaxInt { - return int(v) - } - return new(big.Int).SetUint64(v) - case uint32: - if uint64(v) <= math.MaxInt { - return int(v) - } - return new(big.Int).SetUint64(uint64(v)) - case uint16: - return int(v) - case uint8: - return int(v) - case float32: - return float64(v) - case []any: - for i, x := range v { - v[i] = normalizeNumbers(x) - } - return v - case map[string]any: - for k, x := range v { - v[k] = normalizeNumbers(x) - } - return v - default: - return v - } -} diff --git a/vendor/github.com/itchyny/gojq/operator.go b/vendor/github.com/itchyny/gojq/operator.go index 64b74b7805..a49e84f277 100644 --- a/vendor/github.com/itchyny/gojq/operator.go +++ b/vendor/github.com/itchyny/gojq/operator.go @@ -1,6 +1,8 @@ package gojq import ( + "encoding/json" + "maps" "math" "math/big" "strings" @@ -154,19 +156,15 @@ func (op Operator) GoString() (str string) { func (op Operator) getFunc() string { switch op { - case OpPipe: - panic("unreachable") - case OpComma: - panic("unreachable") - case OpAdd: + case OpAdd, OpUpdateAdd: return "_add" - case OpSub: + case OpSub, OpUpdateSub: return "_subtract" - case OpMul: + case OpMul, OpUpdateMul: return "_multiply" - case OpDiv: + case OpDiv, OpUpdateDiv: return "_divide" - case OpMod: + case OpMod, OpUpdateMod: return "_modulo" case OpEq: return "_equal" @@ -180,26 +178,10 @@ func (op Operator) getFunc() string { return "_greatereq" case OpLe: return "_lesseq" - case OpAnd: - panic("unreachable") - case OpOr: - panic("unreachable") - case OpAlt: - panic("unreachable") case OpAssign: return "_assign" case OpModify: return "_modify" - case OpUpdateAdd: - return "_add" - case OpUpdateSub: - return "_subtract" - case OpUpdateMul: - return "_multiply" - case OpUpdateDiv: - return "_divide" - case OpUpdateMod: - return "_modulo" case OpUpdateAlt: return "_alternative" default: @@ -207,15 +189,21 @@ func (op Operator) getFunc() string { } } -func binopTypeSwitch( +func binopTypeSwitch[T any]( l, r any, - callbackInts func(_, _ int) any, - callbackFloats func(_, _ float64) any, - callbackBigInts func(_, _ *big.Int) any, - callbackStrings func(_, _ string) any, - callbackArrays func(_, _ []any) any, - callbackMaps func(_, _ map[string]any) any, - fallback func(_, _ any) any) any { + callbackInts func(_, _ int) T, + callbackFloats func(_, _ float64) T, + callbackBigInts func(_, _ *big.Int) T, + callbackStrings func(_, _ string) T, + callbackArrays func(_, _ []any) T, + callbackMaps func(_, _ map[string]any) T, + fallback func(_, _ any) T) T { + if n, ok := l.(json.Number); ok { + l = parseNumber(n) + } + if n, ok := r.(json.Number); ok { + r = parseNumber(n) + } switch l := l.(type) { case int: switch r := r.(type) { @@ -284,6 +272,8 @@ func funcOpPlus(v any) any { return v case *big.Int: return v + case json.Number: + return v default: return &unaryTypeError{"plus", v} } @@ -297,6 +287,11 @@ func funcOpNegate(v any) any { return -v case *big.Int: return new(big.Int).Neg(v) + case json.Number: + if strings.HasPrefix(v.String(), "-") { + return v[1:] + } + return "-" + v default: return &unaryTypeError{"negate", v} } @@ -334,12 +329,8 @@ func funcOpAdd(_, l, r any) any { return l } m := make(map[string]any, len(l)+len(r)) - for k, v := range l { - m[k] = v - } - for k, v := range r { - m[k] = v - } + maps.Copy(m, l) + maps.Copy(m, r) return m }, func(l, r any) any { @@ -416,9 +407,7 @@ func funcOpMul(_, l, r any) any { func deepMergeObjects(l, r map[string]any) any { m := make(map[string]any, len(l)+len(r)) - for k, v := range l { - m[k] = v - } + maps.Copy(m, l) for k, v := range r { if mk, ok := m[k]; ok { if mk, ok := mk.(map[string]any); ok { @@ -433,12 +422,15 @@ func deepMergeObjects(l, r map[string]any) any { } func repeatString(s string, n float64) any { - if n < 0.0 || len(s) > 0 && n > float64(0x10000000/len(s)) || math.IsNaN(n) { + if n < 0.0 || math.IsNaN(n) { return nil } if s == "" { return "" } + if n >= float64(math.MaxInt32/len(s)) { + return &repeatStringTooLargeError{s, n} + } return strings.Repeat(s, int(n)) } diff --git a/vendor/github.com/itchyny/gojq/option.go b/vendor/github.com/itchyny/gojq/option.go index f1a110fae3..801e9a999a 100644 --- a/vendor/github.com/itchyny/gojq/option.go +++ b/vendor/github.com/itchyny/gojq/option.go @@ -33,7 +33,7 @@ func WithVariables(variables []string) CompilerOption { // WithFunction is a compiler option for adding a custom internal function. // Specify the minimum and maximum count of the function arguments. These // values should satisfy 0 <= minarity <= maxarity <= 30, otherwise panics. -// On handling numbers, you should take account to int, float64 and *big.Int. +// On handling numbers, take account of int, float64, *big.Int, and json.Number. // These are the number types you are allowed to return, so do not return int64. // Refer to [ValueError] to return a value error just like built-in error // function. If you want to emit multiple values, call the empty function, diff --git a/vendor/github.com/itchyny/gojq/parser.go b/vendor/github.com/itchyny/gojq/parser.go index 5a0dfdc776..277bd3ee0c 100644 --- a/vendor/github.com/itchyny/gojq/parser.go +++ b/vendor/github.com/itchyny/gojq/parser.go @@ -147,147 +147,147 @@ const yyEofCode = 1 const yyErrCode = 2 const yyInitialStackSize = 16 -//line parser.go.y:671 +//line parser.go.y:669 //line yacctab:1 var yyExca = [...]int16{ -1, 1, 1, -1, -2, 0, - -1, 145, + -1, 138, 5, 0, -2, 27, - -1, 148, + -1, 141, 7, 0, -2, 30, - -1, 199, + -1, 198, 59, 114, -2, 49, } const yyPrivate = 57344 -const yyLast = 782 +const yyLast = 781 var yyAct = [...]int16{ - 78, 134, 186, 102, 103, 10, 175, 195, 32, 211, - 48, 108, 81, 176, 131, 6, 229, 5, 50, 73, - 74, 159, 14, 180, 181, 182, 124, 98, 110, 135, - 280, 97, 228, 279, 115, 104, 16, 158, 265, 121, - 114, 178, 123, 179, 244, 73, 74, 180, 181, 182, - 73, 74, 112, 113, 154, 155, 136, 117, 117, 117, - 254, 243, 137, 183, 282, 178, 255, 179, 220, 6, - 247, 116, 118, 119, 128, 129, 73, 74, 99, 73, - 74, 227, 73, 74, 246, 141, 238, 183, 201, 237, - 132, 200, 139, 6, 235, 226, 138, 163, 208, 80, - 157, 207, 241, 231, 230, 161, 162, 73, 74, 117, - 117, 117, 117, 117, 117, 117, 117, 117, 117, 83, - 82, 278, 84, 144, 145, 146, 147, 148, 149, 150, - 151, 152, 153, 184, 185, 174, 50, 160, 193, 73, - 74, 127, 196, 202, 203, 126, 197, 73, 74, 125, - 73, 74, 248, 253, 189, 204, 45, 240, 206, 73, - 74, 245, 143, 210, 214, 215, 73, 74, 104, 217, - 218, 213, 79, 219, 86, 87, 76, 90, 88, 89, - 169, 43, 44, 117, 117, 73, 74, 75, 166, 117, - 222, 224, 80, 225, 73, 74, 273, 212, 212, 232, - 132, 223, 234, 216, 120, 271, 73, 74, 191, 239, - 43, 44, 83, 82, 85, 84, 274, 270, 96, 91, - 92, 93, 94, 95, 73, 74, 93, 94, 95, 249, - 84, 164, 251, 252, 196, 236, 267, 250, 197, 130, - 25, 256, 73, 74, 262, 263, 187, 188, 3, 190, - 257, 258, 260, 261, 264, 24, 266, 73, 74, 9, - 221, 268, 269, 117, 117, 111, 171, 272, 172, 170, - 13, 275, 276, 77, 90, 277, 89, 212, 212, 13, - 177, 281, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 106, 107, 91, 92, 93, 94, 95, - 47, 43, 44, 101, 165, 259, 91, 92, 93, 94, - 95, 242, 156, 122, 194, 17, 192, 15, 37, 21, - 22, 23, 33, 133, 105, 205, 7, 34, 209, 35, - 36, 39, 41, 40, 42, 19, 20, 28, 31, 43, - 44, 8, 4, 2, 86, 87, 1, 90, 88, 89, - 0, 29, 30, 0, 168, 90, 18, 0, 0, 27, - 0, 142, 38, 0, 140, 26, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 106, 107, 91, - 92, 93, 94, 95, 0, 43, 44, 91, 92, 93, - 94, 95, 0, 0, 0, 0, 0, 11, 12, 17, - 0, 15, 37, 21, 22, 23, 33, 0, 105, 0, - 0, 34, 100, 35, 36, 39, 41, 40, 42, 19, - 20, 28, 31, 43, 44, 0, 0, 0, 0, 86, - 87, 0, 90, 88, 89, 29, 30, 0, 0, 167, - 18, 0, 0, 27, 0, 0, 38, 0, 17, 26, + 78, 133, 174, 185, 103, 10, 210, 194, 175, 130, + 108, 102, 5, 134, 48, 228, 158, 50, 73, 74, + 123, 6, 32, 93, 73, 74, 243, 14, 110, 246, + 204, 227, 157, 203, 115, 279, 122, 264, 278, 120, + 135, 98, 97, 245, 148, 149, 136, 73, 74, 104, + 179, 180, 181, 226, 114, 242, 73, 74, 179, 180, + 181, 281, 116, 117, 118, 73, 74, 225, 177, 253, + 178, 255, 73, 74, 127, 128, 177, 99, 178, 234, + 237, 207, 233, 240, 206, 131, 230, 162, 229, 160, + 182, 73, 74, 73, 74, 219, 6, 153, 182, 159, + 156, 126, 125, 247, 6, 277, 161, 252, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 151, 150, + 124, 73, 74, 188, 45, 73, 74, 239, 183, 184, + 73, 74, 73, 74, 50, 244, 147, 192, 173, 213, + 91, 195, 92, 272, 168, 73, 74, 76, 199, 200, + 73, 74, 75, 202, 119, 205, 270, 90, 84, 196, + 83, 269, 95, 94, 214, 96, 165, 212, 216, 217, + 209, 190, 218, 80, 81, 129, 84, 82, 83, 43, + 44, 104, 266, 167, 25, 221, 3, 211, 211, 24, + 223, 220, 224, 215, 131, 222, 73, 74, 231, 96, + 85, 86, 87, 88, 89, 236, 176, 232, 238, 47, + 80, 81, 189, 84, 82, 83, 43, 44, 85, 86, + 87, 88, 89, 85, 86, 87, 88, 89, 248, 73, + 74, 250, 251, 195, 186, 187, 249, 101, 254, 87, + 88, 89, 164, 261, 262, 258, 256, 257, 241, 263, + 273, 196, 163, 155, 265, 85, 86, 87, 88, 89, + 267, 268, 84, 82, 83, 121, 271, 211, 211, 193, + 274, 275, 84, 191, 276, 132, 73, 74, 73, 74, + 280, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 106, 107, 85, 86, 87, 88, 89, 9, + 43, 44, 259, 260, 85, 86, 87, 88, 89, 170, + 17, 171, 169, 77, 16, 201, 15, 37, 21, 22, + 23, 33, 7, 105, 8, 4, 34, 208, 35, 36, + 39, 41, 40, 42, 19, 20, 28, 31, 43, 44, + 112, 113, 2, 80, 81, 1, 84, 82, 83, 0, + 29, 30, 0, 166, 0, 18, 0, 0, 27, 0, + 154, 38, 0, 152, 26, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 106, 107, 85, 86, + 87, 88, 89, 0, 43, 44, 0, 0, 0, 0, + 0, 0, 0, 0, 111, 0, 11, 12, 16, 13, + 15, 37, 21, 22, 23, 33, 0, 105, 13, 0, + 34, 100, 35, 36, 39, 41, 40, 42, 19, 20, + 28, 31, 43, 44, 0, 0, 0, 0, 80, 81, + 0, 84, 82, 83, 29, 30, 0, 0, 79, 18, + 0, 0, 27, 0, 0, 38, 0, 16, 26, 15, + 37, 21, 22, 23, 33, 0, 0, 0, 0, 34, + 0, 35, 36, 39, 41, 40, 42, 19, 20, 28, + 31, 43, 44, 85, 86, 87, 88, 89, 0, 0, + 0, 0, 0, 29, 30, 0, 0, 0, 18, 0, + 0, 27, 0, 0, 38, 0, 235, 26, 16, 0, 15, 37, 21, 22, 23, 33, 0, 0, 0, 0, 34, 0, 35, 36, 39, 41, 40, 42, 19, 20, - 28, 31, 43, 44, 91, 92, 93, 94, 95, 0, - 0, 0, 0, 0, 29, 30, 90, 88, 89, 18, - 0, 0, 27, 0, 0, 38, 0, 233, 26, 17, + 28, 31, 43, 44, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 29, 30, 0, 0, 0, 18, + 0, 0, 27, 0, 0, 38, 0, 109, 26, 16, 0, 15, 37, 21, 22, 23, 33, 0, 0, 0, 0, 34, 0, 35, 36, 39, 41, 40, 42, 19, - 20, 28, 31, 43, 44, 0, 0, 0, 91, 92, - 93, 94, 95, 0, 0, 29, 30, 0, 0, 0, - 18, 0, 0, 27, 0, 0, 38, 0, 109, 26, - 17, 0, 15, 37, 21, 22, 23, 33, 0, 0, - 0, 0, 34, 0, 35, 36, 39, 41, 40, 42, - 19, 20, 28, 31, 43, 44, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 29, 30, 0, 0, - 0, 18, 0, 0, 27, 0, 0, 38, 0, 0, - 26, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 49, 0, 0, 0, 0, 0, 0, 0, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 49, 0, 0, 0, 0, 173, 0, 0, - 51, 37, 21, 22, 23, 33, 0, 0, 0, 0, - 34, 0, 35, 36, 39, 41, 40, 42, 19, 20, - 28, 31, 43, 44, 0, 0, 0, 46, 0, 0, - 0, 0, 0, 0, 29, 30, 0, 0, 0, 18, - 0, 0, 27, 0, 0, 38, 0, 0, 26, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 106, 199, 0, 0, 0, 0, 0, 0, 43, 44, + 20, 28, 31, 43, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 29, 30, 0, 0, 0, + 18, 0, 0, 27, 0, 0, 38, 0, 0, 26, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 49, 0, 0, 0, 0, 0, 0, 0, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 49, 0, 0, 0, 0, 172, 0, 0, 51, + 37, 21, 22, 23, 33, 0, 0, 0, 0, 34, + 0, 35, 36, 39, 41, 40, 42, 19, 20, 28, + 31, 43, 44, 0, 0, 0, 46, 0, 0, 0, + 0, 0, 0, 29, 30, 0, 0, 0, 18, 0, + 0, 27, 0, 0, 38, 0, 0, 26, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 106, + 198, 0, 0, 0, 0, 0, 0, 43, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 198, + 197, } var yyPact = [...]int16{ - 238, -1000, -1000, -48, 406, 98, 643, -1000, -1000, -1000, - 112, 150, 139, 557, 158, 184, 170, 189, 173, -1000, - -1000, -1000, -1000, -1000, 18, -1000, 368, 506, -1000, 665, - 665, 144, -1000, 557, 665, 665, 665, 174, 557, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -22, -1000, 90, - 86, 82, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 176, -1000, -1000, -42, 405, 66, 642, -1000, -1000, -1000, + 182, 115, 110, 556, 444, 127, 111, 108, 142, -1000, + -1000, -1000, -1000, -1000, 17, -1000, 367, 505, -1000, 664, + 664, 179, -1000, 556, 664, 664, 664, 124, 556, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -28, -1000, 61, + 43, 42, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 557, 557, 225, -48, -1000, 112, -1, - -1000, -1000, -1000, 173, 312, 115, 665, 665, 665, 665, - 665, 665, 665, 665, 665, 665, -5, -1000, -1000, 557, - -1000, -27, -1000, 78, 46, 557, -1000, -1000, -1000, -1000, - 35, 557, 65, 65, -1000, 210, 162, 65, 445, 350, - -1000, 119, 229, -1000, 613, 30, 30, 30, 112, -1000, - 217, 96, -1000, 202, -1000, -1000, -1, 721, -1000, -1000, - -1000, 29, 557, 557, 170, 499, 267, 358, 256, 175, - 175, -1000, -1000, -1000, 557, 217, 40, 112, -1000, 274, - 665, 665, 103, -1000, 557, -1000, 665, -1, -1, -1000, - -1000, -1000, 557, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 6, -1000, -1000, -48, -1000, -1000, -1000, - 557, -1, 33, -1000, -32, -1000, 45, 44, 557, -1000, - -1000, 455, 32, 112, 177, 28, -1000, -1000, 557, -1000, - -1000, 110, 170, 110, 43, 112, -1000, 1, -16, 100, - -1000, 22, -1000, 94, 112, -1000, -1000, -1, -1000, 721, - -1, -1, 92, -1000, -2, -1000, -1000, 7, 217, 112, - 665, 665, 230, 557, 557, -1000, -1000, 30, -1000, -1000, - -1000, -1000, -1000, -21, -1000, 557, -1000, 110, 110, 212, - 557, 557, 159, 147, -1000, -1, 138, -1000, 195, 112, - 557, 557, -1000, -1000, 557, 60, -28, 112, -1000, -1000, - 557, 3, -1000, + -1000, -1000, -1000, 556, 556, 161, -42, -1000, 182, -17, + 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, + 89, -15, -1000, -1000, -1000, 142, 311, -1000, -1000, 556, + -1000, -32, -1000, 40, 30, 556, -1000, -1000, -1000, -1000, + 25, 556, 108, 108, -1000, 231, 140, 349, 169, -1000, + 83, 282, -1000, 612, 41, 41, 41, 182, -1000, 205, + 65, -1000, 165, -1000, -1000, -17, 720, 206, 255, 151, + 265, 174, 188, 188, -1000, -1000, -1000, 556, 556, 205, + -1000, -1000, -1000, -29, 556, 23, 182, -1000, 273, 664, + 664, 78, -1000, 556, -1000, 664, -17, -17, -1000, -1000, + -1000, 556, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 33, -1000, -1000, -42, -1000, -1000, -1000, 556, + -17, 5, -1000, -33, -1000, 29, 27, 556, -1000, 182, + 149, 21, -1000, -1000, 454, 18, -1000, 556, -1000, -1000, + 80, 206, 80, 24, 182, -1000, -5, -34, 74, -1000, + -19, -1000, 45, 182, -1000, -1000, -17, -1000, 720, -17, + -17, 46, -1000, 10, 205, -1000, 9, -1000, 182, 664, + 664, 290, 556, 556, -1000, -1000, 41, -1000, -1000, -1000, + -1000, -1000, -22, 556, -1000, -1000, 80, 80, 158, 556, + 556, 103, 98, -1000, -17, 85, -1000, 229, 182, 556, + 556, -1000, -1000, 556, 44, -23, 182, -1000, -1000, 556, + 0, -1000, } var yyPgo = [...]int16{ - 0, 356, 353, 352, 351, 14, 336, 259, 265, 335, - 0, 333, 1, 326, 324, 7, 36, 22, 8, 323, - 12, 322, 321, 315, 314, 313, 3, 9, 6, 13, - 310, 10, 280, 260, 2, 255, 240, 11, 4, + 0, 355, 352, 335, 334, 9, 332, 309, 414, 325, + 0, 275, 1, 273, 269, 7, 27, 320, 22, 265, + 23, 253, 248, 245, 242, 237, 11, 6, 2, 8, + 209, 14, 206, 191, 3, 189, 184, 10, 4, } var yyR1 = [...]int8{ @@ -330,66 +330,66 @@ var yyR2 = [...]int8{ var yyChk = [...]int16{ -1000, -1, -2, 10, -3, -29, 63, -6, -4, -7, - -10, 11, 12, -8, -17, 15, -16, 13, 54, 33, + -10, 11, 12, -8, -16, 15, 13, -17, 54, 33, 34, 17, 18, 19, -35, -36, 63, 57, 35, 49, 50, 36, -18, 20, 25, 27, 28, 16, 60, 29, 31, 30, 32, 37, 38, 58, 64, -30, -31, 29, -37, 37, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 47, 48, 37, 37, -7, -10, 14, - 34, -20, 55, 54, 57, 30, 4, 5, 8, 9, - 7, 49, 50, 51, 52, 53, 29, -20, -18, 60, + 4, 5, 8, 9, 7, 49, 50, 51, 52, 53, + 30, 29, 34, -20, 55, 54, 57, -20, -18, 60, 64, -25, -26, -38, -18, 60, 29, 30, -37, 62, - -10, -8, -17, -17, -18, -10, -16, -17, -16, -16, - 30, -10, -19, 64, 48, 59, 59, 59, -10, -10, - 14, -5, -29, -11, -12, 30, 57, 63, -20, -18, - 62, -10, 59, 47, -16, -16, -16, -16, -16, -16, - -16, -16, -16, -16, 59, 60, -21, -10, 64, 48, - 59, 59, -10, 62, 21, -24, 26, 14, 14, 61, - 40, 37, 39, 64, -31, -28, -29, -32, 35, 37, - 17, 18, 19, 57, -28, -28, -34, 29, 30, 58, - 47, 6, -13, -12, -14, -15, -38, -18, 60, 30, - 62, 59, -10, -10, -10, -9, -34, 61, 58, 64, - -26, -27, -16, -27, 61, -10, -16, -12, -12, -10, - 62, -33, -28, -5, -10, -12, 62, 48, 64, 48, - 59, 59, -10, 62, -10, 62, 58, 61, 58, -10, - 47, 59, -22, 60, 60, 61, 62, 48, 58, -12, - -15, -12, -12, 61, 62, 59, -34, -27, -27, -23, - 22, 23, -10, -10, -28, 59, -10, 24, -10, -10, - 58, 58, -12, 58, 21, -10, -10, -10, 61, 61, - 58, -10, 61, + -10, -8, -17, -17, -18, -10, -16, -16, -16, 30, + -10, -19, 64, 48, 59, 59, 59, -10, -10, 14, + -5, -29, -11, -12, 30, 57, 63, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, 47, 59, 60, + -20, -18, 62, -10, 59, -21, -10, 64, 48, 59, + 59, -10, 62, 21, -24, 26, 14, 14, 61, 40, + 37, 39, 64, -31, -28, -29, -32, 35, 37, 17, + 18, 19, 57, -28, -28, -34, 29, 30, 58, 47, + 6, -13, -12, -14, -15, -38, -18, 60, 30, -10, + -10, -9, -34, 62, 59, -10, 61, 58, 64, -26, + -27, -16, -27, 61, -10, -16, -12, -12, -10, 62, + -33, -28, -5, -10, -12, 62, 48, 64, 48, 59, + 59, -10, 58, 61, 58, 62, -10, 62, -10, 47, + 59, -22, 60, 60, 61, 62, 48, 58, -12, -15, + -12, -12, 61, 59, -34, 62, -27, -27, -23, 22, + 23, -10, -10, -28, 59, -10, 24, -10, -10, 58, + 58, -12, 58, 21, -10, -10, -10, 61, 61, 58, + -10, 61, } var yyDef = [...]int16{ 2, -2, 4, 0, 12, 0, 0, 1, 5, 10, - 11, 0, 0, 12, 36, 0, 25, 0, 50, 51, + 11, 0, 0, 12, 25, 0, 0, 36, 50, 51, 52, 55, 56, 57, 58, 60, 0, 0, 66, 0, 0, 69, 71, 0, 0, 0, 0, 0, 0, 89, 90, 91, 92, 84, 86, 3, 125, 0, 128, 0, 0, 0, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 0, 0, 0, 8, 13, 20, 0, - 79, 80, 81, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 53, 54, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 79, 80, 81, 0, 0, 53, 54, 0, 61, 0, 106, 111, 112, 0, 113, 114, 115, 64, - 0, 0, 67, 68, 70, 0, 104, 36, 0, 0, - 77, 0, 0, 126, 0, 0, 0, 0, 21, 24, - 0, 0, 9, 0, 37, 39, 0, 0, 82, 83, - 93, 0, 0, 0, 26, -2, 28, 29, -2, 31, - 32, 33, 34, 35, 0, 0, 0, 98, 62, 0, - 0, 0, 0, 65, 0, 73, 0, 0, 0, 78, - 85, 87, 0, 127, 129, 130, 118, 119, 120, 121, - 122, 123, 124, 0, 131, 132, 8, 18, 19, 7, - 0, 0, 0, 42, 0, 44, 0, 0, 0, -2, - 94, 0, 0, 23, 0, 0, 16, 59, 0, 63, - 107, 108, 117, 109, 0, 100, 105, 0, 0, 0, - 133, 0, 135, 0, 22, 38, 40, 0, 41, 0, - 0, 0, 0, 95, 0, 96, 14, 0, 0, 99, - 0, 0, 102, 0, 0, 88, 134, 0, 6, 43, - 45, 46, 47, 0, 97, 0, 17, 116, 110, 0, - 0, 0, 0, 0, 136, 0, 0, 72, 0, 103, - 0, 0, 48, 15, 0, 0, 0, 101, 74, 75, - 0, 0, 76, + 0, 0, 67, 68, 70, 0, 104, 0, 0, 77, + 0, 0, 126, 0, 0, 0, 0, 21, 24, 0, + 0, 9, 0, 37, 39, 0, 0, 26, -2, 28, + 29, -2, 31, 32, 33, 34, 35, 0, 0, 0, + 82, 83, 93, 0, 0, 0, 98, 62, 0, 0, + 0, 0, 65, 0, 73, 0, 0, 0, 78, 85, + 87, 0, 127, 129, 130, 118, 119, 120, 121, 122, + 123, 124, 0, 131, 132, 8, 18, 19, 7, 0, + 0, 0, 42, 0, 44, 0, 0, 0, -2, 23, + 0, 0, 16, 94, 0, 0, 59, 0, 63, 107, + 108, 117, 109, 0, 100, 105, 0, 0, 0, 133, + 0, 135, 0, 22, 38, 40, 0, 41, 0, 0, + 0, 0, 14, 0, 0, 95, 0, 96, 99, 0, + 0, 102, 0, 0, 88, 134, 0, 6, 43, 45, + 46, 47, 0, 0, 17, 97, 116, 110, 0, 0, + 0, 0, 0, 136, 0, 0, 72, 0, 103, 0, + 0, 48, 15, 0, 0, 0, 101, 74, 75, 0, + 0, 76, } var yyTok1 = [...]int8{ @@ -868,187 +868,185 @@ yydefault: yyDollar = yyS[yypt-5 : yypt+1] //line parser.go.y:155 { - term := yyDollar[1].value.(*Term) - term.SuffixList = append(term.SuffixList, &Suffix{Bind: &Bind{yyDollar[3].value.([]*Pattern), yyDollar[5].value.(*Query)}}) - yyVAL.value = &Query{Term: term} + yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpPipe, Right: yyDollar[5].value.(*Query), Patterns: yyDollar[3].value.([]*Pattern)} } case 23: yyDollar = yyS[yypt-4 : yypt+1] -//line parser.go.y:161 +//line parser.go.y:159 { yyVAL.value = &Query{Term: &Term{Type: TermTypeLabel, Label: &Label{yyDollar[2].token, yyDollar[4].value.(*Query)}}} } case 24: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:165 +//line parser.go.y:163 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpComma, Right: yyDollar[3].value.(*Query)} } case 26: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:172 +//line parser.go.y:170 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: yyDollar[2].operator, Right: yyDollar[3].value.(*Query)} } case 27: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:176 +//line parser.go.y:174 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: yyDollar[2].operator, Right: yyDollar[3].value.(*Query)} } case 28: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:180 +//line parser.go.y:178 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpOr, Right: yyDollar[3].value.(*Query)} } case 29: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:184 +//line parser.go.y:182 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpAnd, Right: yyDollar[3].value.(*Query)} } case 30: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:188 +//line parser.go.y:186 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: yyDollar[2].operator, Right: yyDollar[3].value.(*Query)} } case 31: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:192 +//line parser.go.y:190 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpAdd, Right: yyDollar[3].value.(*Query)} } case 32: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:196 +//line parser.go.y:194 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpSub, Right: yyDollar[3].value.(*Query)} } case 33: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:200 +//line parser.go.y:198 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpMul, Right: yyDollar[3].value.(*Query)} } case 34: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:204 +//line parser.go.y:202 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpDiv, Right: yyDollar[3].value.(*Query)} } case 35: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:208 +//line parser.go.y:206 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpMod, Right: yyDollar[3].value.(*Query)} } case 36: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:212 +//line parser.go.y:210 { yyVAL.value = &Query{Term: yyDollar[1].value.(*Term)} } case 37: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:218 +//line parser.go.y:216 { yyVAL.value = []*Pattern{yyDollar[1].value.(*Pattern)} } case 38: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:222 +//line parser.go.y:220 { yyVAL.value = append(yyDollar[1].value.([]*Pattern), yyDollar[3].value.(*Pattern)) } case 39: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:228 +//line parser.go.y:226 { yyVAL.value = &Pattern{Name: yyDollar[1].token} } case 40: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:232 +//line parser.go.y:230 { yyVAL.value = &Pattern{Array: yyDollar[2].value.([]*Pattern)} } case 41: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:236 +//line parser.go.y:234 { yyVAL.value = &Pattern{Object: yyDollar[2].value.([]*PatternObject)} } case 42: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:242 +//line parser.go.y:240 { yyVAL.value = []*Pattern{yyDollar[1].value.(*Pattern)} } case 43: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:246 +//line parser.go.y:244 { yyVAL.value = append(yyDollar[1].value.([]*Pattern), yyDollar[3].value.(*Pattern)) } case 44: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:252 +//line parser.go.y:250 { yyVAL.value = []*PatternObject{yyDollar[1].value.(*PatternObject)} } case 45: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:256 +//line parser.go.y:254 { yyVAL.value = append(yyDollar[1].value.([]*PatternObject), yyDollar[3].value.(*PatternObject)) } case 46: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:262 +//line parser.go.y:260 { yyVAL.value = &PatternObject{Key: yyDollar[1].token, Val: yyDollar[3].value.(*Pattern)} } case 47: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:266 +//line parser.go.y:264 { yyVAL.value = &PatternObject{KeyString: yyDollar[1].value.(*String), Val: yyDollar[3].value.(*Pattern)} } case 48: yyDollar = yyS[yypt-5 : yypt+1] -//line parser.go.y:270 +//line parser.go.y:268 { yyVAL.value = &PatternObject{KeyQuery: yyDollar[2].value.(*Query), Val: yyDollar[5].value.(*Pattern)} } case 49: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:274 +//line parser.go.y:272 { yyVAL.value = &PatternObject{Key: yyDollar[1].token} } case 50: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:280 +//line parser.go.y:278 { yyVAL.value = &Term{Type: TermTypeIdentity} } case 51: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:284 +//line parser.go.y:282 { yyVAL.value = &Term{Type: TermTypeRecurse} } case 52: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:288 +//line parser.go.y:286 { yyVAL.value = &Term{Type: TermTypeIndex, Index: &Index{Name: yyDollar[1].token}} } case 53: yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:292 +//line parser.go.y:290 { suffix := yyDollar[2].value.(*Suffix) if suffix.Iter { @@ -1059,452 +1057,452 @@ yydefault: } case 54: yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:301 +//line parser.go.y:299 { yyVAL.value = &Term{Type: TermTypeIndex, Index: &Index{Str: yyDollar[2].value.(*String)}} } case 55: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:305 +//line parser.go.y:303 { yyVAL.value = &Term{Type: TermTypeNull} } case 56: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:309 +//line parser.go.y:307 { yyVAL.value = &Term{Type: TermTypeTrue} } case 57: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:313 +//line parser.go.y:311 { yyVAL.value = &Term{Type: TermTypeFalse} } case 58: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:317 +//line parser.go.y:315 { yyVAL.value = &Term{Type: TermTypeFunc, Func: &Func{Name: yyDollar[1].token}} } case 59: yyDollar = yyS[yypt-4 : yypt+1] -//line parser.go.y:321 +//line parser.go.y:319 { yyVAL.value = &Term{Type: TermTypeFunc, Func: &Func{Name: yyDollar[1].token, Args: yyDollar[3].value.([]*Query)}} } case 60: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:325 +//line parser.go.y:323 { yyVAL.value = &Term{Type: TermTypeFunc, Func: &Func{Name: yyDollar[1].token}} } case 61: yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:329 +//line parser.go.y:327 { yyVAL.value = &Term{Type: TermTypeObject, Object: &Object{}} } case 62: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:333 +//line parser.go.y:331 { yyVAL.value = &Term{Type: TermTypeObject, Object: &Object{yyDollar[2].value.([]*ObjectKeyVal)}} } case 63: yyDollar = yyS[yypt-4 : yypt+1] -//line parser.go.y:337 +//line parser.go.y:335 { yyVAL.value = &Term{Type: TermTypeObject, Object: &Object{yyDollar[2].value.([]*ObjectKeyVal)}} } case 64: yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:341 +//line parser.go.y:339 { yyVAL.value = &Term{Type: TermTypeArray, Array: &Array{}} } case 65: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:345 +//line parser.go.y:343 { yyVAL.value = &Term{Type: TermTypeArray, Array: &Array{yyDollar[2].value.(*Query)}} } case 66: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:349 +//line parser.go.y:347 { yyVAL.value = &Term{Type: TermTypeNumber, Number: yyDollar[1].token} } case 67: yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:353 +//line parser.go.y:351 { yyVAL.value = &Term{Type: TermTypeUnary, Unary: &Unary{OpAdd, yyDollar[2].value.(*Term)}} } case 68: yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:357 +//line parser.go.y:355 { yyVAL.value = &Term{Type: TermTypeUnary, Unary: &Unary{OpSub, yyDollar[2].value.(*Term)}} } case 69: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:361 +//line parser.go.y:359 { yyVAL.value = &Term{Type: TermTypeFormat, Format: yyDollar[1].token} } case 70: yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:365 +//line parser.go.y:363 { yyVAL.value = &Term{Type: TermTypeFormat, Format: yyDollar[1].token, Str: yyDollar[2].value.(*String)} } case 71: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:369 +//line parser.go.y:367 { yyVAL.value = &Term{Type: TermTypeString, Str: yyDollar[1].value.(*String)} } case 72: yyDollar = yyS[yypt-7 : yypt+1] -//line parser.go.y:373 +//line parser.go.y:371 { yyVAL.value = &Term{Type: TermTypeIf, If: &If{yyDollar[2].value.(*Query), yyDollar[4].value.(*Query), yyDollar[5].value.([]*IfElif), yyDollar[6].value.(*Query)}} } case 73: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:377 +//line parser.go.y:375 { yyVAL.value = &Term{Type: TermTypeTry, Try: &Try{yyDollar[2].value.(*Query), yyDollar[3].value.(*Query)}} } case 74: yyDollar = yyS[yypt-9 : yypt+1] -//line parser.go.y:381 +//line parser.go.y:379 { yyVAL.value = &Term{Type: TermTypeReduce, Reduce: &Reduce{yyDollar[2].value.(*Query), yyDollar[4].value.(*Pattern), yyDollar[6].value.(*Query), yyDollar[8].value.(*Query)}} } case 75: yyDollar = yyS[yypt-9 : yypt+1] -//line parser.go.y:385 +//line parser.go.y:383 { yyVAL.value = &Term{Type: TermTypeForeach, Foreach: &Foreach{yyDollar[2].value.(*Query), yyDollar[4].value.(*Pattern), yyDollar[6].value.(*Query), yyDollar[8].value.(*Query), nil}} } case 76: yyDollar = yyS[yypt-11 : yypt+1] -//line parser.go.y:389 +//line parser.go.y:387 { yyVAL.value = &Term{Type: TermTypeForeach, Foreach: &Foreach{yyDollar[2].value.(*Query), yyDollar[4].value.(*Pattern), yyDollar[6].value.(*Query), yyDollar[8].value.(*Query), yyDollar[10].value.(*Query)}} } case 77: yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:393 +//line parser.go.y:391 { yyVAL.value = &Term{Type: TermTypeBreak, Break: yyDollar[2].token} } case 78: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:397 +//line parser.go.y:395 { yyVAL.value = &Term{Type: TermTypeQuery, Query: yyDollar[2].value.(*Query)} } case 79: yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:401 +//line parser.go.y:399 { yyDollar[1].value.(*Term).SuffixList = append(yyDollar[1].value.(*Term).SuffixList, &Suffix{Index: &Index{Name: yyDollar[2].token}}) } case 80: yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:405 +//line parser.go.y:403 { yyDollar[1].value.(*Term).SuffixList = append(yyDollar[1].value.(*Term).SuffixList, yyDollar[2].value.(*Suffix)) } case 81: yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:409 +//line parser.go.y:407 { yyDollar[1].value.(*Term).SuffixList = append(yyDollar[1].value.(*Term).SuffixList, &Suffix{Optional: true}) } case 82: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:413 +//line parser.go.y:411 { yyDollar[1].value.(*Term).SuffixList = append(yyDollar[1].value.(*Term).SuffixList, yyDollar[3].value.(*Suffix)) } case 83: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:417 +//line parser.go.y:415 { yyDollar[1].value.(*Term).SuffixList = append(yyDollar[1].value.(*Term).SuffixList, &Suffix{Index: &Index{Str: yyDollar[3].value.(*String)}}) } case 84: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:423 +//line parser.go.y:421 { yyVAL.value = &String{Str: yyDollar[1].token} } case 85: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:427 +//line parser.go.y:425 { yyVAL.value = &String{Queries: yyDollar[2].value.([]*Query)} } case 86: yyDollar = yyS[yypt-0 : yypt+1] -//line parser.go.y:433 +//line parser.go.y:431 { yyVAL.value = []*Query{} } case 87: yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:437 +//line parser.go.y:435 { yyVAL.value = append(yyDollar[1].value.([]*Query), &Query{Term: &Term{Type: TermTypeString, Str: &String{Str: yyDollar[2].token}}}) } case 88: yyDollar = yyS[yypt-4 : yypt+1] -//line parser.go.y:441 +//line parser.go.y:439 { yylex.(*lexer).inString = true yyVAL.value = append(yyDollar[1].value.([]*Query), &Query{Term: &Term{Type: TermTypeQuery, Query: yyDollar[3].value.(*Query)}}) } case 93: yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:456 +//line parser.go.y:454 { yyVAL.value = &Suffix{Iter: true} } case 94: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:460 +//line parser.go.y:458 { yyVAL.value = &Suffix{Index: &Index{Start: yyDollar[2].value.(*Query)}} } case 95: yyDollar = yyS[yypt-4 : yypt+1] -//line parser.go.y:464 +//line parser.go.y:462 { yyVAL.value = &Suffix{Index: &Index{Start: yyDollar[2].value.(*Query), IsSlice: true}} } case 96: yyDollar = yyS[yypt-4 : yypt+1] -//line parser.go.y:468 +//line parser.go.y:466 { yyVAL.value = &Suffix{Index: &Index{End: yyDollar[3].value.(*Query), IsSlice: true}} } case 97: yyDollar = yyS[yypt-5 : yypt+1] -//line parser.go.y:472 +//line parser.go.y:470 { yyVAL.value = &Suffix{Index: &Index{Start: yyDollar[2].value.(*Query), End: yyDollar[4].value.(*Query), IsSlice: true}} } case 98: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:478 +//line parser.go.y:476 { yyVAL.value = []*Query{yyDollar[1].value.(*Query)} } case 99: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:482 +//line parser.go.y:480 { yyVAL.value = append(yyDollar[1].value.([]*Query), yyDollar[3].value.(*Query)) } case 100: yyDollar = yyS[yypt-0 : yypt+1] -//line parser.go.y:488 +//line parser.go.y:486 { yyVAL.value = []*IfElif(nil) } case 101: yyDollar = yyS[yypt-5 : yypt+1] -//line parser.go.y:492 +//line parser.go.y:490 { yyVAL.value = append(yyDollar[1].value.([]*IfElif), &IfElif{yyDollar[3].value.(*Query), yyDollar[5].value.(*Query)}) } case 102: yyDollar = yyS[yypt-0 : yypt+1] -//line parser.go.y:498 +//line parser.go.y:496 { yyVAL.value = (*Query)(nil) } case 103: yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:502 +//line parser.go.y:500 { yyVAL.value = yyDollar[2].value } case 104: yyDollar = yyS[yypt-0 : yypt+1] -//line parser.go.y:508 +//line parser.go.y:506 { yyVAL.value = (*Query)(nil) } case 105: yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:512 +//line parser.go.y:510 { yyVAL.value = yyDollar[2].value } case 106: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:518 +//line parser.go.y:516 { yyVAL.value = []*ObjectKeyVal{yyDollar[1].value.(*ObjectKeyVal)} } case 107: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:522 +//line parser.go.y:520 { yyVAL.value = append(yyDollar[1].value.([]*ObjectKeyVal), yyDollar[3].value.(*ObjectKeyVal)) } case 108: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:528 +//line parser.go.y:526 { yyVAL.value = &ObjectKeyVal{Key: yyDollar[1].token, Val: yyDollar[3].value.(*Query)} } case 109: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:532 +//line parser.go.y:530 { yyVAL.value = &ObjectKeyVal{KeyString: yyDollar[1].value.(*String), Val: yyDollar[3].value.(*Query)} } case 110: yyDollar = yyS[yypt-5 : yypt+1] -//line parser.go.y:536 +//line parser.go.y:534 { yyVAL.value = &ObjectKeyVal{KeyQuery: yyDollar[2].value.(*Query), Val: yyDollar[5].value.(*Query)} } case 111: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:540 +//line parser.go.y:538 { yyVAL.value = &ObjectKeyVal{Key: yyDollar[1].token} } case 112: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:544 +//line parser.go.y:542 { yyVAL.value = &ObjectKeyVal{KeyString: yyDollar[1].value.(*String)} } case 116: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:555 +//line parser.go.y:553 { yyVAL.value = &Query{Left: yyDollar[1].value.(*Query), Op: OpPipe, Right: yyDollar[3].value.(*Query)} } case 118: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:562 +//line parser.go.y:560 { yyVAL.value = &ConstTerm{Object: yyDollar[1].value.(*ConstObject)} } case 119: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:566 +//line parser.go.y:564 { yyVAL.value = &ConstTerm{Array: yyDollar[1].value.(*ConstArray)} } case 120: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:570 +//line parser.go.y:568 { yyVAL.value = &ConstTerm{Number: yyDollar[1].token} } case 121: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:574 +//line parser.go.y:572 { yyVAL.value = &ConstTerm{Str: yyDollar[1].token} } case 122: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:578 +//line parser.go.y:576 { yyVAL.value = &ConstTerm{Null: true} } case 123: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:582 +//line parser.go.y:580 { yyVAL.value = &ConstTerm{True: true} } case 124: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:586 +//line parser.go.y:584 { yyVAL.value = &ConstTerm{False: true} } case 125: yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:592 +//line parser.go.y:590 { yyVAL.value = &ConstObject{} } case 126: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:596 +//line parser.go.y:594 { yyVAL.value = &ConstObject{yyDollar[2].value.([]*ConstObjectKeyVal)} } case 127: yyDollar = yyS[yypt-4 : yypt+1] -//line parser.go.y:600 +//line parser.go.y:598 { yyVAL.value = &ConstObject{yyDollar[2].value.([]*ConstObjectKeyVal)} } case 128: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:606 +//line parser.go.y:604 { yyVAL.value = []*ConstObjectKeyVal{yyDollar[1].value.(*ConstObjectKeyVal)} } case 129: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:610 +//line parser.go.y:608 { yyVAL.value = append(yyDollar[1].value.([]*ConstObjectKeyVal), yyDollar[3].value.(*ConstObjectKeyVal)) } case 130: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:616 +//line parser.go.y:614 { yyVAL.value = &ConstObjectKeyVal{Key: yyDollar[1].token, Val: yyDollar[3].value.(*ConstTerm)} } case 131: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:620 +//line parser.go.y:618 { yyVAL.value = &ConstObjectKeyVal{Key: yyDollar[1].token, Val: yyDollar[3].value.(*ConstTerm)} } case 132: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:624 +//line parser.go.y:622 { yyVAL.value = &ConstObjectKeyVal{KeyString: yyDollar[1].token, Val: yyDollar[3].value.(*ConstTerm)} } case 133: yyDollar = yyS[yypt-2 : yypt+1] -//line parser.go.y:630 +//line parser.go.y:628 { yyVAL.value = &ConstArray{} } case 134: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:634 +//line parser.go.y:632 { yyVAL.value = &ConstArray{yyDollar[2].value.([]*ConstTerm)} } case 135: yyDollar = yyS[yypt-1 : yypt+1] -//line parser.go.y:640 +//line parser.go.y:638 { yyVAL.value = []*ConstTerm{yyDollar[1].value.(*ConstTerm)} } case 136: yyDollar = yyS[yypt-3 : yypt+1] -//line parser.go.y:644 +//line parser.go.y:642 { yyVAL.value = append(yyDollar[1].value.([]*ConstTerm), yyDollar[3].value.(*ConstTerm)) } diff --git a/vendor/github.com/itchyny/gojq/parser.go.y b/vendor/github.com/itchyny/gojq/parser.go.y index 5481e21140..5f9df778e8 100644 --- a/vendor/github.com/itchyny/gojq/parser.go.y +++ b/vendor/github.com/itchyny/gojq/parser.go.y @@ -151,11 +151,9 @@ query { $$ = &Query{Left: $1.(*Query), Op: OpPipe, Right: $3.(*Query)} } - | term tokAs bindpatterns '|' query + | query tokAs bindpatterns '|' query { - term := $1.(*Term) - term.SuffixList = append(term.SuffixList, &Suffix{Bind: &Bind{$3.([]*Pattern), $5.(*Query)}}) - $$ = &Query{Term: term} + $$ = &Query{Left: $1.(*Query), Op: OpPipe, Right: $5.(*Query), Patterns: $3.([]*Pattern)} } | tokLabel tokVariable '|' query { diff --git a/vendor/github.com/itchyny/gojq/preview.go b/vendor/github.com/itchyny/gojq/preview.go index e082eb5619..92f1a54a3d 100644 --- a/vendor/github.com/itchyny/gojq/preview.go +++ b/vendor/github.com/itchyny/gojq/preview.go @@ -7,9 +7,9 @@ import "unicode/utf8" // by 30 bytes, and more efficient than truncating the result of [Marshal]. // // This method is used by error messages of built-in operators and functions, -// and accepts only limited types (nil, bool, int, float64, *big.Int, string, -// []any, and map[string]any). Note that the maximum width and trailing strings -// on truncation may be changed in the future. +// and accepts only limited types (nil, bool, int, float64, *big.Int, +// json.Number, string, []any, and map[string]any). Note that the maximum width +// and trailing strings on truncation may be changed in the future. func Preview(v any) string { bs := jsonLimitedMarshal(v, 32) if l := 30; len(bs) > l { diff --git a/vendor/github.com/itchyny/gojq/query.go b/vendor/github.com/itchyny/gojq/query.go index e7cf778908..512fa80dd6 100644 --- a/vendor/github.com/itchyny/gojq/query.go +++ b/vendor/github.com/itchyny/gojq/query.go @@ -26,15 +26,14 @@ type Query struct { FuncDefs []*FuncDef Term *Term Left *Query - Op Operator Right *Query - Func string + Patterns []*Pattern + Op Operator } // Run the query. // // It is safe to call this method in goroutines, to reuse a parsed [*Query]. -// But for arguments, do not give values sharing same data between goroutines. func (e *Query) Run(v any) Iter { return e.RunWithContext(context.Background(), v) } @@ -67,40 +66,28 @@ func (e *Query) writeTo(s *strings.Builder) { fd.writeTo(s) s.WriteByte(' ') } - if e.Func != "" { - s.WriteString(e.Func) - } else if e.Term != nil { + if e.Term != nil { e.Term.writeTo(s) } else if e.Right != nil { e.Left.writeTo(s) - if e.Op == OpComma { - s.WriteString(", ") - } else { + if e.Op != OpComma { s.WriteByte(' ') - s.WriteString(e.Op.String()) + } + for i, p := range e.Patterns { + if i == 0 { + s.WriteString("as ") + } else { + s.WriteString("?// ") + } + p.writeTo(s) s.WriteByte(' ') } + s.WriteString(e.Op.String()) + s.WriteByte(' ') e.Right.writeTo(s) } } -func (e *Query) minify() { - for _, e := range e.FuncDefs { - e.Minify() - } - if e.Term != nil { - if name := e.Term.toFunc(); name != "" { - e.Term = nil - e.Func = name - } else { - e.Term.minify() - } - } else if e.Right != nil { - e.Left.minify() - e.Right.minify() - } -} - func (e *Query) toIndexKey() any { if e.Term == nil { return nil @@ -177,11 +164,6 @@ func (e *FuncDef) writeTo(s *strings.Builder) { s.WriteByte(';') } -// Minify ... -func (e *FuncDef) Minify() { - e.Body.minify() -} - // Term ... type Term struct { Type TermType @@ -264,65 +246,6 @@ func (e *Term) writeTo(s *strings.Builder) { } } -func (e *Term) minify() { - switch e.Type { - case TermTypeIndex: - e.Index.minify() - case TermTypeFunc: - e.Func.minify() - case TermTypeObject: - e.Object.minify() - case TermTypeArray: - e.Array.minify() - case TermTypeUnary: - e.Unary.minify() - case TermTypeFormat: - if e.Str != nil { - e.Str.minify() - } - case TermTypeString: - e.Str.minify() - case TermTypeIf: - e.If.minify() - case TermTypeTry: - e.Try.minify() - case TermTypeReduce: - e.Reduce.minify() - case TermTypeForeach: - e.Foreach.minify() - case TermTypeLabel: - e.Label.minify() - case TermTypeQuery: - e.Query.minify() - } - for _, e := range e.SuffixList { - e.minify() - } -} - -func (e *Term) toFunc() string { - if len(e.SuffixList) != 0 { - return "" - } - // ref: compiler#compileQuery - switch e.Type { - case TermTypeIdentity: - return "." - case TermTypeRecurse: - return ".." - case TermTypeNull: - return "null" - case TermTypeTrue: - return "true" - case TermTypeFalse: - return "false" - case TermTypeFunc: - return e.Func.toFunc() - default: - return "" - } -} - func (e *Term) toIndexKey() any { switch e.Type { case TermTypeNumber: @@ -384,10 +307,6 @@ func (e *Unary) writeTo(s *strings.Builder) { e.Term.writeTo(s) } -func (e *Unary) minify() { - e.Term.minify() -} - func (e *Unary) toNumber() any { v := e.Term.toNumber() if v != nil && e.Op == OpSub { @@ -511,18 +430,6 @@ func (e *Index) writeSuffixTo(s *strings.Builder) { } } -func (e *Index) minify() { - if e.Str != nil { - e.Str.minify() - } - if e.Start != nil { - e.Start.minify() - } - if e.End != nil { - e.End.minify() - } -} - func (e *Index) toIndexKey() any { if e.Name != "" { return e.Name @@ -583,19 +490,6 @@ func (e *Func) writeTo(s *strings.Builder) { } } -func (e *Func) minify() { - for _, x := range e.Args { - x.minify() - } -} - -func (e *Func) toFunc() string { - if len(e.Args) != 0 { - return "" - } - return e.Name -} - // String ... type String struct { Str string @@ -626,12 +520,6 @@ func (e *String) writeTo(s *strings.Builder) { s.WriteByte('"') } -func (e *String) minify() { - for _, e := range e.Queries { - e.minify() - } -} - // Object ... type Object struct { KeyVals []*ObjectKeyVal @@ -658,12 +546,6 @@ func (e *Object) writeTo(s *strings.Builder) { s.WriteString(" }") } -func (e *Object) minify() { - for _, e := range e.KeyVals { - e.minify() - } -} - // ObjectKeyVal ... type ObjectKeyVal struct { Key string @@ -694,17 +576,6 @@ func (e *ObjectKeyVal) writeTo(s *strings.Builder) { } } -func (e *ObjectKeyVal) minify() { - if e.KeyString != nil { - e.KeyString.minify() - } else if e.KeyQuery != nil { - e.KeyQuery.minify() - } - if e.Val != nil { - e.Val.minify() - } -} - // Array ... type Array struct { Query *Query @@ -724,18 +595,11 @@ func (e *Array) writeTo(s *strings.Builder) { s.WriteByte(']') } -func (e *Array) minify() { - if e.Query != nil { - e.Query.minify() - } -} - // Suffix ... type Suffix struct { Index *Index Iter bool Optional bool - Bind *Bind } func (e *Suffix) String() string { @@ -755,16 +619,6 @@ func (e *Suffix) writeTo(s *strings.Builder) { s.WriteString("[]") } else if e.Optional { s.WriteByte('?') - } else if e.Bind != nil { - e.Bind.writeTo(s) - } -} - -func (e *Suffix) minify() { - if e.Index != nil { - e.Index.minify() - } else if e.Bind != nil { - e.Bind.minify() } } @@ -785,38 +639,6 @@ func (e *Suffix) toIndices(xs []any) []any { return e.Index.toIndices(xs) } -// Bind ... -type Bind struct { - Patterns []*Pattern - Body *Query -} - -func (e *Bind) String() string { - var s strings.Builder - e.writeTo(&s) - return s.String() -} - -func (e *Bind) writeTo(s *strings.Builder) { - for i, p := range e.Patterns { - if i == 0 { - s.WriteString(" as ") - p.writeTo(s) - s.WriteByte(' ') - } else { - s.WriteString("?// ") - p.writeTo(s) - s.WriteByte(' ') - } - } - s.WriteString("| ") - e.Body.writeTo(s) -} - -func (e *Bind) minify() { - e.Body.minify() -} - // If ... type If struct { Cond *Query @@ -847,17 +669,6 @@ func (e *If) writeTo(s *strings.Builder) { s.WriteString(" end") } -func (e *If) minify() { - e.Cond.minify() - e.Then.minify() - for _, x := range e.Elif { - x.minify() - } - if e.Else != nil { - e.Else.minify() - } -} - // IfElif ... type IfElif struct { Cond *Query @@ -877,11 +688,6 @@ func (e *IfElif) writeTo(s *strings.Builder) { e.Then.writeTo(s) } -func (e *IfElif) minify() { - e.Cond.minify() - e.Then.minify() -} - // Try ... type Try struct { Body *Query @@ -903,13 +709,6 @@ func (e *Try) writeTo(s *strings.Builder) { } } -func (e *Try) minify() { - e.Body.minify() - if e.Catch != nil { - e.Catch.minify() - } -} - // Reduce ... type Reduce struct { Query *Query @@ -936,12 +735,6 @@ func (e *Reduce) writeTo(s *strings.Builder) { s.WriteByte(')') } -func (e *Reduce) minify() { - e.Query.minify() - e.Start.minify() - e.Update.minify() -} - // Foreach ... type Foreach struct { Query *Query @@ -973,15 +766,6 @@ func (e *Foreach) writeTo(s *strings.Builder) { s.WriteByte(')') } -func (e *Foreach) minify() { - e.Query.minify() - e.Start.minify() - e.Update.minify() - if e.Extract != nil { - e.Extract.minify() - } -} - // Label ... type Label struct { Ident string @@ -1001,10 +785,6 @@ func (e *Label) writeTo(s *strings.Builder) { e.Body.writeTo(s) } -func (e *Label) minify() { - e.Body.minify() -} - // ConstTerm ... type ConstTerm struct { Object *ConstObject diff --git a/vendor/github.com/itchyny/gojq/type.go b/vendor/github.com/itchyny/gojq/type.go index bb388e20e4..89ccda0e36 100644 --- a/vendor/github.com/itchyny/gojq/type.go +++ b/vendor/github.com/itchyny/gojq/type.go @@ -1,6 +1,7 @@ package gojq import ( + "encoding/json" "fmt" "math/big" ) @@ -8,14 +9,15 @@ import ( // TypeOf returns the jq-flavored type name of v. // // This method is used by built-in type/0 function, and accepts only limited -// types (nil, bool, int, float64, *big.Int, string, []any, and map[string]any). +// types (nil, bool, int, float64, *big.Int, json.Number, string, []any, and +// map[string]any). func TypeOf(v any) string { switch v.(type) { case nil: return "null" case bool: return "boolean" - case int, float64, *big.Int: + case int, float64, *big.Int, json.Number: return "number" case string: return "string" diff --git a/vendor/github.com/itchyny/timefmt-go/CHANGELOG.md b/vendor/github.com/itchyny/timefmt-go/CHANGELOG.md index d863ac3bea..72f3ad1d43 100644 --- a/vendor/github.com/itchyny/timefmt-go/CHANGELOG.md +++ b/vendor/github.com/itchyny/timefmt-go/CHANGELOG.md @@ -1,4 +1,7 @@ # Changelog +## [v0.1.7](https://github.com/itchyny/timefmt-go/compare/v0.1.6..v0.1.7) (2025-10-01) +* refactor code using built-in `min` and `max` functions + ## [v0.1.6](https://github.com/itchyny/timefmt-go/compare/v0.1.5..v0.1.6) (2024-06-01) * support parsing week directives (`%A`, `%a`, `%w`, `%u`, `%V`, `%U`, `%W`) * validate range of values on parsing directives diff --git a/vendor/github.com/itchyny/timefmt-go/LICENSE b/vendor/github.com/itchyny/timefmt-go/LICENSE index 84d6cb0339..de520bb31a 100644 --- a/vendor/github.com/itchyny/timefmt-go/LICENSE +++ b/vendor/github.com/itchyny/timefmt-go/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2020-2022 itchyny +Copyright (c) 2020-2025 itchyny 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/github.com/itchyny/timefmt-go/format.go b/vendor/github.com/itchyny/timefmt-go/format.go index b38202dff0..dc09ef9002 100644 --- a/vendor/github.com/itchyny/timefmt-go/format.go +++ b/vendor/github.com/itchyny/timefmt-go/format.go @@ -1,7 +1,6 @@ package timefmt import ( - "math" "strconv" "time" ) @@ -14,7 +13,7 @@ func Format(t time.Time, format string) string { // AppendFormat appends formatted time string to the buffer. func AppendFormat(buf []byte, t time.Time, format string) []byte { year, month, day := t.Date() - hour, min, sec := t.Clock() + hour, minute, second := t.Clock() var width, colons int var padding byte var pending string @@ -69,21 +68,13 @@ func AppendFormat(buf []byte, t time.Time, format string) []byte { goto L case '1', '2', '3', '4', '5', '6', '7', '8', '9': width = int(b & 0x0F) - const maxWidth = 1024 for i++; i < len(format); i++ { - b = format[i] - if b <= '9' && '0' <= b { - width = width*10 + int(b&0x0F) - if width >= math.MaxInt/10 { - width = maxWidth - } + if b = format[i]; b <= '9' && '0' <= b { + width = min(width*10+int(b&0x0F), 1024) } else { break } } - if width > maxWidth { - width = maxWidth - } if padding == ^paddingMask { padding = ' ' | ^paddingMask } @@ -92,37 +83,19 @@ func AppendFormat(buf []byte, t time.Time, format string) []byte { } goto L case 'Y': - if width == 0 { - width = 4 - } - buf = appendInt(buf, year, width, padding) + buf = appendInt(buf, year, or(width, 4), padding) case 'y': - if width < 2 { - width = 2 - } - buf = appendInt(buf, year%100, width, padding) + buf = appendInt(buf, year%100, max(width, 2), padding) case 'C': - if width < 2 { - width = 2 - } - buf = appendInt(buf, year/100, width, padding) + buf = appendInt(buf, year/100, max(width, 2), padding) case 'g': - if width < 2 { - width = 2 - } year, _ := t.ISOWeek() - buf = appendInt(buf, year%100, width, padding) + buf = appendInt(buf, year%100, max(width, 2), padding) case 'G': - if width == 0 { - width = 4 - } year, _ := t.ISOWeek() - buf = appendInt(buf, year, width, padding) + buf = appendInt(buf, year, or(width, 4), padding) case 'm': - if width < 2 { - width = 2 - } - buf = appendInt(buf, int(month), width, padding) + buf = appendInt(buf, int(month), max(width, 2), padding) case 'B': buf = appendString(buf, longMonthNames[month-1], width, padding, upper, swap) case 'b', 'h': @@ -134,74 +107,43 @@ func AppendFormat(buf []byte, t time.Time, format string) []byte { case 'w': buf = appendInt(buf, int(t.Weekday()), width, padding) case 'u': - w := int(t.Weekday()) - if w == 0 { - w = 7 - } - buf = appendInt(buf, w, width, padding) + buf = appendInt(buf, or(int(t.Weekday()), 7), width, padding) case 'V': - if width < 2 { - width = 2 - } _, week := t.ISOWeek() - buf = appendInt(buf, week, width, padding) + buf = appendInt(buf, week, max(width, 2), padding) case 'U': - if width < 2 { - width = 2 - } week := (t.YearDay() + 6 - int(t.Weekday())) / 7 - buf = appendInt(buf, week, width, padding) + buf = appendInt(buf, week, max(width, 2), padding) case 'W': - if width < 2 { - width = 2 - } week := t.YearDay() if int(t.Weekday()) > 0 { week -= int(t.Weekday()) - 7 } week /= 7 - buf = appendInt(buf, week, width, padding) + buf = appendInt(buf, week, max(width, 2), padding) case 'e': if padding < ^paddingMask { padding = ' ' } fallthrough case 'd': - if width < 2 { - width = 2 - } - buf = appendInt(buf, day, width, padding) + buf = appendInt(buf, day, max(width, 2), padding) case 'j': - if width < 3 { - width = 3 - } - buf = appendInt(buf, t.YearDay(), width, padding) + buf = appendInt(buf, t.YearDay(), max(width, 3), padding) case 'k': if padding < ^paddingMask { padding = ' ' } fallthrough case 'H': - if width < 2 { - width = 2 - } - buf = appendInt(buf, hour, width, padding) + buf = appendInt(buf, hour, max(width, 2), padding) case 'l': if padding < ^paddingMask { padding = ' ' } fallthrough case 'I': - if width < 2 { - width = 2 - } - h := hour - if h > 12 { - h -= 12 - } else if h == 0 { - h = 12 - } - buf = appendInt(buf, h, width, padding) + buf = appendInt(buf, or(hour%12, 12), max(width, 2), padding) case 'P': swap = !(upper || swap) fallthrough @@ -212,25 +154,16 @@ func AppendFormat(buf []byte, t time.Time, format string) []byte { buf = appendString(buf, "PM", width, padding, upper, swap) } case 'M': - if width < 2 { - width = 2 - } - buf = appendInt(buf, min, width, padding) + buf = appendInt(buf, minute, max(width, 2), padding) case 'S': - if width < 2 { - width = 2 - } - buf = appendInt(buf, sec, width, padding) + buf = appendInt(buf, second, max(width, 2), padding) case 's': if padding < ^paddingMask { padding = ' ' } buf = appendInt(buf, int(t.Unix()), width, padding) case 'f': - if width == 0 { - width = 6 - } - buf = appendInt(buf, t.Nanosecond()/1000, width, padding) + buf = appendInt(buf, t.Nanosecond()/1000, or(width, 6), padding) case 'Z', 'z': name, offset := t.Zone() if b == 'Z' && name != "" { @@ -266,19 +199,11 @@ func AppendFormat(buf []byte, t time.Time, format string) []byte { } } colons = 0 - if i != j { - l := len(buf) - k = j + 1 - (l - j) - if k < i { - l = j + 1 + i - k - k = i - } else { - l = j + 1 - } - copy(buf[k:], buf[j:]) - buf = buf[:l] + if k = min(len(buf)-j-1, j-i); k > 0 { + copy(buf[j-k:], buf[j:]) + buf = buf[:len(buf)-k] if padding&paddingMask == '0' { - buf[i], buf[k] = buf[k], buf[i] + buf[i], buf[j-k] = buf[j-k], buf[i] } } case ':': @@ -373,19 +298,11 @@ func appendInt(buf []byte, num, width int, padding byte) []byte { } j := len(buf) buf = strconv.AppendInt(buf, int64(num), 10) - l := len(buf) - if j+1 == l || i == j { - return buf - } - k := j + 1 - (l - j) - if k < i { - l = j + 1 + i - k - k = i - } else { - l = j + 1 + if k := min(len(buf)-j-1, j-i); k > 0 { + copy(buf[j-k:], buf[j:]) + buf = buf[:len(buf)-k] } - copy(buf[k:], buf[j:]) - return buf[:l] + return buf } } if num < 100 { @@ -453,6 +370,13 @@ func appendLast(buf []byte, format string, width int, padding byte) []byte { return buf } +func or(x, y int) int { + if x != 0 { + return x + } + return y +} + const paddingMask byte = 0x7F var longMonthNames = []string{ diff --git a/vendor/github.com/itchyny/timefmt-go/parse.go b/vendor/github.com/itchyny/timefmt-go/parse.go index 26ae0f0c25..34a22990a8 100644 --- a/vendor/github.com/itchyny/timefmt-go/parse.go +++ b/vendor/github.com/itchyny/timefmt-go/parse.go @@ -19,7 +19,7 @@ func ParseInLocation(source, format string, loc *time.Location) (t time.Time, er } func parse(source, format string, loc, base *time.Location) (t time.Time, err error) { - year, month, day, hour, min, sec, nsec := 1900, 1, 0, 0, 0, 0, 0 + year, month, day, hour, minute, second, nanosecond := 1900, 1, 0, 0, 0, 0, 0 defer func() { if err != nil { err = fmt.Errorf("failed to parse %q with %q: %w", source, format, err) @@ -102,25 +102,19 @@ func parse(source, format string, loc, base *time.Location) (t time.Time, err er return } weekstart = time.Thursday - if weekday == 0 { - weekday = 2 - } + weekday = or(weekday, 2) case 'U': if week, j, err = parseNumber(source, j, 2, 0, 53, b); err != nil { return } weekstart = time.Sunday - if weekday == 0 { - weekday = 1 - } + weekday = or(weekday, 1) case 'W': if week, j, err = parseNumber(source, j, 2, 0, 53, b); err != nil { return } weekstart = time.Monday - if weekday == 0 { - weekday = 2 - } + weekday = or(weekday, 2) case 'e': if j < l && source[j] == ' ' { j++ @@ -162,11 +156,11 @@ func parse(source, format string, loc, base *time.Location) (t time.Time, err er } pm = ampm == 2 case 'M': - if min, j, err = parseNumber(source, j, 2, 0, 59, 'M'); err != nil { + if minute, j, err = parseNumber(source, j, 2, 0, 59, 'M'); err != nil { return } case 'S': - if sec, j, err = parseNumber(source, j, 2, 0, 60, 'S'); err != nil { + if second, j, err = parseNumber(source, j, 2, 0, 60, 'S'); err != nil { return } case 's': @@ -177,17 +171,17 @@ func parse(source, format string, loc, base *time.Location) (t time.Time, err er t = time.Unix(int64(unix), 0).In(time.UTC) var mon time.Month year, mon, day = t.Date() - hour, min, sec = t.Clock() + hour, minute, second = t.Clock() month = int(mon) case 'f': - usec, i := 0, j - if usec, j, err = parseNumber(source, j, 6, 0, 999999, 'f'); err != nil { + microsecond, i := 0, j + if microsecond, j, err = parseNumber(source, j, 6, 0, 999999, 'f'); err != nil { return } for i = j - i; i < 6; i++ { - usec *= 10 + microsecond *= 10 } - nsec = usec * 1000 + nanosecond = microsecond * 1000 case 'Z': i := j for ; j < l; j++ { @@ -219,7 +213,7 @@ func parse(source, format string, loc, base *time.Location) (t time.Time, err er sign = -1 fallthrough case '+': - hour, min, sec, i := 0, 0, 0, j + hour, minute, second, i := 0, 0, 0, j if hour, j, _ = parseNumber(source, j+1, 2, 0, 23, 'z'); j != i+3 { err = parseZFormatError(colons) return @@ -233,7 +227,7 @@ func parse(source, format string, loc, base *time.Location) (t time.Time, err er colons = 4 } i = j - if min, j, _ = parseNumber(source, j, 2, 0, 59, 'z'); j != i+2 { + if minute, j, _ = parseNumber(source, j, 2, 0, 59, 'z'); j != i+2 { if colons > 0 { err = parseZFormatError(colons & 3) return @@ -247,7 +241,7 @@ func parse(source, format string, loc, base *time.Location) (t time.Time, err er } } else { i = j - if sec, j, _ = parseNumber(source, j+1, 2, 0, 59, 'z'); j != i+3 { + if second, j, _ = parseNumber(source, j+1, 2, 0, 59, 'z'); j != i+3 { if colons == 2 { err = parseZFormatError(colons) return @@ -260,7 +254,7 @@ func parse(source, format string, loc, base *time.Location) (t time.Time, err er if hasZoneName { name, _ = locationZone(loc) } - loc, colons = time.FixedZone(name, sign*((hour*60+min)*60+sec)), 0 + loc, colons = time.FixedZone(name, sign*((hour*60+minute)*60+second)), 0 hasZoneOffset = true case 'Z': loc, colons, j = time.UTC, 0, j+1 @@ -350,7 +344,7 @@ func parse(source, format string, loc, base *time.Location) (t time.Time, err er err = errors.New(`use "%Y" to parse non-ISO year for "%j"`) return } - return time.Date(year, time.January, yday, hour, min, sec, nsec, loc), nil + return time.Date(year, time.January, yday, hour, minute, second, nanosecond, loc), nil } if weekstart >= time.Sunday { if weekstart == time.Thursday { @@ -365,12 +359,12 @@ func parse(source, format string, loc, base *time.Location) (t time.Time, err er if weekstart > time.Sunday && weekday == 1 { week++ } - t := time.Date(year, time.January, -int(weekstart), hour, min, sec, nsec, loc) + t := time.Date(year, time.January, -int(weekstart), hour, minute, second, nanosecond, loc) return t.AddDate(0, 0, week*7-int(t.Weekday())+weekday-1), nil } day = 1 } - return time.Date(year, time.Month(month), day, hour, min, sec, nsec, loc), nil + return time.Date(year, time.Month(month), day, hour, minute, second, nanosecond, loc), nil } func locationZone(loc *time.Location) (name string, offset int) { @@ -407,22 +401,17 @@ func (err expectedZAfterColonError) Error() string { return `expected 'z' after "%` + `::"`[2-err:] } -func parseNumber(source string, index, size, min, max int, format byte) (int, int, error) { +func parseNumber(source string, index, size, minimum, maximum int, format byte) (int, int, error) { var value int - if l := len(source); index+size > l { - size = l - } else { - size += index - } i := index - for ; i < size; i++ { + for size = min(i+size, len(source)); i < size; i++ { if b := source[i]; '0' <= b && b <= '9' { value = value*10 + int(b&0x0F) } else { break } } - if i == index || value < min || max < value { + if i == index || value < minimum || maximum < value { return 0, 0, parseFormatError(format) } return value, i, nil diff --git a/vendor/github.com/mattn/go-runewidth/benchstat.txt b/vendor/github.com/mattn/go-runewidth/benchstat.txt new file mode 100644 index 0000000000..a9efdbde37 --- /dev/null +++ b/vendor/github.com/mattn/go-runewidth/benchstat.txt @@ -0,0 +1,43 @@ +goos: darwin +goarch: arm64 +pkg: github.com/mattn/go-runewidth +cpu: Apple M2 + │ old.txt │ new.txt │ + │ sec/op │ sec/op vs base │ +String1WidthAll/regular-8 108.92m ± 0% 35.09m ± 3% -67.78% (p=0.002 n=6) +String1WidthAll/lut-8 93.97m ± 0% 18.70m ± 0% -80.10% (p=0.002 n=6) +String1Width768/regular-8 60.62µ ± 1% 11.54µ ± 0% -80.97% (p=0.002 n=6) +String1Width768/lut-8 60.66µ ± 1% 11.43µ ± 0% -81.16% (p=0.002 n=6) +String1WidthAllEastAsian/regular-8 115.13m ± 1% 40.79m ± 8% -64.57% (p=0.002 n=6) +String1WidthAllEastAsian/lut-8 93.65m ± 0% 18.70m ± 2% -80.03% (p=0.002 n=6) +String1Width768EastAsian/regular-8 75.32µ ± 0% 23.49µ ± 0% -68.82% (p=0.002 n=6) +String1Width768EastAsian/lut-8 60.76µ ± 0% 11.50µ ± 0% -81.07% (p=0.002 n=6) +geomean 2.562m 604.5µ -76.41% + + │ old.txt │ new.txt │ + │ B/op │ B/op vs base │ +String1WidthAll/regular-8 106.3Mi ± 0% 0.0Mi ± 0% -100.00% (p=0.002 n=6) +String1WidthAll/lut-8 106.3Mi ± 0% 0.0Mi ± 0% -100.00% (p=0.002 n=6) +String1Width768/regular-8 75.00Ki ± 0% 0.00Ki ± 0% -100.00% (p=0.002 n=6) +String1Width768/lut-8 75.00Ki ± 0% 0.00Ki ± 0% -100.00% (p=0.002 n=6) +String1WidthAllEastAsian/regular-8 106.3Mi ± 0% 0.0Mi ± 0% -100.00% (p=0.002 n=6) +String1WidthAllEastAsian/lut-8 106.3Mi ± 0% 0.0Mi ± 0% -100.00% (p=0.002 n=6) +String1Width768EastAsian/regular-8 75.00Ki ± 0% 0.00Ki ± 0% -100.00% (p=0.002 n=6) +String1Width768EastAsian/lut-8 75.00Ki ± 0% 0.00Ki ± 0% -100.00% (p=0.002 n=6) +geomean 2.790Mi ? ¹ ² +¹ summaries must be >0 to compute geomean +² ratios must be >0 to compute geomean + + │ old.txt │ new.txt │ + │ allocs/op │ allocs/op vs base │ +String1WidthAll/regular-8 3.342M ± 0% 0.000M ± 0% -100.00% (p=0.002 n=6) +String1WidthAll/lut-8 3.342M ± 0% 0.000M ± 0% -100.00% (p=0.002 n=6) +String1Width768/regular-8 2.304k ± 0% 0.000k ± 0% -100.00% (p=0.002 n=6) +String1Width768/lut-8 2.304k ± 0% 0.000k ± 0% -100.00% (p=0.002 n=6) +String1WidthAllEastAsian/regular-8 3.342M ± 0% 0.000M ± 0% -100.00% (p=0.002 n=6) +String1WidthAllEastAsian/lut-8 3.342M ± 0% 0.000M ± 0% -100.00% (p=0.002 n=6) +String1Width768EastAsian/regular-8 2.304k ± 0% 0.000k ± 0% -100.00% (p=0.002 n=6) +String1Width768EastAsian/lut-8 2.304k ± 0% 0.000k ± 0% -100.00% (p=0.002 n=6) +geomean 87.75k ? ¹ ² +¹ summaries must be >0 to compute geomean +² ratios must be >0 to compute geomean diff --git a/vendor/github.com/mattn/go-runewidth/new.txt b/vendor/github.com/mattn/go-runewidth/new.txt new file mode 100644 index 0000000000..8890712562 --- /dev/null +++ b/vendor/github.com/mattn/go-runewidth/new.txt @@ -0,0 +1,54 @@ +goos: darwin +goarch: arm64 +pkg: github.com/mattn/go-runewidth +cpu: Apple M2 +BenchmarkString1WidthAll/regular-8 33 35033923 ns/op 0 B/op 0 allocs/op +BenchmarkString1WidthAll/regular-8 33 34965112 ns/op 0 B/op 0 allocs/op +BenchmarkString1WidthAll/regular-8 33 36307234 ns/op 0 B/op 0 allocs/op +BenchmarkString1WidthAll/regular-8 33 35007705 ns/op 0 B/op 0 allocs/op +BenchmarkString1WidthAll/regular-8 33 35154182 ns/op 0 B/op 0 allocs/op +BenchmarkString1WidthAll/regular-8 34 35155400 ns/op 0 B/op 0 allocs/op +BenchmarkString1WidthAll/lut-8 63 18688500 ns/op 0 B/op 0 allocs/op +BenchmarkString1WidthAll/lut-8 63 18712474 ns/op 0 B/op 0 allocs/op +BenchmarkString1WidthAll/lut-8 63 18700211 ns/op 0 B/op 0 allocs/op +BenchmarkString1WidthAll/lut-8 62 18694179 ns/op 0 B/op 0 allocs/op +BenchmarkString1WidthAll/lut-8 62 18708392 ns/op 0 B/op 0 allocs/op +BenchmarkString1WidthAll/lut-8 63 18770608 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768/regular-8 104137 11526 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768/regular-8 103986 11540 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768/regular-8 104079 11552 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768/regular-8 103963 11530 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768/regular-8 103714 11538 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768/regular-8 104181 11537 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768/lut-8 105150 11420 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768/lut-8 104778 11423 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768/lut-8 105069 11422 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768/lut-8 105127 11475 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768/lut-8 104742 11433 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768/lut-8 105163 11432 ns/op 0 B/op 0 allocs/op +BenchmarkString1WidthAllEastAsian/regular-8 28 40723347 ns/op 0 B/op 0 allocs/op +BenchmarkString1WidthAllEastAsian/regular-8 28 40790299 ns/op 0 B/op 0 allocs/op +BenchmarkString1WidthAllEastAsian/regular-8 28 40801338 ns/op 0 B/op 0 allocs/op +BenchmarkString1WidthAllEastAsian/regular-8 28 40798216 ns/op 0 B/op 0 allocs/op +BenchmarkString1WidthAllEastAsian/regular-8 28 44135253 ns/op 0 B/op 0 allocs/op +BenchmarkString1WidthAllEastAsian/regular-8 28 40779546 ns/op 0 B/op 0 allocs/op +BenchmarkString1WidthAllEastAsian/lut-8 62 18694165 ns/op 0 B/op 0 allocs/op +BenchmarkString1WidthAllEastAsian/lut-8 62 18685047 ns/op 0 B/op 0 allocs/op +BenchmarkString1WidthAllEastAsian/lut-8 62 18689273 ns/op 0 B/op 0 allocs/op +BenchmarkString1WidthAllEastAsian/lut-8 62 19150346 ns/op 0 B/op 0 allocs/op +BenchmarkString1WidthAllEastAsian/lut-8 63 19126154 ns/op 0 B/op 0 allocs/op +BenchmarkString1WidthAllEastAsian/lut-8 62 18712619 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768EastAsian/regular-8 50775 23595 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768EastAsian/regular-8 51061 23563 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768EastAsian/regular-8 51057 23492 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768EastAsian/regular-8 51138 23445 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768EastAsian/regular-8 51195 23469 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768EastAsian/regular-8 51087 23482 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768EastAsian/lut-8 104559 11549 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768EastAsian/lut-8 104508 11483 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768EastAsian/lut-8 104296 11503 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768EastAsian/lut-8 104606 11485 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768EastAsian/lut-8 104588 11495 ns/op 0 B/op 0 allocs/op +BenchmarkString1Width768EastAsian/lut-8 104602 11518 ns/op 0 B/op 0 allocs/op +PASS +ok github.com/mattn/go-runewidth 64.455s diff --git a/vendor/github.com/mattn/go-runewidth/old.txt b/vendor/github.com/mattn/go-runewidth/old.txt new file mode 100644 index 0000000000..5b9ac16468 --- /dev/null +++ b/vendor/github.com/mattn/go-runewidth/old.txt @@ -0,0 +1,54 @@ +goos: darwin +goarch: arm64 +pkg: github.com/mattn/go-runewidth +cpu: Apple M2 +BenchmarkString1WidthAll/regular-8 10 108559258 ns/op 111412145 B/op 3342342 allocs/op +BenchmarkString1WidthAll/regular-8 10 108968079 ns/op 111412364 B/op 3342343 allocs/op +BenchmarkString1WidthAll/regular-8 10 108890338 ns/op 111412388 B/op 3342344 allocs/op +BenchmarkString1WidthAll/regular-8 10 108940704 ns/op 111412584 B/op 3342346 allocs/op +BenchmarkString1WidthAll/regular-8 10 108632796 ns/op 111412348 B/op 3342343 allocs/op +BenchmarkString1WidthAll/regular-8 10 109354546 ns/op 111412777 B/op 3342343 allocs/op +BenchmarkString1WidthAll/lut-8 12 93844406 ns/op 111412569 B/op 3342345 allocs/op +BenchmarkString1WidthAll/lut-8 12 93991080 ns/op 111412512 B/op 3342344 allocs/op +BenchmarkString1WidthAll/lut-8 12 93980632 ns/op 111412413 B/op 3342343 allocs/op +BenchmarkString1WidthAll/lut-8 12 94004083 ns/op 111412396 B/op 3342343 allocs/op +BenchmarkString1WidthAll/lut-8 12 93959795 ns/op 111412445 B/op 3342343 allocs/op +BenchmarkString1WidthAll/lut-8 12 93846198 ns/op 111412556 B/op 3342345 allocs/op +BenchmarkString1Width768/regular-8 19785 60696 ns/op 76801 B/op 2304 allocs/op +BenchmarkString1Width768/regular-8 19824 60520 ns/op 76801 B/op 2304 allocs/op +BenchmarkString1Width768/regular-8 19832 60547 ns/op 76801 B/op 2304 allocs/op +BenchmarkString1Width768/regular-8 19778 60543 ns/op 76800 B/op 2304 allocs/op +BenchmarkString1Width768/regular-8 19842 61142 ns/op 76801 B/op 2304 allocs/op +BenchmarkString1Width768/regular-8 19780 60696 ns/op 76801 B/op 2304 allocs/op +BenchmarkString1Width768/lut-8 19598 61161 ns/op 76801 B/op 2304 allocs/op +BenchmarkString1Width768/lut-8 19731 60707 ns/op 76801 B/op 2304 allocs/op +BenchmarkString1Width768/lut-8 19738 60626 ns/op 76801 B/op 2304 allocs/op +BenchmarkString1Width768/lut-8 19764 60670 ns/op 76801 B/op 2304 allocs/op +BenchmarkString1Width768/lut-8 19797 60642 ns/op 76801 B/op 2304 allocs/op +BenchmarkString1Width768/lut-8 19738 60608 ns/op 76800 B/op 2304 allocs/op +BenchmarkString1WidthAllEastAsian/regular-8 9 115080431 ns/op 111412458 B/op 3342345 allocs/op +BenchmarkString1WidthAllEastAsian/regular-8 9 114908880 ns/op 111412476 B/op 3342345 allocs/op +BenchmarkString1WidthAllEastAsian/regular-8 9 115077134 ns/op 111412540 B/op 3342345 allocs/op +BenchmarkString1WidthAllEastAsian/regular-8 9 115175292 ns/op 111412467 B/op 3342345 allocs/op +BenchmarkString1WidthAllEastAsian/regular-8 9 115792653 ns/op 111412362 B/op 3342344 allocs/op +BenchmarkString1WidthAllEastAsian/regular-8 9 115255417 ns/op 111412572 B/op 3342346 allocs/op +BenchmarkString1WidthAllEastAsian/lut-8 12 93761542 ns/op 111412538 B/op 3342345 allocs/op +BenchmarkString1WidthAllEastAsian/lut-8 12 94089990 ns/op 111412440 B/op 3342343 allocs/op +BenchmarkString1WidthAllEastAsian/lut-8 12 93721410 ns/op 111412514 B/op 3342344 allocs/op +BenchmarkString1WidthAllEastAsian/lut-8 12 93572951 ns/op 111412329 B/op 3342342 allocs/op +BenchmarkString1WidthAllEastAsian/lut-8 12 93536052 ns/op 111412206 B/op 3342341 allocs/op +BenchmarkString1WidthAllEastAsian/lut-8 12 93532365 ns/op 111412412 B/op 3342343 allocs/op +BenchmarkString1Width768EastAsian/regular-8 15904 75401 ns/op 76800 B/op 2304 allocs/op +BenchmarkString1Width768EastAsian/regular-8 15932 75449 ns/op 76801 B/op 2304 allocs/op +BenchmarkString1Width768EastAsian/regular-8 15944 75181 ns/op 76801 B/op 2304 allocs/op +BenchmarkString1Width768EastAsian/regular-8 15963 75311 ns/op 76801 B/op 2304 allocs/op +BenchmarkString1Width768EastAsian/regular-8 15879 75292 ns/op 76801 B/op 2304 allocs/op +BenchmarkString1Width768EastAsian/regular-8 15955 75334 ns/op 76801 B/op 2304 allocs/op +BenchmarkString1Width768EastAsian/lut-8 19692 60692 ns/op 76801 B/op 2304 allocs/op +BenchmarkString1Width768EastAsian/lut-8 19712 60699 ns/op 76801 B/op 2304 allocs/op +BenchmarkString1Width768EastAsian/lut-8 19741 60819 ns/op 76801 B/op 2304 allocs/op +BenchmarkString1Width768EastAsian/lut-8 19771 60653 ns/op 76801 B/op 2304 allocs/op +BenchmarkString1Width768EastAsian/lut-8 19737 61027 ns/op 76801 B/op 2304 allocs/op +BenchmarkString1Width768EastAsian/lut-8 19657 60820 ns/op 76801 B/op 2304 allocs/op +PASS +ok github.com/mattn/go-runewidth 76.165s diff --git a/vendor/github.com/mattn/go-runewidth/runewidth.go b/vendor/github.com/mattn/go-runewidth/runewidth.go index 7dfbb3be91..0edabac394 100644 --- a/vendor/github.com/mattn/go-runewidth/runewidth.go +++ b/vendor/github.com/mattn/go-runewidth/runewidth.go @@ -4,7 +4,7 @@ import ( "os" "strings" - "github.com/rivo/uniseg" + "github.com/clipperhouse/uax29/v2/graphemes" ) //go:generate go run script/generate.go @@ -64,6 +64,9 @@ func inTable(r rune, t table) bool { if r < t[0].first { return false } + if r > t[len(t)-1].last { + return false + } bot := 0 top := len(t) - 1 @@ -175,10 +178,10 @@ func (c *Condition) CreateLUT() { // StringWidth return width as you can see func (c *Condition) StringWidth(s string) (width int) { - g := uniseg.NewGraphemes(s) + g := graphemes.FromString(s) for g.Next() { var chWidth int - for _, r := range g.Runes() { + for _, r := range g.Value() { chWidth = c.RuneWidth(r) if chWidth > 0 { break // Our best guess at this point is to use the width of the first non-zero-width rune. @@ -197,17 +200,17 @@ func (c *Condition) Truncate(s string, w int, tail string) string { w -= c.StringWidth(tail) var width int pos := len(s) - g := uniseg.NewGraphemes(s) + g := graphemes.FromString(s) for g.Next() { var chWidth int - for _, r := range g.Runes() { + for _, r := range g.Value() { chWidth = c.RuneWidth(r) if chWidth > 0 { break // See StringWidth() for details. } } if width+chWidth > w { - pos, _ = g.Positions() + pos = g.Start() break } width += chWidth @@ -224,10 +227,10 @@ func (c *Condition) TruncateLeft(s string, w int, prefix string) string { var width int pos := len(s) - g := uniseg.NewGraphemes(s) + g := graphemes.FromString(s) for g.Next() { var chWidth int - for _, r := range g.Runes() { + for _, r := range g.Value() { chWidth = c.RuneWidth(r) if chWidth > 0 { break // See StringWidth() for details. @@ -236,10 +239,10 @@ func (c *Condition) TruncateLeft(s string, w int, prefix string) string { if width+chWidth > w { if width < w { - _, pos = g.Positions() + pos = g.End() prefix += strings.Repeat(" ", width+chWidth-w) } else { - pos, _ = g.Positions() + pos = g.Start() } break diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_windows.go b/vendor/github.com/mattn/go-runewidth/runewidth_windows.go index 5f987a310f..951500a24d 100644 --- a/vendor/github.com/mattn/go-runewidth/runewidth_windows.go +++ b/vendor/github.com/mattn/go-runewidth/runewidth_windows.go @@ -4,6 +4,7 @@ package runewidth import ( + "os" "syscall" ) @@ -14,6 +15,11 @@ var ( // IsEastAsian return true if the current locale is CJK func IsEastAsian() bool { + if os.Getenv("WT_SESSION") != "" { + // Windows Terminal always not use East Asian Ambiguous Width(s). + return false + } + r1, _, _ := procGetConsoleOutputCP.Call() if r1 == 0 { return false diff --git a/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/run.go b/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/run.go index 30d8096cd6..48c69a1d83 100644 --- a/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/run.go +++ b/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/run.go @@ -9,6 +9,7 @@ import ( "path/filepath" "regexp" "strings" + "sync/atomic" "syscall" "time" @@ -159,12 +160,15 @@ func runSerial(suite TestSuite, ginkgoConfig types.SuiteConfig, reporterConfig t func runParallel(suite TestSuite, ginkgoConfig types.SuiteConfig, reporterConfig types.ReporterConfig, cliConfig types.CLIConfig, goFlagsConfig types.GoFlagsConfig, additionalArgs []string) TestSuite { type procResult struct { + proc int + exitResult string passed bool hasProgrammaticFocus bool } numProcs := cliConfig.ComputedProcs() procOutput := make([]*bytes.Buffer, numProcs) + procExitResult := make([]string, numProcs) coverProfiles := []string{} blockProfiles := []string{} @@ -224,16 +228,20 @@ func runParallel(suite TestSuite, ginkgoConfig types.SuiteConfig, reporterConfig args = append(args, additionalArgs...) cmd, buf := buildAndStartCommand(suite, args, false) + var exited atomic.Bool procOutput[proc-1] = buf - server.RegisterAlive(proc, func() bool { return cmd.ProcessState == nil || !cmd.ProcessState.Exited() }) + server.RegisterAlive(proc, func() bool { return !exited.Load() }) go func() { cmd.Wait() exitStatus := cmd.ProcessState.Sys().(syscall.WaitStatus).ExitStatus() procResults <- procResult{ + proc: proc, + exitResult: cmd.ProcessState.String(), passed: (exitStatus == 0) || (exitStatus == types.GINKGO_FOCUS_EXIT_CODE), hasProgrammaticFocus: exitStatus == types.GINKGO_FOCUS_EXIT_CODE, } + exited.Store(true) }() } @@ -242,6 +250,7 @@ func runParallel(suite TestSuite, ginkgoConfig types.SuiteConfig, reporterConfig result := <-procResults passed = passed && result.passed suite.HasProgrammaticFocus = suite.HasProgrammaticFocus || result.hasProgrammaticFocus + procExitResult[result.proc-1] = result.exitResult } if passed { suite.State = TestSuiteStatePassed @@ -261,6 +270,8 @@ func runParallel(suite TestSuite, ginkgoConfig types.SuiteConfig, reporterConfig for proc := 1; proc <= cliConfig.ComputedProcs(); proc++ { fmt.Fprintf(formatter.ColorableStdErr, formatter.F("{{bold}}Output from proc %d:{{/}}\n", proc)) fmt.Fprintln(os.Stderr, formatter.Fi(1, "%s", procOutput[proc-1].String())) + fmt.Fprintf(formatter.ColorableStdErr, formatter.F("{{bold}}Exit result of proc %d:{{/}}\n", proc)) + fmt.Fprintln(os.Stderr, formatter.Fi(1, "%s\n", procExitResult[proc-1])) } fmt.Fprintf(os.Stderr, "** End **") } diff --git a/vendor/github.com/onsi/ginkgo/v2/types/version.go b/vendor/github.com/onsi/ginkgo/v2/types/version.go index b9c1ea9856..2a50192871 100644 --- a/vendor/github.com/onsi/ginkgo/v2/types/version.go +++ b/vendor/github.com/onsi/ginkgo/v2/types/version.go @@ -1,3 +1,3 @@ package types -const VERSION = "2.27.2" +const VERSION = "2.27.3" 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 b957a9badb..1e81a97169 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 @@ -27,6 +27,10 @@ spec: jsonPath: .spec.version name: Version type: string + - description: The release of this version of the CSV + jsonPath: .spec.release + name: Release + type: string - description: The name of a CSV that this one replaces jsonPath: .spec.replaces name: Replaces @@ -8988,6 +8992,30 @@ spec: type: string name: type: string + release: + description: |- + release specifies the packaging version of the operator, defaulting to empty + release is optional + + A ClusterServiceVersion's release field is used to distinguish between different builds of the same operator version + This is useful for operators that need to make changes to the CSV which don't affect their functionality, + for example: + - to fix a typo in their description + - to add/amend annotations or labels + - to amend examples or documentation + - to produce different builds for different environments + + It is up to operator authors to determine the semantics of release versions they use + for their operator. All release versions must conform to the semver prerelease format + (dot-separated identifiers containing only alphanumerics and hyphens) and are limited + to a maximum length of 20 characters. + type: string + maxLength: 20 + x-kubernetes-validations: + - rule: self.matches('^[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*$') + message: release version must be composed of dot-separated identifiers containing only alphanumerics and hyphens + - rule: '!self.split(''.'').exists(x, x.matches(''^0[0-9]+$''))' + message: numeric identifiers in release version must not have leading zeros replaces: description: The name of a CSV this one replaces. Should match the `metadata.Name` field of the old CSV. type: string 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 06bb23be58..940c0c799b 100644 --- a/vendor/github.com/operator-framework/api/crds/zz_defs.go +++ b/vendor/github.com/operator-framework/api/crds/zz_defs.go @@ -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\xfd\xeb\x53\x33\x32\xd1\x73\xaa\x89\x9e\x33\x45\x04\x07\x22\xa1\xc8\x68\x02\xea\x11\x82\x36\x3c\x62\x29\xba\x59\xff\x62\x0b\x49\xcd\x2e\x35\xd5\xa5\x1a\x17\x73\xaa\xd6\xa7\xf8\x7a\xe5\xd3\x0d\xdd\xd9\x07\x17\xaf\x69\x56\xcc\xe9\x6b\xf7\xa1\x4a\xe6\x90\xd3\x7a\x0f\x88\x02\xf8\xc5\xf5\xe5\x0f\xbf\xbb\x5d\xf9\x82\xb4\x67\x67\xe3\xee\x27\x4c\x99\xa9\x42\x46\x41\x3c\xa7\xc0\xb5\x5b\x16\x40\xfe\xb1\xf1\x37\xb7\x05\x24\xff\x18\xaf\x51\x2e\x26\xff\x05\x89\x6e\x7c\x2c\xe1\xbf\x4b\x26\x21\x6d\x52\x64\x26\xc8\x73\x9f\x95\x8f\xcd\xfc\x37\x3e\x2a\xa4\x61\x0b\xba\x71\xe4\x6d\x6b\xb0\xbf\xd6\xe7\x2b\x6f\xfb\xf3\x68\xe5\x5b\x42\xcc\x24\xb9\xb7\x4e\x0d\x2f\x04\x85\x3b\xd4\xed\x41\x48\xdd\xcc\xda\x9d\xcb\x94\xd9\x2e\x12\x14\x70\xcb\x1d\x71\x53\x71\xf7\x96\xe3\xb5\xce\xcd\x14\x81\x54\x86\x45\x94\x59\x6a\x98\xe8\x02\xa4\x26\x12\x12\x31\xe3\xec\x9f\x55\xef\x8a\x68\x81\xc3\x66\x54\x83\xd2\x04\xcf\x35\xa7\x19\x59\xd0\xac\x84\x33\x42\x79\xba\xd6\x77\x4e\x97\x44\x82\x19\x97\x94\xbc\xd1\x23\xfe\x44\xad\xd3\xf2\x41\x48\x20\x8c\x4f\xc5\x1b\x32\xd7\xba\x50\x6f\xce\xcf\x67\x4c\xfb\xeb\x21\x11\x79\x5e\x72\xa6\x97\xe7\xc8\xe9\xd9\xa4\x34\xac\xf7\x3c\x85\x05\x64\xe7\x8a\xcd\x46\x54\x26\x73\xa6\x21\xd1\xa5\x84\x73\x5a\xb0\x11\xbe\x0c\xc7\x2b\x62\x9c\xa7\xbf\x96\x6e\x9b\xa8\x95\x81\x37\x9e\x07\xe2\x39\xf4\x9e\x8b\x65\x38\xb6\xdd\x9c\xb6\x43\xfb\xb2\xf5\x9a\x98\x8f\xcc\x34\xde\xbc\xbf\xbd\x23\x9e\x22\x77\xd4\x71\x89\xea\x47\x37\xcc\x90\x5f\x2d\x33\xb3\x8c\x4f\x41\xda\x5f\x4e\xa5\xc8\xb1\x57\xe0\x69\x21\x18\xd7\xf8\x47\x92\x31\xe0\x9a\xa8\x72\x92\x33\xad\x70\x5b\x83\xd2\x66\x21\xd7\x3b\x7e\x8b\xd7\x29\x99\x00\x29\x8b\x94\x6a\x48\xd7\x1f\xb9\xe4\xe4\x2d\xcd\x21\x7b\x4b\x15\xbc\xf8\xda\x99\x35\x52\x23\xb3\x20\x3b\xaf\x5e\x53\x58\x58\xff\xc1\xda\xa9\x27\xc4\xdf\xee\xfb\x2c\xf7\x56\x46\x43\x52\x48\x32\x2a\xad\x80\x42\x34\x64\x19\xf9\xf8\xfd\x07\x32\x17\x0f\xe6\x20\x31\xae\x34\xcd\x32\x3c\x98\x4e\x88\x58\xeb\x1a\xef\x80\x84\x72\x92\x53\x4e\x67\x40\x68\x51\x28\x32\x15\x92\x50\x32\x63\x0b\xe0\x9e\x01\xac\xae\xc5\xd6\xf7\xdb\xc6\xd9\x88\xbd\x91\x36\xde\xaa\xfe\x5b\x47\xf0\xca\x37\xdb\x78\x9d\x69\x6b\xf2\xd9\x7e\x13\x6b\xda\x45\xdd\x05\x1e\x29\x4e\x4a\xae\xb4\x2c\x71\x97\xa4\xe4\x1e\x96\xee\x74\xe5\xb4\x20\x4a\x0b\xf3\xe1\x03\xd3\x73\x42\x9b\x27\x8b\x6a\x3c\x2e\x93\xf5\xd7\x32\x4d\x81\x26\x93\x25\x31\xd2\x28\xb2\x33\x2d\x44\x86\xbc\x0e\xfb\x33\x6c\x8d\x48\xd0\x92\xc1\x02\x08\x95\x13\xa6\x25\x95\xcb\x6a\x6f\xad\x9f\x83\x47\xe7\x1f\xe7\xa5\x21\x1c\x6d\x9f\x3d\xf2\xd8\xce\x26\xf6\x3a\x71\xb2\x59\x5a\xc9\xc7\xdd\x27\xfa\xfa\xd2\xed\xe0\x5a\xd8\x56\x6e\x07\x83\x22\x66\xa7\x3a\xb1\xa8\x92\xda\x91\x00\xb7\x35\x53\x22\x64\xb5\xb7\xc8\x64\xb9\x71\x8c\xc6\x56\x27\x13\x30\x6c\x50\x52\x6e\xa6\x7e\xe3\x11\xea\x30\xb1\x8f\x6d\x46\xd3\xc4\x03\xdf\xb4\xf3\x9b\x7d\x53\x29\xe9\x66\xea\x09\x61\x1a\xf2\x2d\x3d\x93\xd5\x69\x6e\xce\x67\xf5\xb1\x21\x70\xc1\x52\x30\x13\xab\x29\xb3\xbb\xcc\xf0\x04\x3a\x11\xa5\xb6\xf3\xe9\x1e\x49\xc9\x82\x51\x42\x67\x33\x09\x33\xdc\xff\x5b\x87\x7d\x62\x4e\x6c\xdb\x7e\xec\xeb\x36\xb2\x4a\xcd\xa3\x4f\x18\xf6\xfb\xe8\x03\x7c\x13\xf3\x68\x3e\xb0\x2e\x37\xb7\xdb\x53\x6b\x68\x1b\x4d\xcc\x9c\xf8\xa9\x15\xf2\xd1\x87\x77\x59\x5b\xdb\x9e\x58\x61\xdb\xda\xeb\xbc\x42\x88\xfb\x76\x62\xce\x4c\x7d\x01\x18\xce\x81\x0f\xd6\x2c\x7d\x02\xa4\x00\x39\x15\x32\x37\x87\x87\x13\x4a\x12\x2b\xca\x56\x7c\x0b\x19\x2e\x4f\x1e\x9b\x4e\xb2\xeb\xfa\xdb\xb6\xcb\x2e\xb0\x6d\x44\x0a\xaa\xe7\x4f\x3c\xb6\xdb\x52\xd9\xd6\x9c\xb4\x27\x1f\x7e\x82\xf1\xad\xf5\x5d\xdf\x5b\xd1\xfb\x36\xd3\x10\xbd\x53\xbc\xb2\x76\xe9\x75\x17\xce\xbd\xda\x6e\xe8\xc3\x07\x50\xca\xc8\x0b\x28\x84\x4a\xfa\x40\x80\x27\xc2\xf0\x94\xff\xe7\xf6\xe3\x95\x1d\x7d\x13\x77\x5d\x6f\x97\x9a\xb0\xbc\xc8\x20\x37\xb2\x28\xf9\xf1\x03\x95\x6a\x4e\x33\x90\x3f\xe1\xad\xf8\xe3\x9f\x79\xde\xfe\x24\xa1\xdb\x0f\x76\xb3\x19\x21\x53\x41\x6a\xd8\x5f\x0a\x19\x5d\x5a\xc2\x52\x48\x44\x6a\xae\x05\x21\x49\x61\x94\x85\xbc\x28\x35\x10\x6a\xbf\xc5\x77\x60\x7c\xb6\x0b\xe5\x7b\xad\x06\x31\x22\x55\x4e\xf5\x1b\x32\x59\xea\xa7\x4e\x1b\x21\x9f\x46\xe9\xae\x6c\xa7\x49\xcc\xd3\xcc\xc7\xb6\x9d\x58\x50\xb3\xe3\x27\xdf\xd2\xc8\xdb\x94\x71\x90\xd7\x42\xea\x5d\xf8\xa4\x51\xec\x66\xb0\x2e\x8e\x36\x9b\x9f\x32\xc6\xf5\xef\x7e\xfb\xc8\x93\x29\x14\x99\x58\x9a\xfd\xf3\xf4\xf1\xdc\xf1\x7d\x76\x66\x25\xbb\xf6\xb7\x2b\xfb\xd8\xb1\x3f\x6b\x1a\x8c\xd1\xd3\x26\xed\xb3\x53\x47\x3c\xd6\xbb\x55\x0a\xf4\xc1\xee\xdb\xeb\x4b\x6f\xeb\xb9\x81\x29\x48\xe0\x89\xe7\x73\xd5\x9f\x5a\x10\x4a\xbe\x2b\x27\x20\x39\x68\x50\x0d\x4d\x60\x59\x80\x37\xac\x81\xfd\x81\x04\x49\x4a\xcd\x32\xf6\xcf\x4d\xe6\x88\x4d\x6f\x15\xfd\xa6\x7d\x42\xa6\xf2\x8f\x3d\x21\x59\xf9\xc7\x9e\x92\xaf\x6c\xdb\xe7\xea\x7e\x7a\x17\xda\xd6\x5a\x27\x34\x82\x38\x8d\xa1\x5a\x99\xb4\xbd\x14\xd1\x39\xf9\xd3\xdb\x7c\x03\xa5\xd7\x68\x3c\x6f\x19\x9f\xb7\x11\x4c\x4e\xb6\xf9\x25\xc6\x46\xe1\x1f\xa3\x49\xfc\xc7\x9f\xc6\xb6\xcb\xd3\x31\x79\x9f\x17\x7a\xe9\xcd\x40\xec\x89\xce\x99\x22\x5c\xe8\x75\x41\x30\xfa\x34\x2d\x36\x1b\x21\x9f\x9c\xa9\x8b\xeb\x4b\x6f\xde\x7e\xc1\xa5\x55\x05\x24\x3d\x10\xf4\x6f\x5b\x64\xb4\xc4\xfc\x29\x83\x2c\x25\xcc\xc8\xf0\x86\x58\x32\xc9\x44\x72\xef\x2c\xf9\x37\xef\x88\x12\x96\xe7\x18\x45\xcf\x48\xfe\x89\xe0\xaa\xcc\x81\xb0\xa7\x98\xc8\x20\xd9\x0f\x92\x7d\xb3\x0d\x92\xfd\x20\xd9\xb7\x9a\x75\xd2\xf5\x81\x39\xae\x10\xb2\x95\x3d\xe2\x73\x03\x83\x7c\xac\x0d\x0c\x12\xdb\xc0\x20\x07\x06\xf9\x54\xc7\x4f\xbe\xe5\x4e\x92\xee\x93\x7d\x3d\xc5\x3b\x06\xcf\xc1\xe0\x39\x18\x3c\x07\xae\x0d\xd7\xa7\x6b\xc3\xf5\x39\x5c\x9f\xed\xf6\xd9\x5d\x9f\x83\xe7\x60\xf0\x1c\x0c\x9e\x83\xc1\x73\xd0\x6c\x83\xe7\x60\xf0\x1c\x0c\x9e\x83\xc1\x73\xb0\xa5\x0d\x92\x7d\xc7\x4e\x07\xc9\x7e\x90\xec\xb7\xb5\xc1\x73\x30\x78\x0e\x06\x06\x39\x30\xc8\x81\x41\x6e\x69\x7d\xf4\x1c\x24\x19\x50\xbe\x59\x9d\x5f\x49\x6e\xc4\xe7\x50\x00\x64\x53\xe6\x52\xfb\xdc\xaf\xc9\x04\xe6\x74\xc1\x44\x29\xc9\xc3\x1c\xb8\xcf\x4b\x25\x33\xd0\xca\xec\x02\xd0\xb0\x49\x03\x7c\x82\xbd\x3d\xce\xd2\x46\x04\x38\x9d\x64\x1b\x3b\x7e\x8a\x7b\xb9\x5f\x3e\xee\x29\x99\x08\x61\xde\x6e\x7d\xc6\x50\x7b\xf1\xda\x40\x84\xa4\x96\x6d\x3a\xd7\xe6\xc4\x96\xb7\x37\xef\x9e\x35\x9d\x65\x63\x27\x97\xd5\xd8\x04\x5d\x38\x98\xf6\x67\xae\x3c\xf3\xe9\xc7\x07\x0e\x29\x66\x81\x9f\x11\xa6\xcd\x03\x86\xb1\xb0\x84\xe9\x6c\x59\x91\xf7\x79\xe7\xc9\xbc\xbd\x79\xb7\xbb\x9b\xcb\xaf\xd2\xd6\xae\x23\x7a\xb4\x06\x7f\xd5\xe0\xaf\xaa\xda\x20\xb4\x75\xec\x74\x10\xda\x06\xa1\x6d\x5b\x8b\x2f\xb4\xf5\xdd\xbf\x33\x78\x65\xc8\xe0\x95\xf1\x8f\x0d\x5e\x99\x27\x1f\x1f\xbc\x32\x83\x57\x66\xf0\xca\x3c\xde\x06\xf9\xd5\xb5\x41\x7e\x1d\xe4\xd7\x76\xfb\xec\xe4\xd7\xc1\x2b\x33\x30\xc8\x81\x41\xd6\x6d\x60\x90\x03\x83\x6c\xb5\xcf\x31\x9f\x63\xb0\x70\x0f\x16\xee\xc1\xc2\x3d\x5c\x80\xc3\x05\x38\x5c\x80\x4f\x75\x3c\x58\xb8\x7d\x1b\x2c\xdc\x83\x85\xbb\xd5\x06\x0b\xf7\x60\xe1\x1e\x2c\xdc\x83\x85\x7b\x4b\x1b\xe4\xd7\x8e\x9d\x0e\xf2\xeb\x20\xbf\x6e\x6b\x83\x85\x7b\xb0\x70\x0f\x0c\x72\x60\x90\x03\x83\xdc\xd2\xfa\x68\xe1\x7e\xe2\xf0\xee\xb2\x4b\x9b\xf6\x6a\x27\x36\xfb\x48\xf7\x31\x79\x4b\x39\x61\x3c\xc9\xca\x14\xf0\x9b\x29\x50\x5d\x4a\x50\x67\x24\x63\x39\xf3\xc5\x3a\x84\x34\x9b\x66\x94\x50\x05\xca\xf5\xb1\x71\xa8\xaa\xdf\x0d\xdf\x3e\xfe\x9a\x8f\xf3\x91\x47\x8b\x8b\x55\x61\xfb\x8c\xfb\x7e\xdc\xb6\xda\x9b\x0c\x96\xec\x30\xcd\x66\x7c\xf3\x20\xd6\x6e\xb1\x85\x7e\x9e\x7c\xed\x6d\x5b\xf0\x91\x2d\xf7\xe4\xe5\xf2\xd4\x95\x32\x22\x13\xaa\xe0\x0f\xff\xb6\x56\xe2\xaa\xf9\x48\x0e\x29\xa3\x66\xa8\x8d\x4f\x3c\x7d\xcd\xd4\x43\x6c\xdf\xe4\x3b\x1c\x96\x8a\x8c\x8e\xbd\xb8\x72\x36\x5d\x8f\x88\xd9\x77\xe9\xa5\xed\xe3\x56\x4b\xaa\x61\xb6\x6c\xd4\x6d\xc2\x6d\x56\x0b\x0d\x7c\x4b\x09\x33\xaf\x81\x6e\x1c\xe2\x61\x0e\xd2\x1e\x31\x5f\x2b\x48\xf9\x81\x98\xaa\xd2\x85\xba\xe4\x7f\x3c\x95\xff\xe3\xc7\xd9\xf0\xf5\x53\xeb\xbb\xa9\x82\x92\x6f\xbb\x5e\x90\x7e\x3e\xdf\x59\x0f\xd9\xbb\x0a\x08\x66\x75\x82\x0b\x2a\xcd\xc5\xe4\x3d\x69\x28\x9e\xd5\x4f\x6f\xed\x7f\x65\xd9\xb6\xdd\x51\x3b\xc8\x6a\x4f\xcb\x68\xa3\x06\x8e\xcd\x36\xaf\xde\x2e\xa2\x99\x2b\xc6\x78\x0d\x32\x67\x4a\x6d\x4b\x8a\x6a\x93\xfe\xd4\x2d\xb6\xc3\xed\xb5\x22\x33\xfb\x75\xf1\x6f\xd4\x20\xa7\x12\xa0\xad\x95\x65\x42\x13\x22\xcb\xcc\x88\xd3\x3c\x25\xae\x4e\x11\xa1\x49\x22\x4a\xae\x09\x07\x48\x31\xb1\x6a\xe3\xf6\xde\xe1\xee\xdb\x41\x82\xde\x55\x7e\x1e\x59\x3a\x9f\x7c\xca\xbd\xc3\x85\x7d\x85\x8d\x45\xb2\x9a\x6d\x77\x79\x1b\x87\x7f\x5a\x88\xd8\x47\x32\xd9\x59\x2e\xe9\x22\xb3\x5e\x8b\x8c\x25\xcb\x9b\x32\x03\x32\x17\x59\xaa\xb0\xe6\x9b\xb9\x3c\x2b\x9f\x68\x53\x97\x2a\xf0\x69\x7c\xc9\x33\x32\x29\x35\x49\x05\x58\xb3\xa1\x43\x97\x6a\xfe\x7c\xa7\xf1\xad\xa7\xfc\x61\x6e\x8b\x11\x9a\x8e\x09\x2d\x8a\x0c\x33\x27\x85\x11\x3c\x1e\xe6\x2c\x99\xdb\x1a\xac\x05\x4d\x60\xd3\x63\xbb\xcb\xa5\x3b\xe9\x6a\x64\x2f\x7d\x8d\x78\xb3\xf7\xe4\xa9\x5d\x47\xf6\x54\xdc\x88\x2d\x0b\xf6\x8d\x14\x65\xb1\xe3\xe3\xdd\xf6\x00\xb1\x25\xc3\xec\x40\xe6\x3a\xd2\x2b\x22\x96\xff\xd2\x39\xc9\xed\x52\x2b\x67\x81\x75\x1e\x99\x31\xa6\x3f\xe6\x65\xa6\x59\x91\xe1\x4f\x2c\x02\x96\x22\x54\x42\x7d\xc1\x9d\x11\xca\x97\xde\xe7\xee\x4a\x18\x42\x4a\xe8\xcc\xf4\xa8\xb1\x3c\xaa\x98\xee\x4c\xb5\xad\x91\x58\xe6\x46\xfe\x6a\xd8\x80\x15\xaa\xfb\x7c\x59\x53\x41\x1e\x58\x96\x19\xe5\x87\x66\x99\x78\x80\x74\x4c\x8e\x8e\x56\x2f\xa0\x44\xc8\x06\xdd\xc8\xea\x8e\xfe\xb5\xf5\x94\xe1\x6b\xf5\x8b\xed\xa6\xc8\xed\xab\x85\x90\xfd\x34\x11\xb2\xbf\xce\x45\x50\x95\xba\xaf\x1c\x54\xa3\x8c\x29\x3d\x72\x54\x6a\x91\xb3\x64\xa7\x4e\xb8\xe0\xde\x11\xf1\xe7\x9b\xef\x9f\x7d\x83\x5e\xb5\x87\x73\x35\x39\x41\x9b\x3d\x5a\x50\xa9\x19\xcd\x48\x29\x33\x65\xf7\x28\x35\x0a\x8b\xf4\x55\x50\xe7\x14\xe3\x3c\x12\x50\xc8\x2e\x08\xf9\x57\xbb\x2b\xdd\x66\xb0\xac\x4c\xf0\x6c\x49\xa8\xdd\x0a\xd3\x32\xcb\xce\xc8\x94\x71\x6a\x2e\x32\x28\x7c\x0e\xef\x0e\xa6\x99\xba\xdd\x32\x9e\x80\x99\xa6\x51\xe5\x9b\x40\xca\xcd\xc8\x86\x65\x56\x3c\x2d\x3d\x73\x65\x3f\xad\xa5\x4a\x39\x52\x0c\x7f\x4b\xe8\x24\x03\xd4\x34\x9c\xcc\x79\x23\x32\x74\x29\x56\x7e\x0f\xac\x15\x4a\x9b\x5f\xff\x2f\xc6\x77\xd5\xd6\x6d\xbb\xc1\xab\x3d\xa1\x9c\x00\xd3\x73\x90\x38\xf4\xd2\xf0\x5f\xb3\xd9\xeb\x43\x75\xa2\xca\x64\x6e\xa6\xe8\xa8\x10\xa9\x3a\x32\xdc\xf9\x48\x41\x22\x41\xab\xa3\x53\xf3\xd7\xea\xbb\xe2\x7c\x35\x7f\x77\x4e\x0b\x76\x74\x7a\x46\x70\xc2\xb1\x40\xa9\xd0\xf3\x5f\xf8\x39\xf2\x13\xd6\xaa\xe7\xfd\x54\x6b\x9d\xa2\x9b\x66\x0f\xae\xb2\xa6\x28\x6c\x51\x4a\x73\x7f\x6a\xc0\xb4\x73\x73\x52\x70\xcf\x35\x7c\xd0\x2b\x17\x29\x21\x17\x9c\x80\xf5\x1a\x82\x26\x39\x50\xee\x9e\x86\x05\xc8\xa5\x9e\xa3\x23\x51\x55\x5c\x74\x58\xb9\x1d\xa2\x11\xea\xb6\x71\xd5\x1c\x2b\xf3\x2b\x54\x1f\x37\x5b\xfc\x79\x75\x85\x8e\xff\xf5\x78\xf5\x4a\xaa\xef\xe0\x5f\xf6\x7a\xa0\x10\xd6\x69\x2d\x7e\x30\xbf\x6c\xaf\x83\xfd\xc8\x5e\x26\x15\x3b\xfc\xfe\x7b\x5b\xec\xd9\x4d\xf8\x77\x8c\xa7\xaa\x02\x56\x4d\xed\x2d\xe1\x16\x6d\xe3\x4a\x21\x85\xbf\xd8\x55\x5a\x57\xba\x76\x55\x94\x9e\xa0\xb1\xa1\x95\xf7\x41\x91\xc6\x7a\xd1\x2d\x29\xd9\xb0\xdd\x33\xeb\x9d\x37\x62\x65\x46\x27\x90\x29\x67\x40\x84\x06\xf9\xe4\xe2\xfb\x0f\x55\xe9\x76\x09\xf4\x09\xa3\xf8\x33\xa8\xcf\x3b\x84\xf9\xac\x95\xc8\x5f\x6f\xbb\xab\x39\x38\x15\xfb\x39\xb1\xc8\x2d\x68\x7b\x56\x73\x5a\x98\xa3\x6a\xfb\xb0\xce\x95\x15\xc7\xc9\xf7\x38\xd3\x4f\x9f\xb8\xbd\xd4\xc3\xdd\x4b\x3e\x6f\x1a\x64\xa7\xf3\xb6\x5b\x28\xd1\x1e\x1d\x3e\x66\xca\xab\x5b\x6b\x9a\x57\x36\xb4\xd3\x0b\x9d\x26\x97\xd0\xa6\x43\x21\x05\x65\xc1\x75\x2c\xc0\x91\xf4\x9f\xd7\x5d\x44\x5e\x82\x7d\xf4\xf3\x11\x51\x90\x41\xb2\xa9\x26\xfb\xa6\x87\x35\xe4\x45\xf6\xd4\xc9\x23\x7b\xeb\xf2\x39\xe3\x37\x40\xd3\xe5\x2d\x24\x82\xa7\x3b\x72\xe9\x6e\xca\xd2\x07\xc6\x59\x5e\xe6\x84\x97\xf9\x04\x70\x2d\x94\x1d\x14\x39\x8e\x35\xa8\x50\xc2\xe1\x21\x5b\x3a\x2e\x93\x92\x42\xa4\x9e\xf1\x4c\x8c\x56\x4f\xd3\x5d\x2f\x9d\x07\xa6\xe7\x58\xb6\x82\x2f\xcd\x50\x4c\xd7\x37\xa2\x24\x89\xa4\xca\x08\x8d\x67\x38\x34\xd3\xe6\x16\x9d\x00\xba\xd8\x59\x0a\x66\xcb\xd0\x05\x65\x99\xd1\x72\x76\xbd\x16\xdf\xc1\x94\x96\x99\x46\xfb\xd0\x2b\x72\x62\x08\xf7\xca\xfd\xa6\x6e\x8d\xde\xa1\x84\xe0\xe6\xbf\x16\x76\x09\x5f\xee\x74\x0f\x3f\xdf\x2e\x40\xe8\xbe\xed\x0a\x88\xee\x5b\x41\x4b\xb5\xab\x99\xa9\xb5\x1b\x2e\x79\x6a\x0e\x61\x53\x9a\x6f\xdc\x23\x4c\xb9\x9e\x77\x9b\xd5\xc7\xa1\xbc\x36\x50\x2d\xc5\x4c\x82\x52\xef\x80\xa6\x19\xe3\xf0\x02\x9b\xfa\x6e\x0e\x24\xa7\x9f\x70\x63\x6b\x96\x83\x11\xb6\x9a\xdb\x9a\x36\x5f\x5f\x0b\x92\xd3\x7b\xa8\xe8\x24\x13\x98\x0a\xb9\x43\x48\x87\x6f\x4c\x35\x37\x93\xdd\xb4\x53\xca\x32\x48\xc7\x48\x49\x63\x2c\xb3\xd9\xa5\xc8\x32\x90\x76\x1f\x9a\xbf\x19\x2f\x81\x68\xb1\xe3\x60\x85\x14\x68\x9a\xb0\x03\x34\xa5\x19\x94\x16\xa8\xe9\xd2\xde\x38\x78\xd8\x08\x25\xd7\x2b\xf3\xff\xfe\x53\x82\x46\xf8\x1d\x07\x94\x40\x15\x76\x66\x8f\x8d\x2a\xe5\x94\x26\x5e\x7e\x6d\xbd\x9c\x8d\x98\x19\x93\x2b\xa1\x5d\xe8\x72\x35\xa5\xe6\xd7\x3b\x8e\x87\x9a\x3e\x10\x50\x9a\xe5\xc8\x6d\xd2\x12\x43\x52\xcd\x60\xb8\x96\x74\xf3\xde\x6d\x9d\xf5\x3f\xbc\x7a\xb5\xa3\xe8\xfc\xfc\xa7\x56\x02\xda\x66\x9e\x75\xc3\x5f\x55\xdc\xdb\xdf\xae\x85\x48\x95\xd9\x7e\xcc\xa9\x2a\x85\x30\xef\x28\x31\x96\x83\x29\xcd\xf8\xac\x64\x6a\x4e\x26\xa0\x1f\x00\x38\x81\x4f\x16\x5e\x6e\xc7\xf1\xfe\x09\x52\xe0\x7e\x33\xab\x55\x3b\x24\x5b\x6b\xf0\xba\x3f\x0b\xb0\x60\x8a\x09\xfe\x2d\x53\x5a\xc8\xe5\xf7\x2c\x67\x4f\xd4\xb4\xf0\xad\x3b\xf7\xa9\xaf\x53\x91\xa5\xe4\xc6\x6e\x81\x5b\xb0\x33\x23\x01\xdd\x1f\x5a\x58\xdb\x08\x31\x1c\x61\x42\x93\xfb\x5d\x6f\xb5\xbd\x57\x75\xdb\x7a\x75\xb8\x45\x5f\xbf\xea\xcb\xb2\x7a\x41\xed\x39\x97\x12\x55\x82\x6a\x24\xbc\x3b\xec\xc1\x7a\xff\xc9\x4e\x77\x6b\x69\x1f\xe6\x42\x01\x3e\x40\xa8\x7c\x5a\x26\x6c\xbe\x86\xf7\x89\x32\x55\x71\x5a\x8c\x57\xe1\xa0\x08\x9d\x4e\xdb\x4f\xa4\x7b\x48\xca\xb6\x5d\x6a\x92\x97\x4a\x93\x9c\xea\x64\x6e\xad\xd3\x22\xad\xa4\xd7\x63\xe5\xb4\xcc\x7d\x96\x76\x67\xf7\xd8\xfe\x8e\x2c\x62\xe9\x7c\xff\xa9\x30\x97\xc7\x53\x2e\xef\x76\x6b\xad\xf3\x6a\x37\x6d\xab\x4d\xd6\x5e\x5c\xa7\x26\xe0\x5d\x6a\x2f\xee\xe6\x27\x68\x89\xbf\xb8\x7a\xb7\xfb\xa9\xe9\x62\x94\xd9\xdb\x2c\xd3\xdd\x47\x62\xda\xc5\x23\x73\xe0\x9d\x26\xee\x9b\xb6\x37\x0f\xf5\x67\x75\x46\x28\xb9\x87\xe5\x99\x95\x3c\x1a\xa0\xa8\xe6\xe1\xbd\x08\x91\x90\x39\xf1\x14\x4c\x8f\xd8\xa1\x1d\x63\xf7\xd9\xee\xb0\x31\xfd\xe0\xfb\xf8\x6f\x7d\x1b\x19\x42\xf7\xfc\x85\x9f\xa0\x3d\x7e\xb6\xff\xd9\xb1\xed\x1e\x96\xfb\xfd\x60\x65\x27\x99\x55\x70\x5a\xbc\xdd\x23\xe6\x83\x4a\x7b\xa8\xb6\xc5\x7e\x8e\xf5\x66\xeb\x60\x50\xb4\xcd\x4f\x62\xd0\xeb\xed\x79\x50\x9a\xe3\xb6\xec\xb4\x66\x5a\x8e\x95\xdd\xbf\x86\xc3\xcc\x59\x61\x73\xfa\x9c\xb7\x71\xff\x4d\x6c\xdb\x0f\x34\x63\x69\x35\xa4\xe5\x3e\x97\xfc\xcc\xc8\xd6\xe6\x3f\x78\xfd\x58\x89\xff\x9d\x00\x75\x25\x34\x7e\xf2\x62\x6b\x60\x5f\xeb\xa5\x57\xc0\x8e\xea\x9c\x56\xc8\x56\xd1\x5e\x61\x53\xd6\xdc\x4c\x7b\x5c\xe5\x3a\xd2\x53\x91\x4b\x4e\x84\x74\x53\xb7\xf7\xa0\xa6\x33\x37\xb0\x1d\x12\x2f\xd2\x89\x75\xd6\xa2\xfb\x6b\xe3\x98\x6e\x85\x84\x6c\x2d\x50\xc4\xe1\xdd\xd0\x28\x0b\xda\x6f\xd0\x5c\x51\x64\xa8\x9d\x39\xa5\x89\xfa\xd0\xaa\x1d\xbd\x22\xcd\x96\x83\x9c\xa1\x17\x3b\xd9\xd9\xeb\x5a\x11\xdd\xe1\xe2\xb3\x6d\xef\xeb\xaf\x39\x60\x87\x8d\x1c\xc5\x97\x14\xad\x1b\x94\x57\xac\x19\xba\xa3\xc4\xb3\xd7\xa9\x6a\x0c\xd7\xb2\x91\xff\x1f\x73\xa9\xe3\xa6\xfb\xbf\xa4\xa0\x4c\xaa\x31\xb9\x20\x8a\xf1\x59\x06\xad\xef\x9c\x09\xa0\xd1\xcd\x5e\x83\x17\x66\x50\x73\xf7\x2e\x68\xe6\x0c\x31\x94\x13\xb0\xe6\x78\x43\xc7\xaa\xf8\x76\xe6\x24\x6c\x73\x15\x55\xf1\x0f\x47\xf7\xb0\x3c\x3a\xdb\x1a\x66\xbe\xb9\x35\x4f\xea\xd1\x25\x3f\xb2\x22\xcc\xda\x59\xab\xe4\x1d\x0c\xb2\x38\xc2\xef\x8e\x62\xca\x86\x7b\xca\x2a\x5d\x9d\x09\xed\x41\xf7\x38\x26\xad\x5d\x9d\xd3\x62\xdf\x4d\xed\x03\x3b\x3b\xe8\x68\x77\xab\xc6\x25\x17\x01\xad\x05\x29\x15\x58\x35\x1a\x99\x1d\x01\xaf\x8b\xa1\xe6\x85\x56\x2f\x0e\x0f\xa8\x3b\xf5\x46\xa1\x31\x2a\x3e\xe3\xb3\x3f\x17\x29\xd5\x3b\xe5\x14\xd9\xd6\xfd\x6c\xdf\xd8\x01\x49\x89\x23\x9a\x9d\x3c\x65\x33\x52\x50\x49\x73\x35\x26\xd7\xae\xdc\x00\xee\x6b\x36\x6d\xba\x6f\xdc\x3c\xdf\x2d\x0b\x20\xff\x73\xff\x01\xed\x1b\x3e\xf3\x39\xe8\x26\x14\xe7\xf4\xd3\x6d\x29\x67\x7b\x4c\x3f\x09\x16\x5a\x9a\x96\xe8\xda\x26\x84\x1b\xb5\x09\x22\xa4\x92\x39\xa4\x65\x06\x29\xa1\x13\xb1\x80\x96\x9f\xac\xfa\xd9\x9e\x43\xa3\xa1\x62\xcf\xdf\xfc\x60\x38\x9c\x27\xca\x08\x59\x13\x25\xb2\x52\x57\xf6\xac\x13\xf8\xf4\x86\xfc\x1e\xe3\xb7\x28\x29\x40\x26\xc0\x35\x9d\xc1\xaa\xe1\xd1\x3e\xf7\xfa\xd5\xbf\x9c\xee\x4b\x00\x8a\x33\x66\x7c\x67\x06\x7e\x65\x76\xe7\x07\xfa\xe9\xcf\xbc\x76\xd2\x30\x45\x76\x34\x42\xd5\xed\x62\xe5\x45\x70\x94\x2c\x29\x33\x34\x31\x63\x5c\x5c\xe3\x75\x26\x4b\x22\x45\x89\x91\x71\xa4\x2c\xf6\x1d\xab\x69\x2e\xfb\xed\xef\xff\x65\xdf\x9f\xbf\xff\x44\xf3\x22\x83\x37\xbe\xee\x8b\xb5\xf5\x19\x7d\x42\x0b\xf2\xbb\x57\xff\x72\x66\xa3\x04\xe0\xa1\x61\x7b\xaa\xf7\x11\x35\x9b\xa8\x2c\x08\xcb\x6d\x9e\x0c\x64\x4b\xec\x68\x5f\x09\xce\x5c\x71\x6d\x16\xa2\x34\x95\x5a\x9d\x11\x0c\xd0\xab\x34\x41\x2d\x34\xcd\x56\xcc\x9d\x68\x68\x84\x07\xbb\x15\x52\x81\x6b\x09\xe8\x75\xd8\x93\x8a\xd7\xbf\x7b\xf5\x2f\xeb\x46\xed\x8f\x3c\x01\x1c\x07\xfb\xc7\x78\xcd\x09\x00\x27\xf7\x2c\xcb\x20\xdd\x57\xc4\x7e\x6a\x22\xa7\xa5\xd4\x73\x90\x67\x04\xb8\xf2\x9e\x08\xf3\xee\x2b\xef\x8d\xb4\xc8\x92\xf3\xfd\x25\x50\x6a\xfd\xa1\xe8\xdc\x68\x38\x3b\xdc\xb4\x1b\xc1\x4c\x93\x5c\x28\xbd\x79\x3a\xf6\x1a\x8c\xf2\xe5\xc7\xe9\xbe\xe2\xf5\xa8\x83\x31\x77\xfd\xd7\x1d\x84\xf3\x96\xf4\xc1\xb8\x1e\x09\x39\xb2\xdd\xbc\x21\x5a\x96\xfb\x08\x7c\x79\x8b\x85\xf4\xf0\x06\x28\x1b\x0c\x6e\x6d\x13\x7c\x76\x6c\xbc\x3b\xbb\x4d\xc5\x03\x8f\x75\x69\xe0\x6d\xdf\xe9\xba\x78\x11\x16\xde\xf6\x0c\xad\x70\x1e\x33\x0f\xe6\xe9\xff\xff\xfa\x91\xdf\x57\xa5\x5e\xb9\x09\xb6\xf3\x76\xc7\x5a\x2b\xd6\x6d\xd4\x1a\x0c\x80\x38\x5b\xa1\x75\x4f\x0a\x36\xbc\x59\xc5\x55\xa7\xc2\x86\x07\x9b\x4d\x60\x1e\xb0\x44\x6d\xb8\xe2\x6a\x06\xbc\xf7\x55\xb6\xe5\xaa\xb2\xef\x58\xc7\x7e\x68\x0c\xbb\x34\x6c\x58\x6d\xe3\xc3\x7b\x0e\x9d\x01\x55\x7a\xd3\x12\x0e\x5c\xfb\xc9\xf6\x78\x86\xef\x6a\x6b\xab\x8e\x46\x77\xc1\x19\xaf\xfc\x64\x98\xbc\x3e\x01\x72\x74\x03\x36\x8a\xc9\x66\x24\xb4\x94\x96\xa3\xca\x7f\x6d\x16\x3b\x48\x9f\xd9\x79\xda\xbc\x0b\xee\x59\xfd\xd1\x6e\x8c\x46\x76\x9e\xf3\x00\xba\x2b\xa8\x0a\x89\xb2\xf1\x5d\xbb\xbb\xa1\xc1\x65\x9f\xb8\x23\xec\x5f\x66\xac\x0a\x48\xc6\x12\x90\xab\xd8\xa4\x41\x6b\x57\x41\x73\xcb\x45\xf6\x40\x97\xea\xa8\x37\xaa\x79\x0e\x9a\x3e\x9e\x94\xbe\xda\xba\x0b\x04\xb7\x9a\xf2\x94\xca\xd4\xbd\xd1\xb1\xaa\x46\xdf\x87\x23\x7c\xc0\xf0\x24\x3e\x15\x6f\xc8\x5c\xeb\x42\xbd\x39\x3f\x9f\x31\x3d\xbe\xff\xa3\x1a\x33\x71\x9e\x88\x3c\x2f\x39\xd3\xcb\x73\x8c\x36\x62\x93\x52\x0b\xa9\xce\x53\x58\x40\x76\xae\xd8\x6c\x44\x65\x32\x67\x1a\x12\x5d\x4a\x38\xa7\x05\x1b\x25\x82\x2f\x80\xa3\xff\x62\x9c\xa7\xbf\xf6\x24\x3d\xaf\x0e\xdf\x62\x13\xe8\x50\x91\x0b\x18\x95\xfc\x9e\x8b\x07\x3e\x42\xf3\x9e\xda\x8b\x61\xec\x16\xb5\xea\x5b\xc0\x1a\xee\x13\xd4\x5a\x88\x3d\x6c\x82\xcf\xbe\xb2\x66\x8a\x46\x94\xa7\x23\x1b\xaa\xf5\xbc\x0b\xdc\xc5\xad\x3a\xaa\xc3\x41\x77\xa7\xae\x9b\x35\x88\x26\x9a\x2d\xa0\x53\x50\xa2\x6f\x61\x8a\xc1\x47\x9f\x75\x95\x96\xd2\xee\xa5\x46\x94\xa2\x0f\xd1\xc8\xe9\x12\x65\x78\x24\x96\x08\x2b\xbc\x71\x91\x82\x73\x39\x2e\xf6\x08\x1d\xf4\xed\xd6\xb0\xe5\x3b\xa3\x6d\xba\x48\x47\xf4\xe8\x2e\x95\x86\xdc\x5e\x05\x76\xb4\x6c\x49\xb4\x5c\xda\xf0\x48\x79\x4f\x98\xf6\x31\x87\x46\xbd\xbf\xc7\xe7\x94\x12\x09\x43\x91\xbe\x5e\xb6\x6e\xba\x8a\xf7\x6a\x51\x52\x08\xc5\xf0\xbd\x9c\xe0\xb2\x5f\x7f\xdd\x65\x9e\x46\xf8\xd1\x1f\xfe\x6d\x9f\x7d\x34\x45\x60\xcd\x3d\xbd\xed\xed\xf0\xdc\x69\x33\xe7\xd9\x2d\xfd\xb1\xf2\x56\x41\x23\x88\x26\x82\x2b\x2d\x29\xdb\x8e\x25\xb1\xb9\x75\x0c\x89\xe8\x1e\x77\x40\x70\x77\x5e\x74\x9a\x14\xb2\x9e\x55\xe0\x05\x16\xdc\xf2\x7e\xaa\x9b\x13\x63\xa1\x26\x7c\x76\xcc\x9e\xec\xd6\xb6\xce\x73\x44\x82\xe6\xc9\xfe\xda\x02\xfb\xa6\xef\x50\xdf\xb8\xad\xde\xeb\x72\xc6\x45\xf5\xf1\xfb\x4f\x90\x94\xbb\x62\xb2\xad\xb7\x50\xb7\xbb\x6d\x46\xda\xf3\x66\x6a\x17\xbd\x6c\xa9\x37\x1c\xc2\x7f\xe1\x84\x4a\x81\xeb\xe5\xa4\x4b\x45\x35\x53\xd3\x7d\x1d\xc1\xbe\x99\x55\xad\xd6\x1d\x1a\xa1\x5c\xd5\x89\xa9\xc2\xe2\x50\x66\xb0\xf9\xd9\x4c\x23\xe7\x4c\xe6\x42\xa8\x7d\xcc\x44\xcd\x46\xed\xa6\xc3\x77\x58\x30\x61\x03\x94\x10\x73\x40\x92\xdc\xb0\x4d\x77\xc5\x37\x88\xb2\xae\xc1\xfa\x67\x6c\x5f\x5d\xdd\x37\x34\xf7\x55\x9b\xc3\x07\xe2\x98\xc1\xd1\xbd\x65\xfe\x98\xa1\xb0\xae\x34\x51\x65\x6e\x48\x79\x00\x36\x9b\x6b\x75\x46\xd8\x78\x6f\x7b\x91\x6f\xe6\x18\x01\x4d\xe6\x8d\x57\xc8\x01\x74\xab\x58\x76\xf3\xec\x35\x7d\xa0\x27\x8f\x42\x1a\x3d\xdd\x1c\xbe\xc3\x59\x25\x37\xac\x1e\x89\x8d\xdb\xe0\x8c\x80\x4e\xc6\xa7\xfb\xc7\x55\xd8\x56\x83\xd7\x99\x59\x9c\x2c\x09\xd3\x60\x2e\x63\x54\xfd\xa5\x28\x67\x76\xae\xc1\xa7\x88\xe1\x1c\x54\xd9\xf7\x18\xf6\x96\xa6\xfb\x9b\x24\x7c\x3b\xb2\x8b\x76\x64\x4e\x0c\xce\x6d\x99\x7b\xe8\x65\x5c\x01\x74\x80\x43\x85\x38\x21\x41\x15\xc2\x9a\xc9\x56\x5d\xe3\xff\x63\x4f\x07\x78\xb3\x99\xa1\x4e\xd4\x69\xbd\xb5\xe6\x6c\x36\xf7\x3b\x8b\x3a\xf9\xa0\xbd\x23\xbb\x6d\xb0\xee\x61\x21\xb6\x75\x0c\x0e\xb1\x2d\x0e\x17\x6c\x24\xbd\xd7\xc7\xb3\x71\x24\x34\xc8\xbc\x5a\x36\x3c\x35\x78\xad\x38\xb7\xb4\x2f\xe2\xee\x0e\x2b\x79\xd5\x99\x8a\x13\x73\xca\x09\x33\x1a\xa4\xe1\x53\x23\x51\x9c\x8e\xc9\x05\xe1\x65\xc5\x96\x1f\x23\x8c\x8b\x8a\x2e\xd7\x91\x21\x56\x89\xba\xaf\xae\xdc\x3a\xe4\x2a\xb5\xad\x5b\x34\x66\xb3\x8d\xdc\x0c\xc0\xd3\x65\x57\x1e\xeb\xc4\xae\x51\xc7\x0e\xc2\xc4\x02\xdf\x87\x7f\x8b\xee\x7d\xac\xc2\xa2\x5b\xbe\x52\x47\xf5\x82\xcc\xcf\x9a\x72\x7c\xc5\x03\xda\xec\xc6\xce\x45\xd7\x5d\x41\xe2\xec\x0c\x12\x69\x5e\x49\x50\x80\xf9\xe6\xb6\x32\xcb\x15\x84\x46\x6b\xb6\x5b\xf7\xe5\x64\x89\xdf\xee\x19\x7b\xbf\xbd\x85\x32\xd7\xba\x05\xb1\xd9\xba\xc5\x62\xb8\x75\x5b\xdd\xbd\x71\xa2\xd5\x23\x10\x86\xc3\xc5\x89\x61\xdf\x32\x40\x9c\xd3\x63\x5b\x38\x87\xad\xdb\xfe\x51\xf0\xdb\xfa\x89\xb6\x1c\xb1\x58\x84\x6d\x1d\xe2\xe8\x37\xb7\xb5\xe0\xb6\xe7\x09\xab\xdf\xdc\x02\xe2\x63\x37\xb5\xae\x21\xf8\x9b\x5b\x7c\x46\x61\xda\xcd\x0b\x44\xe9\x6f\x6e\x3b\xc5\xee\x9f\xb5\x03\xf7\xc9\x37\xda\x32\xa6\xef\x83\x6e\xd9\xba\x45\x5e\xf1\x6e\x01\xff\x9b\xdb\xf3\xac\xf7\xc5\xcb\xa5\x04\x6c\x6e\x07\x4e\x14\xd8\x93\xa8\xed\x04\x7d\xa3\x0d\x31\xdf\xeb\xb3\xc6\x8f\x23\x51\xd3\x20\xc1\xc2\xec\xf9\xa8\x72\xa7\x60\x9f\x39\xc0\x09\xef\x90\xc4\xe4\xd6\x42\x02\xa2\x3e\x62\xd6\x47\x27\xa3\xf0\xf6\xb6\x73\xf6\x44\x48\x36\xc4\xe6\x16\x4f\x5e\xb3\x2d\x92\xd4\x66\x5b\x64\xee\x11\x2d\xcb\xe2\xc5\x3b\x47\x3d\xe1\x6b\xeb\x8c\x3c\xa0\x8a\x60\xdd\xa1\x83\x8a\xf0\x64\x1b\x54\x84\x41\x45\x78\xba\x0d\x2a\xc2\x7a\x1b\x54\x84\x41\x45\x08\x6a\x83\x8a\xf0\x64\x1b\x54\x84\x27\xdb\xa0\x22\xd4\x6d\x50\x11\xfa\xaf\x22\x84\x66\xc8\x6e\x6e\xd6\xdf\x12\xcd\xed\xf3\x17\xeb\x6e\x5c\xf5\xf3\xa0\x72\xe3\xc3\xdc\xdb\x0e\x1f\x23\x45\xdf\x3a\x51\xe3\x0e\x9d\x44\x2e\xd9\x5b\x52\x3e\x03\xf2\x7a\xf4\xfa\xd5\xde\x49\x15\xcd\x16\x12\x9b\xde\x6c\xfb\x82\x46\xad\xb7\xe8\x3b\x63\x5b\xfc\x42\xff\x42\x7a\x1c\x67\xaf\xe2\x2a\x5a\xca\xe7\x96\xf8\x9a\xaa\x22\x41\x0e\x7a\xff\x84\x08\xdf\x9a\x8e\x69\x96\x43\x15\xf4\x66\xd9\xba\x4b\xe3\xa9\x93\x62\x05\x77\x01\x12\x66\x5b\x76\xdd\x76\x9d\xde\x36\x01\x6a\x93\xcd\x27\x60\xde\xb8\x6b\x28\x91\x26\x4a\xe4\x60\xe1\xda\xfc\xd5\x61\x5e\x17\xfc\x36\x20\x27\x30\x9e\x8d\x49\x5a\x82\x83\x41\xb0\x59\x27\xa7\x67\x8d\xe0\xcc\xae\xb1\x44\x46\xe0\x91\xf8\x1f\x33\xb1\x2e\xa6\x13\x16\xc0\x75\x49\xb3\x6c\x49\x60\xc1\x12\x5d\xad\x00\x26\x67\x31\xad\x02\xe6\x3a\x58\x15\x0d\x55\x3f\x47\x6b\xfc\xab\x9b\x78\x12\xae\x27\xae\xd1\xd1\x9d\xa7\xaf\x14\x04\xb0\x33\x34\xde\x6a\x49\xd2\x66\x34\x1b\x90\x86\xff\xc4\x83\xfb\xf1\xa6\x6b\xec\x0e\x89\x24\x8f\x04\xcb\x20\x31\x55\x03\x17\x30\x23\xa4\x0b\xe9\x59\x9f\xc1\x0d\x21\x33\x1b\xf0\x3f\xf6\xce\xcd\x6f\x37\x3d\x87\xbc\x0b\x86\xc8\xa6\x66\x68\xbb\x13\x85\xc8\xc4\x6c\xd9\xdc\x78\xae\x6e\x7f\x8d\x76\x4e\x89\x2a\x27\x4e\xb9\x35\x67\xff\x6a\x65\xa7\x0e\xc1\x1e\x5b\xdb\x10\xec\xb1\xd6\x06\x4b\xee\x60\xc9\xdd\xa3\x9f\xc1\x92\x3b\x58\x72\x07\x4b\xee\x60\xc9\xed\xda\x06\x4b\xee\x5e\x44\x0d\x96\x5c\x32\x58\x72\xb7\xb6\xc1\x92\xeb\xda\x10\xec\xb1\xb1\x0d\x2a\xc2\xbe\x6d\x50\x11\xc2\xfb\x19\x54\x84\x41\x45\x18\x54\x84\x41\x45\xe8\xda\x06\x15\x61\x2f\xa2\x06\x15\x81\x0c\x2a\xc2\xd6\x36\xa8\x08\xeb\x1d\x47\x0b\xf6\x78\x06\x72\x63\x12\x5a\x88\x34\x3a\x9c\x4b\x21\xd2\x47\xd0\x5c\xac\x2f\x3c\x11\xa3\x4c\x24\x14\x6b\x09\x32\xfb\x13\x17\x83\xa2\x68\x6e\x43\x01\xce\xc8\x3f\x05\x07\x8b\x01\x61\x6b\x77\xe6\x40\x84\x9e\x03\x96\xe9\x3a\x51\xa7\x1d\x12\xd9\x07\x34\x98\x5d\xda\x80\x06\x33\xa0\xc1\x0c\x68\x30\x2f\x8b\x06\x33\xa7\xca\x95\xb8\x40\xa1\x68\x3b\x38\x4c\x83\x63\xdf\x81\xcc\x07\x6c\x98\xa7\xda\x9a\x2e\xee\x8e\x8f\x59\xe1\xc6\x66\xb7\x33\x9e\xba\x70\x4a\x48\xaf\xdb\xf3\xec\x0c\x77\x38\x2d\x34\x4d\x21\x25\x05\xc8\x91\x3d\x3c\x82\x4c\x99\xab\x30\xb3\x72\x9a\xdd\x0c\x77\x65\x88\x3d\x01\x5c\x69\xcf\x44\x40\x4f\x87\x47\x5d\x69\xbf\x4a\xb4\x50\xa5\x66\xc4\x56\x4b\xfc\xf9\xec\x30\x58\xe2\xd8\x0b\x47\x44\xbb\x30\xa5\xef\x82\x2c\x86\xb1\xcc\x7b\x68\x7e\xbb\xdd\xab\xa6\xec\xf6\x16\xdb\xa4\xe1\x0b\x75\xfe\x77\x09\x72\x49\xc4\x02\x64\x6d\xac\xf2\x37\xad\x72\x31\xda\x88\x85\xef\xea\xd0\x86\xab\xa6\x97\x53\x8b\x32\xc5\xcb\x2c\x3b\xb3\xbd\xaf\xb2\x3d\x7f\x11\xd9\xca\x4b\xc2\x7c\x1f\xc9\x7b\x11\xc5\xc0\x1d\xd3\xfe\x1b\x3b\x92\x8c\xf4\xac\x62\xed\xf6\x16\xd7\x3c\x11\xd1\x38\xf1\x4c\xd6\xc3\xbe\x54\xc6\xdd\xde\x9e\xd3\xbf\x44\x62\xfb\x98\x48\x64\x3f\x13\x89\xe8\x6b\x22\x71\xfd\x4d\x24\xba\xcf\x89\xc4\xf4\x3b\x91\x17\xaf\xf4\xbb\xbd\x45\x37\x2b\xc6\x76\x45\x91\x67\x63\x30\xe4\xa5\x2b\x0a\x6f\x6f\x2f\x53\x6b\x78\x7b\x7b\x86\x5d\x10\xd3\x3d\x45\x9e\x75\x0f\x1c\xa4\xa6\xf1\xf6\xd6\x4b\xa7\xd5\xa3\x84\x3d\x7b\x1d\xe4\xed\x2d\xba\x0f\x88\x3c\x83\x1f\x88\xc4\xf6\x05\x91\xe7\x39\xb2\xcf\xec\x13\x7a\x81\x01\x3a\x55\x6f\xde\xde\x9e\x83\xe7\x1c\xb4\xe2\xf3\x63\x64\x1d\xb0\x16\xf4\xf6\x76\xf8\x2a\xd1\xdb\x5b\x64\xe9\x3c\xb4\xb2\xf4\x53\x84\x46\x61\x15\xcf\xe3\x7e\x25\xad\x73\xf1\x1d\x2c\xe3\x06\x7f\x46\x38\xb9\x1f\x5a\xd4\x79\xf5\x53\xbb\x1a\x76\xb5\xd4\x8e\xbe\x36\x2b\xb0\x3b\x1f\x81\xab\x88\x9d\x65\xc1\x34\x4c\x80\x68\x7a\x0f\x18\x71\x21\xb0\x1c\x09\x4b\xc1\xd6\xad\xb1\x5b\x1d\xc7\x37\x5b\xbc\x54\x90\x1a\x42\x32\x21\xee\xcb\xc2\x1f\x15\x4c\x2b\x8e\x71\x30\x19\x4f\x44\xee\xf3\xa7\x6d\x36\x9d\x39\xf1\x8e\x17\x8c\x6c\x9d\x31\xfb\x39\x92\x83\x97\xb4\x33\xaa\xfe\xa3\x65\xe4\xfb\x07\xa1\x8a\xfc\x03\xd5\x1f\x4e\x4e\xf0\x87\xa7\xff\x08\x0f\xcd\xac\x96\xc0\xfa\xe5\x44\x89\x1c\x76\xa5\x48\x79\x7b\x75\x1e\x9b\xdd\x60\x82\x7c\x6d\x94\xe6\xc4\x1d\x5b\x7f\xfa\x09\xe5\x9a\x9d\x56\xa6\xe8\x31\xc1\xfd\x85\xba\x5f\x2a\xf8\xb1\xb6\x54\x7b\xae\xef\x3b\x08\x8f\xc8\xac\x56\xae\x8e\xec\xb1\x1e\xee\xb1\x2b\xfb\x6e\xab\xf0\x55\x35\xe3\xac\x8c\x17\x3c\xee\x9d\x8f\x1d\x70\x2a\xef\x54\xc8\x09\x4b\x53\xc0\x42\x9b\xd5\xab\x4e\x84\x87\xc6\xa8\x8f\x9c\xe1\xfb\xad\xbd\x13\x4e\xcc\x45\xa6\xc4\xd9\xea\x38\x09\xe5\x1e\xfc\x00\xb4\xad\xd6\xd9\x1a\x96\x30\x65\x96\x45\x41\xb0\xfa\xd5\xbb\xf0\xf0\xe7\xba\x27\x22\xa7\x08\x30\xd5\xf3\xbb\x62\x95\xc0\xe1\xba\x88\x7e\x5d\x70\xa1\x87\x1b\x63\xb8\x31\x56\x6e\x8c\xb5\x83\xf7\x7c\x97\xc6\xda\x50\xc3\xbd\xd1\xf3\x7b\x83\xd3\x1c\x54\x41\x13\xf8\x8c\x3c\xcc\xd6\xfc\x6f\xf3\xd6\x3c\xf9\xaa\x51\x4e\x1b\x64\x1e\xd5\x2b\xe0\xa1\x6a\xf0\xc6\xc2\x7e\x53\x1f\x0a\x55\xf2\x46\xad\xd5\x06\x31\x96\x6f\xae\x46\xfd\x05\x53\xe2\xd5\x7c\xc1\x41\xa1\xf3\x15\xaa\xd8\xd3\xc6\xe0\x38\x56\xf8\x6b\x23\x04\x4d\xed\x66\xe1\xe9\x2a\x28\x4d\x3d\x22\xfa\x81\x73\xa0\x5c\x91\x23\x1f\x14\x7b\xac\xea\x27\x76\x2c\xaa\xfc\x58\xab\xca\x5b\x55\x14\x9d\xfc\x9f\xff\x7b\xda\x2a\x69\x55\x13\x34\x78\xf9\x77\x6e\x83\x97\x3f\xa8\x0d\x5e\xfe\xc1\xcb\x1f\xa3\xaf\xc1\xcb\x3f\x78\xf9\x37\xb6\xc1\xcb\x3f\x78\xf9\x07\x2f\xff\xe0\xe5\x5f\x6f\x83\x97\x7f\xf0\xf2\x37\xda\xe0\xe5\xef\x4e\xd6\xe0\xe5\xdf\xb3\x0d\x5e\xfe\x98\x5e\xfe\xda\x70\xd1\x37\xeb\x5b\xd3\xa4\xe5\x32\x59\x51\xfb\xd4\x54\xb3\xa4\x46\x8f\xf2\x4f\xd9\x7f\xf5\xcb\x14\xd7\x34\x93\x3d\x8f\x21\xae\x69\xec\x5b\xb3\xa7\x46\xb2\xc3\x6d\xb5\xba\x55\x76\xb9\xb5\x91\x9f\xd5\x20\x37\x98\xdb\xbb\x51\x59\xa7\x96\xf5\xed\xa8\xdf\x79\x30\x03\x35\x17\x65\x96\x1a\xe1\xb6\x42\x3a\x48\xc9\x89\xf7\xac\x9d\x9a\xad\xc8\x85\x6e\x7f\xc9\x35\x1b\xd5\x4f\x54\x89\x82\xe8\x16\xf4\xd5\x3c\xc2\x97\xd8\xdb\x08\x6a\xef\x91\xc3\x5d\xa8\x92\xec\xeb\xd3\x61\x6e\x68\x90\xad\x77\x60\x8a\xa4\x30\x65\xdc\x82\xb4\xc8\x92\x73\x23\x9c\x0b\xee\x72\xe8\x83\xe9\xb3\x22\x81\x75\xf5\x39\x3e\x64\x4d\x1a\x38\x1f\x68\xd7\xa8\x97\xbf\x91\x26\x4d\x91\x89\x52\xee\x70\xde\x05\x77\x4e\x55\xf3\x89\xed\x27\x98\xb4\x8a\x45\xe1\x8a\xb0\xea\xed\xc3\xb9\xd3\x7b\xe4\x4a\xcd\x17\x63\x0a\xf7\x07\xcd\x32\xf1\x10\x2e\x6d\x44\x39\xd7\x91\xcb\xd6\x04\x9e\xb6\x87\xbd\xab\xde\xac\xe4\xfe\x86\x69\xb6\x43\xc1\x9c\x1d\xdb\x50\x30\xe7\xe9\x36\x14\xcc\x79\xbc\x60\x4e\x23\xb2\xa9\x59\x39\xa7\xeb\x6c\x63\xbd\x9d\x03\x54\xce\x21\xe4\x2f\x73\x40\xbe\x21\xc1\x86\x23\x95\x99\x66\x45\x8d\x88\xa6\xec\xca\x67\xd6\x10\x37\x75\xc8\x3a\x6d\x2e\x66\x68\xa4\xc9\xbc\x23\x01\x2b\x3c\x10\xa9\x40\xdc\x35\x85\x37\x9b\x45\x94\x41\x3f\xb0\x2d\x2b\xe3\x2d\x74\x16\xd8\x87\x7d\xfe\xf8\x1f\x01\xb7\xce\x3b\x14\x7b\xda\xf1\x76\x8a\x9c\x18\x69\x29\x5b\xba\xa8\xb3\xd6\xf5\xd3\x12\xb3\x3a\x0f\x6b\xbd\x08\x0b\xf0\x2a\xda\x8c\x2d\x80\xd7\x32\xda\x89\x3a\x3d\xf5\xba\xe2\xaa\xec\xd9\x79\xcc\x10\x99\xb5\xfb\xbd\xba\xaf\xac\xb9\x22\x2b\x76\x1e\x77\x83\x8c\xf9\x1f\x0d\x59\xec\x3f\x9f\x96\x32\x3b\x0f\x6d\x59\x9b\x87\x5b\x6a\x6c\xab\x5a\xba\xec\xd8\x77\x4f\xb0\x63\xc2\x61\x40\x62\xf8\x61\xa3\xc1\x7f\xc4\xad\x4f\x75\x08\xd8\x8f\x03\x40\x7e\xfc\x92\x0a\x46\xf5\x32\xf8\xa7\x77\x76\xa6\xe7\x40\x8b\xef\x75\xb0\xcf\x00\x17\x1f\xd4\xcf\x2f\x0a\x2e\xfe\x40\xc1\x3c\xbf\x40\xd4\xf8\x1e\x04\xef\x1c\x32\x70\xe7\x17\x87\x1a\xdf\xa3\x40\x9d\x5e\x06\xe9\xf4\x2d\x40\x67\x80\x61\x0f\x6a\x9f\x27\x0c\x7b\xd4\x20\x9c\xd8\x7c\xa4\x87\xc1\x37\x3d\x0c\xbc\xe9\x6b\xd0\x4d\x44\x49\xf9\x79\x82\x6d\x22\xb1\x80\xe7\x09\xb2\x89\x97\x1a\x1d\xf3\x54\x1e\x1a\x3e\xa3\x17\xb9\xd0\x7d\x86\xcd\xe8\x55\x02\x74\xbf\x92\x9f\x0f\x91\xf8\xdc\x1b\x98\x8c\x03\x42\x64\xc4\x11\x03\x23\x08\x7f\xcf\xc1\xef\xe3\xc9\x62\x51\xe1\x30\xa2\xf2\xfc\xc3\xc3\x60\x7c\xb1\x6c\x3f\x22\xfc\xc5\xc0\xf9\xb7\xb6\xbe\x73\xfe\xe7\x86\xbb\x38\x2c\xd4\xc5\xc0\xff\x77\x6a\x51\x61\x2d\x9e\xd9\x73\xfa\x92\x70\x16\xfd\x80\xb2\x78\x31\x18\x8b\xfe\x40\x58\xbc\x18\x7c\xc5\xe0\xb1\x1e\x3c\xd6\xed\x36\x78\xac\x07\x8f\xf5\x3e\xfd\x0c\x1e\xeb\xc1\x63\x3d\x78\xac\x07\x8f\x75\x60\x1b\x3c\xd6\x1d\x89\x1a\x3c\xd6\x9b\xdb\xe0\xb1\x1e\x3c\xd6\x83\xc7\x7a\xad\x0d\x1e\xeb\x20\x02\x7b\xea\xb1\x8e\x03\x09\x11\xf3\x44\xf6\x09\x0a\xa2\x0f\x30\x10\x2f\x05\x01\xd1\x3b\xf8\x87\xc1\x04\xbd\x1b\x75\x71\xa0\x1e\x62\x1e\xe1\x7e\x43\x3c\xf4\x19\xde\xa1\xa7\xd0\x0e\xcf\x03\xeb\xf0\x9c\x90\x0e\xc1\x67\x36\xea\x69\x2d\x44\x7a\xc1\x35\xf3\x29\x64\xfb\x9f\xd3\xd6\xe9\x7c\x87\x7f\x4c\xc0\x9e\xb1\xd6\x81\x69\xe6\xc9\xcb\x32\x03\xe5\xd2\xc4\xe9\x42\xb0\x94\x14\xa5\xd6\x36\xf3\xd6\x9d\x4f\xbf\xf1\x69\x6e\x33\xe5\xcf\xc8\x3f\x05\x87\x33\x02\x3a\x19\x9b\xcd\x8d\x39\xe8\x42\xcf\x41\x9a\xc7\x4f\xd4\xe9\xe9\xfe\x6b\x12\x24\x9f\x85\x99\xf6\x0a\x09\x53\x90\x9f\x05\xb2\x02\x7a\x9e\x1d\x7c\x81\xb4\x0e\x6f\x4b\x3d\x86\x08\xb8\x2f\xec\xf1\xd3\xc2\x65\xbd\xe3\xb1\xb7\x69\xe7\x5d\x6f\x48\xc4\x37\x68\x6d\x20\x68\xb8\x39\xb6\x60\x1c\x9c\x91\x49\xa9\x09\xd3\x08\x0c\x90\xcc\x85\x50\x5d\xb9\x8b\x4b\x52\xc6\x17\x59\x30\x61\xcd\xe9\x82\x03\xa2\x0e\x08\x59\xf1\xc0\x06\x51\x56\x95\xa8\x7f\xc6\xba\x2a\x5b\xb9\x50\xba\xde\x21\xde\x38\x6b\x06\xaf\xee\x9c\x99\x04\x43\x91\x26\xaa\xcc\x0d\x29\x16\x50\x45\x59\x08\x80\x8e\xc3\x4e\x8d\x88\x45\x93\x79\xe3\x15\x72\x00\x6d\x5d\x73\x3e\xcb\xb9\x71\x88\x9b\x3a\xd3\x89\xcf\x79\xed\x38\xb6\xe9\x0c\x94\x3e\xdb\x8a\x38\xb2\x7d\x2f\x58\x9e\x70\xda\xd5\x28\x95\x88\xbc\x28\x35\x18\x39\xbe\xcc\xcd\x6e\x62\x1a\x23\x56\x90\x19\x49\x51\xce\xec\x84\x7b\x90\x07\x3b\x11\x35\x82\x08\x4f\x89\x2a\x27\x5a\xd2\x44\x77\xbf\xfd\x8f\xec\xf2\x1d\x55\x81\x45\x48\x0b\x9b\x56\x38\x21\x64\x4e\x55\x33\xe2\xa6\xbe\x5e\x9f\xc0\xc9\xf9\x1f\x01\x17\xac\x19\xf8\x44\x35\x04\x9d\x39\x9b\xcd\xfd\x9e\x33\x4a\x32\x9a\x16\x5a\x7b\xf5\x73\x07\x98\x30\x07\xd8\x1d\x25\x94\x5a\xea\x8d\x6f\x67\x3c\x25\x7f\xc1\x6f\x21\x5d\x4d\xbb\xc6\xed\x60\x6d\x07\x34\x4d\x8d\x3c\x02\x72\x64\x0f\x92\x20\x53\xe6\x34\xa5\x95\x93\xed\x66\xb8\x2b\x87\xec\x07\x48\xc0\xca\x8e\x0b\xe8\xc9\xce\x7c\xc7\x0e\x62\xb8\xda\x56\x5e\x25\x9a\xd2\x72\xe3\xa6\x79\x4c\x2e\xac\x60\xe4\xd9\x98\xd1\xe0\xcf\xd6\x60\xb0\xd6\x4f\xb5\x9d\x99\x1e\x04\x45\xc4\xf1\xd7\xc6\x40\x96\x20\x11\xdd\xab\xd1\x10\x26\xc8\xcb\x94\xff\x79\x01\xa4\x09\x72\x18\xb4\x09\x32\x94\x9e\xe9\x57\x2c\x0f\x19\x4a\xcf\xf4\x2c\xb6\x87\x0c\xa5\x67\x86\xd2\x33\xdd\x5b\x1f\x62\x7f\xc8\x50\x7a\xa6\x07\xb1\x40\x64\x28\x3d\xb3\x4b\x1b\x4a\xcf\x0c\xa5\x67\xd6\xdb\x50\x7a\x66\x28\x3d\xd3\x68\x43\xe9\x99\xee\x64\xf5\x2e\x9e\x88\xf4\x38\xa6\x88\x0c\xa5\x67\x22\x97\x9e\x89\x97\x25\x4d\x9e\xe1\xe4\x1e\x1a\x21\x83\xf4\x25\x5d\x9a\xf4\x1c\x29\x83\xf4\x2d\x67\x9a\xf4\x2e\x6f\x9a\x1c\x28\x77\x9a\xf4\x09\x39\x83\x1c\x16\x3d\x83\xf4\x31\x3f\xef\xf3\xa8\x5c\x14\x15\x51\x83\x3c\xc7\x5d\x71\x78\x64\x0d\xf2\xa5\x5f\x17\x11\x11\x36\xc8\x70\x63\xec\xd2\x3e\x87\x1b\xe3\xb9\x11\x37\xc8\xc1\x51\x37\xc8\x70\x6f\x74\x6d\x51\x91\x38\xc8\xcb\x78\x98\x5f\x12\x91\x83\xf4\x06\x95\x83\xbc\x24\x32\x07\xe9\x15\x3a\x07\x79\x49\x84\x0e\x32\x78\xf9\x07\x2f\xff\xce\x6d\xf0\xf2\x0f\x5e\xfe\x18\x7d\x0d\x5e\xfe\xc1\xcb\xbf\xb1\x0d\x5e\xfe\xc1\xcb\x3f\x78\xf9\x07\x2f\xff\x7a\x1b\xbc\xfc\x83\x97\xbf\xd1\x06\x2f\x7f\x77\xb2\x06\x2f\xff\x9e\x6d\xf0\xf2\xc7\xf4\xf2\xc7\x41\x13\x21\xcf\x70\x6a\xfb\x84\x2a\x42\x7a\x82\x2c\x42\x5e\x10\x5d\x84\xf4\x11\x61\x84\x0c\xe6\xf6\xce\x54\xc6\x41\x1d\x21\xcf\x70\xd4\xfb\x8d\x3e\x42\x7a\x8e\x40\x42\xfa\x8b\x42\x42\x9e\x0d\x89\x84\x3c\x33\x1a\x09\x89\x75\xae\x6d\x8a\x6a\x5f\x70\x7e\x2c\x35\x6b\x99\xb5\xad\x0a\xff\x8f\x26\xce\x87\x69\xb6\xee\xd0\x48\xca\x67\x40\x5e\x8f\x5e\xbf\x7a\x15\x9e\xbb\xcb\xb8\x86\x19\x84\x58\x2f\xa7\x42\xe6\x54\x63\x4f\xbf\xfb\x6d\xa7\x7e\xa2\xb3\xed\x6d\x70\x0f\xfd\x83\x41\x71\x36\x91\x36\x0c\x45\x4b\xfa\xdf\x82\x49\x82\x5a\x81\x39\xad\x39\x68\xd2\xd9\x37\xd0\x00\xde\xd0\x2c\x87\x33\xcf\xfb\x6d\x4c\x84\x0f\x00\x70\x68\x2c\x29\x11\xdc\x89\x6c\x86\xdd\x75\xdd\x7b\xdd\x5f\x39\x01\xaa\x10\xf9\x60\x02\xe6\xb5\x3b\x8e\x4f\xb5\x85\xf9\x29\x04\xe3\xda\x1b\x7a\xcc\x3b\x83\xdf\x10\x0e\x43\x28\x2d\xc1\x5a\x50\xeb\x18\xa7\xb2\x48\xa9\x86\xd3\x10\x55\x51\x2d\x95\x86\x1c\xa1\x64\x8c\xa4\x47\x31\xf8\x87\x68\xb9\xc4\x00\x90\x05\x70\x5d\xd2\x2c\x5b\x12\x58\x30\x17\xbf\x63\x86\xc7\xe8\x25\xa6\x55\xd0\xcc\xff\x65\x0e\xc8\x41\x24\xd8\xc0\xa4\x32\xd3\xac\xc8\x6a\x14\x12\xbb\xfc\x99\x35\xc9\x4d\x1d\xe8\x4e\x9b\x9f\x19\x1a\x69\x32\xef\x48\xc0\x0a\x37\x44\x2a\x0c\x03\x92\x0a\xef\x38\x8b\x33\x83\x1e\x61\xa3\x2a\xa8\xca\x56\x67\x31\x7f\xd8\xe7\x8f\x04\x12\x70\xff\xbc\x43\x01\xa8\x1d\x79\xa7\xc8\x89\x91\x9b\xb2\xa5\x8b\x3f\x6b\x5d\x44\x2d\x81\xab\xf3\xb0\xd6\x9f\xb0\x00\xaf\xac\xcd\xd8\x02\x78\x2d\xad\x9d\xa8\xd3\x53\xaf\x35\xae\x4a\xa1\x9d\xc7\x0c\x91\x5e\xbb\xdf\xb0\xfb\x4a\x9d\x2b\x52\x63\xe7\x71\x37\x48\x9b\xff\xd1\x90\xca\xfe\xf3\x69\x79\xb3\xf3\xd0\x96\xb5\x79\x10\xa6\xc6\xb6\xaa\xe5\xcc\x8e\x7d\xf7\x04\x45\x26\x1c\x10\x24\x86\x47\x36\x1a\x10\xc8\x33\x17\x4c\x7a\x01\x00\x90\x03\x80\x7f\x0c\x85\x7b\x86\xc2\x3d\xed\x36\x14\xee\x19\x0a\xf7\xec\xd3\xcf\x50\xb8\x67\x28\xdc\x33\x14\xee\x19\x0a\xf7\x04\xb6\x1e\x85\xec\xf4\x32\x5c\xa7\x6f\xa1\x3a\x43\xe1\x9e\xa0\x36\x14\xee\x19\x0a\xf7\x0c\x85\x7b\x1a\x6d\x28\xdc\x13\x72\x34\xe3\x25\x49\xc7\x3c\x95\x87\x06\xd2\xe8\x45\x56\x74\x9f\x01\x34\x7a\x95\x0a\xdd\xaf\x34\xe8\x43\xa4\x40\xf7\x06\x30\xe3\x80\x60\x19\x43\x9d\xa7\x9d\x5a\x54\x60\x8c\xa8\x3c\xff\xf0\x80\x18\x5f\x2c\xdb\x8f\x08\x84\x31\x70\xfe\xad\xad\xef\x9c\xff\xb9\x81\x2f\x0e\x0b\x7a\x31\xf0\xff\x9d\x5a\x54\x80\x8b\x67\xf6\x9c\xbe\x24\xb0\x45\x3f\x40\x2d\x5e\x0c\xd0\xa2\x3f\x60\x16\x2f\x06\x64\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\x80\x43\xc4\x3c\x91\x7d\x02\x85\xe8\x03\x20\xc4\x4b\x81\x41\xf4\x0e\x08\x62\x30\x41\xef\x46\x5d\x1c\xd0\x87\x98\x47\xb8\xdf\x60\x0f\x7d\x06\x7a\xe8\x29\xc8\xc3\xf3\x00\x3c\x3c\x27\xb8\x43\xf0\x99\x8d\x76\x5a\x69\xa9\x45\x2e\x4a\xae\x6f\x41\x2e\x58\x02\x17\x49\x62\xfe\xba\x13\xf7\xb0\x67\x56\x7f\xeb\x88\x5e\x3c\xd2\x2d\x61\x3c\x65\x09\xda\x26\x1f\xe6\xa0\xe7\x2e\x6d\x0e\x9f\x23\xd4\x3e\x48\x34\x3e\x59\x9f\x50\xa4\xd3\xdc\xb1\x98\xd9\x8d\x5d\xef\xbb\x04\x76\x86\x26\x42\x64\x40\xf7\x71\x45\x3b\x99\x11\xe4\x9e\x8c\x3a\x8c\x67\x7d\xef\x44\x89\x7a\x74\x32\x81\x4c\xf0\x99\xcb\x21\x77\x5c\x67\xdf\x5d\xf8\xb6\xee\xce\xb9\x6a\x93\x52\x4a\xe0\x3a\x5b\xe2\x34\xa7\x29\xa4\x04\xcd\x53\xb9\x58\xec\xbf\xc9\xef\x90\x1d\x79\x1d\x9e\x6a\x92\x01\x35\xef\xc1\xa1\x7e\x11\xc3\xd0\x28\xb9\xee\x40\x7b\xe5\x5b\xb6\x20\x02\x9d\xd6\x7f\xff\x1b\xbb\xd3\x1d\xdd\x3e\x0d\x5e\x2f\x43\x29\x2d\x41\x23\x5f\x63\x3e\x90\x41\x2e\x45\x49\x1e\xa8\x55\xa5\x64\xc9\x91\xa5\xe2\x44\x75\x58\xe4\x00\xa5\xa3\xbb\x31\x7e\x84\xf7\xd2\x9e\x3f\x0b\x31\x8e\x53\x39\xeb\x24\x3a\xc5\x90\x25\x2e\xe4\xac\xb4\x9a\xa2\x3b\x8a\xc0\xb5\x5c\x22\x1e\x46\xb7\x7b\xe1\x6e\xde\x3a\x21\x39\x9d\xc1\xb1\x22\x6f\x3f\xbc\x33\xb7\x0e\x46\x20\xb1\xa9\x95\xd9\xdd\x2d\x54\x48\xb1\x60\x69\xd7\x6b\xe8\x07\x2a\x19\x9d\x64\x46\xeb\x9d\x82\x04\x6e\x24\xe9\xaf\x4e\x7e\xb8\xb8\xf9\xfb\xd5\xc5\x87\xf7\xa7\xa8\xff\xc2\xa7\x82\x72\xc3\x0e\x4a\x55\x23\xf3\x38\x0a\x8f\x15\x01\xbe\x60\x52\x70\x33\x0b\x68\x37\xa4\x64\xe1\x3a\xed\x44\x51\x1d\x38\x22\x41\x89\x6c\x01\xa9\xc5\xd2\xa8\x08\xac\xc3\x77\x8a\x52\x7b\x0b\xaa\x8f\xbd\x29\x79\x32\xa7\x7c\x06\xe9\x98\xbc\x13\xa5\x79\xb1\xaf\xbe\xc2\x97\x90\x90\x96\x09\x74\xd3\x71\xac\x09\xde\x9e\xdc\xaf\xce\xbc\xcc\x62\x6e\x7f\x8c\xbd\x21\xa0\x12\x5a\xf8\xa9\x69\xce\x9e\x5a\x72\x4d\x3f\xbd\xb1\x58\x1c\x47\x5f\x35\xbe\x3a\xea\x1e\xb8\x56\x48\x61\x5e\xc5\xca\x82\xf6\xed\x33\xa6\x41\xd2\x8c\x1c\x35\x47\x18\x93\xf7\x86\x2e\x48\x9b\x6b\x6b\xc1\x68\x60\x01\x12\x6d\xab\x6e\x65\xcf\x88\x84\x19\x95\x69\x06\xaa\x9b\x51\x48\x4c\xab\x2b\xdc\x9a\x5a\xdc\xae\x82\xca\x66\xcc\x85\x1e\x87\x32\x6e\xdf\x3e\x08\x04\x3b\x99\x8a\x37\x64\xae\x75\xa1\xde\x9c\x9f\xd7\x52\xd0\x98\x89\xf3\x54\x24\xea\x5c\x53\x75\xaf\xce\x19\x37\xcc\x6f\x94\x52\x4d\x47\x0d\xae\x7b\x6e\x65\xe3\x51\x22\xf2\x9c\xf2\x74\x44\xdd\x39\x1e\x55\x3b\xfb\xfc\xd7\x4e\x7a\x1c\xd1\xea\x29\xc6\x47\x74\xa4\xe6\xd0\x69\xe5\xc2\x14\xc5\x00\x05\x31\x50\xc8\x8c\xac\x10\xba\xb9\x3c\x14\xc3\x7e\x5f\xf1\x67\xbb\x14\x63\x72\x25\xb4\xc3\x2b\x72\x11\x95\x78\xdb\xe2\x2a\xc7\x64\xe1\xef\xaf\xee\x6e\xfe\x7a\xfd\xf1\xf2\xea\x6e\xe0\xe4\x03\x27\xc7\x36\x70\xf2\x81\x93\x77\x18\xb8\x2f\x9c\x1c\xf8\xe2\x50\x5c\xdc\x2b\xc5\x0d\x8e\x55\x6d\x55\x97\x28\x50\x85\x79\x57\xfb\xa0\xdb\x16\x8d\xb2\xd3\x0f\xb6\x63\x5a\x93\xfd\x9e\x2f\x7e\xa0\xed\x88\x13\xbe\x71\x0a\x89\x7b\xc0\x6a\xe8\x6f\xc3\x26\x30\xd8\xf3\x15\x1a\x17\xd6\x49\x21\xb5\x2d\x3c\x66\xcb\x0c\xdd\xdd\xe0\x1d\xcf\xdc\x7d\x45\xf3\xca\x56\xbb\x69\xc9\x43\xac\x98\x1f\xac\x43\x55\xb9\x43\x49\xf9\x92\x14\x92\x71\x8d\x5b\xe9\xe2\xf6\xed\xe5\x25\x49\xe6\x54\xd2\x44\x83\x54\x04\x3e\x25\x50\x68\x72\xfc\x3f\x8f\xbb\x8f\x19\xc1\xd7\x81\xd6\xeb\x3e\xac\xcc\x3e\x82\x5b\xc0\x30\xb5\xc8\x57\x48\x58\x30\x51\xaa\x6c\x59\x79\x08\x36\xf3\xd1\x55\x06\x4a\x28\x0f\xa1\xc0\xec\x0b\x6f\xde\xdd\x38\xe0\x8a\xd0\xb9\x49\x80\x0c\xb1\xb5\x1f\x56\xf4\x74\x44\xc4\x10\x40\x03\xc6\xdf\x20\xba\xee\x2e\x86\x06\x8c\xdb\x49\x80\xdd\x26\x8c\x06\xd0\xd1\x16\x63\x03\x3a\x7a\x67\xf3\xba\x50\xd8\x38\x0a\x98\x9a\x58\x9c\xec\x6b\x29\xf2\x48\xdc\xec\x16\x01\x0b\xab\x3c\xbb\x4d\x47\xf5\xd8\x05\xaf\xb7\x14\x01\xa7\xd2\x56\x99\x6e\xe6\xf3\xc0\x6c\xb7\x28\x51\x33\x71\x02\xaf\x13\xc1\xa7\x6c\xf6\x81\x16\xdf\xc1\xf2\x06\xa6\x61\xbe\xfa\xf6\x7c\xa3\xdb\xd2\x85\xff\xe2\x05\x6a\x44\x2e\x3b\x58\x98\xeb\x32\x5a\xd0\x51\xac\xd0\xfc\xf0\xb0\xfc\x78\x51\xf4\x51\x22\xe8\x5b\x0b\xe9\xb2\x85\xeb\x74\xd9\x58\x09\x16\x51\x02\x33\xc3\x24\x51\xdf\xe2\x47\x47\x37\x25\x53\x77\x3d\x44\x09\x32\xbf\xab\xd1\xce\x99\x22\x30\x9d\x42\xa2\xd9\x02\xb2\x0a\x21\x3d\x3d\x23\x93\x52\x7b\x6c\xf2\x09\x4d\xee\x1f\xa8\x4c\x15\x49\x44\x5e\x50\xcd\x26\x2c\x63\x7a\x49\x58\x8c\xfa\x5a\x2e\x54\xc0\x01\xae\xfb\x18\x6b\xae\x34\xc5\xab\x50\x38\x43\xa0\x59\x6d\x1b\x43\x41\x7d\x82\x9c\xe5\xa6\x1e\x68\x3c\x0a\x29\xb9\x50\x9a\x24\x20\x8d\x50\x97\x2d\xc9\x83\x14\x31\x6a\x60\xec\x6a\xcc\x49\x04\x37\xf2\xbf\x3a\x17\x0b\x23\x0b\xc2\xc3\xf9\x83\x90\xf7\x8c\xcf\x46\xe6\xc5\x47\x96\x59\xa9\x73\x8c\x6d\x39\xff\x35\xfe\xa7\x4f\xa7\x88\xf8\x8c\xee\x37\xe4\xe8\x28\xb0\x2f\x51\xd8\x30\xce\xc8\xa7\xf2\x16\x03\x84\x96\x2d\xd1\xa9\xba\x50\x8c\xe8\xc3\xb4\x42\x3e\xe5\xdd\xf3\x4e\x0b\x88\x34\xcd\xfb\x07\x56\xac\xb7\xe7\x2a\x33\x86\xec\x20\xee\xed\x1d\xcc\x03\xeb\xeb\xdf\x32\x2b\xc7\x0a\x0b\x91\xbe\x21\xaa\x2c\x0a\x21\xb5\x22\x39\x68\x9a\x52\x4d\xc7\xe6\x40\x9c\xb5\xff\xc4\x10\xb0\x33\xf2\x8f\xea\x43\x8b\x47\xf0\xe3\xf1\x7f\x7c\xf7\xfe\xaf\xff\x79\xfc\xd3\x3f\x9a\xdf\xa1\xb8\x66\xb3\x8b\x1a\x0f\x04\xbe\x82\x2a\x20\x19\x73\x91\xc2\x15\x52\x87\x7f\xaa\x56\xc0\x8f\xfb\x42\x53\x5d\xaa\xf1\x5c\x28\x7d\x79\x5d\xfd\x59\x88\x74\xf5\xaf\xc0\x1c\xa7\x1e\xca\x3d\xb8\xb6\xd7\x54\x77\x47\x98\x27\x51\xa5\x1f\x5a\xb0\x1f\x40\xaa\xce\x35\x5b\x9a\xad\x75\x1e\x5c\xaf\x15\x14\x7e\x32\x87\x9c\xe2\x3f\xbf\xf6\x53\x60\xee\xe3\x07\xc9\xb4\xc6\x18\x30\x57\xa0\x42\x4c\xcf\x3c\x6b\xb5\x4a\xd5\xe2\x75\x70\x81\xb6\xa8\x9c\xbf\x5a\xc1\xc8\x13\x86\x33\xe2\x66\xcb\x72\x80\x1a\x6e\x65\x2d\xe4\xf3\xe2\xfa\x92\x2c\xec\x0c\xf7\x68\x72\x9e\x8f\x5d\x67\x10\x5d\xdd\x0a\x66\xd8\x5f\x57\x54\xb9\x65\x6a\xa8\x6e\x4e\x61\x46\xca\x43\x17\xe8\xc6\x32\x1f\x9b\x8e\xfb\x9e\x2f\xcc\xb8\x8a\x4c\x81\xea\x52\x02\x99\x51\xed\x0b\xf8\x00\x37\x3a\x79\x60\x8a\x4a\x0f\x79\x66\x78\x0a\xf7\x88\x14\xa1\x2c\xd7\x74\xb2\x10\x59\x99\xe3\xe5\xd6\x13\xee\x1d\x5f\x77\x8d\xa2\xca\x79\x05\xd8\x45\x51\xb4\x0e\x03\xb9\x30\xcc\x7e\x81\x39\xc7\xf6\x19\x34\x3d\x62\x99\xa6\x76\x6d\x26\xa5\xa9\xd4\x51\xea\xf2\x91\x1a\xc0\xcb\x5b\xba\xeb\x00\x0f\x6b\xe5\xca\x5f\xdc\x77\x51\x37\x5b\x3c\x8d\x5c\x64\xc5\x1c\x33\x87\x66\x95\x1e\xbc\xf1\xb4\x9f\x55\x10\x0e\x8a\xfd\x13\x2d\x6c\x19\xcb\x99\xb6\x6a\xe5\xeb\xdf\xfe\xb1\x41\x68\x8f\xee\x86\x67\x53\x73\xa2\xec\xd8\x4d\xba\x92\xd9\xae\x8f\xa8\x49\x55\x72\xb4\x7f\x2e\x0e\xd2\x44\x2a\xc0\x99\x4c\x31\xad\xda\x8c\x50\x9f\xa0\x05\x95\x55\x94\x50\x39\xc9\x98\x9a\xc7\x29\x61\x7d\x39\xad\x56\xc7\xf4\xaf\x00\xc3\x8e\xb5\x2c\xa1\x4a\xe8\xaa\x65\x0f\x33\x17\x2b\x54\x46\x20\x61\x9b\x89\xb9\x5d\x37\xaf\x76\xe7\x5f\x63\xee\x56\x1d\x0d\x3f\xfe\xd5\xb3\xcd\xc3\x94\x66\xea\xe5\x26\x82\x72\x02\x52\x0a\x59\xb9\xa1\x24\xe8\x52\xf2\x3a\xc9\xfd\x5a\xa4\x24\x91\x60\xa1\x09\x7b\xa4\xac\x93\xa6\x51\x04\xe7\x2c\xb0\xbb\x22\xbe\x90\x1d\xed\x7a\x33\xb4\x35\xef\x37\x2b\x1a\xd8\x8b\xcb\x7a\xf3\xda\x60\x89\x31\x04\x41\xd3\x3e\x38\x26\x54\x15\x91\x33\xdb\xd2\x97\x3c\x74\xa7\x01\x07\x3c\x1e\x8f\x8f\x2d\x95\x42\xda\xab\xd4\x5a\x14\xcd\xe7\xbd\xba\x16\x6a\xa1\xea\x19\xcc\xf0\xbc\x61\x54\x76\x4b\x84\xb9\x42\x7e\xaa\xbc\x8b\x35\x96\xac\xfe\x19\x28\x53\xbe\x12\xd9\xd7\xbd\xb6\x81\x79\x2a\xfd\xe2\x55\x8c\xfe\x8d\x4d\xd5\xaf\xea\xa9\x59\xe1\xc7\xe2\xd3\x18\x95\x03\x94\x0e\x35\x14\x9f\xd8\x2e\xc7\x49\x51\x9e\xb9\xee\xc7\x39\xe4\x42\x2e\xab\x3f\xa1\x98\x43\x0e\x92\x66\x23\xa5\x85\xa4\x33\x38\xab\x06\xb7\x3f\xab\xfe\xb2\x3f\x6c\x91\xb7\xfe\x6b\x1b\xdd\x51\x67\x5e\x39\x7b\xdf\x17\xa8\xcb\xf9\x75\xeb\x89\x02\x55\x6d\xab\x67\xe0\x3f\xc7\x55\xc0\x9c\xf5\xb9\x55\xb3\x88\x2e\x75\xcb\x8d\xd4\x59\x2d\x70\x60\xdc\x87\x15\xf2\xd4\x71\x7f\xf8\x10\x21\x29\x5b\x30\x15\x03\x46\x6b\x83\x7b\x82\x39\xbb\x86\x28\x75\x51\x6a\x57\xf9\xba\xb2\xa0\x7c\x2a\x84\xc2\x68\x91\xaa\x78\x62\xcb\x34\xf8\x3a\xd4\xf3\x82\x32\x86\x06\xc9\xdf\x90\xff\x7d\xf2\xb7\xdf\xfc\x3c\x3a\xfd\xd3\xc9\xc9\x8f\xaf\x46\xff\xfe\xd3\x6f\x4e\xfe\x36\xc6\x7f\xfc\xeb\xe9\x9f\x4e\x7f\xf6\x7f\xfc\xe6\xf4\xf4\xe4\xe4\xc7\xef\x3e\x7c\x73\x77\xfd\xfe\x27\x76\xfa\xf3\x8f\xbc\xcc\xef\xed\x5f\x3f\x9f\xfc\x08\xef\x7f\xda\xb1\x93\xd3\xd3\x3f\x7d\x15\x4c\x3a\xe5\xcb\x8f\x81\xdc\xdb\xb6\x51\xb4\xc2\xe5\xab\x3d\x46\x72\xb5\xb5\xae\x42\xc6\xf5\x48\xc8\x91\xed\xfa\x0d\x2a\x29\x81\x03\xf8\xed\x15\xfb\xfc\xdf\x78\xae\x59\xdf\x66\x95\x50\xd8\xa3\x03\xfe\x5c\x82\x86\x82\x44\x82\x7e\x89\x30\x19\x3b\x92\xd7\x0c\x57\x50\x3d\xbe\xb4\x1b\xf4\x97\x10\x39\x53\xd5\x4f\xc6\x75\xad\x35\x29\xa3\x5e\x8d\x6b\x25\x88\x12\x6b\x47\x74\xcf\xdd\x43\x20\xa0\x3a\x19\x22\x6d\x42\xda\x10\x69\xb3\x85\x94\x21\xd2\x26\xa8\x7d\x96\x91\x36\xb7\x96\x27\xfd\x22\xc3\x6c\xd6\x13\xcc\x4c\xa7\xf7\x9d\x0b\xce\x74\xce\xdc\xd9\x96\xe9\x96\xd3\x62\xef\xde\x80\x2f\xba\x06\x57\xc7\x4c\x75\xf3\x66\x0f\x2d\x48\x21\x8a\x32\xa3\x7a\x4b\x16\x45\xa4\xbc\xb7\x9e\x79\xce\xfe\x32\x07\xee\x44\x3f\x17\xc3\xcf\x38\xc9\xcb\x4c\xb3\xa2\x63\x42\x40\xa5\x5a\x56\xe0\x90\x84\x2a\x25\x12\x46\x7d\x22\xb8\x03\xb6\x52\xda\xbf\x32\x5a\xe6\x35\xbd\xc7\x1c\x9a\x04\x52\xe0\x49\x47\xcb\xe1\x0f\x16\x8c\xd2\xcf\xed\x64\x69\xee\xa1\xf7\x7c\xe1\xee\x24\x92\x96\x36\xc1\x15\x6a\x5f\x69\x94\x71\xbf\xac\x6c\x46\x73\x2e\x5d\xb6\x42\x23\xa9\x11\x25\xc8\xca\x88\x58\x81\x67\x57\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\xe5\x8f\xde\x7d\xa1\xe1\x13\x9a\x6a\x0a\x09\x05\xf0\x0a\x79\xd8\x7b\x60\x81\x26\xf3\x21\xe3\x9c\x54\x76\xd1\xb8\x17\xf6\xed\x26\x4b\xd9\x70\x5b\x93\xe1\xb6\xde\xa3\x0d\xb7\xf5\x70\x5b\xbf\xc8\x6d\xed\xb8\xd5\x97\x7f\x55\x47\x46\x5a\x42\x0c\xb9\x43\x19\xa0\xde\xb6\xa1\xec\x90\x33\x3f\x27\xda\x57\x75\x14\xeb\x18\xcf\x73\x1c\xb9\xdb\x89\x6b\x33\xd9\x2a\xe8\x42\x0b\xcb\xf6\xc8\x9c\xcd\xcc\xf6\xcc\x60\x01\x99\x53\xab\x49\x4e\x39\x9d\xd9\x12\x26\x5a\x54\x25\x7c\x85\xc4\x0a\xa5\x92\x75\x44\x4f\x5f\xc1\x04\x44\x0b\x96\xe1\x32\x99\xa0\x29\x7e\x29\x45\x96\x19\x79\x25\x63\xf7\x40\xde\x41\x91\x89\xa5\xab\x42\xc2\x53\x72\xab\xa9\x86\x69\x99\xdd\x82\xee\x14\xde\x1d\xc4\x71\x90\xe0\xeb\x32\xcb\xae\x45\xc6\x92\x4e\xde\xbf\x18\x5b\xf1\x12\x37\x60\x51\x66\x19\x29\x90\x90\x6e\xfb\xf0\x23\xc7\xab\xfc\x22\x7b\xa0\x4b\x75\x46\xae\x60\x01\xf2\x8c\x5c\x4e\xaf\x84\xbe\xb6\x46\xa4\x6e\xfd\x36\x31\x41\x6c\xe7\x84\x4d\xc9\x1b\x2c\xbf\xa8\x89\xa6\x33\x8c\x2d\xf6\x61\xc4\x67\x66\x43\x35\x07\x25\xc2\x30\xca\x07\xa6\x0e\x69\xdb\x0b\x3f\xa5\xbf\xc6\xd1\xcd\xd5\xd9\xf9\xd4\x06\xed\xd5\x8c\x4d\x21\x59\x26\xd9\xc1\x18\xe6\x45\x82\xe9\xb5\x75\xb1\x97\x06\x3b\x51\x4b\xa5\x21\xf7\x78\xf6\x68\xd2\x65\x9c\x48\x50\x85\xe0\x0a\xa5\xbc\x9a\x4b\x54\x2f\x42\x30\x49\xa6\x63\x52\x47\x44\x8b\x6f\x67\xc5\x20\x54\x25\x28\x84\xd2\xb7\x9a\x4a\xdd\x55\x3e\x89\xa5\x0b\x5c\x7b\x42\xcc\x49\x4e\x68\x96\x41\x4a\x58\x9e\x43\xca\xa8\x36\x72\x3b\x9d\x6a\xac\x62\xd0\x60\xf5\xca\xc6\xec\x37\xf2\x46\xe6\x94\xa7\x19\x48\x32\xa5\x2c\x53\xdd\x33\x07\xda\xd0\x5c\x46\x3e\x07\x99\x33\x8e\xde\x0b\x1b\x75\x8a\xd1\xdf\xe6\xaf\x24\x11\x32\x75\xf5\x02\x98\x56\xfe\xab\x20\x26\x6a\xda\x47\x94\xec\x1a\xdb\x7b\x35\x68\x97\x4c\x32\x91\xdc\x2b\x52\x72\xcd\x32\xfb\xf2\x42\xdc\xa3\xfe\x92\x21\x3b\xe9\x3c\x74\x77\x2e\x55\xfd\x73\x54\x1d\xb0\x91\xa1\x4a\x9d\xff\xba\xfe\x0a\x3f\xe8\x48\x5c\x04\x2d\x3a\x86\x0e\x0d\x9f\x20\x89\x56\x6a\xe7\xfd\x27\x48\x5a\x85\xae\x1c\x90\xaa\xd9\x51\x0e\x3c\x39\x92\xdf\xd1\xb6\x9e\xd5\xed\x0e\x00\xad\x6e\xb6\xd8\x21\x3d\x6f\xdd\x22\xb8\x92\xbd\x7e\x4d\x32\xc6\xa1\xbd\x30\x8a\xa5\xd0\x5e\x1c\xeb\xf6\x74\x4a\x2e\x49\x99\xc4\x1a\x43\x4b\x8f\xfa\x15\x4c\x9a\xa7\x05\xcb\xf0\x08\xa1\xc9\xc9\xf1\xf9\xf1\xe9\xda\x1e\x39\x56\x98\x7e\x61\xaf\xc5\xb1\x83\xce\xae\x5e\x4a\xb1\xbc\xc8\x96\xf8\x1e\xc7\xe9\x19\x61\x3a\x46\x8c\x90\xb9\x0d\x65\xc9\xfd\xac\x38\xa8\xef\x33\xa2\x04\xd1\x92\xfa\xd2\x7a\xf6\x53\xf3\x90\x96\xa5\xbb\xd0\x4f\x8e\x7f\x3e\x3e\x23\xa0\x93\x53\xf2\x20\xf8\xb1\xc6\xe9\x1b\x93\x3b\x41\xca\xe0\x9c\x27\x52\x13\xb2\x14\x25\xe1\x00\xee\x6c\x15\x19\x4b\x98\xce\x96\x78\xdd\x10\x51\xda\x0c\x3d\x23\x5a\x04\x40\x94\x37\xdb\xfb\x4f\x4c\x3b\xf0\x0d\xc3\xbf\x5f\xe1\x6e\xb2\x57\x16\xa1\x46\x19\x59\xc0\xf9\x1c\x68\xa6\xe7\x36\x9b\x81\x0b\x3e\xfa\x27\x48\x81\x30\xe6\xdc\x7d\xf3\xc5\x95\x89\x8f\x18\xc8\xf4\x4c\x15\xd5\xcc\xb5\xf7\x0d\x74\x16\x89\xc8\x2a\x3f\xfa\xf6\xee\xee\xfa\x1b\xd0\x4d\x2e\xcf\xf1\x43\xf2\xcd\xfb\x3b\x9f\xc3\x82\x86\x7e\x90\x53\x21\xf3\x1e\xb0\xf7\x38\xc1\xb5\x23\x52\x08\xd9\x87\x5b\x66\x2e\x54\xd0\x72\x92\x67\xb8\x62\xbe\x15\x4a\x5b\x5f\x8e\xd5\x4d\x38\x26\x36\x8a\x76\x42\x86\x4f\xdf\xbf\xbc\x1e\x93\xbf\x8a\xd2\x4c\xc8\x84\x4e\xb2\x65\x55\xc8\x48\x41\x68\xd1\x53\x42\x8e\x0c\x29\x47\xe6\x06\x31\x3b\xff\x5b\xa0\x29\x48\x85\x0c\x1a\x68\xa4\xf2\xac\x11\x8e\x7b\x83\xb6\xa8\x4b\xf9\xb6\x54\x5a\xe4\x64\xee\x5e\xbb\x0d\x71\xee\x0e\xe7\xd8\x1e\x57\x07\x27\x2b\xa1\xb0\x4c\xdc\xfd\xe6\x8b\x63\xd1\x6b\xdc\xcb\xce\xbb\xfb\x7c\x62\xc5\xd4\xe6\xb4\x39\x07\x87\x05\x2a\x75\xbc\xcd\x6c\xd5\x68\x71\xaf\x51\xca\xfb\xc6\xcb\x19\x20\x61\xe0\xe7\xab\x1d\xa1\xb3\x27\xb8\xa7\x78\x69\x08\x24\x5a\xa8\x3d\x79\xb6\xb2\xff\x46\xa0\x75\x9b\xcf\xda\xa0\xbb\x5b\xcf\x37\x75\xce\x54\x85\x16\x90\x50\x2e\x38\x4b\x68\xc6\xfe\x09\x29\x29\x0b\xc1\x5d\x6e\x1d\x4a\xb6\x09\x55\x30\x42\xcf\x3b\xd7\xae\x16\x71\x8d\x76\x6d\xb8\x83\x16\x02\xc5\x3d\x0c\x9e\x33\xec\xde\x52\x1d\xb3\xf6\x7d\xb4\xf2\xf2\x81\xd0\xed\xcd\xb6\xe6\x50\x6f\x2d\x56\x9c\x1d\x4f\x3e\x0b\x71\x92\x44\x02\x5e\x58\xc7\x36\xd3\x82\xd0\x24\x41\x3c\x6f\x7b\x5d\x21\xe3\x55\x20\x17\xe1\xfb\x2b\xda\xbc\x1a\x11\xb0\x6f\xb2\x97\x8d\x39\x90\x84\x97\xf9\x04\x64\x0d\x0c\x29\xf5\xfa\x9c\x46\xb1\xba\xb8\x61\xed\x70\xde\x4b\xeb\x65\x0c\xca\x67\x40\x5e\x9b\x91\xff\xf0\xfb\xdf\xff\xee\xf7\x11\xc6\x31\xaf\x57\x95\x08\xe5\xe4\xf2\xe2\xea\xe2\xef\xb7\x3f\xbc\x45\xb8\xf9\xd0\xee\x23\x25\xc9\xc6\x4e\x91\x8d\x9a\x20\xfb\xac\xe9\xb1\x08\xdc\x18\xcc\x65\x63\x1f\x89\x5b\xa4\xca\x6c\xc2\x52\x59\x88\x7a\xa7\x93\x34\xaa\xe1\x1a\x35\x2a\x7c\x77\x36\x9d\x79\x86\x61\xf5\x82\x53\xa9\x0c\xa0\x88\xa6\xf1\xdf\x9a\xde\x5a\xe5\x80\x48\x5a\x4a\x5b\x95\xb6\x72\x5e\xd5\xb6\x7c\xe7\xb4\x42\x1a\xbe\x20\xe5\x5f\x41\x22\x78\x1a\xa2\x02\xc4\x12\x69\x1d\x25\x51\xcf\xdc\xad\xed\xd3\x9b\x88\xeb\xab\xc4\x0d\x86\x9a\x64\xe8\x8a\x92\x6a\x55\xe3\xf0\x49\x8b\x06\x81\xbd\xfd\xe1\xdf\xba\x3b\xc8\x92\xe2\x56\x24\xf7\x11\x4d\x64\x81\x0c\xec\x9d\x39\x69\x89\xf5\x05\xde\xbd\xbd\xb6\xc4\x99\x95\xb9\xfa\x78\x57\x43\xbf\x18\x29\x9c\x92\xef\xbd\x6f\xea\x5b\xe7\x2d\xa4\x3c\x25\xf7\x50\x84\x69\x97\x86\x61\xfa\x30\xc2\x76\x14\xe1\xd8\x95\xec\x46\x94\x39\x9b\x5e\x6d\x19\x81\x8f\xfe\xb3\x12\x71\x58\x05\xa0\x86\x73\x1e\x1d\x81\x4e\x09\x99\x52\x96\x11\x8a\x56\x79\xcd\x72\x20\x0f\x73\xe0\xd6\xd8\x5f\x47\x4b\x7c\x41\x0c\xe7\x4b\xb5\x36\x1e\xfb\x90\xf0\x37\x7b\x5b\x0d\x43\x51\x31\xbe\x6c\x35\xc0\xf1\x6c\xd9\x42\x35\x1b\xd4\x80\x5d\xda\xa0\x06\x74\x54\x03\x0a\x09\xb7\x5a\x74\x96\x35\xa3\x05\xdc\x58\x32\xb6\x84\xdb\x4c\x60\x2a\x24\xac\xc6\xdb\x34\xe2\x60\x5c\xe4\x7c\x40\x64\xf0\xc5\xf5\x65\xe5\xfb\x12\xad\x58\x17\x8b\x5c\xac\xca\x64\xee\xdd\xa4\x1c\x94\x3a\xc7\xc8\x9a\xb2\xb0\x86\x65\xbc\xda\x4a\x09\xdd\xa3\x7c\x0a\x09\x90\xe3\x3c\x9e\xd5\x68\x42\xe6\x75\x81\xdb\x0f\x41\x27\xd6\x6f\xee\xc3\x8a\x1c\x4e\xac\x9f\xae\x69\x90\x3b\xbf\x9e\xd8\x44\x52\x35\x07\xcc\x9d\x85\x4f\x4c\x2b\x3b\xa8\x45\x63\xf5\x33\x6e\xe4\x85\x99\xa4\x09\x90\x02\x24\x13\x46\xc4\x28\xb9\x4e\xc5\x03\x27\x13\x98\x31\xae\xfc\x8a\x85\x90\xe4\xb7\x04\x46\x12\x31\x55\xd5\xee\x1e\x93\x9b\x56\xe5\x38\x87\x2e\x96\x88\x9a\x67\xba\x29\x3a\x8b\x34\x25\x28\xbc\xe0\x36\x28\x69\x96\x2d\xeb\x8d\xd7\x04\x08\xdd\x32\x43\xdd\x37\x84\x9d\xd9\x93\x92\xe3\x8b\xa6\x90\xd1\xa5\xcd\x20\x9f\x32\x8e\xd6\x5f\xa9\x4e\xc7\xe1\xa1\x59\x9d\x09\x14\xb2\xd1\xe7\xd6\x9d\xc1\x14\x91\x40\x93\x20\x1c\xe3\x21\x06\xec\xa9\x36\xc4\x80\x0d\x31\x60\x43\x0c\xd8\x7a\x1b\x62\xc0\xda\x6d\x88\x01\xdb\x4e\x50\x9f\x9d\x76\x43\x0c\xd8\x60\x95\x59\x6f\x43\x0c\x58\xa7\x36\xc4\x80\x3d\xd9\x7a\xc7\xa2\x87\x18\xb0\x1d\xda\x10\x03\xb6\x63\x1b\x62\xc0\x86\x18\xb0\x21\x06\x6c\x88\x01\x0b\x68\x43\x0c\xd8\xfe\xaf\x37\x38\x7f\xba\xb7\x21\x06\x6c\x88\x01\xdb\xb3\x0d\x31\x60\x2b\x6d\x88\x01\x1b\x62\xc0\x1e\x6b\x43\x0c\xd8\x10\x03\xe6\xda\x60\x6d\x5c\x6b\x43\x0c\xd8\x86\x36\xc4\x80\xed\x37\xce\xa0\x06\x84\x75\xf6\x2c\x6a\x80\xd2\xa2\xb8\x65\xb3\x00\x5c\xc8\x58\xc7\xe0\xb6\xa2\xc4\x81\x46\x2a\x57\x6c\x57\xd9\x0f\xbd\x1d\x4b\x39\xc8\xbe\x66\x44\x58\xe3\x26\x99\x80\x51\x11\xcc\x6b\x15\x21\xb7\xc9\xe5\x14\x1d\xc8\x0d\x24\x37\x73\x2a\x3c\x4c\x20\x6b\x95\x75\x68\x8b\xcf\xfe\x76\x63\xdc\xe8\x2e\xdd\x29\x68\xcc\x47\x42\xb9\xad\x8c\xea\xca\x64\x9b\xeb\xfd\x5a\xa4\xca\x57\x92\xe0\x82\x8f\x2c\x58\xeb\xd8\x10\x3c\x16\x6a\x1c\x60\x0d\x0e\x44\x66\xb3\x31\x72\xd7\x52\x4c\x0e\x86\xce\x76\x8d\xf1\x47\x2c\x71\x01\x7a\x62\xda\x42\x5c\xb3\x04\x76\x44\x5a\x6b\x07\x86\x61\xb1\x66\x0f\xc1\xc5\x1c\xc3\xae\x82\x02\x0f\x89\xe6\xb6\x77\xe4\x94\x47\xa9\x54\xe7\x85\xb0\xff\x57\xc7\x4d\x35\x02\xa6\x3a\xfb\x51\x0e\x0c\x2f\x17\x12\x25\x75\xb0\x08\xa9\x9e\x44\x98\x45\x88\x8a\x8a\x29\x2b\xf5\x34\x1a\xaa\x9f\x91\x50\x7d\x8c\x82\x3a\x44\x04\xd4\xc1\xa3\x9f\xe2\xb8\xd5\x23\xb8\xd4\x23\x49\xa4\xcf\xe0\x9e\x72\x81\xf4\x77\x73\x09\x6a\x2e\xb2\xce\x0c\x27\x16\xb3\xf9\xc0\x38\xcb\xcb\x1c\xab\x50\x18\x9e\xc2\x16\x55\xb0\xbf\xf2\x2c\xc3\x5d\xf7\x36\xe2\x00\xcb\x55\xa4\x80\x65\xc0\x29\xcb\xcc\xd6\x42\xb0\xd0\x39\x5d\xa0\x50\x5a\x26\x09\x40\x1a\x22\x96\x36\xad\xd5\xbf\x1b\x57\x14\x5a\x8c\x7e\xa6\xc8\xeb\xb0\xab\x26\x4c\xef\x69\x98\xf3\x7e\xf7\xdb\x4e\x7d\xcc\x64\x11\xe7\x96\xfe\xe6\xe6\xfa\x6d\xeb\x96\xc6\x0f\xbe\xc5\x63\xfc\x76\x0e\xc9\xfd\x8d\x0b\xa5\x39\xdc\xcd\x1c\x6e\x66\x0a\x32\x31\xc5\x10\x0c\x42\xad\x28\x6d\x1f\xb2\x90\x7a\xc5\x05\x3a\xc3\x55\x04\xb9\x60\x09\x8c\x5f\xc0\x50\x11\x4b\xf9\x0f\x3f\x08\x04\xdd\x04\xf8\xe2\x7d\x11\xbb\x6e\x2d\x39\x95\x87\xa1\x61\xa3\x72\x94\x62\xd0\x68\x46\x93\x6a\x6d\x66\x9b\x0f\x5d\x10\x19\x27\x0a\xa0\x52\x68\x66\x4c\xcf\xcb\xc9\x38\x11\xf9\xb9\x61\x1d\xf6\xff\x26\x99\x98\x9c\xe7\x54\x69\x90\x46\xc7\x71\xd7\xfa\x28\x31\x14\x30\x3e\x1b\xe7\xe9\xe9\xf8\x57\x41\x34\x5c\x3a\x5b\xb9\x4b\xc3\xda\x62\x24\x98\x80\xe1\xfb\x42\xae\x58\x0b\xcc\xa4\x84\x6f\xd2\xe0\xfb\x3b\xb4\xa8\x48\x60\x58\xf2\x41\x42\x92\x07\xae\x4d\x22\x38\x04\x62\x32\x95\x7e\x84\x1d\x3f\x5b\xc8\x71\x94\xb3\x1a\x29\xd4\xb8\x47\x61\xc6\xbd\xd1\x85\xfa\x12\x5a\x1c\x2d\xac\x38\x56\x48\x71\x94\x70\xe2\x18\xa1\xc4\xf1\xc2\x88\xe3\x84\x10\xc7\x0f\x1f\x7e\xb6\xd0\xe1\xcf\x22\x6c\x38\xa2\x7f\x2c\x52\xb8\xf0\x4b\x84\x0a\xf7\xd7\x06\x43\x22\x84\x07\xbf\x5c\x68\x70\x94\x79\x8c\xaa\xc5\x06\xb2\x84\x03\x84\x02\xbf\x84\xff\xff\xd9\x7c\xff\x11\xfc\xfe\x31\x7d\xfe\xd1\xfc\xfd\xcf\x16\xf2\x1b\x1e\xee\x1b\xd5\xa6\xf0\x22\x61\xbe\x31\x43\x7c\x83\xd7\x97\x71\xa6\x19\xcd\xde\x41\x46\x97\xb7\x61\x81\xa0\xb1\x56\xe2\x6a\x2d\x58\xd4\x9a\xad\xdb\x71\x0d\x73\xaa\x88\x77\x75\x3b\x88\x17\xef\x4b\x77\x22\x30\xa1\xe8\x71\x36\xef\xd7\xd9\x6b\x4d\xfa\xe7\xb9\x26\xbd\x31\x8f\x5b\x5c\x95\x9e\xec\x9a\x6f\xc5\x03\x11\x53\x0d\x9c\x9c\x30\xee\x77\xce\x69\xc3\x4a\x53\xbb\x47\x82\xfd\x1d\xa6\xd7\xd7\xaf\xfc\x20\x5f\x9e\xdf\x03\x3d\x43\x4a\xf5\xda\xf3\xe5\x68\x7c\xda\xf5\xe5\x1e\x9c\x96\x59\xdb\xfd\x65\x5d\x62\x71\x7c\x5f\xaf\xc7\xe4\x83\x13\x27\x5e\x23\x3d\x15\x2b\xa2\x3c\x25\x0e\x9f\xeb\xcb\xdb\x27\xc1\xa1\xee\x6d\xe5\xa6\x8a\x4d\x6f\xc7\xb3\xd8\x1b\xd8\x48\x99\x82\x50\xf3\x14\x0a\xa0\x83\xd1\xb5\x37\x46\xd7\x03\x45\x60\x7f\x79\xda\xd6\xcb\x47\x5c\x0f\xda\xd6\x2f\x45\xdb\x6a\xc0\xe2\x7d\x23\x69\x02\xd7\x7d\x12\xde\x3c\x03\xa9\x13\x01\x6b\x19\xae\x62\x17\x1c\xc0\x26\x8e\xd5\xa0\x87\x88\xef\x37\x2d\xb3\x6c\x69\x6d\x88\x2d\x04\xcc\xee\x5b\xeb\x6e\x0e\x6b\xd0\x81\xe8\x4a\xdd\x40\x5d\xad\x9b\x14\x52\x38\x89\x44\x96\x9c\x1b\x11\xc3\x1d\x27\x43\xbc\xd1\x45\x14\xf0\xee\xe6\x74\xda\x02\x36\x74\x41\xe8\x18\xe8\x39\x07\x52\xe7\x2f\xb5\x09\x31\xa3\x4e\x85\x4c\xd8\x24\x5b\x92\x39\xcd\x8c\xb2\xe4\x82\xb4\xef\x59\x96\xb9\x6e\x02\x82\xc2\x41\x5b\xd7\xb3\x95\x68\x32\xc1\x67\x38\x19\xd4\x12\x02\x9f\x0a\x48\xcc\x98\x49\x06\x94\x97\x85\xa5\xd3\xc8\x47\x4b\x51\x4a\x4f\x67\x50\x54\x7c\x63\x74\xa6\x08\x67\xd9\x99\x9f\xf2\x36\x04\xe6\xfa\x9e\xaf\x4d\xca\x0a\x52\x87\x5e\xf9\xc0\x14\x9c\x61\x9f\x9d\x69\xb2\xb4\xf8\xaa\xfd\x76\xdf\xd8\xcf\x0a\x29\x16\x2c\xad\x63\xf4\xcd\xb6\xc0\xf8\xf8\xce\x63\xfd\x80\xfd\x7a\xd6\xca\x05\x1f\x71\x98\x51\x14\x8f\x1d\x43\xb3\x11\x9d\x76\x7c\x1b\x3f\xc8\x53\x96\x50\x0d\x0a\x73\x12\x5a\xd0\xb6\x0b\x46\x3b\x53\x62\xde\xa7\xb1\xa3\xc8\x09\x17\x44\x60\x66\x61\xc9\x99\x5e\xa2\x47\x6f\x5e\x6a\x92\x8a\x07\x7e\x1a\x72\x30\x6d\x98\x03\x25\x13\xd0\xb4\x4e\x0e\xf4\x22\x99\x22\xc0\xe9\x24\x33\x67\x0f\x23\xfe\xef\x36\x6e\x00\x32\x05\xaa\x4b\x09\x64\x46\x75\x00\x97\xd8\x20\xcd\xdb\xf5\x7c\x7c\xdb\x31\xe5\xfc\x75\x53\x52\x72\x05\x81\x82\x6c\x34\x15\xa0\x63\xc6\xab\x39\xd1\xa2\xd4\x3d\xb9\x47\xb6\x99\x8e\x6c\xe6\x4e\x43\x49\x64\x39\x28\x22\xca\x00\x4b\x5e\x4b\xfd\x73\xc3\xc5\xd4\xf0\x06\xbb\xd3\xc6\xd6\xd5\x6d\x1a\x63\x87\x5d\x35\xa4\xf2\x06\x3e\x81\x0f\xb7\xb2\x19\xd4\xef\xae\x6e\xff\xfe\xfd\xc5\xff\x7a\xff\x7d\xb7\x85\x7f\x4f\x93\x79\x13\x5b\x9c\x13\x8a\x17\x05\x32\xf9\x39\x5d\x00\xa1\xa4\xe4\xec\xbf\x4b\x17\xf2\x76\x52\x8d\xd7\x91\xad\x46\x49\xef\x09\x12\x7c\xcd\x2d\xd1\x89\x73\xc4\x58\xd3\xef\x99\x42\xa0\x6a\x24\xc2\x05\xfe\x0b\x05\x64\x2a\x45\xbe\xa2\x68\x91\xab\x2a\xb8\x6e\x69\x6e\x18\x6a\x55\xb3\x39\xc8\x6e\x12\xf9\xbb\x8f\xef\x6f\x31\x07\xbf\x90\x16\xd8\x1d\x93\x0b\xb0\x4f\x1c\xdd\xa6\x0e\x5a\x7a\xd2\x31\xb9\xe0\x4b\xfb\xa5\x65\x66\x1d\x45\x94\x8c\x29\x0d\x28\x9c\x3a\x45\xd2\x87\x07\x1e\xbd\x1a\xe3\xff\x8e\x08\x4d\x53\x69\x34\xcd\x2a\x47\x23\x59\xcd\x32\xeb\x34\xb2\xd5\x5f\xd9\x24\x6b\x4c\x2e\x07\x8d\x69\x1c\x9d\x3a\xfc\x20\x52\xb7\x12\x28\x04\x62\xfc\x8e\x95\x6e\x95\x96\x54\xc3\x8c\x25\x24\x07\x39\x03\x52\x50\x9d\xcc\x49\x4e\x97\x24\x11\x52\x96\x85\x85\x18\x49\xa9\xa6\xdd\x46\xfe\x5a\x48\x92\x7b\xee\x6c\xb8\x99\x11\xc9\x6f\x37\x07\x82\xd6\x2c\xbb\xf9\x4f\xa6\x54\x09\xea\xfc\xf5\xab\x3f\xfe\xf6\xf7\x1d\xd5\xeb\x88\x07\xb7\x6b\xe8\x53\x40\xc8\x53\x3b\xfc\xcb\x6f\x30\x0c\xba\x6e\x21\xc3\xb8\x1d\x62\x77\x3e\x72\x43\xc5\xf8\x2c\x0b\x36\x80\x04\x9b\x01\x43\x8d\x80\xa3\xfa\x0d\xae\xbb\xda\x02\xc3\x2d\x81\x2d\x1a\xba\x9b\x52\xe2\x59\xc1\x6a\x09\xce\xdb\xbd\x1c\x43\x16\xbc\xa1\xd8\x5d\x5e\x7b\x2e\x15\x62\x3f\x42\x6d\xa2\x32\x4c\x59\xf4\x11\x3b\xac\x8d\x77\x38\x23\xaf\xc8\x7f\x90\x4f\xe4\x3f\xd0\x0a\xf6\x87\xee\x43\xc5\xb1\x31\xc5\x08\xe3\x9f\x0b\xa5\x2f\xaf\x23\x2d\xf4\x5f\xcc\x7d\x65\x7a\x34\xeb\xa1\x05\x99\x30\x67\x8e\x80\x4f\x1a\xa4\x51\x03\xdd\x1a\x86\xce\x5c\x90\x45\xcd\x10\xf8\xb9\xec\xee\xd0\xe0\x82\xcb\x69\x3b\xfa\xff\x85\xf6\x37\x0e\xfc\xad\x50\xfa\xca\x71\xeb\x26\x84\x4e\x93\x8e\x1c\x2f\xe2\x16\xbb\x0f\x19\xf5\x83\xd9\x7b\x75\x8d\x0d\x92\x0a\x4c\x80\xb0\x39\x9c\x73\x16\xc0\x1c\xfa\x73\x62\xc3\xe2\x44\xe3\x6d\xdd\xc7\xb6\xd6\x8a\x4d\x1f\x2d\x32\x4e\x49\x69\x94\xa5\x29\x44\x3a\x46\xfd\x26\x80\x0a\x33\x1b\x69\x43\x18\x78\x44\x35\x1a\x5b\x7d\xad\xf2\x0e\xe3\x81\x33\x1c\x2b\xa1\xbc\xab\x0c\x6b\x9b\x84\x29\x48\x69\xf3\x84\x27\x4b\x9f\x6e\x14\xbc\xdb\x82\xb8\x5c\x21\x85\x16\x89\xe8\x0c\x9b\x12\x73\xab\x5c\x3b\x5a\x70\xee\xd1\x57\x5b\x79\xc7\xff\xfc\xee\xfa\x8c\xdc\xbd\xbd\x3e\x23\x42\x92\xdb\xb7\x61\xc1\x4f\x4d\x13\xcc\xd1\xdd\xdb\xeb\xa3\x83\xae\x40\x23\x87\xe9\xee\xed\x75\x87\x4e\xd6\xc3\x67\x73\x5a\x8c\xee\x61\xd9\x51\xba\x8b\x21\x61\x8e\xaa\x8d\x15\xe5\x85\xec\x34\xe7\xb4\xd8\xbb\x37\x09\x34\x65\xbd\x46\x72\xf1\x59\x87\x15\xa5\xf1\x20\x5d\x72\xb1\x80\xd4\x6a\xcd\x7e\x14\xe0\x69\x21\x98\xd1\x91\x06\x9c\x97\xc7\xda\x80\xf3\xb2\x7f\x1b\x70\x5e\x36\xb5\x01\xe7\x65\x8f\x36\xe0\xbc\xd8\x36\xe0\xbc\xb4\x09\xe9\x63\x8e\xd1\x80\xf3\xf2\x64\x1b\x70\x5e\xb6\xb6\x01\xe7\x65\xaf\x36\xe0\xbc\xac\xb7\x01\xe7\xe5\x91\x36\xe0\xbc\x54\x6d\xc0\x79\x19\x70\x5e\x3e\x5f\xae\x3d\xe0\xbc\xac\xb6\x01\xe7\x65\xc0\x79\x19\x70\x5e\x9a\x6d\xc0\x79\xd9\xd2\x06\x9c\x97\x01\xe7\x65\xc0\x79\x79\xbc\x0d\x38\x2f\x9d\xdb\x80\xf3\xb2\x5f\x1b\x32\x0f\xf7\x6c\x03\xce\xcb\x80\xf3\xb2\xda\x06\x9c\x97\x27\x5b\x3f\xcc\xe3\x03\xce\xcb\x80\xf3\xf2\x68\x1b\x70\x5e\x06\x9c\x97\x47\xdb\x80\xf3\xd2\xa1\xf5\xce\xe8\x3a\xe0\xbc\x0c\x38\x2f\x8f\x8d\x31\x68\x5b\xfb\xb5\x01\xe7\x65\xc0\x79\x59\x6b\x03\xce\xcb\x7a\x1b\x70\x5e\x06\x9c\x97\x01\xe7\x65\xc0\x79\xa9\xda\x80\xf3\xf2\xa5\xdb\x9d\x24\x28\xf6\x4f\xb8\x16\x19\x4b\x96\xc1\xd9\x3e\x37\xa0\x44\x29\x13\x73\x63\x63\xb7\xa4\xc0\x7e\x2b\x8b\x42\x90\x90\xdd\x33\x08\x85\x9b\xc6\xc4\x35\xa1\x14\xa4\x9b\x83\xe7\x98\x82\x5e\xc0\x29\xf8\x17\xbc\xea\x1e\x41\x30\xf2\xe5\xb3\xed\xf4\x75\x33\x96\x06\x6b\xed\xcd\x17\xe9\x43\x3a\x67\x13\xf6\xa8\xda\x45\x5a\x54\xcc\x96\x6d\xdd\x5c\xb4\x28\x32\x16\x92\x18\x4b\xc8\x6d\x89\xd2\x05\x38\x17\xb8\x7a\x43\x92\xa2\x3c\x23\x39\xe4\x42\x06\x24\x46\x44\xd0\xe0\x5a\x5b\xa5\x0f\xeb\x74\x63\x09\xf2\x93\xaf\x05\xce\xff\xd2\xea\x0b\x35\x4a\x55\xb5\x56\xcc\xb3\xc3\xa0\x58\xb3\xcb\xe9\x6a\x30\x2a\xd3\x2d\x2b\xd0\x95\xd0\x37\xee\x70\x1f\x6c\xbd\x22\x47\x2c\xf8\x29\x3c\x18\x6a\xd5\x5b\x91\x17\xa5\x86\xd6\xc5\x66\xa7\xd8\x2a\x1d\x4c\x85\x32\xf4\xc3\x64\x83\x26\x82\x4f\xd9\xcc\x69\xdf\xe7\x39\xe5\x74\x06\xa3\x6a\xb6\x47\x35\xd4\xc3\x79\xe7\x8b\xfa\x60\xa9\xa0\x49\x46\x59\xf7\xc0\xc1\x58\x6c\xe2\x2d\x52\x81\x30\x60\x75\x40\x3d\xe6\xa6\x55\xd3\x7c\x56\x85\x8d\x33\xcb\x37\xc6\xfe\x2b\xfb\xe3\xb3\x00\xed\x91\x6a\xb4\x55\xa0\x62\xb4\x61\xa7\x86\x29\x8c\x56\x4d\x4c\xa1\x00\xa3\x11\x58\x03\x6a\x77\xb9\x7f\xc9\x69\xce\x12\x7f\xc2\x2e\xb2\x4c\x24\xd6\x26\xd3\xd6\x2a\x63\x90\x6c\x94\xdd\x3c\x2f\x35\x9d\x64\x30\x26\x97\x16\xa2\x42\xf0\x6c\x69\xce\x9f\x02\xed\x43\x14\xdc\xe6\x0f\xd3\x24\x43\xe2\x5f\x03\x63\x5f\x37\x0a\xe5\xb8\xa9\x2c\xa6\x06\x70\xc3\xca\x04\x07\x02\x5c\xcb\xa5\xd9\x7f\xd7\x22\xbd\x35\x5b\xb0\xf5\x74\x30\xd4\x46\x60\xc8\x6b\x8c\x70\xd7\xc0\x50\xd7\x38\x01\xaa\xe1\xc1\xa9\x71\x03\x53\x6b\x17\x82\x45\x0a\x6a\x66\xfc\xb4\xb6\x45\x21\xd2\xf1\x06\xd6\x44\xc4\x34\x90\x02\x33\xe2\xb5\x48\x8d\xd0\x24\xc1\xf2\xa7\xea\x8c\x5a\x03\xe2\xa5\x21\xee\x1e\x2d\x7e\x54\xd7\xd2\x14\x5d\x50\x96\x99\x03\x1c\x48\xc0\x3a\xea\x62\x98\x57\x26\x92\xaf\xc2\x05\xe7\xf7\x69\xb3\xb8\xb4\xae\x56\x66\x58\x32\x17\x0a\x38\xf2\x4b\x5a\x65\xf0\x54\xf9\x05\x8e\xc5\xa4\xf6\x2e\x0e\x8d\x22\xbe\x9c\x12\xc8\x0b\xbd\x3c\x23\xb0\x00\xb9\xd4\x73\x8c\x36\xa8\x70\x43\x91\xad\x31\x45\x72\x9a\x36\x76\xc7\x19\x11\xde\x00\x1d\x38\x3c\xde\x0f\x4e\x27\x2b\x33\x6d\x35\x34\xa6\xaa\x34\x8a\x43\xef\x9a\xd8\x70\x36\x24\x94\x69\xc6\x84\xa3\x21\x08\xa5\x9a\xb3\x6e\xc0\xb5\x24\xe2\x59\xf8\x1e\xa9\x68\xa4\x8e\x98\x2d\x91\xd3\x4f\x68\x9e\xa4\xb9\x28\xb9\xb6\x38\x35\x56\x63\xa8\xa4\x3c\x9b\x60\xf3\x82\xf1\x72\xcf\x2a\xdb\x93\x38\x57\x3b\x4d\x3d\x34\xc5\x75\x8c\x3c\x65\xaa\x35\x48\xfe\x86\xfc\xef\x93\xbf\xfd\xe6\xe7\xd1\xe9\x9f\x4e\x4e\x7e\x7c\x35\xfa\xf7\x9f\x7e\x73\xf2\xb7\x31\xfe\xe3\x5f\x4f\xff\x74\xfa\xb3\xff\xe3\x37\xa7\xa7\x27\x27\x3f\x7e\xf7\xe1\x9b\xbb\xeb\xf7\x3f\xb1\xd3\x9f\x7f\xe4\x65\x7e\x6f\xff\xfa\xf9\xe4\x47\x78\xff\xd3\x8e\x9d\x9c\x9e\xfe\xe9\xab\xee\xde\xc7\x50\x57\x7b\x3c\x47\x7b\x24\x37\xfb\xb3\x38\xd9\x1d\x8f\x3d\xf8\xe1\x77\x57\xe0\xda\xf1\x77\xde\x89\xc7\x8e\xbf\x0c\xb6\xc9\x5c\x4e\xeb\xf1\x99\x22\x22\x67\x5a\x43\xea\xee\xde\x06\xf6\xcd\x8a\x3d\xc8\x31\x2c\x84\xad\xa2\x78\x7b\x37\x30\x58\x6a\x33\x52\x67\xb2\xaa\xfb\x15\x2d\x60\x9c\xb0\xbc\xc8\x20\x07\xae\x91\xf1\x8c\xbc\x6e\x8b\xe6\xc4\x71\xfd\x06\x89\x35\x78\xc0\xa7\x04\x20\x75\x44\x0e\xbc\xb1\xd1\x06\xde\x38\xf0\xc6\xa7\x5a\xb0\x4d\x3c\x06\x63\xbc\x69\x12\xe1\x6c\x59\xca\x4b\xca\x68\x21\xaf\x20\x12\xc4\x14\x03\x25\x16\x2c\x2d\x69\xd6\x44\x92\xf5\xe0\xa2\xdd\x38\x00\x9a\x76\xda\xa1\x21\xe8\xa6\x85\x05\x64\x15\x11\xd6\x4c\x3f\x26\x7f\xb1\xe1\x3c\x4d\x45\xb3\x6d\x50\xef\xe6\x90\xdb\xf4\xba\x6d\x44\x08\xa7\xea\x1e\xab\x15\x92\xaa\x68\xa3\x3a\x09\xc3\xec\xb6\x6e\x53\x71\x51\x71\x8d\x6c\x79\x46\x14\x68\x9b\x63\x33\x87\x95\x65\xa2\x8a\x1c\x5d\x64\x0f\x74\xa9\x8e\x2a\x9f\x24\xe3\x4c\xaf\x14\x1f\xe8\x44\x03\x62\xc3\x9a\x0e\xa7\xc2\xc8\xbc\x58\x55\x61\x3a\x85\xa4\xa3\x36\x6b\x31\x38\xd6\x69\x73\xf1\xe8\x9a\xf1\xd2\xbc\xad\x9f\x55\x48\x89\xe0\x9d\x06\x82\x4f\x4c\x93\x92\x6b\x96\x19\x61\x9d\x48\x98\x95\x19\x6d\x1a\x02\xdd\x9b\xf9\x30\xb9\x74\x4c\x3e\xf2\x04\x9a\x0f\x77\xb3\x54\xaf\x0c\x60\x84\x87\x0c\x34\xa4\x67\xd8\x75\xfb\xd5\x95\x0d\x34\x6b\x9d\xfc\x6a\x29\x3b\x0d\xef\xe7\xb2\x0a\x24\x1a\xdb\x03\x55\x45\x39\x90\x94\x4d\xa7\x66\x64\x54\xb6\xb9\x90\x39\x5d\xa7\x8a\xf2\xb4\xd3\xe8\xe6\xe4\x62\x7a\x49\x13\xe5\x17\x2b\xbb\x1c\x29\x96\x42\x42\xe5\x51\xb3\x26\xc8\x45\xa6\xe7\xa2\x9c\xcd\xeb\x5d\x11\x36\xe5\x44\x69\x0c\xaf\x32\x93\xa9\xbc\xe5\x62\x65\xb3\x29\x23\xb3\xf0\x04\xac\x68\x25\xc0\x32\x8c\x07\xda\x71\xec\xb5\x10\x00\x1b\xd3\x6d\xd7\xdc\xe7\x5c\x61\x0c\x1f\xa4\x8d\x04\x39\x0e\x9f\x74\x84\x17\x1e\x93\x4b\x0b\x78\x71\xd6\xee\xb5\x35\x25\x76\x32\x1a\x31\x6c\x3e\x1a\xb3\x63\x00\xdf\xca\x00\xac\x4a\x31\x43\x5c\x62\xdb\x39\xe5\x4b\x9f\xd1\x81\x31\x66\x36\x13\xad\x4a\x32\xc9\xba\xd9\xd0\xab\xb3\xf4\xe2\x65\x76\x5a\x27\xf4\xa6\xcc\x0e\xe7\xbd\xbc\x69\x16\xf8\xc8\x5c\x01\x1e\x69\x28\xf2\x59\x3d\x73\x48\xee\xed\xc9\x4b\xc1\xb2\x37\x70\x38\xb7\xa1\xa7\x6b\x2e\xca\x2c\xb5\xa8\xba\x35\x77\x46\x4e\x6b\x43\x28\x2d\x19\x54\x02\x01\xa3\x21\x20\xf4\x08\xeb\xc6\xbe\x85\x4c\xcd\xf6\xb6\x2c\x19\x3b\xb6\x56\x6d\x9f\xee\xe2\x48\x42\x2e\x9f\x08\x6e\xef\xc9\x33\x77\x73\xe7\x94\xf1\xae\xa2\x5d\xfd\x0e\x6c\xc6\x85\x44\xa3\xf5\x94\x70\xd1\xa6\xa1\x7d\xe4\x57\xa8\xe8\x2c\x73\x54\x71\x48\x1b\xa5\x9d\x7a\x39\xed\xf8\x0f\x73\x30\xda\x5a\x9b\x96\xae\x6c\xbb\xb1\xa2\xd2\x70\xc4\xb1\x21\x46\x69\x49\x11\x26\xd9\xe5\x53\xc8\xae\x1b\xdf\x08\xdd\x17\x9a\xe4\x42\x69\xf2\xdb\x57\x8d\x39\x0e\xb2\xa3\x8d\x08\x9e\x44\x74\xf8\x55\x62\x0a\x22\x5d\x50\xcc\x85\xea\xda\xeb\x65\x0a\x5c\xb3\x84\x66\x0d\x42\xcd\x25\x31\x15\x72\xc2\xd2\x14\x30\xb4\x1d\x0b\x42\xa0\xca\xd9\x51\xd3\x45\xd1\xb5\x1e\xa0\x11\x03\x52\x6f\xac\x0f\x7f\xbe\xbd\x43\x1f\x66\x5b\xde\xab\x75\xfe\x6e\xa2\xd1\xc2\xbc\x82\x36\x4c\xa1\xb9\x9f\xad\x38\xdb\x1a\xe9\xcb\x08\xe9\x33\xef\x63\x76\x4a\xc3\xd0\x33\x17\x0f\xeb\x7c\x84\x19\x91\x8d\xa7\x9d\x13\x1e\x7b\x10\xc7\x67\x37\xfe\x81\x62\xef\xec\xe0\x7d\x88\xe6\xba\xad\x72\x23\xcd\xc6\xa6\x2e\x33\x92\xde\x03\x37\xac\x6c\x7d\xe1\xa7\x15\x86\x16\x93\x68\xee\x0a\x81\x86\xc2\xd3\x4c\x35\x53\xe6\x34\xdb\x8b\x11\xdd\x4d\x85\x70\x15\xdc\xaa\xb8\xe7\x23\xb7\x39\x8f\xcc\x65\xed\x99\x7d\x18\xa6\x75\x04\xc7\x67\x04\xeb\x88\x99\xd5\xb7\x22\x0d\xb1\x71\xad\x84\x3b\x54\x42\x8f\x4d\x99\xc1\xfb\x36\xb5\x32\x0f\x0a\x3c\x66\x5d\xdb\xab\xfa\x65\xc4\x39\x98\x33\x49\xb5\xe8\x6e\xef\x8a\x13\xeb\xe0\xc9\xe8\x97\x0b\xbb\xb5\x29\x24\x64\xf6\x3a\x9e\xb3\x82\x4c\x40\x3f\x00\xf0\xcd\x72\x5a\x0a\x27\xea\xd4\x1b\x6a\x02\x89\xa8\x43\x43\x6d\x88\xed\x98\x5c\xb7\x8e\x39\x5e\xee\xe1\xc8\x6e\x97\xfc\xcd\x2a\x8b\x42\xc5\xcb\xb3\x19\xcf\xc2\x36\xbc\x2b\x06\x48\x85\x85\x73\x55\x2f\x0b\xa8\x6d\xac\xbd\x73\xf0\xeb\x5d\x09\x1d\xf6\x86\xc1\xaf\x66\xe4\x3b\x67\x30\x78\x96\xb7\x8c\x14\x49\xe2\xe2\xb8\x7b\x74\x0a\xdb\x57\xad\x9b\x3b\xb7\xf5\x2b\xe6\xdc\x0a\xc1\x6b\xb0\xef\xd0\x9d\x53\xe9\x14\xbf\xff\x3d\x01\xeb\xa8\x8a\xa0\x57\xf8\x16\x07\xf2\x32\x0a\xe8\x65\x3c\x9c\x6b\x12\x0d\xeb\x9a\x3c\x12\x16\xd2\x0d\xdd\x35\x72\xa4\xb9\x82\xa4\x94\x4c\x2f\x8d\x2e\x00\x9f\x3a\x19\xac\x63\x9c\x95\xdb\x36\x19\x2d\xa7\x8a\x27\x91\x88\xc2\x56\xf0\x58\x29\x8f\x5d\x5b\x5c\x4a\x8e\xb6\xe2\x6e\x3b\xfa\x72\x6a\x56\xc4\x9a\x47\xd0\x51\x82\x41\xcb\xab\x84\x79\xa7\x8b\x95\xb1\xfe\xbb\x64\x0b\x9a\x19\x36\x5c\xff\xe2\x1a\x33\x34\x9b\x3f\x7a\xce\xc8\x76\x4d\xd5\x7d\xed\xde\x85\x51\x21\xd2\xda\x9b\x7b\xee\xa7\x0e\x3f\x82\x4f\xfa\x33\x8c\x6a\x47\x2e\x75\x2d\xd9\x82\x65\x30\x83\xf7\x2a\xa1\x56\x84\x39\x74\x64\xc4\xc5\x16\xba\x70\x67\x4a\x91\xa9\xca\xf6\x44\x7d\x7e\x3a\x1a\x61\x66\x94\x71\xac\xed\x1c\x20\xad\xba\x41\x95\x4d\x90\x67\x5a\x91\x82\x4a\xb3\x0b\x7d\x22\xbc\xf5\x67\x4c\x84\xc8\x5c\x31\xa0\x6c\x59\xd3\xc5\xba\x87\xb0\xa2\x01\x5d\xfc\x9d\xc3\xc3\xdf\x0d\x15\x8a\x4c\x33\x3a\xab\xfd\x29\xe6\x62\x5b\x95\x27\x83\x73\xf3\xb7\x4e\x34\x56\xba\x29\xcd\x3d\xf6\x40\x97\xaa\x46\x2d\x68\x9a\xdd\xbb\xdf\x28\xaf\x4f\x91\x9f\x50\x45\xaa\xb1\xbb\xf9\x7b\x4c\xfb\xed\x29\x1a\xf7\xdf\x5e\x5c\xff\xfd\xf6\xaf\xb7\x7f\xbf\x78\xf7\xe1\xf2\xaa\x73\x67\x57\x42\x83\x0d\x6d\x69\x38\x75\x93\x2a\x9d\xc6\xac\x42\x95\x91\x35\x16\x6a\x8c\x71\xab\x08\x99\xcb\x53\xf1\x10\x18\xdc\x6f\xf6\x14\xd0\x6e\xd6\x13\x5a\x14\x17\x32\x17\xf2\x5a\x8a\x29\xcb\x3a\x4b\xfc\xb1\x4e\xf0\x0a\x39\x3e\xcc\xf7\xc2\x7d\x5c\x5f\x37\x16\xc5\x71\x3d\x9b\xa4\x71\x65\x30\xc4\x0a\x34\xdd\x74\x0f\x2b\x5a\x75\xe7\x1f\xab\x55\x12\xbb\x1f\xa2\x83\xee\x99\x83\x63\x64\x19\x32\x3a\xfe\x3c\x86\x69\x20\x13\x09\xcd\xb0\x4a\x74\xd8\xc6\x27\x91\x15\x93\x55\xba\x1a\x98\x1e\xd4\x6f\x67\x92\x09\x9a\x5a\x1f\x96\x65\xfe\x29\xf8\xda\x65\x5e\xec\xc2\xac\x85\x20\x42\xee\x2c\x9e\x02\x8e\xe7\x41\x48\x0a\x09\x95\x54\xb3\x32\xbc\xb0\x25\xdb\x82\x86\xfc\xd0\xce\x01\x71\x6f\xd9\x82\xcb\x0a\x3d\x73\xd5\x30\xee\x80\xb1\x29\xda\x53\xd0\xce\x69\x14\xf5\x65\x61\x0d\x9c\xdf\xfb\x65\x08\x28\x2f\x1b\x49\x79\xc6\x4e\x7a\xb2\x3b\xed\xfc\x54\x3b\xd2\x26\x83\xdf\x33\x33\x83\xd3\x9a\x49\xfb\x6d\xe3\x65\x10\x9b\x11\x1e\xb8\x1f\x7f\xc0\x42\xe6\x9e\xff\x47\x30\x4e\x55\x4b\x4c\x46\x8d\xa3\x55\x48\x18\xad\x1f\xaf\x50\x7d\xff\xa6\xe4\x9a\xe5\xe0\x11\x46\x47\x2b\x32\x91\xb4\x5f\x1f\xab\xaa\x9e\x4f\x94\x8d\x4e\xc8\x9f\x39\x9e\x57\x0e\x29\x19\x11\x2e\xea\x25\x02\x3e\x15\x32\x41\xc3\xc3\x41\x37\x78\x42\x0b\x3a\x61\x19\x0b\x61\xe6\xb1\x36\x38\x96\xc7\x6c\xd0\x83\x31\x40\x69\x7a\x9e\x4a\x51\xd8\x9b\xd8\x43\x7f\x85\x67\x65\xb6\x21\x66\x9a\x95\x9c\x9c\x25\xaa\x45\xc8\x4c\x52\xae\xeb\xf8\xbd\xb5\x8d\xf3\x4b\x94\x41\x62\x08\x01\x34\x8d\x57\x68\xf6\x22\x35\x3c\xa3\xb9\x6c\xc1\xe7\xaa\x6f\x45\x6b\xde\xfa\x97\x6b\x60\xcc\x90\xeb\x8f\xb7\x97\xff\xef\xca\xb9\xe9\x2e\xda\xd9\xd6\xef\x92\x15\x86\x1f\x44\xdb\x36\x37\xae\xce\xf7\xb0\x71\xbe\xec\x8d\x53\x19\x88\x0e\x8e\xb7\x7d\x53\x36\x3d\xce\x8c\x37\x48\x23\x79\x90\xac\x73\x5d\x41\x53\xb6\x7b\x6d\x06\xe8\x4a\x20\xe6\x11\xae\x19\x86\x4b\x37\xac\xb5\x5a\xd8\x52\xd6\x4e\xec\x0a\x2b\xc5\xd0\xbc\x5d\xa7\x34\x53\x9f\xeb\x15\x19\x62\xda\x29\xa4\x48\x3e\x88\x92\xc7\x01\xf0\x0e\xd8\x71\x15\x21\x24\x05\x2e\xb4\xb3\xa6\xa0\x2e\x21\xa6\xf8\x2d\xb1\x39\x6b\x8d\xda\x1c\x2d\x39\x27\x40\xcc\xba\x6b\x88\x56\x55\xfc\x8a\x97\xc3\xad\xfe\x52\xaa\xb5\xc0\x48\x27\x57\xd5\x29\x6c\xd3\x80\x48\x06\x09\x34\xb5\x81\x34\x54\xcf\x2d\x68\x7c\x4e\xd5\x3d\xa4\xf6\x83\x40\xc0\xcc\x0a\x1c\x13\x43\xe1\xfc\x4c\xdf\x99\xc9\xf5\x98\x25\x68\x10\xb6\x41\xb6\x88\xa0\x19\xa2\x8a\x1d\xf4\x34\x04\x30\x76\xb3\x08\x1f\x79\xb6\xbc\x11\x42\x7f\x5d\xd5\xc4\x3f\xf4\xc9\xf8\x4b\x15\x0a\xdb\x34\x62\xa2\x5d\x9a\x22\xc9\x23\xdc\x38\xc8\x17\xa7\x15\xd5\xe1\x25\x2e\xcc\xca\xfd\x42\xb9\xa2\x2c\xf9\x85\xfa\x46\x8a\xb2\xb3\x0c\x17\x53\xdf\xfc\xe6\xf2\x1d\x5e\x7c\xa5\xc3\x54\xe6\x5a\x2e\x0b\xc1\xb8\xf6\x16\xaf\x88\x4e\x9b\x3f\x3b\xf4\xea\x26\x67\x0b\x06\xaa\x25\xe4\x03\x5d\x12\x9a\x29\x51\x99\xd4\xf8\x26\x77\xab\xf7\xe5\x9a\xaf\x27\x42\xcf\xd7\x9c\xb8\x5d\x53\x77\x4c\x5b\x1f\xef\xac\x01\xcd\x5c\x07\xc4\x30\xbe\x36\xac\x46\x54\x97\x42\x42\x02\x29\xf0\xe4\x73\x3d\x11\x87\x46\x0a\xc6\x53\x75\x25\xb8\x61\xaf\x87\x3e\x57\x97\x95\x7d\xd2\xad\x46\xf3\x14\xa1\x29\xdb\x39\x11\x29\xa2\x6a\x23\x73\x2d\x55\x48\xe4\xe9\xe5\x14\xbd\x9e\x76\xd3\x7d\x57\x4e\x20\x33\x8b\xcd\xb2\xcc\x47\xdb\xdb\xd0\x04\x96\xd3\x19\x10\xaa\xab\x43\xa8\x05\x01\xae\x4a\xe9\xf6\x4d\xc7\xac\x2a\xd3\xaa\x84\x30\xf7\x6a\x7f\xbe\x7c\x47\x5e\x91\x13\xf3\x6e\x36\x62\x70\x4a\x59\x86\x40\xdd\x3e\x56\xb7\xa9\x03\x4c\x7d\x4e\x59\xd0\x14\x20\x1f\x21\x42\xda\xab\xe5\x8c\x70\x41\x54\x99\xcc\x1b\x19\x07\x95\x45\xd8\x55\x6d\x0a\x02\x22\x19\xd8\x4e\xbc\xfb\xf0\xcf\x0a\x3a\x87\xc8\xc6\xbc\x0e\xff\xfc\x82\xd7\x61\x53\x45\x34\xc7\xbf\xbd\x60\xf6\xac\xe6\xa0\x69\x4a\x35\x75\xd7\xa4\x7f\x60\xd8\xb5\xc3\x65\x19\x70\x59\x2a\xf8\x9e\xf1\xf2\x93\xad\x8b\xd2\x0b\xb7\xc7\xed\x7b\xa4\x88\x24\x7e\xa1\x45\xc3\x6f\xe7\x3d\x14\x11\x52\x34\x2e\x5b\xc7\xe8\x6c\x8b\xd6\x8d\xb7\x04\xb5\xd8\x9b\x98\x45\x49\x79\x2a\xf2\x35\x22\xa7\x42\x12\xa0\xc9\xbc\x33\x35\x8d\xa8\x91\xe1\x60\xba\xf6\xcb\x76\x08\x61\xfa\x6a\x34\xdb\xfe\xf7\x98\x0c\xcb\x54\xb5\x73\x6d\x76\x6c\x46\x27\x90\x39\x58\x5c\x8b\x95\x1e\xf1\x84\x45\xb2\x81\x4b\x11\x31\x24\xe6\x46\xd8\x48\x2e\x5a\x4d\x84\xe9\xfe\xb3\x98\x87\xa8\xc1\x17\x77\x2e\xba\xa4\x9e\x07\xb4\x81\x7e\x0e\xf3\x50\x06\x08\x88\x64\x75\x1e\x8c\xb4\xd9\x9e\x07\x94\xbf\xfa\x3e\x0f\x0a\x92\x44\xe4\x45\x4f\x22\x25\xef\x6c\x14\xbe\xa1\x68\xd7\xa8\xc8\xf6\xc3\x34\x28\xdc\xd9\x55\xbb\xa2\xda\xde\x83\xbe\xe4\xd5\xff\xaf\x71\x9d\x23\xb7\x5b\xbd\xe3\xdd\xe8\xc1\x11\x99\xd5\x88\xae\xc3\x5f\xe2\x8d\x37\x84\x61\xb6\xda\x8b\x87\x61\x36\x10\xf3\x29\x9a\xe7\x5b\x21\x91\x5f\x42\x30\xa6\x51\x02\x70\x5e\x81\x23\x0a\x50\x41\xf5\xfc\xcc\x65\xac\x2e\xc0\xb3\xe7\x7b\x6b\xf1\x3a\x46\x8e\xe3\x09\xf2\xec\xa6\x8e\x59\xb5\x48\xfa\x51\x63\x37\x37\xc5\x6b\xda\x67\xae\x3e\xde\x35\x71\xf4\x29\x5f\x5a\x8c\xc8\x00\x54\x33\xdb\xfa\x27\x56\x3c\x67\x4c\xe7\xea\x2a\x3e\x77\x48\x67\x50\x7f\x9b\x23\x3a\x5f\xee\x94\xee\x16\xe5\xb9\x1a\xe3\x19\x95\x84\xd5\x80\xcf\xf5\x31\x22\xac\x5c\xf0\x11\x70\x57\x67\x8f\x0c\x20\x7f\xb1\x14\x79\x2d\x3b\xf1\xa0\x85\xaa\x69\x04\xa1\x59\x16\x25\x26\x61\x93\x15\xc4\x9f\x82\x0a\x4a\x7e\xdd\x1a\xd0\xae\x69\x1a\x32\xfa\x13\x16\x8c\xcf\xdb\x12\x91\x19\x8d\xe2\x33\xb7\x43\xcc\x72\x45\xdf\x4a\x48\x6d\x9c\xd4\x6d\x01\x49\x5f\x6e\x8b\x6f\x3e\xdc\x5e\xb4\x29\x43\x59\xd8\x15\xce\x00\xfc\x9e\xd0\x34\x67\x4a\xa1\xc3\x07\x26\x73\x21\xee\x83\x86\x3c\xf1\xa9\xb6\x33\xa6\xe7\xe5\x64\x9c\x88\xbc\x91\x75\x3b\x52\x6c\xa6\xce\x1d\x47\x19\x99\x89\x3b\x25\x8c\x67\x55\xa6\x32\x5a\x0b\x11\x0b\xac\x3b\x94\x5c\xf3\xe5\x49\x52\xbd\x3d\x6e\x3d\xcc\x4f\xa9\x42\xb3\xd7\xa7\x07\xab\x9b\xe0\xe6\x3d\xb8\xd4\xb1\xbe\xab\xc2\xaa\x0d\xae\xec\xac\x2d\xef\xde\xac\xd4\xe1\xbc\x38\x1b\xe7\xd1\x2a\xaf\x07\x9f\x24\x27\xf4\x27\xa0\x82\x22\x60\x63\x9e\xb9\x6f\x6b\x92\x9a\x58\x7a\x6c\xda\x42\x84\x6a\xe7\xdc\xa3\x7b\xfb\xd8\xfc\xd2\x87\x65\x1e\xc7\x2a\x2e\x73\x91\x65\x66\x21\xa9\x03\x5e\x6b\x44\x77\xa2\x6a\xd2\x46\xb4\xb3\x98\xbb\x46\x59\x68\xbe\x05\x5e\x24\x61\x4c\xc1\xe2\x9e\x99\xcb\xc0\x61\x66\x98\x0d\x84\x63\x53\x92\xb3\x4f\x86\xc2\xe6\x88\x6d\x90\x58\x74\xfc\x6f\xfe\x3a\xa0\x80\x35\xc1\xe0\x83\x0a\x33\xfd\xcc\xac\x50\x73\x10\x9f\x1c\xad\xcd\xb5\x65\xbe\xb8\x02\x6d\x14\x35\x3b\x6f\x4d\xef\x83\x51\xac\x64\x19\xe1\x30\x84\x78\x86\x49\xd3\x3b\x1c\x95\x53\x04\x9e\x07\xf4\x14\x3b\x9a\x8c\x0c\xe2\x85\xb7\x97\xf2\x1c\x93\x0d\xe9\x3b\x2f\xe6\x41\x26\xbb\x7b\x91\x9f\xd1\x57\x45\xfa\xe2\xaf\x0a\xe4\xfa\x4d\xac\xdf\x83\xe1\xac\x34\xf1\x86\xd9\x7a\xf0\xd2\xb5\x48\xd7\x60\x88\x11\xcc\x98\xd1\xac\x7b\x21\xd7\xcb\x69\x13\xba\x93\x0b\x67\x1e\xb1\x15\xc4\x6d\x9c\xfe\x27\x48\x4a\x0d\xa9\x43\x23\x77\x26\x65\x8b\x64\xdc\xa6\xa6\x33\x05\x3e\x49\x7f\x02\x18\xa0\xa4\xce\xea\x52\x6c\x4e\xd7\xa9\xf0\x5d\xcf\xc8\x7f\x21\x97\x54\x1e\x50\x2b\x63\x0b\xe0\xa0\xd4\x75\xf5\xf3\xae\x53\x81\x71\xd4\x09\xe5\x5e\xb7\x32\x67\xda\x59\xb8\x1d\xea\xb8\xc3\xf1\x98\x00\x29\xa8\xa4\xb9\xb9\x83\x15\x71\xcb\x33\x81\x19\xb3\x69\x81\x8d\x4b\xb1\x82\x2d\xef\x06\xaa\x8b\x8a\x0d\xd3\x24\x67\xb3\xb9\x3d\x2d\x84\x92\x4c\xf0\x19\xf1\x71\x63\x99\xa0\x29\x41\xc6\x22\x24\x79\xa0\x32\x37\xb2\x00\x4d\xe6\x18\x84\x46\x39\x49\x4b\x73\x1e\x08\x82\x6c\x2f\x47\x4a\x53\x0d\x0e\x0c\xaf\xb3\x0d\xce\x4f\xd3\x01\x4a\xc4\x3e\x77\xf9\xfb\x03\xe3\xe9\x98\x93\x16\xc5\x0a\xf2\xfe\x13\x24\xd5\xb1\xb6\x88\xd3\x79\x8e\x80\x81\xc2\x1f\x67\x8f\x16\x17\x2c\x0c\xf6\x44\x55\x76\x6f\xd8\x17\xd9\xe4\xad\x9b\x70\xe6\xb5\x4f\xfb\xa7\xd1\x47\xdb\x8b\xa0\xbc\x13\xab\x51\x34\x09\xd1\xb1\x85\xbc\x37\x27\xd7\x62\x04\x09\x59\x55\xeb\x0f\x22\xcb\xd3\x81\x90\xd9\x42\x68\x72\x72\x7c\x7e\x7c\xba\xb6\x17\x8e\x55\x33\xcd\xc0\x66\x44\xd7\x2f\xa4\x58\x5e\x64\x4b\x7c\x87\x63\x5b\xf2\x3b\x10\xc0\xd0\x07\xac\x56\xe5\x2f\xd5\x1c\xb2\xec\x8c\x28\x23\xfe\x52\x5f\x43\xc4\x7e\x6a\x1e\xd2\xb2\x4c\xac\x99\xec\xe4\xf8\xe7\xe3\x33\x02\x3a\x39\x25\x0f\x82\x1f\x6b\xeb\xf0\x20\x77\xa8\x43\x06\xd1\x54\x11\xb1\x14\x25\xe1\x00\xee\xec\x54\xc5\xaa\x12\x6a\xd4\x9f\xd2\xca\xe8\x16\x74\x03\xb2\x2c\x4c\x9e\x7b\xff\x89\x69\x23\x8a\xe8\x12\xcd\x14\xaf\xac\xa6\x00\x88\x43\x4f\x15\xde\x74\xe7\x73\xa0\x99\x9e\x2f\x2b\xed\xe5\x9f\x20\x05\xd6\x27\xe5\xee\x9b\x70\x19\xaa\x07\x69\xa3\xfd\x4d\xe0\x34\x02\x46\x29\xe1\x6e\x2e\x41\xcd\x45\x76\xf0\x34\xce\x0f\xae\xdc\x5b\x22\xb8\x32\x3c\xc5\xa8\xd8\x8e\x46\x55\x65\xd0\x59\x99\xc5\xd5\x57\x10\x78\xca\x24\xa4\x4e\x58\x72\x25\x2f\xe6\x74\x81\x92\x82\x91\xe7\x20\x0d\x51\x4d\x9a\x3a\xd1\xef\xc6\x15\x85\x55\xda\xdd\xeb\x9e\x84\x6d\x76\xc4\x8e\x9c\xc9\x22\xce\x2d\xfd\xcd\xcd\xf5\xdb\xd6\x2d\x8d\x1f\x7c\x8b\xc7\xf8\xed\x1c\x92\xfb\x9b\xb0\x6a\xae\x3d\x09\x2d\x28\x84\x3c\xa4\x60\x60\x86\x8f\x26\x15\x5c\x0b\xa9\x09\x2f\xf3\x09\x48\x6f\x50\x98\xe1\x2a\x82\x5c\xb0\x04\xc6\xe4\xca\x7e\xe7\x9d\xf3\xbe\xfa\x30\xe5\x33\x20\xaf\xcd\x81\xf8\xc3\xef\x7f\xff\xbb\xdf\x87\xf3\xe8\x70\x20\xd5\x38\x20\xaa\xee\xc5\xfb\x22\x76\xdd\x5a\x72\x36\x19\x9b\x1d\xa5\xa8\xd4\x65\x34\xa9\xd6\x66\xb6\xf9\xd0\x85\x59\x25\x15\x00\xd9\xe0\xae\x30\xac\xc3\xfe\xdf\x24\x13\x93\xf3\x9c\x2a\x0d\xd2\xe8\x38\xee\x5a\x1f\x21\xdc\x30\xe3\xb3\x71\x9e\x9e\x8e\xc3\xbc\xe0\x5e\xad\x5e\x2b\x29\xd7\x82\x99\xd9\x52\x1e\xce\x4c\xca\xc1\x4d\xf0\xc4\x53\xf9\x86\x1c\x75\xab\x26\x66\x96\xe0\x1b\x88\x93\x89\xf6\xed\xdd\xdd\xf5\x37\xa0\x9b\x0c\x9b\xe3\x87\xe4\x9b\xf7\x77\x55\xb9\x71\xb3\xbb\x6c\x52\xd3\xc0\xb5\x43\xb8\xf6\x5c\x84\xd5\x9b\x8f\xed\x77\xb1\xac\x04\x6b\xa3\x71\x0e\x89\x59\xe8\xb3\x56\x65\x5b\x1f\x87\x78\x79\x3d\x26\x7f\x15\x25\x8a\x5c\x74\x92\x2d\xc9\x03\xb5\x88\x06\xdd\x20\xa5\xeb\x76\x64\xc8\x38\x32\x5c\xcb\xec\xea\x6f\x81\xa6\xb6\x56\x25\x9a\x76\x0e\x7e\x56\x1b\x34\x45\x5b\xb6\xb7\xa5\xd2\x22\x27\x73\xf7\xaa\x76\x0e\xeb\x82\xfe\x56\x36\xb2\x47\x10\x7d\x3f\x8a\x48\x28\xac\xb6\xe4\x7e\xf3\x45\xe8\x42\x6b\x5c\xc8\xce\x73\xa3\x1a\x10\x25\x49\x73\xaa\x9c\xa0\x8f\x26\x4c\xe6\x78\x54\x67\x93\x58\xdd\xa2\x54\x15\x21\x91\x2a\x8b\x10\x64\x52\xe6\x50\x06\x77\x12\xee\x84\x8c\x53\xa3\xc4\x34\x1e\xe8\x5e\xb3\x2d\x6e\x85\x04\xe2\x5c\x6d\x6e\x73\xd9\x00\x1c\x43\x68\x28\x2a\x21\xf1\xc6\xe4\xaa\x80\x2a\xe5\x82\xb3\xc4\xba\x33\x48\x59\x08\x4e\x44\xa9\x8b\x52\xa3\x29\x28\xa1\x0a\x46\x0b\x2a\x99\x61\xa8\x66\xfc\xfa\x87\x25\x37\xa7\x5d\x0b\x81\x76\x92\xca\xe9\x6c\x29\x0e\x27\x33\x92\x34\x43\x7c\x01\x8c\xc8\x2b\xbc\xb6\x38\xe1\x3b\x9a\xf4\xda\x06\x43\x6c\x0d\xf1\x79\x3c\xb5\x8e\xea\x39\x46\xf6\xa1\x2f\xcb\x07\x86\x22\xe3\x34\x6a\x43\x0f\x12\x6f\xa2\x6a\xb1\x81\x2c\x01\xfd\xed\x42\xae\xe8\xc1\x86\xc2\xf5\x39\x8c\x14\x6b\xf2\xfc\x6a\xb5\x7b\x2d\x3f\x02\xe5\xe4\xf2\xe2\xea\xe2\xef\xb7\x3f\xbc\xfd\xfb\xd5\xc5\x87\xf7\x21\x5d\x07\xd7\x8e\x8f\x59\x3d\x3e\x5a\xfd\xf8\x67\xa8\x20\xef\x9b\x4a\xe6\xd0\x9f\x30\x93\x5b\xa4\xa6\x09\x4a\xe6\x74\x80\x46\x3d\xe4\x30\x94\x3a\xb2\x62\x34\x35\x8c\xe7\xa0\x1c\xc7\x45\x15\xbc\x83\x8c\x2e\x6f\x21\x11\x3c\x3d\x78\x74\xf6\x55\xc5\x6c\x94\x25\xa8\x2a\x03\x0d\x2b\x88\x59\xbe\x10\xac\x2b\x5e\xed\xe3\x03\x9a\x21\x0d\xf6\xfd\x3a\x7b\xad\x49\xff\x3c\xd7\xa4\x37\xe6\xf1\x02\x24\xc3\x88\xa0\x3e\xec\x9a\x6f\xc5\x83\xab\xe8\x7e\xc2\xb8\xdf\x39\xa7\x0d\x2b\x4d\xed\x1e\x09\x47\x53\xd3\x82\xbc\x7e\xe5\x07\xf9\xf2\xfc\x1e\x2e\xd2\xa7\xd7\x9e\x2f\x47\xe3\xd3\xae\xaf\x3a\x6c\xa9\xed\xfe\x0a\x89\x1f\x22\x2b\x6c\xfc\xf5\xb8\xca\x53\x7b\x8d\xf4\x54\xac\x88\xf2\xd4\x87\x9c\x7d\x79\xfb\x44\x27\xc5\xad\x48\xee\x23\x99\x5d\xef\xde\x5e\xdb\xde\x56\xe2\x59\xec\x0d\x6c\xa4\x4c\x41\xa8\x79\x0a\x05\xd0\xc1\xe8\xda\x1b\xa3\xeb\xb1\x4d\xeb\xa2\xd9\x9b\xbd\x0d\xa8\xc7\x83\xb6\x55\x37\x2f\xf8\xc8\x76\x05\x94\x41\xdb\xda\xd2\x06\x6d\x6b\x8f\x66\x93\x48\x30\x18\xf4\x1b\x49\x13\xb8\xee\x93\xf0\xe6\x19\x08\x49\x4b\xe9\xca\xca\x55\x32\x5c\xc5\x2e\x38\x40\x6a\xf9\x87\x7b\x15\x20\x33\xf3\x26\x36\x3c\x1a\x6d\x88\x75\x60\x71\x29\x03\xc4\xbc\xbb\xb9\xeb\xda\x89\xb8\xde\xc9\xbc\x89\xba\x5a\x37\x29\x2a\x30\x74\x5f\x35\xc4\x1d\x27\x43\x3c\x96\x5a\x07\xde\xdd\x9c\x4e\x9b\x2b\x48\x14\x9b\x99\xe9\x72\x95\xa1\x6d\x8c\x70\x55\x7a\xaf\x26\xc4\x8c\x3a\x15\x32\x61\x93\x6c\x49\xe6\x34\x33\xca\xd2\x03\xd3\x73\x42\xc9\x3d\xcb\x32\xd7\x4d\xf7\x89\xba\x05\x97\xab\x69\x25\x9a\x4c\xf0\x19\x4e\x06\x75\x39\x19\x9f\x0a\x48\xcc\x98\x49\x06\x94\x97\x85\xa5\xd3\xc8\x47\x4b\x51\x46\x48\xcb\xf0\x8e\xef\x4a\x9e\xe2\xcc\xc1\x8f\xd8\xc2\x6d\x8f\xee\xf9\x76\x72\x2d\xf9\xa8\xe7\x20\x1f\x98\x02\x5b\x48\xae\x33\x4d\x96\x96\x76\x19\x39\xfb\x59\x05\xa1\xe2\x32\x07\xcd\xb6\xc0\x54\xd6\xce\x63\xfd\x80\xfd\x7a\xd6\xca\x05\x1f\x71\x98\x59\xa0\x06\xc7\xd0\x6c\x44\xa7\x1d\xdf\xc6\x0f\x56\xd9\x06\x4a\x8b\x82\xb0\x3c\x87\xd4\xe8\xc7\xd9\x92\x2c\x18\xed\x4c\x09\x82\x42\xd4\x3b\x8a\x9c\x70\x41\x44\x61\xae\xae\x92\x33\xbd\x44\x8f\xde\xbc\xd4\x24\x15\x0f\x3c\x20\xdf\xea\xce\x85\x39\x50\x32\x01\x4d\x9d\x0d\xdc\x1c\x82\x0a\x13\x1d\xe1\xce\xcd\xd9\xc3\x24\x81\xbb\x8d\x1b\xa0\x82\x49\x9f\x51\x1d\xc0\x25\x36\x48\xf3\x76\x3d\x1f\xdf\x76\x4c\x39\x7f\x5d\x20\x0e\x73\x3f\x90\x0d\xcd\x89\x16\xa5\xee\xc9\x3d\xb2\xcd\x74\x64\x21\x2e\x1a\x4a\x22\xcb\x41\x11\x51\x46\xaa\x37\xf1\xda\x0d\x17\x53\xc3\x1b\xec\x4e\x1b\x9b\xd2\x29\xeb\x54\x75\x38\xc6\x16\xdb\x02\xde\xef\xf2\x70\x1b\xf8\x95\x93\x72\x3a\x05\x89\x37\x1d\x12\xbc\x16\x76\x5f\xd5\xf1\xf2\x77\x58\x37\xe3\xad\x0b\xf8\x02\x7d\x86\xb5\x03\x1c\x98\xc4\x96\x21\x1d\xc8\x26\x96\xe9\x95\xa0\x10\x0b\x9e\x93\xf7\x1f\xbf\xee\xb6\x45\x63\x54\x16\x08\x4b\x59\xc5\xf7\xfc\xc8\xbb\xc5\x24\xc6\xdd\x0f\x9b\x50\x5f\xdc\xb6\x48\x32\xa1\x5c\x7a\x34\xae\x4b\x32\xa7\x9c\x83\x37\x46\x31\x8d\x96\xec\x09\x00\x27\xa2\x00\x1b\x94\xd7\x89\x18\x4a\x14\xe3\xb3\x0c\x08\xd5\x9a\x26\xf3\xb1\xa1\x8e\xfb\xbd\x50\xe7\x21\xbb\x4f\x94\x96\x40\x73\xbb\x27\x24\xe4\x94\xd9\xe1\x09\x4d\xa4\x50\x8a\xe4\x65\xa6\x59\x51\x75\xd6\xcd\x8a\x08\x88\x08\xa1\x6c\x5a\xaa\x5f\x2b\x4c\x2b\xa9\x13\x9e\xcf\x6a\x0a\xdd\xeb\x8b\x66\xb1\x22\x34\x9d\x9d\x99\x6f\x21\x2f\xf4\xb2\x4a\x4c\xec\xa6\x03\x4d\x99\x54\x9a\x24\x19\x03\xae\xdd\x9b\x59\xc8\x41\xa4\xe1\xcc\x8b\xd3\xdc\xcd\x88\x72\x53\xc2\x53\x54\xbe\x0b\xad\x6c\xfe\x5d\x45\x84\xef\x2a\x65\xca\xd9\x3a\x54\xb7\xec\x3f\xea\x2b\xd3\xd8\x8d\xe3\x67\x04\xb7\x8e\x17\x70\x2c\x45\xee\xa3\x06\x09\x8d\x3a\xdb\x75\xee\x64\x18\x5f\xc1\xf2\x31\xfe\x5c\x9f\xb5\x30\x07\x6a\xdd\x02\x53\x61\xd6\xb8\x0e\x6e\x28\x0e\x0b\x73\x0e\x20\x01\x23\x8a\xd2\x88\x4c\xe6\xc5\x79\x4c\x43\x96\xfb\x00\x4a\xd1\x19\x5c\x77\x0c\x47\x88\xc1\x70\x6a\x43\x1b\xc6\x31\xd4\xdb\x66\x0e\x16\xe8\x4a\x8b\xc6\x27\xcd\x24\xaf\xa6\xf2\x98\xdb\x17\xe9\x44\x81\x57\x9a\x1e\x24\xd3\x1a\x70\x97\x62\x25\x27\x0c\x40\x5b\x05\xef\x6c\x27\x97\x75\x1a\xcf\x4d\x7a\x73\x3c\x23\x7e\xf0\xd4\xa6\x69\x4d\x80\x4c\x24\x83\x29\x99\x32\xcc\x1b\xc3\x8c\xaa\x33\x5b\x85\x80\x62\xdc\x2e\x55\x0a\x24\xbe\xb6\x33\x0b\xf8\xd7\xef\x46\xcf\x5f\xdc\xfb\x6b\x59\xf2\x84\x36\x4a\x74\x22\xb6\x18\x9b\x92\x19\x66\x71\x39\x25\xf8\xdf\x5e\xfd\xfb\x1f\xc8\x64\x69\xe4\x35\x54\xc4\xb4\xd0\x34\xf3\x04\x90\x0c\xf8\xcc\xac\x22\xb2\xdc\x6e\x7c\xa3\x85\x4f\x55\x2d\x4e\xc6\x72\xa6\xed\x04\xbd\xfe\xed\xfd\x24\xe8\xe8\x21\x7f\x3c\x4f\x61\x71\xde\xd8\x42\xa3\x4c\xcc\xba\xf5\xfa\x36\x46\x36\x71\x90\x9d\x6d\xc3\x89\x16\x19\x4b\x96\x87\x3a\xd3\xbe\x78\x09\x99\x8b\x07\x6b\xcc\x59\x3f\xaa\x0d\xa8\x97\x42\x14\x65\x86\x13\x47\xbe\xae\xf0\xf9\x4a\x05\xab\xd0\x47\xa1\x46\xc2\x06\xb7\x43\x27\xaa\x1b\x76\xe5\xce\x71\x29\x8c\x9e\x4c\xe1\x80\x27\x9c\xcf\xad\xaa\x43\xd2\xd9\x1a\xf7\x35\xcd\xb2\x09\x4d\xee\xef\xc4\xf7\x62\xa6\x3e\xf2\xf7\x52\x0a\xd9\x7e\xe7\x8c\x9a\x3b\x7d\x5e\xf2\x7b\xac\xa2\x5b\x83\xd1\x8a\x99\x8b\x29\xf4\xf8\x01\x8d\xb7\xeb\x44\x8c\x7f\x4b\x0b\x0f\xea\x45\x12\x6f\x83\xab\x47\x86\x4f\xac\x36\xb4\x71\x02\x86\xe6\xae\x09\xf8\xd0\x7a\x0f\xd5\x3c\xda\xbf\x7d\xf5\x6f\x7f\xb4\xcc\x85\x08\x49\xfe\xf8\x0a\x53\x8e\xd5\x99\xbd\x00\xf0\x06\x36\xa2\x56\x4e\xb3\xac\xab\x97\xa0\xc9\x02\xbe\xee\x5c\x9c\xba\x07\x47\x5e\x1f\xec\x74\xef\xac\x32\xde\xdd\xfd\x15\xf5\x45\xa6\x15\x64\xd3\x33\x8b\xf6\x52\x99\xb5\x8e\x51\xba\x3a\x76\x57\x5e\x77\xa4\xa0\xc3\x2b\x6d\x0b\x91\x95\x39\xbc\x83\x05\x4b\xba\x39\x30\x5b\xab\xd2\xea\xcd\x9b\xe9\x33\xa6\x10\x04\x68\x92\x89\xe4\x9e\xa4\xee\xcb\x46\xa8\xfc\x6a\x55\xed\xee\xb3\xd0\x35\x69\x20\x20\x59\x60\xeb\xfb\xb7\xd2\x04\x72\x5a\x14\x15\x42\x89\xa4\x0f\xad\xc9\x40\xd6\x84\xe8\xa8\x81\x6e\xc4\x60\x67\x7a\xa8\x2b\x7d\xe4\xde\xc8\x5c\x53\x9d\xbb\xe8\x9c\x5b\x10\xee\x89\xaf\xa9\xef\xee\xc7\x6c\x6d\x88\xba\x43\x7f\x1a\x0a\xfc\xb7\xc5\x5b\x58\x43\xc6\xaa\x20\x87\xaa\x8d\x61\x25\x48\xb3\x7d\xf0\x96\xe9\x6e\xbe\x8c\xe0\x0c\x0d\xcb\x91\x68\xcd\x0b\xaf\x9c\xd0\x39\xd5\x4e\x3f\xf2\x5e\x76\x4a\x0a\x90\x8a\x29\x23\x3a\xfd\x80\x07\xea\x6d\x46\x59\xde\x70\xdf\x1d\x6a\x12\xd6\x23\xea\x73\x5a\x8c\xee\x61\xd9\x71\xc3\x05\x1e\x97\x6d\x01\xfe\x39\x2d\x3a\xde\x03\x58\xba\x36\xfc\x1a\xe8\x78\x39\x5f\x8b\xd4\xd1\x81\xd7\x83\x2d\x49\xfc\x2c\x6a\x6c\x44\x19\xe8\xd0\x57\xce\x0f\xf5\xc2\xb5\x6f\x1c\xf3\x49\x75\xe5\xd8\xa7\xbe\xa4\x8b\x06\xdf\xef\x73\xbd\x67\x2a\xe2\x23\xb1\xd3\xa0\x48\x27\xbc\x9d\xdc\xce\x68\x5f\x47\x2d\x83\x96\x3d\x99\x0d\xd5\xd7\x19\x9a\xc6\xb6\x28\x40\x00\x01\xe6\x28\xba\x41\xc9\xf1\x9b\xe3\x83\xde\x71\x76\x65\xa4\x28\xe8\x0c\x35\xd3\x3e\x2c\xd0\x2a\x4d\x4d\x0c\xda\xb9\x78\xb0\xdf\xdb\xe8\x92\xc2\x3d\x05\x69\x0d\x64\x3e\x17\x41\xab\x63\x23\x07\xfd\x8e\x70\xda\xb5\xc5\x2a\x7c\xa0\x4b\x42\xa5\x28\x79\x50\x1a\x34\x3a\x46\x2a\xc7\xd9\x87\x95\x97\xbd\x12\x1c\xbc\x93\x3e\x64\x94\xbb\x1a\xc3\x9c\x29\x1b\xaf\xc0\x38\x79\x3d\x7e\xfd\x2a\x98\xf6\x1b\x48\x4a\xa9\xd8\x02\x6e\x5c\x8d\xf3\x86\x53\xe5\x72\x7a\x2d\x94\x62\x93\x0c\x13\xb7\xb4\x20\xef\x6d\x01\xf8\xf5\x17\xad\x02\x47\xf0\x8d\x85\x6c\xa2\x95\x06\x50\x78\x62\x4f\x70\x33\xe0\xd3\x0c\x10\x10\xf5\xd1\x2f\x49\x12\xd7\x75\x45\x92\xbc\xaa\x24\x49\x7b\xef\x1d\xf4\x5d\x7d\xe1\xfb\x3e\x70\x92\x0f\xce\x37\x50\x57\xb6\x67\xbe\x72\x32\x7e\xf4\x20\x99\x76\x87\xfb\x81\x29\x20\x27\x68\x95\x58\xd9\x8c\x41\x00\xcd\x4d\x1b\x56\x60\x05\xfc\x18\x00\xcb\x72\xf5\xe8\xf6\x61\x95\xd6\xf9\x49\x1d\x81\xff\xe0\x0c\x58\xf5\x0a\x3a\xee\x5f\xdf\xcb\x73\xca\xd3\x2c\x88\x67\x54\xb3\x92\x2d\x83\xb0\x70\x2e\xa7\xa4\xc9\x12\x9d\xff\xb2\x51\x4d\x62\x4e\x15\xe1\x82\xe4\x40\x31\x40\xd3\xdc\x2e\x9e\x0b\xb6\xb0\x9a\xe3\xd1\x60\x37\xbb\xbd\xc6\x9a\x17\x82\x63\xd7\xef\x98\x72\xec\xd9\xf0\x11\xa7\x81\xd8\xb0\x8e\x9c\xa6\x21\xa9\xdd\x8d\x39\xad\x17\x6f\x5c\x07\x4d\xae\x52\x52\x5f\x1c\x2b\xb4\x3c\x07\x1d\x67\xae\x04\xb9\x19\xbe\xc4\x38\xc1\x0d\x66\xb9\x3a\x48\x26\xc8\x9b\x6d\xdb\xea\xeb\x56\xd7\xe2\xda\xbb\x6e\xa6\xb8\x22\x38\x80\x86\xa7\x5f\xf5\xac\xc1\x0b\x7d\x8c\xa8\x75\xa9\xbb\x1a\x28\x2e\xe3\x31\x0c\xc9\xdb\x3b\x25\x2a\x73\xcf\x0c\x38\x48\xea\xfc\x0a\x3e\x44\xd4\x81\xaf\x50\x25\x78\xe8\x81\x78\x62\xc3\x19\x7e\xff\xb4\x98\x62\x7f\x16\x40\x08\xca\x39\x27\x42\xae\x9c\x76\xe7\x31\xd9\x24\xb1\xc4\x7c\xeb\x15\x68\x2e\xbb\xf9\x1b\x98\x9f\x66\x51\xfe\xbb\x64\x0b\x9a\x81\xc5\xb0\xf7\xac\xe1\xa0\xc2\x84\x2a\x27\x7d\x55\x1b\x9d\x7e\x88\x6a\xc7\xe6\xa0\x87\xad\x1a\x64\x24\x79\xe2\xe8\x88\x9c\xd8\x31\x8e\x2d\xc8\xee\x61\x85\x5c\xb7\x56\xef\x3f\x15\x01\x95\x5b\xe3\xad\xd7\xfb\x4f\x05\xc5\x38\x8d\xa2\x17\x0b\xf7\xbf\x60\x4e\x17\x80\x98\xc6\x2c\xa3\x32\xc3\xa0\xf4\x5b\x3b\x65\x64\x52\x6a\x02\x7c\xc1\xa4\xe0\xb9\x39\x7e\x08\x3e\x63\x38\x93\x04\x04\x83\x4f\x40\x91\xaf\x4e\x7e\xb8\xb8\xc1\xa4\xa5\x53\x87\x96\xef\xde\xaf\x54\x88\x0f\xb0\xf2\x0e\x8d\xee\xfa\xb8\xdf\x88\x7f\x77\xb3\x5d\x50\x3e\xf1\x73\x61\xde\x2d\x2f\x75\x49\x33\x84\x7e\x4e\xb2\xd2\xdc\x85\x07\xdb\xd9\xf1\x6d\xe0\x21\x96\xbc\x98\x26\x70\x07\xfc\xfd\x8e\x75\x3a\xae\x31\x0e\xea\xdb\xc6\x7e\x5d\x83\x21\xef\x5c\xe3\x61\x03\x08\xe5\x9a\xa0\x73\xac\x2a\x60\xca\x66\x1e\x8e\xbb\x8b\xbb\x85\x67\x60\xe9\x04\x9b\xfc\xed\x6b\x92\xae\x59\x18\xb1\x46\xcb\xc1\x6d\xf8\x1d\x0e\x43\xbc\x63\xd0\xc1\x10\x1d\x67\xd7\xa7\x5c\xbd\xc5\xa5\xd9\x8f\xe2\xb0\x8d\x7e\x5b\x69\xb2\x66\x23\xbc\xbb\xba\x6d\x16\xf4\xb0\xce\x3f\xb1\xf7\x4a\x5e\xd7\x5d\xd4\x55\x6f\xb0\x22\x5e\xe5\x40\x05\x39\xb3\xe2\x34\x22\xcf\x56\xf2\xf5\xbb\xab\xdb\x3d\xc7\xf2\xbb\xd9\x0a\xc3\x13\xaa\x6c\x8c\xf4\xbb\xab\x5b\x1b\xb7\xb6\x1f\xed\x9d\x1d\x29\xdd\x7d\x10\x08\xe0\x86\xd8\x5a\x1d\x38\x76\x38\x97\xbb\xa8\xe2\x41\xcc\xe2\xa3\xcf\xd7\x52\x43\x2e\xaf\x09\x4d\x53\x89\xe1\xcc\x5d\xce\x72\x0b\xd1\x8e\x16\x45\x15\x95\x8a\x45\x62\xa8\x82\xe6\xab\x37\xf6\x00\x0a\x3e\x1d\xd7\xcf\xb6\x77\x65\x91\x31\x1b\x7e\xda\x1c\xa2\x2e\xa1\x93\x8b\x45\x17\xfe\x14\xe2\x61\xec\xec\x5f\x0c\x92\x0f\xa2\x62\xce\x89\xae\xe5\x69\x63\xef\x52\x09\x4a\x64\x8b\xba\x78\x7e\xf0\xee\x74\xec\x08\x43\x12\xab\xdd\xe9\x2b\xd0\x3e\xd3\xce\x04\xae\x25\x83\xf5\x5d\x49\x6e\xcc\xdb\x95\xc8\xce\x2a\x12\xd8\x02\x30\x65\xc9\x55\x08\xee\x30\x32\x0e\xe3\xf3\x6e\x89\x9e\xdb\xac\x1b\xaa\xf1\x64\x52\xe9\x45\x01\x7c\xf3\x80\x57\x3c\xc8\x11\x59\x41\xa6\x4f\xdf\x5d\xdd\xda\x9b\xd4\x4e\x97\xc3\xf3\x56\x1b\xf7\x4e\xe7\x4b\x8e\x1c\xbe\x4c\x52\x88\xdb\x26\x5a\x4e\x69\x55\xd2\x94\x6d\x9c\xe0\x63\x15\x08\x91\x7a\xe3\x42\x13\xc2\x12\x81\x03\x2c\x07\x41\x48\xa5\xed\xd8\x10\x9f\xf6\xfa\xc8\x64\xe1\x68\x07\x79\xd7\xa8\x77\x85\x02\x2a\x93\x79\x97\x8d\x1d\xfb\xb2\xb0\x94\x90\x54\xd8\x0c\xb1\xa9\x90\xe8\x81\x1f\xa1\xa8\x93\x09\x71\x5f\x16\xcf\x23\xdd\xb8\x81\x0b\xaa\xe7\xcf\x76\x89\xb4\xc6\x18\xe4\x9b\xee\x7b\x36\xe5\xaa\x4b\x9e\x4b\xa0\xf2\x05\xda\xaa\x5c\x38\x72\x8d\xd4\xb6\xff\x65\xd4\x32\x83\xbd\xcd\x4a\xa5\x41\x7e\xcd\xa4\xd2\x47\xfb\xf6\xf4\x03\xcd\x98\x03\x4e\xb6\x21\x2c\xc7\xcd\xee\xfe\xc2\xf4\xdc\x15\xea\x3d\x3e\x6b\x7f\x65\xfe\x76\x64\x1c\x13\x21\xc9\xf1\x95\xe0\xb0\x77\xf0\xd0\x8a\x06\x5a\x09\x3e\xd5\x95\xbe\x55\x66\x73\x93\xa8\x20\xb3\xa0\x2a\xf8\x45\xe7\x73\x76\xe7\x6a\x27\x1b\x7a\xbc\xa4\xa0\x40\x13\x8a\x45\x27\xb1\xef\x79\x5d\xb0\xd8\x16\x47\xb3\x85\x9e\x85\xd3\x79\x97\x8d\xa5\xdd\x73\xf0\x46\x75\x35\x2d\xb6\x2f\x40\x17\xd5\x76\xef\x73\x86\x88\x21\xe0\xca\xc9\x7c\xcf\xf8\xfd\x9e\x87\x3c\xec\x84\xbc\x5f\x1b\xbd\x01\xd1\xe2\x7d\xef\x8c\x5b\xd0\x04\x23\xea\xd1\x89\x28\xb5\x2f\x71\xd3\xf4\xc2\x33\xfe\x5f\x76\x5f\x60\x00\x2b\x02\xe0\xec\xbb\x2a\x1b\x0c\xe0\xea\xcc\x86\xb9\x78\x0b\xb7\x5a\x72\x4d\xb1\xd6\xf6\x3b\x91\xdc\x83\x24\x99\xa1\x79\xdf\xcd\x57\xe7\xb1\xb6\xaa\x2a\xef\x9d\xd6\xd2\x35\x22\x03\x8a\x39\xe4\x20\x69\x56\x19\x40\x5f\x74\xd1\xbf\x77\xb7\x77\x45\x46\x33\x89\xd3\x96\x47\x74\x85\x72\x45\x3a\x26\xef\x37\x3d\x95\xd3\xa5\x2f\xfc\xce\x38\xfa\x0e\x3f\x31\xa5\xf7\xbf\x61\x0a\x91\x36\x31\x52\x4b\x05\x72\x54\x61\xe6\x12\xea\x8a\x2f\xfa\x7c\xda\x14\x26\xe5\x6c\xc6\xf8\x6c\x6c\xc5\x03\x14\x43\xea\x02\xb1\xb5\x2d\xec\x61\x0e\xfb\x46\xc8\x24\x12\x28\xc6\x0f\xa3\xb2\x62\x43\x26\x58\xb3\xf7\x5c\xa4\xb6\xf3\xc9\xd2\x5a\x60\xfd\x9e\xac\x80\x94\xc8\x25\x27\x42\xba\xba\x18\x34\x4d\xc9\xde\x61\x3a\x1b\x56\x04\xfb\xaa\xe7\xd7\x12\x57\xd6\xfe\xf9\x63\x55\xff\xaa\xb1\x40\xaa\x9c\x18\xd9\xb7\x94\xfb\xd6\xba\xee\x2a\xa3\x74\x92\x4f\x42\x65\xd1\x0b\x5e\x6f\xcf\xb7\x4d\x24\x02\x4a\x34\xe4\x85\x90\x54\x2e\x57\xd3\x4d\xcc\x4d\x62\xb6\xaf\x59\xa0\x95\xb9\xbd\x16\xa9\x11\x12\xf6\x26\x63\xc3\xb6\x5d\x30\xa3\x76\x6e\xda\xb9\x1b\xcf\x13\x5e\x6d\x5c\x10\xbf\x66\xa4\x03\x15\x2a\x99\x43\x5a\x22\xfa\xd4\xac\xa4\x92\x72\x0d\x86\x7f\xba\x10\xd6\x65\x2b\x90\xa3\x42\x6a\xa8\x60\xdb\x96\x98\x37\x8a\xc5\x9d\xcd\x27\x58\x57\xba\x4b\xb8\x89\x13\x8e\x4d\x47\x0d\x38\x88\xbb\x39\x10\x23\x49\x66\xa0\x71\xf2\x61\xc1\x12\xed\x07\x99\xe2\x22\x6c\xd8\xfa\x09\x2d\x2d\xd4\xc3\xfe\x01\x40\xd7\xc2\xd5\x51\x4d\xc0\xdc\x49\x5a\xd5\x53\xeb\xb2\x1e\x59\xa7\xb8\x92\x3b\x7f\xb2\x37\x11\x5c\x1f\xcc\x27\x8e\x24\x1a\x45\x3a\x33\x4d\x7c\xbb\x47\x18\x73\xb5\xc6\x1b\x56\x62\xcf\xa1\x02\x0c\x30\xdd\x53\x1e\x3a\xa5\x2a\x84\xd8\x7a\xa8\x9c\x1d\x2c\x09\xe8\x42\xce\xca\x1c\x93\xe6\x9d\x6e\x0b\x5c\xcb\x65\x21\x58\x57\xbf\xbd\x39\x6a\xe8\x66\x3c\x56\xe4\xed\x87\x77\x4d\xc0\xb7\x66\x99\x3e\x0f\x07\xd8\x6d\x90\x1f\xe2\x06\x28\x90\xcb\x29\xa1\x95\xd0\xd7\x89\xa2\xfa\xa2\x76\x36\x1f\xe7\xfa\xad\x08\xf4\x16\x58\xc6\x0b\x23\xc1\xa2\x9c\xde\xa8\xeb\x93\xcc\x29\x9f\x19\x56\xf5\x4e\x94\xe6\xc5\xbe\xfa\x0a\x5f\x42\x42\x5a\x26\x1d\x83\x4b\x11\x30\xda\xa1\x22\x7d\xe5\xc3\xbc\x5c\x01\x31\xa3\x8b\x82\x4a\x68\xe1\xa7\xa6\x39\x7b\x56\xca\x7d\x43\xd8\x18\xc6\xe4\xe8\xab\xc6\x57\x47\x48\x71\x27\x6a\x0a\x29\xcc\xab\x38\x10\x26\x7c\xfb\x8c\x69\xe4\x1f\x47\xcd\x11\xc6\xe4\xbd\xa1\x0b\xa3\xa6\xab\xb5\x6d\xe0\xea\x4c\xea\x95\x3d\x23\x12\x66\x54\xa6\x19\x74\x04\x10\x11\xd3\x4a\xc9\xb0\x40\x95\x6e\x57\x21\x63\x44\x5c\x01\x2e\xf4\x38\x8e\xeb\x7b\x57\x44\x3b\x4d\xd5\xbd\x3a\xb7\xea\xcc\x28\xa5\x9a\x8e\x68\x61\xed\x41\x4c\xf0\x73\x6b\xea\x1e\xb9\x22\xe5\x23\xea\x4e\xef\xa8\xda\xd9\xe7\xbf\x76\xf0\xab\x23\x5a\x3d\xc5\xf8\x88\x8e\xb0\x6c\x77\x67\xfb\xcd\x01\xd2\xee\xa2\x07\xce\x04\x95\x63\x0a\x28\xbb\x1f\x83\x4d\xbf\xaf\xb8\xb2\x5d\x8a\x31\xb9\x12\xda\x57\xd7\x4f\xeb\x44\xc3\x80\xe2\xec\x4d\xc6\xfd\xfe\xea\xee\xe6\xaf\xd7\x1f\x2f\xaf\xee\x06\xfe\x3d\xf0\x6f\x6c\x03\xff\x1e\xf8\x77\x87\x81\xfb\xc2\xbf\x81\x2f\x0e\xc5\xbb\x2b\x7b\xd7\x26\x03\xe3\x4a\xb5\xd7\xc0\x44\xf1\x2f\x28\xd1\xfe\x3d\x5f\xfc\x40\x8d\xea\x58\x48\x50\xa8\xa0\x18\x8d\x75\x53\x90\xb2\x7b\x00\x2d\x81\x75\x4c\xe7\x67\x9b\x69\x7f\xc0\x3c\xf9\x88\x79\xa2\x41\xb1\xf3\x57\x8d\x02\x20\x9b\x96\x3c\x24\xee\xfb\x03\x5d\xda\xfa\x48\xf6\x50\x52\xbe\x24\x85\x64\x5c\xe3\x56\xba\xb8\x7d\x7b\x79\x49\x92\x39\x95\x34\x41\x07\x15\x7c\x4a\xa0\xd0\xe4\xf8\x7f\x1e\x36\x4d\x3e\xb0\x9a\x6a\xbc\x95\xd9\x47\x70\x0b\x18\xa6\x16\xf9\x0a\x09\x0b\x26\x4a\x95\x2d\xab\xb2\xfd\x9b\xf9\xe8\x3a\x9a\x42\x60\x92\xd8\xd2\xbb\x99\x36\x0f\xb8\x22\x74\x6e\x12\x20\x03\x86\x3f\xb0\xe8\xe9\x88\x88\x21\x80\x06\x8c\xbf\x41\x74\xdd\x5d\x0c\x0d\x18\xb7\x93\x00\xbb\x4d\x18\x0d\xa0\xa3\x2d\xc6\x06\x74\xd4\xce\xa2\x39\x3c\x27\xfb\x5a\x8a\x3c\x12\x37\xbb\xb5\x06\x6d\x1f\x5b\xb1\xe9\xa8\x56\x51\x57\x4d\xf1\xc8\xa9\xb4\x75\xed\x14\xa3\x4e\xe7\x85\xee\x98\xf7\x41\x62\xd5\x8d\x8f\x53\x62\xdd\x46\xcd\x7f\xa0\xc5\x77\xb0\xbc\x81\xc0\x2a\x51\xed\xf9\xc6\xf8\x0b\x45\x28\xb9\x87\xa5\x0d\xae\x7c\xeb\x07\x0b\x2b\x94\xd5\xc3\xb2\xfb\xf7\xd0\x0d\x8c\xde\xb7\x78\xf5\xf2\xef\x21\x00\x2a\xc1\xb7\xb5\x62\xea\x66\x09\x51\xff\x30\x6b\xda\xab\xf2\xf1\x61\x92\xa8\x6f\x31\xcb\xd3\xd9\xd6\x94\x4c\xdd\xf5\x10\x61\xe2\x56\xe1\x72\x60\x3a\x85\x44\xfb\x14\x7c\xbb\x9b\xcf\x30\x4b\x33\x2d\x6d\x8d\x4f\x9a\xdc\x3f\x50\x99\x2a\x92\x88\xbc\xa0\x9a\x4d\x58\xc6\xf4\x32\x2c\x3f\xdf\x37\xbc\xe1\x2b\x80\x71\xcb\x14\xc9\x25\x57\x9a\xe2\x55\x28\x9c\x21\xd0\xac\x76\x8d\xf2\x8b\x60\xc0\x96\x9b\x62\x26\x10\x95\xe1\x85\xf9\x0d\x29\xb9\x50\x9a\x24\x20\x8d\x50\x97\x2d\xc9\x83\x14\xbc\x23\xf6\x76\xbb\xed\x59\x5e\x46\x2c\x8c\x2c\x08\x0f\xe7\x2e\x4f\x70\x64\x5e\x7c\x64\x99\x95\x3a\xc7\x2c\x94\xf3\x5f\xe3\x7f\xfa\x74\x8a\x88\xcf\x32\x7c\x43\x8e\x8e\x02\xfb\x12\x3e\x68\x29\xee\xa9\xbc\x75\xc1\x74\x4d\xd1\xa9\xba\x50\x88\x45\x04\x46\x3e\xe5\x71\x10\x9c\x16\x10\x69\x9a\xc3\xe0\x6c\x6c\x6b\x59\xaa\x72\x5a\x84\x19\xaa\xea\x86\xec\x20\xee\xed\x1d\xcc\x03\xeb\xeb\xdf\x32\xab\xaa\x4a\x67\xfa\xc6\xe3\x7b\x28\x92\x83\xa6\x29\xd5\x74\x6c\x0e\xc4\x59\xfb\x4f\x55\xd0\x04\xce\xc8\x3f\xaa\x0f\x33\x3a\x81\x4c\xfd\x78\xfc\x1f\xdf\xbd\xff\xeb\x7f\x1e\xff\xf4\x8f\xe6\x77\x28\xae\xa1\xe1\xb4\xf9\x40\xe0\x2b\x60\xac\x14\x17\x29\x5c\x21\x75\xf8\xa7\xd3\xf4\x2e\x92\x44\x94\x5c\xbb\x2f\x10\xdc\x7d\x3c\x17\x4a\x5f\x5e\x57\x7f\x16\x22\x5d\xfd\x2b\xa0\x84\x1f\xe9\xa7\xdc\x83\x6b\x1b\x00\xf6\x68\x5b\x3c\xe9\x87\x16\xec\x07\x90\x2a\x08\x1f\xd0\xb7\x76\xc6\x86\xed\xd5\x6f\x63\x95\xcc\x21\xa7\xf8\xcf\xaf\xfd\x14\x98\xfb\xb8\x2a\xbf\xc1\x11\x45\xdf\xdc\x81\xed\x9a\xbe\x47\x8b\xd7\x41\x1a\xa7\x6d\x11\x39\x7f\xb5\x82\x91\x27\x0c\x67\xc4\xcd\x96\xe5\x00\x95\xfc\xe8\xad\x14\x75\x18\xe4\xc5\xf5\x25\x59\xd8\x19\xee\xd1\xe4\x3c\x1f\xbb\xce\x20\xba\xba\x15\xcc\xb0\xbf\xae\xa8\x72\xcb\xd4\x50\xdd\x9c\xc2\x8c\x94\x87\x2e\xd0\x8d\xc7\xea\x37\x9d\xbe\xe7\x0b\x33\xae\x6a\x95\x9a\xf4\xf2\x24\x0f\x84\xf5\x21\xfd\xe4\x99\xa1\xba\x22\x96\x45\x0f\x65\xb9\xa6\x13\x0b\x91\x72\xd5\xd5\x8b\xe0\x5b\x9f\x75\xd7\x28\xaa\x9c\x57\x80\x1b\xd0\x3c\xd5\x61\x20\x17\x86\xd9\x2f\x30\x57\xe6\xde\xc7\xae\x16\x12\x16\xc0\x75\x15\x74\xed\xea\x7e\x51\xa9\x59\x1c\x9d\xc4\x51\xa4\x2a\x4b\x77\x1d\xd6\x61\xad\x5c\xf9\x8b\xfb\x2e\xea\xf6\xae\x44\x63\xeb\x45\x56\xcc\xa9\x79\xeb\x59\xa5\x07\x6f\x3c\xed\x36\x7a\xc2\xcc\x9d\x62\xff\x84\x95\xda\x2d\xaf\x7f\xfb\xc7\x06\xa1\x3d\xba\x1b\x9e\x4d\xcd\x89\xb2\x63\x37\xe9\x4a\x58\x8d\x67\xbb\x9a\xe4\x2a\xe1\xd5\xcf\x85\xb3\x29\x7c\x37\x01\xce\x64\xfa\x89\x29\x7d\x66\xcb\x06\xfa\x13\xb4\xa0\xb2\x8a\x12\x2a\x27\x19\x53\xf3\x50\x76\x6f\xdb\xe5\xb4\x5a\x9d\x95\x32\x8a\x15\x4e\x72\x2d\x7b\x98\xb9\x58\xa1\x32\x02\x09\xdb\x4c\xcc\x6d\x94\xc2\xda\x9d\x7f\x8d\x09\x12\x75\x7c\x74\x10\xa6\xde\xe3\xf3\x60\xa1\x63\x5f\x6a\x22\xd6\x30\x14\x25\xe8\x52\x1a\x9e\x95\x5a\x3e\x71\x2d\x52\x97\xd3\x12\x4f\xf8\x8b\xa1\xac\x93\xa6\x51\xa4\x6b\x51\xc5\x66\x2b\xe2\x0b\xd9\xd1\xae\xb7\x1d\xa0\xe7\x2a\xe9\xdd\x33\x89\x28\xc6\x35\xc7\x84\x24\x64\xb6\x1e\x3b\x22\xcd\xba\xd4\x00\x0f\x3d\x6f\x06\x3c\x1e\x8f\x8f\x2d\x95\xc2\x55\x3b\xb5\x16\x45\xf3\x79\xaf\xae\x85\x5a\xa8\x7a\x06\x33\x3c\x6f\x18\x95\xdd\x12\x59\x48\x56\x37\x55\xde\xc5\x1a\x4b\x56\xff\x0c\x94\x29\x9f\xa9\xf2\x75\xaf\x6d\x60\xcd\x7c\x9a\x56\xf0\xc1\x1b\x82\xa0\xb9\xfe\x7b\x27\xfc\xa8\xaa\x58\x3f\x28\x1d\x6a\x28\x3e\xb1\x5d\x8e\x93\xa2\x3c\x73\xdd\x8f\x73\xc8\x85\x5c\x56\x7f\x56\x59\x40\x23\xa5\x85\xa4\x33\x84\x1d\xb7\x83\xdb\x9f\x55\x7f\xd9\x1f\xb6\xc8\x5b\xff\xb5\x8d\xee\x48\x4a\x29\x81\xeb\x6c\x59\xe3\xf9\x7e\x71\xba\x9c\x5f\xb7\x9e\x28\x50\xd5\xb6\x7a\x06\xfe\x73\x5c\xe7\x2d\xa2\xcf\xad\x9a\x45\x74\xa9\xbb\xf2\x40\x67\xb5\xc0\x81\x71\x1f\x56\xc8\x53\xc7\xfd\xe1\x43\x84\xa4\x6c\xc1\x94\x08\x80\x7e\xad\x3a\x5a\x77\x4f\x78\xfc\x3c\x57\x88\xd2\xa6\xa3\x57\x16\x94\x4f\x05\x16\xa5\xae\x0e\xfb\x8a\x69\xf0\x75\xa8\xe7\x05\x65\x0c\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\x2a\x98\x74\xca\x97\x1f\x03\xb9\xb7\x6d\x23\xb7\x59\x18\xd7\x30\x83\xfd\xd3\x53\xb7\xf7\x18\xc9\xd5\xd6\xba\x0a\x19\xd7\x23\x21\x47\xb6\xeb\x37\xa8\xa4\x04\x0e\xe0\xb7\x57\xec\xf3\xef\xf1\x97\xde\xd4\xb7\x59\x25\x14\xf6\xe8\x80\x3f\x97\xa0\xa1\x20\x91\xa0\x5f\x22\x4c\xc6\x8e\xd4\x28\xab\xe7\xa0\xb3\xd0\x23\xf6\xa5\xdd\xa0\xbf\x84\xc8\x19\xef\x34\xb2\xeb\x5a\x6b\x52\x46\xbd\x1a\xd7\x4a\x10\x25\xd6\x8e\xe8\x9e\xbb\x87\x80\x10\x33\xdf\x86\x48\x9b\xce\x6d\x88\xb4\xd9\x42\xca\x10\x69\x13\xd4\x3e\xcb\x48\x9b\x5b\xcb\x93\x7e\x91\x61\x36\xf1\x91\xf5\x3b\x66\xee\xc4\x04\xd5\x07\xbe\xe8\x1a\x5c\x1d\x33\xd5\xcd\x9b\x3d\x10\x8a\xab\x28\x33\xaa\xb7\x64\x51\x44\xca\x7b\xeb\x99\xe7\xec\x2f\x16\xc2\xe6\xde\xa2\xda\x28\x8d\xaf\x99\x97\x99\x66\x45\xc7\x84\x80\x4a\xb5\xb4\xa9\x05\x86\xf9\x53\xa5\x44\x62\x11\x7f\x2a\x90\xbc\x8c\x2a\xed\x5f\x19\x2d\xf3\x9a\xde\x63\x0e\x4d\x02\x29\xf0\x7d\xb1\x98\x7c\xfb\xc1\xa2\x05\xfa\xb9\x9d\x2c\xcd\x3d\xf4\x9e\x2f\xdc\x9d\x44\x52\x0f\x58\x59\xfb\x4a\xa3\x8c\xfb\x65\x65\x33\x9a\x73\xe9\xb2\x15\x1a\x49\x8d\x28\x41\xd6\xa0\x3c\xe8\xcd\x11\xd3\x3a\x04\x12\xd3\x3f\x2c\x9b\xee\x76\xe1\x05\x2b\x07\xe1\xa2\x78\x95\x8d\x10\xa4\x63\xad\xc9\xe0\x75\x98\x68\x5b\xf6\xee\x3c\x42\x8f\x12\x38\xc2\xa5\xf2\xb8\x12\xf9\x73\x48\xe3\x7d\x91\xc4\x7b\x22\x85\x3f\x8f\x04\xde\x4f\xe9\x3b\x9a\xe4\x1d\x47\xea\x8e\x23\x71\xef\x11\xd7\x1e\x53\xca\x8e\x23\x61\x3f\x87\x7d\xad\x90\x30\x65\x9f\xfa\x90\xb6\xec\x11\x57\x89\x86\x4f\x68\xaa\x29\x24\x14\xc0\x2b\x40\x6f\xef\x81\x05\x9a\xcc\x87\x8c\x73\x52\xd9\x45\xe3\x5e\xd8\xb7\x9b\x2c\x65\xc3\x6d\x4d\x86\xdb\x7a\x8f\x36\xdc\xd6\xc3\x6d\xfd\x22\xb7\xb5\xe3\x56\x5f\xfe\x55\x1d\x19\x69\x09\x31\xe4\x0e\x5e\xd2\xd1\x92\x11\x50\x9b\x66\xcf\xa3\x58\xc7\x78\x9e\xe3\xc8\x5d\x4e\x5c\xd0\x39\xc3\x51\xaf\xcb\x2c\xeb\x52\xe7\xc2\xb6\x18\x0b\x70\x89\xd3\x5e\x94\x59\xe6\x6a\x23\x74\x9b\xfd\x8f\x1c\x2f\xb0\x8b\xec\x81\x2e\xd5\x19\xb9\x82\x05\xc8\x33\x72\x39\xbd\x12\xfa\xda\x9a\x4e\xba\xf5\xdb\x44\xc2\xb0\x9d\x13\x36\x25\x6f\x32\xaa\x41\x69\xa2\xe9\x0c\x23\x6a\xeb\xea\x9d\x42\xb6\x06\xad\xeb\x93\x1f\xd0\xa2\x15\xbe\x37\x7f\xed\x01\xe4\x47\x87\xd9\xab\x19\x9b\x42\xb2\x4c\xb2\x70\x36\xf1\xbd\xef\xc9\x47\x9c\x7b\xf1\x00\xe3\x94\x36\x20\x54\x7f\x86\x65\xc0\x0a\xa1\xf4\xad\xa6\x52\x1f\xba\x16\xd8\xb5\x27\xc4\x4c\x76\x42\xb3\x0c\x52\xc2\xf2\x1c\x52\x46\xb5\x11\x04\xe9\x54\x83\x24\xb4\x59\x6f\x56\xd9\x20\xf0\x46\x22\xc2\x9c\xf2\x34\x03\x49\xa6\x94\x65\xaa\x7b\x28\xfa\x4a\x5d\x5b\x85\x89\x99\x8c\x5b\x00\x7c\x0c\x63\xf4\x08\xf3\x34\x49\x84\x4c\x31\x86\x56\x78\x24\x76\x7c\x89\x10\xfe\x64\xda\x47\x14\x15\x72\xca\xe9\x0c\x72\x57\xb5\xbe\x4d\xd6\x24\x13\xc9\xbd\x22\x25\xd7\x2c\xb3\x2f\x2f\xc4\x3d\x0a\xc4\x19\x9e\xd4\xce\x43\x77\x67\x00\xd5\x3f\x47\xd5\x21\x1c\x19\xaa\xd4\xf9\xaf\xeb\xaf\xf0\x83\x8e\xc4\x45\x50\xcb\x62\x28\x65\xf0\x09\x92\x10\x01\xb1\x6d\xbd\xff\x04\x49\x75\x2b\x28\xdc\xe1\x88\xcc\x69\x21\xfe\x11\x83\x37\x92\x23\xcb\xb6\x48\x01\x3d\xb1\x82\x68\x02\xb0\x8f\x9b\x2d\x76\x8c\xc8\x5b\xb7\x08\x4c\xb9\x99\xb7\x7f\x66\x8c\x43\x7b\x61\x94\x2d\x89\x09\xcd\x4a\x09\xe6\xcf\xb5\x9a\xdf\x1e\x46\x2a\x98\x34\x4f\x8b\xa1\x4d\x0a\xa1\xc9\xc9\xf1\xf9\xf1\xe9\xda\x1e\x39\xfe\xff\xd8\x7b\xf7\xe6\x36\x72\x6b\x5f\xf4\xff\xf3\x29\x50\x4e\xea\x48\xda\x21\x25\x7b\x92\x49\x65\x4f\xed\x7b\x53\xda\xb2\xc6\x56\xc5\x96\x79\x25\xcd\xe4\xa4\x26\xb3\x27\x60\x37\x48\xe2\xa8\x1b\xe8\x00\x68\x49\x4c\xcd\x87\xbf\x85\x85\x47\xa3\x49\xca\x36\x01\x48\xa4\x9d\xee\x54\x4d\x2c\x8a\x6a\xbc\x17\xd6\xe3\xb7\x7e\x4b\x02\x9e\x5f\x2e\xa5\x22\xb5\xa9\x52\x51\x74\x83\x92\xb4\x6e\xa0\x06\x3d\x29\x0e\xca\x11\xa2\x2a\x07\xe8\x44\xdf\x91\xa6\x6c\x0e\xcc\x8a\x65\x8c\x1e\x21\xc9\x91\x12\xb8\xa4\xd6\x4f\x06\x9f\xea\x2f\x29\xd1\xda\x2a\x38\x87\x07\xbf\x1e\x8c\x10\x51\xc5\x11\xba\xe7\xec\x40\xc1\xf4\x1d\xa3\x1b\x8e\xda\xe4\x24\x1a\xd4\x75\x64\xc9\x5b\xc4\x08\xb1\x67\xcb\x17\xca\xd2\xd7\x0d\xe2\xad\x49\xf9\x5a\x60\x95\xc2\x74\x1d\x3e\xe7\x0f\x54\x59\x36\x07\x2d\xbf\x5f\xc2\x6e\x32\x57\x16\xc2\x12\x55\xf4\x8e\x9c\x2c\x08\xae\xd4\xc2\xc0\xe3\x19\x67\xe3\x7f\x11\xc1\x81\x17\x9b\xd9\xdf\xa4\x76\x23\x2d\x46\x19\x3e\x09\xf1\xca\xf5\x0e\x65\x41\xc6\x64\xb6\x2e\xdd\xa3\xaf\xbd\x37\x24\x5a\x25\x42\xab\xf2\xe8\xed\xcd\xcd\xe4\x0d\x51\xa1\x94\x67\xf0\x21\x7a\x73\x7e\xe3\x92\x22\x82\x5a\x51\x7b\x20\xde\xf3\xa0\x35\xc7\xa8\xe1\x62\x1f\x6e\x99\x05\x97\x49\xcb\x89\x9e\xe0\x8a\x79\xcb\xa5\x32\xc1\x01\xc5\xb5\xd8\x66\x90\x29\xc7\xfb\x08\x7f\x97\x0f\x7e\x31\x39\x46\x7f\xe3\xad\x9e\x90\x29\x9e\x56\x4b\x74\x8f\x99\xf5\x76\xa7\xc1\x72\xf5\xf3\x42\x77\xe5\x85\xbe\x41\xf4\xce\x7f\x4b\x70\x49\x84\x04\x01\x4d\x70\x72\x76\x6d\xb6\xe3\x1e\xf4\x2d\xeb\x52\x9e\xb5\x52\xf1\x1a\x2d\xec\xb0\xfb\x9c\xd9\xf6\x70\x1e\x9b\xe3\x6a\xf9\x49\x05\x69\x8c\x10\xb7\x7f\xf3\xd5\x89\xe8\x35\xe9\x65\xe6\xdd\x7e\x3e\x35\x6a\x6a\x38\x6d\xd6\x63\x6e\x98\x2f\xad\x6c\xd3\x5b\x35\x1b\x90\x32\x03\x00\x1d\x65\x04\xa1\xa3\x34\x36\xed\xd5\x17\x41\xf4\x20\xf9\x4d\xf9\x70\xed\x28\x1b\x76\x1b\x3d\x09\x7e\x1b\x59\x58\x9e\xdd\x7c\x26\x72\x94\x56\x2a\x7c\xf5\xe5\x41\x85\xe6\x02\x33\xce\x68\x81\x2b\xfa\x2f\x52\xa2\xb6\xe1\xcc\x26\x6b\x81\x66\x5b\x60\x49\xc6\x10\xca\x65\x46\x9c\xcb\x80\x3e\x59\x4b\x07\xc5\x39\xa8\x7b\x80\xc6\xd2\xe2\xde\xf4\x3a\x4f\x57\xb3\xc2\x8c\x93\xb9\xc0\xc3\x67\x2d\x42\xdb\x5b\xac\x3c\x3b\x1e\x7d\x11\xea\x24\xca\x94\xc9\xbf\x4e\x96\xa5\x38\xc2\x45\x01\x04\xd1\xe6\xba\x02\xc1\x2b\x89\xb8\x4b\xdf\x5f\xd9\xe6\x55\xab\x80\xfb\xa6\x7b\x99\x20\xb6\x40\xac\xad\xa7\x44\x74\x4c\x83\x42\xad\xcf\x69\x16\xaf\x8b\x6d\xd6\x34\xe7\xc2\x7e\x4e\xc7\xc0\x6c\x4e\xd0\x2b\xdd\xf2\x1f\xbf\xfd\xf6\xf7\xdf\x66\x68\x47\x0f\xcf\xb5\x82\x19\xba\x38\xbd\x3c\xfd\xe5\xfa\xc7\x33\xe0\x2f\x4f\x7d\x7d\xa6\xac\xcb\xdc\x39\x97\x59\x33\x2e\x9f\x34\xdf\x12\x98\x00\x93\xa5\x6c\xee\x23\x71\x0d\xbd\xd2\x9b\xb0\x95\x86\xf3\xdc\xda\x24\xd6\xbb\x6d\x5c\xcc\x32\x43\x9e\x54\x18\x27\xd3\x02\x6b\x2f\x24\x95\xac\x08\x69\xb2\x59\xfc\xd7\xfa\x6d\xbd\xfa\x32\xa8\x6c\x85\x29\x33\x0e\x1e\xa6\xbe\x2f\xdf\x96\x1a\x87\x3e\x7c\x45\xc6\xbf\x24\x05\x67\x65\x8a\x09\x90\x4b\xa5\xb5\x3d\xc9\x7a\xe6\xae\xcd\x3b\x9d\x8b\xb8\xbb\x4a\x6c\x63\x60\x49\xa6\xae\x28\xf2\xab\x9a\x47\x4e\x1a\x7a\x01\x78\xdb\x1f\xff\x10\x1f\x20\x2b\x9a\x6b\x5e\xdc\x66\x74\x91\x25\x0a\xb0\xd7\xfa\xa4\x15\x26\x16\x78\x73\x36\x31\x9d\xd3\x2b\x73\xf9\xe1\xa6\xe3\x12\xd1\x5a\x38\xee\xc2\xba\x6f\x6d\xb4\x10\xb3\x12\xdd\x92\x26\xcd\xba\xd4\x02\xd3\xe1\xd2\xfa\xb0\x34\xf0\xbd\x0b\x1b\x44\x36\xf9\xba\x46\x10\x38\x38\x99\xd1\x88\xd3\x4a\xca\x04\x71\x6f\x08\x04\x5a\x23\x64\x86\x69\x85\x30\x78\xe5\x15\xad\x89\xa9\x7f\x0d\xce\xfe\x0e\x88\xf0\x15\x09\x9c\xaf\xd5\xdb\x78\xe0\x30\xc6\xdf\x6d\xed\x35\x4c\xa5\x59\xf8\xba\xcd\x00\x2b\xb3\x45\x8f\x26\x6b\x30\x03\x3e\xe7\x19\xcc\x80\x48\x33\xa0\x11\xe4\x5a\xf1\x68\x5d\x33\x1b\xe0\xc6\x74\xe3\x11\xb8\xcd\x94\xcc\xb8\x20\xab\x78\x9b\x00\x07\x63\xa1\xd8\x09\x50\xd3\xd3\xc9\x85\x8f\x7d\xf1\x1e\xd6\xc5\x50\xe1\xca\xb6\x58\xb8\x30\x29\x23\x52\x9e\x00\xb2\xa6\x6d\x8c\x63\x19\xae\xb6\x56\x90\x78\x94\x4f\x23\x08\xa9\x61\x1e\x47\x1d\x3d\x8d\x1e\x2e\x61\xe6\x43\xa2\x0a\x13\x37\x77\xb0\x22\x0b\x03\x73\xd3\x35\x4b\x0a\xe7\x77\x13\x5b\x08\x2c\x17\x04\x92\x31\xc9\x03\x55\xd2\x34\x6a\xe8\x3d\xdd\x8c\x6b\x7d\x61\x2e\x70\x41\x50\x43\x04\xe5\x5a\xc5\x68\x99\x2a\xf9\x3d\x43\x53\x32\xa7\x4c\xba\x15\x4b\xe9\x92\xdb\x12\x80\x24\xa2\xd2\x97\x80\x3e\x46\x57\xbd\x52\x64\x96\xae\xaa\xe0\x9d\xcc\xb4\x53\x34\xca\x34\x25\xa0\xbc\xc0\x36\x68\x71\x55\x2d\xbb\x8d\x17\x32\x4e\x3e\x32\x43\xf1\x1b\xc2\xcc\xec\x61\xcb\x60\xa0\x25\xa9\xf0\xd2\xa4\x24\xcf\x28\x03\xef\xaf\x90\x47\xc7\xe9\xd0\xac\xe8\x0e\x72\x11\xbc\xf3\xd1\x9d\x41\x25\x12\x04\x17\x49\xc4\xb8\x03\x06\xec\x53\xcf\x80\x01\x1b\x30\x60\x03\x06\x6c\xfd\x19\x30\x60\xfd\x67\xc0\x80\x3d\xde\xa1\x7d\x0e\xda\x0d\x18\xb0\xc1\x2b\xb3\xfe\x0c\x18\xb0\xa8\x67\xc0\x80\x7d\xf2\xd9\x3b\x11\x3d\x60\xc0\x3e\xe3\x19\x30\x60\x9f\xf9\x0c\x18\xb0\x01\x03\x36\x60\xc0\x06\x0c\x58\xc2\x33\x60\xc0\xb6\x1f\xde\x10\xfc\x89\x7f\x06\x0c\xd8\x80\x01\xdb\xf2\x19\x30\x60\x2b\xcf\x80\x01\x1b\x30\x60\x1f\x7b\x06\x0c\xd8\x80\x01\xb3\xcf\xe0\x6d\x5c\x7b\x06\x0c\xd8\x86\x67\xc0\x80\x6d\xd7\xce\x60\x06\xa4\xbd\xec\x49\xcc\x00\xa9\x78\x73\x4d\xe7\x09\x44\x83\xb9\x8e\xc1\xb5\xef\x89\x65\x21\x94\xb6\x7a\xab\x34\x1f\x3a\x3f\x16\x30\x94\xe9\x03\x11\xa2\x74\xba\x9b\x64\x4a\xb4\x89\xa0\x87\xd5\xa4\xdc\x26\x17\x33\x08\x20\x07\x24\x69\xfa\x54\x58\xb1\xa6\xdb\x09\xea\x04\xf4\xd5\x67\x77\xbb\x51\xa6\x6d\x97\xf8\x1e\x04\xf3\x51\x60\x66\x4a\x6d\xda\xba\xcb\xfa\x7a\x9f\xf0\x52\xba\xd2\x04\x8c\xb3\xb1\x61\xff\x3c\xd6\x1d\x3e\xe6\xf2\x38\xc1\x1b\x9c\x48\x7a\x66\x30\x72\x13\xc1\xa7\xe9\xc4\x67\xf0\x16\x09\x15\x39\xbf\x52\xda\xb3\x14\xf4\xce\xce\x90\x3b\x7b\x82\x7c\xca\x80\xd6\xc9\x79\x87\xef\x29\x4a\x67\x3f\x11\x3a\xfb\x88\xce\xd9\x05\x32\x67\xe7\xa8\x9c\x3c\xe1\xde\x0c\xa1\xde\x4c\x9a\xd2\x13\x84\x4d\x2c\xc0\xfb\x66\x21\x88\x5c\xf0\x2a\x5a\xe0\xe4\x12\x36\xef\x29\xa3\x75\x5b\x03\xdd\xbe\x96\x29\xf4\xce\x83\xd0\xa5\x13\x19\x16\x9b\x6e\x22\xe1\xc0\xcb\x5f\x12\xa8\x77\x8c\x69\xa5\xb7\x16\x90\x58\x2e\xf0\x1d\x28\x4b\x6d\x51\x10\x52\xa6\xa8\x4b\xa1\x17\xf5\xf7\xc7\xbe\x87\x86\x8c\x9c\x4a\xf4\x2a\xed\xaa\x49\xd3\xc7\x03\x37\xd3\xef\xbf\x89\x7a\xc7\x5c\x34\x79\x6e\xe9\x37\x57\x93\xb3\xde\x2d\x0d\x1f\xbc\x85\x63\x7c\xb6\x20\xc5\xed\x95\x85\x78\xec\xee\x66\x4e\x77\x7f\x24\xb9\x3e\x72\x28\x06\xa9\xd6\x7d\x5f\x07\xd5\x06\x78\x3f\x34\x37\x87\x55\x24\xe2\x8e\x16\xe4\xf8\x19\x0c\xe8\x5c\x46\x69\xfa\x41\x40\xe0\xbe\x86\x81\xef\x8b\xda\x75\x6d\xba\xe3\x3d\xdf\x81\xef\xc4\xf6\x14\xc0\x8c\x15\x2e\xfc\xda\xcc\x37\x1f\xba\xa4\x6e\x1c\x4a\x42\x7c\x8a\xc2\x9c\xaa\x45\x3b\x3d\x2e\x78\x7d\xa2\x45\x87\xf9\xcf\xb4\xe2\xd3\x93\x1a\x4b\x45\xc4\x49\xc9\x0b\x7b\xad\x8f\x0b\xdd\x03\xca\xe6\xc7\x75\x79\x74\xfc\xbf\x92\xfa\x70\x61\x7d\xb8\x36\x3d\xe8\x11\xe3\x75\x4a\xb4\xdc\xe7\x62\xc5\x8a\xd5\x93\x92\xbe\x49\x93\xef\xef\xd4\xea\x09\x89\x70\xd9\x9d\x40\x65\x07\xa9\x8d\x32\x38\xaa\x73\x0a\x95\xfd\x80\xc3\x3e\x19\x14\x36\xcb\x59\xcd\x04\x81\xdd\x23\xf8\xeb\xde\xd8\x42\xfb\x02\x79\xdd\xc3\x9a\xfb\x19\x60\xae\x39\x20\xae\xf9\xe0\xad\xfb\x5a\x9a\xfe\xc9\x20\xad\x5f\x04\x9c\x35\x63\xdc\x26\x13\x8c\xf5\x39\x20\xac\xfb\xeb\x83\x41\x19\x60\xab\xcf\x07\x59\xcd\x32\x8f\x59\xad\xd8\x44\x91\xb0\x03\x88\xea\x73\xc4\xa5\x9f\x2c\x26\x9d\x21\x1e\x9d\x33\x16\x9d\x2d\x0e\xfd\x64\x50\xd4\x74\x18\x6a\x56\x9f\xc2\xb3\xc0\x4f\x73\x42\x4f\x93\xd7\x97\x32\xaa\x28\xae\x5e\x93\x0a\x2f\xaf\xd3\x00\x8a\xb9\x56\xe2\x72\x0d\xc4\x68\xdc\xd6\xfd\x78\xfb\x02\x4b\xe4\xaa\x20\x59\xea\x11\x17\x84\xb6\x2a\x30\xc4\x8f\xcd\xf8\xa2\x8b\x91\xa1\xed\xb9\x28\xee\xb9\xb8\xad\x38\x2e\xe5\x49\xc3\xcd\x7f\x3a\x26\x8a\x80\x82\x22\x49\x4d\xdf\x0f\xf7\xb8\xe1\xfb\xd8\x93\x5d\xf3\x96\xdf\x23\x3e\x53\x84\xa1\x43\xca\xdc\xce\x39\x0a\xbc\x34\x5d\x78\x24\x39\xde\xa1\xdf\xfa\xea\xa5\x6b\xe4\xeb\x8b\x7b\x40\x64\x48\xca\xbd\x8e\x7c\xd9\x3e\x7e\x3a\xf4\x65\xbf\x38\x6b\xab\x7e\xf8\xcb\x84\xc4\xf2\xc4\xbe\x5e\x1d\xa3\xf7\x56\x9d\x78\x05\xfd\xf1\xa2\x08\xb3\x12\x59\xde\xa8\xaf\x6f\x9f\x24\x43\xb0\xfb\xc6\x8d\xc7\x4c\xf7\xf1\x2c\xe6\x06\xd6\x5a\x26\x47\x58\x7f\x0b\x14\xd0\xc1\xe9\xba\x37\x4e\xd7\x1d\x21\x83\xbf\x3e\x6b\xeb\xf9\x91\xc0\x83\xb5\xf5\xef\x62\x6d\x05\x74\x6d\x6f\x04\x2e\xc8\x64\x9f\x94\x37\x27\x40\xba\x04\xb5\x4e\x87\xf3\xe2\x82\x11\x62\x12\x9a\x3a\x32\x3e\xe0\x9d\x9b\xb5\x55\xb5\x34\x3e\xc4\x1e\x33\x63\xfc\xd6\xba\x59\x90\x35\x4a\x3b\x08\xa5\x6e\xe8\x5d\x67\x9b\x34\x82\x5b\x8d\x44\xb4\x8c\x69\x15\xc3\x1e\x27\xdd\x79\x6d\x8b\x48\xc2\xe2\xdd\xe9\xb8\x47\xb8\x67\xc1\xd1\x00\xf4\x5c\x10\xd4\xe5\xd5\xf4\x3b\xa2\x5b\x9d\x71\x51\xd0\x69\xb5\x44\x0b\x5c\x69\x63\xc9\x82\x87\x6f\x69\x55\xd9\xd7\x24\x80\x95\x89\x32\xa1\x67\xa3\xd1\x54\x9c\xcd\x61\x32\xb0\xe9\x08\x79\x68\x48\xa1\xdb\x2c\x2a\x82\x59\xdb\x98\x7e\x6a\xfd\x68\xc9\x5b\xe1\xfa\x99\x84\xd6\x0e\x5a\xa7\x12\x31\x5a\x8d\xdc\x94\xf7\xa9\x19\xd7\xf7\x7c\xe7\x52\x96\xa4\xb4\xac\x8a\xf7\x54\x92\x11\xbc\x33\xba\x4f\xa6\x2f\xfc\x8e\x08\x41\x4b\x62\xf6\x8d\xf9\xac\x11\xfc\x8e\x96\x1d\x76\x5c\x6f\x0b\xc0\x6d\x47\xb7\xf5\x23\xbc\xd7\x89\x56\xc6\xd9\x98\x91\x39\x06\xf5\xd8\x0a\x34\x83\xe8\x34\xed\x1b\xfc\x20\x2b\x69\x81\x15\x91\x80\x95\xef\x51\xae\xde\x51\x1c\xdd\x13\x3d\x9e\x60\x47\xa1\x43\xc6\x11\x87\x8c\xb7\x96\x51\xb5\x84\x88\xde\xa2\x55\xa8\xe4\xf7\xec\x28\xe5\x60\x1a\x98\x03\x46\x53\xa2\x70\x97\xb4\xe6\x54\x32\x89\x08\xc3\xd3\x4a\x9f\x3d\xc0\x90\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\x62\xea\x13\xcd\x5b\xb5\x27\xf7\xc8\x63\xae\x23\x93\x51\x12\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\xbe\x21\x0f\xa5\x03\x5e\x99\x1c\xdf\xd7\x97\xd7\xbf\xbc\x3b\xfd\xef\xf3\x77\x71\x5b\x00\x64\x1d\x0b\x75\xe7\x96\xd1\x7f\xb6\x04\xe1\x9a\xb3\x39\xc2\x55\x98\x02\x33\x02\x47\x67\xf0\x01\x48\xc5\xbc\xc9\x32\x91\x7a\xad\xbe\x04\xa2\x04\xc3\x1a\x1c\xf3\x39\x32\x82\x62\x51\x20\x09\xe8\x8f\x3e\x12\xc6\x8d\x01\xf0\xa7\x3d\xf2\x06\x46\x94\x3e\xe3\xc6\x20\xa4\x0c\x61\x24\x29\x9b\x57\xc9\xb6\x60\xb2\x47\x24\xd5\x1f\x32\xee\x46\x30\x89\x75\x8b\xa4\x3b\x45\x7a\x7d\x88\xb7\x2a\xf3\x39\x04\xba\xcb\xcc\xb9\x00\xc8\x43\xc3\x25\x71\x2e\x00\xa3\xe3\x5e\x4c\x10\x2e\x4b\x91\xa4\x47\x5b\x61\xe3\x6d\x74\x43\x10\x60\x9a\x35\xa1\xdf\x11\x7a\x89\xfe\x0b\x3d\xa0\xff\x02\x87\xc0\x1f\xe3\x9b\xca\x63\x6e\xe7\x40\x34\x2f\xb8\x54\x17\x93\x4c\x0b\xfd\xd7\x05\x56\xf0\x46\xbd\x1e\x8a\xa3\x29\xb5\x96\x19\x79\x50\x44\x68\x8d\xd8\xae\x61\xea\xcc\x25\x39\x17\x74\x07\xbf\x94\xdd\x9d\x1a\x67\xbd\x98\xf5\x81\xd0\xcf\xb4\xbf\xa1\xe1\xb7\x5c\xaa\x4b\x2b\xad\x43\x96\x8b\xb0\x1f\x35\x56\xc5\xa2\x2f\xee\x53\x5a\x7d\xaf\xf7\x5e\x70\xfd\x97\x1c\x2e\x4a\x93\xce\xb6\xa0\x09\xc2\x61\x7f\x4e\x6c\x1a\x64\x2e\xdf\xd6\xfd\xd8\xd6\x5a\x71\x6f\x82\x1a\x66\xf5\xb6\xa0\x72\x44\xc3\xcb\x63\x74\x8e\x8b\x45\x42\x2f\xf4\x6c\x94\x81\x32\xd0\xf0\xd2\x74\x63\x81\xef\xf4\x1e\xb7\xad\x02\x7c\xcf\xa8\xae\x3e\x50\x06\x07\x4e\x4b\xac\x02\x33\x34\x4d\xc1\x8f\x09\x32\x23\x42\x98\x94\xc9\xe9\xd2\x65\x5e\x24\xef\xb6\x24\x29\xd7\x08\xae\x78\xc1\xa3\x99\x0d\x72\x6e\x95\x89\xed\x0b\xcc\x3d\x84\xad\x7c\xa0\xf0\x87\xd7\x93\x11\xba\x39\x9b\x8c\x10\x17\xe8\xfa\x2c\x0d\x07\x12\x5a\xa3\x2f\x6e\xce\x26\x2f\x76\xba\x02\x41\x3a\xc7\xcd\xd9\x24\xe2\x25\xeb\x48\xc2\x1a\x37\xe3\x5b\xb2\x8c\xd4\xee\x72\x68\x98\x63\xbf\xb1\xb2\x0c\xc8\x4c\x73\x8d\x9b\xad\xdf\x26\x08\x2e\xe9\x40\xb6\xf0\xf9\xcf\x40\xb6\x30\x90\x2d\x0c\x64\x0b\x03\xd9\xc2\x40\xb6\xb0\xbf\x40\xff\x81\x6c\xe1\x93\xcf\x40\xb6\xf0\xe8\x33\x90\x2d\x6c\xf5\x0c\x64\x0b\xeb\xcf\x40\xb6\xf0\x91\x67\x20\x5b\xf0\xcf\x40\xb6\x30\x90\x2d\x7c\xb9\x52\x7b\x20\x5b\x58\x7d\x06\xb2\x85\x81\x6c\x61\x20\x5b\x08\x9f\x81\x6c\xe1\x91\x67\x20\x5b\x18\xc8\x16\x06\xb2\x85\x8f\x3f\x03\xd9\x42\xf4\x33\x90\x2d\x6c\xf7\x0c\xe9\x3f\x5b\x3e\x03\xd9\xc2\x40\xb6\xb0\xfa\x0c\x64\x0b\x9f\x7c\xf6\xc3\x3d\x3e\x90\x2d\x0c\x64\x0b\x1f\x7d\x06\xb2\x85\x81\x6c\xe1\xa3\xcf\x40\xb6\x10\xf1\xec\x9d\xd3\x75\x20\x5b\x18\xc8\x16\x3e\xd6\xc6\x60\x6d\x6d\xf7\x0c\x64\x0b\x03\xd9\xc2\xda\x33\x90\x2d\xac\x3f\x03\xd9\xc2\x40\xb6\x30\x90\x2d\x0c\x64\x0b\xfe\x19\xc8\x16\xbe\x76\xbf\x93\x20\x92\xfe\x8b\x4c\x78\x45\x8b\x65\x72\x9e\xc9\x15\x91\xbc\x15\x85\xbe\xb1\xe1\xb5\xa8\x81\xf7\x7a\x8f\x42\x92\x92\xbd\x67\xc9\xfb\x57\xc1\xc4\x85\x49\xfc\xc2\xce\xc1\x53\x4c\xc1\x5e\x24\xf2\xbb\x01\x5e\xc6\x23\x08\xe0\x25\x0a\x0b\x65\xa6\x2f\xce\x59\x9a\x6c\xb5\x87\x03\xd9\x87\x44\xc2\x90\x7b\xc4\xef\x22\xc5\xbd\xb0\xa5\x8f\x6e\x2e\xdc\x34\x15\x4d\x49\xc9\x44\xe8\xba\x05\xed\x82\xd8\x10\xb8\xfc\x0e\x15\x4d\x3b\x42\x35\xa9\xb9\x48\x48\x8c\xc8\x60\xc1\xf5\xb6\xca\x3e\xac\xd3\x95\xe9\x90\x9b\x7c\xc5\x61\xfe\x97\xc6\x5e\xe8\x08\x62\xfc\x5a\x51\x27\x0e\x93\xb0\x66\xeb\x65\xab\xa9\xea\x79\x81\x2e\xb9\xba\xb2\x87\x7b\x67\xeb\x95\x19\xb1\xe0\xa6\x30\x9d\x5b\x26\x72\xc1\xbb\x0b\xed\xb3\x73\x27\xd1\xf9\x86\x4f\x21\xfe\x29\x1b\xfd\x12\x3f\xa6\xa8\x0e\xe1\x4a\x10\x5c\x2e\xa1\x1b\x05\xe0\xf5\x3a\xff\xdf\x17\x98\xb6\x59\x54\x98\xc6\x83\xfc\x72\x1d\xe9\x33\xe8\x05\xd2\xfb\xb5\x03\xbf\x43\x1e\x99\x5f\xac\x91\x87\x78\x53\x73\xc6\x8f\xdd\xaf\xcc\x1f\x8f\x12\x2c\x3d\xac\x60\x77\x81\x11\x03\xa6\x2c\x95\xa1\x9a\x90\x66\xdc\x19\x93\xae\x24\x0d\xd1\xda\xbb\x71\x76\xc6\xeb\xe8\x4b\x86\x6b\x5a\xb8\x53\x71\x6a\x36\x21\xe5\x6c\xc5\x02\xcc\xd1\x65\x6d\x98\xd6\x75\xab\xf0\xb4\x22\xc7\xe8\x42\x6d\x2c\x95\x9f\x96\xb3\x8c\xb2\x60\x55\x13\x71\xaa\x1b\x15\x68\xd8\x54\x86\x79\x81\x30\x2d\x7e\x38\x23\x88\x30\x25\x96\x7a\xff\x4d\x78\x79\xad\xb7\x60\xef\xdb\xc9\x84\x0c\x89\xf0\xd4\x1c\xd0\xd4\x44\x58\x6a\x1e\x30\x69\x3a\x90\x34\x2f\x88\xb4\x73\xf7\x1b\x3e\x99\x30\x3b\xa7\xb7\x2d\xf4\x15\xb0\x41\x34\x21\x3e\x4b\xec\x81\x6e\x71\xc2\x4b\xad\xe0\x08\x62\xe4\x93\x3f\xa3\xc6\xd9\x77\xa1\x3b\x77\x0b\xde\x39\xac\x3a\xcd\x07\xdf\x61\x5a\xe9\x03\x9c\xd8\x01\x9f\xdd\x9c\x29\x4a\x93\x29\xae\x60\x81\xf4\xfb\xb4\x59\x6c\x0a\x56\x2f\x8b\xab\x58\x70\x49\x18\xc8\x4b\xec\xb3\x6d\x7c\x2e\x80\x15\x31\xa5\xb9\x8b\x53\x11\xbf\x17\x33\x44\xea\x46\x2d\x47\x88\xdc\x11\xb1\x54\x0b\x40\x06\x08\x6e\xd0\x22\xd0\x84\xee\x5b\x8d\xcb\x60\x77\x8c\x10\x77\xce\xe2\xc4\xe6\xe1\x7e\xb0\xf6\x53\x5b\x29\x63\x4d\x81\xfe\x9d\x94\x0e\x6a\x9e\x0c\xbb\x26\x37\xe9\x09\x4a\x15\x9a\x39\x49\x4b\xf4\x53\xd1\x9a\xc6\x51\x41\xa2\x8c\x67\xe1\x1d\xf4\x22\x48\xf3\xd0\x5b\xa2\xc6\x0f\xe0\x4a\xc4\x35\x6f\x19\x6c\x8d\x82\xd7\x4d\xab\x02\x95\xdc\x69\xf7\xcf\xe6\x63\x2c\x38\x9b\xd1\xb9\x8d\x82\x9d\xd4\x98\xe1\x39\x19\xfb\xee\x8c\x3b\xf5\xe6\x64\x77\xe8\x0c\x5c\x3a\x1a\x89\x49\x8e\x9c\x62\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\x8d\x8f\x14\xa6\x86\xc5\xf3\x05\xc5\x33\x85\xc4\x9f\x24\x20\x6e\x65\xec\xce\x0f\xbf\xbd\x02\xd7\x8e\xbf\x8d\x24\x7c\xec\xf8\x8b\x64\xff\xc9\xc5\xac\x6b\x9f\x4a\xc4\x6b\xaa\x94\xf5\x16\xe0\x90\xa7\x66\xc5\x77\x63\x05\x16\x9d\x19\x05\x8a\xca\x90\x2f\xa5\x73\xf9\x44\x77\xcb\xdf\xaf\xe0\xad\x62\x88\xd6\x4d\x45\x6a\xc2\x14\x08\x9e\xb1\xb3\x6d\xc1\xf5\x77\xdc\x8d\xa0\xc0\x8c\x71\x85\xc8\x43\x41\x48\x69\x3b\x39\xc8\xc6\xe0\x19\x64\xe3\x20\x1b\x3f\xf5\x24\xfb\xaf\x33\x39\x32\x43\x9f\xf5\x5a\x34\x4a\xcb\x05\x73\xc4\x9c\xfa\x0c\x5f\xf7\x1c\x07\x7c\x86\x48\x2c\x97\x65\xd7\x88\xa5\xc7\xc4\xb1\xde\x4a\x04\xf9\xe1\x56\x2a\x49\x87\x95\x31\xb6\x28\x67\xfb\xc1\x85\xde\x5b\xee\xab\xb6\xda\xa5\xf3\x3a\x60\x16\xd7\xba\x3d\x78\x34\x75\x8f\x1c\xa8\x7b\x41\x8a\x5b\xe3\x42\x2e\x89\x01\x59\x10\x73\x07\xc5\x69\x00\x01\x4d\xfe\x82\xb7\x55\xa9\xdb\xb0\xd3\x41\xcc\x02\x3d\x50\x75\xfc\xd1\x35\x8c\x6a\xf7\x2b\xa5\x87\xb7\x67\x56\xef\xa1\x40\x97\x59\xf0\xfb\x50\x95\x80\x39\xd5\x0a\xc3\x02\xb3\x32\x1a\x7f\xbf\x07\x61\x65\x0c\x98\xf4\x1d\x85\x82\x4d\xe3\xfb\x10\x5c\xbc\xf6\x50\x7d\x2d\x87\xb1\x05\xea\xe3\x5b\xc2\xf4\x01\x5a\x5f\xf8\x99\xa7\x74\xa0\x02\x34\xba\x14\xa6\x02\x00\x55\x62\x45\xa5\xd6\x36\x0d\xd4\x0d\x3c\x2a\x0d\x97\x92\x4e\x2b\xd2\xc1\x70\x5e\xd8\xcd\xf9\x42\x0b\x0f\x77\x5b\xa4\x51\x2c\x66\xf0\xed\x65\x50\x00\xf4\xac\x9e\xf1\x32\x45\x8d\x5b\xf1\xe8\x7b\x21\x6c\x10\x9c\x50\xc2\xa3\x34\x32\x18\x04\xb0\x5e\xd7\xfe\xaa\x7e\x1d\xae\x7c\x7d\x26\xb1\xe2\xf1\x2a\x5d\x1e\x77\xbe\xeb\xc6\x7e\x79\x69\x7b\x9b\x42\x90\x0a\x8c\x1c\xb9\xa0\x0d\x9a\x12\x75\x4f\xc8\x4a\x52\x42\xb7\x6f\x0e\xe5\x91\x43\x29\x27\x76\xa2\x43\x2a\x18\xc4\xc7\x31\x9a\xf4\x8e\x39\xc4\xbc\xd3\x89\x46\x2e\xd8\x77\xab\x22\x0a\x98\x50\x9d\x98\x71\x22\x6c\xc3\x58\x21\x06\x98\x16\xb1\xf4\x83\x25\xa0\xfd\xac\x8d\x39\x79\x78\x97\x5c\xa5\x8d\x30\x79\x68\x5a\x8f\xb2\xde\xfc\x27\x19\x65\xa6\x60\x89\x85\x15\xed\xd1\x29\xec\x5f\xb5\x76\xee\xec\xd6\xf7\xc2\xb9\x17\x65\x0e\xc4\x77\xea\xce\x39\x55\xa8\xe6\x52\xa1\x6f\xbe\xfd\x16\x11\xe3\x8b\x31\x20\x93\x64\x17\x34\xca\xc6\xc0\x94\x85\x83\x29\x1f\xed\x22\xca\x46\xbd\x88\x3e\x12\xf9\x88\x23\x1b\xcb\x0c\x7c\x92\xa4\x68\x05\x55\x4b\x6d\x0b\x90\x87\xa8\x08\x63\x8e\xb3\xd2\xe5\x21\x5e\xf7\x3b\x64\xd1\x30\xee\xe4\x98\xdf\x21\xde\x18\x6a\xe9\x47\x8b\xa7\x75\x56\x61\xcb\xc0\x19\x10\xb7\xcb\x2f\x66\x7a\x95\x4c\x62\x0a\x18\x8e\x80\xd5\x59\xed\xa2\x4b\x19\x31\xdd\xf9\x67\x4b\xef\x70\xa5\x45\x73\xf7\x17\x13\x48\x22\x08\xff\xe8\x0b\x84\x50\x81\xbc\x98\x08\x7a\x47\x2b\x32\x27\xe7\xb2\xc0\x46\x99\xd8\xb5\x1b\xfe\xf4\x91\x7e\xc1\x7e\x10\xbc\x92\xe8\x7e\x41\xd4\x82\x08\x84\x5d\xe2\x12\x40\x7c\xe6\x98\x32\x54\x73\x91\x02\x03\xb1\x8d\x4a\x93\x39\x45\x95\x44\x0d\x16\x7a\xed\x5d\x86\x94\x01\x1a\x4d\x39\xaf\x2c\x4b\x7c\xb5\xec\xfa\x45\xe3\xf1\x12\x10\x73\xe7\xbf\x30\x72\xff\x8b\xee\x85\x44\xb3\x0a\xcf\x7d\x62\x14\x5c\x31\xab\x9a\x5d\x72\xd2\xd6\xa3\x13\x0d\x14\xe8\xad\xbe\x51\xee\xf1\x52\x76\xe9\x6c\x5d\xdb\x34\x41\xb6\xbf\x3a\x82\x53\x8c\x25\xf2\x6d\x97\xd1\x2f\xfb\xe6\x08\xf8\x47\xce\x4e\x27\xbf\x5c\xff\xed\xfa\x97\xd3\xd7\xef\x2f\x2e\xa3\x5f\x76\xc9\x15\x31\x71\x94\xc0\xb5\x64\x1d\x4e\x76\x15\x3c\x54\xf7\x98\xcb\x63\x00\x49\x00\x97\x1a\x2b\xf9\x7d\x22\x92\x4c\xef\x29\x82\xe3\xfc\x18\xb8\x69\x4e\x45\xcd\xc5\x44\xf0\x19\xad\xa2\x75\xef\x5c\x27\x78\xa5\x3b\x0e\x53\x72\x6a\x3f\xee\xc4\xbd\xa1\xf7\x59\x87\x2e\x06\x82\x9a\x02\x89\x8c\x7e\x4d\x7c\x0c\xab\x97\x02\x68\x12\x12\x57\xba\x18\x7f\x88\x76\xba\x67\x76\x4e\x9e\xa0\xbb\x11\xf9\xe7\x39\x8c\xf4\x8a\x17\xb8\x82\xc2\x75\x69\x1b\x1f\x65\x36\x11\x56\xfb\x15\x24\x7b\x62\xb7\x9d\x51\xc5\x71\x69\xbc\xdb\x46\xf8\x97\xc4\x15\xb5\x70\xca\x0e\x40\xe4\x92\x3a\x72\x63\x12\xed\xa0\x3d\x97\x9d\xda\x08\xe2\x22\xa4\xab\xcd\x73\x53\xcb\x23\xa9\xc9\xf7\x7d\xc0\xa1\x1d\x65\x8f\x47\x21\xf5\xcc\xf9\x66\xec\x01\xa3\x33\xf0\x6c\x80\xc7\x51\x9b\xcc\xcb\xc6\xb8\x1a\xdf\xb9\x65\x48\xa8\x78\x95\xc9\x8c\x85\x97\xec\xc9\xee\x34\xf3\xe3\x77\xa4\xc9\x12\xba\xa5\x7a\x06\x67\x9d\x90\x76\xdb\xc6\xe9\x20\x26\x55\x28\x71\x3f\xfe\x08\xb5\x15\x9d\xfc\xcf\xe0\x26\xf2\x4b\x8c\xc6\xc1\xd1\x6a\x04\x19\xaf\x1f\xaf\x54\xcb\xfb\xaa\x65\x8a\xd6\xc4\x51\x4f\x8d\x57\x74\x22\x61\x7e\x7d\x20\x3d\xd1\x7b\x96\x8d\x8e\xd0\x0f\x0c\xce\x2b\x23\x25\x1a\x23\xc6\xbb\x25\x22\x6c\xc6\x45\x01\x2e\x80\x9d\x6e\xf0\x02\x37\x78\x4a\x2b\x9a\x22\xcc\x73\x6d\x70\xa8\x9b\x14\xf4\x07\x70\x2b\x65\x79\x52\x0a\xde\x98\x9b\xd8\x71\x42\xa4\xa7\x00\xf4\x73\x8f\x43\x8a\x7f\xeb\x13\xea\x75\x64\x2e\x30\x53\x1d\xe9\xc0\xda\xc6\xf9\x77\xd4\x41\x72\x28\x01\xb8\xcc\x57\x81\xec\xb4\xd4\x32\x23\x5c\xb6\xe4\x73\xb5\x6f\x6c\xe6\x67\x6e\x70\x41\xf2\x31\x9a\x7c\xb8\xbe\xf8\x3f\x2b\xe7\x26\x5e\xb5\x33\xcf\x7e\x73\x19\x6b\x79\x90\x6d\xdb\x5c\x91\x9a\xdf\x0d\x1b\xe7\xab\xdf\x38\xde\x41\xb4\x73\x22\xc6\xab\x36\x8c\xfd\x52\x16\x74\x0d\xd5\x49\xba\xce\xc4\x73\x16\xf5\xdf\x1a\xe4\xa4\x62\x41\x90\xfe\x0a\x53\x14\x57\xd5\x32\xf4\x91\x2a\x6e\x6a\x1c\x66\x29\xd4\x1d\xde\xae\x33\x5c\xc9\x2f\xf5\x8a\x4c\x71\xed\x34\x82\x17\xef\x79\xcb\xf2\x30\x3b\x26\xec\x38\xdf\x11\x54\x12\xc6\x95\xf5\xa6\x80\x2d\xc1\x67\xf0\x5b\x64\x00\xd2\x01\x69\x73\x4f\xcf\x49\x50\xb3\x6e\x02\xd5\xca\x23\x49\x9c\x1e\x6e\xec\x97\x56\x12\xb9\x59\xaf\xea\xf0\xd2\xb3\x04\x4c\x81\x20\xb8\x34\x90\x16\xac\x16\x86\x4d\xb4\xc6\xf2\x96\x94\xe6\x83\x44\x26\x25\xcf\x9a\x04\x19\x73\x6e\xa6\x6f\xf4\xe4\xba\x04\x59\x70\x08\x1b\xf8\x1d\x50\x2b\xa5\x98\x62\x3b\x3d\x0d\x09\x82\x5d\x2f\xc2\x07\x56\x2d\xaf\x38\x57\xdf\xfb\x62\xa9\xbb\x3e\x19\x7f\xb5\xe1\x88\xbe\x13\x13\xfc\xd2\x18\xba\x3c\x86\x8d\x03\x72\x31\x28\xf1\x9a\x2a\x16\xf5\x82\xfc\xbb\x4a\x45\xd1\xb2\x53\xf9\x46\xf0\x36\x5a\x87\xcb\x69\x6f\xbe\xb9\x78\x0d\x17\x5f\x6b\xc9\xf6\x98\x12\xcb\x86\x53\xa6\x9c\xc7\x2b\x63\xd0\xe6\x07\x4b\x6b\x18\x4a\xb6\x64\x06\x33\x84\xde\xe3\x25\xc2\x95\xe4\xde\xa5\xc6\x36\x05\x39\x5d\x04\x55\xff\x7a\xca\xd5\x62\x2d\x74\x8a\x59\x7c\x28\x67\xbd\xbd\x51\xc0\xd9\xd7\x41\x53\x28\x5b\x6b\x56\x41\x0a\x71\x23\x48\x41\x4a\xc2\x8a\x2f\xf5\x44\xec\x9a\x42\x0e\x4e\xd5\x25\x67\x5a\xbc\xee\xfa\x5c\x5d\x78\xff\xa4\x5d\x8d\xf0\x14\x81\x2b\xdb\x06\x11\x31\xd0\x2d\x82\x70\x6d\x65\x0a\x06\xf4\x62\x06\x51\x4f\xb3\xe9\xfe\xd2\x4e\x49\xa5\x17\x9b\x56\x95\xde\x81\xb4\xc4\xca\x00\x02\x68\x8d\xe7\x04\x61\xe5\x0f\xa1\xe2\x88\x30\xd9\x0a\xbb\x6f\x68\x3c\x7c\xb2\xe4\x44\xfa\xc2\xdc\x58\xa2\x1f\x2e\x5e\xa3\x97\xe8\x50\x8f\xcd\x60\xf7\x66\x98\x56\xc0\xe0\xe8\x50\xb3\xa1\x0d\x30\x83\xdc\x30\x9e\x82\x30\xba\xb0\x72\x04\x71\x61\xae\x96\x11\x62\x1c\xc9\xb6\x58\xb8\x39\xa0\x9c\x79\x8f\xb0\xa5\xf3\x4f\xca\x7a\x1d\xc4\x4e\xbe\xfb\xf0\x07\x49\xa2\xc1\xaa\x39\xaf\xc3\x1f\x9e\xf1\x3a\x0c\x4d\x44\x7d\xfc\xfb\x0b\x66\xce\x6a\x4d\x14\x2e\xb1\xc2\xf6\x9a\x74\x5f\x18\x76\xed\x70\x59\x26\x5c\x96\x92\xbc\xa3\xac\x7d\x30\x48\xb7\xbd\x08\x7b\x5c\x9f\x43\x8f\xe0\x78\xc1\x42\xf3\x20\x6e\xe7\x22\x14\x19\x92\x25\x2e\x7a\xc7\x68\xf4\x88\xd5\x0d\xb7\x84\x63\x1b\xd3\x86\x10\x66\x25\xaf\xd7\x3a\x09\x74\x68\xb1\x09\x82\xa8\x97\xfd\x31\x1c\x4c\xf7\xfc\x7b\x07\x84\x2a\x72\x47\xaa\x6c\xbe\xfd\x77\xfa\x6d\x7a\x72\xdc\xce\x85\xd7\xa3\x0a\x4f\x49\x65\x39\xd8\x0c\x89\x66\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\x5e\xf7\xe8\x73\x51\x91\xfd\x2f\xe3\x24\xb8\xb3\x2d\x83\x80\x95\xb9\x07\x5d\x2d\x84\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\x9e\x15\x83\x7b\xbe\x07\x89\xfc\x1a\xc0\x98\xda\x08\x80\x79\x25\xac\xa4\x6c\x0e\x01\xab\x91\xcd\x1d\xbd\x23\x4e\x3c\xdf\x1a\x8f\xd7\x01\x48\x1c\xd7\x21\x27\x6e\x3a\xcc\xaa\xa1\x6d\xcd\x8a\xdd\xdc\x84\xd7\x34\xdf\xb9\xfc\x70\x13\x92\xb6\x62\xb6\x34\x84\x44\xf0\x27\x3b\xbf\x4e\xbf\x18\x4c\xe7\xea\x2a\x3e\x35\xa4\x33\xe9\x7d\x9b\x11\x9d\xcf\x77\x4a\x3f\x0f\xe5\xb9\x8a\xf1\xcc\xda\x85\x55\xc0\xe7\x7a\x1b\x19\x56\x2e\xf9\x08\xd8\xab\x73\x8f\x1c\x20\x7f\x35\x3d\x72\x56\x76\xa1\x05\x87\xa2\x6c\x2e\x43\x27\x08\xae\x52\xd9\x5e\xcc\xb3\xc9\x0b\xe2\x4e\x81\xe7\x2d\x5d\xf7\x06\xf4\x8b\x5d\xa5\xb4\xfe\x09\x0f\xc6\x97\xed\x89\xa8\xb4\x45\xf1\x85\xfb\x21\xe6\xb5\xc4\x67\x42\xcf\xa0\xa2\xb8\xba\x6e\x48\xb1\x2f\xb7\xc5\x9b\xf7\xd7\xa7\xfd\x9e\x81\x2e\x6c\x59\x9a\x09\xfc\x1e\xe1\xb2\xa6\x52\x42\xc0\x87\x4c\x17\x9c\xdf\x26\x35\x79\xe8\x98\xfb\xe6\x54\x2d\xda\xe9\x71\xc1\xeb\x80\xc4\x6f\x2c\xe9\x5c\x9e\x58\x89\x32\xd6\x13\x77\x84\x28\xab\x7c\xa6\x30\x78\x0b\x99\x92\x36\x82\x90\x3c\x78\x54\xf8\xd1\xc3\xd6\x83\xfc\x14\x0f\xcd\x5e\x9f\x1e\xa0\xd2\x86\xcd\xbb\x73\xad\x63\x7d\x57\xa5\x95\xa1\x59\xd9\x59\x8f\x8c\x3d\xa4\x85\xb6\x51\x9c\x8d\xf3\x68\x8c\xd7\x9d\x4f\x92\x55\xfa\x0b\x22\x93\x10\xb0\x39\xcf\xdc\xdb\xae\x4b\x1d\x69\x1a\x30\x77\xe2\x47\x33\xdd\x21\xbc\x7d\x00\xa5\x7c\xed\x9f\x1e\xe4\x62\x32\x3f\xad\x2a\xbd\x90\x58\x5f\x13\x07\x32\x44\x77\x82\x69\xb2\xc0\x77\x46\x14\x48\xbd\xe2\x64\x36\x23\x05\x18\x0b\xe1\x28\xe0\x22\x49\x13\x0a\x86\x81\x2c\x2c\x8f\xa2\xb8\x69\x1b\xa3\x9a\x3e\xe8\x1e\x86\x2d\x86\x18\x54\x56\x42\xe0\x7f\xf3\xaf\x13\x2a\x1b\x22\x00\x1f\x78\x82\xce\x91\x5e\xa1\xb0\x11\x97\x1c\xad\xf4\xb5\xa5\x7f\x71\x49\x94\x36\xd4\xcc\xbc\x85\xd1\x07\x6d\x58\x89\x36\xc3\x61\x48\x89\x0c\xa3\x30\x3a\x9c\x55\x52\x24\x9e\x07\x88\x14\xdb\x3e\x69\x1d\xc4\x29\x6f\xcf\x15\x39\x46\x1b\xd2\x77\x9e\x2d\x82\x8c\x3e\x3f\x8a\xfc\x84\xb1\x2a\xb4\x2f\xf1\xaa\x44\xa9\x6f\xcb\xfa\x43\xa1\xd1\x64\xc6\x13\x78\xcb\x16\x65\x9b\x22\xda\xdb\x31\xf1\x07\x79\x88\xd7\x44\x7b\x53\x75\xfe\x40\x0a\xbf\x45\x24\xdc\x63\x75\x0d\x1c\x63\x1c\x1a\x69\x95\x2f\x64\x9e\x7c\x6b\xed\x89\x4e\x6f\x47\xb8\x2f\x42\xf4\xcc\x4e\x38\x75\x6a\xb2\xf9\x51\x2b\xce\xfd\x45\x90\xce\xdb\x1e\x50\x89\xeb\x1f\xf5\xcd\x45\xd9\xdc\x92\x99\x70\xe1\x19\x7e\x93\xba\xe5\xfa\x01\x15\xec\x38\x57\xe8\xf0\xe0\xe4\xe0\x68\x6d\x2f\x1c\xc8\x10\x0f\x6d\x52\x37\xbb\x01\x49\x5a\x37\xd5\x12\xc6\x70\x60\x8a\xd6\x25\x72\x9e\x39\x64\x9d\x2f\x0a\x23\x17\xa4\xaa\x46\x48\xea\x7b\x1a\x3b\x3e\x6e\xf3\xa9\xfe\x92\x12\x6d\x61\xec\xf9\xc3\x83\x5f\x0f\x46\x88\xa8\xe2\x08\xdd\x73\x76\xa0\x8c\x67\x16\xdd\x80\xb2\x9b\xd4\x27\xdf\x89\x25\x6f\xa1\xae\xba\x59\x36\x4f\xe1\x5e\x60\xad\xa7\xb5\x46\x99\x30\xec\x00\xa4\x4a\xa8\x13\xae\x9f\xf3\x07\xaa\xb4\xcc\x54\x2d\xd8\x53\x2f\x8d\x4a\x43\xa0\x28\x1c\xd6\xa6\xf7\x1d\x39\x59\x10\x5c\xa9\xc5\xd2\xab\x59\xa6\x64\xb5\x44\x2d\xb3\xbf\x49\x17\xf6\x7b\x90\xdf\xb6\xbf\x99\x66\xb6\x72\xfe\xcd\x42\x10\xb9\xe0\xd5\xce\xf3\xcd\x5c\x39\xe5\x82\x33\xa9\x65\x8a\xb6\x05\x6c\x1f\xa5\x4f\xf5\xb1\x25\x9d\x0d\x45\x34\x87\x53\x26\x88\x41\xad\xea\xad\x05\x05\xa0\x17\xf8\x4e\xcb\x1b\xd9\x16\x05\x21\x65\x8a\x0e\x15\x2a\x6f\xbf\xcf\x59\xf0\x79\xf7\xb5\x95\xf5\x33\x17\x4d\x9e\x5b\xfa\xcd\xd5\xe4\xac\x77\x4b\xc3\x07\x6f\xe1\x18\x9f\x2d\x48\x71\x7b\x95\x56\xe3\x68\x4f\x62\xa0\x0d\x17\xbb\x54\x0c\x74\xf3\xd9\xb4\x82\x09\x17\x0a\x31\x5f\x42\x5d\x9f\xad\x39\xac\x22\x11\x77\xb4\x20\xc7\xae\xbc\xba\x8b\x22\xba\x9a\x5c\x98\xcd\x09\x7a\xa5\x0f\xc4\x1f\xbf\xfd\xf6\xf7\xdf\xa6\xcb\xe8\x74\xee\xc5\x3c\xbc\x8b\x76\xe0\xfb\xa2\x76\x5d\x9b\xee\x6c\xf2\x8a\xd9\x9e\xea\x35\x68\x2a\x5c\xf8\xb5\x99\x6f\x3e\x74\x69\xee\x13\x49\x08\xda\xe0\x57\xd5\xa2\xc3\xfc\x67\x5a\xf1\xe9\x49\x8d\xa5\x22\xe2\xa4\xe4\x85\xbd\xd6\xc7\xc0\x50\x4a\xd9\xfc\xb8\x2e\x8f\x12\x8a\x6e\x22\x9b\x35\xb1\xa0\xd2\xb9\x71\x56\x02\x22\x2e\x4a\xe6\xcb\x41\x50\xe9\x43\x79\xd3\x25\x4c\xca\xce\x7d\x85\xc8\xf5\xf2\x3b\xf4\xe2\x45\xd4\x5b\xf4\x12\xbc\x21\x79\x52\x66\xde\xde\xdc\x4c\xde\x10\x15\x0a\x6c\x06\x1f\xa2\x37\xe7\x37\xbe\x08\x9f\xde\x5d\x26\xfb\x62\x90\xda\x29\x52\x7b\xc1\xd3\xaa\x30\xe6\x76\x10\x1b\x51\xa2\xb8\x56\x9f\x18\x29\xf4\x42\x8f\x7a\xf5\x9e\x1c\x60\xea\x62\x62\xca\x61\x68\x95\x0b\x4f\xab\x25\xba\xc7\x26\xf5\x3a\x8e\x85\xb6\x7b\x5e\xe8\x6e\xbc\xd0\x52\x4b\xef\xea\xb7\x04\x97\x44\x48\xb0\x86\x08\xde\x7d\xf0\x23\xe8\x53\xb6\x65\x3b\x6b\xa5\xe2\x35\x5a\xd8\xa1\x9a\x39\xec\xca\x5c\x1a\xdd\xc8\x1c\x41\x70\x06\x49\x24\x48\x63\xac\x25\xfb\x37\x5f\x85\x2d\xb4\x26\x85\xcc\x3c\x07\x05\x44\x30\x2a\xc2\xa9\xb2\x8a\x3e\x54\x9f\xa6\x56\x46\x81\x05\x90\x66\xa5\x67\x29\x44\x80\x32\x15\x23\x40\xe9\xb5\x85\xdd\x4b\xd2\xa3\x25\x79\xca\x1a\xa0\x2c\x95\x8a\x51\x76\x52\x75\x64\x63\x02\x76\x73\x19\xa4\x80\xee\x68\x2a\x7d\x1a\x72\x24\x0b\x0e\x79\x51\x60\xc6\x19\x2d\x70\x45\xff\x45\x4a\xd4\x36\x9c\x21\xde\xaa\xa6\x55\xe0\x0a\x2a\xb0\x24\xe3\x3b\x2c\xa8\x16\xa8\xa6\x9e\xbb\x87\x6c\x30\x7d\xda\x15\xe7\xe0\x27\xf1\xd1\x31\xd3\xe3\xf4\x6e\x66\xd2\x66\x90\xe3\xcc\xcf\xbc\xc2\x6b\x8b\x93\xbe\xa3\xd1\x5e\xfb\x60\x90\xa9\xac\xb7\xc8\x67\xd6\x61\xb5\x00\x08\x52\x01\x91\x44\x8b\x60\x03\xc1\xa9\xcd\x86\x3d\xc8\x10\xc8\x6a\xc5\x26\x8a\x04\x08\x0c\x72\xb1\x62\x07\xeb\x1e\xae\xcf\x61\xa6\xa0\xf8\xd3\x9b\xd5\x61\x55\xf6\x29\xd1\xba\xfd\xc5\xe9\xe5\xe9\x2f\xd7\x3f\x9e\xfd\x72\x79\xfa\xfe\x3c\xe5\xd5\xc9\x15\x15\x73\xd6\x54\xcc\x56\x55\xf1\x89\x6a\xce\xea\x47\x16\x0b\xb2\x3f\xf1\xf0\x6b\xe8\x4d\xc8\x9e\x64\x6d\x00\xca\xe6\x4e\xf3\x4f\xa3\xd3\x42\x2b\x4e\x53\x2d\x78\x76\x2a\x71\x28\xa3\x8a\xe2\xea\x35\xa9\xf0\xf2\x9a\x14\x9c\x95\x3b\x87\x91\x5e\x7a\x61\x23\x4d\x87\xac\xdb\xba\x0f\x3e\x58\x60\x89\x5c\x75\xc2\x29\x99\x71\x41\x20\x6a\xc2\xb4\x44\x6a\xba\xf8\xb1\x19\x9f\x7a\xc6\xb2\xe0\xf7\x5c\xdc\x56\x1c\x97\xf2\xa4\xe1\xe6\x3f\xe3\x8a\xce\x48\xb1\x2c\x2a\xf2\x1b\xdf\xff\x71\x92\x9a\xbe\x1f\xee\xf1\x86\x08\x0a\xd0\x85\x7d\xd8\x35\x6f\xf9\x3d\xe2\x33\x45\x18\x3a\xa4\xcc\xed\x9c\xa3\xc0\x4b\xd3\x85\x47\xd2\x69\x9f\x14\x47\xaf\x5e\xba\x46\xbe\xbe\xb8\x07\x44\x86\xa4\xdc\xeb\xc8\x97\xed\xe3\xa7\x43\x5f\xf6\x8b\xb3\xb6\xea\x87\xbf\x4c\x48\x2c\x4f\xec\xeb\xd5\xb1\x4f\xa8\x79\x05\xfd\xf1\xa2\x08\xb3\xd2\x61\x63\xbe\xbe\x7d\xa2\x8a\xe6\x9a\x17\xb7\x99\xdc\xae\x37\x67\x13\xf3\xb6\x15\x3c\x8b\xb9\x81\xb5\x96\xc9\x11\xd6\xdf\x02\x05\x74\x70\xba\xee\x8d\xd3\xf5\xa0\x2b\x35\xb5\xad\x03\xf5\x60\xb0\xb6\xba\xc7\x29\x3e\xa2\x5f\xaa\x61\xb0\xb6\x1e\x79\x06\x6b\x6b\x8b\xc7\xa0\xdd\x21\x73\xf4\x8d\xc0\x05\x99\xec\x93\xf2\xe6\x04\x08\x2a\x5b\x61\xeb\x5f\x79\x1d\xce\x8b\x0b\x46\x48\x69\xe4\x87\x1d\x0a\x41\x73\x3d\x92\x59\x5b\x55\x4b\xe3\x43\x34\x2a\x80\x05\xc5\xa4\x71\xdd\xc2\xab\xad\x8a\xeb\x82\xcc\x9b\x7a\xd7\xd9\x26\x8d\x67\x6d\x76\xe5\x0d\xec\x71\xd2\x9d\x87\xea\xcc\x84\xc5\xbb\xd3\x71\xb8\x82\x48\xd2\xb9\x9e\x2e\x5b\x4c\x16\x19\xb6\x1f\x57\x23\xac\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\xed\x4a\xc0\x1b\x8d\xa6\xe2\x6c\x0e\x93\x81\x2d\x78\xfc\xa1\x21\x85\x6e\xb3\xa8\x08\x66\x6d\x63\xfa\xa9\xf5\xa3\x25\x6f\x33\xe0\xc7\x5d\xe0\xdb\xeb\x53\x8c\x5a\x9e\x04\x53\x61\xea\xa3\x7b\xbe\x9f\x05\x88\x3e\xa8\x05\x11\xf7\x54\x12\x53\xf1\x2a\xba\x4f\xa6\x2f\xfd\x7a\x57\xe6\x33\xcf\xf5\x60\x53\x9c\xf4\xb6\x80\x9c\xbb\xe8\xb6\x7e\x84\xf7\x3a\xd1\xca\x38\x1b\x33\x32\x37\x19\xe5\x56\xa0\x19\x44\xa7\x69\xdf\xe0\x07\x7d\x7e\xb2\x54\xbc\x41\xb4\xae\x49\xa9\xed\xe3\x6a\x89\xee\x28\x8e\xee\x09\x64\xaf\x77\x3b\x0a\x1d\x32\x8e\x78\xa3\xaf\xae\x96\x51\xb5\x84\x88\xde\xa2\x55\xa8\xe4\xf7\x2c\x21\x31\xe4\xc6\xc2\x1c\x30\x9a\x12\x85\xad\x0f\x5c\x1f\x02\x4f\xde\x0c\xbc\xcc\xfa\xec\x01\x86\xfc\x66\xe3\x06\xf0\x7c\xce\x73\xac\x12\xa4\xc4\x06\x6d\xde\xac\xe7\xc7\xb7\x1d\x95\x36\x5e\x97\x48\x18\xbb\x1f\x14\x6c\xfa\x44\xf3\x56\xed\xc9\x3d\xf2\x98\xeb\xc8\xe4\xe2\x07\x46\x22\xad\x89\x44\xbc\xcd\x44\x8c\xff\xca\x36\x97\xd3\xc2\x1b\xfc\x4e\x1b\x1f\xa9\x4a\x1a\x55\x1e\x35\xc7\x16\x7b\x84\x65\xdc\x26\x0c\x06\x44\x7b\xd3\x76\x36\x23\x02\x6e\x3a\xe8\xf0\x1a\xec\xde\x17\x1c\x72\x77\x58\x9c\xf3\xd6\x02\xbe\x88\x1a\x01\xc9\xb9\xcd\x7a\x7f\xa4\x49\xcb\x06\x08\xf5\x44\x05\x91\x40\x5a\xcd\xd0\xf9\x87\xef\xe3\xb6\x68\x0e\x0a\xf4\xb4\xdc\x3a\x18\xe7\x07\x16\x87\x49\xcc\xbb\x1f\x36\xd1\x53\xd8\x6d\x51\x54\x5c\xda\x3c\x4e\x58\x97\x62\x81\x19\x23\xce\x19\x45\x15\x78\xb2\xa7\x84\x30\xc4\x1b\x62\x40\x79\x51\x9d\xc1\x48\x52\x36\xaf\x08\xc2\x4a\xe1\x62\x71\xac\x7b\xc7\xdc\x5e\xe8\x12\x26\xed\x27\x52\x09\x82\x6b\xb3\x27\x04\xa9\x31\x35\xcd\x23\x5c\x08\x2e\x25\xaa\xdb\x4a\xd1\xc6\xbf\x2c\xce\x8b\x48\x20\x75\x5d\x9a\xfc\x39\xb7\x56\x90\x56\xd2\x65\x66\x8e\xba\x1e\xda\xe1\xf3\xb0\xaa\x0a\xb8\xce\x46\xfa\xb7\xa4\x6e\xd4\x12\xe9\xa9\xad\xa2\x73\x63\x66\x54\x48\x85\x8a\x8a\x12\xa6\xec\xc8\x0c\x37\x1a\xf4\x61\xe4\xd4\x69\x66\x67\x44\xda\x29\x61\x25\x18\xdf\x8d\x92\x08\x32\x10\x7d\x27\xdc\xab\x4a\x2a\xad\xaf\x43\x8e\xe2\xd6\xce\x95\xd0\x30\x1b\xc7\xcd\x08\x6c\x1d\xa7\xe0\x98\x1e\xd9\x8f\x82\x2e\x04\x05\x81\xf5\xb1\x36\x21\x91\x34\xb9\x02\x75\x2e\xdc\xb9\x1e\xf5\x92\xa3\x3b\xdb\x02\x52\x61\xd6\xa4\x0e\x6c\x28\x46\xee\xf4\x39\x20\x05\xd1\xaa\x28\xce\x28\x64\x9e\x5d\xc6\x28\x2c\xe6\x44\x9d\xb9\xf1\xc7\x66\xef\xe6\x90\x36\x61\xe5\xf4\xd0\x41\xd4\x2d\x0e\xac\xc3\x84\x97\xc0\x26\xd1\x31\x7e\x6c\x2a\xe7\x6e\xc6\x15\x69\x7b\xdd\x3c\x52\x23\xde\x59\x54\x26\xc3\xcb\x77\x54\x36\xb8\x20\x12\x1d\x5e\x4c\xce\x46\x68\x72\xf1\xda\xa6\x71\xf1\xd9\x2a\xbb\x5e\xec\xb4\xd8\x4b\xd0\x9c\xdd\xc7\x0a\xd8\xfb\xea\x34\x41\x97\x02\x9a\x2d\xdb\xdf\x89\x37\xca\xa2\x67\x66\xfd\x26\x00\x0b\x8d\xd6\x4d\x05\x75\x22\x91\x6c\xc1\x32\xb2\x81\x0b\xbd\xb5\x8d\x3d\x62\x0f\x2d\xe9\x08\x8e\x2c\x19\x7d\x64\x10\xc7\xb4\xe2\x87\x6b\xd7\x1c\x62\xd9\x6e\xa2\xac\x1e\x00\x0a\xb3\xb2\xbf\xf2\x1c\x31\x90\x6b\x66\xa1\xe2\xf1\xb7\x7b\xa4\x3b\x2c\x30\xa2\xde\x13\x29\xf1\x9c\x4c\x22\x71\x40\x39\xce\x5e\xe7\xe1\x06\x00\x51\x27\xaf\x17\xc4\x50\x61\x29\x1e\x7c\x12\x66\x57\x86\x5e\x9b\xda\x0c\x24\xaa\x07\xee\x6c\xdd\x0b\xaa\x14\x81\xeb\x01\x6a\x3d\xc1\xd6\x5d\xa5\xf7\xec\x67\x75\x46\xb5\x67\x27\x3d\x6c\x4f\xeb\xfd\xac\x34\xf9\x91\x53\x82\xa6\x82\x92\x19\x9a\x51\x48\xd8\x84\x54\xc6\x91\xa9\x53\x80\x01\x30\x8f\xa5\x24\x02\x86\x6d\xfd\x71\x6e\xf8\x71\xfd\xf9\xab\x1d\xbf\x12\x2d\x2b\x70\x50\xc4\x13\xd8\xc7\xe8\x0c\xcd\x21\x7d\xd2\x7a\x9f\xfe\xf0\xf2\x3f\xff\x88\xa6\x4b\x6d\x28\xc1\x99\x54\x5c\xe1\xca\x75\x00\x55\x84\xcd\xf5\x2a\x82\xae\x13\x77\x61\xf7\x18\xac\xfc\xe2\x54\xb4\xa6\xca\x4c\xd0\xab\x6f\x6e\xa7\x49\x77\x1e\x28\x26\x27\x25\xb9\x3b\x09\xb6\xd0\xb8\xe2\xf3\xb8\xb7\x9e\x79\xc2\xa7\xb6\x29\x63\x01\x11\xb9\x4f\x34\xaf\x68\xb1\xdc\xd9\x7d\x6a\x5d\x61\x68\xc1\xef\x8d\x17\x75\xfd\xa8\x06\x64\x30\x0d\x6f\xda\x0a\x26\x0e\x7d\xef\x19\xfc\x5a\x49\x56\xc9\x91\x52\xbd\xf3\x81\xb4\x03\xf4\x82\x6d\x76\xe5\xaa\xb7\xb9\xc3\xae\x9b\xdc\x52\x53\xd8\x60\xb7\xaf\x54\x12\xed\x06\xff\x1e\x57\xd5\x14\x17\xb7\x37\xfc\x1d\x9f\xcb\x0f\xec\x5c\x08\x2e\xfa\x63\xae\xb0\x56\xa6\x17\x2d\xbb\x85\x3a\xbb\x1d\x5d\x2d\x9f\x5b\x30\x2f\x30\x4b\xf6\x27\x36\xaa\x33\x6e\x94\x86\x40\xd4\xd9\x02\xce\xf9\xdd\xb5\x4c\x1e\x68\xe7\xe1\x66\x88\xe8\x3e\xc7\x6b\x38\xe1\x38\x64\x78\xb4\xbf\x79\xf9\x87\x3f\x19\xe1\x82\xb8\x40\x7f\x7a\x09\xb9\xfe\x72\x64\x2e\x00\x50\x7d\xb5\x8d\x53\xe3\xaa\x8a\xd5\x69\x42\x11\xf0\x7d\x74\xf9\xea\x3d\x38\xf2\x6a\x67\xa7\xfb\xb3\x7d\x35\x37\x37\x7f\x03\x4d\x8c\x2a\x49\xaa\xd9\xc8\xf0\xc1\x78\x7f\xf2\x01\x98\x35\x07\xf6\xca\x8b\xe7\x12\xda\xbd\xb7\xe4\x8e\x57\x6d\x4d\x5e\x93\x3b\x5a\xc4\x21\x07\x7a\xab\xd2\x7b\x9b\x8b\x8f\x55\x54\x82\x2e\x39\xad\x78\x71\x8b\x4a\xfb\xcb\x20\x47\x65\xb5\xee\x76\xfc\x2c\xc4\x66\xeb\x24\x64\xe9\x3c\x3a\xfe\x5e\x7e\x4e\x8d\x9b\x46\xeb\xd1\x40\xec\x25\xf0\x7d\x6f\x32\x40\x34\x01\x7f\x6a\xa2\xd1\x93\x8c\x62\x49\xc5\xb0\x8c\xed\x88\xf4\x35\x15\xfd\x8a\xe8\xa4\x9e\x74\x08\x4c\xd7\xfb\x78\x00\x41\x6f\x43\x74\x2f\x74\xa7\xa1\x81\x7f\x1b\xa2\x93\x35\x53\xdd\x57\x54\xf3\x1b\xc3\x68\x90\x7a\xfb\xc0\x2d\x13\x1f\x37\xc8\x80\x42\x48\x4b\x4e\xea\xcd\x0b\xf3\xe8\x8f\x1a\x2b\x6b\x1f\x39\xef\x05\x46\x0d\x11\x92\x4a\xad\x3a\xfd\x08\x07\xea\xac\xc2\xb4\x0e\xe2\xe6\xbb\x9a\x84\xf5\x54\x96\x1a\x37\xe3\x5b\xb2\x8c\xdc\x70\x89\xc7\xe5\xb1\xcc\x9a\x1a\x37\x91\xf7\x00\x14\xb7\x4d\xbf\x06\x22\x2f\xe7\x09\x2f\x6d\x3f\xe0\x7a\x30\x45\x8b\x3f\x65\xc6\xa2\xeb\x76\x0a\x67\x0a\xbe\xfe\xb4\xf4\x60\x59\x95\xa7\x5d\xdf\x55\x3f\x76\x2b\xde\xbf\xaa\xf4\x27\xfe\xae\x32\xdf\xfa\x9a\x6e\x28\x18\xdf\x97\x7a\x41\xf9\xce\x67\x92\xc3\x49\xd8\x44\xb8\xd6\xec\xce\xe8\xdf\x63\x3d\x4f\x98\x39\xd2\x81\xcd\x6c\x3d\x54\xc7\xa6\xde\x40\x42\x07\xf4\x51\xb4\x8d\xa2\x83\xef\x0e\x76\x7a\x39\x9a\x95\x11\xbc\xc1\x73\x30\x69\xf7\x61\x81\x56\xfb\x14\xd2\xdb\x2e\xf8\x7d\x28\x32\x1b\xfb\x2d\x2d\x31\x1d\x47\xfa\x82\x27\xad\x8e\xc1\xfa\xba\x1d\x61\xcd\x72\x53\x25\xe2\x1e\x2f\x11\x16\xbc\x65\x49\xc4\x05\x10\xca\xf4\xa1\xee\xf7\x2b\x83\xbd\xe4\x8c\x38\x58\x4d\x4a\x2b\x37\x3d\xd7\x37\x20\x8c\x28\x43\xaf\x8e\x5f\xbd\x4c\xee\xfb\x15\x29\x5a\x21\xe9\x1d\xb9\xb2\xe5\xd3\x83\x30\xe8\xc5\x6c\xc2\xa5\xa4\xd3\x0a\x52\x2d\x15\x47\xe7\xa6\xb6\xfc\xfa\x40\x3d\xd4\x0b\x46\xcc\x45\x48\x84\x9a\xd0\xc3\x43\x73\x82\x43\x88\xb6\x6e\x20\x01\xa7\xb5\x5f\x2a\x28\xac\xeb\x8a\x0a\x7a\xe9\x55\x50\x73\xef\xed\x74\xac\xae\xa6\xfe\x3e\x48\x92\xf7\x36\xa8\xd0\x15\xcd\xa7\xae\x28\x33\x7c\x74\x2f\xa8\xb2\x87\xfb\x9e\x4a\x82\x0e\xc1\x9d\xb1\xb2\x19\x93\xb8\x9f\x43\xe7\x57\x62\x71\xfd\x1c\xdc\xcd\x62\xf5\xe8\xee\xc3\x2a\xad\xcb\x93\x2e\x67\xe6\xde\x7a\xbe\xba\x15\xb4\xd2\xbf\xbb\x97\x17\x98\x95\x55\x92\xcc\xf0\xb3\x52\x2d\x93\xd8\xab\x2e\x66\x28\x14\x89\x16\x71\x10\x04\x21\x17\x58\x22\xc6\x51\x4d\x30\x40\xaa\xf5\xed\xe2\xa4\x60\x8f\x06\x3a\x5f\x1f\xcc\x66\x37\xd7\x58\x78\x21\x58\x71\xfd\x9a\x4a\x2b\x9e\xb5\x1c\xb1\xa6\x8b\x01\x62\xd5\xb8\x4c\x21\x63\x08\xe6\xb4\x5b\xbc\xe3\x0e\xe6\xbc\xda\x93\xee\xe2\x58\xe9\xcb\x53\xf4\x63\x64\xab\x9b\xeb\xe6\x4d\x64\x79\x83\x3f\xaf\x83\xb5\x25\xe1\x4f\xcc\xb3\x3a\x5c\x7f\x2d\xae\x8d\x75\x73\x8f\x7d\x87\x13\xfa\xf0\xe9\xa1\x8e\x02\x59\xe8\x50\xdd\x06\x04\x63\xcb\xab\xd8\x1c\xe5\x34\x92\x70\x17\xcd\xf0\x7e\xa2\x39\x61\x44\x60\x1b\x90\x70\xa0\x6e\x1b\xd2\xc7\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\x43\x2d\x9b\x34\x96\x9c\xa3\x5e\x21\xd3\x33\x9b\x3f\x60\xe9\xd5\x8b\xf2\xcf\x96\xde\xe1\x8a\x18\x7a\x7c\x27\x1a\x76\xaa\x4c\xc8\x76\xba\xaf\x66\xa3\xb5\x0f\xc1\xec\xd8\x8c\x96\x78\xd4\x82\xcc\xa4\x4f\xbc\x78\x81\x0e\x4d\x1b\x07\x86\x16\x7b\xb7\x4a\xae\x5d\xab\xf3\x87\x26\xa1\x28\x6c\xbe\xf5\x3a\x7f\x68\x30\x00\x3c\x9a\xbd\x58\xb8\xff\x26\x0b\x7c\x47\x80\x85\x9c\x56\x58\x54\x90\x46\x72\x6d\xa6\x0c\x4d\x5b\x85\x08\xbb\xa3\x82\x33\x00\x55\x01\x5d\x94\x96\x4c\x82\xcc\x88\x20\xac\x20\x12\xfd\xf6\xf0\xc7\xd3\x2b\x48\x33\x3c\x02\xd3\x97\xb8\xf1\xb5\xd2\xa2\xa0\x7a\x63\x08\x5e\xb7\x8f\xfb\x0d\xb9\xb1\xeb\xed\x02\xfa\x89\x9b\x0b\x3d\xb6\xba\x55\x2d\xae\x80\xac\xbd\xa8\x5a\x7d\x17\xee\x6c\x67\xe7\x77\x9e\xa7\x78\xf2\x72\xfa\xce\x2d\x55\xff\x6b\x1a\x75\x5c\x73\x1c\xd4\xb3\x60\xbf\xae\x15\x0e\x48\x03\x50\xf6\x69\x63\xd7\x14\x9d\x03\xe9\xa9\x64\xc3\xcc\x39\x7b\x17\xc7\xe1\x3a\xe8\x7c\xa1\x2c\x5d\xc3\x0a\x0e\x33\x80\x35\xd7\xd1\x98\xb1\xdd\x02\x20\xf2\x1d\x83\x08\x47\x74\x9e\x5d\xbf\xe0\x52\x9d\x56\x14\xcb\x6d\xfd\xd8\x69\x5b\xfd\x6d\xd7\x2c\x64\xfb\x31\x5b\xd5\x11\x57\x1e\x62\xa0\x7b\x66\x60\x4e\x17\x13\x8b\x45\x77\xbb\x92\xb2\xff\x6b\xb2\x4e\x7d\x40\xc9\x64\x83\xc2\x9f\x6c\xd9\x13\x83\x38\x9a\xa1\xc8\x7a\x43\xb1\xf1\x9f\xa8\xc8\x4f\xaa\x78\xf1\xb3\x8e\x16\xbc\xb2\x79\xd7\x0e\xcd\x30\x25\xea\x9e\x10\x86\x2e\x26\x30\xe7\x7a\x2a\x0d\x2f\xe3\xe6\x99\xb7\xca\x31\x53\x62\x69\x0f\xf4\xd6\xbd\x09\xd6\x0c\x56\x61\xdb\xa3\x9b\x10\x7f\x8a\x8f\x3c\x8d\x11\xdd\xf6\x52\x49\x89\x14\xf9\x65\x48\xbe\x8d\xde\xfa\x05\x75\x6c\x3a\x78\xca\xef\x08\xac\x77\x59\x8a\xc8\x2c\xed\x9d\x85\x3f\xb3\x2b\x30\x49\x44\x96\xb4\x49\x5e\x9f\x6e\x1d\x1c\x94\x04\xca\x33\x83\x78\x82\x63\xf6\xec\xd0\xbe\x78\xca\xf6\x9c\xf7\xe2\x96\xc7\x2d\xdf\xad\x78\x31\x39\x7b\xce\x1b\xf1\x07\xeb\x5d\xd2\x4d\x1f\x48\x44\x9b\xa2\xcb\xeb\xd8\x76\xe9\xbb\x5c\x86\x80\xce\x2c\xc2\xd1\x1e\xeb\x5c\x5f\x74\x05\x1b\x9f\x5b\xa9\x40\xcc\xb4\xab\xaf\x34\x4b\x2b\x6e\x81\x23\xe0\xf9\x69\x78\x79\xbc\x3a\xd5\xf6\x2f\xe2\xa7\x1b\xe2\x7f\xc6\xe0\x0c\x4b\x55\x2e\x79\xeb\xac\x65\xa3\x5c\x2c\x81\xe9\x47\x42\x29\xac\x05\x01\x66\xcc\xb2\xad\x0c\x98\x18\xdf\xe3\xed\x81\xdc\xd0\xf0\x3f\x82\xd9\xfe\x47\xe7\xdd\xee\x8a\x0a\xc2\x17\x26\x5c\xa8\x7f\x18\xc7\x97\xd4\x17\x36\x24\x0e\x41\xe6\x0f\x35\xd5\xb7\x82\xe8\xd9\x3f\xbc\x6a\x0e\x7f\xb5\x6d\xc2\xa3\x56\x1f\x02\x57\xde\x67\xb6\xaf\x2d\x5c\x2b\x6f\x8c\xcb\x73\x63\x5f\xb6\x9d\xa1\xdd\xed\xff\xc9\xc5\xeb\x1d\x8a\x8f\x86\x96\x5f\xb6\xf8\xf8\x41\x6e\x5d\x7d\x20\xeb\x04\x42\x91\xd2\xbc\x33\x18\x03\x2d\xb7\x75\x49\xed\x5f\x03\x71\x18\x57\xa8\x11\x44\x12\xa6\x46\xfd\x70\x44\x3f\x2d\x13\xb4\x87\xfe\x28\x46\xfa\xe7\x59\x5b\x6d\x6b\x21\x71\x11\x30\x0f\x79\x9a\x26\xec\x49\x56\x20\x14\x83\xef\x30\xad\xc0\x3d\x17\xd0\xe8\xae\x75\xc0\x66\x8f\x6d\xd9\x83\x8a\xe3\x12\x42\x83\xe8\x56\x5f\xed\x15\xaa\xb9\x16\x9c\x26\x0d\xe4\xec\x74\xf2\xcb\xf5\xdf\xae\x7f\x79\xff\xe1\xf5\x0f\xef\xb6\x66\x1b\x33\x29\xf4\xa4\xdb\xe2\x23\x84\x11\x23\xf7\xd0\x73\x06\xc6\x69\x61\xe3\x01\x9e\x85\x52\xdf\x21\xd7\x36\x99\xd2\xc4\xc6\x0d\x34\x65\xd6\x56\xfa\x4b\x5b\xf6\xa0\xa6\x8a\xce\x31\xbc\xac\x73\x89\x4c\x05\xc1\xb7\xbc\x55\xe8\xae\xad\x18\x11\x78\x4a\x2b\xaa\x2d\x08\x44\xee\x08\x33\x78\x48\xfd\x07\xba\x93\x61\x31\x5f\xba\x6d\xe3\x61\xad\x67\x5b\x45\x52\x4f\xaa\x6e\x19\x17\xd6\xdd\x68\xd9\x34\xe1\x97\x8d\xa0\x77\xb4\x22\x73\xe2\x69\xea\x62\xd8\x92\xfb\x30\x1c\x5c\x35\x0b\x3c\xae\xc8\x1d\x31\x74\x57\x54\x9a\x1d\xb5\xe0\x8c\x0b\x13\x97\x33\xc4\xed\xd6\x16\x05\x02\x20\x73\x58\x5d\x69\x63\x93\xec\x7b\xed\xb2\x6e\x6d\xb2\xed\xb3\x09\xab\xed\x91\x2c\x69\xb2\xea\xda\x23\x01\xdc\x0a\x84\xd9\xe2\x93\xad\x41\xd5\x9b\xfd\x83\x9d\x7d\x0e\x6f\x77\x32\xc6\x1e\x16\x8c\x0c\x68\x77\xec\x2a\x4d\x01\x21\x4e\xcc\x9c\x6f\x6d\x9e\xb8\x2e\x7d\xb0\x14\x5c\xcf\xad\x63\x86\x6d\xf7\x4b\x48\xb9\x9a\xa2\x9e\x1d\x2c\x14\x1a\xe1\x64\x62\x89\x1a\x22\x80\x3d\x21\x64\x0b\x4b\x38\x48\xbc\x0f\x11\xd9\xd4\x26\x2b\x7d\xbe\x39\xc2\x50\x6c\x1e\x51\x25\xd1\xeb\xcb\x6b\x24\x48\xc1\x45\xb9\xb5\x0b\xe0\xaf\xe6\x5a\xd8\x10\x48\xc6\x40\x56\x66\xd2\xf8\x2c\xb3\xe1\xd6\xa6\xdf\xc5\x7a\xf5\x6b\x98\xd8\x8e\x71\x4d\xba\x2a\x42\xff\x70\xa3\xfc\x07\x0c\xf3\x1f\xb2\x9d\x96\xbc\xc6\x94\x6d\xad\x31\x8e\x21\x33\x70\xf2\xd1\xbd\xdf\x51\xd2\x6d\xff\xf6\x7f\x48\xa2\xdc\x26\x3a\x95\xdf\xff\x7f\xaf\x2f\xff\xd1\xf1\xbb\xd1\x4a\x5f\xf1\xe1\x75\x14\xd1\x40\xcf\x1e\xe8\x07\xea\xdd\x3b\xe3\xb7\x99\x67\xf9\xd4\xe3\xa7\x25\x6c\x1e\x3f\xd9\x7a\x5b\x3b\x71\x40\x19\xba\xfa\xfe\x0c\xbd\x7a\xf5\xcd\xef\x61\x49\x1c\xb6\x17\x2b\x54\x6b\xcd\xe0\x8f\x7f\x40\xc5\x02\x0b\x5c\xa8\x08\x00\xff\x95\x4b\xde\x83\xd2\x1e\xab\x47\x32\x24\x7f\xb3\xb9\x69\xe6\xce\x88\xf2\xed\x6e\x2d\x9e\x20\x9c\x31\x69\xab\xea\x9a\x14\x82\x6c\x9b\x82\x91\x26\x9e\x2e\x56\xda\x7e\xcc\xb9\x1e\x84\x50\xa1\x14\x97\xfd\x32\xeb\xea\xed\x04\xa4\x12\x5d\xb1\x84\xa6\xad\x2a\x83\xd1\x5a\xba\xdb\x06\x46\x2b\x83\xe4\x3f\x2a\x1d\x41\x49\x8c\xb2\xdb\xbb\x82\x24\xf1\x5d\x73\x27\xb0\xc1\x52\x76\x90\x98\x3b\x5a\xb6\xb8\x82\x6e\x41\x1c\xc9\xf2\x6f\x60\x63\x52\x5a\xd9\x5b\xdb\x11\x6c\xdb\x9d\x2d\xd9\xd9\x3a\x55\xea\xc4\xcc\xc9\x6f\xac\xd5\x4f\xd9\x7c\x0c\x9f\xe8\x6e\xda\xf1\x8c\x39\x1b\xe3\xf1\xb6\xe9\x4f\x5f\x54\xb0\xe1\x1d\x2f\x70\xf5\x01\xbc\xf3\x57\x6e\xb7\x39\x29\x20\x11\x61\xbc\x9d\x2f\x60\x7a\x45\x8d\x1d\xf9\x77\x45\x14\xb8\x4d\x6c\xea\x6e\x4c\x54\xc1\xef\xec\xd2\x86\x06\xc2\xba\xec\xfd\x9d\xfd\x8c\x01\x87\x94\x18\x40\x2c\x4e\x3a\x47\x30\xfa\x32\xd0\x2b\xed\xcc\x46\x22\x27\xfa\x3a\x3f\x01\xf5\xc3\xc1\xf9\x4c\x30\x66\x04\x88\x8f\xb2\x35\x32\x1b\x17\xb7\xf7\x58\x94\x12\x15\xbc\x6e\xb0\xa2\x60\x01\x2d\x63\xb1\x7e\x2e\x83\xcc\xde\x06\x5a\x2d\x39\x46\x17\x4c\x2a\x0c\x32\xd0\x11\x15\xe9\x15\xee\xc8\x05\x40\x79\x31\x3c\x8f\x0b\x22\x08\xc2\x22\x0e\x73\x89\x2b\xb8\xf1\x0a\x22\xf4\xde\xaf\x96\xe8\x5e\x70\x16\x49\xf2\xb1\xa5\x50\xd2\xea\xd2\x1d\x25\xf7\x27\xd6\x27\x3a\xd6\x83\x1b\x9b\x2d\x2c\x4f\xe0\x24\x9c\xfc\x06\xfe\xef\xcb\x89\x2e\xac\x38\xf9\x6b\xdc\xc4\x07\x6f\xbe\x82\x08\x3e\x65\xb4\x63\x2f\x7b\x56\x65\xe3\x9d\x55\x26\x6c\x85\x21\xfa\x2f\x23\xc7\x03\x9f\xc2\x94\x54\x9c\xcd\x83\xda\x4a\x11\x36\xce\x05\xa3\xaa\xe7\xa7\x00\x98\x17\x29\x5a\x03\x00\x40\x5c\x94\xc0\x5a\x47\x4d\x6a\x4d\xaf\x75\x28\x82\x1f\xf0\xe5\x61\xb6\x6d\x98\x92\xf6\x5a\x07\xc6\x15\xd9\xf9\xdd\x0c\xf1\x84\xab\x43\xa2\x38\x5a\x60\x5b\xb2\xdf\x92\xfa\x51\xe9\x90\xf8\x08\x17\xda\xc4\xda\xfe\xa8\x68\x55\x47\x79\xe2\x3f\x43\xa8\x63\x28\x8f\xc0\x34\xd1\x4a\x0e\x66\xab\xfd\x04\x47\xa1\xa8\x7b\xf4\x68\x56\x75\xdf\xb2\xf9\x96\xd1\x7f\xb6\x04\xe1\x9a\x6b\xbd\xaf\x4a\x49\xbb\x5d\x5d\xc9\x1a\x2f\xc1\x16\x85\x49\x7b\xe7\x98\x6c\x11\x86\x5a\x20\x72\x04\x90\x7d\x1a\x94\x7b\x1a\xa1\x77\xfd\xfa\x4f\x23\x3d\xce\x6b\x53\x7b\xc5\x7e\xb4\xbd\x05\x0d\x14\x69\xbc\x15\x05\xb1\x56\x45\x6d\x69\x7e\x36\x4c\xab\xde\x7b\xda\x24\x65\x06\x79\xa2\x97\x14\x52\x6e\x5b\x01\x3b\xcd\x04\x74\xb6\x5f\xe2\xe9\x12\xcd\xb4\x3a\x6b\x11\x8b\x0b\x3a\x5f\x10\xa9\x5c\xfc\xea\x04\x88\x69\x4c\xf2\x33\x2e\x16\xbe\xbb\x20\x7f\x03\x4a\xcb\x0e\xf2\x58\xe3\x87\xed\x69\x8a\xc0\xb7\x66\xb9\xcd\x8d\x89\x2d\xdb\xda\xdd\xfd\xab\x9b\x49\x1e\xa3\x77\xba\x57\xe6\x38\xe2\xa6\xa9\xa8\xd3\xca\x7b\x6b\xbc\xf5\x69\x03\x92\x53\x00\x83\xa2\x19\x96\x0b\xca\x59\xea\x2e\x2b\x0c\x44\xac\x68\x85\x56\x5e\xaa\x25\x58\xaf\x65\xa9\xf5\x43\x81\x04\xa9\xf9\xdd\xf6\xa8\xb1\x64\xd8\x59\x1a\xf3\xb3\x9e\xe4\x71\x60\x6f\x7c\x21\x46\xc4\xa9\xe7\xaf\xd5\xfb\xa5\x58\xb9\x2d\xcc\x06\xd4\xda\xbf\xab\xb2\x2d\x5a\xd6\x25\xab\x47\xdc\x1c\x3b\x02\x08\x45\xa4\x94\xa7\x98\x07\x58\xcc\x77\xc6\xf2\x70\x2a\xe6\xad\x11\x97\xf6\x7e\x07\xa4\x4a\xc3\x69\xbc\x95\xb0\x06\x0c\x3d\x90\xe8\xec\xfd\xeb\x90\x54\x5f\xd9\x1a\x01\x26\x14\x66\x4a\x2e\xc4\x35\xf7\x63\x5e\x48\x39\xa8\x18\x1e\xa7\x1e\xd5\xa3\xc2\x4b\x16\x2d\xe6\xab\x3b\xe7\x8c\xf7\x1d\x74\x4e\x1a\xca\x9a\x56\x59\xe5\x3b\xa8\x9d\x5c\x2c\x30\x9b\x6b\x6d\xe7\x35\x6f\xf5\xc0\x7e\xfb\x5b\x18\x84\x20\x65\x5b\x44\xa6\x03\x1a\x67\xbf\x39\xb9\xbf\x75\x89\x39\xb6\x48\x3b\x5c\x4a\xb2\xc0\x8d\x9b\x9a\x70\xf6\xe4\x92\x29\xfc\xf0\x1d\xa2\xc7\xe4\x18\xbd\xf8\x6d\xf0\xab\x17\xd0\xe3\xa8\xde\x34\x82\xeb\xa1\x58\xa2\x6b\x18\x7d\x45\x15\x10\x82\xbc\x08\x5b\x38\x46\xe7\xba\x5f\x90\xe7\xea\xd7\x36\xe0\x2e\x9e\x76\x2b\x3b\x42\x82\xcc\xb1\x28\x2b\x12\xc9\x15\xc9\x67\x3e\x25\xd3\xb8\xa6\xed\xae\x22\x0f\x54\x2a\x69\xa3\xb6\xc7\x79\xc0\xca\x9f\x7b\x77\x28\x2c\x6f\xf5\x4d\xa1\x85\xdf\xb8\xc4\x0a\x8f\x03\xa9\x7b\x62\xbc\xb4\xe3\x82\xd7\x35\x66\xe5\x18\xdb\x73\xdc\x5d\x2a\x27\xbf\xb1\x25\x6e\xc6\xd8\x7f\x8b\xb2\x31\x1e\xcb\x05\x89\x5a\xb9\x01\x29\x08\x8f\x9d\xcb\x5d\x09\xec\x73\x2f\x9f\xcd\x52\x1c\xa3\x4b\xae\x3a\x73\xca\xdf\xb6\xb0\xca\x39\x45\xf8\xf9\xe5\xcd\xd5\xdf\x26\x1f\x2e\x2e\x6f\x06\x49\x3e\x48\x72\x78\x06\x49\x3e\x48\xf2\x88\x86\xf7\x45\x92\x13\x76\xb7\x2b\x29\xee\x1c\x6f\x9b\xb2\x23\x6d\x40\x4f\xad\xa5\x59\xed\x3c\xc1\x6a\xd7\x24\x69\xe7\xec\xee\x47\xac\x4d\x7e\x0b\x9f\xb3\x19\x2c\x1b\x12\x4c\xed\x17\x8c\x3b\xe2\xec\x8b\x67\x49\xdb\x21\xc7\x59\x46\x8e\x9f\xa4\xbc\xe7\x30\x8e\xb5\x69\xc9\x53\x72\x76\xdf\xe3\xa5\xf1\x02\x9b\x43\x89\xd9\x12\x35\x82\x32\x05\x5b\xe9\xf4\xfa\xec\xe2\x22\x40\x3a\x20\xf2\x50\x90\x46\xa1\x83\xff\x67\xb7\x14\x67\xe0\xe8\xdb\x87\x95\xd9\x46\x71\x4b\x68\xa6\x53\xf9\x1a\x41\xee\x28\x6f\x65\xb5\xf4\x58\x95\xcd\x72\x74\x9d\x09\x2f\x91\xe0\xc3\xe0\x18\x69\xb1\x79\x0b\xca\x15\xa5\x73\x93\x02\x99\xd0\xfc\x8e\x55\x4f\xdb\x89\x1c\x0a\x68\x42\xfb\x1b\x54\xd7\xcf\x57\x43\x13\xda\x8d\x52\x60\x1f\x53\x46\x13\xfa\xd1\x57\x63\x13\x5e\xd4\x67\x40\xd8\xbd\x24\xfb\x5e\xf0\x3a\x93\x34\xbb\x36\xc1\x15\x07\xdc\xdc\x74\x54\x0f\x1c\xfa\x2f\x54\x8f\xac\x49\xdb\x55\xaa\xd5\x86\x35\x00\x0d\x12\x67\x27\xa9\x92\x7d\x9e\x62\xf2\xc8\xe6\xef\xbf\xc7\xcd\x5f\xc8\xf2\x8a\x24\xd6\xe4\xee\xcf\x37\xa9\x48\xa1\x95\x31\x74\x4b\x96\x86\xb0\xef\xcc\x35\x96\x56\x96\x3c\xcb\xf4\xa1\x0c\x2a\x98\x7b\xc6\x7a\x88\x49\xef\xc8\xb3\x98\xfa\xb9\x25\x09\x34\x77\xee\x59\x21\x61\x24\xb0\x84\x60\x7f\xe8\x35\x4d\x5b\x3d\x94\x47\x3c\xb8\x27\x4d\x13\x75\x4f\x3e\xbd\xc7\x3d\xf9\x10\x56\xfd\x67\xb7\x78\xab\xfe\xb3\x53\xf4\xd5\x6a\x57\xf2\x61\xb1\xfa\xcf\x3e\x21\xb3\xfa\x4f\xc6\x53\x94\x82\xda\x5a\x7d\x1c\x28\x39\xf3\xa9\xbc\xb6\xb9\xb6\xa1\xea\xe4\x2f\x14\x64\xca\xc0\x80\x9c\x72\x50\x76\x6b\x05\x64\x9a\xe6\x34\x2a\x52\xf3\xe4\xc3\xb7\xf5\x1f\x10\x07\x79\x6f\xef\x64\x19\xd8\x5d\xff\x36\x8f\x65\xe6\xd0\x55\xdf\x39\x6e\x46\x89\x6a\xa2\x70\x89\x15\x3e\xd6\x07\x62\xd4\xff\xd1\x66\x16\xfe\xc3\x7f\x58\xe1\x29\xa9\xe4\x4f\x07\xff\xf5\x97\xf3\xbf\xfd\xbf\x07\x3f\xff\x23\xfc\x1d\xa8\x6b\x06\x1e\x1e\x7c\x21\x71\x08\x50\x4d\x92\xf1\x92\x5c\x42\xef\xe0\x47\x6b\xe9\x9d\x1a\x84\x90\xfd\x05\x54\xf4\x3a\x36\xe4\x02\xfe\xc7\x86\x97\xab\x3f\x45\x16\x34\x70\xcf\x1e\xea\x3d\xb0\xb6\x09\x44\xfd\xe6\xc9\xa7\xfd\xe0\x86\xfe\x48\x84\x4c\xe2\x76\x77\x4f\xbf\x12\x83\x79\xab\xdb\xc6\xb2\x58\x90\x1a\xc3\x3f\xbf\x77\x53\xa0\xef\x63\x5f\x73\x91\x41\xe9\x34\x7d\x07\x8e\x7a\x64\x97\x2f\xee\x5e\x25\x59\x9c\xe6\xc9\x28\xf9\xfd\x0a\x66\x9e\x30\x98\x11\x3b\x5b\x46\x02\x78\xfd\xd1\xe7\xa3\x78\x2a\x81\xd3\xc9\x05\xba\x33\x33\xbc\x47\x93\xf3\x74\xe2\xba\x22\xd9\xcd\xad\x64\x81\xfd\xbd\xef\x95\x5d\xa6\xc0\x74\xb3\x06\x73\x14\x9d\xd3\xea\xd3\xcb\xf1\x3a\x67\x77\xba\x5d\x99\x2d\xb7\x6b\xf5\xd9\x43\x99\x99\x6a\x2b\xea\x77\x34\xa9\x22\x57\xbf\xc4\xd0\x5b\x5e\xc6\x46\x11\xdc\xb3\xcf\xb6\x6b\x16\x53\xce\x19\xc0\x01\xad\xaa\x3f\x0c\xe8\x54\x0b\x7b\x93\x33\x69\xbe\x03\xae\x47\x72\x47\x98\xf2\x70\x72\x5b\x65\x1d\x0b\x45\xf3\xd8\x24\xb6\x47\x5d\x56\x66\x07\xf0\x30\x5e\xae\xfa\xd9\x63\x17\xdd\xf3\xda\xa0\xa6\x4f\xab\x66\x81\xf5\xa8\xe7\xde\x0e\xde\x78\xda\x0d\x7a\x42\xcf\x9d\xa4\xff\x22\x2b\x05\x3b\x5f\x7d\xf3\xa7\x84\x74\xd2\xf5\x27\xe3\xc5\xf9\x44\x66\x4e\x96\x1d\xbb\xc9\x56\x02\xc6\xb1\xc7\xcd\x24\x5f\xc2\xdc\x7d\x2f\x5d\x4c\xc1\xd8\x5c\x62\x3a\xb8\xa8\x47\x41\xa1\x77\x76\x87\xee\xb0\xf0\x28\xa1\x76\x5a\x51\xb9\x48\x15\xf7\xe6\xb9\x98\x75\x99\xb1\x5d\xea\x3a\x30\xad\xb8\x1a\x37\x9d\xee\xa1\xe7\x62\xa5\x97\x19\xba\xf0\x98\x8b\xb9\xcf\x30\xdf\x85\xf3\x4d\x62\x7a\x98\x83\xf1\x64\xf3\x60\xa8\x4d\x9e\x6b\x22\xd6\xf8\xef\x05\x51\xad\xd0\x32\xcb\x66\x57\x4c\x78\x69\xa8\x58\x32\x2a\x7f\x39\x8c\x75\x14\x3a\x45\x60\xce\x12\x5f\xd7\xe4\x57\xb2\xb3\x5d\x6f\x9f\x41\x1b\xee\xb5\x77\x27\x24\xb2\x38\xd7\xac\x10\x12\xa4\xc2\x8a\xde\x99\x6d\xe9\xf2\x87\x1c\xb5\x80\x6e\xf0\xe0\xf8\xf8\xc0\xf4\x92\x0b\x73\x95\x1a\x8f\xa2\xfe\x7c\xaf\xae\x85\x4e\xa9\x7a\x02\x37\x7c\x48\x07\x63\x97\xc8\x94\xd3\xb0\x53\xe5\x42\xac\xb9\x74\xf5\x2f\xc0\x98\x72\x59\x53\xdf\xef\xb5\x0f\xcc\xe7\x76\xad\x96\x93\xfd\xce\x10\xbc\xb8\xdf\x5b\xe5\xc7\xf0\x23\xdb\x3c\xb1\x54\x47\xf1\xa1\x79\xe5\x71\xd1\xb4\x23\xfb\xfa\xe3\x9a\xd4\x5c\x2c\xfd\x8f\xbe\xf8\xe6\x58\x2a\x2e\xf0\x1c\x4a\x46\x99\xc6\xcd\x9f\xf9\x9f\xcc\x1f\xf6\xba\xb7\xfe\xd7\x06\xdd\xd1\x65\x66\xf9\x5a\x2c\x5f\x9d\x2d\xe7\xd6\x6d\x4f\x0c\x28\xbf\xad\x9e\x40\xfe\x1c\x78\xc0\x9c\x89\xb9\xf9\x59\x84\x90\xba\xad\x09\x3b\xea\x14\x0e\xc0\x7d\x18\x25\x4f\x1e\xec\x8f\x1c\x42\xa8\xa4\x77\x54\xf2\x84\xb2\x1d\xfe\x45\xeb\xe1\x09\x47\xd1\xc4\x5b\xd5\xb4\x90\xdb\x59\x63\xe5\x3d\x28\x0f\x0d\x97\x80\x16\xb1\x87\x7d\xc5\x35\xf8\x2a\x35\xf2\x02\x3a\x86\x22\x82\x7d\x87\xfe\xe7\xf0\xef\xbf\xfb\x75\x7c\xf4\xe7\xc3\xc3\x9f\x5e\x8e\xff\xf3\xe7\xdf\x1d\xfe\xfd\x18\xfe\xf1\x1f\x47\x7f\x3e\xfa\xd5\xfd\xf0\xbb\xa3\xa3\xc3\xc3\x9f\xfe\xf2\xfe\xcd\xcd\xe4\xfc\x67\x7a\xf4\xeb\x4f\xac\xad\x6f\xcd\x4f\xbf\x1e\xfe\x44\xce\x7f\xfe\xcc\x97\x1c\x1d\xfd\xf9\xb7\xc9\x5d\xc7\x6c\xf9\x21\x51\x7a\x9b\x67\x6c\x37\x0b\x65\x8a\xcc\xc9\xb6\xcc\x79\x1f\x7b\x63\xa6\x50\x5b\xef\x2a\xa4\x4c\x8d\xb9\x18\x5b\x2e\x2d\x30\x52\x12\x1b\x70\xdb\x2b\xf7\xf9\xbf\x72\x52\x33\xc8\x54\x76\x4a\xe1\x1e\x1d\xf0\xa7\x52\x34\x0c\xc3\xcf\x73\xc0\x64\x4c\x4b\x41\x2d\xf5\x03\xd9\x91\xdb\x7c\x6d\x37\xe8\xbf\x03\x72\xc6\x05\x8d\xcc\xba\x76\x96\x94\x36\xaf\x8e\x3b\x23\xc8\x71\xaf\xd9\xef\xdd\x92\x04\x88\x99\x7b\x06\xa4\x4d\xf4\x33\x20\x6d\x1e\xe9\xca\x80\xb4\x49\x7a\xbe\x48\xa4\x8d\xe1\x1d\xfc\xf7\x84\xd9\xe4\xaf\x8a\x16\x99\xb9\x93\xb3\x20\x1a\x61\x77\xb1\xe0\xea\x9c\xa9\x6e\xce\xed\xa1\x38\x6a\x78\xd3\x56\x58\x3d\x92\x45\x91\x29\xef\x6d\xcf\x22\x67\x40\xb4\x6b\x54\x3f\x8b\xe1\xa7\x0c\xd5\x6d\xa5\x68\x13\x99\x10\xe0\x4d\x4b\x4f\xa6\x8b\xb0\x94\xbc\xa0\xd8\x25\x82\xc3\x6f\x2a\x2c\x95\x1b\x32\x78\xe6\x15\xbe\x25\x01\x21\x6f\x6c\xb6\x36\x90\xf7\xba\xb9\x9d\x2e\xf5\x3d\x74\xce\xee\xec\x9d\x84\xca\xd6\x24\xb8\x92\x2e\x56\x9a\xa5\xdd\xaf\x2b\x9b\x51\x9f\x4b\x9b\xad\x10\x24\x35\x82\x06\xe9\x9d\x88\x18\xa2\x39\x7c\xd6\x41\x20\x21\xfd\xc3\xd2\xc3\x46\x75\x23\xd9\x38\x48\x57\xc5\x7d\x36\x42\x92\x8d\xb5\xa6\x83\x77\x30\xd1\xbe\xee\x1d\xdd\xc2\x1e\x25\x70\xa4\x6b\xe5\x79\x35\xf2\xa7\xd0\xc6\xf7\x45\x13\xdf\x13\x2d\xfc\x69\x34\xf0\xfd\xd4\xbe\xb3\x69\xde\x79\xb4\xee\x3c\x1a\xf7\x16\xb8\xf6\x9c\x5a\x76\x1e\x0d\xfb\x29\xfc\x6b\x8d\x20\x33\xfa\xb0\x0f\x69\xcb\xae\xc2\x0f\x52\xe4\x01\x5c\x35\x8d\x20\x0d\x61\xa5\x23\x42\x73\x11\x58\x60\x6c\x1c\x32\xce\xbd\x5f\x34\xef\x85\x7d\xbd\xc9\x53\x36\xdc\xd6\x68\xb8\xad\xb7\x78\x86\xdb\x7a\xb8\xad\x9f\xe5\xb6\xb6\xd2\xea\xeb\xbf\xaa\x73\x57\xd7\xad\xf1\x7c\x67\x15\x10\xce\xfa\x54\x76\x20\x99\x9f\x85\xba\x7f\xad\x9e\x48\xa4\x1f\x2b\x14\xb2\x1e\x74\xa1\xb8\x11\x7b\x86\x6b\x5a\x20\x53\x7d\xcd\x98\xd5\xa8\xc6\x0c\xcf\x81\x06\x5b\x7f\xcf\x1e\x31\xc4\x85\xaf\x6a\x15\xd5\x93\x15\x4e\x40\xf0\x60\x39\x5e\x63\xf8\xa5\xe0\x55\xa5\xf5\x95\x8a\xde\x12\xf4\x9a\x34\x15\x5f\xd6\x96\xa6\xa9\x44\xd7\x0a\x2b\x32\x6b\xab\x6b\xa2\x12\x0a\x55\x47\x4a\x1c\x5f\xd1\xc7\xb0\xaf\xef\x6a\x2b\x42\x71\x1f\x28\x76\x83\x1a\x43\x03\x1f\xf5\x9a\x0f\x0c\xae\xf2\xd3\xea\x1e\x2f\xe5\x08\x5d\x92\x3b\x22\x46\xe8\x62\x76\xc9\xd5\xc4\x38\x91\xe2\xde\x1b\x72\x82\x98\x97\x23\x3a\x43\xdf\x55\x58\x11\xa9\x90\xc2\x73\xc0\x16\x77\x05\x7e\xb8\xe8\x35\x8a\xb8\x16\x94\xf7\x74\xfb\x42\x3d\xe6\x79\x56\x4e\xbe\x8f\x54\xfd\x81\xd6\x7d\xcd\x9f\x67\xaf\xab\x51\x39\x1e\xfd\x9d\x71\x42\x1b\xfa\x7e\x43\xe7\x6d\xd8\xe8\xbd\x38\x31\x25\x03\x5d\x55\x64\x70\xe9\x52\x86\x04\x91\x0d\x67\x92\xf4\xca\x37\x74\x03\x81\x9a\x97\x71\xa7\x3e\xab\xc7\x37\xda\x30\x48\x35\x09\x1a\x2e\x15\x54\x39\x88\xd5\x4f\x72\xd9\x02\x13\xd7\x11\x28\x7c\x81\xab\x8a\x94\x88\xd6\x35\x29\x29\x56\x5a\x6f\xc7\x33\x45\x04\xc2\xa1\xa8\xf7\xe5\x53\x7d\xde\x88\xa9\x87\xe1\x4a\x69\xc4\x1b\x6b\x7d\x9a\x59\x09\x79\xb4\x94\x41\xf4\xc2\xa0\x4e\x6d\xe1\x8f\xae\xf0\xc6\x4a\x29\x8d\x24\x21\xaa\x9f\x0f\xa0\xd9\x05\xdb\x7b\x15\xb4\x8b\xa6\x15\x2f\x6e\x25\x6a\x99\xa2\x95\xad\xd5\xc9\x6f\xc1\x7e\xa9\x40\x9c\x44\x37\x1d\x2f\xa5\xfc\x3f\xc7\xfe\x80\x8d\x75\xaf\xe4\xc9\x6f\xba\x5f\xc1\x07\x91\x9d\xcb\x60\x45\xe7\xb0\xa1\xc9\x03\x29\x52\xf4\xf9\x7e\xb0\xe5\x81\x14\x61\xa5\x4f\x47\xe3\xac\x77\x94\x25\x4f\xce\x14\x77\x34\x4f\x26\xfc\x55\x2e\xcc\x53\x02\x69\x75\xf8\xe4\x86\xf4\x9c\xd9\x45\xa0\xd2\xce\xbc\xf9\xb1\xa2\x8c\xf4\x17\xc6\xd7\x7f\xf3\x8b\x63\xc2\x9e\xd6\xc8\x45\x25\x15\xa4\x50\x5c\x2c\x1d\xeb\x57\x72\xd7\x5c\x5f\x74\xdf\xa0\x70\xf2\xe1\xc1\xc9\xc1\xd1\xda\x1e\x39\x90\x90\x7e\x61\xae\xc5\x63\x4b\x9d\xed\x07\x25\x69\xdd\x54\x4b\x18\xc7\x41\x39\x42\x54\xe5\xc0\x08\xe9\xdb\xd0\x94\x09\x87\x59\xb1\x54\xdf\x23\x24\x39\x52\x02\x97\xd4\x1a\x08\xf0\xa9\xfe\x92\x12\xad\xbd\xd0\x0f\x0f\x7e\x3d\x18\x21\xa2\x8a\x23\x74\xcf\xd9\x81\x82\xe9\x3b\x46\x37\x50\x5c\x31\x1d\xd6\xeb\x3a\xb2\xe4\x2d\x54\x18\x37\x4b\x68\xea\xe9\x56\x4b\xb8\x6e\x10\x6f\x6d\xfd\x55\xac\x52\x28\xca\xc3\xe7\xfc\x81\x2a\x4b\xbe\xa1\xe5\xf7\x4b\xd8\x4d\xb6\xe2\x37\xd6\xc6\xc8\x1d\x39\x59\x10\x5c\xa9\x85\xc9\x66\x60\x9c\x8d\xff\x45\x04\x07\x1a\x73\x66\x7f\x93\xda\x8d\xb4\x90\x72\xf8\x24\x84\x97\xd7\x3b\x94\x05\xc8\x94\xd9\x19\xe0\x1e\x7d\xed\xbd\x21\xd1\x2a\x11\x5a\x95\x47\x6f\x6f\x6e\x26\x6f\x88\xea\xd7\x73\xd6\x1f\xa2\x37\xe7\x37\x2e\x87\x05\x1c\xfd\x44\xcc\xb8\xa8\xf7\x40\xbc\xe7\x01\xd7\x8e\x51\xc3\xc5\x3e\xdc\x32\x0b\x2e\x93\x96\x13\x3d\xc1\x15\xf3\x96\x4b\x65\x62\x39\xc6\x36\x61\x90\xd8\xc8\xfb\x09\x19\x2e\x7d\xff\x62\x72\x8c\xfe\xc6\x5b\xa8\x44\x86\xa7\xd5\xd2\x17\x32\x92\x24\x0d\x45\xad\x9f\x17\xba\x2b\x2f\xf4\x0d\xa2\x77\xfe\x5b\x82\x4b\x22\x24\x08\x68\x82\x93\x93\xa1\xb3\x1d\xf7\xa0\x6f\x59\x97\xf2\xac\x95\x8a\xd7\x68\x61\x87\xdd\xa7\x38\xb7\x87\xf3\xd8\x1c\x57\x4b\x27\x2b\x48\x63\x84\xb8\xfd\x9b\xaf\x4e\x44\xaf\x49\x2f\x33\xef\xf6\xf3\xa9\x51\x53\xc3\x69\xb3\x01\x0e\x43\x54\x6a\x65\x9b\x29\x9a\x97\xe9\xba\xc8\x90\x2f\x80\x32\xe6\x0c\xa0\x34\xf2\xf3\xd5\x17\x41\xb0\x27\xf9\x4d\xf9\xd2\x10\x50\x36\xa8\x3d\x7a\x12\xb8\x3d\xb2\x28\x4a\xbb\xf9\x8c\x0f\x3a\xde\x7b\xbe\xe9\xe5\xb4\xab\x0b\x5e\x60\xc6\x19\x2d\x70\x45\xff\x45\x4a\xd4\x36\x9c\xd9\xdc\x3a\xd0\x6c\x0b\x2c\xc9\x18\x22\xef\xcc\x88\x73\x19\xb0\x5d\x6b\xe9\xa0\x38\x07\x75\xcf\x17\x89\x36\xbd\xce\xd3\xd5\xac\xa8\xf0\x64\xea\xf6\xf0\x59\x0b\xa8\xf7\x16\x2b\xcf\x8e\x47\x5f\x84\x3a\x89\x32\x11\x2f\xac\x73\x9b\x99\x3a\xa1\xc0\xe7\x6d\xae\x2b\x10\xbc\x92\x88\xbb\xf4\xfd\x95\x6d\x5e\xb5\x0a\xb8\x6f\xba\x97\xc1\x1c\x08\xc4\xda\x7a\x4a\x44\x47\x0c\x29\xd4\xfa\x9c\x66\xf1\xba\xd8\x66\x4d\x73\x2e\x4a\xeb\x74\x0c\xcc\xe6\x04\xbd\xd2\x2d\xff\xf1\xdb\x6f\x7f\xff\x6d\x86\x76\xf4\xf0\x5c\x2b\x98\xa1\x8b\xd3\xcb\xd3\x5f\xae\x7f\x3c\x03\xba\xf9\xd4\xd7\x67\x4a\x92\xcd\x9d\x22\x9b\x35\x41\xf6\x49\xd3\x63\x81\xb8\x31\x59\xca\xe6\x3e\x12\xd7\xd0\x2b\xbd\x09\x5b\x69\x28\xea\xad\x4d\x12\x94\xd8\xd6\x66\x54\xfa\xee\x0c\x83\x79\x5a\x60\xed\x85\xa4\x92\x15\x21\x4d\x36\x8b\xff\x5a\xbf\xad\x57\x0e\x08\x95\xad\x30\x55\x69\x7d\xf0\xaa\xf3\xe5\xdb\xa0\x15\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\xb0\x41\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\xf5\x8b\xd6\xc2\x71\x57\x0d\xfe\xad\x8d\x16\x62\x56\xa2\x5b\xd2\xa4\x59\x97\x5a\x60\x3a\x18\x61\x1f\x45\x08\xbe\x77\x61\xeb\x76\x98\xf4\x6a\x23\x08\x1c\xfa\xcf\x68\xc4\x69\x15\x80\x82\xe0\x3c\x04\x02\xad\x11\x32\xc3\xb4\x42\x18\xbc\xf2\x8a\xd6\x04\xdd\x2f\x08\x33\xce\xfe\x0e\x2d\xf1\x15\x09\x9c\xaf\xd5\xdb\x78\xe0\x20\xe1\xdf\x6d\xed\x35\x4c\x65\xc5\xf8\xba\xcd\x00\x2b\xb3\x45\x8f\xd5\x6c\x30\x03\x3e\xe7\x19\xcc\x80\x48\x33\xa0\x11\xe4\x5a\xf1\x68\x5d\x33\x1b\xe0\xc6\x74\xe3\x11\xb8\xcd\x94\xcc\xb8\x20\xab\x78\x9b\x00\x07\x63\x91\xf3\x09\xc8\xe0\xd3\xc9\x85\x8f\x7d\xf1\x1e\xd6\xc5\x30\x17\xcb\xb6\x58\xb8\x30\x29\x23\x52\x9e\x00\xb2\xa6\x6d\x8c\x63\x19\xae\xb6\x56\x90\x78\x94\x4f\x23\x08\xa9\x61\x1e\x47\x1d\x9b\x90\x1e\x2e\x61\xe6\x43\xa2\x0a\x13\x37\x77\xb0\x22\xcb\x13\xeb\xa6\x6b\x96\x14\xce\xef\x26\xb6\x10\x58\x2e\x08\xe4\xce\x92\x07\xaa\xa4\x69\xd4\xb0\xb1\xba\x19\xd7\xfa\xc2\x5c\xe0\x82\xa0\x86\x08\xca\xb5\x8a\xd1\x32\x55\xf2\x7b\x86\xa6\x64\x4e\x99\x74\x2b\x96\xd2\x25\xb7\x25\x00\x49\x44\xa5\xaf\xdd\x7d\x8c\xae\x7a\x95\xe3\x2c\xbb\x58\xc1\x3b\x99\x69\xa7\x68\x94\x69\x4a\x40\x79\x81\x6d\xd0\xe2\xaa\x5a\x76\x1b\x2f\x24\x08\x7d\x64\x86\xe2\x37\x84\x99\xd9\xc3\x96\xc1\x40\x4b\x52\xe1\xa5\xc9\x20\x9f\x51\x06\xde\x5f\x21\x8f\x8e\xd3\xa1\x59\xd1\x1d\xe4\x22\x78\xe7\xa3\x3b\x83\x4a\x24\x08\x2e\x92\x78\x8c\x07\x0c\xd8\xa7\x9e\x01\x03\x36\x60\xc0\x06\x0c\xd8\xfa\x33\x60\xc0\xfa\xcf\x80\x01\x7b\xbc\x43\xfb\x1c\xb4\x1b\x30\x60\x83\x57\x66\xfd\x19\x30\x60\x51\xcf\x80\x01\xfb\xe4\xb3\x77\x22\x7a\xc0\x80\x7d\xc6\x33\x60\xc0\x3e\xf3\x19\x30\x60\x03\x06\x6c\xc0\x80\x0d\x18\xb0\x84\x67\xc0\x80\x6d\x3f\xbc\x21\xf8\x13\xff\x0c\x18\xb0\x01\x03\xb6\xe5\x33\x60\xc0\x56\x9e\x01\x03\x36\x60\xc0\x3e\xf6\x0c\x18\xb0\x01\x03\x66\x9f\xc1\xdb\xb8\xf6\x0c\x18\xb0\x0d\xcf\x80\x01\xdb\xae\x9d\xc1\x0c\x48\x7b\xd9\x93\x98\x01\x52\xf1\xe6\x9a\xce\x13\x78\x21\x73\x1d\x83\x6b\xdf\x13\x4b\x1a\x29\x6d\xb1\x5d\x69\x3e\x74\x7e\x2c\x69\x29\xfb\x42\x44\x58\x70\x93\x4c\x89\x36\x11\xf4\xb0\x9a\x94\xdb\xe4\x62\x06\x01\xe4\x80\xc9\x4d\x9f\x0a\x47\x13\x48\x7b\x65\x1d\xfa\xea\xb3\xbb\xdd\x28\xd3\xb6\x4b\x7c\x0f\x82\xf9\x28\x30\x33\x95\x51\x6d\x99\x6c\x7d\xbd\x4f\x78\x29\x5d\x25\x09\xc6\xd9\xd8\x90\xb5\x1e\xeb\x0e\x1f\x73\x79\x9c\xe0\x0d\x4e\x64\x66\x33\x18\xb9\x89\xe0\xd3\x9d\xb1\xb3\x4d\x00\x7f\x44\x0b\x0b\xd0\xe3\xb3\x1e\xe3\x9a\xe9\x60\x24\xd3\x5a\x1f\x18\x06\xc5\x9a\x1d\x05\x17\xb5\x02\xdb\x83\x02\x77\xc9\xe6\xb6\x35\x72\xca\xb1\x54\xca\x93\x86\x9b\xff\x74\xb8\xa9\x00\x30\x15\x1d\x47\xd9\x31\xbd\x5c\x0a\x4a\x6a\x67\x08\xa9\x3d\x41\x98\x65\x40\x45\xe5\xd4\x95\xf6\x14\x0d\xb5\x9f\x48\xa8\x7d\x44\x41\xed\x02\x01\xb5\x73\xf4\x53\x9e\xb0\x7a\x86\x90\x7a\x26\x8d\xf4\x09\xc2\x53\x16\x48\x7f\xb3\x10\x44\x2e\x78\x15\x2d\x70\x72\x09\x9b\xf7\x94\xd1\xba\xad\xa1\x0a\x85\x96\x29\xf4\xce\x83\xfd\xa5\x13\x19\xf6\xba\x37\x88\x03\x28\x57\x51\x12\x28\x03\x8e\x69\xa5\xb7\x16\x90\x85\x2e\xf0\x1d\x28\xa5\x6d\x51\x10\x52\xa6\xa8\xa5\xa1\xb7\xfa\xf7\xc7\xbe\x87\x86\xa3\x9f\x4a\xf4\x2a\xed\xaa\x49\xb3\x7b\x02\x77\xde\xef\xbf\x89\x7a\xc7\x5c\x34\x79\x6e\xe9\x37\x57\x93\xb3\xde\x2d\x0d\x1f\xbc\x85\x63\x7c\xb6\x20\xc5\xed\x95\x85\xd2\xec\xee\x66\x4e\x77\x33\x25\xb9\x98\x72\x28\x06\xa9\x5e\x94\x7e\x0c\x99\x0b\xb5\x12\x02\x9d\xc3\x2a\x12\x71\x47\x0b\x72\xfc\x0c\x8e\x8a\x5c\xc6\x7f\xfa\x41\x40\x10\x26\x80\x81\xef\x8b\xda\x75\x6d\xba\xe3\x23\x0c\x81\x8f\xca\xf6\x14\x40\xa3\x15\x2e\xfc\xda\xcc\x37\x1f\xba\xa4\x6e\x1c\x4a\x42\xbc\x41\x33\xa7\x6a\xd1\x4e\x8f\x0b\x5e\x9f\x68\xd1\x61\xfe\x33\xad\xf8\xf4\xa4\xc6\x52\x11\xa1\x6d\x1c\x7b\xad\x8f\x0b\xdd\x03\xca\xe6\xc7\x75\x79\x74\xfc\xbf\x92\xfa\x70\x61\x7d\xe5\x36\x0d\xeb\x11\x27\xc1\x94\x68\xb9\xcf\xc5\x8a\xb7\x40\x4f\x4a\xfa\x26\x4d\xbe\xbf\x53\x8b\x8a\x24\xc2\x92\x77\x02\x49\x1e\xa4\x36\xca\x10\x10\xc8\x29\x54\xf6\x03\x76\xfc\x64\x90\xe3\x2c\x67\x35\x13\xd4\x78\x8f\x60\xc6\x7b\x63\x0b\xed\x0b\xb4\x38\x1b\xac\x38\x17\xa4\x38\x0b\x9c\x38\x07\x94\x38\x1f\x8c\x38\x0f\x84\x38\x3f\x7c\xf8\xc9\xa0\xc3\x5f\x04\x6c\x38\x63\x7c\x2c\x13\x5c\xf8\x39\xa0\xc2\xfb\xeb\x83\x41\x19\xe0\xc1\xcf\x07\x0d\xce\x32\x8f\x59\xad\xd8\x44\x91\xb0\x03\x28\xf0\x73\xc4\xff\x9f\x2c\xf6\x9f\x21\xee\x9f\x33\xe6\x9f\x2d\xde\xff\x64\x90\xdf\x74\xb8\x6f\x56\x9f\xc2\xb3\xc0\x7c\x73\x42\x7c\x93\xd7\x97\x32\xaa\x28\xae\x5e\x93\x0a\x2f\xaf\xd3\x80\xa0\xb9\x56\xe2\x72\x0d\x2c\x6a\xdc\xd6\x7d\x5c\xc3\x02\x4b\xe4\x42\xdd\x96\xe2\xc5\xc5\xd2\xad\x0a\x8c\x30\x44\x9c\xf5\xf8\xa2\xa3\xd6\x68\xff\x22\xd7\x68\x6f\xdc\xe3\x86\x57\x65\x4f\x76\xcd\x5b\x7e\x8f\xf8\x4c\x11\x86\x0e\x29\x73\x3b\xe7\x28\xf0\xd2\x74\xe1\x91\xe4\x78\x87\x7e\xeb\xab\x97\xae\x91\xaf\x2f\xee\x01\x91\x21\x29\xf7\x3a\xf2\x65\xfb\xf8\xe9\xd0\x97\xfd\xe2\xac\xad\xfa\xe1\x2f\x13\x12\xcb\x13\xfb\x7a\x75\x8c\xde\x5b\x75\xe2\x15\xf4\xc7\x8b\x22\xcc\x4a\x64\xf9\xb9\xbe\xbe\x7d\x92\x0c\x75\xef\x1b\x37\x1e\x9b\xde\xc7\xb3\x98\x1b\x58\x6b\x99\x1c\x61\xfd\x2d\x50\x40\x07\xa7\xeb\xde\x38\x5d\x77\x84\xc0\xfe\xfa\xac\xad\xe7\x47\x5c\x0f\xd6\xd6\xbf\x8b\xb5\x15\xd0\xe2\xbd\x11\xb8\x20\x93\x7d\x52\xde\x9c\x00\xe9\x12\x01\x3b\x1d\xce\x8b\x0b\x46\x88\x49\x1c\xeb\x48\x0f\x81\xdf\x6f\xd6\x56\xd5\xd2\xf8\x10\x7b\x0c\x98\xf1\x5b\xeb\x66\x41\xd6\xa8\x03\x21\x94\xba\xa1\x77\x9d\x6d\xd2\x08\x6e\x35\x12\xd1\x32\xa6\x55\x0c\x7b\x9c\x74\xe7\xb5\x2d\x22\x09\x8b\x77\xa7\xe3\x1e\xb1\xa1\x05\xa1\x03\xd0\x73\x41\x50\x97\xbf\xd4\xef\x88\x6e\x75\xc6\x45\x41\xa7\xd5\x12\x2d\x70\xa5\x8d\x25\x0b\xd2\xbe\xa5\x55\x65\x5f\x93\x00\x0a\x27\xca\x84\x9e\x8d\x46\x53\x71\x36\x87\xc9\xc0\xa6\x23\xe4\xa1\x21\x85\x6e\xb3\xa8\x08\x66\x6d\x63\xfa\xa9\xf5\xa3\x25\x6f\x85\xeb\x67\x12\x2a\x3e\x68\x9d\x4a\xc4\x68\x35\x72\x53\xde\xa7\xc0\x5c\xdf\xf3\x9d\x4b\x59\x92\xd2\xb2\x57\xde\x53\x49\x46\xf0\xce\xe8\x3e\x99\xbe\xb8\xaa\xfd\x66\xdf\x98\xcf\x1a\xc1\xef\x68\xd9\x61\xf4\xf5\xb6\x00\x7c\x7c\x74\x5b\x3f\xc2\x7b\x9d\x68\x65\x9c\x8d\x19\x99\x63\x50\x8f\xad\x40\x33\x88\x4e\xd3\xbe\xc1\x0f\xb2\x92\x16\x58\x11\x09\x39\x09\x3d\x6a\xdb\x3b\x8a\xa3\x7b\xa2\xc7\x13\xec\x28\x74\xc8\x38\xe2\x90\x59\xd8\x32\xaa\x96\x10\xd1\x5b\xb4\x0a\x95\xfc\x9e\x1d\xa5\x1c\x4c\x03\x73\xc0\x68\x4a\x14\xee\x92\x03\x9d\x4a\x26\x11\x61\x78\x5a\xe9\xb3\x07\x88\xff\x9b\x8d\x1b\x00\xcd\x08\x56\xad\x20\x68\x8e\x55\x82\x94\xd8\xa0\xcd\x9b\xf5\xfc\xf8\xb6\xa3\xd2\xc6\xeb\x66\xa8\x65\x92\x24\x2a\xb2\xd9\x4c\x80\xc8\x8c\x57\x7d\xa2\x79\xab\xf6\xe4\x1e\x79\xcc\x75\x64\x32\x77\x02\x23\x91\xd6\x44\x22\xde\x26\x78\xf2\x7a\xe6\x9f\x6d\x2e\xa7\x85\x37\xf8\x9d\x36\x3e\xb1\x61\xd3\x1c\x3b\xec\x32\xd0\xca\x03\x7e\x02\x07\xb7\x32\x19\xd4\xaf\x2f\xaf\x7f\x79\x77\xfa\xdf\xe7\xef\xe2\x16\xfe\x1c\x17\x8b\x90\x5b\x9c\x21\x0c\x17\x05\x08\xf9\x05\xbe\x23\x08\xa3\x96\xd1\x7f\xb6\x16\xf2\x76\xe8\xdb\x8b\x14\xab\x59\xd2\x7b\x92\x14\x5f\x7d\x4b\x44\x49\x8e\x1c\x6b\xfa\x8e\x4a\x20\xaa\x86\x4e\x58\xe0\x3f\x97\x04\xcd\x04\xaf\x57\x0c\x2d\x74\xe9\xc1\x75\x4b\x7d\xc3\x60\x63\x9a\x2d\x88\x88\xd3\xc8\x5f\x7f\x38\xbf\x86\x1c\xfc\x46\x18\x62\x77\x48\x2e\x80\x77\x42\xeb\x26\x75\xd0\xf4\xa7\x3c\x46\xa7\x6c\x69\x7e\x69\x84\x59\xa4\x8a\x52\x51\xa9\x08\x28\xa7\xd6\x90\x74\xf0\xc0\x17\x2f\x8f\xe1\x7f\x2f\x10\x2e\x4b\xa1\x2d\x4d\x9f\xa3\x51\xac\x66\x99\x45\xb5\x6c\xec\x57\x3a\xad\x82\xc9\x65\x44\x41\x1a\x47\xd4\x0b\xdf\xf3\xd2\xae\x04\x28\x81\x80\xdf\x31\xda\xad\x54\x02\x2b\x32\xa7\x05\xaa\x89\x98\x13\xd4\x60\x55\x2c\x50\x8d\x97\xa8\xe0\x42\xb4\x8d\xa1\x18\x29\xb1\xc2\x71\x2d\x7f\xcf\x05\xaa\x9d\x74\xd6\xd2\x4c\xab\xe4\xd7\x9b\x81\xa0\x9d\xc8\x0e\xff\x49\xa5\x6c\x89\x3c\x79\xf5\xf2\x4f\xdf\x7c\x1b\x69\x5e\x67\x3c\xb8\xb1\xd0\xa7\x04\xc8\x53\x1f\xfe\xe5\x36\x18\x80\xae\x7b\xcc\x30\x76\x87\x98\x9d\x0f\xd2\x50\x52\x36\xaf\x92\x1d\x20\xc9\x6e\xc0\x54\x27\xe0\xb8\x1b\xc1\x24\xd6\x17\x98\xee\x09\xec\xf5\x21\xde\x95\x92\xcf\x0b\xd6\x69\x70\xce\xef\x65\x05\x32\x67\x81\x61\x77\x31\x71\x52\x2a\xc5\x7f\x04\xd6\x84\x77\x4c\x19\xf6\x11\xd3\xac\xc1\x3b\x8c\xd0\x4b\xf4\x5f\xe8\x01\xfd\x17\x78\xc1\xfe\x18\xdf\x54\x1e\x1f\x53\x0e\x18\xff\x82\x4b\x75\x31\xc9\xb4\xd0\x7f\xd5\xf7\x95\x7e\xa3\x5e\x0f\xc5\xd1\x94\x5a\x77\x04\x79\x50\x44\x68\x33\xd0\xae\x61\xea\xcc\x25\x79\xd4\x74\x07\xbf\x94\xdd\x9d\x0a\x2e\xb8\x98\xf5\xd1\xff\xcf\xb4\xbf\xa1\xe1\xb7\x5c\xaa\x4b\x2b\xad\x43\x0a\x9d\xb0\x1f\x35\x5c\xc4\x3d\x71\x9f\xd2\xea\x7b\xbd\xf7\xba\x1a\x1b\xa8\xe4\x90\x00\x61\x72\x38\x17\x34\x41\x38\xec\xcf\x89\x4d\xc3\x89\xe6\xdb\xba\x1f\xdb\x5a\x2b\x3e\x7d\xf0\xc8\x58\x23\x25\x28\x4b\xd3\xf0\xf2\x18\xec\x9b\x84\x5e\xe8\xd9\x28\x03\x65\xe0\x23\xa6\xd1\xb1\xb1\xd7\x7c\x74\x18\x0e\x9c\x96\x58\x05\x66\xb1\x3a\xac\x79\x04\x99\x11\x21\x4c\x9e\xf0\x74\xe9\xd2\x8d\x92\x77\x5b\x92\x94\x6b\x04\x57\xbc\xe0\xd1\xb4\x29\x39\xb7\xca\xc4\xf6\x05\xe6\x1e\x62\xb5\x3e\x3a\xfe\xc3\xeb\xc9\x08\xdd\x9c\x4d\x46\x88\x0b\x74\x7d\x96\x06\x7e\x0a\x5d\x30\x2f\x6e\xce\x26\x2f\x76\xba\x02\x41\x0e\xd3\xcd\xd9\x24\xe2\x25\xeb\xf0\xd9\x1a\x37\xe3\x5b\xb2\x8c\xd4\xee\x72\x68\x98\x63\xbf\xb1\xb2\x0c\xc8\x4c\x73\x8d\x9b\xad\xdf\x26\x08\x2e\xe9\x5e\x33\xb9\xb8\xac\x43\xdf\xd3\x7c\x94\x2e\x35\xbf\x23\xa5\xb1\x9a\x5d\x2b\x84\x95\x0d\xa7\xda\x46\x1a\x78\x5e\x3e\xf6\x0c\x3c\x2f\xdb\x3f\x03\xcf\xcb\xa6\x67\xe0\x79\xd9\xe2\x19\x78\x5e\xcc\x33\xf0\xbc\xf4\x3b\xb2\x8f\x39\x46\x03\xcf\xcb\x27\x9f\x81\xe7\xe5\xd1\x67\xe0\x79\xd9\xea\x19\x78\x5e\xd6\x9f\x81\xe7\xe5\x23\xcf\xc0\xf3\xe2\x9f\x81\xe7\x65\xe0\x79\xf9\x72\xa5\xf6\xc0\xf3\xb2\xfa\x0c\x3c\x2f\x03\xcf\xcb\xc0\xf3\x12\x3e\x03\xcf\xcb\x23\xcf\xc0\xf3\x32\xf0\xbc\x0c\x3c\x2f\x1f\x7f\x06\x9e\x97\xe8\x67\xe0\x79\xd9\xee\x19\x32\x0f\xb7\x7c\x06\x9e\x97\x81\xe7\x65\xf5\x19\x78\x5e\x3e\xf9\xec\x87\x7b\x7c\xe0\x79\x19\x78\x5e\x3e\xfa\x0c\x3c\x2f\x03\xcf\xcb\x47\x9f\x81\xe7\x25\xe2\xd9\x3b\xa7\xeb\xc0\xf3\x32\xf0\xbc\x7c\xac\x8d\xc1\xda\xda\xee\x19\x78\x5e\x06\x9e\x97\xb5\x67\xe0\x79\x59\x7f\x06\x9e\x97\x81\xe7\x65\xe0\x79\x19\x78\x5e\xfc\x33\xf0\xbc\x7c\xed\x7e\x27\x41\x24\xfd\x17\x99\xf0\x8a\x16\xcb\xe4\x6c\x9f\x2b\x22\x79\x2b\x0a\x7d\x63\xc3\x6b\x51\x03\xef\xf5\x1e\x85\x24\x25\x7b\xcf\x28\x14\xae\x82\x89\x0b\xa9\x14\x84\x9d\x83\xa7\x98\x82\xbd\xa0\x53\x70\x03\xbc\x8c\x47\x10\x8c\x5d\xf9\x6c\x33\x7d\x71\xce\xd2\x64\xab\x3d\x1c\xc8\x3e\xa4\x73\x86\xb4\x47\x7e\x17\x29\xee\x85\x2d\x7d\x74\x73\xe1\xa6\xa9\x68\x4a\x62\x2c\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\xc7\x52\xe5\xd7\x8a\x3a\x71\x98\x84\x35\xbb\x98\xad\x82\x51\xa9\xea\x79\x81\x2e\xb9\xba\xb2\x87\x7b\x67\xeb\x95\x19\xb1\xe0\xa6\x70\x67\xac\x55\x67\xbc\x6e\x5a\x45\x7a\x17\x9b\x99\x62\x63\x74\x50\x99\x2a\xd0\x77\x93\x0d\x5a\x70\x36\xa3\x73\x6b\x7d\x9f\xd4\x98\xe1\x39\x19\xfb\xd9\x1e\x77\x54\x0f\x27\xd1\x17\xf5\xce\x52\x41\x8b\x0a\xd3\x78\xe0\x60\x2e\x31\x71\x06\xbd\x00\x1a\xb0\x0e\x50\x0f\xb9\x69\x7e\x9a\x47\x1e\x36\x4e\x8d\xdc\x38\x76\xbf\x32\x7f\x3c\x4a\xb0\x1e\xb1\x02\x5f\x05\x18\x46\x1b\x76\x6a\x9a\xc1\x68\xcc\xc4\x92\x34\x44\x5b\x04\xc6\x81\x1a\xaf\xf7\x2f\x19\xae\x69\xe1\x4e\xd8\x69\x55\xf1\xc2\xf8\x64\xfa\x56\x65\x8e\x2e\x6b\x63\xb7\xae\x5b\x85\xa7\x15\x39\x46\x17\x86\xa2\x82\xb3\x6a\xa9\xcf\x9f\x24\xca\x41\x14\xec\xe6\x4f\xb3\x24\x53\xf0\xaf\x89\xd8\xd7\x8d\x4a\x39\x6c\x2a\xc3\xa9\x41\x98\x16\x65\x9c\x11\x44\x98\x12\x4b\xbd\xff\x26\xbc\xbc\xd6\x5b\xb0\xf7\xed\x64\xaa\x8d\x44\xc8\x6b\x0e\xb8\x6b\x22\xd4\x35\x0f\x40\x35\x1d\x9c\x9a\x17\x98\xda\x85\x10\x0c\x53\x50\x98\xf1\xd3\xdb\x16\x0d\x2f\x8f\x37\x88\x26\xc4\x67\x89\x3d\xd0\x2d\x4e\x78\xa9\x95\x26\x41\x8c\x7c\xf2\x67\xd4\x38\x10\x2f\x74\xe7\x6e\xc1\xe3\x87\x55\xa7\x4d\xe1\x3b\x4c\x2b\x7d\x80\x13\x3b\xb0\xce\xba\x98\x16\x95\xc9\x14\xab\xb0\xe0\xfc\x7d\xda\x2c\x36\xad\xab\x97\x19\x56\x2c\xb8\x24\x0c\xe4\x25\xf6\x19\x3c\x3e\xbf\xc0\x8a\x98\xd2\xdc\xc5\xa9\x28\xe2\x8b\x19\x22\x75\xa3\x96\x23\x44\xee\x88\x58\xaa\x05\xa0\x0d\x3c\x6f\x28\x88\x35\x2a\x51\x8d\xcb\x60\x77\x8c\x10\x77\x0e\xe8\xc4\xe6\xe1\x7e\xb0\x36\x59\x5b\x29\x63\xa1\x51\xe9\xd3\x28\x76\xbd\x6b\x72\xd3\xd9\xa0\x54\xa1\x99\x93\x8e\x06\x01\x95\x6a\x4d\xe3\x88\x6b\x51\xc6\xb3\xf0\x0e\x7a\x11\xa4\x8e\xe8\x2d\x51\xe3\x07\x70\x4f\xe2\x9a\xb7\x4c\x19\x9e\x1a\x63\x31\x78\x2d\xcf\x24\xd8\x3c\x23\x5e\xee\x49\x75\x7b\x94\xe7\x6a\xc7\xa5\xa3\xa6\x98\xe4\xc8\x53\xc6\x4a\x11\xc1\xbe\x43\xff\x73\xf8\xf7\xdf\xfd\x3a\x3e\xfa\xf3\xe1\xe1\x4f\x2f\xc7\xff\xf9\xf3\xef\x0e\xff\x7e\x0c\xff\xf8\x8f\xa3\x3f\x1f\xfd\xea\x7e\xf8\xdd\xd1\xd1\xe1\xe1\x4f\x7f\x79\xff\xe6\x66\x72\xfe\x33\x3d\xfa\xf5\x27\xd6\xd6\xb7\xe6\xa7\x5f\x0f\x7f\x22\xe7\x3f\x7f\xe6\x4b\x8e\x8e\xfe\xfc\xdb\xf8\xe8\x63\x6a\xa8\x3d\x5f\xa0\x3d\x53\x98\xfd\x49\x82\xec\x56\xc6\xee\xfc\xf0\xdb\x2b\x70\xed\xf8\xdb\xe8\xc4\xc7\x8e\xbf\x48\xf6\xc9\x5c\xcc\xba\xf6\xa9\x44\xbc\xa6\x4a\x91\xd2\xde\xbd\x01\xf7\xcd\x8a\x3f\xc8\x0a\x2c\xa0\xad\xc2\x70\x7b\x07\x1c\x2c\x9d\x1b\x29\xba\x5b\xfe\x7e\x05\x0f\x18\x43\xb4\x6e\x2a\x52\x13\xa6\x40\xf0\x8c\x9d\x6d\x0b\xee\xc4\xe3\x6e\x04\x85\x71\x78\x90\x87\x82\x90\xd2\x76\x72\x90\x8d\xc1\x33\xc8\xc6\x41\x36\x7e\xea\x49\xf6\x89\xe7\x10\x8c\x57\x61\x27\xac\x2f\x4b\x3a\x4d\x19\x3c\xe4\x9e\x22\x81\xcf\x00\x28\x71\x47\xcb\x16\x57\x21\x93\xac\x23\x17\x8d\x93\x00\xe0\xda\xe9\x43\x43\x20\x4c\x4b\xee\x48\xe5\x3b\x61\xdc\xf4\xc7\xe8\xaf\x06\xce\x13\x1a\x9a\x7d\x87\x7a\x5c\x40\x6e\xd3\x70\xfb\x8c\x10\xd6\xd4\x3d\x90\x2b\x5d\xf2\x68\xa3\x2e\x09\x43\xef\xb6\xb8\xa9\x38\xf5\x52\xa3\x5a\x8e\x90\x24\xca\xe4\xd8\x2c\xc8\xca\x32\x61\x89\x5e\x9c\x56\xf7\x78\x29\x5f\xf8\x98\x24\x65\x54\xad\x14\x1f\x88\xea\x03\x70\xc3\xea\x17\xce\xb8\xd6\x79\xa1\xaa\xc2\x6c\x46\x8a\x48\x6b\xd6\x70\x70\xac\xf7\xcd\xe2\xd1\x15\x65\xad\x1e\xad\x9b\x55\x52\x22\xce\xa2\x1a\x22\x0f\x54\xa1\x96\x29\x5a\x69\x65\x1d\x09\x32\x6f\x2b\x1c\x3a\x02\xed\xc8\x1c\x4c\xae\x3c\x46\x1f\x58\x41\xc2\x2f\xc7\x79\xaa\x57\x1a\xd0\xca\x43\x45\x14\x29\x47\xf0\xea\xfe\xd0\xa5\x01\x9a\xf5\x4e\xbe\x5f\xca\xa8\xe6\xdd\x5c\x7a\x20\xd1\xb1\x39\x50\x1e\xe5\x80\x4a\x3a\x9b\xe9\x96\xc1\xd8\x66\x5c\xd4\x78\xbd\x57\x98\x95\x51\xad\xeb\x93\x0b\xe9\x25\x21\xcb\x2f\x54\x76\x79\x21\x69\x49\x0a\x2c\x5e\x84\x35\x41\x4e\x2b\xb5\xe0\xed\x7c\xd1\xed\x8a\xb4\x29\x47\x52\x01\xbc\x4a\x4f\xa6\x74\x9e\x8b\x95\xcd\x26\xb5\xce\xc2\x0a\x62\x54\x2b\x4e\x8c\xc0\xb8\xc7\x91\x6d\xaf\x41\x00\x0c\xa6\xdb\xac\xb9\xcb\xb9\x02\x0c\x1f\x29\x83\x04\x39\x46\x1e\x54\x86\x01\x1f\xa3\x0b\x43\x78\x31\xea\xbf\xb5\x37\x25\x66\x32\x02\x0c\x9b\x43\x63\x46\x02\xf8\x56\x1a\xa0\x3e\xc5\x0c\x78\x89\xcd\xcb\x31\x5b\xba\x8c\x0e\xc0\x98\x99\x4c\x34\x9f\x64\x52\xc5\xf9\xd0\xfd\x59\x7a\xf6\x32\x3b\xbd\x13\x7a\xd5\x56\xbb\x8b\x5e\x5e\x85\x05\x3e\x2a\x5b\x80\x47\xe8\x1e\xb9\xac\x9e\x05\x29\x6e\xcd\xc9\x2b\x89\x11\x6f\xc4\xf2\xdc\xa6\x9e\xae\x05\x6f\xab\xd2\xb0\xea\x76\xd2\x19\x24\xad\x81\x50\x9a\x6e\x60\x41\x10\xd1\x16\x02\x50\x8f\xd0\x38\xf1\xcd\x45\xa9\xb7\xb7\x11\xc9\xf0\x62\xe3\xd5\x76\xe9\x2e\xb6\x4b\x20\xe5\x0b\xce\xcc\x3d\x39\xb2\x37\x77\x8d\x29\x8b\x55\xed\xba\x31\xd0\x39\xe3\x02\x9c\xd6\x33\xc4\x78\xbf\x0f\xfd\x23\xbf\xd2\x8b\x68\x9d\xc3\xe3\x90\x36\x6a\x3b\xdd\x72\x9a\xf6\xef\x17\x44\x5b\x6b\xfd\xbe\xc4\x8a\xed\x60\x45\x85\x96\x88\xc7\xba\x33\x52\x09\x0c\x34\xc9\x36\x9f\x42\xc4\x6e\x7c\xad\x74\x9f\x2a\x54\x73\xa9\xd0\x37\x2f\x83\x39\x4e\xf2\xa3\x8d\x11\x9c\x44\x08\xf8\x79\x35\x05\x98\x2e\x30\xe4\x42\xc5\xbe\xf5\xa2\x24\x4c\xd1\x02\x57\x41\x47\xf5\x25\x31\xe3\x62\x4a\xcb\x92\x00\xb4\x1d\x0a\x42\x80\xc9\x19\x69\xe9\x82\xea\xda\x35\x10\x60\x40\xba\x8d\xf5\xfe\x87\xeb\x1b\x88\x61\xf6\xf5\xbd\xce\xe6\x8f\x53\x8d\xee\xf4\x10\x94\x16\x0a\xe1\x7e\x36\xea\x6c\xaf\xa5\xaf\x03\xd2\xa7\xc7\xa3\x77\x4a\xe0\xe8\x59\xf0\xfb\x75\x39\x42\xb5\xca\xc6\xca\xe8\x84\xc7\x3d\xc0\xf1\x99\x8d\xbf\x23\xec\x9d\x69\x7c\x1f\xd0\x5c\xd7\x3e\x37\x52\x6f\x6c\x6c\x33\x23\xf1\x2d\x61\x5a\x94\xad\x2f\xfc\xcc\x73\x68\x51\x01\xee\xae\x14\x6a\x28\x38\xcd\x58\x51\xa9\x4f\xb3\xb9\x18\x21\xdc\xd4\x70\x5b\xc1\xcd\xe3\x9e\x5f\xd8\xcd\xf9\x42\x5f\xd6\x4e\xd8\xa7\x71\x5a\x67\x08\x7c\x66\xf0\x8e\xe8\x59\x3d\xe3\x65\x8a\x8f\x6b\x05\xee\xe0\x95\x1e\x93\x32\x03\xf7\x6d\x69\x74\x1e\x50\x78\xf4\xba\xf6\x57\xf5\xeb\xc0\x39\xe8\x33\x89\x15\x8f\xf7\x77\xe5\xc1\x3a\xb8\x6e\xec\x57\x08\xbb\xb7\x29\x04\xa9\xcc\x75\xbc\xa0\x0d\x9a\x12\x75\x4f\x08\xdb\xac\xa7\x95\xe4\x50\x1e\x39\x47\x4d\x62\x27\x3a\x68\xa8\x81\xd8\x1e\xa3\x49\xef\x98\xc3\xe5\x9e\xce\xec\x76\xc1\xbe\x5b\x15\x51\x60\x78\x39\x31\xe3\x44\xd8\x86\xb1\x02\x40\x2a\x0d\xce\xe5\x07\x4b\xc0\xda\x58\x1b\x73\xf2\xf0\x2e\xb9\x4a\x1b\x61\xf2\xd0\xb4\x7e\x67\x1d\x06\x4f\x32\xca\x4c\x48\x12\x8b\xe3\xde\xa3\x53\xd8\xbf\x6a\xed\xdc\xd9\xad\xef\x85\x73\x0f\x82\x17\x88\xef\xd4\x9d\xe3\x6d\x8a\x6f\xbf\x45\xc4\x04\xaa\x32\xd8\x15\xee\xc9\x43\x79\x99\x85\xf4\x32\x1f\xcf\x35\xca\xc6\x75\x8d\x3e\x02\x0b\x89\x63\x77\xcd\x8c\x34\x97\xa4\x68\x05\x55\x4b\x6d\x0b\x90\x87\x28\x87\x75\x8e\xb3\x72\xdd\xef\x46\x2f\xa8\xe2\xba\x88\x78\x63\x2a\x78\xac\x94\xc7\xee\x3c\x2e\x2d\x03\x5f\x71\xdc\x8e\xbe\x98\xe9\x15\x31\xee\x11\x08\x94\x00\x68\x79\xb5\x63\x2e\xe8\x62\x74\xac\x7f\xb6\xf4\x0e\x57\x5a\x0c\x77\x7f\x31\x81\x0c\xcd\xf0\x8f\x9e\x12\xd9\xae\xb0\xbc\xed\xc2\xbb\x64\xdc\xf0\xb2\x8b\xe6\x9e\xb8\xa9\x83\x8f\xc8\x83\xfa\x02\x51\xed\x20\xa5\x26\x82\xde\xd1\x8a\xcc\xc9\xb9\x2c\xb0\x51\x61\x76\x8d\x8c\x38\x7d\xa4\x5f\xb0\x33\x05\xaf\xa4\xf7\x3d\x61\x97\x9f\x0e\x4e\x98\x39\xa6\x0c\x6a\x3b\x27\x68\xab\xb6\x51\x69\x12\xe4\xa9\x92\xa8\xc1\x42\xef\x42\x97\x08\x6f\xe2\x19\x53\xce\x2b\x5b\x0c\xa8\x5a\x76\xfd\xa2\xf1\x10\x56\x70\xa0\xf3\x5f\x18\xb9\xff\x45\xf7\x42\xa2\x59\x85\xe7\x5d\x3c\x45\x5f\x6c\xab\xfa\x64\x72\x6e\xfe\xa3\x13\x0d\x95\x6e\x5a\x7d\x8f\xdd\xe3\xa5\xec\x58\x0b\x42\xb7\x7b\xfc\x8d\xf2\xea\x08\xe4\x09\x96\xc8\xb7\x1d\x17\xef\xd1\xcf\x37\x47\xe0\xdc\x3f\x3b\x9d\xfc\x72\xfd\xb7\xeb\x5f\x4e\x5f\xbf\xbf\xb8\x8c\x7e\xd9\x25\x57\xc4\x40\x5b\x82\xa0\x6e\xe1\xd3\x69\xf4\x2a\xf8\x8c\xac\x63\x2e\x8f\x01\xb7\x0a\x94\xb9\xac\xe4\xf7\x89\xe0\x7e\xbd\xa7\x08\x8e\xf3\x9e\xe0\xa6\x39\x15\x35\x17\x13\xc1\x67\xb4\x8a\xd6\xf8\x73\x9d\xe0\x95\xee\x38\x98\xef\xa9\xfd\xb8\xbb\x6e\x0c\x8b\xe3\x7a\x36\x49\x70\x65\x50\xe0\x0a\xd4\xaf\x89\x87\x15\xad\x86\xf3\x0f\xe4\x6a\x17\xe3\x0f\xd1\x4e\xf7\xcc\xce\x39\xb2\x74\x37\x22\xff\x3c\x87\x6b\xa0\xe2\x05\xae\xa0\x4a\x74\xda\xc6\x47\x99\x0d\x93\xd5\x7e\x05\x9c\x1e\xd8\x6d\x67\x54\x71\x5c\x9a\x18\x96\x11\xfe\x25\x71\xb5\xcb\x9c\xda\x05\x59\x0b\x49\x1d\xb9\x31\x7c\x0a\xd0\x9e\x23\x21\x69\x04\xf1\x5a\xcd\x4a\xf3\xdc\x94\x6c\x4b\x6a\xf2\x7d\x3f\x07\xc4\x8e\xb2\x47\x97\x95\x7a\xe6\x7c\x33\xf6\x80\xd1\x19\xf8\x53\xc0\xcf\xa9\x0d\xf5\x65\x63\x1c\x9c\xef\xdc\x32\x24\x94\x97\xcd\x64\x3c\xc3\x4b\xf6\x64\x77\x9a\xf9\xf1\x3b\xd2\x24\x83\xdf\x52\x3d\x83\xb3\x4e\x48\xbb\x6d\xe3\x74\x10\x93\x11\x9e\xb8\x1f\x7f\x84\x42\xe6\x4e\xfe\x67\x70\x4e\xf9\x25\x46\xe3\xe0\x68\x35\x82\x8c\xd7\x8f\x57\xaa\xbd\x7f\xd5\x32\x45\x6b\xe2\x18\x46\xc7\x2b\x3a\x91\x30\xbf\x3e\x90\xbe\x9e\x4f\x96\x8d\x8e\xd0\x0f\x0c\xce\x2b\x23\x25\x1a\x23\xc6\xbb\x25\x22\x6c\xc6\x45\x01\x8e\x87\x9d\x6e\xf0\x02\x37\x78\x4a\x2b\x9a\x22\xcc\x73\x6d\x70\x28\x8f\x19\xf4\x07\x30\x40\x65\x79\x52\x0a\xde\x98\x9b\xd8\x51\x7f\xa5\x67\x65\xf6\x29\x66\xc2\x4a\x4e\xd6\x13\xd5\xeb\xc8\x5c\x60\xa6\x3a\xfc\xde\xda\xc6\xf9\x77\xd4\x41\x72\x28\x01\xb8\xcc\x57\x68\xf6\xb4\xd4\x32\x23\x5c\xb6\xe4\x73\xb5\x6f\x45\x6b\xce\xdc\xe0\x02\x8e\x19\x34\xf9\x70\x7d\xf1\x7f\x56\xce\x4d\xbc\x6a\x67\x9e\xfd\x2e\x59\xa1\xe5\x41\xb6\x6d\x73\x65\xeb\x7c\x0f\x1b\xe7\xeb\xde\x38\xde\x41\xb4\x73\xbe\xed\xab\x36\x8c\x38\x53\x16\x74\x0d\xd5\x49\xba\xce\xc4\x53\x53\xf6\xdf\x1a\x02\x74\x05\x41\xfa\x2b\x4c\x51\x80\x4b\x07\xde\x5a\xc5\x4d\x29\x6b\xab\x76\xa5\x95\x62\x08\x6f\xd7\x19\xae\xe4\x97\x7a\x45\xa6\xb8\x76\x1a\xc1\x8b\xf7\xbc\x65\x79\x08\xbc\x13\x76\x9c\xef\x08\x2a\x09\xe3\xca\x7a\x53\xc0\x96\xe0\x33\xf8\x2d\x32\x39\x6b\x41\x6d\x8e\x9e\x9e\x93\xa0\x66\xdd\x04\xaa\x95\xc7\xaf\x38\x3d\xdc\xd8\x2f\xad\x5c\x03\x46\x5a\xbd\xaa\x4b\x61\x9b\x25\x20\x19\x04\xc1\xa5\x01\xd2\x60\xb5\x30\xa4\xf1\x35\x96\xb7\xa4\x34\x1f\x24\x12\x66\x7a\x72\x4c\x80\xc2\xb9\x99\xbe\xd1\x93\xeb\x38\x4b\xc0\x21\x6c\x40\xb6\xc0\xa0\x99\x62\x8a\xed\xf4\x34\x24\x08\x76\xbd\x08\x1f\x58\xb5\xbc\xe2\x5c\x7d\xef\x6b\xe2\xef\xfa\x64\xfc\xd5\x43\x61\x43\x27\x26\xf8\xa5\x31\x74\x79\x0c\x1b\x07\xe4\x62\x50\xc9\x3f\x55\x2c\xea\x05\xf9\x77\x95\x8a\xa2\x65\xa7\xf2\x8d\xe0\x6d\xb4\x0e\x97\xd3\xde\x7c\x73\xf1\x1a\x2e\xbe\xd6\x72\x2a\x33\x25\x96\x0d\xa7\x4c\x39\x8f\x57\xc6\xa0\xcd\x0f\x96\xbd\x3a\x94\x6c\xc9\x44\xb5\x08\xbd\xc7\x4b\x84\x2b\xc9\xbd\x4b\x8d\x6d\x0a\xb7\xba\x58\xae\xfe\xf5\x94\xab\xc5\x5a\x10\x37\x36\x75\x47\x3f\xeb\xed\x8d\x02\x6a\xe6\x0e\x10\x43\xd9\x5a\xb3\x0a\x58\x5d\x1a\x41\x0a\x52\x12\x56\x7c\xa9\x27\x62\xd7\x4c\xc1\x70\xaa\x2e\x39\xd3\xe2\x75\xd7\xe7\xea\xc2\xfb\x27\xed\x6a\x84\xa7\x08\x5c\xd9\x36\x88\x88\x81\x55\x1b\x84\x6b\x2b\x53\x90\xa7\x17\x33\x88\x7a\x9a\x4d\xf7\x97\x76\x4a\x2a\xbd\xd8\xb4\xaa\x1c\xda\xde\x40\x13\x68\x8d\xe7\x04\x61\xe5\x0f\xa1\xe2\x88\x30\xd9\x0a\xbb\x6f\x22\xb3\xaa\xf4\xe3\x13\xc2\xec\xd0\x7e\xb8\x78\x8d\x5e\xa2\x43\x3d\x36\x83\x18\x9c\x61\x5a\x01\x51\xb7\xc3\xea\x86\x36\xc0\xcc\xe5\x94\x25\x4d\x01\xc8\x11\xc4\x85\xb9\x5a\x46\x88\x71\x24\xdb\x62\x11\x64\x1c\x78\x8f\xb0\xad\xda\x94\x44\x44\x32\x88\x9d\x7c\xf7\xe1\x0f\x92\x44\x43\x64\x73\x5e\x87\x3f\x3c\xe3\x75\x18\x9a\x88\xfa\xf8\xf7\x17\xcc\x9c\xd5\x9a\x28\x5c\x62\x85\xed\x35\xe9\xbe\x30\xec\xda\xe1\xb2\x4c\xb8\x2c\x25\x79\x47\x59\xfb\x60\xea\xa2\xec\x45\xd8\xe3\xfa\x1c\x7a\x84\x0a\xb7\xd0\x3c\x88\xdb\xb9\x08\x45\x86\x14\x8d\x8b\xde\x31\x1a\x3d\x62\x75\xc3\x2d\x81\x0d\xf7\x26\x64\x51\x62\x56\xf2\x7a\xad\x93\x33\x2e\x10\xc1\xc5\x22\xba\x37\x01\x6a\x64\x38\x98\xf6\xf9\xf7\x0e\x08\x41\xfa\x6a\x36\xdf\xfe\x3b\x48\x86\xa5\xd2\xef\x5c\x93\x1d\x5b\xe1\x29\xa9\x2c\x2d\xae\xe1\x4a\xcf\x78\xc2\x32\xf9\xc0\x05\xcf\x08\x89\xb9\xe2\x06\xc9\x85\xfd\x44\xe8\xd7\x7f\x11\xf3\x90\x15\x7c\x71\x63\xd1\x25\xdd\x3c\x80\x0f\xf4\x4b\x98\x87\x36\x41\x41\x44\xab\xf3\xa0\xb5\xcd\xfe\x3c\x80\xfe\xb5\xef\xf3\x20\x49\x51\xf0\xba\xd9\x13\xa4\xe4\x8d\x41\xe1\xeb\x1e\x7d\x2e\x2a\xb2\xff\x65\x9c\x04\x77\xb6\xd5\xae\xb0\x32\xf7\xa0\x2b\x79\xf5\xbf\x83\xeb\x1c\xa4\xdd\xea\x1d\x6f\x5b\x4f\x46\x64\xfa\x16\xed\x0b\xff\x1d\x6f\xbc\x01\x86\xd9\x7b\x9e\x1d\x86\x19\x30\xe6\x63\x70\xcf\xf7\x20\x91\x5f\x03\x18\x53\x1b\x01\x30\xaf\x84\x01\x0b\x50\x83\xd5\x62\x64\x33\x56\xef\x88\x13\xcf\xb7\xc6\xe3\x75\x00\x12\xc7\x75\xc8\x89\x9b\x0e\xb3\x6a\x98\xf4\xb3\x62\x37\x37\xe1\x35\xcd\x77\x2e\x3f\xdc\x84\x3c\xfa\x98\x2d\x0d\x47\x64\x02\xab\x99\x79\xf6\x4f\xad\x78\x4a\x4c\xe7\xea\x2a\x3e\x35\xa4\x33\xe9\x7d\x9b\x11\x9d\xcf\x77\x4a\x3f\x0f\xe5\xb9\x8a\xf1\xcc\xda\x85\x55\xc0\xe7\x7a\x1b\x19\x56\x2e\xf9\x08\xd8\xab\x73\x8f\x1c\x20\x7f\x35\x3d\x72\x56\x76\xe1\x48\x0b\x65\xe8\x04\xc1\x55\x95\x05\x93\xb0\xc9\x0b\xe2\x4e\x81\xa7\x92\x5f\xf7\x06\xf4\x6b\x9a\xa6\xb4\xfe\x09\x0f\xc6\x97\xed\x89\xa8\xb4\x45\xf1\x85\xfb\x21\xe6\xb5\xc4\x67\x82\x94\x06\x27\x75\xdd\x90\x62\x5f\x6e\x8b\x37\xef\xaf\x4f\xfb\x3d\x03\x5d\xd8\x16\xce\x20\xf0\x7b\x84\xcb\x9a\x4a\x09\x01\x1f\x32\x5d\x70\x7e\x9b\xd4\xe4\xa1\x4b\xb5\x9d\x53\xb5\x68\xa7\xc7\x05\xaf\x83\xac\xdb\xb1\xa4\x73\x79\x62\x25\xca\x58\x4f\xdc\x11\xa2\xac\xf2\x99\xca\xe0\x2d\x04\x2e\xb0\x78\x2a\xb9\x70\xf0\xa8\xf0\xa3\x87\xad\x07\xf9\x29\x1e\x9a\xbd\x3e\x3d\x50\xdd\x04\x36\xef\xce\xb5\x8e\xf5\x5d\x95\x56\x6d\x70\x65\x67\x3d\x32\xf6\xb0\x52\x87\x8d\xe2\x6c\x9c\x47\x63\xbc\xee\x7c\x92\xac\xd2\x5f\x10\x99\x84\x80\xcd\x79\xe6\xde\x76\x5d\x0a\xb9\xf4\xe8\xac\xc7\x08\xd5\xcf\xb9\x87\xf0\xf6\x81\xfe\x4b\x07\xcb\x3c\xc8\x55\x5c\xe6\xb4\xaa\xf4\x42\x62\x4b\xbc\x16\xa0\x3b\xc1\x34\xe9\x33\xda\x19\xce\x5d\x6d\x2c\x84\xa3\x80\x8b\x24\x4d\x28\x18\xde\x33\x7d\x19\x58\xce\x0c\xbd\x81\xa0\x6d\x8c\x6a\xfa\xa0\x7b\x18\xb6\xd8\x27\x89\x85\xc0\xff\xe6\x5f\x27\x14\xb0\x46\x00\x3e\xf0\x9c\xe9\x23\xbd\x42\x61\x23\x2e\x39\x5a\xe9\x6b\x4b\xff\xe2\x92\x28\x6d\xa8\x99\x79\x0b\xa3\x0f\xda\xb0\x12\x6d\x86\xc3\x90\x12\x19\x46\x61\x74\x38\xab\xa4\x48\x3c\x0f\x10\x29\xb6\x7d\xd2\x3a\x88\x53\xde\x9e\x2b\x72\x8c\x36\xa4\xef\x3c\x5b\x04\x19\x7d\x7e\x14\xf9\x09\x63\x55\x68\x5f\xe2\x55\x89\x52\x3f\xe4\xfa\xdd\x19\xcf\x4a\xc8\x37\x4c\xd7\xc1\x4b\x13\x5e\xae\xd1\x10\x03\x99\x31\xc5\x55\x7c\x21\xd7\x8b\x59\x48\xdd\xc9\xb8\x75\x8f\x98\x0a\xe2\x06\xa7\xff\x40\x8a\x56\x91\xd2\xb2\x91\x5b\x97\xb2\x61\x32\xee\xf7\x26\xba\x07\x2e\x49\x7f\x4a\x00\xa0\x24\x47\x5d\x29\x36\x6b\xeb\x78\x7e\xd7\x11\xfa\xbf\x20\x25\xa5\x23\xd4\xaa\xe8\x1d\x61\x44\xca\x89\xff\xf3\xd8\xa9\x00\x1c\x75\x81\x99\xb3\xad\xf4\x99\xb6\x1e\x6e\xcb\x3a\x6e\x79\x3c\xa6\x04\x35\x58\xe0\x5a\xdf\xc1\x12\xd9\xe5\x99\x92\x39\x35\x69\x81\xc1\xa5\xe8\x69\xcb\xe3\x48\x75\xc1\xb0\xa1\x0a\xd5\x74\xbe\x30\xa7\x05\x61\x54\x71\x36\x47\x0e\x37\x56\x71\x5c\x22\x10\x2c\x5c\xa0\x7b\x2c\x6a\xad\x0b\xe0\x62\x01\x20\x34\xcc\x50\xd9\xea\xf3\x80\x80\x64\x7b\x39\x96\x0a\x2b\x62\xc9\xf0\xa2\x7d\x70\x6e\x9a\x76\x50\x22\xf6\xa9\xcb\xdf\xef\x98\x4f\x47\x9f\xb4\x2c\x5e\x90\xf3\x07\x52\xf8\x63\x6d\x18\xa7\xeb\x1a\x08\x03\xb9\x3b\xce\x8e\x2d\x2e\x59\x19\xdc\x13\x53\xd9\x8e\x70\x5f\x74\x93\x33\x3b\xe1\xd4\x59\x9f\xe6\x47\x6d\x8f\xf6\x17\x41\xba\x20\x56\x50\x34\x09\xd8\xb1\xb9\xb8\xd5\x27\xd7\x70\x04\x71\xe1\xab\xf5\x27\x75\xcb\xf5\x03\x28\xb3\x39\x57\xe8\xf0\xe0\xe4\xe0\x68\x6d\x2f\x1c\xc8\x30\xcd\xc0\x64\x44\x77\x03\x92\xb4\x6e\xaa\x25\x8c\xe1\xc0\x94\xfc\x4e\x24\x30\x74\x80\x55\x5f\xfe\x52\x2e\x48\x55\x8d\x90\xd4\xea\x2f\x76\x35\x44\xcc\xa7\xfa\x4b\x4a\xb4\x85\x71\x93\x1d\x1e\xfc\x7a\x30\x42\x44\x15\x47\xe8\x9e\xb3\x03\x65\x02\x1e\xe8\x06\x6c\xc8\xa4\x3e\xf9\x4e\x2c\x79\x8b\x18\x21\xf6\xec\xf8\x62\x55\x05\xd6\xe6\x4f\x6b\x74\x74\x43\xba\x41\xaa\x2a\x4d\x9f\x3b\x7f\xa0\x4a\xab\x22\xaa\x05\x37\xc5\x4b\x63\x29\x10\xe0\xa1\xc7\x12\x6e\xba\x93\x05\xc1\x95\x5a\x2c\xbd\xf5\xf2\x2f\x22\x38\xd4\x27\x65\xf6\x37\xe9\x3a\xd4\x1e\xa4\x8d\xee\x6f\x02\xa7\x56\x30\x5a\x41\x6e\x16\x82\xc8\x05\xaf\x76\x9e\xc6\xf9\xde\x96\x7b\x2b\x38\x93\x5a\xa6\x68\x13\xdb\xf6\x51\xfa\x0c\x3a\xa3\xb3\xd8\xfa\x0a\x1c\x4e\x99\x20\xa5\x55\x96\x6c\xc9\x8b\x05\xbe\x03\x4d\x41\xeb\x73\xa4\x4c\x31\x4d\x42\x9b\xe8\xf7\xc7\xbe\x87\x3e\xed\xee\xd5\x9e\xc0\x36\x23\xb9\x23\xe7\xa2\xc9\x73\x4b\xbf\xb9\x9a\x9c\xf5\x6e\x69\xf8\xe0\x2d\x1c\xe3\xb3\x05\x29\x6e\xaf\xd2\xaa\xb9\xee\x09\xb4\xa0\xe1\x62\x97\x8a\x81\x6e\x3e\x9b\x56\x30\xe1\x42\x21\xd6\xd6\x53\x22\x9c\x43\x61\x0e\xab\x48\xc4\x1d\x2d\xc8\x31\xba\x34\xbf\x73\xc1\x79\x57\x7d\x18\xb3\x39\x41\xaf\xf4\x81\xf8\xe3\xb7\xdf\xfe\xfe\xdb\x74\x19\x9d\x4e\xa4\x9a\x87\x44\xd5\x0e\x7c\x5f\xd4\xae\x6b\xd3\x9d\x4d\xce\x66\xdb\x53\x30\xea\x2a\x5c\xf8\xb5\x99\x6f\x3e\x74\x69\x5e\x49\x49\x08\xda\x10\xae\xd0\xa2\xc3\xfc\x67\x5a\xf1\xe9\x49\x8d\xa5\x22\x42\xdb\x38\xf6\x5a\x1f\x03\xdd\x30\x65\xf3\xe3\xba\x3c\x3a\x4e\x8b\x82\x3b\xb3\x7a\xad\xa4\x5c\x8f\x66\xe6\x91\xf2\x70\x7a\x52\x76\xee\x82\x47\xae\x97\xdf\xa1\x17\x71\xd5\xc4\xf4\x12\xbc\x21\x79\x32\xd1\xde\xde\xdc\x4c\xde\x10\x15\x0a\x6c\x06\x1f\xa2\x37\xe7\x37\xbe\xdc\xb8\xde\x5d\x26\xa9\x69\x90\xda\x29\x52\x7b\xc1\xd3\xea\xcd\xe7\x8e\xbb\x18\x51\x02\xb5\xd1\x18\x23\x85\x5e\xe8\x51\xaf\xb2\xad\xc3\x21\x5e\x4c\x8e\xd1\xdf\x78\x0b\x2a\x17\x9e\x56\x4b\x74\x8f\x0d\xa3\x41\x1c\xa5\x74\xf7\xbc\xd0\xdd\x78\xa1\xa5\x96\xde\xd5\x6f\x09\x2e\x4d\xad\x4a\x70\xed\xec\xfc\xac\x06\x7d\xca\xb6\x6c\x67\xad\x54\xbc\x46\x0b\x3b\x54\x33\x87\x5d\x41\x7f\xa3\x1b\x99\x23\x08\xb1\x1f\x89\x04\x69\x8c\xb5\x64\xff\xe6\xab\xb0\x85\xd6\xa4\x90\x99\xe7\xa0\x1a\x10\x46\x45\x38\x55\x56\xd1\x07\x17\x26\xb5\x32\x2a\xda\x25\xd6\x3d\x59\xaa\x8a\xa0\x4c\x95\x45\x10\x08\x29\x7d\x28\x93\x5f\x92\x1e\x84\xcc\x53\xa3\x44\x3f\x2c\x31\xbc\x66\x9e\xbc\x15\x12\x90\x0d\xb5\xd9\xcd\x65\x00\x38\xba\xa3\xa9\xac\x84\xc8\x39\x93\x7d\x01\x55\xcc\x38\xa3\x85\x09\x67\xa0\xb6\xe1\x0c\xf1\x56\x35\xad\x02\x57\x50\x81\x25\x19\xdf\x61\x41\xb5\x40\xd5\xed\x77\x7f\xd8\x32\x7d\xda\x15\xe7\xe0\x27\xf1\x41\x67\xd3\xe3\xf4\x6e\x66\xd2\x66\x90\x2b\x80\x91\x79\x85\xd7\x16\x27\x7d\x47\xa3\xbd\xf6\xc1\x20\x53\x43\x7c\x91\xcf\xac\xc3\x6a\x01\xc8\x3e\x88\x65\x39\x60\x28\x08\x4e\x6d\x36\xec\x41\xe2\x4d\x56\x2b\x36\x51\x24\x40\xbc\x9d\x8b\x15\x3b\x58\xf7\x70\x7d\x0e\x33\x61\x4d\x9e\xde\xac\xb6\xc3\x72\x2d\x60\x86\x2e\x4e\x2f\x4f\x7f\xb9\xfe\xf1\xec\x97\xcb\xd3\xf7\xe7\x29\xaf\x4e\xae\x1d\x9f\xb3\x7a\x7c\xb6\xfa\xf1\x4f\x50\x41\xde\x3d\xb2\x58\x90\xfd\x81\x99\x5c\x43\x6f\x42\x52\x32\x6b\x03\x04\xf5\x90\xd3\x58\xea\xd0\x8a\xd3\x54\x0b\x9e\x9d\x4a\x1c\x8b\x2a\x78\x4d\x2a\xbc\xbc\x26\x05\x67\xe5\xce\xd1\xd9\x97\x5e\xd8\x48\xd3\x21\x5f\x06\x9a\xac\x30\x66\xb9\x42\xb0\xb6\x78\xb5\xc3\x07\x84\x90\x06\x33\xbe\xe8\xa8\x35\xda\xbf\xc8\x35\xda\x1b\xf7\x78\x43\x04\x05\x44\xd0\x3e\xec\x9a\xb7\xfc\xde\x56\x74\x3f\xa4\xcc\xed\x9c\xa3\xc0\x4b\xd3\x85\x47\xd2\xd9\xd4\x14\x47\xaf\x5e\xba\x46\xbe\xbe\xb8\x87\x45\xfa\xec\x75\xe4\xcb\xf6\xf1\xd3\xa1\xaf\x0e\xb6\xd4\x0f\x7f\xa5\xe0\x87\xd0\x8a\x18\x7f\x75\xec\xf3\xd4\x5e\x41\x7f\xbc\x28\xc2\xac\x74\x90\xb3\xaf\x6f\x9f\xa8\xa2\xb9\xe6\xc5\x6d\x26\xb7\xeb\xcd\xd9\xc4\xbc\x6d\x05\xcf\x62\x6e\x60\xad\x65\x72\x84\xf5\xb7\x40\x01\x1d\x9c\xae\x7b\xe3\x74\x3d\x30\x69\x5d\xb8\xfa\x6e\x6b\x07\xea\xc1\x60\x6d\x75\x8f\x53\x7c\x44\xbf\x02\xca\x60\x6d\x3d\xf2\x0c\xd6\xd6\x16\x8f\x49\x22\x01\x30\xe8\x1b\x81\x0b\x32\xd9\x27\xe5\xcd\x09\x10\x54\xb6\xc2\x96\x95\xf3\x3a\x9c\x17\x17\x8c\x90\xd2\xc8\x0f\x3b\x14\x82\xe6\x7a\x24\x06\x1e\x0d\x3e\xc4\x0e\x58\xdc\x8a\x04\x35\xef\x66\x61\x5f\x6d\x55\x5c\x17\x64\xde\xd4\xbb\xce\x36\x69\x3c\x19\xba\xab\x1a\x62\x8f\x93\xee\x3c\x94\x5a\x27\x2c\xde\x9d\x8e\xc3\x15\x44\x92\xce\xf5\x74\xd9\xca\xd0\x06\x23\xec\x4b\xef\x75\x1d\xd1\xad\xce\xb8\x28\xe8\xb4\x5a\xa2\x05\xae\xb4\xb1\x74\x4f\xd5\x02\x61\x74\x4b\xab\xca\xbe\x26\x7e\xa2\xae\x89\xcd\xd5\x34\x1a\x4d\xc5\xd9\x1c\x26\x03\xdb\x9c\x8c\x87\x86\x14\xba\xcd\xa2\x22\x98\xb5\x8d\xe9\xa7\xd6\x8f\x96\xbc\xcd\x90\x96\xe1\x02\xdf\x5e\x9f\x62\xd4\xd2\x8f\x98\xc2\x6d\x1f\xdd\xf3\xfd\xe4\x5a\xf4\x41\x2d\x88\xb8\xa7\x92\x98\x42\x72\xd1\x7d\x32\x7d\xe9\x97\x91\x33\x9f\x79\x0a\x15\x9b\x39\xa8\xb7\x05\xa4\xb2\x46\xb7\xf5\x23\xbc\xd7\x89\x56\xc6\xd9\x98\x91\xb9\x21\x6a\xb0\x02\xcd\x20\x3a\x4d\xfb\x06\x3f\xe8\xb3\x0d\xa4\xe2\x0d\xa2\x75\x4d\x4a\x6d\x1f\x57\x4b\x74\x47\x71\x74\x4f\x80\x14\xa2\xdb\x51\xe8\x90\x71\xc4\x1b\x7d\x75\xb5\x8c\xaa\x25\x44\xf4\x16\xad\x42\x25\xbf\x67\x09\xf9\x56\x37\x16\xe6\x80\xd1\x94\x28\x6c\x7d\xe0\xfa\x10\x78\x4e\x74\xa0\x3b\xd7\x67\x0f\x92\x04\x6e\x36\x6e\x00\x4f\x93\x3e\xc7\x2a\x41\x4a\x6c\xd0\xe6\xcd\x7a\x7e\x7c\xdb\x51\x69\xe3\x75\x89\x3c\xcc\xfb\xc1\x6c\xa8\x4f\x34\x6f\xd5\x9e\xdc\x23\x8f\xb9\x8e\x0c\xc5\x45\x60\x24\xd2\x9a\x48\xc4\xdb\x4c\xf5\x26\x5e\xd9\xe6\x72\x5a\x78\x83\xdf\x69\xe3\x23\x55\x49\xa3\xaa\x0e\xe7\xd8\x62\x8f\x90\xf7\xdb\x3c\xdc\x80\xbf\x72\xda\xce\x66\x44\xc0\x4d\x07\x1d\x5e\x83\xdd\xfb\x3a\x5e\xee\x0e\x8b\x73\xde\x5a\xc0\x17\x51\x23\xa8\x1d\x60\xc9\x24\x1e\x69\xd2\x92\x6c\x42\x99\x5e\x41\x24\x70\xc1\x33\x74\xfe\xe1\xfb\xb8\x2d\x9a\xa3\xb2\x40\x5a\xca\x2a\x8c\xf3\x03\x8b\xc3\x24\xe6\xdd\x0f\x9b\x58\x5f\xec\xb6\x28\x2a\x2e\x6d\x7a\x34\xac\x4b\xb1\xc0\x8c\x11\xe7\x8c\xa2\x0a\x3c\xd9\x53\x42\x18\xe2\x0d\x31\xa0\xbc\xa8\xce\x60\x24\x29\x9b\x57\x04\x61\xa5\x70\xb1\x38\xd6\xbd\x63\x6e\x2f\x74\x79\xc8\xf6\x13\xa9\x04\xc1\xb5\xd9\x13\x82\xd4\x98\x9a\xe6\x11\x2e\x04\x97\x12\xd5\x6d\xa5\x68\xe3\x5f\x16\xe7\x45\x24\xc0\x08\x21\x4d\x5a\xaa\x5b\x2b\x48\x2b\xe9\x12\x9e\x47\x5d\x0f\xed\xf0\x79\x58\xac\x08\x5c\x67\x23\xfd\x5b\x52\x37\x6a\xe9\x13\x13\xe3\x6c\xa0\x19\x15\x52\xa1\xa2\xa2\x84\x29\x3b\x32\x43\x39\x08\x7d\x18\x39\x75\x9a\xd9\x19\x91\x76\x4a\x58\x09\xc6\x77\xa3\xa4\xc9\xbf\xf3\x9d\x70\xaf\x2a\xa9\xb4\xbe\x0e\x19\x97\xfd\x87\x5d\x65\x1a\xb3\x71\xdc\x8c\xc0\xd6\x71\x0a\x8e\xe9\x91\xfd\x28\xe8\x42\x50\x67\xbb\xcb\x9d\x4c\x93\x2b\x50\x3e\xc6\x9d\xeb\x51\x8f\x73\xa0\xb3\x2d\x20\x15\x66\x4d\xea\xc0\x86\x62\xe4\x4e\x9f\x03\x52\x10\xad\x8a\xe2\x8c\x42\xe6\xd9\x65\x4c\xa0\xcb\xbd\x27\x52\xe2\x39\x99\x44\xc2\x11\x72\x08\x9c\xce\xd1\x06\x38\x86\x6e\xdb\x2c\x88\x21\xba\x52\x3c\xf8\x24\x4c\xf2\x0a\x8d\xc7\xda\x0c\x24\xaa\x07\xce\x68\xba\x17\x54\x29\x02\xbb\x14\x2a\x39\x01\x00\x6d\x95\xbc\xb3\x9f\x5c\x16\xd5\x9e\x9d\xf4\xb0\x3d\xad\x7e\xb0\xd2\xa4\x69\x4d\x09\x9a\x0a\x4a\x66\x68\x46\x21\x6f\x0c\x32\xaa\x46\xa6\x0a\x01\x06\xdc\x2e\x96\x92\x08\x18\xb6\x75\x0b\xb8\xe1\xc7\xf5\xe7\xaf\x76\xfc\x4a\xb4\xac\xc0\x41\x89\x4e\xe0\x16\xa3\x33\x34\x87\x2c\x2e\x6b\x04\xff\xe1\xe5\x7f\xfe\x11\x4d\x97\x5a\x5f\x03\x43\x4c\x71\x85\x2b\xd7\x01\x54\x11\x36\xd7\xab\x08\x22\x37\x4e\x6e\xf4\xf8\xa9\xfc\xe2\x54\xb4\xa6\xca\x4c\xd0\xab\x6f\x6e\xa7\x49\x47\x0f\xe4\xe3\x49\x49\xee\x4e\x82\x2d\x34\xae\xf8\x3c\xee\xad\x67\x39\xb2\x89\x93\xfc\x6c\x1b\x4e\x34\xaf\x68\xb1\xdc\xd5\x99\x76\xc5\x4b\xd0\x82\xdf\x1b\x67\xce\xfa\x51\x0d\xa8\x5e\x1a\xde\xb4\x15\x4c\x1c\xfa\xde\xf3\xf3\xb5\x92\xac\x52\x1f\xa5\x3a\x09\x03\x69\x07\x41\x54\xdb\xec\xca\x9d\x63\x53\x18\x5d\x37\xb9\x25\x9e\xb0\x31\x37\x5f\x87\x24\xda\x1b\xf7\x3d\xae\xaa\x29\x2e\x6e\x6f\xf8\x3b\x3e\x97\x1f\xd8\xb9\x10\x5c\xf4\xc7\x5c\x61\x7d\xa7\x2f\x5a\x76\x0b\x55\x74\x3b\x32\x5a\x3e\xb7\x98\x42\xc7\x1f\x10\x8c\x2e\xaa\x33\x6e\x94\x86\x1e\xd4\xa9\x24\xce\x07\xd7\xb5\x4c\x1e\x68\xe7\x68\x63\x88\xe8\x3e\xc7\x26\xe0\x93\xde\x38\x64\x78\xb4\xbf\x79\xf9\x87\x3f\x19\xe1\x82\xb8\x40\x7f\x7a\x09\x29\xc7\x72\x64\x2e\x00\xb8\x81\xb5\xaa\x55\xe3\xaa\x8a\x8d\x12\x84\x22\xe0\xfb\xe8\xe2\xd4\x7b\x70\xe4\xd5\xce\x4e\xf7\x67\x9b\x8c\x37\x37\x7f\x03\x7b\x91\x2a\x49\xaa\xd9\xc8\xb0\xbd\x78\xb7\xd6\x01\x68\x57\x07\xf6\xca\x8b\x67\x0a\xda\xbd\xd1\x76\xc7\xab\xb6\x26\xaf\xc9\x1d\x2d\xe2\x02\x98\xbd\x55\xe9\xbd\xcd\xb9\xe9\x2b\x2a\x81\x04\x68\x5a\xf1\xe2\x16\x95\xf6\x97\x01\x54\x7e\xb5\xaa\x76\xfc\x2c\xc4\x26\x0d\x24\x24\x0b\x3c\x3a\xfe\x5e\x9a\x40\x8d\x9b\xc6\x33\x94\x08\x7c\xdf\x9b\x0c\x10\x4d\xc0\x8e\x9a\x18\x46\x4c\x0e\xa6\xa7\x86\xd2\xc7\x76\x44\xfa\x9a\x8a\x7e\x45\x74\x6e\x41\x7a\x24\xbe\xeb\x7d\x7c\x1c\xb3\xb7\x21\xba\x17\xba\xd3\xd0\xc0\xbf\x0d\xdf\xc2\x1a\x33\x96\xa7\x1c\xf2\x1b\xc3\x68\x90\x7a\xfb\xc0\x2d\x13\xef\xbe\xcc\x10\x0c\x4d\xcb\x91\xe8\xcd\x0b\xf3\x41\xe8\x1a\x2b\x6b\x1f\xb9\x28\x3b\x46\x0d\x11\x92\x4a\xad\x3a\xfd\x08\x07\xea\xac\xc2\xb4\x0e\xc2\x77\xbb\x9a\x84\x75\x44\x7d\x8d\x9b\xf1\x2d\x59\x46\x6e\xb8\xc4\xe3\xf2\x18\xc0\xbf\xc6\x4d\xe4\x3d\x00\xa5\x6b\xd3\xaf\x81\xc8\xcb\x79\xc2\x4b\xdb\x0f\xb8\x1e\x4c\x49\xe2\x27\x31\x63\x33\xea\x40\xbb\xbe\x72\x7e\xec\x16\xae\x7f\xe3\xe8\x4f\xfc\x95\x63\xbe\xf5\x35\x5d\x34\x30\xbe\x2f\xf5\x9e\xf1\x9d\xcf\x24\x4e\x93\x90\x4e\x70\x3b\xd9\x9d\xd1\xbf\x8e\x7a\x0e\x2d\x73\x32\x03\xd3\xd7\x3a\x9a\x8e\x4d\x51\x80\x84\x0e\xe8\xa3\x68\x1b\x45\x07\xdf\x1d\xec\xf4\x8e\x33\x2b\x23\x78\x83\xe7\x60\x99\xee\xc3\x02\xad\xf6\x29\xe4\xa0\x5d\xf0\x7b\xf3\x7b\x83\x2e\x69\xec\xb7\x48\xd9\x11\x99\x2f\x78\xd2\xea\x18\xe4\xa0\xdb\x11\xd6\xba\x36\x5c\x85\xf7\x78\x89\xb0\xe0\x2d\x4b\x4a\x83\x86\xc0\x88\x0f\x9c\xbd\x5f\x19\xec\x25\x67\xc4\x05\xe9\x53\x5a\xb9\xe9\x38\xcc\xa9\x34\x78\x05\xca\xd0\xab\xe3\x57\x2f\x93\xfb\x7e\x45\x8a\x56\x48\x7a\x47\xae\x6c\x8d\xf3\x20\xa8\x72\x31\x9b\x70\x29\xe9\xb4\x82\xc4\x2d\xc5\xd1\xb9\x29\x00\xbf\x3e\x50\x0f\x1c\x81\x11\x73\x11\xb2\x95\x26\xf4\xf0\xd0\x9c\xe0\x10\xf0\xa9\x1b\x48\x40\x7d\xec\x97\x26\x09\xeb\xba\xa2\x49\x5e\x7a\x4d\xd2\xdc\x7b\x3b\x1d\xab\x2b\x7c\xbf\x0f\x92\xe4\xbd\x8d\x0d\x74\x95\xed\xa9\xab\x9c\x0c\x1f\xdd\x0b\xaa\xec\xe1\xbe\xa7\x92\xa0\x43\xf0\x4a\xac\x6c\xc6\x24\x82\xe6\xd0\x87\x95\x58\x01\x3f\x07\xc1\xb2\x58\x3d\xba\xfb\xb0\x4a\xeb\xf2\xa4\x43\xe0\xdf\x5b\x07\x56\xb7\x82\x56\xfa\x77\xf7\xf2\x02\xb3\xb2\x4a\x92\x19\x7e\x56\xaa\x65\x12\x17\xce\xc5\x0c\x85\x22\xd1\xc6\x2f\x83\x6a\x12\x0b\x2c\x11\xe3\xa8\x26\x18\x00\x9a\xfa\x76\x71\x52\xb0\xc7\xd5\x9c\xaf\x0f\x66\xb3\x9b\x6b\x2c\xbc\x10\xac\xb8\x7e\x4d\xa5\x15\xcf\x5a\x8e\x58\x0b\xc4\xc0\x3a\x6a\x5c\xa6\xa4\x76\x07\x73\xda\x2d\xde\x71\x07\x9a\x5c\xed\x49\x77\x71\xac\xf4\xe5\x29\xfa\x31\xb2\x25\xc8\x75\xf3\x2d\xe0\x04\x37\xb8\xe5\x3a\x90\x4c\x52\x34\xdb\x3c\xab\xc3\xf5\xd7\xe2\xda\x58\x37\xf7\xd8\x77\x38\xa1\x0f\x9f\x1e\xea\x28\x90\x85\x0e\x23\x6a\x42\xea\xb6\x06\x8a\xcd\x78\x4c\x63\xf2\x76\x41\x09\xef\xee\x99\x13\x46\x04\xb6\x71\x05\x07\x11\xb5\xe4\x2b\x58\x72\x96\x7a\x20\x3e\xb1\xe1\xb4\xbc\xff\xb4\x9a\x62\xfe\x2c\xa1\x23\xa0\xe7\x1c\x72\xb1\x72\xda\x6d\xc4\x64\x93\xc6\x92\x73\xd4\x2b\xd4\x5c\x66\xf3\x07\x9c\x9f\x7a\x51\xfe\xd9\xd2\x3b\x5c\x11\xc3\x61\xef\x44\xc3\x4e\x95\x09\xd9\x4e\xf7\xd5\x6c\xb4\xf6\x21\x98\x1d\x9b\x41\x0f\x8f\x5a\x90\x99\xf4\x89\x17\x2f\xd0\xa1\x69\xe3\xc0\x90\xec\xee\x56\xc9\xb5\x6b\x75\xfe\xd0\x24\x54\x6e\xcd\xb7\x5e\xe7\x0f\x0d\x06\x9c\x46\xb3\x17\x0b\xf7\xdf\x64\x81\xef\x08\x70\x1a\xd3\x0a\x8b\x0a\x40\xe9\xd7\x66\xca\xd0\xb4\x55\x88\xb0\x3b\x2a\x38\xab\xf5\xf1\x03\xf2\x19\x2d\x99\x04\x01\x32\xf8\x82\x48\xf4\xdb\xc3\x1f\x4f\xaf\x20\x69\xe9\xc8\xb2\xe5\xdb\xf1\xb5\x12\xf8\x01\x56\xc6\x10\xbc\x6e\x1f\xf7\x1b\x72\x63\xd7\xdb\x05\xf4\x13\x37\x17\x7a\x6c\x75\xab\x5a\x5c\x01\xf5\x73\x51\xb5\xfa\x2e\xdc\xd9\xce\xce\xef\x03\x4f\xf1\xe4\xe5\x74\x81\x5b\xe2\xef\xd7\x34\xea\xb8\xe6\x38\xa8\x67\xc1\x7e\x5d\xa3\x21\x8f\xae\xf1\xb0\x81\x84\x72\x4d\xd1\x39\x90\x9e\x98\x32\xcc\xc3\xb1\x77\x71\x1c\x3c\x03\x4a\x27\x98\xe4\x6f\x57\x93\x74\xcd\xc3\x08\x35\x5a\x76\xee\xc3\x8f\x38\x0c\xf9\x8e\x41\x84\x23\x3a\xcf\xae\x67\xbc\x24\xdb\x57\x15\x4a\xdb\xe7\x97\xb6\xcd\x20\xf1\x89\x32\x7b\xeb\x98\xd2\xb9\x50\x90\xc4\xe4\xf8\xc9\x62\x41\xca\x36\x42\xe5\xba\x98\x19\x30\xd0\xa8\xf7\x3a\x8c\x0a\xcc\x4a\xaa\xf7\x8a\x49\x05\x30\xaf\xd7\x87\xcc\xea\xff\xae\x41\x11\xd6\x2c\xf5\x1f\x5e\x46\x30\xaf\x01\xc4\x7a\x4d\xdd\x1e\x85\x55\x7b\x2d\x61\x02\xa8\xa4\x25\x41\x53\x52\xf0\x9a\x00\x76\xb8\xe1\xcc\xe8\xe3\x8e\x52\xc1\x27\x90\x98\xc8\xb1\x19\xda\xb6\x5d\x0a\x1c\xa1\xf6\x42\x77\xc7\x48\x7a\xae\x7d\x01\x68\x31\xbd\xd6\x54\x74\xcd\xeb\x79\x34\xb0\x0d\xbf\x32\x88\x33\x84\xbb\xa2\x9d\x7a\x04\xdb\xf6\xe7\x73\x92\x69\xba\xa5\x1a\x93\x3b\x0a\xf4\x03\x27\x58\x4a\x3a\x67\xe3\x86\x97\x63\xdd\xec\xc9\x6f\xf4\x7f\xb7\x3e\x4a\x91\x02\x40\xb7\x75\x4d\x2a\x90\xcc\xcf\x7d\x7e\x5c\xbb\x66\x4f\x4b\xf7\x93\x39\x44\xce\x3a\x83\xfc\x82\x95\x85\x9b\x51\x65\xd6\x2b\x66\x99\xae\x37\xb4\x63\x3c\xae\xe6\x7d\x07\x12\x55\x78\x4a\x2a\xf9\xa9\xed\x02\x18\x87\x98\x1e\x6c\x99\x80\xe5\xae\x1d\xbc\x71\xb7\x44\x6c\x92\x88\x70\xa7\xab\x44\x87\xab\x49\x74\xcc\x30\xcf\x15\xa5\x6f\xa7\x48\xfa\x3f\xbe\x65\x97\xd3\x76\xf8\xb5\x77\x75\xea\x3d\xf4\xe1\x7a\x0d\x24\x23\x03\x20\xc8\xd6\x9b\x98\xd7\x36\xff\x9b\x95\x81\x16\x02\xd2\xd0\x04\xd0\x04\xd1\x33\x0d\x59\xd2\xb4\xe3\xf1\x86\xbc\xd0\xed\x2f\x21\x3b\x82\x55\x4f\x0b\x14\xc8\x35\x77\xc0\x8c\x57\x15\xbf\x07\xfe\x1b\xd3\x87\xc0\xfd\xb9\x3d\x8f\xcb\x58\xae\x54\xa0\xeb\xd7\x79\xce\x37\x02\xfb\xde\x51\xee\xfe\x9b\x84\x5d\xa8\x00\x7a\xf1\x3a\xfe\x8f\x2f\x26\x67\xf1\x7f\xfc\x83\x24\x62\x5b\xaf\xa2\xfd\x73\x41\x24\x6f\x45\xb1\x75\x3e\xa7\xfd\xf3\xd5\xd5\xc3\x4d\x73\x2a\x6a\x2e\x26\xa6\x86\x78\x9e\x97\x4a\xf2\x4e\x6f\x3f\xb7\x25\x32\xbd\x13\x8a\xd4\x67\xed\xe7\x4c\xbe\x11\xbc\xdd\xd6\x8a\xfb\xf8\xcb\xce\x16\x98\xb9\xfc\x82\x4c\x23\x5f\xca\x42\x55\xb1\xd3\xb8\xc0\x82\xd8\xda\xa4\x5a\xb9\x94\x0d\x2e\x32\xcd\x9e\x2f\x1b\x9a\xf1\x75\x19\xd7\x43\xb6\x4d\x53\x91\x9a\x30\x85\x2b\x78\x6d\xae\x8d\xb8\xf6\xde\x94\xc5\xee\xae\x9c\x9f\xfe\xe3\xe7\xa7\x39\x9d\x1f\x6f\x22\xc7\x59\xfd\x54\x0b\xe9\x27\xf7\xe3\x2d\x14\xb8\xc1\x53\x5a\x51\xad\xfa\x3c\xc5\xfb\x5d\x78\xfd\x8a\x73\xf5\xbd\x87\x05\x3e\x45\x4b\x8d\xa0\x77\xb4\x22\xf3\xad\x43\xab\x9f\xb7\x9d\xf4\x45\x3a\x71\x4d\x9c\xcb\x02\x57\x31\xa9\x31\x9f\x39\x12\x5e\x40\x5c\xe7\x49\x16\x24\x4d\xf4\x7c\xc6\xcb\xb7\x17\x44\xd1\x0a\x7c\x2c\x4e\x31\xc2\xa9\x13\x8f\x2a\x8c\x43\xd3\xa4\x3b\x2c\x1f\xab\x2e\x6f\xcb\x9c\xb2\x39\xea\xd5\x31\x6c\x85\x20\x4c\x55\xcb\x20\xee\x0a\xbc\x1c\x46\xf1\x06\xa5\x18\xf4\x72\xab\x5c\xc6\xb8\xf3\x4e\xbd\xbd\x65\x29\x3f\x6a\xbc\xd4\xda\x68\xe0\xce\x99\xb5\xc0\x35\x03\x06\x80\xa9\x38\x0b\x70\xab\x28\xe2\xb2\x0d\x85\x86\x78\x43\x58\xb7\x85\x4f\xac\x7b\x75\xac\xb7\x76\xaf\xf4\x90\xb1\x4e\x8f\xeb\xf2\x37\x4d\x85\xd5\x8c\x8b\x7a\xec\xbc\x28\xe3\x9e\xe5\x1a\xd1\xad\x33\x48\x83\xf7\x90\x10\x43\xfb\x64\xaa\xb3\xb3\xb2\x22\x81\x55\xea\x17\x80\x95\x26\xf6\x89\x5a\x26\x48\xc1\xe7\x0c\x0a\x01\xd8\xdf\x82\xbd\xe5\x9d\x46\x58\x6a\x8b\x10\xb1\xb6\xaa\xb6\xee\x5b\xa4\x2d\xcb\xef\x88\x58\x10\xbc\xe5\x29\x4c\xdb\xe0\x1f\x6c\x9b\x48\x90\x46\x10\x09\x13\x6a\x22\xf0\x46\xc7\xf7\x9d\x42\x58\x4a\x5e\x00\xa9\xb1\xc9\x31\x74\x74\x63\x18\x2c\xcd\x19\x17\x08\xa3\x39\xbd\x23\x0c\x5d\x99\xdd\x70\x56\xe1\xed\x69\xb6\x02\xb7\x9d\xf3\xd0\xe3\x56\x71\x9f\x7f\x8a\xb0\x42\xb8\xac\x29\x90\x3c\x18\xe2\x02\xeb\xd5\x0c\x5b\x0d\xbe\xa2\x77\xa9\xe0\x90\x8d\x88\x2e\xb6\xcd\x4f\xfd\xac\xf7\x42\x52\xa6\xc3\x11\xf8\xe9\x02\x0b\xd1\xe1\x27\x7c\xed\x74\x54\x40\xe8\xdd\x55\x97\x89\x98\x9e\xcf\xe9\x90\xe5\xd7\xd0\xd7\xc0\xa6\x46\xad\x6f\x6b\x81\xef\x0c\xda\xa2\x5b\xe2\x4a\xab\x19\xdb\xaa\x91\x92\x98\x1a\xf0\xbd\x7e\x99\xbc\x43\x17\x10\x01\x3e\x5a\xf0\xac\x75\xd1\x91\x09\x2f\xaf\x1b\x52\x8c\xba\x2d\xe8\x16\xdc\x11\x75\x38\x0e\xb1\x2d\xfb\x13\x48\x41\xe3\x51\x11\xc6\xc9\x5c\xea\xdd\x1a\x76\x32\x84\xbd\x50\xd5\x63\x25\x01\xbb\xbe\x93\x17\x06\x2b\xf1\x2f\x22\xb6\xce\x4c\xda\xe0\xcd\x9b\x53\x75\x7c\xfb\x27\x70\xe5\x11\xb6\xc0\xac\x00\x4d\x5e\x9e\xdc\x92\x46\x9e\x48\x3a\x37\x9e\xbb\x3f\xfe\xe9\x4f\xe0\xc6\x73\x8b\x73\x72\x75\x7e\xfa\xfa\xfd\xf9\x71\xbd\x9d\x5a\xb6\x53\x9f\x5e\x83\x95\x22\x82\x7d\x87\xfe\xe7\xf0\xef\xbf\xfb\x75\x7c\xf4\xe7\xc3\xc3\x9f\x5e\x8e\xff\xf3\xe7\xdf\x1d\xfe\xfd\x18\xfe\xf1\x1f\x47\x7f\x3e\xfa\xd5\xfd\xf0\xbb\xa3\xa3\xc3\xc3\x9f\xfe\xf2\xfe\xcd\xcd\xe4\xfc\x67\x7a\xf4\xeb\x4f\xac\xad\x6f\xcd\x4f\xbf\x1e\xfe\x44\xce\x7f\xfe\xcc\x97\x1c\x1d\xfd\xf9\xb7\x5b\x76\x34\x92\xd3\x33\x95\xc7\x33\x89\xbb\x33\x23\x5f\x67\x23\x08\xa9\xe1\x06\x89\x21\x25\x48\xbb\x80\x26\x2b\x6d\x3b\x4d\xcb\xfe\xa4\xef\x15\xd7\x3d\x36\xd7\x57\x8d\x34\xd7\x4f\xc5\xef\x81\x18\x86\x72\xad\x38\x6f\x1f\xb0\x02\x35\xee\x92\xdc\x11\x31\x72\x7d\x78\xa7\x5f\x39\x89\x7c\x63\x88\x98\xd8\xf4\xbe\x48\xe6\xbd\xc8\x0d\xe2\xe6\xe5\x39\x57\xf2\x06\x88\xee\xec\x68\x41\x70\x1f\xa3\x1f\xb1\xa0\xbc\x95\x56\x43\x46\xda\x08\xe7\x0c\x94\x0c\x43\xa4\xe0\x2f\x7b\x88\xdb\x98\xac\x8b\x6d\x85\x8c\x6b\xd2\x33\x17\x97\x96\x85\xca\x4f\xfd\xa9\xbf\x24\xcf\x36\xdf\xda\x74\x5b\x13\xb1\x11\xe4\xce\x0d\x43\x38\x2a\x22\xa2\x4c\xc9\x0e\x3f\x2a\x63\x11\x6c\xbc\xa2\x9d\x42\xb3\xad\xb3\x20\x98\x32\x68\xd4\x8d\x11\x2e\xb4\x98\xd0\x2d\x14\x77\xa2\x73\x47\x28\x06\xeb\x66\x9c\xf6\xc1\xa7\x71\xc7\x2c\x5e\x38\xc6\xb2\xf5\x35\xab\xb3\xf1\x9c\xfb\xff\x62\xd6\x43\x5a\xfa\xc8\x7f\xc7\x0c\xeb\xa7\x11\xbd\x30\x07\x02\xae\xfa\x71\x21\xa8\xa2\x05\xae\x5e\x44\x00\x6c\xdd\x8b\x8a\xaa\xd5\x06\x57\xf8\x2e\x41\x90\xba\xe7\xa6\x4f\xb8\x42\xb7\x64\x79\xcf\x45\xe9\xb4\xbf\x10\x6f\xbb\x6d\x28\x5b\x6f\x0c\xa9\xdc\x70\x00\xaf\xaf\x45\xb2\x89\xf4\x88\x9a\x08\x34\x25\x0e\x9c\xb6\xf2\xe5\xe5\x31\x3a\x65\x4b\xa3\x78\x45\xd8\xff\x3e\xf0\x12\xd4\x92\x05\xed\xd6\x58\x22\xbd\xd3\x60\xb5\x1e\xd7\x37\xac\xa2\x8a\xca\x6d\x46\x16\x69\x93\xc7\x0b\x1e\xa7\xb7\x3a\x68\x11\x17\x96\xf5\x16\x04\x92\x30\x1c\xc1\xdb\x42\x88\xed\xcb\x9e\xe5\xb6\xd0\x5a\x3f\x65\x44\xca\x37\x7a\xc3\xee\xee\xcc\x60\x50\xc0\x6d\x5f\x80\x27\xb7\x63\x97\x22\x5a\x32\x99\x8c\x3f\xad\x12\xf0\xb2\xfb\xe6\xb6\x4b\x7a\xea\xa0\x32\x60\xed\x18\x06\x6b\xdd\x34\x55\x32\x8c\xbf\x9a\x38\xa9\xfe\xc6\xe9\xe5\xb6\x51\x3a\x4b\x91\x65\x54\x68\xd9\x8d\xb1\xab\x2e\xda\x1f\x25\xd8\x62\x96\xd6\x88\xfc\xb3\xc5\x15\x00\x2f\x6f\x44\x4b\xb6\x2d\x4c\x1c\x65\x70\x10\x75\xcf\xc5\xed\xc9\xb7\x7f\x7a\x09\x36\x87\xef\xdd\x78\xbe\xf5\x15\x15\x9b\x2e\x1e\x95\x28\xbe\x52\x3b\xbd\xbc\x0a\x37\xb2\x5b\x4b\xe7\xd0\xb0\x90\x5a\x53\xd0\x43\xef\x00\xbf\x40\x51\x50\x85\xa8\xb4\xf0\xf8\x84\xf0\x71\xd7\xdd\x9b\x65\xb3\xbd\x92\x14\x9f\xcb\xdd\x6b\x37\x19\x33\x7a\x16\xbe\xcd\xac\x8a\x34\x4b\xe2\xdb\x09\x90\x0f\x07\x32\xf8\x18\x18\x76\x40\x9a\x03\x22\x07\x6e\x98\x65\x93\xc0\x26\x94\x05\x10\x19\x09\x37\x71\x0e\x36\x20\xfd\x78\x56\x99\x7b\xd5\x6b\xd9\xde\xa4\x4e\x2d\x58\xf9\xa5\x2f\xa0\x61\x29\xa3\xb6\x55\x4f\x0c\x89\x28\xd4\xb8\xf4\x05\xd3\xac\xf3\x07\x70\x5d\x95\x36\xe3\x4a\x43\x86\x8a\x85\x32\x0a\x73\x2c\xbe\xa0\xa3\x91\x29\x09\xc2\x77\x98\x56\x00\xa6\x07\x57\x12\x97\x3d\x6c\x8d\x19\x6c\xc1\x99\x6c\x6b\xe8\xd1\xb6\xa1\xb4\xe9\xd2\x6a\x13\x31\xfe\x4d\x6a\x38\x22\xab\x66\xf1\x71\x36\xf9\xed\x55\xb3\xd7\x4b\x86\x6b\x5a\xb8\x55\x3c\x35\xcb\x06\x3c\x94\x3d\xf6\xf9\x78\xaf\xac\xee\x7e\x5d\xb7\x4a\x4f\x6d\x8c\x72\xb2\x8b\x9b\x21\x22\xec\x03\x97\x49\x70\x14\xc2\x94\x0c\xf2\x80\x0b\x55\x2d\x21\xa2\xd2\xfb\xd2\x08\x11\x0a\x69\xab\x06\xcd\x5e\x6d\x4f\x98\xc2\x85\xdd\x59\x46\x9f\xed\xbd\xfd\x86\xd4\x0d\x90\x21\x5a\x05\x5e\x1a\xd6\x60\xd5\x0a\xe6\x78\x50\x57\xfe\x62\xeb\xe6\x03\x4c\x63\x44\x1a\xda\x85\x42\xb8\x2c\x25\xc2\xbe\x16\x13\x55\x46\xf1\x6e\x19\xfd\x67\x4b\xaa\x25\xa2\x25\x61\xaa\xc3\xbd\xf5\xa7\xd8\xd2\x45\x59\xf9\xb0\xbd\x58\x3f\xeb\xce\xb7\x51\xf7\x09\x29\x5d\x01\x23\xeb\x4f\x7e\x64\x4d\x8d\xfb\x17\xcc\x04\xad\xab\x47\x98\x09\x3b\xd2\x09\x22\xc8\x5d\x52\x54\x81\x58\x42\x83\x1c\x59\x23\x10\x86\xdd\xbc\x91\x0c\x07\xb5\x89\x57\x15\xab\x5b\x29\x02\x3f\x69\x9e\x8e\x72\x41\x5f\x80\xe8\xf5\xe5\xf5\x2f\xef\x4e\xff\xfb\xfc\xdd\xb3\x13\x49\xf6\x54\x85\xed\xbd\x1a\xe6\xc9\xb1\x04\x57\xab\x1d\x59\x0d\x8b\xaf\xc8\x1f\x67\x81\x5b\x7d\x4e\xc6\x32\x11\x31\x87\x1a\x33\xd5\xd7\x5d\x42\x40\xd4\xbb\xce\x03\xe1\xcd\x67\x1b\x86\xa4\xaf\xe2\x8d\x72\xd7\x57\x14\x8b\x6a\xd7\xc4\xb5\x76\xbb\x77\xc2\x91\xec\xc5\x1e\xea\x4d\xed\xc7\xf7\x92\xfb\x6a\x54\xa3\xeb\xfb\x30\xeb\x9e\x02\x92\x6d\x7f\x3b\x07\x89\x65\xc0\x2a\x64\x82\xaf\x18\x31\x72\xbf\xaa\x2e\x98\x9b\x5c\xff\x45\xec\x9e\x9a\xf2\x96\x95\xe6\x76\xb3\x43\x30\xbe\xef\x30\x23\xa8\x24\x15\x51\xce\x73\x95\xa6\x20\x20\xa7\x66\x03\x51\x2c\xf8\xbc\xe0\xdd\x46\x71\x87\x7a\x69\xee\x0c\x79\x89\xac\x3f\x19\x21\x5c\x71\x36\xb7\xec\xc4\x51\xcd\x76\x6c\x01\x3e\x8a\x30\x5a\x9b\x6c\x28\xb9\x8b\xed\x35\x61\xfa\x62\x75\x9a\xf4\xcd\x1a\x2e\x97\x6e\x53\x90\x82\x8b\xd2\xf8\x74\xf4\xc4\x1b\xf7\xcd\x71\xef\xc4\x5d\xc3\x67\x44\x46\x6f\xac\x8d\x7a\x37\xcc\x2f\xe3\x50\xd4\x63\x1e\xf8\xc8\xc0\xf0\x31\x9a\x4e\x54\x73\x2b\xa1\xf2\x9e\x28\x0f\xb8\x23\x04\xaf\x50\x53\x61\x46\x6c\x35\x11\xef\x80\xcd\x32\xcd\x83\x5c\xff\xd4\xf3\x15\x24\x65\x7a\x13\x7f\x17\x8e\x0f\x4f\xd9\x6c\x0a\x23\x60\xc3\xc3\xc2\x67\xe8\x6c\xf2\x03\x6c\x93\xf7\xa4\xe6\x62\xd9\x75\xd2\xab\xe8\xfa\x14\xe0\xad\x85\xf5\xe6\x9c\x1e\x6d\x2e\x59\x88\xa0\x73\x10\x2f\xcd\xb1\xb3\x28\x1d\xdd\x93\x77\xb4\xa6\x0a\x72\xcd\xb6\x8d\x0b\x15\x4d\xfb\x62\x84\x5e\xd4\x30\x14\x88\x2c\xa1\x17\x8b\x76\x4e\x1a\x3c\x27\x72\xfc\xa2\x2f\x9e\x25\x32\x34\x3d\x2b\xde\x1f\x2c\x88\x09\x7e\x38\x24\x63\x8a\xe3\xc0\x04\x5b\xf5\x4f\x8c\x8c\xe7\x02\x43\xf8\xc6\x89\x13\x6e\x4a\xb7\xd8\x2e\xe1\xc0\x6d\x11\x25\xbd\xb5\x6d\x20\x60\x9a\x47\xc6\xc7\xa4\x27\xd6\xbf\x5e\x2e\xb0\x00\xfb\xba\xd6\x57\x52\x7f\x75\x70\x94\x1a\xb0\xad\x57\x47\xdb\xb7\xef\xc8\x1d\xa9\xba\x2d\x69\xfd\x33\x5b\x36\xbc\x7d\x2d\xc1\x68\x43\x35\xde\x6e\x2c\x22\x5c\x9c\x28\x8b\xba\x69\xf7\xb1\x16\x53\x9d\x72\x29\xf5\x51\xf7\x67\x7b\xd4\x4b\x82\x0e\xd3\x9b\xcc\x1f\xc7\x94\x56\x02\xef\x83\x3e\x3c\x1d\xef\x7b\xc8\xc3\x1f\x75\xc3\x05\x27\xa9\x24\x0d\x61\xa5\x2b\xca\x1c\xf1\xae\x27\xf2\x12\xa2\x8f\x78\x0a\xb5\xb4\x2b\x30\x03\x39\xe3\x30\x7e\xfa\x6c\x77\xa7\x6f\xfb\x2b\x34\x85\x99\x38\x9a\x97\xb8\xb7\x29\x1f\x75\x11\x6a\x2d\x84\x30\x25\x96\x16\xf7\x79\xad\x37\x56\x5f\xba\xc6\xab\x0c\xd1\x84\xc4\x69\x74\xc4\xd1\x54\xc2\xa9\x44\xc2\x29\x34\x9a\xd9\x6a\x7c\x7e\x84\xc9\xbd\xb7\xd8\x60\x09\xac\x8b\x91\xd8\xda\x38\xc8\xa2\x90\x27\xbc\x44\xf7\x00\x26\xe8\xd3\x2c\x98\x32\xc2\x17\xba\x5b\xb7\x5d\x79\x34\x77\x8f\xba\x18\x48\x74\xd3\xd6\x8f\x96\xcc\xa4\x9d\x81\x69\xca\xa2\x97\x77\xbd\x11\xac\x7a\xd6\xf3\x56\x14\x0b\x2e\x09\xb3\x18\x78\xe1\xbe\xc0\xfa\x71\xe7\xd2\xdc\x83\x49\x75\xa7\x2d\xdd\x07\xb9\x23\x62\xa9\x20\x00\xea\xe9\x8f\xad\xdf\x53\xae\x44\xbf\x02\x8c\x73\x74\xc3\x20\xb3\x6d\x52\x00\xe0\x5b\x66\xce\xe7\x0a\x23\xdd\xc9\x8e\xc8\xcb\xcf\x14\x29\xda\xf2\xd1\x32\x41\x81\xa5\x9d\xa8\x48\xd6\xc2\xe8\x38\xf5\x81\x99\x12\x3f\x40\x41\xe1\xce\x34\x2a\x78\xdd\xb4\x2a\x88\xcd\xba\xd8\x6d\xcc\xea\x27\x51\x5c\xd4\x98\xe1\x39\x19\xfb\x8e\x8c\x83\x3c\xa4\x48\x15\x22\xf2\x42\xcd\x01\x91\x47\x5f\x12\x4c\x1e\xc5\x43\xe5\x51\x06\xb8\x3c\x4a\x85\xcc\xa3\xbc\xb0\x79\xd4\xdd\x4a\x3b\x39\xba\xde\x53\xb0\x72\x78\x6d\x35\xf0\x8f\x1d\x5e\xa7\x09\xc6\x9c\x5e\xa0\x1a\xb6\x2d\x53\x89\x78\x4d\x95\x83\xe5\x05\x7a\x02\x70\x8d\x86\xe4\xa6\x56\xd0\x00\x28\x12\xc3\xfd\x49\x1e\xfe\x7f\xf6\xfe\x86\xbb\x8d\xdb\xda\x17\x87\xbf\x0a\x96\x72\xd7\xb2\x94\x92\xb4\x9d\xa4\x2f\xc7\xb7\x4f\xbb\x14\x49\x6e\x75\x13\xdb\x3a\x96\x92\xac\x3e\x4d\xef\x09\x38\x03\x92\x38\x9a\x01\x26\x00\x46\x32\x7b\x7b\xbe\xfb\x7f\x61\x6f\x00\x83\x21\x29\xd9\xc2\x40\x22\xe5\x6a\xba\x56\x63\x91\xc3\xc1\x1e\x60\x63\x63\xbf\xfe\x76\x53\xf1\x82\x9b\x08\xf9\xb9\x4c\x31\xb7\x22\xf0\x5a\x69\x4d\x70\x5e\xfb\xea\x78\xe8\x1a\xe9\xed\x3b\x97\x92\x1e\x68\x2f\x10\x59\x8d\x7d\x28\x18\xf3\x9e\x96\x27\x69\xf6\x24\xcd\x3e\xf1\xfa\xdc\xa4\x99\xeb\xe2\xfc\xf0\x15\x40\xef\x71\x60\xd2\x74\x15\x3f\x6b\x1d\x66\x03\x8a\x6b\x42\x34\xdf\xd5\xfa\x1c\x42\x0f\xfa\x11\x79\x27\x5e\x63\x6f\xd0\x11\x96\xff\x4c\xc8\xa9\x20\x5a\xd6\xae\x8f\xe9\x07\xa3\x47\xa8\xf1\x52\xa2\xdb\xa9\x66\x4e\xdf\x95\x9a\xf9\x42\x61\x57\x6d\xdd\x30\x85\xa2\x2f\xb1\x54\xc8\x4a\x2b\x24\xea\x9e\x21\xc2\xae\xa5\xba\xac\x24\x2d\xf5\xf3\x46\xe2\xff\x8d\x03\xc4\xde\xf3\x2f\xdc\xba\x8f\x9b\xbb\x43\x88\xa4\xa6\x9b\x47\x35\x98\x0f\x5d\xa4\xf1\x7e\x65\xec\x5e\x06\x6a\xaf\x82\xb5\x1f\x33\x06\x24\x37\x4c\xa2\x26\x73\x25\xdb\xc6\x47\x03\x3b\xb4\x60\x6b\x8a\xdf\x35\x6b\x48\xda\xc9\x88\x62\xb7\x58\x6e\xd0\x27\x24\x98\xf3\xe0\x79\x60\x9d\xdd\x09\x16\xa5\xd6\xa3\x8d\x98\xed\xaa\x15\x09\xa5\x0e\x58\xf7\x2a\x55\x07\x2c\xc9\xc8\x5e\xc5\xe6\xb4\x58\xee\xf5\xa9\xda\x80\x9f\xea\x3c\xe0\xf6\xf8\xb5\xc7\x3a\x52\xe7\x1b\xd2\xde\xd5\x83\x0f\x5d\x6e\xe1\xe8\xc6\xe4\x5f\xcc\x23\xd3\xee\xf5\x7d\xa9\x85\x63\x25\x57\xf2\x7f\x67\xe7\x44\x72\x75\xee\x6f\xff\xf0\xdb\xb1\x07\x3d\x80\xd7\x7c\x88\x7d\xd3\x83\xe8\xdc\x5e\x95\x46\x8f\xdb\xa6\x8c\x94\x5c\x37\xc0\x99\xe0\xea\xee\x4a\x1d\x02\xb9\xf9\x4a\x6e\x36\x0f\xe9\x99\x21\x71\xc0\x61\xab\xc1\xc5\xfc\xc1\xab\x66\xce\xfb\x43\xbb\x7d\x27\x1b\xfa\x6b\xdb\xf5\xa1\x75\x87\x15\x2a\xdb\xd1\x02\xba\x49\x84\xc6\xac\x11\x36\x6c\xe2\xe1\x6a\x59\x63\x9d\x1a\xd0\xab\x3b\x09\x12\x96\x4e\x1b\xba\xf4\x12\xb5\xff\x12\x25\x54\xbf\x30\xdf\x79\xeb\x8e\x54\x74\x88\xb6\x41\x04\x5a\x2d\xb4\x6e\xe0\x90\xf5\xdf\x26\xa7\xb6\xae\xce\xf7\x6a\x20\x83\x1a\xac\x27\x81\x3c\x08\x07\x4b\x81\xdd\x57\x20\x4d\xa4\x96\x57\x80\x09\x6a\x75\x8a\x99\x61\xea\x9a\xaa\xf2\x8e\x67\xfe\x56\xab\x6a\xfa\xaf\x0f\xdc\xd6\x61\x81\xc0\xc1\x79\x86\x18\xa8\xf3\x96\xaa\x12\xca\xa8\x3a\x9e\x78\x4a\xa4\xdd\x74\x6d\x3d\x91\xd6\x15\x4b\x47\x02\xe0\xee\xa1\x64\x7f\x9d\x50\xab\x07\xf5\x9f\x84\xb1\x12\x28\x6b\x5b\x49\xc7\x82\xc2\xe8\xa7\x74\x99\x3b\xb9\x88\x57\xf0\xc1\x1e\xf4\xac\xe9\x0f\x4d\x16\xb2\x2a\x41\x59\x1d\x57\xec\x8a\x55\x81\x34\x2b\x70\x15\x9f\xb6\xc6\xe1\x2c\x15\xb2\xae\x5d\xc9\xbb\x6b\x3e\x8f\xe5\xf1\x77\x36\x76\x10\x16\x90\x56\xaf\x7a\x10\x0b\x70\xba\x4c\x2c\x79\x0c\x38\x23\x7e\x4b\x30\x21\xbd\x52\xe0\x8e\x41\x39\x23\xcc\xb2\x69\x02\xfb\x6d\x21\x63\x62\x05\x74\x71\x1b\xce\xc5\x15\x12\x7c\xbc\xeb\xd0\x7d\x4c\x24\xa2\x35\xda\xb5\x68\x35\x5b\x6b\x2d\xd5\xc1\x69\x25\xe6\xdf\xbf\x95\x50\x9b\x0e\x8d\xc2\x43\xc0\xb3\x08\xcd\x10\xec\xb1\x0b\x85\xbb\x10\x6b\x95\x7a\x22\x5c\x0a\x71\x32\xac\xda\x20\xe7\xd9\x90\xc8\x3a\x3a\x81\xee\xfc\xc3\x61\x51\xf5\x4a\x16\xb4\x02\x04\xe2\x54\x16\x23\xd9\x82\xaa\xab\xb4\x44\xd8\x09\xd4\xbe\x26\x7c\x56\x49\x5a\x7a\x64\x75\xe6\x9b\x28\x50\xb3\x62\x7f\xa7\xc6\x22\x11\xbb\x04\x47\xf2\x25\x1f\x8d\x62\x11\x84\x55\x6f\x60\x09\x7d\x4b\x52\x07\x7b\xd3\x4f\x23\x70\x6f\x16\x43\x0b\x3a\x52\x06\x0d\xe0\x71\xc7\x66\x20\x8e\x43\x17\x4c\x2b\x2b\xb9\x26\x7b\xdf\xfb\x49\xdf\x1b\xd2\x1b\x3b\xd9\x71\x69\x12\x6b\x89\x73\xf1\x1c\xce\x43\xe0\x33\xf4\x5f\x5c\x72\x3b\x53\xb3\x4e\xc8\x79\x96\x08\x50\x74\x4d\x53\xf1\x74\x2e\xfb\x91\x56\xbc\x0c\x92\x93\xaa\x01\xcd\x61\xc3\xf2\x91\x71\xb4\x49\x1a\xc5\xc6\xeb\x1b\x25\x3d\xe5\xc0\x79\x7c\xbc\xc3\x72\xfc\xd1\xae\x3a\x03\x19\x97\x90\x1f\x04\xec\x39\xc1\x4a\xab\x6d\xc9\x6e\x29\x98\x98\x49\x85\xce\x98\x07\x67\x58\x87\xab\xbd\x8d\x63\xf8\x30\xe0\xb7\xc4\xa0\xcf\xe8\x82\x74\x79\x86\xc0\x93\xe8\xc1\xec\xbb\xcd\xbb\x74\xd6\xbb\x8f\x0b\x2d\x04\x5c\x43\x34\x3b\x73\x2e\xde\x0f\x0c\xf0\x9d\xeb\xe8\x62\x7c\x05\x02\xa2\x08\x5e\xdb\x41\x17\xbc\x41\x21\x46\x8d\xfb\x79\x8a\x70\x80\xd2\x12\xfb\xc0\xd0\xb3\xb2\x91\xe5\xab\x94\x7c\xc4\x97\x58\x99\x22\xaf\x01\xab\xf2\x2f\xa7\xc7\x61\x2f\xdb\xa7\xbe\x3e\x4f\x41\xfb\xb6\xd7\x57\xf8\x5c\xcd\xcc\x9c\x97\x64\xea\x9a\x8a\x32\x43\xf6\x05\xbb\x26\x76\x0f\x68\x57\xf9\x13\x30\x3f\xdc\x6c\xfa\xf1\xc3\xeb\x39\x22\x0e\x12\xa8\xf8\xda\xd5\xdd\x30\xe5\x21\xa6\xa6\xdc\xb5\x48\x7f\xf7\xfe\x99\x07\xea\xbc\x1e\xab\xeb\xf1\x78\x3c\x4e\x99\x3f\xef\x13\x1e\xf5\x56\x3e\x78\x59\x6a\x59\xf2\xd9\x72\x65\xfd\xed\x79\xd3\x91\x04\xba\x37\x15\x4b\xf7\xfe\x8f\x48\x17\x4c\x8d\xec\x45\xe8\x55\xbf\xfb\x26\x4d\xd4\xc4\x10\xfe\xdb\x10\x3b\x1b\xc8\x08\x40\x11\x53\xb6\xa0\x57\xdc\x9a\x00\x33\xdc\xff\x76\x67\xdd\xb4\xfa\x5e\xa3\x49\x96\x05\x0e\x34\x02\x01\xa5\xd8\x87\x46\x6a\xd8\x51\x90\x96\x78\x26\xa1\xf0\xac\x8f\x18\x8b\x7e\xb6\xa6\x81\x56\x8b\x09\x03\xf6\x84\x9e\x8b\xf1\x60\xfd\x83\x9f\x15\x32\xa5\x96\x88\xf0\xca\xfb\x2b\x0c\x9f\xd4\x1f\xf1\xd4\xed\x2a\x70\x99\x08\x49\xd8\x6c\xc6\x0a\x68\x64\xc4\x9a\x05\xab\x99\xa2\x55\x9f\x34\xdd\x16\x0b\x42\xf5\x2b\x6b\x81\x2b\xbb\x41\x51\x59\xad\xe9\x9d\xbb\x0c\x10\x07\xd4\x01\x36\x75\xc9\x93\x52\x3c\x51\xb5\x89\x80\xae\xf7\xde\x89\xf7\x52\x9a\x37\x5c\x83\xa6\xeb\x2a\x50\x30\xde\xb9\x37\xd9\xe0\xe3\xf7\xdf\x85\xac\xd6\xc7\x23\x28\x92\x94\x8a\x0e\xe3\x7d\x1b\x1b\xdc\x1e\x1b\xf6\x34\x0c\x11\x48\x97\xc2\xdc\x48\x2e\xcc\x5a\x33\x22\xab\xd7\x15\x09\x48\x5b\xf6\xfa\x41\x33\x1d\xe2\x74\x5e\x4f\x4c\x03\xc3\xc4\xeb\x0d\x5d\x86\xf2\x53\x87\xac\xbc\xe2\xa4\xc2\x38\xaa\xfb\x6e\x2a\xcd\x62\xcd\x8b\x95\xd6\xc9\xfa\x4c\x96\x2b\x0f\x1a\x75\xa0\x89\x7d\x90\xaf\xd5\x01\x0d\xa4\x67\x5b\x93\x92\x95\x4c\xdc\xb9\xff\x09\x09\xe0\x1c\xd4\x0c\xcb\xc5\xfe\x37\x3a\x4b\x61\x87\xbd\x95\x20\x87\xb6\xb1\xc7\x4e\x23\x08\x48\x98\xef\x78\x47\x81\x97\xc1\x6e\x3d\x0a\x80\x29\x52\x8c\x95\x94\x10\xe1\x4e\x5a\xd6\xd3\x99\xeb\xf9\xbf\xa6\xa6\x5d\x59\xc9\xec\x1b\xab\x43\x23\x52\x42\xbb\xc0\xb9\x91\x84\x09\xdd\x2a\xc7\x13\x77\x06\x42\xb5\x57\x29\x19\x86\xfc\xdc\xeb\xfc\x70\x7a\x4c\x5e\x90\x7d\x68\x15\x0c\x62\x7f\x46\x79\x15\x30\x9e\x56\x5b\xa3\x42\x83\x7b\xfb\x88\xc4\xd7\x0e\x29\x0b\x33\x5a\x69\x36\xb2\x67\x27\x1c\x8d\xee\xbd\xad\x0e\xe2\x55\xee\x86\x29\xc0\xa7\x4c\x4b\x5a\xfe\x1c\xc4\x4e\xea\xf6\x9d\x4a\x59\xb1\x3b\x27\x71\x84\x1e\x29\xdb\x3a\xe1\x7e\x78\x90\x13\x2e\x8e\x4b\xd8\xfd\xdb\x5f\x12\xdc\x72\x35\x33\xb4\xa4\x86\xba\x93\xcf\xdf\xf0\x6f\xcb\x88\x4f\xe7\xdf\xa7\x5d\x43\xce\x3f\xd7\x57\x6b\xdb\xb6\xe4\x06\x32\x82\x2d\xb9\x70\x2e\xa5\xb8\x85\xfd\xf9\x09\xdc\x8f\x7d\x56\x21\xdb\x00\xbd\xae\xde\xc3\x85\x56\x90\x8e\x8a\x6b\x13\xf1\xc2\xc0\xe8\x5a\x50\xdd\x37\xb7\x84\x2c\xfd\x89\x5d\xca\xb8\xfc\x3d\x10\x66\xf9\x50\x06\x32\xc2\xe9\xb7\x72\x5b\x1e\x2b\x0a\xfa\x57\x61\x08\xd4\x99\x50\xef\xed\xce\xd2\xfc\x8a\xed\x25\x15\xe8\x46\xbf\x27\x35\xa3\x42\x13\xc5\x60\xa6\xc1\x8a\x9f\xc1\x0c\xa3\xfb\x4a\x22\x2a\xee\x99\x2c\xc3\xbb\xae\x46\xf9\xbc\x1a\x91\xf2\xae\x08\xaf\x85\xa9\xb4\xba\x92\xd7\xb0\xbf\x2b\xaa\xe6\xde\x59\xa0\x47\x64\xda\x1a\xf4\x3b\x6a\x52\xf3\x0f\xd0\x00\x20\x74\x27\x83\xd9\x68\x45\xf4\xc1\x99\x2c\x75\x28\xee\x0f\x40\x3f\xce\x68\x96\x31\xf6\x0f\x38\xc5\x53\x26\xaf\xb7\x1c\x50\x5f\x01\x8e\x51\xc2\x2a\x3e\x87\x1e\xd6\xf1\x6c\x81\xf7\xed\x97\xb1\xf4\x89\xc5\xbf\x10\x57\x91\x01\xbf\x4f\x9e\xb3\x80\x28\xe0\x56\x47\xfb\x40\x18\x75\xe0\x9a\xf1\x6b\xbb\xf0\x6c\xf8\xb8\xb7\xb9\x12\xb7\x8c\x4b\xf0\x6a\xa4\xc6\xbe\xdd\x56\xb3\xdb\x38\x38\x02\x2c\x7c\x6c\xc9\x52\xa8\x38\xf1\xf3\xed\xe7\x9a\x42\x22\xe7\xd8\x28\xc6\xc8\x6b\x3e\x55\xcc\x8a\x1b\xc1\x2a\x18\x92\x9f\x1f\x9d\x9f\x76\x5c\x65\x3f\xb2\x73\x17\x7d\x98\x40\xc2\x35\xa4\x84\xdb\x67\x94\x8a\x5f\x31\x45\xec\x19\xd2\x42\xf5\xb7\x9f\x64\x2f\x11\xa6\xcb\xd0\x1c\xc0\xf5\x73\x84\xef\x81\x99\x30\x4f\xdf\xf9\x88\x79\x4a\x19\xc1\xd1\xf9\xe9\x31\x52\xc0\x85\x36\xd4\x6a\x79\xe4\x1d\xc0\x50\xc6\x93\x43\xc1\xbb\x42\x14\x1b\xc3\xd2\x57\xac\x24\xca\x4b\x82\xea\xce\xdd\x2e\xc8\xda\x66\x40\x1d\x20\xc2\x74\x05\x3f\x1c\x1c\xa5\x6e\x3a\xe0\xf6\x1e\xc2\x40\xd4\x83\x21\x69\x3b\xae\x3a\x91\x60\x65\x3f\x65\xb4\xd1\x0a\xf1\x03\x5c\x4e\x77\xa7\xa1\xe4\xfa\x36\x22\x40\x0e\xbe\x67\xb4\xfc\x49\x71\xc3\xde\x89\x82\x45\x32\x25\xd1\xb3\x17\x0b\x7d\x5f\x5f\x21\x63\x16\x19\x8a\xf5\x40\xe1\xf8\x44\x18\x99\x48\x26\x81\x33\xb3\x7f\x9e\x43\x2c\xc1\xc1\xa4\x3a\x6c\x84\x15\x55\x51\xaa\x4d\x0a\xa4\x3b\x9a\x62\xbc\x88\x94\x70\x5a\x4f\x64\xf6\x24\xa3\x93\x59\x2e\x9f\xa0\xf7\xd5\x06\x0d\x26\xee\x1d\xa5\x5d\xbb\x6d\x4c\x0c\x9d\x33\x43\xb4\x69\x8b\x4b\xfb\x16\x01\x92\xf4\xc8\x63\x64\x41\x9a\xeb\x23\x52\x5c\x93\x7c\x9b\xfd\x8e\xae\xdb\xb2\xfe\x3c\xe3\x15\xde\x06\x91\x51\x0c\x7f\x3d\x5e\x9a\xee\x7f\xe8\x27\xaa\xaf\x69\x47\x1e\x31\x0f\x21\xb4\x09\x25\x8a\x8a\x52\xd6\x6b\xf4\xd9\x9d\xc9\x68\xb1\x48\xa0\xa3\x33\x89\xee\x6a\x1f\xa6\x84\x64\x6e\xb0\x28\x07\xd8\x87\x29\x41\xe2\x15\x8b\xf2\x71\xdb\x87\x89\x79\x67\x03\x93\xc0\xd8\x15\xab\x32\x64\xe1\x00\x94\x95\x9d\x84\x20\xea\xe1\x03\x14\xf8\xab\x49\x0a\xbd\x2d\xb2\x95\xdc\x23\x25\xb3\xe4\xbb\xbd\x97\x98\x16\x49\xc3\x6b\xdb\x07\xef\xec\x5b\x67\xca\xb8\xba\x70\x09\x64\xdd\x5b\x43\x2a\xd5\xae\xbe\x75\x9b\xe4\x7d\x24\xab\x6f\xfd\x83\xc6\x8e\x61\xdd\x5b\x83\xa3\x6f\x17\xdf\xba\xdf\xeb\x7c\x5b\x67\xaf\xa3\xe2\x29\x4d\xb8\x77\x3d\xa5\x09\xdf\x77\x9a\x70\x04\xe6\x47\xc1\x8f\xd5\x4b\xdc\x7d\xac\xc9\xc2\x00\x40\x6f\x67\x91\x21\x34\x6f\x43\xcd\x62\x04\x8e\x3b\xc3\xaf\x3c\xe4\x2f\xb9\xc4\xb0\xdf\xb3\x5e\xeb\x5d\xbf\x11\xbb\x3c\x6a\x84\xfa\xcb\x94\x5b\xbc\x29\x9f\x18\xef\x79\xfb\xee\x22\x06\xfa\xa3\xbe\xeb\x5b\x72\xcf\x9e\x5d\x39\x01\xef\x27\xe7\x78\x75\x9d\xee\x2f\xe5\x38\xf1\x49\x9b\x33\x8e\x1f\x62\xbf\x7d\x5a\x16\xf2\x6a\x0e\x72\xa6\xc1\x57\x13\x92\xd7\x9f\x3e\x68\x85\x86\x1c\xf4\x51\x42\x30\xe4\x11\x6d\xc5\xd0\x3e\x0c\x05\xc7\x90\x93\xdc\x8b\xd6\x40\x43\x48\xae\xa0\xfb\x23\x44\x57\x21\x12\xcb\x05\x96\x62\xc5\x50\x41\x29\x66\xa8\x07\xac\x59\x53\xb9\xb0\xd3\x66\x4d\xd5\x12\x52\x9c\x20\x03\xc1\x65\xee\xed\xc7\x95\xd0\x07\x60\x07\xa7\x08\x92\x05\x23\xe7\x6b\xb3\xef\x3b\x16\x3b\x77\x5f\xec\x6d\x4c\x83\x69\x5d\x5f\x60\x3f\x84\x83\x81\x35\x4c\xd5\xae\x77\x17\x33\xae\x57\xab\x66\xce\x17\x1e\xe6\x27\x2d\x01\x5b\xa2\x3b\x99\xd1\xd2\xe7\xef\x62\xce\x79\xcd\xea\x29\xa6\x3d\xea\xf5\x4e\xeb\x21\xa9\xa3\xa6\xf3\x24\x19\xbf\xea\x4f\x11\x32\xc2\x25\x0a\x1c\xa6\x98\xfd\x14\x27\x56\xb6\xf3\xc5\x3a\x69\x29\x59\x2c\xb7\xbe\x0c\x44\xaa\xb4\xe9\x81\x5e\x20\x0e\x2f\xc4\xcd\x52\x91\x78\x6f\x5f\xe2\x47\xa4\x10\x3f\x30\x0a\xef\x50\xe8\xa5\x21\x61\xf5\x8c\x4d\x00\xc9\x2d\x2c\xb0\x0d\x61\x7e\x1c\x85\xe5\xd7\xeb\x4d\xb4\xcf\x9a\x41\x99\xbe\x96\x3b\xe3\x22\x4d\x05\xad\x0a\xe8\x6d\x9d\xc4\xbf\x1b\x42\xe0\x4c\xcd\x99\x0b\x7e\x9f\x1b\xc5\x0b\xb3\x39\x7f\xd8\xdd\x37\x20\x96\xb3\x7f\x58\x35\x0b\x7a\x40\x7e\xd0\x3e\x82\x8c\xdb\x27\x44\x5c\x3f\x49\xf0\x43\x9c\x07\x7d\xcd\xee\x00\x48\x8c\xda\x6c\x56\x73\xc0\xe2\x08\x10\x77\x5d\x6e\x3a\x78\x3f\x79\x00\x92\x7f\x44\xb2\x23\x4d\xfb\x59\xea\xc2\x54\x5b\x51\x79\xce\x71\x68\x28\x85\x27\x34\xe8\x3f\xa1\xa3\x50\xe9\x89\xeb\xe2\x79\xa1\xe9\x03\x04\x9f\x20\x31\xa0\x15\xa1\xad\x42\xca\xc1\xe1\x46\xd8\xbf\x29\x25\xe3\x80\xd4\x7c\xbe\x30\x21\xf7\xb2\xa2\xad\x28\x16\x8f\x88\x2b\xb6\x89\xeb\x8e\x2b\x1c\xb2\x94\x28\xb9\xb4\xd2\xbe\x22\x0d\x55\xb4\xb6\x6a\x97\xdb\xdf\x9a\x25\x45\x2e\x1e\x25\x8a\xbb\xfd\x29\x88\xe5\x84\xdf\xee\x0c\x02\xfc\xdb\xd0\x5c\xcc\x91\xb4\x84\xec\x95\xa4\x65\x24\x39\x50\xcd\x61\x46\xb3\xbc\xda\x8f\x10\x64\xdb\x95\x77\xcb\xaa\x22\x39\x49\xb2\xe5\x70\xf2\x4f\x48\x85\xd7\x39\x8a\x80\x68\x72\xff\x21\x65\xef\xbf\x71\x40\x98\xb4\x9f\x2f\xb9\x12\x89\x8d\x91\xf9\x12\x09\xf8\x48\xea\xf0\x76\x33\xd2\xd3\x4f\xa4\x2a\x2d\x2f\x73\x8b\x11\xda\x79\xad\xe9\x91\x62\xd0\xec\x94\x56\xe7\x0d\x2b\xb6\xe9\xc0\xfc\xcb\x9b\xf3\xc3\x3e\x35\x70\xce\xbb\xb6\x14\x0c\xbe\x27\xb4\xf4\xa5\x9f\xd7\x6c\xba\x90\xf2\x32\x71\xb0\xfd\x08\x91\x71\xd1\x4e\x27\x85\xac\x23\x94\xd3\xb1\xe6\x73\xfd\xdc\x09\x86\xb1\x9d\xa6\x03\xc2\x45\x05\xc7\xb5\xd7\x87\x98\x30\xde\x64\x19\xf0\xc2\xa4\x08\x6f\x0c\x0c\xe5\xa0\x37\x9d\xde\xb5\x3e\x25\x6f\x07\xa1\x5c\x0d\x3e\x52\xd6\x39\x26\xb5\xdb\xe7\x0a\xd7\xdc\xf0\xa6\x2b\x5d\x3b\x03\x1b\xac\xce\x1a\x06\x00\xb7\x32\x25\x2e\x66\x64\x4d\xd4\x6d\xee\x9e\xbf\x76\x64\xc4\xbe\x3b\x3e\x8b\xe5\x79\xe4\x57\x0e\xc5\x61\xcf\xec\x2f\x89\xfb\xe9\xb3\xe1\xad\x58\x0e\xab\x0a\xf5\x84\x33\x59\x3e\xd3\x71\x30\xb6\x03\x6d\x0b\xb9\x6f\x98\x18\xcf\xaf\x58\x8f\xfe\x54\x45\xd0\x5e\xfb\x3c\xa4\x10\x47\xfd\xff\x1d\x54\x5c\xcd\x3f\x58\xda\xe2\xb1\x22\xfa\xb0\xef\xa5\x18\x6f\xfe\x3a\xa9\xee\x9a\x40\xa1\x5e\xf0\x32\x8e\xec\x7a\xc4\x8f\xb7\xfc\xad\x5a\x86\xbd\xd6\xed\x17\x6f\x99\xb9\x96\xea\x12\xe7\x2a\xce\xb3\x32\x12\xee\x1c\xc2\xe2\x69\x65\x56\x24\x2e\xb5\xca\xb4\xdb\x93\xb9\x1c\xca\xae\x1c\x1d\xf6\xfc\xf7\x5a\xd3\xfd\x97\x61\x91\x95\x52\x2c\xfb\xe0\x07\x28\xc7\x22\x9b\x4b\xb2\xd6\x55\xa4\xc9\xfd\x14\x65\x91\x6d\x57\x08\x92\x01\x18\xba\x4c\x5d\xf1\x82\x1d\x16\x05\xa4\xc2\xdf\x69\xe8\x61\xec\x7a\xcc\xec\x2b\x53\xc3\xca\xf3\x1e\x0d\x98\xe4\x53\x86\x6f\x09\xad\x38\x85\x06\x9c\xa4\x7f\xa3\xe5\xef\xbb\x03\xbf\xfb\xc7\x42\x46\xd1\xca\xeb\xbb\x1d\x03\x31\x97\x87\x41\x30\x5e\x1b\xfe\x61\x81\x25\xd7\x5f\x7e\x5d\x97\x58\x59\x1d\x5f\xce\xb2\x82\x9b\x7e\xc7\xa1\x3f\x0d\x3f\xdf\x50\x7d\xd9\xb5\xeb\x60\xe3\x46\x96\x5d\x77\x8e\xe8\x73\x37\x8d\x63\x8a\x34\xde\xad\x6d\x47\xf2\xd2\x19\x7b\x16\xd9\x99\x3a\xd4\xaf\xff\xf3\xf8\xed\x03\xc3\x81\xfb\x23\xd1\xce\xfe\x33\x0d\x1a\x16\xac\x9a\xb7\x3d\xa3\x04\x14\xaa\xa3\x1b\x2d\xa9\x23\xa2\xa8\x8b\x56\x52\x3c\x10\x2a\x46\xd1\x7d\x4a\xf6\x23\x70\xf7\x3b\x1f\xe7\xa7\x82\x74\x09\xd5\xa8\x12\x8c\x90\x47\xb0\xd0\xcd\xd7\xe0\x00\xf2\xd3\x7f\x1e\xbf\xf5\xa1\xbe\x40\x3d\x1a\x92\x8e\xf3\x9c\xcb\x6f\xdf\x27\x33\xf4\xef\xd0\x46\xb5\x85\x21\xad\xd1\xf6\xf3\x14\x52\xfd\xc1\xf8\x09\xc4\x2a\x36\xe7\xda\xa8\xa5\x93\xe7\x72\x16\x91\xec\x9c\xcb\xe1\x96\x4b\xb6\x24\x7f\xfd\xee\xe4\x6f\xff\xf5\xfd\xbb\xa3\xc3\xef\xff\xeb\xcd\xe1\xd1\x5f\x4f\xdf\x9e\xfc\xfc\xf3\xf9\xdf\xce\x2f\x4e\xde\xfc\xfc\xf3\x51\xab\x14\x13\xe6\x08\x1b\xef\x9e\x33\xf3\xf3\xcf\x6e\x8f\xe9\x9f\x7f\xbe\x28\x1a\xde\xfc\xfc\xf3\x99\x77\x73\xc2\x39\x6a\xa7\x2a\x01\x16\x1c\xa0\xc7\xba\xea\x48\xd0\xef\x70\xf9\xe1\x2d\x7b\x75\x97\x03\x3a\x68\x40\xd5\x7f\x8a\xb8\xbc\xbb\xae\x05\x45\x6e\x4e\x2f\x7c\xeb\x9d\xfd\x0f\x2a\x32\xa1\xca\x8e\x12\xcd\xc5\x1c\xd0\xfe\x50\x45\x0d\x81\x07\x32\x65\xe6\x9a\x31\xac\xdb\x5c\x55\xad\xd2\xf1\xe0\x7e\xb2\xaa\xaf\x71\x2d\x8e\xad\x02\xd3\x6b\xcd\xe2\xd2\x94\x5c\x21\xe0\x15\x67\xd7\xa0\xa6\x6b\x3e\x17\xb4\x8a\x42\x83\xd0\xa9\x10\x33\xc0\xba\xdf\xdf\x91\x12\x1e\x15\x71\x62\x73\x67\x17\x26\xeb\x67\x99\xac\x65\x98\xf4\x3a\x63\x50\x6d\x69\x63\x25\x39\x3b\x3d\x26\x2f\xef\x3a\x19\x60\x1b\xb8\xac\x92\xf3\x4d\x0c\x11\x1c\x51\x56\xc5\x4b\xeb\x0e\xbf\x06\x79\xfc\xd0\x8c\xde\x4e\x4b\x59\x53\x2e\xb6\xdb\x64\x62\xd6\x56\xd5\x92\xfc\xda\xd2\x0a\xb5\xd7\x33\x59\xae\x9f\x34\x7b\x7f\xf4\x1f\xfd\x69\xf2\xc7\x40\xf8\x9f\x26\x7f\xb4\xd2\x27\xec\x8c\x3f\x4d\xf4\x55\x31\xf9\x63\x51\xb5\xda\x30\x45\xdc\x4d\x77\x86\x3e\xfd\x48\x67\x8a\x20\xe7\xa8\x1b\x01\x28\xa5\x60\xe7\x3e\x88\x46\x87\x4e\x05\xc8\xef\xfc\x8b\xa2\x05\x3b\x63\x8a\x83\x69\x20\x45\xf9\xa0\x1d\x2a\x3c\x07\x93\xd2\x35\x3a\x83\xee\xda\x48\x47\x98\x33\xc1\x58\x89\x96\x9a\x23\x9b\x91\xb9\xa5\x1a\xd6\x7d\x02\x46\xd5\xd4\x6a\x03\x85\x62\x14\x51\xdf\x48\xc9\x2a\x06\x8d\xec\x92\x3a\x8f\x62\x88\xc4\xa7\xec\x0a\x29\xc6\x82\xcd\x31\x85\xd6\xa5\x92\x20\x9e\x22\x1e\xb3\xff\x64\x4a\x46\xe9\x9a\xda\xc8\x86\xf0\xba\x66\x25\xa7\x86\x55\x4b\x72\xc5\xe9\x1d\xc7\x07\xb5\x02\xfa\x60\xa0\x70\xdc\x17\x92\x48\x88\x01\xb7\x82\xbb\x70\xcd\xa2\x35\xa4\x94\xd7\xe2\xee\x2a\x85\xeb\xca\x1a\x0a\x71\x05\xaf\x46\xbd\x66\x39\x30\xb9\xa4\x01\x9e\xe8\x45\x09\xd2\xac\x0e\xb4\xf5\x7b\x0f\x75\x0a\xfc\xa6\x45\x87\xce\x17\x1e\xdc\xd8\x1d\x09\xaa\x15\x00\xcb\xd9\xf5\xf6\x82\x8c\x0f\xcd\xc4\x5d\xfd\xec\x34\x66\x7d\x3f\xbd\xfe\x70\xc0\x1a\x3c\x3c\xc4\xd8\x4a\xb2\xca\x4c\xaa\x82\x4f\xab\x25\x59\xd0\xca\x30\x87\x98\x49\xe3\x55\xba\xeb\xa4\x9c\x33\x13\x2f\x44\x25\xc5\x3c\xd6\x75\xd9\x87\x86\x15\x06\x7a\x37\x31\x2a\xda\x06\xa9\xb3\x6a\xdc\x52\xb6\xc9\xfe\x8f\xd8\xef\xf1\xf5\x0b\x3f\xe9\x29\x32\x27\x25\xa7\x2a\x35\x9b\xca\xc8\x8a\x21\xa7\x0c\x11\x4e\x1b\xbb\x13\x3d\xd3\xf1\xd3\x1f\x4b\xb3\x95\x04\xaf\xdb\x85\xdb\x38\xc0\x72\x17\xe1\x95\xc1\x8f\x61\x0c\x85\x1e\x49\x56\xc4\xe2\x37\xd0\x9c\x61\x49\xac\x56\x64\x30\x82\xe6\x9a\x8a\xdd\x3d\x28\x66\x37\x96\xe2\x4d\xc5\xc8\x1f\x2f\xd9\x72\x04\xdc\x3e\x42\x75\xfe\x4f\xa4\x0d\x19\x54\xf0\x7c\xc8\x91\x6c\x2c\x01\x52\x91\x3f\xfa\x7f\xfd\xe9\x01\x7b\xc3\x0c\x09\xc3\xe1\x4b\x6d\xab\x5d\xcb\x09\x22\xd3\xf0\x08\x4c\x8e\xb9\x05\x74\xa0\x35\x46\xe2\x2c\x4f\xc8\x09\x74\x4d\x43\x03\x12\x01\xe6\xad\x25\x10\xdf\x9c\xe8\x59\xfd\xc9\x87\x53\xdd\x2e\xf3\x8e\xfb\x28\x4f\xef\xad\x74\x7d\x82\xd8\x88\x9c\x41\x57\xbd\xee\x13\x10\xc5\x6f\xe5\xc9\x07\x56\xb4\x69\xd5\xef\x83\x42\x40\x97\x2c\x21\x9b\x32\xcf\xea\x7d\xc7\x96\xfe\x54\xc4\x65\xb0\xf6\x79\x80\x03\xec\x44\x54\x54\x3f\x78\xfb\x32\x5e\xb2\xbb\xf7\x8b\xc4\xeb\xd4\xfb\x35\x80\x22\xd7\x9e\x2b\xec\x4a\xaf\x15\x9d\x7c\xe0\xda\xe8\xff\x8d\xf2\xa4\x90\xf5\xd4\x1f\xaa\x48\x8e\xe7\x35\x44\x62\x72\xab\xef\xf0\x54\x52\x49\x1b\xb4\xb6\xfe\x05\xb6\xb5\xc0\xef\xfc\x04\x2a\xd6\x28\xa6\x21\xe6\x4c\xed\x54\x3c\xd3\xae\x40\x4b\x0a\xc0\x45\x76\x11\x09\xec\x42\x9c\x34\x94\xaf\xe5\xc1\x01\x71\xd7\xe1\x72\xc1\x12\x9c\x58\x4b\x69\xd2\x53\x05\xf0\xa3\x34\xb1\x83\x0f\xb6\x9c\xf2\x6b\xcb\xaf\x68\xc5\xd0\xfd\x7a\xcd\xab\xb2\xa0\x0a\xd3\x1a\x51\xe8\x13\x2d\x5d\x0d\x2c\xb6\x41\x4b\x0a\x60\x05\x6d\x80\x75\xcc\xae\x5d\x3a\x13\x55\x86\x17\x6d\x45\x15\xb1\x12\x70\x2e\x55\x12\x5e\xcd\x20\x36\xeb\x76\x6a\x92\x35\x85\x57\x0e\x7e\xbb\x58\x25\x24\x66\x3c\xb3\x08\xaa\xb8\x9c\xa1\x66\xb9\x22\x66\xf6\xb1\xea\xcc\xed\xf6\x24\x0a\xe4\xcc\x1f\x3c\x41\xa2\xc7\x68\x28\x51\x4a\x0e\xd7\x84\xcf\x85\x54\xac\x3c\x88\x14\x90\x20\x0b\x27\xe4\xdb\xd0\xbc\x31\xa5\xef\xb7\xd5\xb8\x7c\x24\x19\x60\x65\xdc\xbb\x39\x41\xe5\xb8\xa9\x13\xbd\x33\xa9\xd8\x15\x53\x64\xdf\xe1\xba\xb1\x2b\x5e\x98\x83\x09\xf9\xff\x5b\x43\x2f\x35\xf8\x16\x2c\x48\x27\x0c\x43\x7b\x01\x07\xfe\x4f\x35\x79\x41\xf6\x61\xa8\xd8\x7a\x3c\xf0\x09\x24\x7a\xa9\x0d\xab\xd3\xf9\x79\x5b\x35\x10\xc9\x89\x8b\x39\x36\xc1\x8f\xde\xc6\xed\x16\x17\xad\xad\x15\x6e\x0f\x1d\x73\xe5\xa0\x23\x33\x1c\x92\x5c\x3b\xb9\xd8\x0b\xaf\x86\x8c\x0d\x7f\xa6\x86\xbd\xf0\xdf\x90\x23\x40\x14\x9b\x83\xf4\x42\xd9\xb3\xe5\xe6\x77\x89\x79\x98\x46\x36\xb2\x92\xf3\xe5\x79\xa3\x18\x2d\x8f\xa4\xd0\x46\x81\x8c\x7e\x48\xb7\xd2\xc5\x4d\x44\xb8\xe7\x4e\x5d\xed\x0a\x75\x15\x61\x72\x86\xb8\x4c\xb2\x9d\x2f\xb0\x15\x28\xfc\x90\xd0\x42\x49\xad\xc3\x3b\xdd\xd5\x64\x03\xdf\x9e\x9e\xf8\xbe\xa0\xde\xbf\x1c\xfa\x8c\xc2\x98\xe0\x6d\xbf\xa6\x4b\x27\x95\xe8\x94\x97\x3d\x04\x45\x4f\xfa\x5d\xd9\xe1\xd0\x9e\x8e\x37\xce\x83\xd5\x09\x0e\xdf\x1e\xdf\x35\x95\x61\x7b\x26\xef\x4d\x4b\x1a\xac\x0d\x07\x12\x1a\xd6\x2e\x18\x94\x30\xcb\x08\x31\x68\xa7\x74\xce\xaf\x98\x08\x33\xf3\x48\xda\x8e\xd6\xf4\xc3\xf9\x25\xbb\x4e\xf8\xa5\x7f\xd1\xef\xd8\xdd\x8b\x24\xc6\xe0\x0d\xfb\x41\x68\x6a\xb8\x9e\x71\x3a\xad\x1e\xb2\xf7\x29\x80\xa6\x9c\xb3\x8a\x15\x5b\x54\xdb\xbf\x8f\x89\x08\xd0\x7b\x46\x92\x19\x17\x2b\x3c\x96\x76\x74\x74\x28\x73\xbe\xd3\x1b\xd7\x01\x02\xcf\x0d\x0b\xd5\x72\xb2\x15\xae\x8f\x6e\x48\x0a\xc4\x2c\x88\xb6\x9e\x32\xe5\x45\x58\x9a\x7a\xe4\x40\x25\x49\x21\x95\x62\xba\x91\x58\xad\xea\x59\xc7\x09\xb2\xf4\xf3\x28\xb9\x84\x65\x68\x3d\x08\x4c\xe9\xc9\x07\xab\xf7\xea\xb4\x92\x00\xbc\x7a\x9c\xb4\xfa\x50\x4c\x05\xf2\xd5\x5d\x2b\x4b\xe7\x36\x3d\xf4\x86\xc7\xa0\x41\xfc\x49\xaa\x18\xee\xae\x21\x35\x50\x78\x25\x57\x42\xe1\x95\x27\x1b\x90\x20\x42\xc0\x8d\x73\x87\x73\x1c\xbe\x89\xe1\xdb\x9c\x03\x5d\x8f\xd0\x9c\x76\xb0\xad\xa2\x53\xc6\xec\xcd\x03\xc8\x02\xe3\xdc\x99\x23\x97\x6c\x09\x8f\xc7\x11\xd3\xbb\xd7\x0d\xdc\x16\x9e\xb0\x21\xf5\x5d\x78\x8d\xed\x2b\x0d\xfa\xbd\x9f\xe6\xe4\x87\x0c\xdd\xe3\x78\x25\xba\xee\xba\xab\xc7\xc7\x97\x9d\x37\x0e\x79\xb2\xe7\x8d\xeb\xe4\x72\xe7\x8b\x1b\x34\xf6\xe0\xea\x30\xbc\x86\xb8\xb8\xba\x2b\xdf\x86\x8e\x69\xfa\x14\xb7\x17\x85\xa4\x11\x39\x1b\xbc\xbd\xf0\xda\xe4\x06\x3b\x15\x23\xf2\x56\x1a\xfb\x9f\xc8\x23\x76\x2c\x99\x7e\x2b\x0d\x7c\xb2\x13\x2b\x89\x13\xb0\x4b\xeb\xe8\xbc\x16\x56\x0c\x0b\x3c\x6e\x5c\x76\x9b\x55\x14\xdc\x7a\x6d\x32\x83\x4f\x05\x91\xca\x4d\xf9\x40\x12\x82\x25\xad\x1d\x01\x71\x80\xde\xf5\xf9\xbe\xd1\x10\xb7\x54\xc4\xcb\x7c\x6f\xc4\x38\x42\x00\xf3\x18\xbf\x01\x28\xf6\xa6\x82\x82\xef\xb2\x85\x09\xa3\x76\xe6\xa8\x61\xf3\x3b\x97\x38\xae\x5e\x35\x53\x73\x46\x1a\x08\xeb\x64\xe0\xdc\x21\x8a\x04\x5e\x03\xd5\x89\x98\x98\xc1\xdb\x28\x73\x79\xe9\x3d\x3e\x14\x74\x4a\xb0\x35\xf2\xe8\xa8\x03\xf6\x7b\x44\x0a\x6a\x5d\x35\x05\x07\xc9\xff\x0b\xd1\xdb\xff\x21\x0d\xe5\x4a\x4f\xc8\xa1\xcf\x30\x8c\xbf\x73\x49\x1a\xd1\x63\x06\x90\xd2\xac\x07\x16\xa8\x20\xcc\x61\x5a\xc8\xd9\x9a\x32\x3e\x72\x78\xfb\xf6\xc0\x0e\xce\xe5\xbd\x4b\xb6\xdc\x4b\x45\x57\xc2\x2b\x96\x28\x7b\xa7\x62\xaf\x4b\x29\xec\x49\x81\xa0\x93\x02\xc0\xf9\x1e\x7c\xb7\x77\x7f\x7a\xff\x20\x0d\xb2\x03\x4c\x3a\xcb\xa0\x82\x0d\xdc\xb2\xbd\x3d\x55\xd3\x66\xd8\x96\xea\x98\xef\x3b\xb6\xdc\x5a\x08\xe6\x4d\x8f\x0a\x6f\xc2\x18\x67\xaa\x77\x9a\xa5\xc6\xfa\xfb\x0a\x62\xf4\x0b\xe7\x16\x94\x57\x4c\xa1\x4b\x30\x69\x6c\x74\x82\xd9\xb3\x26\xa4\xda\x77\x70\x3b\xc0\x8f\x30\xb0\xe5\x43\xef\xd1\xa8\xa4\xbc\x6c\x1b\xcf\xcf\x90\x86\x9b\xba\x63\xb8\x28\x64\xed\xfc\x22\xf8\x9e\xe0\x09\x77\x1b\x73\xec\x32\x9e\x50\xc6\x84\xad\x80\x39\x55\x3d\xaf\x4f\x62\x7c\x30\x9e\xcc\xe0\xe0\x65\xf6\xd8\x0f\xfe\xc0\x6e\x7a\x6f\x9d\xaa\x24\x02\x7c\xae\x7d\x3c\x0b\xae\x0d\x34\xad\x43\x60\x7d\x26\xd5\x94\x97\x25\xf8\x22\x91\xb8\x50\xf0\xb5\xc2\x38\x56\xd2\xf4\xfc\x50\x69\x42\x63\xe5\xa9\x1b\xea\xe0\x57\x9d\x5d\xe2\x99\x49\x49\x4b\xc6\x0b\x06\x71\xed\x91\xec\x83\xc2\x2b\xae\x4e\x8d\x67\x04\x3b\xfb\x49\x23\x4d\x99\x0f\x1f\xda\x23\x49\xb4\x55\x65\xb5\x3d\x50\xc4\xd0\x2d\x83\x91\x3e\x10\xc9\x2e\x29\x61\x6e\x85\xb4\xe9\x33\x5b\x52\xa3\x08\xd7\xdd\x02\xf6\xf6\x94\x19\xea\xfb\x5c\x88\x15\x34\xa8\xfe\xe4\x9f\x8a\x33\x59\xf6\x3d\xda\xb7\xc0\x42\x91\x7d\xff\x8f\xe9\x32\xb9\xe8\x85\x0c\xd6\xf1\x06\x68\x76\x39\x0f\x87\xe1\x0a\x97\x73\xa6\x6f\xef\x58\x80\xe1\xa3\x50\x14\x26\xdf\xce\x15\x43\x14\x60\x90\x4a\x20\xa5\x5c\xdb\xab\x56\xb0\x2b\x66\xb9\xb7\xe4\x76\x0e\xa7\x6d\x22\x66\x9a\xcb\xcf\xfa\x65\xcd\xab\xff\xff\x3b\x96\x6f\xa5\xf1\x61\xaa\x5f\x46\x2e\x60\x8e\x7a\xdc\x07\x5e\xb7\x35\xf6\xad\x36\xc6\xda\x30\x7c\x36\x63\x2a\xb1\x39\x1f\x09\xb5\x27\x7d\xdf\x75\x3f\x5a\xe3\xa4\x84\xa1\x6a\x0e\x05\xd3\xce\x0f\xed\x55\xae\x79\x25\xa7\xb4\x22\x35\x17\x96\xb4\xb4\x99\xb8\x58\x7b\x4e\x78\x63\xf7\xe7\x2d\xc4\x81\x0e\xea\x3a\x4b\xa1\x73\x3c\x2d\x43\x42\xb9\xe4\xf1\xd9\xca\x6c\xac\x3c\x1c\xe4\x4b\xc5\xb4\xc6\xf4\xe0\x37\x5c\x1c\xbb\xd0\x62\xd2\xb0\xaf\xad\x74\xfc\x40\xeb\xa6\x62\x23\x0c\x3f\x7e\x3d\xfe\xa7\x14\x8c\xb8\xb2\x87\x51\x60\x51\x57\xc7\x63\x24\x79\x89\x0a\x6f\x13\x60\xc9\x7c\x7d\x4d\x12\x05\x3d\xb9\x1b\x82\xad\x9a\x7c\xf5\xfc\xab\xe7\x2f\xd3\x44\xcc\xa9\x2b\x3d\x2a\xa8\x76\xdd\x6d\xd7\x57\xf7\xce\x45\x3c\x78\xfd\x8b\xd8\xd9\x79\xe9\xfe\xfb\x95\xfb\xef\xd7\xe4\x5f\x89\x4f\x23\x67\xe4\xac\xf7\x5f\xfb\x9f\xc4\xa7\x8d\x2d\xf3\x44\xcb\xf5\x72\xd4\x3f\x5b\x0b\x2a\xf0\xe0\xb3\xe7\xbc\xdb\xdf\xa0\xed\xe1\x2b\xc0\x39\x53\xc8\x9a\xc1\xd4\x7f\xf5\xbf\xd3\x74\x4d\x7c\x2e\x64\xe8\x1b\x22\x85\x7b\xfa\xcb\x7d\x98\xae\x03\x72\x0d\x79\x0f\x35\xbd\xc4\x80\xd5\x61\x61\x5a\x5a\x59\x82\xf7\xbf\x1e\xbf\x3c\x20\x52\xf4\x6e\x4f\x22\xe1\x8a\x4b\xab\xaf\xf9\x99\xd8\x7f\x99\x88\xf1\xb0\x3a\x9d\x5f\x6d\x98\xce\xde\x4c\xc2\xdb\x52\xb1\x84\x57\xc8\x2b\x93\xbd\x38\x3e\x14\xcb\x6b\xba\x0c\x42\xd9\xab\xeb\x73\x7e\xc5\xc8\x82\xcf\x17\x80\x86\x30\xa0\x5f\x2a\xc1\xbc\x6f\x90\xb1\xdc\xb7\xb4\x44\x42\x96\x84\x27\x6a\x7f\xa7\xe6\x99\x86\x8c\x16\x8c\x51\x38\xa0\x9b\x50\xa7\x16\x8a\x4f\x5e\x82\x58\x79\xb1\x02\xf4\xb1\xe5\x34\xa7\xaf\xbf\xba\xbb\x4e\x11\x64\xf2\xd6\xd4\x8a\x40\x41\xaf\xe1\xc1\xfa\x69\xb6\x7a\xb8\x0c\xe0\xda\x8f\x9c\x5a\x70\x50\x84\xc3\x33\x1c\xe3\x97\xce\x1a\xee\x4e\xb4\x6e\xf6\xd2\xfc\xb2\x67\xb2\x0c\x09\x22\xc4\xe9\xd3\x90\x58\xa7\xc9\x5e\xff\x18\xd8\x83\x44\xbb\xe0\xbd\x71\x18\xce\xce\xde\xe3\x52\xd8\xf7\xf0\x9b\x7f\x50\x1b\x70\x42\x0e\x45\xd9\x55\x13\x25\xce\x12\xfb\xb5\xa5\x15\x38\xaf\xe7\x90\x27\xa8\xf2\xcc\x57\x54\x77\xb4\xd6\xd7\xb6\x93\xe6\x89\xaf\x8d\xfb\x5e\xb7\x15\x64\x5a\x7e\xfc\xfd\xb3\x72\x82\xee\x52\xad\xc0\xea\x0c\xb9\x56\xb5\xc4\xde\xf5\xc2\xab\xff\x2e\xf3\x42\x3a\xbf\xc4\xa0\xcd\x70\x3a\xdb\x50\x4e\xd7\xe5\x6e\x91\x29\x5b\xd0\x2b\xbb\x1d\x01\xc6\x29\xde\xa9\x6e\x89\x41\xc5\x1a\x92\xed\x1d\x15\x58\x38\x11\xa8\xfb\x2c\xf3\x62\xc0\x36\xef\xde\x4d\x1a\x7c\xbf\x9f\x56\x4f\xab\x10\xff\xe8\x59\x12\x89\x26\x75\x8a\x82\xfa\xd5\x68\x65\x5e\xdd\xe7\xbf\x7d\x28\xbd\xf5\xab\x34\xbd\xf5\xde\x95\x4b\xfc\x6f\xb2\x8d\xd4\x6d\xdc\x8d\xfb\xf5\xb7\xfb\xdd\xac\x1f\x40\x86\xff\x9a\xc0\x05\x64\xac\x2e\xc9\x39\x71\x87\x39\xf5\x5e\x73\xd3\x52\x04\xe0\x12\xec\xda\x95\x54\x47\xcb\xba\xb2\x44\x91\x93\xcb\xab\x6c\x69\x72\x65\xca\x0a\xda\x6a\xbb\xa9\xeb\xc6\x9a\xdf\x44\x5b\xf6\xf3\x0e\xc3\xaf\xf7\xbf\x26\x63\xf2\xe2\xc0\xee\x6e\x81\xa2\x05\x58\x30\x56\xb8\xa1\xb1\x0d\x1a\x7a\x66\x61\x4d\x7d\xbb\xce\x89\x52\x8e\x3b\xf4\xce\x15\xb5\xf7\xf1\xa9\x4d\x42\x96\xec\x70\x36\xe3\x82\x9b\x65\x2a\x9c\x7d\x1e\xf5\xe9\xed\x1a\x25\x91\x1a\xb5\x90\xd7\xe4\xda\x61\x09\x00\x2f\x3b\x48\xbc\x98\xfc\xe7\xf6\x8f\x41\x8e\x6b\x38\x2c\x83\x2e\xe2\x2c\x8e\xa0\x0f\x38\x69\x63\xf9\x6e\xe2\xea\xe6\x5d\xa3\x9e\x94\xb1\xc6\xe4\xaf\x52\x48\xf5\x0a\x8d\x43\xec\x65\x1f\x74\x90\x1b\x5f\xcb\x9d\x2f\x45\xd5\x96\x51\x07\x8c\x4e\x7b\x4a\x3c\x3e\xc7\xe4\x14\xfc\xb7\xaf\x3e\x36\x72\xf0\xf2\x02\x88\x42\x19\x0e\xbc\xdb\x08\x4a\x4f\xe8\xdf\x58\x24\x0f\x47\x39\xc7\x40\x60\x3f\x30\x69\xbf\x85\x49\x25\x0d\xf0\xcf\x83\xd7\x1e\xd9\x19\xb9\x80\xf4\xee\xed\x6f\xa5\x98\x8e\x5b\x37\x12\xf6\x3e\xc3\xa4\xf4\xd5\x0d\x90\x34\xfa\x43\x6c\x1a\xe4\x3d\x7b\xf0\xc8\xd6\x38\xea\x47\x84\x56\x12\x82\x48\xf6\x38\xb2\x1f\xb1\xd2\xdd\x38\x93\x3e\xd6\xb4\x1a\xfb\x48\x22\x63\x01\x68\x9f\x5d\xf9\xca\xa8\xb7\x0b\x72\x6c\x41\xbf\x20\x9f\xb0\xe9\x1e\x78\x83\x21\x95\xdb\xda\x61\x51\x32\xfd\xf6\xea\xfa\x02\x09\xde\x61\x7d\xc9\x40\xb3\x80\x85\xc3\x58\xda\x04\xf6\x60\xdc\x5c\x9d\xba\x70\xb3\x53\x96\xb8\x4e\x4e\xfc\xb4\xea\x34\x07\xc8\xde\x82\x56\xb1\xdd\x61\xed\x1d\x5e\x32\x85\xea\xce\x94\xf5\x50\x98\x52\xeb\x2d\xf0\xfa\xa9\x7b\x3a\x22\x36\x01\x94\x00\x0e\xfe\x27\x04\xbf\xdd\x9b\xb6\xc5\x25\x33\x3e\x31\x43\x01\x4a\x4a\xd3\x1a\x32\xa5\x15\x15\x85\xdd\x8b\xa0\xc9\xa6\x39\xea\x67\xde\xf5\x6f\x24\x12\x80\xa3\x25\xbf\x0d\x76\x8c\x08\xf8\x3f\xf8\x0a\x51\xfd\x2a\x17\xda\x58\xaa\xb1\xb0\x75\xd8\xe4\x1d\x56\x5a\x8e\xac\xd4\xf5\x83\xae\x05\x2f\x70\x78\xf7\x6f\xcc\x9f\x71\x1a\x01\x63\xc6\xc1\xc6\x45\xc9\x2b\x32\xa5\x17\xda\x26\x5d\xcf\xe1\xf4\xf6\x4f\x8b\xb4\x97\x64\x93\x39\x64\xff\xad\x6c\x8f\xbd\x3e\x5e\xa3\x87\x80\xda\x1b\xe1\x2a\xda\x5d\xe2\x90\x3c\xf1\xe5\x41\x41\xa7\x66\xe8\x8c\x8b\x12\xf0\x81\x57\x89\x09\x4f\xed\x53\x65\x0d\x01\x4f\x11\x98\xb9\xf9\x29\xda\xec\x8e\x7d\x68\xf1\xb9\xe6\xe3\xde\x96\x10\x5d\x77\x5f\xf4\x55\x14\x28\xb2\xa1\x95\x47\xf9\xb1\x2a\x05\x9f\x59\xab\xab\x94\x0c\xb3\x22\xd0\x3d\x9e\xe8\x7c\x63\x5e\x2f\xe9\x5c\x44\xa9\xa7\x76\xcf\xdd\x42\xf6\x7d\x76\x00\x31\xac\xaa\xf0\x74\xe8\x3c\x62\xd6\x12\x36\xb2\x73\x89\xa5\xfa\xf6\xc7\xa4\x1f\x9a\xd8\x38\x58\x3c\x90\x07\x6d\x82\xc8\xe9\x32\xb4\x96\x4d\xcd\xc1\x9d\xb6\x86\xcc\xf9\x95\x55\xa1\xd6\xe2\x1f\x9b\x62\x19\x18\x7f\x5a\xb0\xaa\x21\x8a\x95\x6d\xc1\x06\x64\x02\xea\x44\x33\x9b\x90\xc3\xd8\x21\x08\x98\x19\xe1\xb8\xdc\xeb\xf1\xe2\x9e\xeb\x83\x3b\x5c\x51\xe4\x33\x90\xb0\x60\xe2\xf1\x19\x61\x57\x4c\x2d\x49\x23\xb5\x06\xd9\x0f\xfa\x02\x82\x1c\x42\x36\xe5\xcc\x17\xd6\x80\x53\x05\xe6\xcc\xf9\x17\x92\x06\xdf\x73\x4e\x89\x3d\x70\x2a\xcb\xc1\x3a\xc0\xee\x46\xad\xbf\x7e\xfe\x32\x35\x6a\x9d\xdb\xfb\x77\x06\xff\x0b\x21\xe5\x41\xa1\xe5\xd3\xd9\x26\x39\x19\xe6\xb6\x27\x79\x3e\x25\xea\x9c\x1a\x9a\x84\x99\x81\xe0\xf0\xd7\x07\x51\xc0\xfa\xeb\xe7\x5f\x3d\x7f\xb9\x6f\xe7\xfe\xab\x03\xbb\x0a\x51\x58\xf9\xab\x28\xac\x1c\x7e\xe9\xde\x22\x01\xc2\x8a\x74\x49\x3b\xfb\x2f\x0f\x26\x50\xd3\x00\xf8\xa4\xd7\x52\x95\xae\xc4\xdf\x23\x46\xda\x37\x0f\xed\x3f\x79\xed\x95\xcf\x11\x08\xad\x20\x1d\xd3\xdc\x43\x10\xd0\x80\x30\x3a\x37\xe4\xcb\x5a\x2a\xf6\x65\x34\xc4\x63\x55\x0c\xd6\x93\xbb\x6a\xda\x8c\x2f\x13\xf2\x76\x87\x14\x3b\x0f\x2d\x75\xbe\x29\x45\xad\xa6\xcd\x1d\x9e\x73\x25\xab\xb6\xbe\x6b\x16\xf6\x30\x85\xe8\x7b\x57\xb7\xea\x86\x76\xa5\x95\x98\xe6\x50\xbb\x9a\xe3\xe9\x32\x86\xf2\x9d\xb2\x4a\x8a\x39\xc6\x2a\x43\xc3\xc2\x3b\x8e\xfa\x69\xc8\xea\x85\x14\x05\x6b\x8c\x7e\xae\x8d\x54\x74\xce\x9e\x3b\x22\xef\x34\xd8\xf6\x20\x0b\x7e\x04\x6a\xfb\x95\x6f\xd8\x14\x08\xdf\x23\x00\x2d\xfb\xfa\x6f\x90\x97\xb4\x00\xd8\x49\x98\x75\xab\x2d\x45\x0d\x86\x45\xea\x74\x6f\x09\xb5\x20\xa1\x83\xe0\x90\x6a\x50\x7a\xad\x4f\x2a\xaa\x0d\x2f\xbe\xad\x64\x71\x79\x6e\x64\x9a\xa3\x2f\x87\x85\xb1\x89\x96\x1e\x27\x08\x72\xf8\xd3\x39\x39\xe6\xfa\x92\x28\xa6\x65\xab\x0a\xd7\xaa\x6c\x05\x90\xf1\xae\xd8\xb1\x78\xd9\xcd\x54\x31\xe3\x20\xf7\x49\x4d\x8b\x05\x9a\xfe\x2e\xeb\x81\x7d\x68\xa4\xee\x9a\xaf\x27\xb0\x14\x5e\x71\xa7\x8a\xc3\x9f\xce\xd7\x5f\x99\xeb\xa8\x49\x06\xfa\x10\xb1\x94\x06\x3c\xb1\x5d\xa6\xfc\xd8\x28\x96\xa6\x95\x6d\x9c\x69\xcb\xf0\xe0\x94\x52\xac\xe4\x0a\x81\x54\xdd\xbb\xb2\xa9\x9e\x14\x9a\x4f\xe8\xb5\x9e\x14\xb2\x26\x47\xe7\xa7\xa4\x54\xfc\x2a\xb5\x4f\xd2\x30\x51\xf6\x05\xbd\xd6\x0c\xc9\x9f\x5a\xf2\xed\xd7\x29\xf3\xb0\xe5\x5e\xa1\xf8\x36\xa7\xc7\x09\x3f\x1f\x5a\xff\x3d\xd3\x17\xf6\xdd\x13\xed\xb9\x5c\x55\x73\x48\x85\xf7\xc8\xce\x78\xc5\x10\xb0\x0b\x39\xd1\xc5\x7d\x9d\xd8\x87\x6d\xbe\x94\x2d\xb9\xa6\xe8\xd8\x86\x73\x36\xbd\x7c\xf3\x82\x37\xaf\xc8\x89\xd0\xad\x62\x5d\x91\xfa\x2a\x09\x56\x71\xf7\x7d\x84\x3d\xba\x10\xc8\x06\xb7\x1d\xc5\x7c\x00\xc4\x18\x5e\x27\x68\x9d\xe9\x57\x64\x8f\x7d\x30\xdf\xec\x8d\xc8\xde\x87\x99\xb6\xff\x11\x66\xa6\xf7\x26\xe4\xb4\x6e\x2a\x5e\x70\x63\xcd\x51\x31\x63\xaa\x73\x15\xe3\x0f\x32\x75\x59\xda\x95\x3d\x49\x72\x54\xb2\x82\x53\x18\xd8\x73\xcb\x1c\x1e\x08\xf1\x4c\x1e\x7d\x20\xee\x93\xbd\x4f\x67\x44\x62\xe9\x41\x1f\xa6\x9c\xeb\xf0\x70\xcb\xd0\x6e\x74\x91\xd0\x6f\xa9\xbb\x3a\x16\x7e\x2d\x95\x7f\xe4\xf3\x92\x5d\x3d\xd7\x25\x7d\x39\x82\xd7\x42\xfe\x5c\xae\xcc\x01\xd5\x64\xef\xe5\x9d\x1b\x05\x74\xd7\x39\xaf\x79\x45\x55\xb5\x1c\xc5\x73\xd9\x3d\xdf\x1e\x95\x9e\x10\x70\x26\xbf\xd8\x23\xfb\x88\x06\x0e\xea\x7a\xc5\x7c\x3b\xbe\xd0\xd5\x17\x2a\xa0\x92\x9b\xdd\x0d\x4d\x0c\x21\x83\x93\x43\x08\x1c\x4c\xb4\x7c\x27\xaa\x64\x70\x8f\x5c\xdc\xef\xe9\xf0\xf8\x81\xaa\x75\x51\xec\x99\x44\xcd\x8d\x75\xb7\xf8\x96\x3c\x5c\x38\x13\xe0\x8d\xe5\xd1\x01\x78\x16\xbb\x26\xce\xd2\xdb\x0f\x92\xa0\x29\x6c\x7b\x41\x3d\x1d\x90\x52\x2f\xf8\xaf\x2d\x23\xa7\xc7\xfe\xa0\x6e\x98\xd2\x5c\x1b\x26\x0c\x29\x7b\x1a\x3a\x47\xb5\x7d\xff\xb0\xa6\xff\x94\x82\x9c\x7c\x7b\xee\x1e\x94\xbc\xcd\x76\x6f\x75\x13\x0f\x2b\xfa\xcf\x56\x31\x6b\xcf\x6c\xcd\xe4\xf2\x04\xac\xda\x59\xf6\x73\x72\x4c\x0d\x45\x73\x0b\x4f\x0c\xd9\xf5\xf4\x02\xb3\x68\x0a\x78\x6e\xbe\x79\x5c\x3e\xa3\x28\x10\x75\x27\x4b\x28\x7a\x19\xbb\x28\x69\xf3\xb1\xd1\xfc\xb1\xfc\x8c\xf6\x8f\x1d\x21\x83\x05\xb4\x65\xcb\xc3\xbe\xcf\xdb\x54\x8f\x3e\xfe\xfc\x87\xf7\xa7\x5b\xb0\x5b\x0a\xb0\xc9\xe7\x6f\x64\x99\xc7\x78\x79\x16\x3d\xd0\xab\x68\xd0\x10\xf8\x08\x3f\x27\xb5\x1d\x89\xbc\x95\x82\x8d\xc8\x7b\x46\x4b\x62\x0f\x2b\xf7\xcf\x9f\x14\x37\x6c\xf2\x6c\x5b\x4a\xae\x5f\xc4\x2c\x13\xe1\x1f\xe6\x27\xe1\x6d\xd4\x26\x12\x7a\xb9\x82\x48\x77\x3a\xeb\xb4\x92\x53\xe2\x44\xea\x36\xdf\xfe\x87\xf7\xa7\xd9\x5e\xfe\x87\xf7\xa7\xfe\xdd\xed\x3f\xe5\x6c\x37\x5f\x7b\xd7\x0c\xf7\xd7\x2b\x16\xf3\x70\xcb\xe5\x8d\xab\x89\xa0\x6b\xd6\xf8\xfd\x9b\xe2\x93\x2d\x1b\xe1\x19\x20\x9c\x9c\xa1\xf7\x8a\x58\xba\xd2\xdc\xa0\x5c\x24\xc3\x23\xf6\x85\xab\x7d\x52\xd7\x93\x29\xca\x7a\x83\xde\x7e\xe5\x2b\x52\xb7\x95\x81\x2e\x37\xb0\xb5\xec\x5e\x83\x02\x32\xbf\xc9\x88\xeb\xfa\x6a\xb5\x03\xcc\x34\x29\x5f\x79\xf4\xa4\xf0\x8b\xcd\x3f\x78\x43\x05\x9d\xdb\xdb\xe1\xc4\x26\x35\xfe\x19\xed\xe9\x7d\x0c\xf0\x8b\xf0\x15\xbd\xa2\xbc\xa2\x53\x5e\x71\x03\xd6\xc8\xc1\xc4\xcf\x25\x42\xcd\x00\xc9\x5b\x13\xf6\x3b\x67\xd2\xc5\x9d\x30\xa0\x7b\x22\xd9\xb7\xdf\x3d\xbf\xb6\x87\xe2\xc1\x04\x4e\x48\xb8\x71\xc1\x54\x6c\xf5\x25\x8f\x6c\x37\xfc\xfb\x7b\xb2\x16\x87\x5b\x68\xd1\xc6\x83\xd9\x48\xb3\x04\xac\x34\xdd\xaa\x25\x60\x09\xd8\x68\x09\xc0\x17\xae\x97\xed\x16\x8c\x01\x18\x3e\xc1\x18\x80\xdf\x65\x36\x06\xec\xb1\xf4\x39\x19\x03\x9a\x15\x8a\x99\x01\xe6\x00\x88\xc6\xc4\xdf\x0f\x35\x08\x76\x4e\x2e\x96\x4f\x72\x31\xbe\x3a\xe6\xca\xb2\x42\xdd\xe3\xbc\xb2\x1e\x1a\xda\xe3\x57\x2b\x28\xd7\x28\xbc\xce\x9d\x76\xe0\x1b\xdd\xc3\xef\xad\xc8\x4a\xc1\xf7\xc7\x6b\xf0\x81\x1e\x36\x4d\x9e\x79\xf1\x4f\xf3\xd3\x82\x6a\x0f\x7c\x4c\x92\xb7\xf6\xc0\xd7\x2c\x58\xb3\x98\x6d\x0d\xda\xc1\x8e\xfe\xfa\xbc\x9f\x48\x72\xc4\x9a\x05\x79\x7d\xbe\xe1\x00\x43\xfc\x0e\x3b\x5d\x1a\xd3\x4b\x9e\x69\x52\xf1\x19\x33\x3c\x35\x32\x12\x9f\x61\x47\x48\x4b\xef\x00\x0b\xc0\x4c\xfe\xc0\xc2\xe9\x0a\x81\x47\x21\x7d\x7b\xd3\x60\xf7\x3c\xc2\xc3\xa5\x96\x82\x1b\x79\xe7\x5e\xe4\x24\x47\x1f\x03\x37\xf4\xb6\x8f\x06\x4f\x87\x5d\xd4\xf7\x7e\x3a\xc9\x9b\xe8\x53\x4a\x0a\x59\x55\xac\xf0\x58\x1a\xc0\xa6\x03\x66\x0e\xaf\x0d\x2e\x72\x97\x0a\xac\x27\x97\x7f\x00\x27\xb9\x73\x87\x3f\x47\xd6\x7b\xfe\xfe\xe4\xf0\xf8\xcd\xc9\xa4\x2e\xbf\x58\xc8\xeb\xb1\x91\xe3\x56\xb3\x31\x4f\x85\x4a\xdd\x7a\x97\x85\x0c\xd6\xf4\x3d\xa0\x16\x37\xd4\x2c\xf2\x98\xd7\xf6\x49\x96\x7d\xba\x8e\xf6\x3f\x68\xc4\x0b\x00\x44\x36\x97\x87\xa8\xa4\x34\x23\xa2\x28\x24\xdf\x86\x4e\xc9\xb3\xb6\xaa\x90\xcf\xac\xec\x19\xc5\xf1\xe1\xe7\x4f\x46\xae\x57\xa7\x7a\x93\xfb\x59\x59\xbc\xbb\x22\x1e\x86\xeb\x96\xa9\x36\x33\xc9\xc8\x30\x1d\x25\x7d\x96\x39\xef\x7d\x8e\xb9\x0f\x66\x61\x19\xe8\x92\x2d\x09\xa0\xda\x5b\xb3\xf5\x07\xcd\x54\x7f\x0b\x32\x53\xc0\xac\x3f\x6f\x35\x53\x13\x7c\xfc\x23\x5f\xe9\x21\xba\x32\xbc\xff\x7b\x36\xdb\x8d\x75\x7e\xcf\x66\x9b\x96\xd9\x7d\x0c\xdd\x99\x43\x55\x95\x55\xc5\x5b\xb3\xc0\xca\x5f\xec\x9f\x8f\x76\xca\xc6\x75\xc7\x3e\x08\x8f\x7c\xa1\x07\xe1\xab\xe7\x68\x6c\x23\x06\x58\x55\x24\x73\x13\x90\x38\x8e\xe6\x38\x63\x60\xb7\x94\x8b\x5e\x0b\x58\x84\x20\xe3\x57\xac\x5a\x06\x5d\x1d\xeb\x66\xca\x16\x11\x91\x69\x71\x79\x4d\x55\x09\xfd\xa6\x1b\x6a\xb8\xf3\x70\xf3\x74\xc5\xd2\x5e\xbe\x47\xb9\xc3\x5c\x76\x8d\x44\x5c\x01\xb6\xc6\x37\xe6\xce\x98\xc1\x82\x50\xe1\xc0\xa5\x1d\x82\x9a\x3d\x23\x69\x72\xd2\x85\x27\xa2\xb6\xb6\x5b\xc1\x94\xb5\xf6\xab\x25\xb9\x56\x32\x15\x81\xcd\x5f\x77\x4c\x2c\x91\x57\x4c\x5d\x71\x76\xfd\xfc\x5a\xaa\x4b\x2e\xe6\x63\xfb\xb2\x63\xdc\x02\xfa\xb9\xe5\x44\xfd\xfc\x0b\xf8\xcf\x00\xaa\x32\x75\xf6\x08\x1e\xea\xbd\xbd\x1c\xea\xf0\xe0\x86\x03\xf6\xb2\xe7\xdb\xb6\xa5\xba\xa5\xc1\xee\x25\x19\xeb\xd1\xca\x9f\xd8\x8a\x96\x52\xe3\x3d\x76\x1d\x7b\xf2\x9a\x96\x75\x22\x8a\x31\xd9\x19\x71\x9d\xea\xdc\xe1\xa2\x4c\x5b\xba\x2c\xce\x1d\x18\xbd\xef\xdc\x71\x9f\xb9\x24\xd0\x50\x0e\x42\x7d\x54\x02\x80\x67\x7d\x91\x47\xbf\xc6\x23\x83\x87\x07\x07\xbf\x5b\x88\xc2\x51\x9c\x39\x3e\x81\x4f\x85\x08\x85\x6c\x98\x15\xc9\xc5\xe5\x44\xaa\xf9\x7d\x14\x6d\xac\xf2\x6b\xbd\xd4\xbf\x56\x63\xa4\x60\xdc\x94\x1d\xc3\x3e\x3e\xcf\xd5\x53\x75\xc6\xad\xd5\x19\x8f\x3b\xd1\x63\x87\x6b\x2e\xee\x73\x4b\x91\xcf\xd2\x4b\xf3\x59\x85\xdc\xb6\xc8\x13\xc3\x7d\x31\xbb\x66\xa2\x77\x1a\x5d\x23\x01\x9b\xcd\x35\xcc\x04\x0b\x1c\x4f\x16\x1f\x2b\x04\x14\x06\xaa\x68\xcd\x0c\x53\x1d\x60\x7c\x21\x85\x18\xd2\x6f\xd6\x48\xf2\xae\x61\xe2\x1c\x0e\xe1\x27\xb3\xfa\xc9\xac\xbe\xfd\x7a\x32\xab\x9f\xcc\xea\x1c\x66\xf5\xce\x15\x0c\x79\x79\x8a\x20\x88\xae\x10\xb0\x43\x74\x70\x36\xcb\xe3\x3b\x33\x53\xad\x67\x29\x66\x7c\xfe\x86\x36\x83\x0d\xe8\xf0\xa4\x15\x63\x38\x7c\xec\x32\x1b\x00\x9a\xaa\x91\x0d\xb4\xe8\x73\x30\xa2\x30\xfd\x0f\x6f\x99\x0d\x3d\x8c\xdc\x86\xcb\x56\x04\x32\x80\xbf\x23\x52\xfa\xfa\x46\x6d\x3f\x99\x72\xd3\x69\x12\x9a\x19\xec\x07\x86\x3d\x57\x89\x14\xa4\x70\x08\xef\x60\xff\x44\x7d\xea\x32\xd8\x54\x82\xc8\xc2\x78\xa8\xd1\xd0\x3e\xec\xc5\x8b\x17\x2f\xb0\x77\xcc\xef\x7f\xff\x7b\x22\x15\xa1\xa4\x64\x05\xaf\xd7\x6f\x84\xbb\x7e\xfb\x32\xb1\xbd\x82\xbd\xfe\x76\xf8\xe6\x7b\xc0\x65\x69\x8c\xc6\x0e\x8d\x48\x91\x7d\x70\x6f\x50\x3d\x22\xff\xe7\xfc\xdd\xdb\xae\xf5\x5f\xff\x5b\xf0\x9a\x84\xe9\x4c\xa7\x27\x0e\xdf\xbe\xf8\xdd\x37\xdf\x0c\x78\x12\x38\x5c\xa4\xe2\x0e\xce\xd8\x43\xcc\x50\x7b\x1e\x2b\x86\x3d\x79\x40\x81\xf0\x16\x2c\x02\x80\x99\xe4\xf6\x20\xc4\x2b\x28\x35\x9f\x2f\x8c\x83\x89\xb5\x5b\xbc\xe2\x85\x41\x45\x00\xc1\xb5\xa4\x43\x6b\x86\x4d\x8f\x34\x04\xeb\x7d\x40\x02\x4b\xc9\x46\xa4\xe2\x97\x8c\xcc\xf4\x5f\x94\x6c\x9b\xae\x91\x2f\xf6\x2c\xf1\xd8\x47\x48\x44\xc7\xfb\xc9\x7d\x30\x77\xa5\x92\x7a\x50\x06\x4a\x2e\x21\x03\x44\xac\xb8\x1c\x1c\xf2\x69\xd7\x18\xb6\xa1\x3c\x80\x1d\x41\xd9\x26\xea\xb2\x7d\x1d\xb9\x48\x04\x94\xb3\xd7\x51\x38\x51\x7c\x03\x87\x46\xc9\xff\x46\x26\x07\x88\xdf\xe8\x44\x07\x68\x5c\xcb\x73\x1e\x18\xb7\xcb\x4c\x4c\x1e\xff\x92\x21\xf4\xad\xb5\xd7\x98\x08\xad\x16\xe1\xed\x01\xc5\x36\x9a\x1b\xfb\x45\xc5\xb5\x25\x0d\x3a\x02\x39\x8a\x93\xc7\xde\xf0\xa6\x61\x34\xd8\xf7\x1a\x77\x44\x2b\xd6\x46\xc5\x4e\x1a\x03\x46\x86\x23\x1d\x5e\x90\xfa\x2e\xb8\xdd\xd8\x08\x90\xee\x9a\xcc\xb8\x7b\x3d\x17\x84\x05\x4b\x6f\xdb\x1f\x2d\xa9\x66\xa6\x75\x4b\xcf\x94\x92\xca\xbe\x2b\xd3\xda\xf5\x57\xab\xa9\xba\x64\x65\x38\xff\x26\xe4\xcc\x4e\x8a\xef\x6f\x33\xc0\xc5\x53\x51\x6b\x85\xa1\x13\x9f\x2e\xe1\x35\x9d\xc1\x0e\xc4\x3d\x9b\x4c\x9e\xa1\xe0\x95\x8a\x68\x43\x95\x93\x86\xf6\xf3\x61\x92\x67\x8b\x79\x6b\x3d\xb9\xf1\x86\x36\xd0\x02\x1b\xf4\x4c\x60\x00\xf0\x61\xc0\x3b\xbb\xc3\x87\xba\x35\x4a\x3f\x5b\x32\x78\x18\x86\x3a\xdc\xf1\x1a\x27\x23\xac\xfb\xdf\xdb\x89\x19\xb2\xcf\x07\xbb\x49\x40\x52\x0d\xf9\xf9\x0a\x03\x5c\xf6\x31\xeb\x8d\xf4\xd2\x68\x98\x41\x9e\xc9\xf8\xad\x07\x28\xe1\x78\xe5\x74\x0b\x21\x3d\xfd\xe4\x9c\x4f\xd2\xc4\x0d\x7a\x7f\xaa\x01\x7b\x08\xaf\x1d\x52\xc0\xf1\xda\x35\x35\x1c\xaf\xd3\x19\x88\xf2\x95\x23\xdb\x1d\x35\xb1\x51\xe5\x75\x0d\xbb\x76\x43\x07\xdd\x9e\x06\x8d\xd7\x56\xf4\x68\xbc\x72\x68\xd3\x78\x0d\xd7\xa9\xf1\x1a\x92\x06\x8d\x57\x5e\xc1\xe1\x93\xa9\x71\x31\x9c\xda\x81\x9a\xc5\x2c\x30\x00\x44\x3d\xc1\xa7\xe2\x85\xf1\x60\x79\xe1\x94\x1a\x14\x19\x74\xaa\x65\xd5\x1a\x1c\x38\xd7\xa3\x63\x7d\x09\x5e\x88\x55\xd0\x93\x62\x90\x92\xb4\x3a\x48\xa4\x7b\x81\x76\x8c\xea\xca\xf0\x11\x76\x33\x87\x7f\x48\x28\x24\x17\xdb\xe6\x0d\x81\x6c\x3f\xfc\xb1\xf5\xd0\x47\xee\xb0\xc7\xae\x85\x3c\x72\x82\x4b\x24\x86\x3a\x82\x7f\x34\xc7\xde\xf1\x0f\x0b\xd8\x82\xd7\x0b\xe6\x8a\x5c\x22\xe3\xd7\x2a\x59\xf6\x08\x05\x8b\xdc\xf7\x5b\xc5\xa6\x3e\xdb\x8a\x96\xe7\x0d\xf7\x14\x9a\x0f\x0f\x22\x68\x4e\xf6\x8f\x02\x66\xb6\xaf\x97\x3d\x15\x86\xa9\x19\x2d\xd8\x41\x1c\x5c\x60\xcd\x82\xd5\x4c\xd9\x89\x77\xf7\x79\x08\xe6\x05\x15\x65\xe5\xa0\xcf\x71\x17\x11\xf6\xc1\x30\x65\x17\xa9\x4b\x3e\x4b\x52\x1e\xb7\x0d\x98\x05\x94\x6f\x23\xd6\x01\x03\x6f\xfb\xac\x41\x2a\xbc\x7a\x24\xa2\x93\xa7\x5b\x56\xdf\x37\xcd\xb2\x80\x8e\x03\x4c\xe9\x12\xf4\x48\x0a\xd0\x8a\x41\xdc\x2f\x65\xab\x30\xe1\x36\xe4\x51\x16\x52\x29\xab\x9f\x03\x41\x54\x13\xc5\xe6\x5c\x1b\xe8\x0e\xe3\xbb\x5a\x62\x87\x89\xad\xe1\xf1\xec\x54\x26\x5f\x48\xd9\xbb\x05\xe9\x28\x79\x0c\x67\xd1\x35\x4a\x5e\xf1\xd2\x1b\x74\xf1\xf9\xcc\x35\x69\xa8\x8e\xf0\xd3\xa9\xd6\xb2\xe0\x10\x00\xeb\xb8\x28\x79\x7c\xf4\x84\x82\xb9\x58\x32\x63\xad\x7b\xc1\x7a\xc8\xb7\x71\x92\xa1\x24\xb4\x69\xaa\xe4\x4a\x9b\xc1\x6c\x21\x64\xc9\xce\xda\x69\xc5\xf5\xe2\x7c\x57\x12\xa7\x36\xd1\x84\xc5\xc9\x6b\x15\x4d\x37\x25\x50\x0d\x48\xda\x12\x9a\x83\xc5\x65\xf5\x25\x6b\x60\x72\x29\xc0\xd5\x45\xb5\xf6\xa3\xc6\xa2\x46\x82\xde\x59\x31\xc3\xfc\x57\xe9\x7a\x74\xf7\xde\xae\xf7\x84\xb5\xc9\xed\xa7\x3f\x88\xa6\xf7\x79\x41\xab\x6a\x80\xe7\xa3\xaf\x62\x7b\xed\x05\x5d\x00\xbe\x8f\x05\x6e\x18\x6e\xf7\x92\x9f\x65\x28\x29\xc3\xd3\x6b\x82\x1d\x40\xd3\x55\xdc\x8d\x0b\xa7\xa3\x36\xff\x52\xf8\xd5\x1d\x59\x85\xdc\xff\x20\x70\x00\xc2\x77\xe1\x3e\x7e\x4a\x67\x7b\x4a\x67\xfb\xc8\xb5\x75\x9b\x8e\x3c\xa5\xb3\xdd\xf5\xda\xc5\x74\xb6\x9d\x4b\x39\xf7\x8e\x6b\x3c\x1e\x69\x39\x06\x34\x41\x4c\xba\x6a\xb1\xdc\x27\x68\xa9\x43\xb5\xe0\x8f\xe0\x0e\x6c\x2d\xe5\x1b\xdf\xeb\xd0\x18\xc5\xa7\xad\x49\x17\xc5\x79\x73\x0d\x3b\x7a\xc0\x3c\x65\xda\xe9\x0c\x63\xb7\x64\x45\x74\x78\x38\x27\x7f\x38\xd1\x22\x4d\x63\xa0\xa9\x34\x09\xb6\x0b\x98\x2d\xf8\xe1\x33\x4d\x4a\x59\xb4\x35\x13\xa6\xe3\x90\xae\xd6\x05\xe3\x2c\x5b\x3c\x55\x69\x59\x72\x54\x4a\xce\x32\x9c\xaf\x83\xc4\x51\x29\xaf\x85\x3d\x8f\x0e\xcf\x92\x10\x7e\xfb\xe8\xbe\xdd\xb3\x62\x37\x86\xff\x98\xd8\xcf\xe9\x14\x7a\xd2\xbb\x96\xab\x4f\x29\x93\x1b\x1f\x91\x67\x9b\x6e\x8a\xcc\x1a\x49\x5a\xcd\x6e\x4d\x89\xec\x22\xab\x59\x47\x7e\xca\xce\xdc\x8d\xb0\xf0\x53\x76\x66\xea\xc8\x4f\xd9\x99\x69\xc3\xf7\xe4\xd9\x29\xa6\x58\x5a\x75\xae\x72\xbd\x3d\x7b\xe7\x83\xcb\x4c\x18\xb0\x50\xbb\x95\x55\x76\xdc\x9d\x89\xe8\xdc\x58\x05\xfe\x5d\xf1\xc3\xa0\x2c\xec\xe2\xe0\x51\xd1\x9c\x3f\x34\xc1\xd8\xfc\x1c\x32\xd0\x76\x20\x83\x0c\xe6\x72\x80\x4f\x10\xaf\x3e\x5a\x5c\x07\x3d\x88\xdd\xb8\x31\x45\x37\xca\x11\x6e\x64\xf9\x0a\x1b\x50\x53\x21\x24\xaa\xa8\x7a\x84\x0d\xbc\xf5\xc8\x81\x5f\x80\x91\xda\xd0\x02\xbd\x64\x2d\x2f\x41\xa6\x76\x08\x95\xa9\xd8\x71\x78\x65\xe1\x02\x92\x89\x13\x08\x70\x03\x4c\xd1\xd9\x10\x96\x20\xd9\xd8\xc2\x5e\xb4\xe1\x3f\x32\xa5\x07\xf4\xb6\xeb\xae\x7e\xe3\x5d\x7c\xaa\xe7\x06\x5d\x2c\x58\x4d\xe1\x9f\xaf\xfd\x14\x58\x01\x69\xad\x4e\xc3\xb0\x7d\x1d\x53\xb5\x26\x72\x36\xea\x55\x60\xef\x5d\x0d\xe9\xe8\xe6\xaf\x4c\xce\x0c\xe2\x37\xd3\xd9\xe0\x74\x23\xb2\x3a\x61\x67\xbd\xe4\x20\xbb\x91\x40\x8f\xb4\x7b\xcb\x87\x9f\xba\x44\x6d\x38\x44\x70\x86\x77\x68\x72\xf2\x7b\x6a\xf0\xda\xb5\xac\xd0\xd4\x6c\xd0\x51\xc8\x18\xe8\xab\xec\x03\xc9\x79\xca\x06\xed\x5f\x4f\xd9\xa0\x4f\xd9\xa0\x59\xb3\x41\x23\x65\xc7\x9f\x5b\x1b\x12\x3b\xe3\x3c\x06\x9f\xdd\x39\x65\xde\xee\x77\x1e\x07\x9f\x9c\xe9\x33\x33\xa5\xea\x17\xa0\x3c\x9b\x4c\x9e\x61\x09\x4a\xe7\xa2\x68\xcd\x6c\xfc\x07\xc2\x44\x21\x4b\xfb\x9c\x0b\x78\xbe\xd2\x06\x54\xf8\x2e\xce\x13\xd3\x52\xfb\xb1\xe2\x22\x16\x78\x76\x0e\x8d\x6a\xf0\x51\xe1\x7b\x39\xbe\xce\xaf\x98\x0e\x16\xee\x9d\x3a\x1b\x3a\x4e\xba\x29\x2e\x7c\x46\x93\xd3\x6b\xfd\xf7\x9a\x54\xbc\xe6\xd0\xde\xa4\x04\x09\xc7\xb4\x19\x16\xe8\x22\x64\x1f\x1f\x39\x29\x9a\x76\xe4\x1e\x3f\xa9\x59\x2d\xd5\x72\x14\x86\xb0\x5f\xf6\xc6\x74\x77\x1c\x80\x12\x5d\xb4\x4a\x31\x61\xaa\xe5\x30\xc0\xf7\xee\xda\x41\x6d\xda\xaf\xc0\x8e\x28\xd3\x81\x41\x86\x34\x62\xe8\xae\xbe\x0c\xea\xf2\xe9\x20\xd4\x1c\x66\x11\xce\x4e\x07\xec\x37\xea\xb2\x18\xed\xa7\x4c\x5c\x91\x2b\xaa\xf4\xb0\x3d\x4f\xf2\xea\xcf\x25\xbf\xe2\x5a\x26\xe7\xa0\x45\x0f\x8a\xa7\xe7\x3c\x44\xd0\xec\x4e\x95\xad\x69\x5a\xe3\x8e\x13\xbf\x7d\xd9\x87\x46\x5a\x25\x2d\x6c\xdb\x15\x43\xe3\x65\x6a\x80\xb2\xbb\x1a\x6a\x0c\x53\xe2\x15\xf9\xbf\xfb\x3f\xff\xe6\x5f\xe3\x83\x3f\xef\xef\xff\xfd\xc5\xf8\x3f\xfe\xf1\x9b\xfd\x9f\x27\xf0\x8f\x2f\x0f\xfe\x7c\xf0\x2f\xff\xc7\x6f\x0e\x0e\xf6\xf7\xff\xfe\xdd\x9b\xbf\x5c\x9c\x9d\xfc\x83\x1f\xfc\xeb\xef\xa2\xad\x2f\xf1\xaf\x7f\xed\xff\x9d\x9d\xfc\xe3\x13\x1f\x72\x70\xf0\xe7\xff\x35\x98\x74\x2a\x96\xef\x06\xca\x61\xbc\xc6\x19\xf5\x81\xfe\x13\xb3\xb0\xdf\x8a\x95\xc2\x85\x19\x4b\x35\xc6\x47\xbf\x82\x9e\xd2\x03\x07\xf0\xec\x95\x7b\xff\x77\x3a\x48\x38\x97\x82\x81\xb8\x43\x1b\xfc\x3e\x6c\xc0\xcc\x25\x17\x90\x12\x72\xcc\xb7\x86\x36\xea\xc7\xef\x43\xac\x18\x56\x37\x52\x51\xb5\x24\xa5\x0b\x39\x2c\xef\xa1\x8d\xcc\xc0\x46\xd7\x40\x7a\xc9\x53\x76\xf5\x96\x43\x96\x35\x2b\x79\x5b\x6f\x3b\x5a\x89\x54\xc4\x0b\x7f\x6d\x97\x18\x32\x96\xe4\x2c\x64\xc0\xbb\xdb\x5c\xcc\x78\x4a\x8b\x4b\x74\x22\x04\xce\x18\x12\x59\x62\x31\xe4\xf0\xde\x9e\x4b\x75\xad\x19\x15\x21\x72\x0a\x69\xd9\xb2\x64\xcf\x74\xb8\x17\x49\xca\x12\xac\xc4\x94\x2c\x57\xd3\xb5\xef\x06\x38\xb0\xa6\xd0\x1b\xd0\x5f\xb7\xd6\xc6\x7d\x00\x77\x93\x2c\x8d\x09\xf8\x3f\xd9\xf7\x56\xd7\xdf\x36\x9b\x06\x42\x7c\x8e\xbe\x91\xe0\xd6\x71\x8d\xae\x66\xa4\x92\x45\x54\xb0\xd1\x53\x45\x81\x51\x4f\xbc\x88\x1b\x9a\xad\x64\xd9\xd5\x52\x83\x36\x10\x84\xd4\x2a\x8d\xf9\xd6\xbc\xa0\xd3\x8a\xa1\xeb\x08\xf8\x66\x30\x8f\xda\xc1\x6a\xfa\x81\xd7\x6d\x4d\x5a\x6d\xdf\x4c\x8a\xfe\xb3\xbb\x17\xbb\xc6\xad\x89\x7b\xa5\xe6\x02\x7e\xd4\x73\xb3\xa5\x07\xaf\x16\x8c\x9c\x87\x15\xe8\x9c\xbe\x98\xbe\xe8\x7c\x3a\xba\x05\xd3\xdf\x51\xe7\x0c\x50\x39\x83\x34\xdb\x60\x87\x68\x02\x78\x0e\xc9\x8d\x33\xc9\xba\xc0\x10\xbc\xea\x4b\x0c\x90\x5f\x8b\x68\x81\x5a\xe1\xea\xa1\x1e\xeb\x3e\x7e\x74\x5a\xfc\x40\xdd\x3d\x97\xc6\x9e\x45\x4f\xcf\xae\x9d\x87\xfa\xb2\xad\xa9\x7b\xa1\xc0\xad\xa7\xef\x39\x7f\xf4\x86\x62\x37\xea\xeb\x8c\x82\x80\x1d\x02\xb3\x7e\x11\x7c\xdf\x4e\x79\x2c\x96\x85\x6b\x20\xc4\xbb\x1c\xc5\x90\xa7\x86\x7b\x17\x80\x78\xc6\xf6\xff\xbc\x8f\xdc\xa7\x2f\x4d\xd9\x0c\xd3\xfb\xf1\x37\xe0\x5f\xd4\x69\x90\x40\x18\x25\xa8\x98\x01\xe4\x21\x26\xc2\x43\xa1\x46\xa1\x96\x57\x56\x84\x24\x3d\xf9\x07\xed\x12\xec\x78\xe2\xb6\xa0\x07\x3d\x44\x49\x8d\x0e\x3f\xc1\x58\x89\x28\x49\x55\x37\x03\xaa\x15\x89\xef\x3f\x3d\x20\x33\x46\x4d\xab\x30\x77\x5d\x48\x05\x11\x11\x14\x62\xe8\xca\x57\xcc\xb2\x00\x34\x76\x52\xb2\x26\x5a\xd0\x46\x2f\xa4\x01\xb7\x31\x6d\x68\xc1\x4d\x32\xbc\x8d\x51\xb4\xb8\xb4\x4f\x86\x2c\x26\x78\xb3\xb4\xd7\x28\x0e\x5c\x8d\x7e\xcc\xab\x7d\x5c\x29\xb3\x50\xb2\x9d\x2f\x00\x78\x08\xef\x2a\x2a\xaa\x11\xe5\x2a\x2d\x01\x71\xe3\x98\xce\xd1\xa9\x49\xb9\x14\xb4\xe6\x85\x5f\x3f\xa8\x22\xd3\x5c\xba\x04\x13\xa0\x25\x75\xda\x28\x39\x63\x4a\x73\x6d\x98\x30\x98\xeb\x72\x54\x51\x5e\x93\x7d\xcd\x18\x39\xf1\x5b\x1d\xbf\x39\x47\x33\x1d\x83\x5b\xe9\x65\x07\x71\xf2\x8c\x6b\x32\xea\x70\xa4\xed\x27\x3e\xa8\x17\x25\x94\xa6\xb7\x80\x70\xbb\x72\xe3\x2b\x1e\x0c\xd8\x8c\x9b\xe7\x4c\x2a\xa8\x10\x72\xfe\xb9\x2b\x26\x4a\xd9\x25\x56\x27\x8d\x75\x78\x76\xaa\x63\x87\x28\xca\xb4\x06\x47\x87\x2f\x5c\x13\xd4\xd0\xb9\x30\x48\xc4\xa4\xf1\xac\xc2\x25\x08\x17\x25\xbf\xe2\x65\x4b\x2b\x54\xb5\x92\xa7\xe9\xe8\xfc\x14\x89\xe4\xf3\x85\x19\x5f\x33\x08\x27\xa2\xae\xdd\x9d\x22\xfe\xd5\xf8\x5a\xc9\x2c\xd7\xa0\x94\x19\x62\x64\x9a\x40\x62\x2e\x8c\x6d\x27\xed\x9a\x2e\xa1\x9b\xb7\x2b\x7b\xec\x65\x9a\xbb\x15\x73\xc3\xce\x64\x9a\xce\x50\x7b\x2d\xcf\x31\x77\xe2\xc4\x1d\x82\x18\x2e\xa8\x00\xd3\x15\xa2\xd0\x96\xff\x41\xa6\xae\xcf\x5a\xaa\xc4\x69\x02\x07\x77\x8f\x42\xc5\x57\x53\xbb\xe3\x12\x3d\x32\x5b\xf6\x8a\x5c\x75\xbb\xf1\x82\xd5\x4d\x45\xcd\xd6\x13\xba\x7f\x8a\x82\xf2\x51\xae\xa0\x3d\x3a\xa8\x28\xc7\xb4\xb2\x22\xe3\xec\xc7\x23\x07\x5d\x86\x82\x3d\x4b\x65\xcc\x85\x57\x3f\x84\xb3\x70\xd0\x94\xdd\x28\xd3\xa1\xbb\xde\x94\x95\xa0\x0f\x38\x8a\x87\x94\x52\xca\x6b\xc1\x94\xdf\x57\x67\x3f\x1e\x8d\x08\x9f\xb0\x89\xff\x2b\x0c\xe1\xd5\x25\x23\xe7\x08\x4e\xe1\x21\x72\xd2\x33\x0c\x65\x39\xc1\x57\x8f\xe3\xd7\xf1\x98\xbf\xfc\xd1\x4e\x8a\xfd\xf6\x4f\xe3\x3f\xba\x03\x06\xfe\xfa\xc5\x6a\x6d\x03\xaa\xe9\x7e\x59\x79\x5a\x8c\x07\x00\xea\x8e\xfd\xeb\x97\x33\x59\x9e\x37\xac\x98\xe0\xf4\xeb\x5f\x06\x25\xbd\x12\xc2\x84\x51\xcb\x09\x39\x93\x50\x21\xc3\x4b\x14\x68\xf0\xae\x8a\xfd\xb7\x4f\xc8\x00\x36\x08\x51\xdf\x82\x1a\x26\x40\xfb\x15\xe9\xbd\xcf\x89\xc7\xd5\x84\x61\x41\xcc\x53\x98\xe7\x7d\x08\xd5\x21\xbc\xf8\x88\x18\x89\x8d\xba\x53\x4f\x5b\x7b\x1d\x0a\xc2\x3e\x70\x0d\x7d\x44\x70\x25\x81\x49\xa8\x83\x36\xf0\x26\x87\x25\xc6\xf2\x5d\xe8\x8b\xd3\xc8\xf4\x8c\x5b\x98\xc1\x2f\x85\x34\x5f\x86\xcd\xeb\x2b\xd6\xc0\xb6\x90\x84\x5e\x49\x5e\x92\x56\x83\xce\x29\x48\x2b\x20\x65\x61\x00\x84\xac\xe3\x9e\xe9\x92\xd4\x5c\x1b\x7a\xc9\x26\xe4\xdc\x9a\x23\x71\x1a\x31\xf2\x94\x20\xd3\x4a\x16\x97\xac\x24\xad\x30\xbc\x1a\xe4\x99\x09\x74\xc3\xd4\x46\xa6\x0a\x80\xc6\xb6\x85\xd5\x72\x1b\xc5\xc6\xde\x60\xc2\xbb\x06\x78\x8c\xf1\x40\x0f\xb3\xda\xad\xd5\x28\x6c\xd5\x05\x45\xd7\x6d\x53\xc2\x90\xae\xf6\x75\xa0\x30\x5a\xab\xd3\xb7\xf3\x29\xe1\x6f\xf7\x07\x30\x99\x9e\x90\xb7\x60\xb9\x54\xe9\x9b\x12\x8b\x26\xd0\xdb\xed\x32\x64\x04\x2b\x98\xd6\x54\x2d\xb1\xb0\x98\x1b\x5f\xd3\xde\x6a\x36\x6b\x2b\x30\x18\xd3\x27\x95\x8a\xd6\x12\x4c\x14\x2b\xa4\xd0\x46\xb5\x05\x70\x0d\x25\x53\x25\x2f\x99\xe8\x80\x3e\x06\x1c\x26\x71\xc5\x74\x57\xd4\x69\xd5\x6b\x21\x49\xb1\xa0\x62\xce\x02\x94\x30\xa9\x69\x09\x9c\xfc\x5d\x70\x7e\xa4\x4f\xa6\x0c\x7c\x41\x67\xc6\xaa\x85\x06\x18\x64\x6a\xad\x04\x9f\x8d\x94\xfe\x62\xef\x43\xc1\x77\x1d\x25\x34\x09\x5e\x6d\xb1\xd4\x70\x78\x46\xc9\x18\xac\xd5\x54\x87\x61\x86\x0c\x92\x9a\x19\x5a\x52\x43\x77\x05\x43\xe0\x0d\x5d\x86\xcc\x34\xcc\xd9\x07\xd6\x8d\x72\xf9\x9d\x99\xe0\xfd\x43\xb2\xe1\x31\xa0\xf5\xd9\x8f\x47\x83\xc6\x07\x87\x10\x70\x2b\x74\xc3\x32\x56\xca\xb8\xd4\x45\xd8\x55\x08\x1d\xe1\x11\x01\x2c\x69\x9e\x12\x3c\xc6\x59\x49\xca\x76\x70\x34\xbb\x53\x11\x86\xe4\x4e\x65\xc9\x9c\xb2\xfc\xb9\x2b\xcc\x71\xd1\x25\xa3\x17\xfd\xea\xf4\x8d\x86\x3e\xe6\x2c\x32\x61\xb8\x62\x11\xe0\xfa\x20\x12\x1c\xbf\xb5\x02\x25\x69\x9f\xf3\x90\x35\xe7\xcc\xe8\xae\xec\x12\x15\xca\x81\xa3\x1a\x67\x24\xe1\x1b\x81\xe5\xe7\xb9\xd1\xc5\x5a\x36\x4e\xc0\xa0\x31\x91\xcf\xb5\x74\x8a\xa3\x55\xb9\xb7\xce\x8c\xf9\xb2\xe6\x68\x61\xcf\xf9\x37\xb2\x1c\x9e\x7e\x97\x37\x0f\xb4\x47\x5a\x07\x6e\x83\x18\x50\x1a\xc2\x9d\x78\x03\xa4\x52\xeb\x1e\xb8\x3d\x6a\x32\x0b\x7a\x35\x18\x00\x3a\x39\x16\xd6\xf9\x2b\xc6\x3e\x2c\x86\xe4\x8e\x81\xdc\xf1\xcb\x81\x84\x0d\x2f\x40\xf4\xd7\xc0\x42\xc4\x3e\x41\x59\x72\xc4\xee\x01\xe2\xd5\x5f\xf6\x88\x3f\xcf\x92\x1f\x96\x9b\xdb\x3b\xca\x9c\xda\xea\xca\x05\x42\x61\x8b\x83\xc5\x64\xdc\x1e\xc2\xc3\xd7\xeb\xcb\x9e\x99\xea\x9c\x2b\x21\xbe\x81\x90\x52\xfb\x3e\xe0\x31\x71\x6c\xed\xbb\x6f\xf5\x6f\x3f\xc8\x4c\x0c\x58\xe5\x9b\x7d\xe0\x83\x47\x3a\x75\xd5\x91\xde\x73\xc5\x14\x54\xea\x44\xd0\x96\x56\xd4\x28\x59\x55\x4c\xc1\x12\xb8\xa0\xc6\x4a\x01\x98\x5d\x2d\x82\x69\x80\xe9\xfd\x38\xfc\xe5\xc3\x7c\xc1\xd5\x26\xd8\x75\xb0\xae\xa9\xc6\x4e\xd7\x3e\x03\x1e\xc2\x97\xbe\xaa\x6f\x13\x3d\xc3\x45\xde\x4f\x3e\x18\x78\x28\x96\x38\xf9\xc7\x11\x73\x62\xc8\x8c\xcc\x2d\xa9\x5c\x13\x26\xe8\xb4\xb2\xe6\x48\xc4\xc0\x81\xce\x15\xed\xd4\xc8\xe8\xae\xf7\x6c\x36\x7c\xea\x20\x86\x19\x3f\xf2\xd3\xc6\x46\xf5\xb6\xf7\xc3\x49\x57\x0b\xeb\x7c\x33\x19\x1a\x02\xfb\xcb\x71\x5d\x6f\x88\x7e\x7d\xd4\x0a\x35\x71\xb7\x99\x8d\x6f\x30\x94\xa6\x6c\xd5\x04\xf9\xea\x09\xa0\x5f\x08\x4f\x8c\x0f\xf4\x1f\x33\xc8\x4f\x88\x57\xbe\xb2\x04\xa8\xf2\x85\x92\xb0\x1c\xf9\xdd\xb9\xcf\x1d\x82\x61\x3b\xa0\xcf\xbb\x80\xe7\xf0\x87\xb7\x29\x42\xbe\xf3\x94\x59\xe9\xdc\x35\x9f\x1a\xbe\x2f\x08\xee\x8d\x78\xfc\x0d\xa5\x83\x9d\x98\xfb\x8e\x8b\x32\x14\x71\x7a\x50\x58\xab\xa0\x1d\x9e\x9d\x22\xd5\x79\x68\x7a\x0d\x67\xc2\xd2\x19\xbc\x66\xc1\x55\x39\x6e\xa8\x32\x4b\x0c\x6d\x8d\x7a\x14\x07\x3c\xc7\x0c\x43\x67\xcd\xb4\xb7\x9b\x29\x3b\xcb\xc1\x12\xf8\xb4\x44\x97\x37\x7b\x23\x87\xec\xda\x8c\x0c\x45\x89\xf4\x57\x6f\x46\xde\x76\xed\xd0\x42\x10\xe7\x91\xcc\xc8\x7d\x55\x8c\x93\xfe\x69\xb6\xbb\xba\xb6\x3d\x6a\x75\xbf\x76\x09\x55\x5f\xf0\x57\xb8\x30\xa4\x8c\x61\xc3\x82\x95\x09\x5e\x7e\xfb\xa4\x11\xe1\x33\xab\xb4\x49\x31\x86\xcc\xc7\xc1\xe4\x75\x69\x4f\xce\xd2\x9d\xb8\xf2\x66\xf4\xc0\x83\x60\x8a\xa8\x8c\x86\xee\xe4\x20\xd9\x17\x32\xdd\x41\xef\x2f\x90\xad\x38\xd6\x01\x56\xb4\xdf\x90\x49\x32\x1d\xde\xc2\x8a\x74\x9a\x67\xec\xba\x8f\xce\x02\xaf\x12\x73\x51\xda\x4d\x05\x2a\x12\x38\xf5\x75\x5b\x14\x8c\x85\x90\xa1\x13\x4b\xc3\x4d\xda\xde\xd9\xe3\xa6\xbc\xa6\xa6\x58\x30\x4d\xb4\x84\x5e\xc7\xda\xd0\xaa\x62\x65\x48\x75\x42\x46\x91\x60\x55\xb8\x34\xa8\xc1\x74\x44\xc6\xca\xf0\x29\x8e\x02\x23\x2e\xea\xda\x54\xd4\x05\x95\x66\xad\x28\xb0\x7e\x91\x9b\x65\xc8\x32\x59\x35\x4c\xc1\x0f\xad\x21\xd6\x36\xdc\xf4\x99\x61\xc6\x48\xe4\x53\x0e\xcc\x0c\x87\xff\x12\x8f\xfb\x05\xbd\x62\x5d\xb6\x87\xeb\x12\x69\x4f\xe9\x00\x75\x9b\x81\xd7\x23\xa8\xdc\x11\x5a\x08\xb1\xc2\x2e\x9e\xc5\xc9\xe0\x5c\xe4\x36\x65\xe2\x79\xd8\x8f\x26\x7d\xcd\xc4\x39\x08\xa6\x8d\x66\x26\x80\x78\x0f\xd7\x78\x89\xcb\x9f\xa7\xad\x91\x35\x35\xbc\x80\x10\x1d\x9f\x45\x49\x62\x35\x26\x5e\x58\x49\xe3\x13\xe1\x51\x45\x02\xc5\xcd\xad\x5b\x26\x31\xb0\xd9\x58\xba\x87\x89\x8f\xe6\xda\xad\x72\x7f\x5a\xfd\xb4\x44\xaa\x67\xa6\xf7\xbc\xf0\x88\xc8\xc4\x2c\x14\x63\x84\xd7\x8d\x54\x86\x0a\x43\x4a\x3e\x0b\x18\xdd\x3e\xc3\xf0\x36\x9e\xc8\xe1\x0f\xfa\x09\xf2\x6a\xa3\x51\x30\x60\x5a\x55\xf2\x5a\x13\x73\x2d\x43\xc8\xa1\xcb\xef\x72\x98\xc7\xa3\x3e\x31\x19\x74\x1c\x37\xaa\x3d\xea\x2c\x5f\x45\xe7\xd0\xc8\xca\x9e\x6b\x56\x55\xf6\xbf\xb7\x9d\x46\x83\x71\x4c\x36\xce\x09\x9f\x0b\x84\xa1\xe5\xda\x07\xbf\x1c\x86\xca\x7e\xa9\x64\xd3\xb8\xe4\x87\xfa\x20\xff\x9c\x40\xf2\xba\xba\x62\x1a\x8a\x4c\x3c\xae\x8b\x65\x85\x39\x13\x4c\x51\x03\xe9\x75\xae\x9f\x2b\xa8\x24\xab\x44\x0e\x0d\xfa\xe0\x95\xd1\x2f\xf2\x11\xa6\xc3\xd4\xcb\xcd\x4c\xe6\xef\x71\xdf\x66\x78\x2f\x2e\x90\xdf\xbc\xdc\xc9\xc0\x40\xfb\xdf\x32\x43\x0f\xc8\x0f\x1a\xd9\x22\x9c\xbc\x01\x87\xe7\x93\xbc\x6c\x0e\x6f\x1d\x1d\x6d\x19\x88\x3a\xac\x9a\x45\x44\x55\xec\x97\x0a\x10\x72\xfd\xb9\xee\xd1\x7b\xa4\xa4\xd6\x6f\xfd\x4f\x1e\x90\xf4\x27\x9f\xd5\x47\xae\x27\x9f\xd5\x93\xcf\xea\xc9\x67\x05\xd7\x93\xcf\x6a\xf5\xfa\x5c\x7c\x56\xa4\x3b\xae\x76\x55\x36\xbd\x8d\x4d\x97\xfe\x01\x7b\xcf\xf3\x4c\xc8\x5b\x69\x5c\x8a\x31\x58\xb0\xf4\xc6\xa0\x13\x85\x13\xfa\x9a\x2e\x27\x82\x19\xd7\xc9\xc4\xc7\x77\xdf\x7b\x9a\xfe\xa2\xac\x35\xe2\x5c\x1f\x91\xdc\xf0\x82\xcc\xb7\xb7\x89\x46\x31\x12\x55\xb3\x2e\xe3\x19\x3e\x7f\xa6\x5d\x5e\xab\xfd\x1e\x20\x0b\xe3\x07\x14\x6c\x42\xce\x5d\xad\xcb\xca\xe0\xeb\x4d\x16\x4a\x66\x28\x1f\xd2\xbb\x29\xbe\xbc\x36\x74\x71\x83\x76\xb6\x35\x6d\x87\xe4\xdc\x36\x01\x74\x69\xd7\x5c\xb1\x1d\x88\x5b\x54\x9d\x1b\xd7\xf4\x77\x37\xdc\x57\x86\xcf\xe9\x8c\xbc\x67\x85\xbc\x62\x0a\x57\xf7\xe4\x43\x43\x85\xe6\x52\xbc\xa6\xbc\xb2\x6b\xeb\xd7\xb8\x8b\x76\x93\x56\x33\xd5\x4f\x81\x8c\x52\x34\xc2\x06\x77\x8c\x64\xb9\x77\xb8\x81\x12\xba\x9b\xd8\xf1\x5c\x05\x5d\xa3\xd8\x15\x97\xad\xf6\xc8\x07\xad\x41\x4d\x43\x1b\xe7\x21\x5a\xf0\xf9\xc2\xdf\xec\x2b\x56\x21\xeb\x5a\x95\x61\x13\x0f\xa6\x4c\x1b\x6a\x5a\xdd\x87\x9f\x2e\x20\xf1\x70\x87\xb2\xaf\x02\x1f\xed\x8e\x11\x92\x53\x5d\x47\x04\x8a\x5d\x3d\x10\xbf\x47\x7c\x0c\x7c\xf4\xd4\xed\x65\x0f\xf5\xd1\xc1\x9a\x14\xb2\x6e\x5a\xc3\xa2\x3d\xef\x76\x57\x1e\x51\x7f\x47\x66\xea\xf5\x7f\x7a\x5e\x53\x41\xe7\x6c\x1c\x48\x1b\x77\x28\x1f\xcf\xb3\x49\xfa\x2c\x6c\x45\xb2\x37\xff\x89\xaf\x47\x87\xce\xd1\xbf\xb2\xe1\xec\x91\x7b\xc1\xda\x23\xf9\xf1\xf6\xc8\xfd\x63\xee\x91\x00\x81\xba\xab\x02\xe8\xbd\xa3\x6f\x55\x04\x39\x25\xe3\x36\x11\x94\xd3\x54\x76\xca\x86\xa3\x85\x6b\x22\x6b\x6e\x0c\xf3\xe5\x88\x41\xa4\x8c\x08\x37\x3d\x74\x4c\x27\x40\x21\xc0\x89\xd5\x83\xec\x43\x53\xf1\x82\x9b\xa8\x7d\x5d\x22\x80\xc4\xea\x05\x0e\x84\x6b\xae\x51\x95\x17\x84\xd7\x4d\xc5\x82\x06\x3e\x76\xe8\x42\x3e\x08\x17\xde\xa6\x80\xda\x14\xc2\x3e\x40\x28\x16\x09\x7e\x92\xdb\x77\xbc\x9e\xe4\xf6\x0d\xd7\x93\xdc\xce\x2e\xb7\x11\xbb\x74\x38\x14\x70\x4f\x5e\xfb\x87\xba\xee\x4b\x74\xca\x2a\xf2\x6b\xcb\xd4\x92\x58\x03\xab\xc3\x05\x91\x56\xd8\x69\x5e\x22\x7e\x85\xcf\xe9\xd8\xa1\x08\x41\x4e\xe5\x1c\x72\x46\x4e\x3e\x58\xfb\x16\xba\x52\x64\x3f\x25\x57\x07\xe8\xf7\xbe\xc2\x55\x08\x2b\x13\x5b\xa5\x58\x48\x15\x7f\x02\x26\xe6\xe1\xdb\xe3\x9c\x0e\x8c\x1c\x65\x2a\x24\x5f\xa9\x0a\xb9\x27\x25\x83\x90\xc3\x5b\xe6\x1a\xd7\x24\x7c\x03\xe7\x78\x28\x6b\x0a\xd1\x5c\x72\xc9\x96\x23\x57\xea\x49\x2c\x07\x52\x7f\x73\x26\x12\xb1\x7a\x1e\xd5\x9f\x4b\x86\x79\x1c\xc3\x7a\x95\xf6\xaf\xcc\x07\x62\xce\x50\x1d\x5e\x63\xfb\xda\xd9\x9e\xe5\x97\x28\xcf\x19\x9d\xf9\xcc\x27\xf6\x55\x73\x3d\x6a\x65\xcf\x58\xde\x71\xde\x6d\xe4\x79\xfb\x41\x40\xa3\x0c\x6c\x0e\x48\xa1\x20\xf0\xf3\xb0\x17\xc9\x1d\x4c\xc0\xcb\x2f\xe3\x3d\x4d\x56\x36\x01\x43\x22\x5a\xfb\x78\x86\x97\x6c\xf9\x4c\xbb\x36\x24\x52\xe8\x05\x6f\x40\x7d\x87\x64\x26\x39\xcb\xba\xc5\xf1\xfa\x11\xca\x61\x3d\x31\x78\x6e\x9c\x8a\x11\x79\x2b\x8d\xfd\xcf\x09\x80\x53\x80\x78\x39\x96\x4c\xbf\x95\x06\x3e\xd9\x69\x2e\xc0\x49\x7a\x0c\x3c\xe0\x72\x8e\x38\x64\xfc\xc0\xf1\x8a\xf8\xd5\x80\x55\xe8\xd6\xda\x57\x1d\x05\x7e\xe1\x9a\x9c\x0a\x22\x95\x5b\xa2\x8c\xe4\x80\x6b\x1e\x49\x42\x62\x7c\xbc\xbb\x4b\x0a\xdc\x44\x8d\xe3\x11\xa9\x7a\x2c\xf2\x20\x84\x39\xa2\x20\xea\x83\xdf\x40\x74\x0b\x72\x61\x3d\x74\x01\x80\x5e\x29\x6a\xd8\x3c\x43\x12\x6f\x77\xd5\x4c\xcd\xa1\x4f\x50\xb1\xc8\xbd\x1b\x72\x29\x5a\x78\x65\x54\xb7\xf0\xba\x87\x2d\x7b\xaf\xd5\xc2\x0f\x32\x00\xe8\xee\xdf\x03\xc4\xc7\xae\x7a\xcf\x22\x12\x51\x8b\xad\x69\x63\xe5\xcd\xff\xb3\xca\x2a\x6c\xaf\xff\x21\x0d\xe5\x4a\x4f\xc8\x21\xd1\x5c\xcc\x2b\xd6\xfb\xce\x05\x8b\xa3\xc7\x64\x22\x0b\x72\x59\xac\x7e\x78\x45\x2b\x86\x38\x4d\x54\x10\x86\xee\x2a\xc0\xe7\x5e\x31\x8c\x46\xe4\x7a\x21\x35\x6a\xbe\xa1\xc4\x60\xef\x92\x2d\xf7\x46\x59\x42\x61\x24\x3e\x9f\xed\xa3\x4f\xc5\x5e\xd7\x08\xae\x27\x89\x82\xee\x0f\x19\x8f\x7b\xf0\xdd\xde\xc3\xd8\x63\x8f\xc0\x5d\xf5\x28\x8a\x9c\x5c\xb8\xf1\xa8\xa2\x98\x22\xb0\x6b\xc1\xf5\x55\xfa\x56\x33\x7e\x00\xe9\x3e\xba\xa7\x4b\xef\x70\x28\x67\x3b\x17\xc5\x05\xdc\xe2\x4c\xe0\x19\x19\x98\x0b\xc9\x3a\x34\x46\xf1\x69\x6b\x98\xde\x59\x4e\xb8\x91\xd0\x08\xd6\x2d\xf4\x4f\xb5\x2b\xff\xe3\xa6\x1f\x44\x08\x78\x5c\xe7\x62\x8e\xd3\xd9\x6a\xee\x64\x04\xa9\x1b\xe3\x22\x48\xe5\x10\xf6\xd6\xaa\xf0\xec\xdf\x34\x90\xea\x30\xd4\x87\xa7\x53\x75\xc9\x9a\x8a\xe9\x46\x62\xd5\xd9\xc6\x89\x71\x8a\xe4\x82\x6a\xc8\xba\x9f\xb9\xa4\xa8\xa6\x55\x8d\x04\x2c\x74\x2a\xd6\x36\x63\x16\xdc\x08\x07\x12\xe2\x41\x98\x10\x70\x2e\xec\x5c\xbb\xdf\x43\xff\xcb\xc3\x95\xce\x2f\x52\x41\x33\x09\x57\x18\x20\x4a\x5e\x38\xbf\x10\x35\x44\xa4\x01\x18\xc7\xd7\x66\x06\xf2\x95\x4b\xe8\x16\x08\xf0\xf7\xc8\x4a\xde\x44\x40\xda\x99\x30\x90\x63\x23\xc8\xa9\x98\x31\xaa\xf9\xb4\x62\xae\xb8\x41\x1b\x6a\x32\xcc\x5f\x94\x90\xef\xe6\xd1\x9a\xd3\xa0\x45\x70\xa3\x57\x93\x6b\xf6\xb9\x28\xaa\x16\x78\x40\xf0\xea\x00\x5c\xd8\x54\x14\xac\x42\xdd\x46\x96\x01\x8d\x2b\x1b\x5e\x44\x94\x48\x34\x63\x4a\xe1\x7c\x4d\x97\x9b\x77\x33\x29\x25\xc3\x54\x64\x00\x52\x19\xe1\xeb\x6d\xae\x90\x71\xcb\x30\xfc\x80\xc1\xd9\xa2\xe4\x8c\xe1\xee\xc0\x95\x21\xd4\x1e\x25\xb3\x0a\x71\xe0\xdc\x59\x02\x33\xe4\x2a\x1d\xce\xa3\x8c\xa1\x11\x82\x82\x3a\xec\xce\xb8\xf1\xe7\x60\xf2\x1c\x40\xe6\xb6\xce\x2f\x5c\xa6\x71\x27\x99\xc6\x70\x7c\xb1\xc1\x81\xc7\xcc\xe7\xd7\x9b\xc1\xfd\xbd\xef\xeb\xc0\x82\x36\xd1\xbe\x25\x46\xaf\x55\x57\x57\x23\x7d\x4f\x3a\xcb\x8f\xb0\xe9\xe5\x8c\xbc\xe6\x15\xd3\x4b\x6d\xb0\xf8\x91\xd7\x28\xb8\xb0\x3c\x54\x1a\x82\x52\x01\x93\xe9\x50\x70\xd9\xd3\x2c\x4f\x20\x2b\xdb\x0a\x67\x57\x49\xba\xc7\x7a\x9d\xd2\x57\x65\xaf\xc1\xd6\xae\x4a\x20\x28\xd9\x0d\xf5\x50\x59\x56\x6b\xd0\x6c\xcd\x92\x60\x1d\x7b\xb3\x31\x2b\xfa\xbe\xd8\xd7\x7c\xaa\x18\x39\x5a\x50\x21\x58\x15\xf5\x8b\x74\xa9\x1b\xd4\x18\x5a\x2c\x50\x9a\x53\x62\x25\x49\xc5\xcc\x33\x4d\x16\x52\x1b\x52\xd3\x62\xc1\x45\x68\x34\x25\x42\xdf\xd4\x0e\x05\xf8\x11\x02\xdd\xcf\xf4\x85\x25\x20\x71\x9d\x73\x09\x17\xa4\xc2\x73\xec\xac\xdb\xd8\x20\x55\x8c\x24\x90\x06\x94\xa1\xc9\xde\xda\xb3\x43\x0f\x68\x2f\xa5\x60\xad\xd1\x53\x00\xe7\x26\xdc\x9b\x3e\xf2\xc9\x87\x09\xd9\x63\x1f\xcc\x37\x7b\x23\xb2\xf7\x61\xa6\xed\x7f\x84\x99\xe9\xbd\x09\x39\xad\x43\xa2\x10\x17\x91\x1a\xc1\xdc\x0f\x08\x9f\x91\x56\x0c\x2e\xea\x1c\x2c\xb1\xaa\x56\x64\xe1\x8f\x67\x55\x2b\xec\x12\xbf\x73\xad\x98\x5f\x91\xd7\x47\xc4\x50\x35\x67\xc6\x8e\x41\x44\x5b\x4f\x99\x4a\x6d\xd9\x9a\x23\x71\x64\x78\x9b\x7d\xc5\x68\xf9\x4e\x54\xc9\xb1\xbd\x5c\x1b\xca\xd3\xd1\x9f\xef\xe3\x28\x71\x6d\x46\x2b\xcd\xc8\xbe\xbd\xf1\xf9\xb5\xe2\x86\x1d\x4c\xc8\x7b\xff\x2b\x28\x7f\x07\x5d\x74\x26\x87\xe8\x7b\x58\x35\xe2\x1e\xaa\x99\x41\xcc\x62\xe1\x6c\x90\x37\x76\x53\x27\x6b\x81\xb8\xe0\x53\x29\x2b\x96\x08\xe9\x8e\xbc\xf7\xd3\x4f\x6f\x93\x5d\x63\x7d\xfe\xee\x9e\x77\x13\x9b\x5f\x4b\x55\x95\xd7\xbc\x74\x85\x47\x64\xdf\xde\x7c\x30\x8c\xe5\x87\x84\x16\x06\x06\x12\x72\xb7\xb5\xcb\xe3\xc3\xbf\xbe\xe6\x65\x9e\x15\x1d\xb0\x01\x81\x88\x3e\x0f\x78\xc7\x88\xe5\x01\x02\x4c\xc0\x4b\x26\x8c\x15\xee\x4a\x93\x7d\xf8\x45\x3a\x8e\xe6\x09\xc7\xbe\x27\x30\xae\x54\xa4\x90\xf5\x94\x8b\xae\x2d\x51\xc7\x9b\x56\x81\xb1\xf2\xd6\x47\xdc\x34\x33\xd8\x4b\x00\x50\x0d\xa5\x59\x10\xcd\xeb\xb6\x32\x54\x30\xd9\xea\x2a\x19\x4e\xe3\x89\x3d\xd7\xae\x59\xc5\x3e\xa0\xec\xdb\x56\xd3\xc5\x8e\x82\xbe\x66\x0c\x48\x15\x5d\x67\xb8\x55\xd5\x38\x69\xac\x0e\x1e\xa9\x7c\x1e\x54\xeb\xd0\xe7\x84\x7d\x60\x85\x43\x51\x6d\xaa\x76\xce\x13\xbd\x33\xc7\xf6\x2d\x0a\x6a\x58\xf9\x8a\xbc\xee\x5e\x0e\x30\xba\xfc\x37\x13\x72\xe4\x73\x1a\xdd\xf0\xe4\xe8\xfc\xf4\xd8\x35\x07\x13\xda\x30\xba\x0d\xdd\x7d\x58\x02\xd5\xd8\xb9\x62\xb7\x60\x34\xe0\xc0\x59\x44\x6c\xd7\xa1\x6d\x35\xfe\xe1\xbe\x71\x9d\xb7\x43\x07\xe5\x61\xcd\xac\x06\x8b\x84\x27\x7b\x69\x6b\xf6\x52\xdc\x70\x39\x22\xab\x64\x0d\x13\xf6\xcc\x13\xf1\xfe\xc7\x79\xde\x1a\x9b\x48\x58\xe3\x4c\x7a\xa5\x7b\x58\x5f\xa9\x8c\x7c\xe4\x0b\x59\x95\x9a\xb0\x0f\x46\x51\x7b\xec\xd7\xf6\x80\x0f\xbf\x99\x11\x2a\x96\x93\x61\x2a\xe6\xa0\xb0\x74\xde\x50\xf4\xe0\x95\xd9\x6d\x0b\xad\x7c\xb2\xd0\xe2\x4b\xb3\x42\x31\x33\x00\x46\x2d\x5b\xe3\x7f\x4f\x48\x7f\xb9\x7a\x1f\xaf\x39\x58\xf1\x5b\x0f\xd2\xe0\xd2\x4a\x86\xf8\x8d\x35\x13\x9a\x1b\x7e\xd5\xeb\x0e\x0a\x30\xa8\x54\xeb\xe0\x87\x04\x65\xca\x09\x40\xdd\x43\x28\x4d\x1e\x18\xe3\x93\x7c\x46\x84\x5c\x79\xab\x18\xba\x22\xc4\x09\x7b\xb7\x24\x0f\x1a\xf2\x70\x6a\x6c\xac\x4d\x05\x00\x1e\xe2\xc3\x47\x80\xb5\x86\xff\xc6\x54\x1c\x3b\x07\x91\x37\x16\x66\x21\x7d\xa6\xdd\xec\x6d\x4f\x6c\xe6\x48\x39\x1f\x8a\x50\x93\x33\x76\xf4\x36\x52\xed\x3c\x38\xc9\xb0\xf0\x42\xbf\x93\x1c\x9b\xcd\x58\x61\xf7\x06\x74\xaf\xf3\xad\xd8\xac\x59\x5b\xb6\x08\x00\xe2\x01\x49\xfb\x80\xa2\x43\xa1\xf7\x22\x98\x89\x2e\x7b\xf5\x54\x68\x43\x01\x23\x12\xde\xd8\xea\x69\x56\x79\x72\xfd\x07\xdd\x76\xc2\xe8\xb5\x47\x9a\x1c\x48\x44\x6d\xd5\xb0\x82\x29\xbb\x63\xaa\x25\xb9\x56\x72\x68\xd1\xd6\x1d\x63\xab\xf2\x8a\xa9\x2b\xce\xae\x9f\x3b\xc4\x9a\xb1\x7d\xd9\xb1\x03\x01\x7c\x0e\xee\xae\xe7\x5f\xc0\x7f\x06\x50\x95\x29\xfa\xe6\x4e\xd9\x57\x64\x6f\x2f\x87\x5f\x60\x70\xea\xda\x0c\x9a\x70\x26\x19\x54\x79\x7c\x02\x30\xfc\x4a\xa8\xcc\x7d\xe8\x1c\x02\x9f\x12\x1a\x73\x67\x4d\xa4\x90\xdb\xcd\xee\x1f\xe4\xda\xb7\x10\x6d\xf9\xa4\x03\x59\x6a\x85\x48\xae\x2f\xec\xdb\xfe\x38\x4c\xcf\xf0\x0f\x09\x9e\x5c\x8c\x8d\x62\x2c\xbc\xaa\x71\xe6\x93\x90\xbe\xf1\x79\x30\x6c\x1e\x61\x10\xaf\xa4\x86\x6a\x66\x86\x04\x93\x73\x89\xfa\x88\x14\x3b\xbf\xb1\xd4\x77\x5f\x41\xbe\x15\x03\xa4\x6a\xdf\xdb\x91\x8c\xff\xe4\x4c\x7f\xd1\xbb\xd3\x1a\xfd\x6e\x5d\xd3\x4f\x72\x44\x24\x82\x6e\x2d\xe8\x03\xc2\xb1\x3b\x26\xd9\x96\x8d\xe8\xde\xf2\x87\x1f\x4e\x8f\xf3\xb8\x52\xba\xe7\x79\xcf\x00\xfc\xbb\x3f\xfd\x6e\x93\x72\x4d\x5a\xc1\x7f\x6d\x63\x27\x34\x74\xed\x0f\x1b\xc9\xdd\xbf\x8d\xd9\x99\x17\xac\x4b\x4e\x38\xe6\xfa\x72\x5b\x92\x71\x8d\x90\xbe\x8c\xfc\xcb\xd1\x09\x71\x9f\xde\x96\x49\x90\x34\xf4\xc3\x64\x1f\xf4\x65\xe8\x5f\x8e\x4e\x56\x5e\x77\xc5\x8d\x7a\x58\x55\xde\xd7\x23\x85\x0e\xa0\x9e\x4e\xba\x66\x9a\x62\x90\xcd\x56\xa3\x57\xac\xe4\x0a\x53\xd5\xfc\x5b\x96\x93\x42\xf3\xd0\xf4\x6c\x7e\xc9\x26\x5c\x46\x69\xa9\x69\x53\x30\x28\x8b\x4c\x7f\x31\x2f\x58\x97\x10\x5d\x72\x7d\xf9\xf8\x3c\xc9\x4d\xf9\x36\x0d\xe4\xf6\x73\x4b\x3f\x59\x75\x77\x3a\xd9\xe9\x94\x20\xd8\xdd\x4b\xd9\x92\x6b\xd7\x7b\x7c\xa0\x9b\xf5\x82\x37\xaf\xc8\x89\xd0\xad\x62\x5d\x85\xee\x2a\x09\xd6\xc2\xbe\x77\xa7\x2b\x34\xd9\xd7\xaf\xb6\x9c\xaa\xb2\x13\x5b\x91\xe4\x38\xdb\x1b\xaa\x0c\x78\x3d\xb7\xcd\xda\x81\x10\xaf\x12\x44\x1f\x88\xfb\xe4\xed\xd3\x99\xc7\x50\x1a\xb9\xde\xb0\xe8\xb9\xe7\x3a\x3c\xbc\xcb\x98\x06\xed\x2f\x07\xff\xbe\x96\xc1\x62\x79\x5e\xb2\xab\xe7\xba\xa4\x2f\x47\xf0\x5a\x1e\x03\xb2\x3f\x07\x54\x93\xbd\x97\x7b\xe9\x23\x9f\xf3\x9a\x57\x54\x55\xd8\x13\x25\x34\x9b\x09\xcf\xb7\x27\xa4\x27\x04\xca\xce\x5e\xec\x91\x7d\xa9\x80\xa2\x82\x0a\x52\x31\xdf\x3f\xc5\x49\xd2\x25\x3a\x07\x0e\x3e\x93\x2d\xb4\xed\x7c\x2c\x3c\xd8\xb6\xbe\x09\x4b\x6f\x0f\x39\x9d\x3b\x8e\x73\x9e\x1d\x77\xea\x23\x17\x56\x07\x9b\x90\x1f\x9c\x66\xe7\x74\x73\xe4\xda\x12\x14\x32\xbc\xe3\xf3\xe0\x8e\xcf\x29\x8c\xb3\x12\x90\xb9\xd7\xc0\x0a\x59\xcf\xe4\xfb\x4c\x38\x22\x35\x58\x34\xe7\xe6\x3d\x6b\xe4\xd6\xec\x44\x1c\x7e\x25\xa5\x86\x1b\xfb\x81\xd4\xdc\x48\xb5\x24\xd4\x10\x8a\x27\x43\xd1\x56\x54\x11\xc5\x30\x39\x26\x83\xd9\xe6\x46\x5f\x31\xd6\x2e\x64\x97\x81\x13\x63\x18\x3a\x37\x74\xa0\x6f\xe4\x4e\xe3\xc4\x18\xdd\x89\x3d\xaf\x8e\xb9\xb2\x52\x5a\x62\x55\x18\x37\x47\x61\x30\x84\x53\xaa\xa4\x70\xd0\x46\x76\x44\x97\x85\x33\xe7\xc6\xb5\xd8\x45\x02\xec\xd7\xfe\x69\x49\xa4\x00\x05\x20\x53\x65\xf9\x4c\x77\x6f\xfc\x08\x73\x7b\x3a\xc6\xd9\x86\x3f\x11\xcc\x6e\xa9\xb6\x2e\x5d\x03\x21\xa1\x49\x04\xe6\xd1\x76\x9f\x0f\x53\x1c\x21\xcf\x45\xc8\x10\x9c\x25\x58\xc3\xa8\x0c\xee\x91\x67\x93\xc9\xb3\x09\xa8\xb2\xcf\x26\xcf\xbc\x21\x56\x85\x72\x58\xa7\xed\x75\xc4\xf8\x22\xca\x21\x80\x05\x7d\xa9\x31\x21\xe4\x9d\x47\xfd\x84\x76\x96\x2b\x15\xb9\xa1\xd8\xb6\xaa\xc2\x3b\x40\xd3\x95\xbe\xec\x19\x10\x09\x85\x78\x6e\x3b\x8d\x5f\xd2\x15\xf6\xce\xf9\x95\xeb\x06\xb7\xb5\x34\x9b\xee\x15\xb3\x70\x6a\x3c\x63\xce\x81\xfa\xfe\xfb\xed\xbd\x1b\x8a\xee\x4c\x6f\xe6\xce\x01\xf7\x5e\x85\xac\x6b\x6e\xc8\x82\xea\x45\xf0\xe2\x75\x9d\x71\x86\x1d\x4d\x43\x9d\xbf\x55\xab\x0d\x53\xb3\x24\xd9\x95\xe5\x30\xf7\x04\xac\x38\x7b\xc3\xc7\x0e\x93\x58\x74\xae\x18\x38\xe4\xf4\x82\x2a\x66\xef\x6c\xe0\xf4\xa9\xf8\x8c\x19\x9e\xba\x39\x7a\xe7\x7b\x18\xf9\xf6\xe0\x56\x47\xf8\x6e\x85\xb7\x86\x9e\x85\x4c\x94\x8d\xe4\xa9\xad\x1a\xc6\xa4\xa1\x26\xa5\x21\xea\xd0\x53\x34\x90\x9d\x65\x07\x87\xa7\xf9\x2d\xec\x3f\x40\x63\x12\x38\xd0\xf5\x5f\x89\x18\xc6\xc8\x46\x56\x72\x3e\x30\x87\x7f\x90\x23\xcc\x2c\xb6\xad\x45\x58\x1a\xfc\xac\x75\x53\x13\x7c\x35\x66\x00\xda\xd7\x06\xe3\x89\x39\x67\x94\x6f\xd9\xe3\x0c\xa5\xe7\x61\x77\x3e\x7f\x7f\x72\x78\xfc\xe6\x64\x52\x97\x5f\x20\x06\xc4\x98\x8e\x1b\xb9\xb5\x30\xe4\xa3\xb0\xa4\xd7\x96\x0d\xbd\xcf\x20\x89\x59\x89\x3a\x89\x7d\xc0\x18\x30\x9b\x1a\xa6\x6a\x8e\xb8\x52\xbb\x6a\x62\x6f\x85\x4b\x52\xad\x6b\x7b\xc6\x9d\x25\x6e\xe4\x1c\xec\xe1\xc7\xef\x1f\xc8\x8d\x62\x63\x00\x92\xb0\xb6\xe4\x8c\x57\x00\x44\xd3\xe9\xa9\xd1\xf9\x9c\x34\xa8\x8f\xb8\xfa\x90\x2e\x3e\xb9\x5a\xae\x46\x5e\x3b\x2b\x33\x44\xd6\xb1\xed\x6b\x55\xa5\xd5\x3d\x01\x96\x8f\x55\xca\x5c\x14\x88\xce\xe1\x85\xa5\x72\x1d\x04\x1b\xc5\xaf\x78\xc5\xe6\x96\x84\x05\x17\x73\xdd\x75\x20\x72\xc9\x68\x49\xc3\x02\xc6\x10\xeb\x74\x9a\x90\xd4\xf3\x06\x52\xcb\x02\x38\x3f\x6e\xcd\xb7\xef\x2e\x88\x60\x48\x42\xe2\x26\x1b\xe8\x78\xb2\x44\x26\x9e\xec\xdb\x8e\xb6\x6e\x47\x1f\xd9\x99\xa3\xd8\x27\xa4\x6c\xda\xaa\x83\x02\x4e\x18\xdb\xc1\xc3\x9e\x12\xbd\xac\x2b\x2e\x2e\xa1\x65\x87\x3b\x4e\x5c\xfb\x3b\x46\xec\x17\x7e\x03\x2b\x46\xab\xfc\x6a\xc0\x03\xb1\x32\xc9\xa1\x02\x98\x1d\x88\xc1\x83\xc9\x62\xa5\xde\x5f\xbd\xb0\x47\x4f\x79\x96\xf3\x3b\x39\xcf\xf3\x51\x2f\x2d\xaf\xe9\x7c\x6b\x85\xa6\x30\x78\xef\xc0\x16\xe4\xdd\xd1\xa9\xaf\x1b\xd8\x8f\x1d\xd2\x78\xaf\x54\x84\x2a\xc3\x67\xb4\x30\x07\xa4\x69\xab\xca\x99\xb8\x5e\xc9\x73\x52\xe2\x86\xdc\xd3\x24\x22\x2f\x3a\x17\x1a\x14\x70\x68\x59\x5d\xd9\x51\x8d\xb5\xe1\xd1\x13\xd8\x36\x2e\xa1\x15\xa0\xd9\x04\xb9\x5e\xf0\x62\x41\xce\xda\xaa\x3a\x93\x15\x2f\x96\xa1\x81\x3b\x3a\xdb\x4b\x7b\x2c\x24\x9e\x0b\x87\xd5\x35\x5d\xea\x57\xf1\x5b\x12\x0a\x9f\x11\x6a\x0c\xab\x1b\x64\x66\x3b\x35\xab\x2d\x3a\x3b\x7f\x3b\x28\x8b\xdc\x12\x0a\x22\x8f\xf2\x2a\x48\xc6\xd6\x7d\x90\x78\x5e\x8f\xc9\x5b\x76\xc5\x54\x9f\x3e\x61\x3f\x82\x47\xeb\x3e\x4d\xb0\x74\xa0\x8d\xb7\x1a\xbc\x22\xd8\x33\x7e\x6d\xa9\x3f\x42\x3b\x9f\xad\x3c\x96\x6b\xf1\xcc\x10\xc7\x55\xa9\x2f\x72\x3a\x7b\x2b\xcd\x19\x3e\xa3\xff\x3e\xf8\x26\x37\x8c\x4a\x2b\x6b\x63\x2c\xfd\xe8\x96\x1d\x4a\xae\x2f\x07\xbd\x42\xf0\xe2\xc4\xcb\x33\x94\x99\xe7\xcc\x58\x76\x1e\x07\x8e\x76\x34\x58\xae\x86\xef\x4a\xfb\xb2\x6e\x7f\x29\xe6\xa0\x08\x47\x8e\xb9\x6b\x46\x85\xc7\x1b\x64\xd7\x44\xb1\x5a\x1a\xd4\x73\x2d\xbd\xce\xc9\x5d\xc8\x9a\x11\x7a\x45\x79\x45\xa7\x15\x64\xee\xda\x87\xbb\x67\x25\xfb\x0e\x0f\x61\x06\x20\x1f\x4a\xfa\xfd\x68\xb9\x25\xf0\x3c\xf2\x8f\x83\x01\x8f\x37\x29\x92\x55\xc9\xe2\x32\xd6\x55\x67\x4a\xd6\x78\x0b\x56\x9d\x97\x50\x09\x45\xcb\x92\x68\x3e\x17\x00\x0c\x28\x0c\xa9\xa8\x61\xa2\x58\x4e\x88\x6b\x2c\xda\xc1\x21\x2a\x66\x14\x0f\x55\xeb\x42\xaa\x9a\x56\x7e\x92\xa7\xb4\xb8\x94\xb3\x19\x3c\xb5\xbb\xdf\x25\x6a\x39\x61\x85\x73\x42\xb5\x14\x38\x38\xd3\x9a\xce\x07\x08\x2b\xe8\x18\x6e\x15\x28\x57\x58\x81\xab\xe4\xa0\x42\xbd\xa0\xf4\x38\xa0\x3e\x75\x5f\x79\xa8\xb6\x0e\x8a\x2d\xf0\xab\x6a\x85\xe1\x56\xfc\xf5\x7a\x89\x11\x88\x18\xae\x25\x9e\xda\xa1\x5c\x63\x36\x00\x8f\x70\x10\x6b\x50\x8a\x75\x05\x5d\x07\x90\xbe\xb5\x7c\xb5\x55\x51\x0f\x55\x3b\xe9\xb3\x10\x9d\x23\xc0\xcd\xfe\xc5\xb9\xa5\xda\xc1\x5c\x77\xda\xe5\x3e\xe0\xbe\x75\x4c\xf1\xf7\x2f\xff\x31\xb9\x8a\xa3\xf0\xf0\x73\xab\x72\x1c\x58\x7a\x6b\xa6\xe6\x88\x82\xc6\x48\x4d\x05\x9f\x31\x6d\x39\x64\x69\xd9\xc9\x45\x57\x34\xad\x19\xb9\xb6\x8c\x84\x39\xb0\x2b\xaf\x97\x28\x5f\x2f\x56\xe2\x39\xd1\x8a\x76\xae\x8d\x7d\x25\x0f\x60\x2d\x00\xc0\xff\x03\x2b\x5a\x03\xfb\x0f\xb2\x06\xc9\xbe\x90\xf6\xb3\xc4\xec\xa1\xf3\x76\x8a\xea\x33\x0c\xbb\xf2\x6a\x58\x64\x07\x0d\xf5\xc3\xea\x7e\x74\x66\x75\x3b\x6d\x70\x5e\xd9\xcc\xea\x51\x2f\x27\x5f\x7f\x9d\x3e\x39\x58\xeb\x05\x63\x6a\x56\xb4\x8a\x9b\xa5\x15\xbc\xec\x83\x99\xcc\x34\x74\xd0\x3f\x02\xb8\x55\x77\x30\x2f\x28\x38\xc0\xb1\x30\x0c\x37\x64\xb7\x29\x2c\xa3\x3e\xc2\x4a\x8f\x26\xe8\x1d\xdb\xd6\xd7\xdd\x24\xcf\x9c\x70\xb6\x3b\xa6\xdb\x96\x7a\x42\xce\xa4\x46\x64\xd8\x80\xad\x3e\xa0\x14\x71\xc7\x35\x23\x7b\x7d\x26\xba\x11\x01\x4b\x7a\xb7\xb5\xa3\xd4\xf7\x8a\x2d\x42\xe4\x28\x3b\xfa\x2b\x68\xbb\x65\x88\xa1\xf3\x95\x46\xfc\x52\xf5\xa6\xa2\xeb\xbf\xb9\xc5\x78\xb7\x9b\xa5\x6d\xef\xfe\xf7\xde\x05\x46\x4e\x57\x99\xb6\x5f\x07\xef\x10\xcc\xd3\x17\xed\x5b\xb6\xa0\x57\x6c\xe3\xd1\xdb\xc8\x72\xb2\xe1\x04\x82\x6d\x94\x3e\xa0\x35\xed\x42\x61\x79\x80\xc5\xd6\x9a\xd5\xd0\x60\xfe\x06\x15\x60\x93\x96\x33\x5d\x92\x4a\x4a\x80\x54\x6d\x1b\x22\x64\xc9\xec\x06\x80\x94\x4e\x5a\xe9\x11\x39\x3f\x74\x37\x36\xd1\x90\xd8\x94\x02\x34\xdb\x86\x15\x1b\x6e\x78\x30\x2f\x55\xd4\x8f\x15\xd5\x9a\xf4\x3a\x87\x5e\xa5\xb6\x74\xf0\x09\x50\x1b\x05\x1e\x39\xd7\x0c\xbf\x62\x57\x0c\xd2\x58\x66\x7c\x4e\xb0\x3d\x6c\xed\x9a\x87\xf8\xec\x71\xa9\xa0\x5d\xa5\xe2\x65\xba\x63\x68\x55\x5b\xb3\x4b\x7a\x2d\xd5\x65\x25\x69\xe9\xab\x54\x2b\xab\xf0\x54\xfc\x92\x91\x63\xd6\x54\x72\xe9\x3a\x7e\x88\x92\x9c\x1b\x6a\xd8\xac\xad\xce\x07\x2c\xc5\x30\xaf\x8e\x2e\x34\xdf\x9a\x57\xc7\x0e\xbe\xe2\xd5\x39\x3d\x3f\x3a\x3f\x7d\xf4\x75\x70\xc3\xfc\x7c\xcf\xbf\x80\x99\x79\x7c\xb1\x08\xfe\x6b\x5a\x6a\xd8\x98\x54\x6d\xea\x2f\x31\x89\xef\x4c\x2a\x43\xab\x2d\xe8\xd0\xc5\x82\x36\x87\xad\x59\x1c\x73\x5d\x58\x61\x92\x47\x95\x5e\x7b\x6a\x04\x8f\xce\x20\x6e\xe7\xec\x26\xc2\xfd\x7e\x71\xf7\x1d\xfd\xf5\xf0\x8c\xd0\xd6\x72\xb3\x71\x8d\x0a\xb6\x12\xe5\x25\xd1\xdc\x9c\x63\x5b\xa6\xac\x33\xe3\x9e\xf9\x91\x79\xf1\x77\xed\xd2\xac\xec\x5a\x95\xe2\xa6\x32\xc1\xa7\x4a\xc5\x47\x55\xa9\x98\x7a\x5c\x90\x1c\x66\x04\x17\xdc\x70\x6a\xa4\xda\x85\xe2\xa8\x1e\x31\x21\x3f\xb5\xd5\x46\xd6\x4e\x24\x9c\xfa\x3b\x00\x4e\x62\x50\x84\x78\x6d\xb0\x2e\xe9\x15\x72\x88\x60\x59\x4e\x85\x61\x6a\x46\x0b\xb6\x02\x84\x3b\x02\x77\x38\xd2\xc4\xfd\x3d\xc9\xd4\xfc\xd1\xe5\xb2\x37\x70\x0e\xfe\xe9\xd5\x1f\xa3\x52\xc8\x3f\x05\xc3\xc3\xb9\xe6\x63\x1b\x43\xb0\x62\x48\x33\x9b\xe1\xdc\xf3\x6b\x9e\x73\x81\xff\x2a\x56\xd2\xfa\x71\x6a\xff\xb3\xa5\x15\x2e\xc9\x90\xe5\x1e\xfe\x9a\x3d\x56\xd8\xfa\x2e\xe9\x33\xa6\x9b\xb7\xc0\x85\x08\xb4\x02\x92\x19\x5d\x4a\xc2\x4d\xa6\x51\x54\x68\xcb\x62\x79\xdc\x26\xcf\x9c\x21\xf6\x8c\xec\x9b\xa2\x49\xae\x52\xcd\x80\xe3\x14\x30\x9c\xdc\x3f\x92\x1e\x93\xab\xb5\x41\xd5\x8a\xd8\x28\xc2\xa9\xbf\x40\xa6\xfe\x3e\xb4\x36\x18\x36\x5b\x5b\x2f\xa5\x05\x39\xb5\x75\x60\x75\x47\x46\xd8\x01\xf1\x54\xa3\x49\x41\xbe\xe7\xda\x20\x5c\x2c\xde\x0c\xf0\x70\x08\x8f\x6e\xcd\xd5\x33\x22\x15\xe1\xcd\x7f\xd1\xb2\x54\xaf\x50\xf3\xf4\xd1\x51\x95\x8e\x56\xc8\xb5\x4b\xcf\x03\xa0\x42\xef\xaf\xd8\x37\xcb\x86\x17\xb4\xaa\x96\xe4\xe2\xe8\x0c\x46\xd0\xe4\x0f\xbf\x7b\x01\xf6\xeb\xd7\x5f\xfd\xee\xc5\xc0\x2d\xf4\x84\xae\xbe\x72\x3d\x8a\x6c\xe6\x47\x50\x17\xbc\x6b\xd8\xad\x3d\xa4\x55\xe8\x45\x69\xed\xc3\x73\x04\x1a\xb5\xca\x91\x3b\xee\x50\x10\xd8\xdd\x15\x54\xbd\x9c\x56\xe4\x13\xa4\x67\x74\x3d\x41\x7a\x3e\x41\x7a\x3e\x41\x7a\xde\x7c\xc5\x7e\xce\x6d\x9f\x47\x31\x2d\xd0\x2e\x71\x5d\x6f\x42\x95\xe9\xec\x73\x57\x99\x12\x59\x2d\x55\xf0\xe6\x58\xc0\x18\x2e\x66\x48\xff\x8b\xae\xad\xc3\xf1\xdb\xf3\xff\xfa\xfe\xf0\xdb\x93\xef\x61\x56\x1d\x2a\x8d\xdd\xde\x5c\x3c\x68\x18\xe5\x5e\x45\xcc\xb0\xf5\xde\x5e\x01\xb2\x58\x29\x3d\x16\xe4\xed\xeb\xf3\x3b\x56\x1d\x6f\x21\x06\xf6\x85\x98\xa5\xaf\xd2\x63\x2b\xc6\xb1\x3f\xd5\x4c\x6d\xa7\xff\xce\xce\x54\xf2\xf8\x30\x2f\xfb\xd0\xf7\xfa\x5b\x7e\xc5\xd9\xd9\x9a\x83\x3d\x8d\x19\xc9\xbf\x4d\x45\xad\x5d\x22\x5c\xb6\x47\x5f\x4b\xfb\x90\x6c\x31\xcc\x22\x56\xb9\xda\x66\x0d\x6a\x65\xa2\xa2\x8e\x5b\xf6\x20\x41\xf5\x42\x59\x35\xcf\x2a\x78\x4c\x6b\xaf\x6c\xfc\xfb\xee\xe3\x66\x53\x7b\xfe\x6d\x29\x04\x1b\x89\x71\x0d\xfb\x31\xdf\xa6\x57\x18\xdd\x4b\xc0\x4b\xcb\xba\x59\xed\x0d\x0e\x23\xf6\x72\xdf\x40\x29\x6b\x68\x91\xaa\x8a\xa6\x71\x45\x37\x13\x63\xcf\x20\xdd\x47\xf8\x09\x34\x2e\x7f\x84\x8a\x08\xd0\xbd\x25\x18\xe6\x30\xf6\xb6\x85\x53\x20\x64\xb5\x23\x20\xbd\x0b\x4b\x12\xaa\x43\xf5\x0d\x56\xee\x64\x68\x1d\xb8\x93\x3c\x4b\x3e\x4b\x7d\xe5\xa7\x07\x76\x97\x6f\xd3\x55\xde\x2c\xa4\x91\x62\x37\xda\x1d\x6c\xa2\xa5\x7f\xb4\x9c\xc1\x1d\x47\x21\x49\x36\x3a\x9a\x10\x9f\x36\x24\x7c\xae\x54\xee\xba\x34\xce\x1c\x45\xbb\x31\x34\xd6\xd9\x26\x8a\x6f\x47\xc9\xda\xf8\x92\x9f\x17\x60\x56\x53\x9e\x1e\x6f\xe1\x14\x79\x0c\x69\x72\x9f\x69\x6f\xd4\x07\x4a\x7b\x1b\x0e\x07\x56\x66\x6a\x76\x63\x1f\xe4\xd7\xf8\xf4\xd8\x39\x22\x7c\x27\x1b\xed\xe4\x02\xb9\x59\x50\x6d\xc5\xa6\x90\xca\x5c\x4b\xb5\xe5\x0e\xe0\x7d\x2a\x56\x20\x95\xdc\x77\x6b\x5d\xbf\x1e\x48\x9a\xf7\x49\xbb\x53\xf3\x99\xd5\xf7\xb2\x2b\x95\x44\xd0\x0d\x9d\x67\x3e\x94\x13\x3f\xc2\xa4\x90\x75\xd4\x74\x86\x5c\x2f\x18\x6a\xa1\x47\xe7\xa7\x6f\xf8\x1c\x09\xf4\xef\x42\x66\x8c\x9a\x56\xb1\xf1\x9c\x9a\x34\x82\xb8\x26\x69\xd9\x7e\x5b\x3e\x85\x90\x87\xfe\x9d\x4f\xa2\x73\x38\x89\xa2\x1d\x76\xdb\x89\xf4\x39\x1c\x48\x8f\xe7\x20\xda\x39\x9b\xe7\xa9\xf3\x73\xef\xf2\xc2\x23\xcb\xfa\xf8\x87\xb9\x40\xa7\xe5\xcd\x4e\x55\xa0\xe1\xd8\x71\xf7\x6d\x45\x35\x50\xf2\xbf\xe1\xbc\x19\xac\x15\x84\x27\x61\x7e\x1f\x1c\x93\xb4\xaa\xec\xca\x4a\xc1\x42\x85\x9e\xee\xea\x4d\xb1\xe0\xb2\xa6\x8d\xab\x3d\x2d\xe5\xb5\xb8\xa6\xaa\x24\x87\x67\xa7\x0f\x7f\xea\x0c\xc6\xae\xc7\x7d\xf4\x46\x96\x5b\x97\xff\x11\x29\xa0\x55\x00\xa2\x88\xfd\x63\xca\x8d\x46\x98\x47\x00\x5d\x34\x71\x90\xc5\xaa\x57\x21\xe9\x1f\x40\x3d\xa6\x41\x38\x64\x30\x5a\x04\x91\x85\xa1\x95\xcb\x54\x9a\x32\x73\xcd\x98\x20\x2f\x5e\xbc\xc0\xfc\x8a\x17\xbf\xff\xfd\xef\xa1\x98\x9b\x94\xac\xe0\xf5\xfa\x8d\x70\xd7\x6f\x5f\xbe\x4c\x27\xe5\x6f\x87\x6f\xbe\x27\xb4\x00\x1f\x19\x99\x4a\xb3\x70\x14\x01\xeb\xc5\x83\xea\x11\xf9\x3f\xe7\xef\xde\x7a\x3d\x44\xaf\x7c\x0b\x9c\x1d\xa6\x73\x80\x0f\xc8\x01\xc5\x70\x80\xfd\xe9\x32\x20\xa8\x59\x04\xc8\x13\x0a\x99\x68\x11\xb4\x8e\x93\x97\x03\x0a\xaa\xa0\x2b\x3b\x9f\x2f\x60\x59\xb8\x80\x5d\x58\xf1\xc2\x75\x1e\xc0\xbc\x18\xac\x94\xf6\xf8\x9e\x88\x63\xe2\x55\x88\xe4\x91\xed\x94\x8d\xb0\xb6\xd9\xa1\xa6\x8c\x82\x8f\x44\x31\xdd\x56\x06\x3a\x53\x4d\x99\x23\xa2\xe3\x58\xcd\x92\x39\x70\x37\x52\xd8\x9d\xe8\xdb\xb6\x5c\xf0\x12\xd8\x99\xaf\x15\xb7\x4a\xd9\x2c\x00\x52\xa3\x00\x87\x80\x2b\x39\xa1\xc5\x82\x30\x61\xa0\x87\x03\xb2\x9e\xbd\x3d\x79\xe8\x05\x15\xa5\x95\x29\xd0\x48\x1f\xc8\x78\xb4\xf9\xe7\xf9\x32\x59\xcf\xc2\x8c\xf7\xe0\xb4\xba\x93\x94\x56\x52\xcc\xe3\x8d\xd9\x29\xd6\x11\x9c\xd0\x00\x19\x04\x85\x8d\x00\x2e\x6c\x17\x06\x83\xaf\xda\x01\x1e\x69\xc4\xda\x9a\xb2\x21\xfb\x2f\x4b\xfe\x72\x9e\x0c\x66\x42\x0a\xc4\xb8\xbe\x50\xad\x36\xdf\xb6\x96\x21\x87\x3c\x2d\x6f\x4e\x33\x21\x47\x6b\xd4\x61\x42\xb0\xcb\xb1\x82\x98\x6a\x51\x30\x8d\x9b\xf7\x17\x44\x20\x31\xdd\xdd\xbf\xe0\xb2\x0d\xa4\x42\xce\x36\x11\xe2\x51\xdf\xb8\xb0\x27\x39\x6d\x8d\x1c\xb7\x4d\x49\x03\x02\x76\x22\x72\x60\x77\x1d\x56\xcd\x82\x8e\xc8\x9c\x46\x46\xe3\x3a\x1d\xd1\x86\x71\xde\x0d\xf8\xc5\xe0\xd1\x6f\x79\x63\x7b\x24\xb9\x84\x54\xd8\x09\x55\x38\x8f\x05\xad\x19\x60\xf5\x20\xb9\x03\x49\x28\x64\x3d\xe5\xc2\x81\xe0\xcd\x00\x25\x90\x29\x8c\x42\x02\x02\x1e\xa9\xe8\x94\x55\x8e\x00\xa9\x06\xbf\xf2\x77\x1e\x59\x89\x29\x7b\xbe\x69\x42\xe7\x73\xc5\xb4\xe6\x57\xcc\xc1\x0d\xf2\x7f\x06\x6a\xa0\xb5\xd5\xc9\x1b\x0f\xc5\xa8\x89\x35\x0e\x0d\x4b\x6f\xee\x83\x57\x68\x9b\x65\xd9\xbb\xf3\x21\x4c\x08\x39\xd1\xd2\x30\xc5\x0b\x18\xd5\x2d\xb5\x26\xba\x2d\x16\x84\x6a\xac\x3e\x1c\x03\xe6\xe2\xf0\x59\xef\x10\x56\x10\xc4\x71\xc1\x68\xe9\x51\xe7\xac\x51\xd5\x34\xac\x9c\x10\x72\x64\xc5\xcf\x8c\x17\xd4\x20\xa6\x18\x29\x59\xd9\x36\x15\x47\x1f\xe1\x40\x32\x2e\x16\x8c\x48\x55\x32\x00\x97\x94\x33\x48\xbe\x0f\x83\x45\xba\x21\x80\xcd\x73\x3b\xfe\x94\x1b\x45\xd5\x12\x35\x28\xb7\x96\x03\x89\xb0\xa7\x4f\x01\x38\x76\x30\x16\xd0\x03\xa0\x37\x24\xbd\x9b\x8c\xbf\xb2\x1c\x02\x64\xb0\x6f\xb0\xbb\x06\xe4\x5f\xfa\x2b\xcf\x99\x64\x2f\xd8\xda\xe7\x6e\x67\x0f\x7d\x58\xee\x63\xc9\x5e\x48\x1b\x98\xf3\xeb\xa2\x32\x60\x81\x9a\x62\xe1\x34\xc5\xbe\xa8\x22\x04\xfd\x47\x74\x58\x75\x0c\x5e\x0e\x55\x91\x7b\x11\x19\xea\xe9\x99\x99\x58\x73\xd3\xb4\xb4\xaa\x96\x63\xf6\xc1\x1e\xf6\x56\x98\x81\xf6\x04\xcd\xc2\xa0\x10\xbf\x15\x9a\x99\x51\x06\x42\x40\x08\x35\x0a\xd1\x6c\x35\xd9\xc3\xf7\x17\x12\x5a\x23\xec\xe1\x60\xd6\xc4\x9e\xb6\x06\x8b\x74\x46\x9b\x7f\x92\x63\x4e\xae\x98\x5a\xba\x71\x07\x3f\x2e\xdb\x56\x25\x59\xf7\x08\x01\x09\x65\x8a\xc5\xc9\x87\x46\x21\x54\x4b\x96\x67\xae\x6c\x97\xd5\x21\x10\xd1\xdf\x5b\x4a\x7d\xc6\xf6\xc2\x08\x4e\x10\x2c\x62\x89\x3f\x81\x53\xe2\xf0\xed\xf1\xf0\xe3\x01\xaf\xe1\x86\x4f\xff\x1a\x68\x06\xf5\xaf\xfc\x32\x07\xaf\xc3\x5b\xe6\xdc\x75\x5b\xf0\xdf\x60\xc3\x4f\xc4\x58\xd3\xc1\x93\x43\xc9\x25\x73\xc7\x24\x15\x2e\x04\xe1\x6e\xce\x46\xa4\x62\x00\xe5\x88\x88\x95\x6c\x09\x83\xe1\xf8\x79\x56\x3e\xf3\xa6\xc4\x2b\xd7\x49\xda\x5d\x63\xfb\xf2\x19\x9f\xe6\x17\x2b\xd3\x23\xf3\xca\x22\xbc\x2e\x59\x72\x20\x67\xd3\xd5\xdb\x45\x96\x93\xbc\xa7\x06\xf6\x80\xfd\x20\x60\x20\x05\xb6\xa7\xd0\x19\x54\x13\x23\x73\x31\x1b\xc9\x57\x1d\xd9\xbf\xfc\x82\xde\xdb\x94\x65\x14\x3c\x24\xa2\xb7\x9f\xab\x70\xc9\x96\xcf\x34\xee\x79\x7b\x42\x2c\x78\x03\xa6\x39\x1c\xf6\x72\x96\x79\xe3\xe3\xf5\x23\x60\x9c\x7b\x72\xf0\x64\x39\x15\x23\xf2\x56\x1a\xfb\x9f\x93\x0f\x5c\x3b\x1b\xe6\x58\x32\xfd\x56\x1a\xf8\x64\xe7\xf9\x01\xa7\xea\xb1\x70\x83\xf3\xfe\x73\x28\x8c\x83\x63\x18\x0c\x75\x98\x12\xbf\xea\x1e\xd8\x39\x70\x0e\xd7\xe4\x14\xba\xfb\xe2\x52\x65\x25\x08\xaa\x32\x3d\xc8\xb5\x25\xc7\xfb\xeb\x00\xa2\xdd\x55\x8f\xaf\xd3\xe3\xb8\x45\xaa\x1e\xb3\x3c\x10\x69\x8e\x2c\x88\x42\xe0\x37\xd0\xff\xa4\xa9\x68\xc1\x4a\xdf\x5e\x81\xda\x59\xa5\x86\xcd\x13\xeb\x9f\x6f\xba\x6a\xa6\xe6\x10\x60\x29\x06\xb4\x5c\x5a\xbf\x72\x2b\x66\x78\x65\x55\xcf\xf0\xba\x97\x4d\x7c\x2f\x68\x2a\x0f\x3e\x04\xe8\xfd\xdf\xdb\x63\xf6\x3e\xac\x8a\x6c\x92\x28\x22\x13\xb5\xdf\x9a\x36\x56\x0a\xfd\x3f\xab\xe4\xc2\x86\xfb\x1f\xd2\x50\xae\xf4\x84\x1c\xfa\x86\x14\xf1\x77\xce\x8f\x14\x3d\x26\x1b\x61\x0d\xd4\x63\xfe\xda\xf2\x2b\x5a\x39\xf0\x64\x2a\x08\xc3\xe6\x1e\x96\xc6\x55\xd3\x6a\x44\xae\x17\x52\xa3\xc6\x1c\xa0\x37\xf6\x2e\xd9\x72\x6f\x94\xc1\x9f\xea\xaf\x58\xf2\xed\x9d\x8a\xbd\x2e\xe6\xd8\x93\x4f\xc1\x6e\x80\xda\xc3\x3d\xf8\x6e\xef\xa1\x6c\xba\x8c\x7a\x3d\x2d\x4b\x8e\x28\xd7\x67\xd9\xd5\xdd\xac\xe2\x23\x3f\xea\x45\x77\x0d\xc5\xaa\xc1\xeb\xfe\xdc\x68\x7e\x67\x6e\x08\x3b\x4c\x97\xbe\xc1\x8c\x73\x59\xad\x7b\xb4\x32\x10\x02\x3e\xb1\xc8\x7f\x66\xb7\x44\xcf\x09\x99\xcb\x8d\x94\x85\x59\x3c\x6e\xfb\x2e\x2e\xa9\xd5\xaf\x54\xcb\x46\xa4\x94\xe2\x99\x71\x21\x84\xb8\x3d\xd4\x6a\x9b\x89\x72\xc3\xaa\xef\xeb\x83\x0c\xa4\x50\xc5\xa0\x1b\x86\x6f\x8d\xe5\xfc\x9d\xd8\x40\x0a\x62\x55\xc6\xe7\x0b\xdb\x3f\x37\x11\x32\x14\xc0\xc8\x11\xe2\x60\x8c\x84\x84\x53\x00\x5a\xe5\xc6\xc4\x74\x8c\x17\x91\xd4\x8f\x7f\x65\xa0\xe2\x36\xf6\x86\xb3\xb3\x03\x5b\x42\xd7\xed\x3f\x99\x92\x19\xc6\xdd\xe0\x20\xcf\xb5\x9b\x86\xe4\x35\x76\xd7\x10\x10\x87\xee\xea\x6d\xa5\xf7\x60\x0c\x5f\xb9\xe4\x25\xe8\x7d\x16\x61\x42\x2b\x89\x8c\x00\x19\xa5\xf0\xc5\x14\xe6\x65\xa7\x84\x4c\xc7\x2e\xbb\x28\x66\xee\x18\x80\x89\xa2\xc7\x39\xf4\x94\x8f\x44\x55\x2e\x16\xac\x8b\x0c\xcb\x19\x50\xe9\x03\xe5\xf7\xb3\xa1\x02\x4a\x71\x2b\x10\xb0\x17\x73\xf8\xf2\x05\x64\xb3\xb1\x16\xe6\xb8\xbe\xa1\x4d\xc6\x4c\x93\xf0\x4c\xa8\x09\x56\x35\x0a\x4d\x3a\x95\xad\xf1\x50\xcd\xee\xfb\x92\x1a\x0a\xfd\xa9\x30\x6f\x62\x37\x42\xb8\xf9\xfc\xb0\x99\x4c\xe4\xfc\xdb\x15\x33\xa0\xfb\x15\x07\x23\xc2\x68\xb1\xb0\xd6\xce\x18\x53\x5b\xad\x9d\xe6\x0d\xb2\x63\xbb\x50\x68\x04\xc9\x55\x85\x21\xc7\x16\x0a\x1c\xe1\x37\x4e\x94\xad\xed\x93\x30\x7c\xe9\x95\x76\x05\x1d\xce\x3c\x13\x5d\x51\x7c\x06\x4a\x7c\x78\xc4\x37\xf5\x74\x0e\x6e\x98\x11\xf0\x56\x45\xf3\xe5\x73\x14\x59\x69\x7f\x16\x36\x7d\x06\x2a\x36\xbc\x7d\x87\xc7\x6e\xcf\x30\x97\x91\xde\x8a\xb5\xf1\xad\x52\x93\x89\x06\xec\x96\x66\x5f\x9a\x7a\x67\x7f\x84\x0a\x0f\x1d\x51\xa1\x32\xb8\x6b\x4a\xe6\xb8\x25\x2c\x67\x0e\xa7\x5d\xb4\xf4\x9a\x85\x86\xa6\x4c\x29\xa9\xec\xfb\x33\xad\x09\x87\x75\xaa\xa9\xba\x64\x65\xd0\xc6\x27\xe4\xcc\x4e\x94\xf7\xec\x65\xa0\x44\x79\x2d\xc2\xb7\x4b\xb5\xaf\xee\x0c\x73\x20\xf3\xd9\x64\xf2\xcc\x75\x72\x57\xa8\x60\xe3\x39\x64\x3f\xcf\x25\xf1\xf3\xb8\xf1\xb2\x39\xef\x7a\xb2\xe9\x0d\x6d\x34\x3a\x47\xad\x1a\x0d\xe1\x20\x49\x28\xce\x88\xcb\x12\xa2\x83\xc1\x26\xba\x2b\xb3\x73\x22\x6f\xc0\x31\x5f\xb0\x31\x43\x2a\x10\x5e\xb9\x03\x8c\x19\x83\x8b\x37\x05\x16\x1d\x0f\x39\x79\x98\x37\x5a\x9d\xd1\xcf\x5c\x0f\x28\xaa\x59\xbd\xee\x2b\x44\x04\xe5\x0a\x5c\x93\x77\xde\x5b\xf1\x69\x25\x37\x06\x91\x87\x73\x58\x43\xfe\xda\xa1\x9a\x9b\xd5\x6b\xd7\x6a\x70\x56\xaf\xd3\x19\x76\x1a\xee\x2b\x21\xee\x78\x8c\xcb\xaa\x82\x01\x32\xa8\xc7\xe4\xea\xb5\xbd\xe2\x9c\xd5\x6b\x2b\xc5\x3a\xab\x57\x8e\xe2\x9d\xd5\x6b\x78\x31\xcf\xea\x95\xc7\x9f\x82\xd7\x7d\x09\x27\x50\x11\xb8\xef\x06\x1c\x3b\x6b\x9c\xb9\x01\x0a\x3f\xb8\xc2\x9a\xe8\x60\xc8\x28\x93\x9c\x3a\x87\x62\x89\x4e\xb5\xac\x5a\x83\x24\xe4\x1f\x24\xd6\x19\xe1\x25\x7d\x14\x2a\x8f\xa2\xb8\x3a\x5c\xa4\x89\x82\x25\x81\xea\x59\xce\xb1\xee\x2f\xf2\x92\x3b\x96\xba\xab\xa1\x97\xfc\x2d\x03\xf0\xda\x8d\xc6\x01\x78\xed\x44\xfb\x00\x4f\x4a\xfe\x26\x02\x78\xed\x12\xce\x77\xff\xca\xba\x49\x87\xb7\x15\xf0\xd7\x3d\x45\xcf\x42\x33\x65\xd4\x95\x96\xa1\xab\x66\xcf\x41\x01\xf0\xfd\x46\xa3\xff\xc4\xe7\x00\x61\x1f\xce\xe1\x7e\xad\x7c\x41\x91\xfb\x0a\x46\x7b\x44\x83\xc3\xb3\xd3\x8c\xfe\xdf\xe8\xa9\x37\x78\x80\xe3\x3b\x9e\x7c\xc0\x9f\x72\xf5\x26\xf8\x14\xdd\xb7\x71\xe6\xff\x71\x37\xa3\x0e\xe7\x29\x8b\xba\xbd\xfb\x3e\xa7\xb5\x17\x7f\x6d\x35\xc5\xb8\xe7\x5c\xc4\x81\x46\x3a\x08\x89\x4e\xa7\x74\xba\x18\x62\xa1\xfa\x4a\xbf\xe1\x65\xaa\x64\xf7\xfd\x53\x3b\xea\x55\x82\xd9\x1f\xd0\x1d\x6b\xf5\xea\x71\xcb\xb3\xf7\x7e\x12\x5d\xc8\x12\x83\x09\x51\x5c\xa3\x91\xe5\x2b\x4c\xb2\xa2\x42\x48\x83\x39\xd4\x23\x0c\xcf\xeb\x91\x4b\x54\x88\x00\x75\x45\x49\x5a\x5e\x62\x35\x66\x40\xc6\x7c\xf6\xef\x55\x56\x01\x13\x78\x96\x87\x9d\xc8\x3d\x55\x42\xd0\x86\xff\xc8\xd4\x90\xde\xdd\x9b\xae\x1e\x73\xb9\xe7\x7b\x4e\xd2\xc5\x82\xd5\x14\xfe\xf9\xda\x4f\x90\x15\xda\xae\x36\x19\x82\x25\x4c\xd5\x56\xf1\x1d\xf5\x50\xae\xf6\xae\x5e\x66\xa8\x93\xeb\xae\x7b\x49\xab\x0d\x6b\x7e\x6f\xd3\x79\xd6\x33\xff\xed\x16\x05\x0f\x25\x24\x1a\x78\x74\xeb\x10\x8e\xb2\x9a\xc4\x15\xce\xff\x8e\x4f\xdd\x7d\x26\x16\xe2\xf5\x18\xbc\xd1\xa9\x5e\xe8\x51\xd0\xd2\xfb\xde\xe3\x6c\x84\x3d\x79\xa1\x3f\x7e\x3d\x79\xa1\xdd\xf5\xe4\x85\xfe\xe4\xeb\xde\xbc\xd0\x91\x4a\xe7\x4f\xd8\x0d\x6e\xe4\xb8\x53\x9c\xf7\x25\x77\x5d\xe4\x27\x18\x93\xf2\x0e\x60\xef\xfd\x95\xaa\x1f\xde\x7f\x36\x99\x3c\xc3\x00\xff\x24\x04\xb1\x5a\x33\x1b\xff\x81\x30\x51\xc8\xd2\x3e\xe7\x02\x9e\xaf\xb4\x01\x73\xa7\xf3\xe8\xc5\xb4\xd4\x7e\xac\x38\x45\x00\x9e\x9d\x57\x6f\xcc\x78\x6c\x79\x74\xc4\xd7\xf7\xa9\x9c\x67\x3c\x5e\x3a\xe5\xde\x53\xee\x97\xc2\x2d\x28\x53\x4e\xcb\xef\x70\x1f\x2b\x5e\x73\x57\xa5\x68\xe5\x29\xd3\x26\x57\xf1\x09\x21\xfb\xf8\xf0\x49\xd1\xb4\x23\x37\xd0\xa4\x66\xb5\x54\xcb\x51\x18\xcc\x7e\xd9\x1b\xdd\xdd\x71\x00\xc6\x45\xd1\x2a\xc5\x84\xa9\x96\xc3\x00\xf8\x37\x5d\x8f\xc4\xca\xf0\x2b\xb5\xc3\x46\x46\x60\xae\x3c\x79\xba\xdd\xd5\x97\x78\x47\x7e\x18\x0c\x67\x84\xd9\x86\xf3\xde\xb5\x52\x19\x75\x1e\x50\xfb\x29\x13\x57\xe4\x8a\x2a\x9d\x4b\xc2\x90\xfb\xb2\x2b\x4a\x7e\xc5\xf5\x3d\x96\x60\x9f\x3b\xa5\x05\x63\x8d\xb2\x35\x4d\x6b\xdc\x71\xe7\x45\x04\xfb\xd0\x48\xab\x8a\x06\xd1\xb0\x62\x9e\xbd\x1c\xea\xf2\x8e\xaf\x86\x1a\xc3\x94\x78\x45\xfe\xef\xfe\xcf\xbf\xf9\xd7\xf8\xe0\xcf\xfb\xfb\x7f\x7f\x31\xfe\x8f\x7f\xfc\x66\xff\xe7\x09\xfc\xe3\xcb\x83\x3f\x1f\xfc\xcb\xff\xf1\x9b\x83\x83\xfd\xfd\xbf\x7f\xf7\xe6\x2f\x17\x67\x27\xff\xe0\x07\xff\xfa\xbb\x68\xeb\x4b\xfc\xeb\x5f\xfb\x7f\x67\x27\xff\xf8\xc4\x87\x1c\x1c\xfc\xf9\x7f\x65\x7c\x09\x2a\x96\xef\xb2\x9d\x09\x78\x8d\xef\x45\xaf\xe9\x3f\xfb\x7e\x2b\x4d\xb9\x30\x63\xa9\xc6\x38\xc8\x2b\x28\xc3\xc9\x36\x94\x67\xcd\xfb\x93\x31\x9d\x56\x15\x4e\xd0\x60\x7e\xef\xb8\x10\xb9\x5f\x0b\xfb\xde\xc2\xd3\x8d\x2c\x23\x10\xb7\x5d\x42\x7e\x74\xb0\x86\x3a\x60\x2b\x2a\x70\x8c\x8a\xb9\xd5\x9f\x01\x30\x9c\x56\xae\x66\x86\xec\x37\x8a\x5f\x51\xd3\x01\xcd\x44\x58\x71\x03\xc9\x28\x16\x94\x8b\x83\x0e\x62\xa4\x91\x25\x98\x57\xad\x66\xa1\x27\xb7\x55\xf9\x2e\xbe\x3f\x27\x45\xc5\xa1\xac\x57\x85\x36\x8d\x03\x07\xf7\x78\x84\x73\x26\x98\x42\x90\x3d\xb2\xfa\xaa\xad\x66\x90\x8c\x0c\x1b\x45\x94\x89\x2d\x06\xbb\xeb\xac\xc7\x11\xef\x51\x2d\xf4\x8d\x37\xb0\x46\x0e\x2b\x69\x00\xc2\xcc\x35\x05\x73\xb5\x35\xb4\x69\x94\xbc\x62\x39\xf2\xe2\x9d\x3e\x0a\xaf\xc8\xb5\x86\xa2\xe4\x78\x59\x71\x61\x46\x61\x8a\xa0\x8e\xaa\x87\x36\x34\x74\xe1\x57\xc7\x22\x37\xe1\x32\x5e\xb8\x0f\x4b\xc9\x74\x64\x62\xb5\xc2\xf0\x2a\x1f\x11\x9a\x2c\xe8\x15\x23\x53\xc6\x04\x4e\x08\x6a\x5e\x50\x3f\xd1\xdf\xc5\x51\x26\xff\x20\x0c\x7d\x7f\x39\x49\xcc\x05\x44\xad\x01\x61\x35\x17\x63\x3b\x5f\xcd\xdc\xce\xae\x5a\x42\x3c\x4c\x12\xd8\xe8\xc8\x57\xf1\x22\xb8\x0d\x68\x78\x6d\x69\x29\xb1\xa6\x69\x20\x1d\x0e\x54\xd5\xb1\xaf\xef\x4e\xc8\x36\x6f\x82\xc9\xb9\xa1\xa6\xd5\x93\x6f\x2d\xbd\xef\xd9\x4c\x31\xbd\x38\x1c\x6a\xbc\xd8\xd7\xd1\x86\xd6\x4d\xb6\x39\xb5\xd2\x09\xab\x0a\x43\x4d\x35\x3a\x31\xc3\xa4\xf9\xd7\xee\x04\xa9\x43\x92\x1d\x1e\x4d\x01\x9f\xf9\x08\x45\x60\x43\xad\xcc\xc2\xbd\xb2\x61\xf4\x4b\xb6\x04\xdf\x49\xd6\xad\x7a\x64\x77\x2a\x3c\x16\xe1\x9a\x07\xcf\xea\x45\x6f\x9e\xfc\x81\x83\x20\x6b\xdd\xe4\xda\xcd\x01\xa8\xac\xa0\xd3\x3b\x99\x80\x2e\x99\xb3\x93\x37\x03\x49\x70\x88\xe3\xae\x8b\x66\x24\xfe\xf7\xed\xa8\xdf\x1d\x9d\x7f\xf1\x07\x37\xf0\x41\xec\x09\xac\x5d\x84\x39\x0f\x01\xdc\x21\xbc\xae\xee\x4a\x14\x8d\x4e\x20\xf5\xb7\xd3\xbe\x59\x36\xbc\xa0\x55\xb5\x1c\x5a\x92\x83\x0f\x74\xc5\x46\x8a\x99\x56\x81\x73\x8c\xab\x4d\xa4\x08\x52\x31\x3a\x1b\x83\xc6\x20\x0d\x42\xb6\x1e\x0c\xe6\x83\x33\x48\x90\x8b\x44\xc4\x3a\x53\xe0\x1a\x8c\x2c\x5f\x14\x8c\x2c\x65\xeb\x70\xc8\x0a\xcc\x03\x28\x64\x39\x58\x19\xa1\x02\x7a\xd4\xd8\xf3\x1e\x55\x3f\x3b\xbb\x58\x46\xbe\x94\x2d\x28\x25\xd1\xb6\xda\xb8\x31\x86\xae\xc5\xda\x7b\x81\x67\xb1\xa6\x97\x8c\x98\x6b\xd9\xdf\xf6\x40\x6c\x00\x80\xd2\x8c\x14\x92\x8b\x82\x0f\x9e\x07\x4c\xd4\xeb\x2d\xbe\x72\x61\xf3\x91\x2b\xcc\x6a\xa4\xd6\x7c\x5a\xb1\x48\x73\x5b\x51\x9c\x2c\x97\x64\xd4\x11\xec\xfc\xc3\xda\x74\x45\x5a\x4a\x31\xdd\x48\x01\xf1\x25\x38\xa7\xc1\x21\x3f\x21\xe4\x6f\x2b\x73\x38\x78\x3a\xaa\x8a\x08\x86\x81\xac\x62\xc1\x8a\x4b\xd7\x8f\x8d\x6b\x52\x48\x81\xe0\x27\x23\xe7\xe6\x1b\x03\x91\xa0\x9c\xd8\x69\x59\x66\x48\x6e\x2c\xa4\x70\xdd\xfc\xb2\x88\xdb\x58\xc9\x04\xef\x96\x92\x95\x26\xc5\x42\x4a\xed\x34\xbc\xbe\xeb\x24\x5e\x05\x3e\xf4\x3c\x46\x5d\xf3\x7f\xc3\x3b\xb5\x95\x89\xe5\x19\xaf\x1b\x4c\x99\x86\x35\x7b\xa6\x49\x29\x8b\x36\xfc\x6d\xe7\xbe\x62\x54\x09\xb2\x90\xd7\xc4\x0c\x45\x4d\xb0\x5b\x79\xe5\xe5\x5c\xcd\xa1\x1e\x8c\xa4\xb7\x83\xc0\xd3\x97\x6c\x79\x91\xda\x23\x30\x7e\x4e\x87\x58\xb0\x23\xa9\x78\x9b\x44\xf0\x2e\xe6\x82\xff\x14\x70\x28\xd6\x8f\x54\x10\xa0\x56\xa6\x42\xa8\xcb\x95\x10\xac\xd8\x18\x83\x77\x3e\x81\x3c\x66\x6b\xf1\x75\x72\x51\x13\xbd\x90\x6d\x05\x46\xee\x46\x6d\x75\x42\xc8\x4f\x0b\x26\xdc\xb1\xec\x8e\xbe\x1c\xa9\xda\x37\x1d\x9e\xeb\xc7\x9f\x95\xbb\xba\x13\xbc\xe1\xb8\xc9\x53\x89\xe9\x0f\xaa\xbe\x25\xa4\x58\x24\x73\x47\x64\xca\x0a\x6a\x67\x68\xf5\xe4\x93\x78\x20\xe5\x29\x52\xc7\xf6\x57\x35\x2f\xc7\xfe\xa8\xdd\x19\x3c\x09\x7b\x6d\xe2\x8e\x1d\xdf\x67\x6b\x0a\xe4\x83\xed\xb3\x4f\x34\x6a\xfa\xe0\xd1\x75\x5b\x19\xde\x54\xd8\xf4\x02\x30\x9d\xb2\x64\x77\xf4\x2c\x25\x87\x15\x05\x94\x9c\xbd\x3f\xfd\xf1\xf0\xe2\x84\x7c\x77\xf2\x37\xfc\x78\x14\xe7\xcd\x52\x6f\xf9\x38\xb5\x2e\x03\x25\x97\x6c\x99\x6d\x76\x3b\xf3\x0b\x67\x0a\xf6\xec\xd1\xc9\xfb\x8b\xd3\xd7\xa7\x47\xf6\xad\xf0\xe3\xd1\x6a\x2a\x30\x1a\x52\x19\x88\x58\x97\xe2\x01\x81\xc8\x9b\x67\x20\x57\x10\x03\x7c\x89\x30\xfc\x35\x2b\xb9\x55\x34\x86\x9b\x4b\xf6\xfa\x41\xf7\xbd\xb5\xdd\xc6\x24\xd0\xae\x18\x44\xe9\x99\x2c\x9f\xe9\x35\x3b\x09\xed\x09\xcf\x8d\x39\xe4\x28\x58\x4b\x5e\x1e\x52\x63\xad\x48\xc5\xd9\x15\xba\x15\x83\x2c\xdd\xe4\x40\xc6\xe9\x0b\x46\x56\x9e\xec\xe5\xff\x76\xa9\x41\x35\xfa\x6d\xfb\xae\x92\x8d\xa6\x63\x4f\xcb\xcf\x31\x23\x01\x14\xb1\x5a\xae\x9e\x5d\x6b\x27\xce\x35\xd5\xde\xc6\x77\x5e\x50\xd8\x2c\x43\x69\xc8\x28\xff\xdd\xd9\xbf\xdb\x22\x1f\xb8\xeb\x49\x99\x7a\x52\xa6\x76\x5c\x99\x72\xd6\xd8\x2e\x6e\x26\x7b\xb8\x42\xb1\xa6\x9c\x59\x32\x01\x2f\xaa\x17\x4d\xf0\xb1\xb2\xd0\x92\xbe\x91\x65\x96\xfd\x84\x78\xf3\x01\x20\x97\x91\xbd\xf7\xe7\x87\x5f\xbf\xf8\xfd\x57\x7b\x23\xf8\xe7\x37\x2f\xfe\xe3\x77\xf6\x9f\x27\x47\xc7\xe7\x87\x67\x5f\xfd\x36\xfa\xe3\xeb\x3f\x7c\xb3\x97\x03\x96\xc8\x3d\xee\xb7\x5f\xbd\x74\x90\xbd\x7b\x27\xc7\x5f\xfd\xf6\xb7\x2f\xff\x23\x5b\x8b\x9b\x2c\xec\x53\xd3\x0f\x27\x1f\x1a\x8e\xad\xf7\xcf\x59\x21\x45\xb9\x93\x88\x64\x9b\xe8\xf4\x7e\xf6\x9a\x7e\xe0\x75\x5b\x93\x8a\xcf\x18\x84\x9c\x20\x39\xdc\x18\x17\x76\xcb\x23\x06\x22\x39\x94\x85\x45\x43\x08\x48\x36\x98\x6c\xc4\x5d\xcf\x17\x72\xc5\xd4\x94\x1a\x5e\x77\xd8\x5e\x1b\x43\x5c\x7a\xb8\x03\xcd\x5e\x5d\xbc\x3a\xf8\x21\xbb\x46\xaa\x59\xde\xf4\x74\x46\x24\x2e\xc7\x88\x5c\xb6\x53\x36\xa6\x0d\xc7\xa0\x3b\x4a\x01\xcd\x8c\x0b\x8a\xff\xe1\x77\xdf\xbc\x78\xb1\xff\xd5\x37\x64\x21\x5b\xa5\x0f\x26\x2b\xb7\x67\xa0\xc5\x45\x25\x40\xa5\x73\xe2\x41\x2f\xa4\x32\x50\xf7\x4b\x05\xf9\xfa\x77\x2f\x5e\x90\xfd\x97\x40\xc0\x81\x8b\x0d\x79\xf6\x82\xf2\x74\x3a\xcd\xa2\xe3\xe2\x4a\x73\x4d\x7e\xff\x87\xdf\x7d\xf5\x8d\x1d\xf3\x3f\x5e\x92\x92\x2e\x33\xa9\xf3\x17\x37\x79\x42\xdd\x96\xb1\x16\x06\x83\x83\x12\x34\xc5\x15\xff\xbc\xab\xad\xcf\x71\x8c\x87\x2d\xf9\xa5\x9b\xe6\x2f\x71\x9e\xdf\x6c\xd8\xce\x08\x34\x20\xe4\xfa\x8a\x64\x20\x44\x3b\x91\xd1\x5b\x5b\xf4\xb9\x6b\xa3\x28\x47\x28\x3f\x26\x66\x52\x15\x18\x1d\xeb\xf3\x5e\x0e\xf3\xf9\x97\x5e\xa1\xff\x2f\xfd\x50\x99\x60\x76\x43\xe0\x72\xac\xb5\x4f\x84\x42\x5e\x9c\xc9\x1c\x8b\x22\xc5\xdc\x4f\xaf\xdf\x6c\xb9\x0e\xa5\x5c\xe9\x78\x39\x0b\x0c\xee\x0d\x1a\xd7\xc9\xf0\x67\x3a\x48\xd1\x92\x1c\x9d\xbf\xef\xe0\x5d\x69\x59\x2a\xa6\xb5\x37\xc5\x02\xb2\xed\xce\xa8\x00\x9a\x15\x8a\x99\x8c\xb9\x64\xf8\xc0\x1b\xca\xfa\xdd\x97\x4f\x15\xfd\x9f\x72\x7d\xfe\xa8\xae\xe7\xc8\x0e\x4f\x90\xae\xe4\xf1\x43\xba\xe2\x5a\x3e\xe1\xb9\x3e\xe1\xb9\x3e\xe1\xb9\x0e\x7e\xd2\x8e\x22\x6f\x3c\xe1\xb9\xfa\xeb\x31\x54\xd0\x3f\xe1\xb9\x7e\xc2\xf5\x54\x49\x7f\xeb\xf5\x54\x49\xdf\xbb\xfe\xcd\x2b\xe9\x9f\xf0\x5c\x13\x07\x79\xc2\x73\xbd\xed\x7a\xc2\x73\x7d\xc2\x73\x7d\xc2\x73\x7d\xc2\x73\x4d\xa0\x69\x13\x9e\x2b\x32\xff\x26\x54\x57\xe7\x6f\xea\x20\x5d\xff\x0d\x11\x5d\xb5\x65\xbf\x82\x1d\x16\x85\x6c\x85\xb9\x90\x97\x6c\x20\xde\xdd\x8a\xf7\x77\xed\xe9\x56\x0c\xdd\xe4\x0d\x5e\xbf\x79\x27\x5d\xc3\xf9\x52\xe7\x07\x1b\xf6\xf9\x4c\x7a\xda\x96\x9c\x89\x1c\x08\x01\xf9\x0f\x47\x4f\x9b\xd7\x10\xad\xc6\x2d\x4a\x56\x76\x5f\xb8\x93\xd3\x58\xa6\x99\x90\x43\xa2\x58\xc1\x1b\xee\x1a\x35\x53\xfc\x3c\x47\xd6\x81\x95\x0f\x1c\xb2\xaf\x66\x4b\x2b\x35\x58\x35\x0b\x47\x95\xfb\x9c\x33\x15\xf9\x48\x9d\x96\xb7\x42\x68\x0e\xe7\x97\x7d\x25\xb4\x79\xc0\xc2\xb9\xe6\x9a\xf9\x2c\x31\x17\xd0\x8e\x66\xe4\x22\xa6\x21\x06\x27\xc9\x43\x4c\xf4\xea\x6e\x25\x32\x06\x4a\x33\x9e\x5b\xec\x31\xa4\xb6\xac\x11\xd9\x19\x46\x90\xe8\xc1\x4a\x52\xb6\xca\x77\x96\xb5\xba\x11\x2f\xad\x8e\xe6\x61\x44\x51\x8c\xe6\xd8\x76\x28\x89\xc3\xae\xd2\x1d\x47\x21\x5c\x00\x2d\x16\x4c\x47\xf4\xa2\x37\xe2\xd2\x65\xb2\x64\x29\x60\xb7\x57\x53\xb5\x73\x2e\xd0\xa5\x01\xa3\x7a\x0d\xb6\x2b\x36\x77\x2f\xbd\x4a\xf2\x45\x44\x8e\xfd\x79\x8e\xc4\x01\x30\xa6\x36\x56\xbc\xe3\xcc\xf0\x59\xfc\x87\x26\xb2\x2a\x7d\x70\xfd\x0f\x2f\x48\xc3\x54\x81\x62\x29\x4b\x00\x4f\x63\x4d\xbd\x91\xa4\xb2\x16\xb3\x55\x65\x6e\x1e\x3e\xc4\xf6\x8f\x23\x01\x80\xf9\x0f\x99\x32\x34\x03\xd6\xa6\x21\x15\xa3\xda\x90\x97\x2f\x48\xcd\x45\x6b\xf2\xf5\x0c\xbe\x87\x84\x82\xdf\x7d\x33\xf0\x69\xf7\xd0\x81\x38\x8b\x24\x89\xbd\x2a\xf0\xef\xe0\x5a\x71\x11\xc5\x1a\x36\x4b\x23\xb9\x30\xab\x8e\x96\x28\xd1\x3d\xd7\x69\x05\x91\xcc\x9d\x38\x0f\x32\xbb\x18\x7e\x6d\xe5\x74\x99\x06\xc1\x93\x63\xd1\xdd\xf0\x31\x88\x3d\x25\xff\xe9\x3e\xc4\x25\x96\xa8\x86\x2c\xac\xd1\x0b\x7e\x59\xbd\xa0\x0a\x31\x69\xa0\x88\xc3\x67\x13\xa5\xad\xce\xb1\x1d\x18\x00\x22\x5e\x85\x71\xb9\x26\x65\xf8\x38\xb8\x66\xb9\x18\x1b\xc5\x58\x20\x19\x6c\x7d\x88\x20\xfb\x2c\xa4\x41\x68\x85\x03\x55\xfc\x61\x8a\xfd\x98\x28\x36\xe7\xda\xa8\xb4\xb0\xdf\x38\xfd\xc0\x1c\x6a\x05\xcc\x95\x6c\x93\x1b\x3a\xe7\x12\x5b\x40\x84\x77\xf1\xfa\x44\x8f\xa2\x60\x5a\x0f\x29\x9a\x71\x47\x9d\xe3\x31\x18\x23\xf1\x59\x83\xc5\x8e\x62\xb4\x7c\x27\xaa\xe4\x98\x69\xae\x89\xf6\x74\xa0\x3f\x0d\xb4\x2a\xc8\x72\x84\x0d\xea\xb7\xaf\x5b\x00\x74\xd5\x81\x0c\x61\x25\x5a\x3a\xf6\xe7\x63\x80\x42\x8d\x22\x85\xe9\x52\x3d\xd6\x45\x66\xb4\xd2\xc9\x71\xc6\xe1\xbe\x16\xbf\x7d\xb7\xbf\x40\x48\x47\x5f\xa0\xbb\xea\x4e\xa9\xba\x6a\x4e\xbf\x58\xef\xfd\x0f\x9c\x1a\x9c\xee\x2b\xec\x0c\x57\x1a\x65\x72\x50\x0d\x27\xc7\x2b\x2b\x98\x31\x21\x6c\x3f\xd0\x10\x03\xcc\xf8\x62\x38\xc7\x29\x85\xac\x6b\xaa\x0f\x92\x89\xc1\xfc\x22\x0a\x40\x72\xda\xd5\xb7\x0b\xa3\x68\xd5\xcd\x50\x04\x60\xba\xad\x6d\x6d\x98\xa0\x22\x39\x65\x32\x17\xcf\x20\x15\x44\x5e\x87\x72\xd4\x39\xbf\x62\x62\x75\x3f\x3b\x77\xc4\xb7\xb4\xb8\x64\x03\xb0\x9b\x7e\xd0\x7e\x8d\xcb\xa5\xa0\x0e\xcb\xc6\x1e\x43\x57\xdc\x8a\x03\x56\xae\x8c\xab\x47\x5d\x86\xbb\x66\xc6\x83\x0d\xa1\x61\xb7\xad\x85\x6b\x35\x4b\x86\x8d\xcd\xb5\x6c\x96\x86\xfb\x3a\xf3\x34\x66\x74\x28\x7e\x55\x30\x6f\x17\xdb\xf1\xb6\x35\xdf\xf8\x7e\x59\x66\xdc\x73\x73\x24\xa3\x5c\x65\xb0\x4b\x47\x45\xe8\xc9\xca\x9e\x55\x4b\x0f\xda\xbe\xba\x17\xa6\x4b\x88\x06\x0e\x3b\x6f\x12\xe7\x43\x4d\x93\x94\xcc\x1c\x6c\xa7\xa6\x65\xff\x60\x79\x4f\x4b\xa9\xc9\xb7\x50\xbd\x7f\xcc\xc0\x8d\xf2\xd0\x46\xc3\xfb\x6f\x8f\x3f\x62\x30\x58\xaa\x3f\x2f\x63\x81\xd7\x74\x9e\x66\x5a\x8f\x49\x2d\x05\x37\x52\xa5\x9c\x79\x43\x6d\x85\x99\x1e\x52\x5e\x9a\x4b\x6e\x22\x15\xde\xb7\xd1\x41\x7a\x86\xfa\xd2\x28\x2d\x0a\x58\x77\x29\x5b\x72\x4d\xc1\x33\x88\xdc\x9d\xae\xb1\x5e\xf0\xe6\x15\x39\x11\xba\x55\x11\x42\xd9\x2a\x09\xf6\xa0\xf3\xcc\xe9\x8f\x3b\xd8\x48\x76\xf6\x11\x0b\xd7\x81\x90\x26\xd3\x71\xf2\x81\xd6\x4d\xc5\xf4\x2b\xb2\xc7\x3e\x98\x6f\xf6\x46\x64\xef\xc3\x4c\xdb\xff\x08\x33\xd3\x7b\x13\x72\x5a\x37\x15\x2f\xb8\xa9\x96\x84\x8b\x19\x53\x2a\xc4\xde\xf1\x07\x2b\xa9\xff\xe9\x94\xdc\x31\xe6\xad\x8d\x54\x74\xce\x9e\x3b\xdd\xe0\x0b\x35\x4d\xd5\x44\x06\x9f\x49\xb0\x09\xb7\xcd\xcc\x40\x44\x70\xf2\x83\x34\xc6\x8f\x86\x1c\x4f\x1b\x57\x85\x39\x96\x99\x5c\xfe\x01\xd6\xc5\xad\xc0\x73\x35\x2d\x9f\xbf\x3f\x39\x3c\x7e\x73\x32\xa9\xcb\x2f\x16\xf2\x7a\x6c\xe4\xb8\xd5\x6c\x9c\x5c\x52\x3a\x78\x65\x2e\xd9\x12\x70\xd0\xb7\xbc\x36\x8e\x8c\x9e\x17\xd5\x48\x48\x16\x80\xcf\xad\x01\xf2\xfe\xdb\xe3\x1f\xf4\x90\x48\x57\xe4\xa4\x78\xce\x4c\xf1\xbc\x60\xcd\xe2\xb9\x1b\xf9\xdf\x75\xfd\xa3\x14\x93\xb5\x39\x49\x7a\xa0\x3f\x33\xb7\xcd\x51\x9e\x0e\xd4\x5e\x0b\x59\x55\x58\x5b\x6d\x4f\xad\x23\xd6\x2c\xc2\x0d\x8f\x7a\xe5\x87\x94\xa9\x0c\x2c\x4e\xd9\xbd\xf8\x00\x01\xb4\x7e\x99\x9c\xe2\x94\x8b\xf5\x2c\x0d\xfd\x73\x06\x3e\x19\x76\xcc\x44\xc2\x4b\x4d\xf3\x2a\x11\x8f\x53\x5c\xa5\xaa\x33\x8f\xc2\x3f\xfc\xde\x7f\xa9\x99\x01\x2d\x96\x0b\x82\x7d\x94\xdf\x58\xad\x7a\x17\x1c\xc1\x3b\xc1\x4a\x43\xfc\xd0\x58\x16\x3d\xa0\x6b\x5a\x2e\x4e\x08\x84\x80\xd5\x1d\x65\x28\xd3\xd6\x2c\x98\x30\x1e\xfa\xc9\xd5\x71\xc7\xba\x10\x39\x9d\xa1\x3f\xb0\x1c\x90\x46\x29\xaf\x98\x52\xbc\x64\x9a\x0c\x56\x86\xe2\x38\x10\xaf\x1e\x35\x6b\x0d\xca\x60\xcc\x91\x30\x38\x34\x87\x3e\x67\xa2\x43\xfe\xbc\xf9\xdd\xc8\x98\xdf\x89\x5c\xf9\xfb\xc8\x92\xdf\xc5\xfc\xf8\x4c\x19\x86\xc3\x73\xe2\xf3\x67\x79\xef\x4c\x90\xa3\xa7\x76\xc2\x27\xd9\xd4\x4e\x5a\xd6\x7c\x00\x08\xdf\x0e\x88\xf4\x3c\x8a\x27\xcc\xc3\x9d\x1f\xa2\x0b\x5a\xb1\xd3\x77\xdb\x0a\x47\xb8\xe1\xfb\x21\x89\x73\xf7\x61\xc3\x94\x47\x77\xf5\xd1\x31\x63\x68\xb1\x70\x01\x02\x9f\x97\x20\x05\x40\xef\xe0\xbe\x21\x42\x96\xa9\xe9\x86\x71\x4c\xc2\xd3\x70\x7b\x5c\xc2\x93\xff\x79\xc5\x26\xe6\xd4\xb0\xeb\x44\xfb\x7d\xdc\xa9\x8d\xa9\xbf\x07\xc7\xf8\x53\x6c\x63\x63\x60\x61\x78\xfc\x22\x94\xdf\xaf\x3d\xfb\xfe\x23\x16\x93\x1b\x62\x15\x39\x8e\x01\x78\xe2\x56\xa2\xb9\x78\x05\x39\xfc\x61\x96\xa6\x8c\xb8\x5d\x97\x85\xff\xdc\xb3\x3c\x17\xc1\x42\x3a\xf4\x31\xaf\x2e\x7b\x01\x77\x78\x76\x4a\xfe\x82\xb7\x6f\x6d\xf6\x1a\x25\x0d\xba\x41\x8f\x65\x4d\x79\x72\x0d\x5a\x6f\x0e\x56\x1f\xea\x27\x23\xb6\x64\xfd\x24\x9c\x85\x7b\x89\xbb\xd9\x63\xd0\x16\x52\xcc\xf8\xbc\x55\xac\x24\x2e\x70\xb5\xb5\x59\xda\x39\x0f\xd1\x9a\xcf\x86\xec\xdb\xef\x9e\x43\x0f\xbb\x83\x49\xe7\x2d\x5a\x71\x25\xa5\xfb\x76\xef\xd1\x05\xf5\x59\x3a\x6e\xa2\x8c\x18\x8f\x22\xd6\x39\x6b\x3c\xf3\x83\x3a\x1e\x2a\xc9\x06\x8c\x2a\x34\x87\xf2\x82\xa8\xc0\xd3\x75\x10\xe3\xba\x03\x0a\x43\xaf\xd0\x88\x7c\x2f\xe7\x5c\xf8\xe3\x45\xba\x02\x9f\x19\x4d\x77\xcf\x3c\xf9\x47\xd6\xae\x27\xff\xc8\x93\x7f\xe4\xc9\x3f\x72\xf3\xa5\x75\x75\x22\xe8\xb4\x4a\xaf\xe6\xee\x17\xbc\x87\xc7\x91\xd7\x15\x9d\x13\x06\x7f\x3c\x2f\xb9\xb6\xff\x25\xe7\xe7\xdf\x43\x56\x74\x2b\xbc\xeb\x1c\x78\xd3\x69\x5f\x23\x3f\x43\x78\x96\x6e\xef\x18\x43\x35\xe7\xcd\x00\x50\xb3\x6c\x07\x59\x47\x4a\xe8\x42\xab\x7b\x20\x0e\xee\x0e\x38\xcf\x68\x00\x8a\xc4\x3a\xe8\x29\xb3\xd2\xaa\xb8\x3c\x8b\x12\x93\xa5\xb2\x9f\x89\xe8\xa3\x2c\xc6\x47\xa6\x67\xe6\x34\x43\x56\x48\x1a\xc2\x0a\x67\xb9\x82\xd7\xd1\xf3\xbc\x36\xee\x95\x90\x73\xb7\x90\xf0\x1d\xd5\x5a\x16\xbc\x2b\x25\x70\x9d\x56\xbc\x8a\x5e\x82\x8a\xbe\xb5\x49\x46\x3b\x38\xcf\x84\xa0\xf9\xbd\xc1\x32\xf1\x8c\xed\xee\xa0\x3a\xb6\x44\xb8\xf0\xf3\xb6\xb5\x49\xc0\xad\x36\x04\x45\x3b\x97\x90\xe8\x28\x59\x9d\xc7\x20\x10\x56\x53\xc1\x3d\x4a\xad\xe3\xbd\x64\x8f\x13\x5e\x90\x05\xca\xf5\x06\xae\xe5\x3a\x88\x24\xe8\xc4\xbe\x95\xd5\x4a\x07\xf5\xce\xe2\xe0\x45\x7b\xa3\x5f\xcb\x84\x9f\xb9\xa4\x72\x90\xd5\x8d\x6c\xda\x0a\x2b\xe9\xc3\xa4\xa5\xcd\xd6\xc0\x6c\x54\xa4\xed\xe1\x7d\xb6\x43\x2d\x8f\x08\xfd\x71\xdb\x1b\x32\x06\xa2\xbc\x3b\xe2\xa8\xdf\xa3\xd8\x68\x69\xba\xf4\x8f\xcb\xe0\xf1\xdc\x3e\xe0\x68\x2e\x80\xd1\x74\xef\x72\x0f\x98\xb4\xe7\xc1\x79\xf1\xbb\x6f\xbe\x19\xa0\x0c\x71\xc5\x0a\x23\xa1\x18\xd0\x81\x3d\x87\x8c\x59\xaa\x18\xd8\xfe\x88\x06\xea\xfd\xcb\x58\x0c\x66\x06\xe5\x75\x6c\x0f\x91\x74\x2b\x08\xa4\x39\x30\x30\x86\x23\x8c\x0e\x4a\xd0\xcc\x96\x35\x0f\xdd\x0b\x4e\xb7\xdc\xbd\x60\xab\x3d\x0b\xb6\xd9\xa9\x60\x7b\xfd\x09\xb6\xd8\x95\x60\xdb\xbd\x08\xb6\xd2\x81\x60\xeb\x09\xdd\x0f\xdf\x63\x20\x0b\x54\x60\x0e\x98\xc0\xa1\x5d\x04\x06\x42\x0c\xe6\x81\x17\x1c\xdc\x27\xe0\x21\xba\x03\x64\xf2\x71\x0e\xef\x04\x90\x17\x06\x6a\xdb\xa8\xff\x3b\xa4\x7a\xe3\xb5\x9b\x08\xff\x5b\xc1\xf5\xdf\x36\x9a\xff\x16\x31\xfc\xf3\x61\xc9\xe5\xc2\xeb\x1f\x8e\x21\x97\x57\x70\x6c\x09\x91\xff\x1e\x71\xf8\x1f\x04\x7d\xff\xbe\x31\xf7\x77\xb3\xb8\x6d\x28\x86\xf7\x60\xe4\x6e\x9d\x09\xba\x3b\x57\x0e\xc8\x2e\xb8\xc5\x3b\x4a\x36\x86\x17\x7c\x63\x46\xdf\x68\xfb\x19\x96\xf8\xe8\x86\x16\xb0\xaf\xdb\xcc\x15\x58\x0f\xe2\x83\x25\x83\x7d\xe5\x48\x89\x4c\x52\x78\xb3\xb8\xcb\x91\x80\x77\xe7\x2b\x19\xd1\xe1\xe3\x87\x4f\x84\x0e\x43\x7f\x24\x15\xda\x4f\xdd\x8e\x25\x43\x3f\x65\x05\x7f\xca\xb5\x8b\x59\xc1\x0f\x85\x60\xf2\xf9\x25\x66\x96\x4f\x89\x99\xf1\xb5\x83\x89\x99\x9e\x69\x75\x7c\x1a\xe3\xb1\x0b\xa6\xa5\x9c\x5a\x25\xd5\x83\xf9\x75\x32\xf8\xf0\xec\x34\x79\xf4\x42\x31\x00\xea\xa7\x95\x9e\x6c\xb2\x39\x7d\xfa\x91\xb3\x70\x43\xd7\x6a\x63\x58\xdd\x24\x0a\x6f\xf2\x94\x97\xb9\xe9\x7a\xca\xcb\x7c\xca\xcb\x7c\xca\xcb\xbc\xf9\xda\xe5\xec\xa2\x45\x5b\x53\x31\xb6\xe7\x29\x24\x75\xf6\xca\x49\x56\xd4\xf4\x09\x71\x27\xe0\x20\xa1\x85\xe8\xba\x80\xb9\xdc\x0a\xfe\x6b\xcb\xba\x48\x47\x30\xd9\x76\x20\x0f\x0c\xe8\xd8\x9d\xe5\x42\x4b\x76\xe5\x9c\x2d\xe4\x1a\x3e\xa0\x9b\xcb\xb0\x74\xfe\x68\x1c\xb6\x64\x30\x78\x2f\x30\x69\x16\x0c\x8d\xed\xb3\x15\x63\xbb\xe7\xd3\x75\x82\x1c\xe4\xe8\xb0\xe8\x70\x6c\x09\x5a\x16\xb5\xef\xee\x9a\x96\x4c\x19\xa9\xb9\x52\x52\xb9\x4c\xb5\xf8\xf5\xb1\xf0\x89\xcf\x17\x86\x29\xf4\x90\x62\x79\x46\xba\xf8\x3c\x67\xc6\xed\x02\xd8\x45\x46\x12\x2a\x10\x7b\xd5\xfe\xdb\x83\x7c\xc0\xd4\x78\x0d\x64\xca\x16\xf4\x8a\xcb\x76\x00\xa8\xda\x39\xea\x53\x7b\xee\x91\x60\x2b\x2c\x65\x1b\x72\x51\x5a\x6d\x27\x23\xac\x82\x5e\xe7\x83\xe4\xa1\xdf\x76\x0f\x05\xb7\x79\x29\x7d\x30\x7a\xcc\x3e\x70\x6d\xd6\xe7\xdc\xb3\x80\xcb\x7d\xda\xca\x66\xbe\xd2\x8d\x3d\x7d\x7f\x4c\x86\xe9\xcd\xb1\x85\x7b\x44\xf4\x5d\x20\x57\xe7\xf0\xd5\xc7\x1c\x20\xae\xdf\x0f\x42\x96\x93\x9a\x16\x0b\x2e\x32\x40\xd4\xfe\xd8\x23\xac\xe7\x09\x99\x90\xc3\xaa\xea\xea\x98\x74\x28\x1d\xf4\x9e\x91\xfe\x4b\xd9\x45\x4a\x22\xc7\x72\xae\x62\x25\xe4\x59\xa1\x8a\x05\xf5\x89\x9a\x4f\xdc\x00\x93\xab\xfa\x9a\x2a\x36\x29\x64\x4d\x8e\xce\x4f\x49\xa9\x78\x62\x07\xae\x2d\xd7\x9f\xe3\x12\x9f\xa5\x85\xae\x3f\x37\x7f\xcf\x93\xaf\x67\xa7\x7c\x3d\xa1\x84\xa1\xe2\xc5\xf2\xf4\x38\x6f\x59\x04\x3e\xd3\x2b\x9a\x3a\x94\x44\xd8\xcf\xc9\xb7\x54\xb3\x92\xbc\xa1\x82\xce\x31\x60\xb5\x7f\x7e\xf6\xed\x9b\x03\xcb\xf0\x10\x8c\x3b\x3d\xde\x58\x37\x71\x1e\x3f\xfc\xed\xb6\x10\xcf\xc9\xea\xd4\x65\xd3\xed\xd7\x9e\x9a\x38\x7d\x5b\x03\x83\x27\x41\x6d\x3d\x1b\x10\x04\xde\x00\x90\x7f\xb6\xda\xff\x0b\x0b\x15\x7c\xb3\x46\xbd\x7a\xa4\x5e\xd5\xe5\xe5\x43\x4f\xc0\x7a\x34\xd2\xda\x8f\x97\x6c\x79\x67\xe9\x3d\x86\x15\x1c\x38\x38\xbe\x47\x4d\x6f\xee\x12\x14\x65\xca\xdc\x46\xe1\xa7\x65\xcd\x7d\x42\x66\x5c\x6f\x5d\xcf\x8d\xa2\x86\xcd\x97\xc7\xac\xa9\xe4\xd2\x72\xf1\x59\x94\xb8\x83\xb7\x4e\x51\x95\x56\x53\x5a\x10\xd5\x56\xd0\x0b\xa1\x5c\xeb\x90\x28\x18\x2b\x3b\x31\xcf\x85\x36\xb4\xaa\xec\x02\xc2\xf3\x6f\xa5\xe8\x93\x95\x83\x4f\x55\x03\xc6\x48\xe7\x47\xef\xea\x77\x08\x7e\xfb\xb1\xd5\xfe\x74\x45\x00\x86\xff\x38\xbf\xdd\x25\x13\xf2\x93\x73\x1e\x53\x14\x06\x94\x68\xef\xdb\xca\x1e\xd0\x55\xd9\xef\xa8\x8c\x26\x87\x63\x05\xec\xd6\x00\xf2\xcf\xbe\xa4\x73\x01\x4a\xa6\x7b\xa9\x10\xd1\xcf\x3f\x69\x7c\x6c\xda\x7c\xbd\x40\x0d\xd4\x3e\x98\xd0\xa6\xa9\x38\xa2\x0c\x48\xe5\x92\x70\xa3\x78\xf2\xfa\x6d\x9f\x22\x6a\xef\xa8\x86\xde\x4d\xed\x1c\x93\x2b\xa6\xa6\x9f\xe2\x7f\xbb\xab\x46\x49\x1b\x0e\xe9\x4c\x9f\x2c\xc2\x52\x95\xc6\xc3\xb3\x53\x1c\x68\x53\x84\xdf\x7f\x89\x0c\xe1\x96\xda\x27\xf4\x60\x39\x9a\x0b\x03\x84\x66\x4e\x87\x67\xa7\xd8\x23\xcd\xf5\x73\xea\x42\x03\xd6\x62\xa7\x58\x7c\xd9\xb5\xa1\xa5\x73\xfb\x44\x43\xa4\x60\x77\x69\x68\x6a\x29\x60\xa2\xad\x19\xf6\x8a\x0a\xc4\x10\x2e\x60\x9c\x40\x45\x17\x81\x40\xaf\xf2\x84\xec\xed\xc5\x36\x21\xc2\xb3\xa8\x88\x6e\x10\x75\x7b\x5f\xf6\xee\xb2\x72\xad\x7b\xb1\x4f\x3d\xe1\xef\x9e\xf5\x7c\xc7\x2c\xe7\x84\x13\x33\x43\xe6\x8e\x90\xe2\xbd\x9b\xef\x1f\xde\x7f\x7f\xef\x0c\xfa\xb6\x3f\x9c\xeb\xd8\xc3\xa0\xdb\x68\x43\x95\xe1\xb4\x22\xad\xaa\x7c\x7a\x21\x22\x91\xb8\x8a\xc0\x05\xbd\x8a\xba\x21\x4d\x08\xf9\x12\xb9\xd2\x31\x03\x8a\x32\x70\x8a\xba\xee\x60\xb3\xb6\xaa\x46\x64\xc6\x05\xb5\x07\x19\x6b\x48\x94\xe4\xf5\xc9\x14\x9f\x73\x51\x30\x3b\x4d\x63\xcf\x97\x04\x28\xf7\x6e\xa3\x20\xd3\x20\x47\x33\x0e\xb9\x20\x29\x56\xbe\x15\xe0\x17\x9e\x49\x45\x8e\xaa\x56\x1b\xa6\xde\x4b\x7b\x0c\x77\xe5\x26\x64\xa6\x64\x4d\x68\xfc\xf5\xb7\x5c\x94\x77\xaa\x84\x7a\x0f\x47\x7b\x41\x05\x61\x1c\x12\xa3\xec\xd0\x90\x0f\x6d\x99\xbd\xdb\x54\xfb\xba\x2d\x16\x76\x8a\xf6\x1a\x59\xea\x3d\x2b\x9d\xf7\x30\xdc\xa8\xf7\x0e\xec\x5f\xab\xef\x8a\xd5\x1b\xd1\xef\x9e\xd3\x86\xef\x1d\x8c\x08\x4c\x38\x24\xe7\xc9\x4f\xcf\xc6\xfb\x4c\xf7\x91\x9f\x30\x70\xf5\x25\xed\xa2\xf7\xf1\x13\x60\x63\x88\x2e\xf5\xed\x7a\xc1\x0d\xd6\xeb\xd8\x9d\x82\x31\x80\xd0\x6b\x66\xf5\x20\x25\xe4\xd0\x07\xd1\xec\xd6\xaa\x19\xf5\xf9\xba\xec\x8a\xa9\xa5\x59\xb8\x06\x16\x5e\x8a\x3e\xad\x1c\xec\x8c\x41\xab\xe6\x44\x99\x5f\xa1\x6e\xbb\x81\x4c\x58\x5b\xa1\x67\x5f\x3e\x5b\x3d\x92\xba\x33\xf8\xdf\x7b\x3d\x40\x09\x4b\x5a\x8b\x1f\xed\x2f\xfb\xeb\x80\x1f\xe1\x61\x12\xc4\xe1\xf7\xdf\xbb\xf4\x14\x9c\xf0\xef\xb8\x80\xa8\x37\xe8\x43\x1e\x0b\xc0\x2d\xda\xc6\x95\x02\x0a\xff\x6d\x57\x69\xdd\xe8\xfa\x54\x43\xe9\x16\x1a\xbd\x9d\x79\xd3\xa3\x6e\x7d\x80\x33\x56\xdf\xc8\x72\xf3\x26\xee\x31\xc9\x69\x74\x73\xc8\x25\xee\xdc\x9c\xee\x59\xce\x72\x5a\x36\x1b\xad\xd0\xdb\xd7\xf4\x96\xf5\xbb\x89\x92\xce\x4f\x07\x62\x3f\xfa\xe6\xa2\x4b\x8c\x20\xb3\x8a\xce\x3b\x5e\x04\x21\x8e\x9a\xfd\xd1\xf9\x8f\xfe\x15\x34\xb9\x01\x7a\xf8\xa3\xa6\xd3\xc7\x8c\xa5\x71\x37\x4b\x37\xde\x71\x63\x28\xe3\xe3\x16\x53\x78\xf8\xcd\xdc\xf4\x29\x79\x5f\xe6\x56\x57\xfd\x4d\xf3\xef\x5d\xeb\x34\xe2\x04\xdf\x39\xce\xbb\x42\xa0\xda\x04\x74\xb8\xf3\x1f\x7b\x6c\xf2\x11\x7a\x6f\x60\xda\x4b\xb6\xbc\x96\xaa\xfc\x38\xc3\x1e\x06\x61\xe6\x7f\xe2\x8d\x79\x9f\x0c\x86\xee\x78\xb9\x31\xb0\x93\xcc\xaa\xb7\x12\x5f\xd1\x29\xab\x3e\x4e\xfa\x0d\x86\xc1\x1b\xda\xd8\xd7\xe9\x4a\x36\xd1\x23\xe5\xb2\xcc\xd0\x3a\xc5\x3a\x1f\x5f\x91\x26\xd5\x9c\x0a\xfe\x4f\xac\x73\x2d\xac\xa4\x90\x8a\xff\x73\x33\xab\xed\x63\x4c\x1f\x7d\x5c\x15\x2b\xcc\x81\xe3\xfa\x8d\x22\xfb\x23\xdb\x82\x96\x25\x47\x15\xec\xec\x23\x1c\x7c\xfb\x7c\x71\x71\x79\x97\x95\x86\xfb\xb1\xcc\xa6\x0b\xec\xdd\xe3\x32\xdf\x22\x16\x3e\xbe\x73\x6f\x4f\xa3\xfb\x84\xe3\xa9\x55\xb7\x14\x8a\xdc\xfa\xfb\x9a\x72\x3c\xb5\x37\xb7\xf1\xba\x61\x76\x1d\x37\x51\xa7\x5b\x5b\x59\x6a\xdf\x2f\x3c\xed\x01\xf6\xd5\xa0\x09\x67\x35\xe5\xa9\x33\x86\xd7\x80\x25\xab\xa9\x69\x15\x37\x1b\x4f\xea\xdb\x7f\xc8\xc5\x77\xed\x94\xfd\xc8\x94\xb6\xeb\x71\xd7\x9f\x0b\xa8\x38\x3b\x3c\x3b\xdd\x38\x2d\x79\x4e\xe4\x1b\x1d\x19\xe0\x37\x73\x94\x5b\x75\x91\xb4\x82\xd6\x53\x3e\x6f\x65\xab\xab\x65\x1c\x41\xa1\xe4\x92\x8b\x72\x42\xc8\x29\xba\x55\xc5\x33\x43\xa8\x90\x62\x59\xbb\x5b\x45\x51\xb5\x25\xeb\x3d\xf1\xa6\xa3\x4c\x12\x7a\x25\x79\x49\x68\x6b\x64\x4d\x0d\x2f\x48\x21\x99\x2a\x00\x44\x35\x7e\x7e\xab\x19\xa1\xbd\x27\x76\xbf\x2d\x5a\x6d\x64\x4d\x6a\xaa\xf4\x82\x56\xd5\x4d\x2c\x91\x41\x3b\x00\x77\xda\x8d\xdf\xda\x59\xb9\xf1\xcb\xab\x5b\xe6\xe1\xe3\xdb\x01\x06\x1e\xb4\x1d\x2c\x71\x83\x1e\x70\x75\x33\x53\x7f\xc2\x33\x1c\x02\xee\xc6\xbe\x1c\x3d\xfe\xbc\x58\x30\xd2\xb4\xd3\x8a\x6b\x30\xe1\x41\x70\x2d\xc9\x94\x2d\xb8\x2b\xbd\xf9\xb8\xc4\xba\x71\x89\x3f\x36\xcf\xb7\x89\x8c\x8f\xce\xd0\x2d\x12\xfe\xd6\xdf\xba\x13\xf0\xb4\xa6\xf3\x4f\x50\xed\x6f\xd8\xbe\xdf\x5b\xb1\x4f\xc5\x32\x9c\xa7\xd0\x4c\x55\x8f\x88\x54\xae\x90\xd8\xdb\x7e\xca\x7d\x15\x5a\x04\x2b\xf2\xce\xcd\xa8\xab\x8b\x76\xdb\x00\x50\x06\x98\x9a\x49\x55\xdb\x79\xe7\x8a\xcc\x5a\x01\xde\xf0\x1b\xec\x42\xc8\xe1\x83\xf3\xc7\x39\x33\x69\xa5\x65\x10\x06\xb0\x6c\xc2\x13\x46\xa8\x26\xd7\xac\xaa\x30\x8d\x08\x3b\xbf\x46\xb0\xcd\x1d\x96\x65\x97\x4a\x38\xdd\x6c\x5b\x96\x7c\xce\xb4\x21\xfb\xe7\x7f\x3d\x3c\x00\x85\x08\x9c\x75\x4b\x62\xe8\x7c\xb2\x92\x1f\x8e\xc9\xa4\x56\xdd\x2a\x5b\x50\xcb\x0a\x6a\x68\x25\xe7\x98\x81\x66\x45\x8a\xfd\x7d\x53\xd1\x25\x94\x71\x35\x54\x41\xad\x60\x81\x0e\x4b\xa2\x5a\x71\x53\xe7\xef\xfb\x3b\x29\x3f\x2e\x93\x6e\xeb\xa9\x7d\x4b\x78\xf8\xe3\x32\xe7\x23\x7d\x82\xef\xf7\x08\x56\xac\xf9\xff\xd8\xbb\xb6\xde\xc6\x6d\x25\xfc\xde\x5f\x41\xf8\x25\x6d\x10\x67\x71\xd0\xee\x79\xe8\x5b\xe0\xa4\x40\x70\x72\x59\x38\x69\xfb\x5a\xc6\x62\x6c\x21\x32\xa9\x92\x52\x2e\x2d\xfa\xdf\x0f\x38\x43\x52\xa2\x2d\x91\x94\xad\x38\x8b\x45\xf5\x92\x5d\x4b\xbc\xdf\x66\xbe\x99\xf9\x58\xd0\x1e\xc0\x6a\x6b\xbf\x68\xa8\x0f\xb5\xde\x02\xc0\x86\xe0\xcc\xe5\x71\x4a\xee\x70\x3e\xad\x69\xb5\x40\xff\x90\x3f\xd6\xac\xa2\x19\xad\xe8\xa9\x56\xee\xff\xf0\x29\x92\x44\x91\xe9\x8c\xfa\x07\xba\xa7\xce\x28\x8a\x8b\xf8\x1e\x77\xa5\x55\x0b\xf7\x39\x28\x5c\x76\xdd\x06\x11\xb2\x3d\xb7\x37\x68\xfe\xc5\xab\xd6\xad\x83\xa6\x7c\xaf\xae\x9b\x89\x7c\xec\xa9\xf0\x5b\x62\x66\xeb\x9a\xf1\x4a\x9d\xc2\xd0\xb4\x7f\x01\x7b\xc2\xd9\xcd\x79\x3f\x1c\x1b\x07\x92\x22\xc0\x51\xba\xcd\xe6\x2c\x50\x77\x6b\xb2\x31\x6f\x7c\x5b\xa2\x25\xca\x00\x1a\x26\x24\x6f\xa0\xdc\x9d\x4a\xf0\x71\xa0\x58\x1c\xe7\x86\xca\xa5\x51\x0a\xfb\xc1\xb6\x24\x8b\x70\x8a\x1d\x38\xc6\xac\x33\x75\xcd\xe8\xfd\x28\xcd\x2c\x1c\x65\xbf\xe9\x63\xb7\xc1\x31\x01\x5a\x05\x8b\xfc\xbb\x61\x48\x35\xa3\x27\x82\x85\xb6\xa9\x03\x2a\x1a\x35\x02\xba\x59\xe0\x39\xf1\x3e\xb1\xb7\x23\xa3\xe9\xea\x15\xb4\xca\x4b\xe4\x6f\x32\x36\xc1\xd8\xf0\xe3\xf3\x1b\x2d\xf2\xcc\x15\x80\x6b\xe9\x92\x9f\x90\x1b\x51\xe9\x3f\x17\xaf\xb9\xaa\x10\x63\x38\x17\x4c\xdd\x88\x0a\x7e\x19\xa5\xa7\xb0\x82\x63\xf6\x93\x81\x41\xd0\x00\x04\xcb\xbd\x05\x96\x98\xfe\xc0\x3b\x14\x1a\x79\x4f\x7f\x7d\xc9\xb5\x40\x83\x4d\x8e\x14\xe1\x48\xe1\x94\x29\xc0\x92\x25\x70\xc1\xa7\x36\x46\x6b\xbb\x04\xd3\x8f\x42\x7a\xdd\xb8\x73\x61\xa6\x20\x0c\x6f\x80\x37\xb9\xb2\xe7\x92\x13\x43\xa8\x85\x86\xa3\xb8\xf4\x9a\xc9\x25\xd8\x76\x17\x11\x5b\x64\x2a\x22\x9f\x84\xc3\x27\xa3\xef\x3b\x61\xee\x3b\x24\x82\x33\xe9\xaa\x17\x9f\x23\x03\xe6\x63\x2b\x2b\xdc\xf5\xd7\x08\xdc\xfd\xad\x37\x77\x18\xd2\x7f\x80\x50\x51\x9d\x92\x33\xa2\x72\xbe\x2c\x98\xf7\xce\x98\xdb\x5b\xd9\x04\x8a\x2a\x21\x4a\xf1\xcf\x3a\x7f\xa6\x85\x3e\x66\x20\x2a\xc4\x51\xb1\x88\xc7\xad\xc3\xf6\xc4\x10\x27\xea\x0d\xd1\x89\xb1\x93\x27\xf6\x36\x39\x09\x86\xc9\xb4\x67\xf4\xe4\x92\x4f\x1a\x8e\x21\x6f\x96\xba\x33\x0d\x24\xe3\x09\xbc\x9b\xec\x7e\x6e\x07\x4f\xa8\x74\x94\x91\xc4\xa7\xdc\xb0\xd8\x3b\xf5\x94\x77\xbb\x25\xa5\x4c\x12\x2b\x5f\x7e\xaf\x7e\x00\x5c\x8d\x33\x02\x24\x58\x12\x4c\x12\xfa\xd7\x36\xa3\xb3\xd6\x58\x9e\xf2\xb2\x6c\xe8\xb6\xeb\x72\x29\x69\xc6\xc8\x52\xd2\xb2\x67\xd1\x0e\x93\x4e\x51\xc4\xed\x2a\x32\xa0\x96\x7d\xfd\x3a\x50\xcf\x58\x07\x50\x87\x60\xba\x17\xf6\xb0\x12\xe2\x09\x98\x71\x60\xde\xbd\x23\xa4\xf6\x3b\x96\x75\xde\xfc\x66\xe1\x0e\x45\x32\x56\xd1\xbc\x00\x17\xc1\xdb\xab\x6b\xe3\x44\x68\x65\x35\x5b\xcb\xee\x3d\x63\x04\xdd\x90\x66\xc6\x4f\x76\xce\x9e\x73\xf6\x62\x90\xb3\xbe\x2d\x6a\x4a\x96\x8c\x83\x83\x5a\xc0\xcd\x74\x4a\x54\x9e\xb1\x0b\x08\xb5\xee\xcf\x68\x0f\x23\x59\x4f\x9d\x63\x7b\x45\xf8\xac\x8b\x9e\x73\x09\x67\x9c\x43\x50\xbe\x08\x19\x60\x96\x4f\xa3\x59\x4b\xa3\x50\x73\x51\xca\x3f\xfd\xf4\x63\xe0\x5c\x79\xcd\xd7\xf5\xfa\x67\xf2\xdf\xcf\x9f\x7f\xfc\xdc\xff\x59\xce\xf1\xb3\xff\xf4\xb7\xcf\xac\xb6\xd9\xfc\xfc\x2b\xe8\xef\xcc\xf9\x7b\x87\x0d\xf0\x09\x59\x3d\xd2\xbc\xa8\xa5\x09\x97\x48\xd4\x1e\x7f\x69\xa7\x01\xe3\x69\x13\x56\x4b\x6d\x8e\xd6\xcf\xd8\xf8\x1f\x3f\xe6\x9c\x29\xb2\x12\x2f\xa4\xe6\x92\x2d\xc4\x92\xe7\x7f\xb1\x0c\xc9\x72\x15\x3a\xc0\xc1\x55\xf2\x76\x8a\x13\xc6\xb3\x52\xe4\xbc\x82\x23\x76\x45\x79\x56\x84\x7c\x95\x12\x5a\xda\x5e\xc1\x7b\x75\x19\x9c\x46\x83\x3a\xec\xba\x49\xb1\xd1\x5d\xba\xcd\xd6\xd4\x8c\xa7\x1c\x76\xdb\x5e\x2d\xc5\x8d\xf1\x2e\x80\xb9\x74\xd4\x71\x18\x24\x80\x50\x07\xfc\xf6\x67\xcd\xe4\x1b\xc4\xed\x36\x8a\x5b\xcb\xa3\xf8\xbe\xa1\x6f\xb4\x6d\x34\x42\x25\xed\xb5\x09\x90\x0e\x48\xa6\x25\x6a\x35\x0e\x6e\x1b\xb5\x82\x34\x0c\xdd\x74\xac\xd5\x97\x9c\x11\x5e\x17\x45\xa0\xa4\x9e\x4c\xb8\x08\x59\x8e\xf1\x49\xc2\x1f\xd2\x80\x81\x54\x08\x0a\x9f\x8f\x03\xa2\xda\x0d\x1f\x49\x8b\x1a\xea\x4e\xfc\x41\x00\x15\x3e\xbb\xc0\x54\xf8\x0c\x08\x5f\x48\x0f\x5d\x48\xa3\x84\x4e\x80\xaf\xf0\x19\x12\xdb\x90\x48\xe4\xfc\x9e\x80\x16\x3e\x83\x7c\xe0\xd2\xc0\xad\x8e\xaa\x27\xfa\xb9\xbf\x23\xd0\x85\xcf\x7b\xc0\x5d\xf8\x0c\xea\xc7\x14\xe8\x0b\x9f\x5d\x7a\xf1\x00\x30\x98\x69\xf3\x21\xc1\xb0\x48\x91\x23\x43\x62\xf8\x24\x03\x63\xa6\x72\x83\x1c\x56\x07\x38\xab\x0e\x74\x54\xdd\xc3\x49\x75\xe7\xa4\x09\xe0\x19\x3e\xc3\x66\xf4\x01\x81\x34\x5b\xe0\xc1\xe0\x34\x7c\x0e\x0d\xaa\xe1\x93\x7c\x9e\x0e\x03\xd8\xda\x99\x47\xa6\xeb\x2e\x44\x57\x92\xe5\xfc\x59\xe0\x7d\x9f\x83\x94\x88\xf9\x56\xc2\x0d\x5d\xe2\x05\x8e\x51\xa3\x4c\x38\xed\xab\xad\x53\xad\x84\x78\x22\xb5\x8a\x5b\xd4\x82\xed\x8e\x84\xc7\x8e\xa2\x04\x0f\x59\x61\xf3\xba\x60\xbf\xe7\xd5\xea\xb6\xa1\x5c\x81\x65\x56\xd5\x65\x01\x7d\xd1\x7a\xa1\xe7\xe5\xbc\x51\x4e\x2e\x2b\xdc\x62\x17\x62\xbd\x66\x3c\x43\x6f\xcb\x35\x7d\x0a\x4f\x78\xa5\xd5\x5b\x8c\x2a\x28\x0a\x54\xe1\xa0\x28\xf6\x5a\x52\xde\x28\x2b\xcf\xfa\xa0\x0e\x4d\xe1\xc4\x09\x9c\x2a\x93\x25\xc7\x99\x0e\x96\xb7\x37\xe3\x4a\x5b\x81\xa1\x5e\xfc\x28\x79\x60\x85\x00\x4e\x29\x8c\x9c\xc0\x28\xa3\xe4\x50\xcb\xcb\x47\x9b\xca\x48\x4e\xe6\x9e\x22\xc6\x97\x0d\xd1\xbc\x2a\xf2\x05\x73\x47\xa6\x48\x21\xf3\x99\x1b\x69\x3a\x4d\x40\x4f\x39\xfb\x12\xcf\xbd\x01\x67\xde\x1e\xe7\x1d\x2d\xf3\x38\x14\x88\xcf\x0e\x23\x6f\xb3\x6e\x8f\xfd\xb3\xfd\x2d\x65\xf4\xed\xc7\xff\x8e\x7f\xe8\xd9\x63\xfc\x1b\xaa\xa9\xb1\x87\xdf\xdf\x51\x1b\x19\xd8\x8d\xfd\xc6\xd1\xb2\xa0\x52\x1f\xf6\x80\xe4\x4f\xc9\x6c\x7e\x71\x76\x7f\x71\x42\x7e\xfd\x72\x0e\x7f\xcf\x2f\xae\x2e\xf4\xdf\xd9\xed\xcd\xcd\xc5\xec\x5e\x0b\xcf\xc7\xd1\x2a\xc0\x45\xce\x45\x81\xa3\xaf\x25\x14\xe1\x6f\xe6\x94\xbf\x91\xc7\xba\xd2\x3b\x72\x53\x19\xaf\x96\x14\x21\x44\x9a\x65\x29\xc1\x8e\xdf\xdc\x1c\xf4\xc6\xdc\x0d\xe8\x26\x6a\xdb\xea\x33\x73\x77\xb6\x89\xeb\x8f\xb7\xec\x30\x93\x3c\x39\x4e\x73\xe8\x1c\xdf\x2d\x84\xf3\xbb\x68\xbe\xbf\x08\x49\xd8\x2b\x5d\x97\x45\x42\x84\xdc\x51\x29\x32\x75\x64\x62\x75\xf5\xbf\xe3\xdd\x0e\x49\x3e\x15\x62\x79\xe4\x42\x7c\x19\x29\xc4\x92\xa8\xfa\xc1\xc5\x6f\x83\x20\x98\x94\xdb\xb1\xcd\xc6\x0b\x46\x3d\x71\x41\xde\xad\x5c\x93\x2b\xe7\xe5\xd9\xce\x60\x48\xbd\x3e\xa9\x05\x2d\x98\x97\x93\xfe\x61\x68\x85\x8e\x3f\x75\xb7\xd0\x6a\x2a\xb9\xdc\xc8\x31\x65\xa7\x78\xc9\x8b\x6c\x41\x65\xb6\xb5\x5d\x80\xe8\x87\xab\x09\x66\x0e\x5e\x0c\xc8\x41\x70\x6c\x8a\x46\x22\xc8\x38\x62\xf5\xcc\x64\x41\x4b\x8c\x03\x84\x1b\x2d\xc1\x6f\x39\xa1\x8a\xe7\xac\x64\xc0\x23\x80\x97\x78\x31\xc2\xf8\xa2\x10\xc0\x74\x89\x52\xe7\x89\x3f\x2c\xe8\xe5\x6c\x2f\xdc\x49\x8d\x0f\xff\xc6\x8f\x57\x08\x28\x1b\x7b\xd7\xc1\x28\xb5\x5e\x36\x5a\x1b\x7f\x1c\xcd\x07\xc1\x40\xa7\x65\x33\x32\x31\x24\x12\x93\x13\x32\x71\xc4\xa3\x99\xd1\xc8\x27\xc7\x71\x4a\x67\x97\x41\x9b\x39\x00\x14\x76\xe3\xe9\x30\x85\x7a\xb6\x89\x5a\x60\x76\x5b\x1f\x8d\xe4\xaa\x37\xa4\xbc\x5a\xa4\x34\xa6\x16\x68\x83\x5f\x50\x3c\xa7\x76\x43\xb7\x6a\xdd\x30\x74\xec\x5d\xe3\xc9\xb1\x97\x7d\x65\xd9\xc9\x09\x17\x66\xf0\x24\xd3\xb3\x31\x14\x0a\xd0\x7e\xee\xbc\xb5\xe7\x7c\x5c\xda\xac\xc4\xb9\x24\x25\x95\x8c\x57\xae\xf2\xf1\x6c\xcd\x25\xce\x00\xc6\x1c\x4f\xd2\x56\x65\x70\x11\xb5\xdc\x1a\x12\xb1\x8a\x3b\x97\x62\x56\x50\xa5\x3a\x0c\x9e\x70\x06\xe8\x8c\x0d\x37\xbd\x3e\x7b\x8d\xcf\x07\x5c\x65\xba\xa2\xcf\x81\xa6\x26\x54\xba\xa2\x72\xc9\xaa\xb0\x43\x02\xe5\x6f\xb7\xc1\x4b\x20\xa6\xc9\x57\xc3\x4d\x77\x40\x8c\x72\x5e\x4d\x85\x9c\x62\x92\x9f\x49\x25\xeb\x3e\xdc\xa1\xca\xd7\x4c\xd4\xd5\x1d\x5b\x08\xde\x1d\x34\x6c\xbe\x1b\xcd\xc3\x62\x40\x24\xb5\x71\xf2\x39\xb3\xe2\x77\xfb\x66\x1a\x0b\x47\x35\xb2\xb9\x75\xec\xf1\xc9\x45\x6f\xaf\xae\xf7\x19\x6c\x02\x0c\x52\xe1\x91\xfc\xcd\x9c\xc9\x7c\xe9\x6a\x6a\x6a\x1e\x4c\x76\x5d\x57\xc3\x13\xcd\x9c\xc3\x48\xf8\x6b\xd3\x19\x61\xa2\xc7\xde\xf6\xab\x8a\x56\xf5\xd6\x6c\x88\x1d\x45\x66\x7f\xbf\x43\x22\x07\xa3\xde\xdf\x41\x56\x6d\x9b\x55\x9b\x43\x0e\x35\x3a\x24\xd1\x84\xef\x6c\x44\xc9\x29\x31\x09\xf5\x92\xad\x24\xcd\x11\x0e\xa3\x8b\xaa\xa6\xdb\x26\x77\x9d\xd8\x44\xa3\x74\x33\xc7\x06\x00\xb1\x10\x08\xb6\x60\xb2\x52\x57\x54\x55\xbf\x96\x19\xed\xe1\x10\xd8\x88\x32\x51\x15\xac\x29\xd4\x69\x5f\x38\xcb\xf4\x21\x64\xba\x04\xf3\x23\x2f\x7a\x77\xaf\x31\xc7\x8e\x0c\x23\xb3\xd2\xae\x31\x9d\x7c\xaa\x8b\xea\xae\xf5\x5c\xe8\x3e\x39\xeb\xdc\xa3\xfc\x60\x9e\x58\x6d\xf5\x89\x26\x21\x37\xc2\xd9\x6b\x97\x54\xb9\x7f\x8d\x0b\x46\x79\x77\xb0\xa5\x57\xd7\x19\x7e\x37\x7c\x4e\x99\x02\xc8\xcb\x2a\xd7\xea\x16\x72\x2d\x28\x62\x85\xd8\x8c\x15\xac\x87\x72\x61\xcf\xf8\x1f\x53\xc2\xb9\x29\x60\x5f\xd7\xe9\x2f\x7e\x76\xce\xe2\x6d\x74\x4b\x13\x95\xdb\x68\x69\x46\xf6\x71\x58\xc5\x66\x83\x41\x78\x7b\x28\xc4\xe2\x09\x49\xcd\x81\xd4\x2c\xff\x8b\xc9\x80\x90\x01\x56\xc4\x9c\x67\xf9\xc2\xb9\x2b\x94\x52\x2c\x25\x53\x5e\x57\x23\x07\xac\xc2\xdc\x75\x99\xba\xcf\x5d\xb9\x42\x36\xb6\x9d\x9a\x1b\xda\x8b\xc3\x84\x28\x59\xbd\x1c\xe2\x37\x3d\x5b\xfa\xb6\x8a\x8e\xfc\x92\x70\x2b\x86\x01\x68\xe8\xda\x04\x59\x7f\xfa\x5f\x7f\xe8\xf1\xa8\xf1\x43\xa1\x00\x68\xfc\x22\xb7\xf7\xde\x04\xbf\x0a\x84\x4a\xa7\x9a\x02\x22\x21\xd1\x24\x5d\x75\x72\x55\x4e\xc9\x6d\xd4\x98\x8a\xd1\xdd\x64\x12\xd8\x80\x87\x38\xbf\xa4\xde\x1e\x35\xc8\xec\xcd\x87\x5c\x9b\xe2\xad\x96\x46\x99\x32\xdc\x29\xe8\x1f\xf7\x28\x64\xaf\xda\x36\x5e\xe5\xc3\x01\xf4\xd1\x8c\xb4\x4c\xdb\xef\x88\xee\x1f\xdc\x76\x07\x75\x49\x4e\x08\x25\xab\x5c\x55\x42\x1a\x0f\x11\x7d\x00\x56\x92\x72\x85\xef\x7b\xcf\x8a\x7d\x5d\xdb\x67\xae\x0a\x84\x96\x25\xa3\xd2\xda\xe9\xcd\x71\x46\x15\x80\xa8\x0b\x21\xb3\xce\x8a\x59\x48\xa6\x53\x1c\xeb\x2c\x7e\x04\xee\x90\x82\xaa\xea\xde\xd5\x41\xcb\x14\x89\xbb\xb1\x2f\x31\x99\x26\x36\xad\xb1\x1c\x96\x82\x37\x2f\x05\xa1\xdc\x00\x55\x7d\x45\x24\xcd\xaf\xb8\x5c\xd2\xb4\x0d\x05\xc0\x9d\xda\xf5\xe2\x84\xbd\x56\x13\x0f\x53\xf3\x35\x53\x2a\x18\x50\xbe\xc1\x64\x03\x37\x4e\x11\x77\xe3\x94\x49\x6e\x0f\x7b\x14\x1c\x30\xb6\xc2\x32\x33\xbf\xf5\x4f\x35\x02\x62\x02\xc2\x20\x6e\x59\xed\x35\x64\xe5\x8a\xaa\xd4\xc6\xb8\x55\xe4\x62\x78\x92\x97\x43\x62\x6d\x24\xa3\x2a\xc4\xcd\x31\xc4\x09\xfa\x41\xe6\xec\x91\xcc\xe8\x9a\x15\x33\xaa\xc6\xec\x79\xd8\x1e\x42\x50\x0d\x3b\x5d\x9e\x92\xa3\x79\xcb\x4d\xe6\x46\x54\xd7\xac\x3a\xda\xad\x6f\xd2\x36\x82\x77\xdd\x02\xf6\x56\x47\xe2\x0b\x7e\xcf\xa5\xbe\x77\x0d\x03\x0b\xfb\xab\x58\xd2\x61\x5e\x9a\xbe\x65\xec\x2f\xe0\x5a\x02\x3c\xb9\xd8\x75\x21\x47\xb8\x2e\xfa\x16\x6f\xca\xb2\xfd\xa0\x05\x3b\x64\xa9\x46\x5a\xef\xb2\xb8\xeb\x84\x7a\xb6\x3a\xe2\xde\x53\xa7\xc1\x56\xd4\xf6\x8d\xc7\x9b\xa8\x72\xa5\x95\xbc\x31\x05\xa3\x8f\xe5\x8f\x32\x83\xda\xfb\x3e\x20\xf9\x4f\xc3\xe7\xfc\xbe\xdc\x54\x19\xd8\xdf\xf4\x0c\x38\xa4\xbb\xdc\xb9\x2d\xd5\x00\x30\xee\xfe\x1b\xf8\x1f\x5a\xf7\x5d\xcd\xbc\xf9\xf1\x7d\x25\x48\x29\xd9\x33\xc4\x51\x70\x88\x0f\x65\x84\x33\xa5\x17\xca\x0f\x81\xe2\x13\x55\xb6\x34\x75\x2d\xae\x4a\x47\xd5\x64\x12\x1f\x5a\xfb\x51\x68\x80\xf1\x49\xd5\x0a\x13\xb4\xee\x01\xea\x60\x5c\xa7\x1a\x90\x59\x54\xc0\x1c\x98\x5f\x37\xf0\xbc\xf9\x6c\x5c\x55\xa3\x93\xcc\x61\x3f\x47\x4f\x8b\x85\xde\x95\x17\x70\x0b\x13\x6e\xf3\xee\xa2\xbc\x36\xc8\x3c\xdf\xdc\x03\xc1\xe7\xde\x9f\xe1\x63\x35\xab\xae\xf3\xf1\xfa\x3c\x4a\x0a\x97\x9c\xdf\x57\xc0\x70\x17\x9d\x40\xef\x4b\x79\x85\x4f\x6c\xd6\x7d\xfc\x7c\x4b\x61\x3b\x0d\xce\xb1\x77\x22\x1b\x54\x4c\x3e\xb3\xcc\xb3\x30\x9a\xdb\xd0\xfc\xdf\x5a\xf6\xe8\x26\x7f\xd3\xed\xe4\xef\x7f\xbe\xfb\x7f\x00\x00\x00\xff\xff\x90\x1c\x07\x44\xe8\x50\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\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") func operatorsCoreosCom_clusterserviceversionsYamlBytes() ([]byte, error) { return bindataRead( diff --git a/vendor/github.com/operator-framework/api/pkg/lib/release/release.go b/vendor/github.com/operator-framework/api/pkg/lib/release/release.go new file mode 100644 index 0000000000..e91adf4c30 --- /dev/null +++ b/vendor/github.com/operator-framework/api/pkg/lib/release/release.go @@ -0,0 +1,73 @@ +package release + +import ( + "encoding/json" + "slices" + "strings" + + semver "github.com/blang/semver/v4" +) + +// +k8s:openapi-gen=true +// OperatorRelease is a wrapper around a slice of semver.PRVersion which supports correct +// marshaling to YAML and JSON. +// +kubebuilder:validation:Type=string +// +kubebuilder:validation:MaxLength=20 +// +kubebuilder:validation:XValidation:rule="self.matches('^[0-9A-Za-z-]+(\\\\.[0-9A-Za-z-]+)*$')",message="release version must be composed of dot-separated identifiers containing only alphanumerics and hyphens" +// +kubebuilder:validation:XValidation:rule="!self.split('.').exists(x, x.matches('^0[0-9]+$'))",message="numeric identifiers in release version must not have leading zeros" +type OperatorRelease struct { + Release []semver.PRVersion `json:"-"` +} + +// DeepCopyInto creates a deep-copy of the Version value. +func (v *OperatorRelease) DeepCopyInto(out *OperatorRelease) { + out.Release = slices.Clone(v.Release) +} + +// MarshalJSON implements the encoding/json.Marshaler interface. +func (v OperatorRelease) MarshalJSON() ([]byte, error) { + segments := []string{} + for _, segment := range v.Release { + segments = append(segments, segment.String()) + } + return json.Marshal(strings.Join(segments, ".")) +} + +// UnmarshalJSON implements the encoding/json.Unmarshaler interface. +func (v *OperatorRelease) UnmarshalJSON(data []byte) (err error) { + var versionString string + + if err = json.Unmarshal(data, &versionString); err != nil { + return + } + + segments := strings.Split(versionString, ".") + for _, segment := range segments { + release, err := semver.NewPRVersion(segment) + if err != nil { + return err + } + v.Release = append(v.Release, release) + } + + return nil +} + +// OpenAPISchemaType is used by the kube-openapi generator when constructing +// the OpenAPI spec of this type. +// +// See: https://github.com/kubernetes/kube-openapi/tree/master/pkg/generators +func (_ OperatorRelease) OpenAPISchemaType() []string { return []string{"string"} } + +// OpenAPISchemaFormat is used by the kube-openapi generator when constructing +// the OpenAPI spec of this type. +// "semver" is not a standard openapi format but tooling may use the value regardless +func (_ OperatorRelease) OpenAPISchemaFormat() string { return "semver" } + +func (r OperatorRelease) String() string { + segments := []string{} + for _, segment := range r.Release { + segments = append(segments, segment.String()) + } + return strings.Join(segments, ".") +} 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 397190a6a1..6ed1e4ddf6 100644 --- a/vendor/github.com/operator-framework/api/pkg/manifests/bundleloader.go +++ b/vendor/github.com/operator-framework/api/pkg/manifests/bundleloader.go @@ -39,6 +39,7 @@ func (b *bundleLoader) LoadBundle() error { errs = append(errs, b.calculateCompressedBundleSize()) b.addChannelsFromAnnotationsFile() + b.addPackageFromAnnotationsFile() if !b.foundCSV { errs = append(errs, fmt.Errorf("unable to find a csv in bundle directory %s", b.dir)) @@ -68,6 +69,14 @@ func (b *bundleLoader) addChannelsFromAnnotationsFile() { } } +func (b *bundleLoader) addPackageFromAnnotationsFile() { + if b.bundle == nil { + // None of this is relevant if the bundle was not found + return + } + b.bundle.Package = b.annotationsFile.Annotations.PackageName +} + // Compress the bundle to check its size func (b *bundleLoader) calculateCompressedBundleSize() error { if b.bundle == nil { diff --git a/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/clusterserviceversion_types.go b/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/clusterserviceversion_types.go index 3e6d324803..1efb4323ce 100644 --- a/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/clusterserviceversion_types.go +++ b/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/clusterserviceversion_types.go @@ -13,6 +13,7 @@ import ( "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/util/intstr" + "github.com/operator-framework/api/pkg/lib/release" "github.com/operator-framework/api/pkg/lib/version" ) @@ -274,8 +275,25 @@ type APIServiceDefinitions struct { // that can manage apps for a given version. // +k8s:openapi-gen=true type ClusterServiceVersionSpec struct { - InstallStrategy NamedInstallStrategy `json:"install"` - Version version.OperatorVersion `json:"version,omitempty"` + InstallStrategy NamedInstallStrategy `json:"install"` + Version version.OperatorVersion `json:"version,omitempty"` + // release specifies the packaging version of the operator, defaulting to empty + // release is optional + // + // A ClusterServiceVersion's release field is used to distinguish between different builds of the same operator version + // This is useful for operators that need to make changes to the CSV which don't affect their functionality, + // for example: + // - to fix a typo in their description + // - to add/amend annotations or labels + // - to amend examples or documentation + // - to produce different builds for different environments + // + // It is up to operator authors to determine the semantics of release versions they use + // for their operator. All release versions must conform to the semver prerelease format + // (dot-separated identifiers containing only alphanumerics and hyphens) and are limited + // to a maximum length of 20 characters. + // +optional + Release release.OperatorRelease `json:"release,omitzero"` Maturity string `json:"maturity,omitempty"` CustomResourceDefinitions CustomResourceDefinitions `json:"customresourcedefinitions,omitempty"` APIServiceDefinitions APIServiceDefinitions `json:"apiservicedefinitions,omitempty"` @@ -595,6 +613,7 @@ type ResourceInstance struct { // +kubebuilder:subresource:status // +kubebuilder:printcolumn:name="Display",type=string,JSONPath=`.spec.displayName`,description="The name of the CSV" // +kubebuilder:printcolumn:name="Version",type=string,JSONPath=`.spec.version`,description="The version of the CSV" +// +kubebuilder:printcolumn:name="Release",type=string,JSONPath=`.spec.release`,description="The release of this version of the CSV" // +kubebuilder:printcolumn:name="Replaces",type=string,JSONPath=`.spec.replaces`,description="The name of a CSV that this one replaces" // +kubebuilder:printcolumn:name="Phase",type=string,JSONPath=`.status.phase` diff --git a/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/zz_generated.deepcopy.go b/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/zz_generated.deepcopy.go index 684a7432a6..685fa26a31 100644 --- a/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/zz_generated.deepcopy.go +++ b/vendor/github.com/operator-framework/api/pkg/operators/v1alpha1/zz_generated.deepcopy.go @@ -501,6 +501,7 @@ func (in *ClusterServiceVersionSpec) DeepCopyInto(out *ClusterServiceVersionSpec *out = *in in.InstallStrategy.DeepCopyInto(&out.InstallStrategy) in.Version.DeepCopyInto(&out.Version) + in.Release.DeepCopyInto(&out.Release) in.CustomResourceDefinitions.DeepCopyInto(&out.CustomResourceDefinitions) in.APIServiceDefinitions.DeepCopyInto(&out.APIServiceDefinitions) if in.WebhookDefinitions != nil { diff --git a/vendor/github.com/operator-framework/api/pkg/validation/internal/bundle.go b/vendor/github.com/operator-framework/api/pkg/validation/internal/bundle.go index 9bb90a04d3..c5f7ba18d5 100644 --- a/vendor/github.com/operator-framework/api/pkg/validation/internal/bundle.go +++ b/vendor/github.com/operator-framework/api/pkg/validation/internal/bundle.go @@ -42,9 +42,26 @@ func validateBundle(bundle *manifests.Bundle) (result errors.ManifestResult) { if sizeErrors != nil { result.Add(sizeErrors...) } + nameErrors := validateBundleName(bundle) + if nameErrors != nil { + result.Add(nameErrors...) + } return result } +func validateBundleName(bundle *manifests.Bundle) []errors.Error { + var errs []errors.Error + // bundle naming with a specified release version must follow the pattern + // -v- + if len(bundle.CSV.Spec.Release.Release) > 0 { + expectedName := fmt.Sprintf("%s-v%s-%s", bundle.Package, bundle.CSV.Spec.Version.String(), bundle.CSV.Spec.Release.String()) + if bundle.Name != expectedName { + errs = append(errs, errors.ErrInvalidBundle(fmt.Sprintf("bundle name with release versioning %q does not match expected name %q", bundle.Name, expectedName), bundle.Name)) + } + } + return errs +} + func validateServiceAccounts(bundle *manifests.Bundle) []errors.Error { // get service account names defined in the csv saNamesFromCSV := make(map[string]struct{}, 0) diff --git a/vendor/github.com/operator-framework/api/pkg/validation/internal/typecheck.go b/vendor/github.com/operator-framework/api/pkg/validation/internal/typecheck.go index 197ef5de89..c5eafd454f 100644 --- a/vendor/github.com/operator-framework/api/pkg/validation/internal/typecheck.go +++ b/vendor/github.com/operator-framework/api/pkg/validation/internal/typecheck.go @@ -28,7 +28,7 @@ func checkEmptyFields(result *errors.ManifestResult, v reflect.Value, parentStru // Omitted field tags will contain ",omitempty", and ignored tags will // match "-" exactly, respectively. - isOptionalField := strings.Contains(tag, ",omitempty") || tag == "-" + isOptionalField := strings.Contains(tag, ",omitempty") || strings.Contains(tag, ",omitzero") || tag == "-" emptyVal := fieldValue.IsZero() newParentStructName := fieldType.Name diff --git a/vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/package-server/client/openapi/zz_generated.openapi.go b/vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/package-server/client/openapi/zz_generated.openapi.go index 993cbf55da..8caeb4aa8b 100644 --- a/vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/package-server/client/openapi/zz_generated.openapi.go +++ b/vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/package-server/client/openapi/zz_generated.openapi.go @@ -629,6 +629,12 @@ func schema_api_pkg_operators_v1alpha1_ClusterServiceVersionSpec(ref common.Refe Ref: ref("github.com/operator-framework/api/pkg/lib/version.OperatorVersion"), }, }, + "release": { + SchemaProps: spec.SchemaProps{ + Description: "release specifies the packaging version of the operator, defaulting to empty release is optional\n\nA ClusterServiceVersion's release field is used to distinguish between different builds of the same operator version This is useful for operators that need to make changes to the CSV which don't affect their functionality, for example: - to fix a typo in their description - to add/amend annotations or labels - to amend examples or documentation - to produce different builds for different environments\n\nIt is up to operator authors to determine the semantics of release versions they use for their operator. All release versions must conform to the semver prerelease format (dot-separated identifiers containing only alphanumerics and hyphens) and are limited to a maximum length of 20 characters.", + Ref: ref("github.com/operator-framework/api/pkg/lib/release.OperatorRelease"), + }, + }, "maturity": { SchemaProps: spec.SchemaProps{ Type: []string{"string"}, @@ -858,7 +864,7 @@ func schema_api_pkg_operators_v1alpha1_ClusterServiceVersionSpec(ref common.Refe }, }, Dependencies: []string{ - "github.com/operator-framework/api/pkg/lib/version.OperatorVersion", "github.com/operator-framework/api/pkg/operators/v1alpha1.APIServiceDefinitions", "github.com/operator-framework/api/pkg/operators/v1alpha1.AppLink", "github.com/operator-framework/api/pkg/operators/v1alpha1.CleanupSpec", "github.com/operator-framework/api/pkg/operators/v1alpha1.CustomResourceDefinitions", "github.com/operator-framework/api/pkg/operators/v1alpha1.Icon", "github.com/operator-framework/api/pkg/operators/v1alpha1.InstallMode", "github.com/operator-framework/api/pkg/operators/v1alpha1.Maintainer", "github.com/operator-framework/api/pkg/operators/v1alpha1.NamedInstallStrategy", "github.com/operator-framework/api/pkg/operators/v1alpha1.RelatedImage", "github.com/operator-framework/api/pkg/operators/v1alpha1.WebhookDescription", "k8s.io/apimachinery/pkg/apis/meta/v1.GroupVersionKind", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + "github.com/operator-framework/api/pkg/lib/release.OperatorRelease", "github.com/operator-framework/api/pkg/lib/version.OperatorVersion", "github.com/operator-framework/api/pkg/operators/v1alpha1.APIServiceDefinitions", "github.com/operator-framework/api/pkg/operators/v1alpha1.AppLink", "github.com/operator-framework/api/pkg/operators/v1alpha1.CleanupSpec", "github.com/operator-framework/api/pkg/operators/v1alpha1.CustomResourceDefinitions", "github.com/operator-framework/api/pkg/operators/v1alpha1.Icon", "github.com/operator-framework/api/pkg/operators/v1alpha1.InstallMode", "github.com/operator-framework/api/pkg/operators/v1alpha1.Maintainer", "github.com/operator-framework/api/pkg/operators/v1alpha1.NamedInstallStrategy", "github.com/operator-framework/api/pkg/operators/v1alpha1.RelatedImage", "github.com/operator-framework/api/pkg/operators/v1alpha1.WebhookDescription", "k8s.io/apimachinery/pkg/apis/meta/v1.GroupVersionKind", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, } } diff --git a/vendor/github.com/rivo/uniseg/README.md b/vendor/github.com/rivo/uniseg/README.md deleted file mode 100644 index a8191b8154..0000000000 --- a/vendor/github.com/rivo/uniseg/README.md +++ /dev/null @@ -1,137 +0,0 @@ -# Unicode Text Segmentation for Go - -[![Go Reference](https://pkg.go.dev/badge/github.com/rivo/uniseg.svg)](https://pkg.go.dev/github.com/rivo/uniseg) -[![Go Report](https://img.shields.io/badge/go%20report-A%2B-brightgreen.svg)](https://goreportcard.com/report/github.com/rivo/uniseg) - -This Go package implements Unicode Text Segmentation according to [Unicode Standard Annex #29](https://unicode.org/reports/tr29/), Unicode Line Breaking according to [Unicode Standard Annex #14](https://unicode.org/reports/tr14/) (Unicode version 15.0.0), and monospace font string width calculation similar to [wcwidth](https://man7.org/linux/man-pages/man3/wcwidth.3.html). - -## Background - -### Grapheme Clusters - -In Go, [strings are read-only slices of bytes](https://go.dev/blog/strings). They can be turned into Unicode code points using the `for` loop or by casting: `[]rune(str)`. However, multiple code points may be combined into one user-perceived character or what the Unicode specification calls "grapheme cluster". Here are some examples: - -|String|Bytes (UTF-8)|Code points (runes)|Grapheme clusters| -|-|-|-|-| -|Käse|6 bytes: `4b 61 cc 88 73 65`|5 code points: `4b 61 308 73 65`|4 clusters: `[4b],[61 308],[73],[65]`| -|🏳️‍🌈|14 bytes: `f0 9f 8f b3 ef b8 8f e2 80 8d f0 9f 8c 88`|4 code points: `1f3f3 fe0f 200d 1f308`|1 cluster: `[1f3f3 fe0f 200d 1f308]`| -|🇩🇪|8 bytes: `f0 9f 87 a9 f0 9f 87 aa`|2 code points: `1f1e9 1f1ea`|1 cluster: `[1f1e9 1f1ea]`| - -This package provides tools to iterate over these grapheme clusters. This may be used to determine the number of user-perceived characters, to split strings in their intended places, or to extract individual characters which form a unit. - -### Word Boundaries - -Word boundaries are used in a number of different contexts. The most familiar ones are selection (double-click mouse selection), cursor movement ("move to next word" control-arrow keys), and the dialog option "Whole Word Search" for search and replace. They are also used in database queries, to determine whether elements are within a certain number of words of one another. Searching may also use word boundaries in determining matching items. This package provides tools to determine word boundaries within strings. - -### Sentence Boundaries - -Sentence boundaries are often used for triple-click or some other method of selecting or iterating through blocks of text that are larger than single words. They are also used to determine whether words occur within the same sentence in database queries. This package provides tools to determine sentence boundaries within strings. - -### Line Breaking - -Line breaking, also known as word wrapping, is the process of breaking a section of text into lines such that it will fit in the available width of a page, window or other display area. This package provides tools to determine where a string may or may not be broken and where it must be broken (for example after newline characters). - -### Monospace Width - -Most terminals or text displays / text editors using a monospace font (for example source code editors) use a fixed width for each character. Some characters such as emojis or characters found in Asian and other languages may take up more than one character cell. This package provides tools to determine the number of cells a string will take up when displayed in a monospace font. See [here](https://pkg.go.dev/github.com/rivo/uniseg#hdr-Monospace_Width) for more information. - -## Installation - -```bash -go get github.com/rivo/uniseg -``` - -## Examples - -### Counting Characters in a String - -```go -n := uniseg.GraphemeClusterCount("🇩🇪🏳️‍🌈") -fmt.Println(n) -// 2 -``` - -### Calculating the Monospace String Width - -```go -width := uniseg.StringWidth("🇩🇪🏳️‍🌈!") -fmt.Println(width) -// 5 -``` - -### Using the [`Graphemes`](https://pkg.go.dev/github.com/rivo/uniseg#Graphemes) Class - -This is the most convenient method of iterating over grapheme clusters: - -```go -gr := uniseg.NewGraphemes("👍🏼!") -for gr.Next() { - fmt.Printf("%x ", gr.Runes()) -} -// [1f44d 1f3fc] [21] -``` - -### Using the [`Step`](https://pkg.go.dev/github.com/rivo/uniseg#Step) or [`StepString`](https://pkg.go.dev/github.com/rivo/uniseg#StepString) Function - -This avoids allocating a new `Graphemes` object but it requires the handling of states and boundaries: - -```go -str := "🇩🇪🏳️‍🌈" -state := -1 -var c string -for len(str) > 0 { - c, str, _, state = uniseg.StepString(str, state) - fmt.Printf("%x ", []rune(c)) -} -// [1f1e9 1f1ea] [1f3f3 fe0f 200d 1f308] -``` - -### Advanced Examples - -The [`Graphemes`](https://pkg.go.dev/github.com/rivo/uniseg#Graphemes) class offers the most convenient way to access all functionality of this package. But in some cases, it may be better to use the specialized functions directly. For example, if you're only interested in word segmentation, use [`FirstWord`](https://pkg.go.dev/github.com/rivo/uniseg#FirstWord) or [`FirstWordInString`](https://pkg.go.dev/github.com/rivo/uniseg#FirstWordInString): - -```go -str := "Hello, world!" -state := -1 -var c string -for len(str) > 0 { - c, str, state = uniseg.FirstWordInString(str, state) - fmt.Printf("(%s)\n", c) -} -// (Hello) -// (,) -// ( ) -// (world) -// (!) -``` - -Similarly, use - -- [`FirstGraphemeCluster`](https://pkg.go.dev/github.com/rivo/uniseg#FirstGraphemeCluster) or [`FirstGraphemeClusterInString`](https://pkg.go.dev/github.com/rivo/uniseg#FirstGraphemeClusterInString) for grapheme cluster determination only, -- [`FirstSentence`](https://pkg.go.dev/github.com/rivo/uniseg#FirstSentence) or [`FirstSentenceInString`](https://pkg.go.dev/github.com/rivo/uniseg#FirstSentenceInString) for sentence segmentation only, and -- [`FirstLineSegment`](https://pkg.go.dev/github.com/rivo/uniseg#FirstLineSegment) or [`FirstLineSegmentInString`](https://pkg.go.dev/github.com/rivo/uniseg#FirstLineSegmentInString) for line breaking / word wrapping (although using [`Step`](https://pkg.go.dev/github.com/rivo/uniseg#Step) or [`StepString`](https://pkg.go.dev/github.com/rivo/uniseg#StepString) is preferred as it will observe grapheme cluster boundaries). - -If you're only interested in the width of characters, use [`FirstGraphemeCluster`](https://pkg.go.dev/github.com/rivo/uniseg#FirstGraphemeCluster) or [`FirstGraphemeClusterInString`](https://pkg.go.dev/github.com/rivo/uniseg#FirstGraphemeClusterInString). It is much faster than using [`Step`](https://pkg.go.dev/github.com/rivo/uniseg#Step), [`StepString`](https://pkg.go.dev/github.com/rivo/uniseg#StepString), or the [`Graphemes`](https://pkg.go.dev/github.com/rivo/uniseg#Graphemes) class because it does not include the logic for word / sentence / line boundaries. - -Finally, if you need to reverse a string while preserving grapheme clusters, use [`ReverseString`](https://pkg.go.dev/github.com/rivo/uniseg#ReverseString): - -```go -fmt.Println(uniseg.ReverseString("🇩🇪🏳️‍🌈")) -// 🏳️‍🌈🇩🇪 -``` - -## Documentation - -Refer to https://pkg.go.dev/github.com/rivo/uniseg for the package's documentation. - -## Dependencies - -This package does not depend on any packages outside the standard library. - -## Sponsor this Project - -[Become a Sponsor on GitHub](https://github.com/sponsors/rivo?metadata_source=uniseg_readme) to support this project! - -## Your Feedback - -Add your issue here on GitHub, preferably before submitting any PR's. Feel free to get in touch if you have any questions. \ No newline at end of file diff --git a/vendor/github.com/rivo/uniseg/doc.go b/vendor/github.com/rivo/uniseg/doc.go deleted file mode 100644 index 11224ae22d..0000000000 --- a/vendor/github.com/rivo/uniseg/doc.go +++ /dev/null @@ -1,108 +0,0 @@ -/* -Package uniseg implements Unicode Text Segmentation, Unicode Line Breaking, and -string width calculation for monospace fonts. Unicode Text Segmentation conforms -to Unicode Standard Annex #29 (https://unicode.org/reports/tr29/) and Unicode -Line Breaking conforms to Unicode Standard Annex #14 -(https://unicode.org/reports/tr14/). - -In short, using this package, you can split a string into grapheme clusters -(what people would usually refer to as a "character"), into words, and into -sentences. Or, in its simplest case, this package allows you to count the number -of characters in a string, especially when it contains complex characters such -as emojis, combining characters, or characters from Asian, Arabic, Hebrew, or -other languages. Additionally, you can use it to implement line breaking (or -"word wrapping"), that is, to determine where text can be broken over to the -next line when the width of the line is not big enough to fit the entire text. -Finally, you can use it to calculate the display width of a string for monospace -fonts. - -# Getting Started - -If you just want to count the number of characters in a string, you can use -[GraphemeClusterCount]. If you want to determine the display width of a string, -you can use [StringWidth]. If you want to iterate over a string, you can use -[Step], [StepString], or the [Graphemes] class (more convenient but less -performant). This will provide you with all information: grapheme clusters, -word boundaries, sentence boundaries, line breaks, and monospace character -widths. The specialized functions [FirstGraphemeCluster], -[FirstGraphemeClusterInString], [FirstWord], [FirstWordInString], -[FirstSentence], and [FirstSentenceInString] can be used if only one type of -information is needed. - -# Grapheme Clusters - -Consider the rainbow flag emoji: 🏳️‍🌈. On most modern systems, it appears as one -character. But its string representation actually has 14 bytes, so counting -bytes (or using len("🏳️‍🌈")) will not work as expected. Counting runes won't, -either: The flag has 4 Unicode code points, thus 4 runes. The stdlib function -utf8.RuneCountInString("🏳️‍🌈") and len([]rune("🏳️‍🌈")) will both return 4. - -The [GraphemeClusterCount] function will return 1 for the rainbow flag emoji. -The Graphemes class and a variety of functions in this package will allow you to -split strings into its grapheme clusters. - -# Word Boundaries - -Word boundaries are used in a number of different contexts. The most familiar -ones are selection (double-click mouse selection), cursor movement ("move to -next word" control-arrow keys), and the dialog option "Whole Word Search" for -search and replace. This package provides methods for determining word -boundaries. - -# Sentence Boundaries - -Sentence boundaries are often used for triple-click or some other method of -selecting or iterating through blocks of text that are larger than single words. -They are also used to determine whether words occur within the same sentence in -database queries. This package provides methods for determining sentence -boundaries. - -# Line Breaking - -Line breaking, also known as word wrapping, is the process of breaking a section -of text into lines such that it will fit in the available width of a page, -window or other display area. This package provides methods to determine the -positions in a string where a line must be broken, may be broken, or must not be -broken. - -# Monospace Width - -Monospace width, as referred to in this package, is the width of a string in a -monospace font. This is commonly used in terminal user interfaces or text -displays or editors that don't support proportional fonts. A width of 1 -corresponds to a single character cell. The C function [wcswidth()] and its -implementation in other programming languages is in widespread use for the same -purpose. However, there is no standard for the calculation of such widths, and -this package differs from wcswidth() in a number of ways, presumably to generate -more visually pleasing results. - -To start, we assume that every code point has a width of 1, with the following -exceptions: - - - Code points with grapheme cluster break properties Control, CR, LF, Extend, - and ZWJ have a width of 0. - - U+2E3A, Two-Em Dash, has a width of 3. - - U+2E3B, Three-Em Dash, has a width of 4. - - Characters with the East-Asian Width properties "Fullwidth" (F) and "Wide" - (W) have a width of 2. (Properties "Ambiguous" (A) and "Neutral" (N) both - have a width of 1.) - - Code points with grapheme cluster break property Regional Indicator have a - width of 2. - - Code points with grapheme cluster break property Extended Pictographic have - a width of 2, unless their Emoji Presentation flag is "No", in which case - the width is 1. - -For Hangul grapheme clusters composed of conjoining Jamo and for Regional -Indicators (flags), all code points except the first one have a width of 0. For -grapheme clusters starting with an Extended Pictographic, any additional code -point will force a total width of 2, except if the Variation Selector-15 -(U+FE0E) is included, in which case the total width is always 1. Grapheme -clusters ending with Variation Selector-16 (U+FE0F) have a width of 2. - -Note that whether these widths appear correct depends on your application's -render engine, to which extent it conforms to the Unicode Standard, and its -choice of font. - -[wcswidth()]: https://man7.org/linux/man-pages/man3/wcswidth.3.html -*/ -package uniseg diff --git a/vendor/github.com/rivo/uniseg/eastasianwidth.go b/vendor/github.com/rivo/uniseg/eastasianwidth.go deleted file mode 100644 index 5fc54d9915..0000000000 --- a/vendor/github.com/rivo/uniseg/eastasianwidth.go +++ /dev/null @@ -1,2588 +0,0 @@ -// Code generated via go generate from gen_properties.go. DO NOT EDIT. - -package uniseg - -// eastAsianWidth are taken from -// https://www.unicode.org/Public/15.0.0/ucd/EastAsianWidth.txt -// and -// https://unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt -// ("Extended_Pictographic" only) -// on September 5, 2023. See https://www.unicode.org/license.html for the Unicode -// license agreement. -var eastAsianWidth = [][3]int{ - {0x0000, 0x001F, prN}, // Cc [32] .. - {0x0020, 0x0020, prNa}, // Zs SPACE - {0x0021, 0x0023, prNa}, // Po [3] EXCLAMATION MARK..NUMBER SIGN - {0x0024, 0x0024, prNa}, // Sc DOLLAR SIGN - {0x0025, 0x0027, prNa}, // Po [3] PERCENT SIGN..APOSTROPHE - {0x0028, 0x0028, prNa}, // Ps LEFT PARENTHESIS - {0x0029, 0x0029, prNa}, // Pe RIGHT PARENTHESIS - {0x002A, 0x002A, prNa}, // Po ASTERISK - {0x002B, 0x002B, prNa}, // Sm PLUS SIGN - {0x002C, 0x002C, prNa}, // Po COMMA - {0x002D, 0x002D, prNa}, // Pd HYPHEN-MINUS - {0x002E, 0x002F, prNa}, // Po [2] FULL STOP..SOLIDUS - {0x0030, 0x0039, prNa}, // Nd [10] DIGIT ZERO..DIGIT NINE - {0x003A, 0x003B, prNa}, // Po [2] COLON..SEMICOLON - {0x003C, 0x003E, prNa}, // Sm [3] LESS-THAN SIGN..GREATER-THAN SIGN - {0x003F, 0x0040, prNa}, // Po [2] QUESTION MARK..COMMERCIAL AT - {0x0041, 0x005A, prNa}, // Lu [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z - {0x005B, 0x005B, prNa}, // Ps LEFT SQUARE BRACKET - {0x005C, 0x005C, prNa}, // Po REVERSE SOLIDUS - {0x005D, 0x005D, prNa}, // Pe RIGHT SQUARE BRACKET - {0x005E, 0x005E, prNa}, // Sk CIRCUMFLEX ACCENT - {0x005F, 0x005F, prNa}, // Pc LOW LINE - {0x0060, 0x0060, prNa}, // Sk GRAVE ACCENT - {0x0061, 0x007A, prNa}, // Ll [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z - {0x007B, 0x007B, prNa}, // Ps LEFT CURLY BRACKET - {0x007C, 0x007C, prNa}, // Sm VERTICAL LINE - {0x007D, 0x007D, prNa}, // Pe RIGHT CURLY BRACKET - {0x007E, 0x007E, prNa}, // Sm TILDE - {0x007F, 0x007F, prN}, // Cc - {0x0080, 0x009F, prN}, // Cc [32] .. - {0x00A0, 0x00A0, prN}, // Zs NO-BREAK SPACE - {0x00A1, 0x00A1, prA}, // Po INVERTED EXCLAMATION MARK - {0x00A2, 0x00A3, prNa}, // Sc [2] CENT SIGN..POUND SIGN - {0x00A4, 0x00A4, prA}, // Sc CURRENCY SIGN - {0x00A5, 0x00A5, prNa}, // Sc YEN SIGN - {0x00A6, 0x00A6, prNa}, // So BROKEN BAR - {0x00A7, 0x00A7, prA}, // Po SECTION SIGN - {0x00A8, 0x00A8, prA}, // Sk DIAERESIS - {0x00A9, 0x00A9, prN}, // So COPYRIGHT SIGN - {0x00AA, 0x00AA, prA}, // Lo FEMININE ORDINAL INDICATOR - {0x00AB, 0x00AB, prN}, // Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - {0x00AC, 0x00AC, prNa}, // Sm NOT SIGN - {0x00AD, 0x00AD, prA}, // Cf SOFT HYPHEN - {0x00AE, 0x00AE, prA}, // So REGISTERED SIGN - {0x00AF, 0x00AF, prNa}, // Sk MACRON - {0x00B0, 0x00B0, prA}, // So DEGREE SIGN - {0x00B1, 0x00B1, prA}, // Sm PLUS-MINUS SIGN - {0x00B2, 0x00B3, prA}, // No [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE - {0x00B4, 0x00B4, prA}, // Sk ACUTE ACCENT - {0x00B5, 0x00B5, prN}, // Ll MICRO SIGN - {0x00B6, 0x00B7, prA}, // Po [2] PILCROW SIGN..MIDDLE DOT - {0x00B8, 0x00B8, prA}, // Sk CEDILLA - {0x00B9, 0x00B9, prA}, // No SUPERSCRIPT ONE - {0x00BA, 0x00BA, prA}, // Lo MASCULINE ORDINAL INDICATOR - {0x00BB, 0x00BB, prN}, // Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - {0x00BC, 0x00BE, prA}, // No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS - {0x00BF, 0x00BF, prA}, // Po INVERTED QUESTION MARK - {0x00C0, 0x00C5, prN}, // Lu [6] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER A WITH RING ABOVE - {0x00C6, 0x00C6, prA}, // Lu LATIN CAPITAL LETTER AE - {0x00C7, 0x00CF, prN}, // Lu [9] LATIN CAPITAL LETTER C WITH CEDILLA..LATIN CAPITAL LETTER I WITH DIAERESIS - {0x00D0, 0x00D0, prA}, // Lu LATIN CAPITAL LETTER ETH - {0x00D1, 0x00D6, prN}, // Lu [6] LATIN CAPITAL LETTER N WITH TILDE..LATIN CAPITAL LETTER O WITH DIAERESIS - {0x00D7, 0x00D7, prA}, // Sm MULTIPLICATION SIGN - {0x00D8, 0x00D8, prA}, // Lu LATIN CAPITAL LETTER O WITH STROKE - {0x00D9, 0x00DD, prN}, // Lu [5] LATIN CAPITAL LETTER U WITH GRAVE..LATIN CAPITAL LETTER Y WITH ACUTE - {0x00DE, 0x00E1, prA}, // L& [4] LATIN CAPITAL LETTER THORN..LATIN SMALL LETTER A WITH ACUTE - {0x00E2, 0x00E5, prN}, // Ll [4] LATIN SMALL LETTER A WITH CIRCUMFLEX..LATIN SMALL LETTER A WITH RING ABOVE - {0x00E6, 0x00E6, prA}, // Ll LATIN SMALL LETTER AE - {0x00E7, 0x00E7, prN}, // Ll LATIN SMALL LETTER C WITH CEDILLA - {0x00E8, 0x00EA, prA}, // Ll [3] LATIN SMALL LETTER E WITH GRAVE..LATIN SMALL LETTER E WITH CIRCUMFLEX - {0x00EB, 0x00EB, prN}, // Ll LATIN SMALL LETTER E WITH DIAERESIS - {0x00EC, 0x00ED, prA}, // Ll [2] LATIN SMALL LETTER I WITH GRAVE..LATIN SMALL LETTER I WITH ACUTE - {0x00EE, 0x00EF, prN}, // Ll [2] LATIN SMALL LETTER I WITH CIRCUMFLEX..LATIN SMALL LETTER I WITH DIAERESIS - {0x00F0, 0x00F0, prA}, // Ll LATIN SMALL LETTER ETH - {0x00F1, 0x00F1, prN}, // Ll LATIN SMALL LETTER N WITH TILDE - {0x00F2, 0x00F3, prA}, // Ll [2] LATIN SMALL LETTER O WITH GRAVE..LATIN SMALL LETTER O WITH ACUTE - {0x00F4, 0x00F6, prN}, // Ll [3] LATIN SMALL LETTER O WITH CIRCUMFLEX..LATIN SMALL LETTER O WITH DIAERESIS - {0x00F7, 0x00F7, prA}, // Sm DIVISION SIGN - {0x00F8, 0x00FA, prA}, // Ll [3] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER U WITH ACUTE - {0x00FB, 0x00FB, prN}, // Ll LATIN SMALL LETTER U WITH CIRCUMFLEX - {0x00FC, 0x00FC, prA}, // Ll LATIN SMALL LETTER U WITH DIAERESIS - {0x00FD, 0x00FD, prN}, // Ll LATIN SMALL LETTER Y WITH ACUTE - {0x00FE, 0x00FE, prA}, // Ll LATIN SMALL LETTER THORN - {0x00FF, 0x00FF, prN}, // Ll LATIN SMALL LETTER Y WITH DIAERESIS - {0x0100, 0x0100, prN}, // Lu LATIN CAPITAL LETTER A WITH MACRON - {0x0101, 0x0101, prA}, // Ll LATIN SMALL LETTER A WITH MACRON - {0x0102, 0x0110, prN}, // L& [15] LATIN CAPITAL LETTER A WITH BREVE..LATIN CAPITAL LETTER D WITH STROKE - {0x0111, 0x0111, prA}, // Ll LATIN SMALL LETTER D WITH STROKE - {0x0112, 0x0112, prN}, // Lu LATIN CAPITAL LETTER E WITH MACRON - {0x0113, 0x0113, prA}, // Ll LATIN SMALL LETTER E WITH MACRON - {0x0114, 0x011A, prN}, // L& [7] LATIN CAPITAL LETTER E WITH BREVE..LATIN CAPITAL LETTER E WITH CARON - {0x011B, 0x011B, prA}, // Ll LATIN SMALL LETTER E WITH CARON - {0x011C, 0x0125, prN}, // L& [10] LATIN CAPITAL LETTER G WITH CIRCUMFLEX..LATIN SMALL LETTER H WITH CIRCUMFLEX - {0x0126, 0x0127, prA}, // L& [2] LATIN CAPITAL LETTER H WITH STROKE..LATIN SMALL LETTER H WITH STROKE - {0x0128, 0x012A, prN}, // L& [3] LATIN CAPITAL LETTER I WITH TILDE..LATIN CAPITAL LETTER I WITH MACRON - {0x012B, 0x012B, prA}, // Ll LATIN SMALL LETTER I WITH MACRON - {0x012C, 0x0130, prN}, // L& [5] LATIN CAPITAL LETTER I WITH BREVE..LATIN CAPITAL LETTER I WITH DOT ABOVE - {0x0131, 0x0133, prA}, // L& [3] LATIN SMALL LETTER DOTLESS I..LATIN SMALL LIGATURE IJ - {0x0134, 0x0137, prN}, // L& [4] LATIN CAPITAL LETTER J WITH CIRCUMFLEX..LATIN SMALL LETTER K WITH CEDILLA - {0x0138, 0x0138, prA}, // Ll LATIN SMALL LETTER KRA - {0x0139, 0x013E, prN}, // L& [6] LATIN CAPITAL LETTER L WITH ACUTE..LATIN SMALL LETTER L WITH CARON - {0x013F, 0x0142, prA}, // L& [4] LATIN CAPITAL LETTER L WITH MIDDLE DOT..LATIN SMALL LETTER L WITH STROKE - {0x0143, 0x0143, prN}, // Lu LATIN CAPITAL LETTER N WITH ACUTE - {0x0144, 0x0144, prA}, // Ll LATIN SMALL LETTER N WITH ACUTE - {0x0145, 0x0147, prN}, // L& [3] LATIN CAPITAL LETTER N WITH CEDILLA..LATIN CAPITAL LETTER N WITH CARON - {0x0148, 0x014B, prA}, // L& [4] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER ENG - {0x014C, 0x014C, prN}, // Lu LATIN CAPITAL LETTER O WITH MACRON - {0x014D, 0x014D, prA}, // Ll LATIN SMALL LETTER O WITH MACRON - {0x014E, 0x0151, prN}, // L& [4] LATIN CAPITAL LETTER O WITH BREVE..LATIN SMALL LETTER O WITH DOUBLE ACUTE - {0x0152, 0x0153, prA}, // L& [2] LATIN CAPITAL LIGATURE OE..LATIN SMALL LIGATURE OE - {0x0154, 0x0165, prN}, // L& [18] LATIN CAPITAL LETTER R WITH ACUTE..LATIN SMALL LETTER T WITH CARON - {0x0166, 0x0167, prA}, // L& [2] LATIN CAPITAL LETTER T WITH STROKE..LATIN SMALL LETTER T WITH STROKE - {0x0168, 0x016A, prN}, // L& [3] LATIN CAPITAL LETTER U WITH TILDE..LATIN CAPITAL LETTER U WITH MACRON - {0x016B, 0x016B, prA}, // Ll LATIN SMALL LETTER U WITH MACRON - {0x016C, 0x017F, prN}, // L& [20] LATIN CAPITAL LETTER U WITH BREVE..LATIN SMALL LETTER LONG S - {0x0180, 0x01BA, prN}, // L& [59] LATIN SMALL LETTER B WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL - {0x01BB, 0x01BB, prN}, // Lo LATIN LETTER TWO WITH STROKE - {0x01BC, 0x01BF, prN}, // L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN - {0x01C0, 0x01C3, prN}, // Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK - {0x01C4, 0x01CD, prN}, // L& [10] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER A WITH CARON - {0x01CE, 0x01CE, prA}, // Ll LATIN SMALL LETTER A WITH CARON - {0x01CF, 0x01CF, prN}, // Lu LATIN CAPITAL LETTER I WITH CARON - {0x01D0, 0x01D0, prA}, // Ll LATIN SMALL LETTER I WITH CARON - {0x01D1, 0x01D1, prN}, // Lu LATIN CAPITAL LETTER O WITH CARON - {0x01D2, 0x01D2, prA}, // Ll LATIN SMALL LETTER O WITH CARON - {0x01D3, 0x01D3, prN}, // Lu LATIN CAPITAL LETTER U WITH CARON - {0x01D4, 0x01D4, prA}, // Ll LATIN SMALL LETTER U WITH CARON - {0x01D5, 0x01D5, prN}, // Lu LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON - {0x01D6, 0x01D6, prA}, // Ll LATIN SMALL LETTER U WITH DIAERESIS AND MACRON - {0x01D7, 0x01D7, prN}, // Lu LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE - {0x01D8, 0x01D8, prA}, // Ll LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE - {0x01D9, 0x01D9, prN}, // Lu LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON - {0x01DA, 0x01DA, prA}, // Ll LATIN SMALL LETTER U WITH DIAERESIS AND CARON - {0x01DB, 0x01DB, prN}, // Lu LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE - {0x01DC, 0x01DC, prA}, // Ll LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE - {0x01DD, 0x024F, prN}, // L& [115] LATIN SMALL LETTER TURNED E..LATIN SMALL LETTER Y WITH STROKE - {0x0250, 0x0250, prN}, // Ll LATIN SMALL LETTER TURNED A - {0x0251, 0x0251, prA}, // Ll LATIN SMALL LETTER ALPHA - {0x0252, 0x0260, prN}, // Ll [15] LATIN SMALL LETTER TURNED ALPHA..LATIN SMALL LETTER G WITH HOOK - {0x0261, 0x0261, prA}, // Ll LATIN SMALL LETTER SCRIPT G - {0x0262, 0x0293, prN}, // Ll [50] LATIN LETTER SMALL CAPITAL G..LATIN SMALL LETTER EZH WITH CURL - {0x0294, 0x0294, prN}, // Lo LATIN LETTER GLOTTAL STOP - {0x0295, 0x02AF, prN}, // Ll [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL - {0x02B0, 0x02C1, prN}, // Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP - {0x02C2, 0x02C3, prN}, // Sk [2] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER RIGHT ARROWHEAD - {0x02C4, 0x02C4, prA}, // Sk MODIFIER LETTER UP ARROWHEAD - {0x02C5, 0x02C5, prN}, // Sk MODIFIER LETTER DOWN ARROWHEAD - {0x02C6, 0x02C6, prN}, // Lm MODIFIER LETTER CIRCUMFLEX ACCENT - {0x02C7, 0x02C7, prA}, // Lm CARON - {0x02C8, 0x02C8, prN}, // Lm MODIFIER LETTER VERTICAL LINE - {0x02C9, 0x02CB, prA}, // Lm [3] MODIFIER LETTER MACRON..MODIFIER LETTER GRAVE ACCENT - {0x02CC, 0x02CC, prN}, // Lm MODIFIER LETTER LOW VERTICAL LINE - {0x02CD, 0x02CD, prA}, // Lm MODIFIER LETTER LOW MACRON - {0x02CE, 0x02CF, prN}, // Lm [2] MODIFIER LETTER LOW GRAVE ACCENT..MODIFIER LETTER LOW ACUTE ACCENT - {0x02D0, 0x02D0, prA}, // Lm MODIFIER LETTER TRIANGULAR COLON - {0x02D1, 0x02D1, prN}, // Lm MODIFIER LETTER HALF TRIANGULAR COLON - {0x02D2, 0x02D7, prN}, // Sk [6] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER MINUS SIGN - {0x02D8, 0x02DB, prA}, // Sk [4] BREVE..OGONEK - {0x02DC, 0x02DC, prN}, // Sk SMALL TILDE - {0x02DD, 0x02DD, prA}, // Sk DOUBLE ACUTE ACCENT - {0x02DE, 0x02DE, prN}, // Sk MODIFIER LETTER RHOTIC HOOK - {0x02DF, 0x02DF, prA}, // Sk MODIFIER LETTER CROSS ACCENT - {0x02E0, 0x02E4, prN}, // Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP - {0x02E5, 0x02EB, prN}, // Sk [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK - {0x02EC, 0x02EC, prN}, // Lm MODIFIER LETTER VOICING - {0x02ED, 0x02ED, prN}, // Sk MODIFIER LETTER UNASPIRATED - {0x02EE, 0x02EE, prN}, // Lm MODIFIER LETTER DOUBLE APOSTROPHE - {0x02EF, 0x02FF, prN}, // Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW - {0x0300, 0x036F, prA}, // Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X - {0x0370, 0x0373, prN}, // L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI - {0x0374, 0x0374, prN}, // Lm GREEK NUMERAL SIGN - {0x0375, 0x0375, prN}, // Sk GREEK LOWER NUMERAL SIGN - {0x0376, 0x0377, prN}, // L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA - {0x037A, 0x037A, prN}, // Lm GREEK YPOGEGRAMMENI - {0x037B, 0x037D, prN}, // Ll [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL - {0x037E, 0x037E, prN}, // Po GREEK QUESTION MARK - {0x037F, 0x037F, prN}, // Lu GREEK CAPITAL LETTER YOT - {0x0384, 0x0385, prN}, // Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS - {0x0386, 0x0386, prN}, // Lu GREEK CAPITAL LETTER ALPHA WITH TONOS - {0x0387, 0x0387, prN}, // Po GREEK ANO TELEIA - {0x0388, 0x038A, prN}, // Lu [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS - {0x038C, 0x038C, prN}, // Lu GREEK CAPITAL LETTER OMICRON WITH TONOS - {0x038E, 0x0390, prN}, // L& [3] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS - {0x0391, 0x03A1, prA}, // Lu [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO - {0x03A3, 0x03A9, prA}, // Lu [7] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER OMEGA - {0x03AA, 0x03B0, prN}, // L& [7] GREEK CAPITAL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS - {0x03B1, 0x03C1, prA}, // Ll [17] GREEK SMALL LETTER ALPHA..GREEK SMALL LETTER RHO - {0x03C2, 0x03C2, prN}, // Ll GREEK SMALL LETTER FINAL SIGMA - {0x03C3, 0x03C9, prA}, // Ll [7] GREEK SMALL LETTER SIGMA..GREEK SMALL LETTER OMEGA - {0x03CA, 0x03F5, prN}, // L& [44] GREEK SMALL LETTER IOTA WITH DIALYTIKA..GREEK LUNATE EPSILON SYMBOL - {0x03F6, 0x03F6, prN}, // Sm GREEK REVERSED LUNATE EPSILON SYMBOL - {0x03F7, 0x03FF, prN}, // L& [9] GREEK CAPITAL LETTER SHO..GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL - {0x0400, 0x0400, prN}, // Lu CYRILLIC CAPITAL LETTER IE WITH GRAVE - {0x0401, 0x0401, prA}, // Lu CYRILLIC CAPITAL LETTER IO - {0x0402, 0x040F, prN}, // Lu [14] CYRILLIC CAPITAL LETTER DJE..CYRILLIC CAPITAL LETTER DZHE - {0x0410, 0x044F, prA}, // L& [64] CYRILLIC CAPITAL LETTER A..CYRILLIC SMALL LETTER YA - {0x0450, 0x0450, prN}, // Ll CYRILLIC SMALL LETTER IE WITH GRAVE - {0x0451, 0x0451, prA}, // Ll CYRILLIC SMALL LETTER IO - {0x0452, 0x0481, prN}, // L& [48] CYRILLIC SMALL LETTER DJE..CYRILLIC SMALL LETTER KOPPA - {0x0482, 0x0482, prN}, // So CYRILLIC THOUSANDS SIGN - {0x0483, 0x0487, prN}, // Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE - {0x0488, 0x0489, prN}, // Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN - {0x048A, 0x04FF, prN}, // L& [118] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER HA WITH STROKE - {0x0500, 0x052F, prN}, // L& [48] CYRILLIC CAPITAL LETTER KOMI DE..CYRILLIC SMALL LETTER EL WITH DESCENDER - {0x0531, 0x0556, prN}, // Lu [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH - {0x0559, 0x0559, prN}, // Lm ARMENIAN MODIFIER LETTER LEFT HALF RING - {0x055A, 0x055F, prN}, // Po [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK - {0x0560, 0x0588, prN}, // Ll [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE - {0x0589, 0x0589, prN}, // Po ARMENIAN FULL STOP - {0x058A, 0x058A, prN}, // Pd ARMENIAN HYPHEN - {0x058D, 0x058E, prN}, // So [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN - {0x058F, 0x058F, prN}, // Sc ARMENIAN DRAM SIGN - {0x0591, 0x05BD, prN}, // Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG - {0x05BE, 0x05BE, prN}, // Pd HEBREW PUNCTUATION MAQAF - {0x05BF, 0x05BF, prN}, // Mn HEBREW POINT RAFE - {0x05C0, 0x05C0, prN}, // Po HEBREW PUNCTUATION PASEQ - {0x05C1, 0x05C2, prN}, // Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT - {0x05C3, 0x05C3, prN}, // Po HEBREW PUNCTUATION SOF PASUQ - {0x05C4, 0x05C5, prN}, // Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT - {0x05C6, 0x05C6, prN}, // Po HEBREW PUNCTUATION NUN HAFUKHA - {0x05C7, 0x05C7, prN}, // Mn HEBREW POINT QAMATS QATAN - {0x05D0, 0x05EA, prN}, // Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV - {0x05EF, 0x05F2, prN}, // Lo [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD - {0x05F3, 0x05F4, prN}, // Po [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM - {0x0600, 0x0605, prN}, // Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE - {0x0606, 0x0608, prN}, // Sm [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY - {0x0609, 0x060A, prN}, // Po [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN - {0x060B, 0x060B, prN}, // Sc AFGHANI SIGN - {0x060C, 0x060D, prN}, // Po [2] ARABIC COMMA..ARABIC DATE SEPARATOR - {0x060E, 0x060F, prN}, // So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA - {0x0610, 0x061A, prN}, // Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA - {0x061B, 0x061B, prN}, // Po ARABIC SEMICOLON - {0x061C, 0x061C, prN}, // Cf ARABIC LETTER MARK - {0x061D, 0x061F, prN}, // Po [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK - {0x0620, 0x063F, prN}, // Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE - {0x0640, 0x0640, prN}, // Lm ARABIC TATWEEL - {0x0641, 0x064A, prN}, // Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH - {0x064B, 0x065F, prN}, // Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW - {0x0660, 0x0669, prN}, // Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE - {0x066A, 0x066D, prN}, // Po [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR - {0x066E, 0x066F, prN}, // Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF - {0x0670, 0x0670, prN}, // Mn ARABIC LETTER SUPERSCRIPT ALEF - {0x0671, 0x06D3, prN}, // Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE - {0x06D4, 0x06D4, prN}, // Po ARABIC FULL STOP - {0x06D5, 0x06D5, prN}, // Lo ARABIC LETTER AE - {0x06D6, 0x06DC, prN}, // Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN - {0x06DD, 0x06DD, prN}, // Cf ARABIC END OF AYAH - {0x06DE, 0x06DE, prN}, // So ARABIC START OF RUB EL HIZB - {0x06DF, 0x06E4, prN}, // Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA - {0x06E5, 0x06E6, prN}, // Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH - {0x06E7, 0x06E8, prN}, // Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON - {0x06E9, 0x06E9, prN}, // So ARABIC PLACE OF SAJDAH - {0x06EA, 0x06ED, prN}, // Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM - {0x06EE, 0x06EF, prN}, // Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V - {0x06F0, 0x06F9, prN}, // Nd [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE - {0x06FA, 0x06FC, prN}, // Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW - {0x06FD, 0x06FE, prN}, // So [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN - {0x06FF, 0x06FF, prN}, // Lo ARABIC LETTER HEH WITH INVERTED V - {0x0700, 0x070D, prN}, // Po [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS - {0x070F, 0x070F, prN}, // Cf SYRIAC ABBREVIATION MARK - {0x0710, 0x0710, prN}, // Lo SYRIAC LETTER ALAPH - {0x0711, 0x0711, prN}, // Mn SYRIAC LETTER SUPERSCRIPT ALAPH - {0x0712, 0x072F, prN}, // Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH - {0x0730, 0x074A, prN}, // Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH - {0x074D, 0x074F, prN}, // Lo [3] SYRIAC LETTER SOGDIAN ZHAIN..SYRIAC LETTER SOGDIAN FE - {0x0750, 0x077F, prN}, // Lo [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE - {0x0780, 0x07A5, prN}, // Lo [38] THAANA LETTER HAA..THAANA LETTER WAAVU - {0x07A6, 0x07B0, prN}, // Mn [11] THAANA ABAFILI..THAANA SUKUN - {0x07B1, 0x07B1, prN}, // Lo THAANA LETTER NAA - {0x07C0, 0x07C9, prN}, // Nd [10] NKO DIGIT ZERO..NKO DIGIT NINE - {0x07CA, 0x07EA, prN}, // Lo [33] NKO LETTER A..NKO LETTER JONA RA - {0x07EB, 0x07F3, prN}, // Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE - {0x07F4, 0x07F5, prN}, // Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE - {0x07F6, 0x07F6, prN}, // So NKO SYMBOL OO DENNEN - {0x07F7, 0x07F9, prN}, // Po [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK - {0x07FA, 0x07FA, prN}, // Lm NKO LAJANYALAN - {0x07FD, 0x07FD, prN}, // Mn NKO DANTAYALAN - {0x07FE, 0x07FF, prN}, // Sc [2] NKO DOROME SIGN..NKO TAMAN SIGN - {0x0800, 0x0815, prN}, // Lo [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF - {0x0816, 0x0819, prN}, // Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH - {0x081A, 0x081A, prN}, // Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT - {0x081B, 0x0823, prN}, // Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A - {0x0824, 0x0824, prN}, // Lm SAMARITAN MODIFIER LETTER SHORT A - {0x0825, 0x0827, prN}, // Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U - {0x0828, 0x0828, prN}, // Lm SAMARITAN MODIFIER LETTER I - {0x0829, 0x082D, prN}, // Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA - {0x0830, 0x083E, prN}, // Po [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU - {0x0840, 0x0858, prN}, // Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN - {0x0859, 0x085B, prN}, // Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK - {0x085E, 0x085E, prN}, // Po MANDAIC PUNCTUATION - {0x0860, 0x086A, prN}, // Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA - {0x0870, 0x0887, prN}, // Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT - {0x0888, 0x0888, prN}, // Sk ARABIC RAISED ROUND DOT - {0x0889, 0x088E, prN}, // Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL - {0x0890, 0x0891, prN}, // Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE - {0x0898, 0x089F, prN}, // Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA - {0x08A0, 0x08C8, prN}, // Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF - {0x08C9, 0x08C9, prN}, // Lm ARABIC SMALL FARSI YEH - {0x08CA, 0x08E1, prN}, // Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA - {0x08E2, 0x08E2, prN}, // Cf ARABIC DISPUTED END OF AYAH - {0x08E3, 0x08FF, prN}, // Mn [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA - {0x0900, 0x0902, prN}, // Mn [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA - {0x0903, 0x0903, prN}, // Mc DEVANAGARI SIGN VISARGA - {0x0904, 0x0939, prN}, // Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA - {0x093A, 0x093A, prN}, // Mn DEVANAGARI VOWEL SIGN OE - {0x093B, 0x093B, prN}, // Mc DEVANAGARI VOWEL SIGN OOE - {0x093C, 0x093C, prN}, // Mn DEVANAGARI SIGN NUKTA - {0x093D, 0x093D, prN}, // Lo DEVANAGARI SIGN AVAGRAHA - {0x093E, 0x0940, prN}, // Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II - {0x0941, 0x0948, prN}, // Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI - {0x0949, 0x094C, prN}, // Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU - {0x094D, 0x094D, prN}, // Mn DEVANAGARI SIGN VIRAMA - {0x094E, 0x094F, prN}, // Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW - {0x0950, 0x0950, prN}, // Lo DEVANAGARI OM - {0x0951, 0x0957, prN}, // Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE - {0x0958, 0x0961, prN}, // Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL - {0x0962, 0x0963, prN}, // Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL - {0x0964, 0x0965, prN}, // Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA - {0x0966, 0x096F, prN}, // Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE - {0x0970, 0x0970, prN}, // Po DEVANAGARI ABBREVIATION SIGN - {0x0971, 0x0971, prN}, // Lm DEVANAGARI SIGN HIGH SPACING DOT - {0x0972, 0x097F, prN}, // Lo [14] DEVANAGARI LETTER CANDRA A..DEVANAGARI LETTER BBA - {0x0980, 0x0980, prN}, // Lo BENGALI ANJI - {0x0981, 0x0981, prN}, // Mn BENGALI SIGN CANDRABINDU - {0x0982, 0x0983, prN}, // Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA - {0x0985, 0x098C, prN}, // Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L - {0x098F, 0x0990, prN}, // Lo [2] BENGALI LETTER E..BENGALI LETTER AI - {0x0993, 0x09A8, prN}, // Lo [22] BENGALI LETTER O..BENGALI LETTER NA - {0x09AA, 0x09B0, prN}, // Lo [7] BENGALI LETTER PA..BENGALI LETTER RA - {0x09B2, 0x09B2, prN}, // Lo BENGALI LETTER LA - {0x09B6, 0x09B9, prN}, // Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA - {0x09BC, 0x09BC, prN}, // Mn BENGALI SIGN NUKTA - {0x09BD, 0x09BD, prN}, // Lo BENGALI SIGN AVAGRAHA - {0x09BE, 0x09C0, prN}, // Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II - {0x09C1, 0x09C4, prN}, // Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR - {0x09C7, 0x09C8, prN}, // Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI - {0x09CB, 0x09CC, prN}, // Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU - {0x09CD, 0x09CD, prN}, // Mn BENGALI SIGN VIRAMA - {0x09CE, 0x09CE, prN}, // Lo BENGALI LETTER KHANDA TA - {0x09D7, 0x09D7, prN}, // Mc BENGALI AU LENGTH MARK - {0x09DC, 0x09DD, prN}, // Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA - {0x09DF, 0x09E1, prN}, // Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL - {0x09E2, 0x09E3, prN}, // Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL - {0x09E6, 0x09EF, prN}, // Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE - {0x09F0, 0x09F1, prN}, // Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL - {0x09F2, 0x09F3, prN}, // Sc [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN - {0x09F4, 0x09F9, prN}, // No [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN - {0x09FA, 0x09FA, prN}, // So BENGALI ISSHAR - {0x09FB, 0x09FB, prN}, // Sc BENGALI GANDA MARK - {0x09FC, 0x09FC, prN}, // Lo BENGALI LETTER VEDIC ANUSVARA - {0x09FD, 0x09FD, prN}, // Po BENGALI ABBREVIATION SIGN - {0x09FE, 0x09FE, prN}, // Mn BENGALI SANDHI MARK - {0x0A01, 0x0A02, prN}, // Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI - {0x0A03, 0x0A03, prN}, // Mc GURMUKHI SIGN VISARGA - {0x0A05, 0x0A0A, prN}, // Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU - {0x0A0F, 0x0A10, prN}, // Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI - {0x0A13, 0x0A28, prN}, // Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA - {0x0A2A, 0x0A30, prN}, // Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA - {0x0A32, 0x0A33, prN}, // Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA - {0x0A35, 0x0A36, prN}, // Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA - {0x0A38, 0x0A39, prN}, // Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA - {0x0A3C, 0x0A3C, prN}, // Mn GURMUKHI SIGN NUKTA - {0x0A3E, 0x0A40, prN}, // Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II - {0x0A41, 0x0A42, prN}, // Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU - {0x0A47, 0x0A48, prN}, // Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI - {0x0A4B, 0x0A4D, prN}, // Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA - {0x0A51, 0x0A51, prN}, // Mn GURMUKHI SIGN UDAAT - {0x0A59, 0x0A5C, prN}, // Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA - {0x0A5E, 0x0A5E, prN}, // Lo GURMUKHI LETTER FA - {0x0A66, 0x0A6F, prN}, // Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE - {0x0A70, 0x0A71, prN}, // Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK - {0x0A72, 0x0A74, prN}, // Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR - {0x0A75, 0x0A75, prN}, // Mn GURMUKHI SIGN YAKASH - {0x0A76, 0x0A76, prN}, // Po GURMUKHI ABBREVIATION SIGN - {0x0A81, 0x0A82, prN}, // Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA - {0x0A83, 0x0A83, prN}, // Mc GUJARATI SIGN VISARGA - {0x0A85, 0x0A8D, prN}, // Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E - {0x0A8F, 0x0A91, prN}, // Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O - {0x0A93, 0x0AA8, prN}, // Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA - {0x0AAA, 0x0AB0, prN}, // Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA - {0x0AB2, 0x0AB3, prN}, // Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA - {0x0AB5, 0x0AB9, prN}, // Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA - {0x0ABC, 0x0ABC, prN}, // Mn GUJARATI SIGN NUKTA - {0x0ABD, 0x0ABD, prN}, // Lo GUJARATI SIGN AVAGRAHA - {0x0ABE, 0x0AC0, prN}, // Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II - {0x0AC1, 0x0AC5, prN}, // Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E - {0x0AC7, 0x0AC8, prN}, // Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI - {0x0AC9, 0x0AC9, prN}, // Mc GUJARATI VOWEL SIGN CANDRA O - {0x0ACB, 0x0ACC, prN}, // Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU - {0x0ACD, 0x0ACD, prN}, // Mn GUJARATI SIGN VIRAMA - {0x0AD0, 0x0AD0, prN}, // Lo GUJARATI OM - {0x0AE0, 0x0AE1, prN}, // Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL - {0x0AE2, 0x0AE3, prN}, // Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL - {0x0AE6, 0x0AEF, prN}, // Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE - {0x0AF0, 0x0AF0, prN}, // Po GUJARATI ABBREVIATION SIGN - {0x0AF1, 0x0AF1, prN}, // Sc GUJARATI RUPEE SIGN - {0x0AF9, 0x0AF9, prN}, // Lo GUJARATI LETTER ZHA - {0x0AFA, 0x0AFF, prN}, // Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE - {0x0B01, 0x0B01, prN}, // Mn ORIYA SIGN CANDRABINDU - {0x0B02, 0x0B03, prN}, // Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA - {0x0B05, 0x0B0C, prN}, // Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L - {0x0B0F, 0x0B10, prN}, // Lo [2] ORIYA LETTER E..ORIYA LETTER AI - {0x0B13, 0x0B28, prN}, // Lo [22] ORIYA LETTER O..ORIYA LETTER NA - {0x0B2A, 0x0B30, prN}, // Lo [7] ORIYA LETTER PA..ORIYA LETTER RA - {0x0B32, 0x0B33, prN}, // Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA - {0x0B35, 0x0B39, prN}, // Lo [5] ORIYA LETTER VA..ORIYA LETTER HA - {0x0B3C, 0x0B3C, prN}, // Mn ORIYA SIGN NUKTA - {0x0B3D, 0x0B3D, prN}, // Lo ORIYA SIGN AVAGRAHA - {0x0B3E, 0x0B3E, prN}, // Mc ORIYA VOWEL SIGN AA - {0x0B3F, 0x0B3F, prN}, // Mn ORIYA VOWEL SIGN I - {0x0B40, 0x0B40, prN}, // Mc ORIYA VOWEL SIGN II - {0x0B41, 0x0B44, prN}, // Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR - {0x0B47, 0x0B48, prN}, // Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI - {0x0B4B, 0x0B4C, prN}, // Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU - {0x0B4D, 0x0B4D, prN}, // Mn ORIYA SIGN VIRAMA - {0x0B55, 0x0B56, prN}, // Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK - {0x0B57, 0x0B57, prN}, // Mc ORIYA AU LENGTH MARK - {0x0B5C, 0x0B5D, prN}, // Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA - {0x0B5F, 0x0B61, prN}, // Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL - {0x0B62, 0x0B63, prN}, // Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL - {0x0B66, 0x0B6F, prN}, // Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE - {0x0B70, 0x0B70, prN}, // So ORIYA ISSHAR - {0x0B71, 0x0B71, prN}, // Lo ORIYA LETTER WA - {0x0B72, 0x0B77, prN}, // No [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS - {0x0B82, 0x0B82, prN}, // Mn TAMIL SIGN ANUSVARA - {0x0B83, 0x0B83, prN}, // Lo TAMIL SIGN VISARGA - {0x0B85, 0x0B8A, prN}, // Lo [6] TAMIL LETTER A..TAMIL LETTER UU - {0x0B8E, 0x0B90, prN}, // Lo [3] TAMIL LETTER E..TAMIL LETTER AI - {0x0B92, 0x0B95, prN}, // Lo [4] TAMIL LETTER O..TAMIL LETTER KA - {0x0B99, 0x0B9A, prN}, // Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA - {0x0B9C, 0x0B9C, prN}, // Lo TAMIL LETTER JA - {0x0B9E, 0x0B9F, prN}, // Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA - {0x0BA3, 0x0BA4, prN}, // Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA - {0x0BA8, 0x0BAA, prN}, // Lo [3] TAMIL LETTER NA..TAMIL LETTER PA - {0x0BAE, 0x0BB9, prN}, // Lo [12] TAMIL LETTER MA..TAMIL LETTER HA - {0x0BBE, 0x0BBF, prN}, // Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I - {0x0BC0, 0x0BC0, prN}, // Mn TAMIL VOWEL SIGN II - {0x0BC1, 0x0BC2, prN}, // Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU - {0x0BC6, 0x0BC8, prN}, // Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI - {0x0BCA, 0x0BCC, prN}, // Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU - {0x0BCD, 0x0BCD, prN}, // Mn TAMIL SIGN VIRAMA - {0x0BD0, 0x0BD0, prN}, // Lo TAMIL OM - {0x0BD7, 0x0BD7, prN}, // Mc TAMIL AU LENGTH MARK - {0x0BE6, 0x0BEF, prN}, // Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE - {0x0BF0, 0x0BF2, prN}, // No [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND - {0x0BF3, 0x0BF8, prN}, // So [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN - {0x0BF9, 0x0BF9, prN}, // Sc TAMIL RUPEE SIGN - {0x0BFA, 0x0BFA, prN}, // So TAMIL NUMBER SIGN - {0x0C00, 0x0C00, prN}, // Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE - {0x0C01, 0x0C03, prN}, // Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA - {0x0C04, 0x0C04, prN}, // Mn TELUGU SIGN COMBINING ANUSVARA ABOVE - {0x0C05, 0x0C0C, prN}, // Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L - {0x0C0E, 0x0C10, prN}, // Lo [3] TELUGU LETTER E..TELUGU LETTER AI - {0x0C12, 0x0C28, prN}, // Lo [23] TELUGU LETTER O..TELUGU LETTER NA - {0x0C2A, 0x0C39, prN}, // Lo [16] TELUGU LETTER PA..TELUGU LETTER HA - {0x0C3C, 0x0C3C, prN}, // Mn TELUGU SIGN NUKTA - {0x0C3D, 0x0C3D, prN}, // Lo TELUGU SIGN AVAGRAHA - {0x0C3E, 0x0C40, prN}, // Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II - {0x0C41, 0x0C44, prN}, // Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR - {0x0C46, 0x0C48, prN}, // Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI - {0x0C4A, 0x0C4D, prN}, // Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA - {0x0C55, 0x0C56, prN}, // Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK - {0x0C58, 0x0C5A, prN}, // Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA - {0x0C5D, 0x0C5D, prN}, // Lo TELUGU LETTER NAKAARA POLLU - {0x0C60, 0x0C61, prN}, // Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL - {0x0C62, 0x0C63, prN}, // Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL - {0x0C66, 0x0C6F, prN}, // Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE - {0x0C77, 0x0C77, prN}, // Po TELUGU SIGN SIDDHAM - {0x0C78, 0x0C7E, prN}, // No [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR - {0x0C7F, 0x0C7F, prN}, // So TELUGU SIGN TUUMU - {0x0C80, 0x0C80, prN}, // Lo KANNADA SIGN SPACING CANDRABINDU - {0x0C81, 0x0C81, prN}, // Mn KANNADA SIGN CANDRABINDU - {0x0C82, 0x0C83, prN}, // Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA - {0x0C84, 0x0C84, prN}, // Po KANNADA SIGN SIDDHAM - {0x0C85, 0x0C8C, prN}, // Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L - {0x0C8E, 0x0C90, prN}, // Lo [3] KANNADA LETTER E..KANNADA LETTER AI - {0x0C92, 0x0CA8, prN}, // Lo [23] KANNADA LETTER O..KANNADA LETTER NA - {0x0CAA, 0x0CB3, prN}, // Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA - {0x0CB5, 0x0CB9, prN}, // Lo [5] KANNADA LETTER VA..KANNADA LETTER HA - {0x0CBC, 0x0CBC, prN}, // Mn KANNADA SIGN NUKTA - {0x0CBD, 0x0CBD, prN}, // Lo KANNADA SIGN AVAGRAHA - {0x0CBE, 0x0CBE, prN}, // Mc KANNADA VOWEL SIGN AA - {0x0CBF, 0x0CBF, prN}, // Mn KANNADA VOWEL SIGN I - {0x0CC0, 0x0CC4, prN}, // Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR - {0x0CC6, 0x0CC6, prN}, // Mn KANNADA VOWEL SIGN E - {0x0CC7, 0x0CC8, prN}, // Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI - {0x0CCA, 0x0CCB, prN}, // Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO - {0x0CCC, 0x0CCD, prN}, // Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA - {0x0CD5, 0x0CD6, prN}, // Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK - {0x0CDD, 0x0CDE, prN}, // Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA - {0x0CE0, 0x0CE1, prN}, // Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL - {0x0CE2, 0x0CE3, prN}, // Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL - {0x0CE6, 0x0CEF, prN}, // Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE - {0x0CF1, 0x0CF2, prN}, // Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA - {0x0CF3, 0x0CF3, prN}, // Mc KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT - {0x0D00, 0x0D01, prN}, // Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU - {0x0D02, 0x0D03, prN}, // Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA - {0x0D04, 0x0D0C, prN}, // Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L - {0x0D0E, 0x0D10, prN}, // Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI - {0x0D12, 0x0D3A, prN}, // Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA - {0x0D3B, 0x0D3C, prN}, // Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA - {0x0D3D, 0x0D3D, prN}, // Lo MALAYALAM SIGN AVAGRAHA - {0x0D3E, 0x0D40, prN}, // Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II - {0x0D41, 0x0D44, prN}, // Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR - {0x0D46, 0x0D48, prN}, // Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI - {0x0D4A, 0x0D4C, prN}, // Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU - {0x0D4D, 0x0D4D, prN}, // Mn MALAYALAM SIGN VIRAMA - {0x0D4E, 0x0D4E, prN}, // Lo MALAYALAM LETTER DOT REPH - {0x0D4F, 0x0D4F, prN}, // So MALAYALAM SIGN PARA - {0x0D54, 0x0D56, prN}, // Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL - {0x0D57, 0x0D57, prN}, // Mc MALAYALAM AU LENGTH MARK - {0x0D58, 0x0D5E, prN}, // No [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH - {0x0D5F, 0x0D61, prN}, // Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL - {0x0D62, 0x0D63, prN}, // Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL - {0x0D66, 0x0D6F, prN}, // Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE - {0x0D70, 0x0D78, prN}, // No [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS - {0x0D79, 0x0D79, prN}, // So MALAYALAM DATE MARK - {0x0D7A, 0x0D7F, prN}, // Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K - {0x0D81, 0x0D81, prN}, // Mn SINHALA SIGN CANDRABINDU - {0x0D82, 0x0D83, prN}, // Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA - {0x0D85, 0x0D96, prN}, // Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA - {0x0D9A, 0x0DB1, prN}, // Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA - {0x0DB3, 0x0DBB, prN}, // Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA - {0x0DBD, 0x0DBD, prN}, // Lo SINHALA LETTER DANTAJA LAYANNA - {0x0DC0, 0x0DC6, prN}, // Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA - {0x0DCA, 0x0DCA, prN}, // Mn SINHALA SIGN AL-LAKUNA - {0x0DCF, 0x0DD1, prN}, // Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA - {0x0DD2, 0x0DD4, prN}, // Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA - {0x0DD6, 0x0DD6, prN}, // Mn SINHALA VOWEL SIGN DIGA PAA-PILLA - {0x0DD8, 0x0DDF, prN}, // Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA - {0x0DE6, 0x0DEF, prN}, // Nd [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE - {0x0DF2, 0x0DF3, prN}, // Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA - {0x0DF4, 0x0DF4, prN}, // Po SINHALA PUNCTUATION KUNDDALIYA - {0x0E01, 0x0E30, prN}, // Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A - {0x0E31, 0x0E31, prN}, // Mn THAI CHARACTER MAI HAN-AKAT - {0x0E32, 0x0E33, prN}, // Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM - {0x0E34, 0x0E3A, prN}, // Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU - {0x0E3F, 0x0E3F, prN}, // Sc THAI CURRENCY SYMBOL BAHT - {0x0E40, 0x0E45, prN}, // Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO - {0x0E46, 0x0E46, prN}, // Lm THAI CHARACTER MAIYAMOK - {0x0E47, 0x0E4E, prN}, // Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN - {0x0E4F, 0x0E4F, prN}, // Po THAI CHARACTER FONGMAN - {0x0E50, 0x0E59, prN}, // Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE - {0x0E5A, 0x0E5B, prN}, // Po [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT - {0x0E81, 0x0E82, prN}, // Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG - {0x0E84, 0x0E84, prN}, // Lo LAO LETTER KHO TAM - {0x0E86, 0x0E8A, prN}, // Lo [5] LAO LETTER PALI GHA..LAO LETTER SO TAM - {0x0E8C, 0x0EA3, prN}, // Lo [24] LAO LETTER PALI JHA..LAO LETTER LO LING - {0x0EA5, 0x0EA5, prN}, // Lo LAO LETTER LO LOOT - {0x0EA7, 0x0EB0, prN}, // Lo [10] LAO LETTER WO..LAO VOWEL SIGN A - {0x0EB1, 0x0EB1, prN}, // Mn LAO VOWEL SIGN MAI KAN - {0x0EB2, 0x0EB3, prN}, // Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM - {0x0EB4, 0x0EBC, prN}, // Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO - {0x0EBD, 0x0EBD, prN}, // Lo LAO SEMIVOWEL SIGN NYO - {0x0EC0, 0x0EC4, prN}, // Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI - {0x0EC6, 0x0EC6, prN}, // Lm LAO KO LA - {0x0EC8, 0x0ECE, prN}, // Mn [7] LAO TONE MAI EK..LAO YAMAKKAN - {0x0ED0, 0x0ED9, prN}, // Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE - {0x0EDC, 0x0EDF, prN}, // Lo [4] LAO HO NO..LAO LETTER KHMU NYO - {0x0F00, 0x0F00, prN}, // Lo TIBETAN SYLLABLE OM - {0x0F01, 0x0F03, prN}, // So [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA - {0x0F04, 0x0F12, prN}, // Po [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD - {0x0F13, 0x0F13, prN}, // So TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN - {0x0F14, 0x0F14, prN}, // Po TIBETAN MARK GTER TSHEG - {0x0F15, 0x0F17, prN}, // So [3] TIBETAN LOGOTYPE SIGN CHAD RTAGS..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS - {0x0F18, 0x0F19, prN}, // Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS - {0x0F1A, 0x0F1F, prN}, // So [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG - {0x0F20, 0x0F29, prN}, // Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE - {0x0F2A, 0x0F33, prN}, // No [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO - {0x0F34, 0x0F34, prN}, // So TIBETAN MARK BSDUS RTAGS - {0x0F35, 0x0F35, prN}, // Mn TIBETAN MARK NGAS BZUNG NYI ZLA - {0x0F36, 0x0F36, prN}, // So TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN - {0x0F37, 0x0F37, prN}, // Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS - {0x0F38, 0x0F38, prN}, // So TIBETAN MARK CHE MGO - {0x0F39, 0x0F39, prN}, // Mn TIBETAN MARK TSA -PHRU - {0x0F3A, 0x0F3A, prN}, // Ps TIBETAN MARK GUG RTAGS GYON - {0x0F3B, 0x0F3B, prN}, // Pe TIBETAN MARK GUG RTAGS GYAS - {0x0F3C, 0x0F3C, prN}, // Ps TIBETAN MARK ANG KHANG GYON - {0x0F3D, 0x0F3D, prN}, // Pe TIBETAN MARK ANG KHANG GYAS - {0x0F3E, 0x0F3F, prN}, // Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES - {0x0F40, 0x0F47, prN}, // Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA - {0x0F49, 0x0F6C, prN}, // Lo [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA - {0x0F71, 0x0F7E, prN}, // Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO - {0x0F7F, 0x0F7F, prN}, // Mc TIBETAN SIGN RNAM BCAD - {0x0F80, 0x0F84, prN}, // Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA - {0x0F85, 0x0F85, prN}, // Po TIBETAN MARK PALUTA - {0x0F86, 0x0F87, prN}, // Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS - {0x0F88, 0x0F8C, prN}, // Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN - {0x0F8D, 0x0F97, prN}, // Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA - {0x0F99, 0x0FBC, prN}, // Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA - {0x0FBE, 0x0FC5, prN}, // So [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE - {0x0FC6, 0x0FC6, prN}, // Mn TIBETAN SYMBOL PADMA GDAN - {0x0FC7, 0x0FCC, prN}, // So [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL - {0x0FCE, 0x0FCF, prN}, // So [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM - {0x0FD0, 0x0FD4, prN}, // Po [5] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA - {0x0FD5, 0x0FD8, prN}, // So [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS - {0x0FD9, 0x0FDA, prN}, // Po [2] TIBETAN MARK LEADING MCHAN RTAGS..TIBETAN MARK TRAILING MCHAN RTAGS - {0x1000, 0x102A, prN}, // Lo [43] MYANMAR LETTER KA..MYANMAR LETTER AU - {0x102B, 0x102C, prN}, // Mc [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA - {0x102D, 0x1030, prN}, // Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU - {0x1031, 0x1031, prN}, // Mc MYANMAR VOWEL SIGN E - {0x1032, 0x1037, prN}, // Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW - {0x1038, 0x1038, prN}, // Mc MYANMAR SIGN VISARGA - {0x1039, 0x103A, prN}, // Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT - {0x103B, 0x103C, prN}, // Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA - {0x103D, 0x103E, prN}, // Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA - {0x103F, 0x103F, prN}, // Lo MYANMAR LETTER GREAT SA - {0x1040, 0x1049, prN}, // Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE - {0x104A, 0x104F, prN}, // Po [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE - {0x1050, 0x1055, prN}, // Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL - {0x1056, 0x1057, prN}, // Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR - {0x1058, 0x1059, prN}, // Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL - {0x105A, 0x105D, prN}, // Lo [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE - {0x105E, 0x1060, prN}, // Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA - {0x1061, 0x1061, prN}, // Lo MYANMAR LETTER SGAW KAREN SHA - {0x1062, 0x1064, prN}, // Mc [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO - {0x1065, 0x1066, prN}, // Lo [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA - {0x1067, 0x106D, prN}, // Mc [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5 - {0x106E, 0x1070, prN}, // Lo [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA - {0x1071, 0x1074, prN}, // Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE - {0x1075, 0x1081, prN}, // Lo [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA - {0x1082, 0x1082, prN}, // Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA - {0x1083, 0x1084, prN}, // Mc [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E - {0x1085, 0x1086, prN}, // Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y - {0x1087, 0x108C, prN}, // Mc [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3 - {0x108D, 0x108D, prN}, // Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE - {0x108E, 0x108E, prN}, // Lo MYANMAR LETTER RUMAI PALAUNG FA - {0x108F, 0x108F, prN}, // Mc MYANMAR SIGN RUMAI PALAUNG TONE-5 - {0x1090, 0x1099, prN}, // Nd [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE - {0x109A, 0x109C, prN}, // Mc [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A - {0x109D, 0x109D, prN}, // Mn MYANMAR VOWEL SIGN AITON AI - {0x109E, 0x109F, prN}, // So [2] MYANMAR SYMBOL SHAN ONE..MYANMAR SYMBOL SHAN EXCLAMATION - {0x10A0, 0x10C5, prN}, // Lu [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE - {0x10C7, 0x10C7, prN}, // Lu GEORGIAN CAPITAL LETTER YN - {0x10CD, 0x10CD, prN}, // Lu GEORGIAN CAPITAL LETTER AEN - {0x10D0, 0x10FA, prN}, // Ll [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN - {0x10FB, 0x10FB, prN}, // Po GEORGIAN PARAGRAPH SEPARATOR - {0x10FC, 0x10FC, prN}, // Lm MODIFIER LETTER GEORGIAN NAR - {0x10FD, 0x10FF, prN}, // Ll [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN - {0x1100, 0x115F, prW}, // Lo [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER - {0x1160, 0x11FF, prN}, // Lo [160] HANGUL JUNGSEONG FILLER..HANGUL JONGSEONG SSANGNIEUN - {0x1200, 0x1248, prN}, // Lo [73] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE QWA - {0x124A, 0x124D, prN}, // Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE - {0x1250, 0x1256, prN}, // Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO - {0x1258, 0x1258, prN}, // Lo ETHIOPIC SYLLABLE QHWA - {0x125A, 0x125D, prN}, // Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE - {0x1260, 0x1288, prN}, // Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA - {0x128A, 0x128D, prN}, // Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE - {0x1290, 0x12B0, prN}, // Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA - {0x12B2, 0x12B5, prN}, // Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE - {0x12B8, 0x12BE, prN}, // Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO - {0x12C0, 0x12C0, prN}, // Lo ETHIOPIC SYLLABLE KXWA - {0x12C2, 0x12C5, prN}, // Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE - {0x12C8, 0x12D6, prN}, // Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O - {0x12D8, 0x1310, prN}, // Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA - {0x1312, 0x1315, prN}, // Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE - {0x1318, 0x135A, prN}, // Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA - {0x135D, 0x135F, prN}, // Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK - {0x1360, 0x1368, prN}, // Po [9] ETHIOPIC SECTION MARK..ETHIOPIC PARAGRAPH SEPARATOR - {0x1369, 0x137C, prN}, // No [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND - {0x1380, 0x138F, prN}, // Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE - {0x1390, 0x1399, prN}, // So [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT - {0x13A0, 0x13F5, prN}, // Lu [86] CHEROKEE LETTER A..CHEROKEE LETTER MV - {0x13F8, 0x13FD, prN}, // Ll [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV - {0x1400, 0x1400, prN}, // Pd CANADIAN SYLLABICS HYPHEN - {0x1401, 0x166C, prN}, // Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA - {0x166D, 0x166D, prN}, // So CANADIAN SYLLABICS CHI SIGN - {0x166E, 0x166E, prN}, // Po CANADIAN SYLLABICS FULL STOP - {0x166F, 0x167F, prN}, // Lo [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W - {0x1680, 0x1680, prN}, // Zs OGHAM SPACE MARK - {0x1681, 0x169A, prN}, // Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH - {0x169B, 0x169B, prN}, // Ps OGHAM FEATHER MARK - {0x169C, 0x169C, prN}, // Pe OGHAM REVERSED FEATHER MARK - {0x16A0, 0x16EA, prN}, // Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X - {0x16EB, 0x16ED, prN}, // Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION - {0x16EE, 0x16F0, prN}, // Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL - {0x16F1, 0x16F8, prN}, // Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC - {0x1700, 0x1711, prN}, // Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA - {0x1712, 0x1714, prN}, // Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA - {0x1715, 0x1715, prN}, // Mc TAGALOG SIGN PAMUDPOD - {0x171F, 0x171F, prN}, // Lo TAGALOG LETTER ARCHAIC RA - {0x1720, 0x1731, prN}, // Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA - {0x1732, 0x1733, prN}, // Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U - {0x1734, 0x1734, prN}, // Mc HANUNOO SIGN PAMUDPOD - {0x1735, 0x1736, prN}, // Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION - {0x1740, 0x1751, prN}, // Lo [18] BUHID LETTER A..BUHID LETTER HA - {0x1752, 0x1753, prN}, // Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U - {0x1760, 0x176C, prN}, // Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA - {0x176E, 0x1770, prN}, // Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA - {0x1772, 0x1773, prN}, // Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U - {0x1780, 0x17B3, prN}, // Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU - {0x17B4, 0x17B5, prN}, // Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA - {0x17B6, 0x17B6, prN}, // Mc KHMER VOWEL SIGN AA - {0x17B7, 0x17BD, prN}, // Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA - {0x17BE, 0x17C5, prN}, // Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU - {0x17C6, 0x17C6, prN}, // Mn KHMER SIGN NIKAHIT - {0x17C7, 0x17C8, prN}, // Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU - {0x17C9, 0x17D3, prN}, // Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT - {0x17D4, 0x17D6, prN}, // Po [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH - {0x17D7, 0x17D7, prN}, // Lm KHMER SIGN LEK TOO - {0x17D8, 0x17DA, prN}, // Po [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT - {0x17DB, 0x17DB, prN}, // Sc KHMER CURRENCY SYMBOL RIEL - {0x17DC, 0x17DC, prN}, // Lo KHMER SIGN AVAKRAHASANYA - {0x17DD, 0x17DD, prN}, // Mn KHMER SIGN ATTHACAN - {0x17E0, 0x17E9, prN}, // Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE - {0x17F0, 0x17F9, prN}, // No [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON - {0x1800, 0x1805, prN}, // Po [6] MONGOLIAN BIRGA..MONGOLIAN FOUR DOTS - {0x1806, 0x1806, prN}, // Pd MONGOLIAN TODO SOFT HYPHEN - {0x1807, 0x180A, prN}, // Po [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU - {0x180B, 0x180D, prN}, // Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE - {0x180E, 0x180E, prN}, // Cf MONGOLIAN VOWEL SEPARATOR - {0x180F, 0x180F, prN}, // Mn MONGOLIAN FREE VARIATION SELECTOR FOUR - {0x1810, 0x1819, prN}, // Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE - {0x1820, 0x1842, prN}, // Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI - {0x1843, 0x1843, prN}, // Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN - {0x1844, 0x1878, prN}, // Lo [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS - {0x1880, 0x1884, prN}, // Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA - {0x1885, 0x1886, prN}, // Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA - {0x1887, 0x18A8, prN}, // Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA - {0x18A9, 0x18A9, prN}, // Mn MONGOLIAN LETTER ALI GALI DAGALGA - {0x18AA, 0x18AA, prN}, // Lo MONGOLIAN LETTER MANCHU ALI GALI LHA - {0x18B0, 0x18F5, prN}, // Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S - {0x1900, 0x191E, prN}, // Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA - {0x1920, 0x1922, prN}, // Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U - {0x1923, 0x1926, prN}, // Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU - {0x1927, 0x1928, prN}, // Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O - {0x1929, 0x192B, prN}, // Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA - {0x1930, 0x1931, prN}, // Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA - {0x1932, 0x1932, prN}, // Mn LIMBU SMALL LETTER ANUSVARA - {0x1933, 0x1938, prN}, // Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA - {0x1939, 0x193B, prN}, // Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I - {0x1940, 0x1940, prN}, // So LIMBU SIGN LOO - {0x1944, 0x1945, prN}, // Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK - {0x1946, 0x194F, prN}, // Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE - {0x1950, 0x196D, prN}, // Lo [30] TAI LE LETTER KA..TAI LE LETTER AI - {0x1970, 0x1974, prN}, // Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6 - {0x1980, 0x19AB, prN}, // Lo [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA - {0x19B0, 0x19C9, prN}, // Lo [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2 - {0x19D0, 0x19D9, prN}, // Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE - {0x19DA, 0x19DA, prN}, // No NEW TAI LUE THAM DIGIT ONE - {0x19DE, 0x19DF, prN}, // So [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV - {0x19E0, 0x19FF, prN}, // So [32] KHMER SYMBOL PATHAMASAT..KHMER SYMBOL DAP-PRAM ROC - {0x1A00, 0x1A16, prN}, // Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA - {0x1A17, 0x1A18, prN}, // Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U - {0x1A19, 0x1A1A, prN}, // Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O - {0x1A1B, 0x1A1B, prN}, // Mn BUGINESE VOWEL SIGN AE - {0x1A1E, 0x1A1F, prN}, // Po [2] BUGINESE PALLAWA..BUGINESE END OF SECTION - {0x1A20, 0x1A54, prN}, // Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA - {0x1A55, 0x1A55, prN}, // Mc TAI THAM CONSONANT SIGN MEDIAL RA - {0x1A56, 0x1A56, prN}, // Mn TAI THAM CONSONANT SIGN MEDIAL LA - {0x1A57, 0x1A57, prN}, // Mc TAI THAM CONSONANT SIGN LA TANG LAI - {0x1A58, 0x1A5E, prN}, // Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA - {0x1A60, 0x1A60, prN}, // Mn TAI THAM SIGN SAKOT - {0x1A61, 0x1A61, prN}, // Mc TAI THAM VOWEL SIGN A - {0x1A62, 0x1A62, prN}, // Mn TAI THAM VOWEL SIGN MAI SAT - {0x1A63, 0x1A64, prN}, // Mc [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA - {0x1A65, 0x1A6C, prN}, // Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW - {0x1A6D, 0x1A72, prN}, // Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI - {0x1A73, 0x1A7C, prN}, // Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN - {0x1A7F, 0x1A7F, prN}, // Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT - {0x1A80, 0x1A89, prN}, // Nd [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE - {0x1A90, 0x1A99, prN}, // Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE - {0x1AA0, 0x1AA6, prN}, // Po [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA - {0x1AA7, 0x1AA7, prN}, // Lm TAI THAM SIGN MAI YAMOK - {0x1AA8, 0x1AAD, prN}, // Po [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG - {0x1AB0, 0x1ABD, prN}, // Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW - {0x1ABE, 0x1ABE, prN}, // Me COMBINING PARENTHESES OVERLAY - {0x1ABF, 0x1ACE, prN}, // Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T - {0x1B00, 0x1B03, prN}, // Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG - {0x1B04, 0x1B04, prN}, // Mc BALINESE SIGN BISAH - {0x1B05, 0x1B33, prN}, // Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA - {0x1B34, 0x1B34, prN}, // Mn BALINESE SIGN REREKAN - {0x1B35, 0x1B35, prN}, // Mc BALINESE VOWEL SIGN TEDUNG - {0x1B36, 0x1B3A, prN}, // Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA - {0x1B3B, 0x1B3B, prN}, // Mc BALINESE VOWEL SIGN RA REPA TEDUNG - {0x1B3C, 0x1B3C, prN}, // Mn BALINESE VOWEL SIGN LA LENGA - {0x1B3D, 0x1B41, prN}, // Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG - {0x1B42, 0x1B42, prN}, // Mn BALINESE VOWEL SIGN PEPET - {0x1B43, 0x1B44, prN}, // Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG - {0x1B45, 0x1B4C, prN}, // Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA - {0x1B50, 0x1B59, prN}, // Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE - {0x1B5A, 0x1B60, prN}, // Po [7] BALINESE PANTI..BALINESE PAMENENG - {0x1B61, 0x1B6A, prN}, // So [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE - {0x1B6B, 0x1B73, prN}, // Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG - {0x1B74, 0x1B7C, prN}, // So [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING - {0x1B7D, 0x1B7E, prN}, // Po [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG - {0x1B80, 0x1B81, prN}, // Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR - {0x1B82, 0x1B82, prN}, // Mc SUNDANESE SIGN PANGWISAD - {0x1B83, 0x1BA0, prN}, // Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA - {0x1BA1, 0x1BA1, prN}, // Mc SUNDANESE CONSONANT SIGN PAMINGKAL - {0x1BA2, 0x1BA5, prN}, // Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU - {0x1BA6, 0x1BA7, prN}, // Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG - {0x1BA8, 0x1BA9, prN}, // Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG - {0x1BAA, 0x1BAA, prN}, // Mc SUNDANESE SIGN PAMAAEH - {0x1BAB, 0x1BAD, prN}, // Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA - {0x1BAE, 0x1BAF, prN}, // Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA - {0x1BB0, 0x1BB9, prN}, // Nd [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE - {0x1BBA, 0x1BBF, prN}, // Lo [6] SUNDANESE AVAGRAHA..SUNDANESE LETTER FINAL M - {0x1BC0, 0x1BE5, prN}, // Lo [38] BATAK LETTER A..BATAK LETTER U - {0x1BE6, 0x1BE6, prN}, // Mn BATAK SIGN TOMPI - {0x1BE7, 0x1BE7, prN}, // Mc BATAK VOWEL SIGN E - {0x1BE8, 0x1BE9, prN}, // Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE - {0x1BEA, 0x1BEC, prN}, // Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O - {0x1BED, 0x1BED, prN}, // Mn BATAK VOWEL SIGN KARO O - {0x1BEE, 0x1BEE, prN}, // Mc BATAK VOWEL SIGN U - {0x1BEF, 0x1BF1, prN}, // Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H - {0x1BF2, 0x1BF3, prN}, // Mc [2] BATAK PANGOLAT..BATAK PANONGONAN - {0x1BFC, 0x1BFF, prN}, // Po [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT - {0x1C00, 0x1C23, prN}, // Lo [36] LEPCHA LETTER KA..LEPCHA LETTER A - {0x1C24, 0x1C2B, prN}, // Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU - {0x1C2C, 0x1C33, prN}, // Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T - {0x1C34, 0x1C35, prN}, // Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG - {0x1C36, 0x1C37, prN}, // Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA - {0x1C3B, 0x1C3F, prN}, // Po [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK - {0x1C40, 0x1C49, prN}, // Nd [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE - {0x1C4D, 0x1C4F, prN}, // Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA - {0x1C50, 0x1C59, prN}, // Nd [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE - {0x1C5A, 0x1C77, prN}, // Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH - {0x1C78, 0x1C7D, prN}, // Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD - {0x1C7E, 0x1C7F, prN}, // Po [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD - {0x1C80, 0x1C88, prN}, // Ll [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK - {0x1C90, 0x1CBA, prN}, // Lu [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN - {0x1CBD, 0x1CBF, prN}, // Lu [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN - {0x1CC0, 0x1CC7, prN}, // Po [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA - {0x1CD0, 0x1CD2, prN}, // Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA - {0x1CD3, 0x1CD3, prN}, // Po VEDIC SIGN NIHSHVASA - {0x1CD4, 0x1CE0, prN}, // Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA - {0x1CE1, 0x1CE1, prN}, // Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA - {0x1CE2, 0x1CE8, prN}, // Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL - {0x1CE9, 0x1CEC, prN}, // Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL - {0x1CED, 0x1CED, prN}, // Mn VEDIC SIGN TIRYAK - {0x1CEE, 0x1CF3, prN}, // Lo [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA - {0x1CF4, 0x1CF4, prN}, // Mn VEDIC TONE CANDRA ABOVE - {0x1CF5, 0x1CF6, prN}, // Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA - {0x1CF7, 0x1CF7, prN}, // Mc VEDIC SIGN ATIKRAMA - {0x1CF8, 0x1CF9, prN}, // Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE - {0x1CFA, 0x1CFA, prN}, // Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA - {0x1D00, 0x1D2B, prN}, // Ll [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL - {0x1D2C, 0x1D6A, prN}, // Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI - {0x1D6B, 0x1D77, prN}, // Ll [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G - {0x1D78, 0x1D78, prN}, // Lm MODIFIER LETTER CYRILLIC EN - {0x1D79, 0x1D7F, prN}, // Ll [7] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER UPSILON WITH STROKE - {0x1D80, 0x1D9A, prN}, // Ll [27] LATIN SMALL LETTER B WITH PALATAL HOOK..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK - {0x1D9B, 0x1DBF, prN}, // Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA - {0x1DC0, 0x1DFF, prN}, // Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW - {0x1E00, 0x1EFF, prN}, // L& [256] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH LOOP - {0x1F00, 0x1F15, prN}, // L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA - {0x1F18, 0x1F1D, prN}, // Lu [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA - {0x1F20, 0x1F45, prN}, // L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA - {0x1F48, 0x1F4D, prN}, // Lu [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA - {0x1F50, 0x1F57, prN}, // Ll [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI - {0x1F59, 0x1F59, prN}, // Lu GREEK CAPITAL LETTER UPSILON WITH DASIA - {0x1F5B, 0x1F5B, prN}, // Lu GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA - {0x1F5D, 0x1F5D, prN}, // Lu GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA - {0x1F5F, 0x1F7D, prN}, // L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA - {0x1F80, 0x1FB4, prN}, // L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI - {0x1FB6, 0x1FBC, prN}, // L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI - {0x1FBD, 0x1FBD, prN}, // Sk GREEK KORONIS - {0x1FBE, 0x1FBE, prN}, // Ll GREEK PROSGEGRAMMENI - {0x1FBF, 0x1FC1, prN}, // Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI - {0x1FC2, 0x1FC4, prN}, // Ll [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI - {0x1FC6, 0x1FCC, prN}, // L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI - {0x1FCD, 0x1FCF, prN}, // Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI - {0x1FD0, 0x1FD3, prN}, // Ll [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA - {0x1FD6, 0x1FDB, prN}, // L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA - {0x1FDD, 0x1FDF, prN}, // Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI - {0x1FE0, 0x1FEC, prN}, // L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA - {0x1FED, 0x1FEF, prN}, // Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA - {0x1FF2, 0x1FF4, prN}, // Ll [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI - {0x1FF6, 0x1FFC, prN}, // L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI - {0x1FFD, 0x1FFE, prN}, // Sk [2] GREEK OXIA..GREEK DASIA - {0x2000, 0x200A, prN}, // Zs [11] EN QUAD..HAIR SPACE - {0x200B, 0x200F, prN}, // Cf [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK - {0x2010, 0x2010, prA}, // Pd HYPHEN - {0x2011, 0x2012, prN}, // Pd [2] NON-BREAKING HYPHEN..FIGURE DASH - {0x2013, 0x2015, prA}, // Pd [3] EN DASH..HORIZONTAL BAR - {0x2016, 0x2016, prA}, // Po DOUBLE VERTICAL LINE - {0x2017, 0x2017, prN}, // Po DOUBLE LOW LINE - {0x2018, 0x2018, prA}, // Pi LEFT SINGLE QUOTATION MARK - {0x2019, 0x2019, prA}, // Pf RIGHT SINGLE QUOTATION MARK - {0x201A, 0x201A, prN}, // Ps SINGLE LOW-9 QUOTATION MARK - {0x201B, 0x201B, prN}, // Pi SINGLE HIGH-REVERSED-9 QUOTATION MARK - {0x201C, 0x201C, prA}, // Pi LEFT DOUBLE QUOTATION MARK - {0x201D, 0x201D, prA}, // Pf RIGHT DOUBLE QUOTATION MARK - {0x201E, 0x201E, prN}, // Ps DOUBLE LOW-9 QUOTATION MARK - {0x201F, 0x201F, prN}, // Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK - {0x2020, 0x2022, prA}, // Po [3] DAGGER..BULLET - {0x2023, 0x2023, prN}, // Po TRIANGULAR BULLET - {0x2024, 0x2027, prA}, // Po [4] ONE DOT LEADER..HYPHENATION POINT - {0x2028, 0x2028, prN}, // Zl LINE SEPARATOR - {0x2029, 0x2029, prN}, // Zp PARAGRAPH SEPARATOR - {0x202A, 0x202E, prN}, // Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE - {0x202F, 0x202F, prN}, // Zs NARROW NO-BREAK SPACE - {0x2030, 0x2030, prA}, // Po PER MILLE SIGN - {0x2031, 0x2031, prN}, // Po PER TEN THOUSAND SIGN - {0x2032, 0x2033, prA}, // Po [2] PRIME..DOUBLE PRIME - {0x2034, 0x2034, prN}, // Po TRIPLE PRIME - {0x2035, 0x2035, prA}, // Po REVERSED PRIME - {0x2036, 0x2038, prN}, // Po [3] REVERSED DOUBLE PRIME..CARET - {0x2039, 0x2039, prN}, // Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK - {0x203A, 0x203A, prN}, // Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - {0x203B, 0x203B, prA}, // Po REFERENCE MARK - {0x203C, 0x203D, prN}, // Po [2] DOUBLE EXCLAMATION MARK..INTERROBANG - {0x203E, 0x203E, prA}, // Po OVERLINE - {0x203F, 0x2040, prN}, // Pc [2] UNDERTIE..CHARACTER TIE - {0x2041, 0x2043, prN}, // Po [3] CARET INSERTION POINT..HYPHEN BULLET - {0x2044, 0x2044, prN}, // Sm FRACTION SLASH - {0x2045, 0x2045, prN}, // Ps LEFT SQUARE BRACKET WITH QUILL - {0x2046, 0x2046, prN}, // Pe RIGHT SQUARE BRACKET WITH QUILL - {0x2047, 0x2051, prN}, // Po [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY - {0x2052, 0x2052, prN}, // Sm COMMERCIAL MINUS SIGN - {0x2053, 0x2053, prN}, // Po SWUNG DASH - {0x2054, 0x2054, prN}, // Pc INVERTED UNDERTIE - {0x2055, 0x205E, prN}, // Po [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS - {0x205F, 0x205F, prN}, // Zs MEDIUM MATHEMATICAL SPACE - {0x2060, 0x2064, prN}, // Cf [5] WORD JOINER..INVISIBLE PLUS - {0x2066, 0x206F, prN}, // Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES - {0x2070, 0x2070, prN}, // No SUPERSCRIPT ZERO - {0x2071, 0x2071, prN}, // Lm SUPERSCRIPT LATIN SMALL LETTER I - {0x2074, 0x2074, prA}, // No SUPERSCRIPT FOUR - {0x2075, 0x2079, prN}, // No [5] SUPERSCRIPT FIVE..SUPERSCRIPT NINE - {0x207A, 0x207C, prN}, // Sm [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN - {0x207D, 0x207D, prN}, // Ps SUPERSCRIPT LEFT PARENTHESIS - {0x207E, 0x207E, prN}, // Pe SUPERSCRIPT RIGHT PARENTHESIS - {0x207F, 0x207F, prA}, // Lm SUPERSCRIPT LATIN SMALL LETTER N - {0x2080, 0x2080, prN}, // No SUBSCRIPT ZERO - {0x2081, 0x2084, prA}, // No [4] SUBSCRIPT ONE..SUBSCRIPT FOUR - {0x2085, 0x2089, prN}, // No [5] SUBSCRIPT FIVE..SUBSCRIPT NINE - {0x208A, 0x208C, prN}, // Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN - {0x208D, 0x208D, prN}, // Ps SUBSCRIPT LEFT PARENTHESIS - {0x208E, 0x208E, prN}, // Pe SUBSCRIPT RIGHT PARENTHESIS - {0x2090, 0x209C, prN}, // Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T - {0x20A0, 0x20A8, prN}, // Sc [9] EURO-CURRENCY SIGN..RUPEE SIGN - {0x20A9, 0x20A9, prH}, // Sc WON SIGN - {0x20AA, 0x20AB, prN}, // Sc [2] NEW SHEQEL SIGN..DONG SIGN - {0x20AC, 0x20AC, prA}, // Sc EURO SIGN - {0x20AD, 0x20C0, prN}, // Sc [20] KIP SIGN..SOM SIGN - {0x20D0, 0x20DC, prN}, // Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE - {0x20DD, 0x20E0, prN}, // Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH - {0x20E1, 0x20E1, prN}, // Mn COMBINING LEFT RIGHT ARROW ABOVE - {0x20E2, 0x20E4, prN}, // Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE - {0x20E5, 0x20F0, prN}, // Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE - {0x2100, 0x2101, prN}, // So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT - {0x2102, 0x2102, prN}, // Lu DOUBLE-STRUCK CAPITAL C - {0x2103, 0x2103, prA}, // So DEGREE CELSIUS - {0x2104, 0x2104, prN}, // So CENTRE LINE SYMBOL - {0x2105, 0x2105, prA}, // So CARE OF - {0x2106, 0x2106, prN}, // So CADA UNA - {0x2107, 0x2107, prN}, // Lu EULER CONSTANT - {0x2108, 0x2108, prN}, // So SCRUPLE - {0x2109, 0x2109, prA}, // So DEGREE FAHRENHEIT - {0x210A, 0x2112, prN}, // L& [9] SCRIPT SMALL G..SCRIPT CAPITAL L - {0x2113, 0x2113, prA}, // Ll SCRIPT SMALL L - {0x2114, 0x2114, prN}, // So L B BAR SYMBOL - {0x2115, 0x2115, prN}, // Lu DOUBLE-STRUCK CAPITAL N - {0x2116, 0x2116, prA}, // So NUMERO SIGN - {0x2117, 0x2117, prN}, // So SOUND RECORDING COPYRIGHT - {0x2118, 0x2118, prN}, // Sm SCRIPT CAPITAL P - {0x2119, 0x211D, prN}, // Lu [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R - {0x211E, 0x2120, prN}, // So [3] PRESCRIPTION TAKE..SERVICE MARK - {0x2121, 0x2122, prA}, // So [2] TELEPHONE SIGN..TRADE MARK SIGN - {0x2123, 0x2123, prN}, // So VERSICLE - {0x2124, 0x2124, prN}, // Lu DOUBLE-STRUCK CAPITAL Z - {0x2125, 0x2125, prN}, // So OUNCE SIGN - {0x2126, 0x2126, prA}, // Lu OHM SIGN - {0x2127, 0x2127, prN}, // So INVERTED OHM SIGN - {0x2128, 0x2128, prN}, // Lu BLACK-LETTER CAPITAL Z - {0x2129, 0x2129, prN}, // So TURNED GREEK SMALL LETTER IOTA - {0x212A, 0x212A, prN}, // Lu KELVIN SIGN - {0x212B, 0x212B, prA}, // Lu ANGSTROM SIGN - {0x212C, 0x212D, prN}, // Lu [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C - {0x212E, 0x212E, prN}, // So ESTIMATED SYMBOL - {0x212F, 0x2134, prN}, // L& [6] SCRIPT SMALL E..SCRIPT SMALL O - {0x2135, 0x2138, prN}, // Lo [4] ALEF SYMBOL..DALET SYMBOL - {0x2139, 0x2139, prN}, // Ll INFORMATION SOURCE - {0x213A, 0x213B, prN}, // So [2] ROTATED CAPITAL Q..FACSIMILE SIGN - {0x213C, 0x213F, prN}, // L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI - {0x2140, 0x2144, prN}, // Sm [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y - {0x2145, 0x2149, prN}, // L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J - {0x214A, 0x214A, prN}, // So PROPERTY LINE - {0x214B, 0x214B, prN}, // Sm TURNED AMPERSAND - {0x214C, 0x214D, prN}, // So [2] PER SIGN..AKTIESELSKAB - {0x214E, 0x214E, prN}, // Ll TURNED SMALL F - {0x214F, 0x214F, prN}, // So SYMBOL FOR SAMARITAN SOURCE - {0x2150, 0x2152, prN}, // No [3] VULGAR FRACTION ONE SEVENTH..VULGAR FRACTION ONE TENTH - {0x2153, 0x2154, prA}, // No [2] VULGAR FRACTION ONE THIRD..VULGAR FRACTION TWO THIRDS - {0x2155, 0x215A, prN}, // No [6] VULGAR FRACTION ONE FIFTH..VULGAR FRACTION FIVE SIXTHS - {0x215B, 0x215E, prA}, // No [4] VULGAR FRACTION ONE EIGHTH..VULGAR FRACTION SEVEN EIGHTHS - {0x215F, 0x215F, prN}, // No FRACTION NUMERATOR ONE - {0x2160, 0x216B, prA}, // Nl [12] ROMAN NUMERAL ONE..ROMAN NUMERAL TWELVE - {0x216C, 0x216F, prN}, // Nl [4] ROMAN NUMERAL FIFTY..ROMAN NUMERAL ONE THOUSAND - {0x2170, 0x2179, prA}, // Nl [10] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL TEN - {0x217A, 0x2182, prN}, // Nl [9] SMALL ROMAN NUMERAL ELEVEN..ROMAN NUMERAL TEN THOUSAND - {0x2183, 0x2184, prN}, // L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C - {0x2185, 0x2188, prN}, // Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND - {0x2189, 0x2189, prA}, // No VULGAR FRACTION ZERO THIRDS - {0x218A, 0x218B, prN}, // So [2] TURNED DIGIT TWO..TURNED DIGIT THREE - {0x2190, 0x2194, prA}, // Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW - {0x2195, 0x2199, prA}, // So [5] UP DOWN ARROW..SOUTH WEST ARROW - {0x219A, 0x219B, prN}, // Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE - {0x219C, 0x219F, prN}, // So [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW - {0x21A0, 0x21A0, prN}, // Sm RIGHTWARDS TWO HEADED ARROW - {0x21A1, 0x21A2, prN}, // So [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL - {0x21A3, 0x21A3, prN}, // Sm RIGHTWARDS ARROW WITH TAIL - {0x21A4, 0x21A5, prN}, // So [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR - {0x21A6, 0x21A6, prN}, // Sm RIGHTWARDS ARROW FROM BAR - {0x21A7, 0x21AD, prN}, // So [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW - {0x21AE, 0x21AE, prN}, // Sm LEFT RIGHT ARROW WITH STROKE - {0x21AF, 0x21B7, prN}, // So [9] DOWNWARDS ZIGZAG ARROW..CLOCKWISE TOP SEMICIRCLE ARROW - {0x21B8, 0x21B9, prA}, // So [2] NORTH WEST ARROW TO LONG BAR..LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR - {0x21BA, 0x21CD, prN}, // So [20] ANTICLOCKWISE OPEN CIRCLE ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE - {0x21CE, 0x21CF, prN}, // Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE - {0x21D0, 0x21D1, prN}, // So [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW - {0x21D2, 0x21D2, prA}, // Sm RIGHTWARDS DOUBLE ARROW - {0x21D3, 0x21D3, prN}, // So DOWNWARDS DOUBLE ARROW - {0x21D4, 0x21D4, prA}, // Sm LEFT RIGHT DOUBLE ARROW - {0x21D5, 0x21E6, prN}, // So [18] UP DOWN DOUBLE ARROW..LEFTWARDS WHITE ARROW - {0x21E7, 0x21E7, prA}, // So UPWARDS WHITE ARROW - {0x21E8, 0x21F3, prN}, // So [12] RIGHTWARDS WHITE ARROW..UP DOWN WHITE ARROW - {0x21F4, 0x21FF, prN}, // Sm [12] RIGHT ARROW WITH SMALL CIRCLE..LEFT RIGHT OPEN-HEADED ARROW - {0x2200, 0x2200, prA}, // Sm FOR ALL - {0x2201, 0x2201, prN}, // Sm COMPLEMENT - {0x2202, 0x2203, prA}, // Sm [2] PARTIAL DIFFERENTIAL..THERE EXISTS - {0x2204, 0x2206, prN}, // Sm [3] THERE DOES NOT EXIST..INCREMENT - {0x2207, 0x2208, prA}, // Sm [2] NABLA..ELEMENT OF - {0x2209, 0x220A, prN}, // Sm [2] NOT AN ELEMENT OF..SMALL ELEMENT OF - {0x220B, 0x220B, prA}, // Sm CONTAINS AS MEMBER - {0x220C, 0x220E, prN}, // Sm [3] DOES NOT CONTAIN AS MEMBER..END OF PROOF - {0x220F, 0x220F, prA}, // Sm N-ARY PRODUCT - {0x2210, 0x2210, prN}, // Sm N-ARY COPRODUCT - {0x2211, 0x2211, prA}, // Sm N-ARY SUMMATION - {0x2212, 0x2214, prN}, // Sm [3] MINUS SIGN..DOT PLUS - {0x2215, 0x2215, prA}, // Sm DIVISION SLASH - {0x2216, 0x2219, prN}, // Sm [4] SET MINUS..BULLET OPERATOR - {0x221A, 0x221A, prA}, // Sm SQUARE ROOT - {0x221B, 0x221C, prN}, // Sm [2] CUBE ROOT..FOURTH ROOT - {0x221D, 0x2220, prA}, // Sm [4] PROPORTIONAL TO..ANGLE - {0x2221, 0x2222, prN}, // Sm [2] MEASURED ANGLE..SPHERICAL ANGLE - {0x2223, 0x2223, prA}, // Sm DIVIDES - {0x2224, 0x2224, prN}, // Sm DOES NOT DIVIDE - {0x2225, 0x2225, prA}, // Sm PARALLEL TO - {0x2226, 0x2226, prN}, // Sm NOT PARALLEL TO - {0x2227, 0x222C, prA}, // Sm [6] LOGICAL AND..DOUBLE INTEGRAL - {0x222D, 0x222D, prN}, // Sm TRIPLE INTEGRAL - {0x222E, 0x222E, prA}, // Sm CONTOUR INTEGRAL - {0x222F, 0x2233, prN}, // Sm [5] SURFACE INTEGRAL..ANTICLOCKWISE CONTOUR INTEGRAL - {0x2234, 0x2237, prA}, // Sm [4] THEREFORE..PROPORTION - {0x2238, 0x223B, prN}, // Sm [4] DOT MINUS..HOMOTHETIC - {0x223C, 0x223D, prA}, // Sm [2] TILDE OPERATOR..REVERSED TILDE - {0x223E, 0x2247, prN}, // Sm [10] INVERTED LAZY S..NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO - {0x2248, 0x2248, prA}, // Sm ALMOST EQUAL TO - {0x2249, 0x224B, prN}, // Sm [3] NOT ALMOST EQUAL TO..TRIPLE TILDE - {0x224C, 0x224C, prA}, // Sm ALL EQUAL TO - {0x224D, 0x2251, prN}, // Sm [5] EQUIVALENT TO..GEOMETRICALLY EQUAL TO - {0x2252, 0x2252, prA}, // Sm APPROXIMATELY EQUAL TO OR THE IMAGE OF - {0x2253, 0x225F, prN}, // Sm [13] IMAGE OF OR APPROXIMATELY EQUAL TO..QUESTIONED EQUAL TO - {0x2260, 0x2261, prA}, // Sm [2] NOT EQUAL TO..IDENTICAL TO - {0x2262, 0x2263, prN}, // Sm [2] NOT IDENTICAL TO..STRICTLY EQUIVALENT TO - {0x2264, 0x2267, prA}, // Sm [4] LESS-THAN OR EQUAL TO..GREATER-THAN OVER EQUAL TO - {0x2268, 0x2269, prN}, // Sm [2] LESS-THAN BUT NOT EQUAL TO..GREATER-THAN BUT NOT EQUAL TO - {0x226A, 0x226B, prA}, // Sm [2] MUCH LESS-THAN..MUCH GREATER-THAN - {0x226C, 0x226D, prN}, // Sm [2] BETWEEN..NOT EQUIVALENT TO - {0x226E, 0x226F, prA}, // Sm [2] NOT LESS-THAN..NOT GREATER-THAN - {0x2270, 0x2281, prN}, // Sm [18] NEITHER LESS-THAN NOR EQUAL TO..DOES NOT SUCCEED - {0x2282, 0x2283, prA}, // Sm [2] SUBSET OF..SUPERSET OF - {0x2284, 0x2285, prN}, // Sm [2] NOT A SUBSET OF..NOT A SUPERSET OF - {0x2286, 0x2287, prA}, // Sm [2] SUBSET OF OR EQUAL TO..SUPERSET OF OR EQUAL TO - {0x2288, 0x2294, prN}, // Sm [13] NEITHER A SUBSET OF NOR EQUAL TO..SQUARE CUP - {0x2295, 0x2295, prA}, // Sm CIRCLED PLUS - {0x2296, 0x2298, prN}, // Sm [3] CIRCLED MINUS..CIRCLED DIVISION SLASH - {0x2299, 0x2299, prA}, // Sm CIRCLED DOT OPERATOR - {0x229A, 0x22A4, prN}, // Sm [11] CIRCLED RING OPERATOR..DOWN TACK - {0x22A5, 0x22A5, prA}, // Sm UP TACK - {0x22A6, 0x22BE, prN}, // Sm [25] ASSERTION..RIGHT ANGLE WITH ARC - {0x22BF, 0x22BF, prA}, // Sm RIGHT TRIANGLE - {0x22C0, 0x22FF, prN}, // Sm [64] N-ARY LOGICAL AND..Z NOTATION BAG MEMBERSHIP - {0x2300, 0x2307, prN}, // So [8] DIAMETER SIGN..WAVY LINE - {0x2308, 0x2308, prN}, // Ps LEFT CEILING - {0x2309, 0x2309, prN}, // Pe RIGHT CEILING - {0x230A, 0x230A, prN}, // Ps LEFT FLOOR - {0x230B, 0x230B, prN}, // Pe RIGHT FLOOR - {0x230C, 0x2311, prN}, // So [6] BOTTOM RIGHT CROP..SQUARE LOZENGE - {0x2312, 0x2312, prA}, // So ARC - {0x2313, 0x2319, prN}, // So [7] SEGMENT..TURNED NOT SIGN - {0x231A, 0x231B, prW}, // So [2] WATCH..HOURGLASS - {0x231C, 0x231F, prN}, // So [4] TOP LEFT CORNER..BOTTOM RIGHT CORNER - {0x2320, 0x2321, prN}, // Sm [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL - {0x2322, 0x2328, prN}, // So [7] FROWN..KEYBOARD - {0x2329, 0x2329, prW}, // Ps LEFT-POINTING ANGLE BRACKET - {0x232A, 0x232A, prW}, // Pe RIGHT-POINTING ANGLE BRACKET - {0x232B, 0x237B, prN}, // So [81] ERASE TO THE LEFT..NOT CHECK MARK - {0x237C, 0x237C, prN}, // Sm RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW - {0x237D, 0x239A, prN}, // So [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL - {0x239B, 0x23B3, prN}, // Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM - {0x23B4, 0x23DB, prN}, // So [40] TOP SQUARE BRACKET..FUSE - {0x23DC, 0x23E1, prN}, // Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET - {0x23E2, 0x23E8, prN}, // So [7] WHITE TRAPEZIUM..DECIMAL EXPONENT SYMBOL - {0x23E9, 0x23EC, prW}, // So [4] BLACK RIGHT-POINTING DOUBLE TRIANGLE..BLACK DOWN-POINTING DOUBLE TRIANGLE - {0x23ED, 0x23EF, prN}, // So [3] BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR..BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR - {0x23F0, 0x23F0, prW}, // So ALARM CLOCK - {0x23F1, 0x23F2, prN}, // So [2] STOPWATCH..TIMER CLOCK - {0x23F3, 0x23F3, prW}, // So HOURGLASS WITH FLOWING SAND - {0x23F4, 0x23FF, prN}, // So [12] BLACK MEDIUM LEFT-POINTING TRIANGLE..OBSERVER EYE SYMBOL - {0x2400, 0x2426, prN}, // So [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO - {0x2440, 0x244A, prN}, // So [11] OCR HOOK..OCR DOUBLE BACKSLASH - {0x2460, 0x249B, prA}, // No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP - {0x249C, 0x24E9, prA}, // So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z - {0x24EA, 0x24EA, prN}, // No CIRCLED DIGIT ZERO - {0x24EB, 0x24FF, prA}, // No [21] NEGATIVE CIRCLED NUMBER ELEVEN..NEGATIVE CIRCLED DIGIT ZERO - {0x2500, 0x254B, prA}, // So [76] BOX DRAWINGS LIGHT HORIZONTAL..BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL - {0x254C, 0x254F, prN}, // So [4] BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL..BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL - {0x2550, 0x2573, prA}, // So [36] BOX DRAWINGS DOUBLE HORIZONTAL..BOX DRAWINGS LIGHT DIAGONAL CROSS - {0x2574, 0x257F, prN}, // So [12] BOX DRAWINGS LIGHT LEFT..BOX DRAWINGS HEAVY UP AND LIGHT DOWN - {0x2580, 0x258F, prA}, // So [16] UPPER HALF BLOCK..LEFT ONE EIGHTH BLOCK - {0x2590, 0x2591, prN}, // So [2] RIGHT HALF BLOCK..LIGHT SHADE - {0x2592, 0x2595, prA}, // So [4] MEDIUM SHADE..RIGHT ONE EIGHTH BLOCK - {0x2596, 0x259F, prN}, // So [10] QUADRANT LOWER LEFT..QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT - {0x25A0, 0x25A1, prA}, // So [2] BLACK SQUARE..WHITE SQUARE - {0x25A2, 0x25A2, prN}, // So WHITE SQUARE WITH ROUNDED CORNERS - {0x25A3, 0x25A9, prA}, // So [7] WHITE SQUARE CONTAINING BLACK SMALL SQUARE..SQUARE WITH DIAGONAL CROSSHATCH FILL - {0x25AA, 0x25B1, prN}, // So [8] BLACK SMALL SQUARE..WHITE PARALLELOGRAM - {0x25B2, 0x25B3, prA}, // So [2] BLACK UP-POINTING TRIANGLE..WHITE UP-POINTING TRIANGLE - {0x25B4, 0x25B5, prN}, // So [2] BLACK UP-POINTING SMALL TRIANGLE..WHITE UP-POINTING SMALL TRIANGLE - {0x25B6, 0x25B6, prA}, // So BLACK RIGHT-POINTING TRIANGLE - {0x25B7, 0x25B7, prA}, // Sm WHITE RIGHT-POINTING TRIANGLE - {0x25B8, 0x25BB, prN}, // So [4] BLACK RIGHT-POINTING SMALL TRIANGLE..WHITE RIGHT-POINTING POINTER - {0x25BC, 0x25BD, prA}, // So [2] BLACK DOWN-POINTING TRIANGLE..WHITE DOWN-POINTING TRIANGLE - {0x25BE, 0x25BF, prN}, // So [2] BLACK DOWN-POINTING SMALL TRIANGLE..WHITE DOWN-POINTING SMALL TRIANGLE - {0x25C0, 0x25C0, prA}, // So BLACK LEFT-POINTING TRIANGLE - {0x25C1, 0x25C1, prA}, // Sm WHITE LEFT-POINTING TRIANGLE - {0x25C2, 0x25C5, prN}, // So [4] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE LEFT-POINTING POINTER - {0x25C6, 0x25C8, prA}, // So [3] BLACK DIAMOND..WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND - {0x25C9, 0x25CA, prN}, // So [2] FISHEYE..LOZENGE - {0x25CB, 0x25CB, prA}, // So WHITE CIRCLE - {0x25CC, 0x25CD, prN}, // So [2] DOTTED CIRCLE..CIRCLE WITH VERTICAL FILL - {0x25CE, 0x25D1, prA}, // So [4] BULLSEYE..CIRCLE WITH RIGHT HALF BLACK - {0x25D2, 0x25E1, prN}, // So [16] CIRCLE WITH LOWER HALF BLACK..LOWER HALF CIRCLE - {0x25E2, 0x25E5, prA}, // So [4] BLACK LOWER RIGHT TRIANGLE..BLACK UPPER RIGHT TRIANGLE - {0x25E6, 0x25EE, prN}, // So [9] WHITE BULLET..UP-POINTING TRIANGLE WITH RIGHT HALF BLACK - {0x25EF, 0x25EF, prA}, // So LARGE CIRCLE - {0x25F0, 0x25F7, prN}, // So [8] WHITE SQUARE WITH UPPER LEFT QUADRANT..WHITE CIRCLE WITH UPPER RIGHT QUADRANT - {0x25F8, 0x25FC, prN}, // Sm [5] UPPER LEFT TRIANGLE..BLACK MEDIUM SQUARE - {0x25FD, 0x25FE, prW}, // Sm [2] WHITE MEDIUM SMALL SQUARE..BLACK MEDIUM SMALL SQUARE - {0x25FF, 0x25FF, prN}, // Sm LOWER RIGHT TRIANGLE - {0x2600, 0x2604, prN}, // So [5] BLACK SUN WITH RAYS..COMET - {0x2605, 0x2606, prA}, // So [2] BLACK STAR..WHITE STAR - {0x2607, 0x2608, prN}, // So [2] LIGHTNING..THUNDERSTORM - {0x2609, 0x2609, prA}, // So SUN - {0x260A, 0x260D, prN}, // So [4] ASCENDING NODE..OPPOSITION - {0x260E, 0x260F, prA}, // So [2] BLACK TELEPHONE..WHITE TELEPHONE - {0x2610, 0x2613, prN}, // So [4] BALLOT BOX..SALTIRE - {0x2614, 0x2615, prW}, // So [2] UMBRELLA WITH RAIN DROPS..HOT BEVERAGE - {0x2616, 0x261B, prN}, // So [6] WHITE SHOGI PIECE..BLACK RIGHT POINTING INDEX - {0x261C, 0x261C, prA}, // So WHITE LEFT POINTING INDEX - {0x261D, 0x261D, prN}, // So WHITE UP POINTING INDEX - {0x261E, 0x261E, prA}, // So WHITE RIGHT POINTING INDEX - {0x261F, 0x263F, prN}, // So [33] WHITE DOWN POINTING INDEX..MERCURY - {0x2640, 0x2640, prA}, // So FEMALE SIGN - {0x2641, 0x2641, prN}, // So EARTH - {0x2642, 0x2642, prA}, // So MALE SIGN - {0x2643, 0x2647, prN}, // So [5] JUPITER..PLUTO - {0x2648, 0x2653, prW}, // So [12] ARIES..PISCES - {0x2654, 0x265F, prN}, // So [12] WHITE CHESS KING..BLACK CHESS PAWN - {0x2660, 0x2661, prA}, // So [2] BLACK SPADE SUIT..WHITE HEART SUIT - {0x2662, 0x2662, prN}, // So WHITE DIAMOND SUIT - {0x2663, 0x2665, prA}, // So [3] BLACK CLUB SUIT..BLACK HEART SUIT - {0x2666, 0x2666, prN}, // So BLACK DIAMOND SUIT - {0x2667, 0x266A, prA}, // So [4] WHITE CLUB SUIT..EIGHTH NOTE - {0x266B, 0x266B, prN}, // So BEAMED EIGHTH NOTES - {0x266C, 0x266D, prA}, // So [2] BEAMED SIXTEENTH NOTES..MUSIC FLAT SIGN - {0x266E, 0x266E, prN}, // So MUSIC NATURAL SIGN - {0x266F, 0x266F, prA}, // Sm MUSIC SHARP SIGN - {0x2670, 0x267E, prN}, // So [15] WEST SYRIAC CROSS..PERMANENT PAPER SIGN - {0x267F, 0x267F, prW}, // So WHEELCHAIR SYMBOL - {0x2680, 0x2692, prN}, // So [19] DIE FACE-1..HAMMER AND PICK - {0x2693, 0x2693, prW}, // So ANCHOR - {0x2694, 0x269D, prN}, // So [10] CROSSED SWORDS..OUTLINED WHITE STAR - {0x269E, 0x269F, prA}, // So [2] THREE LINES CONVERGING RIGHT..THREE LINES CONVERGING LEFT - {0x26A0, 0x26A0, prN}, // So WARNING SIGN - {0x26A1, 0x26A1, prW}, // So HIGH VOLTAGE SIGN - {0x26A2, 0x26A9, prN}, // So [8] DOUBLED FEMALE SIGN..HORIZONTAL MALE WITH STROKE SIGN - {0x26AA, 0x26AB, prW}, // So [2] MEDIUM WHITE CIRCLE..MEDIUM BLACK CIRCLE - {0x26AC, 0x26BC, prN}, // So [17] MEDIUM SMALL WHITE CIRCLE..SESQUIQUADRATE - {0x26BD, 0x26BE, prW}, // So [2] SOCCER BALL..BASEBALL - {0x26BF, 0x26BF, prA}, // So SQUARED KEY - {0x26C0, 0x26C3, prN}, // So [4] WHITE DRAUGHTS MAN..BLACK DRAUGHTS KING - {0x26C4, 0x26C5, prW}, // So [2] SNOWMAN WITHOUT SNOW..SUN BEHIND CLOUD - {0x26C6, 0x26CD, prA}, // So [8] RAIN..DISABLED CAR - {0x26CE, 0x26CE, prW}, // So OPHIUCHUS - {0x26CF, 0x26D3, prA}, // So [5] PICK..CHAINS - {0x26D4, 0x26D4, prW}, // So NO ENTRY - {0x26D5, 0x26E1, prA}, // So [13] ALTERNATE ONE-WAY LEFT WAY TRAFFIC..RESTRICTED LEFT ENTRY-2 - {0x26E2, 0x26E2, prN}, // So ASTRONOMICAL SYMBOL FOR URANUS - {0x26E3, 0x26E3, prA}, // So HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE - {0x26E4, 0x26E7, prN}, // So [4] PENTAGRAM..INVERTED PENTAGRAM - {0x26E8, 0x26E9, prA}, // So [2] BLACK CROSS ON SHIELD..SHINTO SHRINE - {0x26EA, 0x26EA, prW}, // So CHURCH - {0x26EB, 0x26F1, prA}, // So [7] CASTLE..UMBRELLA ON GROUND - {0x26F2, 0x26F3, prW}, // So [2] FOUNTAIN..FLAG IN HOLE - {0x26F4, 0x26F4, prA}, // So FERRY - {0x26F5, 0x26F5, prW}, // So SAILBOAT - {0x26F6, 0x26F9, prA}, // So [4] SQUARE FOUR CORNERS..PERSON WITH BALL - {0x26FA, 0x26FA, prW}, // So TENT - {0x26FB, 0x26FC, prA}, // So [2] JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL - {0x26FD, 0x26FD, prW}, // So FUEL PUMP - {0x26FE, 0x26FF, prA}, // So [2] CUP ON BLACK SQUARE..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE - {0x2700, 0x2704, prN}, // So [5] BLACK SAFETY SCISSORS..WHITE SCISSORS - {0x2705, 0x2705, prW}, // So WHITE HEAVY CHECK MARK - {0x2706, 0x2709, prN}, // So [4] TELEPHONE LOCATION SIGN..ENVELOPE - {0x270A, 0x270B, prW}, // So [2] RAISED FIST..RAISED HAND - {0x270C, 0x2727, prN}, // So [28] VICTORY HAND..WHITE FOUR POINTED STAR - {0x2728, 0x2728, prW}, // So SPARKLES - {0x2729, 0x273C, prN}, // So [20] STRESS OUTLINED WHITE STAR..OPEN CENTRE TEARDROP-SPOKED ASTERISK - {0x273D, 0x273D, prA}, // So HEAVY TEARDROP-SPOKED ASTERISK - {0x273E, 0x274B, prN}, // So [14] SIX PETALLED BLACK AND WHITE FLORETTE..HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK - {0x274C, 0x274C, prW}, // So CROSS MARK - {0x274D, 0x274D, prN}, // So SHADOWED WHITE CIRCLE - {0x274E, 0x274E, prW}, // So NEGATIVE SQUARED CROSS MARK - {0x274F, 0x2752, prN}, // So [4] LOWER RIGHT DROP-SHADOWED WHITE SQUARE..UPPER RIGHT SHADOWED WHITE SQUARE - {0x2753, 0x2755, prW}, // So [3] BLACK QUESTION MARK ORNAMENT..WHITE EXCLAMATION MARK ORNAMENT - {0x2756, 0x2756, prN}, // So BLACK DIAMOND MINUS WHITE X - {0x2757, 0x2757, prW}, // So HEAVY EXCLAMATION MARK SYMBOL - {0x2758, 0x2767, prN}, // So [16] LIGHT VERTICAL BAR..ROTATED FLORAL HEART BULLET - {0x2768, 0x2768, prN}, // Ps MEDIUM LEFT PARENTHESIS ORNAMENT - {0x2769, 0x2769, prN}, // Pe MEDIUM RIGHT PARENTHESIS ORNAMENT - {0x276A, 0x276A, prN}, // Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT - {0x276B, 0x276B, prN}, // Pe MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT - {0x276C, 0x276C, prN}, // Ps MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT - {0x276D, 0x276D, prN}, // Pe MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT - {0x276E, 0x276E, prN}, // Ps HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT - {0x276F, 0x276F, prN}, // Pe HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT - {0x2770, 0x2770, prN}, // Ps HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT - {0x2771, 0x2771, prN}, // Pe HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT - {0x2772, 0x2772, prN}, // Ps LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT - {0x2773, 0x2773, prN}, // Pe LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT - {0x2774, 0x2774, prN}, // Ps MEDIUM LEFT CURLY BRACKET ORNAMENT - {0x2775, 0x2775, prN}, // Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT - {0x2776, 0x277F, prA}, // No [10] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED NUMBER TEN - {0x2780, 0x2793, prN}, // No [20] DINGBAT CIRCLED SANS-SERIF DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN - {0x2794, 0x2794, prN}, // So HEAVY WIDE-HEADED RIGHTWARDS ARROW - {0x2795, 0x2797, prW}, // So [3] HEAVY PLUS SIGN..HEAVY DIVISION SIGN - {0x2798, 0x27AF, prN}, // So [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW - {0x27B0, 0x27B0, prW}, // So CURLY LOOP - {0x27B1, 0x27BE, prN}, // So [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW - {0x27BF, 0x27BF, prW}, // So DOUBLE CURLY LOOP - {0x27C0, 0x27C4, prN}, // Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET - {0x27C5, 0x27C5, prN}, // Ps LEFT S-SHAPED BAG DELIMITER - {0x27C6, 0x27C6, prN}, // Pe RIGHT S-SHAPED BAG DELIMITER - {0x27C7, 0x27E5, prN}, // Sm [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK - {0x27E6, 0x27E6, prNa}, // Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET - {0x27E7, 0x27E7, prNa}, // Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET - {0x27E8, 0x27E8, prNa}, // Ps MATHEMATICAL LEFT ANGLE BRACKET - {0x27E9, 0x27E9, prNa}, // Pe MATHEMATICAL RIGHT ANGLE BRACKET - {0x27EA, 0x27EA, prNa}, // Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET - {0x27EB, 0x27EB, prNa}, // Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET - {0x27EC, 0x27EC, prNa}, // Ps MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET - {0x27ED, 0x27ED, prNa}, // Pe MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET - {0x27EE, 0x27EE, prN}, // Ps MATHEMATICAL LEFT FLATTENED PARENTHESIS - {0x27EF, 0x27EF, prN}, // Pe MATHEMATICAL RIGHT FLATTENED PARENTHESIS - {0x27F0, 0x27FF, prN}, // Sm [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW - {0x2800, 0x28FF, prN}, // So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678 - {0x2900, 0x297F, prN}, // Sm [128] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..DOWN FISH TAIL - {0x2980, 0x2982, prN}, // Sm [3] TRIPLE VERTICAL BAR DELIMITER..Z NOTATION TYPE COLON - {0x2983, 0x2983, prN}, // Ps LEFT WHITE CURLY BRACKET - {0x2984, 0x2984, prN}, // Pe RIGHT WHITE CURLY BRACKET - {0x2985, 0x2985, prNa}, // Ps LEFT WHITE PARENTHESIS - {0x2986, 0x2986, prNa}, // Pe RIGHT WHITE PARENTHESIS - {0x2987, 0x2987, prN}, // Ps Z NOTATION LEFT IMAGE BRACKET - {0x2988, 0x2988, prN}, // Pe Z NOTATION RIGHT IMAGE BRACKET - {0x2989, 0x2989, prN}, // Ps Z NOTATION LEFT BINDING BRACKET - {0x298A, 0x298A, prN}, // Pe Z NOTATION RIGHT BINDING BRACKET - {0x298B, 0x298B, prN}, // Ps LEFT SQUARE BRACKET WITH UNDERBAR - {0x298C, 0x298C, prN}, // Pe RIGHT SQUARE BRACKET WITH UNDERBAR - {0x298D, 0x298D, prN}, // Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER - {0x298E, 0x298E, prN}, // Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER - {0x298F, 0x298F, prN}, // Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER - {0x2990, 0x2990, prN}, // Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER - {0x2991, 0x2991, prN}, // Ps LEFT ANGLE BRACKET WITH DOT - {0x2992, 0x2992, prN}, // Pe RIGHT ANGLE BRACKET WITH DOT - {0x2993, 0x2993, prN}, // Ps LEFT ARC LESS-THAN BRACKET - {0x2994, 0x2994, prN}, // Pe RIGHT ARC GREATER-THAN BRACKET - {0x2995, 0x2995, prN}, // Ps DOUBLE LEFT ARC GREATER-THAN BRACKET - {0x2996, 0x2996, prN}, // Pe DOUBLE RIGHT ARC LESS-THAN BRACKET - {0x2997, 0x2997, prN}, // Ps LEFT BLACK TORTOISE SHELL BRACKET - {0x2998, 0x2998, prN}, // Pe RIGHT BLACK TORTOISE SHELL BRACKET - {0x2999, 0x29D7, prN}, // Sm [63] DOTTED FENCE..BLACK HOURGLASS - {0x29D8, 0x29D8, prN}, // Ps LEFT WIGGLY FENCE - {0x29D9, 0x29D9, prN}, // Pe RIGHT WIGGLY FENCE - {0x29DA, 0x29DA, prN}, // Ps LEFT DOUBLE WIGGLY FENCE - {0x29DB, 0x29DB, prN}, // Pe RIGHT DOUBLE WIGGLY FENCE - {0x29DC, 0x29FB, prN}, // Sm [32] INCOMPLETE INFINITY..TRIPLE PLUS - {0x29FC, 0x29FC, prN}, // Ps LEFT-POINTING CURVED ANGLE BRACKET - {0x29FD, 0x29FD, prN}, // Pe RIGHT-POINTING CURVED ANGLE BRACKET - {0x29FE, 0x29FF, prN}, // Sm [2] TINY..MINY - {0x2A00, 0x2AFF, prN}, // Sm [256] N-ARY CIRCLED DOT OPERATOR..N-ARY WHITE VERTICAL BAR - {0x2B00, 0x2B1A, prN}, // So [27] NORTH EAST WHITE ARROW..DOTTED SQUARE - {0x2B1B, 0x2B1C, prW}, // So [2] BLACK LARGE SQUARE..WHITE LARGE SQUARE - {0x2B1D, 0x2B2F, prN}, // So [19] BLACK VERY SMALL SQUARE..WHITE VERTICAL ELLIPSE - {0x2B30, 0x2B44, prN}, // Sm [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET - {0x2B45, 0x2B46, prN}, // So [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW - {0x2B47, 0x2B4C, prN}, // Sm [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR - {0x2B4D, 0x2B4F, prN}, // So [3] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..SHORT BACKSLANTED SOUTH ARROW - {0x2B50, 0x2B50, prW}, // So WHITE MEDIUM STAR - {0x2B51, 0x2B54, prN}, // So [4] BLACK SMALL STAR..WHITE RIGHT-POINTING PENTAGON - {0x2B55, 0x2B55, prW}, // So HEAVY LARGE CIRCLE - {0x2B56, 0x2B59, prA}, // So [4] HEAVY OVAL WITH OVAL INSIDE..HEAVY CIRCLED SALTIRE - {0x2B5A, 0x2B73, prN}, // So [26] SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR - {0x2B76, 0x2B95, prN}, // So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW - {0x2B97, 0x2BFF, prN}, // So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL - {0x2C00, 0x2C5F, prN}, // L& [96] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI - {0x2C60, 0x2C7B, prN}, // L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E - {0x2C7C, 0x2C7D, prN}, // Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V - {0x2C7E, 0x2C7F, prN}, // Lu [2] LATIN CAPITAL LETTER S WITH SWASH TAIL..LATIN CAPITAL LETTER Z WITH SWASH TAIL - {0x2C80, 0x2CE4, prN}, // L& [101] COPTIC CAPITAL LETTER ALFA..COPTIC SYMBOL KAI - {0x2CE5, 0x2CEA, prN}, // So [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA - {0x2CEB, 0x2CEE, prN}, // L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA - {0x2CEF, 0x2CF1, prN}, // Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS - {0x2CF2, 0x2CF3, prN}, // L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI - {0x2CF9, 0x2CFC, prN}, // Po [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER - {0x2CFD, 0x2CFD, prN}, // No COPTIC FRACTION ONE HALF - {0x2CFE, 0x2CFF, prN}, // Po [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER - {0x2D00, 0x2D25, prN}, // Ll [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE - {0x2D27, 0x2D27, prN}, // Ll GEORGIAN SMALL LETTER YN - {0x2D2D, 0x2D2D, prN}, // Ll GEORGIAN SMALL LETTER AEN - {0x2D30, 0x2D67, prN}, // Lo [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO - {0x2D6F, 0x2D6F, prN}, // Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK - {0x2D70, 0x2D70, prN}, // Po TIFINAGH SEPARATOR MARK - {0x2D7F, 0x2D7F, prN}, // Mn TIFINAGH CONSONANT JOINER - {0x2D80, 0x2D96, prN}, // Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE - {0x2DA0, 0x2DA6, prN}, // Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO - {0x2DA8, 0x2DAE, prN}, // Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO - {0x2DB0, 0x2DB6, prN}, // Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO - {0x2DB8, 0x2DBE, prN}, // Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO - {0x2DC0, 0x2DC6, prN}, // Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO - {0x2DC8, 0x2DCE, prN}, // Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO - {0x2DD0, 0x2DD6, prN}, // Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO - {0x2DD8, 0x2DDE, prN}, // Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO - {0x2DE0, 0x2DFF, prN}, // Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS - {0x2E00, 0x2E01, prN}, // Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER - {0x2E02, 0x2E02, prN}, // Pi LEFT SUBSTITUTION BRACKET - {0x2E03, 0x2E03, prN}, // Pf RIGHT SUBSTITUTION BRACKET - {0x2E04, 0x2E04, prN}, // Pi LEFT DOTTED SUBSTITUTION BRACKET - {0x2E05, 0x2E05, prN}, // Pf RIGHT DOTTED SUBSTITUTION BRACKET - {0x2E06, 0x2E08, prN}, // Po [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER - {0x2E09, 0x2E09, prN}, // Pi LEFT TRANSPOSITION BRACKET - {0x2E0A, 0x2E0A, prN}, // Pf RIGHT TRANSPOSITION BRACKET - {0x2E0B, 0x2E0B, prN}, // Po RAISED SQUARE - {0x2E0C, 0x2E0C, prN}, // Pi LEFT RAISED OMISSION BRACKET - {0x2E0D, 0x2E0D, prN}, // Pf RIGHT RAISED OMISSION BRACKET - {0x2E0E, 0x2E16, prN}, // Po [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE - {0x2E17, 0x2E17, prN}, // Pd DOUBLE OBLIQUE HYPHEN - {0x2E18, 0x2E19, prN}, // Po [2] INVERTED INTERROBANG..PALM BRANCH - {0x2E1A, 0x2E1A, prN}, // Pd HYPHEN WITH DIAERESIS - {0x2E1B, 0x2E1B, prN}, // Po TILDE WITH RING ABOVE - {0x2E1C, 0x2E1C, prN}, // Pi LEFT LOW PARAPHRASE BRACKET - {0x2E1D, 0x2E1D, prN}, // Pf RIGHT LOW PARAPHRASE BRACKET - {0x2E1E, 0x2E1F, prN}, // Po [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW - {0x2E20, 0x2E20, prN}, // Pi LEFT VERTICAL BAR WITH QUILL - {0x2E21, 0x2E21, prN}, // Pf RIGHT VERTICAL BAR WITH QUILL - {0x2E22, 0x2E22, prN}, // Ps TOP LEFT HALF BRACKET - {0x2E23, 0x2E23, prN}, // Pe TOP RIGHT HALF BRACKET - {0x2E24, 0x2E24, prN}, // Ps BOTTOM LEFT HALF BRACKET - {0x2E25, 0x2E25, prN}, // Pe BOTTOM RIGHT HALF BRACKET - {0x2E26, 0x2E26, prN}, // Ps LEFT SIDEWAYS U BRACKET - {0x2E27, 0x2E27, prN}, // Pe RIGHT SIDEWAYS U BRACKET - {0x2E28, 0x2E28, prN}, // Ps LEFT DOUBLE PARENTHESIS - {0x2E29, 0x2E29, prN}, // Pe RIGHT DOUBLE PARENTHESIS - {0x2E2A, 0x2E2E, prN}, // Po [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK - {0x2E2F, 0x2E2F, prN}, // Lm VERTICAL TILDE - {0x2E30, 0x2E39, prN}, // Po [10] RING POINT..TOP HALF SECTION SIGN - {0x2E3A, 0x2E3B, prN}, // Pd [2] TWO-EM DASH..THREE-EM DASH - {0x2E3C, 0x2E3F, prN}, // Po [4] STENOGRAPHIC FULL STOP..CAPITULUM - {0x2E40, 0x2E40, prN}, // Pd DOUBLE HYPHEN - {0x2E41, 0x2E41, prN}, // Po REVERSED COMMA - {0x2E42, 0x2E42, prN}, // Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK - {0x2E43, 0x2E4F, prN}, // Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER - {0x2E50, 0x2E51, prN}, // So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR - {0x2E52, 0x2E54, prN}, // Po [3] TIRONIAN SIGN CAPITAL ET..MEDIEVAL QUESTION MARK - {0x2E55, 0x2E55, prN}, // Ps LEFT SQUARE BRACKET WITH STROKE - {0x2E56, 0x2E56, prN}, // Pe RIGHT SQUARE BRACKET WITH STROKE - {0x2E57, 0x2E57, prN}, // Ps LEFT SQUARE BRACKET WITH DOUBLE STROKE - {0x2E58, 0x2E58, prN}, // Pe RIGHT SQUARE BRACKET WITH DOUBLE STROKE - {0x2E59, 0x2E59, prN}, // Ps TOP HALF LEFT PARENTHESIS - {0x2E5A, 0x2E5A, prN}, // Pe TOP HALF RIGHT PARENTHESIS - {0x2E5B, 0x2E5B, prN}, // Ps BOTTOM HALF LEFT PARENTHESIS - {0x2E5C, 0x2E5C, prN}, // Pe BOTTOM HALF RIGHT PARENTHESIS - {0x2E5D, 0x2E5D, prN}, // Pd OBLIQUE HYPHEN - {0x2E80, 0x2E99, prW}, // So [26] CJK RADICAL REPEAT..CJK RADICAL RAP - {0x2E9B, 0x2EF3, prW}, // So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE - {0x2F00, 0x2FD5, prW}, // So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE - {0x2FF0, 0x2FFB, prW}, // So [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID - {0x3000, 0x3000, prF}, // Zs IDEOGRAPHIC SPACE - {0x3001, 0x3003, prW}, // Po [3] IDEOGRAPHIC COMMA..DITTO MARK - {0x3004, 0x3004, prW}, // So JAPANESE INDUSTRIAL STANDARD SYMBOL - {0x3005, 0x3005, prW}, // Lm IDEOGRAPHIC ITERATION MARK - {0x3006, 0x3006, prW}, // Lo IDEOGRAPHIC CLOSING MARK - {0x3007, 0x3007, prW}, // Nl IDEOGRAPHIC NUMBER ZERO - {0x3008, 0x3008, prW}, // Ps LEFT ANGLE BRACKET - {0x3009, 0x3009, prW}, // Pe RIGHT ANGLE BRACKET - {0x300A, 0x300A, prW}, // Ps LEFT DOUBLE ANGLE BRACKET - {0x300B, 0x300B, prW}, // Pe RIGHT DOUBLE ANGLE BRACKET - {0x300C, 0x300C, prW}, // Ps LEFT CORNER BRACKET - {0x300D, 0x300D, prW}, // Pe RIGHT CORNER BRACKET - {0x300E, 0x300E, prW}, // Ps LEFT WHITE CORNER BRACKET - {0x300F, 0x300F, prW}, // Pe RIGHT WHITE CORNER BRACKET - {0x3010, 0x3010, prW}, // Ps LEFT BLACK LENTICULAR BRACKET - {0x3011, 0x3011, prW}, // Pe RIGHT BLACK LENTICULAR BRACKET - {0x3012, 0x3013, prW}, // So [2] POSTAL MARK..GETA MARK - {0x3014, 0x3014, prW}, // Ps LEFT TORTOISE SHELL BRACKET - {0x3015, 0x3015, prW}, // Pe RIGHT TORTOISE SHELL BRACKET - {0x3016, 0x3016, prW}, // Ps LEFT WHITE LENTICULAR BRACKET - {0x3017, 0x3017, prW}, // Pe RIGHT WHITE LENTICULAR BRACKET - {0x3018, 0x3018, prW}, // Ps LEFT WHITE TORTOISE SHELL BRACKET - {0x3019, 0x3019, prW}, // Pe RIGHT WHITE TORTOISE SHELL BRACKET - {0x301A, 0x301A, prW}, // Ps LEFT WHITE SQUARE BRACKET - {0x301B, 0x301B, prW}, // Pe RIGHT WHITE SQUARE BRACKET - {0x301C, 0x301C, prW}, // Pd WAVE DASH - {0x301D, 0x301D, prW}, // Ps REVERSED DOUBLE PRIME QUOTATION MARK - {0x301E, 0x301F, prW}, // Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK - {0x3020, 0x3020, prW}, // So POSTAL MARK FACE - {0x3021, 0x3029, prW}, // Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE - {0x302A, 0x302D, prW}, // Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK - {0x302E, 0x302F, prW}, // Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK - {0x3030, 0x3030, prW}, // Pd WAVY DASH - {0x3031, 0x3035, prW}, // Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF - {0x3036, 0x3037, prW}, // So [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL - {0x3038, 0x303A, prW}, // Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY - {0x303B, 0x303B, prW}, // Lm VERTICAL IDEOGRAPHIC ITERATION MARK - {0x303C, 0x303C, prW}, // Lo MASU MARK - {0x303D, 0x303D, prW}, // Po PART ALTERNATION MARK - {0x303E, 0x303E, prW}, // So IDEOGRAPHIC VARIATION INDICATOR - {0x303F, 0x303F, prN}, // So IDEOGRAPHIC HALF FILL SPACE - {0x3041, 0x3096, prW}, // Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE - {0x3099, 0x309A, prW}, // Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK - {0x309B, 0x309C, prW}, // Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK - {0x309D, 0x309E, prW}, // Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK - {0x309F, 0x309F, prW}, // Lo HIRAGANA DIGRAPH YORI - {0x30A0, 0x30A0, prW}, // Pd KATAKANA-HIRAGANA DOUBLE HYPHEN - {0x30A1, 0x30FA, prW}, // Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO - {0x30FB, 0x30FB, prW}, // Po KATAKANA MIDDLE DOT - {0x30FC, 0x30FE, prW}, // Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK - {0x30FF, 0x30FF, prW}, // Lo KATAKANA DIGRAPH KOTO - {0x3105, 0x312F, prW}, // Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN - {0x3131, 0x318E, prW}, // Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE - {0x3190, 0x3191, prW}, // So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK - {0x3192, 0x3195, prW}, // No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK - {0x3196, 0x319F, prW}, // So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK - {0x31A0, 0x31BF, prW}, // Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH - {0x31C0, 0x31E3, prW}, // So [36] CJK STROKE T..CJK STROKE Q - {0x31F0, 0x31FF, prW}, // Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO - {0x3200, 0x321E, prW}, // So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU - {0x3220, 0x3229, prW}, // No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN - {0x322A, 0x3247, prW}, // So [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO - {0x3248, 0x324F, prA}, // No [8] CIRCLED NUMBER TEN ON BLACK SQUARE..CIRCLED NUMBER EIGHTY ON BLACK SQUARE - {0x3250, 0x3250, prW}, // So PARTNERSHIP SIGN - {0x3251, 0x325F, prW}, // No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE - {0x3260, 0x327F, prW}, // So [32] CIRCLED HANGUL KIYEOK..KOREAN STANDARD SYMBOL - {0x3280, 0x3289, prW}, // No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN - {0x328A, 0x32B0, prW}, // So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT - {0x32B1, 0x32BF, prW}, // No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY - {0x32C0, 0x32FF, prW}, // So [64] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE ERA NAME REIWA - {0x3300, 0x33FF, prW}, // So [256] SQUARE APAATO..SQUARE GAL - {0x3400, 0x4DBF, prW}, // Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF - {0x4DC0, 0x4DFF, prN}, // So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION - {0x4E00, 0x9FFF, prW}, // Lo [20992] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFF - {0xA000, 0xA014, prW}, // Lo [21] YI SYLLABLE IT..YI SYLLABLE E - {0xA015, 0xA015, prW}, // Lm YI SYLLABLE WU - {0xA016, 0xA48C, prW}, // Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR - {0xA490, 0xA4C6, prW}, // So [55] YI RADICAL QOT..YI RADICAL KE - {0xA4D0, 0xA4F7, prN}, // Lo [40] LISU LETTER BA..LISU LETTER OE - {0xA4F8, 0xA4FD, prN}, // Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU - {0xA4FE, 0xA4FF, prN}, // Po [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP - {0xA500, 0xA60B, prN}, // Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG - {0xA60C, 0xA60C, prN}, // Lm VAI SYLLABLE LENGTHENER - {0xA60D, 0xA60F, prN}, // Po [3] VAI COMMA..VAI QUESTION MARK - {0xA610, 0xA61F, prN}, // Lo [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG - {0xA620, 0xA629, prN}, // Nd [10] VAI DIGIT ZERO..VAI DIGIT NINE - {0xA62A, 0xA62B, prN}, // Lo [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO - {0xA640, 0xA66D, prN}, // L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O - {0xA66E, 0xA66E, prN}, // Lo CYRILLIC LETTER MULTIOCULAR O - {0xA66F, 0xA66F, prN}, // Mn COMBINING CYRILLIC VZMET - {0xA670, 0xA672, prN}, // Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN - {0xA673, 0xA673, prN}, // Po SLAVONIC ASTERISK - {0xA674, 0xA67D, prN}, // Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK - {0xA67E, 0xA67E, prN}, // Po CYRILLIC KAVYKA - {0xA67F, 0xA67F, prN}, // Lm CYRILLIC PAYEROK - {0xA680, 0xA69B, prN}, // L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O - {0xA69C, 0xA69D, prN}, // Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN - {0xA69E, 0xA69F, prN}, // Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E - {0xA6A0, 0xA6E5, prN}, // Lo [70] BAMUM LETTER A..BAMUM LETTER KI - {0xA6E6, 0xA6EF, prN}, // Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM - {0xA6F0, 0xA6F1, prN}, // Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS - {0xA6F2, 0xA6F7, prN}, // Po [6] BAMUM NJAEMLI..BAMUM QUESTION MARK - {0xA700, 0xA716, prN}, // Sk [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR - {0xA717, 0xA71F, prN}, // Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK - {0xA720, 0xA721, prN}, // Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE - {0xA722, 0xA76F, prN}, // L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON - {0xA770, 0xA770, prN}, // Lm MODIFIER LETTER US - {0xA771, 0xA787, prN}, // L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T - {0xA788, 0xA788, prN}, // Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT - {0xA789, 0xA78A, prN}, // Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN - {0xA78B, 0xA78E, prN}, // L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT - {0xA78F, 0xA78F, prN}, // Lo LATIN LETTER SINOLOGICAL DOT - {0xA790, 0xA7CA, prN}, // L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY - {0xA7D0, 0xA7D1, prN}, // L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G - {0xA7D3, 0xA7D3, prN}, // Ll LATIN SMALL LETTER DOUBLE THORN - {0xA7D5, 0xA7D9, prN}, // L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S - {0xA7F2, 0xA7F4, prN}, // Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q - {0xA7F5, 0xA7F6, prN}, // L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H - {0xA7F7, 0xA7F7, prN}, // Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I - {0xA7F8, 0xA7F9, prN}, // Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE - {0xA7FA, 0xA7FA, prN}, // Ll LATIN LETTER SMALL CAPITAL TURNED M - {0xA7FB, 0xA7FF, prN}, // Lo [5] LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGRAPHIC LETTER ARCHAIC M - {0xA800, 0xA801, prN}, // Lo [2] SYLOTI NAGRI LETTER A..SYLOTI NAGRI LETTER I - {0xA802, 0xA802, prN}, // Mn SYLOTI NAGRI SIGN DVISVARA - {0xA803, 0xA805, prN}, // Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O - {0xA806, 0xA806, prN}, // Mn SYLOTI NAGRI SIGN HASANTA - {0xA807, 0xA80A, prN}, // Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO - {0xA80B, 0xA80B, prN}, // Mn SYLOTI NAGRI SIGN ANUSVARA - {0xA80C, 0xA822, prN}, // Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO - {0xA823, 0xA824, prN}, // Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I - {0xA825, 0xA826, prN}, // Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E - {0xA827, 0xA827, prN}, // Mc SYLOTI NAGRI VOWEL SIGN OO - {0xA828, 0xA82B, prN}, // So [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4 - {0xA82C, 0xA82C, prN}, // Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA - {0xA830, 0xA835, prN}, // No [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS - {0xA836, 0xA837, prN}, // So [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK - {0xA838, 0xA838, prN}, // Sc NORTH INDIC RUPEE MARK - {0xA839, 0xA839, prN}, // So NORTH INDIC QUANTITY MARK - {0xA840, 0xA873, prN}, // Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU - {0xA874, 0xA877, prN}, // Po [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD - {0xA880, 0xA881, prN}, // Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA - {0xA882, 0xA8B3, prN}, // Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA - {0xA8B4, 0xA8C3, prN}, // Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU - {0xA8C4, 0xA8C5, prN}, // Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU - {0xA8CE, 0xA8CF, prN}, // Po [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA - {0xA8D0, 0xA8D9, prN}, // Nd [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE - {0xA8E0, 0xA8F1, prN}, // Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA - {0xA8F2, 0xA8F7, prN}, // Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA - {0xA8F8, 0xA8FA, prN}, // Po [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET - {0xA8FB, 0xA8FB, prN}, // Lo DEVANAGARI HEADSTROKE - {0xA8FC, 0xA8FC, prN}, // Po DEVANAGARI SIGN SIDDHAM - {0xA8FD, 0xA8FE, prN}, // Lo [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY - {0xA8FF, 0xA8FF, prN}, // Mn DEVANAGARI VOWEL SIGN AY - {0xA900, 0xA909, prN}, // Nd [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE - {0xA90A, 0xA925, prN}, // Lo [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO - {0xA926, 0xA92D, prN}, // Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU - {0xA92E, 0xA92F, prN}, // Po [2] KAYAH LI SIGN CWI..KAYAH LI SIGN SHYA - {0xA930, 0xA946, prN}, // Lo [23] REJANG LETTER KA..REJANG LETTER A - {0xA947, 0xA951, prN}, // Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R - {0xA952, 0xA953, prN}, // Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA - {0xA95F, 0xA95F, prN}, // Po REJANG SECTION MARK - {0xA960, 0xA97C, prW}, // Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH - {0xA980, 0xA982, prN}, // Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR - {0xA983, 0xA983, prN}, // Mc JAVANESE SIGN WIGNYAN - {0xA984, 0xA9B2, prN}, // Lo [47] JAVANESE LETTER A..JAVANESE LETTER HA - {0xA9B3, 0xA9B3, prN}, // Mn JAVANESE SIGN CECAK TELU - {0xA9B4, 0xA9B5, prN}, // Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG - {0xA9B6, 0xA9B9, prN}, // Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT - {0xA9BA, 0xA9BB, prN}, // Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE - {0xA9BC, 0xA9BD, prN}, // Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET - {0xA9BE, 0xA9C0, prN}, // Mc [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON - {0xA9C1, 0xA9CD, prN}, // Po [13] JAVANESE LEFT RERENGGAN..JAVANESE TURNED PADA PISELEH - {0xA9CF, 0xA9CF, prN}, // Lm JAVANESE PANGRANGKEP - {0xA9D0, 0xA9D9, prN}, // Nd [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE - {0xA9DE, 0xA9DF, prN}, // Po [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN - {0xA9E0, 0xA9E4, prN}, // Lo [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA - {0xA9E5, 0xA9E5, prN}, // Mn MYANMAR SIGN SHAN SAW - {0xA9E6, 0xA9E6, prN}, // Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION - {0xA9E7, 0xA9EF, prN}, // Lo [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA - {0xA9F0, 0xA9F9, prN}, // Nd [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE - {0xA9FA, 0xA9FE, prN}, // Lo [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA - {0xAA00, 0xAA28, prN}, // Lo [41] CHAM LETTER A..CHAM LETTER HA - {0xAA29, 0xAA2E, prN}, // Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE - {0xAA2F, 0xAA30, prN}, // Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI - {0xAA31, 0xAA32, prN}, // Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE - {0xAA33, 0xAA34, prN}, // Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA - {0xAA35, 0xAA36, prN}, // Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA - {0xAA40, 0xAA42, prN}, // Lo [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG - {0xAA43, 0xAA43, prN}, // Mn CHAM CONSONANT SIGN FINAL NG - {0xAA44, 0xAA4B, prN}, // Lo [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS - {0xAA4C, 0xAA4C, prN}, // Mn CHAM CONSONANT SIGN FINAL M - {0xAA4D, 0xAA4D, prN}, // Mc CHAM CONSONANT SIGN FINAL H - {0xAA50, 0xAA59, prN}, // Nd [10] CHAM DIGIT ZERO..CHAM DIGIT NINE - {0xAA5C, 0xAA5F, prN}, // Po [4] CHAM PUNCTUATION SPIRAL..CHAM PUNCTUATION TRIPLE DANDA - {0xAA60, 0xAA6F, prN}, // Lo [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA - {0xAA70, 0xAA70, prN}, // Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION - {0xAA71, 0xAA76, prN}, // Lo [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM - {0xAA77, 0xAA79, prN}, // So [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO - {0xAA7A, 0xAA7A, prN}, // Lo MYANMAR LETTER AITON RA - {0xAA7B, 0xAA7B, prN}, // Mc MYANMAR SIGN PAO KAREN TONE - {0xAA7C, 0xAA7C, prN}, // Mn MYANMAR SIGN TAI LAING TONE-2 - {0xAA7D, 0xAA7D, prN}, // Mc MYANMAR SIGN TAI LAING TONE-5 - {0xAA7E, 0xAA7F, prN}, // Lo [2] MYANMAR LETTER SHWE PALAUNG CHA..MYANMAR LETTER SHWE PALAUNG SHA - {0xAA80, 0xAAAF, prN}, // Lo [48] TAI VIET LETTER LOW KO..TAI VIET LETTER HIGH O - {0xAAB0, 0xAAB0, prN}, // Mn TAI VIET MAI KANG - {0xAAB1, 0xAAB1, prN}, // Lo TAI VIET VOWEL AA - {0xAAB2, 0xAAB4, prN}, // Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U - {0xAAB5, 0xAAB6, prN}, // Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O - {0xAAB7, 0xAAB8, prN}, // Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA - {0xAAB9, 0xAABD, prN}, // Lo [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN - {0xAABE, 0xAABF, prN}, // Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK - {0xAAC0, 0xAAC0, prN}, // Lo TAI VIET TONE MAI NUENG - {0xAAC1, 0xAAC1, prN}, // Mn TAI VIET TONE MAI THO - {0xAAC2, 0xAAC2, prN}, // Lo TAI VIET TONE MAI SONG - {0xAADB, 0xAADC, prN}, // Lo [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG - {0xAADD, 0xAADD, prN}, // Lm TAI VIET SYMBOL SAM - {0xAADE, 0xAADF, prN}, // Po [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI - {0xAAE0, 0xAAEA, prN}, // Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA - {0xAAEB, 0xAAEB, prN}, // Mc MEETEI MAYEK VOWEL SIGN II - {0xAAEC, 0xAAED, prN}, // Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI - {0xAAEE, 0xAAEF, prN}, // Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU - {0xAAF0, 0xAAF1, prN}, // Po [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM - {0xAAF2, 0xAAF2, prN}, // Lo MEETEI MAYEK ANJI - {0xAAF3, 0xAAF4, prN}, // Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK - {0xAAF5, 0xAAF5, prN}, // Mc MEETEI MAYEK VOWEL SIGN VISARGA - {0xAAF6, 0xAAF6, prN}, // Mn MEETEI MAYEK VIRAMA - {0xAB01, 0xAB06, prN}, // Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO - {0xAB09, 0xAB0E, prN}, // Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO - {0xAB11, 0xAB16, prN}, // Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO - {0xAB20, 0xAB26, prN}, // Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO - {0xAB28, 0xAB2E, prN}, // Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO - {0xAB30, 0xAB5A, prN}, // Ll [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG - {0xAB5B, 0xAB5B, prN}, // Sk MODIFIER BREVE WITH INVERTED BREVE - {0xAB5C, 0xAB5F, prN}, // Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK - {0xAB60, 0xAB68, prN}, // Ll [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE - {0xAB69, 0xAB69, prN}, // Lm MODIFIER LETTER SMALL TURNED W - {0xAB6A, 0xAB6B, prN}, // Sk [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK - {0xAB70, 0xABBF, prN}, // Ll [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA - {0xABC0, 0xABE2, prN}, // Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM - {0xABE3, 0xABE4, prN}, // Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP - {0xABE5, 0xABE5, prN}, // Mn MEETEI MAYEK VOWEL SIGN ANAP - {0xABE6, 0xABE7, prN}, // Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP - {0xABE8, 0xABE8, prN}, // Mn MEETEI MAYEK VOWEL SIGN UNAP - {0xABE9, 0xABEA, prN}, // Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG - {0xABEB, 0xABEB, prN}, // Po MEETEI MAYEK CHEIKHEI - {0xABEC, 0xABEC, prN}, // Mc MEETEI MAYEK LUM IYEK - {0xABED, 0xABED, prN}, // Mn MEETEI MAYEK APUN IYEK - {0xABF0, 0xABF9, prN}, // Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE - {0xAC00, 0xD7A3, prW}, // Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH - {0xD7B0, 0xD7C6, prN}, // Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E - {0xD7CB, 0xD7FB, prN}, // Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH - {0xD800, 0xDB7F, prN}, // Cs [896] .. - {0xDB80, 0xDBFF, prN}, // Cs [128] .. - {0xDC00, 0xDFFF, prN}, // Cs [1024] .. - {0xE000, 0xF8FF, prA}, // Co [6400] .. - {0xF900, 0xFA6D, prW}, // Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D - {0xFA6E, 0xFA6F, prW}, // Cn [2] .. - {0xFA70, 0xFAD9, prW}, // Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 - {0xFADA, 0xFAFF, prW}, // Cn [38] .. - {0xFB00, 0xFB06, prN}, // Ll [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST - {0xFB13, 0xFB17, prN}, // Ll [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH - {0xFB1D, 0xFB1D, prN}, // Lo HEBREW LETTER YOD WITH HIRIQ - {0xFB1E, 0xFB1E, prN}, // Mn HEBREW POINT JUDEO-SPANISH VARIKA - {0xFB1F, 0xFB28, prN}, // Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV - {0xFB29, 0xFB29, prN}, // Sm HEBREW LETTER ALTERNATIVE PLUS SIGN - {0xFB2A, 0xFB36, prN}, // Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH - {0xFB38, 0xFB3C, prN}, // Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH - {0xFB3E, 0xFB3E, prN}, // Lo HEBREW LETTER MEM WITH DAGESH - {0xFB40, 0xFB41, prN}, // Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH - {0xFB43, 0xFB44, prN}, // Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH - {0xFB46, 0xFB4F, prN}, // Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED - {0xFB50, 0xFBB1, prN}, // Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM - {0xFBB2, 0xFBC2, prN}, // Sk [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE - {0xFBD3, 0xFD3D, prN}, // Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM - {0xFD3E, 0xFD3E, prN}, // Pe ORNATE LEFT PARENTHESIS - {0xFD3F, 0xFD3F, prN}, // Ps ORNATE RIGHT PARENTHESIS - {0xFD40, 0xFD4F, prN}, // So [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH - {0xFD50, 0xFD8F, prN}, // Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM - {0xFD92, 0xFDC7, prN}, // Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM - {0xFDCF, 0xFDCF, prN}, // So ARABIC LIGATURE SALAAMUHU ALAYNAA - {0xFDF0, 0xFDFB, prN}, // Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU - {0xFDFC, 0xFDFC, prN}, // Sc RIAL SIGN - {0xFDFD, 0xFDFF, prN}, // So [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL - {0xFE00, 0xFE0F, prA}, // Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 - {0xFE10, 0xFE16, prW}, // Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK - {0xFE17, 0xFE17, prW}, // Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET - {0xFE18, 0xFE18, prW}, // Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET - {0xFE19, 0xFE19, prW}, // Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS - {0xFE20, 0xFE2F, prN}, // Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF - {0xFE30, 0xFE30, prW}, // Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER - {0xFE31, 0xFE32, prW}, // Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH - {0xFE33, 0xFE34, prW}, // Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE - {0xFE35, 0xFE35, prW}, // Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS - {0xFE36, 0xFE36, prW}, // Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS - {0xFE37, 0xFE37, prW}, // Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET - {0xFE38, 0xFE38, prW}, // Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET - {0xFE39, 0xFE39, prW}, // Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET - {0xFE3A, 0xFE3A, prW}, // Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET - {0xFE3B, 0xFE3B, prW}, // Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET - {0xFE3C, 0xFE3C, prW}, // Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET - {0xFE3D, 0xFE3D, prW}, // Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET - {0xFE3E, 0xFE3E, prW}, // Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET - {0xFE3F, 0xFE3F, prW}, // Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET - {0xFE40, 0xFE40, prW}, // Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET - {0xFE41, 0xFE41, prW}, // Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET - {0xFE42, 0xFE42, prW}, // Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET - {0xFE43, 0xFE43, prW}, // Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET - {0xFE44, 0xFE44, prW}, // Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET - {0xFE45, 0xFE46, prW}, // Po [2] SESAME DOT..WHITE SESAME DOT - {0xFE47, 0xFE47, prW}, // Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET - {0xFE48, 0xFE48, prW}, // Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET - {0xFE49, 0xFE4C, prW}, // Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE - {0xFE4D, 0xFE4F, prW}, // Pc [3] DASHED LOW LINE..WAVY LOW LINE - {0xFE50, 0xFE52, prW}, // Po [3] SMALL COMMA..SMALL FULL STOP - {0xFE54, 0xFE57, prW}, // Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK - {0xFE58, 0xFE58, prW}, // Pd SMALL EM DASH - {0xFE59, 0xFE59, prW}, // Ps SMALL LEFT PARENTHESIS - {0xFE5A, 0xFE5A, prW}, // Pe SMALL RIGHT PARENTHESIS - {0xFE5B, 0xFE5B, prW}, // Ps SMALL LEFT CURLY BRACKET - {0xFE5C, 0xFE5C, prW}, // Pe SMALL RIGHT CURLY BRACKET - {0xFE5D, 0xFE5D, prW}, // Ps SMALL LEFT TORTOISE SHELL BRACKET - {0xFE5E, 0xFE5E, prW}, // Pe SMALL RIGHT TORTOISE SHELL BRACKET - {0xFE5F, 0xFE61, prW}, // Po [3] SMALL NUMBER SIGN..SMALL ASTERISK - {0xFE62, 0xFE62, prW}, // Sm SMALL PLUS SIGN - {0xFE63, 0xFE63, prW}, // Pd SMALL HYPHEN-MINUS - {0xFE64, 0xFE66, prW}, // Sm [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN - {0xFE68, 0xFE68, prW}, // Po SMALL REVERSE SOLIDUS - {0xFE69, 0xFE69, prW}, // Sc SMALL DOLLAR SIGN - {0xFE6A, 0xFE6B, prW}, // Po [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT - {0xFE70, 0xFE74, prN}, // Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM - {0xFE76, 0xFEFC, prN}, // Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM - {0xFEFF, 0xFEFF, prN}, // Cf ZERO WIDTH NO-BREAK SPACE - {0xFF01, 0xFF03, prF}, // Po [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN - {0xFF04, 0xFF04, prF}, // Sc FULLWIDTH DOLLAR SIGN - {0xFF05, 0xFF07, prF}, // Po [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE - {0xFF08, 0xFF08, prF}, // Ps FULLWIDTH LEFT PARENTHESIS - {0xFF09, 0xFF09, prF}, // Pe FULLWIDTH RIGHT PARENTHESIS - {0xFF0A, 0xFF0A, prF}, // Po FULLWIDTH ASTERISK - {0xFF0B, 0xFF0B, prF}, // Sm FULLWIDTH PLUS SIGN - {0xFF0C, 0xFF0C, prF}, // Po FULLWIDTH COMMA - {0xFF0D, 0xFF0D, prF}, // Pd FULLWIDTH HYPHEN-MINUS - {0xFF0E, 0xFF0F, prF}, // Po [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS - {0xFF10, 0xFF19, prF}, // Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE - {0xFF1A, 0xFF1B, prF}, // Po [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON - {0xFF1C, 0xFF1E, prF}, // Sm [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN - {0xFF1F, 0xFF20, prF}, // Po [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT - {0xFF21, 0xFF3A, prF}, // Lu [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z - {0xFF3B, 0xFF3B, prF}, // Ps FULLWIDTH LEFT SQUARE BRACKET - {0xFF3C, 0xFF3C, prF}, // Po FULLWIDTH REVERSE SOLIDUS - {0xFF3D, 0xFF3D, prF}, // Pe FULLWIDTH RIGHT SQUARE BRACKET - {0xFF3E, 0xFF3E, prF}, // Sk FULLWIDTH CIRCUMFLEX ACCENT - {0xFF3F, 0xFF3F, prF}, // Pc FULLWIDTH LOW LINE - {0xFF40, 0xFF40, prF}, // Sk FULLWIDTH GRAVE ACCENT - {0xFF41, 0xFF5A, prF}, // Ll [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z - {0xFF5B, 0xFF5B, prF}, // Ps FULLWIDTH LEFT CURLY BRACKET - {0xFF5C, 0xFF5C, prF}, // Sm FULLWIDTH VERTICAL LINE - {0xFF5D, 0xFF5D, prF}, // Pe FULLWIDTH RIGHT CURLY BRACKET - {0xFF5E, 0xFF5E, prF}, // Sm FULLWIDTH TILDE - {0xFF5F, 0xFF5F, prF}, // Ps FULLWIDTH LEFT WHITE PARENTHESIS - {0xFF60, 0xFF60, prF}, // Pe FULLWIDTH RIGHT WHITE PARENTHESIS - {0xFF61, 0xFF61, prH}, // Po HALFWIDTH IDEOGRAPHIC FULL STOP - {0xFF62, 0xFF62, prH}, // Ps HALFWIDTH LEFT CORNER BRACKET - {0xFF63, 0xFF63, prH}, // Pe HALFWIDTH RIGHT CORNER BRACKET - {0xFF64, 0xFF65, prH}, // Po [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT - {0xFF66, 0xFF6F, prH}, // Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU - {0xFF70, 0xFF70, prH}, // Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK - {0xFF71, 0xFF9D, prH}, // Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N - {0xFF9E, 0xFF9F, prH}, // Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK - {0xFFA0, 0xFFBE, prH}, // Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH - {0xFFC2, 0xFFC7, prH}, // Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E - {0xFFCA, 0xFFCF, prH}, // Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE - {0xFFD2, 0xFFD7, prH}, // Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU - {0xFFDA, 0xFFDC, prH}, // Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I - {0xFFE0, 0xFFE1, prF}, // Sc [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN - {0xFFE2, 0xFFE2, prF}, // Sm FULLWIDTH NOT SIGN - {0xFFE3, 0xFFE3, prF}, // Sk FULLWIDTH MACRON - {0xFFE4, 0xFFE4, prF}, // So FULLWIDTH BROKEN BAR - {0xFFE5, 0xFFE6, prF}, // Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN - {0xFFE8, 0xFFE8, prH}, // So HALFWIDTH FORMS LIGHT VERTICAL - {0xFFE9, 0xFFEC, prH}, // Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW - {0xFFED, 0xFFEE, prH}, // So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE - {0xFFF9, 0xFFFB, prN}, // Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR - {0xFFFC, 0xFFFC, prN}, // So OBJECT REPLACEMENT CHARACTER - {0xFFFD, 0xFFFD, prA}, // So REPLACEMENT CHARACTER - {0x10000, 0x1000B, prN}, // Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE - {0x1000D, 0x10026, prN}, // Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO - {0x10028, 0x1003A, prN}, // Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO - {0x1003C, 0x1003D, prN}, // Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE - {0x1003F, 0x1004D, prN}, // Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO - {0x10050, 0x1005D, prN}, // Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089 - {0x10080, 0x100FA, prN}, // Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305 - {0x10100, 0x10102, prN}, // Po [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK - {0x10107, 0x10133, prN}, // No [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND - {0x10137, 0x1013F, prN}, // So [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT - {0x10140, 0x10174, prN}, // Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS - {0x10175, 0x10178, prN}, // No [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN - {0x10179, 0x10189, prN}, // So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN - {0x1018A, 0x1018B, prN}, // No [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN - {0x1018C, 0x1018E, prN}, // So [3] GREEK SINUSOID SIGN..NOMISMA SIGN - {0x10190, 0x1019C, prN}, // So [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL - {0x101A0, 0x101A0, prN}, // So GREEK SYMBOL TAU RHO - {0x101D0, 0x101FC, prN}, // So [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND - {0x101FD, 0x101FD, prN}, // Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE - {0x10280, 0x1029C, prN}, // Lo [29] LYCIAN LETTER A..LYCIAN LETTER X - {0x102A0, 0x102D0, prN}, // Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3 - {0x102E0, 0x102E0, prN}, // Mn COPTIC EPACT THOUSANDS MARK - {0x102E1, 0x102FB, prN}, // No [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED - {0x10300, 0x1031F, prN}, // Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS - {0x10320, 0x10323, prN}, // No [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY - {0x1032D, 0x1032F, prN}, // Lo [3] OLD ITALIC LETTER YE..OLD ITALIC LETTER SOUTHERN TSE - {0x10330, 0x10340, prN}, // Lo [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA - {0x10341, 0x10341, prN}, // Nl GOTHIC LETTER NINETY - {0x10342, 0x10349, prN}, // Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL - {0x1034A, 0x1034A, prN}, // Nl GOTHIC LETTER NINE HUNDRED - {0x10350, 0x10375, prN}, // Lo [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA - {0x10376, 0x1037A, prN}, // Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII - {0x10380, 0x1039D, prN}, // Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU - {0x1039F, 0x1039F, prN}, // Po UGARITIC WORD DIVIDER - {0x103A0, 0x103C3, prN}, // Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA - {0x103C8, 0x103CF, prN}, // Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH - {0x103D0, 0x103D0, prN}, // Po OLD PERSIAN WORD DIVIDER - {0x103D1, 0x103D5, prN}, // Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED - {0x10400, 0x1044F, prN}, // L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW - {0x10450, 0x1047F, prN}, // Lo [48] SHAVIAN LETTER PEEP..SHAVIAN LETTER YEW - {0x10480, 0x1049D, prN}, // Lo [30] OSMANYA LETTER ALEF..OSMANYA LETTER OO - {0x104A0, 0x104A9, prN}, // Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE - {0x104B0, 0x104D3, prN}, // Lu [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA - {0x104D8, 0x104FB, prN}, // Ll [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA - {0x10500, 0x10527, prN}, // Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE - {0x10530, 0x10563, prN}, // Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW - {0x1056F, 0x1056F, prN}, // Po CAUCASIAN ALBANIAN CITATION MARK - {0x10570, 0x1057A, prN}, // Lu [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA - {0x1057C, 0x1058A, prN}, // Lu [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE - {0x1058C, 0x10592, prN}, // Lu [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE - {0x10594, 0x10595, prN}, // Lu [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE - {0x10597, 0x105A1, prN}, // Ll [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA - {0x105A3, 0x105B1, prN}, // Ll [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE - {0x105B3, 0x105B9, prN}, // Ll [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE - {0x105BB, 0x105BC, prN}, // Ll [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE - {0x10600, 0x10736, prN}, // Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 - {0x10740, 0x10755, prN}, // Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE - {0x10760, 0x10767, prN}, // Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 - {0x10780, 0x10785, prN}, // Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK - {0x10787, 0x107B0, prN}, // Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK - {0x107B2, 0x107BA, prN}, // Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL - {0x10800, 0x10805, prN}, // Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA - {0x10808, 0x10808, prN}, // Lo CYPRIOT SYLLABLE JO - {0x1080A, 0x10835, prN}, // Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO - {0x10837, 0x10838, prN}, // Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE - {0x1083C, 0x1083C, prN}, // Lo CYPRIOT SYLLABLE ZA - {0x1083F, 0x1083F, prN}, // Lo CYPRIOT SYLLABLE ZO - {0x10840, 0x10855, prN}, // Lo [22] IMPERIAL ARAMAIC LETTER ALEPH..IMPERIAL ARAMAIC LETTER TAW - {0x10857, 0x10857, prN}, // Po IMPERIAL ARAMAIC SECTION SIGN - {0x10858, 0x1085F, prN}, // No [8] IMPERIAL ARAMAIC NUMBER ONE..IMPERIAL ARAMAIC NUMBER TEN THOUSAND - {0x10860, 0x10876, prN}, // Lo [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW - {0x10877, 0x10878, prN}, // So [2] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE RIGHT-POINTING FLEURON - {0x10879, 0x1087F, prN}, // No [7] PALMYRENE NUMBER ONE..PALMYRENE NUMBER TWENTY - {0x10880, 0x1089E, prN}, // Lo [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW - {0x108A7, 0x108AF, prN}, // No [9] NABATAEAN NUMBER ONE..NABATAEAN NUMBER ONE HUNDRED - {0x108E0, 0x108F2, prN}, // Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH - {0x108F4, 0x108F5, prN}, // Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW - {0x108FB, 0x108FF, prN}, // No [5] HATRAN NUMBER ONE..HATRAN NUMBER ONE HUNDRED - {0x10900, 0x10915, prN}, // Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU - {0x10916, 0x1091B, prN}, // No [6] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER THREE - {0x1091F, 0x1091F, prN}, // Po PHOENICIAN WORD SEPARATOR - {0x10920, 0x10939, prN}, // Lo [26] LYDIAN LETTER A..LYDIAN LETTER C - {0x1093F, 0x1093F, prN}, // Po LYDIAN TRIANGULAR MARK - {0x10980, 0x1099F, prN}, // Lo [32] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2 - {0x109A0, 0x109B7, prN}, // Lo [24] MEROITIC CURSIVE LETTER A..MEROITIC CURSIVE LETTER DA - {0x109BC, 0x109BD, prN}, // No [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF - {0x109BE, 0x109BF, prN}, // Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN - {0x109C0, 0x109CF, prN}, // No [16] MEROITIC CURSIVE NUMBER ONE..MEROITIC CURSIVE NUMBER SEVENTY - {0x109D2, 0x109FF, prN}, // No [46] MEROITIC CURSIVE NUMBER ONE HUNDRED..MEROITIC CURSIVE FRACTION TEN TWELFTHS - {0x10A00, 0x10A00, prN}, // Lo KHAROSHTHI LETTER A - {0x10A01, 0x10A03, prN}, // Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R - {0x10A05, 0x10A06, prN}, // Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O - {0x10A0C, 0x10A0F, prN}, // Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA - {0x10A10, 0x10A13, prN}, // Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA - {0x10A15, 0x10A17, prN}, // Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA - {0x10A19, 0x10A35, prN}, // Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA - {0x10A38, 0x10A3A, prN}, // Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW - {0x10A3F, 0x10A3F, prN}, // Mn KHAROSHTHI VIRAMA - {0x10A40, 0x10A48, prN}, // No [9] KHAROSHTHI DIGIT ONE..KHAROSHTHI FRACTION ONE HALF - {0x10A50, 0x10A58, prN}, // Po [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES - {0x10A60, 0x10A7C, prN}, // Lo [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH - {0x10A7D, 0x10A7E, prN}, // No [2] OLD SOUTH ARABIAN NUMBER ONE..OLD SOUTH ARABIAN NUMBER FIFTY - {0x10A7F, 0x10A7F, prN}, // Po OLD SOUTH ARABIAN NUMERIC INDICATOR - {0x10A80, 0x10A9C, prN}, // Lo [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH - {0x10A9D, 0x10A9F, prN}, // No [3] OLD NORTH ARABIAN NUMBER ONE..OLD NORTH ARABIAN NUMBER TWENTY - {0x10AC0, 0x10AC7, prN}, // Lo [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW - {0x10AC8, 0x10AC8, prN}, // So MANICHAEAN SIGN UD - {0x10AC9, 0x10AE4, prN}, // Lo [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW - {0x10AE5, 0x10AE6, prN}, // Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW - {0x10AEB, 0x10AEF, prN}, // No [5] MANICHAEAN NUMBER ONE..MANICHAEAN NUMBER ONE HUNDRED - {0x10AF0, 0x10AF6, prN}, // Po [7] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION LINE FILLER - {0x10B00, 0x10B35, prN}, // Lo [54] AVESTAN LETTER A..AVESTAN LETTER HE - {0x10B39, 0x10B3F, prN}, // Po [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION - {0x10B40, 0x10B55, prN}, // Lo [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW - {0x10B58, 0x10B5F, prN}, // No [8] INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND - {0x10B60, 0x10B72, prN}, // Lo [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW - {0x10B78, 0x10B7F, prN}, // No [8] INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND - {0x10B80, 0x10B91, prN}, // Lo [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW - {0x10B99, 0x10B9C, prN}, // Po [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT - {0x10BA9, 0x10BAF, prN}, // No [7] PSALTER PAHLAVI NUMBER ONE..PSALTER PAHLAVI NUMBER ONE HUNDRED - {0x10C00, 0x10C48, prN}, // Lo [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH - {0x10C80, 0x10CB2, prN}, // Lu [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US - {0x10CC0, 0x10CF2, prN}, // Ll [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US - {0x10CFA, 0x10CFF, prN}, // No [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND - {0x10D00, 0x10D23, prN}, // Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA - {0x10D24, 0x10D27, prN}, // Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI - {0x10D30, 0x10D39, prN}, // Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE - {0x10E60, 0x10E7E, prN}, // No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS - {0x10E80, 0x10EA9, prN}, // Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET - {0x10EAB, 0x10EAC, prN}, // Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK - {0x10EAD, 0x10EAD, prN}, // Pd YEZIDI HYPHENATION MARK - {0x10EB0, 0x10EB1, prN}, // Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE - {0x10EFD, 0x10EFF, prN}, // Mn [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA - {0x10F00, 0x10F1C, prN}, // Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL - {0x10F1D, 0x10F26, prN}, // No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF - {0x10F27, 0x10F27, prN}, // Lo OLD SOGDIAN LIGATURE AYIN-DALETH - {0x10F30, 0x10F45, prN}, // Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN - {0x10F46, 0x10F50, prN}, // Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW - {0x10F51, 0x10F54, prN}, // No [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED - {0x10F55, 0x10F59, prN}, // Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT - {0x10F70, 0x10F81, prN}, // Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH - {0x10F82, 0x10F85, prN}, // Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW - {0x10F86, 0x10F89, prN}, // Po [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS - {0x10FB0, 0x10FC4, prN}, // Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW - {0x10FC5, 0x10FCB, prN}, // No [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED - {0x10FE0, 0x10FF6, prN}, // Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH - {0x11000, 0x11000, prN}, // Mc BRAHMI SIGN CANDRABINDU - {0x11001, 0x11001, prN}, // Mn BRAHMI SIGN ANUSVARA - {0x11002, 0x11002, prN}, // Mc BRAHMI SIGN VISARGA - {0x11003, 0x11037, prN}, // Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA - {0x11038, 0x11046, prN}, // Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA - {0x11047, 0x1104D, prN}, // Po [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS - {0x11052, 0x11065, prN}, // No [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND - {0x11066, 0x1106F, prN}, // Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE - {0x11070, 0x11070, prN}, // Mn BRAHMI SIGN OLD TAMIL VIRAMA - {0x11071, 0x11072, prN}, // Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O - {0x11073, 0x11074, prN}, // Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O - {0x11075, 0x11075, prN}, // Lo BRAHMI LETTER OLD TAMIL LLA - {0x1107F, 0x1107F, prN}, // Mn BRAHMI NUMBER JOINER - {0x11080, 0x11081, prN}, // Mn [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA - {0x11082, 0x11082, prN}, // Mc KAITHI SIGN VISARGA - {0x11083, 0x110AF, prN}, // Lo [45] KAITHI LETTER A..KAITHI LETTER HA - {0x110B0, 0x110B2, prN}, // Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II - {0x110B3, 0x110B6, prN}, // Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI - {0x110B7, 0x110B8, prN}, // Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU - {0x110B9, 0x110BA, prN}, // Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA - {0x110BB, 0x110BC, prN}, // Po [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN - {0x110BD, 0x110BD, prN}, // Cf KAITHI NUMBER SIGN - {0x110BE, 0x110C1, prN}, // Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA - {0x110C2, 0x110C2, prN}, // Mn KAITHI VOWEL SIGN VOCALIC R - {0x110CD, 0x110CD, prN}, // Cf KAITHI NUMBER SIGN ABOVE - {0x110D0, 0x110E8, prN}, // Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE - {0x110F0, 0x110F9, prN}, // Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE - {0x11100, 0x11102, prN}, // Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA - {0x11103, 0x11126, prN}, // Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA - {0x11127, 0x1112B, prN}, // Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU - {0x1112C, 0x1112C, prN}, // Mc CHAKMA VOWEL SIGN E - {0x1112D, 0x11134, prN}, // Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA - {0x11136, 0x1113F, prN}, // Nd [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE - {0x11140, 0x11143, prN}, // Po [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK - {0x11144, 0x11144, prN}, // Lo CHAKMA LETTER LHAA - {0x11145, 0x11146, prN}, // Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI - {0x11147, 0x11147, prN}, // Lo CHAKMA LETTER VAA - {0x11150, 0x11172, prN}, // Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA - {0x11173, 0x11173, prN}, // Mn MAHAJANI SIGN NUKTA - {0x11174, 0x11175, prN}, // Po [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK - {0x11176, 0x11176, prN}, // Lo MAHAJANI LIGATURE SHRI - {0x11180, 0x11181, prN}, // Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA - {0x11182, 0x11182, prN}, // Mc SHARADA SIGN VISARGA - {0x11183, 0x111B2, prN}, // Lo [48] SHARADA LETTER A..SHARADA LETTER HA - {0x111B3, 0x111B5, prN}, // Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II - {0x111B6, 0x111BE, prN}, // Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O - {0x111BF, 0x111C0, prN}, // Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA - {0x111C1, 0x111C4, prN}, // Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM - {0x111C5, 0x111C8, prN}, // Po [4] SHARADA DANDA..SHARADA SEPARATOR - {0x111C9, 0x111CC, prN}, // Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK - {0x111CD, 0x111CD, prN}, // Po SHARADA SUTRA MARK - {0x111CE, 0x111CE, prN}, // Mc SHARADA VOWEL SIGN PRISHTHAMATRA E - {0x111CF, 0x111CF, prN}, // Mn SHARADA SIGN INVERTED CANDRABINDU - {0x111D0, 0x111D9, prN}, // Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE - {0x111DA, 0x111DA, prN}, // Lo SHARADA EKAM - {0x111DB, 0x111DB, prN}, // Po SHARADA SIGN SIDDHAM - {0x111DC, 0x111DC, prN}, // Lo SHARADA HEADSTROKE - {0x111DD, 0x111DF, prN}, // Po [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2 - {0x111E1, 0x111F4, prN}, // No [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND - {0x11200, 0x11211, prN}, // Lo [18] KHOJKI LETTER A..KHOJKI LETTER JJA - {0x11213, 0x1122B, prN}, // Lo [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA - {0x1122C, 0x1122E, prN}, // Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II - {0x1122F, 0x11231, prN}, // Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI - {0x11232, 0x11233, prN}, // Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU - {0x11234, 0x11234, prN}, // Mn KHOJKI SIGN ANUSVARA - {0x11235, 0x11235, prN}, // Mc KHOJKI SIGN VIRAMA - {0x11236, 0x11237, prN}, // Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA - {0x11238, 0x1123D, prN}, // Po [6] KHOJKI DANDA..KHOJKI ABBREVIATION SIGN - {0x1123E, 0x1123E, prN}, // Mn KHOJKI SIGN SUKUN - {0x1123F, 0x11240, prN}, // Lo [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I - {0x11241, 0x11241, prN}, // Mn KHOJKI VOWEL SIGN VOCALIC R - {0x11280, 0x11286, prN}, // Lo [7] MULTANI LETTER A..MULTANI LETTER GA - {0x11288, 0x11288, prN}, // Lo MULTANI LETTER GHA - {0x1128A, 0x1128D, prN}, // Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA - {0x1128F, 0x1129D, prN}, // Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA - {0x1129F, 0x112A8, prN}, // Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA - {0x112A9, 0x112A9, prN}, // Po MULTANI SECTION MARK - {0x112B0, 0x112DE, prN}, // Lo [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA - {0x112DF, 0x112DF, prN}, // Mn KHUDAWADI SIGN ANUSVARA - {0x112E0, 0x112E2, prN}, // Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II - {0x112E3, 0x112EA, prN}, // Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA - {0x112F0, 0x112F9, prN}, // Nd [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE - {0x11300, 0x11301, prN}, // Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU - {0x11302, 0x11303, prN}, // Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA - {0x11305, 0x1130C, prN}, // Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L - {0x1130F, 0x11310, prN}, // Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI - {0x11313, 0x11328, prN}, // Lo [22] GRANTHA LETTER OO..GRANTHA LETTER NA - {0x1132A, 0x11330, prN}, // Lo [7] GRANTHA LETTER PA..GRANTHA LETTER RA - {0x11332, 0x11333, prN}, // Lo [2] GRANTHA LETTER LA..GRANTHA LETTER LLA - {0x11335, 0x11339, prN}, // Lo [5] GRANTHA LETTER VA..GRANTHA LETTER HA - {0x1133B, 0x1133C, prN}, // Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA - {0x1133D, 0x1133D, prN}, // Lo GRANTHA SIGN AVAGRAHA - {0x1133E, 0x1133F, prN}, // Mc [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I - {0x11340, 0x11340, prN}, // Mn GRANTHA VOWEL SIGN II - {0x11341, 0x11344, prN}, // Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR - {0x11347, 0x11348, prN}, // Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI - {0x1134B, 0x1134D, prN}, // Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA - {0x11350, 0x11350, prN}, // Lo GRANTHA OM - {0x11357, 0x11357, prN}, // Mc GRANTHA AU LENGTH MARK - {0x1135D, 0x11361, prN}, // Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL - {0x11362, 0x11363, prN}, // Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL - {0x11366, 0x1136C, prN}, // Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX - {0x11370, 0x11374, prN}, // Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA - {0x11400, 0x11434, prN}, // Lo [53] NEWA LETTER A..NEWA LETTER HA - {0x11435, 0x11437, prN}, // Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II - {0x11438, 0x1143F, prN}, // Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI - {0x11440, 0x11441, prN}, // Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU - {0x11442, 0x11444, prN}, // Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA - {0x11445, 0x11445, prN}, // Mc NEWA SIGN VISARGA - {0x11446, 0x11446, prN}, // Mn NEWA SIGN NUKTA - {0x11447, 0x1144A, prN}, // Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI - {0x1144B, 0x1144F, prN}, // Po [5] NEWA DANDA..NEWA ABBREVIATION SIGN - {0x11450, 0x11459, prN}, // Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE - {0x1145A, 0x1145B, prN}, // Po [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK - {0x1145D, 0x1145D, prN}, // Po NEWA INSERTION SIGN - {0x1145E, 0x1145E, prN}, // Mn NEWA SANDHI MARK - {0x1145F, 0x11461, prN}, // Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA - {0x11480, 0x114AF, prN}, // Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA - {0x114B0, 0x114B2, prN}, // Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II - {0x114B3, 0x114B8, prN}, // Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL - {0x114B9, 0x114B9, prN}, // Mc TIRHUTA VOWEL SIGN E - {0x114BA, 0x114BA, prN}, // Mn TIRHUTA VOWEL SIGN SHORT E - {0x114BB, 0x114BE, prN}, // Mc [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU - {0x114BF, 0x114C0, prN}, // Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA - {0x114C1, 0x114C1, prN}, // Mc TIRHUTA SIGN VISARGA - {0x114C2, 0x114C3, prN}, // Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA - {0x114C4, 0x114C5, prN}, // Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG - {0x114C6, 0x114C6, prN}, // Po TIRHUTA ABBREVIATION SIGN - {0x114C7, 0x114C7, prN}, // Lo TIRHUTA OM - {0x114D0, 0x114D9, prN}, // Nd [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE - {0x11580, 0x115AE, prN}, // Lo [47] SIDDHAM LETTER A..SIDDHAM LETTER HA - {0x115AF, 0x115B1, prN}, // Mc [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II - {0x115B2, 0x115B5, prN}, // Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR - {0x115B8, 0x115BB, prN}, // Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU - {0x115BC, 0x115BD, prN}, // Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA - {0x115BE, 0x115BE, prN}, // Mc SIDDHAM SIGN VISARGA - {0x115BF, 0x115C0, prN}, // Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA - {0x115C1, 0x115D7, prN}, // Po [23] SIDDHAM SIGN SIDDHAM..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES - {0x115D8, 0x115DB, prN}, // Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U - {0x115DC, 0x115DD, prN}, // Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU - {0x11600, 0x1162F, prN}, // Lo [48] MODI LETTER A..MODI LETTER LLA - {0x11630, 0x11632, prN}, // Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II - {0x11633, 0x1163A, prN}, // Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI - {0x1163B, 0x1163C, prN}, // Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU - {0x1163D, 0x1163D, prN}, // Mn MODI SIGN ANUSVARA - {0x1163E, 0x1163E, prN}, // Mc MODI SIGN VISARGA - {0x1163F, 0x11640, prN}, // Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA - {0x11641, 0x11643, prN}, // Po [3] MODI DANDA..MODI ABBREVIATION SIGN - {0x11644, 0x11644, prN}, // Lo MODI SIGN HUVA - {0x11650, 0x11659, prN}, // Nd [10] MODI DIGIT ZERO..MODI DIGIT NINE - {0x11660, 0x1166C, prN}, // Po [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT - {0x11680, 0x116AA, prN}, // Lo [43] TAKRI LETTER A..TAKRI LETTER RRA - {0x116AB, 0x116AB, prN}, // Mn TAKRI SIGN ANUSVARA - {0x116AC, 0x116AC, prN}, // Mc TAKRI SIGN VISARGA - {0x116AD, 0x116AD, prN}, // Mn TAKRI VOWEL SIGN AA - {0x116AE, 0x116AF, prN}, // Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II - {0x116B0, 0x116B5, prN}, // Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU - {0x116B6, 0x116B6, prN}, // Mc TAKRI SIGN VIRAMA - {0x116B7, 0x116B7, prN}, // Mn TAKRI SIGN NUKTA - {0x116B8, 0x116B8, prN}, // Lo TAKRI LETTER ARCHAIC KHA - {0x116B9, 0x116B9, prN}, // Po TAKRI ABBREVIATION SIGN - {0x116C0, 0x116C9, prN}, // Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE - {0x11700, 0x1171A, prN}, // Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA - {0x1171D, 0x1171F, prN}, // Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA - {0x11720, 0x11721, prN}, // Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA - {0x11722, 0x11725, prN}, // Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU - {0x11726, 0x11726, prN}, // Mc AHOM VOWEL SIGN E - {0x11727, 0x1172B, prN}, // Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER - {0x11730, 0x11739, prN}, // Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE - {0x1173A, 0x1173B, prN}, // No [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY - {0x1173C, 0x1173E, prN}, // Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI - {0x1173F, 0x1173F, prN}, // So AHOM SYMBOL VI - {0x11740, 0x11746, prN}, // Lo [7] AHOM LETTER CA..AHOM LETTER LLA - {0x11800, 0x1182B, prN}, // Lo [44] DOGRA LETTER A..DOGRA LETTER RRA - {0x1182C, 0x1182E, prN}, // Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II - {0x1182F, 0x11837, prN}, // Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA - {0x11838, 0x11838, prN}, // Mc DOGRA SIGN VISARGA - {0x11839, 0x1183A, prN}, // Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA - {0x1183B, 0x1183B, prN}, // Po DOGRA ABBREVIATION SIGN - {0x118A0, 0x118DF, prN}, // L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO - {0x118E0, 0x118E9, prN}, // Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE - {0x118EA, 0x118F2, prN}, // No [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY - {0x118FF, 0x118FF, prN}, // Lo WARANG CITI OM - {0x11900, 0x11906, prN}, // Lo [7] DIVES AKURU LETTER A..DIVES AKURU LETTER E - {0x11909, 0x11909, prN}, // Lo DIVES AKURU LETTER O - {0x1190C, 0x11913, prN}, // Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA - {0x11915, 0x11916, prN}, // Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA - {0x11918, 0x1192F, prN}, // Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA - {0x11930, 0x11935, prN}, // Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E - {0x11937, 0x11938, prN}, // Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O - {0x1193B, 0x1193C, prN}, // Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU - {0x1193D, 0x1193D, prN}, // Mc DIVES AKURU SIGN HALANTA - {0x1193E, 0x1193E, prN}, // Mn DIVES AKURU VIRAMA - {0x1193F, 0x1193F, prN}, // Lo DIVES AKURU PREFIXED NASAL SIGN - {0x11940, 0x11940, prN}, // Mc DIVES AKURU MEDIAL YA - {0x11941, 0x11941, prN}, // Lo DIVES AKURU INITIAL RA - {0x11942, 0x11942, prN}, // Mc DIVES AKURU MEDIAL RA - {0x11943, 0x11943, prN}, // Mn DIVES AKURU SIGN NUKTA - {0x11944, 0x11946, prN}, // Po [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK - {0x11950, 0x11959, prN}, // Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE - {0x119A0, 0x119A7, prN}, // Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR - {0x119AA, 0x119D0, prN}, // Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA - {0x119D1, 0x119D3, prN}, // Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II - {0x119D4, 0x119D7, prN}, // Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR - {0x119DA, 0x119DB, prN}, // Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI - {0x119DC, 0x119DF, prN}, // Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA - {0x119E0, 0x119E0, prN}, // Mn NANDINAGARI SIGN VIRAMA - {0x119E1, 0x119E1, prN}, // Lo NANDINAGARI SIGN AVAGRAHA - {0x119E2, 0x119E2, prN}, // Po NANDINAGARI SIGN SIDDHAM - {0x119E3, 0x119E3, prN}, // Lo NANDINAGARI HEADSTROKE - {0x119E4, 0x119E4, prN}, // Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E - {0x11A00, 0x11A00, prN}, // Lo ZANABAZAR SQUARE LETTER A - {0x11A01, 0x11A0A, prN}, // Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK - {0x11A0B, 0x11A32, prN}, // Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA - {0x11A33, 0x11A38, prN}, // Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA - {0x11A39, 0x11A39, prN}, // Mc ZANABAZAR SQUARE SIGN VISARGA - {0x11A3A, 0x11A3A, prN}, // Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA - {0x11A3B, 0x11A3E, prN}, // Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA - {0x11A3F, 0x11A46, prN}, // Po [8] ZANABAZAR SQUARE INITIAL HEAD MARK..ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK - {0x11A47, 0x11A47, prN}, // Mn ZANABAZAR SQUARE SUBJOINER - {0x11A50, 0x11A50, prN}, // Lo SOYOMBO LETTER A - {0x11A51, 0x11A56, prN}, // Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE - {0x11A57, 0x11A58, prN}, // Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU - {0x11A59, 0x11A5B, prN}, // Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK - {0x11A5C, 0x11A89, prN}, // Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA - {0x11A8A, 0x11A96, prN}, // Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA - {0x11A97, 0x11A97, prN}, // Mc SOYOMBO SIGN VISARGA - {0x11A98, 0x11A99, prN}, // Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER - {0x11A9A, 0x11A9C, prN}, // Po [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD - {0x11A9D, 0x11A9D, prN}, // Lo SOYOMBO MARK PLUTA - {0x11A9E, 0x11AA2, prN}, // Po [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2 - {0x11AB0, 0x11ABF, prN}, // Lo [16] CANADIAN SYLLABICS NATTILIK HI..CANADIAN SYLLABICS SPA - {0x11AC0, 0x11AF8, prN}, // Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL - {0x11B00, 0x11B09, prN}, // Po [10] DEVANAGARI HEAD MARK..DEVANAGARI SIGN MINDU - {0x11C00, 0x11C08, prN}, // Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L - {0x11C0A, 0x11C2E, prN}, // Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA - {0x11C2F, 0x11C2F, prN}, // Mc BHAIKSUKI VOWEL SIGN AA - {0x11C30, 0x11C36, prN}, // Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L - {0x11C38, 0x11C3D, prN}, // Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA - {0x11C3E, 0x11C3E, prN}, // Mc BHAIKSUKI SIGN VISARGA - {0x11C3F, 0x11C3F, prN}, // Mn BHAIKSUKI SIGN VIRAMA - {0x11C40, 0x11C40, prN}, // Lo BHAIKSUKI SIGN AVAGRAHA - {0x11C41, 0x11C45, prN}, // Po [5] BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2 - {0x11C50, 0x11C59, prN}, // Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE - {0x11C5A, 0x11C6C, prN}, // No [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK - {0x11C70, 0x11C71, prN}, // Po [2] MARCHEN HEAD MARK..MARCHEN MARK SHAD - {0x11C72, 0x11C8F, prN}, // Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A - {0x11C92, 0x11CA7, prN}, // Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA - {0x11CA9, 0x11CA9, prN}, // Mc MARCHEN SUBJOINED LETTER YA - {0x11CAA, 0x11CB0, prN}, // Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA - {0x11CB1, 0x11CB1, prN}, // Mc MARCHEN VOWEL SIGN I - {0x11CB2, 0x11CB3, prN}, // Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E - {0x11CB4, 0x11CB4, prN}, // Mc MARCHEN VOWEL SIGN O - {0x11CB5, 0x11CB6, prN}, // Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU - {0x11D00, 0x11D06, prN}, // Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E - {0x11D08, 0x11D09, prN}, // Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O - {0x11D0B, 0x11D30, prN}, // Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA - {0x11D31, 0x11D36, prN}, // Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R - {0x11D3A, 0x11D3A, prN}, // Mn MASARAM GONDI VOWEL SIGN E - {0x11D3C, 0x11D3D, prN}, // Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O - {0x11D3F, 0x11D45, prN}, // Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA - {0x11D46, 0x11D46, prN}, // Lo MASARAM GONDI REPHA - {0x11D47, 0x11D47, prN}, // Mn MASARAM GONDI RA-KARA - {0x11D50, 0x11D59, prN}, // Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE - {0x11D60, 0x11D65, prN}, // Lo [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU - {0x11D67, 0x11D68, prN}, // Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI - {0x11D6A, 0x11D89, prN}, // Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA - {0x11D8A, 0x11D8E, prN}, // Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU - {0x11D90, 0x11D91, prN}, // Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI - {0x11D93, 0x11D94, prN}, // Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU - {0x11D95, 0x11D95, prN}, // Mn GUNJALA GONDI SIGN ANUSVARA - {0x11D96, 0x11D96, prN}, // Mc GUNJALA GONDI SIGN VISARGA - {0x11D97, 0x11D97, prN}, // Mn GUNJALA GONDI VIRAMA - {0x11D98, 0x11D98, prN}, // Lo GUNJALA GONDI OM - {0x11DA0, 0x11DA9, prN}, // Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE - {0x11EE0, 0x11EF2, prN}, // Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA - {0x11EF3, 0x11EF4, prN}, // Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U - {0x11EF5, 0x11EF6, prN}, // Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O - {0x11EF7, 0x11EF8, prN}, // Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION - {0x11F00, 0x11F01, prN}, // Mn [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA - {0x11F02, 0x11F02, prN}, // Lo KAWI SIGN REPHA - {0x11F03, 0x11F03, prN}, // Mc KAWI SIGN VISARGA - {0x11F04, 0x11F10, prN}, // Lo [13] KAWI LETTER A..KAWI LETTER O - {0x11F12, 0x11F33, prN}, // Lo [34] KAWI LETTER KA..KAWI LETTER JNYA - {0x11F34, 0x11F35, prN}, // Mc [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA - {0x11F36, 0x11F3A, prN}, // Mn [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R - {0x11F3E, 0x11F3F, prN}, // Mc [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI - {0x11F40, 0x11F40, prN}, // Mn KAWI VOWEL SIGN EU - {0x11F41, 0x11F41, prN}, // Mc KAWI SIGN KILLER - {0x11F42, 0x11F42, prN}, // Mn KAWI CONJOINER - {0x11F43, 0x11F4F, prN}, // Po [13] KAWI DANDA..KAWI PUNCTUATION CLOSING SPIRAL - {0x11F50, 0x11F59, prN}, // Nd [10] KAWI DIGIT ZERO..KAWI DIGIT NINE - {0x11FB0, 0x11FB0, prN}, // Lo LISU LETTER YHA - {0x11FC0, 0x11FD4, prN}, // No [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH - {0x11FD5, 0x11FDC, prN}, // So [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI - {0x11FDD, 0x11FE0, prN}, // Sc [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN - {0x11FE1, 0x11FF1, prN}, // So [17] TAMIL SIGN PAARAM..TAMIL SIGN VAKAIYARAA - {0x11FFF, 0x11FFF, prN}, // Po TAMIL PUNCTUATION END OF TEXT - {0x12000, 0x12399, prN}, // Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U - {0x12400, 0x1246E, prN}, // Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM - {0x12470, 0x12474, prN}, // Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON - {0x12480, 0x12543, prN}, // Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU - {0x12F90, 0x12FF0, prN}, // Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 - {0x12FF1, 0x12FF2, prN}, // Po [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302 - {0x13000, 0x1342F, prN}, // Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D - {0x13430, 0x1343F, prN}, // Cf [16] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE - {0x13440, 0x13440, prN}, // Mn EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY - {0x13441, 0x13446, prN}, // Lo [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN - {0x13447, 0x13455, prN}, // Mn [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED - {0x14400, 0x14646, prN}, // Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 - {0x16800, 0x16A38, prN}, // Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ - {0x16A40, 0x16A5E, prN}, // Lo [31] MRO LETTER TA..MRO LETTER TEK - {0x16A60, 0x16A69, prN}, // Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE - {0x16A6E, 0x16A6F, prN}, // Po [2] MRO DANDA..MRO DOUBLE DANDA - {0x16A70, 0x16ABE, prN}, // Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA - {0x16AC0, 0x16AC9, prN}, // Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE - {0x16AD0, 0x16AED, prN}, // Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I - {0x16AF0, 0x16AF4, prN}, // Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE - {0x16AF5, 0x16AF5, prN}, // Po BASSA VAH FULL STOP - {0x16B00, 0x16B2F, prN}, // Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU - {0x16B30, 0x16B36, prN}, // Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM - {0x16B37, 0x16B3B, prN}, // Po [5] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS FEEM - {0x16B3C, 0x16B3F, prN}, // So [4] PAHAWH HMONG SIGN XYEEM NTXIV..PAHAWH HMONG SIGN XYEEM FAIB - {0x16B40, 0x16B43, prN}, // Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM - {0x16B44, 0x16B44, prN}, // Po PAHAWH HMONG SIGN XAUS - {0x16B45, 0x16B45, prN}, // So PAHAWH HMONG SIGN CIM TSOV ROG - {0x16B50, 0x16B59, prN}, // Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE - {0x16B5B, 0x16B61, prN}, // No [7] PAHAWH HMONG NUMBER TENS..PAHAWH HMONG NUMBER TRILLIONS - {0x16B63, 0x16B77, prN}, // Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS - {0x16B7D, 0x16B8F, prN}, // Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ - {0x16E40, 0x16E7F, prN}, // L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y - {0x16E80, 0x16E96, prN}, // No [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM - {0x16E97, 0x16E9A, prN}, // Po [4] MEDEFAIDRIN COMMA..MEDEFAIDRIN EXCLAMATION OH - {0x16F00, 0x16F4A, prN}, // Lo [75] MIAO LETTER PA..MIAO LETTER RTE - {0x16F4F, 0x16F4F, prN}, // Mn MIAO SIGN CONSONANT MODIFIER BAR - {0x16F50, 0x16F50, prN}, // Lo MIAO LETTER NASALIZATION - {0x16F51, 0x16F87, prN}, // Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI - {0x16F8F, 0x16F92, prN}, // Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW - {0x16F93, 0x16F9F, prN}, // Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 - {0x16FE0, 0x16FE1, prW}, // Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK - {0x16FE2, 0x16FE2, prW}, // Po OLD CHINESE HOOK MARK - {0x16FE3, 0x16FE3, prW}, // Lm OLD CHINESE ITERATION MARK - {0x16FE4, 0x16FE4, prW}, // Mn KHITAN SMALL SCRIPT FILLER - {0x16FF0, 0x16FF1, prW}, // Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY - {0x17000, 0x187F7, prW}, // Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 - {0x18800, 0x18AFF, prW}, // Lo [768] TANGUT COMPONENT-001..TANGUT COMPONENT-768 - {0x18B00, 0x18CD5, prW}, // Lo [470] KHITAN SMALL SCRIPT CHARACTER-18B00..KHITAN SMALL SCRIPT CHARACTER-18CD5 - {0x18D00, 0x18D08, prW}, // Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 - {0x1AFF0, 0x1AFF3, prW}, // Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 - {0x1AFF5, 0x1AFFB, prW}, // Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 - {0x1AFFD, 0x1AFFE, prW}, // Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 - {0x1B000, 0x1B0FF, prW}, // Lo [256] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER RE-2 - {0x1B100, 0x1B122, prW}, // Lo [35] HENTAIGANA LETTER RE-3..KATAKANA LETTER ARCHAIC WU - {0x1B132, 0x1B132, prW}, // Lo HIRAGANA LETTER SMALL KO - {0x1B150, 0x1B152, prW}, // Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO - {0x1B155, 0x1B155, prW}, // Lo KATAKANA LETTER SMALL KO - {0x1B164, 0x1B167, prW}, // Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N - {0x1B170, 0x1B2FB, prW}, // Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB - {0x1BC00, 0x1BC6A, prN}, // Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M - {0x1BC70, 0x1BC7C, prN}, // Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK - {0x1BC80, 0x1BC88, prN}, // Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL - {0x1BC90, 0x1BC99, prN}, // Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW - {0x1BC9C, 0x1BC9C, prN}, // So DUPLOYAN SIGN O WITH CROSS - {0x1BC9D, 0x1BC9E, prN}, // Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK - {0x1BC9F, 0x1BC9F, prN}, // Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP - {0x1BCA0, 0x1BCA3, prN}, // Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP - {0x1CF00, 0x1CF2D, prN}, // Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT - {0x1CF30, 0x1CF46, prN}, // Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG - {0x1CF50, 0x1CFC3, prN}, // So [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK - {0x1D000, 0x1D0F5, prN}, // So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO - {0x1D100, 0x1D126, prN}, // So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 - {0x1D129, 0x1D164, prN}, // So [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE - {0x1D165, 0x1D166, prN}, // Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM - {0x1D167, 0x1D169, prN}, // Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 - {0x1D16A, 0x1D16C, prN}, // So [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3 - {0x1D16D, 0x1D172, prN}, // Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 - {0x1D173, 0x1D17A, prN}, // Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE - {0x1D17B, 0x1D182, prN}, // Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE - {0x1D183, 0x1D184, prN}, // So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN - {0x1D185, 0x1D18B, prN}, // Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE - {0x1D18C, 0x1D1A9, prN}, // So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH - {0x1D1AA, 0x1D1AD, prN}, // Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO - {0x1D1AE, 0x1D1EA, prN}, // So [61] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KORON - {0x1D200, 0x1D241, prN}, // So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54 - {0x1D242, 0x1D244, prN}, // Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME - {0x1D245, 0x1D245, prN}, // So GREEK MUSICAL LEIMMA - {0x1D2C0, 0x1D2D3, prN}, // No [20] KAKTOVIK NUMERAL ZERO..KAKTOVIK NUMERAL NINETEEN - {0x1D2E0, 0x1D2F3, prN}, // No [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN - {0x1D300, 0x1D356, prN}, // So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING - {0x1D360, 0x1D378, prN}, // No [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE - {0x1D400, 0x1D454, prN}, // L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G - {0x1D456, 0x1D49C, prN}, // L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A - {0x1D49E, 0x1D49F, prN}, // Lu [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D - {0x1D4A2, 0x1D4A2, prN}, // Lu MATHEMATICAL SCRIPT CAPITAL G - {0x1D4A5, 0x1D4A6, prN}, // Lu [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K - {0x1D4A9, 0x1D4AC, prN}, // Lu [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q - {0x1D4AE, 0x1D4B9, prN}, // L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D - {0x1D4BB, 0x1D4BB, prN}, // Ll MATHEMATICAL SCRIPT SMALL F - {0x1D4BD, 0x1D4C3, prN}, // Ll [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N - {0x1D4C5, 0x1D505, prN}, // L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B - {0x1D507, 0x1D50A, prN}, // Lu [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G - {0x1D50D, 0x1D514, prN}, // Lu [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q - {0x1D516, 0x1D51C, prN}, // Lu [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y - {0x1D51E, 0x1D539, prN}, // L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B - {0x1D53B, 0x1D53E, prN}, // Lu [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G - {0x1D540, 0x1D544, prN}, // Lu [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M - {0x1D546, 0x1D546, prN}, // Lu MATHEMATICAL DOUBLE-STRUCK CAPITAL O - {0x1D54A, 0x1D550, prN}, // Lu [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y - {0x1D552, 0x1D6A5, prN}, // L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J - {0x1D6A8, 0x1D6C0, prN}, // Lu [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA - {0x1D6C1, 0x1D6C1, prN}, // Sm MATHEMATICAL BOLD NABLA - {0x1D6C2, 0x1D6DA, prN}, // Ll [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA - {0x1D6DB, 0x1D6DB, prN}, // Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL - {0x1D6DC, 0x1D6FA, prN}, // L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA - {0x1D6FB, 0x1D6FB, prN}, // Sm MATHEMATICAL ITALIC NABLA - {0x1D6FC, 0x1D714, prN}, // Ll [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA - {0x1D715, 0x1D715, prN}, // Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL - {0x1D716, 0x1D734, prN}, // L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA - {0x1D735, 0x1D735, prN}, // Sm MATHEMATICAL BOLD ITALIC NABLA - {0x1D736, 0x1D74E, prN}, // Ll [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA - {0x1D74F, 0x1D74F, prN}, // Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL - {0x1D750, 0x1D76E, prN}, // L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA - {0x1D76F, 0x1D76F, prN}, // Sm MATHEMATICAL SANS-SERIF BOLD NABLA - {0x1D770, 0x1D788, prN}, // Ll [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA - {0x1D789, 0x1D789, prN}, // Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL - {0x1D78A, 0x1D7A8, prN}, // L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA - {0x1D7A9, 0x1D7A9, prN}, // Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA - {0x1D7AA, 0x1D7C2, prN}, // Ll [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA - {0x1D7C3, 0x1D7C3, prN}, // Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL - {0x1D7C4, 0x1D7CB, prN}, // L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA - {0x1D7CE, 0x1D7FF, prN}, // Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE - {0x1D800, 0x1D9FF, prN}, // So [512] SIGNWRITING HAND-FIST INDEX..SIGNWRITING HEAD - {0x1DA00, 0x1DA36, prN}, // Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN - {0x1DA37, 0x1DA3A, prN}, // So [4] SIGNWRITING AIR BLOW SMALL ROTATIONS..SIGNWRITING BREATH EXHALE - {0x1DA3B, 0x1DA6C, prN}, // Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT - {0x1DA6D, 0x1DA74, prN}, // So [8] SIGNWRITING SHOULDER HIP SPINE..SIGNWRITING TORSO-FLOORPLANE TWISTING - {0x1DA75, 0x1DA75, prN}, // Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS - {0x1DA76, 0x1DA83, prN}, // So [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH - {0x1DA84, 0x1DA84, prN}, // Mn SIGNWRITING LOCATION HEAD NECK - {0x1DA85, 0x1DA86, prN}, // So [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS - {0x1DA87, 0x1DA8B, prN}, // Po [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS - {0x1DA9B, 0x1DA9F, prN}, // Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 - {0x1DAA1, 0x1DAAF, prN}, // Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 - {0x1DF00, 0x1DF09, prN}, // Ll [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK - {0x1DF0A, 0x1DF0A, prN}, // Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK - {0x1DF0B, 0x1DF1E, prN}, // Ll [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL - {0x1DF25, 0x1DF2A, prN}, // Ll [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK - {0x1E000, 0x1E006, prN}, // Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE - {0x1E008, 0x1E018, prN}, // Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU - {0x1E01B, 0x1E021, prN}, // Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI - {0x1E023, 0x1E024, prN}, // Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS - {0x1E026, 0x1E02A, prN}, // Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA - {0x1E030, 0x1E06D, prN}, // Lm [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE - {0x1E08F, 0x1E08F, prN}, // Mn COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - {0x1E100, 0x1E12C, prN}, // Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W - {0x1E130, 0x1E136, prN}, // Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D - {0x1E137, 0x1E13D, prN}, // Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER - {0x1E140, 0x1E149, prN}, // Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE - {0x1E14E, 0x1E14E, prN}, // Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ - {0x1E14F, 0x1E14F, prN}, // So NYIAKENG PUACHUE HMONG CIRCLED CA - {0x1E290, 0x1E2AD, prN}, // Lo [30] TOTO LETTER PA..TOTO LETTER A - {0x1E2AE, 0x1E2AE, prN}, // Mn TOTO SIGN RISING TONE - {0x1E2C0, 0x1E2EB, prN}, // Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH - {0x1E2EC, 0x1E2EF, prN}, // Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI - {0x1E2F0, 0x1E2F9, prN}, // Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE - {0x1E2FF, 0x1E2FF, prN}, // Sc WANCHO NGUN SIGN - {0x1E4D0, 0x1E4EA, prN}, // Lo [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL - {0x1E4EB, 0x1E4EB, prN}, // Lm NAG MUNDARI SIGN OJOD - {0x1E4EC, 0x1E4EF, prN}, // Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH - {0x1E4F0, 0x1E4F9, prN}, // Nd [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE - {0x1E7E0, 0x1E7E6, prN}, // Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO - {0x1E7E8, 0x1E7EB, prN}, // Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE - {0x1E7ED, 0x1E7EE, prN}, // Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE - {0x1E7F0, 0x1E7FE, prN}, // Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE - {0x1E800, 0x1E8C4, prN}, // Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON - {0x1E8C7, 0x1E8CF, prN}, // No [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE - {0x1E8D0, 0x1E8D6, prN}, // Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS - {0x1E900, 0x1E943, prN}, // L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA - {0x1E944, 0x1E94A, prN}, // Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA - {0x1E94B, 0x1E94B, prN}, // Lm ADLAM NASALIZATION MARK - {0x1E950, 0x1E959, prN}, // Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE - {0x1E95E, 0x1E95F, prN}, // Po [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK - {0x1EC71, 0x1ECAB, prN}, // No [59] INDIC SIYAQ NUMBER ONE..INDIC SIYAQ NUMBER PREFIXED NINE - {0x1ECAC, 0x1ECAC, prN}, // So INDIC SIYAQ PLACEHOLDER - {0x1ECAD, 0x1ECAF, prN}, // No [3] INDIC SIYAQ FRACTION ONE QUARTER..INDIC SIYAQ FRACTION THREE QUARTERS - {0x1ECB0, 0x1ECB0, prN}, // Sc INDIC SIYAQ RUPEE MARK - {0x1ECB1, 0x1ECB4, prN}, // No [4] INDIC SIYAQ NUMBER ALTERNATE ONE..INDIC SIYAQ ALTERNATE LAKH MARK - {0x1ED01, 0x1ED2D, prN}, // No [45] OTTOMAN SIYAQ NUMBER ONE..OTTOMAN SIYAQ NUMBER NINETY THOUSAND - {0x1ED2E, 0x1ED2E, prN}, // So OTTOMAN SIYAQ MARRATAN - {0x1ED2F, 0x1ED3D, prN}, // No [15] OTTOMAN SIYAQ ALTERNATE NUMBER TWO..OTTOMAN SIYAQ FRACTION ONE SIXTH - {0x1EE00, 0x1EE03, prN}, // Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL - {0x1EE05, 0x1EE1F, prN}, // Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF - {0x1EE21, 0x1EE22, prN}, // Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM - {0x1EE24, 0x1EE24, prN}, // Lo ARABIC MATHEMATICAL INITIAL HEH - {0x1EE27, 0x1EE27, prN}, // Lo ARABIC MATHEMATICAL INITIAL HAH - {0x1EE29, 0x1EE32, prN}, // Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF - {0x1EE34, 0x1EE37, prN}, // Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH - {0x1EE39, 0x1EE39, prN}, // Lo ARABIC MATHEMATICAL INITIAL DAD - {0x1EE3B, 0x1EE3B, prN}, // Lo ARABIC MATHEMATICAL INITIAL GHAIN - {0x1EE42, 0x1EE42, prN}, // Lo ARABIC MATHEMATICAL TAILED JEEM - {0x1EE47, 0x1EE47, prN}, // Lo ARABIC MATHEMATICAL TAILED HAH - {0x1EE49, 0x1EE49, prN}, // Lo ARABIC MATHEMATICAL TAILED YEH - {0x1EE4B, 0x1EE4B, prN}, // Lo ARABIC MATHEMATICAL TAILED LAM - {0x1EE4D, 0x1EE4F, prN}, // Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN - {0x1EE51, 0x1EE52, prN}, // Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF - {0x1EE54, 0x1EE54, prN}, // Lo ARABIC MATHEMATICAL TAILED SHEEN - {0x1EE57, 0x1EE57, prN}, // Lo ARABIC MATHEMATICAL TAILED KHAH - {0x1EE59, 0x1EE59, prN}, // Lo ARABIC MATHEMATICAL TAILED DAD - {0x1EE5B, 0x1EE5B, prN}, // Lo ARABIC MATHEMATICAL TAILED GHAIN - {0x1EE5D, 0x1EE5D, prN}, // Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON - {0x1EE5F, 0x1EE5F, prN}, // Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF - {0x1EE61, 0x1EE62, prN}, // Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM - {0x1EE64, 0x1EE64, prN}, // Lo ARABIC MATHEMATICAL STRETCHED HEH - {0x1EE67, 0x1EE6A, prN}, // Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF - {0x1EE6C, 0x1EE72, prN}, // Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF - {0x1EE74, 0x1EE77, prN}, // Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH - {0x1EE79, 0x1EE7C, prN}, // Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH - {0x1EE7E, 0x1EE7E, prN}, // Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH - {0x1EE80, 0x1EE89, prN}, // Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH - {0x1EE8B, 0x1EE9B, prN}, // Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN - {0x1EEA1, 0x1EEA3, prN}, // Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL - {0x1EEA5, 0x1EEA9, prN}, // Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH - {0x1EEAB, 0x1EEBB, prN}, // Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN - {0x1EEF0, 0x1EEF1, prN}, // Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL - {0x1F000, 0x1F003, prN}, // So [4] MAHJONG TILE EAST WIND..MAHJONG TILE NORTH WIND - {0x1F004, 0x1F004, prW}, // So MAHJONG TILE RED DRAGON - {0x1F005, 0x1F02B, prN}, // So [39] MAHJONG TILE GREEN DRAGON..MAHJONG TILE BACK - {0x1F030, 0x1F093, prN}, // So [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06 - {0x1F0A0, 0x1F0AE, prN}, // So [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES - {0x1F0B1, 0x1F0BF, prN}, // So [15] PLAYING CARD ACE OF HEARTS..PLAYING CARD RED JOKER - {0x1F0C1, 0x1F0CE, prN}, // So [14] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD KING OF DIAMONDS - {0x1F0CF, 0x1F0CF, prW}, // So PLAYING CARD BLACK JOKER - {0x1F0D1, 0x1F0F5, prN}, // So [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21 - {0x1F100, 0x1F10A, prA}, // No [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA - {0x1F10B, 0x1F10C, prN}, // No [2] DINGBAT CIRCLED SANS-SERIF DIGIT ZERO..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO - {0x1F10D, 0x1F10F, prN}, // So [3] CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH - {0x1F110, 0x1F12D, prA}, // So [30] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED CD - {0x1F12E, 0x1F12F, prN}, // So [2] CIRCLED WZ..COPYLEFT SYMBOL - {0x1F130, 0x1F169, prA}, // So [58] SQUARED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z - {0x1F16A, 0x1F16F, prN}, // So [6] RAISED MC SIGN..CIRCLED HUMAN FIGURE - {0x1F170, 0x1F18D, prA}, // So [30] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED SA - {0x1F18E, 0x1F18E, prW}, // So NEGATIVE SQUARED AB - {0x1F18F, 0x1F190, prA}, // So [2] NEGATIVE SQUARED WC..SQUARE DJ - {0x1F191, 0x1F19A, prW}, // So [10] SQUARED CL..SQUARED VS - {0x1F19B, 0x1F1AC, prA}, // So [18] SQUARED THREE D..SQUARED VOD - {0x1F1AD, 0x1F1AD, prN}, // So MASK WORK SYMBOL - {0x1F1E6, 0x1F1FF, prN}, // So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z - {0x1F200, 0x1F202, prW}, // So [3] SQUARE HIRAGANA HOKA..SQUARED KATAKANA SA - {0x1F210, 0x1F23B, prW}, // So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D - {0x1F240, 0x1F248, prW}, // So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 - {0x1F250, 0x1F251, prW}, // So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT - {0x1F260, 0x1F265, prW}, // So [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI - {0x1F300, 0x1F320, prW}, // So [33] CYCLONE..SHOOTING STAR - {0x1F321, 0x1F32C, prN}, // So [12] THERMOMETER..WIND BLOWING FACE - {0x1F32D, 0x1F335, prW}, // So [9] HOT DOG..CACTUS - {0x1F336, 0x1F336, prN}, // So HOT PEPPER - {0x1F337, 0x1F37C, prW}, // So [70] TULIP..BABY BOTTLE - {0x1F37D, 0x1F37D, prN}, // So FORK AND KNIFE WITH PLATE - {0x1F37E, 0x1F393, prW}, // So [22] BOTTLE WITH POPPING CORK..GRADUATION CAP - {0x1F394, 0x1F39F, prN}, // So [12] HEART WITH TIP ON THE LEFT..ADMISSION TICKETS - {0x1F3A0, 0x1F3CA, prW}, // So [43] CAROUSEL HORSE..SWIMMER - {0x1F3CB, 0x1F3CE, prN}, // So [4] WEIGHT LIFTER..RACING CAR - {0x1F3CF, 0x1F3D3, prW}, // So [5] CRICKET BAT AND BALL..TABLE TENNIS PADDLE AND BALL - {0x1F3D4, 0x1F3DF, prN}, // So [12] SNOW CAPPED MOUNTAIN..STADIUM - {0x1F3E0, 0x1F3F0, prW}, // So [17] HOUSE BUILDING..EUROPEAN CASTLE - {0x1F3F1, 0x1F3F3, prN}, // So [3] WHITE PENNANT..WAVING WHITE FLAG - {0x1F3F4, 0x1F3F4, prW}, // So WAVING BLACK FLAG - {0x1F3F5, 0x1F3F7, prN}, // So [3] ROSETTE..LABEL - {0x1F3F8, 0x1F3FA, prW}, // So [3] BADMINTON RACQUET AND SHUTTLECOCK..AMPHORA - {0x1F3FB, 0x1F3FF, prW}, // Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 - {0x1F400, 0x1F43E, prW}, // So [63] RAT..PAW PRINTS - {0x1F43F, 0x1F43F, prN}, // So CHIPMUNK - {0x1F440, 0x1F440, prW}, // So EYES - {0x1F441, 0x1F441, prN}, // So EYE - {0x1F442, 0x1F4FC, prW}, // So [187] EAR..VIDEOCASSETTE - {0x1F4FD, 0x1F4FE, prN}, // So [2] FILM PROJECTOR..PORTABLE STEREO - {0x1F4FF, 0x1F53D, prW}, // So [63] PRAYER BEADS..DOWN-POINTING SMALL RED TRIANGLE - {0x1F53E, 0x1F54A, prN}, // So [13] LOWER RIGHT SHADOWED WHITE CIRCLE..DOVE OF PEACE - {0x1F54B, 0x1F54E, prW}, // So [4] KAABA..MENORAH WITH NINE BRANCHES - {0x1F54F, 0x1F54F, prN}, // So BOWL OF HYGIEIA - {0x1F550, 0x1F567, prW}, // So [24] CLOCK FACE ONE OCLOCK..CLOCK FACE TWELVE-THIRTY - {0x1F568, 0x1F579, prN}, // So [18] RIGHT SPEAKER..JOYSTICK - {0x1F57A, 0x1F57A, prW}, // So MAN DANCING - {0x1F57B, 0x1F594, prN}, // So [26] LEFT HAND TELEPHONE RECEIVER..REVERSED VICTORY HAND - {0x1F595, 0x1F596, prW}, // So [2] REVERSED HAND WITH MIDDLE FINGER EXTENDED..RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS - {0x1F597, 0x1F5A3, prN}, // So [13] WHITE DOWN POINTING LEFT HAND INDEX..BLACK DOWN POINTING BACKHAND INDEX - {0x1F5A4, 0x1F5A4, prW}, // So BLACK HEART - {0x1F5A5, 0x1F5FA, prN}, // So [86] DESKTOP COMPUTER..WORLD MAP - {0x1F5FB, 0x1F5FF, prW}, // So [5] MOUNT FUJI..MOYAI - {0x1F600, 0x1F64F, prW}, // So [80] GRINNING FACE..PERSON WITH FOLDED HANDS - {0x1F650, 0x1F67F, prN}, // So [48] NORTH WEST POINTING LEAF..REVERSE CHECKER BOARD - {0x1F680, 0x1F6C5, prW}, // So [70] ROCKET..LEFT LUGGAGE - {0x1F6C6, 0x1F6CB, prN}, // So [6] TRIANGLE WITH ROUNDED CORNERS..COUCH AND LAMP - {0x1F6CC, 0x1F6CC, prW}, // So SLEEPING ACCOMMODATION - {0x1F6CD, 0x1F6CF, prN}, // So [3] SHOPPING BAGS..BED - {0x1F6D0, 0x1F6D2, prW}, // So [3] PLACE OF WORSHIP..SHOPPING TROLLEY - {0x1F6D3, 0x1F6D4, prN}, // So [2] STUPA..PAGODA - {0x1F6D5, 0x1F6D7, prW}, // So [3] HINDU TEMPLE..ELEVATOR - {0x1F6DC, 0x1F6DF, prW}, // So [4] WIRELESS..RING BUOY - {0x1F6E0, 0x1F6EA, prN}, // So [11] HAMMER AND WRENCH..NORTHEAST-POINTING AIRPLANE - {0x1F6EB, 0x1F6EC, prW}, // So [2] AIRPLANE DEPARTURE..AIRPLANE ARRIVING - {0x1F6F0, 0x1F6F3, prN}, // So [4] SATELLITE..PASSENGER SHIP - {0x1F6F4, 0x1F6FC, prW}, // So [9] SCOOTER..ROLLER SKATE - {0x1F700, 0x1F776, prN}, // So [119] ALCHEMICAL SYMBOL FOR QUINTESSENCE..LUNAR ECLIPSE - {0x1F77B, 0x1F77F, prN}, // So [5] HAUMEA..ORCUS - {0x1F780, 0x1F7D9, prN}, // So [90] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NINE POINTED WHITE STAR - {0x1F7E0, 0x1F7EB, prW}, // So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE - {0x1F7F0, 0x1F7F0, prW}, // So HEAVY EQUALS SIGN - {0x1F800, 0x1F80B, prN}, // So [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD - {0x1F810, 0x1F847, prN}, // So [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW - {0x1F850, 0x1F859, prN}, // So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW - {0x1F860, 0x1F887, prN}, // So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW - {0x1F890, 0x1F8AD, prN}, // So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS - {0x1F8B0, 0x1F8B1, prN}, // So [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST - {0x1F900, 0x1F90B, prN}, // So [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT - {0x1F90C, 0x1F93A, prW}, // So [47] PINCHED FINGERS..FENCER - {0x1F93B, 0x1F93B, prN}, // So MODERN PENTATHLON - {0x1F93C, 0x1F945, prW}, // So [10] WRESTLERS..GOAL NET - {0x1F946, 0x1F946, prN}, // So RIFLE - {0x1F947, 0x1F9FF, prW}, // So [185] FIRST PLACE MEDAL..NAZAR AMULET - {0x1FA00, 0x1FA53, prN}, // So [84] NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP - {0x1FA60, 0x1FA6D, prN}, // So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER - {0x1FA70, 0x1FA7C, prW}, // So [13] BALLET SHOES..CRUTCH - {0x1FA80, 0x1FA88, prW}, // So [9] YO-YO..FLUTE - {0x1FA90, 0x1FABD, prW}, // So [46] RINGED PLANET..WING - {0x1FABF, 0x1FAC5, prW}, // So [7] GOOSE..PERSON WITH CROWN - {0x1FACE, 0x1FADB, prW}, // So [14] MOOSE..PEA POD - {0x1FAE0, 0x1FAE8, prW}, // So [9] MELTING FACE..SHAKING FACE - {0x1FAF0, 0x1FAF8, prW}, // So [9] HAND WITH INDEX FINGER AND THUMB CROSSED..RIGHTWARDS PUSHING HAND - {0x1FB00, 0x1FB92, prN}, // So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK - {0x1FB94, 0x1FBCA, prN}, // So [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON - {0x1FBF0, 0x1FBF9, prN}, // Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE - {0x20000, 0x2A6DF, prW}, // Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF - {0x2A6E0, 0x2A6FF, prW}, // Cn [32] .. - {0x2A700, 0x2B739, prW}, // Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 - {0x2B73A, 0x2B73F, prW}, // Cn [6] .. - {0x2B740, 0x2B81D, prW}, // Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D - {0x2B81E, 0x2B81F, prW}, // Cn [2] .. - {0x2B820, 0x2CEA1, prW}, // Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 - {0x2CEA2, 0x2CEAF, prW}, // Cn [14] .. - {0x2CEB0, 0x2EBE0, prW}, // Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 - {0x2EBE1, 0x2F7FF, prW}, // Cn [3103] .. - {0x2F800, 0x2FA1D, prW}, // Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D - {0x2FA1E, 0x2FA1F, prW}, // Cn [2] .. - {0x2FA20, 0x2FFFD, prW}, // Cn [1502] .. - {0x30000, 0x3134A, prW}, // Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A - {0x3134B, 0x3134F, prW}, // Cn [5] .. - {0x31350, 0x323AF, prW}, // Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF - {0x323B0, 0x3FFFD, prW}, // Cn [56398] .. - {0xE0001, 0xE0001, prN}, // Cf LANGUAGE TAG - {0xE0020, 0xE007F, prN}, // Cf [96] TAG SPACE..CANCEL TAG - {0xE0100, 0xE01EF, prA}, // Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 - {0xF0000, 0xFFFFD, prA}, // Co [65534] .. - {0x100000, 0x10FFFD, prA}, // Co [65534] .. -} diff --git a/vendor/github.com/rivo/uniseg/emojipresentation.go b/vendor/github.com/rivo/uniseg/emojipresentation.go deleted file mode 100644 index 9b5f499c4a..0000000000 --- a/vendor/github.com/rivo/uniseg/emojipresentation.go +++ /dev/null @@ -1,295 +0,0 @@ -// Code generated via go generate from gen_properties.go. DO NOT EDIT. - -package uniseg - -// emojiPresentation are taken from -// -// and -// https://unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt -// ("Extended_Pictographic" only) -// on September 5, 2023. See https://www.unicode.org/license.html for the Unicode -// license agreement. -var emojiPresentation = [][3]int{ - {0x231A, 0x231B, prEmojiPresentation}, // E0.6 [2] (⌚..⌛) watch..hourglass done - {0x23E9, 0x23EC, prEmojiPresentation}, // E0.6 [4] (⏩..⏬) fast-forward button..fast down button - {0x23F0, 0x23F0, prEmojiPresentation}, // E0.6 [1] (⏰) alarm clock - {0x23F3, 0x23F3, prEmojiPresentation}, // E0.6 [1] (⏳) hourglass not done - {0x25FD, 0x25FE, prEmojiPresentation}, // E0.6 [2] (◽..◾) white medium-small square..black medium-small square - {0x2614, 0x2615, prEmojiPresentation}, // E0.6 [2] (☔..☕) umbrella with rain drops..hot beverage - {0x2648, 0x2653, prEmojiPresentation}, // E0.6 [12] (♈..♓) Aries..Pisces - {0x267F, 0x267F, prEmojiPresentation}, // E0.6 [1] (♿) wheelchair symbol - {0x2693, 0x2693, prEmojiPresentation}, // E0.6 [1] (⚓) anchor - {0x26A1, 0x26A1, prEmojiPresentation}, // E0.6 [1] (⚡) high voltage - {0x26AA, 0x26AB, prEmojiPresentation}, // E0.6 [2] (⚪..⚫) white circle..black circle - {0x26BD, 0x26BE, prEmojiPresentation}, // E0.6 [2] (⚽..⚾) soccer ball..baseball - {0x26C4, 0x26C5, prEmojiPresentation}, // E0.6 [2] (⛄..⛅) snowman without snow..sun behind cloud - {0x26CE, 0x26CE, prEmojiPresentation}, // E0.6 [1] (⛎) Ophiuchus - {0x26D4, 0x26D4, prEmojiPresentation}, // E0.6 [1] (⛔) no entry - {0x26EA, 0x26EA, prEmojiPresentation}, // E0.6 [1] (⛪) church - {0x26F2, 0x26F3, prEmojiPresentation}, // E0.6 [2] (⛲..⛳) fountain..flag in hole - {0x26F5, 0x26F5, prEmojiPresentation}, // E0.6 [1] (⛵) sailboat - {0x26FA, 0x26FA, prEmojiPresentation}, // E0.6 [1] (⛺) tent - {0x26FD, 0x26FD, prEmojiPresentation}, // E0.6 [1] (⛽) fuel pump - {0x2705, 0x2705, prEmojiPresentation}, // E0.6 [1] (✅) check mark button - {0x270A, 0x270B, prEmojiPresentation}, // E0.6 [2] (✊..✋) raised fist..raised hand - {0x2728, 0x2728, prEmojiPresentation}, // E0.6 [1] (✨) sparkles - {0x274C, 0x274C, prEmojiPresentation}, // E0.6 [1] (❌) cross mark - {0x274E, 0x274E, prEmojiPresentation}, // E0.6 [1] (❎) cross mark button - {0x2753, 0x2755, prEmojiPresentation}, // E0.6 [3] (❓..❕) red question mark..white exclamation mark - {0x2757, 0x2757, prEmojiPresentation}, // E0.6 [1] (❗) red exclamation mark - {0x2795, 0x2797, prEmojiPresentation}, // E0.6 [3] (➕..➗) plus..divide - {0x27B0, 0x27B0, prEmojiPresentation}, // E0.6 [1] (➰) curly loop - {0x27BF, 0x27BF, prEmojiPresentation}, // E1.0 [1] (➿) double curly loop - {0x2B1B, 0x2B1C, prEmojiPresentation}, // E0.6 [2] (⬛..⬜) black large square..white large square - {0x2B50, 0x2B50, prEmojiPresentation}, // E0.6 [1] (⭐) star - {0x2B55, 0x2B55, prEmojiPresentation}, // E0.6 [1] (⭕) hollow red circle - {0x1F004, 0x1F004, prEmojiPresentation}, // E0.6 [1] (🀄) mahjong red dragon - {0x1F0CF, 0x1F0CF, prEmojiPresentation}, // E0.6 [1] (🃏) joker - {0x1F18E, 0x1F18E, prEmojiPresentation}, // E0.6 [1] (🆎) AB button (blood type) - {0x1F191, 0x1F19A, prEmojiPresentation}, // E0.6 [10] (🆑..🆚) CL button..VS button - {0x1F1E6, 0x1F1FF, prEmojiPresentation}, // E0.0 [26] (🇦..🇿) regional indicator symbol letter a..regional indicator symbol letter z - {0x1F201, 0x1F201, prEmojiPresentation}, // E0.6 [1] (🈁) Japanese “here” button - {0x1F21A, 0x1F21A, prEmojiPresentation}, // E0.6 [1] (🈚) Japanese “free of charge” button - {0x1F22F, 0x1F22F, prEmojiPresentation}, // E0.6 [1] (🈯) Japanese “reserved” button - {0x1F232, 0x1F236, prEmojiPresentation}, // E0.6 [5] (🈲..🈶) Japanese “prohibited” button..Japanese “not free of charge” button - {0x1F238, 0x1F23A, prEmojiPresentation}, // E0.6 [3] (🈸..🈺) Japanese “application” button..Japanese “open for business” button - {0x1F250, 0x1F251, prEmojiPresentation}, // E0.6 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button - {0x1F300, 0x1F30C, prEmojiPresentation}, // E0.6 [13] (🌀..🌌) cyclone..milky way - {0x1F30D, 0x1F30E, prEmojiPresentation}, // E0.7 [2] (🌍..🌎) globe showing Europe-Africa..globe showing Americas - {0x1F30F, 0x1F30F, prEmojiPresentation}, // E0.6 [1] (🌏) globe showing Asia-Australia - {0x1F310, 0x1F310, prEmojiPresentation}, // E1.0 [1] (🌐) globe with meridians - {0x1F311, 0x1F311, prEmojiPresentation}, // E0.6 [1] (🌑) new moon - {0x1F312, 0x1F312, prEmojiPresentation}, // E1.0 [1] (🌒) waxing crescent moon - {0x1F313, 0x1F315, prEmojiPresentation}, // E0.6 [3] (🌓..🌕) first quarter moon..full moon - {0x1F316, 0x1F318, prEmojiPresentation}, // E1.0 [3] (🌖..🌘) waning gibbous moon..waning crescent moon - {0x1F319, 0x1F319, prEmojiPresentation}, // E0.6 [1] (🌙) crescent moon - {0x1F31A, 0x1F31A, prEmojiPresentation}, // E1.0 [1] (🌚) new moon face - {0x1F31B, 0x1F31B, prEmojiPresentation}, // E0.6 [1] (🌛) first quarter moon face - {0x1F31C, 0x1F31C, prEmojiPresentation}, // E0.7 [1] (🌜) last quarter moon face - {0x1F31D, 0x1F31E, prEmojiPresentation}, // E1.0 [2] (🌝..🌞) full moon face..sun with face - {0x1F31F, 0x1F320, prEmojiPresentation}, // E0.6 [2] (🌟..🌠) glowing star..shooting star - {0x1F32D, 0x1F32F, prEmojiPresentation}, // E1.0 [3] (🌭..🌯) hot dog..burrito - {0x1F330, 0x1F331, prEmojiPresentation}, // E0.6 [2] (🌰..🌱) chestnut..seedling - {0x1F332, 0x1F333, prEmojiPresentation}, // E1.0 [2] (🌲..🌳) evergreen tree..deciduous tree - {0x1F334, 0x1F335, prEmojiPresentation}, // E0.6 [2] (🌴..🌵) palm tree..cactus - {0x1F337, 0x1F34A, prEmojiPresentation}, // E0.6 [20] (🌷..🍊) tulip..tangerine - {0x1F34B, 0x1F34B, prEmojiPresentation}, // E1.0 [1] (🍋) lemon - {0x1F34C, 0x1F34F, prEmojiPresentation}, // E0.6 [4] (🍌..🍏) banana..green apple - {0x1F350, 0x1F350, prEmojiPresentation}, // E1.0 [1] (🍐) pear - {0x1F351, 0x1F37B, prEmojiPresentation}, // E0.6 [43] (🍑..🍻) peach..clinking beer mugs - {0x1F37C, 0x1F37C, prEmojiPresentation}, // E1.0 [1] (🍼) baby bottle - {0x1F37E, 0x1F37F, prEmojiPresentation}, // E1.0 [2] (🍾..🍿) bottle with popping cork..popcorn - {0x1F380, 0x1F393, prEmojiPresentation}, // E0.6 [20] (🎀..🎓) ribbon..graduation cap - {0x1F3A0, 0x1F3C4, prEmojiPresentation}, // E0.6 [37] (🎠..🏄) carousel horse..person surfing - {0x1F3C5, 0x1F3C5, prEmojiPresentation}, // E1.0 [1] (🏅) sports medal - {0x1F3C6, 0x1F3C6, prEmojiPresentation}, // E0.6 [1] (🏆) trophy - {0x1F3C7, 0x1F3C7, prEmojiPresentation}, // E1.0 [1] (🏇) horse racing - {0x1F3C8, 0x1F3C8, prEmojiPresentation}, // E0.6 [1] (🏈) american football - {0x1F3C9, 0x1F3C9, prEmojiPresentation}, // E1.0 [1] (🏉) rugby football - {0x1F3CA, 0x1F3CA, prEmojiPresentation}, // E0.6 [1] (🏊) person swimming - {0x1F3CF, 0x1F3D3, prEmojiPresentation}, // E1.0 [5] (🏏..🏓) cricket game..ping pong - {0x1F3E0, 0x1F3E3, prEmojiPresentation}, // E0.6 [4] (🏠..🏣) house..Japanese post office - {0x1F3E4, 0x1F3E4, prEmojiPresentation}, // E1.0 [1] (🏤) post office - {0x1F3E5, 0x1F3F0, prEmojiPresentation}, // E0.6 [12] (🏥..🏰) hospital..castle - {0x1F3F4, 0x1F3F4, prEmojiPresentation}, // E1.0 [1] (🏴) black flag - {0x1F3F8, 0x1F407, prEmojiPresentation}, // E1.0 [16] (🏸..🐇) badminton..rabbit - {0x1F408, 0x1F408, prEmojiPresentation}, // E0.7 [1] (🐈) cat - {0x1F409, 0x1F40B, prEmojiPresentation}, // E1.0 [3] (🐉..🐋) dragon..whale - {0x1F40C, 0x1F40E, prEmojiPresentation}, // E0.6 [3] (🐌..🐎) snail..horse - {0x1F40F, 0x1F410, prEmojiPresentation}, // E1.0 [2] (🐏..🐐) ram..goat - {0x1F411, 0x1F412, prEmojiPresentation}, // E0.6 [2] (🐑..🐒) ewe..monkey - {0x1F413, 0x1F413, prEmojiPresentation}, // E1.0 [1] (🐓) rooster - {0x1F414, 0x1F414, prEmojiPresentation}, // E0.6 [1] (🐔) chicken - {0x1F415, 0x1F415, prEmojiPresentation}, // E0.7 [1] (🐕) dog - {0x1F416, 0x1F416, prEmojiPresentation}, // E1.0 [1] (🐖) pig - {0x1F417, 0x1F429, prEmojiPresentation}, // E0.6 [19] (🐗..🐩) boar..poodle - {0x1F42A, 0x1F42A, prEmojiPresentation}, // E1.0 [1] (🐪) camel - {0x1F42B, 0x1F43E, prEmojiPresentation}, // E0.6 [20] (🐫..🐾) two-hump camel..paw prints - {0x1F440, 0x1F440, prEmojiPresentation}, // E0.6 [1] (👀) eyes - {0x1F442, 0x1F464, prEmojiPresentation}, // E0.6 [35] (👂..👤) ear..bust in silhouette - {0x1F465, 0x1F465, prEmojiPresentation}, // E1.0 [1] (👥) busts in silhouette - {0x1F466, 0x1F46B, prEmojiPresentation}, // E0.6 [6] (👦..👫) boy..woman and man holding hands - {0x1F46C, 0x1F46D, prEmojiPresentation}, // E1.0 [2] (👬..👭) men holding hands..women holding hands - {0x1F46E, 0x1F4AC, prEmojiPresentation}, // E0.6 [63] (👮..💬) police officer..speech balloon - {0x1F4AD, 0x1F4AD, prEmojiPresentation}, // E1.0 [1] (💭) thought balloon - {0x1F4AE, 0x1F4B5, prEmojiPresentation}, // E0.6 [8] (💮..💵) white flower..dollar banknote - {0x1F4B6, 0x1F4B7, prEmojiPresentation}, // E1.0 [2] (💶..💷) euro banknote..pound banknote - {0x1F4B8, 0x1F4EB, prEmojiPresentation}, // E0.6 [52] (💸..📫) money with wings..closed mailbox with raised flag - {0x1F4EC, 0x1F4ED, prEmojiPresentation}, // E0.7 [2] (📬..📭) open mailbox with raised flag..open mailbox with lowered flag - {0x1F4EE, 0x1F4EE, prEmojiPresentation}, // E0.6 [1] (📮) postbox - {0x1F4EF, 0x1F4EF, prEmojiPresentation}, // E1.0 [1] (📯) postal horn - {0x1F4F0, 0x1F4F4, prEmojiPresentation}, // E0.6 [5] (📰..📴) newspaper..mobile phone off - {0x1F4F5, 0x1F4F5, prEmojiPresentation}, // E1.0 [1] (📵) no mobile phones - {0x1F4F6, 0x1F4F7, prEmojiPresentation}, // E0.6 [2] (📶..📷) antenna bars..camera - {0x1F4F8, 0x1F4F8, prEmojiPresentation}, // E1.0 [1] (📸) camera with flash - {0x1F4F9, 0x1F4FC, prEmojiPresentation}, // E0.6 [4] (📹..📼) video camera..videocassette - {0x1F4FF, 0x1F502, prEmojiPresentation}, // E1.0 [4] (📿..🔂) prayer beads..repeat single button - {0x1F503, 0x1F503, prEmojiPresentation}, // E0.6 [1] (🔃) clockwise vertical arrows - {0x1F504, 0x1F507, prEmojiPresentation}, // E1.0 [4] (🔄..🔇) counterclockwise arrows button..muted speaker - {0x1F508, 0x1F508, prEmojiPresentation}, // E0.7 [1] (🔈) speaker low volume - {0x1F509, 0x1F509, prEmojiPresentation}, // E1.0 [1] (🔉) speaker medium volume - {0x1F50A, 0x1F514, prEmojiPresentation}, // E0.6 [11] (🔊..🔔) speaker high volume..bell - {0x1F515, 0x1F515, prEmojiPresentation}, // E1.0 [1] (🔕) bell with slash - {0x1F516, 0x1F52B, prEmojiPresentation}, // E0.6 [22] (🔖..🔫) bookmark..water pistol - {0x1F52C, 0x1F52D, prEmojiPresentation}, // E1.0 [2] (🔬..🔭) microscope..telescope - {0x1F52E, 0x1F53D, prEmojiPresentation}, // E0.6 [16] (🔮..🔽) crystal ball..downwards button - {0x1F54B, 0x1F54E, prEmojiPresentation}, // E1.0 [4] (🕋..🕎) kaaba..menorah - {0x1F550, 0x1F55B, prEmojiPresentation}, // E0.6 [12] (🕐..🕛) one o’clock..twelve o’clock - {0x1F55C, 0x1F567, prEmojiPresentation}, // E0.7 [12] (🕜..🕧) one-thirty..twelve-thirty - {0x1F57A, 0x1F57A, prEmojiPresentation}, // E3.0 [1] (🕺) man dancing - {0x1F595, 0x1F596, prEmojiPresentation}, // E1.0 [2] (🖕..🖖) middle finger..vulcan salute - {0x1F5A4, 0x1F5A4, prEmojiPresentation}, // E3.0 [1] (🖤) black heart - {0x1F5FB, 0x1F5FF, prEmojiPresentation}, // E0.6 [5] (🗻..🗿) mount fuji..moai - {0x1F600, 0x1F600, prEmojiPresentation}, // E1.0 [1] (😀) grinning face - {0x1F601, 0x1F606, prEmojiPresentation}, // E0.6 [6] (😁..😆) beaming face with smiling eyes..grinning squinting face - {0x1F607, 0x1F608, prEmojiPresentation}, // E1.0 [2] (😇..😈) smiling face with halo..smiling face with horns - {0x1F609, 0x1F60D, prEmojiPresentation}, // E0.6 [5] (😉..😍) winking face..smiling face with heart-eyes - {0x1F60E, 0x1F60E, prEmojiPresentation}, // E1.0 [1] (😎) smiling face with sunglasses - {0x1F60F, 0x1F60F, prEmojiPresentation}, // E0.6 [1] (😏) smirking face - {0x1F610, 0x1F610, prEmojiPresentation}, // E0.7 [1] (😐) neutral face - {0x1F611, 0x1F611, prEmojiPresentation}, // E1.0 [1] (😑) expressionless face - {0x1F612, 0x1F614, prEmojiPresentation}, // E0.6 [3] (😒..😔) unamused face..pensive face - {0x1F615, 0x1F615, prEmojiPresentation}, // E1.0 [1] (😕) confused face - {0x1F616, 0x1F616, prEmojiPresentation}, // E0.6 [1] (😖) confounded face - {0x1F617, 0x1F617, prEmojiPresentation}, // E1.0 [1] (😗) kissing face - {0x1F618, 0x1F618, prEmojiPresentation}, // E0.6 [1] (😘) face blowing a kiss - {0x1F619, 0x1F619, prEmojiPresentation}, // E1.0 [1] (😙) kissing face with smiling eyes - {0x1F61A, 0x1F61A, prEmojiPresentation}, // E0.6 [1] (😚) kissing face with closed eyes - {0x1F61B, 0x1F61B, prEmojiPresentation}, // E1.0 [1] (😛) face with tongue - {0x1F61C, 0x1F61E, prEmojiPresentation}, // E0.6 [3] (😜..😞) winking face with tongue..disappointed face - {0x1F61F, 0x1F61F, prEmojiPresentation}, // E1.0 [1] (😟) worried face - {0x1F620, 0x1F625, prEmojiPresentation}, // E0.6 [6] (😠..😥) angry face..sad but relieved face - {0x1F626, 0x1F627, prEmojiPresentation}, // E1.0 [2] (😦..😧) frowning face with open mouth..anguished face - {0x1F628, 0x1F62B, prEmojiPresentation}, // E0.6 [4] (😨..😫) fearful face..tired face - {0x1F62C, 0x1F62C, prEmojiPresentation}, // E1.0 [1] (😬) grimacing face - {0x1F62D, 0x1F62D, prEmojiPresentation}, // E0.6 [1] (😭) loudly crying face - {0x1F62E, 0x1F62F, prEmojiPresentation}, // E1.0 [2] (😮..😯) face with open mouth..hushed face - {0x1F630, 0x1F633, prEmojiPresentation}, // E0.6 [4] (😰..😳) anxious face with sweat..flushed face - {0x1F634, 0x1F634, prEmojiPresentation}, // E1.0 [1] (😴) sleeping face - {0x1F635, 0x1F635, prEmojiPresentation}, // E0.6 [1] (😵) face with crossed-out eyes - {0x1F636, 0x1F636, prEmojiPresentation}, // E1.0 [1] (😶) face without mouth - {0x1F637, 0x1F640, prEmojiPresentation}, // E0.6 [10] (😷..🙀) face with medical mask..weary cat - {0x1F641, 0x1F644, prEmojiPresentation}, // E1.0 [4] (🙁..🙄) slightly frowning face..face with rolling eyes - {0x1F645, 0x1F64F, prEmojiPresentation}, // E0.6 [11] (🙅..🙏) person gesturing NO..folded hands - {0x1F680, 0x1F680, prEmojiPresentation}, // E0.6 [1] (🚀) rocket - {0x1F681, 0x1F682, prEmojiPresentation}, // E1.0 [2] (🚁..🚂) helicopter..locomotive - {0x1F683, 0x1F685, prEmojiPresentation}, // E0.6 [3] (🚃..🚅) railway car..bullet train - {0x1F686, 0x1F686, prEmojiPresentation}, // E1.0 [1] (🚆) train - {0x1F687, 0x1F687, prEmojiPresentation}, // E0.6 [1] (🚇) metro - {0x1F688, 0x1F688, prEmojiPresentation}, // E1.0 [1] (🚈) light rail - {0x1F689, 0x1F689, prEmojiPresentation}, // E0.6 [1] (🚉) station - {0x1F68A, 0x1F68B, prEmojiPresentation}, // E1.0 [2] (🚊..🚋) tram..tram car - {0x1F68C, 0x1F68C, prEmojiPresentation}, // E0.6 [1] (🚌) bus - {0x1F68D, 0x1F68D, prEmojiPresentation}, // E0.7 [1] (🚍) oncoming bus - {0x1F68E, 0x1F68E, prEmojiPresentation}, // E1.0 [1] (🚎) trolleybus - {0x1F68F, 0x1F68F, prEmojiPresentation}, // E0.6 [1] (🚏) bus stop - {0x1F690, 0x1F690, prEmojiPresentation}, // E1.0 [1] (🚐) minibus - {0x1F691, 0x1F693, prEmojiPresentation}, // E0.6 [3] (🚑..🚓) ambulance..police car - {0x1F694, 0x1F694, prEmojiPresentation}, // E0.7 [1] (🚔) oncoming police car - {0x1F695, 0x1F695, prEmojiPresentation}, // E0.6 [1] (🚕) taxi - {0x1F696, 0x1F696, prEmojiPresentation}, // E1.0 [1] (🚖) oncoming taxi - {0x1F697, 0x1F697, prEmojiPresentation}, // E0.6 [1] (🚗) automobile - {0x1F698, 0x1F698, prEmojiPresentation}, // E0.7 [1] (🚘) oncoming automobile - {0x1F699, 0x1F69A, prEmojiPresentation}, // E0.6 [2] (🚙..🚚) sport utility vehicle..delivery truck - {0x1F69B, 0x1F6A1, prEmojiPresentation}, // E1.0 [7] (🚛..🚡) articulated lorry..aerial tramway - {0x1F6A2, 0x1F6A2, prEmojiPresentation}, // E0.6 [1] (🚢) ship - {0x1F6A3, 0x1F6A3, prEmojiPresentation}, // E1.0 [1] (🚣) person rowing boat - {0x1F6A4, 0x1F6A5, prEmojiPresentation}, // E0.6 [2] (🚤..🚥) speedboat..horizontal traffic light - {0x1F6A6, 0x1F6A6, prEmojiPresentation}, // E1.0 [1] (🚦) vertical traffic light - {0x1F6A7, 0x1F6AD, prEmojiPresentation}, // E0.6 [7] (🚧..🚭) construction..no smoking - {0x1F6AE, 0x1F6B1, prEmojiPresentation}, // E1.0 [4] (🚮..🚱) litter in bin sign..non-potable water - {0x1F6B2, 0x1F6B2, prEmojiPresentation}, // E0.6 [1] (🚲) bicycle - {0x1F6B3, 0x1F6B5, prEmojiPresentation}, // E1.0 [3] (🚳..🚵) no bicycles..person mountain biking - {0x1F6B6, 0x1F6B6, prEmojiPresentation}, // E0.6 [1] (🚶) person walking - {0x1F6B7, 0x1F6B8, prEmojiPresentation}, // E1.0 [2] (🚷..🚸) no pedestrians..children crossing - {0x1F6B9, 0x1F6BE, prEmojiPresentation}, // E0.6 [6] (🚹..🚾) men’s room..water closet - {0x1F6BF, 0x1F6BF, prEmojiPresentation}, // E1.0 [1] (🚿) shower - {0x1F6C0, 0x1F6C0, prEmojiPresentation}, // E0.6 [1] (🛀) person taking bath - {0x1F6C1, 0x1F6C5, prEmojiPresentation}, // E1.0 [5] (🛁..🛅) bathtub..left luggage - {0x1F6CC, 0x1F6CC, prEmojiPresentation}, // E1.0 [1] (🛌) person in bed - {0x1F6D0, 0x1F6D0, prEmojiPresentation}, // E1.0 [1] (🛐) place of worship - {0x1F6D1, 0x1F6D2, prEmojiPresentation}, // E3.0 [2] (🛑..🛒) stop sign..shopping cart - {0x1F6D5, 0x1F6D5, prEmojiPresentation}, // E12.0 [1] (🛕) hindu temple - {0x1F6D6, 0x1F6D7, prEmojiPresentation}, // E13.0 [2] (🛖..🛗) hut..elevator - {0x1F6DC, 0x1F6DC, prEmojiPresentation}, // E15.0 [1] (🛜) wireless - {0x1F6DD, 0x1F6DF, prEmojiPresentation}, // E14.0 [3] (🛝..🛟) playground slide..ring buoy - {0x1F6EB, 0x1F6EC, prEmojiPresentation}, // E1.0 [2] (🛫..🛬) airplane departure..airplane arrival - {0x1F6F4, 0x1F6F6, prEmojiPresentation}, // E3.0 [3] (🛴..🛶) kick scooter..canoe - {0x1F6F7, 0x1F6F8, prEmojiPresentation}, // E5.0 [2] (🛷..🛸) sled..flying saucer - {0x1F6F9, 0x1F6F9, prEmojiPresentation}, // E11.0 [1] (🛹) skateboard - {0x1F6FA, 0x1F6FA, prEmojiPresentation}, // E12.0 [1] (🛺) auto rickshaw - {0x1F6FB, 0x1F6FC, prEmojiPresentation}, // E13.0 [2] (🛻..🛼) pickup truck..roller skate - {0x1F7E0, 0x1F7EB, prEmojiPresentation}, // E12.0 [12] (🟠..🟫) orange circle..brown square - {0x1F7F0, 0x1F7F0, prEmojiPresentation}, // E14.0 [1] (🟰) heavy equals sign - {0x1F90C, 0x1F90C, prEmojiPresentation}, // E13.0 [1] (🤌) pinched fingers - {0x1F90D, 0x1F90F, prEmojiPresentation}, // E12.0 [3] (🤍..🤏) white heart..pinching hand - {0x1F910, 0x1F918, prEmojiPresentation}, // E1.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns - {0x1F919, 0x1F91E, prEmojiPresentation}, // E3.0 [6] (🤙..🤞) call me hand..crossed fingers - {0x1F91F, 0x1F91F, prEmojiPresentation}, // E5.0 [1] (🤟) love-you gesture - {0x1F920, 0x1F927, prEmojiPresentation}, // E3.0 [8] (🤠..🤧) cowboy hat face..sneezing face - {0x1F928, 0x1F92F, prEmojiPresentation}, // E5.0 [8] (🤨..🤯) face with raised eyebrow..exploding head - {0x1F930, 0x1F930, prEmojiPresentation}, // E3.0 [1] (🤰) pregnant woman - {0x1F931, 0x1F932, prEmojiPresentation}, // E5.0 [2] (🤱..🤲) breast-feeding..palms up together - {0x1F933, 0x1F93A, prEmojiPresentation}, // E3.0 [8] (🤳..🤺) selfie..person fencing - {0x1F93C, 0x1F93E, prEmojiPresentation}, // E3.0 [3] (🤼..🤾) people wrestling..person playing handball - {0x1F93F, 0x1F93F, prEmojiPresentation}, // E12.0 [1] (🤿) diving mask - {0x1F940, 0x1F945, prEmojiPresentation}, // E3.0 [6] (🥀..🥅) wilted flower..goal net - {0x1F947, 0x1F94B, prEmojiPresentation}, // E3.0 [5] (🥇..🥋) 1st place medal..martial arts uniform - {0x1F94C, 0x1F94C, prEmojiPresentation}, // E5.0 [1] (🥌) curling stone - {0x1F94D, 0x1F94F, prEmojiPresentation}, // E11.0 [3] (🥍..🥏) lacrosse..flying disc - {0x1F950, 0x1F95E, prEmojiPresentation}, // E3.0 [15] (🥐..🥞) croissant..pancakes - {0x1F95F, 0x1F96B, prEmojiPresentation}, // E5.0 [13] (🥟..🥫) dumpling..canned food - {0x1F96C, 0x1F970, prEmojiPresentation}, // E11.0 [5] (🥬..🥰) leafy green..smiling face with hearts - {0x1F971, 0x1F971, prEmojiPresentation}, // E12.0 [1] (🥱) yawning face - {0x1F972, 0x1F972, prEmojiPresentation}, // E13.0 [1] (🥲) smiling face with tear - {0x1F973, 0x1F976, prEmojiPresentation}, // E11.0 [4] (🥳..🥶) partying face..cold face - {0x1F977, 0x1F978, prEmojiPresentation}, // E13.0 [2] (🥷..🥸) ninja..disguised face - {0x1F979, 0x1F979, prEmojiPresentation}, // E14.0 [1] (🥹) face holding back tears - {0x1F97A, 0x1F97A, prEmojiPresentation}, // E11.0 [1] (🥺) pleading face - {0x1F97B, 0x1F97B, prEmojiPresentation}, // E12.0 [1] (🥻) sari - {0x1F97C, 0x1F97F, prEmojiPresentation}, // E11.0 [4] (🥼..🥿) lab coat..flat shoe - {0x1F980, 0x1F984, prEmojiPresentation}, // E1.0 [5] (🦀..🦄) crab..unicorn - {0x1F985, 0x1F991, prEmojiPresentation}, // E3.0 [13] (🦅..🦑) eagle..squid - {0x1F992, 0x1F997, prEmojiPresentation}, // E5.0 [6] (🦒..🦗) giraffe..cricket - {0x1F998, 0x1F9A2, prEmojiPresentation}, // E11.0 [11] (🦘..🦢) kangaroo..swan - {0x1F9A3, 0x1F9A4, prEmojiPresentation}, // E13.0 [2] (🦣..🦤) mammoth..dodo - {0x1F9A5, 0x1F9AA, prEmojiPresentation}, // E12.0 [6] (🦥..🦪) sloth..oyster - {0x1F9AB, 0x1F9AD, prEmojiPresentation}, // E13.0 [3] (🦫..🦭) beaver..seal - {0x1F9AE, 0x1F9AF, prEmojiPresentation}, // E12.0 [2] (🦮..🦯) guide dog..white cane - {0x1F9B0, 0x1F9B9, prEmojiPresentation}, // E11.0 [10] (🦰..🦹) red hair..supervillain - {0x1F9BA, 0x1F9BF, prEmojiPresentation}, // E12.0 [6] (🦺..🦿) safety vest..mechanical leg - {0x1F9C0, 0x1F9C0, prEmojiPresentation}, // E1.0 [1] (🧀) cheese wedge - {0x1F9C1, 0x1F9C2, prEmojiPresentation}, // E11.0 [2] (🧁..🧂) cupcake..salt - {0x1F9C3, 0x1F9CA, prEmojiPresentation}, // E12.0 [8] (🧃..🧊) beverage box..ice - {0x1F9CB, 0x1F9CB, prEmojiPresentation}, // E13.0 [1] (🧋) bubble tea - {0x1F9CC, 0x1F9CC, prEmojiPresentation}, // E14.0 [1] (🧌) troll - {0x1F9CD, 0x1F9CF, prEmojiPresentation}, // E12.0 [3] (🧍..🧏) person standing..deaf person - {0x1F9D0, 0x1F9E6, prEmojiPresentation}, // E5.0 [23] (🧐..🧦) face with monocle..socks - {0x1F9E7, 0x1F9FF, prEmojiPresentation}, // E11.0 [25] (🧧..🧿) red envelope..nazar amulet - {0x1FA70, 0x1FA73, prEmojiPresentation}, // E12.0 [4] (🩰..🩳) ballet shoes..shorts - {0x1FA74, 0x1FA74, prEmojiPresentation}, // E13.0 [1] (🩴) thong sandal - {0x1FA75, 0x1FA77, prEmojiPresentation}, // E15.0 [3] (🩵..🩷) light blue heart..pink heart - {0x1FA78, 0x1FA7A, prEmojiPresentation}, // E12.0 [3] (🩸..🩺) drop of blood..stethoscope - {0x1FA7B, 0x1FA7C, prEmojiPresentation}, // E14.0 [2] (🩻..🩼) x-ray..crutch - {0x1FA80, 0x1FA82, prEmojiPresentation}, // E12.0 [3] (🪀..🪂) yo-yo..parachute - {0x1FA83, 0x1FA86, prEmojiPresentation}, // E13.0 [4] (🪃..🪆) boomerang..nesting dolls - {0x1FA87, 0x1FA88, prEmojiPresentation}, // E15.0 [2] (🪇..🪈) maracas..flute - {0x1FA90, 0x1FA95, prEmojiPresentation}, // E12.0 [6] (🪐..🪕) ringed planet..banjo - {0x1FA96, 0x1FAA8, prEmojiPresentation}, // E13.0 [19] (🪖..🪨) military helmet..rock - {0x1FAA9, 0x1FAAC, prEmojiPresentation}, // E14.0 [4] (🪩..🪬) mirror ball..hamsa - {0x1FAAD, 0x1FAAF, prEmojiPresentation}, // E15.0 [3] (🪭..🪯) folding hand fan..khanda - {0x1FAB0, 0x1FAB6, prEmojiPresentation}, // E13.0 [7] (🪰..🪶) fly..feather - {0x1FAB7, 0x1FABA, prEmojiPresentation}, // E14.0 [4] (🪷..🪺) lotus..nest with eggs - {0x1FABB, 0x1FABD, prEmojiPresentation}, // E15.0 [3] (🪻..🪽) hyacinth..wing - {0x1FABF, 0x1FABF, prEmojiPresentation}, // E15.0 [1] (🪿) goose - {0x1FAC0, 0x1FAC2, prEmojiPresentation}, // E13.0 [3] (🫀..🫂) anatomical heart..people hugging - {0x1FAC3, 0x1FAC5, prEmojiPresentation}, // E14.0 [3] (🫃..🫅) pregnant man..person with crown - {0x1FACE, 0x1FACF, prEmojiPresentation}, // E15.0 [2] (🫎..🫏) moose..donkey - {0x1FAD0, 0x1FAD6, prEmojiPresentation}, // E13.0 [7] (🫐..🫖) blueberries..teapot - {0x1FAD7, 0x1FAD9, prEmojiPresentation}, // E14.0 [3] (🫗..🫙) pouring liquid..jar - {0x1FADA, 0x1FADB, prEmojiPresentation}, // E15.0 [2] (🫚..🫛) ginger root..pea pod - {0x1FAE0, 0x1FAE7, prEmojiPresentation}, // E14.0 [8] (🫠..🫧) melting face..bubbles - {0x1FAE8, 0x1FAE8, prEmojiPresentation}, // E15.0 [1] (🫨) shaking face - {0x1FAF0, 0x1FAF6, prEmojiPresentation}, // E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands - {0x1FAF7, 0x1FAF8, prEmojiPresentation}, // E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand -} diff --git a/vendor/github.com/rivo/uniseg/gen_breaktest.go b/vendor/github.com/rivo/uniseg/gen_breaktest.go deleted file mode 100644 index 6bfbeb5e7f..0000000000 --- a/vendor/github.com/rivo/uniseg/gen_breaktest.go +++ /dev/null @@ -1,215 +0,0 @@ -//go:build generate - -// This program generates a Go containing a slice of test cases based on the -// Unicode Character Database auxiliary data files. The command line arguments -// are as follows: -// -// 1. The name of the Unicode data file (just the filename, without extension). -// 2. The name of the locally generated Go file. -// 3. The name of the slice containing the test cases. -// 4. The name of the generator, for logging purposes. -// -//go:generate go run gen_breaktest.go GraphemeBreakTest graphemebreak_test.go graphemeBreakTestCases graphemes -//go:generate go run gen_breaktest.go WordBreakTest wordbreak_test.go wordBreakTestCases words -//go:generate go run gen_breaktest.go SentenceBreakTest sentencebreak_test.go sentenceBreakTestCases sentences -//go:generate go run gen_breaktest.go LineBreakTest linebreak_test.go lineBreakTestCases lines - -package main - -import ( - "bufio" - "bytes" - "errors" - "fmt" - "go/format" - "io/ioutil" - "log" - "net/http" - "os" - "time" -) - -// We want to test against a specific version rather than the latest. When the -// package is upgraded to a new version, change these to generate new tests. -const ( - testCaseURL = `https://www.unicode.org/Public/15.0.0/ucd/auxiliary/%s.txt` -) - -func main() { - if len(os.Args) < 5 { - fmt.Println("Not enough arguments, see code for details") - os.Exit(1) - } - - log.SetPrefix("gen_breaktest (" + os.Args[4] + "): ") - log.SetFlags(0) - - // Read text of testcases and parse into Go source code. - src, err := parse(fmt.Sprintf(testCaseURL, os.Args[1])) - if err != nil { - log.Fatal(err) - } - - // Format the Go code. - formatted, err := format.Source(src) - if err != nil { - log.Fatalln("gofmt:", err) - } - - // Write it out. - log.Print("Writing to ", os.Args[2]) - if err := ioutil.WriteFile(os.Args[2], formatted, 0644); err != nil { - log.Fatal(err) - } -} - -// parse reads a break text file, either from a local file or from a URL. It -// parses the file data into Go source code representing the test cases. -func parse(url string) ([]byte, error) { - log.Printf("Parsing %s", url) - res, err := http.Get(url) - if err != nil { - return nil, err - } - body := res.Body - defer body.Close() - - buf := new(bytes.Buffer) - buf.Grow(120 << 10) - buf.WriteString(`// Code generated via go generate from gen_breaktest.go. DO NOT EDIT. - -package uniseg - -// ` + os.Args[3] + ` are Grapheme testcases taken from -// ` + url + ` -// on ` + time.Now().Format("January 2, 2006") + `. See -// https://www.unicode.org/license.html for the Unicode license agreement. -var ` + os.Args[3] + ` = []testCase { -`) - - sc := bufio.NewScanner(body) - num := 1 - var line []byte - original := make([]byte, 0, 64) - expected := make([]byte, 0, 64) - for sc.Scan() { - num++ - line = sc.Bytes() - if len(line) == 0 || line[0] == '#' { - continue - } - var comment []byte - if i := bytes.IndexByte(line, '#'); i >= 0 { - comment = bytes.TrimSpace(line[i+1:]) - line = bytes.TrimSpace(line[:i]) - } - original, expected, err := parseRuneSequence(line, original[:0], expected[:0]) - if err != nil { - return nil, fmt.Errorf(`line %d: %v: %q`, num, err, line) - } - fmt.Fprintf(buf, "\t{original: \"%s\", expected: %s}, // %s\n", original, expected, comment) - } - if err := sc.Err(); err != nil { - return nil, err - } - - // Check for final "# EOF", useful check if we're streaming via HTTP - if !bytes.Equal(line, []byte("# EOF")) { - return nil, fmt.Errorf(`line %d: exected "# EOF" as final line, got %q`, num, line) - } - buf.WriteString("}\n") - return buf.Bytes(), nil -} - -// Used by parseRuneSequence to match input via bytes.HasPrefix. -var ( - prefixBreak = []byte("÷ ") - prefixDontBreak = []byte("× ") - breakOk = []byte("÷") - breakNo = []byte("×") -) - -// parseRuneSequence parses a rune + breaking opportunity sequence from b -// and appends the Go code for testcase.original to orig -// and appends the Go code for testcase.expected to exp. -// It retuns the new orig and exp slices. -// -// E.g. for the input b="÷ 0020 × 0308 ÷ 1F1E6 ÷" -// it will append -// -// "\u0020\u0308\U0001F1E6" -// -// and "[][]rune{{0x0020,0x0308},{0x1F1E6},}" -// to orig and exp respectively. -// -// The formatting of exp is expected to be cleaned up by gofmt or format.Source. -// Note we explicitly require the sequence to start with ÷ and we implicitly -// require it to end with ÷. -func parseRuneSequence(b, orig, exp []byte) ([]byte, []byte, error) { - // Check for and remove first ÷ or ×. - if !bytes.HasPrefix(b, prefixBreak) && !bytes.HasPrefix(b, prefixDontBreak) { - return nil, nil, errors.New("expected ÷ or × as first character") - } - if bytes.HasPrefix(b, prefixBreak) { - b = b[len(prefixBreak):] - } else { - b = b[len(prefixDontBreak):] - } - - boundary := true - exp = append(exp, "[][]rune{"...) - for len(b) > 0 { - if boundary { - exp = append(exp, '{') - } - exp = append(exp, "0x"...) - // Find end of hex digits. - var i int - for i = 0; i < len(b) && b[i] != ' '; i++ { - if d := b[i]; ('0' <= d || d <= '9') || - ('A' <= d || d <= 'F') || - ('a' <= d || d <= 'f') { - continue - } - return nil, nil, errors.New("bad hex digit") - } - switch i { - case 4: - orig = append(orig, "\\u"...) - case 5: - orig = append(orig, "\\U000"...) - default: - return nil, nil, errors.New("unsupport code point hex length") - } - orig = append(orig, b[:i]...) - exp = append(exp, b[:i]...) - b = b[i:] - - // Check for space between hex and ÷ or ×. - if len(b) < 1 || b[0] != ' ' { - return nil, nil, errors.New("bad input") - } - b = b[1:] - - // Check for next boundary. - switch { - case bytes.HasPrefix(b, breakOk): - boundary = true - b = b[len(breakOk):] - case bytes.HasPrefix(b, breakNo): - boundary = false - b = b[len(breakNo):] - default: - return nil, nil, errors.New("missing ÷ or ×") - } - if boundary { - exp = append(exp, '}') - } - exp = append(exp, ',') - if len(b) > 0 && b[0] == ' ' { - b = b[1:] - } - } - exp = append(exp, '}') - return orig, exp, nil -} diff --git a/vendor/github.com/rivo/uniseg/gen_properties.go b/vendor/github.com/rivo/uniseg/gen_properties.go deleted file mode 100644 index 8992d2c5f8..0000000000 --- a/vendor/github.com/rivo/uniseg/gen_properties.go +++ /dev/null @@ -1,261 +0,0 @@ -//go:build generate - -// This program generates a property file in Go file from Unicode Character -// Database auxiliary data files. The command line arguments are as follows: -// -// 1. The name of the Unicode data file (just the filename, without extension). -// Can be "-" (to skip) if the emoji flag is included. -// 2. The name of the locally generated Go file. -// 3. The name of the slice mapping code points to properties. -// 4. The name of the generator, for logging purposes. -// 5. (Optional) Flags, comma-separated. The following flags are available: -// - "emojis=": include the specified emoji properties (e.g. -// "Extended_Pictographic"). -// - "gencat": include general category properties. -// -//go:generate go run gen_properties.go auxiliary/GraphemeBreakProperty graphemeproperties.go graphemeCodePoints graphemes emojis=Extended_Pictographic -//go:generate go run gen_properties.go auxiliary/WordBreakProperty wordproperties.go workBreakCodePoints words emojis=Extended_Pictographic -//go:generate go run gen_properties.go auxiliary/SentenceBreakProperty sentenceproperties.go sentenceBreakCodePoints sentences -//go:generate go run gen_properties.go LineBreak lineproperties.go lineBreakCodePoints lines gencat -//go:generate go run gen_properties.go EastAsianWidth eastasianwidth.go eastAsianWidth eastasianwidth -//go:generate go run gen_properties.go - emojipresentation.go emojiPresentation emojipresentation emojis=Emoji_Presentation -package main - -import ( - "bufio" - "bytes" - "errors" - "fmt" - "go/format" - "io/ioutil" - "log" - "net/http" - "os" - "regexp" - "sort" - "strconv" - "strings" - "time" -) - -// We want to test against a specific version rather than the latest. When the -// package is upgraded to a new version, change these to generate new tests. -const ( - propertyURL = `https://www.unicode.org/Public/15.0.0/ucd/%s.txt` - emojiURL = `https://unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt` -) - -// The regular expression for a line containing a code point range property. -var propertyPattern = regexp.MustCompile(`^([0-9A-F]{4,6})(\.\.([0-9A-F]{4,6}))?\s*;\s*([A-Za-z0-9_]+)\s*#\s(.+)$`) - -func main() { - if len(os.Args) < 5 { - fmt.Println("Not enough arguments, see code for details") - os.Exit(1) - } - - log.SetPrefix("gen_properties (" + os.Args[4] + "): ") - log.SetFlags(0) - - // Parse flags. - flags := make(map[string]string) - if len(os.Args) >= 6 { - for _, flag := range strings.Split(os.Args[5], ",") { - flagFields := strings.Split(flag, "=") - if len(flagFields) == 1 { - flags[flagFields[0]] = "yes" - } else { - flags[flagFields[0]] = flagFields[1] - } - } - } - - // Parse the text file and generate Go source code from it. - _, includeGeneralCategory := flags["gencat"] - var mainURL string - if os.Args[1] != "-" { - mainURL = fmt.Sprintf(propertyURL, os.Args[1]) - } - src, err := parse(mainURL, flags["emojis"], includeGeneralCategory) - if err != nil { - log.Fatal(err) - } - - // Format the Go code. - formatted, err := format.Source([]byte(src)) - if err != nil { - log.Fatal("gofmt:", err) - } - - // Save it to the (local) target file. - log.Print("Writing to ", os.Args[2]) - if err := ioutil.WriteFile(os.Args[2], formatted, 0644); err != nil { - log.Fatal(err) - } -} - -// parse parses the Unicode Properties text files located at the given URLs and -// returns their equivalent Go source code to be used in the uniseg package. If -// "emojiProperty" is not an empty string, emoji code points for that emoji -// property (e.g. "Extended_Pictographic") will be included. In those cases, you -// may pass an empty "propertyURL" to skip parsing the main properties file. If -// "includeGeneralCategory" is true, the Unicode General Category property will -// be extracted from the comments and included in the output. -func parse(propertyURL, emojiProperty string, includeGeneralCategory bool) (string, error) { - if propertyURL == "" && emojiProperty == "" { - return "", errors.New("no properties to parse") - } - - // Temporary buffer to hold properties. - var properties [][4]string - - // Open the first URL. - if propertyURL != "" { - log.Printf("Parsing %s", propertyURL) - res, err := http.Get(propertyURL) - if err != nil { - return "", err - } - in1 := res.Body - defer in1.Close() - - // Parse it. - scanner := bufio.NewScanner(in1) - num := 0 - for scanner.Scan() { - num++ - line := strings.TrimSpace(scanner.Text()) - - // Skip comments and empty lines. - if strings.HasPrefix(line, "#") || line == "" { - continue - } - - // Everything else must be a code point range, a property and a comment. - from, to, property, comment, err := parseProperty(line) - if err != nil { - return "", fmt.Errorf("%s line %d: %v", os.Args[4], num, err) - } - properties = append(properties, [4]string{from, to, property, comment}) - } - if err := scanner.Err(); err != nil { - return "", err - } - } - - // Open the second URL. - if emojiProperty != "" { - log.Printf("Parsing %s", emojiURL) - res, err := http.Get(emojiURL) - if err != nil { - return "", err - } - in2 := res.Body - defer in2.Close() - - // Parse it. - scanner := bufio.NewScanner(in2) - num := 0 - for scanner.Scan() { - num++ - line := scanner.Text() - - // Skip comments, empty lines, and everything not containing - // "Extended_Pictographic". - if strings.HasPrefix(line, "#") || line == "" || !strings.Contains(line, emojiProperty) { - continue - } - - // Everything else must be a code point range, a property and a comment. - from, to, property, comment, err := parseProperty(line) - if err != nil { - return "", fmt.Errorf("emojis line %d: %v", num, err) - } - properties = append(properties, [4]string{from, to, property, comment}) - } - if err := scanner.Err(); err != nil { - return "", err - } - } - - // Avoid overflow during binary search. - if len(properties) >= 1<<31 { - return "", errors.New("too many properties") - } - - // Sort properties. - sort.Slice(properties, func(i, j int) bool { - left, _ := strconv.ParseUint(properties[i][0], 16, 64) - right, _ := strconv.ParseUint(properties[j][0], 16, 64) - return left < right - }) - - // Header. - var ( - buf bytes.Buffer - emojiComment string - ) - columns := 3 - if includeGeneralCategory { - columns = 4 - } - if emojiURL != "" { - emojiComment = ` -// and -// ` + emojiURL + ` -// ("Extended_Pictographic" only)` - } - buf.WriteString(`// Code generated via go generate from gen_properties.go. DO NOT EDIT. - -package uniseg - -// ` + os.Args[3] + ` are taken from -// ` + propertyURL + emojiComment + ` -// on ` + time.Now().Format("January 2, 2006") + `. See https://www.unicode.org/license.html for the Unicode -// license agreement. -var ` + os.Args[3] + ` = [][` + strconv.Itoa(columns) + `]int{ - `) - - // Properties. - for _, prop := range properties { - if includeGeneralCategory { - generalCategory := "gc" + prop[3][:2] - if generalCategory == "gcL&" { - generalCategory = "gcLC" - } - prop[3] = prop[3][3:] - fmt.Fprintf(&buf, "{0x%s,0x%s,%s,%s}, // %s\n", prop[0], prop[1], translateProperty("pr", prop[2]), generalCategory, prop[3]) - } else { - fmt.Fprintf(&buf, "{0x%s,0x%s,%s}, // %s\n", prop[0], prop[1], translateProperty("pr", prop[2]), prop[3]) - } - } - - // Tail. - buf.WriteString("}") - - return buf.String(), nil -} - -// parseProperty parses a line of the Unicode properties text file containing a -// property for a code point range and returns it along with its comment. -func parseProperty(line string) (from, to, property, comment string, err error) { - fields := propertyPattern.FindStringSubmatch(line) - if fields == nil { - err = errors.New("no property found") - return - } - from = fields[1] - to = fields[3] - if to == "" { - to = from - } - property = fields[4] - comment = fields[5] - return -} - -// translateProperty translates a property name as used in the Unicode data file -// to a variable used in the Go code. -func translateProperty(prefix, property string) string { - return prefix + strings.ReplaceAll(property, "_", "") -} diff --git a/vendor/github.com/rivo/uniseg/grapheme.go b/vendor/github.com/rivo/uniseg/grapheme.go deleted file mode 100644 index b12403d43c..0000000000 --- a/vendor/github.com/rivo/uniseg/grapheme.go +++ /dev/null @@ -1,331 +0,0 @@ -package uniseg - -import "unicode/utf8" - -// Graphemes implements an iterator over Unicode grapheme clusters, or -// user-perceived characters. While iterating, it also provides information -// about word boundaries, sentence boundaries, line breaks, and monospace -// character widths. -// -// After constructing the class via [NewGraphemes] for a given string "str", -// [Graphemes.Next] is called for every grapheme cluster in a loop until it -// returns false. Inside the loop, information about the grapheme cluster as -// well as boundary information and character width is available via the various -// methods (see examples below). -// -// This class basically wraps the [StepString] parser and provides a convenient -// interface to it. If you are only interested in some parts of this package's -// functionality, using the specialized functions starting with "First" is -// almost always faster. -type Graphemes struct { - // The original string. - original string - - // The remaining string to be parsed. - remaining string - - // The current grapheme cluster. - cluster string - - // The byte offset of the current grapheme cluster relative to the original - // string. - offset int - - // The current boundary information of the [Step] parser. - boundaries int - - // The current state of the [Step] parser. - state int -} - -// NewGraphemes returns a new grapheme cluster iterator. -func NewGraphemes(str string) *Graphemes { - return &Graphemes{ - original: str, - remaining: str, - state: -1, - } -} - -// Next advances the iterator by one grapheme cluster and returns false if no -// clusters are left. This function must be called before the first cluster is -// accessed. -func (g *Graphemes) Next() bool { - if len(g.remaining) == 0 { - // We're already past the end. - g.state = -2 - g.cluster = "" - return false - } - g.offset += len(g.cluster) - g.cluster, g.remaining, g.boundaries, g.state = StepString(g.remaining, g.state) - return true -} - -// Runes returns a slice of runes (code points) which corresponds to the current -// grapheme cluster. If the iterator is already past the end or [Graphemes.Next] -// has not yet been called, nil is returned. -func (g *Graphemes) Runes() []rune { - if g.state < 0 { - return nil - } - return []rune(g.cluster) -} - -// Str returns a substring of the original string which corresponds to the -// current grapheme cluster. If the iterator is already past the end or -// [Graphemes.Next] has not yet been called, an empty string is returned. -func (g *Graphemes) Str() string { - return g.cluster -} - -// Bytes returns a byte slice which corresponds to the current grapheme cluster. -// If the iterator is already past the end or [Graphemes.Next] has not yet been -// called, nil is returned. -func (g *Graphemes) Bytes() []byte { - if g.state < 0 { - return nil - } - return []byte(g.cluster) -} - -// Positions returns the interval of the current grapheme cluster as byte -// positions into the original string. The first returned value "from" indexes -// the first byte and the second returned value "to" indexes the first byte that -// is not included anymore, i.e. str[from:to] is the current grapheme cluster of -// the original string "str". If [Graphemes.Next] has not yet been called, both -// values are 0. If the iterator is already past the end, both values are 1. -func (g *Graphemes) Positions() (int, int) { - if g.state == -1 { - return 0, 0 - } else if g.state == -2 { - return 1, 1 - } - return g.offset, g.offset + len(g.cluster) -} - -// IsWordBoundary returns true if a word ends after the current grapheme -// cluster. -func (g *Graphemes) IsWordBoundary() bool { - if g.state < 0 { - return true - } - return g.boundaries&MaskWord != 0 -} - -// IsSentenceBoundary returns true if a sentence ends after the current -// grapheme cluster. -func (g *Graphemes) IsSentenceBoundary() bool { - if g.state < 0 { - return true - } - return g.boundaries&MaskSentence != 0 -} - -// LineBreak returns whether the line can be broken after the current grapheme -// cluster. A value of [LineDontBreak] means the line may not be broken, a value -// of [LineMustBreak] means the line must be broken, and a value of -// [LineCanBreak] means the line may or may not be broken. -func (g *Graphemes) LineBreak() int { - if g.state == -1 { - return LineDontBreak - } - if g.state == -2 { - return LineMustBreak - } - return g.boundaries & MaskLine -} - -// Width returns the monospace width of the current grapheme cluster. -func (g *Graphemes) Width() int { - if g.state < 0 { - return 0 - } - return g.boundaries >> ShiftWidth -} - -// Reset puts the iterator into its initial state such that the next call to -// [Graphemes.Next] sets it to the first grapheme cluster again. -func (g *Graphemes) Reset() { - g.state = -1 - g.offset = 0 - g.cluster = "" - g.remaining = g.original -} - -// GraphemeClusterCount returns the number of user-perceived characters -// (grapheme clusters) for the given string. -func GraphemeClusterCount(s string) (n int) { - state := -1 - for len(s) > 0 { - _, s, _, state = FirstGraphemeClusterInString(s, state) - n++ - } - return -} - -// ReverseString reverses the given string while observing grapheme cluster -// boundaries. -func ReverseString(s string) string { - str := []byte(s) - reversed := make([]byte, len(str)) - state := -1 - index := len(str) - for len(str) > 0 { - var cluster []byte - cluster, str, _, state = FirstGraphemeCluster(str, state) - index -= len(cluster) - copy(reversed[index:], cluster) - if index <= len(str)/2 { - break - } - } - return string(reversed) -} - -// The number of bits the grapheme property must be shifted to make place for -// grapheme states. -const shiftGraphemePropState = 4 - -// FirstGraphemeCluster returns the first grapheme cluster found in the given -// byte slice according to the rules of [Unicode Standard Annex #29, Grapheme -// Cluster Boundaries]. This function can be called continuously to extract all -// grapheme clusters from a byte slice, as illustrated in the example below. -// -// If you don't know the current state, for example when calling the function -// for the first time, you must pass -1. For consecutive calls, pass the state -// and rest slice returned by the previous call. -// -// The "rest" slice is the sub-slice of the original byte slice "b" starting -// after the last byte of the identified grapheme cluster. If the length of the -// "rest" slice is 0, the entire byte slice "b" has been processed. The -// "cluster" byte slice is the sub-slice of the input slice containing the -// identified grapheme cluster. -// -// The returned width is the width of the grapheme cluster for most monospace -// fonts where a value of 1 represents one character cell. -// -// Given an empty byte slice "b", the function returns nil values. -// -// While slightly less convenient than using the Graphemes class, this function -// has much better performance and makes no allocations. It lends itself well to -// large byte slices. -// -// [Unicode Standard Annex #29, Grapheme Cluster Boundaries]: http://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries -func FirstGraphemeCluster(b []byte, state int) (cluster, rest []byte, width, newState int) { - // An empty byte slice returns nothing. - if len(b) == 0 { - return - } - - // Extract the first rune. - r, length := utf8.DecodeRune(b) - if len(b) <= length { // If we're already past the end, there is nothing else to parse. - var prop int - if state < 0 { - prop = propertyGraphemes(r) - } else { - prop = state >> shiftGraphemePropState - } - return b, nil, runeWidth(r, prop), grAny | (prop << shiftGraphemePropState) - } - - // If we don't know the state, determine it now. - var firstProp int - if state < 0 { - state, firstProp, _ = transitionGraphemeState(state, r) - } else { - firstProp = state >> shiftGraphemePropState - } - width += runeWidth(r, firstProp) - - // Transition until we find a boundary. - for { - var ( - prop int - boundary bool - ) - - r, l := utf8.DecodeRune(b[length:]) - state, prop, boundary = transitionGraphemeState(state&maskGraphemeState, r) - - if boundary { - return b[:length], b[length:], width, state | (prop << shiftGraphemePropState) - } - - if firstProp == prExtendedPictographic { - if r == vs15 { - width = 1 - } else if r == vs16 { - width = 2 - } - } else if firstProp != prRegionalIndicator && firstProp != prL { - width += runeWidth(r, prop) - } - - length += l - if len(b) <= length { - return b, nil, width, grAny | (prop << shiftGraphemePropState) - } - } -} - -// FirstGraphemeClusterInString is like [FirstGraphemeCluster] but its input and -// outputs are strings. -func FirstGraphemeClusterInString(str string, state int) (cluster, rest string, width, newState int) { - // An empty string returns nothing. - if len(str) == 0 { - return - } - - // Extract the first rune. - r, length := utf8.DecodeRuneInString(str) - if len(str) <= length { // If we're already past the end, there is nothing else to parse. - var prop int - if state < 0 { - prop = propertyGraphemes(r) - } else { - prop = state >> shiftGraphemePropState - } - return str, "", runeWidth(r, prop), grAny | (prop << shiftGraphemePropState) - } - - // If we don't know the state, determine it now. - var firstProp int - if state < 0 { - state, firstProp, _ = transitionGraphemeState(state, r) - } else { - firstProp = state >> shiftGraphemePropState - } - width += runeWidth(r, firstProp) - - // Transition until we find a boundary. - for { - var ( - prop int - boundary bool - ) - - r, l := utf8.DecodeRuneInString(str[length:]) - state, prop, boundary = transitionGraphemeState(state&maskGraphemeState, r) - - if boundary { - return str[:length], str[length:], width, state | (prop << shiftGraphemePropState) - } - - if firstProp == prExtendedPictographic { - if r == vs15 { - width = 1 - } else if r == vs16 { - width = 2 - } - } else if firstProp != prRegionalIndicator && firstProp != prL { - width += runeWidth(r, prop) - } - - length += l - if len(str) <= length { - return str, "", width, grAny | (prop << shiftGraphemePropState) - } - } -} diff --git a/vendor/github.com/rivo/uniseg/graphemeproperties.go b/vendor/github.com/rivo/uniseg/graphemeproperties.go deleted file mode 100644 index 0aff4a619a..0000000000 --- a/vendor/github.com/rivo/uniseg/graphemeproperties.go +++ /dev/null @@ -1,1915 +0,0 @@ -// Code generated via go generate from gen_properties.go. DO NOT EDIT. - -package uniseg - -// graphemeCodePoints are taken from -// https://www.unicode.org/Public/15.0.0/ucd/auxiliary/GraphemeBreakProperty.txt -// and -// https://unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt -// ("Extended_Pictographic" only) -// on September 5, 2023. See https://www.unicode.org/license.html for the Unicode -// license agreement. -var graphemeCodePoints = [][3]int{ - {0x0000, 0x0009, prControl}, // Cc [10] .. - {0x000A, 0x000A, prLF}, // Cc - {0x000B, 0x000C, prControl}, // Cc [2] .. - {0x000D, 0x000D, prCR}, // Cc - {0x000E, 0x001F, prControl}, // Cc [18] .. - {0x007F, 0x009F, prControl}, // Cc [33] .. - {0x00A9, 0x00A9, prExtendedPictographic}, // E0.6 [1] (©️) copyright - {0x00AD, 0x00AD, prControl}, // Cf SOFT HYPHEN - {0x00AE, 0x00AE, prExtendedPictographic}, // E0.6 [1] (®️) registered - {0x0300, 0x036F, prExtend}, // Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X - {0x0483, 0x0487, prExtend}, // Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE - {0x0488, 0x0489, prExtend}, // Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN - {0x0591, 0x05BD, prExtend}, // Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG - {0x05BF, 0x05BF, prExtend}, // Mn HEBREW POINT RAFE - {0x05C1, 0x05C2, prExtend}, // Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT - {0x05C4, 0x05C5, prExtend}, // Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT - {0x05C7, 0x05C7, prExtend}, // Mn HEBREW POINT QAMATS QATAN - {0x0600, 0x0605, prPrepend}, // Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE - {0x0610, 0x061A, prExtend}, // Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA - {0x061C, 0x061C, prControl}, // Cf ARABIC LETTER MARK - {0x064B, 0x065F, prExtend}, // Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW - {0x0670, 0x0670, prExtend}, // Mn ARABIC LETTER SUPERSCRIPT ALEF - {0x06D6, 0x06DC, prExtend}, // Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN - {0x06DD, 0x06DD, prPrepend}, // Cf ARABIC END OF AYAH - {0x06DF, 0x06E4, prExtend}, // Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA - {0x06E7, 0x06E8, prExtend}, // Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON - {0x06EA, 0x06ED, prExtend}, // Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM - {0x070F, 0x070F, prPrepend}, // Cf SYRIAC ABBREVIATION MARK - {0x0711, 0x0711, prExtend}, // Mn SYRIAC LETTER SUPERSCRIPT ALAPH - {0x0730, 0x074A, prExtend}, // Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH - {0x07A6, 0x07B0, prExtend}, // Mn [11] THAANA ABAFILI..THAANA SUKUN - {0x07EB, 0x07F3, prExtend}, // Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE - {0x07FD, 0x07FD, prExtend}, // Mn NKO DANTAYALAN - {0x0816, 0x0819, prExtend}, // Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH - {0x081B, 0x0823, prExtend}, // Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A - {0x0825, 0x0827, prExtend}, // Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U - {0x0829, 0x082D, prExtend}, // Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA - {0x0859, 0x085B, prExtend}, // Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK - {0x0890, 0x0891, prPrepend}, // Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE - {0x0898, 0x089F, prExtend}, // Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA - {0x08CA, 0x08E1, prExtend}, // Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA - {0x08E2, 0x08E2, prPrepend}, // Cf ARABIC DISPUTED END OF AYAH - {0x08E3, 0x0902, prExtend}, // Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA - {0x0903, 0x0903, prSpacingMark}, // Mc DEVANAGARI SIGN VISARGA - {0x093A, 0x093A, prExtend}, // Mn DEVANAGARI VOWEL SIGN OE - {0x093B, 0x093B, prSpacingMark}, // Mc DEVANAGARI VOWEL SIGN OOE - {0x093C, 0x093C, prExtend}, // Mn DEVANAGARI SIGN NUKTA - {0x093E, 0x0940, prSpacingMark}, // Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II - {0x0941, 0x0948, prExtend}, // Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI - {0x0949, 0x094C, prSpacingMark}, // Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU - {0x094D, 0x094D, prExtend}, // Mn DEVANAGARI SIGN VIRAMA - {0x094E, 0x094F, prSpacingMark}, // Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW - {0x0951, 0x0957, prExtend}, // Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE - {0x0962, 0x0963, prExtend}, // Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL - {0x0981, 0x0981, prExtend}, // Mn BENGALI SIGN CANDRABINDU - {0x0982, 0x0983, prSpacingMark}, // Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA - {0x09BC, 0x09BC, prExtend}, // Mn BENGALI SIGN NUKTA - {0x09BE, 0x09BE, prExtend}, // Mc BENGALI VOWEL SIGN AA - {0x09BF, 0x09C0, prSpacingMark}, // Mc [2] BENGALI VOWEL SIGN I..BENGALI VOWEL SIGN II - {0x09C1, 0x09C4, prExtend}, // Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR - {0x09C7, 0x09C8, prSpacingMark}, // Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI - {0x09CB, 0x09CC, prSpacingMark}, // Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU - {0x09CD, 0x09CD, prExtend}, // Mn BENGALI SIGN VIRAMA - {0x09D7, 0x09D7, prExtend}, // Mc BENGALI AU LENGTH MARK - {0x09E2, 0x09E3, prExtend}, // Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL - {0x09FE, 0x09FE, prExtend}, // Mn BENGALI SANDHI MARK - {0x0A01, 0x0A02, prExtend}, // Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI - {0x0A03, 0x0A03, prSpacingMark}, // Mc GURMUKHI SIGN VISARGA - {0x0A3C, 0x0A3C, prExtend}, // Mn GURMUKHI SIGN NUKTA - {0x0A3E, 0x0A40, prSpacingMark}, // Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II - {0x0A41, 0x0A42, prExtend}, // Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU - {0x0A47, 0x0A48, prExtend}, // Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI - {0x0A4B, 0x0A4D, prExtend}, // Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA - {0x0A51, 0x0A51, prExtend}, // Mn GURMUKHI SIGN UDAAT - {0x0A70, 0x0A71, prExtend}, // Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK - {0x0A75, 0x0A75, prExtend}, // Mn GURMUKHI SIGN YAKASH - {0x0A81, 0x0A82, prExtend}, // Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA - {0x0A83, 0x0A83, prSpacingMark}, // Mc GUJARATI SIGN VISARGA - {0x0ABC, 0x0ABC, prExtend}, // Mn GUJARATI SIGN NUKTA - {0x0ABE, 0x0AC0, prSpacingMark}, // Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II - {0x0AC1, 0x0AC5, prExtend}, // Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E - {0x0AC7, 0x0AC8, prExtend}, // Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI - {0x0AC9, 0x0AC9, prSpacingMark}, // Mc GUJARATI VOWEL SIGN CANDRA O - {0x0ACB, 0x0ACC, prSpacingMark}, // Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU - {0x0ACD, 0x0ACD, prExtend}, // Mn GUJARATI SIGN VIRAMA - {0x0AE2, 0x0AE3, prExtend}, // Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL - {0x0AFA, 0x0AFF, prExtend}, // Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE - {0x0B01, 0x0B01, prExtend}, // Mn ORIYA SIGN CANDRABINDU - {0x0B02, 0x0B03, prSpacingMark}, // Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA - {0x0B3C, 0x0B3C, prExtend}, // Mn ORIYA SIGN NUKTA - {0x0B3E, 0x0B3E, prExtend}, // Mc ORIYA VOWEL SIGN AA - {0x0B3F, 0x0B3F, prExtend}, // Mn ORIYA VOWEL SIGN I - {0x0B40, 0x0B40, prSpacingMark}, // Mc ORIYA VOWEL SIGN II - {0x0B41, 0x0B44, prExtend}, // Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR - {0x0B47, 0x0B48, prSpacingMark}, // Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI - {0x0B4B, 0x0B4C, prSpacingMark}, // Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU - {0x0B4D, 0x0B4D, prExtend}, // Mn ORIYA SIGN VIRAMA - {0x0B55, 0x0B56, prExtend}, // Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK - {0x0B57, 0x0B57, prExtend}, // Mc ORIYA AU LENGTH MARK - {0x0B62, 0x0B63, prExtend}, // Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL - {0x0B82, 0x0B82, prExtend}, // Mn TAMIL SIGN ANUSVARA - {0x0BBE, 0x0BBE, prExtend}, // Mc TAMIL VOWEL SIGN AA - {0x0BBF, 0x0BBF, prSpacingMark}, // Mc TAMIL VOWEL SIGN I - {0x0BC0, 0x0BC0, prExtend}, // Mn TAMIL VOWEL SIGN II - {0x0BC1, 0x0BC2, prSpacingMark}, // Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU - {0x0BC6, 0x0BC8, prSpacingMark}, // Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI - {0x0BCA, 0x0BCC, prSpacingMark}, // Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU - {0x0BCD, 0x0BCD, prExtend}, // Mn TAMIL SIGN VIRAMA - {0x0BD7, 0x0BD7, prExtend}, // Mc TAMIL AU LENGTH MARK - {0x0C00, 0x0C00, prExtend}, // Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE - {0x0C01, 0x0C03, prSpacingMark}, // Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA - {0x0C04, 0x0C04, prExtend}, // Mn TELUGU SIGN COMBINING ANUSVARA ABOVE - {0x0C3C, 0x0C3C, prExtend}, // Mn TELUGU SIGN NUKTA - {0x0C3E, 0x0C40, prExtend}, // Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II - {0x0C41, 0x0C44, prSpacingMark}, // Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR - {0x0C46, 0x0C48, prExtend}, // Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI - {0x0C4A, 0x0C4D, prExtend}, // Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA - {0x0C55, 0x0C56, prExtend}, // Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK - {0x0C62, 0x0C63, prExtend}, // Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL - {0x0C81, 0x0C81, prExtend}, // Mn KANNADA SIGN CANDRABINDU - {0x0C82, 0x0C83, prSpacingMark}, // Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA - {0x0CBC, 0x0CBC, prExtend}, // Mn KANNADA SIGN NUKTA - {0x0CBE, 0x0CBE, prSpacingMark}, // Mc KANNADA VOWEL SIGN AA - {0x0CBF, 0x0CBF, prExtend}, // Mn KANNADA VOWEL SIGN I - {0x0CC0, 0x0CC1, prSpacingMark}, // Mc [2] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN U - {0x0CC2, 0x0CC2, prExtend}, // Mc KANNADA VOWEL SIGN UU - {0x0CC3, 0x0CC4, prSpacingMark}, // Mc [2] KANNADA VOWEL SIGN VOCALIC R..KANNADA VOWEL SIGN VOCALIC RR - {0x0CC6, 0x0CC6, prExtend}, // Mn KANNADA VOWEL SIGN E - {0x0CC7, 0x0CC8, prSpacingMark}, // Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI - {0x0CCA, 0x0CCB, prSpacingMark}, // Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO - {0x0CCC, 0x0CCD, prExtend}, // Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA - {0x0CD5, 0x0CD6, prExtend}, // Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK - {0x0CE2, 0x0CE3, prExtend}, // Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL - {0x0CF3, 0x0CF3, prSpacingMark}, // Mc KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT - {0x0D00, 0x0D01, prExtend}, // Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU - {0x0D02, 0x0D03, prSpacingMark}, // Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA - {0x0D3B, 0x0D3C, prExtend}, // Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA - {0x0D3E, 0x0D3E, prExtend}, // Mc MALAYALAM VOWEL SIGN AA - {0x0D3F, 0x0D40, prSpacingMark}, // Mc [2] MALAYALAM VOWEL SIGN I..MALAYALAM VOWEL SIGN II - {0x0D41, 0x0D44, prExtend}, // Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR - {0x0D46, 0x0D48, prSpacingMark}, // Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI - {0x0D4A, 0x0D4C, prSpacingMark}, // Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU - {0x0D4D, 0x0D4D, prExtend}, // Mn MALAYALAM SIGN VIRAMA - {0x0D4E, 0x0D4E, prPrepend}, // Lo MALAYALAM LETTER DOT REPH - {0x0D57, 0x0D57, prExtend}, // Mc MALAYALAM AU LENGTH MARK - {0x0D62, 0x0D63, prExtend}, // Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL - {0x0D81, 0x0D81, prExtend}, // Mn SINHALA SIGN CANDRABINDU - {0x0D82, 0x0D83, prSpacingMark}, // Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA - {0x0DCA, 0x0DCA, prExtend}, // Mn SINHALA SIGN AL-LAKUNA - {0x0DCF, 0x0DCF, prExtend}, // Mc SINHALA VOWEL SIGN AELA-PILLA - {0x0DD0, 0x0DD1, prSpacingMark}, // Mc [2] SINHALA VOWEL SIGN KETTI AEDA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA - {0x0DD2, 0x0DD4, prExtend}, // Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA - {0x0DD6, 0x0DD6, prExtend}, // Mn SINHALA VOWEL SIGN DIGA PAA-PILLA - {0x0DD8, 0x0DDE, prSpacingMark}, // Mc [7] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA - {0x0DDF, 0x0DDF, prExtend}, // Mc SINHALA VOWEL SIGN GAYANUKITTA - {0x0DF2, 0x0DF3, prSpacingMark}, // Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA - {0x0E31, 0x0E31, prExtend}, // Mn THAI CHARACTER MAI HAN-AKAT - {0x0E33, 0x0E33, prSpacingMark}, // Lo THAI CHARACTER SARA AM - {0x0E34, 0x0E3A, prExtend}, // Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU - {0x0E47, 0x0E4E, prExtend}, // Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN - {0x0EB1, 0x0EB1, prExtend}, // Mn LAO VOWEL SIGN MAI KAN - {0x0EB3, 0x0EB3, prSpacingMark}, // Lo LAO VOWEL SIGN AM - {0x0EB4, 0x0EBC, prExtend}, // Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO - {0x0EC8, 0x0ECE, prExtend}, // Mn [7] LAO TONE MAI EK..LAO YAMAKKAN - {0x0F18, 0x0F19, prExtend}, // Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS - {0x0F35, 0x0F35, prExtend}, // Mn TIBETAN MARK NGAS BZUNG NYI ZLA - {0x0F37, 0x0F37, prExtend}, // Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS - {0x0F39, 0x0F39, prExtend}, // Mn TIBETAN MARK TSA -PHRU - {0x0F3E, 0x0F3F, prSpacingMark}, // Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES - {0x0F71, 0x0F7E, prExtend}, // Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO - {0x0F7F, 0x0F7F, prSpacingMark}, // Mc TIBETAN SIGN RNAM BCAD - {0x0F80, 0x0F84, prExtend}, // Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA - {0x0F86, 0x0F87, prExtend}, // Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS - {0x0F8D, 0x0F97, prExtend}, // Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA - {0x0F99, 0x0FBC, prExtend}, // Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA - {0x0FC6, 0x0FC6, prExtend}, // Mn TIBETAN SYMBOL PADMA GDAN - {0x102D, 0x1030, prExtend}, // Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU - {0x1031, 0x1031, prSpacingMark}, // Mc MYANMAR VOWEL SIGN E - {0x1032, 0x1037, prExtend}, // Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW - {0x1039, 0x103A, prExtend}, // Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT - {0x103B, 0x103C, prSpacingMark}, // Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA - {0x103D, 0x103E, prExtend}, // Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA - {0x1056, 0x1057, prSpacingMark}, // Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR - {0x1058, 0x1059, prExtend}, // Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL - {0x105E, 0x1060, prExtend}, // Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA - {0x1071, 0x1074, prExtend}, // Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE - {0x1082, 0x1082, prExtend}, // Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA - {0x1084, 0x1084, prSpacingMark}, // Mc MYANMAR VOWEL SIGN SHAN E - {0x1085, 0x1086, prExtend}, // Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y - {0x108D, 0x108D, prExtend}, // Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE - {0x109D, 0x109D, prExtend}, // Mn MYANMAR VOWEL SIGN AITON AI - {0x1100, 0x115F, prL}, // Lo [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER - {0x1160, 0x11A7, prV}, // Lo [72] HANGUL JUNGSEONG FILLER..HANGUL JUNGSEONG O-YAE - {0x11A8, 0x11FF, prT}, // Lo [88] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN - {0x135D, 0x135F, prExtend}, // Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK - {0x1712, 0x1714, prExtend}, // Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA - {0x1715, 0x1715, prSpacingMark}, // Mc TAGALOG SIGN PAMUDPOD - {0x1732, 0x1733, prExtend}, // Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U - {0x1734, 0x1734, prSpacingMark}, // Mc HANUNOO SIGN PAMUDPOD - {0x1752, 0x1753, prExtend}, // Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U - {0x1772, 0x1773, prExtend}, // Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U - {0x17B4, 0x17B5, prExtend}, // Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA - {0x17B6, 0x17B6, prSpacingMark}, // Mc KHMER VOWEL SIGN AA - {0x17B7, 0x17BD, prExtend}, // Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA - {0x17BE, 0x17C5, prSpacingMark}, // Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU - {0x17C6, 0x17C6, prExtend}, // Mn KHMER SIGN NIKAHIT - {0x17C7, 0x17C8, prSpacingMark}, // Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU - {0x17C9, 0x17D3, prExtend}, // Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT - {0x17DD, 0x17DD, prExtend}, // Mn KHMER SIGN ATTHACAN - {0x180B, 0x180D, prExtend}, // Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE - {0x180E, 0x180E, prControl}, // Cf MONGOLIAN VOWEL SEPARATOR - {0x180F, 0x180F, prExtend}, // Mn MONGOLIAN FREE VARIATION SELECTOR FOUR - {0x1885, 0x1886, prExtend}, // Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA - {0x18A9, 0x18A9, prExtend}, // Mn MONGOLIAN LETTER ALI GALI DAGALGA - {0x1920, 0x1922, prExtend}, // Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U - {0x1923, 0x1926, prSpacingMark}, // Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU - {0x1927, 0x1928, prExtend}, // Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O - {0x1929, 0x192B, prSpacingMark}, // Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA - {0x1930, 0x1931, prSpacingMark}, // Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA - {0x1932, 0x1932, prExtend}, // Mn LIMBU SMALL LETTER ANUSVARA - {0x1933, 0x1938, prSpacingMark}, // Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA - {0x1939, 0x193B, prExtend}, // Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I - {0x1A17, 0x1A18, prExtend}, // Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U - {0x1A19, 0x1A1A, prSpacingMark}, // Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O - {0x1A1B, 0x1A1B, prExtend}, // Mn BUGINESE VOWEL SIGN AE - {0x1A55, 0x1A55, prSpacingMark}, // Mc TAI THAM CONSONANT SIGN MEDIAL RA - {0x1A56, 0x1A56, prExtend}, // Mn TAI THAM CONSONANT SIGN MEDIAL LA - {0x1A57, 0x1A57, prSpacingMark}, // Mc TAI THAM CONSONANT SIGN LA TANG LAI - {0x1A58, 0x1A5E, prExtend}, // Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA - {0x1A60, 0x1A60, prExtend}, // Mn TAI THAM SIGN SAKOT - {0x1A62, 0x1A62, prExtend}, // Mn TAI THAM VOWEL SIGN MAI SAT - {0x1A65, 0x1A6C, prExtend}, // Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW - {0x1A6D, 0x1A72, prSpacingMark}, // Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI - {0x1A73, 0x1A7C, prExtend}, // Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN - {0x1A7F, 0x1A7F, prExtend}, // Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT - {0x1AB0, 0x1ABD, prExtend}, // Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW - {0x1ABE, 0x1ABE, prExtend}, // Me COMBINING PARENTHESES OVERLAY - {0x1ABF, 0x1ACE, prExtend}, // Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T - {0x1B00, 0x1B03, prExtend}, // Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG - {0x1B04, 0x1B04, prSpacingMark}, // Mc BALINESE SIGN BISAH - {0x1B34, 0x1B34, prExtend}, // Mn BALINESE SIGN REREKAN - {0x1B35, 0x1B35, prExtend}, // Mc BALINESE VOWEL SIGN TEDUNG - {0x1B36, 0x1B3A, prExtend}, // Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA - {0x1B3B, 0x1B3B, prSpacingMark}, // Mc BALINESE VOWEL SIGN RA REPA TEDUNG - {0x1B3C, 0x1B3C, prExtend}, // Mn BALINESE VOWEL SIGN LA LENGA - {0x1B3D, 0x1B41, prSpacingMark}, // Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG - {0x1B42, 0x1B42, prExtend}, // Mn BALINESE VOWEL SIGN PEPET - {0x1B43, 0x1B44, prSpacingMark}, // Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG - {0x1B6B, 0x1B73, prExtend}, // Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG - {0x1B80, 0x1B81, prExtend}, // Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR - {0x1B82, 0x1B82, prSpacingMark}, // Mc SUNDANESE SIGN PANGWISAD - {0x1BA1, 0x1BA1, prSpacingMark}, // Mc SUNDANESE CONSONANT SIGN PAMINGKAL - {0x1BA2, 0x1BA5, prExtend}, // Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU - {0x1BA6, 0x1BA7, prSpacingMark}, // Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG - {0x1BA8, 0x1BA9, prExtend}, // Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG - {0x1BAA, 0x1BAA, prSpacingMark}, // Mc SUNDANESE SIGN PAMAAEH - {0x1BAB, 0x1BAD, prExtend}, // Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA - {0x1BE6, 0x1BE6, prExtend}, // Mn BATAK SIGN TOMPI - {0x1BE7, 0x1BE7, prSpacingMark}, // Mc BATAK VOWEL SIGN E - {0x1BE8, 0x1BE9, prExtend}, // Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE - {0x1BEA, 0x1BEC, prSpacingMark}, // Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O - {0x1BED, 0x1BED, prExtend}, // Mn BATAK VOWEL SIGN KARO O - {0x1BEE, 0x1BEE, prSpacingMark}, // Mc BATAK VOWEL SIGN U - {0x1BEF, 0x1BF1, prExtend}, // Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H - {0x1BF2, 0x1BF3, prSpacingMark}, // Mc [2] BATAK PANGOLAT..BATAK PANONGONAN - {0x1C24, 0x1C2B, prSpacingMark}, // Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU - {0x1C2C, 0x1C33, prExtend}, // Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T - {0x1C34, 0x1C35, prSpacingMark}, // Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG - {0x1C36, 0x1C37, prExtend}, // Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA - {0x1CD0, 0x1CD2, prExtend}, // Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA - {0x1CD4, 0x1CE0, prExtend}, // Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA - {0x1CE1, 0x1CE1, prSpacingMark}, // Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA - {0x1CE2, 0x1CE8, prExtend}, // Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL - {0x1CED, 0x1CED, prExtend}, // Mn VEDIC SIGN TIRYAK - {0x1CF4, 0x1CF4, prExtend}, // Mn VEDIC TONE CANDRA ABOVE - {0x1CF7, 0x1CF7, prSpacingMark}, // Mc VEDIC SIGN ATIKRAMA - {0x1CF8, 0x1CF9, prExtend}, // Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE - {0x1DC0, 0x1DFF, prExtend}, // Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW - {0x200B, 0x200B, prControl}, // Cf ZERO WIDTH SPACE - {0x200C, 0x200C, prExtend}, // Cf ZERO WIDTH NON-JOINER - {0x200D, 0x200D, prZWJ}, // Cf ZERO WIDTH JOINER - {0x200E, 0x200F, prControl}, // Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK - {0x2028, 0x2028, prControl}, // Zl LINE SEPARATOR - {0x2029, 0x2029, prControl}, // Zp PARAGRAPH SEPARATOR - {0x202A, 0x202E, prControl}, // Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE - {0x203C, 0x203C, prExtendedPictographic}, // E0.6 [1] (‼️) double exclamation mark - {0x2049, 0x2049, prExtendedPictographic}, // E0.6 [1] (⁉️) exclamation question mark - {0x2060, 0x2064, prControl}, // Cf [5] WORD JOINER..INVISIBLE PLUS - {0x2065, 0x2065, prControl}, // Cn - {0x2066, 0x206F, prControl}, // Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES - {0x20D0, 0x20DC, prExtend}, // Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE - {0x20DD, 0x20E0, prExtend}, // Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH - {0x20E1, 0x20E1, prExtend}, // Mn COMBINING LEFT RIGHT ARROW ABOVE - {0x20E2, 0x20E4, prExtend}, // Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE - {0x20E5, 0x20F0, prExtend}, // Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE - {0x2122, 0x2122, prExtendedPictographic}, // E0.6 [1] (™️) trade mark - {0x2139, 0x2139, prExtendedPictographic}, // E0.6 [1] (ℹ️) information - {0x2194, 0x2199, prExtendedPictographic}, // E0.6 [6] (↔️..↙️) left-right arrow..down-left arrow - {0x21A9, 0x21AA, prExtendedPictographic}, // E0.6 [2] (↩️..↪️) right arrow curving left..left arrow curving right - {0x231A, 0x231B, prExtendedPictographic}, // E0.6 [2] (⌚..⌛) watch..hourglass done - {0x2328, 0x2328, prExtendedPictographic}, // E1.0 [1] (⌨️) keyboard - {0x2388, 0x2388, prExtendedPictographic}, // E0.0 [1] (⎈) HELM SYMBOL - {0x23CF, 0x23CF, prExtendedPictographic}, // E1.0 [1] (⏏️) eject button - {0x23E9, 0x23EC, prExtendedPictographic}, // E0.6 [4] (⏩..⏬) fast-forward button..fast down button - {0x23ED, 0x23EE, prExtendedPictographic}, // E0.7 [2] (⏭️..⏮️) next track button..last track button - {0x23EF, 0x23EF, prExtendedPictographic}, // E1.0 [1] (⏯️) play or pause button - {0x23F0, 0x23F0, prExtendedPictographic}, // E0.6 [1] (⏰) alarm clock - {0x23F1, 0x23F2, prExtendedPictographic}, // E1.0 [2] (⏱️..⏲️) stopwatch..timer clock - {0x23F3, 0x23F3, prExtendedPictographic}, // E0.6 [1] (⏳) hourglass not done - {0x23F8, 0x23FA, prExtendedPictographic}, // E0.7 [3] (⏸️..⏺️) pause button..record button - {0x24C2, 0x24C2, prExtendedPictographic}, // E0.6 [1] (Ⓜ️) circled M - {0x25AA, 0x25AB, prExtendedPictographic}, // E0.6 [2] (▪️..▫️) black small square..white small square - {0x25B6, 0x25B6, prExtendedPictographic}, // E0.6 [1] (▶️) play button - {0x25C0, 0x25C0, prExtendedPictographic}, // E0.6 [1] (◀️) reverse button - {0x25FB, 0x25FE, prExtendedPictographic}, // E0.6 [4] (◻️..◾) white medium square..black medium-small square - {0x2600, 0x2601, prExtendedPictographic}, // E0.6 [2] (☀️..☁️) sun..cloud - {0x2602, 0x2603, prExtendedPictographic}, // E0.7 [2] (☂️..☃️) umbrella..snowman - {0x2604, 0x2604, prExtendedPictographic}, // E1.0 [1] (☄️) comet - {0x2605, 0x2605, prExtendedPictographic}, // E0.0 [1] (★) BLACK STAR - {0x2607, 0x260D, prExtendedPictographic}, // E0.0 [7] (☇..☍) LIGHTNING..OPPOSITION - {0x260E, 0x260E, prExtendedPictographic}, // E0.6 [1] (☎️) telephone - {0x260F, 0x2610, prExtendedPictographic}, // E0.0 [2] (☏..☐) WHITE TELEPHONE..BALLOT BOX - {0x2611, 0x2611, prExtendedPictographic}, // E0.6 [1] (☑️) check box with check - {0x2612, 0x2612, prExtendedPictographic}, // E0.0 [1] (☒) BALLOT BOX WITH X - {0x2614, 0x2615, prExtendedPictographic}, // E0.6 [2] (☔..☕) umbrella with rain drops..hot beverage - {0x2616, 0x2617, prExtendedPictographic}, // E0.0 [2] (☖..☗) WHITE SHOGI PIECE..BLACK SHOGI PIECE - {0x2618, 0x2618, prExtendedPictographic}, // E1.0 [1] (☘️) shamrock - {0x2619, 0x261C, prExtendedPictographic}, // E0.0 [4] (☙..☜) REVERSED ROTATED FLORAL HEART BULLET..WHITE LEFT POINTING INDEX - {0x261D, 0x261D, prExtendedPictographic}, // E0.6 [1] (☝️) index pointing up - {0x261E, 0x261F, prExtendedPictographic}, // E0.0 [2] (☞..☟) WHITE RIGHT POINTING INDEX..WHITE DOWN POINTING INDEX - {0x2620, 0x2620, prExtendedPictographic}, // E1.0 [1] (☠️) skull and crossbones - {0x2621, 0x2621, prExtendedPictographic}, // E0.0 [1] (☡) CAUTION SIGN - {0x2622, 0x2623, prExtendedPictographic}, // E1.0 [2] (☢️..☣️) radioactive..biohazard - {0x2624, 0x2625, prExtendedPictographic}, // E0.0 [2] (☤..☥) CADUCEUS..ANKH - {0x2626, 0x2626, prExtendedPictographic}, // E1.0 [1] (☦️) orthodox cross - {0x2627, 0x2629, prExtendedPictographic}, // E0.0 [3] (☧..☩) CHI RHO..CROSS OF JERUSALEM - {0x262A, 0x262A, prExtendedPictographic}, // E0.7 [1] (☪️) star and crescent - {0x262B, 0x262D, prExtendedPictographic}, // E0.0 [3] (☫..☭) FARSI SYMBOL..HAMMER AND SICKLE - {0x262E, 0x262E, prExtendedPictographic}, // E1.0 [1] (☮️) peace symbol - {0x262F, 0x262F, prExtendedPictographic}, // E0.7 [1] (☯️) yin yang - {0x2630, 0x2637, prExtendedPictographic}, // E0.0 [8] (☰..☷) TRIGRAM FOR HEAVEN..TRIGRAM FOR EARTH - {0x2638, 0x2639, prExtendedPictographic}, // E0.7 [2] (☸️..☹️) wheel of dharma..frowning face - {0x263A, 0x263A, prExtendedPictographic}, // E0.6 [1] (☺️) smiling face - {0x263B, 0x263F, prExtendedPictographic}, // E0.0 [5] (☻..☿) BLACK SMILING FACE..MERCURY - {0x2640, 0x2640, prExtendedPictographic}, // E4.0 [1] (♀️) female sign - {0x2641, 0x2641, prExtendedPictographic}, // E0.0 [1] (♁) EARTH - {0x2642, 0x2642, prExtendedPictographic}, // E4.0 [1] (♂️) male sign - {0x2643, 0x2647, prExtendedPictographic}, // E0.0 [5] (♃..♇) JUPITER..PLUTO - {0x2648, 0x2653, prExtendedPictographic}, // E0.6 [12] (♈..♓) Aries..Pisces - {0x2654, 0x265E, prExtendedPictographic}, // E0.0 [11] (♔..♞) WHITE CHESS KING..BLACK CHESS KNIGHT - {0x265F, 0x265F, prExtendedPictographic}, // E11.0 [1] (♟️) chess pawn - {0x2660, 0x2660, prExtendedPictographic}, // E0.6 [1] (♠️) spade suit - {0x2661, 0x2662, prExtendedPictographic}, // E0.0 [2] (♡..♢) WHITE HEART SUIT..WHITE DIAMOND SUIT - {0x2663, 0x2663, prExtendedPictographic}, // E0.6 [1] (♣️) club suit - {0x2664, 0x2664, prExtendedPictographic}, // E0.0 [1] (♤) WHITE SPADE SUIT - {0x2665, 0x2666, prExtendedPictographic}, // E0.6 [2] (♥️..♦️) heart suit..diamond suit - {0x2667, 0x2667, prExtendedPictographic}, // E0.0 [1] (♧) WHITE CLUB SUIT - {0x2668, 0x2668, prExtendedPictographic}, // E0.6 [1] (♨️) hot springs - {0x2669, 0x267A, prExtendedPictographic}, // E0.0 [18] (♩..♺) QUARTER NOTE..RECYCLING SYMBOL FOR GENERIC MATERIALS - {0x267B, 0x267B, prExtendedPictographic}, // E0.6 [1] (♻️) recycling symbol - {0x267C, 0x267D, prExtendedPictographic}, // E0.0 [2] (♼..♽) RECYCLED PAPER SYMBOL..PARTIALLY-RECYCLED PAPER SYMBOL - {0x267E, 0x267E, prExtendedPictographic}, // E11.0 [1] (♾️) infinity - {0x267F, 0x267F, prExtendedPictographic}, // E0.6 [1] (♿) wheelchair symbol - {0x2680, 0x2685, prExtendedPictographic}, // E0.0 [6] (⚀..⚅) DIE FACE-1..DIE FACE-6 - {0x2690, 0x2691, prExtendedPictographic}, // E0.0 [2] (⚐..⚑) WHITE FLAG..BLACK FLAG - {0x2692, 0x2692, prExtendedPictographic}, // E1.0 [1] (⚒️) hammer and pick - {0x2693, 0x2693, prExtendedPictographic}, // E0.6 [1] (⚓) anchor - {0x2694, 0x2694, prExtendedPictographic}, // E1.0 [1] (⚔️) crossed swords - {0x2695, 0x2695, prExtendedPictographic}, // E4.0 [1] (⚕️) medical symbol - {0x2696, 0x2697, prExtendedPictographic}, // E1.0 [2] (⚖️..⚗️) balance scale..alembic - {0x2698, 0x2698, prExtendedPictographic}, // E0.0 [1] (⚘) FLOWER - {0x2699, 0x2699, prExtendedPictographic}, // E1.0 [1] (⚙️) gear - {0x269A, 0x269A, prExtendedPictographic}, // E0.0 [1] (⚚) STAFF OF HERMES - {0x269B, 0x269C, prExtendedPictographic}, // E1.0 [2] (⚛️..⚜️) atom symbol..fleur-de-lis - {0x269D, 0x269F, prExtendedPictographic}, // E0.0 [3] (⚝..⚟) OUTLINED WHITE STAR..THREE LINES CONVERGING LEFT - {0x26A0, 0x26A1, prExtendedPictographic}, // E0.6 [2] (⚠️..⚡) warning..high voltage - {0x26A2, 0x26A6, prExtendedPictographic}, // E0.0 [5] (⚢..⚦) DOUBLED FEMALE SIGN..MALE WITH STROKE SIGN - {0x26A7, 0x26A7, prExtendedPictographic}, // E13.0 [1] (⚧️) transgender symbol - {0x26A8, 0x26A9, prExtendedPictographic}, // E0.0 [2] (⚨..⚩) VERTICAL MALE WITH STROKE SIGN..HORIZONTAL MALE WITH STROKE SIGN - {0x26AA, 0x26AB, prExtendedPictographic}, // E0.6 [2] (⚪..⚫) white circle..black circle - {0x26AC, 0x26AF, prExtendedPictographic}, // E0.0 [4] (⚬..⚯) MEDIUM SMALL WHITE CIRCLE..UNMARRIED PARTNERSHIP SYMBOL - {0x26B0, 0x26B1, prExtendedPictographic}, // E1.0 [2] (⚰️..⚱️) coffin..funeral urn - {0x26B2, 0x26BC, prExtendedPictographic}, // E0.0 [11] (⚲..⚼) NEUTER..SESQUIQUADRATE - {0x26BD, 0x26BE, prExtendedPictographic}, // E0.6 [2] (⚽..⚾) soccer ball..baseball - {0x26BF, 0x26C3, prExtendedPictographic}, // E0.0 [5] (⚿..⛃) SQUARED KEY..BLACK DRAUGHTS KING - {0x26C4, 0x26C5, prExtendedPictographic}, // E0.6 [2] (⛄..⛅) snowman without snow..sun behind cloud - {0x26C6, 0x26C7, prExtendedPictographic}, // E0.0 [2] (⛆..⛇) RAIN..BLACK SNOWMAN - {0x26C8, 0x26C8, prExtendedPictographic}, // E0.7 [1] (⛈️) cloud with lightning and rain - {0x26C9, 0x26CD, prExtendedPictographic}, // E0.0 [5] (⛉..⛍) TURNED WHITE SHOGI PIECE..DISABLED CAR - {0x26CE, 0x26CE, prExtendedPictographic}, // E0.6 [1] (⛎) Ophiuchus - {0x26CF, 0x26CF, prExtendedPictographic}, // E0.7 [1] (⛏️) pick - {0x26D0, 0x26D0, prExtendedPictographic}, // E0.0 [1] (⛐) CAR SLIDING - {0x26D1, 0x26D1, prExtendedPictographic}, // E0.7 [1] (⛑️) rescue worker’s helmet - {0x26D2, 0x26D2, prExtendedPictographic}, // E0.0 [1] (⛒) CIRCLED CROSSING LANES - {0x26D3, 0x26D3, prExtendedPictographic}, // E0.7 [1] (⛓️) chains - {0x26D4, 0x26D4, prExtendedPictographic}, // E0.6 [1] (⛔) no entry - {0x26D5, 0x26E8, prExtendedPictographic}, // E0.0 [20] (⛕..⛨) ALTERNATE ONE-WAY LEFT WAY TRAFFIC..BLACK CROSS ON SHIELD - {0x26E9, 0x26E9, prExtendedPictographic}, // E0.7 [1] (⛩️) shinto shrine - {0x26EA, 0x26EA, prExtendedPictographic}, // E0.6 [1] (⛪) church - {0x26EB, 0x26EF, prExtendedPictographic}, // E0.0 [5] (⛫..⛯) CASTLE..MAP SYMBOL FOR LIGHTHOUSE - {0x26F0, 0x26F1, prExtendedPictographic}, // E0.7 [2] (⛰️..⛱️) mountain..umbrella on ground - {0x26F2, 0x26F3, prExtendedPictographic}, // E0.6 [2] (⛲..⛳) fountain..flag in hole - {0x26F4, 0x26F4, prExtendedPictographic}, // E0.7 [1] (⛴️) ferry - {0x26F5, 0x26F5, prExtendedPictographic}, // E0.6 [1] (⛵) sailboat - {0x26F6, 0x26F6, prExtendedPictographic}, // E0.0 [1] (⛶) SQUARE FOUR CORNERS - {0x26F7, 0x26F9, prExtendedPictographic}, // E0.7 [3] (⛷️..⛹️) skier..person bouncing ball - {0x26FA, 0x26FA, prExtendedPictographic}, // E0.6 [1] (⛺) tent - {0x26FB, 0x26FC, prExtendedPictographic}, // E0.0 [2] (⛻..⛼) JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL - {0x26FD, 0x26FD, prExtendedPictographic}, // E0.6 [1] (⛽) fuel pump - {0x26FE, 0x2701, prExtendedPictographic}, // E0.0 [4] (⛾..✁) CUP ON BLACK SQUARE..UPPER BLADE SCISSORS - {0x2702, 0x2702, prExtendedPictographic}, // E0.6 [1] (✂️) scissors - {0x2703, 0x2704, prExtendedPictographic}, // E0.0 [2] (✃..✄) LOWER BLADE SCISSORS..WHITE SCISSORS - {0x2705, 0x2705, prExtendedPictographic}, // E0.6 [1] (✅) check mark button - {0x2708, 0x270C, prExtendedPictographic}, // E0.6 [5] (✈️..✌️) airplane..victory hand - {0x270D, 0x270D, prExtendedPictographic}, // E0.7 [1] (✍️) writing hand - {0x270E, 0x270E, prExtendedPictographic}, // E0.0 [1] (✎) LOWER RIGHT PENCIL - {0x270F, 0x270F, prExtendedPictographic}, // E0.6 [1] (✏️) pencil - {0x2710, 0x2711, prExtendedPictographic}, // E0.0 [2] (✐..✑) UPPER RIGHT PENCIL..WHITE NIB - {0x2712, 0x2712, prExtendedPictographic}, // E0.6 [1] (✒️) black nib - {0x2714, 0x2714, prExtendedPictographic}, // E0.6 [1] (✔️) check mark - {0x2716, 0x2716, prExtendedPictographic}, // E0.6 [1] (✖️) multiply - {0x271D, 0x271D, prExtendedPictographic}, // E0.7 [1] (✝️) latin cross - {0x2721, 0x2721, prExtendedPictographic}, // E0.7 [1] (✡️) star of David - {0x2728, 0x2728, prExtendedPictographic}, // E0.6 [1] (✨) sparkles - {0x2733, 0x2734, prExtendedPictographic}, // E0.6 [2] (✳️..✴️) eight-spoked asterisk..eight-pointed star - {0x2744, 0x2744, prExtendedPictographic}, // E0.6 [1] (❄️) snowflake - {0x2747, 0x2747, prExtendedPictographic}, // E0.6 [1] (❇️) sparkle - {0x274C, 0x274C, prExtendedPictographic}, // E0.6 [1] (❌) cross mark - {0x274E, 0x274E, prExtendedPictographic}, // E0.6 [1] (❎) cross mark button - {0x2753, 0x2755, prExtendedPictographic}, // E0.6 [3] (❓..❕) red question mark..white exclamation mark - {0x2757, 0x2757, prExtendedPictographic}, // E0.6 [1] (❗) red exclamation mark - {0x2763, 0x2763, prExtendedPictographic}, // E1.0 [1] (❣️) heart exclamation - {0x2764, 0x2764, prExtendedPictographic}, // E0.6 [1] (❤️) red heart - {0x2765, 0x2767, prExtendedPictographic}, // E0.0 [3] (❥..❧) ROTATED HEAVY BLACK HEART BULLET..ROTATED FLORAL HEART BULLET - {0x2795, 0x2797, prExtendedPictographic}, // E0.6 [3] (➕..➗) plus..divide - {0x27A1, 0x27A1, prExtendedPictographic}, // E0.6 [1] (➡️) right arrow - {0x27B0, 0x27B0, prExtendedPictographic}, // E0.6 [1] (➰) curly loop - {0x27BF, 0x27BF, prExtendedPictographic}, // E1.0 [1] (➿) double curly loop - {0x2934, 0x2935, prExtendedPictographic}, // E0.6 [2] (⤴️..⤵️) right arrow curving up..right arrow curving down - {0x2B05, 0x2B07, prExtendedPictographic}, // E0.6 [3] (⬅️..⬇️) left arrow..down arrow - {0x2B1B, 0x2B1C, prExtendedPictographic}, // E0.6 [2] (⬛..⬜) black large square..white large square - {0x2B50, 0x2B50, prExtendedPictographic}, // E0.6 [1] (⭐) star - {0x2B55, 0x2B55, prExtendedPictographic}, // E0.6 [1] (⭕) hollow red circle - {0x2CEF, 0x2CF1, prExtend}, // Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS - {0x2D7F, 0x2D7F, prExtend}, // Mn TIFINAGH CONSONANT JOINER - {0x2DE0, 0x2DFF, prExtend}, // Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS - {0x302A, 0x302D, prExtend}, // Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK - {0x302E, 0x302F, prExtend}, // Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK - {0x3030, 0x3030, prExtendedPictographic}, // E0.6 [1] (〰️) wavy dash - {0x303D, 0x303D, prExtendedPictographic}, // E0.6 [1] (〽️) part alternation mark - {0x3099, 0x309A, prExtend}, // Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK - {0x3297, 0x3297, prExtendedPictographic}, // E0.6 [1] (㊗️) Japanese “congratulations” button - {0x3299, 0x3299, prExtendedPictographic}, // E0.6 [1] (㊙️) Japanese “secret” button - {0xA66F, 0xA66F, prExtend}, // Mn COMBINING CYRILLIC VZMET - {0xA670, 0xA672, prExtend}, // Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN - {0xA674, 0xA67D, prExtend}, // Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK - {0xA69E, 0xA69F, prExtend}, // Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E - {0xA6F0, 0xA6F1, prExtend}, // Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS - {0xA802, 0xA802, prExtend}, // Mn SYLOTI NAGRI SIGN DVISVARA - {0xA806, 0xA806, prExtend}, // Mn SYLOTI NAGRI SIGN HASANTA - {0xA80B, 0xA80B, prExtend}, // Mn SYLOTI NAGRI SIGN ANUSVARA - {0xA823, 0xA824, prSpacingMark}, // Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I - {0xA825, 0xA826, prExtend}, // Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E - {0xA827, 0xA827, prSpacingMark}, // Mc SYLOTI NAGRI VOWEL SIGN OO - {0xA82C, 0xA82C, prExtend}, // Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA - {0xA880, 0xA881, prSpacingMark}, // Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA - {0xA8B4, 0xA8C3, prSpacingMark}, // Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU - {0xA8C4, 0xA8C5, prExtend}, // Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU - {0xA8E0, 0xA8F1, prExtend}, // Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA - {0xA8FF, 0xA8FF, prExtend}, // Mn DEVANAGARI VOWEL SIGN AY - {0xA926, 0xA92D, prExtend}, // Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU - {0xA947, 0xA951, prExtend}, // Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R - {0xA952, 0xA953, prSpacingMark}, // Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA - {0xA960, 0xA97C, prL}, // Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH - {0xA980, 0xA982, prExtend}, // Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR - {0xA983, 0xA983, prSpacingMark}, // Mc JAVANESE SIGN WIGNYAN - {0xA9B3, 0xA9B3, prExtend}, // Mn JAVANESE SIGN CECAK TELU - {0xA9B4, 0xA9B5, prSpacingMark}, // Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG - {0xA9B6, 0xA9B9, prExtend}, // Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT - {0xA9BA, 0xA9BB, prSpacingMark}, // Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE - {0xA9BC, 0xA9BD, prExtend}, // Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET - {0xA9BE, 0xA9C0, prSpacingMark}, // Mc [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON - {0xA9E5, 0xA9E5, prExtend}, // Mn MYANMAR SIGN SHAN SAW - {0xAA29, 0xAA2E, prExtend}, // Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE - {0xAA2F, 0xAA30, prSpacingMark}, // Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI - {0xAA31, 0xAA32, prExtend}, // Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE - {0xAA33, 0xAA34, prSpacingMark}, // Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA - {0xAA35, 0xAA36, prExtend}, // Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA - {0xAA43, 0xAA43, prExtend}, // Mn CHAM CONSONANT SIGN FINAL NG - {0xAA4C, 0xAA4C, prExtend}, // Mn CHAM CONSONANT SIGN FINAL M - {0xAA4D, 0xAA4D, prSpacingMark}, // Mc CHAM CONSONANT SIGN FINAL H - {0xAA7C, 0xAA7C, prExtend}, // Mn MYANMAR SIGN TAI LAING TONE-2 - {0xAAB0, 0xAAB0, prExtend}, // Mn TAI VIET MAI KANG - {0xAAB2, 0xAAB4, prExtend}, // Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U - {0xAAB7, 0xAAB8, prExtend}, // Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA - {0xAABE, 0xAABF, prExtend}, // Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK - {0xAAC1, 0xAAC1, prExtend}, // Mn TAI VIET TONE MAI THO - {0xAAEB, 0xAAEB, prSpacingMark}, // Mc MEETEI MAYEK VOWEL SIGN II - {0xAAEC, 0xAAED, prExtend}, // Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI - {0xAAEE, 0xAAEF, prSpacingMark}, // Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU - {0xAAF5, 0xAAF5, prSpacingMark}, // Mc MEETEI MAYEK VOWEL SIGN VISARGA - {0xAAF6, 0xAAF6, prExtend}, // Mn MEETEI MAYEK VIRAMA - {0xABE3, 0xABE4, prSpacingMark}, // Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP - {0xABE5, 0xABE5, prExtend}, // Mn MEETEI MAYEK VOWEL SIGN ANAP - {0xABE6, 0xABE7, prSpacingMark}, // Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP - {0xABE8, 0xABE8, prExtend}, // Mn MEETEI MAYEK VOWEL SIGN UNAP - {0xABE9, 0xABEA, prSpacingMark}, // Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG - {0xABEC, 0xABEC, prSpacingMark}, // Mc MEETEI MAYEK LUM IYEK - {0xABED, 0xABED, prExtend}, // Mn MEETEI MAYEK APUN IYEK - {0xAC00, 0xAC00, prLV}, // Lo HANGUL SYLLABLE GA - {0xAC01, 0xAC1B, prLVT}, // Lo [27] HANGUL SYLLABLE GAG..HANGUL SYLLABLE GAH - {0xAC1C, 0xAC1C, prLV}, // Lo HANGUL SYLLABLE GAE - {0xAC1D, 0xAC37, prLVT}, // Lo [27] HANGUL SYLLABLE GAEG..HANGUL SYLLABLE GAEH - {0xAC38, 0xAC38, prLV}, // Lo HANGUL SYLLABLE GYA - {0xAC39, 0xAC53, prLVT}, // Lo [27] HANGUL SYLLABLE GYAG..HANGUL SYLLABLE GYAH - {0xAC54, 0xAC54, prLV}, // Lo HANGUL SYLLABLE GYAE - {0xAC55, 0xAC6F, prLVT}, // Lo [27] HANGUL SYLLABLE GYAEG..HANGUL SYLLABLE GYAEH - {0xAC70, 0xAC70, prLV}, // Lo HANGUL SYLLABLE GEO - {0xAC71, 0xAC8B, prLVT}, // Lo [27] HANGUL SYLLABLE GEOG..HANGUL SYLLABLE GEOH - {0xAC8C, 0xAC8C, prLV}, // Lo HANGUL SYLLABLE GE - {0xAC8D, 0xACA7, prLVT}, // Lo [27] HANGUL SYLLABLE GEG..HANGUL SYLLABLE GEH - {0xACA8, 0xACA8, prLV}, // Lo HANGUL SYLLABLE GYEO - {0xACA9, 0xACC3, prLVT}, // Lo [27] HANGUL SYLLABLE GYEOG..HANGUL SYLLABLE GYEOH - {0xACC4, 0xACC4, prLV}, // Lo HANGUL SYLLABLE GYE - {0xACC5, 0xACDF, prLVT}, // Lo [27] HANGUL SYLLABLE GYEG..HANGUL SYLLABLE GYEH - {0xACE0, 0xACE0, prLV}, // Lo HANGUL SYLLABLE GO - {0xACE1, 0xACFB, prLVT}, // Lo [27] HANGUL SYLLABLE GOG..HANGUL SYLLABLE GOH - {0xACFC, 0xACFC, prLV}, // Lo HANGUL SYLLABLE GWA - {0xACFD, 0xAD17, prLVT}, // Lo [27] HANGUL SYLLABLE GWAG..HANGUL SYLLABLE GWAH - {0xAD18, 0xAD18, prLV}, // Lo HANGUL SYLLABLE GWAE - {0xAD19, 0xAD33, prLVT}, // Lo [27] HANGUL SYLLABLE GWAEG..HANGUL SYLLABLE GWAEH - {0xAD34, 0xAD34, prLV}, // Lo HANGUL SYLLABLE GOE - {0xAD35, 0xAD4F, prLVT}, // Lo [27] HANGUL SYLLABLE GOEG..HANGUL SYLLABLE GOEH - {0xAD50, 0xAD50, prLV}, // Lo HANGUL SYLLABLE GYO - {0xAD51, 0xAD6B, prLVT}, // Lo [27] HANGUL SYLLABLE GYOG..HANGUL SYLLABLE GYOH - {0xAD6C, 0xAD6C, prLV}, // Lo HANGUL SYLLABLE GU - {0xAD6D, 0xAD87, prLVT}, // Lo [27] HANGUL SYLLABLE GUG..HANGUL SYLLABLE GUH - {0xAD88, 0xAD88, prLV}, // Lo HANGUL SYLLABLE GWEO - {0xAD89, 0xADA3, prLVT}, // Lo [27] HANGUL SYLLABLE GWEOG..HANGUL SYLLABLE GWEOH - {0xADA4, 0xADA4, prLV}, // Lo HANGUL SYLLABLE GWE - {0xADA5, 0xADBF, prLVT}, // Lo [27] HANGUL SYLLABLE GWEG..HANGUL SYLLABLE GWEH - {0xADC0, 0xADC0, prLV}, // Lo HANGUL SYLLABLE GWI - {0xADC1, 0xADDB, prLVT}, // Lo [27] HANGUL SYLLABLE GWIG..HANGUL SYLLABLE GWIH - {0xADDC, 0xADDC, prLV}, // Lo HANGUL SYLLABLE GYU - {0xADDD, 0xADF7, prLVT}, // Lo [27] HANGUL SYLLABLE GYUG..HANGUL SYLLABLE GYUH - {0xADF8, 0xADF8, prLV}, // Lo HANGUL SYLLABLE GEU - {0xADF9, 0xAE13, prLVT}, // Lo [27] HANGUL SYLLABLE GEUG..HANGUL SYLLABLE GEUH - {0xAE14, 0xAE14, prLV}, // Lo HANGUL SYLLABLE GYI - {0xAE15, 0xAE2F, prLVT}, // Lo [27] HANGUL SYLLABLE GYIG..HANGUL SYLLABLE GYIH - {0xAE30, 0xAE30, prLV}, // Lo HANGUL SYLLABLE GI - {0xAE31, 0xAE4B, prLVT}, // Lo [27] HANGUL SYLLABLE GIG..HANGUL SYLLABLE GIH - {0xAE4C, 0xAE4C, prLV}, // Lo HANGUL SYLLABLE GGA - {0xAE4D, 0xAE67, prLVT}, // Lo [27] HANGUL SYLLABLE GGAG..HANGUL SYLLABLE GGAH - {0xAE68, 0xAE68, prLV}, // Lo HANGUL SYLLABLE GGAE - {0xAE69, 0xAE83, prLVT}, // Lo [27] HANGUL SYLLABLE GGAEG..HANGUL SYLLABLE GGAEH - {0xAE84, 0xAE84, prLV}, // Lo HANGUL SYLLABLE GGYA - {0xAE85, 0xAE9F, prLVT}, // Lo [27] HANGUL SYLLABLE GGYAG..HANGUL SYLLABLE GGYAH - {0xAEA0, 0xAEA0, prLV}, // Lo HANGUL SYLLABLE GGYAE - {0xAEA1, 0xAEBB, prLVT}, // Lo [27] HANGUL SYLLABLE GGYAEG..HANGUL SYLLABLE GGYAEH - {0xAEBC, 0xAEBC, prLV}, // Lo HANGUL SYLLABLE GGEO - {0xAEBD, 0xAED7, prLVT}, // Lo [27] HANGUL SYLLABLE GGEOG..HANGUL SYLLABLE GGEOH - {0xAED8, 0xAED8, prLV}, // Lo HANGUL SYLLABLE GGE - {0xAED9, 0xAEF3, prLVT}, // Lo [27] HANGUL SYLLABLE GGEG..HANGUL SYLLABLE GGEH - {0xAEF4, 0xAEF4, prLV}, // Lo HANGUL SYLLABLE GGYEO - {0xAEF5, 0xAF0F, prLVT}, // Lo [27] HANGUL SYLLABLE GGYEOG..HANGUL SYLLABLE GGYEOH - {0xAF10, 0xAF10, prLV}, // Lo HANGUL SYLLABLE GGYE - {0xAF11, 0xAF2B, prLVT}, // Lo [27] HANGUL SYLLABLE GGYEG..HANGUL SYLLABLE GGYEH - {0xAF2C, 0xAF2C, prLV}, // Lo HANGUL SYLLABLE GGO - {0xAF2D, 0xAF47, prLVT}, // Lo [27] HANGUL SYLLABLE GGOG..HANGUL SYLLABLE GGOH - {0xAF48, 0xAF48, prLV}, // Lo HANGUL SYLLABLE GGWA - {0xAF49, 0xAF63, prLVT}, // Lo [27] HANGUL SYLLABLE GGWAG..HANGUL SYLLABLE GGWAH - {0xAF64, 0xAF64, prLV}, // Lo HANGUL SYLLABLE GGWAE - {0xAF65, 0xAF7F, prLVT}, // Lo [27] HANGUL SYLLABLE GGWAEG..HANGUL SYLLABLE GGWAEH - {0xAF80, 0xAF80, prLV}, // Lo HANGUL SYLLABLE GGOE - {0xAF81, 0xAF9B, prLVT}, // Lo [27] HANGUL SYLLABLE GGOEG..HANGUL SYLLABLE GGOEH - {0xAF9C, 0xAF9C, prLV}, // Lo HANGUL SYLLABLE GGYO - {0xAF9D, 0xAFB7, prLVT}, // Lo [27] HANGUL SYLLABLE GGYOG..HANGUL SYLLABLE GGYOH - {0xAFB8, 0xAFB8, prLV}, // Lo HANGUL SYLLABLE GGU - {0xAFB9, 0xAFD3, prLVT}, // Lo [27] HANGUL SYLLABLE GGUG..HANGUL SYLLABLE GGUH - {0xAFD4, 0xAFD4, prLV}, // Lo HANGUL SYLLABLE GGWEO - {0xAFD5, 0xAFEF, prLVT}, // Lo [27] HANGUL SYLLABLE GGWEOG..HANGUL SYLLABLE GGWEOH - {0xAFF0, 0xAFF0, prLV}, // Lo HANGUL SYLLABLE GGWE - {0xAFF1, 0xB00B, prLVT}, // Lo [27] HANGUL SYLLABLE GGWEG..HANGUL SYLLABLE GGWEH - {0xB00C, 0xB00C, prLV}, // Lo HANGUL SYLLABLE GGWI - {0xB00D, 0xB027, prLVT}, // Lo [27] HANGUL SYLLABLE GGWIG..HANGUL SYLLABLE GGWIH - {0xB028, 0xB028, prLV}, // Lo HANGUL SYLLABLE GGYU - {0xB029, 0xB043, prLVT}, // Lo [27] HANGUL SYLLABLE GGYUG..HANGUL SYLLABLE GGYUH - {0xB044, 0xB044, prLV}, // Lo HANGUL SYLLABLE GGEU - {0xB045, 0xB05F, prLVT}, // Lo [27] HANGUL SYLLABLE GGEUG..HANGUL SYLLABLE GGEUH - {0xB060, 0xB060, prLV}, // Lo HANGUL SYLLABLE GGYI - {0xB061, 0xB07B, prLVT}, // Lo [27] HANGUL SYLLABLE GGYIG..HANGUL SYLLABLE GGYIH - {0xB07C, 0xB07C, prLV}, // Lo HANGUL SYLLABLE GGI - {0xB07D, 0xB097, prLVT}, // Lo [27] HANGUL SYLLABLE GGIG..HANGUL SYLLABLE GGIH - {0xB098, 0xB098, prLV}, // Lo HANGUL SYLLABLE NA - {0xB099, 0xB0B3, prLVT}, // Lo [27] HANGUL SYLLABLE NAG..HANGUL SYLLABLE NAH - {0xB0B4, 0xB0B4, prLV}, // Lo HANGUL SYLLABLE NAE - {0xB0B5, 0xB0CF, prLVT}, // Lo [27] HANGUL SYLLABLE NAEG..HANGUL SYLLABLE NAEH - {0xB0D0, 0xB0D0, prLV}, // Lo HANGUL SYLLABLE NYA - {0xB0D1, 0xB0EB, prLVT}, // Lo [27] HANGUL SYLLABLE NYAG..HANGUL SYLLABLE NYAH - {0xB0EC, 0xB0EC, prLV}, // Lo HANGUL SYLLABLE NYAE - {0xB0ED, 0xB107, prLVT}, // Lo [27] HANGUL SYLLABLE NYAEG..HANGUL SYLLABLE NYAEH - {0xB108, 0xB108, prLV}, // Lo HANGUL SYLLABLE NEO - {0xB109, 0xB123, prLVT}, // Lo [27] HANGUL SYLLABLE NEOG..HANGUL SYLLABLE NEOH - {0xB124, 0xB124, prLV}, // Lo HANGUL SYLLABLE NE - {0xB125, 0xB13F, prLVT}, // Lo [27] HANGUL SYLLABLE NEG..HANGUL SYLLABLE NEH - {0xB140, 0xB140, prLV}, // Lo HANGUL SYLLABLE NYEO - {0xB141, 0xB15B, prLVT}, // Lo [27] HANGUL SYLLABLE NYEOG..HANGUL SYLLABLE NYEOH - {0xB15C, 0xB15C, prLV}, // Lo HANGUL SYLLABLE NYE - {0xB15D, 0xB177, prLVT}, // Lo [27] HANGUL SYLLABLE NYEG..HANGUL SYLLABLE NYEH - {0xB178, 0xB178, prLV}, // Lo HANGUL SYLLABLE NO - {0xB179, 0xB193, prLVT}, // Lo [27] HANGUL SYLLABLE NOG..HANGUL SYLLABLE NOH - {0xB194, 0xB194, prLV}, // Lo HANGUL SYLLABLE NWA - {0xB195, 0xB1AF, prLVT}, // Lo [27] HANGUL SYLLABLE NWAG..HANGUL SYLLABLE NWAH - {0xB1B0, 0xB1B0, prLV}, // Lo HANGUL SYLLABLE NWAE - {0xB1B1, 0xB1CB, prLVT}, // Lo [27] HANGUL SYLLABLE NWAEG..HANGUL SYLLABLE NWAEH - {0xB1CC, 0xB1CC, prLV}, // Lo HANGUL SYLLABLE NOE - {0xB1CD, 0xB1E7, prLVT}, // Lo [27] HANGUL SYLLABLE NOEG..HANGUL SYLLABLE NOEH - {0xB1E8, 0xB1E8, prLV}, // Lo HANGUL SYLLABLE NYO - {0xB1E9, 0xB203, prLVT}, // Lo [27] HANGUL SYLLABLE NYOG..HANGUL SYLLABLE NYOH - {0xB204, 0xB204, prLV}, // Lo HANGUL SYLLABLE NU - {0xB205, 0xB21F, prLVT}, // Lo [27] HANGUL SYLLABLE NUG..HANGUL SYLLABLE NUH - {0xB220, 0xB220, prLV}, // Lo HANGUL SYLLABLE NWEO - {0xB221, 0xB23B, prLVT}, // Lo [27] HANGUL SYLLABLE NWEOG..HANGUL SYLLABLE NWEOH - {0xB23C, 0xB23C, prLV}, // Lo HANGUL SYLLABLE NWE - {0xB23D, 0xB257, prLVT}, // Lo [27] HANGUL SYLLABLE NWEG..HANGUL SYLLABLE NWEH - {0xB258, 0xB258, prLV}, // Lo HANGUL SYLLABLE NWI - {0xB259, 0xB273, prLVT}, // Lo [27] HANGUL SYLLABLE NWIG..HANGUL SYLLABLE NWIH - {0xB274, 0xB274, prLV}, // Lo HANGUL SYLLABLE NYU - {0xB275, 0xB28F, prLVT}, // Lo [27] HANGUL SYLLABLE NYUG..HANGUL SYLLABLE NYUH - {0xB290, 0xB290, prLV}, // Lo HANGUL SYLLABLE NEU - {0xB291, 0xB2AB, prLVT}, // Lo [27] HANGUL SYLLABLE NEUG..HANGUL SYLLABLE NEUH - {0xB2AC, 0xB2AC, prLV}, // Lo HANGUL SYLLABLE NYI - {0xB2AD, 0xB2C7, prLVT}, // Lo [27] HANGUL SYLLABLE NYIG..HANGUL SYLLABLE NYIH - {0xB2C8, 0xB2C8, prLV}, // Lo HANGUL SYLLABLE NI - {0xB2C9, 0xB2E3, prLVT}, // Lo [27] HANGUL SYLLABLE NIG..HANGUL SYLLABLE NIH - {0xB2E4, 0xB2E4, prLV}, // Lo HANGUL SYLLABLE DA - {0xB2E5, 0xB2FF, prLVT}, // Lo [27] HANGUL SYLLABLE DAG..HANGUL SYLLABLE DAH - {0xB300, 0xB300, prLV}, // Lo HANGUL SYLLABLE DAE - {0xB301, 0xB31B, prLVT}, // Lo [27] HANGUL SYLLABLE DAEG..HANGUL SYLLABLE DAEH - {0xB31C, 0xB31C, prLV}, // Lo HANGUL SYLLABLE DYA - {0xB31D, 0xB337, prLVT}, // Lo [27] HANGUL SYLLABLE DYAG..HANGUL SYLLABLE DYAH - {0xB338, 0xB338, prLV}, // Lo HANGUL SYLLABLE DYAE - {0xB339, 0xB353, prLVT}, // Lo [27] HANGUL SYLLABLE DYAEG..HANGUL SYLLABLE DYAEH - {0xB354, 0xB354, prLV}, // Lo HANGUL SYLLABLE DEO - {0xB355, 0xB36F, prLVT}, // Lo [27] HANGUL SYLLABLE DEOG..HANGUL SYLLABLE DEOH - {0xB370, 0xB370, prLV}, // Lo HANGUL SYLLABLE DE - {0xB371, 0xB38B, prLVT}, // Lo [27] HANGUL SYLLABLE DEG..HANGUL SYLLABLE DEH - {0xB38C, 0xB38C, prLV}, // Lo HANGUL SYLLABLE DYEO - {0xB38D, 0xB3A7, prLVT}, // Lo [27] HANGUL SYLLABLE DYEOG..HANGUL SYLLABLE DYEOH - {0xB3A8, 0xB3A8, prLV}, // Lo HANGUL SYLLABLE DYE - {0xB3A9, 0xB3C3, prLVT}, // Lo [27] HANGUL SYLLABLE DYEG..HANGUL SYLLABLE DYEH - {0xB3C4, 0xB3C4, prLV}, // Lo HANGUL SYLLABLE DO - {0xB3C5, 0xB3DF, prLVT}, // Lo [27] HANGUL SYLLABLE DOG..HANGUL SYLLABLE DOH - {0xB3E0, 0xB3E0, prLV}, // Lo HANGUL SYLLABLE DWA - {0xB3E1, 0xB3FB, prLVT}, // Lo [27] HANGUL SYLLABLE DWAG..HANGUL SYLLABLE DWAH - {0xB3FC, 0xB3FC, prLV}, // Lo HANGUL SYLLABLE DWAE - {0xB3FD, 0xB417, prLVT}, // Lo [27] HANGUL SYLLABLE DWAEG..HANGUL SYLLABLE DWAEH - {0xB418, 0xB418, prLV}, // Lo HANGUL SYLLABLE DOE - {0xB419, 0xB433, prLVT}, // Lo [27] HANGUL SYLLABLE DOEG..HANGUL SYLLABLE DOEH - {0xB434, 0xB434, prLV}, // Lo HANGUL SYLLABLE DYO - {0xB435, 0xB44F, prLVT}, // Lo [27] HANGUL SYLLABLE DYOG..HANGUL SYLLABLE DYOH - {0xB450, 0xB450, prLV}, // Lo HANGUL SYLLABLE DU - {0xB451, 0xB46B, prLVT}, // Lo [27] HANGUL SYLLABLE DUG..HANGUL SYLLABLE DUH - {0xB46C, 0xB46C, prLV}, // Lo HANGUL SYLLABLE DWEO - {0xB46D, 0xB487, prLVT}, // Lo [27] HANGUL SYLLABLE DWEOG..HANGUL SYLLABLE DWEOH - {0xB488, 0xB488, prLV}, // Lo HANGUL SYLLABLE DWE - {0xB489, 0xB4A3, prLVT}, // Lo [27] HANGUL SYLLABLE DWEG..HANGUL SYLLABLE DWEH - {0xB4A4, 0xB4A4, prLV}, // Lo HANGUL SYLLABLE DWI - {0xB4A5, 0xB4BF, prLVT}, // Lo [27] HANGUL SYLLABLE DWIG..HANGUL SYLLABLE DWIH - {0xB4C0, 0xB4C0, prLV}, // Lo HANGUL SYLLABLE DYU - {0xB4C1, 0xB4DB, prLVT}, // Lo [27] HANGUL SYLLABLE DYUG..HANGUL SYLLABLE DYUH - {0xB4DC, 0xB4DC, prLV}, // Lo HANGUL SYLLABLE DEU - {0xB4DD, 0xB4F7, prLVT}, // Lo [27] HANGUL SYLLABLE DEUG..HANGUL SYLLABLE DEUH - {0xB4F8, 0xB4F8, prLV}, // Lo HANGUL SYLLABLE DYI - {0xB4F9, 0xB513, prLVT}, // Lo [27] HANGUL SYLLABLE DYIG..HANGUL SYLLABLE DYIH - {0xB514, 0xB514, prLV}, // Lo HANGUL SYLLABLE DI - {0xB515, 0xB52F, prLVT}, // Lo [27] HANGUL SYLLABLE DIG..HANGUL SYLLABLE DIH - {0xB530, 0xB530, prLV}, // Lo HANGUL SYLLABLE DDA - {0xB531, 0xB54B, prLVT}, // Lo [27] HANGUL SYLLABLE DDAG..HANGUL SYLLABLE DDAH - {0xB54C, 0xB54C, prLV}, // Lo HANGUL SYLLABLE DDAE - {0xB54D, 0xB567, prLVT}, // Lo [27] HANGUL SYLLABLE DDAEG..HANGUL SYLLABLE DDAEH - {0xB568, 0xB568, prLV}, // Lo HANGUL SYLLABLE DDYA - {0xB569, 0xB583, prLVT}, // Lo [27] HANGUL SYLLABLE DDYAG..HANGUL SYLLABLE DDYAH - {0xB584, 0xB584, prLV}, // Lo HANGUL SYLLABLE DDYAE - {0xB585, 0xB59F, prLVT}, // Lo [27] HANGUL SYLLABLE DDYAEG..HANGUL SYLLABLE DDYAEH - {0xB5A0, 0xB5A0, prLV}, // Lo HANGUL SYLLABLE DDEO - {0xB5A1, 0xB5BB, prLVT}, // Lo [27] HANGUL SYLLABLE DDEOG..HANGUL SYLLABLE DDEOH - {0xB5BC, 0xB5BC, prLV}, // Lo HANGUL SYLLABLE DDE - {0xB5BD, 0xB5D7, prLVT}, // Lo [27] HANGUL SYLLABLE DDEG..HANGUL SYLLABLE DDEH - {0xB5D8, 0xB5D8, prLV}, // Lo HANGUL SYLLABLE DDYEO - {0xB5D9, 0xB5F3, prLVT}, // Lo [27] HANGUL SYLLABLE DDYEOG..HANGUL SYLLABLE DDYEOH - {0xB5F4, 0xB5F4, prLV}, // Lo HANGUL SYLLABLE DDYE - {0xB5F5, 0xB60F, prLVT}, // Lo [27] HANGUL SYLLABLE DDYEG..HANGUL SYLLABLE DDYEH - {0xB610, 0xB610, prLV}, // Lo HANGUL SYLLABLE DDO - {0xB611, 0xB62B, prLVT}, // Lo [27] HANGUL SYLLABLE DDOG..HANGUL SYLLABLE DDOH - {0xB62C, 0xB62C, prLV}, // Lo HANGUL SYLLABLE DDWA - {0xB62D, 0xB647, prLVT}, // Lo [27] HANGUL SYLLABLE DDWAG..HANGUL SYLLABLE DDWAH - {0xB648, 0xB648, prLV}, // Lo HANGUL SYLLABLE DDWAE - {0xB649, 0xB663, prLVT}, // Lo [27] HANGUL SYLLABLE DDWAEG..HANGUL SYLLABLE DDWAEH - {0xB664, 0xB664, prLV}, // Lo HANGUL SYLLABLE DDOE - {0xB665, 0xB67F, prLVT}, // Lo [27] HANGUL SYLLABLE DDOEG..HANGUL SYLLABLE DDOEH - {0xB680, 0xB680, prLV}, // Lo HANGUL SYLLABLE DDYO - {0xB681, 0xB69B, prLVT}, // Lo [27] HANGUL SYLLABLE DDYOG..HANGUL SYLLABLE DDYOH - {0xB69C, 0xB69C, prLV}, // Lo HANGUL SYLLABLE DDU - {0xB69D, 0xB6B7, prLVT}, // Lo [27] HANGUL SYLLABLE DDUG..HANGUL SYLLABLE DDUH - {0xB6B8, 0xB6B8, prLV}, // Lo HANGUL SYLLABLE DDWEO - {0xB6B9, 0xB6D3, prLVT}, // Lo [27] HANGUL SYLLABLE DDWEOG..HANGUL SYLLABLE DDWEOH - {0xB6D4, 0xB6D4, prLV}, // Lo HANGUL SYLLABLE DDWE - {0xB6D5, 0xB6EF, prLVT}, // Lo [27] HANGUL SYLLABLE DDWEG..HANGUL SYLLABLE DDWEH - {0xB6F0, 0xB6F0, prLV}, // Lo HANGUL SYLLABLE DDWI - {0xB6F1, 0xB70B, prLVT}, // Lo [27] HANGUL SYLLABLE DDWIG..HANGUL SYLLABLE DDWIH - {0xB70C, 0xB70C, prLV}, // Lo HANGUL SYLLABLE DDYU - {0xB70D, 0xB727, prLVT}, // Lo [27] HANGUL SYLLABLE DDYUG..HANGUL SYLLABLE DDYUH - {0xB728, 0xB728, prLV}, // Lo HANGUL SYLLABLE DDEU - {0xB729, 0xB743, prLVT}, // Lo [27] HANGUL SYLLABLE DDEUG..HANGUL SYLLABLE DDEUH - {0xB744, 0xB744, prLV}, // Lo HANGUL SYLLABLE DDYI - {0xB745, 0xB75F, prLVT}, // Lo [27] HANGUL SYLLABLE DDYIG..HANGUL SYLLABLE DDYIH - {0xB760, 0xB760, prLV}, // Lo HANGUL SYLLABLE DDI - {0xB761, 0xB77B, prLVT}, // Lo [27] HANGUL SYLLABLE DDIG..HANGUL SYLLABLE DDIH - {0xB77C, 0xB77C, prLV}, // Lo HANGUL SYLLABLE RA - {0xB77D, 0xB797, prLVT}, // Lo [27] HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAH - {0xB798, 0xB798, prLV}, // Lo HANGUL SYLLABLE RAE - {0xB799, 0xB7B3, prLVT}, // Lo [27] HANGUL SYLLABLE RAEG..HANGUL SYLLABLE RAEH - {0xB7B4, 0xB7B4, prLV}, // Lo HANGUL SYLLABLE RYA - {0xB7B5, 0xB7CF, prLVT}, // Lo [27] HANGUL SYLLABLE RYAG..HANGUL SYLLABLE RYAH - {0xB7D0, 0xB7D0, prLV}, // Lo HANGUL SYLLABLE RYAE - {0xB7D1, 0xB7EB, prLVT}, // Lo [27] HANGUL SYLLABLE RYAEG..HANGUL SYLLABLE RYAEH - {0xB7EC, 0xB7EC, prLV}, // Lo HANGUL SYLLABLE REO - {0xB7ED, 0xB807, prLVT}, // Lo [27] HANGUL SYLLABLE REOG..HANGUL SYLLABLE REOH - {0xB808, 0xB808, prLV}, // Lo HANGUL SYLLABLE RE - {0xB809, 0xB823, prLVT}, // Lo [27] HANGUL SYLLABLE REG..HANGUL SYLLABLE REH - {0xB824, 0xB824, prLV}, // Lo HANGUL SYLLABLE RYEO - {0xB825, 0xB83F, prLVT}, // Lo [27] HANGUL SYLLABLE RYEOG..HANGUL SYLLABLE RYEOH - {0xB840, 0xB840, prLV}, // Lo HANGUL SYLLABLE RYE - {0xB841, 0xB85B, prLVT}, // Lo [27] HANGUL SYLLABLE RYEG..HANGUL SYLLABLE RYEH - {0xB85C, 0xB85C, prLV}, // Lo HANGUL SYLLABLE RO - {0xB85D, 0xB877, prLVT}, // Lo [27] HANGUL SYLLABLE ROG..HANGUL SYLLABLE ROH - {0xB878, 0xB878, prLV}, // Lo HANGUL SYLLABLE RWA - {0xB879, 0xB893, prLVT}, // Lo [27] HANGUL SYLLABLE RWAG..HANGUL SYLLABLE RWAH - {0xB894, 0xB894, prLV}, // Lo HANGUL SYLLABLE RWAE - {0xB895, 0xB8AF, prLVT}, // Lo [27] HANGUL SYLLABLE RWAEG..HANGUL SYLLABLE RWAEH - {0xB8B0, 0xB8B0, prLV}, // Lo HANGUL SYLLABLE ROE - {0xB8B1, 0xB8CB, prLVT}, // Lo [27] HANGUL SYLLABLE ROEG..HANGUL SYLLABLE ROEH - {0xB8CC, 0xB8CC, prLV}, // Lo HANGUL SYLLABLE RYO - {0xB8CD, 0xB8E7, prLVT}, // Lo [27] HANGUL SYLLABLE RYOG..HANGUL SYLLABLE RYOH - {0xB8E8, 0xB8E8, prLV}, // Lo HANGUL SYLLABLE RU - {0xB8E9, 0xB903, prLVT}, // Lo [27] HANGUL SYLLABLE RUG..HANGUL SYLLABLE RUH - {0xB904, 0xB904, prLV}, // Lo HANGUL SYLLABLE RWEO - {0xB905, 0xB91F, prLVT}, // Lo [27] HANGUL SYLLABLE RWEOG..HANGUL SYLLABLE RWEOH - {0xB920, 0xB920, prLV}, // Lo HANGUL SYLLABLE RWE - {0xB921, 0xB93B, prLVT}, // Lo [27] HANGUL SYLLABLE RWEG..HANGUL SYLLABLE RWEH - {0xB93C, 0xB93C, prLV}, // Lo HANGUL SYLLABLE RWI - {0xB93D, 0xB957, prLVT}, // Lo [27] HANGUL SYLLABLE RWIG..HANGUL SYLLABLE RWIH - {0xB958, 0xB958, prLV}, // Lo HANGUL SYLLABLE RYU - {0xB959, 0xB973, prLVT}, // Lo [27] HANGUL SYLLABLE RYUG..HANGUL SYLLABLE RYUH - {0xB974, 0xB974, prLV}, // Lo HANGUL SYLLABLE REU - {0xB975, 0xB98F, prLVT}, // Lo [27] HANGUL SYLLABLE REUG..HANGUL SYLLABLE REUH - {0xB990, 0xB990, prLV}, // Lo HANGUL SYLLABLE RYI - {0xB991, 0xB9AB, prLVT}, // Lo [27] HANGUL SYLLABLE RYIG..HANGUL SYLLABLE RYIH - {0xB9AC, 0xB9AC, prLV}, // Lo HANGUL SYLLABLE RI - {0xB9AD, 0xB9C7, prLVT}, // Lo [27] HANGUL SYLLABLE RIG..HANGUL SYLLABLE RIH - {0xB9C8, 0xB9C8, prLV}, // Lo HANGUL SYLLABLE MA - {0xB9C9, 0xB9E3, prLVT}, // Lo [27] HANGUL SYLLABLE MAG..HANGUL SYLLABLE MAH - {0xB9E4, 0xB9E4, prLV}, // Lo HANGUL SYLLABLE MAE - {0xB9E5, 0xB9FF, prLVT}, // Lo [27] HANGUL SYLLABLE MAEG..HANGUL SYLLABLE MAEH - {0xBA00, 0xBA00, prLV}, // Lo HANGUL SYLLABLE MYA - {0xBA01, 0xBA1B, prLVT}, // Lo [27] HANGUL SYLLABLE MYAG..HANGUL SYLLABLE MYAH - {0xBA1C, 0xBA1C, prLV}, // Lo HANGUL SYLLABLE MYAE - {0xBA1D, 0xBA37, prLVT}, // Lo [27] HANGUL SYLLABLE MYAEG..HANGUL SYLLABLE MYAEH - {0xBA38, 0xBA38, prLV}, // Lo HANGUL SYLLABLE MEO - {0xBA39, 0xBA53, prLVT}, // Lo [27] HANGUL SYLLABLE MEOG..HANGUL SYLLABLE MEOH - {0xBA54, 0xBA54, prLV}, // Lo HANGUL SYLLABLE ME - {0xBA55, 0xBA6F, prLVT}, // Lo [27] HANGUL SYLLABLE MEG..HANGUL SYLLABLE MEH - {0xBA70, 0xBA70, prLV}, // Lo HANGUL SYLLABLE MYEO - {0xBA71, 0xBA8B, prLVT}, // Lo [27] HANGUL SYLLABLE MYEOG..HANGUL SYLLABLE MYEOH - {0xBA8C, 0xBA8C, prLV}, // Lo HANGUL SYLLABLE MYE - {0xBA8D, 0xBAA7, prLVT}, // Lo [27] HANGUL SYLLABLE MYEG..HANGUL SYLLABLE MYEH - {0xBAA8, 0xBAA8, prLV}, // Lo HANGUL SYLLABLE MO - {0xBAA9, 0xBAC3, prLVT}, // Lo [27] HANGUL SYLLABLE MOG..HANGUL SYLLABLE MOH - {0xBAC4, 0xBAC4, prLV}, // Lo HANGUL SYLLABLE MWA - {0xBAC5, 0xBADF, prLVT}, // Lo [27] HANGUL SYLLABLE MWAG..HANGUL SYLLABLE MWAH - {0xBAE0, 0xBAE0, prLV}, // Lo HANGUL SYLLABLE MWAE - {0xBAE1, 0xBAFB, prLVT}, // Lo [27] HANGUL SYLLABLE MWAEG..HANGUL SYLLABLE MWAEH - {0xBAFC, 0xBAFC, prLV}, // Lo HANGUL SYLLABLE MOE - {0xBAFD, 0xBB17, prLVT}, // Lo [27] HANGUL SYLLABLE MOEG..HANGUL SYLLABLE MOEH - {0xBB18, 0xBB18, prLV}, // Lo HANGUL SYLLABLE MYO - {0xBB19, 0xBB33, prLVT}, // Lo [27] HANGUL SYLLABLE MYOG..HANGUL SYLLABLE MYOH - {0xBB34, 0xBB34, prLV}, // Lo HANGUL SYLLABLE MU - {0xBB35, 0xBB4F, prLVT}, // Lo [27] HANGUL SYLLABLE MUG..HANGUL SYLLABLE MUH - {0xBB50, 0xBB50, prLV}, // Lo HANGUL SYLLABLE MWEO - {0xBB51, 0xBB6B, prLVT}, // Lo [27] HANGUL SYLLABLE MWEOG..HANGUL SYLLABLE MWEOH - {0xBB6C, 0xBB6C, prLV}, // Lo HANGUL SYLLABLE MWE - {0xBB6D, 0xBB87, prLVT}, // Lo [27] HANGUL SYLLABLE MWEG..HANGUL SYLLABLE MWEH - {0xBB88, 0xBB88, prLV}, // Lo HANGUL SYLLABLE MWI - {0xBB89, 0xBBA3, prLVT}, // Lo [27] HANGUL SYLLABLE MWIG..HANGUL SYLLABLE MWIH - {0xBBA4, 0xBBA4, prLV}, // Lo HANGUL SYLLABLE MYU - {0xBBA5, 0xBBBF, prLVT}, // Lo [27] HANGUL SYLLABLE MYUG..HANGUL SYLLABLE MYUH - {0xBBC0, 0xBBC0, prLV}, // Lo HANGUL SYLLABLE MEU - {0xBBC1, 0xBBDB, prLVT}, // Lo [27] HANGUL SYLLABLE MEUG..HANGUL SYLLABLE MEUH - {0xBBDC, 0xBBDC, prLV}, // Lo HANGUL SYLLABLE MYI - {0xBBDD, 0xBBF7, prLVT}, // Lo [27] HANGUL SYLLABLE MYIG..HANGUL SYLLABLE MYIH - {0xBBF8, 0xBBF8, prLV}, // Lo HANGUL SYLLABLE MI - {0xBBF9, 0xBC13, prLVT}, // Lo [27] HANGUL SYLLABLE MIG..HANGUL SYLLABLE MIH - {0xBC14, 0xBC14, prLV}, // Lo HANGUL SYLLABLE BA - {0xBC15, 0xBC2F, prLVT}, // Lo [27] HANGUL SYLLABLE BAG..HANGUL SYLLABLE BAH - {0xBC30, 0xBC30, prLV}, // Lo HANGUL SYLLABLE BAE - {0xBC31, 0xBC4B, prLVT}, // Lo [27] HANGUL SYLLABLE BAEG..HANGUL SYLLABLE BAEH - {0xBC4C, 0xBC4C, prLV}, // Lo HANGUL SYLLABLE BYA - {0xBC4D, 0xBC67, prLVT}, // Lo [27] HANGUL SYLLABLE BYAG..HANGUL SYLLABLE BYAH - {0xBC68, 0xBC68, prLV}, // Lo HANGUL SYLLABLE BYAE - {0xBC69, 0xBC83, prLVT}, // Lo [27] HANGUL SYLLABLE BYAEG..HANGUL SYLLABLE BYAEH - {0xBC84, 0xBC84, prLV}, // Lo HANGUL SYLLABLE BEO - {0xBC85, 0xBC9F, prLVT}, // Lo [27] HANGUL SYLLABLE BEOG..HANGUL SYLLABLE BEOH - {0xBCA0, 0xBCA0, prLV}, // Lo HANGUL SYLLABLE BE - {0xBCA1, 0xBCBB, prLVT}, // Lo [27] HANGUL SYLLABLE BEG..HANGUL SYLLABLE BEH - {0xBCBC, 0xBCBC, prLV}, // Lo HANGUL SYLLABLE BYEO - {0xBCBD, 0xBCD7, prLVT}, // Lo [27] HANGUL SYLLABLE BYEOG..HANGUL SYLLABLE BYEOH - {0xBCD8, 0xBCD8, prLV}, // Lo HANGUL SYLLABLE BYE - {0xBCD9, 0xBCF3, prLVT}, // Lo [27] HANGUL SYLLABLE BYEG..HANGUL SYLLABLE BYEH - {0xBCF4, 0xBCF4, prLV}, // Lo HANGUL SYLLABLE BO - {0xBCF5, 0xBD0F, prLVT}, // Lo [27] HANGUL SYLLABLE BOG..HANGUL SYLLABLE BOH - {0xBD10, 0xBD10, prLV}, // Lo HANGUL SYLLABLE BWA - {0xBD11, 0xBD2B, prLVT}, // Lo [27] HANGUL SYLLABLE BWAG..HANGUL SYLLABLE BWAH - {0xBD2C, 0xBD2C, prLV}, // Lo HANGUL SYLLABLE BWAE - {0xBD2D, 0xBD47, prLVT}, // Lo [27] HANGUL SYLLABLE BWAEG..HANGUL SYLLABLE BWAEH - {0xBD48, 0xBD48, prLV}, // Lo HANGUL SYLLABLE BOE - {0xBD49, 0xBD63, prLVT}, // Lo [27] HANGUL SYLLABLE BOEG..HANGUL SYLLABLE BOEH - {0xBD64, 0xBD64, prLV}, // Lo HANGUL SYLLABLE BYO - {0xBD65, 0xBD7F, prLVT}, // Lo [27] HANGUL SYLLABLE BYOG..HANGUL SYLLABLE BYOH - {0xBD80, 0xBD80, prLV}, // Lo HANGUL SYLLABLE BU - {0xBD81, 0xBD9B, prLVT}, // Lo [27] HANGUL SYLLABLE BUG..HANGUL SYLLABLE BUH - {0xBD9C, 0xBD9C, prLV}, // Lo HANGUL SYLLABLE BWEO - {0xBD9D, 0xBDB7, prLVT}, // Lo [27] HANGUL SYLLABLE BWEOG..HANGUL SYLLABLE BWEOH - {0xBDB8, 0xBDB8, prLV}, // Lo HANGUL SYLLABLE BWE - {0xBDB9, 0xBDD3, prLVT}, // Lo [27] HANGUL SYLLABLE BWEG..HANGUL SYLLABLE BWEH - {0xBDD4, 0xBDD4, prLV}, // Lo HANGUL SYLLABLE BWI - {0xBDD5, 0xBDEF, prLVT}, // Lo [27] HANGUL SYLLABLE BWIG..HANGUL SYLLABLE BWIH - {0xBDF0, 0xBDF0, prLV}, // Lo HANGUL SYLLABLE BYU - {0xBDF1, 0xBE0B, prLVT}, // Lo [27] HANGUL SYLLABLE BYUG..HANGUL SYLLABLE BYUH - {0xBE0C, 0xBE0C, prLV}, // Lo HANGUL SYLLABLE BEU - {0xBE0D, 0xBE27, prLVT}, // Lo [27] HANGUL SYLLABLE BEUG..HANGUL SYLLABLE BEUH - {0xBE28, 0xBE28, prLV}, // Lo HANGUL SYLLABLE BYI - {0xBE29, 0xBE43, prLVT}, // Lo [27] HANGUL SYLLABLE BYIG..HANGUL SYLLABLE BYIH - {0xBE44, 0xBE44, prLV}, // Lo HANGUL SYLLABLE BI - {0xBE45, 0xBE5F, prLVT}, // Lo [27] HANGUL SYLLABLE BIG..HANGUL SYLLABLE BIH - {0xBE60, 0xBE60, prLV}, // Lo HANGUL SYLLABLE BBA - {0xBE61, 0xBE7B, prLVT}, // Lo [27] HANGUL SYLLABLE BBAG..HANGUL SYLLABLE BBAH - {0xBE7C, 0xBE7C, prLV}, // Lo HANGUL SYLLABLE BBAE - {0xBE7D, 0xBE97, prLVT}, // Lo [27] HANGUL SYLLABLE BBAEG..HANGUL SYLLABLE BBAEH - {0xBE98, 0xBE98, prLV}, // Lo HANGUL SYLLABLE BBYA - {0xBE99, 0xBEB3, prLVT}, // Lo [27] HANGUL SYLLABLE BBYAG..HANGUL SYLLABLE BBYAH - {0xBEB4, 0xBEB4, prLV}, // Lo HANGUL SYLLABLE BBYAE - {0xBEB5, 0xBECF, prLVT}, // Lo [27] HANGUL SYLLABLE BBYAEG..HANGUL SYLLABLE BBYAEH - {0xBED0, 0xBED0, prLV}, // Lo HANGUL SYLLABLE BBEO - {0xBED1, 0xBEEB, prLVT}, // Lo [27] HANGUL SYLLABLE BBEOG..HANGUL SYLLABLE BBEOH - {0xBEEC, 0xBEEC, prLV}, // Lo HANGUL SYLLABLE BBE - {0xBEED, 0xBF07, prLVT}, // Lo [27] HANGUL SYLLABLE BBEG..HANGUL SYLLABLE BBEH - {0xBF08, 0xBF08, prLV}, // Lo HANGUL SYLLABLE BBYEO - {0xBF09, 0xBF23, prLVT}, // Lo [27] HANGUL SYLLABLE BBYEOG..HANGUL SYLLABLE BBYEOH - {0xBF24, 0xBF24, prLV}, // Lo HANGUL SYLLABLE BBYE - {0xBF25, 0xBF3F, prLVT}, // Lo [27] HANGUL SYLLABLE BBYEG..HANGUL SYLLABLE BBYEH - {0xBF40, 0xBF40, prLV}, // Lo HANGUL SYLLABLE BBO - {0xBF41, 0xBF5B, prLVT}, // Lo [27] HANGUL SYLLABLE BBOG..HANGUL SYLLABLE BBOH - {0xBF5C, 0xBF5C, prLV}, // Lo HANGUL SYLLABLE BBWA - {0xBF5D, 0xBF77, prLVT}, // Lo [27] HANGUL SYLLABLE BBWAG..HANGUL SYLLABLE BBWAH - {0xBF78, 0xBF78, prLV}, // Lo HANGUL SYLLABLE BBWAE - {0xBF79, 0xBF93, prLVT}, // Lo [27] HANGUL SYLLABLE BBWAEG..HANGUL SYLLABLE BBWAEH - {0xBF94, 0xBF94, prLV}, // Lo HANGUL SYLLABLE BBOE - {0xBF95, 0xBFAF, prLVT}, // Lo [27] HANGUL SYLLABLE BBOEG..HANGUL SYLLABLE BBOEH - {0xBFB0, 0xBFB0, prLV}, // Lo HANGUL SYLLABLE BBYO - {0xBFB1, 0xBFCB, prLVT}, // Lo [27] HANGUL SYLLABLE BBYOG..HANGUL SYLLABLE BBYOH - {0xBFCC, 0xBFCC, prLV}, // Lo HANGUL SYLLABLE BBU - {0xBFCD, 0xBFE7, prLVT}, // Lo [27] HANGUL SYLLABLE BBUG..HANGUL SYLLABLE BBUH - {0xBFE8, 0xBFE8, prLV}, // Lo HANGUL SYLLABLE BBWEO - {0xBFE9, 0xC003, prLVT}, // Lo [27] HANGUL SYLLABLE BBWEOG..HANGUL SYLLABLE BBWEOH - {0xC004, 0xC004, prLV}, // Lo HANGUL SYLLABLE BBWE - {0xC005, 0xC01F, prLVT}, // Lo [27] HANGUL SYLLABLE BBWEG..HANGUL SYLLABLE BBWEH - {0xC020, 0xC020, prLV}, // Lo HANGUL SYLLABLE BBWI - {0xC021, 0xC03B, prLVT}, // Lo [27] HANGUL SYLLABLE BBWIG..HANGUL SYLLABLE BBWIH - {0xC03C, 0xC03C, prLV}, // Lo HANGUL SYLLABLE BBYU - {0xC03D, 0xC057, prLVT}, // Lo [27] HANGUL SYLLABLE BBYUG..HANGUL SYLLABLE BBYUH - {0xC058, 0xC058, prLV}, // Lo HANGUL SYLLABLE BBEU - {0xC059, 0xC073, prLVT}, // Lo [27] HANGUL SYLLABLE BBEUG..HANGUL SYLLABLE BBEUH - {0xC074, 0xC074, prLV}, // Lo HANGUL SYLLABLE BBYI - {0xC075, 0xC08F, prLVT}, // Lo [27] HANGUL SYLLABLE BBYIG..HANGUL SYLLABLE BBYIH - {0xC090, 0xC090, prLV}, // Lo HANGUL SYLLABLE BBI - {0xC091, 0xC0AB, prLVT}, // Lo [27] HANGUL SYLLABLE BBIG..HANGUL SYLLABLE BBIH - {0xC0AC, 0xC0AC, prLV}, // Lo HANGUL SYLLABLE SA - {0xC0AD, 0xC0C7, prLVT}, // Lo [27] HANGUL SYLLABLE SAG..HANGUL SYLLABLE SAH - {0xC0C8, 0xC0C8, prLV}, // Lo HANGUL SYLLABLE SAE - {0xC0C9, 0xC0E3, prLVT}, // Lo [27] HANGUL SYLLABLE SAEG..HANGUL SYLLABLE SAEH - {0xC0E4, 0xC0E4, prLV}, // Lo HANGUL SYLLABLE SYA - {0xC0E5, 0xC0FF, prLVT}, // Lo [27] HANGUL SYLLABLE SYAG..HANGUL SYLLABLE SYAH - {0xC100, 0xC100, prLV}, // Lo HANGUL SYLLABLE SYAE - {0xC101, 0xC11B, prLVT}, // Lo [27] HANGUL SYLLABLE SYAEG..HANGUL SYLLABLE SYAEH - {0xC11C, 0xC11C, prLV}, // Lo HANGUL SYLLABLE SEO - {0xC11D, 0xC137, prLVT}, // Lo [27] HANGUL SYLLABLE SEOG..HANGUL SYLLABLE SEOH - {0xC138, 0xC138, prLV}, // Lo HANGUL SYLLABLE SE - {0xC139, 0xC153, prLVT}, // Lo [27] HANGUL SYLLABLE SEG..HANGUL SYLLABLE SEH - {0xC154, 0xC154, prLV}, // Lo HANGUL SYLLABLE SYEO - {0xC155, 0xC16F, prLVT}, // Lo [27] HANGUL SYLLABLE SYEOG..HANGUL SYLLABLE SYEOH - {0xC170, 0xC170, prLV}, // Lo HANGUL SYLLABLE SYE - {0xC171, 0xC18B, prLVT}, // Lo [27] HANGUL SYLLABLE SYEG..HANGUL SYLLABLE SYEH - {0xC18C, 0xC18C, prLV}, // Lo HANGUL SYLLABLE SO - {0xC18D, 0xC1A7, prLVT}, // Lo [27] HANGUL SYLLABLE SOG..HANGUL SYLLABLE SOH - {0xC1A8, 0xC1A8, prLV}, // Lo HANGUL SYLLABLE SWA - {0xC1A9, 0xC1C3, prLVT}, // Lo [27] HANGUL SYLLABLE SWAG..HANGUL SYLLABLE SWAH - {0xC1C4, 0xC1C4, prLV}, // Lo HANGUL SYLLABLE SWAE - {0xC1C5, 0xC1DF, prLVT}, // Lo [27] HANGUL SYLLABLE SWAEG..HANGUL SYLLABLE SWAEH - {0xC1E0, 0xC1E0, prLV}, // Lo HANGUL SYLLABLE SOE - {0xC1E1, 0xC1FB, prLVT}, // Lo [27] HANGUL SYLLABLE SOEG..HANGUL SYLLABLE SOEH - {0xC1FC, 0xC1FC, prLV}, // Lo HANGUL SYLLABLE SYO - {0xC1FD, 0xC217, prLVT}, // Lo [27] HANGUL SYLLABLE SYOG..HANGUL SYLLABLE SYOH - {0xC218, 0xC218, prLV}, // Lo HANGUL SYLLABLE SU - {0xC219, 0xC233, prLVT}, // Lo [27] HANGUL SYLLABLE SUG..HANGUL SYLLABLE SUH - {0xC234, 0xC234, prLV}, // Lo HANGUL SYLLABLE SWEO - {0xC235, 0xC24F, prLVT}, // Lo [27] HANGUL SYLLABLE SWEOG..HANGUL SYLLABLE SWEOH - {0xC250, 0xC250, prLV}, // Lo HANGUL SYLLABLE SWE - {0xC251, 0xC26B, prLVT}, // Lo [27] HANGUL SYLLABLE SWEG..HANGUL SYLLABLE SWEH - {0xC26C, 0xC26C, prLV}, // Lo HANGUL SYLLABLE SWI - {0xC26D, 0xC287, prLVT}, // Lo [27] HANGUL SYLLABLE SWIG..HANGUL SYLLABLE SWIH - {0xC288, 0xC288, prLV}, // Lo HANGUL SYLLABLE SYU - {0xC289, 0xC2A3, prLVT}, // Lo [27] HANGUL SYLLABLE SYUG..HANGUL SYLLABLE SYUH - {0xC2A4, 0xC2A4, prLV}, // Lo HANGUL SYLLABLE SEU - {0xC2A5, 0xC2BF, prLVT}, // Lo [27] HANGUL SYLLABLE SEUG..HANGUL SYLLABLE SEUH - {0xC2C0, 0xC2C0, prLV}, // Lo HANGUL SYLLABLE SYI - {0xC2C1, 0xC2DB, prLVT}, // Lo [27] HANGUL SYLLABLE SYIG..HANGUL SYLLABLE SYIH - {0xC2DC, 0xC2DC, prLV}, // Lo HANGUL SYLLABLE SI - {0xC2DD, 0xC2F7, prLVT}, // Lo [27] HANGUL SYLLABLE SIG..HANGUL SYLLABLE SIH - {0xC2F8, 0xC2F8, prLV}, // Lo HANGUL SYLLABLE SSA - {0xC2F9, 0xC313, prLVT}, // Lo [27] HANGUL SYLLABLE SSAG..HANGUL SYLLABLE SSAH - {0xC314, 0xC314, prLV}, // Lo HANGUL SYLLABLE SSAE - {0xC315, 0xC32F, prLVT}, // Lo [27] HANGUL SYLLABLE SSAEG..HANGUL SYLLABLE SSAEH - {0xC330, 0xC330, prLV}, // Lo HANGUL SYLLABLE SSYA - {0xC331, 0xC34B, prLVT}, // Lo [27] HANGUL SYLLABLE SSYAG..HANGUL SYLLABLE SSYAH - {0xC34C, 0xC34C, prLV}, // Lo HANGUL SYLLABLE SSYAE - {0xC34D, 0xC367, prLVT}, // Lo [27] HANGUL SYLLABLE SSYAEG..HANGUL SYLLABLE SSYAEH - {0xC368, 0xC368, prLV}, // Lo HANGUL SYLLABLE SSEO - {0xC369, 0xC383, prLVT}, // Lo [27] HANGUL SYLLABLE SSEOG..HANGUL SYLLABLE SSEOH - {0xC384, 0xC384, prLV}, // Lo HANGUL SYLLABLE SSE - {0xC385, 0xC39F, prLVT}, // Lo [27] HANGUL SYLLABLE SSEG..HANGUL SYLLABLE SSEH - {0xC3A0, 0xC3A0, prLV}, // Lo HANGUL SYLLABLE SSYEO - {0xC3A1, 0xC3BB, prLVT}, // Lo [27] HANGUL SYLLABLE SSYEOG..HANGUL SYLLABLE SSYEOH - {0xC3BC, 0xC3BC, prLV}, // Lo HANGUL SYLLABLE SSYE - {0xC3BD, 0xC3D7, prLVT}, // Lo [27] HANGUL SYLLABLE SSYEG..HANGUL SYLLABLE SSYEH - {0xC3D8, 0xC3D8, prLV}, // Lo HANGUL SYLLABLE SSO - {0xC3D9, 0xC3F3, prLVT}, // Lo [27] HANGUL SYLLABLE SSOG..HANGUL SYLLABLE SSOH - {0xC3F4, 0xC3F4, prLV}, // Lo HANGUL SYLLABLE SSWA - {0xC3F5, 0xC40F, prLVT}, // Lo [27] HANGUL SYLLABLE SSWAG..HANGUL SYLLABLE SSWAH - {0xC410, 0xC410, prLV}, // Lo HANGUL SYLLABLE SSWAE - {0xC411, 0xC42B, prLVT}, // Lo [27] HANGUL SYLLABLE SSWAEG..HANGUL SYLLABLE SSWAEH - {0xC42C, 0xC42C, prLV}, // Lo HANGUL SYLLABLE SSOE - {0xC42D, 0xC447, prLVT}, // Lo [27] HANGUL SYLLABLE SSOEG..HANGUL SYLLABLE SSOEH - {0xC448, 0xC448, prLV}, // Lo HANGUL SYLLABLE SSYO - {0xC449, 0xC463, prLVT}, // Lo [27] HANGUL SYLLABLE SSYOG..HANGUL SYLLABLE SSYOH - {0xC464, 0xC464, prLV}, // Lo HANGUL SYLLABLE SSU - {0xC465, 0xC47F, prLVT}, // Lo [27] HANGUL SYLLABLE SSUG..HANGUL SYLLABLE SSUH - {0xC480, 0xC480, prLV}, // Lo HANGUL SYLLABLE SSWEO - {0xC481, 0xC49B, prLVT}, // Lo [27] HANGUL SYLLABLE SSWEOG..HANGUL SYLLABLE SSWEOH - {0xC49C, 0xC49C, prLV}, // Lo HANGUL SYLLABLE SSWE - {0xC49D, 0xC4B7, prLVT}, // Lo [27] HANGUL SYLLABLE SSWEG..HANGUL SYLLABLE SSWEH - {0xC4B8, 0xC4B8, prLV}, // Lo HANGUL SYLLABLE SSWI - {0xC4B9, 0xC4D3, prLVT}, // Lo [27] HANGUL SYLLABLE SSWIG..HANGUL SYLLABLE SSWIH - {0xC4D4, 0xC4D4, prLV}, // Lo HANGUL SYLLABLE SSYU - {0xC4D5, 0xC4EF, prLVT}, // Lo [27] HANGUL SYLLABLE SSYUG..HANGUL SYLLABLE SSYUH - {0xC4F0, 0xC4F0, prLV}, // Lo HANGUL SYLLABLE SSEU - {0xC4F1, 0xC50B, prLVT}, // Lo [27] HANGUL SYLLABLE SSEUG..HANGUL SYLLABLE SSEUH - {0xC50C, 0xC50C, prLV}, // Lo HANGUL SYLLABLE SSYI - {0xC50D, 0xC527, prLVT}, // Lo [27] HANGUL SYLLABLE SSYIG..HANGUL SYLLABLE SSYIH - {0xC528, 0xC528, prLV}, // Lo HANGUL SYLLABLE SSI - {0xC529, 0xC543, prLVT}, // Lo [27] HANGUL SYLLABLE SSIG..HANGUL SYLLABLE SSIH - {0xC544, 0xC544, prLV}, // Lo HANGUL SYLLABLE A - {0xC545, 0xC55F, prLVT}, // Lo [27] HANGUL SYLLABLE AG..HANGUL SYLLABLE AH - {0xC560, 0xC560, prLV}, // Lo HANGUL SYLLABLE AE - {0xC561, 0xC57B, prLVT}, // Lo [27] HANGUL SYLLABLE AEG..HANGUL SYLLABLE AEH - {0xC57C, 0xC57C, prLV}, // Lo HANGUL SYLLABLE YA - {0xC57D, 0xC597, prLVT}, // Lo [27] HANGUL SYLLABLE YAG..HANGUL SYLLABLE YAH - {0xC598, 0xC598, prLV}, // Lo HANGUL SYLLABLE YAE - {0xC599, 0xC5B3, prLVT}, // Lo [27] HANGUL SYLLABLE YAEG..HANGUL SYLLABLE YAEH - {0xC5B4, 0xC5B4, prLV}, // Lo HANGUL SYLLABLE EO - {0xC5B5, 0xC5CF, prLVT}, // Lo [27] HANGUL SYLLABLE EOG..HANGUL SYLLABLE EOH - {0xC5D0, 0xC5D0, prLV}, // Lo HANGUL SYLLABLE E - {0xC5D1, 0xC5EB, prLVT}, // Lo [27] HANGUL SYLLABLE EG..HANGUL SYLLABLE EH - {0xC5EC, 0xC5EC, prLV}, // Lo HANGUL SYLLABLE YEO - {0xC5ED, 0xC607, prLVT}, // Lo [27] HANGUL SYLLABLE YEOG..HANGUL SYLLABLE YEOH - {0xC608, 0xC608, prLV}, // Lo HANGUL SYLLABLE YE - {0xC609, 0xC623, prLVT}, // Lo [27] HANGUL SYLLABLE YEG..HANGUL SYLLABLE YEH - {0xC624, 0xC624, prLV}, // Lo HANGUL SYLLABLE O - {0xC625, 0xC63F, prLVT}, // Lo [27] HANGUL SYLLABLE OG..HANGUL SYLLABLE OH - {0xC640, 0xC640, prLV}, // Lo HANGUL SYLLABLE WA - {0xC641, 0xC65B, prLVT}, // Lo [27] HANGUL SYLLABLE WAG..HANGUL SYLLABLE WAH - {0xC65C, 0xC65C, prLV}, // Lo HANGUL SYLLABLE WAE - {0xC65D, 0xC677, prLVT}, // Lo [27] HANGUL SYLLABLE WAEG..HANGUL SYLLABLE WAEH - {0xC678, 0xC678, prLV}, // Lo HANGUL SYLLABLE OE - {0xC679, 0xC693, prLVT}, // Lo [27] HANGUL SYLLABLE OEG..HANGUL SYLLABLE OEH - {0xC694, 0xC694, prLV}, // Lo HANGUL SYLLABLE YO - {0xC695, 0xC6AF, prLVT}, // Lo [27] HANGUL SYLLABLE YOG..HANGUL SYLLABLE YOH - {0xC6B0, 0xC6B0, prLV}, // Lo HANGUL SYLLABLE U - {0xC6B1, 0xC6CB, prLVT}, // Lo [27] HANGUL SYLLABLE UG..HANGUL SYLLABLE UH - {0xC6CC, 0xC6CC, prLV}, // Lo HANGUL SYLLABLE WEO - {0xC6CD, 0xC6E7, prLVT}, // Lo [27] HANGUL SYLLABLE WEOG..HANGUL SYLLABLE WEOH - {0xC6E8, 0xC6E8, prLV}, // Lo HANGUL SYLLABLE WE - {0xC6E9, 0xC703, prLVT}, // Lo [27] HANGUL SYLLABLE WEG..HANGUL SYLLABLE WEH - {0xC704, 0xC704, prLV}, // Lo HANGUL SYLLABLE WI - {0xC705, 0xC71F, prLVT}, // Lo [27] HANGUL SYLLABLE WIG..HANGUL SYLLABLE WIH - {0xC720, 0xC720, prLV}, // Lo HANGUL SYLLABLE YU - {0xC721, 0xC73B, prLVT}, // Lo [27] HANGUL SYLLABLE YUG..HANGUL SYLLABLE YUH - {0xC73C, 0xC73C, prLV}, // Lo HANGUL SYLLABLE EU - {0xC73D, 0xC757, prLVT}, // Lo [27] HANGUL SYLLABLE EUG..HANGUL SYLLABLE EUH - {0xC758, 0xC758, prLV}, // Lo HANGUL SYLLABLE YI - {0xC759, 0xC773, prLVT}, // Lo [27] HANGUL SYLLABLE YIG..HANGUL SYLLABLE YIH - {0xC774, 0xC774, prLV}, // Lo HANGUL SYLLABLE I - {0xC775, 0xC78F, prLVT}, // Lo [27] HANGUL SYLLABLE IG..HANGUL SYLLABLE IH - {0xC790, 0xC790, prLV}, // Lo HANGUL SYLLABLE JA - {0xC791, 0xC7AB, prLVT}, // Lo [27] HANGUL SYLLABLE JAG..HANGUL SYLLABLE JAH - {0xC7AC, 0xC7AC, prLV}, // Lo HANGUL SYLLABLE JAE - {0xC7AD, 0xC7C7, prLVT}, // Lo [27] HANGUL SYLLABLE JAEG..HANGUL SYLLABLE JAEH - {0xC7C8, 0xC7C8, prLV}, // Lo HANGUL SYLLABLE JYA - {0xC7C9, 0xC7E3, prLVT}, // Lo [27] HANGUL SYLLABLE JYAG..HANGUL SYLLABLE JYAH - {0xC7E4, 0xC7E4, prLV}, // Lo HANGUL SYLLABLE JYAE - {0xC7E5, 0xC7FF, prLVT}, // Lo [27] HANGUL SYLLABLE JYAEG..HANGUL SYLLABLE JYAEH - {0xC800, 0xC800, prLV}, // Lo HANGUL SYLLABLE JEO - {0xC801, 0xC81B, prLVT}, // Lo [27] HANGUL SYLLABLE JEOG..HANGUL SYLLABLE JEOH - {0xC81C, 0xC81C, prLV}, // Lo HANGUL SYLLABLE JE - {0xC81D, 0xC837, prLVT}, // Lo [27] HANGUL SYLLABLE JEG..HANGUL SYLLABLE JEH - {0xC838, 0xC838, prLV}, // Lo HANGUL SYLLABLE JYEO - {0xC839, 0xC853, prLVT}, // Lo [27] HANGUL SYLLABLE JYEOG..HANGUL SYLLABLE JYEOH - {0xC854, 0xC854, prLV}, // Lo HANGUL SYLLABLE JYE - {0xC855, 0xC86F, prLVT}, // Lo [27] HANGUL SYLLABLE JYEG..HANGUL SYLLABLE JYEH - {0xC870, 0xC870, prLV}, // Lo HANGUL SYLLABLE JO - {0xC871, 0xC88B, prLVT}, // Lo [27] HANGUL SYLLABLE JOG..HANGUL SYLLABLE JOH - {0xC88C, 0xC88C, prLV}, // Lo HANGUL SYLLABLE JWA - {0xC88D, 0xC8A7, prLVT}, // Lo [27] HANGUL SYLLABLE JWAG..HANGUL SYLLABLE JWAH - {0xC8A8, 0xC8A8, prLV}, // Lo HANGUL SYLLABLE JWAE - {0xC8A9, 0xC8C3, prLVT}, // Lo [27] HANGUL SYLLABLE JWAEG..HANGUL SYLLABLE JWAEH - {0xC8C4, 0xC8C4, prLV}, // Lo HANGUL SYLLABLE JOE - {0xC8C5, 0xC8DF, prLVT}, // Lo [27] HANGUL SYLLABLE JOEG..HANGUL SYLLABLE JOEH - {0xC8E0, 0xC8E0, prLV}, // Lo HANGUL SYLLABLE JYO - {0xC8E1, 0xC8FB, prLVT}, // Lo [27] HANGUL SYLLABLE JYOG..HANGUL SYLLABLE JYOH - {0xC8FC, 0xC8FC, prLV}, // Lo HANGUL SYLLABLE JU - {0xC8FD, 0xC917, prLVT}, // Lo [27] HANGUL SYLLABLE JUG..HANGUL SYLLABLE JUH - {0xC918, 0xC918, prLV}, // Lo HANGUL SYLLABLE JWEO - {0xC919, 0xC933, prLVT}, // Lo [27] HANGUL SYLLABLE JWEOG..HANGUL SYLLABLE JWEOH - {0xC934, 0xC934, prLV}, // Lo HANGUL SYLLABLE JWE - {0xC935, 0xC94F, prLVT}, // Lo [27] HANGUL SYLLABLE JWEG..HANGUL SYLLABLE JWEH - {0xC950, 0xC950, prLV}, // Lo HANGUL SYLLABLE JWI - {0xC951, 0xC96B, prLVT}, // Lo [27] HANGUL SYLLABLE JWIG..HANGUL SYLLABLE JWIH - {0xC96C, 0xC96C, prLV}, // Lo HANGUL SYLLABLE JYU - {0xC96D, 0xC987, prLVT}, // Lo [27] HANGUL SYLLABLE JYUG..HANGUL SYLLABLE JYUH - {0xC988, 0xC988, prLV}, // Lo HANGUL SYLLABLE JEU - {0xC989, 0xC9A3, prLVT}, // Lo [27] HANGUL SYLLABLE JEUG..HANGUL SYLLABLE JEUH - {0xC9A4, 0xC9A4, prLV}, // Lo HANGUL SYLLABLE JYI - {0xC9A5, 0xC9BF, prLVT}, // Lo [27] HANGUL SYLLABLE JYIG..HANGUL SYLLABLE JYIH - {0xC9C0, 0xC9C0, prLV}, // Lo HANGUL SYLLABLE JI - {0xC9C1, 0xC9DB, prLVT}, // Lo [27] HANGUL SYLLABLE JIG..HANGUL SYLLABLE JIH - {0xC9DC, 0xC9DC, prLV}, // Lo HANGUL SYLLABLE JJA - {0xC9DD, 0xC9F7, prLVT}, // Lo [27] HANGUL SYLLABLE JJAG..HANGUL SYLLABLE JJAH - {0xC9F8, 0xC9F8, prLV}, // Lo HANGUL SYLLABLE JJAE - {0xC9F9, 0xCA13, prLVT}, // Lo [27] HANGUL SYLLABLE JJAEG..HANGUL SYLLABLE JJAEH - {0xCA14, 0xCA14, prLV}, // Lo HANGUL SYLLABLE JJYA - {0xCA15, 0xCA2F, prLVT}, // Lo [27] HANGUL SYLLABLE JJYAG..HANGUL SYLLABLE JJYAH - {0xCA30, 0xCA30, prLV}, // Lo HANGUL SYLLABLE JJYAE - {0xCA31, 0xCA4B, prLVT}, // Lo [27] HANGUL SYLLABLE JJYAEG..HANGUL SYLLABLE JJYAEH - {0xCA4C, 0xCA4C, prLV}, // Lo HANGUL SYLLABLE JJEO - {0xCA4D, 0xCA67, prLVT}, // Lo [27] HANGUL SYLLABLE JJEOG..HANGUL SYLLABLE JJEOH - {0xCA68, 0xCA68, prLV}, // Lo HANGUL SYLLABLE JJE - {0xCA69, 0xCA83, prLVT}, // Lo [27] HANGUL SYLLABLE JJEG..HANGUL SYLLABLE JJEH - {0xCA84, 0xCA84, prLV}, // Lo HANGUL SYLLABLE JJYEO - {0xCA85, 0xCA9F, prLVT}, // Lo [27] HANGUL SYLLABLE JJYEOG..HANGUL SYLLABLE JJYEOH - {0xCAA0, 0xCAA0, prLV}, // Lo HANGUL SYLLABLE JJYE - {0xCAA1, 0xCABB, prLVT}, // Lo [27] HANGUL SYLLABLE JJYEG..HANGUL SYLLABLE JJYEH - {0xCABC, 0xCABC, prLV}, // Lo HANGUL SYLLABLE JJO - {0xCABD, 0xCAD7, prLVT}, // Lo [27] HANGUL SYLLABLE JJOG..HANGUL SYLLABLE JJOH - {0xCAD8, 0xCAD8, prLV}, // Lo HANGUL SYLLABLE JJWA - {0xCAD9, 0xCAF3, prLVT}, // Lo [27] HANGUL SYLLABLE JJWAG..HANGUL SYLLABLE JJWAH - {0xCAF4, 0xCAF4, prLV}, // Lo HANGUL SYLLABLE JJWAE - {0xCAF5, 0xCB0F, prLVT}, // Lo [27] HANGUL SYLLABLE JJWAEG..HANGUL SYLLABLE JJWAEH - {0xCB10, 0xCB10, prLV}, // Lo HANGUL SYLLABLE JJOE - {0xCB11, 0xCB2B, prLVT}, // Lo [27] HANGUL SYLLABLE JJOEG..HANGUL SYLLABLE JJOEH - {0xCB2C, 0xCB2C, prLV}, // Lo HANGUL SYLLABLE JJYO - {0xCB2D, 0xCB47, prLVT}, // Lo [27] HANGUL SYLLABLE JJYOG..HANGUL SYLLABLE JJYOH - {0xCB48, 0xCB48, prLV}, // Lo HANGUL SYLLABLE JJU - {0xCB49, 0xCB63, prLVT}, // Lo [27] HANGUL SYLLABLE JJUG..HANGUL SYLLABLE JJUH - {0xCB64, 0xCB64, prLV}, // Lo HANGUL SYLLABLE JJWEO - {0xCB65, 0xCB7F, prLVT}, // Lo [27] HANGUL SYLLABLE JJWEOG..HANGUL SYLLABLE JJWEOH - {0xCB80, 0xCB80, prLV}, // Lo HANGUL SYLLABLE JJWE - {0xCB81, 0xCB9B, prLVT}, // Lo [27] HANGUL SYLLABLE JJWEG..HANGUL SYLLABLE JJWEH - {0xCB9C, 0xCB9C, prLV}, // Lo HANGUL SYLLABLE JJWI - {0xCB9D, 0xCBB7, prLVT}, // Lo [27] HANGUL SYLLABLE JJWIG..HANGUL SYLLABLE JJWIH - {0xCBB8, 0xCBB8, prLV}, // Lo HANGUL SYLLABLE JJYU - {0xCBB9, 0xCBD3, prLVT}, // Lo [27] HANGUL SYLLABLE JJYUG..HANGUL SYLLABLE JJYUH - {0xCBD4, 0xCBD4, prLV}, // Lo HANGUL SYLLABLE JJEU - {0xCBD5, 0xCBEF, prLVT}, // Lo [27] HANGUL SYLLABLE JJEUG..HANGUL SYLLABLE JJEUH - {0xCBF0, 0xCBF0, prLV}, // Lo HANGUL SYLLABLE JJYI - {0xCBF1, 0xCC0B, prLVT}, // Lo [27] HANGUL SYLLABLE JJYIG..HANGUL SYLLABLE JJYIH - {0xCC0C, 0xCC0C, prLV}, // Lo HANGUL SYLLABLE JJI - {0xCC0D, 0xCC27, prLVT}, // Lo [27] HANGUL SYLLABLE JJIG..HANGUL SYLLABLE JJIH - {0xCC28, 0xCC28, prLV}, // Lo HANGUL SYLLABLE CA - {0xCC29, 0xCC43, prLVT}, // Lo [27] HANGUL SYLLABLE CAG..HANGUL SYLLABLE CAH - {0xCC44, 0xCC44, prLV}, // Lo HANGUL SYLLABLE CAE - {0xCC45, 0xCC5F, prLVT}, // Lo [27] HANGUL SYLLABLE CAEG..HANGUL SYLLABLE CAEH - {0xCC60, 0xCC60, prLV}, // Lo HANGUL SYLLABLE CYA - {0xCC61, 0xCC7B, prLVT}, // Lo [27] HANGUL SYLLABLE CYAG..HANGUL SYLLABLE CYAH - {0xCC7C, 0xCC7C, prLV}, // Lo HANGUL SYLLABLE CYAE - {0xCC7D, 0xCC97, prLVT}, // Lo [27] HANGUL SYLLABLE CYAEG..HANGUL SYLLABLE CYAEH - {0xCC98, 0xCC98, prLV}, // Lo HANGUL SYLLABLE CEO - {0xCC99, 0xCCB3, prLVT}, // Lo [27] HANGUL SYLLABLE CEOG..HANGUL SYLLABLE CEOH - {0xCCB4, 0xCCB4, prLV}, // Lo HANGUL SYLLABLE CE - {0xCCB5, 0xCCCF, prLVT}, // Lo [27] HANGUL SYLLABLE CEG..HANGUL SYLLABLE CEH - {0xCCD0, 0xCCD0, prLV}, // Lo HANGUL SYLLABLE CYEO - {0xCCD1, 0xCCEB, prLVT}, // Lo [27] HANGUL SYLLABLE CYEOG..HANGUL SYLLABLE CYEOH - {0xCCEC, 0xCCEC, prLV}, // Lo HANGUL SYLLABLE CYE - {0xCCED, 0xCD07, prLVT}, // Lo [27] HANGUL SYLLABLE CYEG..HANGUL SYLLABLE CYEH - {0xCD08, 0xCD08, prLV}, // Lo HANGUL SYLLABLE CO - {0xCD09, 0xCD23, prLVT}, // Lo [27] HANGUL SYLLABLE COG..HANGUL SYLLABLE COH - {0xCD24, 0xCD24, prLV}, // Lo HANGUL SYLLABLE CWA - {0xCD25, 0xCD3F, prLVT}, // Lo [27] HANGUL SYLLABLE CWAG..HANGUL SYLLABLE CWAH - {0xCD40, 0xCD40, prLV}, // Lo HANGUL SYLLABLE CWAE - {0xCD41, 0xCD5B, prLVT}, // Lo [27] HANGUL SYLLABLE CWAEG..HANGUL SYLLABLE CWAEH - {0xCD5C, 0xCD5C, prLV}, // Lo HANGUL SYLLABLE COE - {0xCD5D, 0xCD77, prLVT}, // Lo [27] HANGUL SYLLABLE COEG..HANGUL SYLLABLE COEH - {0xCD78, 0xCD78, prLV}, // Lo HANGUL SYLLABLE CYO - {0xCD79, 0xCD93, prLVT}, // Lo [27] HANGUL SYLLABLE CYOG..HANGUL SYLLABLE CYOH - {0xCD94, 0xCD94, prLV}, // Lo HANGUL SYLLABLE CU - {0xCD95, 0xCDAF, prLVT}, // Lo [27] HANGUL SYLLABLE CUG..HANGUL SYLLABLE CUH - {0xCDB0, 0xCDB0, prLV}, // Lo HANGUL SYLLABLE CWEO - {0xCDB1, 0xCDCB, prLVT}, // Lo [27] HANGUL SYLLABLE CWEOG..HANGUL SYLLABLE CWEOH - {0xCDCC, 0xCDCC, prLV}, // Lo HANGUL SYLLABLE CWE - {0xCDCD, 0xCDE7, prLVT}, // Lo [27] HANGUL SYLLABLE CWEG..HANGUL SYLLABLE CWEH - {0xCDE8, 0xCDE8, prLV}, // Lo HANGUL SYLLABLE CWI - {0xCDE9, 0xCE03, prLVT}, // Lo [27] HANGUL SYLLABLE CWIG..HANGUL SYLLABLE CWIH - {0xCE04, 0xCE04, prLV}, // Lo HANGUL SYLLABLE CYU - {0xCE05, 0xCE1F, prLVT}, // Lo [27] HANGUL SYLLABLE CYUG..HANGUL SYLLABLE CYUH - {0xCE20, 0xCE20, prLV}, // Lo HANGUL SYLLABLE CEU - {0xCE21, 0xCE3B, prLVT}, // Lo [27] HANGUL SYLLABLE CEUG..HANGUL SYLLABLE CEUH - {0xCE3C, 0xCE3C, prLV}, // Lo HANGUL SYLLABLE CYI - {0xCE3D, 0xCE57, prLVT}, // Lo [27] HANGUL SYLLABLE CYIG..HANGUL SYLLABLE CYIH - {0xCE58, 0xCE58, prLV}, // Lo HANGUL SYLLABLE CI - {0xCE59, 0xCE73, prLVT}, // Lo [27] HANGUL SYLLABLE CIG..HANGUL SYLLABLE CIH - {0xCE74, 0xCE74, prLV}, // Lo HANGUL SYLLABLE KA - {0xCE75, 0xCE8F, prLVT}, // Lo [27] HANGUL SYLLABLE KAG..HANGUL SYLLABLE KAH - {0xCE90, 0xCE90, prLV}, // Lo HANGUL SYLLABLE KAE - {0xCE91, 0xCEAB, prLVT}, // Lo [27] HANGUL SYLLABLE KAEG..HANGUL SYLLABLE KAEH - {0xCEAC, 0xCEAC, prLV}, // Lo HANGUL SYLLABLE KYA - {0xCEAD, 0xCEC7, prLVT}, // Lo [27] HANGUL SYLLABLE KYAG..HANGUL SYLLABLE KYAH - {0xCEC8, 0xCEC8, prLV}, // Lo HANGUL SYLLABLE KYAE - {0xCEC9, 0xCEE3, prLVT}, // Lo [27] HANGUL SYLLABLE KYAEG..HANGUL SYLLABLE KYAEH - {0xCEE4, 0xCEE4, prLV}, // Lo HANGUL SYLLABLE KEO - {0xCEE5, 0xCEFF, prLVT}, // Lo [27] HANGUL SYLLABLE KEOG..HANGUL SYLLABLE KEOH - {0xCF00, 0xCF00, prLV}, // Lo HANGUL SYLLABLE KE - {0xCF01, 0xCF1B, prLVT}, // Lo [27] HANGUL SYLLABLE KEG..HANGUL SYLLABLE KEH - {0xCF1C, 0xCF1C, prLV}, // Lo HANGUL SYLLABLE KYEO - {0xCF1D, 0xCF37, prLVT}, // Lo [27] HANGUL SYLLABLE KYEOG..HANGUL SYLLABLE KYEOH - {0xCF38, 0xCF38, prLV}, // Lo HANGUL SYLLABLE KYE - {0xCF39, 0xCF53, prLVT}, // Lo [27] HANGUL SYLLABLE KYEG..HANGUL SYLLABLE KYEH - {0xCF54, 0xCF54, prLV}, // Lo HANGUL SYLLABLE KO - {0xCF55, 0xCF6F, prLVT}, // Lo [27] HANGUL SYLLABLE KOG..HANGUL SYLLABLE KOH - {0xCF70, 0xCF70, prLV}, // Lo HANGUL SYLLABLE KWA - {0xCF71, 0xCF8B, prLVT}, // Lo [27] HANGUL SYLLABLE KWAG..HANGUL SYLLABLE KWAH - {0xCF8C, 0xCF8C, prLV}, // Lo HANGUL SYLLABLE KWAE - {0xCF8D, 0xCFA7, prLVT}, // Lo [27] HANGUL SYLLABLE KWAEG..HANGUL SYLLABLE KWAEH - {0xCFA8, 0xCFA8, prLV}, // Lo HANGUL SYLLABLE KOE - {0xCFA9, 0xCFC3, prLVT}, // Lo [27] HANGUL SYLLABLE KOEG..HANGUL SYLLABLE KOEH - {0xCFC4, 0xCFC4, prLV}, // Lo HANGUL SYLLABLE KYO - {0xCFC5, 0xCFDF, prLVT}, // Lo [27] HANGUL SYLLABLE KYOG..HANGUL SYLLABLE KYOH - {0xCFE0, 0xCFE0, prLV}, // Lo HANGUL SYLLABLE KU - {0xCFE1, 0xCFFB, prLVT}, // Lo [27] HANGUL SYLLABLE KUG..HANGUL SYLLABLE KUH - {0xCFFC, 0xCFFC, prLV}, // Lo HANGUL SYLLABLE KWEO - {0xCFFD, 0xD017, prLVT}, // Lo [27] HANGUL SYLLABLE KWEOG..HANGUL SYLLABLE KWEOH - {0xD018, 0xD018, prLV}, // Lo HANGUL SYLLABLE KWE - {0xD019, 0xD033, prLVT}, // Lo [27] HANGUL SYLLABLE KWEG..HANGUL SYLLABLE KWEH - {0xD034, 0xD034, prLV}, // Lo HANGUL SYLLABLE KWI - {0xD035, 0xD04F, prLVT}, // Lo [27] HANGUL SYLLABLE KWIG..HANGUL SYLLABLE KWIH - {0xD050, 0xD050, prLV}, // Lo HANGUL SYLLABLE KYU - {0xD051, 0xD06B, prLVT}, // Lo [27] HANGUL SYLLABLE KYUG..HANGUL SYLLABLE KYUH - {0xD06C, 0xD06C, prLV}, // Lo HANGUL SYLLABLE KEU - {0xD06D, 0xD087, prLVT}, // Lo [27] HANGUL SYLLABLE KEUG..HANGUL SYLLABLE KEUH - {0xD088, 0xD088, prLV}, // Lo HANGUL SYLLABLE KYI - {0xD089, 0xD0A3, prLVT}, // Lo [27] HANGUL SYLLABLE KYIG..HANGUL SYLLABLE KYIH - {0xD0A4, 0xD0A4, prLV}, // Lo HANGUL SYLLABLE KI - {0xD0A5, 0xD0BF, prLVT}, // Lo [27] HANGUL SYLLABLE KIG..HANGUL SYLLABLE KIH - {0xD0C0, 0xD0C0, prLV}, // Lo HANGUL SYLLABLE TA - {0xD0C1, 0xD0DB, prLVT}, // Lo [27] HANGUL SYLLABLE TAG..HANGUL SYLLABLE TAH - {0xD0DC, 0xD0DC, prLV}, // Lo HANGUL SYLLABLE TAE - {0xD0DD, 0xD0F7, prLVT}, // Lo [27] HANGUL SYLLABLE TAEG..HANGUL SYLLABLE TAEH - {0xD0F8, 0xD0F8, prLV}, // Lo HANGUL SYLLABLE TYA - {0xD0F9, 0xD113, prLVT}, // Lo [27] HANGUL SYLLABLE TYAG..HANGUL SYLLABLE TYAH - {0xD114, 0xD114, prLV}, // Lo HANGUL SYLLABLE TYAE - {0xD115, 0xD12F, prLVT}, // Lo [27] HANGUL SYLLABLE TYAEG..HANGUL SYLLABLE TYAEH - {0xD130, 0xD130, prLV}, // Lo HANGUL SYLLABLE TEO - {0xD131, 0xD14B, prLVT}, // Lo [27] HANGUL SYLLABLE TEOG..HANGUL SYLLABLE TEOH - {0xD14C, 0xD14C, prLV}, // Lo HANGUL SYLLABLE TE - {0xD14D, 0xD167, prLVT}, // Lo [27] HANGUL SYLLABLE TEG..HANGUL SYLLABLE TEH - {0xD168, 0xD168, prLV}, // Lo HANGUL SYLLABLE TYEO - {0xD169, 0xD183, prLVT}, // Lo [27] HANGUL SYLLABLE TYEOG..HANGUL SYLLABLE TYEOH - {0xD184, 0xD184, prLV}, // Lo HANGUL SYLLABLE TYE - {0xD185, 0xD19F, prLVT}, // Lo [27] HANGUL SYLLABLE TYEG..HANGUL SYLLABLE TYEH - {0xD1A0, 0xD1A0, prLV}, // Lo HANGUL SYLLABLE TO - {0xD1A1, 0xD1BB, prLVT}, // Lo [27] HANGUL SYLLABLE TOG..HANGUL SYLLABLE TOH - {0xD1BC, 0xD1BC, prLV}, // Lo HANGUL SYLLABLE TWA - {0xD1BD, 0xD1D7, prLVT}, // Lo [27] HANGUL SYLLABLE TWAG..HANGUL SYLLABLE TWAH - {0xD1D8, 0xD1D8, prLV}, // Lo HANGUL SYLLABLE TWAE - {0xD1D9, 0xD1F3, prLVT}, // Lo [27] HANGUL SYLLABLE TWAEG..HANGUL SYLLABLE TWAEH - {0xD1F4, 0xD1F4, prLV}, // Lo HANGUL SYLLABLE TOE - {0xD1F5, 0xD20F, prLVT}, // Lo [27] HANGUL SYLLABLE TOEG..HANGUL SYLLABLE TOEH - {0xD210, 0xD210, prLV}, // Lo HANGUL SYLLABLE TYO - {0xD211, 0xD22B, prLVT}, // Lo [27] HANGUL SYLLABLE TYOG..HANGUL SYLLABLE TYOH - {0xD22C, 0xD22C, prLV}, // Lo HANGUL SYLLABLE TU - {0xD22D, 0xD247, prLVT}, // Lo [27] HANGUL SYLLABLE TUG..HANGUL SYLLABLE TUH - {0xD248, 0xD248, prLV}, // Lo HANGUL SYLLABLE TWEO - {0xD249, 0xD263, prLVT}, // Lo [27] HANGUL SYLLABLE TWEOG..HANGUL SYLLABLE TWEOH - {0xD264, 0xD264, prLV}, // Lo HANGUL SYLLABLE TWE - {0xD265, 0xD27F, prLVT}, // Lo [27] HANGUL SYLLABLE TWEG..HANGUL SYLLABLE TWEH - {0xD280, 0xD280, prLV}, // Lo HANGUL SYLLABLE TWI - {0xD281, 0xD29B, prLVT}, // Lo [27] HANGUL SYLLABLE TWIG..HANGUL SYLLABLE TWIH - {0xD29C, 0xD29C, prLV}, // Lo HANGUL SYLLABLE TYU - {0xD29D, 0xD2B7, prLVT}, // Lo [27] HANGUL SYLLABLE TYUG..HANGUL SYLLABLE TYUH - {0xD2B8, 0xD2B8, prLV}, // Lo HANGUL SYLLABLE TEU - {0xD2B9, 0xD2D3, prLVT}, // Lo [27] HANGUL SYLLABLE TEUG..HANGUL SYLLABLE TEUH - {0xD2D4, 0xD2D4, prLV}, // Lo HANGUL SYLLABLE TYI - {0xD2D5, 0xD2EF, prLVT}, // Lo [27] HANGUL SYLLABLE TYIG..HANGUL SYLLABLE TYIH - {0xD2F0, 0xD2F0, prLV}, // Lo HANGUL SYLLABLE TI - {0xD2F1, 0xD30B, prLVT}, // Lo [27] HANGUL SYLLABLE TIG..HANGUL SYLLABLE TIH - {0xD30C, 0xD30C, prLV}, // Lo HANGUL SYLLABLE PA - {0xD30D, 0xD327, prLVT}, // Lo [27] HANGUL SYLLABLE PAG..HANGUL SYLLABLE PAH - {0xD328, 0xD328, prLV}, // Lo HANGUL SYLLABLE PAE - {0xD329, 0xD343, prLVT}, // Lo [27] HANGUL SYLLABLE PAEG..HANGUL SYLLABLE PAEH - {0xD344, 0xD344, prLV}, // Lo HANGUL SYLLABLE PYA - {0xD345, 0xD35F, prLVT}, // Lo [27] HANGUL SYLLABLE PYAG..HANGUL SYLLABLE PYAH - {0xD360, 0xD360, prLV}, // Lo HANGUL SYLLABLE PYAE - {0xD361, 0xD37B, prLVT}, // Lo [27] HANGUL SYLLABLE PYAEG..HANGUL SYLLABLE PYAEH - {0xD37C, 0xD37C, prLV}, // Lo HANGUL SYLLABLE PEO - {0xD37D, 0xD397, prLVT}, // Lo [27] HANGUL SYLLABLE PEOG..HANGUL SYLLABLE PEOH - {0xD398, 0xD398, prLV}, // Lo HANGUL SYLLABLE PE - {0xD399, 0xD3B3, prLVT}, // Lo [27] HANGUL SYLLABLE PEG..HANGUL SYLLABLE PEH - {0xD3B4, 0xD3B4, prLV}, // Lo HANGUL SYLLABLE PYEO - {0xD3B5, 0xD3CF, prLVT}, // Lo [27] HANGUL SYLLABLE PYEOG..HANGUL SYLLABLE PYEOH - {0xD3D0, 0xD3D0, prLV}, // Lo HANGUL SYLLABLE PYE - {0xD3D1, 0xD3EB, prLVT}, // Lo [27] HANGUL SYLLABLE PYEG..HANGUL SYLLABLE PYEH - {0xD3EC, 0xD3EC, prLV}, // Lo HANGUL SYLLABLE PO - {0xD3ED, 0xD407, prLVT}, // Lo [27] HANGUL SYLLABLE POG..HANGUL SYLLABLE POH - {0xD408, 0xD408, prLV}, // Lo HANGUL SYLLABLE PWA - {0xD409, 0xD423, prLVT}, // Lo [27] HANGUL SYLLABLE PWAG..HANGUL SYLLABLE PWAH - {0xD424, 0xD424, prLV}, // Lo HANGUL SYLLABLE PWAE - {0xD425, 0xD43F, prLVT}, // Lo [27] HANGUL SYLLABLE PWAEG..HANGUL SYLLABLE PWAEH - {0xD440, 0xD440, prLV}, // Lo HANGUL SYLLABLE POE - {0xD441, 0xD45B, prLVT}, // Lo [27] HANGUL SYLLABLE POEG..HANGUL SYLLABLE POEH - {0xD45C, 0xD45C, prLV}, // Lo HANGUL SYLLABLE PYO - {0xD45D, 0xD477, prLVT}, // Lo [27] HANGUL SYLLABLE PYOG..HANGUL SYLLABLE PYOH - {0xD478, 0xD478, prLV}, // Lo HANGUL SYLLABLE PU - {0xD479, 0xD493, prLVT}, // Lo [27] HANGUL SYLLABLE PUG..HANGUL SYLLABLE PUH - {0xD494, 0xD494, prLV}, // Lo HANGUL SYLLABLE PWEO - {0xD495, 0xD4AF, prLVT}, // Lo [27] HANGUL SYLLABLE PWEOG..HANGUL SYLLABLE PWEOH - {0xD4B0, 0xD4B0, prLV}, // Lo HANGUL SYLLABLE PWE - {0xD4B1, 0xD4CB, prLVT}, // Lo [27] HANGUL SYLLABLE PWEG..HANGUL SYLLABLE PWEH - {0xD4CC, 0xD4CC, prLV}, // Lo HANGUL SYLLABLE PWI - {0xD4CD, 0xD4E7, prLVT}, // Lo [27] HANGUL SYLLABLE PWIG..HANGUL SYLLABLE PWIH - {0xD4E8, 0xD4E8, prLV}, // Lo HANGUL SYLLABLE PYU - {0xD4E9, 0xD503, prLVT}, // Lo [27] HANGUL SYLLABLE PYUG..HANGUL SYLLABLE PYUH - {0xD504, 0xD504, prLV}, // Lo HANGUL SYLLABLE PEU - {0xD505, 0xD51F, prLVT}, // Lo [27] HANGUL SYLLABLE PEUG..HANGUL SYLLABLE PEUH - {0xD520, 0xD520, prLV}, // Lo HANGUL SYLLABLE PYI - {0xD521, 0xD53B, prLVT}, // Lo [27] HANGUL SYLLABLE PYIG..HANGUL SYLLABLE PYIH - {0xD53C, 0xD53C, prLV}, // Lo HANGUL SYLLABLE PI - {0xD53D, 0xD557, prLVT}, // Lo [27] HANGUL SYLLABLE PIG..HANGUL SYLLABLE PIH - {0xD558, 0xD558, prLV}, // Lo HANGUL SYLLABLE HA - {0xD559, 0xD573, prLVT}, // Lo [27] HANGUL SYLLABLE HAG..HANGUL SYLLABLE HAH - {0xD574, 0xD574, prLV}, // Lo HANGUL SYLLABLE HAE - {0xD575, 0xD58F, prLVT}, // Lo [27] HANGUL SYLLABLE HAEG..HANGUL SYLLABLE HAEH - {0xD590, 0xD590, prLV}, // Lo HANGUL SYLLABLE HYA - {0xD591, 0xD5AB, prLVT}, // Lo [27] HANGUL SYLLABLE HYAG..HANGUL SYLLABLE HYAH - {0xD5AC, 0xD5AC, prLV}, // Lo HANGUL SYLLABLE HYAE - {0xD5AD, 0xD5C7, prLVT}, // Lo [27] HANGUL SYLLABLE HYAEG..HANGUL SYLLABLE HYAEH - {0xD5C8, 0xD5C8, prLV}, // Lo HANGUL SYLLABLE HEO - {0xD5C9, 0xD5E3, prLVT}, // Lo [27] HANGUL SYLLABLE HEOG..HANGUL SYLLABLE HEOH - {0xD5E4, 0xD5E4, prLV}, // Lo HANGUL SYLLABLE HE - {0xD5E5, 0xD5FF, prLVT}, // Lo [27] HANGUL SYLLABLE HEG..HANGUL SYLLABLE HEH - {0xD600, 0xD600, prLV}, // Lo HANGUL SYLLABLE HYEO - {0xD601, 0xD61B, prLVT}, // Lo [27] HANGUL SYLLABLE HYEOG..HANGUL SYLLABLE HYEOH - {0xD61C, 0xD61C, prLV}, // Lo HANGUL SYLLABLE HYE - {0xD61D, 0xD637, prLVT}, // Lo [27] HANGUL SYLLABLE HYEG..HANGUL SYLLABLE HYEH - {0xD638, 0xD638, prLV}, // Lo HANGUL SYLLABLE HO - {0xD639, 0xD653, prLVT}, // Lo [27] HANGUL SYLLABLE HOG..HANGUL SYLLABLE HOH - {0xD654, 0xD654, prLV}, // Lo HANGUL SYLLABLE HWA - {0xD655, 0xD66F, prLVT}, // Lo [27] HANGUL SYLLABLE HWAG..HANGUL SYLLABLE HWAH - {0xD670, 0xD670, prLV}, // Lo HANGUL SYLLABLE HWAE - {0xD671, 0xD68B, prLVT}, // Lo [27] HANGUL SYLLABLE HWAEG..HANGUL SYLLABLE HWAEH - {0xD68C, 0xD68C, prLV}, // Lo HANGUL SYLLABLE HOE - {0xD68D, 0xD6A7, prLVT}, // Lo [27] HANGUL SYLLABLE HOEG..HANGUL SYLLABLE HOEH - {0xD6A8, 0xD6A8, prLV}, // Lo HANGUL SYLLABLE HYO - {0xD6A9, 0xD6C3, prLVT}, // Lo [27] HANGUL SYLLABLE HYOG..HANGUL SYLLABLE HYOH - {0xD6C4, 0xD6C4, prLV}, // Lo HANGUL SYLLABLE HU - {0xD6C5, 0xD6DF, prLVT}, // Lo [27] HANGUL SYLLABLE HUG..HANGUL SYLLABLE HUH - {0xD6E0, 0xD6E0, prLV}, // Lo HANGUL SYLLABLE HWEO - {0xD6E1, 0xD6FB, prLVT}, // Lo [27] HANGUL SYLLABLE HWEOG..HANGUL SYLLABLE HWEOH - {0xD6FC, 0xD6FC, prLV}, // Lo HANGUL SYLLABLE HWE - {0xD6FD, 0xD717, prLVT}, // Lo [27] HANGUL SYLLABLE HWEG..HANGUL SYLLABLE HWEH - {0xD718, 0xD718, prLV}, // Lo HANGUL SYLLABLE HWI - {0xD719, 0xD733, prLVT}, // Lo [27] HANGUL SYLLABLE HWIG..HANGUL SYLLABLE HWIH - {0xD734, 0xD734, prLV}, // Lo HANGUL SYLLABLE HYU - {0xD735, 0xD74F, prLVT}, // Lo [27] HANGUL SYLLABLE HYUG..HANGUL SYLLABLE HYUH - {0xD750, 0xD750, prLV}, // Lo HANGUL SYLLABLE HEU - {0xD751, 0xD76B, prLVT}, // Lo [27] HANGUL SYLLABLE HEUG..HANGUL SYLLABLE HEUH - {0xD76C, 0xD76C, prLV}, // Lo HANGUL SYLLABLE HYI - {0xD76D, 0xD787, prLVT}, // Lo [27] HANGUL SYLLABLE HYIG..HANGUL SYLLABLE HYIH - {0xD788, 0xD788, prLV}, // Lo HANGUL SYLLABLE HI - {0xD789, 0xD7A3, prLVT}, // Lo [27] HANGUL SYLLABLE HIG..HANGUL SYLLABLE HIH - {0xD7B0, 0xD7C6, prV}, // Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E - {0xD7CB, 0xD7FB, prT}, // Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH - {0xFB1E, 0xFB1E, prExtend}, // Mn HEBREW POINT JUDEO-SPANISH VARIKA - {0xFE00, 0xFE0F, prExtend}, // Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 - {0xFE20, 0xFE2F, prExtend}, // Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF - {0xFEFF, 0xFEFF, prControl}, // Cf ZERO WIDTH NO-BREAK SPACE - {0xFF9E, 0xFF9F, prExtend}, // Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK - {0xFFF0, 0xFFF8, prControl}, // Cn [9] .. - {0xFFF9, 0xFFFB, prControl}, // Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR - {0x101FD, 0x101FD, prExtend}, // Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE - {0x102E0, 0x102E0, prExtend}, // Mn COPTIC EPACT THOUSANDS MARK - {0x10376, 0x1037A, prExtend}, // Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII - {0x10A01, 0x10A03, prExtend}, // Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R - {0x10A05, 0x10A06, prExtend}, // Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O - {0x10A0C, 0x10A0F, prExtend}, // Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA - {0x10A38, 0x10A3A, prExtend}, // Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW - {0x10A3F, 0x10A3F, prExtend}, // Mn KHAROSHTHI VIRAMA - {0x10AE5, 0x10AE6, prExtend}, // Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW - {0x10D24, 0x10D27, prExtend}, // Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI - {0x10EAB, 0x10EAC, prExtend}, // Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK - {0x10EFD, 0x10EFF, prExtend}, // Mn [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA - {0x10F46, 0x10F50, prExtend}, // Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW - {0x10F82, 0x10F85, prExtend}, // Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW - {0x11000, 0x11000, prSpacingMark}, // Mc BRAHMI SIGN CANDRABINDU - {0x11001, 0x11001, prExtend}, // Mn BRAHMI SIGN ANUSVARA - {0x11002, 0x11002, prSpacingMark}, // Mc BRAHMI SIGN VISARGA - {0x11038, 0x11046, prExtend}, // Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA - {0x11070, 0x11070, prExtend}, // Mn BRAHMI SIGN OLD TAMIL VIRAMA - {0x11073, 0x11074, prExtend}, // Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O - {0x1107F, 0x11081, prExtend}, // Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA - {0x11082, 0x11082, prSpacingMark}, // Mc KAITHI SIGN VISARGA - {0x110B0, 0x110B2, prSpacingMark}, // Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II - {0x110B3, 0x110B6, prExtend}, // Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI - {0x110B7, 0x110B8, prSpacingMark}, // Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU - {0x110B9, 0x110BA, prExtend}, // Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA - {0x110BD, 0x110BD, prPrepend}, // Cf KAITHI NUMBER SIGN - {0x110C2, 0x110C2, prExtend}, // Mn KAITHI VOWEL SIGN VOCALIC R - {0x110CD, 0x110CD, prPrepend}, // Cf KAITHI NUMBER SIGN ABOVE - {0x11100, 0x11102, prExtend}, // Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA - {0x11127, 0x1112B, prExtend}, // Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU - {0x1112C, 0x1112C, prSpacingMark}, // Mc CHAKMA VOWEL SIGN E - {0x1112D, 0x11134, prExtend}, // Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA - {0x11145, 0x11146, prSpacingMark}, // Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI - {0x11173, 0x11173, prExtend}, // Mn MAHAJANI SIGN NUKTA - {0x11180, 0x11181, prExtend}, // Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA - {0x11182, 0x11182, prSpacingMark}, // Mc SHARADA SIGN VISARGA - {0x111B3, 0x111B5, prSpacingMark}, // Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II - {0x111B6, 0x111BE, prExtend}, // Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O - {0x111BF, 0x111C0, prSpacingMark}, // Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA - {0x111C2, 0x111C3, prPrepend}, // Lo [2] SHARADA SIGN JIHVAMULIYA..SHARADA SIGN UPADHMANIYA - {0x111C9, 0x111CC, prExtend}, // Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK - {0x111CE, 0x111CE, prSpacingMark}, // Mc SHARADA VOWEL SIGN PRISHTHAMATRA E - {0x111CF, 0x111CF, prExtend}, // Mn SHARADA SIGN INVERTED CANDRABINDU - {0x1122C, 0x1122E, prSpacingMark}, // Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II - {0x1122F, 0x11231, prExtend}, // Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI - {0x11232, 0x11233, prSpacingMark}, // Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU - {0x11234, 0x11234, prExtend}, // Mn KHOJKI SIGN ANUSVARA - {0x11235, 0x11235, prSpacingMark}, // Mc KHOJKI SIGN VIRAMA - {0x11236, 0x11237, prExtend}, // Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA - {0x1123E, 0x1123E, prExtend}, // Mn KHOJKI SIGN SUKUN - {0x11241, 0x11241, prExtend}, // Mn KHOJKI VOWEL SIGN VOCALIC R - {0x112DF, 0x112DF, prExtend}, // Mn KHUDAWADI SIGN ANUSVARA - {0x112E0, 0x112E2, prSpacingMark}, // Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II - {0x112E3, 0x112EA, prExtend}, // Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA - {0x11300, 0x11301, prExtend}, // Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU - {0x11302, 0x11303, prSpacingMark}, // Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA - {0x1133B, 0x1133C, prExtend}, // Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA - {0x1133E, 0x1133E, prExtend}, // Mc GRANTHA VOWEL SIGN AA - {0x1133F, 0x1133F, prSpacingMark}, // Mc GRANTHA VOWEL SIGN I - {0x11340, 0x11340, prExtend}, // Mn GRANTHA VOWEL SIGN II - {0x11341, 0x11344, prSpacingMark}, // Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR - {0x11347, 0x11348, prSpacingMark}, // Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI - {0x1134B, 0x1134D, prSpacingMark}, // Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA - {0x11357, 0x11357, prExtend}, // Mc GRANTHA AU LENGTH MARK - {0x11362, 0x11363, prSpacingMark}, // Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL - {0x11366, 0x1136C, prExtend}, // Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX - {0x11370, 0x11374, prExtend}, // Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA - {0x11435, 0x11437, prSpacingMark}, // Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II - {0x11438, 0x1143F, prExtend}, // Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI - {0x11440, 0x11441, prSpacingMark}, // Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU - {0x11442, 0x11444, prExtend}, // Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA - {0x11445, 0x11445, prSpacingMark}, // Mc NEWA SIGN VISARGA - {0x11446, 0x11446, prExtend}, // Mn NEWA SIGN NUKTA - {0x1145E, 0x1145E, prExtend}, // Mn NEWA SANDHI MARK - {0x114B0, 0x114B0, prExtend}, // Mc TIRHUTA VOWEL SIGN AA - {0x114B1, 0x114B2, prSpacingMark}, // Mc [2] TIRHUTA VOWEL SIGN I..TIRHUTA VOWEL SIGN II - {0x114B3, 0x114B8, prExtend}, // Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL - {0x114B9, 0x114B9, prSpacingMark}, // Mc TIRHUTA VOWEL SIGN E - {0x114BA, 0x114BA, prExtend}, // Mn TIRHUTA VOWEL SIGN SHORT E - {0x114BB, 0x114BC, prSpacingMark}, // Mc [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O - {0x114BD, 0x114BD, prExtend}, // Mc TIRHUTA VOWEL SIGN SHORT O - {0x114BE, 0x114BE, prSpacingMark}, // Mc TIRHUTA VOWEL SIGN AU - {0x114BF, 0x114C0, prExtend}, // Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA - {0x114C1, 0x114C1, prSpacingMark}, // Mc TIRHUTA SIGN VISARGA - {0x114C2, 0x114C3, prExtend}, // Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA - {0x115AF, 0x115AF, prExtend}, // Mc SIDDHAM VOWEL SIGN AA - {0x115B0, 0x115B1, prSpacingMark}, // Mc [2] SIDDHAM VOWEL SIGN I..SIDDHAM VOWEL SIGN II - {0x115B2, 0x115B5, prExtend}, // Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR - {0x115B8, 0x115BB, prSpacingMark}, // Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU - {0x115BC, 0x115BD, prExtend}, // Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA - {0x115BE, 0x115BE, prSpacingMark}, // Mc SIDDHAM SIGN VISARGA - {0x115BF, 0x115C0, prExtend}, // Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA - {0x115DC, 0x115DD, prExtend}, // Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU - {0x11630, 0x11632, prSpacingMark}, // Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II - {0x11633, 0x1163A, prExtend}, // Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI - {0x1163B, 0x1163C, prSpacingMark}, // Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU - {0x1163D, 0x1163D, prExtend}, // Mn MODI SIGN ANUSVARA - {0x1163E, 0x1163E, prSpacingMark}, // Mc MODI SIGN VISARGA - {0x1163F, 0x11640, prExtend}, // Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA - {0x116AB, 0x116AB, prExtend}, // Mn TAKRI SIGN ANUSVARA - {0x116AC, 0x116AC, prSpacingMark}, // Mc TAKRI SIGN VISARGA - {0x116AD, 0x116AD, prExtend}, // Mn TAKRI VOWEL SIGN AA - {0x116AE, 0x116AF, prSpacingMark}, // Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II - {0x116B0, 0x116B5, prExtend}, // Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU - {0x116B6, 0x116B6, prSpacingMark}, // Mc TAKRI SIGN VIRAMA - {0x116B7, 0x116B7, prExtend}, // Mn TAKRI SIGN NUKTA - {0x1171D, 0x1171F, prExtend}, // Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA - {0x11722, 0x11725, prExtend}, // Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU - {0x11726, 0x11726, prSpacingMark}, // Mc AHOM VOWEL SIGN E - {0x11727, 0x1172B, prExtend}, // Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER - {0x1182C, 0x1182E, prSpacingMark}, // Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II - {0x1182F, 0x11837, prExtend}, // Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA - {0x11838, 0x11838, prSpacingMark}, // Mc DOGRA SIGN VISARGA - {0x11839, 0x1183A, prExtend}, // Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA - {0x11930, 0x11930, prExtend}, // Mc DIVES AKURU VOWEL SIGN AA - {0x11931, 0x11935, prSpacingMark}, // Mc [5] DIVES AKURU VOWEL SIGN I..DIVES AKURU VOWEL SIGN E - {0x11937, 0x11938, prSpacingMark}, // Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O - {0x1193B, 0x1193C, prExtend}, // Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU - {0x1193D, 0x1193D, prSpacingMark}, // Mc DIVES AKURU SIGN HALANTA - {0x1193E, 0x1193E, prExtend}, // Mn DIVES AKURU VIRAMA - {0x1193F, 0x1193F, prPrepend}, // Lo DIVES AKURU PREFIXED NASAL SIGN - {0x11940, 0x11940, prSpacingMark}, // Mc DIVES AKURU MEDIAL YA - {0x11941, 0x11941, prPrepend}, // Lo DIVES AKURU INITIAL RA - {0x11942, 0x11942, prSpacingMark}, // Mc DIVES AKURU MEDIAL RA - {0x11943, 0x11943, prExtend}, // Mn DIVES AKURU SIGN NUKTA - {0x119D1, 0x119D3, prSpacingMark}, // Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II - {0x119D4, 0x119D7, prExtend}, // Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR - {0x119DA, 0x119DB, prExtend}, // Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI - {0x119DC, 0x119DF, prSpacingMark}, // Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA - {0x119E0, 0x119E0, prExtend}, // Mn NANDINAGARI SIGN VIRAMA - {0x119E4, 0x119E4, prSpacingMark}, // Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E - {0x11A01, 0x11A0A, prExtend}, // Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK - {0x11A33, 0x11A38, prExtend}, // Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA - {0x11A39, 0x11A39, prSpacingMark}, // Mc ZANABAZAR SQUARE SIGN VISARGA - {0x11A3A, 0x11A3A, prPrepend}, // Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA - {0x11A3B, 0x11A3E, prExtend}, // Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA - {0x11A47, 0x11A47, prExtend}, // Mn ZANABAZAR SQUARE SUBJOINER - {0x11A51, 0x11A56, prExtend}, // Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE - {0x11A57, 0x11A58, prSpacingMark}, // Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU - {0x11A59, 0x11A5B, prExtend}, // Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK - {0x11A84, 0x11A89, prPrepend}, // Lo [6] SOYOMBO SIGN JIHVAMULIYA..SOYOMBO CLUSTER-INITIAL LETTER SA - {0x11A8A, 0x11A96, prExtend}, // Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA - {0x11A97, 0x11A97, prSpacingMark}, // Mc SOYOMBO SIGN VISARGA - {0x11A98, 0x11A99, prExtend}, // Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER - {0x11C2F, 0x11C2F, prSpacingMark}, // Mc BHAIKSUKI VOWEL SIGN AA - {0x11C30, 0x11C36, prExtend}, // Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L - {0x11C38, 0x11C3D, prExtend}, // Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA - {0x11C3E, 0x11C3E, prSpacingMark}, // Mc BHAIKSUKI SIGN VISARGA - {0x11C3F, 0x11C3F, prExtend}, // Mn BHAIKSUKI SIGN VIRAMA - {0x11C92, 0x11CA7, prExtend}, // Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA - {0x11CA9, 0x11CA9, prSpacingMark}, // Mc MARCHEN SUBJOINED LETTER YA - {0x11CAA, 0x11CB0, prExtend}, // Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA - {0x11CB1, 0x11CB1, prSpacingMark}, // Mc MARCHEN VOWEL SIGN I - {0x11CB2, 0x11CB3, prExtend}, // Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E - {0x11CB4, 0x11CB4, prSpacingMark}, // Mc MARCHEN VOWEL SIGN O - {0x11CB5, 0x11CB6, prExtend}, // Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU - {0x11D31, 0x11D36, prExtend}, // Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R - {0x11D3A, 0x11D3A, prExtend}, // Mn MASARAM GONDI VOWEL SIGN E - {0x11D3C, 0x11D3D, prExtend}, // Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O - {0x11D3F, 0x11D45, prExtend}, // Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA - {0x11D46, 0x11D46, prPrepend}, // Lo MASARAM GONDI REPHA - {0x11D47, 0x11D47, prExtend}, // Mn MASARAM GONDI RA-KARA - {0x11D8A, 0x11D8E, prSpacingMark}, // Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU - {0x11D90, 0x11D91, prExtend}, // Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI - {0x11D93, 0x11D94, prSpacingMark}, // Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU - {0x11D95, 0x11D95, prExtend}, // Mn GUNJALA GONDI SIGN ANUSVARA - {0x11D96, 0x11D96, prSpacingMark}, // Mc GUNJALA GONDI SIGN VISARGA - {0x11D97, 0x11D97, prExtend}, // Mn GUNJALA GONDI VIRAMA - {0x11EF3, 0x11EF4, prExtend}, // Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U - {0x11EF5, 0x11EF6, prSpacingMark}, // Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O - {0x11F00, 0x11F01, prExtend}, // Mn [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA - {0x11F02, 0x11F02, prPrepend}, // Lo KAWI SIGN REPHA - {0x11F03, 0x11F03, prSpacingMark}, // Mc KAWI SIGN VISARGA - {0x11F34, 0x11F35, prSpacingMark}, // Mc [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA - {0x11F36, 0x11F3A, prExtend}, // Mn [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R - {0x11F3E, 0x11F3F, prSpacingMark}, // Mc [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI - {0x11F40, 0x11F40, prExtend}, // Mn KAWI VOWEL SIGN EU - {0x11F41, 0x11F41, prSpacingMark}, // Mc KAWI SIGN KILLER - {0x11F42, 0x11F42, prExtend}, // Mn KAWI CONJOINER - {0x13430, 0x1343F, prControl}, // Cf [16] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE - {0x13440, 0x13440, prExtend}, // Mn EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY - {0x13447, 0x13455, prExtend}, // Mn [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED - {0x16AF0, 0x16AF4, prExtend}, // Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE - {0x16B30, 0x16B36, prExtend}, // Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM - {0x16F4F, 0x16F4F, prExtend}, // Mn MIAO SIGN CONSONANT MODIFIER BAR - {0x16F51, 0x16F87, prSpacingMark}, // Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI - {0x16F8F, 0x16F92, prExtend}, // Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW - {0x16FE4, 0x16FE4, prExtend}, // Mn KHITAN SMALL SCRIPT FILLER - {0x16FF0, 0x16FF1, prSpacingMark}, // Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY - {0x1BC9D, 0x1BC9E, prExtend}, // Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK - {0x1BCA0, 0x1BCA3, prControl}, // Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP - {0x1CF00, 0x1CF2D, prExtend}, // Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT - {0x1CF30, 0x1CF46, prExtend}, // Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG - {0x1D165, 0x1D165, prExtend}, // Mc MUSICAL SYMBOL COMBINING STEM - {0x1D166, 0x1D166, prSpacingMark}, // Mc MUSICAL SYMBOL COMBINING SPRECHGESANG STEM - {0x1D167, 0x1D169, prExtend}, // Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 - {0x1D16D, 0x1D16D, prSpacingMark}, // Mc MUSICAL SYMBOL COMBINING AUGMENTATION DOT - {0x1D16E, 0x1D172, prExtend}, // Mc [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5 - {0x1D173, 0x1D17A, prControl}, // Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE - {0x1D17B, 0x1D182, prExtend}, // Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE - {0x1D185, 0x1D18B, prExtend}, // Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE - {0x1D1AA, 0x1D1AD, prExtend}, // Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO - {0x1D242, 0x1D244, prExtend}, // Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME - {0x1DA00, 0x1DA36, prExtend}, // Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN - {0x1DA3B, 0x1DA6C, prExtend}, // Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT - {0x1DA75, 0x1DA75, prExtend}, // Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS - {0x1DA84, 0x1DA84, prExtend}, // Mn SIGNWRITING LOCATION HEAD NECK - {0x1DA9B, 0x1DA9F, prExtend}, // Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 - {0x1DAA1, 0x1DAAF, prExtend}, // Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 - {0x1E000, 0x1E006, prExtend}, // Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE - {0x1E008, 0x1E018, prExtend}, // Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU - {0x1E01B, 0x1E021, prExtend}, // Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI - {0x1E023, 0x1E024, prExtend}, // Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS - {0x1E026, 0x1E02A, prExtend}, // Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA - {0x1E08F, 0x1E08F, prExtend}, // Mn COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - {0x1E130, 0x1E136, prExtend}, // Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D - {0x1E2AE, 0x1E2AE, prExtend}, // Mn TOTO SIGN RISING TONE - {0x1E2EC, 0x1E2EF, prExtend}, // Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI - {0x1E4EC, 0x1E4EF, prExtend}, // Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH - {0x1E8D0, 0x1E8D6, prExtend}, // Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS - {0x1E944, 0x1E94A, prExtend}, // Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA - {0x1F000, 0x1F003, prExtendedPictographic}, // E0.0 [4] (🀀..🀃) MAHJONG TILE EAST WIND..MAHJONG TILE NORTH WIND - {0x1F004, 0x1F004, prExtendedPictographic}, // E0.6 [1] (🀄) mahjong red dragon - {0x1F005, 0x1F0CE, prExtendedPictographic}, // E0.0 [202] (🀅..🃎) MAHJONG TILE GREEN DRAGON..PLAYING CARD KING OF DIAMONDS - {0x1F0CF, 0x1F0CF, prExtendedPictographic}, // E0.6 [1] (🃏) joker - {0x1F0D0, 0x1F0FF, prExtendedPictographic}, // E0.0 [48] (🃐..🃿) .. - {0x1F10D, 0x1F10F, prExtendedPictographic}, // E0.0 [3] (🄍..🄏) CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH - {0x1F12F, 0x1F12F, prExtendedPictographic}, // E0.0 [1] (🄯) COPYLEFT SYMBOL - {0x1F16C, 0x1F16F, prExtendedPictographic}, // E0.0 [4] (🅬..🅯) RAISED MR SIGN..CIRCLED HUMAN FIGURE - {0x1F170, 0x1F171, prExtendedPictographic}, // E0.6 [2] (🅰️..🅱️) A button (blood type)..B button (blood type) - {0x1F17E, 0x1F17F, prExtendedPictographic}, // E0.6 [2] (🅾️..🅿️) O button (blood type)..P button - {0x1F18E, 0x1F18E, prExtendedPictographic}, // E0.6 [1] (🆎) AB button (blood type) - {0x1F191, 0x1F19A, prExtendedPictographic}, // E0.6 [10] (🆑..🆚) CL button..VS button - {0x1F1AD, 0x1F1E5, prExtendedPictographic}, // E0.0 [57] (🆭..🇥) MASK WORK SYMBOL.. - {0x1F1E6, 0x1F1FF, prRegionalIndicator}, // So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z - {0x1F201, 0x1F202, prExtendedPictographic}, // E0.6 [2] (🈁..🈂️) Japanese “here” button..Japanese “service charge” button - {0x1F203, 0x1F20F, prExtendedPictographic}, // E0.0 [13] (🈃..🈏) .. - {0x1F21A, 0x1F21A, prExtendedPictographic}, // E0.6 [1] (🈚) Japanese “free of charge” button - {0x1F22F, 0x1F22F, prExtendedPictographic}, // E0.6 [1] (🈯) Japanese “reserved” button - {0x1F232, 0x1F23A, prExtendedPictographic}, // E0.6 [9] (🈲..🈺) Japanese “prohibited” button..Japanese “open for business” button - {0x1F23C, 0x1F23F, prExtendedPictographic}, // E0.0 [4] (🈼..🈿) .. - {0x1F249, 0x1F24F, prExtendedPictographic}, // E0.0 [7] (🉉..🉏) .. - {0x1F250, 0x1F251, prExtendedPictographic}, // E0.6 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button - {0x1F252, 0x1F2FF, prExtendedPictographic}, // E0.0 [174] (🉒..🋿) .. - {0x1F300, 0x1F30C, prExtendedPictographic}, // E0.6 [13] (🌀..🌌) cyclone..milky way - {0x1F30D, 0x1F30E, prExtendedPictographic}, // E0.7 [2] (🌍..🌎) globe showing Europe-Africa..globe showing Americas - {0x1F30F, 0x1F30F, prExtendedPictographic}, // E0.6 [1] (🌏) globe showing Asia-Australia - {0x1F310, 0x1F310, prExtendedPictographic}, // E1.0 [1] (🌐) globe with meridians - {0x1F311, 0x1F311, prExtendedPictographic}, // E0.6 [1] (🌑) new moon - {0x1F312, 0x1F312, prExtendedPictographic}, // E1.0 [1] (🌒) waxing crescent moon - {0x1F313, 0x1F315, prExtendedPictographic}, // E0.6 [3] (🌓..🌕) first quarter moon..full moon - {0x1F316, 0x1F318, prExtendedPictographic}, // E1.0 [3] (🌖..🌘) waning gibbous moon..waning crescent moon - {0x1F319, 0x1F319, prExtendedPictographic}, // E0.6 [1] (🌙) crescent moon - {0x1F31A, 0x1F31A, prExtendedPictographic}, // E1.0 [1] (🌚) new moon face - {0x1F31B, 0x1F31B, prExtendedPictographic}, // E0.6 [1] (🌛) first quarter moon face - {0x1F31C, 0x1F31C, prExtendedPictographic}, // E0.7 [1] (🌜) last quarter moon face - {0x1F31D, 0x1F31E, prExtendedPictographic}, // E1.0 [2] (🌝..🌞) full moon face..sun with face - {0x1F31F, 0x1F320, prExtendedPictographic}, // E0.6 [2] (🌟..🌠) glowing star..shooting star - {0x1F321, 0x1F321, prExtendedPictographic}, // E0.7 [1] (🌡️) thermometer - {0x1F322, 0x1F323, prExtendedPictographic}, // E0.0 [2] (🌢..🌣) BLACK DROPLET..WHITE SUN - {0x1F324, 0x1F32C, prExtendedPictographic}, // E0.7 [9] (🌤️..🌬️) sun behind small cloud..wind face - {0x1F32D, 0x1F32F, prExtendedPictographic}, // E1.0 [3] (🌭..🌯) hot dog..burrito - {0x1F330, 0x1F331, prExtendedPictographic}, // E0.6 [2] (🌰..🌱) chestnut..seedling - {0x1F332, 0x1F333, prExtendedPictographic}, // E1.0 [2] (🌲..🌳) evergreen tree..deciduous tree - {0x1F334, 0x1F335, prExtendedPictographic}, // E0.6 [2] (🌴..🌵) palm tree..cactus - {0x1F336, 0x1F336, prExtendedPictographic}, // E0.7 [1] (🌶️) hot pepper - {0x1F337, 0x1F34A, prExtendedPictographic}, // E0.6 [20] (🌷..🍊) tulip..tangerine - {0x1F34B, 0x1F34B, prExtendedPictographic}, // E1.0 [1] (🍋) lemon - {0x1F34C, 0x1F34F, prExtendedPictographic}, // E0.6 [4] (🍌..🍏) banana..green apple - {0x1F350, 0x1F350, prExtendedPictographic}, // E1.0 [1] (🍐) pear - {0x1F351, 0x1F37B, prExtendedPictographic}, // E0.6 [43] (🍑..🍻) peach..clinking beer mugs - {0x1F37C, 0x1F37C, prExtendedPictographic}, // E1.0 [1] (🍼) baby bottle - {0x1F37D, 0x1F37D, prExtendedPictographic}, // E0.7 [1] (🍽️) fork and knife with plate - {0x1F37E, 0x1F37F, prExtendedPictographic}, // E1.0 [2] (🍾..🍿) bottle with popping cork..popcorn - {0x1F380, 0x1F393, prExtendedPictographic}, // E0.6 [20] (🎀..🎓) ribbon..graduation cap - {0x1F394, 0x1F395, prExtendedPictographic}, // E0.0 [2] (🎔..🎕) HEART WITH TIP ON THE LEFT..BOUQUET OF FLOWERS - {0x1F396, 0x1F397, prExtendedPictographic}, // E0.7 [2] (🎖️..🎗️) military medal..reminder ribbon - {0x1F398, 0x1F398, prExtendedPictographic}, // E0.0 [1] (🎘) MUSICAL KEYBOARD WITH JACKS - {0x1F399, 0x1F39B, prExtendedPictographic}, // E0.7 [3] (🎙️..🎛️) studio microphone..control knobs - {0x1F39C, 0x1F39D, prExtendedPictographic}, // E0.0 [2] (🎜..🎝) BEAMED ASCENDING MUSICAL NOTES..BEAMED DESCENDING MUSICAL NOTES - {0x1F39E, 0x1F39F, prExtendedPictographic}, // E0.7 [2] (🎞️..🎟️) film frames..admission tickets - {0x1F3A0, 0x1F3C4, prExtendedPictographic}, // E0.6 [37] (🎠..🏄) carousel horse..person surfing - {0x1F3C5, 0x1F3C5, prExtendedPictographic}, // E1.0 [1] (🏅) sports medal - {0x1F3C6, 0x1F3C6, prExtendedPictographic}, // E0.6 [1] (🏆) trophy - {0x1F3C7, 0x1F3C7, prExtendedPictographic}, // E1.0 [1] (🏇) horse racing - {0x1F3C8, 0x1F3C8, prExtendedPictographic}, // E0.6 [1] (🏈) american football - {0x1F3C9, 0x1F3C9, prExtendedPictographic}, // E1.0 [1] (🏉) rugby football - {0x1F3CA, 0x1F3CA, prExtendedPictographic}, // E0.6 [1] (🏊) person swimming - {0x1F3CB, 0x1F3CE, prExtendedPictographic}, // E0.7 [4] (🏋️..🏎️) person lifting weights..racing car - {0x1F3CF, 0x1F3D3, prExtendedPictographic}, // E1.0 [5] (🏏..🏓) cricket game..ping pong - {0x1F3D4, 0x1F3DF, prExtendedPictographic}, // E0.7 [12] (🏔️..🏟️) snow-capped mountain..stadium - {0x1F3E0, 0x1F3E3, prExtendedPictographic}, // E0.6 [4] (🏠..🏣) house..Japanese post office - {0x1F3E4, 0x1F3E4, prExtendedPictographic}, // E1.0 [1] (🏤) post office - {0x1F3E5, 0x1F3F0, prExtendedPictographic}, // E0.6 [12] (🏥..🏰) hospital..castle - {0x1F3F1, 0x1F3F2, prExtendedPictographic}, // E0.0 [2] (🏱..🏲) WHITE PENNANT..BLACK PENNANT - {0x1F3F3, 0x1F3F3, prExtendedPictographic}, // E0.7 [1] (🏳️) white flag - {0x1F3F4, 0x1F3F4, prExtendedPictographic}, // E1.0 [1] (🏴) black flag - {0x1F3F5, 0x1F3F5, prExtendedPictographic}, // E0.7 [1] (🏵️) rosette - {0x1F3F6, 0x1F3F6, prExtendedPictographic}, // E0.0 [1] (🏶) BLACK ROSETTE - {0x1F3F7, 0x1F3F7, prExtendedPictographic}, // E0.7 [1] (🏷️) label - {0x1F3F8, 0x1F3FA, prExtendedPictographic}, // E1.0 [3] (🏸..🏺) badminton..amphora - {0x1F3FB, 0x1F3FF, prExtend}, // Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 - {0x1F400, 0x1F407, prExtendedPictographic}, // E1.0 [8] (🐀..🐇) rat..rabbit - {0x1F408, 0x1F408, prExtendedPictographic}, // E0.7 [1] (🐈) cat - {0x1F409, 0x1F40B, prExtendedPictographic}, // E1.0 [3] (🐉..🐋) dragon..whale - {0x1F40C, 0x1F40E, prExtendedPictographic}, // E0.6 [3] (🐌..🐎) snail..horse - {0x1F40F, 0x1F410, prExtendedPictographic}, // E1.0 [2] (🐏..🐐) ram..goat - {0x1F411, 0x1F412, prExtendedPictographic}, // E0.6 [2] (🐑..🐒) ewe..monkey - {0x1F413, 0x1F413, prExtendedPictographic}, // E1.0 [1] (🐓) rooster - {0x1F414, 0x1F414, prExtendedPictographic}, // E0.6 [1] (🐔) chicken - {0x1F415, 0x1F415, prExtendedPictographic}, // E0.7 [1] (🐕) dog - {0x1F416, 0x1F416, prExtendedPictographic}, // E1.0 [1] (🐖) pig - {0x1F417, 0x1F429, prExtendedPictographic}, // E0.6 [19] (🐗..🐩) boar..poodle - {0x1F42A, 0x1F42A, prExtendedPictographic}, // E1.0 [1] (🐪) camel - {0x1F42B, 0x1F43E, prExtendedPictographic}, // E0.6 [20] (🐫..🐾) two-hump camel..paw prints - {0x1F43F, 0x1F43F, prExtendedPictographic}, // E0.7 [1] (🐿️) chipmunk - {0x1F440, 0x1F440, prExtendedPictographic}, // E0.6 [1] (👀) eyes - {0x1F441, 0x1F441, prExtendedPictographic}, // E0.7 [1] (👁️) eye - {0x1F442, 0x1F464, prExtendedPictographic}, // E0.6 [35] (👂..👤) ear..bust in silhouette - {0x1F465, 0x1F465, prExtendedPictographic}, // E1.0 [1] (👥) busts in silhouette - {0x1F466, 0x1F46B, prExtendedPictographic}, // E0.6 [6] (👦..👫) boy..woman and man holding hands - {0x1F46C, 0x1F46D, prExtendedPictographic}, // E1.0 [2] (👬..👭) men holding hands..women holding hands - {0x1F46E, 0x1F4AC, prExtendedPictographic}, // E0.6 [63] (👮..💬) police officer..speech balloon - {0x1F4AD, 0x1F4AD, prExtendedPictographic}, // E1.0 [1] (💭) thought balloon - {0x1F4AE, 0x1F4B5, prExtendedPictographic}, // E0.6 [8] (💮..💵) white flower..dollar banknote - {0x1F4B6, 0x1F4B7, prExtendedPictographic}, // E1.0 [2] (💶..💷) euro banknote..pound banknote - {0x1F4B8, 0x1F4EB, prExtendedPictographic}, // E0.6 [52] (💸..📫) money with wings..closed mailbox with raised flag - {0x1F4EC, 0x1F4ED, prExtendedPictographic}, // E0.7 [2] (📬..📭) open mailbox with raised flag..open mailbox with lowered flag - {0x1F4EE, 0x1F4EE, prExtendedPictographic}, // E0.6 [1] (📮) postbox - {0x1F4EF, 0x1F4EF, prExtendedPictographic}, // E1.0 [1] (📯) postal horn - {0x1F4F0, 0x1F4F4, prExtendedPictographic}, // E0.6 [5] (📰..📴) newspaper..mobile phone off - {0x1F4F5, 0x1F4F5, prExtendedPictographic}, // E1.0 [1] (📵) no mobile phones - {0x1F4F6, 0x1F4F7, prExtendedPictographic}, // E0.6 [2] (📶..📷) antenna bars..camera - {0x1F4F8, 0x1F4F8, prExtendedPictographic}, // E1.0 [1] (📸) camera with flash - {0x1F4F9, 0x1F4FC, prExtendedPictographic}, // E0.6 [4] (📹..📼) video camera..videocassette - {0x1F4FD, 0x1F4FD, prExtendedPictographic}, // E0.7 [1] (📽️) film projector - {0x1F4FE, 0x1F4FE, prExtendedPictographic}, // E0.0 [1] (📾) PORTABLE STEREO - {0x1F4FF, 0x1F502, prExtendedPictographic}, // E1.0 [4] (📿..🔂) prayer beads..repeat single button - {0x1F503, 0x1F503, prExtendedPictographic}, // E0.6 [1] (🔃) clockwise vertical arrows - {0x1F504, 0x1F507, prExtendedPictographic}, // E1.0 [4] (🔄..🔇) counterclockwise arrows button..muted speaker - {0x1F508, 0x1F508, prExtendedPictographic}, // E0.7 [1] (🔈) speaker low volume - {0x1F509, 0x1F509, prExtendedPictographic}, // E1.0 [1] (🔉) speaker medium volume - {0x1F50A, 0x1F514, prExtendedPictographic}, // E0.6 [11] (🔊..🔔) speaker high volume..bell - {0x1F515, 0x1F515, prExtendedPictographic}, // E1.0 [1] (🔕) bell with slash - {0x1F516, 0x1F52B, prExtendedPictographic}, // E0.6 [22] (🔖..🔫) bookmark..water pistol - {0x1F52C, 0x1F52D, prExtendedPictographic}, // E1.0 [2] (🔬..🔭) microscope..telescope - {0x1F52E, 0x1F53D, prExtendedPictographic}, // E0.6 [16] (🔮..🔽) crystal ball..downwards button - {0x1F546, 0x1F548, prExtendedPictographic}, // E0.0 [3] (🕆..🕈) WHITE LATIN CROSS..CELTIC CROSS - {0x1F549, 0x1F54A, prExtendedPictographic}, // E0.7 [2] (🕉️..🕊️) om..dove - {0x1F54B, 0x1F54E, prExtendedPictographic}, // E1.0 [4] (🕋..🕎) kaaba..menorah - {0x1F54F, 0x1F54F, prExtendedPictographic}, // E0.0 [1] (🕏) BOWL OF HYGIEIA - {0x1F550, 0x1F55B, prExtendedPictographic}, // E0.6 [12] (🕐..🕛) one o’clock..twelve o’clock - {0x1F55C, 0x1F567, prExtendedPictographic}, // E0.7 [12] (🕜..🕧) one-thirty..twelve-thirty - {0x1F568, 0x1F56E, prExtendedPictographic}, // E0.0 [7] (🕨..🕮) RIGHT SPEAKER..BOOK - {0x1F56F, 0x1F570, prExtendedPictographic}, // E0.7 [2] (🕯️..🕰️) candle..mantelpiece clock - {0x1F571, 0x1F572, prExtendedPictographic}, // E0.0 [2] (🕱..🕲) BLACK SKULL AND CROSSBONES..NO PIRACY - {0x1F573, 0x1F579, prExtendedPictographic}, // E0.7 [7] (🕳️..🕹️) hole..joystick - {0x1F57A, 0x1F57A, prExtendedPictographic}, // E3.0 [1] (🕺) man dancing - {0x1F57B, 0x1F586, prExtendedPictographic}, // E0.0 [12] (🕻..🖆) LEFT HAND TELEPHONE RECEIVER..PEN OVER STAMPED ENVELOPE - {0x1F587, 0x1F587, prExtendedPictographic}, // E0.7 [1] (🖇️) linked paperclips - {0x1F588, 0x1F589, prExtendedPictographic}, // E0.0 [2] (🖈..🖉) BLACK PUSHPIN..LOWER LEFT PENCIL - {0x1F58A, 0x1F58D, prExtendedPictographic}, // E0.7 [4] (🖊️..🖍️) pen..crayon - {0x1F58E, 0x1F58F, prExtendedPictographic}, // E0.0 [2] (🖎..🖏) LEFT WRITING HAND..TURNED OK HAND SIGN - {0x1F590, 0x1F590, prExtendedPictographic}, // E0.7 [1] (🖐️) hand with fingers splayed - {0x1F591, 0x1F594, prExtendedPictographic}, // E0.0 [4] (🖑..🖔) REVERSED RAISED HAND WITH FINGERS SPLAYED..REVERSED VICTORY HAND - {0x1F595, 0x1F596, prExtendedPictographic}, // E1.0 [2] (🖕..🖖) middle finger..vulcan salute - {0x1F597, 0x1F5A3, prExtendedPictographic}, // E0.0 [13] (🖗..🖣) WHITE DOWN POINTING LEFT HAND INDEX..BLACK DOWN POINTING BACKHAND INDEX - {0x1F5A4, 0x1F5A4, prExtendedPictographic}, // E3.0 [1] (🖤) black heart - {0x1F5A5, 0x1F5A5, prExtendedPictographic}, // E0.7 [1] (🖥️) desktop computer - {0x1F5A6, 0x1F5A7, prExtendedPictographic}, // E0.0 [2] (🖦..🖧) KEYBOARD AND MOUSE..THREE NETWORKED COMPUTERS - {0x1F5A8, 0x1F5A8, prExtendedPictographic}, // E0.7 [1] (🖨️) printer - {0x1F5A9, 0x1F5B0, prExtendedPictographic}, // E0.0 [8] (🖩..🖰) POCKET CALCULATOR..TWO BUTTON MOUSE - {0x1F5B1, 0x1F5B2, prExtendedPictographic}, // E0.7 [2] (🖱️..🖲️) computer mouse..trackball - {0x1F5B3, 0x1F5BB, prExtendedPictographic}, // E0.0 [9] (🖳..🖻) OLD PERSONAL COMPUTER..DOCUMENT WITH PICTURE - {0x1F5BC, 0x1F5BC, prExtendedPictographic}, // E0.7 [1] (🖼️) framed picture - {0x1F5BD, 0x1F5C1, prExtendedPictographic}, // E0.0 [5] (🖽..🗁) FRAME WITH TILES..OPEN FOLDER - {0x1F5C2, 0x1F5C4, prExtendedPictographic}, // E0.7 [3] (🗂️..🗄️) card index dividers..file cabinet - {0x1F5C5, 0x1F5D0, prExtendedPictographic}, // E0.0 [12] (🗅..🗐) EMPTY NOTE..PAGES - {0x1F5D1, 0x1F5D3, prExtendedPictographic}, // E0.7 [3] (🗑️..🗓️) wastebasket..spiral calendar - {0x1F5D4, 0x1F5DB, prExtendedPictographic}, // E0.0 [8] (🗔..🗛) DESKTOP WINDOW..DECREASE FONT SIZE SYMBOL - {0x1F5DC, 0x1F5DE, prExtendedPictographic}, // E0.7 [3] (🗜️..🗞️) clamp..rolled-up newspaper - {0x1F5DF, 0x1F5E0, prExtendedPictographic}, // E0.0 [2] (🗟..🗠) PAGE WITH CIRCLED TEXT..STOCK CHART - {0x1F5E1, 0x1F5E1, prExtendedPictographic}, // E0.7 [1] (🗡️) dagger - {0x1F5E2, 0x1F5E2, prExtendedPictographic}, // E0.0 [1] (🗢) LIPS - {0x1F5E3, 0x1F5E3, prExtendedPictographic}, // E0.7 [1] (🗣️) speaking head - {0x1F5E4, 0x1F5E7, prExtendedPictographic}, // E0.0 [4] (🗤..🗧) THREE RAYS ABOVE..THREE RAYS RIGHT - {0x1F5E8, 0x1F5E8, prExtendedPictographic}, // E2.0 [1] (🗨️) left speech bubble - {0x1F5E9, 0x1F5EE, prExtendedPictographic}, // E0.0 [6] (🗩..🗮) RIGHT SPEECH BUBBLE..LEFT ANGER BUBBLE - {0x1F5EF, 0x1F5EF, prExtendedPictographic}, // E0.7 [1] (🗯️) right anger bubble - {0x1F5F0, 0x1F5F2, prExtendedPictographic}, // E0.0 [3] (🗰..🗲) MOOD BUBBLE..LIGHTNING MOOD - {0x1F5F3, 0x1F5F3, prExtendedPictographic}, // E0.7 [1] (🗳️) ballot box with ballot - {0x1F5F4, 0x1F5F9, prExtendedPictographic}, // E0.0 [6] (🗴..🗹) BALLOT SCRIPT X..BALLOT BOX WITH BOLD CHECK - {0x1F5FA, 0x1F5FA, prExtendedPictographic}, // E0.7 [1] (🗺️) world map - {0x1F5FB, 0x1F5FF, prExtendedPictographic}, // E0.6 [5] (🗻..🗿) mount fuji..moai - {0x1F600, 0x1F600, prExtendedPictographic}, // E1.0 [1] (😀) grinning face - {0x1F601, 0x1F606, prExtendedPictographic}, // E0.6 [6] (😁..😆) beaming face with smiling eyes..grinning squinting face - {0x1F607, 0x1F608, prExtendedPictographic}, // E1.0 [2] (😇..😈) smiling face with halo..smiling face with horns - {0x1F609, 0x1F60D, prExtendedPictographic}, // E0.6 [5] (😉..😍) winking face..smiling face with heart-eyes - {0x1F60E, 0x1F60E, prExtendedPictographic}, // E1.0 [1] (😎) smiling face with sunglasses - {0x1F60F, 0x1F60F, prExtendedPictographic}, // E0.6 [1] (😏) smirking face - {0x1F610, 0x1F610, prExtendedPictographic}, // E0.7 [1] (😐) neutral face - {0x1F611, 0x1F611, prExtendedPictographic}, // E1.0 [1] (😑) expressionless face - {0x1F612, 0x1F614, prExtendedPictographic}, // E0.6 [3] (😒..😔) unamused face..pensive face - {0x1F615, 0x1F615, prExtendedPictographic}, // E1.0 [1] (😕) confused face - {0x1F616, 0x1F616, prExtendedPictographic}, // E0.6 [1] (😖) confounded face - {0x1F617, 0x1F617, prExtendedPictographic}, // E1.0 [1] (😗) kissing face - {0x1F618, 0x1F618, prExtendedPictographic}, // E0.6 [1] (😘) face blowing a kiss - {0x1F619, 0x1F619, prExtendedPictographic}, // E1.0 [1] (😙) kissing face with smiling eyes - {0x1F61A, 0x1F61A, prExtendedPictographic}, // E0.6 [1] (😚) kissing face with closed eyes - {0x1F61B, 0x1F61B, prExtendedPictographic}, // E1.0 [1] (😛) face with tongue - {0x1F61C, 0x1F61E, prExtendedPictographic}, // E0.6 [3] (😜..😞) winking face with tongue..disappointed face - {0x1F61F, 0x1F61F, prExtendedPictographic}, // E1.0 [1] (😟) worried face - {0x1F620, 0x1F625, prExtendedPictographic}, // E0.6 [6] (😠..😥) angry face..sad but relieved face - {0x1F626, 0x1F627, prExtendedPictographic}, // E1.0 [2] (😦..😧) frowning face with open mouth..anguished face - {0x1F628, 0x1F62B, prExtendedPictographic}, // E0.6 [4] (😨..😫) fearful face..tired face - {0x1F62C, 0x1F62C, prExtendedPictographic}, // E1.0 [1] (😬) grimacing face - {0x1F62D, 0x1F62D, prExtendedPictographic}, // E0.6 [1] (😭) loudly crying face - {0x1F62E, 0x1F62F, prExtendedPictographic}, // E1.0 [2] (😮..😯) face with open mouth..hushed face - {0x1F630, 0x1F633, prExtendedPictographic}, // E0.6 [4] (😰..😳) anxious face with sweat..flushed face - {0x1F634, 0x1F634, prExtendedPictographic}, // E1.0 [1] (😴) sleeping face - {0x1F635, 0x1F635, prExtendedPictographic}, // E0.6 [1] (😵) face with crossed-out eyes - {0x1F636, 0x1F636, prExtendedPictographic}, // E1.0 [1] (😶) face without mouth - {0x1F637, 0x1F640, prExtendedPictographic}, // E0.6 [10] (😷..🙀) face with medical mask..weary cat - {0x1F641, 0x1F644, prExtendedPictographic}, // E1.0 [4] (🙁..🙄) slightly frowning face..face with rolling eyes - {0x1F645, 0x1F64F, prExtendedPictographic}, // E0.6 [11] (🙅..🙏) person gesturing NO..folded hands - {0x1F680, 0x1F680, prExtendedPictographic}, // E0.6 [1] (🚀) rocket - {0x1F681, 0x1F682, prExtendedPictographic}, // E1.0 [2] (🚁..🚂) helicopter..locomotive - {0x1F683, 0x1F685, prExtendedPictographic}, // E0.6 [3] (🚃..🚅) railway car..bullet train - {0x1F686, 0x1F686, prExtendedPictographic}, // E1.0 [1] (🚆) train - {0x1F687, 0x1F687, prExtendedPictographic}, // E0.6 [1] (🚇) metro - {0x1F688, 0x1F688, prExtendedPictographic}, // E1.0 [1] (🚈) light rail - {0x1F689, 0x1F689, prExtendedPictographic}, // E0.6 [1] (🚉) station - {0x1F68A, 0x1F68B, prExtendedPictographic}, // E1.0 [2] (🚊..🚋) tram..tram car - {0x1F68C, 0x1F68C, prExtendedPictographic}, // E0.6 [1] (🚌) bus - {0x1F68D, 0x1F68D, prExtendedPictographic}, // E0.7 [1] (🚍) oncoming bus - {0x1F68E, 0x1F68E, prExtendedPictographic}, // E1.0 [1] (🚎) trolleybus - {0x1F68F, 0x1F68F, prExtendedPictographic}, // E0.6 [1] (🚏) bus stop - {0x1F690, 0x1F690, prExtendedPictographic}, // E1.0 [1] (🚐) minibus - {0x1F691, 0x1F693, prExtendedPictographic}, // E0.6 [3] (🚑..🚓) ambulance..police car - {0x1F694, 0x1F694, prExtendedPictographic}, // E0.7 [1] (🚔) oncoming police car - {0x1F695, 0x1F695, prExtendedPictographic}, // E0.6 [1] (🚕) taxi - {0x1F696, 0x1F696, prExtendedPictographic}, // E1.0 [1] (🚖) oncoming taxi - {0x1F697, 0x1F697, prExtendedPictographic}, // E0.6 [1] (🚗) automobile - {0x1F698, 0x1F698, prExtendedPictographic}, // E0.7 [1] (🚘) oncoming automobile - {0x1F699, 0x1F69A, prExtendedPictographic}, // E0.6 [2] (🚙..🚚) sport utility vehicle..delivery truck - {0x1F69B, 0x1F6A1, prExtendedPictographic}, // E1.0 [7] (🚛..🚡) articulated lorry..aerial tramway - {0x1F6A2, 0x1F6A2, prExtendedPictographic}, // E0.6 [1] (🚢) ship - {0x1F6A3, 0x1F6A3, prExtendedPictographic}, // E1.0 [1] (🚣) person rowing boat - {0x1F6A4, 0x1F6A5, prExtendedPictographic}, // E0.6 [2] (🚤..🚥) speedboat..horizontal traffic light - {0x1F6A6, 0x1F6A6, prExtendedPictographic}, // E1.0 [1] (🚦) vertical traffic light - {0x1F6A7, 0x1F6AD, prExtendedPictographic}, // E0.6 [7] (🚧..🚭) construction..no smoking - {0x1F6AE, 0x1F6B1, prExtendedPictographic}, // E1.0 [4] (🚮..🚱) litter in bin sign..non-potable water - {0x1F6B2, 0x1F6B2, prExtendedPictographic}, // E0.6 [1] (🚲) bicycle - {0x1F6B3, 0x1F6B5, prExtendedPictographic}, // E1.0 [3] (🚳..🚵) no bicycles..person mountain biking - {0x1F6B6, 0x1F6B6, prExtendedPictographic}, // E0.6 [1] (🚶) person walking - {0x1F6B7, 0x1F6B8, prExtendedPictographic}, // E1.0 [2] (🚷..🚸) no pedestrians..children crossing - {0x1F6B9, 0x1F6BE, prExtendedPictographic}, // E0.6 [6] (🚹..🚾) men’s room..water closet - {0x1F6BF, 0x1F6BF, prExtendedPictographic}, // E1.0 [1] (🚿) shower - {0x1F6C0, 0x1F6C0, prExtendedPictographic}, // E0.6 [1] (🛀) person taking bath - {0x1F6C1, 0x1F6C5, prExtendedPictographic}, // E1.0 [5] (🛁..🛅) bathtub..left luggage - {0x1F6C6, 0x1F6CA, prExtendedPictographic}, // E0.0 [5] (🛆..🛊) TRIANGLE WITH ROUNDED CORNERS..GIRLS SYMBOL - {0x1F6CB, 0x1F6CB, prExtendedPictographic}, // E0.7 [1] (🛋️) couch and lamp - {0x1F6CC, 0x1F6CC, prExtendedPictographic}, // E1.0 [1] (🛌) person in bed - {0x1F6CD, 0x1F6CF, prExtendedPictographic}, // E0.7 [3] (🛍️..🛏️) shopping bags..bed - {0x1F6D0, 0x1F6D0, prExtendedPictographic}, // E1.0 [1] (🛐) place of worship - {0x1F6D1, 0x1F6D2, prExtendedPictographic}, // E3.0 [2] (🛑..🛒) stop sign..shopping cart - {0x1F6D3, 0x1F6D4, prExtendedPictographic}, // E0.0 [2] (🛓..🛔) STUPA..PAGODA - {0x1F6D5, 0x1F6D5, prExtendedPictographic}, // E12.0 [1] (🛕) hindu temple - {0x1F6D6, 0x1F6D7, prExtendedPictographic}, // E13.0 [2] (🛖..🛗) hut..elevator - {0x1F6D8, 0x1F6DB, prExtendedPictographic}, // E0.0 [4] (🛘..🛛) .. - {0x1F6DC, 0x1F6DC, prExtendedPictographic}, // E15.0 [1] (🛜) wireless - {0x1F6DD, 0x1F6DF, prExtendedPictographic}, // E14.0 [3] (🛝..🛟) playground slide..ring buoy - {0x1F6E0, 0x1F6E5, prExtendedPictographic}, // E0.7 [6] (🛠️..🛥️) hammer and wrench..motor boat - {0x1F6E6, 0x1F6E8, prExtendedPictographic}, // E0.0 [3] (🛦..🛨) UP-POINTING MILITARY AIRPLANE..UP-POINTING SMALL AIRPLANE - {0x1F6E9, 0x1F6E9, prExtendedPictographic}, // E0.7 [1] (🛩️) small airplane - {0x1F6EA, 0x1F6EA, prExtendedPictographic}, // E0.0 [1] (🛪) NORTHEAST-POINTING AIRPLANE - {0x1F6EB, 0x1F6EC, prExtendedPictographic}, // E1.0 [2] (🛫..🛬) airplane departure..airplane arrival - {0x1F6ED, 0x1F6EF, prExtendedPictographic}, // E0.0 [3] (🛭..🛯) .. - {0x1F6F0, 0x1F6F0, prExtendedPictographic}, // E0.7 [1] (🛰️) satellite - {0x1F6F1, 0x1F6F2, prExtendedPictographic}, // E0.0 [2] (🛱..🛲) ONCOMING FIRE ENGINE..DIESEL LOCOMOTIVE - {0x1F6F3, 0x1F6F3, prExtendedPictographic}, // E0.7 [1] (🛳️) passenger ship - {0x1F6F4, 0x1F6F6, prExtendedPictographic}, // E3.0 [3] (🛴..🛶) kick scooter..canoe - {0x1F6F7, 0x1F6F8, prExtendedPictographic}, // E5.0 [2] (🛷..🛸) sled..flying saucer - {0x1F6F9, 0x1F6F9, prExtendedPictographic}, // E11.0 [1] (🛹) skateboard - {0x1F6FA, 0x1F6FA, prExtendedPictographic}, // E12.0 [1] (🛺) auto rickshaw - {0x1F6FB, 0x1F6FC, prExtendedPictographic}, // E13.0 [2] (🛻..🛼) pickup truck..roller skate - {0x1F6FD, 0x1F6FF, prExtendedPictographic}, // E0.0 [3] (🛽..🛿) .. - {0x1F774, 0x1F77F, prExtendedPictographic}, // E0.0 [12] (🝴..🝿) LOT OF FORTUNE..ORCUS - {0x1F7D5, 0x1F7DF, prExtendedPictographic}, // E0.0 [11] (🟕..🟟) CIRCLED TRIANGLE.. - {0x1F7E0, 0x1F7EB, prExtendedPictographic}, // E12.0 [12] (🟠..🟫) orange circle..brown square - {0x1F7EC, 0x1F7EF, prExtendedPictographic}, // E0.0 [4] (🟬..🟯) .. - {0x1F7F0, 0x1F7F0, prExtendedPictographic}, // E14.0 [1] (🟰) heavy equals sign - {0x1F7F1, 0x1F7FF, prExtendedPictographic}, // E0.0 [15] (🟱..🟿) .. - {0x1F80C, 0x1F80F, prExtendedPictographic}, // E0.0 [4] (🠌..🠏) .. - {0x1F848, 0x1F84F, prExtendedPictographic}, // E0.0 [8] (🡈..🡏) .. - {0x1F85A, 0x1F85F, prExtendedPictographic}, // E0.0 [6] (🡚..🡟) .. - {0x1F888, 0x1F88F, prExtendedPictographic}, // E0.0 [8] (🢈..🢏) .. - {0x1F8AE, 0x1F8FF, prExtendedPictographic}, // E0.0 [82] (🢮..🣿) .. - {0x1F90C, 0x1F90C, prExtendedPictographic}, // E13.0 [1] (🤌) pinched fingers - {0x1F90D, 0x1F90F, prExtendedPictographic}, // E12.0 [3] (🤍..🤏) white heart..pinching hand - {0x1F910, 0x1F918, prExtendedPictographic}, // E1.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns - {0x1F919, 0x1F91E, prExtendedPictographic}, // E3.0 [6] (🤙..🤞) call me hand..crossed fingers - {0x1F91F, 0x1F91F, prExtendedPictographic}, // E5.0 [1] (🤟) love-you gesture - {0x1F920, 0x1F927, prExtendedPictographic}, // E3.0 [8] (🤠..🤧) cowboy hat face..sneezing face - {0x1F928, 0x1F92F, prExtendedPictographic}, // E5.0 [8] (🤨..🤯) face with raised eyebrow..exploding head - {0x1F930, 0x1F930, prExtendedPictographic}, // E3.0 [1] (🤰) pregnant woman - {0x1F931, 0x1F932, prExtendedPictographic}, // E5.0 [2] (🤱..🤲) breast-feeding..palms up together - {0x1F933, 0x1F93A, prExtendedPictographic}, // E3.0 [8] (🤳..🤺) selfie..person fencing - {0x1F93C, 0x1F93E, prExtendedPictographic}, // E3.0 [3] (🤼..🤾) people wrestling..person playing handball - {0x1F93F, 0x1F93F, prExtendedPictographic}, // E12.0 [1] (🤿) diving mask - {0x1F940, 0x1F945, prExtendedPictographic}, // E3.0 [6] (🥀..🥅) wilted flower..goal net - {0x1F947, 0x1F94B, prExtendedPictographic}, // E3.0 [5] (🥇..🥋) 1st place medal..martial arts uniform - {0x1F94C, 0x1F94C, prExtendedPictographic}, // E5.0 [1] (🥌) curling stone - {0x1F94D, 0x1F94F, prExtendedPictographic}, // E11.0 [3] (🥍..🥏) lacrosse..flying disc - {0x1F950, 0x1F95E, prExtendedPictographic}, // E3.0 [15] (🥐..🥞) croissant..pancakes - {0x1F95F, 0x1F96B, prExtendedPictographic}, // E5.0 [13] (🥟..🥫) dumpling..canned food - {0x1F96C, 0x1F970, prExtendedPictographic}, // E11.0 [5] (🥬..🥰) leafy green..smiling face with hearts - {0x1F971, 0x1F971, prExtendedPictographic}, // E12.0 [1] (🥱) yawning face - {0x1F972, 0x1F972, prExtendedPictographic}, // E13.0 [1] (🥲) smiling face with tear - {0x1F973, 0x1F976, prExtendedPictographic}, // E11.0 [4] (🥳..🥶) partying face..cold face - {0x1F977, 0x1F978, prExtendedPictographic}, // E13.0 [2] (🥷..🥸) ninja..disguised face - {0x1F979, 0x1F979, prExtendedPictographic}, // E14.0 [1] (🥹) face holding back tears - {0x1F97A, 0x1F97A, prExtendedPictographic}, // E11.0 [1] (🥺) pleading face - {0x1F97B, 0x1F97B, prExtendedPictographic}, // E12.0 [1] (🥻) sari - {0x1F97C, 0x1F97F, prExtendedPictographic}, // E11.0 [4] (🥼..🥿) lab coat..flat shoe - {0x1F980, 0x1F984, prExtendedPictographic}, // E1.0 [5] (🦀..🦄) crab..unicorn - {0x1F985, 0x1F991, prExtendedPictographic}, // E3.0 [13] (🦅..🦑) eagle..squid - {0x1F992, 0x1F997, prExtendedPictographic}, // E5.0 [6] (🦒..🦗) giraffe..cricket - {0x1F998, 0x1F9A2, prExtendedPictographic}, // E11.0 [11] (🦘..🦢) kangaroo..swan - {0x1F9A3, 0x1F9A4, prExtendedPictographic}, // E13.0 [2] (🦣..🦤) mammoth..dodo - {0x1F9A5, 0x1F9AA, prExtendedPictographic}, // E12.0 [6] (🦥..🦪) sloth..oyster - {0x1F9AB, 0x1F9AD, prExtendedPictographic}, // E13.0 [3] (🦫..🦭) beaver..seal - {0x1F9AE, 0x1F9AF, prExtendedPictographic}, // E12.0 [2] (🦮..🦯) guide dog..white cane - {0x1F9B0, 0x1F9B9, prExtendedPictographic}, // E11.0 [10] (🦰..🦹) red hair..supervillain - {0x1F9BA, 0x1F9BF, prExtendedPictographic}, // E12.0 [6] (🦺..🦿) safety vest..mechanical leg - {0x1F9C0, 0x1F9C0, prExtendedPictographic}, // E1.0 [1] (🧀) cheese wedge - {0x1F9C1, 0x1F9C2, prExtendedPictographic}, // E11.0 [2] (🧁..🧂) cupcake..salt - {0x1F9C3, 0x1F9CA, prExtendedPictographic}, // E12.0 [8] (🧃..🧊) beverage box..ice - {0x1F9CB, 0x1F9CB, prExtendedPictographic}, // E13.0 [1] (🧋) bubble tea - {0x1F9CC, 0x1F9CC, prExtendedPictographic}, // E14.0 [1] (🧌) troll - {0x1F9CD, 0x1F9CF, prExtendedPictographic}, // E12.0 [3] (🧍..🧏) person standing..deaf person - {0x1F9D0, 0x1F9E6, prExtendedPictographic}, // E5.0 [23] (🧐..🧦) face with monocle..socks - {0x1F9E7, 0x1F9FF, prExtendedPictographic}, // E11.0 [25] (🧧..🧿) red envelope..nazar amulet - {0x1FA00, 0x1FA6F, prExtendedPictographic}, // E0.0 [112] (🨀..🩯) NEUTRAL CHESS KING.. - {0x1FA70, 0x1FA73, prExtendedPictographic}, // E12.0 [4] (🩰..🩳) ballet shoes..shorts - {0x1FA74, 0x1FA74, prExtendedPictographic}, // E13.0 [1] (🩴) thong sandal - {0x1FA75, 0x1FA77, prExtendedPictographic}, // E15.0 [3] (🩵..🩷) light blue heart..pink heart - {0x1FA78, 0x1FA7A, prExtendedPictographic}, // E12.0 [3] (🩸..🩺) drop of blood..stethoscope - {0x1FA7B, 0x1FA7C, prExtendedPictographic}, // E14.0 [2] (🩻..🩼) x-ray..crutch - {0x1FA7D, 0x1FA7F, prExtendedPictographic}, // E0.0 [3] (🩽..🩿) .. - {0x1FA80, 0x1FA82, prExtendedPictographic}, // E12.0 [3] (🪀..🪂) yo-yo..parachute - {0x1FA83, 0x1FA86, prExtendedPictographic}, // E13.0 [4] (🪃..🪆) boomerang..nesting dolls - {0x1FA87, 0x1FA88, prExtendedPictographic}, // E15.0 [2] (🪇..🪈) maracas..flute - {0x1FA89, 0x1FA8F, prExtendedPictographic}, // E0.0 [7] (🪉..🪏) .. - {0x1FA90, 0x1FA95, prExtendedPictographic}, // E12.0 [6] (🪐..🪕) ringed planet..banjo - {0x1FA96, 0x1FAA8, prExtendedPictographic}, // E13.0 [19] (🪖..🪨) military helmet..rock - {0x1FAA9, 0x1FAAC, prExtendedPictographic}, // E14.0 [4] (🪩..🪬) mirror ball..hamsa - {0x1FAAD, 0x1FAAF, prExtendedPictographic}, // E15.0 [3] (🪭..🪯) folding hand fan..khanda - {0x1FAB0, 0x1FAB6, prExtendedPictographic}, // E13.0 [7] (🪰..🪶) fly..feather - {0x1FAB7, 0x1FABA, prExtendedPictographic}, // E14.0 [4] (🪷..🪺) lotus..nest with eggs - {0x1FABB, 0x1FABD, prExtendedPictographic}, // E15.0 [3] (🪻..🪽) hyacinth..wing - {0x1FABE, 0x1FABE, prExtendedPictographic}, // E0.0 [1] (🪾) - {0x1FABF, 0x1FABF, prExtendedPictographic}, // E15.0 [1] (🪿) goose - {0x1FAC0, 0x1FAC2, prExtendedPictographic}, // E13.0 [3] (🫀..🫂) anatomical heart..people hugging - {0x1FAC3, 0x1FAC5, prExtendedPictographic}, // E14.0 [3] (🫃..🫅) pregnant man..person with crown - {0x1FAC6, 0x1FACD, prExtendedPictographic}, // E0.0 [8] (🫆..🫍) .. - {0x1FACE, 0x1FACF, prExtendedPictographic}, // E15.0 [2] (🫎..🫏) moose..donkey - {0x1FAD0, 0x1FAD6, prExtendedPictographic}, // E13.0 [7] (🫐..🫖) blueberries..teapot - {0x1FAD7, 0x1FAD9, prExtendedPictographic}, // E14.0 [3] (🫗..🫙) pouring liquid..jar - {0x1FADA, 0x1FADB, prExtendedPictographic}, // E15.0 [2] (🫚..🫛) ginger root..pea pod - {0x1FADC, 0x1FADF, prExtendedPictographic}, // E0.0 [4] (🫜..🫟) .. - {0x1FAE0, 0x1FAE7, prExtendedPictographic}, // E14.0 [8] (🫠..🫧) melting face..bubbles - {0x1FAE8, 0x1FAE8, prExtendedPictographic}, // E15.0 [1] (🫨) shaking face - {0x1FAE9, 0x1FAEF, prExtendedPictographic}, // E0.0 [7] (🫩..🫯) .. - {0x1FAF0, 0x1FAF6, prExtendedPictographic}, // E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands - {0x1FAF7, 0x1FAF8, prExtendedPictographic}, // E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand - {0x1FAF9, 0x1FAFF, prExtendedPictographic}, // E0.0 [7] (🫹..🫿) .. - {0x1FC00, 0x1FFFD, prExtendedPictographic}, // E0.0[1022] (🰀..🿽) .. - {0xE0000, 0xE0000, prControl}, // Cn - {0xE0001, 0xE0001, prControl}, // Cf LANGUAGE TAG - {0xE0002, 0xE001F, prControl}, // Cn [30] .. - {0xE0020, 0xE007F, prExtend}, // Cf [96] TAG SPACE..CANCEL TAG - {0xE0080, 0xE00FF, prControl}, // Cn [128] .. - {0xE0100, 0xE01EF, prExtend}, // Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 - {0xE01F0, 0xE0FFF, prControl}, // Cn [3600] .. -} diff --git a/vendor/github.com/rivo/uniseg/graphemerules.go b/vendor/github.com/rivo/uniseg/graphemerules.go deleted file mode 100644 index 5d399d29c8..0000000000 --- a/vendor/github.com/rivo/uniseg/graphemerules.go +++ /dev/null @@ -1,176 +0,0 @@ -package uniseg - -// The states of the grapheme cluster parser. -const ( - grAny = iota - grCR - grControlLF - grL - grLVV - grLVTT - grPrepend - grExtendedPictographic - grExtendedPictographicZWJ - grRIOdd - grRIEven -) - -// The grapheme cluster parser's breaking instructions. -const ( - grNoBoundary = iota - grBoundary -) - -// grTransitions implements the grapheme cluster parser's state transitions. -// Maps state and property to a new state, a breaking instruction, and rule -// number. The breaking instruction always refers to the boundary between the -// last and next code point. Returns negative values if no transition is found. -// -// This function is used as follows: -// -// 1. Find specific state + specific property. Stop if found. -// 2. Find specific state + any property. -// 3. Find any state + specific property. -// 4. If only (2) or (3) (but not both) was found, stop. -// 5. If both (2) and (3) were found, use state from (3) and breaking instruction -// from the transition with the lower rule number, prefer (3) if rule numbers -// are equal. Stop. -// 6. Assume grAny and grBoundary. -// -// Unicode version 15.0.0. -func grTransitions(state, prop int) (newState int, newProp int, boundary int) { - // It turns out that using a big switch statement is much faster than using - // a map. - - switch uint64(state) | uint64(prop)<<32 { - // GB5 - case grAny | prCR<<32: - return grCR, grBoundary, 50 - case grAny | prLF<<32: - return grControlLF, grBoundary, 50 - case grAny | prControl<<32: - return grControlLF, grBoundary, 50 - - // GB4 - case grCR | prAny<<32: - return grAny, grBoundary, 40 - case grControlLF | prAny<<32: - return grAny, grBoundary, 40 - - // GB3 - case grCR | prLF<<32: - return grControlLF, grNoBoundary, 30 - - // GB6 - case grAny | prL<<32: - return grL, grBoundary, 9990 - case grL | prL<<32: - return grL, grNoBoundary, 60 - case grL | prV<<32: - return grLVV, grNoBoundary, 60 - case grL | prLV<<32: - return grLVV, grNoBoundary, 60 - case grL | prLVT<<32: - return grLVTT, grNoBoundary, 60 - - // GB7 - case grAny | prLV<<32: - return grLVV, grBoundary, 9990 - case grAny | prV<<32: - return grLVV, grBoundary, 9990 - case grLVV | prV<<32: - return grLVV, grNoBoundary, 70 - case grLVV | prT<<32: - return grLVTT, grNoBoundary, 70 - - // GB8 - case grAny | prLVT<<32: - return grLVTT, grBoundary, 9990 - case grAny | prT<<32: - return grLVTT, grBoundary, 9990 - case grLVTT | prT<<32: - return grLVTT, grNoBoundary, 80 - - // GB9 - case grAny | prExtend<<32: - return grAny, grNoBoundary, 90 - case grAny | prZWJ<<32: - return grAny, grNoBoundary, 90 - - // GB9a - case grAny | prSpacingMark<<32: - return grAny, grNoBoundary, 91 - - // GB9b - case grAny | prPrepend<<32: - return grPrepend, grBoundary, 9990 - case grPrepend | prAny<<32: - return grAny, grNoBoundary, 92 - - // GB11 - case grAny | prExtendedPictographic<<32: - return grExtendedPictographic, grBoundary, 9990 - case grExtendedPictographic | prExtend<<32: - return grExtendedPictographic, grNoBoundary, 110 - case grExtendedPictographic | prZWJ<<32: - return grExtendedPictographicZWJ, grNoBoundary, 110 - case grExtendedPictographicZWJ | prExtendedPictographic<<32: - return grExtendedPictographic, grNoBoundary, 110 - - // GB12 / GB13 - case grAny | prRegionalIndicator<<32: - return grRIOdd, grBoundary, 9990 - case grRIOdd | prRegionalIndicator<<32: - return grRIEven, grNoBoundary, 120 - case grRIEven | prRegionalIndicator<<32: - return grRIOdd, grBoundary, 120 - default: - return -1, -1, -1 - } -} - -// transitionGraphemeState determines the new state of the grapheme cluster -// parser given the current state and the next code point. It also returns the -// code point's grapheme property (the value mapped by the [graphemeCodePoints] -// table) and whether a cluster boundary was detected. -func transitionGraphemeState(state int, r rune) (newState, prop int, boundary bool) { - // Determine the property of the next character. - prop = propertyGraphemes(r) - - // Find the applicable transition. - nextState, nextProp, _ := grTransitions(state, prop) - if nextState >= 0 { - // We have a specific transition. We'll use it. - return nextState, prop, nextProp == grBoundary - } - - // No specific transition found. Try the less specific ones. - anyPropState, anyPropProp, anyPropRule := grTransitions(state, prAny) - anyStateState, anyStateProp, anyStateRule := grTransitions(grAny, prop) - if anyPropState >= 0 && anyStateState >= 0 { - // Both apply. We'll use a mix (see comments for grTransitions). - newState = anyStateState - boundary = anyStateProp == grBoundary - if anyPropRule < anyStateRule { - boundary = anyPropProp == grBoundary - } - return - } - - if anyPropState >= 0 { - // We only have a specific state. - return anyPropState, prop, anyPropProp == grBoundary - // This branch will probably never be reached because okAnyState will - // always be true given the current transition map. But we keep it here - // for future modifications to the transition map where this may not be - // true anymore. - } - - if anyStateState >= 0 { - // We only have a specific property. - return anyStateState, prop, anyStateProp == grBoundary - } - - // No known transition. GB999: Any ÷ Any. - return grAny, prop, true -} diff --git a/vendor/github.com/rivo/uniseg/line.go b/vendor/github.com/rivo/uniseg/line.go deleted file mode 100644 index 7a46318d93..0000000000 --- a/vendor/github.com/rivo/uniseg/line.go +++ /dev/null @@ -1,134 +0,0 @@ -package uniseg - -import "unicode/utf8" - -// FirstLineSegment returns the prefix of the given byte slice after which a -// decision to break the string over to the next line can or must be made, -// according to the rules of [Unicode Standard Annex #14]. This is used to -// implement line breaking. -// -// Line breaking, also known as word wrapping, is the process of breaking a -// section of text into lines such that it will fit in the available width of a -// page, window or other display area. -// -// The returned "segment" may not be broken into smaller parts, unless no other -// breaking opportunities present themselves, in which case you may break by -// grapheme clusters (using the [FirstGraphemeCluster] function to determine the -// grapheme clusters). -// -// The "mustBreak" flag indicates whether you MUST break the line after the -// given segment (true), for example after newline characters, or you MAY break -// the line after the given segment (false). -// -// This function can be called continuously to extract all non-breaking sub-sets -// from a byte slice, as illustrated in the example below. -// -// If you don't know the current state, for example when calling the function -// for the first time, you must pass -1. For consecutive calls, pass the state -// and rest slice returned by the previous call. -// -// The "rest" slice is the sub-slice of the original byte slice "b" starting -// after the last byte of the identified line segment. If the length of the -// "rest" slice is 0, the entire byte slice "b" has been processed. The -// "segment" byte slice is the sub-slice of the input slice containing the -// identified line segment. -// -// Given an empty byte slice "b", the function returns nil values. -// -// Note that in accordance with [UAX #14 LB3], the final segment will end with -// "mustBreak" set to true. You can choose to ignore this by checking if the -// length of the "rest" slice is 0 and calling [HasTrailingLineBreak] or -// [HasTrailingLineBreakInString] on the last rune. -// -// Note also that this algorithm may break within grapheme clusters. This is -// addressed in Section 8.2 Example 6 of UAX #14. To avoid this, you can use -// the [Step] function instead. -// -// [Unicode Standard Annex #14]: https://www.unicode.org/reports/tr14/ -// [UAX #14 LB3]: https://www.unicode.org/reports/tr14/#Algorithm -func FirstLineSegment(b []byte, state int) (segment, rest []byte, mustBreak bool, newState int) { - // An empty byte slice returns nothing. - if len(b) == 0 { - return - } - - // Extract the first rune. - r, length := utf8.DecodeRune(b) - if len(b) <= length { // If we're already past the end, there is nothing else to parse. - return b, nil, true, lbAny // LB3. - } - - // If we don't know the state, determine it now. - if state < 0 { - state, _ = transitionLineBreakState(state, r, b[length:], "") - } - - // Transition until we find a boundary. - var boundary int - for { - r, l := utf8.DecodeRune(b[length:]) - state, boundary = transitionLineBreakState(state, r, b[length+l:], "") - - if boundary != LineDontBreak { - return b[:length], b[length:], boundary == LineMustBreak, state - } - - length += l - if len(b) <= length { - return b, nil, true, lbAny // LB3 - } - } -} - -// FirstLineSegmentInString is like [FirstLineSegment] but its input and outputs -// are strings. -func FirstLineSegmentInString(str string, state int) (segment, rest string, mustBreak bool, newState int) { - // An empty byte slice returns nothing. - if len(str) == 0 { - return - } - - // Extract the first rune. - r, length := utf8.DecodeRuneInString(str) - if len(str) <= length { // If we're already past the end, there is nothing else to parse. - return str, "", true, lbAny // LB3. - } - - // If we don't know the state, determine it now. - if state < 0 { - state, _ = transitionLineBreakState(state, r, nil, str[length:]) - } - - // Transition until we find a boundary. - var boundary int - for { - r, l := utf8.DecodeRuneInString(str[length:]) - state, boundary = transitionLineBreakState(state, r, nil, str[length+l:]) - - if boundary != LineDontBreak { - return str[:length], str[length:], boundary == LineMustBreak, state - } - - length += l - if len(str) <= length { - return str, "", true, lbAny // LB3. - } - } -} - -// HasTrailingLineBreak returns true if the last rune in the given byte slice is -// one of the hard line break code points defined in LB4 and LB5 of [UAX #14]. -// -// [UAX #14]: https://www.unicode.org/reports/tr14/#Algorithm -func HasTrailingLineBreak(b []byte) bool { - r, _ := utf8.DecodeLastRune(b) - property, _ := propertyLineBreak(r) - return property == prBK || property == prCR || property == prLF || property == prNL -} - -// HasTrailingLineBreakInString is like [HasTrailingLineBreak] but for a string. -func HasTrailingLineBreakInString(str string) bool { - r, _ := utf8.DecodeLastRuneInString(str) - property, _ := propertyLineBreak(r) - return property == prBK || property == prCR || property == prLF || property == prNL -} diff --git a/vendor/github.com/rivo/uniseg/lineproperties.go b/vendor/github.com/rivo/uniseg/lineproperties.go deleted file mode 100644 index ac7fac4c05..0000000000 --- a/vendor/github.com/rivo/uniseg/lineproperties.go +++ /dev/null @@ -1,3554 +0,0 @@ -// Code generated via go generate from gen_properties.go. DO NOT EDIT. - -package uniseg - -// lineBreakCodePoints are taken from -// https://www.unicode.org/Public/15.0.0/ucd/LineBreak.txt -// and -// https://unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt -// ("Extended_Pictographic" only) -// on September 5, 2023. See https://www.unicode.org/license.html for the Unicode -// license agreement. -var lineBreakCodePoints = [][4]int{ - {0x0000, 0x0008, prCM, gcCc}, // [9] .. - {0x0009, 0x0009, prBA, gcCc}, // - {0x000A, 0x000A, prLF, gcCc}, // - {0x000B, 0x000C, prBK, gcCc}, // [2] .. - {0x000D, 0x000D, prCR, gcCc}, // - {0x000E, 0x001F, prCM, gcCc}, // [18] .. - {0x0020, 0x0020, prSP, gcZs}, // SPACE - {0x0021, 0x0021, prEX, gcPo}, // EXCLAMATION MARK - {0x0022, 0x0022, prQU, gcPo}, // QUOTATION MARK - {0x0023, 0x0023, prAL, gcPo}, // NUMBER SIGN - {0x0024, 0x0024, prPR, gcSc}, // DOLLAR SIGN - {0x0025, 0x0025, prPO, gcPo}, // PERCENT SIGN - {0x0026, 0x0026, prAL, gcPo}, // AMPERSAND - {0x0027, 0x0027, prQU, gcPo}, // APOSTROPHE - {0x0028, 0x0028, prOP, gcPs}, // LEFT PARENTHESIS - {0x0029, 0x0029, prCP, gcPe}, // RIGHT PARENTHESIS - {0x002A, 0x002A, prAL, gcPo}, // ASTERISK - {0x002B, 0x002B, prPR, gcSm}, // PLUS SIGN - {0x002C, 0x002C, prIS, gcPo}, // COMMA - {0x002D, 0x002D, prHY, gcPd}, // HYPHEN-MINUS - {0x002E, 0x002E, prIS, gcPo}, // FULL STOP - {0x002F, 0x002F, prSY, gcPo}, // SOLIDUS - {0x0030, 0x0039, prNU, gcNd}, // [10] DIGIT ZERO..DIGIT NINE - {0x003A, 0x003B, prIS, gcPo}, // [2] COLON..SEMICOLON - {0x003C, 0x003E, prAL, gcSm}, // [3] LESS-THAN SIGN..GREATER-THAN SIGN - {0x003F, 0x003F, prEX, gcPo}, // QUESTION MARK - {0x0040, 0x0040, prAL, gcPo}, // COMMERCIAL AT - {0x0041, 0x005A, prAL, gcLu}, // [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z - {0x005B, 0x005B, prOP, gcPs}, // LEFT SQUARE BRACKET - {0x005C, 0x005C, prPR, gcPo}, // REVERSE SOLIDUS - {0x005D, 0x005D, prCP, gcPe}, // RIGHT SQUARE BRACKET - {0x005E, 0x005E, prAL, gcSk}, // CIRCUMFLEX ACCENT - {0x005F, 0x005F, prAL, gcPc}, // LOW LINE - {0x0060, 0x0060, prAL, gcSk}, // GRAVE ACCENT - {0x0061, 0x007A, prAL, gcLl}, // [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z - {0x007B, 0x007B, prOP, gcPs}, // LEFT CURLY BRACKET - {0x007C, 0x007C, prBA, gcSm}, // VERTICAL LINE - {0x007D, 0x007D, prCL, gcPe}, // RIGHT CURLY BRACKET - {0x007E, 0x007E, prAL, gcSm}, // TILDE - {0x007F, 0x007F, prCM, gcCc}, // - {0x0080, 0x0084, prCM, gcCc}, // [5] .. - {0x0085, 0x0085, prNL, gcCc}, // - {0x0086, 0x009F, prCM, gcCc}, // [26] .. - {0x00A0, 0x00A0, prGL, gcZs}, // NO-BREAK SPACE - {0x00A1, 0x00A1, prOP, gcPo}, // INVERTED EXCLAMATION MARK - {0x00A2, 0x00A2, prPO, gcSc}, // CENT SIGN - {0x00A3, 0x00A5, prPR, gcSc}, // [3] POUND SIGN..YEN SIGN - {0x00A6, 0x00A6, prAL, gcSo}, // BROKEN BAR - {0x00A7, 0x00A7, prAI, gcPo}, // SECTION SIGN - {0x00A8, 0x00A8, prAI, gcSk}, // DIAERESIS - {0x00A9, 0x00A9, prAL, gcSo}, // COPYRIGHT SIGN - {0x00AA, 0x00AA, prAI, gcLo}, // FEMININE ORDINAL INDICATOR - {0x00AB, 0x00AB, prQU, gcPi}, // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - {0x00AC, 0x00AC, prAL, gcSm}, // NOT SIGN - {0x00AD, 0x00AD, prBA, gcCf}, // SOFT HYPHEN - {0x00AE, 0x00AE, prAL, gcSo}, // REGISTERED SIGN - {0x00AF, 0x00AF, prAL, gcSk}, // MACRON - {0x00B0, 0x00B0, prPO, gcSo}, // DEGREE SIGN - {0x00B1, 0x00B1, prPR, gcSm}, // PLUS-MINUS SIGN - {0x00B2, 0x00B3, prAI, gcNo}, // [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE - {0x00B4, 0x00B4, prBB, gcSk}, // ACUTE ACCENT - {0x00B5, 0x00B5, prAL, gcLl}, // MICRO SIGN - {0x00B6, 0x00B7, prAI, gcPo}, // [2] PILCROW SIGN..MIDDLE DOT - {0x00B8, 0x00B8, prAI, gcSk}, // CEDILLA - {0x00B9, 0x00B9, prAI, gcNo}, // SUPERSCRIPT ONE - {0x00BA, 0x00BA, prAI, gcLo}, // MASCULINE ORDINAL INDICATOR - {0x00BB, 0x00BB, prQU, gcPf}, // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - {0x00BC, 0x00BE, prAI, gcNo}, // [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS - {0x00BF, 0x00BF, prOP, gcPo}, // INVERTED QUESTION MARK - {0x00C0, 0x00D6, prAL, gcLu}, // [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS - {0x00D7, 0x00D7, prAI, gcSm}, // MULTIPLICATION SIGN - {0x00D8, 0x00F6, prAL, gcLC}, // [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS - {0x00F7, 0x00F7, prAI, gcSm}, // DIVISION SIGN - {0x00F8, 0x00FF, prAL, gcLl}, // [8] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER Y WITH DIAERESIS - {0x0100, 0x017F, prAL, gcLC}, // [128] LATIN CAPITAL LETTER A WITH MACRON..LATIN SMALL LETTER LONG S - {0x0180, 0x01BA, prAL, gcLC}, // [59] LATIN SMALL LETTER B WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL - {0x01BB, 0x01BB, prAL, gcLo}, // LATIN LETTER TWO WITH STROKE - {0x01BC, 0x01BF, prAL, gcLC}, // [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN - {0x01C0, 0x01C3, prAL, gcLo}, // [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK - {0x01C4, 0x024F, prAL, gcLC}, // [140] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER Y WITH STROKE - {0x0250, 0x0293, prAL, gcLl}, // [68] LATIN SMALL LETTER TURNED A..LATIN SMALL LETTER EZH WITH CURL - {0x0294, 0x0294, prAL, gcLo}, // LATIN LETTER GLOTTAL STOP - {0x0295, 0x02AF, prAL, gcLl}, // [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL - {0x02B0, 0x02C1, prAL, gcLm}, // [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP - {0x02C2, 0x02C5, prAL, gcSk}, // [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD - {0x02C6, 0x02C6, prAL, gcLm}, // MODIFIER LETTER CIRCUMFLEX ACCENT - {0x02C7, 0x02C7, prAI, gcLm}, // CARON - {0x02C8, 0x02C8, prBB, gcLm}, // MODIFIER LETTER VERTICAL LINE - {0x02C9, 0x02CB, prAI, gcLm}, // [3] MODIFIER LETTER MACRON..MODIFIER LETTER GRAVE ACCENT - {0x02CC, 0x02CC, prBB, gcLm}, // MODIFIER LETTER LOW VERTICAL LINE - {0x02CD, 0x02CD, prAI, gcLm}, // MODIFIER LETTER LOW MACRON - {0x02CE, 0x02CF, prAL, gcLm}, // [2] MODIFIER LETTER LOW GRAVE ACCENT..MODIFIER LETTER LOW ACUTE ACCENT - {0x02D0, 0x02D0, prAI, gcLm}, // MODIFIER LETTER TRIANGULAR COLON - {0x02D1, 0x02D1, prAL, gcLm}, // MODIFIER LETTER HALF TRIANGULAR COLON - {0x02D2, 0x02D7, prAL, gcSk}, // [6] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER MINUS SIGN - {0x02D8, 0x02DB, prAI, gcSk}, // [4] BREVE..OGONEK - {0x02DC, 0x02DC, prAL, gcSk}, // SMALL TILDE - {0x02DD, 0x02DD, prAI, gcSk}, // DOUBLE ACUTE ACCENT - {0x02DE, 0x02DE, prAL, gcSk}, // MODIFIER LETTER RHOTIC HOOK - {0x02DF, 0x02DF, prBB, gcSk}, // MODIFIER LETTER CROSS ACCENT - {0x02E0, 0x02E4, prAL, gcLm}, // [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP - {0x02E5, 0x02EB, prAL, gcSk}, // [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK - {0x02EC, 0x02EC, prAL, gcLm}, // MODIFIER LETTER VOICING - {0x02ED, 0x02ED, prAL, gcSk}, // MODIFIER LETTER UNASPIRATED - {0x02EE, 0x02EE, prAL, gcLm}, // MODIFIER LETTER DOUBLE APOSTROPHE - {0x02EF, 0x02FF, prAL, gcSk}, // [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW - {0x0300, 0x034E, prCM, gcMn}, // [79] COMBINING GRAVE ACCENT..COMBINING UPWARDS ARROW BELOW - {0x034F, 0x034F, prGL, gcMn}, // COMBINING GRAPHEME JOINER - {0x0350, 0x035B, prCM, gcMn}, // [12] COMBINING RIGHT ARROWHEAD ABOVE..COMBINING ZIGZAG ABOVE - {0x035C, 0x0362, prGL, gcMn}, // [7] COMBINING DOUBLE BREVE BELOW..COMBINING DOUBLE RIGHTWARDS ARROW BELOW - {0x0363, 0x036F, prCM, gcMn}, // [13] COMBINING LATIN SMALL LETTER A..COMBINING LATIN SMALL LETTER X - {0x0370, 0x0373, prAL, gcLC}, // [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI - {0x0374, 0x0374, prAL, gcLm}, // GREEK NUMERAL SIGN - {0x0375, 0x0375, prAL, gcSk}, // GREEK LOWER NUMERAL SIGN - {0x0376, 0x0377, prAL, gcLC}, // [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA - {0x037A, 0x037A, prAL, gcLm}, // GREEK YPOGEGRAMMENI - {0x037B, 0x037D, prAL, gcLl}, // [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL - {0x037E, 0x037E, prIS, gcPo}, // GREEK QUESTION MARK - {0x037F, 0x037F, prAL, gcLu}, // GREEK CAPITAL LETTER YOT - {0x0384, 0x0385, prAL, gcSk}, // [2] GREEK TONOS..GREEK DIALYTIKA TONOS - {0x0386, 0x0386, prAL, gcLu}, // GREEK CAPITAL LETTER ALPHA WITH TONOS - {0x0387, 0x0387, prAL, gcPo}, // GREEK ANO TELEIA - {0x0388, 0x038A, prAL, gcLu}, // [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS - {0x038C, 0x038C, prAL, gcLu}, // GREEK CAPITAL LETTER OMICRON WITH TONOS - {0x038E, 0x03A1, prAL, gcLC}, // [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO - {0x03A3, 0x03F5, prAL, gcLC}, // [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL - {0x03F6, 0x03F6, prAL, gcSm}, // GREEK REVERSED LUNATE EPSILON SYMBOL - {0x03F7, 0x03FF, prAL, gcLC}, // [9] GREEK CAPITAL LETTER SHO..GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL - {0x0400, 0x0481, prAL, gcLC}, // [130] CYRILLIC CAPITAL LETTER IE WITH GRAVE..CYRILLIC SMALL LETTER KOPPA - {0x0482, 0x0482, prAL, gcSo}, // CYRILLIC THOUSANDS SIGN - {0x0483, 0x0487, prCM, gcMn}, // [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE - {0x0488, 0x0489, prCM, gcMe}, // [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN - {0x048A, 0x04FF, prAL, gcLC}, // [118] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER HA WITH STROKE - {0x0500, 0x052F, prAL, gcLC}, // [48] CYRILLIC CAPITAL LETTER KOMI DE..CYRILLIC SMALL LETTER EL WITH DESCENDER - {0x0531, 0x0556, prAL, gcLu}, // [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH - {0x0559, 0x0559, prAL, gcLm}, // ARMENIAN MODIFIER LETTER LEFT HALF RING - {0x055A, 0x055F, prAL, gcPo}, // [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK - {0x0560, 0x0588, prAL, gcLl}, // [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE - {0x0589, 0x0589, prIS, gcPo}, // ARMENIAN FULL STOP - {0x058A, 0x058A, prBA, gcPd}, // ARMENIAN HYPHEN - {0x058D, 0x058E, prAL, gcSo}, // [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN - {0x058F, 0x058F, prPR, gcSc}, // ARMENIAN DRAM SIGN - {0x0591, 0x05BD, prCM, gcMn}, // [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG - {0x05BE, 0x05BE, prBA, gcPd}, // HEBREW PUNCTUATION MAQAF - {0x05BF, 0x05BF, prCM, gcMn}, // HEBREW POINT RAFE - {0x05C0, 0x05C0, prAL, gcPo}, // HEBREW PUNCTUATION PASEQ - {0x05C1, 0x05C2, prCM, gcMn}, // [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT - {0x05C3, 0x05C3, prAL, gcPo}, // HEBREW PUNCTUATION SOF PASUQ - {0x05C4, 0x05C5, prCM, gcMn}, // [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT - {0x05C6, 0x05C6, prEX, gcPo}, // HEBREW PUNCTUATION NUN HAFUKHA - {0x05C7, 0x05C7, prCM, gcMn}, // HEBREW POINT QAMATS QATAN - {0x05D0, 0x05EA, prHL, gcLo}, // [27] HEBREW LETTER ALEF..HEBREW LETTER TAV - {0x05EF, 0x05F2, prHL, gcLo}, // [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD - {0x05F3, 0x05F4, prAL, gcPo}, // [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM - {0x0600, 0x0605, prAL, gcCf}, // [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE - {0x0606, 0x0608, prAL, gcSm}, // [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY - {0x0609, 0x060A, prPO, gcPo}, // [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN - {0x060B, 0x060B, prPO, gcSc}, // AFGHANI SIGN - {0x060C, 0x060D, prIS, gcPo}, // [2] ARABIC COMMA..ARABIC DATE SEPARATOR - {0x060E, 0x060F, prAL, gcSo}, // [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA - {0x0610, 0x061A, prCM, gcMn}, // [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA - {0x061B, 0x061B, prEX, gcPo}, // ARABIC SEMICOLON - {0x061C, 0x061C, prCM, gcCf}, // ARABIC LETTER MARK - {0x061D, 0x061F, prEX, gcPo}, // [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK - {0x0620, 0x063F, prAL, gcLo}, // [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE - {0x0640, 0x0640, prAL, gcLm}, // ARABIC TATWEEL - {0x0641, 0x064A, prAL, gcLo}, // [10] ARABIC LETTER FEH..ARABIC LETTER YEH - {0x064B, 0x065F, prCM, gcMn}, // [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW - {0x0660, 0x0669, prNU, gcNd}, // [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE - {0x066A, 0x066A, prPO, gcPo}, // ARABIC PERCENT SIGN - {0x066B, 0x066C, prNU, gcPo}, // [2] ARABIC DECIMAL SEPARATOR..ARABIC THOUSANDS SEPARATOR - {0x066D, 0x066D, prAL, gcPo}, // ARABIC FIVE POINTED STAR - {0x066E, 0x066F, prAL, gcLo}, // [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF - {0x0670, 0x0670, prCM, gcMn}, // ARABIC LETTER SUPERSCRIPT ALEF - {0x0671, 0x06D3, prAL, gcLo}, // [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE - {0x06D4, 0x06D4, prEX, gcPo}, // ARABIC FULL STOP - {0x06D5, 0x06D5, prAL, gcLo}, // ARABIC LETTER AE - {0x06D6, 0x06DC, prCM, gcMn}, // [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN - {0x06DD, 0x06DD, prAL, gcCf}, // ARABIC END OF AYAH - {0x06DE, 0x06DE, prAL, gcSo}, // ARABIC START OF RUB EL HIZB - {0x06DF, 0x06E4, prCM, gcMn}, // [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA - {0x06E5, 0x06E6, prAL, gcLm}, // [2] ARABIC SMALL WAW..ARABIC SMALL YEH - {0x06E7, 0x06E8, prCM, gcMn}, // [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON - {0x06E9, 0x06E9, prAL, gcSo}, // ARABIC PLACE OF SAJDAH - {0x06EA, 0x06ED, prCM, gcMn}, // [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM - {0x06EE, 0x06EF, prAL, gcLo}, // [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V - {0x06F0, 0x06F9, prNU, gcNd}, // [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE - {0x06FA, 0x06FC, prAL, gcLo}, // [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW - {0x06FD, 0x06FE, prAL, gcSo}, // [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN - {0x06FF, 0x06FF, prAL, gcLo}, // ARABIC LETTER HEH WITH INVERTED V - {0x0700, 0x070D, prAL, gcPo}, // [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS - {0x070F, 0x070F, prAL, gcCf}, // SYRIAC ABBREVIATION MARK - {0x0710, 0x0710, prAL, gcLo}, // SYRIAC LETTER ALAPH - {0x0711, 0x0711, prCM, gcMn}, // SYRIAC LETTER SUPERSCRIPT ALAPH - {0x0712, 0x072F, prAL, gcLo}, // [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH - {0x0730, 0x074A, prCM, gcMn}, // [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH - {0x074D, 0x074F, prAL, gcLo}, // [3] SYRIAC LETTER SOGDIAN ZHAIN..SYRIAC LETTER SOGDIAN FE - {0x0750, 0x077F, prAL, gcLo}, // [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE - {0x0780, 0x07A5, prAL, gcLo}, // [38] THAANA LETTER HAA..THAANA LETTER WAAVU - {0x07A6, 0x07B0, prCM, gcMn}, // [11] THAANA ABAFILI..THAANA SUKUN - {0x07B1, 0x07B1, prAL, gcLo}, // THAANA LETTER NAA - {0x07C0, 0x07C9, prNU, gcNd}, // [10] NKO DIGIT ZERO..NKO DIGIT NINE - {0x07CA, 0x07EA, prAL, gcLo}, // [33] NKO LETTER A..NKO LETTER JONA RA - {0x07EB, 0x07F3, prCM, gcMn}, // [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE - {0x07F4, 0x07F5, prAL, gcLm}, // [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE - {0x07F6, 0x07F6, prAL, gcSo}, // NKO SYMBOL OO DENNEN - {0x07F7, 0x07F7, prAL, gcPo}, // NKO SYMBOL GBAKURUNEN - {0x07F8, 0x07F8, prIS, gcPo}, // NKO COMMA - {0x07F9, 0x07F9, prEX, gcPo}, // NKO EXCLAMATION MARK - {0x07FA, 0x07FA, prAL, gcLm}, // NKO LAJANYALAN - {0x07FD, 0x07FD, prCM, gcMn}, // NKO DANTAYALAN - {0x07FE, 0x07FF, prPR, gcSc}, // [2] NKO DOROME SIGN..NKO TAMAN SIGN - {0x0800, 0x0815, prAL, gcLo}, // [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF - {0x0816, 0x0819, prCM, gcMn}, // [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH - {0x081A, 0x081A, prAL, gcLm}, // SAMARITAN MODIFIER LETTER EPENTHETIC YUT - {0x081B, 0x0823, prCM, gcMn}, // [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A - {0x0824, 0x0824, prAL, gcLm}, // SAMARITAN MODIFIER LETTER SHORT A - {0x0825, 0x0827, prCM, gcMn}, // [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U - {0x0828, 0x0828, prAL, gcLm}, // SAMARITAN MODIFIER LETTER I - {0x0829, 0x082D, prCM, gcMn}, // [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA - {0x0830, 0x083E, prAL, gcPo}, // [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU - {0x0840, 0x0858, prAL, gcLo}, // [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN - {0x0859, 0x085B, prCM, gcMn}, // [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK - {0x085E, 0x085E, prAL, gcPo}, // MANDAIC PUNCTUATION - {0x0860, 0x086A, prAL, gcLo}, // [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA - {0x0870, 0x0887, prAL, gcLo}, // [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT - {0x0888, 0x0888, prAL, gcSk}, // ARABIC RAISED ROUND DOT - {0x0889, 0x088E, prAL, gcLo}, // [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL - {0x0890, 0x0891, prAL, gcCf}, // [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE - {0x0898, 0x089F, prCM, gcMn}, // [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA - {0x08A0, 0x08C8, prAL, gcLo}, // [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF - {0x08C9, 0x08C9, prAL, gcLm}, // ARABIC SMALL FARSI YEH - {0x08CA, 0x08E1, prCM, gcMn}, // [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA - {0x08E2, 0x08E2, prAL, gcCf}, // ARABIC DISPUTED END OF AYAH - {0x08E3, 0x08FF, prCM, gcMn}, // [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA - {0x0900, 0x0902, prCM, gcMn}, // [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA - {0x0903, 0x0903, prCM, gcMc}, // DEVANAGARI SIGN VISARGA - {0x0904, 0x0939, prAL, gcLo}, // [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA - {0x093A, 0x093A, prCM, gcMn}, // DEVANAGARI VOWEL SIGN OE - {0x093B, 0x093B, prCM, gcMc}, // DEVANAGARI VOWEL SIGN OOE - {0x093C, 0x093C, prCM, gcMn}, // DEVANAGARI SIGN NUKTA - {0x093D, 0x093D, prAL, gcLo}, // DEVANAGARI SIGN AVAGRAHA - {0x093E, 0x0940, prCM, gcMc}, // [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II - {0x0941, 0x0948, prCM, gcMn}, // [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI - {0x0949, 0x094C, prCM, gcMc}, // [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU - {0x094D, 0x094D, prCM, gcMn}, // DEVANAGARI SIGN VIRAMA - {0x094E, 0x094F, prCM, gcMc}, // [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW - {0x0950, 0x0950, prAL, gcLo}, // DEVANAGARI OM - {0x0951, 0x0957, prCM, gcMn}, // [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE - {0x0958, 0x0961, prAL, gcLo}, // [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL - {0x0962, 0x0963, prCM, gcMn}, // [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL - {0x0964, 0x0965, prBA, gcPo}, // [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA - {0x0966, 0x096F, prNU, gcNd}, // [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE - {0x0970, 0x0970, prAL, gcPo}, // DEVANAGARI ABBREVIATION SIGN - {0x0971, 0x0971, prAL, gcLm}, // DEVANAGARI SIGN HIGH SPACING DOT - {0x0972, 0x097F, prAL, gcLo}, // [14] DEVANAGARI LETTER CANDRA A..DEVANAGARI LETTER BBA - {0x0980, 0x0980, prAL, gcLo}, // BENGALI ANJI - {0x0981, 0x0981, prCM, gcMn}, // BENGALI SIGN CANDRABINDU - {0x0982, 0x0983, prCM, gcMc}, // [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA - {0x0985, 0x098C, prAL, gcLo}, // [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L - {0x098F, 0x0990, prAL, gcLo}, // [2] BENGALI LETTER E..BENGALI LETTER AI - {0x0993, 0x09A8, prAL, gcLo}, // [22] BENGALI LETTER O..BENGALI LETTER NA - {0x09AA, 0x09B0, prAL, gcLo}, // [7] BENGALI LETTER PA..BENGALI LETTER RA - {0x09B2, 0x09B2, prAL, gcLo}, // BENGALI LETTER LA - {0x09B6, 0x09B9, prAL, gcLo}, // [4] BENGALI LETTER SHA..BENGALI LETTER HA - {0x09BC, 0x09BC, prCM, gcMn}, // BENGALI SIGN NUKTA - {0x09BD, 0x09BD, prAL, gcLo}, // BENGALI SIGN AVAGRAHA - {0x09BE, 0x09C0, prCM, gcMc}, // [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II - {0x09C1, 0x09C4, prCM, gcMn}, // [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR - {0x09C7, 0x09C8, prCM, gcMc}, // [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI - {0x09CB, 0x09CC, prCM, gcMc}, // [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU - {0x09CD, 0x09CD, prCM, gcMn}, // BENGALI SIGN VIRAMA - {0x09CE, 0x09CE, prAL, gcLo}, // BENGALI LETTER KHANDA TA - {0x09D7, 0x09D7, prCM, gcMc}, // BENGALI AU LENGTH MARK - {0x09DC, 0x09DD, prAL, gcLo}, // [2] BENGALI LETTER RRA..BENGALI LETTER RHA - {0x09DF, 0x09E1, prAL, gcLo}, // [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL - {0x09E2, 0x09E3, prCM, gcMn}, // [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL - {0x09E6, 0x09EF, prNU, gcNd}, // [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE - {0x09F0, 0x09F1, prAL, gcLo}, // [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL - {0x09F2, 0x09F3, prPO, gcSc}, // [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN - {0x09F4, 0x09F8, prAL, gcNo}, // [5] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR - {0x09F9, 0x09F9, prPO, gcNo}, // BENGALI CURRENCY DENOMINATOR SIXTEEN - {0x09FA, 0x09FA, prAL, gcSo}, // BENGALI ISSHAR - {0x09FB, 0x09FB, prPR, gcSc}, // BENGALI GANDA MARK - {0x09FC, 0x09FC, prAL, gcLo}, // BENGALI LETTER VEDIC ANUSVARA - {0x09FD, 0x09FD, prAL, gcPo}, // BENGALI ABBREVIATION SIGN - {0x09FE, 0x09FE, prCM, gcMn}, // BENGALI SANDHI MARK - {0x0A01, 0x0A02, prCM, gcMn}, // [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI - {0x0A03, 0x0A03, prCM, gcMc}, // GURMUKHI SIGN VISARGA - {0x0A05, 0x0A0A, prAL, gcLo}, // [6] GURMUKHI LETTER A..GURMUKHI LETTER UU - {0x0A0F, 0x0A10, prAL, gcLo}, // [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI - {0x0A13, 0x0A28, prAL, gcLo}, // [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA - {0x0A2A, 0x0A30, prAL, gcLo}, // [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA - {0x0A32, 0x0A33, prAL, gcLo}, // [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA - {0x0A35, 0x0A36, prAL, gcLo}, // [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA - {0x0A38, 0x0A39, prAL, gcLo}, // [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA - {0x0A3C, 0x0A3C, prCM, gcMn}, // GURMUKHI SIGN NUKTA - {0x0A3E, 0x0A40, prCM, gcMc}, // [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II - {0x0A41, 0x0A42, prCM, gcMn}, // [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU - {0x0A47, 0x0A48, prCM, gcMn}, // [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI - {0x0A4B, 0x0A4D, prCM, gcMn}, // [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA - {0x0A51, 0x0A51, prCM, gcMn}, // GURMUKHI SIGN UDAAT - {0x0A59, 0x0A5C, prAL, gcLo}, // [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA - {0x0A5E, 0x0A5E, prAL, gcLo}, // GURMUKHI LETTER FA - {0x0A66, 0x0A6F, prNU, gcNd}, // [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE - {0x0A70, 0x0A71, prCM, gcMn}, // [2] GURMUKHI TIPPI..GURMUKHI ADDAK - {0x0A72, 0x0A74, prAL, gcLo}, // [3] GURMUKHI IRI..GURMUKHI EK ONKAR - {0x0A75, 0x0A75, prCM, gcMn}, // GURMUKHI SIGN YAKASH - {0x0A76, 0x0A76, prAL, gcPo}, // GURMUKHI ABBREVIATION SIGN - {0x0A81, 0x0A82, prCM, gcMn}, // [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA - {0x0A83, 0x0A83, prCM, gcMc}, // GUJARATI SIGN VISARGA - {0x0A85, 0x0A8D, prAL, gcLo}, // [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E - {0x0A8F, 0x0A91, prAL, gcLo}, // [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O - {0x0A93, 0x0AA8, prAL, gcLo}, // [22] GUJARATI LETTER O..GUJARATI LETTER NA - {0x0AAA, 0x0AB0, prAL, gcLo}, // [7] GUJARATI LETTER PA..GUJARATI LETTER RA - {0x0AB2, 0x0AB3, prAL, gcLo}, // [2] GUJARATI LETTER LA..GUJARATI LETTER LLA - {0x0AB5, 0x0AB9, prAL, gcLo}, // [5] GUJARATI LETTER VA..GUJARATI LETTER HA - {0x0ABC, 0x0ABC, prCM, gcMn}, // GUJARATI SIGN NUKTA - {0x0ABD, 0x0ABD, prAL, gcLo}, // GUJARATI SIGN AVAGRAHA - {0x0ABE, 0x0AC0, prCM, gcMc}, // [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II - {0x0AC1, 0x0AC5, prCM, gcMn}, // [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E - {0x0AC7, 0x0AC8, prCM, gcMn}, // [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI - {0x0AC9, 0x0AC9, prCM, gcMc}, // GUJARATI VOWEL SIGN CANDRA O - {0x0ACB, 0x0ACC, prCM, gcMc}, // [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU - {0x0ACD, 0x0ACD, prCM, gcMn}, // GUJARATI SIGN VIRAMA - {0x0AD0, 0x0AD0, prAL, gcLo}, // GUJARATI OM - {0x0AE0, 0x0AE1, prAL, gcLo}, // [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL - {0x0AE2, 0x0AE3, prCM, gcMn}, // [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL - {0x0AE6, 0x0AEF, prNU, gcNd}, // [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE - {0x0AF0, 0x0AF0, prAL, gcPo}, // GUJARATI ABBREVIATION SIGN - {0x0AF1, 0x0AF1, prPR, gcSc}, // GUJARATI RUPEE SIGN - {0x0AF9, 0x0AF9, prAL, gcLo}, // GUJARATI LETTER ZHA - {0x0AFA, 0x0AFF, prCM, gcMn}, // [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE - {0x0B01, 0x0B01, prCM, gcMn}, // ORIYA SIGN CANDRABINDU - {0x0B02, 0x0B03, prCM, gcMc}, // [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA - {0x0B05, 0x0B0C, prAL, gcLo}, // [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L - {0x0B0F, 0x0B10, prAL, gcLo}, // [2] ORIYA LETTER E..ORIYA LETTER AI - {0x0B13, 0x0B28, prAL, gcLo}, // [22] ORIYA LETTER O..ORIYA LETTER NA - {0x0B2A, 0x0B30, prAL, gcLo}, // [7] ORIYA LETTER PA..ORIYA LETTER RA - {0x0B32, 0x0B33, prAL, gcLo}, // [2] ORIYA LETTER LA..ORIYA LETTER LLA - {0x0B35, 0x0B39, prAL, gcLo}, // [5] ORIYA LETTER VA..ORIYA LETTER HA - {0x0B3C, 0x0B3C, prCM, gcMn}, // ORIYA SIGN NUKTA - {0x0B3D, 0x0B3D, prAL, gcLo}, // ORIYA SIGN AVAGRAHA - {0x0B3E, 0x0B3E, prCM, gcMc}, // ORIYA VOWEL SIGN AA - {0x0B3F, 0x0B3F, prCM, gcMn}, // ORIYA VOWEL SIGN I - {0x0B40, 0x0B40, prCM, gcMc}, // ORIYA VOWEL SIGN II - {0x0B41, 0x0B44, prCM, gcMn}, // [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR - {0x0B47, 0x0B48, prCM, gcMc}, // [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI - {0x0B4B, 0x0B4C, prCM, gcMc}, // [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU - {0x0B4D, 0x0B4D, prCM, gcMn}, // ORIYA SIGN VIRAMA - {0x0B55, 0x0B56, prCM, gcMn}, // [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK - {0x0B57, 0x0B57, prCM, gcMc}, // ORIYA AU LENGTH MARK - {0x0B5C, 0x0B5D, prAL, gcLo}, // [2] ORIYA LETTER RRA..ORIYA LETTER RHA - {0x0B5F, 0x0B61, prAL, gcLo}, // [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL - {0x0B62, 0x0B63, prCM, gcMn}, // [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL - {0x0B66, 0x0B6F, prNU, gcNd}, // [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE - {0x0B70, 0x0B70, prAL, gcSo}, // ORIYA ISSHAR - {0x0B71, 0x0B71, prAL, gcLo}, // ORIYA LETTER WA - {0x0B72, 0x0B77, prAL, gcNo}, // [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS - {0x0B82, 0x0B82, prCM, gcMn}, // TAMIL SIGN ANUSVARA - {0x0B83, 0x0B83, prAL, gcLo}, // TAMIL SIGN VISARGA - {0x0B85, 0x0B8A, prAL, gcLo}, // [6] TAMIL LETTER A..TAMIL LETTER UU - {0x0B8E, 0x0B90, prAL, gcLo}, // [3] TAMIL LETTER E..TAMIL LETTER AI - {0x0B92, 0x0B95, prAL, gcLo}, // [4] TAMIL LETTER O..TAMIL LETTER KA - {0x0B99, 0x0B9A, prAL, gcLo}, // [2] TAMIL LETTER NGA..TAMIL LETTER CA - {0x0B9C, 0x0B9C, prAL, gcLo}, // TAMIL LETTER JA - {0x0B9E, 0x0B9F, prAL, gcLo}, // [2] TAMIL LETTER NYA..TAMIL LETTER TTA - {0x0BA3, 0x0BA4, prAL, gcLo}, // [2] TAMIL LETTER NNA..TAMIL LETTER TA - {0x0BA8, 0x0BAA, prAL, gcLo}, // [3] TAMIL LETTER NA..TAMIL LETTER PA - {0x0BAE, 0x0BB9, prAL, gcLo}, // [12] TAMIL LETTER MA..TAMIL LETTER HA - {0x0BBE, 0x0BBF, prCM, gcMc}, // [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I - {0x0BC0, 0x0BC0, prCM, gcMn}, // TAMIL VOWEL SIGN II - {0x0BC1, 0x0BC2, prCM, gcMc}, // [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU - {0x0BC6, 0x0BC8, prCM, gcMc}, // [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI - {0x0BCA, 0x0BCC, prCM, gcMc}, // [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU - {0x0BCD, 0x0BCD, prCM, gcMn}, // TAMIL SIGN VIRAMA - {0x0BD0, 0x0BD0, prAL, gcLo}, // TAMIL OM - {0x0BD7, 0x0BD7, prCM, gcMc}, // TAMIL AU LENGTH MARK - {0x0BE6, 0x0BEF, prNU, gcNd}, // [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE - {0x0BF0, 0x0BF2, prAL, gcNo}, // [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND - {0x0BF3, 0x0BF8, prAL, gcSo}, // [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN - {0x0BF9, 0x0BF9, prPR, gcSc}, // TAMIL RUPEE SIGN - {0x0BFA, 0x0BFA, prAL, gcSo}, // TAMIL NUMBER SIGN - {0x0C00, 0x0C00, prCM, gcMn}, // TELUGU SIGN COMBINING CANDRABINDU ABOVE - {0x0C01, 0x0C03, prCM, gcMc}, // [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA - {0x0C04, 0x0C04, prCM, gcMn}, // TELUGU SIGN COMBINING ANUSVARA ABOVE - {0x0C05, 0x0C0C, prAL, gcLo}, // [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L - {0x0C0E, 0x0C10, prAL, gcLo}, // [3] TELUGU LETTER E..TELUGU LETTER AI - {0x0C12, 0x0C28, prAL, gcLo}, // [23] TELUGU LETTER O..TELUGU LETTER NA - {0x0C2A, 0x0C39, prAL, gcLo}, // [16] TELUGU LETTER PA..TELUGU LETTER HA - {0x0C3C, 0x0C3C, prCM, gcMn}, // TELUGU SIGN NUKTA - {0x0C3D, 0x0C3D, prAL, gcLo}, // TELUGU SIGN AVAGRAHA - {0x0C3E, 0x0C40, prCM, gcMn}, // [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II - {0x0C41, 0x0C44, prCM, gcMc}, // [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR - {0x0C46, 0x0C48, prCM, gcMn}, // [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI - {0x0C4A, 0x0C4D, prCM, gcMn}, // [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA - {0x0C55, 0x0C56, prCM, gcMn}, // [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK - {0x0C58, 0x0C5A, prAL, gcLo}, // [3] TELUGU LETTER TSA..TELUGU LETTER RRRA - {0x0C5D, 0x0C5D, prAL, gcLo}, // TELUGU LETTER NAKAARA POLLU - {0x0C60, 0x0C61, prAL, gcLo}, // [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL - {0x0C62, 0x0C63, prCM, gcMn}, // [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL - {0x0C66, 0x0C6F, prNU, gcNd}, // [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE - {0x0C77, 0x0C77, prBB, gcPo}, // TELUGU SIGN SIDDHAM - {0x0C78, 0x0C7E, prAL, gcNo}, // [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR - {0x0C7F, 0x0C7F, prAL, gcSo}, // TELUGU SIGN TUUMU - {0x0C80, 0x0C80, prAL, gcLo}, // KANNADA SIGN SPACING CANDRABINDU - {0x0C81, 0x0C81, prCM, gcMn}, // KANNADA SIGN CANDRABINDU - {0x0C82, 0x0C83, prCM, gcMc}, // [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA - {0x0C84, 0x0C84, prBB, gcPo}, // KANNADA SIGN SIDDHAM - {0x0C85, 0x0C8C, prAL, gcLo}, // [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L - {0x0C8E, 0x0C90, prAL, gcLo}, // [3] KANNADA LETTER E..KANNADA LETTER AI - {0x0C92, 0x0CA8, prAL, gcLo}, // [23] KANNADA LETTER O..KANNADA LETTER NA - {0x0CAA, 0x0CB3, prAL, gcLo}, // [10] KANNADA LETTER PA..KANNADA LETTER LLA - {0x0CB5, 0x0CB9, prAL, gcLo}, // [5] KANNADA LETTER VA..KANNADA LETTER HA - {0x0CBC, 0x0CBC, prCM, gcMn}, // KANNADA SIGN NUKTA - {0x0CBD, 0x0CBD, prAL, gcLo}, // KANNADA SIGN AVAGRAHA - {0x0CBE, 0x0CBE, prCM, gcMc}, // KANNADA VOWEL SIGN AA - {0x0CBF, 0x0CBF, prCM, gcMn}, // KANNADA VOWEL SIGN I - {0x0CC0, 0x0CC4, prCM, gcMc}, // [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR - {0x0CC6, 0x0CC6, prCM, gcMn}, // KANNADA VOWEL SIGN E - {0x0CC7, 0x0CC8, prCM, gcMc}, // [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI - {0x0CCA, 0x0CCB, prCM, gcMc}, // [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO - {0x0CCC, 0x0CCD, prCM, gcMn}, // [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA - {0x0CD5, 0x0CD6, prCM, gcMc}, // [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK - {0x0CDD, 0x0CDE, prAL, gcLo}, // [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA - {0x0CE0, 0x0CE1, prAL, gcLo}, // [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL - {0x0CE2, 0x0CE3, prCM, gcMn}, // [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL - {0x0CE6, 0x0CEF, prNU, gcNd}, // [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE - {0x0CF1, 0x0CF2, prAL, gcLo}, // [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA - {0x0CF3, 0x0CF3, prCM, gcMc}, // KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT - {0x0D00, 0x0D01, prCM, gcMn}, // [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU - {0x0D02, 0x0D03, prCM, gcMc}, // [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA - {0x0D04, 0x0D0C, prAL, gcLo}, // [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L - {0x0D0E, 0x0D10, prAL, gcLo}, // [3] MALAYALAM LETTER E..MALAYALAM LETTER AI - {0x0D12, 0x0D3A, prAL, gcLo}, // [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA - {0x0D3B, 0x0D3C, prCM, gcMn}, // [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA - {0x0D3D, 0x0D3D, prAL, gcLo}, // MALAYALAM SIGN AVAGRAHA - {0x0D3E, 0x0D40, prCM, gcMc}, // [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II - {0x0D41, 0x0D44, prCM, gcMn}, // [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR - {0x0D46, 0x0D48, prCM, gcMc}, // [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI - {0x0D4A, 0x0D4C, prCM, gcMc}, // [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU - {0x0D4D, 0x0D4D, prCM, gcMn}, // MALAYALAM SIGN VIRAMA - {0x0D4E, 0x0D4E, prAL, gcLo}, // MALAYALAM LETTER DOT REPH - {0x0D4F, 0x0D4F, prAL, gcSo}, // MALAYALAM SIGN PARA - {0x0D54, 0x0D56, prAL, gcLo}, // [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL - {0x0D57, 0x0D57, prCM, gcMc}, // MALAYALAM AU LENGTH MARK - {0x0D58, 0x0D5E, prAL, gcNo}, // [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH - {0x0D5F, 0x0D61, prAL, gcLo}, // [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL - {0x0D62, 0x0D63, prCM, gcMn}, // [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL - {0x0D66, 0x0D6F, prNU, gcNd}, // [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE - {0x0D70, 0x0D78, prAL, gcNo}, // [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS - {0x0D79, 0x0D79, prPO, gcSo}, // MALAYALAM DATE MARK - {0x0D7A, 0x0D7F, prAL, gcLo}, // [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K - {0x0D81, 0x0D81, prCM, gcMn}, // SINHALA SIGN CANDRABINDU - {0x0D82, 0x0D83, prCM, gcMc}, // [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA - {0x0D85, 0x0D96, prAL, gcLo}, // [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA - {0x0D9A, 0x0DB1, prAL, gcLo}, // [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA - {0x0DB3, 0x0DBB, prAL, gcLo}, // [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA - {0x0DBD, 0x0DBD, prAL, gcLo}, // SINHALA LETTER DANTAJA LAYANNA - {0x0DC0, 0x0DC6, prAL, gcLo}, // [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA - {0x0DCA, 0x0DCA, prCM, gcMn}, // SINHALA SIGN AL-LAKUNA - {0x0DCF, 0x0DD1, prCM, gcMc}, // [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA - {0x0DD2, 0x0DD4, prCM, gcMn}, // [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA - {0x0DD6, 0x0DD6, prCM, gcMn}, // SINHALA VOWEL SIGN DIGA PAA-PILLA - {0x0DD8, 0x0DDF, prCM, gcMc}, // [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA - {0x0DE6, 0x0DEF, prNU, gcNd}, // [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE - {0x0DF2, 0x0DF3, prCM, gcMc}, // [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA - {0x0DF4, 0x0DF4, prAL, gcPo}, // SINHALA PUNCTUATION KUNDDALIYA - {0x0E01, 0x0E30, prSA, gcLo}, // [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A - {0x0E31, 0x0E31, prSA, gcMn}, // THAI CHARACTER MAI HAN-AKAT - {0x0E32, 0x0E33, prSA, gcLo}, // [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM - {0x0E34, 0x0E3A, prSA, gcMn}, // [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU - {0x0E3F, 0x0E3F, prPR, gcSc}, // THAI CURRENCY SYMBOL BAHT - {0x0E40, 0x0E45, prSA, gcLo}, // [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO - {0x0E46, 0x0E46, prSA, gcLm}, // THAI CHARACTER MAIYAMOK - {0x0E47, 0x0E4E, prSA, gcMn}, // [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN - {0x0E4F, 0x0E4F, prAL, gcPo}, // THAI CHARACTER FONGMAN - {0x0E50, 0x0E59, prNU, gcNd}, // [10] THAI DIGIT ZERO..THAI DIGIT NINE - {0x0E5A, 0x0E5B, prBA, gcPo}, // [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT - {0x0E81, 0x0E82, prSA, gcLo}, // [2] LAO LETTER KO..LAO LETTER KHO SUNG - {0x0E84, 0x0E84, prSA, gcLo}, // LAO LETTER KHO TAM - {0x0E86, 0x0E8A, prSA, gcLo}, // [5] LAO LETTER PALI GHA..LAO LETTER SO TAM - {0x0E8C, 0x0EA3, prSA, gcLo}, // [24] LAO LETTER PALI JHA..LAO LETTER LO LING - {0x0EA5, 0x0EA5, prSA, gcLo}, // LAO LETTER LO LOOT - {0x0EA7, 0x0EB0, prSA, gcLo}, // [10] LAO LETTER WO..LAO VOWEL SIGN A - {0x0EB1, 0x0EB1, prSA, gcMn}, // LAO VOWEL SIGN MAI KAN - {0x0EB2, 0x0EB3, prSA, gcLo}, // [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM - {0x0EB4, 0x0EBC, prSA, gcMn}, // [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO - {0x0EBD, 0x0EBD, prSA, gcLo}, // LAO SEMIVOWEL SIGN NYO - {0x0EC0, 0x0EC4, prSA, gcLo}, // [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI - {0x0EC6, 0x0EC6, prSA, gcLm}, // LAO KO LA - {0x0EC8, 0x0ECE, prSA, gcMn}, // [7] LAO TONE MAI EK..LAO YAMAKKAN - {0x0ED0, 0x0ED9, prNU, gcNd}, // [10] LAO DIGIT ZERO..LAO DIGIT NINE - {0x0EDC, 0x0EDF, prSA, gcLo}, // [4] LAO HO NO..LAO LETTER KHMU NYO - {0x0F00, 0x0F00, prAL, gcLo}, // TIBETAN SYLLABLE OM - {0x0F01, 0x0F03, prBB, gcSo}, // [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA - {0x0F04, 0x0F04, prBB, gcPo}, // TIBETAN MARK INITIAL YIG MGO MDUN MA - {0x0F05, 0x0F05, prAL, gcPo}, // TIBETAN MARK CLOSING YIG MGO SGAB MA - {0x0F06, 0x0F07, prBB, gcPo}, // [2] TIBETAN MARK CARET YIG MGO PHUR SHAD MA..TIBETAN MARK YIG MGO TSHEG SHAD MA - {0x0F08, 0x0F08, prGL, gcPo}, // TIBETAN MARK SBRUL SHAD - {0x0F09, 0x0F0A, prBB, gcPo}, // [2] TIBETAN MARK BSKUR YIG MGO..TIBETAN MARK BKA- SHOG YIG MGO - {0x0F0B, 0x0F0B, prBA, gcPo}, // TIBETAN MARK INTERSYLLABIC TSHEG - {0x0F0C, 0x0F0C, prGL, gcPo}, // TIBETAN MARK DELIMITER TSHEG BSTAR - {0x0F0D, 0x0F11, prEX, gcPo}, // [5] TIBETAN MARK SHAD..TIBETAN MARK RIN CHEN SPUNGS SHAD - {0x0F12, 0x0F12, prGL, gcPo}, // TIBETAN MARK RGYA GRAM SHAD - {0x0F13, 0x0F13, prAL, gcSo}, // TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN - {0x0F14, 0x0F14, prEX, gcPo}, // TIBETAN MARK GTER TSHEG - {0x0F15, 0x0F17, prAL, gcSo}, // [3] TIBETAN LOGOTYPE SIGN CHAD RTAGS..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS - {0x0F18, 0x0F19, prCM, gcMn}, // [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS - {0x0F1A, 0x0F1F, prAL, gcSo}, // [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG - {0x0F20, 0x0F29, prNU, gcNd}, // [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE - {0x0F2A, 0x0F33, prAL, gcNo}, // [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO - {0x0F34, 0x0F34, prBA, gcSo}, // TIBETAN MARK BSDUS RTAGS - {0x0F35, 0x0F35, prCM, gcMn}, // TIBETAN MARK NGAS BZUNG NYI ZLA - {0x0F36, 0x0F36, prAL, gcSo}, // TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN - {0x0F37, 0x0F37, prCM, gcMn}, // TIBETAN MARK NGAS BZUNG SGOR RTAGS - {0x0F38, 0x0F38, prAL, gcSo}, // TIBETAN MARK CHE MGO - {0x0F39, 0x0F39, prCM, gcMn}, // TIBETAN MARK TSA -PHRU - {0x0F3A, 0x0F3A, prOP, gcPs}, // TIBETAN MARK GUG RTAGS GYON - {0x0F3B, 0x0F3B, prCL, gcPe}, // TIBETAN MARK GUG RTAGS GYAS - {0x0F3C, 0x0F3C, prOP, gcPs}, // TIBETAN MARK ANG KHANG GYON - {0x0F3D, 0x0F3D, prCL, gcPe}, // TIBETAN MARK ANG KHANG GYAS - {0x0F3E, 0x0F3F, prCM, gcMc}, // [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES - {0x0F40, 0x0F47, prAL, gcLo}, // [8] TIBETAN LETTER KA..TIBETAN LETTER JA - {0x0F49, 0x0F6C, prAL, gcLo}, // [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA - {0x0F71, 0x0F7E, prCM, gcMn}, // [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO - {0x0F7F, 0x0F7F, prBA, gcMc}, // TIBETAN SIGN RNAM BCAD - {0x0F80, 0x0F84, prCM, gcMn}, // [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA - {0x0F85, 0x0F85, prBA, gcPo}, // TIBETAN MARK PALUTA - {0x0F86, 0x0F87, prCM, gcMn}, // [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS - {0x0F88, 0x0F8C, prAL, gcLo}, // [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN - {0x0F8D, 0x0F97, prCM, gcMn}, // [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA - {0x0F99, 0x0FBC, prCM, gcMn}, // [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA - {0x0FBE, 0x0FBF, prBA, gcSo}, // [2] TIBETAN KU RU KHA..TIBETAN KU RU KHA BZHI MIG CAN - {0x0FC0, 0x0FC5, prAL, gcSo}, // [6] TIBETAN CANTILLATION SIGN HEAVY BEAT..TIBETAN SYMBOL RDO RJE - {0x0FC6, 0x0FC6, prCM, gcMn}, // TIBETAN SYMBOL PADMA GDAN - {0x0FC7, 0x0FCC, prAL, gcSo}, // [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL - {0x0FCE, 0x0FCF, prAL, gcSo}, // [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM - {0x0FD0, 0x0FD1, prBB, gcPo}, // [2] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK MNYAM YIG GI MGO RGYAN - {0x0FD2, 0x0FD2, prBA, gcPo}, // TIBETAN MARK NYIS TSHEG - {0x0FD3, 0x0FD3, prBB, gcPo}, // TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA - {0x0FD4, 0x0FD4, prAL, gcPo}, // TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA - {0x0FD5, 0x0FD8, prAL, gcSo}, // [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS - {0x0FD9, 0x0FDA, prGL, gcPo}, // [2] TIBETAN MARK LEADING MCHAN RTAGS..TIBETAN MARK TRAILING MCHAN RTAGS - {0x1000, 0x102A, prSA, gcLo}, // [43] MYANMAR LETTER KA..MYANMAR LETTER AU - {0x102B, 0x102C, prSA, gcMc}, // [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA - {0x102D, 0x1030, prSA, gcMn}, // [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU - {0x1031, 0x1031, prSA, gcMc}, // MYANMAR VOWEL SIGN E - {0x1032, 0x1037, prSA, gcMn}, // [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW - {0x1038, 0x1038, prSA, gcMc}, // MYANMAR SIGN VISARGA - {0x1039, 0x103A, prSA, gcMn}, // [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT - {0x103B, 0x103C, prSA, gcMc}, // [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA - {0x103D, 0x103E, prSA, gcMn}, // [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA - {0x103F, 0x103F, prSA, gcLo}, // MYANMAR LETTER GREAT SA - {0x1040, 0x1049, prNU, gcNd}, // [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE - {0x104A, 0x104B, prBA, gcPo}, // [2] MYANMAR SIGN LITTLE SECTION..MYANMAR SIGN SECTION - {0x104C, 0x104F, prAL, gcPo}, // [4] MYANMAR SYMBOL LOCATIVE..MYANMAR SYMBOL GENITIVE - {0x1050, 0x1055, prSA, gcLo}, // [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL - {0x1056, 0x1057, prSA, gcMc}, // [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR - {0x1058, 0x1059, prSA, gcMn}, // [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL - {0x105A, 0x105D, prSA, gcLo}, // [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE - {0x105E, 0x1060, prSA, gcMn}, // [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA - {0x1061, 0x1061, prSA, gcLo}, // MYANMAR LETTER SGAW KAREN SHA - {0x1062, 0x1064, prSA, gcMc}, // [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO - {0x1065, 0x1066, prSA, gcLo}, // [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA - {0x1067, 0x106D, prSA, gcMc}, // [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5 - {0x106E, 0x1070, prSA, gcLo}, // [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA - {0x1071, 0x1074, prSA, gcMn}, // [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE - {0x1075, 0x1081, prSA, gcLo}, // [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA - {0x1082, 0x1082, prSA, gcMn}, // MYANMAR CONSONANT SIGN SHAN MEDIAL WA - {0x1083, 0x1084, prSA, gcMc}, // [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E - {0x1085, 0x1086, prSA, gcMn}, // [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y - {0x1087, 0x108C, prSA, gcMc}, // [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3 - {0x108D, 0x108D, prSA, gcMn}, // MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE - {0x108E, 0x108E, prSA, gcLo}, // MYANMAR LETTER RUMAI PALAUNG FA - {0x108F, 0x108F, prSA, gcMc}, // MYANMAR SIGN RUMAI PALAUNG TONE-5 - {0x1090, 0x1099, prNU, gcNd}, // [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE - {0x109A, 0x109C, prSA, gcMc}, // [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A - {0x109D, 0x109D, prSA, gcMn}, // MYANMAR VOWEL SIGN AITON AI - {0x109E, 0x109F, prSA, gcSo}, // [2] MYANMAR SYMBOL SHAN ONE..MYANMAR SYMBOL SHAN EXCLAMATION - {0x10A0, 0x10C5, prAL, gcLu}, // [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE - {0x10C7, 0x10C7, prAL, gcLu}, // GEORGIAN CAPITAL LETTER YN - {0x10CD, 0x10CD, prAL, gcLu}, // GEORGIAN CAPITAL LETTER AEN - {0x10D0, 0x10FA, prAL, gcLl}, // [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN - {0x10FB, 0x10FB, prAL, gcPo}, // GEORGIAN PARAGRAPH SEPARATOR - {0x10FC, 0x10FC, prAL, gcLm}, // MODIFIER LETTER GEORGIAN NAR - {0x10FD, 0x10FF, prAL, gcLl}, // [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN - {0x1100, 0x115F, prJL, gcLo}, // [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER - {0x1160, 0x11A7, prJV, gcLo}, // [72] HANGUL JUNGSEONG FILLER..HANGUL JUNGSEONG O-YAE - {0x11A8, 0x11FF, prJT, gcLo}, // [88] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN - {0x1200, 0x1248, prAL, gcLo}, // [73] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE QWA - {0x124A, 0x124D, prAL, gcLo}, // [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE - {0x1250, 0x1256, prAL, gcLo}, // [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO - {0x1258, 0x1258, prAL, gcLo}, // ETHIOPIC SYLLABLE QHWA - {0x125A, 0x125D, prAL, gcLo}, // [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE - {0x1260, 0x1288, prAL, gcLo}, // [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA - {0x128A, 0x128D, prAL, gcLo}, // [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE - {0x1290, 0x12B0, prAL, gcLo}, // [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA - {0x12B2, 0x12B5, prAL, gcLo}, // [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE - {0x12B8, 0x12BE, prAL, gcLo}, // [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO - {0x12C0, 0x12C0, prAL, gcLo}, // ETHIOPIC SYLLABLE KXWA - {0x12C2, 0x12C5, prAL, gcLo}, // [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE - {0x12C8, 0x12D6, prAL, gcLo}, // [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O - {0x12D8, 0x1310, prAL, gcLo}, // [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA - {0x1312, 0x1315, prAL, gcLo}, // [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE - {0x1318, 0x135A, prAL, gcLo}, // [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA - {0x135D, 0x135F, prCM, gcMn}, // [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK - {0x1360, 0x1360, prAL, gcPo}, // ETHIOPIC SECTION MARK - {0x1361, 0x1361, prBA, gcPo}, // ETHIOPIC WORDSPACE - {0x1362, 0x1368, prAL, gcPo}, // [7] ETHIOPIC FULL STOP..ETHIOPIC PARAGRAPH SEPARATOR - {0x1369, 0x137C, prAL, gcNo}, // [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND - {0x1380, 0x138F, prAL, gcLo}, // [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE - {0x1390, 0x1399, prAL, gcSo}, // [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT - {0x13A0, 0x13F5, prAL, gcLu}, // [86] CHEROKEE LETTER A..CHEROKEE LETTER MV - {0x13F8, 0x13FD, prAL, gcLl}, // [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV - {0x1400, 0x1400, prBA, gcPd}, // CANADIAN SYLLABICS HYPHEN - {0x1401, 0x166C, prAL, gcLo}, // [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA - {0x166D, 0x166D, prAL, gcSo}, // CANADIAN SYLLABICS CHI SIGN - {0x166E, 0x166E, prAL, gcPo}, // CANADIAN SYLLABICS FULL STOP - {0x166F, 0x167F, prAL, gcLo}, // [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W - {0x1680, 0x1680, prBA, gcZs}, // OGHAM SPACE MARK - {0x1681, 0x169A, prAL, gcLo}, // [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH - {0x169B, 0x169B, prOP, gcPs}, // OGHAM FEATHER MARK - {0x169C, 0x169C, prCL, gcPe}, // OGHAM REVERSED FEATHER MARK - {0x16A0, 0x16EA, prAL, gcLo}, // [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X - {0x16EB, 0x16ED, prBA, gcPo}, // [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION - {0x16EE, 0x16F0, prAL, gcNl}, // [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL - {0x16F1, 0x16F8, prAL, gcLo}, // [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC - {0x1700, 0x1711, prAL, gcLo}, // [18] TAGALOG LETTER A..TAGALOG LETTER HA - {0x1712, 0x1714, prCM, gcMn}, // [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA - {0x1715, 0x1715, prCM, gcMc}, // TAGALOG SIGN PAMUDPOD - {0x171F, 0x171F, prAL, gcLo}, // TAGALOG LETTER ARCHAIC RA - {0x1720, 0x1731, prAL, gcLo}, // [18] HANUNOO LETTER A..HANUNOO LETTER HA - {0x1732, 0x1733, prCM, gcMn}, // [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U - {0x1734, 0x1734, prCM, gcMc}, // HANUNOO SIGN PAMUDPOD - {0x1735, 0x1736, prBA, gcPo}, // [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION - {0x1740, 0x1751, prAL, gcLo}, // [18] BUHID LETTER A..BUHID LETTER HA - {0x1752, 0x1753, prCM, gcMn}, // [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U - {0x1760, 0x176C, prAL, gcLo}, // [13] TAGBANWA LETTER A..TAGBANWA LETTER YA - {0x176E, 0x1770, prAL, gcLo}, // [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA - {0x1772, 0x1773, prCM, gcMn}, // [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U - {0x1780, 0x17B3, prSA, gcLo}, // [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU - {0x17B4, 0x17B5, prSA, gcMn}, // [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA - {0x17B6, 0x17B6, prSA, gcMc}, // KHMER VOWEL SIGN AA - {0x17B7, 0x17BD, prSA, gcMn}, // [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA - {0x17BE, 0x17C5, prSA, gcMc}, // [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU - {0x17C6, 0x17C6, prSA, gcMn}, // KHMER SIGN NIKAHIT - {0x17C7, 0x17C8, prSA, gcMc}, // [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU - {0x17C9, 0x17D3, prSA, gcMn}, // [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT - {0x17D4, 0x17D5, prBA, gcPo}, // [2] KHMER SIGN KHAN..KHMER SIGN BARIYOOSAN - {0x17D6, 0x17D6, prNS, gcPo}, // KHMER SIGN CAMNUC PII KUUH - {0x17D7, 0x17D7, prSA, gcLm}, // KHMER SIGN LEK TOO - {0x17D8, 0x17D8, prBA, gcPo}, // KHMER SIGN BEYYAL - {0x17D9, 0x17D9, prAL, gcPo}, // KHMER SIGN PHNAEK MUAN - {0x17DA, 0x17DA, prBA, gcPo}, // KHMER SIGN KOOMUUT - {0x17DB, 0x17DB, prPR, gcSc}, // KHMER CURRENCY SYMBOL RIEL - {0x17DC, 0x17DC, prSA, gcLo}, // KHMER SIGN AVAKRAHASANYA - {0x17DD, 0x17DD, prSA, gcMn}, // KHMER SIGN ATTHACAN - {0x17E0, 0x17E9, prNU, gcNd}, // [10] KHMER DIGIT ZERO..KHMER DIGIT NINE - {0x17F0, 0x17F9, prAL, gcNo}, // [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON - {0x1800, 0x1801, prAL, gcPo}, // [2] MONGOLIAN BIRGA..MONGOLIAN ELLIPSIS - {0x1802, 0x1803, prEX, gcPo}, // [2] MONGOLIAN COMMA..MONGOLIAN FULL STOP - {0x1804, 0x1805, prBA, gcPo}, // [2] MONGOLIAN COLON..MONGOLIAN FOUR DOTS - {0x1806, 0x1806, prBB, gcPd}, // MONGOLIAN TODO SOFT HYPHEN - {0x1807, 0x1807, prAL, gcPo}, // MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER - {0x1808, 0x1809, prEX, gcPo}, // [2] MONGOLIAN MANCHU COMMA..MONGOLIAN MANCHU FULL STOP - {0x180A, 0x180A, prAL, gcPo}, // MONGOLIAN NIRUGU - {0x180B, 0x180D, prCM, gcMn}, // [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE - {0x180E, 0x180E, prGL, gcCf}, // MONGOLIAN VOWEL SEPARATOR - {0x180F, 0x180F, prCM, gcMn}, // MONGOLIAN FREE VARIATION SELECTOR FOUR - {0x1810, 0x1819, prNU, gcNd}, // [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE - {0x1820, 0x1842, prAL, gcLo}, // [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI - {0x1843, 0x1843, prAL, gcLm}, // MONGOLIAN LETTER TODO LONG VOWEL SIGN - {0x1844, 0x1878, prAL, gcLo}, // [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS - {0x1880, 0x1884, prAL, gcLo}, // [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA - {0x1885, 0x1886, prCM, gcMn}, // [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA - {0x1887, 0x18A8, prAL, gcLo}, // [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA - {0x18A9, 0x18A9, prCM, gcMn}, // MONGOLIAN LETTER ALI GALI DAGALGA - {0x18AA, 0x18AA, prAL, gcLo}, // MONGOLIAN LETTER MANCHU ALI GALI LHA - {0x18B0, 0x18F5, prAL, gcLo}, // [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S - {0x1900, 0x191E, prAL, gcLo}, // [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA - {0x1920, 0x1922, prCM, gcMn}, // [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U - {0x1923, 0x1926, prCM, gcMc}, // [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU - {0x1927, 0x1928, prCM, gcMn}, // [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O - {0x1929, 0x192B, prCM, gcMc}, // [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA - {0x1930, 0x1931, prCM, gcMc}, // [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA - {0x1932, 0x1932, prCM, gcMn}, // LIMBU SMALL LETTER ANUSVARA - {0x1933, 0x1938, prCM, gcMc}, // [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA - {0x1939, 0x193B, prCM, gcMn}, // [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I - {0x1940, 0x1940, prAL, gcSo}, // LIMBU SIGN LOO - {0x1944, 0x1945, prEX, gcPo}, // [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK - {0x1946, 0x194F, prNU, gcNd}, // [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE - {0x1950, 0x196D, prSA, gcLo}, // [30] TAI LE LETTER KA..TAI LE LETTER AI - {0x1970, 0x1974, prSA, gcLo}, // [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6 - {0x1980, 0x19AB, prSA, gcLo}, // [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA - {0x19B0, 0x19C9, prSA, gcLo}, // [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2 - {0x19D0, 0x19D9, prNU, gcNd}, // [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE - {0x19DA, 0x19DA, prSA, gcNo}, // NEW TAI LUE THAM DIGIT ONE - {0x19DE, 0x19DF, prSA, gcSo}, // [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV - {0x19E0, 0x19FF, prAL, gcSo}, // [32] KHMER SYMBOL PATHAMASAT..KHMER SYMBOL DAP-PRAM ROC - {0x1A00, 0x1A16, prAL, gcLo}, // [23] BUGINESE LETTER KA..BUGINESE LETTER HA - {0x1A17, 0x1A18, prCM, gcMn}, // [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U - {0x1A19, 0x1A1A, prCM, gcMc}, // [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O - {0x1A1B, 0x1A1B, prCM, gcMn}, // BUGINESE VOWEL SIGN AE - {0x1A1E, 0x1A1F, prAL, gcPo}, // [2] BUGINESE PALLAWA..BUGINESE END OF SECTION - {0x1A20, 0x1A54, prSA, gcLo}, // [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA - {0x1A55, 0x1A55, prSA, gcMc}, // TAI THAM CONSONANT SIGN MEDIAL RA - {0x1A56, 0x1A56, prSA, gcMn}, // TAI THAM CONSONANT SIGN MEDIAL LA - {0x1A57, 0x1A57, prSA, gcMc}, // TAI THAM CONSONANT SIGN LA TANG LAI - {0x1A58, 0x1A5E, prSA, gcMn}, // [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA - {0x1A60, 0x1A60, prSA, gcMn}, // TAI THAM SIGN SAKOT - {0x1A61, 0x1A61, prSA, gcMc}, // TAI THAM VOWEL SIGN A - {0x1A62, 0x1A62, prSA, gcMn}, // TAI THAM VOWEL SIGN MAI SAT - {0x1A63, 0x1A64, prSA, gcMc}, // [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA - {0x1A65, 0x1A6C, prSA, gcMn}, // [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW - {0x1A6D, 0x1A72, prSA, gcMc}, // [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI - {0x1A73, 0x1A7C, prSA, gcMn}, // [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN - {0x1A7F, 0x1A7F, prCM, gcMn}, // TAI THAM COMBINING CRYPTOGRAMMIC DOT - {0x1A80, 0x1A89, prNU, gcNd}, // [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE - {0x1A90, 0x1A99, prNU, gcNd}, // [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE - {0x1AA0, 0x1AA6, prSA, gcPo}, // [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA - {0x1AA7, 0x1AA7, prSA, gcLm}, // TAI THAM SIGN MAI YAMOK - {0x1AA8, 0x1AAD, prSA, gcPo}, // [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG - {0x1AB0, 0x1ABD, prCM, gcMn}, // [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW - {0x1ABE, 0x1ABE, prCM, gcMe}, // COMBINING PARENTHESES OVERLAY - {0x1ABF, 0x1ACE, prCM, gcMn}, // [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T - {0x1B00, 0x1B03, prCM, gcMn}, // [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG - {0x1B04, 0x1B04, prCM, gcMc}, // BALINESE SIGN BISAH - {0x1B05, 0x1B33, prAL, gcLo}, // [47] BALINESE LETTER AKARA..BALINESE LETTER HA - {0x1B34, 0x1B34, prCM, gcMn}, // BALINESE SIGN REREKAN - {0x1B35, 0x1B35, prCM, gcMc}, // BALINESE VOWEL SIGN TEDUNG - {0x1B36, 0x1B3A, prCM, gcMn}, // [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA - {0x1B3B, 0x1B3B, prCM, gcMc}, // BALINESE VOWEL SIGN RA REPA TEDUNG - {0x1B3C, 0x1B3C, prCM, gcMn}, // BALINESE VOWEL SIGN LA LENGA - {0x1B3D, 0x1B41, prCM, gcMc}, // [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG - {0x1B42, 0x1B42, prCM, gcMn}, // BALINESE VOWEL SIGN PEPET - {0x1B43, 0x1B44, prCM, gcMc}, // [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG - {0x1B45, 0x1B4C, prAL, gcLo}, // [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA - {0x1B50, 0x1B59, prNU, gcNd}, // [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE - {0x1B5A, 0x1B5B, prBA, gcPo}, // [2] BALINESE PANTI..BALINESE PAMADA - {0x1B5C, 0x1B5C, prAL, gcPo}, // BALINESE WINDU - {0x1B5D, 0x1B60, prBA, gcPo}, // [4] BALINESE CARIK PAMUNGKAH..BALINESE PAMENENG - {0x1B61, 0x1B6A, prAL, gcSo}, // [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE - {0x1B6B, 0x1B73, prCM, gcMn}, // [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG - {0x1B74, 0x1B7C, prAL, gcSo}, // [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING - {0x1B7D, 0x1B7E, prBA, gcPo}, // [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG - {0x1B80, 0x1B81, prCM, gcMn}, // [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR - {0x1B82, 0x1B82, prCM, gcMc}, // SUNDANESE SIGN PANGWISAD - {0x1B83, 0x1BA0, prAL, gcLo}, // [30] SUNDANESE LETTER A..SUNDANESE LETTER HA - {0x1BA1, 0x1BA1, prCM, gcMc}, // SUNDANESE CONSONANT SIGN PAMINGKAL - {0x1BA2, 0x1BA5, prCM, gcMn}, // [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU - {0x1BA6, 0x1BA7, prCM, gcMc}, // [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG - {0x1BA8, 0x1BA9, prCM, gcMn}, // [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG - {0x1BAA, 0x1BAA, prCM, gcMc}, // SUNDANESE SIGN PAMAAEH - {0x1BAB, 0x1BAD, prCM, gcMn}, // [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA - {0x1BAE, 0x1BAF, prAL, gcLo}, // [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA - {0x1BB0, 0x1BB9, prNU, gcNd}, // [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE - {0x1BBA, 0x1BBF, prAL, gcLo}, // [6] SUNDANESE AVAGRAHA..SUNDANESE LETTER FINAL M - {0x1BC0, 0x1BE5, prAL, gcLo}, // [38] BATAK LETTER A..BATAK LETTER U - {0x1BE6, 0x1BE6, prCM, gcMn}, // BATAK SIGN TOMPI - {0x1BE7, 0x1BE7, prCM, gcMc}, // BATAK VOWEL SIGN E - {0x1BE8, 0x1BE9, prCM, gcMn}, // [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE - {0x1BEA, 0x1BEC, prCM, gcMc}, // [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O - {0x1BED, 0x1BED, prCM, gcMn}, // BATAK VOWEL SIGN KARO O - {0x1BEE, 0x1BEE, prCM, gcMc}, // BATAK VOWEL SIGN U - {0x1BEF, 0x1BF1, prCM, gcMn}, // [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H - {0x1BF2, 0x1BF3, prCM, gcMc}, // [2] BATAK PANGOLAT..BATAK PANONGONAN - {0x1BFC, 0x1BFF, prAL, gcPo}, // [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT - {0x1C00, 0x1C23, prAL, gcLo}, // [36] LEPCHA LETTER KA..LEPCHA LETTER A - {0x1C24, 0x1C2B, prCM, gcMc}, // [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU - {0x1C2C, 0x1C33, prCM, gcMn}, // [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T - {0x1C34, 0x1C35, prCM, gcMc}, // [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG - {0x1C36, 0x1C37, prCM, gcMn}, // [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA - {0x1C3B, 0x1C3F, prBA, gcPo}, // [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK - {0x1C40, 0x1C49, prNU, gcNd}, // [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE - {0x1C4D, 0x1C4F, prAL, gcLo}, // [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA - {0x1C50, 0x1C59, prNU, gcNd}, // [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE - {0x1C5A, 0x1C77, prAL, gcLo}, // [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH - {0x1C78, 0x1C7D, prAL, gcLm}, // [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD - {0x1C7E, 0x1C7F, prBA, gcPo}, // [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD - {0x1C80, 0x1C88, prAL, gcLl}, // [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK - {0x1C90, 0x1CBA, prAL, gcLu}, // [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN - {0x1CBD, 0x1CBF, prAL, gcLu}, // [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN - {0x1CC0, 0x1CC7, prAL, gcPo}, // [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA - {0x1CD0, 0x1CD2, prCM, gcMn}, // [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA - {0x1CD3, 0x1CD3, prAL, gcPo}, // VEDIC SIGN NIHSHVASA - {0x1CD4, 0x1CE0, prCM, gcMn}, // [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA - {0x1CE1, 0x1CE1, prCM, gcMc}, // VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA - {0x1CE2, 0x1CE8, prCM, gcMn}, // [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL - {0x1CE9, 0x1CEC, prAL, gcLo}, // [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL - {0x1CED, 0x1CED, prCM, gcMn}, // VEDIC SIGN TIRYAK - {0x1CEE, 0x1CF3, prAL, gcLo}, // [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA - {0x1CF4, 0x1CF4, prCM, gcMn}, // VEDIC TONE CANDRA ABOVE - {0x1CF5, 0x1CF6, prAL, gcLo}, // [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA - {0x1CF7, 0x1CF7, prCM, gcMc}, // VEDIC SIGN ATIKRAMA - {0x1CF8, 0x1CF9, prCM, gcMn}, // [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE - {0x1CFA, 0x1CFA, prAL, gcLo}, // VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA - {0x1D00, 0x1D2B, prAL, gcLl}, // [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL - {0x1D2C, 0x1D6A, prAL, gcLm}, // [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI - {0x1D6B, 0x1D77, prAL, gcLl}, // [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G - {0x1D78, 0x1D78, prAL, gcLm}, // MODIFIER LETTER CYRILLIC EN - {0x1D79, 0x1D7F, prAL, gcLl}, // [7] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER UPSILON WITH STROKE - {0x1D80, 0x1D9A, prAL, gcLl}, // [27] LATIN SMALL LETTER B WITH PALATAL HOOK..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK - {0x1D9B, 0x1DBF, prAL, gcLm}, // [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA - {0x1DC0, 0x1DCC, prCM, gcMn}, // [13] COMBINING DOTTED GRAVE ACCENT..COMBINING MACRON-BREVE - {0x1DCD, 0x1DCD, prGL, gcMn}, // COMBINING DOUBLE CIRCUMFLEX ABOVE - {0x1DCE, 0x1DFB, prCM, gcMn}, // [46] COMBINING OGONEK ABOVE..COMBINING DELETION MARK - {0x1DFC, 0x1DFC, prGL, gcMn}, // COMBINING DOUBLE INVERTED BREVE BELOW - {0x1DFD, 0x1DFF, prCM, gcMn}, // [3] COMBINING ALMOST EQUAL TO BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW - {0x1E00, 0x1EFF, prAL, gcLC}, // [256] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH LOOP - {0x1F00, 0x1F15, prAL, gcLC}, // [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA - {0x1F18, 0x1F1D, prAL, gcLu}, // [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA - {0x1F20, 0x1F45, prAL, gcLC}, // [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA - {0x1F48, 0x1F4D, prAL, gcLu}, // [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA - {0x1F50, 0x1F57, prAL, gcLl}, // [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI - {0x1F59, 0x1F59, prAL, gcLu}, // GREEK CAPITAL LETTER UPSILON WITH DASIA - {0x1F5B, 0x1F5B, prAL, gcLu}, // GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA - {0x1F5D, 0x1F5D, prAL, gcLu}, // GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA - {0x1F5F, 0x1F7D, prAL, gcLC}, // [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA - {0x1F80, 0x1FB4, prAL, gcLC}, // [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI - {0x1FB6, 0x1FBC, prAL, gcLC}, // [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI - {0x1FBD, 0x1FBD, prAL, gcSk}, // GREEK KORONIS - {0x1FBE, 0x1FBE, prAL, gcLl}, // GREEK PROSGEGRAMMENI - {0x1FBF, 0x1FC1, prAL, gcSk}, // [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI - {0x1FC2, 0x1FC4, prAL, gcLl}, // [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI - {0x1FC6, 0x1FCC, prAL, gcLC}, // [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI - {0x1FCD, 0x1FCF, prAL, gcSk}, // [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI - {0x1FD0, 0x1FD3, prAL, gcLl}, // [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA - {0x1FD6, 0x1FDB, prAL, gcLC}, // [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA - {0x1FDD, 0x1FDF, prAL, gcSk}, // [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI - {0x1FE0, 0x1FEC, prAL, gcLC}, // [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA - {0x1FED, 0x1FEF, prAL, gcSk}, // [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA - {0x1FF2, 0x1FF4, prAL, gcLl}, // [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI - {0x1FF6, 0x1FFC, prAL, gcLC}, // [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI - {0x1FFD, 0x1FFD, prBB, gcSk}, // GREEK OXIA - {0x1FFE, 0x1FFE, prAL, gcSk}, // GREEK DASIA - {0x2000, 0x2006, prBA, gcZs}, // [7] EN QUAD..SIX-PER-EM SPACE - {0x2007, 0x2007, prGL, gcZs}, // FIGURE SPACE - {0x2008, 0x200A, prBA, gcZs}, // [3] PUNCTUATION SPACE..HAIR SPACE - {0x200B, 0x200B, prZW, gcCf}, // ZERO WIDTH SPACE - {0x200C, 0x200C, prCM, gcCf}, // ZERO WIDTH NON-JOINER - {0x200D, 0x200D, prZWJ, gcCf}, // ZERO WIDTH JOINER - {0x200E, 0x200F, prCM, gcCf}, // [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK - {0x2010, 0x2010, prBA, gcPd}, // HYPHEN - {0x2011, 0x2011, prGL, gcPd}, // NON-BREAKING HYPHEN - {0x2012, 0x2013, prBA, gcPd}, // [2] FIGURE DASH..EN DASH - {0x2014, 0x2014, prB2, gcPd}, // EM DASH - {0x2015, 0x2015, prAI, gcPd}, // HORIZONTAL BAR - {0x2016, 0x2016, prAI, gcPo}, // DOUBLE VERTICAL LINE - {0x2017, 0x2017, prAL, gcPo}, // DOUBLE LOW LINE - {0x2018, 0x2018, prQU, gcPi}, // LEFT SINGLE QUOTATION MARK - {0x2019, 0x2019, prQU, gcPf}, // RIGHT SINGLE QUOTATION MARK - {0x201A, 0x201A, prOP, gcPs}, // SINGLE LOW-9 QUOTATION MARK - {0x201B, 0x201C, prQU, gcPi}, // [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK - {0x201D, 0x201D, prQU, gcPf}, // RIGHT DOUBLE QUOTATION MARK - {0x201E, 0x201E, prOP, gcPs}, // DOUBLE LOW-9 QUOTATION MARK - {0x201F, 0x201F, prQU, gcPi}, // DOUBLE HIGH-REVERSED-9 QUOTATION MARK - {0x2020, 0x2021, prAI, gcPo}, // [2] DAGGER..DOUBLE DAGGER - {0x2022, 0x2023, prAL, gcPo}, // [2] BULLET..TRIANGULAR BULLET - {0x2024, 0x2026, prIN, gcPo}, // [3] ONE DOT LEADER..HORIZONTAL ELLIPSIS - {0x2027, 0x2027, prBA, gcPo}, // HYPHENATION POINT - {0x2028, 0x2028, prBK, gcZl}, // LINE SEPARATOR - {0x2029, 0x2029, prBK, gcZp}, // PARAGRAPH SEPARATOR - {0x202A, 0x202E, prCM, gcCf}, // [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE - {0x202F, 0x202F, prGL, gcZs}, // NARROW NO-BREAK SPACE - {0x2030, 0x2037, prPO, gcPo}, // [8] PER MILLE SIGN..REVERSED TRIPLE PRIME - {0x2038, 0x2038, prAL, gcPo}, // CARET - {0x2039, 0x2039, prQU, gcPi}, // SINGLE LEFT-POINTING ANGLE QUOTATION MARK - {0x203A, 0x203A, prQU, gcPf}, // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - {0x203B, 0x203B, prAI, gcPo}, // REFERENCE MARK - {0x203C, 0x203D, prNS, gcPo}, // [2] DOUBLE EXCLAMATION MARK..INTERROBANG - {0x203E, 0x203E, prAL, gcPo}, // OVERLINE - {0x203F, 0x2040, prAL, gcPc}, // [2] UNDERTIE..CHARACTER TIE - {0x2041, 0x2043, prAL, gcPo}, // [3] CARET INSERTION POINT..HYPHEN BULLET - {0x2044, 0x2044, prIS, gcSm}, // FRACTION SLASH - {0x2045, 0x2045, prOP, gcPs}, // LEFT SQUARE BRACKET WITH QUILL - {0x2046, 0x2046, prCL, gcPe}, // RIGHT SQUARE BRACKET WITH QUILL - {0x2047, 0x2049, prNS, gcPo}, // [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK - {0x204A, 0x2051, prAL, gcPo}, // [8] TIRONIAN SIGN ET..TWO ASTERISKS ALIGNED VERTICALLY - {0x2052, 0x2052, prAL, gcSm}, // COMMERCIAL MINUS SIGN - {0x2053, 0x2053, prAL, gcPo}, // SWUNG DASH - {0x2054, 0x2054, prAL, gcPc}, // INVERTED UNDERTIE - {0x2055, 0x2055, prAL, gcPo}, // FLOWER PUNCTUATION MARK - {0x2056, 0x2056, prBA, gcPo}, // THREE DOT PUNCTUATION - {0x2057, 0x2057, prPO, gcPo}, // QUADRUPLE PRIME - {0x2058, 0x205B, prBA, gcPo}, // [4] FOUR DOT PUNCTUATION..FOUR DOT MARK - {0x205C, 0x205C, prAL, gcPo}, // DOTTED CROSS - {0x205D, 0x205E, prBA, gcPo}, // [2] TRICOLON..VERTICAL FOUR DOTS - {0x205F, 0x205F, prBA, gcZs}, // MEDIUM MATHEMATICAL SPACE - {0x2060, 0x2060, prWJ, gcCf}, // WORD JOINER - {0x2061, 0x2064, prAL, gcCf}, // [4] FUNCTION APPLICATION..INVISIBLE PLUS - {0x2066, 0x206F, prCM, gcCf}, // [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES - {0x2070, 0x2070, prAL, gcNo}, // SUPERSCRIPT ZERO - {0x2071, 0x2071, prAL, gcLm}, // SUPERSCRIPT LATIN SMALL LETTER I - {0x2074, 0x2074, prAI, gcNo}, // SUPERSCRIPT FOUR - {0x2075, 0x2079, prAL, gcNo}, // [5] SUPERSCRIPT FIVE..SUPERSCRIPT NINE - {0x207A, 0x207C, prAL, gcSm}, // [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN - {0x207D, 0x207D, prOP, gcPs}, // SUPERSCRIPT LEFT PARENTHESIS - {0x207E, 0x207E, prCL, gcPe}, // SUPERSCRIPT RIGHT PARENTHESIS - {0x207F, 0x207F, prAI, gcLm}, // SUPERSCRIPT LATIN SMALL LETTER N - {0x2080, 0x2080, prAL, gcNo}, // SUBSCRIPT ZERO - {0x2081, 0x2084, prAI, gcNo}, // [4] SUBSCRIPT ONE..SUBSCRIPT FOUR - {0x2085, 0x2089, prAL, gcNo}, // [5] SUBSCRIPT FIVE..SUBSCRIPT NINE - {0x208A, 0x208C, prAL, gcSm}, // [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN - {0x208D, 0x208D, prOP, gcPs}, // SUBSCRIPT LEFT PARENTHESIS - {0x208E, 0x208E, prCL, gcPe}, // SUBSCRIPT RIGHT PARENTHESIS - {0x2090, 0x209C, prAL, gcLm}, // [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T - {0x20A0, 0x20A6, prPR, gcSc}, // [7] EURO-CURRENCY SIGN..NAIRA SIGN - {0x20A7, 0x20A7, prPO, gcSc}, // PESETA SIGN - {0x20A8, 0x20B5, prPR, gcSc}, // [14] RUPEE SIGN..CEDI SIGN - {0x20B6, 0x20B6, prPO, gcSc}, // LIVRE TOURNOIS SIGN - {0x20B7, 0x20BA, prPR, gcSc}, // [4] SPESMILO SIGN..TURKISH LIRA SIGN - {0x20BB, 0x20BB, prPO, gcSc}, // NORDIC MARK SIGN - {0x20BC, 0x20BD, prPR, gcSc}, // [2] MANAT SIGN..RUBLE SIGN - {0x20BE, 0x20BE, prPO, gcSc}, // LARI SIGN - {0x20BF, 0x20BF, prPR, gcSc}, // BITCOIN SIGN - {0x20C0, 0x20C0, prPO, gcSc}, // SOM SIGN - {0x20C1, 0x20CF, prPR, gcCn}, // [15] .. - {0x20D0, 0x20DC, prCM, gcMn}, // [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE - {0x20DD, 0x20E0, prCM, gcMe}, // [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH - {0x20E1, 0x20E1, prCM, gcMn}, // COMBINING LEFT RIGHT ARROW ABOVE - {0x20E2, 0x20E4, prCM, gcMe}, // [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE - {0x20E5, 0x20F0, prCM, gcMn}, // [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE - {0x2100, 0x2101, prAL, gcSo}, // [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT - {0x2102, 0x2102, prAL, gcLu}, // DOUBLE-STRUCK CAPITAL C - {0x2103, 0x2103, prPO, gcSo}, // DEGREE CELSIUS - {0x2104, 0x2104, prAL, gcSo}, // CENTRE LINE SYMBOL - {0x2105, 0x2105, prAI, gcSo}, // CARE OF - {0x2106, 0x2106, prAL, gcSo}, // CADA UNA - {0x2107, 0x2107, prAL, gcLu}, // EULER CONSTANT - {0x2108, 0x2108, prAL, gcSo}, // SCRUPLE - {0x2109, 0x2109, prPO, gcSo}, // DEGREE FAHRENHEIT - {0x210A, 0x2112, prAL, gcLC}, // [9] SCRIPT SMALL G..SCRIPT CAPITAL L - {0x2113, 0x2113, prAI, gcLl}, // SCRIPT SMALL L - {0x2114, 0x2114, prAL, gcSo}, // L B BAR SYMBOL - {0x2115, 0x2115, prAL, gcLu}, // DOUBLE-STRUCK CAPITAL N - {0x2116, 0x2116, prPR, gcSo}, // NUMERO SIGN - {0x2117, 0x2117, prAL, gcSo}, // SOUND RECORDING COPYRIGHT - {0x2118, 0x2118, prAL, gcSm}, // SCRIPT CAPITAL P - {0x2119, 0x211D, prAL, gcLu}, // [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R - {0x211E, 0x2120, prAL, gcSo}, // [3] PRESCRIPTION TAKE..SERVICE MARK - {0x2121, 0x2122, prAI, gcSo}, // [2] TELEPHONE SIGN..TRADE MARK SIGN - {0x2123, 0x2123, prAL, gcSo}, // VERSICLE - {0x2124, 0x2124, prAL, gcLu}, // DOUBLE-STRUCK CAPITAL Z - {0x2125, 0x2125, prAL, gcSo}, // OUNCE SIGN - {0x2126, 0x2126, prAL, gcLu}, // OHM SIGN - {0x2127, 0x2127, prAL, gcSo}, // INVERTED OHM SIGN - {0x2128, 0x2128, prAL, gcLu}, // BLACK-LETTER CAPITAL Z - {0x2129, 0x2129, prAL, gcSo}, // TURNED GREEK SMALL LETTER IOTA - {0x212A, 0x212A, prAL, gcLu}, // KELVIN SIGN - {0x212B, 0x212B, prAI, gcLu}, // ANGSTROM SIGN - {0x212C, 0x212D, prAL, gcLu}, // [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C - {0x212E, 0x212E, prAL, gcSo}, // ESTIMATED SYMBOL - {0x212F, 0x2134, prAL, gcLC}, // [6] SCRIPT SMALL E..SCRIPT SMALL O - {0x2135, 0x2138, prAL, gcLo}, // [4] ALEF SYMBOL..DALET SYMBOL - {0x2139, 0x2139, prAL, gcLl}, // INFORMATION SOURCE - {0x213A, 0x213B, prAL, gcSo}, // [2] ROTATED CAPITAL Q..FACSIMILE SIGN - {0x213C, 0x213F, prAL, gcLC}, // [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI - {0x2140, 0x2144, prAL, gcSm}, // [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y - {0x2145, 0x2149, prAL, gcLC}, // [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J - {0x214A, 0x214A, prAL, gcSo}, // PROPERTY LINE - {0x214B, 0x214B, prAL, gcSm}, // TURNED AMPERSAND - {0x214C, 0x214D, prAL, gcSo}, // [2] PER SIGN..AKTIESELSKAB - {0x214E, 0x214E, prAL, gcLl}, // TURNED SMALL F - {0x214F, 0x214F, prAL, gcSo}, // SYMBOL FOR SAMARITAN SOURCE - {0x2150, 0x2153, prAL, gcNo}, // [4] VULGAR FRACTION ONE SEVENTH..VULGAR FRACTION ONE THIRD - {0x2154, 0x2155, prAI, gcNo}, // [2] VULGAR FRACTION TWO THIRDS..VULGAR FRACTION ONE FIFTH - {0x2156, 0x215A, prAL, gcNo}, // [5] VULGAR FRACTION TWO FIFTHS..VULGAR FRACTION FIVE SIXTHS - {0x215B, 0x215B, prAI, gcNo}, // VULGAR FRACTION ONE EIGHTH - {0x215C, 0x215D, prAL, gcNo}, // [2] VULGAR FRACTION THREE EIGHTHS..VULGAR FRACTION FIVE EIGHTHS - {0x215E, 0x215E, prAI, gcNo}, // VULGAR FRACTION SEVEN EIGHTHS - {0x215F, 0x215F, prAL, gcNo}, // FRACTION NUMERATOR ONE - {0x2160, 0x216B, prAI, gcNl}, // [12] ROMAN NUMERAL ONE..ROMAN NUMERAL TWELVE - {0x216C, 0x216F, prAL, gcNl}, // [4] ROMAN NUMERAL FIFTY..ROMAN NUMERAL ONE THOUSAND - {0x2170, 0x2179, prAI, gcNl}, // [10] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL TEN - {0x217A, 0x2182, prAL, gcNl}, // [9] SMALL ROMAN NUMERAL ELEVEN..ROMAN NUMERAL TEN THOUSAND - {0x2183, 0x2184, prAL, gcLC}, // [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C - {0x2185, 0x2188, prAL, gcNl}, // [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND - {0x2189, 0x2189, prAI, gcNo}, // VULGAR FRACTION ZERO THIRDS - {0x218A, 0x218B, prAL, gcSo}, // [2] TURNED DIGIT TWO..TURNED DIGIT THREE - {0x2190, 0x2194, prAI, gcSm}, // [5] LEFTWARDS ARROW..LEFT RIGHT ARROW - {0x2195, 0x2199, prAI, gcSo}, // [5] UP DOWN ARROW..SOUTH WEST ARROW - {0x219A, 0x219B, prAL, gcSm}, // [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE - {0x219C, 0x219F, prAL, gcSo}, // [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW - {0x21A0, 0x21A0, prAL, gcSm}, // RIGHTWARDS TWO HEADED ARROW - {0x21A1, 0x21A2, prAL, gcSo}, // [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL - {0x21A3, 0x21A3, prAL, gcSm}, // RIGHTWARDS ARROW WITH TAIL - {0x21A4, 0x21A5, prAL, gcSo}, // [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR - {0x21A6, 0x21A6, prAL, gcSm}, // RIGHTWARDS ARROW FROM BAR - {0x21A7, 0x21AD, prAL, gcSo}, // [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW - {0x21AE, 0x21AE, prAL, gcSm}, // LEFT RIGHT ARROW WITH STROKE - {0x21AF, 0x21CD, prAL, gcSo}, // [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE - {0x21CE, 0x21CF, prAL, gcSm}, // [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE - {0x21D0, 0x21D1, prAL, gcSo}, // [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW - {0x21D2, 0x21D2, prAI, gcSm}, // RIGHTWARDS DOUBLE ARROW - {0x21D3, 0x21D3, prAL, gcSo}, // DOWNWARDS DOUBLE ARROW - {0x21D4, 0x21D4, prAI, gcSm}, // LEFT RIGHT DOUBLE ARROW - {0x21D5, 0x21F3, prAL, gcSo}, // [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW - {0x21F4, 0x21FF, prAL, gcSm}, // [12] RIGHT ARROW WITH SMALL CIRCLE..LEFT RIGHT OPEN-HEADED ARROW - {0x2200, 0x2200, prAI, gcSm}, // FOR ALL - {0x2201, 0x2201, prAL, gcSm}, // COMPLEMENT - {0x2202, 0x2203, prAI, gcSm}, // [2] PARTIAL DIFFERENTIAL..THERE EXISTS - {0x2204, 0x2206, prAL, gcSm}, // [3] THERE DOES NOT EXIST..INCREMENT - {0x2207, 0x2208, prAI, gcSm}, // [2] NABLA..ELEMENT OF - {0x2209, 0x220A, prAL, gcSm}, // [2] NOT AN ELEMENT OF..SMALL ELEMENT OF - {0x220B, 0x220B, prAI, gcSm}, // CONTAINS AS MEMBER - {0x220C, 0x220E, prAL, gcSm}, // [3] DOES NOT CONTAIN AS MEMBER..END OF PROOF - {0x220F, 0x220F, prAI, gcSm}, // N-ARY PRODUCT - {0x2210, 0x2210, prAL, gcSm}, // N-ARY COPRODUCT - {0x2211, 0x2211, prAI, gcSm}, // N-ARY SUMMATION - {0x2212, 0x2213, prPR, gcSm}, // [2] MINUS SIGN..MINUS-OR-PLUS SIGN - {0x2214, 0x2214, prAL, gcSm}, // DOT PLUS - {0x2215, 0x2215, prAI, gcSm}, // DIVISION SLASH - {0x2216, 0x2219, prAL, gcSm}, // [4] SET MINUS..BULLET OPERATOR - {0x221A, 0x221A, prAI, gcSm}, // SQUARE ROOT - {0x221B, 0x221C, prAL, gcSm}, // [2] CUBE ROOT..FOURTH ROOT - {0x221D, 0x2220, prAI, gcSm}, // [4] PROPORTIONAL TO..ANGLE - {0x2221, 0x2222, prAL, gcSm}, // [2] MEASURED ANGLE..SPHERICAL ANGLE - {0x2223, 0x2223, prAI, gcSm}, // DIVIDES - {0x2224, 0x2224, prAL, gcSm}, // DOES NOT DIVIDE - {0x2225, 0x2225, prAI, gcSm}, // PARALLEL TO - {0x2226, 0x2226, prAL, gcSm}, // NOT PARALLEL TO - {0x2227, 0x222C, prAI, gcSm}, // [6] LOGICAL AND..DOUBLE INTEGRAL - {0x222D, 0x222D, prAL, gcSm}, // TRIPLE INTEGRAL - {0x222E, 0x222E, prAI, gcSm}, // CONTOUR INTEGRAL - {0x222F, 0x2233, prAL, gcSm}, // [5] SURFACE INTEGRAL..ANTICLOCKWISE CONTOUR INTEGRAL - {0x2234, 0x2237, prAI, gcSm}, // [4] THEREFORE..PROPORTION - {0x2238, 0x223B, prAL, gcSm}, // [4] DOT MINUS..HOMOTHETIC - {0x223C, 0x223D, prAI, gcSm}, // [2] TILDE OPERATOR..REVERSED TILDE - {0x223E, 0x2247, prAL, gcSm}, // [10] INVERTED LAZY S..NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO - {0x2248, 0x2248, prAI, gcSm}, // ALMOST EQUAL TO - {0x2249, 0x224B, prAL, gcSm}, // [3] NOT ALMOST EQUAL TO..TRIPLE TILDE - {0x224C, 0x224C, prAI, gcSm}, // ALL EQUAL TO - {0x224D, 0x2251, prAL, gcSm}, // [5] EQUIVALENT TO..GEOMETRICALLY EQUAL TO - {0x2252, 0x2252, prAI, gcSm}, // APPROXIMATELY EQUAL TO OR THE IMAGE OF - {0x2253, 0x225F, prAL, gcSm}, // [13] IMAGE OF OR APPROXIMATELY EQUAL TO..QUESTIONED EQUAL TO - {0x2260, 0x2261, prAI, gcSm}, // [2] NOT EQUAL TO..IDENTICAL TO - {0x2262, 0x2263, prAL, gcSm}, // [2] NOT IDENTICAL TO..STRICTLY EQUIVALENT TO - {0x2264, 0x2267, prAI, gcSm}, // [4] LESS-THAN OR EQUAL TO..GREATER-THAN OVER EQUAL TO - {0x2268, 0x2269, prAL, gcSm}, // [2] LESS-THAN BUT NOT EQUAL TO..GREATER-THAN BUT NOT EQUAL TO - {0x226A, 0x226B, prAI, gcSm}, // [2] MUCH LESS-THAN..MUCH GREATER-THAN - {0x226C, 0x226D, prAL, gcSm}, // [2] BETWEEN..NOT EQUIVALENT TO - {0x226E, 0x226F, prAI, gcSm}, // [2] NOT LESS-THAN..NOT GREATER-THAN - {0x2270, 0x2281, prAL, gcSm}, // [18] NEITHER LESS-THAN NOR EQUAL TO..DOES NOT SUCCEED - {0x2282, 0x2283, prAI, gcSm}, // [2] SUBSET OF..SUPERSET OF - {0x2284, 0x2285, prAL, gcSm}, // [2] NOT A SUBSET OF..NOT A SUPERSET OF - {0x2286, 0x2287, prAI, gcSm}, // [2] SUBSET OF OR EQUAL TO..SUPERSET OF OR EQUAL TO - {0x2288, 0x2294, prAL, gcSm}, // [13] NEITHER A SUBSET OF NOR EQUAL TO..SQUARE CUP - {0x2295, 0x2295, prAI, gcSm}, // CIRCLED PLUS - {0x2296, 0x2298, prAL, gcSm}, // [3] CIRCLED MINUS..CIRCLED DIVISION SLASH - {0x2299, 0x2299, prAI, gcSm}, // CIRCLED DOT OPERATOR - {0x229A, 0x22A4, prAL, gcSm}, // [11] CIRCLED RING OPERATOR..DOWN TACK - {0x22A5, 0x22A5, prAI, gcSm}, // UP TACK - {0x22A6, 0x22BE, prAL, gcSm}, // [25] ASSERTION..RIGHT ANGLE WITH ARC - {0x22BF, 0x22BF, prAI, gcSm}, // RIGHT TRIANGLE - {0x22C0, 0x22EE, prAL, gcSm}, // [47] N-ARY LOGICAL AND..VERTICAL ELLIPSIS - {0x22EF, 0x22EF, prIN, gcSm}, // MIDLINE HORIZONTAL ELLIPSIS - {0x22F0, 0x22FF, prAL, gcSm}, // [16] UP RIGHT DIAGONAL ELLIPSIS..Z NOTATION BAG MEMBERSHIP - {0x2300, 0x2307, prAL, gcSo}, // [8] DIAMETER SIGN..WAVY LINE - {0x2308, 0x2308, prOP, gcPs}, // LEFT CEILING - {0x2309, 0x2309, prCL, gcPe}, // RIGHT CEILING - {0x230A, 0x230A, prOP, gcPs}, // LEFT FLOOR - {0x230B, 0x230B, prCL, gcPe}, // RIGHT FLOOR - {0x230C, 0x2311, prAL, gcSo}, // [6] BOTTOM RIGHT CROP..SQUARE LOZENGE - {0x2312, 0x2312, prAI, gcSo}, // ARC - {0x2313, 0x2319, prAL, gcSo}, // [7] SEGMENT..TURNED NOT SIGN - {0x231A, 0x231B, prID, gcSo}, // [2] WATCH..HOURGLASS - {0x231C, 0x231F, prAL, gcSo}, // [4] TOP LEFT CORNER..BOTTOM RIGHT CORNER - {0x2320, 0x2321, prAL, gcSm}, // [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL - {0x2322, 0x2328, prAL, gcSo}, // [7] FROWN..KEYBOARD - {0x2329, 0x2329, prOP, gcPs}, // LEFT-POINTING ANGLE BRACKET - {0x232A, 0x232A, prCL, gcPe}, // RIGHT-POINTING ANGLE BRACKET - {0x232B, 0x237B, prAL, gcSo}, // [81] ERASE TO THE LEFT..NOT CHECK MARK - {0x237C, 0x237C, prAL, gcSm}, // RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW - {0x237D, 0x239A, prAL, gcSo}, // [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL - {0x239B, 0x23B3, prAL, gcSm}, // [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM - {0x23B4, 0x23DB, prAL, gcSo}, // [40] TOP SQUARE BRACKET..FUSE - {0x23DC, 0x23E1, prAL, gcSm}, // [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET - {0x23E2, 0x23EF, prAL, gcSo}, // [14] WHITE TRAPEZIUM..BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR - {0x23F0, 0x23F3, prID, gcSo}, // [4] ALARM CLOCK..HOURGLASS WITH FLOWING SAND - {0x23F4, 0x23FF, prAL, gcSo}, // [12] BLACK MEDIUM LEFT-POINTING TRIANGLE..OBSERVER EYE SYMBOL - {0x2400, 0x2426, prAL, gcSo}, // [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO - {0x2440, 0x244A, prAL, gcSo}, // [11] OCR HOOK..OCR DOUBLE BACKSLASH - {0x2460, 0x249B, prAI, gcNo}, // [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP - {0x249C, 0x24E9, prAI, gcSo}, // [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z - {0x24EA, 0x24FE, prAI, gcNo}, // [21] CIRCLED DIGIT ZERO..DOUBLE CIRCLED NUMBER TEN - {0x24FF, 0x24FF, prAL, gcNo}, // NEGATIVE CIRCLED DIGIT ZERO - {0x2500, 0x254B, prAI, gcSo}, // [76] BOX DRAWINGS LIGHT HORIZONTAL..BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL - {0x254C, 0x254F, prAL, gcSo}, // [4] BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL..BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL - {0x2550, 0x2574, prAI, gcSo}, // [37] BOX DRAWINGS DOUBLE HORIZONTAL..BOX DRAWINGS LIGHT LEFT - {0x2575, 0x257F, prAL, gcSo}, // [11] BOX DRAWINGS LIGHT UP..BOX DRAWINGS HEAVY UP AND LIGHT DOWN - {0x2580, 0x258F, prAI, gcSo}, // [16] UPPER HALF BLOCK..LEFT ONE EIGHTH BLOCK - {0x2590, 0x2591, prAL, gcSo}, // [2] RIGHT HALF BLOCK..LIGHT SHADE - {0x2592, 0x2595, prAI, gcSo}, // [4] MEDIUM SHADE..RIGHT ONE EIGHTH BLOCK - {0x2596, 0x259F, prAL, gcSo}, // [10] QUADRANT LOWER LEFT..QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT - {0x25A0, 0x25A1, prAI, gcSo}, // [2] BLACK SQUARE..WHITE SQUARE - {0x25A2, 0x25A2, prAL, gcSo}, // WHITE SQUARE WITH ROUNDED CORNERS - {0x25A3, 0x25A9, prAI, gcSo}, // [7] WHITE SQUARE CONTAINING BLACK SMALL SQUARE..SQUARE WITH DIAGONAL CROSSHATCH FILL - {0x25AA, 0x25B1, prAL, gcSo}, // [8] BLACK SMALL SQUARE..WHITE PARALLELOGRAM - {0x25B2, 0x25B3, prAI, gcSo}, // [2] BLACK UP-POINTING TRIANGLE..WHITE UP-POINTING TRIANGLE - {0x25B4, 0x25B5, prAL, gcSo}, // [2] BLACK UP-POINTING SMALL TRIANGLE..WHITE UP-POINTING SMALL TRIANGLE - {0x25B6, 0x25B6, prAI, gcSo}, // BLACK RIGHT-POINTING TRIANGLE - {0x25B7, 0x25B7, prAI, gcSm}, // WHITE RIGHT-POINTING TRIANGLE - {0x25B8, 0x25BB, prAL, gcSo}, // [4] BLACK RIGHT-POINTING SMALL TRIANGLE..WHITE RIGHT-POINTING POINTER - {0x25BC, 0x25BD, prAI, gcSo}, // [2] BLACK DOWN-POINTING TRIANGLE..WHITE DOWN-POINTING TRIANGLE - {0x25BE, 0x25BF, prAL, gcSo}, // [2] BLACK DOWN-POINTING SMALL TRIANGLE..WHITE DOWN-POINTING SMALL TRIANGLE - {0x25C0, 0x25C0, prAI, gcSo}, // BLACK LEFT-POINTING TRIANGLE - {0x25C1, 0x25C1, prAI, gcSm}, // WHITE LEFT-POINTING TRIANGLE - {0x25C2, 0x25C5, prAL, gcSo}, // [4] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE LEFT-POINTING POINTER - {0x25C6, 0x25C8, prAI, gcSo}, // [3] BLACK DIAMOND..WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND - {0x25C9, 0x25CA, prAL, gcSo}, // [2] FISHEYE..LOZENGE - {0x25CB, 0x25CB, prAI, gcSo}, // WHITE CIRCLE - {0x25CC, 0x25CD, prAL, gcSo}, // [2] DOTTED CIRCLE..CIRCLE WITH VERTICAL FILL - {0x25CE, 0x25D1, prAI, gcSo}, // [4] BULLSEYE..CIRCLE WITH RIGHT HALF BLACK - {0x25D2, 0x25E1, prAL, gcSo}, // [16] CIRCLE WITH LOWER HALF BLACK..LOWER HALF CIRCLE - {0x25E2, 0x25E5, prAI, gcSo}, // [4] BLACK LOWER RIGHT TRIANGLE..BLACK UPPER RIGHT TRIANGLE - {0x25E6, 0x25EE, prAL, gcSo}, // [9] WHITE BULLET..UP-POINTING TRIANGLE WITH RIGHT HALF BLACK - {0x25EF, 0x25EF, prAI, gcSo}, // LARGE CIRCLE - {0x25F0, 0x25F7, prAL, gcSo}, // [8] WHITE SQUARE WITH UPPER LEFT QUADRANT..WHITE CIRCLE WITH UPPER RIGHT QUADRANT - {0x25F8, 0x25FF, prAL, gcSm}, // [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE - {0x2600, 0x2603, prID, gcSo}, // [4] BLACK SUN WITH RAYS..SNOWMAN - {0x2604, 0x2604, prAL, gcSo}, // COMET - {0x2605, 0x2606, prAI, gcSo}, // [2] BLACK STAR..WHITE STAR - {0x2607, 0x2608, prAL, gcSo}, // [2] LIGHTNING..THUNDERSTORM - {0x2609, 0x2609, prAI, gcSo}, // SUN - {0x260A, 0x260D, prAL, gcSo}, // [4] ASCENDING NODE..OPPOSITION - {0x260E, 0x260F, prAI, gcSo}, // [2] BLACK TELEPHONE..WHITE TELEPHONE - {0x2610, 0x2613, prAL, gcSo}, // [4] BALLOT BOX..SALTIRE - {0x2614, 0x2615, prID, gcSo}, // [2] UMBRELLA WITH RAIN DROPS..HOT BEVERAGE - {0x2616, 0x2617, prAI, gcSo}, // [2] WHITE SHOGI PIECE..BLACK SHOGI PIECE - {0x2618, 0x2618, prID, gcSo}, // SHAMROCK - {0x2619, 0x2619, prAL, gcSo}, // REVERSED ROTATED FLORAL HEART BULLET - {0x261A, 0x261C, prID, gcSo}, // [3] BLACK LEFT POINTING INDEX..WHITE LEFT POINTING INDEX - {0x261D, 0x261D, prEB, gcSo}, // WHITE UP POINTING INDEX - {0x261E, 0x261F, prID, gcSo}, // [2] WHITE RIGHT POINTING INDEX..WHITE DOWN POINTING INDEX - {0x2620, 0x2638, prAL, gcSo}, // [25] SKULL AND CROSSBONES..WHEEL OF DHARMA - {0x2639, 0x263B, prID, gcSo}, // [3] WHITE FROWNING FACE..BLACK SMILING FACE - {0x263C, 0x263F, prAL, gcSo}, // [4] WHITE SUN WITH RAYS..MERCURY - {0x2640, 0x2640, prAI, gcSo}, // FEMALE SIGN - {0x2641, 0x2641, prAL, gcSo}, // EARTH - {0x2642, 0x2642, prAI, gcSo}, // MALE SIGN - {0x2643, 0x265F, prAL, gcSo}, // [29] JUPITER..BLACK CHESS PAWN - {0x2660, 0x2661, prAI, gcSo}, // [2] BLACK SPADE SUIT..WHITE HEART SUIT - {0x2662, 0x2662, prAL, gcSo}, // WHITE DIAMOND SUIT - {0x2663, 0x2665, prAI, gcSo}, // [3] BLACK CLUB SUIT..BLACK HEART SUIT - {0x2666, 0x2666, prAL, gcSo}, // BLACK DIAMOND SUIT - {0x2667, 0x2667, prAI, gcSo}, // WHITE CLUB SUIT - {0x2668, 0x2668, prID, gcSo}, // HOT SPRINGS - {0x2669, 0x266A, prAI, gcSo}, // [2] QUARTER NOTE..EIGHTH NOTE - {0x266B, 0x266B, prAL, gcSo}, // BEAMED EIGHTH NOTES - {0x266C, 0x266D, prAI, gcSo}, // [2] BEAMED SIXTEENTH NOTES..MUSIC FLAT SIGN - {0x266E, 0x266E, prAL, gcSo}, // MUSIC NATURAL SIGN - {0x266F, 0x266F, prAI, gcSm}, // MUSIC SHARP SIGN - {0x2670, 0x267E, prAL, gcSo}, // [15] WEST SYRIAC CROSS..PERMANENT PAPER SIGN - {0x267F, 0x267F, prID, gcSo}, // WHEELCHAIR SYMBOL - {0x2680, 0x269D, prAL, gcSo}, // [30] DIE FACE-1..OUTLINED WHITE STAR - {0x269E, 0x269F, prAI, gcSo}, // [2] THREE LINES CONVERGING RIGHT..THREE LINES CONVERGING LEFT - {0x26A0, 0x26BC, prAL, gcSo}, // [29] WARNING SIGN..SESQUIQUADRATE - {0x26BD, 0x26C8, prID, gcSo}, // [12] SOCCER BALL..THUNDER CLOUD AND RAIN - {0x26C9, 0x26CC, prAI, gcSo}, // [4] TURNED WHITE SHOGI PIECE..CROSSING LANES - {0x26CD, 0x26CD, prID, gcSo}, // DISABLED CAR - {0x26CE, 0x26CE, prAL, gcSo}, // OPHIUCHUS - {0x26CF, 0x26D1, prID, gcSo}, // [3] PICK..HELMET WITH WHITE CROSS - {0x26D2, 0x26D2, prAI, gcSo}, // CIRCLED CROSSING LANES - {0x26D3, 0x26D4, prID, gcSo}, // [2] CHAINS..NO ENTRY - {0x26D5, 0x26D7, prAI, gcSo}, // [3] ALTERNATE ONE-WAY LEFT WAY TRAFFIC..WHITE TWO-WAY LEFT WAY TRAFFIC - {0x26D8, 0x26D9, prID, gcSo}, // [2] BLACK LEFT LANE MERGE..WHITE LEFT LANE MERGE - {0x26DA, 0x26DB, prAI, gcSo}, // [2] DRIVE SLOW SIGN..HEAVY WHITE DOWN-POINTING TRIANGLE - {0x26DC, 0x26DC, prID, gcSo}, // LEFT CLOSED ENTRY - {0x26DD, 0x26DE, prAI, gcSo}, // [2] SQUARED SALTIRE..FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE - {0x26DF, 0x26E1, prID, gcSo}, // [3] BLACK TRUCK..RESTRICTED LEFT ENTRY-2 - {0x26E2, 0x26E2, prAL, gcSo}, // ASTRONOMICAL SYMBOL FOR URANUS - {0x26E3, 0x26E3, prAI, gcSo}, // HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE - {0x26E4, 0x26E7, prAL, gcSo}, // [4] PENTAGRAM..INVERTED PENTAGRAM - {0x26E8, 0x26E9, prAI, gcSo}, // [2] BLACK CROSS ON SHIELD..SHINTO SHRINE - {0x26EA, 0x26EA, prID, gcSo}, // CHURCH - {0x26EB, 0x26F0, prAI, gcSo}, // [6] CASTLE..MOUNTAIN - {0x26F1, 0x26F5, prID, gcSo}, // [5] UMBRELLA ON GROUND..SAILBOAT - {0x26F6, 0x26F6, prAI, gcSo}, // SQUARE FOUR CORNERS - {0x26F7, 0x26F8, prID, gcSo}, // [2] SKIER..ICE SKATE - {0x26F9, 0x26F9, prEB, gcSo}, // PERSON WITH BALL - {0x26FA, 0x26FA, prID, gcSo}, // TENT - {0x26FB, 0x26FC, prAI, gcSo}, // [2] JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL - {0x26FD, 0x26FF, prID, gcSo}, // [3] FUEL PUMP..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE - {0x2700, 0x2704, prID, gcSo}, // [5] BLACK SAFETY SCISSORS..WHITE SCISSORS - {0x2705, 0x2707, prAL, gcSo}, // [3] WHITE HEAVY CHECK MARK..TAPE DRIVE - {0x2708, 0x2709, prID, gcSo}, // [2] AIRPLANE..ENVELOPE - {0x270A, 0x270D, prEB, gcSo}, // [4] RAISED FIST..WRITING HAND - {0x270E, 0x2756, prAL, gcSo}, // [73] LOWER RIGHT PENCIL..BLACK DIAMOND MINUS WHITE X - {0x2757, 0x2757, prAI, gcSo}, // HEAVY EXCLAMATION MARK SYMBOL - {0x2758, 0x275A, prAL, gcSo}, // [3] LIGHT VERTICAL BAR..HEAVY VERTICAL BAR - {0x275B, 0x2760, prQU, gcSo}, // [6] HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT..HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT - {0x2761, 0x2761, prAL, gcSo}, // CURVED STEM PARAGRAPH SIGN ORNAMENT - {0x2762, 0x2763, prEX, gcSo}, // [2] HEAVY EXCLAMATION MARK ORNAMENT..HEAVY HEART EXCLAMATION MARK ORNAMENT - {0x2764, 0x2764, prID, gcSo}, // HEAVY BLACK HEART - {0x2765, 0x2767, prAL, gcSo}, // [3] ROTATED HEAVY BLACK HEART BULLET..ROTATED FLORAL HEART BULLET - {0x2768, 0x2768, prOP, gcPs}, // MEDIUM LEFT PARENTHESIS ORNAMENT - {0x2769, 0x2769, prCL, gcPe}, // MEDIUM RIGHT PARENTHESIS ORNAMENT - {0x276A, 0x276A, prOP, gcPs}, // MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT - {0x276B, 0x276B, prCL, gcPe}, // MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT - {0x276C, 0x276C, prOP, gcPs}, // MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT - {0x276D, 0x276D, prCL, gcPe}, // MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT - {0x276E, 0x276E, prOP, gcPs}, // HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT - {0x276F, 0x276F, prCL, gcPe}, // HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT - {0x2770, 0x2770, prOP, gcPs}, // HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT - {0x2771, 0x2771, prCL, gcPe}, // HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT - {0x2772, 0x2772, prOP, gcPs}, // LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT - {0x2773, 0x2773, prCL, gcPe}, // LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT - {0x2774, 0x2774, prOP, gcPs}, // MEDIUM LEFT CURLY BRACKET ORNAMENT - {0x2775, 0x2775, prCL, gcPe}, // MEDIUM RIGHT CURLY BRACKET ORNAMENT - {0x2776, 0x2793, prAI, gcNo}, // [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN - {0x2794, 0x27BF, prAL, gcSo}, // [44] HEAVY WIDE-HEADED RIGHTWARDS ARROW..DOUBLE CURLY LOOP - {0x27C0, 0x27C4, prAL, gcSm}, // [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET - {0x27C5, 0x27C5, prOP, gcPs}, // LEFT S-SHAPED BAG DELIMITER - {0x27C6, 0x27C6, prCL, gcPe}, // RIGHT S-SHAPED BAG DELIMITER - {0x27C7, 0x27E5, prAL, gcSm}, // [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK - {0x27E6, 0x27E6, prOP, gcPs}, // MATHEMATICAL LEFT WHITE SQUARE BRACKET - {0x27E7, 0x27E7, prCL, gcPe}, // MATHEMATICAL RIGHT WHITE SQUARE BRACKET - {0x27E8, 0x27E8, prOP, gcPs}, // MATHEMATICAL LEFT ANGLE BRACKET - {0x27E9, 0x27E9, prCL, gcPe}, // MATHEMATICAL RIGHT ANGLE BRACKET - {0x27EA, 0x27EA, prOP, gcPs}, // MATHEMATICAL LEFT DOUBLE ANGLE BRACKET - {0x27EB, 0x27EB, prCL, gcPe}, // MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET - {0x27EC, 0x27EC, prOP, gcPs}, // MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET - {0x27ED, 0x27ED, prCL, gcPe}, // MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET - {0x27EE, 0x27EE, prOP, gcPs}, // MATHEMATICAL LEFT FLATTENED PARENTHESIS - {0x27EF, 0x27EF, prCL, gcPe}, // MATHEMATICAL RIGHT FLATTENED PARENTHESIS - {0x27F0, 0x27FF, prAL, gcSm}, // [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW - {0x2800, 0x28FF, prAL, gcSo}, // [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678 - {0x2900, 0x297F, prAL, gcSm}, // [128] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..DOWN FISH TAIL - {0x2980, 0x2982, prAL, gcSm}, // [3] TRIPLE VERTICAL BAR DELIMITER..Z NOTATION TYPE COLON - {0x2983, 0x2983, prOP, gcPs}, // LEFT WHITE CURLY BRACKET - {0x2984, 0x2984, prCL, gcPe}, // RIGHT WHITE CURLY BRACKET - {0x2985, 0x2985, prOP, gcPs}, // LEFT WHITE PARENTHESIS - {0x2986, 0x2986, prCL, gcPe}, // RIGHT WHITE PARENTHESIS - {0x2987, 0x2987, prOP, gcPs}, // Z NOTATION LEFT IMAGE BRACKET - {0x2988, 0x2988, prCL, gcPe}, // Z NOTATION RIGHT IMAGE BRACKET - {0x2989, 0x2989, prOP, gcPs}, // Z NOTATION LEFT BINDING BRACKET - {0x298A, 0x298A, prCL, gcPe}, // Z NOTATION RIGHT BINDING BRACKET - {0x298B, 0x298B, prOP, gcPs}, // LEFT SQUARE BRACKET WITH UNDERBAR - {0x298C, 0x298C, prCL, gcPe}, // RIGHT SQUARE BRACKET WITH UNDERBAR - {0x298D, 0x298D, prOP, gcPs}, // LEFT SQUARE BRACKET WITH TICK IN TOP CORNER - {0x298E, 0x298E, prCL, gcPe}, // RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER - {0x298F, 0x298F, prOP, gcPs}, // LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER - {0x2990, 0x2990, prCL, gcPe}, // RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER - {0x2991, 0x2991, prOP, gcPs}, // LEFT ANGLE BRACKET WITH DOT - {0x2992, 0x2992, prCL, gcPe}, // RIGHT ANGLE BRACKET WITH DOT - {0x2993, 0x2993, prOP, gcPs}, // LEFT ARC LESS-THAN BRACKET - {0x2994, 0x2994, prCL, gcPe}, // RIGHT ARC GREATER-THAN BRACKET - {0x2995, 0x2995, prOP, gcPs}, // DOUBLE LEFT ARC GREATER-THAN BRACKET - {0x2996, 0x2996, prCL, gcPe}, // DOUBLE RIGHT ARC LESS-THAN BRACKET - {0x2997, 0x2997, prOP, gcPs}, // LEFT BLACK TORTOISE SHELL BRACKET - {0x2998, 0x2998, prCL, gcPe}, // RIGHT BLACK TORTOISE SHELL BRACKET - {0x2999, 0x29D7, prAL, gcSm}, // [63] DOTTED FENCE..BLACK HOURGLASS - {0x29D8, 0x29D8, prOP, gcPs}, // LEFT WIGGLY FENCE - {0x29D9, 0x29D9, prCL, gcPe}, // RIGHT WIGGLY FENCE - {0x29DA, 0x29DA, prOP, gcPs}, // LEFT DOUBLE WIGGLY FENCE - {0x29DB, 0x29DB, prCL, gcPe}, // RIGHT DOUBLE WIGGLY FENCE - {0x29DC, 0x29FB, prAL, gcSm}, // [32] INCOMPLETE INFINITY..TRIPLE PLUS - {0x29FC, 0x29FC, prOP, gcPs}, // LEFT-POINTING CURVED ANGLE BRACKET - {0x29FD, 0x29FD, prCL, gcPe}, // RIGHT-POINTING CURVED ANGLE BRACKET - {0x29FE, 0x29FF, prAL, gcSm}, // [2] TINY..MINY - {0x2A00, 0x2AFF, prAL, gcSm}, // [256] N-ARY CIRCLED DOT OPERATOR..N-ARY WHITE VERTICAL BAR - {0x2B00, 0x2B2F, prAL, gcSo}, // [48] NORTH EAST WHITE ARROW..WHITE VERTICAL ELLIPSE - {0x2B30, 0x2B44, prAL, gcSm}, // [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET - {0x2B45, 0x2B46, prAL, gcSo}, // [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW - {0x2B47, 0x2B4C, prAL, gcSm}, // [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR - {0x2B4D, 0x2B54, prAL, gcSo}, // [8] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..WHITE RIGHT-POINTING PENTAGON - {0x2B55, 0x2B59, prAI, gcSo}, // [5] HEAVY LARGE CIRCLE..HEAVY CIRCLED SALTIRE - {0x2B5A, 0x2B73, prAL, gcSo}, // [26] SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR - {0x2B76, 0x2B95, prAL, gcSo}, // [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW - {0x2B97, 0x2BFF, prAL, gcSo}, // [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL - {0x2C00, 0x2C5F, prAL, gcLC}, // [96] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI - {0x2C60, 0x2C7B, prAL, gcLC}, // [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E - {0x2C7C, 0x2C7D, prAL, gcLm}, // [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V - {0x2C7E, 0x2C7F, prAL, gcLu}, // [2] LATIN CAPITAL LETTER S WITH SWASH TAIL..LATIN CAPITAL LETTER Z WITH SWASH TAIL - {0x2C80, 0x2CE4, prAL, gcLC}, // [101] COPTIC CAPITAL LETTER ALFA..COPTIC SYMBOL KAI - {0x2CE5, 0x2CEA, prAL, gcSo}, // [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA - {0x2CEB, 0x2CEE, prAL, gcLC}, // [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA - {0x2CEF, 0x2CF1, prCM, gcMn}, // [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS - {0x2CF2, 0x2CF3, prAL, gcLC}, // [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI - {0x2CF9, 0x2CF9, prEX, gcPo}, // COPTIC OLD NUBIAN FULL STOP - {0x2CFA, 0x2CFC, prBA, gcPo}, // [3] COPTIC OLD NUBIAN DIRECT QUESTION MARK..COPTIC OLD NUBIAN VERSE DIVIDER - {0x2CFD, 0x2CFD, prAL, gcNo}, // COPTIC FRACTION ONE HALF - {0x2CFE, 0x2CFE, prEX, gcPo}, // COPTIC FULL STOP - {0x2CFF, 0x2CFF, prBA, gcPo}, // COPTIC MORPHOLOGICAL DIVIDER - {0x2D00, 0x2D25, prAL, gcLl}, // [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE - {0x2D27, 0x2D27, prAL, gcLl}, // GEORGIAN SMALL LETTER YN - {0x2D2D, 0x2D2D, prAL, gcLl}, // GEORGIAN SMALL LETTER AEN - {0x2D30, 0x2D67, prAL, gcLo}, // [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO - {0x2D6F, 0x2D6F, prAL, gcLm}, // TIFINAGH MODIFIER LETTER LABIALIZATION MARK - {0x2D70, 0x2D70, prBA, gcPo}, // TIFINAGH SEPARATOR MARK - {0x2D7F, 0x2D7F, prCM, gcMn}, // TIFINAGH CONSONANT JOINER - {0x2D80, 0x2D96, prAL, gcLo}, // [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE - {0x2DA0, 0x2DA6, prAL, gcLo}, // [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO - {0x2DA8, 0x2DAE, prAL, gcLo}, // [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO - {0x2DB0, 0x2DB6, prAL, gcLo}, // [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO - {0x2DB8, 0x2DBE, prAL, gcLo}, // [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO - {0x2DC0, 0x2DC6, prAL, gcLo}, // [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO - {0x2DC8, 0x2DCE, prAL, gcLo}, // [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO - {0x2DD0, 0x2DD6, prAL, gcLo}, // [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO - {0x2DD8, 0x2DDE, prAL, gcLo}, // [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO - {0x2DE0, 0x2DFF, prCM, gcMn}, // [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS - {0x2E00, 0x2E01, prQU, gcPo}, // [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER - {0x2E02, 0x2E02, prQU, gcPi}, // LEFT SUBSTITUTION BRACKET - {0x2E03, 0x2E03, prQU, gcPf}, // RIGHT SUBSTITUTION BRACKET - {0x2E04, 0x2E04, prQU, gcPi}, // LEFT DOTTED SUBSTITUTION BRACKET - {0x2E05, 0x2E05, prQU, gcPf}, // RIGHT DOTTED SUBSTITUTION BRACKET - {0x2E06, 0x2E08, prQU, gcPo}, // [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER - {0x2E09, 0x2E09, prQU, gcPi}, // LEFT TRANSPOSITION BRACKET - {0x2E0A, 0x2E0A, prQU, gcPf}, // RIGHT TRANSPOSITION BRACKET - {0x2E0B, 0x2E0B, prQU, gcPo}, // RAISED SQUARE - {0x2E0C, 0x2E0C, prQU, gcPi}, // LEFT RAISED OMISSION BRACKET - {0x2E0D, 0x2E0D, prQU, gcPf}, // RIGHT RAISED OMISSION BRACKET - {0x2E0E, 0x2E15, prBA, gcPo}, // [8] EDITORIAL CORONIS..UPWARDS ANCORA - {0x2E16, 0x2E16, prAL, gcPo}, // DOTTED RIGHT-POINTING ANGLE - {0x2E17, 0x2E17, prBA, gcPd}, // DOUBLE OBLIQUE HYPHEN - {0x2E18, 0x2E18, prOP, gcPo}, // INVERTED INTERROBANG - {0x2E19, 0x2E19, prBA, gcPo}, // PALM BRANCH - {0x2E1A, 0x2E1A, prAL, gcPd}, // HYPHEN WITH DIAERESIS - {0x2E1B, 0x2E1B, prAL, gcPo}, // TILDE WITH RING ABOVE - {0x2E1C, 0x2E1C, prQU, gcPi}, // LEFT LOW PARAPHRASE BRACKET - {0x2E1D, 0x2E1D, prQU, gcPf}, // RIGHT LOW PARAPHRASE BRACKET - {0x2E1E, 0x2E1F, prAL, gcPo}, // [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW - {0x2E20, 0x2E20, prQU, gcPi}, // LEFT VERTICAL BAR WITH QUILL - {0x2E21, 0x2E21, prQU, gcPf}, // RIGHT VERTICAL BAR WITH QUILL - {0x2E22, 0x2E22, prOP, gcPs}, // TOP LEFT HALF BRACKET - {0x2E23, 0x2E23, prCL, gcPe}, // TOP RIGHT HALF BRACKET - {0x2E24, 0x2E24, prOP, gcPs}, // BOTTOM LEFT HALF BRACKET - {0x2E25, 0x2E25, prCL, gcPe}, // BOTTOM RIGHT HALF BRACKET - {0x2E26, 0x2E26, prOP, gcPs}, // LEFT SIDEWAYS U BRACKET - {0x2E27, 0x2E27, prCL, gcPe}, // RIGHT SIDEWAYS U BRACKET - {0x2E28, 0x2E28, prOP, gcPs}, // LEFT DOUBLE PARENTHESIS - {0x2E29, 0x2E29, prCL, gcPe}, // RIGHT DOUBLE PARENTHESIS - {0x2E2A, 0x2E2D, prBA, gcPo}, // [4] TWO DOTS OVER ONE DOT PUNCTUATION..FIVE DOT MARK - {0x2E2E, 0x2E2E, prEX, gcPo}, // REVERSED QUESTION MARK - {0x2E2F, 0x2E2F, prAL, gcLm}, // VERTICAL TILDE - {0x2E30, 0x2E31, prBA, gcPo}, // [2] RING POINT..WORD SEPARATOR MIDDLE DOT - {0x2E32, 0x2E32, prAL, gcPo}, // TURNED COMMA - {0x2E33, 0x2E34, prBA, gcPo}, // [2] RAISED DOT..RAISED COMMA - {0x2E35, 0x2E39, prAL, gcPo}, // [5] TURNED SEMICOLON..TOP HALF SECTION SIGN - {0x2E3A, 0x2E3B, prB2, gcPd}, // [2] TWO-EM DASH..THREE-EM DASH - {0x2E3C, 0x2E3E, prBA, gcPo}, // [3] STENOGRAPHIC FULL STOP..WIGGLY VERTICAL LINE - {0x2E3F, 0x2E3F, prAL, gcPo}, // CAPITULUM - {0x2E40, 0x2E40, prBA, gcPd}, // DOUBLE HYPHEN - {0x2E41, 0x2E41, prBA, gcPo}, // REVERSED COMMA - {0x2E42, 0x2E42, prOP, gcPs}, // DOUBLE LOW-REVERSED-9 QUOTATION MARK - {0x2E43, 0x2E4A, prBA, gcPo}, // [8] DASH WITH LEFT UPTURN..DOTTED SOLIDUS - {0x2E4B, 0x2E4B, prAL, gcPo}, // TRIPLE DAGGER - {0x2E4C, 0x2E4C, prBA, gcPo}, // MEDIEVAL COMMA - {0x2E4D, 0x2E4D, prAL, gcPo}, // PARAGRAPHUS MARK - {0x2E4E, 0x2E4F, prBA, gcPo}, // [2] PUNCTUS ELEVATUS MARK..CORNISH VERSE DIVIDER - {0x2E50, 0x2E51, prAL, gcSo}, // [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR - {0x2E52, 0x2E52, prAL, gcPo}, // TIRONIAN SIGN CAPITAL ET - {0x2E53, 0x2E54, prEX, gcPo}, // [2] MEDIEVAL EXCLAMATION MARK..MEDIEVAL QUESTION MARK - {0x2E55, 0x2E55, prOP, gcPs}, // LEFT SQUARE BRACKET WITH STROKE - {0x2E56, 0x2E56, prCL, gcPe}, // RIGHT SQUARE BRACKET WITH STROKE - {0x2E57, 0x2E57, prOP, gcPs}, // LEFT SQUARE BRACKET WITH DOUBLE STROKE - {0x2E58, 0x2E58, prCL, gcPe}, // RIGHT SQUARE BRACKET WITH DOUBLE STROKE - {0x2E59, 0x2E59, prOP, gcPs}, // TOP HALF LEFT PARENTHESIS - {0x2E5A, 0x2E5A, prCL, gcPe}, // TOP HALF RIGHT PARENTHESIS - {0x2E5B, 0x2E5B, prOP, gcPs}, // BOTTOM HALF LEFT PARENTHESIS - {0x2E5C, 0x2E5C, prCL, gcPe}, // BOTTOM HALF RIGHT PARENTHESIS - {0x2E5D, 0x2E5D, prBA, gcPd}, // OBLIQUE HYPHEN - {0x2E80, 0x2E99, prID, gcSo}, // [26] CJK RADICAL REPEAT..CJK RADICAL RAP - {0x2E9B, 0x2EF3, prID, gcSo}, // [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE - {0x2F00, 0x2FD5, prID, gcSo}, // [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE - {0x2FF0, 0x2FFB, prID, gcSo}, // [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID - {0x3000, 0x3000, prBA, gcZs}, // IDEOGRAPHIC SPACE - {0x3001, 0x3002, prCL, gcPo}, // [2] IDEOGRAPHIC COMMA..IDEOGRAPHIC FULL STOP - {0x3003, 0x3003, prID, gcPo}, // DITTO MARK - {0x3004, 0x3004, prID, gcSo}, // JAPANESE INDUSTRIAL STANDARD SYMBOL - {0x3005, 0x3005, prNS, gcLm}, // IDEOGRAPHIC ITERATION MARK - {0x3006, 0x3006, prID, gcLo}, // IDEOGRAPHIC CLOSING MARK - {0x3007, 0x3007, prID, gcNl}, // IDEOGRAPHIC NUMBER ZERO - {0x3008, 0x3008, prOP, gcPs}, // LEFT ANGLE BRACKET - {0x3009, 0x3009, prCL, gcPe}, // RIGHT ANGLE BRACKET - {0x300A, 0x300A, prOP, gcPs}, // LEFT DOUBLE ANGLE BRACKET - {0x300B, 0x300B, prCL, gcPe}, // RIGHT DOUBLE ANGLE BRACKET - {0x300C, 0x300C, prOP, gcPs}, // LEFT CORNER BRACKET - {0x300D, 0x300D, prCL, gcPe}, // RIGHT CORNER BRACKET - {0x300E, 0x300E, prOP, gcPs}, // LEFT WHITE CORNER BRACKET - {0x300F, 0x300F, prCL, gcPe}, // RIGHT WHITE CORNER BRACKET - {0x3010, 0x3010, prOP, gcPs}, // LEFT BLACK LENTICULAR BRACKET - {0x3011, 0x3011, prCL, gcPe}, // RIGHT BLACK LENTICULAR BRACKET - {0x3012, 0x3013, prID, gcSo}, // [2] POSTAL MARK..GETA MARK - {0x3014, 0x3014, prOP, gcPs}, // LEFT TORTOISE SHELL BRACKET - {0x3015, 0x3015, prCL, gcPe}, // RIGHT TORTOISE SHELL BRACKET - {0x3016, 0x3016, prOP, gcPs}, // LEFT WHITE LENTICULAR BRACKET - {0x3017, 0x3017, prCL, gcPe}, // RIGHT WHITE LENTICULAR BRACKET - {0x3018, 0x3018, prOP, gcPs}, // LEFT WHITE TORTOISE SHELL BRACKET - {0x3019, 0x3019, prCL, gcPe}, // RIGHT WHITE TORTOISE SHELL BRACKET - {0x301A, 0x301A, prOP, gcPs}, // LEFT WHITE SQUARE BRACKET - {0x301B, 0x301B, prCL, gcPe}, // RIGHT WHITE SQUARE BRACKET - {0x301C, 0x301C, prNS, gcPd}, // WAVE DASH - {0x301D, 0x301D, prOP, gcPs}, // REVERSED DOUBLE PRIME QUOTATION MARK - {0x301E, 0x301F, prCL, gcPe}, // [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK - {0x3020, 0x3020, prID, gcSo}, // POSTAL MARK FACE - {0x3021, 0x3029, prID, gcNl}, // [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE - {0x302A, 0x302D, prCM, gcMn}, // [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK - {0x302E, 0x302F, prCM, gcMc}, // [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK - {0x3030, 0x3030, prID, gcPd}, // WAVY DASH - {0x3031, 0x3034, prID, gcLm}, // [4] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF - {0x3035, 0x3035, prCM, gcLm}, // VERTICAL KANA REPEAT MARK LOWER HALF - {0x3036, 0x3037, prID, gcSo}, // [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL - {0x3038, 0x303A, prID, gcNl}, // [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY - {0x303B, 0x303B, prNS, gcLm}, // VERTICAL IDEOGRAPHIC ITERATION MARK - {0x303C, 0x303C, prNS, gcLo}, // MASU MARK - {0x303D, 0x303D, prID, gcPo}, // PART ALTERNATION MARK - {0x303E, 0x303F, prID, gcSo}, // [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE - {0x3041, 0x3041, prCJ, gcLo}, // HIRAGANA LETTER SMALL A - {0x3042, 0x3042, prID, gcLo}, // HIRAGANA LETTER A - {0x3043, 0x3043, prCJ, gcLo}, // HIRAGANA LETTER SMALL I - {0x3044, 0x3044, prID, gcLo}, // HIRAGANA LETTER I - {0x3045, 0x3045, prCJ, gcLo}, // HIRAGANA LETTER SMALL U - {0x3046, 0x3046, prID, gcLo}, // HIRAGANA LETTER U - {0x3047, 0x3047, prCJ, gcLo}, // HIRAGANA LETTER SMALL E - {0x3048, 0x3048, prID, gcLo}, // HIRAGANA LETTER E - {0x3049, 0x3049, prCJ, gcLo}, // HIRAGANA LETTER SMALL O - {0x304A, 0x3062, prID, gcLo}, // [25] HIRAGANA LETTER O..HIRAGANA LETTER DI - {0x3063, 0x3063, prCJ, gcLo}, // HIRAGANA LETTER SMALL TU - {0x3064, 0x3082, prID, gcLo}, // [31] HIRAGANA LETTER TU..HIRAGANA LETTER MO - {0x3083, 0x3083, prCJ, gcLo}, // HIRAGANA LETTER SMALL YA - {0x3084, 0x3084, prID, gcLo}, // HIRAGANA LETTER YA - {0x3085, 0x3085, prCJ, gcLo}, // HIRAGANA LETTER SMALL YU - {0x3086, 0x3086, prID, gcLo}, // HIRAGANA LETTER YU - {0x3087, 0x3087, prCJ, gcLo}, // HIRAGANA LETTER SMALL YO - {0x3088, 0x308D, prID, gcLo}, // [6] HIRAGANA LETTER YO..HIRAGANA LETTER RO - {0x308E, 0x308E, prCJ, gcLo}, // HIRAGANA LETTER SMALL WA - {0x308F, 0x3094, prID, gcLo}, // [6] HIRAGANA LETTER WA..HIRAGANA LETTER VU - {0x3095, 0x3096, prCJ, gcLo}, // [2] HIRAGANA LETTER SMALL KA..HIRAGANA LETTER SMALL KE - {0x3099, 0x309A, prCM, gcMn}, // [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK - {0x309B, 0x309C, prNS, gcSk}, // [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK - {0x309D, 0x309E, prNS, gcLm}, // [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK - {0x309F, 0x309F, prID, gcLo}, // HIRAGANA DIGRAPH YORI - {0x30A0, 0x30A0, prNS, gcPd}, // KATAKANA-HIRAGANA DOUBLE HYPHEN - {0x30A1, 0x30A1, prCJ, gcLo}, // KATAKANA LETTER SMALL A - {0x30A2, 0x30A2, prID, gcLo}, // KATAKANA LETTER A - {0x30A3, 0x30A3, prCJ, gcLo}, // KATAKANA LETTER SMALL I - {0x30A4, 0x30A4, prID, gcLo}, // KATAKANA LETTER I - {0x30A5, 0x30A5, prCJ, gcLo}, // KATAKANA LETTER SMALL U - {0x30A6, 0x30A6, prID, gcLo}, // KATAKANA LETTER U - {0x30A7, 0x30A7, prCJ, gcLo}, // KATAKANA LETTER SMALL E - {0x30A8, 0x30A8, prID, gcLo}, // KATAKANA LETTER E - {0x30A9, 0x30A9, prCJ, gcLo}, // KATAKANA LETTER SMALL O - {0x30AA, 0x30C2, prID, gcLo}, // [25] KATAKANA LETTER O..KATAKANA LETTER DI - {0x30C3, 0x30C3, prCJ, gcLo}, // KATAKANA LETTER SMALL TU - {0x30C4, 0x30E2, prID, gcLo}, // [31] KATAKANA LETTER TU..KATAKANA LETTER MO - {0x30E3, 0x30E3, prCJ, gcLo}, // KATAKANA LETTER SMALL YA - {0x30E4, 0x30E4, prID, gcLo}, // KATAKANA LETTER YA - {0x30E5, 0x30E5, prCJ, gcLo}, // KATAKANA LETTER SMALL YU - {0x30E6, 0x30E6, prID, gcLo}, // KATAKANA LETTER YU - {0x30E7, 0x30E7, prCJ, gcLo}, // KATAKANA LETTER SMALL YO - {0x30E8, 0x30ED, prID, gcLo}, // [6] KATAKANA LETTER YO..KATAKANA LETTER RO - {0x30EE, 0x30EE, prCJ, gcLo}, // KATAKANA LETTER SMALL WA - {0x30EF, 0x30F4, prID, gcLo}, // [6] KATAKANA LETTER WA..KATAKANA LETTER VU - {0x30F5, 0x30F6, prCJ, gcLo}, // [2] KATAKANA LETTER SMALL KA..KATAKANA LETTER SMALL KE - {0x30F7, 0x30FA, prID, gcLo}, // [4] KATAKANA LETTER VA..KATAKANA LETTER VO - {0x30FB, 0x30FB, prNS, gcPo}, // KATAKANA MIDDLE DOT - {0x30FC, 0x30FC, prCJ, gcLm}, // KATAKANA-HIRAGANA PROLONGED SOUND MARK - {0x30FD, 0x30FE, prNS, gcLm}, // [2] KATAKANA ITERATION MARK..KATAKANA VOICED ITERATION MARK - {0x30FF, 0x30FF, prID, gcLo}, // KATAKANA DIGRAPH KOTO - {0x3105, 0x312F, prID, gcLo}, // [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN - {0x3131, 0x318E, prID, gcLo}, // [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE - {0x3190, 0x3191, prID, gcSo}, // [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK - {0x3192, 0x3195, prID, gcNo}, // [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK - {0x3196, 0x319F, prID, gcSo}, // [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK - {0x31A0, 0x31BF, prID, gcLo}, // [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH - {0x31C0, 0x31E3, prID, gcSo}, // [36] CJK STROKE T..CJK STROKE Q - {0x31F0, 0x31FF, prCJ, gcLo}, // [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO - {0x3200, 0x321E, prID, gcSo}, // [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU - {0x3220, 0x3229, prID, gcNo}, // [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN - {0x322A, 0x3247, prID, gcSo}, // [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO - {0x3248, 0x324F, prAI, gcNo}, // [8] CIRCLED NUMBER TEN ON BLACK SQUARE..CIRCLED NUMBER EIGHTY ON BLACK SQUARE - {0x3250, 0x3250, prID, gcSo}, // PARTNERSHIP SIGN - {0x3251, 0x325F, prID, gcNo}, // [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE - {0x3260, 0x327F, prID, gcSo}, // [32] CIRCLED HANGUL KIYEOK..KOREAN STANDARD SYMBOL - {0x3280, 0x3289, prID, gcNo}, // [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN - {0x328A, 0x32B0, prID, gcSo}, // [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT - {0x32B1, 0x32BF, prID, gcNo}, // [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY - {0x32C0, 0x32FF, prID, gcSo}, // [64] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE ERA NAME REIWA - {0x3300, 0x33FF, prID, gcSo}, // [256] SQUARE APAATO..SQUARE GAL - {0x3400, 0x4DBF, prID, gcLo}, // [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF - {0x4DC0, 0x4DFF, prAL, gcSo}, // [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION - {0x4E00, 0x9FFF, prID, gcLo}, // [20992] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFF - {0xA000, 0xA014, prID, gcLo}, // [21] YI SYLLABLE IT..YI SYLLABLE E - {0xA015, 0xA015, prNS, gcLm}, // YI SYLLABLE WU - {0xA016, 0xA48C, prID, gcLo}, // [1143] YI SYLLABLE BIT..YI SYLLABLE YYR - {0xA490, 0xA4C6, prID, gcSo}, // [55] YI RADICAL QOT..YI RADICAL KE - {0xA4D0, 0xA4F7, prAL, gcLo}, // [40] LISU LETTER BA..LISU LETTER OE - {0xA4F8, 0xA4FD, prAL, gcLm}, // [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU - {0xA4FE, 0xA4FF, prBA, gcPo}, // [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP - {0xA500, 0xA60B, prAL, gcLo}, // [268] VAI SYLLABLE EE..VAI SYLLABLE NG - {0xA60C, 0xA60C, prAL, gcLm}, // VAI SYLLABLE LENGTHENER - {0xA60D, 0xA60D, prBA, gcPo}, // VAI COMMA - {0xA60E, 0xA60E, prEX, gcPo}, // VAI FULL STOP - {0xA60F, 0xA60F, prBA, gcPo}, // VAI QUESTION MARK - {0xA610, 0xA61F, prAL, gcLo}, // [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG - {0xA620, 0xA629, prNU, gcNd}, // [10] VAI DIGIT ZERO..VAI DIGIT NINE - {0xA62A, 0xA62B, prAL, gcLo}, // [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO - {0xA640, 0xA66D, prAL, gcLC}, // [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O - {0xA66E, 0xA66E, prAL, gcLo}, // CYRILLIC LETTER MULTIOCULAR O - {0xA66F, 0xA66F, prCM, gcMn}, // COMBINING CYRILLIC VZMET - {0xA670, 0xA672, prCM, gcMe}, // [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN - {0xA673, 0xA673, prAL, gcPo}, // SLAVONIC ASTERISK - {0xA674, 0xA67D, prCM, gcMn}, // [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK - {0xA67E, 0xA67E, prAL, gcPo}, // CYRILLIC KAVYKA - {0xA67F, 0xA67F, prAL, gcLm}, // CYRILLIC PAYEROK - {0xA680, 0xA69B, prAL, gcLC}, // [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O - {0xA69C, 0xA69D, prAL, gcLm}, // [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN - {0xA69E, 0xA69F, prCM, gcMn}, // [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E - {0xA6A0, 0xA6E5, prAL, gcLo}, // [70] BAMUM LETTER A..BAMUM LETTER KI - {0xA6E6, 0xA6EF, prAL, gcNl}, // [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM - {0xA6F0, 0xA6F1, prCM, gcMn}, // [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS - {0xA6F2, 0xA6F2, prAL, gcPo}, // BAMUM NJAEMLI - {0xA6F3, 0xA6F7, prBA, gcPo}, // [5] BAMUM FULL STOP..BAMUM QUESTION MARK - {0xA700, 0xA716, prAL, gcSk}, // [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR - {0xA717, 0xA71F, prAL, gcLm}, // [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK - {0xA720, 0xA721, prAL, gcSk}, // [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE - {0xA722, 0xA76F, prAL, gcLC}, // [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON - {0xA770, 0xA770, prAL, gcLm}, // MODIFIER LETTER US - {0xA771, 0xA787, prAL, gcLC}, // [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T - {0xA788, 0xA788, prAL, gcLm}, // MODIFIER LETTER LOW CIRCUMFLEX ACCENT - {0xA789, 0xA78A, prAL, gcSk}, // [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN - {0xA78B, 0xA78E, prAL, gcLC}, // [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT - {0xA78F, 0xA78F, prAL, gcLo}, // LATIN LETTER SINOLOGICAL DOT - {0xA790, 0xA7CA, prAL, gcLC}, // [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY - {0xA7D0, 0xA7D1, prAL, gcLC}, // [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G - {0xA7D3, 0xA7D3, prAL, gcLl}, // LATIN SMALL LETTER DOUBLE THORN - {0xA7D5, 0xA7D9, prAL, gcLC}, // [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S - {0xA7F2, 0xA7F4, prAL, gcLm}, // [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q - {0xA7F5, 0xA7F6, prAL, gcLC}, // [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H - {0xA7F7, 0xA7F7, prAL, gcLo}, // LATIN EPIGRAPHIC LETTER SIDEWAYS I - {0xA7F8, 0xA7F9, prAL, gcLm}, // [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE - {0xA7FA, 0xA7FA, prAL, gcLl}, // LATIN LETTER SMALL CAPITAL TURNED M - {0xA7FB, 0xA7FF, prAL, gcLo}, // [5] LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGRAPHIC LETTER ARCHAIC M - {0xA800, 0xA801, prAL, gcLo}, // [2] SYLOTI NAGRI LETTER A..SYLOTI NAGRI LETTER I - {0xA802, 0xA802, prCM, gcMn}, // SYLOTI NAGRI SIGN DVISVARA - {0xA803, 0xA805, prAL, gcLo}, // [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O - {0xA806, 0xA806, prCM, gcMn}, // SYLOTI NAGRI SIGN HASANTA - {0xA807, 0xA80A, prAL, gcLo}, // [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO - {0xA80B, 0xA80B, prCM, gcMn}, // SYLOTI NAGRI SIGN ANUSVARA - {0xA80C, 0xA822, prAL, gcLo}, // [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO - {0xA823, 0xA824, prCM, gcMc}, // [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I - {0xA825, 0xA826, prCM, gcMn}, // [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E - {0xA827, 0xA827, prCM, gcMc}, // SYLOTI NAGRI VOWEL SIGN OO - {0xA828, 0xA82B, prAL, gcSo}, // [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4 - {0xA82C, 0xA82C, prCM, gcMn}, // SYLOTI NAGRI SIGN ALTERNATE HASANTA - {0xA830, 0xA835, prAL, gcNo}, // [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS - {0xA836, 0xA837, prAL, gcSo}, // [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK - {0xA838, 0xA838, prPO, gcSc}, // NORTH INDIC RUPEE MARK - {0xA839, 0xA839, prAL, gcSo}, // NORTH INDIC QUANTITY MARK - {0xA840, 0xA873, prAL, gcLo}, // [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU - {0xA874, 0xA875, prBB, gcPo}, // [2] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA DOUBLE HEAD MARK - {0xA876, 0xA877, prEX, gcPo}, // [2] PHAGS-PA MARK SHAD..PHAGS-PA MARK DOUBLE SHAD - {0xA880, 0xA881, prCM, gcMc}, // [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA - {0xA882, 0xA8B3, prAL, gcLo}, // [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA - {0xA8B4, 0xA8C3, prCM, gcMc}, // [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU - {0xA8C4, 0xA8C5, prCM, gcMn}, // [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU - {0xA8CE, 0xA8CF, prBA, gcPo}, // [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA - {0xA8D0, 0xA8D9, prNU, gcNd}, // [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE - {0xA8E0, 0xA8F1, prCM, gcMn}, // [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA - {0xA8F2, 0xA8F7, prAL, gcLo}, // [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA - {0xA8F8, 0xA8FA, prAL, gcPo}, // [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET - {0xA8FB, 0xA8FB, prAL, gcLo}, // DEVANAGARI HEADSTROKE - {0xA8FC, 0xA8FC, prBB, gcPo}, // DEVANAGARI SIGN SIDDHAM - {0xA8FD, 0xA8FE, prAL, gcLo}, // [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY - {0xA8FF, 0xA8FF, prCM, gcMn}, // DEVANAGARI VOWEL SIGN AY - {0xA900, 0xA909, prNU, gcNd}, // [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE - {0xA90A, 0xA925, prAL, gcLo}, // [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO - {0xA926, 0xA92D, prCM, gcMn}, // [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU - {0xA92E, 0xA92F, prBA, gcPo}, // [2] KAYAH LI SIGN CWI..KAYAH LI SIGN SHYA - {0xA930, 0xA946, prAL, gcLo}, // [23] REJANG LETTER KA..REJANG LETTER A - {0xA947, 0xA951, prCM, gcMn}, // [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R - {0xA952, 0xA953, prCM, gcMc}, // [2] REJANG CONSONANT SIGN H..REJANG VIRAMA - {0xA95F, 0xA95F, prAL, gcPo}, // REJANG SECTION MARK - {0xA960, 0xA97C, prJL, gcLo}, // [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH - {0xA980, 0xA982, prCM, gcMn}, // [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR - {0xA983, 0xA983, prCM, gcMc}, // JAVANESE SIGN WIGNYAN - {0xA984, 0xA9B2, prAL, gcLo}, // [47] JAVANESE LETTER A..JAVANESE LETTER HA - {0xA9B3, 0xA9B3, prCM, gcMn}, // JAVANESE SIGN CECAK TELU - {0xA9B4, 0xA9B5, prCM, gcMc}, // [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG - {0xA9B6, 0xA9B9, prCM, gcMn}, // [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT - {0xA9BA, 0xA9BB, prCM, gcMc}, // [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE - {0xA9BC, 0xA9BD, prCM, gcMn}, // [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET - {0xA9BE, 0xA9C0, prCM, gcMc}, // [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON - {0xA9C1, 0xA9C6, prAL, gcPo}, // [6] JAVANESE LEFT RERENGGAN..JAVANESE PADA WINDU - {0xA9C7, 0xA9C9, prBA, gcPo}, // [3] JAVANESE PADA PANGKAT..JAVANESE PADA LUNGSI - {0xA9CA, 0xA9CD, prAL, gcPo}, // [4] JAVANESE PADA ADEG..JAVANESE TURNED PADA PISELEH - {0xA9CF, 0xA9CF, prAL, gcLm}, // JAVANESE PANGRANGKEP - {0xA9D0, 0xA9D9, prNU, gcNd}, // [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE - {0xA9DE, 0xA9DF, prAL, gcPo}, // [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN - {0xA9E0, 0xA9E4, prSA, gcLo}, // [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA - {0xA9E5, 0xA9E5, prSA, gcMn}, // MYANMAR SIGN SHAN SAW - {0xA9E6, 0xA9E6, prSA, gcLm}, // MYANMAR MODIFIER LETTER SHAN REDUPLICATION - {0xA9E7, 0xA9EF, prSA, gcLo}, // [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA - {0xA9F0, 0xA9F9, prNU, gcNd}, // [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE - {0xA9FA, 0xA9FE, prSA, gcLo}, // [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA - {0xAA00, 0xAA28, prAL, gcLo}, // [41] CHAM LETTER A..CHAM LETTER HA - {0xAA29, 0xAA2E, prCM, gcMn}, // [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE - {0xAA2F, 0xAA30, prCM, gcMc}, // [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI - {0xAA31, 0xAA32, prCM, gcMn}, // [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE - {0xAA33, 0xAA34, prCM, gcMc}, // [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA - {0xAA35, 0xAA36, prCM, gcMn}, // [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA - {0xAA40, 0xAA42, prAL, gcLo}, // [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG - {0xAA43, 0xAA43, prCM, gcMn}, // CHAM CONSONANT SIGN FINAL NG - {0xAA44, 0xAA4B, prAL, gcLo}, // [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS - {0xAA4C, 0xAA4C, prCM, gcMn}, // CHAM CONSONANT SIGN FINAL M - {0xAA4D, 0xAA4D, prCM, gcMc}, // CHAM CONSONANT SIGN FINAL H - {0xAA50, 0xAA59, prNU, gcNd}, // [10] CHAM DIGIT ZERO..CHAM DIGIT NINE - {0xAA5C, 0xAA5C, prAL, gcPo}, // CHAM PUNCTUATION SPIRAL - {0xAA5D, 0xAA5F, prBA, gcPo}, // [3] CHAM PUNCTUATION DANDA..CHAM PUNCTUATION TRIPLE DANDA - {0xAA60, 0xAA6F, prSA, gcLo}, // [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA - {0xAA70, 0xAA70, prSA, gcLm}, // MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION - {0xAA71, 0xAA76, prSA, gcLo}, // [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM - {0xAA77, 0xAA79, prSA, gcSo}, // [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO - {0xAA7A, 0xAA7A, prSA, gcLo}, // MYANMAR LETTER AITON RA - {0xAA7B, 0xAA7B, prSA, gcMc}, // MYANMAR SIGN PAO KAREN TONE - {0xAA7C, 0xAA7C, prSA, gcMn}, // MYANMAR SIGN TAI LAING TONE-2 - {0xAA7D, 0xAA7D, prSA, gcMc}, // MYANMAR SIGN TAI LAING TONE-5 - {0xAA7E, 0xAA7F, prSA, gcLo}, // [2] MYANMAR LETTER SHWE PALAUNG CHA..MYANMAR LETTER SHWE PALAUNG SHA - {0xAA80, 0xAAAF, prSA, gcLo}, // [48] TAI VIET LETTER LOW KO..TAI VIET LETTER HIGH O - {0xAAB0, 0xAAB0, prSA, gcMn}, // TAI VIET MAI KANG - {0xAAB1, 0xAAB1, prSA, gcLo}, // TAI VIET VOWEL AA - {0xAAB2, 0xAAB4, prSA, gcMn}, // [3] TAI VIET VOWEL I..TAI VIET VOWEL U - {0xAAB5, 0xAAB6, prSA, gcLo}, // [2] TAI VIET VOWEL E..TAI VIET VOWEL O - {0xAAB7, 0xAAB8, prSA, gcMn}, // [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA - {0xAAB9, 0xAABD, prSA, gcLo}, // [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN - {0xAABE, 0xAABF, prSA, gcMn}, // [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK - {0xAAC0, 0xAAC0, prSA, gcLo}, // TAI VIET TONE MAI NUENG - {0xAAC1, 0xAAC1, prSA, gcMn}, // TAI VIET TONE MAI THO - {0xAAC2, 0xAAC2, prSA, gcLo}, // TAI VIET TONE MAI SONG - {0xAADB, 0xAADC, prSA, gcLo}, // [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG - {0xAADD, 0xAADD, prSA, gcLm}, // TAI VIET SYMBOL SAM - {0xAADE, 0xAADF, prSA, gcPo}, // [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI - {0xAAE0, 0xAAEA, prAL, gcLo}, // [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA - {0xAAEB, 0xAAEB, prCM, gcMc}, // MEETEI MAYEK VOWEL SIGN II - {0xAAEC, 0xAAED, prCM, gcMn}, // [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI - {0xAAEE, 0xAAEF, prCM, gcMc}, // [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU - {0xAAF0, 0xAAF1, prBA, gcPo}, // [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM - {0xAAF2, 0xAAF2, prAL, gcLo}, // MEETEI MAYEK ANJI - {0xAAF3, 0xAAF4, prAL, gcLm}, // [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK - {0xAAF5, 0xAAF5, prCM, gcMc}, // MEETEI MAYEK VOWEL SIGN VISARGA - {0xAAF6, 0xAAF6, prCM, gcMn}, // MEETEI MAYEK VIRAMA - {0xAB01, 0xAB06, prAL, gcLo}, // [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO - {0xAB09, 0xAB0E, prAL, gcLo}, // [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO - {0xAB11, 0xAB16, prAL, gcLo}, // [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO - {0xAB20, 0xAB26, prAL, gcLo}, // [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO - {0xAB28, 0xAB2E, prAL, gcLo}, // [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO - {0xAB30, 0xAB5A, prAL, gcLl}, // [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG - {0xAB5B, 0xAB5B, prAL, gcSk}, // MODIFIER BREVE WITH INVERTED BREVE - {0xAB5C, 0xAB5F, prAL, gcLm}, // [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK - {0xAB60, 0xAB68, prAL, gcLl}, // [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE - {0xAB69, 0xAB69, prAL, gcLm}, // MODIFIER LETTER SMALL TURNED W - {0xAB6A, 0xAB6B, prAL, gcSk}, // [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK - {0xAB70, 0xABBF, prAL, gcLl}, // [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA - {0xABC0, 0xABE2, prAL, gcLo}, // [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM - {0xABE3, 0xABE4, prCM, gcMc}, // [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP - {0xABE5, 0xABE5, prCM, gcMn}, // MEETEI MAYEK VOWEL SIGN ANAP - {0xABE6, 0xABE7, prCM, gcMc}, // [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP - {0xABE8, 0xABE8, prCM, gcMn}, // MEETEI MAYEK VOWEL SIGN UNAP - {0xABE9, 0xABEA, prCM, gcMc}, // [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG - {0xABEB, 0xABEB, prBA, gcPo}, // MEETEI MAYEK CHEIKHEI - {0xABEC, 0xABEC, prCM, gcMc}, // MEETEI MAYEK LUM IYEK - {0xABED, 0xABED, prCM, gcMn}, // MEETEI MAYEK APUN IYEK - {0xABF0, 0xABF9, prNU, gcNd}, // [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE - {0xAC00, 0xAC00, prH2, gcLo}, // HANGUL SYLLABLE GA - {0xAC01, 0xAC1B, prH3, gcLo}, // [27] HANGUL SYLLABLE GAG..HANGUL SYLLABLE GAH - {0xAC1C, 0xAC1C, prH2, gcLo}, // HANGUL SYLLABLE GAE - {0xAC1D, 0xAC37, prH3, gcLo}, // [27] HANGUL SYLLABLE GAEG..HANGUL SYLLABLE GAEH - {0xAC38, 0xAC38, prH2, gcLo}, // HANGUL SYLLABLE GYA - {0xAC39, 0xAC53, prH3, gcLo}, // [27] HANGUL SYLLABLE GYAG..HANGUL SYLLABLE GYAH - {0xAC54, 0xAC54, prH2, gcLo}, // HANGUL SYLLABLE GYAE - {0xAC55, 0xAC6F, prH3, gcLo}, // [27] HANGUL SYLLABLE GYAEG..HANGUL SYLLABLE GYAEH - {0xAC70, 0xAC70, prH2, gcLo}, // HANGUL SYLLABLE GEO - {0xAC71, 0xAC8B, prH3, gcLo}, // [27] HANGUL SYLLABLE GEOG..HANGUL SYLLABLE GEOH - {0xAC8C, 0xAC8C, prH2, gcLo}, // HANGUL SYLLABLE GE - {0xAC8D, 0xACA7, prH3, gcLo}, // [27] HANGUL SYLLABLE GEG..HANGUL SYLLABLE GEH - {0xACA8, 0xACA8, prH2, gcLo}, // HANGUL SYLLABLE GYEO - {0xACA9, 0xACC3, prH3, gcLo}, // [27] HANGUL SYLLABLE GYEOG..HANGUL SYLLABLE GYEOH - {0xACC4, 0xACC4, prH2, gcLo}, // HANGUL SYLLABLE GYE - {0xACC5, 0xACDF, prH3, gcLo}, // [27] HANGUL SYLLABLE GYEG..HANGUL SYLLABLE GYEH - {0xACE0, 0xACE0, prH2, gcLo}, // HANGUL SYLLABLE GO - {0xACE1, 0xACFB, prH3, gcLo}, // [27] HANGUL SYLLABLE GOG..HANGUL SYLLABLE GOH - {0xACFC, 0xACFC, prH2, gcLo}, // HANGUL SYLLABLE GWA - {0xACFD, 0xAD17, prH3, gcLo}, // [27] HANGUL SYLLABLE GWAG..HANGUL SYLLABLE GWAH - {0xAD18, 0xAD18, prH2, gcLo}, // HANGUL SYLLABLE GWAE - {0xAD19, 0xAD33, prH3, gcLo}, // [27] HANGUL SYLLABLE GWAEG..HANGUL SYLLABLE GWAEH - {0xAD34, 0xAD34, prH2, gcLo}, // HANGUL SYLLABLE GOE - {0xAD35, 0xAD4F, prH3, gcLo}, // [27] HANGUL SYLLABLE GOEG..HANGUL SYLLABLE GOEH - {0xAD50, 0xAD50, prH2, gcLo}, // HANGUL SYLLABLE GYO - {0xAD51, 0xAD6B, prH3, gcLo}, // [27] HANGUL SYLLABLE GYOG..HANGUL SYLLABLE GYOH - {0xAD6C, 0xAD6C, prH2, gcLo}, // HANGUL SYLLABLE GU - {0xAD6D, 0xAD87, prH3, gcLo}, // [27] HANGUL SYLLABLE GUG..HANGUL SYLLABLE GUH - {0xAD88, 0xAD88, prH2, gcLo}, // HANGUL SYLLABLE GWEO - {0xAD89, 0xADA3, prH3, gcLo}, // [27] HANGUL SYLLABLE GWEOG..HANGUL SYLLABLE GWEOH - {0xADA4, 0xADA4, prH2, gcLo}, // HANGUL SYLLABLE GWE - {0xADA5, 0xADBF, prH3, gcLo}, // [27] HANGUL SYLLABLE GWEG..HANGUL SYLLABLE GWEH - {0xADC0, 0xADC0, prH2, gcLo}, // HANGUL SYLLABLE GWI - {0xADC1, 0xADDB, prH3, gcLo}, // [27] HANGUL SYLLABLE GWIG..HANGUL SYLLABLE GWIH - {0xADDC, 0xADDC, prH2, gcLo}, // HANGUL SYLLABLE GYU - {0xADDD, 0xADF7, prH3, gcLo}, // [27] HANGUL SYLLABLE GYUG..HANGUL SYLLABLE GYUH - {0xADF8, 0xADF8, prH2, gcLo}, // HANGUL SYLLABLE GEU - {0xADF9, 0xAE13, prH3, gcLo}, // [27] HANGUL SYLLABLE GEUG..HANGUL SYLLABLE GEUH - {0xAE14, 0xAE14, prH2, gcLo}, // HANGUL SYLLABLE GYI - {0xAE15, 0xAE2F, prH3, gcLo}, // [27] HANGUL SYLLABLE GYIG..HANGUL SYLLABLE GYIH - {0xAE30, 0xAE30, prH2, gcLo}, // HANGUL SYLLABLE GI - {0xAE31, 0xAE4B, prH3, gcLo}, // [27] HANGUL SYLLABLE GIG..HANGUL SYLLABLE GIH - {0xAE4C, 0xAE4C, prH2, gcLo}, // HANGUL SYLLABLE GGA - {0xAE4D, 0xAE67, prH3, gcLo}, // [27] HANGUL SYLLABLE GGAG..HANGUL SYLLABLE GGAH - {0xAE68, 0xAE68, prH2, gcLo}, // HANGUL SYLLABLE GGAE - {0xAE69, 0xAE83, prH3, gcLo}, // [27] HANGUL SYLLABLE GGAEG..HANGUL SYLLABLE GGAEH - {0xAE84, 0xAE84, prH2, gcLo}, // HANGUL SYLLABLE GGYA - {0xAE85, 0xAE9F, prH3, gcLo}, // [27] HANGUL SYLLABLE GGYAG..HANGUL SYLLABLE GGYAH - {0xAEA0, 0xAEA0, prH2, gcLo}, // HANGUL SYLLABLE GGYAE - {0xAEA1, 0xAEBB, prH3, gcLo}, // [27] HANGUL SYLLABLE GGYAEG..HANGUL SYLLABLE GGYAEH - {0xAEBC, 0xAEBC, prH2, gcLo}, // HANGUL SYLLABLE GGEO - {0xAEBD, 0xAED7, prH3, gcLo}, // [27] HANGUL SYLLABLE GGEOG..HANGUL SYLLABLE GGEOH - {0xAED8, 0xAED8, prH2, gcLo}, // HANGUL SYLLABLE GGE - {0xAED9, 0xAEF3, prH3, gcLo}, // [27] HANGUL SYLLABLE GGEG..HANGUL SYLLABLE GGEH - {0xAEF4, 0xAEF4, prH2, gcLo}, // HANGUL SYLLABLE GGYEO - {0xAEF5, 0xAF0F, prH3, gcLo}, // [27] HANGUL SYLLABLE GGYEOG..HANGUL SYLLABLE GGYEOH - {0xAF10, 0xAF10, prH2, gcLo}, // HANGUL SYLLABLE GGYE - {0xAF11, 0xAF2B, prH3, gcLo}, // [27] HANGUL SYLLABLE GGYEG..HANGUL SYLLABLE GGYEH - {0xAF2C, 0xAF2C, prH2, gcLo}, // HANGUL SYLLABLE GGO - {0xAF2D, 0xAF47, prH3, gcLo}, // [27] HANGUL SYLLABLE GGOG..HANGUL SYLLABLE GGOH - {0xAF48, 0xAF48, prH2, gcLo}, // HANGUL SYLLABLE GGWA - {0xAF49, 0xAF63, prH3, gcLo}, // [27] HANGUL SYLLABLE GGWAG..HANGUL SYLLABLE GGWAH - {0xAF64, 0xAF64, prH2, gcLo}, // HANGUL SYLLABLE GGWAE - {0xAF65, 0xAF7F, prH3, gcLo}, // [27] HANGUL SYLLABLE GGWAEG..HANGUL SYLLABLE GGWAEH - {0xAF80, 0xAF80, prH2, gcLo}, // HANGUL SYLLABLE GGOE - {0xAF81, 0xAF9B, prH3, gcLo}, // [27] HANGUL SYLLABLE GGOEG..HANGUL SYLLABLE GGOEH - {0xAF9C, 0xAF9C, prH2, gcLo}, // HANGUL SYLLABLE GGYO - {0xAF9D, 0xAFB7, prH3, gcLo}, // [27] HANGUL SYLLABLE GGYOG..HANGUL SYLLABLE GGYOH - {0xAFB8, 0xAFB8, prH2, gcLo}, // HANGUL SYLLABLE GGU - {0xAFB9, 0xAFD3, prH3, gcLo}, // [27] HANGUL SYLLABLE GGUG..HANGUL SYLLABLE GGUH - {0xAFD4, 0xAFD4, prH2, gcLo}, // HANGUL SYLLABLE GGWEO - {0xAFD5, 0xAFEF, prH3, gcLo}, // [27] HANGUL SYLLABLE GGWEOG..HANGUL SYLLABLE GGWEOH - {0xAFF0, 0xAFF0, prH2, gcLo}, // HANGUL SYLLABLE GGWE - {0xAFF1, 0xB00B, prH3, gcLo}, // [27] HANGUL SYLLABLE GGWEG..HANGUL SYLLABLE GGWEH - {0xB00C, 0xB00C, prH2, gcLo}, // HANGUL SYLLABLE GGWI - {0xB00D, 0xB027, prH3, gcLo}, // [27] HANGUL SYLLABLE GGWIG..HANGUL SYLLABLE GGWIH - {0xB028, 0xB028, prH2, gcLo}, // HANGUL SYLLABLE GGYU - {0xB029, 0xB043, prH3, gcLo}, // [27] HANGUL SYLLABLE GGYUG..HANGUL SYLLABLE GGYUH - {0xB044, 0xB044, prH2, gcLo}, // HANGUL SYLLABLE GGEU - {0xB045, 0xB05F, prH3, gcLo}, // [27] HANGUL SYLLABLE GGEUG..HANGUL SYLLABLE GGEUH - {0xB060, 0xB060, prH2, gcLo}, // HANGUL SYLLABLE GGYI - {0xB061, 0xB07B, prH3, gcLo}, // [27] HANGUL SYLLABLE GGYIG..HANGUL SYLLABLE GGYIH - {0xB07C, 0xB07C, prH2, gcLo}, // HANGUL SYLLABLE GGI - {0xB07D, 0xB097, prH3, gcLo}, // [27] HANGUL SYLLABLE GGIG..HANGUL SYLLABLE GGIH - {0xB098, 0xB098, prH2, gcLo}, // HANGUL SYLLABLE NA - {0xB099, 0xB0B3, prH3, gcLo}, // [27] HANGUL SYLLABLE NAG..HANGUL SYLLABLE NAH - {0xB0B4, 0xB0B4, prH2, gcLo}, // HANGUL SYLLABLE NAE - {0xB0B5, 0xB0CF, prH3, gcLo}, // [27] HANGUL SYLLABLE NAEG..HANGUL SYLLABLE NAEH - {0xB0D0, 0xB0D0, prH2, gcLo}, // HANGUL SYLLABLE NYA - {0xB0D1, 0xB0EB, prH3, gcLo}, // [27] HANGUL SYLLABLE NYAG..HANGUL SYLLABLE NYAH - {0xB0EC, 0xB0EC, prH2, gcLo}, // HANGUL SYLLABLE NYAE - {0xB0ED, 0xB107, prH3, gcLo}, // [27] HANGUL SYLLABLE NYAEG..HANGUL SYLLABLE NYAEH - {0xB108, 0xB108, prH2, gcLo}, // HANGUL SYLLABLE NEO - {0xB109, 0xB123, prH3, gcLo}, // [27] HANGUL SYLLABLE NEOG..HANGUL SYLLABLE NEOH - {0xB124, 0xB124, prH2, gcLo}, // HANGUL SYLLABLE NE - {0xB125, 0xB13F, prH3, gcLo}, // [27] HANGUL SYLLABLE NEG..HANGUL SYLLABLE NEH - {0xB140, 0xB140, prH2, gcLo}, // HANGUL SYLLABLE NYEO - {0xB141, 0xB15B, prH3, gcLo}, // [27] HANGUL SYLLABLE NYEOG..HANGUL SYLLABLE NYEOH - {0xB15C, 0xB15C, prH2, gcLo}, // HANGUL SYLLABLE NYE - {0xB15D, 0xB177, prH3, gcLo}, // [27] HANGUL SYLLABLE NYEG..HANGUL SYLLABLE NYEH - {0xB178, 0xB178, prH2, gcLo}, // HANGUL SYLLABLE NO - {0xB179, 0xB193, prH3, gcLo}, // [27] HANGUL SYLLABLE NOG..HANGUL SYLLABLE NOH - {0xB194, 0xB194, prH2, gcLo}, // HANGUL SYLLABLE NWA - {0xB195, 0xB1AF, prH3, gcLo}, // [27] HANGUL SYLLABLE NWAG..HANGUL SYLLABLE NWAH - {0xB1B0, 0xB1B0, prH2, gcLo}, // HANGUL SYLLABLE NWAE - {0xB1B1, 0xB1CB, prH3, gcLo}, // [27] HANGUL SYLLABLE NWAEG..HANGUL SYLLABLE NWAEH - {0xB1CC, 0xB1CC, prH2, gcLo}, // HANGUL SYLLABLE NOE - {0xB1CD, 0xB1E7, prH3, gcLo}, // [27] HANGUL SYLLABLE NOEG..HANGUL SYLLABLE NOEH - {0xB1E8, 0xB1E8, prH2, gcLo}, // HANGUL SYLLABLE NYO - {0xB1E9, 0xB203, prH3, gcLo}, // [27] HANGUL SYLLABLE NYOG..HANGUL SYLLABLE NYOH - {0xB204, 0xB204, prH2, gcLo}, // HANGUL SYLLABLE NU - {0xB205, 0xB21F, prH3, gcLo}, // [27] HANGUL SYLLABLE NUG..HANGUL SYLLABLE NUH - {0xB220, 0xB220, prH2, gcLo}, // HANGUL SYLLABLE NWEO - {0xB221, 0xB23B, prH3, gcLo}, // [27] HANGUL SYLLABLE NWEOG..HANGUL SYLLABLE NWEOH - {0xB23C, 0xB23C, prH2, gcLo}, // HANGUL SYLLABLE NWE - {0xB23D, 0xB257, prH3, gcLo}, // [27] HANGUL SYLLABLE NWEG..HANGUL SYLLABLE NWEH - {0xB258, 0xB258, prH2, gcLo}, // HANGUL SYLLABLE NWI - {0xB259, 0xB273, prH3, gcLo}, // [27] HANGUL SYLLABLE NWIG..HANGUL SYLLABLE NWIH - {0xB274, 0xB274, prH2, gcLo}, // HANGUL SYLLABLE NYU - {0xB275, 0xB28F, prH3, gcLo}, // [27] HANGUL SYLLABLE NYUG..HANGUL SYLLABLE NYUH - {0xB290, 0xB290, prH2, gcLo}, // HANGUL SYLLABLE NEU - {0xB291, 0xB2AB, prH3, gcLo}, // [27] HANGUL SYLLABLE NEUG..HANGUL SYLLABLE NEUH - {0xB2AC, 0xB2AC, prH2, gcLo}, // HANGUL SYLLABLE NYI - {0xB2AD, 0xB2C7, prH3, gcLo}, // [27] HANGUL SYLLABLE NYIG..HANGUL SYLLABLE NYIH - {0xB2C8, 0xB2C8, prH2, gcLo}, // HANGUL SYLLABLE NI - {0xB2C9, 0xB2E3, prH3, gcLo}, // [27] HANGUL SYLLABLE NIG..HANGUL SYLLABLE NIH - {0xB2E4, 0xB2E4, prH2, gcLo}, // HANGUL SYLLABLE DA - {0xB2E5, 0xB2FF, prH3, gcLo}, // [27] HANGUL SYLLABLE DAG..HANGUL SYLLABLE DAH - {0xB300, 0xB300, prH2, gcLo}, // HANGUL SYLLABLE DAE - {0xB301, 0xB31B, prH3, gcLo}, // [27] HANGUL SYLLABLE DAEG..HANGUL SYLLABLE DAEH - {0xB31C, 0xB31C, prH2, gcLo}, // HANGUL SYLLABLE DYA - {0xB31D, 0xB337, prH3, gcLo}, // [27] HANGUL SYLLABLE DYAG..HANGUL SYLLABLE DYAH - {0xB338, 0xB338, prH2, gcLo}, // HANGUL SYLLABLE DYAE - {0xB339, 0xB353, prH3, gcLo}, // [27] HANGUL SYLLABLE DYAEG..HANGUL SYLLABLE DYAEH - {0xB354, 0xB354, prH2, gcLo}, // HANGUL SYLLABLE DEO - {0xB355, 0xB36F, prH3, gcLo}, // [27] HANGUL SYLLABLE DEOG..HANGUL SYLLABLE DEOH - {0xB370, 0xB370, prH2, gcLo}, // HANGUL SYLLABLE DE - {0xB371, 0xB38B, prH3, gcLo}, // [27] HANGUL SYLLABLE DEG..HANGUL SYLLABLE DEH - {0xB38C, 0xB38C, prH2, gcLo}, // HANGUL SYLLABLE DYEO - {0xB38D, 0xB3A7, prH3, gcLo}, // [27] HANGUL SYLLABLE DYEOG..HANGUL SYLLABLE DYEOH - {0xB3A8, 0xB3A8, prH2, gcLo}, // HANGUL SYLLABLE DYE - {0xB3A9, 0xB3C3, prH3, gcLo}, // [27] HANGUL SYLLABLE DYEG..HANGUL SYLLABLE DYEH - {0xB3C4, 0xB3C4, prH2, gcLo}, // HANGUL SYLLABLE DO - {0xB3C5, 0xB3DF, prH3, gcLo}, // [27] HANGUL SYLLABLE DOG..HANGUL SYLLABLE DOH - {0xB3E0, 0xB3E0, prH2, gcLo}, // HANGUL SYLLABLE DWA - {0xB3E1, 0xB3FB, prH3, gcLo}, // [27] HANGUL SYLLABLE DWAG..HANGUL SYLLABLE DWAH - {0xB3FC, 0xB3FC, prH2, gcLo}, // HANGUL SYLLABLE DWAE - {0xB3FD, 0xB417, prH3, gcLo}, // [27] HANGUL SYLLABLE DWAEG..HANGUL SYLLABLE DWAEH - {0xB418, 0xB418, prH2, gcLo}, // HANGUL SYLLABLE DOE - {0xB419, 0xB433, prH3, gcLo}, // [27] HANGUL SYLLABLE DOEG..HANGUL SYLLABLE DOEH - {0xB434, 0xB434, prH2, gcLo}, // HANGUL SYLLABLE DYO - {0xB435, 0xB44F, prH3, gcLo}, // [27] HANGUL SYLLABLE DYOG..HANGUL SYLLABLE DYOH - {0xB450, 0xB450, prH2, gcLo}, // HANGUL SYLLABLE DU - {0xB451, 0xB46B, prH3, gcLo}, // [27] HANGUL SYLLABLE DUG..HANGUL SYLLABLE DUH - {0xB46C, 0xB46C, prH2, gcLo}, // HANGUL SYLLABLE DWEO - {0xB46D, 0xB487, prH3, gcLo}, // [27] HANGUL SYLLABLE DWEOG..HANGUL SYLLABLE DWEOH - {0xB488, 0xB488, prH2, gcLo}, // HANGUL SYLLABLE DWE - {0xB489, 0xB4A3, prH3, gcLo}, // [27] HANGUL SYLLABLE DWEG..HANGUL SYLLABLE DWEH - {0xB4A4, 0xB4A4, prH2, gcLo}, // HANGUL SYLLABLE DWI - {0xB4A5, 0xB4BF, prH3, gcLo}, // [27] HANGUL SYLLABLE DWIG..HANGUL SYLLABLE DWIH - {0xB4C0, 0xB4C0, prH2, gcLo}, // HANGUL SYLLABLE DYU - {0xB4C1, 0xB4DB, prH3, gcLo}, // [27] HANGUL SYLLABLE DYUG..HANGUL SYLLABLE DYUH - {0xB4DC, 0xB4DC, prH2, gcLo}, // HANGUL SYLLABLE DEU - {0xB4DD, 0xB4F7, prH3, gcLo}, // [27] HANGUL SYLLABLE DEUG..HANGUL SYLLABLE DEUH - {0xB4F8, 0xB4F8, prH2, gcLo}, // HANGUL SYLLABLE DYI - {0xB4F9, 0xB513, prH3, gcLo}, // [27] HANGUL SYLLABLE DYIG..HANGUL SYLLABLE DYIH - {0xB514, 0xB514, prH2, gcLo}, // HANGUL SYLLABLE DI - {0xB515, 0xB52F, prH3, gcLo}, // [27] HANGUL SYLLABLE DIG..HANGUL SYLLABLE DIH - {0xB530, 0xB530, prH2, gcLo}, // HANGUL SYLLABLE DDA - {0xB531, 0xB54B, prH3, gcLo}, // [27] HANGUL SYLLABLE DDAG..HANGUL SYLLABLE DDAH - {0xB54C, 0xB54C, prH2, gcLo}, // HANGUL SYLLABLE DDAE - {0xB54D, 0xB567, prH3, gcLo}, // [27] HANGUL SYLLABLE DDAEG..HANGUL SYLLABLE DDAEH - {0xB568, 0xB568, prH2, gcLo}, // HANGUL SYLLABLE DDYA - {0xB569, 0xB583, prH3, gcLo}, // [27] HANGUL SYLLABLE DDYAG..HANGUL SYLLABLE DDYAH - {0xB584, 0xB584, prH2, gcLo}, // HANGUL SYLLABLE DDYAE - {0xB585, 0xB59F, prH3, gcLo}, // [27] HANGUL SYLLABLE DDYAEG..HANGUL SYLLABLE DDYAEH - {0xB5A0, 0xB5A0, prH2, gcLo}, // HANGUL SYLLABLE DDEO - {0xB5A1, 0xB5BB, prH3, gcLo}, // [27] HANGUL SYLLABLE DDEOG..HANGUL SYLLABLE DDEOH - {0xB5BC, 0xB5BC, prH2, gcLo}, // HANGUL SYLLABLE DDE - {0xB5BD, 0xB5D7, prH3, gcLo}, // [27] HANGUL SYLLABLE DDEG..HANGUL SYLLABLE DDEH - {0xB5D8, 0xB5D8, prH2, gcLo}, // HANGUL SYLLABLE DDYEO - {0xB5D9, 0xB5F3, prH3, gcLo}, // [27] HANGUL SYLLABLE DDYEOG..HANGUL SYLLABLE DDYEOH - {0xB5F4, 0xB5F4, prH2, gcLo}, // HANGUL SYLLABLE DDYE - {0xB5F5, 0xB60F, prH3, gcLo}, // [27] HANGUL SYLLABLE DDYEG..HANGUL SYLLABLE DDYEH - {0xB610, 0xB610, prH2, gcLo}, // HANGUL SYLLABLE DDO - {0xB611, 0xB62B, prH3, gcLo}, // [27] HANGUL SYLLABLE DDOG..HANGUL SYLLABLE DDOH - {0xB62C, 0xB62C, prH2, gcLo}, // HANGUL SYLLABLE DDWA - {0xB62D, 0xB647, prH3, gcLo}, // [27] HANGUL SYLLABLE DDWAG..HANGUL SYLLABLE DDWAH - {0xB648, 0xB648, prH2, gcLo}, // HANGUL SYLLABLE DDWAE - {0xB649, 0xB663, prH3, gcLo}, // [27] HANGUL SYLLABLE DDWAEG..HANGUL SYLLABLE DDWAEH - {0xB664, 0xB664, prH2, gcLo}, // HANGUL SYLLABLE DDOE - {0xB665, 0xB67F, prH3, gcLo}, // [27] HANGUL SYLLABLE DDOEG..HANGUL SYLLABLE DDOEH - {0xB680, 0xB680, prH2, gcLo}, // HANGUL SYLLABLE DDYO - {0xB681, 0xB69B, prH3, gcLo}, // [27] HANGUL SYLLABLE DDYOG..HANGUL SYLLABLE DDYOH - {0xB69C, 0xB69C, prH2, gcLo}, // HANGUL SYLLABLE DDU - {0xB69D, 0xB6B7, prH3, gcLo}, // [27] HANGUL SYLLABLE DDUG..HANGUL SYLLABLE DDUH - {0xB6B8, 0xB6B8, prH2, gcLo}, // HANGUL SYLLABLE DDWEO - {0xB6B9, 0xB6D3, prH3, gcLo}, // [27] HANGUL SYLLABLE DDWEOG..HANGUL SYLLABLE DDWEOH - {0xB6D4, 0xB6D4, prH2, gcLo}, // HANGUL SYLLABLE DDWE - {0xB6D5, 0xB6EF, prH3, gcLo}, // [27] HANGUL SYLLABLE DDWEG..HANGUL SYLLABLE DDWEH - {0xB6F0, 0xB6F0, prH2, gcLo}, // HANGUL SYLLABLE DDWI - {0xB6F1, 0xB70B, prH3, gcLo}, // [27] HANGUL SYLLABLE DDWIG..HANGUL SYLLABLE DDWIH - {0xB70C, 0xB70C, prH2, gcLo}, // HANGUL SYLLABLE DDYU - {0xB70D, 0xB727, prH3, gcLo}, // [27] HANGUL SYLLABLE DDYUG..HANGUL SYLLABLE DDYUH - {0xB728, 0xB728, prH2, gcLo}, // HANGUL SYLLABLE DDEU - {0xB729, 0xB743, prH3, gcLo}, // [27] HANGUL SYLLABLE DDEUG..HANGUL SYLLABLE DDEUH - {0xB744, 0xB744, prH2, gcLo}, // HANGUL SYLLABLE DDYI - {0xB745, 0xB75F, prH3, gcLo}, // [27] HANGUL SYLLABLE DDYIG..HANGUL SYLLABLE DDYIH - {0xB760, 0xB760, prH2, gcLo}, // HANGUL SYLLABLE DDI - {0xB761, 0xB77B, prH3, gcLo}, // [27] HANGUL SYLLABLE DDIG..HANGUL SYLLABLE DDIH - {0xB77C, 0xB77C, prH2, gcLo}, // HANGUL SYLLABLE RA - {0xB77D, 0xB797, prH3, gcLo}, // [27] HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAH - {0xB798, 0xB798, prH2, gcLo}, // HANGUL SYLLABLE RAE - {0xB799, 0xB7B3, prH3, gcLo}, // [27] HANGUL SYLLABLE RAEG..HANGUL SYLLABLE RAEH - {0xB7B4, 0xB7B4, prH2, gcLo}, // HANGUL SYLLABLE RYA - {0xB7B5, 0xB7CF, prH3, gcLo}, // [27] HANGUL SYLLABLE RYAG..HANGUL SYLLABLE RYAH - {0xB7D0, 0xB7D0, prH2, gcLo}, // HANGUL SYLLABLE RYAE - {0xB7D1, 0xB7EB, prH3, gcLo}, // [27] HANGUL SYLLABLE RYAEG..HANGUL SYLLABLE RYAEH - {0xB7EC, 0xB7EC, prH2, gcLo}, // HANGUL SYLLABLE REO - {0xB7ED, 0xB807, prH3, gcLo}, // [27] HANGUL SYLLABLE REOG..HANGUL SYLLABLE REOH - {0xB808, 0xB808, prH2, gcLo}, // HANGUL SYLLABLE RE - {0xB809, 0xB823, prH3, gcLo}, // [27] HANGUL SYLLABLE REG..HANGUL SYLLABLE REH - {0xB824, 0xB824, prH2, gcLo}, // HANGUL SYLLABLE RYEO - {0xB825, 0xB83F, prH3, gcLo}, // [27] HANGUL SYLLABLE RYEOG..HANGUL SYLLABLE RYEOH - {0xB840, 0xB840, prH2, gcLo}, // HANGUL SYLLABLE RYE - {0xB841, 0xB85B, prH3, gcLo}, // [27] HANGUL SYLLABLE RYEG..HANGUL SYLLABLE RYEH - {0xB85C, 0xB85C, prH2, gcLo}, // HANGUL SYLLABLE RO - {0xB85D, 0xB877, prH3, gcLo}, // [27] HANGUL SYLLABLE ROG..HANGUL SYLLABLE ROH - {0xB878, 0xB878, prH2, gcLo}, // HANGUL SYLLABLE RWA - {0xB879, 0xB893, prH3, gcLo}, // [27] HANGUL SYLLABLE RWAG..HANGUL SYLLABLE RWAH - {0xB894, 0xB894, prH2, gcLo}, // HANGUL SYLLABLE RWAE - {0xB895, 0xB8AF, prH3, gcLo}, // [27] HANGUL SYLLABLE RWAEG..HANGUL SYLLABLE RWAEH - {0xB8B0, 0xB8B0, prH2, gcLo}, // HANGUL SYLLABLE ROE - {0xB8B1, 0xB8CB, prH3, gcLo}, // [27] HANGUL SYLLABLE ROEG..HANGUL SYLLABLE ROEH - {0xB8CC, 0xB8CC, prH2, gcLo}, // HANGUL SYLLABLE RYO - {0xB8CD, 0xB8E7, prH3, gcLo}, // [27] HANGUL SYLLABLE RYOG..HANGUL SYLLABLE RYOH - {0xB8E8, 0xB8E8, prH2, gcLo}, // HANGUL SYLLABLE RU - {0xB8E9, 0xB903, prH3, gcLo}, // [27] HANGUL SYLLABLE RUG..HANGUL SYLLABLE RUH - {0xB904, 0xB904, prH2, gcLo}, // HANGUL SYLLABLE RWEO - {0xB905, 0xB91F, prH3, gcLo}, // [27] HANGUL SYLLABLE RWEOG..HANGUL SYLLABLE RWEOH - {0xB920, 0xB920, prH2, gcLo}, // HANGUL SYLLABLE RWE - {0xB921, 0xB93B, prH3, gcLo}, // [27] HANGUL SYLLABLE RWEG..HANGUL SYLLABLE RWEH - {0xB93C, 0xB93C, prH2, gcLo}, // HANGUL SYLLABLE RWI - {0xB93D, 0xB957, prH3, gcLo}, // [27] HANGUL SYLLABLE RWIG..HANGUL SYLLABLE RWIH - {0xB958, 0xB958, prH2, gcLo}, // HANGUL SYLLABLE RYU - {0xB959, 0xB973, prH3, gcLo}, // [27] HANGUL SYLLABLE RYUG..HANGUL SYLLABLE RYUH - {0xB974, 0xB974, prH2, gcLo}, // HANGUL SYLLABLE REU - {0xB975, 0xB98F, prH3, gcLo}, // [27] HANGUL SYLLABLE REUG..HANGUL SYLLABLE REUH - {0xB990, 0xB990, prH2, gcLo}, // HANGUL SYLLABLE RYI - {0xB991, 0xB9AB, prH3, gcLo}, // [27] HANGUL SYLLABLE RYIG..HANGUL SYLLABLE RYIH - {0xB9AC, 0xB9AC, prH2, gcLo}, // HANGUL SYLLABLE RI - {0xB9AD, 0xB9C7, prH3, gcLo}, // [27] HANGUL SYLLABLE RIG..HANGUL SYLLABLE RIH - {0xB9C8, 0xB9C8, prH2, gcLo}, // HANGUL SYLLABLE MA - {0xB9C9, 0xB9E3, prH3, gcLo}, // [27] HANGUL SYLLABLE MAG..HANGUL SYLLABLE MAH - {0xB9E4, 0xB9E4, prH2, gcLo}, // HANGUL SYLLABLE MAE - {0xB9E5, 0xB9FF, prH3, gcLo}, // [27] HANGUL SYLLABLE MAEG..HANGUL SYLLABLE MAEH - {0xBA00, 0xBA00, prH2, gcLo}, // HANGUL SYLLABLE MYA - {0xBA01, 0xBA1B, prH3, gcLo}, // [27] HANGUL SYLLABLE MYAG..HANGUL SYLLABLE MYAH - {0xBA1C, 0xBA1C, prH2, gcLo}, // HANGUL SYLLABLE MYAE - {0xBA1D, 0xBA37, prH3, gcLo}, // [27] HANGUL SYLLABLE MYAEG..HANGUL SYLLABLE MYAEH - {0xBA38, 0xBA38, prH2, gcLo}, // HANGUL SYLLABLE MEO - {0xBA39, 0xBA53, prH3, gcLo}, // [27] HANGUL SYLLABLE MEOG..HANGUL SYLLABLE MEOH - {0xBA54, 0xBA54, prH2, gcLo}, // HANGUL SYLLABLE ME - {0xBA55, 0xBA6F, prH3, gcLo}, // [27] HANGUL SYLLABLE MEG..HANGUL SYLLABLE MEH - {0xBA70, 0xBA70, prH2, gcLo}, // HANGUL SYLLABLE MYEO - {0xBA71, 0xBA8B, prH3, gcLo}, // [27] HANGUL SYLLABLE MYEOG..HANGUL SYLLABLE MYEOH - {0xBA8C, 0xBA8C, prH2, gcLo}, // HANGUL SYLLABLE MYE - {0xBA8D, 0xBAA7, prH3, gcLo}, // [27] HANGUL SYLLABLE MYEG..HANGUL SYLLABLE MYEH - {0xBAA8, 0xBAA8, prH2, gcLo}, // HANGUL SYLLABLE MO - {0xBAA9, 0xBAC3, prH3, gcLo}, // [27] HANGUL SYLLABLE MOG..HANGUL SYLLABLE MOH - {0xBAC4, 0xBAC4, prH2, gcLo}, // HANGUL SYLLABLE MWA - {0xBAC5, 0xBADF, prH3, gcLo}, // [27] HANGUL SYLLABLE MWAG..HANGUL SYLLABLE MWAH - {0xBAE0, 0xBAE0, prH2, gcLo}, // HANGUL SYLLABLE MWAE - {0xBAE1, 0xBAFB, prH3, gcLo}, // [27] HANGUL SYLLABLE MWAEG..HANGUL SYLLABLE MWAEH - {0xBAFC, 0xBAFC, prH2, gcLo}, // HANGUL SYLLABLE MOE - {0xBAFD, 0xBB17, prH3, gcLo}, // [27] HANGUL SYLLABLE MOEG..HANGUL SYLLABLE MOEH - {0xBB18, 0xBB18, prH2, gcLo}, // HANGUL SYLLABLE MYO - {0xBB19, 0xBB33, prH3, gcLo}, // [27] HANGUL SYLLABLE MYOG..HANGUL SYLLABLE MYOH - {0xBB34, 0xBB34, prH2, gcLo}, // HANGUL SYLLABLE MU - {0xBB35, 0xBB4F, prH3, gcLo}, // [27] HANGUL SYLLABLE MUG..HANGUL SYLLABLE MUH - {0xBB50, 0xBB50, prH2, gcLo}, // HANGUL SYLLABLE MWEO - {0xBB51, 0xBB6B, prH3, gcLo}, // [27] HANGUL SYLLABLE MWEOG..HANGUL SYLLABLE MWEOH - {0xBB6C, 0xBB6C, prH2, gcLo}, // HANGUL SYLLABLE MWE - {0xBB6D, 0xBB87, prH3, gcLo}, // [27] HANGUL SYLLABLE MWEG..HANGUL SYLLABLE MWEH - {0xBB88, 0xBB88, prH2, gcLo}, // HANGUL SYLLABLE MWI - {0xBB89, 0xBBA3, prH3, gcLo}, // [27] HANGUL SYLLABLE MWIG..HANGUL SYLLABLE MWIH - {0xBBA4, 0xBBA4, prH2, gcLo}, // HANGUL SYLLABLE MYU - {0xBBA5, 0xBBBF, prH3, gcLo}, // [27] HANGUL SYLLABLE MYUG..HANGUL SYLLABLE MYUH - {0xBBC0, 0xBBC0, prH2, gcLo}, // HANGUL SYLLABLE MEU - {0xBBC1, 0xBBDB, prH3, gcLo}, // [27] HANGUL SYLLABLE MEUG..HANGUL SYLLABLE MEUH - {0xBBDC, 0xBBDC, prH2, gcLo}, // HANGUL SYLLABLE MYI - {0xBBDD, 0xBBF7, prH3, gcLo}, // [27] HANGUL SYLLABLE MYIG..HANGUL SYLLABLE MYIH - {0xBBF8, 0xBBF8, prH2, gcLo}, // HANGUL SYLLABLE MI - {0xBBF9, 0xBC13, prH3, gcLo}, // [27] HANGUL SYLLABLE MIG..HANGUL SYLLABLE MIH - {0xBC14, 0xBC14, prH2, gcLo}, // HANGUL SYLLABLE BA - {0xBC15, 0xBC2F, prH3, gcLo}, // [27] HANGUL SYLLABLE BAG..HANGUL SYLLABLE BAH - {0xBC30, 0xBC30, prH2, gcLo}, // HANGUL SYLLABLE BAE - {0xBC31, 0xBC4B, prH3, gcLo}, // [27] HANGUL SYLLABLE BAEG..HANGUL SYLLABLE BAEH - {0xBC4C, 0xBC4C, prH2, gcLo}, // HANGUL SYLLABLE BYA - {0xBC4D, 0xBC67, prH3, gcLo}, // [27] HANGUL SYLLABLE BYAG..HANGUL SYLLABLE BYAH - {0xBC68, 0xBC68, prH2, gcLo}, // HANGUL SYLLABLE BYAE - {0xBC69, 0xBC83, prH3, gcLo}, // [27] HANGUL SYLLABLE BYAEG..HANGUL SYLLABLE BYAEH - {0xBC84, 0xBC84, prH2, gcLo}, // HANGUL SYLLABLE BEO - {0xBC85, 0xBC9F, prH3, gcLo}, // [27] HANGUL SYLLABLE BEOG..HANGUL SYLLABLE BEOH - {0xBCA0, 0xBCA0, prH2, gcLo}, // HANGUL SYLLABLE BE - {0xBCA1, 0xBCBB, prH3, gcLo}, // [27] HANGUL SYLLABLE BEG..HANGUL SYLLABLE BEH - {0xBCBC, 0xBCBC, prH2, gcLo}, // HANGUL SYLLABLE BYEO - {0xBCBD, 0xBCD7, prH3, gcLo}, // [27] HANGUL SYLLABLE BYEOG..HANGUL SYLLABLE BYEOH - {0xBCD8, 0xBCD8, prH2, gcLo}, // HANGUL SYLLABLE BYE - {0xBCD9, 0xBCF3, prH3, gcLo}, // [27] HANGUL SYLLABLE BYEG..HANGUL SYLLABLE BYEH - {0xBCF4, 0xBCF4, prH2, gcLo}, // HANGUL SYLLABLE BO - {0xBCF5, 0xBD0F, prH3, gcLo}, // [27] HANGUL SYLLABLE BOG..HANGUL SYLLABLE BOH - {0xBD10, 0xBD10, prH2, gcLo}, // HANGUL SYLLABLE BWA - {0xBD11, 0xBD2B, prH3, gcLo}, // [27] HANGUL SYLLABLE BWAG..HANGUL SYLLABLE BWAH - {0xBD2C, 0xBD2C, prH2, gcLo}, // HANGUL SYLLABLE BWAE - {0xBD2D, 0xBD47, prH3, gcLo}, // [27] HANGUL SYLLABLE BWAEG..HANGUL SYLLABLE BWAEH - {0xBD48, 0xBD48, prH2, gcLo}, // HANGUL SYLLABLE BOE - {0xBD49, 0xBD63, prH3, gcLo}, // [27] HANGUL SYLLABLE BOEG..HANGUL SYLLABLE BOEH - {0xBD64, 0xBD64, prH2, gcLo}, // HANGUL SYLLABLE BYO - {0xBD65, 0xBD7F, prH3, gcLo}, // [27] HANGUL SYLLABLE BYOG..HANGUL SYLLABLE BYOH - {0xBD80, 0xBD80, prH2, gcLo}, // HANGUL SYLLABLE BU - {0xBD81, 0xBD9B, prH3, gcLo}, // [27] HANGUL SYLLABLE BUG..HANGUL SYLLABLE BUH - {0xBD9C, 0xBD9C, prH2, gcLo}, // HANGUL SYLLABLE BWEO - {0xBD9D, 0xBDB7, prH3, gcLo}, // [27] HANGUL SYLLABLE BWEOG..HANGUL SYLLABLE BWEOH - {0xBDB8, 0xBDB8, prH2, gcLo}, // HANGUL SYLLABLE BWE - {0xBDB9, 0xBDD3, prH3, gcLo}, // [27] HANGUL SYLLABLE BWEG..HANGUL SYLLABLE BWEH - {0xBDD4, 0xBDD4, prH2, gcLo}, // HANGUL SYLLABLE BWI - {0xBDD5, 0xBDEF, prH3, gcLo}, // [27] HANGUL SYLLABLE BWIG..HANGUL SYLLABLE BWIH - {0xBDF0, 0xBDF0, prH2, gcLo}, // HANGUL SYLLABLE BYU - {0xBDF1, 0xBE0B, prH3, gcLo}, // [27] HANGUL SYLLABLE BYUG..HANGUL SYLLABLE BYUH - {0xBE0C, 0xBE0C, prH2, gcLo}, // HANGUL SYLLABLE BEU - {0xBE0D, 0xBE27, prH3, gcLo}, // [27] HANGUL SYLLABLE BEUG..HANGUL SYLLABLE BEUH - {0xBE28, 0xBE28, prH2, gcLo}, // HANGUL SYLLABLE BYI - {0xBE29, 0xBE43, prH3, gcLo}, // [27] HANGUL SYLLABLE BYIG..HANGUL SYLLABLE BYIH - {0xBE44, 0xBE44, prH2, gcLo}, // HANGUL SYLLABLE BI - {0xBE45, 0xBE5F, prH3, gcLo}, // [27] HANGUL SYLLABLE BIG..HANGUL SYLLABLE BIH - {0xBE60, 0xBE60, prH2, gcLo}, // HANGUL SYLLABLE BBA - {0xBE61, 0xBE7B, prH3, gcLo}, // [27] HANGUL SYLLABLE BBAG..HANGUL SYLLABLE BBAH - {0xBE7C, 0xBE7C, prH2, gcLo}, // HANGUL SYLLABLE BBAE - {0xBE7D, 0xBE97, prH3, gcLo}, // [27] HANGUL SYLLABLE BBAEG..HANGUL SYLLABLE BBAEH - {0xBE98, 0xBE98, prH2, gcLo}, // HANGUL SYLLABLE BBYA - {0xBE99, 0xBEB3, prH3, gcLo}, // [27] HANGUL SYLLABLE BBYAG..HANGUL SYLLABLE BBYAH - {0xBEB4, 0xBEB4, prH2, gcLo}, // HANGUL SYLLABLE BBYAE - {0xBEB5, 0xBECF, prH3, gcLo}, // [27] HANGUL SYLLABLE BBYAEG..HANGUL SYLLABLE BBYAEH - {0xBED0, 0xBED0, prH2, gcLo}, // HANGUL SYLLABLE BBEO - {0xBED1, 0xBEEB, prH3, gcLo}, // [27] HANGUL SYLLABLE BBEOG..HANGUL SYLLABLE BBEOH - {0xBEEC, 0xBEEC, prH2, gcLo}, // HANGUL SYLLABLE BBE - {0xBEED, 0xBF07, prH3, gcLo}, // [27] HANGUL SYLLABLE BBEG..HANGUL SYLLABLE BBEH - {0xBF08, 0xBF08, prH2, gcLo}, // HANGUL SYLLABLE BBYEO - {0xBF09, 0xBF23, prH3, gcLo}, // [27] HANGUL SYLLABLE BBYEOG..HANGUL SYLLABLE BBYEOH - {0xBF24, 0xBF24, prH2, gcLo}, // HANGUL SYLLABLE BBYE - {0xBF25, 0xBF3F, prH3, gcLo}, // [27] HANGUL SYLLABLE BBYEG..HANGUL SYLLABLE BBYEH - {0xBF40, 0xBF40, prH2, gcLo}, // HANGUL SYLLABLE BBO - {0xBF41, 0xBF5B, prH3, gcLo}, // [27] HANGUL SYLLABLE BBOG..HANGUL SYLLABLE BBOH - {0xBF5C, 0xBF5C, prH2, gcLo}, // HANGUL SYLLABLE BBWA - {0xBF5D, 0xBF77, prH3, gcLo}, // [27] HANGUL SYLLABLE BBWAG..HANGUL SYLLABLE BBWAH - {0xBF78, 0xBF78, prH2, gcLo}, // HANGUL SYLLABLE BBWAE - {0xBF79, 0xBF93, prH3, gcLo}, // [27] HANGUL SYLLABLE BBWAEG..HANGUL SYLLABLE BBWAEH - {0xBF94, 0xBF94, prH2, gcLo}, // HANGUL SYLLABLE BBOE - {0xBF95, 0xBFAF, prH3, gcLo}, // [27] HANGUL SYLLABLE BBOEG..HANGUL SYLLABLE BBOEH - {0xBFB0, 0xBFB0, prH2, gcLo}, // HANGUL SYLLABLE BBYO - {0xBFB1, 0xBFCB, prH3, gcLo}, // [27] HANGUL SYLLABLE BBYOG..HANGUL SYLLABLE BBYOH - {0xBFCC, 0xBFCC, prH2, gcLo}, // HANGUL SYLLABLE BBU - {0xBFCD, 0xBFE7, prH3, gcLo}, // [27] HANGUL SYLLABLE BBUG..HANGUL SYLLABLE BBUH - {0xBFE8, 0xBFE8, prH2, gcLo}, // HANGUL SYLLABLE BBWEO - {0xBFE9, 0xC003, prH3, gcLo}, // [27] HANGUL SYLLABLE BBWEOG..HANGUL SYLLABLE BBWEOH - {0xC004, 0xC004, prH2, gcLo}, // HANGUL SYLLABLE BBWE - {0xC005, 0xC01F, prH3, gcLo}, // [27] HANGUL SYLLABLE BBWEG..HANGUL SYLLABLE BBWEH - {0xC020, 0xC020, prH2, gcLo}, // HANGUL SYLLABLE BBWI - {0xC021, 0xC03B, prH3, gcLo}, // [27] HANGUL SYLLABLE BBWIG..HANGUL SYLLABLE BBWIH - {0xC03C, 0xC03C, prH2, gcLo}, // HANGUL SYLLABLE BBYU - {0xC03D, 0xC057, prH3, gcLo}, // [27] HANGUL SYLLABLE BBYUG..HANGUL SYLLABLE BBYUH - {0xC058, 0xC058, prH2, gcLo}, // HANGUL SYLLABLE BBEU - {0xC059, 0xC073, prH3, gcLo}, // [27] HANGUL SYLLABLE BBEUG..HANGUL SYLLABLE BBEUH - {0xC074, 0xC074, prH2, gcLo}, // HANGUL SYLLABLE BBYI - {0xC075, 0xC08F, prH3, gcLo}, // [27] HANGUL SYLLABLE BBYIG..HANGUL SYLLABLE BBYIH - {0xC090, 0xC090, prH2, gcLo}, // HANGUL SYLLABLE BBI - {0xC091, 0xC0AB, prH3, gcLo}, // [27] HANGUL SYLLABLE BBIG..HANGUL SYLLABLE BBIH - {0xC0AC, 0xC0AC, prH2, gcLo}, // HANGUL SYLLABLE SA - {0xC0AD, 0xC0C7, prH3, gcLo}, // [27] HANGUL SYLLABLE SAG..HANGUL SYLLABLE SAH - {0xC0C8, 0xC0C8, prH2, gcLo}, // HANGUL SYLLABLE SAE - {0xC0C9, 0xC0E3, prH3, gcLo}, // [27] HANGUL SYLLABLE SAEG..HANGUL SYLLABLE SAEH - {0xC0E4, 0xC0E4, prH2, gcLo}, // HANGUL SYLLABLE SYA - {0xC0E5, 0xC0FF, prH3, gcLo}, // [27] HANGUL SYLLABLE SYAG..HANGUL SYLLABLE SYAH - {0xC100, 0xC100, prH2, gcLo}, // HANGUL SYLLABLE SYAE - {0xC101, 0xC11B, prH3, gcLo}, // [27] HANGUL SYLLABLE SYAEG..HANGUL SYLLABLE SYAEH - {0xC11C, 0xC11C, prH2, gcLo}, // HANGUL SYLLABLE SEO - {0xC11D, 0xC137, prH3, gcLo}, // [27] HANGUL SYLLABLE SEOG..HANGUL SYLLABLE SEOH - {0xC138, 0xC138, prH2, gcLo}, // HANGUL SYLLABLE SE - {0xC139, 0xC153, prH3, gcLo}, // [27] HANGUL SYLLABLE SEG..HANGUL SYLLABLE SEH - {0xC154, 0xC154, prH2, gcLo}, // HANGUL SYLLABLE SYEO - {0xC155, 0xC16F, prH3, gcLo}, // [27] HANGUL SYLLABLE SYEOG..HANGUL SYLLABLE SYEOH - {0xC170, 0xC170, prH2, gcLo}, // HANGUL SYLLABLE SYE - {0xC171, 0xC18B, prH3, gcLo}, // [27] HANGUL SYLLABLE SYEG..HANGUL SYLLABLE SYEH - {0xC18C, 0xC18C, prH2, gcLo}, // HANGUL SYLLABLE SO - {0xC18D, 0xC1A7, prH3, gcLo}, // [27] HANGUL SYLLABLE SOG..HANGUL SYLLABLE SOH - {0xC1A8, 0xC1A8, prH2, gcLo}, // HANGUL SYLLABLE SWA - {0xC1A9, 0xC1C3, prH3, gcLo}, // [27] HANGUL SYLLABLE SWAG..HANGUL SYLLABLE SWAH - {0xC1C4, 0xC1C4, prH2, gcLo}, // HANGUL SYLLABLE SWAE - {0xC1C5, 0xC1DF, prH3, gcLo}, // [27] HANGUL SYLLABLE SWAEG..HANGUL SYLLABLE SWAEH - {0xC1E0, 0xC1E0, prH2, gcLo}, // HANGUL SYLLABLE SOE - {0xC1E1, 0xC1FB, prH3, gcLo}, // [27] HANGUL SYLLABLE SOEG..HANGUL SYLLABLE SOEH - {0xC1FC, 0xC1FC, prH2, gcLo}, // HANGUL SYLLABLE SYO - {0xC1FD, 0xC217, prH3, gcLo}, // [27] HANGUL SYLLABLE SYOG..HANGUL SYLLABLE SYOH - {0xC218, 0xC218, prH2, gcLo}, // HANGUL SYLLABLE SU - {0xC219, 0xC233, prH3, gcLo}, // [27] HANGUL SYLLABLE SUG..HANGUL SYLLABLE SUH - {0xC234, 0xC234, prH2, gcLo}, // HANGUL SYLLABLE SWEO - {0xC235, 0xC24F, prH3, gcLo}, // [27] HANGUL SYLLABLE SWEOG..HANGUL SYLLABLE SWEOH - {0xC250, 0xC250, prH2, gcLo}, // HANGUL SYLLABLE SWE - {0xC251, 0xC26B, prH3, gcLo}, // [27] HANGUL SYLLABLE SWEG..HANGUL SYLLABLE SWEH - {0xC26C, 0xC26C, prH2, gcLo}, // HANGUL SYLLABLE SWI - {0xC26D, 0xC287, prH3, gcLo}, // [27] HANGUL SYLLABLE SWIG..HANGUL SYLLABLE SWIH - {0xC288, 0xC288, prH2, gcLo}, // HANGUL SYLLABLE SYU - {0xC289, 0xC2A3, prH3, gcLo}, // [27] HANGUL SYLLABLE SYUG..HANGUL SYLLABLE SYUH - {0xC2A4, 0xC2A4, prH2, gcLo}, // HANGUL SYLLABLE SEU - {0xC2A5, 0xC2BF, prH3, gcLo}, // [27] HANGUL SYLLABLE SEUG..HANGUL SYLLABLE SEUH - {0xC2C0, 0xC2C0, prH2, gcLo}, // HANGUL SYLLABLE SYI - {0xC2C1, 0xC2DB, prH3, gcLo}, // [27] HANGUL SYLLABLE SYIG..HANGUL SYLLABLE SYIH - {0xC2DC, 0xC2DC, prH2, gcLo}, // HANGUL SYLLABLE SI - {0xC2DD, 0xC2F7, prH3, gcLo}, // [27] HANGUL SYLLABLE SIG..HANGUL SYLLABLE SIH - {0xC2F8, 0xC2F8, prH2, gcLo}, // HANGUL SYLLABLE SSA - {0xC2F9, 0xC313, prH3, gcLo}, // [27] HANGUL SYLLABLE SSAG..HANGUL SYLLABLE SSAH - {0xC314, 0xC314, prH2, gcLo}, // HANGUL SYLLABLE SSAE - {0xC315, 0xC32F, prH3, gcLo}, // [27] HANGUL SYLLABLE SSAEG..HANGUL SYLLABLE SSAEH - {0xC330, 0xC330, prH2, gcLo}, // HANGUL SYLLABLE SSYA - {0xC331, 0xC34B, prH3, gcLo}, // [27] HANGUL SYLLABLE SSYAG..HANGUL SYLLABLE SSYAH - {0xC34C, 0xC34C, prH2, gcLo}, // HANGUL SYLLABLE SSYAE - {0xC34D, 0xC367, prH3, gcLo}, // [27] HANGUL SYLLABLE SSYAEG..HANGUL SYLLABLE SSYAEH - {0xC368, 0xC368, prH2, gcLo}, // HANGUL SYLLABLE SSEO - {0xC369, 0xC383, prH3, gcLo}, // [27] HANGUL SYLLABLE SSEOG..HANGUL SYLLABLE SSEOH - {0xC384, 0xC384, prH2, gcLo}, // HANGUL SYLLABLE SSE - {0xC385, 0xC39F, prH3, gcLo}, // [27] HANGUL SYLLABLE SSEG..HANGUL SYLLABLE SSEH - {0xC3A0, 0xC3A0, prH2, gcLo}, // HANGUL SYLLABLE SSYEO - {0xC3A1, 0xC3BB, prH3, gcLo}, // [27] HANGUL SYLLABLE SSYEOG..HANGUL SYLLABLE SSYEOH - {0xC3BC, 0xC3BC, prH2, gcLo}, // HANGUL SYLLABLE SSYE - {0xC3BD, 0xC3D7, prH3, gcLo}, // [27] HANGUL SYLLABLE SSYEG..HANGUL SYLLABLE SSYEH - {0xC3D8, 0xC3D8, prH2, gcLo}, // HANGUL SYLLABLE SSO - {0xC3D9, 0xC3F3, prH3, gcLo}, // [27] HANGUL SYLLABLE SSOG..HANGUL SYLLABLE SSOH - {0xC3F4, 0xC3F4, prH2, gcLo}, // HANGUL SYLLABLE SSWA - {0xC3F5, 0xC40F, prH3, gcLo}, // [27] HANGUL SYLLABLE SSWAG..HANGUL SYLLABLE SSWAH - {0xC410, 0xC410, prH2, gcLo}, // HANGUL SYLLABLE SSWAE - {0xC411, 0xC42B, prH3, gcLo}, // [27] HANGUL SYLLABLE SSWAEG..HANGUL SYLLABLE SSWAEH - {0xC42C, 0xC42C, prH2, gcLo}, // HANGUL SYLLABLE SSOE - {0xC42D, 0xC447, prH3, gcLo}, // [27] HANGUL SYLLABLE SSOEG..HANGUL SYLLABLE SSOEH - {0xC448, 0xC448, prH2, gcLo}, // HANGUL SYLLABLE SSYO - {0xC449, 0xC463, prH3, gcLo}, // [27] HANGUL SYLLABLE SSYOG..HANGUL SYLLABLE SSYOH - {0xC464, 0xC464, prH2, gcLo}, // HANGUL SYLLABLE SSU - {0xC465, 0xC47F, prH3, gcLo}, // [27] HANGUL SYLLABLE SSUG..HANGUL SYLLABLE SSUH - {0xC480, 0xC480, prH2, gcLo}, // HANGUL SYLLABLE SSWEO - {0xC481, 0xC49B, prH3, gcLo}, // [27] HANGUL SYLLABLE SSWEOG..HANGUL SYLLABLE SSWEOH - {0xC49C, 0xC49C, prH2, gcLo}, // HANGUL SYLLABLE SSWE - {0xC49D, 0xC4B7, prH3, gcLo}, // [27] HANGUL SYLLABLE SSWEG..HANGUL SYLLABLE SSWEH - {0xC4B8, 0xC4B8, prH2, gcLo}, // HANGUL SYLLABLE SSWI - {0xC4B9, 0xC4D3, prH3, gcLo}, // [27] HANGUL SYLLABLE SSWIG..HANGUL SYLLABLE SSWIH - {0xC4D4, 0xC4D4, prH2, gcLo}, // HANGUL SYLLABLE SSYU - {0xC4D5, 0xC4EF, prH3, gcLo}, // [27] HANGUL SYLLABLE SSYUG..HANGUL SYLLABLE SSYUH - {0xC4F0, 0xC4F0, prH2, gcLo}, // HANGUL SYLLABLE SSEU - {0xC4F1, 0xC50B, prH3, gcLo}, // [27] HANGUL SYLLABLE SSEUG..HANGUL SYLLABLE SSEUH - {0xC50C, 0xC50C, prH2, gcLo}, // HANGUL SYLLABLE SSYI - {0xC50D, 0xC527, prH3, gcLo}, // [27] HANGUL SYLLABLE SSYIG..HANGUL SYLLABLE SSYIH - {0xC528, 0xC528, prH2, gcLo}, // HANGUL SYLLABLE SSI - {0xC529, 0xC543, prH3, gcLo}, // [27] HANGUL SYLLABLE SSIG..HANGUL SYLLABLE SSIH - {0xC544, 0xC544, prH2, gcLo}, // HANGUL SYLLABLE A - {0xC545, 0xC55F, prH3, gcLo}, // [27] HANGUL SYLLABLE AG..HANGUL SYLLABLE AH - {0xC560, 0xC560, prH2, gcLo}, // HANGUL SYLLABLE AE - {0xC561, 0xC57B, prH3, gcLo}, // [27] HANGUL SYLLABLE AEG..HANGUL SYLLABLE AEH - {0xC57C, 0xC57C, prH2, gcLo}, // HANGUL SYLLABLE YA - {0xC57D, 0xC597, prH3, gcLo}, // [27] HANGUL SYLLABLE YAG..HANGUL SYLLABLE YAH - {0xC598, 0xC598, prH2, gcLo}, // HANGUL SYLLABLE YAE - {0xC599, 0xC5B3, prH3, gcLo}, // [27] HANGUL SYLLABLE YAEG..HANGUL SYLLABLE YAEH - {0xC5B4, 0xC5B4, prH2, gcLo}, // HANGUL SYLLABLE EO - {0xC5B5, 0xC5CF, prH3, gcLo}, // [27] HANGUL SYLLABLE EOG..HANGUL SYLLABLE EOH - {0xC5D0, 0xC5D0, prH2, gcLo}, // HANGUL SYLLABLE E - {0xC5D1, 0xC5EB, prH3, gcLo}, // [27] HANGUL SYLLABLE EG..HANGUL SYLLABLE EH - {0xC5EC, 0xC5EC, prH2, gcLo}, // HANGUL SYLLABLE YEO - {0xC5ED, 0xC607, prH3, gcLo}, // [27] HANGUL SYLLABLE YEOG..HANGUL SYLLABLE YEOH - {0xC608, 0xC608, prH2, gcLo}, // HANGUL SYLLABLE YE - {0xC609, 0xC623, prH3, gcLo}, // [27] HANGUL SYLLABLE YEG..HANGUL SYLLABLE YEH - {0xC624, 0xC624, prH2, gcLo}, // HANGUL SYLLABLE O - {0xC625, 0xC63F, prH3, gcLo}, // [27] HANGUL SYLLABLE OG..HANGUL SYLLABLE OH - {0xC640, 0xC640, prH2, gcLo}, // HANGUL SYLLABLE WA - {0xC641, 0xC65B, prH3, gcLo}, // [27] HANGUL SYLLABLE WAG..HANGUL SYLLABLE WAH - {0xC65C, 0xC65C, prH2, gcLo}, // HANGUL SYLLABLE WAE - {0xC65D, 0xC677, prH3, gcLo}, // [27] HANGUL SYLLABLE WAEG..HANGUL SYLLABLE WAEH - {0xC678, 0xC678, prH2, gcLo}, // HANGUL SYLLABLE OE - {0xC679, 0xC693, prH3, gcLo}, // [27] HANGUL SYLLABLE OEG..HANGUL SYLLABLE OEH - {0xC694, 0xC694, prH2, gcLo}, // HANGUL SYLLABLE YO - {0xC695, 0xC6AF, prH3, gcLo}, // [27] HANGUL SYLLABLE YOG..HANGUL SYLLABLE YOH - {0xC6B0, 0xC6B0, prH2, gcLo}, // HANGUL SYLLABLE U - {0xC6B1, 0xC6CB, prH3, gcLo}, // [27] HANGUL SYLLABLE UG..HANGUL SYLLABLE UH - {0xC6CC, 0xC6CC, prH2, gcLo}, // HANGUL SYLLABLE WEO - {0xC6CD, 0xC6E7, prH3, gcLo}, // [27] HANGUL SYLLABLE WEOG..HANGUL SYLLABLE WEOH - {0xC6E8, 0xC6E8, prH2, gcLo}, // HANGUL SYLLABLE WE - {0xC6E9, 0xC703, prH3, gcLo}, // [27] HANGUL SYLLABLE WEG..HANGUL SYLLABLE WEH - {0xC704, 0xC704, prH2, gcLo}, // HANGUL SYLLABLE WI - {0xC705, 0xC71F, prH3, gcLo}, // [27] HANGUL SYLLABLE WIG..HANGUL SYLLABLE WIH - {0xC720, 0xC720, prH2, gcLo}, // HANGUL SYLLABLE YU - {0xC721, 0xC73B, prH3, gcLo}, // [27] HANGUL SYLLABLE YUG..HANGUL SYLLABLE YUH - {0xC73C, 0xC73C, prH2, gcLo}, // HANGUL SYLLABLE EU - {0xC73D, 0xC757, prH3, gcLo}, // [27] HANGUL SYLLABLE EUG..HANGUL SYLLABLE EUH - {0xC758, 0xC758, prH2, gcLo}, // HANGUL SYLLABLE YI - {0xC759, 0xC773, prH3, gcLo}, // [27] HANGUL SYLLABLE YIG..HANGUL SYLLABLE YIH - {0xC774, 0xC774, prH2, gcLo}, // HANGUL SYLLABLE I - {0xC775, 0xC78F, prH3, gcLo}, // [27] HANGUL SYLLABLE IG..HANGUL SYLLABLE IH - {0xC790, 0xC790, prH2, gcLo}, // HANGUL SYLLABLE JA - {0xC791, 0xC7AB, prH3, gcLo}, // [27] HANGUL SYLLABLE JAG..HANGUL SYLLABLE JAH - {0xC7AC, 0xC7AC, prH2, gcLo}, // HANGUL SYLLABLE JAE - {0xC7AD, 0xC7C7, prH3, gcLo}, // [27] HANGUL SYLLABLE JAEG..HANGUL SYLLABLE JAEH - {0xC7C8, 0xC7C8, prH2, gcLo}, // HANGUL SYLLABLE JYA - {0xC7C9, 0xC7E3, prH3, gcLo}, // [27] HANGUL SYLLABLE JYAG..HANGUL SYLLABLE JYAH - {0xC7E4, 0xC7E4, prH2, gcLo}, // HANGUL SYLLABLE JYAE - {0xC7E5, 0xC7FF, prH3, gcLo}, // [27] HANGUL SYLLABLE JYAEG..HANGUL SYLLABLE JYAEH - {0xC800, 0xC800, prH2, gcLo}, // HANGUL SYLLABLE JEO - {0xC801, 0xC81B, prH3, gcLo}, // [27] HANGUL SYLLABLE JEOG..HANGUL SYLLABLE JEOH - {0xC81C, 0xC81C, prH2, gcLo}, // HANGUL SYLLABLE JE - {0xC81D, 0xC837, prH3, gcLo}, // [27] HANGUL SYLLABLE JEG..HANGUL SYLLABLE JEH - {0xC838, 0xC838, prH2, gcLo}, // HANGUL SYLLABLE JYEO - {0xC839, 0xC853, prH3, gcLo}, // [27] HANGUL SYLLABLE JYEOG..HANGUL SYLLABLE JYEOH - {0xC854, 0xC854, prH2, gcLo}, // HANGUL SYLLABLE JYE - {0xC855, 0xC86F, prH3, gcLo}, // [27] HANGUL SYLLABLE JYEG..HANGUL SYLLABLE JYEH - {0xC870, 0xC870, prH2, gcLo}, // HANGUL SYLLABLE JO - {0xC871, 0xC88B, prH3, gcLo}, // [27] HANGUL SYLLABLE JOG..HANGUL SYLLABLE JOH - {0xC88C, 0xC88C, prH2, gcLo}, // HANGUL SYLLABLE JWA - {0xC88D, 0xC8A7, prH3, gcLo}, // [27] HANGUL SYLLABLE JWAG..HANGUL SYLLABLE JWAH - {0xC8A8, 0xC8A8, prH2, gcLo}, // HANGUL SYLLABLE JWAE - {0xC8A9, 0xC8C3, prH3, gcLo}, // [27] HANGUL SYLLABLE JWAEG..HANGUL SYLLABLE JWAEH - {0xC8C4, 0xC8C4, prH2, gcLo}, // HANGUL SYLLABLE JOE - {0xC8C5, 0xC8DF, prH3, gcLo}, // [27] HANGUL SYLLABLE JOEG..HANGUL SYLLABLE JOEH - {0xC8E0, 0xC8E0, prH2, gcLo}, // HANGUL SYLLABLE JYO - {0xC8E1, 0xC8FB, prH3, gcLo}, // [27] HANGUL SYLLABLE JYOG..HANGUL SYLLABLE JYOH - {0xC8FC, 0xC8FC, prH2, gcLo}, // HANGUL SYLLABLE JU - {0xC8FD, 0xC917, prH3, gcLo}, // [27] HANGUL SYLLABLE JUG..HANGUL SYLLABLE JUH - {0xC918, 0xC918, prH2, gcLo}, // HANGUL SYLLABLE JWEO - {0xC919, 0xC933, prH3, gcLo}, // [27] HANGUL SYLLABLE JWEOG..HANGUL SYLLABLE JWEOH - {0xC934, 0xC934, prH2, gcLo}, // HANGUL SYLLABLE JWE - {0xC935, 0xC94F, prH3, gcLo}, // [27] HANGUL SYLLABLE JWEG..HANGUL SYLLABLE JWEH - {0xC950, 0xC950, prH2, gcLo}, // HANGUL SYLLABLE JWI - {0xC951, 0xC96B, prH3, gcLo}, // [27] HANGUL SYLLABLE JWIG..HANGUL SYLLABLE JWIH - {0xC96C, 0xC96C, prH2, gcLo}, // HANGUL SYLLABLE JYU - {0xC96D, 0xC987, prH3, gcLo}, // [27] HANGUL SYLLABLE JYUG..HANGUL SYLLABLE JYUH - {0xC988, 0xC988, prH2, gcLo}, // HANGUL SYLLABLE JEU - {0xC989, 0xC9A3, prH3, gcLo}, // [27] HANGUL SYLLABLE JEUG..HANGUL SYLLABLE JEUH - {0xC9A4, 0xC9A4, prH2, gcLo}, // HANGUL SYLLABLE JYI - {0xC9A5, 0xC9BF, prH3, gcLo}, // [27] HANGUL SYLLABLE JYIG..HANGUL SYLLABLE JYIH - {0xC9C0, 0xC9C0, prH2, gcLo}, // HANGUL SYLLABLE JI - {0xC9C1, 0xC9DB, prH3, gcLo}, // [27] HANGUL SYLLABLE JIG..HANGUL SYLLABLE JIH - {0xC9DC, 0xC9DC, prH2, gcLo}, // HANGUL SYLLABLE JJA - {0xC9DD, 0xC9F7, prH3, gcLo}, // [27] HANGUL SYLLABLE JJAG..HANGUL SYLLABLE JJAH - {0xC9F8, 0xC9F8, prH2, gcLo}, // HANGUL SYLLABLE JJAE - {0xC9F9, 0xCA13, prH3, gcLo}, // [27] HANGUL SYLLABLE JJAEG..HANGUL SYLLABLE JJAEH - {0xCA14, 0xCA14, prH2, gcLo}, // HANGUL SYLLABLE JJYA - {0xCA15, 0xCA2F, prH3, gcLo}, // [27] HANGUL SYLLABLE JJYAG..HANGUL SYLLABLE JJYAH - {0xCA30, 0xCA30, prH2, gcLo}, // HANGUL SYLLABLE JJYAE - {0xCA31, 0xCA4B, prH3, gcLo}, // [27] HANGUL SYLLABLE JJYAEG..HANGUL SYLLABLE JJYAEH - {0xCA4C, 0xCA4C, prH2, gcLo}, // HANGUL SYLLABLE JJEO - {0xCA4D, 0xCA67, prH3, gcLo}, // [27] HANGUL SYLLABLE JJEOG..HANGUL SYLLABLE JJEOH - {0xCA68, 0xCA68, prH2, gcLo}, // HANGUL SYLLABLE JJE - {0xCA69, 0xCA83, prH3, gcLo}, // [27] HANGUL SYLLABLE JJEG..HANGUL SYLLABLE JJEH - {0xCA84, 0xCA84, prH2, gcLo}, // HANGUL SYLLABLE JJYEO - {0xCA85, 0xCA9F, prH3, gcLo}, // [27] HANGUL SYLLABLE JJYEOG..HANGUL SYLLABLE JJYEOH - {0xCAA0, 0xCAA0, prH2, gcLo}, // HANGUL SYLLABLE JJYE - {0xCAA1, 0xCABB, prH3, gcLo}, // [27] HANGUL SYLLABLE JJYEG..HANGUL SYLLABLE JJYEH - {0xCABC, 0xCABC, prH2, gcLo}, // HANGUL SYLLABLE JJO - {0xCABD, 0xCAD7, prH3, gcLo}, // [27] HANGUL SYLLABLE JJOG..HANGUL SYLLABLE JJOH - {0xCAD8, 0xCAD8, prH2, gcLo}, // HANGUL SYLLABLE JJWA - {0xCAD9, 0xCAF3, prH3, gcLo}, // [27] HANGUL SYLLABLE JJWAG..HANGUL SYLLABLE JJWAH - {0xCAF4, 0xCAF4, prH2, gcLo}, // HANGUL SYLLABLE JJWAE - {0xCAF5, 0xCB0F, prH3, gcLo}, // [27] HANGUL SYLLABLE JJWAEG..HANGUL SYLLABLE JJWAEH - {0xCB10, 0xCB10, prH2, gcLo}, // HANGUL SYLLABLE JJOE - {0xCB11, 0xCB2B, prH3, gcLo}, // [27] HANGUL SYLLABLE JJOEG..HANGUL SYLLABLE JJOEH - {0xCB2C, 0xCB2C, prH2, gcLo}, // HANGUL SYLLABLE JJYO - {0xCB2D, 0xCB47, prH3, gcLo}, // [27] HANGUL SYLLABLE JJYOG..HANGUL SYLLABLE JJYOH - {0xCB48, 0xCB48, prH2, gcLo}, // HANGUL SYLLABLE JJU - {0xCB49, 0xCB63, prH3, gcLo}, // [27] HANGUL SYLLABLE JJUG..HANGUL SYLLABLE JJUH - {0xCB64, 0xCB64, prH2, gcLo}, // HANGUL SYLLABLE JJWEO - {0xCB65, 0xCB7F, prH3, gcLo}, // [27] HANGUL SYLLABLE JJWEOG..HANGUL SYLLABLE JJWEOH - {0xCB80, 0xCB80, prH2, gcLo}, // HANGUL SYLLABLE JJWE - {0xCB81, 0xCB9B, prH3, gcLo}, // [27] HANGUL SYLLABLE JJWEG..HANGUL SYLLABLE JJWEH - {0xCB9C, 0xCB9C, prH2, gcLo}, // HANGUL SYLLABLE JJWI - {0xCB9D, 0xCBB7, prH3, gcLo}, // [27] HANGUL SYLLABLE JJWIG..HANGUL SYLLABLE JJWIH - {0xCBB8, 0xCBB8, prH2, gcLo}, // HANGUL SYLLABLE JJYU - {0xCBB9, 0xCBD3, prH3, gcLo}, // [27] HANGUL SYLLABLE JJYUG..HANGUL SYLLABLE JJYUH - {0xCBD4, 0xCBD4, prH2, gcLo}, // HANGUL SYLLABLE JJEU - {0xCBD5, 0xCBEF, prH3, gcLo}, // [27] HANGUL SYLLABLE JJEUG..HANGUL SYLLABLE JJEUH - {0xCBF0, 0xCBF0, prH2, gcLo}, // HANGUL SYLLABLE JJYI - {0xCBF1, 0xCC0B, prH3, gcLo}, // [27] HANGUL SYLLABLE JJYIG..HANGUL SYLLABLE JJYIH - {0xCC0C, 0xCC0C, prH2, gcLo}, // HANGUL SYLLABLE JJI - {0xCC0D, 0xCC27, prH3, gcLo}, // [27] HANGUL SYLLABLE JJIG..HANGUL SYLLABLE JJIH - {0xCC28, 0xCC28, prH2, gcLo}, // HANGUL SYLLABLE CA - {0xCC29, 0xCC43, prH3, gcLo}, // [27] HANGUL SYLLABLE CAG..HANGUL SYLLABLE CAH - {0xCC44, 0xCC44, prH2, gcLo}, // HANGUL SYLLABLE CAE - {0xCC45, 0xCC5F, prH3, gcLo}, // [27] HANGUL SYLLABLE CAEG..HANGUL SYLLABLE CAEH - {0xCC60, 0xCC60, prH2, gcLo}, // HANGUL SYLLABLE CYA - {0xCC61, 0xCC7B, prH3, gcLo}, // [27] HANGUL SYLLABLE CYAG..HANGUL SYLLABLE CYAH - {0xCC7C, 0xCC7C, prH2, gcLo}, // HANGUL SYLLABLE CYAE - {0xCC7D, 0xCC97, prH3, gcLo}, // [27] HANGUL SYLLABLE CYAEG..HANGUL SYLLABLE CYAEH - {0xCC98, 0xCC98, prH2, gcLo}, // HANGUL SYLLABLE CEO - {0xCC99, 0xCCB3, prH3, gcLo}, // [27] HANGUL SYLLABLE CEOG..HANGUL SYLLABLE CEOH - {0xCCB4, 0xCCB4, prH2, gcLo}, // HANGUL SYLLABLE CE - {0xCCB5, 0xCCCF, prH3, gcLo}, // [27] HANGUL SYLLABLE CEG..HANGUL SYLLABLE CEH - {0xCCD0, 0xCCD0, prH2, gcLo}, // HANGUL SYLLABLE CYEO - {0xCCD1, 0xCCEB, prH3, gcLo}, // [27] HANGUL SYLLABLE CYEOG..HANGUL SYLLABLE CYEOH - {0xCCEC, 0xCCEC, prH2, gcLo}, // HANGUL SYLLABLE CYE - {0xCCED, 0xCD07, prH3, gcLo}, // [27] HANGUL SYLLABLE CYEG..HANGUL SYLLABLE CYEH - {0xCD08, 0xCD08, prH2, gcLo}, // HANGUL SYLLABLE CO - {0xCD09, 0xCD23, prH3, gcLo}, // [27] HANGUL SYLLABLE COG..HANGUL SYLLABLE COH - {0xCD24, 0xCD24, prH2, gcLo}, // HANGUL SYLLABLE CWA - {0xCD25, 0xCD3F, prH3, gcLo}, // [27] HANGUL SYLLABLE CWAG..HANGUL SYLLABLE CWAH - {0xCD40, 0xCD40, prH2, gcLo}, // HANGUL SYLLABLE CWAE - {0xCD41, 0xCD5B, prH3, gcLo}, // [27] HANGUL SYLLABLE CWAEG..HANGUL SYLLABLE CWAEH - {0xCD5C, 0xCD5C, prH2, gcLo}, // HANGUL SYLLABLE COE - {0xCD5D, 0xCD77, prH3, gcLo}, // [27] HANGUL SYLLABLE COEG..HANGUL SYLLABLE COEH - {0xCD78, 0xCD78, prH2, gcLo}, // HANGUL SYLLABLE CYO - {0xCD79, 0xCD93, prH3, gcLo}, // [27] HANGUL SYLLABLE CYOG..HANGUL SYLLABLE CYOH - {0xCD94, 0xCD94, prH2, gcLo}, // HANGUL SYLLABLE CU - {0xCD95, 0xCDAF, prH3, gcLo}, // [27] HANGUL SYLLABLE CUG..HANGUL SYLLABLE CUH - {0xCDB0, 0xCDB0, prH2, gcLo}, // HANGUL SYLLABLE CWEO - {0xCDB1, 0xCDCB, prH3, gcLo}, // [27] HANGUL SYLLABLE CWEOG..HANGUL SYLLABLE CWEOH - {0xCDCC, 0xCDCC, prH2, gcLo}, // HANGUL SYLLABLE CWE - {0xCDCD, 0xCDE7, prH3, gcLo}, // [27] HANGUL SYLLABLE CWEG..HANGUL SYLLABLE CWEH - {0xCDE8, 0xCDE8, prH2, gcLo}, // HANGUL SYLLABLE CWI - {0xCDE9, 0xCE03, prH3, gcLo}, // [27] HANGUL SYLLABLE CWIG..HANGUL SYLLABLE CWIH - {0xCE04, 0xCE04, prH2, gcLo}, // HANGUL SYLLABLE CYU - {0xCE05, 0xCE1F, prH3, gcLo}, // [27] HANGUL SYLLABLE CYUG..HANGUL SYLLABLE CYUH - {0xCE20, 0xCE20, prH2, gcLo}, // HANGUL SYLLABLE CEU - {0xCE21, 0xCE3B, prH3, gcLo}, // [27] HANGUL SYLLABLE CEUG..HANGUL SYLLABLE CEUH - {0xCE3C, 0xCE3C, prH2, gcLo}, // HANGUL SYLLABLE CYI - {0xCE3D, 0xCE57, prH3, gcLo}, // [27] HANGUL SYLLABLE CYIG..HANGUL SYLLABLE CYIH - {0xCE58, 0xCE58, prH2, gcLo}, // HANGUL SYLLABLE CI - {0xCE59, 0xCE73, prH3, gcLo}, // [27] HANGUL SYLLABLE CIG..HANGUL SYLLABLE CIH - {0xCE74, 0xCE74, prH2, gcLo}, // HANGUL SYLLABLE KA - {0xCE75, 0xCE8F, prH3, gcLo}, // [27] HANGUL SYLLABLE KAG..HANGUL SYLLABLE KAH - {0xCE90, 0xCE90, prH2, gcLo}, // HANGUL SYLLABLE KAE - {0xCE91, 0xCEAB, prH3, gcLo}, // [27] HANGUL SYLLABLE KAEG..HANGUL SYLLABLE KAEH - {0xCEAC, 0xCEAC, prH2, gcLo}, // HANGUL SYLLABLE KYA - {0xCEAD, 0xCEC7, prH3, gcLo}, // [27] HANGUL SYLLABLE KYAG..HANGUL SYLLABLE KYAH - {0xCEC8, 0xCEC8, prH2, gcLo}, // HANGUL SYLLABLE KYAE - {0xCEC9, 0xCEE3, prH3, gcLo}, // [27] HANGUL SYLLABLE KYAEG..HANGUL SYLLABLE KYAEH - {0xCEE4, 0xCEE4, prH2, gcLo}, // HANGUL SYLLABLE KEO - {0xCEE5, 0xCEFF, prH3, gcLo}, // [27] HANGUL SYLLABLE KEOG..HANGUL SYLLABLE KEOH - {0xCF00, 0xCF00, prH2, gcLo}, // HANGUL SYLLABLE KE - {0xCF01, 0xCF1B, prH3, gcLo}, // [27] HANGUL SYLLABLE KEG..HANGUL SYLLABLE KEH - {0xCF1C, 0xCF1C, prH2, gcLo}, // HANGUL SYLLABLE KYEO - {0xCF1D, 0xCF37, prH3, gcLo}, // [27] HANGUL SYLLABLE KYEOG..HANGUL SYLLABLE KYEOH - {0xCF38, 0xCF38, prH2, gcLo}, // HANGUL SYLLABLE KYE - {0xCF39, 0xCF53, prH3, gcLo}, // [27] HANGUL SYLLABLE KYEG..HANGUL SYLLABLE KYEH - {0xCF54, 0xCF54, prH2, gcLo}, // HANGUL SYLLABLE KO - {0xCF55, 0xCF6F, prH3, gcLo}, // [27] HANGUL SYLLABLE KOG..HANGUL SYLLABLE KOH - {0xCF70, 0xCF70, prH2, gcLo}, // HANGUL SYLLABLE KWA - {0xCF71, 0xCF8B, prH3, gcLo}, // [27] HANGUL SYLLABLE KWAG..HANGUL SYLLABLE KWAH - {0xCF8C, 0xCF8C, prH2, gcLo}, // HANGUL SYLLABLE KWAE - {0xCF8D, 0xCFA7, prH3, gcLo}, // [27] HANGUL SYLLABLE KWAEG..HANGUL SYLLABLE KWAEH - {0xCFA8, 0xCFA8, prH2, gcLo}, // HANGUL SYLLABLE KOE - {0xCFA9, 0xCFC3, prH3, gcLo}, // [27] HANGUL SYLLABLE KOEG..HANGUL SYLLABLE KOEH - {0xCFC4, 0xCFC4, prH2, gcLo}, // HANGUL SYLLABLE KYO - {0xCFC5, 0xCFDF, prH3, gcLo}, // [27] HANGUL SYLLABLE KYOG..HANGUL SYLLABLE KYOH - {0xCFE0, 0xCFE0, prH2, gcLo}, // HANGUL SYLLABLE KU - {0xCFE1, 0xCFFB, prH3, gcLo}, // [27] HANGUL SYLLABLE KUG..HANGUL SYLLABLE KUH - {0xCFFC, 0xCFFC, prH2, gcLo}, // HANGUL SYLLABLE KWEO - {0xCFFD, 0xD017, prH3, gcLo}, // [27] HANGUL SYLLABLE KWEOG..HANGUL SYLLABLE KWEOH - {0xD018, 0xD018, prH2, gcLo}, // HANGUL SYLLABLE KWE - {0xD019, 0xD033, prH3, gcLo}, // [27] HANGUL SYLLABLE KWEG..HANGUL SYLLABLE KWEH - {0xD034, 0xD034, prH2, gcLo}, // HANGUL SYLLABLE KWI - {0xD035, 0xD04F, prH3, gcLo}, // [27] HANGUL SYLLABLE KWIG..HANGUL SYLLABLE KWIH - {0xD050, 0xD050, prH2, gcLo}, // HANGUL SYLLABLE KYU - {0xD051, 0xD06B, prH3, gcLo}, // [27] HANGUL SYLLABLE KYUG..HANGUL SYLLABLE KYUH - {0xD06C, 0xD06C, prH2, gcLo}, // HANGUL SYLLABLE KEU - {0xD06D, 0xD087, prH3, gcLo}, // [27] HANGUL SYLLABLE KEUG..HANGUL SYLLABLE KEUH - {0xD088, 0xD088, prH2, gcLo}, // HANGUL SYLLABLE KYI - {0xD089, 0xD0A3, prH3, gcLo}, // [27] HANGUL SYLLABLE KYIG..HANGUL SYLLABLE KYIH - {0xD0A4, 0xD0A4, prH2, gcLo}, // HANGUL SYLLABLE KI - {0xD0A5, 0xD0BF, prH3, gcLo}, // [27] HANGUL SYLLABLE KIG..HANGUL SYLLABLE KIH - {0xD0C0, 0xD0C0, prH2, gcLo}, // HANGUL SYLLABLE TA - {0xD0C1, 0xD0DB, prH3, gcLo}, // [27] HANGUL SYLLABLE TAG..HANGUL SYLLABLE TAH - {0xD0DC, 0xD0DC, prH2, gcLo}, // HANGUL SYLLABLE TAE - {0xD0DD, 0xD0F7, prH3, gcLo}, // [27] HANGUL SYLLABLE TAEG..HANGUL SYLLABLE TAEH - {0xD0F8, 0xD0F8, prH2, gcLo}, // HANGUL SYLLABLE TYA - {0xD0F9, 0xD113, prH3, gcLo}, // [27] HANGUL SYLLABLE TYAG..HANGUL SYLLABLE TYAH - {0xD114, 0xD114, prH2, gcLo}, // HANGUL SYLLABLE TYAE - {0xD115, 0xD12F, prH3, gcLo}, // [27] HANGUL SYLLABLE TYAEG..HANGUL SYLLABLE TYAEH - {0xD130, 0xD130, prH2, gcLo}, // HANGUL SYLLABLE TEO - {0xD131, 0xD14B, prH3, gcLo}, // [27] HANGUL SYLLABLE TEOG..HANGUL SYLLABLE TEOH - {0xD14C, 0xD14C, prH2, gcLo}, // HANGUL SYLLABLE TE - {0xD14D, 0xD167, prH3, gcLo}, // [27] HANGUL SYLLABLE TEG..HANGUL SYLLABLE TEH - {0xD168, 0xD168, prH2, gcLo}, // HANGUL SYLLABLE TYEO - {0xD169, 0xD183, prH3, gcLo}, // [27] HANGUL SYLLABLE TYEOG..HANGUL SYLLABLE TYEOH - {0xD184, 0xD184, prH2, gcLo}, // HANGUL SYLLABLE TYE - {0xD185, 0xD19F, prH3, gcLo}, // [27] HANGUL SYLLABLE TYEG..HANGUL SYLLABLE TYEH - {0xD1A0, 0xD1A0, prH2, gcLo}, // HANGUL SYLLABLE TO - {0xD1A1, 0xD1BB, prH3, gcLo}, // [27] HANGUL SYLLABLE TOG..HANGUL SYLLABLE TOH - {0xD1BC, 0xD1BC, prH2, gcLo}, // HANGUL SYLLABLE TWA - {0xD1BD, 0xD1D7, prH3, gcLo}, // [27] HANGUL SYLLABLE TWAG..HANGUL SYLLABLE TWAH - {0xD1D8, 0xD1D8, prH2, gcLo}, // HANGUL SYLLABLE TWAE - {0xD1D9, 0xD1F3, prH3, gcLo}, // [27] HANGUL SYLLABLE TWAEG..HANGUL SYLLABLE TWAEH - {0xD1F4, 0xD1F4, prH2, gcLo}, // HANGUL SYLLABLE TOE - {0xD1F5, 0xD20F, prH3, gcLo}, // [27] HANGUL SYLLABLE TOEG..HANGUL SYLLABLE TOEH - {0xD210, 0xD210, prH2, gcLo}, // HANGUL SYLLABLE TYO - {0xD211, 0xD22B, prH3, gcLo}, // [27] HANGUL SYLLABLE TYOG..HANGUL SYLLABLE TYOH - {0xD22C, 0xD22C, prH2, gcLo}, // HANGUL SYLLABLE TU - {0xD22D, 0xD247, prH3, gcLo}, // [27] HANGUL SYLLABLE TUG..HANGUL SYLLABLE TUH - {0xD248, 0xD248, prH2, gcLo}, // HANGUL SYLLABLE TWEO - {0xD249, 0xD263, prH3, gcLo}, // [27] HANGUL SYLLABLE TWEOG..HANGUL SYLLABLE TWEOH - {0xD264, 0xD264, prH2, gcLo}, // HANGUL SYLLABLE TWE - {0xD265, 0xD27F, prH3, gcLo}, // [27] HANGUL SYLLABLE TWEG..HANGUL SYLLABLE TWEH - {0xD280, 0xD280, prH2, gcLo}, // HANGUL SYLLABLE TWI - {0xD281, 0xD29B, prH3, gcLo}, // [27] HANGUL SYLLABLE TWIG..HANGUL SYLLABLE TWIH - {0xD29C, 0xD29C, prH2, gcLo}, // HANGUL SYLLABLE TYU - {0xD29D, 0xD2B7, prH3, gcLo}, // [27] HANGUL SYLLABLE TYUG..HANGUL SYLLABLE TYUH - {0xD2B8, 0xD2B8, prH2, gcLo}, // HANGUL SYLLABLE TEU - {0xD2B9, 0xD2D3, prH3, gcLo}, // [27] HANGUL SYLLABLE TEUG..HANGUL SYLLABLE TEUH - {0xD2D4, 0xD2D4, prH2, gcLo}, // HANGUL SYLLABLE TYI - {0xD2D5, 0xD2EF, prH3, gcLo}, // [27] HANGUL SYLLABLE TYIG..HANGUL SYLLABLE TYIH - {0xD2F0, 0xD2F0, prH2, gcLo}, // HANGUL SYLLABLE TI - {0xD2F1, 0xD30B, prH3, gcLo}, // [27] HANGUL SYLLABLE TIG..HANGUL SYLLABLE TIH - {0xD30C, 0xD30C, prH2, gcLo}, // HANGUL SYLLABLE PA - {0xD30D, 0xD327, prH3, gcLo}, // [27] HANGUL SYLLABLE PAG..HANGUL SYLLABLE PAH - {0xD328, 0xD328, prH2, gcLo}, // HANGUL SYLLABLE PAE - {0xD329, 0xD343, prH3, gcLo}, // [27] HANGUL SYLLABLE PAEG..HANGUL SYLLABLE PAEH - {0xD344, 0xD344, prH2, gcLo}, // HANGUL SYLLABLE PYA - {0xD345, 0xD35F, prH3, gcLo}, // [27] HANGUL SYLLABLE PYAG..HANGUL SYLLABLE PYAH - {0xD360, 0xD360, prH2, gcLo}, // HANGUL SYLLABLE PYAE - {0xD361, 0xD37B, prH3, gcLo}, // [27] HANGUL SYLLABLE PYAEG..HANGUL SYLLABLE PYAEH - {0xD37C, 0xD37C, prH2, gcLo}, // HANGUL SYLLABLE PEO - {0xD37D, 0xD397, prH3, gcLo}, // [27] HANGUL SYLLABLE PEOG..HANGUL SYLLABLE PEOH - {0xD398, 0xD398, prH2, gcLo}, // HANGUL SYLLABLE PE - {0xD399, 0xD3B3, prH3, gcLo}, // [27] HANGUL SYLLABLE PEG..HANGUL SYLLABLE PEH - {0xD3B4, 0xD3B4, prH2, gcLo}, // HANGUL SYLLABLE PYEO - {0xD3B5, 0xD3CF, prH3, gcLo}, // [27] HANGUL SYLLABLE PYEOG..HANGUL SYLLABLE PYEOH - {0xD3D0, 0xD3D0, prH2, gcLo}, // HANGUL SYLLABLE PYE - {0xD3D1, 0xD3EB, prH3, gcLo}, // [27] HANGUL SYLLABLE PYEG..HANGUL SYLLABLE PYEH - {0xD3EC, 0xD3EC, prH2, gcLo}, // HANGUL SYLLABLE PO - {0xD3ED, 0xD407, prH3, gcLo}, // [27] HANGUL SYLLABLE POG..HANGUL SYLLABLE POH - {0xD408, 0xD408, prH2, gcLo}, // HANGUL SYLLABLE PWA - {0xD409, 0xD423, prH3, gcLo}, // [27] HANGUL SYLLABLE PWAG..HANGUL SYLLABLE PWAH - {0xD424, 0xD424, prH2, gcLo}, // HANGUL SYLLABLE PWAE - {0xD425, 0xD43F, prH3, gcLo}, // [27] HANGUL SYLLABLE PWAEG..HANGUL SYLLABLE PWAEH - {0xD440, 0xD440, prH2, gcLo}, // HANGUL SYLLABLE POE - {0xD441, 0xD45B, prH3, gcLo}, // [27] HANGUL SYLLABLE POEG..HANGUL SYLLABLE POEH - {0xD45C, 0xD45C, prH2, gcLo}, // HANGUL SYLLABLE PYO - {0xD45D, 0xD477, prH3, gcLo}, // [27] HANGUL SYLLABLE PYOG..HANGUL SYLLABLE PYOH - {0xD478, 0xD478, prH2, gcLo}, // HANGUL SYLLABLE PU - {0xD479, 0xD493, prH3, gcLo}, // [27] HANGUL SYLLABLE PUG..HANGUL SYLLABLE PUH - {0xD494, 0xD494, prH2, gcLo}, // HANGUL SYLLABLE PWEO - {0xD495, 0xD4AF, prH3, gcLo}, // [27] HANGUL SYLLABLE PWEOG..HANGUL SYLLABLE PWEOH - {0xD4B0, 0xD4B0, prH2, gcLo}, // HANGUL SYLLABLE PWE - {0xD4B1, 0xD4CB, prH3, gcLo}, // [27] HANGUL SYLLABLE PWEG..HANGUL SYLLABLE PWEH - {0xD4CC, 0xD4CC, prH2, gcLo}, // HANGUL SYLLABLE PWI - {0xD4CD, 0xD4E7, prH3, gcLo}, // [27] HANGUL SYLLABLE PWIG..HANGUL SYLLABLE PWIH - {0xD4E8, 0xD4E8, prH2, gcLo}, // HANGUL SYLLABLE PYU - {0xD4E9, 0xD503, prH3, gcLo}, // [27] HANGUL SYLLABLE PYUG..HANGUL SYLLABLE PYUH - {0xD504, 0xD504, prH2, gcLo}, // HANGUL SYLLABLE PEU - {0xD505, 0xD51F, prH3, gcLo}, // [27] HANGUL SYLLABLE PEUG..HANGUL SYLLABLE PEUH - {0xD520, 0xD520, prH2, gcLo}, // HANGUL SYLLABLE PYI - {0xD521, 0xD53B, prH3, gcLo}, // [27] HANGUL SYLLABLE PYIG..HANGUL SYLLABLE PYIH - {0xD53C, 0xD53C, prH2, gcLo}, // HANGUL SYLLABLE PI - {0xD53D, 0xD557, prH3, gcLo}, // [27] HANGUL SYLLABLE PIG..HANGUL SYLLABLE PIH - {0xD558, 0xD558, prH2, gcLo}, // HANGUL SYLLABLE HA - {0xD559, 0xD573, prH3, gcLo}, // [27] HANGUL SYLLABLE HAG..HANGUL SYLLABLE HAH - {0xD574, 0xD574, prH2, gcLo}, // HANGUL SYLLABLE HAE - {0xD575, 0xD58F, prH3, gcLo}, // [27] HANGUL SYLLABLE HAEG..HANGUL SYLLABLE HAEH - {0xD590, 0xD590, prH2, gcLo}, // HANGUL SYLLABLE HYA - {0xD591, 0xD5AB, prH3, gcLo}, // [27] HANGUL SYLLABLE HYAG..HANGUL SYLLABLE HYAH - {0xD5AC, 0xD5AC, prH2, gcLo}, // HANGUL SYLLABLE HYAE - {0xD5AD, 0xD5C7, prH3, gcLo}, // [27] HANGUL SYLLABLE HYAEG..HANGUL SYLLABLE HYAEH - {0xD5C8, 0xD5C8, prH2, gcLo}, // HANGUL SYLLABLE HEO - {0xD5C9, 0xD5E3, prH3, gcLo}, // [27] HANGUL SYLLABLE HEOG..HANGUL SYLLABLE HEOH - {0xD5E4, 0xD5E4, prH2, gcLo}, // HANGUL SYLLABLE HE - {0xD5E5, 0xD5FF, prH3, gcLo}, // [27] HANGUL SYLLABLE HEG..HANGUL SYLLABLE HEH - {0xD600, 0xD600, prH2, gcLo}, // HANGUL SYLLABLE HYEO - {0xD601, 0xD61B, prH3, gcLo}, // [27] HANGUL SYLLABLE HYEOG..HANGUL SYLLABLE HYEOH - {0xD61C, 0xD61C, prH2, gcLo}, // HANGUL SYLLABLE HYE - {0xD61D, 0xD637, prH3, gcLo}, // [27] HANGUL SYLLABLE HYEG..HANGUL SYLLABLE HYEH - {0xD638, 0xD638, prH2, gcLo}, // HANGUL SYLLABLE HO - {0xD639, 0xD653, prH3, gcLo}, // [27] HANGUL SYLLABLE HOG..HANGUL SYLLABLE HOH - {0xD654, 0xD654, prH2, gcLo}, // HANGUL SYLLABLE HWA - {0xD655, 0xD66F, prH3, gcLo}, // [27] HANGUL SYLLABLE HWAG..HANGUL SYLLABLE HWAH - {0xD670, 0xD670, prH2, gcLo}, // HANGUL SYLLABLE HWAE - {0xD671, 0xD68B, prH3, gcLo}, // [27] HANGUL SYLLABLE HWAEG..HANGUL SYLLABLE HWAEH - {0xD68C, 0xD68C, prH2, gcLo}, // HANGUL SYLLABLE HOE - {0xD68D, 0xD6A7, prH3, gcLo}, // [27] HANGUL SYLLABLE HOEG..HANGUL SYLLABLE HOEH - {0xD6A8, 0xD6A8, prH2, gcLo}, // HANGUL SYLLABLE HYO - {0xD6A9, 0xD6C3, prH3, gcLo}, // [27] HANGUL SYLLABLE HYOG..HANGUL SYLLABLE HYOH - {0xD6C4, 0xD6C4, prH2, gcLo}, // HANGUL SYLLABLE HU - {0xD6C5, 0xD6DF, prH3, gcLo}, // [27] HANGUL SYLLABLE HUG..HANGUL SYLLABLE HUH - {0xD6E0, 0xD6E0, prH2, gcLo}, // HANGUL SYLLABLE HWEO - {0xD6E1, 0xD6FB, prH3, gcLo}, // [27] HANGUL SYLLABLE HWEOG..HANGUL SYLLABLE HWEOH - {0xD6FC, 0xD6FC, prH2, gcLo}, // HANGUL SYLLABLE HWE - {0xD6FD, 0xD717, prH3, gcLo}, // [27] HANGUL SYLLABLE HWEG..HANGUL SYLLABLE HWEH - {0xD718, 0xD718, prH2, gcLo}, // HANGUL SYLLABLE HWI - {0xD719, 0xD733, prH3, gcLo}, // [27] HANGUL SYLLABLE HWIG..HANGUL SYLLABLE HWIH - {0xD734, 0xD734, prH2, gcLo}, // HANGUL SYLLABLE HYU - {0xD735, 0xD74F, prH3, gcLo}, // [27] HANGUL SYLLABLE HYUG..HANGUL SYLLABLE HYUH - {0xD750, 0xD750, prH2, gcLo}, // HANGUL SYLLABLE HEU - {0xD751, 0xD76B, prH3, gcLo}, // [27] HANGUL SYLLABLE HEUG..HANGUL SYLLABLE HEUH - {0xD76C, 0xD76C, prH2, gcLo}, // HANGUL SYLLABLE HYI - {0xD76D, 0xD787, prH3, gcLo}, // [27] HANGUL SYLLABLE HYIG..HANGUL SYLLABLE HYIH - {0xD788, 0xD788, prH2, gcLo}, // HANGUL SYLLABLE HI - {0xD789, 0xD7A3, prH3, gcLo}, // [27] HANGUL SYLLABLE HIG..HANGUL SYLLABLE HIH - {0xD7B0, 0xD7C6, prJV, gcLo}, // [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E - {0xD7CB, 0xD7FB, prJT, gcLo}, // [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH - {0xD800, 0xDB7F, prSG, gcCs}, // [896] .. - {0xDB80, 0xDBFF, prSG, gcCs}, // [128] .. - {0xDC00, 0xDFFF, prSG, gcCs}, // [1024] .. - {0xE000, 0xF8FF, prXX, gcCo}, // [6400] .. - {0xF900, 0xFA6D, prID, gcLo}, // [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D - {0xFA6E, 0xFA6F, prID, gcCn}, // [2] .. - {0xFA70, 0xFAD9, prID, gcLo}, // [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 - {0xFADA, 0xFAFF, prID, gcCn}, // [38] .. - {0xFB00, 0xFB06, prAL, gcLl}, // [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST - {0xFB13, 0xFB17, prAL, gcLl}, // [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH - {0xFB1D, 0xFB1D, prHL, gcLo}, // HEBREW LETTER YOD WITH HIRIQ - {0xFB1E, 0xFB1E, prCM, gcMn}, // HEBREW POINT JUDEO-SPANISH VARIKA - {0xFB1F, 0xFB28, prHL, gcLo}, // [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV - {0xFB29, 0xFB29, prAL, gcSm}, // HEBREW LETTER ALTERNATIVE PLUS SIGN - {0xFB2A, 0xFB36, prHL, gcLo}, // [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH - {0xFB38, 0xFB3C, prHL, gcLo}, // [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH - {0xFB3E, 0xFB3E, prHL, gcLo}, // HEBREW LETTER MEM WITH DAGESH - {0xFB40, 0xFB41, prHL, gcLo}, // [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH - {0xFB43, 0xFB44, prHL, gcLo}, // [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH - {0xFB46, 0xFB4F, prHL, gcLo}, // [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED - {0xFB50, 0xFBB1, prAL, gcLo}, // [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM - {0xFBB2, 0xFBC2, prAL, gcSk}, // [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE - {0xFBD3, 0xFD3D, prAL, gcLo}, // [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM - {0xFD3E, 0xFD3E, prCL, gcPe}, // ORNATE LEFT PARENTHESIS - {0xFD3F, 0xFD3F, prOP, gcPs}, // ORNATE RIGHT PARENTHESIS - {0xFD40, 0xFD4F, prAL, gcSo}, // [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH - {0xFD50, 0xFD8F, prAL, gcLo}, // [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM - {0xFD92, 0xFDC7, prAL, gcLo}, // [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM - {0xFDCF, 0xFDCF, prAL, gcSo}, // ARABIC LIGATURE SALAAMUHU ALAYNAA - {0xFDF0, 0xFDFB, prAL, gcLo}, // [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU - {0xFDFC, 0xFDFC, prPO, gcSc}, // RIAL SIGN - {0xFDFD, 0xFDFF, prAL, gcSo}, // [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL - {0xFE00, 0xFE0F, prCM, gcMn}, // [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 - {0xFE10, 0xFE10, prIS, gcPo}, // PRESENTATION FORM FOR VERTICAL COMMA - {0xFE11, 0xFE12, prCL, gcPo}, // [2] PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA..PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP - {0xFE13, 0xFE14, prIS, gcPo}, // [2] PRESENTATION FORM FOR VERTICAL COLON..PRESENTATION FORM FOR VERTICAL SEMICOLON - {0xFE15, 0xFE16, prEX, gcPo}, // [2] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK..PRESENTATION FORM FOR VERTICAL QUESTION MARK - {0xFE17, 0xFE17, prOP, gcPs}, // PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET - {0xFE18, 0xFE18, prCL, gcPe}, // PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET - {0xFE19, 0xFE19, prIN, gcPo}, // PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS - {0xFE20, 0xFE2F, prCM, gcMn}, // [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF - {0xFE30, 0xFE30, prID, gcPo}, // PRESENTATION FORM FOR VERTICAL TWO DOT LEADER - {0xFE31, 0xFE32, prID, gcPd}, // [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH - {0xFE33, 0xFE34, prID, gcPc}, // [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE - {0xFE35, 0xFE35, prOP, gcPs}, // PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS - {0xFE36, 0xFE36, prCL, gcPe}, // PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS - {0xFE37, 0xFE37, prOP, gcPs}, // PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET - {0xFE38, 0xFE38, prCL, gcPe}, // PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET - {0xFE39, 0xFE39, prOP, gcPs}, // PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET - {0xFE3A, 0xFE3A, prCL, gcPe}, // PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET - {0xFE3B, 0xFE3B, prOP, gcPs}, // PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET - {0xFE3C, 0xFE3C, prCL, gcPe}, // PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET - {0xFE3D, 0xFE3D, prOP, gcPs}, // PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET - {0xFE3E, 0xFE3E, prCL, gcPe}, // PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET - {0xFE3F, 0xFE3F, prOP, gcPs}, // PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET - {0xFE40, 0xFE40, prCL, gcPe}, // PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET - {0xFE41, 0xFE41, prOP, gcPs}, // PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET - {0xFE42, 0xFE42, prCL, gcPe}, // PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET - {0xFE43, 0xFE43, prOP, gcPs}, // PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET - {0xFE44, 0xFE44, prCL, gcPe}, // PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET - {0xFE45, 0xFE46, prID, gcPo}, // [2] SESAME DOT..WHITE SESAME DOT - {0xFE47, 0xFE47, prOP, gcPs}, // PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET - {0xFE48, 0xFE48, prCL, gcPe}, // PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET - {0xFE49, 0xFE4C, prID, gcPo}, // [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE - {0xFE4D, 0xFE4F, prID, gcPc}, // [3] DASHED LOW LINE..WAVY LOW LINE - {0xFE50, 0xFE50, prCL, gcPo}, // SMALL COMMA - {0xFE51, 0xFE51, prID, gcPo}, // SMALL IDEOGRAPHIC COMMA - {0xFE52, 0xFE52, prCL, gcPo}, // SMALL FULL STOP - {0xFE54, 0xFE55, prNS, gcPo}, // [2] SMALL SEMICOLON..SMALL COLON - {0xFE56, 0xFE57, prEX, gcPo}, // [2] SMALL QUESTION MARK..SMALL EXCLAMATION MARK - {0xFE58, 0xFE58, prID, gcPd}, // SMALL EM DASH - {0xFE59, 0xFE59, prOP, gcPs}, // SMALL LEFT PARENTHESIS - {0xFE5A, 0xFE5A, prCL, gcPe}, // SMALL RIGHT PARENTHESIS - {0xFE5B, 0xFE5B, prOP, gcPs}, // SMALL LEFT CURLY BRACKET - {0xFE5C, 0xFE5C, prCL, gcPe}, // SMALL RIGHT CURLY BRACKET - {0xFE5D, 0xFE5D, prOP, gcPs}, // SMALL LEFT TORTOISE SHELL BRACKET - {0xFE5E, 0xFE5E, prCL, gcPe}, // SMALL RIGHT TORTOISE SHELL BRACKET - {0xFE5F, 0xFE61, prID, gcPo}, // [3] SMALL NUMBER SIGN..SMALL ASTERISK - {0xFE62, 0xFE62, prID, gcSm}, // SMALL PLUS SIGN - {0xFE63, 0xFE63, prID, gcPd}, // SMALL HYPHEN-MINUS - {0xFE64, 0xFE66, prID, gcSm}, // [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN - {0xFE68, 0xFE68, prID, gcPo}, // SMALL REVERSE SOLIDUS - {0xFE69, 0xFE69, prPR, gcSc}, // SMALL DOLLAR SIGN - {0xFE6A, 0xFE6A, prPO, gcPo}, // SMALL PERCENT SIGN - {0xFE6B, 0xFE6B, prID, gcPo}, // SMALL COMMERCIAL AT - {0xFE70, 0xFE74, prAL, gcLo}, // [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM - {0xFE76, 0xFEFC, prAL, gcLo}, // [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM - {0xFEFF, 0xFEFF, prWJ, gcCf}, // ZERO WIDTH NO-BREAK SPACE - {0xFF01, 0xFF01, prEX, gcPo}, // FULLWIDTH EXCLAMATION MARK - {0xFF02, 0xFF03, prID, gcPo}, // [2] FULLWIDTH QUOTATION MARK..FULLWIDTH NUMBER SIGN - {0xFF04, 0xFF04, prPR, gcSc}, // FULLWIDTH DOLLAR SIGN - {0xFF05, 0xFF05, prPO, gcPo}, // FULLWIDTH PERCENT SIGN - {0xFF06, 0xFF07, prID, gcPo}, // [2] FULLWIDTH AMPERSAND..FULLWIDTH APOSTROPHE - {0xFF08, 0xFF08, prOP, gcPs}, // FULLWIDTH LEFT PARENTHESIS - {0xFF09, 0xFF09, prCL, gcPe}, // FULLWIDTH RIGHT PARENTHESIS - {0xFF0A, 0xFF0A, prID, gcPo}, // FULLWIDTH ASTERISK - {0xFF0B, 0xFF0B, prID, gcSm}, // FULLWIDTH PLUS SIGN - {0xFF0C, 0xFF0C, prCL, gcPo}, // FULLWIDTH COMMA - {0xFF0D, 0xFF0D, prID, gcPd}, // FULLWIDTH HYPHEN-MINUS - {0xFF0E, 0xFF0E, prCL, gcPo}, // FULLWIDTH FULL STOP - {0xFF0F, 0xFF0F, prID, gcPo}, // FULLWIDTH SOLIDUS - {0xFF10, 0xFF19, prID, gcNd}, // [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE - {0xFF1A, 0xFF1B, prNS, gcPo}, // [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON - {0xFF1C, 0xFF1E, prID, gcSm}, // [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN - {0xFF1F, 0xFF1F, prEX, gcPo}, // FULLWIDTH QUESTION MARK - {0xFF20, 0xFF20, prID, gcPo}, // FULLWIDTH COMMERCIAL AT - {0xFF21, 0xFF3A, prID, gcLu}, // [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z - {0xFF3B, 0xFF3B, prOP, gcPs}, // FULLWIDTH LEFT SQUARE BRACKET - {0xFF3C, 0xFF3C, prID, gcPo}, // FULLWIDTH REVERSE SOLIDUS - {0xFF3D, 0xFF3D, prCL, gcPe}, // FULLWIDTH RIGHT SQUARE BRACKET - {0xFF3E, 0xFF3E, prID, gcSk}, // FULLWIDTH CIRCUMFLEX ACCENT - {0xFF3F, 0xFF3F, prID, gcPc}, // FULLWIDTH LOW LINE - {0xFF40, 0xFF40, prID, gcSk}, // FULLWIDTH GRAVE ACCENT - {0xFF41, 0xFF5A, prID, gcLl}, // [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z - {0xFF5B, 0xFF5B, prOP, gcPs}, // FULLWIDTH LEFT CURLY BRACKET - {0xFF5C, 0xFF5C, prID, gcSm}, // FULLWIDTH VERTICAL LINE - {0xFF5D, 0xFF5D, prCL, gcPe}, // FULLWIDTH RIGHT CURLY BRACKET - {0xFF5E, 0xFF5E, prID, gcSm}, // FULLWIDTH TILDE - {0xFF5F, 0xFF5F, prOP, gcPs}, // FULLWIDTH LEFT WHITE PARENTHESIS - {0xFF60, 0xFF60, prCL, gcPe}, // FULLWIDTH RIGHT WHITE PARENTHESIS - {0xFF61, 0xFF61, prCL, gcPo}, // HALFWIDTH IDEOGRAPHIC FULL STOP - {0xFF62, 0xFF62, prOP, gcPs}, // HALFWIDTH LEFT CORNER BRACKET - {0xFF63, 0xFF63, prCL, gcPe}, // HALFWIDTH RIGHT CORNER BRACKET - {0xFF64, 0xFF64, prCL, gcPo}, // HALFWIDTH IDEOGRAPHIC COMMA - {0xFF65, 0xFF65, prNS, gcPo}, // HALFWIDTH KATAKANA MIDDLE DOT - {0xFF66, 0xFF66, prID, gcLo}, // HALFWIDTH KATAKANA LETTER WO - {0xFF67, 0xFF6F, prCJ, gcLo}, // [9] HALFWIDTH KATAKANA LETTER SMALL A..HALFWIDTH KATAKANA LETTER SMALL TU - {0xFF70, 0xFF70, prCJ, gcLm}, // HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK - {0xFF71, 0xFF9D, prID, gcLo}, // [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N - {0xFF9E, 0xFF9F, prNS, gcLm}, // [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK - {0xFFA0, 0xFFBE, prID, gcLo}, // [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH - {0xFFC2, 0xFFC7, prID, gcLo}, // [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E - {0xFFCA, 0xFFCF, prID, gcLo}, // [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE - {0xFFD2, 0xFFD7, prID, gcLo}, // [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU - {0xFFDA, 0xFFDC, prID, gcLo}, // [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I - {0xFFE0, 0xFFE0, prPO, gcSc}, // FULLWIDTH CENT SIGN - {0xFFE1, 0xFFE1, prPR, gcSc}, // FULLWIDTH POUND SIGN - {0xFFE2, 0xFFE2, prID, gcSm}, // FULLWIDTH NOT SIGN - {0xFFE3, 0xFFE3, prID, gcSk}, // FULLWIDTH MACRON - {0xFFE4, 0xFFE4, prID, gcSo}, // FULLWIDTH BROKEN BAR - {0xFFE5, 0xFFE6, prPR, gcSc}, // [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN - {0xFFE8, 0xFFE8, prAL, gcSo}, // HALFWIDTH FORMS LIGHT VERTICAL - {0xFFE9, 0xFFEC, prAL, gcSm}, // [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW - {0xFFED, 0xFFEE, prAL, gcSo}, // [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE - {0xFFF9, 0xFFFB, prCM, gcCf}, // [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR - {0xFFFC, 0xFFFC, prCB, gcSo}, // OBJECT REPLACEMENT CHARACTER - {0xFFFD, 0xFFFD, prAI, gcSo}, // REPLACEMENT CHARACTER - {0x10000, 0x1000B, prAL, gcLo}, // [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE - {0x1000D, 0x10026, prAL, gcLo}, // [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO - {0x10028, 0x1003A, prAL, gcLo}, // [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO - {0x1003C, 0x1003D, prAL, gcLo}, // [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE - {0x1003F, 0x1004D, prAL, gcLo}, // [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO - {0x10050, 0x1005D, prAL, gcLo}, // [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089 - {0x10080, 0x100FA, prAL, gcLo}, // [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305 - {0x10100, 0x10102, prBA, gcPo}, // [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK - {0x10107, 0x10133, prAL, gcNo}, // [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND - {0x10137, 0x1013F, prAL, gcSo}, // [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT - {0x10140, 0x10174, prAL, gcNl}, // [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS - {0x10175, 0x10178, prAL, gcNo}, // [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN - {0x10179, 0x10189, prAL, gcSo}, // [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN - {0x1018A, 0x1018B, prAL, gcNo}, // [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN - {0x1018C, 0x1018E, prAL, gcSo}, // [3] GREEK SINUSOID SIGN..NOMISMA SIGN - {0x10190, 0x1019C, prAL, gcSo}, // [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL - {0x101A0, 0x101A0, prAL, gcSo}, // GREEK SYMBOL TAU RHO - {0x101D0, 0x101FC, prAL, gcSo}, // [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND - {0x101FD, 0x101FD, prCM, gcMn}, // PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE - {0x10280, 0x1029C, prAL, gcLo}, // [29] LYCIAN LETTER A..LYCIAN LETTER X - {0x102A0, 0x102D0, prAL, gcLo}, // [49] CARIAN LETTER A..CARIAN LETTER UUU3 - {0x102E0, 0x102E0, prCM, gcMn}, // COPTIC EPACT THOUSANDS MARK - {0x102E1, 0x102FB, prAL, gcNo}, // [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED - {0x10300, 0x1031F, prAL, gcLo}, // [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS - {0x10320, 0x10323, prAL, gcNo}, // [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY - {0x1032D, 0x1032F, prAL, gcLo}, // [3] OLD ITALIC LETTER YE..OLD ITALIC LETTER SOUTHERN TSE - {0x10330, 0x10340, prAL, gcLo}, // [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA - {0x10341, 0x10341, prAL, gcNl}, // GOTHIC LETTER NINETY - {0x10342, 0x10349, prAL, gcLo}, // [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL - {0x1034A, 0x1034A, prAL, gcNl}, // GOTHIC LETTER NINE HUNDRED - {0x10350, 0x10375, prAL, gcLo}, // [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA - {0x10376, 0x1037A, prCM, gcMn}, // [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII - {0x10380, 0x1039D, prAL, gcLo}, // [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU - {0x1039F, 0x1039F, prBA, gcPo}, // UGARITIC WORD DIVIDER - {0x103A0, 0x103C3, prAL, gcLo}, // [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA - {0x103C8, 0x103CF, prAL, gcLo}, // [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH - {0x103D0, 0x103D0, prBA, gcPo}, // OLD PERSIAN WORD DIVIDER - {0x103D1, 0x103D5, prAL, gcNl}, // [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED - {0x10400, 0x1044F, prAL, gcLC}, // [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW - {0x10450, 0x1047F, prAL, gcLo}, // [48] SHAVIAN LETTER PEEP..SHAVIAN LETTER YEW - {0x10480, 0x1049D, prAL, gcLo}, // [30] OSMANYA LETTER ALEF..OSMANYA LETTER OO - {0x104A0, 0x104A9, prNU, gcNd}, // [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE - {0x104B0, 0x104D3, prAL, gcLu}, // [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA - {0x104D8, 0x104FB, prAL, gcLl}, // [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA - {0x10500, 0x10527, prAL, gcLo}, // [40] ELBASAN LETTER A..ELBASAN LETTER KHE - {0x10530, 0x10563, prAL, gcLo}, // [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW - {0x1056F, 0x1056F, prAL, gcPo}, // CAUCASIAN ALBANIAN CITATION MARK - {0x10570, 0x1057A, prAL, gcLu}, // [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA - {0x1057C, 0x1058A, prAL, gcLu}, // [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE - {0x1058C, 0x10592, prAL, gcLu}, // [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE - {0x10594, 0x10595, prAL, gcLu}, // [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE - {0x10597, 0x105A1, prAL, gcLl}, // [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA - {0x105A3, 0x105B1, prAL, gcLl}, // [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE - {0x105B3, 0x105B9, prAL, gcLl}, // [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE - {0x105BB, 0x105BC, prAL, gcLl}, // [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE - {0x10600, 0x10736, prAL, gcLo}, // [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 - {0x10740, 0x10755, prAL, gcLo}, // [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE - {0x10760, 0x10767, prAL, gcLo}, // [8] LINEAR A SIGN A800..LINEAR A SIGN A807 - {0x10780, 0x10785, prAL, gcLm}, // [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK - {0x10787, 0x107B0, prAL, gcLm}, // [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK - {0x107B2, 0x107BA, prAL, gcLm}, // [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL - {0x10800, 0x10805, prAL, gcLo}, // [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA - {0x10808, 0x10808, prAL, gcLo}, // CYPRIOT SYLLABLE JO - {0x1080A, 0x10835, prAL, gcLo}, // [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO - {0x10837, 0x10838, prAL, gcLo}, // [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE - {0x1083C, 0x1083C, prAL, gcLo}, // CYPRIOT SYLLABLE ZA - {0x1083F, 0x1083F, prAL, gcLo}, // CYPRIOT SYLLABLE ZO - {0x10840, 0x10855, prAL, gcLo}, // [22] IMPERIAL ARAMAIC LETTER ALEPH..IMPERIAL ARAMAIC LETTER TAW - {0x10857, 0x10857, prBA, gcPo}, // IMPERIAL ARAMAIC SECTION SIGN - {0x10858, 0x1085F, prAL, gcNo}, // [8] IMPERIAL ARAMAIC NUMBER ONE..IMPERIAL ARAMAIC NUMBER TEN THOUSAND - {0x10860, 0x10876, prAL, gcLo}, // [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW - {0x10877, 0x10878, prAL, gcSo}, // [2] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE RIGHT-POINTING FLEURON - {0x10879, 0x1087F, prAL, gcNo}, // [7] PALMYRENE NUMBER ONE..PALMYRENE NUMBER TWENTY - {0x10880, 0x1089E, prAL, gcLo}, // [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW - {0x108A7, 0x108AF, prAL, gcNo}, // [9] NABATAEAN NUMBER ONE..NABATAEAN NUMBER ONE HUNDRED - {0x108E0, 0x108F2, prAL, gcLo}, // [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH - {0x108F4, 0x108F5, prAL, gcLo}, // [2] HATRAN LETTER SHIN..HATRAN LETTER TAW - {0x108FB, 0x108FF, prAL, gcNo}, // [5] HATRAN NUMBER ONE..HATRAN NUMBER ONE HUNDRED - {0x10900, 0x10915, prAL, gcLo}, // [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU - {0x10916, 0x1091B, prAL, gcNo}, // [6] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER THREE - {0x1091F, 0x1091F, prBA, gcPo}, // PHOENICIAN WORD SEPARATOR - {0x10920, 0x10939, prAL, gcLo}, // [26] LYDIAN LETTER A..LYDIAN LETTER C - {0x1093F, 0x1093F, prAL, gcPo}, // LYDIAN TRIANGULAR MARK - {0x10980, 0x1099F, prAL, gcLo}, // [32] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2 - {0x109A0, 0x109B7, prAL, gcLo}, // [24] MEROITIC CURSIVE LETTER A..MEROITIC CURSIVE LETTER DA - {0x109BC, 0x109BD, prAL, gcNo}, // [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF - {0x109BE, 0x109BF, prAL, gcLo}, // [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN - {0x109C0, 0x109CF, prAL, gcNo}, // [16] MEROITIC CURSIVE NUMBER ONE..MEROITIC CURSIVE NUMBER SEVENTY - {0x109D2, 0x109FF, prAL, gcNo}, // [46] MEROITIC CURSIVE NUMBER ONE HUNDRED..MEROITIC CURSIVE FRACTION TEN TWELFTHS - {0x10A00, 0x10A00, prAL, gcLo}, // KHAROSHTHI LETTER A - {0x10A01, 0x10A03, prCM, gcMn}, // [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R - {0x10A05, 0x10A06, prCM, gcMn}, // [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O - {0x10A0C, 0x10A0F, prCM, gcMn}, // [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA - {0x10A10, 0x10A13, prAL, gcLo}, // [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA - {0x10A15, 0x10A17, prAL, gcLo}, // [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA - {0x10A19, 0x10A35, prAL, gcLo}, // [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA - {0x10A38, 0x10A3A, prCM, gcMn}, // [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW - {0x10A3F, 0x10A3F, prCM, gcMn}, // KHAROSHTHI VIRAMA - {0x10A40, 0x10A48, prAL, gcNo}, // [9] KHAROSHTHI DIGIT ONE..KHAROSHTHI FRACTION ONE HALF - {0x10A50, 0x10A57, prBA, gcPo}, // [8] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION DOUBLE DANDA - {0x10A58, 0x10A58, prAL, gcPo}, // KHAROSHTHI PUNCTUATION LINES - {0x10A60, 0x10A7C, prAL, gcLo}, // [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH - {0x10A7D, 0x10A7E, prAL, gcNo}, // [2] OLD SOUTH ARABIAN NUMBER ONE..OLD SOUTH ARABIAN NUMBER FIFTY - {0x10A7F, 0x10A7F, prAL, gcPo}, // OLD SOUTH ARABIAN NUMERIC INDICATOR - {0x10A80, 0x10A9C, prAL, gcLo}, // [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH - {0x10A9D, 0x10A9F, prAL, gcNo}, // [3] OLD NORTH ARABIAN NUMBER ONE..OLD NORTH ARABIAN NUMBER TWENTY - {0x10AC0, 0x10AC7, prAL, gcLo}, // [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW - {0x10AC8, 0x10AC8, prAL, gcSo}, // MANICHAEAN SIGN UD - {0x10AC9, 0x10AE4, prAL, gcLo}, // [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW - {0x10AE5, 0x10AE6, prCM, gcMn}, // [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW - {0x10AEB, 0x10AEF, prAL, gcNo}, // [5] MANICHAEAN NUMBER ONE..MANICHAEAN NUMBER ONE HUNDRED - {0x10AF0, 0x10AF5, prBA, gcPo}, // [6] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION TWO DOTS - {0x10AF6, 0x10AF6, prIN, gcPo}, // MANICHAEAN PUNCTUATION LINE FILLER - {0x10B00, 0x10B35, prAL, gcLo}, // [54] AVESTAN LETTER A..AVESTAN LETTER HE - {0x10B39, 0x10B3F, prBA, gcPo}, // [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION - {0x10B40, 0x10B55, prAL, gcLo}, // [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW - {0x10B58, 0x10B5F, prAL, gcNo}, // [8] INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND - {0x10B60, 0x10B72, prAL, gcLo}, // [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW - {0x10B78, 0x10B7F, prAL, gcNo}, // [8] INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND - {0x10B80, 0x10B91, prAL, gcLo}, // [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW - {0x10B99, 0x10B9C, prAL, gcPo}, // [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT - {0x10BA9, 0x10BAF, prAL, gcNo}, // [7] PSALTER PAHLAVI NUMBER ONE..PSALTER PAHLAVI NUMBER ONE HUNDRED - {0x10C00, 0x10C48, prAL, gcLo}, // [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH - {0x10C80, 0x10CB2, prAL, gcLu}, // [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US - {0x10CC0, 0x10CF2, prAL, gcLl}, // [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US - {0x10CFA, 0x10CFF, prAL, gcNo}, // [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND - {0x10D00, 0x10D23, prAL, gcLo}, // [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA - {0x10D24, 0x10D27, prCM, gcMn}, // [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI - {0x10D30, 0x10D39, prNU, gcNd}, // [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE - {0x10E60, 0x10E7E, prAL, gcNo}, // [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS - {0x10E80, 0x10EA9, prAL, gcLo}, // [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET - {0x10EAB, 0x10EAC, prCM, gcMn}, // [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK - {0x10EAD, 0x10EAD, prBA, gcPd}, // YEZIDI HYPHENATION MARK - {0x10EB0, 0x10EB1, prAL, gcLo}, // [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE - {0x10EFD, 0x10EFF, prCM, gcMn}, // [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA - {0x10F00, 0x10F1C, prAL, gcLo}, // [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL - {0x10F1D, 0x10F26, prAL, gcNo}, // [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF - {0x10F27, 0x10F27, prAL, gcLo}, // OLD SOGDIAN LIGATURE AYIN-DALETH - {0x10F30, 0x10F45, prAL, gcLo}, // [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN - {0x10F46, 0x10F50, prCM, gcMn}, // [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW - {0x10F51, 0x10F54, prAL, gcNo}, // [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED - {0x10F55, 0x10F59, prAL, gcPo}, // [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT - {0x10F70, 0x10F81, prAL, gcLo}, // [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH - {0x10F82, 0x10F85, prCM, gcMn}, // [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW - {0x10F86, 0x10F89, prAL, gcPo}, // [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS - {0x10FB0, 0x10FC4, prAL, gcLo}, // [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW - {0x10FC5, 0x10FCB, prAL, gcNo}, // [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED - {0x10FE0, 0x10FF6, prAL, gcLo}, // [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH - {0x11000, 0x11000, prCM, gcMc}, // BRAHMI SIGN CANDRABINDU - {0x11001, 0x11001, prCM, gcMn}, // BRAHMI SIGN ANUSVARA - {0x11002, 0x11002, prCM, gcMc}, // BRAHMI SIGN VISARGA - {0x11003, 0x11037, prAL, gcLo}, // [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA - {0x11038, 0x11046, prCM, gcMn}, // [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA - {0x11047, 0x11048, prBA, gcPo}, // [2] BRAHMI DANDA..BRAHMI DOUBLE DANDA - {0x11049, 0x1104D, prAL, gcPo}, // [5] BRAHMI PUNCTUATION DOT..BRAHMI PUNCTUATION LOTUS - {0x11052, 0x11065, prAL, gcNo}, // [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND - {0x11066, 0x1106F, prNU, gcNd}, // [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE - {0x11070, 0x11070, prCM, gcMn}, // BRAHMI SIGN OLD TAMIL VIRAMA - {0x11071, 0x11072, prAL, gcLo}, // [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O - {0x11073, 0x11074, prCM, gcMn}, // [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O - {0x11075, 0x11075, prAL, gcLo}, // BRAHMI LETTER OLD TAMIL LLA - {0x1107F, 0x1107F, prCM, gcMn}, // BRAHMI NUMBER JOINER - {0x11080, 0x11081, prCM, gcMn}, // [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA - {0x11082, 0x11082, prCM, gcMc}, // KAITHI SIGN VISARGA - {0x11083, 0x110AF, prAL, gcLo}, // [45] KAITHI LETTER A..KAITHI LETTER HA - {0x110B0, 0x110B2, prCM, gcMc}, // [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II - {0x110B3, 0x110B6, prCM, gcMn}, // [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI - {0x110B7, 0x110B8, prCM, gcMc}, // [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU - {0x110B9, 0x110BA, prCM, gcMn}, // [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA - {0x110BB, 0x110BC, prAL, gcPo}, // [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN - {0x110BD, 0x110BD, prAL, gcCf}, // KAITHI NUMBER SIGN - {0x110BE, 0x110C1, prBA, gcPo}, // [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA - {0x110C2, 0x110C2, prCM, gcMn}, // KAITHI VOWEL SIGN VOCALIC R - {0x110CD, 0x110CD, prAL, gcCf}, // KAITHI NUMBER SIGN ABOVE - {0x110D0, 0x110E8, prAL, gcLo}, // [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE - {0x110F0, 0x110F9, prNU, gcNd}, // [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE - {0x11100, 0x11102, prCM, gcMn}, // [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA - {0x11103, 0x11126, prAL, gcLo}, // [36] CHAKMA LETTER AA..CHAKMA LETTER HAA - {0x11127, 0x1112B, prCM, gcMn}, // [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU - {0x1112C, 0x1112C, prCM, gcMc}, // CHAKMA VOWEL SIGN E - {0x1112D, 0x11134, prCM, gcMn}, // [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA - {0x11136, 0x1113F, prNU, gcNd}, // [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE - {0x11140, 0x11143, prBA, gcPo}, // [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK - {0x11144, 0x11144, prAL, gcLo}, // CHAKMA LETTER LHAA - {0x11145, 0x11146, prCM, gcMc}, // [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI - {0x11147, 0x11147, prAL, gcLo}, // CHAKMA LETTER VAA - {0x11150, 0x11172, prAL, gcLo}, // [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA - {0x11173, 0x11173, prCM, gcMn}, // MAHAJANI SIGN NUKTA - {0x11174, 0x11174, prAL, gcPo}, // MAHAJANI ABBREVIATION SIGN - {0x11175, 0x11175, prBB, gcPo}, // MAHAJANI SECTION MARK - {0x11176, 0x11176, prAL, gcLo}, // MAHAJANI LIGATURE SHRI - {0x11180, 0x11181, prCM, gcMn}, // [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA - {0x11182, 0x11182, prCM, gcMc}, // SHARADA SIGN VISARGA - {0x11183, 0x111B2, prAL, gcLo}, // [48] SHARADA LETTER A..SHARADA LETTER HA - {0x111B3, 0x111B5, prCM, gcMc}, // [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II - {0x111B6, 0x111BE, prCM, gcMn}, // [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O - {0x111BF, 0x111C0, prCM, gcMc}, // [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA - {0x111C1, 0x111C4, prAL, gcLo}, // [4] SHARADA SIGN AVAGRAHA..SHARADA OM - {0x111C5, 0x111C6, prBA, gcPo}, // [2] SHARADA DANDA..SHARADA DOUBLE DANDA - {0x111C7, 0x111C7, prAL, gcPo}, // SHARADA ABBREVIATION SIGN - {0x111C8, 0x111C8, prBA, gcPo}, // SHARADA SEPARATOR - {0x111C9, 0x111CC, prCM, gcMn}, // [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK - {0x111CD, 0x111CD, prAL, gcPo}, // SHARADA SUTRA MARK - {0x111CE, 0x111CE, prCM, gcMc}, // SHARADA VOWEL SIGN PRISHTHAMATRA E - {0x111CF, 0x111CF, prCM, gcMn}, // SHARADA SIGN INVERTED CANDRABINDU - {0x111D0, 0x111D9, prNU, gcNd}, // [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE - {0x111DA, 0x111DA, prAL, gcLo}, // SHARADA EKAM - {0x111DB, 0x111DB, prBB, gcPo}, // SHARADA SIGN SIDDHAM - {0x111DC, 0x111DC, prAL, gcLo}, // SHARADA HEADSTROKE - {0x111DD, 0x111DF, prBA, gcPo}, // [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2 - {0x111E1, 0x111F4, prAL, gcNo}, // [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND - {0x11200, 0x11211, prAL, gcLo}, // [18] KHOJKI LETTER A..KHOJKI LETTER JJA - {0x11213, 0x1122B, prAL, gcLo}, // [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA - {0x1122C, 0x1122E, prCM, gcMc}, // [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II - {0x1122F, 0x11231, prCM, gcMn}, // [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI - {0x11232, 0x11233, prCM, gcMc}, // [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU - {0x11234, 0x11234, prCM, gcMn}, // KHOJKI SIGN ANUSVARA - {0x11235, 0x11235, prCM, gcMc}, // KHOJKI SIGN VIRAMA - {0x11236, 0x11237, prCM, gcMn}, // [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA - {0x11238, 0x11239, prBA, gcPo}, // [2] KHOJKI DANDA..KHOJKI DOUBLE DANDA - {0x1123A, 0x1123A, prAL, gcPo}, // KHOJKI WORD SEPARATOR - {0x1123B, 0x1123C, prBA, gcPo}, // [2] KHOJKI SECTION MARK..KHOJKI DOUBLE SECTION MARK - {0x1123D, 0x1123D, prAL, gcPo}, // KHOJKI ABBREVIATION SIGN - {0x1123E, 0x1123E, prCM, gcMn}, // KHOJKI SIGN SUKUN - {0x1123F, 0x11240, prAL, gcLo}, // [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I - {0x11241, 0x11241, prCM, gcMn}, // KHOJKI VOWEL SIGN VOCALIC R - {0x11280, 0x11286, prAL, gcLo}, // [7] MULTANI LETTER A..MULTANI LETTER GA - {0x11288, 0x11288, prAL, gcLo}, // MULTANI LETTER GHA - {0x1128A, 0x1128D, prAL, gcLo}, // [4] MULTANI LETTER CA..MULTANI LETTER JJA - {0x1128F, 0x1129D, prAL, gcLo}, // [15] MULTANI LETTER NYA..MULTANI LETTER BA - {0x1129F, 0x112A8, prAL, gcLo}, // [10] MULTANI LETTER BHA..MULTANI LETTER RHA - {0x112A9, 0x112A9, prBA, gcPo}, // MULTANI SECTION MARK - {0x112B0, 0x112DE, prAL, gcLo}, // [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA - {0x112DF, 0x112DF, prCM, gcMn}, // KHUDAWADI SIGN ANUSVARA - {0x112E0, 0x112E2, prCM, gcMc}, // [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II - {0x112E3, 0x112EA, prCM, gcMn}, // [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA - {0x112F0, 0x112F9, prNU, gcNd}, // [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE - {0x11300, 0x11301, prCM, gcMn}, // [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU - {0x11302, 0x11303, prCM, gcMc}, // [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA - {0x11305, 0x1130C, prAL, gcLo}, // [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L - {0x1130F, 0x11310, prAL, gcLo}, // [2] GRANTHA LETTER EE..GRANTHA LETTER AI - {0x11313, 0x11328, prAL, gcLo}, // [22] GRANTHA LETTER OO..GRANTHA LETTER NA - {0x1132A, 0x11330, prAL, gcLo}, // [7] GRANTHA LETTER PA..GRANTHA LETTER RA - {0x11332, 0x11333, prAL, gcLo}, // [2] GRANTHA LETTER LA..GRANTHA LETTER LLA - {0x11335, 0x11339, prAL, gcLo}, // [5] GRANTHA LETTER VA..GRANTHA LETTER HA - {0x1133B, 0x1133C, prCM, gcMn}, // [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA - {0x1133D, 0x1133D, prAL, gcLo}, // GRANTHA SIGN AVAGRAHA - {0x1133E, 0x1133F, prCM, gcMc}, // [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I - {0x11340, 0x11340, prCM, gcMn}, // GRANTHA VOWEL SIGN II - {0x11341, 0x11344, prCM, gcMc}, // [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR - {0x11347, 0x11348, prCM, gcMc}, // [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI - {0x1134B, 0x1134D, prCM, gcMc}, // [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA - {0x11350, 0x11350, prAL, gcLo}, // GRANTHA OM - {0x11357, 0x11357, prCM, gcMc}, // GRANTHA AU LENGTH MARK - {0x1135D, 0x11361, prAL, gcLo}, // [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL - {0x11362, 0x11363, prCM, gcMc}, // [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL - {0x11366, 0x1136C, prCM, gcMn}, // [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX - {0x11370, 0x11374, prCM, gcMn}, // [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA - {0x11400, 0x11434, prAL, gcLo}, // [53] NEWA LETTER A..NEWA LETTER HA - {0x11435, 0x11437, prCM, gcMc}, // [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II - {0x11438, 0x1143F, prCM, gcMn}, // [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI - {0x11440, 0x11441, prCM, gcMc}, // [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU - {0x11442, 0x11444, prCM, gcMn}, // [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA - {0x11445, 0x11445, prCM, gcMc}, // NEWA SIGN VISARGA - {0x11446, 0x11446, prCM, gcMn}, // NEWA SIGN NUKTA - {0x11447, 0x1144A, prAL, gcLo}, // [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI - {0x1144B, 0x1144E, prBA, gcPo}, // [4] NEWA DANDA..NEWA GAP FILLER - {0x1144F, 0x1144F, prAL, gcPo}, // NEWA ABBREVIATION SIGN - {0x11450, 0x11459, prNU, gcNd}, // [10] NEWA DIGIT ZERO..NEWA DIGIT NINE - {0x1145A, 0x1145B, prBA, gcPo}, // [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK - {0x1145D, 0x1145D, prAL, gcPo}, // NEWA INSERTION SIGN - {0x1145E, 0x1145E, prCM, gcMn}, // NEWA SANDHI MARK - {0x1145F, 0x11461, prAL, gcLo}, // [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA - {0x11480, 0x114AF, prAL, gcLo}, // [48] TIRHUTA ANJI..TIRHUTA LETTER HA - {0x114B0, 0x114B2, prCM, gcMc}, // [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II - {0x114B3, 0x114B8, prCM, gcMn}, // [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL - {0x114B9, 0x114B9, prCM, gcMc}, // TIRHUTA VOWEL SIGN E - {0x114BA, 0x114BA, prCM, gcMn}, // TIRHUTA VOWEL SIGN SHORT E - {0x114BB, 0x114BE, prCM, gcMc}, // [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU - {0x114BF, 0x114C0, prCM, gcMn}, // [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA - {0x114C1, 0x114C1, prCM, gcMc}, // TIRHUTA SIGN VISARGA - {0x114C2, 0x114C3, prCM, gcMn}, // [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA - {0x114C4, 0x114C5, prAL, gcLo}, // [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG - {0x114C6, 0x114C6, prAL, gcPo}, // TIRHUTA ABBREVIATION SIGN - {0x114C7, 0x114C7, prAL, gcLo}, // TIRHUTA OM - {0x114D0, 0x114D9, prNU, gcNd}, // [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE - {0x11580, 0x115AE, prAL, gcLo}, // [47] SIDDHAM LETTER A..SIDDHAM LETTER HA - {0x115AF, 0x115B1, prCM, gcMc}, // [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II - {0x115B2, 0x115B5, prCM, gcMn}, // [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR - {0x115B8, 0x115BB, prCM, gcMc}, // [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU - {0x115BC, 0x115BD, prCM, gcMn}, // [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA - {0x115BE, 0x115BE, prCM, gcMc}, // SIDDHAM SIGN VISARGA - {0x115BF, 0x115C0, prCM, gcMn}, // [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA - {0x115C1, 0x115C1, prBB, gcPo}, // SIDDHAM SIGN SIDDHAM - {0x115C2, 0x115C3, prBA, gcPo}, // [2] SIDDHAM DANDA..SIDDHAM DOUBLE DANDA - {0x115C4, 0x115C5, prEX, gcPo}, // [2] SIDDHAM SEPARATOR DOT..SIDDHAM SEPARATOR BAR - {0x115C6, 0x115C8, prAL, gcPo}, // [3] SIDDHAM REPETITION MARK-1..SIDDHAM REPETITION MARK-3 - {0x115C9, 0x115D7, prBA, gcPo}, // [15] SIDDHAM END OF TEXT MARK..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES - {0x115D8, 0x115DB, prAL, gcLo}, // [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U - {0x115DC, 0x115DD, prCM, gcMn}, // [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU - {0x11600, 0x1162F, prAL, gcLo}, // [48] MODI LETTER A..MODI LETTER LLA - {0x11630, 0x11632, prCM, gcMc}, // [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II - {0x11633, 0x1163A, prCM, gcMn}, // [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI - {0x1163B, 0x1163C, prCM, gcMc}, // [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU - {0x1163D, 0x1163D, prCM, gcMn}, // MODI SIGN ANUSVARA - {0x1163E, 0x1163E, prCM, gcMc}, // MODI SIGN VISARGA - {0x1163F, 0x11640, prCM, gcMn}, // [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA - {0x11641, 0x11642, prBA, gcPo}, // [2] MODI DANDA..MODI DOUBLE DANDA - {0x11643, 0x11643, prAL, gcPo}, // MODI ABBREVIATION SIGN - {0x11644, 0x11644, prAL, gcLo}, // MODI SIGN HUVA - {0x11650, 0x11659, prNU, gcNd}, // [10] MODI DIGIT ZERO..MODI DIGIT NINE - {0x11660, 0x1166C, prBB, gcPo}, // [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT - {0x11680, 0x116AA, prAL, gcLo}, // [43] TAKRI LETTER A..TAKRI LETTER RRA - {0x116AB, 0x116AB, prCM, gcMn}, // TAKRI SIGN ANUSVARA - {0x116AC, 0x116AC, prCM, gcMc}, // TAKRI SIGN VISARGA - {0x116AD, 0x116AD, prCM, gcMn}, // TAKRI VOWEL SIGN AA - {0x116AE, 0x116AF, prCM, gcMc}, // [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II - {0x116B0, 0x116B5, prCM, gcMn}, // [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU - {0x116B6, 0x116B6, prCM, gcMc}, // TAKRI SIGN VIRAMA - {0x116B7, 0x116B7, prCM, gcMn}, // TAKRI SIGN NUKTA - {0x116B8, 0x116B8, prAL, gcLo}, // TAKRI LETTER ARCHAIC KHA - {0x116B9, 0x116B9, prAL, gcPo}, // TAKRI ABBREVIATION SIGN - {0x116C0, 0x116C9, prNU, gcNd}, // [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE - {0x11700, 0x1171A, prSA, gcLo}, // [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA - {0x1171D, 0x1171F, prSA, gcMn}, // [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA - {0x11720, 0x11721, prSA, gcMc}, // [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA - {0x11722, 0x11725, prSA, gcMn}, // [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU - {0x11726, 0x11726, prSA, gcMc}, // AHOM VOWEL SIGN E - {0x11727, 0x1172B, prSA, gcMn}, // [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER - {0x11730, 0x11739, prNU, gcNd}, // [10] AHOM DIGIT ZERO..AHOM DIGIT NINE - {0x1173A, 0x1173B, prSA, gcNo}, // [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY - {0x1173C, 0x1173E, prBA, gcPo}, // [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI - {0x1173F, 0x1173F, prSA, gcSo}, // AHOM SYMBOL VI - {0x11740, 0x11746, prSA, gcLo}, // [7] AHOM LETTER CA..AHOM LETTER LLA - {0x11800, 0x1182B, prAL, gcLo}, // [44] DOGRA LETTER A..DOGRA LETTER RRA - {0x1182C, 0x1182E, prCM, gcMc}, // [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II - {0x1182F, 0x11837, prCM, gcMn}, // [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA - {0x11838, 0x11838, prCM, gcMc}, // DOGRA SIGN VISARGA - {0x11839, 0x1183A, prCM, gcMn}, // [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA - {0x1183B, 0x1183B, prAL, gcPo}, // DOGRA ABBREVIATION SIGN - {0x118A0, 0x118DF, prAL, gcLC}, // [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO - {0x118E0, 0x118E9, prNU, gcNd}, // [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE - {0x118EA, 0x118F2, prAL, gcNo}, // [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY - {0x118FF, 0x118FF, prAL, gcLo}, // WARANG CITI OM - {0x11900, 0x11906, prAL, gcLo}, // [7] DIVES AKURU LETTER A..DIVES AKURU LETTER E - {0x11909, 0x11909, prAL, gcLo}, // DIVES AKURU LETTER O - {0x1190C, 0x11913, prAL, gcLo}, // [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA - {0x11915, 0x11916, prAL, gcLo}, // [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA - {0x11918, 0x1192F, prAL, gcLo}, // [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA - {0x11930, 0x11935, prCM, gcMc}, // [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E - {0x11937, 0x11938, prCM, gcMc}, // [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O - {0x1193B, 0x1193C, prCM, gcMn}, // [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU - {0x1193D, 0x1193D, prCM, gcMc}, // DIVES AKURU SIGN HALANTA - {0x1193E, 0x1193E, prCM, gcMn}, // DIVES AKURU VIRAMA - {0x1193F, 0x1193F, prAL, gcLo}, // DIVES AKURU PREFIXED NASAL SIGN - {0x11940, 0x11940, prCM, gcMc}, // DIVES AKURU MEDIAL YA - {0x11941, 0x11941, prAL, gcLo}, // DIVES AKURU INITIAL RA - {0x11942, 0x11942, prCM, gcMc}, // DIVES AKURU MEDIAL RA - {0x11943, 0x11943, prCM, gcMn}, // DIVES AKURU SIGN NUKTA - {0x11944, 0x11946, prBA, gcPo}, // [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK - {0x11950, 0x11959, prNU, gcNd}, // [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE - {0x119A0, 0x119A7, prAL, gcLo}, // [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR - {0x119AA, 0x119D0, prAL, gcLo}, // [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA - {0x119D1, 0x119D3, prCM, gcMc}, // [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II - {0x119D4, 0x119D7, prCM, gcMn}, // [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR - {0x119DA, 0x119DB, prCM, gcMn}, // [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI - {0x119DC, 0x119DF, prCM, gcMc}, // [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA - {0x119E0, 0x119E0, prCM, gcMn}, // NANDINAGARI SIGN VIRAMA - {0x119E1, 0x119E1, prAL, gcLo}, // NANDINAGARI SIGN AVAGRAHA - {0x119E2, 0x119E2, prBB, gcPo}, // NANDINAGARI SIGN SIDDHAM - {0x119E3, 0x119E3, prAL, gcLo}, // NANDINAGARI HEADSTROKE - {0x119E4, 0x119E4, prCM, gcMc}, // NANDINAGARI VOWEL SIGN PRISHTHAMATRA E - {0x11A00, 0x11A00, prAL, gcLo}, // ZANABAZAR SQUARE LETTER A - {0x11A01, 0x11A0A, prCM, gcMn}, // [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK - {0x11A0B, 0x11A32, prAL, gcLo}, // [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA - {0x11A33, 0x11A38, prCM, gcMn}, // [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA - {0x11A39, 0x11A39, prCM, gcMc}, // ZANABAZAR SQUARE SIGN VISARGA - {0x11A3A, 0x11A3A, prAL, gcLo}, // ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA - {0x11A3B, 0x11A3E, prCM, gcMn}, // [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA - {0x11A3F, 0x11A3F, prBB, gcPo}, // ZANABAZAR SQUARE INITIAL HEAD MARK - {0x11A40, 0x11A40, prAL, gcPo}, // ZANABAZAR SQUARE CLOSING HEAD MARK - {0x11A41, 0x11A44, prBA, gcPo}, // [4] ZANABAZAR SQUARE MARK TSHEG..ZANABAZAR SQUARE MARK LONG TSHEG - {0x11A45, 0x11A45, prBB, gcPo}, // ZANABAZAR SQUARE INITIAL DOUBLE-LINED HEAD MARK - {0x11A46, 0x11A46, prAL, gcPo}, // ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK - {0x11A47, 0x11A47, prCM, gcMn}, // ZANABAZAR SQUARE SUBJOINER - {0x11A50, 0x11A50, prAL, gcLo}, // SOYOMBO LETTER A - {0x11A51, 0x11A56, prCM, gcMn}, // [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE - {0x11A57, 0x11A58, prCM, gcMc}, // [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU - {0x11A59, 0x11A5B, prCM, gcMn}, // [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK - {0x11A5C, 0x11A89, prAL, gcLo}, // [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA - {0x11A8A, 0x11A96, prCM, gcMn}, // [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA - {0x11A97, 0x11A97, prCM, gcMc}, // SOYOMBO SIGN VISARGA - {0x11A98, 0x11A99, prCM, gcMn}, // [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER - {0x11A9A, 0x11A9C, prBA, gcPo}, // [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD - {0x11A9D, 0x11A9D, prAL, gcLo}, // SOYOMBO MARK PLUTA - {0x11A9E, 0x11AA0, prBB, gcPo}, // [3] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO HEAD MARK WITH MOON AND SUN - {0x11AA1, 0x11AA2, prBA, gcPo}, // [2] SOYOMBO TERMINAL MARK-1..SOYOMBO TERMINAL MARK-2 - {0x11AB0, 0x11ABF, prAL, gcLo}, // [16] CANADIAN SYLLABICS NATTILIK HI..CANADIAN SYLLABICS SPA - {0x11AC0, 0x11AF8, prAL, gcLo}, // [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL - {0x11B00, 0x11B09, prBB, gcPo}, // [10] DEVANAGARI HEAD MARK..DEVANAGARI SIGN MINDU - {0x11C00, 0x11C08, prAL, gcLo}, // [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L - {0x11C0A, 0x11C2E, prAL, gcLo}, // [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA - {0x11C2F, 0x11C2F, prCM, gcMc}, // BHAIKSUKI VOWEL SIGN AA - {0x11C30, 0x11C36, prCM, gcMn}, // [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L - {0x11C38, 0x11C3D, prCM, gcMn}, // [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA - {0x11C3E, 0x11C3E, prCM, gcMc}, // BHAIKSUKI SIGN VISARGA - {0x11C3F, 0x11C3F, prCM, gcMn}, // BHAIKSUKI SIGN VIRAMA - {0x11C40, 0x11C40, prAL, gcLo}, // BHAIKSUKI SIGN AVAGRAHA - {0x11C41, 0x11C45, prBA, gcPo}, // [5] BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2 - {0x11C50, 0x11C59, prNU, gcNd}, // [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE - {0x11C5A, 0x11C6C, prAL, gcNo}, // [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK - {0x11C70, 0x11C70, prBB, gcPo}, // MARCHEN HEAD MARK - {0x11C71, 0x11C71, prEX, gcPo}, // MARCHEN MARK SHAD - {0x11C72, 0x11C8F, prAL, gcLo}, // [30] MARCHEN LETTER KA..MARCHEN LETTER A - {0x11C92, 0x11CA7, prCM, gcMn}, // [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA - {0x11CA9, 0x11CA9, prCM, gcMc}, // MARCHEN SUBJOINED LETTER YA - {0x11CAA, 0x11CB0, prCM, gcMn}, // [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA - {0x11CB1, 0x11CB1, prCM, gcMc}, // MARCHEN VOWEL SIGN I - {0x11CB2, 0x11CB3, prCM, gcMn}, // [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E - {0x11CB4, 0x11CB4, prCM, gcMc}, // MARCHEN VOWEL SIGN O - {0x11CB5, 0x11CB6, prCM, gcMn}, // [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU - {0x11D00, 0x11D06, prAL, gcLo}, // [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E - {0x11D08, 0x11D09, prAL, gcLo}, // [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O - {0x11D0B, 0x11D30, prAL, gcLo}, // [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA - {0x11D31, 0x11D36, prCM, gcMn}, // [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R - {0x11D3A, 0x11D3A, prCM, gcMn}, // MASARAM GONDI VOWEL SIGN E - {0x11D3C, 0x11D3D, prCM, gcMn}, // [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O - {0x11D3F, 0x11D45, prCM, gcMn}, // [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA - {0x11D46, 0x11D46, prAL, gcLo}, // MASARAM GONDI REPHA - {0x11D47, 0x11D47, prCM, gcMn}, // MASARAM GONDI RA-KARA - {0x11D50, 0x11D59, prNU, gcNd}, // [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE - {0x11D60, 0x11D65, prAL, gcLo}, // [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU - {0x11D67, 0x11D68, prAL, gcLo}, // [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI - {0x11D6A, 0x11D89, prAL, gcLo}, // [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA - {0x11D8A, 0x11D8E, prCM, gcMc}, // [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU - {0x11D90, 0x11D91, prCM, gcMn}, // [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI - {0x11D93, 0x11D94, prCM, gcMc}, // [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU - {0x11D95, 0x11D95, prCM, gcMn}, // GUNJALA GONDI SIGN ANUSVARA - {0x11D96, 0x11D96, prCM, gcMc}, // GUNJALA GONDI SIGN VISARGA - {0x11D97, 0x11D97, prCM, gcMn}, // GUNJALA GONDI VIRAMA - {0x11D98, 0x11D98, prAL, gcLo}, // GUNJALA GONDI OM - {0x11DA0, 0x11DA9, prNU, gcNd}, // [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE - {0x11EE0, 0x11EF2, prAL, gcLo}, // [19] MAKASAR LETTER KA..MAKASAR ANGKA - {0x11EF3, 0x11EF4, prCM, gcMn}, // [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U - {0x11EF5, 0x11EF6, prCM, gcMc}, // [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O - {0x11EF7, 0x11EF8, prAL, gcPo}, // [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION - {0x11F00, 0x11F01, prCM, gcMn}, // [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA - {0x11F02, 0x11F02, prAL, gcLo}, // KAWI SIGN REPHA - {0x11F03, 0x11F03, prCM, gcMc}, // KAWI SIGN VISARGA - {0x11F04, 0x11F10, prAL, gcLo}, // [13] KAWI LETTER A..KAWI LETTER O - {0x11F12, 0x11F33, prAL, gcLo}, // [34] KAWI LETTER KA..KAWI LETTER JNYA - {0x11F34, 0x11F35, prCM, gcMc}, // [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA - {0x11F36, 0x11F3A, prCM, gcMn}, // [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R - {0x11F3E, 0x11F3F, prCM, gcMc}, // [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI - {0x11F40, 0x11F40, prCM, gcMn}, // KAWI VOWEL SIGN EU - {0x11F41, 0x11F41, prCM, gcMc}, // KAWI SIGN KILLER - {0x11F42, 0x11F42, prCM, gcMn}, // KAWI CONJOINER - {0x11F43, 0x11F44, prBA, gcPo}, // [2] KAWI DANDA..KAWI DOUBLE DANDA - {0x11F45, 0x11F4F, prID, gcPo}, // [11] KAWI PUNCTUATION SECTION MARKER..KAWI PUNCTUATION CLOSING SPIRAL - {0x11F50, 0x11F59, prNU, gcNd}, // [10] KAWI DIGIT ZERO..KAWI DIGIT NINE - {0x11FB0, 0x11FB0, prAL, gcLo}, // LISU LETTER YHA - {0x11FC0, 0x11FD4, prAL, gcNo}, // [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH - {0x11FD5, 0x11FDC, prAL, gcSo}, // [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI - {0x11FDD, 0x11FE0, prPO, gcSc}, // [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN - {0x11FE1, 0x11FF1, prAL, gcSo}, // [17] TAMIL SIGN PAARAM..TAMIL SIGN VAKAIYARAA - {0x11FFF, 0x11FFF, prBA, gcPo}, // TAMIL PUNCTUATION END OF TEXT - {0x12000, 0x12399, prAL, gcLo}, // [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U - {0x12400, 0x1246E, prAL, gcNl}, // [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM - {0x12470, 0x12474, prBA, gcPo}, // [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON - {0x12480, 0x12543, prAL, gcLo}, // [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU - {0x12F90, 0x12FF0, prAL, gcLo}, // [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 - {0x12FF1, 0x12FF2, prAL, gcPo}, // [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302 - {0x13000, 0x13257, prAL, gcLo}, // [600] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH O006 - {0x13258, 0x1325A, prOP, gcLo}, // [3] EGYPTIAN HIEROGLYPH O006A..EGYPTIAN HIEROGLYPH O006C - {0x1325B, 0x1325D, prCL, gcLo}, // [3] EGYPTIAN HIEROGLYPH O006D..EGYPTIAN HIEROGLYPH O006F - {0x1325E, 0x13281, prAL, gcLo}, // [36] EGYPTIAN HIEROGLYPH O007..EGYPTIAN HIEROGLYPH O033 - {0x13282, 0x13282, prCL, gcLo}, // EGYPTIAN HIEROGLYPH O033A - {0x13283, 0x13285, prAL, gcLo}, // [3] EGYPTIAN HIEROGLYPH O034..EGYPTIAN HIEROGLYPH O036 - {0x13286, 0x13286, prOP, gcLo}, // EGYPTIAN HIEROGLYPH O036A - {0x13287, 0x13287, prCL, gcLo}, // EGYPTIAN HIEROGLYPH O036B - {0x13288, 0x13288, prOP, gcLo}, // EGYPTIAN HIEROGLYPH O036C - {0x13289, 0x13289, prCL, gcLo}, // EGYPTIAN HIEROGLYPH O036D - {0x1328A, 0x13378, prAL, gcLo}, // [239] EGYPTIAN HIEROGLYPH O037..EGYPTIAN HIEROGLYPH V011 - {0x13379, 0x13379, prOP, gcLo}, // EGYPTIAN HIEROGLYPH V011A - {0x1337A, 0x1337B, prCL, gcLo}, // [2] EGYPTIAN HIEROGLYPH V011B..EGYPTIAN HIEROGLYPH V011C - {0x1337C, 0x1342F, prAL, gcLo}, // [180] EGYPTIAN HIEROGLYPH V012..EGYPTIAN HIEROGLYPH V011D - {0x13430, 0x13436, prGL, gcCf}, // [7] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH OVERLAY MIDDLE - {0x13437, 0x13437, prOP, gcCf}, // EGYPTIAN HIEROGLYPH BEGIN SEGMENT - {0x13438, 0x13438, prCL, gcCf}, // EGYPTIAN HIEROGLYPH END SEGMENT - {0x13439, 0x1343B, prGL, gcCf}, // [3] EGYPTIAN HIEROGLYPH INSERT AT MIDDLE..EGYPTIAN HIEROGLYPH INSERT AT BOTTOM - {0x1343C, 0x1343C, prOP, gcCf}, // EGYPTIAN HIEROGLYPH BEGIN ENCLOSURE - {0x1343D, 0x1343D, prCL, gcCf}, // EGYPTIAN HIEROGLYPH END ENCLOSURE - {0x1343E, 0x1343E, prOP, gcCf}, // EGYPTIAN HIEROGLYPH BEGIN WALLED ENCLOSURE - {0x1343F, 0x1343F, prCL, gcCf}, // EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE - {0x13440, 0x13440, prCM, gcMn}, // EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY - {0x13441, 0x13446, prAL, gcLo}, // [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN - {0x13447, 0x13455, prCM, gcMn}, // [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED - {0x14400, 0x145CD, prAL, gcLo}, // [462] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A409 - {0x145CE, 0x145CE, prOP, gcLo}, // ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARK - {0x145CF, 0x145CF, prCL, gcLo}, // ANATOLIAN HIEROGLYPH A410A END LOGOGRAM MARK - {0x145D0, 0x14646, prAL, gcLo}, // [119] ANATOLIAN HIEROGLYPH A411..ANATOLIAN HIEROGLYPH A530 - {0x16800, 0x16A38, prAL, gcLo}, // [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ - {0x16A40, 0x16A5E, prAL, gcLo}, // [31] MRO LETTER TA..MRO LETTER TEK - {0x16A60, 0x16A69, prNU, gcNd}, // [10] MRO DIGIT ZERO..MRO DIGIT NINE - {0x16A6E, 0x16A6F, prBA, gcPo}, // [2] MRO DANDA..MRO DOUBLE DANDA - {0x16A70, 0x16ABE, prAL, gcLo}, // [79] TANGSA LETTER OZ..TANGSA LETTER ZA - {0x16AC0, 0x16AC9, prNU, gcNd}, // [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE - {0x16AD0, 0x16AED, prAL, gcLo}, // [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I - {0x16AF0, 0x16AF4, prCM, gcMn}, // [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE - {0x16AF5, 0x16AF5, prBA, gcPo}, // BASSA VAH FULL STOP - {0x16B00, 0x16B2F, prAL, gcLo}, // [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU - {0x16B30, 0x16B36, prCM, gcMn}, // [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM - {0x16B37, 0x16B39, prBA, gcPo}, // [3] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN CIM CHEEM - {0x16B3A, 0x16B3B, prAL, gcPo}, // [2] PAHAWH HMONG SIGN VOS THIAB..PAHAWH HMONG SIGN VOS FEEM - {0x16B3C, 0x16B3F, prAL, gcSo}, // [4] PAHAWH HMONG SIGN XYEEM NTXIV..PAHAWH HMONG SIGN XYEEM FAIB - {0x16B40, 0x16B43, prAL, gcLm}, // [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM - {0x16B44, 0x16B44, prBA, gcPo}, // PAHAWH HMONG SIGN XAUS - {0x16B45, 0x16B45, prAL, gcSo}, // PAHAWH HMONG SIGN CIM TSOV ROG - {0x16B50, 0x16B59, prNU, gcNd}, // [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE - {0x16B5B, 0x16B61, prAL, gcNo}, // [7] PAHAWH HMONG NUMBER TENS..PAHAWH HMONG NUMBER TRILLIONS - {0x16B63, 0x16B77, prAL, gcLo}, // [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS - {0x16B7D, 0x16B8F, prAL, gcLo}, // [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ - {0x16E40, 0x16E7F, prAL, gcLC}, // [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y - {0x16E80, 0x16E96, prAL, gcNo}, // [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM - {0x16E97, 0x16E98, prBA, gcPo}, // [2] MEDEFAIDRIN COMMA..MEDEFAIDRIN FULL STOP - {0x16E99, 0x16E9A, prAL, gcPo}, // [2] MEDEFAIDRIN SYMBOL AIVA..MEDEFAIDRIN EXCLAMATION OH - {0x16F00, 0x16F4A, prAL, gcLo}, // [75] MIAO LETTER PA..MIAO LETTER RTE - {0x16F4F, 0x16F4F, prCM, gcMn}, // MIAO SIGN CONSONANT MODIFIER BAR - {0x16F50, 0x16F50, prAL, gcLo}, // MIAO LETTER NASALIZATION - {0x16F51, 0x16F87, prCM, gcMc}, // [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI - {0x16F8F, 0x16F92, prCM, gcMn}, // [4] MIAO TONE RIGHT..MIAO TONE BELOW - {0x16F93, 0x16F9F, prAL, gcLm}, // [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 - {0x16FE0, 0x16FE1, prNS, gcLm}, // [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK - {0x16FE2, 0x16FE2, prNS, gcPo}, // OLD CHINESE HOOK MARK - {0x16FE3, 0x16FE3, prNS, gcLm}, // OLD CHINESE ITERATION MARK - {0x16FE4, 0x16FE4, prGL, gcMn}, // KHITAN SMALL SCRIPT FILLER - {0x16FF0, 0x16FF1, prCM, gcMc}, // [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY - {0x17000, 0x187F7, prID, gcLo}, // [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 - {0x18800, 0x18AFF, prID, gcLo}, // [768] TANGUT COMPONENT-001..TANGUT COMPONENT-768 - {0x18B00, 0x18CD5, prAL, gcLo}, // [470] KHITAN SMALL SCRIPT CHARACTER-18B00..KHITAN SMALL SCRIPT CHARACTER-18CD5 - {0x18D00, 0x18D08, prID, gcLo}, // [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 - {0x1AFF0, 0x1AFF3, prAL, gcLm}, // [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 - {0x1AFF5, 0x1AFFB, prAL, gcLm}, // [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 - {0x1AFFD, 0x1AFFE, prAL, gcLm}, // [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 - {0x1B000, 0x1B0FF, prID, gcLo}, // [256] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER RE-2 - {0x1B100, 0x1B122, prID, gcLo}, // [35] HENTAIGANA LETTER RE-3..KATAKANA LETTER ARCHAIC WU - {0x1B132, 0x1B132, prCJ, gcLo}, // HIRAGANA LETTER SMALL KO - {0x1B150, 0x1B152, prCJ, gcLo}, // [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO - {0x1B155, 0x1B155, prCJ, gcLo}, // KATAKANA LETTER SMALL KO - {0x1B164, 0x1B167, prCJ, gcLo}, // [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N - {0x1B170, 0x1B2FB, prID, gcLo}, // [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB - {0x1BC00, 0x1BC6A, prAL, gcLo}, // [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M - {0x1BC70, 0x1BC7C, prAL, gcLo}, // [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK - {0x1BC80, 0x1BC88, prAL, gcLo}, // [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL - {0x1BC90, 0x1BC99, prAL, gcLo}, // [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW - {0x1BC9C, 0x1BC9C, prAL, gcSo}, // DUPLOYAN SIGN O WITH CROSS - {0x1BC9D, 0x1BC9E, prCM, gcMn}, // [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK - {0x1BC9F, 0x1BC9F, prBA, gcPo}, // DUPLOYAN PUNCTUATION CHINOOK FULL STOP - {0x1BCA0, 0x1BCA3, prCM, gcCf}, // [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP - {0x1CF00, 0x1CF2D, prCM, gcMn}, // [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT - {0x1CF30, 0x1CF46, prCM, gcMn}, // [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG - {0x1CF50, 0x1CFC3, prAL, gcSo}, // [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK - {0x1D000, 0x1D0F5, prAL, gcSo}, // [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO - {0x1D100, 0x1D126, prAL, gcSo}, // [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 - {0x1D129, 0x1D164, prAL, gcSo}, // [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE - {0x1D165, 0x1D166, prCM, gcMc}, // [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM - {0x1D167, 0x1D169, prCM, gcMn}, // [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 - {0x1D16A, 0x1D16C, prAL, gcSo}, // [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3 - {0x1D16D, 0x1D172, prCM, gcMc}, // [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 - {0x1D173, 0x1D17A, prCM, gcCf}, // [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE - {0x1D17B, 0x1D182, prCM, gcMn}, // [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE - {0x1D183, 0x1D184, prAL, gcSo}, // [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN - {0x1D185, 0x1D18B, prCM, gcMn}, // [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE - {0x1D18C, 0x1D1A9, prAL, gcSo}, // [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH - {0x1D1AA, 0x1D1AD, prCM, gcMn}, // [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO - {0x1D1AE, 0x1D1EA, prAL, gcSo}, // [61] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KORON - {0x1D200, 0x1D241, prAL, gcSo}, // [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54 - {0x1D242, 0x1D244, prCM, gcMn}, // [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME - {0x1D245, 0x1D245, prAL, gcSo}, // GREEK MUSICAL LEIMMA - {0x1D2C0, 0x1D2D3, prAL, gcNo}, // [20] KAKTOVIK NUMERAL ZERO..KAKTOVIK NUMERAL NINETEEN - {0x1D2E0, 0x1D2F3, prAL, gcNo}, // [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN - {0x1D300, 0x1D356, prAL, gcSo}, // [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING - {0x1D360, 0x1D378, prAL, gcNo}, // [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE - {0x1D400, 0x1D454, prAL, gcLC}, // [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G - {0x1D456, 0x1D49C, prAL, gcLC}, // [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A - {0x1D49E, 0x1D49F, prAL, gcLu}, // [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D - {0x1D4A2, 0x1D4A2, prAL, gcLu}, // MATHEMATICAL SCRIPT CAPITAL G - {0x1D4A5, 0x1D4A6, prAL, gcLu}, // [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K - {0x1D4A9, 0x1D4AC, prAL, gcLu}, // [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q - {0x1D4AE, 0x1D4B9, prAL, gcLC}, // [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D - {0x1D4BB, 0x1D4BB, prAL, gcLl}, // MATHEMATICAL SCRIPT SMALL F - {0x1D4BD, 0x1D4C3, prAL, gcLl}, // [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N - {0x1D4C5, 0x1D505, prAL, gcLC}, // [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B - {0x1D507, 0x1D50A, prAL, gcLu}, // [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G - {0x1D50D, 0x1D514, prAL, gcLu}, // [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q - {0x1D516, 0x1D51C, prAL, gcLu}, // [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y - {0x1D51E, 0x1D539, prAL, gcLC}, // [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B - {0x1D53B, 0x1D53E, prAL, gcLu}, // [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G - {0x1D540, 0x1D544, prAL, gcLu}, // [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M - {0x1D546, 0x1D546, prAL, gcLu}, // MATHEMATICAL DOUBLE-STRUCK CAPITAL O - {0x1D54A, 0x1D550, prAL, gcLu}, // [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y - {0x1D552, 0x1D6A5, prAL, gcLC}, // [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J - {0x1D6A8, 0x1D6C0, prAL, gcLu}, // [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA - {0x1D6C1, 0x1D6C1, prAL, gcSm}, // MATHEMATICAL BOLD NABLA - {0x1D6C2, 0x1D6DA, prAL, gcLl}, // [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA - {0x1D6DB, 0x1D6DB, prAL, gcSm}, // MATHEMATICAL BOLD PARTIAL DIFFERENTIAL - {0x1D6DC, 0x1D6FA, prAL, gcLC}, // [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA - {0x1D6FB, 0x1D6FB, prAL, gcSm}, // MATHEMATICAL ITALIC NABLA - {0x1D6FC, 0x1D714, prAL, gcLl}, // [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA - {0x1D715, 0x1D715, prAL, gcSm}, // MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL - {0x1D716, 0x1D734, prAL, gcLC}, // [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA - {0x1D735, 0x1D735, prAL, gcSm}, // MATHEMATICAL BOLD ITALIC NABLA - {0x1D736, 0x1D74E, prAL, gcLl}, // [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA - {0x1D74F, 0x1D74F, prAL, gcSm}, // MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL - {0x1D750, 0x1D76E, prAL, gcLC}, // [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA - {0x1D76F, 0x1D76F, prAL, gcSm}, // MATHEMATICAL SANS-SERIF BOLD NABLA - {0x1D770, 0x1D788, prAL, gcLl}, // [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA - {0x1D789, 0x1D789, prAL, gcSm}, // MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL - {0x1D78A, 0x1D7A8, prAL, gcLC}, // [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA - {0x1D7A9, 0x1D7A9, prAL, gcSm}, // MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA - {0x1D7AA, 0x1D7C2, prAL, gcLl}, // [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA - {0x1D7C3, 0x1D7C3, prAL, gcSm}, // MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL - {0x1D7C4, 0x1D7CB, prAL, gcLC}, // [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA - {0x1D7CE, 0x1D7FF, prNU, gcNd}, // [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE - {0x1D800, 0x1D9FF, prAL, gcSo}, // [512] SIGNWRITING HAND-FIST INDEX..SIGNWRITING HEAD - {0x1DA00, 0x1DA36, prCM, gcMn}, // [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN - {0x1DA37, 0x1DA3A, prAL, gcSo}, // [4] SIGNWRITING AIR BLOW SMALL ROTATIONS..SIGNWRITING BREATH EXHALE - {0x1DA3B, 0x1DA6C, prCM, gcMn}, // [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT - {0x1DA6D, 0x1DA74, prAL, gcSo}, // [8] SIGNWRITING SHOULDER HIP SPINE..SIGNWRITING TORSO-FLOORPLANE TWISTING - {0x1DA75, 0x1DA75, prCM, gcMn}, // SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS - {0x1DA76, 0x1DA83, prAL, gcSo}, // [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH - {0x1DA84, 0x1DA84, prCM, gcMn}, // SIGNWRITING LOCATION HEAD NECK - {0x1DA85, 0x1DA86, prAL, gcSo}, // [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS - {0x1DA87, 0x1DA8A, prBA, gcPo}, // [4] SIGNWRITING COMMA..SIGNWRITING COLON - {0x1DA8B, 0x1DA8B, prAL, gcPo}, // SIGNWRITING PARENTHESIS - {0x1DA9B, 0x1DA9F, prCM, gcMn}, // [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 - {0x1DAA1, 0x1DAAF, prCM, gcMn}, // [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 - {0x1DF00, 0x1DF09, prAL, gcLl}, // [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK - {0x1DF0A, 0x1DF0A, prAL, gcLo}, // LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK - {0x1DF0B, 0x1DF1E, prAL, gcLl}, // [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL - {0x1DF25, 0x1DF2A, prAL, gcLl}, // [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK - {0x1E000, 0x1E006, prCM, gcMn}, // [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE - {0x1E008, 0x1E018, prCM, gcMn}, // [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU - {0x1E01B, 0x1E021, prCM, gcMn}, // [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI - {0x1E023, 0x1E024, prCM, gcMn}, // [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS - {0x1E026, 0x1E02A, prCM, gcMn}, // [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA - {0x1E030, 0x1E06D, prAL, gcLm}, // [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE - {0x1E08F, 0x1E08F, prCM, gcMn}, // COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - {0x1E100, 0x1E12C, prAL, gcLo}, // [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W - {0x1E130, 0x1E136, prCM, gcMn}, // [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D - {0x1E137, 0x1E13D, prAL, gcLm}, // [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER - {0x1E140, 0x1E149, prNU, gcNd}, // [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE - {0x1E14E, 0x1E14E, prAL, gcLo}, // NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ - {0x1E14F, 0x1E14F, prAL, gcSo}, // NYIAKENG PUACHUE HMONG CIRCLED CA - {0x1E290, 0x1E2AD, prAL, gcLo}, // [30] TOTO LETTER PA..TOTO LETTER A - {0x1E2AE, 0x1E2AE, prCM, gcMn}, // TOTO SIGN RISING TONE - {0x1E2C0, 0x1E2EB, prAL, gcLo}, // [44] WANCHO LETTER AA..WANCHO LETTER YIH - {0x1E2EC, 0x1E2EF, prCM, gcMn}, // [4] WANCHO TONE TUP..WANCHO TONE KOINI - {0x1E2F0, 0x1E2F9, prNU, gcNd}, // [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE - {0x1E2FF, 0x1E2FF, prPR, gcSc}, // WANCHO NGUN SIGN - {0x1E4D0, 0x1E4EA, prAL, gcLo}, // [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL - {0x1E4EB, 0x1E4EB, prAL, gcLm}, // NAG MUNDARI SIGN OJOD - {0x1E4EC, 0x1E4EF, prCM, gcMn}, // [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH - {0x1E4F0, 0x1E4F9, prNU, gcNd}, // [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE - {0x1E7E0, 0x1E7E6, prAL, gcLo}, // [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO - {0x1E7E8, 0x1E7EB, prAL, gcLo}, // [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE - {0x1E7ED, 0x1E7EE, prAL, gcLo}, // [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE - {0x1E7F0, 0x1E7FE, prAL, gcLo}, // [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE - {0x1E800, 0x1E8C4, prAL, gcLo}, // [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON - {0x1E8C7, 0x1E8CF, prAL, gcNo}, // [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE - {0x1E8D0, 0x1E8D6, prCM, gcMn}, // [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS - {0x1E900, 0x1E943, prAL, gcLC}, // [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA - {0x1E944, 0x1E94A, prCM, gcMn}, // [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA - {0x1E94B, 0x1E94B, prAL, gcLm}, // ADLAM NASALIZATION MARK - {0x1E950, 0x1E959, prNU, gcNd}, // [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE - {0x1E95E, 0x1E95F, prOP, gcPo}, // [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK - {0x1EC71, 0x1ECAB, prAL, gcNo}, // [59] INDIC SIYAQ NUMBER ONE..INDIC SIYAQ NUMBER PREFIXED NINE - {0x1ECAC, 0x1ECAC, prPO, gcSo}, // INDIC SIYAQ PLACEHOLDER - {0x1ECAD, 0x1ECAF, prAL, gcNo}, // [3] INDIC SIYAQ FRACTION ONE QUARTER..INDIC SIYAQ FRACTION THREE QUARTERS - {0x1ECB0, 0x1ECB0, prPO, gcSc}, // INDIC SIYAQ RUPEE MARK - {0x1ECB1, 0x1ECB4, prAL, gcNo}, // [4] INDIC SIYAQ NUMBER ALTERNATE ONE..INDIC SIYAQ ALTERNATE LAKH MARK - {0x1ED01, 0x1ED2D, prAL, gcNo}, // [45] OTTOMAN SIYAQ NUMBER ONE..OTTOMAN SIYAQ NUMBER NINETY THOUSAND - {0x1ED2E, 0x1ED2E, prAL, gcSo}, // OTTOMAN SIYAQ MARRATAN - {0x1ED2F, 0x1ED3D, prAL, gcNo}, // [15] OTTOMAN SIYAQ ALTERNATE NUMBER TWO..OTTOMAN SIYAQ FRACTION ONE SIXTH - {0x1EE00, 0x1EE03, prAL, gcLo}, // [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL - {0x1EE05, 0x1EE1F, prAL, gcLo}, // [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF - {0x1EE21, 0x1EE22, prAL, gcLo}, // [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM - {0x1EE24, 0x1EE24, prAL, gcLo}, // ARABIC MATHEMATICAL INITIAL HEH - {0x1EE27, 0x1EE27, prAL, gcLo}, // ARABIC MATHEMATICAL INITIAL HAH - {0x1EE29, 0x1EE32, prAL, gcLo}, // [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF - {0x1EE34, 0x1EE37, prAL, gcLo}, // [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH - {0x1EE39, 0x1EE39, prAL, gcLo}, // ARABIC MATHEMATICAL INITIAL DAD - {0x1EE3B, 0x1EE3B, prAL, gcLo}, // ARABIC MATHEMATICAL INITIAL GHAIN - {0x1EE42, 0x1EE42, prAL, gcLo}, // ARABIC MATHEMATICAL TAILED JEEM - {0x1EE47, 0x1EE47, prAL, gcLo}, // ARABIC MATHEMATICAL TAILED HAH - {0x1EE49, 0x1EE49, prAL, gcLo}, // ARABIC MATHEMATICAL TAILED YEH - {0x1EE4B, 0x1EE4B, prAL, gcLo}, // ARABIC MATHEMATICAL TAILED LAM - {0x1EE4D, 0x1EE4F, prAL, gcLo}, // [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN - {0x1EE51, 0x1EE52, prAL, gcLo}, // [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF - {0x1EE54, 0x1EE54, prAL, gcLo}, // ARABIC MATHEMATICAL TAILED SHEEN - {0x1EE57, 0x1EE57, prAL, gcLo}, // ARABIC MATHEMATICAL TAILED KHAH - {0x1EE59, 0x1EE59, prAL, gcLo}, // ARABIC MATHEMATICAL TAILED DAD - {0x1EE5B, 0x1EE5B, prAL, gcLo}, // ARABIC MATHEMATICAL TAILED GHAIN - {0x1EE5D, 0x1EE5D, prAL, gcLo}, // ARABIC MATHEMATICAL TAILED DOTLESS NOON - {0x1EE5F, 0x1EE5F, prAL, gcLo}, // ARABIC MATHEMATICAL TAILED DOTLESS QAF - {0x1EE61, 0x1EE62, prAL, gcLo}, // [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM - {0x1EE64, 0x1EE64, prAL, gcLo}, // ARABIC MATHEMATICAL STRETCHED HEH - {0x1EE67, 0x1EE6A, prAL, gcLo}, // [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF - {0x1EE6C, 0x1EE72, prAL, gcLo}, // [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF - {0x1EE74, 0x1EE77, prAL, gcLo}, // [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH - {0x1EE79, 0x1EE7C, prAL, gcLo}, // [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH - {0x1EE7E, 0x1EE7E, prAL, gcLo}, // ARABIC MATHEMATICAL STRETCHED DOTLESS FEH - {0x1EE80, 0x1EE89, prAL, gcLo}, // [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH - {0x1EE8B, 0x1EE9B, prAL, gcLo}, // [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN - {0x1EEA1, 0x1EEA3, prAL, gcLo}, // [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL - {0x1EEA5, 0x1EEA9, prAL, gcLo}, // [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH - {0x1EEAB, 0x1EEBB, prAL, gcLo}, // [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN - {0x1EEF0, 0x1EEF1, prAL, gcSm}, // [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL - {0x1F000, 0x1F02B, prID, gcSo}, // [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK - {0x1F02C, 0x1F02F, prID, gcCn}, // [4] .. - {0x1F030, 0x1F093, prID, gcSo}, // [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06 - {0x1F094, 0x1F09F, prID, gcCn}, // [12] .. - {0x1F0A0, 0x1F0AE, prID, gcSo}, // [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES - {0x1F0AF, 0x1F0B0, prID, gcCn}, // [2] .. - {0x1F0B1, 0x1F0BF, prID, gcSo}, // [15] PLAYING CARD ACE OF HEARTS..PLAYING CARD RED JOKER - {0x1F0C0, 0x1F0C0, prID, gcCn}, // - {0x1F0C1, 0x1F0CF, prID, gcSo}, // [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER - {0x1F0D0, 0x1F0D0, prID, gcCn}, // - {0x1F0D1, 0x1F0F5, prID, gcSo}, // [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21 - {0x1F0F6, 0x1F0FF, prID, gcCn}, // [10] .. - {0x1F100, 0x1F10C, prAI, gcNo}, // [13] DIGIT ZERO FULL STOP..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO - {0x1F10D, 0x1F10F, prID, gcSo}, // [3] CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH - {0x1F110, 0x1F12D, prAI, gcSo}, // [30] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED CD - {0x1F12E, 0x1F12F, prAL, gcSo}, // [2] CIRCLED WZ..COPYLEFT SYMBOL - {0x1F130, 0x1F169, prAI, gcSo}, // [58] SQUARED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z - {0x1F16A, 0x1F16C, prAL, gcSo}, // [3] RAISED MC SIGN..RAISED MR SIGN - {0x1F16D, 0x1F16F, prID, gcSo}, // [3] CIRCLED CC..CIRCLED HUMAN FIGURE - {0x1F170, 0x1F1AC, prAI, gcSo}, // [61] NEGATIVE SQUARED LATIN CAPITAL LETTER A..SQUARED VOD - {0x1F1AD, 0x1F1AD, prID, gcSo}, // MASK WORK SYMBOL - {0x1F1AE, 0x1F1E5, prID, gcCn}, // [56] .. - {0x1F1E6, 0x1F1FF, prRI, gcSo}, // [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z - {0x1F200, 0x1F202, prID, gcSo}, // [3] SQUARE HIRAGANA HOKA..SQUARED KATAKANA SA - {0x1F203, 0x1F20F, prID, gcCn}, // [13] .. - {0x1F210, 0x1F23B, prID, gcSo}, // [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D - {0x1F23C, 0x1F23F, prID, gcCn}, // [4] .. - {0x1F240, 0x1F248, prID, gcSo}, // [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 - {0x1F249, 0x1F24F, prID, gcCn}, // [7] .. - {0x1F250, 0x1F251, prID, gcSo}, // [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT - {0x1F252, 0x1F25F, prID, gcCn}, // [14] .. - {0x1F260, 0x1F265, prID, gcSo}, // [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI - {0x1F266, 0x1F2FF, prID, gcCn}, // [154] .. - {0x1F300, 0x1F384, prID, gcSo}, // [133] CYCLONE..CHRISTMAS TREE - {0x1F385, 0x1F385, prEB, gcSo}, // FATHER CHRISTMAS - {0x1F386, 0x1F39B, prID, gcSo}, // [22] FIREWORKS..CONTROL KNOBS - {0x1F39C, 0x1F39D, prAL, gcSo}, // [2] BEAMED ASCENDING MUSICAL NOTES..BEAMED DESCENDING MUSICAL NOTES - {0x1F39E, 0x1F3B4, prID, gcSo}, // [23] FILM FRAMES..FLOWER PLAYING CARDS - {0x1F3B5, 0x1F3B6, prAL, gcSo}, // [2] MUSICAL NOTE..MULTIPLE MUSICAL NOTES - {0x1F3B7, 0x1F3BB, prID, gcSo}, // [5] SAXOPHONE..VIOLIN - {0x1F3BC, 0x1F3BC, prAL, gcSo}, // MUSICAL SCORE - {0x1F3BD, 0x1F3C1, prID, gcSo}, // [5] RUNNING SHIRT WITH SASH..CHEQUERED FLAG - {0x1F3C2, 0x1F3C4, prEB, gcSo}, // [3] SNOWBOARDER..SURFER - {0x1F3C5, 0x1F3C6, prID, gcSo}, // [2] SPORTS MEDAL..TROPHY - {0x1F3C7, 0x1F3C7, prEB, gcSo}, // HORSE RACING - {0x1F3C8, 0x1F3C9, prID, gcSo}, // [2] AMERICAN FOOTBALL..RUGBY FOOTBALL - {0x1F3CA, 0x1F3CC, prEB, gcSo}, // [3] SWIMMER..GOLFER - {0x1F3CD, 0x1F3FA, prID, gcSo}, // [46] RACING MOTORCYCLE..AMPHORA - {0x1F3FB, 0x1F3FF, prEM, gcSk}, // [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 - {0x1F400, 0x1F441, prID, gcSo}, // [66] RAT..EYE - {0x1F442, 0x1F443, prEB, gcSo}, // [2] EAR..NOSE - {0x1F444, 0x1F445, prID, gcSo}, // [2] MOUTH..TONGUE - {0x1F446, 0x1F450, prEB, gcSo}, // [11] WHITE UP POINTING BACKHAND INDEX..OPEN HANDS SIGN - {0x1F451, 0x1F465, prID, gcSo}, // [21] CROWN..BUSTS IN SILHOUETTE - {0x1F466, 0x1F478, prEB, gcSo}, // [19] BOY..PRINCESS - {0x1F479, 0x1F47B, prID, gcSo}, // [3] JAPANESE OGRE..GHOST - {0x1F47C, 0x1F47C, prEB, gcSo}, // BABY ANGEL - {0x1F47D, 0x1F480, prID, gcSo}, // [4] EXTRATERRESTRIAL ALIEN..SKULL - {0x1F481, 0x1F483, prEB, gcSo}, // [3] INFORMATION DESK PERSON..DANCER - {0x1F484, 0x1F484, prID, gcSo}, // LIPSTICK - {0x1F485, 0x1F487, prEB, gcSo}, // [3] NAIL POLISH..HAIRCUT - {0x1F488, 0x1F48E, prID, gcSo}, // [7] BARBER POLE..GEM STONE - {0x1F48F, 0x1F48F, prEB, gcSo}, // KISS - {0x1F490, 0x1F490, prID, gcSo}, // BOUQUET - {0x1F491, 0x1F491, prEB, gcSo}, // COUPLE WITH HEART - {0x1F492, 0x1F49F, prID, gcSo}, // [14] WEDDING..HEART DECORATION - {0x1F4A0, 0x1F4A0, prAL, gcSo}, // DIAMOND SHAPE WITH A DOT INSIDE - {0x1F4A1, 0x1F4A1, prID, gcSo}, // ELECTRIC LIGHT BULB - {0x1F4A2, 0x1F4A2, prAL, gcSo}, // ANGER SYMBOL - {0x1F4A3, 0x1F4A3, prID, gcSo}, // BOMB - {0x1F4A4, 0x1F4A4, prAL, gcSo}, // SLEEPING SYMBOL - {0x1F4A5, 0x1F4A9, prID, gcSo}, // [5] COLLISION SYMBOL..PILE OF POO - {0x1F4AA, 0x1F4AA, prEB, gcSo}, // FLEXED BICEPS - {0x1F4AB, 0x1F4AE, prID, gcSo}, // [4] DIZZY SYMBOL..WHITE FLOWER - {0x1F4AF, 0x1F4AF, prAL, gcSo}, // HUNDRED POINTS SYMBOL - {0x1F4B0, 0x1F4B0, prID, gcSo}, // MONEY BAG - {0x1F4B1, 0x1F4B2, prAL, gcSo}, // [2] CURRENCY EXCHANGE..HEAVY DOLLAR SIGN - {0x1F4B3, 0x1F4FF, prID, gcSo}, // [77] CREDIT CARD..PRAYER BEADS - {0x1F500, 0x1F506, prAL, gcSo}, // [7] TWISTED RIGHTWARDS ARROWS..HIGH BRIGHTNESS SYMBOL - {0x1F507, 0x1F516, prID, gcSo}, // [16] SPEAKER WITH CANCELLATION STROKE..BOOKMARK - {0x1F517, 0x1F524, prAL, gcSo}, // [14] LINK SYMBOL..INPUT SYMBOL FOR LATIN LETTERS - {0x1F525, 0x1F531, prID, gcSo}, // [13] FIRE..TRIDENT EMBLEM - {0x1F532, 0x1F549, prAL, gcSo}, // [24] BLACK SQUARE BUTTON..OM SYMBOL - {0x1F54A, 0x1F573, prID, gcSo}, // [42] DOVE OF PEACE..HOLE - {0x1F574, 0x1F575, prEB, gcSo}, // [2] MAN IN BUSINESS SUIT LEVITATING..SLEUTH OR SPY - {0x1F576, 0x1F579, prID, gcSo}, // [4] DARK SUNGLASSES..JOYSTICK - {0x1F57A, 0x1F57A, prEB, gcSo}, // MAN DANCING - {0x1F57B, 0x1F58F, prID, gcSo}, // [21] LEFT HAND TELEPHONE RECEIVER..TURNED OK HAND SIGN - {0x1F590, 0x1F590, prEB, gcSo}, // RAISED HAND WITH FINGERS SPLAYED - {0x1F591, 0x1F594, prID, gcSo}, // [4] REVERSED RAISED HAND WITH FINGERS SPLAYED..REVERSED VICTORY HAND - {0x1F595, 0x1F596, prEB, gcSo}, // [2] REVERSED HAND WITH MIDDLE FINGER EXTENDED..RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS - {0x1F597, 0x1F5D3, prID, gcSo}, // [61] WHITE DOWN POINTING LEFT HAND INDEX..SPIRAL CALENDAR PAD - {0x1F5D4, 0x1F5DB, prAL, gcSo}, // [8] DESKTOP WINDOW..DECREASE FONT SIZE SYMBOL - {0x1F5DC, 0x1F5F3, prID, gcSo}, // [24] COMPRESSION..BALLOT BOX WITH BALLOT - {0x1F5F4, 0x1F5F9, prAL, gcSo}, // [6] BALLOT SCRIPT X..BALLOT BOX WITH BOLD CHECK - {0x1F5FA, 0x1F5FF, prID, gcSo}, // [6] WORLD MAP..MOYAI - {0x1F600, 0x1F644, prID, gcSo}, // [69] GRINNING FACE..FACE WITH ROLLING EYES - {0x1F645, 0x1F647, prEB, gcSo}, // [3] FACE WITH NO GOOD GESTURE..PERSON BOWING DEEPLY - {0x1F648, 0x1F64A, prID, gcSo}, // [3] SEE-NO-EVIL MONKEY..SPEAK-NO-EVIL MONKEY - {0x1F64B, 0x1F64F, prEB, gcSo}, // [5] HAPPY PERSON RAISING ONE HAND..PERSON WITH FOLDED HANDS - {0x1F650, 0x1F675, prAL, gcSo}, // [38] NORTH WEST POINTING LEAF..SWASH AMPERSAND ORNAMENT - {0x1F676, 0x1F678, prQU, gcSo}, // [3] SANS-SERIF HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT..SANS-SERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT - {0x1F679, 0x1F67B, prNS, gcSo}, // [3] HEAVY INTERROBANG ORNAMENT..HEAVY SANS-SERIF INTERROBANG ORNAMENT - {0x1F67C, 0x1F67F, prAL, gcSo}, // [4] VERY HEAVY SOLIDUS..REVERSE CHECKER BOARD - {0x1F680, 0x1F6A2, prID, gcSo}, // [35] ROCKET..SHIP - {0x1F6A3, 0x1F6A3, prEB, gcSo}, // ROWBOAT - {0x1F6A4, 0x1F6B3, prID, gcSo}, // [16] SPEEDBOAT..NO BICYCLES - {0x1F6B4, 0x1F6B6, prEB, gcSo}, // [3] BICYCLIST..PEDESTRIAN - {0x1F6B7, 0x1F6BF, prID, gcSo}, // [9] NO PEDESTRIANS..SHOWER - {0x1F6C0, 0x1F6C0, prEB, gcSo}, // BATH - {0x1F6C1, 0x1F6CB, prID, gcSo}, // [11] BATHTUB..COUCH AND LAMP - {0x1F6CC, 0x1F6CC, prEB, gcSo}, // SLEEPING ACCOMMODATION - {0x1F6CD, 0x1F6D7, prID, gcSo}, // [11] SHOPPING BAGS..ELEVATOR - {0x1F6D8, 0x1F6DB, prID, gcCn}, // [4] .. - {0x1F6DC, 0x1F6EC, prID, gcSo}, // [17] WIRELESS..AIRPLANE ARRIVING - {0x1F6ED, 0x1F6EF, prID, gcCn}, // [3] .. - {0x1F6F0, 0x1F6FC, prID, gcSo}, // [13] SATELLITE..ROLLER SKATE - {0x1F6FD, 0x1F6FF, prID, gcCn}, // [3] .. - {0x1F700, 0x1F773, prAL, gcSo}, // [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE - {0x1F774, 0x1F776, prID, gcSo}, // [3] LOT OF FORTUNE..LUNAR ECLIPSE - {0x1F777, 0x1F77A, prID, gcCn}, // [4] .. - {0x1F77B, 0x1F77F, prID, gcSo}, // [5] HAUMEA..ORCUS - {0x1F780, 0x1F7D4, prAL, gcSo}, // [85] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..HEAVY TWELVE POINTED PINWHEEL STAR - {0x1F7D5, 0x1F7D9, prID, gcSo}, // [5] CIRCLED TRIANGLE..NINE POINTED WHITE STAR - {0x1F7DA, 0x1F7DF, prID, gcCn}, // [6] .. - {0x1F7E0, 0x1F7EB, prID, gcSo}, // [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE - {0x1F7EC, 0x1F7EF, prID, gcCn}, // [4] .. - {0x1F7F0, 0x1F7F0, prID, gcSo}, // HEAVY EQUALS SIGN - {0x1F7F1, 0x1F7FF, prID, gcCn}, // [15] .. - {0x1F800, 0x1F80B, prAL, gcSo}, // [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD - {0x1F80C, 0x1F80F, prID, gcCn}, // [4] .. - {0x1F810, 0x1F847, prAL, gcSo}, // [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW - {0x1F848, 0x1F84F, prID, gcCn}, // [8] .. - {0x1F850, 0x1F859, prAL, gcSo}, // [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW - {0x1F85A, 0x1F85F, prID, gcCn}, // [6] .. - {0x1F860, 0x1F887, prAL, gcSo}, // [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW - {0x1F888, 0x1F88F, prID, gcCn}, // [8] .. - {0x1F890, 0x1F8AD, prAL, gcSo}, // [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS - {0x1F8AE, 0x1F8AF, prID, gcCn}, // [2] .. - {0x1F8B0, 0x1F8B1, prID, gcSo}, // [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST - {0x1F8B2, 0x1F8FF, prID, gcCn}, // [78] .. - {0x1F900, 0x1F90B, prAL, gcSo}, // [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT - {0x1F90C, 0x1F90C, prEB, gcSo}, // PINCHED FINGERS - {0x1F90D, 0x1F90E, prID, gcSo}, // [2] WHITE HEART..BROWN HEART - {0x1F90F, 0x1F90F, prEB, gcSo}, // PINCHING HAND - {0x1F910, 0x1F917, prID, gcSo}, // [8] ZIPPER-MOUTH FACE..HUGGING FACE - {0x1F918, 0x1F91F, prEB, gcSo}, // [8] SIGN OF THE HORNS..I LOVE YOU HAND SIGN - {0x1F920, 0x1F925, prID, gcSo}, // [6] FACE WITH COWBOY HAT..LYING FACE - {0x1F926, 0x1F926, prEB, gcSo}, // FACE PALM - {0x1F927, 0x1F92F, prID, gcSo}, // [9] SNEEZING FACE..SHOCKED FACE WITH EXPLODING HEAD - {0x1F930, 0x1F939, prEB, gcSo}, // [10] PREGNANT WOMAN..JUGGLING - {0x1F93A, 0x1F93B, prID, gcSo}, // [2] FENCER..MODERN PENTATHLON - {0x1F93C, 0x1F93E, prEB, gcSo}, // [3] WRESTLERS..HANDBALL - {0x1F93F, 0x1F976, prID, gcSo}, // [56] DIVING MASK..FREEZING FACE - {0x1F977, 0x1F977, prEB, gcSo}, // NINJA - {0x1F978, 0x1F9B4, prID, gcSo}, // [61] DISGUISED FACE..BONE - {0x1F9B5, 0x1F9B6, prEB, gcSo}, // [2] LEG..FOOT - {0x1F9B7, 0x1F9B7, prID, gcSo}, // TOOTH - {0x1F9B8, 0x1F9B9, prEB, gcSo}, // [2] SUPERHERO..SUPERVILLAIN - {0x1F9BA, 0x1F9BA, prID, gcSo}, // SAFETY VEST - {0x1F9BB, 0x1F9BB, prEB, gcSo}, // EAR WITH HEARING AID - {0x1F9BC, 0x1F9CC, prID, gcSo}, // [17] MOTORIZED WHEELCHAIR..TROLL - {0x1F9CD, 0x1F9CF, prEB, gcSo}, // [3] STANDING PERSON..DEAF PERSON - {0x1F9D0, 0x1F9D0, prID, gcSo}, // FACE WITH MONOCLE - {0x1F9D1, 0x1F9DD, prEB, gcSo}, // [13] ADULT..ELF - {0x1F9DE, 0x1F9FF, prID, gcSo}, // [34] GENIE..NAZAR AMULET - {0x1FA00, 0x1FA53, prAL, gcSo}, // [84] NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP - {0x1FA54, 0x1FA5F, prID, gcCn}, // [12] .. - {0x1FA60, 0x1FA6D, prID, gcSo}, // [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER - {0x1FA6E, 0x1FA6F, prID, gcCn}, // [2] .. - {0x1FA70, 0x1FA7C, prID, gcSo}, // [13] BALLET SHOES..CRUTCH - {0x1FA7D, 0x1FA7F, prID, gcCn}, // [3] .. - {0x1FA80, 0x1FA88, prID, gcSo}, // [9] YO-YO..FLUTE - {0x1FA89, 0x1FA8F, prID, gcCn}, // [7] .. - {0x1FA90, 0x1FABD, prID, gcSo}, // [46] RINGED PLANET..WING - {0x1FABE, 0x1FABE, prID, gcCn}, // - {0x1FABF, 0x1FAC2, prID, gcSo}, // [4] GOOSE..PEOPLE HUGGING - {0x1FAC3, 0x1FAC5, prEB, gcSo}, // [3] PREGNANT MAN..PERSON WITH CROWN - {0x1FAC6, 0x1FACD, prID, gcCn}, // [8] .. - {0x1FACE, 0x1FADB, prID, gcSo}, // [14] MOOSE..PEA POD - {0x1FADC, 0x1FADF, prID, gcCn}, // [4] .. - {0x1FAE0, 0x1FAE8, prID, gcSo}, // [9] MELTING FACE..SHAKING FACE - {0x1FAE9, 0x1FAEF, prID, gcCn}, // [7] .. - {0x1FAF0, 0x1FAF8, prEB, gcSo}, // [9] HAND WITH INDEX FINGER AND THUMB CROSSED..RIGHTWARDS PUSHING HAND - {0x1FAF9, 0x1FAFF, prID, gcCn}, // [7] .. - {0x1FB00, 0x1FB92, prAL, gcSo}, // [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK - {0x1FB94, 0x1FBCA, prAL, gcSo}, // [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON - {0x1FBF0, 0x1FBF9, prNU, gcNd}, // [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE - {0x1FC00, 0x1FFFD, prID, gcCn}, // [1022] .. - {0x20000, 0x2A6DF, prID, gcLo}, // [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF - {0x2A6E0, 0x2A6FF, prID, gcCn}, // [32] .. - {0x2A700, 0x2B739, prID, gcLo}, // [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 - {0x2B73A, 0x2B73F, prID, gcCn}, // [6] .. - {0x2B740, 0x2B81D, prID, gcLo}, // [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D - {0x2B81E, 0x2B81F, prID, gcCn}, // [2] .. - {0x2B820, 0x2CEA1, prID, gcLo}, // [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 - {0x2CEA2, 0x2CEAF, prID, gcCn}, // [14] .. - {0x2CEB0, 0x2EBE0, prID, gcLo}, // [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 - {0x2EBE1, 0x2F7FF, prID, gcCn}, // [3103] .. - {0x2F800, 0x2FA1D, prID, gcLo}, // [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D - {0x2FA1E, 0x2FA1F, prID, gcCn}, // [2] .. - {0x2FA20, 0x2FFFD, prID, gcCn}, // [1502] .. - {0x30000, 0x3134A, prID, gcLo}, // [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A - {0x3134B, 0x3134F, prID, gcCn}, // [5] .. - {0x31350, 0x323AF, prID, gcLo}, // [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF - {0x323B0, 0x3FFFD, prID, gcCn}, // [56398] .. - {0xE0001, 0xE0001, prCM, gcCf}, // LANGUAGE TAG - {0xE0020, 0xE007F, prCM, gcCf}, // [96] TAG SPACE..CANCEL TAG - {0xE0100, 0xE01EF, prCM, gcMn}, // [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 - {0xF0000, 0xFFFFD, prXX, gcCo}, // [65534] .. - {0x100000, 0x10FFFD, prXX, gcCo}, // [65534] .. -} diff --git a/vendor/github.com/rivo/uniseg/linerules.go b/vendor/github.com/rivo/uniseg/linerules.go deleted file mode 100644 index 7708ae0fbe..0000000000 --- a/vendor/github.com/rivo/uniseg/linerules.go +++ /dev/null @@ -1,626 +0,0 @@ -package uniseg - -import "unicode/utf8" - -// The states of the line break parser. -const ( - lbAny = iota - lbBK - lbCR - lbLF - lbNL - lbSP - lbZW - lbWJ - lbGL - lbBA - lbHY - lbCL - lbCP - lbEX - lbIS - lbSY - lbOP - lbQU - lbQUSP - lbNS - lbCLCPSP - lbB2 - lbB2SP - lbCB - lbBB - lbLB21a - lbHL - lbAL - lbNU - lbPR - lbEB - lbIDEM - lbNUNU - lbNUSY - lbNUIS - lbNUCL - lbNUCP - lbPO - lbJL - lbJV - lbJT - lbH2 - lbH3 - lbOddRI - lbEvenRI - lbExtPicCn - lbZWJBit = 64 - lbCPeaFWHBit = 128 -) - -// These constants define whether a given text may be broken into the next line. -// If the break is optional (LineCanBreak), you may choose to break or not based -// on your own criteria, for example, if the text has reached the available -// width. -const ( - LineDontBreak = iota // You may not break the line here. - LineCanBreak // You may or may not break the line here. - LineMustBreak // You must break the line here. -) - -// lbTransitions implements the line break parser's state transitions. It's -// anologous to [grTransitions], see comments there for details. -// -// Unicode version 15.0.0. -func lbTransitions(state, prop int) (newState, lineBreak, rule int) { - switch uint64(state) | uint64(prop)<<32 { - // LB4. - case lbBK | prAny<<32: - return lbAny, LineMustBreak, 40 - - // LB5. - case lbCR | prLF<<32: - return lbLF, LineDontBreak, 50 - case lbCR | prAny<<32: - return lbAny, LineMustBreak, 50 - case lbLF | prAny<<32: - return lbAny, LineMustBreak, 50 - case lbNL | prAny<<32: - return lbAny, LineMustBreak, 50 - - // LB6. - case lbAny | prBK<<32: - return lbBK, LineDontBreak, 60 - case lbAny | prCR<<32: - return lbCR, LineDontBreak, 60 - case lbAny | prLF<<32: - return lbLF, LineDontBreak, 60 - case lbAny | prNL<<32: - return lbNL, LineDontBreak, 60 - - // LB7. - case lbAny | prSP<<32: - return lbSP, LineDontBreak, 70 - case lbAny | prZW<<32: - return lbZW, LineDontBreak, 70 - - // LB8. - case lbZW | prSP<<32: - return lbZW, LineDontBreak, 70 - case lbZW | prAny<<32: - return lbAny, LineCanBreak, 80 - - // LB11. - case lbAny | prWJ<<32: - return lbWJ, LineDontBreak, 110 - case lbWJ | prAny<<32: - return lbAny, LineDontBreak, 110 - - // LB12. - case lbAny | prGL<<32: - return lbGL, LineCanBreak, 310 - case lbGL | prAny<<32: - return lbAny, LineDontBreak, 120 - - // LB13 (simple transitions). - case lbAny | prCL<<32: - return lbCL, LineCanBreak, 310 - case lbAny | prCP<<32: - return lbCP, LineCanBreak, 310 - case lbAny | prEX<<32: - return lbEX, LineDontBreak, 130 - case lbAny | prIS<<32: - return lbIS, LineCanBreak, 310 - case lbAny | prSY<<32: - return lbSY, LineCanBreak, 310 - - // LB14. - case lbAny | prOP<<32: - return lbOP, LineCanBreak, 310 - case lbOP | prSP<<32: - return lbOP, LineDontBreak, 70 - case lbOP | prAny<<32: - return lbAny, LineDontBreak, 140 - - // LB15. - case lbQU | prSP<<32: - return lbQUSP, LineDontBreak, 70 - case lbQU | prOP<<32: - return lbOP, LineDontBreak, 150 - case lbQUSP | prOP<<32: - return lbOP, LineDontBreak, 150 - - // LB16. - case lbCL | prSP<<32: - return lbCLCPSP, LineDontBreak, 70 - case lbNUCL | prSP<<32: - return lbCLCPSP, LineDontBreak, 70 - case lbCP | prSP<<32: - return lbCLCPSP, LineDontBreak, 70 - case lbNUCP | prSP<<32: - return lbCLCPSP, LineDontBreak, 70 - case lbCL | prNS<<32: - return lbNS, LineDontBreak, 160 - case lbNUCL | prNS<<32: - return lbNS, LineDontBreak, 160 - case lbCP | prNS<<32: - return lbNS, LineDontBreak, 160 - case lbNUCP | prNS<<32: - return lbNS, LineDontBreak, 160 - case lbCLCPSP | prNS<<32: - return lbNS, LineDontBreak, 160 - - // LB17. - case lbAny | prB2<<32: - return lbB2, LineCanBreak, 310 - case lbB2 | prSP<<32: - return lbB2SP, LineDontBreak, 70 - case lbB2 | prB2<<32: - return lbB2, LineDontBreak, 170 - case lbB2SP | prB2<<32: - return lbB2, LineDontBreak, 170 - - // LB18. - case lbSP | prAny<<32: - return lbAny, LineCanBreak, 180 - case lbQUSP | prAny<<32: - return lbAny, LineCanBreak, 180 - case lbCLCPSP | prAny<<32: - return lbAny, LineCanBreak, 180 - case lbB2SP | prAny<<32: - return lbAny, LineCanBreak, 180 - - // LB19. - case lbAny | prQU<<32: - return lbQU, LineDontBreak, 190 - case lbQU | prAny<<32: - return lbAny, LineDontBreak, 190 - - // LB20. - case lbAny | prCB<<32: - return lbCB, LineCanBreak, 200 - case lbCB | prAny<<32: - return lbAny, LineCanBreak, 200 - - // LB21. - case lbAny | prBA<<32: - return lbBA, LineDontBreak, 210 - case lbAny | prHY<<32: - return lbHY, LineDontBreak, 210 - case lbAny | prNS<<32: - return lbNS, LineDontBreak, 210 - case lbAny | prBB<<32: - return lbBB, LineCanBreak, 310 - case lbBB | prAny<<32: - return lbAny, LineDontBreak, 210 - - // LB21a. - case lbAny | prHL<<32: - return lbHL, LineCanBreak, 310 - case lbHL | prHY<<32: - return lbLB21a, LineDontBreak, 210 - case lbHL | prBA<<32: - return lbLB21a, LineDontBreak, 210 - case lbLB21a | prAny<<32: - return lbAny, LineDontBreak, 211 - - // LB21b. - case lbSY | prHL<<32: - return lbHL, LineDontBreak, 212 - case lbNUSY | prHL<<32: - return lbHL, LineDontBreak, 212 - - // LB22. - case lbAny | prIN<<32: - return lbAny, LineDontBreak, 220 - - // LB23. - case lbAny | prAL<<32: - return lbAL, LineCanBreak, 310 - case lbAny | prNU<<32: - return lbNU, LineCanBreak, 310 - case lbAL | prNU<<32: - return lbNU, LineDontBreak, 230 - case lbHL | prNU<<32: - return lbNU, LineDontBreak, 230 - case lbNU | prAL<<32: - return lbAL, LineDontBreak, 230 - case lbNU | prHL<<32: - return lbHL, LineDontBreak, 230 - case lbNUNU | prAL<<32: - return lbAL, LineDontBreak, 230 - case lbNUNU | prHL<<32: - return lbHL, LineDontBreak, 230 - - // LB23a. - case lbAny | prPR<<32: - return lbPR, LineCanBreak, 310 - case lbAny | prID<<32: - return lbIDEM, LineCanBreak, 310 - case lbAny | prEB<<32: - return lbEB, LineCanBreak, 310 - case lbAny | prEM<<32: - return lbIDEM, LineCanBreak, 310 - case lbPR | prID<<32: - return lbIDEM, LineDontBreak, 231 - case lbPR | prEB<<32: - return lbEB, LineDontBreak, 231 - case lbPR | prEM<<32: - return lbIDEM, LineDontBreak, 231 - case lbIDEM | prPO<<32: - return lbPO, LineDontBreak, 231 - case lbEB | prPO<<32: - return lbPO, LineDontBreak, 231 - - // LB24. - case lbAny | prPO<<32: - return lbPO, LineCanBreak, 310 - case lbPR | prAL<<32: - return lbAL, LineDontBreak, 240 - case lbPR | prHL<<32: - return lbHL, LineDontBreak, 240 - case lbPO | prAL<<32: - return lbAL, LineDontBreak, 240 - case lbPO | prHL<<32: - return lbHL, LineDontBreak, 240 - case lbAL | prPR<<32: - return lbPR, LineDontBreak, 240 - case lbAL | prPO<<32: - return lbPO, LineDontBreak, 240 - case lbHL | prPR<<32: - return lbPR, LineDontBreak, 240 - case lbHL | prPO<<32: - return lbPO, LineDontBreak, 240 - - // LB25 (simple transitions). - case lbPR | prNU<<32: - return lbNU, LineDontBreak, 250 - case lbPO | prNU<<32: - return lbNU, LineDontBreak, 250 - case lbOP | prNU<<32: - return lbNU, LineDontBreak, 250 - case lbHY | prNU<<32: - return lbNU, LineDontBreak, 250 - case lbNU | prNU<<32: - return lbNUNU, LineDontBreak, 250 - case lbNU | prSY<<32: - return lbNUSY, LineDontBreak, 250 - case lbNU | prIS<<32: - return lbNUIS, LineDontBreak, 250 - case lbNUNU | prNU<<32: - return lbNUNU, LineDontBreak, 250 - case lbNUNU | prSY<<32: - return lbNUSY, LineDontBreak, 250 - case lbNUNU | prIS<<32: - return lbNUIS, LineDontBreak, 250 - case lbNUSY | prNU<<32: - return lbNUNU, LineDontBreak, 250 - case lbNUSY | prSY<<32: - return lbNUSY, LineDontBreak, 250 - case lbNUSY | prIS<<32: - return lbNUIS, LineDontBreak, 250 - case lbNUIS | prNU<<32: - return lbNUNU, LineDontBreak, 250 - case lbNUIS | prSY<<32: - return lbNUSY, LineDontBreak, 250 - case lbNUIS | prIS<<32: - return lbNUIS, LineDontBreak, 250 - case lbNU | prCL<<32: - return lbNUCL, LineDontBreak, 250 - case lbNU | prCP<<32: - return lbNUCP, LineDontBreak, 250 - case lbNUNU | prCL<<32: - return lbNUCL, LineDontBreak, 250 - case lbNUNU | prCP<<32: - return lbNUCP, LineDontBreak, 250 - case lbNUSY | prCL<<32: - return lbNUCL, LineDontBreak, 250 - case lbNUSY | prCP<<32: - return lbNUCP, LineDontBreak, 250 - case lbNUIS | prCL<<32: - return lbNUCL, LineDontBreak, 250 - case lbNUIS | prCP<<32: - return lbNUCP, LineDontBreak, 250 - case lbNU | prPO<<32: - return lbPO, LineDontBreak, 250 - case lbNUNU | prPO<<32: - return lbPO, LineDontBreak, 250 - case lbNUSY | prPO<<32: - return lbPO, LineDontBreak, 250 - case lbNUIS | prPO<<32: - return lbPO, LineDontBreak, 250 - case lbNUCL | prPO<<32: - return lbPO, LineDontBreak, 250 - case lbNUCP | prPO<<32: - return lbPO, LineDontBreak, 250 - case lbNU | prPR<<32: - return lbPR, LineDontBreak, 250 - case lbNUNU | prPR<<32: - return lbPR, LineDontBreak, 250 - case lbNUSY | prPR<<32: - return lbPR, LineDontBreak, 250 - case lbNUIS | prPR<<32: - return lbPR, LineDontBreak, 250 - case lbNUCL | prPR<<32: - return lbPR, LineDontBreak, 250 - case lbNUCP | prPR<<32: - return lbPR, LineDontBreak, 250 - - // LB26. - case lbAny | prJL<<32: - return lbJL, LineCanBreak, 310 - case lbAny | prJV<<32: - return lbJV, LineCanBreak, 310 - case lbAny | prJT<<32: - return lbJT, LineCanBreak, 310 - case lbAny | prH2<<32: - return lbH2, LineCanBreak, 310 - case lbAny | prH3<<32: - return lbH3, LineCanBreak, 310 - case lbJL | prJL<<32: - return lbJL, LineDontBreak, 260 - case lbJL | prJV<<32: - return lbJV, LineDontBreak, 260 - case lbJL | prH2<<32: - return lbH2, LineDontBreak, 260 - case lbJL | prH3<<32: - return lbH3, LineDontBreak, 260 - case lbJV | prJV<<32: - return lbJV, LineDontBreak, 260 - case lbJV | prJT<<32: - return lbJT, LineDontBreak, 260 - case lbH2 | prJV<<32: - return lbJV, LineDontBreak, 260 - case lbH2 | prJT<<32: - return lbJT, LineDontBreak, 260 - case lbJT | prJT<<32: - return lbJT, LineDontBreak, 260 - case lbH3 | prJT<<32: - return lbJT, LineDontBreak, 260 - - // LB27. - case lbJL | prPO<<32: - return lbPO, LineDontBreak, 270 - case lbJV | prPO<<32: - return lbPO, LineDontBreak, 270 - case lbJT | prPO<<32: - return lbPO, LineDontBreak, 270 - case lbH2 | prPO<<32: - return lbPO, LineDontBreak, 270 - case lbH3 | prPO<<32: - return lbPO, LineDontBreak, 270 - case lbPR | prJL<<32: - return lbJL, LineDontBreak, 270 - case lbPR | prJV<<32: - return lbJV, LineDontBreak, 270 - case lbPR | prJT<<32: - return lbJT, LineDontBreak, 270 - case lbPR | prH2<<32: - return lbH2, LineDontBreak, 270 - case lbPR | prH3<<32: - return lbH3, LineDontBreak, 270 - - // LB28. - case lbAL | prAL<<32: - return lbAL, LineDontBreak, 280 - case lbAL | prHL<<32: - return lbHL, LineDontBreak, 280 - case lbHL | prAL<<32: - return lbAL, LineDontBreak, 280 - case lbHL | prHL<<32: - return lbHL, LineDontBreak, 280 - - // LB29. - case lbIS | prAL<<32: - return lbAL, LineDontBreak, 290 - case lbIS | prHL<<32: - return lbHL, LineDontBreak, 290 - case lbNUIS | prAL<<32: - return lbAL, LineDontBreak, 290 - case lbNUIS | prHL<<32: - return lbHL, LineDontBreak, 290 - - default: - return -1, -1, -1 - } -} - -// transitionLineBreakState determines the new state of the line break parser -// given the current state and the next code point. It also returns the type of -// line break: LineDontBreak, LineCanBreak, or LineMustBreak. If more than one -// code point is needed to determine the new state, the byte slice or the string -// starting after rune "r" can be used (whichever is not nil or empty) for -// further lookups. -func transitionLineBreakState(state int, r rune, b []byte, str string) (newState int, lineBreak int) { - // Determine the property of the next character. - nextProperty, generalCategory := propertyLineBreak(r) - - // Prepare. - var forceNoBreak, isCPeaFWH bool - if state >= 0 && state&lbCPeaFWHBit != 0 { - isCPeaFWH = true // LB30: CP but ea is not F, W, or H. - state = state &^ lbCPeaFWHBit - } - if state >= 0 && state&lbZWJBit != 0 { - state = state &^ lbZWJBit // Extract zero-width joiner bit. - forceNoBreak = true // LB8a. - } - - defer func() { - // Transition into LB30. - if newState == lbCP || newState == lbNUCP { - ea := propertyEastAsianWidth(r) - if ea != prF && ea != prW && ea != prH { - newState |= lbCPeaFWHBit - } - } - - // Override break. - if forceNoBreak { - lineBreak = LineDontBreak - } - }() - - // LB1. - if nextProperty == prAI || nextProperty == prSG || nextProperty == prXX { - nextProperty = prAL - } else if nextProperty == prSA { - if generalCategory == gcMn || generalCategory == gcMc { - nextProperty = prCM - } else { - nextProperty = prAL - } - } else if nextProperty == prCJ { - nextProperty = prNS - } - - // Combining marks. - if nextProperty == prZWJ || nextProperty == prCM { - var bit int - if nextProperty == prZWJ { - bit = lbZWJBit - } - mustBreakState := state < 0 || state == lbBK || state == lbCR || state == lbLF || state == lbNL - if !mustBreakState && state != lbSP && state != lbZW && state != lbQUSP && state != lbCLCPSP && state != lbB2SP { - // LB9. - return state | bit, LineDontBreak - } else { - // LB10. - if mustBreakState { - return lbAL | bit, LineMustBreak - } - return lbAL | bit, LineCanBreak - } - } - - // Find the applicable transition in the table. - var rule int - newState, lineBreak, rule = lbTransitions(state, nextProperty) - if newState < 0 { - // No specific transition found. Try the less specific ones. - anyPropProp, anyPropLineBreak, anyPropRule := lbTransitions(state, prAny) - anyStateProp, anyStateLineBreak, anyStateRule := lbTransitions(lbAny, nextProperty) - if anyPropProp >= 0 && anyStateProp >= 0 { - // Both apply. We'll use a mix (see comments for grTransitions). - newState, lineBreak, rule = anyStateProp, anyStateLineBreak, anyStateRule - if anyPropRule < anyStateRule { - lineBreak, rule = anyPropLineBreak, anyPropRule - } - } else if anyPropProp >= 0 { - // We only have a specific state. - newState, lineBreak, rule = anyPropProp, anyPropLineBreak, anyPropRule - // This branch will probably never be reached because okAnyState will - // always be true given the current transition map. But we keep it here - // for future modifications to the transition map where this may not be - // true anymore. - } else if anyStateProp >= 0 { - // We only have a specific property. - newState, lineBreak, rule = anyStateProp, anyStateLineBreak, anyStateRule - } else { - // No known transition. LB31: ALL ÷ ALL. - newState, lineBreak, rule = lbAny, LineCanBreak, 310 - } - } - - // LB12a. - if rule > 121 && - nextProperty == prGL && - (state != lbSP && state != lbBA && state != lbHY && state != lbLB21a && state != lbQUSP && state != lbCLCPSP && state != lbB2SP) { - return lbGL, LineDontBreak - } - - // LB13. - if rule > 130 && state != lbNU && state != lbNUNU { - switch nextProperty { - case prCL: - return lbCL, LineDontBreak - case prCP: - return lbCP, LineDontBreak - case prIS: - return lbIS, LineDontBreak - case prSY: - return lbSY, LineDontBreak - } - } - - // LB25 (look ahead). - if rule > 250 && - (state == lbPR || state == lbPO) && - nextProperty == prOP || nextProperty == prHY { - var r rune - if b != nil { // Byte slice version. - r, _ = utf8.DecodeRune(b) - } else { // String version. - r, _ = utf8.DecodeRuneInString(str) - } - if r != utf8.RuneError { - pr, _ := propertyLineBreak(r) - if pr == prNU { - return lbNU, LineDontBreak - } - } - } - - // LB30 (part one). - if rule > 300 { - if (state == lbAL || state == lbHL || state == lbNU || state == lbNUNU) && nextProperty == prOP { - ea := propertyEastAsianWidth(r) - if ea != prF && ea != prW && ea != prH { - return lbOP, LineDontBreak - } - } else if isCPeaFWH { - switch nextProperty { - case prAL: - return lbAL, LineDontBreak - case prHL: - return lbHL, LineDontBreak - case prNU: - return lbNU, LineDontBreak - } - } - } - - // LB30a. - if newState == lbAny && nextProperty == prRI { - if state != lbOddRI && state != lbEvenRI { // Includes state == -1. - // Transition into the first RI. - return lbOddRI, lineBreak - } - if state == lbOddRI { - // Don't break pairs of Regional Indicators. - return lbEvenRI, LineDontBreak - } - return lbOddRI, lineBreak - } - - // LB30b. - if rule > 302 { - if nextProperty == prEM { - if state == lbEB || state == lbExtPicCn { - return prAny, LineDontBreak - } - } - graphemeProperty := propertyGraphemes(r) - if graphemeProperty == prExtendedPictographic && generalCategory == gcCn { - return lbExtPicCn, LineCanBreak - } - } - - return -} diff --git a/vendor/github.com/rivo/uniseg/properties.go b/vendor/github.com/rivo/uniseg/properties.go deleted file mode 100644 index 6290e6810f..0000000000 --- a/vendor/github.com/rivo/uniseg/properties.go +++ /dev/null @@ -1,208 +0,0 @@ -package uniseg - -// The Unicode properties as used in the various parsers. Only the ones needed -// in the context of this package are included. -const ( - prXX = 0 // Same as prAny. - prAny = iota // prAny must be 0. - prPrepend // Grapheme properties must come first, to reduce the number of bits stored in the state vector. - prCR - prLF - prControl - prExtend - prRegionalIndicator - prSpacingMark - prL - prV - prT - prLV - prLVT - prZWJ - prExtendedPictographic - prNewline - prWSegSpace - prDoubleQuote - prSingleQuote - prMidNumLet - prNumeric - prMidLetter - prMidNum - prExtendNumLet - prALetter - prFormat - prHebrewLetter - prKatakana - prSp - prSTerm - prClose - prSContinue - prATerm - prUpper - prLower - prSep - prOLetter - prCM - prBA - prBK - prSP - prEX - prQU - prAL - prPR - prPO - prOP - prCP - prIS - prHY - prSY - prNU - prCL - prNL - prGL - prAI - prBB - prHL - prSA - prJL - prJV - prJT - prNS - prZW - prB2 - prIN - prWJ - prID - prEB - prCJ - prH2 - prH3 - prSG - prCB - prRI - prEM - prN - prNa - prA - prW - prH - prF - prEmojiPresentation -) - -// Unicode General Categories. Only the ones needed in the context of this -// package are included. -const ( - gcNone = iota // gcNone must be 0. - gcCc - gcZs - gcPo - gcSc - gcPs - gcPe - gcSm - gcPd - gcNd - gcLu - gcSk - gcPc - gcLl - gcSo - gcLo - gcPi - gcCf - gcNo - gcPf - gcLC - gcLm - gcMn - gcMe - gcMc - gcNl - gcZl - gcZp - gcCn - gcCs - gcCo -) - -// Special code points. -const ( - vs15 = 0xfe0e // Variation Selector-15 (text presentation) - vs16 = 0xfe0f // Variation Selector-16 (emoji presentation) -) - -// propertySearch performs a binary search on a property slice and returns the -// entry whose range (start = first array element, end = second array element) -// includes r, or an array of 0's if no such entry was found. -func propertySearch[E interface{ [3]int | [4]int }](dictionary []E, r rune) (result E) { - // Run a binary search. - from := 0 - to := len(dictionary) - for to > from { - middle := (from + to) / 2 - cpRange := dictionary[middle] - if int(r) < cpRange[0] { - to = middle - continue - } - if int(r) > cpRange[1] { - from = middle + 1 - continue - } - return cpRange - } - return -} - -// property returns the Unicode property value (see constants above) of the -// given code point. -func property(dictionary [][3]int, r rune) int { - return propertySearch(dictionary, r)[2] -} - -// propertyLineBreak returns the Unicode property value and General Category -// (see constants above) of the given code point, as listed in the line break -// code points table, while fast tracking ASCII digits and letters. -func propertyLineBreak(r rune) (property, generalCategory int) { - if r >= 'a' && r <= 'z' { - return prAL, gcLl - } - if r >= 'A' && r <= 'Z' { - return prAL, gcLu - } - if r >= '0' && r <= '9' { - return prNU, gcNd - } - entry := propertySearch(lineBreakCodePoints, r) - return entry[2], entry[3] -} - -// propertyGraphemes returns the Unicode grapheme cluster property value of the -// given code point while fast tracking ASCII characters. -func propertyGraphemes(r rune) int { - if r >= 0x20 && r <= 0x7e { - return prAny - } - if r == 0x0a { - return prLF - } - if r == 0x0d { - return prCR - } - if r >= 0 && r <= 0x1f || r == 0x7f { - return prControl - } - return property(graphemeCodePoints, r) -} - -// propertyEastAsianWidth returns the Unicode East Asian Width property value of -// the given code point while fast tracking ASCII characters. -func propertyEastAsianWidth(r rune) int { - if r >= 0x20 && r <= 0x7e { - return prNa - } - if r >= 0 && r <= 0x1f || r == 0x7f { - return prN - } - return property(eastAsianWidth, r) -} diff --git a/vendor/github.com/rivo/uniseg/sentence.go b/vendor/github.com/rivo/uniseg/sentence.go deleted file mode 100644 index adc2a35773..0000000000 --- a/vendor/github.com/rivo/uniseg/sentence.go +++ /dev/null @@ -1,90 +0,0 @@ -package uniseg - -import "unicode/utf8" - -// FirstSentence returns the first sentence found in the given byte slice -// according to the rules of [Unicode Standard Annex #29, Sentence Boundaries]. -// This function can be called continuously to extract all sentences from a byte -// slice, as illustrated in the example below. -// -// If you don't know the current state, for example when calling the function -// for the first time, you must pass -1. For consecutive calls, pass the state -// and rest slice returned by the previous call. -// -// The "rest" slice is the sub-slice of the original byte slice "b" starting -// after the last byte of the identified sentence. If the length of the "rest" -// slice is 0, the entire byte slice "b" has been processed. The "sentence" byte -// slice is the sub-slice of the input slice containing the identified sentence. -// -// Given an empty byte slice "b", the function returns nil values. -// -// [Unicode Standard Annex #29, Sentence Boundaries]: http://unicode.org/reports/tr29/#Sentence_Boundaries -func FirstSentence(b []byte, state int) (sentence, rest []byte, newState int) { - // An empty byte slice returns nothing. - if len(b) == 0 { - return - } - - // Extract the first rune. - r, length := utf8.DecodeRune(b) - if len(b) <= length { // If we're already past the end, there is nothing else to parse. - return b, nil, sbAny - } - - // If we don't know the state, determine it now. - if state < 0 { - state, _ = transitionSentenceBreakState(state, r, b[length:], "") - } - - // Transition until we find a boundary. - var boundary bool - for { - r, l := utf8.DecodeRune(b[length:]) - state, boundary = transitionSentenceBreakState(state, r, b[length+l:], "") - - if boundary { - return b[:length], b[length:], state - } - - length += l - if len(b) <= length { - return b, nil, sbAny - } - } -} - -// FirstSentenceInString is like [FirstSentence] but its input and outputs are -// strings. -func FirstSentenceInString(str string, state int) (sentence, rest string, newState int) { - // An empty byte slice returns nothing. - if len(str) == 0 { - return - } - - // Extract the first rune. - r, length := utf8.DecodeRuneInString(str) - if len(str) <= length { // If we're already past the end, there is nothing else to parse. - return str, "", sbAny - } - - // If we don't know the state, determine it now. - if state < 0 { - state, _ = transitionSentenceBreakState(state, r, nil, str[length:]) - } - - // Transition until we find a boundary. - var boundary bool - for { - r, l := utf8.DecodeRuneInString(str[length:]) - state, boundary = transitionSentenceBreakState(state, r, nil, str[length+l:]) - - if boundary { - return str[:length], str[length:], state - } - - length += l - if len(str) <= length { - return str, "", sbAny - } - } -} diff --git a/vendor/github.com/rivo/uniseg/sentenceproperties.go b/vendor/github.com/rivo/uniseg/sentenceproperties.go deleted file mode 100644 index 67717ec1f3..0000000000 --- a/vendor/github.com/rivo/uniseg/sentenceproperties.go +++ /dev/null @@ -1,2845 +0,0 @@ -// Code generated via go generate from gen_properties.go. DO NOT EDIT. - -package uniseg - -// sentenceBreakCodePoints are taken from -// https://www.unicode.org/Public/15.0.0/ucd/auxiliary/SentenceBreakProperty.txt -// and -// https://unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt -// ("Extended_Pictographic" only) -// on September 5, 2023. See https://www.unicode.org/license.html for the Unicode -// license agreement. -var sentenceBreakCodePoints = [][3]int{ - {0x0009, 0x0009, prSp}, // Cc - {0x000A, 0x000A, prLF}, // Cc - {0x000B, 0x000C, prSp}, // Cc [2] .. - {0x000D, 0x000D, prCR}, // Cc - {0x0020, 0x0020, prSp}, // Zs SPACE - {0x0021, 0x0021, prSTerm}, // Po EXCLAMATION MARK - {0x0022, 0x0022, prClose}, // Po QUOTATION MARK - {0x0027, 0x0027, prClose}, // Po APOSTROPHE - {0x0028, 0x0028, prClose}, // Ps LEFT PARENTHESIS - {0x0029, 0x0029, prClose}, // Pe RIGHT PARENTHESIS - {0x002C, 0x002C, prSContinue}, // Po COMMA - {0x002D, 0x002D, prSContinue}, // Pd HYPHEN-MINUS - {0x002E, 0x002E, prATerm}, // Po FULL STOP - {0x0030, 0x0039, prNumeric}, // Nd [10] DIGIT ZERO..DIGIT NINE - {0x003A, 0x003A, prSContinue}, // Po COLON - {0x003F, 0x003F, prSTerm}, // Po QUESTION MARK - {0x0041, 0x005A, prUpper}, // L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z - {0x005B, 0x005B, prClose}, // Ps LEFT SQUARE BRACKET - {0x005D, 0x005D, prClose}, // Pe RIGHT SQUARE BRACKET - {0x0061, 0x007A, prLower}, // L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z - {0x007B, 0x007B, prClose}, // Ps LEFT CURLY BRACKET - {0x007D, 0x007D, prClose}, // Pe RIGHT CURLY BRACKET - {0x0085, 0x0085, prSep}, // Cc - {0x00A0, 0x00A0, prSp}, // Zs NO-BREAK SPACE - {0x00AA, 0x00AA, prLower}, // Lo FEMININE ORDINAL INDICATOR - {0x00AB, 0x00AB, prClose}, // Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - {0x00AD, 0x00AD, prFormat}, // Cf SOFT HYPHEN - {0x00B5, 0x00B5, prLower}, // L& MICRO SIGN - {0x00BA, 0x00BA, prLower}, // Lo MASCULINE ORDINAL INDICATOR - {0x00BB, 0x00BB, prClose}, // Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - {0x00C0, 0x00D6, prUpper}, // L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS - {0x00D8, 0x00DE, prUpper}, // L& [7] LATIN CAPITAL LETTER O WITH STROKE..LATIN CAPITAL LETTER THORN - {0x00DF, 0x00F6, prLower}, // L& [24] LATIN SMALL LETTER SHARP S..LATIN SMALL LETTER O WITH DIAERESIS - {0x00F8, 0x00FF, prLower}, // L& [8] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER Y WITH DIAERESIS - {0x0100, 0x0100, prUpper}, // L& LATIN CAPITAL LETTER A WITH MACRON - {0x0101, 0x0101, prLower}, // L& LATIN SMALL LETTER A WITH MACRON - {0x0102, 0x0102, prUpper}, // L& LATIN CAPITAL LETTER A WITH BREVE - {0x0103, 0x0103, prLower}, // L& LATIN SMALL LETTER A WITH BREVE - {0x0104, 0x0104, prUpper}, // L& LATIN CAPITAL LETTER A WITH OGONEK - {0x0105, 0x0105, prLower}, // L& LATIN SMALL LETTER A WITH OGONEK - {0x0106, 0x0106, prUpper}, // L& LATIN CAPITAL LETTER C WITH ACUTE - {0x0107, 0x0107, prLower}, // L& LATIN SMALL LETTER C WITH ACUTE - {0x0108, 0x0108, prUpper}, // L& LATIN CAPITAL LETTER C WITH CIRCUMFLEX - {0x0109, 0x0109, prLower}, // L& LATIN SMALL LETTER C WITH CIRCUMFLEX - {0x010A, 0x010A, prUpper}, // L& LATIN CAPITAL LETTER C WITH DOT ABOVE - {0x010B, 0x010B, prLower}, // L& LATIN SMALL LETTER C WITH DOT ABOVE - {0x010C, 0x010C, prUpper}, // L& LATIN CAPITAL LETTER C WITH CARON - {0x010D, 0x010D, prLower}, // L& LATIN SMALL LETTER C WITH CARON - {0x010E, 0x010E, prUpper}, // L& LATIN CAPITAL LETTER D WITH CARON - {0x010F, 0x010F, prLower}, // L& LATIN SMALL LETTER D WITH CARON - {0x0110, 0x0110, prUpper}, // L& LATIN CAPITAL LETTER D WITH STROKE - {0x0111, 0x0111, prLower}, // L& LATIN SMALL LETTER D WITH STROKE - {0x0112, 0x0112, prUpper}, // L& LATIN CAPITAL LETTER E WITH MACRON - {0x0113, 0x0113, prLower}, // L& LATIN SMALL LETTER E WITH MACRON - {0x0114, 0x0114, prUpper}, // L& LATIN CAPITAL LETTER E WITH BREVE - {0x0115, 0x0115, prLower}, // L& LATIN SMALL LETTER E WITH BREVE - {0x0116, 0x0116, prUpper}, // L& LATIN CAPITAL LETTER E WITH DOT ABOVE - {0x0117, 0x0117, prLower}, // L& LATIN SMALL LETTER E WITH DOT ABOVE - {0x0118, 0x0118, prUpper}, // L& LATIN CAPITAL LETTER E WITH OGONEK - {0x0119, 0x0119, prLower}, // L& LATIN SMALL LETTER E WITH OGONEK - {0x011A, 0x011A, prUpper}, // L& LATIN CAPITAL LETTER E WITH CARON - {0x011B, 0x011B, prLower}, // L& LATIN SMALL LETTER E WITH CARON - {0x011C, 0x011C, prUpper}, // L& LATIN CAPITAL LETTER G WITH CIRCUMFLEX - {0x011D, 0x011D, prLower}, // L& LATIN SMALL LETTER G WITH CIRCUMFLEX - {0x011E, 0x011E, prUpper}, // L& LATIN CAPITAL LETTER G WITH BREVE - {0x011F, 0x011F, prLower}, // L& LATIN SMALL LETTER G WITH BREVE - {0x0120, 0x0120, prUpper}, // L& LATIN CAPITAL LETTER G WITH DOT ABOVE - {0x0121, 0x0121, prLower}, // L& LATIN SMALL LETTER G WITH DOT ABOVE - {0x0122, 0x0122, prUpper}, // L& LATIN CAPITAL LETTER G WITH CEDILLA - {0x0123, 0x0123, prLower}, // L& LATIN SMALL LETTER G WITH CEDILLA - {0x0124, 0x0124, prUpper}, // L& LATIN CAPITAL LETTER H WITH CIRCUMFLEX - {0x0125, 0x0125, prLower}, // L& LATIN SMALL LETTER H WITH CIRCUMFLEX - {0x0126, 0x0126, prUpper}, // L& LATIN CAPITAL LETTER H WITH STROKE - {0x0127, 0x0127, prLower}, // L& LATIN SMALL LETTER H WITH STROKE - {0x0128, 0x0128, prUpper}, // L& LATIN CAPITAL LETTER I WITH TILDE - {0x0129, 0x0129, prLower}, // L& LATIN SMALL LETTER I WITH TILDE - {0x012A, 0x012A, prUpper}, // L& LATIN CAPITAL LETTER I WITH MACRON - {0x012B, 0x012B, prLower}, // L& LATIN SMALL LETTER I WITH MACRON - {0x012C, 0x012C, prUpper}, // L& LATIN CAPITAL LETTER I WITH BREVE - {0x012D, 0x012D, prLower}, // L& LATIN SMALL LETTER I WITH BREVE - {0x012E, 0x012E, prUpper}, // L& LATIN CAPITAL LETTER I WITH OGONEK - {0x012F, 0x012F, prLower}, // L& LATIN SMALL LETTER I WITH OGONEK - {0x0130, 0x0130, prUpper}, // L& LATIN CAPITAL LETTER I WITH DOT ABOVE - {0x0131, 0x0131, prLower}, // L& LATIN SMALL LETTER DOTLESS I - {0x0132, 0x0132, prUpper}, // L& LATIN CAPITAL LIGATURE IJ - {0x0133, 0x0133, prLower}, // L& LATIN SMALL LIGATURE IJ - {0x0134, 0x0134, prUpper}, // L& LATIN CAPITAL LETTER J WITH CIRCUMFLEX - {0x0135, 0x0135, prLower}, // L& LATIN SMALL LETTER J WITH CIRCUMFLEX - {0x0136, 0x0136, prUpper}, // L& LATIN CAPITAL LETTER K WITH CEDILLA - {0x0137, 0x0138, prLower}, // L& [2] LATIN SMALL LETTER K WITH CEDILLA..LATIN SMALL LETTER KRA - {0x0139, 0x0139, prUpper}, // L& LATIN CAPITAL LETTER L WITH ACUTE - {0x013A, 0x013A, prLower}, // L& LATIN SMALL LETTER L WITH ACUTE - {0x013B, 0x013B, prUpper}, // L& LATIN CAPITAL LETTER L WITH CEDILLA - {0x013C, 0x013C, prLower}, // L& LATIN SMALL LETTER L WITH CEDILLA - {0x013D, 0x013D, prUpper}, // L& LATIN CAPITAL LETTER L WITH CARON - {0x013E, 0x013E, prLower}, // L& LATIN SMALL LETTER L WITH CARON - {0x013F, 0x013F, prUpper}, // L& LATIN CAPITAL LETTER L WITH MIDDLE DOT - {0x0140, 0x0140, prLower}, // L& LATIN SMALL LETTER L WITH MIDDLE DOT - {0x0141, 0x0141, prUpper}, // L& LATIN CAPITAL LETTER L WITH STROKE - {0x0142, 0x0142, prLower}, // L& LATIN SMALL LETTER L WITH STROKE - {0x0143, 0x0143, prUpper}, // L& LATIN CAPITAL LETTER N WITH ACUTE - {0x0144, 0x0144, prLower}, // L& LATIN SMALL LETTER N WITH ACUTE - {0x0145, 0x0145, prUpper}, // L& LATIN CAPITAL LETTER N WITH CEDILLA - {0x0146, 0x0146, prLower}, // L& LATIN SMALL LETTER N WITH CEDILLA - {0x0147, 0x0147, prUpper}, // L& LATIN CAPITAL LETTER N WITH CARON - {0x0148, 0x0149, prLower}, // L& [2] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER N PRECEDED BY APOSTROPHE - {0x014A, 0x014A, prUpper}, // L& LATIN CAPITAL LETTER ENG - {0x014B, 0x014B, prLower}, // L& LATIN SMALL LETTER ENG - {0x014C, 0x014C, prUpper}, // L& LATIN CAPITAL LETTER O WITH MACRON - {0x014D, 0x014D, prLower}, // L& LATIN SMALL LETTER O WITH MACRON - {0x014E, 0x014E, prUpper}, // L& LATIN CAPITAL LETTER O WITH BREVE - {0x014F, 0x014F, prLower}, // L& LATIN SMALL LETTER O WITH BREVE - {0x0150, 0x0150, prUpper}, // L& LATIN CAPITAL LETTER O WITH DOUBLE ACUTE - {0x0151, 0x0151, prLower}, // L& LATIN SMALL LETTER O WITH DOUBLE ACUTE - {0x0152, 0x0152, prUpper}, // L& LATIN CAPITAL LIGATURE OE - {0x0153, 0x0153, prLower}, // L& LATIN SMALL LIGATURE OE - {0x0154, 0x0154, prUpper}, // L& LATIN CAPITAL LETTER R WITH ACUTE - {0x0155, 0x0155, prLower}, // L& LATIN SMALL LETTER R WITH ACUTE - {0x0156, 0x0156, prUpper}, // L& LATIN CAPITAL LETTER R WITH CEDILLA - {0x0157, 0x0157, prLower}, // L& LATIN SMALL LETTER R WITH CEDILLA - {0x0158, 0x0158, prUpper}, // L& LATIN CAPITAL LETTER R WITH CARON - {0x0159, 0x0159, prLower}, // L& LATIN SMALL LETTER R WITH CARON - {0x015A, 0x015A, prUpper}, // L& LATIN CAPITAL LETTER S WITH ACUTE - {0x015B, 0x015B, prLower}, // L& LATIN SMALL LETTER S WITH ACUTE - {0x015C, 0x015C, prUpper}, // L& LATIN CAPITAL LETTER S WITH CIRCUMFLEX - {0x015D, 0x015D, prLower}, // L& LATIN SMALL LETTER S WITH CIRCUMFLEX - {0x015E, 0x015E, prUpper}, // L& LATIN CAPITAL LETTER S WITH CEDILLA - {0x015F, 0x015F, prLower}, // L& LATIN SMALL LETTER S WITH CEDILLA - {0x0160, 0x0160, prUpper}, // L& LATIN CAPITAL LETTER S WITH CARON - {0x0161, 0x0161, prLower}, // L& LATIN SMALL LETTER S WITH CARON - {0x0162, 0x0162, prUpper}, // L& LATIN CAPITAL LETTER T WITH CEDILLA - {0x0163, 0x0163, prLower}, // L& LATIN SMALL LETTER T WITH CEDILLA - {0x0164, 0x0164, prUpper}, // L& LATIN CAPITAL LETTER T WITH CARON - {0x0165, 0x0165, prLower}, // L& LATIN SMALL LETTER T WITH CARON - {0x0166, 0x0166, prUpper}, // L& LATIN CAPITAL LETTER T WITH STROKE - {0x0167, 0x0167, prLower}, // L& LATIN SMALL LETTER T WITH STROKE - {0x0168, 0x0168, prUpper}, // L& LATIN CAPITAL LETTER U WITH TILDE - {0x0169, 0x0169, prLower}, // L& LATIN SMALL LETTER U WITH TILDE - {0x016A, 0x016A, prUpper}, // L& LATIN CAPITAL LETTER U WITH MACRON - {0x016B, 0x016B, prLower}, // L& LATIN SMALL LETTER U WITH MACRON - {0x016C, 0x016C, prUpper}, // L& LATIN CAPITAL LETTER U WITH BREVE - {0x016D, 0x016D, prLower}, // L& LATIN SMALL LETTER U WITH BREVE - {0x016E, 0x016E, prUpper}, // L& LATIN CAPITAL LETTER U WITH RING ABOVE - {0x016F, 0x016F, prLower}, // L& LATIN SMALL LETTER U WITH RING ABOVE - {0x0170, 0x0170, prUpper}, // L& LATIN CAPITAL LETTER U WITH DOUBLE ACUTE - {0x0171, 0x0171, prLower}, // L& LATIN SMALL LETTER U WITH DOUBLE ACUTE - {0x0172, 0x0172, prUpper}, // L& LATIN CAPITAL LETTER U WITH OGONEK - {0x0173, 0x0173, prLower}, // L& LATIN SMALL LETTER U WITH OGONEK - {0x0174, 0x0174, prUpper}, // L& LATIN CAPITAL LETTER W WITH CIRCUMFLEX - {0x0175, 0x0175, prLower}, // L& LATIN SMALL LETTER W WITH CIRCUMFLEX - {0x0176, 0x0176, prUpper}, // L& LATIN CAPITAL LETTER Y WITH CIRCUMFLEX - {0x0177, 0x0177, prLower}, // L& LATIN SMALL LETTER Y WITH CIRCUMFLEX - {0x0178, 0x0179, prUpper}, // L& [2] LATIN CAPITAL LETTER Y WITH DIAERESIS..LATIN CAPITAL LETTER Z WITH ACUTE - {0x017A, 0x017A, prLower}, // L& LATIN SMALL LETTER Z WITH ACUTE - {0x017B, 0x017B, prUpper}, // L& LATIN CAPITAL LETTER Z WITH DOT ABOVE - {0x017C, 0x017C, prLower}, // L& LATIN SMALL LETTER Z WITH DOT ABOVE - {0x017D, 0x017D, prUpper}, // L& LATIN CAPITAL LETTER Z WITH CARON - {0x017E, 0x0180, prLower}, // L& [3] LATIN SMALL LETTER Z WITH CARON..LATIN SMALL LETTER B WITH STROKE - {0x0181, 0x0182, prUpper}, // L& [2] LATIN CAPITAL LETTER B WITH HOOK..LATIN CAPITAL LETTER B WITH TOPBAR - {0x0183, 0x0183, prLower}, // L& LATIN SMALL LETTER B WITH TOPBAR - {0x0184, 0x0184, prUpper}, // L& LATIN CAPITAL LETTER TONE SIX - {0x0185, 0x0185, prLower}, // L& LATIN SMALL LETTER TONE SIX - {0x0186, 0x0187, prUpper}, // L& [2] LATIN CAPITAL LETTER OPEN O..LATIN CAPITAL LETTER C WITH HOOK - {0x0188, 0x0188, prLower}, // L& LATIN SMALL LETTER C WITH HOOK - {0x0189, 0x018B, prUpper}, // L& [3] LATIN CAPITAL LETTER AFRICAN D..LATIN CAPITAL LETTER D WITH TOPBAR - {0x018C, 0x018D, prLower}, // L& [2] LATIN SMALL LETTER D WITH TOPBAR..LATIN SMALL LETTER TURNED DELTA - {0x018E, 0x0191, prUpper}, // L& [4] LATIN CAPITAL LETTER REVERSED E..LATIN CAPITAL LETTER F WITH HOOK - {0x0192, 0x0192, prLower}, // L& LATIN SMALL LETTER F WITH HOOK - {0x0193, 0x0194, prUpper}, // L& [2] LATIN CAPITAL LETTER G WITH HOOK..LATIN CAPITAL LETTER GAMMA - {0x0195, 0x0195, prLower}, // L& LATIN SMALL LETTER HV - {0x0196, 0x0198, prUpper}, // L& [3] LATIN CAPITAL LETTER IOTA..LATIN CAPITAL LETTER K WITH HOOK - {0x0199, 0x019B, prLower}, // L& [3] LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER LAMBDA WITH STROKE - {0x019C, 0x019D, prUpper}, // L& [2] LATIN CAPITAL LETTER TURNED M..LATIN CAPITAL LETTER N WITH LEFT HOOK - {0x019E, 0x019E, prLower}, // L& LATIN SMALL LETTER N WITH LONG RIGHT LEG - {0x019F, 0x01A0, prUpper}, // L& [2] LATIN CAPITAL LETTER O WITH MIDDLE TILDE..LATIN CAPITAL LETTER O WITH HORN - {0x01A1, 0x01A1, prLower}, // L& LATIN SMALL LETTER O WITH HORN - {0x01A2, 0x01A2, prUpper}, // L& LATIN CAPITAL LETTER OI - {0x01A3, 0x01A3, prLower}, // L& LATIN SMALL LETTER OI - {0x01A4, 0x01A4, prUpper}, // L& LATIN CAPITAL LETTER P WITH HOOK - {0x01A5, 0x01A5, prLower}, // L& LATIN SMALL LETTER P WITH HOOK - {0x01A6, 0x01A7, prUpper}, // L& [2] LATIN LETTER YR..LATIN CAPITAL LETTER TONE TWO - {0x01A8, 0x01A8, prLower}, // L& LATIN SMALL LETTER TONE TWO - {0x01A9, 0x01A9, prUpper}, // L& LATIN CAPITAL LETTER ESH - {0x01AA, 0x01AB, prLower}, // L& [2] LATIN LETTER REVERSED ESH LOOP..LATIN SMALL LETTER T WITH PALATAL HOOK - {0x01AC, 0x01AC, prUpper}, // L& LATIN CAPITAL LETTER T WITH HOOK - {0x01AD, 0x01AD, prLower}, // L& LATIN SMALL LETTER T WITH HOOK - {0x01AE, 0x01AF, prUpper}, // L& [2] LATIN CAPITAL LETTER T WITH RETROFLEX HOOK..LATIN CAPITAL LETTER U WITH HORN - {0x01B0, 0x01B0, prLower}, // L& LATIN SMALL LETTER U WITH HORN - {0x01B1, 0x01B3, prUpper}, // L& [3] LATIN CAPITAL LETTER UPSILON..LATIN CAPITAL LETTER Y WITH HOOK - {0x01B4, 0x01B4, prLower}, // L& LATIN SMALL LETTER Y WITH HOOK - {0x01B5, 0x01B5, prUpper}, // L& LATIN CAPITAL LETTER Z WITH STROKE - {0x01B6, 0x01B6, prLower}, // L& LATIN SMALL LETTER Z WITH STROKE - {0x01B7, 0x01B8, prUpper}, // L& [2] LATIN CAPITAL LETTER EZH..LATIN CAPITAL LETTER EZH REVERSED - {0x01B9, 0x01BA, prLower}, // L& [2] LATIN SMALL LETTER EZH REVERSED..LATIN SMALL LETTER EZH WITH TAIL - {0x01BB, 0x01BB, prOLetter}, // Lo LATIN LETTER TWO WITH STROKE - {0x01BC, 0x01BC, prUpper}, // L& LATIN CAPITAL LETTER TONE FIVE - {0x01BD, 0x01BF, prLower}, // L& [3] LATIN SMALL LETTER TONE FIVE..LATIN LETTER WYNN - {0x01C0, 0x01C3, prOLetter}, // Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK - {0x01C4, 0x01C5, prUpper}, // L& [2] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON - {0x01C6, 0x01C6, prLower}, // L& LATIN SMALL LETTER DZ WITH CARON - {0x01C7, 0x01C8, prUpper}, // L& [2] LATIN CAPITAL LETTER LJ..LATIN CAPITAL LETTER L WITH SMALL LETTER J - {0x01C9, 0x01C9, prLower}, // L& LATIN SMALL LETTER LJ - {0x01CA, 0x01CB, prUpper}, // L& [2] LATIN CAPITAL LETTER NJ..LATIN CAPITAL LETTER N WITH SMALL LETTER J - {0x01CC, 0x01CC, prLower}, // L& LATIN SMALL LETTER NJ - {0x01CD, 0x01CD, prUpper}, // L& LATIN CAPITAL LETTER A WITH CARON - {0x01CE, 0x01CE, prLower}, // L& LATIN SMALL LETTER A WITH CARON - {0x01CF, 0x01CF, prUpper}, // L& LATIN CAPITAL LETTER I WITH CARON - {0x01D0, 0x01D0, prLower}, // L& LATIN SMALL LETTER I WITH CARON - {0x01D1, 0x01D1, prUpper}, // L& LATIN CAPITAL LETTER O WITH CARON - {0x01D2, 0x01D2, prLower}, // L& LATIN SMALL LETTER O WITH CARON - {0x01D3, 0x01D3, prUpper}, // L& LATIN CAPITAL LETTER U WITH CARON - {0x01D4, 0x01D4, prLower}, // L& LATIN SMALL LETTER U WITH CARON - {0x01D5, 0x01D5, prUpper}, // L& LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON - {0x01D6, 0x01D6, prLower}, // L& LATIN SMALL LETTER U WITH DIAERESIS AND MACRON - {0x01D7, 0x01D7, prUpper}, // L& LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE - {0x01D8, 0x01D8, prLower}, // L& LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE - {0x01D9, 0x01D9, prUpper}, // L& LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON - {0x01DA, 0x01DA, prLower}, // L& LATIN SMALL LETTER U WITH DIAERESIS AND CARON - {0x01DB, 0x01DB, prUpper}, // L& LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE - {0x01DC, 0x01DD, prLower}, // L& [2] LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE..LATIN SMALL LETTER TURNED E - {0x01DE, 0x01DE, prUpper}, // L& LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON - {0x01DF, 0x01DF, prLower}, // L& LATIN SMALL LETTER A WITH DIAERESIS AND MACRON - {0x01E0, 0x01E0, prUpper}, // L& LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON - {0x01E1, 0x01E1, prLower}, // L& LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON - {0x01E2, 0x01E2, prUpper}, // L& LATIN CAPITAL LETTER AE WITH MACRON - {0x01E3, 0x01E3, prLower}, // L& LATIN SMALL LETTER AE WITH MACRON - {0x01E4, 0x01E4, prUpper}, // L& LATIN CAPITAL LETTER G WITH STROKE - {0x01E5, 0x01E5, prLower}, // L& LATIN SMALL LETTER G WITH STROKE - {0x01E6, 0x01E6, prUpper}, // L& LATIN CAPITAL LETTER G WITH CARON - {0x01E7, 0x01E7, prLower}, // L& LATIN SMALL LETTER G WITH CARON - {0x01E8, 0x01E8, prUpper}, // L& LATIN CAPITAL LETTER K WITH CARON - {0x01E9, 0x01E9, prLower}, // L& LATIN SMALL LETTER K WITH CARON - {0x01EA, 0x01EA, prUpper}, // L& LATIN CAPITAL LETTER O WITH OGONEK - {0x01EB, 0x01EB, prLower}, // L& LATIN SMALL LETTER O WITH OGONEK - {0x01EC, 0x01EC, prUpper}, // L& LATIN CAPITAL LETTER O WITH OGONEK AND MACRON - {0x01ED, 0x01ED, prLower}, // L& LATIN SMALL LETTER O WITH OGONEK AND MACRON - {0x01EE, 0x01EE, prUpper}, // L& LATIN CAPITAL LETTER EZH WITH CARON - {0x01EF, 0x01F0, prLower}, // L& [2] LATIN SMALL LETTER EZH WITH CARON..LATIN SMALL LETTER J WITH CARON - {0x01F1, 0x01F2, prUpper}, // L& [2] LATIN CAPITAL LETTER DZ..LATIN CAPITAL LETTER D WITH SMALL LETTER Z - {0x01F3, 0x01F3, prLower}, // L& LATIN SMALL LETTER DZ - {0x01F4, 0x01F4, prUpper}, // L& LATIN CAPITAL LETTER G WITH ACUTE - {0x01F5, 0x01F5, prLower}, // L& LATIN SMALL LETTER G WITH ACUTE - {0x01F6, 0x01F8, prUpper}, // L& [3] LATIN CAPITAL LETTER HWAIR..LATIN CAPITAL LETTER N WITH GRAVE - {0x01F9, 0x01F9, prLower}, // L& LATIN SMALL LETTER N WITH GRAVE - {0x01FA, 0x01FA, prUpper}, // L& LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE - {0x01FB, 0x01FB, prLower}, // L& LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE - {0x01FC, 0x01FC, prUpper}, // L& LATIN CAPITAL LETTER AE WITH ACUTE - {0x01FD, 0x01FD, prLower}, // L& LATIN SMALL LETTER AE WITH ACUTE - {0x01FE, 0x01FE, prUpper}, // L& LATIN CAPITAL LETTER O WITH STROKE AND ACUTE - {0x01FF, 0x01FF, prLower}, // L& LATIN SMALL LETTER O WITH STROKE AND ACUTE - {0x0200, 0x0200, prUpper}, // L& LATIN CAPITAL LETTER A WITH DOUBLE GRAVE - {0x0201, 0x0201, prLower}, // L& LATIN SMALL LETTER A WITH DOUBLE GRAVE - {0x0202, 0x0202, prUpper}, // L& LATIN CAPITAL LETTER A WITH INVERTED BREVE - {0x0203, 0x0203, prLower}, // L& LATIN SMALL LETTER A WITH INVERTED BREVE - {0x0204, 0x0204, prUpper}, // L& LATIN CAPITAL LETTER E WITH DOUBLE GRAVE - {0x0205, 0x0205, prLower}, // L& LATIN SMALL LETTER E WITH DOUBLE GRAVE - {0x0206, 0x0206, prUpper}, // L& LATIN CAPITAL LETTER E WITH INVERTED BREVE - {0x0207, 0x0207, prLower}, // L& LATIN SMALL LETTER E WITH INVERTED BREVE - {0x0208, 0x0208, prUpper}, // L& LATIN CAPITAL LETTER I WITH DOUBLE GRAVE - {0x0209, 0x0209, prLower}, // L& LATIN SMALL LETTER I WITH DOUBLE GRAVE - {0x020A, 0x020A, prUpper}, // L& LATIN CAPITAL LETTER I WITH INVERTED BREVE - {0x020B, 0x020B, prLower}, // L& LATIN SMALL LETTER I WITH INVERTED BREVE - {0x020C, 0x020C, prUpper}, // L& LATIN CAPITAL LETTER O WITH DOUBLE GRAVE - {0x020D, 0x020D, prLower}, // L& LATIN SMALL LETTER O WITH DOUBLE GRAVE - {0x020E, 0x020E, prUpper}, // L& LATIN CAPITAL LETTER O WITH INVERTED BREVE - {0x020F, 0x020F, prLower}, // L& LATIN SMALL LETTER O WITH INVERTED BREVE - {0x0210, 0x0210, prUpper}, // L& LATIN CAPITAL LETTER R WITH DOUBLE GRAVE - {0x0211, 0x0211, prLower}, // L& LATIN SMALL LETTER R WITH DOUBLE GRAVE - {0x0212, 0x0212, prUpper}, // L& LATIN CAPITAL LETTER R WITH INVERTED BREVE - {0x0213, 0x0213, prLower}, // L& LATIN SMALL LETTER R WITH INVERTED BREVE - {0x0214, 0x0214, prUpper}, // L& LATIN CAPITAL LETTER U WITH DOUBLE GRAVE - {0x0215, 0x0215, prLower}, // L& LATIN SMALL LETTER U WITH DOUBLE GRAVE - {0x0216, 0x0216, prUpper}, // L& LATIN CAPITAL LETTER U WITH INVERTED BREVE - {0x0217, 0x0217, prLower}, // L& LATIN SMALL LETTER U WITH INVERTED BREVE - {0x0218, 0x0218, prUpper}, // L& LATIN CAPITAL LETTER S WITH COMMA BELOW - {0x0219, 0x0219, prLower}, // L& LATIN SMALL LETTER S WITH COMMA BELOW - {0x021A, 0x021A, prUpper}, // L& LATIN CAPITAL LETTER T WITH COMMA BELOW - {0x021B, 0x021B, prLower}, // L& LATIN SMALL LETTER T WITH COMMA BELOW - {0x021C, 0x021C, prUpper}, // L& LATIN CAPITAL LETTER YOGH - {0x021D, 0x021D, prLower}, // L& LATIN SMALL LETTER YOGH - {0x021E, 0x021E, prUpper}, // L& LATIN CAPITAL LETTER H WITH CARON - {0x021F, 0x021F, prLower}, // L& LATIN SMALL LETTER H WITH CARON - {0x0220, 0x0220, prUpper}, // L& LATIN CAPITAL LETTER N WITH LONG RIGHT LEG - {0x0221, 0x0221, prLower}, // L& LATIN SMALL LETTER D WITH CURL - {0x0222, 0x0222, prUpper}, // L& LATIN CAPITAL LETTER OU - {0x0223, 0x0223, prLower}, // L& LATIN SMALL LETTER OU - {0x0224, 0x0224, prUpper}, // L& LATIN CAPITAL LETTER Z WITH HOOK - {0x0225, 0x0225, prLower}, // L& LATIN SMALL LETTER Z WITH HOOK - {0x0226, 0x0226, prUpper}, // L& LATIN CAPITAL LETTER A WITH DOT ABOVE - {0x0227, 0x0227, prLower}, // L& LATIN SMALL LETTER A WITH DOT ABOVE - {0x0228, 0x0228, prUpper}, // L& LATIN CAPITAL LETTER E WITH CEDILLA - {0x0229, 0x0229, prLower}, // L& LATIN SMALL LETTER E WITH CEDILLA - {0x022A, 0x022A, prUpper}, // L& LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON - {0x022B, 0x022B, prLower}, // L& LATIN SMALL LETTER O WITH DIAERESIS AND MACRON - {0x022C, 0x022C, prUpper}, // L& LATIN CAPITAL LETTER O WITH TILDE AND MACRON - {0x022D, 0x022D, prLower}, // L& LATIN SMALL LETTER O WITH TILDE AND MACRON - {0x022E, 0x022E, prUpper}, // L& LATIN CAPITAL LETTER O WITH DOT ABOVE - {0x022F, 0x022F, prLower}, // L& LATIN SMALL LETTER O WITH DOT ABOVE - {0x0230, 0x0230, prUpper}, // L& LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON - {0x0231, 0x0231, prLower}, // L& LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON - {0x0232, 0x0232, prUpper}, // L& LATIN CAPITAL LETTER Y WITH MACRON - {0x0233, 0x0239, prLower}, // L& [7] LATIN SMALL LETTER Y WITH MACRON..LATIN SMALL LETTER QP DIGRAPH - {0x023A, 0x023B, prUpper}, // L& [2] LATIN CAPITAL LETTER A WITH STROKE..LATIN CAPITAL LETTER C WITH STROKE - {0x023C, 0x023C, prLower}, // L& LATIN SMALL LETTER C WITH STROKE - {0x023D, 0x023E, prUpper}, // L& [2] LATIN CAPITAL LETTER L WITH BAR..LATIN CAPITAL LETTER T WITH DIAGONAL STROKE - {0x023F, 0x0240, prLower}, // L& [2] LATIN SMALL LETTER S WITH SWASH TAIL..LATIN SMALL LETTER Z WITH SWASH TAIL - {0x0241, 0x0241, prUpper}, // L& LATIN CAPITAL LETTER GLOTTAL STOP - {0x0242, 0x0242, prLower}, // L& LATIN SMALL LETTER GLOTTAL STOP - {0x0243, 0x0246, prUpper}, // L& [4] LATIN CAPITAL LETTER B WITH STROKE..LATIN CAPITAL LETTER E WITH STROKE - {0x0247, 0x0247, prLower}, // L& LATIN SMALL LETTER E WITH STROKE - {0x0248, 0x0248, prUpper}, // L& LATIN CAPITAL LETTER J WITH STROKE - {0x0249, 0x0249, prLower}, // L& LATIN SMALL LETTER J WITH STROKE - {0x024A, 0x024A, prUpper}, // L& LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL - {0x024B, 0x024B, prLower}, // L& LATIN SMALL LETTER Q WITH HOOK TAIL - {0x024C, 0x024C, prUpper}, // L& LATIN CAPITAL LETTER R WITH STROKE - {0x024D, 0x024D, prLower}, // L& LATIN SMALL LETTER R WITH STROKE - {0x024E, 0x024E, prUpper}, // L& LATIN CAPITAL LETTER Y WITH STROKE - {0x024F, 0x0293, prLower}, // L& [69] LATIN SMALL LETTER Y WITH STROKE..LATIN SMALL LETTER EZH WITH CURL - {0x0294, 0x0294, prOLetter}, // Lo LATIN LETTER GLOTTAL STOP - {0x0295, 0x02AF, prLower}, // L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL - {0x02B0, 0x02B8, prLower}, // Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y - {0x02B9, 0x02BF, prOLetter}, // Lm [7] MODIFIER LETTER PRIME..MODIFIER LETTER LEFT HALF RING - {0x02C0, 0x02C1, prLower}, // Lm [2] MODIFIER LETTER GLOTTAL STOP..MODIFIER LETTER REVERSED GLOTTAL STOP - {0x02C6, 0x02D1, prOLetter}, // Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON - {0x02E0, 0x02E4, prLower}, // Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP - {0x02EC, 0x02EC, prOLetter}, // Lm MODIFIER LETTER VOICING - {0x02EE, 0x02EE, prOLetter}, // Lm MODIFIER LETTER DOUBLE APOSTROPHE - {0x0300, 0x036F, prExtend}, // Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X - {0x0370, 0x0370, prUpper}, // L& GREEK CAPITAL LETTER HETA - {0x0371, 0x0371, prLower}, // L& GREEK SMALL LETTER HETA - {0x0372, 0x0372, prUpper}, // L& GREEK CAPITAL LETTER ARCHAIC SAMPI - {0x0373, 0x0373, prLower}, // L& GREEK SMALL LETTER ARCHAIC SAMPI - {0x0374, 0x0374, prOLetter}, // Lm GREEK NUMERAL SIGN - {0x0376, 0x0376, prUpper}, // L& GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA - {0x0377, 0x0377, prLower}, // L& GREEK SMALL LETTER PAMPHYLIAN DIGAMMA - {0x037A, 0x037A, prLower}, // Lm GREEK YPOGEGRAMMENI - {0x037B, 0x037D, prLower}, // L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL - {0x037F, 0x037F, prUpper}, // L& GREEK CAPITAL LETTER YOT - {0x0386, 0x0386, prUpper}, // L& GREEK CAPITAL LETTER ALPHA WITH TONOS - {0x0388, 0x038A, prUpper}, // L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS - {0x038C, 0x038C, prUpper}, // L& GREEK CAPITAL LETTER OMICRON WITH TONOS - {0x038E, 0x038F, prUpper}, // L& [2] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER OMEGA WITH TONOS - {0x0390, 0x0390, prLower}, // L& GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS - {0x0391, 0x03A1, prUpper}, // L& [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO - {0x03A3, 0x03AB, prUpper}, // L& [9] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA - {0x03AC, 0x03CE, prLower}, // L& [35] GREEK SMALL LETTER ALPHA WITH TONOS..GREEK SMALL LETTER OMEGA WITH TONOS - {0x03CF, 0x03CF, prUpper}, // L& GREEK CAPITAL KAI SYMBOL - {0x03D0, 0x03D1, prLower}, // L& [2] GREEK BETA SYMBOL..GREEK THETA SYMBOL - {0x03D2, 0x03D4, prUpper}, // L& [3] GREEK UPSILON WITH HOOK SYMBOL..GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL - {0x03D5, 0x03D7, prLower}, // L& [3] GREEK PHI SYMBOL..GREEK KAI SYMBOL - {0x03D8, 0x03D8, prUpper}, // L& GREEK LETTER ARCHAIC KOPPA - {0x03D9, 0x03D9, prLower}, // L& GREEK SMALL LETTER ARCHAIC KOPPA - {0x03DA, 0x03DA, prUpper}, // L& GREEK LETTER STIGMA - {0x03DB, 0x03DB, prLower}, // L& GREEK SMALL LETTER STIGMA - {0x03DC, 0x03DC, prUpper}, // L& GREEK LETTER DIGAMMA - {0x03DD, 0x03DD, prLower}, // L& GREEK SMALL LETTER DIGAMMA - {0x03DE, 0x03DE, prUpper}, // L& GREEK LETTER KOPPA - {0x03DF, 0x03DF, prLower}, // L& GREEK SMALL LETTER KOPPA - {0x03E0, 0x03E0, prUpper}, // L& GREEK LETTER SAMPI - {0x03E1, 0x03E1, prLower}, // L& GREEK SMALL LETTER SAMPI - {0x03E2, 0x03E2, prUpper}, // L& COPTIC CAPITAL LETTER SHEI - {0x03E3, 0x03E3, prLower}, // L& COPTIC SMALL LETTER SHEI - {0x03E4, 0x03E4, prUpper}, // L& COPTIC CAPITAL LETTER FEI - {0x03E5, 0x03E5, prLower}, // L& COPTIC SMALL LETTER FEI - {0x03E6, 0x03E6, prUpper}, // L& COPTIC CAPITAL LETTER KHEI - {0x03E7, 0x03E7, prLower}, // L& COPTIC SMALL LETTER KHEI - {0x03E8, 0x03E8, prUpper}, // L& COPTIC CAPITAL LETTER HORI - {0x03E9, 0x03E9, prLower}, // L& COPTIC SMALL LETTER HORI - {0x03EA, 0x03EA, prUpper}, // L& COPTIC CAPITAL LETTER GANGIA - {0x03EB, 0x03EB, prLower}, // L& COPTIC SMALL LETTER GANGIA - {0x03EC, 0x03EC, prUpper}, // L& COPTIC CAPITAL LETTER SHIMA - {0x03ED, 0x03ED, prLower}, // L& COPTIC SMALL LETTER SHIMA - {0x03EE, 0x03EE, prUpper}, // L& COPTIC CAPITAL LETTER DEI - {0x03EF, 0x03F3, prLower}, // L& [5] COPTIC SMALL LETTER DEI..GREEK LETTER YOT - {0x03F4, 0x03F4, prUpper}, // L& GREEK CAPITAL THETA SYMBOL - {0x03F5, 0x03F5, prLower}, // L& GREEK LUNATE EPSILON SYMBOL - {0x03F7, 0x03F7, prUpper}, // L& GREEK CAPITAL LETTER SHO - {0x03F8, 0x03F8, prLower}, // L& GREEK SMALL LETTER SHO - {0x03F9, 0x03FA, prUpper}, // L& [2] GREEK CAPITAL LUNATE SIGMA SYMBOL..GREEK CAPITAL LETTER SAN - {0x03FB, 0x03FC, prLower}, // L& [2] GREEK SMALL LETTER SAN..GREEK RHO WITH STROKE SYMBOL - {0x03FD, 0x042F, prUpper}, // L& [51] GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL..CYRILLIC CAPITAL LETTER YA - {0x0430, 0x045F, prLower}, // L& [48] CYRILLIC SMALL LETTER A..CYRILLIC SMALL LETTER DZHE - {0x0460, 0x0460, prUpper}, // L& CYRILLIC CAPITAL LETTER OMEGA - {0x0461, 0x0461, prLower}, // L& CYRILLIC SMALL LETTER OMEGA - {0x0462, 0x0462, prUpper}, // L& CYRILLIC CAPITAL LETTER YAT - {0x0463, 0x0463, prLower}, // L& CYRILLIC SMALL LETTER YAT - {0x0464, 0x0464, prUpper}, // L& CYRILLIC CAPITAL LETTER IOTIFIED E - {0x0465, 0x0465, prLower}, // L& CYRILLIC SMALL LETTER IOTIFIED E - {0x0466, 0x0466, prUpper}, // L& CYRILLIC CAPITAL LETTER LITTLE YUS - {0x0467, 0x0467, prLower}, // L& CYRILLIC SMALL LETTER LITTLE YUS - {0x0468, 0x0468, prUpper}, // L& CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS - {0x0469, 0x0469, prLower}, // L& CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS - {0x046A, 0x046A, prUpper}, // L& CYRILLIC CAPITAL LETTER BIG YUS - {0x046B, 0x046B, prLower}, // L& CYRILLIC SMALL LETTER BIG YUS - {0x046C, 0x046C, prUpper}, // L& CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS - {0x046D, 0x046D, prLower}, // L& CYRILLIC SMALL LETTER IOTIFIED BIG YUS - {0x046E, 0x046E, prUpper}, // L& CYRILLIC CAPITAL LETTER KSI - {0x046F, 0x046F, prLower}, // L& CYRILLIC SMALL LETTER KSI - {0x0470, 0x0470, prUpper}, // L& CYRILLIC CAPITAL LETTER PSI - {0x0471, 0x0471, prLower}, // L& CYRILLIC SMALL LETTER PSI - {0x0472, 0x0472, prUpper}, // L& CYRILLIC CAPITAL LETTER FITA - {0x0473, 0x0473, prLower}, // L& CYRILLIC SMALL LETTER FITA - {0x0474, 0x0474, prUpper}, // L& CYRILLIC CAPITAL LETTER IZHITSA - {0x0475, 0x0475, prLower}, // L& CYRILLIC SMALL LETTER IZHITSA - {0x0476, 0x0476, prUpper}, // L& CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT - {0x0477, 0x0477, prLower}, // L& CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT - {0x0478, 0x0478, prUpper}, // L& CYRILLIC CAPITAL LETTER UK - {0x0479, 0x0479, prLower}, // L& CYRILLIC SMALL LETTER UK - {0x047A, 0x047A, prUpper}, // L& CYRILLIC CAPITAL LETTER ROUND OMEGA - {0x047B, 0x047B, prLower}, // L& CYRILLIC SMALL LETTER ROUND OMEGA - {0x047C, 0x047C, prUpper}, // L& CYRILLIC CAPITAL LETTER OMEGA WITH TITLO - {0x047D, 0x047D, prLower}, // L& CYRILLIC SMALL LETTER OMEGA WITH TITLO - {0x047E, 0x047E, prUpper}, // L& CYRILLIC CAPITAL LETTER OT - {0x047F, 0x047F, prLower}, // L& CYRILLIC SMALL LETTER OT - {0x0480, 0x0480, prUpper}, // L& CYRILLIC CAPITAL LETTER KOPPA - {0x0481, 0x0481, prLower}, // L& CYRILLIC SMALL LETTER KOPPA - {0x0483, 0x0487, prExtend}, // Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE - {0x0488, 0x0489, prExtend}, // Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN - {0x048A, 0x048A, prUpper}, // L& CYRILLIC CAPITAL LETTER SHORT I WITH TAIL - {0x048B, 0x048B, prLower}, // L& CYRILLIC SMALL LETTER SHORT I WITH TAIL - {0x048C, 0x048C, prUpper}, // L& CYRILLIC CAPITAL LETTER SEMISOFT SIGN - {0x048D, 0x048D, prLower}, // L& CYRILLIC SMALL LETTER SEMISOFT SIGN - {0x048E, 0x048E, prUpper}, // L& CYRILLIC CAPITAL LETTER ER WITH TICK - {0x048F, 0x048F, prLower}, // L& CYRILLIC SMALL LETTER ER WITH TICK - {0x0490, 0x0490, prUpper}, // L& CYRILLIC CAPITAL LETTER GHE WITH UPTURN - {0x0491, 0x0491, prLower}, // L& CYRILLIC SMALL LETTER GHE WITH UPTURN - {0x0492, 0x0492, prUpper}, // L& CYRILLIC CAPITAL LETTER GHE WITH STROKE - {0x0493, 0x0493, prLower}, // L& CYRILLIC SMALL LETTER GHE WITH STROKE - {0x0494, 0x0494, prUpper}, // L& CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK - {0x0495, 0x0495, prLower}, // L& CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK - {0x0496, 0x0496, prUpper}, // L& CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER - {0x0497, 0x0497, prLower}, // L& CYRILLIC SMALL LETTER ZHE WITH DESCENDER - {0x0498, 0x0498, prUpper}, // L& CYRILLIC CAPITAL LETTER ZE WITH DESCENDER - {0x0499, 0x0499, prLower}, // L& CYRILLIC SMALL LETTER ZE WITH DESCENDER - {0x049A, 0x049A, prUpper}, // L& CYRILLIC CAPITAL LETTER KA WITH DESCENDER - {0x049B, 0x049B, prLower}, // L& CYRILLIC SMALL LETTER KA WITH DESCENDER - {0x049C, 0x049C, prUpper}, // L& CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE - {0x049D, 0x049D, prLower}, // L& CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE - {0x049E, 0x049E, prUpper}, // L& CYRILLIC CAPITAL LETTER KA WITH STROKE - {0x049F, 0x049F, prLower}, // L& CYRILLIC SMALL LETTER KA WITH STROKE - {0x04A0, 0x04A0, prUpper}, // L& CYRILLIC CAPITAL LETTER BASHKIR KA - {0x04A1, 0x04A1, prLower}, // L& CYRILLIC SMALL LETTER BASHKIR KA - {0x04A2, 0x04A2, prUpper}, // L& CYRILLIC CAPITAL LETTER EN WITH DESCENDER - {0x04A3, 0x04A3, prLower}, // L& CYRILLIC SMALL LETTER EN WITH DESCENDER - {0x04A4, 0x04A4, prUpper}, // L& CYRILLIC CAPITAL LIGATURE EN GHE - {0x04A5, 0x04A5, prLower}, // L& CYRILLIC SMALL LIGATURE EN GHE - {0x04A6, 0x04A6, prUpper}, // L& CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK - {0x04A7, 0x04A7, prLower}, // L& CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK - {0x04A8, 0x04A8, prUpper}, // L& CYRILLIC CAPITAL LETTER ABKHASIAN HA - {0x04A9, 0x04A9, prLower}, // L& CYRILLIC SMALL LETTER ABKHASIAN HA - {0x04AA, 0x04AA, prUpper}, // L& CYRILLIC CAPITAL LETTER ES WITH DESCENDER - {0x04AB, 0x04AB, prLower}, // L& CYRILLIC SMALL LETTER ES WITH DESCENDER - {0x04AC, 0x04AC, prUpper}, // L& CYRILLIC CAPITAL LETTER TE WITH DESCENDER - {0x04AD, 0x04AD, prLower}, // L& CYRILLIC SMALL LETTER TE WITH DESCENDER - {0x04AE, 0x04AE, prUpper}, // L& CYRILLIC CAPITAL LETTER STRAIGHT U - {0x04AF, 0x04AF, prLower}, // L& CYRILLIC SMALL LETTER STRAIGHT U - {0x04B0, 0x04B0, prUpper}, // L& CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE - {0x04B1, 0x04B1, prLower}, // L& CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE - {0x04B2, 0x04B2, prUpper}, // L& CYRILLIC CAPITAL LETTER HA WITH DESCENDER - {0x04B3, 0x04B3, prLower}, // L& CYRILLIC SMALL LETTER HA WITH DESCENDER - {0x04B4, 0x04B4, prUpper}, // L& CYRILLIC CAPITAL LIGATURE TE TSE - {0x04B5, 0x04B5, prLower}, // L& CYRILLIC SMALL LIGATURE TE TSE - {0x04B6, 0x04B6, prUpper}, // L& CYRILLIC CAPITAL LETTER CHE WITH DESCENDER - {0x04B7, 0x04B7, prLower}, // L& CYRILLIC SMALL LETTER CHE WITH DESCENDER - {0x04B8, 0x04B8, prUpper}, // L& CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE - {0x04B9, 0x04B9, prLower}, // L& CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE - {0x04BA, 0x04BA, prUpper}, // L& CYRILLIC CAPITAL LETTER SHHA - {0x04BB, 0x04BB, prLower}, // L& CYRILLIC SMALL LETTER SHHA - {0x04BC, 0x04BC, prUpper}, // L& CYRILLIC CAPITAL LETTER ABKHASIAN CHE - {0x04BD, 0x04BD, prLower}, // L& CYRILLIC SMALL LETTER ABKHASIAN CHE - {0x04BE, 0x04BE, prUpper}, // L& CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER - {0x04BF, 0x04BF, prLower}, // L& CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER - {0x04C0, 0x04C1, prUpper}, // L& [2] CYRILLIC LETTER PALOCHKA..CYRILLIC CAPITAL LETTER ZHE WITH BREVE - {0x04C2, 0x04C2, prLower}, // L& CYRILLIC SMALL LETTER ZHE WITH BREVE - {0x04C3, 0x04C3, prUpper}, // L& CYRILLIC CAPITAL LETTER KA WITH HOOK - {0x04C4, 0x04C4, prLower}, // L& CYRILLIC SMALL LETTER KA WITH HOOK - {0x04C5, 0x04C5, prUpper}, // L& CYRILLIC CAPITAL LETTER EL WITH TAIL - {0x04C6, 0x04C6, prLower}, // L& CYRILLIC SMALL LETTER EL WITH TAIL - {0x04C7, 0x04C7, prUpper}, // L& CYRILLIC CAPITAL LETTER EN WITH HOOK - {0x04C8, 0x04C8, prLower}, // L& CYRILLIC SMALL LETTER EN WITH HOOK - {0x04C9, 0x04C9, prUpper}, // L& CYRILLIC CAPITAL LETTER EN WITH TAIL - {0x04CA, 0x04CA, prLower}, // L& CYRILLIC SMALL LETTER EN WITH TAIL - {0x04CB, 0x04CB, prUpper}, // L& CYRILLIC CAPITAL LETTER KHAKASSIAN CHE - {0x04CC, 0x04CC, prLower}, // L& CYRILLIC SMALL LETTER KHAKASSIAN CHE - {0x04CD, 0x04CD, prUpper}, // L& CYRILLIC CAPITAL LETTER EM WITH TAIL - {0x04CE, 0x04CF, prLower}, // L& [2] CYRILLIC SMALL LETTER EM WITH TAIL..CYRILLIC SMALL LETTER PALOCHKA - {0x04D0, 0x04D0, prUpper}, // L& CYRILLIC CAPITAL LETTER A WITH BREVE - {0x04D1, 0x04D1, prLower}, // L& CYRILLIC SMALL LETTER A WITH BREVE - {0x04D2, 0x04D2, prUpper}, // L& CYRILLIC CAPITAL LETTER A WITH DIAERESIS - {0x04D3, 0x04D3, prLower}, // L& CYRILLIC SMALL LETTER A WITH DIAERESIS - {0x04D4, 0x04D4, prUpper}, // L& CYRILLIC CAPITAL LIGATURE A IE - {0x04D5, 0x04D5, prLower}, // L& CYRILLIC SMALL LIGATURE A IE - {0x04D6, 0x04D6, prUpper}, // L& CYRILLIC CAPITAL LETTER IE WITH BREVE - {0x04D7, 0x04D7, prLower}, // L& CYRILLIC SMALL LETTER IE WITH BREVE - {0x04D8, 0x04D8, prUpper}, // L& CYRILLIC CAPITAL LETTER SCHWA - {0x04D9, 0x04D9, prLower}, // L& CYRILLIC SMALL LETTER SCHWA - {0x04DA, 0x04DA, prUpper}, // L& CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS - {0x04DB, 0x04DB, prLower}, // L& CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS - {0x04DC, 0x04DC, prUpper}, // L& CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS - {0x04DD, 0x04DD, prLower}, // L& CYRILLIC SMALL LETTER ZHE WITH DIAERESIS - {0x04DE, 0x04DE, prUpper}, // L& CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS - {0x04DF, 0x04DF, prLower}, // L& CYRILLIC SMALL LETTER ZE WITH DIAERESIS - {0x04E0, 0x04E0, prUpper}, // L& CYRILLIC CAPITAL LETTER ABKHASIAN DZE - {0x04E1, 0x04E1, prLower}, // L& CYRILLIC SMALL LETTER ABKHASIAN DZE - {0x04E2, 0x04E2, prUpper}, // L& CYRILLIC CAPITAL LETTER I WITH MACRON - {0x04E3, 0x04E3, prLower}, // L& CYRILLIC SMALL LETTER I WITH MACRON - {0x04E4, 0x04E4, prUpper}, // L& CYRILLIC CAPITAL LETTER I WITH DIAERESIS - {0x04E5, 0x04E5, prLower}, // L& CYRILLIC SMALL LETTER I WITH DIAERESIS - {0x04E6, 0x04E6, prUpper}, // L& CYRILLIC CAPITAL LETTER O WITH DIAERESIS - {0x04E7, 0x04E7, prLower}, // L& CYRILLIC SMALL LETTER O WITH DIAERESIS - {0x04E8, 0x04E8, prUpper}, // L& CYRILLIC CAPITAL LETTER BARRED O - {0x04E9, 0x04E9, prLower}, // L& CYRILLIC SMALL LETTER BARRED O - {0x04EA, 0x04EA, prUpper}, // L& CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS - {0x04EB, 0x04EB, prLower}, // L& CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS - {0x04EC, 0x04EC, prUpper}, // L& CYRILLIC CAPITAL LETTER E WITH DIAERESIS - {0x04ED, 0x04ED, prLower}, // L& CYRILLIC SMALL LETTER E WITH DIAERESIS - {0x04EE, 0x04EE, prUpper}, // L& CYRILLIC CAPITAL LETTER U WITH MACRON - {0x04EF, 0x04EF, prLower}, // L& CYRILLIC SMALL LETTER U WITH MACRON - {0x04F0, 0x04F0, prUpper}, // L& CYRILLIC CAPITAL LETTER U WITH DIAERESIS - {0x04F1, 0x04F1, prLower}, // L& CYRILLIC SMALL LETTER U WITH DIAERESIS - {0x04F2, 0x04F2, prUpper}, // L& CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE - {0x04F3, 0x04F3, prLower}, // L& CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE - {0x04F4, 0x04F4, prUpper}, // L& CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS - {0x04F5, 0x04F5, prLower}, // L& CYRILLIC SMALL LETTER CHE WITH DIAERESIS - {0x04F6, 0x04F6, prUpper}, // L& CYRILLIC CAPITAL LETTER GHE WITH DESCENDER - {0x04F7, 0x04F7, prLower}, // L& CYRILLIC SMALL LETTER GHE WITH DESCENDER - {0x04F8, 0x04F8, prUpper}, // L& CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS - {0x04F9, 0x04F9, prLower}, // L& CYRILLIC SMALL LETTER YERU WITH DIAERESIS - {0x04FA, 0x04FA, prUpper}, // L& CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK - {0x04FB, 0x04FB, prLower}, // L& CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK - {0x04FC, 0x04FC, prUpper}, // L& CYRILLIC CAPITAL LETTER HA WITH HOOK - {0x04FD, 0x04FD, prLower}, // L& CYRILLIC SMALL LETTER HA WITH HOOK - {0x04FE, 0x04FE, prUpper}, // L& CYRILLIC CAPITAL LETTER HA WITH STROKE - {0x04FF, 0x04FF, prLower}, // L& CYRILLIC SMALL LETTER HA WITH STROKE - {0x0500, 0x0500, prUpper}, // L& CYRILLIC CAPITAL LETTER KOMI DE - {0x0501, 0x0501, prLower}, // L& CYRILLIC SMALL LETTER KOMI DE - {0x0502, 0x0502, prUpper}, // L& CYRILLIC CAPITAL LETTER KOMI DJE - {0x0503, 0x0503, prLower}, // L& CYRILLIC SMALL LETTER KOMI DJE - {0x0504, 0x0504, prUpper}, // L& CYRILLIC CAPITAL LETTER KOMI ZJE - {0x0505, 0x0505, prLower}, // L& CYRILLIC SMALL LETTER KOMI ZJE - {0x0506, 0x0506, prUpper}, // L& CYRILLIC CAPITAL LETTER KOMI DZJE - {0x0507, 0x0507, prLower}, // L& CYRILLIC SMALL LETTER KOMI DZJE - {0x0508, 0x0508, prUpper}, // L& CYRILLIC CAPITAL LETTER KOMI LJE - {0x0509, 0x0509, prLower}, // L& CYRILLIC SMALL LETTER KOMI LJE - {0x050A, 0x050A, prUpper}, // L& CYRILLIC CAPITAL LETTER KOMI NJE - {0x050B, 0x050B, prLower}, // L& CYRILLIC SMALL LETTER KOMI NJE - {0x050C, 0x050C, prUpper}, // L& CYRILLIC CAPITAL LETTER KOMI SJE - {0x050D, 0x050D, prLower}, // L& CYRILLIC SMALL LETTER KOMI SJE - {0x050E, 0x050E, prUpper}, // L& CYRILLIC CAPITAL LETTER KOMI TJE - {0x050F, 0x050F, prLower}, // L& CYRILLIC SMALL LETTER KOMI TJE - {0x0510, 0x0510, prUpper}, // L& CYRILLIC CAPITAL LETTER REVERSED ZE - {0x0511, 0x0511, prLower}, // L& CYRILLIC SMALL LETTER REVERSED ZE - {0x0512, 0x0512, prUpper}, // L& CYRILLIC CAPITAL LETTER EL WITH HOOK - {0x0513, 0x0513, prLower}, // L& CYRILLIC SMALL LETTER EL WITH HOOK - {0x0514, 0x0514, prUpper}, // L& CYRILLIC CAPITAL LETTER LHA - {0x0515, 0x0515, prLower}, // L& CYRILLIC SMALL LETTER LHA - {0x0516, 0x0516, prUpper}, // L& CYRILLIC CAPITAL LETTER RHA - {0x0517, 0x0517, prLower}, // L& CYRILLIC SMALL LETTER RHA - {0x0518, 0x0518, prUpper}, // L& CYRILLIC CAPITAL LETTER YAE - {0x0519, 0x0519, prLower}, // L& CYRILLIC SMALL LETTER YAE - {0x051A, 0x051A, prUpper}, // L& CYRILLIC CAPITAL LETTER QA - {0x051B, 0x051B, prLower}, // L& CYRILLIC SMALL LETTER QA - {0x051C, 0x051C, prUpper}, // L& CYRILLIC CAPITAL LETTER WE - {0x051D, 0x051D, prLower}, // L& CYRILLIC SMALL LETTER WE - {0x051E, 0x051E, prUpper}, // L& CYRILLIC CAPITAL LETTER ALEUT KA - {0x051F, 0x051F, prLower}, // L& CYRILLIC SMALL LETTER ALEUT KA - {0x0520, 0x0520, prUpper}, // L& CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK - {0x0521, 0x0521, prLower}, // L& CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK - {0x0522, 0x0522, prUpper}, // L& CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK - {0x0523, 0x0523, prLower}, // L& CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK - {0x0524, 0x0524, prUpper}, // L& CYRILLIC CAPITAL LETTER PE WITH DESCENDER - {0x0525, 0x0525, prLower}, // L& CYRILLIC SMALL LETTER PE WITH DESCENDER - {0x0526, 0x0526, prUpper}, // L& CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER - {0x0527, 0x0527, prLower}, // L& CYRILLIC SMALL LETTER SHHA WITH DESCENDER - {0x0528, 0x0528, prUpper}, // L& CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK - {0x0529, 0x0529, prLower}, // L& CYRILLIC SMALL LETTER EN WITH LEFT HOOK - {0x052A, 0x052A, prUpper}, // L& CYRILLIC CAPITAL LETTER DZZHE - {0x052B, 0x052B, prLower}, // L& CYRILLIC SMALL LETTER DZZHE - {0x052C, 0x052C, prUpper}, // L& CYRILLIC CAPITAL LETTER DCHE - {0x052D, 0x052D, prLower}, // L& CYRILLIC SMALL LETTER DCHE - {0x052E, 0x052E, prUpper}, // L& CYRILLIC CAPITAL LETTER EL WITH DESCENDER - {0x052F, 0x052F, prLower}, // L& CYRILLIC SMALL LETTER EL WITH DESCENDER - {0x0531, 0x0556, prUpper}, // L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH - {0x0559, 0x0559, prOLetter}, // Lm ARMENIAN MODIFIER LETTER LEFT HALF RING - {0x055D, 0x055D, prSContinue}, // Po ARMENIAN COMMA - {0x0560, 0x0588, prLower}, // L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE - {0x0589, 0x0589, prSTerm}, // Po ARMENIAN FULL STOP - {0x0591, 0x05BD, prExtend}, // Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG - {0x05BF, 0x05BF, prExtend}, // Mn HEBREW POINT RAFE - {0x05C1, 0x05C2, prExtend}, // Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT - {0x05C4, 0x05C5, prExtend}, // Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT - {0x05C7, 0x05C7, prExtend}, // Mn HEBREW POINT QAMATS QATAN - {0x05D0, 0x05EA, prOLetter}, // Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV - {0x05EF, 0x05F2, prOLetter}, // Lo [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD - {0x05F3, 0x05F3, prOLetter}, // Po HEBREW PUNCTUATION GERESH - {0x0600, 0x0605, prFormat}, // Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE - {0x060C, 0x060D, prSContinue}, // Po [2] ARABIC COMMA..ARABIC DATE SEPARATOR - {0x0610, 0x061A, prExtend}, // Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA - {0x061C, 0x061C, prFormat}, // Cf ARABIC LETTER MARK - {0x061D, 0x061F, prSTerm}, // Po [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK - {0x0620, 0x063F, prOLetter}, // Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE - {0x0640, 0x0640, prOLetter}, // Lm ARABIC TATWEEL - {0x0641, 0x064A, prOLetter}, // Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH - {0x064B, 0x065F, prExtend}, // Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW - {0x0660, 0x0669, prNumeric}, // Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE - {0x066B, 0x066C, prNumeric}, // Po [2] ARABIC DECIMAL SEPARATOR..ARABIC THOUSANDS SEPARATOR - {0x066E, 0x066F, prOLetter}, // Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF - {0x0670, 0x0670, prExtend}, // Mn ARABIC LETTER SUPERSCRIPT ALEF - {0x0671, 0x06D3, prOLetter}, // Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE - {0x06D4, 0x06D4, prSTerm}, // Po ARABIC FULL STOP - {0x06D5, 0x06D5, prOLetter}, // Lo ARABIC LETTER AE - {0x06D6, 0x06DC, prExtend}, // Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN - {0x06DD, 0x06DD, prFormat}, // Cf ARABIC END OF AYAH - {0x06DF, 0x06E4, prExtend}, // Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA - {0x06E5, 0x06E6, prOLetter}, // Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH - {0x06E7, 0x06E8, prExtend}, // Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON - {0x06EA, 0x06ED, prExtend}, // Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM - {0x06EE, 0x06EF, prOLetter}, // Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V - {0x06F0, 0x06F9, prNumeric}, // Nd [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE - {0x06FA, 0x06FC, prOLetter}, // Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW - {0x06FF, 0x06FF, prOLetter}, // Lo ARABIC LETTER HEH WITH INVERTED V - {0x0700, 0x0702, prSTerm}, // Po [3] SYRIAC END OF PARAGRAPH..SYRIAC SUBLINEAR FULL STOP - {0x070F, 0x070F, prFormat}, // Cf SYRIAC ABBREVIATION MARK - {0x0710, 0x0710, prOLetter}, // Lo SYRIAC LETTER ALAPH - {0x0711, 0x0711, prExtend}, // Mn SYRIAC LETTER SUPERSCRIPT ALAPH - {0x0712, 0x072F, prOLetter}, // Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH - {0x0730, 0x074A, prExtend}, // Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH - {0x074D, 0x07A5, prOLetter}, // Lo [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU - {0x07A6, 0x07B0, prExtend}, // Mn [11] THAANA ABAFILI..THAANA SUKUN - {0x07B1, 0x07B1, prOLetter}, // Lo THAANA LETTER NAA - {0x07C0, 0x07C9, prNumeric}, // Nd [10] NKO DIGIT ZERO..NKO DIGIT NINE - {0x07CA, 0x07EA, prOLetter}, // Lo [33] NKO LETTER A..NKO LETTER JONA RA - {0x07EB, 0x07F3, prExtend}, // Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE - {0x07F4, 0x07F5, prOLetter}, // Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE - {0x07F8, 0x07F8, prSContinue}, // Po NKO COMMA - {0x07F9, 0x07F9, prSTerm}, // Po NKO EXCLAMATION MARK - {0x07FA, 0x07FA, prOLetter}, // Lm NKO LAJANYALAN - {0x07FD, 0x07FD, prExtend}, // Mn NKO DANTAYALAN - {0x0800, 0x0815, prOLetter}, // Lo [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF - {0x0816, 0x0819, prExtend}, // Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH - {0x081A, 0x081A, prOLetter}, // Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT - {0x081B, 0x0823, prExtend}, // Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A - {0x0824, 0x0824, prOLetter}, // Lm SAMARITAN MODIFIER LETTER SHORT A - {0x0825, 0x0827, prExtend}, // Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U - {0x0828, 0x0828, prOLetter}, // Lm SAMARITAN MODIFIER LETTER I - {0x0829, 0x082D, prExtend}, // Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA - {0x0837, 0x0837, prSTerm}, // Po SAMARITAN PUNCTUATION MELODIC QITSA - {0x0839, 0x0839, prSTerm}, // Po SAMARITAN PUNCTUATION QITSA - {0x083D, 0x083E, prSTerm}, // Po [2] SAMARITAN PUNCTUATION SOF MASHFAAT..SAMARITAN PUNCTUATION ANNAAU - {0x0840, 0x0858, prOLetter}, // Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN - {0x0859, 0x085B, prExtend}, // Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK - {0x0860, 0x086A, prOLetter}, // Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA - {0x0870, 0x0887, prOLetter}, // Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT - {0x0889, 0x088E, prOLetter}, // Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL - {0x0890, 0x0891, prFormat}, // Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE - {0x0898, 0x089F, prExtend}, // Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA - {0x08A0, 0x08C8, prOLetter}, // Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF - {0x08C9, 0x08C9, prOLetter}, // Lm ARABIC SMALL FARSI YEH - {0x08CA, 0x08E1, prExtend}, // Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA - {0x08E2, 0x08E2, prFormat}, // Cf ARABIC DISPUTED END OF AYAH - {0x08E3, 0x0902, prExtend}, // Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA - {0x0903, 0x0903, prExtend}, // Mc DEVANAGARI SIGN VISARGA - {0x0904, 0x0939, prOLetter}, // Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA - {0x093A, 0x093A, prExtend}, // Mn DEVANAGARI VOWEL SIGN OE - {0x093B, 0x093B, prExtend}, // Mc DEVANAGARI VOWEL SIGN OOE - {0x093C, 0x093C, prExtend}, // Mn DEVANAGARI SIGN NUKTA - {0x093D, 0x093D, prOLetter}, // Lo DEVANAGARI SIGN AVAGRAHA - {0x093E, 0x0940, prExtend}, // Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II - {0x0941, 0x0948, prExtend}, // Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI - {0x0949, 0x094C, prExtend}, // Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU - {0x094D, 0x094D, prExtend}, // Mn DEVANAGARI SIGN VIRAMA - {0x094E, 0x094F, prExtend}, // Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW - {0x0950, 0x0950, prOLetter}, // Lo DEVANAGARI OM - {0x0951, 0x0957, prExtend}, // Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE - {0x0958, 0x0961, prOLetter}, // Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL - {0x0962, 0x0963, prExtend}, // Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL - {0x0964, 0x0965, prSTerm}, // Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA - {0x0966, 0x096F, prNumeric}, // Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE - {0x0971, 0x0971, prOLetter}, // Lm DEVANAGARI SIGN HIGH SPACING DOT - {0x0972, 0x0980, prOLetter}, // Lo [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI - {0x0981, 0x0981, prExtend}, // Mn BENGALI SIGN CANDRABINDU - {0x0982, 0x0983, prExtend}, // Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA - {0x0985, 0x098C, prOLetter}, // Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L - {0x098F, 0x0990, prOLetter}, // Lo [2] BENGALI LETTER E..BENGALI LETTER AI - {0x0993, 0x09A8, prOLetter}, // Lo [22] BENGALI LETTER O..BENGALI LETTER NA - {0x09AA, 0x09B0, prOLetter}, // Lo [7] BENGALI LETTER PA..BENGALI LETTER RA - {0x09B2, 0x09B2, prOLetter}, // Lo BENGALI LETTER LA - {0x09B6, 0x09B9, prOLetter}, // Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA - {0x09BC, 0x09BC, prExtend}, // Mn BENGALI SIGN NUKTA - {0x09BD, 0x09BD, prOLetter}, // Lo BENGALI SIGN AVAGRAHA - {0x09BE, 0x09C0, prExtend}, // Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II - {0x09C1, 0x09C4, prExtend}, // Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR - {0x09C7, 0x09C8, prExtend}, // Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI - {0x09CB, 0x09CC, prExtend}, // Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU - {0x09CD, 0x09CD, prExtend}, // Mn BENGALI SIGN VIRAMA - {0x09CE, 0x09CE, prOLetter}, // Lo BENGALI LETTER KHANDA TA - {0x09D7, 0x09D7, prExtend}, // Mc BENGALI AU LENGTH MARK - {0x09DC, 0x09DD, prOLetter}, // Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA - {0x09DF, 0x09E1, prOLetter}, // Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL - {0x09E2, 0x09E3, prExtend}, // Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL - {0x09E6, 0x09EF, prNumeric}, // Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE - {0x09F0, 0x09F1, prOLetter}, // Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL - {0x09FC, 0x09FC, prOLetter}, // Lo BENGALI LETTER VEDIC ANUSVARA - {0x09FE, 0x09FE, prExtend}, // Mn BENGALI SANDHI MARK - {0x0A01, 0x0A02, prExtend}, // Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI - {0x0A03, 0x0A03, prExtend}, // Mc GURMUKHI SIGN VISARGA - {0x0A05, 0x0A0A, prOLetter}, // Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU - {0x0A0F, 0x0A10, prOLetter}, // Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI - {0x0A13, 0x0A28, prOLetter}, // Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA - {0x0A2A, 0x0A30, prOLetter}, // Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA - {0x0A32, 0x0A33, prOLetter}, // Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA - {0x0A35, 0x0A36, prOLetter}, // Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA - {0x0A38, 0x0A39, prOLetter}, // Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA - {0x0A3C, 0x0A3C, prExtend}, // Mn GURMUKHI SIGN NUKTA - {0x0A3E, 0x0A40, prExtend}, // Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II - {0x0A41, 0x0A42, prExtend}, // Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU - {0x0A47, 0x0A48, prExtend}, // Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI - {0x0A4B, 0x0A4D, prExtend}, // Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA - {0x0A51, 0x0A51, prExtend}, // Mn GURMUKHI SIGN UDAAT - {0x0A59, 0x0A5C, prOLetter}, // Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA - {0x0A5E, 0x0A5E, prOLetter}, // Lo GURMUKHI LETTER FA - {0x0A66, 0x0A6F, prNumeric}, // Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE - {0x0A70, 0x0A71, prExtend}, // Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK - {0x0A72, 0x0A74, prOLetter}, // Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR - {0x0A75, 0x0A75, prExtend}, // Mn GURMUKHI SIGN YAKASH - {0x0A81, 0x0A82, prExtend}, // Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA - {0x0A83, 0x0A83, prExtend}, // Mc GUJARATI SIGN VISARGA - {0x0A85, 0x0A8D, prOLetter}, // Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E - {0x0A8F, 0x0A91, prOLetter}, // Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O - {0x0A93, 0x0AA8, prOLetter}, // Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA - {0x0AAA, 0x0AB0, prOLetter}, // Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA - {0x0AB2, 0x0AB3, prOLetter}, // Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA - {0x0AB5, 0x0AB9, prOLetter}, // Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA - {0x0ABC, 0x0ABC, prExtend}, // Mn GUJARATI SIGN NUKTA - {0x0ABD, 0x0ABD, prOLetter}, // Lo GUJARATI SIGN AVAGRAHA - {0x0ABE, 0x0AC0, prExtend}, // Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II - {0x0AC1, 0x0AC5, prExtend}, // Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E - {0x0AC7, 0x0AC8, prExtend}, // Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI - {0x0AC9, 0x0AC9, prExtend}, // Mc GUJARATI VOWEL SIGN CANDRA O - {0x0ACB, 0x0ACC, prExtend}, // Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU - {0x0ACD, 0x0ACD, prExtend}, // Mn GUJARATI SIGN VIRAMA - {0x0AD0, 0x0AD0, prOLetter}, // Lo GUJARATI OM - {0x0AE0, 0x0AE1, prOLetter}, // Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL - {0x0AE2, 0x0AE3, prExtend}, // Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL - {0x0AE6, 0x0AEF, prNumeric}, // Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE - {0x0AF9, 0x0AF9, prOLetter}, // Lo GUJARATI LETTER ZHA - {0x0AFA, 0x0AFF, prExtend}, // Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE - {0x0B01, 0x0B01, prExtend}, // Mn ORIYA SIGN CANDRABINDU - {0x0B02, 0x0B03, prExtend}, // Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA - {0x0B05, 0x0B0C, prOLetter}, // Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L - {0x0B0F, 0x0B10, prOLetter}, // Lo [2] ORIYA LETTER E..ORIYA LETTER AI - {0x0B13, 0x0B28, prOLetter}, // Lo [22] ORIYA LETTER O..ORIYA LETTER NA - {0x0B2A, 0x0B30, prOLetter}, // Lo [7] ORIYA LETTER PA..ORIYA LETTER RA - {0x0B32, 0x0B33, prOLetter}, // Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA - {0x0B35, 0x0B39, prOLetter}, // Lo [5] ORIYA LETTER VA..ORIYA LETTER HA - {0x0B3C, 0x0B3C, prExtend}, // Mn ORIYA SIGN NUKTA - {0x0B3D, 0x0B3D, prOLetter}, // Lo ORIYA SIGN AVAGRAHA - {0x0B3E, 0x0B3E, prExtend}, // Mc ORIYA VOWEL SIGN AA - {0x0B3F, 0x0B3F, prExtend}, // Mn ORIYA VOWEL SIGN I - {0x0B40, 0x0B40, prExtend}, // Mc ORIYA VOWEL SIGN II - {0x0B41, 0x0B44, prExtend}, // Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR - {0x0B47, 0x0B48, prExtend}, // Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI - {0x0B4B, 0x0B4C, prExtend}, // Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU - {0x0B4D, 0x0B4D, prExtend}, // Mn ORIYA SIGN VIRAMA - {0x0B55, 0x0B56, prExtend}, // Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK - {0x0B57, 0x0B57, prExtend}, // Mc ORIYA AU LENGTH MARK - {0x0B5C, 0x0B5D, prOLetter}, // Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA - {0x0B5F, 0x0B61, prOLetter}, // Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL - {0x0B62, 0x0B63, prExtend}, // Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL - {0x0B66, 0x0B6F, prNumeric}, // Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE - {0x0B71, 0x0B71, prOLetter}, // Lo ORIYA LETTER WA - {0x0B82, 0x0B82, prExtend}, // Mn TAMIL SIGN ANUSVARA - {0x0B83, 0x0B83, prOLetter}, // Lo TAMIL SIGN VISARGA - {0x0B85, 0x0B8A, prOLetter}, // Lo [6] TAMIL LETTER A..TAMIL LETTER UU - {0x0B8E, 0x0B90, prOLetter}, // Lo [3] TAMIL LETTER E..TAMIL LETTER AI - {0x0B92, 0x0B95, prOLetter}, // Lo [4] TAMIL LETTER O..TAMIL LETTER KA - {0x0B99, 0x0B9A, prOLetter}, // Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA - {0x0B9C, 0x0B9C, prOLetter}, // Lo TAMIL LETTER JA - {0x0B9E, 0x0B9F, prOLetter}, // Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA - {0x0BA3, 0x0BA4, prOLetter}, // Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA - {0x0BA8, 0x0BAA, prOLetter}, // Lo [3] TAMIL LETTER NA..TAMIL LETTER PA - {0x0BAE, 0x0BB9, prOLetter}, // Lo [12] TAMIL LETTER MA..TAMIL LETTER HA - {0x0BBE, 0x0BBF, prExtend}, // Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I - {0x0BC0, 0x0BC0, prExtend}, // Mn TAMIL VOWEL SIGN II - {0x0BC1, 0x0BC2, prExtend}, // Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU - {0x0BC6, 0x0BC8, prExtend}, // Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI - {0x0BCA, 0x0BCC, prExtend}, // Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU - {0x0BCD, 0x0BCD, prExtend}, // Mn TAMIL SIGN VIRAMA - {0x0BD0, 0x0BD0, prOLetter}, // Lo TAMIL OM - {0x0BD7, 0x0BD7, prExtend}, // Mc TAMIL AU LENGTH MARK - {0x0BE6, 0x0BEF, prNumeric}, // Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE - {0x0C00, 0x0C00, prExtend}, // Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE - {0x0C01, 0x0C03, prExtend}, // Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA - {0x0C04, 0x0C04, prExtend}, // Mn TELUGU SIGN COMBINING ANUSVARA ABOVE - {0x0C05, 0x0C0C, prOLetter}, // Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L - {0x0C0E, 0x0C10, prOLetter}, // Lo [3] TELUGU LETTER E..TELUGU LETTER AI - {0x0C12, 0x0C28, prOLetter}, // Lo [23] TELUGU LETTER O..TELUGU LETTER NA - {0x0C2A, 0x0C39, prOLetter}, // Lo [16] TELUGU LETTER PA..TELUGU LETTER HA - {0x0C3C, 0x0C3C, prExtend}, // Mn TELUGU SIGN NUKTA - {0x0C3D, 0x0C3D, prOLetter}, // Lo TELUGU SIGN AVAGRAHA - {0x0C3E, 0x0C40, prExtend}, // Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II - {0x0C41, 0x0C44, prExtend}, // Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR - {0x0C46, 0x0C48, prExtend}, // Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI - {0x0C4A, 0x0C4D, prExtend}, // Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA - {0x0C55, 0x0C56, prExtend}, // Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK - {0x0C58, 0x0C5A, prOLetter}, // Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA - {0x0C5D, 0x0C5D, prOLetter}, // Lo TELUGU LETTER NAKAARA POLLU - {0x0C60, 0x0C61, prOLetter}, // Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL - {0x0C62, 0x0C63, prExtend}, // Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL - {0x0C66, 0x0C6F, prNumeric}, // Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE - {0x0C80, 0x0C80, prOLetter}, // Lo KANNADA SIGN SPACING CANDRABINDU - {0x0C81, 0x0C81, prExtend}, // Mn KANNADA SIGN CANDRABINDU - {0x0C82, 0x0C83, prExtend}, // Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA - {0x0C85, 0x0C8C, prOLetter}, // Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L - {0x0C8E, 0x0C90, prOLetter}, // Lo [3] KANNADA LETTER E..KANNADA LETTER AI - {0x0C92, 0x0CA8, prOLetter}, // Lo [23] KANNADA LETTER O..KANNADA LETTER NA - {0x0CAA, 0x0CB3, prOLetter}, // Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA - {0x0CB5, 0x0CB9, prOLetter}, // Lo [5] KANNADA LETTER VA..KANNADA LETTER HA - {0x0CBC, 0x0CBC, prExtend}, // Mn KANNADA SIGN NUKTA - {0x0CBD, 0x0CBD, prOLetter}, // Lo KANNADA SIGN AVAGRAHA - {0x0CBE, 0x0CBE, prExtend}, // Mc KANNADA VOWEL SIGN AA - {0x0CBF, 0x0CBF, prExtend}, // Mn KANNADA VOWEL SIGN I - {0x0CC0, 0x0CC4, prExtend}, // Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR - {0x0CC6, 0x0CC6, prExtend}, // Mn KANNADA VOWEL SIGN E - {0x0CC7, 0x0CC8, prExtend}, // Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI - {0x0CCA, 0x0CCB, prExtend}, // Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO - {0x0CCC, 0x0CCD, prExtend}, // Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA - {0x0CD5, 0x0CD6, prExtend}, // Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK - {0x0CDD, 0x0CDE, prOLetter}, // Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA - {0x0CE0, 0x0CE1, prOLetter}, // Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL - {0x0CE2, 0x0CE3, prExtend}, // Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL - {0x0CE6, 0x0CEF, prNumeric}, // Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE - {0x0CF1, 0x0CF2, prOLetter}, // Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA - {0x0CF3, 0x0CF3, prExtend}, // Mc KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT - {0x0D00, 0x0D01, prExtend}, // Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU - {0x0D02, 0x0D03, prExtend}, // Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA - {0x0D04, 0x0D0C, prOLetter}, // Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L - {0x0D0E, 0x0D10, prOLetter}, // Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI - {0x0D12, 0x0D3A, prOLetter}, // Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA - {0x0D3B, 0x0D3C, prExtend}, // Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA - {0x0D3D, 0x0D3D, prOLetter}, // Lo MALAYALAM SIGN AVAGRAHA - {0x0D3E, 0x0D40, prExtend}, // Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II - {0x0D41, 0x0D44, prExtend}, // Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR - {0x0D46, 0x0D48, prExtend}, // Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI - {0x0D4A, 0x0D4C, prExtend}, // Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU - {0x0D4D, 0x0D4D, prExtend}, // Mn MALAYALAM SIGN VIRAMA - {0x0D4E, 0x0D4E, prOLetter}, // Lo MALAYALAM LETTER DOT REPH - {0x0D54, 0x0D56, prOLetter}, // Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL - {0x0D57, 0x0D57, prExtend}, // Mc MALAYALAM AU LENGTH MARK - {0x0D5F, 0x0D61, prOLetter}, // Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL - {0x0D62, 0x0D63, prExtend}, // Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL - {0x0D66, 0x0D6F, prNumeric}, // Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE - {0x0D7A, 0x0D7F, prOLetter}, // Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K - {0x0D81, 0x0D81, prExtend}, // Mn SINHALA SIGN CANDRABINDU - {0x0D82, 0x0D83, prExtend}, // Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA - {0x0D85, 0x0D96, prOLetter}, // Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA - {0x0D9A, 0x0DB1, prOLetter}, // Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA - {0x0DB3, 0x0DBB, prOLetter}, // Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA - {0x0DBD, 0x0DBD, prOLetter}, // Lo SINHALA LETTER DANTAJA LAYANNA - {0x0DC0, 0x0DC6, prOLetter}, // Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA - {0x0DCA, 0x0DCA, prExtend}, // Mn SINHALA SIGN AL-LAKUNA - {0x0DCF, 0x0DD1, prExtend}, // Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA - {0x0DD2, 0x0DD4, prExtend}, // Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA - {0x0DD6, 0x0DD6, prExtend}, // Mn SINHALA VOWEL SIGN DIGA PAA-PILLA - {0x0DD8, 0x0DDF, prExtend}, // Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA - {0x0DE6, 0x0DEF, prNumeric}, // Nd [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE - {0x0DF2, 0x0DF3, prExtend}, // Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA - {0x0E01, 0x0E30, prOLetter}, // Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A - {0x0E31, 0x0E31, prExtend}, // Mn THAI CHARACTER MAI HAN-AKAT - {0x0E32, 0x0E33, prOLetter}, // Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM - {0x0E34, 0x0E3A, prExtend}, // Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU - {0x0E40, 0x0E45, prOLetter}, // Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO - {0x0E46, 0x0E46, prOLetter}, // Lm THAI CHARACTER MAIYAMOK - {0x0E47, 0x0E4E, prExtend}, // Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN - {0x0E50, 0x0E59, prNumeric}, // Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE - {0x0E81, 0x0E82, prOLetter}, // Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG - {0x0E84, 0x0E84, prOLetter}, // Lo LAO LETTER KHO TAM - {0x0E86, 0x0E8A, prOLetter}, // Lo [5] LAO LETTER PALI GHA..LAO LETTER SO TAM - {0x0E8C, 0x0EA3, prOLetter}, // Lo [24] LAO LETTER PALI JHA..LAO LETTER LO LING - {0x0EA5, 0x0EA5, prOLetter}, // Lo LAO LETTER LO LOOT - {0x0EA7, 0x0EB0, prOLetter}, // Lo [10] LAO LETTER WO..LAO VOWEL SIGN A - {0x0EB1, 0x0EB1, prExtend}, // Mn LAO VOWEL SIGN MAI KAN - {0x0EB2, 0x0EB3, prOLetter}, // Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM - {0x0EB4, 0x0EBC, prExtend}, // Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO - {0x0EBD, 0x0EBD, prOLetter}, // Lo LAO SEMIVOWEL SIGN NYO - {0x0EC0, 0x0EC4, prOLetter}, // Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI - {0x0EC6, 0x0EC6, prOLetter}, // Lm LAO KO LA - {0x0EC8, 0x0ECE, prExtend}, // Mn [7] LAO TONE MAI EK..LAO YAMAKKAN - {0x0ED0, 0x0ED9, prNumeric}, // Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE - {0x0EDC, 0x0EDF, prOLetter}, // Lo [4] LAO HO NO..LAO LETTER KHMU NYO - {0x0F00, 0x0F00, prOLetter}, // Lo TIBETAN SYLLABLE OM - {0x0F18, 0x0F19, prExtend}, // Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS - {0x0F20, 0x0F29, prNumeric}, // Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE - {0x0F35, 0x0F35, prExtend}, // Mn TIBETAN MARK NGAS BZUNG NYI ZLA - {0x0F37, 0x0F37, prExtend}, // Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS - {0x0F39, 0x0F39, prExtend}, // Mn TIBETAN MARK TSA -PHRU - {0x0F3A, 0x0F3A, prClose}, // Ps TIBETAN MARK GUG RTAGS GYON - {0x0F3B, 0x0F3B, prClose}, // Pe TIBETAN MARK GUG RTAGS GYAS - {0x0F3C, 0x0F3C, prClose}, // Ps TIBETAN MARK ANG KHANG GYON - {0x0F3D, 0x0F3D, prClose}, // Pe TIBETAN MARK ANG KHANG GYAS - {0x0F3E, 0x0F3F, prExtend}, // Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES - {0x0F40, 0x0F47, prOLetter}, // Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA - {0x0F49, 0x0F6C, prOLetter}, // Lo [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA - {0x0F71, 0x0F7E, prExtend}, // Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO - {0x0F7F, 0x0F7F, prExtend}, // Mc TIBETAN SIGN RNAM BCAD - {0x0F80, 0x0F84, prExtend}, // Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA - {0x0F86, 0x0F87, prExtend}, // Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS - {0x0F88, 0x0F8C, prOLetter}, // Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN - {0x0F8D, 0x0F97, prExtend}, // Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA - {0x0F99, 0x0FBC, prExtend}, // Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA - {0x0FC6, 0x0FC6, prExtend}, // Mn TIBETAN SYMBOL PADMA GDAN - {0x1000, 0x102A, prOLetter}, // Lo [43] MYANMAR LETTER KA..MYANMAR LETTER AU - {0x102B, 0x102C, prExtend}, // Mc [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA - {0x102D, 0x1030, prExtend}, // Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU - {0x1031, 0x1031, prExtend}, // Mc MYANMAR VOWEL SIGN E - {0x1032, 0x1037, prExtend}, // Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW - {0x1038, 0x1038, prExtend}, // Mc MYANMAR SIGN VISARGA - {0x1039, 0x103A, prExtend}, // Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT - {0x103B, 0x103C, prExtend}, // Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA - {0x103D, 0x103E, prExtend}, // Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA - {0x103F, 0x103F, prOLetter}, // Lo MYANMAR LETTER GREAT SA - {0x1040, 0x1049, prNumeric}, // Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE - {0x104A, 0x104B, prSTerm}, // Po [2] MYANMAR SIGN LITTLE SECTION..MYANMAR SIGN SECTION - {0x1050, 0x1055, prOLetter}, // Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL - {0x1056, 0x1057, prExtend}, // Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR - {0x1058, 0x1059, prExtend}, // Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL - {0x105A, 0x105D, prOLetter}, // Lo [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE - {0x105E, 0x1060, prExtend}, // Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA - {0x1061, 0x1061, prOLetter}, // Lo MYANMAR LETTER SGAW KAREN SHA - {0x1062, 0x1064, prExtend}, // Mc [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO - {0x1065, 0x1066, prOLetter}, // Lo [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA - {0x1067, 0x106D, prExtend}, // Mc [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5 - {0x106E, 0x1070, prOLetter}, // Lo [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA - {0x1071, 0x1074, prExtend}, // Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE - {0x1075, 0x1081, prOLetter}, // Lo [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA - {0x1082, 0x1082, prExtend}, // Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA - {0x1083, 0x1084, prExtend}, // Mc [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E - {0x1085, 0x1086, prExtend}, // Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y - {0x1087, 0x108C, prExtend}, // Mc [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3 - {0x108D, 0x108D, prExtend}, // Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE - {0x108E, 0x108E, prOLetter}, // Lo MYANMAR LETTER RUMAI PALAUNG FA - {0x108F, 0x108F, prExtend}, // Mc MYANMAR SIGN RUMAI PALAUNG TONE-5 - {0x1090, 0x1099, prNumeric}, // Nd [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE - {0x109A, 0x109C, prExtend}, // Mc [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A - {0x109D, 0x109D, prExtend}, // Mn MYANMAR VOWEL SIGN AITON AI - {0x10A0, 0x10C5, prUpper}, // L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE - {0x10C7, 0x10C7, prUpper}, // L& GEORGIAN CAPITAL LETTER YN - {0x10CD, 0x10CD, prUpper}, // L& GEORGIAN CAPITAL LETTER AEN - {0x10D0, 0x10FA, prOLetter}, // L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN - {0x10FC, 0x10FC, prLower}, // Lm MODIFIER LETTER GEORGIAN NAR - {0x10FD, 0x10FF, prOLetter}, // L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN - {0x1100, 0x1248, prOLetter}, // Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA - {0x124A, 0x124D, prOLetter}, // Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE - {0x1250, 0x1256, prOLetter}, // Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO - {0x1258, 0x1258, prOLetter}, // Lo ETHIOPIC SYLLABLE QHWA - {0x125A, 0x125D, prOLetter}, // Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE - {0x1260, 0x1288, prOLetter}, // Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA - {0x128A, 0x128D, prOLetter}, // Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE - {0x1290, 0x12B0, prOLetter}, // Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA - {0x12B2, 0x12B5, prOLetter}, // Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE - {0x12B8, 0x12BE, prOLetter}, // Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO - {0x12C0, 0x12C0, prOLetter}, // Lo ETHIOPIC SYLLABLE KXWA - {0x12C2, 0x12C5, prOLetter}, // Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE - {0x12C8, 0x12D6, prOLetter}, // Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O - {0x12D8, 0x1310, prOLetter}, // Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA - {0x1312, 0x1315, prOLetter}, // Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE - {0x1318, 0x135A, prOLetter}, // Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA - {0x135D, 0x135F, prExtend}, // Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK - {0x1362, 0x1362, prSTerm}, // Po ETHIOPIC FULL STOP - {0x1367, 0x1368, prSTerm}, // Po [2] ETHIOPIC QUESTION MARK..ETHIOPIC PARAGRAPH SEPARATOR - {0x1380, 0x138F, prOLetter}, // Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE - {0x13A0, 0x13F5, prUpper}, // L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV - {0x13F8, 0x13FD, prLower}, // L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV - {0x1401, 0x166C, prOLetter}, // Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA - {0x166E, 0x166E, prSTerm}, // Po CANADIAN SYLLABICS FULL STOP - {0x166F, 0x167F, prOLetter}, // Lo [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W - {0x1680, 0x1680, prSp}, // Zs OGHAM SPACE MARK - {0x1681, 0x169A, prOLetter}, // Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH - {0x169B, 0x169B, prClose}, // Ps OGHAM FEATHER MARK - {0x169C, 0x169C, prClose}, // Pe OGHAM REVERSED FEATHER MARK - {0x16A0, 0x16EA, prOLetter}, // Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X - {0x16EE, 0x16F0, prOLetter}, // Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL - {0x16F1, 0x16F8, prOLetter}, // Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC - {0x1700, 0x1711, prOLetter}, // Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA - {0x1712, 0x1714, prExtend}, // Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA - {0x1715, 0x1715, prExtend}, // Mc TAGALOG SIGN PAMUDPOD - {0x171F, 0x1731, prOLetter}, // Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA - {0x1732, 0x1733, prExtend}, // Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U - {0x1734, 0x1734, prExtend}, // Mc HANUNOO SIGN PAMUDPOD - {0x1735, 0x1736, prSTerm}, // Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION - {0x1740, 0x1751, prOLetter}, // Lo [18] BUHID LETTER A..BUHID LETTER HA - {0x1752, 0x1753, prExtend}, // Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U - {0x1760, 0x176C, prOLetter}, // Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA - {0x176E, 0x1770, prOLetter}, // Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA - {0x1772, 0x1773, prExtend}, // Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U - {0x1780, 0x17B3, prOLetter}, // Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU - {0x17B4, 0x17B5, prExtend}, // Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA - {0x17B6, 0x17B6, prExtend}, // Mc KHMER VOWEL SIGN AA - {0x17B7, 0x17BD, prExtend}, // Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA - {0x17BE, 0x17C5, prExtend}, // Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU - {0x17C6, 0x17C6, prExtend}, // Mn KHMER SIGN NIKAHIT - {0x17C7, 0x17C8, prExtend}, // Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU - {0x17C9, 0x17D3, prExtend}, // Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT - {0x17D7, 0x17D7, prOLetter}, // Lm KHMER SIGN LEK TOO - {0x17DC, 0x17DC, prOLetter}, // Lo KHMER SIGN AVAKRAHASANYA - {0x17DD, 0x17DD, prExtend}, // Mn KHMER SIGN ATTHACAN - {0x17E0, 0x17E9, prNumeric}, // Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE - {0x1802, 0x1802, prSContinue}, // Po MONGOLIAN COMMA - {0x1803, 0x1803, prSTerm}, // Po MONGOLIAN FULL STOP - {0x1808, 0x1808, prSContinue}, // Po MONGOLIAN MANCHU COMMA - {0x1809, 0x1809, prSTerm}, // Po MONGOLIAN MANCHU FULL STOP - {0x180B, 0x180D, prExtend}, // Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE - {0x180E, 0x180E, prFormat}, // Cf MONGOLIAN VOWEL SEPARATOR - {0x180F, 0x180F, prExtend}, // Mn MONGOLIAN FREE VARIATION SELECTOR FOUR - {0x1810, 0x1819, prNumeric}, // Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE - {0x1820, 0x1842, prOLetter}, // Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI - {0x1843, 0x1843, prOLetter}, // Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN - {0x1844, 0x1878, prOLetter}, // Lo [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS - {0x1880, 0x1884, prOLetter}, // Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA - {0x1885, 0x1886, prExtend}, // Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA - {0x1887, 0x18A8, prOLetter}, // Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA - {0x18A9, 0x18A9, prExtend}, // Mn MONGOLIAN LETTER ALI GALI DAGALGA - {0x18AA, 0x18AA, prOLetter}, // Lo MONGOLIAN LETTER MANCHU ALI GALI LHA - {0x18B0, 0x18F5, prOLetter}, // Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S - {0x1900, 0x191E, prOLetter}, // Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA - {0x1920, 0x1922, prExtend}, // Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U - {0x1923, 0x1926, prExtend}, // Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU - {0x1927, 0x1928, prExtend}, // Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O - {0x1929, 0x192B, prExtend}, // Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA - {0x1930, 0x1931, prExtend}, // Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA - {0x1932, 0x1932, prExtend}, // Mn LIMBU SMALL LETTER ANUSVARA - {0x1933, 0x1938, prExtend}, // Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA - {0x1939, 0x193B, prExtend}, // Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I - {0x1944, 0x1945, prSTerm}, // Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK - {0x1946, 0x194F, prNumeric}, // Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE - {0x1950, 0x196D, prOLetter}, // Lo [30] TAI LE LETTER KA..TAI LE LETTER AI - {0x1970, 0x1974, prOLetter}, // Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6 - {0x1980, 0x19AB, prOLetter}, // Lo [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA - {0x19B0, 0x19C9, prOLetter}, // Lo [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2 - {0x19D0, 0x19D9, prNumeric}, // Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE - {0x1A00, 0x1A16, prOLetter}, // Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA - {0x1A17, 0x1A18, prExtend}, // Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U - {0x1A19, 0x1A1A, prExtend}, // Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O - {0x1A1B, 0x1A1B, prExtend}, // Mn BUGINESE VOWEL SIGN AE - {0x1A20, 0x1A54, prOLetter}, // Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA - {0x1A55, 0x1A55, prExtend}, // Mc TAI THAM CONSONANT SIGN MEDIAL RA - {0x1A56, 0x1A56, prExtend}, // Mn TAI THAM CONSONANT SIGN MEDIAL LA - {0x1A57, 0x1A57, prExtend}, // Mc TAI THAM CONSONANT SIGN LA TANG LAI - {0x1A58, 0x1A5E, prExtend}, // Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA - {0x1A60, 0x1A60, prExtend}, // Mn TAI THAM SIGN SAKOT - {0x1A61, 0x1A61, prExtend}, // Mc TAI THAM VOWEL SIGN A - {0x1A62, 0x1A62, prExtend}, // Mn TAI THAM VOWEL SIGN MAI SAT - {0x1A63, 0x1A64, prExtend}, // Mc [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA - {0x1A65, 0x1A6C, prExtend}, // Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW - {0x1A6D, 0x1A72, prExtend}, // Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI - {0x1A73, 0x1A7C, prExtend}, // Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN - {0x1A7F, 0x1A7F, prExtend}, // Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT - {0x1A80, 0x1A89, prNumeric}, // Nd [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE - {0x1A90, 0x1A99, prNumeric}, // Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE - {0x1AA7, 0x1AA7, prOLetter}, // Lm TAI THAM SIGN MAI YAMOK - {0x1AA8, 0x1AAB, prSTerm}, // Po [4] TAI THAM SIGN KAAN..TAI THAM SIGN SATKAANKUU - {0x1AB0, 0x1ABD, prExtend}, // Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW - {0x1ABE, 0x1ABE, prExtend}, // Me COMBINING PARENTHESES OVERLAY - {0x1ABF, 0x1ACE, prExtend}, // Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T - {0x1B00, 0x1B03, prExtend}, // Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG - {0x1B04, 0x1B04, prExtend}, // Mc BALINESE SIGN BISAH - {0x1B05, 0x1B33, prOLetter}, // Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA - {0x1B34, 0x1B34, prExtend}, // Mn BALINESE SIGN REREKAN - {0x1B35, 0x1B35, prExtend}, // Mc BALINESE VOWEL SIGN TEDUNG - {0x1B36, 0x1B3A, prExtend}, // Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA - {0x1B3B, 0x1B3B, prExtend}, // Mc BALINESE VOWEL SIGN RA REPA TEDUNG - {0x1B3C, 0x1B3C, prExtend}, // Mn BALINESE VOWEL SIGN LA LENGA - {0x1B3D, 0x1B41, prExtend}, // Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG - {0x1B42, 0x1B42, prExtend}, // Mn BALINESE VOWEL SIGN PEPET - {0x1B43, 0x1B44, prExtend}, // Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG - {0x1B45, 0x1B4C, prOLetter}, // Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA - {0x1B50, 0x1B59, prNumeric}, // Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE - {0x1B5A, 0x1B5B, prSTerm}, // Po [2] BALINESE PANTI..BALINESE PAMADA - {0x1B5E, 0x1B5F, prSTerm}, // Po [2] BALINESE CARIK SIKI..BALINESE CARIK PAREREN - {0x1B6B, 0x1B73, prExtend}, // Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG - {0x1B7D, 0x1B7E, prSTerm}, // Po [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG - {0x1B80, 0x1B81, prExtend}, // Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR - {0x1B82, 0x1B82, prExtend}, // Mc SUNDANESE SIGN PANGWISAD - {0x1B83, 0x1BA0, prOLetter}, // Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA - {0x1BA1, 0x1BA1, prExtend}, // Mc SUNDANESE CONSONANT SIGN PAMINGKAL - {0x1BA2, 0x1BA5, prExtend}, // Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU - {0x1BA6, 0x1BA7, prExtend}, // Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG - {0x1BA8, 0x1BA9, prExtend}, // Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG - {0x1BAA, 0x1BAA, prExtend}, // Mc SUNDANESE SIGN PAMAAEH - {0x1BAB, 0x1BAD, prExtend}, // Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA - {0x1BAE, 0x1BAF, prOLetter}, // Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA - {0x1BB0, 0x1BB9, prNumeric}, // Nd [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE - {0x1BBA, 0x1BE5, prOLetter}, // Lo [44] SUNDANESE AVAGRAHA..BATAK LETTER U - {0x1BE6, 0x1BE6, prExtend}, // Mn BATAK SIGN TOMPI - {0x1BE7, 0x1BE7, prExtend}, // Mc BATAK VOWEL SIGN E - {0x1BE8, 0x1BE9, prExtend}, // Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE - {0x1BEA, 0x1BEC, prExtend}, // Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O - {0x1BED, 0x1BED, prExtend}, // Mn BATAK VOWEL SIGN KARO O - {0x1BEE, 0x1BEE, prExtend}, // Mc BATAK VOWEL SIGN U - {0x1BEF, 0x1BF1, prExtend}, // Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H - {0x1BF2, 0x1BF3, prExtend}, // Mc [2] BATAK PANGOLAT..BATAK PANONGONAN - {0x1C00, 0x1C23, prOLetter}, // Lo [36] LEPCHA LETTER KA..LEPCHA LETTER A - {0x1C24, 0x1C2B, prExtend}, // Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU - {0x1C2C, 0x1C33, prExtend}, // Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T - {0x1C34, 0x1C35, prExtend}, // Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG - {0x1C36, 0x1C37, prExtend}, // Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA - {0x1C3B, 0x1C3C, prSTerm}, // Po [2] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION NYET THYOOM TA-ROL - {0x1C40, 0x1C49, prNumeric}, // Nd [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE - {0x1C4D, 0x1C4F, prOLetter}, // Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA - {0x1C50, 0x1C59, prNumeric}, // Nd [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE - {0x1C5A, 0x1C77, prOLetter}, // Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH - {0x1C78, 0x1C7D, prOLetter}, // Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD - {0x1C7E, 0x1C7F, prSTerm}, // Po [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD - {0x1C80, 0x1C88, prLower}, // L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK - {0x1C90, 0x1CBA, prOLetter}, // L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN - {0x1CBD, 0x1CBF, prOLetter}, // L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN - {0x1CD0, 0x1CD2, prExtend}, // Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA - {0x1CD4, 0x1CE0, prExtend}, // Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA - {0x1CE1, 0x1CE1, prExtend}, // Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA - {0x1CE2, 0x1CE8, prExtend}, // Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL - {0x1CE9, 0x1CEC, prOLetter}, // Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL - {0x1CED, 0x1CED, prExtend}, // Mn VEDIC SIGN TIRYAK - {0x1CEE, 0x1CF3, prOLetter}, // Lo [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA - {0x1CF4, 0x1CF4, prExtend}, // Mn VEDIC TONE CANDRA ABOVE - {0x1CF5, 0x1CF6, prOLetter}, // Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA - {0x1CF7, 0x1CF7, prExtend}, // Mc VEDIC SIGN ATIKRAMA - {0x1CF8, 0x1CF9, prExtend}, // Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE - {0x1CFA, 0x1CFA, prOLetter}, // Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA - {0x1D00, 0x1D2B, prLower}, // L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL - {0x1D2C, 0x1D6A, prLower}, // Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI - {0x1D6B, 0x1D77, prLower}, // L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G - {0x1D78, 0x1D78, prLower}, // Lm MODIFIER LETTER CYRILLIC EN - {0x1D79, 0x1D9A, prLower}, // L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK - {0x1D9B, 0x1DBF, prLower}, // Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA - {0x1DC0, 0x1DFF, prExtend}, // Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW - {0x1E00, 0x1E00, prUpper}, // L& LATIN CAPITAL LETTER A WITH RING BELOW - {0x1E01, 0x1E01, prLower}, // L& LATIN SMALL LETTER A WITH RING BELOW - {0x1E02, 0x1E02, prUpper}, // L& LATIN CAPITAL LETTER B WITH DOT ABOVE - {0x1E03, 0x1E03, prLower}, // L& LATIN SMALL LETTER B WITH DOT ABOVE - {0x1E04, 0x1E04, prUpper}, // L& LATIN CAPITAL LETTER B WITH DOT BELOW - {0x1E05, 0x1E05, prLower}, // L& LATIN SMALL LETTER B WITH DOT BELOW - {0x1E06, 0x1E06, prUpper}, // L& LATIN CAPITAL LETTER B WITH LINE BELOW - {0x1E07, 0x1E07, prLower}, // L& LATIN SMALL LETTER B WITH LINE BELOW - {0x1E08, 0x1E08, prUpper}, // L& LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE - {0x1E09, 0x1E09, prLower}, // L& LATIN SMALL LETTER C WITH CEDILLA AND ACUTE - {0x1E0A, 0x1E0A, prUpper}, // L& LATIN CAPITAL LETTER D WITH DOT ABOVE - {0x1E0B, 0x1E0B, prLower}, // L& LATIN SMALL LETTER D WITH DOT ABOVE - {0x1E0C, 0x1E0C, prUpper}, // L& LATIN CAPITAL LETTER D WITH DOT BELOW - {0x1E0D, 0x1E0D, prLower}, // L& LATIN SMALL LETTER D WITH DOT BELOW - {0x1E0E, 0x1E0E, prUpper}, // L& LATIN CAPITAL LETTER D WITH LINE BELOW - {0x1E0F, 0x1E0F, prLower}, // L& LATIN SMALL LETTER D WITH LINE BELOW - {0x1E10, 0x1E10, prUpper}, // L& LATIN CAPITAL LETTER D WITH CEDILLA - {0x1E11, 0x1E11, prLower}, // L& LATIN SMALL LETTER D WITH CEDILLA - {0x1E12, 0x1E12, prUpper}, // L& LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW - {0x1E13, 0x1E13, prLower}, // L& LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW - {0x1E14, 0x1E14, prUpper}, // L& LATIN CAPITAL LETTER E WITH MACRON AND GRAVE - {0x1E15, 0x1E15, prLower}, // L& LATIN SMALL LETTER E WITH MACRON AND GRAVE - {0x1E16, 0x1E16, prUpper}, // L& LATIN CAPITAL LETTER E WITH MACRON AND ACUTE - {0x1E17, 0x1E17, prLower}, // L& LATIN SMALL LETTER E WITH MACRON AND ACUTE - {0x1E18, 0x1E18, prUpper}, // L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW - {0x1E19, 0x1E19, prLower}, // L& LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW - {0x1E1A, 0x1E1A, prUpper}, // L& LATIN CAPITAL LETTER E WITH TILDE BELOW - {0x1E1B, 0x1E1B, prLower}, // L& LATIN SMALL LETTER E WITH TILDE BELOW - {0x1E1C, 0x1E1C, prUpper}, // L& LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE - {0x1E1D, 0x1E1D, prLower}, // L& LATIN SMALL LETTER E WITH CEDILLA AND BREVE - {0x1E1E, 0x1E1E, prUpper}, // L& LATIN CAPITAL LETTER F WITH DOT ABOVE - {0x1E1F, 0x1E1F, prLower}, // L& LATIN SMALL LETTER F WITH DOT ABOVE - {0x1E20, 0x1E20, prUpper}, // L& LATIN CAPITAL LETTER G WITH MACRON - {0x1E21, 0x1E21, prLower}, // L& LATIN SMALL LETTER G WITH MACRON - {0x1E22, 0x1E22, prUpper}, // L& LATIN CAPITAL LETTER H WITH DOT ABOVE - {0x1E23, 0x1E23, prLower}, // L& LATIN SMALL LETTER H WITH DOT ABOVE - {0x1E24, 0x1E24, prUpper}, // L& LATIN CAPITAL LETTER H WITH DOT BELOW - {0x1E25, 0x1E25, prLower}, // L& LATIN SMALL LETTER H WITH DOT BELOW - {0x1E26, 0x1E26, prUpper}, // L& LATIN CAPITAL LETTER H WITH DIAERESIS - {0x1E27, 0x1E27, prLower}, // L& LATIN SMALL LETTER H WITH DIAERESIS - {0x1E28, 0x1E28, prUpper}, // L& LATIN CAPITAL LETTER H WITH CEDILLA - {0x1E29, 0x1E29, prLower}, // L& LATIN SMALL LETTER H WITH CEDILLA - {0x1E2A, 0x1E2A, prUpper}, // L& LATIN CAPITAL LETTER H WITH BREVE BELOW - {0x1E2B, 0x1E2B, prLower}, // L& LATIN SMALL LETTER H WITH BREVE BELOW - {0x1E2C, 0x1E2C, prUpper}, // L& LATIN CAPITAL LETTER I WITH TILDE BELOW - {0x1E2D, 0x1E2D, prLower}, // L& LATIN SMALL LETTER I WITH TILDE BELOW - {0x1E2E, 0x1E2E, prUpper}, // L& LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE - {0x1E2F, 0x1E2F, prLower}, // L& LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE - {0x1E30, 0x1E30, prUpper}, // L& LATIN CAPITAL LETTER K WITH ACUTE - {0x1E31, 0x1E31, prLower}, // L& LATIN SMALL LETTER K WITH ACUTE - {0x1E32, 0x1E32, prUpper}, // L& LATIN CAPITAL LETTER K WITH DOT BELOW - {0x1E33, 0x1E33, prLower}, // L& LATIN SMALL LETTER K WITH DOT BELOW - {0x1E34, 0x1E34, prUpper}, // L& LATIN CAPITAL LETTER K WITH LINE BELOW - {0x1E35, 0x1E35, prLower}, // L& LATIN SMALL LETTER K WITH LINE BELOW - {0x1E36, 0x1E36, prUpper}, // L& LATIN CAPITAL LETTER L WITH DOT BELOW - {0x1E37, 0x1E37, prLower}, // L& LATIN SMALL LETTER L WITH DOT BELOW - {0x1E38, 0x1E38, prUpper}, // L& LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON - {0x1E39, 0x1E39, prLower}, // L& LATIN SMALL LETTER L WITH DOT BELOW AND MACRON - {0x1E3A, 0x1E3A, prUpper}, // L& LATIN CAPITAL LETTER L WITH LINE BELOW - {0x1E3B, 0x1E3B, prLower}, // L& LATIN SMALL LETTER L WITH LINE BELOW - {0x1E3C, 0x1E3C, prUpper}, // L& LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW - {0x1E3D, 0x1E3D, prLower}, // L& LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW - {0x1E3E, 0x1E3E, prUpper}, // L& LATIN CAPITAL LETTER M WITH ACUTE - {0x1E3F, 0x1E3F, prLower}, // L& LATIN SMALL LETTER M WITH ACUTE - {0x1E40, 0x1E40, prUpper}, // L& LATIN CAPITAL LETTER M WITH DOT ABOVE - {0x1E41, 0x1E41, prLower}, // L& LATIN SMALL LETTER M WITH DOT ABOVE - {0x1E42, 0x1E42, prUpper}, // L& LATIN CAPITAL LETTER M WITH DOT BELOW - {0x1E43, 0x1E43, prLower}, // L& LATIN SMALL LETTER M WITH DOT BELOW - {0x1E44, 0x1E44, prUpper}, // L& LATIN CAPITAL LETTER N WITH DOT ABOVE - {0x1E45, 0x1E45, prLower}, // L& LATIN SMALL LETTER N WITH DOT ABOVE - {0x1E46, 0x1E46, prUpper}, // L& LATIN CAPITAL LETTER N WITH DOT BELOW - {0x1E47, 0x1E47, prLower}, // L& LATIN SMALL LETTER N WITH DOT BELOW - {0x1E48, 0x1E48, prUpper}, // L& LATIN CAPITAL LETTER N WITH LINE BELOW - {0x1E49, 0x1E49, prLower}, // L& LATIN SMALL LETTER N WITH LINE BELOW - {0x1E4A, 0x1E4A, prUpper}, // L& LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW - {0x1E4B, 0x1E4B, prLower}, // L& LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW - {0x1E4C, 0x1E4C, prUpper}, // L& LATIN CAPITAL LETTER O WITH TILDE AND ACUTE - {0x1E4D, 0x1E4D, prLower}, // L& LATIN SMALL LETTER O WITH TILDE AND ACUTE - {0x1E4E, 0x1E4E, prUpper}, // L& LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS - {0x1E4F, 0x1E4F, prLower}, // L& LATIN SMALL LETTER O WITH TILDE AND DIAERESIS - {0x1E50, 0x1E50, prUpper}, // L& LATIN CAPITAL LETTER O WITH MACRON AND GRAVE - {0x1E51, 0x1E51, prLower}, // L& LATIN SMALL LETTER O WITH MACRON AND GRAVE - {0x1E52, 0x1E52, prUpper}, // L& LATIN CAPITAL LETTER O WITH MACRON AND ACUTE - {0x1E53, 0x1E53, prLower}, // L& LATIN SMALL LETTER O WITH MACRON AND ACUTE - {0x1E54, 0x1E54, prUpper}, // L& LATIN CAPITAL LETTER P WITH ACUTE - {0x1E55, 0x1E55, prLower}, // L& LATIN SMALL LETTER P WITH ACUTE - {0x1E56, 0x1E56, prUpper}, // L& LATIN CAPITAL LETTER P WITH DOT ABOVE - {0x1E57, 0x1E57, prLower}, // L& LATIN SMALL LETTER P WITH DOT ABOVE - {0x1E58, 0x1E58, prUpper}, // L& LATIN CAPITAL LETTER R WITH DOT ABOVE - {0x1E59, 0x1E59, prLower}, // L& LATIN SMALL LETTER R WITH DOT ABOVE - {0x1E5A, 0x1E5A, prUpper}, // L& LATIN CAPITAL LETTER R WITH DOT BELOW - {0x1E5B, 0x1E5B, prLower}, // L& LATIN SMALL LETTER R WITH DOT BELOW - {0x1E5C, 0x1E5C, prUpper}, // L& LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON - {0x1E5D, 0x1E5D, prLower}, // L& LATIN SMALL LETTER R WITH DOT BELOW AND MACRON - {0x1E5E, 0x1E5E, prUpper}, // L& LATIN CAPITAL LETTER R WITH LINE BELOW - {0x1E5F, 0x1E5F, prLower}, // L& LATIN SMALL LETTER R WITH LINE BELOW - {0x1E60, 0x1E60, prUpper}, // L& LATIN CAPITAL LETTER S WITH DOT ABOVE - {0x1E61, 0x1E61, prLower}, // L& LATIN SMALL LETTER S WITH DOT ABOVE - {0x1E62, 0x1E62, prUpper}, // L& LATIN CAPITAL LETTER S WITH DOT BELOW - {0x1E63, 0x1E63, prLower}, // L& LATIN SMALL LETTER S WITH DOT BELOW - {0x1E64, 0x1E64, prUpper}, // L& LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE - {0x1E65, 0x1E65, prLower}, // L& LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE - {0x1E66, 0x1E66, prUpper}, // L& LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE - {0x1E67, 0x1E67, prLower}, // L& LATIN SMALL LETTER S WITH CARON AND DOT ABOVE - {0x1E68, 0x1E68, prUpper}, // L& LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE - {0x1E69, 0x1E69, prLower}, // L& LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE - {0x1E6A, 0x1E6A, prUpper}, // L& LATIN CAPITAL LETTER T WITH DOT ABOVE - {0x1E6B, 0x1E6B, prLower}, // L& LATIN SMALL LETTER T WITH DOT ABOVE - {0x1E6C, 0x1E6C, prUpper}, // L& LATIN CAPITAL LETTER T WITH DOT BELOW - {0x1E6D, 0x1E6D, prLower}, // L& LATIN SMALL LETTER T WITH DOT BELOW - {0x1E6E, 0x1E6E, prUpper}, // L& LATIN CAPITAL LETTER T WITH LINE BELOW - {0x1E6F, 0x1E6F, prLower}, // L& LATIN SMALL LETTER T WITH LINE BELOW - {0x1E70, 0x1E70, prUpper}, // L& LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW - {0x1E71, 0x1E71, prLower}, // L& LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW - {0x1E72, 0x1E72, prUpper}, // L& LATIN CAPITAL LETTER U WITH DIAERESIS BELOW - {0x1E73, 0x1E73, prLower}, // L& LATIN SMALL LETTER U WITH DIAERESIS BELOW - {0x1E74, 0x1E74, prUpper}, // L& LATIN CAPITAL LETTER U WITH TILDE BELOW - {0x1E75, 0x1E75, prLower}, // L& LATIN SMALL LETTER U WITH TILDE BELOW - {0x1E76, 0x1E76, prUpper}, // L& LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW - {0x1E77, 0x1E77, prLower}, // L& LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW - {0x1E78, 0x1E78, prUpper}, // L& LATIN CAPITAL LETTER U WITH TILDE AND ACUTE - {0x1E79, 0x1E79, prLower}, // L& LATIN SMALL LETTER U WITH TILDE AND ACUTE - {0x1E7A, 0x1E7A, prUpper}, // L& LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS - {0x1E7B, 0x1E7B, prLower}, // L& LATIN SMALL LETTER U WITH MACRON AND DIAERESIS - {0x1E7C, 0x1E7C, prUpper}, // L& LATIN CAPITAL LETTER V WITH TILDE - {0x1E7D, 0x1E7D, prLower}, // L& LATIN SMALL LETTER V WITH TILDE - {0x1E7E, 0x1E7E, prUpper}, // L& LATIN CAPITAL LETTER V WITH DOT BELOW - {0x1E7F, 0x1E7F, prLower}, // L& LATIN SMALL LETTER V WITH DOT BELOW - {0x1E80, 0x1E80, prUpper}, // L& LATIN CAPITAL LETTER W WITH GRAVE - {0x1E81, 0x1E81, prLower}, // L& LATIN SMALL LETTER W WITH GRAVE - {0x1E82, 0x1E82, prUpper}, // L& LATIN CAPITAL LETTER W WITH ACUTE - {0x1E83, 0x1E83, prLower}, // L& LATIN SMALL LETTER W WITH ACUTE - {0x1E84, 0x1E84, prUpper}, // L& LATIN CAPITAL LETTER W WITH DIAERESIS - {0x1E85, 0x1E85, prLower}, // L& LATIN SMALL LETTER W WITH DIAERESIS - {0x1E86, 0x1E86, prUpper}, // L& LATIN CAPITAL LETTER W WITH DOT ABOVE - {0x1E87, 0x1E87, prLower}, // L& LATIN SMALL LETTER W WITH DOT ABOVE - {0x1E88, 0x1E88, prUpper}, // L& LATIN CAPITAL LETTER W WITH DOT BELOW - {0x1E89, 0x1E89, prLower}, // L& LATIN SMALL LETTER W WITH DOT BELOW - {0x1E8A, 0x1E8A, prUpper}, // L& LATIN CAPITAL LETTER X WITH DOT ABOVE - {0x1E8B, 0x1E8B, prLower}, // L& LATIN SMALL LETTER X WITH DOT ABOVE - {0x1E8C, 0x1E8C, prUpper}, // L& LATIN CAPITAL LETTER X WITH DIAERESIS - {0x1E8D, 0x1E8D, prLower}, // L& LATIN SMALL LETTER X WITH DIAERESIS - {0x1E8E, 0x1E8E, prUpper}, // L& LATIN CAPITAL LETTER Y WITH DOT ABOVE - {0x1E8F, 0x1E8F, prLower}, // L& LATIN SMALL LETTER Y WITH DOT ABOVE - {0x1E90, 0x1E90, prUpper}, // L& LATIN CAPITAL LETTER Z WITH CIRCUMFLEX - {0x1E91, 0x1E91, prLower}, // L& LATIN SMALL LETTER Z WITH CIRCUMFLEX - {0x1E92, 0x1E92, prUpper}, // L& LATIN CAPITAL LETTER Z WITH DOT BELOW - {0x1E93, 0x1E93, prLower}, // L& LATIN SMALL LETTER Z WITH DOT BELOW - {0x1E94, 0x1E94, prUpper}, // L& LATIN CAPITAL LETTER Z WITH LINE BELOW - {0x1E95, 0x1E9D, prLower}, // L& [9] LATIN SMALL LETTER Z WITH LINE BELOW..LATIN SMALL LETTER LONG S WITH HIGH STROKE - {0x1E9E, 0x1E9E, prUpper}, // L& LATIN CAPITAL LETTER SHARP S - {0x1E9F, 0x1E9F, prLower}, // L& LATIN SMALL LETTER DELTA - {0x1EA0, 0x1EA0, prUpper}, // L& LATIN CAPITAL LETTER A WITH DOT BELOW - {0x1EA1, 0x1EA1, prLower}, // L& LATIN SMALL LETTER A WITH DOT BELOW - {0x1EA2, 0x1EA2, prUpper}, // L& LATIN CAPITAL LETTER A WITH HOOK ABOVE - {0x1EA3, 0x1EA3, prLower}, // L& LATIN SMALL LETTER A WITH HOOK ABOVE - {0x1EA4, 0x1EA4, prUpper}, // L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE - {0x1EA5, 0x1EA5, prLower}, // L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE - {0x1EA6, 0x1EA6, prUpper}, // L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE - {0x1EA7, 0x1EA7, prLower}, // L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE - {0x1EA8, 0x1EA8, prUpper}, // L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE - {0x1EA9, 0x1EA9, prLower}, // L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE - {0x1EAA, 0x1EAA, prUpper}, // L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE - {0x1EAB, 0x1EAB, prLower}, // L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE - {0x1EAC, 0x1EAC, prUpper}, // L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW - {0x1EAD, 0x1EAD, prLower}, // L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW - {0x1EAE, 0x1EAE, prUpper}, // L& LATIN CAPITAL LETTER A WITH BREVE AND ACUTE - {0x1EAF, 0x1EAF, prLower}, // L& LATIN SMALL LETTER A WITH BREVE AND ACUTE - {0x1EB0, 0x1EB0, prUpper}, // L& LATIN CAPITAL LETTER A WITH BREVE AND GRAVE - {0x1EB1, 0x1EB1, prLower}, // L& LATIN SMALL LETTER A WITH BREVE AND GRAVE - {0x1EB2, 0x1EB2, prUpper}, // L& LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE - {0x1EB3, 0x1EB3, prLower}, // L& LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE - {0x1EB4, 0x1EB4, prUpper}, // L& LATIN CAPITAL LETTER A WITH BREVE AND TILDE - {0x1EB5, 0x1EB5, prLower}, // L& LATIN SMALL LETTER A WITH BREVE AND TILDE - {0x1EB6, 0x1EB6, prUpper}, // L& LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW - {0x1EB7, 0x1EB7, prLower}, // L& LATIN SMALL LETTER A WITH BREVE AND DOT BELOW - {0x1EB8, 0x1EB8, prUpper}, // L& LATIN CAPITAL LETTER E WITH DOT BELOW - {0x1EB9, 0x1EB9, prLower}, // L& LATIN SMALL LETTER E WITH DOT BELOW - {0x1EBA, 0x1EBA, prUpper}, // L& LATIN CAPITAL LETTER E WITH HOOK ABOVE - {0x1EBB, 0x1EBB, prLower}, // L& LATIN SMALL LETTER E WITH HOOK ABOVE - {0x1EBC, 0x1EBC, prUpper}, // L& LATIN CAPITAL LETTER E WITH TILDE - {0x1EBD, 0x1EBD, prLower}, // L& LATIN SMALL LETTER E WITH TILDE - {0x1EBE, 0x1EBE, prUpper}, // L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE - {0x1EBF, 0x1EBF, prLower}, // L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE - {0x1EC0, 0x1EC0, prUpper}, // L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE - {0x1EC1, 0x1EC1, prLower}, // L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE - {0x1EC2, 0x1EC2, prUpper}, // L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE - {0x1EC3, 0x1EC3, prLower}, // L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE - {0x1EC4, 0x1EC4, prUpper}, // L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE - {0x1EC5, 0x1EC5, prLower}, // L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE - {0x1EC6, 0x1EC6, prUpper}, // L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW - {0x1EC7, 0x1EC7, prLower}, // L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW - {0x1EC8, 0x1EC8, prUpper}, // L& LATIN CAPITAL LETTER I WITH HOOK ABOVE - {0x1EC9, 0x1EC9, prLower}, // L& LATIN SMALL LETTER I WITH HOOK ABOVE - {0x1ECA, 0x1ECA, prUpper}, // L& LATIN CAPITAL LETTER I WITH DOT BELOW - {0x1ECB, 0x1ECB, prLower}, // L& LATIN SMALL LETTER I WITH DOT BELOW - {0x1ECC, 0x1ECC, prUpper}, // L& LATIN CAPITAL LETTER O WITH DOT BELOW - {0x1ECD, 0x1ECD, prLower}, // L& LATIN SMALL LETTER O WITH DOT BELOW - {0x1ECE, 0x1ECE, prUpper}, // L& LATIN CAPITAL LETTER O WITH HOOK ABOVE - {0x1ECF, 0x1ECF, prLower}, // L& LATIN SMALL LETTER O WITH HOOK ABOVE - {0x1ED0, 0x1ED0, prUpper}, // L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE - {0x1ED1, 0x1ED1, prLower}, // L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE - {0x1ED2, 0x1ED2, prUpper}, // L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE - {0x1ED3, 0x1ED3, prLower}, // L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE - {0x1ED4, 0x1ED4, prUpper}, // L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE - {0x1ED5, 0x1ED5, prLower}, // L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE - {0x1ED6, 0x1ED6, prUpper}, // L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE - {0x1ED7, 0x1ED7, prLower}, // L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE - {0x1ED8, 0x1ED8, prUpper}, // L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW - {0x1ED9, 0x1ED9, prLower}, // L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW - {0x1EDA, 0x1EDA, prUpper}, // L& LATIN CAPITAL LETTER O WITH HORN AND ACUTE - {0x1EDB, 0x1EDB, prLower}, // L& LATIN SMALL LETTER O WITH HORN AND ACUTE - {0x1EDC, 0x1EDC, prUpper}, // L& LATIN CAPITAL LETTER O WITH HORN AND GRAVE - {0x1EDD, 0x1EDD, prLower}, // L& LATIN SMALL LETTER O WITH HORN AND GRAVE - {0x1EDE, 0x1EDE, prUpper}, // L& LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE - {0x1EDF, 0x1EDF, prLower}, // L& LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE - {0x1EE0, 0x1EE0, prUpper}, // L& LATIN CAPITAL LETTER O WITH HORN AND TILDE - {0x1EE1, 0x1EE1, prLower}, // L& LATIN SMALL LETTER O WITH HORN AND TILDE - {0x1EE2, 0x1EE2, prUpper}, // L& LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW - {0x1EE3, 0x1EE3, prLower}, // L& LATIN SMALL LETTER O WITH HORN AND DOT BELOW - {0x1EE4, 0x1EE4, prUpper}, // L& LATIN CAPITAL LETTER U WITH DOT BELOW - {0x1EE5, 0x1EE5, prLower}, // L& LATIN SMALL LETTER U WITH DOT BELOW - {0x1EE6, 0x1EE6, prUpper}, // L& LATIN CAPITAL LETTER U WITH HOOK ABOVE - {0x1EE7, 0x1EE7, prLower}, // L& LATIN SMALL LETTER U WITH HOOK ABOVE - {0x1EE8, 0x1EE8, prUpper}, // L& LATIN CAPITAL LETTER U WITH HORN AND ACUTE - {0x1EE9, 0x1EE9, prLower}, // L& LATIN SMALL LETTER U WITH HORN AND ACUTE - {0x1EEA, 0x1EEA, prUpper}, // L& LATIN CAPITAL LETTER U WITH HORN AND GRAVE - {0x1EEB, 0x1EEB, prLower}, // L& LATIN SMALL LETTER U WITH HORN AND GRAVE - {0x1EEC, 0x1EEC, prUpper}, // L& LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE - {0x1EED, 0x1EED, prLower}, // L& LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE - {0x1EEE, 0x1EEE, prUpper}, // L& LATIN CAPITAL LETTER U WITH HORN AND TILDE - {0x1EEF, 0x1EEF, prLower}, // L& LATIN SMALL LETTER U WITH HORN AND TILDE - {0x1EF0, 0x1EF0, prUpper}, // L& LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW - {0x1EF1, 0x1EF1, prLower}, // L& LATIN SMALL LETTER U WITH HORN AND DOT BELOW - {0x1EF2, 0x1EF2, prUpper}, // L& LATIN CAPITAL LETTER Y WITH GRAVE - {0x1EF3, 0x1EF3, prLower}, // L& LATIN SMALL LETTER Y WITH GRAVE - {0x1EF4, 0x1EF4, prUpper}, // L& LATIN CAPITAL LETTER Y WITH DOT BELOW - {0x1EF5, 0x1EF5, prLower}, // L& LATIN SMALL LETTER Y WITH DOT BELOW - {0x1EF6, 0x1EF6, prUpper}, // L& LATIN CAPITAL LETTER Y WITH HOOK ABOVE - {0x1EF7, 0x1EF7, prLower}, // L& LATIN SMALL LETTER Y WITH HOOK ABOVE - {0x1EF8, 0x1EF8, prUpper}, // L& LATIN CAPITAL LETTER Y WITH TILDE - {0x1EF9, 0x1EF9, prLower}, // L& LATIN SMALL LETTER Y WITH TILDE - {0x1EFA, 0x1EFA, prUpper}, // L& LATIN CAPITAL LETTER MIDDLE-WELSH LL - {0x1EFB, 0x1EFB, prLower}, // L& LATIN SMALL LETTER MIDDLE-WELSH LL - {0x1EFC, 0x1EFC, prUpper}, // L& LATIN CAPITAL LETTER MIDDLE-WELSH V - {0x1EFD, 0x1EFD, prLower}, // L& LATIN SMALL LETTER MIDDLE-WELSH V - {0x1EFE, 0x1EFE, prUpper}, // L& LATIN CAPITAL LETTER Y WITH LOOP - {0x1EFF, 0x1F07, prLower}, // L& [9] LATIN SMALL LETTER Y WITH LOOP..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI - {0x1F08, 0x1F0F, prUpper}, // L& [8] GREEK CAPITAL LETTER ALPHA WITH PSILI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI - {0x1F10, 0x1F15, prLower}, // L& [6] GREEK SMALL LETTER EPSILON WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA - {0x1F18, 0x1F1D, prUpper}, // L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA - {0x1F20, 0x1F27, prLower}, // L& [8] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI - {0x1F28, 0x1F2F, prUpper}, // L& [8] GREEK CAPITAL LETTER ETA WITH PSILI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI - {0x1F30, 0x1F37, prLower}, // L& [8] GREEK SMALL LETTER IOTA WITH PSILI..GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI - {0x1F38, 0x1F3F, prUpper}, // L& [8] GREEK CAPITAL LETTER IOTA WITH PSILI..GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI - {0x1F40, 0x1F45, prLower}, // L& [6] GREEK SMALL LETTER OMICRON WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA - {0x1F48, 0x1F4D, prUpper}, // L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA - {0x1F50, 0x1F57, prLower}, // L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI - {0x1F59, 0x1F59, prUpper}, // L& GREEK CAPITAL LETTER UPSILON WITH DASIA - {0x1F5B, 0x1F5B, prUpper}, // L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA - {0x1F5D, 0x1F5D, prUpper}, // L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA - {0x1F5F, 0x1F5F, prUpper}, // L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI - {0x1F60, 0x1F67, prLower}, // L& [8] GREEK SMALL LETTER OMEGA WITH PSILI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI - {0x1F68, 0x1F6F, prUpper}, // L& [8] GREEK CAPITAL LETTER OMEGA WITH PSILI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI - {0x1F70, 0x1F7D, prLower}, // L& [14] GREEK SMALL LETTER ALPHA WITH VARIA..GREEK SMALL LETTER OMEGA WITH OXIA - {0x1F80, 0x1F87, prLower}, // L& [8] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI - {0x1F88, 0x1F8F, prUpper}, // L& [8] GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI - {0x1F90, 0x1F97, prLower}, // L& [8] GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI - {0x1F98, 0x1F9F, prUpper}, // L& [8] GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI - {0x1FA0, 0x1FA7, prLower}, // L& [8] GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI - {0x1FA8, 0x1FAF, prUpper}, // L& [8] GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI - {0x1FB0, 0x1FB4, prLower}, // L& [5] GREEK SMALL LETTER ALPHA WITH VRACHY..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI - {0x1FB6, 0x1FB7, prLower}, // L& [2] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI - {0x1FB8, 0x1FBC, prUpper}, // L& [5] GREEK CAPITAL LETTER ALPHA WITH VRACHY..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI - {0x1FBE, 0x1FBE, prLower}, // L& GREEK PROSGEGRAMMENI - {0x1FC2, 0x1FC4, prLower}, // L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI - {0x1FC6, 0x1FC7, prLower}, // L& [2] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI - {0x1FC8, 0x1FCC, prUpper}, // L& [5] GREEK CAPITAL LETTER EPSILON WITH VARIA..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI - {0x1FD0, 0x1FD3, prLower}, // L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA - {0x1FD6, 0x1FD7, prLower}, // L& [2] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI - {0x1FD8, 0x1FDB, prUpper}, // L& [4] GREEK CAPITAL LETTER IOTA WITH VRACHY..GREEK CAPITAL LETTER IOTA WITH OXIA - {0x1FE0, 0x1FE7, prLower}, // L& [8] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI - {0x1FE8, 0x1FEC, prUpper}, // L& [5] GREEK CAPITAL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA - {0x1FF2, 0x1FF4, prLower}, // L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI - {0x1FF6, 0x1FF7, prLower}, // L& [2] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI - {0x1FF8, 0x1FFC, prUpper}, // L& [5] GREEK CAPITAL LETTER OMICRON WITH VARIA..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI - {0x2000, 0x200A, prSp}, // Zs [11] EN QUAD..HAIR SPACE - {0x200B, 0x200B, prFormat}, // Cf ZERO WIDTH SPACE - {0x200C, 0x200D, prExtend}, // Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER - {0x200E, 0x200F, prFormat}, // Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK - {0x2013, 0x2014, prSContinue}, // Pd [2] EN DASH..EM DASH - {0x2018, 0x2018, prClose}, // Pi LEFT SINGLE QUOTATION MARK - {0x2019, 0x2019, prClose}, // Pf RIGHT SINGLE QUOTATION MARK - {0x201A, 0x201A, prClose}, // Ps SINGLE LOW-9 QUOTATION MARK - {0x201B, 0x201C, prClose}, // Pi [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK - {0x201D, 0x201D, prClose}, // Pf RIGHT DOUBLE QUOTATION MARK - {0x201E, 0x201E, prClose}, // Ps DOUBLE LOW-9 QUOTATION MARK - {0x201F, 0x201F, prClose}, // Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK - {0x2024, 0x2024, prATerm}, // Po ONE DOT LEADER - {0x2028, 0x2028, prSep}, // Zl LINE SEPARATOR - {0x2029, 0x2029, prSep}, // Zp PARAGRAPH SEPARATOR - {0x202A, 0x202E, prFormat}, // Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE - {0x202F, 0x202F, prSp}, // Zs NARROW NO-BREAK SPACE - {0x2039, 0x2039, prClose}, // Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK - {0x203A, 0x203A, prClose}, // Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - {0x203C, 0x203D, prSTerm}, // Po [2] DOUBLE EXCLAMATION MARK..INTERROBANG - {0x2045, 0x2045, prClose}, // Ps LEFT SQUARE BRACKET WITH QUILL - {0x2046, 0x2046, prClose}, // Pe RIGHT SQUARE BRACKET WITH QUILL - {0x2047, 0x2049, prSTerm}, // Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK - {0x205F, 0x205F, prSp}, // Zs MEDIUM MATHEMATICAL SPACE - {0x2060, 0x2064, prFormat}, // Cf [5] WORD JOINER..INVISIBLE PLUS - {0x2066, 0x206F, prFormat}, // Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES - {0x2071, 0x2071, prLower}, // Lm SUPERSCRIPT LATIN SMALL LETTER I - {0x207D, 0x207D, prClose}, // Ps SUPERSCRIPT LEFT PARENTHESIS - {0x207E, 0x207E, prClose}, // Pe SUPERSCRIPT RIGHT PARENTHESIS - {0x207F, 0x207F, prLower}, // Lm SUPERSCRIPT LATIN SMALL LETTER N - {0x208D, 0x208D, prClose}, // Ps SUBSCRIPT LEFT PARENTHESIS - {0x208E, 0x208E, prClose}, // Pe SUBSCRIPT RIGHT PARENTHESIS - {0x2090, 0x209C, prLower}, // Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T - {0x20D0, 0x20DC, prExtend}, // Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE - {0x20DD, 0x20E0, prExtend}, // Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH - {0x20E1, 0x20E1, prExtend}, // Mn COMBINING LEFT RIGHT ARROW ABOVE - {0x20E2, 0x20E4, prExtend}, // Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE - {0x20E5, 0x20F0, prExtend}, // Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE - {0x2102, 0x2102, prUpper}, // L& DOUBLE-STRUCK CAPITAL C - {0x2107, 0x2107, prUpper}, // L& EULER CONSTANT - {0x210A, 0x210A, prLower}, // L& SCRIPT SMALL G - {0x210B, 0x210D, prUpper}, // L& [3] SCRIPT CAPITAL H..DOUBLE-STRUCK CAPITAL H - {0x210E, 0x210F, prLower}, // L& [2] PLANCK CONSTANT..PLANCK CONSTANT OVER TWO PI - {0x2110, 0x2112, prUpper}, // L& [3] SCRIPT CAPITAL I..SCRIPT CAPITAL L - {0x2113, 0x2113, prLower}, // L& SCRIPT SMALL L - {0x2115, 0x2115, prUpper}, // L& DOUBLE-STRUCK CAPITAL N - {0x2119, 0x211D, prUpper}, // L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R - {0x2124, 0x2124, prUpper}, // L& DOUBLE-STRUCK CAPITAL Z - {0x2126, 0x2126, prUpper}, // L& OHM SIGN - {0x2128, 0x2128, prUpper}, // L& BLACK-LETTER CAPITAL Z - {0x212A, 0x212D, prUpper}, // L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C - {0x212F, 0x212F, prLower}, // L& SCRIPT SMALL E - {0x2130, 0x2133, prUpper}, // L& [4] SCRIPT CAPITAL E..SCRIPT CAPITAL M - {0x2134, 0x2134, prLower}, // L& SCRIPT SMALL O - {0x2135, 0x2138, prOLetter}, // Lo [4] ALEF SYMBOL..DALET SYMBOL - {0x2139, 0x2139, prLower}, // L& INFORMATION SOURCE - {0x213C, 0x213D, prLower}, // L& [2] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK SMALL GAMMA - {0x213E, 0x213F, prUpper}, // L& [2] DOUBLE-STRUCK CAPITAL GAMMA..DOUBLE-STRUCK CAPITAL PI - {0x2145, 0x2145, prUpper}, // L& DOUBLE-STRUCK ITALIC CAPITAL D - {0x2146, 0x2149, prLower}, // L& [4] DOUBLE-STRUCK ITALIC SMALL D..DOUBLE-STRUCK ITALIC SMALL J - {0x214E, 0x214E, prLower}, // L& TURNED SMALL F - {0x2160, 0x216F, prUpper}, // Nl [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND - {0x2170, 0x217F, prLower}, // Nl [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND - {0x2180, 0x2182, prOLetter}, // Nl [3] ROMAN NUMERAL ONE THOUSAND C D..ROMAN NUMERAL TEN THOUSAND - {0x2183, 0x2183, prUpper}, // L& ROMAN NUMERAL REVERSED ONE HUNDRED - {0x2184, 0x2184, prLower}, // L& LATIN SMALL LETTER REVERSED C - {0x2185, 0x2188, prOLetter}, // Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND - {0x2308, 0x2308, prClose}, // Ps LEFT CEILING - {0x2309, 0x2309, prClose}, // Pe RIGHT CEILING - {0x230A, 0x230A, prClose}, // Ps LEFT FLOOR - {0x230B, 0x230B, prClose}, // Pe RIGHT FLOOR - {0x2329, 0x2329, prClose}, // Ps LEFT-POINTING ANGLE BRACKET - {0x232A, 0x232A, prClose}, // Pe RIGHT-POINTING ANGLE BRACKET - {0x24B6, 0x24CF, prUpper}, // So [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z - {0x24D0, 0x24E9, prLower}, // So [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z - {0x275B, 0x2760, prClose}, // So [6] HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT..HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT - {0x2768, 0x2768, prClose}, // Ps MEDIUM LEFT PARENTHESIS ORNAMENT - {0x2769, 0x2769, prClose}, // Pe MEDIUM RIGHT PARENTHESIS ORNAMENT - {0x276A, 0x276A, prClose}, // Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT - {0x276B, 0x276B, prClose}, // Pe MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT - {0x276C, 0x276C, prClose}, // Ps MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT - {0x276D, 0x276D, prClose}, // Pe MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT - {0x276E, 0x276E, prClose}, // Ps HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT - {0x276F, 0x276F, prClose}, // Pe HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT - {0x2770, 0x2770, prClose}, // Ps HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT - {0x2771, 0x2771, prClose}, // Pe HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT - {0x2772, 0x2772, prClose}, // Ps LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT - {0x2773, 0x2773, prClose}, // Pe LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT - {0x2774, 0x2774, prClose}, // Ps MEDIUM LEFT CURLY BRACKET ORNAMENT - {0x2775, 0x2775, prClose}, // Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT - {0x27C5, 0x27C5, prClose}, // Ps LEFT S-SHAPED BAG DELIMITER - {0x27C6, 0x27C6, prClose}, // Pe RIGHT S-SHAPED BAG DELIMITER - {0x27E6, 0x27E6, prClose}, // Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET - {0x27E7, 0x27E7, prClose}, // Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET - {0x27E8, 0x27E8, prClose}, // Ps MATHEMATICAL LEFT ANGLE BRACKET - {0x27E9, 0x27E9, prClose}, // Pe MATHEMATICAL RIGHT ANGLE BRACKET - {0x27EA, 0x27EA, prClose}, // Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET - {0x27EB, 0x27EB, prClose}, // Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET - {0x27EC, 0x27EC, prClose}, // Ps MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET - {0x27ED, 0x27ED, prClose}, // Pe MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET - {0x27EE, 0x27EE, prClose}, // Ps MATHEMATICAL LEFT FLATTENED PARENTHESIS - {0x27EF, 0x27EF, prClose}, // Pe MATHEMATICAL RIGHT FLATTENED PARENTHESIS - {0x2983, 0x2983, prClose}, // Ps LEFT WHITE CURLY BRACKET - {0x2984, 0x2984, prClose}, // Pe RIGHT WHITE CURLY BRACKET - {0x2985, 0x2985, prClose}, // Ps LEFT WHITE PARENTHESIS - {0x2986, 0x2986, prClose}, // Pe RIGHT WHITE PARENTHESIS - {0x2987, 0x2987, prClose}, // Ps Z NOTATION LEFT IMAGE BRACKET - {0x2988, 0x2988, prClose}, // Pe Z NOTATION RIGHT IMAGE BRACKET - {0x2989, 0x2989, prClose}, // Ps Z NOTATION LEFT BINDING BRACKET - {0x298A, 0x298A, prClose}, // Pe Z NOTATION RIGHT BINDING BRACKET - {0x298B, 0x298B, prClose}, // Ps LEFT SQUARE BRACKET WITH UNDERBAR - {0x298C, 0x298C, prClose}, // Pe RIGHT SQUARE BRACKET WITH UNDERBAR - {0x298D, 0x298D, prClose}, // Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER - {0x298E, 0x298E, prClose}, // Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER - {0x298F, 0x298F, prClose}, // Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER - {0x2990, 0x2990, prClose}, // Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER - {0x2991, 0x2991, prClose}, // Ps LEFT ANGLE BRACKET WITH DOT - {0x2992, 0x2992, prClose}, // Pe RIGHT ANGLE BRACKET WITH DOT - {0x2993, 0x2993, prClose}, // Ps LEFT ARC LESS-THAN BRACKET - {0x2994, 0x2994, prClose}, // Pe RIGHT ARC GREATER-THAN BRACKET - {0x2995, 0x2995, prClose}, // Ps DOUBLE LEFT ARC GREATER-THAN BRACKET - {0x2996, 0x2996, prClose}, // Pe DOUBLE RIGHT ARC LESS-THAN BRACKET - {0x2997, 0x2997, prClose}, // Ps LEFT BLACK TORTOISE SHELL BRACKET - {0x2998, 0x2998, prClose}, // Pe RIGHT BLACK TORTOISE SHELL BRACKET - {0x29D8, 0x29D8, prClose}, // Ps LEFT WIGGLY FENCE - {0x29D9, 0x29D9, prClose}, // Pe RIGHT WIGGLY FENCE - {0x29DA, 0x29DA, prClose}, // Ps LEFT DOUBLE WIGGLY FENCE - {0x29DB, 0x29DB, prClose}, // Pe RIGHT DOUBLE WIGGLY FENCE - {0x29FC, 0x29FC, prClose}, // Ps LEFT-POINTING CURVED ANGLE BRACKET - {0x29FD, 0x29FD, prClose}, // Pe RIGHT-POINTING CURVED ANGLE BRACKET - {0x2C00, 0x2C2F, prUpper}, // L& [48] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI - {0x2C30, 0x2C5F, prLower}, // L& [48] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI - {0x2C60, 0x2C60, prUpper}, // L& LATIN CAPITAL LETTER L WITH DOUBLE BAR - {0x2C61, 0x2C61, prLower}, // L& LATIN SMALL LETTER L WITH DOUBLE BAR - {0x2C62, 0x2C64, prUpper}, // L& [3] LATIN CAPITAL LETTER L WITH MIDDLE TILDE..LATIN CAPITAL LETTER R WITH TAIL - {0x2C65, 0x2C66, prLower}, // L& [2] LATIN SMALL LETTER A WITH STROKE..LATIN SMALL LETTER T WITH DIAGONAL STROKE - {0x2C67, 0x2C67, prUpper}, // L& LATIN CAPITAL LETTER H WITH DESCENDER - {0x2C68, 0x2C68, prLower}, // L& LATIN SMALL LETTER H WITH DESCENDER - {0x2C69, 0x2C69, prUpper}, // L& LATIN CAPITAL LETTER K WITH DESCENDER - {0x2C6A, 0x2C6A, prLower}, // L& LATIN SMALL LETTER K WITH DESCENDER - {0x2C6B, 0x2C6B, prUpper}, // L& LATIN CAPITAL LETTER Z WITH DESCENDER - {0x2C6C, 0x2C6C, prLower}, // L& LATIN SMALL LETTER Z WITH DESCENDER - {0x2C6D, 0x2C70, prUpper}, // L& [4] LATIN CAPITAL LETTER ALPHA..LATIN CAPITAL LETTER TURNED ALPHA - {0x2C71, 0x2C71, prLower}, // L& LATIN SMALL LETTER V WITH RIGHT HOOK - {0x2C72, 0x2C72, prUpper}, // L& LATIN CAPITAL LETTER W WITH HOOK - {0x2C73, 0x2C74, prLower}, // L& [2] LATIN SMALL LETTER W WITH HOOK..LATIN SMALL LETTER V WITH CURL - {0x2C75, 0x2C75, prUpper}, // L& LATIN CAPITAL LETTER HALF H - {0x2C76, 0x2C7B, prLower}, // L& [6] LATIN SMALL LETTER HALF H..LATIN LETTER SMALL CAPITAL TURNED E - {0x2C7C, 0x2C7D, prLower}, // Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V - {0x2C7E, 0x2C80, prUpper}, // L& [3] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC CAPITAL LETTER ALFA - {0x2C81, 0x2C81, prLower}, // L& COPTIC SMALL LETTER ALFA - {0x2C82, 0x2C82, prUpper}, // L& COPTIC CAPITAL LETTER VIDA - {0x2C83, 0x2C83, prLower}, // L& COPTIC SMALL LETTER VIDA - {0x2C84, 0x2C84, prUpper}, // L& COPTIC CAPITAL LETTER GAMMA - {0x2C85, 0x2C85, prLower}, // L& COPTIC SMALL LETTER GAMMA - {0x2C86, 0x2C86, prUpper}, // L& COPTIC CAPITAL LETTER DALDA - {0x2C87, 0x2C87, prLower}, // L& COPTIC SMALL LETTER DALDA - {0x2C88, 0x2C88, prUpper}, // L& COPTIC CAPITAL LETTER EIE - {0x2C89, 0x2C89, prLower}, // L& COPTIC SMALL LETTER EIE - {0x2C8A, 0x2C8A, prUpper}, // L& COPTIC CAPITAL LETTER SOU - {0x2C8B, 0x2C8B, prLower}, // L& COPTIC SMALL LETTER SOU - {0x2C8C, 0x2C8C, prUpper}, // L& COPTIC CAPITAL LETTER ZATA - {0x2C8D, 0x2C8D, prLower}, // L& COPTIC SMALL LETTER ZATA - {0x2C8E, 0x2C8E, prUpper}, // L& COPTIC CAPITAL LETTER HATE - {0x2C8F, 0x2C8F, prLower}, // L& COPTIC SMALL LETTER HATE - {0x2C90, 0x2C90, prUpper}, // L& COPTIC CAPITAL LETTER THETHE - {0x2C91, 0x2C91, prLower}, // L& COPTIC SMALL LETTER THETHE - {0x2C92, 0x2C92, prUpper}, // L& COPTIC CAPITAL LETTER IAUDA - {0x2C93, 0x2C93, prLower}, // L& COPTIC SMALL LETTER IAUDA - {0x2C94, 0x2C94, prUpper}, // L& COPTIC CAPITAL LETTER KAPA - {0x2C95, 0x2C95, prLower}, // L& COPTIC SMALL LETTER KAPA - {0x2C96, 0x2C96, prUpper}, // L& COPTIC CAPITAL LETTER LAULA - {0x2C97, 0x2C97, prLower}, // L& COPTIC SMALL LETTER LAULA - {0x2C98, 0x2C98, prUpper}, // L& COPTIC CAPITAL LETTER MI - {0x2C99, 0x2C99, prLower}, // L& COPTIC SMALL LETTER MI - {0x2C9A, 0x2C9A, prUpper}, // L& COPTIC CAPITAL LETTER NI - {0x2C9B, 0x2C9B, prLower}, // L& COPTIC SMALL LETTER NI - {0x2C9C, 0x2C9C, prUpper}, // L& COPTIC CAPITAL LETTER KSI - {0x2C9D, 0x2C9D, prLower}, // L& COPTIC SMALL LETTER KSI - {0x2C9E, 0x2C9E, prUpper}, // L& COPTIC CAPITAL LETTER O - {0x2C9F, 0x2C9F, prLower}, // L& COPTIC SMALL LETTER O - {0x2CA0, 0x2CA0, prUpper}, // L& COPTIC CAPITAL LETTER PI - {0x2CA1, 0x2CA1, prLower}, // L& COPTIC SMALL LETTER PI - {0x2CA2, 0x2CA2, prUpper}, // L& COPTIC CAPITAL LETTER RO - {0x2CA3, 0x2CA3, prLower}, // L& COPTIC SMALL LETTER RO - {0x2CA4, 0x2CA4, prUpper}, // L& COPTIC CAPITAL LETTER SIMA - {0x2CA5, 0x2CA5, prLower}, // L& COPTIC SMALL LETTER SIMA - {0x2CA6, 0x2CA6, prUpper}, // L& COPTIC CAPITAL LETTER TAU - {0x2CA7, 0x2CA7, prLower}, // L& COPTIC SMALL LETTER TAU - {0x2CA8, 0x2CA8, prUpper}, // L& COPTIC CAPITAL LETTER UA - {0x2CA9, 0x2CA9, prLower}, // L& COPTIC SMALL LETTER UA - {0x2CAA, 0x2CAA, prUpper}, // L& COPTIC CAPITAL LETTER FI - {0x2CAB, 0x2CAB, prLower}, // L& COPTIC SMALL LETTER FI - {0x2CAC, 0x2CAC, prUpper}, // L& COPTIC CAPITAL LETTER KHI - {0x2CAD, 0x2CAD, prLower}, // L& COPTIC SMALL LETTER KHI - {0x2CAE, 0x2CAE, prUpper}, // L& COPTIC CAPITAL LETTER PSI - {0x2CAF, 0x2CAF, prLower}, // L& COPTIC SMALL LETTER PSI - {0x2CB0, 0x2CB0, prUpper}, // L& COPTIC CAPITAL LETTER OOU - {0x2CB1, 0x2CB1, prLower}, // L& COPTIC SMALL LETTER OOU - {0x2CB2, 0x2CB2, prUpper}, // L& COPTIC CAPITAL LETTER DIALECT-P ALEF - {0x2CB3, 0x2CB3, prLower}, // L& COPTIC SMALL LETTER DIALECT-P ALEF - {0x2CB4, 0x2CB4, prUpper}, // L& COPTIC CAPITAL LETTER OLD COPTIC AIN - {0x2CB5, 0x2CB5, prLower}, // L& COPTIC SMALL LETTER OLD COPTIC AIN - {0x2CB6, 0x2CB6, prUpper}, // L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE - {0x2CB7, 0x2CB7, prLower}, // L& COPTIC SMALL LETTER CRYPTOGRAMMIC EIE - {0x2CB8, 0x2CB8, prUpper}, // L& COPTIC CAPITAL LETTER DIALECT-P KAPA - {0x2CB9, 0x2CB9, prLower}, // L& COPTIC SMALL LETTER DIALECT-P KAPA - {0x2CBA, 0x2CBA, prUpper}, // L& COPTIC CAPITAL LETTER DIALECT-P NI - {0x2CBB, 0x2CBB, prLower}, // L& COPTIC SMALL LETTER DIALECT-P NI - {0x2CBC, 0x2CBC, prUpper}, // L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI - {0x2CBD, 0x2CBD, prLower}, // L& COPTIC SMALL LETTER CRYPTOGRAMMIC NI - {0x2CBE, 0x2CBE, prUpper}, // L& COPTIC CAPITAL LETTER OLD COPTIC OOU - {0x2CBF, 0x2CBF, prLower}, // L& COPTIC SMALL LETTER OLD COPTIC OOU - {0x2CC0, 0x2CC0, prUpper}, // L& COPTIC CAPITAL LETTER SAMPI - {0x2CC1, 0x2CC1, prLower}, // L& COPTIC SMALL LETTER SAMPI - {0x2CC2, 0x2CC2, prUpper}, // L& COPTIC CAPITAL LETTER CROSSED SHEI - {0x2CC3, 0x2CC3, prLower}, // L& COPTIC SMALL LETTER CROSSED SHEI - {0x2CC4, 0x2CC4, prUpper}, // L& COPTIC CAPITAL LETTER OLD COPTIC SHEI - {0x2CC5, 0x2CC5, prLower}, // L& COPTIC SMALL LETTER OLD COPTIC SHEI - {0x2CC6, 0x2CC6, prUpper}, // L& COPTIC CAPITAL LETTER OLD COPTIC ESH - {0x2CC7, 0x2CC7, prLower}, // L& COPTIC SMALL LETTER OLD COPTIC ESH - {0x2CC8, 0x2CC8, prUpper}, // L& COPTIC CAPITAL LETTER AKHMIMIC KHEI - {0x2CC9, 0x2CC9, prLower}, // L& COPTIC SMALL LETTER AKHMIMIC KHEI - {0x2CCA, 0x2CCA, prUpper}, // L& COPTIC CAPITAL LETTER DIALECT-P HORI - {0x2CCB, 0x2CCB, prLower}, // L& COPTIC SMALL LETTER DIALECT-P HORI - {0x2CCC, 0x2CCC, prUpper}, // L& COPTIC CAPITAL LETTER OLD COPTIC HORI - {0x2CCD, 0x2CCD, prLower}, // L& COPTIC SMALL LETTER OLD COPTIC HORI - {0x2CCE, 0x2CCE, prUpper}, // L& COPTIC CAPITAL LETTER OLD COPTIC HA - {0x2CCF, 0x2CCF, prLower}, // L& COPTIC SMALL LETTER OLD COPTIC HA - {0x2CD0, 0x2CD0, prUpper}, // L& COPTIC CAPITAL LETTER L-SHAPED HA - {0x2CD1, 0x2CD1, prLower}, // L& COPTIC SMALL LETTER L-SHAPED HA - {0x2CD2, 0x2CD2, prUpper}, // L& COPTIC CAPITAL LETTER OLD COPTIC HEI - {0x2CD3, 0x2CD3, prLower}, // L& COPTIC SMALL LETTER OLD COPTIC HEI - {0x2CD4, 0x2CD4, prUpper}, // L& COPTIC CAPITAL LETTER OLD COPTIC HAT - {0x2CD5, 0x2CD5, prLower}, // L& COPTIC SMALL LETTER OLD COPTIC HAT - {0x2CD6, 0x2CD6, prUpper}, // L& COPTIC CAPITAL LETTER OLD COPTIC GANGIA - {0x2CD7, 0x2CD7, prLower}, // L& COPTIC SMALL LETTER OLD COPTIC GANGIA - {0x2CD8, 0x2CD8, prUpper}, // L& COPTIC CAPITAL LETTER OLD COPTIC DJA - {0x2CD9, 0x2CD9, prLower}, // L& COPTIC SMALL LETTER OLD COPTIC DJA - {0x2CDA, 0x2CDA, prUpper}, // L& COPTIC CAPITAL LETTER OLD COPTIC SHIMA - {0x2CDB, 0x2CDB, prLower}, // L& COPTIC SMALL LETTER OLD COPTIC SHIMA - {0x2CDC, 0x2CDC, prUpper}, // L& COPTIC CAPITAL LETTER OLD NUBIAN SHIMA - {0x2CDD, 0x2CDD, prLower}, // L& COPTIC SMALL LETTER OLD NUBIAN SHIMA - {0x2CDE, 0x2CDE, prUpper}, // L& COPTIC CAPITAL LETTER OLD NUBIAN NGI - {0x2CDF, 0x2CDF, prLower}, // L& COPTIC SMALL LETTER OLD NUBIAN NGI - {0x2CE0, 0x2CE0, prUpper}, // L& COPTIC CAPITAL LETTER OLD NUBIAN NYI - {0x2CE1, 0x2CE1, prLower}, // L& COPTIC SMALL LETTER OLD NUBIAN NYI - {0x2CE2, 0x2CE2, prUpper}, // L& COPTIC CAPITAL LETTER OLD NUBIAN WAU - {0x2CE3, 0x2CE4, prLower}, // L& [2] COPTIC SMALL LETTER OLD NUBIAN WAU..COPTIC SYMBOL KAI - {0x2CEB, 0x2CEB, prUpper}, // L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI - {0x2CEC, 0x2CEC, prLower}, // L& COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI - {0x2CED, 0x2CED, prUpper}, // L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA - {0x2CEE, 0x2CEE, prLower}, // L& COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA - {0x2CEF, 0x2CF1, prExtend}, // Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS - {0x2CF2, 0x2CF2, prUpper}, // L& COPTIC CAPITAL LETTER BOHAIRIC KHEI - {0x2CF3, 0x2CF3, prLower}, // L& COPTIC SMALL LETTER BOHAIRIC KHEI - {0x2D00, 0x2D25, prLower}, // L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE - {0x2D27, 0x2D27, prLower}, // L& GEORGIAN SMALL LETTER YN - {0x2D2D, 0x2D2D, prLower}, // L& GEORGIAN SMALL LETTER AEN - {0x2D30, 0x2D67, prOLetter}, // Lo [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO - {0x2D6F, 0x2D6F, prOLetter}, // Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK - {0x2D7F, 0x2D7F, prExtend}, // Mn TIFINAGH CONSONANT JOINER - {0x2D80, 0x2D96, prOLetter}, // Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE - {0x2DA0, 0x2DA6, prOLetter}, // Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO - {0x2DA8, 0x2DAE, prOLetter}, // Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO - {0x2DB0, 0x2DB6, prOLetter}, // Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO - {0x2DB8, 0x2DBE, prOLetter}, // Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO - {0x2DC0, 0x2DC6, prOLetter}, // Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO - {0x2DC8, 0x2DCE, prOLetter}, // Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO - {0x2DD0, 0x2DD6, prOLetter}, // Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO - {0x2DD8, 0x2DDE, prOLetter}, // Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO - {0x2DE0, 0x2DFF, prExtend}, // Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS - {0x2E00, 0x2E01, prClose}, // Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER - {0x2E02, 0x2E02, prClose}, // Pi LEFT SUBSTITUTION BRACKET - {0x2E03, 0x2E03, prClose}, // Pf RIGHT SUBSTITUTION BRACKET - {0x2E04, 0x2E04, prClose}, // Pi LEFT DOTTED SUBSTITUTION BRACKET - {0x2E05, 0x2E05, prClose}, // Pf RIGHT DOTTED SUBSTITUTION BRACKET - {0x2E06, 0x2E08, prClose}, // Po [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER - {0x2E09, 0x2E09, prClose}, // Pi LEFT TRANSPOSITION BRACKET - {0x2E0A, 0x2E0A, prClose}, // Pf RIGHT TRANSPOSITION BRACKET - {0x2E0B, 0x2E0B, prClose}, // Po RAISED SQUARE - {0x2E0C, 0x2E0C, prClose}, // Pi LEFT RAISED OMISSION BRACKET - {0x2E0D, 0x2E0D, prClose}, // Pf RIGHT RAISED OMISSION BRACKET - {0x2E1C, 0x2E1C, prClose}, // Pi LEFT LOW PARAPHRASE BRACKET - {0x2E1D, 0x2E1D, prClose}, // Pf RIGHT LOW PARAPHRASE BRACKET - {0x2E20, 0x2E20, prClose}, // Pi LEFT VERTICAL BAR WITH QUILL - {0x2E21, 0x2E21, prClose}, // Pf RIGHT VERTICAL BAR WITH QUILL - {0x2E22, 0x2E22, prClose}, // Ps TOP LEFT HALF BRACKET - {0x2E23, 0x2E23, prClose}, // Pe TOP RIGHT HALF BRACKET - {0x2E24, 0x2E24, prClose}, // Ps BOTTOM LEFT HALF BRACKET - {0x2E25, 0x2E25, prClose}, // Pe BOTTOM RIGHT HALF BRACKET - {0x2E26, 0x2E26, prClose}, // Ps LEFT SIDEWAYS U BRACKET - {0x2E27, 0x2E27, prClose}, // Pe RIGHT SIDEWAYS U BRACKET - {0x2E28, 0x2E28, prClose}, // Ps LEFT DOUBLE PARENTHESIS - {0x2E29, 0x2E29, prClose}, // Pe RIGHT DOUBLE PARENTHESIS - {0x2E2E, 0x2E2E, prSTerm}, // Po REVERSED QUESTION MARK - {0x2E2F, 0x2E2F, prOLetter}, // Lm VERTICAL TILDE - {0x2E3C, 0x2E3C, prSTerm}, // Po STENOGRAPHIC FULL STOP - {0x2E42, 0x2E42, prClose}, // Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK - {0x2E53, 0x2E54, prSTerm}, // Po [2] MEDIEVAL EXCLAMATION MARK..MEDIEVAL QUESTION MARK - {0x2E55, 0x2E55, prClose}, // Ps LEFT SQUARE BRACKET WITH STROKE - {0x2E56, 0x2E56, prClose}, // Pe RIGHT SQUARE BRACKET WITH STROKE - {0x2E57, 0x2E57, prClose}, // Ps LEFT SQUARE BRACKET WITH DOUBLE STROKE - {0x2E58, 0x2E58, prClose}, // Pe RIGHT SQUARE BRACKET WITH DOUBLE STROKE - {0x2E59, 0x2E59, prClose}, // Ps TOP HALF LEFT PARENTHESIS - {0x2E5A, 0x2E5A, prClose}, // Pe TOP HALF RIGHT PARENTHESIS - {0x2E5B, 0x2E5B, prClose}, // Ps BOTTOM HALF LEFT PARENTHESIS - {0x2E5C, 0x2E5C, prClose}, // Pe BOTTOM HALF RIGHT PARENTHESIS - {0x3000, 0x3000, prSp}, // Zs IDEOGRAPHIC SPACE - {0x3001, 0x3001, prSContinue}, // Po IDEOGRAPHIC COMMA - {0x3002, 0x3002, prSTerm}, // Po IDEOGRAPHIC FULL STOP - {0x3005, 0x3005, prOLetter}, // Lm IDEOGRAPHIC ITERATION MARK - {0x3006, 0x3006, prOLetter}, // Lo IDEOGRAPHIC CLOSING MARK - {0x3007, 0x3007, prOLetter}, // Nl IDEOGRAPHIC NUMBER ZERO - {0x3008, 0x3008, prClose}, // Ps LEFT ANGLE BRACKET - {0x3009, 0x3009, prClose}, // Pe RIGHT ANGLE BRACKET - {0x300A, 0x300A, prClose}, // Ps LEFT DOUBLE ANGLE BRACKET - {0x300B, 0x300B, prClose}, // Pe RIGHT DOUBLE ANGLE BRACKET - {0x300C, 0x300C, prClose}, // Ps LEFT CORNER BRACKET - {0x300D, 0x300D, prClose}, // Pe RIGHT CORNER BRACKET - {0x300E, 0x300E, prClose}, // Ps LEFT WHITE CORNER BRACKET - {0x300F, 0x300F, prClose}, // Pe RIGHT WHITE CORNER BRACKET - {0x3010, 0x3010, prClose}, // Ps LEFT BLACK LENTICULAR BRACKET - {0x3011, 0x3011, prClose}, // Pe RIGHT BLACK LENTICULAR BRACKET - {0x3014, 0x3014, prClose}, // Ps LEFT TORTOISE SHELL BRACKET - {0x3015, 0x3015, prClose}, // Pe RIGHT TORTOISE SHELL BRACKET - {0x3016, 0x3016, prClose}, // Ps LEFT WHITE LENTICULAR BRACKET - {0x3017, 0x3017, prClose}, // Pe RIGHT WHITE LENTICULAR BRACKET - {0x3018, 0x3018, prClose}, // Ps LEFT WHITE TORTOISE SHELL BRACKET - {0x3019, 0x3019, prClose}, // Pe RIGHT WHITE TORTOISE SHELL BRACKET - {0x301A, 0x301A, prClose}, // Ps LEFT WHITE SQUARE BRACKET - {0x301B, 0x301B, prClose}, // Pe RIGHT WHITE SQUARE BRACKET - {0x301D, 0x301D, prClose}, // Ps REVERSED DOUBLE PRIME QUOTATION MARK - {0x301E, 0x301F, prClose}, // Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK - {0x3021, 0x3029, prOLetter}, // Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE - {0x302A, 0x302D, prExtend}, // Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK - {0x302E, 0x302F, prExtend}, // Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK - {0x3031, 0x3035, prOLetter}, // Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF - {0x3038, 0x303A, prOLetter}, // Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY - {0x303B, 0x303B, prOLetter}, // Lm VERTICAL IDEOGRAPHIC ITERATION MARK - {0x303C, 0x303C, prOLetter}, // Lo MASU MARK - {0x3041, 0x3096, prOLetter}, // Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE - {0x3099, 0x309A, prExtend}, // Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK - {0x309D, 0x309E, prOLetter}, // Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK - {0x309F, 0x309F, prOLetter}, // Lo HIRAGANA DIGRAPH YORI - {0x30A1, 0x30FA, prOLetter}, // Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO - {0x30FC, 0x30FE, prOLetter}, // Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK - {0x30FF, 0x30FF, prOLetter}, // Lo KATAKANA DIGRAPH KOTO - {0x3105, 0x312F, prOLetter}, // Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN - {0x3131, 0x318E, prOLetter}, // Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE - {0x31A0, 0x31BF, prOLetter}, // Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH - {0x31F0, 0x31FF, prOLetter}, // Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO - {0x3400, 0x4DBF, prOLetter}, // Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF - {0x4E00, 0xA014, prOLetter}, // Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E - {0xA015, 0xA015, prOLetter}, // Lm YI SYLLABLE WU - {0xA016, 0xA48C, prOLetter}, // Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR - {0xA4D0, 0xA4F7, prOLetter}, // Lo [40] LISU LETTER BA..LISU LETTER OE - {0xA4F8, 0xA4FD, prOLetter}, // Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU - {0xA4FF, 0xA4FF, prSTerm}, // Po LISU PUNCTUATION FULL STOP - {0xA500, 0xA60B, prOLetter}, // Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG - {0xA60C, 0xA60C, prOLetter}, // Lm VAI SYLLABLE LENGTHENER - {0xA60E, 0xA60F, prSTerm}, // Po [2] VAI FULL STOP..VAI QUESTION MARK - {0xA610, 0xA61F, prOLetter}, // Lo [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG - {0xA620, 0xA629, prNumeric}, // Nd [10] VAI DIGIT ZERO..VAI DIGIT NINE - {0xA62A, 0xA62B, prOLetter}, // Lo [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO - {0xA640, 0xA640, prUpper}, // L& CYRILLIC CAPITAL LETTER ZEMLYA - {0xA641, 0xA641, prLower}, // L& CYRILLIC SMALL LETTER ZEMLYA - {0xA642, 0xA642, prUpper}, // L& CYRILLIC CAPITAL LETTER DZELO - {0xA643, 0xA643, prLower}, // L& CYRILLIC SMALL LETTER DZELO - {0xA644, 0xA644, prUpper}, // L& CYRILLIC CAPITAL LETTER REVERSED DZE - {0xA645, 0xA645, prLower}, // L& CYRILLIC SMALL LETTER REVERSED DZE - {0xA646, 0xA646, prUpper}, // L& CYRILLIC CAPITAL LETTER IOTA - {0xA647, 0xA647, prLower}, // L& CYRILLIC SMALL LETTER IOTA - {0xA648, 0xA648, prUpper}, // L& CYRILLIC CAPITAL LETTER DJERV - {0xA649, 0xA649, prLower}, // L& CYRILLIC SMALL LETTER DJERV - {0xA64A, 0xA64A, prUpper}, // L& CYRILLIC CAPITAL LETTER MONOGRAPH UK - {0xA64B, 0xA64B, prLower}, // L& CYRILLIC SMALL LETTER MONOGRAPH UK - {0xA64C, 0xA64C, prUpper}, // L& CYRILLIC CAPITAL LETTER BROAD OMEGA - {0xA64D, 0xA64D, prLower}, // L& CYRILLIC SMALL LETTER BROAD OMEGA - {0xA64E, 0xA64E, prUpper}, // L& CYRILLIC CAPITAL LETTER NEUTRAL YER - {0xA64F, 0xA64F, prLower}, // L& CYRILLIC SMALL LETTER NEUTRAL YER - {0xA650, 0xA650, prUpper}, // L& CYRILLIC CAPITAL LETTER YERU WITH BACK YER - {0xA651, 0xA651, prLower}, // L& CYRILLIC SMALL LETTER YERU WITH BACK YER - {0xA652, 0xA652, prUpper}, // L& CYRILLIC CAPITAL LETTER IOTIFIED YAT - {0xA653, 0xA653, prLower}, // L& CYRILLIC SMALL LETTER IOTIFIED YAT - {0xA654, 0xA654, prUpper}, // L& CYRILLIC CAPITAL LETTER REVERSED YU - {0xA655, 0xA655, prLower}, // L& CYRILLIC SMALL LETTER REVERSED YU - {0xA656, 0xA656, prUpper}, // L& CYRILLIC CAPITAL LETTER IOTIFIED A - {0xA657, 0xA657, prLower}, // L& CYRILLIC SMALL LETTER IOTIFIED A - {0xA658, 0xA658, prUpper}, // L& CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS - {0xA659, 0xA659, prLower}, // L& CYRILLIC SMALL LETTER CLOSED LITTLE YUS - {0xA65A, 0xA65A, prUpper}, // L& CYRILLIC CAPITAL LETTER BLENDED YUS - {0xA65B, 0xA65B, prLower}, // L& CYRILLIC SMALL LETTER BLENDED YUS - {0xA65C, 0xA65C, prUpper}, // L& CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS - {0xA65D, 0xA65D, prLower}, // L& CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS - {0xA65E, 0xA65E, prUpper}, // L& CYRILLIC CAPITAL LETTER YN - {0xA65F, 0xA65F, prLower}, // L& CYRILLIC SMALL LETTER YN - {0xA660, 0xA660, prUpper}, // L& CYRILLIC CAPITAL LETTER REVERSED TSE - {0xA661, 0xA661, prLower}, // L& CYRILLIC SMALL LETTER REVERSED TSE - {0xA662, 0xA662, prUpper}, // L& CYRILLIC CAPITAL LETTER SOFT DE - {0xA663, 0xA663, prLower}, // L& CYRILLIC SMALL LETTER SOFT DE - {0xA664, 0xA664, prUpper}, // L& CYRILLIC CAPITAL LETTER SOFT EL - {0xA665, 0xA665, prLower}, // L& CYRILLIC SMALL LETTER SOFT EL - {0xA666, 0xA666, prUpper}, // L& CYRILLIC CAPITAL LETTER SOFT EM - {0xA667, 0xA667, prLower}, // L& CYRILLIC SMALL LETTER SOFT EM - {0xA668, 0xA668, prUpper}, // L& CYRILLIC CAPITAL LETTER MONOCULAR O - {0xA669, 0xA669, prLower}, // L& CYRILLIC SMALL LETTER MONOCULAR O - {0xA66A, 0xA66A, prUpper}, // L& CYRILLIC CAPITAL LETTER BINOCULAR O - {0xA66B, 0xA66B, prLower}, // L& CYRILLIC SMALL LETTER BINOCULAR O - {0xA66C, 0xA66C, prUpper}, // L& CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O - {0xA66D, 0xA66D, prLower}, // L& CYRILLIC SMALL LETTER DOUBLE MONOCULAR O - {0xA66E, 0xA66E, prOLetter}, // Lo CYRILLIC LETTER MULTIOCULAR O - {0xA66F, 0xA66F, prExtend}, // Mn COMBINING CYRILLIC VZMET - {0xA670, 0xA672, prExtend}, // Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN - {0xA674, 0xA67D, prExtend}, // Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK - {0xA67F, 0xA67F, prOLetter}, // Lm CYRILLIC PAYEROK - {0xA680, 0xA680, prUpper}, // L& CYRILLIC CAPITAL LETTER DWE - {0xA681, 0xA681, prLower}, // L& CYRILLIC SMALL LETTER DWE - {0xA682, 0xA682, prUpper}, // L& CYRILLIC CAPITAL LETTER DZWE - {0xA683, 0xA683, prLower}, // L& CYRILLIC SMALL LETTER DZWE - {0xA684, 0xA684, prUpper}, // L& CYRILLIC CAPITAL LETTER ZHWE - {0xA685, 0xA685, prLower}, // L& CYRILLIC SMALL LETTER ZHWE - {0xA686, 0xA686, prUpper}, // L& CYRILLIC CAPITAL LETTER CCHE - {0xA687, 0xA687, prLower}, // L& CYRILLIC SMALL LETTER CCHE - {0xA688, 0xA688, prUpper}, // L& CYRILLIC CAPITAL LETTER DZZE - {0xA689, 0xA689, prLower}, // L& CYRILLIC SMALL LETTER DZZE - {0xA68A, 0xA68A, prUpper}, // L& CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK - {0xA68B, 0xA68B, prLower}, // L& CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK - {0xA68C, 0xA68C, prUpper}, // L& CYRILLIC CAPITAL LETTER TWE - {0xA68D, 0xA68D, prLower}, // L& CYRILLIC SMALL LETTER TWE - {0xA68E, 0xA68E, prUpper}, // L& CYRILLIC CAPITAL LETTER TSWE - {0xA68F, 0xA68F, prLower}, // L& CYRILLIC SMALL LETTER TSWE - {0xA690, 0xA690, prUpper}, // L& CYRILLIC CAPITAL LETTER TSSE - {0xA691, 0xA691, prLower}, // L& CYRILLIC SMALL LETTER TSSE - {0xA692, 0xA692, prUpper}, // L& CYRILLIC CAPITAL LETTER TCHE - {0xA693, 0xA693, prLower}, // L& CYRILLIC SMALL LETTER TCHE - {0xA694, 0xA694, prUpper}, // L& CYRILLIC CAPITAL LETTER HWE - {0xA695, 0xA695, prLower}, // L& CYRILLIC SMALL LETTER HWE - {0xA696, 0xA696, prUpper}, // L& CYRILLIC CAPITAL LETTER SHWE - {0xA697, 0xA697, prLower}, // L& CYRILLIC SMALL LETTER SHWE - {0xA698, 0xA698, prUpper}, // L& CYRILLIC CAPITAL LETTER DOUBLE O - {0xA699, 0xA699, prLower}, // L& CYRILLIC SMALL LETTER DOUBLE O - {0xA69A, 0xA69A, prUpper}, // L& CYRILLIC CAPITAL LETTER CROSSED O - {0xA69B, 0xA69B, prLower}, // L& CYRILLIC SMALL LETTER CROSSED O - {0xA69C, 0xA69D, prLower}, // Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN - {0xA69E, 0xA69F, prExtend}, // Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E - {0xA6A0, 0xA6E5, prOLetter}, // Lo [70] BAMUM LETTER A..BAMUM LETTER KI - {0xA6E6, 0xA6EF, prOLetter}, // Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM - {0xA6F0, 0xA6F1, prExtend}, // Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS - {0xA6F3, 0xA6F3, prSTerm}, // Po BAMUM FULL STOP - {0xA6F7, 0xA6F7, prSTerm}, // Po BAMUM QUESTION MARK - {0xA717, 0xA71F, prOLetter}, // Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK - {0xA722, 0xA722, prUpper}, // L& LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF - {0xA723, 0xA723, prLower}, // L& LATIN SMALL LETTER EGYPTOLOGICAL ALEF - {0xA724, 0xA724, prUpper}, // L& LATIN CAPITAL LETTER EGYPTOLOGICAL AIN - {0xA725, 0xA725, prLower}, // L& LATIN SMALL LETTER EGYPTOLOGICAL AIN - {0xA726, 0xA726, prUpper}, // L& LATIN CAPITAL LETTER HENG - {0xA727, 0xA727, prLower}, // L& LATIN SMALL LETTER HENG - {0xA728, 0xA728, prUpper}, // L& LATIN CAPITAL LETTER TZ - {0xA729, 0xA729, prLower}, // L& LATIN SMALL LETTER TZ - {0xA72A, 0xA72A, prUpper}, // L& LATIN CAPITAL LETTER TRESILLO - {0xA72B, 0xA72B, prLower}, // L& LATIN SMALL LETTER TRESILLO - {0xA72C, 0xA72C, prUpper}, // L& LATIN CAPITAL LETTER CUATRILLO - {0xA72D, 0xA72D, prLower}, // L& LATIN SMALL LETTER CUATRILLO - {0xA72E, 0xA72E, prUpper}, // L& LATIN CAPITAL LETTER CUATRILLO WITH COMMA - {0xA72F, 0xA731, prLower}, // L& [3] LATIN SMALL LETTER CUATRILLO WITH COMMA..LATIN LETTER SMALL CAPITAL S - {0xA732, 0xA732, prUpper}, // L& LATIN CAPITAL LETTER AA - {0xA733, 0xA733, prLower}, // L& LATIN SMALL LETTER AA - {0xA734, 0xA734, prUpper}, // L& LATIN CAPITAL LETTER AO - {0xA735, 0xA735, prLower}, // L& LATIN SMALL LETTER AO - {0xA736, 0xA736, prUpper}, // L& LATIN CAPITAL LETTER AU - {0xA737, 0xA737, prLower}, // L& LATIN SMALL LETTER AU - {0xA738, 0xA738, prUpper}, // L& LATIN CAPITAL LETTER AV - {0xA739, 0xA739, prLower}, // L& LATIN SMALL LETTER AV - {0xA73A, 0xA73A, prUpper}, // L& LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR - {0xA73B, 0xA73B, prLower}, // L& LATIN SMALL LETTER AV WITH HORIZONTAL BAR - {0xA73C, 0xA73C, prUpper}, // L& LATIN CAPITAL LETTER AY - {0xA73D, 0xA73D, prLower}, // L& LATIN SMALL LETTER AY - {0xA73E, 0xA73E, prUpper}, // L& LATIN CAPITAL LETTER REVERSED C WITH DOT - {0xA73F, 0xA73F, prLower}, // L& LATIN SMALL LETTER REVERSED C WITH DOT - {0xA740, 0xA740, prUpper}, // L& LATIN CAPITAL LETTER K WITH STROKE - {0xA741, 0xA741, prLower}, // L& LATIN SMALL LETTER K WITH STROKE - {0xA742, 0xA742, prUpper}, // L& LATIN CAPITAL LETTER K WITH DIAGONAL STROKE - {0xA743, 0xA743, prLower}, // L& LATIN SMALL LETTER K WITH DIAGONAL STROKE - {0xA744, 0xA744, prUpper}, // L& LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE - {0xA745, 0xA745, prLower}, // L& LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE - {0xA746, 0xA746, prUpper}, // L& LATIN CAPITAL LETTER BROKEN L - {0xA747, 0xA747, prLower}, // L& LATIN SMALL LETTER BROKEN L - {0xA748, 0xA748, prUpper}, // L& LATIN CAPITAL LETTER L WITH HIGH STROKE - {0xA749, 0xA749, prLower}, // L& LATIN SMALL LETTER L WITH HIGH STROKE - {0xA74A, 0xA74A, prUpper}, // L& LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY - {0xA74B, 0xA74B, prLower}, // L& LATIN SMALL LETTER O WITH LONG STROKE OVERLAY - {0xA74C, 0xA74C, prUpper}, // L& LATIN CAPITAL LETTER O WITH LOOP - {0xA74D, 0xA74D, prLower}, // L& LATIN SMALL LETTER O WITH LOOP - {0xA74E, 0xA74E, prUpper}, // L& LATIN CAPITAL LETTER OO - {0xA74F, 0xA74F, prLower}, // L& LATIN SMALL LETTER OO - {0xA750, 0xA750, prUpper}, // L& LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER - {0xA751, 0xA751, prLower}, // L& LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER - {0xA752, 0xA752, prUpper}, // L& LATIN CAPITAL LETTER P WITH FLOURISH - {0xA753, 0xA753, prLower}, // L& LATIN SMALL LETTER P WITH FLOURISH - {0xA754, 0xA754, prUpper}, // L& LATIN CAPITAL LETTER P WITH SQUIRREL TAIL - {0xA755, 0xA755, prLower}, // L& LATIN SMALL LETTER P WITH SQUIRREL TAIL - {0xA756, 0xA756, prUpper}, // L& LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER - {0xA757, 0xA757, prLower}, // L& LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER - {0xA758, 0xA758, prUpper}, // L& LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE - {0xA759, 0xA759, prLower}, // L& LATIN SMALL LETTER Q WITH DIAGONAL STROKE - {0xA75A, 0xA75A, prUpper}, // L& LATIN CAPITAL LETTER R ROTUNDA - {0xA75B, 0xA75B, prLower}, // L& LATIN SMALL LETTER R ROTUNDA - {0xA75C, 0xA75C, prUpper}, // L& LATIN CAPITAL LETTER RUM ROTUNDA - {0xA75D, 0xA75D, prLower}, // L& LATIN SMALL LETTER RUM ROTUNDA - {0xA75E, 0xA75E, prUpper}, // L& LATIN CAPITAL LETTER V WITH DIAGONAL STROKE - {0xA75F, 0xA75F, prLower}, // L& LATIN SMALL LETTER V WITH DIAGONAL STROKE - {0xA760, 0xA760, prUpper}, // L& LATIN CAPITAL LETTER VY - {0xA761, 0xA761, prLower}, // L& LATIN SMALL LETTER VY - {0xA762, 0xA762, prUpper}, // L& LATIN CAPITAL LETTER VISIGOTHIC Z - {0xA763, 0xA763, prLower}, // L& LATIN SMALL LETTER VISIGOTHIC Z - {0xA764, 0xA764, prUpper}, // L& LATIN CAPITAL LETTER THORN WITH STROKE - {0xA765, 0xA765, prLower}, // L& LATIN SMALL LETTER THORN WITH STROKE - {0xA766, 0xA766, prUpper}, // L& LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER - {0xA767, 0xA767, prLower}, // L& LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER - {0xA768, 0xA768, prUpper}, // L& LATIN CAPITAL LETTER VEND - {0xA769, 0xA769, prLower}, // L& LATIN SMALL LETTER VEND - {0xA76A, 0xA76A, prUpper}, // L& LATIN CAPITAL LETTER ET - {0xA76B, 0xA76B, prLower}, // L& LATIN SMALL LETTER ET - {0xA76C, 0xA76C, prUpper}, // L& LATIN CAPITAL LETTER IS - {0xA76D, 0xA76D, prLower}, // L& LATIN SMALL LETTER IS - {0xA76E, 0xA76E, prUpper}, // L& LATIN CAPITAL LETTER CON - {0xA76F, 0xA76F, prLower}, // L& LATIN SMALL LETTER CON - {0xA770, 0xA770, prLower}, // Lm MODIFIER LETTER US - {0xA771, 0xA778, prLower}, // L& [8] LATIN SMALL LETTER DUM..LATIN SMALL LETTER UM - {0xA779, 0xA779, prUpper}, // L& LATIN CAPITAL LETTER INSULAR D - {0xA77A, 0xA77A, prLower}, // L& LATIN SMALL LETTER INSULAR D - {0xA77B, 0xA77B, prUpper}, // L& LATIN CAPITAL LETTER INSULAR F - {0xA77C, 0xA77C, prLower}, // L& LATIN SMALL LETTER INSULAR F - {0xA77D, 0xA77E, prUpper}, // L& [2] LATIN CAPITAL LETTER INSULAR G..LATIN CAPITAL LETTER TURNED INSULAR G - {0xA77F, 0xA77F, prLower}, // L& LATIN SMALL LETTER TURNED INSULAR G - {0xA780, 0xA780, prUpper}, // L& LATIN CAPITAL LETTER TURNED L - {0xA781, 0xA781, prLower}, // L& LATIN SMALL LETTER TURNED L - {0xA782, 0xA782, prUpper}, // L& LATIN CAPITAL LETTER INSULAR R - {0xA783, 0xA783, prLower}, // L& LATIN SMALL LETTER INSULAR R - {0xA784, 0xA784, prUpper}, // L& LATIN CAPITAL LETTER INSULAR S - {0xA785, 0xA785, prLower}, // L& LATIN SMALL LETTER INSULAR S - {0xA786, 0xA786, prUpper}, // L& LATIN CAPITAL LETTER INSULAR T - {0xA787, 0xA787, prLower}, // L& LATIN SMALL LETTER INSULAR T - {0xA788, 0xA788, prOLetter}, // Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT - {0xA78B, 0xA78B, prUpper}, // L& LATIN CAPITAL LETTER SALTILLO - {0xA78C, 0xA78C, prLower}, // L& LATIN SMALL LETTER SALTILLO - {0xA78D, 0xA78D, prUpper}, // L& LATIN CAPITAL LETTER TURNED H - {0xA78E, 0xA78E, prLower}, // L& LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT - {0xA78F, 0xA78F, prOLetter}, // Lo LATIN LETTER SINOLOGICAL DOT - {0xA790, 0xA790, prUpper}, // L& LATIN CAPITAL LETTER N WITH DESCENDER - {0xA791, 0xA791, prLower}, // L& LATIN SMALL LETTER N WITH DESCENDER - {0xA792, 0xA792, prUpper}, // L& LATIN CAPITAL LETTER C WITH BAR - {0xA793, 0xA795, prLower}, // L& [3] LATIN SMALL LETTER C WITH BAR..LATIN SMALL LETTER H WITH PALATAL HOOK - {0xA796, 0xA796, prUpper}, // L& LATIN CAPITAL LETTER B WITH FLOURISH - {0xA797, 0xA797, prLower}, // L& LATIN SMALL LETTER B WITH FLOURISH - {0xA798, 0xA798, prUpper}, // L& LATIN CAPITAL LETTER F WITH STROKE - {0xA799, 0xA799, prLower}, // L& LATIN SMALL LETTER F WITH STROKE - {0xA79A, 0xA79A, prUpper}, // L& LATIN CAPITAL LETTER VOLAPUK AE - {0xA79B, 0xA79B, prLower}, // L& LATIN SMALL LETTER VOLAPUK AE - {0xA79C, 0xA79C, prUpper}, // L& LATIN CAPITAL LETTER VOLAPUK OE - {0xA79D, 0xA79D, prLower}, // L& LATIN SMALL LETTER VOLAPUK OE - {0xA79E, 0xA79E, prUpper}, // L& LATIN CAPITAL LETTER VOLAPUK UE - {0xA79F, 0xA79F, prLower}, // L& LATIN SMALL LETTER VOLAPUK UE - {0xA7A0, 0xA7A0, prUpper}, // L& LATIN CAPITAL LETTER G WITH OBLIQUE STROKE - {0xA7A1, 0xA7A1, prLower}, // L& LATIN SMALL LETTER G WITH OBLIQUE STROKE - {0xA7A2, 0xA7A2, prUpper}, // L& LATIN CAPITAL LETTER K WITH OBLIQUE STROKE - {0xA7A3, 0xA7A3, prLower}, // L& LATIN SMALL LETTER K WITH OBLIQUE STROKE - {0xA7A4, 0xA7A4, prUpper}, // L& LATIN CAPITAL LETTER N WITH OBLIQUE STROKE - {0xA7A5, 0xA7A5, prLower}, // L& LATIN SMALL LETTER N WITH OBLIQUE STROKE - {0xA7A6, 0xA7A6, prUpper}, // L& LATIN CAPITAL LETTER R WITH OBLIQUE STROKE - {0xA7A7, 0xA7A7, prLower}, // L& LATIN SMALL LETTER R WITH OBLIQUE STROKE - {0xA7A8, 0xA7A8, prUpper}, // L& LATIN CAPITAL LETTER S WITH OBLIQUE STROKE - {0xA7A9, 0xA7A9, prLower}, // L& LATIN SMALL LETTER S WITH OBLIQUE STROKE - {0xA7AA, 0xA7AE, prUpper}, // L& [5] LATIN CAPITAL LETTER H WITH HOOK..LATIN CAPITAL LETTER SMALL CAPITAL I - {0xA7AF, 0xA7AF, prLower}, // L& LATIN LETTER SMALL CAPITAL Q - {0xA7B0, 0xA7B4, prUpper}, // L& [5] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER BETA - {0xA7B5, 0xA7B5, prLower}, // L& LATIN SMALL LETTER BETA - {0xA7B6, 0xA7B6, prUpper}, // L& LATIN CAPITAL LETTER OMEGA - {0xA7B7, 0xA7B7, prLower}, // L& LATIN SMALL LETTER OMEGA - {0xA7B8, 0xA7B8, prUpper}, // L& LATIN CAPITAL LETTER U WITH STROKE - {0xA7B9, 0xA7B9, prLower}, // L& LATIN SMALL LETTER U WITH STROKE - {0xA7BA, 0xA7BA, prUpper}, // L& LATIN CAPITAL LETTER GLOTTAL A - {0xA7BB, 0xA7BB, prLower}, // L& LATIN SMALL LETTER GLOTTAL A - {0xA7BC, 0xA7BC, prUpper}, // L& LATIN CAPITAL LETTER GLOTTAL I - {0xA7BD, 0xA7BD, prLower}, // L& LATIN SMALL LETTER GLOTTAL I - {0xA7BE, 0xA7BE, prUpper}, // L& LATIN CAPITAL LETTER GLOTTAL U - {0xA7BF, 0xA7BF, prLower}, // L& LATIN SMALL LETTER GLOTTAL U - {0xA7C0, 0xA7C0, prUpper}, // L& LATIN CAPITAL LETTER OLD POLISH O - {0xA7C1, 0xA7C1, prLower}, // L& LATIN SMALL LETTER OLD POLISH O - {0xA7C2, 0xA7C2, prUpper}, // L& LATIN CAPITAL LETTER ANGLICANA W - {0xA7C3, 0xA7C3, prLower}, // L& LATIN SMALL LETTER ANGLICANA W - {0xA7C4, 0xA7C7, prUpper}, // L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY - {0xA7C8, 0xA7C8, prLower}, // L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY - {0xA7C9, 0xA7C9, prUpper}, // L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY - {0xA7CA, 0xA7CA, prLower}, // L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY - {0xA7D0, 0xA7D0, prUpper}, // L& LATIN CAPITAL LETTER CLOSED INSULAR G - {0xA7D1, 0xA7D1, prLower}, // L& LATIN SMALL LETTER CLOSED INSULAR G - {0xA7D3, 0xA7D3, prLower}, // L& LATIN SMALL LETTER DOUBLE THORN - {0xA7D5, 0xA7D5, prLower}, // L& LATIN SMALL LETTER DOUBLE WYNN - {0xA7D6, 0xA7D6, prUpper}, // L& LATIN CAPITAL LETTER MIDDLE SCOTS S - {0xA7D7, 0xA7D7, prLower}, // L& LATIN SMALL LETTER MIDDLE SCOTS S - {0xA7D8, 0xA7D8, prUpper}, // L& LATIN CAPITAL LETTER SIGMOID S - {0xA7D9, 0xA7D9, prLower}, // L& LATIN SMALL LETTER SIGMOID S - {0xA7F2, 0xA7F4, prLower}, // Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q - {0xA7F5, 0xA7F5, prUpper}, // L& LATIN CAPITAL LETTER REVERSED HALF H - {0xA7F6, 0xA7F6, prLower}, // L& LATIN SMALL LETTER REVERSED HALF H - {0xA7F7, 0xA7F7, prOLetter}, // Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I - {0xA7F8, 0xA7F9, prLower}, // Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE - {0xA7FA, 0xA7FA, prLower}, // L& LATIN LETTER SMALL CAPITAL TURNED M - {0xA7FB, 0xA801, prOLetter}, // Lo [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I - {0xA802, 0xA802, prExtend}, // Mn SYLOTI NAGRI SIGN DVISVARA - {0xA803, 0xA805, prOLetter}, // Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O - {0xA806, 0xA806, prExtend}, // Mn SYLOTI NAGRI SIGN HASANTA - {0xA807, 0xA80A, prOLetter}, // Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO - {0xA80B, 0xA80B, prExtend}, // Mn SYLOTI NAGRI SIGN ANUSVARA - {0xA80C, 0xA822, prOLetter}, // Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO - {0xA823, 0xA824, prExtend}, // Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I - {0xA825, 0xA826, prExtend}, // Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E - {0xA827, 0xA827, prExtend}, // Mc SYLOTI NAGRI VOWEL SIGN OO - {0xA82C, 0xA82C, prExtend}, // Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA - {0xA840, 0xA873, prOLetter}, // Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU - {0xA876, 0xA877, prSTerm}, // Po [2] PHAGS-PA MARK SHAD..PHAGS-PA MARK DOUBLE SHAD - {0xA880, 0xA881, prExtend}, // Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA - {0xA882, 0xA8B3, prOLetter}, // Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA - {0xA8B4, 0xA8C3, prExtend}, // Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU - {0xA8C4, 0xA8C5, prExtend}, // Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU - {0xA8CE, 0xA8CF, prSTerm}, // Po [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA - {0xA8D0, 0xA8D9, prNumeric}, // Nd [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE - {0xA8E0, 0xA8F1, prExtend}, // Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA - {0xA8F2, 0xA8F7, prOLetter}, // Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA - {0xA8FB, 0xA8FB, prOLetter}, // Lo DEVANAGARI HEADSTROKE - {0xA8FD, 0xA8FE, prOLetter}, // Lo [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY - {0xA8FF, 0xA8FF, prExtend}, // Mn DEVANAGARI VOWEL SIGN AY - {0xA900, 0xA909, prNumeric}, // Nd [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE - {0xA90A, 0xA925, prOLetter}, // Lo [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO - {0xA926, 0xA92D, prExtend}, // Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU - {0xA92F, 0xA92F, prSTerm}, // Po KAYAH LI SIGN SHYA - {0xA930, 0xA946, prOLetter}, // Lo [23] REJANG LETTER KA..REJANG LETTER A - {0xA947, 0xA951, prExtend}, // Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R - {0xA952, 0xA953, prExtend}, // Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA - {0xA960, 0xA97C, prOLetter}, // Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH - {0xA980, 0xA982, prExtend}, // Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR - {0xA983, 0xA983, prExtend}, // Mc JAVANESE SIGN WIGNYAN - {0xA984, 0xA9B2, prOLetter}, // Lo [47] JAVANESE LETTER A..JAVANESE LETTER HA - {0xA9B3, 0xA9B3, prExtend}, // Mn JAVANESE SIGN CECAK TELU - {0xA9B4, 0xA9B5, prExtend}, // Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG - {0xA9B6, 0xA9B9, prExtend}, // Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT - {0xA9BA, 0xA9BB, prExtend}, // Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE - {0xA9BC, 0xA9BD, prExtend}, // Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET - {0xA9BE, 0xA9C0, prExtend}, // Mc [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON - {0xA9C8, 0xA9C9, prSTerm}, // Po [2] JAVANESE PADA LINGSA..JAVANESE PADA LUNGSI - {0xA9CF, 0xA9CF, prOLetter}, // Lm JAVANESE PANGRANGKEP - {0xA9D0, 0xA9D9, prNumeric}, // Nd [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE - {0xA9E0, 0xA9E4, prOLetter}, // Lo [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA - {0xA9E5, 0xA9E5, prExtend}, // Mn MYANMAR SIGN SHAN SAW - {0xA9E6, 0xA9E6, prOLetter}, // Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION - {0xA9E7, 0xA9EF, prOLetter}, // Lo [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA - {0xA9F0, 0xA9F9, prNumeric}, // Nd [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE - {0xA9FA, 0xA9FE, prOLetter}, // Lo [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA - {0xAA00, 0xAA28, prOLetter}, // Lo [41] CHAM LETTER A..CHAM LETTER HA - {0xAA29, 0xAA2E, prExtend}, // Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE - {0xAA2F, 0xAA30, prExtend}, // Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI - {0xAA31, 0xAA32, prExtend}, // Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE - {0xAA33, 0xAA34, prExtend}, // Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA - {0xAA35, 0xAA36, prExtend}, // Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA - {0xAA40, 0xAA42, prOLetter}, // Lo [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG - {0xAA43, 0xAA43, prExtend}, // Mn CHAM CONSONANT SIGN FINAL NG - {0xAA44, 0xAA4B, prOLetter}, // Lo [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS - {0xAA4C, 0xAA4C, prExtend}, // Mn CHAM CONSONANT SIGN FINAL M - {0xAA4D, 0xAA4D, prExtend}, // Mc CHAM CONSONANT SIGN FINAL H - {0xAA50, 0xAA59, prNumeric}, // Nd [10] CHAM DIGIT ZERO..CHAM DIGIT NINE - {0xAA5D, 0xAA5F, prSTerm}, // Po [3] CHAM PUNCTUATION DANDA..CHAM PUNCTUATION TRIPLE DANDA - {0xAA60, 0xAA6F, prOLetter}, // Lo [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA - {0xAA70, 0xAA70, prOLetter}, // Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION - {0xAA71, 0xAA76, prOLetter}, // Lo [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM - {0xAA7A, 0xAA7A, prOLetter}, // Lo MYANMAR LETTER AITON RA - {0xAA7B, 0xAA7B, prExtend}, // Mc MYANMAR SIGN PAO KAREN TONE - {0xAA7C, 0xAA7C, prExtend}, // Mn MYANMAR SIGN TAI LAING TONE-2 - {0xAA7D, 0xAA7D, prExtend}, // Mc MYANMAR SIGN TAI LAING TONE-5 - {0xAA7E, 0xAAAF, prOLetter}, // Lo [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O - {0xAAB0, 0xAAB0, prExtend}, // Mn TAI VIET MAI KANG - {0xAAB1, 0xAAB1, prOLetter}, // Lo TAI VIET VOWEL AA - {0xAAB2, 0xAAB4, prExtend}, // Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U - {0xAAB5, 0xAAB6, prOLetter}, // Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O - {0xAAB7, 0xAAB8, prExtend}, // Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA - {0xAAB9, 0xAABD, prOLetter}, // Lo [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN - {0xAABE, 0xAABF, prExtend}, // Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK - {0xAAC0, 0xAAC0, prOLetter}, // Lo TAI VIET TONE MAI NUENG - {0xAAC1, 0xAAC1, prExtend}, // Mn TAI VIET TONE MAI THO - {0xAAC2, 0xAAC2, prOLetter}, // Lo TAI VIET TONE MAI SONG - {0xAADB, 0xAADC, prOLetter}, // Lo [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG - {0xAADD, 0xAADD, prOLetter}, // Lm TAI VIET SYMBOL SAM - {0xAAE0, 0xAAEA, prOLetter}, // Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA - {0xAAEB, 0xAAEB, prExtend}, // Mc MEETEI MAYEK VOWEL SIGN II - {0xAAEC, 0xAAED, prExtend}, // Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI - {0xAAEE, 0xAAEF, prExtend}, // Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU - {0xAAF0, 0xAAF1, prSTerm}, // Po [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM - {0xAAF2, 0xAAF2, prOLetter}, // Lo MEETEI MAYEK ANJI - {0xAAF3, 0xAAF4, prOLetter}, // Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK - {0xAAF5, 0xAAF5, prExtend}, // Mc MEETEI MAYEK VOWEL SIGN VISARGA - {0xAAF6, 0xAAF6, prExtend}, // Mn MEETEI MAYEK VIRAMA - {0xAB01, 0xAB06, prOLetter}, // Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO - {0xAB09, 0xAB0E, prOLetter}, // Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO - {0xAB11, 0xAB16, prOLetter}, // Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO - {0xAB20, 0xAB26, prOLetter}, // Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO - {0xAB28, 0xAB2E, prOLetter}, // Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO - {0xAB30, 0xAB5A, prLower}, // L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG - {0xAB5C, 0xAB5F, prLower}, // Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK - {0xAB60, 0xAB68, prLower}, // L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE - {0xAB69, 0xAB69, prLower}, // Lm MODIFIER LETTER SMALL TURNED W - {0xAB70, 0xABBF, prLower}, // L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA - {0xABC0, 0xABE2, prOLetter}, // Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM - {0xABE3, 0xABE4, prExtend}, // Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP - {0xABE5, 0xABE5, prExtend}, // Mn MEETEI MAYEK VOWEL SIGN ANAP - {0xABE6, 0xABE7, prExtend}, // Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP - {0xABE8, 0xABE8, prExtend}, // Mn MEETEI MAYEK VOWEL SIGN UNAP - {0xABE9, 0xABEA, prExtend}, // Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG - {0xABEB, 0xABEB, prSTerm}, // Po MEETEI MAYEK CHEIKHEI - {0xABEC, 0xABEC, prExtend}, // Mc MEETEI MAYEK LUM IYEK - {0xABED, 0xABED, prExtend}, // Mn MEETEI MAYEK APUN IYEK - {0xABF0, 0xABF9, prNumeric}, // Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE - {0xAC00, 0xD7A3, prOLetter}, // Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH - {0xD7B0, 0xD7C6, prOLetter}, // Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E - {0xD7CB, 0xD7FB, prOLetter}, // Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH - {0xF900, 0xFA6D, prOLetter}, // Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D - {0xFA70, 0xFAD9, prOLetter}, // Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 - {0xFB00, 0xFB06, prLower}, // L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST - {0xFB13, 0xFB17, prLower}, // L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH - {0xFB1D, 0xFB1D, prOLetter}, // Lo HEBREW LETTER YOD WITH HIRIQ - {0xFB1E, 0xFB1E, prExtend}, // Mn HEBREW POINT JUDEO-SPANISH VARIKA - {0xFB1F, 0xFB28, prOLetter}, // Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV - {0xFB2A, 0xFB36, prOLetter}, // Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH - {0xFB38, 0xFB3C, prOLetter}, // Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH - {0xFB3E, 0xFB3E, prOLetter}, // Lo HEBREW LETTER MEM WITH DAGESH - {0xFB40, 0xFB41, prOLetter}, // Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH - {0xFB43, 0xFB44, prOLetter}, // Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH - {0xFB46, 0xFBB1, prOLetter}, // Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM - {0xFBD3, 0xFD3D, prOLetter}, // Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM - {0xFD3E, 0xFD3E, prClose}, // Pe ORNATE LEFT PARENTHESIS - {0xFD3F, 0xFD3F, prClose}, // Ps ORNATE RIGHT PARENTHESIS - {0xFD50, 0xFD8F, prOLetter}, // Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM - {0xFD92, 0xFDC7, prOLetter}, // Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM - {0xFDF0, 0xFDFB, prOLetter}, // Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU - {0xFE00, 0xFE0F, prExtend}, // Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 - {0xFE10, 0xFE11, prSContinue}, // Po [2] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA - {0xFE13, 0xFE13, prSContinue}, // Po PRESENTATION FORM FOR VERTICAL COLON - {0xFE17, 0xFE17, prClose}, // Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET - {0xFE18, 0xFE18, prClose}, // Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET - {0xFE20, 0xFE2F, prExtend}, // Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF - {0xFE31, 0xFE32, prSContinue}, // Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH - {0xFE35, 0xFE35, prClose}, // Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS - {0xFE36, 0xFE36, prClose}, // Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS - {0xFE37, 0xFE37, prClose}, // Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET - {0xFE38, 0xFE38, prClose}, // Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET - {0xFE39, 0xFE39, prClose}, // Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET - {0xFE3A, 0xFE3A, prClose}, // Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET - {0xFE3B, 0xFE3B, prClose}, // Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET - {0xFE3C, 0xFE3C, prClose}, // Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET - {0xFE3D, 0xFE3D, prClose}, // Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET - {0xFE3E, 0xFE3E, prClose}, // Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET - {0xFE3F, 0xFE3F, prClose}, // Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET - {0xFE40, 0xFE40, prClose}, // Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET - {0xFE41, 0xFE41, prClose}, // Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET - {0xFE42, 0xFE42, prClose}, // Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET - {0xFE43, 0xFE43, prClose}, // Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET - {0xFE44, 0xFE44, prClose}, // Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET - {0xFE47, 0xFE47, prClose}, // Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET - {0xFE48, 0xFE48, prClose}, // Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET - {0xFE50, 0xFE51, prSContinue}, // Po [2] SMALL COMMA..SMALL IDEOGRAPHIC COMMA - {0xFE52, 0xFE52, prATerm}, // Po SMALL FULL STOP - {0xFE55, 0xFE55, prSContinue}, // Po SMALL COLON - {0xFE56, 0xFE57, prSTerm}, // Po [2] SMALL QUESTION MARK..SMALL EXCLAMATION MARK - {0xFE58, 0xFE58, prSContinue}, // Pd SMALL EM DASH - {0xFE59, 0xFE59, prClose}, // Ps SMALL LEFT PARENTHESIS - {0xFE5A, 0xFE5A, prClose}, // Pe SMALL RIGHT PARENTHESIS - {0xFE5B, 0xFE5B, prClose}, // Ps SMALL LEFT CURLY BRACKET - {0xFE5C, 0xFE5C, prClose}, // Pe SMALL RIGHT CURLY BRACKET - {0xFE5D, 0xFE5D, prClose}, // Ps SMALL LEFT TORTOISE SHELL BRACKET - {0xFE5E, 0xFE5E, prClose}, // Pe SMALL RIGHT TORTOISE SHELL BRACKET - {0xFE63, 0xFE63, prSContinue}, // Pd SMALL HYPHEN-MINUS - {0xFE70, 0xFE74, prOLetter}, // Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM - {0xFE76, 0xFEFC, prOLetter}, // Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM - {0xFEFF, 0xFEFF, prFormat}, // Cf ZERO WIDTH NO-BREAK SPACE - {0xFF01, 0xFF01, prSTerm}, // Po FULLWIDTH EXCLAMATION MARK - {0xFF08, 0xFF08, prClose}, // Ps FULLWIDTH LEFT PARENTHESIS - {0xFF09, 0xFF09, prClose}, // Pe FULLWIDTH RIGHT PARENTHESIS - {0xFF0C, 0xFF0C, prSContinue}, // Po FULLWIDTH COMMA - {0xFF0D, 0xFF0D, prSContinue}, // Pd FULLWIDTH HYPHEN-MINUS - {0xFF0E, 0xFF0E, prATerm}, // Po FULLWIDTH FULL STOP - {0xFF10, 0xFF19, prNumeric}, // Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE - {0xFF1A, 0xFF1A, prSContinue}, // Po FULLWIDTH COLON - {0xFF1F, 0xFF1F, prSTerm}, // Po FULLWIDTH QUESTION MARK - {0xFF21, 0xFF3A, prUpper}, // L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z - {0xFF3B, 0xFF3B, prClose}, // Ps FULLWIDTH LEFT SQUARE BRACKET - {0xFF3D, 0xFF3D, prClose}, // Pe FULLWIDTH RIGHT SQUARE BRACKET - {0xFF41, 0xFF5A, prLower}, // L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z - {0xFF5B, 0xFF5B, prClose}, // Ps FULLWIDTH LEFT CURLY BRACKET - {0xFF5D, 0xFF5D, prClose}, // Pe FULLWIDTH RIGHT CURLY BRACKET - {0xFF5F, 0xFF5F, prClose}, // Ps FULLWIDTH LEFT WHITE PARENTHESIS - {0xFF60, 0xFF60, prClose}, // Pe FULLWIDTH RIGHT WHITE PARENTHESIS - {0xFF61, 0xFF61, prSTerm}, // Po HALFWIDTH IDEOGRAPHIC FULL STOP - {0xFF62, 0xFF62, prClose}, // Ps HALFWIDTH LEFT CORNER BRACKET - {0xFF63, 0xFF63, prClose}, // Pe HALFWIDTH RIGHT CORNER BRACKET - {0xFF64, 0xFF64, prSContinue}, // Po HALFWIDTH IDEOGRAPHIC COMMA - {0xFF66, 0xFF6F, prOLetter}, // Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU - {0xFF70, 0xFF70, prOLetter}, // Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK - {0xFF71, 0xFF9D, prOLetter}, // Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N - {0xFF9E, 0xFF9F, prExtend}, // Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK - {0xFFA0, 0xFFBE, prOLetter}, // Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH - {0xFFC2, 0xFFC7, prOLetter}, // Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E - {0xFFCA, 0xFFCF, prOLetter}, // Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE - {0xFFD2, 0xFFD7, prOLetter}, // Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU - {0xFFDA, 0xFFDC, prOLetter}, // Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I - {0xFFF9, 0xFFFB, prFormat}, // Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR - {0x10000, 0x1000B, prOLetter}, // Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE - {0x1000D, 0x10026, prOLetter}, // Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO - {0x10028, 0x1003A, prOLetter}, // Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO - {0x1003C, 0x1003D, prOLetter}, // Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE - {0x1003F, 0x1004D, prOLetter}, // Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO - {0x10050, 0x1005D, prOLetter}, // Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089 - {0x10080, 0x100FA, prOLetter}, // Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305 - {0x10140, 0x10174, prOLetter}, // Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS - {0x101FD, 0x101FD, prExtend}, // Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE - {0x10280, 0x1029C, prOLetter}, // Lo [29] LYCIAN LETTER A..LYCIAN LETTER X - {0x102A0, 0x102D0, prOLetter}, // Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3 - {0x102E0, 0x102E0, prExtend}, // Mn COPTIC EPACT THOUSANDS MARK - {0x10300, 0x1031F, prOLetter}, // Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS - {0x1032D, 0x10340, prOLetter}, // Lo [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA - {0x10341, 0x10341, prOLetter}, // Nl GOTHIC LETTER NINETY - {0x10342, 0x10349, prOLetter}, // Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL - {0x1034A, 0x1034A, prOLetter}, // Nl GOTHIC LETTER NINE HUNDRED - {0x10350, 0x10375, prOLetter}, // Lo [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA - {0x10376, 0x1037A, prExtend}, // Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII - {0x10380, 0x1039D, prOLetter}, // Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU - {0x103A0, 0x103C3, prOLetter}, // Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA - {0x103C8, 0x103CF, prOLetter}, // Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH - {0x103D1, 0x103D5, prOLetter}, // Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED - {0x10400, 0x10427, prUpper}, // L& [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW - {0x10428, 0x1044F, prLower}, // L& [40] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER EW - {0x10450, 0x1049D, prOLetter}, // Lo [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO - {0x104A0, 0x104A9, prNumeric}, // Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE - {0x104B0, 0x104D3, prUpper}, // L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA - {0x104D8, 0x104FB, prLower}, // L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA - {0x10500, 0x10527, prOLetter}, // Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE - {0x10530, 0x10563, prOLetter}, // Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW - {0x10570, 0x1057A, prUpper}, // L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA - {0x1057C, 0x1058A, prUpper}, // L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE - {0x1058C, 0x10592, prUpper}, // L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE - {0x10594, 0x10595, prUpper}, // L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE - {0x10597, 0x105A1, prLower}, // L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA - {0x105A3, 0x105B1, prLower}, // L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE - {0x105B3, 0x105B9, prLower}, // L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE - {0x105BB, 0x105BC, prLower}, // L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE - {0x10600, 0x10736, prOLetter}, // Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 - {0x10740, 0x10755, prOLetter}, // Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE - {0x10760, 0x10767, prOLetter}, // Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 - {0x10780, 0x10780, prLower}, // Lm MODIFIER LETTER SMALL CAPITAL AA - {0x10781, 0x10782, prOLetter}, // Lm [2] MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON..MODIFIER LETTER SUPERSCRIPT HALF TRIANGULAR COLON - {0x10783, 0x10785, prLower}, // Lm [3] MODIFIER LETTER SMALL AE..MODIFIER LETTER SMALL B WITH HOOK - {0x10787, 0x107B0, prLower}, // Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK - {0x107B2, 0x107BA, prLower}, // Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL - {0x10800, 0x10805, prOLetter}, // Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA - {0x10808, 0x10808, prOLetter}, // Lo CYPRIOT SYLLABLE JO - {0x1080A, 0x10835, prOLetter}, // Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO - {0x10837, 0x10838, prOLetter}, // Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE - {0x1083C, 0x1083C, prOLetter}, // Lo CYPRIOT SYLLABLE ZA - {0x1083F, 0x10855, prOLetter}, // Lo [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW - {0x10860, 0x10876, prOLetter}, // Lo [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW - {0x10880, 0x1089E, prOLetter}, // Lo [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW - {0x108E0, 0x108F2, prOLetter}, // Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH - {0x108F4, 0x108F5, prOLetter}, // Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW - {0x10900, 0x10915, prOLetter}, // Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU - {0x10920, 0x10939, prOLetter}, // Lo [26] LYDIAN LETTER A..LYDIAN LETTER C - {0x10980, 0x109B7, prOLetter}, // Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA - {0x109BE, 0x109BF, prOLetter}, // Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN - {0x10A00, 0x10A00, prOLetter}, // Lo KHAROSHTHI LETTER A - {0x10A01, 0x10A03, prExtend}, // Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R - {0x10A05, 0x10A06, prExtend}, // Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O - {0x10A0C, 0x10A0F, prExtend}, // Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA - {0x10A10, 0x10A13, prOLetter}, // Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA - {0x10A15, 0x10A17, prOLetter}, // Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA - {0x10A19, 0x10A35, prOLetter}, // Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA - {0x10A38, 0x10A3A, prExtend}, // Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW - {0x10A3F, 0x10A3F, prExtend}, // Mn KHAROSHTHI VIRAMA - {0x10A56, 0x10A57, prSTerm}, // Po [2] KHAROSHTHI PUNCTUATION DANDA..KHAROSHTHI PUNCTUATION DOUBLE DANDA - {0x10A60, 0x10A7C, prOLetter}, // Lo [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH - {0x10A80, 0x10A9C, prOLetter}, // Lo [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH - {0x10AC0, 0x10AC7, prOLetter}, // Lo [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW - {0x10AC9, 0x10AE4, prOLetter}, // Lo [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW - {0x10AE5, 0x10AE6, prExtend}, // Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW - {0x10B00, 0x10B35, prOLetter}, // Lo [54] AVESTAN LETTER A..AVESTAN LETTER HE - {0x10B40, 0x10B55, prOLetter}, // Lo [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW - {0x10B60, 0x10B72, prOLetter}, // Lo [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW - {0x10B80, 0x10B91, prOLetter}, // Lo [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW - {0x10C00, 0x10C48, prOLetter}, // Lo [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH - {0x10C80, 0x10CB2, prUpper}, // L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US - {0x10CC0, 0x10CF2, prLower}, // L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US - {0x10D00, 0x10D23, prOLetter}, // Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA - {0x10D24, 0x10D27, prExtend}, // Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI - {0x10D30, 0x10D39, prNumeric}, // Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE - {0x10E80, 0x10EA9, prOLetter}, // Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET - {0x10EAB, 0x10EAC, prExtend}, // Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK - {0x10EB0, 0x10EB1, prOLetter}, // Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE - {0x10EFD, 0x10EFF, prExtend}, // Mn [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA - {0x10F00, 0x10F1C, prOLetter}, // Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL - {0x10F27, 0x10F27, prOLetter}, // Lo OLD SOGDIAN LIGATURE AYIN-DALETH - {0x10F30, 0x10F45, prOLetter}, // Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN - {0x10F46, 0x10F50, prExtend}, // Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW - {0x10F55, 0x10F59, prSTerm}, // Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT - {0x10F70, 0x10F81, prOLetter}, // Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH - {0x10F82, 0x10F85, prExtend}, // Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW - {0x10F86, 0x10F89, prSTerm}, // Po [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS - {0x10FB0, 0x10FC4, prOLetter}, // Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW - {0x10FE0, 0x10FF6, prOLetter}, // Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH - {0x11000, 0x11000, prExtend}, // Mc BRAHMI SIGN CANDRABINDU - {0x11001, 0x11001, prExtend}, // Mn BRAHMI SIGN ANUSVARA - {0x11002, 0x11002, prExtend}, // Mc BRAHMI SIGN VISARGA - {0x11003, 0x11037, prOLetter}, // Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA - {0x11038, 0x11046, prExtend}, // Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA - {0x11047, 0x11048, prSTerm}, // Po [2] BRAHMI DANDA..BRAHMI DOUBLE DANDA - {0x11066, 0x1106F, prNumeric}, // Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE - {0x11070, 0x11070, prExtend}, // Mn BRAHMI SIGN OLD TAMIL VIRAMA - {0x11071, 0x11072, prOLetter}, // Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O - {0x11073, 0x11074, prExtend}, // Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O - {0x11075, 0x11075, prOLetter}, // Lo BRAHMI LETTER OLD TAMIL LLA - {0x1107F, 0x11081, prExtend}, // Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA - {0x11082, 0x11082, prExtend}, // Mc KAITHI SIGN VISARGA - {0x11083, 0x110AF, prOLetter}, // Lo [45] KAITHI LETTER A..KAITHI LETTER HA - {0x110B0, 0x110B2, prExtend}, // Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II - {0x110B3, 0x110B6, prExtend}, // Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI - {0x110B7, 0x110B8, prExtend}, // Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU - {0x110B9, 0x110BA, prExtend}, // Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA - {0x110BD, 0x110BD, prFormat}, // Cf KAITHI NUMBER SIGN - {0x110BE, 0x110C1, prSTerm}, // Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA - {0x110C2, 0x110C2, prExtend}, // Mn KAITHI VOWEL SIGN VOCALIC R - {0x110CD, 0x110CD, prFormat}, // Cf KAITHI NUMBER SIGN ABOVE - {0x110D0, 0x110E8, prOLetter}, // Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE - {0x110F0, 0x110F9, prNumeric}, // Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE - {0x11100, 0x11102, prExtend}, // Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA - {0x11103, 0x11126, prOLetter}, // Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA - {0x11127, 0x1112B, prExtend}, // Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU - {0x1112C, 0x1112C, prExtend}, // Mc CHAKMA VOWEL SIGN E - {0x1112D, 0x11134, prExtend}, // Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA - {0x11136, 0x1113F, prNumeric}, // Nd [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE - {0x11141, 0x11143, prSTerm}, // Po [3] CHAKMA DANDA..CHAKMA QUESTION MARK - {0x11144, 0x11144, prOLetter}, // Lo CHAKMA LETTER LHAA - {0x11145, 0x11146, prExtend}, // Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI - {0x11147, 0x11147, prOLetter}, // Lo CHAKMA LETTER VAA - {0x11150, 0x11172, prOLetter}, // Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA - {0x11173, 0x11173, prExtend}, // Mn MAHAJANI SIGN NUKTA - {0x11176, 0x11176, prOLetter}, // Lo MAHAJANI LIGATURE SHRI - {0x11180, 0x11181, prExtend}, // Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA - {0x11182, 0x11182, prExtend}, // Mc SHARADA SIGN VISARGA - {0x11183, 0x111B2, prOLetter}, // Lo [48] SHARADA LETTER A..SHARADA LETTER HA - {0x111B3, 0x111B5, prExtend}, // Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II - {0x111B6, 0x111BE, prExtend}, // Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O - {0x111BF, 0x111C0, prExtend}, // Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA - {0x111C1, 0x111C4, prOLetter}, // Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM - {0x111C5, 0x111C6, prSTerm}, // Po [2] SHARADA DANDA..SHARADA DOUBLE DANDA - {0x111C9, 0x111CC, prExtend}, // Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK - {0x111CD, 0x111CD, prSTerm}, // Po SHARADA SUTRA MARK - {0x111CE, 0x111CE, prExtend}, // Mc SHARADA VOWEL SIGN PRISHTHAMATRA E - {0x111CF, 0x111CF, prExtend}, // Mn SHARADA SIGN INVERTED CANDRABINDU - {0x111D0, 0x111D9, prNumeric}, // Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE - {0x111DA, 0x111DA, prOLetter}, // Lo SHARADA EKAM - {0x111DC, 0x111DC, prOLetter}, // Lo SHARADA HEADSTROKE - {0x111DE, 0x111DF, prSTerm}, // Po [2] SHARADA SECTION MARK-1..SHARADA SECTION MARK-2 - {0x11200, 0x11211, prOLetter}, // Lo [18] KHOJKI LETTER A..KHOJKI LETTER JJA - {0x11213, 0x1122B, prOLetter}, // Lo [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA - {0x1122C, 0x1122E, prExtend}, // Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II - {0x1122F, 0x11231, prExtend}, // Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI - {0x11232, 0x11233, prExtend}, // Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU - {0x11234, 0x11234, prExtend}, // Mn KHOJKI SIGN ANUSVARA - {0x11235, 0x11235, prExtend}, // Mc KHOJKI SIGN VIRAMA - {0x11236, 0x11237, prExtend}, // Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA - {0x11238, 0x11239, prSTerm}, // Po [2] KHOJKI DANDA..KHOJKI DOUBLE DANDA - {0x1123B, 0x1123C, prSTerm}, // Po [2] KHOJKI SECTION MARK..KHOJKI DOUBLE SECTION MARK - {0x1123E, 0x1123E, prExtend}, // Mn KHOJKI SIGN SUKUN - {0x1123F, 0x11240, prOLetter}, // Lo [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I - {0x11241, 0x11241, prExtend}, // Mn KHOJKI VOWEL SIGN VOCALIC R - {0x11280, 0x11286, prOLetter}, // Lo [7] MULTANI LETTER A..MULTANI LETTER GA - {0x11288, 0x11288, prOLetter}, // Lo MULTANI LETTER GHA - {0x1128A, 0x1128D, prOLetter}, // Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA - {0x1128F, 0x1129D, prOLetter}, // Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA - {0x1129F, 0x112A8, prOLetter}, // Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA - {0x112A9, 0x112A9, prSTerm}, // Po MULTANI SECTION MARK - {0x112B0, 0x112DE, prOLetter}, // Lo [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA - {0x112DF, 0x112DF, prExtend}, // Mn KHUDAWADI SIGN ANUSVARA - {0x112E0, 0x112E2, prExtend}, // Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II - {0x112E3, 0x112EA, prExtend}, // Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA - {0x112F0, 0x112F9, prNumeric}, // Nd [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE - {0x11300, 0x11301, prExtend}, // Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU - {0x11302, 0x11303, prExtend}, // Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA - {0x11305, 0x1130C, prOLetter}, // Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L - {0x1130F, 0x11310, prOLetter}, // Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI - {0x11313, 0x11328, prOLetter}, // Lo [22] GRANTHA LETTER OO..GRANTHA LETTER NA - {0x1132A, 0x11330, prOLetter}, // Lo [7] GRANTHA LETTER PA..GRANTHA LETTER RA - {0x11332, 0x11333, prOLetter}, // Lo [2] GRANTHA LETTER LA..GRANTHA LETTER LLA - {0x11335, 0x11339, prOLetter}, // Lo [5] GRANTHA LETTER VA..GRANTHA LETTER HA - {0x1133B, 0x1133C, prExtend}, // Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA - {0x1133D, 0x1133D, prOLetter}, // Lo GRANTHA SIGN AVAGRAHA - {0x1133E, 0x1133F, prExtend}, // Mc [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I - {0x11340, 0x11340, prExtend}, // Mn GRANTHA VOWEL SIGN II - {0x11341, 0x11344, prExtend}, // Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR - {0x11347, 0x11348, prExtend}, // Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI - {0x1134B, 0x1134D, prExtend}, // Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA - {0x11350, 0x11350, prOLetter}, // Lo GRANTHA OM - {0x11357, 0x11357, prExtend}, // Mc GRANTHA AU LENGTH MARK - {0x1135D, 0x11361, prOLetter}, // Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL - {0x11362, 0x11363, prExtend}, // Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL - {0x11366, 0x1136C, prExtend}, // Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX - {0x11370, 0x11374, prExtend}, // Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA - {0x11400, 0x11434, prOLetter}, // Lo [53] NEWA LETTER A..NEWA LETTER HA - {0x11435, 0x11437, prExtend}, // Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II - {0x11438, 0x1143F, prExtend}, // Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI - {0x11440, 0x11441, prExtend}, // Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU - {0x11442, 0x11444, prExtend}, // Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA - {0x11445, 0x11445, prExtend}, // Mc NEWA SIGN VISARGA - {0x11446, 0x11446, prExtend}, // Mn NEWA SIGN NUKTA - {0x11447, 0x1144A, prOLetter}, // Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI - {0x1144B, 0x1144C, prSTerm}, // Po [2] NEWA DANDA..NEWA DOUBLE DANDA - {0x11450, 0x11459, prNumeric}, // Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE - {0x1145E, 0x1145E, prExtend}, // Mn NEWA SANDHI MARK - {0x1145F, 0x11461, prOLetter}, // Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA - {0x11480, 0x114AF, prOLetter}, // Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA - {0x114B0, 0x114B2, prExtend}, // Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II - {0x114B3, 0x114B8, prExtend}, // Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL - {0x114B9, 0x114B9, prExtend}, // Mc TIRHUTA VOWEL SIGN E - {0x114BA, 0x114BA, prExtend}, // Mn TIRHUTA VOWEL SIGN SHORT E - {0x114BB, 0x114BE, prExtend}, // Mc [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU - {0x114BF, 0x114C0, prExtend}, // Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA - {0x114C1, 0x114C1, prExtend}, // Mc TIRHUTA SIGN VISARGA - {0x114C2, 0x114C3, prExtend}, // Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA - {0x114C4, 0x114C5, prOLetter}, // Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG - {0x114C7, 0x114C7, prOLetter}, // Lo TIRHUTA OM - {0x114D0, 0x114D9, prNumeric}, // Nd [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE - {0x11580, 0x115AE, prOLetter}, // Lo [47] SIDDHAM LETTER A..SIDDHAM LETTER HA - {0x115AF, 0x115B1, prExtend}, // Mc [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II - {0x115B2, 0x115B5, prExtend}, // Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR - {0x115B8, 0x115BB, prExtend}, // Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU - {0x115BC, 0x115BD, prExtend}, // Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA - {0x115BE, 0x115BE, prExtend}, // Mc SIDDHAM SIGN VISARGA - {0x115BF, 0x115C0, prExtend}, // Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA - {0x115C2, 0x115C3, prSTerm}, // Po [2] SIDDHAM DANDA..SIDDHAM DOUBLE DANDA - {0x115C9, 0x115D7, prSTerm}, // Po [15] SIDDHAM END OF TEXT MARK..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES - {0x115D8, 0x115DB, prOLetter}, // Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U - {0x115DC, 0x115DD, prExtend}, // Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU - {0x11600, 0x1162F, prOLetter}, // Lo [48] MODI LETTER A..MODI LETTER LLA - {0x11630, 0x11632, prExtend}, // Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II - {0x11633, 0x1163A, prExtend}, // Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI - {0x1163B, 0x1163C, prExtend}, // Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU - {0x1163D, 0x1163D, prExtend}, // Mn MODI SIGN ANUSVARA - {0x1163E, 0x1163E, prExtend}, // Mc MODI SIGN VISARGA - {0x1163F, 0x11640, prExtend}, // Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA - {0x11641, 0x11642, prSTerm}, // Po [2] MODI DANDA..MODI DOUBLE DANDA - {0x11644, 0x11644, prOLetter}, // Lo MODI SIGN HUVA - {0x11650, 0x11659, prNumeric}, // Nd [10] MODI DIGIT ZERO..MODI DIGIT NINE - {0x11680, 0x116AA, prOLetter}, // Lo [43] TAKRI LETTER A..TAKRI LETTER RRA - {0x116AB, 0x116AB, prExtend}, // Mn TAKRI SIGN ANUSVARA - {0x116AC, 0x116AC, prExtend}, // Mc TAKRI SIGN VISARGA - {0x116AD, 0x116AD, prExtend}, // Mn TAKRI VOWEL SIGN AA - {0x116AE, 0x116AF, prExtend}, // Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II - {0x116B0, 0x116B5, prExtend}, // Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU - {0x116B6, 0x116B6, prExtend}, // Mc TAKRI SIGN VIRAMA - {0x116B7, 0x116B7, prExtend}, // Mn TAKRI SIGN NUKTA - {0x116B8, 0x116B8, prOLetter}, // Lo TAKRI LETTER ARCHAIC KHA - {0x116C0, 0x116C9, prNumeric}, // Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE - {0x11700, 0x1171A, prOLetter}, // Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA - {0x1171D, 0x1171F, prExtend}, // Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA - {0x11720, 0x11721, prExtend}, // Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA - {0x11722, 0x11725, prExtend}, // Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU - {0x11726, 0x11726, prExtend}, // Mc AHOM VOWEL SIGN E - {0x11727, 0x1172B, prExtend}, // Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER - {0x11730, 0x11739, prNumeric}, // Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE - {0x1173C, 0x1173E, prSTerm}, // Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI - {0x11740, 0x11746, prOLetter}, // Lo [7] AHOM LETTER CA..AHOM LETTER LLA - {0x11800, 0x1182B, prOLetter}, // Lo [44] DOGRA LETTER A..DOGRA LETTER RRA - {0x1182C, 0x1182E, prExtend}, // Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II - {0x1182F, 0x11837, prExtend}, // Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA - {0x11838, 0x11838, prExtend}, // Mc DOGRA SIGN VISARGA - {0x11839, 0x1183A, prExtend}, // Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA - {0x118A0, 0x118BF, prUpper}, // L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO - {0x118C0, 0x118DF, prLower}, // L& [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO - {0x118E0, 0x118E9, prNumeric}, // Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE - {0x118FF, 0x11906, prOLetter}, // Lo [8] WARANG CITI OM..DIVES AKURU LETTER E - {0x11909, 0x11909, prOLetter}, // Lo DIVES AKURU LETTER O - {0x1190C, 0x11913, prOLetter}, // Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA - {0x11915, 0x11916, prOLetter}, // Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA - {0x11918, 0x1192F, prOLetter}, // Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA - {0x11930, 0x11935, prExtend}, // Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E - {0x11937, 0x11938, prExtend}, // Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O - {0x1193B, 0x1193C, prExtend}, // Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU - {0x1193D, 0x1193D, prExtend}, // Mc DIVES AKURU SIGN HALANTA - {0x1193E, 0x1193E, prExtend}, // Mn DIVES AKURU VIRAMA - {0x1193F, 0x1193F, prOLetter}, // Lo DIVES AKURU PREFIXED NASAL SIGN - {0x11940, 0x11940, prExtend}, // Mc DIVES AKURU MEDIAL YA - {0x11941, 0x11941, prOLetter}, // Lo DIVES AKURU INITIAL RA - {0x11942, 0x11942, prExtend}, // Mc DIVES AKURU MEDIAL RA - {0x11943, 0x11943, prExtend}, // Mn DIVES AKURU SIGN NUKTA - {0x11944, 0x11944, prSTerm}, // Po DIVES AKURU DOUBLE DANDA - {0x11946, 0x11946, prSTerm}, // Po DIVES AKURU END OF TEXT MARK - {0x11950, 0x11959, prNumeric}, // Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE - {0x119A0, 0x119A7, prOLetter}, // Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR - {0x119AA, 0x119D0, prOLetter}, // Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA - {0x119D1, 0x119D3, prExtend}, // Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II - {0x119D4, 0x119D7, prExtend}, // Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR - {0x119DA, 0x119DB, prExtend}, // Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI - {0x119DC, 0x119DF, prExtend}, // Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA - {0x119E0, 0x119E0, prExtend}, // Mn NANDINAGARI SIGN VIRAMA - {0x119E1, 0x119E1, prOLetter}, // Lo NANDINAGARI SIGN AVAGRAHA - {0x119E3, 0x119E3, prOLetter}, // Lo NANDINAGARI HEADSTROKE - {0x119E4, 0x119E4, prExtend}, // Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E - {0x11A00, 0x11A00, prOLetter}, // Lo ZANABAZAR SQUARE LETTER A - {0x11A01, 0x11A0A, prExtend}, // Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK - {0x11A0B, 0x11A32, prOLetter}, // Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA - {0x11A33, 0x11A38, prExtend}, // Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA - {0x11A39, 0x11A39, prExtend}, // Mc ZANABAZAR SQUARE SIGN VISARGA - {0x11A3A, 0x11A3A, prOLetter}, // Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA - {0x11A3B, 0x11A3E, prExtend}, // Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA - {0x11A42, 0x11A43, prSTerm}, // Po [2] ZANABAZAR SQUARE MARK SHAD..ZANABAZAR SQUARE MARK DOUBLE SHAD - {0x11A47, 0x11A47, prExtend}, // Mn ZANABAZAR SQUARE SUBJOINER - {0x11A50, 0x11A50, prOLetter}, // Lo SOYOMBO LETTER A - {0x11A51, 0x11A56, prExtend}, // Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE - {0x11A57, 0x11A58, prExtend}, // Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU - {0x11A59, 0x11A5B, prExtend}, // Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK - {0x11A5C, 0x11A89, prOLetter}, // Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA - {0x11A8A, 0x11A96, prExtend}, // Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA - {0x11A97, 0x11A97, prExtend}, // Mc SOYOMBO SIGN VISARGA - {0x11A98, 0x11A99, prExtend}, // Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER - {0x11A9B, 0x11A9C, prSTerm}, // Po [2] SOYOMBO MARK SHAD..SOYOMBO MARK DOUBLE SHAD - {0x11A9D, 0x11A9D, prOLetter}, // Lo SOYOMBO MARK PLUTA - {0x11AB0, 0x11AF8, prOLetter}, // Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL - {0x11C00, 0x11C08, prOLetter}, // Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L - {0x11C0A, 0x11C2E, prOLetter}, // Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA - {0x11C2F, 0x11C2F, prExtend}, // Mc BHAIKSUKI VOWEL SIGN AA - {0x11C30, 0x11C36, prExtend}, // Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L - {0x11C38, 0x11C3D, prExtend}, // Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA - {0x11C3E, 0x11C3E, prExtend}, // Mc BHAIKSUKI SIGN VISARGA - {0x11C3F, 0x11C3F, prExtend}, // Mn BHAIKSUKI SIGN VIRAMA - {0x11C40, 0x11C40, prOLetter}, // Lo BHAIKSUKI SIGN AVAGRAHA - {0x11C41, 0x11C42, prSTerm}, // Po [2] BHAIKSUKI DANDA..BHAIKSUKI DOUBLE DANDA - {0x11C50, 0x11C59, prNumeric}, // Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE - {0x11C72, 0x11C8F, prOLetter}, // Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A - {0x11C92, 0x11CA7, prExtend}, // Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA - {0x11CA9, 0x11CA9, prExtend}, // Mc MARCHEN SUBJOINED LETTER YA - {0x11CAA, 0x11CB0, prExtend}, // Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA - {0x11CB1, 0x11CB1, prExtend}, // Mc MARCHEN VOWEL SIGN I - {0x11CB2, 0x11CB3, prExtend}, // Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E - {0x11CB4, 0x11CB4, prExtend}, // Mc MARCHEN VOWEL SIGN O - {0x11CB5, 0x11CB6, prExtend}, // Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU - {0x11D00, 0x11D06, prOLetter}, // Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E - {0x11D08, 0x11D09, prOLetter}, // Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O - {0x11D0B, 0x11D30, prOLetter}, // Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA - {0x11D31, 0x11D36, prExtend}, // Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R - {0x11D3A, 0x11D3A, prExtend}, // Mn MASARAM GONDI VOWEL SIGN E - {0x11D3C, 0x11D3D, prExtend}, // Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O - {0x11D3F, 0x11D45, prExtend}, // Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA - {0x11D46, 0x11D46, prOLetter}, // Lo MASARAM GONDI REPHA - {0x11D47, 0x11D47, prExtend}, // Mn MASARAM GONDI RA-KARA - {0x11D50, 0x11D59, prNumeric}, // Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE - {0x11D60, 0x11D65, prOLetter}, // Lo [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU - {0x11D67, 0x11D68, prOLetter}, // Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI - {0x11D6A, 0x11D89, prOLetter}, // Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA - {0x11D8A, 0x11D8E, prExtend}, // Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU - {0x11D90, 0x11D91, prExtend}, // Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI - {0x11D93, 0x11D94, prExtend}, // Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU - {0x11D95, 0x11D95, prExtend}, // Mn GUNJALA GONDI SIGN ANUSVARA - {0x11D96, 0x11D96, prExtend}, // Mc GUNJALA GONDI SIGN VISARGA - {0x11D97, 0x11D97, prExtend}, // Mn GUNJALA GONDI VIRAMA - {0x11D98, 0x11D98, prOLetter}, // Lo GUNJALA GONDI OM - {0x11DA0, 0x11DA9, prNumeric}, // Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE - {0x11EE0, 0x11EF2, prOLetter}, // Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA - {0x11EF3, 0x11EF4, prExtend}, // Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U - {0x11EF5, 0x11EF6, prExtend}, // Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O - {0x11EF7, 0x11EF8, prSTerm}, // Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION - {0x11F00, 0x11F01, prExtend}, // Mn [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA - {0x11F02, 0x11F02, prOLetter}, // Lo KAWI SIGN REPHA - {0x11F03, 0x11F03, prExtend}, // Mc KAWI SIGN VISARGA - {0x11F04, 0x11F10, prOLetter}, // Lo [13] KAWI LETTER A..KAWI LETTER O - {0x11F12, 0x11F33, prOLetter}, // Lo [34] KAWI LETTER KA..KAWI LETTER JNYA - {0x11F34, 0x11F35, prExtend}, // Mc [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA - {0x11F36, 0x11F3A, prExtend}, // Mn [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R - {0x11F3E, 0x11F3F, prExtend}, // Mc [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI - {0x11F40, 0x11F40, prExtend}, // Mn KAWI VOWEL SIGN EU - {0x11F41, 0x11F41, prExtend}, // Mc KAWI SIGN KILLER - {0x11F42, 0x11F42, prExtend}, // Mn KAWI CONJOINER - {0x11F43, 0x11F44, prSTerm}, // Po [2] KAWI DANDA..KAWI DOUBLE DANDA - {0x11F50, 0x11F59, prNumeric}, // Nd [10] KAWI DIGIT ZERO..KAWI DIGIT NINE - {0x11FB0, 0x11FB0, prOLetter}, // Lo LISU LETTER YHA - {0x12000, 0x12399, prOLetter}, // Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U - {0x12400, 0x1246E, prOLetter}, // Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM - {0x12480, 0x12543, prOLetter}, // Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU - {0x12F90, 0x12FF0, prOLetter}, // Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 - {0x13000, 0x1342F, prOLetter}, // Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D - {0x13430, 0x1343F, prFormat}, // Cf [16] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE - {0x13440, 0x13440, prExtend}, // Mn EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY - {0x13441, 0x13446, prOLetter}, // Lo [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN - {0x13447, 0x13455, prExtend}, // Mn [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED - {0x14400, 0x14646, prOLetter}, // Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 - {0x16800, 0x16A38, prOLetter}, // Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ - {0x16A40, 0x16A5E, prOLetter}, // Lo [31] MRO LETTER TA..MRO LETTER TEK - {0x16A60, 0x16A69, prNumeric}, // Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE - {0x16A6E, 0x16A6F, prSTerm}, // Po [2] MRO DANDA..MRO DOUBLE DANDA - {0x16A70, 0x16ABE, prOLetter}, // Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA - {0x16AC0, 0x16AC9, prNumeric}, // Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE - {0x16AD0, 0x16AED, prOLetter}, // Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I - {0x16AF0, 0x16AF4, prExtend}, // Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE - {0x16AF5, 0x16AF5, prSTerm}, // Po BASSA VAH FULL STOP - {0x16B00, 0x16B2F, prOLetter}, // Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU - {0x16B30, 0x16B36, prExtend}, // Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM - {0x16B37, 0x16B38, prSTerm}, // Po [2] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS TSHAB CEEB - {0x16B40, 0x16B43, prOLetter}, // Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM - {0x16B44, 0x16B44, prSTerm}, // Po PAHAWH HMONG SIGN XAUS - {0x16B50, 0x16B59, prNumeric}, // Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE - {0x16B63, 0x16B77, prOLetter}, // Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS - {0x16B7D, 0x16B8F, prOLetter}, // Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ - {0x16E40, 0x16E5F, prUpper}, // L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y - {0x16E60, 0x16E7F, prLower}, // L& [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y - {0x16E98, 0x16E98, prSTerm}, // Po MEDEFAIDRIN FULL STOP - {0x16F00, 0x16F4A, prOLetter}, // Lo [75] MIAO LETTER PA..MIAO LETTER RTE - {0x16F4F, 0x16F4F, prExtend}, // Mn MIAO SIGN CONSONANT MODIFIER BAR - {0x16F50, 0x16F50, prOLetter}, // Lo MIAO LETTER NASALIZATION - {0x16F51, 0x16F87, prExtend}, // Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI - {0x16F8F, 0x16F92, prExtend}, // Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW - {0x16F93, 0x16F9F, prOLetter}, // Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 - {0x16FE0, 0x16FE1, prOLetter}, // Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK - {0x16FE3, 0x16FE3, prOLetter}, // Lm OLD CHINESE ITERATION MARK - {0x16FE4, 0x16FE4, prExtend}, // Mn KHITAN SMALL SCRIPT FILLER - {0x16FF0, 0x16FF1, prExtend}, // Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY - {0x17000, 0x187F7, prOLetter}, // Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 - {0x18800, 0x18CD5, prOLetter}, // Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 - {0x18D00, 0x18D08, prOLetter}, // Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 - {0x1AFF0, 0x1AFF3, prOLetter}, // Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 - {0x1AFF5, 0x1AFFB, prOLetter}, // Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 - {0x1AFFD, 0x1AFFE, prOLetter}, // Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 - {0x1B000, 0x1B122, prOLetter}, // Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU - {0x1B132, 0x1B132, prOLetter}, // Lo HIRAGANA LETTER SMALL KO - {0x1B150, 0x1B152, prOLetter}, // Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO - {0x1B155, 0x1B155, prOLetter}, // Lo KATAKANA LETTER SMALL KO - {0x1B164, 0x1B167, prOLetter}, // Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N - {0x1B170, 0x1B2FB, prOLetter}, // Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB - {0x1BC00, 0x1BC6A, prOLetter}, // Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M - {0x1BC70, 0x1BC7C, prOLetter}, // Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK - {0x1BC80, 0x1BC88, prOLetter}, // Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL - {0x1BC90, 0x1BC99, prOLetter}, // Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW - {0x1BC9D, 0x1BC9E, prExtend}, // Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK - {0x1BC9F, 0x1BC9F, prSTerm}, // Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP - {0x1BCA0, 0x1BCA3, prFormat}, // Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP - {0x1CF00, 0x1CF2D, prExtend}, // Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT - {0x1CF30, 0x1CF46, prExtend}, // Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG - {0x1D165, 0x1D166, prExtend}, // Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM - {0x1D167, 0x1D169, prExtend}, // Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 - {0x1D16D, 0x1D172, prExtend}, // Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 - {0x1D173, 0x1D17A, prFormat}, // Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE - {0x1D17B, 0x1D182, prExtend}, // Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE - {0x1D185, 0x1D18B, prExtend}, // Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE - {0x1D1AA, 0x1D1AD, prExtend}, // Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO - {0x1D242, 0x1D244, prExtend}, // Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME - {0x1D400, 0x1D419, prUpper}, // L& [26] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL BOLD CAPITAL Z - {0x1D41A, 0x1D433, prLower}, // L& [26] MATHEMATICAL BOLD SMALL A..MATHEMATICAL BOLD SMALL Z - {0x1D434, 0x1D44D, prUpper}, // L& [26] MATHEMATICAL ITALIC CAPITAL A..MATHEMATICAL ITALIC CAPITAL Z - {0x1D44E, 0x1D454, prLower}, // L& [7] MATHEMATICAL ITALIC SMALL A..MATHEMATICAL ITALIC SMALL G - {0x1D456, 0x1D467, prLower}, // L& [18] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL ITALIC SMALL Z - {0x1D468, 0x1D481, prUpper}, // L& [26] MATHEMATICAL BOLD ITALIC CAPITAL A..MATHEMATICAL BOLD ITALIC CAPITAL Z - {0x1D482, 0x1D49B, prLower}, // L& [26] MATHEMATICAL BOLD ITALIC SMALL A..MATHEMATICAL BOLD ITALIC SMALL Z - {0x1D49C, 0x1D49C, prUpper}, // L& MATHEMATICAL SCRIPT CAPITAL A - {0x1D49E, 0x1D49F, prUpper}, // L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D - {0x1D4A2, 0x1D4A2, prUpper}, // L& MATHEMATICAL SCRIPT CAPITAL G - {0x1D4A5, 0x1D4A6, prUpper}, // L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K - {0x1D4A9, 0x1D4AC, prUpper}, // L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q - {0x1D4AE, 0x1D4B5, prUpper}, // L& [8] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT CAPITAL Z - {0x1D4B6, 0x1D4B9, prLower}, // L& [4] MATHEMATICAL SCRIPT SMALL A..MATHEMATICAL SCRIPT SMALL D - {0x1D4BB, 0x1D4BB, prLower}, // L& MATHEMATICAL SCRIPT SMALL F - {0x1D4BD, 0x1D4C3, prLower}, // L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N - {0x1D4C5, 0x1D4CF, prLower}, // L& [11] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL SCRIPT SMALL Z - {0x1D4D0, 0x1D4E9, prUpper}, // L& [26] MATHEMATICAL BOLD SCRIPT CAPITAL A..MATHEMATICAL BOLD SCRIPT CAPITAL Z - {0x1D4EA, 0x1D503, prLower}, // L& [26] MATHEMATICAL BOLD SCRIPT SMALL A..MATHEMATICAL BOLD SCRIPT SMALL Z - {0x1D504, 0x1D505, prUpper}, // L& [2] MATHEMATICAL FRAKTUR CAPITAL A..MATHEMATICAL FRAKTUR CAPITAL B - {0x1D507, 0x1D50A, prUpper}, // L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G - {0x1D50D, 0x1D514, prUpper}, // L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q - {0x1D516, 0x1D51C, prUpper}, // L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y - {0x1D51E, 0x1D537, prLower}, // L& [26] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL FRAKTUR SMALL Z - {0x1D538, 0x1D539, prUpper}, // L& [2] MATHEMATICAL DOUBLE-STRUCK CAPITAL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B - {0x1D53B, 0x1D53E, prUpper}, // L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G - {0x1D540, 0x1D544, prUpper}, // L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M - {0x1D546, 0x1D546, prUpper}, // L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O - {0x1D54A, 0x1D550, prUpper}, // L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y - {0x1D552, 0x1D56B, prLower}, // L& [26] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL DOUBLE-STRUCK SMALL Z - {0x1D56C, 0x1D585, prUpper}, // L& [26] MATHEMATICAL BOLD FRAKTUR CAPITAL A..MATHEMATICAL BOLD FRAKTUR CAPITAL Z - {0x1D586, 0x1D59F, prLower}, // L& [26] MATHEMATICAL BOLD FRAKTUR SMALL A..MATHEMATICAL BOLD FRAKTUR SMALL Z - {0x1D5A0, 0x1D5B9, prUpper}, // L& [26] MATHEMATICAL SANS-SERIF CAPITAL A..MATHEMATICAL SANS-SERIF CAPITAL Z - {0x1D5BA, 0x1D5D3, prLower}, // L& [26] MATHEMATICAL SANS-SERIF SMALL A..MATHEMATICAL SANS-SERIF SMALL Z - {0x1D5D4, 0x1D5ED, prUpper}, // L& [26] MATHEMATICAL SANS-SERIF BOLD CAPITAL A..MATHEMATICAL SANS-SERIF BOLD CAPITAL Z - {0x1D5EE, 0x1D607, prLower}, // L& [26] MATHEMATICAL SANS-SERIF BOLD SMALL A..MATHEMATICAL SANS-SERIF BOLD SMALL Z - {0x1D608, 0x1D621, prUpper}, // L& [26] MATHEMATICAL SANS-SERIF ITALIC CAPITAL A..MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z - {0x1D622, 0x1D63B, prLower}, // L& [26] MATHEMATICAL SANS-SERIF ITALIC SMALL A..MATHEMATICAL SANS-SERIF ITALIC SMALL Z - {0x1D63C, 0x1D655, prUpper}, // L& [26] MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z - {0x1D656, 0x1D66F, prLower}, // L& [26] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z - {0x1D670, 0x1D689, prUpper}, // L& [26] MATHEMATICAL MONOSPACE CAPITAL A..MATHEMATICAL MONOSPACE CAPITAL Z - {0x1D68A, 0x1D6A5, prLower}, // L& [28] MATHEMATICAL MONOSPACE SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J - {0x1D6A8, 0x1D6C0, prUpper}, // L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA - {0x1D6C2, 0x1D6DA, prLower}, // L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA - {0x1D6DC, 0x1D6E1, prLower}, // L& [6] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL BOLD PI SYMBOL - {0x1D6E2, 0x1D6FA, prUpper}, // L& [25] MATHEMATICAL ITALIC CAPITAL ALPHA..MATHEMATICAL ITALIC CAPITAL OMEGA - {0x1D6FC, 0x1D714, prLower}, // L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA - {0x1D716, 0x1D71B, prLower}, // L& [6] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL ITALIC PI SYMBOL - {0x1D71C, 0x1D734, prUpper}, // L& [25] MATHEMATICAL BOLD ITALIC CAPITAL ALPHA..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA - {0x1D736, 0x1D74E, prLower}, // L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA - {0x1D750, 0x1D755, prLower}, // L& [6] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC PI SYMBOL - {0x1D756, 0x1D76E, prUpper}, // L& [25] MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA - {0x1D770, 0x1D788, prLower}, // L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA - {0x1D78A, 0x1D78F, prLower}, // L& [6] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD PI SYMBOL - {0x1D790, 0x1D7A8, prUpper}, // L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA - {0x1D7AA, 0x1D7C2, prLower}, // L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA - {0x1D7C4, 0x1D7C9, prLower}, // L& [6] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL - {0x1D7CA, 0x1D7CA, prUpper}, // L& MATHEMATICAL BOLD CAPITAL DIGAMMA - {0x1D7CB, 0x1D7CB, prLower}, // L& MATHEMATICAL BOLD SMALL DIGAMMA - {0x1D7CE, 0x1D7FF, prNumeric}, // Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE - {0x1DA00, 0x1DA36, prExtend}, // Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN - {0x1DA3B, 0x1DA6C, prExtend}, // Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT - {0x1DA75, 0x1DA75, prExtend}, // Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS - {0x1DA84, 0x1DA84, prExtend}, // Mn SIGNWRITING LOCATION HEAD NECK - {0x1DA88, 0x1DA88, prSTerm}, // Po SIGNWRITING FULL STOP - {0x1DA9B, 0x1DA9F, prExtend}, // Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 - {0x1DAA1, 0x1DAAF, prExtend}, // Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 - {0x1DF00, 0x1DF09, prLower}, // L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK - {0x1DF0A, 0x1DF0A, prOLetter}, // Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK - {0x1DF0B, 0x1DF1E, prLower}, // L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL - {0x1DF25, 0x1DF2A, prLower}, // L& [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK - {0x1E000, 0x1E006, prExtend}, // Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE - {0x1E008, 0x1E018, prExtend}, // Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU - {0x1E01B, 0x1E021, prExtend}, // Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI - {0x1E023, 0x1E024, prExtend}, // Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS - {0x1E026, 0x1E02A, prExtend}, // Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA - {0x1E030, 0x1E06D, prLower}, // Lm [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE - {0x1E08F, 0x1E08F, prExtend}, // Mn COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - {0x1E100, 0x1E12C, prOLetter}, // Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W - {0x1E130, 0x1E136, prExtend}, // Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D - {0x1E137, 0x1E13D, prOLetter}, // Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER - {0x1E140, 0x1E149, prNumeric}, // Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE - {0x1E14E, 0x1E14E, prOLetter}, // Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ - {0x1E290, 0x1E2AD, prOLetter}, // Lo [30] TOTO LETTER PA..TOTO LETTER A - {0x1E2AE, 0x1E2AE, prExtend}, // Mn TOTO SIGN RISING TONE - {0x1E2C0, 0x1E2EB, prOLetter}, // Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH - {0x1E2EC, 0x1E2EF, prExtend}, // Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI - {0x1E2F0, 0x1E2F9, prNumeric}, // Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE - {0x1E4D0, 0x1E4EA, prOLetter}, // Lo [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL - {0x1E4EB, 0x1E4EB, prOLetter}, // Lm NAG MUNDARI SIGN OJOD - {0x1E4EC, 0x1E4EF, prExtend}, // Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH - {0x1E4F0, 0x1E4F9, prNumeric}, // Nd [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE - {0x1E7E0, 0x1E7E6, prOLetter}, // Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO - {0x1E7E8, 0x1E7EB, prOLetter}, // Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE - {0x1E7ED, 0x1E7EE, prOLetter}, // Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE - {0x1E7F0, 0x1E7FE, prOLetter}, // Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE - {0x1E800, 0x1E8C4, prOLetter}, // Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON - {0x1E8D0, 0x1E8D6, prExtend}, // Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS - {0x1E900, 0x1E921, prUpper}, // L& [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA - {0x1E922, 0x1E943, prLower}, // L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA - {0x1E944, 0x1E94A, prExtend}, // Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA - {0x1E94B, 0x1E94B, prOLetter}, // Lm ADLAM NASALIZATION MARK - {0x1E950, 0x1E959, prNumeric}, // Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE - {0x1EE00, 0x1EE03, prOLetter}, // Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL - {0x1EE05, 0x1EE1F, prOLetter}, // Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF - {0x1EE21, 0x1EE22, prOLetter}, // Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM - {0x1EE24, 0x1EE24, prOLetter}, // Lo ARABIC MATHEMATICAL INITIAL HEH - {0x1EE27, 0x1EE27, prOLetter}, // Lo ARABIC MATHEMATICAL INITIAL HAH - {0x1EE29, 0x1EE32, prOLetter}, // Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF - {0x1EE34, 0x1EE37, prOLetter}, // Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH - {0x1EE39, 0x1EE39, prOLetter}, // Lo ARABIC MATHEMATICAL INITIAL DAD - {0x1EE3B, 0x1EE3B, prOLetter}, // Lo ARABIC MATHEMATICAL INITIAL GHAIN - {0x1EE42, 0x1EE42, prOLetter}, // Lo ARABIC MATHEMATICAL TAILED JEEM - {0x1EE47, 0x1EE47, prOLetter}, // Lo ARABIC MATHEMATICAL TAILED HAH - {0x1EE49, 0x1EE49, prOLetter}, // Lo ARABIC MATHEMATICAL TAILED YEH - {0x1EE4B, 0x1EE4B, prOLetter}, // Lo ARABIC MATHEMATICAL TAILED LAM - {0x1EE4D, 0x1EE4F, prOLetter}, // Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN - {0x1EE51, 0x1EE52, prOLetter}, // Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF - {0x1EE54, 0x1EE54, prOLetter}, // Lo ARABIC MATHEMATICAL TAILED SHEEN - {0x1EE57, 0x1EE57, prOLetter}, // Lo ARABIC MATHEMATICAL TAILED KHAH - {0x1EE59, 0x1EE59, prOLetter}, // Lo ARABIC MATHEMATICAL TAILED DAD - {0x1EE5B, 0x1EE5B, prOLetter}, // Lo ARABIC MATHEMATICAL TAILED GHAIN - {0x1EE5D, 0x1EE5D, prOLetter}, // Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON - {0x1EE5F, 0x1EE5F, prOLetter}, // Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF - {0x1EE61, 0x1EE62, prOLetter}, // Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM - {0x1EE64, 0x1EE64, prOLetter}, // Lo ARABIC MATHEMATICAL STRETCHED HEH - {0x1EE67, 0x1EE6A, prOLetter}, // Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF - {0x1EE6C, 0x1EE72, prOLetter}, // Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF - {0x1EE74, 0x1EE77, prOLetter}, // Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH - {0x1EE79, 0x1EE7C, prOLetter}, // Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH - {0x1EE7E, 0x1EE7E, prOLetter}, // Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH - {0x1EE80, 0x1EE89, prOLetter}, // Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH - {0x1EE8B, 0x1EE9B, prOLetter}, // Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN - {0x1EEA1, 0x1EEA3, prOLetter}, // Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL - {0x1EEA5, 0x1EEA9, prOLetter}, // Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH - {0x1EEAB, 0x1EEBB, prOLetter}, // Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN - {0x1F130, 0x1F149, prUpper}, // So [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z - {0x1F150, 0x1F169, prUpper}, // So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z - {0x1F170, 0x1F189, prUpper}, // So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z - {0x1F676, 0x1F678, prClose}, // So [3] SANS-SERIF HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT..SANS-SERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT - {0x1FBF0, 0x1FBF9, prNumeric}, // Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE - {0x20000, 0x2A6DF, prOLetter}, // Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF - {0x2A700, 0x2B739, prOLetter}, // Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 - {0x2B740, 0x2B81D, prOLetter}, // Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D - {0x2B820, 0x2CEA1, prOLetter}, // Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 - {0x2CEB0, 0x2EBE0, prOLetter}, // Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 - {0x2F800, 0x2FA1D, prOLetter}, // Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D - {0x30000, 0x3134A, prOLetter}, // Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A - {0x31350, 0x323AF, prOLetter}, // Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF - {0xE0001, 0xE0001, prFormat}, // Cf LANGUAGE TAG - {0xE0020, 0xE007F, prExtend}, // Cf [96] TAG SPACE..CANCEL TAG - {0xE0100, 0xE01EF, prExtend}, // Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -} diff --git a/vendor/github.com/rivo/uniseg/sentencerules.go b/vendor/github.com/rivo/uniseg/sentencerules.go deleted file mode 100644 index 0b29c7bdb8..0000000000 --- a/vendor/github.com/rivo/uniseg/sentencerules.go +++ /dev/null @@ -1,276 +0,0 @@ -package uniseg - -import "unicode/utf8" - -// The states of the sentence break parser. -const ( - sbAny = iota - sbCR - sbParaSep - sbATerm - sbUpper - sbLower - sbSB7 - sbSB8Close - sbSB8Sp - sbSTerm - sbSB8aClose - sbSB8aSp -) - -// sbTransitions implements the sentence break parser's state transitions. It's -// anologous to [grTransitions], see comments there for details. -// -// Unicode version 15.0.0. -func sbTransitions(state, prop int) (newState int, sentenceBreak bool, rule int) { - switch uint64(state) | uint64(prop)<<32 { - // SB3. - case sbAny | prCR<<32: - return sbCR, false, 9990 - case sbCR | prLF<<32: - return sbParaSep, false, 30 - - // SB4. - case sbAny | prSep<<32: - return sbParaSep, false, 9990 - case sbAny | prLF<<32: - return sbParaSep, false, 9990 - case sbParaSep | prAny<<32: - return sbAny, true, 40 - case sbCR | prAny<<32: - return sbAny, true, 40 - - // SB6. - case sbAny | prATerm<<32: - return sbATerm, false, 9990 - case sbATerm | prNumeric<<32: - return sbAny, false, 60 - case sbSB7 | prNumeric<<32: - return sbAny, false, 60 // Because ATerm also appears in SB7. - - // SB7. - case sbAny | prUpper<<32: - return sbUpper, false, 9990 - case sbAny | prLower<<32: - return sbLower, false, 9990 - case sbUpper | prATerm<<32: - return sbSB7, false, 70 - case sbLower | prATerm<<32: - return sbSB7, false, 70 - case sbSB7 | prUpper<<32: - return sbUpper, false, 70 - - // SB8a. - case sbAny | prSTerm<<32: - return sbSTerm, false, 9990 - case sbATerm | prSContinue<<32: - return sbAny, false, 81 - case sbATerm | prATerm<<32: - return sbATerm, false, 81 - case sbATerm | prSTerm<<32: - return sbSTerm, false, 81 - case sbSB7 | prSContinue<<32: - return sbAny, false, 81 - case sbSB7 | prATerm<<32: - return sbATerm, false, 81 - case sbSB7 | prSTerm<<32: - return sbSTerm, false, 81 - case sbSB8Close | prSContinue<<32: - return sbAny, false, 81 - case sbSB8Close | prATerm<<32: - return sbATerm, false, 81 - case sbSB8Close | prSTerm<<32: - return sbSTerm, false, 81 - case sbSB8Sp | prSContinue<<32: - return sbAny, false, 81 - case sbSB8Sp | prATerm<<32: - return sbATerm, false, 81 - case sbSB8Sp | prSTerm<<32: - return sbSTerm, false, 81 - case sbSTerm | prSContinue<<32: - return sbAny, false, 81 - case sbSTerm | prATerm<<32: - return sbATerm, false, 81 - case sbSTerm | prSTerm<<32: - return sbSTerm, false, 81 - case sbSB8aClose | prSContinue<<32: - return sbAny, false, 81 - case sbSB8aClose | prATerm<<32: - return sbATerm, false, 81 - case sbSB8aClose | prSTerm<<32: - return sbSTerm, false, 81 - case sbSB8aSp | prSContinue<<32: - return sbAny, false, 81 - case sbSB8aSp | prATerm<<32: - return sbATerm, false, 81 - case sbSB8aSp | prSTerm<<32: - return sbSTerm, false, 81 - - // SB9. - case sbATerm | prClose<<32: - return sbSB8Close, false, 90 - case sbSB7 | prClose<<32: - return sbSB8Close, false, 90 - case sbSB8Close | prClose<<32: - return sbSB8Close, false, 90 - case sbATerm | prSp<<32: - return sbSB8Sp, false, 90 - case sbSB7 | prSp<<32: - return sbSB8Sp, false, 90 - case sbSB8Close | prSp<<32: - return sbSB8Sp, false, 90 - case sbSTerm | prClose<<32: - return sbSB8aClose, false, 90 - case sbSB8aClose | prClose<<32: - return sbSB8aClose, false, 90 - case sbSTerm | prSp<<32: - return sbSB8aSp, false, 90 - case sbSB8aClose | prSp<<32: - return sbSB8aSp, false, 90 - case sbATerm | prSep<<32: - return sbParaSep, false, 90 - case sbATerm | prCR<<32: - return sbParaSep, false, 90 - case sbATerm | prLF<<32: - return sbParaSep, false, 90 - case sbSB7 | prSep<<32: - return sbParaSep, false, 90 - case sbSB7 | prCR<<32: - return sbParaSep, false, 90 - case sbSB7 | prLF<<32: - return sbParaSep, false, 90 - case sbSB8Close | prSep<<32: - return sbParaSep, false, 90 - case sbSB8Close | prCR<<32: - return sbParaSep, false, 90 - case sbSB8Close | prLF<<32: - return sbParaSep, false, 90 - case sbSTerm | prSep<<32: - return sbParaSep, false, 90 - case sbSTerm | prCR<<32: - return sbParaSep, false, 90 - case sbSTerm | prLF<<32: - return sbParaSep, false, 90 - case sbSB8aClose | prSep<<32: - return sbParaSep, false, 90 - case sbSB8aClose | prCR<<32: - return sbParaSep, false, 90 - case sbSB8aClose | prLF<<32: - return sbParaSep, false, 90 - - // SB10. - case sbSB8Sp | prSp<<32: - return sbSB8Sp, false, 100 - case sbSB8aSp | prSp<<32: - return sbSB8aSp, false, 100 - case sbSB8Sp | prSep<<32: - return sbParaSep, false, 100 - case sbSB8Sp | prCR<<32: - return sbParaSep, false, 100 - case sbSB8Sp | prLF<<32: - return sbParaSep, false, 100 - - // SB11. - case sbATerm | prAny<<32: - return sbAny, true, 110 - case sbSB7 | prAny<<32: - return sbAny, true, 110 - case sbSB8Close | prAny<<32: - return sbAny, true, 110 - case sbSB8Sp | prAny<<32: - return sbAny, true, 110 - case sbSTerm | prAny<<32: - return sbAny, true, 110 - case sbSB8aClose | prAny<<32: - return sbAny, true, 110 - case sbSB8aSp | prAny<<32: - return sbAny, true, 110 - // We'll always break after ParaSep due to SB4. - - default: - return -1, false, -1 - } -} - -// transitionSentenceBreakState determines the new state of the sentence break -// parser given the current state and the next code point. It also returns -// whether a sentence boundary was detected. If more than one code point is -// needed to determine the new state, the byte slice or the string starting -// after rune "r" can be used (whichever is not nil or empty) for further -// lookups. -func transitionSentenceBreakState(state int, r rune, b []byte, str string) (newState int, sentenceBreak bool) { - // Determine the property of the next character. - nextProperty := property(sentenceBreakCodePoints, r) - - // SB5 (Replacing Ignore Rules). - if nextProperty == prExtend || nextProperty == prFormat { - if state == sbParaSep || state == sbCR { - return sbAny, true // Make sure we don't apply SB5 to SB3 or SB4. - } - if state < 0 { - return sbAny, true // SB1. - } - return state, false - } - - // Find the applicable transition in the table. - var rule int - newState, sentenceBreak, rule = sbTransitions(state, nextProperty) - if newState < 0 { - // No specific transition found. Try the less specific ones. - anyPropState, anyPropProp, anyPropRule := sbTransitions(state, prAny) - anyStateState, anyStateProp, anyStateRule := sbTransitions(sbAny, nextProperty) - if anyPropState >= 0 && anyStateState >= 0 { - // Both apply. We'll use a mix (see comments for grTransitions). - newState, sentenceBreak, rule = anyStateState, anyStateProp, anyStateRule - if anyPropRule < anyStateRule { - sentenceBreak, rule = anyPropProp, anyPropRule - } - } else if anyPropState >= 0 { - // We only have a specific state. - newState, sentenceBreak, rule = anyPropState, anyPropProp, anyPropRule - // This branch will probably never be reached because okAnyState will - // always be true given the current transition map. But we keep it here - // for future modifications to the transition map where this may not be - // true anymore. - } else if anyStateState >= 0 { - // We only have a specific property. - newState, sentenceBreak, rule = anyStateState, anyStateProp, anyStateRule - } else { - // No known transition. SB999: Any × Any. - newState, sentenceBreak, rule = sbAny, false, 9990 - } - } - - // SB8. - if rule > 80 && (state == sbATerm || state == sbSB8Close || state == sbSB8Sp || state == sbSB7) { - // Check the right side of the rule. - var length int - for nextProperty != prOLetter && - nextProperty != prUpper && - nextProperty != prLower && - nextProperty != prSep && - nextProperty != prCR && - nextProperty != prLF && - nextProperty != prATerm && - nextProperty != prSTerm { - // Move on to the next rune. - if b != nil { // Byte slice version. - r, length = utf8.DecodeRune(b) - b = b[length:] - } else { // String version. - r, length = utf8.DecodeRuneInString(str) - str = str[length:] - } - if r == utf8.RuneError { - break - } - nextProperty = property(sentenceBreakCodePoints, r) - } - if nextProperty == prLower { - return sbLower, false - } - } - - return -} diff --git a/vendor/github.com/rivo/uniseg/step.go b/vendor/github.com/rivo/uniseg/step.go deleted file mode 100644 index 9b72c5e596..0000000000 --- a/vendor/github.com/rivo/uniseg/step.go +++ /dev/null @@ -1,242 +0,0 @@ -package uniseg - -import "unicode/utf8" - -// The bit masks used to extract boundary information returned by [Step]. -const ( - MaskLine = 3 - MaskWord = 4 - MaskSentence = 8 -) - -// The number of bits to shift the boundary information returned by [Step] to -// obtain the monospace width of the grapheme cluster. -const ShiftWidth = 4 - -// The bit positions by which boundary flags are shifted by the [Step] function. -// These must correspond to the Mask constants. -const ( - shiftWord = 2 - shiftSentence = 3 - // shiftwWidth is ShiftWidth above. No mask as these are always the remaining bits. -) - -// The bit positions by which states are shifted by the [Step] function. These -// values must ensure state values defined for each of the boundary algorithms -// don't overlap (and that they all still fit in a single int). These must -// correspond to the Mask constants. -const ( - shiftWordState = 4 - shiftSentenceState = 9 - shiftLineState = 13 - shiftPropState = 21 // No mask as these are always the remaining bits. -) - -// The bit mask used to extract the state returned by the [Step] function, after -// shifting. These values must correspond to the shift constants. -const ( - maskGraphemeState = 0xf - maskWordState = 0x1f - maskSentenceState = 0xf - maskLineState = 0xff -) - -// Step returns the first grapheme cluster (user-perceived character) found in -// the given byte slice. It also returns information about the boundary between -// that grapheme cluster and the one following it as well as the monospace width -// of the grapheme cluster. There are three types of boundary information: word -// boundaries, sentence boundaries, and line breaks. This function is therefore -// a combination of [FirstGraphemeCluster], [FirstWord], [FirstSentence], and -// [FirstLineSegment]. -// -// The "boundaries" return value can be evaluated as follows: -// -// - boundaries&MaskWord != 0: The boundary is a word boundary. -// - boundaries&MaskWord == 0: The boundary is not a word boundary. -// - boundaries&MaskSentence != 0: The boundary is a sentence boundary. -// - boundaries&MaskSentence == 0: The boundary is not a sentence boundary. -// - boundaries&MaskLine == LineDontBreak: You must not break the line at the -// boundary. -// - boundaries&MaskLine == LineMustBreak: You must break the line at the -// boundary. -// - boundaries&MaskLine == LineCanBreak: You may or may not break the line at -// the boundary. -// - boundaries >> ShiftWidth: The width of the grapheme cluster for most -// monospace fonts where a value of 1 represents one character cell. -// -// This function can be called continuously to extract all grapheme clusters -// from a byte slice, as illustrated in the examples below. -// -// If you don't know which state to pass, for example when calling the function -// for the first time, you must pass -1. For consecutive calls, pass the state -// and rest slice returned by the previous call. -// -// The "rest" slice is the sub-slice of the original byte slice "b" starting -// after the last byte of the identified grapheme cluster. If the length of the -// "rest" slice is 0, the entire byte slice "b" has been processed. The -// "cluster" byte slice is the sub-slice of the input slice containing the -// first identified grapheme cluster. -// -// Given an empty byte slice "b", the function returns nil values. -// -// While slightly less convenient than using the Graphemes class, this function -// has much better performance and makes no allocations. It lends itself well to -// large byte slices. -// -// Note that in accordance with [UAX #14 LB3], the final segment will end with -// a mandatory line break (boundaries&MaskLine == LineMustBreak). You can choose -// to ignore this by checking if the length of the "rest" slice is 0 and calling -// [HasTrailingLineBreak] or [HasTrailingLineBreakInString] on the last rune. -// -// [UAX #14 LB3]: https://www.unicode.org/reports/tr14/#Algorithm -func Step(b []byte, state int) (cluster, rest []byte, boundaries int, newState int) { - // An empty byte slice returns nothing. - if len(b) == 0 { - return - } - - // Extract the first rune. - r, length := utf8.DecodeRune(b) - if len(b) <= length { // If we're already past the end, there is nothing else to parse. - var prop int - if state < 0 { - prop = propertyGraphemes(r) - } else { - prop = state >> shiftPropState - } - return b, nil, LineMustBreak | (1 << shiftWord) | (1 << shiftSentence) | (runeWidth(r, prop) << ShiftWidth), grAny | (wbAny << shiftWordState) | (sbAny << shiftSentenceState) | (lbAny << shiftLineState) | (prop << shiftPropState) - } - - // If we don't know the state, determine it now. - var graphemeState, wordState, sentenceState, lineState, firstProp int - remainder := b[length:] - if state < 0 { - graphemeState, firstProp, _ = transitionGraphemeState(state, r) - wordState, _ = transitionWordBreakState(state, r, remainder, "") - sentenceState, _ = transitionSentenceBreakState(state, r, remainder, "") - lineState, _ = transitionLineBreakState(state, r, remainder, "") - } else { - graphemeState = state & maskGraphemeState - wordState = (state >> shiftWordState) & maskWordState - sentenceState = (state >> shiftSentenceState) & maskSentenceState - lineState = (state >> shiftLineState) & maskLineState - firstProp = state >> shiftPropState - } - - // Transition until we find a grapheme cluster boundary. - width := runeWidth(r, firstProp) - for { - var ( - graphemeBoundary, wordBoundary, sentenceBoundary bool - lineBreak, prop int - ) - - r, l := utf8.DecodeRune(remainder) - remainder = b[length+l:] - - graphemeState, prop, graphemeBoundary = transitionGraphemeState(graphemeState, r) - wordState, wordBoundary = transitionWordBreakState(wordState, r, remainder, "") - sentenceState, sentenceBoundary = transitionSentenceBreakState(sentenceState, r, remainder, "") - lineState, lineBreak = transitionLineBreakState(lineState, r, remainder, "") - - if graphemeBoundary { - boundary := lineBreak | (width << ShiftWidth) - if wordBoundary { - boundary |= 1 << shiftWord - } - if sentenceBoundary { - boundary |= 1 << shiftSentence - } - return b[:length], b[length:], boundary, graphemeState | (wordState << shiftWordState) | (sentenceState << shiftSentenceState) | (lineState << shiftLineState) | (prop << shiftPropState) - } - - if firstProp == prExtendedPictographic { - if r == vs15 { - width = 1 - } else if r == vs16 { - width = 2 - } - } else if firstProp != prRegionalIndicator && firstProp != prL { - width += runeWidth(r, prop) - } - - length += l - if len(b) <= length { - return b, nil, LineMustBreak | (1 << shiftWord) | (1 << shiftSentence) | (width << ShiftWidth), grAny | (wbAny << shiftWordState) | (sbAny << shiftSentenceState) | (lbAny << shiftLineState) | (prop << shiftPropState) - } - } -} - -// StepString is like [Step] but its input and outputs are strings. -func StepString(str string, state int) (cluster, rest string, boundaries int, newState int) { - // An empty byte slice returns nothing. - if len(str) == 0 { - return - } - - // Extract the first rune. - r, length := utf8.DecodeRuneInString(str) - if len(str) <= length { // If we're already past the end, there is nothing else to parse. - prop := propertyGraphemes(r) - return str, "", LineMustBreak | (1 << shiftWord) | (1 << shiftSentence) | (runeWidth(r, prop) << ShiftWidth), grAny | (wbAny << shiftWordState) | (sbAny << shiftSentenceState) | (lbAny << shiftLineState) - } - - // If we don't know the state, determine it now. - var graphemeState, wordState, sentenceState, lineState, firstProp int - remainder := str[length:] - if state < 0 { - graphemeState, firstProp, _ = transitionGraphemeState(state, r) - wordState, _ = transitionWordBreakState(state, r, nil, remainder) - sentenceState, _ = transitionSentenceBreakState(state, r, nil, remainder) - lineState, _ = transitionLineBreakState(state, r, nil, remainder) - } else { - graphemeState = state & maskGraphemeState - wordState = (state >> shiftWordState) & maskWordState - sentenceState = (state >> shiftSentenceState) & maskSentenceState - lineState = (state >> shiftLineState) & maskLineState - firstProp = state >> shiftPropState - } - - // Transition until we find a grapheme cluster boundary. - width := runeWidth(r, firstProp) - for { - var ( - graphemeBoundary, wordBoundary, sentenceBoundary bool - lineBreak, prop int - ) - - r, l := utf8.DecodeRuneInString(remainder) - remainder = str[length+l:] - - graphemeState, prop, graphemeBoundary = transitionGraphemeState(graphemeState, r) - wordState, wordBoundary = transitionWordBreakState(wordState, r, nil, remainder) - sentenceState, sentenceBoundary = transitionSentenceBreakState(sentenceState, r, nil, remainder) - lineState, lineBreak = transitionLineBreakState(lineState, r, nil, remainder) - - if graphemeBoundary { - boundary := lineBreak | (width << ShiftWidth) - if wordBoundary { - boundary |= 1 << shiftWord - } - if sentenceBoundary { - boundary |= 1 << shiftSentence - } - return str[:length], str[length:], boundary, graphemeState | (wordState << shiftWordState) | (sentenceState << shiftSentenceState) | (lineState << shiftLineState) | (prop << shiftPropState) - } - - if firstProp == prExtendedPictographic { - if r == vs15 { - width = 1 - } else if r == vs16 { - width = 2 - } - } else if firstProp != prRegionalIndicator && firstProp != prL { - width += runeWidth(r, prop) - } - - length += l - if len(str) <= length { - return str, "", LineMustBreak | (1 << shiftWord) | (1 << shiftSentence) | (width << ShiftWidth), grAny | (wbAny << shiftWordState) | (sbAny << shiftSentenceState) | (lbAny << shiftLineState) | (prop << shiftPropState) - } - } -} diff --git a/vendor/github.com/rivo/uniseg/width.go b/vendor/github.com/rivo/uniseg/width.go deleted file mode 100644 index 975a9f1343..0000000000 --- a/vendor/github.com/rivo/uniseg/width.go +++ /dev/null @@ -1,61 +0,0 @@ -package uniseg - -// EastAsianAmbiguousWidth specifies the monospace width for East Asian -// characters classified as Ambiguous. The default is 1 but some rare fonts -// render them with a width of 2. -var EastAsianAmbiguousWidth = 1 - -// runeWidth returns the monospace width for the given rune. The provided -// grapheme property is a value mapped by the [graphemeCodePoints] table. -// -// Every rune has a width of 1, except for runes with the following properties -// (evaluated in this order): -// -// - Control, CR, LF, Extend, ZWJ: Width of 0 -// - \u2e3a, TWO-EM DASH: Width of 3 -// - \u2e3b, THREE-EM DASH: Width of 4 -// - East-Asian width Fullwidth and Wide: Width of 2 (Ambiguous and Neutral -// have a width of 1) -// - Regional Indicator: Width of 2 -// - Extended Pictographic: Width of 2, unless Emoji Presentation is "No". -func runeWidth(r rune, graphemeProperty int) int { - switch graphemeProperty { - case prControl, prCR, prLF, prExtend, prZWJ: - return 0 - case prRegionalIndicator: - return 2 - case prExtendedPictographic: - if property(emojiPresentation, r) == prEmojiPresentation { - return 2 - } - return 1 - } - - switch r { - case 0x2e3a: - return 3 - case 0x2e3b: - return 4 - } - - switch propertyEastAsianWidth(r) { - case prW, prF: - return 2 - case prA: - return EastAsianAmbiguousWidth - } - - return 1 -} - -// StringWidth returns the monospace width for the given string, that is, the -// number of same-size cells to be occupied by the string. -func StringWidth(s string) (width int) { - state := -1 - for len(s) > 0 { - var w int - _, s, w, state = FirstGraphemeClusterInString(s, state) - width += w - } - return -} diff --git a/vendor/github.com/rivo/uniseg/word.go b/vendor/github.com/rivo/uniseg/word.go deleted file mode 100644 index 34fba7f291..0000000000 --- a/vendor/github.com/rivo/uniseg/word.go +++ /dev/null @@ -1,89 +0,0 @@ -package uniseg - -import "unicode/utf8" - -// FirstWord returns the first word found in the given byte slice according to -// the rules of [Unicode Standard Annex #29, Word Boundaries]. This function can -// be called continuously to extract all words from a byte slice, as illustrated -// in the example below. -// -// If you don't know the current state, for example when calling the function -// for the first time, you must pass -1. For consecutive calls, pass the state -// and rest slice returned by the previous call. -// -// The "rest" slice is the sub-slice of the original byte slice "b" starting -// after the last byte of the identified word. If the length of the "rest" slice -// is 0, the entire byte slice "b" has been processed. The "word" byte slice is -// the sub-slice of the input slice containing the identified word. -// -// Given an empty byte slice "b", the function returns nil values. -// -// [Unicode Standard Annex #29, Word Boundaries]: http://unicode.org/reports/tr29/#Word_Boundaries -func FirstWord(b []byte, state int) (word, rest []byte, newState int) { - // An empty byte slice returns nothing. - if len(b) == 0 { - return - } - - // Extract the first rune. - r, length := utf8.DecodeRune(b) - if len(b) <= length { // If we're already past the end, there is nothing else to parse. - return b, nil, wbAny - } - - // If we don't know the state, determine it now. - if state < 0 { - state, _ = transitionWordBreakState(state, r, b[length:], "") - } - - // Transition until we find a boundary. - var boundary bool - for { - r, l := utf8.DecodeRune(b[length:]) - state, boundary = transitionWordBreakState(state, r, b[length+l:], "") - - if boundary { - return b[:length], b[length:], state - } - - length += l - if len(b) <= length { - return b, nil, wbAny - } - } -} - -// FirstWordInString is like [FirstWord] but its input and outputs are strings. -func FirstWordInString(str string, state int) (word, rest string, newState int) { - // An empty byte slice returns nothing. - if len(str) == 0 { - return - } - - // Extract the first rune. - r, length := utf8.DecodeRuneInString(str) - if len(str) <= length { // If we're already past the end, there is nothing else to parse. - return str, "", wbAny - } - - // If we don't know the state, determine it now. - if state < 0 { - state, _ = transitionWordBreakState(state, r, nil, str[length:]) - } - - // Transition until we find a boundary. - var boundary bool - for { - r, l := utf8.DecodeRuneInString(str[length:]) - state, boundary = transitionWordBreakState(state, r, nil, str[length+l:]) - - if boundary { - return str[:length], str[length:], state - } - - length += l - if len(str) <= length { - return str, "", wbAny - } - } -} diff --git a/vendor/github.com/rivo/uniseg/wordproperties.go b/vendor/github.com/rivo/uniseg/wordproperties.go deleted file mode 100644 index 277ca10068..0000000000 --- a/vendor/github.com/rivo/uniseg/wordproperties.go +++ /dev/null @@ -1,1883 +0,0 @@ -// Code generated via go generate from gen_properties.go. DO NOT EDIT. - -package uniseg - -// workBreakCodePoints are taken from -// https://www.unicode.org/Public/15.0.0/ucd/auxiliary/WordBreakProperty.txt -// and -// https://unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt -// ("Extended_Pictographic" only) -// on September 5, 2023. See https://www.unicode.org/license.html for the Unicode -// license agreement. -var workBreakCodePoints = [][3]int{ - {0x000A, 0x000A, prLF}, // Cc - {0x000B, 0x000C, prNewline}, // Cc [2] .. - {0x000D, 0x000D, prCR}, // Cc - {0x0020, 0x0020, prWSegSpace}, // Zs SPACE - {0x0022, 0x0022, prDoubleQuote}, // Po QUOTATION MARK - {0x0027, 0x0027, prSingleQuote}, // Po APOSTROPHE - {0x002C, 0x002C, prMidNum}, // Po COMMA - {0x002E, 0x002E, prMidNumLet}, // Po FULL STOP - {0x0030, 0x0039, prNumeric}, // Nd [10] DIGIT ZERO..DIGIT NINE - {0x003A, 0x003A, prMidLetter}, // Po COLON - {0x003B, 0x003B, prMidNum}, // Po SEMICOLON - {0x0041, 0x005A, prALetter}, // L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z - {0x005F, 0x005F, prExtendNumLet}, // Pc LOW LINE - {0x0061, 0x007A, prALetter}, // L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z - {0x0085, 0x0085, prNewline}, // Cc - {0x00A9, 0x00A9, prExtendedPictographic}, // E0.6 [1] (©️) copyright - {0x00AA, 0x00AA, prALetter}, // Lo FEMININE ORDINAL INDICATOR - {0x00AD, 0x00AD, prFormat}, // Cf SOFT HYPHEN - {0x00AE, 0x00AE, prExtendedPictographic}, // E0.6 [1] (®️) registered - {0x00B5, 0x00B5, prALetter}, // L& MICRO SIGN - {0x00B7, 0x00B7, prMidLetter}, // Po MIDDLE DOT - {0x00BA, 0x00BA, prALetter}, // Lo MASCULINE ORDINAL INDICATOR - {0x00C0, 0x00D6, prALetter}, // L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS - {0x00D8, 0x00F6, prALetter}, // L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS - {0x00F8, 0x01BA, prALetter}, // L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL - {0x01BB, 0x01BB, prALetter}, // Lo LATIN LETTER TWO WITH STROKE - {0x01BC, 0x01BF, prALetter}, // L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN - {0x01C0, 0x01C3, prALetter}, // Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK - {0x01C4, 0x0293, prALetter}, // L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL - {0x0294, 0x0294, prALetter}, // Lo LATIN LETTER GLOTTAL STOP - {0x0295, 0x02AF, prALetter}, // L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL - {0x02B0, 0x02C1, prALetter}, // Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP - {0x02C2, 0x02C5, prALetter}, // Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD - {0x02C6, 0x02D1, prALetter}, // Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON - {0x02D2, 0x02D7, prALetter}, // Sk [6] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER MINUS SIGN - {0x02DE, 0x02DF, prALetter}, // Sk [2] MODIFIER LETTER RHOTIC HOOK..MODIFIER LETTER CROSS ACCENT - {0x02E0, 0x02E4, prALetter}, // Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP - {0x02E5, 0x02EB, prALetter}, // Sk [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK - {0x02EC, 0x02EC, prALetter}, // Lm MODIFIER LETTER VOICING - {0x02ED, 0x02ED, prALetter}, // Sk MODIFIER LETTER UNASPIRATED - {0x02EE, 0x02EE, prALetter}, // Lm MODIFIER LETTER DOUBLE APOSTROPHE - {0x02EF, 0x02FF, prALetter}, // Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW - {0x0300, 0x036F, prExtend}, // Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X - {0x0370, 0x0373, prALetter}, // L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI - {0x0374, 0x0374, prALetter}, // Lm GREEK NUMERAL SIGN - {0x0376, 0x0377, prALetter}, // L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA - {0x037A, 0x037A, prALetter}, // Lm GREEK YPOGEGRAMMENI - {0x037B, 0x037D, prALetter}, // L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL - {0x037E, 0x037E, prMidNum}, // Po GREEK QUESTION MARK - {0x037F, 0x037F, prALetter}, // L& GREEK CAPITAL LETTER YOT - {0x0386, 0x0386, prALetter}, // L& GREEK CAPITAL LETTER ALPHA WITH TONOS - {0x0387, 0x0387, prMidLetter}, // Po GREEK ANO TELEIA - {0x0388, 0x038A, prALetter}, // L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS - {0x038C, 0x038C, prALetter}, // L& GREEK CAPITAL LETTER OMICRON WITH TONOS - {0x038E, 0x03A1, prALetter}, // L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO - {0x03A3, 0x03F5, prALetter}, // L& [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL - {0x03F7, 0x0481, prALetter}, // L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA - {0x0483, 0x0487, prExtend}, // Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE - {0x0488, 0x0489, prExtend}, // Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN - {0x048A, 0x052F, prALetter}, // L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER - {0x0531, 0x0556, prALetter}, // L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH - {0x0559, 0x0559, prALetter}, // Lm ARMENIAN MODIFIER LETTER LEFT HALF RING - {0x055A, 0x055C, prALetter}, // Po [3] ARMENIAN APOSTROPHE..ARMENIAN EXCLAMATION MARK - {0x055E, 0x055E, prALetter}, // Po ARMENIAN QUESTION MARK - {0x055F, 0x055F, prMidLetter}, // Po ARMENIAN ABBREVIATION MARK - {0x0560, 0x0588, prALetter}, // L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE - {0x0589, 0x0589, prMidNum}, // Po ARMENIAN FULL STOP - {0x058A, 0x058A, prALetter}, // Pd ARMENIAN HYPHEN - {0x0591, 0x05BD, prExtend}, // Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG - {0x05BF, 0x05BF, prExtend}, // Mn HEBREW POINT RAFE - {0x05C1, 0x05C2, prExtend}, // Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT - {0x05C4, 0x05C5, prExtend}, // Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT - {0x05C7, 0x05C7, prExtend}, // Mn HEBREW POINT QAMATS QATAN - {0x05D0, 0x05EA, prHebrewLetter}, // Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV - {0x05EF, 0x05F2, prHebrewLetter}, // Lo [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD - {0x05F3, 0x05F3, prALetter}, // Po HEBREW PUNCTUATION GERESH - {0x05F4, 0x05F4, prMidLetter}, // Po HEBREW PUNCTUATION GERSHAYIM - {0x0600, 0x0605, prFormat}, // Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE - {0x060C, 0x060D, prMidNum}, // Po [2] ARABIC COMMA..ARABIC DATE SEPARATOR - {0x0610, 0x061A, prExtend}, // Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA - {0x061C, 0x061C, prFormat}, // Cf ARABIC LETTER MARK - {0x0620, 0x063F, prALetter}, // Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE - {0x0640, 0x0640, prALetter}, // Lm ARABIC TATWEEL - {0x0641, 0x064A, prALetter}, // Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH - {0x064B, 0x065F, prExtend}, // Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW - {0x0660, 0x0669, prNumeric}, // Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE - {0x066B, 0x066B, prNumeric}, // Po ARABIC DECIMAL SEPARATOR - {0x066C, 0x066C, prMidNum}, // Po ARABIC THOUSANDS SEPARATOR - {0x066E, 0x066F, prALetter}, // Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF - {0x0670, 0x0670, prExtend}, // Mn ARABIC LETTER SUPERSCRIPT ALEF - {0x0671, 0x06D3, prALetter}, // Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE - {0x06D5, 0x06D5, prALetter}, // Lo ARABIC LETTER AE - {0x06D6, 0x06DC, prExtend}, // Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN - {0x06DD, 0x06DD, prFormat}, // Cf ARABIC END OF AYAH - {0x06DF, 0x06E4, prExtend}, // Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA - {0x06E5, 0x06E6, prALetter}, // Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH - {0x06E7, 0x06E8, prExtend}, // Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON - {0x06EA, 0x06ED, prExtend}, // Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM - {0x06EE, 0x06EF, prALetter}, // Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V - {0x06F0, 0x06F9, prNumeric}, // Nd [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE - {0x06FA, 0x06FC, prALetter}, // Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW - {0x06FF, 0x06FF, prALetter}, // Lo ARABIC LETTER HEH WITH INVERTED V - {0x070F, 0x070F, prFormat}, // Cf SYRIAC ABBREVIATION MARK - {0x0710, 0x0710, prALetter}, // Lo SYRIAC LETTER ALAPH - {0x0711, 0x0711, prExtend}, // Mn SYRIAC LETTER SUPERSCRIPT ALAPH - {0x0712, 0x072F, prALetter}, // Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH - {0x0730, 0x074A, prExtend}, // Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH - {0x074D, 0x07A5, prALetter}, // Lo [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU - {0x07A6, 0x07B0, prExtend}, // Mn [11] THAANA ABAFILI..THAANA SUKUN - {0x07B1, 0x07B1, prALetter}, // Lo THAANA LETTER NAA - {0x07C0, 0x07C9, prNumeric}, // Nd [10] NKO DIGIT ZERO..NKO DIGIT NINE - {0x07CA, 0x07EA, prALetter}, // Lo [33] NKO LETTER A..NKO LETTER JONA RA - {0x07EB, 0x07F3, prExtend}, // Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE - {0x07F4, 0x07F5, prALetter}, // Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE - {0x07F8, 0x07F8, prMidNum}, // Po NKO COMMA - {0x07FA, 0x07FA, prALetter}, // Lm NKO LAJANYALAN - {0x07FD, 0x07FD, prExtend}, // Mn NKO DANTAYALAN - {0x0800, 0x0815, prALetter}, // Lo [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF - {0x0816, 0x0819, prExtend}, // Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH - {0x081A, 0x081A, prALetter}, // Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT - {0x081B, 0x0823, prExtend}, // Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A - {0x0824, 0x0824, prALetter}, // Lm SAMARITAN MODIFIER LETTER SHORT A - {0x0825, 0x0827, prExtend}, // Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U - {0x0828, 0x0828, prALetter}, // Lm SAMARITAN MODIFIER LETTER I - {0x0829, 0x082D, prExtend}, // Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA - {0x0840, 0x0858, prALetter}, // Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN - {0x0859, 0x085B, prExtend}, // Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK - {0x0860, 0x086A, prALetter}, // Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA - {0x0870, 0x0887, prALetter}, // Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT - {0x0889, 0x088E, prALetter}, // Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL - {0x0890, 0x0891, prFormat}, // Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE - {0x0898, 0x089F, prExtend}, // Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA - {0x08A0, 0x08C8, prALetter}, // Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF - {0x08C9, 0x08C9, prALetter}, // Lm ARABIC SMALL FARSI YEH - {0x08CA, 0x08E1, prExtend}, // Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA - {0x08E2, 0x08E2, prFormat}, // Cf ARABIC DISPUTED END OF AYAH - {0x08E3, 0x0902, prExtend}, // Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA - {0x0903, 0x0903, prExtend}, // Mc DEVANAGARI SIGN VISARGA - {0x0904, 0x0939, prALetter}, // Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA - {0x093A, 0x093A, prExtend}, // Mn DEVANAGARI VOWEL SIGN OE - {0x093B, 0x093B, prExtend}, // Mc DEVANAGARI VOWEL SIGN OOE - {0x093C, 0x093C, prExtend}, // Mn DEVANAGARI SIGN NUKTA - {0x093D, 0x093D, prALetter}, // Lo DEVANAGARI SIGN AVAGRAHA - {0x093E, 0x0940, prExtend}, // Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II - {0x0941, 0x0948, prExtend}, // Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI - {0x0949, 0x094C, prExtend}, // Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU - {0x094D, 0x094D, prExtend}, // Mn DEVANAGARI SIGN VIRAMA - {0x094E, 0x094F, prExtend}, // Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW - {0x0950, 0x0950, prALetter}, // Lo DEVANAGARI OM - {0x0951, 0x0957, prExtend}, // Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE - {0x0958, 0x0961, prALetter}, // Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL - {0x0962, 0x0963, prExtend}, // Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL - {0x0966, 0x096F, prNumeric}, // Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE - {0x0971, 0x0971, prALetter}, // Lm DEVANAGARI SIGN HIGH SPACING DOT - {0x0972, 0x0980, prALetter}, // Lo [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI - {0x0981, 0x0981, prExtend}, // Mn BENGALI SIGN CANDRABINDU - {0x0982, 0x0983, prExtend}, // Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA - {0x0985, 0x098C, prALetter}, // Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L - {0x098F, 0x0990, prALetter}, // Lo [2] BENGALI LETTER E..BENGALI LETTER AI - {0x0993, 0x09A8, prALetter}, // Lo [22] BENGALI LETTER O..BENGALI LETTER NA - {0x09AA, 0x09B0, prALetter}, // Lo [7] BENGALI LETTER PA..BENGALI LETTER RA - {0x09B2, 0x09B2, prALetter}, // Lo BENGALI LETTER LA - {0x09B6, 0x09B9, prALetter}, // Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA - {0x09BC, 0x09BC, prExtend}, // Mn BENGALI SIGN NUKTA - {0x09BD, 0x09BD, prALetter}, // Lo BENGALI SIGN AVAGRAHA - {0x09BE, 0x09C0, prExtend}, // Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II - {0x09C1, 0x09C4, prExtend}, // Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR - {0x09C7, 0x09C8, prExtend}, // Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI - {0x09CB, 0x09CC, prExtend}, // Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU - {0x09CD, 0x09CD, prExtend}, // Mn BENGALI SIGN VIRAMA - {0x09CE, 0x09CE, prALetter}, // Lo BENGALI LETTER KHANDA TA - {0x09D7, 0x09D7, prExtend}, // Mc BENGALI AU LENGTH MARK - {0x09DC, 0x09DD, prALetter}, // Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA - {0x09DF, 0x09E1, prALetter}, // Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL - {0x09E2, 0x09E3, prExtend}, // Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL - {0x09E6, 0x09EF, prNumeric}, // Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE - {0x09F0, 0x09F1, prALetter}, // Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL - {0x09FC, 0x09FC, prALetter}, // Lo BENGALI LETTER VEDIC ANUSVARA - {0x09FE, 0x09FE, prExtend}, // Mn BENGALI SANDHI MARK - {0x0A01, 0x0A02, prExtend}, // Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI - {0x0A03, 0x0A03, prExtend}, // Mc GURMUKHI SIGN VISARGA - {0x0A05, 0x0A0A, prALetter}, // Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU - {0x0A0F, 0x0A10, prALetter}, // Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI - {0x0A13, 0x0A28, prALetter}, // Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA - {0x0A2A, 0x0A30, prALetter}, // Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA - {0x0A32, 0x0A33, prALetter}, // Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA - {0x0A35, 0x0A36, prALetter}, // Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA - {0x0A38, 0x0A39, prALetter}, // Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA - {0x0A3C, 0x0A3C, prExtend}, // Mn GURMUKHI SIGN NUKTA - {0x0A3E, 0x0A40, prExtend}, // Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II - {0x0A41, 0x0A42, prExtend}, // Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU - {0x0A47, 0x0A48, prExtend}, // Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI - {0x0A4B, 0x0A4D, prExtend}, // Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA - {0x0A51, 0x0A51, prExtend}, // Mn GURMUKHI SIGN UDAAT - {0x0A59, 0x0A5C, prALetter}, // Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA - {0x0A5E, 0x0A5E, prALetter}, // Lo GURMUKHI LETTER FA - {0x0A66, 0x0A6F, prNumeric}, // Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE - {0x0A70, 0x0A71, prExtend}, // Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK - {0x0A72, 0x0A74, prALetter}, // Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR - {0x0A75, 0x0A75, prExtend}, // Mn GURMUKHI SIGN YAKASH - {0x0A81, 0x0A82, prExtend}, // Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA - {0x0A83, 0x0A83, prExtend}, // Mc GUJARATI SIGN VISARGA - {0x0A85, 0x0A8D, prALetter}, // Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E - {0x0A8F, 0x0A91, prALetter}, // Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O - {0x0A93, 0x0AA8, prALetter}, // Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA - {0x0AAA, 0x0AB0, prALetter}, // Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA - {0x0AB2, 0x0AB3, prALetter}, // Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA - {0x0AB5, 0x0AB9, prALetter}, // Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA - {0x0ABC, 0x0ABC, prExtend}, // Mn GUJARATI SIGN NUKTA - {0x0ABD, 0x0ABD, prALetter}, // Lo GUJARATI SIGN AVAGRAHA - {0x0ABE, 0x0AC0, prExtend}, // Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II - {0x0AC1, 0x0AC5, prExtend}, // Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E - {0x0AC7, 0x0AC8, prExtend}, // Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI - {0x0AC9, 0x0AC9, prExtend}, // Mc GUJARATI VOWEL SIGN CANDRA O - {0x0ACB, 0x0ACC, prExtend}, // Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU - {0x0ACD, 0x0ACD, prExtend}, // Mn GUJARATI SIGN VIRAMA - {0x0AD0, 0x0AD0, prALetter}, // Lo GUJARATI OM - {0x0AE0, 0x0AE1, prALetter}, // Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL - {0x0AE2, 0x0AE3, prExtend}, // Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL - {0x0AE6, 0x0AEF, prNumeric}, // Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE - {0x0AF9, 0x0AF9, prALetter}, // Lo GUJARATI LETTER ZHA - {0x0AFA, 0x0AFF, prExtend}, // Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE - {0x0B01, 0x0B01, prExtend}, // Mn ORIYA SIGN CANDRABINDU - {0x0B02, 0x0B03, prExtend}, // Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA - {0x0B05, 0x0B0C, prALetter}, // Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L - {0x0B0F, 0x0B10, prALetter}, // Lo [2] ORIYA LETTER E..ORIYA LETTER AI - {0x0B13, 0x0B28, prALetter}, // Lo [22] ORIYA LETTER O..ORIYA LETTER NA - {0x0B2A, 0x0B30, prALetter}, // Lo [7] ORIYA LETTER PA..ORIYA LETTER RA - {0x0B32, 0x0B33, prALetter}, // Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA - {0x0B35, 0x0B39, prALetter}, // Lo [5] ORIYA LETTER VA..ORIYA LETTER HA - {0x0B3C, 0x0B3C, prExtend}, // Mn ORIYA SIGN NUKTA - {0x0B3D, 0x0B3D, prALetter}, // Lo ORIYA SIGN AVAGRAHA - {0x0B3E, 0x0B3E, prExtend}, // Mc ORIYA VOWEL SIGN AA - {0x0B3F, 0x0B3F, prExtend}, // Mn ORIYA VOWEL SIGN I - {0x0B40, 0x0B40, prExtend}, // Mc ORIYA VOWEL SIGN II - {0x0B41, 0x0B44, prExtend}, // Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR - {0x0B47, 0x0B48, prExtend}, // Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI - {0x0B4B, 0x0B4C, prExtend}, // Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU - {0x0B4D, 0x0B4D, prExtend}, // Mn ORIYA SIGN VIRAMA - {0x0B55, 0x0B56, prExtend}, // Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK - {0x0B57, 0x0B57, prExtend}, // Mc ORIYA AU LENGTH MARK - {0x0B5C, 0x0B5D, prALetter}, // Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA - {0x0B5F, 0x0B61, prALetter}, // Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL - {0x0B62, 0x0B63, prExtend}, // Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL - {0x0B66, 0x0B6F, prNumeric}, // Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE - {0x0B71, 0x0B71, prALetter}, // Lo ORIYA LETTER WA - {0x0B82, 0x0B82, prExtend}, // Mn TAMIL SIGN ANUSVARA - {0x0B83, 0x0B83, prALetter}, // Lo TAMIL SIGN VISARGA - {0x0B85, 0x0B8A, prALetter}, // Lo [6] TAMIL LETTER A..TAMIL LETTER UU - {0x0B8E, 0x0B90, prALetter}, // Lo [3] TAMIL LETTER E..TAMIL LETTER AI - {0x0B92, 0x0B95, prALetter}, // Lo [4] TAMIL LETTER O..TAMIL LETTER KA - {0x0B99, 0x0B9A, prALetter}, // Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA - {0x0B9C, 0x0B9C, prALetter}, // Lo TAMIL LETTER JA - {0x0B9E, 0x0B9F, prALetter}, // Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA - {0x0BA3, 0x0BA4, prALetter}, // Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA - {0x0BA8, 0x0BAA, prALetter}, // Lo [3] TAMIL LETTER NA..TAMIL LETTER PA - {0x0BAE, 0x0BB9, prALetter}, // Lo [12] TAMIL LETTER MA..TAMIL LETTER HA - {0x0BBE, 0x0BBF, prExtend}, // Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I - {0x0BC0, 0x0BC0, prExtend}, // Mn TAMIL VOWEL SIGN II - {0x0BC1, 0x0BC2, prExtend}, // Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU - {0x0BC6, 0x0BC8, prExtend}, // Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI - {0x0BCA, 0x0BCC, prExtend}, // Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU - {0x0BCD, 0x0BCD, prExtend}, // Mn TAMIL SIGN VIRAMA - {0x0BD0, 0x0BD0, prALetter}, // Lo TAMIL OM - {0x0BD7, 0x0BD7, prExtend}, // Mc TAMIL AU LENGTH MARK - {0x0BE6, 0x0BEF, prNumeric}, // Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE - {0x0C00, 0x0C00, prExtend}, // Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE - {0x0C01, 0x0C03, prExtend}, // Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA - {0x0C04, 0x0C04, prExtend}, // Mn TELUGU SIGN COMBINING ANUSVARA ABOVE - {0x0C05, 0x0C0C, prALetter}, // Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L - {0x0C0E, 0x0C10, prALetter}, // Lo [3] TELUGU LETTER E..TELUGU LETTER AI - {0x0C12, 0x0C28, prALetter}, // Lo [23] TELUGU LETTER O..TELUGU LETTER NA - {0x0C2A, 0x0C39, prALetter}, // Lo [16] TELUGU LETTER PA..TELUGU LETTER HA - {0x0C3C, 0x0C3C, prExtend}, // Mn TELUGU SIGN NUKTA - {0x0C3D, 0x0C3D, prALetter}, // Lo TELUGU SIGN AVAGRAHA - {0x0C3E, 0x0C40, prExtend}, // Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II - {0x0C41, 0x0C44, prExtend}, // Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR - {0x0C46, 0x0C48, prExtend}, // Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI - {0x0C4A, 0x0C4D, prExtend}, // Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA - {0x0C55, 0x0C56, prExtend}, // Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK - {0x0C58, 0x0C5A, prALetter}, // Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA - {0x0C5D, 0x0C5D, prALetter}, // Lo TELUGU LETTER NAKAARA POLLU - {0x0C60, 0x0C61, prALetter}, // Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL - {0x0C62, 0x0C63, prExtend}, // Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL - {0x0C66, 0x0C6F, prNumeric}, // Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE - {0x0C80, 0x0C80, prALetter}, // Lo KANNADA SIGN SPACING CANDRABINDU - {0x0C81, 0x0C81, prExtend}, // Mn KANNADA SIGN CANDRABINDU - {0x0C82, 0x0C83, prExtend}, // Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA - {0x0C85, 0x0C8C, prALetter}, // Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L - {0x0C8E, 0x0C90, prALetter}, // Lo [3] KANNADA LETTER E..KANNADA LETTER AI - {0x0C92, 0x0CA8, prALetter}, // Lo [23] KANNADA LETTER O..KANNADA LETTER NA - {0x0CAA, 0x0CB3, prALetter}, // Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA - {0x0CB5, 0x0CB9, prALetter}, // Lo [5] KANNADA LETTER VA..KANNADA LETTER HA - {0x0CBC, 0x0CBC, prExtend}, // Mn KANNADA SIGN NUKTA - {0x0CBD, 0x0CBD, prALetter}, // Lo KANNADA SIGN AVAGRAHA - {0x0CBE, 0x0CBE, prExtend}, // Mc KANNADA VOWEL SIGN AA - {0x0CBF, 0x0CBF, prExtend}, // Mn KANNADA VOWEL SIGN I - {0x0CC0, 0x0CC4, prExtend}, // Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR - {0x0CC6, 0x0CC6, prExtend}, // Mn KANNADA VOWEL SIGN E - {0x0CC7, 0x0CC8, prExtend}, // Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI - {0x0CCA, 0x0CCB, prExtend}, // Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO - {0x0CCC, 0x0CCD, prExtend}, // Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA - {0x0CD5, 0x0CD6, prExtend}, // Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK - {0x0CDD, 0x0CDE, prALetter}, // Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA - {0x0CE0, 0x0CE1, prALetter}, // Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL - {0x0CE2, 0x0CE3, prExtend}, // Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL - {0x0CE6, 0x0CEF, prNumeric}, // Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE - {0x0CF1, 0x0CF2, prALetter}, // Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA - {0x0CF3, 0x0CF3, prExtend}, // Mc KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT - {0x0D00, 0x0D01, prExtend}, // Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU - {0x0D02, 0x0D03, prExtend}, // Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA - {0x0D04, 0x0D0C, prALetter}, // Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L - {0x0D0E, 0x0D10, prALetter}, // Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI - {0x0D12, 0x0D3A, prALetter}, // Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA - {0x0D3B, 0x0D3C, prExtend}, // Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA - {0x0D3D, 0x0D3D, prALetter}, // Lo MALAYALAM SIGN AVAGRAHA - {0x0D3E, 0x0D40, prExtend}, // Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II - {0x0D41, 0x0D44, prExtend}, // Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR - {0x0D46, 0x0D48, prExtend}, // Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI - {0x0D4A, 0x0D4C, prExtend}, // Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU - {0x0D4D, 0x0D4D, prExtend}, // Mn MALAYALAM SIGN VIRAMA - {0x0D4E, 0x0D4E, prALetter}, // Lo MALAYALAM LETTER DOT REPH - {0x0D54, 0x0D56, prALetter}, // Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL - {0x0D57, 0x0D57, prExtend}, // Mc MALAYALAM AU LENGTH MARK - {0x0D5F, 0x0D61, prALetter}, // Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL - {0x0D62, 0x0D63, prExtend}, // Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL - {0x0D66, 0x0D6F, prNumeric}, // Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE - {0x0D7A, 0x0D7F, prALetter}, // Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K - {0x0D81, 0x0D81, prExtend}, // Mn SINHALA SIGN CANDRABINDU - {0x0D82, 0x0D83, prExtend}, // Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA - {0x0D85, 0x0D96, prALetter}, // Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA - {0x0D9A, 0x0DB1, prALetter}, // Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA - {0x0DB3, 0x0DBB, prALetter}, // Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA - {0x0DBD, 0x0DBD, prALetter}, // Lo SINHALA LETTER DANTAJA LAYANNA - {0x0DC0, 0x0DC6, prALetter}, // Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA - {0x0DCA, 0x0DCA, prExtend}, // Mn SINHALA SIGN AL-LAKUNA - {0x0DCF, 0x0DD1, prExtend}, // Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA - {0x0DD2, 0x0DD4, prExtend}, // Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA - {0x0DD6, 0x0DD6, prExtend}, // Mn SINHALA VOWEL SIGN DIGA PAA-PILLA - {0x0DD8, 0x0DDF, prExtend}, // Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA - {0x0DE6, 0x0DEF, prNumeric}, // Nd [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE - {0x0DF2, 0x0DF3, prExtend}, // Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA - {0x0E31, 0x0E31, prExtend}, // Mn THAI CHARACTER MAI HAN-AKAT - {0x0E34, 0x0E3A, prExtend}, // Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU - {0x0E47, 0x0E4E, prExtend}, // Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN - {0x0E50, 0x0E59, prNumeric}, // Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE - {0x0EB1, 0x0EB1, prExtend}, // Mn LAO VOWEL SIGN MAI KAN - {0x0EB4, 0x0EBC, prExtend}, // Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO - {0x0EC8, 0x0ECE, prExtend}, // Mn [7] LAO TONE MAI EK..LAO YAMAKKAN - {0x0ED0, 0x0ED9, prNumeric}, // Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE - {0x0F00, 0x0F00, prALetter}, // Lo TIBETAN SYLLABLE OM - {0x0F18, 0x0F19, prExtend}, // Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS - {0x0F20, 0x0F29, prNumeric}, // Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE - {0x0F35, 0x0F35, prExtend}, // Mn TIBETAN MARK NGAS BZUNG NYI ZLA - {0x0F37, 0x0F37, prExtend}, // Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS - {0x0F39, 0x0F39, prExtend}, // Mn TIBETAN MARK TSA -PHRU - {0x0F3E, 0x0F3F, prExtend}, // Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES - {0x0F40, 0x0F47, prALetter}, // Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA - {0x0F49, 0x0F6C, prALetter}, // Lo [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA - {0x0F71, 0x0F7E, prExtend}, // Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO - {0x0F7F, 0x0F7F, prExtend}, // Mc TIBETAN SIGN RNAM BCAD - {0x0F80, 0x0F84, prExtend}, // Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA - {0x0F86, 0x0F87, prExtend}, // Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS - {0x0F88, 0x0F8C, prALetter}, // Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN - {0x0F8D, 0x0F97, prExtend}, // Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA - {0x0F99, 0x0FBC, prExtend}, // Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA - {0x0FC6, 0x0FC6, prExtend}, // Mn TIBETAN SYMBOL PADMA GDAN - {0x102B, 0x102C, prExtend}, // Mc [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA - {0x102D, 0x1030, prExtend}, // Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU - {0x1031, 0x1031, prExtend}, // Mc MYANMAR VOWEL SIGN E - {0x1032, 0x1037, prExtend}, // Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW - {0x1038, 0x1038, prExtend}, // Mc MYANMAR SIGN VISARGA - {0x1039, 0x103A, prExtend}, // Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT - {0x103B, 0x103C, prExtend}, // Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA - {0x103D, 0x103E, prExtend}, // Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA - {0x1040, 0x1049, prNumeric}, // Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE - {0x1056, 0x1057, prExtend}, // Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR - {0x1058, 0x1059, prExtend}, // Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL - {0x105E, 0x1060, prExtend}, // Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA - {0x1062, 0x1064, prExtend}, // Mc [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO - {0x1067, 0x106D, prExtend}, // Mc [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5 - {0x1071, 0x1074, prExtend}, // Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE - {0x1082, 0x1082, prExtend}, // Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA - {0x1083, 0x1084, prExtend}, // Mc [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E - {0x1085, 0x1086, prExtend}, // Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y - {0x1087, 0x108C, prExtend}, // Mc [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3 - {0x108D, 0x108D, prExtend}, // Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE - {0x108F, 0x108F, prExtend}, // Mc MYANMAR SIGN RUMAI PALAUNG TONE-5 - {0x1090, 0x1099, prNumeric}, // Nd [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE - {0x109A, 0x109C, prExtend}, // Mc [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A - {0x109D, 0x109D, prExtend}, // Mn MYANMAR VOWEL SIGN AITON AI - {0x10A0, 0x10C5, prALetter}, // L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE - {0x10C7, 0x10C7, prALetter}, // L& GEORGIAN CAPITAL LETTER YN - {0x10CD, 0x10CD, prALetter}, // L& GEORGIAN CAPITAL LETTER AEN - {0x10D0, 0x10FA, prALetter}, // L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN - {0x10FC, 0x10FC, prALetter}, // Lm MODIFIER LETTER GEORGIAN NAR - {0x10FD, 0x10FF, prALetter}, // L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN - {0x1100, 0x1248, prALetter}, // Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA - {0x124A, 0x124D, prALetter}, // Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE - {0x1250, 0x1256, prALetter}, // Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO - {0x1258, 0x1258, prALetter}, // Lo ETHIOPIC SYLLABLE QHWA - {0x125A, 0x125D, prALetter}, // Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE - {0x1260, 0x1288, prALetter}, // Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA - {0x128A, 0x128D, prALetter}, // Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE - {0x1290, 0x12B0, prALetter}, // Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA - {0x12B2, 0x12B5, prALetter}, // Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE - {0x12B8, 0x12BE, prALetter}, // Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO - {0x12C0, 0x12C0, prALetter}, // Lo ETHIOPIC SYLLABLE KXWA - {0x12C2, 0x12C5, prALetter}, // Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE - {0x12C8, 0x12D6, prALetter}, // Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O - {0x12D8, 0x1310, prALetter}, // Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA - {0x1312, 0x1315, prALetter}, // Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE - {0x1318, 0x135A, prALetter}, // Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA - {0x135D, 0x135F, prExtend}, // Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK - {0x1380, 0x138F, prALetter}, // Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE - {0x13A0, 0x13F5, prALetter}, // L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV - {0x13F8, 0x13FD, prALetter}, // L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV - {0x1401, 0x166C, prALetter}, // Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA - {0x166F, 0x167F, prALetter}, // Lo [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W - {0x1680, 0x1680, prWSegSpace}, // Zs OGHAM SPACE MARK - {0x1681, 0x169A, prALetter}, // Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH - {0x16A0, 0x16EA, prALetter}, // Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X - {0x16EE, 0x16F0, prALetter}, // Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL - {0x16F1, 0x16F8, prALetter}, // Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC - {0x1700, 0x1711, prALetter}, // Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA - {0x1712, 0x1714, prExtend}, // Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA - {0x1715, 0x1715, prExtend}, // Mc TAGALOG SIGN PAMUDPOD - {0x171F, 0x1731, prALetter}, // Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA - {0x1732, 0x1733, prExtend}, // Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U - {0x1734, 0x1734, prExtend}, // Mc HANUNOO SIGN PAMUDPOD - {0x1740, 0x1751, prALetter}, // Lo [18] BUHID LETTER A..BUHID LETTER HA - {0x1752, 0x1753, prExtend}, // Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U - {0x1760, 0x176C, prALetter}, // Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA - {0x176E, 0x1770, prALetter}, // Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA - {0x1772, 0x1773, prExtend}, // Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U - {0x17B4, 0x17B5, prExtend}, // Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA - {0x17B6, 0x17B6, prExtend}, // Mc KHMER VOWEL SIGN AA - {0x17B7, 0x17BD, prExtend}, // Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA - {0x17BE, 0x17C5, prExtend}, // Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU - {0x17C6, 0x17C6, prExtend}, // Mn KHMER SIGN NIKAHIT - {0x17C7, 0x17C8, prExtend}, // Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU - {0x17C9, 0x17D3, prExtend}, // Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT - {0x17DD, 0x17DD, prExtend}, // Mn KHMER SIGN ATTHACAN - {0x17E0, 0x17E9, prNumeric}, // Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE - {0x180B, 0x180D, prExtend}, // Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE - {0x180E, 0x180E, prFormat}, // Cf MONGOLIAN VOWEL SEPARATOR - {0x180F, 0x180F, prExtend}, // Mn MONGOLIAN FREE VARIATION SELECTOR FOUR - {0x1810, 0x1819, prNumeric}, // Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE - {0x1820, 0x1842, prALetter}, // Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI - {0x1843, 0x1843, prALetter}, // Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN - {0x1844, 0x1878, prALetter}, // Lo [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS - {0x1880, 0x1884, prALetter}, // Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA - {0x1885, 0x1886, prExtend}, // Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA - {0x1887, 0x18A8, prALetter}, // Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA - {0x18A9, 0x18A9, prExtend}, // Mn MONGOLIAN LETTER ALI GALI DAGALGA - {0x18AA, 0x18AA, prALetter}, // Lo MONGOLIAN LETTER MANCHU ALI GALI LHA - {0x18B0, 0x18F5, prALetter}, // Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S - {0x1900, 0x191E, prALetter}, // Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA - {0x1920, 0x1922, prExtend}, // Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U - {0x1923, 0x1926, prExtend}, // Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU - {0x1927, 0x1928, prExtend}, // Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O - {0x1929, 0x192B, prExtend}, // Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA - {0x1930, 0x1931, prExtend}, // Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA - {0x1932, 0x1932, prExtend}, // Mn LIMBU SMALL LETTER ANUSVARA - {0x1933, 0x1938, prExtend}, // Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA - {0x1939, 0x193B, prExtend}, // Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I - {0x1946, 0x194F, prNumeric}, // Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE - {0x19D0, 0x19D9, prNumeric}, // Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE - {0x1A00, 0x1A16, prALetter}, // Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA - {0x1A17, 0x1A18, prExtend}, // Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U - {0x1A19, 0x1A1A, prExtend}, // Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O - {0x1A1B, 0x1A1B, prExtend}, // Mn BUGINESE VOWEL SIGN AE - {0x1A55, 0x1A55, prExtend}, // Mc TAI THAM CONSONANT SIGN MEDIAL RA - {0x1A56, 0x1A56, prExtend}, // Mn TAI THAM CONSONANT SIGN MEDIAL LA - {0x1A57, 0x1A57, prExtend}, // Mc TAI THAM CONSONANT SIGN LA TANG LAI - {0x1A58, 0x1A5E, prExtend}, // Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA - {0x1A60, 0x1A60, prExtend}, // Mn TAI THAM SIGN SAKOT - {0x1A61, 0x1A61, prExtend}, // Mc TAI THAM VOWEL SIGN A - {0x1A62, 0x1A62, prExtend}, // Mn TAI THAM VOWEL SIGN MAI SAT - {0x1A63, 0x1A64, prExtend}, // Mc [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA - {0x1A65, 0x1A6C, prExtend}, // Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW - {0x1A6D, 0x1A72, prExtend}, // Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI - {0x1A73, 0x1A7C, prExtend}, // Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN - {0x1A7F, 0x1A7F, prExtend}, // Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT - {0x1A80, 0x1A89, prNumeric}, // Nd [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE - {0x1A90, 0x1A99, prNumeric}, // Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE - {0x1AB0, 0x1ABD, prExtend}, // Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW - {0x1ABE, 0x1ABE, prExtend}, // Me COMBINING PARENTHESES OVERLAY - {0x1ABF, 0x1ACE, prExtend}, // Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T - {0x1B00, 0x1B03, prExtend}, // Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG - {0x1B04, 0x1B04, prExtend}, // Mc BALINESE SIGN BISAH - {0x1B05, 0x1B33, prALetter}, // Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA - {0x1B34, 0x1B34, prExtend}, // Mn BALINESE SIGN REREKAN - {0x1B35, 0x1B35, prExtend}, // Mc BALINESE VOWEL SIGN TEDUNG - {0x1B36, 0x1B3A, prExtend}, // Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA - {0x1B3B, 0x1B3B, prExtend}, // Mc BALINESE VOWEL SIGN RA REPA TEDUNG - {0x1B3C, 0x1B3C, prExtend}, // Mn BALINESE VOWEL SIGN LA LENGA - {0x1B3D, 0x1B41, prExtend}, // Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG - {0x1B42, 0x1B42, prExtend}, // Mn BALINESE VOWEL SIGN PEPET - {0x1B43, 0x1B44, prExtend}, // Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG - {0x1B45, 0x1B4C, prALetter}, // Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA - {0x1B50, 0x1B59, prNumeric}, // Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE - {0x1B6B, 0x1B73, prExtend}, // Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG - {0x1B80, 0x1B81, prExtend}, // Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR - {0x1B82, 0x1B82, prExtend}, // Mc SUNDANESE SIGN PANGWISAD - {0x1B83, 0x1BA0, prALetter}, // Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA - {0x1BA1, 0x1BA1, prExtend}, // Mc SUNDANESE CONSONANT SIGN PAMINGKAL - {0x1BA2, 0x1BA5, prExtend}, // Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU - {0x1BA6, 0x1BA7, prExtend}, // Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG - {0x1BA8, 0x1BA9, prExtend}, // Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG - {0x1BAA, 0x1BAA, prExtend}, // Mc SUNDANESE SIGN PAMAAEH - {0x1BAB, 0x1BAD, prExtend}, // Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA - {0x1BAE, 0x1BAF, prALetter}, // Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA - {0x1BB0, 0x1BB9, prNumeric}, // Nd [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE - {0x1BBA, 0x1BE5, prALetter}, // Lo [44] SUNDANESE AVAGRAHA..BATAK LETTER U - {0x1BE6, 0x1BE6, prExtend}, // Mn BATAK SIGN TOMPI - {0x1BE7, 0x1BE7, prExtend}, // Mc BATAK VOWEL SIGN E - {0x1BE8, 0x1BE9, prExtend}, // Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE - {0x1BEA, 0x1BEC, prExtend}, // Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O - {0x1BED, 0x1BED, prExtend}, // Mn BATAK VOWEL SIGN KARO O - {0x1BEE, 0x1BEE, prExtend}, // Mc BATAK VOWEL SIGN U - {0x1BEF, 0x1BF1, prExtend}, // Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H - {0x1BF2, 0x1BF3, prExtend}, // Mc [2] BATAK PANGOLAT..BATAK PANONGONAN - {0x1C00, 0x1C23, prALetter}, // Lo [36] LEPCHA LETTER KA..LEPCHA LETTER A - {0x1C24, 0x1C2B, prExtend}, // Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU - {0x1C2C, 0x1C33, prExtend}, // Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T - {0x1C34, 0x1C35, prExtend}, // Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG - {0x1C36, 0x1C37, prExtend}, // Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA - {0x1C40, 0x1C49, prNumeric}, // Nd [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE - {0x1C4D, 0x1C4F, prALetter}, // Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA - {0x1C50, 0x1C59, prNumeric}, // Nd [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE - {0x1C5A, 0x1C77, prALetter}, // Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH - {0x1C78, 0x1C7D, prALetter}, // Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD - {0x1C80, 0x1C88, prALetter}, // L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK - {0x1C90, 0x1CBA, prALetter}, // L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN - {0x1CBD, 0x1CBF, prALetter}, // L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN - {0x1CD0, 0x1CD2, prExtend}, // Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA - {0x1CD4, 0x1CE0, prExtend}, // Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA - {0x1CE1, 0x1CE1, prExtend}, // Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA - {0x1CE2, 0x1CE8, prExtend}, // Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL - {0x1CE9, 0x1CEC, prALetter}, // Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL - {0x1CED, 0x1CED, prExtend}, // Mn VEDIC SIGN TIRYAK - {0x1CEE, 0x1CF3, prALetter}, // Lo [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA - {0x1CF4, 0x1CF4, prExtend}, // Mn VEDIC TONE CANDRA ABOVE - {0x1CF5, 0x1CF6, prALetter}, // Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA - {0x1CF7, 0x1CF7, prExtend}, // Mc VEDIC SIGN ATIKRAMA - {0x1CF8, 0x1CF9, prExtend}, // Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE - {0x1CFA, 0x1CFA, prALetter}, // Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA - {0x1D00, 0x1D2B, prALetter}, // L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL - {0x1D2C, 0x1D6A, prALetter}, // Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI - {0x1D6B, 0x1D77, prALetter}, // L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G - {0x1D78, 0x1D78, prALetter}, // Lm MODIFIER LETTER CYRILLIC EN - {0x1D79, 0x1D9A, prALetter}, // L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK - {0x1D9B, 0x1DBF, prALetter}, // Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA - {0x1DC0, 0x1DFF, prExtend}, // Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW - {0x1E00, 0x1F15, prALetter}, // L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA - {0x1F18, 0x1F1D, prALetter}, // L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA - {0x1F20, 0x1F45, prALetter}, // L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA - {0x1F48, 0x1F4D, prALetter}, // L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA - {0x1F50, 0x1F57, prALetter}, // L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI - {0x1F59, 0x1F59, prALetter}, // L& GREEK CAPITAL LETTER UPSILON WITH DASIA - {0x1F5B, 0x1F5B, prALetter}, // L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA - {0x1F5D, 0x1F5D, prALetter}, // L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA - {0x1F5F, 0x1F7D, prALetter}, // L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA - {0x1F80, 0x1FB4, prALetter}, // L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI - {0x1FB6, 0x1FBC, prALetter}, // L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI - {0x1FBE, 0x1FBE, prALetter}, // L& GREEK PROSGEGRAMMENI - {0x1FC2, 0x1FC4, prALetter}, // L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI - {0x1FC6, 0x1FCC, prALetter}, // L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI - {0x1FD0, 0x1FD3, prALetter}, // L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA - {0x1FD6, 0x1FDB, prALetter}, // L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA - {0x1FE0, 0x1FEC, prALetter}, // L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA - {0x1FF2, 0x1FF4, prALetter}, // L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI - {0x1FF6, 0x1FFC, prALetter}, // L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI - {0x2000, 0x2006, prWSegSpace}, // Zs [7] EN QUAD..SIX-PER-EM SPACE - {0x2008, 0x200A, prWSegSpace}, // Zs [3] PUNCTUATION SPACE..HAIR SPACE - {0x200C, 0x200C, prExtend}, // Cf ZERO WIDTH NON-JOINER - {0x200D, 0x200D, prZWJ}, // Cf ZERO WIDTH JOINER - {0x200E, 0x200F, prFormat}, // Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK - {0x2018, 0x2018, prMidNumLet}, // Pi LEFT SINGLE QUOTATION MARK - {0x2019, 0x2019, prMidNumLet}, // Pf RIGHT SINGLE QUOTATION MARK - {0x2024, 0x2024, prMidNumLet}, // Po ONE DOT LEADER - {0x2027, 0x2027, prMidLetter}, // Po HYPHENATION POINT - {0x2028, 0x2028, prNewline}, // Zl LINE SEPARATOR - {0x2029, 0x2029, prNewline}, // Zp PARAGRAPH SEPARATOR - {0x202A, 0x202E, prFormat}, // Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE - {0x202F, 0x202F, prExtendNumLet}, // Zs NARROW NO-BREAK SPACE - {0x203C, 0x203C, prExtendedPictographic}, // E0.6 [1] (‼️) double exclamation mark - {0x203F, 0x2040, prExtendNumLet}, // Pc [2] UNDERTIE..CHARACTER TIE - {0x2044, 0x2044, prMidNum}, // Sm FRACTION SLASH - {0x2049, 0x2049, prExtendedPictographic}, // E0.6 [1] (⁉️) exclamation question mark - {0x2054, 0x2054, prExtendNumLet}, // Pc INVERTED UNDERTIE - {0x205F, 0x205F, prWSegSpace}, // Zs MEDIUM MATHEMATICAL SPACE - {0x2060, 0x2064, prFormat}, // Cf [5] WORD JOINER..INVISIBLE PLUS - {0x2066, 0x206F, prFormat}, // Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES - {0x2071, 0x2071, prALetter}, // Lm SUPERSCRIPT LATIN SMALL LETTER I - {0x207F, 0x207F, prALetter}, // Lm SUPERSCRIPT LATIN SMALL LETTER N - {0x2090, 0x209C, prALetter}, // Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T - {0x20D0, 0x20DC, prExtend}, // Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE - {0x20DD, 0x20E0, prExtend}, // Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH - {0x20E1, 0x20E1, prExtend}, // Mn COMBINING LEFT RIGHT ARROW ABOVE - {0x20E2, 0x20E4, prExtend}, // Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE - {0x20E5, 0x20F0, prExtend}, // Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE - {0x2102, 0x2102, prALetter}, // L& DOUBLE-STRUCK CAPITAL C - {0x2107, 0x2107, prALetter}, // L& EULER CONSTANT - {0x210A, 0x2113, prALetter}, // L& [10] SCRIPT SMALL G..SCRIPT SMALL L - {0x2115, 0x2115, prALetter}, // L& DOUBLE-STRUCK CAPITAL N - {0x2119, 0x211D, prALetter}, // L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R - {0x2122, 0x2122, prExtendedPictographic}, // E0.6 [1] (™️) trade mark - {0x2124, 0x2124, prALetter}, // L& DOUBLE-STRUCK CAPITAL Z - {0x2126, 0x2126, prALetter}, // L& OHM SIGN - {0x2128, 0x2128, prALetter}, // L& BLACK-LETTER CAPITAL Z - {0x212A, 0x212D, prALetter}, // L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C - {0x212F, 0x2134, prALetter}, // L& [6] SCRIPT SMALL E..SCRIPT SMALL O - {0x2135, 0x2138, prALetter}, // Lo [4] ALEF SYMBOL..DALET SYMBOL - {0x2139, 0x2139, prExtendedPictographic}, // E0.6 [1] (ℹ️) information - {0x2139, 0x2139, prALetter}, // L& INFORMATION SOURCE - {0x213C, 0x213F, prALetter}, // L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI - {0x2145, 0x2149, prALetter}, // L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J - {0x214E, 0x214E, prALetter}, // L& TURNED SMALL F - {0x2160, 0x2182, prALetter}, // Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND - {0x2183, 0x2184, prALetter}, // L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C - {0x2185, 0x2188, prALetter}, // Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND - {0x2194, 0x2199, prExtendedPictographic}, // E0.6 [6] (↔️..↙️) left-right arrow..down-left arrow - {0x21A9, 0x21AA, prExtendedPictographic}, // E0.6 [2] (↩️..↪️) right arrow curving left..left arrow curving right - {0x231A, 0x231B, prExtendedPictographic}, // E0.6 [2] (⌚..⌛) watch..hourglass done - {0x2328, 0x2328, prExtendedPictographic}, // E1.0 [1] (⌨️) keyboard - {0x2388, 0x2388, prExtendedPictographic}, // E0.0 [1] (⎈) HELM SYMBOL - {0x23CF, 0x23CF, prExtendedPictographic}, // E1.0 [1] (⏏️) eject button - {0x23E9, 0x23EC, prExtendedPictographic}, // E0.6 [4] (⏩..⏬) fast-forward button..fast down button - {0x23ED, 0x23EE, prExtendedPictographic}, // E0.7 [2] (⏭️..⏮️) next track button..last track button - {0x23EF, 0x23EF, prExtendedPictographic}, // E1.0 [1] (⏯️) play or pause button - {0x23F0, 0x23F0, prExtendedPictographic}, // E0.6 [1] (⏰) alarm clock - {0x23F1, 0x23F2, prExtendedPictographic}, // E1.0 [2] (⏱️..⏲️) stopwatch..timer clock - {0x23F3, 0x23F3, prExtendedPictographic}, // E0.6 [1] (⏳) hourglass not done - {0x23F8, 0x23FA, prExtendedPictographic}, // E0.7 [3] (⏸️..⏺️) pause button..record button - {0x24B6, 0x24E9, prALetter}, // So [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z - {0x24C2, 0x24C2, prExtendedPictographic}, // E0.6 [1] (Ⓜ️) circled M - {0x25AA, 0x25AB, prExtendedPictographic}, // E0.6 [2] (▪️..▫️) black small square..white small square - {0x25B6, 0x25B6, prExtendedPictographic}, // E0.6 [1] (▶️) play button - {0x25C0, 0x25C0, prExtendedPictographic}, // E0.6 [1] (◀️) reverse button - {0x25FB, 0x25FE, prExtendedPictographic}, // E0.6 [4] (◻️..◾) white medium square..black medium-small square - {0x2600, 0x2601, prExtendedPictographic}, // E0.6 [2] (☀️..☁️) sun..cloud - {0x2602, 0x2603, prExtendedPictographic}, // E0.7 [2] (☂️..☃️) umbrella..snowman - {0x2604, 0x2604, prExtendedPictographic}, // E1.0 [1] (☄️) comet - {0x2605, 0x2605, prExtendedPictographic}, // E0.0 [1] (★) BLACK STAR - {0x2607, 0x260D, prExtendedPictographic}, // E0.0 [7] (☇..☍) LIGHTNING..OPPOSITION - {0x260E, 0x260E, prExtendedPictographic}, // E0.6 [1] (☎️) telephone - {0x260F, 0x2610, prExtendedPictographic}, // E0.0 [2] (☏..☐) WHITE TELEPHONE..BALLOT BOX - {0x2611, 0x2611, prExtendedPictographic}, // E0.6 [1] (☑️) check box with check - {0x2612, 0x2612, prExtendedPictographic}, // E0.0 [1] (☒) BALLOT BOX WITH X - {0x2614, 0x2615, prExtendedPictographic}, // E0.6 [2] (☔..☕) umbrella with rain drops..hot beverage - {0x2616, 0x2617, prExtendedPictographic}, // E0.0 [2] (☖..☗) WHITE SHOGI PIECE..BLACK SHOGI PIECE - {0x2618, 0x2618, prExtendedPictographic}, // E1.0 [1] (☘️) shamrock - {0x2619, 0x261C, prExtendedPictographic}, // E0.0 [4] (☙..☜) REVERSED ROTATED FLORAL HEART BULLET..WHITE LEFT POINTING INDEX - {0x261D, 0x261D, prExtendedPictographic}, // E0.6 [1] (☝️) index pointing up - {0x261E, 0x261F, prExtendedPictographic}, // E0.0 [2] (☞..☟) WHITE RIGHT POINTING INDEX..WHITE DOWN POINTING INDEX - {0x2620, 0x2620, prExtendedPictographic}, // E1.0 [1] (☠️) skull and crossbones - {0x2621, 0x2621, prExtendedPictographic}, // E0.0 [1] (☡) CAUTION SIGN - {0x2622, 0x2623, prExtendedPictographic}, // E1.0 [2] (☢️..☣️) radioactive..biohazard - {0x2624, 0x2625, prExtendedPictographic}, // E0.0 [2] (☤..☥) CADUCEUS..ANKH - {0x2626, 0x2626, prExtendedPictographic}, // E1.0 [1] (☦️) orthodox cross - {0x2627, 0x2629, prExtendedPictographic}, // E0.0 [3] (☧..☩) CHI RHO..CROSS OF JERUSALEM - {0x262A, 0x262A, prExtendedPictographic}, // E0.7 [1] (☪️) star and crescent - {0x262B, 0x262D, prExtendedPictographic}, // E0.0 [3] (☫..☭) FARSI SYMBOL..HAMMER AND SICKLE - {0x262E, 0x262E, prExtendedPictographic}, // E1.0 [1] (☮️) peace symbol - {0x262F, 0x262F, prExtendedPictographic}, // E0.7 [1] (☯️) yin yang - {0x2630, 0x2637, prExtendedPictographic}, // E0.0 [8] (☰..☷) TRIGRAM FOR HEAVEN..TRIGRAM FOR EARTH - {0x2638, 0x2639, prExtendedPictographic}, // E0.7 [2] (☸️..☹️) wheel of dharma..frowning face - {0x263A, 0x263A, prExtendedPictographic}, // E0.6 [1] (☺️) smiling face - {0x263B, 0x263F, prExtendedPictographic}, // E0.0 [5] (☻..☿) BLACK SMILING FACE..MERCURY - {0x2640, 0x2640, prExtendedPictographic}, // E4.0 [1] (♀️) female sign - {0x2641, 0x2641, prExtendedPictographic}, // E0.0 [1] (♁) EARTH - {0x2642, 0x2642, prExtendedPictographic}, // E4.0 [1] (♂️) male sign - {0x2643, 0x2647, prExtendedPictographic}, // E0.0 [5] (♃..♇) JUPITER..PLUTO - {0x2648, 0x2653, prExtendedPictographic}, // E0.6 [12] (♈..♓) Aries..Pisces - {0x2654, 0x265E, prExtendedPictographic}, // E0.0 [11] (♔..♞) WHITE CHESS KING..BLACK CHESS KNIGHT - {0x265F, 0x265F, prExtendedPictographic}, // E11.0 [1] (♟️) chess pawn - {0x2660, 0x2660, prExtendedPictographic}, // E0.6 [1] (♠️) spade suit - {0x2661, 0x2662, prExtendedPictographic}, // E0.0 [2] (♡..♢) WHITE HEART SUIT..WHITE DIAMOND SUIT - {0x2663, 0x2663, prExtendedPictographic}, // E0.6 [1] (♣️) club suit - {0x2664, 0x2664, prExtendedPictographic}, // E0.0 [1] (♤) WHITE SPADE SUIT - {0x2665, 0x2666, prExtendedPictographic}, // E0.6 [2] (♥️..♦️) heart suit..diamond suit - {0x2667, 0x2667, prExtendedPictographic}, // E0.0 [1] (♧) WHITE CLUB SUIT - {0x2668, 0x2668, prExtendedPictographic}, // E0.6 [1] (♨️) hot springs - {0x2669, 0x267A, prExtendedPictographic}, // E0.0 [18] (♩..♺) QUARTER NOTE..RECYCLING SYMBOL FOR GENERIC MATERIALS - {0x267B, 0x267B, prExtendedPictographic}, // E0.6 [1] (♻️) recycling symbol - {0x267C, 0x267D, prExtendedPictographic}, // E0.0 [2] (♼..♽) RECYCLED PAPER SYMBOL..PARTIALLY-RECYCLED PAPER SYMBOL - {0x267E, 0x267E, prExtendedPictographic}, // E11.0 [1] (♾️) infinity - {0x267F, 0x267F, prExtendedPictographic}, // E0.6 [1] (♿) wheelchair symbol - {0x2680, 0x2685, prExtendedPictographic}, // E0.0 [6] (⚀..⚅) DIE FACE-1..DIE FACE-6 - {0x2690, 0x2691, prExtendedPictographic}, // E0.0 [2] (⚐..⚑) WHITE FLAG..BLACK FLAG - {0x2692, 0x2692, prExtendedPictographic}, // E1.0 [1] (⚒️) hammer and pick - {0x2693, 0x2693, prExtendedPictographic}, // E0.6 [1] (⚓) anchor - {0x2694, 0x2694, prExtendedPictographic}, // E1.0 [1] (⚔️) crossed swords - {0x2695, 0x2695, prExtendedPictographic}, // E4.0 [1] (⚕️) medical symbol - {0x2696, 0x2697, prExtendedPictographic}, // E1.0 [2] (⚖️..⚗️) balance scale..alembic - {0x2698, 0x2698, prExtendedPictographic}, // E0.0 [1] (⚘) FLOWER - {0x2699, 0x2699, prExtendedPictographic}, // E1.0 [1] (⚙️) gear - {0x269A, 0x269A, prExtendedPictographic}, // E0.0 [1] (⚚) STAFF OF HERMES - {0x269B, 0x269C, prExtendedPictographic}, // E1.0 [2] (⚛️..⚜️) atom symbol..fleur-de-lis - {0x269D, 0x269F, prExtendedPictographic}, // E0.0 [3] (⚝..⚟) OUTLINED WHITE STAR..THREE LINES CONVERGING LEFT - {0x26A0, 0x26A1, prExtendedPictographic}, // E0.6 [2] (⚠️..⚡) warning..high voltage - {0x26A2, 0x26A6, prExtendedPictographic}, // E0.0 [5] (⚢..⚦) DOUBLED FEMALE SIGN..MALE WITH STROKE SIGN - {0x26A7, 0x26A7, prExtendedPictographic}, // E13.0 [1] (⚧️) transgender symbol - {0x26A8, 0x26A9, prExtendedPictographic}, // E0.0 [2] (⚨..⚩) VERTICAL MALE WITH STROKE SIGN..HORIZONTAL MALE WITH STROKE SIGN - {0x26AA, 0x26AB, prExtendedPictographic}, // E0.6 [2] (⚪..⚫) white circle..black circle - {0x26AC, 0x26AF, prExtendedPictographic}, // E0.0 [4] (⚬..⚯) MEDIUM SMALL WHITE CIRCLE..UNMARRIED PARTNERSHIP SYMBOL - {0x26B0, 0x26B1, prExtendedPictographic}, // E1.0 [2] (⚰️..⚱️) coffin..funeral urn - {0x26B2, 0x26BC, prExtendedPictographic}, // E0.0 [11] (⚲..⚼) NEUTER..SESQUIQUADRATE - {0x26BD, 0x26BE, prExtendedPictographic}, // E0.6 [2] (⚽..⚾) soccer ball..baseball - {0x26BF, 0x26C3, prExtendedPictographic}, // E0.0 [5] (⚿..⛃) SQUARED KEY..BLACK DRAUGHTS KING - {0x26C4, 0x26C5, prExtendedPictographic}, // E0.6 [2] (⛄..⛅) snowman without snow..sun behind cloud - {0x26C6, 0x26C7, prExtendedPictographic}, // E0.0 [2] (⛆..⛇) RAIN..BLACK SNOWMAN - {0x26C8, 0x26C8, prExtendedPictographic}, // E0.7 [1] (⛈️) cloud with lightning and rain - {0x26C9, 0x26CD, prExtendedPictographic}, // E0.0 [5] (⛉..⛍) TURNED WHITE SHOGI PIECE..DISABLED CAR - {0x26CE, 0x26CE, prExtendedPictographic}, // E0.6 [1] (⛎) Ophiuchus - {0x26CF, 0x26CF, prExtendedPictographic}, // E0.7 [1] (⛏️) pick - {0x26D0, 0x26D0, prExtendedPictographic}, // E0.0 [1] (⛐) CAR SLIDING - {0x26D1, 0x26D1, prExtendedPictographic}, // E0.7 [1] (⛑️) rescue worker’s helmet - {0x26D2, 0x26D2, prExtendedPictographic}, // E0.0 [1] (⛒) CIRCLED CROSSING LANES - {0x26D3, 0x26D3, prExtendedPictographic}, // E0.7 [1] (⛓️) chains - {0x26D4, 0x26D4, prExtendedPictographic}, // E0.6 [1] (⛔) no entry - {0x26D5, 0x26E8, prExtendedPictographic}, // E0.0 [20] (⛕..⛨) ALTERNATE ONE-WAY LEFT WAY TRAFFIC..BLACK CROSS ON SHIELD - {0x26E9, 0x26E9, prExtendedPictographic}, // E0.7 [1] (⛩️) shinto shrine - {0x26EA, 0x26EA, prExtendedPictographic}, // E0.6 [1] (⛪) church - {0x26EB, 0x26EF, prExtendedPictographic}, // E0.0 [5] (⛫..⛯) CASTLE..MAP SYMBOL FOR LIGHTHOUSE - {0x26F0, 0x26F1, prExtendedPictographic}, // E0.7 [2] (⛰️..⛱️) mountain..umbrella on ground - {0x26F2, 0x26F3, prExtendedPictographic}, // E0.6 [2] (⛲..⛳) fountain..flag in hole - {0x26F4, 0x26F4, prExtendedPictographic}, // E0.7 [1] (⛴️) ferry - {0x26F5, 0x26F5, prExtendedPictographic}, // E0.6 [1] (⛵) sailboat - {0x26F6, 0x26F6, prExtendedPictographic}, // E0.0 [1] (⛶) SQUARE FOUR CORNERS - {0x26F7, 0x26F9, prExtendedPictographic}, // E0.7 [3] (⛷️..⛹️) skier..person bouncing ball - {0x26FA, 0x26FA, prExtendedPictographic}, // E0.6 [1] (⛺) tent - {0x26FB, 0x26FC, prExtendedPictographic}, // E0.0 [2] (⛻..⛼) JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL - {0x26FD, 0x26FD, prExtendedPictographic}, // E0.6 [1] (⛽) fuel pump - {0x26FE, 0x2701, prExtendedPictographic}, // E0.0 [4] (⛾..✁) CUP ON BLACK SQUARE..UPPER BLADE SCISSORS - {0x2702, 0x2702, prExtendedPictographic}, // E0.6 [1] (✂️) scissors - {0x2703, 0x2704, prExtendedPictographic}, // E0.0 [2] (✃..✄) LOWER BLADE SCISSORS..WHITE SCISSORS - {0x2705, 0x2705, prExtendedPictographic}, // E0.6 [1] (✅) check mark button - {0x2708, 0x270C, prExtendedPictographic}, // E0.6 [5] (✈️..✌️) airplane..victory hand - {0x270D, 0x270D, prExtendedPictographic}, // E0.7 [1] (✍️) writing hand - {0x270E, 0x270E, prExtendedPictographic}, // E0.0 [1] (✎) LOWER RIGHT PENCIL - {0x270F, 0x270F, prExtendedPictographic}, // E0.6 [1] (✏️) pencil - {0x2710, 0x2711, prExtendedPictographic}, // E0.0 [2] (✐..✑) UPPER RIGHT PENCIL..WHITE NIB - {0x2712, 0x2712, prExtendedPictographic}, // E0.6 [1] (✒️) black nib - {0x2714, 0x2714, prExtendedPictographic}, // E0.6 [1] (✔️) check mark - {0x2716, 0x2716, prExtendedPictographic}, // E0.6 [1] (✖️) multiply - {0x271D, 0x271D, prExtendedPictographic}, // E0.7 [1] (✝️) latin cross - {0x2721, 0x2721, prExtendedPictographic}, // E0.7 [1] (✡️) star of David - {0x2728, 0x2728, prExtendedPictographic}, // E0.6 [1] (✨) sparkles - {0x2733, 0x2734, prExtendedPictographic}, // E0.6 [2] (✳️..✴️) eight-spoked asterisk..eight-pointed star - {0x2744, 0x2744, prExtendedPictographic}, // E0.6 [1] (❄️) snowflake - {0x2747, 0x2747, prExtendedPictographic}, // E0.6 [1] (❇️) sparkle - {0x274C, 0x274C, prExtendedPictographic}, // E0.6 [1] (❌) cross mark - {0x274E, 0x274E, prExtendedPictographic}, // E0.6 [1] (❎) cross mark button - {0x2753, 0x2755, prExtendedPictographic}, // E0.6 [3] (❓..❕) red question mark..white exclamation mark - {0x2757, 0x2757, prExtendedPictographic}, // E0.6 [1] (❗) red exclamation mark - {0x2763, 0x2763, prExtendedPictographic}, // E1.0 [1] (❣️) heart exclamation - {0x2764, 0x2764, prExtendedPictographic}, // E0.6 [1] (❤️) red heart - {0x2765, 0x2767, prExtendedPictographic}, // E0.0 [3] (❥..❧) ROTATED HEAVY BLACK HEART BULLET..ROTATED FLORAL HEART BULLET - {0x2795, 0x2797, prExtendedPictographic}, // E0.6 [3] (➕..➗) plus..divide - {0x27A1, 0x27A1, prExtendedPictographic}, // E0.6 [1] (➡️) right arrow - {0x27B0, 0x27B0, prExtendedPictographic}, // E0.6 [1] (➰) curly loop - {0x27BF, 0x27BF, prExtendedPictographic}, // E1.0 [1] (➿) double curly loop - {0x2934, 0x2935, prExtendedPictographic}, // E0.6 [2] (⤴️..⤵️) right arrow curving up..right arrow curving down - {0x2B05, 0x2B07, prExtendedPictographic}, // E0.6 [3] (⬅️..⬇️) left arrow..down arrow - {0x2B1B, 0x2B1C, prExtendedPictographic}, // E0.6 [2] (⬛..⬜) black large square..white large square - {0x2B50, 0x2B50, prExtendedPictographic}, // E0.6 [1] (⭐) star - {0x2B55, 0x2B55, prExtendedPictographic}, // E0.6 [1] (⭕) hollow red circle - {0x2C00, 0x2C7B, prALetter}, // L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E - {0x2C7C, 0x2C7D, prALetter}, // Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V - {0x2C7E, 0x2CE4, prALetter}, // L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI - {0x2CEB, 0x2CEE, prALetter}, // L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA - {0x2CEF, 0x2CF1, prExtend}, // Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS - {0x2CF2, 0x2CF3, prALetter}, // L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI - {0x2D00, 0x2D25, prALetter}, // L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE - {0x2D27, 0x2D27, prALetter}, // L& GEORGIAN SMALL LETTER YN - {0x2D2D, 0x2D2D, prALetter}, // L& GEORGIAN SMALL LETTER AEN - {0x2D30, 0x2D67, prALetter}, // Lo [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO - {0x2D6F, 0x2D6F, prALetter}, // Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK - {0x2D7F, 0x2D7F, prExtend}, // Mn TIFINAGH CONSONANT JOINER - {0x2D80, 0x2D96, prALetter}, // Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE - {0x2DA0, 0x2DA6, prALetter}, // Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO - {0x2DA8, 0x2DAE, prALetter}, // Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO - {0x2DB0, 0x2DB6, prALetter}, // Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO - {0x2DB8, 0x2DBE, prALetter}, // Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO - {0x2DC0, 0x2DC6, prALetter}, // Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO - {0x2DC8, 0x2DCE, prALetter}, // Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO - {0x2DD0, 0x2DD6, prALetter}, // Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO - {0x2DD8, 0x2DDE, prALetter}, // Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO - {0x2DE0, 0x2DFF, prExtend}, // Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS - {0x2E2F, 0x2E2F, prALetter}, // Lm VERTICAL TILDE - {0x3000, 0x3000, prWSegSpace}, // Zs IDEOGRAPHIC SPACE - {0x3005, 0x3005, prALetter}, // Lm IDEOGRAPHIC ITERATION MARK - {0x302A, 0x302D, prExtend}, // Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK - {0x302E, 0x302F, prExtend}, // Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK - {0x3030, 0x3030, prExtendedPictographic}, // E0.6 [1] (〰️) wavy dash - {0x3031, 0x3035, prKatakana}, // Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF - {0x303B, 0x303B, prALetter}, // Lm VERTICAL IDEOGRAPHIC ITERATION MARK - {0x303C, 0x303C, prALetter}, // Lo MASU MARK - {0x303D, 0x303D, prExtendedPictographic}, // E0.6 [1] (〽️) part alternation mark - {0x3099, 0x309A, prExtend}, // Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK - {0x309B, 0x309C, prKatakana}, // Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK - {0x30A0, 0x30A0, prKatakana}, // Pd KATAKANA-HIRAGANA DOUBLE HYPHEN - {0x30A1, 0x30FA, prKatakana}, // Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO - {0x30FC, 0x30FE, prKatakana}, // Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK - {0x30FF, 0x30FF, prKatakana}, // Lo KATAKANA DIGRAPH KOTO - {0x3105, 0x312F, prALetter}, // Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN - {0x3131, 0x318E, prALetter}, // Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE - {0x31A0, 0x31BF, prALetter}, // Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH - {0x31F0, 0x31FF, prKatakana}, // Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO - {0x3297, 0x3297, prExtendedPictographic}, // E0.6 [1] (㊗️) Japanese “congratulations” button - {0x3299, 0x3299, prExtendedPictographic}, // E0.6 [1] (㊙️) Japanese “secret” button - {0x32D0, 0x32FE, prKatakana}, // So [47] CIRCLED KATAKANA A..CIRCLED KATAKANA WO - {0x3300, 0x3357, prKatakana}, // So [88] SQUARE APAATO..SQUARE WATTO - {0xA000, 0xA014, prALetter}, // Lo [21] YI SYLLABLE IT..YI SYLLABLE E - {0xA015, 0xA015, prALetter}, // Lm YI SYLLABLE WU - {0xA016, 0xA48C, prALetter}, // Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR - {0xA4D0, 0xA4F7, prALetter}, // Lo [40] LISU LETTER BA..LISU LETTER OE - {0xA4F8, 0xA4FD, prALetter}, // Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU - {0xA500, 0xA60B, prALetter}, // Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG - {0xA60C, 0xA60C, prALetter}, // Lm VAI SYLLABLE LENGTHENER - {0xA610, 0xA61F, prALetter}, // Lo [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG - {0xA620, 0xA629, prNumeric}, // Nd [10] VAI DIGIT ZERO..VAI DIGIT NINE - {0xA62A, 0xA62B, prALetter}, // Lo [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO - {0xA640, 0xA66D, prALetter}, // L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O - {0xA66E, 0xA66E, prALetter}, // Lo CYRILLIC LETTER MULTIOCULAR O - {0xA66F, 0xA66F, prExtend}, // Mn COMBINING CYRILLIC VZMET - {0xA670, 0xA672, prExtend}, // Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN - {0xA674, 0xA67D, prExtend}, // Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK - {0xA67F, 0xA67F, prALetter}, // Lm CYRILLIC PAYEROK - {0xA680, 0xA69B, prALetter}, // L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O - {0xA69C, 0xA69D, prALetter}, // Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN - {0xA69E, 0xA69F, prExtend}, // Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E - {0xA6A0, 0xA6E5, prALetter}, // Lo [70] BAMUM LETTER A..BAMUM LETTER KI - {0xA6E6, 0xA6EF, prALetter}, // Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM - {0xA6F0, 0xA6F1, prExtend}, // Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS - {0xA708, 0xA716, prALetter}, // Sk [15] MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR - {0xA717, 0xA71F, prALetter}, // Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK - {0xA720, 0xA721, prALetter}, // Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE - {0xA722, 0xA76F, prALetter}, // L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON - {0xA770, 0xA770, prALetter}, // Lm MODIFIER LETTER US - {0xA771, 0xA787, prALetter}, // L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T - {0xA788, 0xA788, prALetter}, // Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT - {0xA789, 0xA78A, prALetter}, // Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN - {0xA78B, 0xA78E, prALetter}, // L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT - {0xA78F, 0xA78F, prALetter}, // Lo LATIN LETTER SINOLOGICAL DOT - {0xA790, 0xA7CA, prALetter}, // L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY - {0xA7D0, 0xA7D1, prALetter}, // L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G - {0xA7D3, 0xA7D3, prALetter}, // L& LATIN SMALL LETTER DOUBLE THORN - {0xA7D5, 0xA7D9, prALetter}, // L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S - {0xA7F2, 0xA7F4, prALetter}, // Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q - {0xA7F5, 0xA7F6, prALetter}, // L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H - {0xA7F7, 0xA7F7, prALetter}, // Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I - {0xA7F8, 0xA7F9, prALetter}, // Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE - {0xA7FA, 0xA7FA, prALetter}, // L& LATIN LETTER SMALL CAPITAL TURNED M - {0xA7FB, 0xA801, prALetter}, // Lo [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I - {0xA802, 0xA802, prExtend}, // Mn SYLOTI NAGRI SIGN DVISVARA - {0xA803, 0xA805, prALetter}, // Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O - {0xA806, 0xA806, prExtend}, // Mn SYLOTI NAGRI SIGN HASANTA - {0xA807, 0xA80A, prALetter}, // Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO - {0xA80B, 0xA80B, prExtend}, // Mn SYLOTI NAGRI SIGN ANUSVARA - {0xA80C, 0xA822, prALetter}, // Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO - {0xA823, 0xA824, prExtend}, // Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I - {0xA825, 0xA826, prExtend}, // Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E - {0xA827, 0xA827, prExtend}, // Mc SYLOTI NAGRI VOWEL SIGN OO - {0xA82C, 0xA82C, prExtend}, // Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA - {0xA840, 0xA873, prALetter}, // Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU - {0xA880, 0xA881, prExtend}, // Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA - {0xA882, 0xA8B3, prALetter}, // Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA - {0xA8B4, 0xA8C3, prExtend}, // Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU - {0xA8C4, 0xA8C5, prExtend}, // Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU - {0xA8D0, 0xA8D9, prNumeric}, // Nd [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE - {0xA8E0, 0xA8F1, prExtend}, // Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA - {0xA8F2, 0xA8F7, prALetter}, // Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA - {0xA8FB, 0xA8FB, prALetter}, // Lo DEVANAGARI HEADSTROKE - {0xA8FD, 0xA8FE, prALetter}, // Lo [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY - {0xA8FF, 0xA8FF, prExtend}, // Mn DEVANAGARI VOWEL SIGN AY - {0xA900, 0xA909, prNumeric}, // Nd [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE - {0xA90A, 0xA925, prALetter}, // Lo [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO - {0xA926, 0xA92D, prExtend}, // Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU - {0xA930, 0xA946, prALetter}, // Lo [23] REJANG LETTER KA..REJANG LETTER A - {0xA947, 0xA951, prExtend}, // Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R - {0xA952, 0xA953, prExtend}, // Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA - {0xA960, 0xA97C, prALetter}, // Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH - {0xA980, 0xA982, prExtend}, // Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR - {0xA983, 0xA983, prExtend}, // Mc JAVANESE SIGN WIGNYAN - {0xA984, 0xA9B2, prALetter}, // Lo [47] JAVANESE LETTER A..JAVANESE LETTER HA - {0xA9B3, 0xA9B3, prExtend}, // Mn JAVANESE SIGN CECAK TELU - {0xA9B4, 0xA9B5, prExtend}, // Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG - {0xA9B6, 0xA9B9, prExtend}, // Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT - {0xA9BA, 0xA9BB, prExtend}, // Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE - {0xA9BC, 0xA9BD, prExtend}, // Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET - {0xA9BE, 0xA9C0, prExtend}, // Mc [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON - {0xA9CF, 0xA9CF, prALetter}, // Lm JAVANESE PANGRANGKEP - {0xA9D0, 0xA9D9, prNumeric}, // Nd [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE - {0xA9E5, 0xA9E5, prExtend}, // Mn MYANMAR SIGN SHAN SAW - {0xA9F0, 0xA9F9, prNumeric}, // Nd [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE - {0xAA00, 0xAA28, prALetter}, // Lo [41] CHAM LETTER A..CHAM LETTER HA - {0xAA29, 0xAA2E, prExtend}, // Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE - {0xAA2F, 0xAA30, prExtend}, // Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI - {0xAA31, 0xAA32, prExtend}, // Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE - {0xAA33, 0xAA34, prExtend}, // Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA - {0xAA35, 0xAA36, prExtend}, // Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA - {0xAA40, 0xAA42, prALetter}, // Lo [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG - {0xAA43, 0xAA43, prExtend}, // Mn CHAM CONSONANT SIGN FINAL NG - {0xAA44, 0xAA4B, prALetter}, // Lo [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS - {0xAA4C, 0xAA4C, prExtend}, // Mn CHAM CONSONANT SIGN FINAL M - {0xAA4D, 0xAA4D, prExtend}, // Mc CHAM CONSONANT SIGN FINAL H - {0xAA50, 0xAA59, prNumeric}, // Nd [10] CHAM DIGIT ZERO..CHAM DIGIT NINE - {0xAA7B, 0xAA7B, prExtend}, // Mc MYANMAR SIGN PAO KAREN TONE - {0xAA7C, 0xAA7C, prExtend}, // Mn MYANMAR SIGN TAI LAING TONE-2 - {0xAA7D, 0xAA7D, prExtend}, // Mc MYANMAR SIGN TAI LAING TONE-5 - {0xAAB0, 0xAAB0, prExtend}, // Mn TAI VIET MAI KANG - {0xAAB2, 0xAAB4, prExtend}, // Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U - {0xAAB7, 0xAAB8, prExtend}, // Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA - {0xAABE, 0xAABF, prExtend}, // Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK - {0xAAC1, 0xAAC1, prExtend}, // Mn TAI VIET TONE MAI THO - {0xAAE0, 0xAAEA, prALetter}, // Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA - {0xAAEB, 0xAAEB, prExtend}, // Mc MEETEI MAYEK VOWEL SIGN II - {0xAAEC, 0xAAED, prExtend}, // Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI - {0xAAEE, 0xAAEF, prExtend}, // Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU - {0xAAF2, 0xAAF2, prALetter}, // Lo MEETEI MAYEK ANJI - {0xAAF3, 0xAAF4, prALetter}, // Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK - {0xAAF5, 0xAAF5, prExtend}, // Mc MEETEI MAYEK VOWEL SIGN VISARGA - {0xAAF6, 0xAAF6, prExtend}, // Mn MEETEI MAYEK VIRAMA - {0xAB01, 0xAB06, prALetter}, // Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO - {0xAB09, 0xAB0E, prALetter}, // Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO - {0xAB11, 0xAB16, prALetter}, // Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO - {0xAB20, 0xAB26, prALetter}, // Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO - {0xAB28, 0xAB2E, prALetter}, // Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO - {0xAB30, 0xAB5A, prALetter}, // L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG - {0xAB5B, 0xAB5B, prALetter}, // Sk MODIFIER BREVE WITH INVERTED BREVE - {0xAB5C, 0xAB5F, prALetter}, // Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK - {0xAB60, 0xAB68, prALetter}, // L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE - {0xAB69, 0xAB69, prALetter}, // Lm MODIFIER LETTER SMALL TURNED W - {0xAB70, 0xABBF, prALetter}, // L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA - {0xABC0, 0xABE2, prALetter}, // Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM - {0xABE3, 0xABE4, prExtend}, // Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP - {0xABE5, 0xABE5, prExtend}, // Mn MEETEI MAYEK VOWEL SIGN ANAP - {0xABE6, 0xABE7, prExtend}, // Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP - {0xABE8, 0xABE8, prExtend}, // Mn MEETEI MAYEK VOWEL SIGN UNAP - {0xABE9, 0xABEA, prExtend}, // Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG - {0xABEC, 0xABEC, prExtend}, // Mc MEETEI MAYEK LUM IYEK - {0xABED, 0xABED, prExtend}, // Mn MEETEI MAYEK APUN IYEK - {0xABF0, 0xABF9, prNumeric}, // Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE - {0xAC00, 0xD7A3, prALetter}, // Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH - {0xD7B0, 0xD7C6, prALetter}, // Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E - {0xD7CB, 0xD7FB, prALetter}, // Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH - {0xFB00, 0xFB06, prALetter}, // L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST - {0xFB13, 0xFB17, prALetter}, // L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH - {0xFB1D, 0xFB1D, prHebrewLetter}, // Lo HEBREW LETTER YOD WITH HIRIQ - {0xFB1E, 0xFB1E, prExtend}, // Mn HEBREW POINT JUDEO-SPANISH VARIKA - {0xFB1F, 0xFB28, prHebrewLetter}, // Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV - {0xFB2A, 0xFB36, prHebrewLetter}, // Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH - {0xFB38, 0xFB3C, prHebrewLetter}, // Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH - {0xFB3E, 0xFB3E, prHebrewLetter}, // Lo HEBREW LETTER MEM WITH DAGESH - {0xFB40, 0xFB41, prHebrewLetter}, // Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH - {0xFB43, 0xFB44, prHebrewLetter}, // Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH - {0xFB46, 0xFB4F, prHebrewLetter}, // Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED - {0xFB50, 0xFBB1, prALetter}, // Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM - {0xFBD3, 0xFD3D, prALetter}, // Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM - {0xFD50, 0xFD8F, prALetter}, // Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM - {0xFD92, 0xFDC7, prALetter}, // Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM - {0xFDF0, 0xFDFB, prALetter}, // Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU - {0xFE00, 0xFE0F, prExtend}, // Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 - {0xFE10, 0xFE10, prMidNum}, // Po PRESENTATION FORM FOR VERTICAL COMMA - {0xFE13, 0xFE13, prMidLetter}, // Po PRESENTATION FORM FOR VERTICAL COLON - {0xFE14, 0xFE14, prMidNum}, // Po PRESENTATION FORM FOR VERTICAL SEMICOLON - {0xFE20, 0xFE2F, prExtend}, // Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF - {0xFE33, 0xFE34, prExtendNumLet}, // Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE - {0xFE4D, 0xFE4F, prExtendNumLet}, // Pc [3] DASHED LOW LINE..WAVY LOW LINE - {0xFE50, 0xFE50, prMidNum}, // Po SMALL COMMA - {0xFE52, 0xFE52, prMidNumLet}, // Po SMALL FULL STOP - {0xFE54, 0xFE54, prMidNum}, // Po SMALL SEMICOLON - {0xFE55, 0xFE55, prMidLetter}, // Po SMALL COLON - {0xFE70, 0xFE74, prALetter}, // Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM - {0xFE76, 0xFEFC, prALetter}, // Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM - {0xFEFF, 0xFEFF, prFormat}, // Cf ZERO WIDTH NO-BREAK SPACE - {0xFF07, 0xFF07, prMidNumLet}, // Po FULLWIDTH APOSTROPHE - {0xFF0C, 0xFF0C, prMidNum}, // Po FULLWIDTH COMMA - {0xFF0E, 0xFF0E, prMidNumLet}, // Po FULLWIDTH FULL STOP - {0xFF10, 0xFF19, prNumeric}, // Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE - {0xFF1A, 0xFF1A, prMidLetter}, // Po FULLWIDTH COLON - {0xFF1B, 0xFF1B, prMidNum}, // Po FULLWIDTH SEMICOLON - {0xFF21, 0xFF3A, prALetter}, // L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z - {0xFF3F, 0xFF3F, prExtendNumLet}, // Pc FULLWIDTH LOW LINE - {0xFF41, 0xFF5A, prALetter}, // L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z - {0xFF66, 0xFF6F, prKatakana}, // Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU - {0xFF70, 0xFF70, prKatakana}, // Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK - {0xFF71, 0xFF9D, prKatakana}, // Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N - {0xFF9E, 0xFF9F, prExtend}, // Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK - {0xFFA0, 0xFFBE, prALetter}, // Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH - {0xFFC2, 0xFFC7, prALetter}, // Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E - {0xFFCA, 0xFFCF, prALetter}, // Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE - {0xFFD2, 0xFFD7, prALetter}, // Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU - {0xFFDA, 0xFFDC, prALetter}, // Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I - {0xFFF9, 0xFFFB, prFormat}, // Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR - {0x10000, 0x1000B, prALetter}, // Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE - {0x1000D, 0x10026, prALetter}, // Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO - {0x10028, 0x1003A, prALetter}, // Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO - {0x1003C, 0x1003D, prALetter}, // Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE - {0x1003F, 0x1004D, prALetter}, // Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO - {0x10050, 0x1005D, prALetter}, // Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089 - {0x10080, 0x100FA, prALetter}, // Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305 - {0x10140, 0x10174, prALetter}, // Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS - {0x101FD, 0x101FD, prExtend}, // Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE - {0x10280, 0x1029C, prALetter}, // Lo [29] LYCIAN LETTER A..LYCIAN LETTER X - {0x102A0, 0x102D0, prALetter}, // Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3 - {0x102E0, 0x102E0, prExtend}, // Mn COPTIC EPACT THOUSANDS MARK - {0x10300, 0x1031F, prALetter}, // Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS - {0x1032D, 0x10340, prALetter}, // Lo [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA - {0x10341, 0x10341, prALetter}, // Nl GOTHIC LETTER NINETY - {0x10342, 0x10349, prALetter}, // Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL - {0x1034A, 0x1034A, prALetter}, // Nl GOTHIC LETTER NINE HUNDRED - {0x10350, 0x10375, prALetter}, // Lo [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA - {0x10376, 0x1037A, prExtend}, // Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII - {0x10380, 0x1039D, prALetter}, // Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU - {0x103A0, 0x103C3, prALetter}, // Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA - {0x103C8, 0x103CF, prALetter}, // Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH - {0x103D1, 0x103D5, prALetter}, // Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED - {0x10400, 0x1044F, prALetter}, // L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW - {0x10450, 0x1049D, prALetter}, // Lo [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO - {0x104A0, 0x104A9, prNumeric}, // Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE - {0x104B0, 0x104D3, prALetter}, // L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA - {0x104D8, 0x104FB, prALetter}, // L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA - {0x10500, 0x10527, prALetter}, // Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE - {0x10530, 0x10563, prALetter}, // Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW - {0x10570, 0x1057A, prALetter}, // L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA - {0x1057C, 0x1058A, prALetter}, // L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE - {0x1058C, 0x10592, prALetter}, // L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE - {0x10594, 0x10595, prALetter}, // L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE - {0x10597, 0x105A1, prALetter}, // L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA - {0x105A3, 0x105B1, prALetter}, // L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE - {0x105B3, 0x105B9, prALetter}, // L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE - {0x105BB, 0x105BC, prALetter}, // L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE - {0x10600, 0x10736, prALetter}, // Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 - {0x10740, 0x10755, prALetter}, // Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE - {0x10760, 0x10767, prALetter}, // Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 - {0x10780, 0x10785, prALetter}, // Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK - {0x10787, 0x107B0, prALetter}, // Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK - {0x107B2, 0x107BA, prALetter}, // Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL - {0x10800, 0x10805, prALetter}, // Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA - {0x10808, 0x10808, prALetter}, // Lo CYPRIOT SYLLABLE JO - {0x1080A, 0x10835, prALetter}, // Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO - {0x10837, 0x10838, prALetter}, // Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE - {0x1083C, 0x1083C, prALetter}, // Lo CYPRIOT SYLLABLE ZA - {0x1083F, 0x10855, prALetter}, // Lo [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW - {0x10860, 0x10876, prALetter}, // Lo [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW - {0x10880, 0x1089E, prALetter}, // Lo [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW - {0x108E0, 0x108F2, prALetter}, // Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH - {0x108F4, 0x108F5, prALetter}, // Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW - {0x10900, 0x10915, prALetter}, // Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU - {0x10920, 0x10939, prALetter}, // Lo [26] LYDIAN LETTER A..LYDIAN LETTER C - {0x10980, 0x109B7, prALetter}, // Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA - {0x109BE, 0x109BF, prALetter}, // Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN - {0x10A00, 0x10A00, prALetter}, // Lo KHAROSHTHI LETTER A - {0x10A01, 0x10A03, prExtend}, // Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R - {0x10A05, 0x10A06, prExtend}, // Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O - {0x10A0C, 0x10A0F, prExtend}, // Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA - {0x10A10, 0x10A13, prALetter}, // Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA - {0x10A15, 0x10A17, prALetter}, // Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA - {0x10A19, 0x10A35, prALetter}, // Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA - {0x10A38, 0x10A3A, prExtend}, // Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW - {0x10A3F, 0x10A3F, prExtend}, // Mn KHAROSHTHI VIRAMA - {0x10A60, 0x10A7C, prALetter}, // Lo [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH - {0x10A80, 0x10A9C, prALetter}, // Lo [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH - {0x10AC0, 0x10AC7, prALetter}, // Lo [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW - {0x10AC9, 0x10AE4, prALetter}, // Lo [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW - {0x10AE5, 0x10AE6, prExtend}, // Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW - {0x10B00, 0x10B35, prALetter}, // Lo [54] AVESTAN LETTER A..AVESTAN LETTER HE - {0x10B40, 0x10B55, prALetter}, // Lo [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW - {0x10B60, 0x10B72, prALetter}, // Lo [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW - {0x10B80, 0x10B91, prALetter}, // Lo [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW - {0x10C00, 0x10C48, prALetter}, // Lo [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH - {0x10C80, 0x10CB2, prALetter}, // L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US - {0x10CC0, 0x10CF2, prALetter}, // L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US - {0x10D00, 0x10D23, prALetter}, // Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA - {0x10D24, 0x10D27, prExtend}, // Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI - {0x10D30, 0x10D39, prNumeric}, // Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE - {0x10E80, 0x10EA9, prALetter}, // Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET - {0x10EAB, 0x10EAC, prExtend}, // Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK - {0x10EB0, 0x10EB1, prALetter}, // Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE - {0x10EFD, 0x10EFF, prExtend}, // Mn [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA - {0x10F00, 0x10F1C, prALetter}, // Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL - {0x10F27, 0x10F27, prALetter}, // Lo OLD SOGDIAN LIGATURE AYIN-DALETH - {0x10F30, 0x10F45, prALetter}, // Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN - {0x10F46, 0x10F50, prExtend}, // Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW - {0x10F70, 0x10F81, prALetter}, // Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH - {0x10F82, 0x10F85, prExtend}, // Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW - {0x10FB0, 0x10FC4, prALetter}, // Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW - {0x10FE0, 0x10FF6, prALetter}, // Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH - {0x11000, 0x11000, prExtend}, // Mc BRAHMI SIGN CANDRABINDU - {0x11001, 0x11001, prExtend}, // Mn BRAHMI SIGN ANUSVARA - {0x11002, 0x11002, prExtend}, // Mc BRAHMI SIGN VISARGA - {0x11003, 0x11037, prALetter}, // Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA - {0x11038, 0x11046, prExtend}, // Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA - {0x11066, 0x1106F, prNumeric}, // Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE - {0x11070, 0x11070, prExtend}, // Mn BRAHMI SIGN OLD TAMIL VIRAMA - {0x11071, 0x11072, prALetter}, // Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O - {0x11073, 0x11074, prExtend}, // Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O - {0x11075, 0x11075, prALetter}, // Lo BRAHMI LETTER OLD TAMIL LLA - {0x1107F, 0x11081, prExtend}, // Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA - {0x11082, 0x11082, prExtend}, // Mc KAITHI SIGN VISARGA - {0x11083, 0x110AF, prALetter}, // Lo [45] KAITHI LETTER A..KAITHI LETTER HA - {0x110B0, 0x110B2, prExtend}, // Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II - {0x110B3, 0x110B6, prExtend}, // Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI - {0x110B7, 0x110B8, prExtend}, // Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU - {0x110B9, 0x110BA, prExtend}, // Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA - {0x110BD, 0x110BD, prFormat}, // Cf KAITHI NUMBER SIGN - {0x110C2, 0x110C2, prExtend}, // Mn KAITHI VOWEL SIGN VOCALIC R - {0x110CD, 0x110CD, prFormat}, // Cf KAITHI NUMBER SIGN ABOVE - {0x110D0, 0x110E8, prALetter}, // Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE - {0x110F0, 0x110F9, prNumeric}, // Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE - {0x11100, 0x11102, prExtend}, // Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA - {0x11103, 0x11126, prALetter}, // Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA - {0x11127, 0x1112B, prExtend}, // Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU - {0x1112C, 0x1112C, prExtend}, // Mc CHAKMA VOWEL SIGN E - {0x1112D, 0x11134, prExtend}, // Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA - {0x11136, 0x1113F, prNumeric}, // Nd [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE - {0x11144, 0x11144, prALetter}, // Lo CHAKMA LETTER LHAA - {0x11145, 0x11146, prExtend}, // Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI - {0x11147, 0x11147, prALetter}, // Lo CHAKMA LETTER VAA - {0x11150, 0x11172, prALetter}, // Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA - {0x11173, 0x11173, prExtend}, // Mn MAHAJANI SIGN NUKTA - {0x11176, 0x11176, prALetter}, // Lo MAHAJANI LIGATURE SHRI - {0x11180, 0x11181, prExtend}, // Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA - {0x11182, 0x11182, prExtend}, // Mc SHARADA SIGN VISARGA - {0x11183, 0x111B2, prALetter}, // Lo [48] SHARADA LETTER A..SHARADA LETTER HA - {0x111B3, 0x111B5, prExtend}, // Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II - {0x111B6, 0x111BE, prExtend}, // Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O - {0x111BF, 0x111C0, prExtend}, // Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA - {0x111C1, 0x111C4, prALetter}, // Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM - {0x111C9, 0x111CC, prExtend}, // Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK - {0x111CE, 0x111CE, prExtend}, // Mc SHARADA VOWEL SIGN PRISHTHAMATRA E - {0x111CF, 0x111CF, prExtend}, // Mn SHARADA SIGN INVERTED CANDRABINDU - {0x111D0, 0x111D9, prNumeric}, // Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE - {0x111DA, 0x111DA, prALetter}, // Lo SHARADA EKAM - {0x111DC, 0x111DC, prALetter}, // Lo SHARADA HEADSTROKE - {0x11200, 0x11211, prALetter}, // Lo [18] KHOJKI LETTER A..KHOJKI LETTER JJA - {0x11213, 0x1122B, prALetter}, // Lo [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA - {0x1122C, 0x1122E, prExtend}, // Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II - {0x1122F, 0x11231, prExtend}, // Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI - {0x11232, 0x11233, prExtend}, // Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU - {0x11234, 0x11234, prExtend}, // Mn KHOJKI SIGN ANUSVARA - {0x11235, 0x11235, prExtend}, // Mc KHOJKI SIGN VIRAMA - {0x11236, 0x11237, prExtend}, // Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA - {0x1123E, 0x1123E, prExtend}, // Mn KHOJKI SIGN SUKUN - {0x1123F, 0x11240, prALetter}, // Lo [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I - {0x11241, 0x11241, prExtend}, // Mn KHOJKI VOWEL SIGN VOCALIC R - {0x11280, 0x11286, prALetter}, // Lo [7] MULTANI LETTER A..MULTANI LETTER GA - {0x11288, 0x11288, prALetter}, // Lo MULTANI LETTER GHA - {0x1128A, 0x1128D, prALetter}, // Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA - {0x1128F, 0x1129D, prALetter}, // Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA - {0x1129F, 0x112A8, prALetter}, // Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA - {0x112B0, 0x112DE, prALetter}, // Lo [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA - {0x112DF, 0x112DF, prExtend}, // Mn KHUDAWADI SIGN ANUSVARA - {0x112E0, 0x112E2, prExtend}, // Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II - {0x112E3, 0x112EA, prExtend}, // Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA - {0x112F0, 0x112F9, prNumeric}, // Nd [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE - {0x11300, 0x11301, prExtend}, // Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU - {0x11302, 0x11303, prExtend}, // Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA - {0x11305, 0x1130C, prALetter}, // Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L - {0x1130F, 0x11310, prALetter}, // Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI - {0x11313, 0x11328, prALetter}, // Lo [22] GRANTHA LETTER OO..GRANTHA LETTER NA - {0x1132A, 0x11330, prALetter}, // Lo [7] GRANTHA LETTER PA..GRANTHA LETTER RA - {0x11332, 0x11333, prALetter}, // Lo [2] GRANTHA LETTER LA..GRANTHA LETTER LLA - {0x11335, 0x11339, prALetter}, // Lo [5] GRANTHA LETTER VA..GRANTHA LETTER HA - {0x1133B, 0x1133C, prExtend}, // Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA - {0x1133D, 0x1133D, prALetter}, // Lo GRANTHA SIGN AVAGRAHA - {0x1133E, 0x1133F, prExtend}, // Mc [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I - {0x11340, 0x11340, prExtend}, // Mn GRANTHA VOWEL SIGN II - {0x11341, 0x11344, prExtend}, // Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR - {0x11347, 0x11348, prExtend}, // Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI - {0x1134B, 0x1134D, prExtend}, // Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA - {0x11350, 0x11350, prALetter}, // Lo GRANTHA OM - {0x11357, 0x11357, prExtend}, // Mc GRANTHA AU LENGTH MARK - {0x1135D, 0x11361, prALetter}, // Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL - {0x11362, 0x11363, prExtend}, // Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL - {0x11366, 0x1136C, prExtend}, // Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX - {0x11370, 0x11374, prExtend}, // Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA - {0x11400, 0x11434, prALetter}, // Lo [53] NEWA LETTER A..NEWA LETTER HA - {0x11435, 0x11437, prExtend}, // Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II - {0x11438, 0x1143F, prExtend}, // Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI - {0x11440, 0x11441, prExtend}, // Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU - {0x11442, 0x11444, prExtend}, // Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA - {0x11445, 0x11445, prExtend}, // Mc NEWA SIGN VISARGA - {0x11446, 0x11446, prExtend}, // Mn NEWA SIGN NUKTA - {0x11447, 0x1144A, prALetter}, // Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI - {0x11450, 0x11459, prNumeric}, // Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE - {0x1145E, 0x1145E, prExtend}, // Mn NEWA SANDHI MARK - {0x1145F, 0x11461, prALetter}, // Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA - {0x11480, 0x114AF, prALetter}, // Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA - {0x114B0, 0x114B2, prExtend}, // Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II - {0x114B3, 0x114B8, prExtend}, // Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL - {0x114B9, 0x114B9, prExtend}, // Mc TIRHUTA VOWEL SIGN E - {0x114BA, 0x114BA, prExtend}, // Mn TIRHUTA VOWEL SIGN SHORT E - {0x114BB, 0x114BE, prExtend}, // Mc [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU - {0x114BF, 0x114C0, prExtend}, // Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA - {0x114C1, 0x114C1, prExtend}, // Mc TIRHUTA SIGN VISARGA - {0x114C2, 0x114C3, prExtend}, // Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA - {0x114C4, 0x114C5, prALetter}, // Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG - {0x114C7, 0x114C7, prALetter}, // Lo TIRHUTA OM - {0x114D0, 0x114D9, prNumeric}, // Nd [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE - {0x11580, 0x115AE, prALetter}, // Lo [47] SIDDHAM LETTER A..SIDDHAM LETTER HA - {0x115AF, 0x115B1, prExtend}, // Mc [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II - {0x115B2, 0x115B5, prExtend}, // Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR - {0x115B8, 0x115BB, prExtend}, // Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU - {0x115BC, 0x115BD, prExtend}, // Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA - {0x115BE, 0x115BE, prExtend}, // Mc SIDDHAM SIGN VISARGA - {0x115BF, 0x115C0, prExtend}, // Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA - {0x115D8, 0x115DB, prALetter}, // Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U - {0x115DC, 0x115DD, prExtend}, // Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU - {0x11600, 0x1162F, prALetter}, // Lo [48] MODI LETTER A..MODI LETTER LLA - {0x11630, 0x11632, prExtend}, // Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II - {0x11633, 0x1163A, prExtend}, // Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI - {0x1163B, 0x1163C, prExtend}, // Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU - {0x1163D, 0x1163D, prExtend}, // Mn MODI SIGN ANUSVARA - {0x1163E, 0x1163E, prExtend}, // Mc MODI SIGN VISARGA - {0x1163F, 0x11640, prExtend}, // Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA - {0x11644, 0x11644, prALetter}, // Lo MODI SIGN HUVA - {0x11650, 0x11659, prNumeric}, // Nd [10] MODI DIGIT ZERO..MODI DIGIT NINE - {0x11680, 0x116AA, prALetter}, // Lo [43] TAKRI LETTER A..TAKRI LETTER RRA - {0x116AB, 0x116AB, prExtend}, // Mn TAKRI SIGN ANUSVARA - {0x116AC, 0x116AC, prExtend}, // Mc TAKRI SIGN VISARGA - {0x116AD, 0x116AD, prExtend}, // Mn TAKRI VOWEL SIGN AA - {0x116AE, 0x116AF, prExtend}, // Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II - {0x116B0, 0x116B5, prExtend}, // Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU - {0x116B6, 0x116B6, prExtend}, // Mc TAKRI SIGN VIRAMA - {0x116B7, 0x116B7, prExtend}, // Mn TAKRI SIGN NUKTA - {0x116B8, 0x116B8, prALetter}, // Lo TAKRI LETTER ARCHAIC KHA - {0x116C0, 0x116C9, prNumeric}, // Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE - {0x1171D, 0x1171F, prExtend}, // Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA - {0x11720, 0x11721, prExtend}, // Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA - {0x11722, 0x11725, prExtend}, // Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU - {0x11726, 0x11726, prExtend}, // Mc AHOM VOWEL SIGN E - {0x11727, 0x1172B, prExtend}, // Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER - {0x11730, 0x11739, prNumeric}, // Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE - {0x11800, 0x1182B, prALetter}, // Lo [44] DOGRA LETTER A..DOGRA LETTER RRA - {0x1182C, 0x1182E, prExtend}, // Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II - {0x1182F, 0x11837, prExtend}, // Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA - {0x11838, 0x11838, prExtend}, // Mc DOGRA SIGN VISARGA - {0x11839, 0x1183A, prExtend}, // Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA - {0x118A0, 0x118DF, prALetter}, // L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO - {0x118E0, 0x118E9, prNumeric}, // Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE - {0x118FF, 0x11906, prALetter}, // Lo [8] WARANG CITI OM..DIVES AKURU LETTER E - {0x11909, 0x11909, prALetter}, // Lo DIVES AKURU LETTER O - {0x1190C, 0x11913, prALetter}, // Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA - {0x11915, 0x11916, prALetter}, // Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA - {0x11918, 0x1192F, prALetter}, // Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA - {0x11930, 0x11935, prExtend}, // Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E - {0x11937, 0x11938, prExtend}, // Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O - {0x1193B, 0x1193C, prExtend}, // Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU - {0x1193D, 0x1193D, prExtend}, // Mc DIVES AKURU SIGN HALANTA - {0x1193E, 0x1193E, prExtend}, // Mn DIVES AKURU VIRAMA - {0x1193F, 0x1193F, prALetter}, // Lo DIVES AKURU PREFIXED NASAL SIGN - {0x11940, 0x11940, prExtend}, // Mc DIVES AKURU MEDIAL YA - {0x11941, 0x11941, prALetter}, // Lo DIVES AKURU INITIAL RA - {0x11942, 0x11942, prExtend}, // Mc DIVES AKURU MEDIAL RA - {0x11943, 0x11943, prExtend}, // Mn DIVES AKURU SIGN NUKTA - {0x11950, 0x11959, prNumeric}, // Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE - {0x119A0, 0x119A7, prALetter}, // Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR - {0x119AA, 0x119D0, prALetter}, // Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA - {0x119D1, 0x119D3, prExtend}, // Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II - {0x119D4, 0x119D7, prExtend}, // Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR - {0x119DA, 0x119DB, prExtend}, // Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI - {0x119DC, 0x119DF, prExtend}, // Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA - {0x119E0, 0x119E0, prExtend}, // Mn NANDINAGARI SIGN VIRAMA - {0x119E1, 0x119E1, prALetter}, // Lo NANDINAGARI SIGN AVAGRAHA - {0x119E3, 0x119E3, prALetter}, // Lo NANDINAGARI HEADSTROKE - {0x119E4, 0x119E4, prExtend}, // Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E - {0x11A00, 0x11A00, prALetter}, // Lo ZANABAZAR SQUARE LETTER A - {0x11A01, 0x11A0A, prExtend}, // Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK - {0x11A0B, 0x11A32, prALetter}, // Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA - {0x11A33, 0x11A38, prExtend}, // Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA - {0x11A39, 0x11A39, prExtend}, // Mc ZANABAZAR SQUARE SIGN VISARGA - {0x11A3A, 0x11A3A, prALetter}, // Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA - {0x11A3B, 0x11A3E, prExtend}, // Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA - {0x11A47, 0x11A47, prExtend}, // Mn ZANABAZAR SQUARE SUBJOINER - {0x11A50, 0x11A50, prALetter}, // Lo SOYOMBO LETTER A - {0x11A51, 0x11A56, prExtend}, // Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE - {0x11A57, 0x11A58, prExtend}, // Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU - {0x11A59, 0x11A5B, prExtend}, // Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK - {0x11A5C, 0x11A89, prALetter}, // Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA - {0x11A8A, 0x11A96, prExtend}, // Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA - {0x11A97, 0x11A97, prExtend}, // Mc SOYOMBO SIGN VISARGA - {0x11A98, 0x11A99, prExtend}, // Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER - {0x11A9D, 0x11A9D, prALetter}, // Lo SOYOMBO MARK PLUTA - {0x11AB0, 0x11AF8, prALetter}, // Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL - {0x11C00, 0x11C08, prALetter}, // Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L - {0x11C0A, 0x11C2E, prALetter}, // Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA - {0x11C2F, 0x11C2F, prExtend}, // Mc BHAIKSUKI VOWEL SIGN AA - {0x11C30, 0x11C36, prExtend}, // Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L - {0x11C38, 0x11C3D, prExtend}, // Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA - {0x11C3E, 0x11C3E, prExtend}, // Mc BHAIKSUKI SIGN VISARGA - {0x11C3F, 0x11C3F, prExtend}, // Mn BHAIKSUKI SIGN VIRAMA - {0x11C40, 0x11C40, prALetter}, // Lo BHAIKSUKI SIGN AVAGRAHA - {0x11C50, 0x11C59, prNumeric}, // Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE - {0x11C72, 0x11C8F, prALetter}, // Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A - {0x11C92, 0x11CA7, prExtend}, // Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA - {0x11CA9, 0x11CA9, prExtend}, // Mc MARCHEN SUBJOINED LETTER YA - {0x11CAA, 0x11CB0, prExtend}, // Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA - {0x11CB1, 0x11CB1, prExtend}, // Mc MARCHEN VOWEL SIGN I - {0x11CB2, 0x11CB3, prExtend}, // Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E - {0x11CB4, 0x11CB4, prExtend}, // Mc MARCHEN VOWEL SIGN O - {0x11CB5, 0x11CB6, prExtend}, // Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU - {0x11D00, 0x11D06, prALetter}, // Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E - {0x11D08, 0x11D09, prALetter}, // Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O - {0x11D0B, 0x11D30, prALetter}, // Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA - {0x11D31, 0x11D36, prExtend}, // Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R - {0x11D3A, 0x11D3A, prExtend}, // Mn MASARAM GONDI VOWEL SIGN E - {0x11D3C, 0x11D3D, prExtend}, // Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O - {0x11D3F, 0x11D45, prExtend}, // Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA - {0x11D46, 0x11D46, prALetter}, // Lo MASARAM GONDI REPHA - {0x11D47, 0x11D47, prExtend}, // Mn MASARAM GONDI RA-KARA - {0x11D50, 0x11D59, prNumeric}, // Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE - {0x11D60, 0x11D65, prALetter}, // Lo [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU - {0x11D67, 0x11D68, prALetter}, // Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI - {0x11D6A, 0x11D89, prALetter}, // Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA - {0x11D8A, 0x11D8E, prExtend}, // Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU - {0x11D90, 0x11D91, prExtend}, // Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI - {0x11D93, 0x11D94, prExtend}, // Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU - {0x11D95, 0x11D95, prExtend}, // Mn GUNJALA GONDI SIGN ANUSVARA - {0x11D96, 0x11D96, prExtend}, // Mc GUNJALA GONDI SIGN VISARGA - {0x11D97, 0x11D97, prExtend}, // Mn GUNJALA GONDI VIRAMA - {0x11D98, 0x11D98, prALetter}, // Lo GUNJALA GONDI OM - {0x11DA0, 0x11DA9, prNumeric}, // Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE - {0x11EE0, 0x11EF2, prALetter}, // Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA - {0x11EF3, 0x11EF4, prExtend}, // Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U - {0x11EF5, 0x11EF6, prExtend}, // Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O - {0x11F00, 0x11F01, prExtend}, // Mn [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA - {0x11F02, 0x11F02, prALetter}, // Lo KAWI SIGN REPHA - {0x11F03, 0x11F03, prExtend}, // Mc KAWI SIGN VISARGA - {0x11F04, 0x11F10, prALetter}, // Lo [13] KAWI LETTER A..KAWI LETTER O - {0x11F12, 0x11F33, prALetter}, // Lo [34] KAWI LETTER KA..KAWI LETTER JNYA - {0x11F34, 0x11F35, prExtend}, // Mc [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA - {0x11F36, 0x11F3A, prExtend}, // Mn [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R - {0x11F3E, 0x11F3F, prExtend}, // Mc [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI - {0x11F40, 0x11F40, prExtend}, // Mn KAWI VOWEL SIGN EU - {0x11F41, 0x11F41, prExtend}, // Mc KAWI SIGN KILLER - {0x11F42, 0x11F42, prExtend}, // Mn KAWI CONJOINER - {0x11F50, 0x11F59, prNumeric}, // Nd [10] KAWI DIGIT ZERO..KAWI DIGIT NINE - {0x11FB0, 0x11FB0, prALetter}, // Lo LISU LETTER YHA - {0x12000, 0x12399, prALetter}, // Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U - {0x12400, 0x1246E, prALetter}, // Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM - {0x12480, 0x12543, prALetter}, // Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU - {0x12F90, 0x12FF0, prALetter}, // Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 - {0x13000, 0x1342F, prALetter}, // Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D - {0x13430, 0x1343F, prFormat}, // Cf [16] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE - {0x13440, 0x13440, prExtend}, // Mn EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY - {0x13441, 0x13446, prALetter}, // Lo [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN - {0x13447, 0x13455, prExtend}, // Mn [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED - {0x14400, 0x14646, prALetter}, // Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 - {0x16800, 0x16A38, prALetter}, // Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ - {0x16A40, 0x16A5E, prALetter}, // Lo [31] MRO LETTER TA..MRO LETTER TEK - {0x16A60, 0x16A69, prNumeric}, // Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE - {0x16A70, 0x16ABE, prALetter}, // Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA - {0x16AC0, 0x16AC9, prNumeric}, // Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE - {0x16AD0, 0x16AED, prALetter}, // Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I - {0x16AF0, 0x16AF4, prExtend}, // Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE - {0x16B00, 0x16B2F, prALetter}, // Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU - {0x16B30, 0x16B36, prExtend}, // Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM - {0x16B40, 0x16B43, prALetter}, // Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM - {0x16B50, 0x16B59, prNumeric}, // Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE - {0x16B63, 0x16B77, prALetter}, // Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS - {0x16B7D, 0x16B8F, prALetter}, // Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ - {0x16E40, 0x16E7F, prALetter}, // L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y - {0x16F00, 0x16F4A, prALetter}, // Lo [75] MIAO LETTER PA..MIAO LETTER RTE - {0x16F4F, 0x16F4F, prExtend}, // Mn MIAO SIGN CONSONANT MODIFIER BAR - {0x16F50, 0x16F50, prALetter}, // Lo MIAO LETTER NASALIZATION - {0x16F51, 0x16F87, prExtend}, // Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI - {0x16F8F, 0x16F92, prExtend}, // Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW - {0x16F93, 0x16F9F, prALetter}, // Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 - {0x16FE0, 0x16FE1, prALetter}, // Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK - {0x16FE3, 0x16FE3, prALetter}, // Lm OLD CHINESE ITERATION MARK - {0x16FE4, 0x16FE4, prExtend}, // Mn KHITAN SMALL SCRIPT FILLER - {0x16FF0, 0x16FF1, prExtend}, // Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY - {0x1AFF0, 0x1AFF3, prKatakana}, // Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 - {0x1AFF5, 0x1AFFB, prKatakana}, // Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 - {0x1AFFD, 0x1AFFE, prKatakana}, // Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 - {0x1B000, 0x1B000, prKatakana}, // Lo KATAKANA LETTER ARCHAIC E - {0x1B120, 0x1B122, prKatakana}, // Lo [3] KATAKANA LETTER ARCHAIC YI..KATAKANA LETTER ARCHAIC WU - {0x1B155, 0x1B155, prKatakana}, // Lo KATAKANA LETTER SMALL KO - {0x1B164, 0x1B167, prKatakana}, // Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N - {0x1BC00, 0x1BC6A, prALetter}, // Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M - {0x1BC70, 0x1BC7C, prALetter}, // Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK - {0x1BC80, 0x1BC88, prALetter}, // Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL - {0x1BC90, 0x1BC99, prALetter}, // Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW - {0x1BC9D, 0x1BC9E, prExtend}, // Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK - {0x1BCA0, 0x1BCA3, prFormat}, // Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP - {0x1CF00, 0x1CF2D, prExtend}, // Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT - {0x1CF30, 0x1CF46, prExtend}, // Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG - {0x1D165, 0x1D166, prExtend}, // Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM - {0x1D167, 0x1D169, prExtend}, // Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 - {0x1D16D, 0x1D172, prExtend}, // Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 - {0x1D173, 0x1D17A, prFormat}, // Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE - {0x1D17B, 0x1D182, prExtend}, // Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE - {0x1D185, 0x1D18B, prExtend}, // Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE - {0x1D1AA, 0x1D1AD, prExtend}, // Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO - {0x1D242, 0x1D244, prExtend}, // Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME - {0x1D400, 0x1D454, prALetter}, // L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G - {0x1D456, 0x1D49C, prALetter}, // L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A - {0x1D49E, 0x1D49F, prALetter}, // L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D - {0x1D4A2, 0x1D4A2, prALetter}, // L& MATHEMATICAL SCRIPT CAPITAL G - {0x1D4A5, 0x1D4A6, prALetter}, // L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K - {0x1D4A9, 0x1D4AC, prALetter}, // L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q - {0x1D4AE, 0x1D4B9, prALetter}, // L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D - {0x1D4BB, 0x1D4BB, prALetter}, // L& MATHEMATICAL SCRIPT SMALL F - {0x1D4BD, 0x1D4C3, prALetter}, // L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N - {0x1D4C5, 0x1D505, prALetter}, // L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B - {0x1D507, 0x1D50A, prALetter}, // L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G - {0x1D50D, 0x1D514, prALetter}, // L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q - {0x1D516, 0x1D51C, prALetter}, // L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y - {0x1D51E, 0x1D539, prALetter}, // L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B - {0x1D53B, 0x1D53E, prALetter}, // L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G - {0x1D540, 0x1D544, prALetter}, // L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M - {0x1D546, 0x1D546, prALetter}, // L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O - {0x1D54A, 0x1D550, prALetter}, // L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y - {0x1D552, 0x1D6A5, prALetter}, // L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J - {0x1D6A8, 0x1D6C0, prALetter}, // L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA - {0x1D6C2, 0x1D6DA, prALetter}, // L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA - {0x1D6DC, 0x1D6FA, prALetter}, // L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA - {0x1D6FC, 0x1D714, prALetter}, // L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA - {0x1D716, 0x1D734, prALetter}, // L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA - {0x1D736, 0x1D74E, prALetter}, // L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA - {0x1D750, 0x1D76E, prALetter}, // L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA - {0x1D770, 0x1D788, prALetter}, // L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA - {0x1D78A, 0x1D7A8, prALetter}, // L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA - {0x1D7AA, 0x1D7C2, prALetter}, // L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA - {0x1D7C4, 0x1D7CB, prALetter}, // L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA - {0x1D7CE, 0x1D7FF, prNumeric}, // Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE - {0x1DA00, 0x1DA36, prExtend}, // Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN - {0x1DA3B, 0x1DA6C, prExtend}, // Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT - {0x1DA75, 0x1DA75, prExtend}, // Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS - {0x1DA84, 0x1DA84, prExtend}, // Mn SIGNWRITING LOCATION HEAD NECK - {0x1DA9B, 0x1DA9F, prExtend}, // Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 - {0x1DAA1, 0x1DAAF, prExtend}, // Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 - {0x1DF00, 0x1DF09, prALetter}, // L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK - {0x1DF0A, 0x1DF0A, prALetter}, // Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK - {0x1DF0B, 0x1DF1E, prALetter}, // L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL - {0x1DF25, 0x1DF2A, prALetter}, // L& [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK - {0x1E000, 0x1E006, prExtend}, // Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE - {0x1E008, 0x1E018, prExtend}, // Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU - {0x1E01B, 0x1E021, prExtend}, // Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI - {0x1E023, 0x1E024, prExtend}, // Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS - {0x1E026, 0x1E02A, prExtend}, // Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA - {0x1E030, 0x1E06D, prALetter}, // Lm [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE - {0x1E08F, 0x1E08F, prExtend}, // Mn COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - {0x1E100, 0x1E12C, prALetter}, // Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W - {0x1E130, 0x1E136, prExtend}, // Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D - {0x1E137, 0x1E13D, prALetter}, // Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER - {0x1E140, 0x1E149, prNumeric}, // Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE - {0x1E14E, 0x1E14E, prALetter}, // Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ - {0x1E290, 0x1E2AD, prALetter}, // Lo [30] TOTO LETTER PA..TOTO LETTER A - {0x1E2AE, 0x1E2AE, prExtend}, // Mn TOTO SIGN RISING TONE - {0x1E2C0, 0x1E2EB, prALetter}, // Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH - {0x1E2EC, 0x1E2EF, prExtend}, // Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI - {0x1E2F0, 0x1E2F9, prNumeric}, // Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE - {0x1E4D0, 0x1E4EA, prALetter}, // Lo [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL - {0x1E4EB, 0x1E4EB, prALetter}, // Lm NAG MUNDARI SIGN OJOD - {0x1E4EC, 0x1E4EF, prExtend}, // Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH - {0x1E4F0, 0x1E4F9, prNumeric}, // Nd [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE - {0x1E7E0, 0x1E7E6, prALetter}, // Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO - {0x1E7E8, 0x1E7EB, prALetter}, // Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE - {0x1E7ED, 0x1E7EE, prALetter}, // Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE - {0x1E7F0, 0x1E7FE, prALetter}, // Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE - {0x1E800, 0x1E8C4, prALetter}, // Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON - {0x1E8D0, 0x1E8D6, prExtend}, // Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS - {0x1E900, 0x1E943, prALetter}, // L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA - {0x1E944, 0x1E94A, prExtend}, // Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA - {0x1E94B, 0x1E94B, prALetter}, // Lm ADLAM NASALIZATION MARK - {0x1E950, 0x1E959, prNumeric}, // Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE - {0x1EE00, 0x1EE03, prALetter}, // Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL - {0x1EE05, 0x1EE1F, prALetter}, // Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF - {0x1EE21, 0x1EE22, prALetter}, // Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM - {0x1EE24, 0x1EE24, prALetter}, // Lo ARABIC MATHEMATICAL INITIAL HEH - {0x1EE27, 0x1EE27, prALetter}, // Lo ARABIC MATHEMATICAL INITIAL HAH - {0x1EE29, 0x1EE32, prALetter}, // Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF - {0x1EE34, 0x1EE37, prALetter}, // Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH - {0x1EE39, 0x1EE39, prALetter}, // Lo ARABIC MATHEMATICAL INITIAL DAD - {0x1EE3B, 0x1EE3B, prALetter}, // Lo ARABIC MATHEMATICAL INITIAL GHAIN - {0x1EE42, 0x1EE42, prALetter}, // Lo ARABIC MATHEMATICAL TAILED JEEM - {0x1EE47, 0x1EE47, prALetter}, // Lo ARABIC MATHEMATICAL TAILED HAH - {0x1EE49, 0x1EE49, prALetter}, // Lo ARABIC MATHEMATICAL TAILED YEH - {0x1EE4B, 0x1EE4B, prALetter}, // Lo ARABIC MATHEMATICAL TAILED LAM - {0x1EE4D, 0x1EE4F, prALetter}, // Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN - {0x1EE51, 0x1EE52, prALetter}, // Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF - {0x1EE54, 0x1EE54, prALetter}, // Lo ARABIC MATHEMATICAL TAILED SHEEN - {0x1EE57, 0x1EE57, prALetter}, // Lo ARABIC MATHEMATICAL TAILED KHAH - {0x1EE59, 0x1EE59, prALetter}, // Lo ARABIC MATHEMATICAL TAILED DAD - {0x1EE5B, 0x1EE5B, prALetter}, // Lo ARABIC MATHEMATICAL TAILED GHAIN - {0x1EE5D, 0x1EE5D, prALetter}, // Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON - {0x1EE5F, 0x1EE5F, prALetter}, // Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF - {0x1EE61, 0x1EE62, prALetter}, // Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM - {0x1EE64, 0x1EE64, prALetter}, // Lo ARABIC MATHEMATICAL STRETCHED HEH - {0x1EE67, 0x1EE6A, prALetter}, // Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF - {0x1EE6C, 0x1EE72, prALetter}, // Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF - {0x1EE74, 0x1EE77, prALetter}, // Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH - {0x1EE79, 0x1EE7C, prALetter}, // Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH - {0x1EE7E, 0x1EE7E, prALetter}, // Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH - {0x1EE80, 0x1EE89, prALetter}, // Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH - {0x1EE8B, 0x1EE9B, prALetter}, // Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN - {0x1EEA1, 0x1EEA3, prALetter}, // Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL - {0x1EEA5, 0x1EEA9, prALetter}, // Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH - {0x1EEAB, 0x1EEBB, prALetter}, // Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN - {0x1F000, 0x1F003, prExtendedPictographic}, // E0.0 [4] (🀀..🀃) MAHJONG TILE EAST WIND..MAHJONG TILE NORTH WIND - {0x1F004, 0x1F004, prExtendedPictographic}, // E0.6 [1] (🀄) mahjong red dragon - {0x1F005, 0x1F0CE, prExtendedPictographic}, // E0.0 [202] (🀅..🃎) MAHJONG TILE GREEN DRAGON..PLAYING CARD KING OF DIAMONDS - {0x1F0CF, 0x1F0CF, prExtendedPictographic}, // E0.6 [1] (🃏) joker - {0x1F0D0, 0x1F0FF, prExtendedPictographic}, // E0.0 [48] (🃐..🃿) .. - {0x1F10D, 0x1F10F, prExtendedPictographic}, // E0.0 [3] (🄍..🄏) CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH - {0x1F12F, 0x1F12F, prExtendedPictographic}, // E0.0 [1] (🄯) COPYLEFT SYMBOL - {0x1F130, 0x1F149, prALetter}, // So [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z - {0x1F150, 0x1F169, prALetter}, // So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z - {0x1F16C, 0x1F16F, prExtendedPictographic}, // E0.0 [4] (🅬..🅯) RAISED MR SIGN..CIRCLED HUMAN FIGURE - {0x1F170, 0x1F189, prALetter}, // So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z - {0x1F170, 0x1F171, prExtendedPictographic}, // E0.6 [2] (🅰️..🅱️) A button (blood type)..B button (blood type) - {0x1F17E, 0x1F17F, prExtendedPictographic}, // E0.6 [2] (🅾️..🅿️) O button (blood type)..P button - {0x1F18E, 0x1F18E, prExtendedPictographic}, // E0.6 [1] (🆎) AB button (blood type) - {0x1F191, 0x1F19A, prExtendedPictographic}, // E0.6 [10] (🆑..🆚) CL button..VS button - {0x1F1AD, 0x1F1E5, prExtendedPictographic}, // E0.0 [57] (🆭..🇥) MASK WORK SYMBOL.. - {0x1F1E6, 0x1F1FF, prRegionalIndicator}, // So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z - {0x1F201, 0x1F202, prExtendedPictographic}, // E0.6 [2] (🈁..🈂️) Japanese “here” button..Japanese “service charge” button - {0x1F203, 0x1F20F, prExtendedPictographic}, // E0.0 [13] (🈃..🈏) .. - {0x1F21A, 0x1F21A, prExtendedPictographic}, // E0.6 [1] (🈚) Japanese “free of charge” button - {0x1F22F, 0x1F22F, prExtendedPictographic}, // E0.6 [1] (🈯) Japanese “reserved” button - {0x1F232, 0x1F23A, prExtendedPictographic}, // E0.6 [9] (🈲..🈺) Japanese “prohibited” button..Japanese “open for business” button - {0x1F23C, 0x1F23F, prExtendedPictographic}, // E0.0 [4] (🈼..🈿) .. - {0x1F249, 0x1F24F, prExtendedPictographic}, // E0.0 [7] (🉉..🉏) .. - {0x1F250, 0x1F251, prExtendedPictographic}, // E0.6 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button - {0x1F252, 0x1F2FF, prExtendedPictographic}, // E0.0 [174] (🉒..🋿) .. - {0x1F300, 0x1F30C, prExtendedPictographic}, // E0.6 [13] (🌀..🌌) cyclone..milky way - {0x1F30D, 0x1F30E, prExtendedPictographic}, // E0.7 [2] (🌍..🌎) globe showing Europe-Africa..globe showing Americas - {0x1F30F, 0x1F30F, prExtendedPictographic}, // E0.6 [1] (🌏) globe showing Asia-Australia - {0x1F310, 0x1F310, prExtendedPictographic}, // E1.0 [1] (🌐) globe with meridians - {0x1F311, 0x1F311, prExtendedPictographic}, // E0.6 [1] (🌑) new moon - {0x1F312, 0x1F312, prExtendedPictographic}, // E1.0 [1] (🌒) waxing crescent moon - {0x1F313, 0x1F315, prExtendedPictographic}, // E0.6 [3] (🌓..🌕) first quarter moon..full moon - {0x1F316, 0x1F318, prExtendedPictographic}, // E1.0 [3] (🌖..🌘) waning gibbous moon..waning crescent moon - {0x1F319, 0x1F319, prExtendedPictographic}, // E0.6 [1] (🌙) crescent moon - {0x1F31A, 0x1F31A, prExtendedPictographic}, // E1.0 [1] (🌚) new moon face - {0x1F31B, 0x1F31B, prExtendedPictographic}, // E0.6 [1] (🌛) first quarter moon face - {0x1F31C, 0x1F31C, prExtendedPictographic}, // E0.7 [1] (🌜) last quarter moon face - {0x1F31D, 0x1F31E, prExtendedPictographic}, // E1.0 [2] (🌝..🌞) full moon face..sun with face - {0x1F31F, 0x1F320, prExtendedPictographic}, // E0.6 [2] (🌟..🌠) glowing star..shooting star - {0x1F321, 0x1F321, prExtendedPictographic}, // E0.7 [1] (🌡️) thermometer - {0x1F322, 0x1F323, prExtendedPictographic}, // E0.0 [2] (🌢..🌣) BLACK DROPLET..WHITE SUN - {0x1F324, 0x1F32C, prExtendedPictographic}, // E0.7 [9] (🌤️..🌬️) sun behind small cloud..wind face - {0x1F32D, 0x1F32F, prExtendedPictographic}, // E1.0 [3] (🌭..🌯) hot dog..burrito - {0x1F330, 0x1F331, prExtendedPictographic}, // E0.6 [2] (🌰..🌱) chestnut..seedling - {0x1F332, 0x1F333, prExtendedPictographic}, // E1.0 [2] (🌲..🌳) evergreen tree..deciduous tree - {0x1F334, 0x1F335, prExtendedPictographic}, // E0.6 [2] (🌴..🌵) palm tree..cactus - {0x1F336, 0x1F336, prExtendedPictographic}, // E0.7 [1] (🌶️) hot pepper - {0x1F337, 0x1F34A, prExtendedPictographic}, // E0.6 [20] (🌷..🍊) tulip..tangerine - {0x1F34B, 0x1F34B, prExtendedPictographic}, // E1.0 [1] (🍋) lemon - {0x1F34C, 0x1F34F, prExtendedPictographic}, // E0.6 [4] (🍌..🍏) banana..green apple - {0x1F350, 0x1F350, prExtendedPictographic}, // E1.0 [1] (🍐) pear - {0x1F351, 0x1F37B, prExtendedPictographic}, // E0.6 [43] (🍑..🍻) peach..clinking beer mugs - {0x1F37C, 0x1F37C, prExtendedPictographic}, // E1.0 [1] (🍼) baby bottle - {0x1F37D, 0x1F37D, prExtendedPictographic}, // E0.7 [1] (🍽️) fork and knife with plate - {0x1F37E, 0x1F37F, prExtendedPictographic}, // E1.0 [2] (🍾..🍿) bottle with popping cork..popcorn - {0x1F380, 0x1F393, prExtendedPictographic}, // E0.6 [20] (🎀..🎓) ribbon..graduation cap - {0x1F394, 0x1F395, prExtendedPictographic}, // E0.0 [2] (🎔..🎕) HEART WITH TIP ON THE LEFT..BOUQUET OF FLOWERS - {0x1F396, 0x1F397, prExtendedPictographic}, // E0.7 [2] (🎖️..🎗️) military medal..reminder ribbon - {0x1F398, 0x1F398, prExtendedPictographic}, // E0.0 [1] (🎘) MUSICAL KEYBOARD WITH JACKS - {0x1F399, 0x1F39B, prExtendedPictographic}, // E0.7 [3] (🎙️..🎛️) studio microphone..control knobs - {0x1F39C, 0x1F39D, prExtendedPictographic}, // E0.0 [2] (🎜..🎝) BEAMED ASCENDING MUSICAL NOTES..BEAMED DESCENDING MUSICAL NOTES - {0x1F39E, 0x1F39F, prExtendedPictographic}, // E0.7 [2] (🎞️..🎟️) film frames..admission tickets - {0x1F3A0, 0x1F3C4, prExtendedPictographic}, // E0.6 [37] (🎠..🏄) carousel horse..person surfing - {0x1F3C5, 0x1F3C5, prExtendedPictographic}, // E1.0 [1] (🏅) sports medal - {0x1F3C6, 0x1F3C6, prExtendedPictographic}, // E0.6 [1] (🏆) trophy - {0x1F3C7, 0x1F3C7, prExtendedPictographic}, // E1.0 [1] (🏇) horse racing - {0x1F3C8, 0x1F3C8, prExtendedPictographic}, // E0.6 [1] (🏈) american football - {0x1F3C9, 0x1F3C9, prExtendedPictographic}, // E1.0 [1] (🏉) rugby football - {0x1F3CA, 0x1F3CA, prExtendedPictographic}, // E0.6 [1] (🏊) person swimming - {0x1F3CB, 0x1F3CE, prExtendedPictographic}, // E0.7 [4] (🏋️..🏎️) person lifting weights..racing car - {0x1F3CF, 0x1F3D3, prExtendedPictographic}, // E1.0 [5] (🏏..🏓) cricket game..ping pong - {0x1F3D4, 0x1F3DF, prExtendedPictographic}, // E0.7 [12] (🏔️..🏟️) snow-capped mountain..stadium - {0x1F3E0, 0x1F3E3, prExtendedPictographic}, // E0.6 [4] (🏠..🏣) house..Japanese post office - {0x1F3E4, 0x1F3E4, prExtendedPictographic}, // E1.0 [1] (🏤) post office - {0x1F3E5, 0x1F3F0, prExtendedPictographic}, // E0.6 [12] (🏥..🏰) hospital..castle - {0x1F3F1, 0x1F3F2, prExtendedPictographic}, // E0.0 [2] (🏱..🏲) WHITE PENNANT..BLACK PENNANT - {0x1F3F3, 0x1F3F3, prExtendedPictographic}, // E0.7 [1] (🏳️) white flag - {0x1F3F4, 0x1F3F4, prExtendedPictographic}, // E1.0 [1] (🏴) black flag - {0x1F3F5, 0x1F3F5, prExtendedPictographic}, // E0.7 [1] (🏵️) rosette - {0x1F3F6, 0x1F3F6, prExtendedPictographic}, // E0.0 [1] (🏶) BLACK ROSETTE - {0x1F3F7, 0x1F3F7, prExtendedPictographic}, // E0.7 [1] (🏷️) label - {0x1F3F8, 0x1F3FA, prExtendedPictographic}, // E1.0 [3] (🏸..🏺) badminton..amphora - {0x1F3FB, 0x1F3FF, prExtend}, // Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 - {0x1F400, 0x1F407, prExtendedPictographic}, // E1.0 [8] (🐀..🐇) rat..rabbit - {0x1F408, 0x1F408, prExtendedPictographic}, // E0.7 [1] (🐈) cat - {0x1F409, 0x1F40B, prExtendedPictographic}, // E1.0 [3] (🐉..🐋) dragon..whale - {0x1F40C, 0x1F40E, prExtendedPictographic}, // E0.6 [3] (🐌..🐎) snail..horse - {0x1F40F, 0x1F410, prExtendedPictographic}, // E1.0 [2] (🐏..🐐) ram..goat - {0x1F411, 0x1F412, prExtendedPictographic}, // E0.6 [2] (🐑..🐒) ewe..monkey - {0x1F413, 0x1F413, prExtendedPictographic}, // E1.0 [1] (🐓) rooster - {0x1F414, 0x1F414, prExtendedPictographic}, // E0.6 [1] (🐔) chicken - {0x1F415, 0x1F415, prExtendedPictographic}, // E0.7 [1] (🐕) dog - {0x1F416, 0x1F416, prExtendedPictographic}, // E1.0 [1] (🐖) pig - {0x1F417, 0x1F429, prExtendedPictographic}, // E0.6 [19] (🐗..🐩) boar..poodle - {0x1F42A, 0x1F42A, prExtendedPictographic}, // E1.0 [1] (🐪) camel - {0x1F42B, 0x1F43E, prExtendedPictographic}, // E0.6 [20] (🐫..🐾) two-hump camel..paw prints - {0x1F43F, 0x1F43F, prExtendedPictographic}, // E0.7 [1] (🐿️) chipmunk - {0x1F440, 0x1F440, prExtendedPictographic}, // E0.6 [1] (👀) eyes - {0x1F441, 0x1F441, prExtendedPictographic}, // E0.7 [1] (👁️) eye - {0x1F442, 0x1F464, prExtendedPictographic}, // E0.6 [35] (👂..👤) ear..bust in silhouette - {0x1F465, 0x1F465, prExtendedPictographic}, // E1.0 [1] (👥) busts in silhouette - {0x1F466, 0x1F46B, prExtendedPictographic}, // E0.6 [6] (👦..👫) boy..woman and man holding hands - {0x1F46C, 0x1F46D, prExtendedPictographic}, // E1.0 [2] (👬..👭) men holding hands..women holding hands - {0x1F46E, 0x1F4AC, prExtendedPictographic}, // E0.6 [63] (👮..💬) police officer..speech balloon - {0x1F4AD, 0x1F4AD, prExtendedPictographic}, // E1.0 [1] (💭) thought balloon - {0x1F4AE, 0x1F4B5, prExtendedPictographic}, // E0.6 [8] (💮..💵) white flower..dollar banknote - {0x1F4B6, 0x1F4B7, prExtendedPictographic}, // E1.0 [2] (💶..💷) euro banknote..pound banknote - {0x1F4B8, 0x1F4EB, prExtendedPictographic}, // E0.6 [52] (💸..📫) money with wings..closed mailbox with raised flag - {0x1F4EC, 0x1F4ED, prExtendedPictographic}, // E0.7 [2] (📬..📭) open mailbox with raised flag..open mailbox with lowered flag - {0x1F4EE, 0x1F4EE, prExtendedPictographic}, // E0.6 [1] (📮) postbox - {0x1F4EF, 0x1F4EF, prExtendedPictographic}, // E1.0 [1] (📯) postal horn - {0x1F4F0, 0x1F4F4, prExtendedPictographic}, // E0.6 [5] (📰..📴) newspaper..mobile phone off - {0x1F4F5, 0x1F4F5, prExtendedPictographic}, // E1.0 [1] (📵) no mobile phones - {0x1F4F6, 0x1F4F7, prExtendedPictographic}, // E0.6 [2] (📶..📷) antenna bars..camera - {0x1F4F8, 0x1F4F8, prExtendedPictographic}, // E1.0 [1] (📸) camera with flash - {0x1F4F9, 0x1F4FC, prExtendedPictographic}, // E0.6 [4] (📹..📼) video camera..videocassette - {0x1F4FD, 0x1F4FD, prExtendedPictographic}, // E0.7 [1] (📽️) film projector - {0x1F4FE, 0x1F4FE, prExtendedPictographic}, // E0.0 [1] (📾) PORTABLE STEREO - {0x1F4FF, 0x1F502, prExtendedPictographic}, // E1.0 [4] (📿..🔂) prayer beads..repeat single button - {0x1F503, 0x1F503, prExtendedPictographic}, // E0.6 [1] (🔃) clockwise vertical arrows - {0x1F504, 0x1F507, prExtendedPictographic}, // E1.0 [4] (🔄..🔇) counterclockwise arrows button..muted speaker - {0x1F508, 0x1F508, prExtendedPictographic}, // E0.7 [1] (🔈) speaker low volume - {0x1F509, 0x1F509, prExtendedPictographic}, // E1.0 [1] (🔉) speaker medium volume - {0x1F50A, 0x1F514, prExtendedPictographic}, // E0.6 [11] (🔊..🔔) speaker high volume..bell - {0x1F515, 0x1F515, prExtendedPictographic}, // E1.0 [1] (🔕) bell with slash - {0x1F516, 0x1F52B, prExtendedPictographic}, // E0.6 [22] (🔖..🔫) bookmark..water pistol - {0x1F52C, 0x1F52D, prExtendedPictographic}, // E1.0 [2] (🔬..🔭) microscope..telescope - {0x1F52E, 0x1F53D, prExtendedPictographic}, // E0.6 [16] (🔮..🔽) crystal ball..downwards button - {0x1F546, 0x1F548, prExtendedPictographic}, // E0.0 [3] (🕆..🕈) WHITE LATIN CROSS..CELTIC CROSS - {0x1F549, 0x1F54A, prExtendedPictographic}, // E0.7 [2] (🕉️..🕊️) om..dove - {0x1F54B, 0x1F54E, prExtendedPictographic}, // E1.0 [4] (🕋..🕎) kaaba..menorah - {0x1F54F, 0x1F54F, prExtendedPictographic}, // E0.0 [1] (🕏) BOWL OF HYGIEIA - {0x1F550, 0x1F55B, prExtendedPictographic}, // E0.6 [12] (🕐..🕛) one o’clock..twelve o’clock - {0x1F55C, 0x1F567, prExtendedPictographic}, // E0.7 [12] (🕜..🕧) one-thirty..twelve-thirty - {0x1F568, 0x1F56E, prExtendedPictographic}, // E0.0 [7] (🕨..🕮) RIGHT SPEAKER..BOOK - {0x1F56F, 0x1F570, prExtendedPictographic}, // E0.7 [2] (🕯️..🕰️) candle..mantelpiece clock - {0x1F571, 0x1F572, prExtendedPictographic}, // E0.0 [2] (🕱..🕲) BLACK SKULL AND CROSSBONES..NO PIRACY - {0x1F573, 0x1F579, prExtendedPictographic}, // E0.7 [7] (🕳️..🕹️) hole..joystick - {0x1F57A, 0x1F57A, prExtendedPictographic}, // E3.0 [1] (🕺) man dancing - {0x1F57B, 0x1F586, prExtendedPictographic}, // E0.0 [12] (🕻..🖆) LEFT HAND TELEPHONE RECEIVER..PEN OVER STAMPED ENVELOPE - {0x1F587, 0x1F587, prExtendedPictographic}, // E0.7 [1] (🖇️) linked paperclips - {0x1F588, 0x1F589, prExtendedPictographic}, // E0.0 [2] (🖈..🖉) BLACK PUSHPIN..LOWER LEFT PENCIL - {0x1F58A, 0x1F58D, prExtendedPictographic}, // E0.7 [4] (🖊️..🖍️) pen..crayon - {0x1F58E, 0x1F58F, prExtendedPictographic}, // E0.0 [2] (🖎..🖏) LEFT WRITING HAND..TURNED OK HAND SIGN - {0x1F590, 0x1F590, prExtendedPictographic}, // E0.7 [1] (🖐️) hand with fingers splayed - {0x1F591, 0x1F594, prExtendedPictographic}, // E0.0 [4] (🖑..🖔) REVERSED RAISED HAND WITH FINGERS SPLAYED..REVERSED VICTORY HAND - {0x1F595, 0x1F596, prExtendedPictographic}, // E1.0 [2] (🖕..🖖) middle finger..vulcan salute - {0x1F597, 0x1F5A3, prExtendedPictographic}, // E0.0 [13] (🖗..🖣) WHITE DOWN POINTING LEFT HAND INDEX..BLACK DOWN POINTING BACKHAND INDEX - {0x1F5A4, 0x1F5A4, prExtendedPictographic}, // E3.0 [1] (🖤) black heart - {0x1F5A5, 0x1F5A5, prExtendedPictographic}, // E0.7 [1] (🖥️) desktop computer - {0x1F5A6, 0x1F5A7, prExtendedPictographic}, // E0.0 [2] (🖦..🖧) KEYBOARD AND MOUSE..THREE NETWORKED COMPUTERS - {0x1F5A8, 0x1F5A8, prExtendedPictographic}, // E0.7 [1] (🖨️) printer - {0x1F5A9, 0x1F5B0, prExtendedPictographic}, // E0.0 [8] (🖩..🖰) POCKET CALCULATOR..TWO BUTTON MOUSE - {0x1F5B1, 0x1F5B2, prExtendedPictographic}, // E0.7 [2] (🖱️..🖲️) computer mouse..trackball - {0x1F5B3, 0x1F5BB, prExtendedPictographic}, // E0.0 [9] (🖳..🖻) OLD PERSONAL COMPUTER..DOCUMENT WITH PICTURE - {0x1F5BC, 0x1F5BC, prExtendedPictographic}, // E0.7 [1] (🖼️) framed picture - {0x1F5BD, 0x1F5C1, prExtendedPictographic}, // E0.0 [5] (🖽..🗁) FRAME WITH TILES..OPEN FOLDER - {0x1F5C2, 0x1F5C4, prExtendedPictographic}, // E0.7 [3] (🗂️..🗄️) card index dividers..file cabinet - {0x1F5C5, 0x1F5D0, prExtendedPictographic}, // E0.0 [12] (🗅..🗐) EMPTY NOTE..PAGES - {0x1F5D1, 0x1F5D3, prExtendedPictographic}, // E0.7 [3] (🗑️..🗓️) wastebasket..spiral calendar - {0x1F5D4, 0x1F5DB, prExtendedPictographic}, // E0.0 [8] (🗔..🗛) DESKTOP WINDOW..DECREASE FONT SIZE SYMBOL - {0x1F5DC, 0x1F5DE, prExtendedPictographic}, // E0.7 [3] (🗜️..🗞️) clamp..rolled-up newspaper - {0x1F5DF, 0x1F5E0, prExtendedPictographic}, // E0.0 [2] (🗟..🗠) PAGE WITH CIRCLED TEXT..STOCK CHART - {0x1F5E1, 0x1F5E1, prExtendedPictographic}, // E0.7 [1] (🗡️) dagger - {0x1F5E2, 0x1F5E2, prExtendedPictographic}, // E0.0 [1] (🗢) LIPS - {0x1F5E3, 0x1F5E3, prExtendedPictographic}, // E0.7 [1] (🗣️) speaking head - {0x1F5E4, 0x1F5E7, prExtendedPictographic}, // E0.0 [4] (🗤..🗧) THREE RAYS ABOVE..THREE RAYS RIGHT - {0x1F5E8, 0x1F5E8, prExtendedPictographic}, // E2.0 [1] (🗨️) left speech bubble - {0x1F5E9, 0x1F5EE, prExtendedPictographic}, // E0.0 [6] (🗩..🗮) RIGHT SPEECH BUBBLE..LEFT ANGER BUBBLE - {0x1F5EF, 0x1F5EF, prExtendedPictographic}, // E0.7 [1] (🗯️) right anger bubble - {0x1F5F0, 0x1F5F2, prExtendedPictographic}, // E0.0 [3] (🗰..🗲) MOOD BUBBLE..LIGHTNING MOOD - {0x1F5F3, 0x1F5F3, prExtendedPictographic}, // E0.7 [1] (🗳️) ballot box with ballot - {0x1F5F4, 0x1F5F9, prExtendedPictographic}, // E0.0 [6] (🗴..🗹) BALLOT SCRIPT X..BALLOT BOX WITH BOLD CHECK - {0x1F5FA, 0x1F5FA, prExtendedPictographic}, // E0.7 [1] (🗺️) world map - {0x1F5FB, 0x1F5FF, prExtendedPictographic}, // E0.6 [5] (🗻..🗿) mount fuji..moai - {0x1F600, 0x1F600, prExtendedPictographic}, // E1.0 [1] (😀) grinning face - {0x1F601, 0x1F606, prExtendedPictographic}, // E0.6 [6] (😁..😆) beaming face with smiling eyes..grinning squinting face - {0x1F607, 0x1F608, prExtendedPictographic}, // E1.0 [2] (😇..😈) smiling face with halo..smiling face with horns - {0x1F609, 0x1F60D, prExtendedPictographic}, // E0.6 [5] (😉..😍) winking face..smiling face with heart-eyes - {0x1F60E, 0x1F60E, prExtendedPictographic}, // E1.0 [1] (😎) smiling face with sunglasses - {0x1F60F, 0x1F60F, prExtendedPictographic}, // E0.6 [1] (😏) smirking face - {0x1F610, 0x1F610, prExtendedPictographic}, // E0.7 [1] (😐) neutral face - {0x1F611, 0x1F611, prExtendedPictographic}, // E1.0 [1] (😑) expressionless face - {0x1F612, 0x1F614, prExtendedPictographic}, // E0.6 [3] (😒..😔) unamused face..pensive face - {0x1F615, 0x1F615, prExtendedPictographic}, // E1.0 [1] (😕) confused face - {0x1F616, 0x1F616, prExtendedPictographic}, // E0.6 [1] (😖) confounded face - {0x1F617, 0x1F617, prExtendedPictographic}, // E1.0 [1] (😗) kissing face - {0x1F618, 0x1F618, prExtendedPictographic}, // E0.6 [1] (😘) face blowing a kiss - {0x1F619, 0x1F619, prExtendedPictographic}, // E1.0 [1] (😙) kissing face with smiling eyes - {0x1F61A, 0x1F61A, prExtendedPictographic}, // E0.6 [1] (😚) kissing face with closed eyes - {0x1F61B, 0x1F61B, prExtendedPictographic}, // E1.0 [1] (😛) face with tongue - {0x1F61C, 0x1F61E, prExtendedPictographic}, // E0.6 [3] (😜..😞) winking face with tongue..disappointed face - {0x1F61F, 0x1F61F, prExtendedPictographic}, // E1.0 [1] (😟) worried face - {0x1F620, 0x1F625, prExtendedPictographic}, // E0.6 [6] (😠..😥) angry face..sad but relieved face - {0x1F626, 0x1F627, prExtendedPictographic}, // E1.0 [2] (😦..😧) frowning face with open mouth..anguished face - {0x1F628, 0x1F62B, prExtendedPictographic}, // E0.6 [4] (😨..😫) fearful face..tired face - {0x1F62C, 0x1F62C, prExtendedPictographic}, // E1.0 [1] (😬) grimacing face - {0x1F62D, 0x1F62D, prExtendedPictographic}, // E0.6 [1] (😭) loudly crying face - {0x1F62E, 0x1F62F, prExtendedPictographic}, // E1.0 [2] (😮..😯) face with open mouth..hushed face - {0x1F630, 0x1F633, prExtendedPictographic}, // E0.6 [4] (😰..😳) anxious face with sweat..flushed face - {0x1F634, 0x1F634, prExtendedPictographic}, // E1.0 [1] (😴) sleeping face - {0x1F635, 0x1F635, prExtendedPictographic}, // E0.6 [1] (😵) face with crossed-out eyes - {0x1F636, 0x1F636, prExtendedPictographic}, // E1.0 [1] (😶) face without mouth - {0x1F637, 0x1F640, prExtendedPictographic}, // E0.6 [10] (😷..🙀) face with medical mask..weary cat - {0x1F641, 0x1F644, prExtendedPictographic}, // E1.0 [4] (🙁..🙄) slightly frowning face..face with rolling eyes - {0x1F645, 0x1F64F, prExtendedPictographic}, // E0.6 [11] (🙅..🙏) person gesturing NO..folded hands - {0x1F680, 0x1F680, prExtendedPictographic}, // E0.6 [1] (🚀) rocket - {0x1F681, 0x1F682, prExtendedPictographic}, // E1.0 [2] (🚁..🚂) helicopter..locomotive - {0x1F683, 0x1F685, prExtendedPictographic}, // E0.6 [3] (🚃..🚅) railway car..bullet train - {0x1F686, 0x1F686, prExtendedPictographic}, // E1.0 [1] (🚆) train - {0x1F687, 0x1F687, prExtendedPictographic}, // E0.6 [1] (🚇) metro - {0x1F688, 0x1F688, prExtendedPictographic}, // E1.0 [1] (🚈) light rail - {0x1F689, 0x1F689, prExtendedPictographic}, // E0.6 [1] (🚉) station - {0x1F68A, 0x1F68B, prExtendedPictographic}, // E1.0 [2] (🚊..🚋) tram..tram car - {0x1F68C, 0x1F68C, prExtendedPictographic}, // E0.6 [1] (🚌) bus - {0x1F68D, 0x1F68D, prExtendedPictographic}, // E0.7 [1] (🚍) oncoming bus - {0x1F68E, 0x1F68E, prExtendedPictographic}, // E1.0 [1] (🚎) trolleybus - {0x1F68F, 0x1F68F, prExtendedPictographic}, // E0.6 [1] (🚏) bus stop - {0x1F690, 0x1F690, prExtendedPictographic}, // E1.0 [1] (🚐) minibus - {0x1F691, 0x1F693, prExtendedPictographic}, // E0.6 [3] (🚑..🚓) ambulance..police car - {0x1F694, 0x1F694, prExtendedPictographic}, // E0.7 [1] (🚔) oncoming police car - {0x1F695, 0x1F695, prExtendedPictographic}, // E0.6 [1] (🚕) taxi - {0x1F696, 0x1F696, prExtendedPictographic}, // E1.0 [1] (🚖) oncoming taxi - {0x1F697, 0x1F697, prExtendedPictographic}, // E0.6 [1] (🚗) automobile - {0x1F698, 0x1F698, prExtendedPictographic}, // E0.7 [1] (🚘) oncoming automobile - {0x1F699, 0x1F69A, prExtendedPictographic}, // E0.6 [2] (🚙..🚚) sport utility vehicle..delivery truck - {0x1F69B, 0x1F6A1, prExtendedPictographic}, // E1.0 [7] (🚛..🚡) articulated lorry..aerial tramway - {0x1F6A2, 0x1F6A2, prExtendedPictographic}, // E0.6 [1] (🚢) ship - {0x1F6A3, 0x1F6A3, prExtendedPictographic}, // E1.0 [1] (🚣) person rowing boat - {0x1F6A4, 0x1F6A5, prExtendedPictographic}, // E0.6 [2] (🚤..🚥) speedboat..horizontal traffic light - {0x1F6A6, 0x1F6A6, prExtendedPictographic}, // E1.0 [1] (🚦) vertical traffic light - {0x1F6A7, 0x1F6AD, prExtendedPictographic}, // E0.6 [7] (🚧..🚭) construction..no smoking - {0x1F6AE, 0x1F6B1, prExtendedPictographic}, // E1.0 [4] (🚮..🚱) litter in bin sign..non-potable water - {0x1F6B2, 0x1F6B2, prExtendedPictographic}, // E0.6 [1] (🚲) bicycle - {0x1F6B3, 0x1F6B5, prExtendedPictographic}, // E1.0 [3] (🚳..🚵) no bicycles..person mountain biking - {0x1F6B6, 0x1F6B6, prExtendedPictographic}, // E0.6 [1] (🚶) person walking - {0x1F6B7, 0x1F6B8, prExtendedPictographic}, // E1.0 [2] (🚷..🚸) no pedestrians..children crossing - {0x1F6B9, 0x1F6BE, prExtendedPictographic}, // E0.6 [6] (🚹..🚾) men’s room..water closet - {0x1F6BF, 0x1F6BF, prExtendedPictographic}, // E1.0 [1] (🚿) shower - {0x1F6C0, 0x1F6C0, prExtendedPictographic}, // E0.6 [1] (🛀) person taking bath - {0x1F6C1, 0x1F6C5, prExtendedPictographic}, // E1.0 [5] (🛁..🛅) bathtub..left luggage - {0x1F6C6, 0x1F6CA, prExtendedPictographic}, // E0.0 [5] (🛆..🛊) TRIANGLE WITH ROUNDED CORNERS..GIRLS SYMBOL - {0x1F6CB, 0x1F6CB, prExtendedPictographic}, // E0.7 [1] (🛋️) couch and lamp - {0x1F6CC, 0x1F6CC, prExtendedPictographic}, // E1.0 [1] (🛌) person in bed - {0x1F6CD, 0x1F6CF, prExtendedPictographic}, // E0.7 [3] (🛍️..🛏️) shopping bags..bed - {0x1F6D0, 0x1F6D0, prExtendedPictographic}, // E1.0 [1] (🛐) place of worship - {0x1F6D1, 0x1F6D2, prExtendedPictographic}, // E3.0 [2] (🛑..🛒) stop sign..shopping cart - {0x1F6D3, 0x1F6D4, prExtendedPictographic}, // E0.0 [2] (🛓..🛔) STUPA..PAGODA - {0x1F6D5, 0x1F6D5, prExtendedPictographic}, // E12.0 [1] (🛕) hindu temple - {0x1F6D6, 0x1F6D7, prExtendedPictographic}, // E13.0 [2] (🛖..🛗) hut..elevator - {0x1F6D8, 0x1F6DB, prExtendedPictographic}, // E0.0 [4] (🛘..🛛) .. - {0x1F6DC, 0x1F6DC, prExtendedPictographic}, // E15.0 [1] (🛜) wireless - {0x1F6DD, 0x1F6DF, prExtendedPictographic}, // E14.0 [3] (🛝..🛟) playground slide..ring buoy - {0x1F6E0, 0x1F6E5, prExtendedPictographic}, // E0.7 [6] (🛠️..🛥️) hammer and wrench..motor boat - {0x1F6E6, 0x1F6E8, prExtendedPictographic}, // E0.0 [3] (🛦..🛨) UP-POINTING MILITARY AIRPLANE..UP-POINTING SMALL AIRPLANE - {0x1F6E9, 0x1F6E9, prExtendedPictographic}, // E0.7 [1] (🛩️) small airplane - {0x1F6EA, 0x1F6EA, prExtendedPictographic}, // E0.0 [1] (🛪) NORTHEAST-POINTING AIRPLANE - {0x1F6EB, 0x1F6EC, prExtendedPictographic}, // E1.0 [2] (🛫..🛬) airplane departure..airplane arrival - {0x1F6ED, 0x1F6EF, prExtendedPictographic}, // E0.0 [3] (🛭..🛯) .. - {0x1F6F0, 0x1F6F0, prExtendedPictographic}, // E0.7 [1] (🛰️) satellite - {0x1F6F1, 0x1F6F2, prExtendedPictographic}, // E0.0 [2] (🛱..🛲) ONCOMING FIRE ENGINE..DIESEL LOCOMOTIVE - {0x1F6F3, 0x1F6F3, prExtendedPictographic}, // E0.7 [1] (🛳️) passenger ship - {0x1F6F4, 0x1F6F6, prExtendedPictographic}, // E3.0 [3] (🛴..🛶) kick scooter..canoe - {0x1F6F7, 0x1F6F8, prExtendedPictographic}, // E5.0 [2] (🛷..🛸) sled..flying saucer - {0x1F6F9, 0x1F6F9, prExtendedPictographic}, // E11.0 [1] (🛹) skateboard - {0x1F6FA, 0x1F6FA, prExtendedPictographic}, // E12.0 [1] (🛺) auto rickshaw - {0x1F6FB, 0x1F6FC, prExtendedPictographic}, // E13.0 [2] (🛻..🛼) pickup truck..roller skate - {0x1F6FD, 0x1F6FF, prExtendedPictographic}, // E0.0 [3] (🛽..🛿) .. - {0x1F774, 0x1F77F, prExtendedPictographic}, // E0.0 [12] (🝴..🝿) LOT OF FORTUNE..ORCUS - {0x1F7D5, 0x1F7DF, prExtendedPictographic}, // E0.0 [11] (🟕..🟟) CIRCLED TRIANGLE.. - {0x1F7E0, 0x1F7EB, prExtendedPictographic}, // E12.0 [12] (🟠..🟫) orange circle..brown square - {0x1F7EC, 0x1F7EF, prExtendedPictographic}, // E0.0 [4] (🟬..🟯) .. - {0x1F7F0, 0x1F7F0, prExtendedPictographic}, // E14.0 [1] (🟰) heavy equals sign - {0x1F7F1, 0x1F7FF, prExtendedPictographic}, // E0.0 [15] (🟱..🟿) .. - {0x1F80C, 0x1F80F, prExtendedPictographic}, // E0.0 [4] (🠌..🠏) .. - {0x1F848, 0x1F84F, prExtendedPictographic}, // E0.0 [8] (🡈..🡏) .. - {0x1F85A, 0x1F85F, prExtendedPictographic}, // E0.0 [6] (🡚..🡟) .. - {0x1F888, 0x1F88F, prExtendedPictographic}, // E0.0 [8] (🢈..🢏) .. - {0x1F8AE, 0x1F8FF, prExtendedPictographic}, // E0.0 [82] (🢮..🣿) .. - {0x1F90C, 0x1F90C, prExtendedPictographic}, // E13.0 [1] (🤌) pinched fingers - {0x1F90D, 0x1F90F, prExtendedPictographic}, // E12.0 [3] (🤍..🤏) white heart..pinching hand - {0x1F910, 0x1F918, prExtendedPictographic}, // E1.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns - {0x1F919, 0x1F91E, prExtendedPictographic}, // E3.0 [6] (🤙..🤞) call me hand..crossed fingers - {0x1F91F, 0x1F91F, prExtendedPictographic}, // E5.0 [1] (🤟) love-you gesture - {0x1F920, 0x1F927, prExtendedPictographic}, // E3.0 [8] (🤠..🤧) cowboy hat face..sneezing face - {0x1F928, 0x1F92F, prExtendedPictographic}, // E5.0 [8] (🤨..🤯) face with raised eyebrow..exploding head - {0x1F930, 0x1F930, prExtendedPictographic}, // E3.0 [1] (🤰) pregnant woman - {0x1F931, 0x1F932, prExtendedPictographic}, // E5.0 [2] (🤱..🤲) breast-feeding..palms up together - {0x1F933, 0x1F93A, prExtendedPictographic}, // E3.0 [8] (🤳..🤺) selfie..person fencing - {0x1F93C, 0x1F93E, prExtendedPictographic}, // E3.0 [3] (🤼..🤾) people wrestling..person playing handball - {0x1F93F, 0x1F93F, prExtendedPictographic}, // E12.0 [1] (🤿) diving mask - {0x1F940, 0x1F945, prExtendedPictographic}, // E3.0 [6] (🥀..🥅) wilted flower..goal net - {0x1F947, 0x1F94B, prExtendedPictographic}, // E3.0 [5] (🥇..🥋) 1st place medal..martial arts uniform - {0x1F94C, 0x1F94C, prExtendedPictographic}, // E5.0 [1] (🥌) curling stone - {0x1F94D, 0x1F94F, prExtendedPictographic}, // E11.0 [3] (🥍..🥏) lacrosse..flying disc - {0x1F950, 0x1F95E, prExtendedPictographic}, // E3.0 [15] (🥐..🥞) croissant..pancakes - {0x1F95F, 0x1F96B, prExtendedPictographic}, // E5.0 [13] (🥟..🥫) dumpling..canned food - {0x1F96C, 0x1F970, prExtendedPictographic}, // E11.0 [5] (🥬..🥰) leafy green..smiling face with hearts - {0x1F971, 0x1F971, prExtendedPictographic}, // E12.0 [1] (🥱) yawning face - {0x1F972, 0x1F972, prExtendedPictographic}, // E13.0 [1] (🥲) smiling face with tear - {0x1F973, 0x1F976, prExtendedPictographic}, // E11.0 [4] (🥳..🥶) partying face..cold face - {0x1F977, 0x1F978, prExtendedPictographic}, // E13.0 [2] (🥷..🥸) ninja..disguised face - {0x1F979, 0x1F979, prExtendedPictographic}, // E14.0 [1] (🥹) face holding back tears - {0x1F97A, 0x1F97A, prExtendedPictographic}, // E11.0 [1] (🥺) pleading face - {0x1F97B, 0x1F97B, prExtendedPictographic}, // E12.0 [1] (🥻) sari - {0x1F97C, 0x1F97F, prExtendedPictographic}, // E11.0 [4] (🥼..🥿) lab coat..flat shoe - {0x1F980, 0x1F984, prExtendedPictographic}, // E1.0 [5] (🦀..🦄) crab..unicorn - {0x1F985, 0x1F991, prExtendedPictographic}, // E3.0 [13] (🦅..🦑) eagle..squid - {0x1F992, 0x1F997, prExtendedPictographic}, // E5.0 [6] (🦒..🦗) giraffe..cricket - {0x1F998, 0x1F9A2, prExtendedPictographic}, // E11.0 [11] (🦘..🦢) kangaroo..swan - {0x1F9A3, 0x1F9A4, prExtendedPictographic}, // E13.0 [2] (🦣..🦤) mammoth..dodo - {0x1F9A5, 0x1F9AA, prExtendedPictographic}, // E12.0 [6] (🦥..🦪) sloth..oyster - {0x1F9AB, 0x1F9AD, prExtendedPictographic}, // E13.0 [3] (🦫..🦭) beaver..seal - {0x1F9AE, 0x1F9AF, prExtendedPictographic}, // E12.0 [2] (🦮..🦯) guide dog..white cane - {0x1F9B0, 0x1F9B9, prExtendedPictographic}, // E11.0 [10] (🦰..🦹) red hair..supervillain - {0x1F9BA, 0x1F9BF, prExtendedPictographic}, // E12.0 [6] (🦺..🦿) safety vest..mechanical leg - {0x1F9C0, 0x1F9C0, prExtendedPictographic}, // E1.0 [1] (🧀) cheese wedge - {0x1F9C1, 0x1F9C2, prExtendedPictographic}, // E11.0 [2] (🧁..🧂) cupcake..salt - {0x1F9C3, 0x1F9CA, prExtendedPictographic}, // E12.0 [8] (🧃..🧊) beverage box..ice - {0x1F9CB, 0x1F9CB, prExtendedPictographic}, // E13.0 [1] (🧋) bubble tea - {0x1F9CC, 0x1F9CC, prExtendedPictographic}, // E14.0 [1] (🧌) troll - {0x1F9CD, 0x1F9CF, prExtendedPictographic}, // E12.0 [3] (🧍..🧏) person standing..deaf person - {0x1F9D0, 0x1F9E6, prExtendedPictographic}, // E5.0 [23] (🧐..🧦) face with monocle..socks - {0x1F9E7, 0x1F9FF, prExtendedPictographic}, // E11.0 [25] (🧧..🧿) red envelope..nazar amulet - {0x1FA00, 0x1FA6F, prExtendedPictographic}, // E0.0 [112] (🨀..🩯) NEUTRAL CHESS KING.. - {0x1FA70, 0x1FA73, prExtendedPictographic}, // E12.0 [4] (🩰..🩳) ballet shoes..shorts - {0x1FA74, 0x1FA74, prExtendedPictographic}, // E13.0 [1] (🩴) thong sandal - {0x1FA75, 0x1FA77, prExtendedPictographic}, // E15.0 [3] (🩵..🩷) light blue heart..pink heart - {0x1FA78, 0x1FA7A, prExtendedPictographic}, // E12.0 [3] (🩸..🩺) drop of blood..stethoscope - {0x1FA7B, 0x1FA7C, prExtendedPictographic}, // E14.0 [2] (🩻..🩼) x-ray..crutch - {0x1FA7D, 0x1FA7F, prExtendedPictographic}, // E0.0 [3] (🩽..🩿) .. - {0x1FA80, 0x1FA82, prExtendedPictographic}, // E12.0 [3] (🪀..🪂) yo-yo..parachute - {0x1FA83, 0x1FA86, prExtendedPictographic}, // E13.0 [4] (🪃..🪆) boomerang..nesting dolls - {0x1FA87, 0x1FA88, prExtendedPictographic}, // E15.0 [2] (🪇..🪈) maracas..flute - {0x1FA89, 0x1FA8F, prExtendedPictographic}, // E0.0 [7] (🪉..🪏) .. - {0x1FA90, 0x1FA95, prExtendedPictographic}, // E12.0 [6] (🪐..🪕) ringed planet..banjo - {0x1FA96, 0x1FAA8, prExtendedPictographic}, // E13.0 [19] (🪖..🪨) military helmet..rock - {0x1FAA9, 0x1FAAC, prExtendedPictographic}, // E14.0 [4] (🪩..🪬) mirror ball..hamsa - {0x1FAAD, 0x1FAAF, prExtendedPictographic}, // E15.0 [3] (🪭..🪯) folding hand fan..khanda - {0x1FAB0, 0x1FAB6, prExtendedPictographic}, // E13.0 [7] (🪰..🪶) fly..feather - {0x1FAB7, 0x1FABA, prExtendedPictographic}, // E14.0 [4] (🪷..🪺) lotus..nest with eggs - {0x1FABB, 0x1FABD, prExtendedPictographic}, // E15.0 [3] (🪻..🪽) hyacinth..wing - {0x1FABE, 0x1FABE, prExtendedPictographic}, // E0.0 [1] (🪾) - {0x1FABF, 0x1FABF, prExtendedPictographic}, // E15.0 [1] (🪿) goose - {0x1FAC0, 0x1FAC2, prExtendedPictographic}, // E13.0 [3] (🫀..🫂) anatomical heart..people hugging - {0x1FAC3, 0x1FAC5, prExtendedPictographic}, // E14.0 [3] (🫃..🫅) pregnant man..person with crown - {0x1FAC6, 0x1FACD, prExtendedPictographic}, // E0.0 [8] (🫆..🫍) .. - {0x1FACE, 0x1FACF, prExtendedPictographic}, // E15.0 [2] (🫎..🫏) moose..donkey - {0x1FAD0, 0x1FAD6, prExtendedPictographic}, // E13.0 [7] (🫐..🫖) blueberries..teapot - {0x1FAD7, 0x1FAD9, prExtendedPictographic}, // E14.0 [3] (🫗..🫙) pouring liquid..jar - {0x1FADA, 0x1FADB, prExtendedPictographic}, // E15.0 [2] (🫚..🫛) ginger root..pea pod - {0x1FADC, 0x1FADF, prExtendedPictographic}, // E0.0 [4] (🫜..🫟) .. - {0x1FAE0, 0x1FAE7, prExtendedPictographic}, // E14.0 [8] (🫠..🫧) melting face..bubbles - {0x1FAE8, 0x1FAE8, prExtendedPictographic}, // E15.0 [1] (🫨) shaking face - {0x1FAE9, 0x1FAEF, prExtendedPictographic}, // E0.0 [7] (🫩..🫯) .. - {0x1FAF0, 0x1FAF6, prExtendedPictographic}, // E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands - {0x1FAF7, 0x1FAF8, prExtendedPictographic}, // E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand - {0x1FAF9, 0x1FAFF, prExtendedPictographic}, // E0.0 [7] (🫹..🫿) .. - {0x1FBF0, 0x1FBF9, prNumeric}, // Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE - {0x1FC00, 0x1FFFD, prExtendedPictographic}, // E0.0[1022] (🰀..🿽) .. - {0xE0001, 0xE0001, prFormat}, // Cf LANGUAGE TAG - {0xE0020, 0xE007F, prExtend}, // Cf [96] TAG SPACE..CANCEL TAG - {0xE0100, 0xE01EF, prExtend}, // Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -} diff --git a/vendor/github.com/rivo/uniseg/wordrules.go b/vendor/github.com/rivo/uniseg/wordrules.go deleted file mode 100644 index 57a8c68311..0000000000 --- a/vendor/github.com/rivo/uniseg/wordrules.go +++ /dev/null @@ -1,282 +0,0 @@ -package uniseg - -import "unicode/utf8" - -// The states of the word break parser. -const ( - wbAny = iota - wbCR - wbLF - wbNewline - wbWSegSpace - wbHebrewLetter - wbALetter - wbWB7 - wbWB7c - wbNumeric - wbWB11 - wbKatakana - wbExtendNumLet - wbOddRI - wbEvenRI - wbZWJBit = 16 // This bit is set for any states followed by at least one zero-width joiner (see WB4 and WB3c). -) - -// wbTransitions implements the word break parser's state transitions. It's -// anologous to [grTransitions], see comments there for details. -// -// Unicode version 15.0.0. -func wbTransitions(state, prop int) (newState int, wordBreak bool, rule int) { - switch uint64(state) | uint64(prop)<<32 { - // WB3b. - case wbAny | prNewline<<32: - return wbNewline, true, 32 - case wbAny | prCR<<32: - return wbCR, true, 32 - case wbAny | prLF<<32: - return wbLF, true, 32 - - // WB3a. - case wbNewline | prAny<<32: - return wbAny, true, 31 - case wbCR | prAny<<32: - return wbAny, true, 31 - case wbLF | prAny<<32: - return wbAny, true, 31 - - // WB3. - case wbCR | prLF<<32: - return wbLF, false, 30 - - // WB3d. - case wbAny | prWSegSpace<<32: - return wbWSegSpace, true, 9990 - case wbWSegSpace | prWSegSpace<<32: - return wbWSegSpace, false, 34 - - // WB5. - case wbAny | prALetter<<32: - return wbALetter, true, 9990 - case wbAny | prHebrewLetter<<32: - return wbHebrewLetter, true, 9990 - case wbALetter | prALetter<<32: - return wbALetter, false, 50 - case wbALetter | prHebrewLetter<<32: - return wbHebrewLetter, false, 50 - case wbHebrewLetter | prALetter<<32: - return wbALetter, false, 50 - case wbHebrewLetter | prHebrewLetter<<32: - return wbHebrewLetter, false, 50 - - // WB7. Transitions to wbWB7 handled by transitionWordBreakState(). - case wbWB7 | prALetter<<32: - return wbALetter, false, 70 - case wbWB7 | prHebrewLetter<<32: - return wbHebrewLetter, false, 70 - - // WB7a. - case wbHebrewLetter | prSingleQuote<<32: - return wbAny, false, 71 - - // WB7c. Transitions to wbWB7c handled by transitionWordBreakState(). - case wbWB7c | prHebrewLetter<<32: - return wbHebrewLetter, false, 73 - - // WB8. - case wbAny | prNumeric<<32: - return wbNumeric, true, 9990 - case wbNumeric | prNumeric<<32: - return wbNumeric, false, 80 - - // WB9. - case wbALetter | prNumeric<<32: - return wbNumeric, false, 90 - case wbHebrewLetter | prNumeric<<32: - return wbNumeric, false, 90 - - // WB10. - case wbNumeric | prALetter<<32: - return wbALetter, false, 100 - case wbNumeric | prHebrewLetter<<32: - return wbHebrewLetter, false, 100 - - // WB11. Transitions to wbWB11 handled by transitionWordBreakState(). - case wbWB11 | prNumeric<<32: - return wbNumeric, false, 110 - - // WB13. - case wbAny | prKatakana<<32: - return wbKatakana, true, 9990 - case wbKatakana | prKatakana<<32: - return wbKatakana, false, 130 - - // WB13a. - case wbAny | prExtendNumLet<<32: - return wbExtendNumLet, true, 9990 - case wbALetter | prExtendNumLet<<32: - return wbExtendNumLet, false, 131 - case wbHebrewLetter | prExtendNumLet<<32: - return wbExtendNumLet, false, 131 - case wbNumeric | prExtendNumLet<<32: - return wbExtendNumLet, false, 131 - case wbKatakana | prExtendNumLet<<32: - return wbExtendNumLet, false, 131 - case wbExtendNumLet | prExtendNumLet<<32: - return wbExtendNumLet, false, 131 - - // WB13b. - case wbExtendNumLet | prALetter<<32: - return wbALetter, false, 132 - case wbExtendNumLet | prHebrewLetter<<32: - return wbHebrewLetter, false, 132 - case wbExtendNumLet | prNumeric<<32: - return wbNumeric, false, 132 - case wbExtendNumLet | prKatakana<<32: - return wbKatakana, false, 132 - - default: - return -1, false, -1 - } -} - -// transitionWordBreakState determines the new state of the word break parser -// given the current state and the next code point. It also returns whether a -// word boundary was detected. If more than one code point is needed to -// determine the new state, the byte slice or the string starting after rune "r" -// can be used (whichever is not nil or empty) for further lookups. -func transitionWordBreakState(state int, r rune, b []byte, str string) (newState int, wordBreak bool) { - // Determine the property of the next character. - nextProperty := property(workBreakCodePoints, r) - - // "Replacing Ignore Rules". - if nextProperty == prZWJ { - // WB4 (for zero-width joiners). - if state == wbNewline || state == wbCR || state == wbLF { - return wbAny | wbZWJBit, true // Make sure we don't apply WB4 to WB3a. - } - if state < 0 { - return wbAny | wbZWJBit, false - } - return state | wbZWJBit, false - } else if nextProperty == prExtend || nextProperty == prFormat { - // WB4 (for Extend and Format). - if state == wbNewline || state == wbCR || state == wbLF { - return wbAny, true // Make sure we don't apply WB4 to WB3a. - } - if state == wbWSegSpace || state == wbAny|wbZWJBit { - return wbAny, false // We don't break but this is also not WB3d or WB3c. - } - if state < 0 { - return wbAny, false - } - return state, false - } else if nextProperty == prExtendedPictographic && state >= 0 && state&wbZWJBit != 0 { - // WB3c. - return wbAny, false - } - if state >= 0 { - state = state &^ wbZWJBit - } - - // Find the applicable transition in the table. - var rule int - newState, wordBreak, rule = wbTransitions(state, nextProperty) - if newState < 0 { - // No specific transition found. Try the less specific ones. - anyPropState, anyPropWordBreak, anyPropRule := wbTransitions(state, prAny) - anyStateState, anyStateWordBreak, anyStateRule := wbTransitions(wbAny, nextProperty) - if anyPropState >= 0 && anyStateState >= 0 { - // Both apply. We'll use a mix (see comments for grTransitions). - newState, wordBreak, rule = anyStateState, anyStateWordBreak, anyStateRule - if anyPropRule < anyStateRule { - wordBreak, rule = anyPropWordBreak, anyPropRule - } - } else if anyPropState >= 0 { - // We only have a specific state. - newState, wordBreak, rule = anyPropState, anyPropWordBreak, anyPropRule - // This branch will probably never be reached because okAnyState will - // always be true given the current transition map. But we keep it here - // for future modifications to the transition map where this may not be - // true anymore. - } else if anyStateState >= 0 { - // We only have a specific property. - newState, wordBreak, rule = anyStateState, anyStateWordBreak, anyStateRule - } else { - // No known transition. WB999: Any ÷ Any. - newState, wordBreak, rule = wbAny, true, 9990 - } - } - - // For those rules that need to look up runes further in the string, we - // determine the property after nextProperty, skipping over Format, Extend, - // and ZWJ (according to WB4). It's -1 if not needed, if such a rune cannot - // be determined (because the text ends or the rune is faulty). - farProperty := -1 - if rule > 60 && - (state == wbALetter || state == wbHebrewLetter || state == wbNumeric) && - (nextProperty == prMidLetter || nextProperty == prMidNumLet || nextProperty == prSingleQuote || // WB6. - nextProperty == prDoubleQuote || // WB7b. - nextProperty == prMidNum) { // WB12. - for { - var ( - r rune - length int - ) - if b != nil { // Byte slice version. - r, length = utf8.DecodeRune(b) - b = b[length:] - } else { // String version. - r, length = utf8.DecodeRuneInString(str) - str = str[length:] - } - if r == utf8.RuneError { - break - } - prop := property(workBreakCodePoints, r) - if prop == prExtend || prop == prFormat || prop == prZWJ { - continue - } - farProperty = prop - break - } - } - - // WB6. - if rule > 60 && - (state == wbALetter || state == wbHebrewLetter) && - (nextProperty == prMidLetter || nextProperty == prMidNumLet || nextProperty == prSingleQuote) && - (farProperty == prALetter || farProperty == prHebrewLetter) { - return wbWB7, false - } - - // WB7b. - if rule > 72 && - state == wbHebrewLetter && - nextProperty == prDoubleQuote && - farProperty == prHebrewLetter { - return wbWB7c, false - } - - // WB12. - if rule > 120 && - state == wbNumeric && - (nextProperty == prMidNum || nextProperty == prMidNumLet || nextProperty == prSingleQuote) && - farProperty == prNumeric { - return wbWB11, false - } - - // WB15 and WB16. - if newState == wbAny && nextProperty == prRegionalIndicator { - if state != wbOddRI && state != wbEvenRI { // Includes state == -1. - // Transition into the first RI. - return wbOddRI, true - } - if state == wbOddRI { - // Don't break pairs of Regional Indicators. - return wbEvenRI, false - } - return wbOddRI, true // We can break after a pair. - } - - return -} diff --git a/vendor/github.com/spf13/cobra/.golangci.yml b/vendor/github.com/spf13/cobra/.golangci.yml index 6acf8ab1ea..104dc24407 100644 --- a/vendor/github.com/spf13/cobra/.golangci.yml +++ b/vendor/github.com/spf13/cobra/.golangci.yml @@ -57,3 +57,10 @@ linters: - common-false-positives - legacy - std-error-handling + settings: + govet: + # Disable buildtag check to allow dual build tag syntax (both //go:build and // +build). + # This is necessary for Go 1.15 compatibility since //go:build was introduced in Go 1.17. + # This can be removed once Cobra requires Go 1.17 or higher. + disable: + - buildtag diff --git a/vendor/github.com/spf13/cobra/command.go b/vendor/github.com/spf13/cobra/command.go index 78088db69c..c05fed45ae 100644 --- a/vendor/github.com/spf13/cobra/command.go +++ b/vendor/github.com/spf13/cobra/command.go @@ -557,7 +557,7 @@ func (c *Command) FlagErrorFunc() (f func(*Command, error) error) { } } -var minUsagePadding = 25 +const minUsagePadding = 25 // UsagePadding return padding for the usage. func (c *Command) UsagePadding() int { @@ -567,7 +567,7 @@ func (c *Command) UsagePadding() int { return c.parent.commandsMaxUseLen } -var minCommandPathPadding = 11 +const minCommandPathPadding = 11 // CommandPathPadding return padding for the command path. func (c *Command) CommandPathPadding() int { @@ -577,7 +577,7 @@ func (c *Command) CommandPathPadding() int { return c.parent.commandsMaxCommandPathLen } -var minNamePadding = 11 +const minNamePadding = 11 // NamePadding returns padding for the name. func (c *Command) NamePadding() int { @@ -1939,7 +1939,7 @@ type tmplFunc struct { fn func(io.Writer, interface{}) error } -var defaultUsageTemplate = `Usage:{{if .Runnable}} +const defaultUsageTemplate = `Usage:{{if .Runnable}} {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}} {{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}} @@ -2039,7 +2039,7 @@ func defaultUsageFunc(w io.Writer, in interface{}) error { return nil } -var defaultHelpTemplate = `{{with (or .Long .Short)}}{{. | trimTrailingWhitespaces}} +const defaultHelpTemplate = `{{with (or .Long .Short)}}{{. | trimTrailingWhitespaces}} {{end}}{{if or .Runnable .HasSubCommands}}{{.UsageString}}{{end}}` @@ -2061,7 +2061,7 @@ func defaultHelpFunc(w io.Writer, in interface{}) error { return nil } -var defaultVersionTemplate = `{{with .DisplayName}}{{printf "%s " .}}{{end}}{{printf "version %s" .Version}} +const defaultVersionTemplate = `{{with .DisplayName}}{{printf "%s " .}}{{end}}{{printf "version %s" .Version}} ` // defaultVersionFunc is equivalent to executing defaultVersionTemplate. The two should be changed in sync. diff --git a/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/id.go b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/id.go index e854d7e84e..2950fdb42e 100644 --- a/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/id.go +++ b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/id.go @@ -82,7 +82,7 @@ func marshalJSON(id []byte) ([]byte, error) { } // unmarshalJSON inflates trace id from hex string, possibly enclosed in quotes. -func unmarshalJSON(dst []byte, src []byte) error { +func unmarshalJSON(dst, src []byte) error { if l := len(src); l >= 2 && src[0] == '"' && src[l-1] == '"' { src = src[1 : l-1] } diff --git a/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/number.go b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/number.go index 29e629d667..5bb3b16c70 100644 --- a/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/number.go +++ b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/number.go @@ -41,7 +41,7 @@ func (i *protoInt64) UnmarshalJSON(data []byte) error { // strings or integers. type protoUint64 uint64 -// Int64 returns the protoUint64 as a uint64. +// Uint64 returns the protoUint64 as a uint64. func (i *protoUint64) Uint64() uint64 { return uint64(*i) } // UnmarshalJSON decodes both strings and integers. diff --git a/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/span.go b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/span.go index a13a6b733d..67f80b6aa0 100644 --- a/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/span.go +++ b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/span.go @@ -10,6 +10,7 @@ import ( "errors" "fmt" "io" + "math" "time" ) @@ -151,8 +152,8 @@ func (s Span) MarshalJSON() ([]byte, error) { }{ Alias: Alias(s), ParentSpanID: parentSpanId, - StartTime: uint64(startT), - EndTime: uint64(endT), + StartTime: uint64(startT), // nolint:gosec // >0 checked above. + EndTime: uint64(endT), // nolint:gosec // >0 checked above. }) } @@ -201,11 +202,13 @@ func (s *Span) UnmarshalJSON(data []byte) error { case "startTimeUnixNano", "start_time_unix_nano": var val protoUint64 err = decoder.Decode(&val) - s.StartTime = time.Unix(0, int64(val.Uint64())) + v := int64(min(val.Uint64(), math.MaxInt64)) //nolint:gosec // Overflow checked. + s.StartTime = time.Unix(0, v) case "endTimeUnixNano", "end_time_unix_nano": var val protoUint64 err = decoder.Decode(&val) - s.EndTime = time.Unix(0, int64(val.Uint64())) + v := int64(min(val.Uint64(), math.MaxInt64)) //nolint:gosec // Overflow checked. + s.EndTime = time.Unix(0, v) case "attributes": err = decoder.Decode(&s.Attrs) case "droppedAttributesCount", "dropped_attributes_count": @@ -248,13 +251,20 @@ func (s *Span) UnmarshalJSON(data []byte) error { type SpanFlags int32 const ( + // SpanFlagsTraceFlagsMask is a mask for trace-flags. + // // Bits 0-7 are used for trace flags. SpanFlagsTraceFlagsMask SpanFlags = 255 - // Bits 8 and 9 are used to indicate that the parent span or link span is remote. - // Bit 8 (`HAS_IS_REMOTE`) indicates whether the value is known. - // Bit 9 (`IS_REMOTE`) indicates whether the span or link is remote. + // SpanFlagsContextHasIsRemoteMask is a mask for HAS_IS_REMOTE status. + // + // Bits 8 and 9 are used to indicate that the parent span or link span is + // remote. Bit 8 (`HAS_IS_REMOTE`) indicates whether the value is known. SpanFlagsContextHasIsRemoteMask SpanFlags = 256 - // SpanFlagsContextHasIsRemoteMask indicates the Span is remote. + // SpanFlagsContextIsRemoteMask is a mask for IS_REMOTE status. + // + // Bits 8 and 9 are used to indicate that the parent span or link span is + // remote. Bit 9 (`IS_REMOTE`) indicates whether the span or link is + // remote. SpanFlagsContextIsRemoteMask SpanFlags = 512 ) @@ -263,26 +273,30 @@ const ( type SpanKind int32 const ( - // Indicates that the span represents an internal operation within an application, - // as opposed to an operation happening at the boundaries. Default value. + // SpanKindInternal indicates that the span represents an internal + // operation within an application, as opposed to an operation happening at + // the boundaries. SpanKindInternal SpanKind = 1 - // Indicates that the span covers server-side handling of an RPC or other - // remote network request. + // SpanKindServer indicates that the span covers server-side handling of an + // RPC or other remote network request. SpanKindServer SpanKind = 2 - // Indicates that the span describes a request to some remote service. + // SpanKindClient indicates that the span describes a request to some + // remote service. SpanKindClient SpanKind = 3 - // Indicates that the span describes a producer sending a message to a broker. - // Unlike CLIENT and SERVER, there is often no direct critical path latency relationship - // between producer and consumer spans. A PRODUCER span ends when the message was accepted - // by the broker while the logical processing of the message might span a much longer time. + // SpanKindProducer indicates that the span describes a producer sending a + // message to a broker. Unlike SpanKindClient and SpanKindServer, there is + // often no direct critical path latency relationship between producer and + // consumer spans. A SpanKindProducer span ends when the message was + // accepted by the broker while the logical processing of the message might + // span a much longer time. SpanKindProducer SpanKind = 4 - // Indicates that the span describes consumer receiving a message from a broker. - // Like the PRODUCER kind, there is often no direct critical path latency relationship - // between producer and consumer spans. + // SpanKindConsumer indicates that the span describes a consumer receiving + // a message from a broker. Like SpanKindProducer, there is often no direct + // critical path latency relationship between producer and consumer spans. SpanKindConsumer SpanKind = 5 ) -// Event is a time-stamped annotation of the span, consisting of user-supplied +// SpanEvent is a time-stamped annotation of the span, consisting of user-supplied // text description and key-value pairs. type SpanEvent struct { // time_unix_nano is the time the event occurred. @@ -312,7 +326,7 @@ func (e SpanEvent) MarshalJSON() ([]byte, error) { Time uint64 `json:"timeUnixNano,omitempty"` }{ Alias: Alias(e), - Time: uint64(t), + Time: uint64(t), //nolint:gosec // >0 checked above }) } @@ -347,7 +361,8 @@ func (se *SpanEvent) UnmarshalJSON(data []byte) error { case "timeUnixNano", "time_unix_nano": var val protoUint64 err = decoder.Decode(&val) - se.Time = time.Unix(0, int64(val.Uint64())) + v := int64(min(val.Uint64(), math.MaxInt64)) //nolint:gosec // Overflow checked. + se.Time = time.Unix(0, v) case "name": err = decoder.Decode(&se.Name) case "attributes": @@ -365,10 +380,11 @@ func (se *SpanEvent) UnmarshalJSON(data []byte) error { return nil } -// A pointer from the current span to another span in the same trace or in a -// different trace. For example, this can be used in batching operations, -// where a single batch handler processes multiple requests from different -// traces or when the handler receives a request from a different project. +// SpanLink is a reference from the current span to another span in the same +// trace or in a different trace. For example, this can be used in batching +// operations, where a single batch handler processes multiple requests from +// different traces or when the handler receives a request from a different +// project. type SpanLink struct { // A unique identifier of a trace that this linked span is part of. The ID is a // 16-byte array. diff --git a/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/status.go b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/status.go index 1217776ead..a2802764f8 100644 --- a/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/status.go +++ b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/status.go @@ -3,17 +3,19 @@ package telemetry +// StatusCode is the status of a Span. +// // For the semantics of status codes see // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/api.md#set-status type StatusCode int32 const ( - // The default status. + // StatusCodeUnset is the default status. StatusCodeUnset StatusCode = 0 - // The Span has been validated by an Application developer or Operator to - // have completed successfully. + // StatusCodeOK is used when the Span has been validated by an Application + // developer or Operator to have completed successfully. StatusCodeOK StatusCode = 1 - // The Span contains an error. + // StatusCodeError is used when the Span contains an error. StatusCodeError StatusCode = 2 ) diff --git a/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/traces.go b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/traces.go index 69a348f0f0..44197b8084 100644 --- a/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/traces.go +++ b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/traces.go @@ -71,7 +71,7 @@ func (td *Traces) UnmarshalJSON(data []byte) error { return nil } -// A collection of ScopeSpans from a Resource. +// ResourceSpans is a collection of ScopeSpans from a Resource. type ResourceSpans struct { // The resource for the spans in this message. // If this field is not set then no resource info is known. @@ -128,7 +128,7 @@ func (rs *ResourceSpans) UnmarshalJSON(data []byte) error { return nil } -// A collection of Spans produced by an InstrumentationScope. +// ScopeSpans is a collection of Spans produced by an InstrumentationScope. type ScopeSpans struct { // The instrumentation scope information for the spans in this message. // Semantically when InstrumentationScope isn't set, it is equivalent with diff --git a/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/value.go b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/value.go index 0dd01b063a..022768bb50 100644 --- a/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/value.go +++ b/vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/value.go @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -//go:generate stringer -type=ValueKind -trimprefix=ValueKind - package telemetry import ( @@ -23,7 +21,7 @@ import ( // A zero value is valid and represents an empty value. type Value struct { // Ensure forward compatibility by explicitly making this not comparable. - noCmp [0]func() //nolint: unused // This is indeed used. + noCmp [0]func() //nolint:unused // This is indeed used. // num holds the value for Int64, Float64, and Bool. It holds the length // for String, Bytes, Slice, Map. @@ -92,7 +90,7 @@ func IntValue(v int) Value { return Int64Value(int64(v)) } // Int64Value returns a [Value] for an int64. func Int64Value(v int64) Value { - return Value{num: uint64(v), any: ValueKindInt64} + return Value{num: uint64(v), any: ValueKindInt64} //nolint:gosec // Raw value conv. } // Float64Value returns a [Value] for a float64. @@ -164,7 +162,7 @@ func (v Value) AsInt64() int64 { // this will return garbage. func (v Value) asInt64() int64 { // Assumes v.num was a valid int64 (overflow not checked). - return int64(v.num) // nolint: gosec + return int64(v.num) //nolint:gosec // Bounded. } // AsBool returns the value held by v as a bool. @@ -309,13 +307,13 @@ func (v Value) String() string { return v.asString() case ValueKindInt64: // Assumes v.num was a valid int64 (overflow not checked). - return strconv.FormatInt(int64(v.num), 10) // nolint: gosec + return strconv.FormatInt(int64(v.num), 10) //nolint:gosec // Bounded. case ValueKindFloat64: return strconv.FormatFloat(v.asFloat64(), 'g', -1, 64) case ValueKindBool: return strconv.FormatBool(v.asBool()) case ValueKindBytes: - return fmt.Sprint(v.asBytes()) + return string(v.asBytes()) case ValueKindMap: return fmt.Sprint(v.asMap()) case ValueKindSlice: @@ -343,7 +341,7 @@ func (v *Value) MarshalJSON() ([]byte, error) { case ValueKindInt64: return json.Marshal(struct { Value string `json:"intValue"` - }{strconv.FormatInt(int64(v.num), 10)}) + }{strconv.FormatInt(int64(v.num), 10)}) //nolint:gosec // Raw value conv. case ValueKindFloat64: return json.Marshal(struct { Value float64 `json:"doubleValue"` diff --git a/vendor/go.opentelemetry.io/auto/sdk/span.go b/vendor/go.opentelemetry.io/auto/sdk/span.go index 6ebea12a9e..815d271ffb 100644 --- a/vendor/go.opentelemetry.io/auto/sdk/span.go +++ b/vendor/go.opentelemetry.io/auto/sdk/span.go @@ -6,6 +6,7 @@ package sdk import ( "encoding/json" "fmt" + "math" "reflect" "runtime" "strings" @@ -16,7 +17,7 @@ import ( "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" - semconv "go.opentelemetry.io/otel/semconv/v1.26.0" + semconv "go.opentelemetry.io/otel/semconv/v1.37.0" "go.opentelemetry.io/otel/trace" "go.opentelemetry.io/otel/trace/noop" @@ -85,7 +86,12 @@ func (s *span) SetAttributes(attrs ...attribute.KeyValue) { limit := maxSpan.Attrs if limit == 0 { // No attributes allowed. - s.span.DroppedAttrs += uint32(len(attrs)) + n := int64(len(attrs)) + if n > 0 { + s.span.DroppedAttrs += uint32( //nolint:gosec // Bounds checked. + min(n, math.MaxUint32), + ) + } return } @@ -121,8 +127,13 @@ func (s *span) SetAttributes(attrs ...attribute.KeyValue) { // convCappedAttrs converts up to limit attrs into a []telemetry.Attr. The // number of dropped attributes is also returned. func convCappedAttrs(limit int, attrs []attribute.KeyValue) ([]telemetry.Attr, uint32) { + n := len(attrs) if limit == 0 { - return nil, uint32(len(attrs)) + var out uint32 + if n > 0 { + out = uint32(min(int64(n), math.MaxUint32)) //nolint:gosec // Bounds checked. + } + return nil, out } if limit < 0 { @@ -130,8 +141,12 @@ func convCappedAttrs(limit int, attrs []attribute.KeyValue) ([]telemetry.Attr, u return convAttrs(attrs), 0 } - limit = min(len(attrs), limit) - return convAttrs(attrs[:limit]), uint32(len(attrs) - limit) + if n < 0 { + n = 0 + } + + limit = min(n, limit) + return convAttrs(attrs[:limit]), uint32(n - limit) //nolint:gosec // Bounds checked. } func convAttrs(attrs []attribute.KeyValue) []telemetry.Attr { diff --git a/vendor/go.opentelemetry.io/auto/sdk/tracer.go b/vendor/go.opentelemetry.io/auto/sdk/tracer.go index cbcfabde3b..e09acf022f 100644 --- a/vendor/go.opentelemetry.io/auto/sdk/tracer.go +++ b/vendor/go.opentelemetry.io/auto/sdk/tracer.go @@ -5,6 +5,7 @@ package sdk import ( "context" + "math" "time" "go.opentelemetry.io/otel/trace" @@ -21,15 +22,20 @@ type tracer struct { var _ trace.Tracer = tracer{} -func (t tracer) Start(ctx context.Context, name string, opts ...trace.SpanStartOption) (context.Context, trace.Span) { - var psc trace.SpanContext +func (t tracer) Start( + ctx context.Context, + name string, + opts ...trace.SpanStartOption, +) (context.Context, trace.Span) { + var psc, sc trace.SpanContext sampled := true span := new(span) // Ask eBPF for sampling decision and span context info. - t.start(ctx, span, &psc, &sampled, &span.spanContext) + t.start(ctx, span, &psc, &sampled, &sc) span.sampled.Store(sampled) + span.spanContext = sc ctx = trace.ContextWithSpan(ctx, span) @@ -58,7 +64,13 @@ func (t *tracer) start( // start is used for testing. var start = func(context.Context, *span, *trace.SpanContext, *bool, *trace.SpanContext) {} -func (t tracer) traces(name string, cfg trace.SpanConfig, sc, psc trace.SpanContext) (*telemetry.Traces, *telemetry.Span) { +var intToUint32Bound = min(math.MaxInt, math.MaxUint32) + +func (t tracer) traces( + name string, + cfg trace.SpanConfig, + sc, psc trace.SpanContext, +) (*telemetry.Traces, *telemetry.Span) { span := &telemetry.Span{ TraceID: telemetry.TraceID(sc.TraceID()), SpanID: telemetry.SpanID(sc.SpanID()), @@ -73,11 +85,16 @@ func (t tracer) traces(name string, cfg trace.SpanConfig, sc, psc trace.SpanCont links := cfg.Links() if limit := maxSpan.Links; limit == 0 { - span.DroppedLinks = uint32(len(links)) + n := len(links) + if n > 0 { + bounded := max(min(n, intToUint32Bound), 0) + span.DroppedLinks = uint32(bounded) //nolint:gosec // Bounds checked. + } } else { if limit > 0 { n := max(len(links)-limit, 0) - span.DroppedLinks = uint32(n) + bounded := min(n, intToUint32Bound) + span.DroppedLinks = uint32(bounded) //nolint:gosec // Bounds checked. links = links[n:] } span.Links = convLinks(links) diff --git a/vendor/go.opentelemetry.io/otel/.codespellignore b/vendor/go.opentelemetry.io/otel/.codespellignore index 6bf3abc41e..2b53a25e1e 100644 --- a/vendor/go.opentelemetry.io/otel/.codespellignore +++ b/vendor/go.opentelemetry.io/otel/.codespellignore @@ -7,3 +7,4 @@ ans nam valu thirdparty +addOpt diff --git a/vendor/go.opentelemetry.io/otel/.golangci.yml b/vendor/go.opentelemetry.io/otel/.golangci.yml index 5f69cc027c..b01762ffcc 100644 --- a/vendor/go.opentelemetry.io/otel/.golangci.yml +++ b/vendor/go.opentelemetry.io/otel/.golangci.yml @@ -10,6 +10,7 @@ linters: - depguard - errcheck - errorlint + - gocritic - godot - gosec - govet @@ -86,6 +87,18 @@ linters: deny: - pkg: go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal desc: Do not use cross-module internal packages. + gocritic: + disabled-checks: + - appendAssign + - commentedOutCode + - dupArg + - hugeParam + - importShadow + - preferDecodeRune + - rangeValCopy + - unnamedResult + - whyNoLint + enable-all: true godot: exclude: # Exclude links. @@ -167,7 +180,10 @@ linters: - fmt.Print - fmt.Printf - fmt.Println + - name: unused-parameter + - name: unused-receiver - name: unnecessary-stmt + - name: use-any - name: useless-break - name: var-declaration - name: var-naming @@ -224,10 +240,6 @@ linters: - linters: - gosec text: 'G402: TLS MinVersion too low.' - paths: - - third_party$ - - builtin$ - - examples$ issues: max-issues-per-linter: 0 max-same-issues: 0 @@ -237,14 +249,12 @@ formatters: - goimports - golines settings: + gofumpt: + extra-rules: true goimports: local-prefixes: - - go.opentelemetry.io + - go.opentelemetry.io/otel golines: max-len: 120 exclusions: generated: lax - paths: - - third_party$ - - builtin$ - - examples$ diff --git a/vendor/go.opentelemetry.io/otel/.lycheeignore b/vendor/go.opentelemetry.io/otel/.lycheeignore index 40d62fa2eb..5328505888 100644 --- a/vendor/go.opentelemetry.io/otel/.lycheeignore +++ b/vendor/go.opentelemetry.io/otel/.lycheeignore @@ -2,5 +2,8 @@ http://localhost http://jaeger-collector https://github.com/open-telemetry/opentelemetry-go/milestone/ https://github.com/open-telemetry/opentelemetry-go/projects +# Weaver model URL for semantic-conventions repository. +https?:\/\/github\.com\/open-telemetry\/semantic-conventions\/archive\/refs\/tags\/[^.]+\.zip\[[^]]+] file:///home/runner/work/opentelemetry-go/opentelemetry-go/libraries file:///home/runner/work/opentelemetry-go/opentelemetry-go/manual +http://4.3.2.1:78/user/123 \ No newline at end of file diff --git a/vendor/go.opentelemetry.io/otel/CHANGELOG.md b/vendor/go.opentelemetry.io/otel/CHANGELOG.md index 4acc75701b..f3abcfdc2e 100644 --- a/vendor/go.opentelemetry.io/otel/CHANGELOG.md +++ b/vendor/go.opentelemetry.io/otel/CHANGELOG.md @@ -11,6 +11,93 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm +## [1.38.0/0.60.0/0.14.0/0.0.13] 2025-08-29 + +This release is the last to support [Go 1.23]. +The next release will require at least [Go 1.24]. + +### Added + +- Add native histogram exemplar support in `go.opentelemetry.io/otel/exporters/prometheus`. (#6772) +- Add template attribute functions to the `go.opentelmetry.io/otel/semconv/v1.34.0` package. (#6939) + - `ContainerLabel` + - `DBOperationParameter` + - `DBSystemParameter` + - `HTTPRequestHeader` + - `HTTPResponseHeader` + - `K8SCronJobAnnotation` + - `K8SCronJobLabel` + - `K8SDaemonSetAnnotation` + - `K8SDaemonSetLabel` + - `K8SDeploymentAnnotation` + - `K8SDeploymentLabel` + - `K8SJobAnnotation` + - `K8SJobLabel` + - `K8SNamespaceAnnotation` + - `K8SNamespaceLabel` + - `K8SNodeAnnotation` + - `K8SNodeLabel` + - `K8SPodAnnotation` + - `K8SPodLabel` + - `K8SReplicaSetAnnotation` + - `K8SReplicaSetLabel` + - `K8SStatefulSetAnnotation` + - `K8SStatefulSetLabel` + - `ProcessEnvironmentVariable` + - `RPCConnectRPCRequestMetadata` + - `RPCConnectRPCResponseMetadata` + - `RPCGRPCRequestMetadata` + - `RPCGRPCResponseMetadata` +- Add `ErrorType` attribute helper function to the `go.opentelmetry.io/otel/semconv/v1.34.0` package. (#6962) +- Add `WithAllowKeyDuplication` in `go.opentelemetry.io/otel/sdk/log` which can be used to disable deduplication for log records. (#6968) +- Add `WithCardinalityLimit` option to configure the cardinality limit in `go.opentelemetry.io/otel/sdk/metric`. (#6996, #7065, #7081, #7164, #7165, #7179) +- Add `Clone` method to `Record` in `go.opentelemetry.io/otel/log` that returns a copy of the record with no shared state. (#7001) +- Add experimental self-observability span and batch span processor metrics in `go.opentelemetry.io/otel/sdk/trace`. + Check the `go.opentelemetry.io/otel/sdk/trace/internal/x` package documentation for more information. (#7027, #6393, #7209) +- The `go.opentelemetry.io/otel/semconv/v1.36.0` package. + The package contains semantic conventions from the `v1.36.0` version of the OpenTelemetry Semantic Conventions. + See the [migration documentation](./semconv/v1.36.0/MIGRATION.md) for information on how to upgrade from `go.opentelemetry.io/otel/semconv/v1.34.0.`(#7032, #7041) +- Add support for configuring Prometheus name translation using `WithTranslationStrategy` option in `go.opentelemetry.io/otel/exporters/prometheus`. The current default translation strategy when UTF-8 mode is enabled is `NoUTF8EscapingWithSuffixes`, but a future release will change the default strategy to `UnderscoreEscapingWithSuffixes` for compliance with the specification. (#7111) +- Add experimental self-observability log metrics in `go.opentelemetry.io/otel/sdk/log`. + Check the `go.opentelemetry.io/otel/sdk/log/internal/x` package documentation for more information. (#7121) +- Add experimental self-observability trace exporter metrics in `go.opentelemetry.io/otel/exporters/stdout/stdouttrace`. + Check the `go.opentelemetry.io/otel/exporters/stdout/stdouttrace/internal/x` package documentation for more information. (#7133) +- Support testing of [Go 1.25]. (#7187) +- The `go.opentelemetry.io/otel/semconv/v1.37.0` package. + The package contains semantic conventions from the `v1.37.0` version of the OpenTelemetry Semantic Conventions. + See the [migration documentation](./semconv/v1.37.0/MIGRATION.md) for information on how to upgrade from `go.opentelemetry.io/otel/semconv/v1.36.0.`(#7254) + +### Changed + +- Optimize `TraceIDFromHex` and `SpanIDFromHex` in `go.opentelemetry.io/otel/sdk/trace`. (#6791) +- Change `AssertEqual` in `go.opentelemetry.io/otel/log/logtest` to accept `TestingT` in order to support benchmarks and fuzz tests. (#6908) +- Change `DefaultExemplarReservoirProviderSelector` in `go.opentelemetry.io/otel/sdk/metric` to use `runtime.GOMAXPROCS(0)` instead of `runtime.NumCPU()` for the `FixedSizeReservoirProvider` default size. (#7094) + +### Fixed + +- `SetBody` method of `Record` in `go.opentelemetry.io/otel/sdk/log` now deduplicates key-value collections (`log.Value` of `log.KindMap` from `go.opentelemetry.io/otel/log`). (#7002) +- Fix `go.opentelemetry.io/otel/exporters/prometheus` to not append a suffix if it's already present in metric name. (#7088) +- Fix the `go.opentelemetry.io/otel/exporters/stdout/stdouttrace` self-observability component type and name. (#7195) +- Fix partial export count metric in `go.opentelemetry.io/otel/exporters/stdout/stdouttrace`. (#7199) + +### Deprecated + +- Deprecate `WithoutUnits` and `WithoutCounterSuffixes` options, preferring `WithTranslationStrategy` instead. (#7111) +- Deprecate support for `OTEL_GO_X_CARDINALITY_LIMIT` environment variable in `go.opentelemetry.io/otel/sdk/metric`. Use `WithCardinalityLimit` option instead. (#7166) + +## [0.59.1] 2025-07-21 + +### Changed + +- Retract `v0.59.0` release of `go.opentelemetry.io/otel/exporters/prometheus` module which appends incorrect unit suffixes. (#7046) +- Change `go.opentelemetry.io/otel/exporters/prometheus` to no longer deduplicate suffixes when UTF8 is enabled. + It is recommended to disable unit and counter suffixes in the exporter, and manually add suffixes if you rely on the existing behavior. (#7044) + +### Fixed + +- Fix `go.opentelemetry.io/otel/exporters/prometheus` to properly handle unit suffixes when the unit is in brackets. + E.g. `{spans}`. (#7044) + ## [1.37.0/0.59.0/0.13.0] 2025-06-25 ### Added @@ -3343,7 +3430,8 @@ It contains api and sdk for trace and meter. - CircleCI build CI manifest files. - CODEOWNERS file to track owners of this project. -[Unreleased]: https://github.com/open-telemetry/opentelemetry-go/compare/v1.37.0...HEAD +[Unreleased]: https://github.com/open-telemetry/opentelemetry-go/compare/v1.38.0...HEAD +[1.38.0/0.60.0/0.14.0/0.0.13]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.38.0 [1.37.0/0.59.0/0.13.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.37.0 [0.12.2]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/log/v0.12.2 [0.12.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/log/v0.12.1 @@ -3439,6 +3527,7 @@ It contains api and sdk for trace and meter. +[Go 1.25]: https://go.dev/doc/go1.25 [Go 1.24]: https://go.dev/doc/go1.24 [Go 1.23]: https://go.dev/doc/go1.23 [Go 1.22]: https://go.dev/doc/go1.22 diff --git a/vendor/go.opentelemetry.io/otel/CODEOWNERS b/vendor/go.opentelemetry.io/otel/CODEOWNERS index 945a07d2b0..26a03aed1d 100644 --- a/vendor/go.opentelemetry.io/otel/CODEOWNERS +++ b/vendor/go.opentelemetry.io/otel/CODEOWNERS @@ -12,6 +12,6 @@ # https://help.github.com/en/articles/about-code-owners # -* @MrAlias @XSAM @dashpole @pellared @dmathieu +* @MrAlias @XSAM @dashpole @pellared @dmathieu @flc1125 CODEOWNERS @MrAlias @pellared @dashpole @XSAM @dmathieu diff --git a/vendor/go.opentelemetry.io/otel/CONTRIBUTING.md b/vendor/go.opentelemetry.io/otel/CONTRIBUTING.md index f9ddc281fc..0b3ae855c1 100644 --- a/vendor/go.opentelemetry.io/otel/CONTRIBUTING.md +++ b/vendor/go.opentelemetry.io/otel/CONTRIBUTING.md @@ -192,6 +192,35 @@ should have `go test -bench` output in their description. should have [`benchstat`](https://pkg.go.dev/golang.org/x/perf/cmd/benchstat) output in their description. +## Dependencies + +This project uses [Go Modules] for dependency management. All modules will use +`go.mod` to explicitly list all direct and indirect dependencies, ensuring a +clear dependency graph. The `go.sum` file for each module will be committed to +the repository and used to verify the integrity of downloaded modules, +preventing malicious tampering. + +This project uses automated dependency update tools (i.e. dependabot, +renovatebot) to manage updates to dependencies. This ensures that dependencies +are kept up-to-date with the latest security patches and features and are +reviewed before being merged. If you would like to propose a change to a +dependency it should be done through a pull request that updates the `go.mod` +file and includes a description of the change. + +See the [versioning and compatibility](./VERSIONING.md) policy for more details +about dependency compatibility. + +[Go Modules]: https://pkg.go.dev/cmd/go#hdr-Modules__module_versions__and_more + +### Environment Dependencies + +This project does not partition dependencies based on the environment (i.e. +`development`, `staging`, `production`). + +Only the dependencies explicitly included in the released modules have be +tested and verified to work with the released code. No other guarantee is made +about the compatibility of other dependencies. + ## Documentation Each (non-internal, non-test) package must be documented using @@ -233,6 +262,10 @@ For a non-comprehensive but foundational overview of these best practices the [Effective Go](https://golang.org/doc/effective_go.html) documentation is an excellent starting place. +We also recommend following the +[Go Code Review Comments](https://go.dev/wiki/CodeReviewComments) +that collects common comments made during reviews of Go code. + As a convenience for developers building this project the `make precommit` will format, lint, validate, and in some cases fix the changes you plan to submit. This check will need to pass for your changes to be able to be @@ -586,6 +619,10 @@ See also: ### Testing +We allow using [`testify`](https://github.com/stretchr/testify) even though +it is seen as non-idiomatic according to +the [Go Test Comments](https://go.dev/wiki/TestComments#assert-libraries) page. + The tests should never leak goroutines. Use the term `ConcurrentSafe` in the test name when it aims to verify the @@ -640,13 +677,6 @@ should be canceled. ## Approvers and Maintainers -### Triagers - -- [Alex Kats](https://github.com/akats7), Capital One -- [Cheng-Zhen Yang](https://github.com/scorpionknifes), Independent - -### Approvers - ### Maintainers - [Damien Mathieu](https://github.com/dmathieu), Elastic ([GPG](https://keys.openpgp.org/search?q=5A126B972A81A6CE443E5E1B408B8E44F0873832)) @@ -655,6 +685,21 @@ should be canceled. - [Sam Xie](https://github.com/XSAM), Splunk ([GPG](https://keys.openpgp.org/search?q=AEA033782371ABB18EE39188B8044925D6FEEBEA)) - [Tyler Yahn](https://github.com/MrAlias), Splunk ([GPG](https://keys.openpgp.org/search?q=0x46B0F3E1A8B1BA5A)) +For more information about the maintainer role, see the [community repository](https://github.com/open-telemetry/community/blob/main/guides/contributor/membership.md#maintainer). + +### Approvers + +- [Flc](https://github.com/flc1125), Independent + +For more information about the approver role, see the [community repository](https://github.com/open-telemetry/community/blob/main/guides/contributor/membership.md#approver). + +### Triagers + +- [Alex Kats](https://github.com/akats7), Capital One +- [Cheng-Zhen Yang](https://github.com/scorpionknifes), Independent + +For more information about the triager role, see the [community repository](https://github.com/open-telemetry/community/blob/main/guides/contributor/membership.md#triager). + ### Emeritus - [Aaron Clawson](https://github.com/MadVikingGod) @@ -665,6 +710,8 @@ should be canceled. - [Josh MacDonald](https://github.com/jmacd) - [Liz Fong-Jones](https://github.com/lizthegrey) +For more information about the emeritus role, see the [community repository](https://github.com/open-telemetry/community/blob/main/guides/contributor/membership.md#emeritus-maintainerapprovertriager). + ### Become an Approver or a Maintainer See the [community membership document in OpenTelemetry community diff --git a/vendor/go.opentelemetry.io/otel/LICENSE b/vendor/go.opentelemetry.io/otel/LICENSE index 261eeb9e9f..f1aee0f110 100644 --- a/vendor/go.opentelemetry.io/otel/LICENSE +++ b/vendor/go.opentelemetry.io/otel/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/Makefile b/vendor/go.opentelemetry.io/otel/Makefile index 4fa423ca02..bc0f1f92d1 100644 --- a/vendor/go.opentelemetry.io/otel/Makefile +++ b/vendor/go.opentelemetry.io/otel/Makefile @@ -34,9 +34,6 @@ $(TOOLS)/%: $(TOOLS_MOD_DIR)/go.mod | $(TOOLS) MULTIMOD = $(TOOLS)/multimod $(TOOLS)/multimod: PACKAGE=go.opentelemetry.io/build-tools/multimod -SEMCONVGEN = $(TOOLS)/semconvgen -$(TOOLS)/semconvgen: PACKAGE=go.opentelemetry.io/build-tools/semconvgen - CROSSLINK = $(TOOLS)/crosslink $(TOOLS)/crosslink: PACKAGE=go.opentelemetry.io/build-tools/crosslink @@ -71,7 +68,7 @@ GOVULNCHECK = $(TOOLS)/govulncheck $(TOOLS)/govulncheck: PACKAGE=golang.org/x/vuln/cmd/govulncheck .PHONY: tools -tools: $(CROSSLINK) $(GOLANGCI_LINT) $(MISSPELL) $(GOCOVMERGE) $(STRINGER) $(PORTO) $(SEMCONVGEN) $(VERIFYREADMES) $(MULTIMOD) $(SEMCONVKIT) $(GOTMPL) $(GORELEASE) +tools: $(CROSSLINK) $(GOLANGCI_LINT) $(MISSPELL) $(GOCOVMERGE) $(STRINGER) $(PORTO) $(VERIFYREADMES) $(MULTIMOD) $(SEMCONVKIT) $(GOTMPL) $(GORELEASE) # Virtualized python tools via docker @@ -284,7 +281,7 @@ semconv-generate: $(SEMCONVKIT) docker run --rm \ -u $(DOCKER_USER) \ --env HOME=/tmp/weaver \ - --mount 'type=bind,source=$(PWD)/semconv,target=/home/weaver/templates/registry/go,readonly' \ + --mount 'type=bind,source=$(PWD)/semconv/templates,target=/home/weaver/templates,readonly' \ --mount 'type=bind,source=$(PWD)/semconv/${TAG},target=/home/weaver/target' \ --mount 'type=bind,source=$(HOME)/.weaver,target=/tmp/weaver/.weaver' \ $(WEAVER_IMAGE) registry generate \ diff --git a/vendor/go.opentelemetry.io/otel/README.md b/vendor/go.opentelemetry.io/otel/README.md index 5fa1b75c60..6b7ab5f219 100644 --- a/vendor/go.opentelemetry.io/otel/README.md +++ b/vendor/go.opentelemetry.io/otel/README.md @@ -53,18 +53,25 @@ Currently, this project supports the following environments. | OS | Go Version | Architecture | |----------|------------|--------------| +| Ubuntu | 1.25 | amd64 | | Ubuntu | 1.24 | amd64 | | Ubuntu | 1.23 | amd64 | +| Ubuntu | 1.25 | 386 | | Ubuntu | 1.24 | 386 | | Ubuntu | 1.23 | 386 | +| Ubuntu | 1.25 | arm64 | | Ubuntu | 1.24 | arm64 | | Ubuntu | 1.23 | arm64 | +| macOS 13 | 1.25 | amd64 | | macOS 13 | 1.24 | amd64 | | macOS 13 | 1.23 | amd64 | +| macOS | 1.25 | arm64 | | macOS | 1.24 | arm64 | | macOS | 1.23 | arm64 | +| Windows | 1.25 | amd64 | | Windows | 1.24 | amd64 | | Windows | 1.23 | amd64 | +| Windows | 1.25 | 386 | | Windows | 1.24 | 386 | | Windows | 1.23 | 386 | diff --git a/vendor/go.opentelemetry.io/otel/SECURITY-INSIGHTS.yml b/vendor/go.opentelemetry.io/otel/SECURITY-INSIGHTS.yml new file mode 100644 index 0000000000..8041fc62e4 --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/SECURITY-INSIGHTS.yml @@ -0,0 +1,203 @@ +header: + schema-version: "1.0.0" + expiration-date: "2026-08-04T00:00:00.000Z" + last-updated: "2025-08-04" + last-reviewed: "2025-08-04" + commit-hash: 69e81088ad40f45a0764597326722dea8f3f00a8 + project-url: https://github.com/open-telemetry/opentelemetry-go + project-release: "v1.37.0" + changelog: https://github.com/open-telemetry/opentelemetry-go/blob/69e81088ad40f45a0764597326722dea8f3f00a8/CHANGELOG.md + license: https://github.com/open-telemetry/opentelemetry-go/blob/69e81088ad40f45a0764597326722dea8f3f00a8/LICENSE + +project-lifecycle: + status: active + bug-fixes-only: false + core-maintainers: + - https://github.com/dmathieu + - https://github.com/dashpole + - https://github.com/pellared + - https://github.com/XSAM + - https://github.com/MrAlias + release-process: | + See https://github.com/open-telemetry/opentelemetry-go/blob/69e81088ad40f45a0764597326722dea8f3f00a8/RELEASING.md + +contribution-policy: + accepts-pull-requests: true + accepts-automated-pull-requests: true + automated-tools-list: + - automated-tool: dependabot + action: allowed + comment: Automated dependency updates are accepted. + - automated-tool: renovatebot + action: allowed + comment: Automated dependency updates are accepted. + - automated-tool: opentelemetrybot + action: allowed + comment: Automated OpenTelemetry actions are accepted. + contributing-policy: https://github.com/open-telemetry/opentelemetry-go/blob/69e81088ad40f45a0764597326722dea8f3f00a8/CONTRIBUTING.md + code-of-conduct: https://github.com/open-telemetry/.github/blob/ffa15f76b65ec7bcc41f6a0b277edbb74f832206/CODE_OF_CONDUCT.md + +documentation: + - https://pkg.go.dev/go.opentelemetry.io/otel + - https://opentelemetry.io/docs/instrumentation/go/ + +distribution-points: + - pkg:golang/go.opentelemetry.io/otel + - pkg:golang/go.opentelemetry.io/otel/bridge/opencensus + - pkg:golang/go.opentelemetry.io/otel/bridge/opencensus/test + - pkg:golang/go.opentelemetry.io/otel/bridge/opentracing + - pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc + - pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp + - pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlptrace + - pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc + - pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp + - pkg:golang/go.opentelemetry.io/otel/exporters/stdout/stdoutmetric + - pkg:golang/go.opentelemetry.io/otel/exporters/stdout/stdouttrace + - pkg:golang/go.opentelemetry.io/otel/exporters/zipkin + - pkg:golang/go.opentelemetry.io/otel/metric + - pkg:golang/go.opentelemetry.io/otel/sdk + - pkg:golang/go.opentelemetry.io/otel/sdk/metric + - pkg:golang/go.opentelemetry.io/otel/trace + - pkg:golang/go.opentelemetry.io/otel/exporters/prometheus + - pkg:golang/go.opentelemetry.io/otel/log + - pkg:golang/go.opentelemetry.io/otel/log/logtest + - pkg:golang/go.opentelemetry.io/otel/sdk/log + - pkg:golang/go.opentelemetry.io/otel/sdk/log/logtest + - pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc + - pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp + - pkg:golang/go.opentelemetry.io/otel/exporters/stdout/stdoutlog + - pkg:golang/go.opentelemetry.io/otel/schema + +security-artifacts: + threat-model: + threat-model-created: false + comment: | + No formal threat model created yet. + self-assessment: + self-assessment-created: false + comment: | + No formal self-assessment yet. + +security-testing: + - tool-type: sca + tool-name: Dependabot + tool-version: latest + tool-url: https://github.com/dependabot + tool-rulesets: + - built-in + integration: + ad-hoc: false + ci: true + before-release: true + comment: | + Automated dependency updates. + - tool-type: sast + tool-name: golangci-lint + tool-version: latest + tool-url: https://github.com/golangci/golangci-lint + tool-rulesets: + - built-in + integration: + ad-hoc: false + ci: true + before-release: true + comment: | + Static analysis in CI. + - tool-type: fuzzing + tool-name: OSS-Fuzz + tool-version: latest + tool-url: https://github.com/google/oss-fuzz + tool-rulesets: + - default + integration: + ad-hoc: false + ci: false + before-release: false + comment: | + OpenTelemetry Go is integrated with OSS-Fuzz for continuous fuzz testing. See https://github.com/google/oss-fuzz/tree/f0f9b221190c6063a773bea606d192ebfc3d00cf/projects/opentelemetry-go for more details. + - tool-type: sast + tool-name: CodeQL + tool-version: latest + tool-url: https://github.com/github/codeql + tool-rulesets: + - default + integration: + ad-hoc: false + ci: true + before-release: true + comment: | + CodeQL static analysis is run in CI for all commits and pull requests to detect security vulnerabilities in the Go source code. See https://github.com/open-telemetry/opentelemetry-go/blob/d5b5b059849720144a03ca5c87561bfbdb940119/.github/workflows/codeql-analysis.yml for workflow details. + - tool-type: sca + tool-name: govulncheck + tool-version: latest + tool-url: https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck + tool-rulesets: + - default + integration: + ad-hoc: false + ci: true + before-release: true + comment: | + govulncheck is run in CI to detect known vulnerabilities in Go modules and code paths. See https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/.github/workflows/ci.yml for workflow configuration. + +security-assessments: + - auditor-name: 7ASecurity + auditor-url: https://7asecurity.com + auditor-report: https://7asecurity.com/reports/pentest-report-opentelemetry.pdf + report-year: 2023 + comment: | + This independent penetration test by 7ASecurity covered OpenTelemetry repositories including opentelemetry-go. The assessment focused on codebase review, threat modeling, and vulnerability identification. See the report for details of findings and recommendations applicable to opentelemetry-go. No critical vulnerabilities were found for this repository. + +security-contacts: + - type: email + value: cncf-opentelemetry-security@lists.cncf.io + primary: true + - type: website + value: https://github.com/open-telemetry/opentelemetry-go/security/policy + primary: false + +vulnerability-reporting: + accepts-vulnerability-reports: true + email-contact: cncf-opentelemetry-security@lists.cncf.io + security-policy: https://github.com/open-telemetry/opentelemetry-go/security/policy + comment: | + Security issues should be reported via email or GitHub security policy page. + +dependencies: + third-party-packages: true + dependencies-lists: + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/bridge/opencensus/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/bridge/opencensus/test/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/bridge/opentracing/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/otlp/otlplog/otlploggrpc/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/otlp/otlplog/otlploghttp/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/otlp/otlpmetric/otlpmetricgrpc/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/otlp/otlpmetric/otlpmetrichttp/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/otlp/otlptrace/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/otlp/otlptrace/otlptracegrpc/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/otlp/otlptrace/otlptracehttp/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/prometheus/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/stdout/stdoutlog/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/stdout/stdoutmetric/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/stdout/stdouttrace/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/exporters/zipkin/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/internal/tools/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/log/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/log/logtest/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/metric/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/schema/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/sdk/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/sdk/log/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/sdk/log/logtest/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/sdk/metric/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/trace/go.mod + - https://github.com/open-telemetry/opentelemetry-go/blob/v1.37.0/trace/internal/telemetry/test/go.mod + dependencies-lifecycle: + policy-url: https://github.com/open-telemetry/opentelemetry-go/blob/69e81088ad40f45a0764597326722dea8f3f00a8/CONTRIBUTING.md + comment: | + Dependency lifecycle managed via go.mod and renovatebot. + env-dependencies-policy: + policy-url: https://github.com/open-telemetry/opentelemetry-go/blob/69e81088ad40f45a0764597326722dea8f3f00a8/CONTRIBUTING.md + comment: | + See contributing policy for environment usage. diff --git a/vendor/go.opentelemetry.io/otel/attribute/encoder.go b/vendor/go.opentelemetry.io/otel/attribute/encoder.go index 318e42fcab..6333d34b31 100644 --- a/vendor/go.opentelemetry.io/otel/attribute/encoder.go +++ b/vendor/go.opentelemetry.io/otel/attribute/encoder.go @@ -78,7 +78,7 @@ func DefaultEncoder() Encoder { defaultEncoderOnce.Do(func() { defaultEncoderInstance = &defaultAttrEncoder{ pool: sync.Pool{ - New: func() interface{} { + New: func() any { return &bytes.Buffer{} }, }, @@ -96,11 +96,11 @@ func (d *defaultAttrEncoder) Encode(iter Iterator) string { for iter.Next() { i, keyValue := iter.IndexedAttribute() if i > 0 { - _, _ = buf.WriteRune(',') + _ = buf.WriteByte(',') } copyAndEscape(buf, string(keyValue.Key)) - _, _ = buf.WriteRune('=') + _ = buf.WriteByte('=') if keyValue.Value.Type() == STRING { copyAndEscape(buf, keyValue.Value.AsString()) @@ -122,14 +122,14 @@ func copyAndEscape(buf *bytes.Buffer, val string) { for _, ch := range val { switch ch { case '=', ',', escapeChar: - _, _ = buf.WriteRune(escapeChar) + _ = buf.WriteByte(escapeChar) } _, _ = buf.WriteRune(ch) } } -// Valid returns true if this encoder ID was allocated by -// `NewEncoderID`. Invalid encoder IDs will not be cached. +// Valid reports whether this encoder ID was allocated by +// [NewEncoderID]. Invalid encoder IDs will not be cached. func (id EncoderID) Valid() bool { return id.value != 0 } diff --git a/vendor/go.opentelemetry.io/otel/attribute/filter.go b/vendor/go.opentelemetry.io/otel/attribute/filter.go index 3eeaa5d442..624ebbe381 100644 --- a/vendor/go.opentelemetry.io/otel/attribute/filter.go +++ b/vendor/go.opentelemetry.io/otel/attribute/filter.go @@ -15,8 +15,8 @@ type Filter func(KeyValue) bool // // If keys is empty a deny-all filter is returned. func NewAllowKeysFilter(keys ...Key) Filter { - if len(keys) <= 0 { - return func(kv KeyValue) bool { return false } + if len(keys) == 0 { + return func(KeyValue) bool { return false } } allowed := make(map[Key]struct{}, len(keys)) @@ -34,8 +34,8 @@ func NewAllowKeysFilter(keys ...Key) Filter { // // If keys is empty an allow-all filter is returned. func NewDenyKeysFilter(keys ...Key) Filter { - if len(keys) <= 0 { - return func(kv KeyValue) bool { return true } + if len(keys) == 0 { + return func(KeyValue) bool { return true } } forbid := make(map[Key]struct{}, len(keys)) diff --git a/vendor/go.opentelemetry.io/otel/attribute/internal/attribute.go b/vendor/go.opentelemetry.io/otel/attribute/internal/attribute.go index b76d2bbfdb..0875504302 100644 --- a/vendor/go.opentelemetry.io/otel/attribute/internal/attribute.go +++ b/vendor/go.opentelemetry.io/otel/attribute/internal/attribute.go @@ -12,7 +12,7 @@ import ( ) // BoolSliceValue converts a bool slice into an array with same elements as slice. -func BoolSliceValue(v []bool) interface{} { +func BoolSliceValue(v []bool) any { var zero bool cp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero))).Elem() reflect.Copy(cp, reflect.ValueOf(v)) @@ -20,7 +20,7 @@ func BoolSliceValue(v []bool) interface{} { } // Int64SliceValue converts an int64 slice into an array with same elements as slice. -func Int64SliceValue(v []int64) interface{} { +func Int64SliceValue(v []int64) any { var zero int64 cp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero))).Elem() reflect.Copy(cp, reflect.ValueOf(v)) @@ -28,7 +28,7 @@ func Int64SliceValue(v []int64) interface{} { } // Float64SliceValue converts a float64 slice into an array with same elements as slice. -func Float64SliceValue(v []float64) interface{} { +func Float64SliceValue(v []float64) any { var zero float64 cp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero))).Elem() reflect.Copy(cp, reflect.ValueOf(v)) @@ -36,7 +36,7 @@ func Float64SliceValue(v []float64) interface{} { } // StringSliceValue converts a string slice into an array with same elements as slice. -func StringSliceValue(v []string) interface{} { +func StringSliceValue(v []string) any { var zero string cp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero))).Elem() reflect.Copy(cp, reflect.ValueOf(v)) @@ -44,7 +44,7 @@ func StringSliceValue(v []string) interface{} { } // AsBoolSlice converts a bool array into a slice into with same elements as array. -func AsBoolSlice(v interface{}) []bool { +func AsBoolSlice(v any) []bool { rv := reflect.ValueOf(v) if rv.Type().Kind() != reflect.Array { return nil @@ -57,7 +57,7 @@ func AsBoolSlice(v interface{}) []bool { } // AsInt64Slice converts an int64 array into a slice into with same elements as array. -func AsInt64Slice(v interface{}) []int64 { +func AsInt64Slice(v any) []int64 { rv := reflect.ValueOf(v) if rv.Type().Kind() != reflect.Array { return nil @@ -70,7 +70,7 @@ func AsInt64Slice(v interface{}) []int64 { } // AsFloat64Slice converts a float64 array into a slice into with same elements as array. -func AsFloat64Slice(v interface{}) []float64 { +func AsFloat64Slice(v any) []float64 { rv := reflect.ValueOf(v) if rv.Type().Kind() != reflect.Array { return nil @@ -83,7 +83,7 @@ func AsFloat64Slice(v interface{}) []float64 { } // AsStringSlice converts a string array into a slice into with same elements as array. -func AsStringSlice(v interface{}) []string { +func AsStringSlice(v any) []string { rv := reflect.ValueOf(v) if rv.Type().Kind() != reflect.Array { return nil diff --git a/vendor/go.opentelemetry.io/otel/attribute/iterator.go b/vendor/go.opentelemetry.io/otel/attribute/iterator.go index f2ba89ce4b..8df6249f02 100644 --- a/vendor/go.opentelemetry.io/otel/attribute/iterator.go +++ b/vendor/go.opentelemetry.io/otel/attribute/iterator.go @@ -25,8 +25,8 @@ type oneIterator struct { attr KeyValue } -// Next moves the iterator to the next position. Returns false if there are no -// more attributes. +// Next moves the iterator to the next position. +// Next reports whether there are more attributes. func (i *Iterator) Next() bool { i.idx++ return i.idx < i.Len() @@ -106,7 +106,8 @@ func (oi *oneIterator) advance() { } } -// Next returns true if there is another attribute available. +// Next moves the iterator to the next position. +// Next reports whether there is another attribute available. func (m *MergeIterator) Next() bool { if m.one.done && m.two.done { return false diff --git a/vendor/go.opentelemetry.io/otel/attribute/key.go b/vendor/go.opentelemetry.io/otel/attribute/key.go index d9a22c6502..80a9e5643f 100644 --- a/vendor/go.opentelemetry.io/otel/attribute/key.go +++ b/vendor/go.opentelemetry.io/otel/attribute/key.go @@ -117,7 +117,7 @@ func (k Key) StringSlice(v []string) KeyValue { } } -// Defined returns true for non-empty keys. +// Defined reports whether the key is not empty. func (k Key) Defined() bool { return len(k) != 0 } diff --git a/vendor/go.opentelemetry.io/otel/attribute/kv.go b/vendor/go.opentelemetry.io/otel/attribute/kv.go index 3028f9a40f..8c6928ca79 100644 --- a/vendor/go.opentelemetry.io/otel/attribute/kv.go +++ b/vendor/go.opentelemetry.io/otel/attribute/kv.go @@ -13,7 +13,7 @@ type KeyValue struct { Value Value } -// Valid returns if kv is a valid OpenTelemetry attribute. +// Valid reports whether kv is a valid OpenTelemetry attribute. func (kv KeyValue) Valid() bool { return kv.Key.Defined() && kv.Value.Type() != INVALID } diff --git a/vendor/go.opentelemetry.io/otel/attribute/set.go b/vendor/go.opentelemetry.io/otel/attribute/set.go index 6cbefceadf..64735d382e 100644 --- a/vendor/go.opentelemetry.io/otel/attribute/set.go +++ b/vendor/go.opentelemetry.io/otel/attribute/set.go @@ -31,11 +31,11 @@ type ( // Distinct is a unique identifier of a Set. // - // Distinct is designed to be ensures equivalence stability: comparisons - // will return the save value across versions. For this reason, Distinct - // should always be used as a map key instead of a Set. + // Distinct is designed to ensure equivalence stability: comparisons will + // return the same value across versions. For this reason, Distinct should + // always be used as a map key instead of a Set. Distinct struct { - iface interface{} + iface any } // Sortable implements sort.Interface, used for sorting KeyValue. @@ -70,7 +70,7 @@ func (d Distinct) reflectValue() reflect.Value { return reflect.ValueOf(d.iface) } -// Valid returns true if this value refers to a valid Set. +// Valid reports whether this value refers to a valid Set. func (d Distinct) Valid() bool { return d.iface != nil } @@ -120,7 +120,7 @@ func (l *Set) Value(k Key) (Value, bool) { return Value{}, false } -// HasValue tests whether a key is defined in this set. +// HasValue reports whether a key is defined in this set. func (l *Set) HasValue(k Key) bool { if l == nil { return false @@ -155,7 +155,7 @@ func (l *Set) Equivalent() Distinct { return l.equivalent } -// Equals returns true if the argument set is equivalent to this set. +// Equals reports whether the argument set is equivalent to this set. func (l *Set) Equals(o *Set) bool { return l.Equivalent() == o.Equivalent() } @@ -344,7 +344,7 @@ func computeDistinct(kvs []KeyValue) Distinct { // computeDistinctFixed computes a Distinct for small slices. It returns nil // if the input is too large for this code path. -func computeDistinctFixed(kvs []KeyValue) interface{} { +func computeDistinctFixed(kvs []KeyValue) any { switch len(kvs) { case 1: return [1]KeyValue(kvs) @@ -373,7 +373,7 @@ func computeDistinctFixed(kvs []KeyValue) interface{} { // computeDistinctReflect computes a Distinct using reflection, works for any // size input. -func computeDistinctReflect(kvs []KeyValue) interface{} { +func computeDistinctReflect(kvs []KeyValue) any { at := reflect.New(reflect.ArrayOf(len(kvs), keyValueType)).Elem() for i, keyValue := range kvs { *(at.Index(i).Addr().Interface().(*KeyValue)) = keyValue @@ -387,7 +387,7 @@ func (l *Set) MarshalJSON() ([]byte, error) { } // MarshalLog is the marshaling function used by the logging system to represent this Set. -func (l Set) MarshalLog() interface{} { +func (l Set) MarshalLog() any { kvs := make(map[string]string) for _, kv := range l.ToSlice() { kvs[string(kv.Key)] = kv.Value.Emit() diff --git a/vendor/go.opentelemetry.io/otel/attribute/value.go b/vendor/go.opentelemetry.io/otel/attribute/value.go index 817eecacf1..653c33a861 100644 --- a/vendor/go.opentelemetry.io/otel/attribute/value.go +++ b/vendor/go.opentelemetry.io/otel/attribute/value.go @@ -22,7 +22,7 @@ type Value struct { vtype Type numeric uint64 stringly string - slice interface{} + slice any } const ( @@ -199,8 +199,8 @@ func (v Value) asStringSlice() []string { type unknownValueType struct{} -// AsInterface returns Value's data as interface{}. -func (v Value) AsInterface() interface{} { +// AsInterface returns Value's data as any. +func (v Value) AsInterface() any { switch v.Type() { case BOOL: return v.AsBool() @@ -262,7 +262,7 @@ func (v Value) Emit() string { func (v Value) MarshalJSON() ([]byte, error) { var jsonVal struct { Type string - Value interface{} + Value any } jsonVal.Type = v.Type().String() jsonVal.Value = v.AsInterface() diff --git a/vendor/go.opentelemetry.io/otel/baggage/baggage.go b/vendor/go.opentelemetry.io/otel/baggage/baggage.go index 0e1fe24220..f83a448ec6 100644 --- a/vendor/go.opentelemetry.io/otel/baggage/baggage.go +++ b/vendor/go.opentelemetry.io/otel/baggage/baggage.go @@ -812,7 +812,7 @@ var safeKeyCharset = [utf8.RuneSelf]bool{ // validateBaggageName checks if the string is a valid OpenTelemetry Baggage name. // Baggage name is a valid, non-empty UTF-8 string. func validateBaggageName(s string) bool { - if len(s) == 0 { + if s == "" { return false } @@ -828,7 +828,7 @@ func validateBaggageValue(s string) bool { // validateKey checks if the string is a valid W3C Baggage key. func validateKey(s string) bool { - if len(s) == 0 { + if s == "" { return false } diff --git a/vendor/go.opentelemetry.io/otel/codes/codes.go b/vendor/go.opentelemetry.io/otel/codes/codes.go index 49a35b1225..d48847ed86 100644 --- a/vendor/go.opentelemetry.io/otel/codes/codes.go +++ b/vendor/go.opentelemetry.io/otel/codes/codes.go @@ -67,7 +67,7 @@ func (c *Code) UnmarshalJSON(b []byte) error { return errors.New("nil receiver passed to UnmarshalJSON") } - var x interface{} + var x any if err := json.Unmarshal(b, &x); err != nil { return err } @@ -102,5 +102,5 @@ func (c *Code) MarshalJSON() ([]byte, error) { if !ok { return nil, fmt.Errorf("invalid code: %d", *c) } - return []byte(fmt.Sprintf("%q", str)), nil + return fmt.Appendf(nil, "%q", str), nil } diff --git a/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile b/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile index 935bd48763..a311fbb483 100644 --- a/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile +++ b/vendor/go.opentelemetry.io/otel/dependencies.Dockerfile @@ -1,4 +1,4 @@ # This is a renovate-friendly source of Docker images. -FROM python:3.13.5-slim-bullseye@sha256:5b9fc0d8ef79cfb5f300e61cb516e0c668067bbf77646762c38c94107e230dbc AS python -FROM otel/weaver:v0.15.2@sha256:b13acea09f721774daba36344861f689ac4bb8d6ecd94c4600b4d590c8fb34b9 AS weaver +FROM python:3.13.6-slim-bullseye@sha256:e98b521460ee75bca92175c16247bdf7275637a8faaeb2bcfa19d879ae5c4b9a AS python +FROM otel/weaver:v0.17.1@sha256:32523b5e44fb44418786347e9f7dde187d8797adb6d57a2ee99c245346c3cdfe AS weaver FROM avtodev/markdown-lint:v1@sha256:6aeedc2f49138ce7a1cd0adffc1b1c0321b841dc2102408967d9301c031949ee AS markdown diff --git a/vendor/go.opentelemetry.io/otel/internal/global/internal_logging.go b/vendor/go.opentelemetry.io/otel/internal/global/internal_logging.go index adbca7d347..86d7f4ba08 100644 --- a/vendor/go.opentelemetry.io/otel/internal/global/internal_logging.go +++ b/vendor/go.opentelemetry.io/otel/internal/global/internal_logging.go @@ -41,22 +41,22 @@ func GetLogger() logr.Logger { // Info prints messages about the general state of the API or SDK. // This should usually be less than 5 messages a minute. -func Info(msg string, keysAndValues ...interface{}) { +func Info(msg string, keysAndValues ...any) { GetLogger().V(4).Info(msg, keysAndValues...) } // Error prints messages about exceptional states of the API or SDK. -func Error(err error, msg string, keysAndValues ...interface{}) { +func Error(err error, msg string, keysAndValues ...any) { GetLogger().Error(err, msg, keysAndValues...) } // Debug prints messages about all internal changes in the API or SDK. -func Debug(msg string, keysAndValues ...interface{}) { +func Debug(msg string, keysAndValues ...any) { GetLogger().V(8).Info(msg, keysAndValues...) } // Warn prints messages about warnings in the API or SDK. // Not an error but is likely more important than an informational event. -func Warn(msg string, keysAndValues ...interface{}) { +func Warn(msg string, keysAndValues ...any) { GetLogger().V(1).Info(msg, keysAndValues...) } diff --git a/vendor/go.opentelemetry.io/otel/internal/global/trace.go b/vendor/go.opentelemetry.io/otel/internal/global/trace.go index 49e4ac4faa..bf5cf3119b 100644 --- a/vendor/go.opentelemetry.io/otel/internal/global/trace.go +++ b/vendor/go.opentelemetry.io/otel/internal/global/trace.go @@ -26,6 +26,7 @@ import ( "sync/atomic" "go.opentelemetry.io/auto/sdk" + "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/trace" diff --git a/vendor/go.opentelemetry.io/otel/metric/LICENSE b/vendor/go.opentelemetry.io/otel/metric/LICENSE index 261eeb9e9f..f1aee0f110 100644 --- a/vendor/go.opentelemetry.io/otel/metric/LICENSE +++ b/vendor/go.opentelemetry.io/otel/metric/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/propagation/baggage.go b/vendor/go.opentelemetry.io/otel/propagation/baggage.go index ebda5026d6..0518826020 100644 --- a/vendor/go.opentelemetry.io/otel/propagation/baggage.go +++ b/vendor/go.opentelemetry.io/otel/propagation/baggage.go @@ -20,7 +20,7 @@ type Baggage struct{} var _ TextMapPropagator = Baggage{} // Inject sets baggage key-values from ctx into the carrier. -func (b Baggage) Inject(ctx context.Context, carrier TextMapCarrier) { +func (Baggage) Inject(ctx context.Context, carrier TextMapCarrier) { bStr := baggage.FromContext(ctx).String() if bStr != "" { carrier.Set(baggageHeader, bStr) @@ -30,7 +30,7 @@ func (b Baggage) Inject(ctx context.Context, carrier TextMapCarrier) { // Extract returns a copy of parent with the baggage from the carrier added. // If carrier implements [ValuesGetter] (e.g. [HeaderCarrier]), Values is invoked // for multiple values extraction. Otherwise, Get is called. -func (b Baggage) Extract(parent context.Context, carrier TextMapCarrier) context.Context { +func (Baggage) Extract(parent context.Context, carrier TextMapCarrier) context.Context { if multiCarrier, ok := carrier.(ValuesGetter); ok { return extractMultiBaggage(parent, multiCarrier) } @@ -38,7 +38,7 @@ func (b Baggage) Extract(parent context.Context, carrier TextMapCarrier) context } // Fields returns the keys who's values are set with Inject. -func (b Baggage) Fields() []string { +func (Baggage) Fields() []string { return []string{baggageHeader} } diff --git a/vendor/go.opentelemetry.io/otel/propagation/propagation.go b/vendor/go.opentelemetry.io/otel/propagation/propagation.go index 5c8c26ea2e..0a32c59aa3 100644 --- a/vendor/go.opentelemetry.io/otel/propagation/propagation.go +++ b/vendor/go.opentelemetry.io/otel/propagation/propagation.go @@ -20,7 +20,7 @@ type TextMapCarrier interface { // must never be done outside of a new major release. // Set stores the key-value pair. - Set(key string, value string) + Set(key, value string) // DO NOT CHANGE: any modification will not be backwards compatible and // must never be done outside of a new major release. @@ -88,7 +88,7 @@ func (hc HeaderCarrier) Values(key string) []string { } // Set stores the key-value pair. -func (hc HeaderCarrier) Set(key string, value string) { +func (hc HeaderCarrier) Set(key, value string) { http.Header(hc).Set(key, value) } diff --git a/vendor/go.opentelemetry.io/otel/propagation/trace_context.go b/vendor/go.opentelemetry.io/otel/propagation/trace_context.go index 6870e316dc..6692d2665d 100644 --- a/vendor/go.opentelemetry.io/otel/propagation/trace_context.go +++ b/vendor/go.opentelemetry.io/otel/propagation/trace_context.go @@ -36,7 +36,7 @@ var ( ) // Inject injects the trace context from ctx into carrier. -func (tc TraceContext) Inject(ctx context.Context, carrier TextMapCarrier) { +func (TraceContext) Inject(ctx context.Context, carrier TextMapCarrier) { sc := trace.SpanContextFromContext(ctx) if !sc.IsValid() { return @@ -77,7 +77,7 @@ func (tc TraceContext) Extract(ctx context.Context, carrier TextMapCarrier) cont return trace.ContextWithRemoteSpanContext(ctx, sc) } -func (tc TraceContext) extract(carrier TextMapCarrier) trace.SpanContext { +func (TraceContext) extract(carrier TextMapCarrier) trace.SpanContext { h := carrier.Get(traceparentHeader) if h == "" { return trace.SpanContext{} @@ -151,6 +151,6 @@ func extractPart(dst []byte, h *string, n int) bool { } // Fields returns the keys who's values are set with Inject. -func (tc TraceContext) Fields() []string { +func (TraceContext) Fields() []string { return []string{traceparentHeader, tracestateHeader} } diff --git a/vendor/go.opentelemetry.io/otel/sdk/LICENSE b/vendor/go.opentelemetry.io/otel/sdk/LICENSE index 261eeb9e9f..f1aee0f110 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/LICENSE +++ b/vendor/go.opentelemetry.io/otel/sdk/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/sdk/internal/x/x.go b/vendor/go.opentelemetry.io/otel/sdk/internal/x/x.go index 68d296cbed..1be472e917 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/internal/x/x.go +++ b/vendor/go.opentelemetry.io/otel/sdk/internal/x/x.go @@ -19,7 +19,7 @@ import ( // to the case-insensitive string value of "true" (i.e. "True" and "TRUE" // will also enable this). var Resource = newFeature("RESOURCE", func(v string) (string, bool) { - if strings.ToLower(v) == "true" { + if strings.EqualFold(v, "true") { return v, true } return "", false @@ -59,7 +59,7 @@ func (f Feature[T]) Lookup() (v T, ok bool) { return f.parse(vRaw) } -// Enabled returns if the feature is enabled. +// Enabled reports whether the feature is enabled. func (f Feature[T]) Enabled() bool { _, ok := f.Lookup() return ok diff --git a/vendor/go.opentelemetry.io/otel/sdk/resource/builtin.go b/vendor/go.opentelemetry.io/otel/sdk/resource/builtin.go index cefe4ab914..3f20eb7a56 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/resource/builtin.go +++ b/vendor/go.opentelemetry.io/otel/sdk/resource/builtin.go @@ -13,7 +13,7 @@ import ( "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/sdk" - semconv "go.opentelemetry.io/otel/semconv/v1.34.0" + semconv "go.opentelemetry.io/otel/semconv/v1.37.0" ) type ( @@ -72,7 +72,7 @@ func StringDetector(schemaURL string, k attribute.Key, f func() (string, error)) // Detect returns a *Resource that describes the string as a value // corresponding to attribute.Key as well as the specific schemaURL. -func (sd stringDetector) Detect(ctx context.Context) (*Resource, error) { +func (sd stringDetector) Detect(context.Context) (*Resource, error) { value, err := sd.F() if err != nil { return nil, fmt.Errorf("%s: %w", string(sd.K), err) diff --git a/vendor/go.opentelemetry.io/otel/sdk/resource/container.go b/vendor/go.opentelemetry.io/otel/sdk/resource/container.go index 0d8619715e..bbe142d203 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/resource/container.go +++ b/vendor/go.opentelemetry.io/otel/sdk/resource/container.go @@ -11,7 +11,7 @@ import ( "os" "regexp" - semconv "go.opentelemetry.io/otel/semconv/v1.34.0" + semconv "go.opentelemetry.io/otel/semconv/v1.37.0" ) type containerIDProvider func() (string, error) @@ -27,7 +27,7 @@ const cgroupPath = "/proc/self/cgroup" // Detect returns a *Resource that describes the id of the container. // If no container id found, an empty resource will be returned. -func (cgroupContainerIDDetector) Detect(ctx context.Context) (*Resource, error) { +func (cgroupContainerIDDetector) Detect(context.Context) (*Resource, error) { containerID, err := containerID() if err != nil { return nil, err diff --git a/vendor/go.opentelemetry.io/otel/sdk/resource/env.go b/vendor/go.opentelemetry.io/otel/sdk/resource/env.go index 16a062ad8c..4a1b017eea 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/resource/env.go +++ b/vendor/go.opentelemetry.io/otel/sdk/resource/env.go @@ -12,7 +12,7 @@ import ( "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" - semconv "go.opentelemetry.io/otel/semconv/v1.34.0" + semconv "go.opentelemetry.io/otel/semconv/v1.37.0" ) const ( diff --git a/vendor/go.opentelemetry.io/otel/sdk/resource/host_id.go b/vendor/go.opentelemetry.io/otel/sdk/resource/host_id.go index 7819039238..5fed33d4fb 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/resource/host_id.go +++ b/vendor/go.opentelemetry.io/otel/sdk/resource/host_id.go @@ -8,7 +8,7 @@ import ( "errors" "strings" - semconv "go.opentelemetry.io/otel/semconv/v1.34.0" + semconv "go.opentelemetry.io/otel/semconv/v1.37.0" ) type hostIDProvider func() (string, error) @@ -96,7 +96,7 @@ func (r *hostIDReaderLinux) read() (string, error) { type hostIDDetector struct{} // Detect returns a *Resource containing the platform specific host id. -func (hostIDDetector) Detect(ctx context.Context) (*Resource, error) { +func (hostIDDetector) Detect(context.Context) (*Resource, error) { hostID, err := hostID() if err != nil { return nil, err diff --git a/vendor/go.opentelemetry.io/otel/sdk/resource/os.go b/vendor/go.opentelemetry.io/otel/sdk/resource/os.go index 01b4d27a03..51da76e807 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/resource/os.go +++ b/vendor/go.opentelemetry.io/otel/sdk/resource/os.go @@ -8,7 +8,7 @@ import ( "strings" "go.opentelemetry.io/otel/attribute" - semconv "go.opentelemetry.io/otel/semconv/v1.34.0" + semconv "go.opentelemetry.io/otel/semconv/v1.37.0" ) type osDescriptionProvider func() (string, error) @@ -32,7 +32,7 @@ type ( // Detect returns a *Resource that describes the operating system type the // service is running on. -func (osTypeDetector) Detect(ctx context.Context) (*Resource, error) { +func (osTypeDetector) Detect(context.Context) (*Resource, error) { osType := runtimeOS() osTypeAttribute := mapRuntimeOSToSemconvOSType(osType) @@ -45,7 +45,7 @@ func (osTypeDetector) Detect(ctx context.Context) (*Resource, error) { // Detect returns a *Resource that describes the operating system the // service is running on. -func (osDescriptionDetector) Detect(ctx context.Context) (*Resource, error) { +func (osDescriptionDetector) Detect(context.Context) (*Resource, error) { description, err := osDescription() if err != nil { return nil, err diff --git a/vendor/go.opentelemetry.io/otel/sdk/resource/os_release_unix.go b/vendor/go.opentelemetry.io/otel/sdk/resource/os_release_unix.go index f537e5ca5c..7252af79fc 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/resource/os_release_unix.go +++ b/vendor/go.opentelemetry.io/otel/sdk/resource/os_release_unix.go @@ -63,12 +63,12 @@ func parseOSReleaseFile(file io.Reader) map[string]string { return values } -// skip returns true if the line is blank or starts with a '#' character, and +// skip reports whether the line is blank or starts with a '#' character, and // therefore should be skipped from processing. func skip(line string) bool { line = strings.TrimSpace(line) - return len(line) == 0 || strings.HasPrefix(line, "#") + return line == "" || strings.HasPrefix(line, "#") } // parse attempts to split the provided line on the first '=' character, and then @@ -76,7 +76,7 @@ func skip(line string) bool { func parse(line string) (string, string, bool) { k, v, found := strings.Cut(line, "=") - if !found || len(k) == 0 { + if !found || k == "" { return "", "", false } diff --git a/vendor/go.opentelemetry.io/otel/sdk/resource/process.go b/vendor/go.opentelemetry.io/otel/sdk/resource/process.go index 6712ce80d5..138e57721b 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/resource/process.go +++ b/vendor/go.opentelemetry.io/otel/sdk/resource/process.go @@ -11,7 +11,7 @@ import ( "path/filepath" "runtime" - semconv "go.opentelemetry.io/otel/semconv/v1.34.0" + semconv "go.opentelemetry.io/otel/semconv/v1.37.0" ) type ( @@ -112,19 +112,19 @@ type ( // Detect returns a *Resource that describes the process identifier (PID) of the // executing process. -func (processPIDDetector) Detect(ctx context.Context) (*Resource, error) { +func (processPIDDetector) Detect(context.Context) (*Resource, error) { return NewWithAttributes(semconv.SchemaURL, semconv.ProcessPID(pid())), nil } // Detect returns a *Resource that describes the name of the process executable. -func (processExecutableNameDetector) Detect(ctx context.Context) (*Resource, error) { +func (processExecutableNameDetector) Detect(context.Context) (*Resource, error) { executableName := filepath.Base(commandArgs()[0]) return NewWithAttributes(semconv.SchemaURL, semconv.ProcessExecutableName(executableName)), nil } // Detect returns a *Resource that describes the full path of the process executable. -func (processExecutablePathDetector) Detect(ctx context.Context) (*Resource, error) { +func (processExecutablePathDetector) Detect(context.Context) (*Resource, error) { executablePath, err := executablePath() if err != nil { return nil, err @@ -135,13 +135,13 @@ func (processExecutablePathDetector) Detect(ctx context.Context) (*Resource, err // Detect returns a *Resource that describes all the command arguments as received // by the process. -func (processCommandArgsDetector) Detect(ctx context.Context) (*Resource, error) { +func (processCommandArgsDetector) Detect(context.Context) (*Resource, error) { return NewWithAttributes(semconv.SchemaURL, semconv.ProcessCommandArgs(commandArgs()...)), nil } // Detect returns a *Resource that describes the username of the user that owns the // process. -func (processOwnerDetector) Detect(ctx context.Context) (*Resource, error) { +func (processOwnerDetector) Detect(context.Context) (*Resource, error) { owner, err := owner() if err != nil { return nil, err @@ -152,17 +152,17 @@ func (processOwnerDetector) Detect(ctx context.Context) (*Resource, error) { // Detect returns a *Resource that describes the name of the compiler used to compile // this process image. -func (processRuntimeNameDetector) Detect(ctx context.Context) (*Resource, error) { +func (processRuntimeNameDetector) Detect(context.Context) (*Resource, error) { return NewWithAttributes(semconv.SchemaURL, semconv.ProcessRuntimeName(runtimeName())), nil } // Detect returns a *Resource that describes the version of the runtime of this process. -func (processRuntimeVersionDetector) Detect(ctx context.Context) (*Resource, error) { +func (processRuntimeVersionDetector) Detect(context.Context) (*Resource, error) { return NewWithAttributes(semconv.SchemaURL, semconv.ProcessRuntimeVersion(runtimeVersion())), nil } // Detect returns a *Resource that describes the runtime of this process. -func (processRuntimeDescriptionDetector) Detect(ctx context.Context) (*Resource, error) { +func (processRuntimeDescriptionDetector) Detect(context.Context) (*Resource, error) { runtimeDescription := fmt.Sprintf( "go version %s %s/%s", runtimeVersion(), runtimeOS(), runtimeArch()) diff --git a/vendor/go.opentelemetry.io/otel/sdk/resource/resource.go b/vendor/go.opentelemetry.io/otel/sdk/resource/resource.go index 09b91e1e1b..28e1e4f7eb 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/resource/resource.go +++ b/vendor/go.opentelemetry.io/otel/sdk/resource/resource.go @@ -112,7 +112,7 @@ func (r *Resource) String() string { } // MarshalLog is the marshaling function used by the logging system to represent this Resource. -func (r *Resource) MarshalLog() interface{} { +func (r *Resource) MarshalLog() any { return struct { Attributes attribute.Set SchemaURL string @@ -148,7 +148,7 @@ func (r *Resource) Iter() attribute.Iterator { return r.attrs.Iter() } -// Equal returns whether r and o represent the same resource. Two resources can +// Equal reports whether r and o represent the same resource. Two resources can // be equal even if they have different schema URLs. // // See the documentation on the [Resource] type for the pitfalls of using == diff --git a/vendor/go.opentelemetry.io/otel/sdk/trace/batch_span_processor.go b/vendor/go.opentelemetry.io/otel/sdk/trace/batch_span_processor.go index 6966ed861e..9bc3e525d1 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/trace/batch_span_processor.go +++ b/vendor/go.opentelemetry.io/otel/sdk/trace/batch_span_processor.go @@ -6,24 +6,35 @@ package trace // import "go.opentelemetry.io/otel/sdk/trace" import ( "context" "errors" + "fmt" "sync" "sync/atomic" "time" "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/internal/global" + "go.opentelemetry.io/otel/metric" + "go.opentelemetry.io/otel/sdk" "go.opentelemetry.io/otel/sdk/internal/env" + "go.opentelemetry.io/otel/sdk/trace/internal/x" + semconv "go.opentelemetry.io/otel/semconv/v1.37.0" + "go.opentelemetry.io/otel/semconv/v1.37.0/otelconv" "go.opentelemetry.io/otel/trace" ) // Defaults for BatchSpanProcessorOptions. const ( - DefaultMaxQueueSize = 2048 - DefaultScheduleDelay = 5000 + DefaultMaxQueueSize = 2048 + // DefaultScheduleDelay is the delay interval between two consecutive exports, in milliseconds. + DefaultScheduleDelay = 5000 + // DefaultExportTimeout is the duration after which an export is cancelled, in milliseconds. DefaultExportTimeout = 30000 DefaultMaxExportBatchSize = 512 ) +var queueFull = otelconv.ErrorTypeAttr("queue_full") + // BatchSpanProcessorOption configures a BatchSpanProcessor. type BatchSpanProcessorOption func(o *BatchSpanProcessorOptions) @@ -67,6 +78,11 @@ type batchSpanProcessor struct { queue chan ReadOnlySpan dropped uint32 + selfObservabilityEnabled bool + callbackRegistration metric.Registration + spansProcessedCounter otelconv.SDKProcessorSpanProcessed + componentNameAttr attribute.KeyValue + batch []ReadOnlySpan batchMutex sync.Mutex timer *time.Timer @@ -87,11 +103,7 @@ func NewBatchSpanProcessor(exporter SpanExporter, options ...BatchSpanProcessorO maxExportBatchSize := env.BatchSpanProcessorMaxExportBatchSize(DefaultMaxExportBatchSize) if maxExportBatchSize > maxQueueSize { - if DefaultMaxExportBatchSize > maxQueueSize { - maxExportBatchSize = maxQueueSize - } else { - maxExportBatchSize = DefaultMaxExportBatchSize - } + maxExportBatchSize = min(DefaultMaxExportBatchSize, maxQueueSize) } o := BatchSpanProcessorOptions{ @@ -112,6 +124,21 @@ func NewBatchSpanProcessor(exporter SpanExporter, options ...BatchSpanProcessorO stopCh: make(chan struct{}), } + if x.SelfObservability.Enabled() { + bsp.selfObservabilityEnabled = true + bsp.componentNameAttr = componentName() + + var err error + bsp.spansProcessedCounter, bsp.callbackRegistration, err = newBSPObs( + bsp.componentNameAttr, + func() int64 { return int64(len(bsp.queue)) }, + int64(bsp.o.MaxQueueSize), + ) + if err != nil { + otel.Handle(err) + } + } + bsp.stopWait.Add(1) go func() { defer bsp.stopWait.Done() @@ -122,8 +149,61 @@ func NewBatchSpanProcessor(exporter SpanExporter, options ...BatchSpanProcessorO return bsp } +var processorIDCounter atomic.Int64 + +// nextProcessorID returns an identifier for this batch span processor, +// starting with 0 and incrementing by 1 each time it is called. +func nextProcessorID() int64 { + return processorIDCounter.Add(1) - 1 +} + +func componentName() attribute.KeyValue { + id := nextProcessorID() + name := fmt.Sprintf("%s/%d", otelconv.ComponentTypeBatchingSpanProcessor, id) + return semconv.OTelComponentName(name) +} + +// newBSPObs creates and returns a new set of metrics instruments and a +// registration for a BatchSpanProcessor. It is the caller's responsibility +// to unregister the registration when it is no longer needed. +func newBSPObs( + cmpnt attribute.KeyValue, + qLen func() int64, + qMax int64, +) (otelconv.SDKProcessorSpanProcessed, metric.Registration, error) { + meter := otel.GetMeterProvider().Meter( + selfObsScopeName, + metric.WithInstrumentationVersion(sdk.Version()), + metric.WithSchemaURL(semconv.SchemaURL), + ) + + qCap, err := otelconv.NewSDKProcessorSpanQueueCapacity(meter) + + qSize, e := otelconv.NewSDKProcessorSpanQueueSize(meter) + err = errors.Join(err, e) + + spansProcessed, e := otelconv.NewSDKProcessorSpanProcessed(meter) + err = errors.Join(err, e) + + cmpntT := semconv.OTelComponentTypeBatchingSpanProcessor + attrs := metric.WithAttributes(cmpnt, cmpntT) + + reg, e := meter.RegisterCallback( + func(_ context.Context, o metric.Observer) error { + o.ObserveInt64(qSize.Inst(), qLen(), attrs) + o.ObserveInt64(qCap.Inst(), qMax, attrs) + return nil + }, + qSize.Inst(), + qCap.Inst(), + ) + err = errors.Join(err, e) + + return spansProcessed, reg, err +} + // OnStart method does nothing. -func (bsp *batchSpanProcessor) OnStart(parent context.Context, s ReadWriteSpan) {} +func (*batchSpanProcessor) OnStart(context.Context, ReadWriteSpan) {} // OnEnd method enqueues a ReadOnlySpan for later processing. func (bsp *batchSpanProcessor) OnEnd(s ReadOnlySpan) { @@ -162,6 +242,9 @@ func (bsp *batchSpanProcessor) Shutdown(ctx context.Context) error { case <-ctx.Done(): err = ctx.Err() } + if bsp.selfObservabilityEnabled { + err = errors.Join(err, bsp.callbackRegistration.Unregister()) + } }) return err } @@ -171,7 +254,7 @@ type forceFlushSpan struct { flushed chan struct{} } -func (f forceFlushSpan) SpanContext() trace.SpanContext { +func (forceFlushSpan) SpanContext() trace.SpanContext { return trace.NewSpanContext(trace.SpanContextConfig{TraceFlags: trace.FlagsSampled}) } @@ -274,6 +357,11 @@ func (bsp *batchSpanProcessor) exportSpans(ctx context.Context) error { if l := len(bsp.batch); l > 0 { global.Debug("exporting spans", "count", len(bsp.batch), "total_dropped", atomic.LoadUint32(&bsp.dropped)) + if bsp.selfObservabilityEnabled { + bsp.spansProcessedCounter.Add(ctx, int64(l), + bsp.componentNameAttr, + bsp.spansProcessedCounter.AttrComponentType(otelconv.ComponentTypeBatchingSpanProcessor)) + } err := bsp.e.ExportSpans(ctx, bsp.batch) // A new batch is always created after exporting, even if the batch failed to be exported. @@ -382,11 +470,17 @@ func (bsp *batchSpanProcessor) enqueueBlockOnQueueFull(ctx context.Context, sd R case bsp.queue <- sd: return true case <-ctx.Done(): + if bsp.selfObservabilityEnabled { + bsp.spansProcessedCounter.Add(ctx, 1, + bsp.componentNameAttr, + bsp.spansProcessedCounter.AttrComponentType(otelconv.ComponentTypeBatchingSpanProcessor), + bsp.spansProcessedCounter.AttrErrorType(queueFull)) + } return false } } -func (bsp *batchSpanProcessor) enqueueDrop(_ context.Context, sd ReadOnlySpan) bool { +func (bsp *batchSpanProcessor) enqueueDrop(ctx context.Context, sd ReadOnlySpan) bool { if !sd.SpanContext().IsSampled() { return false } @@ -396,12 +490,18 @@ func (bsp *batchSpanProcessor) enqueueDrop(_ context.Context, sd ReadOnlySpan) b return true default: atomic.AddUint32(&bsp.dropped, 1) + if bsp.selfObservabilityEnabled { + bsp.spansProcessedCounter.Add(ctx, 1, + bsp.componentNameAttr, + bsp.spansProcessedCounter.AttrComponentType(otelconv.ComponentTypeBatchingSpanProcessor), + bsp.spansProcessedCounter.AttrErrorType(queueFull)) + } } return false } // MarshalLog is the marshaling function used by the logging system to represent this Span Processor. -func (bsp *batchSpanProcessor) MarshalLog() interface{} { +func (bsp *batchSpanProcessor) MarshalLog() any { return struct { Type string SpanExporter SpanExporter diff --git a/vendor/go.opentelemetry.io/otel/sdk/trace/doc.go b/vendor/go.opentelemetry.io/otel/sdk/trace/doc.go index 1f60524e3e..e58e7f6ed7 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/trace/doc.go +++ b/vendor/go.opentelemetry.io/otel/sdk/trace/doc.go @@ -6,5 +6,8 @@ Package trace contains support for OpenTelemetry distributed tracing. The following assumes a basic familiarity with OpenTelemetry concepts. See https://opentelemetry.io. + +See [go.opentelemetry.io/otel/sdk/trace/internal/x] for information about +the experimental features. */ package trace // import "go.opentelemetry.io/otel/sdk/trace" diff --git a/vendor/go.opentelemetry.io/otel/sdk/trace/id_generator.go b/vendor/go.opentelemetry.io/otel/sdk/trace/id_generator.go index c8d3fb7e3c..3649322a6e 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/trace/id_generator.go +++ b/vendor/go.opentelemetry.io/otel/sdk/trace/id_generator.go @@ -32,7 +32,7 @@ type randomIDGenerator struct{} var _ IDGenerator = &randomIDGenerator{} // NewSpanID returns a non-zero span ID from a randomly-chosen sequence. -func (gen *randomIDGenerator) NewSpanID(ctx context.Context, traceID trace.TraceID) trace.SpanID { +func (*randomIDGenerator) NewSpanID(context.Context, trace.TraceID) trace.SpanID { sid := trace.SpanID{} for { binary.NativeEndian.PutUint64(sid[:], rand.Uint64()) @@ -45,7 +45,7 @@ func (gen *randomIDGenerator) NewSpanID(ctx context.Context, traceID trace.Trace // NewIDs returns a non-zero trace ID and a non-zero span ID from a // randomly-chosen sequence. -func (gen *randomIDGenerator) NewIDs(ctx context.Context) (trace.TraceID, trace.SpanID) { +func (*randomIDGenerator) NewIDs(context.Context) (trace.TraceID, trace.SpanID) { tid := trace.TraceID{} sid := trace.SpanID{} for { diff --git a/vendor/go.opentelemetry.io/otel/sdk/trace/internal/x/README.md b/vendor/go.opentelemetry.io/otel/sdk/trace/internal/x/README.md new file mode 100644 index 0000000000..feec16fa64 --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/sdk/trace/internal/x/README.md @@ -0,0 +1,35 @@ +# Experimental Features + +The Trace SDK contains features that have not yet stabilized in the OpenTelemetry specification. +These features are added to the OpenTelemetry Go Trace SDK prior to stabilization in the specification so that users can start experimenting with them and provide feedback. + +These features may change in backwards incompatible ways as feedback is applied. +See the [Compatibility and Stability](#compatibility-and-stability) section for more information. + +## Features + +- [Self-Observability](#self-observability) + +### Self-Observability + +The SDK provides a self-observability feature that allows you to monitor the SDK itself. + +To opt-in, set the environment variable `OTEL_GO_X_SELF_OBSERVABILITY` to `true`. + +When enabled, the SDK will create the following metrics using the global `MeterProvider`: + +- `otel.sdk.span.live` +- `otel.sdk.span.started` + +Please see the [Semantic conventions for OpenTelemetry SDK metrics] documentation for more details on these metrics. + +[Semantic conventions for OpenTelemetry SDK metrics]: https://github.com/open-telemetry/semantic-conventions/blob/v1.36.0/docs/otel/sdk-metrics.md + +## Compatibility and Stability + +Experimental features do not fall within the scope of the OpenTelemetry Go versioning and stability [policy](../../../../VERSIONING.md). +These features may be removed or modified in successive version releases, including patch versions. + +When an experimental feature is promoted to a stable feature, a migration path will be included in the changelog entry of the release. +There is no guarantee that any environment variable feature flags that enabled the experimental feature will be supported by the stable version. +If they are supported, they may be accompanied with a deprecation notice stating a timeline for the removal of that support. diff --git a/vendor/go.opentelemetry.io/otel/sdk/trace/internal/x/x.go b/vendor/go.opentelemetry.io/otel/sdk/trace/internal/x/x.go new file mode 100644 index 0000000000..2fcbbcc66e --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/sdk/trace/internal/x/x.go @@ -0,0 +1,63 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// Package x documents experimental features for [go.opentelemetry.io/otel/sdk/trace]. +package x // import "go.opentelemetry.io/otel/sdk/trace/internal/x" + +import ( + "os" + "strings" +) + +// SelfObservability is an experimental feature flag that determines if SDK +// self-observability metrics are enabled. +// +// To enable this feature set the OTEL_GO_X_SELF_OBSERVABILITY environment variable +// to the case-insensitive string value of "true" (i.e. "True" and "TRUE" +// will also enable this). +var SelfObservability = newFeature("SELF_OBSERVABILITY", func(v string) (string, bool) { + if strings.EqualFold(v, "true") { + return v, true + } + return "", false +}) + +// Feature is an experimental feature control flag. It provides a uniform way +// to interact with these feature flags and parse their values. +type Feature[T any] struct { + key string + parse func(v string) (T, bool) +} + +func newFeature[T any](suffix string, parse func(string) (T, bool)) Feature[T] { + const envKeyRoot = "OTEL_GO_X_" + return Feature[T]{ + key: envKeyRoot + suffix, + parse: parse, + } +} + +// Key returns the environment variable key that needs to be set to enable the +// feature. +func (f Feature[T]) Key() string { return f.key } + +// Lookup returns the user configured value for the feature and true if the +// user has enabled the feature. Otherwise, if the feature is not enabled, a +// zero-value and false are returned. +func (f Feature[T]) Lookup() (v T, ok bool) { + // https://github.com/open-telemetry/opentelemetry-specification/blob/62effed618589a0bec416a87e559c0a9d96289bb/specification/configuration/sdk-environment-variables.md#parsing-empty-value + // + // > The SDK MUST interpret an empty value of an environment variable the + // > same way as when the variable is unset. + vRaw := os.Getenv(f.key) + if vRaw == "" { + return v, ok + } + return f.parse(vRaw) +} + +// Enabled reports whether the feature is enabled. +func (f Feature[T]) Enabled() bool { + _, ok := f.Lookup() + return ok +} diff --git a/vendor/go.opentelemetry.io/otel/sdk/trace/provider.go b/vendor/go.opentelemetry.io/otel/sdk/trace/provider.go index 0e2a2e7c60..37ce2ac876 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/trace/provider.go +++ b/vendor/go.opentelemetry.io/otel/sdk/trace/provider.go @@ -5,14 +5,20 @@ package trace // import "go.opentelemetry.io/otel/sdk/trace" import ( "context" + "errors" "fmt" "sync" "sync/atomic" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/internal/global" + "go.opentelemetry.io/otel/metric" + "go.opentelemetry.io/otel/sdk" "go.opentelemetry.io/otel/sdk/instrumentation" "go.opentelemetry.io/otel/sdk/resource" + "go.opentelemetry.io/otel/sdk/trace/internal/x" + semconv "go.opentelemetry.io/otel/semconv/v1.37.0" + "go.opentelemetry.io/otel/semconv/v1.37.0/otelconv" "go.opentelemetry.io/otel/trace" "go.opentelemetry.io/otel/trace/embedded" "go.opentelemetry.io/otel/trace/noop" @@ -20,6 +26,7 @@ import ( const ( defaultTracerName = "go.opentelemetry.io/otel/sdk/tracer" + selfObsScopeName = "go.opentelemetry.io/otel/sdk/trace" ) // tracerProviderConfig. @@ -45,7 +52,7 @@ type tracerProviderConfig struct { } // MarshalLog is the marshaling function used by the logging system to represent this Provider. -func (cfg tracerProviderConfig) MarshalLog() interface{} { +func (cfg tracerProviderConfig) MarshalLog() any { return struct { SpanProcessors []SpanProcessor SamplerType string @@ -156,8 +163,18 @@ func (p *TracerProvider) Tracer(name string, opts ...trace.TracerOption) trace.T t, ok := p.namedTracer[is] if !ok { t = &tracer{ - provider: p, - instrumentationScope: is, + provider: p, + instrumentationScope: is, + selfObservabilityEnabled: x.SelfObservability.Enabled(), + } + if t.selfObservabilityEnabled { + var err error + t.spanLiveMetric, t.spanStartedMetric, err = newInst() + if err != nil { + msg := "failed to create self-observability metrics for tracer: %w" + err := fmt.Errorf(msg, err) + otel.Handle(err) + } } p.namedTracer[is] = t } @@ -184,6 +201,23 @@ func (p *TracerProvider) Tracer(name string, opts ...trace.TracerOption) trace.T return t } +func newInst() (otelconv.SDKSpanLive, otelconv.SDKSpanStarted, error) { + m := otel.GetMeterProvider().Meter( + selfObsScopeName, + metric.WithInstrumentationVersion(sdk.Version()), + metric.WithSchemaURL(semconv.SchemaURL), + ) + + var err error + spanLiveMetric, e := otelconv.NewSDKSpanLive(m) + err = errors.Join(err, e) + + spanStartedMetric, e := otelconv.NewSDKSpanStarted(m) + err = errors.Join(err, e) + + return spanLiveMetric, spanStartedMetric, err +} + // RegisterSpanProcessor adds the given SpanProcessor to the list of SpanProcessors. func (p *TracerProvider) RegisterSpanProcessor(sp SpanProcessor) { // This check prevents calls during a shutdown. diff --git a/vendor/go.opentelemetry.io/otel/sdk/trace/sampling.go b/vendor/go.opentelemetry.io/otel/sdk/trace/sampling.go index aa7b262d0d..689663d48b 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/trace/sampling.go +++ b/vendor/go.opentelemetry.io/otel/sdk/trace/sampling.go @@ -110,14 +110,14 @@ func TraceIDRatioBased(fraction float64) Sampler { type alwaysOnSampler struct{} -func (as alwaysOnSampler) ShouldSample(p SamplingParameters) SamplingResult { +func (alwaysOnSampler) ShouldSample(p SamplingParameters) SamplingResult { return SamplingResult{ Decision: RecordAndSample, Tracestate: trace.SpanContextFromContext(p.ParentContext).TraceState(), } } -func (as alwaysOnSampler) Description() string { +func (alwaysOnSampler) Description() string { return "AlwaysOnSampler" } @@ -131,14 +131,14 @@ func AlwaysSample() Sampler { type alwaysOffSampler struct{} -func (as alwaysOffSampler) ShouldSample(p SamplingParameters) SamplingResult { +func (alwaysOffSampler) ShouldSample(p SamplingParameters) SamplingResult { return SamplingResult{ Decision: Drop, Tracestate: trace.SpanContextFromContext(p.ParentContext).TraceState(), } } -func (as alwaysOffSampler) Description() string { +func (alwaysOffSampler) Description() string { return "AlwaysOffSampler" } diff --git a/vendor/go.opentelemetry.io/otel/sdk/trace/simple_span_processor.go b/vendor/go.opentelemetry.io/otel/sdk/trace/simple_span_processor.go index 664e13e03f..411d9ccdd7 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/trace/simple_span_processor.go +++ b/vendor/go.opentelemetry.io/otel/sdk/trace/simple_span_processor.go @@ -39,7 +39,7 @@ func NewSimpleSpanProcessor(exporter SpanExporter) SpanProcessor { } // OnStart does nothing. -func (ssp *simpleSpanProcessor) OnStart(context.Context, ReadWriteSpan) {} +func (*simpleSpanProcessor) OnStart(context.Context, ReadWriteSpan) {} // OnEnd immediately exports a ReadOnlySpan. func (ssp *simpleSpanProcessor) OnEnd(s ReadOnlySpan) { @@ -104,13 +104,13 @@ func (ssp *simpleSpanProcessor) Shutdown(ctx context.Context) error { } // ForceFlush does nothing as there is no data to flush. -func (ssp *simpleSpanProcessor) ForceFlush(context.Context) error { +func (*simpleSpanProcessor) ForceFlush(context.Context) error { return nil } // MarshalLog is the marshaling function used by the logging system to represent // this Span Processor. -func (ssp *simpleSpanProcessor) MarshalLog() interface{} { +func (ssp *simpleSpanProcessor) MarshalLog() any { return struct { Type string Exporter SpanExporter diff --git a/vendor/go.opentelemetry.io/otel/sdk/trace/snapshot.go b/vendor/go.opentelemetry.io/otel/sdk/trace/snapshot.go index d511d0f271..63aa337800 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/trace/snapshot.go +++ b/vendor/go.opentelemetry.io/otel/sdk/trace/snapshot.go @@ -35,7 +35,7 @@ type snapshot struct { var _ ReadOnlySpan = snapshot{} -func (s snapshot) private() {} +func (snapshot) private() {} // Name returns the name of the span. func (s snapshot) Name() string { diff --git a/vendor/go.opentelemetry.io/otel/sdk/trace/span.go b/vendor/go.opentelemetry.io/otel/sdk/trace/span.go index 1785a4bbb0..b376051fbb 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/trace/span.go +++ b/vendor/go.opentelemetry.io/otel/sdk/trace/span.go @@ -20,7 +20,7 @@ import ( "go.opentelemetry.io/otel/internal/global" "go.opentelemetry.io/otel/sdk/instrumentation" "go.opentelemetry.io/otel/sdk/resource" - semconv "go.opentelemetry.io/otel/semconv/v1.34.0" + semconv "go.opentelemetry.io/otel/semconv/v1.37.0" "go.opentelemetry.io/otel/trace" "go.opentelemetry.io/otel/trace/embedded" ) @@ -61,6 +61,7 @@ type ReadOnlySpan interface { InstrumentationScope() instrumentation.Scope // InstrumentationLibrary returns information about the instrumentation // library that created the span. + // // Deprecated: please use InstrumentationScope instead. InstrumentationLibrary() instrumentation.Library //nolint:staticcheck // This method needs to be define for backwards compatibility // Resource returns information about the entity that produced the span. @@ -165,7 +166,7 @@ func (s *recordingSpan) SpanContext() trace.SpanContext { return s.spanContext } -// IsRecording returns if this span is being recorded. If this span has ended +// IsRecording reports whether this span is being recorded. If this span has ended // this will return false. func (s *recordingSpan) IsRecording() bool { if s == nil { @@ -177,7 +178,7 @@ func (s *recordingSpan) IsRecording() bool { return s.isRecording() } -// isRecording returns if this span is being recorded. If this span has ended +// isRecording reports whether this span is being recorded. If this span has ended // this will return false. // // This method assumes s.mu.Lock is held by the caller. @@ -495,6 +496,16 @@ func (s *recordingSpan) End(options ...trace.SpanEndOption) { } s.mu.Unlock() + if s.tracer.selfObservabilityEnabled { + defer func() { + // Add the span to the context to ensure the metric is recorded + // with the correct span context. + ctx := trace.ContextWithSpan(context.Background(), s) + set := spanLiveSet(s.spanContext.IsSampled()) + s.tracer.spanLiveMetric.AddSet(ctx, -1, set) + }() + } + sps := s.tracer.provider.getSpanProcessors() if len(sps) == 0 { return @@ -545,7 +556,7 @@ func (s *recordingSpan) RecordError(err error, opts ...trace.EventOption) { s.addEvent(semconv.ExceptionEventName, opts...) } -func typeStr(i interface{}) string { +func typeStr(i any) string { t := reflect.TypeOf(i) if t.PkgPath() == "" && t.Name() == "" { // Likely a builtin type. diff --git a/vendor/go.opentelemetry.io/otel/sdk/trace/tracer.go b/vendor/go.opentelemetry.io/otel/sdk/trace/tracer.go index 0b65ae9ab7..e965c4cce8 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/trace/tracer.go +++ b/vendor/go.opentelemetry.io/otel/sdk/trace/tracer.go @@ -7,7 +7,9 @@ import ( "context" "time" + "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/sdk/instrumentation" + "go.opentelemetry.io/otel/semconv/v1.37.0/otelconv" "go.opentelemetry.io/otel/trace" "go.opentelemetry.io/otel/trace/embedded" ) @@ -17,6 +19,10 @@ type tracer struct { provider *TracerProvider instrumentationScope instrumentation.Scope + + selfObservabilityEnabled bool + spanLiveMetric otelconv.SDKSpanLive + spanStartedMetric otelconv.SDKSpanStarted } var _ trace.Tracer = &tracer{} @@ -46,17 +52,25 @@ func (tr *tracer) Start( } s := tr.newSpan(ctx, name, &config) + newCtx := trace.ContextWithSpan(ctx, s) + if tr.selfObservabilityEnabled { + psc := trace.SpanContextFromContext(ctx) + set := spanStartedSet(psc, s) + tr.spanStartedMetric.AddSet(newCtx, 1, set) + } + if rw, ok := s.(ReadWriteSpan); ok && s.IsRecording() { sps := tr.provider.getSpanProcessors() for _, sp := range sps { + // Use original context. sp.sp.OnStart(ctx, rw) } } if rtt, ok := s.(runtimeTracer); ok { - ctx = rtt.runtimeTrace(ctx) + newCtx = rtt.runtimeTrace(newCtx) } - return trace.ContextWithSpan(ctx, s), s + return newCtx, s } type runtimeTracer interface { @@ -112,11 +126,12 @@ func (tr *tracer) newSpan(ctx context.Context, name string, config *trace.SpanCo if !isRecording(samplingResult) { return tr.newNonRecordingSpan(sc) } - return tr.newRecordingSpan(psc, sc, name, samplingResult, config) + return tr.newRecordingSpan(ctx, psc, sc, name, samplingResult, config) } // newRecordingSpan returns a new configured recordingSpan. func (tr *tracer) newRecordingSpan( + ctx context.Context, psc, sc trace.SpanContext, name string, sr SamplingResult, @@ -153,6 +168,14 @@ func (tr *tracer) newRecordingSpan( s.SetAttributes(sr.Attributes...) s.SetAttributes(config.Attributes()...) + if tr.selfObservabilityEnabled { + // Propagate any existing values from the context with the new span to + // the measurement context. + ctx = trace.ContextWithSpan(ctx, s) + set := spanLiveSet(s.spanContext.IsSampled()) + tr.spanLiveMetric.AddSet(ctx, 1, set) + } + return s } @@ -160,3 +183,112 @@ func (tr *tracer) newRecordingSpan( func (tr *tracer) newNonRecordingSpan(sc trace.SpanContext) nonRecordingSpan { return nonRecordingSpan{tracer: tr, sc: sc} } + +type parentState int + +const ( + parentStateNoParent parentState = iota + parentStateLocalParent + parentStateRemoteParent +) + +type samplingState int + +const ( + samplingStateDrop samplingState = iota + samplingStateRecordOnly + samplingStateRecordAndSample +) + +type spanStartedSetKey struct { + parent parentState + sampling samplingState +} + +var spanStartedSetCache = map[spanStartedSetKey]attribute.Set{ + {parentStateNoParent, samplingStateDrop}: attribute.NewSet( + otelconv.SDKSpanStarted{}.AttrSpanParentOrigin(otelconv.SpanParentOriginNone), + otelconv.SDKSpanStarted{}.AttrSpanSamplingResult(otelconv.SpanSamplingResultDrop), + ), + {parentStateLocalParent, samplingStateDrop}: attribute.NewSet( + otelconv.SDKSpanStarted{}.AttrSpanParentOrigin(otelconv.SpanParentOriginLocal), + otelconv.SDKSpanStarted{}.AttrSpanSamplingResult(otelconv.SpanSamplingResultDrop), + ), + {parentStateRemoteParent, samplingStateDrop}: attribute.NewSet( + otelconv.SDKSpanStarted{}.AttrSpanParentOrigin(otelconv.SpanParentOriginRemote), + otelconv.SDKSpanStarted{}.AttrSpanSamplingResult(otelconv.SpanSamplingResultDrop), + ), + + {parentStateNoParent, samplingStateRecordOnly}: attribute.NewSet( + otelconv.SDKSpanStarted{}.AttrSpanParentOrigin(otelconv.SpanParentOriginNone), + otelconv.SDKSpanStarted{}.AttrSpanSamplingResult(otelconv.SpanSamplingResultRecordOnly), + ), + {parentStateLocalParent, samplingStateRecordOnly}: attribute.NewSet( + otelconv.SDKSpanStarted{}.AttrSpanParentOrigin(otelconv.SpanParentOriginLocal), + otelconv.SDKSpanStarted{}.AttrSpanSamplingResult(otelconv.SpanSamplingResultRecordOnly), + ), + {parentStateRemoteParent, samplingStateRecordOnly}: attribute.NewSet( + otelconv.SDKSpanStarted{}.AttrSpanParentOrigin(otelconv.SpanParentOriginRemote), + otelconv.SDKSpanStarted{}.AttrSpanSamplingResult(otelconv.SpanSamplingResultRecordOnly), + ), + + {parentStateNoParent, samplingStateRecordAndSample}: attribute.NewSet( + otelconv.SDKSpanStarted{}.AttrSpanParentOrigin(otelconv.SpanParentOriginNone), + otelconv.SDKSpanStarted{}.AttrSpanSamplingResult(otelconv.SpanSamplingResultRecordAndSample), + ), + {parentStateLocalParent, samplingStateRecordAndSample}: attribute.NewSet( + otelconv.SDKSpanStarted{}.AttrSpanParentOrigin(otelconv.SpanParentOriginLocal), + otelconv.SDKSpanStarted{}.AttrSpanSamplingResult(otelconv.SpanSamplingResultRecordAndSample), + ), + {parentStateRemoteParent, samplingStateRecordAndSample}: attribute.NewSet( + otelconv.SDKSpanStarted{}.AttrSpanParentOrigin(otelconv.SpanParentOriginRemote), + otelconv.SDKSpanStarted{}.AttrSpanSamplingResult(otelconv.SpanSamplingResultRecordAndSample), + ), +} + +func spanStartedSet(psc trace.SpanContext, span trace.Span) attribute.Set { + key := spanStartedSetKey{ + parent: parentStateNoParent, + sampling: samplingStateDrop, + } + + if psc.IsValid() { + if psc.IsRemote() { + key.parent = parentStateRemoteParent + } else { + key.parent = parentStateLocalParent + } + } + + if span.IsRecording() { + if span.SpanContext().IsSampled() { + key.sampling = samplingStateRecordAndSample + } else { + key.sampling = samplingStateRecordOnly + } + } + + return spanStartedSetCache[key] +} + +type spanLiveSetKey struct { + sampled bool +} + +var spanLiveSetCache = map[spanLiveSetKey]attribute.Set{ + {true}: attribute.NewSet( + otelconv.SDKSpanLive{}.AttrSpanSamplingResult( + otelconv.SpanSamplingResultRecordAndSample, + ), + ), + {false}: attribute.NewSet( + otelconv.SDKSpanLive{}.AttrSpanSamplingResult( + otelconv.SpanSamplingResultRecordOnly, + ), + ), +} + +func spanLiveSet(sampled bool) attribute.Set { + key := spanLiveSetKey{sampled: sampled} + return spanLiveSetCache[key] +} diff --git a/vendor/go.opentelemetry.io/otel/sdk/trace/version.go b/vendor/go.opentelemetry.io/otel/sdk/trace/version.go deleted file mode 100644 index b84dd2c5ee..0000000000 --- a/vendor/go.opentelemetry.io/otel/sdk/trace/version.go +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package trace // import "go.opentelemetry.io/otel/sdk/trace" - -// version is the current release version of the metric SDK in use. -func version() string { - return "1.16.0-rc.1" -} diff --git a/vendor/go.opentelemetry.io/otel/sdk/version.go b/vendor/go.opentelemetry.io/otel/sdk/version.go index c0217af6b9..7f97cc31e5 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/version.go +++ b/vendor/go.opentelemetry.io/otel/sdk/version.go @@ -6,5 +6,5 @@ package sdk // import "go.opentelemetry.io/otel/sdk" // Version is the current release version of the OpenTelemetry SDK in use. func Version() string { - return "1.37.0" + return "1.38.0" } diff --git a/vendor/go.opentelemetry.io/otel/semconv/internal/http.go b/vendor/go.opentelemetry.io/otel/semconv/internal/http.go index e9eb577345..58b5eddef6 100644 --- a/vendor/go.opentelemetry.io/otel/semconv/internal/http.go +++ b/vendor/go.opentelemetry.io/otel/semconv/internal/http.go @@ -104,7 +104,7 @@ func (sc *SemanticConventions) NetAttributesFromHTTPRequest( // It handles both IPv4 and IPv6 addresses. If the host portion is not recognized // as a valid IPv4 or IPv6 address, the `ip` result will be empty and the // host portion will instead be returned in `name`. -func hostIPNamePort(hostWithPort string) (ip string, name string, port int) { +func hostIPNamePort(hostWithPort string) (ip, name string, port int) { var ( hostPart, portPart string parsedPort uint64 diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.34.0/MIGRATION.md b/vendor/go.opentelemetry.io/otel/semconv/v1.34.0/MIGRATION.md deleted file mode 100644 index 02b56115e3..0000000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.34.0/MIGRATION.md +++ /dev/null @@ -1,4 +0,0 @@ - -# Migration from v1.33.0 to v1.34.0 - -The `go.opentelemetry.io/otel/semconv/v1.34.0` package should be a drop-in replacement for `go.opentelemetry.io/otel/semconv/v1.33.0`. diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.34.0/README.md b/vendor/go.opentelemetry.io/otel/semconv/v1.34.0/README.md deleted file mode 100644 index fab06c9752..0000000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.34.0/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Semconv v1.34.0 - -[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/semconv/v1.34.0)](https://pkg.go.dev/go.opentelemetry.io/otel/semconv/v1.34.0) diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/MIGRATION.md b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/MIGRATION.md new file mode 100644 index 0000000000..2480547895 --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/MIGRATION.md @@ -0,0 +1,41 @@ + +# Migration from v1.36.0 to v1.37.0 + +The `go.opentelemetry.io/otel/semconv/v1.37.0` package should be a drop-in replacement for `go.opentelemetry.io/otel/semconv/v1.36.0` with the following exceptions. + +## Removed + +The following declarations have been removed. +Refer to the [OpenTelemetry Semantic Conventions documentation] for deprecation instructions. + +If the type is not listed in the documentation as deprecated, it has been removed in this version due to lack of applicability or use. +If you use any of these non-deprecated declarations in your Go application, please [open an issue] describing your use-case. + +- `ContainerRuntime` +- `ContainerRuntimeKey` +- `GenAIOpenAIRequestServiceTierAuto` +- `GenAIOpenAIRequestServiceTierDefault` +- `GenAIOpenAIRequestServiceTierKey` +- `GenAIOpenAIResponseServiceTier` +- `GenAIOpenAIResponseServiceTierKey` +- `GenAIOpenAIResponseSystemFingerprint` +- `GenAIOpenAIResponseSystemFingerprintKey` +- `GenAISystemAWSBedrock` +- `GenAISystemAnthropic` +- `GenAISystemAzureAIInference` +- `GenAISystemAzureAIOpenAI` +- `GenAISystemCohere` +- `GenAISystemDeepseek` +- `GenAISystemGCPGemini` +- `GenAISystemGCPGenAI` +- `GenAISystemGCPVertexAI` +- `GenAISystemGroq` +- `GenAISystemIBMWatsonxAI` +- `GenAISystemKey` +- `GenAISystemMistralAI` +- `GenAISystemOpenAI` +- `GenAISystemPerplexity` +- `GenAISystemXai` + +[OpenTelemetry Semantic Conventions documentation]: https://github.com/open-telemetry/semantic-conventions +[open an issue]: https://github.com/open-telemetry/opentelemetry-go/issues/new?template=Blank+issue diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/README.md b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/README.md new file mode 100644 index 0000000000..d795247f32 --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/README.md @@ -0,0 +1,3 @@ +# Semconv v1.37.0 + +[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/semconv/v1.37.0)](https://pkg.go.dev/go.opentelemetry.io/otel/semconv/v1.37.0) diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.34.0/attribute_group.go b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/attribute_group.go similarity index 89% rename from vendor/go.opentelemetry.io/otel/semconv/v1.34.0/attribute_group.go rename to vendor/go.opentelemetry.io/otel/semconv/v1.37.0/attribute_group.go index 5b56662573..b6b27498f2 100644 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.34.0/attribute_group.go +++ b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/attribute_group.go @@ -3,7 +3,7 @@ // Code generated from semantic convention specification. DO NOT EDIT. -package semconv // import "go.opentelemetry.io/otel/semconv/v1.34.0" +package semconv // import "go.opentelemetry.io/otel/semconv/v1.37.0" import "go.opentelemetry.io/otel/attribute" @@ -28,7 +28,8 @@ 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]. + // the android operating system. More information can be found in the + // [Android API levels documentation]. // // Type: string // RequirementLevel: Recommended @@ -36,16 +37,17 @@ const ( // // Examples: "33", "32" // - // [here]: https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels + // [Android API levels documentation]: 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]. +// the android operating system. More information can be found in the +// [Android API levels documentation]. // -// [here]: https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels +// [Android API levels documentation]: https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels func AndroidOSAPILevel(val string) attribute.KeyValue { return AndroidOSAPILevelKey.String(val) } @@ -73,6 +75,18 @@ var ( // Namespace: app const ( + // AppBuildIDKey is the attribute Key conforming to the "app.build_id" semantic + // conventions. It represents the unique identifier for a particular build or + // compilation of the application. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "6cff0a7e-cefc-4668-96f5-1273d8b334d0", + // "9f2b833506aa6973a92fde9733e6271f", "my-app-1.0.0-code-123" + AppBuildIDKey = attribute.Key("app.build_id") + // AppInstallationIDKey is the attribute Key conforming to the // "app.installation.id" semantic conventions. It represents a unique identifier // representing the installation of an application on a specific device. @@ -106,16 +120,51 @@ const ( // - [App set ID]. // - [`Settings.getString(Settings.Secure.ANDROID_ID)`]. // - // More information about Android identifier best practices can be found [here] - // . + // More information about Android identifier best practices can be found in the + // [Android user data IDs guide]. // // [vendor identifier]: https://developer.apple.com/documentation/uikit/uidevice/identifierforvendor // [Firebase Installation ID]: https://firebase.google.com/docs/projects/manage-installations // [App set ID]: https://developer.android.com/identity/app-set-id // [`Settings.getString(Settings.Secure.ANDROID_ID)`]: https://developer.android.com/reference/android/provider/Settings.Secure#ANDROID_ID - // [here]: https://developer.android.com/training/articles/user-data-ids + // [Android user data IDs guide]: https://developer.android.com/training/articles/user-data-ids AppInstallationIDKey = attribute.Key("app.installation.id") + // AppJankFrameCountKey is the attribute Key conforming to the + // "app.jank.frame_count" semantic conventions. It represents a number of frame + // renders that experienced jank. + // + // Type: int + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: 9, 42 + // Note: Depending on platform limitations, the value provided MAY be + // approximation. + AppJankFrameCountKey = attribute.Key("app.jank.frame_count") + + // AppJankPeriodKey is the attribute Key conforming to the "app.jank.period" + // semantic conventions. It represents the time period, in seconds, for which + // this jank is being reported. + // + // Type: double + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: 1.0, 5.0, 10.24 + AppJankPeriodKey = attribute.Key("app.jank.period") + + // AppJankThresholdKey is the attribute Key conforming to the + // "app.jank.threshold" semantic conventions. It represents the minimum + // rendering threshold for this jank, in seconds. + // + // Type: double + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: 0.016, 0.7, 1.024 + AppJankThresholdKey = attribute.Key("app.jank.threshold") + // AppScreenCoordinateXKey is the attribute Key conforming to the // "app.screen.coordinate.x" semantic conventions. It represents the x // (horizontal) coordinate of a screen coordinate, in screen pixels. @@ -164,6 +213,13 @@ const ( AppWidgetNameKey = attribute.Key("app.widget.name") ) +// AppBuildID returns an attribute KeyValue conforming to the "app.build_id" +// semantic conventions. It represents the unique identifier for a particular +// build or compilation of the application. +func AppBuildID(val string) attribute.KeyValue { + return AppBuildIDKey.String(val) +} + // AppInstallationID returns an attribute KeyValue conforming to the // "app.installation.id" semantic conventions. It represents a unique identifier // representing the installation of an application on a specific device. @@ -171,6 +227,27 @@ func AppInstallationID(val string) attribute.KeyValue { return AppInstallationIDKey.String(val) } +// AppJankFrameCount returns an attribute KeyValue conforming to the +// "app.jank.frame_count" semantic conventions. It represents a number of frame +// renders that experienced jank. +func AppJankFrameCount(val int) attribute.KeyValue { + return AppJankFrameCountKey.Int(val) +} + +// AppJankPeriod returns an attribute KeyValue conforming to the +// "app.jank.period" semantic conventions. It represents the time period, in +// seconds, for which this jank is being reported. +func AppJankPeriod(val float64) attribute.KeyValue { + return AppJankPeriodKey.Float64(val) +} + +// AppJankThreshold returns an attribute KeyValue conforming to the +// "app.jank.threshold" semantic conventions. It represents the minimum rendering +// threshold for this jank, in seconds. +func AppJankThreshold(val float64) attribute.KeyValue { + return AppJankThresholdKey.Float64(val) +} + // AppScreenCoordinateX returns an attribute KeyValue conforming to the // "app.screen.coordinate.x" semantic conventions. It represents the x // (horizontal) coordinate of a screen coordinate, in screen pixels. @@ -1525,59 +1602,14 @@ func AWSStepFunctionsStateMachineARN(val string) attribute.KeyValue { // Enum values for aws.ecs.launchtype var ( - // ec2 + // Amazon EC2 // Stability: development AWSECSLaunchtypeEC2 = AWSECSLaunchtypeKey.String("ec2") - // fargate + // Amazon 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" @@ -1665,6 +1697,31 @@ const ( // // Examples: 1000, 1002 AzureCosmosDBResponseSubStatusCodeKey = attribute.Key("azure.cosmosdb.response.sub_status_code") + + // AzureResourceProviderNamespaceKey is the attribute Key conforming to the + // "azure.resource_provider.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 + AzureResourceProviderNamespaceKey = attribute.Key("azure.resource_provider.namespace") + + // AzureServiceRequestIDKey is the attribute Key conforming to the + // "azure.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" + AzureServiceRequestIDKey = attribute.Key("azure.service.request.id") ) // AzureClientID returns an attribute KeyValue conforming to the @@ -1705,6 +1762,23 @@ func AzureCosmosDBResponseSubStatusCode(val int) attribute.KeyValue { return AzureCosmosDBResponseSubStatusCodeKey.Int(val) } +// AzureResourceProviderNamespace returns an attribute KeyValue conforming to the +// "azure.resource_provider.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 AzureResourceProviderNamespace(val string) attribute.KeyValue { + return AzureResourceProviderNamespaceKey.String(val) +} + +// AzureServiceRequestID returns an attribute KeyValue conforming to the +// "azure.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 AzureServiceRequestID(val string) attribute.KeyValue { + return AzureServiceRequestIDKey.String(val) +} + // Enum values for azure.cosmosdb.connection.mode var ( // Gateway (HTTP) connection. @@ -1717,19 +1791,19 @@ var ( // Enum values for azure.cosmosdb.consistency.level var ( - // strong + // Strong // Stability: development AzureCosmosDBConsistencyLevelStrong = AzureCosmosDBConsistencyLevelKey.String("Strong") - // bounded_staleness + // Bounded Staleness // Stability: development AzureCosmosDBConsistencyLevelBoundedStaleness = AzureCosmosDBConsistencyLevelKey.String("BoundedStaleness") - // session + // Session // Stability: development AzureCosmosDBConsistencyLevelSession = AzureCosmosDBConsistencyLevelKey.String("Session") - // eventual + // Eventual // Stability: development AzureCosmosDBConsistencyLevelEventual = AzureCosmosDBConsistencyLevelKey.String("Eventual") - // consistent_prefix + // Consistent Prefix // Stability: development AzureCosmosDBConsistencyLevelConsistentPrefix = AzureCosmosDBConsistencyLevelKey.String("ConsistentPrefix") ) @@ -1944,37 +2018,37 @@ func CassandraSpeculativeExecutionCount(val int) attribute.KeyValue { // Enum values for cassandra.consistency.level var ( - // all + // All // Stability: development CassandraConsistencyLevelAll = CassandraConsistencyLevelKey.String("all") - // each_quorum + // Each Quorum // Stability: development CassandraConsistencyLevelEachQuorum = CassandraConsistencyLevelKey.String("each_quorum") - // quorum + // Quorum // Stability: development CassandraConsistencyLevelQuorum = CassandraConsistencyLevelKey.String("quorum") - // local_quorum + // Local Quorum // Stability: development CassandraConsistencyLevelLocalQuorum = CassandraConsistencyLevelKey.String("local_quorum") - // one + // One // Stability: development CassandraConsistencyLevelOne = CassandraConsistencyLevelKey.String("one") - // two + // Two // Stability: development CassandraConsistencyLevelTwo = CassandraConsistencyLevelKey.String("two") - // three + // Three // Stability: development CassandraConsistencyLevelThree = CassandraConsistencyLevelKey.String("three") - // local_one + // Local One // Stability: development CassandraConsistencyLevelLocalOne = CassandraConsistencyLevelKey.String("local_one") - // any + // Any // Stability: development CassandraConsistencyLevelAny = CassandraConsistencyLevelKey.String("any") - // serial + // Serial // Stability: development CassandraConsistencyLevelSerial = CassandraConsistencyLevelKey.String("serial") - // local_serial + // Local Serial // Stability: development CassandraConsistencyLevelLocalSerial = CassandraConsistencyLevelKey.String("local_serial") ) @@ -2527,7 +2601,7 @@ const ( // [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 + // [Fully Qualified Resource ID]: https://learn.microsoft.com/rest/api/resources/resources/get-by-id CloudResourceIDKey = attribute.Key("cloud.resource_id") ) @@ -2604,25 +2678,25 @@ var ( CloudPlatformAWSOpenShift = CloudPlatformKey.String("aws_openshift") // Azure Virtual Machines // Stability: development - CloudPlatformAzureVM = CloudPlatformKey.String("azure_vm") + CloudPlatformAzureVM = CloudPlatformKey.String("azure.vm") // Azure Container Apps // Stability: development - CloudPlatformAzureContainerApps = CloudPlatformKey.String("azure_container_apps") + CloudPlatformAzureContainerApps = CloudPlatformKey.String("azure.container_apps") // Azure Container Instances // Stability: development - CloudPlatformAzureContainerInstances = CloudPlatformKey.String("azure_container_instances") + CloudPlatformAzureContainerInstances = CloudPlatformKey.String("azure.container_instances") // Azure Kubernetes Service // Stability: development - CloudPlatformAzureAKS = CloudPlatformKey.String("azure_aks") + CloudPlatformAzureAKS = CloudPlatformKey.String("azure.aks") // Azure Functions // Stability: development - CloudPlatformAzureFunctions = CloudPlatformKey.String("azure_functions") + CloudPlatformAzureFunctions = CloudPlatformKey.String("azure.functions") // Azure App Service // Stability: development - CloudPlatformAzureAppService = CloudPlatformKey.String("azure_app_service") + CloudPlatformAzureAppService = CloudPlatformKey.String("azure.app_service") // Azure Red Hat OpenShift // Stability: development - CloudPlatformAzureOpenShift = CloudPlatformKey.String("azure_openshift") + CloudPlatformAzureOpenShift = CloudPlatformKey.String("azure.openshift") // Google Bare Metal Solution (BMS) // Stability: development CloudPlatformGCPBareMetalSolution = CloudPlatformKey.String("gcp_bare_metal_solution") @@ -3374,16 +3448,40 @@ const ( // 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. + // ContainerRuntimeDescriptionKey is the attribute Key conforming to the + // "container.runtime.description" semantic conventions. It represents a + // description about the runtime which could include, for example details about + // the CRI/API version being used or other customisations. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "docker://19.3.1 - CRI: 1.22.0" + ContainerRuntimeDescriptionKey = attribute.Key("container.runtime.description") + + // ContainerRuntimeNameKey is the attribute Key conforming to the + // "container.runtime.name" 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") + ContainerRuntimeNameKey = attribute.Key("container.runtime.name") + + // ContainerRuntimeVersionKey is the attribute Key conforming to the + // "container.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: 1.0.0 + ContainerRuntimeVersionKey = attribute.Key("container.runtime.version") ) // ContainerCommand returns an attribute KeyValue conforming to the @@ -3467,6 +3565,13 @@ func ContainerImageTags(val ...string) attribute.KeyValue { return ContainerImageTagsKey.StringSlice(val) } +// ContainerLabel returns an attribute KeyValue conforming to the +// "container.label" semantic conventions. It represents the container labels, +// `` being the label name, the value being the label value. +func ContainerLabel(key string, val string) attribute.KeyValue { + return attribute.String("container.label."+key, val) +} + // ContainerName returns an attribute KeyValue conforming to the "container.name" // semantic conventions. It represents the container name used by container // runtime. @@ -3474,11 +3579,26 @@ 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) +// ContainerRuntimeDescription returns an attribute KeyValue conforming to the +// "container.runtime.description" semantic conventions. It represents a +// description about the runtime which could include, for example details about +// the CRI/API version being used or other customisations. +func ContainerRuntimeDescription(val string) attribute.KeyValue { + return ContainerRuntimeDescriptionKey.String(val) +} + +// ContainerRuntimeName returns an attribute KeyValue conforming to the +// "container.runtime.name" semantic conventions. It represents the container +// runtime managing this container. +func ContainerRuntimeName(val string) attribute.KeyValue { + return ContainerRuntimeNameKey.String(val) +} + +// ContainerRuntimeVersion returns an attribute KeyValue conforming to the +// "container.runtime.version" semantic conventions. It represents the version of +// the runtime of this process, as returned by the runtime without modification. +func ContainerRuntimeVersion(val string) attribute.KeyValue { + return ContainerRuntimeVersionKey.String(val) } // Namespace: cpu @@ -3514,28 +3634,28 @@ func CPULogicalNumber(val int) attribute.KeyValue { // Enum values for cpu.mode var ( - // user + // User // Stability: development CPUModeUser = CPUModeKey.String("user") - // system + // System // Stability: development CPUModeSystem = CPUModeKey.String("system") - // nice + // Nice // Stability: development CPUModeNice = CPUModeKey.String("nice") - // idle + // Idle // Stability: development CPUModeIdle = CPUModeKey.String("idle") - // iowait + // IO Wait // Stability: development CPUModeIOWait = CPUModeKey.String("iowait") - // interrupt + // Interrupt // Stability: development CPUModeInterrupt = CPUModeKey.String("interrupt") - // steal + // Steal // Stability: development CPUModeSteal = CPUModeKey.String("steal") - // kernel + // Kernel // Stability: development CPUModeKernel = CPUModeKey.String("kernel") ) @@ -3794,6 +3914,22 @@ func DBOperationName(val string) attribute.KeyValue { return DBOperationNameKey.String(val) } +// DBOperationParameter returns an attribute KeyValue conforming to the +// "db.operation.parameter" semantic conventions. It represents a database +// operation parameter, with `` being the parameter name, and the attribute +// value being a string representation of the parameter value. +func DBOperationParameter(key string, val string) attribute.KeyValue { + return attribute.String("db.operation.parameter."+key, val) +} + +// DBQueryParameter returns an attribute KeyValue conforming to the +// "db.query.parameter" semantic conventions. It represents a database query +// parameter, with `` being the parameter name, and the attribute value +// being a string representation of the parameter value. +func DBQueryParameter(key string, val string) attribute.KeyValue { + return attribute.String("db.query.parameter."+key, val) +} + // DBQuerySummary returns an attribute KeyValue conforming to the // "db.query.summary" semantic conventions. It represents the low cardinality // summary of a database query. @@ -4194,8 +4330,8 @@ const ( // Hardware IDs (e.g. vendor-specific serial number, IMEI or MAC address) MAY be // used as values. // - // More information about Android identifier best practices can be found [here] - // . + // More information about Android identifier best practices can be found in the + // [Android user data IDs guide]. // // > [!WARNING]> This attribute may contain sensitive (PII) information. Caution // > should be taken when storing personal data or anything which can identify a @@ -4210,7 +4346,7 @@ const ( // > opt-in feature.> See [`app.installation.id`]> for a more // > privacy-preserving alternative. // - // [here]: https://developer.android.com/training/articles/user-data-ids + // [Android user data IDs guide]: https://developer.android.com/training/articles/user-data-ids // [`app.installation.id`]: /docs/registry/attributes/app.md#app-installation-id DeviceIDKey = attribute.Key("device.id") @@ -4308,6 +4444,17 @@ var ( // Namespace: dns const ( + // DNSAnswersKey is the attribute Key conforming to the "dns.answers" semantic + // conventions. It represents the list of IPv4 or IPv6 addresses resolved during + // DNS lookup. + // + // Type: string[] + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "10.0.0.1", "2001:0db8:85a3:0000:0000:8a2e:0370:7334" + DNSAnswersKey = attribute.Key("dns.answers") + // DNSQuestionNameKey is the attribute Key conforming to the "dns.question.name" // semantic conventions. It represents the name being queried. // @@ -4323,6 +4470,13 @@ const ( DNSQuestionNameKey = attribute.Key("dns.question.name") ) +// DNSAnswers returns an attribute KeyValue conforming to the "dns.answers" +// semantic conventions. It represents the list of IPv4 or IPv6 addresses +// resolved during DNS lookup. +func DNSAnswers(val ...string) attribute.KeyValue { + return DNSAnswersKey.StringSlice(val) +} + // DNSQuestionName returns an attribute KeyValue conforming to the // "dns.question.name" semantic conventions. It represents the name being // queried. @@ -4941,7 +5095,7 @@ const ( // // Type: string // RequirementLevel: Recommended - // Stability: Development + // Stability: Release_Candidate // // Examples: "5157782b-2203-4c80-a857-dbbd5e7761db" FeatureFlagContextIDKey = attribute.Key("feature_flag.context.id") @@ -4951,7 +5105,7 @@ const ( // // Type: string // RequirementLevel: Recommended - // Stability: Development + // Stability: Release_Candidate // // Examples: "logo-color" FeatureFlagKeyKey = attribute.Key("feature_flag.key") @@ -4962,7 +5116,7 @@ const ( // // Type: string // RequirementLevel: Recommended - // Stability: Development + // Stability: Release_Candidate // // Examples: "Flag Manager" FeatureFlagProviderNameKey = attribute.Key("feature_flag.provider.name") @@ -4973,7 +5127,7 @@ const ( // // Type: Enum // RequirementLevel: Recommended - // Stability: Development + // Stability: Release_Candidate // // Examples: "static", "targeting_match", "error", "default" FeatureFlagResultReasonKey = attribute.Key("feature_flag.result.reason") @@ -4984,7 +5138,7 @@ const ( // // Type: any // RequirementLevel: Recommended - // Stability: Development + // Stability: Release_Candidate // // Examples: "#ff0000", true, 3 // Note: With some feature flag providers, feature flag results can be quite @@ -5004,7 +5158,7 @@ const ( // // Type: string // RequirementLevel: Recommended - // Stability: Development + // Stability: Release_Candidate // // Examples: "red", "true", "on" // Note: A semantic identifier, commonly referred to as a variant, provides a @@ -5020,7 +5174,7 @@ const ( // // Type: string // RequirementLevel: Recommended - // Stability: Development + // Stability: Release_Candidate // // Examples: "proj-1", "ab98sgs", "service1/dev" // @@ -5034,7 +5188,7 @@ const ( // // Type: string // RequirementLevel: Recommended - // Stability: Development + // Stability: Release_Candidate // // Examples: "1", "01ABCDEF" FeatureFlagVersionKey = attribute.Key("feature_flag.version") @@ -5088,34 +5242,34 @@ func FeatureFlagVersion(val string) attribute.KeyValue { // Enum values for feature_flag.result.reason var ( // The resolved value is static (no dynamic evaluation). - // Stability: development + // Stability: release_candidate FeatureFlagResultReasonStatic = FeatureFlagResultReasonKey.String("static") // The resolved value fell back to a pre-configured value (no dynamic evaluation // occurred or dynamic evaluation yielded no result). - // Stability: development + // Stability: release_candidate FeatureFlagResultReasonDefault = FeatureFlagResultReasonKey.String("default") // The resolved value was the result of a dynamic evaluation, such as a rule or // specific user-targeting. - // Stability: development + // Stability: release_candidate FeatureFlagResultReasonTargetingMatch = FeatureFlagResultReasonKey.String("targeting_match") // The resolved value was the result of pseudorandom assignment. - // Stability: development + // Stability: release_candidate FeatureFlagResultReasonSplit = FeatureFlagResultReasonKey.String("split") // The resolved value was retrieved from cache. - // Stability: development + // Stability: release_candidate FeatureFlagResultReasonCached = FeatureFlagResultReasonKey.String("cached") // The resolved value was the result of the flag being disabled in the // management system. - // Stability: development + // Stability: release_candidate FeatureFlagResultReasonDisabled = FeatureFlagResultReasonKey.String("disabled") // The reason for the resolved value could not be determined. - // Stability: development + // Stability: release_candidate FeatureFlagResultReasonUnknown = FeatureFlagResultReasonKey.String("unknown") // The resolved value is non-authoritative or possibly out of date - // Stability: development + // Stability: release_candidate FeatureFlagResultReasonStale = FeatureFlagResultReasonKey.String("stale") // The resolved value was the result of an error. - // Stability: development + // Stability: release_candidate FeatureFlagResultReasonError = FeatureFlagResultReasonKey.String("error") ) @@ -5208,7 +5362,7 @@ const ( // RequirementLevel: Recommended // Stability: Development // - // Examples: "Zone.Identifer" + // Examples: "Zone.Identifier" // 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. @@ -5863,39 +6017,41 @@ const ( // `db.*`, to further identify and describe the data source. GenAIDataSourceIDKey = attribute.Key("gen_ai.data_source.id") - // 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. + // GenAIInputMessagesKey is the attribute Key conforming to the + // "gen_ai.input.messages" semantic conventions. It represents the chat history + // provided to the model as an input. // - // Type: Enum + // Type: any // 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. + // Examples: "[\n {\n "role": "user",\n "parts": [\n {\n "type": "text",\n + // "content": "Weather in Paris?"\n }\n ]\n },\n {\n "role": "assistant",\n + // "parts": [\n {\n "type": "tool_call",\n "id": + // "call_VSPygqKTWdrhaFErNvMV18Yl",\n "name": "get_weather",\n "arguments": {\n + // "location": "Paris"\n }\n }\n ]\n },\n {\n "role": "tool",\n "parts": [\n {\n + // "type": "tool_call_response",\n "id": " call_VSPygqKTWdrhaFErNvMV18Yl",\n + // "result": "rainy, 57°F"\n }\n ]\n }\n]\n" + // Note: Instrumentations MUST follow [Input messages JSON schema]. + // When the attribute is recorded on events, it MUST be recorded in structured + // form. When recorded on spans, it MAY be recorded as a JSON string if + // structured + // format is not supported and SHOULD be recorded in structured form otherwise. // - // Type: string - // RequirementLevel: Recommended - // Stability: Development + // Messages MUST be provided in the order they were sent to the model. + // Instrumentations MAY provide a way for users to filter or truncate + // input messages. // - // 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. + // > [!Warning] + // > This attribute is likely to contain sensitive information including + // > user/PII data. // - // Type: string - // RequirementLevel: Recommended - // Stability: Development + // See [Recording content on attributes] + // section for more details. // - // Examples: "fp_44709d6fcb" - GenAIOpenAIResponseSystemFingerprintKey = attribute.Key("gen_ai.openai.response.system_fingerprint") + // [Input messages JSON schema]: /docs/gen-ai/gen-ai-input-messages.json + // [Recording content on attributes]: /docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes + GenAIInputMessagesKey = attribute.Key("gen_ai.input.messages") // GenAIOperationNameKey is the attribute Key conforming to the // "gen_ai.operation.name" semantic conventions. It represents the name of the @@ -5913,6 +6069,44 @@ const ( // libraries SHOULD use applicable predefined value. GenAIOperationNameKey = attribute.Key("gen_ai.operation.name") + // GenAIOutputMessagesKey is the attribute Key conforming to the + // "gen_ai.output.messages" semantic conventions. It represents the messages + // returned by the model where each message represents a specific model response + // (choice, candidate). + // + // Type: any + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "[\n {\n "role": "assistant",\n "parts": [\n {\n "type": "text",\n + // "content": "The weather in Paris is currently rainy with a temperature of + // 57°F."\n }\n ],\n "finish_reason": "stop"\n }\n]\n" + // Note: Instrumentations MUST follow [Output messages JSON schema] + // + // Each message represents a single output choice/candidate generated by + // the model. Each message corresponds to exactly one generation + // (choice/candidate) and vice versa - one choice cannot be split across + // multiple messages or one message cannot contain parts from multiple choices. + // + // When the attribute is recorded on events, it MUST be recorded in structured + // form. When recorded on spans, it MAY be recorded as a JSON string if + // structured + // format is not supported and SHOULD be recorded in structured form otherwise. + // + // Instrumentations MAY provide a way for users to filter or truncate + // output messages. + // + // > [!Warning] + // > This attribute is likely to contain sensitive information including + // > user/PII data. + // + // See [Recording content on attributes] + // section for more details. + // + // [Output messages JSON schema]: /docs/gen-ai/gen-ai-output-messages.json + // [Recording content on attributes]: /docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes + GenAIOutputMessagesKey = attribute.Key("gen_ai.output.messages") + // GenAIOutputTypeKey is the attribute Key conforming to the // "gen_ai.output.type" semantic conventions. It represents the represents the // content type requested by the client. @@ -5931,6 +6125,35 @@ const ( // `gen_ai.output.{type}.*` attributes. GenAIOutputTypeKey = attribute.Key("gen_ai.output.type") + // GenAIProviderNameKey is the attribute Key conforming to the + // "gen_ai.provider.name" semantic conventions. It represents the Generative AI + // provider as identified by the client or server instrumentation. + // + // Type: Enum + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: + // Note: The attribute SHOULD be set based on the instrumentation's best + // knowledge and may differ from the actual model provider. + // + // Multiple providers, including Azure OpenAI, Gemini, and AI hosting platforms + // are accessible using the OpenAI REST API and corresponding client libraries, + // but may proxy or host models from different providers. + // + // The `gen_ai.request.model`, `gen_ai.response.model`, and `server.address` + // attributes may help identify the actual system in use. + // + // The `gen_ai.provider.name` attribute acts as a discriminator that + // identifies the GenAI telemetry format flavor specific to that provider + // within GenAI semantic conventions. + // It SHOULD be set consistently with provider-specific attributes and signals. + // For example, GenAI spans, metrics, and events related to AWS Bedrock + // should have the `gen_ai.provider.name` set to `aws.bedrock` and include + // applicable `aws.bedrock.*` attributes and are not expected to include + // `openai.*` attributes. + GenAIProviderNameKey = attribute.Key("gen_ai.provider.name") + // GenAIRequestChoiceCountKey is the attribute Key conforming to the // "gen_ai.request.choice.count" semantic conventions. It represents the target // number of candidate completions to return. @@ -6088,31 +6311,44 @@ const ( // 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. + // GenAISystemInstructionsKey is the attribute Key conforming to the + // "gen_ai.system_instructions" semantic conventions. It represents the system + // message or instructions provided to the GenAI model separately from the chat + // history. // - // Type: Enum + // Type: any // 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. + // Examples: "[\n {\n "type": "text",\n "content": "You are an Agent that greet + // users, always use greetings tool to respond"\n }\n]\n", "[\n {\n "type": + // "text",\n "content": "You are a language translator."\n },\n {\n "type": + // "text",\n "content": "Your mission is to translate text in English to + // French."\n }\n]\n" + // Note: This attribute SHOULD be used when the corresponding provider or API + // allows to provide system instructions or messages separately from the + // chat history. // - // 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`. + // Instructions that are part of the chat history SHOULD be recorded in + // `gen_ai.input.messages` attribute instead. // - // 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") + // Instrumentations MUST follow [System instructions JSON schema]. + // + // When recorded on spans, it MAY be recorded as a JSON string if structured + // format is not supported and SHOULD be recorded in structured form otherwise. + // + // Instrumentations MAY provide a way for users to filter or truncate + // system instructions. + // + // > [!Warning] + // > This attribute may contain sensitive information. + // + // See [Recording content on attributes] + // section for more details. + // + // [System instructions JSON schema]: /docs/gen-ai/gen-ai-system-instructions.json + // [Recording content on attributes]: /docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes + GenAISystemInstructionsKey = attribute.Key("gen_ai.system_instructions") // GenAITokenTypeKey is the attribute Key conforming to the "gen_ai.token.type" // semantic conventions. It represents the type of token being counted. @@ -6237,21 +6473,6 @@ func GenAIDataSourceID(val string) attribute.KeyValue { return GenAIDataSourceIDKey.String(val) } -// 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) -} - // GenAIRequestChoiceCount returns an attribute KeyValue conforming to the // "gen_ai.request.choice.count" semantic conventions. It represents the target // number of candidate completions to return. @@ -6393,16 +6614,6 @@ func GenAIUsageOutputTokens(val int) attribute.KeyValue { return GenAIUsageOutputTokensKey.Int(val) } -// 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] @@ -6452,57 +6663,79 @@ var ( GenAIOutputTypeSpeech = GenAIOutputTypeKey.String("speech") ) -// Enum values for gen_ai.system +// Enum values for gen_ai.provider.name var ( - // OpenAI + // [OpenAI] // Stability: development - GenAISystemOpenAI = GenAISystemKey.String("openai") + // + // [OpenAI]: https://openai.com/ + GenAIProviderNameOpenAI = GenAIProviderNameKey.String("openai") // Any Google generative AI endpoint // Stability: development - GenAISystemGCPGenAI = GenAISystemKey.String("gcp.gen_ai") - // Vertex AI + GenAIProviderNameGCPGenAI = GenAIProviderNameKey.String("gcp.gen_ai") + // [Vertex AI] // Stability: development - GenAISystemGCPVertexAI = GenAISystemKey.String("gcp.vertex_ai") - // Gemini + // + // [Vertex AI]: https://cloud.google.com/vertex-ai + GenAIProviderNameGCPVertexAI = GenAIProviderNameKey.String("gcp.vertex_ai") + // [Gemini] // Stability: development - GenAISystemGCPGemini = GenAISystemKey.String("gcp.gemini") - // Deprecated: Use 'gcp.vertex_ai' instead. - GenAISystemVertexAI = GenAISystemKey.String("vertex_ai") - // Deprecated: Use 'gcp.gemini' instead. - GenAISystemGemini = GenAISystemKey.String("gemini") - // Anthropic + // + // [Gemini]: https://cloud.google.com/products/gemini + GenAIProviderNameGCPGemini = GenAIProviderNameKey.String("gcp.gemini") + // [Anthropic] // Stability: development - GenAISystemAnthropic = GenAISystemKey.String("anthropic") - // Cohere + // + // [Anthropic]: https://www.anthropic.com/ + GenAIProviderNameAnthropic = GenAIProviderNameKey.String("anthropic") + // [Cohere] // Stability: development - GenAISystemCohere = GenAISystemKey.String("cohere") + // + // [Cohere]: https://cohere.com/ + GenAIProviderNameCohere = GenAIProviderNameKey.String("cohere") // Azure AI Inference // Stability: development - GenAISystemAzAIInference = GenAISystemKey.String("az.ai.inference") - // Azure OpenAI + GenAIProviderNameAzureAIInference = GenAIProviderNameKey.String("azure.ai.inference") + // [Azure OpenAI] // Stability: development - GenAISystemAzAIOpenAI = GenAISystemKey.String("az.ai.openai") - // IBM Watsonx AI + // + // [Azure OpenAI]: https://azure.microsoft.com/products/ai-services/openai-service/ + GenAIProviderNameAzureAIOpenAI = GenAIProviderNameKey.String("azure.ai.openai") + // [IBM Watsonx AI] // Stability: development - GenAISystemIBMWatsonxAI = GenAISystemKey.String("ibm.watsonx.ai") - // AWS Bedrock + // + // [IBM Watsonx AI]: https://www.ibm.com/products/watsonx-ai + GenAIProviderNameIBMWatsonxAI = GenAIProviderNameKey.String("ibm.watsonx.ai") + // [AWS Bedrock] // Stability: development - GenAISystemAWSBedrock = GenAISystemKey.String("aws.bedrock") - // Perplexity + // + // [AWS Bedrock]: https://aws.amazon.com/bedrock + GenAIProviderNameAWSBedrock = GenAIProviderNameKey.String("aws.bedrock") + // [Perplexity] // Stability: development - GenAISystemPerplexity = GenAISystemKey.String("perplexity") - // xAI + // + // [Perplexity]: https://www.perplexity.ai/ + GenAIProviderNamePerplexity = GenAIProviderNameKey.String("perplexity") + // [xAI] // Stability: development - GenAISystemXai = GenAISystemKey.String("xai") - // DeepSeek + // + // [xAI]: https://x.ai/ + GenAIProviderNameXAI = GenAIProviderNameKey.String("x_ai") + // [DeepSeek] // Stability: development - GenAISystemDeepseek = GenAISystemKey.String("deepseek") - // Groq + // + // [DeepSeek]: https://www.deepseek.com/ + GenAIProviderNameDeepseek = GenAIProviderNameKey.String("deepseek") + // [Groq] // Stability: development - GenAISystemGroq = GenAISystemKey.String("groq") - // Mistral AI + // + // [Groq]: https://groq.com/ + GenAIProviderNameGroq = GenAIProviderNameKey.String("groq") + // [Mistral AI] // Stability: development - GenAISystemMistralAI = GenAISystemKey.String("mistral_ai") + // + // [Mistral AI]: https://mistral.ai/ + GenAIProviderNameMistralAI = GenAIProviderNameKey.String("mistral_ai") ) // Enum values for gen_ai.token.type @@ -6510,8 +6743,6 @@ var ( // Input tokens (prompt, input, etc.) // Stability: development GenAITokenTypeInput = GenAITokenTypeKey.String("input") - // Deprecated: Replaced by `output`. - GenAITokenTypeCompletion = GenAITokenTypeKey.String("output") // Output tokens (completion, response, etc.) // Stability: development GenAITokenTypeOutput = GenAITokenTypeKey.String("output") @@ -7312,6 +7543,14 @@ func HTTPRequestBodySize(val int) attribute.KeyValue { return HTTPRequestBodySizeKey.Int(val) } +// HTTPRequestHeader returns an attribute KeyValue conforming to the +// "http.request.header" semantic conventions. It represents the HTTP request +// headers, `` being the normalized HTTP Header name (lowercase), the value +// being the header values. +func HTTPRequestHeader(key string, val ...string) attribute.KeyValue { + return attribute.StringSlice("http.request.header."+key, 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. @@ -7347,6 +7586,14 @@ func HTTPResponseBodySize(val int) attribute.KeyValue { return HTTPResponseBodySizeKey.Int(val) } +// HTTPResponseHeader returns an attribute KeyValue conforming to the +// "http.response.header" semantic conventions. It represents the HTTP response +// headers, `` being the normalized HTTP Header name (lowercase), the value +// being the header values. +func HTTPResponseHeader(key string, val ...string) attribute.KeyValue { + return attribute.StringSlice("http.response.header."+key, 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 @@ -7418,64 +7665,352 @@ var ( // 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. + // HwBatteryCapacityKey is the attribute Key conforming to the + // "hw.battery.capacity" semantic conventions. It represents the design capacity + // in Watts-hours or Amper-hours. // // Type: string // RequirementLevel: Recommended // Stability: Development // - // Examples: "win32battery_battery_testsysa33_1" - HwIDKey = attribute.Key("hw.id") + // Examples: "9.3Ah", "50Wh" + HwBatteryCapacityKey = attribute.Key("hw.battery.capacity") - // HwNameKey is the attribute Key conforming to the "hw.name" semantic - // conventions. It represents an easily-recognizable name for the hardware + // HwBatteryChemistryKey is the attribute Key conforming to the + // "hw.battery.chemistry" semantic conventions. It represents the battery + // [chemistry], e.g. Lithium-Ion, Nickel-Cadmium, etc. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "Li-ion", "NiMH" + // + // [chemistry]: https://schemas.dmtf.org/wbem/cim-html/2.31.0/CIM_Battery.html + HwBatteryChemistryKey = attribute.Key("hw.battery.chemistry") + + // HwBatteryStateKey is the attribute Key conforming to the "hw.battery.state" + // semantic conventions. It represents the current state of the battery. + // + // Type: Enum + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: + HwBatteryStateKey = attribute.Key("hw.battery.state") + + // HwBiosVersionKey is the attribute Key conforming to the "hw.bios_version" + // semantic conventions. It represents the BIOS version of the hardware // component. // // Type: string // RequirementLevel: Recommended // Stability: Development // - // Examples: "eth0" - HwNameKey = attribute.Key("hw.name") + // Examples: "1.2.3" + HwBiosVersionKey = attribute.Key("hw.bios_version") - // 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). + // HwDriverVersionKey is the attribute Key conforming to the "hw.driver_version" + // semantic conventions. It represents the driver version for the hardware + // component. // // Type: string // RequirementLevel: Recommended // Stability: Development // - // Examples: "dellStorage_perc_0" - HwParentKey = attribute.Key("hw.parent") + // Examples: "10.2.1-3" + HwDriverVersionKey = attribute.Key("hw.driver_version") - // HwStateKey is the attribute Key conforming to the "hw.state" semantic - // conventions. It represents the current state of the component. + // HwEnclosureTypeKey is the attribute Key conforming to the "hw.enclosure.type" + // semantic conventions. It represents the type of the enclosure (useful for + // modular systems). // - // Type: Enum + // Type: string // RequirementLevel: Recommended // Stability: Development // - // Examples: - HwStateKey = attribute.Key("hw.state") + // Examples: "Computer", "Storage", "Switch" + HwEnclosureTypeKey = attribute.Key("hw.enclosure.type") - // HwTypeKey is the attribute Key conforming to the "hw.type" semantic - // conventions. It represents the type of the component. + // HwFirmwareVersionKey is the attribute Key conforming to the + // "hw.firmware_version" semantic conventions. It represents the firmware + // version of the hardware component. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "2.0.1" + HwFirmwareVersionKey = attribute.Key("hw.firmware_version") + + // HwGpuTaskKey is the attribute Key conforming to the "hw.gpu.task" semantic + // conventions. It represents the type of task the GPU is performing. // // Type: Enum // RequirementLevel: Recommended // Stability: Development // // Examples: - // Note: Describes the category of the hardware component for which `hw.state` + HwGpuTaskKey = attribute.Key("hw.gpu.task") + + // 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") + + // HwLimitTypeKey is the attribute Key conforming to the "hw.limit_type" + // semantic conventions. It represents the type of limit for hardware + // components. + // + // Type: Enum + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: + HwLimitTypeKey = attribute.Key("hw.limit_type") + + // HwLogicalDiskRaidLevelKey is the attribute Key conforming to the + // "hw.logical_disk.raid_level" semantic conventions. It represents the RAID + // Level of the logical disk. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "RAID0+1", "RAID5", "RAID10" + HwLogicalDiskRaidLevelKey = attribute.Key("hw.logical_disk.raid_level") + + // HwLogicalDiskStateKey is the attribute Key conforming to the + // "hw.logical_disk.state" semantic conventions. It represents the state of the + // logical disk space usage. + // + // Type: Enum + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: + HwLogicalDiskStateKey = attribute.Key("hw.logical_disk.state") + + // HwMemoryTypeKey is the attribute Key conforming to the "hw.memory.type" + // semantic conventions. It represents the type of the memory module. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "DDR4", "DDR5", "LPDDR5" + HwMemoryTypeKey = attribute.Key("hw.memory.type") + + // HwModelKey is the attribute Key conforming to the "hw.model" semantic + // conventions. It represents the descriptive model name of the hardware + // component. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "PERC H740P", "Intel(R) Core(TM) i7-10700K", "Dell XPS 15 Battery" + HwModelKey = attribute.Key("hw.model") + + // 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") + + // HwNetworkLogicalAddressesKey is the attribute Key conforming to the + // "hw.network.logical_addresses" semantic conventions. It represents the + // logical addresses of the adapter (e.g. IP address, or WWPN). + // + // Type: string[] + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "172.16.8.21", "57.11.193.42" + HwNetworkLogicalAddressesKey = attribute.Key("hw.network.logical_addresses") + + // HwNetworkPhysicalAddressKey is the attribute Key conforming to the + // "hw.network.physical_address" semantic conventions. It represents the + // physical address of the adapter (e.g. MAC address, or WWNN). + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "00-90-F5-E9-7B-36" + HwNetworkPhysicalAddressKey = attribute.Key("hw.network.physical_address") + + // 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") + + // HwPhysicalDiskSmartAttributeKey is the attribute Key conforming to the + // "hw.physical_disk.smart_attribute" semantic conventions. It represents the + // [S.M.A.R.T.] (Self-Monitoring, Analysis, and Reporting Technology) attribute + // of the physical disk. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "Spin Retry Count", "Seek Error Rate", "Raw Read Error Rate" + // + // [S.M.A.R.T.]: https://wikipedia.org/wiki/S.M.A.R.T. + HwPhysicalDiskSmartAttributeKey = attribute.Key("hw.physical_disk.smart_attribute") + + // HwPhysicalDiskStateKey is the attribute Key conforming to the + // "hw.physical_disk.state" semantic conventions. It represents the state of the + // physical disk endurance utilization. + // + // Type: Enum + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: + HwPhysicalDiskStateKey = attribute.Key("hw.physical_disk.state") + + // HwPhysicalDiskTypeKey is the attribute Key conforming to the + // "hw.physical_disk.type" semantic conventions. It represents the type of the + // physical disk. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "HDD", "SSD", "10K" + HwPhysicalDiskTypeKey = attribute.Key("hw.physical_disk.type") + + // HwSensorLocationKey is the attribute Key conforming to the + // "hw.sensor_location" semantic conventions. It represents the location of the + // sensor. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "cpu0", "ps1", "INLET", "CPU0_DIE", "AMBIENT", "MOTHERBOARD", "PS0 + // V3_3", "MAIN_12V", "CPU_VCORE" + HwSensorLocationKey = attribute.Key("hw.sensor_location") + + // HwSerialNumberKey is the attribute Key conforming to the "hw.serial_number" + // semantic conventions. It represents the serial number of the hardware + // component. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "CNFCP0123456789" + HwSerialNumberKey = attribute.Key("hw.serial_number") + + // 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") + + // HwTapeDriveOperationTypeKey is the attribute Key conforming to the + // "hw.tape_drive.operation_type" semantic conventions. It represents the type + // of tape drive operation. + // + // Type: Enum + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: + HwTapeDriveOperationTypeKey = attribute.Key("hw.tape_drive.operation_type") + + // 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") + + // HwVendorKey is the attribute Key conforming to the "hw.vendor" semantic + // conventions. It represents the vendor name of the hardware component. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "Dell", "HP", "Intel", "AMD", "LSI", "Lenovo" + HwVendorKey = attribute.Key("hw.vendor") ) +// HwBatteryCapacity returns an attribute KeyValue conforming to the +// "hw.battery.capacity" semantic conventions. It represents the design capacity +// in Watts-hours or Amper-hours. +func HwBatteryCapacity(val string) attribute.KeyValue { + return HwBatteryCapacityKey.String(val) +} + +// HwBatteryChemistry returns an attribute KeyValue conforming to the +// "hw.battery.chemistry" semantic conventions. It represents the battery +// [chemistry], e.g. Lithium-Ion, Nickel-Cadmium, etc. +// +// [chemistry]: https://schemas.dmtf.org/wbem/cim-html/2.31.0/CIM_Battery.html +func HwBatteryChemistry(val string) attribute.KeyValue { + return HwBatteryChemistryKey.String(val) +} + +// HwBiosVersion returns an attribute KeyValue conforming to the +// "hw.bios_version" semantic conventions. It represents the BIOS version of the +// hardware component. +func HwBiosVersion(val string) attribute.KeyValue { + return HwBiosVersionKey.String(val) +} + +// HwDriverVersion returns an attribute KeyValue conforming to the +// "hw.driver_version" semantic conventions. It represents the driver version for +// the hardware component. +func HwDriverVersion(val string) attribute.KeyValue { + return HwDriverVersionKey.String(val) +} + +// HwEnclosureType returns an attribute KeyValue conforming to the +// "hw.enclosure.type" semantic conventions. It represents the type of the +// enclosure (useful for modular systems). +func HwEnclosureType(val string) attribute.KeyValue { + return HwEnclosureTypeKey.String(val) +} + +// HwFirmwareVersion returns an attribute KeyValue conforming to the +// "hw.firmware_version" semantic conventions. It represents the firmware version +// of the hardware component. +func HwFirmwareVersion(val string) attribute.KeyValue { + return HwFirmwareVersionKey.String(val) +} + // 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. @@ -7483,6 +8018,26 @@ func HwID(val string) attribute.KeyValue { return HwIDKey.String(val) } +// HwLogicalDiskRaidLevel returns an attribute KeyValue conforming to the +// "hw.logical_disk.raid_level" semantic conventions. It represents the RAID +// Level of the logical disk. +func HwLogicalDiskRaidLevel(val string) attribute.KeyValue { + return HwLogicalDiskRaidLevelKey.String(val) +} + +// HwMemoryType returns an attribute KeyValue conforming to the "hw.memory.type" +// semantic conventions. It represents the type of the memory module. +func HwMemoryType(val string) attribute.KeyValue { + return HwMemoryTypeKey.String(val) +} + +// HwModel returns an attribute KeyValue conforming to the "hw.model" semantic +// conventions. It represents the descriptive model name of the hardware +// component. +func HwModel(val string) attribute.KeyValue { + return HwModelKey.String(val) +} + // HwName returns an attribute KeyValue conforming to the "hw.name" semantic // conventions. It represents an easily-recognizable name for the hardware // component. @@ -7490,6 +8045,20 @@ func HwName(val string) attribute.KeyValue { return HwNameKey.String(val) } +// HwNetworkLogicalAddresses returns an attribute KeyValue conforming to the +// "hw.network.logical_addresses" semantic conventions. It represents the logical +// addresses of the adapter (e.g. IP address, or WWPN). +func HwNetworkLogicalAddresses(val ...string) attribute.KeyValue { + return HwNetworkLogicalAddressesKey.StringSlice(val) +} + +// HwNetworkPhysicalAddress returns an attribute KeyValue conforming to the +// "hw.network.physical_address" semantic conventions. It represents the physical +// address of the adapter (e.g. MAC address, or WWNN). +func HwNetworkPhysicalAddress(val string) attribute.KeyValue { + return HwNetworkPhysicalAddressKey.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). @@ -7497,17 +8066,144 @@ func HwParent(val string) attribute.KeyValue { return HwParentKey.String(val) } -// Enum values for hw.state +// HwPhysicalDiskSmartAttribute returns an attribute KeyValue conforming to the +// "hw.physical_disk.smart_attribute" semantic conventions. It represents the +// [S.M.A.R.T.] (Self-Monitoring, Analysis, and Reporting Technology) attribute +// of the physical disk. +// +// [S.M.A.R.T.]: https://wikipedia.org/wiki/S.M.A.R.T. +func HwPhysicalDiskSmartAttribute(val string) attribute.KeyValue { + return HwPhysicalDiskSmartAttributeKey.String(val) +} + +// HwPhysicalDiskType returns an attribute KeyValue conforming to the +// "hw.physical_disk.type" semantic conventions. It represents the type of the +// physical disk. +func HwPhysicalDiskType(val string) attribute.KeyValue { + return HwPhysicalDiskTypeKey.String(val) +} + +// HwSensorLocation returns an attribute KeyValue conforming to the +// "hw.sensor_location" semantic conventions. It represents the location of the +// sensor. +func HwSensorLocation(val string) attribute.KeyValue { + return HwSensorLocationKey.String(val) +} + +// HwSerialNumber returns an attribute KeyValue conforming to the +// "hw.serial_number" semantic conventions. It represents the serial number of +// the hardware component. +func HwSerialNumber(val string) attribute.KeyValue { + return HwSerialNumberKey.String(val) +} + +// HwVendor returns an attribute KeyValue conforming to the "hw.vendor" semantic +// conventions. It represents the vendor name of the hardware component. +func HwVendor(val string) attribute.KeyValue { + return HwVendorKey.String(val) +} + +// Enum values for hw.battery.state var ( - // Ok + // Charging // Stability: development - HwStateOk = HwStateKey.String("ok") + HwBatteryStateCharging = HwBatteryStateKey.String("charging") + // Discharging + // Stability: development + HwBatteryStateDischarging = HwBatteryStateKey.String("discharging") +) + +// Enum values for hw.gpu.task +var ( + // Decoder + // Stability: development + HwGpuTaskDecoder = HwGpuTaskKey.String("decoder") + // Encoder + // Stability: development + HwGpuTaskEncoder = HwGpuTaskKey.String("encoder") + // General + // Stability: development + HwGpuTaskGeneral = HwGpuTaskKey.String("general") +) + +// Enum values for hw.limit_type +var ( + // Critical + // Stability: development + HwLimitTypeCritical = HwLimitTypeKey.String("critical") + // Degraded + // Stability: development + HwLimitTypeDegraded = HwLimitTypeKey.String("degraded") + // High Critical + // Stability: development + HwLimitTypeHighCritical = HwLimitTypeKey.String("high.critical") + // High Degraded + // Stability: development + HwLimitTypeHighDegraded = HwLimitTypeKey.String("high.degraded") + // Low Critical + // Stability: development + HwLimitTypeLowCritical = HwLimitTypeKey.String("low.critical") + // Low Degraded + // Stability: development + HwLimitTypeLowDegraded = HwLimitTypeKey.String("low.degraded") + // Maximum + // Stability: development + HwLimitTypeMax = HwLimitTypeKey.String("max") + // Throttled + // Stability: development + HwLimitTypeThrottled = HwLimitTypeKey.String("throttled") + // Turbo + // Stability: development + HwLimitTypeTurbo = HwLimitTypeKey.String("turbo") +) + +// Enum values for hw.logical_disk.state +var ( + // Used + // Stability: development + HwLogicalDiskStateUsed = HwLogicalDiskStateKey.String("used") + // Free + // Stability: development + HwLogicalDiskStateFree = HwLogicalDiskStateKey.String("free") +) + +// Enum values for hw.physical_disk.state +var ( + // Remaining + // Stability: development + HwPhysicalDiskStateRemaining = HwPhysicalDiskStateKey.String("remaining") +) + +// Enum values for hw.state +var ( // Degraded // Stability: development HwStateDegraded = HwStateKey.String("degraded") // Failed // Stability: development HwStateFailed = HwStateKey.String("failed") + // Needs Cleaning + // Stability: development + HwStateNeedsCleaning = HwStateKey.String("needs_cleaning") + // OK + // Stability: development + HwStateOk = HwStateKey.String("ok") + // Predicted Failure + // Stability: development + HwStatePredictedFailure = HwStateKey.String("predicted_failure") +) + +// Enum values for hw.tape_drive.operation_type +var ( + // Mount + // Stability: development + HwTapeDriveOperationTypeMount = HwTapeDriveOperationTypeKey.String("mount") + // Unmount + // Stability: development + HwTapeDriveOperationTypeUnmount = HwTapeDriveOperationTypeKey.String("unmount") + // Clean + // Stability: development + HwTapeDriveOperationTypeClean = HwTapeDriveOperationTypeKey.String("clean") ) // Enum values for hw.type @@ -7686,6 +8382,36 @@ const ( // Examples: "Evicted", "Error" K8SContainerStatusLastTerminatedReasonKey = attribute.Key("k8s.container.status.last_terminated_reason") + // K8SContainerStatusReasonKey is the attribute Key conforming to the + // "k8s.container.status.reason" semantic conventions. It represents the reason + // for the container state. Corresponds to the `reason` field of the: + // [K8s ContainerStateWaiting] or [K8s ContainerStateTerminated]. + // + // Type: Enum + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "ContainerCreating", "CrashLoopBackOff", + // "CreateContainerConfigError", "ErrImagePull", "ImagePullBackOff", + // "OOMKilled", "Completed", "Error", "ContainerCannotRun" + // + // [K8s ContainerStateWaiting]: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#containerstatewaiting-v1-core + // [K8s ContainerStateTerminated]: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#containerstateterminated-v1-core + K8SContainerStatusReasonKey = attribute.Key("k8s.container.status.reason") + + // K8SContainerStatusStateKey is the attribute Key conforming to the + // "k8s.container.status.state" semantic conventions. It represents the state of + // the container. [K8s ContainerState]. + // + // Type: Enum + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "terminated", "running", "waiting" + // + // [K8s ContainerState]: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#containerstate-v1-core + K8SContainerStatusStateKey = attribute.Key("k8s.container.status.state") + // K8SCronJobNameKey is the attribute Key conforming to the "k8s.cronjob.name" // semantic conventions. It represents the name of the CronJob. // @@ -7749,6 +8475,18 @@ const ( // Examples: "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" K8SDeploymentUIDKey = attribute.Key("k8s.deployment.uid") + // K8SHPAMetricTypeKey is the attribute Key conforming to the + // "k8s.hpa.metric.type" semantic conventions. It represents the type of metric + // source for the horizontal pod autoscaler. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "Resource", "ContainerResource" + // Note: This attribute reflects the `type` field of spec.metrics[] in the HPA. + K8SHPAMetricTypeKey = attribute.Key("k8s.hpa.metric.type") + // K8SHPANameKey is the attribute Key conforming to the "k8s.hpa.name" semantic // conventions. It represents the name of the horizontal pod autoscaler. // @@ -7759,6 +8497,43 @@ const ( // Examples: "opentelemetry" K8SHPANameKey = attribute.Key("k8s.hpa.name") + // K8SHPAScaletargetrefAPIVersionKey is the attribute Key conforming to the + // "k8s.hpa.scaletargetref.api_version" semantic conventions. It represents the + // API version of the target resource to scale for the HorizontalPodAutoscaler. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "apps/v1", "autoscaling/v2" + // Note: This maps to the `apiVersion` field in the `scaleTargetRef` of the HPA + // spec. + K8SHPAScaletargetrefAPIVersionKey = attribute.Key("k8s.hpa.scaletargetref.api_version") + + // K8SHPAScaletargetrefKindKey is the attribute Key conforming to the + // "k8s.hpa.scaletargetref.kind" semantic conventions. It represents the kind of + // the target resource to scale for the HorizontalPodAutoscaler. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "Deployment", "StatefulSet" + // Note: This maps to the `kind` field in the `scaleTargetRef` of the HPA spec. + K8SHPAScaletargetrefKindKey = attribute.Key("k8s.hpa.scaletargetref.kind") + + // K8SHPAScaletargetrefNameKey is the attribute Key conforming to the + // "k8s.hpa.scaletargetref.name" semantic conventions. It represents the name of + // the target resource to scale for the HorizontalPodAutoscaler. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "my-deployment", "my-statefulset" + // Note: This maps to the `name` field in the `scaleTargetRef` of the HPA spec. + K8SHPAScaletargetrefNameKey = attribute.Key("k8s.hpa.scaletargetref.name") + // K8SHPAUIDKey is the attribute Key conforming to the "k8s.hpa.uid" semantic // conventions. It represents the UID of the horizontal pod autoscaler. // @@ -7769,6 +8544,17 @@ const ( // Examples: "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" K8SHPAUIDKey = attribute.Key("k8s.hpa.uid") + // K8SHugepageSizeKey is the attribute Key conforming to the "k8s.hugepage.size" + // semantic conventions. It represents the size (identifier) of the K8s huge + // page. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "2Mi" + K8SHugepageSizeKey = attribute.Key("k8s.hugepage.size") + // K8SJobNameKey is the attribute Key conforming to the "k8s.job.name" semantic // conventions. It represents the name of the Job. // @@ -7815,6 +8601,46 @@ const ( // [K8s NamespaceStatus]: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#namespacestatus-v1-core K8SNamespacePhaseKey = attribute.Key("k8s.namespace.phase") + // K8SNodeConditionStatusKey is the attribute Key conforming to the + // "k8s.node.condition.status" semantic conventions. It represents the status of + // the condition, one of True, False, Unknown. + // + // Type: Enum + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "true", "false", "unknown" + // Note: This attribute aligns with the `status` field of the + // [NodeCondition] + // + // [NodeCondition]: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#nodecondition-v1-core + K8SNodeConditionStatusKey = attribute.Key("k8s.node.condition.status") + + // K8SNodeConditionTypeKey is the attribute Key conforming to the + // "k8s.node.condition.type" semantic conventions. It represents the condition + // type of a K8s Node. + // + // Type: Enum + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "Ready", "DiskPressure" + // Note: K8s Node conditions as described + // by [K8s documentation]. + // + // This attribute aligns with the `type` field of the + // [NodeCondition] + // + // The set of possible values is not limited to those listed here. Managed + // Kubernetes environments, + // or custom controllers MAY introduce additional node condition types. + // When this occurs, the exact value as reported by the Kubernetes API SHOULD be + // used. + // + // [K8s documentation]: https://v1-32.docs.kubernetes.io/docs/reference/node/node-status/#condition + // [NodeCondition]: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#nodecondition-v1-core + K8SNodeConditionTypeKey = attribute.Key("k8s.node.condition.type") + // K8SNodeNameKey is the attribute Key conforming to the "k8s.node.name" // semantic conventions. It represents the name of the Node. // @@ -7910,6 +8736,25 @@ const ( // Examples: "opentelemetry" K8SResourceQuotaNameKey = attribute.Key("k8s.resourcequota.name") + // K8SResourceQuotaResourceNameKey is the attribute Key conforming to the + // "k8s.resourcequota.resource_name" semantic conventions. It represents the + // name of the K8s resource a resource quota defines. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "count/replicationcontrollers" + // Note: The value for this attribute can be either the full + // `count/[.]` string (e.g., count/deployments.apps, + // count/pods), or, for certain core Kubernetes resources, just the resource + // name (e.g., pods, services, configmaps). Both forms are supported by + // Kubernetes for object count quotas. See + // [Kubernetes Resource Quotas documentation] for more details. + // + // [Kubernetes Resource Quotas documentation]: https://kubernetes.io/docs/concepts/policy/resource-quotas/#object-count-quota + K8SResourceQuotaResourceNameKey = attribute.Key("k8s.resourcequota.resource_name") + // K8SResourceQuotaUIDKey is the attribute Key conforming to the // "k8s.resourcequota.uid" semantic conventions. It represents the UID of the // resource quota. @@ -7943,6 +8788,19 @@ const ( // Examples: "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" K8SStatefulSetUIDKey = attribute.Key("k8s.statefulset.uid") + // K8SStorageclassNameKey is the attribute Key conforming to the + // "k8s.storageclass.name" semantic conventions. It represents the name of K8s + // [StorageClass] object. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "gold.storageclass.storage.k8s.io" + // + // [StorageClass]: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#storageclass-v1-storage-k8s-io + K8SStorageclassNameKey = attribute.Key("k8s.storageclass.name") + // K8SVolumeNameKey is the attribute Key conforming to the "k8s.volume.name" // semantic conventions. It represents the name of the K8s volume. // @@ -8001,6 +8859,22 @@ func K8SContainerStatusLastTerminatedReason(val string) attribute.KeyValue { return K8SContainerStatusLastTerminatedReasonKey.String(val) } +// K8SCronJobAnnotation returns an attribute KeyValue conforming to the +// "k8s.cronjob.annotation" semantic conventions. It represents the cronjob +// annotation placed on the CronJob, the `` being the annotation name, the +// value being the annotation value. +func K8SCronJobAnnotation(key string, val string) attribute.KeyValue { + return attribute.String("k8s.cronjob.annotation."+key, val) +} + +// K8SCronJobLabel returns an attribute KeyValue conforming to the +// "k8s.cronjob.label" semantic conventions. It represents the label placed on +// the CronJob, the `` being the label name, the value being the label +// value. +func K8SCronJobLabel(key string, val string) attribute.KeyValue { + return attribute.String("k8s.cronjob.label."+key, val) +} + // K8SCronJobName returns an attribute KeyValue conforming to the // "k8s.cronjob.name" semantic conventions. It represents the name of the // CronJob. @@ -8014,6 +8888,22 @@ func K8SCronJobUID(val string) attribute.KeyValue { return K8SCronJobUIDKey.String(val) } +// K8SDaemonSetAnnotation returns an attribute KeyValue conforming to the +// "k8s.daemonset.annotation" semantic conventions. It represents the annotation +// placed on the DaemonSet, the `` being the annotation name, the value +// being the annotation value, even if the value is empty. +func K8SDaemonSetAnnotation(key string, val string) attribute.KeyValue { + return attribute.String("k8s.daemonset.annotation."+key, val) +} + +// K8SDaemonSetLabel returns an attribute KeyValue conforming to the +// "k8s.daemonset.label" semantic conventions. It represents the label placed on +// the DaemonSet, the `` being the label name, the value being the label +// value, even if the value is empty. +func K8SDaemonSetLabel(key string, val string) attribute.KeyValue { + return attribute.String("k8s.daemonset.label."+key, val) +} + // K8SDaemonSetName returns an attribute KeyValue conforming to the // "k8s.daemonset.name" semantic conventions. It represents the name of the // DaemonSet. @@ -8028,6 +8918,22 @@ func K8SDaemonSetUID(val string) attribute.KeyValue { return K8SDaemonSetUIDKey.String(val) } +// K8SDeploymentAnnotation returns an attribute KeyValue conforming to the +// "k8s.deployment.annotation" semantic conventions. It represents the annotation +// placed on the Deployment, the `` being the annotation name, the value +// being the annotation value, even if the value is empty. +func K8SDeploymentAnnotation(key string, val string) attribute.KeyValue { + return attribute.String("k8s.deployment.annotation."+key, val) +} + +// K8SDeploymentLabel returns an attribute KeyValue conforming to the +// "k8s.deployment.label" semantic conventions. It represents the label placed on +// the Deployment, the `` being the label name, the value being the label +// value, even if the value is empty. +func K8SDeploymentLabel(key string, val string) attribute.KeyValue { + return attribute.String("k8s.deployment.label."+key, val) +} + // K8SDeploymentName returns an attribute KeyValue conforming to the // "k8s.deployment.name" semantic conventions. It represents the name of the // Deployment. @@ -8042,18 +8948,69 @@ func K8SDeploymentUID(val string) attribute.KeyValue { return K8SDeploymentUIDKey.String(val) } +// K8SHPAMetricType returns an attribute KeyValue conforming to the +// "k8s.hpa.metric.type" semantic conventions. It represents the type of metric +// source for the horizontal pod autoscaler. +func K8SHPAMetricType(val string) attribute.KeyValue { + return K8SHPAMetricTypeKey.String(val) +} + // K8SHPAName returns an attribute KeyValue conforming to the "k8s.hpa.name" // semantic conventions. It represents the name of the horizontal pod autoscaler. func K8SHPAName(val string) attribute.KeyValue { return K8SHPANameKey.String(val) } +// K8SHPAScaletargetrefAPIVersion returns an attribute KeyValue conforming to the +// "k8s.hpa.scaletargetref.api_version" semantic conventions. It represents the +// API version of the target resource to scale for the HorizontalPodAutoscaler. +func K8SHPAScaletargetrefAPIVersion(val string) attribute.KeyValue { + return K8SHPAScaletargetrefAPIVersionKey.String(val) +} + +// K8SHPAScaletargetrefKind returns an attribute KeyValue conforming to the +// "k8s.hpa.scaletargetref.kind" semantic conventions. It represents the kind of +// the target resource to scale for the HorizontalPodAutoscaler. +func K8SHPAScaletargetrefKind(val string) attribute.KeyValue { + return K8SHPAScaletargetrefKindKey.String(val) +} + +// K8SHPAScaletargetrefName returns an attribute KeyValue conforming to the +// "k8s.hpa.scaletargetref.name" semantic conventions. It represents the name of +// the target resource to scale for the HorizontalPodAutoscaler. +func K8SHPAScaletargetrefName(val string) attribute.KeyValue { + return K8SHPAScaletargetrefNameKey.String(val) +} + // K8SHPAUID returns an attribute KeyValue conforming to the "k8s.hpa.uid" // semantic conventions. It represents the UID of the horizontal pod autoscaler. func K8SHPAUID(val string) attribute.KeyValue { return K8SHPAUIDKey.String(val) } +// K8SHugepageSize returns an attribute KeyValue conforming to the +// "k8s.hugepage.size" semantic conventions. It represents the size (identifier) +// of the K8s huge page. +func K8SHugepageSize(val string) attribute.KeyValue { + return K8SHugepageSizeKey.String(val) +} + +// K8SJobAnnotation returns an attribute KeyValue conforming to the +// "k8s.job.annotation" semantic conventions. It represents the annotation placed +// on the Job, the `` being the annotation name, the value being the +// annotation value, even if the value is empty. +func K8SJobAnnotation(key string, val string) attribute.KeyValue { + return attribute.String("k8s.job.annotation."+key, val) +} + +// K8SJobLabel returns an attribute KeyValue conforming to the "k8s.job.label" +// semantic conventions. It represents the label placed on the Job, the `` +// being the label name, the value being the label value, even if the value is +// empty. +func K8SJobLabel(key string, val string) attribute.KeyValue { + return attribute.String("k8s.job.label."+key, 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 { @@ -8066,6 +9023,22 @@ func K8SJobUID(val string) attribute.KeyValue { return K8SJobUIDKey.String(val) } +// K8SNamespaceAnnotation returns an attribute KeyValue conforming to the +// "k8s.namespace.annotation" semantic conventions. It represents the annotation +// placed on the Namespace, the `` being the annotation name, the value +// being the annotation value, even if the value is empty. +func K8SNamespaceAnnotation(key string, val string) attribute.KeyValue { + return attribute.String("k8s.namespace.annotation."+key, val) +} + +// K8SNamespaceLabel returns an attribute KeyValue conforming to the +// "k8s.namespace.label" semantic conventions. It represents the label placed on +// the Namespace, the `` being the label name, the value being the label +// value, even if the value is empty. +func K8SNamespaceLabel(key string, val string) attribute.KeyValue { + return attribute.String("k8s.namespace.label."+key, 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. @@ -8073,6 +9046,22 @@ func K8SNamespaceName(val string) attribute.KeyValue { return K8SNamespaceNameKey.String(val) } +// K8SNodeAnnotation returns an attribute KeyValue conforming to the +// "k8s.node.annotation" semantic conventions. It represents the annotation +// placed on the Node, the `` being the annotation name, the value being the +// annotation value, even if the value is empty. +func K8SNodeAnnotation(key string, val string) attribute.KeyValue { + return attribute.String("k8s.node.annotation."+key, val) +} + +// K8SNodeLabel returns an attribute KeyValue conforming to the "k8s.node.label" +// semantic conventions. It represents the label placed on the Node, the `` +// being the label name, the value being the label value, even if the value is +// empty. +func K8SNodeLabel(key string, val string) attribute.KeyValue { + return attribute.String("k8s.node.label."+key, 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 { @@ -8085,6 +9074,21 @@ func K8SNodeUID(val string) attribute.KeyValue { return K8SNodeUIDKey.String(val) } +// K8SPodAnnotation returns an attribute KeyValue conforming to the +// "k8s.pod.annotation" semantic conventions. It represents the annotation placed +// on the Pod, the `` being the annotation name, the value being the +// annotation value. +func K8SPodAnnotation(key string, val string) attribute.KeyValue { + return attribute.String("k8s.pod.annotation."+key, val) +} + +// K8SPodLabel returns an attribute KeyValue conforming to the "k8s.pod.label" +// semantic conventions. It represents the label placed on the Pod, the `` +// being the label name, the value being the label value. +func K8SPodLabel(key string, val string) attribute.KeyValue { + return attribute.String("k8s.pod.label."+key, 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 { @@ -8097,6 +9101,22 @@ func K8SPodUID(val string) attribute.KeyValue { return K8SPodUIDKey.String(val) } +// K8SReplicaSetAnnotation returns an attribute KeyValue conforming to the +// "k8s.replicaset.annotation" semantic conventions. It represents the annotation +// placed on the ReplicaSet, the `` being the annotation name, the value +// being the annotation value, even if the value is empty. +func K8SReplicaSetAnnotation(key string, val string) attribute.KeyValue { + return attribute.String("k8s.replicaset.annotation."+key, val) +} + +// K8SReplicaSetLabel returns an attribute KeyValue conforming to the +// "k8s.replicaset.label" semantic conventions. It represents the label placed on +// the ReplicaSet, the `` being the label name, the value being the label +// value, even if the value is empty. +func K8SReplicaSetLabel(key string, val string) attribute.KeyValue { + return attribute.String("k8s.replicaset.label."+key, val) +} + // K8SReplicaSetName returns an attribute KeyValue conforming to the // "k8s.replicaset.name" semantic conventions. It represents the name of the // ReplicaSet. @@ -8132,6 +9152,13 @@ func K8SResourceQuotaName(val string) attribute.KeyValue { return K8SResourceQuotaNameKey.String(val) } +// K8SResourceQuotaResourceName returns an attribute KeyValue conforming to the +// "k8s.resourcequota.resource_name" semantic conventions. It represents the name +// of the K8s resource a resource quota defines. +func K8SResourceQuotaResourceName(val string) attribute.KeyValue { + return K8SResourceQuotaResourceNameKey.String(val) +} + // K8SResourceQuotaUID returns an attribute KeyValue conforming to the // "k8s.resourcequota.uid" semantic conventions. It represents the UID of the // resource quota. @@ -8139,6 +9166,22 @@ func K8SResourceQuotaUID(val string) attribute.KeyValue { return K8SResourceQuotaUIDKey.String(val) } +// K8SStatefulSetAnnotation returns an attribute KeyValue conforming to the +// "k8s.statefulset.annotation" semantic conventions. It represents the +// annotation placed on the StatefulSet, the `` being the annotation name, +// the value being the annotation value, even if the value is empty. +func K8SStatefulSetAnnotation(key string, val string) attribute.KeyValue { + return attribute.String("k8s.statefulset.annotation."+key, val) +} + +// K8SStatefulSetLabel returns an attribute KeyValue conforming to the +// "k8s.statefulset.label" semantic conventions. It represents the label placed +// on the StatefulSet, the `` being the label name, the value being the +// label value, even if the value is empty. +func K8SStatefulSetLabel(key string, val string) attribute.KeyValue { + return attribute.String("k8s.statefulset.label."+key, val) +} + // K8SStatefulSetName returns an attribute KeyValue conforming to the // "k8s.statefulset.name" semantic conventions. It represents the name of the // StatefulSet. @@ -8153,6 +9196,15 @@ func K8SStatefulSetUID(val string) attribute.KeyValue { return K8SStatefulSetUIDKey.String(val) } +// K8SStorageclassName returns an attribute KeyValue conforming to the +// "k8s.storageclass.name" semantic conventions. It represents the name of K8s +// [StorageClass] object. +// +// [StorageClass]: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#storageclass-v1-storage-k8s-io +func K8SStorageclassName(val string) attribute.KeyValue { + return K8SStorageclassNameKey.String(val) +} + // K8SVolumeName returns an attribute KeyValue conforming to the // "k8s.volume.name" semantic conventions. It represents the name of the K8s // volume. @@ -8160,6 +9212,50 @@ func K8SVolumeName(val string) attribute.KeyValue { return K8SVolumeNameKey.String(val) } +// Enum values for k8s.container.status.reason +var ( + // The container is being created. + // Stability: development + K8SContainerStatusReasonContainerCreating = K8SContainerStatusReasonKey.String("ContainerCreating") + // The container is in a crash loop back off state. + // Stability: development + K8SContainerStatusReasonCrashLoopBackOff = K8SContainerStatusReasonKey.String("CrashLoopBackOff") + // There was an error creating the container configuration. + // Stability: development + K8SContainerStatusReasonCreateContainerConfigError = K8SContainerStatusReasonKey.String("CreateContainerConfigError") + // There was an error pulling the container image. + // Stability: development + K8SContainerStatusReasonErrImagePull = K8SContainerStatusReasonKey.String("ErrImagePull") + // The container image pull is in back off state. + // Stability: development + K8SContainerStatusReasonImagePullBackOff = K8SContainerStatusReasonKey.String("ImagePullBackOff") + // The container was killed due to out of memory. + // Stability: development + K8SContainerStatusReasonOomKilled = K8SContainerStatusReasonKey.String("OOMKilled") + // The container has completed execution. + // Stability: development + K8SContainerStatusReasonCompleted = K8SContainerStatusReasonKey.String("Completed") + // There was an error with the container. + // Stability: development + K8SContainerStatusReasonError = K8SContainerStatusReasonKey.String("Error") + // The container cannot run. + // Stability: development + K8SContainerStatusReasonContainerCannotRun = K8SContainerStatusReasonKey.String("ContainerCannotRun") +) + +// Enum values for k8s.container.status.state +var ( + // The container has terminated. + // Stability: development + K8SContainerStatusStateTerminated = K8SContainerStatusStateKey.String("terminated") + // The container is running. + // Stability: development + K8SContainerStatusStateRunning = K8SContainerStatusStateKey.String("running") + // The container is waiting. + // Stability: development + K8SContainerStatusStateWaiting = K8SContainerStatusStateKey.String("waiting") +) + // Enum values for k8s.namespace.phase var ( // Active namespace phase as described by [K8s API] @@ -8174,6 +9270,39 @@ var ( K8SNamespacePhaseTerminating = K8SNamespacePhaseKey.String("terminating") ) +// Enum values for k8s.node.condition.status +var ( + // condition_true + // Stability: development + K8SNodeConditionStatusConditionTrue = K8SNodeConditionStatusKey.String("true") + // condition_false + // Stability: development + K8SNodeConditionStatusConditionFalse = K8SNodeConditionStatusKey.String("false") + // condition_unknown + // Stability: development + K8SNodeConditionStatusConditionUnknown = K8SNodeConditionStatusKey.String("unknown") +) + +// Enum values for k8s.node.condition.type +var ( + // The node is healthy and ready to accept pods + // Stability: development + K8SNodeConditionTypeReady = K8SNodeConditionTypeKey.String("Ready") + // Pressure exists on the disk size—that is, if the disk capacity is low + // Stability: development + K8SNodeConditionTypeDiskPressure = K8SNodeConditionTypeKey.String("DiskPressure") + // Pressure exists on the node memory—that is, if the node memory is low + // Stability: development + K8SNodeConditionTypeMemoryPressure = K8SNodeConditionTypeKey.String("MemoryPressure") + // Pressure exists on the processes—that is, if there are too many processes + // on the node + // Stability: development + K8SNodeConditionTypePIDPressure = K8SNodeConditionTypeKey.String("PIDPressure") + // The network for the node is not correctly configured + // Stability: development + K8SNodeConditionTypeNetworkUnavailable = K8SNodeConditionTypeKey.String("NetworkUnavailable") +) + // Enum values for k8s.volume.type var ( // A [persistentVolumeClaim] volume @@ -8371,6 +9500,27 @@ var ( LogIostreamStderr = LogIostreamKey.String("stderr") ) +// Namespace: mainframe +const ( + // MainframeLparNameKey is the attribute Key conforming to the + // "mainframe.lpar.name" semantic conventions. It represents the name of the + // logical partition that hosts a systems with a mainframe operating system. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "LPAR01" + MainframeLparNameKey = attribute.Key("mainframe.lpar.name") +) + +// MainframeLparName returns an attribute KeyValue conforming to the +// "mainframe.lpar.name" semantic conventions. It represents the name of the +// logical partition that hosts a systems with a mainframe operating system. +func MainframeLparName(val string) attribute.KeyValue { + return MainframeLparNameKey.String(val) +} + // Namespace: messaging const ( // MessagingBatchMessageCountKey is the attribute Key conforming to the @@ -9084,10 +10234,6 @@ var ( // // 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 @@ -9137,6 +10283,9 @@ var ( // Apache ActiveMQ // Stability: development MessagingSystemActiveMQ = MessagingSystemKey.String("activemq") + // Amazon Simple Notification Service (SNS) + // Stability: development + MessagingSystemAWSSNS = MessagingSystemKey.String("aws.sns") // Amazon Simple Queue Service (SQS) // Stability: development MessagingSystemAWSSQS = MessagingSystemKey.String("aws_sqs") @@ -9654,6 +10803,66 @@ func OCIManifestDigest(val string) attribute.KeyValue { return OCIManifestDigestKey.String(val) } +// Namespace: openai +const ( + // OpenAIRequestServiceTierKey is the attribute Key conforming to the + // "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" + OpenAIRequestServiceTierKey = attribute.Key("openai.request.service_tier") + + // OpenAIResponseServiceTierKey is the attribute Key conforming to the + // "openai.response.service_tier" semantic conventions. It represents the + // service tier used for the response. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "scale", "default" + OpenAIResponseServiceTierKey = attribute.Key("openai.response.service_tier") + + // OpenAIResponseSystemFingerprintKey is the attribute Key conforming to the + // "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" + OpenAIResponseSystemFingerprintKey = attribute.Key("openai.response.system_fingerprint") +) + +// OpenAIResponseServiceTier returns an attribute KeyValue conforming to the +// "openai.response.service_tier" semantic conventions. It represents the service +// tier used for the response. +func OpenAIResponseServiceTier(val string) attribute.KeyValue { + return OpenAIResponseServiceTierKey.String(val) +} + +// OpenAIResponseSystemFingerprint returns an attribute KeyValue conforming to +// the "openai.response.system_fingerprint" semantic conventions. It represents a +// fingerprint to track any eventual change in the Generative AI environment. +func OpenAIResponseSystemFingerprint(val string) attribute.KeyValue { + return OpenAIResponseSystemFingerprintKey.String(val) +} + +// Enum values for openai.request.service_tier +var ( + // The system will utilize scale tier credits until they are exhausted. + // Stability: development + OpenAIRequestServiceTierAuto = OpenAIRequestServiceTierKey.String("auto") + // The system will utilize the default scale tier. + // Stability: development + OpenAIRequestServiceTierDefault = OpenAIRequestServiceTierKey.String("default") +) + // Namespace: opentracing const ( // OpenTracingRefTypeKey is the attribute Key conforming to the @@ -9802,7 +11011,7 @@ var ( OSTypeSolaris = OSTypeKey.String("solaris") // IBM z/OS // Stability: development - OSTypeZOS = OSTypeKey.String("z_os") + OSTypeZOS = OSTypeKey.String("zos") ) // Namespace: otel @@ -9866,6 +11075,17 @@ const ( // Examples: "io.opentelemetry.contrib.mongodb" OTelScopeNameKey = attribute.Key("otel.scope.name") + // OTelScopeSchemaURLKey is the attribute Key conforming to the + // "otel.scope.schema_url" semantic conventions. It represents the schema URL of + // the instrumentation scope. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "https://opentelemetry.io/schemas/1.31.0" + OTelScopeSchemaURLKey = attribute.Key("otel.scope.schema_url") + // 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). @@ -9877,6 +11097,20 @@ const ( // Examples: "1.0.0" OTelScopeVersionKey = attribute.Key("otel.scope.version") + // OTelSpanParentOriginKey is the attribute Key conforming to the + // "otel.span.parent.origin" semantic conventions. It represents the determines + // whether the span has a parent span, and if so, + // [whether it is a remote parent]. + // + // Type: Enum + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: + // + // [whether it is a remote parent]: https://opentelemetry.io/docs/specs/otel/trace/api/#isremote + OTelSpanParentOriginKey = attribute.Key("otel.span.parent.origin") + // OTelSpanSamplingResultKey is the attribute Key conforming to the // "otel.span.sampling_result" semantic conventions. It represents the result // value of the sampler for this span. @@ -9926,6 +11160,13 @@ func OTelScopeName(val string) attribute.KeyValue { return OTelScopeNameKey.String(val) } +// OTelScopeSchemaURL returns an attribute KeyValue conforming to the +// "otel.scope.schema_url" semantic conventions. It represents the schema URL of +// the instrumentation scope. +func OTelScopeSchemaURL(val string) attribute.KeyValue { + return OTelScopeSchemaURLKey.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). @@ -9970,6 +11211,10 @@ var ( // // Stability: development OTelComponentTypeOtlpHTTPJSONSpanExporter = OTelComponentTypeKey.String("otlp_http_json_span_exporter") + // Zipkin span exporter over HTTP + // + // Stability: development + OTelComponentTypeZipkinHTTPSpanExporter = OTelComponentTypeKey.String("zipkin_http_span_exporter") // OTLP log record exporter over gRPC with protobuf serialization // // Stability: development @@ -9998,6 +11243,27 @@ var ( // // Stability: development OTelComponentTypeOtlpHTTPJSONMetricExporter = OTelComponentTypeKey.String("otlp_http_json_metric_exporter") + // Prometheus metric exporter over HTTP with the default text-based format + // + // Stability: development + OTelComponentTypePrometheusHTTPTextMetricExporter = OTelComponentTypeKey.String("prometheus_http_text_metric_exporter") +) + +// Enum values for otel.span.parent.origin +var ( + // The span does not have a parent, it is a root span + // Stability: development + OTelSpanParentOriginNone = OTelSpanParentOriginKey.String("none") + // The span has a parent and the parent's span context [isRemote()] is false + // Stability: development + // + // [isRemote()]: https://opentelemetry.io/docs/specs/otel/trace/api/#isremote + OTelSpanParentOriginLocal = OTelSpanParentOriginKey.String("local") + // The span has a parent and the parent's span context [isRemote()] is true + // Stability: development + // + // [isRemote()]: https://opentelemetry.io/docs/specs/otel/trace/api/#isremote + OTelSpanParentOriginRemote = OTelSpanParentOriginKey.String("remote") ) // Enum values for otel.span.sampling_result @@ -10497,6 +11763,14 @@ func ProcessCreationTime(val string) attribute.KeyValue { return ProcessCreationTimeKey.String(val) } +// ProcessEnvironmentVariable returns an attribute KeyValue conforming to the +// "process.environment_variable" semantic conventions. It represents the process +// environment variables, `` being the environment variable name, the value +// being the environment variable value. +func ProcessEnvironmentVariable(key string, val string) attribute.KeyValue { + return attribute.String("process.environment_variable."+key, 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). @@ -10965,6 +12239,38 @@ const ( RPCSystemKey = attribute.Key("rpc.system") ) +// RPCConnectRPCRequestMetadata returns an attribute KeyValue conforming to the +// "rpc.connect_rpc.request.metadata" semantic conventions. It represents the +// connect request metadata, `` being the normalized Connect Metadata key +// (lowercase), the value being the metadata values. +func RPCConnectRPCRequestMetadata(key string, val ...string) attribute.KeyValue { + return attribute.StringSlice("rpc.connect_rpc.request.metadata."+key, val) +} + +// RPCConnectRPCResponseMetadata returns an attribute KeyValue conforming to the +// "rpc.connect_rpc.response.metadata" semantic conventions. It represents the +// connect response metadata, `` being the normalized Connect Metadata key +// (lowercase), the value being the metadata values. +func RPCConnectRPCResponseMetadata(key string, val ...string) attribute.KeyValue { + return attribute.StringSlice("rpc.connect_rpc.response.metadata."+key, val) +} + +// RPCGRPCRequestMetadata returns an attribute KeyValue conforming to the +// "rpc.grpc.request.metadata" semantic conventions. It represents the gRPC +// request metadata, `` being the normalized gRPC Metadata key (lowercase), +// the value being the metadata values. +func RPCGRPCRequestMetadata(key string, val ...string) attribute.KeyValue { + return attribute.StringSlice("rpc.grpc.request.metadata."+key, val) +} + +// RPCGRPCResponseMetadata returns an attribute KeyValue conforming to the +// "rpc.grpc.response.metadata" semantic conventions. It represents the gRPC +// response metadata, `` being the normalized gRPC Metadata key (lowercase), +// the value being the metadata values. +func RPCGRPCResponseMetadata(key string, val ...string) attribute.KeyValue { + return attribute.StringSlice("rpc.grpc.response.metadata."+key, 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. @@ -11820,15 +13126,12 @@ var ( // Enum values for system.memory.state var ( - // used + // Actual used virtual memory in bytes. // 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") @@ -13727,8 +15030,6 @@ var ( // // [GitLab]: https://gitlab.com VCSProviderNameGitlab = VCSProviderNameKey.String("gitlab") - // Deprecated: Replaced by `gitea`. - VCSProviderNameGittea = VCSProviderNameKey.String("gittea") // [Gitea] // Stability: development // @@ -13848,4 +15149,45 @@ func WebEngineName(val string) attribute.KeyValue { // engine. func WebEngineVersion(val string) attribute.KeyValue { return WebEngineVersionKey.String(val) +} + +// Namespace: zos +const ( + // ZOSSmfIDKey is the attribute Key conforming to the "zos.smf.id" semantic + // conventions. It represents the System Management Facility (SMF) Identifier + // uniquely identified a z/OS system within a SYSPLEX or mainframe environment + // and is used for system and performance analysis. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "SYS1" + ZOSSmfIDKey = attribute.Key("zos.smf.id") + + // ZOSSysplexNameKey is the attribute Key conforming to the "zos.sysplex.name" + // semantic conventions. It represents the name of the SYSPLEX to which the z/OS + // system belongs too. + // + // Type: string + // RequirementLevel: Recommended + // Stability: Development + // + // Examples: "SYSPLEX1" + ZOSSysplexNameKey = attribute.Key("zos.sysplex.name") +) + +// ZOSSmfID returns an attribute KeyValue conforming to the "zos.smf.id" semantic +// conventions. It represents the System Management Facility (SMF) Identifier +// uniquely identified a z/OS system within a SYSPLEX or mainframe environment +// and is used for system and performance analysis. +func ZOSSmfID(val string) attribute.KeyValue { + return ZOSSmfIDKey.String(val) +} + +// ZOSSysplexName returns an attribute KeyValue conforming to the +// "zos.sysplex.name" semantic conventions. It represents the name of the SYSPLEX +// to which the z/OS system belongs too. +func ZOSSysplexName(val string) attribute.KeyValue { + return ZOSSysplexNameKey.String(val) } \ No newline at end of file diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.34.0/doc.go b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/doc.go similarity index 96% rename from vendor/go.opentelemetry.io/otel/semconv/v1.34.0/doc.go rename to vendor/go.opentelemetry.io/otel/semconv/v1.37.0/doc.go index 2c5c7ebd04..1110103210 100644 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.34.0/doc.go +++ b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/doc.go @@ -4,6 +4,6 @@ // Package semconv implements OpenTelemetry semantic conventions. // // OpenTelemetry semantic conventions are agreed standardized naming -// patterns for OpenTelemetry things. This package represents the v1.34.0 +// patterns for OpenTelemetry things. This package represents the v1.37.0 // version of the OpenTelemetry semantic conventions. -package semconv // import "go.opentelemetry.io/otel/semconv/v1.34.0" +package semconv // import "go.opentelemetry.io/otel/semconv/v1.37.0" diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/error_type.go b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/error_type.go new file mode 100644 index 0000000000..666bded4ba --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/error_type.go @@ -0,0 +1,31 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package semconv // import "go.opentelemetry.io/otel/semconv/v1.37.0" + +import ( + "fmt" + "reflect" + + "go.opentelemetry.io/otel/attribute" +) + +// ErrorType returns an [attribute.KeyValue] identifying the error type of err. +func ErrorType(err error) attribute.KeyValue { + if err == nil { + return ErrorTypeOther + } + t := reflect.TypeOf(err) + var value string + if t.PkgPath() == "" && t.Name() == "" { + // Likely a builtin type. + value = t.String() + } else { + value = fmt.Sprintf("%s.%s", t.PkgPath(), t.Name()) + } + + if value == "" { + return ErrorTypeOther + } + return ErrorTypeKey.String(value) +} diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.34.0/exception.go b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/exception.go similarity index 98% rename from vendor/go.opentelemetry.io/otel/semconv/v1.34.0/exception.go rename to vendor/go.opentelemetry.io/otel/semconv/v1.37.0/exception.go index 88a998f1e5..e67469a4f6 100644 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.34.0/exception.go +++ b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/exception.go @@ -1,7 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -package semconv // import "go.opentelemetry.io/otel/semconv/v1.34.0" +package semconv // import "go.opentelemetry.io/otel/semconv/v1.37.0" const ( // ExceptionEventName is the name of the Span event representing an exception. diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/otelconv/metric.go b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/otelconv/metric.go new file mode 100644 index 0000000000..a78eafd1fa --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/otelconv/metric.go @@ -0,0 +1,2126 @@ +// 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 "otel" namespace. +package otelconv + +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" +) + +// ComponentTypeAttr is an attribute conforming to the otel.component.type +// semantic conventions. It represents a name identifying the type of the +// OpenTelemetry component. +type ComponentTypeAttr string + +var ( + // ComponentTypeBatchingSpanProcessor is the builtin SDK batching span + // processor. + ComponentTypeBatchingSpanProcessor ComponentTypeAttr = "batching_span_processor" + // ComponentTypeSimpleSpanProcessor is the builtin SDK simple span processor. + ComponentTypeSimpleSpanProcessor ComponentTypeAttr = "simple_span_processor" + // ComponentTypeBatchingLogProcessor is the builtin SDK batching log record + // processor. + ComponentTypeBatchingLogProcessor ComponentTypeAttr = "batching_log_processor" + // ComponentTypeSimpleLogProcessor is the builtin SDK simple log record + // processor. + ComponentTypeSimpleLogProcessor ComponentTypeAttr = "simple_log_processor" + // ComponentTypeOtlpGRPCSpanExporter is the OTLP span exporter over gRPC with + // protobuf serialization. + ComponentTypeOtlpGRPCSpanExporter ComponentTypeAttr = "otlp_grpc_span_exporter" + // ComponentTypeOtlpHTTPSpanExporter is the OTLP span exporter over HTTP with + // protobuf serialization. + ComponentTypeOtlpHTTPSpanExporter ComponentTypeAttr = "otlp_http_span_exporter" + // ComponentTypeOtlpHTTPJSONSpanExporter is the OTLP span exporter over HTTP + // with JSON serialization. + ComponentTypeOtlpHTTPJSONSpanExporter ComponentTypeAttr = "otlp_http_json_span_exporter" + // ComponentTypeZipkinHTTPSpanExporter is the zipkin span exporter over HTTP. + ComponentTypeZipkinHTTPSpanExporter ComponentTypeAttr = "zipkin_http_span_exporter" + // ComponentTypeOtlpGRPCLogExporter is the OTLP log record exporter over gRPC + // with protobuf serialization. + ComponentTypeOtlpGRPCLogExporter ComponentTypeAttr = "otlp_grpc_log_exporter" + // ComponentTypeOtlpHTTPLogExporter is the OTLP log record exporter over HTTP + // with protobuf serialization. + ComponentTypeOtlpHTTPLogExporter ComponentTypeAttr = "otlp_http_log_exporter" + // ComponentTypeOtlpHTTPJSONLogExporter is the OTLP log record exporter over + // HTTP with JSON serialization. + ComponentTypeOtlpHTTPJSONLogExporter ComponentTypeAttr = "otlp_http_json_log_exporter" + // ComponentTypePeriodicMetricReader is the builtin SDK periodically exporting + // metric reader. + ComponentTypePeriodicMetricReader ComponentTypeAttr = "periodic_metric_reader" + // ComponentTypeOtlpGRPCMetricExporter is the OTLP metric exporter over gRPC + // with protobuf serialization. + ComponentTypeOtlpGRPCMetricExporter ComponentTypeAttr = "otlp_grpc_metric_exporter" + // ComponentTypeOtlpHTTPMetricExporter is the OTLP metric exporter over HTTP + // with protobuf serialization. + ComponentTypeOtlpHTTPMetricExporter ComponentTypeAttr = "otlp_http_metric_exporter" + // ComponentTypeOtlpHTTPJSONMetricExporter is the OTLP metric exporter over HTTP + // with JSON serialization. + ComponentTypeOtlpHTTPJSONMetricExporter ComponentTypeAttr = "otlp_http_json_metric_exporter" + // ComponentTypePrometheusHTTPTextMetricExporter is the prometheus metric + // exporter over HTTP with the default text-based format. + ComponentTypePrometheusHTTPTextMetricExporter ComponentTypeAttr = "prometheus_http_text_metric_exporter" +) + +// SpanParentOriginAttr is an attribute conforming to the otel.span.parent.origin +// semantic conventions. It represents the determines whether the span has a +// parent span, and if so, [whether it is a remote parent]. +// +// [whether it is a remote parent]: https://opentelemetry.io/docs/specs/otel/trace/api/#isremote +type SpanParentOriginAttr string + +var ( + // SpanParentOriginNone is the span does not have a parent, it is a root span. + SpanParentOriginNone SpanParentOriginAttr = "none" + // SpanParentOriginLocal is the span has a parent and the parent's span context + // [isRemote()] is false. + // + // [isRemote()]: https://opentelemetry.io/docs/specs/otel/trace/api/#isremote + SpanParentOriginLocal SpanParentOriginAttr = "local" + // SpanParentOriginRemote is the span has a parent and the parent's span context + // [isRemote()] is true. + // + // [isRemote()]: https://opentelemetry.io/docs/specs/otel/trace/api/#isremote + SpanParentOriginRemote SpanParentOriginAttr = "remote" +) + +// SpanSamplingResultAttr is an attribute conforming to the +// otel.span.sampling_result semantic conventions. It represents the result value +// of the sampler for this span. +type SpanSamplingResultAttr string + +var ( + // SpanSamplingResultDrop is the span is not sampled and not recording. + SpanSamplingResultDrop SpanSamplingResultAttr = "DROP" + // SpanSamplingResultRecordOnly is the span is not sampled, but recording. + SpanSamplingResultRecordOnly SpanSamplingResultAttr = "RECORD_ONLY" + // SpanSamplingResultRecordAndSample is the span is sampled and recording. + SpanSamplingResultRecordAndSample SpanSamplingResultAttr = "RECORD_AND_SAMPLE" +) + +// RPCGRPCStatusCodeAttr is an attribute conforming to the rpc.grpc.status_code +// semantic conventions. It represents the gRPC status code of the last gRPC +// requests performed in scope of this export call. +type RPCGRPCStatusCodeAttr int64 + +var ( + // RPCGRPCStatusCodeOk is the OK. + RPCGRPCStatusCodeOk RPCGRPCStatusCodeAttr = 0 + // RPCGRPCStatusCodeCancelled is the CANCELLED. + RPCGRPCStatusCodeCancelled RPCGRPCStatusCodeAttr = 1 + // RPCGRPCStatusCodeUnknown is the UNKNOWN. + RPCGRPCStatusCodeUnknown RPCGRPCStatusCodeAttr = 2 + // RPCGRPCStatusCodeInvalidArgument is the INVALID_ARGUMENT. + RPCGRPCStatusCodeInvalidArgument RPCGRPCStatusCodeAttr = 3 + // RPCGRPCStatusCodeDeadlineExceeded is the DEADLINE_EXCEEDED. + RPCGRPCStatusCodeDeadlineExceeded RPCGRPCStatusCodeAttr = 4 + // RPCGRPCStatusCodeNotFound is the NOT_FOUND. + RPCGRPCStatusCodeNotFound RPCGRPCStatusCodeAttr = 5 + // RPCGRPCStatusCodeAlreadyExists is the ALREADY_EXISTS. + RPCGRPCStatusCodeAlreadyExists RPCGRPCStatusCodeAttr = 6 + // RPCGRPCStatusCodePermissionDenied is the PERMISSION_DENIED. + RPCGRPCStatusCodePermissionDenied RPCGRPCStatusCodeAttr = 7 + // RPCGRPCStatusCodeResourceExhausted is the RESOURCE_EXHAUSTED. + RPCGRPCStatusCodeResourceExhausted RPCGRPCStatusCodeAttr = 8 + // RPCGRPCStatusCodeFailedPrecondition is the FAILED_PRECONDITION. + RPCGRPCStatusCodeFailedPrecondition RPCGRPCStatusCodeAttr = 9 + // RPCGRPCStatusCodeAborted is the ABORTED. + RPCGRPCStatusCodeAborted RPCGRPCStatusCodeAttr = 10 + // RPCGRPCStatusCodeOutOfRange is the OUT_OF_RANGE. + RPCGRPCStatusCodeOutOfRange RPCGRPCStatusCodeAttr = 11 + // RPCGRPCStatusCodeUnimplemented is the UNIMPLEMENTED. + RPCGRPCStatusCodeUnimplemented RPCGRPCStatusCodeAttr = 12 + // RPCGRPCStatusCodeInternal is the INTERNAL. + RPCGRPCStatusCodeInternal RPCGRPCStatusCodeAttr = 13 + // RPCGRPCStatusCodeUnavailable is the UNAVAILABLE. + RPCGRPCStatusCodeUnavailable RPCGRPCStatusCodeAttr = 14 + // RPCGRPCStatusCodeDataLoss is the DATA_LOSS. + RPCGRPCStatusCodeDataLoss RPCGRPCStatusCodeAttr = 15 + // RPCGRPCStatusCodeUnauthenticated is the UNAUTHENTICATED. + RPCGRPCStatusCodeUnauthenticated RPCGRPCStatusCodeAttr = 16 +) + +// SDKExporterLogExported is an instrument used to record metric values +// conforming to the "otel.sdk.exporter.log.exported" semantic conventions. It +// represents the number of log records for which the export has finished, either +// successful or failed. +type SDKExporterLogExported struct { + metric.Int64Counter +} + +// NewSDKExporterLogExported returns a new SDKExporterLogExported instrument. +func NewSDKExporterLogExported( + m metric.Meter, + opt ...metric.Int64CounterOption, +) (SDKExporterLogExported, error) { + // Check if the meter is nil. + if m == nil { + return SDKExporterLogExported{noop.Int64Counter{}}, nil + } + + i, err := m.Int64Counter( + "otel.sdk.exporter.log.exported", + append([]metric.Int64CounterOption{ + metric.WithDescription("The number of log records for which the export has finished, either successful or failed."), + metric.WithUnit("{log_record}"), + }, opt...)..., + ) + if err != nil { + return SDKExporterLogExported{noop.Int64Counter{}}, err + } + return SDKExporterLogExported{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m SDKExporterLogExported) Inst() metric.Int64Counter { + return m.Int64Counter +} + +// Name returns the semantic convention name of the instrument. +func (SDKExporterLogExported) Name() string { + return "otel.sdk.exporter.log.exported" +} + +// Unit returns the semantic convention unit of the instrument +func (SDKExporterLogExported) Unit() string { + return "{log_record}" +} + +// Description returns the semantic convention description of the instrument +func (SDKExporterLogExported) Description() string { + return "The number of log records for which the export has finished, either successful or failed." +} + +// Add adds incr to the existing count for attrs. +// +// All additional attrs passed are included in the recorded value. +// +// For successful exports, `error.type` MUST NOT be set. For failed exports, +// `error.type` MUST contain the failure cause. +// For exporters with partial success semantics (e.g. OTLP with +// `rejected_log_records`), rejected log records MUST count as failed and only +// non-rejected log records count as success. +// If no rejection reason is available, `rejected` SHOULD be used as value for +// `error.type`. +func (m SDKExporterLogExported) Add( + ctx context.Context, + incr int64, + attrs ...attribute.KeyValue, +) { + if len(attrs) == 0 { + m.Int64Counter.Add(ctx, incr) + return + } + + o := addOptPool.Get().(*[]metric.AddOption) + defer func() { + *o = (*o)[:0] + addOptPool.Put(o) + }() + + *o = append( + *o, + metric.WithAttributes( + attrs..., + ), + ) + + m.Int64Counter.Add(ctx, incr, *o...) +} + +// AddSet adds incr to the existing count for set. +// +// For successful exports, `error.type` MUST NOT be set. For failed exports, +// `error.type` MUST contain the failure cause. +// For exporters with partial success semantics (e.g. OTLP with +// `rejected_log_records`), rejected log records MUST count as failed and only +// non-rejected log records count as success. +// If no rejection reason is available, `rejected` SHOULD be used as value for +// `error.type`. +func (m SDKExporterLogExported) AddSet(ctx context.Context, incr int64, set attribute.Set) { + if set.Len() == 0 { + m.Int64Counter.Add(ctx, incr) + return + } + + o := addOptPool.Get().(*[]metric.AddOption) + defer func() { + *o = (*o)[:0] + addOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Int64Counter.Add(ctx, incr, *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 (SDKExporterLogExported) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue { + return attribute.String("error.type", string(val)) +} + +// AttrComponentName returns an optional attribute for the "otel.component.name" +// semantic convention. It represents a name uniquely identifying the instance of +// the OpenTelemetry component within its containing SDK instance. +func (SDKExporterLogExported) AttrComponentName(val string) attribute.KeyValue { + return attribute.String("otel.component.name", val) +} + +// AttrComponentType returns an optional attribute for the "otel.component.type" +// semantic convention. It represents a name identifying the type of the +// OpenTelemetry component. +func (SDKExporterLogExported) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue { + return attribute.String("otel.component.type", string(val)) +} + +// AttrServerAddress returns an optional attribute for the "server.address" +// semantic convention. It represents the server domain name if available without +// reverse DNS lookup; otherwise, IP address or Unix domain socket name. +func (SDKExporterLogExported) 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 server port number. +func (SDKExporterLogExported) AttrServerPort(val int) attribute.KeyValue { + return attribute.Int("server.port", val) +} + +// SDKExporterLogInflight is an instrument used to record metric values +// conforming to the "otel.sdk.exporter.log.inflight" semantic conventions. It +// represents the number of log records which were passed to the exporter, but +// that have not been exported yet (neither successful, nor failed). +type SDKExporterLogInflight struct { + metric.Int64UpDownCounter +} + +// NewSDKExporterLogInflight returns a new SDKExporterLogInflight instrument. +func NewSDKExporterLogInflight( + m metric.Meter, + opt ...metric.Int64UpDownCounterOption, +) (SDKExporterLogInflight, error) { + // Check if the meter is nil. + if m == nil { + return SDKExporterLogInflight{noop.Int64UpDownCounter{}}, nil + } + + i, err := m.Int64UpDownCounter( + "otel.sdk.exporter.log.inflight", + append([]metric.Int64UpDownCounterOption{ + metric.WithDescription("The number of log records which were passed to the exporter, but that have not been exported yet (neither successful, nor failed)."), + metric.WithUnit("{log_record}"), + }, opt...)..., + ) + if err != nil { + return SDKExporterLogInflight{noop.Int64UpDownCounter{}}, err + } + return SDKExporterLogInflight{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m SDKExporterLogInflight) Inst() metric.Int64UpDownCounter { + return m.Int64UpDownCounter +} + +// Name returns the semantic convention name of the instrument. +func (SDKExporterLogInflight) Name() string { + return "otel.sdk.exporter.log.inflight" +} + +// Unit returns the semantic convention unit of the instrument +func (SDKExporterLogInflight) Unit() string { + return "{log_record}" +} + +// Description returns the semantic convention description of the instrument +func (SDKExporterLogInflight) Description() string { + return "The number of log records which were passed to the exporter, but that have not been exported yet (neither successful, nor failed)." +} + +// Add adds incr to the existing count for attrs. +// +// All additional attrs passed are included in the recorded value. +// +// For successful exports, `error.type` MUST NOT be set. For failed exports, +// `error.type` MUST contain the failure cause. +func (m SDKExporterLogInflight) Add( + ctx context.Context, + incr int64, + 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( + attrs..., + ), + ) + + m.Int64UpDownCounter.Add(ctx, incr, *o...) +} + +// AddSet adds incr to the existing count for set. +// +// For successful exports, `error.type` MUST NOT be set. For failed exports, +// `error.type` MUST contain the failure cause. +func (m SDKExporterLogInflight) 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...) +} + +// AttrComponentName returns an optional attribute for the "otel.component.name" +// semantic convention. It represents a name uniquely identifying the instance of +// the OpenTelemetry component within its containing SDK instance. +func (SDKExporterLogInflight) AttrComponentName(val string) attribute.KeyValue { + return attribute.String("otel.component.name", val) +} + +// AttrComponentType returns an optional attribute for the "otel.component.type" +// semantic convention. It represents a name identifying the type of the +// OpenTelemetry component. +func (SDKExporterLogInflight) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue { + return attribute.String("otel.component.type", string(val)) +} + +// AttrServerAddress returns an optional attribute for the "server.address" +// semantic convention. It represents the server domain name if available without +// reverse DNS lookup; otherwise, IP address or Unix domain socket name. +func (SDKExporterLogInflight) 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 server port number. +func (SDKExporterLogInflight) AttrServerPort(val int) attribute.KeyValue { + return attribute.Int("server.port", val) +} + +// SDKExporterMetricDataPointExported is an instrument used to record metric +// values conforming to the "otel.sdk.exporter.metric_data_point.exported" +// semantic conventions. It represents the number of metric data points for which +// the export has finished, either successful or failed. +type SDKExporterMetricDataPointExported struct { + metric.Int64Counter +} + +// NewSDKExporterMetricDataPointExported returns a new +// SDKExporterMetricDataPointExported instrument. +func NewSDKExporterMetricDataPointExported( + m metric.Meter, + opt ...metric.Int64CounterOption, +) (SDKExporterMetricDataPointExported, error) { + // Check if the meter is nil. + if m == nil { + return SDKExporterMetricDataPointExported{noop.Int64Counter{}}, nil + } + + i, err := m.Int64Counter( + "otel.sdk.exporter.metric_data_point.exported", + append([]metric.Int64CounterOption{ + metric.WithDescription("The number of metric data points for which the export has finished, either successful or failed."), + metric.WithUnit("{data_point}"), + }, opt...)..., + ) + if err != nil { + return SDKExporterMetricDataPointExported{noop.Int64Counter{}}, err + } + return SDKExporterMetricDataPointExported{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m SDKExporterMetricDataPointExported) Inst() metric.Int64Counter { + return m.Int64Counter +} + +// Name returns the semantic convention name of the instrument. +func (SDKExporterMetricDataPointExported) Name() string { + return "otel.sdk.exporter.metric_data_point.exported" +} + +// Unit returns the semantic convention unit of the instrument +func (SDKExporterMetricDataPointExported) Unit() string { + return "{data_point}" +} + +// Description returns the semantic convention description of the instrument +func (SDKExporterMetricDataPointExported) Description() string { + return "The number of metric data points for which the export has finished, either successful or failed." +} + +// Add adds incr to the existing count for attrs. +// +// All additional attrs passed are included in the recorded value. +// +// For successful exports, `error.type` MUST NOT be set. For failed exports, +// `error.type` MUST contain the failure cause. +// For exporters with partial success semantics (e.g. OTLP with +// `rejected_data_points`), rejected data points MUST count as failed and only +// non-rejected data points count as success. +// If no rejection reason is available, `rejected` SHOULD be used as value for +// `error.type`. +func (m SDKExporterMetricDataPointExported) Add( + ctx context.Context, + incr int64, + attrs ...attribute.KeyValue, +) { + if len(attrs) == 0 { + m.Int64Counter.Add(ctx, incr) + return + } + + o := addOptPool.Get().(*[]metric.AddOption) + defer func() { + *o = (*o)[:0] + addOptPool.Put(o) + }() + + *o = append( + *o, + metric.WithAttributes( + attrs..., + ), + ) + + m.Int64Counter.Add(ctx, incr, *o...) +} + +// AddSet adds incr to the existing count for set. +// +// For successful exports, `error.type` MUST NOT be set. For failed exports, +// `error.type` MUST contain the failure cause. +// For exporters with partial success semantics (e.g. OTLP with +// `rejected_data_points`), rejected data points MUST count as failed and only +// non-rejected data points count as success. +// If no rejection reason is available, `rejected` SHOULD be used as value for +// `error.type`. +func (m SDKExporterMetricDataPointExported) AddSet(ctx context.Context, incr int64, set attribute.Set) { + if set.Len() == 0 { + m.Int64Counter.Add(ctx, incr) + return + } + + o := addOptPool.Get().(*[]metric.AddOption) + defer func() { + *o = (*o)[:0] + addOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Int64Counter.Add(ctx, incr, *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 (SDKExporterMetricDataPointExported) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue { + return attribute.String("error.type", string(val)) +} + +// AttrComponentName returns an optional attribute for the "otel.component.name" +// semantic convention. It represents a name uniquely identifying the instance of +// the OpenTelemetry component within its containing SDK instance. +func (SDKExporterMetricDataPointExported) AttrComponentName(val string) attribute.KeyValue { + return attribute.String("otel.component.name", val) +} + +// AttrComponentType returns an optional attribute for the "otel.component.type" +// semantic convention. It represents a name identifying the type of the +// OpenTelemetry component. +func (SDKExporterMetricDataPointExported) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue { + return attribute.String("otel.component.type", string(val)) +} + +// AttrServerAddress returns an optional attribute for the "server.address" +// semantic convention. It represents the server domain name if available without +// reverse DNS lookup; otherwise, IP address or Unix domain socket name. +func (SDKExporterMetricDataPointExported) 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 server port number. +func (SDKExporterMetricDataPointExported) AttrServerPort(val int) attribute.KeyValue { + return attribute.Int("server.port", val) +} + +// SDKExporterMetricDataPointInflight is an instrument used to record metric +// values conforming to the "otel.sdk.exporter.metric_data_point.inflight" +// semantic conventions. It represents the number of metric data points which +// were passed to the exporter, but that have not been exported yet (neither +// successful, nor failed). +type SDKExporterMetricDataPointInflight struct { + metric.Int64UpDownCounter +} + +// NewSDKExporterMetricDataPointInflight returns a new +// SDKExporterMetricDataPointInflight instrument. +func NewSDKExporterMetricDataPointInflight( + m metric.Meter, + opt ...metric.Int64UpDownCounterOption, +) (SDKExporterMetricDataPointInflight, error) { + // Check if the meter is nil. + if m == nil { + return SDKExporterMetricDataPointInflight{noop.Int64UpDownCounter{}}, nil + } + + i, err := m.Int64UpDownCounter( + "otel.sdk.exporter.metric_data_point.inflight", + append([]metric.Int64UpDownCounterOption{ + metric.WithDescription("The number of metric data points which were passed to the exporter, but that have not been exported yet (neither successful, nor failed)."), + metric.WithUnit("{data_point}"), + }, opt...)..., + ) + if err != nil { + return SDKExporterMetricDataPointInflight{noop.Int64UpDownCounter{}}, err + } + return SDKExporterMetricDataPointInflight{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m SDKExporterMetricDataPointInflight) Inst() metric.Int64UpDownCounter { + return m.Int64UpDownCounter +} + +// Name returns the semantic convention name of the instrument. +func (SDKExporterMetricDataPointInflight) Name() string { + return "otel.sdk.exporter.metric_data_point.inflight" +} + +// Unit returns the semantic convention unit of the instrument +func (SDKExporterMetricDataPointInflight) Unit() string { + return "{data_point}" +} + +// Description returns the semantic convention description of the instrument +func (SDKExporterMetricDataPointInflight) Description() string { + return "The number of metric data points which were passed to the exporter, but that have not been exported yet (neither successful, nor failed)." +} + +// Add adds incr to the existing count for attrs. +// +// All additional attrs passed are included in the recorded value. +// +// For successful exports, `error.type` MUST NOT be set. For failed exports, +// `error.type` MUST contain the failure cause. +func (m SDKExporterMetricDataPointInflight) Add( + ctx context.Context, + incr int64, + 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( + attrs..., + ), + ) + + m.Int64UpDownCounter.Add(ctx, incr, *o...) +} + +// AddSet adds incr to the existing count for set. +// +// For successful exports, `error.type` MUST NOT be set. For failed exports, +// `error.type` MUST contain the failure cause. +func (m SDKExporterMetricDataPointInflight) 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...) +} + +// AttrComponentName returns an optional attribute for the "otel.component.name" +// semantic convention. It represents a name uniquely identifying the instance of +// the OpenTelemetry component within its containing SDK instance. +func (SDKExporterMetricDataPointInflight) AttrComponentName(val string) attribute.KeyValue { + return attribute.String("otel.component.name", val) +} + +// AttrComponentType returns an optional attribute for the "otel.component.type" +// semantic convention. It represents a name identifying the type of the +// OpenTelemetry component. +func (SDKExporterMetricDataPointInflight) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue { + return attribute.String("otel.component.type", string(val)) +} + +// AttrServerAddress returns an optional attribute for the "server.address" +// semantic convention. It represents the server domain name if available without +// reverse DNS lookup; otherwise, IP address or Unix domain socket name. +func (SDKExporterMetricDataPointInflight) 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 server port number. +func (SDKExporterMetricDataPointInflight) AttrServerPort(val int) attribute.KeyValue { + return attribute.Int("server.port", val) +} + +// SDKExporterOperationDuration is an instrument used to record metric values +// conforming to the "otel.sdk.exporter.operation.duration" semantic conventions. +// It represents the duration of exporting a batch of telemetry records. +type SDKExporterOperationDuration struct { + metric.Float64Histogram +} + +// NewSDKExporterOperationDuration returns a new SDKExporterOperationDuration +// instrument. +func NewSDKExporterOperationDuration( + m metric.Meter, + opt ...metric.Float64HistogramOption, +) (SDKExporterOperationDuration, error) { + // Check if the meter is nil. + if m == nil { + return SDKExporterOperationDuration{noop.Float64Histogram{}}, nil + } + + i, err := m.Float64Histogram( + "otel.sdk.exporter.operation.duration", + append([]metric.Float64HistogramOption{ + metric.WithDescription("The duration of exporting a batch of telemetry records."), + metric.WithUnit("s"), + }, opt...)..., + ) + if err != nil { + return SDKExporterOperationDuration{noop.Float64Histogram{}}, err + } + return SDKExporterOperationDuration{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m SDKExporterOperationDuration) Inst() metric.Float64Histogram { + return m.Float64Histogram +} + +// Name returns the semantic convention name of the instrument. +func (SDKExporterOperationDuration) Name() string { + return "otel.sdk.exporter.operation.duration" +} + +// Unit returns the semantic convention unit of the instrument +func (SDKExporterOperationDuration) Unit() string { + return "s" +} + +// Description returns the semantic convention description of the instrument +func (SDKExporterOperationDuration) Description() string { + return "The duration of exporting a batch of telemetry records." +} + +// Record records val to the current distribution for attrs. +// +// All additional attrs passed are included in the recorded value. +// +// This metric defines successful operations using the full success definitions +// for [http] +// and [grpc]. Anything else is defined as an unsuccessful operation. For +// successful +// operations, `error.type` MUST NOT be set. For unsuccessful export operations, +// `error.type` MUST contain a relevant failure cause. +// +// [http]: https://github.com/open-telemetry/opentelemetry-proto/blob/v1.5.0/docs/specification.md#full-success-1 +// [grpc]: https://github.com/open-telemetry/opentelemetry-proto/blob/v1.5.0/docs/specification.md#full-success +func (m SDKExporterOperationDuration) 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. +// +// This metric defines successful operations using the full success definitions +// for [http] +// and [grpc]. Anything else is defined as an unsuccessful operation. For +// successful +// operations, `error.type` MUST NOT be set. For unsuccessful export operations, +// `error.type` MUST contain a relevant failure cause. +// +// [http]: https://github.com/open-telemetry/opentelemetry-proto/blob/v1.5.0/docs/specification.md#full-success-1 +// [grpc]: https://github.com/open-telemetry/opentelemetry-proto/blob/v1.5.0/docs/specification.md#full-success +func (m SDKExporterOperationDuration) 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 (SDKExporterOperationDuration) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue { + return attribute.String("error.type", string(val)) +} + +// AttrHTTPResponseStatusCode returns an optional attribute for the +// "http.response.status_code" semantic convention. It represents the HTTP status +// code of the last HTTP request performed in scope of this export call. +func (SDKExporterOperationDuration) AttrHTTPResponseStatusCode(val int) attribute.KeyValue { + return attribute.Int("http.response.status_code", val) +} + +// AttrComponentName returns an optional attribute for the "otel.component.name" +// semantic convention. It represents a name uniquely identifying the instance of +// the OpenTelemetry component within its containing SDK instance. +func (SDKExporterOperationDuration) AttrComponentName(val string) attribute.KeyValue { + return attribute.String("otel.component.name", val) +} + +// AttrComponentType returns an optional attribute for the "otel.component.type" +// semantic convention. It represents a name identifying the type of the +// OpenTelemetry component. +func (SDKExporterOperationDuration) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue { + return attribute.String("otel.component.type", string(val)) +} + +// AttrRPCGRPCStatusCode returns an optional attribute for the +// "rpc.grpc.status_code" semantic convention. It represents the gRPC status code +// of the last gRPC requests performed in scope of this export call. +func (SDKExporterOperationDuration) AttrRPCGRPCStatusCode(val RPCGRPCStatusCodeAttr) attribute.KeyValue { + return attribute.Int64("rpc.grpc.status_code", int64(val)) +} + +// AttrServerAddress returns an optional attribute for the "server.address" +// semantic convention. It represents the server domain name if available without +// reverse DNS lookup; otherwise, IP address or Unix domain socket name. +func (SDKExporterOperationDuration) 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 server port number. +func (SDKExporterOperationDuration) AttrServerPort(val int) attribute.KeyValue { + return attribute.Int("server.port", val) +} + +// SDKExporterSpanExported is an instrument used to record metric values +// conforming to the "otel.sdk.exporter.span.exported" semantic conventions. It +// represents the number of spans for which the export has finished, either +// successful or failed. +type SDKExporterSpanExported struct { + metric.Int64Counter +} + +// NewSDKExporterSpanExported returns a new SDKExporterSpanExported instrument. +func NewSDKExporterSpanExported( + m metric.Meter, + opt ...metric.Int64CounterOption, +) (SDKExporterSpanExported, error) { + // Check if the meter is nil. + if m == nil { + return SDKExporterSpanExported{noop.Int64Counter{}}, nil + } + + i, err := m.Int64Counter( + "otel.sdk.exporter.span.exported", + append([]metric.Int64CounterOption{ + metric.WithDescription("The number of spans for which the export has finished, either successful or failed."), + metric.WithUnit("{span}"), + }, opt...)..., + ) + if err != nil { + return SDKExporterSpanExported{noop.Int64Counter{}}, err + } + return SDKExporterSpanExported{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m SDKExporterSpanExported) Inst() metric.Int64Counter { + return m.Int64Counter +} + +// Name returns the semantic convention name of the instrument. +func (SDKExporterSpanExported) Name() string { + return "otel.sdk.exporter.span.exported" +} + +// Unit returns the semantic convention unit of the instrument +func (SDKExporterSpanExported) Unit() string { + return "{span}" +} + +// Description returns the semantic convention description of the instrument +func (SDKExporterSpanExported) Description() string { + return "The number of spans for which the export has finished, either successful or failed." +} + +// Add adds incr to the existing count for attrs. +// +// All additional attrs passed are included in the recorded value. +// +// For successful exports, `error.type` MUST NOT be set. For failed exports, +// `error.type` MUST contain the failure cause. +// For exporters with partial success semantics (e.g. OTLP with `rejected_spans` +// ), rejected spans MUST count as failed and only non-rejected spans count as +// success. +// If no rejection reason is available, `rejected` SHOULD be used as value for +// `error.type`. +func (m SDKExporterSpanExported) Add( + ctx context.Context, + incr int64, + attrs ...attribute.KeyValue, +) { + if len(attrs) == 0 { + m.Int64Counter.Add(ctx, incr) + return + } + + o := addOptPool.Get().(*[]metric.AddOption) + defer func() { + *o = (*o)[:0] + addOptPool.Put(o) + }() + + *o = append( + *o, + metric.WithAttributes( + attrs..., + ), + ) + + m.Int64Counter.Add(ctx, incr, *o...) +} + +// AddSet adds incr to the existing count for set. +// +// For successful exports, `error.type` MUST NOT be set. For failed exports, +// `error.type` MUST contain the failure cause. +// For exporters with partial success semantics (e.g. OTLP with `rejected_spans` +// ), rejected spans MUST count as failed and only non-rejected spans count as +// success. +// If no rejection reason is available, `rejected` SHOULD be used as value for +// `error.type`. +func (m SDKExporterSpanExported) AddSet(ctx context.Context, incr int64, set attribute.Set) { + if set.Len() == 0 { + m.Int64Counter.Add(ctx, incr) + return + } + + o := addOptPool.Get().(*[]metric.AddOption) + defer func() { + *o = (*o)[:0] + addOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Int64Counter.Add(ctx, incr, *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 (SDKExporterSpanExported) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue { + return attribute.String("error.type", string(val)) +} + +// AttrComponentName returns an optional attribute for the "otel.component.name" +// semantic convention. It represents a name uniquely identifying the instance of +// the OpenTelemetry component within its containing SDK instance. +func (SDKExporterSpanExported) AttrComponentName(val string) attribute.KeyValue { + return attribute.String("otel.component.name", val) +} + +// AttrComponentType returns an optional attribute for the "otel.component.type" +// semantic convention. It represents a name identifying the type of the +// OpenTelemetry component. +func (SDKExporterSpanExported) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue { + return attribute.String("otel.component.type", string(val)) +} + +// AttrServerAddress returns an optional attribute for the "server.address" +// semantic convention. It represents the server domain name if available without +// reverse DNS lookup; otherwise, IP address or Unix domain socket name. +func (SDKExporterSpanExported) 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 server port number. +func (SDKExporterSpanExported) AttrServerPort(val int) attribute.KeyValue { + return attribute.Int("server.port", val) +} + +// SDKExporterSpanInflight is an instrument used to record metric values +// conforming to the "otel.sdk.exporter.span.inflight" semantic conventions. It +// represents the number of spans which were passed to the exporter, but that +// have not been exported yet (neither successful, nor failed). +type SDKExporterSpanInflight struct { + metric.Int64UpDownCounter +} + +// NewSDKExporterSpanInflight returns a new SDKExporterSpanInflight instrument. +func NewSDKExporterSpanInflight( + m metric.Meter, + opt ...metric.Int64UpDownCounterOption, +) (SDKExporterSpanInflight, error) { + // Check if the meter is nil. + if m == nil { + return SDKExporterSpanInflight{noop.Int64UpDownCounter{}}, nil + } + + i, err := m.Int64UpDownCounter( + "otel.sdk.exporter.span.inflight", + append([]metric.Int64UpDownCounterOption{ + metric.WithDescription("The number of spans which were passed to the exporter, but that have not been exported yet (neither successful, nor failed)."), + metric.WithUnit("{span}"), + }, opt...)..., + ) + if err != nil { + return SDKExporterSpanInflight{noop.Int64UpDownCounter{}}, err + } + return SDKExporterSpanInflight{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m SDKExporterSpanInflight) Inst() metric.Int64UpDownCounter { + return m.Int64UpDownCounter +} + +// Name returns the semantic convention name of the instrument. +func (SDKExporterSpanInflight) Name() string { + return "otel.sdk.exporter.span.inflight" +} + +// Unit returns the semantic convention unit of the instrument +func (SDKExporterSpanInflight) Unit() string { + return "{span}" +} + +// Description returns the semantic convention description of the instrument +func (SDKExporterSpanInflight) Description() string { + return "The number of spans which were passed to the exporter, but that have not been exported yet (neither successful, nor failed)." +} + +// Add adds incr to the existing count for attrs. +// +// All additional attrs passed are included in the recorded value. +// +// For successful exports, `error.type` MUST NOT be set. For failed exports, +// `error.type` MUST contain the failure cause. +func (m SDKExporterSpanInflight) Add( + ctx context.Context, + incr int64, + 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( + attrs..., + ), + ) + + m.Int64UpDownCounter.Add(ctx, incr, *o...) +} + +// AddSet adds incr to the existing count for set. +// +// For successful exports, `error.type` MUST NOT be set. For failed exports, +// `error.type` MUST contain the failure cause. +func (m SDKExporterSpanInflight) 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...) +} + +// AttrComponentName returns an optional attribute for the "otel.component.name" +// semantic convention. It represents a name uniquely identifying the instance of +// the OpenTelemetry component within its containing SDK instance. +func (SDKExporterSpanInflight) AttrComponentName(val string) attribute.KeyValue { + return attribute.String("otel.component.name", val) +} + +// AttrComponentType returns an optional attribute for the "otel.component.type" +// semantic convention. It represents a name identifying the type of the +// OpenTelemetry component. +func (SDKExporterSpanInflight) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue { + return attribute.String("otel.component.type", string(val)) +} + +// AttrServerAddress returns an optional attribute for the "server.address" +// semantic convention. It represents the server domain name if available without +// reverse DNS lookup; otherwise, IP address or Unix domain socket name. +func (SDKExporterSpanInflight) 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 server port number. +func (SDKExporterSpanInflight) AttrServerPort(val int) attribute.KeyValue { + return attribute.Int("server.port", val) +} + +// SDKLogCreated is an instrument used to record metric values conforming to the +// "otel.sdk.log.created" semantic conventions. It represents the number of logs +// submitted to enabled SDK Loggers. +type SDKLogCreated struct { + metric.Int64Counter +} + +// NewSDKLogCreated returns a new SDKLogCreated instrument. +func NewSDKLogCreated( + m metric.Meter, + opt ...metric.Int64CounterOption, +) (SDKLogCreated, error) { + // Check if the meter is nil. + if m == nil { + return SDKLogCreated{noop.Int64Counter{}}, nil + } + + i, err := m.Int64Counter( + "otel.sdk.log.created", + append([]metric.Int64CounterOption{ + metric.WithDescription("The number of logs submitted to enabled SDK Loggers."), + metric.WithUnit("{log_record}"), + }, opt...)..., + ) + if err != nil { + return SDKLogCreated{noop.Int64Counter{}}, err + } + return SDKLogCreated{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m SDKLogCreated) Inst() metric.Int64Counter { + return m.Int64Counter +} + +// Name returns the semantic convention name of the instrument. +func (SDKLogCreated) Name() string { + return "otel.sdk.log.created" +} + +// Unit returns the semantic convention unit of the instrument +func (SDKLogCreated) Unit() string { + return "{log_record}" +} + +// Description returns the semantic convention description of the instrument +func (SDKLogCreated) Description() string { + return "The number of logs submitted to enabled SDK Loggers." +} + +// Add adds incr to the existing count for attrs. +func (m SDKLogCreated) Add(ctx context.Context, incr int64, attrs ...attribute.KeyValue) { + if len(attrs) == 0 { + m.Int64Counter.Add(ctx, incr) + return + } + + o := addOptPool.Get().(*[]metric.AddOption) + defer func() { + *o = (*o)[:0] + addOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributes(attrs...)) + m.Int64Counter.Add(ctx, incr, *o...) +} + +// AddSet adds incr to the existing count for set. +func (m SDKLogCreated) AddSet(ctx context.Context, incr int64, set attribute.Set) { + if set.Len() == 0 { + m.Int64Counter.Add(ctx, incr) + return + } + + o := addOptPool.Get().(*[]metric.AddOption) + defer func() { + *o = (*o)[:0] + addOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Int64Counter.Add(ctx, incr, *o...) +} + +// SDKMetricReaderCollectionDuration is an instrument used to record metric +// values conforming to the "otel.sdk.metric_reader.collection.duration" semantic +// conventions. It represents the duration of the collect operation of the metric +// reader. +type SDKMetricReaderCollectionDuration struct { + metric.Float64Histogram +} + +// NewSDKMetricReaderCollectionDuration returns a new +// SDKMetricReaderCollectionDuration instrument. +func NewSDKMetricReaderCollectionDuration( + m metric.Meter, + opt ...metric.Float64HistogramOption, +) (SDKMetricReaderCollectionDuration, error) { + // Check if the meter is nil. + if m == nil { + return SDKMetricReaderCollectionDuration{noop.Float64Histogram{}}, nil + } + + i, err := m.Float64Histogram( + "otel.sdk.metric_reader.collection.duration", + append([]metric.Float64HistogramOption{ + metric.WithDescription("The duration of the collect operation of the metric reader."), + metric.WithUnit("s"), + }, opt...)..., + ) + if err != nil { + return SDKMetricReaderCollectionDuration{noop.Float64Histogram{}}, err + } + return SDKMetricReaderCollectionDuration{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m SDKMetricReaderCollectionDuration) Inst() metric.Float64Histogram { + return m.Float64Histogram +} + +// Name returns the semantic convention name of the instrument. +func (SDKMetricReaderCollectionDuration) Name() string { + return "otel.sdk.metric_reader.collection.duration" +} + +// Unit returns the semantic convention unit of the instrument +func (SDKMetricReaderCollectionDuration) Unit() string { + return "s" +} + +// Description returns the semantic convention description of the instrument +func (SDKMetricReaderCollectionDuration) Description() string { + return "The duration of the collect operation of the metric reader." +} + +// Record records val to the current distribution for attrs. +// +// All additional attrs passed are included in the recorded value. +// +// For successful collections, `error.type` MUST NOT be set. For failed +// collections, `error.type` SHOULD contain the failure cause. +// It can happen that metrics collection is successful for some MetricProducers, +// while others fail. In that case `error.type` SHOULD be set to any of the +// failure causes. +func (m SDKMetricReaderCollectionDuration) 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. +// +// For successful collections, `error.type` MUST NOT be set. For failed +// collections, `error.type` SHOULD contain the failure cause. +// It can happen that metrics collection is successful for some MetricProducers, +// while others fail. In that case `error.type` SHOULD be set to any of the +// failure causes. +func (m SDKMetricReaderCollectionDuration) 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 (SDKMetricReaderCollectionDuration) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue { + return attribute.String("error.type", string(val)) +} + +// AttrComponentName returns an optional attribute for the "otel.component.name" +// semantic convention. It represents a name uniquely identifying the instance of +// the OpenTelemetry component within its containing SDK instance. +func (SDKMetricReaderCollectionDuration) AttrComponentName(val string) attribute.KeyValue { + return attribute.String("otel.component.name", val) +} + +// AttrComponentType returns an optional attribute for the "otel.component.type" +// semantic convention. It represents a name identifying the type of the +// OpenTelemetry component. +func (SDKMetricReaderCollectionDuration) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue { + return attribute.String("otel.component.type", string(val)) +} + +// SDKProcessorLogProcessed is an instrument used to record metric values +// conforming to the "otel.sdk.processor.log.processed" semantic conventions. It +// represents the number of log records for which the processing has finished, +// either successful or failed. +type SDKProcessorLogProcessed struct { + metric.Int64Counter +} + +// NewSDKProcessorLogProcessed returns a new SDKProcessorLogProcessed instrument. +func NewSDKProcessorLogProcessed( + m metric.Meter, + opt ...metric.Int64CounterOption, +) (SDKProcessorLogProcessed, error) { + // Check if the meter is nil. + if m == nil { + return SDKProcessorLogProcessed{noop.Int64Counter{}}, nil + } + + i, err := m.Int64Counter( + "otel.sdk.processor.log.processed", + append([]metric.Int64CounterOption{ + metric.WithDescription("The number of log records for which the processing has finished, either successful or failed."), + metric.WithUnit("{log_record}"), + }, opt...)..., + ) + if err != nil { + return SDKProcessorLogProcessed{noop.Int64Counter{}}, err + } + return SDKProcessorLogProcessed{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m SDKProcessorLogProcessed) Inst() metric.Int64Counter { + return m.Int64Counter +} + +// Name returns the semantic convention name of the instrument. +func (SDKProcessorLogProcessed) Name() string { + return "otel.sdk.processor.log.processed" +} + +// Unit returns the semantic convention unit of the instrument +func (SDKProcessorLogProcessed) Unit() string { + return "{log_record}" +} + +// Description returns the semantic convention description of the instrument +func (SDKProcessorLogProcessed) Description() string { + return "The number of log records for which the processing has finished, either successful or failed." +} + +// Add adds incr to the existing count for attrs. +// +// All additional attrs passed are included in the recorded value. +// +// For successful processing, `error.type` MUST NOT be set. For failed +// processing, `error.type` MUST contain the failure cause. +// For the SDK Simple and Batching Log Record Processor a log record is +// considered to be processed already when it has been submitted to the exporter, +// not when the corresponding export call has finished. +func (m SDKProcessorLogProcessed) Add( + ctx context.Context, + incr int64, + attrs ...attribute.KeyValue, +) { + if len(attrs) == 0 { + m.Int64Counter.Add(ctx, incr) + return + } + + o := addOptPool.Get().(*[]metric.AddOption) + defer func() { + *o = (*o)[:0] + addOptPool.Put(o) + }() + + *o = append( + *o, + metric.WithAttributes( + attrs..., + ), + ) + + m.Int64Counter.Add(ctx, incr, *o...) +} + +// AddSet adds incr to the existing count for set. +// +// For successful processing, `error.type` MUST NOT be set. For failed +// processing, `error.type` MUST contain the failure cause. +// For the SDK Simple and Batching Log Record Processor a log record is +// considered to be processed already when it has been submitted to the exporter, +// not when the corresponding export call has finished. +func (m SDKProcessorLogProcessed) AddSet(ctx context.Context, incr int64, set attribute.Set) { + if set.Len() == 0 { + m.Int64Counter.Add(ctx, incr) + return + } + + o := addOptPool.Get().(*[]metric.AddOption) + defer func() { + *o = (*o)[:0] + addOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Int64Counter.Add(ctx, incr, *o...) +} + +// AttrErrorType returns an optional attribute for the "error.type" semantic +// convention. It represents a low-cardinality description of the failure reason. +// SDK Batching Log Record Processors MUST use `queue_full` for log records +// dropped due to a full queue. +func (SDKProcessorLogProcessed) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue { + return attribute.String("error.type", string(val)) +} + +// AttrComponentName returns an optional attribute for the "otel.component.name" +// semantic convention. It represents a name uniquely identifying the instance of +// the OpenTelemetry component within its containing SDK instance. +func (SDKProcessorLogProcessed) AttrComponentName(val string) attribute.KeyValue { + return attribute.String("otel.component.name", val) +} + +// AttrComponentType returns an optional attribute for the "otel.component.type" +// semantic convention. It represents a name identifying the type of the +// OpenTelemetry component. +func (SDKProcessorLogProcessed) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue { + return attribute.String("otel.component.type", string(val)) +} + +// SDKProcessorLogQueueCapacity is an instrument used to record metric values +// conforming to the "otel.sdk.processor.log.queue.capacity" semantic +// conventions. It represents the maximum number of log records the queue of a +// given instance of an SDK Log Record processor can hold. +type SDKProcessorLogQueueCapacity struct { + metric.Int64ObservableUpDownCounter +} + +// NewSDKProcessorLogQueueCapacity returns a new SDKProcessorLogQueueCapacity +// instrument. +func NewSDKProcessorLogQueueCapacity( + m metric.Meter, + opt ...metric.Int64ObservableUpDownCounterOption, +) (SDKProcessorLogQueueCapacity, error) { + // Check if the meter is nil. + if m == nil { + return SDKProcessorLogQueueCapacity{noop.Int64ObservableUpDownCounter{}}, nil + } + + i, err := m.Int64ObservableUpDownCounter( + "otel.sdk.processor.log.queue.capacity", + append([]metric.Int64ObservableUpDownCounterOption{ + metric.WithDescription("The maximum number of log records the queue of a given instance of an SDK Log Record processor can hold."), + metric.WithUnit("{log_record}"), + }, opt...)..., + ) + if err != nil { + return SDKProcessorLogQueueCapacity{noop.Int64ObservableUpDownCounter{}}, err + } + return SDKProcessorLogQueueCapacity{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m SDKProcessorLogQueueCapacity) Inst() metric.Int64ObservableUpDownCounter { + return m.Int64ObservableUpDownCounter +} + +// Name returns the semantic convention name of the instrument. +func (SDKProcessorLogQueueCapacity) Name() string { + return "otel.sdk.processor.log.queue.capacity" +} + +// Unit returns the semantic convention unit of the instrument +func (SDKProcessorLogQueueCapacity) Unit() string { + return "{log_record}" +} + +// Description returns the semantic convention description of the instrument +func (SDKProcessorLogQueueCapacity) Description() string { + return "The maximum number of log records the queue of a given instance of an SDK Log Record processor can hold." +} + +// AttrComponentName returns an optional attribute for the "otel.component.name" +// semantic convention. It represents a name uniquely identifying the instance of +// the OpenTelemetry component within its containing SDK instance. +func (SDKProcessorLogQueueCapacity) AttrComponentName(val string) attribute.KeyValue { + return attribute.String("otel.component.name", val) +} + +// AttrComponentType returns an optional attribute for the "otel.component.type" +// semantic convention. It represents a name identifying the type of the +// OpenTelemetry component. +func (SDKProcessorLogQueueCapacity) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue { + return attribute.String("otel.component.type", string(val)) +} + +// SDKProcessorLogQueueSize is an instrument used to record metric values +// conforming to the "otel.sdk.processor.log.queue.size" semantic conventions. It +// represents the number of log records in the queue of a given instance of an +// SDK log processor. +type SDKProcessorLogQueueSize struct { + metric.Int64ObservableUpDownCounter +} + +// NewSDKProcessorLogQueueSize returns a new SDKProcessorLogQueueSize instrument. +func NewSDKProcessorLogQueueSize( + m metric.Meter, + opt ...metric.Int64ObservableUpDownCounterOption, +) (SDKProcessorLogQueueSize, error) { + // Check if the meter is nil. + if m == nil { + return SDKProcessorLogQueueSize{noop.Int64ObservableUpDownCounter{}}, nil + } + + i, err := m.Int64ObservableUpDownCounter( + "otel.sdk.processor.log.queue.size", + append([]metric.Int64ObservableUpDownCounterOption{ + metric.WithDescription("The number of log records in the queue of a given instance of an SDK log processor."), + metric.WithUnit("{log_record}"), + }, opt...)..., + ) + if err != nil { + return SDKProcessorLogQueueSize{noop.Int64ObservableUpDownCounter{}}, err + } + return SDKProcessorLogQueueSize{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m SDKProcessorLogQueueSize) Inst() metric.Int64ObservableUpDownCounter { + return m.Int64ObservableUpDownCounter +} + +// Name returns the semantic convention name of the instrument. +func (SDKProcessorLogQueueSize) Name() string { + return "otel.sdk.processor.log.queue.size" +} + +// Unit returns the semantic convention unit of the instrument +func (SDKProcessorLogQueueSize) Unit() string { + return "{log_record}" +} + +// Description returns the semantic convention description of the instrument +func (SDKProcessorLogQueueSize) Description() string { + return "The number of log records in the queue of a given instance of an SDK log processor." +} + +// AttrComponentName returns an optional attribute for the "otel.component.name" +// semantic convention. It represents a name uniquely identifying the instance of +// the OpenTelemetry component within its containing SDK instance. +func (SDKProcessorLogQueueSize) AttrComponentName(val string) attribute.KeyValue { + return attribute.String("otel.component.name", val) +} + +// AttrComponentType returns an optional attribute for the "otel.component.type" +// semantic convention. It represents a name identifying the type of the +// OpenTelemetry component. +func (SDKProcessorLogQueueSize) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue { + return attribute.String("otel.component.type", string(val)) +} + +// SDKProcessorSpanProcessed is an instrument used to record metric values +// conforming to the "otel.sdk.processor.span.processed" semantic conventions. It +// represents the number of spans for which the processing has finished, either +// successful or failed. +type SDKProcessorSpanProcessed struct { + metric.Int64Counter +} + +// NewSDKProcessorSpanProcessed returns a new SDKProcessorSpanProcessed +// instrument. +func NewSDKProcessorSpanProcessed( + m metric.Meter, + opt ...metric.Int64CounterOption, +) (SDKProcessorSpanProcessed, error) { + // Check if the meter is nil. + if m == nil { + return SDKProcessorSpanProcessed{noop.Int64Counter{}}, nil + } + + i, err := m.Int64Counter( + "otel.sdk.processor.span.processed", + append([]metric.Int64CounterOption{ + metric.WithDescription("The number of spans for which the processing has finished, either successful or failed."), + metric.WithUnit("{span}"), + }, opt...)..., + ) + if err != nil { + return SDKProcessorSpanProcessed{noop.Int64Counter{}}, err + } + return SDKProcessorSpanProcessed{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m SDKProcessorSpanProcessed) Inst() metric.Int64Counter { + return m.Int64Counter +} + +// Name returns the semantic convention name of the instrument. +func (SDKProcessorSpanProcessed) Name() string { + return "otel.sdk.processor.span.processed" +} + +// Unit returns the semantic convention unit of the instrument +func (SDKProcessorSpanProcessed) Unit() string { + return "{span}" +} + +// Description returns the semantic convention description of the instrument +func (SDKProcessorSpanProcessed) Description() string { + return "The number of spans for which the processing has finished, either successful or failed." +} + +// Add adds incr to the existing count for attrs. +// +// All additional attrs passed are included in the recorded value. +// +// For successful processing, `error.type` MUST NOT be set. For failed +// processing, `error.type` MUST contain the failure cause. +// For the SDK Simple and Batching Span Processor a span is considered to be +// processed already when it has been submitted to the exporter, not when the +// corresponding export call has finished. +func (m SDKProcessorSpanProcessed) Add( + ctx context.Context, + incr int64, + attrs ...attribute.KeyValue, +) { + if len(attrs) == 0 { + m.Int64Counter.Add(ctx, incr) + return + } + + o := addOptPool.Get().(*[]metric.AddOption) + defer func() { + *o = (*o)[:0] + addOptPool.Put(o) + }() + + *o = append( + *o, + metric.WithAttributes( + attrs..., + ), + ) + + m.Int64Counter.Add(ctx, incr, *o...) +} + +// AddSet adds incr to the existing count for set. +// +// For successful processing, `error.type` MUST NOT be set. For failed +// processing, `error.type` MUST contain the failure cause. +// For the SDK Simple and Batching Span Processor a span is considered to be +// processed already when it has been submitted to the exporter, not when the +// corresponding export call has finished. +func (m SDKProcessorSpanProcessed) AddSet(ctx context.Context, incr int64, set attribute.Set) { + if set.Len() == 0 { + m.Int64Counter.Add(ctx, incr) + return + } + + o := addOptPool.Get().(*[]metric.AddOption) + defer func() { + *o = (*o)[:0] + addOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Int64Counter.Add(ctx, incr, *o...) +} + +// AttrErrorType returns an optional attribute for the "error.type" semantic +// convention. It represents a low-cardinality description of the failure reason. +// SDK Batching Span Processors MUST use `queue_full` for spans dropped due to a +// full queue. +func (SDKProcessorSpanProcessed) AttrErrorType(val ErrorTypeAttr) attribute.KeyValue { + return attribute.String("error.type", string(val)) +} + +// AttrComponentName returns an optional attribute for the "otel.component.name" +// semantic convention. It represents a name uniquely identifying the instance of +// the OpenTelemetry component within its containing SDK instance. +func (SDKProcessorSpanProcessed) AttrComponentName(val string) attribute.KeyValue { + return attribute.String("otel.component.name", val) +} + +// AttrComponentType returns an optional attribute for the "otel.component.type" +// semantic convention. It represents a name identifying the type of the +// OpenTelemetry component. +func (SDKProcessorSpanProcessed) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue { + return attribute.String("otel.component.type", string(val)) +} + +// SDKProcessorSpanQueueCapacity is an instrument used to record metric values +// conforming to the "otel.sdk.processor.span.queue.capacity" semantic +// conventions. It represents the maximum number of spans the queue of a given +// instance of an SDK span processor can hold. +type SDKProcessorSpanQueueCapacity struct { + metric.Int64ObservableUpDownCounter +} + +// NewSDKProcessorSpanQueueCapacity returns a new SDKProcessorSpanQueueCapacity +// instrument. +func NewSDKProcessorSpanQueueCapacity( + m metric.Meter, + opt ...metric.Int64ObservableUpDownCounterOption, +) (SDKProcessorSpanQueueCapacity, error) { + // Check if the meter is nil. + if m == nil { + return SDKProcessorSpanQueueCapacity{noop.Int64ObservableUpDownCounter{}}, nil + } + + i, err := m.Int64ObservableUpDownCounter( + "otel.sdk.processor.span.queue.capacity", + append([]metric.Int64ObservableUpDownCounterOption{ + metric.WithDescription("The maximum number of spans the queue of a given instance of an SDK span processor can hold."), + metric.WithUnit("{span}"), + }, opt...)..., + ) + if err != nil { + return SDKProcessorSpanQueueCapacity{noop.Int64ObservableUpDownCounter{}}, err + } + return SDKProcessorSpanQueueCapacity{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m SDKProcessorSpanQueueCapacity) Inst() metric.Int64ObservableUpDownCounter { + return m.Int64ObservableUpDownCounter +} + +// Name returns the semantic convention name of the instrument. +func (SDKProcessorSpanQueueCapacity) Name() string { + return "otel.sdk.processor.span.queue.capacity" +} + +// Unit returns the semantic convention unit of the instrument +func (SDKProcessorSpanQueueCapacity) Unit() string { + return "{span}" +} + +// Description returns the semantic convention description of the instrument +func (SDKProcessorSpanQueueCapacity) Description() string { + return "The maximum number of spans the queue of a given instance of an SDK span processor can hold." +} + +// AttrComponentName returns an optional attribute for the "otel.component.name" +// semantic convention. It represents a name uniquely identifying the instance of +// the OpenTelemetry component within its containing SDK instance. +func (SDKProcessorSpanQueueCapacity) AttrComponentName(val string) attribute.KeyValue { + return attribute.String("otel.component.name", val) +} + +// AttrComponentType returns an optional attribute for the "otel.component.type" +// semantic convention. It represents a name identifying the type of the +// OpenTelemetry component. +func (SDKProcessorSpanQueueCapacity) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue { + return attribute.String("otel.component.type", string(val)) +} + +// SDKProcessorSpanQueueSize is an instrument used to record metric values +// conforming to the "otel.sdk.processor.span.queue.size" semantic conventions. +// It represents the number of spans in the queue of a given instance of an SDK +// span processor. +type SDKProcessorSpanQueueSize struct { + metric.Int64ObservableUpDownCounter +} + +// NewSDKProcessorSpanQueueSize returns a new SDKProcessorSpanQueueSize +// instrument. +func NewSDKProcessorSpanQueueSize( + m metric.Meter, + opt ...metric.Int64ObservableUpDownCounterOption, +) (SDKProcessorSpanQueueSize, error) { + // Check if the meter is nil. + if m == nil { + return SDKProcessorSpanQueueSize{noop.Int64ObservableUpDownCounter{}}, nil + } + + i, err := m.Int64ObservableUpDownCounter( + "otel.sdk.processor.span.queue.size", + append([]metric.Int64ObservableUpDownCounterOption{ + metric.WithDescription("The number of spans in the queue of a given instance of an SDK span processor."), + metric.WithUnit("{span}"), + }, opt...)..., + ) + if err != nil { + return SDKProcessorSpanQueueSize{noop.Int64ObservableUpDownCounter{}}, err + } + return SDKProcessorSpanQueueSize{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m SDKProcessorSpanQueueSize) Inst() metric.Int64ObservableUpDownCounter { + return m.Int64ObservableUpDownCounter +} + +// Name returns the semantic convention name of the instrument. +func (SDKProcessorSpanQueueSize) Name() string { + return "otel.sdk.processor.span.queue.size" +} + +// Unit returns the semantic convention unit of the instrument +func (SDKProcessorSpanQueueSize) Unit() string { + return "{span}" +} + +// Description returns the semantic convention description of the instrument +func (SDKProcessorSpanQueueSize) Description() string { + return "The number of spans in the queue of a given instance of an SDK span processor." +} + +// AttrComponentName returns an optional attribute for the "otel.component.name" +// semantic convention. It represents a name uniquely identifying the instance of +// the OpenTelemetry component within its containing SDK instance. +func (SDKProcessorSpanQueueSize) AttrComponentName(val string) attribute.KeyValue { + return attribute.String("otel.component.name", val) +} + +// AttrComponentType returns an optional attribute for the "otel.component.type" +// semantic convention. It represents a name identifying the type of the +// OpenTelemetry component. +func (SDKProcessorSpanQueueSize) AttrComponentType(val ComponentTypeAttr) attribute.KeyValue { + return attribute.String("otel.component.type", string(val)) +} + +// SDKSpanLive is an instrument used to record metric values conforming to the +// "otel.sdk.span.live" semantic conventions. It represents the number of created +// spans with `recording=true` for which the end operation has not been called +// yet. +type SDKSpanLive struct { + metric.Int64UpDownCounter +} + +// NewSDKSpanLive returns a new SDKSpanLive instrument. +func NewSDKSpanLive( + m metric.Meter, + opt ...metric.Int64UpDownCounterOption, +) (SDKSpanLive, error) { + // Check if the meter is nil. + if m == nil { + return SDKSpanLive{noop.Int64UpDownCounter{}}, nil + } + + i, err := m.Int64UpDownCounter( + "otel.sdk.span.live", + append([]metric.Int64UpDownCounterOption{ + metric.WithDescription("The number of created spans with `recording=true` for which the end operation has not been called yet."), + metric.WithUnit("{span}"), + }, opt...)..., + ) + if err != nil { + return SDKSpanLive{noop.Int64UpDownCounter{}}, err + } + return SDKSpanLive{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m SDKSpanLive) Inst() metric.Int64UpDownCounter { + return m.Int64UpDownCounter +} + +// Name returns the semantic convention name of the instrument. +func (SDKSpanLive) Name() string { + return "otel.sdk.span.live" +} + +// Unit returns the semantic convention unit of the instrument +func (SDKSpanLive) Unit() string { + return "{span}" +} + +// Description returns the semantic convention description of the instrument +func (SDKSpanLive) Description() string { + return "The number of created spans with `recording=true` for which the end operation has not been called yet." +} + +// Add adds incr to the existing count for attrs. +// +// All additional attrs passed are included in the recorded value. +func (m SDKSpanLive) Add( + ctx context.Context, + incr int64, + 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( + attrs..., + ), + ) + + m.Int64UpDownCounter.Add(ctx, incr, *o...) +} + +// AddSet adds incr to the existing count for set. +func (m SDKSpanLive) 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...) +} + +// AttrSpanSamplingResult returns an optional attribute for the +// "otel.span.sampling_result" semantic convention. It represents the result +// value of the sampler for this span. +func (SDKSpanLive) AttrSpanSamplingResult(val SpanSamplingResultAttr) attribute.KeyValue { + return attribute.String("otel.span.sampling_result", string(val)) +} + +// SDKSpanStarted is an instrument used to record metric values conforming to the +// "otel.sdk.span.started" semantic conventions. It represents the number of +// created spans. +type SDKSpanStarted struct { + metric.Int64Counter +} + +// NewSDKSpanStarted returns a new SDKSpanStarted instrument. +func NewSDKSpanStarted( + m metric.Meter, + opt ...metric.Int64CounterOption, +) (SDKSpanStarted, error) { + // Check if the meter is nil. + if m == nil { + return SDKSpanStarted{noop.Int64Counter{}}, nil + } + + i, err := m.Int64Counter( + "otel.sdk.span.started", + append([]metric.Int64CounterOption{ + metric.WithDescription("The number of created spans."), + metric.WithUnit("{span}"), + }, opt...)..., + ) + if err != nil { + return SDKSpanStarted{noop.Int64Counter{}}, err + } + return SDKSpanStarted{i}, nil +} + +// Inst returns the underlying metric instrument. +func (m SDKSpanStarted) Inst() metric.Int64Counter { + return m.Int64Counter +} + +// Name returns the semantic convention name of the instrument. +func (SDKSpanStarted) Name() string { + return "otel.sdk.span.started" +} + +// Unit returns the semantic convention unit of the instrument +func (SDKSpanStarted) Unit() string { + return "{span}" +} + +// Description returns the semantic convention description of the instrument +func (SDKSpanStarted) Description() string { + return "The number of created spans." +} + +// Add adds incr to the existing count for attrs. +// +// All additional attrs passed are included in the recorded value. +// +// Implementations MUST record this metric for all spans, even for non-recording +// ones. +func (m SDKSpanStarted) Add( + ctx context.Context, + incr int64, + attrs ...attribute.KeyValue, +) { + if len(attrs) == 0 { + m.Int64Counter.Add(ctx, incr) + return + } + + o := addOptPool.Get().(*[]metric.AddOption) + defer func() { + *o = (*o)[:0] + addOptPool.Put(o) + }() + + *o = append( + *o, + metric.WithAttributes( + attrs..., + ), + ) + + m.Int64Counter.Add(ctx, incr, *o...) +} + +// AddSet adds incr to the existing count for set. +// +// Implementations MUST record this metric for all spans, even for non-recording +// ones. +func (m SDKSpanStarted) AddSet(ctx context.Context, incr int64, set attribute.Set) { + if set.Len() == 0 { + m.Int64Counter.Add(ctx, incr) + return + } + + o := addOptPool.Get().(*[]metric.AddOption) + defer func() { + *o = (*o)[:0] + addOptPool.Put(o) + }() + + *o = append(*o, metric.WithAttributeSet(set)) + m.Int64Counter.Add(ctx, incr, *o...) +} + +// AttrSpanParentOrigin returns an optional attribute for the +// "otel.span.parent.origin" semantic convention. It represents the determines +// whether the span has a parent span, and if so, [whether it is a remote parent] +// . +// +// [whether it is a remote parent]: https://opentelemetry.io/docs/specs/otel/trace/api/#isremote +func (SDKSpanStarted) AttrSpanParentOrigin(val SpanParentOriginAttr) attribute.KeyValue { + return attribute.String("otel.span.parent.origin", string(val)) +} + +// AttrSpanSamplingResult returns an optional attribute for the +// "otel.span.sampling_result" semantic convention. It represents the result +// value of the sampler for this span. +func (SDKSpanStarted) AttrSpanSamplingResult(val SpanSamplingResultAttr) attribute.KeyValue { + return attribute.String("otel.span.sampling_result", string(val)) +} \ No newline at end of file diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.34.0/schema.go b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/schema.go similarity index 85% rename from vendor/go.opentelemetry.io/otel/semconv/v1.34.0/schema.go rename to vendor/go.opentelemetry.io/otel/semconv/v1.37.0/schema.go index 3c23d45925..f8a0b70441 100644 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.34.0/schema.go +++ b/vendor/go.opentelemetry.io/otel/semconv/v1.37.0/schema.go @@ -1,9 +1,9 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -package semconv // import "go.opentelemetry.io/otel/semconv/v1.34.0" +package semconv // import "go.opentelemetry.io/otel/semconv/v1.37.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.34.0" +const SchemaURL = "https://opentelemetry.io/schemas/1.37.0" diff --git a/vendor/go.opentelemetry.io/otel/trace/LICENSE b/vendor/go.opentelemetry.io/otel/trace/LICENSE index 261eeb9e9f..f1aee0f110 100644 --- a/vendor/go.opentelemetry.io/otel/trace/LICENSE +++ b/vendor/go.opentelemetry.io/otel/trace/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/trace/auto.go b/vendor/go.opentelemetry.io/otel/trace/auto.go index f3aa398138..8763936a84 100644 --- a/vendor/go.opentelemetry.io/otel/trace/auto.go +++ b/vendor/go.opentelemetry.io/otel/trace/auto.go @@ -20,7 +20,7 @@ import ( "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" - semconv "go.opentelemetry.io/otel/semconv/v1.34.0" + semconv "go.opentelemetry.io/otel/semconv/v1.37.0" "go.opentelemetry.io/otel/trace/embedded" "go.opentelemetry.io/otel/trace/internal/telemetry" ) @@ -39,7 +39,7 @@ type autoTracerProvider struct{ embedded.TracerProvider } var _ TracerProvider = autoTracerProvider{} -func (p autoTracerProvider) Tracer(name string, opts ...TracerOption) Tracer { +func (autoTracerProvider) Tracer(name string, opts ...TracerOption) Tracer { cfg := NewTracerConfig(opts...) return autoTracer{ name: name, @@ -81,7 +81,7 @@ func (t autoTracer) Start(ctx context.Context, name string, opts ...SpanStartOpt // Expected to be implemented in eBPF. // //go:noinline -func (t *autoTracer) start( +func (*autoTracer) start( ctx context.Context, spanPtr *autoSpan, psc *SpanContext, diff --git a/vendor/go.opentelemetry.io/otel/trace/config.go b/vendor/go.opentelemetry.io/otel/trace/config.go index 9c0b720a4d..aea11a2b52 100644 --- a/vendor/go.opentelemetry.io/otel/trace/config.go +++ b/vendor/go.opentelemetry.io/otel/trace/config.go @@ -73,7 +73,7 @@ func (cfg *SpanConfig) Timestamp() time.Time { return cfg.timestamp } -// StackTrace checks whether stack trace capturing is enabled. +// StackTrace reports whether stack trace capturing is enabled. func (cfg *SpanConfig) StackTrace() bool { return cfg.stackTrace } @@ -154,7 +154,7 @@ func (cfg *EventConfig) Timestamp() time.Time { return cfg.timestamp } -// StackTrace checks whether stack trace capturing is enabled. +// StackTrace reports whether stack trace capturing is enabled. func (cfg *EventConfig) StackTrace() bool { return cfg.stackTrace } diff --git a/vendor/go.opentelemetry.io/otel/trace/hex.go b/vendor/go.opentelemetry.io/otel/trace/hex.go new file mode 100644 index 0000000000..1cbef1d4b9 --- /dev/null +++ b/vendor/go.opentelemetry.io/otel/trace/hex.go @@ -0,0 +1,38 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package trace // import "go.opentelemetry.io/otel/trace" + +const ( + // hexLU is a hex lookup table of the 16 lowercase hex digits. + // The character values of the string are indexed at the equivalent + // hexadecimal value they represent. This table efficiently encodes byte data + // into a string representation of hexadecimal. + hexLU = "0123456789abcdef" + + // hexRev is a reverse hex lookup table for lowercase hex digits. + // The table is efficiently decodes a hexadecimal string into bytes. + // Valid hexadecimal characters are indexed at their respective values. All + // other invalid ASCII characters are represented with '\xff'. + // + // The '\xff' character is used as invalid because no valid character has + // the upper 4 bits set. Meaning, an efficient validation can be performed + // over multiple character parsing by checking these bits remain zero. + hexRev = "" + + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + + "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\xff\xff\xff\xff\xff\xff" + + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + + "\xff\x0a\x0b\x0c\x0d\x0e\x0f\xff\xff\xff\xff\xff\xff\xff\xff\xff" + + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" +) diff --git a/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/attr.go b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/attr.go index f663547b4e..ff0f6eac62 100644 --- a/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/attr.go +++ b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/attr.go @@ -52,7 +52,7 @@ func Map(key string, value ...Attr) Attr { return Attr{key, MapValue(value...)} } -// Equal returns if a is equal to b. +// Equal reports whether a is equal to b. func (a Attr) Equal(b Attr) bool { return a.Key == b.Key && a.Value.Equal(b.Value) } diff --git a/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/id.go b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/id.go index 7b1ae3c4ea..bea56f2e7d 100644 --- a/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/id.go +++ b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/id.go @@ -22,7 +22,7 @@ func (tid TraceID) String() string { return hex.EncodeToString(tid[:]) } -// IsEmpty returns false if id contains at least one non-zero byte. +// IsEmpty reports whether the TraceID contains only zero bytes. func (tid TraceID) IsEmpty() bool { return tid == [traceIDSize]byte{} } @@ -50,7 +50,7 @@ func (sid SpanID) String() string { return hex.EncodeToString(sid[:]) } -// IsEmpty returns true if the span ID contains at least one non-zero byte. +// IsEmpty reports whether the SpanID contains only zero bytes. func (sid SpanID) IsEmpty() bool { return sid == [spanIDSize]byte{} } @@ -82,7 +82,7 @@ func marshalJSON(id []byte) ([]byte, error) { } // unmarshalJSON inflates trace id from hex string, possibly enclosed in quotes. -func unmarshalJSON(dst []byte, src []byte) error { +func unmarshalJSON(dst, src []byte) error { if l := len(src); l >= 2 && src[0] == '"' && src[l-1] == '"' { src = src[1 : l-1] } diff --git a/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/value.go b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/value.go index ae9ce102a9..cb7927b816 100644 --- a/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/value.go +++ b/vendor/go.opentelemetry.io/otel/trace/internal/telemetry/value.go @@ -257,10 +257,10 @@ func (v Value) Kind() ValueKind { } } -// Empty returns if v does not hold any value. +// Empty reports whether v does not hold any value. func (v Value) Empty() bool { return v.Kind() == ValueKindEmpty } -// Equal returns if v is equal to w. +// Equal reports whether v is equal to w. func (v Value) Equal(w Value) bool { k1 := v.Kind() k2 := w.Kind() diff --git a/vendor/go.opentelemetry.io/otel/trace/noop.go b/vendor/go.opentelemetry.io/otel/trace/noop.go index 0f56e4dbb3..400fab1238 100644 --- a/vendor/go.opentelemetry.io/otel/trace/noop.go +++ b/vendor/go.opentelemetry.io/otel/trace/noop.go @@ -26,7 +26,7 @@ type noopTracerProvider struct{ embedded.TracerProvider } var _ TracerProvider = noopTracerProvider{} // Tracer returns noop implementation of Tracer. -func (p noopTracerProvider) Tracer(string, ...TracerOption) Tracer { +func (noopTracerProvider) Tracer(string, ...TracerOption) Tracer { return noopTracer{} } @@ -37,7 +37,7 @@ var _ Tracer = noopTracer{} // Start carries forward a non-recording Span, if one is present in the context, otherwise it // creates a no-op Span. -func (t noopTracer) Start(ctx context.Context, name string, _ ...SpanStartOption) (context.Context, Span) { +func (noopTracer) Start(ctx context.Context, _ string, _ ...SpanStartOption) (context.Context, Span) { span := SpanFromContext(ctx) if _, ok := span.(nonRecordingSpan); !ok { // span is likely already a noopSpan, but let's be sure diff --git a/vendor/go.opentelemetry.io/otel/trace/noop/noop.go b/vendor/go.opentelemetry.io/otel/trace/noop/noop.go index 64a4f1b362..689d220df7 100644 --- a/vendor/go.opentelemetry.io/otel/trace/noop/noop.go +++ b/vendor/go.opentelemetry.io/otel/trace/noop/noop.go @@ -51,7 +51,7 @@ type Tracer struct{ embedded.Tracer } // If ctx contains a span context, the returned span will also contain that // span context. If the span context in ctx is for a non-recording span, that // span instance will be returned directly. -func (t Tracer) Start(ctx context.Context, _ string, _ ...trace.SpanStartOption) (context.Context, trace.Span) { +func (Tracer) Start(ctx context.Context, _ string, _ ...trace.SpanStartOption) (context.Context, trace.Span) { span := trace.SpanFromContext(ctx) // If the parent context contains a non-zero span context, that span diff --git a/vendor/go.opentelemetry.io/otel/trace/trace.go b/vendor/go.opentelemetry.io/otel/trace/trace.go index d49adf671b..ee6f4bcb2a 100644 --- a/vendor/go.opentelemetry.io/otel/trace/trace.go +++ b/vendor/go.opentelemetry.io/otel/trace/trace.go @@ -4,8 +4,6 @@ package trace // import "go.opentelemetry.io/otel/trace" import ( - "bytes" - "encoding/hex" "encoding/json" ) @@ -38,21 +36,47 @@ var ( _ json.Marshaler = nilTraceID ) -// IsValid checks whether the trace TraceID is valid. A valid trace ID does +// IsValid reports whether the trace TraceID is valid. A valid trace ID does // not consist of zeros only. func (t TraceID) IsValid() bool { - return !bytes.Equal(t[:], nilTraceID[:]) + return t != nilTraceID } // MarshalJSON implements a custom marshal function to encode TraceID // as a hex string. func (t TraceID) MarshalJSON() ([]byte, error) { - return json.Marshal(t.String()) + b := [32 + 2]byte{0: '"', 33: '"'} + h := t.hexBytes() + copy(b[1:], h[:]) + return b[:], nil } // String returns the hex string representation form of a TraceID. func (t TraceID) String() string { - return hex.EncodeToString(t[:]) + h := t.hexBytes() + return string(h[:]) +} + +// hexBytes returns the hex string representation form of a TraceID. +func (t TraceID) hexBytes() [32]byte { + return [32]byte{ + hexLU[t[0x0]>>4], hexLU[t[0x0]&0xf], + hexLU[t[0x1]>>4], hexLU[t[0x1]&0xf], + hexLU[t[0x2]>>4], hexLU[t[0x2]&0xf], + hexLU[t[0x3]>>4], hexLU[t[0x3]&0xf], + hexLU[t[0x4]>>4], hexLU[t[0x4]&0xf], + hexLU[t[0x5]>>4], hexLU[t[0x5]&0xf], + hexLU[t[0x6]>>4], hexLU[t[0x6]&0xf], + hexLU[t[0x7]>>4], hexLU[t[0x7]&0xf], + hexLU[t[0x8]>>4], hexLU[t[0x8]&0xf], + hexLU[t[0x9]>>4], hexLU[t[0x9]&0xf], + hexLU[t[0xa]>>4], hexLU[t[0xa]&0xf], + hexLU[t[0xb]>>4], hexLU[t[0xb]&0xf], + hexLU[t[0xc]>>4], hexLU[t[0xc]&0xf], + hexLU[t[0xd]>>4], hexLU[t[0xd]&0xf], + hexLU[t[0xe]>>4], hexLU[t[0xe]&0xf], + hexLU[t[0xf]>>4], hexLU[t[0xf]&0xf], + } } // SpanID is a unique identity of a span in a trace. @@ -63,21 +87,38 @@ var ( _ json.Marshaler = nilSpanID ) -// IsValid checks whether the SpanID is valid. A valid SpanID does not consist +// IsValid reports whether the SpanID is valid. A valid SpanID does not consist // of zeros only. func (s SpanID) IsValid() bool { - return !bytes.Equal(s[:], nilSpanID[:]) + return s != nilSpanID } // MarshalJSON implements a custom marshal function to encode SpanID // as a hex string. func (s SpanID) MarshalJSON() ([]byte, error) { - return json.Marshal(s.String()) + b := [16 + 2]byte{0: '"', 17: '"'} + h := s.hexBytes() + copy(b[1:], h[:]) + return b[:], nil } // String returns the hex string representation form of a SpanID. func (s SpanID) String() string { - return hex.EncodeToString(s[:]) + b := s.hexBytes() + return string(b[:]) +} + +func (s SpanID) hexBytes() [16]byte { + return [16]byte{ + hexLU[s[0]>>4], hexLU[s[0]&0xf], + hexLU[s[1]>>4], hexLU[s[1]&0xf], + hexLU[s[2]>>4], hexLU[s[2]&0xf], + hexLU[s[3]>>4], hexLU[s[3]&0xf], + hexLU[s[4]>>4], hexLU[s[4]&0xf], + hexLU[s[5]>>4], hexLU[s[5]&0xf], + hexLU[s[6]>>4], hexLU[s[6]&0xf], + hexLU[s[7]>>4], hexLU[s[7]&0xf], + } } // TraceIDFromHex returns a TraceID from a hex string if it is compliant with @@ -85,65 +126,58 @@ func (s SpanID) String() string { // https://www.w3.org/TR/trace-context/#trace-id // nolint:revive // revive complains about stutter of `trace.TraceIDFromHex`. func TraceIDFromHex(h string) (TraceID, error) { - t := TraceID{} if len(h) != 32 { - return t, errInvalidTraceIDLength + return [16]byte{}, errInvalidTraceIDLength } - - if err := decodeHex(h, t[:]); err != nil { - return t, err + var b [16]byte + invalidMark := byte(0) + for i := 0; i < len(h); i += 4 { + b[i/2] = (hexRev[h[i]] << 4) | hexRev[h[i+1]] + b[i/2+1] = (hexRev[h[i+2]] << 4) | hexRev[h[i+3]] + invalidMark |= hexRev[h[i]] | hexRev[h[i+1]] | hexRev[h[i+2]] | hexRev[h[i+3]] } - - if !t.IsValid() { - return t, errNilTraceID + // If the upper 4 bits of any byte are not zero, there was an invalid hex + // character since invalid hex characters are 0xff in hexRev. + if invalidMark&0xf0 != 0 { + return [16]byte{}, errInvalidHexID + } + // If we didn't set any bits, then h was all zeros. + if invalidMark == 0 { + return [16]byte{}, errNilTraceID } - return t, nil + return b, nil } // SpanIDFromHex returns a SpanID from a hex string if it is compliant // with the w3c trace-context specification. // See more at https://www.w3.org/TR/trace-context/#parent-id func SpanIDFromHex(h string) (SpanID, error) { - s := SpanID{} if len(h) != 16 { - return s, errInvalidSpanIDLength - } - - if err := decodeHex(h, s[:]); err != nil { - return s, err + return [8]byte{}, errInvalidSpanIDLength } - - if !s.IsValid() { - return s, errNilSpanID + var b [8]byte + invalidMark := byte(0) + for i := 0; i < len(h); i += 4 { + b[i/2] = (hexRev[h[i]] << 4) | hexRev[h[i+1]] + b[i/2+1] = (hexRev[h[i+2]] << 4) | hexRev[h[i+3]] + invalidMark |= hexRev[h[i]] | hexRev[h[i+1]] | hexRev[h[i+2]] | hexRev[h[i+3]] } - return s, nil -} - -func decodeHex(h string, b []byte) error { - for _, r := range h { - switch { - case 'a' <= r && r <= 'f': - continue - case '0' <= r && r <= '9': - continue - default: - return errInvalidHexID - } + // If the upper 4 bits of any byte are not zero, there was an invalid hex + // character since invalid hex characters are 0xff in hexRev. + if invalidMark&0xf0 != 0 { + return [8]byte{}, errInvalidHexID } - - decoded, err := hex.DecodeString(h) - if err != nil { - return err + // If we didn't set any bits, then h was all zeros. + if invalidMark == 0 { + return [8]byte{}, errNilSpanID } - - copy(b, decoded) - return nil + return b, nil } // TraceFlags contains flags that can be set on a SpanContext. type TraceFlags byte //nolint:revive // revive complains about stutter of `trace.TraceFlags`. -// IsSampled returns if the sampling bit is set in the TraceFlags. +// IsSampled reports whether the sampling bit is set in the TraceFlags. func (tf TraceFlags) IsSampled() bool { return tf&FlagsSampled == FlagsSampled } @@ -160,12 +194,20 @@ func (tf TraceFlags) WithSampled(sampled bool) TraceFlags { // nolint:revive // // MarshalJSON implements a custom marshal function to encode TraceFlags // as a hex string. func (tf TraceFlags) MarshalJSON() ([]byte, error) { - return json.Marshal(tf.String()) + b := [2 + 2]byte{0: '"', 3: '"'} + h := tf.hexBytes() + copy(b[1:], h[:]) + return b[:], nil } // String returns the hex string representation form of TraceFlags. func (tf TraceFlags) String() string { - return hex.EncodeToString([]byte{byte(tf)}[:]) + h := tf.hexBytes() + return string(h[:]) +} + +func (tf TraceFlags) hexBytes() [2]byte { + return [2]byte{hexLU[tf>>4], hexLU[tf&0xf]} } // SpanContextConfig contains mutable fields usable for constructing @@ -201,13 +243,13 @@ type SpanContext struct { var _ json.Marshaler = SpanContext{} -// IsValid returns if the SpanContext is valid. A valid span context has a +// IsValid reports whether the SpanContext is valid. A valid span context has a // valid TraceID and SpanID. func (sc SpanContext) IsValid() bool { return sc.HasTraceID() && sc.HasSpanID() } -// IsRemote indicates whether the SpanContext represents a remotely-created Span. +// IsRemote reports whether the SpanContext represents a remotely-created Span. func (sc SpanContext) IsRemote() bool { return sc.remote } @@ -228,7 +270,7 @@ func (sc SpanContext) TraceID() TraceID { return sc.traceID } -// HasTraceID checks if the SpanContext has a valid TraceID. +// HasTraceID reports whether the SpanContext has a valid TraceID. func (sc SpanContext) HasTraceID() bool { return sc.traceID.IsValid() } @@ -249,7 +291,7 @@ func (sc SpanContext) SpanID() SpanID { return sc.spanID } -// HasSpanID checks if the SpanContext has a valid SpanID. +// HasSpanID reports whether the SpanContext has a valid SpanID. func (sc SpanContext) HasSpanID() bool { return sc.spanID.IsValid() } @@ -270,7 +312,7 @@ func (sc SpanContext) TraceFlags() TraceFlags { return sc.traceFlags } -// IsSampled returns if the sampling bit is set in the SpanContext's TraceFlags. +// IsSampled reports whether the sampling bit is set in the SpanContext's TraceFlags. func (sc SpanContext) IsSampled() bool { return sc.traceFlags.IsSampled() } @@ -302,7 +344,7 @@ func (sc SpanContext) WithTraceState(state TraceState) SpanContext { } } -// Equal is a predicate that determines whether two SpanContext values are equal. +// Equal reports whether two SpanContext values are equal. func (sc SpanContext) Equal(other SpanContext) bool { return sc.traceID == other.traceID && sc.spanID == other.spanID && diff --git a/vendor/go.opentelemetry.io/otel/trace/tracestate.go b/vendor/go.opentelemetry.io/otel/trace/tracestate.go index dc5e34cad0..073adae2fa 100644 --- a/vendor/go.opentelemetry.io/otel/trace/tracestate.go +++ b/vendor/go.opentelemetry.io/otel/trace/tracestate.go @@ -80,7 +80,7 @@ func checkKeyRemain(key string) bool { // // param n is remain part length, should be 255 in simple-key or 13 in system-id. func checkKeyPart(key string, n int) bool { - if len(key) == 0 { + if key == "" { return false } first := key[0] // key's first char @@ -102,7 +102,7 @@ func isAlphaNum(c byte) bool { // // param n is remain part length, should be 240 exactly. func checkKeyTenant(key string, n int) bool { - if len(key) == 0 { + if key == "" { return false } return isAlphaNum(key[0]) && len(key[1:]) <= n && checkKeyRemain(key[1:]) @@ -191,7 +191,7 @@ func ParseTraceState(ts string) (TraceState, error) { for ts != "" { var memberStr string memberStr, ts, _ = strings.Cut(ts, listDelimiters) - if len(memberStr) == 0 { + if memberStr == "" { continue } diff --git a/vendor/go.opentelemetry.io/otel/version.go b/vendor/go.opentelemetry.io/otel/version.go index 7afe92b598..bcaa5aa537 100644 --- a/vendor/go.opentelemetry.io/otel/version.go +++ b/vendor/go.opentelemetry.io/otel/version.go @@ -5,5 +5,5 @@ package otel // import "go.opentelemetry.io/otel" // Version is the current release version of OpenTelemetry in use. func Version() string { - return "1.37.0" + return "1.38.0" } diff --git a/vendor/go.opentelemetry.io/otel/versions.yaml b/vendor/go.opentelemetry.io/otel/versions.yaml index 9d4742a176..07145e254b 100644 --- a/vendor/go.opentelemetry.io/otel/versions.yaml +++ b/vendor/go.opentelemetry.io/otel/versions.yaml @@ -3,7 +3,7 @@ module-sets: stable-v1: - version: v1.37.0 + version: v1.38.0 modules: - go.opentelemetry.io/otel - go.opentelemetry.io/otel/bridge/opencensus @@ -22,11 +22,11 @@ module-sets: - go.opentelemetry.io/otel/sdk/metric - go.opentelemetry.io/otel/trace experimental-metrics: - version: v0.59.0 + version: v0.60.0 modules: - go.opentelemetry.io/otel/exporters/prometheus experimental-logs: - version: v0.13.0 + version: v0.14.0 modules: - go.opentelemetry.io/otel/log - go.opentelemetry.io/otel/log/logtest @@ -36,7 +36,7 @@ module-sets: - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp - go.opentelemetry.io/otel/exporters/stdout/stdoutlog experimental-schema: - version: v0.0.12 + version: v0.0.13 modules: - go.opentelemetry.io/otel/schema excluded-modules: diff --git a/vendor/golang.org/x/mod/modfile/read.go b/vendor/golang.org/x/mod/modfile/read.go index 2d7486804f..f58de029ea 100644 --- a/vendor/golang.org/x/mod/modfile/read.go +++ b/vendor/golang.org/x/mod/modfile/read.go @@ -94,7 +94,7 @@ func (x *FileSyntax) Span() (start, end Position) { // line, the new line is added at the end of the block containing hint, // extracting hint into a new block if it is not yet in one. // -// If the hint is non-nil buts its first token does not match, +// If the hint is non-nil but its first token does not match, // the new line is added after the block containing hint // (or hint itself, if not in a block). // diff --git a/vendor/golang.org/x/mod/module/module.go b/vendor/golang.org/x/mod/module/module.go index 16e1aa7ab4..9d3955bd73 100644 --- a/vendor/golang.org/x/mod/module/module.go +++ b/vendor/golang.org/x/mod/module/module.go @@ -261,7 +261,7 @@ func modPathOK(r rune) bool { // importPathOK reports whether r can appear in a package import path element. // -// Import paths are intermediate between module paths and file paths: we allow +// Import paths are intermediate between module paths and file paths: we // disallow characters that would be confusing or ambiguous as arguments to // 'go get' (such as '@' and ' ' ), but allow certain characters that are // otherwise-unambiguous on the command line and historically used for some diff --git a/vendor/golang.org/x/mod/semver/semver.go b/vendor/golang.org/x/mod/semver/semver.go index 628f8fd687..824b282c83 100644 --- a/vendor/golang.org/x/mod/semver/semver.go +++ b/vendor/golang.org/x/mod/semver/semver.go @@ -45,8 +45,8 @@ func IsValid(v string) bool { // Canonical returns the canonical formatting of the semantic version v. // It fills in any missing .MINOR or .PATCH and discards build metadata. -// Two semantic versions compare equal only if their canonical formattings -// are identical strings. +// Two semantic versions compare equal only if their canonical formatting +// is an identical string. // The canonical invalid semantic version is the empty string. func Canonical(v string) string { p, ok := parse(v) diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go index 1965913e54..ccb87e6da3 100644 --- a/vendor/golang.org/x/net/http2/transport.go +++ b/vendor/golang.org/x/net/http2/transport.go @@ -376,11 +376,24 @@ type ClientConn struct { // completely unresponsive connection. pendingResets int + // readBeforeStreamID is the smallest stream ID that has not been followed by + // a frame read from the peer. We use this to determine when a request may + // have been sent to a completely unresponsive connection: + // If the request ID is less than readBeforeStreamID, then we have had some + // indication of life on the connection since sending the request. + readBeforeStreamID uint32 + // reqHeaderMu is a 1-element semaphore channel controlling access to sending new requests. // Write to reqHeaderMu to lock it, read from it to unlock. // Lock reqmu BEFORE mu or wmu. reqHeaderMu chan struct{} + // internalStateHook reports state changes back to the net/http.ClientConn. + // Note that this is different from the user state hook registered by + // net/http.ClientConn.SetStateHook: The internal hook calls ClientConn, + // which calls the user hook. + internalStateHook func() + // wmu is held while writing. // Acquire BEFORE mu when holding both, to avoid blocking mu on network writes. // Only acquire both at the same time when changing peer settings. @@ -710,7 +723,7 @@ func canRetryError(err error) bool { func (t *Transport) dialClientConn(ctx context.Context, addr string, singleUse bool) (*ClientConn, error) { if t.transportTestHooks != nil { - return t.newClientConn(nil, singleUse) + return t.newClientConn(nil, singleUse, nil) } host, _, err := net.SplitHostPort(addr) if err != nil { @@ -720,7 +733,7 @@ func (t *Transport) dialClientConn(ctx context.Context, addr string, singleUse b if err != nil { return nil, err } - return t.newClientConn(tconn, singleUse) + return t.newClientConn(tconn, singleUse, nil) } func (t *Transport) newTLSConfig(host string) *tls.Config { @@ -772,10 +785,10 @@ func (t *Transport) expectContinueTimeout() time.Duration { } func (t *Transport) NewClientConn(c net.Conn) (*ClientConn, error) { - return t.newClientConn(c, t.disableKeepAlives()) + return t.newClientConn(c, t.disableKeepAlives(), nil) } -func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, error) { +func (t *Transport) newClientConn(c net.Conn, singleUse bool, internalStateHook func()) (*ClientConn, error) { conf := configFromTransport(t) cc := &ClientConn{ t: t, @@ -797,6 +810,7 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro pings: make(map[[8]byte]chan struct{}), reqHeaderMu: make(chan struct{}, 1), lastActive: time.Now(), + internalStateHook: internalStateHook, } if t.transportTestHooks != nil { t.transportTestHooks.newclientconn(cc) @@ -1037,10 +1051,7 @@ func (cc *ClientConn) idleStateLocked() (st clientConnIdleState) { maxConcurrentOkay = cc.currentRequestCountLocked() < int(cc.maxConcurrentStreams) } - st.canTakeNewRequest = cc.goAway == nil && !cc.closed && !cc.closing && maxConcurrentOkay && - !cc.doNotReuse && - int64(cc.nextStreamID)+2*int64(cc.pendingRequests) < math.MaxInt32 && - !cc.tooIdleLocked() + st.canTakeNewRequest = maxConcurrentOkay && cc.isUsableLocked() // If this connection has never been used for a request and is closed, // then let it take a request (which will fail). @@ -1056,6 +1067,31 @@ func (cc *ClientConn) idleStateLocked() (st clientConnIdleState) { return } +func (cc *ClientConn) isUsableLocked() bool { + return cc.goAway == nil && + !cc.closed && + !cc.closing && + !cc.doNotReuse && + int64(cc.nextStreamID)+2*int64(cc.pendingRequests) < math.MaxInt32 && + !cc.tooIdleLocked() +} + +// canReserveLocked reports whether a net/http.ClientConn can reserve a slot on this conn. +// +// This follows slightly different rules than clientConnIdleState.canTakeNewRequest. +// We only permit reservations up to the conn's concurrency limit. +// This differs from ClientConn.ReserveNewRequest, which permits reservations +// past the limit when StrictMaxConcurrentStreams is set. +func (cc *ClientConn) canReserveLocked() bool { + if cc.currentRequestCountLocked() >= int(cc.maxConcurrentStreams) { + return false + } + if !cc.isUsableLocked() { + return false + } + return true +} + // currentRequestCountLocked reports the number of concurrency slots currently in use, // including active streams, reserved slots, and reset streams waiting for acknowledgement. func (cc *ClientConn) currentRequestCountLocked() int { @@ -1067,6 +1103,14 @@ func (cc *ClientConn) canTakeNewRequestLocked() bool { return st.canTakeNewRequest } +// availableLocked reports the number of concurrency slots available. +func (cc *ClientConn) availableLocked() int { + if !cc.canTakeNewRequestLocked() { + return 0 + } + return max(0, int(cc.maxConcurrentStreams)-cc.currentRequestCountLocked()) +} + // tooIdleLocked reports whether this connection has been been sitting idle // for too much wall time. func (cc *ClientConn) tooIdleLocked() bool { @@ -1091,6 +1135,7 @@ func (cc *ClientConn) closeConn() { t := time.AfterFunc(250*time.Millisecond, cc.forceCloseConn) defer t.Stop() cc.tconn.Close() + cc.maybeCallStateHook() } // A tls.Conn.Close can hang for a long time if the peer is unresponsive. @@ -1616,6 +1661,8 @@ func (cs *clientStream) cleanupWriteRequest(err error) { } bodyClosed := cs.reqBodyClosed closeOnIdle := cc.singleUse || cc.doNotReuse || cc.t.disableKeepAlives() || cc.goAway != nil + // Have we read any frames from the connection since sending this request? + readSinceStream := cc.readBeforeStreamID > cs.ID cc.mu.Unlock() if mustCloseBody { cs.reqBody.Close() @@ -1647,8 +1694,10 @@ func (cs *clientStream) cleanupWriteRequest(err error) { // // This could be due to the server becoming unresponsive. // To avoid sending too many requests on a dead connection, - // we let the request continue to consume a concurrency slot - // until we can confirm the server is still responding. + // if we haven't read any frames from the connection since + // sending this request, we let it continue to consume + // a concurrency slot until we can confirm the server is + // still responding. // We do this by sending a PING frame along with the RST_STREAM // (unless a ping is already in flight). // @@ -1659,7 +1708,7 @@ func (cs *clientStream) cleanupWriteRequest(err error) { // because it's short lived and will probably be closed before // we get the ping response. ping := false - if !closeOnIdle { + if !closeOnIdle && !readSinceStream { cc.mu.Lock() // rstStreamPingsBlocked works around a gRPC behavior: // see comment on the field for details. @@ -1693,6 +1742,7 @@ func (cs *clientStream) cleanupWriteRequest(err error) { } close(cs.donec) + cc.maybeCallStateHook() } // awaitOpenSlotForStreamLocked waits until len(streams) < maxConcurrentStreams. @@ -2745,6 +2795,7 @@ func (rl *clientConnReadLoop) streamByID(id uint32, headerOrData bool) *clientSt // See comment on ClientConn.rstStreamPingsBlocked for details. rl.cc.rstStreamPingsBlocked = false } + rl.cc.readBeforeStreamID = rl.cc.nextStreamID cs := rl.cc.streams[id] if cs != nil && !cs.readAborted { return cs @@ -2795,6 +2846,7 @@ func (rl *clientConnReadLoop) processSettings(f *SettingsFrame) error { func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error { cc := rl.cc + defer cc.maybeCallStateHook() cc.mu.Lock() defer cc.mu.Unlock() @@ -2975,6 +3027,7 @@ func (cc *ClientConn) Ping(ctx context.Context) error { func (rl *clientConnReadLoop) processPing(f *PingFrame) error { if f.IsAck() { cc := rl.cc + defer cc.maybeCallStateHook() cc.mu.Lock() defer cc.mu.Unlock() // If ack, notify listener if any @@ -3198,9 +3251,13 @@ func registerHTTPSProtocol(t *http.Transport, rt noDialH2RoundTripper) (err erro } // noDialH2RoundTripper is a RoundTripper which only tries to complete the request -// if there's already has a cached connection to the host. +// if there's already a cached connection to the host. // (The field is exported so it can be accessed via reflect from net/http; tested // by TestNoDialH2RoundTripperType) +// +// A noDialH2RoundTripper is registered with http1.Transport.RegisterProtocol, +// and the http1.Transport can use type assertions to call non-RoundTrip methods on it. +// This lets us expose, for example, NewClientConn to net/http. type noDialH2RoundTripper struct{ *Transport } func (rt noDialH2RoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { @@ -3211,6 +3268,85 @@ func (rt noDialH2RoundTripper) RoundTrip(req *http.Request) (*http.Response, err return res, err } +func (rt noDialH2RoundTripper) NewClientConn(conn net.Conn, internalStateHook func()) (http.RoundTripper, error) { + tr := rt.Transport + cc, err := tr.newClientConn(conn, tr.disableKeepAlives(), internalStateHook) + if err != nil { + return nil, err + } + + // RoundTrip should block when the conn is at its concurrency limit, + // not return an error. Setting strictMaxConcurrentStreams enables this. + cc.strictMaxConcurrentStreams = true + + return netHTTPClientConn{cc}, nil +} + +// netHTTPClientConn wraps ClientConn and implements the interface net/http expects from +// the RoundTripper returned by NewClientConn. +type netHTTPClientConn struct { + cc *ClientConn +} + +func (cc netHTTPClientConn) RoundTrip(req *http.Request) (*http.Response, error) { + return cc.cc.RoundTrip(req) +} + +func (cc netHTTPClientConn) Close() error { + return cc.cc.Close() +} + +func (cc netHTTPClientConn) Err() error { + cc.cc.mu.Lock() + defer cc.cc.mu.Unlock() + if cc.cc.closed { + return errors.New("connection closed") + } + return nil +} + +func (cc netHTTPClientConn) Reserve() error { + defer cc.cc.maybeCallStateHook() + cc.cc.mu.Lock() + defer cc.cc.mu.Unlock() + if !cc.cc.canReserveLocked() { + return errors.New("connection is unavailable") + } + cc.cc.streamsReserved++ + return nil +} + +func (cc netHTTPClientConn) Release() { + defer cc.cc.maybeCallStateHook() + cc.cc.mu.Lock() + defer cc.cc.mu.Unlock() + // We don't complain if streamsReserved is 0. + // + // This is consistent with RoundTrip: both Release and RoundTrip will + // consume a reservation iff one exists. + if cc.cc.streamsReserved > 0 { + cc.cc.streamsReserved-- + } +} + +func (cc netHTTPClientConn) Available() int { + cc.cc.mu.Lock() + defer cc.cc.mu.Unlock() + return cc.cc.availableLocked() +} + +func (cc netHTTPClientConn) InFlight() int { + cc.cc.mu.Lock() + defer cc.cc.mu.Unlock() + return cc.cc.currentRequestCountLocked() +} + +func (cc *ClientConn) maybeCallStateHook() { + if cc.internalStateHook != nil { + cc.internalStateHook() + } +} + func (t *Transport) idleConnTimeout() time.Duration { // to keep things backwards compatible, we use non-zero values of // IdleConnTimeout, followed by using the IdleConnTimeout on the underlying diff --git a/vendor/golang.org/x/net/trace/events.go b/vendor/golang.org/x/net/trace/events.go index 3aaffdd1f7..c2b3c00980 100644 --- a/vendor/golang.org/x/net/trace/events.go +++ b/vendor/golang.org/x/net/trace/events.go @@ -58,8 +58,8 @@ func RenderEvents(w http.ResponseWriter, req *http.Request, sensitive bool) { Buckets: buckets, } - data.Families = make([]string, 0, len(families)) famMu.RLock() + data.Families = make([]string, 0, len(families)) for name := range families { data.Families = append(data.Families, name) } diff --git a/vendor/golang.org/x/sync/errgroup/errgroup.go b/vendor/golang.org/x/sync/errgroup/errgroup.go index 2f45dbc86e..f69fd75468 100644 --- a/vendor/golang.org/x/sync/errgroup/errgroup.go +++ b/vendor/golang.org/x/sync/errgroup/errgroup.go @@ -144,8 +144,8 @@ func (g *Group) SetLimit(n int) { g.sem = nil return } - if len(g.sem) != 0 { - panic(fmt.Errorf("errgroup: modify limit while %v goroutines in the group are still active", len(g.sem))) + if active := len(g.sem); active != 0 { + panic(fmt.Errorf("errgroup: modify limit while %v goroutines in the group are still active", active)) } g.sem = make(chan token, n) } diff --git a/vendor/golang.org/x/sys/cpu/cpu.go b/vendor/golang.org/x/sys/cpu/cpu.go index 34c9ae76ef..63541994ef 100644 --- a/vendor/golang.org/x/sys/cpu/cpu.go +++ b/vendor/golang.org/x/sys/cpu/cpu.go @@ -92,9 +92,6 @@ var ARM64 struct { HasSHA2 bool // SHA2 hardware implementation HasCRC32 bool // CRC32 hardware implementation HasATOMICS bool // Atomic memory operation instruction set - HasHPDS bool // Hierarchical permission disables in translations tables - HasLOR bool // Limited ordering regions - HasPAN bool // Privileged access never HasFPHP bool // Half precision floating-point instruction set HasASIMDHP bool // Advanced SIMD half precision instruction set HasCPUID bool // CPUID identification scheme registers diff --git a/vendor/golang.org/x/sys/cpu/cpu_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_arm64.go index f449c679fe..af2aa99f9f 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_arm64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_arm64.go @@ -65,10 +65,10 @@ func setMinimalFeatures() { func readARM64Registers() { Initialized = true - parseARM64SystemRegisters(getisar0(), getisar1(), getmmfr1(), getpfr0()) + parseARM64SystemRegisters(getisar0(), getisar1(), getpfr0()) } -func parseARM64SystemRegisters(isar0, isar1, mmfr1, pfr0 uint64) { +func parseARM64SystemRegisters(isar0, isar1, pfr0 uint64) { // ID_AA64ISAR0_EL1 switch extractBits(isar0, 4, 7) { case 1: @@ -152,22 +152,6 @@ func parseARM64SystemRegisters(isar0, isar1, mmfr1, pfr0 uint64) { ARM64.HasI8MM = true } - // ID_AA64MMFR1_EL1 - switch extractBits(mmfr1, 12, 15) { - case 1, 2: - ARM64.HasHPDS = true - } - - switch extractBits(mmfr1, 16, 19) { - case 1: - ARM64.HasLOR = true - } - - switch extractBits(mmfr1, 20, 23) { - case 1, 2, 3: - ARM64.HasPAN = true - } - // ID_AA64PFR0_EL1 switch extractBits(pfr0, 16, 19) { case 0: diff --git a/vendor/golang.org/x/sys/cpu/cpu_arm64.s b/vendor/golang.org/x/sys/cpu/cpu_arm64.s index a4f24b3b0c..3b0450a06a 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_arm64.s +++ b/vendor/golang.org/x/sys/cpu/cpu_arm64.s @@ -20,13 +20,6 @@ TEXT ·getisar1(SB),NOSPLIT,$0-8 MOVD R0, ret+0(FP) RET -// func getmmfr1() uint64 -TEXT ·getmmfr1(SB),NOSPLIT,$0-8 - // get Memory Model Feature Register 1 into x0 - MRS ID_AA64MMFR1_EL1, R0 - MOVD R0, ret+0(FP) - RET - // func getpfr0() uint64 TEXT ·getpfr0(SB),NOSPLIT,$0-8 // get Processor Feature Register 0 into x0 diff --git a/vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go index e3fc5a8d31..6ac6e1efb2 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go @@ -8,6 +8,5 @@ package cpu func getisar0() uint64 func getisar1() uint64 -func getmmfr1() uint64 func getpfr0() uint64 func getzfr0() uint64 diff --git a/vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go index 8df2079e15..7f1946780b 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go @@ -8,5 +8,4 @@ package cpu func getisar0() uint64 { return 0 } func getisar1() uint64 { return 0 } -func getmmfr1() uint64 { return 0 } func getpfr0() uint64 { return 0 } diff --git a/vendor/golang.org/x/sys/cpu/cpu_netbsd_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_netbsd_arm64.go index 19aea0633e..ebfb3fc8e7 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_netbsd_arm64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_netbsd_arm64.go @@ -167,7 +167,7 @@ func doinit() { setMinimalFeatures() return } - parseARM64SystemRegisters(cpuid.aa64isar0, cpuid.aa64isar1, cpuid.aa64mmfr1, cpuid.aa64pfr0) + parseARM64SystemRegisters(cpuid.aa64isar0, cpuid.aa64isar1, cpuid.aa64pfr0) Initialized = true } diff --git a/vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.go index 87fd3a7780..85b64d5ccb 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.go @@ -59,7 +59,7 @@ func doinit() { if !ok { return } - parseARM64SystemRegisters(isar0, isar1, 0, 0) + parseARM64SystemRegisters(isar0, isar1, 0) Initialized = true } diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh index 42517077c4..fd39be4efd 100644 --- a/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -256,6 +256,7 @@ struct ltchars { #include #include #include +#include #include #include #include @@ -613,7 +614,7 @@ ccflags="$@" $2 !~ /IOC_MAGIC/ && $2 ~ /^[A-Z][A-Z0-9_]+_MAGIC2?$/ || $2 ~ /^(VM|VMADDR)_/ || - $2 ~ /^IOCTL_VM_SOCKETS_/ || + $2 ~ /^(IOCTL_VM_SOCKETS_|IOCTL_MEI_)/ || $2 ~ /^(TASKSTATS|TS)_/ || $2 ~ /^CGROUPSTATS_/ || $2 ~ /^GENL_/ || diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go index d0a75da572..120a7b35d1 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -1615,6 +1615,8 @@ const ( IN_OPEN = 0x20 IN_Q_OVERFLOW = 0x4000 IN_UNMOUNT = 0x2000 + IOCTL_MEI_CONNECT_CLIENT = 0xc0104801 + IOCTL_MEI_CONNECT_CLIENT_VTAG = 0xc0144804 IPPROTO_AH = 0x33 IPPROTO_BEETPH = 0x5e IPPROTO_COMP = 0x6c diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go index 1c37f9fbc4..97a61fc5b8 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -116,6 +116,8 @@ const ( IEXTEN = 0x8000 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x80044803 + IOCTL_MEI_NOTIFY_SET = 0x40044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 IPV6_FLOWINFO_MASK = 0xffffff0f IPV6_FLOWLABEL_MASK = 0xffff0f00 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go index 6f54d34aef..a0d6d498c4 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -116,6 +116,8 @@ const ( IEXTEN = 0x8000 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x80044803 + IOCTL_MEI_NOTIFY_SET = 0x40044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 IPV6_FLOWINFO_MASK = 0xffffff0f IPV6_FLOWLABEL_MASK = 0xffff0f00 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go index 783ec5c126..dd9c903f9a 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -115,6 +115,8 @@ const ( IEXTEN = 0x8000 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x80044803 + IOCTL_MEI_NOTIFY_SET = 0x40044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 IPV6_FLOWINFO_MASK = 0xffffff0f IPV6_FLOWLABEL_MASK = 0xffff0f00 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go index ca83d3ba16..384c61ca3a 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -120,6 +120,8 @@ const ( IEXTEN = 0x8000 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x80044803 + IOCTL_MEI_NOTIFY_SET = 0x40044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 IPV6_FLOWINFO_MASK = 0xffffff0f IPV6_FLOWLABEL_MASK = 0xffff0f00 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go index 607e611c0c..6384c9831f 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go @@ -116,6 +116,8 @@ const ( IEXTEN = 0x8000 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x80044803 + IOCTL_MEI_NOTIFY_SET = 0x40044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 IPV6_FLOWINFO_MASK = 0xffffff0f IPV6_FLOWLABEL_MASK = 0xffff0f00 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go index b9cb5bd3c0..553c1c6f15 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -115,6 +115,8 @@ const ( IEXTEN = 0x100 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x80 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 IPV6_FLOWINFO_MASK = 0xfffffff IPV6_FLOWLABEL_MASK = 0xfffff diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go index 65b078a638..b3339f2099 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -115,6 +115,8 @@ const ( IEXTEN = 0x100 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x80 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 IPV6_FLOWINFO_MASK = 0xfffffff IPV6_FLOWLABEL_MASK = 0xfffff diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go index 5298a3033d..177091d2bc 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -115,6 +115,8 @@ const ( IEXTEN = 0x100 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x80 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 IPV6_FLOWINFO_MASK = 0xffffff0f IPV6_FLOWLABEL_MASK = 0xffff0f00 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go index 7bc557c876..c5abf156d0 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -115,6 +115,8 @@ const ( IEXTEN = 0x100 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x80 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 IPV6_FLOWINFO_MASK = 0xffffff0f IPV6_FLOWLABEL_MASK = 0xffff0f00 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go index 152399bb04..f1f3fadf57 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go @@ -115,6 +115,8 @@ const ( IEXTEN = 0x400 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 IPV6_FLOWINFO_MASK = 0xfffffff IPV6_FLOWLABEL_MASK = 0xfffff diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go index 1a1ce2409c..203ad9c54a 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -115,6 +115,8 @@ const ( IEXTEN = 0x400 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 IPV6_FLOWINFO_MASK = 0xfffffff IPV6_FLOWLABEL_MASK = 0xfffff diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go index 4231a1fb57..4b9abcb21a 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -115,6 +115,8 @@ const ( IEXTEN = 0x400 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 IPV6_FLOWINFO_MASK = 0xffffff0f IPV6_FLOWLABEL_MASK = 0xffff0f00 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go index 21c0e95266..f87983037d 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -115,6 +115,8 @@ const ( IEXTEN = 0x8000 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x80044803 + IOCTL_MEI_NOTIFY_SET = 0x40044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 IPV6_FLOWINFO_MASK = 0xffffff0f IPV6_FLOWLABEL_MASK = 0xffff0f00 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go index f00d1cd7cf..64347eb354 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -115,6 +115,8 @@ const ( IEXTEN = 0x8000 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x80044803 + IOCTL_MEI_NOTIFY_SET = 0x40044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 IPV6_FLOWINFO_MASK = 0xfffffff IPV6_FLOWLABEL_MASK = 0xfffff diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go index bc8d539e6a..7d71911718 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -119,6 +119,8 @@ const ( IEXTEN = 0x8000 IN_CLOEXEC = 0x400000 IN_NONBLOCK = 0x4000 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 IPV6_FLOWINFO_MASK = 0xfffffff IPV6_FLOWLABEL_MASK = 0xfffff diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go index 439548ec9a..50e8e64497 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go @@ -104,7 +104,7 @@ type Statvfs_t struct { Fsid uint32 Namemax uint32 Owner uint32 - Spare [4]uint32 + Spare [4]uint64 Fstypename [32]byte Mntonname [1024]byte Mntfromname [1024]byte diff --git a/vendor/golang.org/x/tools/go/analysis/diagnostic.go b/vendor/golang.org/x/tools/go/analysis/diagnostic.go index f6118bec64..527540c62c 100644 --- a/vendor/golang.org/x/tools/go/analysis/diagnostic.go +++ b/vendor/golang.org/x/tools/go/analysis/diagnostic.go @@ -33,8 +33,9 @@ type Diagnostic struct { URL string // SuggestedFixes is an optional list of fixes to address the - // problem described by the diagnostic. Each one represents - // an alternative strategy; at most one may be applied. + // problem described by the diagnostic. Each one represents an + // alternative strategy, and should have a distinct and + // descriptive message; at most one may be applied. // // Fixes for different diagnostics should be treated as // independent changes to the same baseline file state, diff --git a/vendor/golang.org/x/tools/go/ast/inspector/cursor.go b/vendor/golang.org/x/tools/go/ast/inspector/cursor.go index 7e72d3c284..fc9bbc714c 100644 --- a/vendor/golang.org/x/tools/go/ast/inspector/cursor.go +++ b/vendor/golang.org/x/tools/go/ast/inspector/cursor.go @@ -467,7 +467,9 @@ func (c Cursor) FindByPos(start, end token.Pos) (Cursor, bool) { // This algorithm could be implemented using c.Inspect, // but it is about 2.5x slower. - best := int32(-1) // push index of latest (=innermost) node containing range + // best is the push-index of the latest (=innermost) node containing range. + // (Beware: latest is not always innermost because FuncDecl.{Name,Type} overlap.) + best := int32(-1) for i, limit := c.indices(); i < limit; i++ { ev := events[i] if ev.index > i { // push? @@ -481,6 +483,19 @@ func (c Cursor) FindByPos(start, end token.Pos) (Cursor, bool) { continue } } else { + // Edge case: FuncDecl.Name and .Type overlap: + // Don't update best from Name to FuncDecl.Type. + // + // The condition can be read as: + // - n is FuncType + // - n.parent is FuncDecl + // - best is strictly beneath the FuncDecl + if ev.typ == 1< ev.parent { + continue + } + nodeEnd = n.End() if n.Pos() > start { break // disjoint, after; stop diff --git a/vendor/golang.org/x/tools/go/packages/visit.go b/vendor/golang.org/x/tools/go/packages/visit.go index af6a60d75f..c546b1b63e 100644 --- a/vendor/golang.org/x/tools/go/packages/visit.go +++ b/vendor/golang.org/x/tools/go/packages/visit.go @@ -78,7 +78,7 @@ func PrintErrors(pkgs []*Package) int { return n } -// Postorder returns an iterator over the the packages in +// Postorder returns an iterator over the packages in // the import graph whose roots are pkg. // Packages are enumerated in dependencies-first order. func Postorder(pkgs []*Package) iter.Seq[*Package] { diff --git a/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go b/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go index 6c0c74968f..6646bf5508 100644 --- a/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go +++ b/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go @@ -249,7 +249,7 @@ func (enc *Encoder) For(obj types.Object) (Path, error) { case *types.Func: // A func, if not package-level, must be a method. - if recv := obj.Type().(*types.Signature).Recv(); recv == nil { + if recv := obj.Signature().Recv(); recv == nil { return "", fmt.Errorf("func is not a method: %v", obj) } @@ -405,7 +405,7 @@ func (enc *Encoder) concreteMethod(meth *types.Func) (Path, bool) { return "", false } - _, named := typesinternal.ReceiverNamed(meth.Type().(*types.Signature).Recv()) + _, named := typesinternal.ReceiverNamed(meth.Signature().Recv()) if named == nil { return "", false } diff --git a/vendor/golang.org/x/tools/go/types/typeutil/map.go b/vendor/golang.org/x/tools/go/types/typeutil/map.go index f035a0b6be..36624572a6 100644 --- a/vendor/golang.org/x/tools/go/types/typeutil/map.go +++ b/vendor/golang.org/x/tools/go/types/typeutil/map.go @@ -304,8 +304,7 @@ func (h hasher) hash(t types.Type) uint32 { case *types.Named: hash := h.hashTypeName(t.Obj()) targs := t.TypeArgs() - for i := 0; i < targs.Len(); i++ { - targ := targs.At(i) + for targ := range targs.Types() { hash += 2 * h.hash(targ) } return hash diff --git a/vendor/golang.org/x/tools/imports/forward.go b/vendor/golang.org/x/tools/imports/forward.go index 22ae777726..5d120d077c 100644 --- a/vendor/golang.org/x/tools/imports/forward.go +++ b/vendor/golang.org/x/tools/imports/forward.go @@ -69,3 +69,9 @@ func Process(filename string, src []byte, opt *Options) ([]byte, error) { } return intimp.Process(filename, src, intopt) } + +// VendorlessPath returns the devendorized version of the import path ipath. +// For example, VendorlessPath("foo/barbendor/a/b") return "a/b". +func VendorlessPath(ipath string) string { + return intimp.VendorlessPath(ipath) +} diff --git a/vendor/golang.org/x/tools/internal/gcimporter/bimport.go b/vendor/golang.org/x/tools/internal/gcimporter/bimport.go index 734c46198d..555ef626c0 100644 --- a/vendor/golang.org/x/tools/internal/gcimporter/bimport.go +++ b/vendor/golang.org/x/tools/internal/gcimporter/bimport.go @@ -34,7 +34,7 @@ type fileInfo struct { const maxlines = 64 * 1024 func (s *fakeFileSet) pos(file string, line, column int) token.Pos { - // TODO(mdempsky): Make use of column. + _ = column // TODO(mdempsky): Make use of column. // Since we don't know the set of needed file positions, we reserve maxlines // positions per file. We delay calling token.File.SetLines until all diff --git a/vendor/golang.org/x/tools/internal/gcimporter/iexport.go b/vendor/golang.org/x/tools/internal/gcimporter/iexport.go index 4a4357d2bd..2bef2b058b 100644 --- a/vendor/golang.org/x/tools/internal/gcimporter/iexport.go +++ b/vendor/golang.org/x/tools/internal/gcimporter/iexport.go @@ -829,8 +829,7 @@ func (p *iexporter) doDecl(obj types.Object) { // their name must be qualified before exporting recv. if rparams := sig.RecvTypeParams(); rparams.Len() > 0 { prefix := obj.Name() + "." + m.Name() - for i := 0; i < rparams.Len(); i++ { - rparam := rparams.At(i) + for rparam := range rparams.TypeParams() { name := tparamExportName(prefix, rparam) w.p.tparamNames[rparam.Obj()] = name } @@ -944,6 +943,13 @@ func (w *exportWriter) posV0(pos token.Pos) { } func (w *exportWriter) pkg(pkg *types.Package) { + if pkg == nil { + // [exportWriter.typ] accepts a nil pkg only for types + // of constants, which cannot contain named objects + // such as fields or methods and thus should never + // reach this method (#76222). + panic("nil package") + } // Ensure any referenced packages are declared in the main index. w.p.allPkgs[pkg] = true @@ -959,9 +965,11 @@ func (w *exportWriter) qualifiedType(obj *types.TypeName) { w.pkg(obj.Pkg()) } -// TODO(rfindley): what does 'pkg' even mean here? It would be better to pass -// it in explicitly into signatures and structs that may use it for -// constructing fields. +// typ emits the specified type. +// +// Objects within the type (struct fields and interface methods) are +// qualified by pkg. It may be nil if the type cannot contain objects, +// such as the type of a constant. func (w *exportWriter) typ(t types.Type, pkg *types.Package) { w.data.uint64(w.p.typOff(t, pkg)) } @@ -991,6 +999,7 @@ func (w *exportWriter) startType(k itag) { w.data.uint64(uint64(k)) } +// doTyp is the implementation of [exportWriter.typ]. func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) { if trace { w.p.trace("exporting type %s (%T)", t, t) @@ -1064,7 +1073,7 @@ func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) { case *types.Signature: w.startType(signatureType) - w.pkg(pkg) + w.pkg(pkg) // qualifies param/result vars w.signature(t) case *types.Struct: @@ -1110,19 +1119,19 @@ func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) { case *types.Interface: w.startType(interfaceType) - w.pkg(pkg) + w.pkg(pkg) // qualifies unexported method funcs n := t.NumEmbeddeds() w.uint64(uint64(n)) for i := 0; i < n; i++ { ft := t.EmbeddedType(i) - tPkg := pkg if named, _ := types.Unalias(ft).(*types.Named); named != nil { w.pos(named.Obj().Pos()) } else { + // e.g. ~int w.pos(token.NoPos) } - w.typ(ft, tPkg) + w.typ(ft, pkg) } // See comment for struct fields. In shallow mode we change the encoding @@ -1223,20 +1232,19 @@ func (w *exportWriter) signature(sig *types.Signature) { func (w *exportWriter) typeList(ts *types.TypeList, pkg *types.Package) { w.uint64(uint64(ts.Len())) - for i := 0; i < ts.Len(); i++ { - w.typ(ts.At(i), pkg) + for t := range ts.Types() { + w.typ(t, pkg) } } func (w *exportWriter) tparamList(prefix string, list *types.TypeParamList, pkg *types.Package) { ll := uint64(list.Len()) w.uint64(ll) - for i := 0; i < list.Len(); i++ { - tparam := list.At(i) + for tparam := range list.TypeParams() { // Set the type parameter exportName before exporting its type. exportName := tparamExportName(prefix, tparam) w.p.tparamNames[tparam.Obj()] = exportName - w.typ(list.At(i), pkg) + w.typ(tparam, pkg) } } diff --git a/vendor/golang.org/x/tools/internal/gcimporter/iimport.go b/vendor/golang.org/x/tools/internal/gcimporter/iimport.go index 82e6c9d2dc..4d6d50094a 100644 --- a/vendor/golang.org/x/tools/internal/gcimporter/iimport.go +++ b/vendor/golang.org/x/tools/internal/gcimporter/iimport.go @@ -432,10 +432,10 @@ func (p *iimporter) doDecl(pkg *types.Package, name string) { errorf("%v.%v not in index", pkg, name) } - r := &importReader{p: p, currPkg: pkg} + r := &importReader{p: p} r.declReader.Reset(p.declData[off:]) - r.obj(name) + r.obj(pkg, name) } func (p *iimporter) stringAt(off uint64) string { @@ -551,7 +551,6 @@ func canReuse(def *types.Named, rhs types.Type) bool { type importReader struct { p *iimporter declReader bytes.Reader - currPkg *types.Package prevFile string prevLine int64 prevColumn int64 @@ -565,7 +564,8 @@ type importReader struct { // for 1.24, but the fix was not worth back-porting). var markBlack = func(name *types.TypeName) {} -func (r *importReader) obj(name string) { +// obj decodes and declares the package-level object denoted by (pkg, name). +func (r *importReader) obj(pkg *types.Package, name string) { tag := r.byte() pos := r.pos() @@ -576,27 +576,27 @@ func (r *importReader) obj(name string) { tparams = r.tparamList() } typ := r.typ() - obj := aliases.NewAlias(r.p.aliases, pos, r.currPkg, name, typ, tparams) + obj := aliases.NewAlias(r.p.aliases, pos, pkg, name, typ, tparams) markBlack(obj) // workaround for golang/go#69912 r.declare(obj) case constTag: typ, val := r.value() - r.declare(types.NewConst(pos, r.currPkg, name, typ, val)) + r.declare(types.NewConst(pos, pkg, name, typ, val)) case funcTag, genericFuncTag: var tparams []*types.TypeParam if tag == genericFuncTag { tparams = r.tparamList() } - sig := r.signature(nil, nil, tparams) - r.declare(types.NewFunc(pos, r.currPkg, name, sig)) + sig := r.signature(pkg, nil, nil, tparams) + r.declare(types.NewFunc(pos, pkg, name, sig)) case typeTag, genericTypeTag: // Types can be recursive. We need to setup a stub // declaration before recursing. - obj := types.NewTypeName(pos, r.currPkg, name, nil) + obj := types.NewTypeName(pos, pkg, name, nil) named := types.NewNamed(obj, nil, nil) markBlack(obj) // workaround for golang/go#69912 @@ -616,7 +616,7 @@ func (r *importReader) obj(name string) { for n := r.uint64(); n > 0; n-- { mpos := r.pos() mname := r.ident() - recv := r.param() + recv := r.param(pkg) // If the receiver has any targs, set those as the // rparams of the method (since those are the @@ -630,9 +630,9 @@ func (r *importReader) obj(name string) { rparams[i] = types.Unalias(targs.At(i)).(*types.TypeParam) } } - msig := r.signature(recv, rparams, nil) + msig := r.signature(pkg, recv, rparams, nil) - named.AddMethod(types.NewFunc(mpos, r.currPkg, mname, msig)) + named.AddMethod(types.NewFunc(mpos, pkg, mname, msig)) } } @@ -644,12 +644,12 @@ func (r *importReader) obj(name string) { errorf("unexpected type param type") } name0 := tparamName(name) - tn := types.NewTypeName(pos, r.currPkg, name0, nil) + tn := types.NewTypeName(pos, pkg, name0, nil) t := types.NewTypeParam(tn, nil) // To handle recursive references to the typeparam within its // bound, save the partial type in tparamIndex before reading the bounds. - id := ident{r.currPkg, name} + id := ident{pkg, name} r.p.tparamIndex[id] = t var implicit bool if r.p.version >= iexportVersionGo1_18 { @@ -672,7 +672,7 @@ func (r *importReader) obj(name string) { case varTag: typ := r.typ() - v := types.NewVar(pos, r.currPkg, name, typ) + v := types.NewVar(pos, pkg, name, typ) typesinternal.SetVarKind(v, typesinternal.PackageVar) r.declare(v) @@ -905,11 +905,11 @@ func (r *importReader) doType(base *types.Named) (res types.Type) { case mapType: return types.NewMap(r.typ(), r.typ()) case signatureType: - r.currPkg = r.pkg() - return r.signature(nil, nil, nil) + paramPkg := r.pkg() + return r.signature(paramPkg, nil, nil, nil) case structType: - r.currPkg = r.pkg() + fieldPkg := r.pkg() fields := make([]*types.Var, r.uint64()) tags := make([]string, len(fields)) @@ -932,7 +932,7 @@ func (r *importReader) doType(base *types.Named) (res types.Type) { // discussed in iexport.go, this is not correct, but mostly works and is // preferable to failing (for now at least). if field == nil { - field = types.NewField(fpos, r.currPkg, fname, ftyp, emb) + field = types.NewField(fpos, fieldPkg, fname, ftyp, emb) } fields[i] = field @@ -941,7 +941,7 @@ func (r *importReader) doType(base *types.Named) (res types.Type) { return types.NewStruct(fields, tags) case interfaceType: - r.currPkg = r.pkg() + methodPkg := r.pkg() // qualifies methods and their param/result vars embeddeds := make([]types.Type, r.uint64()) for i := range embeddeds { @@ -963,12 +963,12 @@ func (r *importReader) doType(base *types.Named) (res types.Type) { // don't agree with this. var recv *types.Var if base != nil { - recv = types.NewVar(token.NoPos, r.currPkg, "", base) + recv = types.NewVar(token.NoPos, methodPkg, "", base) } - msig := r.signature(recv, nil, nil) + msig := r.signature(methodPkg, recv, nil, nil) if method == nil { - method = types.NewFunc(mpos, r.currPkg, mname, msig) + method = types.NewFunc(mpos, methodPkg, mname, msig) } methods[i] = method } @@ -1049,9 +1049,9 @@ func (r *importReader) objectPathObject() types.Object { return obj } -func (r *importReader) signature(recv *types.Var, rparams []*types.TypeParam, tparams []*types.TypeParam) *types.Signature { - params := r.paramList() - results := r.paramList() +func (r *importReader) signature(paramPkg *types.Package, recv *types.Var, rparams []*types.TypeParam, tparams []*types.TypeParam) *types.Signature { + params := r.paramList(paramPkg) + results := r.paramList(paramPkg) variadic := params.Len() > 0 && r.bool() return types.NewSignatureType(recv, rparams, tparams, params, results, variadic) } @@ -1070,19 +1070,19 @@ func (r *importReader) tparamList() []*types.TypeParam { return xs } -func (r *importReader) paramList() *types.Tuple { +func (r *importReader) paramList(pkg *types.Package) *types.Tuple { xs := make([]*types.Var, r.uint64()) for i := range xs { - xs[i] = r.param() + xs[i] = r.param(pkg) } return types.NewTuple(xs...) } -func (r *importReader) param() *types.Var { +func (r *importReader) param(pkg *types.Package) *types.Var { pos := r.pos() name := r.ident() typ := r.typ() - return types.NewParam(pos, r.currPkg, name, typ) + return types.NewParam(pos, pkg, name, typ) } func (r *importReader) bool() bool { diff --git a/vendor/golang.org/x/tools/internal/stdlib/deps.go b/vendor/golang.org/x/tools/internal/stdlib/deps.go index 96ad6c5821..581784da43 100644 --- a/vendor/golang.org/x/tools/internal/stdlib/deps.go +++ b/vendor/golang.org/x/tools/internal/stdlib/deps.go @@ -12,354 +12,508 @@ type pkginfo struct { } var deps = [...]pkginfo{ - {"archive/tar", "\x03k\x03E;\x01\n\x01$\x01\x01\x02\x05\b\x02\x01\x02\x02\f"}, - {"archive/zip", "\x02\x04a\a\x03\x12\x021;\x01+\x05\x01\x0f\x03\x02\x0e\x04"}, - {"bufio", "\x03k\x83\x01D\x14"}, - {"bytes", "n*Y\x03\fG\x02\x02"}, + {"archive/tar", "\x03n\x03E<\x01\n\x01$\x01\x01\x02\x05\b\x02\x01\x02\x02\f"}, + {"archive/zip", "\x02\x04d\a\x03\x12\x021<\x01+\x05\x01\x0f\x03\x02\x0e\x04"}, + {"bufio", "\x03n\x84\x01D\x14"}, + {"bytes", "q*Z\x03\fG\x02\x02"}, {"cmp", ""}, - {"compress/bzip2", "\x02\x02\xed\x01A"}, - {"compress/flate", "\x02l\x03\x80\x01\f\x033\x01\x03"}, - {"compress/gzip", "\x02\x04a\a\x03\x14lT"}, - {"compress/lzw", "\x02l\x03\x80\x01"}, - {"compress/zlib", "\x02\x04a\a\x03\x12\x01m"}, - {"container/heap", "\xb3\x02"}, + {"compress/bzip2", "\x02\x02\xf1\x01A"}, + {"compress/flate", "\x02o\x03\x81\x01\f\x033\x01\x03"}, + {"compress/gzip", "\x02\x04d\a\x03\x14mT"}, + {"compress/lzw", "\x02o\x03\x81\x01"}, + {"compress/zlib", "\x02\x04d\a\x03\x12\x01n"}, + {"container/heap", "\xb7\x02"}, {"container/list", ""}, {"container/ring", ""}, - {"context", "n\\m\x01\r"}, - {"crypto", "\x83\x01nC"}, - {"crypto/aes", "\x10\n\a\x93\x02"}, - {"crypto/cipher", "\x03\x1e\x01\x01\x1e\x11\x1c+X"}, - {"crypto/des", "\x10\x13\x1e-+\x9b\x01\x03"}, - {"crypto/dsa", "A\x04)\x83\x01\r"}, - {"crypto/ecdh", "\x03\v\f\x0e\x04\x15\x04\r\x1c\x83\x01"}, - {"crypto/ecdsa", "\x0e\x05\x03\x04\x01\x0e\a\v\x05\x01\x04\f\x01\x1c\x83\x01\r\x05K\x01"}, - {"crypto/ed25519", "\x0e\x1c\x11\x06\n\a\x1c\x83\x01C"}, - {"crypto/elliptic", "0>\x83\x01\r9"}, - {"crypto/fips140", " \x05"}, - {"crypto/hkdf", "-\x13\x01-\x15"}, - {"crypto/hmac", "\x1a\x14\x12\x01\x111"}, - {"crypto/internal/boring", "\x0e\x02\rf"}, - {"crypto/internal/boring/bbig", "\x1a\xe4\x01M"}, - {"crypto/internal/boring/bcache", "\xb8\x02\x13"}, + {"context", "q[o\x01\r"}, + {"crypto", "\x86\x01oC"}, + {"crypto/aes", "\x10\n\t\x95\x02"}, + {"crypto/cipher", "\x03 \x01\x01\x1f\x11\x1c+Y"}, + {"crypto/des", "\x10\x15\x1f-+\x9c\x01\x03"}, + {"crypto/dsa", "D\x04)\x84\x01\r"}, + {"crypto/ecdh", "\x03\v\f\x10\x04\x16\x04\r\x1c\x84\x01"}, + {"crypto/ecdsa", "\x0e\x05\x03\x04\x01\x10\a\v\x06\x01\x04\f\x01\x1c\x84\x01\r\x05K\x01"}, + {"crypto/ed25519", "\x0e\x1e\x11\a\n\a\x1c\x84\x01C"}, + {"crypto/elliptic", "2?\x84\x01\r9"}, + {"crypto/fips140", "\"\x05"}, + {"crypto/hkdf", "/\x14\x01-\x15"}, + {"crypto/hmac", "\x1a\x16\x13\x01\x111"}, + {"crypto/internal/boring", "\x0e\x02\ri"}, + {"crypto/internal/boring/bbig", "\x1a\xe8\x01M"}, + {"crypto/internal/boring/bcache", "\xbc\x02\x13"}, {"crypto/internal/boring/sig", ""}, - {"crypto/internal/cryptotest", "\x03\r\n\x06$\x0e\x19\x06\x12\x12 \x04\a\t\x16\x01\x11\x11\x1b\x01\a\x05\b\x03\x05\v"}, - {"crypto/internal/entropy", "F"}, - {"crypto/internal/fips140", "?/\x15\xa7\x01\v\x16"}, - {"crypto/internal/fips140/aes", "\x03\x1d\x03\x02\x13\x05\x01\x01\x05*\x92\x014"}, - {"crypto/internal/fips140/aes/gcm", " \x01\x02\x02\x02\x11\x05\x01\x06*\x8f\x01"}, - {"crypto/internal/fips140/alias", "\xcb\x02"}, - {"crypto/internal/fips140/bigmod", "%\x18\x01\x06*\x92\x01"}, - {"crypto/internal/fips140/check", " \x0e\x06\t\x02\xb2\x01Z"}, - {"crypto/internal/fips140/check/checktest", "%\x85\x02!"}, - {"crypto/internal/fips140/drbg", "\x03\x1c\x01\x01\x04\x13\x05\b\x01(\x83\x01\x0f7"}, - {"crypto/internal/fips140/ecdh", "\x03\x1d\x05\x02\t\r1\x83\x01\x0f7"}, - {"crypto/internal/fips140/ecdsa", "\x03\x1d\x04\x01\x02\a\x02\x068\x15nF"}, - {"crypto/internal/fips140/ed25519", "\x03\x1d\x05\x02\x04\v8\xc6\x01\x03"}, - {"crypto/internal/fips140/edwards25519", "%\a\f\x051\x92\x017"}, - {"crypto/internal/fips140/edwards25519/field", "%\x13\x051\x92\x01"}, - {"crypto/internal/fips140/hkdf", "\x03\x1d\x05\t\x06:\x15"}, - {"crypto/internal/fips140/hmac", "\x03\x1d\x14\x01\x018\x15"}, - {"crypto/internal/fips140/mlkem", "\x03\x1d\x05\x02\x0e\x03\x051"}, - {"crypto/internal/fips140/nistec", "%\f\a\x051\x92\x01*\r\x14"}, - {"crypto/internal/fips140/nistec/fiat", "%\x136\x92\x01"}, - {"crypto/internal/fips140/pbkdf2", "\x03\x1d\x05\t\x06:\x15"}, - {"crypto/internal/fips140/rsa", "\x03\x1d\x04\x01\x02\r\x01\x01\x026\x15nF"}, - {"crypto/internal/fips140/sha256", "\x03\x1d\x1d\x01\x06*\x15}"}, - {"crypto/internal/fips140/sha3", "\x03\x1d\x18\x05\x010\x92\x01K"}, - {"crypto/internal/fips140/sha512", "\x03\x1d\x1d\x01\x06*\x15}"}, - {"crypto/internal/fips140/ssh", "%^"}, - {"crypto/internal/fips140/subtle", "#\x1a\xc3\x01"}, - {"crypto/internal/fips140/tls12", "\x03\x1d\x05\t\x06\x028\x15"}, - {"crypto/internal/fips140/tls13", "\x03\x1d\x05\b\a\t1\x15"}, - {"crypto/internal/fips140cache", "\xaa\x02\r&"}, + {"crypto/internal/constanttime", ""}, + {"crypto/internal/cryptotest", "\x03\r\n\b%\x0e\x19\x06\x12\x12 \x04\x06\t\x18\x01\x11\x11\x1b\x01\a\x05\b\x03\x05\v"}, + {"crypto/internal/entropy", "I"}, + {"crypto/internal/entropy/v1.0.0", "B/\x93\x018\x13"}, + {"crypto/internal/fips140", "A0\xbd\x01\v\x16"}, + {"crypto/internal/fips140/aes", "\x03\x1f\x03\x02\x13\x05\x01\x01\x06*\x93\x014"}, + {"crypto/internal/fips140/aes/gcm", "\"\x01\x02\x02\x02\x11\x05\x01\a*\x90\x01"}, + {"crypto/internal/fips140/alias", "\xcf\x02"}, + {"crypto/internal/fips140/bigmod", "'\x18\x01\a*\x93\x01"}, + {"crypto/internal/fips140/check", "\"\x0e\x06\t\x02\xb4\x01Z"}, + {"crypto/internal/fips140/check/checktest", "'\x87\x02!"}, + {"crypto/internal/fips140/drbg", "\x03\x1e\x01\x01\x04\x13\x05\t\x01(\x84\x01\x0f7\x01"}, + {"crypto/internal/fips140/ecdh", "\x03\x1f\x05\x02\t\r2\x84\x01\x0f7"}, + {"crypto/internal/fips140/ecdsa", "\x03\x1f\x04\x01\x02\a\x02\x069\x15oF"}, + {"crypto/internal/fips140/ed25519", "\x03\x1f\x05\x02\x04\v9\xc7\x01\x03"}, + {"crypto/internal/fips140/edwards25519", "\x1e\t\a\x112\x93\x017"}, + {"crypto/internal/fips140/edwards25519/field", "'\x13\x052\x93\x01"}, + {"crypto/internal/fips140/hkdf", "\x03\x1f\x05\t\x06;\x15"}, + {"crypto/internal/fips140/hmac", "\x03\x1f\x14\x01\x019\x15"}, + {"crypto/internal/fips140/mlkem", "\x03\x1f\x05\x02\x0e\x03\x052\xca\x01"}, + {"crypto/internal/fips140/nistec", "\x1e\t\f\f2\x93\x01*\r\x14"}, + {"crypto/internal/fips140/nistec/fiat", "'\x137\x93\x01"}, + {"crypto/internal/fips140/pbkdf2", "\x03\x1f\x05\t\x06;\x15"}, + {"crypto/internal/fips140/rsa", "\x03\x1b\x04\x04\x01\x02\r\x01\x01\x027\x15oF"}, + {"crypto/internal/fips140/sha256", "\x03\x1f\x1d\x01\a*\x15~"}, + {"crypto/internal/fips140/sha3", "\x03\x1f\x18\x05\x011\x93\x01K"}, + {"crypto/internal/fips140/sha512", "\x03\x1f\x1d\x01\a*\x15~"}, + {"crypto/internal/fips140/ssh", "'_"}, + {"crypto/internal/fips140/subtle", "\x1e\a\x1a\xc5\x01"}, + {"crypto/internal/fips140/tls12", "\x03\x1f\x05\t\x06\x029\x15"}, + {"crypto/internal/fips140/tls13", "\x03\x1f\x05\b\a\t2\x15"}, + {"crypto/internal/fips140cache", "\xae\x02\r&"}, {"crypto/internal/fips140deps", ""}, - {"crypto/internal/fips140deps/byteorder", "\x99\x01"}, - {"crypto/internal/fips140deps/cpu", "\xae\x01\a"}, - {"crypto/internal/fips140deps/godebug", "\xb6\x01"}, - {"crypto/internal/fips140hash", "5\x1b3\xc8\x01"}, - {"crypto/internal/fips140only", "'\r\x01\x01M3;"}, + {"crypto/internal/fips140deps/byteorder", "\x9c\x01"}, + {"crypto/internal/fips140deps/cpu", "\xb1\x01\a"}, + {"crypto/internal/fips140deps/godebug", "\xb9\x01"}, + {"crypto/internal/fips140deps/time", "\xc9\x02"}, + {"crypto/internal/fips140hash", "7\x1c3\xc9\x01"}, + {"crypto/internal/fips140only", ")\r\x01\x01N3<"}, {"crypto/internal/fips140test", ""}, - {"crypto/internal/hpke", "\x0e\x01\x01\x03\x053#+gM"}, - {"crypto/internal/impl", "\xb5\x02"}, - {"crypto/internal/randutil", "\xf1\x01\x12"}, - {"crypto/internal/sysrand", "nn! \r\r\x01\x01\f\x06"}, - {"crypto/internal/sysrand/internal/seccomp", "n"}, - {"crypto/md5", "\x0e3-\x15\x16g"}, - {"crypto/mlkem", "/"}, - {"crypto/pbkdf2", "2\x0e\x01-\x15"}, - {"crypto/rand", "\x1a\x06\a\x1a\x04\x01(\x83\x01\rM"}, - {"crypto/rc4", "#\x1e-\xc6\x01"}, - {"crypto/rsa", "\x0e\f\x01\t\x0f\r\x01\x04\x06\a\x1c\x03\x123;\f\x01"}, - {"crypto/sha1", "\x0e\f'\x03*\x15\x16\x15R"}, - {"crypto/sha256", "\x0e\f\x1aO"}, - {"crypto/sha3", "\x0e'N\xc8\x01"}, - {"crypto/sha512", "\x0e\f\x1cM"}, - {"crypto/subtle", "8\x9b\x01W"}, - {"crypto/tls", "\x03\b\x02\x01\x01\x01\x01\x02\x01\x01\x01\x02\x01\x01\a\x01\r\n\x01\t\x05\x03\x01\x01\x01\x01\x02\x01\x02\x01\x17\x02\x03\x12\x16\x15\b;\x16\x16\r\b\x01\x01\x01\x02\x01\r\x06\x02\x01\x0f"}, - {"crypto/tls/internal/fips140tls", "\x17\xa1\x02"}, - {"crypto/x509", "\x03\v\x01\x01\x01\x01\x01\x01\x01\x012\x05\x01\x01\x02\x05\x0e\x06\x02\x02\x03E\x038\x01\x02\b\x01\x01\x02\a\x10\x05\x01\x06\x02\x05\n\x01\x02\x0e\x02\x01\x01\x02\x03\x01"}, - {"crypto/x509/pkix", "d\x06\a\x8d\x01G"}, - {"database/sql", "\x03\nK\x16\x03\x80\x01\v\a\"\x05\b\x02\x03\x01\r\x02\x02\x02"}, - {"database/sql/driver", "\ra\x03\xb4\x01\x0f\x11"}, - {"debug/buildinfo", "\x03X\x02\x01\x01\b\a\x03e\x19\x02\x01+\x0f\x1f"}, - {"debug/dwarf", "\x03d\a\x03\x80\x011\x11\x01\x01"}, - {"debug/elf", "\x03\x06Q\r\a\x03e\x1a\x01,\x17\x01\x16"}, - {"debug/gosym", "\x03d\n\xc2\x01\x01\x01\x02"}, - {"debug/macho", "\x03\x06Q\r\ne\x1b,\x17\x01"}, - {"debug/pe", "\x03\x06Q\r\a\x03e\x1b,\x17\x01\x16"}, - {"debug/plan9obj", "g\a\x03e\x1b,"}, - {"embed", "n*@\x19\x01S"}, + {"crypto/internal/hpke", "\x0e\x01\x01\x03\x056#+hM"}, + {"crypto/internal/impl", "\xb9\x02"}, + {"crypto/internal/randutil", "\xf5\x01\x12"}, + {"crypto/internal/sysrand", "qo! \r\r\x01\x01\f\x06"}, + {"crypto/internal/sysrand/internal/seccomp", "q"}, + {"crypto/md5", "\x0e6-\x15\x16h"}, + {"crypto/mlkem", "1"}, + {"crypto/pbkdf2", "4\x0f\x01-\x15"}, + {"crypto/rand", "\x1a\b\a\x1b\x04\x01(\x84\x01\rM"}, + {"crypto/rc4", "%\x1f-\xc7\x01"}, + {"crypto/rsa", "\x0e\f\x01\v\x0f\x0e\x01\x04\x06\a\x1c\x03\x123<\f\x01"}, + {"crypto/sha1", "\x0e\f*\x03*\x15\x16\x15S"}, + {"crypto/sha256", "\x0e\f\x1cP"}, + {"crypto/sha3", "\x0e)O\xc9\x01"}, + {"crypto/sha512", "\x0e\f\x1eN"}, + {"crypto/subtle", "\x1e\x1c\x9c\x01X"}, + {"crypto/tls", "\x03\b\x02\x01\x01\x01\x01\x02\x01\x01\x01\x02\x01\x01\t\x01\r\n\x01\n\x05\x03\x01\x01\x01\x01\x02\x01\x02\x01\x17\x02\x03\x12\x16\x15\b<\x16\x16\r\b\x01\x01\x01\x02\x01\r\x06\x02\x01\x0f"}, + {"crypto/tls/internal/fips140tls", "\x17\xa5\x02"}, + {"crypto/x509", "\x03\v\x01\x01\x01\x01\x01\x01\x01\x015\x05\x01\x01\x02\x05\x0e\x06\x02\x02\x03E\x039\x01\x02\b\x01\x01\x02\a\x10\x05\x01\x06\x02\x05\b\x02\x01\x02\x0e\x02\x01\x01\x02\x03\x01"}, + {"crypto/x509/pkix", "g\x06\a\x8e\x01G"}, + {"database/sql", "\x03\nN\x16\x03\x81\x01\v\a\"\x05\b\x02\x03\x01\r\x02\x02\x02"}, + {"database/sql/driver", "\rd\x03\xb5\x01\x0f\x11"}, + {"debug/buildinfo", "\x03[\x02\x01\x01\b\a\x03e\x1a\x02\x01+\x0f\x1f"}, + {"debug/dwarf", "\x03g\a\x03\x81\x011\x11\x01\x01"}, + {"debug/elf", "\x03\x06T\r\a\x03e\x1b\x01\f \x17\x01\x16"}, + {"debug/gosym", "\x03g\n\xc3\x01\x01\x01\x02"}, + {"debug/macho", "\x03\x06T\r\ne\x1c,\x17\x01"}, + {"debug/pe", "\x03\x06T\r\a\x03e\x1c,\x17\x01\x16"}, + {"debug/plan9obj", "j\a\x03e\x1c,"}, + {"embed", "q*A\x19\x01S"}, {"embed/internal/embedtest", ""}, {"encoding", ""}, - {"encoding/ascii85", "\xf1\x01C"}, - {"encoding/asn1", "\x03k\x03\x8c\x01\x01'\r\x02\x01\x10\x03\x01"}, - {"encoding/base32", "\xf1\x01A\x02"}, - {"encoding/base64", "\x99\x01XA\x02"}, - {"encoding/binary", "n\x83\x01\f(\r\x05"}, - {"encoding/csv", "\x02\x01k\x03\x80\x01D\x12\x02"}, - {"encoding/gob", "\x02`\x05\a\x03e\x1b\v\x01\x03\x1d\b\x12\x01\x0f\x02"}, - {"encoding/hex", "n\x03\x80\x01A\x03"}, - {"encoding/json", "\x03\x01^\x04\b\x03\x80\x01\f(\r\x02\x01\x02\x10\x01\x01\x02"}, - {"encoding/pem", "\x03c\b\x83\x01A\x03"}, - {"encoding/xml", "\x02\x01_\f\x03\x80\x014\x05\n\x01\x02\x10\x02"}, - {"errors", "\xca\x01\x81\x01"}, - {"expvar", "kK?\b\v\x15\r\b\x02\x03\x01\x11"}, - {"flag", "b\f\x03\x80\x01,\b\x05\b\x02\x01\x10"}, - {"fmt", "nE>\f \b\r\x02\x03\x12"}, - {"go/ast", "\x03\x01m\x0e\x01q\x03)\b\r\x02\x01"}, - {"go/build", "\x02\x01k\x03\x01\x02\x02\a\x02\x01\x17\x1f\x04\x02\t\x19\x13\x01+\x01\x04\x01\a\b\x02\x01\x12\x02\x02"}, - {"go/build/constraint", "n\xc6\x01\x01\x12\x02"}, - {"go/constant", "q\x0f}\x01\x024\x01\x02\x12"}, - {"go/doc", "\x04m\x01\x05\t>31\x10\x02\x01\x12\x02"}, - {"go/doc/comment", "\x03n\xc1\x01\x01\x01\x01\x12\x02"}, - {"go/format", "\x03n\x01\v\x01\x02qD"}, - {"go/importer", "s\a\x01\x01\x04\x01p9"}, - {"go/internal/gccgoimporter", "\x02\x01X\x13\x03\x04\v\x01n\x02,\x01\x05\x11\x01\f\b"}, - {"go/internal/gcimporter", "\x02o\x0f\x010\x05\x0e-,\x15\x03\x02"}, - {"go/internal/srcimporter", "q\x01\x01\n\x03\x01p,\x01\x05\x12\x02\x14"}, - {"go/parser", "\x03k\x03\x01\x02\v\x01q\x01+\x06\x12"}, - {"go/printer", "q\x01\x02\x03\tq\f \x15\x02\x01\x02\v\x05\x02"}, - {"go/scanner", "\x03n\x0fq2\x10\x01\x13\x02"}, - {"go/token", "\x04m\x83\x01>\x02\x03\x01\x0f\x02"}, - {"go/types", "\x03\x01\x06d\x03\x01\x03\b\x03\x02\x15\x1f\x061\x04\x03\t \x06\a\b\x01\x01\x01\x02\x01\x0f\x02\x02"}, - {"go/version", "\xbb\x01z"}, - {"hash", "\xf1\x01"}, - {"hash/adler32", "n\x15\x16"}, - {"hash/crc32", "n\x15\x16\x15\x89\x01\x01\x13"}, - {"hash/crc64", "n\x15\x16\x9e\x01"}, - {"hash/fnv", "n\x15\x16g"}, - {"hash/maphash", "\x83\x01\x11!\x03\x93\x01"}, - {"html", "\xb5\x02\x02\x12"}, - {"html/template", "\x03h\x06\x18-;\x01\n!\x05\x01\x02\x03\f\x01\x02\f\x01\x03\x02"}, - {"image", "\x02l\x1ee\x0f4\x03\x01"}, + {"encoding/ascii85", "\xf5\x01C"}, + {"encoding/asn1", "\x03n\x03e(\x01'\r\x02\x01\x10\x03\x01"}, + {"encoding/base32", "\xf5\x01A\x02"}, + {"encoding/base64", "\x9c\x01YA\x02"}, + {"encoding/binary", "q\x84\x01\f(\r\x05"}, + {"encoding/csv", "\x02\x01n\x03\x81\x01D\x12\x02"}, + {"encoding/gob", "\x02c\x05\a\x03e\x1c\v\x01\x03\x1d\b\x12\x01\x0f\x02"}, + {"encoding/hex", "q\x03\x81\x01A\x03"}, + {"encoding/json", "\x03\x01a\x04\b\x03\x81\x01\f(\r\x02\x01\x02\x10\x01\x01\x02"}, + {"encoding/pem", "\x03f\b\x84\x01A\x03"}, + {"encoding/xml", "\x02\x01b\f\x03\x81\x014\x05\n\x01\x02\x10\x02"}, + {"errors", "\xcc\x01\x83\x01"}, + {"expvar", "nK@\b\v\x15\r\b\x02\x03\x01\x11"}, + {"flag", "e\f\x03\x81\x01,\b\x05\b\x02\x01\x10"}, + {"fmt", "qE&\x19\f \b\r\x02\x03\x12"}, + {"go/ast", "\x03\x01p\x0e\x01r\x03)\b\r\x02\x01\x12\x02"}, + {"go/build", "\x02\x01n\x03\x01\x02\x02\a\x02\x01\x17\x1f\x04\x02\b\x1b\x13\x01+\x01\x04\x01\a\b\x02\x01\x12\x02\x02"}, + {"go/build/constraint", "q\xc7\x01\x01\x12\x02"}, + {"go/constant", "t\x0f~\x01\x024\x01\x02\x12"}, + {"go/doc", "\x04p\x01\x05\t=51\x10\x02\x01\x12\x02"}, + {"go/doc/comment", "\x03q\xc2\x01\x01\x01\x01\x12\x02"}, + {"go/format", "\x03q\x01\v\x01\x02rD"}, + {"go/importer", "v\a\x01\x01\x04\x01q9"}, + {"go/internal/gccgoimporter", "\x02\x01[\x13\x03\x04\v\x01o\x02,\x01\x05\x11\x01\f\b"}, + {"go/internal/gcimporter", "\x02r\x0f\x010\x05\r/,\x15\x03\x02"}, + {"go/internal/srcimporter", "t\x01\x01\n\x03\x01q,\x01\x05\x12\x02\x14"}, + {"go/parser", "\x03n\x03\x01\x02\v\x01r\x01+\x06\x12"}, + {"go/printer", "t\x01\x02\x03\tr\f \x15\x02\x01\x02\v\x05\x02"}, + {"go/scanner", "\x03q\x0fr2\x10\x01\x13\x02"}, + {"go/token", "\x04p\x84\x01>\x02\x03\x01\x0f\x02"}, + {"go/types", "\x03\x01\x06g\x03\x01\x03\b\x03\x024\x062\x04\x03\t \x06\a\b\x01\x01\x01\x02\x01\x0f\x02\x02"}, + {"go/version", "\xbe\x01{"}, + {"hash", "\xf5\x01"}, + {"hash/adler32", "q\x15\x16"}, + {"hash/crc32", "q\x15\x16\x15\x8a\x01\x01\x13"}, + {"hash/crc64", "q\x15\x16\x9f\x01"}, + {"hash/fnv", "q\x15\x16h"}, + {"hash/maphash", "\x86\x01\x11<|"}, + {"html", "\xb9\x02\x02\x12"}, + {"html/template", "\x03k\x06\x18-<\x01\n!\x05\x01\x02\x03\f\x01\x02\f\x01\x03\x02"}, + {"image", "\x02o\x1ef\x0f4\x03\x01"}, {"image/color", ""}, - {"image/color/palette", "\x8c\x01"}, - {"image/draw", "\x8b\x01\x01\x04"}, - {"image/gif", "\x02\x01\x05f\x03\x1a\x01\x01\x01\vX"}, - {"image/internal/imageutil", "\x8b\x01"}, - {"image/jpeg", "\x02l\x1d\x01\x04a"}, - {"image/png", "\x02\a^\n\x12\x02\x06\x01eC"}, - {"index/suffixarray", "\x03d\a\x83\x01\f+\n\x01"}, - {"internal/abi", "\xb5\x01\x96\x01"}, - {"internal/asan", "\xcb\x02"}, - {"internal/bisect", "\xaa\x02\r\x01"}, - {"internal/buildcfg", "qGe\x06\x02\x05\n\x01"}, - {"internal/bytealg", "\xae\x01\x9d\x01"}, + {"image/color/palette", "\x8f\x01"}, + {"image/draw", "\x8e\x01\x01\x04"}, + {"image/gif", "\x02\x01\x05i\x03\x1a\x01\x01\x01\vY"}, + {"image/internal/imageutil", "\x8e\x01"}, + {"image/jpeg", "\x02o\x1d\x01\x04b"}, + {"image/png", "\x02\aa\n\x12\x02\x06\x01fC"}, + {"index/suffixarray", "\x03g\a\x84\x01\f+\n\x01"}, + {"internal/abi", "\xb8\x01\x97\x01"}, + {"internal/asan", "\xcf\x02"}, + {"internal/bisect", "\xae\x02\r\x01"}, + {"internal/buildcfg", "tGf\x06\x02\x05\n\x01"}, + {"internal/bytealg", "\xb1\x01\x9e\x01"}, {"internal/byteorder", ""}, {"internal/cfg", ""}, - {"internal/cgrouptest", "q[Q\x06\x0f\x02\x01\x04\x01"}, - {"internal/chacha8rand", "\x99\x01\x15\a\x96\x01"}, + {"internal/cgrouptest", "tZS\x06\x0f\x02\x01\x04\x01"}, + {"internal/chacha8rand", "\x9c\x01\x15\a\x97\x01"}, {"internal/copyright", ""}, {"internal/coverage", ""}, {"internal/coverage/calloc", ""}, - {"internal/coverage/cfile", "k\x06\x16\x17\x01\x02\x01\x01\x01\x01\x01\x01\x01#\x02$,\x06\a\n\x01\x03\r\x06"}, - {"internal/coverage/cformat", "\x04m-\x04O\v6\x01\x02\r"}, - {"internal/coverage/cmerge", "q-_"}, - {"internal/coverage/decodecounter", "g\n-\v\x02F,\x17\x17"}, - {"internal/coverage/decodemeta", "\x02e\n\x16\x17\v\x02F,"}, - {"internal/coverage/encodecounter", "\x02e\n-\f\x01\x02D\v!\x15"}, - {"internal/coverage/encodemeta", "\x02\x01d\n\x12\x04\x17\r\x02D,."}, - {"internal/coverage/pods", "\x04m-\x7f\x06\x05\n\x02\x01"}, - {"internal/coverage/rtcov", "\xcb\x02"}, - {"internal/coverage/slicereader", "g\n\x80\x01Z"}, - {"internal/coverage/slicewriter", "q\x80\x01"}, - {"internal/coverage/stringtab", "q8\x04D"}, + {"internal/coverage/cfile", "n\x06\x16\x17\x01\x02\x01\x01\x01\x01\x01\x01\x01\"\x02&,\x06\a\n\x01\x03\r\x06"}, + {"internal/coverage/cformat", "\x04p-\x04P\v6\x01\x02\r"}, + {"internal/coverage/cmerge", "t-`"}, + {"internal/coverage/decodecounter", "j\n-\v\x02G,\x17\x17"}, + {"internal/coverage/decodemeta", "\x02h\n\x16\x17\v\x02G,"}, + {"internal/coverage/encodecounter", "\x02h\n-\f\x01\x02E\v!\x15"}, + {"internal/coverage/encodemeta", "\x02\x01g\n\x12\x04\x17\r\x02E,."}, + {"internal/coverage/pods", "\x04p-\x80\x01\x06\x05\n\x02\x01"}, + {"internal/coverage/rtcov", "\xcf\x02"}, + {"internal/coverage/slicereader", "j\n\x81\x01Z"}, + {"internal/coverage/slicewriter", "t\x81\x01"}, + {"internal/coverage/stringtab", "t8\x04E"}, {"internal/coverage/test", ""}, {"internal/coverage/uleb128", ""}, - {"internal/cpu", "\xcb\x02"}, - {"internal/dag", "\x04m\xc1\x01\x03"}, - {"internal/diff", "\x03n\xc2\x01\x02"}, - {"internal/exportdata", "\x02\x01k\x03\x02c\x1b,\x01\x05\x11\x01\x02"}, - {"internal/filepathlite", "n*@\x1a@"}, - {"internal/fmtsort", "\x04\xa1\x02\r"}, - {"internal/fuzz", "\x03\nB\x18\x04\x03\x03\x01\v\x036;\f\x03\x1d\x01\x05\x02\x05\n\x01\x02\x01\x01\f\x04\x02"}, + {"internal/cpu", "\xcf\x02"}, + {"internal/dag", "\x04p\xc2\x01\x03"}, + {"internal/diff", "\x03q\xc3\x01\x02"}, + {"internal/exportdata", "\x02\x01n\x03\x02c\x1c,\x01\x05\x11\x01\x02"}, + {"internal/filepathlite", "q*A\x1a@"}, + {"internal/fmtsort", "\x04\xa5\x02\r"}, + {"internal/fuzz", "\x03\nE\x18\x04\x03\x03\x01\v\x036<\f\x03\x1d\x01\x05\x02\x05\n\x01\x02\x01\x01\f\x04\x02"}, {"internal/goarch", ""}, - {"internal/godebug", "\x96\x01!\x80\x01\x01\x13"}, + {"internal/godebug", "\x99\x01!\x81\x01\x01\x13"}, {"internal/godebugs", ""}, {"internal/goexperiment", ""}, {"internal/goos", ""}, - {"internal/goroot", "\x9d\x02\x01\x05\x12\x02"}, + {"internal/goroot", "\xa1\x02\x01\x05\x12\x02"}, {"internal/gover", "\x04"}, {"internal/goversion", ""}, - {"internal/itoa", ""}, - {"internal/lazyregexp", "\x9d\x02\v\r\x02"}, - {"internal/lazytemplate", "\xf1\x01,\x18\x02\f"}, - {"internal/msan", "\xcb\x02"}, + {"internal/lazyregexp", "\xa1\x02\v\r\x02"}, + {"internal/lazytemplate", "\xf5\x01,\x18\x02\f"}, + {"internal/msan", "\xcf\x02"}, {"internal/nettrace", ""}, - {"internal/obscuretestdata", "f\x8b\x01,"}, - {"internal/oserror", "n"}, - {"internal/pkgbits", "\x03L\x18\a\x03\x04\vq\r\x1f\r\n\x01"}, + {"internal/obscuretestdata", "i\x8c\x01,"}, + {"internal/oserror", "q"}, + {"internal/pkgbits", "\x03O\x18\a\x03\x04\vr\r\x1f\r\n\x01"}, {"internal/platform", ""}, - {"internal/poll", "nO\x1f\x159\r\x01\x01\f\x06"}, - {"internal/profile", "\x03\x04g\x03\x80\x017\v\x01\x01\x10"}, + {"internal/poll", "qj\x05\x159\r\x01\x01\f\x06"}, + {"internal/profile", "\x03\x04j\x03\x81\x017\n\x01\x01\x01\x10"}, {"internal/profilerecord", ""}, - {"internal/race", "\x94\x01\xb7\x01"}, - {"internal/reflectlite", "\x94\x01!9\b\x13\x01\a\x03E;\x01\x03\a\x01\x03\x02\x02\x01\x02\x06\x02\x01\x01\n\x01\x01\x05\x01\x02\x05\b\x01\x01\x01\x02\x01\r\x02\x02\x02\b\x01\x01\x01"}, - {"net/http/cgi", "\x02Q\x1b\x03\x80\x01\x04\a\v\x01\x13\x01\x01\x01\x04\x01\x05\x02\b\x02\x01\x10\x0e"}, - {"net/http/cookiejar", "\x04j\x03\x96\x01\x01\b\f\x16\x03\x02\x0e\x04"}, - {"net/http/fcgi", "\x02\x01\nZ\a\x03\x80\x01\x16\x01\x01\x14\x18\x02\x0e"}, - {"net/http/httptest", "\x02\x01\nF\x02\x1b\x01\x80\x01\x04\x12\x01\n\t\x02\x17\x01\x02\x0e\x0e"}, - {"net/http/httptrace", "\rFnF\x14\n "}, - {"net/http/httputil", "\x02\x01\na\x03\x80\x01\x04\x0f\x03\x01\x05\x02\x01\v\x01\x19\x02\x0e\x0e"}, - {"net/http/internal", "\x02\x01k\x03\x80\x01"}, - {"net/http/internal/ascii", "\xb5\x02\x12"}, - {"net/http/internal/httpcommon", "\ra\x03\x9c\x01\x0e\x01\x17\x01\x01\x02\x1c\x02"}, - {"net/http/internal/testcert", "\xb5\x02"}, - {"net/http/pprof", "\x02\x01\nd\x18-\x11*\x04\x13\x14\x01\r\x04\x03\x01\x02\x01\x10"}, + {"log/slog/internal/benchmarks", "\rd\x03\x81\x01\x06\x03:\x11"}, + {"log/slog/internal/buffer", "\xbb\x02"}, + {"log/syslog", "q\x03\x85\x01\x12\x16\x18\x02\x0e"}, + {"maps", "\xf8\x01W"}, + {"math", "\xb1\x01SK"}, + {"math/big", "\x03n\x03(\x15D\f\x03\x020\x02\x01\x02\x14"}, + {"math/big/internal/asmgen", "\x03\x01p\x90\x012\x03"}, + {"math/bits", "\xcf\x02"}, + {"math/cmplx", "\x81\x02\x03"}, + {"math/rand", "\xb9\x01H:\x01\x13"}, + {"math/rand/v2", "q+\x03b\x03K"}, + {"mime", "\x02\x01f\b\x03\x81\x01\v!\x15\x03\x02\x10\x02"}, + {"mime/multipart", "\x02\x01K#\x03E<\v\x01\a\x02\x15\x02\x06\x0f\x02\x01\x16"}, + {"mime/quotedprintable", "\x02\x01q\x81\x01"}, + {"net", "\x04\td*\x1e\n\x05\x12\x01\x01\x04\x15\x01%\x06\r\b\x05\x01\x01\f\x06\a"}, + {"net/http", "\x02\x01\x03\x01\x04\x02A\b\x13\x01\a\x03E<\x01\x03\a\x01\x03\x02\x02\x01\x02\x06\x02\x01\x01\n\x01\x01\x05\x01\x02\x05\b\x01\x01\x01\x02\x01\r\x02\x02\x02\b\x01\x01\x01"}, + {"net/http/cgi", "\x02T\x1b\x03\x81\x01\x04\a\v\x01\x13\x01\x01\x01\x04\x01\x05\x02\b\x02\x01\x10\x0e"}, + {"net/http/cookiejar", "\x04m\x03\x97\x01\x01\b\f\x16\x03\x02\x0e\x04"}, + {"net/http/fcgi", "\x02\x01\n]\a\x03\x81\x01\x16\x01\x01\x14\x18\x02\x0e"}, + {"net/http/httptest", "\x02\x01\nI\x02\x1b\x01\x81\x01\x04\x12\x01\n\t\x02\x17\x01\x02\x0e\x0e"}, + {"net/http/httptrace", "\rImH\x14\n "}, + {"net/http/httputil", "\x02\x01\nd\x03\x81\x01\x04\x0f\x03\x01\x05\x02\x01\v\x01\x19\x02\x0e\x0e"}, + {"net/http/internal", "\x02\x01n\x03\x81\x01"}, + {"net/http/internal/ascii", "\xb9\x02\x12"}, + {"net/http/internal/httpcommon", "\rd\x03\x9d\x01\x0e\x01\x17\x01\x01\x02\x1c\x02"}, + {"net/http/internal/testcert", "\xb9\x02"}, + {"net/http/pprof", "\x02\x01\ng\x18-\x02\x0e,\x04\x13\x14\x01\r\x04\x03\x01\x02\x01\x10"}, {"net/internal/cgotest", ""}, - {"net/internal/socktest", "q\xc6\x01\x02"}, - {"net/mail", "\x02l\x03\x80\x01\x04\x0f\x03\x14\x1a\x02\x0e\x04"}, - {"net/netip", "\x04j*\x01$@\x034\x16"}, - {"net/rpc", "\x02g\x05\x03\x0f\ng\x04\x12\x01\x1d\r\x03\x02"}, - {"net/rpc/jsonrpc", "k\x03\x03\x80\x01\x16\x11\x1f"}, - {"net/smtp", "\x19/\v\x13\b\x03\x80\x01\x16\x14\x1a"}, - {"net/textproto", "\x02\x01k\x03\x80\x01\f\n-\x01\x02\x14"}, - {"net/url", "n\x03\x8b\x01&\x10\x02\x01\x16"}, - {"os", "n*\x01\x19\x03\b\t\x12\x03\x01\x05\x10\x018\b\x05\x01\x01\f\x06"}, - {"os/exec", "\x03\naH%\x01\x15\x01+\x06\a\n\x01\x04\f"}, - {"os/exec/internal/fdtest", "\xb9\x02"}, - {"os/signal", "\r\x90\x02\x15\x05\x02"}, - {"os/user", "\x02\x01k\x03\x80\x01,\r\n\x01\x02"}, - {"path", "n*\xb1\x01"}, - {"path/filepath", "n*\x1a@+\r\b\x03\x04\x10"}, - {"plugin", "n"}, - {"reflect", "n&\x04\x1d\b\f\x06\x04\x1b\x06\t-\n\x03\x10\x02\x02"}, + {"net/internal/socktest", "t\xc7\x01\x02"}, + {"net/mail", "\x02o\x03\x81\x01\x04\x0f\x03\x14\x1a\x02\x0e\x04"}, + {"net/netip", "\x04m*\x01e\x034\x16"}, + {"net/rpc", "\x02j\x05\x03\x0f\nh\x04\x12\x01\x1d\r\x03\x02"}, + {"net/rpc/jsonrpc", "n\x03\x03\x81\x01\x16\x11\x1f"}, + {"net/smtp", "\x192\v\x13\b\x03\x81\x01\x16\x14\x1a"}, + {"net/textproto", "\x02\x01n\x03\x81\x01\f\n-\x01\x02\x14"}, + {"net/url", "q\x03\xa7\x01\v\x10\x02\x01\x16"}, + {"os", "q*\x01\x19\x03\x10\x13\x01\x03\x01\x05\x10\x018\b\x05\x01\x01\f\x06"}, + {"os/exec", "\x03\ndH&\x01\x15\x01+\x06\a\n\x01\x04\f"}, + {"os/exec/internal/fdtest", "\xbd\x02"}, + {"os/signal", "\r\x94\x02\x15\x05\x02"}, + {"os/user", "\x02\x01n\x03\x81\x01,\r\n\x01\x02"}, + {"path", "q*\xb2\x01"}, + {"path/filepath", "q*\x1aA+\r\b\x03\x04\x10"}, + {"plugin", "q"}, + {"reflect", "q&\x04\x1d\x13\b\x03\x05\x17\x06\t-\n\x03\x10\x02\x02"}, {"reflect/internal/example1", ""}, {"reflect/internal/example2", ""}, - {"regexp", "\x03\xee\x018\t\x02\x01\x02\x10\x02"}, - {"regexp/syntax", "\xb2\x02\x01\x01\x01\x02\x10\x02"}, - {"runtime", "\x94\x01\x04\x01\x03\f\x06\a\x02\x01\x01\x0f\x03\x01\x01\x01\x01\x01\x02\x01\x01\x04\x10c"}, - {"runtime/coverage", "\xa0\x01Q"}, - {"runtime/debug", "qUW\r\b\x02\x01\x10\x06"}, - {"runtime/metrics", "\xb7\x01F-!"}, - {"runtime/pprof", "\x02\x01\x01\x03\x06Z\a\x03#4)\f \r\b\x01\x01\x01\x02\x02\t\x03\x06"}, - {"runtime/race", "\xb0\x02"}, + {"regexp", "\x03\xf2\x018\t\x02\x01\x02\x10\x02"}, + {"regexp/syntax", "\xb6\x02\x01\x01\x01\x02\x10\x02"}, + {"runtime", "\x97\x01\x04\x01\x03\f\x06\a\x02\x01\x01\x0e\x03\x01\x01\x01\x02\x01\x01\x02\x01\x04\x01\x10c"}, + {"runtime/coverage", "\xa3\x01R"}, + {"runtime/debug", "tTY\r\b\x02\x01\x10\x06"}, + {"runtime/metrics", "\xba\x01G-!"}, + {"runtime/pprof", "\x02\x01\x01\x03\x06]\a\x03#$\x0f+\f \r\b\x01\x01\x01\x02\x02\t\x03\x06"}, + {"runtime/race", "\xb4\x02"}, {"runtime/race/internal/amd64v1", ""}, - {"runtime/trace", "\ra\x03w\t9\b\x05\x01\r\x06"}, - {"slices", "\x04\xf0\x01\fK"}, - {"sort", "\xca\x0162"}, - {"strconv", "n*@%\x03I"}, - {"strings", "n&\x04@\x19\x03\f7\x10\x02\x02"}, + {"runtime/trace", "\rd\x03x\t9\b\x05\x01\r\x06"}, + {"slices", "\x04\xf4\x01\fK"}, + {"sort", "\xcc\x0182"}, + {"strconv", "q*@\x01q"}, + {"strings", "q&\x04A\x19\x03\f7\x10\x02\x02"}, {"structs", ""}, - {"sync", "\xc9\x01\x10\x01P\x0e\x13"}, - {"sync/atomic", "\xcb\x02"}, - {"syscall", "n'\x03\x01\x1c\b\x03\x03\x06\vV\b\x05\x01\x13"}, - {"testing", "\x03\na\x02\x01X\x14\x14\f\x05\x1b\x06\x02\x05\x02\x05\x01\x02\x01\x02\x01\r\x02\x02\x02"}, - {"testing/fstest", "n\x03\x80\x01\x01\n&\x10\x03\b\b"}, - {"testing/internal/testdeps", "\x02\v\xa7\x01-\x10,\x03\x05\x03\x06\a\x02\x0e"}, - {"testing/iotest", "\x03k\x03\x80\x01\x04"}, - {"testing/quick", "p\x01\x8c\x01\x05#\x10\x10"}, - {"testing/slogtest", "\ra\x03\x86\x01.\x05\x10\v"}, - {"testing/synctest", "\xda\x01`\x11"}, - {"text/scanner", "\x03n\x80\x01,*\x02"}, - {"text/tabwriter", "q\x80\x01X"}, - {"text/template", "n\x03B>\x01\n \x01\x05\x01\x02\x05\v\x02\r\x03\x02"}, - {"text/template/parse", "\x03n\xb9\x01\n\x01\x12\x02"}, - {"time", "n*\x1e\"(*\r\x02\x12"}, - {"time/tzdata", "n\xcb\x01\x12"}, + {"sync", "\xcb\x01\x12\x01P\x0e\x13"}, + {"sync/atomic", "\xcf\x02"}, + {"syscall", "q'\x03\x01\x1c\n\x03\x06\f\x04S\b\x05\x01\x13"}, + {"testing", "\x03\nd\x02\x01W\x16\x14\f\x05\x1b\x06\x02\x05\x02\x05\x01\x02\x01\x02\x01\r\x02\x04"}, + {"testing/fstest", "q\x03\x81\x01\x01\n&\x10\x03\b\b"}, + {"testing/internal/testdeps", "\x02\v\xaa\x01.\x10,\x03\x05\x03\x06\a\x02\x0e"}, + {"testing/iotest", "\x03n\x03\x81\x01\x04"}, + {"testing/quick", "s\x01\x8d\x01\x05#\x10\x10"}, + {"testing/slogtest", "\rd\x03\x87\x01.\x05\x10\v"}, + {"testing/synctest", "\xde\x01`\x11"}, + {"text/scanner", "\x03q\x81\x01,*\x02"}, + {"text/tabwriter", "t\x81\x01X"}, + {"text/template", "q\x03B?\x01\n \x01\x05\x01\x02\x05\v\x02\r\x03\x02"}, + {"text/template/parse", "\x03q\xba\x01\n\x01\x12\x02"}, + {"time", "q*\x1e#(*\r\x02\x12"}, + {"time/tzdata", "q\xcc\x01\x12"}, {"unicode", ""}, {"unicode/utf16", ""}, {"unicode/utf8", ""}, - {"unique", "\x94\x01!#\x01Q\r\x01\x13\x12"}, + {"unique", "\x97\x01!$\x01Q\r\x01\x13\x12"}, {"unsafe", ""}, - {"vendor/golang.org/x/crypto/chacha20", "\x10W\a\x92\x01*&"}, - {"vendor/golang.org/x/crypto/chacha20poly1305", "\x10W\a\xde\x01\x04\x01\a"}, - {"vendor/golang.org/x/crypto/cryptobyte", "d\n\x03\x8d\x01' \n"}, + {"vendor/golang.org/x/crypto/chacha20", "\x10Z\a\x93\x01*&"}, + {"vendor/golang.org/x/crypto/chacha20poly1305", "\x10Z\a\xdf\x01\x04\x01\a"}, + {"vendor/golang.org/x/crypto/cryptobyte", "g\n\x03\x8e\x01' \n"}, {"vendor/golang.org/x/crypto/cryptobyte/asn1", ""}, - {"vendor/golang.org/x/crypto/internal/alias", "\xcb\x02"}, - {"vendor/golang.org/x/crypto/internal/poly1305", "R\x15\x99\x01"}, - {"vendor/golang.org/x/net/dns/dnsmessage", "n"}, - {"vendor/golang.org/x/net/http/httpguts", "\x87\x02\x14\x1a\x14\r"}, - {"vendor/golang.org/x/net/http/httpproxy", "n\x03\x96\x01\x10\x05\x01\x18\x14\r"}, - {"vendor/golang.org/x/net/http2/hpack", "\x03k\x03\x80\x01F"}, - {"vendor/golang.org/x/net/idna", "q\x8c\x018\x14\x10\x02\x01"}, - {"vendor/golang.org/x/net/nettest", "\x03d\a\x03\x80\x01\x11\x05\x16\x01\f\n\x01\x02\x02\x01\v"}, - {"vendor/golang.org/x/sys/cpu", "\x9d\x02\r\n\x01\x16"}, - {"vendor/golang.org/x/text/secure/bidirule", "n\xdb\x01\x11\x01"}, - {"vendor/golang.org/x/text/transform", "\x03k\x83\x01X"}, - {"vendor/golang.org/x/text/unicode/bidi", "\x03\bf\x84\x01>\x16"}, - {"vendor/golang.org/x/text/unicode/norm", "g\n\x80\x01F\x12\x11"}, - {"weak", "\x94\x01\x96\x01!"}, + {"vendor/golang.org/x/crypto/internal/alias", "\xcf\x02"}, + {"vendor/golang.org/x/crypto/internal/poly1305", "U\x15\x9a\x01"}, + {"vendor/golang.org/x/net/dns/dnsmessage", "q"}, + {"vendor/golang.org/x/net/http/httpguts", "\x8b\x02\x14\x1a\x14\r"}, + {"vendor/golang.org/x/net/http/httpproxy", "q\x03\x97\x01\x10\x05\x01\x18\x14\r"}, + {"vendor/golang.org/x/net/http2/hpack", "\x03n\x03\x81\x01F"}, + {"vendor/golang.org/x/net/idna", "t\x8d\x018\x14\x10\x02\x01"}, + {"vendor/golang.org/x/net/nettest", "\x03g\a\x03\x81\x01\x11\x05\x16\x01\f\n\x01\x02\x02\x01\v"}, + {"vendor/golang.org/x/sys/cpu", "\xa1\x02\r\n\x01\x16"}, + {"vendor/golang.org/x/text/secure/bidirule", "q\xdc\x01\x11\x01"}, + {"vendor/golang.org/x/text/transform", "\x03n\x84\x01X"}, + {"vendor/golang.org/x/text/unicode/bidi", "\x03\bi\x85\x01>\x16"}, + {"vendor/golang.org/x/text/unicode/norm", "j\n\x81\x01F\x12\x11"}, + {"weak", "\x97\x01\x97\x01!"}, } + +// bootstrap is the list of bootstrap packages extracted from cmd/dist. +var bootstrap = map[string]bool{ + "cmp": true, + "cmd/asm": true, + "cmd/asm/internal/arch": true, + "cmd/asm/internal/asm": true, + "cmd/asm/internal/flags": true, + "cmd/asm/internal/lex": true, + "cmd/cgo": true, + "cmd/compile": true, + "cmd/compile/internal/abi": true, + "cmd/compile/internal/abt": true, + "cmd/compile/internal/amd64": true, + "cmd/compile/internal/arm": true, + "cmd/compile/internal/arm64": true, + "cmd/compile/internal/base": true, + "cmd/compile/internal/bitvec": true, + "cmd/compile/internal/compare": true, + "cmd/compile/internal/coverage": true, + "cmd/compile/internal/deadlocals": true, + "cmd/compile/internal/devirtualize": true, + "cmd/compile/internal/dwarfgen": true, + "cmd/compile/internal/escape": true, + "cmd/compile/internal/gc": true, + "cmd/compile/internal/importer": true, + "cmd/compile/internal/inline": true, + "cmd/compile/internal/inline/inlheur": true, + "cmd/compile/internal/inline/interleaved": true, + "cmd/compile/internal/ir": true, + "cmd/compile/internal/liveness": true, + "cmd/compile/internal/logopt": true, + "cmd/compile/internal/loong64": true, + "cmd/compile/internal/loopvar": true, + "cmd/compile/internal/mips": true, + "cmd/compile/internal/mips64": true, + "cmd/compile/internal/noder": true, + "cmd/compile/internal/objw": true, + "cmd/compile/internal/pgoir": true, + "cmd/compile/internal/pkginit": true, + "cmd/compile/internal/ppc64": true, + "cmd/compile/internal/rangefunc": true, + "cmd/compile/internal/reflectdata": true, + "cmd/compile/internal/riscv64": true, + "cmd/compile/internal/rttype": true, + "cmd/compile/internal/s390x": true, + "cmd/compile/internal/ssa": true, + "cmd/compile/internal/ssagen": true, + "cmd/compile/internal/staticdata": true, + "cmd/compile/internal/staticinit": true, + "cmd/compile/internal/syntax": true, + "cmd/compile/internal/test": true, + "cmd/compile/internal/typebits": true, + "cmd/compile/internal/typecheck": true, + "cmd/compile/internal/types": true, + "cmd/compile/internal/types2": true, + "cmd/compile/internal/walk": true, + "cmd/compile/internal/wasm": true, + "cmd/compile/internal/x86": true, + "cmd/internal/archive": true, + "cmd/internal/bio": true, + "cmd/internal/codesign": true, + "cmd/internal/dwarf": true, + "cmd/internal/edit": true, + "cmd/internal/gcprog": true, + "cmd/internal/goobj": true, + "cmd/internal/hash": true, + "cmd/internal/macho": true, + "cmd/internal/obj": true, + "cmd/internal/obj/arm": true, + "cmd/internal/obj/arm64": true, + "cmd/internal/obj/loong64": true, + "cmd/internal/obj/mips": true, + "cmd/internal/obj/ppc64": true, + "cmd/internal/obj/riscv": true, + "cmd/internal/obj/s390x": true, + "cmd/internal/obj/wasm": true, + "cmd/internal/obj/x86": true, + "cmd/internal/objabi": true, + "cmd/internal/par": true, + "cmd/internal/pgo": true, + "cmd/internal/pkgpath": true, + "cmd/internal/quoted": true, + "cmd/internal/src": true, + "cmd/internal/sys": true, + "cmd/internal/telemetry": true, + "cmd/internal/telemetry/counter": true, + "cmd/link": true, + "cmd/link/internal/amd64": true, + "cmd/link/internal/arm": true, + "cmd/link/internal/arm64": true, + "cmd/link/internal/benchmark": true, + "cmd/link/internal/dwtest": true, + "cmd/link/internal/ld": true, + "cmd/link/internal/loadelf": true, + "cmd/link/internal/loader": true, + "cmd/link/internal/loadmacho": true, + "cmd/link/internal/loadpe": true, + "cmd/link/internal/loadxcoff": true, + "cmd/link/internal/loong64": true, + "cmd/link/internal/mips": true, + "cmd/link/internal/mips64": true, + "cmd/link/internal/ppc64": true, + "cmd/link/internal/riscv64": true, + "cmd/link/internal/s390x": true, + "cmd/link/internal/sym": true, + "cmd/link/internal/wasm": true, + "cmd/link/internal/x86": true, + "compress/flate": true, + "compress/zlib": true, + "container/heap": true, + "debug/dwarf": true, + "debug/elf": true, + "debug/macho": true, + "debug/pe": true, + "go/build/constraint": true, + "go/constant": true, + "go/version": true, + "internal/abi": true, + "internal/coverage": true, + "cmd/internal/cov/covcmd": true, + "internal/bisect": true, + "internal/buildcfg": true, + "internal/exportdata": true, + "internal/goarch": true, + "internal/godebugs": true, + "internal/goexperiment": true, + "internal/goroot": true, + "internal/gover": true, + "internal/goversion": true, + "internal/lazyregexp": true, + "internal/pkgbits": true, + "internal/platform": true, + "internal/profile": true, + "internal/race": true, + "internal/runtime/gc": true, + "internal/saferio": true, + "internal/syscall/unix": true, + "internal/types/errors": true, + "internal/unsafeheader": true, + "internal/xcoff": true, + "internal/zstd": true, + "math/bits": true, + "sort": true, +} + +// BootstrapVersion is the minor version of Go used during toolchain +// bootstrapping. Packages for which [IsBootstrapPackage] must not use +// features of Go newer than this version. +const BootstrapVersion = Version(24) // go1.24.6 diff --git a/vendor/golang.org/x/tools/internal/stdlib/import.go b/vendor/golang.org/x/tools/internal/stdlib/import.go index f6909878a8..8ecc672b8b 100644 --- a/vendor/golang.org/x/tools/internal/stdlib/import.go +++ b/vendor/golang.org/x/tools/internal/stdlib/import.go @@ -87,3 +87,11 @@ func find(pkg string) (int, bool) { return strings.Compare(p.name, n) }) } + +// IsBootstrapPackage reports whether pkg is one of the low-level +// packages in the Go distribution that must compile with the older +// language version specified by [BootstrapVersion] during toolchain +// bootstrapping; see golang.org/s/go15bootstrap. +func IsBootstrapPackage(pkg string) bool { + return bootstrap[pkg] +} diff --git a/vendor/golang.org/x/tools/internal/stdlib/manifest.go b/vendor/golang.org/x/tools/internal/stdlib/manifest.go index c1faa50d36..362f23c436 100644 --- a/vendor/golang.org/x/tools/internal/stdlib/manifest.go +++ b/vendor/golang.org/x/tools/internal/stdlib/manifest.go @@ -225,6 +225,7 @@ var PackageSymbols = map[string][]Symbol{ {"(*Buffer).Grow", Method, 1, ""}, {"(*Buffer).Len", Method, 0, ""}, {"(*Buffer).Next", Method, 0, ""}, + {"(*Buffer).Peek", Method, 26, ""}, {"(*Buffer).Read", Method, 0, ""}, {"(*Buffer).ReadByte", Method, 0, ""}, {"(*Buffer).ReadBytes", Method, 0, ""}, @@ -1628,6 +1629,7 @@ var PackageSymbols = map[string][]Symbol{ {"ResultNoRows", Var, 0, ""}, {"Rows", Type, 0, ""}, {"RowsAffected", Type, 0, ""}, + {"RowsColumnScanner", Type, 26, ""}, {"RowsColumnTypeDatabaseTypeName", Type, 8, ""}, {"RowsColumnTypeLength", Type, 8, ""}, {"RowsColumnTypeNullable", Type, 8, ""}, @@ -4953,6 +4955,7 @@ var PackageSymbols = map[string][]Symbol{ }, "errors": { {"As", Func, 13, "func(err error, target any) bool"}, + {"AsType", Func, 26, "func[E error](err error) (E, bool)"}, {"ErrUnsupported", Var, 21, ""}, {"Is", Func, 13, "func(err error, target error) bool"}, {"Join", Func, 20, "func(errs ...error) error"}, @@ -5090,7 +5093,7 @@ var PackageSymbols = map[string][]Symbol{ {"Append", Func, 19, "func(b []byte, a ...any) []byte"}, {"Appendf", Func, 19, "func(b []byte, format string, a ...any) []byte"}, {"Appendln", Func, 19, "func(b []byte, a ...any) []byte"}, - {"Errorf", Func, 0, "func(format string, a ...any) error"}, + {"Errorf", Func, 0, "func(format string, a ...any) (err error)"}, {"FormatString", Func, 20, "func(state State, verb rune) string"}, {"Formatter", Type, 0, ""}, {"Fprint", Func, 0, "func(w io.Writer, a ...any) (n int, err error)"}, @@ -5155,6 +5158,9 @@ var PackageSymbols = map[string][]Symbol{ {"(*DeclStmt).Pos", Method, 0, ""}, {"(*DeferStmt).End", Method, 0, ""}, {"(*DeferStmt).Pos", Method, 0, ""}, + {"(*Directive).End", Method, 26, ""}, + {"(*Directive).ParseArgs", Method, 26, ""}, + {"(*Directive).Pos", Method, 26, ""}, {"(*Ellipsis).End", Method, 0, ""}, {"(*Ellipsis).Pos", Method, 0, ""}, {"(*EmptyStmt).End", Method, 0, ""}, @@ -5320,6 +5326,15 @@ var PackageSymbols = map[string][]Symbol{ {"DeferStmt", Type, 0, ""}, {"DeferStmt.Call", Field, 0, ""}, {"DeferStmt.Defer", Field, 0, ""}, + {"Directive", Type, 26, ""}, + {"Directive.Args", Field, 26, ""}, + {"Directive.ArgsPos", Field, 26, ""}, + {"Directive.Name", Field, 26, ""}, + {"Directive.Slash", Field, 26, ""}, + {"Directive.Tool", Field, 26, ""}, + {"DirectiveArg", Type, 26, ""}, + {"DirectiveArg.Arg", Field, 26, ""}, + {"DirectiveArg.Pos", Field, 26, ""}, {"Ellipsis", Type, 0, ""}, {"Ellipsis.Ellipsis", Field, 0, ""}, {"Ellipsis.Elt", Field, 0, ""}, @@ -5469,6 +5484,7 @@ var PackageSymbols = map[string][]Symbol{ {"ParenExpr.Lparen", Field, 0, ""}, {"ParenExpr.Rparen", Field, 0, ""}, {"ParenExpr.X", Field, 0, ""}, + {"ParseDirective", Func, 26, "func(pos token.Pos, c string) (Directive, bool)"}, {"Pkg", Const, 0, ""}, {"Preorder", Func, 23, "func(root Node) iter.Seq[Node]"}, {"PreorderStack", Func, 25, "func(root Node, stack []Node, f func(n Node, stack []Node) bool)"}, @@ -7271,6 +7287,10 @@ var PackageSymbols = map[string][]Symbol{ {"(*Logger).WarnContext", Method, 21, ""}, {"(*Logger).With", Method, 21, ""}, {"(*Logger).WithGroup", Method, 21, ""}, + {"(*MultiHandler).Enabled", Method, 26, ""}, + {"(*MultiHandler).Handle", Method, 26, ""}, + {"(*MultiHandler).WithAttrs", Method, 26, ""}, + {"(*MultiHandler).WithGroup", Method, 26, ""}, {"(*Record).Add", Method, 21, ""}, {"(*Record).AddAttrs", Method, 21, ""}, {"(*TextHandler).Enabled", Method, 21, ""}, @@ -7358,9 +7378,11 @@ var PackageSymbols = map[string][]Symbol{ {"LogValuer", Type, 21, ""}, {"Logger", Type, 21, ""}, {"MessageKey", Const, 21, ""}, + {"MultiHandler", Type, 26, ""}, {"New", Func, 21, "func(h Handler) *Logger"}, {"NewJSONHandler", Func, 21, "func(w io.Writer, opts *HandlerOptions) *JSONHandler"}, {"NewLogLogger", Func, 21, "func(h Handler, level Level) *log.Logger"}, + {"NewMultiHandler", Func, 26, "func(handlers ...Handler) *MultiHandler"}, {"NewRecord", Func, 21, "func(t time.Time, level Level, msg string, pc uintptr) Record"}, {"NewTextHandler", Func, 21, "func(w io.Writer, opts *HandlerOptions) *TextHandler"}, {"Record", Type, 21, ""}, @@ -7515,7 +7537,7 @@ var PackageSymbols = map[string][]Symbol{ {"MinInt64", Const, 0, ""}, {"MinInt8", Const, 0, ""}, {"Mod", Func, 0, "func(x float64, y float64) float64"}, - {"Modf", Func, 0, "func(f float64) (int float64, frac float64)"}, + {"Modf", Func, 0, "func(f float64) (integer float64, fractional float64)"}, {"NaN", Func, 0, "func() float64"}, {"Nextafter", Func, 0, "func(x float64, y float64) (r float64)"}, {"Nextafter32", Func, 4, "func(x float32, y float32) (r float32)"}, @@ -7972,6 +7994,10 @@ var PackageSymbols = map[string][]Symbol{ {"(*DNSError).Unwrap", Method, 23, ""}, {"(*Dialer).Dial", Method, 1, ""}, {"(*Dialer).DialContext", Method, 7, ""}, + {"(*Dialer).DialIP", Method, 26, ""}, + {"(*Dialer).DialTCP", Method, 26, ""}, + {"(*Dialer).DialUDP", Method, 26, ""}, + {"(*Dialer).DialUnix", Method, 26, ""}, {"(*Dialer).MultipathTCP", Method, 21, ""}, {"(*Dialer).SetMultipathTCP", Method, 21, ""}, {"(*IP).UnmarshalText", Method, 2, ""}, @@ -8457,6 +8483,7 @@ var PackageSymbols = map[string][]Symbol{ {"HTTP2Config.PermitProhibitedCipherSuites", Field, 24, ""}, {"HTTP2Config.PingTimeout", Field, 24, ""}, {"HTTP2Config.SendPingTimeout", Field, 24, ""}, + {"HTTP2Config.StrictMaxConcurrentRequests", Field, 26, ""}, {"HTTP2Config.WriteByteTimeout", Field, 24, ""}, {"Handle", Func, 0, "func(pattern string, handler Handler)"}, {"HandleFunc", Func, 0, "func(pattern string, handler func(ResponseWriter, *Request))"}, @@ -8904,6 +8931,7 @@ var PackageSymbols = map[string][]Symbol{ {"(Prefix).AppendText", Method, 24, ""}, {"(Prefix).AppendTo", Method, 18, ""}, {"(Prefix).Bits", Method, 18, ""}, + {"(Prefix).Compare", Method, 26, ""}, {"(Prefix).Contains", Method, 18, ""}, {"(Prefix).IsSingleIP", Method, 18, ""}, {"(Prefix).IsValid", Method, 18, ""}, @@ -9177,6 +9205,7 @@ var PackageSymbols = map[string][]Symbol{ {"(*Process).Release", Method, 0, ""}, {"(*Process).Signal", Method, 0, ""}, {"(*Process).Wait", Method, 0, ""}, + {"(*Process).WithHandle", Method, 26, ""}, {"(*ProcessState).ExitCode", Method, 12, ""}, {"(*ProcessState).Exited", Method, 0, ""}, {"(*ProcessState).Pid", Method, 0, ""}, @@ -9234,6 +9263,7 @@ var PackageSymbols = map[string][]Symbol{ {"ErrExist", Var, 0, ""}, {"ErrInvalid", Var, 0, ""}, {"ErrNoDeadline", Var, 10, ""}, + {"ErrNoHandle", Var, 26, ""}, {"ErrNotExist", Var, 0, ""}, {"ErrPermission", Var, 0, ""}, {"ErrProcessDone", Var, 16, ""}, @@ -9461,7 +9491,7 @@ var PackageSymbols = map[string][]Symbol{ {"ListSeparator", Const, 0, ""}, {"Localize", Func, 23, "func(path string) (string, error)"}, {"Match", Func, 0, "func(pattern string, name string) (matched bool, err error)"}, - {"Rel", Func, 0, "func(basepath string, targpath string) (string, error)"}, + {"Rel", Func, 0, "func(basePath string, targPath string) (string, error)"}, {"Separator", Const, 0, ""}, {"SkipAll", Var, 20, ""}, {"SkipDir", Var, 0, ""}, @@ -9932,7 +9962,7 @@ var PackageSymbols = map[string][]Symbol{ {"PanicNilError", Type, 21, ""}, {"Pinner", Type, 21, ""}, {"ReadMemStats", Func, 0, "func(m *MemStats)"}, - {"ReadTrace", Func, 5, "func() []byte"}, + {"ReadTrace", Func, 5, "func() (buf []byte)"}, {"SetBlockProfileRate", Func, 1, "func(rate int)"}, {"SetCPUProfileRate", Func, 0, "func(hz int)"}, {"SetCgoTraceback", Func, 7, "func(version int, traceback unsafe.Pointer, context unsafe.Pointer, symbolizer unsafe.Pointer)"}, @@ -16679,6 +16709,7 @@ var PackageSymbols = map[string][]Symbol{ {"ValueOf", Func, 0, ""}, }, "testing": { + {"(*B).ArtifactDir", Method, 26, ""}, {"(*B).Attr", Method, 25, ""}, {"(*B).Chdir", Method, 24, ""}, {"(*B).Cleanup", Method, 14, ""}, @@ -16713,6 +16744,7 @@ var PackageSymbols = map[string][]Symbol{ {"(*B).StopTimer", Method, 0, ""}, {"(*B).TempDir", Method, 15, ""}, {"(*F).Add", Method, 18, ""}, + {"(*F).ArtifactDir", Method, 26, ""}, {"(*F).Attr", Method, 25, ""}, {"(*F).Chdir", Method, 24, ""}, {"(*F).Cleanup", Method, 18, ""}, @@ -16738,6 +16770,7 @@ var PackageSymbols = map[string][]Symbol{ {"(*F).TempDir", Method, 18, ""}, {"(*M).Run", Method, 4, ""}, {"(*PB).Next", Method, 3, ""}, + {"(*T).ArtifactDir", Method, 26, ""}, {"(*T).Attr", Method, 25, ""}, {"(*T).Chdir", Method, 24, ""}, {"(*T).Cleanup", Method, 14, ""}, diff --git a/vendor/golang.org/x/tools/internal/typeparams/normalize.go b/vendor/golang.org/x/tools/internal/typeparams/normalize.go index f49802b8ef..8d13f12147 100644 --- a/vendor/golang.org/x/tools/internal/typeparams/normalize.go +++ b/vendor/golang.org/x/tools/internal/typeparams/normalize.go @@ -160,8 +160,7 @@ func computeTermSetInternal(t types.Type, seen map[types.Type]*termSet, depth in // The term set of an interface is the intersection of the term sets of its // embedded types. tset.terms = allTermlist - for i := 0; i < u.NumEmbeddeds(); i++ { - embedded := u.EmbeddedType(i) + for embedded := range u.EmbeddedTypes() { if _, ok := embedded.Underlying().(*types.TypeParam); ok { return nil, fmt.Errorf("invalid embedded type %T", embedded) } @@ -174,8 +173,7 @@ func computeTermSetInternal(t types.Type, seen map[types.Type]*termSet, depth in case *types.Union: // The term set of a union is the union of term sets of its terms. tset.terms = nil - for i := 0; i < u.Len(); i++ { - t := u.Term(i) + for t := range u.Terms() { var terms termlist switch t.Type().Underlying().(type) { case *types.Interface: diff --git a/vendor/golang.org/x/tools/internal/typesinternal/element.go b/vendor/golang.org/x/tools/internal/typesinternal/element.go index 4957f02164..5fe4d8abcb 100644 --- a/vendor/golang.org/x/tools/internal/typesinternal/element.go +++ b/vendor/golang.org/x/tools/internal/typesinternal/element.go @@ -35,8 +35,8 @@ func ForEachElement(rtypes *typeutil.Map, msets *typeutil.MethodSetCache, T type // Recursion over signatures of each method. tmset := msets.MethodSet(T) - for i := 0; i < tmset.Len(); i++ { - sig := tmset.At(i).Type().(*types.Signature) + for method := range tmset.Methods() { + sig := method.Type().(*types.Signature) // It is tempting to call visit(sig, false) // but, as noted in golang.org/cl/65450043, // the Signature.Recv field is ignored by diff --git a/vendor/golang.org/x/tools/internal/typesinternal/fx.go b/vendor/golang.org/x/tools/internal/typesinternal/fx.go index 93acff2170..c846a53d5f 100644 --- a/vendor/golang.org/x/tools/internal/typesinternal/fx.go +++ b/vendor/golang.org/x/tools/internal/typesinternal/fx.go @@ -19,25 +19,46 @@ func NoEffects(info *types.Info, expr ast.Expr) bool { switch v := n.(type) { case nil, *ast.Ident, *ast.BasicLit, *ast.BinaryExpr, *ast.ParenExpr, *ast.SelectorExpr, *ast.IndexExpr, *ast.SliceExpr, *ast.TypeAssertExpr, - *ast.StarExpr, *ast.CompositeLit, *ast.ArrayType, *ast.StructType, - *ast.MapType, *ast.InterfaceType, *ast.KeyValueExpr: - // No effect + *ast.StarExpr, *ast.CompositeLit, + // non-expressions that may appear within expressions + *ast.KeyValueExpr, + *ast.FieldList, + *ast.Field, + *ast.Ellipsis, + *ast.IndexListExpr: + // No effect. + + case *ast.ArrayType, + *ast.StructType, + *ast.ChanType, + *ast.FuncType, + *ast.MapType, + *ast.InterfaceType: + // Type syntax: no effects, recursively. + // Prune descent. + return false + case *ast.UnaryExpr: - // Channel send <-ch has effects + // Channel send <-ch has effects. if v.Op == token.ARROW { noEffects = false } + case *ast.CallExpr: - // Type conversion has no effects + // Type conversion has no effects. if !info.Types[v.Fun].IsType() { - // TODO(adonovan): Add a case for built-in functions without side - // effects (by using callsPureBuiltin from tools/internal/refactor/inline) - - noEffects = false + if CallsPureBuiltin(info, v) { + // A call such as len(e) has no effects of its + // own, though the subexpression e might. + } else { + noEffects = false + } } + case *ast.FuncLit: // A FuncLit has no effects, but do not descend into it. return false + default: // All other expressions have effects noEffects = false @@ -47,3 +68,21 @@ func NoEffects(info *types.Info, expr ast.Expr) bool { }) return noEffects } + +// CallsPureBuiltin reports whether call is a call of a built-in +// function that is a pure computation over its operands (analogous to +// a + operator). Because it does not depend on program state, it may +// be evaluated at any point--though not necessarily at multiple +// points (consider new, make). +func CallsPureBuiltin(info *types.Info, call *ast.CallExpr) bool { + if id, ok := ast.Unparen(call.Fun).(*ast.Ident); ok { + if b, ok := info.ObjectOf(id).(*types.Builtin); ok { + switch b.Name() { + case "len", "cap", "complex", "imag", "real", "make", "new", "max", "min": + return true + } + // Not: append clear close copy delete panic print println recover + } + } + return false +} diff --git a/vendor/golang.org/x/tools/internal/typesinternal/isnamed.go b/vendor/golang.org/x/tools/internal/typesinternal/isnamed.go index f2affec4fb..e0d63c46c6 100644 --- a/vendor/golang.org/x/tools/internal/typesinternal/isnamed.go +++ b/vendor/golang.org/x/tools/internal/typesinternal/isnamed.go @@ -48,7 +48,7 @@ func IsFunctionNamed(obj types.Object, pkgPath string, names ...string) bool { return ok && IsPackageLevel(obj) && f.Pkg().Path() == pkgPath && - f.Type().(*types.Signature).Recv() == nil && + f.Signature().Recv() == nil && slices.Contains(names, f.Name()) } @@ -60,7 +60,7 @@ func IsFunctionNamed(obj types.Object, pkgPath string, names ...string) bool { // which is important for the performance of syntax matching. func IsMethodNamed(obj types.Object, pkgPath string, typeName string, names ...string) bool { if fn, ok := obj.(*types.Func); ok { - if recv := fn.Type().(*types.Signature).Recv(); recv != nil { + if recv := fn.Signature().Recv(); recv != nil { _, T := ReceiverNamed(recv) return T != nil && IsTypeNamed(T, pkgPath, typeName) && diff --git a/vendor/golang.org/x/tools/internal/typesinternal/qualifier.go b/vendor/golang.org/x/tools/internal/typesinternal/qualifier.go index 64f47919f0..4e2756fc49 100644 --- a/vendor/golang.org/x/tools/internal/typesinternal/qualifier.go +++ b/vendor/golang.org/x/tools/internal/typesinternal/qualifier.go @@ -19,7 +19,7 @@ import ( // TODO(adonovan): this function ignores the effect of shadowing. It // should accept a [token.Pos] and a [types.Info] and compute only the // set of imports that are not shadowed at that point, analogous to -// [analysisinternal.AddImport]. It could also compute (as a side +// [analysis.AddImport]. It could also compute (as a side // effect) the set of additional imports required to ensure that there // is an accessible import for each necessary package, making it // converge even more closely with AddImport. diff --git a/vendor/golang.org/x/tools/internal/typesinternal/varkind.go b/vendor/golang.org/x/tools/internal/typesinternal/varkind.go index e5da049511..26499cdd2e 100644 --- a/vendor/golang.org/x/tools/internal/typesinternal/varkind.go +++ b/vendor/golang.org/x/tools/internal/typesinternal/varkind.go @@ -2,39 +2,22 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -package typesinternal +//go:build go1.25 -// TODO(adonovan): when CL 645115 lands, define the go1.25 version of -// this API that actually does something. +package typesinternal import "go/types" -type VarKind uint8 +type VarKind = types.VarKind const ( - _ VarKind = iota // (not meaningful) - PackageVar // a package-level variable - LocalVar // a local variable - RecvVar // a method receiver variable - ParamVar // a function parameter variable - ResultVar // a function result variable - FieldVar // a struct field + PackageVar = types.PackageVar + LocalVar = types.LocalVar + RecvVar = types.RecvVar + ParamVar = types.ParamVar + ResultVar = types.ResultVar + FieldVar = types.FieldVar ) -func (kind VarKind) String() string { - return [...]string{ - 0: "VarKind(0)", - PackageVar: "PackageVar", - LocalVar: "LocalVar", - RecvVar: "RecvVar", - ParamVar: "ParamVar", - ResultVar: "ResultVar", - FieldVar: "FieldVar", - }[kind] -} - -// GetVarKind returns an invalid VarKind. -func GetVarKind(v *types.Var) VarKind { return 0 } - -// SetVarKind has no effect. -func SetVarKind(v *types.Var, kind VarKind) {} +func GetVarKind(v *types.Var) VarKind { return v.Kind() } +func SetVarKind(v *types.Var, kind VarKind) { v.SetKind(kind) } diff --git a/vendor/golang.org/x/tools/internal/typesinternal/varkind_go124.go b/vendor/golang.org/x/tools/internal/typesinternal/varkind_go124.go new file mode 100644 index 0000000000..17b1804b4e --- /dev/null +++ b/vendor/golang.org/x/tools/internal/typesinternal/varkind_go124.go @@ -0,0 +1,39 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !go1.25 + +package typesinternal + +import "go/types" + +type VarKind uint8 + +const ( + _ VarKind = iota // (not meaningful) + PackageVar // a package-level variable + LocalVar // a local variable + RecvVar // a method receiver variable + ParamVar // a function parameter variable + ResultVar // a function result variable + FieldVar // a struct field +) + +func (kind VarKind) String() string { + return [...]string{ + 0: "VarKind(0)", + PackageVar: "PackageVar", + LocalVar: "LocalVar", + RecvVar: "RecvVar", + ParamVar: "ParamVar", + ResultVar: "ResultVar", + FieldVar: "FieldVar", + }[kind] +} + +// GetVarKind returns an invalid VarKind. +func GetVarKind(v *types.Var) VarKind { return 0 } + +// SetVarKind has no effect. +func SetVarKind(v *types.Var, kind VarKind) {} diff --git a/vendor/golang.org/x/tools/internal/typesinternal/zerovalue.go b/vendor/golang.org/x/tools/internal/typesinternal/zerovalue.go index 453bba2ad5..d612a71029 100644 --- a/vendor/golang.org/x/tools/internal/typesinternal/zerovalue.go +++ b/vendor/golang.org/x/tools/internal/typesinternal/zerovalue.go @@ -258,12 +258,12 @@ func TypeExpr(t types.Type, qual types.Qualifier) ast.Expr { case *types.Signature: var params []*ast.Field - for i := 0; i < t.Params().Len(); i++ { + for v := range t.Params().Variables() { params = append(params, &ast.Field{ - Type: TypeExpr(t.Params().At(i).Type(), qual), + Type: TypeExpr(v.Type(), qual), Names: []*ast.Ident{ { - Name: t.Params().At(i).Name(), + Name: v.Name(), }, }, }) @@ -273,9 +273,9 @@ func TypeExpr(t types.Type, qual types.Qualifier) ast.Expr { last.Type = &ast.Ellipsis{Elt: last.Type.(*ast.ArrayType).Elt} } var returns []*ast.Field - for i := 0; i < t.Results().Len(); i++ { + for v := range t.Results().Variables() { returns = append(returns, &ast.Field{ - Type: TypeExpr(t.Results().At(i).Type(), qual), + Type: TypeExpr(v.Type(), qual), }) } return &ast.FuncType{ @@ -315,8 +315,8 @@ func TypeExpr(t types.Type, qual types.Qualifier) ast.Expr { if hasTypeArgs, ok := t.(interface{ TypeArgs() *types.TypeList }); ok { if typeArgs := hasTypeArgs.TypeArgs(); typeArgs != nil && typeArgs.Len() > 0 { var indices []ast.Expr - for i := range typeArgs.Len() { - indices = append(indices, TypeExpr(typeArgs.At(i), qual)) + for t0 := range typeArgs.Types() { + indices = append(indices, TypeExpr(t0, qual)) } expr = &ast.IndexListExpr{ X: expr, diff --git a/vendor/golang.org/x/tools/internal/versions/features.go b/vendor/golang.org/x/tools/internal/versions/features.go index b53f178616..a5f4e3252c 100644 --- a/vendor/golang.org/x/tools/internal/versions/features.go +++ b/vendor/golang.org/x/tools/internal/versions/features.go @@ -7,13 +7,17 @@ package versions // This file contains predicates for working with file versions to // decide when a tool should consider a language feature enabled. -// GoVersions that features in x/tools can be gated to. +// named constants, to avoid misspelling const ( Go1_18 = "go1.18" Go1_19 = "go1.19" Go1_20 = "go1.20" Go1_21 = "go1.21" Go1_22 = "go1.22" + Go1_23 = "go1.23" + Go1_24 = "go1.24" + Go1_25 = "go1.25" + Go1_26 = "go1.26" ) // Future is an invalid unknown Go version sometime in the future. diff --git a/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go b/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go index b15c10e46b..b4bc3a2bf3 100644 --- a/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go +++ b/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go @@ -16,55 +16,124 @@ * */ -// Package pickfirst contains the pick_first load balancing policy. +// Package pickfirst contains the pick_first load balancing policy which +// is the universal leaf policy. package pickfirst import ( "encoding/json" "errors" "fmt" - rand "math/rand/v2" + "net" + "net/netip" + "sync" + "time" "google.golang.org/grpc/balancer" "google.golang.org/grpc/balancer/pickfirst/internal" "google.golang.org/grpc/connectivity" + expstats "google.golang.org/grpc/experimental/stats" "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/internal/envconfig" internalgrpclog "google.golang.org/grpc/internal/grpclog" "google.golang.org/grpc/internal/pretty" "google.golang.org/grpc/resolver" "google.golang.org/grpc/serviceconfig" - - _ "google.golang.org/grpc/balancer/pickfirst/pickfirstleaf" // For automatically registering the new pickfirst if required. ) func init() { - if envconfig.NewPickFirstEnabled { - return - } balancer.Register(pickfirstBuilder{}) } -var logger = grpclog.Component("pick-first-lb") +// Name is the name of the pick_first balancer. +const Name = "pick_first" + +// enableHealthListenerKeyType is a unique key type used in resolver +// attributes to indicate whether the health listener usage is enabled. +type enableHealthListenerKeyType struct{} + +var ( + logger = grpclog.Component("pick-first-leaf-lb") + disconnectionsMetric = expstats.RegisterInt64Count(expstats.MetricDescriptor{ + Name: "grpc.lb.pick_first.disconnections", + Description: "EXPERIMENTAL. Number of times the selected subchannel becomes disconnected.", + Unit: "{disconnection}", + Labels: []string{"grpc.target"}, + Default: false, + }) + connectionAttemptsSucceededMetric = expstats.RegisterInt64Count(expstats.MetricDescriptor{ + Name: "grpc.lb.pick_first.connection_attempts_succeeded", + Description: "EXPERIMENTAL. Number of successful connection attempts.", + Unit: "{attempt}", + Labels: []string{"grpc.target"}, + Default: false, + }) + connectionAttemptsFailedMetric = expstats.RegisterInt64Count(expstats.MetricDescriptor{ + Name: "grpc.lb.pick_first.connection_attempts_failed", + Description: "EXPERIMENTAL. Number of failed connection attempts.", + Unit: "{attempt}", + Labels: []string{"grpc.target"}, + Default: false, + }) +) const ( - // Name is the name of the pick_first balancer. - Name = "pick_first" - logPrefix = "[pick-first-lb %p] " + // TODO: change to pick-first when this becomes the default pick_first policy. + logPrefix = "[pick-first-leaf-lb %p] " + // connectionDelayInterval is the time to wait for during the happy eyeballs + // pass before starting the next connection attempt. + connectionDelayInterval = 250 * time.Millisecond +) + +type ipAddrFamily int + +const ( + // ipAddrFamilyUnknown represents strings that can't be parsed as an IP + // address. + ipAddrFamilyUnknown ipAddrFamily = iota + ipAddrFamilyV4 + ipAddrFamilyV6 ) type pickfirstBuilder struct{} -func (pickfirstBuilder) Build(cc balancer.ClientConn, _ balancer.BuildOptions) balancer.Balancer { - b := &pickfirstBalancer{cc: cc} +func (pickfirstBuilder) Build(cc balancer.ClientConn, bo balancer.BuildOptions) balancer.Balancer { + b := &pickfirstBalancer{ + cc: cc, + target: bo.Target.String(), + metricsRecorder: cc.MetricsRecorder(), + + subConns: resolver.NewAddressMapV2[*scData](), + state: connectivity.Connecting, + cancelConnectionTimer: func() {}, + } b.logger = internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf(logPrefix, b)) return b } -func (pickfirstBuilder) Name() string { +func (b pickfirstBuilder) Name() string { return Name } +func (pickfirstBuilder) ParseConfig(js json.RawMessage) (serviceconfig.LoadBalancingConfig, error) { + var cfg pfConfig + if err := json.Unmarshal(js, &cfg); err != nil { + return nil, fmt.Errorf("pickfirst: unable to unmarshal LB policy config: %s, error: %v", string(js), err) + } + return cfg, nil +} + +// EnableHealthListener updates the state to configure pickfirst for using a +// generic health listener. +// +// # Experimental +// +// Notice: This API is EXPERIMENTAL and may be changed or removed in a later +// release. +func EnableHealthListener(state resolver.State) resolver.State { + state.Attributes = state.Attributes.WithValue(enableHealthListenerKeyType{}, true) + return state +} + type pfConfig struct { serviceconfig.LoadBalancingConfig `json:"-"` @@ -74,90 +143,129 @@ type pfConfig struct { ShuffleAddressList bool `json:"shuffleAddressList"` } -func (pickfirstBuilder) ParseConfig(js json.RawMessage) (serviceconfig.LoadBalancingConfig, error) { - var cfg pfConfig - if err := json.Unmarshal(js, &cfg); err != nil { - return nil, fmt.Errorf("pickfirst: unable to unmarshal LB policy config: %s, error: %v", string(js), err) +// scData keeps track of the current state of the subConn. +// It is not safe for concurrent access. +type scData struct { + // The following fields are initialized at build time and read-only after + // that. + subConn balancer.SubConn + addr resolver.Address + + rawConnectivityState connectivity.State + // The effective connectivity state based on raw connectivity, health state + // and after following sticky TransientFailure behaviour defined in A62. + effectiveState connectivity.State + lastErr error + connectionFailedInFirstPass bool +} + +func (b *pickfirstBalancer) newSCData(addr resolver.Address) (*scData, error) { + sd := &scData{ + rawConnectivityState: connectivity.Idle, + effectiveState: connectivity.Idle, + addr: addr, } - return cfg, nil + sc, err := b.cc.NewSubConn([]resolver.Address{addr}, balancer.NewSubConnOptions{ + StateListener: func(state balancer.SubConnState) { + b.updateSubConnState(sd, state) + }, + }) + if err != nil { + return nil, err + } + sd.subConn = sc + return sd, nil } type pickfirstBalancer struct { - logger *internalgrpclog.PrefixLogger - state connectivity.State - cc balancer.ClientConn - subConn balancer.SubConn + // The following fields are initialized at build time and read-only after + // that and therefore do not need to be guarded by a mutex. + logger *internalgrpclog.PrefixLogger + cc balancer.ClientConn + target string + metricsRecorder expstats.MetricsRecorder // guaranteed to be non nil + + // The mutex is used to ensure synchronization of updates triggered + // from the idle picker and the already serialized resolver, + // SubConn state updates. + mu sync.Mutex + // State reported to the channel based on SubConn states and resolver + // updates. + state connectivity.State + // scData for active subonns mapped by address. + subConns *resolver.AddressMapV2[*scData] + addressList addressList + firstPass bool + numTF int + cancelConnectionTimer func() + healthCheckingEnabled bool } +// ResolverError is called by the ClientConn when the name resolver produces +// an error or when pickfirst determined the resolver update to be invalid. func (b *pickfirstBalancer) ResolverError(err error) { + b.mu.Lock() + defer b.mu.Unlock() + b.resolverErrorLocked(err) +} + +func (b *pickfirstBalancer) resolverErrorLocked(err error) { if b.logger.V(2) { b.logger.Infof("Received error from the name resolver: %v", err) } - if b.subConn == nil { - b.state = connectivity.TransientFailure - } - if b.state != connectivity.TransientFailure { - // The picker will not change since the balancer does not currently - // report an error. + // The picker will not change since the balancer does not currently + // report an error. If the balancer hasn't received a single good resolver + // update yet, transition to TRANSIENT_FAILURE. + if b.state != connectivity.TransientFailure && b.addressList.size() > 0 { + if b.logger.V(2) { + b.logger.Infof("Ignoring resolver error because balancer is using a previous good update.") + } return } - b.cc.UpdateState(balancer.State{ + + b.updateBalancerState(balancer.State{ ConnectivityState: connectivity.TransientFailure, Picker: &picker{err: fmt.Errorf("name resolver error: %v", err)}, }) } -// Shuffler is an interface for shuffling an address list. -type Shuffler interface { - ShuffleAddressListForTesting(n int, swap func(i, j int)) -} - -// ShuffleAddressListForTesting pseudo-randomizes the order of addresses. n -// is the number of elements. swap swaps the elements with indexes i and j. -func ShuffleAddressListForTesting(n int, swap func(i, j int)) { rand.Shuffle(n, swap) } - func (b *pickfirstBalancer) UpdateClientConnState(state balancer.ClientConnState) error { + b.mu.Lock() + defer b.mu.Unlock() + b.cancelConnectionTimer() if len(state.ResolverState.Addresses) == 0 && len(state.ResolverState.Endpoints) == 0 { - // The resolver reported an empty address list. Treat it like an error by - // calling b.ResolverError. - if b.subConn != nil { - // Shut down the old subConn. All addresses were removed, so it is - // no longer valid. - b.subConn.Shutdown() - b.subConn = nil - } - b.ResolverError(errors.New("produced zero addresses")) + // Cleanup state pertaining to the previous resolver state. + // Treat an empty address list like an error by calling b.ResolverError. + b.closeSubConnsLocked() + b.addressList.updateAddrs(nil) + b.resolverErrorLocked(errors.New("produced zero addresses")) return balancer.ErrBadResolverState } - // We don't have to guard this block with the env var because ParseConfig - // already does so. + b.healthCheckingEnabled = state.ResolverState.Attributes.Value(enableHealthListenerKeyType{}) != nil cfg, ok := state.BalancerConfig.(pfConfig) if state.BalancerConfig != nil && !ok { - return fmt.Errorf("pickfirst: received illegal BalancerConfig (type %T): %v", state.BalancerConfig, state.BalancerConfig) + return fmt.Errorf("pickfirst: received illegal BalancerConfig (type %T): %v: %w", state.BalancerConfig, state.BalancerConfig, balancer.ErrBadResolverState) } if b.logger.V(2) { b.logger.Infof("Received new config %s, resolver state %s", pretty.ToJSON(cfg), pretty.ToJSON(state.ResolverState)) } - var addrs []resolver.Address + var newAddrs []resolver.Address if endpoints := state.ResolverState.Endpoints; len(endpoints) != 0 { - // Perform the optional shuffling described in gRFC A62. The shuffling will - // change the order of endpoints but not touch the order of the addresses - // within each endpoint. - A61 + // Perform the optional shuffling described in gRFC A62. The shuffling + // will change the order of endpoints but not touch the order of the + // addresses within each endpoint. - A61 if cfg.ShuffleAddressList { endpoints = append([]resolver.Endpoint{}, endpoints...) internal.RandShuffle(len(endpoints), func(i, j int) { endpoints[i], endpoints[j] = endpoints[j], endpoints[i] }) } - // "Flatten the list by concatenating the ordered list of addresses for each - // of the endpoints, in order." - A61 + // "Flatten the list by concatenating the ordered list of addresses for + // each of the endpoints, in order." - A61 for _, endpoint := range endpoints { - // "In the flattened list, interleave addresses from the two address - // families, as per RFC-8304 section 4." - A61 - // TODO: support the above language. - addrs = append(addrs, endpoint.Addresses...) + newAddrs = append(newAddrs, endpoint.Addresses...) } } else { // Endpoints not set, process addresses until we migrate resolver @@ -166,42 +274,53 @@ func (b *pickfirstBalancer) UpdateClientConnState(state balancer.ClientConnState // target do not forward the corresponding correct endpoints down/split // endpoints properly. Once all balancers correctly forward endpoints // down, can delete this else conditional. - addrs = state.ResolverState.Addresses + newAddrs = state.ResolverState.Addresses if cfg.ShuffleAddressList { - addrs = append([]resolver.Address{}, addrs...) - internal.RandShuffle(len(addrs), func(i, j int) { addrs[i], addrs[j] = addrs[j], addrs[i] }) + newAddrs = append([]resolver.Address{}, newAddrs...) + internal.RandShuffle(len(newAddrs), func(i, j int) { newAddrs[i], newAddrs[j] = newAddrs[j], newAddrs[i] }) } } - if b.subConn != nil { - b.cc.UpdateAddresses(b.subConn, addrs) + // If an address appears in multiple endpoints or in the same endpoint + // multiple times, we keep it only once. We will create only one SubConn + // for the address because an AddressMap is used to store SubConns. + // Not de-duplicating would result in attempting to connect to the same + // SubConn multiple times in the same pass. We don't want this. + newAddrs = deDupAddresses(newAddrs) + newAddrs = interleaveAddresses(newAddrs) + + prevAddr := b.addressList.currentAddress() + prevSCData, found := b.subConns.Get(prevAddr) + prevAddrsCount := b.addressList.size() + isPrevRawConnectivityStateReady := found && prevSCData.rawConnectivityState == connectivity.Ready + b.addressList.updateAddrs(newAddrs) + + // If the previous ready SubConn exists in new address list, + // keep this connection and don't create new SubConns. + if isPrevRawConnectivityStateReady && b.addressList.seekTo(prevAddr) { return nil } - var subConn balancer.SubConn - subConn, err := b.cc.NewSubConn(addrs, balancer.NewSubConnOptions{ - StateListener: func(state balancer.SubConnState) { - b.updateSubConnState(subConn, state) - }, - }) - if err != nil { - if b.logger.V(2) { - b.logger.Infof("Failed to create new SubConn: %v", err) - } - b.state = connectivity.TransientFailure - b.cc.UpdateState(balancer.State{ - ConnectivityState: connectivity.TransientFailure, - Picker: &picker{err: fmt.Errorf("error creating connection: %v", err)}, + b.reconcileSubConnsLocked(newAddrs) + // If it's the first resolver update or the balancer was already READY + // (but the new address list does not contain the ready SubConn) or + // CONNECTING, enter CONNECTING. + // We may be in TRANSIENT_FAILURE due to a previous empty address list, + // we should still enter CONNECTING because the sticky TF behaviour + // mentioned in A62 applies only when the TRANSIENT_FAILURE is reported + // due to connectivity failures. + if isPrevRawConnectivityStateReady || b.state == connectivity.Connecting || prevAddrsCount == 0 { + // Start connection attempt at first address. + b.forceUpdateConcludedStateLocked(balancer.State{ + ConnectivityState: connectivity.Connecting, + Picker: &picker{err: balancer.ErrNoSubConnAvailable}, }) - return balancer.ErrBadResolverState + b.startFirstPassLocked() + } else if b.state == connectivity.TransientFailure { + // If we're in TRANSIENT_FAILURE, we stay in TRANSIENT_FAILURE until + // we're READY. See A62. + b.startFirstPassLocked() } - b.subConn = subConn - b.state = connectivity.Idle - b.cc.UpdateState(balancer.State{ - ConnectivityState: connectivity.Connecting, - Picker: &picker{err: balancer.ErrNoSubConnAvailable}, - }) - b.subConn.Connect() return nil } @@ -211,63 +330,484 @@ func (b *pickfirstBalancer) UpdateSubConnState(subConn balancer.SubConn, state b b.logger.Errorf("UpdateSubConnState(%v, %+v) called unexpectedly", subConn, state) } -func (b *pickfirstBalancer) updateSubConnState(subConn balancer.SubConn, state balancer.SubConnState) { - if b.logger.V(2) { - b.logger.Infof("Received SubConn state update: %p, %+v", subConn, state) +func (b *pickfirstBalancer) Close() { + b.mu.Lock() + defer b.mu.Unlock() + b.closeSubConnsLocked() + b.cancelConnectionTimer() + b.state = connectivity.Shutdown +} + +// ExitIdle moves the balancer out of idle state. It can be called concurrently +// by the idlePicker and clientConn so access to variables should be +// synchronized. +func (b *pickfirstBalancer) ExitIdle() { + b.mu.Lock() + defer b.mu.Unlock() + if b.state == connectivity.Idle { + // Move the balancer into CONNECTING state immediately. This is done to + // avoid staying in IDLE if a resolver update arrives before the first + // SubConn reports CONNECTING. + b.updateBalancerState(balancer.State{ + ConnectivityState: connectivity.Connecting, + Picker: &picker{err: balancer.ErrNoSubConnAvailable}, + }) + b.startFirstPassLocked() + } +} + +func (b *pickfirstBalancer) startFirstPassLocked() { + b.firstPass = true + b.numTF = 0 + // Reset the connection attempt record for existing SubConns. + for _, sd := range b.subConns.Values() { + sd.connectionFailedInFirstPass = false + } + b.requestConnectionLocked() +} + +func (b *pickfirstBalancer) closeSubConnsLocked() { + for _, sd := range b.subConns.Values() { + sd.subConn.Shutdown() + } + b.subConns = resolver.NewAddressMapV2[*scData]() +} + +// deDupAddresses ensures that each address appears only once in the slice. +func deDupAddresses(addrs []resolver.Address) []resolver.Address { + seenAddrs := resolver.NewAddressMapV2[bool]() + retAddrs := []resolver.Address{} + + for _, addr := range addrs { + if _, ok := seenAddrs.Get(addr); ok { + continue + } + seenAddrs.Set(addr, true) + retAddrs = append(retAddrs, addr) + } + return retAddrs +} + +// interleaveAddresses interleaves addresses of both families (IPv4 and IPv6) +// as per RFC-8305 section 4. +// Whichever address family is first in the list is followed by an address of +// the other address family; that is, if the first address in the list is IPv6, +// then the first IPv4 address should be moved up in the list to be second in +// the list. It doesn't support configuring "First Address Family Count", i.e. +// there will always be a single member of the first address family at the +// beginning of the interleaved list. +// Addresses that are neither IPv4 nor IPv6 are treated as part of a third +// "unknown" family for interleaving. +// See: https://datatracker.ietf.org/doc/html/rfc8305#autoid-6 +func interleaveAddresses(addrs []resolver.Address) []resolver.Address { + familyAddrsMap := map[ipAddrFamily][]resolver.Address{} + interleavingOrder := []ipAddrFamily{} + for _, addr := range addrs { + family := addressFamily(addr.Addr) + if _, found := familyAddrsMap[family]; !found { + interleavingOrder = append(interleavingOrder, family) + } + familyAddrsMap[family] = append(familyAddrsMap[family], addr) + } + + interleavedAddrs := make([]resolver.Address, 0, len(addrs)) + + for curFamilyIdx := 0; len(interleavedAddrs) < len(addrs); curFamilyIdx = (curFamilyIdx + 1) % len(interleavingOrder) { + // Some IP types may have fewer addresses than others, so we look for + // the next type that has a remaining member to add to the interleaved + // list. + family := interleavingOrder[curFamilyIdx] + remainingMembers := familyAddrsMap[family] + if len(remainingMembers) > 0 { + interleavedAddrs = append(interleavedAddrs, remainingMembers[0]) + familyAddrsMap[family] = remainingMembers[1:] + } + } + + return interleavedAddrs +} + +// addressFamily returns the ipAddrFamily after parsing the address string. +// If the address isn't of the format "ip-address:port", it returns +// ipAddrFamilyUnknown. The address may be valid even if it's not an IP when +// using a resolver like passthrough where the address may be a hostname in +// some format that the dialer can resolve. +func addressFamily(address string) ipAddrFamily { + // Parse the IP after removing the port. + host, _, err := net.SplitHostPort(address) + if err != nil { + return ipAddrFamilyUnknown + } + ip, err := netip.ParseAddr(host) + if err != nil { + return ipAddrFamilyUnknown + } + switch { + case ip.Is4() || ip.Is4In6(): + return ipAddrFamilyV4 + case ip.Is6(): + return ipAddrFamilyV6 + default: + return ipAddrFamilyUnknown + } +} + +// reconcileSubConnsLocked updates the active subchannels based on a new address +// list from the resolver. It does this by: +// - closing subchannels: any existing subchannels associated with addresses +// that are no longer in the updated list are shut down. +// - removing subchannels: entries for these closed subchannels are removed +// from the subchannel map. +// +// This ensures that the subchannel map accurately reflects the current set of +// addresses received from the name resolver. +func (b *pickfirstBalancer) reconcileSubConnsLocked(newAddrs []resolver.Address) { + newAddrsMap := resolver.NewAddressMapV2[bool]() + for _, addr := range newAddrs { + newAddrsMap.Set(addr, true) + } + + for _, oldAddr := range b.subConns.Keys() { + if _, ok := newAddrsMap.Get(oldAddr); ok { + continue + } + val, _ := b.subConns.Get(oldAddr) + val.subConn.Shutdown() + b.subConns.Delete(oldAddr) + } +} + +// shutdownRemainingLocked shuts down remaining subConns. Called when a subConn +// becomes ready, which means that all other subConn must be shutdown. +func (b *pickfirstBalancer) shutdownRemainingLocked(selected *scData) { + b.cancelConnectionTimer() + for _, sd := range b.subConns.Values() { + if sd.subConn != selected.subConn { + sd.subConn.Shutdown() + } + } + b.subConns = resolver.NewAddressMapV2[*scData]() + b.subConns.Set(selected.addr, selected) +} + +// requestConnectionLocked starts connecting on the subchannel corresponding to +// the current address. If no subchannel exists, one is created. If the current +// subchannel is in TransientFailure, a connection to the next address is +// attempted until a subchannel is found. +func (b *pickfirstBalancer) requestConnectionLocked() { + if !b.addressList.isValid() { + return + } + var lastErr error + for valid := true; valid; valid = b.addressList.increment() { + curAddr := b.addressList.currentAddress() + sd, ok := b.subConns.Get(curAddr) + if !ok { + var err error + // We want to assign the new scData to sd from the outer scope, + // hence we can't use := below. + sd, err = b.newSCData(curAddr) + if err != nil { + // This should never happen, unless the clientConn is being shut + // down. + if b.logger.V(2) { + b.logger.Infof("Failed to create a subConn for address %v: %v", curAddr.String(), err) + } + // Do nothing, the LB policy will be closed soon. + return + } + b.subConns.Set(curAddr, sd) + } + + switch sd.rawConnectivityState { + case connectivity.Idle: + sd.subConn.Connect() + b.scheduleNextConnectionLocked() + return + case connectivity.TransientFailure: + // The SubConn is being re-used and failed during a previous pass + // over the addressList. It has not completed backoff yet. + // Mark it as having failed and try the next address. + sd.connectionFailedInFirstPass = true + lastErr = sd.lastErr + continue + case connectivity.Connecting: + // Wait for the connection attempt to complete or the timer to fire + // before attempting the next address. + b.scheduleNextConnectionLocked() + return + default: + b.logger.Errorf("SubConn with unexpected state %v present in SubConns map.", sd.rawConnectivityState) + return + + } + } + + // All the remaining addresses in the list are in TRANSIENT_FAILURE, end the + // first pass if possible. + b.endFirstPassIfPossibleLocked(lastErr) +} + +func (b *pickfirstBalancer) scheduleNextConnectionLocked() { + b.cancelConnectionTimer() + if !b.addressList.hasNext() { + return } - if b.subConn != subConn { + curAddr := b.addressList.currentAddress() + cancelled := false // Access to this is protected by the balancer's mutex. + closeFn := internal.TimeAfterFunc(connectionDelayInterval, func() { + b.mu.Lock() + defer b.mu.Unlock() + // If the scheduled task is cancelled while acquiring the mutex, return. + if cancelled { + return + } if b.logger.V(2) { - b.logger.Infof("Ignored state change because subConn is not recognized") + b.logger.Infof("Happy Eyeballs timer expired while waiting for connection to %q.", curAddr.Addr) + } + if b.addressList.increment() { + b.requestConnectionLocked() } + }) + // Access to the cancellation callback held by the balancer is guarded by + // the balancer's mutex, so it's safe to set the boolean from the callback. + b.cancelConnectionTimer = sync.OnceFunc(func() { + cancelled = true + closeFn() + }) +} + +func (b *pickfirstBalancer) updateSubConnState(sd *scData, newState balancer.SubConnState) { + b.mu.Lock() + defer b.mu.Unlock() + oldState := sd.rawConnectivityState + sd.rawConnectivityState = newState.ConnectivityState + // Previously relevant SubConns can still callback with state updates. + // To prevent pickers from returning these obsolete SubConns, this logic + // is included to check if the current list of active SubConns includes this + // SubConn. + if !b.isActiveSCData(sd) { return } - if state.ConnectivityState == connectivity.Shutdown { - b.subConn = nil + if newState.ConnectivityState == connectivity.Shutdown { + sd.effectiveState = connectivity.Shutdown return } - switch state.ConnectivityState { - case connectivity.Ready: - b.cc.UpdateState(balancer.State{ - ConnectivityState: state.ConnectivityState, - Picker: &picker{result: balancer.PickResult{SubConn: subConn}}, - }) - case connectivity.Connecting: - if b.state == connectivity.TransientFailure { - // We stay in TransientFailure until we are Ready. See A62. + // Record a connection attempt when exiting CONNECTING. + if newState.ConnectivityState == connectivity.TransientFailure { + sd.connectionFailedInFirstPass = true + connectionAttemptsFailedMetric.Record(b.metricsRecorder, 1, b.target) + } + + if newState.ConnectivityState == connectivity.Ready { + connectionAttemptsSucceededMetric.Record(b.metricsRecorder, 1, b.target) + b.shutdownRemainingLocked(sd) + if !b.addressList.seekTo(sd.addr) { + // This should not fail as we should have only one SubConn after + // entering READY. The SubConn should be present in the addressList. + b.logger.Errorf("Address %q not found address list in %v", sd.addr, b.addressList.addresses) return } - b.cc.UpdateState(balancer.State{ - ConnectivityState: state.ConnectivityState, + if !b.healthCheckingEnabled { + if b.logger.V(2) { + b.logger.Infof("SubConn %p reported connectivity state READY and the health listener is disabled. Transitioning SubConn to READY.", sd.subConn) + } + + sd.effectiveState = connectivity.Ready + b.updateBalancerState(balancer.State{ + ConnectivityState: connectivity.Ready, + Picker: &picker{result: balancer.PickResult{SubConn: sd.subConn}}, + }) + return + } + if b.logger.V(2) { + b.logger.Infof("SubConn %p reported connectivity state READY. Registering health listener.", sd.subConn) + } + // Send a CONNECTING update to take the SubConn out of sticky-TF if + // required. + sd.effectiveState = connectivity.Connecting + b.updateBalancerState(balancer.State{ + ConnectivityState: connectivity.Connecting, Picker: &picker{err: balancer.ErrNoSubConnAvailable}, }) + sd.subConn.RegisterHealthListener(func(scs balancer.SubConnState) { + b.updateSubConnHealthState(sd, scs) + }) + return + } + + // If the LB policy is READY, and it receives a subchannel state change, + // it means that the READY subchannel has failed. + // A SubConn can also transition from CONNECTING directly to IDLE when + // a transport is successfully created, but the connection fails + // before the SubConn can send the notification for READY. We treat + // this as a successful connection and transition to IDLE. + // TODO: https://github.com/grpc/grpc-go/issues/7862 - Remove the second + // part of the if condition below once the issue is fixed. + if oldState == connectivity.Ready || (oldState == connectivity.Connecting && newState.ConnectivityState == connectivity.Idle) { + // Once a transport fails, the balancer enters IDLE and starts from + // the first address when the picker is used. + b.shutdownRemainingLocked(sd) + sd.effectiveState = newState.ConnectivityState + // READY SubConn interspliced in between CONNECTING and IDLE, need to + // account for that. + if oldState == connectivity.Connecting { + // A known issue (https://github.com/grpc/grpc-go/issues/7862) + // causes a race that prevents the READY state change notification. + // This works around it. + connectionAttemptsSucceededMetric.Record(b.metricsRecorder, 1, b.target) + } + disconnectionsMetric.Record(b.metricsRecorder, 1, b.target) + b.addressList.reset() + b.updateBalancerState(balancer.State{ + ConnectivityState: connectivity.Idle, + Picker: &idlePicker{exitIdle: sync.OnceFunc(b.ExitIdle)}, + }) + return + } + + if b.firstPass { + switch newState.ConnectivityState { + case connectivity.Connecting: + // The effective state can be in either IDLE, CONNECTING or + // TRANSIENT_FAILURE. If it's TRANSIENT_FAILURE, stay in + // TRANSIENT_FAILURE until it's READY. See A62. + if sd.effectiveState != connectivity.TransientFailure { + sd.effectiveState = connectivity.Connecting + b.updateBalancerState(balancer.State{ + ConnectivityState: connectivity.Connecting, + Picker: &picker{err: balancer.ErrNoSubConnAvailable}, + }) + } + case connectivity.TransientFailure: + sd.lastErr = newState.ConnectionError + sd.effectiveState = connectivity.TransientFailure + // Since we're re-using common SubConns while handling resolver + // updates, we could receive an out of turn TRANSIENT_FAILURE from + // a pass over the previous address list. Happy Eyeballs will also + // cause out of order updates to arrive. + + if curAddr := b.addressList.currentAddress(); equalAddressIgnoringBalAttributes(&curAddr, &sd.addr) { + b.cancelConnectionTimer() + if b.addressList.increment() { + b.requestConnectionLocked() + return + } + } + + // End the first pass if we've seen a TRANSIENT_FAILURE from all + // SubConns once. + b.endFirstPassIfPossibleLocked(newState.ConnectionError) + } + return + } + + // We have finished the first pass, keep re-connecting failing SubConns. + switch newState.ConnectivityState { + case connectivity.TransientFailure: + b.numTF = (b.numTF + 1) % b.subConns.Len() + sd.lastErr = newState.ConnectionError + if b.numTF%b.subConns.Len() == 0 { + b.updateBalancerState(balancer.State{ + ConnectivityState: connectivity.TransientFailure, + Picker: &picker{err: newState.ConnectionError}, + }) + } + // We don't need to request re-resolution since the SubConn already + // does that before reporting TRANSIENT_FAILURE. + // TODO: #7534 - Move re-resolution requests from SubConn into + // pick_first. case connectivity.Idle: - if b.state == connectivity.TransientFailure { - // We stay in TransientFailure until we are Ready. Also kick the - // subConn out of Idle into Connecting. See A62. - b.subConn.Connect() + sd.subConn.Connect() + } +} + +// endFirstPassIfPossibleLocked ends the first happy-eyeballs pass if all the +// addresses are tried and their SubConns have reported a failure. +func (b *pickfirstBalancer) endFirstPassIfPossibleLocked(lastErr error) { + // An optimization to avoid iterating over the entire SubConn map. + if b.addressList.isValid() { + return + } + // Connect() has been called on all the SubConns. The first pass can be + // ended if all the SubConns have reported a failure. + for _, sd := range b.subConns.Values() { + if !sd.connectionFailedInFirstPass { return } - b.cc.UpdateState(balancer.State{ - ConnectivityState: state.ConnectivityState, - Picker: &idlePicker{subConn: subConn}, + } + b.firstPass = false + b.updateBalancerState(balancer.State{ + ConnectivityState: connectivity.TransientFailure, + Picker: &picker{err: lastErr}, + }) + // Start re-connecting all the SubConns that are already in IDLE. + for _, sd := range b.subConns.Values() { + if sd.rawConnectivityState == connectivity.Idle { + sd.subConn.Connect() + } + } +} + +func (b *pickfirstBalancer) isActiveSCData(sd *scData) bool { + activeSD, found := b.subConns.Get(sd.addr) + return found && activeSD == sd +} + +func (b *pickfirstBalancer) updateSubConnHealthState(sd *scData, state balancer.SubConnState) { + b.mu.Lock() + defer b.mu.Unlock() + // Previously relevant SubConns can still callback with state updates. + // To prevent pickers from returning these obsolete SubConns, this logic + // is included to check if the current list of active SubConns includes + // this SubConn. + if !b.isActiveSCData(sd) { + return + } + sd.effectiveState = state.ConnectivityState + switch state.ConnectivityState { + case connectivity.Ready: + b.updateBalancerState(balancer.State{ + ConnectivityState: connectivity.Ready, + Picker: &picker{result: balancer.PickResult{SubConn: sd.subConn}}, }) case connectivity.TransientFailure: - b.cc.UpdateState(balancer.State{ - ConnectivityState: state.ConnectivityState, - Picker: &picker{err: state.ConnectionError}, + b.updateBalancerState(balancer.State{ + ConnectivityState: connectivity.TransientFailure, + Picker: &picker{err: fmt.Errorf("pickfirst: health check failure: %v", state.ConnectionError)}, + }) + case connectivity.Connecting: + b.updateBalancerState(balancer.State{ + ConnectivityState: connectivity.Connecting, + Picker: &picker{err: balancer.ErrNoSubConnAvailable}, }) + default: + b.logger.Errorf("Got unexpected health update for SubConn %p: %v", state) } - b.state = state.ConnectivityState } -func (b *pickfirstBalancer) Close() { +// updateBalancerState stores the state reported to the channel and calls +// ClientConn.UpdateState(). As an optimization, it avoids sending duplicate +// updates to the channel. +func (b *pickfirstBalancer) updateBalancerState(newState balancer.State) { + // In case of TransientFailures allow the picker to be updated to update + // the connectivity error, in all other cases don't send duplicate state + // updates. + if newState.ConnectivityState == b.state && b.state != connectivity.TransientFailure { + return + } + b.forceUpdateConcludedStateLocked(newState) } -func (b *pickfirstBalancer) ExitIdle() { - if b.subConn != nil && b.state == connectivity.Idle { - b.subConn.Connect() - } +// forceUpdateConcludedStateLocked stores the state reported to the channel and +// calls ClientConn.UpdateState(). +// A separate function is defined to force update the ClientConn state since the +// channel doesn't correctly assume that LB policies start in CONNECTING and +// relies on LB policy to send an initial CONNECTING update. +func (b *pickfirstBalancer) forceUpdateConcludedStateLocked(newState balancer.State) { + b.state = newState.ConnectivityState + b.cc.UpdateState(newState) } type picker struct { @@ -282,10 +822,87 @@ func (p *picker) Pick(balancer.PickInfo) (balancer.PickResult, error) { // idlePicker is used when the SubConn is IDLE and kicks the SubConn into // CONNECTING when Pick is called. type idlePicker struct { - subConn balancer.SubConn + exitIdle func() } func (i *idlePicker) Pick(balancer.PickInfo) (balancer.PickResult, error) { - i.subConn.Connect() + i.exitIdle() return balancer.PickResult{}, balancer.ErrNoSubConnAvailable } + +// addressList manages sequentially iterating over addresses present in a list +// of endpoints. It provides a 1 dimensional view of the addresses present in +// the endpoints. +// This type is not safe for concurrent access. +type addressList struct { + addresses []resolver.Address + idx int +} + +func (al *addressList) isValid() bool { + return al.idx < len(al.addresses) +} + +func (al *addressList) size() int { + return len(al.addresses) +} + +// increment moves to the next index in the address list. +// This method returns false if it went off the list, true otherwise. +func (al *addressList) increment() bool { + if !al.isValid() { + return false + } + al.idx++ + return al.idx < len(al.addresses) +} + +// currentAddress returns the current address pointed to in the addressList. +// If the list is in an invalid state, it returns an empty address instead. +func (al *addressList) currentAddress() resolver.Address { + if !al.isValid() { + return resolver.Address{} + } + return al.addresses[al.idx] +} + +func (al *addressList) reset() { + al.idx = 0 +} + +func (al *addressList) updateAddrs(addrs []resolver.Address) { + al.addresses = addrs + al.reset() +} + +// seekTo returns false if the needle was not found and the current index was +// left unchanged. +func (al *addressList) seekTo(needle resolver.Address) bool { + for ai, addr := range al.addresses { + if !equalAddressIgnoringBalAttributes(&addr, &needle) { + continue + } + al.idx = ai + return true + } + return false +} + +// hasNext returns whether incrementing the addressList will result in moving +// past the end of the list. If the list has already moved past the end, it +// returns false. +func (al *addressList) hasNext() bool { + if !al.isValid() { + return false + } + return al.idx+1 < len(al.addresses) +} + +// equalAddressIgnoringBalAttributes returns true is a and b are considered +// equal. This is different from the Equal method on the resolver.Address type +// which considers all fields to determine equality. Here, we only consider +// fields that are meaningful to the SubConn. +func equalAddressIgnoringBalAttributes(a, b *resolver.Address) bool { + return a.Addr == b.Addr && a.ServerName == b.ServerName && + a.Attributes.Equal(b.Attributes) +} diff --git a/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirstleaf/pickfirstleaf.go b/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirstleaf/pickfirstleaf.go deleted file mode 100644 index 9ffdd28a01..0000000000 --- a/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirstleaf/pickfirstleaf.go +++ /dev/null @@ -1,913 +0,0 @@ -/* - * - * Copyright 2024 gRPC 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 pickfirstleaf contains the pick_first load balancing policy which -// will be the universal leaf policy after dualstack changes are implemented. -// -// # Experimental -// -// Notice: This package is EXPERIMENTAL and may be changed or removed in a -// later release. -package pickfirstleaf - -import ( - "encoding/json" - "errors" - "fmt" - "net" - "net/netip" - "sync" - "time" - - "google.golang.org/grpc/balancer" - "google.golang.org/grpc/balancer/pickfirst/internal" - "google.golang.org/grpc/connectivity" - expstats "google.golang.org/grpc/experimental/stats" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/internal/envconfig" - internalgrpclog "google.golang.org/grpc/internal/grpclog" - "google.golang.org/grpc/internal/pretty" - "google.golang.org/grpc/resolver" - "google.golang.org/grpc/serviceconfig" -) - -func init() { - if envconfig.NewPickFirstEnabled { - // Register as the default pick_first balancer. - Name = "pick_first" - } - balancer.Register(pickfirstBuilder{}) -} - -// enableHealthListenerKeyType is a unique key type used in resolver -// attributes to indicate whether the health listener usage is enabled. -type enableHealthListenerKeyType struct{} - -var ( - logger = grpclog.Component("pick-first-leaf-lb") - // Name is the name of the pick_first_leaf balancer. - // It is changed to "pick_first" in init() if this balancer is to be - // registered as the default pickfirst. - Name = "pick_first_leaf" - disconnectionsMetric = expstats.RegisterInt64Count(expstats.MetricDescriptor{ - Name: "grpc.lb.pick_first.disconnections", - Description: "EXPERIMENTAL. Number of times the selected subchannel becomes disconnected.", - Unit: "{disconnection}", - Labels: []string{"grpc.target"}, - Default: false, - }) - connectionAttemptsSucceededMetric = expstats.RegisterInt64Count(expstats.MetricDescriptor{ - Name: "grpc.lb.pick_first.connection_attempts_succeeded", - Description: "EXPERIMENTAL. Number of successful connection attempts.", - Unit: "{attempt}", - Labels: []string{"grpc.target"}, - Default: false, - }) - connectionAttemptsFailedMetric = expstats.RegisterInt64Count(expstats.MetricDescriptor{ - Name: "grpc.lb.pick_first.connection_attempts_failed", - Description: "EXPERIMENTAL. Number of failed connection attempts.", - Unit: "{attempt}", - Labels: []string{"grpc.target"}, - Default: false, - }) -) - -const ( - // TODO: change to pick-first when this becomes the default pick_first policy. - logPrefix = "[pick-first-leaf-lb %p] " - // connectionDelayInterval is the time to wait for during the happy eyeballs - // pass before starting the next connection attempt. - connectionDelayInterval = 250 * time.Millisecond -) - -type ipAddrFamily int - -const ( - // ipAddrFamilyUnknown represents strings that can't be parsed as an IP - // address. - ipAddrFamilyUnknown ipAddrFamily = iota - ipAddrFamilyV4 - ipAddrFamilyV6 -) - -type pickfirstBuilder struct{} - -func (pickfirstBuilder) Build(cc balancer.ClientConn, bo balancer.BuildOptions) balancer.Balancer { - b := &pickfirstBalancer{ - cc: cc, - target: bo.Target.String(), - metricsRecorder: cc.MetricsRecorder(), - - subConns: resolver.NewAddressMapV2[*scData](), - state: connectivity.Connecting, - cancelConnectionTimer: func() {}, - } - b.logger = internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf(logPrefix, b)) - return b -} - -func (b pickfirstBuilder) Name() string { - return Name -} - -func (pickfirstBuilder) ParseConfig(js json.RawMessage) (serviceconfig.LoadBalancingConfig, error) { - var cfg pfConfig - if err := json.Unmarshal(js, &cfg); err != nil { - return nil, fmt.Errorf("pickfirst: unable to unmarshal LB policy config: %s, error: %v", string(js), err) - } - return cfg, nil -} - -// EnableHealthListener updates the state to configure pickfirst for using a -// generic health listener. -func EnableHealthListener(state resolver.State) resolver.State { - state.Attributes = state.Attributes.WithValue(enableHealthListenerKeyType{}, true) - return state -} - -type pfConfig struct { - serviceconfig.LoadBalancingConfig `json:"-"` - - // If set to true, instructs the LB policy to shuffle the order of the list - // of endpoints received from the name resolver before attempting to - // connect to them. - ShuffleAddressList bool `json:"shuffleAddressList"` -} - -// scData keeps track of the current state of the subConn. -// It is not safe for concurrent access. -type scData struct { - // The following fields are initialized at build time and read-only after - // that. - subConn balancer.SubConn - addr resolver.Address - - rawConnectivityState connectivity.State - // The effective connectivity state based on raw connectivity, health state - // and after following sticky TransientFailure behaviour defined in A62. - effectiveState connectivity.State - lastErr error - connectionFailedInFirstPass bool -} - -func (b *pickfirstBalancer) newSCData(addr resolver.Address) (*scData, error) { - sd := &scData{ - rawConnectivityState: connectivity.Idle, - effectiveState: connectivity.Idle, - addr: addr, - } - sc, err := b.cc.NewSubConn([]resolver.Address{addr}, balancer.NewSubConnOptions{ - StateListener: func(state balancer.SubConnState) { - b.updateSubConnState(sd, state) - }, - }) - if err != nil { - return nil, err - } - sd.subConn = sc - return sd, nil -} - -type pickfirstBalancer struct { - // The following fields are initialized at build time and read-only after - // that and therefore do not need to be guarded by a mutex. - logger *internalgrpclog.PrefixLogger - cc balancer.ClientConn - target string - metricsRecorder expstats.MetricsRecorder // guaranteed to be non nil - - // The mutex is used to ensure synchronization of updates triggered - // from the idle picker and the already serialized resolver, - // SubConn state updates. - mu sync.Mutex - // State reported to the channel based on SubConn states and resolver - // updates. - state connectivity.State - // scData for active subonns mapped by address. - subConns *resolver.AddressMapV2[*scData] - addressList addressList - firstPass bool - numTF int - cancelConnectionTimer func() - healthCheckingEnabled bool -} - -// ResolverError is called by the ClientConn when the name resolver produces -// an error or when pickfirst determined the resolver update to be invalid. -func (b *pickfirstBalancer) ResolverError(err error) { - b.mu.Lock() - defer b.mu.Unlock() - b.resolverErrorLocked(err) -} - -func (b *pickfirstBalancer) resolverErrorLocked(err error) { - if b.logger.V(2) { - b.logger.Infof("Received error from the name resolver: %v", err) - } - - // The picker will not change since the balancer does not currently - // report an error. If the balancer hasn't received a single good resolver - // update yet, transition to TRANSIENT_FAILURE. - if b.state != connectivity.TransientFailure && b.addressList.size() > 0 { - if b.logger.V(2) { - b.logger.Infof("Ignoring resolver error because balancer is using a previous good update.") - } - return - } - - b.updateBalancerState(balancer.State{ - ConnectivityState: connectivity.TransientFailure, - Picker: &picker{err: fmt.Errorf("name resolver error: %v", err)}, - }) -} - -func (b *pickfirstBalancer) UpdateClientConnState(state balancer.ClientConnState) error { - b.mu.Lock() - defer b.mu.Unlock() - b.cancelConnectionTimer() - if len(state.ResolverState.Addresses) == 0 && len(state.ResolverState.Endpoints) == 0 { - // Cleanup state pertaining to the previous resolver state. - // Treat an empty address list like an error by calling b.ResolverError. - b.closeSubConnsLocked() - b.addressList.updateAddrs(nil) - b.resolverErrorLocked(errors.New("produced zero addresses")) - return balancer.ErrBadResolverState - } - b.healthCheckingEnabled = state.ResolverState.Attributes.Value(enableHealthListenerKeyType{}) != nil - cfg, ok := state.BalancerConfig.(pfConfig) - if state.BalancerConfig != nil && !ok { - return fmt.Errorf("pickfirst: received illegal BalancerConfig (type %T): %v: %w", state.BalancerConfig, state.BalancerConfig, balancer.ErrBadResolverState) - } - - if b.logger.V(2) { - b.logger.Infof("Received new config %s, resolver state %s", pretty.ToJSON(cfg), pretty.ToJSON(state.ResolverState)) - } - - var newAddrs []resolver.Address - if endpoints := state.ResolverState.Endpoints; len(endpoints) != 0 { - // Perform the optional shuffling described in gRFC A62. The shuffling - // will change the order of endpoints but not touch the order of the - // addresses within each endpoint. - A61 - if cfg.ShuffleAddressList { - endpoints = append([]resolver.Endpoint{}, endpoints...) - internal.RandShuffle(len(endpoints), func(i, j int) { endpoints[i], endpoints[j] = endpoints[j], endpoints[i] }) - } - - // "Flatten the list by concatenating the ordered list of addresses for - // each of the endpoints, in order." - A61 - for _, endpoint := range endpoints { - newAddrs = append(newAddrs, endpoint.Addresses...) - } - } else { - // Endpoints not set, process addresses until we migrate resolver - // emissions fully to Endpoints. The top channel does wrap emitted - // addresses with endpoints, however some balancers such as weighted - // target do not forward the corresponding correct endpoints down/split - // endpoints properly. Once all balancers correctly forward endpoints - // down, can delete this else conditional. - newAddrs = state.ResolverState.Addresses - if cfg.ShuffleAddressList { - newAddrs = append([]resolver.Address{}, newAddrs...) - internal.RandShuffle(len(newAddrs), func(i, j int) { newAddrs[i], newAddrs[j] = newAddrs[j], newAddrs[i] }) - } - } - - // If an address appears in multiple endpoints or in the same endpoint - // multiple times, we keep it only once. We will create only one SubConn - // for the address because an AddressMap is used to store SubConns. - // Not de-duplicating would result in attempting to connect to the same - // SubConn multiple times in the same pass. We don't want this. - newAddrs = deDupAddresses(newAddrs) - newAddrs = interleaveAddresses(newAddrs) - - prevAddr := b.addressList.currentAddress() - prevSCData, found := b.subConns.Get(prevAddr) - prevAddrsCount := b.addressList.size() - isPrevRawConnectivityStateReady := found && prevSCData.rawConnectivityState == connectivity.Ready - b.addressList.updateAddrs(newAddrs) - - // If the previous ready SubConn exists in new address list, - // keep this connection and don't create new SubConns. - if isPrevRawConnectivityStateReady && b.addressList.seekTo(prevAddr) { - return nil - } - - b.reconcileSubConnsLocked(newAddrs) - // If it's the first resolver update or the balancer was already READY - // (but the new address list does not contain the ready SubConn) or - // CONNECTING, enter CONNECTING. - // We may be in TRANSIENT_FAILURE due to a previous empty address list, - // we should still enter CONNECTING because the sticky TF behaviour - // mentioned in A62 applies only when the TRANSIENT_FAILURE is reported - // due to connectivity failures. - if isPrevRawConnectivityStateReady || b.state == connectivity.Connecting || prevAddrsCount == 0 { - // Start connection attempt at first address. - b.forceUpdateConcludedStateLocked(balancer.State{ - ConnectivityState: connectivity.Connecting, - Picker: &picker{err: balancer.ErrNoSubConnAvailable}, - }) - b.startFirstPassLocked() - } else if b.state == connectivity.TransientFailure { - // If we're in TRANSIENT_FAILURE, we stay in TRANSIENT_FAILURE until - // we're READY. See A62. - b.startFirstPassLocked() - } - return nil -} - -// UpdateSubConnState is unused as a StateListener is always registered when -// creating SubConns. -func (b *pickfirstBalancer) UpdateSubConnState(subConn balancer.SubConn, state balancer.SubConnState) { - b.logger.Errorf("UpdateSubConnState(%v, %+v) called unexpectedly", subConn, state) -} - -func (b *pickfirstBalancer) Close() { - b.mu.Lock() - defer b.mu.Unlock() - b.closeSubConnsLocked() - b.cancelConnectionTimer() - b.state = connectivity.Shutdown -} - -// ExitIdle moves the balancer out of idle state. It can be called concurrently -// by the idlePicker and clientConn so access to variables should be -// synchronized. -func (b *pickfirstBalancer) ExitIdle() { - b.mu.Lock() - defer b.mu.Unlock() - if b.state == connectivity.Idle { - // Move the balancer into CONNECTING state immediately. This is done to - // avoid staying in IDLE if a resolver update arrives before the first - // SubConn reports CONNECTING. - b.updateBalancerState(balancer.State{ - ConnectivityState: connectivity.Connecting, - Picker: &picker{err: balancer.ErrNoSubConnAvailable}, - }) - b.startFirstPassLocked() - } -} - -func (b *pickfirstBalancer) startFirstPassLocked() { - b.firstPass = true - b.numTF = 0 - // Reset the connection attempt record for existing SubConns. - for _, sd := range b.subConns.Values() { - sd.connectionFailedInFirstPass = false - } - b.requestConnectionLocked() -} - -func (b *pickfirstBalancer) closeSubConnsLocked() { - for _, sd := range b.subConns.Values() { - sd.subConn.Shutdown() - } - b.subConns = resolver.NewAddressMapV2[*scData]() -} - -// deDupAddresses ensures that each address appears only once in the slice. -func deDupAddresses(addrs []resolver.Address) []resolver.Address { - seenAddrs := resolver.NewAddressMapV2[*scData]() - retAddrs := []resolver.Address{} - - for _, addr := range addrs { - if _, ok := seenAddrs.Get(addr); ok { - continue - } - retAddrs = append(retAddrs, addr) - } - return retAddrs -} - -// interleaveAddresses interleaves addresses of both families (IPv4 and IPv6) -// as per RFC-8305 section 4. -// Whichever address family is first in the list is followed by an address of -// the other address family; that is, if the first address in the list is IPv6, -// then the first IPv4 address should be moved up in the list to be second in -// the list. It doesn't support configuring "First Address Family Count", i.e. -// there will always be a single member of the first address family at the -// beginning of the interleaved list. -// Addresses that are neither IPv4 nor IPv6 are treated as part of a third -// "unknown" family for interleaving. -// See: https://datatracker.ietf.org/doc/html/rfc8305#autoid-6 -func interleaveAddresses(addrs []resolver.Address) []resolver.Address { - familyAddrsMap := map[ipAddrFamily][]resolver.Address{} - interleavingOrder := []ipAddrFamily{} - for _, addr := range addrs { - family := addressFamily(addr.Addr) - if _, found := familyAddrsMap[family]; !found { - interleavingOrder = append(interleavingOrder, family) - } - familyAddrsMap[family] = append(familyAddrsMap[family], addr) - } - - interleavedAddrs := make([]resolver.Address, 0, len(addrs)) - - for curFamilyIdx := 0; len(interleavedAddrs) < len(addrs); curFamilyIdx = (curFamilyIdx + 1) % len(interleavingOrder) { - // Some IP types may have fewer addresses than others, so we look for - // the next type that has a remaining member to add to the interleaved - // list. - family := interleavingOrder[curFamilyIdx] - remainingMembers := familyAddrsMap[family] - if len(remainingMembers) > 0 { - interleavedAddrs = append(interleavedAddrs, remainingMembers[0]) - familyAddrsMap[family] = remainingMembers[1:] - } - } - - return interleavedAddrs -} - -// addressFamily returns the ipAddrFamily after parsing the address string. -// If the address isn't of the format "ip-address:port", it returns -// ipAddrFamilyUnknown. The address may be valid even if it's not an IP when -// using a resolver like passthrough where the address may be a hostname in -// some format that the dialer can resolve. -func addressFamily(address string) ipAddrFamily { - // Parse the IP after removing the port. - host, _, err := net.SplitHostPort(address) - if err != nil { - return ipAddrFamilyUnknown - } - ip, err := netip.ParseAddr(host) - if err != nil { - return ipAddrFamilyUnknown - } - switch { - case ip.Is4() || ip.Is4In6(): - return ipAddrFamilyV4 - case ip.Is6(): - return ipAddrFamilyV6 - default: - return ipAddrFamilyUnknown - } -} - -// reconcileSubConnsLocked updates the active subchannels based on a new address -// list from the resolver. It does this by: -// - closing subchannels: any existing subchannels associated with addresses -// that are no longer in the updated list are shut down. -// - removing subchannels: entries for these closed subchannels are removed -// from the subchannel map. -// -// This ensures that the subchannel map accurately reflects the current set of -// addresses received from the name resolver. -func (b *pickfirstBalancer) reconcileSubConnsLocked(newAddrs []resolver.Address) { - newAddrsMap := resolver.NewAddressMapV2[bool]() - for _, addr := range newAddrs { - newAddrsMap.Set(addr, true) - } - - for _, oldAddr := range b.subConns.Keys() { - if _, ok := newAddrsMap.Get(oldAddr); ok { - continue - } - val, _ := b.subConns.Get(oldAddr) - val.subConn.Shutdown() - b.subConns.Delete(oldAddr) - } -} - -// shutdownRemainingLocked shuts down remaining subConns. Called when a subConn -// becomes ready, which means that all other subConn must be shutdown. -func (b *pickfirstBalancer) shutdownRemainingLocked(selected *scData) { - b.cancelConnectionTimer() - for _, sd := range b.subConns.Values() { - if sd.subConn != selected.subConn { - sd.subConn.Shutdown() - } - } - b.subConns = resolver.NewAddressMapV2[*scData]() - b.subConns.Set(selected.addr, selected) -} - -// requestConnectionLocked starts connecting on the subchannel corresponding to -// the current address. If no subchannel exists, one is created. If the current -// subchannel is in TransientFailure, a connection to the next address is -// attempted until a subchannel is found. -func (b *pickfirstBalancer) requestConnectionLocked() { - if !b.addressList.isValid() { - return - } - var lastErr error - for valid := true; valid; valid = b.addressList.increment() { - curAddr := b.addressList.currentAddress() - sd, ok := b.subConns.Get(curAddr) - if !ok { - var err error - // We want to assign the new scData to sd from the outer scope, - // hence we can't use := below. - sd, err = b.newSCData(curAddr) - if err != nil { - // This should never happen, unless the clientConn is being shut - // down. - if b.logger.V(2) { - b.logger.Infof("Failed to create a subConn for address %v: %v", curAddr.String(), err) - } - // Do nothing, the LB policy will be closed soon. - return - } - b.subConns.Set(curAddr, sd) - } - - switch sd.rawConnectivityState { - case connectivity.Idle: - sd.subConn.Connect() - b.scheduleNextConnectionLocked() - return - case connectivity.TransientFailure: - // The SubConn is being re-used and failed during a previous pass - // over the addressList. It has not completed backoff yet. - // Mark it as having failed and try the next address. - sd.connectionFailedInFirstPass = true - lastErr = sd.lastErr - continue - case connectivity.Connecting: - // Wait for the connection attempt to complete or the timer to fire - // before attempting the next address. - b.scheduleNextConnectionLocked() - return - default: - b.logger.Errorf("SubConn with unexpected state %v present in SubConns map.", sd.rawConnectivityState) - return - - } - } - - // All the remaining addresses in the list are in TRANSIENT_FAILURE, end the - // first pass if possible. - b.endFirstPassIfPossibleLocked(lastErr) -} - -func (b *pickfirstBalancer) scheduleNextConnectionLocked() { - b.cancelConnectionTimer() - if !b.addressList.hasNext() { - return - } - curAddr := b.addressList.currentAddress() - cancelled := false // Access to this is protected by the balancer's mutex. - closeFn := internal.TimeAfterFunc(connectionDelayInterval, func() { - b.mu.Lock() - defer b.mu.Unlock() - // If the scheduled task is cancelled while acquiring the mutex, return. - if cancelled { - return - } - if b.logger.V(2) { - b.logger.Infof("Happy Eyeballs timer expired while waiting for connection to %q.", curAddr.Addr) - } - if b.addressList.increment() { - b.requestConnectionLocked() - } - }) - // Access to the cancellation callback held by the balancer is guarded by - // the balancer's mutex, so it's safe to set the boolean from the callback. - b.cancelConnectionTimer = sync.OnceFunc(func() { - cancelled = true - closeFn() - }) -} - -func (b *pickfirstBalancer) updateSubConnState(sd *scData, newState balancer.SubConnState) { - b.mu.Lock() - defer b.mu.Unlock() - oldState := sd.rawConnectivityState - sd.rawConnectivityState = newState.ConnectivityState - // Previously relevant SubConns can still callback with state updates. - // To prevent pickers from returning these obsolete SubConns, this logic - // is included to check if the current list of active SubConns includes this - // SubConn. - if !b.isActiveSCData(sd) { - return - } - if newState.ConnectivityState == connectivity.Shutdown { - sd.effectiveState = connectivity.Shutdown - return - } - - // Record a connection attempt when exiting CONNECTING. - if newState.ConnectivityState == connectivity.TransientFailure { - sd.connectionFailedInFirstPass = true - connectionAttemptsFailedMetric.Record(b.metricsRecorder, 1, b.target) - } - - if newState.ConnectivityState == connectivity.Ready { - connectionAttemptsSucceededMetric.Record(b.metricsRecorder, 1, b.target) - b.shutdownRemainingLocked(sd) - if !b.addressList.seekTo(sd.addr) { - // This should not fail as we should have only one SubConn after - // entering READY. The SubConn should be present in the addressList. - b.logger.Errorf("Address %q not found address list in %v", sd.addr, b.addressList.addresses) - return - } - if !b.healthCheckingEnabled { - if b.logger.V(2) { - b.logger.Infof("SubConn %p reported connectivity state READY and the health listener is disabled. Transitioning SubConn to READY.", sd.subConn) - } - - sd.effectiveState = connectivity.Ready - b.updateBalancerState(balancer.State{ - ConnectivityState: connectivity.Ready, - Picker: &picker{result: balancer.PickResult{SubConn: sd.subConn}}, - }) - return - } - if b.logger.V(2) { - b.logger.Infof("SubConn %p reported connectivity state READY. Registering health listener.", sd.subConn) - } - // Send a CONNECTING update to take the SubConn out of sticky-TF if - // required. - sd.effectiveState = connectivity.Connecting - b.updateBalancerState(balancer.State{ - ConnectivityState: connectivity.Connecting, - Picker: &picker{err: balancer.ErrNoSubConnAvailable}, - }) - sd.subConn.RegisterHealthListener(func(scs balancer.SubConnState) { - b.updateSubConnHealthState(sd, scs) - }) - return - } - - // If the LB policy is READY, and it receives a subchannel state change, - // it means that the READY subchannel has failed. - // A SubConn can also transition from CONNECTING directly to IDLE when - // a transport is successfully created, but the connection fails - // before the SubConn can send the notification for READY. We treat - // this as a successful connection and transition to IDLE. - // TODO: https://github.com/grpc/grpc-go/issues/7862 - Remove the second - // part of the if condition below once the issue is fixed. - if oldState == connectivity.Ready || (oldState == connectivity.Connecting && newState.ConnectivityState == connectivity.Idle) { - // Once a transport fails, the balancer enters IDLE and starts from - // the first address when the picker is used. - b.shutdownRemainingLocked(sd) - sd.effectiveState = newState.ConnectivityState - // READY SubConn interspliced in between CONNECTING and IDLE, need to - // account for that. - if oldState == connectivity.Connecting { - // A known issue (https://github.com/grpc/grpc-go/issues/7862) - // causes a race that prevents the READY state change notification. - // This works around it. - connectionAttemptsSucceededMetric.Record(b.metricsRecorder, 1, b.target) - } - disconnectionsMetric.Record(b.metricsRecorder, 1, b.target) - b.addressList.reset() - b.updateBalancerState(balancer.State{ - ConnectivityState: connectivity.Idle, - Picker: &idlePicker{exitIdle: sync.OnceFunc(b.ExitIdle)}, - }) - return - } - - if b.firstPass { - switch newState.ConnectivityState { - case connectivity.Connecting: - // The effective state can be in either IDLE, CONNECTING or - // TRANSIENT_FAILURE. If it's TRANSIENT_FAILURE, stay in - // TRANSIENT_FAILURE until it's READY. See A62. - if sd.effectiveState != connectivity.TransientFailure { - sd.effectiveState = connectivity.Connecting - b.updateBalancerState(balancer.State{ - ConnectivityState: connectivity.Connecting, - Picker: &picker{err: balancer.ErrNoSubConnAvailable}, - }) - } - case connectivity.TransientFailure: - sd.lastErr = newState.ConnectionError - sd.effectiveState = connectivity.TransientFailure - // Since we're re-using common SubConns while handling resolver - // updates, we could receive an out of turn TRANSIENT_FAILURE from - // a pass over the previous address list. Happy Eyeballs will also - // cause out of order updates to arrive. - - if curAddr := b.addressList.currentAddress(); equalAddressIgnoringBalAttributes(&curAddr, &sd.addr) { - b.cancelConnectionTimer() - if b.addressList.increment() { - b.requestConnectionLocked() - return - } - } - - // End the first pass if we've seen a TRANSIENT_FAILURE from all - // SubConns once. - b.endFirstPassIfPossibleLocked(newState.ConnectionError) - } - return - } - - // We have finished the first pass, keep re-connecting failing SubConns. - switch newState.ConnectivityState { - case connectivity.TransientFailure: - b.numTF = (b.numTF + 1) % b.subConns.Len() - sd.lastErr = newState.ConnectionError - if b.numTF%b.subConns.Len() == 0 { - b.updateBalancerState(balancer.State{ - ConnectivityState: connectivity.TransientFailure, - Picker: &picker{err: newState.ConnectionError}, - }) - } - // We don't need to request re-resolution since the SubConn already - // does that before reporting TRANSIENT_FAILURE. - // TODO: #7534 - Move re-resolution requests from SubConn into - // pick_first. - case connectivity.Idle: - sd.subConn.Connect() - } -} - -// endFirstPassIfPossibleLocked ends the first happy-eyeballs pass if all the -// addresses are tried and their SubConns have reported a failure. -func (b *pickfirstBalancer) endFirstPassIfPossibleLocked(lastErr error) { - // An optimization to avoid iterating over the entire SubConn map. - if b.addressList.isValid() { - return - } - // Connect() has been called on all the SubConns. The first pass can be - // ended if all the SubConns have reported a failure. - for _, sd := range b.subConns.Values() { - if !sd.connectionFailedInFirstPass { - return - } - } - b.firstPass = false - b.updateBalancerState(balancer.State{ - ConnectivityState: connectivity.TransientFailure, - Picker: &picker{err: lastErr}, - }) - // Start re-connecting all the SubConns that are already in IDLE. - for _, sd := range b.subConns.Values() { - if sd.rawConnectivityState == connectivity.Idle { - sd.subConn.Connect() - } - } -} - -func (b *pickfirstBalancer) isActiveSCData(sd *scData) bool { - activeSD, found := b.subConns.Get(sd.addr) - return found && activeSD == sd -} - -func (b *pickfirstBalancer) updateSubConnHealthState(sd *scData, state balancer.SubConnState) { - b.mu.Lock() - defer b.mu.Unlock() - // Previously relevant SubConns can still callback with state updates. - // To prevent pickers from returning these obsolete SubConns, this logic - // is included to check if the current list of active SubConns includes - // this SubConn. - if !b.isActiveSCData(sd) { - return - } - sd.effectiveState = state.ConnectivityState - switch state.ConnectivityState { - case connectivity.Ready: - b.updateBalancerState(balancer.State{ - ConnectivityState: connectivity.Ready, - Picker: &picker{result: balancer.PickResult{SubConn: sd.subConn}}, - }) - case connectivity.TransientFailure: - b.updateBalancerState(balancer.State{ - ConnectivityState: connectivity.TransientFailure, - Picker: &picker{err: fmt.Errorf("pickfirst: health check failure: %v", state.ConnectionError)}, - }) - case connectivity.Connecting: - b.updateBalancerState(balancer.State{ - ConnectivityState: connectivity.Connecting, - Picker: &picker{err: balancer.ErrNoSubConnAvailable}, - }) - default: - b.logger.Errorf("Got unexpected health update for SubConn %p: %v", state) - } -} - -// updateBalancerState stores the state reported to the channel and calls -// ClientConn.UpdateState(). As an optimization, it avoids sending duplicate -// updates to the channel. -func (b *pickfirstBalancer) updateBalancerState(newState balancer.State) { - // In case of TransientFailures allow the picker to be updated to update - // the connectivity error, in all other cases don't send duplicate state - // updates. - if newState.ConnectivityState == b.state && b.state != connectivity.TransientFailure { - return - } - b.forceUpdateConcludedStateLocked(newState) -} - -// forceUpdateConcludedStateLocked stores the state reported to the channel and -// calls ClientConn.UpdateState(). -// A separate function is defined to force update the ClientConn state since the -// channel doesn't correctly assume that LB policies start in CONNECTING and -// relies on LB policy to send an initial CONNECTING update. -func (b *pickfirstBalancer) forceUpdateConcludedStateLocked(newState balancer.State) { - b.state = newState.ConnectivityState - b.cc.UpdateState(newState) -} - -type picker struct { - result balancer.PickResult - err error -} - -func (p *picker) Pick(balancer.PickInfo) (balancer.PickResult, error) { - return p.result, p.err -} - -// idlePicker is used when the SubConn is IDLE and kicks the SubConn into -// CONNECTING when Pick is called. -type idlePicker struct { - exitIdle func() -} - -func (i *idlePicker) Pick(balancer.PickInfo) (balancer.PickResult, error) { - i.exitIdle() - return balancer.PickResult{}, balancer.ErrNoSubConnAvailable -} - -// addressList manages sequentially iterating over addresses present in a list -// of endpoints. It provides a 1 dimensional view of the addresses present in -// the endpoints. -// This type is not safe for concurrent access. -type addressList struct { - addresses []resolver.Address - idx int -} - -func (al *addressList) isValid() bool { - return al.idx < len(al.addresses) -} - -func (al *addressList) size() int { - return len(al.addresses) -} - -// increment moves to the next index in the address list. -// This method returns false if it went off the list, true otherwise. -func (al *addressList) increment() bool { - if !al.isValid() { - return false - } - al.idx++ - return al.idx < len(al.addresses) -} - -// currentAddress returns the current address pointed to in the addressList. -// If the list is in an invalid state, it returns an empty address instead. -func (al *addressList) currentAddress() resolver.Address { - if !al.isValid() { - return resolver.Address{} - } - return al.addresses[al.idx] -} - -func (al *addressList) reset() { - al.idx = 0 -} - -func (al *addressList) updateAddrs(addrs []resolver.Address) { - al.addresses = addrs - al.reset() -} - -// seekTo returns false if the needle was not found and the current index was -// left unchanged. -func (al *addressList) seekTo(needle resolver.Address) bool { - for ai, addr := range al.addresses { - if !equalAddressIgnoringBalAttributes(&addr, &needle) { - continue - } - al.idx = ai - return true - } - return false -} - -// hasNext returns whether incrementing the addressList will result in moving -// past the end of the list. If the list has already moved past the end, it -// returns false. -func (al *addressList) hasNext() bool { - if !al.isValid() { - return false - } - return al.idx+1 < len(al.addresses) -} - -// equalAddressIgnoringBalAttributes returns true is a and b are considered -// equal. This is different from the Equal method on the resolver.Address type -// which considers all fields to determine equality. Here, we only consider -// fields that are meaningful to the SubConn. -func equalAddressIgnoringBalAttributes(a, b *resolver.Address) bool { - return a.Addr == b.Addr && a.ServerName == b.ServerName && - a.Attributes.Equal(b.Attributes) -} diff --git a/vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go b/vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go index 22045bf394..22e6e32679 100644 --- a/vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go +++ b/vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go @@ -26,7 +26,7 @@ import ( "google.golang.org/grpc/balancer" "google.golang.org/grpc/balancer/endpointsharding" - "google.golang.org/grpc/balancer/pickfirst/pickfirstleaf" + "google.golang.org/grpc/balancer/pickfirst" "google.golang.org/grpc/grpclog" internalgrpclog "google.golang.org/grpc/internal/grpclog" ) @@ -47,7 +47,7 @@ func (bb builder) Name() string { } func (bb builder) Build(cc balancer.ClientConn, opts balancer.BuildOptions) balancer.Balancer { - childBuilder := balancer.Get(pickfirstleaf.Name).Build + childBuilder := balancer.Get(pickfirst.Name).Build bal := &rrBalancer{ cc: cc, Balancer: endpointsharding.NewBalancer(cc, opts, childBuilder, endpointsharding.Options{}), @@ -67,6 +67,6 @@ func (b *rrBalancer) UpdateClientConnState(ccs balancer.ClientConnState) error { return b.Balancer.UpdateClientConnState(balancer.ClientConnState{ // Enable the health listener in pickfirst children for client side health // checks and outlier detection, if configured. - ResolverState: pickfirstleaf.EnableHealthListener(ccs.ResolverState), + ResolverState: pickfirst.EnableHealthListener(ccs.ResolverState), }) } diff --git a/vendor/google.golang.org/grpc/balancer_wrapper.go b/vendor/google.golang.org/grpc/balancer_wrapper.go index 948a21ef68..2c760e623f 100644 --- a/vendor/google.golang.org/grpc/balancer_wrapper.go +++ b/vendor/google.golang.org/grpc/balancer_wrapper.go @@ -450,13 +450,14 @@ func (acbw *acBalancerWrapper) healthListenerRegFn() func(context.Context, func( if acbw.ccb.cc.dopts.disableHealthCheck { return noOpRegisterHealthListenerFn } + cfg := acbw.ac.cc.healthCheckConfig() + if cfg == nil { + return noOpRegisterHealthListenerFn + } regHealthLisFn := internal.RegisterClientHealthCheckListener if regHealthLisFn == nil { // The health package is not imported. - return noOpRegisterHealthListenerFn - } - cfg := acbw.ac.cc.healthCheckConfig() - if cfg == nil { + channelz.Error(logger, acbw.ac.channelz, "Health check is requested but health package is not imported.") return noOpRegisterHealthListenerFn } return func(ctx context.Context, listener func(balancer.SubConnState)) func() { diff --git a/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go b/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go index b1364a0325..42c61cf9fe 100644 --- a/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go +++ b/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go @@ -18,7 +18,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.6 +// protoc-gen-go v1.36.10 // protoc v5.27.1 // source: grpc/binlog/v1/binarylog.proto diff --git a/vendor/google.golang.org/grpc/clientconn.go b/vendor/google.golang.org/grpc/clientconn.go index a3c315f2d7..c0c2c9a76a 100644 --- a/vendor/google.golang.org/grpc/clientconn.go +++ b/vendor/google.golang.org/grpc/clientconn.go @@ -40,11 +40,12 @@ import ( "google.golang.org/grpc/internal/grpcsync" "google.golang.org/grpc/internal/idle" iresolver "google.golang.org/grpc/internal/resolver" - "google.golang.org/grpc/internal/stats" + istats "google.golang.org/grpc/internal/stats" "google.golang.org/grpc/internal/transport" "google.golang.org/grpc/keepalive" "google.golang.org/grpc/resolver" "google.golang.org/grpc/serviceconfig" + "google.golang.org/grpc/stats" "google.golang.org/grpc/status" _ "google.golang.org/grpc/balancer/roundrobin" // To register roundrobin. @@ -210,7 +211,8 @@ func NewClient(target string, opts ...DialOption) (conn *ClientConn, err error) cc.csMgr = newConnectivityStateManager(cc.ctx, cc.channelz) cc.pickerWrapper = newPickerWrapper() - cc.metricsRecorderList = stats.NewMetricsRecorderList(cc.dopts.copts.StatsHandlers) + cc.metricsRecorderList = istats.NewMetricsRecorderList(cc.dopts.copts.StatsHandlers) + cc.statsHandler = istats.NewCombinedHandler(cc.dopts.copts.StatsHandlers...) cc.initIdleStateLocked() // Safe to call without the lock, since nothing else has a reference to cc. cc.idlenessMgr = idle.NewManager((*idler)(cc), cc.dopts.idleTimeout) @@ -621,7 +623,8 @@ type ClientConn struct { channelz *channelz.Channel // Channelz object. resolverBuilder resolver.Builder // See initParsedTargetAndResolverBuilder(). idlenessMgr *idle.Manager - metricsRecorderList *stats.MetricsRecorderList + metricsRecorderList *istats.MetricsRecorderList + statsHandler stats.Handler // The following provide their own synchronization, and therefore don't // require cc.mu to be held to access them. diff --git a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/altscontext.pb.go b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/altscontext.pb.go index 331dd6c846..50428a5488 100644 --- a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/altscontext.pb.go +++ b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/altscontext.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.6 +// protoc-gen-go v1.36.10 // protoc v5.27.1 // source: grpc/gcp/altscontext.proto diff --git a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker.pb.go b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker.pb.go index 6370b2a6d2..2222e6debc 100644 --- a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker.pb.go +++ b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/handshaker.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.6 +// protoc-gen-go v1.36.10 // protoc v5.27.1 // source: grpc/gcp/handshaker.proto diff --git a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/transport_security_common.pb.go b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/transport_security_common.pb.go index cf48193cb2..cc335a3ce9 100644 --- a/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/transport_security_common.pb.go +++ b/vendor/google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp/transport_security_common.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.6 +// protoc-gen-go v1.36.10 // protoc v5.27.1 // source: grpc/gcp/transport_security_common.proto diff --git a/vendor/google.golang.org/grpc/credentials/credentials.go b/vendor/google.golang.org/grpc/credentials/credentials.go index c8e337cdda..06f6c6c70a 100644 --- a/vendor/google.golang.org/grpc/credentials/credentials.go +++ b/vendor/google.golang.org/grpc/credentials/credentials.go @@ -44,8 +44,7 @@ type PerRPCCredentials interface { // A54). uri is the URI of the entry point for the request. When supported // by the underlying implementation, ctx can be used for timeout and // cancellation. Additionally, RequestInfo data will be available via ctx - // to this call. TODO(zhaoq): Define the set of the qualified keys instead - // of leaving it as an arbitrary string. + // to this call. GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) // RequireTransportSecurity indicates whether the credentials requires // transport security. diff --git a/vendor/google.golang.org/grpc/encoding/encoding.go b/vendor/google.golang.org/grpc/encoding/encoding.go index 11d0ae142c..dadd21e40f 100644 --- a/vendor/google.golang.org/grpc/encoding/encoding.go +++ b/vendor/google.golang.org/grpc/encoding/encoding.go @@ -27,8 +27,10 @@ package encoding import ( "io" + "slices" "strings" + "google.golang.org/grpc/encoding/internal" "google.golang.org/grpc/internal/grpcutil" ) @@ -36,6 +38,24 @@ import ( // It is intended for grpc internal use only. const Identity = "identity" +func init() { + internal.RegisterCompressorForTesting = func(c Compressor) func() { + name := c.Name() + curCompressor, found := registeredCompressor[name] + RegisterCompressor(c) + return func() { + if found { + registeredCompressor[name] = curCompressor + return + } + delete(registeredCompressor, name) + grpcutil.RegisteredCompressorNames = slices.DeleteFunc(grpcutil.RegisteredCompressorNames, func(s string) bool { + return s == name + }) + } + } +} + // Compressor is used for compressing and decompressing when sending or // receiving messages. // diff --git a/vendor/google.golang.org/grpc/encoding/internal/internal.go b/vendor/google.golang.org/grpc/encoding/internal/internal.go new file mode 100644 index 0000000000..ee9acb4377 --- /dev/null +++ b/vendor/google.golang.org/grpc/encoding/internal/internal.go @@ -0,0 +1,28 @@ +/* + * + * Copyright 2025 gRPC 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 internal contains code internal to the encoding package. +package internal + +// RegisterCompressorForTesting registers a compressor in the global compressor +// registry. It returns a cleanup function that should be called at the end +// of the test to unregister the compressor. +// +// This prevents compressors registered in one test from appearing in the +// encoding headers of subsequent tests. +var RegisterCompressorForTesting any // func RegisterCompressor(c Compressor) func() diff --git a/vendor/google.golang.org/grpc/experimental/stats/metricregistry.go b/vendor/google.golang.org/grpc/experimental/stats/metricregistry.go index ad75313a18..2b57ba65a3 100644 --- a/vendor/google.golang.org/grpc/experimental/stats/metricregistry.go +++ b/vendor/google.golang.org/grpc/experimental/stats/metricregistry.go @@ -75,6 +75,7 @@ const ( MetricTypeIntHisto MetricTypeFloatHisto MetricTypeIntGauge + MetricTypeIntUpDownCount ) // Int64CountHandle is a typed handle for a int count metric. This handle @@ -93,6 +94,23 @@ func (h *Int64CountHandle) Record(recorder MetricsRecorder, incr int64, labels . recorder.RecordInt64Count(h, incr, labels...) } +// Int64UpDownCountHandle is a typed handle for an int up-down counter metric. +// This handle is passed at the recording point in order to know which metric +// to record on. +type Int64UpDownCountHandle MetricDescriptor + +// Descriptor returns the int64 up-down counter handle typecast to a pointer to a +// MetricDescriptor. +func (h *Int64UpDownCountHandle) Descriptor() *MetricDescriptor { + return (*MetricDescriptor)(h) +} + +// Record records the int64 up-down counter value on the metrics recorder provided. +// The value 'v' can be positive to increment or negative to decrement. +func (h *Int64UpDownCountHandle) Record(recorder MetricsRecorder, v int64, labels ...string) { + recorder.RecordInt64UpDownCount(h, v, labels...) +} + // Float64CountHandle is a typed handle for a float count metric. This handle is // passed at the recording point in order to know which metric to record on. type Float64CountHandle MetricDescriptor @@ -249,6 +267,21 @@ func RegisterInt64Gauge(descriptor MetricDescriptor) *Int64GaugeHandle { return (*Int64GaugeHandle)(descPtr) } +// RegisterInt64UpDownCount registers the metric description onto the global registry. +// It returns a typed handle to use for recording data. +// +// NOTE: this function must only be called during initialization time (i.e. in +// an init() function), and is not thread-safe. If multiple metrics are +// registered with the same name, this function will panic. +func RegisterInt64UpDownCount(descriptor MetricDescriptor) *Int64UpDownCountHandle { + registerMetric(descriptor.Name, descriptor.Default) + // Set the specific metric type for the up-down counter + descriptor.Type = MetricTypeIntUpDownCount + descPtr := &descriptor + metricsRegistry[descriptor.Name] = descPtr + return (*Int64UpDownCountHandle)(descPtr) +} + // snapshotMetricsRegistryForTesting snapshots the global data of the metrics // registry. Returns a cleanup function that sets the metrics registry to its // original state. diff --git a/vendor/google.golang.org/grpc/experimental/stats/metrics.go b/vendor/google.golang.org/grpc/experimental/stats/metrics.go index ee1423605a..cb57f1a748 100644 --- a/vendor/google.golang.org/grpc/experimental/stats/metrics.go +++ b/vendor/google.golang.org/grpc/experimental/stats/metrics.go @@ -38,6 +38,9 @@ type MetricsRecorder interface { // RecordInt64Gauge records the measurement alongside labels on the int // gauge associated with the provided handle. RecordInt64Gauge(handle *Int64GaugeHandle, incr int64, labels ...string) + // RecordInt64UpDownCounter records the measurement alongside labels on the int + // count associated with the provided handle. + RecordInt64UpDownCount(handle *Int64UpDownCountHandle, incr int64, labels ...string) } // Metrics is an experimental legacy alias of the now-stable stats.MetricSet. diff --git a/vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go b/vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go index 22d263fb94..8f7d9f6bbe 100644 --- a/vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go +++ b/vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.6 +// protoc-gen-go v1.36.10 // protoc v5.27.1 // source: grpc/health/v1/health.proto diff --git a/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go b/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go index 7e060f5ed1..91f760936c 100644 --- a/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go +++ b/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go @@ -52,12 +52,6 @@ var ( // or "false". EnforceALPNEnabled = boolFromEnv("GRPC_ENFORCE_ALPN_ENABLED", true) - // NewPickFirstEnabled is set if the new pickfirst leaf policy is to be used - // instead of the exiting pickfirst implementation. This can be disabled by - // setting the environment variable "GRPC_EXPERIMENTAL_ENABLE_NEW_PICK_FIRST" - // to "false". - NewPickFirstEnabled = boolFromEnv("GRPC_EXPERIMENTAL_ENABLE_NEW_PICK_FIRST", true) - // XDSEndpointHashKeyBackwardCompat controls the parsing of the endpoint hash // key from EDS LbEndpoint metadata. Endpoint hash keys can be disabled by // setting "GRPC_XDS_ENDPOINT_HASH_KEY_BACKWARD_COMPAT" to "true". When the @@ -75,6 +69,14 @@ var ( // ALTSHandshakerKeepaliveParams is set if we should add the // KeepaliveParams when dial the ALTS handshaker service. ALTSHandshakerKeepaliveParams = boolFromEnv("GRPC_EXPERIMENTAL_ALTS_HANDSHAKER_KEEPALIVE_PARAMS", false) + + // EnableDefaultPortForProxyTarget controls whether the resolver adds a default port 443 + // to a target address that lacks one. This flag only has an effect when all of + // the following conditions are met: + // - A connect proxy is being used. + // - Target resolution is disabled. + // - The DNS resolver is being used. + EnableDefaultPortForProxyTarget = boolFromEnv("GRPC_EXPERIMENTAL_ENABLE_DEFAULT_PORT_FOR_PROXY_TARGET", true) ) func boolFromEnv(envVar string, def bool) bool { diff --git a/vendor/google.golang.org/grpc/internal/envconfig/xds.go b/vendor/google.golang.org/grpc/internal/envconfig/xds.go index b1f883bcac..7685d08b54 100644 --- a/vendor/google.golang.org/grpc/internal/envconfig/xds.go +++ b/vendor/google.golang.org/grpc/internal/envconfig/xds.go @@ -74,4 +74,9 @@ var ( // For more details, see: // https://github.com/grpc/proposal/blob/master/A86-xds-http-connect.md XDSHTTPConnectEnabled = boolFromEnv("GRPC_EXPERIMENTAL_XDS_HTTP_CONNECT", false) + + // XDSBootstrapCallCredsEnabled controls if call credentials can be used in + // xDS bootstrap configuration via the `call_creds` field. For more details, + // see: https://github.com/grpc/proposal/blob/master/A97-xds-jwt-call-creds.md + XDSBootstrapCallCredsEnabled = boolFromEnv("GRPC_EXPERIMENTAL_XDS_BOOTSTRAP_CALL_CREDS", false) ) diff --git a/vendor/google.golang.org/grpc/internal/resolver/delegatingresolver/delegatingresolver.go b/vendor/google.golang.org/grpc/internal/resolver/delegatingresolver/delegatingresolver.go index 20b8fb098a..5bfa67b726 100644 --- a/vendor/google.golang.org/grpc/internal/resolver/delegatingresolver/delegatingresolver.go +++ b/vendor/google.golang.org/grpc/internal/resolver/delegatingresolver/delegatingresolver.go @@ -22,11 +22,13 @@ package delegatingresolver import ( "fmt" + "net" "net/http" "net/url" "sync" "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/internal/envconfig" "google.golang.org/grpc/internal/proxyattributes" "google.golang.org/grpc/internal/transport" "google.golang.org/grpc/internal/transport/networktype" @@ -40,6 +42,8 @@ var ( HTTPSProxyFromEnvironment = http.ProxyFromEnvironment ) +const defaultPort = "443" + // delegatingResolver manages both target URI and proxy address resolution by // delegating these tasks to separate child resolvers. Essentially, it acts as // an intermediary between the gRPC ClientConn and the child resolvers. @@ -107,10 +111,18 @@ func New(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOpti targetResolver: nopResolver{}, } + addr := target.Endpoint() var err error - r.proxyURL, err = proxyURLForTarget(target.Endpoint()) + if target.URL.Scheme == "dns" && !targetResolutionEnabled && envconfig.EnableDefaultPortForProxyTarget { + addr, err = parseTarget(addr) + if err != nil { + return nil, fmt.Errorf("delegating_resolver: invalid target address %q: %v", target.Endpoint(), err) + } + } + + r.proxyURL, err = proxyURLForTarget(addr) if err != nil { - return nil, fmt.Errorf("delegating_resolver: failed to determine proxy URL for target %s: %v", target, err) + return nil, fmt.Errorf("delegating_resolver: failed to determine proxy URL for target %q: %v", target, err) } // proxy is not configured or proxy address excluded using `NO_PROXY` env @@ -132,8 +144,8 @@ func New(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOpti // bypass the target resolver and store the unresolved target address. if target.URL.Scheme == "dns" && !targetResolutionEnabled { r.targetResolverState = &resolver.State{ - Addresses: []resolver.Address{{Addr: target.Endpoint()}}, - Endpoints: []resolver.Endpoint{{Addresses: []resolver.Address{{Addr: target.Endpoint()}}}}, + Addresses: []resolver.Address{{Addr: addr}}, + Endpoints: []resolver.Endpoint{{Addresses: []resolver.Address{{Addr: addr}}}}, } r.updateTargetResolverState(*r.targetResolverState) return r, nil @@ -202,6 +214,44 @@ func needsProxyResolver(state *resolver.State) bool { return false } +// parseTarget takes a target string and ensures it is a valid "host:port" target. +// +// It does the following: +// 1. If the target already has a port (e.g., "host:port", "[ipv6]:port"), +// it is returned as is. +// 2. If the host part is empty (e.g., ":80"), it defaults to "localhost", +// returning "localhost:80". +// 3. If the target is missing a port (e.g., "host", "ipv6"), the defaultPort +// is added. +// +// An error is returned for empty targets or targets with a trailing colon +// but no port (e.g., "host:"). +func parseTarget(target string) (string, error) { + if target == "" { + return "", fmt.Errorf("missing address") + } + + host, port, err := net.SplitHostPort(target) + if err != nil { + // If SplitHostPort fails, it's likely because the port is missing. + // We append the default port and return the result. + return net.JoinHostPort(target, defaultPort), nil + } + + // If SplitHostPort succeeds, we check for edge cases. + if port == "" { + // A success with an empty port means the target had a trailing colon, + // e.g., "host:", which is an error. + return "", fmt.Errorf("missing port after port-separator colon") + } + if host == "" { + // A success with an empty host means the target was like ":80". + // We default the host to "localhost". + host = "localhost" + } + return net.JoinHostPort(host, port), nil +} + func skipProxy(address resolver.Address) bool { // Avoid proxy when network is not tcp. networkType, ok := networktype.Get(address) diff --git a/vendor/google.golang.org/grpc/internal/stats/metrics_recorder_list.go b/vendor/google.golang.org/grpc/internal/stats/metrics_recorder_list.go index 79044657be..d5f7e4d62d 100644 --- a/vendor/google.golang.org/grpc/internal/stats/metrics_recorder_list.go +++ b/vendor/google.golang.org/grpc/internal/stats/metrics_recorder_list.go @@ -64,6 +64,16 @@ func (l *MetricsRecorderList) RecordInt64Count(handle *estats.Int64CountHandle, } } +// RecordInt64UpDownCount records the measurement alongside labels on the int +// count associated with the provided handle. +func (l *MetricsRecorderList) RecordInt64UpDownCount(handle *estats.Int64UpDownCountHandle, incr int64, labels ...string) { + verifyLabels(handle.Descriptor(), labels...) + + for _, metricRecorder := range l.metricsRecorders { + metricRecorder.RecordInt64UpDownCount(handle, incr, labels...) + } +} + // RecordFloat64Count records the measurement alongside labels on the float // count associated with the provided handle. func (l *MetricsRecorderList) RecordFloat64Count(handle *estats.Float64CountHandle, incr float64, labels ...string) { diff --git a/vendor/google.golang.org/grpc/internal/stats/stats.go b/vendor/google.golang.org/grpc/internal/stats/stats.go new file mode 100644 index 0000000000..49019b80d1 --- /dev/null +++ b/vendor/google.golang.org/grpc/internal/stats/stats.go @@ -0,0 +1,70 @@ +/* + * + * Copyright 2025 gRPC 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 stats + +import ( + "context" + + "google.golang.org/grpc/stats" +) + +type combinedHandler struct { + handlers []stats.Handler +} + +// NewCombinedHandler combines multiple stats.Handlers into a single handler. +// +// It returns nil if no handlers are provided. If only one handler is +// provided, it is returned directly without wrapping. +func NewCombinedHandler(handlers ...stats.Handler) stats.Handler { + switch len(handlers) { + case 0: + return nil + case 1: + return handlers[0] + default: + return &combinedHandler{handlers: handlers} + } +} + +func (ch *combinedHandler) TagRPC(ctx context.Context, info *stats.RPCTagInfo) context.Context { + for _, h := range ch.handlers { + ctx = h.TagRPC(ctx, info) + } + return ctx +} + +func (ch *combinedHandler) HandleRPC(ctx context.Context, stats stats.RPCStats) { + for _, h := range ch.handlers { + h.HandleRPC(ctx, stats) + } +} + +func (ch *combinedHandler) TagConn(ctx context.Context, info *stats.ConnTagInfo) context.Context { + for _, h := range ch.handlers { + ctx = h.TagConn(ctx, info) + } + return ctx +} + +func (ch *combinedHandler) HandleConn(ctx context.Context, stats stats.ConnStats) { + for _, h := range ch.handlers { + h.HandleConn(ctx, stats) + } +} diff --git a/vendor/google.golang.org/grpc/internal/transport/client_stream.go b/vendor/google.golang.org/grpc/internal/transport/client_stream.go index ccc0e017e5..980452519e 100644 --- a/vendor/google.golang.org/grpc/internal/transport/client_stream.go +++ b/vendor/google.golang.org/grpc/internal/transport/client_stream.go @@ -29,25 +29,27 @@ import ( // ClientStream implements streaming functionality for a gRPC client. type ClientStream struct { - *Stream // Embed for common stream functionality. + Stream // Embed for common stream functionality. ct *http2Client done chan struct{} // closed at the end of stream to unblock writers. doneFunc func() // invoked at the end of stream. - headerChan chan struct{} // closed to indicate the end of header metadata. - headerChanClosed uint32 // set when headerChan is closed. Used to avoid closing headerChan multiple times. + headerChan chan struct{} // closed to indicate the end of header metadata. + header metadata.MD // the received header metadata + + status *status.Status // the status error received from the server + + // Non-pointer fields are at the end to optimize GC allocations. + // headerValid indicates whether a valid header was received. Only // meaningful after headerChan is closed (always call waitOnHeader() before // reading its value). - headerValid bool - header metadata.MD // the received header metadata - noHeaders bool // set if the client never received headers (set only after the stream is done). - - bytesReceived atomic.Bool // indicates whether any bytes have been received on this stream - unprocessed atomic.Bool // set if the server sends a refused stream or GOAWAY including this stream - - status *status.Status // the status error received from the server + headerValid bool + noHeaders bool // set if the client never received headers (set only after the stream is done). + headerChanClosed uint32 // set when headerChan is closed. Used to avoid closing headerChan multiple times. + bytesReceived atomic.Bool // indicates whether any bytes have been received on this stream + unprocessed atomic.Bool // set if the server sends a refused stream or GOAWAY including this stream } // Read reads an n byte message from the input stream. @@ -142,3 +144,11 @@ func (s *ClientStream) TrailersOnly() bool { func (s *ClientStream) Status() *status.Status { return s.status } + +func (s *ClientStream) requestRead(n int) { + s.ct.adjustWindow(s, uint32(n)) +} + +func (s *ClientStream) updateWindow(n int) { + s.ct.updateWindow(s, uint32(n)) +} diff --git a/vendor/google.golang.org/grpc/internal/transport/controlbuf.go b/vendor/google.golang.org/grpc/internal/transport/controlbuf.go index a2831e5d01..2dcd1e63bd 100644 --- a/vendor/google.golang.org/grpc/internal/transport/controlbuf.go +++ b/vendor/google.golang.org/grpc/internal/transport/controlbuf.go @@ -496,6 +496,16 @@ const ( serverSide ) +// maxWriteBufSize is the maximum length (number of elements) the cached +// writeBuf can grow to. The length depends on the number of buffers +// contained within the BufferSlice produced by the codec, which is +// generally small. +// +// If a writeBuf larger than this limit is required, it will be allocated +// and freed after use, rather than being cached. This avoids holding +// on to large amounts of memory. +const maxWriteBufSize = 64 + // Loopy receives frames from the control buffer. // Each frame is handled individually; most of the work done by loopy goes // into handling data frames. Loopy maintains a queue of active streams, and each @@ -530,6 +540,8 @@ type loopyWriter struct { // Side-specific handlers ssGoAwayHandler func(*goAway) (bool, error) + + writeBuf [][]byte // cached slice to avoid heap allocations for calls to mem.Reader.Peek. } func newLoopyWriter(s side, fr *framer, cbuf *controlBuffer, bdpEst *bdpEstimator, conn net.Conn, logger *grpclog.PrefixLogger, goAwayHandler func(*goAway) (bool, error), bufferPool mem.BufferPool) *loopyWriter { @@ -665,11 +677,10 @@ func (l *loopyWriter) incomingSettingsHandler(s *incomingSettings) error { func (l *loopyWriter) registerStreamHandler(h *registerStream) { str := &outStream{ - id: h.streamID, - state: empty, - itl: &itemList{}, - wq: h.wq, - reader: mem.BufferSlice{}.Reader(), + id: h.streamID, + state: empty, + itl: &itemList{}, + wq: h.wq, } l.estdStreams[h.streamID] = str } @@ -701,11 +712,10 @@ func (l *loopyWriter) headerHandler(h *headerFrame) error { } // Case 2: Client wants to originate stream. str := &outStream{ - id: h.streamID, - state: empty, - itl: &itemList{}, - wq: h.wq, - reader: mem.BufferSlice{}.Reader(), + id: h.streamID, + state: empty, + itl: &itemList{}, + wq: h.wq, } return l.originateStream(str, h) } @@ -948,11 +958,11 @@ func (l *loopyWriter) processData() (bool, error) { if str == nil { return true, nil } - reader := str.reader + reader := &str.reader dataItem := str.itl.peek().(*dataFrame) // Peek at the first data item this stream. if !dataItem.processing { dataItem.processing = true - str.reader.Reset(dataItem.data) + reader.Reset(dataItem.data) dataItem.data.Free() } // A data item is represented by a dataFrame, since it later translates into @@ -964,11 +974,11 @@ func (l *loopyWriter) processData() (bool, error) { if len(dataItem.h) == 0 && reader.Remaining() == 0 { // Empty data frame // Client sends out empty data frame with endStream = true - if err := l.framer.fr.WriteData(dataItem.streamID, dataItem.endStream, nil); err != nil { + if err := l.framer.writeData(dataItem.streamID, dataItem.endStream, nil); err != nil { return false, err } str.itl.dequeue() // remove the empty data item from stream - _ = reader.Close() + reader.Close() if str.itl.isEmpty() { str.state = empty } else if trailer, ok := str.itl.peek().(*headerFrame); ok { // the next item is trailers. @@ -1001,25 +1011,20 @@ func (l *loopyWriter) processData() (bool, error) { remainingBytes := len(dataItem.h) + reader.Remaining() - hSize - dSize size := hSize + dSize - var buf *[]byte - - if hSize != 0 && dSize == 0 { - buf = &dataItem.h - } else { - // Note: this is only necessary because the http2.Framer does not support - // partially writing a frame, so the sequence must be materialized into a buffer. - // TODO: Revisit once https://github.com/golang/go/issues/66655 is addressed. - pool := l.bufferPool - if pool == nil { - // Note that this is only supposed to be nil in tests. Otherwise, stream is - // always initialized with a BufferPool. - pool = mem.DefaultBufferPool() + l.writeBuf = l.writeBuf[:0] + if hSize > 0 { + l.writeBuf = append(l.writeBuf, dataItem.h[:hSize]) + } + if dSize > 0 { + var err error + l.writeBuf, err = reader.Peek(dSize, l.writeBuf) + if err != nil { + // This must never happen since the reader must have at least dSize + // bytes. + // Log an error to fail tests. + l.logger.Errorf("unexpected error while reading Data frame payload: %v", err) + return false, err } - buf = pool.Get(size) - defer pool.Put(buf) - - copy((*buf)[:hSize], dataItem.h) - _, _ = reader.Read((*buf)[hSize:]) } // Now that outgoing flow controls are checked we can replenish str's write quota @@ -1032,7 +1037,14 @@ func (l *loopyWriter) processData() (bool, error) { if dataItem.onEachWrite != nil { dataItem.onEachWrite() } - if err := l.framer.fr.WriteData(dataItem.streamID, endStream, (*buf)[:size]); err != nil { + err := l.framer.writeData(dataItem.streamID, endStream, l.writeBuf) + reader.Discard(dSize) + if cap(l.writeBuf) > maxWriteBufSize { + l.writeBuf = nil + } else { + clear(l.writeBuf) + } + if err != nil { return false, err } str.bytesOutStanding += size @@ -1040,7 +1052,7 @@ func (l *loopyWriter) processData() (bool, error) { dataItem.h = dataItem.h[hSize:] if remainingBytes == 0 { // All the data from that message was written out. - _ = reader.Close() + reader.Close() str.itl.dequeue() } if str.itl.isEmpty() { diff --git a/vendor/google.golang.org/grpc/internal/transport/flowcontrol.go b/vendor/google.golang.org/grpc/internal/transport/flowcontrol.go index dfc0f224ec..7cfbc9637b 100644 --- a/vendor/google.golang.org/grpc/internal/transport/flowcontrol.go +++ b/vendor/google.golang.org/grpc/internal/transport/flowcontrol.go @@ -28,7 +28,7 @@ import ( // writeQuota is a soft limit on the amount of data a stream can // schedule before some of it is written out. type writeQuota struct { - quota int32 + _ noCopy // get waits on read from when quota goes less than or equal to zero. // replenish writes on it when quota goes positive again. ch chan struct{} @@ -38,16 +38,17 @@ type writeQuota struct { // It is implemented as a field so that it can be updated // by tests. replenish func(n int) + quota int32 } -func newWriteQuota(sz int32, done <-chan struct{}) *writeQuota { - w := &writeQuota{ - quota: sz, - ch: make(chan struct{}, 1), - done: done, - } +// init allows a writeQuota to be initialized in-place, which is useful for +// resetting a buffer or for avoiding a heap allocation when the buffer is +// embedded in another struct. +func (w *writeQuota) init(sz int32, done <-chan struct{}) { + w.quota = sz + w.ch = make(chan struct{}, 1) + w.done = done w.replenish = w.realReplenish - return w } func (w *writeQuota) get(sz int32) error { @@ -67,9 +68,9 @@ func (w *writeQuota) get(sz int32) error { func (w *writeQuota) realReplenish(n int) { sz := int32(n) - a := atomic.AddInt32(&w.quota, sz) - b := a - sz - if b <= 0 && a > 0 { + newQuota := atomic.AddInt32(&w.quota, sz) + previousQuota := newQuota - sz + if previousQuota <= 0 && newQuota > 0 { select { case w.ch <- struct{}{}: default: diff --git a/vendor/google.golang.org/grpc/internal/transport/handler_server.go b/vendor/google.golang.org/grpc/internal/transport/handler_server.go index d954a64c38..7ab3422b8a 100644 --- a/vendor/google.golang.org/grpc/internal/transport/handler_server.go +++ b/vendor/google.golang.org/grpc/internal/transport/handler_server.go @@ -50,7 +50,7 @@ import ( // NewServerHandlerTransport returns a ServerTransport handling gRPC from // inside an http.Handler, or writes an HTTP error to w and returns an error. // It requires that the http Server supports HTTP/2. -func NewServerHandlerTransport(w http.ResponseWriter, r *http.Request, stats []stats.Handler, bufferPool mem.BufferPool) (ServerTransport, error) { +func NewServerHandlerTransport(w http.ResponseWriter, r *http.Request, stats stats.Handler, bufferPool mem.BufferPool) (ServerTransport, error) { if r.Method != http.MethodPost { w.Header().Set("Allow", http.MethodPost) msg := fmt.Sprintf("invalid gRPC request method %q", r.Method) @@ -170,7 +170,7 @@ type serverHandlerTransport struct { // TODO make sure this is consistent across handler_server and http2_server contentSubtype string - stats []stats.Handler + stats stats.Handler logger *grpclog.PrefixLogger bufferPool mem.BufferPool @@ -274,15 +274,13 @@ func (ht *serverHandlerTransport) writeStatus(s *ServerStream, st *status.Status } }) - if err == nil { // transport has not been closed + if err == nil && ht.stats != nil { // transport has not been closed // Note: The trailer fields are compressed with hpack after this call returns. // No WireLength field is set here. s.hdrMu.Lock() - for _, sh := range ht.stats { - sh.HandleRPC(s.Context(), &stats.OutTrailer{ - Trailer: s.trailer.Copy(), - }) - } + ht.stats.HandleRPC(s.Context(), &stats.OutTrailer{ + Trailer: s.trailer.Copy(), + }) s.hdrMu.Unlock() } ht.Close(errors.New("finished writing status")) @@ -374,19 +372,23 @@ func (ht *serverHandlerTransport) writeHeader(s *ServerStream, md metadata.MD) e ht.rw.(http.Flusher).Flush() }) - if err == nil { - for _, sh := range ht.stats { - // Note: The header fields are compressed with hpack after this call returns. - // No WireLength field is set here. - sh.HandleRPC(s.Context(), &stats.OutHeader{ - Header: md.Copy(), - Compression: s.sendCompress, - }) - } + if err == nil && ht.stats != nil { + // Note: The header fields are compressed with hpack after this call returns. + // No WireLength field is set here. + ht.stats.HandleRPC(s.Context(), &stats.OutHeader{ + Header: md.Copy(), + Compression: s.sendCompress, + }) } return err } +func (ht *serverHandlerTransport) adjustWindow(*ServerStream, uint32) { +} + +func (ht *serverHandlerTransport) updateWindow(*ServerStream, uint32) { +} + func (ht *serverHandlerTransport) HandleStreams(ctx context.Context, startStream func(*ServerStream)) { // With this transport type there will be exactly 1 stream: this HTTP request. var cancel context.CancelFunc @@ -411,11 +413,9 @@ func (ht *serverHandlerTransport) HandleStreams(ctx context.Context, startStream ctx = metadata.NewIncomingContext(ctx, ht.headerMD) req := ht.req s := &ServerStream{ - Stream: &Stream{ + Stream: Stream{ id: 0, // irrelevant ctx: ctx, - requestRead: func(int) {}, - buf: newRecvBuffer(), method: req.URL.Path, recvCompress: req.Header.Get("grpc-encoding"), contentSubtype: ht.contentSubtype, @@ -424,9 +424,11 @@ func (ht *serverHandlerTransport) HandleStreams(ctx context.Context, startStream st: ht, headerWireLength: 0, // won't have access to header wire length until golang/go#18997. } - s.trReader = &transportReader{ - reader: &recvBufferReader{ctx: s.ctx, ctxDone: s.ctx.Done(), recv: s.buf}, - windowHandler: func(int) {}, + s.Stream.buf.init() + s.readRequester = s + s.trReader = transportReader{ + reader: recvBufferReader{ctx: s.ctx, ctxDone: s.ctx.Done(), recv: &s.buf}, + windowHandler: s, } // readerDone is closed when the Body.Read-ing goroutine exits. diff --git a/vendor/google.golang.org/grpc/internal/transport/http2_client.go b/vendor/google.golang.org/grpc/internal/transport/http2_client.go index 7cb238794f..65b4ab2439 100644 --- a/vendor/google.golang.org/grpc/internal/transport/http2_client.go +++ b/vendor/google.golang.org/grpc/internal/transport/http2_client.go @@ -44,6 +44,7 @@ import ( "google.golang.org/grpc/internal/grpcutil" imetadata "google.golang.org/grpc/internal/metadata" "google.golang.org/grpc/internal/proxyattributes" + istats "google.golang.org/grpc/internal/stats" istatus "google.golang.org/grpc/internal/status" isyscall "google.golang.org/grpc/internal/syscall" "google.golang.org/grpc/internal/transport/networktype" @@ -105,7 +106,7 @@ type http2Client struct { kp keepalive.ClientParameters keepaliveEnabled bool - statsHandlers []stats.Handler + statsHandler stats.Handler initialWindowSize int32 @@ -335,14 +336,14 @@ func NewHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts writerDone: make(chan struct{}), goAway: make(chan struct{}), keepaliveDone: make(chan struct{}), - framer: newFramer(conn, writeBufSize, readBufSize, opts.SharedWriteBuffer, maxHeaderListSize), + framer: newFramer(conn, writeBufSize, readBufSize, opts.SharedWriteBuffer, maxHeaderListSize, opts.BufferPool), fc: &trInFlow{limit: uint32(icwz)}, scheme: scheme, activeStreams: make(map[uint32]*ClientStream), isSecure: isSecure, perRPCCreds: perRPCCreds, kp: kp, - statsHandlers: opts.StatsHandlers, + statsHandler: istats.NewCombinedHandler(opts.StatsHandlers...), initialWindowSize: initialWindowSize, nextID: 1, maxConcurrentStreams: defaultMaxStreamsClient, @@ -386,15 +387,14 @@ func NewHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts updateFlowControl: t.updateFlowControl, } } - for _, sh := range t.statsHandlers { - t.ctx = sh.TagConn(t.ctx, &stats.ConnTagInfo{ + if t.statsHandler != nil { + t.ctx = t.statsHandler.TagConn(t.ctx, &stats.ConnTagInfo{ RemoteAddr: t.remoteAddr, LocalAddr: t.localAddr, }) - connBegin := &stats.ConnBegin{ + t.statsHandler.HandleConn(t.ctx, &stats.ConnBegin{ Client: true, - } - sh.HandleConn(t.ctx, connBegin) + }) } if t.keepaliveEnabled { t.kpDormancyCond = sync.NewCond(&t.mu) @@ -481,10 +481,9 @@ func NewHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts func (t *http2Client) newStream(ctx context.Context, callHdr *CallHdr) *ClientStream { // TODO(zhaoq): Handle uint32 overflow of Stream.id. s := &ClientStream{ - Stream: &Stream{ + Stream: Stream{ method: callHdr.Method, sendCompress: callHdr.SendCompress, - buf: newRecvBuffer(), contentSubtype: callHdr.ContentSubtype, }, ct: t, @@ -492,26 +491,21 @@ func (t *http2Client) newStream(ctx context.Context, callHdr *CallHdr) *ClientSt headerChan: make(chan struct{}), doneFunc: callHdr.DoneFunc, } - s.wq = newWriteQuota(defaultWriteQuota, s.done) - s.requestRead = func(n int) { - t.adjustWindow(s, uint32(n)) - } + s.Stream.buf.init() + s.Stream.wq.init(defaultWriteQuota, s.done) + s.readRequester = s // The client side stream context should have exactly the same life cycle with the user provided context. // That means, s.ctx should be read-only. And s.ctx is done iff ctx is done. // So we use the original context here instead of creating a copy. s.ctx = ctx - s.trReader = &transportReader{ - reader: &recvBufferReader{ - ctx: s.ctx, - ctxDone: s.ctx.Done(), - recv: s.buf, - closeStream: func(err error) { - s.Close(err) - }, - }, - windowHandler: func(n int) { - t.updateWindow(s, uint32(n)) + s.trReader = transportReader{ + reader: recvBufferReader{ + ctx: s.ctx, + ctxDone: s.ctx.Done(), + recv: &s.buf, + clientStream: s, }, + windowHandler: s, } return s } @@ -823,7 +817,7 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (*ClientS return nil }, onOrphaned: cleanup, - wq: s.wq, + wq: &s.wq, } firstTry := true var ch chan struct{} @@ -854,7 +848,7 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (*ClientS transportDrainRequired = t.nextID > MaxStreamID s.id = hdr.streamID - s.fc = &inFlow{limit: uint32(t.initialWindowSize)} + s.fc = inFlow{limit: uint32(t.initialWindowSize)} t.activeStreams[s.id] = s t.mu.Unlock() @@ -905,27 +899,23 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (*ClientS return nil, &NewStreamError{Err: ErrConnClosing, AllowTransparentRetry: true} } } - if len(t.statsHandlers) != 0 { + if t.statsHandler != nil { header, ok := metadata.FromOutgoingContext(ctx) if ok { header.Set("user-agent", t.userAgent) } else { header = metadata.Pairs("user-agent", t.userAgent) } - for _, sh := range t.statsHandlers { - // Note: The header fields are compressed with hpack after this call returns. - // No WireLength field is set here. - // Note: Creating a new stats object to prevent pollution. - outHeader := &stats.OutHeader{ - Client: true, - FullMethod: callHdr.Method, - RemoteAddr: t.remoteAddr, - LocalAddr: t.localAddr, - Compression: callHdr.SendCompress, - Header: header, - } - sh.HandleRPC(s.ctx, outHeader) - } + // Note: The header fields are compressed with hpack after this call returns. + // No WireLength field is set here. + t.statsHandler.HandleRPC(s.ctx, &stats.OutHeader{ + Client: true, + FullMethod: callHdr.Method, + RemoteAddr: t.remoteAddr, + LocalAddr: t.localAddr, + Compression: callHdr.SendCompress, + Header: header, + }) } if transportDrainRequired { if t.logger.V(logLevel) { @@ -1002,6 +992,9 @@ func (t *http2Client) closeStream(s *ClientStream, err error, rst bool, rstCode // accessed anymore. func (t *http2Client) Close(err error) { t.conn.SetWriteDeadline(time.Now().Add(time.Second * 10)) + // For background on the deadline value chosen here, see + // https://github.com/grpc/grpc-go/issues/8425#issuecomment-3057938248 . + t.conn.SetReadDeadline(time.Now().Add(time.Second)) t.mu.Lock() // Make sure we only close once. if t.state == closing { @@ -1063,11 +1056,10 @@ func (t *http2Client) Close(err error) { for _, s := range streams { t.closeStream(s, err, false, http2.ErrCodeNo, st, nil, false) } - for _, sh := range t.statsHandlers { - connEnd := &stats.ConnEnd{ + if t.statsHandler != nil { + t.statsHandler.HandleConn(t.ctx, &stats.ConnEnd{ Client: true, - } - sh.HandleConn(t.ctx, connEnd) + }) } } @@ -1178,7 +1170,7 @@ func (t *http2Client) updateFlowControl(n uint32) { }) } -func (t *http2Client) handleData(f *http2.DataFrame) { +func (t *http2Client) handleData(f *parsedDataFrame) { size := f.Header().Length var sendBDPPing bool if t.bdpEst != nil { @@ -1222,22 +1214,15 @@ func (t *http2Client) handleData(f *http2.DataFrame) { t.closeStream(s, io.EOF, true, http2.ErrCodeFlowControl, status.New(codes.Internal, err.Error()), nil, false) return } + dataLen := f.data.Len() if f.Header().Flags.Has(http2.FlagDataPadded) { - if w := s.fc.onRead(size - uint32(len(f.Data()))); w > 0 { + if w := s.fc.onRead(size - uint32(dataLen)); w > 0 { t.controlBuf.put(&outgoingWindowUpdate{s.id, w}) } } - // TODO(bradfitz, zhaoq): A copy is required here because there is no - // guarantee f.Data() is consumed before the arrival of next frame. - // Can this copy be eliminated? - if len(f.Data()) > 0 { - pool := t.bufferPool - if pool == nil { - // Note that this is only supposed to be nil in tests. Otherwise, stream is - // always initialized with a BufferPool. - pool = mem.DefaultBufferPool() - } - s.write(recvMsg{buffer: mem.Copy(f.Data(), pool)}) + if dataLen > 0 { + f.data.Ref() + s.write(recvMsg{buffer: f.data}) } } // The server has closed the stream without sending trailers. Record that @@ -1477,17 +1462,14 @@ func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) { contentTypeErr = "malformed header: missing HTTP content-type" grpcMessage string recvCompress string - httpStatusCode *int httpStatusErr string - rawStatusCode = codes.Unknown + // the code from the grpc-status header, if present + grpcStatusCode = codes.Unknown // headerError is set if an error is encountered while parsing the headers headerError string + httpStatus string ) - if initialHeader { - httpStatusErr = "malformed header: missing HTTP status" - } - for _, hf := range frame.Fields { switch hf.Name { case "content-type": @@ -1507,69 +1489,71 @@ func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) { t.closeStream(s, se.Err(), true, http2.ErrCodeProtocol, se, nil, endStream) return } - rawStatusCode = codes.Code(uint32(code)) + grpcStatusCode = codes.Code(uint32(code)) case "grpc-message": grpcMessage = decodeGrpcMessage(hf.Value) case ":status": - c, err := strconv.ParseInt(hf.Value, 10, 32) + httpStatus = hf.Value + default: + if isReservedHeader(hf.Name) && !isWhitelistedHeader(hf.Name) { + break + } + v, err := decodeMetadataHeader(hf.Name, hf.Value) if err != nil { - se := status.New(codes.Internal, fmt.Sprintf("transport: malformed http-status: %v", err)) + headerError = fmt.Sprintf("transport: malformed %s: %v", hf.Name, err) + logger.Warningf("Failed to decode metadata header (%q, %q): %v", hf.Name, hf.Value, err) + break + } + mdata[hf.Name] = append(mdata[hf.Name], v) + } + } + + // If a non-gRPC response is received, then evaluate the HTTP status to + // process the response and close the stream. + // In case http status doesn't provide any error information (status : 200), + // then evalute response code to be Unknown. + if !isGRPC { + var grpcErrorCode = codes.Internal + if httpStatus == "" { + httpStatusErr = "malformed header: missing HTTP status" + } else { + // Parse the status codes (e.g. "200", 404"). + statusCode, err := strconv.Atoi(httpStatus) + if err != nil { + se := status.New(grpcErrorCode, fmt.Sprintf("transport: malformed http-status: %v", err)) t.closeStream(s, se.Err(), true, http2.ErrCodeProtocol, se, nil, endStream) return } - statusCode := int(c) if statusCode >= 100 && statusCode < 200 { if endStream { se := status.New(codes.Internal, fmt.Sprintf( "protocol error: informational header with status code %d must not have END_STREAM set", statusCode)) t.closeStream(s, se.Err(), true, http2.ErrCodeProtocol, se, nil, endStream) } + // In case of informational headers, return. return } - httpStatusCode = &statusCode - if statusCode == 200 { - httpStatusErr = "" - break - } - httpStatusErr = fmt.Sprintf( "unexpected HTTP status code received from server: %d (%s)", statusCode, http.StatusText(statusCode), ) - default: - if isReservedHeader(hf.Name) && !isWhitelistedHeader(hf.Name) { - break - } - v, err := decodeMetadataHeader(hf.Name, hf.Value) - if err != nil { - headerError = fmt.Sprintf("transport: malformed %s: %v", hf.Name, err) - logger.Warningf("Failed to decode metadata header (%q, %q): %v", hf.Name, hf.Value, err) - break - } - mdata[hf.Name] = append(mdata[hf.Name], v) - } - } - - if !isGRPC || httpStatusErr != "" { - var code = codes.Internal // when header does not include HTTP status, return INTERNAL - - if httpStatusCode != nil { var ok bool - code, ok = HTTPStatusConvTab[*httpStatusCode] + grpcErrorCode, ok = HTTPStatusConvTab[statusCode] if !ok { - code = codes.Unknown + grpcErrorCode = codes.Unknown } } var errs []string if httpStatusErr != "" { errs = append(errs, httpStatusErr) } + if contentTypeErr != "" { errs = append(errs, contentTypeErr) } - // Verify the HTTP response is a 200. - se := status.New(code, strings.Join(errs, "; ")) + + se := status.New(grpcErrorCode, strings.Join(errs, "; ")) t.closeStream(s, se.Err(), true, http2.ErrCodeProtocol, se, nil, endStream) return } @@ -1600,22 +1584,20 @@ func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) { } } - for _, sh := range t.statsHandlers { + if t.statsHandler != nil { if !endStream { - inHeader := &stats.InHeader{ + t.statsHandler.HandleRPC(s.ctx, &stats.InHeader{ Client: true, WireLength: int(frame.Header().Length), Header: metadata.MD(mdata).Copy(), Compression: s.recvCompress, - } - sh.HandleRPC(s.ctx, inHeader) + }) } else { - inTrailer := &stats.InTrailer{ + t.statsHandler.HandleRPC(s.ctx, &stats.InTrailer{ Client: true, WireLength: int(frame.Header().Length), Trailer: metadata.MD(mdata).Copy(), - } - sh.HandleRPC(s.ctx, inTrailer) + }) } } @@ -1623,7 +1605,7 @@ func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) { return } - status := istatus.NewWithProto(rawStatusCode, grpcMessage, mdata[grpcStatusDetailsBinHeader]) + status := istatus.NewWithProto(grpcStatusCode, grpcMessage, mdata[grpcStatusDetailsBinHeader]) // If client received END_STREAM from server while stream was still active, // send RST_STREAM. @@ -1670,7 +1652,7 @@ func (t *http2Client) reader(errCh chan<- error) { // loop to keep reading incoming messages on this transport. for { t.controlBuf.throttle() - frame, err := t.framer.fr.ReadFrame() + frame, err := t.framer.readFrame() if t.keepaliveEnabled { atomic.StoreInt64(&t.lastRead, time.Now().UnixNano()) } @@ -1685,7 +1667,7 @@ func (t *http2Client) reader(errCh chan<- error) { if s != nil { // use error detail to provide better err message code := http2ErrConvTab[se.Code] - errorDetail := t.framer.fr.ErrorDetail() + errorDetail := t.framer.errorDetail() var msg string if errorDetail != nil { msg = errorDetail.Error() @@ -1703,8 +1685,9 @@ func (t *http2Client) reader(errCh chan<- error) { switch frame := frame.(type) { case *http2.MetaHeadersFrame: t.operateHeaders(frame) - case *http2.DataFrame: + case *parsedDataFrame: t.handleData(frame) + frame.data.Free() case *http2.RSTStreamFrame: t.handleRSTStream(frame) case *http2.SettingsFrame: diff --git a/vendor/google.golang.org/grpc/internal/transport/http2_server.go b/vendor/google.golang.org/grpc/internal/transport/http2_server.go index 83cee314c8..6f78a6b0c8 100644 --- a/vendor/google.golang.org/grpc/internal/transport/http2_server.go +++ b/vendor/google.golang.org/grpc/internal/transport/http2_server.go @@ -35,6 +35,8 @@ import ( "golang.org/x/net/http2" "golang.org/x/net/http2/hpack" + "google.golang.org/protobuf/proto" + "google.golang.org/grpc/internal" "google.golang.org/grpc/internal/grpclog" "google.golang.org/grpc/internal/grpcutil" @@ -42,7 +44,6 @@ import ( istatus "google.golang.org/grpc/internal/status" "google.golang.org/grpc/internal/syscall" "google.golang.org/grpc/mem" - "google.golang.org/protobuf/proto" "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials" @@ -86,7 +87,7 @@ type http2Server struct { // updates, reset streams, and various settings) to the controller. controlBuf *controlBuffer fc *trInFlow - stats []stats.Handler + stats stats.Handler // Keepalive and max-age parameters for the server. kp keepalive.ServerParameters // Keepalive enforcement policy. @@ -168,7 +169,7 @@ func NewServerTransport(conn net.Conn, config *ServerConfig) (_ ServerTransport, if config.MaxHeaderListSize != nil { maxHeaderListSize = *config.MaxHeaderListSize } - framer := newFramer(conn, writeBufSize, readBufSize, config.SharedWriteBuffer, maxHeaderListSize) + framer := newFramer(conn, writeBufSize, readBufSize, config.SharedWriteBuffer, maxHeaderListSize, config.BufferPool) // Send initial settings as connection preface to client. isettings := []http2.Setting{{ ID: http2.SettingMaxFrameSize, @@ -260,7 +261,7 @@ func NewServerTransport(conn net.Conn, config *ServerConfig) (_ ServerTransport, fc: &trInFlow{limit: uint32(icwz)}, state: reachable, activeStreams: make(map[uint32]*ServerStream), - stats: config.StatsHandlers, + stats: config.StatsHandler, kp: kp, idle: time.Now(), kep: kep, @@ -390,16 +391,15 @@ func (t *http2Server) operateHeaders(ctx context.Context, frame *http2.MetaHeade } t.maxStreamID = streamID - buf := newRecvBuffer() s := &ServerStream{ - Stream: &Stream{ - id: streamID, - buf: buf, - fc: &inFlow{limit: uint32(t.initialWindowSize)}, + Stream: Stream{ + id: streamID, + fc: inFlow{limit: uint32(t.initialWindowSize)}, }, st: t, headerWireLength: int(frame.Header().Length), } + s.Stream.buf.init() var ( // if false, content-type was missing or invalid isGRPC = false @@ -640,25 +640,21 @@ func (t *http2Server) operateHeaders(ctx context.Context, frame *http2.MetaHeade t.channelz.SocketMetrics.StreamsStarted.Add(1) t.channelz.SocketMetrics.LastRemoteStreamCreatedTimestamp.Store(time.Now().UnixNano()) } - s.requestRead = func(n int) { - t.adjustWindow(s, uint32(n)) - } + s.readRequester = s s.ctxDone = s.ctx.Done() - s.wq = newWriteQuota(defaultWriteQuota, s.ctxDone) - s.trReader = &transportReader{ - reader: &recvBufferReader{ + s.Stream.wq.init(defaultWriteQuota, s.ctxDone) + s.trReader = transportReader{ + reader: recvBufferReader{ ctx: s.ctx, ctxDone: s.ctxDone, - recv: s.buf, - }, - windowHandler: func(n int) { - t.updateWindow(s, uint32(n)) + recv: &s.buf, }, + windowHandler: s, } // Register the stream with loopy. t.controlBuf.put(®isterStream{ streamID: s.id, - wq: s.wq, + wq: &s.wq, }) handle(s) return nil @@ -674,7 +670,7 @@ func (t *http2Server) HandleStreams(ctx context.Context, handle func(*ServerStre }() for { t.controlBuf.throttle() - frame, err := t.framer.fr.ReadFrame() + frame, err := t.framer.readFrame() atomic.StoreInt64(&t.lastRead, time.Now().UnixNano()) if err != nil { if se, ok := err.(http2.StreamError); ok { @@ -711,8 +707,9 @@ func (t *http2Server) HandleStreams(ctx context.Context, handle func(*ServerStre }) continue } - case *http2.DataFrame: + case *parsedDataFrame: t.handleData(frame) + frame.data.Free() case *http2.RSTStreamFrame: t.handleRSTStream(frame) case *http2.SettingsFrame: @@ -792,7 +789,7 @@ func (t *http2Server) updateFlowControl(n uint32) { } -func (t *http2Server) handleData(f *http2.DataFrame) { +func (t *http2Server) handleData(f *parsedDataFrame) { size := f.Header().Length var sendBDPPing bool if t.bdpEst != nil { @@ -837,22 +834,15 @@ func (t *http2Server) handleData(f *http2.DataFrame) { t.closeStream(s, true, http2.ErrCodeFlowControl, false) return } + dataLen := f.data.Len() if f.Header().Flags.Has(http2.FlagDataPadded) { - if w := s.fc.onRead(size - uint32(len(f.Data()))); w > 0 { + if w := s.fc.onRead(size - uint32(dataLen)); w > 0 { t.controlBuf.put(&outgoingWindowUpdate{s.id, w}) } } - // TODO(bradfitz, zhaoq): A copy is required here because there is no - // guarantee f.Data() is consumed before the arrival of next frame. - // Can this copy be eliminated? - if len(f.Data()) > 0 { - pool := t.bufferPool - if pool == nil { - // Note that this is only supposed to be nil in tests. Otherwise, stream is - // always initialized with a BufferPool. - pool = mem.DefaultBufferPool() - } - s.write(recvMsg{buffer: mem.Copy(f.Data(), pool)}) + if dataLen > 0 { + f.data.Ref() + s.write(recvMsg{buffer: f.data}) } } if f.StreamEnded() { @@ -1059,14 +1049,13 @@ func (t *http2Server) writeHeaderLocked(s *ServerStream) error { t.closeStream(s, true, http2.ErrCodeInternal, false) return ErrHeaderListSizeLimitViolation } - for _, sh := range t.stats { + if t.stats != nil { // Note: Headers are compressed with hpack after this call returns. // No WireLength field is set here. - outHeader := &stats.OutHeader{ + t.stats.HandleRPC(s.Context(), &stats.OutHeader{ Header: s.header.Copy(), Compression: s.sendCompress, - } - sh.HandleRPC(s.Context(), outHeader) + }) } return nil } @@ -1134,10 +1123,10 @@ func (t *http2Server) writeStatus(s *ServerStream, st *status.Status) error { // Send a RST_STREAM after the trailers if the client has not already half-closed. rst := s.getState() == streamActive t.finishStream(s, rst, http2.ErrCodeNo, trailingHeader, true) - for _, sh := range t.stats { + if t.stats != nil { // Note: The trailer fields are compressed with hpack after this call returns. // No WireLength field is set here. - sh.HandleRPC(s.Context(), &stats.OutTrailer{ + t.stats.HandleRPC(s.Context(), &stats.OutTrailer{ Trailer: s.trailer.Copy(), }) } @@ -1305,7 +1294,8 @@ func (t *http2Server) Close(err error) { // deleteStream deletes the stream s from transport's active streams. func (t *http2Server) deleteStream(s *ServerStream, eosReceived bool) { t.mu.Lock() - if _, ok := t.activeStreams[s.id]; ok { + _, isActive := t.activeStreams[s.id] + if isActive { delete(t.activeStreams, s.id) if len(t.activeStreams) == 0 { t.idle = time.Now() @@ -1313,7 +1303,7 @@ func (t *http2Server) deleteStream(s *ServerStream, eosReceived bool) { } t.mu.Unlock() - if channelz.IsOn() { + if isActive && channelz.IsOn() { if eosReceived { t.channelz.SocketMetrics.StreamsSucceeded.Add(1) } else { diff --git a/vendor/google.golang.org/grpc/internal/transport/http_util.go b/vendor/google.golang.org/grpc/internal/transport/http_util.go index e3663f87f3..6209eb23cd 100644 --- a/vendor/google.golang.org/grpc/internal/transport/http_util.go +++ b/vendor/google.golang.org/grpc/internal/transport/http_util.go @@ -25,7 +25,6 @@ import ( "fmt" "io" "math" - "net" "net/http" "net/url" "strconv" @@ -37,6 +36,7 @@ import ( "golang.org/x/net/http2" "golang.org/x/net/http2/hpack" "google.golang.org/grpc/codes" + "google.golang.org/grpc/mem" ) const ( @@ -300,11 +300,11 @@ type bufWriter struct { buf []byte offset int batchSize int - conn net.Conn + conn io.Writer err error } -func newBufWriter(conn net.Conn, batchSize int, pool *sync.Pool) *bufWriter { +func newBufWriter(conn io.Writer, batchSize int, pool *sync.Pool) *bufWriter { w := &bufWriter{ batchSize: batchSize, conn: conn, @@ -388,15 +388,35 @@ func toIOError(err error) error { return ioError{error: err} } +type parsedDataFrame struct { + http2.FrameHeader + data mem.Buffer +} + +func (df *parsedDataFrame) StreamEnded() bool { + return df.FrameHeader.Flags.Has(http2.FlagDataEndStream) +} + type framer struct { - writer *bufWriter - fr *http2.Framer + writer *bufWriter + fr *http2.Framer + headerBuf []byte // cached slice for framer headers to reduce heap allocs. + reader io.Reader + dataFrame parsedDataFrame // Cached data frame to avoid heap allocations. + pool mem.BufferPool + errDetail error } var writeBufferPoolMap = make(map[int]*sync.Pool) var writeBufferMutex sync.Mutex -func newFramer(conn net.Conn, writeBufferSize, readBufferSize int, sharedWriteBuffer bool, maxHeaderListSize uint32) *framer { +func newFramer(conn io.ReadWriter, writeBufferSize, readBufferSize int, sharedWriteBuffer bool, maxHeaderListSize uint32, memPool mem.BufferPool) *framer { + if memPool == nil { + // Note that this is only supposed to be nil in tests. Otherwise, stream + // is always initialized with a BufferPool. + memPool = mem.DefaultBufferPool() + } + if writeBufferSize < 0 { writeBufferSize = 0 } @@ -412,6 +432,8 @@ func newFramer(conn net.Conn, writeBufferSize, readBufferSize int, sharedWriteBu f := &framer{ writer: w, fr: http2.NewFramer(w, r), + reader: r, + pool: memPool, } f.fr.SetMaxReadFrameSize(http2MaxFrameLen) // Opt-in to Frame reuse API on framer to reduce garbage. @@ -422,6 +444,146 @@ func newFramer(conn net.Conn, writeBufferSize, readBufferSize int, sharedWriteBu return f } +// writeData writes a DATA frame. +// +// It is the caller's responsibility not to violate the maximum frame size. +func (f *framer) writeData(streamID uint32, endStream bool, data [][]byte) error { + var flags http2.Flags + if endStream { + flags = http2.FlagDataEndStream + } + length := uint32(0) + for _, d := range data { + length += uint32(len(d)) + } + // TODO: Replace the header write with the framer API being added in + // https://github.com/golang/go/issues/66655. + f.headerBuf = append(f.headerBuf[:0], + byte(length>>16), + byte(length>>8), + byte(length), + byte(http2.FrameData), + byte(flags), + byte(streamID>>24), + byte(streamID>>16), + byte(streamID>>8), + byte(streamID)) + if _, err := f.writer.Write(f.headerBuf); err != nil { + return err + } + for _, d := range data { + if _, err := f.writer.Write(d); err != nil { + return err + } + } + return nil +} + +// readFrame reads a single frame. The returned Frame is only valid +// until the next call to readFrame. +func (f *framer) readFrame() (any, error) { + f.errDetail = nil + fh, err := f.fr.ReadFrameHeader() + if err != nil { + f.errDetail = f.fr.ErrorDetail() + return nil, err + } + // Read the data frame directly from the underlying io.Reader to avoid + // copies. + if fh.Type == http2.FrameData { + err = f.readDataFrame(fh) + return &f.dataFrame, err + } + fr, err := f.fr.ReadFrameForHeader(fh) + if err != nil { + f.errDetail = f.fr.ErrorDetail() + return nil, err + } + return fr, err +} + +// errorDetail returns a more detailed error of the last error +// returned by framer.readFrame. For instance, if readFrame +// returns a StreamError with code PROTOCOL_ERROR, errorDetail +// will say exactly what was invalid. errorDetail is not guaranteed +// to return a non-nil value. +// errorDetail is reset after the next call to readFrame. +func (f *framer) errorDetail() error { + return f.errDetail +} + +func (f *framer) readDataFrame(fh http2.FrameHeader) (err error) { + if fh.StreamID == 0 { + // DATA frames MUST be associated with a stream. If a + // DATA frame is received whose stream identifier + // field is 0x0, the recipient MUST respond with a + // connection error (Section 5.4.1) of type + // PROTOCOL_ERROR. + f.errDetail = errors.New("DATA frame with stream ID 0") + return http2.ConnectionError(http2.ErrCodeProtocol) + } + // Converting a *[]byte to a mem.SliceBuffer incurs a heap allocation. This + // conversion is performed by mem.NewBuffer. To avoid the extra allocation + // a []byte is allocated directly if required and cast to a mem.SliceBuffer. + var buf []byte + // poolHandle is the pointer returned by the buffer pool (if it's used.). + var poolHandle *[]byte + useBufferPool := !mem.IsBelowBufferPoolingThreshold(int(fh.Length)) + if useBufferPool { + poolHandle = f.pool.Get(int(fh.Length)) + buf = *poolHandle + defer func() { + if err != nil { + f.pool.Put(poolHandle) + } + }() + } else { + buf = make([]byte, int(fh.Length)) + } + if fh.Flags.Has(http2.FlagDataPadded) { + if fh.Length == 0 { + return io.ErrUnexpectedEOF + } + // This initial 1-byte read can be inefficient for unbuffered readers, + // but it allows the rest of the payload to be read directly to the + // start of the destination slice. This makes it easy to return the + // original slice back to the buffer pool. + if _, err := io.ReadFull(f.reader, buf[:1]); err != nil { + return err + } + padSize := buf[0] + buf = buf[:len(buf)-1] + if int(padSize) > len(buf) { + // If the length of the padding is greater than the + // length of the frame payload, the recipient MUST + // treat this as a connection error. + // Filed: https://github.com/http2/http2-spec/issues/610 + f.errDetail = errors.New("pad size larger than data payload") + return http2.ConnectionError(http2.ErrCodeProtocol) + } + if _, err := io.ReadFull(f.reader, buf); err != nil { + return err + } + buf = buf[:len(buf)-int(padSize)] + } else if _, err := io.ReadFull(f.reader, buf); err != nil { + return err + } + + f.dataFrame.FrameHeader = fh + if useBufferPool { + // Update the handle to point to the (potentially re-sliced) buf. + *poolHandle = buf + f.dataFrame.data = mem.NewBuffer(poolHandle, f.pool) + } else { + f.dataFrame.data = mem.SliceBuffer(buf) + } + return nil +} + +func (df *parsedDataFrame) Header() http2.FrameHeader { + return df.FrameHeader +} + func getWriteBufferPool(size int) *sync.Pool { writeBufferMutex.Lock() defer writeBufferMutex.Unlock() diff --git a/vendor/google.golang.org/grpc/internal/transport/server_stream.go b/vendor/google.golang.org/grpc/internal/transport/server_stream.go index cf8da0b52d..ed6a13b750 100644 --- a/vendor/google.golang.org/grpc/internal/transport/server_stream.go +++ b/vendor/google.golang.org/grpc/internal/transport/server_stream.go @@ -32,7 +32,7 @@ import ( // ServerStream implements streaming functionality for a gRPC server. type ServerStream struct { - *Stream // Embed for common stream functionality. + Stream // Embed for common stream functionality. st internalServerTransport ctxDone <-chan struct{} // closed at the end of stream. Cache of ctx.Done() (for performance) @@ -43,12 +43,13 @@ type ServerStream struct { // Holds compressor names passed in grpc-accept-encoding metadata from the // client. clientAdvertisedCompressors string - headerWireLength int // hdrMu protects outgoing header and trailer metadata. hdrMu sync.Mutex header metadata.MD // the outgoing header metadata. Updated by WriteHeader. headerSent atomic.Bool // atomically set when the headers are sent out. + + headerWireLength int } // Read reads an n byte message from the input stream. @@ -178,3 +179,11 @@ func (s *ServerStream) SetTrailer(md metadata.MD) error { s.hdrMu.Unlock() return nil } + +func (s *ServerStream) requestRead(n int) { + s.st.adjustWindow(s, uint32(n)) +} + +func (s *ServerStream) updateWindow(n int) { + s.st.updateWindow(s, uint32(n)) +} diff --git a/vendor/google.golang.org/grpc/internal/transport/transport.go b/vendor/google.golang.org/grpc/internal/transport/transport.go index 7dd53e80a7..5ff83a7d7d 100644 --- a/vendor/google.golang.org/grpc/internal/transport/transport.go +++ b/vendor/google.golang.org/grpc/internal/transport/transport.go @@ -68,11 +68,11 @@ type recvBuffer struct { err error } -func newRecvBuffer() *recvBuffer { - b := &recvBuffer{ - c: make(chan recvMsg, 1), - } - return b +// init allows a recvBuffer to be initialized in-place, which is useful +// for resetting a buffer or for avoiding a heap allocation when the buffer +// is embedded in another struct. +func (b *recvBuffer) init() { + b.c = make(chan recvMsg, 1) } func (b *recvBuffer) put(r recvMsg) { @@ -123,12 +123,13 @@ func (b *recvBuffer) get() <-chan recvMsg { // recvBufferReader implements io.Reader interface to read the data from // recvBuffer. type recvBufferReader struct { - closeStream func(error) // Closes the client transport stream with the given error and nil trailer metadata. - ctx context.Context - ctxDone <-chan struct{} // cache of ctx.Done() (for performance). - recv *recvBuffer - last mem.Buffer // Stores the remaining data in the previous calls. - err error + _ noCopy + clientStream *ClientStream // The client transport stream is closed with a status representing ctx.Err() and nil trailer metadata. + ctx context.Context + ctxDone <-chan struct{} // cache of ctx.Done() (for performance). + recv *recvBuffer + last mem.Buffer // Stores the remaining data in the previous calls. + err error } func (r *recvBufferReader) ReadMessageHeader(header []byte) (n int, err error) { @@ -139,7 +140,7 @@ func (r *recvBufferReader) ReadMessageHeader(header []byte) (n int, err error) { n, r.last = mem.ReadUnsafe(header, r.last) return n, nil } - if r.closeStream != nil { + if r.clientStream != nil { n, r.err = r.readMessageHeaderClient(header) } else { n, r.err = r.readMessageHeader(header) @@ -164,7 +165,7 @@ func (r *recvBufferReader) Read(n int) (buf mem.Buffer, err error) { } return buf, nil } - if r.closeStream != nil { + if r.clientStream != nil { buf, r.err = r.readClient(n) } else { buf, r.err = r.read(n) @@ -209,7 +210,7 @@ func (r *recvBufferReader) readMessageHeaderClient(header []byte) (n int, err er // TODO: delaying ctx error seems like a unnecessary side effect. What // we really want is to mark the stream as done, and return ctx error // faster. - r.closeStream(ContextErr(r.ctx.Err())) + r.clientStream.Close(ContextErr(r.ctx.Err())) m := <-r.recv.get() return r.readMessageHeaderAdditional(m, header) case m := <-r.recv.get(): @@ -236,7 +237,7 @@ func (r *recvBufferReader) readClient(n int) (buf mem.Buffer, err error) { // TODO: delaying ctx error seems like a unnecessary side effect. What // we really want is to mark the stream as done, and return ctx error // faster. - r.closeStream(ContextErr(r.ctx.Err())) + r.clientStream.Close(ContextErr(r.ctx.Err())) m := <-r.recv.get() return r.readAdditional(m, n) case m := <-r.recv.get(): @@ -285,27 +286,32 @@ const ( // Stream represents an RPC in the transport layer. type Stream struct { - id uint32 ctx context.Context // the associated context of the stream method string // the associated RPC method of the stream recvCompress string sendCompress string - buf *recvBuffer - trReader *transportReader - fc *inFlow - wq *writeQuota - - // Callback to state application's intentions to read data. This - // is used to adjust flow control, if needed. - requestRead func(int) - state streamState + readRequester readRequester // contentSubtype is the content-subtype for requests. // this must be lowercase or the behavior is undefined. contentSubtype string trailer metadata.MD // the key-value map of trailer metadata. + + // Non-pointer fields are at the end to optimize GC performance. + state streamState + id uint32 + buf recvBuffer + trReader transportReader + fc inFlow + wq writeQuota +} + +// readRequester is used to state application's intentions to read data. This +// is used to adjust flow control, if needed. +type readRequester interface { + requestRead(int) } func (s *Stream) swapState(st streamState) streamState { @@ -355,7 +361,7 @@ func (s *Stream) ReadMessageHeader(header []byte) (err error) { if er := s.trReader.er; er != nil { return er } - s.requestRead(len(header)) + s.readRequester.requestRead(len(header)) for len(header) != 0 { n, err := s.trReader.ReadMessageHeader(header) header = header[n:] @@ -378,7 +384,7 @@ func (s *Stream) read(n int) (data mem.BufferSlice, err error) { if er := s.trReader.er; er != nil { return nil, er } - s.requestRead(n) + s.readRequester.requestRead(n) for n != 0 { buf, err := s.trReader.Read(n) var bufLen int @@ -401,16 +407,34 @@ func (s *Stream) read(n int) (data mem.BufferSlice, err error) { return data, nil } +// noCopy may be embedded into structs which must not be copied +// after the first use. +// +// See https://golang.org/issues/8005#issuecomment-190753527 +// for details. +type noCopy struct { +} + +func (*noCopy) Lock() {} +func (*noCopy) Unlock() {} + // transportReader reads all the data available for this Stream from the transport and // passes them into the decoder, which converts them into a gRPC message stream. // The error is io.EOF when the stream is done or another non-nil error if // the stream broke. type transportReader struct { - reader *recvBufferReader + _ noCopy // The handler to control the window update procedure for both this // particular stream and the associated transport. - windowHandler func(int) + windowHandler windowHandler er error + reader recvBufferReader +} + +// The handler to control the window update procedure for both this +// particular stream and the associated transport. +type windowHandler interface { + updateWindow(int) } func (t *transportReader) ReadMessageHeader(header []byte) (int, error) { @@ -419,7 +443,7 @@ func (t *transportReader) ReadMessageHeader(header []byte) (int, error) { t.er = err return 0, err } - t.windowHandler(n) + t.windowHandler.updateWindow(n) return n, nil } @@ -429,7 +453,7 @@ func (t *transportReader) Read(n int) (mem.Buffer, error) { t.er = err return buf, err } - t.windowHandler(buf.Len()) + t.windowHandler.updateWindow(buf.Len()) return buf, nil } @@ -454,7 +478,7 @@ type ServerConfig struct { ConnectionTimeout time.Duration Credentials credentials.TransportCredentials InTapHandle tap.ServerInHandle - StatsHandlers []stats.Handler + StatsHandler stats.Handler KeepaliveParams keepalive.ServerParameters KeepalivePolicy keepalive.EnforcementPolicy InitialWindowSize int32 @@ -615,6 +639,8 @@ type internalServerTransport interface { write(s *ServerStream, hdr []byte, data mem.BufferSlice, opts *WriteOptions) error writeStatus(s *ServerStream, st *status.Status) error incrMsgRecv() + adjustWindow(s *ServerStream, n uint32) + updateWindow(s *ServerStream, n uint32) } // connectionErrorf creates an ConnectionError with the specified error description. diff --git a/vendor/google.golang.org/grpc/mem/buffer_pool.go b/vendor/google.golang.org/grpc/mem/buffer_pool.go index c37c58c023..f211e72745 100644 --- a/vendor/google.golang.org/grpc/mem/buffer_pool.go +++ b/vendor/google.golang.org/grpc/mem/buffer_pool.go @@ -32,6 +32,9 @@ type BufferPool interface { Get(length int) *[]byte // Put returns a buffer to the pool. + // + // The provided pointer must hold a prefix of the buffer obtained via + // BufferPool.Get to ensure the buffer's entire capacity can be re-used. Put(*[]byte) } @@ -118,7 +121,11 @@ type sizedBufferPool struct { } func (p *sizedBufferPool) Get(size int) *[]byte { - buf := p.pool.Get().(*[]byte) + buf, ok := p.pool.Get().(*[]byte) + if !ok { + buf := make([]byte, size, p.defaultSize) + return &buf + } b := *buf clear(b[:cap(b)]) *buf = b[:size] @@ -137,12 +144,6 @@ func (p *sizedBufferPool) Put(buf *[]byte) { func newSizedBufferPool(size int) *sizedBufferPool { return &sizedBufferPool{ - pool: sync.Pool{ - New: func() any { - buf := make([]byte, size) - return &buf - }, - }, defaultSize: size, } } @@ -160,6 +161,7 @@ type simpleBufferPool struct { func (p *simpleBufferPool) Get(size int) *[]byte { bs, ok := p.pool.Get().(*[]byte) if ok && cap(*bs) >= size { + clear((*bs)[:cap(*bs)]) *bs = (*bs)[:size] return bs } diff --git a/vendor/google.golang.org/grpc/mem/buffer_slice.go b/vendor/google.golang.org/grpc/mem/buffer_slice.go index af510d20c5..084fb19c6d 100644 --- a/vendor/google.golang.org/grpc/mem/buffer_slice.go +++ b/vendor/google.golang.org/grpc/mem/buffer_slice.go @@ -19,6 +19,7 @@ package mem import ( + "fmt" "io" ) @@ -117,43 +118,36 @@ func (s BufferSlice) MaterializeToBuffer(pool BufferPool) Buffer { // Reader returns a new Reader for the input slice after taking references to // each underlying buffer. -func (s BufferSlice) Reader() Reader { +func (s BufferSlice) Reader() *Reader { s.Ref() - return &sliceReader{ + return &Reader{ data: s, len: s.Len(), } } // Reader exposes a BufferSlice's data as an io.Reader, allowing it to interface -// with other parts systems. It also provides an additional convenience method -// Remaining(), which returns the number of unread bytes remaining in the slice. +// with other systems. +// // Buffers will be freed as they are read. -type Reader interface { - io.Reader - io.ByteReader - // Close frees the underlying BufferSlice and never returns an error. Subsequent - // calls to Read will return (0, io.EOF). - Close() error - // Remaining returns the number of unread bytes remaining in the slice. - Remaining() int - // Reset frees the currently held buffer slice and starts reading from the - // provided slice. This allows reusing the reader object. - Reset(s BufferSlice) -} - -type sliceReader struct { +// +// A Reader can be constructed from a BufferSlice; alternatively the zero value +// of a Reader may be used after calling Reset on it. +type Reader struct { data BufferSlice len int // The index into data[0].ReadOnlyData(). bufferIdx int } -func (r *sliceReader) Remaining() int { +// Remaining returns the number of unread bytes remaining in the slice. +func (r *Reader) Remaining() int { return r.len } -func (r *sliceReader) Reset(s BufferSlice) { +// Reset frees the currently held buffer slice and starts reading from the +// provided slice. This allows reusing the reader object. +func (r *Reader) Reset(s BufferSlice) { r.data.Free() s.Ref() r.data = s @@ -161,14 +155,16 @@ func (r *sliceReader) Reset(s BufferSlice) { r.bufferIdx = 0 } -func (r *sliceReader) Close() error { +// Close frees the underlying BufferSlice and never returns an error. Subsequent +// calls to Read will return (0, io.EOF). +func (r *Reader) Close() error { r.data.Free() r.data = nil r.len = 0 return nil } -func (r *sliceReader) freeFirstBufferIfEmpty() bool { +func (r *Reader) freeFirstBufferIfEmpty() bool { if len(r.data) == 0 || r.bufferIdx != len(r.data[0].ReadOnlyData()) { return false } @@ -179,7 +175,7 @@ func (r *sliceReader) freeFirstBufferIfEmpty() bool { return true } -func (r *sliceReader) Read(buf []byte) (n int, _ error) { +func (r *Reader) Read(buf []byte) (n int, _ error) { if r.len == 0 { return 0, io.EOF } @@ -202,7 +198,8 @@ func (r *sliceReader) Read(buf []byte) (n int, _ error) { return n, nil } -func (r *sliceReader) ReadByte() (byte, error) { +// ReadByte reads a single byte. +func (r *Reader) ReadByte() (byte, error) { if r.len == 0 { return 0, io.EOF } @@ -290,3 +287,59 @@ nextBuffer: } } } + +// Discard skips the next n bytes, returning the number of bytes discarded. +// +// It frees buffers as they are fully consumed. +// +// If Discard skips fewer than n bytes, it also returns an error. +func (r *Reader) Discard(n int) (discarded int, err error) { + total := n + for n > 0 && r.len > 0 { + curData := r.data[0].ReadOnlyData() + curSize := min(n, len(curData)-r.bufferIdx) + n -= curSize + r.len -= curSize + r.bufferIdx += curSize + if r.bufferIdx >= len(curData) { + r.data[0].Free() + r.data = r.data[1:] + r.bufferIdx = 0 + } + } + discarded = total - n + if n > 0 { + return discarded, fmt.Errorf("insufficient bytes in reader") + } + return discarded, nil +} + +// Peek returns the next n bytes without advancing the reader. +// +// Peek appends results to the provided res slice and returns the updated slice. +// This pattern allows re-using the storage of res if it has sufficient +// capacity. +// +// The returned subslices are views into the underlying buffers and are only +// valid until the reader is advanced past the corresponding buffer. +// +// If Peek returns fewer than n bytes, it also returns an error. +func (r *Reader) Peek(n int, res [][]byte) ([][]byte, error) { + for i := 0; n > 0 && i < len(r.data); i++ { + curData := r.data[i].ReadOnlyData() + start := 0 + if i == 0 { + start = r.bufferIdx + } + curSize := min(n, len(curData)-start) + if curSize == 0 { + continue + } + res = append(res, curData[start:start+curSize]) + n -= curSize + } + if n > 0 { + return nil, fmt.Errorf("insufficient bytes in reader") + } + return res, nil +} diff --git a/vendor/google.golang.org/grpc/preloader.go b/vendor/google.golang.org/grpc/preloader.go index ee0ff969af..1e783febf9 100644 --- a/vendor/google.golang.org/grpc/preloader.go +++ b/vendor/google.golang.org/grpc/preloader.go @@ -47,9 +47,6 @@ func (p *PreparedMsg) Encode(s Stream, msg any) error { } // check if the context has the relevant information to prepareMsg - if rpcInfo.preloaderInfo == nil { - return status.Errorf(codes.Internal, "grpc: rpcInfo.preloaderInfo is nil") - } if rpcInfo.preloaderInfo.codec == nil { return status.Errorf(codes.Internal, "grpc: rpcInfo.preloaderInfo.codec is nil") } diff --git a/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1/reflection.pb.go b/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1/reflection.pb.go index 92f5292211..92fdc3afab 100644 --- a/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1/reflection.pb.go +++ b/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1/reflection.pb.go @@ -21,7 +21,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.6 +// protoc-gen-go v1.36.10 // protoc v5.27.1 // source: grpc/reflection/v1/reflection.proto diff --git a/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.pb.go b/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.pb.go index 5253e862f0..c803cf3ba1 100644 --- a/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.pb.go +++ b/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.pb.go @@ -18,7 +18,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.6 +// protoc-gen-go v1.36.10 // protoc v5.27.1 // grpc/reflection/v1alpha/reflection.proto is a deprecated file. diff --git a/vendor/google.golang.org/grpc/rpc_util.go b/vendor/google.golang.org/grpc/rpc_util.go index 47ea09f5c9..6b04c9e873 100644 --- a/vendor/google.golang.org/grpc/rpc_util.go +++ b/vendor/google.golang.org/grpc/rpc_util.go @@ -657,8 +657,20 @@ type streamReader interface { Read(n int) (mem.BufferSlice, error) } +// noCopy may be embedded into structs which must not be copied +// after the first use. +// +// See https://golang.org/issues/8005#issuecomment-190753527 +// for details. +type noCopy struct { +} + +func (*noCopy) Lock() {} +func (*noCopy) Unlock() {} + // parser reads complete gRPC messages from the underlying reader. type parser struct { + _ noCopy // r is the underlying reader. // See the comment on recvMsg for the permissible // error types. @@ -949,7 +961,7 @@ func recv(p *parser, c baseCodec, s recvCompressor, dc Decompressor, m any, maxR // Information about RPC type rpcInfo struct { failfast bool - preloaderInfo *compressorInfo + preloaderInfo compressorInfo } // Information about Preloader @@ -968,7 +980,7 @@ type rpcInfoContextKey struct{} func newContextWithRPCInfo(ctx context.Context, failfast bool, codec baseCodec, cp Compressor, comp encoding.Compressor) context.Context { return context.WithValue(ctx, rpcInfoContextKey{}, &rpcInfo{ failfast: failfast, - preloaderInfo: &compressorInfo{ + preloaderInfo: compressorInfo{ codec: codec, cp: cp, comp: comp, diff --git a/vendor/google.golang.org/grpc/server.go b/vendor/google.golang.org/grpc/server.go index 1da2a542ac..ddd3773411 100644 --- a/vendor/google.golang.org/grpc/server.go +++ b/vendor/google.golang.org/grpc/server.go @@ -124,7 +124,8 @@ type serviceInfo struct { // Server is a gRPC server to serve RPC requests. type Server struct { - opts serverOptions + opts serverOptions + statsHandler stats.Handler mu sync.Mutex // guards following lis map[net.Listener]bool @@ -692,13 +693,14 @@ func NewServer(opt ...ServerOption) *Server { o.apply(&opts) } s := &Server{ - lis: make(map[net.Listener]bool), - opts: opts, - conns: make(map[string]map[transport.ServerTransport]bool), - services: make(map[string]*serviceInfo), - quit: grpcsync.NewEvent(), - done: grpcsync.NewEvent(), - channelz: channelz.RegisterServer(""), + lis: make(map[net.Listener]bool), + opts: opts, + statsHandler: istats.NewCombinedHandler(opts.statsHandlers...), + conns: make(map[string]map[transport.ServerTransport]bool), + services: make(map[string]*serviceInfo), + quit: grpcsync.NewEvent(), + done: grpcsync.NewEvent(), + channelz: channelz.RegisterServer(""), } chainUnaryServerInterceptors(s) chainStreamServerInterceptors(s) @@ -999,7 +1001,7 @@ func (s *Server) newHTTP2Transport(c net.Conn) transport.ServerTransport { ConnectionTimeout: s.opts.connectionTimeout, Credentials: s.opts.creds, InTapHandle: s.opts.inTapHandle, - StatsHandlers: s.opts.statsHandlers, + StatsHandler: s.statsHandler, KeepaliveParams: s.opts.keepaliveParams, KeepalivePolicy: s.opts.keepalivePolicy, InitialWindowSize: s.opts.initialWindowSize, @@ -1036,18 +1038,18 @@ func (s *Server) newHTTP2Transport(c net.Conn) transport.ServerTransport { func (s *Server) serveStreams(ctx context.Context, st transport.ServerTransport, rawConn net.Conn) { ctx = transport.SetConnection(ctx, rawConn) ctx = peer.NewContext(ctx, st.Peer()) - for _, sh := range s.opts.statsHandlers { - ctx = sh.TagConn(ctx, &stats.ConnTagInfo{ + if s.statsHandler != nil { + ctx = s.statsHandler.TagConn(ctx, &stats.ConnTagInfo{ RemoteAddr: st.Peer().Addr, LocalAddr: st.Peer().LocalAddr, }) - sh.HandleConn(ctx, &stats.ConnBegin{}) + s.statsHandler.HandleConn(ctx, &stats.ConnBegin{}) } defer func() { st.Close(errors.New("finished serving streams for the server transport")) - for _, sh := range s.opts.statsHandlers { - sh.HandleConn(ctx, &stats.ConnEnd{}) + if s.statsHandler != nil { + s.statsHandler.HandleConn(ctx, &stats.ConnEnd{}) } }() @@ -1104,7 +1106,7 @@ var _ http.Handler = (*Server)(nil) // Notice: This API is EXPERIMENTAL and may be changed or removed in a // later release. func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { - st, err := transport.NewServerHandlerTransport(w, r, s.opts.statsHandlers, s.opts.bufferPool) + st, err := transport.NewServerHandlerTransport(w, r, s.statsHandler, s.opts.bufferPool) if err != nil { // Errors returned from transport.NewServerHandlerTransport have // already been written to w. @@ -1198,12 +1200,8 @@ func (s *Server) sendResponse(ctx context.Context, stream *transport.ServerStrea return status.Errorf(codes.ResourceExhausted, "grpc: trying to send message larger than max (%d vs. %d)", payloadLen, s.opts.maxSendMessageSize) } err = stream.Write(hdr, payload, opts) - if err == nil { - if len(s.opts.statsHandlers) != 0 { - for _, sh := range s.opts.statsHandlers { - sh.HandleRPC(ctx, outPayload(false, msg, dataLen, payloadLen, time.Now())) - } - } + if err == nil && s.statsHandler != nil { + s.statsHandler.HandleRPC(ctx, outPayload(false, msg, dataLen, payloadLen, time.Now())) } return err } @@ -1245,16 +1243,15 @@ func getChainUnaryHandler(interceptors []UnaryServerInterceptor, curr int, info } func (s *Server) processUnaryRPC(ctx context.Context, stream *transport.ServerStream, info *serviceInfo, md *MethodDesc, trInfo *traceInfo) (err error) { - shs := s.opts.statsHandlers - if len(shs) != 0 || trInfo != nil || channelz.IsOn() { + sh := s.statsHandler + if sh != nil || trInfo != nil || channelz.IsOn() { if channelz.IsOn() { s.incrCallsStarted() } var statsBegin *stats.Begin - for _, sh := range shs { - beginTime := time.Now() + if sh != nil { statsBegin = &stats.Begin{ - BeginTime: beginTime, + BeginTime: time.Now(), IsClientStream: false, IsServerStream: false, } @@ -1282,7 +1279,7 @@ func (s *Server) processUnaryRPC(ctx context.Context, stream *transport.ServerSt trInfo.tr.Finish() } - for _, sh := range shs { + if sh != nil { end := &stats.End{ BeginTime: statsBegin.BeginTime, EndTime: time.Now(), @@ -1379,7 +1376,7 @@ func (s *Server) processUnaryRPC(ctx context.Context, stream *transport.ServerSt } var payInfo *payloadInfo - if len(shs) != 0 || len(binlogs) != 0 { + if sh != nil || len(binlogs) != 0 { payInfo = &payloadInfo{} defer payInfo.free() } @@ -1405,7 +1402,7 @@ func (s *Server) processUnaryRPC(ctx context.Context, stream *transport.ServerSt return status.Errorf(codes.Internal, "grpc: error unmarshalling request: %v", err) } - for _, sh := range shs { + if sh != nil { sh.HandleRPC(ctx, &stats.InPayload{ RecvTime: time.Now(), Payload: v, @@ -1579,33 +1576,30 @@ func (s *Server) processStreamingRPC(ctx context.Context, stream *transport.Serv if channelz.IsOn() { s.incrCallsStarted() } - shs := s.opts.statsHandlers + sh := s.statsHandler var statsBegin *stats.Begin - if len(shs) != 0 { - beginTime := time.Now() + if sh != nil { statsBegin = &stats.Begin{ - BeginTime: beginTime, + BeginTime: time.Now(), IsClientStream: sd.ClientStreams, IsServerStream: sd.ServerStreams, } - for _, sh := range shs { - sh.HandleRPC(ctx, statsBegin) - } + sh.HandleRPC(ctx, statsBegin) } ctx = NewContextWithServerTransportStream(ctx, stream) ss := &serverStream{ ctx: ctx, s: stream, - p: &parser{r: stream, bufferPool: s.opts.bufferPool}, + p: parser{r: stream, bufferPool: s.opts.bufferPool}, codec: s.getCodec(stream.ContentSubtype()), desc: sd, maxReceiveMessageSize: s.opts.maxReceiveMessageSize, maxSendMessageSize: s.opts.maxSendMessageSize, trInfo: trInfo, - statsHandler: shs, + statsHandler: sh, } - if len(shs) != 0 || trInfo != nil || channelz.IsOn() { + if sh != nil || trInfo != nil || channelz.IsOn() { // See comment in processUnaryRPC on defers. defer func() { if trInfo != nil { @@ -1619,7 +1613,7 @@ func (s *Server) processStreamingRPC(ctx context.Context, stream *transport.Serv ss.mu.Unlock() } - if len(shs) != 0 { + if sh != nil { end := &stats.End{ BeginTime: statsBegin.BeginTime, EndTime: time.Now(), @@ -1627,9 +1621,7 @@ func (s *Server) processStreamingRPC(ctx context.Context, stream *transport.Serv if err != nil && err != io.EOF { end.Error = toRPCErr(err) } - for _, sh := range shs { - sh.HandleRPC(ctx, end) - } + sh.HandleRPC(ctx, end) } if channelz.IsOn() { @@ -1818,19 +1810,17 @@ func (s *Server) handleStream(t transport.ServerTransport, stream *transport.Ser method := sm[pos+1:] // FromIncomingContext is expensive: skip if there are no statsHandlers - if len(s.opts.statsHandlers) > 0 { + if s.statsHandler != nil { md, _ := metadata.FromIncomingContext(ctx) - for _, sh := range s.opts.statsHandlers { - ctx = sh.TagRPC(ctx, &stats.RPCTagInfo{FullMethodName: stream.Method()}) - sh.HandleRPC(ctx, &stats.InHeader{ - FullMethod: stream.Method(), - RemoteAddr: t.Peer().Addr, - LocalAddr: t.Peer().LocalAddr, - Compression: stream.RecvCompress(), - WireLength: stream.HeaderWireLength(), - Header: md, - }) - } + ctx = s.statsHandler.TagRPC(ctx, &stats.RPCTagInfo{FullMethodName: stream.Method()}) + s.statsHandler.HandleRPC(ctx, &stats.InHeader{ + FullMethod: stream.Method(), + RemoteAddr: t.Peer().Addr, + LocalAddr: t.Peer().LocalAddr, + Compression: stream.RecvCompress(), + WireLength: stream.HeaderWireLength(), + Header: md, + }) } // To have calls in stream callouts work. Will delete once all stats handler // calls come from the gRPC layer. diff --git a/vendor/google.golang.org/grpc/stream.go b/vendor/google.golang.org/grpc/stream.go index 0a0af8961f..ca87ff9776 100644 --- a/vendor/google.golang.org/grpc/stream.go +++ b/vendor/google.golang.org/grpc/stream.go @@ -177,6 +177,8 @@ func NewClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, meth return cc.NewStream(ctx, desc, method, opts...) } +var emptyMethodConfig = serviceconfig.MethodConfig{} + func newClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (_ ClientStream, err error) { // Start tracking the RPC for idleness purposes. This is where a stream is // created for both streaming and unary RPCs, and hence is a good place to @@ -217,7 +219,7 @@ func newClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, meth return nil, err } - var mc serviceconfig.MethodConfig + mc := &emptyMethodConfig var onCommit func() newStream := func(ctx context.Context, done func()) (iresolver.ClientStream, error) { return newClientStreamWithParams(ctx, desc, cc, method, mc, onCommit, done, nameResolutionDelayed, opts...) @@ -240,7 +242,7 @@ func newClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, meth if rpcConfig.Context != nil { ctx = rpcConfig.Context } - mc = rpcConfig.MethodConfig + mc = &rpcConfig.MethodConfig onCommit = rpcConfig.OnCommitted if rpcConfig.Interceptor != nil { rpcInfo.Context = nil @@ -258,7 +260,7 @@ func newClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, meth return newStream(ctx, func() {}) } -func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, mc serviceconfig.MethodConfig, onCommit, doneFunc func(), nameResolutionDelayed bool, opts ...CallOption) (_ iresolver.ClientStream, err error) { +func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, mc *serviceconfig.MethodConfig, onCommit, doneFunc func(), nameResolutionDelayed bool, opts ...CallOption) (_ iresolver.ClientStream, err error) { callInfo := defaultCallInfo() if mc.WaitForReady != nil { callInfo.failFast = !*mc.WaitForReady @@ -325,7 +327,7 @@ func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *Client cs := &clientStream{ callHdr: callHdr, ctx: ctx, - methodConfig: &mc, + methodConfig: mc, opts: opts, callInfo: callInfo, cc: cc, @@ -418,19 +420,21 @@ func (cs *clientStream) newAttemptLocked(isTransparent bool) (*csAttempt, error) ctx := newContextWithRPCInfo(cs.ctx, cs.callInfo.failFast, cs.callInfo.codec, cs.compressorV0, cs.compressorV1) method := cs.callHdr.Method var beginTime time.Time - shs := cs.cc.dopts.copts.StatsHandlers - for _, sh := range shs { - ctx = sh.TagRPC(ctx, &stats.RPCTagInfo{FullMethodName: method, FailFast: cs.callInfo.failFast, NameResolutionDelay: cs.nameResolutionDelay}) + sh := cs.cc.statsHandler + if sh != nil { beginTime = time.Now() - begin := &stats.Begin{ + ctx = sh.TagRPC(ctx, &stats.RPCTagInfo{ + FullMethodName: method, FailFast: cs.callInfo.failFast, + NameResolutionDelay: cs.nameResolutionDelay, + }) + sh.HandleRPC(ctx, &stats.Begin{ Client: true, BeginTime: beginTime, FailFast: cs.callInfo.failFast, IsClientStream: cs.desc.ClientStreams, IsServerStream: cs.desc.ServerStreams, IsTransparentRetryAttempt: isTransparent, - } - sh.HandleRPC(ctx, begin) + }) } var trInfo *traceInfo @@ -461,7 +465,7 @@ func (cs *clientStream) newAttemptLocked(isTransparent bool) (*csAttempt, error) beginTime: beginTime, cs: cs, decompressorV0: cs.cc.dopts.dc, - statsHandlers: shs, + statsHandler: sh, trInfo: trInfo, }, nil } @@ -482,10 +486,8 @@ func (a *csAttempt) getTransport() error { if a.trInfo != nil { a.trInfo.firstLine.SetRemoteAddr(a.transport.RemoteAddr()) } - if pick.blocked { - for _, sh := range a.statsHandlers { - sh.HandleRPC(a.ctx, &stats.DelayedPickComplete{}) - } + if pick.blocked && a.statsHandler != nil { + a.statsHandler.HandleRPC(a.ctx, &stats.DelayedPickComplete{}) } return nil } @@ -529,7 +531,7 @@ func (a *csAttempt) newStream() error { } a.transportStream = s a.ctx = s.Context() - a.parser = &parser{r: s, bufferPool: a.cs.cc.dopts.copts.BufferPool} + a.parser = parser{r: s, bufferPool: a.cs.cc.dopts.copts.BufferPool} return nil } @@ -601,7 +603,7 @@ type csAttempt struct { cs *clientStream transport transport.ClientTransport transportStream *transport.ClientStream - parser *parser + parser parser pickResult balancer.PickResult finished bool @@ -615,8 +617,8 @@ type csAttempt struct { // and cleared when the finish method is called. trInfo *traceInfo - statsHandlers []stats.Handler - beginTime time.Time + statsHandler stats.Handler + beginTime time.Time // set for newStream errors that may be transparently retried allowTransparentRetry bool @@ -1110,17 +1112,15 @@ func (a *csAttempt) sendMsg(m any, hdr []byte, payld mem.BufferSlice, dataLength } return io.EOF } - if len(a.statsHandlers) != 0 { - for _, sh := range a.statsHandlers { - sh.HandleRPC(a.ctx, outPayload(true, m, dataLength, payloadLength, time.Now())) - } + if a.statsHandler != nil { + a.statsHandler.HandleRPC(a.ctx, outPayload(true, m, dataLength, payloadLength, time.Now())) } return nil } func (a *csAttempt) recvMsg(m any, payInfo *payloadInfo) (err error) { cs := a.cs - if len(a.statsHandlers) != 0 && payInfo == nil { + if a.statsHandler != nil && payInfo == nil { payInfo = &payloadInfo{} defer payInfo.free() } @@ -1141,7 +1141,7 @@ func (a *csAttempt) recvMsg(m any, payInfo *payloadInfo) (err error) { // Only initialize this state once per stream. a.decompressorSet = true } - if err := recv(a.parser, cs.codec, a.transportStream, a.decompressorV0, m, *cs.callInfo.maxReceiveMessageSize, payInfo, a.decompressorV1, false); err != nil { + if err := recv(&a.parser, cs.codec, a.transportStream, a.decompressorV0, m, *cs.callInfo.maxReceiveMessageSize, payInfo, a.decompressorV1, false); err != nil { if err == io.EOF { if statusErr := a.transportStream.Status().Err(); statusErr != nil { return statusErr @@ -1163,8 +1163,8 @@ func (a *csAttempt) recvMsg(m any, payInfo *payloadInfo) (err error) { } a.mu.Unlock() } - for _, sh := range a.statsHandlers { - sh.HandleRPC(a.ctx, &stats.InPayload{ + if a.statsHandler != nil { + a.statsHandler.HandleRPC(a.ctx, &stats.InPayload{ Client: true, RecvTime: time.Now(), Payload: m, @@ -1179,7 +1179,7 @@ func (a *csAttempt) recvMsg(m any, payInfo *payloadInfo) (err error) { } // Special handling for non-server-stream rpcs. // This recv expects EOF or errors, so we don't collect inPayload. - if err := recv(a.parser, cs.codec, a.transportStream, a.decompressorV0, m, *cs.callInfo.maxReceiveMessageSize, nil, a.decompressorV1, false); err == io.EOF { + if err := recv(&a.parser, cs.codec, a.transportStream, a.decompressorV0, m, *cs.callInfo.maxReceiveMessageSize, nil, a.decompressorV1, false); err == io.EOF { return a.transportStream.Status().Err() // non-server streaming Recv returns nil on success } else if err != nil { return toRPCErr(err) @@ -1217,15 +1217,14 @@ func (a *csAttempt) finish(err error) { ServerLoad: balancerload.Parse(tr), }) } - for _, sh := range a.statsHandlers { - end := &stats.End{ + if a.statsHandler != nil { + a.statsHandler.HandleRPC(a.ctx, &stats.End{ Client: true, BeginTime: a.beginTime, EndTime: time.Now(), Trailer: tr, Error: err, - } - sh.HandleRPC(a.ctx, end) + }) } if a.trInfo != nil && a.trInfo.tr != nil { if err == nil { @@ -1331,7 +1330,7 @@ func newNonRetryClientStream(ctx context.Context, desc *StreamDesc, method strin return nil, err } as.transportStream = s - as.parser = &parser{r: s, bufferPool: ac.dopts.copts.BufferPool} + as.parser = parser{r: s, bufferPool: ac.dopts.copts.BufferPool} ac.incrCallsStarted() if desc != unaryStreamDesc { // Listen on stream context to cleanup when the stream context is @@ -1374,7 +1373,7 @@ type addrConnStream struct { decompressorSet bool decompressorV0 Decompressor decompressorV1 encoding.Compressor - parser *parser + parser parser // mu guards finished and is held for the entire finish method. mu sync.Mutex @@ -1487,7 +1486,7 @@ func (as *addrConnStream) RecvMsg(m any) (err error) { // Only initialize this state once per stream. as.decompressorSet = true } - if err := recv(as.parser, as.codec, as.transportStream, as.decompressorV0, m, *as.callInfo.maxReceiveMessageSize, nil, as.decompressorV1, false); err != nil { + if err := recv(&as.parser, as.codec, as.transportStream, as.decompressorV0, m, *as.callInfo.maxReceiveMessageSize, nil, as.decompressorV1, false); err != nil { if err == io.EOF { if statusErr := as.transportStream.Status().Err(); statusErr != nil { return statusErr @@ -1509,7 +1508,7 @@ func (as *addrConnStream) RecvMsg(m any) (err error) { // Special handling for non-server-stream rpcs. // This recv expects EOF or errors, so we don't collect inPayload. - if err := recv(as.parser, as.codec, as.transportStream, as.decompressorV0, m, *as.callInfo.maxReceiveMessageSize, nil, as.decompressorV1, false); err == io.EOF { + if err := recv(&as.parser, as.codec, as.transportStream, as.decompressorV0, m, *as.callInfo.maxReceiveMessageSize, nil, as.decompressorV1, false); err == io.EOF { return as.transportStream.Status().Err() // non-server streaming Recv returns nil on success } else if err != nil { return toRPCErr(err) @@ -1597,7 +1596,7 @@ type ServerStream interface { type serverStream struct { ctx context.Context s *transport.ServerStream - p *parser + p parser codec baseCodec desc *StreamDesc @@ -1614,7 +1613,7 @@ type serverStream struct { maxSendMessageSize int trInfo *traceInfo - statsHandler []stats.Handler + statsHandler stats.Handler binlogs []binarylog.MethodLogger // serverHeaderBinlogged indicates whether server header has been logged. It @@ -1750,10 +1749,8 @@ func (ss *serverStream) SendMsg(m any) (err error) { binlog.Log(ss.ctx, sm) } } - if len(ss.statsHandler) != 0 { - for _, sh := range ss.statsHandler { - sh.HandleRPC(ss.s.Context(), outPayload(false, m, dataLen, payloadLen, time.Now())) - } + if ss.statsHandler != nil { + ss.statsHandler.HandleRPC(ss.s.Context(), outPayload(false, m, dataLen, payloadLen, time.Now())) } return nil } @@ -1784,11 +1781,11 @@ func (ss *serverStream) RecvMsg(m any) (err error) { } }() var payInfo *payloadInfo - if len(ss.statsHandler) != 0 || len(ss.binlogs) != 0 { + if ss.statsHandler != nil || len(ss.binlogs) != 0 { payInfo = &payloadInfo{} defer payInfo.free() } - if err := recv(ss.p, ss.codec, ss.s, ss.decompressorV0, m, ss.maxReceiveMessageSize, payInfo, ss.decompressorV1, true); err != nil { + if err := recv(&ss.p, ss.codec, ss.s, ss.decompressorV0, m, ss.maxReceiveMessageSize, payInfo, ss.decompressorV1, true); err != nil { if err == io.EOF { if len(ss.binlogs) != 0 { chc := &binarylog.ClientHalfClose{} @@ -1808,16 +1805,14 @@ func (ss *serverStream) RecvMsg(m any) (err error) { return toRPCErr(err) } ss.recvFirstMsg = true - if len(ss.statsHandler) != 0 { - for _, sh := range ss.statsHandler { - sh.HandleRPC(ss.s.Context(), &stats.InPayload{ - RecvTime: time.Now(), - Payload: m, - Length: payInfo.uncompressedBytes.Len(), - WireLength: payInfo.compressedLength + headerLen, - CompressedLength: payInfo.compressedLength, - }) - } + if ss.statsHandler != nil { + ss.statsHandler.HandleRPC(ss.s.Context(), &stats.InPayload{ + RecvTime: time.Now(), + Payload: m, + Length: payInfo.uncompressedBytes.Len(), + WireLength: payInfo.compressedLength + headerLen, + CompressedLength: payInfo.compressedLength, + }) } if len(ss.binlogs) != 0 { cm := &binarylog.ClientMessage{ @@ -1834,7 +1829,7 @@ func (ss *serverStream) RecvMsg(m any) (err error) { } // Special handling for non-client-stream rpcs. // This recv expects EOF or errors, so we don't collect inPayload. - if err := recv(ss.p, ss.codec, ss.s, ss.decompressorV0, m, ss.maxReceiveMessageSize, nil, ss.decompressorV1, true); err == io.EOF { + if err := recv(&ss.p, ss.codec, ss.s, ss.decompressorV0, m, ss.maxReceiveMessageSize, nil, ss.decompressorV1, true); err == io.EOF { return nil } else if err != nil { return err diff --git a/vendor/google.golang.org/grpc/version.go b/vendor/google.golang.org/grpc/version.go index 76f2e0d060..9e6d018fb7 100644 --- a/vendor/google.golang.org/grpc/version.go +++ b/vendor/google.golang.org/grpc/version.go @@ -19,4 +19,4 @@ package grpc // Version is the current grpc version. -const Version = "1.76.0" +const Version = "1.77.0" diff --git a/vendor/k8s.io/apiserver/pkg/admission/plugin/policy/generic/policy_matcher.go b/vendor/k8s.io/apiserver/pkg/admission/plugin/policy/generic/policy_matcher.go index d243b0710b..08ddcbf0a0 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/plugin/policy/generic/policy_matcher.go +++ b/vendor/k8s.io/apiserver/pkg/admission/plugin/policy/generic/policy_matcher.go @@ -17,6 +17,7 @@ limitations under the License. package generic import ( + "context" "fmt" admissionregistrationv1 "k8s.io/api/admissionregistration/v1" @@ -41,8 +42,8 @@ type PolicyMatcher interface { BindingMatches(a admission.Attributes, o admission.ObjectInterfaces, binding BindingAccessor) (bool, error) // GetNamespace retrieves the Namespace resource by the given name. The name may be empty, in which case - // GetNamespace must return nil, nil - GetNamespace(name string) (*corev1.Namespace, error) + // GetNamespace must return nil, NotFound + GetNamespace(ctx context.Context, name string) (*corev1.Namespace, error) } type matcher struct { @@ -82,8 +83,8 @@ func (c *matcher) BindingMatches(a admission.Attributes, o admission.ObjectInter return isMatch, err } -func (c *matcher) GetNamespace(name string) (*corev1.Namespace, error) { - return c.Matcher.GetNamespace(name) +func (c *matcher) GetNamespace(ctx context.Context, name string) (*corev1.Namespace, error) { + return c.Matcher.GetNamespace(ctx, name) } var _ matching.MatchCriteria = &matchCriteria{} diff --git a/vendor/k8s.io/apiserver/pkg/admission/plugin/policy/matching/matching.go b/vendor/k8s.io/apiserver/pkg/admission/plugin/policy/matching/matching.go index eebe769434..30a6cbebe9 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/plugin/policy/matching/matching.go +++ b/vendor/k8s.io/apiserver/pkg/admission/plugin/policy/matching/matching.go @@ -17,6 +17,7 @@ limitations under the License. package matching import ( + "context" "fmt" v1 "k8s.io/api/admissionregistration/v1" @@ -44,8 +45,8 @@ type Matcher struct { objectMatcher *object.Matcher } -func (m *Matcher) GetNamespace(name string) (*corev1.Namespace, error) { - return m.namespaceMatcher.GetNamespace(name) +func (m *Matcher) GetNamespace(ctx context.Context, name string) (*corev1.Namespace, error) { + return m.namespaceMatcher.GetNamespace(ctx, name) } // NewMatcher initialize the matcher with dependencies requires diff --git a/vendor/k8s.io/apiserver/pkg/admission/plugin/policy/mutating/dispatcher.go b/vendor/k8s.io/apiserver/pkg/admission/plugin/policy/mutating/dispatcher.go index 153b268d67..53dbd6486f 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/plugin/policy/mutating/dispatcher.go +++ b/vendor/k8s.io/apiserver/pkg/admission/plugin/policy/mutating/dispatcher.go @@ -122,8 +122,12 @@ func (d *dispatcher) dispatchInvocations( // if it is cluster scoped, namespaceName will be empty // Otherwise, get the Namespace resource. if namespaceName != "" { - namespace, err = d.matcher.GetNamespace(namespaceName) + namespace, err = d.matcher.GetNamespace(ctx, namespaceName) if err != nil { + var statusError *k8serrors.StatusError + if errors.As(err, &statusError) { + return nil, statusError + } return nil, k8serrors.NewNotFound(schema.GroupResource{Group: "", Resource: "namespaces"}, namespaceName) } } diff --git a/vendor/k8s.io/apiserver/pkg/admission/plugin/policy/validating/dispatcher.go b/vendor/k8s.io/apiserver/pkg/admission/plugin/policy/validating/dispatcher.go index 8f3e22f64d..0b5474b756 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/plugin/policy/validating/dispatcher.go +++ b/vendor/k8s.io/apiserver/pkg/admission/plugin/policy/validating/dispatcher.go @@ -189,7 +189,7 @@ func (c *dispatcher) Dispatch(ctx context.Context, a admission.Attributes, o adm // if it is cluster scoped, namespaceName will be empty // Otherwise, get the Namespace resource. if namespaceName != "" { - namespace, err = c.matcher.GetNamespace(namespaceName) + namespace, err = c.matcher.GetNamespace(ctx, namespaceName) if err != nil { return err } diff --git a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/predicates/namespace/matcher.go b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/predicates/namespace/matcher.go index 7817cb1772..d73c69bbab 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/predicates/namespace/matcher.go +++ b/vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/predicates/namespace/matcher.go @@ -44,8 +44,13 @@ type Matcher struct { Client clientset.Interface } -func (m *Matcher) GetNamespace(name string) (*v1.Namespace, error) { - return m.NamespaceLister.Get(name) +func (m *Matcher) GetNamespace(ctx context.Context, name string) (*v1.Namespace, error) { + ns, err := m.NamespaceLister.Get(name) + if apierrors.IsNotFound(err) && len(name) > 0 { + // in case of latency in our caches, make a call direct to storage to verify that it truly exists or not + ns, err = m.Client.CoreV1().Namespaces().Get(ctx, name, metav1.GetOptions{}) + } + return ns, err } // Validate checks if the Matcher has a NamespaceLister and Client. diff --git a/vendor/k8s.io/apiserver/pkg/server/options/api_enablement.go b/vendor/k8s.io/apiserver/pkg/server/options/api_enablement.go index 44a5ddcc5e..81e4899f08 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/api_enablement.go +++ b/vendor/k8s.io/apiserver/pkg/server/options/api_enablement.go @@ -106,10 +106,22 @@ func (s *APIEnablementOptions) ApplyTo(c *server.Config, defaultResourceConfig * c.MergedResourceConfig = mergedResourceConfig - if binVersion, emulatedVersion := c.EffectiveVersion.BinaryVersion(), c.EffectiveVersion.EmulationVersion(); !binVersion.EqualTo(emulatedVersion) { + binVersion, emulatedVersion := c.EffectiveVersion.BinaryVersion(), c.EffectiveVersion.EmulationVersion() + if binVersion != nil && emulatedVersion != nil && (binVersion.Major() != emulatedVersion.Major() || binVersion.Minor() != emulatedVersion.Minor()) { for _, version := range registry.PrioritizedVersionsAllGroups() { if strings.Contains(version.Version, "alpha") { - klog.Warningf("alpha api enabled with emulated version %s instead of the binary's version %s, this is unsupported, proceed at your own risk: api=%s", emulatedVersion, binVersion, version.String()) + // Check if this alpha API is actually enabled before warning + entireVersionEnabled := c.MergedResourceConfig.ExplicitGroupVersionConfigs[version] + individualResourceEnabled := false + for resource, enabled := range c.MergedResourceConfig.ExplicitResourceConfigs { + if enabled && resource.Group == version.Group && resource.Version == version.Version { + individualResourceEnabled = true + break + } + } + if entireVersionEnabled || individualResourceEnabled { + klog.Warningf("alpha api enabled with emulated version %s instead of the binary's version %s, this is unsupported, proceed at your own risk: api=%s", emulatedVersion, binVersion, version.String()) + } } } } diff --git a/vendor/k8s.io/client-go/tools/cache/controller.go b/vendor/k8s.io/client-go/tools/cache/controller.go index 5f983b6b63..e07c04e625 100644 --- a/vendor/k8s.io/client-go/tools/cache/controller.go +++ b/vendor/k8s.io/client-go/tools/cache/controller.go @@ -596,16 +596,7 @@ func newInformer(clientState Store, options InformerOptions) Controller { // KeyLister, that way resync operations will result in the correct set // of update/delete deltas. - var fifo Queue - if clientgofeaturegate.FeatureGates().Enabled(clientgofeaturegate.InOrderInformers) { - fifo = NewRealFIFO(MetaNamespaceKeyFunc, clientState, options.Transform) - } else { - fifo = NewDeltaFIFOWithOptions(DeltaFIFOOptions{ - KnownObjects: clientState, - EmitDeltaTypeReplaced: true, - Transformer: options.Transform, - }) - } + fifo := newQueueFIFO(clientState, options.Transform) cfg := &Config{ Queue: fifo, @@ -623,3 +614,15 @@ func newInformer(clientState Store, options InformerOptions) Controller { } return New(cfg) } + +func newQueueFIFO(clientState Store, transform TransformFunc) Queue { + if clientgofeaturegate.FeatureGates().Enabled(clientgofeaturegate.InOrderInformers) { + return NewRealFIFO(MetaNamespaceKeyFunc, clientState, transform) + } else { + return NewDeltaFIFOWithOptions(DeltaFIFOOptions{ + KnownObjects: clientState, + EmitDeltaTypeReplaced: true, + Transformer: transform, + }) + } +} diff --git a/vendor/k8s.io/client-go/tools/cache/delta_fifo.go b/vendor/k8s.io/client-go/tools/cache/delta_fifo.go index 9d9e238ccc..a0d7a834aa 100644 --- a/vendor/k8s.io/client-go/tools/cache/delta_fifo.go +++ b/vendor/k8s.io/client-go/tools/cache/delta_fifo.go @@ -270,7 +270,8 @@ func NewDeltaFIFOWithOptions(opts DeltaFIFOOptions) *DeltaFIFO { } var ( - _ = Queue(&DeltaFIFO{}) // DeltaFIFO is a Queue + _ = Queue(&DeltaFIFO{}) // DeltaFIFO is a Queue + _ = TransformingStore(&DeltaFIFO{}) // DeltaFIFO implements TransformingStore to allow memory optimizations ) var ( diff --git a/vendor/k8s.io/client-go/tools/cache/reflector.go b/vendor/k8s.io/client-go/tools/cache/reflector.go index ee9be77278..6fd43375f6 100644 --- a/vendor/k8s.io/client-go/tools/cache/reflector.go +++ b/vendor/k8s.io/client-go/tools/cache/reflector.go @@ -80,7 +80,7 @@ type ReflectorStore interface { // TransformingStore is an optional interface that can be implemented by the provided store. // If implemented on the provided store reflector will use the same transformer in its internal stores. type TransformingStore interface { - Store + ReflectorStore Transformer() TransformFunc } @@ -726,9 +726,11 @@ func (r *Reflector) watchList(ctx context.Context) (watch.Interface, error) { return false } + var transformer TransformFunc storeOpts := []StoreOption{} if tr, ok := r.store.(TransformingStore); ok && tr.Transformer() != nil { - storeOpts = append(storeOpts, WithTransformer(tr.Transformer())) + transformer = tr.Transformer() + storeOpts = append(storeOpts, WithTransformer(transformer)) } initTrace := trace.New("Reflector WatchList", trace.Field{Key: "name", Value: r.name}) @@ -788,7 +790,7 @@ func (r *Reflector) watchList(ctx context.Context) (watch.Interface, error) { // we utilize the temporaryStore to ensure independence from the current store implementation. // as of today, the store is implemented as a queue and will be drained by the higher-level // component as soon as it finishes replacing the content. - checkWatchListDataConsistencyIfRequested(ctx, r.name, resourceVersion, r.listerWatcher.ListWithContext, temporaryStore.List) + checkWatchListDataConsistencyIfRequested(ctx, r.name, resourceVersion, r.listerWatcher.ListWithContext, transformer, temporaryStore.List) if err := r.store.Replace(temporaryStore.List(), resourceVersion); err != nil { return nil, fmt.Errorf("unable to sync watch-list result: %w", err) diff --git a/vendor/k8s.io/client-go/tools/cache/reflector_data_consistency_detector.go b/vendor/k8s.io/client-go/tools/cache/reflector_data_consistency_detector.go index a7e0d9c436..4119c78a6c 100644 --- a/vendor/k8s.io/client-go/tools/cache/reflector_data_consistency_detector.go +++ b/vendor/k8s.io/client-go/tools/cache/reflector_data_consistency_detector.go @@ -33,11 +33,11 @@ import ( // // Note that this function will panic when data inconsistency is detected. // This is intentional because we want to catch it in the CI. -func checkWatchListDataConsistencyIfRequested[T runtime.Object, U any](ctx context.Context, identity string, lastSyncedResourceVersion string, listFn consistencydetector.ListFunc[T], retrieveItemsFn consistencydetector.RetrieveItemsFunc[U]) { +func checkWatchListDataConsistencyIfRequested[T runtime.Object, U any](ctx context.Context, identity string, lastSyncedResourceVersion string, listFn consistencydetector.ListFunc[T], listItemTransformFunc func(interface{}) (interface{}, error), retrieveItemsFn consistencydetector.RetrieveItemsFunc[U]) { if !consistencydetector.IsDataConsistencyDetectionForWatchListEnabled() { return } // for informers we pass an empty ListOptions because // listFn might be wrapped for filtering during informer construction. - consistencydetector.CheckDataConsistency(ctx, identity, lastSyncedResourceVersion, listFn, metav1.ListOptions{}, retrieveItemsFn) + consistencydetector.CheckDataConsistency(ctx, identity, lastSyncedResourceVersion, listFn, listItemTransformFunc, metav1.ListOptions{}, retrieveItemsFn) } diff --git a/vendor/k8s.io/client-go/tools/cache/shared_informer.go b/vendor/k8s.io/client-go/tools/cache/shared_informer.go index 99e5fcd180..1c12aa2d64 100644 --- a/vendor/k8s.io/client-go/tools/cache/shared_informer.go +++ b/vendor/k8s.io/client-go/tools/cache/shared_informer.go @@ -539,16 +539,7 @@ func (s *sharedIndexInformer) RunWithContext(ctx context.Context) { s.startedLock.Lock() defer s.startedLock.Unlock() - var fifo Queue - if clientgofeaturegate.FeatureGates().Enabled(clientgofeaturegate.InOrderInformers) { - fifo = NewRealFIFO(MetaNamespaceKeyFunc, s.indexer, s.transform) - } else { - fifo = NewDeltaFIFOWithOptions(DeltaFIFOOptions{ - KnownObjects: s.indexer, - EmitDeltaTypeReplaced: true, - Transformer: s.transform, - }) - } + fifo := newQueueFIFO(s.indexer, s.transform) cfg := &Config{ Queue: fifo, diff --git a/vendor/k8s.io/client-go/tools/cache/the_real_fifo.go b/vendor/k8s.io/client-go/tools/cache/the_real_fifo.go index ef322bea85..b907410dc0 100644 --- a/vendor/k8s.io/client-go/tools/cache/the_real_fifo.go +++ b/vendor/k8s.io/client-go/tools/cache/the_real_fifo.go @@ -61,7 +61,8 @@ type RealFIFO struct { } var ( - _ = Queue(&RealFIFO{}) // RealFIFO is a Queue + _ = Queue(&RealFIFO{}) // RealFIFO is a Queue + _ = TransformingStore(&RealFIFO{}) // RealFIFO implements TransformingStore to allow memory optimizations ) // Close the queue. diff --git a/vendor/k8s.io/client-go/util/consistencydetector/data_consistency_detector.go b/vendor/k8s.io/client-go/util/consistencydetector/data_consistency_detector.go index 06f172d82b..72c0124a0f 100644 --- a/vendor/k8s.io/client-go/util/consistencydetector/data_consistency_detector.go +++ b/vendor/k8s.io/client-go/util/consistencydetector/data_consistency_detector.go @@ -45,16 +45,28 @@ func IsDataConsistencyDetectionForWatchListEnabled() bool { return dataConsistencyDetectionForWatchListEnabled } +// SetDataConsistencyDetectionForWatchListEnabledForTest allows to enable/disable data consistency detection for testing purposes. +// It returns a function that restores the original value. +func SetDataConsistencyDetectionForWatchListEnabledForTest(enabled bool) func() { + original := dataConsistencyDetectionForWatchListEnabled + dataConsistencyDetectionForWatchListEnabled = enabled + return func() { + dataConsistencyDetectionForWatchListEnabled = original + } +} + type RetrieveItemsFunc[U any] func() []U type ListFunc[T runtime.Object] func(ctx context.Context, options metav1.ListOptions) (T, error) +type TransformFunc func(interface{}) (interface{}, error) + // CheckDataConsistency exists solely for testing purposes. // we cannot use checkWatchListDataConsistencyIfRequested because // it is guarded by an environmental variable. // we cannot manipulate the environmental variable because // it will affect other tests in this package. -func CheckDataConsistency[T runtime.Object, U any](ctx context.Context, identity string, lastSyncedResourceVersion string, listFn ListFunc[T], listOptions metav1.ListOptions, retrieveItemsFn RetrieveItemsFunc[U]) { +func CheckDataConsistency[T runtime.Object, U any](ctx context.Context, identity string, lastSyncedResourceVersion string, listFn ListFunc[T], listItemTransformFunc TransformFunc, listOptions metav1.ListOptions, retrieveItemsFn RetrieveItemsFunc[U]) { if !canFormAdditionalListCall(lastSyncedResourceVersion, listOptions) { klog.V(4).Infof("data consistency check for %s is enabled but the parameters (RV, ListOptions) doesn't allow for creating a valid LIST request. Skipping the data consistency check.", identity) return @@ -84,6 +96,15 @@ func CheckDataConsistency[T runtime.Object, U any](ctx context.Context, identity if err != nil { panic(err) // this should never happen } + if listItemTransformFunc != nil { + for i := range rawListItems { + obj, err := listItemTransformFunc(rawListItems[i]) + if err != nil { + panic(err) + } + rawListItems[i] = obj.(runtime.Object) + } + } listItems := toMetaObjectSliceOrDie(rawListItems) sort.Sort(byUID(listItems)) diff --git a/vendor/modules.txt b/vendor/modules.txt index 161f47aac4..419ea81904 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -86,6 +86,13 @@ github.com/cenkalti/backoff/v5 # github.com/cespare/xxhash/v2 v2.3.0 ## explicit; go 1.11 github.com/cespare/xxhash/v2 +# github.com/clipperhouse/stringish v0.1.1 +## explicit; go 1.18 +github.com/clipperhouse/stringish +# github.com/clipperhouse/uax29/v2 v2.3.0 +## explicit; go 1.18 +github.com/clipperhouse/uax29/v2/graphemes +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 @@ -431,11 +438,11 @@ github.com/h2non/go-is-svg # github.com/inconshreveable/mousetrap v1.1.0 ## explicit; go 1.18 github.com/inconshreveable/mousetrap -# github.com/itchyny/gojq v0.12.17 -## explicit; go 1.21 +# github.com/itchyny/gojq v0.12.18 +## explicit; go 1.24.0 github.com/itchyny/gojq -# github.com/itchyny/timefmt-go v0.1.6 -## explicit; go 1.20 +# github.com/itchyny/timefmt-go v0.1.7 +## explicit; go 1.24 github.com/itchyny/timefmt-go # github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 ## explicit @@ -492,13 +499,13 @@ github.com/mattn/go-colorable # github.com/mattn/go-isatty v0.0.20 ## explicit; go 1.15 github.com/mattn/go-isatty -# github.com/mattn/go-runewidth v0.0.16 -## explicit; go 1.9 +# 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 ## explicit; go 1.19 github.com/mattn/go-sqlite3 -# github.com/maxbrunsfeld/counterfeiter/v6 v6.12.0 +# github.com/maxbrunsfeld/counterfeiter/v6 v6.12.1 ## explicit; go 1.24.0 github.com/maxbrunsfeld/counterfeiter/v6 github.com/maxbrunsfeld/counterfeiter/v6/arguments @@ -559,7 +566,7 @@ github.com/munnerz/goautoneg # github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f ## explicit github.com/mxk/go-flowrate/flowrate -# github.com/onsi/ginkgo/v2 v2.27.2 +# github.com/onsi/ginkgo/v2 v2.27.3 ## explicit; go 1.23.0 github.com/onsi/ginkgo/v2/config github.com/onsi/ginkgo/v2/formatter @@ -579,7 +586,7 @@ github.com/onsi/ginkgo/v2/internal/parallel_support github.com/onsi/ginkgo/v2/internal/reporters github.com/onsi/ginkgo/v2/reporters github.com/onsi/ginkgo/v2/types -# github.com/onsi/gomega v1.38.2 +# github.com/onsi/gomega v1.38.3 ## explicit; go 1.23.0 github.com/onsi/gomega/gstruct/errors github.com/onsi/gomega/types @@ -618,11 +625,12 @@ github.com/openshift/client-go/config/informers/externalversions/internalinterfa github.com/openshift/client-go/config/listers/config/v1 github.com/openshift/client-go/config/listers/config/v1alpha1 github.com/openshift/client-go/config/listers/config/v1alpha2 -# github.com/operator-framework/api v0.36.0 => ./staging/api +# github.com/operator-framework/api v0.37.0 => ./staging/api ## explicit; go 1.24.6 github.com/operator-framework/api/crds github.com/operator-framework/api/pkg/constraints github.com/operator-framework/api/pkg/encoding +github.com/operator-framework/api/pkg/lib/release github.com/operator-framework/api/pkg/lib/version github.com/operator-framework/api/pkg/manifests github.com/operator-framework/api/pkg/operators @@ -821,7 +829,7 @@ github.com/prometheus/client_golang/prometheus/testutil/promlint/validations # github.com/prometheus/client_model v0.6.2 ## explicit; go 1.22.0 github.com/prometheus/client_model/go -# github.com/prometheus/common v0.67.2 +# github.com/prometheus/common v0.67.4 ## explicit; go 1.24.0 github.com/prometheus/common/expfmt github.com/prometheus/common/model @@ -830,9 +838,6 @@ github.com/prometheus/common/model github.com/prometheus/procfs github.com/prometheus/procfs/internal/fs github.com/prometheus/procfs/internal/util -# github.com/rivo/uniseg v0.4.7 -## explicit; go 1.18 -github.com/rivo/uniseg # github.com/russross/blackfriday/v2 v2.1.0 ## explicit github.com/russross/blackfriday/v2 @@ -858,7 +863,7 @@ github.com/sirupsen/logrus ## explicit; go 1.14 github.com/smallstep/pkcs7 github.com/smallstep/pkcs7/internal/legacy/x509 -# github.com/spf13/cobra v1.10.1 +# github.com/spf13/cobra v1.10.2 ## explicit; go 1.15 github.com/spf13/cobra # github.com/spf13/pflag v1.0.10 @@ -955,8 +960,8 @@ go.opencensus.io/internal go.opencensus.io/trace go.opencensus.io/trace/internal go.opencensus.io/trace/tracestate -# go.opentelemetry.io/auto/sdk v1.1.0 -## explicit; go 1.22.0 +# go.opentelemetry.io/auto/sdk v1.2.1 +## 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 @@ -969,7 +974,7 @@ 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.37.0 +# go.opentelemetry.io/otel v1.38.0 ## explicit; go 1.23.0 go.opentelemetry.io/otel go.opentelemetry.io/otel/attribute @@ -986,7 +991,8 @@ 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.34.0 +go.opentelemetry.io/otel/semconv/v1.37.0 +go.opentelemetry.io/otel/semconv/v1.37.0/otelconv # go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0 ## explicit; go 1.23.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace @@ -998,12 +1004,12 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/envconfig go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/otlpconfig go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/retry -# go.opentelemetry.io/otel/metric v1.37.0 +# go.opentelemetry.io/otel/metric v1.38.0 ## explicit; go 1.23.0 go.opentelemetry.io/otel/metric go.opentelemetry.io/otel/metric/embedded go.opentelemetry.io/otel/metric/noop -# go.opentelemetry.io/otel/sdk v1.37.0 +# go.opentelemetry.io/otel/sdk v1.38.0 ## explicit; go 1.23.0 go.opentelemetry.io/otel/sdk go.opentelemetry.io/otel/sdk/instrumentation @@ -1011,7 +1017,8 @@ go.opentelemetry.io/otel/sdk/internal/env go.opentelemetry.io/otel/sdk/internal/x go.opentelemetry.io/otel/sdk/resource go.opentelemetry.io/otel/sdk/trace -# go.opentelemetry.io/otel/trace v1.37.0 +go.opentelemetry.io/otel/sdk/trace/internal/x +# go.opentelemetry.io/otel/trace v1.38.0 ## explicit; go 1.23.0 go.opentelemetry.io/otel/trace go.opentelemetry.io/otel/trace/embedded @@ -1126,7 +1133,7 @@ go.yaml.in/yaml/v2 # go.yaml.in/yaml/v3 v3.0.4 ## explicit; go 1.16 go.yaml.in/yaml/v3 -# golang.org/x/crypto v0.44.0 +# golang.org/x/crypto v0.46.0 ## explicit; go 1.24.0 golang.org/x/crypto/cast5 golang.org/x/crypto/cryptobyte @@ -1154,13 +1161,13 @@ golang.org/x/exp/slices ## explicit; go 1.11 golang.org/x/lint golang.org/x/lint/golint -# golang.org/x/mod v0.29.0 +# golang.org/x/mod v0.30.0 ## explicit; go 1.24.0 golang.org/x/mod/internal/lazyregexp golang.org/x/mod/modfile golang.org/x/mod/module golang.org/x/mod/semver -# golang.org/x/net v0.47.0 +# golang.org/x/net v0.48.0 ## explicit; go 1.24.0 golang.org/x/net/context golang.org/x/net/html @@ -1180,22 +1187,22 @@ golang.org/x/net/websocket ## explicit; go 1.24.0 golang.org/x/oauth2 golang.org/x/oauth2/internal -# golang.org/x/sync v0.18.0 +# golang.org/x/sync v0.19.0 ## explicit; go 1.24.0 golang.org/x/sync/errgroup golang.org/x/sync/semaphore golang.org/x/sync/singleflight -# golang.org/x/sys v0.38.0 +# golang.org/x/sys v0.39.0 ## explicit; go 1.24.0 golang.org/x/sys/cpu golang.org/x/sys/plan9 golang.org/x/sys/unix golang.org/x/sys/windows golang.org/x/sys/windows/registry -# golang.org/x/term v0.37.0 +# golang.org/x/term v0.38.0 ## explicit; go 1.24.0 golang.org/x/term -# golang.org/x/text v0.31.0 +# golang.org/x/text v0.32.0 ## explicit; go 1.24.0 golang.org/x/text/cases golang.org/x/text/feature/plural @@ -1217,7 +1224,7 @@ golang.org/x/text/unicode/norm # golang.org/x/time v0.14.0 ## explicit; go 1.24.0 golang.org/x/time/rate -# golang.org/x/tools v0.38.0 +# golang.org/x/tools v0.39.0 ## explicit; go 1.24.0 golang.org/x/tools/cover golang.org/x/tools/go/analysis @@ -1251,8 +1258,8 @@ gomodules.xyz/jsonpatch/v2 # google.golang.org/genproto v0.0.0-20250603155806-513f23925822 ## explicit; go 1.23.0 google.golang.org/genproto/protobuf/field_mask -# google.golang.org/genproto/googleapis/api v0.0.0-20250804133106-a7a43d27e69b -## explicit; go 1.23.0 +# google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8 +## explicit; go 1.24.0 google.golang.org/genproto/googleapis/api google.golang.org/genproto/googleapis/api/annotations google.golang.org/genproto/googleapis/api/expr/v1alpha1 @@ -1261,7 +1268,7 @@ google.golang.org/genproto/googleapis/api/httpbody ## explicit; go 1.24.0 google.golang.org/genproto/googleapis/rpc/errdetails google.golang.org/genproto/googleapis/rpc/status -# google.golang.org/grpc v1.76.0 +# google.golang.org/grpc v1.77.0 ## explicit; go 1.24.0 google.golang.org/grpc google.golang.org/grpc/attributes @@ -1272,7 +1279,6 @@ google.golang.org/grpc/balancer/endpointsharding google.golang.org/grpc/balancer/grpclb/state google.golang.org/grpc/balancer/pickfirst google.golang.org/grpc/balancer/pickfirst/internal -google.golang.org/grpc/balancer/pickfirst/pickfirstleaf google.golang.org/grpc/balancer/roundrobin google.golang.org/grpc/binarylog/grpc_binarylog_v1 google.golang.org/grpc/channelz @@ -1289,6 +1295,7 @@ google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp google.golang.org/grpc/credentials/insecure google.golang.org/grpc/encoding google.golang.org/grpc/encoding/gzip +google.golang.org/grpc/encoding/internal google.golang.org/grpc/encoding/proto google.golang.org/grpc/experimental/stats google.golang.org/grpc/grpclog @@ -1414,7 +1421,7 @@ gopkg.in/yaml.v2 # gopkg.in/yaml.v3 v3.0.1 ## explicit gopkg.in/yaml.v3 -# k8s.io/api v0.34.2 +# k8s.io/api v0.34.3 ## explicit; go 1.24.0 k8s.io/api/admission/v1 k8s.io/api/admission/v1beta1 @@ -1476,7 +1483,7 @@ k8s.io/api/storage/v1 k8s.io/api/storage/v1alpha1 k8s.io/api/storage/v1beta1 k8s.io/api/storagemigration/v1alpha1 -# k8s.io/apiextensions-apiserver v0.34.2 +# k8s.io/apiextensions-apiserver v0.34.3 ## explicit; go 1.24.0 k8s.io/apiextensions-apiserver/pkg/apihelpers k8s.io/apiextensions-apiserver/pkg/apis/apiextensions @@ -1498,7 +1505,7 @@ k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/scheme k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1 k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1beta1 k8s.io/apiextensions-apiserver/pkg/features -# k8s.io/apimachinery v0.34.2 +# k8s.io/apimachinery v0.34.3 ## explicit; go 1.24.0 k8s.io/apimachinery/pkg/api/equality k8s.io/apimachinery/pkg/api/errors @@ -1573,7 +1580,7 @@ k8s.io/apimachinery/pkg/watch k8s.io/apimachinery/third_party/forked/golang/json k8s.io/apimachinery/third_party/forked/golang/netutil k8s.io/apimachinery/third_party/forked/golang/reflect -# k8s.io/apiserver v0.34.2 +# k8s.io/apiserver v0.34.3 ## explicit; go 1.24.0 k8s.io/apiserver/pkg/admission k8s.io/apiserver/pkg/admission/configuration @@ -1738,7 +1745,7 @@ k8s.io/apiserver/plugin/pkg/authorizer/webhook/metrics # k8s.io/cli-runtime v0.33.2 ## explicit; go 1.24.0 k8s.io/cli-runtime/pkg/printers -# k8s.io/client-go v0.34.2 +# k8s.io/client-go v0.34.3 ## explicit; go 1.24.0 k8s.io/client-go/applyconfigurations k8s.io/client-go/applyconfigurations/admissionregistration/v1 @@ -2091,7 +2098,7 @@ k8s.io/client-go/util/jsonpath k8s.io/client-go/util/keyutil k8s.io/client-go/util/retry k8s.io/client-go/util/workqueue -# k8s.io/code-generator v0.34.2 +# k8s.io/code-generator v0.34.3 ## explicit; go 1.24.0 k8s.io/code-generator k8s.io/code-generator/cmd/applyconfiguration-gen @@ -2127,7 +2134,7 @@ k8s.io/code-generator/cmd/register-gen/generators k8s.io/code-generator/pkg/namer k8s.io/code-generator/pkg/util k8s.io/code-generator/third_party/forked/golang/reflect -# k8s.io/component-base v0.34.2 +# k8s.io/component-base v0.34.3 ## explicit; go 1.24.0 k8s.io/component-base/cli/flag k8s.io/component-base/compatibility @@ -2174,13 +2181,13 @@ k8s.io/klog/v2/internal/severity k8s.io/klog/v2/internal/sloghandler k8s.io/klog/v2/internal/verbosity k8s.io/klog/v2/textlogger -# k8s.io/kms v0.34.2 +# k8s.io/kms v0.34.3 ## explicit; go 1.24.0 k8s.io/kms/apis/v1beta1 k8s.io/kms/apis/v2 k8s.io/kms/pkg/service k8s.io/kms/pkg/util -# k8s.io/kube-aggregator v0.34.2 +# k8s.io/kube-aggregator v0.34.3 ## explicit; go 1.24.0 k8s.io/kube-aggregator/pkg/apis/apiregistration k8s.io/kube-aggregator/pkg/apis/apiregistration/v1